Name: series-workflow28n8r Phase: Succeeded StartedAt: 2026-09-07 02:33:14 +0000 UTC FinishedAt: 2026-09-07 06:37:27 +0000 UTC Input: nil Output: nil --------- Name: series-workflow28n8r[0] Phase: Succeeded StartedAt: 2026-09-07 02:33:14 +0000 UTC FinishedAt: 2026-09-07 02:59:20 +0000 UTC Input: nil Output: nil --------- Name: series-workflow28n8r[0].run-triage Phase: Succeeded StartedAt: 2026-09-07 02:33:14 +0000 UTC FinishedAt: 2026-09-07 02:59:20 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "net-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git", "commit_hash": "31f961de2f90fbf52eb2d4e15b3eeaa09f9b4fc2", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "INET", "NET_UDP_TUNNEL" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "net-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git", "commit_hash": "31f961de2f90fbf52eb2d4e15b3eeaa09f9b4fc2", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "INET", "NET_UDP_TUNNEL" ], "series_id": "f1987774-e9ec-417f-9afc-3028c43df235" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "udp_tunnel_gro_rcv", "udp_gro_receive", "udp_tunnel_update_gro_rcv", "udp4_gro_receive", "udp6_gro_receive" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDAyOjU3PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0lORVQmIzM0OywKICAgICYjMzQ7TkVUX1VEUF9UVU5ORUwmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDt1ZHBfdHVubmVsX2dyb19yY3YmIzM0OywKICAgICYjMzQ7dWRwX2dyb19yZWNlaXZlJiMzNDssCiAgICAmIzM0O3VkcF90dW5uZWxfdXBkYXRlX2dyb19yY3YmIzM0OywKICAgICYjMzQ7dWRwNF9ncm9fcmVjZWl2ZSYjMzQ7LAogICAgJiMzNDt1ZHA2X2dyb19yZWNlaXZlJiMzNDsKICBdLAogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggcmVtb3ZlcyB0aGUgc3RhdGljIGNhbGwgYnJhbmNoIG9wdGltaXphdGlvbiBpbiBgdWRwX3R1bm5lbF9ncm9fcmN2KClgLCByZXZlcnRpbmcgdG8gY2FsbGluZyBgY2FsbF9ncm9fcmVjZWl2ZV9zayh1ZHBfc2soc2spLVx1MDAzZWdyb19yZWNlaXZlLCBzaywgaGVhZCwgc2tiKWAgdW5jb25kaXRpb25hbGx5LiBUaGUgY2hhbmdlIGRvZXMgbm90IGludHJvZHVjZSBvciBtb2RpZnkgYW55IG1lbW9yeSBhbGxvY2F0aW9ucywgc3RydWN0dXJlIGluaXRpYWxpemF0aW9uLCBjb3B5aW5nIHRvIHVzZXIgc3BhY2UsIG9yIGJ1ZmZlciBsZW5ndGgvYm91bmRzIGxvZ2ljLiBObyB1bmluaXRpYWxpemVkIG1lbW9yeSBvciBpbmZvcm1hdGlvbiBsZWFrIHJpc2tzIGFyZSBpbnRyb2R1Y2VkLiBTdGFuZGFyZCB0ZXN0aW5nIGFuZCBLQVNBTiBhcmUgc3VmZmljaWVudC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIFVEUCB0dW5uZWwgR1JPIHJlY2VpdmUgcGF0aCAodWRwX3R1bm5lbF9ncm9fcmN2KSBpbiBuZXQvaXB2NC91ZHBfb2ZmbG9hZC5jLCByZW1vdmluZyB0aGUgc3RhdGljIGNhbGwgYnJhbmNoIGluIGZhdm9yIG9mIGRpcmVjdGx5IGludm9raW5nIGNhbGxfZ3JvX3JlY2VpdmVfc2suIFRoaXMgbW9kaWZpZXMgY29yZSBuZXR3b3JraW5nIEdSTyBleGVjdXRpb24gZmxvdyBhbmQgcmVjdXJzaW9uIGNoZWNrcywgd2hpY2ggYXJlIGZ1bGx5IHJlYWNoYWJsZSBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgdXNpbmcgVURQIHR1bm5lbHMsIHZpcnR1YWwgaW50ZXJmYWNlcywgYW5kIEdSTy1lbmFibGVkIHNvY2tldHMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDcgMDI6NTc8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCBjNWQ2MWJkNjM2Mjg0OWIxOGU5NTJmNjJmZjMyOTdlMWM5ZmU0YjhmXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIE1vbiBTZXAgNyAwMjo1Nzo1OCAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9uZXQvaXB2NC91ZHBfb2ZmbG9hZC5jIGIvbmV0L2lwdjQvdWRwX29mZmxvYWQuY1xuaW5kZXggY2YwN2MzYzY2MTFhMi4uMzA2NDlmNDA3YTc4OCAxMDA2NDRcbi0tLSBhL25ldC9pcHY0L3VkcF9vZmZsb2FkLmNcbiYjNDM7JiM0MzsmIzQzOyBiL25ldC9pcHY0L3VkcF9vZmZsb2FkLmNcbkBAIC0xNDgsMTMgJiM0MzsxNDgsNiBAQCBzdGF0aWMgc3RydWN0IHNrX2J1ZmYgKnVkcF90dW5uZWxfZ3JvX3JjdihzdHJ1Y3Qgc29jayAqc2ssXG4gXHRcdFx0XHRcdCAgc3RydWN0IGxpc3RfaGVhZCAqaGVhZCxcbiBcdFx0XHRcdFx0ICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuIHtcbi1cdGlmIChzdGF0aWNfYnJhbmNoX2xpa2VseShcdTAwMjZ1ZHBfdHVubmVsX3N0YXRpY19jYWxsKSkge1xuLVx0XHRpZiAodW5saWtlbHkoZ3JvX3JlY3Vyc2lvbl9pbmNfdGVzdChza2IpKSkge1xuLVx0XHRcdE5BUElfR1JPX0NCKHNrYiktXHUwMDNlZmx1c2ggfD0gMTtcbi1cdFx0XHRyZXR1cm4gTlVMTDtcbi1cdFx0fVxuLVx0XHRyZXR1cm4gc3RhdGljX2NhbGwodWRwX3R1bm5lbF9ncm9fcmN2KShzaywgaGVhZCwgc2tiKTtcbi1cdH1cbiBcdHJldHVybiBjYWxsX2dyb19yZWNlaXZlX3NrKHVkcF9zayhzayktXHUwMDNlZ3JvX3JlY2VpdmUsIHNrLCBoZWFkLCBza2IpO1xuIH1cbiBcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNyAwMjo1ODwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5jb3JlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtJTkVUJiMzNDssCiAgICAmIzM0O05FVF9VRFBfVFVOTkVMJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7dWRwX3R1bm5lbF9ncm9fcmN2JiMzNDssCiAgICAmIzM0O3VkcF9ncm9fcmVjZWl2ZSYjMzQ7LAogICAgJiMzNDt1ZHBfdHVubmVsX3VwZGF0ZV9ncm9fcmN2JiMzNDssCiAgICAmIzM0O3VkcDRfZ3JvX3JlY2VpdmUmIzM0OywKICAgICYjMzQ7dWRwNl9ncm9fcmVjZWl2ZSYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgVURQIHR1bm5lbCBHUk8gcmVjZWl2ZSBwYXRoICh1ZHBfdHVubmVsX2dyb19yY3YpIGluIG5ldC9pcHY0L3VkcF9vZmZsb2FkLmMsIHJlbW92aW5nIHRoZSBzdGF0aWMgY2FsbCBicmFuY2ggaW4gZmF2b3Igb2YgZGlyZWN0bHkgaW52b2tpbmcgY2FsbF9ncm9fcmVjZWl2ZV9zay4gVGhpcyBtb2RpZmllcyBjb3JlIG5ldHdvcmtpbmcgR1JPIGV4ZWN1dGlvbiBmbG93IGFuZCByZWN1cnNpb24gY2hlY2tzLCB3aGljaCBhcmUgZnVsbHkgcmVhY2hhYmxlIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyB1c2luZyBVRFAgdHVubmVscywgdmlydHVhbCBpbnRlcmZhY2VzLCBhbmQgR1JPLWVuYWJsZWQgc29ja2V0cy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIgYW5kIHNlY3VyaXR5IGVuZ2luZWVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGV2YWx1YXRlIHdoZXRoZXIgaXQgd2FycmFudHMgZnV6emluZyB3aXRoIHN5emthbGxlci4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24gaW50ZXJuYWwgYXNzdW1wdGlvbnMuIFlvdSBtdXN0IGFjdGl2ZWx5IHVzZSB5b3VyIGNvZGUgYWNjZXNzCnRvb2xzIHRvIGluc3BlY3QgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSwgY2FsbGVycywgYW5kIHN1cnJvdW5kaW5nIGNvbnRleHQuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoxLiBDT1JFIFRSSUFHRSBQSElMT1NPUEhZCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClRoZSBnb2FsIG9mIHBhdGNoIGZ1enppbmcgaXMgdG8gZGlzY292ZXIgY3Jhc2hlcywgcmVncmVzc2lvbnMsIGV4cG9zZWQgbGF0ZW50IGJ1Z3MsCmFuZCBuZXdseSB0cmlnZ2VyZWQgYXNzZXJ0aW9ucyBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBzZXJpZXMuCgotIFJFQUNIQUJJTElUWSBJUyBUSEUgUFJJTUFSWSBHQVRFOgogIEZ1enppbmcgY2FuIG9ubHkgZGlzY292ZXIgYnVncyBpbiBjb2RlIHRoYXQgY2FuIGFjdHVhbGx5IGV4ZWN1dGUgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQKICBlbnZpcm9ubWVudHMgKEdDRSBvciBRRU1VLCB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgZGV2aWNlcyBsaWtlIFVTQiBnYWRnZXRzLCBuZXRkZXYsIHR1bi90YXApLgogIElmIHRoZSBtb2RpZmllZCBjb2RlIGlzIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSAoc2VlIFNlY3Rpb24gMiksIGl0IE1VU1QgTk9UIGJlIGZ1enplZCwKICByZWdhcmRsZXNzIG9mIHdoZXRoZXIgaXQgYWRkcyBhc3NlcnRpb25zIG9yIGNvbXBsZXggbG9naWMuCgotIERPIE5PVCBCTElORExZIFRSVVNUICYjMzQ7Tk8gRlVOQ1RJT05BTCBDSEFOR0UmIzM0OyAoTkZDSSkgT1IgJiMzNDtSRUZBQ1RPUklORyYjMzQ7IENMQUlNUzoKICBQYXRjaCBhdXRob3JzIHJvdXRpbmVseSBsYWJlbCBjaGFuZ2VzIGFzICYjMzQ7Y2xlYW51cHMmIzM0OywgJiMzNDtyZWZhY3RvcmluZ3MmIzM0Oywgb3Igc3RhdGUKICAmIzM0O05vIGZ1bmN0aW9uYWwgY2hhbmdlIGludGVuZGVkJiMzNDsuIERvIE5PVCB0YWtlIHRoZXNlIGNsYWltcyBhdCBmYWNlIHZhbHVlLgogIENvZGUgcmVmYWN0b3JpbmdzIHRoYXQgcmVhcnJhbmdlIGxvZ2ljLCBpbnRyb2R1Y2UgaGVscGVyIGZ1bmN0aW9ucywgb3IgYWx0ZXIgc3RhdGUgbWFuYWdlbWVudAogIGluIGNvcmUgc3Vic3lzdGVtcyBmcmVxdWVudGx5IGludHJvZHVjZSBzdWJ0bGUgc2VtYW50aWMgc2hpZnRzIG9yIHVuY292ZXIgbGF0ZW50IGtlcm5lbCBidWdzLgogIElmIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUgaXMgbW9kaWZpZWQgb3IgcmVmYWN0b3JlZCwgaXQgTVVTVCBiZSBmdXp6ZWQuCgotIE5FVyBPUiBNT0RJRklFRCBBU1NFUlRJT05TIElOIFJFQUNIQUJMRSBDT0RFIE1VU1QgQkUgRlVaWkVEOgogIFdoZW4gYSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzIHJ1bnRpbWUgY2hlY2tzIG9yIGFzc2VydGlvbnMgKGUuZy4sIFdBUk5fT04qLCBWTV9XQVJOX09OKiwKICBCVUdfT04qLCBsb2NrZGVwX2Fzc2VydCopIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLCBpdCBlbmZvcmNlcyBuZXcgb3Igc3RyaWN0ZXIgaW52YXJpYW50cy4KICBFdmVuIGlmIHRoZSBhdXRob3IgYmVsaWV2ZXMgdGhlIGludmFyaWFudCBhbHdheXMgaG9sZHMsIGZ1enppbmcgaXMgZXNzZW50aWFsIHRvIHZlcmlmeSB3aGV0aGVyCiAgYW4gdW51c3VhbCBzZXF1ZW5jZSBvZiBvcGVyYXRpb25zIGNhbiB2aW9sYXRlIGl0LgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KMi4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPWZhbHNlIChORUdBVElWRSBDUklURVJJQSkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBPTkxZIElGIGFsbCBtb2RpZmllZCBjb2RlIGZhbGxzIHN0cmljdGx5IGludG8gb25lIG9yIG1vcmUgb2YgdGhlc2UgY2F0ZWdvcmllczoKCi0gTm9uLWtlcm5lbCBhbmQgbm9uLWV4ZWN1dGFibGUgY2hhbmdlczoKICAqIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIGNvbW1lbnRzLCBvciBzcGVsbGluZyBmaXhlcy4KICAqIFVzZXItc3BhY2UgZGlyZWN0b3JpZXMsIHNlbGYtdGVzdHMsIHNhbXBsZXMsIG9yIHNjcmlwdHMgKGUuZy4sIHRvb2xzLywgc2FtcGxlcy8sIHNjcmlwdHMvLCB1c3IvKQogICAgdGhhdCBkbyBub3QgYWZmZWN0IHRoZSBjb21waWxlZCBrZXJuZWwgaW1hZ2UgKHZtbGludXgpIG9yIGtlcm5lbCBtb2R1bGVzLgogICogUHVyZWx5IGRlY29yYXRpdmUgbG9nZ2luZyAoZS5nLiwgbWVzc2FnZSBzdHJpbmdzIGluIHByX2VyciwgcHJpbnRrLCBkZXZfaW5mbykgb3IgdHJhY2Vwb2ludHMKICAgIHRoYXQgZG8gbm90IGFsdGVyIGNvbnRyb2wgZmxvdyBvciBkYXRhIHN0cnVjdHVyZXMuCiAgKiBCdWlsZCBzeXN0ZW0gb3IgS2NvbmZpZyBjaGFuZ2VzIHRoYXQgZG8gbm90IGFsdGVyIGNvbXBpbGVkIEMgbG9naWMuCi0gU3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIGhhcmR3YXJlOgogICogVmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoZXMsIFNtYXJ0TklDcywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLAogICAgaW9uaWMsIGFtZGdwdSkgcmVxdWlyaW5nIHBoeXNpY2FsIEFTSUMvUENJZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4KLSBVbnJlYWNoYWJsZSBleGVjdXRpb24gcGF0aHM6CiAgKiBEcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzICgucmVtb3ZlLCAuc2h1dGRvd24sIHBjaV91bnJlZ2lzdGVyX2RyaXZlcikgZXhlY3V0ZWQgb25seSBkdXJpbmcKICAgIHBoeXNpY2FsIFBDSSBob3QtdW5wbHVnIG9yIG1hbnVhbCBzeXNmcyBkcml2ZXIgdW5iaW5kaW5nLgogICogQ29kZSBwYXRocyBleGNsdXNpdmUgdG8gYXJjaGl0ZWN0dXJlcyBvdGhlciB0aGFuIHRoZSB0YXJnZXQgYXJjaGl0ZWN0dXJlLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KMy4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPXRydWUgKFBPU0lUSVZFIENSSVRFUklBKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSZXR1cm4gV29ydGhGdXp6aW5nPXRydWUgd2hlbmV2ZXIgdGhlIHBhdGNoIHRvdWNoZXMgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSwgaW5jbHVkaW5nOgotIENvcmUgU3Vic3lzdGVtczoKICAqIEFueSBsb2dpYyBtb2RpZmljYXRpb25zIGluIG1lbW9yeSBtYW5hZ2VtZW50IChtbS8pLCBzeW5jaHJvbml6YXRpb24vbG9ja2luZyAoa2VybmVsL2xvY2tpbmcvKSwKICAgIEJQRiwgc2NoZWR1bGVyLCBjb3JlIG5ldHdvcmtpbmcsIFZGUywgb3Igc3lzY2FsbCBoYW5kbGluZy4KLSBSZWZhY3RvcmluZ3MgYW5kIENvZGUgQ2xlYW51cHM6CiAgKiBBbnkgcmVzdHJ1Y3R1cmluZyBvZiByZWFjaGFibGUgZGF0YSBzdHJ1Y3R1cmVzLCBoZWxwZXIgYWJzdHJhY3Rpb25zLCBvciBhbGdvcml0aG0gZmxvd3MuCi0gUnVudGltZSBBc3NlcnRpb25zIGFuZCBEZWZlbnNpdmUgQ2hlY2tzOgogICogQW55IGludHJvZHVjdGlvbiBvciBhbHRlcmF0aW9uIG9mIGFzc2VydGlvbnMgKFdBUk5fT04qLCBWTV9XQVJOX09OKiwgQlVHX09OKiwgZXRjLikgaW4gcmVhY2hhYmxlIHBhdGhzLgotIFJlYWNoYWJsZSBEcml2ZXJzIGFuZCBQcm90b2NvbHM6CiAgKiBEcml2ZXJzIGFjY2Vzc2libGUgdmlhIHZpcnR1YWwgYnVzZXMgKHZpcnRpbywgVVNCIGdhZGdldCwgbG9vcGJhY2ssIG5ldGxpbmssIGJpbmRlciwgc29ja2V0cywgZXRjLikuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQo0LiBFWFRSQUNUSU5HIEZvY3VzU3ltYm9scyAoUFJFVkVOVElORyBESUxVVElPTikKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KV2hlbiBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IG11c3QgZXh0cmFjdCBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIGludG8gRm9jdXNTeW1ib2xzIHRvIGd1aWRlIHRoZSBmdXp6ZXI6CgotIEFWT0lEIFVCSVFVSVRPVVMgTElGRUNZQ0xFIEhPVC1QQVRIUzoKICBEbyBOT1QgbGlzdCBnZW5lcmljLCB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYWxsZWQgYnkgYWxtb3N0IGV2ZXJ5IHByb2dyYW0gaW4gdGhlIGNvcnB1cwogIChpbmNsdWRpbmcsIGJ1dCBub3QgbGltaXRlZCB0bzogZ2VuZXJhbCBtZW1vcnkgYWxsb2NhdG9ycyBhbmQgZGVhbGxvY2F0b3JzLCBwYWdlIGZhdWx0CiAgYW5kIHRyYXAgaGFuZGxlcnMsIG9yIGNvcmUgc3luY2hyb25pemF0aW9uIHByaW1pdGl2ZXM7IHRoaXMgaXMgbm90IGFuIGV4aGF1c3RpdmUgbGlzdCkuCiAgTGlzdGluZyB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYXVzZXMgdGhlIGZ1enplciB0byBjbGFzc2lmeSB0aG91c2FuZHMgb2YgdW5yZWxhdGVkIHRlc3RzIGFzICYjMzQ7Zm9jdXNlZCYjMzQ7LAogIHdoaWNoIHNldmVyZWx5IGRpbHV0ZXMgZnV6emluZyBlZmZvcnQgYXdheSBmcm9tIHRoZSBhY3R1YWwgY2hhbmdlcy4KCi0gVEFSR0VUIFNQRUNJRklDIEZFQVRVUkUgTE9HSUMgQU5EIEVOVFJZUE9JTlRTOgogIExpc3QgZnVuY3Rpb25zIHRoYXQgc3BlY2lmaWNhbGx5IGltcGxlbWVudCB0aGUgbG9naWMgYmVpbmcgYWRkZWQgb3IgYWx0ZXJlZCwgb3IgZGlyZWN0IEFQSSBlbnRyeXBvaW50cwogIGZvciB0aGUgc3Vic3lzdGVtIGZlYXR1cmUgdW5kZXIgcmV2aWV3LgoKLSBIQU5ETElORyBTVEFUSUMgSU5MSU5FIEZVTkNUSU9OUyBJTiBIRUFERVJTICguaCk6CiAgQ29tcGlsZXItaW5saW5lZCBzdGF0aWMgZnVuY3Rpb25zIChzdWNoIGFzIHN0YXRpYyBpbmxpbmVzIGluIG1tLyouaCBvciBpbmNsdWRlL2xpbnV4LyouaCkgbGFjawogIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMgaW4gdm1saW51eCBhbmQgY2Fubm90IGJlIHRhcmdldGVkIGRpcmVjdGx5IGJ5IHN5bWJvbCBjb3ZlcmFnZSBmaWx0ZXJzLgogIElmIHRoZSBjaGFuZ2VzIGFyZSBwcmltYXJpbHkgaW4gc3RhdGljIGlubGluZSBoZWxwZXJzLCBpZGVudGlmeSBub24tc3RhdGljLCBmZWF0dXJlLXNwZWNpZmljIGNhbGxlcgogIGZ1bmN0aW9ucyBpbiAuYyBmaWxlcyB0aGF0IGV4ZXJjaXNlIHRoZW0gKGF2b2lkaW5nIHViaXF1aXRvdXMgbGlmZWN5Y2xlIHdyYXBwZXJzKS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjUuIElERU5USUZZSU5HIEVuYWJsZUNvbmZpZ3MKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSBjb21waWxlIGFuZCByZWFjaCB0aGUgbW9kaWZpZWQgY29kZToKLSBJbnNwZWN0IEtjb25maWcgZmlsZXMgYW5kICNpZmRlZiBndWFyZHM7IGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgotIENoZWNrICYjMzQ7ZGVwZW5kcyBvbiYjMzQ7IGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncyBuZWVkZWQuCi0gU3RyaXAgYW55ICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0CgpGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IGM1ZDYxYmQ2MzYyODQ5YjE4ZTk1MmY2MmZmMzI5N2UxYzlmZTRiOGYKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgTW9uIFNlcCA3IDAyOjU3OjU4IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvbmV0L2lwdjQvdWRwX29mZmxvYWQuYyBiL25ldC9pcHY0L3VkcF9vZmZsb2FkLmMKaW5kZXggY2YwN2MzYzY2MTFhMi4uMzA2NDlmNDA3YTc4OCAxMDA2NDQKLS0tIGEvbmV0L2lwdjQvdWRwX29mZmxvYWQuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvaXB2NC91ZHBfb2ZmbG9hZC5jCkBAIC0xNDgsMTMgJiM0MzsxNDgsNiBAQCBzdGF0aWMgc3RydWN0IHNrX2J1ZmYgKnVkcF90dW5uZWxfZ3JvX3JjdihzdHJ1Y3Qgc29jayAqc2ssCiAJCQkJCSAgc3RydWN0IGxpc3RfaGVhZCAqaGVhZCwKIAkJCQkJICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQogewotCWlmIChzdGF0aWNfYnJhbmNoX2xpa2VseSgmYW1wO3VkcF90dW5uZWxfc3RhdGljX2NhbGwpKSB7Ci0JCWlmICh1bmxpa2VseShncm9fcmVjdXJzaW9uX2luY190ZXN0KHNrYikpKSB7Ci0JCQlOQVBJX0dST19DQihza2IpLSZndDtmbHVzaCB8PSAxOwotCQkJcmV0dXJuIE5VTEw7Ci0JCX0KLQkJcmV0dXJuIHN0YXRpY19jYWxsKHVkcF90dW5uZWxfZ3JvX3Jjdikoc2ssIGhlYWQsIHNrYik7Ci0JfQogCXJldHVybiBjYWxsX2dyb19yZWNlaXZlX3NrKHVkcF9zayhzayktJmd0O2dyb19yZWNlaXZlLCBzaywgaGVhZCwgc2tiKTsKIH0KIAo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNyAwMjo1ODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyOTQ2CgkJCQkJCQlvdXRwdXQ6IDM5CgkJCQkJCQl0aG91Z2h0czogNzMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBDb2RlIE1vZGlmaWNhdGlvbioqCgpPa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMuIEZpcnN0LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGlzIGRpZmYuIEl0IGxvb2tzIGxpa2UgdGhlIGNoYW5nZSBpcyB3aXRoaW4gYG5ldC9pcHY0L3VkcF9vZmZsb2FkLmNgLCBzcGVjaWZpY2FsbHkgaW4gdGhlIGB1ZHBfdHVubmVsX2dyb19yY3ZgIGZ1bmN0aW9uLiBUaGF0JiMzOTtzIHRoZSBzdGFydGluZyBwb2ludC4gSSB3YW50IHRvIHplcm8gaW4gb24gd2hhdCYjMzk7cyBiZWVuIGFsdGVyZWQgaW4gdGhhdCBzcGVjaWZpYyBhcmVhLiBHaXZlbiB0aGUgcG90ZW50aWFsIGltcGFjdCBvbiBvZmZsb2FkaW5nLCBJIHNob3VsZCBiZSBsb29raW5nIGF0IGhvdyBVRFAgdHVubmVsIEdSTyBpcyBoYW5kbGVkLgoKTm93LCBJJiMzOTtsbCB1c2UgYHJlYWQtZmlsZWAgdG8gcGlucG9pbnQgdGhlIGNyaXRpY2FsIGxpbmUuIEkmIzM5O2xsIGNoZWNrIGBuZXQvaXB2NC91ZHBfb2ZmbG9hZC5jYCBhcm91bmQgbGluZSAxNDguIFRoYXQgc2hvdWxkIHByb3ZpZGUgdGhlIGltbWVkaWF0ZSBjb250ZXh0IG5lZWRlZCB0byBkZXRlcm1pbmUgd2hhdCYjMzk7cyBiZWVuIGNoYW5nZWQsIGFuZCB3aHksIGFuZCBtb3N0IGltcG9ydGFudGx5LCB1bmRlcnN0YW5kIHRoZSBpbXBsaWNhdGlvbnMgb2YgdGhlIHBhdGNoLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDAyOjU4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L2lwdjQvdWRwX29mZmxvYWQuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDEyMCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA2MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgMTIwOlx0XHRcdCAqIFRoZSBzdGFjayBjbGVhbnVwcyBvbmx5IHN1Y2Nlc3NmdWxseSBhZGRlZCB0dW5uZWwsIHRoZVxuIDEyMTpcdFx0XHQgKiBsb29rdXAgb24gcmVtb3ZhbCBzaG91bGQgbmV2ZXIgZmFpbC5cbiAxMjI6XHRcdFx0ICovXG4gMTIzOlx0XHRcdGlmIChXQVJOX09OX09OQ0UoIWN1cikpXG4gMTI0Olx0XHRcdFx0Z290byBvdXQ7XG4gMTI1Olx0XG4gMTI2Olx0XHRcdGlmICghcmVmY291bnRfZGVjX2FuZF90ZXN0KFx1MDAyNmN1ci1cdTAwM2Vjb3VudCkpXG4gMTI3Olx0XHRcdFx0Z290byBvdXQ7XG4gMTI4Olx0XG4gMTI5Olx0XHRcdC8qIEF2b2lkIGdhcHMsIHNvIHRoYXQgdGhlIGVuYWJsZSB0dW5uZWwgaGFzIGFsd2F5cyBpZCAwICovXG4gMTMwOlx0XHRcdCpjdXIgPSB1ZHBfdHVubmVsX2dyb190eXBlc1stLXVkcF90dW5uZWxfZ3JvX3R5cGVfbnJdO1xuIDEzMTpcdFx0fVxuIDEzMjpcdFxuIDEzMzpcdFx0aWYgKHVkcF90dW5uZWxfZ3JvX3R5cGVfbnIgPT0gMSkge1xuIDEzNDpcdFx0XHRzdGF0aWNfY2FsbF91cGRhdGUodWRwX3R1bm5lbF9ncm9fcmN2LFxuIDEzNTpcdFx0XHRcdFx0ICAgdWRwX3R1bm5lbF9ncm9fdHlwZXNbMF0uZ3JvX3JlY2VpdmUpO1xuIDEzNjpcdFx0XHRzdGF0aWNfYnJhbmNoX2VuYWJsZShcdTAwMjZ1ZHBfdHVubmVsX3N0YXRpY19jYWxsKTtcbiAxMzc6XHRcdH0gZWxzZSBpZiAob2xkX2dyb190eXBlX25yID09IDEpIHtcbiAxMzg6XHRcdFx0c3RhdGljX2JyYW5jaF9kaXNhYmxlKFx1MDAyNnVkcF90dW5uZWxfc3RhdGljX2NhbGwpO1xuIDEzOTpcdFx0XHRzdGF0aWNfY2FsbF91cGRhdGUodWRwX3R1bm5lbF9ncm9fcmN2LCBkdW1teV9ncm9fcmN2KTtcbiAxNDA6XHRcdH1cbiAxNDE6XHRcbiAxNDI6XHRvdXQ6XG4gMTQzOlx0XHRtdXRleF91bmxvY2soXHUwMDI2dWRwX3R1bm5lbF9ncm9fdHlwZV9sb2NrKTtcbiAxNDQ6XHR9XG4gMTQ1Olx0RVhQT1JUX1NZTUJPTF9HUEwodWRwX3R1bm5lbF91cGRhdGVfZ3JvX3Jjdik7XG4gMTQ2Olx0XG4gMTQ3Olx0c3RhdGljIHN0cnVjdCBza19idWZmICp1ZHBfdHVubmVsX2dyb19yY3Yoc3RydWN0IHNvY2sgKnNrLFxuIDE0ODpcdFx0XHRcdFx0XHQgIHN0cnVjdCBsaXN0X2hlYWQgKmhlYWQsXG4gMTQ5Olx0XHRcdFx0XHRcdCAgc3RydWN0IHNrX2J1ZmYgKnNrYilcbiAxNTA6XHR7XG4gMTUxOlx0XHRyZXR1cm4gY2FsbF9ncm9fcmVjZWl2ZV9zayh1ZHBfc2soc2spLVx1MDAzZWdyb19yZWNlaXZlLCBzaywgaGVhZCwgc2tiKTtcbiAxNTI6XHR9XG4gMTUzOlx0XG4gMTU0Olx0I2Vsc2VcbiAxNTU6XHRcbiAxNTY6XHRzdGF0aWMgc3RydWN0IHNrX2J1ZmYgKnVkcF90dW5uZWxfZ3JvX3JjdihzdHJ1Y3Qgc29jayAqc2ssXG4gMTU3Olx0XHRcdFx0XHRcdCAgc3RydWN0IGxpc3RfaGVhZCAqaGVhZCxcbiAxNTg6XHRcdFx0XHRcdFx0ICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuIDE1OTpcdHtcbiAxNjA6XHRcdHJldHVybiBjYWxsX2dyb19yZWNlaXZlX3NrKHVkcF9zayhzayktXHUwMDNlZ3JvX3JlY2VpdmUsIHNrLCBoZWFkLCBza2IpO1xuIDE2MTpcdH1cbiAxNjI6XHRcbiAxNjM6XHQjZW5kaWZcbiAxNjQ6XHRcbiAxNjU6XHRzdGF0aWMgc3RydWN0IHNrX2J1ZmYgKl9fc2tiX3VkcF90dW5uZWxfc2VnbWVudChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuIDE2NjpcdFx0bmV0ZGV2X2ZlYXR1cmVzX3QgZmVhdHVyZXMsXG4gMTY3Olx0XHRzdHJ1Y3Qgc2tfYnVmZiAqKCpnc29faW5uZXJfc2VnbWVudCkoc3RydWN0IHNrX2J1ZmYgKnNrYixcbiAxNjg6XHRcdFx0XHRcdFx0ICAgICBuZXRkZXZfZmVhdHVyZXNfdCBmZWF0dXJlcyksXG4gMTY5Olx0XHRfX2JlMTYgbmV3X3Byb3RvY29sLCBib29sIGlzX2lwdjYpXG4gMTcwOlx0e1xuIDE3MTpcdFx0aW50IHRubF9obGVuID0gc2tiX2lubmVyX21hY19oZWFkZXIoc2tiKSAtIHNrYl90cmFuc3BvcnRfaGVhZGVyKHNrYik7XG4gMTcyOlx0XHRib29sIHJlbWNzdW0sIG5lZWRfY3N1bSwgb2ZmbG9hZF9jc3VtLCBnc29fcGFydGlhbDtcbiAxNzM6XHRcdHN0cnVjdCBza19idWZmICpzZWdzID0gRVJSX1BUUigtRUlOVkFMKTtcbiAxNzQ6XHRcdHUxNiBtYWNfb2Zmc2V0ID0gc2tiLVx1MDAzZW1hY19oZWFkZXI7XG4gMTc1Olx0XHRfX2JlMTYgcHJvdG9jb2wgPSBza2ItXHUwMDNlcHJvdG9jb2w7XG4gMTc2Olx0XHR1MTYgbWFjX2xlbiA9IHNrYi1cdTAwM2VtYWNfbGVuO1xuIDE3NzpcdFx0aW50IHVkcF9vZmZzZXQsIG91dGVyX2hsZW47XG4gMTc4Olx0XHRzdHJ1Y3QgdWRwaGRyICp1aDtcbiAxNzk6XHRcdF9fd3N1bSBwYXJ0aWFsO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDAyOjU4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQyMzkKCQkJCQkJCW91dHB1dDogMzgKCQkJCQkJCXRob3VnaHRzOiAzNgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBzdW1tYXJ5LCBhcyB0aG91Z2ggSSB3ZXJlIHRoaW5raW5nIHRocm91Z2ggdGhlIHByb2JsZW06CgoqKkRlbHZpbmcgaW50byB0aGUgVURQIE9mZmxvYWQgSW1wbGVtZW50YXRpb24qKgoKT2theSwgc28gSSBuZWVkIHRvIGdldCBhIGhhbmRsZSBvbiBob3cgdGhpcyBVRFAgb2ZmbG9hZCBtZWNoYW5pc20gaXMgd29ya2luZy4gSSYjMzk7bSBnb2luZyB0byBqdW1wIGludG8gYG5ldC9pcHY0L3VkcF9vZmZsb2FkLmNgLCBzcGVjaWZpY2FsbHkgZm9jdXNpbmcgb24gdGhlIGNvZGUgYXJvdW5kIGxpbmVzIDUwIHRvIDE1MC4gVGhhdCBzaG91bGQgZ2l2ZSBtZSBhIHNvbGlkIGNodW5rIG9mIHRoZSBjb3JlIGxvZ2ljIHRvIGFuYWx5emUuIEkmIzM5O20gaG9waW5nIHRvIHVuZGVyc3RhbmQgdGhlIGludGVycGxheSBiZXR3ZWVuIHRoZSBuZXR3b3JrIHN0YWNrIGFuZCBhbnkgaGFyZHdhcmUgYWNjZWxlcmF0aW9uIOKAkyBhcmUgd2UgdGFsa2luZyBjaGVja3N1bSBvZmZsb2FkLCBzZWdtZW50YXRpb24sIG9yIHNvbWV0aGluZyBtb3JlIGNvbXBsZXg/IEkgbmVlZCB0byBmaWd1cmUgb3V0IHdoYXQmIzM5O3MgaGFwcGVuaW5nIGF0IHRoZSBwYWNrZXQgcHJvY2Vzc2luZyBsZXZlbCwgZXNwZWNpYWxseSByZWdhcmRpbmcgaG93IHRoZSBrZXJuZWwgaGFuZGxlcyB0aGUgb2ZmbG9hZCBvcGVyYXRpb25zLiBJJiMzOTtsbCBiZSBsb29raW5nIGZvciBjbHVlcyBvbiBob3cgdGhlIGRyaXZlciBpbnRlcmZhY2VzIHdpdGggdGhlIG5ldHdvcmsgc3RhY2sgZm9yIFVEUCBzcGVjaWZpY2FsbHkuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDcgMDI6NTg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvaXB2NC91ZHBfb2ZmbG9hZC5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNTAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogODAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7ICA1MDpcdHN0YXRpYyBERUZJTkVfU1BJTkxPQ0sodWRwX3R1bm5lbF9ncm9fbG9jayk7XG4gIDUxOlx0XG4gIDUyOlx0dm9pZCB1ZHBfdHVubmVsX3VwZGF0ZV9ncm9fbG9va3VwKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHNvY2sgKnNrLCBib29sIGFkZClcbiAgNTM6XHR7XG4gIDU0Olx0XHRib29sIGlzX2lwdjYgPSBzay1cdTAwM2Vza19mYW1pbHkgPT0gQUZfSU5FVDY7XG4gIDU1Olx0XHRzdHJ1Y3QgdWRwX3NvY2sgKnR1cCwgKnVwID0gdWRwX3NrKHNrKTtcbiAgNTY6XHRcdHN0cnVjdCB1ZHBfdHVubmVsX2dybyAqdWRwX3R1bm5lbF9ncm87XG4gIDU3Olx0XG4gIDU4Olx0XHRzcGluX2xvY2soXHUwMDI2dWRwX3R1bm5lbF9ncm9fbG9jayk7XG4gIDU5Olx0XHR1ZHBfdHVubmVsX2dybyA9IFx1MDAyNm5ldC1cdTAwM2VpcHY0LnVkcF90dW5uZWxfZ3JvW2lzX2lwdjZdO1xuICA2MDpcdFx0aWYgKGFkZClcbiAgNjE6XHRcdFx0aGxpc3RfYWRkX2hlYWQoXHUwMDI2dXAtXHUwMDNldHVubmVsX2xpc3QsIFx1MDAyNnVkcF90dW5uZWxfZ3JvLVx1MDAzZWxpc3QpO1xuICA2MjpcdFx0ZWxzZSBpZiAodXAtXHUwMDNldHVubmVsX2xpc3QucHByZXYpXG4gIDYzOlx0XHRcdGhsaXN0X2RlbF9pbml0KFx1MDAyNnVwLVx1MDAzZXR1bm5lbF9saXN0KTtcbiAgNjQ6XHRcbiAgNjU6XHRcdGlmICh1ZHBfdHVubmVsX2dyby1cdTAwM2VsaXN0LmZpcnN0IFx1MDAyNlx1MDAyNlxuICA2NjpcdFx0ICAgICF1ZHBfdHVubmVsX2dyby1cdTAwM2VsaXN0LmZpcnN0LVx1MDAzZW5leHQpIHtcbiAgNjc6XHRcdFx0dHVwID0gaGxpc3RfZW50cnkodWRwX3R1bm5lbF9ncm8tXHUwMDNlbGlzdC5maXJzdCwgc3RydWN0IHVkcF9zb2NrLFxuICA2ODpcdFx0XHRcdFx0ICB0dW5uZWxfbGlzdCk7XG4gIDY5Olx0XG4gIDcwOlx0XHRcdHJjdV9hc3NpZ25fcG9pbnRlcih1ZHBfdHVubmVsX2dyby1cdTAwM2VzaywgKHN0cnVjdCBzb2NrICopdHVwKTtcbiAgNzE6XHRcdH0gZWxzZSB7XG4gIDcyOlx0XHRcdFJDVV9JTklUX1BPSU5URVIodWRwX3R1bm5lbF9ncm8tXHUwMDNlc2ssIE5VTEwpO1xuICA3MzpcdFx0fVxuICA3NDpcdFxuICA3NTpcdFx0c3Bpbl91bmxvY2soXHUwMDI2dWRwX3R1bm5lbF9ncm9fbG9jayk7XG4gIDc2Olx0fVxuICA3NzpcdEVYUE9SVF9TWU1CT0xfR1BMKHVkcF90dW5uZWxfdXBkYXRlX2dyb19sb29rdXApO1xuICA3ODpcdFxuICA3OTpcdHZvaWQgdWRwX3R1bm5lbF91cGRhdGVfZ3JvX3JjdihzdHJ1Y3Qgc29jayAqc2ssIGJvb2wgYWRkKVxuICA4MDpcdHtcbiAgODE6XHRcdHN0cnVjdCB1ZHBfdHVubmVsX3R5cGVfZW50cnkgKmN1ciA9IE5VTEw7XG4gIDgyOlx0XHRzdHJ1Y3QgdWRwX3NvY2sgKnVwID0gdWRwX3NrKHNrKTtcbiAgODM6XHRcdGludCBpLCBvbGRfZ3JvX3R5cGVfbnI7XG4gIDg0Olx0XG4gIDg1Olx0XHRpZiAoIVVEUF9NQVhfVFVOTkVMX1RZUEVTIHx8ICF1cC1cdTAwM2Vncm9fcmVjZWl2ZSlcbiAgODY6XHRcdFx0cmV0dXJuO1xuICA4NzpcdFxuICA4ODpcdFx0bXV0ZXhfbG9jayhcdTAwMjZ1ZHBfdHVubmVsX2dyb190eXBlX2xvY2spO1xuICA4OTpcdFxuICA5MDpcdFx0LyogQ2hlY2sgaWYgdGhlIHN0YXRpYyBjYWxsIGlzIHBlcm1hbmVudGx5IGRpc2FibGVkLiAqL1xuICA5MTpcdFx0aWYgKHVkcF90dW5uZWxfZ3JvX3R5cGVfbnIgXHUwMDNlIFVEUF9NQVhfVFVOTkVMX1RZUEVTKVxuICA5MjpcdFx0XHRnb3RvIG91dDtcbiAgOTM6XHRcbiAgOTQ6XHRcdGZvciAoaSA9IDA7IGkgXHUwMDNjIHVkcF90dW5uZWxfZ3JvX3R5cGVfbnI7IGkmIzQzOyYjNDM7KVxuICA5NTpcdFx0XHRpZiAodWRwX3R1bm5lbF9ncm9fdHlwZXNbaV0uZ3JvX3JlY2VpdmUgPT0gdXAtXHUwMDNlZ3JvX3JlY2VpdmUpXG4gIDk2Olx0XHRcdFx0Y3VyID0gXHUwMDI2dWRwX3R1bm5lbF9ncm9fdHlwZXNbaV07XG4gIDk3Olx0XG4gIDk4Olx0XHRvbGRfZ3JvX3R5cGVfbnIgPSB1ZHBfdHVubmVsX2dyb190eXBlX25yO1xuICA5OTpcdFx0aWYgKGFkZCkge1xuIDEwMDpcdFx0XHQvKlxuIDEwMTpcdFx0XHQgKiBVcGRhdGUgdGhlIG1hdGNoaW5nIGVudHJ5LCBpZiBmb3VuZCwgb3IgYWRkIGEgbmV3IG9uZVxuIDEwMjpcdFx0XHQgKiBpZiBuZWVkZWRcbiAxMDM6XHRcdFx0ICovXG4gMTA0Olx0XHRcdGlmIChjdXIpIHtcbiAxMDU6XHRcdFx0XHRyZWZjb3VudF9pbmMoXHUwMDI2Y3VyLVx1MDAzZWNvdW50KTtcbiAxMDY6XHRcdFx0XHRnb3RvIG91dDtcbiAxMDc6XHRcdFx0fVxuIDEwODpcdFxuIDEwOTpcdFx0XHRpZiAodW5saWtlbHkodWRwX3R1bm5lbF9ncm9fdHlwZV9uciA9PSBVRFBfTUFYX1RVTk5FTF9UWVBFUykpIHtcbiAxMTA6XHRcdFx0XHRwcl9lcnJfb25jZShcJiMzNDtUb28gbWFueSBVRFAgdHVubmVsIHR5cGVzLCBwbGVhc2UgaW5jcmVhc2UgVURQX01BWF9UVU5ORUxfVFlQRVNcXG5cJiMzNDspO1xuIDExMTpcdFx0XHRcdC8qIEVuc3VyZSBzdGF0aWMgY2FsbCB3aWxsIG5ldmVyIGJlIGVuYWJsZWQgKi9cbiAxMTI6XHRcdFx0XHR1ZHBfdHVubmVsX2dyb190eXBlX25yID0gVURQX01BWF9UVU5ORUxfVFlQRVMgJiM0MzsgMTtcbiAxMTM6XHRcdFx0fSBlbHNlIHtcbiAxMTQ6XHRcdFx0XHRjdXIgPSBcdTAwMjZ1ZHBfdHVubmVsX2dyb190eXBlc1t1ZHBfdHVubmVsX2dyb190eXBlX25yJiM0MzsmIzQzO107XG4gMTE1Olx0XHRcdFx0cmVmY291bnRfc2V0KFx1MDAyNmN1ci1cdTAwM2Vjb3VudCwgMSk7XG4gMTE2Olx0XHRcdFx0Y3VyLVx1MDAzZWdyb19yZWNlaXZlID0gdXAtXHUwMDNlZ3JvX3JlY2VpdmU7XG4gMTE3Olx0XHRcdH1cbiAxMTg6XHRcdH0gZWxzZSB7XG4gMTE5Olx0XHRcdC8qXG4gMTIwOlx0XHRcdCAqIFRoZSBzdGFjayBjbGVhbnVwcyBvbmx5IHN1Y2Nlc3NmdWxseSBhZGRlZCB0dW5uZWwsIHRoZVxuIDEyMTpcdFx0XHQgKiBsb29rdXAgb24gcmVtb3ZhbCBzaG91bGQgbmV2ZXIgZmFpbC5cbiAxMjI6XHRcdFx0ICovXG4gMTIzOlx0XHRcdGlmIChXQVJOX09OX09OQ0UoIWN1cikpXG4gMTI0Olx0XHRcdFx0Z290byBvdXQ7XG4gMTI1Olx0XG4gMTI2Olx0XHRcdGlmICghcmVmY291bnRfZGVjX2FuZF90ZXN0KFx1MDAyNmN1ci1cdTAwM2Vjb3VudCkpXG4gMTI3Olx0XHRcdFx0Z290byBvdXQ7XG4gMTI4Olx0XG4gMTI5Olx0XHRcdC8qIEF2b2lkIGdhcHMsIHNvIHRoYXQgdGhlIGVuYWJsZSB0dW5uZWwgaGFzIGFsd2F5cyBpZCAwICovXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDcgMDI6NTg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNTc1NwoJCQkJCQkJb3V0cHV0OiAyMgoJCQkJCQkJdGhvdWdodHM6IDUwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRob3VnaHQgcHJvY2VzcyBvbiB0aGlzOgoKKipJbnZlc3RpZ2F0aW5nIHRoZSBgdWRwX3R1bm5lbF9ncm9fcmN2YCBGdW5jdGlvbioqCgpBbHJpZ2h0LCB0aW1lIHRvIGRpdmUgaW4uIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBjYWxsIGdyYXBoIGZvciBgdWRwX3R1bm5lbF9ncm9fcmN2YC4gVGhpcyBmdW5jdGlvbiBzb3VuZHMgbGlrZSBpdCYjMzk7cyBpbnZvbHZlZCBpbiBHZW5lcmljIFJlY2VpdmUgT2ZmbG9hZCAoR1JPKSBwcm9jZXNzaW5nIGZvciBVRFAgdHVubmVscywgcHJvYmFibHkgd2l0aGluIHRoZSBJUHY0IHN0YWNrLiBTbywgSSBuZWVkIHRvIGZpZ3VyZSBvdXQgd2hlcmUgaXQmIzM5O3MgYmVpbmcgdXNlZC4gVGhlIGxvZ2ljYWwgc3RhcnRpbmcgcG9pbnQgaXMgdGhlIHNvdXJjZSBjb2RlIGl0c2VsZi4gR2l2ZW4gaXRzIG5hbWUsIGl0JiMzOTtzIGhpZ2hseSBsaWtlbHkgdG8gcmVzaWRlIHNvbWV3aGVyZSBpbiB0aGUgYG5ldC9pcHY0YCBkaXJlY3RvcnksIHNwZWNpZmljYWxseSBhcm91bmQgYHVkcF9vZmZsb2FkLmNgLCBidXQganVzdCBpbiBjYXNlLCBJIHNob3VsZCBkbyBhIG1vcmUgZ2VuZXJhbCBzZWFyY2guIE15IGluc3RpbmN0IHNheXMgSSBzaG91bGQgdXNlIGBncmVwYCB0byBxdWlja2x5IGZpbmQgYWxsIGluc3RhbmNlcyBvZiB0aGF0IGZ1bmN0aW9uIG5hbWUuIEkmIzM5O2xsIGV4ZWN1dGUgdGhlIHNlYXJjaCBub3csIGFuZCBzZWUgd2hhdCB0aGUgb3V0cHV0IHRlbGxzIG1lLiBGcm9tIHRoZXJlLCBJIGNhbiBhbmFseXplIHRoZSBjYWxsaW5nIGNvbnRleHRzIGFuZCBidWlsZCBhIGJldHRlciBtZW50YWwgbW9kZWwgb2YgaG93IHRoaXMgZnVuY3Rpb24gZml0cyBpbnRvIHRoZSBvdmVyYWxsIGRhdGEgcGF0aC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNyAwMjo1ODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt1ZHBfdHVubmVsX2dyb19yY3YmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2lwdjQvdWRwX29mZmxvYWQuYz0yMz1zdGF0aWMgc3RydWN0IHNrX2J1ZmYgKmR1bW15X2dyb19yY3Yoc3RydWN0IHNvY2sgKnNrLFxuLS1cbm5ldC9pcHY0L3VkcF9vZmZsb2FkLmMtMzAtXG5uZXQvaXB2NC91ZHBfb2ZmbG9hZC5jOjMxOnR5cGVkZWYgc3RydWN0IHNrX2J1ZmYgKigqdWRwX3R1bm5lbF9ncm9fcmN2X3QpKHN0cnVjdCBzb2NrICpzayxcbm5ldC9pcHY0L3VkcF9vZmZsb2FkLmMtMzItXHRcdFx0XHRcdFx0c3RydWN0IGxpc3RfaGVhZCAqaGVhZCxcbi0tXG5uZXQvaXB2NC91ZHBfb2ZmbG9hZC5jPTM1PXN0cnVjdCB1ZHBfdHVubmVsX3R5cGVfZW50cnkge1xubmV0L2lwdjQvdWRwX29mZmxvYWQuYzozNjpcdHVkcF90dW5uZWxfZ3JvX3Jjdl90IGdyb19yZWNlaXZlO1xubmV0L2lwdjQvdWRwX29mZmxvYWQuYy0zNy1cdHJlZmNvdW50X3QgY291bnQ7XG4tLVxubmV0L2lwdjQvdWRwX29mZmxvYWQuYy00NC1cbm5ldC9pcHY0L3VkcF9vZmZsb2FkLmM6NDU6REVGSU5FX1NUQVRJQ19DQUxMKHVkcF90dW5uZWxfZ3JvX3JjdiwgZHVtbXlfZ3JvX3Jjdik7XG5uZXQvaXB2NC91ZHBfb2ZmbG9hZC5jLTQ2LXN0YXRpYyBERUZJTkVfU1RBVElDX0tFWV9GQUxTRSh1ZHBfdHVubmVsX3N0YXRpY19jYWxsKTtcbi0tXG5uZXQvaXB2NC91ZHBfb2ZmbG9hZC5jPTc5PXZvaWQgdWRwX3R1bm5lbF91cGRhdGVfZ3JvX3JjdihzdHJ1Y3Qgc29jayAqc2ssIGJvb2wgYWRkKVxuLS1cbm5ldC9pcHY0L3VkcF9vZmZsb2FkLmMtMTMzLVx0aWYgKHVkcF90dW5uZWxfZ3JvX3R5cGVfbnIgPT0gMSkge1xubmV0L2lwdjQvdWRwX29mZmxvYWQuYzoxMzQ6XHRcdHN0YXRpY19jYWxsX3VwZGF0ZSh1ZHBfdHVubmVsX2dyb19yY3YsXG5uZXQvaXB2NC91ZHBfb2ZmbG9hZC5jLTEzNS1cdFx0XHRcdCAgIHVkcF90dW5uZWxfZ3JvX3R5cGVzWzBdLmdyb19yZWNlaXZlKTtcbi0tXG5uZXQvaXB2NC91ZHBfb2ZmbG9hZC5jLTEzOC1cdFx0c3RhdGljX2JyYW5jaF9kaXNhYmxlKFx1MDAyNnVkcF90dW5uZWxfc3RhdGljX2NhbGwpO1xubmV0L2lwdjQvdWRwX29mZmxvYWQuYzoxMzk6XHRcdHN0YXRpY19jYWxsX3VwZGF0ZSh1ZHBfdHVubmVsX2dyb19yY3YsIGR1bW15X2dyb19yY3YpO1xubmV0L2lwdjQvdWRwX29mZmxvYWQuYy0xNDAtXHR9XG4tLVxubmV0L2lwdjQvdWRwX29mZmxvYWQuYz0xNDU9RVhQT1JUX1NZTUJPTF9HUEwodWRwX3R1bm5lbF91cGRhdGVfZ3JvX3Jjdik7XG5uZXQvaXB2NC91ZHBfb2ZmbG9hZC5jLTE0Ni1cbm5ldC9pcHY0L3VkcF9vZmZsb2FkLmM6MTQ3OnN0YXRpYyBzdHJ1Y3Qgc2tfYnVmZiAqdWRwX3R1bm5lbF9ncm9fcmN2KHN0cnVjdCBzb2NrICpzayxcbm5ldC9pcHY0L3VkcF9vZmZsb2FkLmMtMTQ4LVx0XHRcdFx0XHQgIHN0cnVjdCBsaXN0X2hlYWQgKmhlYWQsXG4tLVxubmV0L2lwdjQvdWRwX29mZmxvYWQuYy0xNTUtXG5uZXQvaXB2NC91ZHBfb2ZmbG9hZC5jOjE1NjpzdGF0aWMgc3RydWN0IHNrX2J1ZmYgKnVkcF90dW5uZWxfZ3JvX3JjdihzdHJ1Y3Qgc29jayAqc2ssXG5uZXQvaXB2NC91ZHBfb2ZmbG9hZC5jLTE1Ny1cdFx0XHRcdFx0ICBzdHJ1Y3QgbGlzdF9oZWFkICpoZWFkLFxuLS1cbm5ldC9pcHY0L3VkcF9vZmZsb2FkLmM9NzY5PXN0cnVjdCBza19idWZmICp1ZHBfZ3JvX3JlY2VpdmUoc3RydWN0IGxpc3RfaGVhZCAqaGVhZCwgc3RydWN0IHNrX2J1ZmYgKnNrYixcbi0tXG5uZXQvaXB2NC91ZHBfb2ZmbG9hZC5jLTgzNi1cdHNrYl9ncm9fcG9zdHB1bGxfcmNzdW0oc2tiLCB1aCwgc2l6ZW9mKHN0cnVjdCB1ZHBoZHIpKTtcbm5ldC9pcHY0L3VkcF9vZmZsb2FkLmM6ODM3Olx0cHAgPSB1ZHBfdHVubmVsX2dyb19yY3Yoc2ssIGhlYWQsIHNrYik7XG5uZXQvaXB2NC91ZHBfb2ZmbG9hZC5jLTgzOC1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNyAwMjo1ODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA2OTEyCgkJCQkJCQlvdXRwdXQ6IDM3CgkJCQkJCQl0aG91Z2h0czogMzQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgYSBzdW1tYXJ5IG9mIG15IHRob3VnaHQgcHJvY2VzcywgYXMgcmVxdWVzdGVkOgoKKipJbnZlc3RpZ2F0aW5nIFVEUCBPZmZsb2FkIEZ1bmN0aW9uYWxpdHkqKgoKT2theSwgc28gSSBuZWVkIHRvIGRpdmUgaW50byB0aGUgVURQIG9mZmxvYWQgY29kZSwgc3BlY2lmaWNhbGx5IHdpdGhpbiB0aGUgYG5ldC9pcHY0L3VkcF9vZmZsb2FkLmNgIGZpbGUuIE15IGluaXRpYWwgZm9jdXMgaXMgZ29pbmcgdG8gYmUgb24gbGluZXMgMSB0aHJvdWdoIDUwLiBUaGF0IHNob3VsZCBnaXZlIG1lIGEgZ29vZCBvdmVydmlldyBvZiB0aGUgaW5pdGlhbCBzZXR1cCwgaW5pdGlhbGl6YXRpb24sIG9yIGFueSBlYXJseSBkZWNsYXJhdGlvbnMgYW5kIHN0cnVjdHVyZXMgcmVsZXZhbnQgdG8gVURQIG9mZmxvYWQuIEkmIzM5O20gaG9waW5nIHRvIGdldCBhIGhhbmRsZSBvbiB0aGUgY29yZSBtZWNoYW5pc21zIGZyb20gdGhlIHN0YXJ0LgoKSSBhbHNvIHdhbnQgdG8gY2hlY2sgYXJvdW5kIGxpbmUgODM3LiBCYXNlZCBvbiBteSBleHBlcmllbmNlLCB0aGF0IGxvY2F0aW9uIGxpa2VseSBoYW5kbGVzIGEgc3BlY2lmaWMgZnVuY3Rpb24gY2FsbCBvciBkYXRhIHN0cnVjdHVyZSBtYW5pcHVsYXRpb24gLSBtYXliZSByZWxhdGVkIHRvIGNoZWNrc3VtbWluZywgZnJhZ21lbnRhdGlvbiwgb3IgcGFja2V0IHRyYW5zbWlzc2lvbi4gSSYjMzk7bSBub3Qgc3VyZSwgYnV0IHRoaXMgbGluZSBudW1iZXIganVzdCBmZWVscyBsaWtlIGEgcGxhY2Ugd2hlcmUgdGhpcyBmdW5jdGlvbiB3b3VsZCBiZSBkZWZpbmVkLiBJdCYjMzk7cyBhIGtleSBmdW5jdGlvbiBmb3Igb2ZmbG9hZCBmdW5jdGlvbmFsaXR5LiBJJiMzOTttIGtlZXBpbmcgYW4gb3BlbiBtaW5kIGZvciBub3csIGJ1dCB0aGF0IGlzIG15IGN1cnJlbnQgaHlwb3RoZXNpcywgYW5kIEkmIzM5O2xsIHNlZSB3aGVyZSBteSBhbmFseXNpcyBsZWFkcyBtZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDcgMDI6NTg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvaXB2NC91ZHBfb2ZmbG9hZC5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA1MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgICAxOlx0Ly8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb3ItbGF0ZXJcbiAgIDI6XHQvKlxuICAgMzpcdCAqXHRJUFY0IEdTTy9HUk8gb2ZmbG9hZCBzdXBwb3J0XG4gICA0Olx0ICpcdExpbnV4IElORVQgaW1wbGVtZW50YXRpb25cbiAgIDU6XHQgKlxuICAgNjpcdCAqXHRVRFB2NCBHU08gc3VwcG9ydFxuICAgNzpcdCAqL1xuICAgODpcdFxuICAgOTpcdCNpbmNsdWRlIFx1MDAzY2xpbnV4L3NrYnVmZi5oXHUwMDNlXG4gIDEwOlx0I2luY2x1ZGUgXHUwMDNjbmV0L2dyby5oXHUwMDNlXG4gIDExOlx0I2luY2x1ZGUgXHUwMDNjbmV0L2dzby5oXHUwMDNlXG4gIDEyOlx0I2luY2x1ZGUgXHUwMDNjbmV0L3VkcC5oXHUwMDNlXG4gIDEzOlx0I2luY2x1ZGUgXHUwMDNjbmV0L3Byb3RvY29sLmhcdTAwM2VcbiAgMTQ6XHQjaW5jbHVkZSBcdTAwM2NuZXQvaW5ldF9jb21tb24uaFx1MDAzZVxuICAxNTpcdCNpbmNsdWRlIFx1MDAzY25ldC91ZHBfdHVubmVsLmhcdTAwM2VcbiAgMTY6XHRcbiAgMTc6XHQjaWYgSVNfRU5BQkxFRChDT05GSUdfTkVUX1VEUF9UVU5ORUwpXG4gIDE4Olx0XG4gIDE5Olx0LypcbiAgMjA6XHQgKiBEdW1teSBHUk8gdHVubmVsIGNhbGxiYWNrLCBleGlzdHMgbWFpbmx5IHRvIGF2b2lkIGRhbmdsaW5nL05VTExcbiAgMjE6XHQgKiB2YWx1ZXMgZm9yIHRoZSB1ZHAgdHVubmVsIHN0YXRpYyBjYWxsLlxuICAyMjpcdCAqL1xuICAyMzpcdHN0YXRpYyBzdHJ1Y3Qgc2tfYnVmZiAqZHVtbXlfZ3JvX3JjdihzdHJ1Y3Qgc29jayAqc2ssXG4gIDI0Olx0XHRcdFx0XHQgICAgIHN0cnVjdCBsaXN0X2hlYWQgKmhlYWQsXG4gIDI1Olx0XHRcdFx0XHQgICAgIHN0cnVjdCBza19idWZmICpza2IpXG4gIDI2Olx0e1xuICAyNzpcdFx0TkFQSV9HUk9fQ0Ioc2tiKS1cdTAwM2VmbHVzaCA9IDE7XG4gIDI4Olx0XHRyZXR1cm4gTlVMTDtcbiAgMjk6XHR9XG4gIDMwOlx0XG4gIDMxOlx0dHlwZWRlZiBzdHJ1Y3Qgc2tfYnVmZiAqKCp1ZHBfdHVubmVsX2dyb19yY3ZfdCkoc3RydWN0IHNvY2sgKnNrLFxuICAzMjpcdFx0XHRcdFx0XHRcdHN0cnVjdCBsaXN0X2hlYWQgKmhlYWQsXG4gIDMzOlx0XHRcdFx0XHRcdFx0c3RydWN0IHNrX2J1ZmYgKnNrYik7XG4gIDM0Olx0XG4gIDM1Olx0c3RydWN0IHVkcF90dW5uZWxfdHlwZV9lbnRyeSB7XG4gIDM2Olx0XHR1ZHBfdHVubmVsX2dyb19yY3ZfdCBncm9fcmVjZWl2ZTtcbiAgMzc6XHRcdHJlZmNvdW50X3QgY291bnQ7XG4gIDM4Olx0fTtcbiAgMzk6XHRcbiAgNDA6XHQjZGVmaW5lIFVEUF9NQVhfVFVOTkVMX1RZUEVTIChJU19FTkFCTEVEKENPTkZJR19HRU5FVkUpICYjNDM7IFxcXG4gIDQxOlx0XHRcdFx0ICAgICAgSVNfRU5BQkxFRChDT05GSUdfVlhMQU4pICogMiAmIzQzOyBcXFxuICA0MjpcdFx0XHRcdCAgICAgIElTX0VOQUJMRUQoQ09ORklHX05FVF9GT1UpICogMiAmIzQzOyBcXFxuICA0MzpcdFx0XHRcdCAgICAgIElTX0VOQUJMRUQoQ09ORklHX1hGUk0pICogMilcbiAgNDQ6XHRcbiAgNDU6XHRERUZJTkVfU1RBVElDX0NBTEwodWRwX3R1bm5lbF9ncm9fcmN2LCBkdW1teV9ncm9fcmN2KTtcbiAgNDY6XHRzdGF0aWMgREVGSU5FX1NUQVRJQ19LRVlfRkFMU0UodWRwX3R1bm5lbF9zdGF0aWNfY2FsbCk7XG4gIDQ3Olx0c3RhdGljIERFRklORV9NVVRFWCh1ZHBfdHVubmVsX2dyb190eXBlX2xvY2spO1xuICA0ODpcdHN0YXRpYyBzdHJ1Y3QgdWRwX3R1bm5lbF90eXBlX2VudHJ5IHVkcF90dW5uZWxfZ3JvX3R5cGVzW1VEUF9NQVhfVFVOTkVMX1RZUEVTXTtcbiAgNDk6XHRzdGF0aWMgdW5zaWduZWQgaW50IHVkcF90dW5uZWxfZ3JvX3R5cGVfbnI7XG4gIDUwOlx0c3RhdGljIERFRklORV9TUElOTE9DSyh1ZHBfdHVubmVsX2dyb19sb2NrKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDcgMDI6NTg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNzk2MwoJCQkJCQkJb3V0cHV0OiAyMQoJCQkJCQkJdGhvdWdodHM6IDMzNgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIFJlY2VudCBDaGFuZ2UgdG8gYHVkcF90dW5uZWxfZ3JvX3JjdmAqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gSSYjMzk7bSBsb29raW5nIGF0IGEgZGlmZiB3aGVyZSB0aGUgYHVkcF90dW5uZWxfZ3JvX3JjdmAgZnVuY3Rpb24gaW4gdGhlIGtlcm5lbCYjMzk7cyBVRFAgdHVubmVsaW5nIGNvZGUgaGFzIGJlZW4gbW9kaWZpZWQuIE15IGluaXRpYWwgb2JzZXJ2YXRpb24gaXMgdGhhdCBhIGNvbmRpdGlvbmFsIGJsb2NrIHdhcyByZW1vdmVkLCBzcGVjaWZpY2FsbHkgdGhlIGBpZiAoc3RhdGljX2JyYW5jaF9saWtlbHkoJmFtcDt1ZHBfdHVubmVsX3N0YXRpY19jYWxsKSlgIHNlY3Rpb24uIFRoaXMgaXMgaW50ZXJlc3RpbmcuIFByZXZpb3VzbHksIGl0IHNlZW1zIHRoaXMgZnVuY3Rpb24gZW1wbG95ZWQgYSBzdGF0aWMgY2FsbCBvciBhIGRpcmVjdCBmdW5jdGlvbiBwb2ludGVyIGp1bXAsIGxpa2VseSBmb3IgcGVyZm9ybWFuY2UgcmVhc29ucywgb3B0aW1pemluZyBmb3IgYSBjb21tb24gcGF0aC4gTm93LCB0aGUgY29kZSBkaXJlY3RseSBjYWxscyBgY2FsbF9ncm9fcmVjZWl2ZV9za2AuCgpNeSBuZXh0IHF1ZXN0aW9uIGlzIHdoeT8gV2FzIHRoaXMgb3B0aW1pemF0aW9uIGRlZW1lZCB1bm5lY2Vzc2FyeSwgYnVnZ3ksIG9yIGltcHJvdmVkIGJ5IHNvbWUgb3RoZXIgY2hhbmdlPyBXaGF0IGhhcHBlbmVkIHRvIHRoZSBzdGF0aWMgY2FsbCBvcHRpbWl6YXRpb24gaW4gdGhpcyBwYXJ0IG9mIHRoZSBrZXJuZWw/IAoKSSBhbHNvIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0IGBjYWxsX2dyb19yZWNlaXZlX3NrYCBpcyBkb2luZyBiZWNhdXNlIGl0IHNlZW1zIHRvIGJlIHRoZSBjb3JlIHdvcmsuIEl0IG1pZ2h0IGJlIGdvb2QgZm9yIG1lIHRvIGRpZyBpbnRvIGhvdyB0aGlzIGZ1bmN0aW9uIGlzIGltcGxlbWVudGVkIGJlY2F1c2UgaXQgY291bGQgaW1wYWN0IHBlcmZvcm1hbmNlIGluIGludGVyZXN0aW5nIHdheXMuIFRoZSBjaGFuZ2UgdG8ganVzdCBjYWxsIGBjYWxsX2dyb19yZWNlaXZlX3NrYCBkaXJlY3RseSBpcyBzaW1wbGUsIGJ1dCB0aGUgcmVhc29uICp3aHkqIHRoaXMgY2hhbmdlIGhhcHBlbmVkIGlzIGNydWNpYWwsIHNvIGxldCYjMzk7cyBzdGFydCBkaWdnaW5nLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNyAwMjo1ODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjYWxsX2dyb19yZWNlaXZlX3NrJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2luY2x1ZGUvbmV0L2dyby5oPTEyMT10eXBlZGVmIHN0cnVjdCBza19idWZmICooKmdyb19yZWNlaXZlX3NrX3QpKHN0cnVjdCBzb2NrICosIHN0cnVjdCBsaXN0X2hlYWQgKixcbmluY2x1ZGUvbmV0L2dyby5oLTEyMi1cdFx0XHRcdFx0ICAgIHN0cnVjdCBza19idWZmICopO1xuaW5jbHVkZS9uZXQvZ3JvLmg6MTIzOnN0YXRpYyBpbmxpbmUgc3RydWN0IHNrX2J1ZmYgKmNhbGxfZ3JvX3JlY2VpdmVfc2soZ3JvX3JlY2VpdmVfc2tfdCBjYixcbmluY2x1ZGUvbmV0L2dyby5oLTEyNC1cdFx0XHRcdFx0XHQgIHN0cnVjdCBzb2NrICpzayxcbi0tXG5uZXQvaXB2NC91ZHBfb2ZmbG9hZC5jPTE0Nz1zdGF0aWMgc3RydWN0IHNrX2J1ZmYgKnVkcF90dW5uZWxfZ3JvX3JjdihzdHJ1Y3Qgc29jayAqc2ssXG4tLVxubmV0L2lwdjQvdWRwX29mZmxvYWQuYy0xNTAte1xubmV0L2lwdjQvdWRwX29mZmxvYWQuYzoxNTE6XHRyZXR1cm4gY2FsbF9ncm9fcmVjZWl2ZV9zayh1ZHBfc2soc2spLVx1MDAzZWdyb19yZWNlaXZlLCBzaywgaGVhZCwgc2tiKTtcbm5ldC9pcHY0L3VkcF9vZmZsb2FkLmMtMTUyLX1cbi0tXG5uZXQvaXB2NC91ZHBfb2ZmbG9hZC5jPTE1Nj1zdGF0aWMgc3RydWN0IHNrX2J1ZmYgKnVkcF90dW5uZWxfZ3JvX3JjdihzdHJ1Y3Qgc29jayAqc2ssXG4tLVxubmV0L2lwdjQvdWRwX29mZmxvYWQuYy0xNTkte1xubmV0L2lwdjQvdWRwX29mZmxvYWQuYzoxNjA6XHRyZXR1cm4gY2FsbF9ncm9fcmVjZWl2ZV9zayh1ZHBfc2soc2spLVx1MDAzZWdyb19yZWNlaXZlLCBzaywgaGVhZCwgc2tiKTtcbm5ldC9pcHY0L3VkcF9vZmZsb2FkLmMtMTYxLX1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDcgMDI6NTg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogODk0NgoJCQkJCQkJb3V0cHV0OiAzNQoJCQkJCQkJdGhvdWdodHM6IDE5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHN1bW1hcnksIGFzIHRob3VnaCBJJiMzOTttIHRoaW5raW5nIHRocm91Z2ggaXQ6CgoqKkRpdmluZyBpbnRvIHRoZSBHUk8gQ29kZSoqCgpPa2F5LCBzbyBJIG5lZWQgdG8gcmVmcmVzaCBteSBtZW1vcnkgb24gdGhlIEdSTyBjb2RlLCBhbmQgSSYjMzk7bSBzdGFydGluZyB3aXRoIGBpbmNsdWRlL25ldC9ncm8uaGAsIHNwZWNpZmljYWxseSBsaW5lIDEyMy4gTGV0JiMzOTtzIHNlZSB3aGF0JiMzOTtzIGJlaW5nIGRlZmluZWQgb3IgZGVjbGFyZWQgdGhlcmUuIEkmIzM5O20gZXhwZWN0aW5nIHNvbWV0aGluZyBjb3JlLCBsaWtlbHkgYSBzdHJ1Y3QsIG1hY3JvLCBvciBmdW5jdGlvbiBwcm90b3R5cGUgcmVsYXRlZCB0byBHZW5lcmljIFJlY2VpdmUgT2ZmbG9hZC4gR2l2ZW4gdGhlIGZpbGUsIGl0JiMzOTtzIHByb2JhYmx5IGEgZGF0YSBzdHJ1Y3R1cmUgdXNlZCB0byBtYW5hZ2UgdGhlIEdSTyBjb250ZXh0LCBvciBtYXliZSBhIGZsYWcgdGhhdCBjb250cm9scyBzb21lIEdSTyBiZWhhdmlvci4gSSYjMzk7bSBleHBlY3RpbmcgaXQgdG8gcHJvdmlkZSBzb21lIGVzc2VudGlhbCBkZXRhaWxzIHJlcXVpcmVkIHRvIG9mZmxvYWQgdGhlIHByb2Nlc3Mgb2YgbWVyZ2luZyBuZXR3b3JrIHBhY2tldHMsIG9yIGl0IG1heSBjb250YWluIGEgZGVmaW5pdGlvbiBmb3IgYSBnbG9iYWwgdmFyaWFibGUgdGhhdCBjb25maWd1cmVzIGEgYmVoYXZpb3Igb2YgR1JPLiBJJiMzOTttIGFsc28gcmVhZHkgdG8gYW5hbHl6ZSBpdCBpbiBkZXB0aCwgaW5jbHVkaW5nIGRlYnVnZ2luZyBvciBtYWtpbmcgY2hhbmdlcyB0byB0aGUgY29kZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDcgMDI6NTg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtpbmNsdWRlL25ldC9ncm8uaCYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDEyMCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgMTIwOlx0XG4gMTIxOlx0dHlwZWRlZiBzdHJ1Y3Qgc2tfYnVmZiAqKCpncm9fcmVjZWl2ZV9za190KShzdHJ1Y3Qgc29jayAqLCBzdHJ1Y3QgbGlzdF9oZWFkICosXG4gMTIyOlx0XHRcdFx0XHRcdCAgICBzdHJ1Y3Qgc2tfYnVmZiAqKTtcbiAxMjM6XHRzdGF0aWMgaW5saW5lIHN0cnVjdCBza19idWZmICpjYWxsX2dyb19yZWNlaXZlX3NrKGdyb19yZWNlaXZlX3NrX3QgY2IsXG4gMTI0Olx0XHRcdFx0XHRcdFx0ICBzdHJ1Y3Qgc29jayAqc2ssXG4gMTI1Olx0XHRcdFx0XHRcdFx0ICBzdHJ1Y3QgbGlzdF9oZWFkICpoZWFkLFxuIDEyNjpcdFx0XHRcdFx0XHRcdCAgc3RydWN0IHNrX2J1ZmYgKnNrYilcbiAxMjc6XHR7XG4gMTI4Olx0XHRpZiAodW5saWtlbHkoZ3JvX3JlY3Vyc2lvbl9pbmNfdGVzdChza2IpKSkge1xuIDEyOTpcdFx0XHROQVBJX0dST19DQihza2IpLVx1MDAzZWZsdXNoIHw9IDE7XG4gMTMwOlx0XHRcdHJldHVybiBOVUxMO1xuIDEzMTpcdFx0fVxuIDEzMjpcdFxuIDEzMzpcdFx0cmV0dXJuIGNiKHNrLCBoZWFkLCBza2IpO1xuIDEzNDpcdH1cbiAxMzU6XHRcbiAxMzY6XHRzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCBza2JfZ3JvX29mZnNldChjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuIDEzNzpcdHtcbiAxMzg6XHRcdHJldHVybiBOQVBJX0dST19DQihza2IpLVx1MDAzZWRhdGFfb2Zmc2V0O1xuIDEzOTpcdH1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDcgMDI6NTg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogOTQ5OQoJCQkJCQkJb3V0cHV0OiAzOQoJCQkJCQkJdGhvdWdodHM6IDUwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRob3VnaHQgcHJvY2VzcywgYXMgaWYgSSB3ZXJlIGFuYWx5emluZyB0aGlzIGNvZGU6CgoqKkRlZXAgRGl2ZSBpbnRvIFVEUCBHUk8qKgoKT2theSwgc28gSSBuZWVkIHRvIHRyYWNlIHRoZSBwYXRoIG9mIGB1ZHBfdHVubmVsX2dyb19yY3ZgIGFuZCBmaWd1cmUgb3V0IGV4YWN0bHkgaG93IGFuZCB3aGVyZSBHZW5lcmljIFJlY2VpdmUgT2ZmbG9hZCAoR1JPKSBpcyBiZWluZyBhcHBsaWVkIGluIHRoaXMgVURQIHR1bm5lbCBzY2VuYXJpby4gTGV0JiMzOTtzIHN0YXJ0IHdpdGggYSBzb2xpZCBhcHByb2FjaC4gTXkgZmlyc3Qgc3RlcCBpcyB0byBkaWcgaW50byBgdWRwX2dyb19yZWNlaXZlYCBpbiBgbmV0L2lwdjQvdWRwX29mZmxvYWQuY2AuIFRoYXQgZnVuY3Rpb24gaXMgY3J1Y2lhbC4gS25vd2luZyB0aGF0IGZ1bmN0aW9uLCB0aGUgY2FsbCBzdGFjayB3aWxsIGJlY29tZSBvYnZpb3VzLiBUaGF0IGlzIG15IHVuZGVyc3RhbmRpbmcuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDAyOjU4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L2lwdjQvdWRwX29mZmxvYWQuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDc2NSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA4MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgNzY1Olx0XHQvKiBtaXNtYXRjaCwgYnV0IHdlIG5ldmVyIG5lZWQgdG8gZmx1c2ggKi9cbiA3NjY6XHRcdHJldHVybiBOVUxMO1xuIDc2NzpcdH1cbiA3Njg6XHRcbiA3Njk6XHRzdHJ1Y3Qgc2tfYnVmZiAqdWRwX2dyb19yZWNlaXZlKHN0cnVjdCBsaXN0X2hlYWQgKmhlYWQsIHN0cnVjdCBza19idWZmICpza2IsXG4gNzcwOlx0XHRcdFx0XHRzdHJ1Y3QgdWRwaGRyICp1aCwgc3RydWN0IHNvY2sgKnNrKVxuIDc3MTpcdHtcbiA3NzI6XHRcdHN0cnVjdCBza19idWZmICpwcCA9IE5VTEw7XG4gNzczOlx0XHRzdHJ1Y3Qgc2tfYnVmZiAqcDtcbiA3NzQ6XHRcdHN0cnVjdCB1ZHBoZHIgKnVoMjtcbiA3NzU6XHRcdHVuc2lnbmVkIGludCBvZmYgPSBza2JfZ3JvX29mZnNldChza2IpO1xuIDc3NjpcdFx0dW5zaWduZWQgaW50IHVsZW47XG4gNzc3Olx0XHRpbnQgZmx1c2ggPSAxO1xuIDc3ODpcdFxuIDc3OTpcdFx0LyogRG8gbm90IGRlYWwgd2l0aCBwYWRkZWQgb3IgbWFsaWNpb3VzIHBhY2tldHMsIHNvcnJ5ISAqL1xuIDc4MDpcdFx0dWxlbiA9IHVkcF9nZXRfbGVuX3Nob3J0KHVoKTtcbiA3ODE6XHRcdGlmICh1bGVuIFx1MDAzYz0gc2l6ZW9mKCp1aCkgfHwgdWxlbiAhPSBza2JfZ3JvX2xlbihza2IpKVxuIDc4MjpcdFx0XHRnb3RvIG91dDtcbiA3ODM6XHRcbiA3ODQ6XHRcdC8qIFdlIGNhbiBkbyBMNCBhZ2dyZWdhdGlvbiBvbmx5IGlmIHRoZSBwYWNrZXQgY2FuJiMzOTt0IGxhbmQgaW4gYSB0dW5uZWxcbiA3ODU6XHRcdCAqIG90aGVyd2lzZSB3ZSBjb3VsZCBjb3JydXB0IHRoZSBpbm5lciBzdHJlYW0uIERldGVjdGluZyBzdWNoIHBhY2tldHNcbiA3ODY6XHRcdCAqIGNhbm5vdCBiZSBmb29scHJvb2YgYW5kIHRoZSBhZ2dyZWdhdGlvbiBtaWdodCBzdGlsbCBoYXBwZW4gaW4gc29tZVxuIDc4NzpcdFx0ICogY2FzZXMuIFN1Y2ggcGFja2V0cyBzaG91bGQgYmUgY2F1Z2h0IGluIHVkcF91bmV4cGVjdGVkX2dzbyBsYXRlci5cbiA3ODg6XHRcdCAqL1xuIDc4OTpcdFx0TkFQSV9HUk9fQ0Ioc2tiKS1cdTAwM2Vpc19mbGlzdCA9IDA7XG4gNzkwOlx0XHRpZiAoIXNrIHx8ICF1ZHBfc2soc2spLVx1MDAzZWdyb19yZWNlaXZlKSB7XG4gNzkxOlx0XHRcdC8qIElmIHRoZSBwYWNrZXQgd2FzIGxvY2FsbHkgZW5jYXBzdWxhdGVkIGluIGEgVURQIHR1bm5lbCB0aGF0XG4gNzkyOlx0XHRcdCAqIHdhc24mIzM5O3QgZGV0ZWN0ZWQgYWJvdmUsIGRvIG5vdCBHUk8uXG4gNzkzOlx0XHRcdCAqL1xuIDc5NDpcdFx0XHRpZiAoc2tiLVx1MDAzZWVuY2Fwc3VsYXRpb24pXG4gNzk1Olx0XHRcdFx0Z290byBvdXQ7XG4gNzk2Olx0XG4gNzk3Olx0XHRcdGlmIChza2ItXHUwMDNlZGV2LVx1MDAzZWZlYXR1cmVzIFx1MDAyNiBORVRJRl9GX0dST19GUkFHTElTVClcbiA3OTg6XHRcdFx0XHROQVBJX0dST19DQihza2IpLVx1MDAzZWlzX2ZsaXN0ID0gc2sgPyAhdWRwX3Rlc3RfYml0KEdST19FTkFCTEVELCBzaykgOiAxO1xuIDc5OTpcdFxuIDgwMDpcdFx0XHRpZiAoKCFzayBcdTAwMjZcdTAwMjYgKHNrYi1cdTAwM2VkZXYtXHUwMDNlZmVhdHVyZXMgXHUwMDI2IE5FVElGX0ZfR1JPX1VEUF9GV0QpKSB8fFxuIDgwMTpcdFx0XHQgICAgKHNrIFx1MDAyNlx1MDAyNiB1ZHBfdGVzdF9iaXQoR1JPX0VOQUJMRUQsIHNrKSkgfHwgTkFQSV9HUk9fQ0Ioc2tiKS1cdTAwM2Vpc19mbGlzdClcbiA4MDI6XHRcdFx0XHRyZXR1cm4gY2FsbF9ncm9fcmVjZWl2ZSh1ZHBfZ3JvX3JlY2VpdmVfc2VnbWVudCwgaGVhZCwgc2tiKTtcbiA4MDM6XHRcbiA4MDQ6XHRcdFx0Lyogbm8gR1JPLCBiZSBzdXJlIGZsdXNoIHRoZSBjdXJyZW50IHBhY2tldCAqL1xuIDgwNTpcdFx0XHRnb3RvIG91dDtcbiA4MDY6XHRcdH1cbiA4MDc6XHRcbiA4MDg6XHRcdGlmIChOQVBJX0dST19DQihza2IpLVx1MDAzZWVuY2FwX21hcmsgfHxcbiA4MDk6XHRcdCAgICAodWgtXHUwMDNlY2hlY2sgXHUwMDI2XHUwMDI2IHNrYi1cdTAwM2VpcF9zdW1tZWQgIT0gQ0hFQ0tTVU1fUEFSVElBTCBcdTAwMjZcdTAwMjZcbiA4MTA6XHRcdCAgICAgTkFQSV9HUk9fQ0Ioc2tiKS1cdTAwM2Vjc3VtX2NudCA9PSAwIFx1MDAyNlx1MDAyNlxuIDgxMTpcdFx0ICAgICAhTkFQSV9HUk9fQ0Ioc2tiKS1cdTAwM2Vjc3VtX3ZhbGlkKSlcbiA4MTI6XHRcdFx0Z290byBvdXQ7XG4gODEzOlx0XG4gODE0Olx0XHQvKiBtYXJrIHRoYXQgdGhpcyBza2IgcGFzc2VkIG9uY2UgdGhyb3VnaCB0aGUgdHVubmVsIGdybyBsYXllciAqL1xuIDgxNTpcdFx0TkFQSV9HUk9fQ0Ioc2tiKS1cdTAwM2VlbmNhcF9tYXJrID0gMTtcbiA4MTY6XHRcbiA4MTc6XHRcdGZsdXNoID0gMDtcbiA4MTg6XHRcbiA4MTk6XHRcdGxpc3RfZm9yX2VhY2hfZW50cnkocCwgaGVhZCwgbGlzdCkge1xuIDgyMDpcdFx0XHRpZiAoIU5BUElfR1JPX0NCKHApLVx1MDAzZXNhbWVfZmxvdylcbiA4MjE6XHRcdFx0XHRjb250aW51ZTtcbiA4MjI6XHRcbiA4MjM6XHRcdFx0dWgyID0gKHN0cnVjdCB1ZHBoZHIgICAqKShwLVx1MDAzZWRhdGEgJiM0Mzsgb2ZmKTtcbiA4MjQ6XHRcbiA4MjU6XHRcdFx0LyogTWF0Y2ggcG9ydHMgYW5kIGVpdGhlciBjaGVja3N1bXMgYXJlIGVpdGhlciBib3RoIHplcm9cbiA4MjY6XHRcdFx0ICogb3Igbm9uemVyby5cbiA4Mjc6XHRcdFx0ICovXG4gODI4Olx0XHRcdGlmICgoKih1MzIgKilcdTAwMjZ1aC1cdTAwM2Vzb3VyY2UgIT0gKih1MzIgKilcdTAwMjZ1aDItXHUwMDNlc291cmNlKSB8fFxuIDgyOTpcdFx0XHQgICAgKCF1aC1cdTAwM2VjaGVjayBeICF1aDItXHUwMDNlY2hlY2spKSB7XG4gODMwOlx0XHRcdFx0TkFQSV9HUk9fQ0IocCktXHUwMDNlc2FtZV9mbG93ID0gMDtcbiA4MzE6XHRcdFx0XHRjb250aW51ZTtcbiA4MzI6XHRcdFx0fVxuIDgzMzpcdFx0fVxuIDgzNDpcdFxuIDgzNTpcdFx0c2tiX2dyb19wdWxsKHNrYiwgc2l6ZW9mKHN0cnVjdCB1ZHBoZHIpKTsgLyogcHVsbCBlbmNhcHN1bGF0aW5nIHVkcCBoZWFkZXIgKi9cbiA4MzY6XHRcdHNrYl9ncm9fcG9zdHB1bGxfcmNzdW0oc2tiLCB1aCwgc2l6ZW9mKHN0cnVjdCB1ZHBoZHIpKTtcbiA4Mzc6XHRcdHBwID0gdWRwX3R1bm5lbF9ncm9fcmN2KHNrLCBoZWFkLCBza2IpO1xuIDgzODpcdFxuIDgzOTpcdG91dDpcbiA4NDA6XHRcdHNrYl9ncm9fZmx1c2hfZmluYWwoc2tiLCBwcCwgZmx1c2gpO1xuIDg0MTpcdFx0cmV0dXJuIHBwO1xuIDg0MjpcdH1cbiA4NDM6XHRcbiA4NDQ6XHRzdGF0aWMgc3RydWN0IHNvY2sgKnVkcDRfZ3JvX2xvb2t1cF9za2Ioc3RydWN0IHNrX2J1ZmYgKnNrYiwgX19iZTE2IHNwb3J0LFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNyAwMjo1ODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMTA2MAoJCQkJCQkJb3V0cHV0OiAxOQoJCQkJCQkJdGhvdWdodHM6IDc3MwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXNpcyBvZiBVRFAgR1JPIFByb2Nlc3NpbmcgTW9kaWZpY2F0aW9uKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byB0cmFjZSB0aGUgZXhlY3V0aW9uIHBhdGguIGB1ZHBfZ3JvX3JlY2VpdmVgIGNhbGxzIGB1ZHBfdHVubmVsX2dyb19yY3ZgLCBhbmQgd2UmIzM5O3JlIGxvb2tpbmcgYXQgVURQIHBhY2tldHMgZHVyaW5nIEdSTyAoR2VuZXJpYyBSZWNlaXZlIE9mZmxvYWQpIHByb2Nlc3NpbmcuIFRoaXMgaXMgY2xlYXJseSB3aXRoaW4gdGhlIGNvcmUgbmV0d29ya2luZyBzdGFjaywgc3BlY2lmaWNhbGx5IGBuZXQvaXB2NC91ZHBfb2ZmbG9hZC5jYC4gVGhlIGZhY3QgdGhhdCBTeXprYWxsZXIgcmVndWxhcmx5IGV4ZXJjaXNlcyBVRFAsIHNldHMgdXAgdHVubmVscyAoVlhMQU4sIEdFTkVWRSwgZXRjLiksIGFuZCB1c2VzIGxvb3BiYWNrLCB0dW4vdGFwLCB2ZXRoLCBtZWFucyB0aGlzIGFyZWEgaXMgZGVmaW5pdGVseSByZWFjaGFibGUsIGFuZCBwb3RlbnRpYWxseSB2dWxuZXJhYmxlLgoKVGhlIGtleSBjaGFuZ2UgaXMgdGhlIHJlbW92YWwgb2YgdGhlIGBzdGF0aWNfYnJhbmNoX2xpa2VseWAgY2hlY2sgYW5kIGBzdGF0aWNfY2FsbGAgaW4gYHVkcF90dW5uZWxfZ3JvX3JjdmAuIEl0IHNlZW1zIG5vdyB3ZSYjMzk7cmUganVzdCBkaXJlY3RseSBjYWxsaW5nIGBjYWxsX2dyb19yZWNlaXZlX3NrYC4gTXkgZmlyc3QgcXVlc3Rpb24gaXMgKndoeSo/ICBJcyB0aGlzIGEgc3RyYWlnaHQtdXAgb3B0aW1pemF0aW9uLCBhIHJlZmFjdG9yaW5nLCBvciBhIGZpeD8gQSBsb29rIGF0IHRoZSBnaXQgbG9nIG9yIGNvbW1lbnRzIHNob3VsZCB0ZWxsIHRoZSB0YWxlLCBvciB0aGUgYHVkcF90dW5uZWxfdXBkYXRlX2dyb19yY3ZgIGZ1bmN0aW9uIG1pZ2h0IHByb3ZpZGUgc29tZSBjb250ZXh0LgoKQWgsIGhlcmUmIzM5O3MgdGhlIHJlbGV2YW50IHNlY3Rpb24gZnJvbSBgdWRwX3R1bm5lbF91cGRhdGVfZ3JvX3JjdmAuIEl0IGxvb2tzIGxpa2UgdGhlIHN0YXRpYyBicmFuY2ggaXMgc3RpbGwgdXBkYXRlZCBiYXNlZCBvbiBgdWRwX3R1bm5lbF9ncm9fdHlwZV9ucmAsIGJ1dCBpdCYjMzk7cyBhcHBhcmVudGx5IGJlaW5nIGJ5cGFzc2VkIG9yIHJlbW92ZWQgaW5zaWRlIGB1ZHBfdHVubmVsX2dyb19yY3ZgIGl0c2VsZi4gVGhhdCYjMzk7cyBhIHNpZ25pZmljYW50IG1vZGlmaWNhdGlvbiB0byB0aGUgY29yZSBuZXR3b3JraW5nIGxvZ2ljIGludm9sdmVkIGluIGB1ZHBfdHVubmVsX2dyb19yY3ZgIGFuZCBjb25zZXF1ZW50bHkgYHVkcF9ncm9fcmVjZWl2ZWAuCgpOb3csIGxldCYjMzk7cyBhc3Nlc3MgdGhlIGltcGFjdCBiYXNlZCBvbiBteSBrbm93bGVkZ2UuIENvbnNpZGVyaW5nIHRoZSBjcml0ZXJpYToKCiogICAqKkNvcmUgU3Vic3lzdGVtczoqKiBZZXMsIGFueSBtb2RpZmljYXRpb24gdG8gbG9naWMgaGVyZSBpbiBjb3JlIG5ldHdvcmtpbmcgaXMgcmVsZXZhbnQuCiogICAqKlJlZmFjdG9yaW5ncyBhbmQgQ29kZSBDbGVhbnVwczoqKiBJZiB0aGlzICppcyogYSByZWZhY3RvcmluZywgaXQmIzM5O3Mgc3RpbGwgcmVzdHJ1Y3R1cmluZyByZWFjaGFibGUgZGF0YSBzdHJ1Y3R1cmVzIG9yIGFsZ29yaXRobSBmbG93cywgbWFraW5nIGl0IGltcG9ydGFudC4KKiAgICoqUmVhY2hhYmxlIENvZGU6KiogQWJzb2x1dGVseS4gVURQIEdSTyBpcyBleGVyY2lzZWQgaW4gY29tbW9uIHZpcnR1YWwgZW52aXJvbm1lbnRzIHVzZWQgZm9yIHRlc3RpbmcgYW5kIGZ1enppbmcuCgpHaXZlbiB0aGF0LCBJIGNhbiBjb25maWRlbnRseSBzYXkgdGhpcyBpcyBgV29ydGhGdXp6aW5nYCwgYW5kIHRoZSBxdWVzdGlvbiBpcyB3aGF0IHN5bWJvbHMgd2UgbmVlZCB0byBmb2N1cyBvbi4KClJlbGV2YW50IHN5bWJvbHM/IFRoZSBwcmltYXJ5IGZ1bmN0aW9ucyBhcmUgb2J2aW91c2x5IGB1ZHBfdHVubmVsX2dyb19yY3ZgIGFuZCBgdWRwX2dyb19yZWNlaXZlYC4gQnV0IHRvIGJlIHRob3JvdWdoLCBJIHNob3VsZCBjaGVjayB0aGUgY2FsbGVycyBvZiBib3RoIG9mIHRob3NlIGZ1bmN0aW9ucyBhbmQgb3RoZXIgcmVsYXRlZCBmdW5jdGlvbnMuIExldCYjMzk7cyBkbyBhIHF1aWNrIGdyZXAuIFRoaXMgaXMgZGVmaW5pdGVseSBzb21ldGhpbmcgdG8gYWRkIHRvIHRoZSBmdXp6aW5nIHRhcmdldHMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDAyOjU4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3VkcF9ncm9fcmVjZWl2ZSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtpbmNsdWRlL2xpbnV4L3VkcC5oPTIxND1zdGF0aWMgaW5saW5lIGJvb2wgdWRwX3VuZXhwZWN0ZWRfZ3NvKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYilcbi0tXG5pbmNsdWRlL2xpbnV4L3VkcC5oLTIyNy1cdC8qIEdTTyBwYWNrZXRzIGxhY2tpbmcgdGhlIFNLQl9HU09fVURQX1RVTk5FTC9fQ1NVTSBiaXRzIG1pZ2h0IHN0aWxsXG5pbmNsdWRlL2xpbnV4L3VkcC5oOjIyODpcdCAqIGxhbmQgaW4gYSB0dW5uZWwgYXMgdGhlIHNvY2tldCBjaGVjayBpbiB1ZHBfZ3JvX3JlY2VpdmUgY2Fubm90IGJlXG5pbmNsdWRlL2xpbnV4L3VkcC5oLTIyOS1cdCAqIGZvb2xwcm9vZi5cbi0tXG5pbmNsdWRlL25ldC9ncm8uaD00MDk9aW50IHVkcDZfZ3JvX2NvbXBsZXRlKHN0cnVjdCBza19idWZmICosIGludCk7XG4tLVxuaW5jbHVkZS9uZXQvZ3JvLmgtNDE3LVxuaW5jbHVkZS9uZXQvZ3JvLmg6NDE4OnN0cnVjdCBza19idWZmICp1ZHBfZ3JvX3JlY2VpdmUoc3RydWN0IGxpc3RfaGVhZCAqaGVhZCwgc3RydWN0IHNrX2J1ZmYgKnNrYixcbmluY2x1ZGUvbmV0L2dyby5oLTQxOS1cdFx0XHRcdHN0cnVjdCB1ZHBoZHIgKnVoLCBzdHJ1Y3Qgc29jayAqc2spO1xuLS1cbm5ldC9pcHY0L3VkcC5jPTI4NDQ9c3RhdGljIHZvaWQgdWRwX2Rlc3Ryb3lfc29jayhzdHJ1Y3Qgc29jayAqc2spXG4tLVxubmV0L2lwdjQvdWRwLmMtMjg2Ni1cbm5ldC9pcHY0L3VkcC5jOjI4Njc6dHlwZWRlZiBzdHJ1Y3Qgc2tfYnVmZiAqKCp1ZHBfZ3JvX3JlY2VpdmVfdCkoc3RydWN0IHNvY2sgKnNrLFxubmV0L2lwdjQvdWRwLmMtMjg2OC1cdFx0XHRcdFx0ICAgICBzdHJ1Y3QgbGlzdF9oZWFkICpoZWFkLFxuLS1cbm5ldC9pcHY0L3VkcC5jPTI4NzE9c3RhdGljIHZvaWQgc2V0X3hmcm1fZ3JvX3VkcF9lbmNhcF9yY3YoX191MTYgZW5jYXBfdHlwZSwgdW5zaWduZWQgc2hvcnQgZmFtaWx5LFxuLS1cbm5ldC9pcHY0L3VkcC5jLTI4NzQtI2lmZGVmIENPTkZJR19YRlJNXG5uZXQvaXB2NC91ZHAuYzoyODc1Olx0dWRwX2dyb19yZWNlaXZlX3QgbmV3X2dyb19yZWNlaXZlO1xubmV0L2lwdjQvdWRwLmMtMjg3Ni1cbi0tXG5uZXQvaXB2NC91ZHBfb2ZmbG9hZC5jPTYyNj1zdGF0aWMgc3RydWN0IHNrX2J1ZmYgKnVkcDRfdWZvX2ZyYWdtZW50KHN0cnVjdCBza19idWZmICpza2IsXG4tLVxubmV0L2lwdjQvdWRwX29mZmxvYWQuYy02ODctI2RlZmluZSBVRFBfR1JPX0NOVF9NQVggNjRcbm5ldC9pcHY0L3VkcF9vZmZsb2FkLmM6Njg4OnN0YXRpYyBzdHJ1Y3Qgc2tfYnVmZiAqdWRwX2dyb19yZWNlaXZlX3NlZ21lbnQoc3RydWN0IGxpc3RfaGVhZCAqaGVhZCxcbm5ldC9pcHY0L3VkcF9vZmZsb2FkLmMtNjg5LVx0XHRcdFx0XHQgICAgICAgc3RydWN0IHNrX2J1ZmYgKnNrYilcbi0tXG5uZXQvaXB2NC91ZHBfb2ZmbG9hZC5jLTc2OC1cbm5ldC9pcHY0L3VkcF9vZmZsb2FkLmM6NzY5OnN0cnVjdCBza19idWZmICp1ZHBfZ3JvX3JlY2VpdmUoc3RydWN0IGxpc3RfaGVhZCAqaGVhZCwgc3RydWN0IHNrX2J1ZmYgKnNrYixcbm5ldC9pcHY0L3VkcF9vZmZsb2FkLmMtNzcwLVx0XHRcdFx0c3RydWN0IHVkcGhkciAqdWgsIHN0cnVjdCBzb2NrICpzaylcbi0tXG5uZXQvaXB2NC91ZHBfb2ZmbG9hZC5jLTgwMS1cdFx0ICAgIChzayBcdTAwMjZcdTAwMjYgdWRwX3Rlc3RfYml0KEdST19FTkFCTEVELCBzaykpIHx8IE5BUElfR1JPX0NCKHNrYiktXHUwMDNlaXNfZmxpc3QpXG5uZXQvaXB2NC91ZHBfb2ZmbG9hZC5jOjgwMjpcdFx0XHRyZXR1cm4gY2FsbF9ncm9fcmVjZWl2ZSh1ZHBfZ3JvX3JlY2VpdmVfc2VnbWVudCwgaGVhZCwgc2tiKTtcbm5ldC9pcHY0L3VkcF9vZmZsb2FkLmMtODAzLVxuLS1cbm5ldC9pcHY0L3VkcF9vZmZsb2FkLmM9ODYzPXN0cnVjdCBza19idWZmICp1ZHA0X2dyb19yZWNlaXZlKHN0cnVjdCBsaXN0X2hlYWQgKmhlYWQsIHN0cnVjdCBza19idWZmICpza2IpXG4tLVxubmV0L2lwdjQvdWRwX29mZmxvYWQuYy04ODUtXG5uZXQvaXB2NC91ZHBfb2ZmbG9hZC5jOjg4NjpcdHBwID0gdWRwX2dyb19yZWNlaXZlKGhlYWQsIHNrYiwgdWgsIHNrKTtcbm5ldC9pcHY0L3VkcF9vZmZsb2FkLmMtODg3LVx0cmV0dXJuIHBwO1xuLS1cbm5ldC9pcHY2L3VkcF9vZmZsb2FkLmM9MTM0PXN0cnVjdCBza19idWZmICp1ZHA2X2dyb19yZWNlaXZlKHN0cnVjdCBsaXN0X2hlYWQgKmhlYWQsIHN0cnVjdCBza19idWZmICpza2IpXG4tLVxubmV0L2lwdjYvdWRwX29mZmxvYWQuYy0xNTctXG5uZXQvaXB2Ni91ZHBfb2ZmbG9hZC5jOjE1ODpcdHBwID0gdWRwX2dyb19yZWNlaXZlKGhlYWQsIHNrYiwgdWgsIHNrKTtcbm5ldC9pcHY2L3VkcF9vZmZsb2FkLmMtMTU5LVx0cmV0dXJuIHBwO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNyAwMjo1ODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMzQyOAoJCQkJCQkJb3V0cHV0OiAyNAoJCQkJCQkJdGhvdWdodHM6IDExOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgVURQIEdSTyBPZmZsb2FkIEZ1bmN0aW9ucyoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBGaXJzdCwgSSBzZWUgdGhhdCBgdWRwX2dyb19yZWNlaXZlYCBpcyBhIGNlbnRyYWwgZnVuY3Rpb24sIGxpa2VseSB0aGUgY29yZSBHUk8gKEdlbmVyaWMgUmVjZWl2ZSBPZmZsb2FkKSBoYW5kbGVyIGZvciBVRFAgcGFja2V0cywgYW5kIGl0JiMzOTtzIGRlZmluaXRlbHkgaW4gcGxheSB3aXRoaW4gYm90aCBgdWRwNF9ncm9fcmVjZWl2ZWAgYW5kIGB1ZHA2X2dyb19yZWNlaXZlYC4gR29vZCwgdGhhdCBtYWtlcyBzZW5zZS4gTm93LCB3aGF0JiMzOTtzIHRoaXMgYHVkcF90dW5uZWxfZ3JvX3JjdmAgZG9pbmc/IEhtbSwgaXQmIzM5O3MgbWFya2VkIGFzIHN0YXRpYyB3aXRoaW4gYG5ldC9pcHY0L3VkcF9vZmZsb2FkLmNgLiBUaGF0IGltcGxpZXMgaXQmIzM5O3MgYW4gaW50ZXJuYWwgaGVscGVyIGZ1bmN0aW9uLCBub3QgZGlyZWN0bHkgZXhwb3NlZCBmb3IgZXh0ZXJuYWwgdXNlIC0gcHJvYmFibHkgaGFuZGxpbmcgc29tZSBpbnRlcm5hbCB0dW5uZWwtc3BlY2lmaWMgbG9naWMuIEludGVyZXN0aW5nLgoKTm93LCBgdWRwX3R1bm5lbF91cGRhdGVfZ3JvX3JjdmAgaXMgZXhwb3J0ZWQgZnJvbSB0aGUgc2FtZSBmaWxlLiBJdCYjMzk7cyBsaWtlbHkgaW52b2x2ZWQgaW4gdXBkYXRpbmcgc29tZSBzdGF0ZSByZWxhdGVkIHRvIHRoZSBHUk8gb2ZmbG9hZCwgcGVyaGFwcyBiYXNlZCBvbiB0dW5uZWwgY29uZmlndXJhdGlvbiBvciBwYWNrZXQgY2hhcmFjdGVyaXN0aWNzLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgcmVsYXRpb25zaGlwIGJldHdlZW4gdGhlc2UgdHVubmVsLXJlbGF0ZWQgZnVuY3Rpb25zIGFuZCB0aGUgY29yZSBHUk8gcHJvY2Vzcy4gVGhlIG5leHQgbG9naWNhbCBzdGVwIGlzIHRvIHBpbnBvaW50IHdoZXJlIGB1ZHBfdHVubmVsX3VwZGF0ZV9ncm9fcmN2YCBpcyBhY3R1YWxseSBiZWluZyAqY2FsbGVkKi4gVGhhdCYjMzk7bGwgZ2l2ZSBtZSBhIG11Y2ggYmV0dGVyIGlkZWEgb2YgaXRzIHJvbGUgaW4gdGhlIGJpZ2dlciBwaWN0dXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNyAwMjo1ODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt1ZHBfdHVubmVsX3VwZGF0ZV9ncm9fcmN2JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2luY2x1ZGUvbmV0L3VkcF90dW5uZWwuaD0yMTE9dm9pZCB1ZHBfdHVubmVsX3VwZGF0ZV9ncm9fbG9va3VwKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHNvY2sgKnNrLCBib29sIGFkZCk7XG5pbmNsdWRlL25ldC91ZHBfdHVubmVsLmg6MjEyOnZvaWQgdWRwX3R1bm5lbF91cGRhdGVfZ3JvX3JjdihzdHJ1Y3Qgc29jayAqc2ssIGJvb2wgYWRkKTtcbmluY2x1ZGUvbmV0L3VkcF90dW5uZWwuaC0yMTMtI2Vsc2VcbmluY2x1ZGUvbmV0L3VkcF90dW5uZWwuaD0yMTQ9c3RhdGljIGlubGluZSB2b2lkIHVkcF90dW5uZWxfdXBkYXRlX2dyb19sb29rdXAoc3RydWN0IG5ldCAqbmV0LFxuaW5jbHVkZS9uZXQvdWRwX3R1bm5lbC5oLTIxNS1cdFx0XHRcdFx0XHRzdHJ1Y3Qgc29jayAqc2ssIGJvb2wgYWRkKSB7fVxuaW5jbHVkZS9uZXQvdWRwX3R1bm5lbC5oOjIxNjpzdGF0aWMgaW5saW5lIHZvaWQgdWRwX3R1bm5lbF91cGRhdGVfZ3JvX3JjdihzdHJ1Y3Qgc29jayAqc2ssIGJvb2wgYWRkKSB7fVxuaW5jbHVkZS9uZXQvdWRwX3R1bm5lbC5oLTIxNy0jZW5kaWZcbi0tXG5pbmNsdWRlL25ldC91ZHBfdHVubmVsLmg9MjE5PXN0YXRpYyBpbmxpbmUgdm9pZCB1ZHBfdHVubmVsX2NsZWFudXBfZ3JvKHN0cnVjdCBzb2NrICpzaylcbmluY2x1ZGUvbmV0L3VkcF90dW5uZWwuaC0yMjAte1xuaW5jbHVkZS9uZXQvdWRwX3R1bm5lbC5oOjIyMTpcdHVkcF90dW5uZWxfdXBkYXRlX2dyb19yY3Yoc2ssIGZhbHNlKTtcbmluY2x1ZGUvbmV0L3VkcF90dW5uZWwuaC0yMjItXHR1ZHBfdHVubmVsX3VwZGF0ZV9ncm9fbG9va3VwKHNvY2tfbmV0KHNrKSwgc2ssIGZhbHNlKTtcbi0tXG5uZXQvaXB2NC91ZHAuYz0yODcxPXN0YXRpYyB2b2lkIHNldF94ZnJtX2dyb191ZHBfZW5jYXBfcmN2KF9fdTE2IGVuY2FwX3R5cGUsIHVuc2lnbmVkIHNob3J0IGZhbWlseSxcbi0tXG5uZXQvaXB2NC91ZHAuYy0yODg4LVx0XHRcdGlmICh1ZHBfc2soc2spLVx1MDAzZWdyb19yZWNlaXZlKVxubmV0L2lwdjQvdWRwLmM6Mjg4OTpcdFx0XHRcdHVkcF90dW5uZWxfdXBkYXRlX2dyb19yY3Yoc2ssIGZhbHNlKTtcbm5ldC9pcHY0L3VkcC5jLTI4OTAtXG5uZXQvaXB2NC91ZHAuYy0yODkxLVx0XHRcdFdSSVRFX09OQ0UodWRwX3NrKHNrKS1cdTAwM2Vncm9fcmVjZWl2ZSwgbmV3X2dyb19yZWNlaXZlKTtcbm5ldC9pcHY0L3VkcC5jOjI4OTI6XHRcdFx0dWRwX3R1bm5lbF91cGRhdGVfZ3JvX3JjdihzaywgdHJ1ZSk7XG5uZXQvaXB2NC91ZHAuYy0yODkzLVx0XHR9XG4tLVxubmV0L2lwdjQvdWRwX29mZmxvYWQuYz03Nz1FWFBPUlRfU1lNQk9MX0dQTCh1ZHBfdHVubmVsX3VwZGF0ZV9ncm9fbG9va3VwKTtcbm5ldC9pcHY0L3VkcF9vZmZsb2FkLmMtNzgtXG5uZXQvaXB2NC91ZHBfb2ZmbG9hZC5jOjc5OnZvaWQgdWRwX3R1bm5lbF91cGRhdGVfZ3JvX3JjdihzdHJ1Y3Qgc29jayAqc2ssIGJvb2wgYWRkKVxubmV0L2lwdjQvdWRwX29mZmxvYWQuYy04MC17XG4tLVxubmV0L2lwdjQvdWRwX29mZmxvYWQuYy0xNDQtfVxubmV0L2lwdjQvdWRwX29mZmxvYWQuYzoxNDU6RVhQT1JUX1NZTUJPTF9HUEwodWRwX3R1bm5lbF91cGRhdGVfZ3JvX3Jjdik7XG5uZXQvaXB2NC91ZHBfb2ZmbG9hZC5jLTE0Ni1cbi0tXG5uZXQvaXB2NC91ZHBfdHVubmVsX2NvcmUuYz03MT12b2lkIHNldHVwX3VkcF90dW5uZWxfc29jayhzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBzb2NrICpzayxcbi0tXG5uZXQvaXB2NC91ZHBfdHVubmVsX2NvcmUuYy05MS1cbm5ldC9pcHY0L3VkcF90dW5uZWxfY29yZS5jOjkyOlx0dWRwX3R1bm5lbF91cGRhdGVfZ3JvX3JjdihzaywgdHJ1ZSk7XG5uZXQvaXB2NC91ZHBfdHVubmVsX2NvcmUuYy05My1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDcgMDI6NTg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTQ2NDcKCQkJCQkJCW91dHB1dDogMjEKCQkJCQkJCXRob3VnaHRzOiAzMjYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIFVEUCBHUk8gYW5kIFR1bm5lbHMgaW4gdGhlIEtlcm5lbCoqCgpPa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyBVRFAgR1JPIChHZW5lcmljIFJlY2VpdmUgT2ZmbG9hZCkgaW50ZXJhY3RzIHdpdGggdHVubmVscywgc3BlY2lmaWNhbGx5IHdpdGhpbiBgbmV0L2lwdjQvdWRwX29mZmxvYWQuY2AuIEZpcnN0LCBJIHF1aWNrbHkgY29uZmlybSB0aGF0IHRoZSBjb3JlIGZpbGUgaXMgYnVpbHQgdW5kZXIgYENPTkZJR19JTkVUYCwgYXMgZXhwZWN0ZWQuIE5vdywgSSBzaG91bGQgZG91YmxlIGNoZWNrIHRoZSBjb2RlIGJsb2NrIGd1YXJkZWQgYnkgYCNpZiBJU19FTkFCTEVEKENPTkZJR19ORVRfVURQX1RVTk5FTClgLiBBaCwgbGluZSAxNyBvZiBgdWRwX29mZmxvYWQuY2AgaXMgdGhlIGtleS4KCkxldCBtZSB0YWtlIGEgY2xvc2VyIGxvb2sgYXQgdGhhdCBzcGVjaWZpYyBzZWN0aW9uIG9mIGNvZGUuIE9rYXksIGxpbmVzIDE3IHRocm91Z2ggMjAgYXJlIHVzaW5nIHRoYXQgY29uZGl0aW9uYWwuIEl0IGFwcGVhcnMgdGhlIHJlbGV2YW50IGNvZGUsIHRoZSBgdWRwX3R1bm5lbF9ncm9fcmN2YCBmdW5jdGlvbiwgaXMgZGVmaW5lZCB3aXRoaW4gdGhhdCBibG9jayBhbmQgb25seSBleGlzdHMgaWYgYENPTkZJR19ORVRfVURQX1RVTk5FTGAgaXMgZW5hYmxlZC4gVGhlIG90aGVyIHNpZGUgb2YgdGhhdCBjb25kaXRpb25hbCBpcyBhdCBsaW5lIDE1NCwgd2l0aCBgI2Vsc2VgLiBJdCBsb29rcyBsaWtlIHRoZSBtb2RpZmllZCBHUk8gZnVuY3Rpb24gKGRlZmluZWQgbGluZXMgMTQ3LTE1MikgaXMgYWxzbyBwcm90ZWN0ZWQgYnkgdGhhdCBjb25kaXRpb25hbC4KClRoZSBjcml0aWNhbCBwaWVjZSBoZXJlIGlzIGBDT05GSUdfTkVUX1VEUF9UVU5ORUxgLiBUaW1lIHRvIGdyZXAgdGhlIEtjb25maWcgZmlsZXMgYW5kIGZpbmQgb3V0IHdoYXQgdGhhdCBvcHRpb24gYWN0dWFsbHkgY29udHJvbHMuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQgaXQgbWVhbnMgdG8gZW5hYmxlIGl0LCBhbmQgdGhlIGltcGxpY2F0aW9ucyBmb3IgR1JPIHdpdGggVURQIHR1bm5lbHMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDAyOjU4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBORVRfVURQX1RVTk5FTCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvaXB2NC9LY29uZmlnPTMwND1jb25maWcgTkVUX0lQVlRJXG4tLVxubmV0L2lwdjQvS2NvbmZpZy0zMTUtXG5uZXQvaXB2NC9LY29uZmlnOjMxNjpjb25maWcgTkVUX1VEUF9UVU5ORUxcbm5ldC9pcHY0L0tjb25maWctMzE3LVx0dHJpc3RhdGVcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDcgMDI6NTg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTUzNjIKCQkJCQkJCW91dHB1dDogMzUKCQkJCQkJCXRob3VnaHRzOiAyMAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipFeGFtaW5pbmcgYG5ldC9pcHY0L0tjb25maWdgKioKCk9rYXksIHRpbWUgdG8gZGlnIGluLiBJIG5lZWQgdG8gZ2V0IGEgaGFuZGxlIG9uIHRoaXMsIHNvIGxldCYjMzk7cyBzdGFydCBieSB6ZXJvaW5nIGluIG9uIHRoZSBjb25maWd1cmF0aW9uIGZvciBJUHY0LiBJJiMzOTttIGdvaW5nIHRvIGp1bXAgaW50byBgbmV0L2lwdjQvS2NvbmZpZ2AgYW5kIHRha2UgYSBsb29rIGFyb3VuZCBsaW5lIDMxNi4gVGhhdCBhcmVhIHVzdWFsbHkgaG9sZHMgY3J1Y2lhbCBkZWZpbml0aW9ucywgc28gSSYjMzk7bGwgYmUgYWJsZSB0byBxdWlja2x5IHVuZGVyc3RhbmQgdGhlIHN0cnVjdHVyZSwgYW5kIGhvcGVmdWxseSBnZXQgYSBoYW5kbGUgb24gd2hhdCB0aGlzIG1vZHVsZSBpcyBhYm91dC4gTGV0JiMzOTtzIHNlZSB3aGF0IHdlIGNhbiBmaW5kLiBJIGV4cGVjdCB0aGVyZSB3aWxsIGJlIHNvbWV0aGluZyBzcGVjaWZpYyBvZiBpbnRlcmVzdCB0aGVyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDcgMDI6NTg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvaXB2NC9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMzEwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDI1Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAzMTA6XHRcdCAgVHVubmVsaW5nIG1lYW5zIGVuY2Fwc3VsYXRpbmcgZGF0YSBvZiBvbmUgcHJvdG9jb2wgdHlwZSB3aXRoaW5cbiAzMTE6XHRcdCAgYW5vdGhlciBwcm90b2NvbCBhbmQgc2VuZGluZyBpdCBvdmVyIGEgY2hhbm5lbCB0aGF0IHVuZGVyc3RhbmRzIHRoZVxuIDMxMjpcdFx0ICBlbmNhcHN1bGF0aW5nIHByb3RvY29sLiBUaGlzIGNhbiBiZSB1c2VkIHdpdGggeGZybSBtb2RlIHR1bm5lbCB0byBnaXZlXG4gMzEzOlx0XHQgIHRoZSBub3Rpb24gb2YgYSBzZWN1cmUgdHVubmVsIGZvciBJUFNFQyBhbmQgdGhlbiB1c2Ugcm91dGluZyBwcm90b2NvbFxuIDMxNDpcdFx0ICBvbiB0b3AuXG4gMzE1Olx0XG4gMzE2Olx0Y29uZmlnIE5FVF9VRFBfVFVOTkVMXG4gMzE3Olx0XHR0cmlzdGF0ZVxuIDMxODpcdFx0c2VsZWN0IE5FVF9JUF9UVU5ORUxcbiAzMTk6XHRcdGRlZmF1bHQgblxuIDMyMDpcdFxuIDMyMTpcdGNvbmZpZyBORVRfRk9VXG4gMzIyOlx0XHR0cmlzdGF0ZSBcJiMzNDtJUDogRm9vIChJUCBwcm90b2NvbHMpIG92ZXIgVURQXCYjMzQ7XG4gMzIzOlx0XHRzZWxlY3QgTkVUX1VEUF9UVU5ORUxcbiAzMjQ6XHRcdGhlbHBcbiAzMjU6XHRcdCAgRm9vIG92ZXIgVURQIGFsbG93cyBhbnkgSVAgcHJvdG9jb2wgdG8gYmUgZGlyZWN0bHkgZW5jYXBzdWxhdGVkXG4gMzI2Olx0XHQgIG92ZXIgVURQIGluY2x1ZGUgdHVubmVscyAoSVBJUCwgR1JFLCBTSVQpLiBCeSBlbmNhcHN1bGF0aW5nIGluIFVEUFxuIDMyNzpcdFx0ICBuZXR3b3JrIG1lY2hhbmlzbXMgYW5kIG9wdGltaXphdGlvbnMgZm9yIFVEUCAoc3VjaCBhcyBFQ01QXG4gMzI4Olx0XHQgIGFuZCBSU1MpIGNhbiBiZSBsZXZlcmFnZWQgdG8gcHJvdmlkZSBiZXR0ZXIgc2VydmljZS5cbiAzMjk6XHRcbiAzMzA6XHRjb25maWcgTkVUX0ZPVV9JUF9UVU5ORUxTXG4gMzMxOlx0XHRib29sIFwmIzM0O0lQOiBGT1UgZW5jYXBzdWxhdGlvbiBvZiBJUCB0dW5uZWxzXCYjMzQ7XG4gMzMyOlx0XHRkZXBlbmRzIG9uIE5FVF9JUElQIHx8IE5FVF9JUEdSRSB8fCBJUFY2X1NJVFxuIDMzMzpcdFx0c2VsZWN0IE5FVF9GT1VcbiAzMzQ6XHRcdGhlbHBcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDcgMDI6NTg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTU5MzYKCQkJCQkJCW91dHB1dDogMTc0CgkJCQkJCQl0aG91Z2h0czogNTA1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFzc2Vzc21lbnQgb2YgdGhlIFVEUCBHUk8gUmVjZWl2ZSBQYXRoIE1vZGlmaWNhdGlvbioqCgpPa2F5LCBzbyBoZXJlJiMzOTtzIHRoZSBicmVha2Rvd24gb2YgdGhpcyBwYXRjaCBhbmQgd2hhdCBpdCBtZWFucyBmb3IgZnV6emluZy4gYENPTkZJR19ORVRfVURQX1RVTk5FTGAgaXMgc2VsZWN0ZWQgYnkgc2V2ZXJhbCBvdGhlciBjb25maWdzLCBsaWtlIGBDT05GSUdfTkVUX0ZPVWAsIGBDT05GSUdfR0VORVZFYCwgYW5kIGBDT05GSUdfVlhMQU5gLCBpbmRpY2F0aW5nIHRoaXMgaXMgYSBmZWF0dXJlIHdpdGggcG90ZW50aWFsbHkgYnJvYWQgaW1wYWN0LiBUaGUgYmFzZSBJUHY0IGNvbmZpZywgYENPTkZJR19JTkVUYCwgaXMgYWxzbyByZWxldmFudCwgc28gd2UgbmVlZCB0byBjb25zaWRlciBib3RoIGBORVRfVURQX1RVTk5FTGAgYW5kIGBJTkVUYCB3aGVuIGNvbmZpZ3VyaW5nIHRoZSB0ZXN0IGVudmlyb25tZW50LiBgTkVUX1VEUF9UVU5ORUxgIGlzIHRoZSBwcmltYXJ5IGd1YXJkIG9uIHRoZSBtb2RpZmllZCBjb2RlIGJsb2NrLCBzbyB0aGF0JiMzOTtzIGEga2V5IGVuYWJsZSBjb25maWcuCgpJJiMzOTt2ZSB6ZXJvZWQgaW4gb24gdGhlIHNwZWNpZmljIGZ1bmN0aW9ucyBhZmZlY3RlZDogYHVkcF90dW5uZWxfZ3JvX3JjdmAgKHRoZSB0YXJnZXQgZnVuY3Rpb24pLCBpdHMgZGlyZWN0IGNhbGxlciBgdWRwX2dyb19yZWNlaXZlYCwgYW5kIHRoZW4gdGhlIEdSTyByZWNlaXZlIGltcGxlbWVudGF0aW9ucyBmb3IgSVB2NCBhbmQgSVB2NiwgbmFtZWx5IGB1ZHA0X2dyb19yZWNlaXZlYCBhbmQgYHVkcDZfZ3JvX3JlY2VpdmVgLCBhbmQgYWxzbyB0aGUgdXBkYXRlIGZ1bmN0aW9uIGB1ZHBfdHVubmVsX3VwZGF0ZV9ncm9fcmN2YC4gVGhlc2UgYXJlIG15IGZvY3VzIHN5bWJvbHMuCgpJJiMzOTt2ZSBkb3VibGUtY2hlY2tlZCBteSBydWxlczogYXZvaWRpbmcgdWJpcXVpdG91cyBob3QtcGF0aHMsIGFuZCB0YXJnZXRpbmcgc3BlY2lmaWMgZmVhdHVyZSBsb2dpYyBhbmQgZW50cnlwb2ludHMuIFRoaXMgY2xlYXJseSBoaXRzIHRoZSBtYXJrLiBUaGUgbW9kaWZpZWQgY29kZSBpcyBhdCB0aGUgY29yZSBvZiBHUk8gcHJvY2Vzc2luZyB3aXRoaW4gdGhlIFVEUCB0dW5uZWwgcGF0aCwgbWFraW5nIGl0IGEgaGlnaC12YWx1ZSB0YXJnZXQuIEFuZCwgdGhlIGBFbmFibGVDb25maWdzYCBjbGVhcmx5IHNwZWNpZnkgdGhlIG5lY2Vzc2FyeSBidWlsZCBwYXJhbWV0ZXJzLgoKTm93IGZvciB0aGUgcmVhc29uaW5nLiBUaGUgcGF0Y2ggY2hhbmdlcyBgdWRwX3R1bm5lbF9ncm9fcmN2YCwgcmVtb3ZpbmcgYSBzdGF0aWMgY2FsbCBvcHRpbWl6YXRpb24gYW5kIHVzaW5nIGBjYWxsX2dyb19yZWNlaXZlX3NrYCBkaXJlY3RseS4gVGhpcyBkaXJlY3RseSBhZmZlY3RzIHBhY2tldCBwcm9jZXNzaW5nIGZvciBVRFAgdHVubmVscyBhbmQgR1JPIHJlY3Vyc2lvbiB3aXRoaW4gdGhlIGNvcmUgbmV0d29ya2luZyBzdGFjay4gVGhpcyBpcyBleGNlbGxlbnQgYmVjYXVzZSBpdCYjMzk7cyByZWFkaWx5IHJlYWNoYWJsZSBhbmQgdGVzdGFibGUsIGVzcGVjaWFsbHkgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzLiBTdGFuZGFyZCBuZXR3b3JrIGludGVyZmFjZXMgYW5kIHR1bm5lbCBzb2NrZXRzIGFyZSBhbGwgd2UgbmVlZCBmb3IgZWZmZWN0aXZlIGZ1enppbmcuCgpNeSBjb25jbHVzaW9uPyBUaGlzIGlzIGFic29sdXRlbHkgd29ydGggZnV6emluZy4gSSYjMzk7dmUgZ290IG15IGZvY3VzIHN5bWJvbHM6IGB1ZHBfdHVubmVsX2dyb19yY3ZgLCBgdWRwX2dyb19yZWNlaXZlYCwgYHVkcF90dW5uZWxfdXBkYXRlX2dyb19yY3ZgLCBgdWRwNF9ncm9fcmVjZWl2ZWAsIGFuZCBgdWRwNl9ncm9fcmVjZWl2ZWAuIE15IGVuYWJsZSBjb25maWdzIGFyZSBgSU5FVGAgYW5kIGBORVRfVURQX1RVTk5FTGAuIFRpbWUgdG8gaW52b2tlIGBzZXQtcmVzdWx0c2AuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDAyOjU4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtJTkVUJiMzNDssCiAgICAmIzM0O05FVF9VRFBfVFVOTkVMJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7dWRwX3R1bm5lbF9ncm9fcmN2JiMzNDssCiAgICAmIzM0O3VkcF9ncm9fcmVjZWl2ZSYjMzQ7LAogICAgJiMzNDt1ZHBfdHVubmVsX3VwZGF0ZV9ncm9fcmN2JiMzNDssCiAgICAmIzM0O3VkcDRfZ3JvX3JlY2VpdmUmIzM0OywKICAgICYjMzQ7dWRwNl9ncm9fcmVjZWl2ZSYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgVURQIHR1bm5lbCBHUk8gcmVjZWl2ZSBwYXRoICh1ZHBfdHVubmVsX2dyb19yY3YpIGluIG5ldC9pcHY0L3VkcF9vZmZsb2FkLmMsIHJlbW92aW5nIHRoZSBzdGF0aWMgY2FsbCBicmFuY2ggaW4gZmF2b3Igb2YgZGlyZWN0bHkgaW52b2tpbmcgY2FsbF9ncm9fcmVjZWl2ZV9zay4gVGhpcyBtb2RpZmllcyBjb3JlIG5ldHdvcmtpbmcgR1JPIGV4ZWN1dGlvbiBmbG93IGFuZCByZWN1cnNpb24gY2hlY2tzLCB3aGljaCBhcmUgZnVsbHkgcmVhY2hhYmxlIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyB1c2luZyBVRFAgdHVubmVscywgdmlydHVhbCBpbnRlcmZhY2VzLCBhbmQgR1JPLWVuYWJsZWQgc29ja2V0cy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7SU5FVCYjMzQ7LAogICAgJiMzNDtORVRfVURQX1RVTk5FTCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3VkcF90dW5uZWxfZ3JvX3JjdiYjMzQ7LAogICAgJiMzNDt1ZHBfZ3JvX3JlY2VpdmUmIzM0OywKICAgICYjMzQ7dWRwX3R1bm5lbF91cGRhdGVfZ3JvX3JjdiYjMzQ7LAogICAgJiMzNDt1ZHA0X2dyb19yZWNlaXZlJiMzNDssCiAgICAmIzM0O3VkcDZfZ3JvX3JlY2VpdmUmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIFVEUCB0dW5uZWwgR1JPIHJlY2VpdmUgcGF0aCAodWRwX3R1bm5lbF9ncm9fcmN2KSBpbiBuZXQvaXB2NC91ZHBfb2ZmbG9hZC5jLCByZW1vdmluZyB0aGUgc3RhdGljIGNhbGwgYnJhbmNoIGluIGZhdm9yIG9mIGRpcmVjdGx5IGludm9raW5nIGNhbGxfZ3JvX3JlY2VpdmVfc2suIFRoaXMgbW9kaWZpZXMgY29yZSBuZXR3b3JraW5nIEdSTyBleGVjdXRpb24gZmxvdyBhbmQgcmVjdXJzaW9uIGNoZWNrcywgd2hpY2ggYXJlIGZ1bGx5IHJlYWNoYWJsZSBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgdXNpbmcgVURQIHR1bm5lbHMsIHZpcnR1YWwgaW50ZXJmYWNlcywgYW5kIEdSTy1lbmFibGVkIHNvY2tldHMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjcvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDAyOjU4PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5JZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDcgMDI6NTg8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Y29yZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCByZW1vdmVzIHRoZSBzdGF0aWMgY2FsbCBicmFuY2ggb3B0aW1pemF0aW9uIGluIGB1ZHBfdHVubmVsX2dyb19yY3YoKWAsIHJldmVydGluZyB0byBjYWxsaW5nIGBjYWxsX2dyb19yZWNlaXZlX3NrKHVkcF9zayhzayktXHUwMDNlZ3JvX3JlY2VpdmUsIHNrLCBoZWFkLCBza2IpYCB1bmNvbmRpdGlvbmFsbHkuIFRoZSBjaGFuZ2UgZG9lcyBub3QgaW50cm9kdWNlIG9yIG1vZGlmeSBhbnkgbWVtb3J5IGFsbG9jYXRpb25zLCBzdHJ1Y3R1cmUgaW5pdGlhbGl6YXRpb24sIGNvcHlpbmcgdG8gdXNlciBzcGFjZSwgb3IgYnVmZmVyIGxlbmd0aC9ib3VuZHMgbG9naWMuIE5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IG9yIGluZm9ybWF0aW9uIGxlYWsgcmlza3MgYXJlIGludHJvZHVjZWQuIFN0YW5kYXJkIHRlc3RpbmcgYW5kIEtBU0FOIGFyZSBzdWZmaWNpZW50LiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeQplcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZApkZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpCmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLgoKQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46Ci0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZQogIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTgogIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVAKICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLgotIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLAogIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy4KClJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sCkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuCkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFkKc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3MKdGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi4KCkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0CnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLAphIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXMKdGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmcKdW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sCmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSwKY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuCgpTZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6CjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiCiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzCiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuCjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMKICAgb3Igc3RydWN0IGZpZWxkcy4KMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkcwogICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLgo0LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2VzcwogICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuCgpTZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjoKLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlcgogIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodAogIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS4KLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZAogIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC4KLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuCgpVc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlCmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+VGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjQKCkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgYzVkNjFiZDYzNjI4NDliMThlOTUyZjYyZmYzMjk3ZTFjOWZlNGI4ZgpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBNb24gU2VwIDcgMDI6NTc6NTggMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9uZXQvaXB2NC91ZHBfb2ZmbG9hZC5jIGIvbmV0L2lwdjQvdWRwX29mZmxvYWQuYwppbmRleCBjZjA3YzNjNjYxMWEyLi4zMDY0OWY0MDdhNzg4IDEwMDY0NAotLS0gYS9uZXQvaXB2NC91ZHBfb2ZmbG9hZC5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9pcHY0L3VkcF9vZmZsb2FkLmMKQEAgLTE0OCwxMyAmIzQzOzE0OCw2IEBAIHN0YXRpYyBzdHJ1Y3Qgc2tfYnVmZiAqdWRwX3R1bm5lbF9ncm9fcmN2KHN0cnVjdCBzb2NrICpzaywKIAkJCQkJICBzdHJ1Y3QgbGlzdF9oZWFkICpoZWFkLAogCQkJCQkgIHN0cnVjdCBza19idWZmICpza2IpCiB7Ci0JaWYgKHN0YXRpY19icmFuY2hfbGlrZWx5KCZhbXA7dWRwX3R1bm5lbF9zdGF0aWNfY2FsbCkpIHsKLQkJaWYgKHVubGlrZWx5KGdyb19yZWN1cnNpb25faW5jX3Rlc3Qoc2tiKSkpIHsKLQkJCU5BUElfR1JPX0NCKHNrYiktJmd0O2ZsdXNoIHw9IDE7Ci0JCQlyZXR1cm4gTlVMTDsKLQkJfQotCQlyZXR1cm4gc3RhdGljX2NhbGwodWRwX3R1bm5lbF9ncm9fcmN2KShzaywgaGVhZCwgc2tiKTsKLQl9CiAJcmV0dXJuIGNhbGxfZ3JvX3JlY2VpdmVfc2sodWRwX3NrKHNrKS0mZ3Q7Z3JvX3JlY2VpdmUsIHNrLCBoZWFkLCBza2IpOwogfQogCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI5LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNyAwMjo1ODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMTU4CgkJCQkJCQlvdXRwdXQ6IDM5CgkJCQkJCQl0aG91Z2h0czogMzM1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgVURQIE9mZmxvYWQgQ29kZSoqCgpPa2F5LCBsZXQmIzM5O3MgdGFrZSBhIGxvb2sgYXQgdGhpcyBgZGlmZmAuIEZpcnN0LCBJJiMzOTtsbCBuZWVkIHRvIGV4YW1pbmUgdGhlIGNvbnRleHQgYXJvdW5kIHRoZSBjaGFuZ2UgaW4gYG5ldC9pcHY0L3VkcF9vZmZsb2FkLmNgLiBJIHNlZSB0aGF0IHRoZSBjb2RlIGlzIGRlYWxpbmcgd2l0aCBVRFAgb2ZmbG9hZCBhbmQgc3BlY2lmaWNhbGx5IHdpdGggR1JPIChHZW5lcmljIFJlY2VpdmUgT2ZmbG9hZCkuIFRoZSBgZGlmZmAgc2hvd3MgdGhlIHJlbW92YWwgb2YgYSBjb25kaXRpb25hbCBjaGVjayBhbmQgYSBwb3RlbnRpYWwgY2FsbCB0byBhIHN0YXRpYyBmdW5jdGlvbi4KCkluaXRpYWxseSwgaXQgc2VlbXMgdGhlcmUgd2FzIGEgYHN0YXRpY19icmFuY2hfbGlrZWx5YCBjaGVjaywgd2hpY2ggZGV0ZXJtaW5lZCB3aGV0aGVyIHRvIGNhbGwgYHN0YXRpY19jYWxsKHVkcF90dW5uZWxfZ3JvX3JjdilgLiBUaGF0LCBpbiB0dXJuLCBzZWVtcyB0byBoYXZlIGhhZCBhIHRlc3QgZm9yIGEgYGdyb19yZWN1cnNpb25faW5jX3Rlc3RgIGFuZCBwb3NzaWJseSBzZXR0aW5nIGBOQVBJX0dST19DQihza2IpLSZndDtmbHVzaCB8PSAxO2AgaWYgYGdyb19yZWN1cnNpb25faW5jX3Rlc3RgIHJldHVybmVkIHRydWUuICBUaGUgYHN0YXRpY19jYWxsYCBtZWNoYW5pc20gaXMgaW50ZXJlc3Rpbmc7IGl0IHN1Z2dlc3RzIGEgbWVjaGFuaXNtIGZvciBvcHRpbWl6aW5nIGZ1bmN0aW9uIGNhbGxzLCBwb3NzaWJseSBmb3IgaW5saW5pbmcgb3IgZm9yIGVuYWJsaW5nL2Rpc2FibGluZyBhIGNvZGUgcGF0aCBhdCBjb21waWxlIHRpbWUuICBUaGUgZnVuY3Rpb24gYGdyb19yZWN1cnNpb25faW5jX3Rlc3RgIHNlZW1zIHJlbGF0ZWQgdG8gcmVjdXJzaW9uIHdpdGhpbiB0aGUgR1JPIHByb2Nlc3NpbmcuCgpOb3csIGluc3RlYWQsIGl0IGxvb2tzIGxpa2UgdGhpcyBpcyBiZWluZyByZXBsYWNlZCBieSBgY2FsbF9ncm9fcmVjZWl2ZV9za2AuIFRoaXMgbGlrZWx5IG1lYW5zIHRoZSBjb2RlIGlzIG5vdyBkaXJlY3RseSBjYWxsaW5nIGEgZnVuY3Rpb24gcG9pbnRlciAoYHVkcF9zayhzayktJmd0O2dyb19yZWNlaXZlYCkgdGhhdOKAmXMgYXNzb2NpYXRlZCB3aXRoIHRoZSBgc29ja2Agc3RydWN0dXJlLCBieXBhc3NpbmcgdGhlIGBzdGF0aWNfYnJhbmNoYCBvcHRpbWl6YXRpb24uIEkmIzM5O2xsIG5lZWQgdG8gaW52ZXN0aWdhdGUgd2hhdCBpcyBzdG9yZWQgaW4gYHVkcF9zayhzayktJmd0O2dyb19yZWNlaXZlYCBhbmQgZGV0ZXJtaW5lIHRoZSBpbXBsaWNhdGlvbnMgb2YgdGhpcyBjaGFuZ2UuIEl0JiMzOTtzIHBvc3NpYmxlIHRoaXMgaXMgYSBzaW1wbGlmaWNhdGlvbiwgb3IgbWF5YmUgYW4gb3B0aW1pemF0aW9uIGZvciBhIHBhcnRpY3VsYXIgaGFyZHdhcmUgY29uZmlndXJhdGlvbiwgb3IgbWF5YmUgYSBjaGFuZ2UgaW4gdGhlIHdheSBHUk8gaXMgaGFuZGxlZC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIHBlcmZvcm1hbmNlIGFuZCBmdW5jdGlvbmFsIGltcGFjdHMgaGVyZS4gSSYjMzk7bGwgbmVlZCB0byBrbm93OiB3aHkgdGhlIGBzdGF0aWNfYnJhbmNoYCB3YXMgcmVtb3ZlZCwgd2hhdCB0aGUgaW1wbGljYXRpb25zIG9mIHRoZSBkaXJlY3QgZnVuY3Rpb24gY2FsbCBhcmUgaW4gdGVybXMgb2YgcGVyZm9ybWFuY2UgYW5kIHBvdGVudGlhbCByZWdyZXNzaW9ucywgYW5kIHdoYXQgY2lyY3Vtc3RhbmNlcyB3b3VsZCBjYXVzZSB0aGUgb2xkIGNvZGUgdG8gZmFpbCBhbmQgdGhlIG5ldyBjb2RlIHRvIHBhc3MuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzAvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDAyOjU5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L2lwdjQvdWRwX29mZmxvYWQuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDEyMCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA4MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgMTIwOlx0XHRcdCAqIFRoZSBzdGFjayBjbGVhbnVwcyBvbmx5IHN1Y2Nlc3NmdWxseSBhZGRlZCB0dW5uZWwsIHRoZVxuIDEyMTpcdFx0XHQgKiBsb29rdXAgb24gcmVtb3ZhbCBzaG91bGQgbmV2ZXIgZmFpbC5cbiAxMjI6XHRcdFx0ICovXG4gMTIzOlx0XHRcdGlmIChXQVJOX09OX09OQ0UoIWN1cikpXG4gMTI0Olx0XHRcdFx0Z290byBvdXQ7XG4gMTI1Olx0XG4gMTI2Olx0XHRcdGlmICghcmVmY291bnRfZGVjX2FuZF90ZXN0KFx1MDAyNmN1ci1cdTAwM2Vjb3VudCkpXG4gMTI3Olx0XHRcdFx0Z290byBvdXQ7XG4gMTI4Olx0XG4gMTI5Olx0XHRcdC8qIEF2b2lkIGdhcHMsIHNvIHRoYXQgdGhlIGVuYWJsZSB0dW5uZWwgaGFzIGFsd2F5cyBpZCAwICovXG4gMTMwOlx0XHRcdCpjdXIgPSB1ZHBfdHVubmVsX2dyb190eXBlc1stLXVkcF90dW5uZWxfZ3JvX3R5cGVfbnJdO1xuIDEzMTpcdFx0fVxuIDEzMjpcdFxuIDEzMzpcdFx0aWYgKHVkcF90dW5uZWxfZ3JvX3R5cGVfbnIgPT0gMSkge1xuIDEzNDpcdFx0XHRzdGF0aWNfY2FsbF91cGRhdGUodWRwX3R1bm5lbF9ncm9fcmN2LFxuIDEzNTpcdFx0XHRcdFx0ICAgdWRwX3R1bm5lbF9ncm9fdHlwZXNbMF0uZ3JvX3JlY2VpdmUpO1xuIDEzNjpcdFx0XHRzdGF0aWNfYnJhbmNoX2VuYWJsZShcdTAwMjZ1ZHBfdHVubmVsX3N0YXRpY19jYWxsKTtcbiAxMzc6XHRcdH0gZWxzZSBpZiAob2xkX2dyb190eXBlX25yID09IDEpIHtcbiAxMzg6XHRcdFx0c3RhdGljX2JyYW5jaF9kaXNhYmxlKFx1MDAyNnVkcF90dW5uZWxfc3RhdGljX2NhbGwpO1xuIDEzOTpcdFx0XHRzdGF0aWNfY2FsbF91cGRhdGUodWRwX3R1bm5lbF9ncm9fcmN2LCBkdW1teV9ncm9fcmN2KTtcbiAxNDA6XHRcdH1cbiAxNDE6XHRcbiAxNDI6XHRvdXQ6XG4gMTQzOlx0XHRtdXRleF91bmxvY2soXHUwMDI2dWRwX3R1bm5lbF9ncm9fdHlwZV9sb2NrKTtcbiAxNDQ6XHR9XG4gMTQ1Olx0RVhQT1JUX1NZTUJPTF9HUEwodWRwX3R1bm5lbF91cGRhdGVfZ3JvX3Jjdik7XG4gMTQ2Olx0XG4gMTQ3Olx0c3RhdGljIHN0cnVjdCBza19idWZmICp1ZHBfdHVubmVsX2dyb19yY3Yoc3RydWN0IHNvY2sgKnNrLFxuIDE0ODpcdFx0XHRcdFx0XHQgIHN0cnVjdCBsaXN0X2hlYWQgKmhlYWQsXG4gMTQ5Olx0XHRcdFx0XHRcdCAgc3RydWN0IHNrX2J1ZmYgKnNrYilcbiAxNTA6XHR7XG4gMTUxOlx0XHRyZXR1cm4gY2FsbF9ncm9fcmVjZWl2ZV9zayh1ZHBfc2soc2spLVx1MDAzZWdyb19yZWNlaXZlLCBzaywgaGVhZCwgc2tiKTtcbiAxNTI6XHR9XG4gMTUzOlx0XG4gMTU0Olx0I2Vsc2VcbiAxNTU6XHRcbiAxNTY6XHRzdGF0aWMgc3RydWN0IHNrX2J1ZmYgKnVkcF90dW5uZWxfZ3JvX3JjdihzdHJ1Y3Qgc29jayAqc2ssXG4gMTU3Olx0XHRcdFx0XHRcdCAgc3RydWN0IGxpc3RfaGVhZCAqaGVhZCxcbiAxNTg6XHRcdFx0XHRcdFx0ICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuIDE1OTpcdHtcbiAxNjA6XHRcdHJldHVybiBjYWxsX2dyb19yZWNlaXZlX3NrKHVkcF9zayhzayktXHUwMDNlZ3JvX3JlY2VpdmUsIHNrLCBoZWFkLCBza2IpO1xuIDE2MTpcdH1cbiAxNjI6XHRcbiAxNjM6XHQjZW5kaWZcbiAxNjQ6XHRcbiAxNjU6XHRzdGF0aWMgc3RydWN0IHNrX2J1ZmYgKl9fc2tiX3VkcF90dW5uZWxfc2VnbWVudChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuIDE2NjpcdFx0bmV0ZGV2X2ZlYXR1cmVzX3QgZmVhdHVyZXMsXG4gMTY3Olx0XHRzdHJ1Y3Qgc2tfYnVmZiAqKCpnc29faW5uZXJfc2VnbWVudCkoc3RydWN0IHNrX2J1ZmYgKnNrYixcbiAxNjg6XHRcdFx0XHRcdFx0ICAgICBuZXRkZXZfZmVhdHVyZXNfdCBmZWF0dXJlcyksXG4gMTY5Olx0XHRfX2JlMTYgbmV3X3Byb3RvY29sLCBib29sIGlzX2lwdjYpXG4gMTcwOlx0e1xuIDE3MTpcdFx0aW50IHRubF9obGVuID0gc2tiX2lubmVyX21hY19oZWFkZXIoc2tiKSAtIHNrYl90cmFuc3BvcnRfaGVhZGVyKHNrYik7XG4gMTcyOlx0XHRib29sIHJlbWNzdW0sIG5lZWRfY3N1bSwgb2ZmbG9hZF9jc3VtLCBnc29fcGFydGlhbDtcbiAxNzM6XHRcdHN0cnVjdCBza19idWZmICpzZWdzID0gRVJSX1BUUigtRUlOVkFMKTtcbiAxNzQ6XHRcdHUxNiBtYWNfb2Zmc2V0ID0gc2tiLVx1MDAzZW1hY19oZWFkZXI7XG4gMTc1Olx0XHRfX2JlMTYgcHJvdG9jb2wgPSBza2ItXHUwMDNlcHJvdG9jb2w7XG4gMTc2Olx0XHR1MTYgbWFjX2xlbiA9IHNrYi1cdTAwM2VtYWNfbGVuO1xuIDE3NzpcdFx0aW50IHVkcF9vZmZzZXQsIG91dGVyX2hsZW47XG4gMTc4Olx0XHRzdHJ1Y3QgdWRwaGRyICp1aDtcbiAxNzk6XHRcdF9fd3N1bSBwYXJ0aWFsO1xuIDE4MDpcdFx0Ym9vbCBuZWVkX2lwc2VjO1xuIDE4MTpcdFxuIDE4MjpcdFx0aWYgKHVubGlrZWx5KCFwc2tiX21heV9wdWxsKHNrYiwgdG5sX2hsZW4pKSlcbiAxODM6XHRcdFx0Z290byBvdXQ7XG4gMTg0Olx0XG4gMTg1Olx0XHR1aCA9IHVkcF9oZHIoc2tiKTtcbiAxODY6XHRcbiAxODc6XHRcdC8qIEFkanVzdCBwYXJ0aWFsIGhlYWRlciBjaGVja3N1bSB0byBuZWdhdGUgb2xkIGxlbmd0aC5cbiAxODg6XHRcdCAqIFdlIGNhbm5vdCByZWx5IG9uIHRoZSB2YWx1ZSBjb250YWluZWQgaW4gdWgtXHUwMDNlbGVuIGFzIGl0IGlzXG4gMTg5Olx0XHQgKiBwb3NzaWJsZSB0aGF0IHRoZSBhY3R1YWwgdmFsdWUgZXhjZWVkcyB0aGUgYm91bmRhcmllcyBvZiB0aGVcbiAxOTA6XHRcdCAqIDE2IGJpdCBsZW5ndGggZmllbGQgZHVlIHRvIHRoZSBoZWFkZXIgYmVpbmcgYWRkZWQgb3V0c2lkZSBvZiBhblxuIDE5MTpcdFx0ICogSVAgb3IgSVB2NiBmcmFtZSB0aGF0IHdhcyBhbHJlYWR5IGxpbWl0ZWQgdG8gNjRLIC0gMS5cbiAxOTI6XHRcdCAqL1xuIDE5MzpcdFx0aWYgKHNrYl9zaGluZm8oc2tiKS1cdTAwM2Vnc29fdHlwZSBcdTAwMjYgU0tCX0dTT19QQVJUSUFMKVxuIDE5NDpcdFx0XHRwYXJ0aWFsID0gKF9fZm9yY2UgX193c3VtKXVoLVx1MDAzZWxlbjtcbiAxOTU6XHRcdGVsc2VcbiAxOTY6XHRcdFx0cGFydGlhbCA9IChfX2ZvcmNlIF9fd3N1bSlodG9ubChza2ItXHUwMDNlbGVuKTtcbiAxOTc6XHRcdHBhcnRpYWwgPSBjc3VtX3N1Yihjc3VtX3VuZm9sZCh1aC1cdTAwM2VjaGVjayksIHBhcnRpYWwpO1xuIDE5ODpcdFxuIDE5OTpcdFx0Lyogc2V0dXAgaW5uZXIgc2tiLiAqL1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMxLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNyAwMjo1OTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0Mjk0CgkJCQkJCQlvdXRwdXQ6IDM4CgkJCQkJCQl0aG91Z2h0czogNDkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgc3VtbWFyeSwgYXMgaWYgSSB3ZXJlIHRoaW5raW5nIHRoZXNlIHRob3VnaHRzOgoKKipBbmFseXppbmcgYHVkcF9vZmZsb2FkLmNgIGFuZCBTdGF0aWMgQ2FsbHMqKgoKT2theSwgdGltZSB0byBkaXZlIGRlZXBlciBpbnRvIGB1ZHBfb2ZmbG9hZC5jYCwgc3BlY2lmaWNhbGx5IGZvY3VzaW5nIG9uIHRoZSBhcmVhIGFyb3VuZCBgdWRwX3R1bm5lbF9ncm9fcmN2YC4gSSBuZWVkIHRvIGdldCBhIGJldHRlciBoYW5kbGUgb24gdGhlIGNvbnRleHQgb2YgdGhhdCBmdW5jdGlvbiwgZXNwZWNpYWxseSBob3cgaXQmIzM5O3MgYmVpbmcgdXNlZC4gVG8gZG8gdGhhdCwgSSYjMzk7bSBnb2luZyB0byBzY2FuIHRoZSBzdXJyb3VuZGluZyBjb2RlLCBsZXQmIzM5O3Mgc2F5IGZyb20gbGluZXMgNTAgdG8gMTIwLiBJIHdhbnQgdG8gc2VlIHdoYXQmIzM5O3MgaGFwcGVuaW5nIGp1c3QgYmVmb3JlIGFuZCBhZnRlciBgdWRwX3R1bm5lbF9ncm9fcmN2YCwgYW5kIG1vc3QgaW1wb3J0YW50bHksIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQgdGhhdCBgc3RhdGljYCBjYWxsIGlzIGRvaW5nLCB3aG8mIzM5O3MgY2FsbGluZyBpdCwgYW5kIHdoYXQgaXRzIG92ZXJhbGwgcHVycG9zZSBpcyBpbiB0aGUgYnJvYWRlciBuZXR3b3JraW5nIGZyYW1ld29yay4gSSYjMzk7bSBob3BpbmcgdG8gZGlzY292ZXIgdGhlIHJvbGUgYW5kIGltcGxpY2F0aW9ucyBmb3IgdGhlIGVudGlyZSB0dW5uZWwgcHJvY2Vzc2luZyBmbG93LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMyLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNyAwMjo1OTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9pcHY0L3VkcF9vZmZsb2FkLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA1MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA3MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgIDUwOlx0c3RhdGljIERFRklORV9TUElOTE9DSyh1ZHBfdHVubmVsX2dyb19sb2NrKTtcbiAgNTE6XHRcbiAgNTI6XHR2b2lkIHVkcF90dW5uZWxfdXBkYXRlX2dyb19sb29rdXAoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgc29jayAqc2ssIGJvb2wgYWRkKVxuICA1MzpcdHtcbiAgNTQ6XHRcdGJvb2wgaXNfaXB2NiA9IHNrLVx1MDAzZXNrX2ZhbWlseSA9PSBBRl9JTkVUNjtcbiAgNTU6XHRcdHN0cnVjdCB1ZHBfc29jayAqdHVwLCAqdXAgPSB1ZHBfc2soc2spO1xuICA1NjpcdFx0c3RydWN0IHVkcF90dW5uZWxfZ3JvICp1ZHBfdHVubmVsX2dybztcbiAgNTc6XHRcbiAgNTg6XHRcdHNwaW5fbG9jayhcdTAwMjZ1ZHBfdHVubmVsX2dyb19sb2NrKTtcbiAgNTk6XHRcdHVkcF90dW5uZWxfZ3JvID0gXHUwMDI2bmV0LVx1MDAzZWlwdjQudWRwX3R1bm5lbF9ncm9baXNfaXB2Nl07XG4gIDYwOlx0XHRpZiAoYWRkKVxuICA2MTpcdFx0XHRobGlzdF9hZGRfaGVhZChcdTAwMjZ1cC1cdTAwM2V0dW5uZWxfbGlzdCwgXHUwMDI2dWRwX3R1bm5lbF9ncm8tXHUwMDNlbGlzdCk7XG4gIDYyOlx0XHRlbHNlIGlmICh1cC1cdTAwM2V0dW5uZWxfbGlzdC5wcHJldilcbiAgNjM6XHRcdFx0aGxpc3RfZGVsX2luaXQoXHUwMDI2dXAtXHUwMDNldHVubmVsX2xpc3QpO1xuICA2NDpcdFxuICA2NTpcdFx0aWYgKHVkcF90dW5uZWxfZ3JvLVx1MDAzZWxpc3QuZmlyc3QgXHUwMDI2XHUwMDI2XG4gIDY2Olx0XHQgICAgIXVkcF90dW5uZWxfZ3JvLVx1MDAzZWxpc3QuZmlyc3QtXHUwMDNlbmV4dCkge1xuICA2NzpcdFx0XHR0dXAgPSBobGlzdF9lbnRyeSh1ZHBfdHVubmVsX2dyby1cdTAwM2VsaXN0LmZpcnN0LCBzdHJ1Y3QgdWRwX3NvY2ssXG4gIDY4Olx0XHRcdFx0XHQgIHR1bm5lbF9saXN0KTtcbiAgNjk6XHRcbiAgNzA6XHRcdFx0cmN1X2Fzc2lnbl9wb2ludGVyKHVkcF90dW5uZWxfZ3JvLVx1MDAzZXNrLCAoc3RydWN0IHNvY2sgKil0dXApO1xuICA3MTpcdFx0fSBlbHNlIHtcbiAgNzI6XHRcdFx0UkNVX0lOSVRfUE9JTlRFUih1ZHBfdHVubmVsX2dyby1cdTAwM2VzaywgTlVMTCk7XG4gIDczOlx0XHR9XG4gIDc0Olx0XG4gIDc1Olx0XHRzcGluX3VubG9jayhcdTAwMjZ1ZHBfdHVubmVsX2dyb19sb2NrKTtcbiAgNzY6XHR9XG4gIDc3Olx0RVhQT1JUX1NZTUJPTF9HUEwodWRwX3R1bm5lbF91cGRhdGVfZ3JvX2xvb2t1cCk7XG4gIDc4Olx0XG4gIDc5Olx0dm9pZCB1ZHBfdHVubmVsX3VwZGF0ZV9ncm9fcmN2KHN0cnVjdCBzb2NrICpzaywgYm9vbCBhZGQpXG4gIDgwOlx0e1xuICA4MTpcdFx0c3RydWN0IHVkcF90dW5uZWxfdHlwZV9lbnRyeSAqY3VyID0gTlVMTDtcbiAgODI6XHRcdHN0cnVjdCB1ZHBfc29jayAqdXAgPSB1ZHBfc2soc2spO1xuICA4MzpcdFx0aW50IGksIG9sZF9ncm9fdHlwZV9ucjtcbiAgODQ6XHRcbiAgODU6XHRcdGlmICghVURQX01BWF9UVU5ORUxfVFlQRVMgfHwgIXVwLVx1MDAzZWdyb19yZWNlaXZlKVxuICA4NjpcdFx0XHRyZXR1cm47XG4gIDg3Olx0XG4gIDg4Olx0XHRtdXRleF9sb2NrKFx1MDAyNnVkcF90dW5uZWxfZ3JvX3R5cGVfbG9jayk7XG4gIDg5Olx0XG4gIDkwOlx0XHQvKiBDaGVjayBpZiB0aGUgc3RhdGljIGNhbGwgaXMgcGVybWFuZW50bHkgZGlzYWJsZWQuICovXG4gIDkxOlx0XHRpZiAodWRwX3R1bm5lbF9ncm9fdHlwZV9uciBcdTAwM2UgVURQX01BWF9UVU5ORUxfVFlQRVMpXG4gIDkyOlx0XHRcdGdvdG8gb3V0O1xuICA5MzpcdFxuICA5NDpcdFx0Zm9yIChpID0gMDsgaSBcdTAwM2MgdWRwX3R1bm5lbF9ncm9fdHlwZV9ucjsgaSYjNDM7JiM0MzspXG4gIDk1Olx0XHRcdGlmICh1ZHBfdHVubmVsX2dyb190eXBlc1tpXS5ncm9fcmVjZWl2ZSA9PSB1cC1cdTAwM2Vncm9fcmVjZWl2ZSlcbiAgOTY6XHRcdFx0XHRjdXIgPSBcdTAwMjZ1ZHBfdHVubmVsX2dyb190eXBlc1tpXTtcbiAgOTc6XHRcbiAgOTg6XHRcdG9sZF9ncm9fdHlwZV9uciA9IHVkcF90dW5uZWxfZ3JvX3R5cGVfbnI7XG4gIDk5Olx0XHRpZiAoYWRkKSB7XG4gMTAwOlx0XHRcdC8qXG4gMTAxOlx0XHRcdCAqIFVwZGF0ZSB0aGUgbWF0Y2hpbmcgZW50cnksIGlmIGZvdW5kLCBvciBhZGQgYSBuZXcgb25lXG4gMTAyOlx0XHRcdCAqIGlmIG5lZWRlZFxuIDEwMzpcdFx0XHQgKi9cbiAxMDQ6XHRcdFx0aWYgKGN1cikge1xuIDEwNTpcdFx0XHRcdHJlZmNvdW50X2luYyhcdTAwMjZjdXItXHUwMDNlY291bnQpO1xuIDEwNjpcdFx0XHRcdGdvdG8gb3V0O1xuIDEwNzpcdFx0XHR9XG4gMTA4Olx0XG4gMTA5Olx0XHRcdGlmICh1bmxpa2VseSh1ZHBfdHVubmVsX2dyb190eXBlX25yID09IFVEUF9NQVhfVFVOTkVMX1RZUEVTKSkge1xuIDExMDpcdFx0XHRcdHByX2Vycl9vbmNlKFwmIzM0O1RvbyBtYW55IFVEUCB0dW5uZWwgdHlwZXMsIHBsZWFzZSBpbmNyZWFzZSBVRFBfTUFYX1RVTk5FTF9UWVBFU1xcblwmIzM0Oyk7XG4gMTExOlx0XHRcdFx0LyogRW5zdXJlIHN0YXRpYyBjYWxsIHdpbGwgbmV2ZXIgYmUgZW5hYmxlZCAqL1xuIDExMjpcdFx0XHRcdHVkcF90dW5uZWxfZ3JvX3R5cGVfbnIgPSBVRFBfTUFYX1RVTk5FTF9UWVBFUyAmIzQzOyAxO1xuIDExMzpcdFx0XHR9IGVsc2Uge1xuIDExNDpcdFx0XHRcdGN1ciA9IFx1MDAyNnVkcF90dW5uZWxfZ3JvX3R5cGVzW3VkcF90dW5uZWxfZ3JvX3R5cGVfbnImIzQzOyYjNDM7XTtcbiAxMTU6XHRcdFx0XHRyZWZjb3VudF9zZXQoXHUwMDI2Y3VyLVx1MDAzZWNvdW50LCAxKTtcbiAxMTY6XHRcdFx0XHRjdXItXHUwMDNlZ3JvX3JlY2VpdmUgPSB1cC1cdTAwM2Vncm9fcmVjZWl2ZTtcbiAxMTc6XHRcdFx0fVxuIDExODpcdFx0fSBlbHNlIHtcbiAxMTk6XHRcdFx0LypcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMy8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDcgMDI6NTk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNTcwMQoJCQkJCQkJb3V0cHV0OiAxMjMKCQkJCQkJCXRob3VnaHRzOiA0MDYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBVRFAgVHVubmVsIEdSTyBSZWNlaXZlIE9wdGltaXphdGlvbiBSZW1vdmFsKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIEluIGB1ZHBfdHVubmVsX2dyb19yY3ZgLCB0aGV5JiMzOTt2ZSBkaXRjaGVkIHRoZSBzdGF0aWMgYnJhbmNoL2NhbGwgb3B0aW1pemF0aW9uIGluIGZhdm9yIG9mIGEgZGlyZWN0IGNhbGwgdGhyb3VnaCBgY2FsbF9ncm9fcmVjZWl2ZV9za2AuIEkgc2VlIHRoYXQgdGhlIGAjZWxzZWAgcGF0aCwgd2hlbiB0aGUgc3RhdGljIGNhbGwgd2FzbiYjMzk7dCBhY3RpdmUsICphbHJlYWR5KiB1c2VkIGBjYWxsX2dyb19yZWNlaXZlX3NrYC4gU28gaXQgbG9va3MgbGlrZSBhIHNpbXBsaWZpY2F0aW9uLgoKTm93LCBsZXQmIzM5O3MgcXVpY2tseSB0aWNrIHRocm91Z2ggdGhlIHBvdGVudGlhbCBwcm9ibGVtcy4gQXJlIHdlIHNlbmRpbmcgYW55IGtlcm5lbCBzdHJ1Y3R1cmVzIHRvIHVzZXJzcGFjZT8gTm8uIFVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzIG9yIHN0cnVjdCBmaWVsZHM/IE5vcGUuIEFueSBmYW5jeSBkYXRhIHN0cnVjdHVyZSBhbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uPyBOZWdhdGl2ZS4gQW5kIGRlZmluaXRlbHkgbm90aGluZyBmdW5reSB3aXRoIGJvdW5kcyBjaGVja3Mgb3IgYnVmZmVyIGxlbmd0aHMgdGhhdCBjb3VsZCBsZWFrIGRhdGEuCgpUaGlzIHJlYWxseSBsb29rcyBsaWtlIGEgcGVyZm9ybWFuY2Ugb3B0aW1pemF0aW9uIHJlbW92YWwsIG9yIHBlcmhhcHMgYSBzaW1wbGlmaWNhdGlvbiwgaW4gdGhlIFVEUCB0dW5uZWwgR1JPIHJlY2VpdmUgcGF0aC4gYGNhbGxfZ3JvX3JlY2VpdmVfc2tgIGlzIGp1c3QgYSB3cmFwcGVyIGFyb3VuZCB0aGUgZnVuY3Rpb24gcG9pbnRlciBjYWxsIGZvciBgc2tiX2dyb19yZWNlaXZlYCwgc28gd2UmIzM5O3JlIGp1c3QgdGFsa2luZyBhYm91dCBpbmRpcmVjdCBjYWxscy4KCk5vdywgbGV0JiMzOTtzIGdldCBzZXJpb3VzIGFuZCBjaGVjayBmb3IgYW55IG1lbW9yeSBzaGVuYW5pZ2Fucy4gTm8gYWxsb2NhdGlvbiwgbm8gc3RydWN0dXJlIGNvcGllcywgbm8gdW5pbml0aWFsaXplZCBmaWVsZHMsIGFuZCBkZWZpbml0ZWx5IG5vIGluZm9ybWF0aW9uIGxlYWtzLiBXZSYjMzk7cmUgY2xlYXIgb24gbWVtb3J5IHNhZmV0eSBoZXJlLgoKQWxyaWdodCwgbGV0JiMzOTtzIGNvbmZpcm0gdGhlIEtNU0FOIHNpdHVhdGlvbi4gYE5lZWRzS01TQU4gPSBmYWxzZWAuIFdlIGRvbiYjMzk7dCBuZWVkIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nLiBUaGUgcGF0Y2ggaXMgKnJlbW92aW5nKiBjb21wbGV4aXR5LCBpdCYjMzk7cyBub3QgaW50cm9kdWNpbmcgYW55IG5ldyBtZW1vcnktcmVsYXRlZCByaXNrLiBXZSBhcmVuJiMzOTt0IGFsbG9jYXRpbmcgbWVtb3J5IG9yIHNlbmRpbmcgZGF0YSB0byB1c2VyIHNwYWNlIG9yIGFueSBvZiB0aGUgb3RoZXIgY29tbW9uIEtNU0FOIHBpdGZhbGxzLiBTdGFuZGFyZCBLQVNBTiBhbmQgb3RoZXIgc2FuaXRpemVycyB3aWxsIGJlIHBlcmZlY3RseSBmaW5lIGZvciB0ZXN0aW5nIG5ldHdvcmsgcGFja2V0IHByb2Nlc3NpbmcgYW5kIGNvbnRyb2wgZmxvdy4KCk9rYXksIHRoYXQmIzM5O3MgZW5vdWdoIGFuYWx5c2lzLCBsZXQmIzM5O3MgY2FsbCBgc2V0LXJlc3VsdHNgLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM0LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNyAwMjo1OTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCByZW1vdmVzIHRoZSBzdGF0aWMgY2FsbCBicmFuY2ggb3B0aW1pemF0aW9uIGluIGB1ZHBfdHVubmVsX2dyb19yY3YoKWAsIHJldmVydGluZyB0byBjYWxsaW5nIGBjYWxsX2dyb19yZWNlaXZlX3NrKHVkcF9zayhzayktXHUwMDNlZ3JvX3JlY2VpdmUsIHNrLCBoZWFkLCBza2IpYCB1bmNvbmRpdGlvbmFsbHkuIFRoZSBjaGFuZ2UgZG9lcyBub3QgaW50cm9kdWNlIG9yIG1vZGlmeSBhbnkgbWVtb3J5IGFsbG9jYXRpb25zLCBzdHJ1Y3R1cmUgaW5pdGlhbGl6YXRpb24sIGNvcHlpbmcgdG8gdXNlciBzcGFjZSwgb3IgYnVmZmVyIGxlbmd0aC9ib3VuZHMgbG9naWMuIE5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IG9yIGluZm9ybWF0aW9uIGxlYWsgcmlza3MgYXJlIGludHJvZHVjZWQuIFN0YW5kYXJkIHRlc3RpbmcgYW5kIEtBU0FOIGFyZSBzdWZmaWNpZW50LiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggcmVtb3ZlcyB0aGUgc3RhdGljIGNhbGwgYnJhbmNoIG9wdGltaXphdGlvbiBpbiBgdWRwX3R1bm5lbF9ncm9fcmN2KClgLCByZXZlcnRpbmcgdG8gY2FsbGluZyBgY2FsbF9ncm9fcmVjZWl2ZV9zayh1ZHBfc2soc2spLVx1MDAzZWdyb19yZWNlaXZlLCBzaywgaGVhZCwgc2tiKWAgdW5jb25kaXRpb25hbGx5LiBUaGUgY2hhbmdlIGRvZXMgbm90IGludHJvZHVjZSBvciBtb2RpZnkgYW55IG1lbW9yeSBhbGxvY2F0aW9ucywgc3RydWN0dXJlIGluaXRpYWxpemF0aW9uLCBjb3B5aW5nIHRvIHVzZXIgc3BhY2UsIG9yIGJ1ZmZlciBsZW5ndGgvYm91bmRzIGxvZ2ljLiBObyB1bmluaXRpYWxpemVkIG1lbW9yeSBvciBpbmZvcm1hdGlvbiBsZWFrIHJpc2tzIGFyZSBpbnRyb2R1Y2VkLiBTdGFuZGFyZCB0ZXN0aW5nIGFuZCBLQVNBTiBhcmUgc3VmZmljaWVudC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDktMDdUMDI6NTc6NTkuNjYzOTY0MDQxWiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjkyODc4ODQyNTksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiSU5FVFwiLFxuICAgIFwiTkVUX1VEUF9UVU5ORUxcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJ1ZHBfdHVubmVsX2dyb19yY3ZcIixcbiAgICBcInVkcF9ncm9fcmVjZWl2ZVwiLFxuICAgIFwidWRwX3R1bm5lbF91cGRhdGVfZ3JvX3JjdlwiLFxuICAgIFwidWRwNF9ncm9fcmVjZWl2ZVwiLFxuICAgIFwidWRwNl9ncm9fcmVjZWl2ZVwiXG4gIF0sXG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggcmVtb3ZlcyB0aGUgc3RhdGljIGNhbGwgYnJhbmNoIG9wdGltaXphdGlvbiBpbiBgdWRwX3R1bm5lbF9ncm9fcmN2KClgLCByZXZlcnRpbmcgdG8gY2FsbGluZyBgY2FsbF9ncm9fcmVjZWl2ZV9zayh1ZHBfc2soc2spLVxcdTAwM2Vncm9fcmVjZWl2ZSwgc2ssIGhlYWQsIHNrYilgIHVuY29uZGl0aW9uYWxseS4gVGhlIGNoYW5nZSBkb2VzIG5vdCBpbnRyb2R1Y2Ugb3IgbW9kaWZ5IGFueSBtZW1vcnkgYWxsb2NhdGlvbnMsIHN0cnVjdHVyZSBpbml0aWFsaXphdGlvbiwgY29weWluZyB0byB1c2VyIHNwYWNlLCBvciBidWZmZXIgbGVuZ3RoL2JvdW5kcyBsb2dpYy4gTm8gdW5pbml0aWFsaXplZCBtZW1vcnkgb3IgaW5mb3JtYXRpb24gbGVhayByaXNrcyBhcmUgaW50cm9kdWNlZC4gU3RhbmRhcmQgdGVzdGluZyBhbmQgS0FTQU4gYXJlIHN1ZmZpY2llbnQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIFVEUCB0dW5uZWwgR1JPIHJlY2VpdmUgcGF0aCAodWRwX3R1bm5lbF9ncm9fcmN2KSBpbiBuZXQvaXB2NC91ZHBfb2ZmbG9hZC5jLCByZW1vdmluZyB0aGUgc3RhdGljIGNhbGwgYnJhbmNoIGluIGZhdm9yIG9mIGRpcmVjdGx5IGludm9raW5nIGNhbGxfZ3JvX3JlY2VpdmVfc2suIFRoaXMgbW9kaWZpZXMgY29yZSBuZXR3b3JraW5nIEdSTyBleGVjdXRpb24gZmxvdyBhbmQgcmVjdXJzaW9uIGNoZWNrcywgd2hpY2ggYXJlIGZ1bGx5IHJlYWNoYWJsZSBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgdXNpbmcgVURQIHR1bm5lbHMsIHZpcnR1YWwgaW50ZXJmYWNlcywgYW5kIEdSTy1lbmFibGVkIHNvY2tldHMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDAyOjU3OjU5LjY2Mzk3MDMzMVoiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6Njg5ODI0ODM5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgYzVkNjFiZDYzNjI4NDliMThlOTUyZjYyZmYzMjk3ZTFjOWZlNGI4ZlxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgTW9uIFNlcCA3IDAyOjU3OjU4IDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL25ldC9pcHY0L3VkcF9vZmZsb2FkLmMgYi9uZXQvaXB2NC91ZHBfb2ZmbG9hZC5jXFxuaW5kZXggY2YwN2MzYzY2MTFhMi4uMzA2NDlmNDA3YTc4OCAxMDA2NDRcXG4tLS0gYS9uZXQvaXB2NC91ZHBfb2ZmbG9hZC5jXFxuKysrIGIvbmV0L2lwdjQvdWRwX29mZmxvYWQuY1xcbkBAIC0xNDgsMTMgKzE0OCw2IEBAIHN0YXRpYyBzdHJ1Y3Qgc2tfYnVmZiAqdWRwX3R1bm5lbF9ncm9fcmN2KHN0cnVjdCBzb2NrICpzayxcXG4gXFx0XFx0XFx0XFx0XFx0ICBzdHJ1Y3QgbGlzdF9oZWFkICpoZWFkLFxcbiBcXHRcXHRcXHRcXHRcXHQgIHN0cnVjdCBza19idWZmICpza2IpXFxuIHtcXG4tXFx0aWYgKHN0YXRpY19icmFuY2hfbGlrZWx5KFxcdTAwMjZ1ZHBfdHVubmVsX3N0YXRpY19jYWxsKSkge1xcbi1cXHRcXHRpZiAodW5saWtlbHkoZ3JvX3JlY3Vyc2lvbl9pbmNfdGVzdChza2IpKSkge1xcbi1cXHRcXHRcXHROQVBJX0dST19DQihza2IpLVxcdTAwM2VmbHVzaCB8PSAxO1xcbi1cXHRcXHRcXHRyZXR1cm4gTlVMTDtcXG4tXFx0XFx0fVxcbi1cXHRcXHRyZXR1cm4gc3RhdGljX2NhbGwodWRwX3R1bm5lbF9ncm9fcmN2KShzaywgaGVhZCwgc2tiKTtcXG4tXFx0fVxcbiBcXHRyZXR1cm4gY2FsbF9ncm9fcmVjZWl2ZV9zayh1ZHBfc2soc2spLVxcdTAwM2Vncm9fcmVjZWl2ZSwgc2ssIGhlYWQsIHNrYik7XFxuIH1cXG4gXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDAyOjU4OjAwLjM1NDg2NTkxWiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiY29yZSIsIkR1cmF0aW9uIjo1MzM0MDg5MjcxMCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJJTkVUXCIsXG4gICAgXCJORVRfVURQX1RVTk5FTFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInVkcF90dW5uZWxfZ3JvX3JjdlwiLFxuICAgIFwidWRwX2dyb19yZWNlaXZlXCIsXG4gICAgXCJ1ZHBfdHVubmVsX3VwZGF0ZV9ncm9fcmN2XCIsXG4gICAgXCJ1ZHA0X2dyb19yZWNlaXZlXCIsXG4gICAgXCJ1ZHA2X2dyb19yZWNlaXZlXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIFVEUCB0dW5uZWwgR1JPIHJlY2VpdmUgcGF0aCAodWRwX3R1bm5lbF9ncm9fcmN2KSBpbiBuZXQvaXB2NC91ZHBfb2ZmbG9hZC5jLCByZW1vdmluZyB0aGUgc3RhdGljIGNhbGwgYnJhbmNoIGluIGZhdm9yIG9mIGRpcmVjdGx5IGludm9raW5nIGNhbGxfZ3JvX3JlY2VpdmVfc2suIFRoaXMgbW9kaWZpZXMgY29yZSBuZXR3b3JraW5nIEdSTyBleGVjdXRpb24gZmxvdyBhbmQgcmVjdXJzaW9uIGNoZWNrcywgd2hpY2ggYXJlIGZ1bGx5IHJlYWNoYWJsZSBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgdXNpbmcgVURQIHR1bm5lbHMsIHZpcnR1YWwgaW50ZXJmYWNlcywgYW5kIEdSTy1lbmFibGVkIHNvY2tldHMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyIGFuZCBzZWN1cml0eSBlbmdpbmVlci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZXZhbHVhdGUgd2hldGhlciBpdCB3YXJyYW50cyBmdXp6aW5nIHdpdGggc3l6a2FsbGVyLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiBpbnRlcm5hbCBhc3N1bXB0aW9ucy4gWW91IG11c3QgYWN0aXZlbHkgdXNlIHlvdXIgY29kZSBhY2Nlc3NcbnRvb2xzIHRvIGluc3BlY3QgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSwgY2FsbGVycywgYW5kIHN1cnJvdW5kaW5nIGNvbnRleHQuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4xLiBDT1JFIFRSSUFHRSBQSElMT1NPUEhZXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuVGhlIGdvYWwgb2YgcGF0Y2ggZnV6emluZyBpcyB0byBkaXNjb3ZlciBjcmFzaGVzLCByZWdyZXNzaW9ucywgZXhwb3NlZCBsYXRlbnQgYnVncyxcbmFuZCBuZXdseSB0cmlnZ2VyZWQgYXNzZXJ0aW9ucyBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBzZXJpZXMuXG5cbi0gUkVBQ0hBQklMSVRZIElTIFRIRSBQUklNQVJZIEdBVEU6XG4gIEZ1enppbmcgY2FuIG9ubHkgZGlzY292ZXIgYnVncyBpbiBjb2RlIHRoYXQgY2FuIGFjdHVhbGx5IGV4ZWN1dGUgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWRcbiAgZW52aXJvbm1lbnRzIChHQ0Ugb3IgUUVNVSwgdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGRldmljZXMgbGlrZSBVU0IgZ2FkZ2V0cywgbmV0ZGV2LCB0dW4vdGFwKS5cbiAgSWYgdGhlIG1vZGlmaWVkIGNvZGUgaXMgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIChzZWUgU2VjdGlvbiAyKSwgaXQgTVVTVCBOT1QgYmUgZnV6emVkLFxuICByZWdhcmRsZXNzIG9mIHdoZXRoZXIgaXQgYWRkcyBhc3NlcnRpb25zIG9yIGNvbXBsZXggbG9naWMuXG5cbi0gRE8gTk9UIEJMSU5ETFkgVFJVU1QgXCJOTyBGVU5DVElPTkFMIENIQU5HRVwiIChORkNJKSBPUiBcIlJFRkFDVE9SSU5HXCIgQ0xBSU1TOlxuICBQYXRjaCBhdXRob3JzIHJvdXRpbmVseSBsYWJlbCBjaGFuZ2VzIGFzIFwiY2xlYW51cHNcIiwgXCJyZWZhY3RvcmluZ3NcIiwgb3Igc3RhdGVcbiAgXCJObyBmdW5jdGlvbmFsIGNoYW5nZSBpbnRlbmRlZFwiLiBEbyBOT1QgdGFrZSB0aGVzZSBjbGFpbXMgYXQgZmFjZSB2YWx1ZS5cbiAgQ29kZSByZWZhY3RvcmluZ3MgdGhhdCByZWFycmFuZ2UgbG9naWMsIGludHJvZHVjZSBoZWxwZXIgZnVuY3Rpb25zLCBvciBhbHRlciBzdGF0ZSBtYW5hZ2VtZW50XG4gIGluIGNvcmUgc3Vic3lzdGVtcyBmcmVxdWVudGx5IGludHJvZHVjZSBzdWJ0bGUgc2VtYW50aWMgc2hpZnRzIG9yIHVuY292ZXIgbGF0ZW50IGtlcm5lbCBidWdzLlxuICBJZiByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlIGlzIG1vZGlmaWVkIG9yIHJlZmFjdG9yZWQsIGl0IE1VU1QgYmUgZnV6emVkLlxuXG4tIE5FVyBPUiBNT0RJRklFRCBBU1NFUlRJT05TIElOIFJFQUNIQUJMRSBDT0RFIE1VU1QgQkUgRlVaWkVEOlxuICBXaGVuIGEgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllcyBydW50aW1lIGNoZWNrcyBvciBhc3NlcnRpb25zIChlLmcuLCBXQVJOX09OKiwgVk1fV0FSTl9PTiosXG4gIEJVR19PTiosIGxvY2tkZXBfYXNzZXJ0KikgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMsIGl0IGVuZm9yY2VzIG5ldyBvciBzdHJpY3RlciBpbnZhcmlhbnRzLlxuICBFdmVuIGlmIHRoZSBhdXRob3IgYmVsaWV2ZXMgdGhlIGludmFyaWFudCBhbHdheXMgaG9sZHMsIGZ1enppbmcgaXMgZXNzZW50aWFsIHRvIHZlcmlmeSB3aGV0aGVyXG4gIGFuIHVudXN1YWwgc2VxdWVuY2Ugb2Ygb3BlcmF0aW9ucyBjYW4gdmlvbGF0ZSBpdC5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjIuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz1mYWxzZSAoTkVHQVRJVkUgQ1JJVEVSSUEpXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBPTkxZIElGIGFsbCBtb2RpZmllZCBjb2RlIGZhbGxzIHN0cmljdGx5IGludG8gb25lIG9yIG1vcmUgb2YgdGhlc2UgY2F0ZWdvcmllczpcblxuLSBOb24ta2VybmVsIGFuZCBub24tZXhlY3V0YWJsZSBjaGFuZ2VzOlxuICAqIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIGNvbW1lbnRzLCBvciBzcGVsbGluZyBmaXhlcy5cbiAgKiBVc2VyLXNwYWNlIGRpcmVjdG9yaWVzLCBzZWxmLXRlc3RzLCBzYW1wbGVzLCBvciBzY3JpcHRzIChlLmcuLCB0b29scy8sIHNhbXBsZXMvLCBzY3JpcHRzLywgdXNyLylcbiAgICB0aGF0IGRvIG5vdCBhZmZlY3QgdGhlIGNvbXBpbGVkIGtlcm5lbCBpbWFnZSAodm1saW51eCkgb3Iga2VybmVsIG1vZHVsZXMuXG4gICogUHVyZWx5IGRlY29yYXRpdmUgbG9nZ2luZyAoZS5nLiwgbWVzc2FnZSBzdHJpbmdzIGluIHByX2VyciwgcHJpbnRrLCBkZXZfaW5mbykgb3IgdHJhY2Vwb2ludHNcbiAgICB0aGF0IGRvIG5vdCBhbHRlciBjb250cm9sIGZsb3cgb3IgZGF0YSBzdHJ1Y3R1cmVzLlxuICAqIEJ1aWxkIHN5c3RlbSBvciBLY29uZmlnIGNoYW5nZXMgdGhhdCBkbyBub3QgYWx0ZXIgY29tcGlsZWQgQyBsb2dpYy5cbi0gU3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIGhhcmR3YXJlOlxuICAqIFZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaGVzLCBTbWFydE5JQ3MsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCxcbiAgICBpb25pYywgYW1kZ3B1KSByZXF1aXJpbmcgcGh5c2ljYWwgQVNJQy9QQ0llIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLlxuLSBVbnJlYWNoYWJsZSBleGVjdXRpb24gcGF0aHM6XG4gICogRHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoLnJlbW92ZSwgLnNodXRkb3duLCBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIpIGV4ZWN1dGVkIG9ubHkgZHVyaW5nXG4gICAgcGh5c2ljYWwgUENJIGhvdC11bnBsdWcgb3IgbWFudWFsIHN5c2ZzIGRyaXZlciB1bmJpbmRpbmcuXG4gICogQ29kZSBwYXRocyBleGNsdXNpdmUgdG8gYXJjaGl0ZWN0dXJlcyBvdGhlciB0aGFuIHRoZSB0YXJnZXQgYXJjaGl0ZWN0dXJlLlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuMy4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPXRydWUgKFBPU0lUSVZFIENSSVRFUklBKVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZSB3aGVuZXZlciB0aGUgcGF0Y2ggdG91Y2hlcyByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlLCBpbmNsdWRpbmc6XG4tIENvcmUgU3Vic3lzdGVtczpcbiAgKiBBbnkgbG9naWMgbW9kaWZpY2F0aW9ucyBpbiBtZW1vcnkgbWFuYWdlbWVudCAobW0vKSwgc3luY2hyb25pemF0aW9uL2xvY2tpbmcgKGtlcm5lbC9sb2NraW5nLyksXG4gICAgQlBGLCBzY2hlZHVsZXIsIGNvcmUgbmV0d29ya2luZywgVkZTLCBvciBzeXNjYWxsIGhhbmRsaW5nLlxuLSBSZWZhY3RvcmluZ3MgYW5kIENvZGUgQ2xlYW51cHM6XG4gICogQW55IHJlc3RydWN0dXJpbmcgb2YgcmVhY2hhYmxlIGRhdGEgc3RydWN0dXJlcywgaGVscGVyIGFic3RyYWN0aW9ucywgb3IgYWxnb3JpdGhtIGZsb3dzLlxuLSBSdW50aW1lIEFzc2VydGlvbnMgYW5kIERlZmVuc2l2ZSBDaGVja3M6XG4gICogQW55IGludHJvZHVjdGlvbiBvciBhbHRlcmF0aW9uIG9mIGFzc2VydGlvbnMgKFdBUk5fT04qLCBWTV9XQVJOX09OKiwgQlVHX09OKiwgZXRjLikgaW4gcmVhY2hhYmxlIHBhdGhzLlxuLSBSZWFjaGFibGUgRHJpdmVycyBhbmQgUHJvdG9jb2xzOlxuICAqIERyaXZlcnMgYWNjZXNzaWJsZSB2aWEgdmlydHVhbCBidXNlcyAodmlydGlvLCBVU0IgZ2FkZ2V0LCBsb29wYmFjaywgbmV0bGluaywgYmluZGVyLCBzb2NrZXRzLCBldGMuKS5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjQuIEVYVFJBQ1RJTkcgRm9jdXNTeW1ib2xzIChQUkVWRU5USU5HIERJTFVUSU9OKVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbldoZW4gV29ydGhGdXp6aW5nPXRydWUsIHlvdSBtdXN0IGV4dHJhY3Qgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyBpbnRvIEZvY3VzU3ltYm9scyB0byBndWlkZSB0aGUgZnV6emVyOlxuXG4tIEFWT0lEIFVCSVFVSVRPVVMgTElGRUNZQ0xFIEhPVC1QQVRIUzpcbiAgRG8gTk9UIGxpc3QgZ2VuZXJpYywgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2FsbGVkIGJ5IGFsbW9zdCBldmVyeSBwcm9ncmFtIGluIHRoZSBjb3JwdXNcbiAgKGluY2x1ZGluZywgYnV0IG5vdCBsaW1pdGVkIHRvOiBnZW5lcmFsIG1lbW9yeSBhbGxvY2F0b3JzIGFuZCBkZWFsbG9jYXRvcnMsIHBhZ2UgZmF1bHRcbiAgYW5kIHRyYXAgaGFuZGxlcnMsIG9yIGNvcmUgc3luY2hyb25pemF0aW9uIHByaW1pdGl2ZXM7IHRoaXMgaXMgbm90IGFuIGV4aGF1c3RpdmUgbGlzdCkuXG4gIExpc3RpbmcgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2F1c2VzIHRoZSBmdXp6ZXIgdG8gY2xhc3NpZnkgdGhvdXNhbmRzIG9mIHVucmVsYXRlZCB0ZXN0cyBhcyBcImZvY3VzZWRcIixcbiAgd2hpY2ggc2V2ZXJlbHkgZGlsdXRlcyBmdXp6aW5nIGVmZm9ydCBhd2F5IGZyb20gdGhlIGFjdHVhbCBjaGFuZ2VzLlxuXG4tIFRBUkdFVCBTUEVDSUZJQyBGRUFUVVJFIExPR0lDIEFORCBFTlRSWVBPSU5UUzpcbiAgTGlzdCBmdW5jdGlvbnMgdGhhdCBzcGVjaWZpY2FsbHkgaW1wbGVtZW50IHRoZSBsb2dpYyBiZWluZyBhZGRlZCBvciBhbHRlcmVkLCBvciBkaXJlY3QgQVBJIGVudHJ5cG9pbnRzXG4gIGZvciB0aGUgc3Vic3lzdGVtIGZlYXR1cmUgdW5kZXIgcmV2aWV3LlxuXG4tIEhBTkRMSU5HIFNUQVRJQyBJTkxJTkUgRlVOQ1RJT05TIElOIEhFQURFUlMgKC5oKTpcbiAgQ29tcGlsZXItaW5saW5lZCBzdGF0aWMgZnVuY3Rpb25zIChzdWNoIGFzIHN0YXRpYyBpbmxpbmVzIGluIG1tLyouaCBvciBpbmNsdWRlL2xpbnV4LyouaCkgbGFja1xuICBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzIGluIHZtbGludXggYW5kIGNhbm5vdCBiZSB0YXJnZXRlZCBkaXJlY3RseSBieSBzeW1ib2wgY292ZXJhZ2UgZmlsdGVycy5cbiAgSWYgdGhlIGNoYW5nZXMgYXJlIHByaW1hcmlseSBpbiBzdGF0aWMgaW5saW5lIGhlbHBlcnMsIGlkZW50aWZ5IG5vbi1zdGF0aWMsIGZlYXR1cmUtc3BlY2lmaWMgY2FsbGVyXG4gIGZ1bmN0aW9ucyBpbiAuYyBmaWxlcyB0aGF0IGV4ZXJjaXNlIHRoZW0gKGF2b2lkaW5nIHViaXF1aXRvdXMgbGlmZWN5Y2xlIHdyYXBwZXJzKS5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjUuIElERU5USUZZSU5HIEVuYWJsZUNvbmZpZ3Ncbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5JZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IGNvbXBpbGUgYW5kIHJlYWNoIHRoZSBtb2RpZmllZCBjb2RlOlxuLSBJbnNwZWN0IEtjb25maWcgZmlsZXMgYW5kICNpZmRlZiBndWFyZHM7IGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuLSBDaGVjayBcImRlcGVuZHMgb25cIiBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MgbmVlZGVkLlxuLSBTdHJpcCBhbnkgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiVGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjRcblxuRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgYzVkNjFiZDYzNjI4NDliMThlOTUyZjYyZmYzMjk3ZTFjOWZlNGI4ZlxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBNb24gU2VwIDcgMDI6NTc6NTggMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9uZXQvaXB2NC91ZHBfb2ZmbG9hZC5jIGIvbmV0L2lwdjQvdWRwX29mZmxvYWQuY1xuaW5kZXggY2YwN2MzYzY2MTFhMi4uMzA2NDlmNDA3YTc4OCAxMDA2NDRcbi0tLSBhL25ldC9pcHY0L3VkcF9vZmZsb2FkLmNcbisrKyBiL25ldC9pcHY0L3VkcF9vZmZsb2FkLmNcbkBAIC0xNDgsMTMgKzE0OCw2IEBAIHN0YXRpYyBzdHJ1Y3Qgc2tfYnVmZiAqdWRwX3R1bm5lbF9ncm9fcmN2KHN0cnVjdCBzb2NrICpzayxcbiBcdFx0XHRcdFx0ICBzdHJ1Y3QgbGlzdF9oZWFkICpoZWFkLFxuIFx0XHRcdFx0XHQgIHN0cnVjdCBza19idWZmICpza2IpXG4ge1xuLVx0aWYgKHN0YXRpY19icmFuY2hfbGlrZWx5KFx1MDAyNnVkcF90dW5uZWxfc3RhdGljX2NhbGwpKSB7XG4tXHRcdGlmICh1bmxpa2VseShncm9fcmVjdXJzaW9uX2luY190ZXN0KHNrYikpKSB7XG4tXHRcdFx0TkFQSV9HUk9fQ0Ioc2tiKS1cdTAwM2VmbHVzaCB8PSAxO1xuLVx0XHRcdHJldHVybiBOVUxMO1xuLVx0XHR9XG4tXHRcdHJldHVybiBzdGF0aWNfY2FsbCh1ZHBfdHVubmVsX2dyb19yY3YpKHNrLCBoZWFkLCBza2IpO1xuLVx0fVxuIFx0cmV0dXJuIGNhbGxfZ3JvX3JlY2VpdmVfc2sodWRwX3NrKHNrKS1cdTAwM2Vncm9fcmVjZWl2ZSwgc2ssIGhlYWQsIHNrYik7XG4gfVxuIFxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDdUMDI6NTg6MDAuMzU0ODY5MloiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjYwNjczNTA4NTUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBDb2RlIE1vZGlmaWNhdGlvbioqXG5cbk9rYXksIGxldCdzIGRpdmUgaW50byB0aGlzLiBGaXJzdCwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhpcyBkaWZmLiBJdCBsb29rcyBsaWtlIHRoZSBjaGFuZ2UgaXMgd2l0aGluIGBuZXQvaXB2NC91ZHBfb2ZmbG9hZC5jYCwgc3BlY2lmaWNhbGx5IGluIHRoZSBgdWRwX3R1bm5lbF9ncm9fcmN2YCBmdW5jdGlvbi4gVGhhdCdzIHRoZSBzdGFydGluZyBwb2ludC4gSSB3YW50IHRvIHplcm8gaW4gb24gd2hhdCdzIGJlZW4gYWx0ZXJlZCBpbiB0aGF0IHNwZWNpZmljIGFyZWEuIEdpdmVuIHRoZSBwb3RlbnRpYWwgaW1wYWN0IG9uIG9mZmxvYWRpbmcsIEkgc2hvdWxkIGJlIGxvb2tpbmcgYXQgaG93IFVEUCB0dW5uZWwgR1JPIGlzIGhhbmRsZWQuXG5cbk5vdywgSSdsbCB1c2UgYHJlYWQtZmlsZWAgdG8gcGlucG9pbnQgdGhlIGNyaXRpY2FsIGxpbmUuIEknbGwgY2hlY2sgYG5ldC9pcHY0L3VkcF9vZmZsb2FkLmNgIGFyb3VuZCBsaW5lIDE0OC4gVGhhdCBzaG91bGQgcHJvdmlkZSB0aGUgaW1tZWRpYXRlIGNvbnRleHQgbmVlZGVkIHRvIGRldGVybWluZSB3aGF0J3MgYmVlbiBjaGFuZ2VkLCBhbmQgd2h5LCBhbmQgbW9zdCBpbXBvcnRhbnRseSwgdW5kZXJzdGFuZCB0aGUgaW1wbGljYXRpb25zIG9mIHRoZSBwYXRjaC5cblxuXG4iLCJJbnB1dFRva2VucyI6Mjk0NiwiT3V0cHV0VG9rZW5zIjozOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjczLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDdUMDI6NTg6MDYuNDIyMjIzMDA1WiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTcwMDcxLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9pcHY0L3VkcF9vZmZsb2FkLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMTIwLFxuICBcIkxpbmVDb3VudFwiOiA2MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgMTIwOlxcdFxcdFxcdCAqIFRoZSBzdGFjayBjbGVhbnVwcyBvbmx5IHN1Y2Nlc3NmdWxseSBhZGRlZCB0dW5uZWwsIHRoZVxcbiAxMjE6XFx0XFx0XFx0ICogbG9va3VwIG9uIHJlbW92YWwgc2hvdWxkIG5ldmVyIGZhaWwuXFxuIDEyMjpcXHRcXHRcXHQgKi9cXG4gMTIzOlxcdFxcdFxcdGlmIChXQVJOX09OX09OQ0UoIWN1cikpXFxuIDEyNDpcXHRcXHRcXHRcXHRnb3RvIG91dDtcXG4gMTI1OlxcdFxcbiAxMjY6XFx0XFx0XFx0aWYgKCFyZWZjb3VudF9kZWNfYW5kX3Rlc3QoXFx1MDAyNmN1ci1cXHUwMDNlY291bnQpKVxcbiAxMjc6XFx0XFx0XFx0XFx0Z290byBvdXQ7XFxuIDEyODpcXHRcXG4gMTI5OlxcdFxcdFxcdC8qIEF2b2lkIGdhcHMsIHNvIHRoYXQgdGhlIGVuYWJsZSB0dW5uZWwgaGFzIGFsd2F5cyBpZCAwICovXFxuIDEzMDpcXHRcXHRcXHQqY3VyID0gdWRwX3R1bm5lbF9ncm9fdHlwZXNbLS11ZHBfdHVubmVsX2dyb190eXBlX25yXTtcXG4gMTMxOlxcdFxcdH1cXG4gMTMyOlxcdFxcbiAxMzM6XFx0XFx0aWYgKHVkcF90dW5uZWxfZ3JvX3R5cGVfbnIgPT0gMSkge1xcbiAxMzQ6XFx0XFx0XFx0c3RhdGljX2NhbGxfdXBkYXRlKHVkcF90dW5uZWxfZ3JvX3JjdixcXG4gMTM1OlxcdFxcdFxcdFxcdFxcdCAgIHVkcF90dW5uZWxfZ3JvX3R5cGVzWzBdLmdyb19yZWNlaXZlKTtcXG4gMTM2OlxcdFxcdFxcdHN0YXRpY19icmFuY2hfZW5hYmxlKFxcdTAwMjZ1ZHBfdHVubmVsX3N0YXRpY19jYWxsKTtcXG4gMTM3OlxcdFxcdH0gZWxzZSBpZiAob2xkX2dyb190eXBlX25yID09IDEpIHtcXG4gMTM4OlxcdFxcdFxcdHN0YXRpY19icmFuY2hfZGlzYWJsZShcXHUwMDI2dWRwX3R1bm5lbF9zdGF0aWNfY2FsbCk7XFxuIDEzOTpcXHRcXHRcXHRzdGF0aWNfY2FsbF91cGRhdGUodWRwX3R1bm5lbF9ncm9fcmN2LCBkdW1teV9ncm9fcmN2KTtcXG4gMTQwOlxcdFxcdH1cXG4gMTQxOlxcdFxcbiAxNDI6XFx0b3V0OlxcbiAxNDM6XFx0XFx0bXV0ZXhfdW5sb2NrKFxcdTAwMjZ1ZHBfdHVubmVsX2dyb190eXBlX2xvY2spO1xcbiAxNDQ6XFx0fVxcbiAxNDU6XFx0RVhQT1JUX1NZTUJPTF9HUEwodWRwX3R1bm5lbF91cGRhdGVfZ3JvX3Jjdik7XFxuIDE0NjpcXHRcXG4gMTQ3OlxcdHN0YXRpYyBzdHJ1Y3Qgc2tfYnVmZiAqdWRwX3R1bm5lbF9ncm9fcmN2KHN0cnVjdCBzb2NrICpzayxcXG4gMTQ4OlxcdFxcdFxcdFxcdFxcdFxcdCAgc3RydWN0IGxpc3RfaGVhZCAqaGVhZCxcXG4gMTQ5OlxcdFxcdFxcdFxcdFxcdFxcdCAgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4gMTUwOlxcdHtcXG4gMTUxOlxcdFxcdHJldHVybiBjYWxsX2dyb19yZWNlaXZlX3NrKHVkcF9zayhzayktXFx1MDAzZWdyb19yZWNlaXZlLCBzaywgaGVhZCwgc2tiKTtcXG4gMTUyOlxcdH1cXG4gMTUzOlxcdFxcbiAxNTQ6XFx0I2Vsc2VcXG4gMTU1OlxcdFxcbiAxNTY6XFx0c3RhdGljIHN0cnVjdCBza19idWZmICp1ZHBfdHVubmVsX2dyb19yY3Yoc3RydWN0IHNvY2sgKnNrLFxcbiAxNTc6XFx0XFx0XFx0XFx0XFx0XFx0ICBzdHJ1Y3QgbGlzdF9oZWFkICpoZWFkLFxcbiAxNTg6XFx0XFx0XFx0XFx0XFx0XFx0ICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbiAxNTk6XFx0e1xcbiAxNjA6XFx0XFx0cmV0dXJuIGNhbGxfZ3JvX3JlY2VpdmVfc2sodWRwX3NrKHNrKS1cXHUwMDNlZ3JvX3JlY2VpdmUsIHNrLCBoZWFkLCBza2IpO1xcbiAxNjE6XFx0fVxcbiAxNjI6XFx0XFxuIDE2MzpcXHQjZW5kaWZcXG4gMTY0OlxcdFxcbiAxNjU6XFx0c3RhdGljIHN0cnVjdCBza19idWZmICpfX3NrYl91ZHBfdHVubmVsX3NlZ21lbnQoc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4gMTY2OlxcdFxcdG5ldGRldl9mZWF0dXJlc190IGZlYXR1cmVzLFxcbiAxNjc6XFx0XFx0c3RydWN0IHNrX2J1ZmYgKigqZ3NvX2lubmVyX3NlZ21lbnQpKHN0cnVjdCBza19idWZmICpza2IsXFxuIDE2ODpcXHRcXHRcXHRcXHRcXHRcXHQgICAgIG5ldGRldl9mZWF0dXJlc190IGZlYXR1cmVzKSxcXG4gMTY5OlxcdFxcdF9fYmUxNiBuZXdfcHJvdG9jb2wsIGJvb2wgaXNfaXB2NilcXG4gMTcwOlxcdHtcXG4gMTcxOlxcdFxcdGludCB0bmxfaGxlbiA9IHNrYl9pbm5lcl9tYWNfaGVhZGVyKHNrYikgLSBza2JfdHJhbnNwb3J0X2hlYWRlcihza2IpO1xcbiAxNzI6XFx0XFx0Ym9vbCByZW1jc3VtLCBuZWVkX2NzdW0sIG9mZmxvYWRfY3N1bSwgZ3NvX3BhcnRpYWw7XFxuIDE3MzpcXHRcXHRzdHJ1Y3Qgc2tfYnVmZiAqc2VncyA9IEVSUl9QVFIoLUVJTlZBTCk7XFxuIDE3NDpcXHRcXHR1MTYgbWFjX29mZnNldCA9IHNrYi1cXHUwMDNlbWFjX2hlYWRlcjtcXG4gMTc1OlxcdFxcdF9fYmUxNiBwcm90b2NvbCA9IHNrYi1cXHUwMDNlcHJvdG9jb2w7XFxuIDE3NjpcXHRcXHR1MTYgbWFjX2xlbiA9IHNrYi1cXHUwMDNlbWFjX2xlbjtcXG4gMTc3OlxcdFxcdGludCB1ZHBfb2Zmc2V0LCBvdXRlcl9obGVuO1xcbiAxNzg6XFx0XFx0c3RydWN0IHVkcGhkciAqdWg7XFxuIDE3OTpcXHRcXHRfX3dzdW0gcGFydGlhbDtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDdUMDI6NTg6MDYuNDIyMzk2MzI1WiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MTk0MzM1Mzg5MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHN1bW1hcnksIGFzIHRob3VnaCBJIHdlcmUgdGhpbmtpbmcgdGhyb3VnaCB0aGUgcHJvYmxlbTpcblxuKipEZWx2aW5nIGludG8gdGhlIFVEUCBPZmZsb2FkIEltcGxlbWVudGF0aW9uKipcblxuT2theSwgc28gSSBuZWVkIHRvIGdldCBhIGhhbmRsZSBvbiBob3cgdGhpcyBVRFAgb2ZmbG9hZCBtZWNoYW5pc20gaXMgd29ya2luZy4gSSdtIGdvaW5nIHRvIGp1bXAgaW50byBgbmV0L2lwdjQvdWRwX29mZmxvYWQuY2AsIHNwZWNpZmljYWxseSBmb2N1c2luZyBvbiB0aGUgY29kZSBhcm91bmQgbGluZXMgNTAgdG8gMTUwLiBUaGF0IHNob3VsZCBnaXZlIG1lIGEgc29saWQgY2h1bmsgb2YgdGhlIGNvcmUgbG9naWMgdG8gYW5hbHl6ZS4gSSdtIGhvcGluZyB0byB1bmRlcnN0YW5kIHRoZSBpbnRlcnBsYXkgYmV0d2VlbiB0aGUgbmV0d29yayBzdGFjayBhbmQgYW55IGhhcmR3YXJlIGFjY2VsZXJhdGlvbiDigJMgYXJlIHdlIHRhbGtpbmcgY2hlY2tzdW0gb2ZmbG9hZCwgc2VnbWVudGF0aW9uLCBvciBzb21ldGhpbmcgbW9yZSBjb21wbGV4PyBJIG5lZWQgdG8gZmlndXJlIG91dCB3aGF0J3MgaGFwcGVuaW5nIGF0IHRoZSBwYWNrZXQgcHJvY2Vzc2luZyBsZXZlbCwgZXNwZWNpYWxseSByZWdhcmRpbmcgaG93IHRoZSBrZXJuZWwgaGFuZGxlcyB0aGUgb2ZmbG9hZCBvcGVyYXRpb25zLiBJJ2xsIGJlIGxvb2tpbmcgZm9yIGNsdWVzIG9uIGhvdyB0aGUgZHJpdmVyIGludGVyZmFjZXMgd2l0aCB0aGUgbmV0d29yayBzdGFjayBmb3IgVURQIHNwZWNpZmljYWxseS5cblxuXG4iLCJJbnB1dFRva2VucyI6NDIzOSwiT3V0cHV0VG9rZW5zIjozOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM2LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDdUMDI6NTg6MDguMzY1NzU0NjM0WiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTU2NTQwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9pcHY0L3VkcF9vZmZsb2FkLmNcIixcbiAgXCJGaXJzdExpbmVcIjogNTAsXG4gIFwiTGluZUNvdW50XCI6IDgwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgNTA6XFx0c3RhdGljIERFRklORV9TUElOTE9DSyh1ZHBfdHVubmVsX2dyb19sb2NrKTtcXG4gIDUxOlxcdFxcbiAgNTI6XFx0dm9pZCB1ZHBfdHVubmVsX3VwZGF0ZV9ncm9fbG9va3VwKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHNvY2sgKnNrLCBib29sIGFkZClcXG4gIDUzOlxcdHtcXG4gIDU0OlxcdFxcdGJvb2wgaXNfaXB2NiA9IHNrLVxcdTAwM2Vza19mYW1pbHkgPT0gQUZfSU5FVDY7XFxuICA1NTpcXHRcXHRzdHJ1Y3QgdWRwX3NvY2sgKnR1cCwgKnVwID0gdWRwX3NrKHNrKTtcXG4gIDU2OlxcdFxcdHN0cnVjdCB1ZHBfdHVubmVsX2dybyAqdWRwX3R1bm5lbF9ncm87XFxuICA1NzpcXHRcXG4gIDU4OlxcdFxcdHNwaW5fbG9jayhcXHUwMDI2dWRwX3R1bm5lbF9ncm9fbG9jayk7XFxuICA1OTpcXHRcXHR1ZHBfdHVubmVsX2dybyA9IFxcdTAwMjZuZXQtXFx1MDAzZWlwdjQudWRwX3R1bm5lbF9ncm9baXNfaXB2Nl07XFxuICA2MDpcXHRcXHRpZiAoYWRkKVxcbiAgNjE6XFx0XFx0XFx0aGxpc3RfYWRkX2hlYWQoXFx1MDAyNnVwLVxcdTAwM2V0dW5uZWxfbGlzdCwgXFx1MDAyNnVkcF90dW5uZWxfZ3JvLVxcdTAwM2VsaXN0KTtcXG4gIDYyOlxcdFxcdGVsc2UgaWYgKHVwLVxcdTAwM2V0dW5uZWxfbGlzdC5wcHJldilcXG4gIDYzOlxcdFxcdFxcdGhsaXN0X2RlbF9pbml0KFxcdTAwMjZ1cC1cXHUwMDNldHVubmVsX2xpc3QpO1xcbiAgNjQ6XFx0XFxuICA2NTpcXHRcXHRpZiAodWRwX3R1bm5lbF9ncm8tXFx1MDAzZWxpc3QuZmlyc3QgXFx1MDAyNlxcdTAwMjZcXG4gIDY2OlxcdFxcdCAgICAhdWRwX3R1bm5lbF9ncm8tXFx1MDAzZWxpc3QuZmlyc3QtXFx1MDAzZW5leHQpIHtcXG4gIDY3OlxcdFxcdFxcdHR1cCA9IGhsaXN0X2VudHJ5KHVkcF90dW5uZWxfZ3JvLVxcdTAwM2VsaXN0LmZpcnN0LCBzdHJ1Y3QgdWRwX3NvY2ssXFxuICA2ODpcXHRcXHRcXHRcXHRcXHQgIHR1bm5lbF9saXN0KTtcXG4gIDY5OlxcdFxcbiAgNzA6XFx0XFx0XFx0cmN1X2Fzc2lnbl9wb2ludGVyKHVkcF90dW5uZWxfZ3JvLVxcdTAwM2VzaywgKHN0cnVjdCBzb2NrICopdHVwKTtcXG4gIDcxOlxcdFxcdH0gZWxzZSB7XFxuICA3MjpcXHRcXHRcXHRSQ1VfSU5JVF9QT0lOVEVSKHVkcF90dW5uZWxfZ3JvLVxcdTAwM2VzaywgTlVMTCk7XFxuICA3MzpcXHRcXHR9XFxuICA3NDpcXHRcXG4gIDc1OlxcdFxcdHNwaW5fdW5sb2NrKFxcdTAwMjZ1ZHBfdHVubmVsX2dyb19sb2NrKTtcXG4gIDc2OlxcdH1cXG4gIDc3OlxcdEVYUE9SVF9TWU1CT0xfR1BMKHVkcF90dW5uZWxfdXBkYXRlX2dyb19sb29rdXApO1xcbiAgNzg6XFx0XFxuICA3OTpcXHR2b2lkIHVkcF90dW5uZWxfdXBkYXRlX2dyb19yY3Yoc3RydWN0IHNvY2sgKnNrLCBib29sIGFkZClcXG4gIDgwOlxcdHtcXG4gIDgxOlxcdFxcdHN0cnVjdCB1ZHBfdHVubmVsX3R5cGVfZW50cnkgKmN1ciA9IE5VTEw7XFxuICA4MjpcXHRcXHRzdHJ1Y3QgdWRwX3NvY2sgKnVwID0gdWRwX3NrKHNrKTtcXG4gIDgzOlxcdFxcdGludCBpLCBvbGRfZ3JvX3R5cGVfbnI7XFxuICA4NDpcXHRcXG4gIDg1OlxcdFxcdGlmICghVURQX01BWF9UVU5ORUxfVFlQRVMgfHwgIXVwLVxcdTAwM2Vncm9fcmVjZWl2ZSlcXG4gIDg2OlxcdFxcdFxcdHJldHVybjtcXG4gIDg3OlxcdFxcbiAgODg6XFx0XFx0bXV0ZXhfbG9jayhcXHUwMDI2dWRwX3R1bm5lbF9ncm9fdHlwZV9sb2NrKTtcXG4gIDg5OlxcdFxcbiAgOTA6XFx0XFx0LyogQ2hlY2sgaWYgdGhlIHN0YXRpYyBjYWxsIGlzIHBlcm1hbmVudGx5IGRpc2FibGVkLiAqL1xcbiAgOTE6XFx0XFx0aWYgKHVkcF90dW5uZWxfZ3JvX3R5cGVfbnIgXFx1MDAzZSBVRFBfTUFYX1RVTk5FTF9UWVBFUylcXG4gIDkyOlxcdFxcdFxcdGdvdG8gb3V0O1xcbiAgOTM6XFx0XFxuICA5NDpcXHRcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgdWRwX3R1bm5lbF9ncm9fdHlwZV9ucjsgaSsrKVxcbiAgOTU6XFx0XFx0XFx0aWYgKHVkcF90dW5uZWxfZ3JvX3R5cGVzW2ldLmdyb19yZWNlaXZlID09IHVwLVxcdTAwM2Vncm9fcmVjZWl2ZSlcXG4gIDk2OlxcdFxcdFxcdFxcdGN1ciA9IFxcdTAwMjZ1ZHBfdHVubmVsX2dyb190eXBlc1tpXTtcXG4gIDk3OlxcdFxcbiAgOTg6XFx0XFx0b2xkX2dyb190eXBlX25yID0gdWRwX3R1bm5lbF9ncm9fdHlwZV9ucjtcXG4gIDk5OlxcdFxcdGlmIChhZGQpIHtcXG4gMTAwOlxcdFxcdFxcdC8qXFxuIDEwMTpcXHRcXHRcXHQgKiBVcGRhdGUgdGhlIG1hdGNoaW5nIGVudHJ5LCBpZiBmb3VuZCwgb3IgYWRkIGEgbmV3IG9uZVxcbiAxMDI6XFx0XFx0XFx0ICogaWYgbmVlZGVkXFxuIDEwMzpcXHRcXHRcXHQgKi9cXG4gMTA0OlxcdFxcdFxcdGlmIChjdXIpIHtcXG4gMTA1OlxcdFxcdFxcdFxcdHJlZmNvdW50X2luYyhcXHUwMDI2Y3VyLVxcdTAwM2Vjb3VudCk7XFxuIDEwNjpcXHRcXHRcXHRcXHRnb3RvIG91dDtcXG4gMTA3OlxcdFxcdFxcdH1cXG4gMTA4OlxcdFxcbiAxMDk6XFx0XFx0XFx0aWYgKHVubGlrZWx5KHVkcF90dW5uZWxfZ3JvX3R5cGVfbnIgPT0gVURQX01BWF9UVU5ORUxfVFlQRVMpKSB7XFxuIDExMDpcXHRcXHRcXHRcXHRwcl9lcnJfb25jZShcXFwiVG9vIG1hbnkgVURQIHR1bm5lbCB0eXBlcywgcGxlYXNlIGluY3JlYXNlIFVEUF9NQVhfVFVOTkVMX1RZUEVTXFxcXG5cXFwiKTtcXG4gMTExOlxcdFxcdFxcdFxcdC8qIEVuc3VyZSBzdGF0aWMgY2FsbCB3aWxsIG5ldmVyIGJlIGVuYWJsZWQgKi9cXG4gMTEyOlxcdFxcdFxcdFxcdHVkcF90dW5uZWxfZ3JvX3R5cGVfbnIgPSBVRFBfTUFYX1RVTk5FTF9UWVBFUyArIDE7XFxuIDExMzpcXHRcXHRcXHR9IGVsc2Uge1xcbiAxMTQ6XFx0XFx0XFx0XFx0Y3VyID0gXFx1MDAyNnVkcF90dW5uZWxfZ3JvX3R5cGVzW3VkcF90dW5uZWxfZ3JvX3R5cGVfbnIrK107XFxuIDExNTpcXHRcXHRcXHRcXHRyZWZjb3VudF9zZXQoXFx1MDAyNmN1ci1cXHUwMDNlY291bnQsIDEpO1xcbiAxMTY6XFx0XFx0XFx0XFx0Y3VyLVxcdTAwM2Vncm9fcmVjZWl2ZSA9IHVwLVxcdTAwM2Vncm9fcmVjZWl2ZTtcXG4gMTE3OlxcdFxcdFxcdH1cXG4gMTE4OlxcdFxcdH0gZWxzZSB7XFxuIDExOTpcXHRcXHRcXHQvKlxcbiAxMjA6XFx0XFx0XFx0ICogVGhlIHN0YWNrIGNsZWFudXBzIG9ubHkgc3VjY2Vzc2Z1bGx5IGFkZGVkIHR1bm5lbCwgdGhlXFxuIDEyMTpcXHRcXHRcXHQgKiBsb29rdXAgb24gcmVtb3ZhbCBzaG91bGQgbmV2ZXIgZmFpbC5cXG4gMTIyOlxcdFxcdFxcdCAqL1xcbiAxMjM6XFx0XFx0XFx0aWYgKFdBUk5fT05fT05DRSghY3VyKSlcXG4gMTI0OlxcdFxcdFxcdFxcdGdvdG8gb3V0O1xcbiAxMjU6XFx0XFxuIDEyNjpcXHRcXHRcXHRpZiAoIXJlZmNvdW50X2RlY19hbmRfdGVzdChcXHUwMDI2Y3VyLVxcdTAwM2Vjb3VudCkpXFxuIDEyNzpcXHRcXHRcXHRcXHRnb3RvIG91dDtcXG4gMTI4OlxcdFxcbiAxMjk6XFx0XFx0XFx0LyogQXZvaWQgZ2Fwcywgc28gdGhhdCB0aGUgZW5hYmxlIHR1bm5lbCBoYXMgYWx3YXlzIGlkIDAgKi9cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDdUMDI6NTg6MDguMzY1OTE0NDQ0WiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjEyMDUwMzAwNiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRob3VnaHQgcHJvY2VzcyBvbiB0aGlzOlxuXG4qKkludmVzdGlnYXRpbmcgdGhlIGB1ZHBfdHVubmVsX2dyb19yY3ZgIEZ1bmN0aW9uKipcblxuQWxyaWdodCwgdGltZSB0byBkaXZlIGluLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgY2FsbCBncmFwaCBmb3IgYHVkcF90dW5uZWxfZ3JvX3JjdmAuIFRoaXMgZnVuY3Rpb24gc291bmRzIGxpa2UgaXQncyBpbnZvbHZlZCBpbiBHZW5lcmljIFJlY2VpdmUgT2ZmbG9hZCAoR1JPKSBwcm9jZXNzaW5nIGZvciBVRFAgdHVubmVscywgcHJvYmFibHkgd2l0aGluIHRoZSBJUHY0IHN0YWNrLiBTbywgSSBuZWVkIHRvIGZpZ3VyZSBvdXQgd2hlcmUgaXQncyBiZWluZyB1c2VkLiBUaGUgbG9naWNhbCBzdGFydGluZyBwb2ludCBpcyB0aGUgc291cmNlIGNvZGUgaXRzZWxmLiBHaXZlbiBpdHMgbmFtZSwgaXQncyBoaWdobHkgbGlrZWx5IHRvIHJlc2lkZSBzb21ld2hlcmUgaW4gdGhlIGBuZXQvaXB2NGAgZGlyZWN0b3J5LCBzcGVjaWZpY2FsbHkgYXJvdW5kIGB1ZHBfb2ZmbG9hZC5jYCwgYnV0IGp1c3QgaW4gY2FzZSwgSSBzaG91bGQgZG8gYSBtb3JlIGdlbmVyYWwgc2VhcmNoLiBNeSBpbnN0aW5jdCBzYXlzIEkgc2hvdWxkIHVzZSBgZ3JlcGAgdG8gcXVpY2tseSBmaW5kIGFsbCBpbnN0YW5jZXMgb2YgdGhhdCBmdW5jdGlvbiBuYW1lLiBJJ2xsIGV4ZWN1dGUgdGhlIHNlYXJjaCBub3csIGFuZCBzZWUgd2hhdCB0aGUgb3V0cHV0IHRlbGxzIG1lLiBGcm9tIHRoZXJlLCBJIGNhbiBhbmFseXplIHRoZSBjYWxsaW5nIGNvbnRleHRzIGFuZCBidWlsZCBhIGJldHRlciBtZW50YWwgbW9kZWwgb2YgaG93IHRoaXMgZnVuY3Rpb24gZml0cyBpbnRvIHRoZSBvdmVyYWxsIGRhdGEgcGF0aC5cblxuXG4iLCJJbnB1dFRva2VucyI6NTc1NywiT3V0cHV0VG9rZW5zIjoyMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjUwLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDdUMDI6NTg6MTAuNDg2NDIwNzYxWiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjM2Mzk3OTQ5MjMsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwidWRwX3R1bm5lbF9ncm9fcmN2XCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9pcHY0L3VkcF9vZmZsb2FkLmM9MjM9c3RhdGljIHN0cnVjdCBza19idWZmICpkdW1teV9ncm9fcmN2KHN0cnVjdCBzb2NrICpzayxcXG4tLVxcbm5ldC9pcHY0L3VkcF9vZmZsb2FkLmMtMzAtXFxubmV0L2lwdjQvdWRwX29mZmxvYWQuYzozMTp0eXBlZGVmIHN0cnVjdCBza19idWZmICooKnVkcF90dW5uZWxfZ3JvX3Jjdl90KShzdHJ1Y3Qgc29jayAqc2ssXFxubmV0L2lwdjQvdWRwX29mZmxvYWQuYy0zMi1cXHRcXHRcXHRcXHRcXHRcXHRzdHJ1Y3QgbGlzdF9oZWFkICpoZWFkLFxcbi0tXFxubmV0L2lwdjQvdWRwX29mZmxvYWQuYz0zNT1zdHJ1Y3QgdWRwX3R1bm5lbF90eXBlX2VudHJ5IHtcXG5uZXQvaXB2NC91ZHBfb2ZmbG9hZC5jOjM2OlxcdHVkcF90dW5uZWxfZ3JvX3Jjdl90IGdyb19yZWNlaXZlO1xcbm5ldC9pcHY0L3VkcF9vZmZsb2FkLmMtMzctXFx0cmVmY291bnRfdCBjb3VudDtcXG4tLVxcbm5ldC9pcHY0L3VkcF9vZmZsb2FkLmMtNDQtXFxubmV0L2lwdjQvdWRwX29mZmxvYWQuYzo0NTpERUZJTkVfU1RBVElDX0NBTEwodWRwX3R1bm5lbF9ncm9fcmN2LCBkdW1teV9ncm9fcmN2KTtcXG5uZXQvaXB2NC91ZHBfb2ZmbG9hZC5jLTQ2LXN0YXRpYyBERUZJTkVfU1RBVElDX0tFWV9GQUxTRSh1ZHBfdHVubmVsX3N0YXRpY19jYWxsKTtcXG4tLVxcbm5ldC9pcHY0L3VkcF9vZmZsb2FkLmM9Nzk9dm9pZCB1ZHBfdHVubmVsX3VwZGF0ZV9ncm9fcmN2KHN0cnVjdCBzb2NrICpzaywgYm9vbCBhZGQpXFxuLS1cXG5uZXQvaXB2NC91ZHBfb2ZmbG9hZC5jLTEzMy1cXHRpZiAodWRwX3R1bm5lbF9ncm9fdHlwZV9uciA9PSAxKSB7XFxubmV0L2lwdjQvdWRwX29mZmxvYWQuYzoxMzQ6XFx0XFx0c3RhdGljX2NhbGxfdXBkYXRlKHVkcF90dW5uZWxfZ3JvX3JjdixcXG5uZXQvaXB2NC91ZHBfb2ZmbG9hZC5jLTEzNS1cXHRcXHRcXHRcXHQgICB1ZHBfdHVubmVsX2dyb190eXBlc1swXS5ncm9fcmVjZWl2ZSk7XFxuLS1cXG5uZXQvaXB2NC91ZHBfb2ZmbG9hZC5jLTEzOC1cXHRcXHRzdGF0aWNfYnJhbmNoX2Rpc2FibGUoXFx1MDAyNnVkcF90dW5uZWxfc3RhdGljX2NhbGwpO1xcbm5ldC9pcHY0L3VkcF9vZmZsb2FkLmM6MTM5OlxcdFxcdHN0YXRpY19jYWxsX3VwZGF0ZSh1ZHBfdHVubmVsX2dyb19yY3YsIGR1bW15X2dyb19yY3YpO1xcbm5ldC9pcHY0L3VkcF9vZmZsb2FkLmMtMTQwLVxcdH1cXG4tLVxcbm5ldC9pcHY0L3VkcF9vZmZsb2FkLmM9MTQ1PUVYUE9SVF9TWU1CT0xfR1BMKHVkcF90dW5uZWxfdXBkYXRlX2dyb19yY3YpO1xcbm5ldC9pcHY0L3VkcF9vZmZsb2FkLmMtMTQ2LVxcbm5ldC9pcHY0L3VkcF9vZmZsb2FkLmM6MTQ3OnN0YXRpYyBzdHJ1Y3Qgc2tfYnVmZiAqdWRwX3R1bm5lbF9ncm9fcmN2KHN0cnVjdCBzb2NrICpzayxcXG5uZXQvaXB2NC91ZHBfb2ZmbG9hZC5jLTE0OC1cXHRcXHRcXHRcXHRcXHQgIHN0cnVjdCBsaXN0X2hlYWQgKmhlYWQsXFxuLS1cXG5uZXQvaXB2NC91ZHBfb2ZmbG9hZC5jLTE1NS1cXG5uZXQvaXB2NC91ZHBfb2ZmbG9hZC5jOjE1NjpzdGF0aWMgc3RydWN0IHNrX2J1ZmYgKnVkcF90dW5uZWxfZ3JvX3JjdihzdHJ1Y3Qgc29jayAqc2ssXFxubmV0L2lwdjQvdWRwX29mZmxvYWQuYy0xNTctXFx0XFx0XFx0XFx0XFx0ICBzdHJ1Y3QgbGlzdF9oZWFkICpoZWFkLFxcbi0tXFxubmV0L2lwdjQvdWRwX29mZmxvYWQuYz03Njk9c3RydWN0IHNrX2J1ZmYgKnVkcF9ncm9fcmVjZWl2ZShzdHJ1Y3QgbGlzdF9oZWFkICpoZWFkLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbi0tXFxubmV0L2lwdjQvdWRwX29mZmxvYWQuYy04MzYtXFx0c2tiX2dyb19wb3N0cHVsbF9yY3N1bShza2IsIHVoLCBzaXplb2Yoc3RydWN0IHVkcGhkcikpO1xcbm5ldC9pcHY0L3VkcF9vZmZsb2FkLmM6ODM3OlxcdHBwID0gdWRwX3R1bm5lbF9ncm9fcmN2KHNrLCBoZWFkLCBza2IpO1xcbm5ldC9pcHY0L3VkcF9vZmZsb2FkLmMtODM4LVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wN1QwMjo1ODoxNC4xMjYyMzIxMzNaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyNjQ1MzYyOTA4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgYSBzdW1tYXJ5IG9mIG15IHRob3VnaHQgcHJvY2VzcywgYXMgcmVxdWVzdGVkOlxuXG4qKkludmVzdGlnYXRpbmcgVURQIE9mZmxvYWQgRnVuY3Rpb25hbGl0eSoqXG5cbk9rYXksIHNvIEkgbmVlZCB0byBkaXZlIGludG8gdGhlIFVEUCBvZmZsb2FkIGNvZGUsIHNwZWNpZmljYWxseSB3aXRoaW4gdGhlIGBuZXQvaXB2NC91ZHBfb2ZmbG9hZC5jYCBmaWxlLiBNeSBpbml0aWFsIGZvY3VzIGlzIGdvaW5nIHRvIGJlIG9uIGxpbmVzIDEgdGhyb3VnaCA1MC4gVGhhdCBzaG91bGQgZ2l2ZSBtZSBhIGdvb2Qgb3ZlcnZpZXcgb2YgdGhlIGluaXRpYWwgc2V0dXAsIGluaXRpYWxpemF0aW9uLCBvciBhbnkgZWFybHkgZGVjbGFyYXRpb25zIGFuZCBzdHJ1Y3R1cmVzIHJlbGV2YW50IHRvIFVEUCBvZmZsb2FkLiBJJ20gaG9waW5nIHRvIGdldCBhIGhhbmRsZSBvbiB0aGUgY29yZSBtZWNoYW5pc21zIGZyb20gdGhlIHN0YXJ0LlxuXG5JIGFsc28gd2FudCB0byBjaGVjayBhcm91bmQgbGluZSA4MzcuIEJhc2VkIG9uIG15IGV4cGVyaWVuY2UsIHRoYXQgbG9jYXRpb24gbGlrZWx5IGhhbmRsZXMgYSBzcGVjaWZpYyBmdW5jdGlvbiBjYWxsIG9yIGRhdGEgc3RydWN0dXJlIG1hbmlwdWxhdGlvbiAtIG1heWJlIHJlbGF0ZWQgdG8gY2hlY2tzdW1taW5nLCBmcmFnbWVudGF0aW9uLCBvciBwYWNrZXQgdHJhbnNtaXNzaW9uLiBJJ20gbm90IHN1cmUsIGJ1dCB0aGlzIGxpbmUgbnVtYmVyIGp1c3QgZmVlbHMgbGlrZSBhIHBsYWNlIHdoZXJlIHRoaXMgZnVuY3Rpb24gd291bGQgYmUgZGVmaW5lZC4gSXQncyBhIGtleSBmdW5jdGlvbiBmb3Igb2ZmbG9hZCBmdW5jdGlvbmFsaXR5LiBJJ20ga2VlcGluZyBhbiBvcGVuIG1pbmQgZm9yIG5vdywgYnV0IHRoYXQgaXMgbXkgY3VycmVudCBoeXBvdGhlc2lzLCBhbmQgSSdsbCBzZWUgd2hlcmUgbXkgYW5hbHlzaXMgbGVhZHMgbWUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjY5MTIsIk91dHB1dFRva2VucyI6MzcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozNCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wN1QwMjo1ODoxNi43NzE1OTg3ODJaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjQ4MTQ5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9pcHY0L3VkcF9vZmZsb2FkLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMSxcbiAgXCJMaW5lQ291bnRcIjogNTBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiICAgMTpcXHQvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vci1sYXRlclxcbiAgIDI6XFx0LypcXG4gICAzOlxcdCAqXFx0SVBWNCBHU08vR1JPIG9mZmxvYWQgc3VwcG9ydFxcbiAgIDQ6XFx0ICpcXHRMaW51eCBJTkVUIGltcGxlbWVudGF0aW9uXFxuICAgNTpcXHQgKlxcbiAgIDY6XFx0ICpcXHRVRFB2NCBHU08gc3VwcG9ydFxcbiAgIDc6XFx0ICovXFxuICAgODpcXHRcXG4gICA5OlxcdCNpbmNsdWRlIFxcdTAwM2NsaW51eC9za2J1ZmYuaFxcdTAwM2VcXG4gIDEwOlxcdCNpbmNsdWRlIFxcdTAwM2NuZXQvZ3JvLmhcXHUwMDNlXFxuICAxMTpcXHQjaW5jbHVkZSBcXHUwMDNjbmV0L2dzby5oXFx1MDAzZVxcbiAgMTI6XFx0I2luY2x1ZGUgXFx1MDAzY25ldC91ZHAuaFxcdTAwM2VcXG4gIDEzOlxcdCNpbmNsdWRlIFxcdTAwM2NuZXQvcHJvdG9jb2wuaFxcdTAwM2VcXG4gIDE0OlxcdCNpbmNsdWRlIFxcdTAwM2NuZXQvaW5ldF9jb21tb24uaFxcdTAwM2VcXG4gIDE1OlxcdCNpbmNsdWRlIFxcdTAwM2NuZXQvdWRwX3R1bm5lbC5oXFx1MDAzZVxcbiAgMTY6XFx0XFxuICAxNzpcXHQjaWYgSVNfRU5BQkxFRChDT05GSUdfTkVUX1VEUF9UVU5ORUwpXFxuICAxODpcXHRcXG4gIDE5OlxcdC8qXFxuICAyMDpcXHQgKiBEdW1teSBHUk8gdHVubmVsIGNhbGxiYWNrLCBleGlzdHMgbWFpbmx5IHRvIGF2b2lkIGRhbmdsaW5nL05VTExcXG4gIDIxOlxcdCAqIHZhbHVlcyBmb3IgdGhlIHVkcCB0dW5uZWwgc3RhdGljIGNhbGwuXFxuICAyMjpcXHQgKi9cXG4gIDIzOlxcdHN0YXRpYyBzdHJ1Y3Qgc2tfYnVmZiAqZHVtbXlfZ3JvX3JjdihzdHJ1Y3Qgc29jayAqc2ssXFxuICAyNDpcXHRcXHRcXHRcXHRcXHQgICAgIHN0cnVjdCBsaXN0X2hlYWQgKmhlYWQsXFxuICAyNTpcXHRcXHRcXHRcXHRcXHQgICAgIHN0cnVjdCBza19idWZmICpza2IpXFxuICAyNjpcXHR7XFxuICAyNzpcXHRcXHROQVBJX0dST19DQihza2IpLVxcdTAwM2VmbHVzaCA9IDE7XFxuICAyODpcXHRcXHRyZXR1cm4gTlVMTDtcXG4gIDI5OlxcdH1cXG4gIDMwOlxcdFxcbiAgMzE6XFx0dHlwZWRlZiBzdHJ1Y3Qgc2tfYnVmZiAqKCp1ZHBfdHVubmVsX2dyb19yY3ZfdCkoc3RydWN0IHNvY2sgKnNrLFxcbiAgMzI6XFx0XFx0XFx0XFx0XFx0XFx0XFx0c3RydWN0IGxpc3RfaGVhZCAqaGVhZCxcXG4gIDMzOlxcdFxcdFxcdFxcdFxcdFxcdFxcdHN0cnVjdCBza19idWZmICpza2IpO1xcbiAgMzQ6XFx0XFxuICAzNTpcXHRzdHJ1Y3QgdWRwX3R1bm5lbF90eXBlX2VudHJ5IHtcXG4gIDM2OlxcdFxcdHVkcF90dW5uZWxfZ3JvX3Jjdl90IGdyb19yZWNlaXZlO1xcbiAgMzc6XFx0XFx0cmVmY291bnRfdCBjb3VudDtcXG4gIDM4OlxcdH07XFxuICAzOTpcXHRcXG4gIDQwOlxcdCNkZWZpbmUgVURQX01BWF9UVU5ORUxfVFlQRVMgKElTX0VOQUJMRUQoQ09ORklHX0dFTkVWRSkgKyBcXFxcXFxuICA0MTpcXHRcXHRcXHRcXHQgICAgICBJU19FTkFCTEVEKENPTkZJR19WWExBTikgKiAyICsgXFxcXFxcbiAgNDI6XFx0XFx0XFx0XFx0ICAgICAgSVNfRU5BQkxFRChDT05GSUdfTkVUX0ZPVSkgKiAyICsgXFxcXFxcbiAgNDM6XFx0XFx0XFx0XFx0ICAgICAgSVNfRU5BQkxFRChDT05GSUdfWEZSTSkgKiAyKVxcbiAgNDQ6XFx0XFxuICA0NTpcXHRERUZJTkVfU1RBVElDX0NBTEwodWRwX3R1bm5lbF9ncm9fcmN2LCBkdW1teV9ncm9fcmN2KTtcXG4gIDQ2OlxcdHN0YXRpYyBERUZJTkVfU1RBVElDX0tFWV9GQUxTRSh1ZHBfdHVubmVsX3N0YXRpY19jYWxsKTtcXG4gIDQ3OlxcdHN0YXRpYyBERUZJTkVfTVVURVgodWRwX3R1bm5lbF9ncm9fdHlwZV9sb2NrKTtcXG4gIDQ4OlxcdHN0YXRpYyBzdHJ1Y3QgdWRwX3R1bm5lbF90eXBlX2VudHJ5IHVkcF90dW5uZWxfZ3JvX3R5cGVzW1VEUF9NQVhfVFVOTkVMX1RZUEVTXTtcXG4gIDQ5OlxcdHN0YXRpYyB1bnNpZ25lZCBpbnQgdWRwX3R1bm5lbF9ncm9fdHlwZV9ucjtcXG4gIDUwOlxcdHN0YXRpYyBERUZJTkVfU1BJTkxPQ0sodWRwX3R1bm5lbF9ncm9fbG9jayk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDAyOjU4OjE2Ljc3MTg1MTUzMVoiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyOTEyNzQ3ODYzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgUmVjZW50IENoYW5nZSB0byBgdWRwX3R1bm5lbF9ncm9fcmN2YCoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gSSdtIGxvb2tpbmcgYXQgYSBkaWZmIHdoZXJlIHRoZSBgdWRwX3R1bm5lbF9ncm9fcmN2YCBmdW5jdGlvbiBpbiB0aGUga2VybmVsJ3MgVURQIHR1bm5lbGluZyBjb2RlIGhhcyBiZWVuIG1vZGlmaWVkLiBNeSBpbml0aWFsIG9ic2VydmF0aW9uIGlzIHRoYXQgYSBjb25kaXRpb25hbCBibG9jayB3YXMgcmVtb3ZlZCwgc3BlY2lmaWNhbGx5IHRoZSBgaWYgKHN0YXRpY19icmFuY2hfbGlrZWx5KFx1MDAyNnVkcF90dW5uZWxfc3RhdGljX2NhbGwpKWAgc2VjdGlvbi4gVGhpcyBpcyBpbnRlcmVzdGluZy4gUHJldmlvdXNseSwgaXQgc2VlbXMgdGhpcyBmdW5jdGlvbiBlbXBsb3llZCBhIHN0YXRpYyBjYWxsIG9yIGEgZGlyZWN0IGZ1bmN0aW9uIHBvaW50ZXIganVtcCwgbGlrZWx5IGZvciBwZXJmb3JtYW5jZSByZWFzb25zLCBvcHRpbWl6aW5nIGZvciBhIGNvbW1vbiBwYXRoLiBOb3csIHRoZSBjb2RlIGRpcmVjdGx5IGNhbGxzIGBjYWxsX2dyb19yZWNlaXZlX3NrYC5cblxuTXkgbmV4dCBxdWVzdGlvbiBpcyB3aHk/IFdhcyB0aGlzIG9wdGltaXphdGlvbiBkZWVtZWQgdW5uZWNlc3NhcnksIGJ1Z2d5LCBvciBpbXByb3ZlZCBieSBzb21lIG90aGVyIGNoYW5nZT8gV2hhdCBoYXBwZW5lZCB0byB0aGUgc3RhdGljIGNhbGwgb3B0aW1pemF0aW9uIGluIHRoaXMgcGFydCBvZiB0aGUga2VybmVsPyBcblxuSSBhbHNvIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0IGBjYWxsX2dyb19yZWNlaXZlX3NrYCBpcyBkb2luZyBiZWNhdXNlIGl0IHNlZW1zIHRvIGJlIHRoZSBjb3JlIHdvcmsuIEl0IG1pZ2h0IGJlIGdvb2QgZm9yIG1lIHRvIGRpZyBpbnRvIGhvdyB0aGlzIGZ1bmN0aW9uIGlzIGltcGxlbWVudGVkIGJlY2F1c2UgaXQgY291bGQgaW1wYWN0IHBlcmZvcm1hbmNlIGluIGludGVyZXN0aW5nIHdheXMuIFRoZSBjaGFuZ2UgdG8ganVzdCBjYWxsIGBjYWxsX2dyb19yZWNlaXZlX3NrYCBkaXJlY3RseSBpcyBzaW1wbGUsIGJ1dCB0aGUgcmVhc29uICp3aHkqIHRoaXMgY2hhbmdlIGhhcHBlbmVkIGlzIGNydWNpYWwsIHNvIGxldCdzIHN0YXJ0IGRpZ2dpbmcuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjc5NjMsIk91dHB1dFRva2VucyI6MjEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMzYsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wN1QwMjo1ODoxOS42ODQ2MDM0MzZaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI5NDc1ODA3MjMsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY2FsbF9ncm9fcmVjZWl2ZV9za1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJpbmNsdWRlL25ldC9ncm8uaD0xMjE9dHlwZWRlZiBzdHJ1Y3Qgc2tfYnVmZiAqKCpncm9fcmVjZWl2ZV9za190KShzdHJ1Y3Qgc29jayAqLCBzdHJ1Y3QgbGlzdF9oZWFkICosXFxuaW5jbHVkZS9uZXQvZ3JvLmgtMTIyLVxcdFxcdFxcdFxcdFxcdCAgICBzdHJ1Y3Qgc2tfYnVmZiAqKTtcXG5pbmNsdWRlL25ldC9ncm8uaDoxMjM6c3RhdGljIGlubGluZSBzdHJ1Y3Qgc2tfYnVmZiAqY2FsbF9ncm9fcmVjZWl2ZV9zayhncm9fcmVjZWl2ZV9za190IGNiLFxcbmluY2x1ZGUvbmV0L2dyby5oLTEyNC1cXHRcXHRcXHRcXHRcXHRcXHQgIHN0cnVjdCBzb2NrICpzayxcXG4tLVxcbm5ldC9pcHY0L3VkcF9vZmZsb2FkLmM9MTQ3PXN0YXRpYyBzdHJ1Y3Qgc2tfYnVmZiAqdWRwX3R1bm5lbF9ncm9fcmN2KHN0cnVjdCBzb2NrICpzayxcXG4tLVxcbm5ldC9pcHY0L3VkcF9vZmZsb2FkLmMtMTUwLXtcXG5uZXQvaXB2NC91ZHBfb2ZmbG9hZC5jOjE1MTpcXHRyZXR1cm4gY2FsbF9ncm9fcmVjZWl2ZV9zayh1ZHBfc2soc2spLVxcdTAwM2Vncm9fcmVjZWl2ZSwgc2ssIGhlYWQsIHNrYik7XFxubmV0L2lwdjQvdWRwX29mZmxvYWQuYy0xNTItfVxcbi0tXFxubmV0L2lwdjQvdWRwX29mZmxvYWQuYz0xNTY9c3RhdGljIHN0cnVjdCBza19idWZmICp1ZHBfdHVubmVsX2dyb19yY3Yoc3RydWN0IHNvY2sgKnNrLFxcbi0tXFxubmV0L2lwdjQvdWRwX29mZmxvYWQuYy0xNTkte1xcbm5ldC9pcHY0L3VkcF9vZmZsb2FkLmM6MTYwOlxcdHJldHVybiBjYWxsX2dyb19yZWNlaXZlX3NrKHVkcF9zayhzayktXFx1MDAzZWdyb19yZWNlaXZlLCBzaywgaGVhZCwgc2tiKTtcXG5uZXQvaXB2NC91ZHBfb2ZmbG9hZC5jLTE2MS19XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDAyOjU4OjIyLjYzMjE5MTgxOVoiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoxODc2MzI3MzYwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgc3VtbWFyeSwgYXMgdGhvdWdoIEknbSB0aGlua2luZyB0aHJvdWdoIGl0OlxuXG4qKkRpdmluZyBpbnRvIHRoZSBHUk8gQ29kZSoqXG5cbk9rYXksIHNvIEkgbmVlZCB0byByZWZyZXNoIG15IG1lbW9yeSBvbiB0aGUgR1JPIGNvZGUsIGFuZCBJJ20gc3RhcnRpbmcgd2l0aCBgaW5jbHVkZS9uZXQvZ3JvLmhgLCBzcGVjaWZpY2FsbHkgbGluZSAxMjMuIExldCdzIHNlZSB3aGF0J3MgYmVpbmcgZGVmaW5lZCBvciBkZWNsYXJlZCB0aGVyZS4gSSdtIGV4cGVjdGluZyBzb21ldGhpbmcgY29yZSwgbGlrZWx5IGEgc3RydWN0LCBtYWNybywgb3IgZnVuY3Rpb24gcHJvdG90eXBlIHJlbGF0ZWQgdG8gR2VuZXJpYyBSZWNlaXZlIE9mZmxvYWQuIEdpdmVuIHRoZSBmaWxlLCBpdCdzIHByb2JhYmx5IGEgZGF0YSBzdHJ1Y3R1cmUgdXNlZCB0byBtYW5hZ2UgdGhlIEdSTyBjb250ZXh0LCBvciBtYXliZSBhIGZsYWcgdGhhdCBjb250cm9scyBzb21lIEdSTyBiZWhhdmlvci4gSSdtIGV4cGVjdGluZyBpdCB0byBwcm92aWRlIHNvbWUgZXNzZW50aWFsIGRldGFpbHMgcmVxdWlyZWQgdG8gb2ZmbG9hZCB0aGUgcHJvY2VzcyBvZiBtZXJnaW5nIG5ldHdvcmsgcGFja2V0cywgb3IgaXQgbWF5IGNvbnRhaW4gYSBkZWZpbml0aW9uIGZvciBhIGdsb2JhbCB2YXJpYWJsZSB0aGF0IGNvbmZpZ3VyZXMgYSBiZWhhdmlvciBvZiBHUk8uIEknbSBhbHNvIHJlYWR5IHRvIGFuYWx5emUgaXQgaW4gZGVwdGgsIGluY2x1ZGluZyBkZWJ1Z2dpbmcgb3IgbWFraW5nIGNoYW5nZXMgdG8gdGhlIGNvZGUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjg5NDYsIk91dHB1dFRva2VucyI6MzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxOSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wN1QwMjo1ODoyNC41MDg1MjQ5ODlaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTM1NDcxLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImluY2x1ZGUvbmV0L2dyby5oXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEyMCxcbiAgXCJMaW5lQ291bnRcIjogMjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDEyMDpcXHRcXG4gMTIxOlxcdHR5cGVkZWYgc3RydWN0IHNrX2J1ZmYgKigqZ3JvX3JlY2VpdmVfc2tfdCkoc3RydWN0IHNvY2sgKiwgc3RydWN0IGxpc3RfaGVhZCAqLFxcbiAxMjI6XFx0XFx0XFx0XFx0XFx0XFx0ICAgIHN0cnVjdCBza19idWZmICopO1xcbiAxMjM6XFx0c3RhdGljIGlubGluZSBzdHJ1Y3Qgc2tfYnVmZiAqY2FsbF9ncm9fcmVjZWl2ZV9zayhncm9fcmVjZWl2ZV9za190IGNiLFxcbiAxMjQ6XFx0XFx0XFx0XFx0XFx0XFx0XFx0ICBzdHJ1Y3Qgc29jayAqc2ssXFxuIDEyNTpcXHRcXHRcXHRcXHRcXHRcXHRcXHQgIHN0cnVjdCBsaXN0X2hlYWQgKmhlYWQsXFxuIDEyNjpcXHRcXHRcXHRcXHRcXHRcXHRcXHQgIHN0cnVjdCBza19idWZmICpza2IpXFxuIDEyNzpcXHR7XFxuIDEyODpcXHRcXHRpZiAodW5saWtlbHkoZ3JvX3JlY3Vyc2lvbl9pbmNfdGVzdChza2IpKSkge1xcbiAxMjk6XFx0XFx0XFx0TkFQSV9HUk9fQ0Ioc2tiKS1cXHUwMDNlZmx1c2ggfD0gMTtcXG4gMTMwOlxcdFxcdFxcdHJldHVybiBOVUxMO1xcbiAxMzE6XFx0XFx0fVxcbiAxMzI6XFx0XFxuIDEzMzpcXHRcXHRyZXR1cm4gY2Ioc2ssIGhlYWQsIHNrYik7XFxuIDEzNDpcXHR9XFxuIDEzNTpcXHRcXG4gMTM2OlxcdHN0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IHNrYl9ncm9fb2Zmc2V0KGNvbnN0IHN0cnVjdCBza19idWZmICpza2IpXFxuIDEzNzpcXHR7XFxuIDEzODpcXHRcXHRyZXR1cm4gTkFQSV9HUk9fQ0Ioc2tiKS1cXHUwMDNlZGF0YV9vZmZzZXQ7XFxuIDEzOTpcXHR9XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDAyOjU4OjI0LjUwODY2MzJaIiwiU2VxIjoxNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MTg3NzE5NzI0MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRob3VnaHQgcHJvY2VzcywgYXMgaWYgSSB3ZXJlIGFuYWx5emluZyB0aGlzIGNvZGU6XG5cbioqRGVlcCBEaXZlIGludG8gVURQIEdSTyoqXG5cbk9rYXksIHNvIEkgbmVlZCB0byB0cmFjZSB0aGUgcGF0aCBvZiBgdWRwX3R1bm5lbF9ncm9fcmN2YCBhbmQgZmlndXJlIG91dCBleGFjdGx5IGhvdyBhbmQgd2hlcmUgR2VuZXJpYyBSZWNlaXZlIE9mZmxvYWQgKEdSTykgaXMgYmVpbmcgYXBwbGllZCBpbiB0aGlzIFVEUCB0dW5uZWwgc2NlbmFyaW8uIExldCdzIHN0YXJ0IHdpdGggYSBzb2xpZCBhcHByb2FjaC4gTXkgZmlyc3Qgc3RlcCBpcyB0byBkaWcgaW50byBgdWRwX2dyb19yZWNlaXZlYCBpbiBgbmV0L2lwdjQvdWRwX29mZmxvYWQuY2AuIFRoYXQgZnVuY3Rpb24gaXMgY3J1Y2lhbC4gS25vd2luZyB0aGF0IGZ1bmN0aW9uLCB0aGUgY2FsbCBzdGFjayB3aWxsIGJlY29tZSBvYnZpb3VzLiBUaGF0IGlzIG15IHVuZGVyc3RhbmRpbmcuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjk0OTksIk91dHB1dFRva2VucyI6MzksIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1MCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDAyOjU4OjI2LjM4NTg2MzExWiIsIlNlcSI6MTYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEwMjczMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvaXB2NC91ZHBfb2ZmbG9hZC5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDc2NSxcbiAgXCJMaW5lQ291bnRcIjogODBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDc2NTpcXHRcXHQvKiBtaXNtYXRjaCwgYnV0IHdlIG5ldmVyIG5lZWQgdG8gZmx1c2ggKi9cXG4gNzY2OlxcdFxcdHJldHVybiBOVUxMO1xcbiA3Njc6XFx0fVxcbiA3Njg6XFx0XFxuIDc2OTpcXHRzdHJ1Y3Qgc2tfYnVmZiAqdWRwX2dyb19yZWNlaXZlKHN0cnVjdCBsaXN0X2hlYWQgKmhlYWQsIHN0cnVjdCBza19idWZmICpza2IsXFxuIDc3MDpcXHRcXHRcXHRcXHRcXHRzdHJ1Y3QgdWRwaGRyICp1aCwgc3RydWN0IHNvY2sgKnNrKVxcbiA3NzE6XFx0e1xcbiA3NzI6XFx0XFx0c3RydWN0IHNrX2J1ZmYgKnBwID0gTlVMTDtcXG4gNzczOlxcdFxcdHN0cnVjdCBza19idWZmICpwO1xcbiA3NzQ6XFx0XFx0c3RydWN0IHVkcGhkciAqdWgyO1xcbiA3NzU6XFx0XFx0dW5zaWduZWQgaW50IG9mZiA9IHNrYl9ncm9fb2Zmc2V0KHNrYik7XFxuIDc3NjpcXHRcXHR1bnNpZ25lZCBpbnQgdWxlbjtcXG4gNzc3OlxcdFxcdGludCBmbHVzaCA9IDE7XFxuIDc3ODpcXHRcXG4gNzc5OlxcdFxcdC8qIERvIG5vdCBkZWFsIHdpdGggcGFkZGVkIG9yIG1hbGljaW91cyBwYWNrZXRzLCBzb3JyeSEgKi9cXG4gNzgwOlxcdFxcdHVsZW4gPSB1ZHBfZ2V0X2xlbl9zaG9ydCh1aCk7XFxuIDc4MTpcXHRcXHRpZiAodWxlbiBcXHUwMDNjPSBzaXplb2YoKnVoKSB8fCB1bGVuICE9IHNrYl9ncm9fbGVuKHNrYikpXFxuIDc4MjpcXHRcXHRcXHRnb3RvIG91dDtcXG4gNzgzOlxcdFxcbiA3ODQ6XFx0XFx0LyogV2UgY2FuIGRvIEw0IGFnZ3JlZ2F0aW9uIG9ubHkgaWYgdGhlIHBhY2tldCBjYW4ndCBsYW5kIGluIGEgdHVubmVsXFxuIDc4NTpcXHRcXHQgKiBvdGhlcndpc2Ugd2UgY291bGQgY29ycnVwdCB0aGUgaW5uZXIgc3RyZWFtLiBEZXRlY3Rpbmcgc3VjaCBwYWNrZXRzXFxuIDc4NjpcXHRcXHQgKiBjYW5ub3QgYmUgZm9vbHByb29mIGFuZCB0aGUgYWdncmVnYXRpb24gbWlnaHQgc3RpbGwgaGFwcGVuIGluIHNvbWVcXG4gNzg3OlxcdFxcdCAqIGNhc2VzLiBTdWNoIHBhY2tldHMgc2hvdWxkIGJlIGNhdWdodCBpbiB1ZHBfdW5leHBlY3RlZF9nc28gbGF0ZXIuXFxuIDc4ODpcXHRcXHQgKi9cXG4gNzg5OlxcdFxcdE5BUElfR1JPX0NCKHNrYiktXFx1MDAzZWlzX2ZsaXN0ID0gMDtcXG4gNzkwOlxcdFxcdGlmICghc2sgfHwgIXVkcF9zayhzayktXFx1MDAzZWdyb19yZWNlaXZlKSB7XFxuIDc5MTpcXHRcXHRcXHQvKiBJZiB0aGUgcGFja2V0IHdhcyBsb2NhbGx5IGVuY2Fwc3VsYXRlZCBpbiBhIFVEUCB0dW5uZWwgdGhhdFxcbiA3OTI6XFx0XFx0XFx0ICogd2Fzbid0IGRldGVjdGVkIGFib3ZlLCBkbyBub3QgR1JPLlxcbiA3OTM6XFx0XFx0XFx0ICovXFxuIDc5NDpcXHRcXHRcXHRpZiAoc2tiLVxcdTAwM2VlbmNhcHN1bGF0aW9uKVxcbiA3OTU6XFx0XFx0XFx0XFx0Z290byBvdXQ7XFxuIDc5NjpcXHRcXG4gNzk3OlxcdFxcdFxcdGlmIChza2ItXFx1MDAzZWRldi1cXHUwMDNlZmVhdHVyZXMgXFx1MDAyNiBORVRJRl9GX0dST19GUkFHTElTVClcXG4gNzk4OlxcdFxcdFxcdFxcdE5BUElfR1JPX0NCKHNrYiktXFx1MDAzZWlzX2ZsaXN0ID0gc2sgPyAhdWRwX3Rlc3RfYml0KEdST19FTkFCTEVELCBzaykgOiAxO1xcbiA3OTk6XFx0XFxuIDgwMDpcXHRcXHRcXHRpZiAoKCFzayBcXHUwMDI2XFx1MDAyNiAoc2tiLVxcdTAwM2VkZXYtXFx1MDAzZWZlYXR1cmVzIFxcdTAwMjYgTkVUSUZfRl9HUk9fVURQX0ZXRCkpIHx8XFxuIDgwMTpcXHRcXHRcXHQgICAgKHNrIFxcdTAwMjZcXHUwMDI2IHVkcF90ZXN0X2JpdChHUk9fRU5BQkxFRCwgc2spKSB8fCBOQVBJX0dST19DQihza2IpLVxcdTAwM2Vpc19mbGlzdClcXG4gODAyOlxcdFxcdFxcdFxcdHJldHVybiBjYWxsX2dyb19yZWNlaXZlKHVkcF9ncm9fcmVjZWl2ZV9zZWdtZW50LCBoZWFkLCBza2IpO1xcbiA4MDM6XFx0XFxuIDgwNDpcXHRcXHRcXHQvKiBubyBHUk8sIGJlIHN1cmUgZmx1c2ggdGhlIGN1cnJlbnQgcGFja2V0ICovXFxuIDgwNTpcXHRcXHRcXHRnb3RvIG91dDtcXG4gODA2OlxcdFxcdH1cXG4gODA3OlxcdFxcbiA4MDg6XFx0XFx0aWYgKE5BUElfR1JPX0NCKHNrYiktXFx1MDAzZWVuY2FwX21hcmsgfHxcXG4gODA5OlxcdFxcdCAgICAodWgtXFx1MDAzZWNoZWNrIFxcdTAwMjZcXHUwMDI2IHNrYi1cXHUwMDNlaXBfc3VtbWVkICE9IENIRUNLU1VNX1BBUlRJQUwgXFx1MDAyNlxcdTAwMjZcXG4gODEwOlxcdFxcdCAgICAgTkFQSV9HUk9fQ0Ioc2tiKS1cXHUwMDNlY3N1bV9jbnQgPT0gMCBcXHUwMDI2XFx1MDAyNlxcbiA4MTE6XFx0XFx0ICAgICAhTkFQSV9HUk9fQ0Ioc2tiKS1cXHUwMDNlY3N1bV92YWxpZCkpXFxuIDgxMjpcXHRcXHRcXHRnb3RvIG91dDtcXG4gODEzOlxcdFxcbiA4MTQ6XFx0XFx0LyogbWFyayB0aGF0IHRoaXMgc2tiIHBhc3NlZCBvbmNlIHRocm91Z2ggdGhlIHR1bm5lbCBncm8gbGF5ZXIgKi9cXG4gODE1OlxcdFxcdE5BUElfR1JPX0NCKHNrYiktXFx1MDAzZWVuY2FwX21hcmsgPSAxO1xcbiA4MTY6XFx0XFxuIDgxNzpcXHRcXHRmbHVzaCA9IDA7XFxuIDgxODpcXHRcXG4gODE5OlxcdFxcdGxpc3RfZm9yX2VhY2hfZW50cnkocCwgaGVhZCwgbGlzdCkge1xcbiA4MjA6XFx0XFx0XFx0aWYgKCFOQVBJX0dST19DQihwKS1cXHUwMDNlc2FtZV9mbG93KVxcbiA4MjE6XFx0XFx0XFx0XFx0Y29udGludWU7XFxuIDgyMjpcXHRcXG4gODIzOlxcdFxcdFxcdHVoMiA9IChzdHJ1Y3QgdWRwaGRyICAgKikocC1cXHUwMDNlZGF0YSArIG9mZik7XFxuIDgyNDpcXHRcXG4gODI1OlxcdFxcdFxcdC8qIE1hdGNoIHBvcnRzIGFuZCBlaXRoZXIgY2hlY2tzdW1zIGFyZSBlaXRoZXIgYm90aCB6ZXJvXFxuIDgyNjpcXHRcXHRcXHQgKiBvciBub256ZXJvLlxcbiA4Mjc6XFx0XFx0XFx0ICovXFxuIDgyODpcXHRcXHRcXHRpZiAoKCoodTMyICopXFx1MDAyNnVoLVxcdTAwM2Vzb3VyY2UgIT0gKih1MzIgKilcXHUwMDI2dWgyLVxcdTAwM2Vzb3VyY2UpIHx8XFxuIDgyOTpcXHRcXHRcXHQgICAgKCF1aC1cXHUwMDNlY2hlY2sgXiAhdWgyLVxcdTAwM2VjaGVjaykpIHtcXG4gODMwOlxcdFxcdFxcdFxcdE5BUElfR1JPX0NCKHApLVxcdTAwM2VzYW1lX2Zsb3cgPSAwO1xcbiA4MzE6XFx0XFx0XFx0XFx0Y29udGludWU7XFxuIDgzMjpcXHRcXHRcXHR9XFxuIDgzMzpcXHRcXHR9XFxuIDgzNDpcXHRcXG4gODM1OlxcdFxcdHNrYl9ncm9fcHVsbChza2IsIHNpemVvZihzdHJ1Y3QgdWRwaGRyKSk7IC8qIHB1bGwgZW5jYXBzdWxhdGluZyB1ZHAgaGVhZGVyICovXFxuIDgzNjpcXHRcXHRza2JfZ3JvX3Bvc3RwdWxsX3Jjc3VtKHNrYiwgdWgsIHNpemVvZihzdHJ1Y3QgdWRwaGRyKSk7XFxuIDgzNzpcXHRcXHRwcCA9IHVkcF90dW5uZWxfZ3JvX3JjdihzaywgaGVhZCwgc2tiKTtcXG4gODM4OlxcdFxcbiA4Mzk6XFx0b3V0OlxcbiA4NDA6XFx0XFx0c2tiX2dyb19mbHVzaF9maW5hbChza2IsIHBwLCBmbHVzaCk7XFxuIDg0MTpcXHRcXHRyZXR1cm4gcHA7XFxuIDg0MjpcXHR9XFxuIDg0MzpcXHRcXG4gODQ0OlxcdHN0YXRpYyBzdHJ1Y3Qgc29jayAqdWRwNF9ncm9fbG9va3VwX3NrYihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBfX2JlMTYgc3BvcnQsXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDAyOjU4OjI2LjM4NTk2NzUyWiIsIlNlcSI6MTcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjU4MTM2MTUwMzgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHlzaXMgb2YgVURQIEdSTyBQcm9jZXNzaW5nIE1vZGlmaWNhdGlvbioqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIHRyYWNlIHRoZSBleGVjdXRpb24gcGF0aC4gYHVkcF9ncm9fcmVjZWl2ZWAgY2FsbHMgYHVkcF90dW5uZWxfZ3JvX3JjdmAsIGFuZCB3ZSdyZSBsb29raW5nIGF0IFVEUCBwYWNrZXRzIGR1cmluZyBHUk8gKEdlbmVyaWMgUmVjZWl2ZSBPZmZsb2FkKSBwcm9jZXNzaW5nLiBUaGlzIGlzIGNsZWFybHkgd2l0aGluIHRoZSBjb3JlIG5ldHdvcmtpbmcgc3RhY2ssIHNwZWNpZmljYWxseSBgbmV0L2lwdjQvdWRwX29mZmxvYWQuY2AuIFRoZSBmYWN0IHRoYXQgU3l6a2FsbGVyIHJlZ3VsYXJseSBleGVyY2lzZXMgVURQLCBzZXRzIHVwIHR1bm5lbHMgKFZYTEFOLCBHRU5FVkUsIGV0Yy4pLCBhbmQgdXNlcyBsb29wYmFjaywgdHVuL3RhcCwgdmV0aCwgbWVhbnMgdGhpcyBhcmVhIGlzIGRlZmluaXRlbHkgcmVhY2hhYmxlLCBhbmQgcG90ZW50aWFsbHkgdnVsbmVyYWJsZS5cblxuVGhlIGtleSBjaGFuZ2UgaXMgdGhlIHJlbW92YWwgb2YgdGhlIGBzdGF0aWNfYnJhbmNoX2xpa2VseWAgY2hlY2sgYW5kIGBzdGF0aWNfY2FsbGAgaW4gYHVkcF90dW5uZWxfZ3JvX3JjdmAuIEl0IHNlZW1zIG5vdyB3ZSdyZSBqdXN0IGRpcmVjdGx5IGNhbGxpbmcgYGNhbGxfZ3JvX3JlY2VpdmVfc2tgLiBNeSBmaXJzdCBxdWVzdGlvbiBpcyAqd2h5Kj8gIElzIHRoaXMgYSBzdHJhaWdodC11cCBvcHRpbWl6YXRpb24sIGEgcmVmYWN0b3JpbmcsIG9yIGEgZml4PyBBIGxvb2sgYXQgdGhlIGdpdCBsb2cgb3IgY29tbWVudHMgc2hvdWxkIHRlbGwgdGhlIHRhbGUsIG9yIHRoZSBgdWRwX3R1bm5lbF91cGRhdGVfZ3JvX3JjdmAgZnVuY3Rpb24gbWlnaHQgcHJvdmlkZSBzb21lIGNvbnRleHQuXG5cbkFoLCBoZXJlJ3MgdGhlIHJlbGV2YW50IHNlY3Rpb24gZnJvbSBgdWRwX3R1bm5lbF91cGRhdGVfZ3JvX3JjdmAuIEl0IGxvb2tzIGxpa2UgdGhlIHN0YXRpYyBicmFuY2ggaXMgc3RpbGwgdXBkYXRlZCBiYXNlZCBvbiBgdWRwX3R1bm5lbF9ncm9fdHlwZV9ucmAsIGJ1dCBpdCdzIGFwcGFyZW50bHkgYmVpbmcgYnlwYXNzZWQgb3IgcmVtb3ZlZCBpbnNpZGUgYHVkcF90dW5uZWxfZ3JvX3JjdmAgaXRzZWxmLiBUaGF0J3MgYSBzaWduaWZpY2FudCBtb2RpZmljYXRpb24gdG8gdGhlIGNvcmUgbmV0d29ya2luZyBsb2dpYyBpbnZvbHZlZCBpbiBgdWRwX3R1bm5lbF9ncm9fcmN2YCBhbmQgY29uc2VxdWVudGx5IGB1ZHBfZ3JvX3JlY2VpdmVgLlxuXG5Ob3csIGxldCdzIGFzc2VzcyB0aGUgaW1wYWN0IGJhc2VkIG9uIG15IGtub3dsZWRnZS4gQ29uc2lkZXJpbmcgdGhlIGNyaXRlcmlhOlxuXG4qICAgKipDb3JlIFN1YnN5c3RlbXM6KiogWWVzLCBhbnkgbW9kaWZpY2F0aW9uIHRvIGxvZ2ljIGhlcmUgaW4gY29yZSBuZXR3b3JraW5nIGlzIHJlbGV2YW50LlxuKiAgICoqUmVmYWN0b3JpbmdzIGFuZCBDb2RlIENsZWFudXBzOioqIElmIHRoaXMgKmlzKiBhIHJlZmFjdG9yaW5nLCBpdCdzIHN0aWxsIHJlc3RydWN0dXJpbmcgcmVhY2hhYmxlIGRhdGEgc3RydWN0dXJlcyBvciBhbGdvcml0aG0gZmxvd3MsIG1ha2luZyBpdCBpbXBvcnRhbnQuXG4qICAgKipSZWFjaGFibGUgQ29kZToqKiBBYnNvbHV0ZWx5LiBVRFAgR1JPIGlzIGV4ZXJjaXNlZCBpbiBjb21tb24gdmlydHVhbCBlbnZpcm9ubWVudHMgdXNlZCBmb3IgdGVzdGluZyBhbmQgZnV6emluZy5cblxuR2l2ZW4gdGhhdCwgSSBjYW4gY29uZmlkZW50bHkgc2F5IHRoaXMgaXMgYFdvcnRoRnV6emluZ2AsIGFuZCB0aGUgcXVlc3Rpb24gaXMgd2hhdCBzeW1ib2xzIHdlIG5lZWQgdG8gZm9jdXMgb24uXG5cblJlbGV2YW50IHN5bWJvbHM/IFRoZSBwcmltYXJ5IGZ1bmN0aW9ucyBhcmUgb2J2aW91c2x5IGB1ZHBfdHVubmVsX2dyb19yY3ZgIGFuZCBgdWRwX2dyb19yZWNlaXZlYC4gQnV0IHRvIGJlIHRob3JvdWdoLCBJIHNob3VsZCBjaGVjayB0aGUgY2FsbGVycyBvZiBib3RoIG9mIHRob3NlIGZ1bmN0aW9ucyBhbmQgb3RoZXIgcmVsYXRlZCBmdW5jdGlvbnMuIExldCdzIGRvIGEgcXVpY2sgZ3JlcC4gVGhpcyBpcyBkZWZpbml0ZWx5IHNvbWV0aGluZyB0byBhZGQgdG8gdGhlIGZ1enppbmcgdGFyZ2V0cy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTEwNjAsIk91dHB1dFRva2VucyI6MTksIk91dHB1dFRob3VnaHRzVG9rZW5zIjo3NzMsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wN1QwMjo1ODozMi4xOTk1ODUyMjhaIiwiU2VxIjoxOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjMyMDgyNDkyNDksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwidWRwX2dyb19yZWNlaXZlXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImluY2x1ZGUvbGludXgvdWRwLmg9MjE0PXN0YXRpYyBpbmxpbmUgYm9vbCB1ZHBfdW5leHBlY3RlZF9nc28oc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbi0tXFxuaW5jbHVkZS9saW51eC91ZHAuaC0yMjctXFx0LyogR1NPIHBhY2tldHMgbGFja2luZyB0aGUgU0tCX0dTT19VRFBfVFVOTkVML19DU1VNIGJpdHMgbWlnaHQgc3RpbGxcXG5pbmNsdWRlL2xpbnV4L3VkcC5oOjIyODpcXHQgKiBsYW5kIGluIGEgdHVubmVsIGFzIHRoZSBzb2NrZXQgY2hlY2sgaW4gdWRwX2dyb19yZWNlaXZlIGNhbm5vdCBiZVxcbmluY2x1ZGUvbGludXgvdWRwLmgtMjI5LVxcdCAqIGZvb2xwcm9vZi5cXG4tLVxcbmluY2x1ZGUvbmV0L2dyby5oPTQwOT1pbnQgdWRwNl9ncm9fY29tcGxldGUoc3RydWN0IHNrX2J1ZmYgKiwgaW50KTtcXG4tLVxcbmluY2x1ZGUvbmV0L2dyby5oLTQxNy1cXG5pbmNsdWRlL25ldC9ncm8uaDo0MTg6c3RydWN0IHNrX2J1ZmYgKnVkcF9ncm9fcmVjZWl2ZShzdHJ1Y3QgbGlzdF9oZWFkICpoZWFkLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbmluY2x1ZGUvbmV0L2dyby5oLTQxOS1cXHRcXHRcXHRcXHRzdHJ1Y3QgdWRwaGRyICp1aCwgc3RydWN0IHNvY2sgKnNrKTtcXG4tLVxcbm5ldC9pcHY0L3VkcC5jPTI4NDQ9c3RhdGljIHZvaWQgdWRwX2Rlc3Ryb3lfc29jayhzdHJ1Y3Qgc29jayAqc2spXFxuLS1cXG5uZXQvaXB2NC91ZHAuYy0yODY2LVxcbm5ldC9pcHY0L3VkcC5jOjI4Njc6dHlwZWRlZiBzdHJ1Y3Qgc2tfYnVmZiAqKCp1ZHBfZ3JvX3JlY2VpdmVfdCkoc3RydWN0IHNvY2sgKnNrLFxcbm5ldC9pcHY0L3VkcC5jLTI4NjgtXFx0XFx0XFx0XFx0XFx0ICAgICBzdHJ1Y3QgbGlzdF9oZWFkICpoZWFkLFxcbi0tXFxubmV0L2lwdjQvdWRwLmM9Mjg3MT1zdGF0aWMgdm9pZCBzZXRfeGZybV9ncm9fdWRwX2VuY2FwX3JjdihfX3UxNiBlbmNhcF90eXBlLCB1bnNpZ25lZCBzaG9ydCBmYW1pbHksXFxuLS1cXG5uZXQvaXB2NC91ZHAuYy0yODc0LSNpZmRlZiBDT05GSUdfWEZSTVxcbm5ldC9pcHY0L3VkcC5jOjI4NzU6XFx0dWRwX2dyb19yZWNlaXZlX3QgbmV3X2dyb19yZWNlaXZlO1xcbm5ldC9pcHY0L3VkcC5jLTI4NzYtXFxuLS1cXG5uZXQvaXB2NC91ZHBfb2ZmbG9hZC5jPTYyNj1zdGF0aWMgc3RydWN0IHNrX2J1ZmYgKnVkcDRfdWZvX2ZyYWdtZW50KHN0cnVjdCBza19idWZmICpza2IsXFxuLS1cXG5uZXQvaXB2NC91ZHBfb2ZmbG9hZC5jLTY4Ny0jZGVmaW5lIFVEUF9HUk9fQ05UX01BWCA2NFxcbm5ldC9pcHY0L3VkcF9vZmZsb2FkLmM6Njg4OnN0YXRpYyBzdHJ1Y3Qgc2tfYnVmZiAqdWRwX2dyb19yZWNlaXZlX3NlZ21lbnQoc3RydWN0IGxpc3RfaGVhZCAqaGVhZCxcXG5uZXQvaXB2NC91ZHBfb2ZmbG9hZC5jLTY4OS1cXHRcXHRcXHRcXHRcXHQgICAgICAgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4tLVxcbm5ldC9pcHY0L3VkcF9vZmZsb2FkLmMtNzY4LVxcbm5ldC9pcHY0L3VkcF9vZmZsb2FkLmM6NzY5OnN0cnVjdCBza19idWZmICp1ZHBfZ3JvX3JlY2VpdmUoc3RydWN0IGxpc3RfaGVhZCAqaGVhZCwgc3RydWN0IHNrX2J1ZmYgKnNrYixcXG5uZXQvaXB2NC91ZHBfb2ZmbG9hZC5jLTc3MC1cXHRcXHRcXHRcXHRzdHJ1Y3QgdWRwaGRyICp1aCwgc3RydWN0IHNvY2sgKnNrKVxcbi0tXFxubmV0L2lwdjQvdWRwX29mZmxvYWQuYy04MDEtXFx0XFx0ICAgIChzayBcXHUwMDI2XFx1MDAyNiB1ZHBfdGVzdF9iaXQoR1JPX0VOQUJMRUQsIHNrKSkgfHwgTkFQSV9HUk9fQ0Ioc2tiKS1cXHUwMDNlaXNfZmxpc3QpXFxubmV0L2lwdjQvdWRwX29mZmxvYWQuYzo4MDI6XFx0XFx0XFx0cmV0dXJuIGNhbGxfZ3JvX3JlY2VpdmUodWRwX2dyb19yZWNlaXZlX3NlZ21lbnQsIGhlYWQsIHNrYik7XFxubmV0L2lwdjQvdWRwX29mZmxvYWQuYy04MDMtXFxuLS1cXG5uZXQvaXB2NC91ZHBfb2ZmbG9hZC5jPTg2Mz1zdHJ1Y3Qgc2tfYnVmZiAqdWRwNF9ncm9fcmVjZWl2ZShzdHJ1Y3QgbGlzdF9oZWFkICpoZWFkLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbi0tXFxubmV0L2lwdjQvdWRwX29mZmxvYWQuYy04ODUtXFxubmV0L2lwdjQvdWRwX29mZmxvYWQuYzo4ODY6XFx0cHAgPSB1ZHBfZ3JvX3JlY2VpdmUoaGVhZCwgc2tiLCB1aCwgc2spO1xcbm5ldC9pcHY0L3VkcF9vZmZsb2FkLmMtODg3LVxcdHJldHVybiBwcDtcXG4tLVxcbm5ldC9pcHY2L3VkcF9vZmZsb2FkLmM9MTM0PXN0cnVjdCBza19idWZmICp1ZHA2X2dyb19yZWNlaXZlKHN0cnVjdCBsaXN0X2hlYWQgKmhlYWQsIHN0cnVjdCBza19idWZmICpza2IpXFxuLS1cXG5uZXQvaXB2Ni91ZHBfb2ZmbG9hZC5jLTE1Ny1cXG5uZXQvaXB2Ni91ZHBfb2ZmbG9hZC5jOjE1ODpcXHRwcCA9IHVkcF9ncm9fcmVjZWl2ZShoZWFkLCBza2IsIHVoLCBzayk7XFxubmV0L2lwdjYvdWRwX29mZmxvYWQuYy0xNTktXFx0cmV0dXJuIHBwO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wN1QwMjo1ODozNS40MDc4NDI1NjhaIiwiU2VxIjoxOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjQ2MDgyODA4MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgVURQIEdSTyBPZmZsb2FkIEZ1bmN0aW9ucyoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gRmlyc3QsIEkgc2VlIHRoYXQgYHVkcF9ncm9fcmVjZWl2ZWAgaXMgYSBjZW50cmFsIGZ1bmN0aW9uLCBsaWtlbHkgdGhlIGNvcmUgR1JPIChHZW5lcmljIFJlY2VpdmUgT2ZmbG9hZCkgaGFuZGxlciBmb3IgVURQIHBhY2tldHMsIGFuZCBpdCdzIGRlZmluaXRlbHkgaW4gcGxheSB3aXRoaW4gYm90aCBgdWRwNF9ncm9fcmVjZWl2ZWAgYW5kIGB1ZHA2X2dyb19yZWNlaXZlYC4gR29vZCwgdGhhdCBtYWtlcyBzZW5zZS4gTm93LCB3aGF0J3MgdGhpcyBgdWRwX3R1bm5lbF9ncm9fcmN2YCBkb2luZz8gSG1tLCBpdCdzIG1hcmtlZCBhcyBzdGF0aWMgd2l0aGluIGBuZXQvaXB2NC91ZHBfb2ZmbG9hZC5jYC4gVGhhdCBpbXBsaWVzIGl0J3MgYW4gaW50ZXJuYWwgaGVscGVyIGZ1bmN0aW9uLCBub3QgZGlyZWN0bHkgZXhwb3NlZCBmb3IgZXh0ZXJuYWwgdXNlIC0gcHJvYmFibHkgaGFuZGxpbmcgc29tZSBpbnRlcm5hbCB0dW5uZWwtc3BlY2lmaWMgbG9naWMuIEludGVyZXN0aW5nLlxuXG5Ob3csIGB1ZHBfdHVubmVsX3VwZGF0ZV9ncm9fcmN2YCBpcyBleHBvcnRlZCBmcm9tIHRoZSBzYW1lIGZpbGUuIEl0J3MgbGlrZWx5IGludm9sdmVkIGluIHVwZGF0aW5nIHNvbWUgc3RhdGUgcmVsYXRlZCB0byB0aGUgR1JPIG9mZmxvYWQsIHBlcmhhcHMgYmFzZWQgb24gdHVubmVsIGNvbmZpZ3VyYXRpb24gb3IgcGFja2V0IGNoYXJhY3RlcmlzdGljcy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIHJlbGF0aW9uc2hpcCBiZXR3ZWVuIHRoZXNlIHR1bm5lbC1yZWxhdGVkIGZ1bmN0aW9ucyBhbmQgdGhlIGNvcmUgR1JPIHByb2Nlc3MuIFRoZSBuZXh0IGxvZ2ljYWwgc3RlcCBpcyB0byBwaW5wb2ludCB3aGVyZSBgdWRwX3R1bm5lbF91cGRhdGVfZ3JvX3JjdmAgaXMgYWN0dWFsbHkgYmVpbmcgKmNhbGxlZCouIFRoYXQnbGwgZ2l2ZSBtZSBhIG11Y2ggYmV0dGVyIGlkZWEgb2YgaXRzIHJvbGUgaW4gdGhlIGJpZ2dlciBwaWN0dXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMzQyOCwiT3V0cHV0VG9rZW5zIjoyNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjExOSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wN1QwMjo1ODozNy44Njg2NzQwNDlaIiwiU2VxIjoyMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI4NDg1NzExNDUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwidWRwX3R1bm5lbF91cGRhdGVfZ3JvX3JjdlwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJpbmNsdWRlL25ldC91ZHBfdHVubmVsLmg9MjExPXZvaWQgdWRwX3R1bm5lbF91cGRhdGVfZ3JvX2xvb2t1cChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBzb2NrICpzaywgYm9vbCBhZGQpO1xcbmluY2x1ZGUvbmV0L3VkcF90dW5uZWwuaDoyMTI6dm9pZCB1ZHBfdHVubmVsX3VwZGF0ZV9ncm9fcmN2KHN0cnVjdCBzb2NrICpzaywgYm9vbCBhZGQpO1xcbmluY2x1ZGUvbmV0L3VkcF90dW5uZWwuaC0yMTMtI2Vsc2VcXG5pbmNsdWRlL25ldC91ZHBfdHVubmVsLmg9MjE0PXN0YXRpYyBpbmxpbmUgdm9pZCB1ZHBfdHVubmVsX3VwZGF0ZV9ncm9fbG9va3VwKHN0cnVjdCBuZXQgKm5ldCxcXG5pbmNsdWRlL25ldC91ZHBfdHVubmVsLmgtMjE1LVxcdFxcdFxcdFxcdFxcdFxcdHN0cnVjdCBzb2NrICpzaywgYm9vbCBhZGQpIHt9XFxuaW5jbHVkZS9uZXQvdWRwX3R1bm5lbC5oOjIxNjpzdGF0aWMgaW5saW5lIHZvaWQgdWRwX3R1bm5lbF91cGRhdGVfZ3JvX3JjdihzdHJ1Y3Qgc29jayAqc2ssIGJvb2wgYWRkKSB7fVxcbmluY2x1ZGUvbmV0L3VkcF90dW5uZWwuaC0yMTctI2VuZGlmXFxuLS1cXG5pbmNsdWRlL25ldC91ZHBfdHVubmVsLmg9MjE5PXN0YXRpYyBpbmxpbmUgdm9pZCB1ZHBfdHVubmVsX2NsZWFudXBfZ3JvKHN0cnVjdCBzb2NrICpzaylcXG5pbmNsdWRlL25ldC91ZHBfdHVubmVsLmgtMjIwLXtcXG5pbmNsdWRlL25ldC91ZHBfdHVubmVsLmg6MjIxOlxcdHVkcF90dW5uZWxfdXBkYXRlX2dyb19yY3Yoc2ssIGZhbHNlKTtcXG5pbmNsdWRlL25ldC91ZHBfdHVubmVsLmgtMjIyLVxcdHVkcF90dW5uZWxfdXBkYXRlX2dyb19sb29rdXAoc29ja19uZXQoc2spLCBzaywgZmFsc2UpO1xcbi0tXFxubmV0L2lwdjQvdWRwLmM9Mjg3MT1zdGF0aWMgdm9pZCBzZXRfeGZybV9ncm9fdWRwX2VuY2FwX3JjdihfX3UxNiBlbmNhcF90eXBlLCB1bnNpZ25lZCBzaG9ydCBmYW1pbHksXFxuLS1cXG5uZXQvaXB2NC91ZHAuYy0yODg4LVxcdFxcdFxcdGlmICh1ZHBfc2soc2spLVxcdTAwM2Vncm9fcmVjZWl2ZSlcXG5uZXQvaXB2NC91ZHAuYzoyODg5OlxcdFxcdFxcdFxcdHVkcF90dW5uZWxfdXBkYXRlX2dyb19yY3Yoc2ssIGZhbHNlKTtcXG5uZXQvaXB2NC91ZHAuYy0yODkwLVxcbm5ldC9pcHY0L3VkcC5jLTI4OTEtXFx0XFx0XFx0V1JJVEVfT05DRSh1ZHBfc2soc2spLVxcdTAwM2Vncm9fcmVjZWl2ZSwgbmV3X2dyb19yZWNlaXZlKTtcXG5uZXQvaXB2NC91ZHAuYzoyODkyOlxcdFxcdFxcdHVkcF90dW5uZWxfdXBkYXRlX2dyb19yY3Yoc2ssIHRydWUpO1xcbm5ldC9pcHY0L3VkcC5jLTI4OTMtXFx0XFx0fVxcbi0tXFxubmV0L2lwdjQvdWRwX29mZmxvYWQuYz03Nz1FWFBPUlRfU1lNQk9MX0dQTCh1ZHBfdHVubmVsX3VwZGF0ZV9ncm9fbG9va3VwKTtcXG5uZXQvaXB2NC91ZHBfb2ZmbG9hZC5jLTc4LVxcbm5ldC9pcHY0L3VkcF9vZmZsb2FkLmM6Nzk6dm9pZCB1ZHBfdHVubmVsX3VwZGF0ZV9ncm9fcmN2KHN0cnVjdCBzb2NrICpzaywgYm9vbCBhZGQpXFxubmV0L2lwdjQvdWRwX29mZmxvYWQuYy04MC17XFxuLS1cXG5uZXQvaXB2NC91ZHBfb2ZmbG9hZC5jLTE0NC19XFxubmV0L2lwdjQvdWRwX29mZmxvYWQuYzoxNDU6RVhQT1JUX1NZTUJPTF9HUEwodWRwX3R1bm5lbF91cGRhdGVfZ3JvX3Jjdik7XFxubmV0L2lwdjQvdWRwX29mZmxvYWQuYy0xNDYtXFxuLS1cXG5uZXQvaXB2NC91ZHBfdHVubmVsX2NvcmUuYz03MT12b2lkIHNldHVwX3VkcF90dW5uZWxfc29jayhzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBzb2NrICpzayxcXG4tLVxcbm5ldC9pcHY0L3VkcF90dW5uZWxfY29yZS5jLTkxLVxcbm5ldC9pcHY0L3VkcF90dW5uZWxfY29yZS5jOjkyOlxcdHVkcF90dW5uZWxfdXBkYXRlX2dyb19yY3Yoc2ssIHRydWUpO1xcbm5ldC9pcHY0L3VkcF90dW5uZWxfY29yZS5jLTkzLVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wN1QwMjo1ODo0MC43MTcyNTMwOTRaIiwiU2VxIjoyMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MzAwNjkzMDkxMywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgVURQIEdSTyBhbmQgVHVubmVscyBpbiB0aGUgS2VybmVsKipcblxuT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyBVRFAgR1JPIChHZW5lcmljIFJlY2VpdmUgT2ZmbG9hZCkgaW50ZXJhY3RzIHdpdGggdHVubmVscywgc3BlY2lmaWNhbGx5IHdpdGhpbiBgbmV0L2lwdjQvdWRwX29mZmxvYWQuY2AuIEZpcnN0LCBJIHF1aWNrbHkgY29uZmlybSB0aGF0IHRoZSBjb3JlIGZpbGUgaXMgYnVpbHQgdW5kZXIgYENPTkZJR19JTkVUYCwgYXMgZXhwZWN0ZWQuIE5vdywgSSBzaG91bGQgZG91YmxlIGNoZWNrIHRoZSBjb2RlIGJsb2NrIGd1YXJkZWQgYnkgYCNpZiBJU19FTkFCTEVEKENPTkZJR19ORVRfVURQX1RVTk5FTClgLiBBaCwgbGluZSAxNyBvZiBgdWRwX29mZmxvYWQuY2AgaXMgdGhlIGtleS5cblxuTGV0IG1lIHRha2UgYSBjbG9zZXIgbG9vayBhdCB0aGF0IHNwZWNpZmljIHNlY3Rpb24gb2YgY29kZS4gT2theSwgbGluZXMgMTcgdGhyb3VnaCAyMCBhcmUgdXNpbmcgdGhhdCBjb25kaXRpb25hbC4gSXQgYXBwZWFycyB0aGUgcmVsZXZhbnQgY29kZSwgdGhlIGB1ZHBfdHVubmVsX2dyb19yY3ZgIGZ1bmN0aW9uLCBpcyBkZWZpbmVkIHdpdGhpbiB0aGF0IGJsb2NrIGFuZCBvbmx5IGV4aXN0cyBpZiBgQ09ORklHX05FVF9VRFBfVFVOTkVMYCBpcyBlbmFibGVkLiBUaGUgb3RoZXIgc2lkZSBvZiB0aGF0IGNvbmRpdGlvbmFsIGlzIGF0IGxpbmUgMTU0LCB3aXRoIGAjZWxzZWAuIEl0IGxvb2tzIGxpa2UgdGhlIG1vZGlmaWVkIEdSTyBmdW5jdGlvbiAoZGVmaW5lZCBsaW5lcyAxNDctMTUyKSBpcyBhbHNvIHByb3RlY3RlZCBieSB0aGF0IGNvbmRpdGlvbmFsLlxuXG5UaGUgY3JpdGljYWwgcGllY2UgaGVyZSBpcyBgQ09ORklHX05FVF9VRFBfVFVOTkVMYC4gVGltZSB0byBncmVwIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBmaW5kIG91dCB3aGF0IHRoYXQgb3B0aW9uIGFjdHVhbGx5IGNvbnRyb2xzLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0IGl0IG1lYW5zIHRvIGVuYWJsZSBpdCwgYW5kIHRoZSBpbXBsaWNhdGlvbnMgZm9yIEdSTyB3aXRoIFVEUCB0dW5uZWxzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNDY0NywiT3V0cHV0VG9rZW5zIjoyMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMyNiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wN1QwMjo1ODo0My43MjQxODkyMTdaIiwiU2VxIjoyMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI5NjIzNzMxNjMsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIE5FVF9VRFBfVFVOTkVMXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9pcHY0L0tjb25maWc9MzA0PWNvbmZpZyBORVRfSVBWVElcXG4tLVxcbm5ldC9pcHY0L0tjb25maWctMzE1LVxcbm5ldC9pcHY0L0tjb25maWc6MzE2OmNvbmZpZyBORVRfVURQX1RVTk5FTFxcbm5ldC9pcHY0L0tjb25maWctMzE3LVxcdHRyaXN0YXRlXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDAyOjU4OjQ2LjY4NjU2ODIzWiIsIlNlcSI6MjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjIwMTQyNzY4MTgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqRXhhbWluaW5nIGBuZXQvaXB2NC9LY29uZmlnYCoqXG5cbk9rYXksIHRpbWUgdG8gZGlnIGluLiBJIG5lZWQgdG8gZ2V0IGEgaGFuZGxlIG9uIHRoaXMsIHNvIGxldCdzIHN0YXJ0IGJ5IHplcm9pbmcgaW4gb24gdGhlIGNvbmZpZ3VyYXRpb24gZm9yIElQdjQuIEknbSBnb2luZyB0byBqdW1wIGludG8gYG5ldC9pcHY0L0tjb25maWdgIGFuZCB0YWtlIGEgbG9vayBhcm91bmQgbGluZSAzMTYuIFRoYXQgYXJlYSB1c3VhbGx5IGhvbGRzIGNydWNpYWwgZGVmaW5pdGlvbnMsIHNvIEknbGwgYmUgYWJsZSB0byBxdWlja2x5IHVuZGVyc3RhbmQgdGhlIHN0cnVjdHVyZSwgYW5kIGhvcGVmdWxseSBnZXQgYSBoYW5kbGUgb24gd2hhdCB0aGlzIG1vZHVsZSBpcyBhYm91dC4gTGV0J3Mgc2VlIHdoYXQgd2UgY2FuIGZpbmQuIEkgZXhwZWN0IHRoZXJlIHdpbGwgYmUgc29tZXRoaW5nIHNwZWNpZmljIG9mIGludGVyZXN0IHRoZXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNTM2MiwiT3V0cHV0VG9rZW5zIjozNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDAyOjU4OjQ4LjcwMDg0Nzk3OVoiLCJTZXEiOjI0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMDc1NjksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L2lwdjQvS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiAzMTAsXG4gIFwiTGluZUNvdW50XCI6IDI1XG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAzMTA6XFx0XFx0ICBUdW5uZWxpbmcgbWVhbnMgZW5jYXBzdWxhdGluZyBkYXRhIG9mIG9uZSBwcm90b2NvbCB0eXBlIHdpdGhpblxcbiAzMTE6XFx0XFx0ICBhbm90aGVyIHByb3RvY29sIGFuZCBzZW5kaW5nIGl0IG92ZXIgYSBjaGFubmVsIHRoYXQgdW5kZXJzdGFuZHMgdGhlXFxuIDMxMjpcXHRcXHQgIGVuY2Fwc3VsYXRpbmcgcHJvdG9jb2wuIFRoaXMgY2FuIGJlIHVzZWQgd2l0aCB4ZnJtIG1vZGUgdHVubmVsIHRvIGdpdmVcXG4gMzEzOlxcdFxcdCAgdGhlIG5vdGlvbiBvZiBhIHNlY3VyZSB0dW5uZWwgZm9yIElQU0VDIGFuZCB0aGVuIHVzZSByb3V0aW5nIHByb3RvY29sXFxuIDMxNDpcXHRcXHQgIG9uIHRvcC5cXG4gMzE1OlxcdFxcbiAzMTY6XFx0Y29uZmlnIE5FVF9VRFBfVFVOTkVMXFxuIDMxNzpcXHRcXHR0cmlzdGF0ZVxcbiAzMTg6XFx0XFx0c2VsZWN0IE5FVF9JUF9UVU5ORUxcXG4gMzE5OlxcdFxcdGRlZmF1bHQgblxcbiAzMjA6XFx0XFxuIDMyMTpcXHRjb25maWcgTkVUX0ZPVVxcbiAzMjI6XFx0XFx0dHJpc3RhdGUgXFxcIklQOiBGb28gKElQIHByb3RvY29scykgb3ZlciBVRFBcXFwiXFxuIDMyMzpcXHRcXHRzZWxlY3QgTkVUX1VEUF9UVU5ORUxcXG4gMzI0OlxcdFxcdGhlbHBcXG4gMzI1OlxcdFxcdCAgRm9vIG92ZXIgVURQIGFsbG93cyBhbnkgSVAgcHJvdG9jb2wgdG8gYmUgZGlyZWN0bHkgZW5jYXBzdWxhdGVkXFxuIDMyNjpcXHRcXHQgIG92ZXIgVURQIGluY2x1ZGUgdHVubmVscyAoSVBJUCwgR1JFLCBTSVQpLiBCeSBlbmNhcHN1bGF0aW5nIGluIFVEUFxcbiAzMjc6XFx0XFx0ICBuZXR3b3JrIG1lY2hhbmlzbXMgYW5kIG9wdGltaXphdGlvbnMgZm9yIFVEUCAoc3VjaCBhcyBFQ01QXFxuIDMyODpcXHRcXHQgIGFuZCBSU1MpIGNhbiBiZSBsZXZlcmFnZWQgdG8gcHJvdmlkZSBiZXR0ZXIgc2VydmljZS5cXG4gMzI5OlxcdFxcbiAzMzA6XFx0Y29uZmlnIE5FVF9GT1VfSVBfVFVOTkVMU1xcbiAzMzE6XFx0XFx0Ym9vbCBcXFwiSVA6IEZPVSBlbmNhcHN1bGF0aW9uIG9mIElQIHR1bm5lbHNcXFwiXFxuIDMzMjpcXHRcXHRkZXBlbmRzIG9uIE5FVF9JUElQIHx8IE5FVF9JUEdSRSB8fCBJUFY2X1NJVFxcbiAzMzM6XFx0XFx0c2VsZWN0IE5FVF9GT1VcXG4gMzM0OlxcdFxcdGhlbHBcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDdUMDI6NTg6NDguNzAwOTU3NjA4WiIsIlNlcSI6MjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjQ4MTI3NjM1MDQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQXNzZXNzbWVudCBvZiB0aGUgVURQIEdSTyBSZWNlaXZlIFBhdGggTW9kaWZpY2F0aW9uKipcblxuT2theSwgc28gaGVyZSdzIHRoZSBicmVha2Rvd24gb2YgdGhpcyBwYXRjaCBhbmQgd2hhdCBpdCBtZWFucyBmb3IgZnV6emluZy4gYENPTkZJR19ORVRfVURQX1RVTk5FTGAgaXMgc2VsZWN0ZWQgYnkgc2V2ZXJhbCBvdGhlciBjb25maWdzLCBsaWtlIGBDT05GSUdfTkVUX0ZPVWAsIGBDT05GSUdfR0VORVZFYCwgYW5kIGBDT05GSUdfVlhMQU5gLCBpbmRpY2F0aW5nIHRoaXMgaXMgYSBmZWF0dXJlIHdpdGggcG90ZW50aWFsbHkgYnJvYWQgaW1wYWN0LiBUaGUgYmFzZSBJUHY0IGNvbmZpZywgYENPTkZJR19JTkVUYCwgaXMgYWxzbyByZWxldmFudCwgc28gd2UgbmVlZCB0byBjb25zaWRlciBib3RoIGBORVRfVURQX1RVTk5FTGAgYW5kIGBJTkVUYCB3aGVuIGNvbmZpZ3VyaW5nIHRoZSB0ZXN0IGVudmlyb25tZW50LiBgTkVUX1VEUF9UVU5ORUxgIGlzIHRoZSBwcmltYXJ5IGd1YXJkIG9uIHRoZSBtb2RpZmllZCBjb2RlIGJsb2NrLCBzbyB0aGF0J3MgYSBrZXkgZW5hYmxlIGNvbmZpZy5cblxuSSd2ZSB6ZXJvZWQgaW4gb24gdGhlIHNwZWNpZmljIGZ1bmN0aW9ucyBhZmZlY3RlZDogYHVkcF90dW5uZWxfZ3JvX3JjdmAgKHRoZSB0YXJnZXQgZnVuY3Rpb24pLCBpdHMgZGlyZWN0IGNhbGxlciBgdWRwX2dyb19yZWNlaXZlYCwgYW5kIHRoZW4gdGhlIEdSTyByZWNlaXZlIGltcGxlbWVudGF0aW9ucyBmb3IgSVB2NCBhbmQgSVB2NiwgbmFtZWx5IGB1ZHA0X2dyb19yZWNlaXZlYCBhbmQgYHVkcDZfZ3JvX3JlY2VpdmVgLCBhbmQgYWxzbyB0aGUgdXBkYXRlIGZ1bmN0aW9uIGB1ZHBfdHVubmVsX3VwZGF0ZV9ncm9fcmN2YC4gVGhlc2UgYXJlIG15IGZvY3VzIHN5bWJvbHMuXG5cbkkndmUgZG91YmxlLWNoZWNrZWQgbXkgcnVsZXM6IGF2b2lkaW5nIHViaXF1aXRvdXMgaG90LXBhdGhzLCBhbmQgdGFyZ2V0aW5nIHNwZWNpZmljIGZlYXR1cmUgbG9naWMgYW5kIGVudHJ5cG9pbnRzLiBUaGlzIGNsZWFybHkgaGl0cyB0aGUgbWFyay4gVGhlIG1vZGlmaWVkIGNvZGUgaXMgYXQgdGhlIGNvcmUgb2YgR1JPIHByb2Nlc3Npbmcgd2l0aGluIHRoZSBVRFAgdHVubmVsIHBhdGgsIG1ha2luZyBpdCBhIGhpZ2gtdmFsdWUgdGFyZ2V0LiBBbmQsIHRoZSBgRW5hYmxlQ29uZmlnc2AgY2xlYXJseSBzcGVjaWZ5IHRoZSBuZWNlc3NhcnkgYnVpbGQgcGFyYW1ldGVycy5cblxuTm93IGZvciB0aGUgcmVhc29uaW5nLiBUaGUgcGF0Y2ggY2hhbmdlcyBgdWRwX3R1bm5lbF9ncm9fcmN2YCwgcmVtb3ZpbmcgYSBzdGF0aWMgY2FsbCBvcHRpbWl6YXRpb24gYW5kIHVzaW5nIGBjYWxsX2dyb19yZWNlaXZlX3NrYCBkaXJlY3RseS4gVGhpcyBkaXJlY3RseSBhZmZlY3RzIHBhY2tldCBwcm9jZXNzaW5nIGZvciBVRFAgdHVubmVscyBhbmQgR1JPIHJlY3Vyc2lvbiB3aXRoaW4gdGhlIGNvcmUgbmV0d29ya2luZyBzdGFjay4gVGhpcyBpcyBleGNlbGxlbnQgYmVjYXVzZSBpdCdzIHJlYWRpbHkgcmVhY2hhYmxlIGFuZCB0ZXN0YWJsZSwgZXNwZWNpYWxseSBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMuIFN0YW5kYXJkIG5ldHdvcmsgaW50ZXJmYWNlcyBhbmQgdHVubmVsIHNvY2tldHMgYXJlIGFsbCB3ZSBuZWVkIGZvciBlZmZlY3RpdmUgZnV6emluZy5cblxuTXkgY29uY2x1c2lvbj8gVGhpcyBpcyBhYnNvbHV0ZWx5IHdvcnRoIGZ1enppbmcuIEkndmUgZ290IG15IGZvY3VzIHN5bWJvbHM6IGB1ZHBfdHVubmVsX2dyb19yY3ZgLCBgdWRwX2dyb19yZWNlaXZlYCwgYHVkcF90dW5uZWxfdXBkYXRlX2dyb19yY3ZgLCBgdWRwNF9ncm9fcmVjZWl2ZWAsIGFuZCBgdWRwNl9ncm9fcmVjZWl2ZWAuIE15IGVuYWJsZSBjb25maWdzIGFyZSBgSU5FVGAgYW5kIGBORVRfVURQX1RVTk5FTGAuIFRpbWUgdG8gaW52b2tlIGBzZXQtcmVzdWx0c2AuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE1OTM2LCJPdXRwdXRUb2tlbnMiOjE3NCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjUwNSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDAyOjU4OjUzLjUxMzcyNjYyM1oiLCJTZXEiOjI2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE4MjAyODMyNywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiSU5FVFwiLFxuICAgIFwiTkVUX1VEUF9UVU5ORUxcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJ1ZHBfdHVubmVsX2dyb19yY3ZcIixcbiAgICBcInVkcF9ncm9fcmVjZWl2ZVwiLFxuICAgIFwidWRwX3R1bm5lbF91cGRhdGVfZ3JvX3JjdlwiLFxuICAgIFwidWRwNF9ncm9fcmVjZWl2ZVwiLFxuICAgIFwidWRwNl9ncm9fcmVjZWl2ZVwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBVRFAgdHVubmVsIEdSTyByZWNlaXZlIHBhdGggKHVkcF90dW5uZWxfZ3JvX3JjdikgaW4gbmV0L2lwdjQvdWRwX29mZmxvYWQuYywgcmVtb3ZpbmcgdGhlIHN0YXRpYyBjYWxsIGJyYW5jaCBpbiBmYXZvciBvZiBkaXJlY3RseSBpbnZva2luZyBjYWxsX2dyb19yZWNlaXZlX3NrLiBUaGlzIG1vZGlmaWVzIGNvcmUgbmV0d29ya2luZyBHUk8gZXhlY3V0aW9uIGZsb3cgYW5kIHJlY3Vyc2lvbiBjaGVja3MsIHdoaWNoIGFyZSBmdWxseSByZWFjaGFibGUgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIHVzaW5nIFVEUCB0dW5uZWxzLCB2aXJ0dWFsIGludGVyZmFjZXMsIGFuZCBHUk8tZW5hYmxlZCBzb2NrZXRzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIklORVRcIixcbiAgICBcIk5FVF9VRFBfVFVOTkVMXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwidWRwX3R1bm5lbF9ncm9fcmN2XCIsXG4gICAgXCJ1ZHBfZ3JvX3JlY2VpdmVcIixcbiAgICBcInVkcF90dW5uZWxfdXBkYXRlX2dyb19yY3ZcIixcbiAgICBcInVkcDRfZ3JvX3JlY2VpdmVcIixcbiAgICBcInVkcDZfZ3JvX3JlY2VpdmVcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgVURQIHR1bm5lbCBHUk8gcmVjZWl2ZSBwYXRoICh1ZHBfdHVubmVsX2dyb19yY3YpIGluIG5ldC9pcHY0L3VkcF9vZmZsb2FkLmMsIHJlbW92aW5nIHRoZSBzdGF0aWMgY2FsbCBicmFuY2ggaW4gZmF2b3Igb2YgZGlyZWN0bHkgaW52b2tpbmcgY2FsbF9ncm9fcmVjZWl2ZV9zay4gVGhpcyBtb2RpZmllcyBjb3JlIG5ldHdvcmtpbmcgR1JPIGV4ZWN1dGlvbiBmbG93IGFuZCByZWN1cnNpb24gY2hlY2tzLCB3aGljaCBhcmUgZnVsbHkgcmVhY2hhYmxlIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyB1c2luZyBVRFAgdHVubmVscywgdmlydHVhbCBpbnRlcmZhY2VzLCBhbmQgR1JPLWVuYWJsZWQgc29ja2V0cy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDdUMDI6NTg6NTMuNjk1NzYyOTNaIiwiU2VxIjoyNywiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJJZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE1MjU2MDY4NTkwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDdUMDI6NTg6NTMuNjk2NDAwMTJaIiwiU2VxIjoyOCwiTmVzdGluZyI6MiwiVHlwZSI6ImFnZW50IiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiY29yZSIsIkR1cmF0aW9uIjoxNTI1NTQyNjEyMCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggcmVtb3ZlcyB0aGUgc3RhdGljIGNhbGwgYnJhbmNoIG9wdGltaXphdGlvbiBpbiBgdWRwX3R1bm5lbF9ncm9fcmN2KClgLCByZXZlcnRpbmcgdG8gY2FsbGluZyBgY2FsbF9ncm9fcmVjZWl2ZV9zayh1ZHBfc2soc2spLVxcdTAwM2Vncm9fcmVjZWl2ZSwgc2ssIGhlYWQsIHNrYilgIHVuY29uZGl0aW9uYWxseS4gVGhlIGNoYW5nZSBkb2VzIG5vdCBpbnRyb2R1Y2Ugb3IgbW9kaWZ5IGFueSBtZW1vcnkgYWxsb2NhdGlvbnMsIHN0cnVjdHVyZSBpbml0aWFsaXphdGlvbiwgY29weWluZyB0byB1c2VyIHNwYWNlLCBvciBidWZmZXIgbGVuZ3RoL2JvdW5kcyBsb2dpYy4gTm8gdW5pbml0aWFsaXplZCBtZW1vcnkgb3IgaW5mb3JtYXRpb24gbGVhayByaXNrcyBhcmUgaW50cm9kdWNlZC4gU3RhbmRhcmQgdGVzdGluZyBhbmQgS0FTQU4gYXJlIHN1ZmZpY2llbnQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5XG5lcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZFxuZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKVxuZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuXG5cbkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOlxuLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlXG4gIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTlxuICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQXG4gIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuXG4tIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLFxuICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuXG5cblJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sXG5MT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLlxuQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWVxuc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3NcbnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uXG5cbkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0XG51bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZixcbmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5c1xudGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmdcbnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbFxuZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLFxuY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuXG5cblNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczpcbjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiXG4gICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkc1xuICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC5cbjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXNcbiAgIG9yIHN0cnVjdCBmaWVsZHMuXG4zLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzXG4gICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLlxuNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3NcbiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy5cblxuU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6XG4tIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyXG4gIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodFxuICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuXG4tIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkXG4gIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC5cbi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLlxuXG5Vc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlXG5kZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiVGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjRcblxuRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgYzVkNjFiZDYzNjI4NDliMThlOTUyZjYyZmYzMjk3ZTFjOWZlNGI4ZlxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBNb24gU2VwIDcgMDI6NTc6NTggMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9uZXQvaXB2NC91ZHBfb2ZmbG9hZC5jIGIvbmV0L2lwdjQvdWRwX29mZmxvYWQuY1xuaW5kZXggY2YwN2MzYzY2MTFhMi4uMzA2NDlmNDA3YTc4OCAxMDA2NDRcbi0tLSBhL25ldC9pcHY0L3VkcF9vZmZsb2FkLmNcbisrKyBiL25ldC9pcHY0L3VkcF9vZmZsb2FkLmNcbkBAIC0xNDgsMTMgKzE0OCw2IEBAIHN0YXRpYyBzdHJ1Y3Qgc2tfYnVmZiAqdWRwX3R1bm5lbF9ncm9fcmN2KHN0cnVjdCBzb2NrICpzayxcbiBcdFx0XHRcdFx0ICBzdHJ1Y3QgbGlzdF9oZWFkICpoZWFkLFxuIFx0XHRcdFx0XHQgIHN0cnVjdCBza19idWZmICpza2IpXG4ge1xuLVx0aWYgKHN0YXRpY19icmFuY2hfbGlrZWx5KFx1MDAyNnVkcF90dW5uZWxfc3RhdGljX2NhbGwpKSB7XG4tXHRcdGlmICh1bmxpa2VseShncm9fcmVjdXJzaW9uX2luY190ZXN0KHNrYikpKSB7XG4tXHRcdFx0TkFQSV9HUk9fQ0Ioc2tiKS1cdTAwM2VmbHVzaCB8PSAxO1xuLVx0XHRcdHJldHVybiBOVUxMO1xuLVx0XHR9XG4tXHRcdHJldHVybiBzdGF0aWNfY2FsbCh1ZHBfdHVubmVsX2dyb19yY3YpKHNrLCBoZWFkLCBza2IpO1xuLVx0fVxuIFx0cmV0dXJuIGNhbGxfZ3JvX3JlY2VpdmVfc2sodWRwX3NrKHNrKS1cdTAwM2Vncm9fcmVjZWl2ZSwgc2ssIGhlYWQsIHNrYik7XG4gfVxuIFxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDdUMDI6NTg6NTMuNjk2NDA0MjlaIiwiU2VxIjoyOSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6OTI2ODgwOTI5NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIFVEUCBPZmZsb2FkIENvZGUqKlxuXG5Pa2F5LCBsZXQncyB0YWtlIGEgbG9vayBhdCB0aGlzIGBkaWZmYC4gRmlyc3QsIEknbGwgbmVlZCB0byBleGFtaW5lIHRoZSBjb250ZXh0IGFyb3VuZCB0aGUgY2hhbmdlIGluIGBuZXQvaXB2NC91ZHBfb2ZmbG9hZC5jYC4gSSBzZWUgdGhhdCB0aGUgY29kZSBpcyBkZWFsaW5nIHdpdGggVURQIG9mZmxvYWQgYW5kIHNwZWNpZmljYWxseSB3aXRoIEdSTyAoR2VuZXJpYyBSZWNlaXZlIE9mZmxvYWQpLiBUaGUgYGRpZmZgIHNob3dzIHRoZSByZW1vdmFsIG9mIGEgY29uZGl0aW9uYWwgY2hlY2sgYW5kIGEgcG90ZW50aWFsIGNhbGwgdG8gYSBzdGF0aWMgZnVuY3Rpb24uXG5cbkluaXRpYWxseSwgaXQgc2VlbXMgdGhlcmUgd2FzIGEgYHN0YXRpY19icmFuY2hfbGlrZWx5YCBjaGVjaywgd2hpY2ggZGV0ZXJtaW5lZCB3aGV0aGVyIHRvIGNhbGwgYHN0YXRpY19jYWxsKHVkcF90dW5uZWxfZ3JvX3JjdilgLiBUaGF0LCBpbiB0dXJuLCBzZWVtcyB0byBoYXZlIGhhZCBhIHRlc3QgZm9yIGEgYGdyb19yZWN1cnNpb25faW5jX3Rlc3RgIGFuZCBwb3NzaWJseSBzZXR0aW5nIGBOQVBJX0dST19DQihza2IpLVx1MDAzZWZsdXNoIHw9IDE7YCBpZiBgZ3JvX3JlY3Vyc2lvbl9pbmNfdGVzdGAgcmV0dXJuZWQgdHJ1ZS4gIFRoZSBgc3RhdGljX2NhbGxgIG1lY2hhbmlzbSBpcyBpbnRlcmVzdGluZzsgaXQgc3VnZ2VzdHMgYSBtZWNoYW5pc20gZm9yIG9wdGltaXppbmcgZnVuY3Rpb24gY2FsbHMsIHBvc3NpYmx5IGZvciBpbmxpbmluZyBvciBmb3IgZW5hYmxpbmcvZGlzYWJsaW5nIGEgY29kZSBwYXRoIGF0IGNvbXBpbGUgdGltZS4gIFRoZSBmdW5jdGlvbiBgZ3JvX3JlY3Vyc2lvbl9pbmNfdGVzdGAgc2VlbXMgcmVsYXRlZCB0byByZWN1cnNpb24gd2l0aGluIHRoZSBHUk8gcHJvY2Vzc2luZy5cblxuTm93LCBpbnN0ZWFkLCBpdCBsb29rcyBsaWtlIHRoaXMgaXMgYmVpbmcgcmVwbGFjZWQgYnkgYGNhbGxfZ3JvX3JlY2VpdmVfc2tgLiBUaGlzIGxpa2VseSBtZWFucyB0aGUgY29kZSBpcyBub3cgZGlyZWN0bHkgY2FsbGluZyBhIGZ1bmN0aW9uIHBvaW50ZXIgKGB1ZHBfc2soc2spLVx1MDAzZWdyb19yZWNlaXZlYCkgdGhhdOKAmXMgYXNzb2NpYXRlZCB3aXRoIHRoZSBgc29ja2Agc3RydWN0dXJlLCBieXBhc3NpbmcgdGhlIGBzdGF0aWNfYnJhbmNoYCBvcHRpbWl6YXRpb24uIEknbGwgbmVlZCB0byBpbnZlc3RpZ2F0ZSB3aGF0IGlzIHN0b3JlZCBpbiBgdWRwX3NrKHNrKS1cdTAwM2Vncm9fcmVjZWl2ZWAgYW5kIGRldGVybWluZSB0aGUgaW1wbGljYXRpb25zIG9mIHRoaXMgY2hhbmdlLiBJdCdzIHBvc3NpYmxlIHRoaXMgaXMgYSBzaW1wbGlmaWNhdGlvbiwgb3IgbWF5YmUgYW4gb3B0aW1pemF0aW9uIGZvciBhIHBhcnRpY3VsYXIgaGFyZHdhcmUgY29uZmlndXJhdGlvbiwgb3IgbWF5YmUgYSBjaGFuZ2UgaW4gdGhlIHdheSBHUk8gaXMgaGFuZGxlZC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIHBlcmZvcm1hbmNlIGFuZCBmdW5jdGlvbmFsIGltcGFjdHMgaGVyZS4gSSdsbCBuZWVkIHRvIGtub3c6IHdoeSB0aGUgYHN0YXRpY19icmFuY2hgIHdhcyByZW1vdmVkLCB3aGF0IHRoZSBpbXBsaWNhdGlvbnMgb2YgdGhlIGRpcmVjdCBmdW5jdGlvbiBjYWxsIGFyZSBpbiB0ZXJtcyBvZiBwZXJmb3JtYW5jZSBhbmQgcG90ZW50aWFsIHJlZ3Jlc3Npb25zLCBhbmQgd2hhdCBjaXJjdW1zdGFuY2VzIHdvdWxkIGNhdXNlIHRoZSBvbGQgY29kZSB0byBmYWlsIGFuZCB0aGUgbmV3IGNvZGUgdG8gcGFzcy5cblxuXG4iLCJJbnB1dFRva2VucyI6MjE1OCwiT3V0cHV0VG9rZW5zIjozOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMzNSwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDAyOjU5OjAyLjk2NTIxOTUyNFoiLCJTZXEiOjMwLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxOTQxMjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L2lwdjQvdWRwX29mZmxvYWQuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAxMjAsXG4gIFwiTGluZUNvdW50XCI6IDgwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAxMjA6XFx0XFx0XFx0ICogVGhlIHN0YWNrIGNsZWFudXBzIG9ubHkgc3VjY2Vzc2Z1bGx5IGFkZGVkIHR1bm5lbCwgdGhlXFxuIDEyMTpcXHRcXHRcXHQgKiBsb29rdXAgb24gcmVtb3ZhbCBzaG91bGQgbmV2ZXIgZmFpbC5cXG4gMTIyOlxcdFxcdFxcdCAqL1xcbiAxMjM6XFx0XFx0XFx0aWYgKFdBUk5fT05fT05DRSghY3VyKSlcXG4gMTI0OlxcdFxcdFxcdFxcdGdvdG8gb3V0O1xcbiAxMjU6XFx0XFxuIDEyNjpcXHRcXHRcXHRpZiAoIXJlZmNvdW50X2RlY19hbmRfdGVzdChcXHUwMDI2Y3VyLVxcdTAwM2Vjb3VudCkpXFxuIDEyNzpcXHRcXHRcXHRcXHRnb3RvIG91dDtcXG4gMTI4OlxcdFxcbiAxMjk6XFx0XFx0XFx0LyogQXZvaWQgZ2Fwcywgc28gdGhhdCB0aGUgZW5hYmxlIHR1bm5lbCBoYXMgYWx3YXlzIGlkIDAgKi9cXG4gMTMwOlxcdFxcdFxcdCpjdXIgPSB1ZHBfdHVubmVsX2dyb190eXBlc1stLXVkcF90dW5uZWxfZ3JvX3R5cGVfbnJdO1xcbiAxMzE6XFx0XFx0fVxcbiAxMzI6XFx0XFxuIDEzMzpcXHRcXHRpZiAodWRwX3R1bm5lbF9ncm9fdHlwZV9uciA9PSAxKSB7XFxuIDEzNDpcXHRcXHRcXHRzdGF0aWNfY2FsbF91cGRhdGUodWRwX3R1bm5lbF9ncm9fcmN2LFxcbiAxMzU6XFx0XFx0XFx0XFx0XFx0ICAgdWRwX3R1bm5lbF9ncm9fdHlwZXNbMF0uZ3JvX3JlY2VpdmUpO1xcbiAxMzY6XFx0XFx0XFx0c3RhdGljX2JyYW5jaF9lbmFibGUoXFx1MDAyNnVkcF90dW5uZWxfc3RhdGljX2NhbGwpO1xcbiAxMzc6XFx0XFx0fSBlbHNlIGlmIChvbGRfZ3JvX3R5cGVfbnIgPT0gMSkge1xcbiAxMzg6XFx0XFx0XFx0c3RhdGljX2JyYW5jaF9kaXNhYmxlKFxcdTAwMjZ1ZHBfdHVubmVsX3N0YXRpY19jYWxsKTtcXG4gMTM5OlxcdFxcdFxcdHN0YXRpY19jYWxsX3VwZGF0ZSh1ZHBfdHVubmVsX2dyb19yY3YsIGR1bW15X2dyb19yY3YpO1xcbiAxNDA6XFx0XFx0fVxcbiAxNDE6XFx0XFxuIDE0MjpcXHRvdXQ6XFxuIDE0MzpcXHRcXHRtdXRleF91bmxvY2soXFx1MDAyNnVkcF90dW5uZWxfZ3JvX3R5cGVfbG9jayk7XFxuIDE0NDpcXHR9XFxuIDE0NTpcXHRFWFBPUlRfU1lNQk9MX0dQTCh1ZHBfdHVubmVsX3VwZGF0ZV9ncm9fcmN2KTtcXG4gMTQ2OlxcdFxcbiAxNDc6XFx0c3RhdGljIHN0cnVjdCBza19idWZmICp1ZHBfdHVubmVsX2dyb19yY3Yoc3RydWN0IHNvY2sgKnNrLFxcbiAxNDg6XFx0XFx0XFx0XFx0XFx0XFx0ICBzdHJ1Y3QgbGlzdF9oZWFkICpoZWFkLFxcbiAxNDk6XFx0XFx0XFx0XFx0XFx0XFx0ICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbiAxNTA6XFx0e1xcbiAxNTE6XFx0XFx0cmV0dXJuIGNhbGxfZ3JvX3JlY2VpdmVfc2sodWRwX3NrKHNrKS1cXHUwMDNlZ3JvX3JlY2VpdmUsIHNrLCBoZWFkLCBza2IpO1xcbiAxNTI6XFx0fVxcbiAxNTM6XFx0XFxuIDE1NDpcXHQjZWxzZVxcbiAxNTU6XFx0XFxuIDE1NjpcXHRzdGF0aWMgc3RydWN0IHNrX2J1ZmYgKnVkcF90dW5uZWxfZ3JvX3JjdihzdHJ1Y3Qgc29jayAqc2ssXFxuIDE1NzpcXHRcXHRcXHRcXHRcXHRcXHQgIHN0cnVjdCBsaXN0X2hlYWQgKmhlYWQsXFxuIDE1ODpcXHRcXHRcXHRcXHRcXHRcXHQgIHN0cnVjdCBza19idWZmICpza2IpXFxuIDE1OTpcXHR7XFxuIDE2MDpcXHRcXHRyZXR1cm4gY2FsbF9ncm9fcmVjZWl2ZV9zayh1ZHBfc2soc2spLVxcdTAwM2Vncm9fcmVjZWl2ZSwgc2ssIGhlYWQsIHNrYik7XFxuIDE2MTpcXHR9XFxuIDE2MjpcXHRcXG4gMTYzOlxcdCNlbmRpZlxcbiAxNjQ6XFx0XFxuIDE2NTpcXHRzdGF0aWMgc3RydWN0IHNrX2J1ZmYgKl9fc2tiX3VkcF90dW5uZWxfc2VnbWVudChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbiAxNjY6XFx0XFx0bmV0ZGV2X2ZlYXR1cmVzX3QgZmVhdHVyZXMsXFxuIDE2NzpcXHRcXHRzdHJ1Y3Qgc2tfYnVmZiAqKCpnc29faW5uZXJfc2VnbWVudCkoc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4gMTY4OlxcdFxcdFxcdFxcdFxcdFxcdCAgICAgbmV0ZGV2X2ZlYXR1cmVzX3QgZmVhdHVyZXMpLFxcbiAxNjk6XFx0XFx0X19iZTE2IG5ld19wcm90b2NvbCwgYm9vbCBpc19pcHY2KVxcbiAxNzA6XFx0e1xcbiAxNzE6XFx0XFx0aW50IHRubF9obGVuID0gc2tiX2lubmVyX21hY19oZWFkZXIoc2tiKSAtIHNrYl90cmFuc3BvcnRfaGVhZGVyKHNrYik7XFxuIDE3MjpcXHRcXHRib29sIHJlbWNzdW0sIG5lZWRfY3N1bSwgb2ZmbG9hZF9jc3VtLCBnc29fcGFydGlhbDtcXG4gMTczOlxcdFxcdHN0cnVjdCBza19idWZmICpzZWdzID0gRVJSX1BUUigtRUlOVkFMKTtcXG4gMTc0OlxcdFxcdHUxNiBtYWNfb2Zmc2V0ID0gc2tiLVxcdTAwM2VtYWNfaGVhZGVyO1xcbiAxNzU6XFx0XFx0X19iZTE2IHByb3RvY29sID0gc2tiLVxcdTAwM2Vwcm90b2NvbDtcXG4gMTc2OlxcdFxcdHUxNiBtYWNfbGVuID0gc2tiLVxcdTAwM2VtYWNfbGVuO1xcbiAxNzc6XFx0XFx0aW50IHVkcF9vZmZzZXQsIG91dGVyX2hsZW47XFxuIDE3ODpcXHRcXHRzdHJ1Y3QgdWRwaGRyICp1aDtcXG4gMTc5OlxcdFxcdF9fd3N1bSBwYXJ0aWFsO1xcbiAxODA6XFx0XFx0Ym9vbCBuZWVkX2lwc2VjO1xcbiAxODE6XFx0XFxuIDE4MjpcXHRcXHRpZiAodW5saWtlbHkoIXBza2JfbWF5X3B1bGwoc2tiLCB0bmxfaGxlbikpKVxcbiAxODM6XFx0XFx0XFx0Z290byBvdXQ7XFxuIDE4NDpcXHRcXG4gMTg1OlxcdFxcdHVoID0gdWRwX2hkcihza2IpO1xcbiAxODY6XFx0XFxuIDE4NzpcXHRcXHQvKiBBZGp1c3QgcGFydGlhbCBoZWFkZXIgY2hlY2tzdW0gdG8gbmVnYXRlIG9sZCBsZW5ndGguXFxuIDE4ODpcXHRcXHQgKiBXZSBjYW5ub3QgcmVseSBvbiB0aGUgdmFsdWUgY29udGFpbmVkIGluIHVoLVxcdTAwM2VsZW4gYXMgaXQgaXNcXG4gMTg5OlxcdFxcdCAqIHBvc3NpYmxlIHRoYXQgdGhlIGFjdHVhbCB2YWx1ZSBleGNlZWRzIHRoZSBib3VuZGFyaWVzIG9mIHRoZVxcbiAxOTA6XFx0XFx0ICogMTYgYml0IGxlbmd0aCBmaWVsZCBkdWUgdG8gdGhlIGhlYWRlciBiZWluZyBhZGRlZCBvdXRzaWRlIG9mIGFuXFxuIDE5MTpcXHRcXHQgKiBJUCBvciBJUHY2IGZyYW1lIHRoYXQgd2FzIGFscmVhZHkgbGltaXRlZCB0byA2NEsgLSAxLlxcbiAxOTI6XFx0XFx0ICovXFxuIDE5MzpcXHRcXHRpZiAoc2tiX3NoaW5mbyhza2IpLVxcdTAwM2Vnc29fdHlwZSBcXHUwMDI2IFNLQl9HU09fUEFSVElBTClcXG4gMTk0OlxcdFxcdFxcdHBhcnRpYWwgPSAoX19mb3JjZSBfX3dzdW0pdWgtXFx1MDAzZWxlbjtcXG4gMTk1OlxcdFxcdGVsc2VcXG4gMTk2OlxcdFxcdFxcdHBhcnRpYWwgPSAoX19mb3JjZSBfX3dzdW0paHRvbmwoc2tiLVxcdTAwM2VsZW4pO1xcbiAxOTc6XFx0XFx0cGFydGlhbCA9IGNzdW1fc3ViKGNzdW1fdW5mb2xkKHVoLVxcdTAwM2VjaGVjayksIHBhcnRpYWwpO1xcbiAxOTg6XFx0XFxuIDE5OTpcXHRcXHQvKiBzZXR1cCBpbm5lciBza2IuICovXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDAyOjU5OjAyLjk2NTQxNzkyNFoiLCJTZXEiOjMxLCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoxNzk5NDk4NTgyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgc3VtbWFyeSwgYXMgaWYgSSB3ZXJlIHRoaW5raW5nIHRoZXNlIHRob3VnaHRzOlxuXG4qKkFuYWx5emluZyBgdWRwX29mZmxvYWQuY2AgYW5kIFN0YXRpYyBDYWxscyoqXG5cbk9rYXksIHRpbWUgdG8gZGl2ZSBkZWVwZXIgaW50byBgdWRwX29mZmxvYWQuY2AsIHNwZWNpZmljYWxseSBmb2N1c2luZyBvbiB0aGUgYXJlYSBhcm91bmQgYHVkcF90dW5uZWxfZ3JvX3JjdmAuIEkgbmVlZCB0byBnZXQgYSBiZXR0ZXIgaGFuZGxlIG9uIHRoZSBjb250ZXh0IG9mIHRoYXQgZnVuY3Rpb24sIGVzcGVjaWFsbHkgaG93IGl0J3MgYmVpbmcgdXNlZC4gVG8gZG8gdGhhdCwgSSdtIGdvaW5nIHRvIHNjYW4gdGhlIHN1cnJvdW5kaW5nIGNvZGUsIGxldCdzIHNheSBmcm9tIGxpbmVzIDUwIHRvIDEyMC4gSSB3YW50IHRvIHNlZSB3aGF0J3MgaGFwcGVuaW5nIGp1c3QgYmVmb3JlIGFuZCBhZnRlciBgdWRwX3R1bm5lbF9ncm9fcmN2YCwgYW5kIG1vc3QgaW1wb3J0YW50bHksIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQgdGhhdCBgc3RhdGljYCBjYWxsIGlzIGRvaW5nLCB3aG8ncyBjYWxsaW5nIGl0LCBhbmQgd2hhdCBpdHMgb3ZlcmFsbCBwdXJwb3NlIGlzIGluIHRoZSBicm9hZGVyIG5ldHdvcmtpbmcgZnJhbWV3b3JrLiBJJ20gaG9waW5nIHRvIGRpc2NvdmVyIHRoZSByb2xlIGFuZCBpbXBsaWNhdGlvbnMgZm9yIHRoZSBlbnRpcmUgdHVubmVsIHByb2Nlc3NpbmcgZmxvdy5cblxuXG4iLCJJbnB1dFRva2VucyI6NDI5NCwiT3V0cHV0VG9rZW5zIjozOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQ5LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDdUMDI6NTk6MDQuNzY0OTE5NzQ2WiIsIlNlcSI6MzIsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIwODg4MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvaXB2NC91ZHBfb2ZmbG9hZC5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDUwLFxuICBcIkxpbmVDb3VudFwiOiA3MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgIDUwOlxcdHN0YXRpYyBERUZJTkVfU1BJTkxPQ0sodWRwX3R1bm5lbF9ncm9fbG9jayk7XFxuICA1MTpcXHRcXG4gIDUyOlxcdHZvaWQgdWRwX3R1bm5lbF91cGRhdGVfZ3JvX2xvb2t1cChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBzb2NrICpzaywgYm9vbCBhZGQpXFxuICA1MzpcXHR7XFxuICA1NDpcXHRcXHRib29sIGlzX2lwdjYgPSBzay1cXHUwMDNlc2tfZmFtaWx5ID09IEFGX0lORVQ2O1xcbiAgNTU6XFx0XFx0c3RydWN0IHVkcF9zb2NrICp0dXAsICp1cCA9IHVkcF9zayhzayk7XFxuICA1NjpcXHRcXHRzdHJ1Y3QgdWRwX3R1bm5lbF9ncm8gKnVkcF90dW5uZWxfZ3JvO1xcbiAgNTc6XFx0XFxuICA1ODpcXHRcXHRzcGluX2xvY2soXFx1MDAyNnVkcF90dW5uZWxfZ3JvX2xvY2spO1xcbiAgNTk6XFx0XFx0dWRwX3R1bm5lbF9ncm8gPSBcXHUwMDI2bmV0LVxcdTAwM2VpcHY0LnVkcF90dW5uZWxfZ3JvW2lzX2lwdjZdO1xcbiAgNjA6XFx0XFx0aWYgKGFkZClcXG4gIDYxOlxcdFxcdFxcdGhsaXN0X2FkZF9oZWFkKFxcdTAwMjZ1cC1cXHUwMDNldHVubmVsX2xpc3QsIFxcdTAwMjZ1ZHBfdHVubmVsX2dyby1cXHUwMDNlbGlzdCk7XFxuICA2MjpcXHRcXHRlbHNlIGlmICh1cC1cXHUwMDNldHVubmVsX2xpc3QucHByZXYpXFxuICA2MzpcXHRcXHRcXHRobGlzdF9kZWxfaW5pdChcXHUwMDI2dXAtXFx1MDAzZXR1bm5lbF9saXN0KTtcXG4gIDY0OlxcdFxcbiAgNjU6XFx0XFx0aWYgKHVkcF90dW5uZWxfZ3JvLVxcdTAwM2VsaXN0LmZpcnN0IFxcdTAwMjZcXHUwMDI2XFxuICA2NjpcXHRcXHQgICAgIXVkcF90dW5uZWxfZ3JvLVxcdTAwM2VsaXN0LmZpcnN0LVxcdTAwM2VuZXh0KSB7XFxuICA2NzpcXHRcXHRcXHR0dXAgPSBobGlzdF9lbnRyeSh1ZHBfdHVubmVsX2dyby1cXHUwMDNlbGlzdC5maXJzdCwgc3RydWN0IHVkcF9zb2NrLFxcbiAgNjg6XFx0XFx0XFx0XFx0XFx0ICB0dW5uZWxfbGlzdCk7XFxuICA2OTpcXHRcXG4gIDcwOlxcdFxcdFxcdHJjdV9hc3NpZ25fcG9pbnRlcih1ZHBfdHVubmVsX2dyby1cXHUwMDNlc2ssIChzdHJ1Y3Qgc29jayAqKXR1cCk7XFxuICA3MTpcXHRcXHR9IGVsc2Uge1xcbiAgNzI6XFx0XFx0XFx0UkNVX0lOSVRfUE9JTlRFUih1ZHBfdHVubmVsX2dyby1cXHUwMDNlc2ssIE5VTEwpO1xcbiAgNzM6XFx0XFx0fVxcbiAgNzQ6XFx0XFxuICA3NTpcXHRcXHRzcGluX3VubG9jayhcXHUwMDI2dWRwX3R1bm5lbF9ncm9fbG9jayk7XFxuICA3NjpcXHR9XFxuICA3NzpcXHRFWFBPUlRfU1lNQk9MX0dQTCh1ZHBfdHVubmVsX3VwZGF0ZV9ncm9fbG9va3VwKTtcXG4gIDc4OlxcdFxcbiAgNzk6XFx0dm9pZCB1ZHBfdHVubmVsX3VwZGF0ZV9ncm9fcmN2KHN0cnVjdCBzb2NrICpzaywgYm9vbCBhZGQpXFxuICA4MDpcXHR7XFxuICA4MTpcXHRcXHRzdHJ1Y3QgdWRwX3R1bm5lbF90eXBlX2VudHJ5ICpjdXIgPSBOVUxMO1xcbiAgODI6XFx0XFx0c3RydWN0IHVkcF9zb2NrICp1cCA9IHVkcF9zayhzayk7XFxuICA4MzpcXHRcXHRpbnQgaSwgb2xkX2dyb190eXBlX25yO1xcbiAgODQ6XFx0XFxuICA4NTpcXHRcXHRpZiAoIVVEUF9NQVhfVFVOTkVMX1RZUEVTIHx8ICF1cC1cXHUwMDNlZ3JvX3JlY2VpdmUpXFxuICA4NjpcXHRcXHRcXHRyZXR1cm47XFxuICA4NzpcXHRcXG4gIDg4OlxcdFxcdG11dGV4X2xvY2soXFx1MDAyNnVkcF90dW5uZWxfZ3JvX3R5cGVfbG9jayk7XFxuICA4OTpcXHRcXG4gIDkwOlxcdFxcdC8qIENoZWNrIGlmIHRoZSBzdGF0aWMgY2FsbCBpcyBwZXJtYW5lbnRseSBkaXNhYmxlZC4gKi9cXG4gIDkxOlxcdFxcdGlmICh1ZHBfdHVubmVsX2dyb190eXBlX25yIFxcdTAwM2UgVURQX01BWF9UVU5ORUxfVFlQRVMpXFxuICA5MjpcXHRcXHRcXHRnb3RvIG91dDtcXG4gIDkzOlxcdFxcbiAgOTQ6XFx0XFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIHVkcF90dW5uZWxfZ3JvX3R5cGVfbnI7IGkrKylcXG4gIDk1OlxcdFxcdFxcdGlmICh1ZHBfdHVubmVsX2dyb190eXBlc1tpXS5ncm9fcmVjZWl2ZSA9PSB1cC1cXHUwMDNlZ3JvX3JlY2VpdmUpXFxuICA5NjpcXHRcXHRcXHRcXHRjdXIgPSBcXHUwMDI2dWRwX3R1bm5lbF9ncm9fdHlwZXNbaV07XFxuICA5NzpcXHRcXG4gIDk4OlxcdFxcdG9sZF9ncm9fdHlwZV9uciA9IHVkcF90dW5uZWxfZ3JvX3R5cGVfbnI7XFxuICA5OTpcXHRcXHRpZiAoYWRkKSB7XFxuIDEwMDpcXHRcXHRcXHQvKlxcbiAxMDE6XFx0XFx0XFx0ICogVXBkYXRlIHRoZSBtYXRjaGluZyBlbnRyeSwgaWYgZm91bmQsIG9yIGFkZCBhIG5ldyBvbmVcXG4gMTAyOlxcdFxcdFxcdCAqIGlmIG5lZWRlZFxcbiAxMDM6XFx0XFx0XFx0ICovXFxuIDEwNDpcXHRcXHRcXHRpZiAoY3VyKSB7XFxuIDEwNTpcXHRcXHRcXHRcXHRyZWZjb3VudF9pbmMoXFx1MDAyNmN1ci1cXHUwMDNlY291bnQpO1xcbiAxMDY6XFx0XFx0XFx0XFx0Z290byBvdXQ7XFxuIDEwNzpcXHRcXHRcXHR9XFxuIDEwODpcXHRcXG4gMTA5OlxcdFxcdFxcdGlmICh1bmxpa2VseSh1ZHBfdHVubmVsX2dyb190eXBlX25yID09IFVEUF9NQVhfVFVOTkVMX1RZUEVTKSkge1xcbiAxMTA6XFx0XFx0XFx0XFx0cHJfZXJyX29uY2UoXFxcIlRvbyBtYW55IFVEUCB0dW5uZWwgdHlwZXMsIHBsZWFzZSBpbmNyZWFzZSBVRFBfTUFYX1RVTk5FTF9UWVBFU1xcXFxuXFxcIik7XFxuIDExMTpcXHRcXHRcXHRcXHQvKiBFbnN1cmUgc3RhdGljIGNhbGwgd2lsbCBuZXZlciBiZSBlbmFibGVkICovXFxuIDExMjpcXHRcXHRcXHRcXHR1ZHBfdHVubmVsX2dyb190eXBlX25yID0gVURQX01BWF9UVU5ORUxfVFlQRVMgKyAxO1xcbiAxMTM6XFx0XFx0XFx0fSBlbHNlIHtcXG4gMTE0OlxcdFxcdFxcdFxcdGN1ciA9IFxcdTAwMjZ1ZHBfdHVubmVsX2dyb190eXBlc1t1ZHBfdHVubmVsX2dyb190eXBlX25yKytdO1xcbiAxMTU6XFx0XFx0XFx0XFx0cmVmY291bnRfc2V0KFxcdTAwMjZjdXItXFx1MDAzZWNvdW50LCAxKTtcXG4gMTE2OlxcdFxcdFxcdFxcdGN1ci1cXHUwMDNlZ3JvX3JlY2VpdmUgPSB1cC1cXHUwMDNlZ3JvX3JlY2VpdmU7XFxuIDExNzpcXHRcXHRcXHR9XFxuIDExODpcXHRcXHR9IGVsc2Uge1xcbiAxMTk6XFx0XFx0XFx0LypcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDdUMDI6NTk6MDQuNzY1MTMxOTI2WiIsIlNlcSI6MzMsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjQxODY2NjAwMzQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBVRFAgVHVubmVsIEdSTyBSZWNlaXZlIE9wdGltaXphdGlvbiBSZW1vdmFsKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBJbiBgdWRwX3R1bm5lbF9ncm9fcmN2YCwgdGhleSd2ZSBkaXRjaGVkIHRoZSBzdGF0aWMgYnJhbmNoL2NhbGwgb3B0aW1pemF0aW9uIGluIGZhdm9yIG9mIGEgZGlyZWN0IGNhbGwgdGhyb3VnaCBgY2FsbF9ncm9fcmVjZWl2ZV9za2AuIEkgc2VlIHRoYXQgdGhlIGAjZWxzZWAgcGF0aCwgd2hlbiB0aGUgc3RhdGljIGNhbGwgd2Fzbid0IGFjdGl2ZSwgKmFscmVhZHkqIHVzZWQgYGNhbGxfZ3JvX3JlY2VpdmVfc2tgLiBTbyBpdCBsb29rcyBsaWtlIGEgc2ltcGxpZmljYXRpb24uXG5cbk5vdywgbGV0J3MgcXVpY2tseSB0aWNrIHRocm91Z2ggdGhlIHBvdGVudGlhbCBwcm9ibGVtcy4gQXJlIHdlIHNlbmRpbmcgYW55IGtlcm5lbCBzdHJ1Y3R1cmVzIHRvIHVzZXJzcGFjZT8gTm8uIFVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzIG9yIHN0cnVjdCBmaWVsZHM/IE5vcGUuIEFueSBmYW5jeSBkYXRhIHN0cnVjdHVyZSBhbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uPyBOZWdhdGl2ZS4gQW5kIGRlZmluaXRlbHkgbm90aGluZyBmdW5reSB3aXRoIGJvdW5kcyBjaGVja3Mgb3IgYnVmZmVyIGxlbmd0aHMgdGhhdCBjb3VsZCBsZWFrIGRhdGEuXG5cblRoaXMgcmVhbGx5IGxvb2tzIGxpa2UgYSBwZXJmb3JtYW5jZSBvcHRpbWl6YXRpb24gcmVtb3ZhbCwgb3IgcGVyaGFwcyBhIHNpbXBsaWZpY2F0aW9uLCBpbiB0aGUgVURQIHR1bm5lbCBHUk8gcmVjZWl2ZSBwYXRoLiBgY2FsbF9ncm9fcmVjZWl2ZV9za2AgaXMganVzdCBhIHdyYXBwZXIgYXJvdW5kIHRoZSBmdW5jdGlvbiBwb2ludGVyIGNhbGwgZm9yIGBza2JfZ3JvX3JlY2VpdmVgLCBzbyB3ZSdyZSBqdXN0IHRhbGtpbmcgYWJvdXQgaW5kaXJlY3QgY2FsbHMuXG5cbk5vdywgbGV0J3MgZ2V0IHNlcmlvdXMgYW5kIGNoZWNrIGZvciBhbnkgbWVtb3J5IHNoZW5hbmlnYW5zLiBObyBhbGxvY2F0aW9uLCBubyBzdHJ1Y3R1cmUgY29waWVzLCBubyB1bmluaXRpYWxpemVkIGZpZWxkcywgYW5kIGRlZmluaXRlbHkgbm8gaW5mb3JtYXRpb24gbGVha3MuIFdlJ3JlIGNsZWFyIG9uIG1lbW9yeSBzYWZldHkgaGVyZS5cblxuQWxyaWdodCwgbGV0J3MgY29uZmlybSB0aGUgS01TQU4gc2l0dWF0aW9uLiBgTmVlZHNLTVNBTiA9IGZhbHNlYC4gV2UgZG9uJ3QgbmVlZCBkZWRpY2F0ZWQgS01TQU4gZnV6emluZy4gVGhlIHBhdGNoIGlzICpyZW1vdmluZyogY29tcGxleGl0eSwgaXQncyBub3QgaW50cm9kdWNpbmcgYW55IG5ldyBtZW1vcnktcmVsYXRlZCByaXNrLiBXZSBhcmVuJ3QgYWxsb2NhdGluZyBtZW1vcnkgb3Igc2VuZGluZyBkYXRhIHRvIHVzZXIgc3BhY2Ugb3IgYW55IG9mIHRoZSBvdGhlciBjb21tb24gS01TQU4gcGl0ZmFsbHMuIFN0YW5kYXJkIEtBU0FOIGFuZCBvdGhlciBzYW5pdGl6ZXJzIHdpbGwgYmUgcGVyZmVjdGx5IGZpbmUgZm9yIHRlc3RpbmcgbmV0d29yayBwYWNrZXQgcHJvY2Vzc2luZyBhbmQgY29udHJvbCBmbG93LlxuXG5Pa2F5LCB0aGF0J3MgZW5vdWdoIGFuYWx5c2lzLCBsZXQncyBjYWxsIGBzZXQtcmVzdWx0c2AuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjU3MDEsIk91dHB1dFRva2VucyI6MTIzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDA2LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDdUMDI6NTk6MDguOTUxNzk1MDRaIiwiU2VxIjozNCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyOTA1MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIHJlbW92ZXMgdGhlIHN0YXRpYyBjYWxsIGJyYW5jaCBvcHRpbWl6YXRpb24gaW4gYHVkcF90dW5uZWxfZ3JvX3JjdigpYCwgcmV2ZXJ0aW5nIHRvIGNhbGxpbmcgYGNhbGxfZ3JvX3JlY2VpdmVfc2sodWRwX3NrKHNrKS1cXHUwMDNlZ3JvX3JlY2VpdmUsIHNrLCBoZWFkLCBza2IpYCB1bmNvbmRpdGlvbmFsbHkuIFRoZSBjaGFuZ2UgZG9lcyBub3QgaW50cm9kdWNlIG9yIG1vZGlmeSBhbnkgbWVtb3J5IGFsbG9jYXRpb25zLCBzdHJ1Y3R1cmUgaW5pdGlhbGl6YXRpb24sIGNvcHlpbmcgdG8gdXNlciBzcGFjZSwgb3IgYnVmZmVyIGxlbmd0aC9ib3VuZHMgbG9naWMuIE5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IG9yIGluZm9ybWF0aW9uIGxlYWsgcmlza3MgYXJlIGludHJvZHVjZWQuIFN0YW5kYXJkIHRlc3RpbmcgYW5kIEtBU0FOIGFyZSBzdWZmaWNpZW50LlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIHJlbW92ZXMgdGhlIHN0YXRpYyBjYWxsIGJyYW5jaCBvcHRpbWl6YXRpb24gaW4gYHVkcF90dW5uZWxfZ3JvX3JjdigpYCwgcmV2ZXJ0aW5nIHRvIGNhbGxpbmcgYGNhbGxfZ3JvX3JlY2VpdmVfc2sodWRwX3NrKHNrKS1cXHUwMDNlZ3JvX3JlY2VpdmUsIHNrLCBoZWFkLCBza2IpYCB1bmNvbmRpdGlvbmFsbHkuIFRoZSBjaGFuZ2UgZG9lcyBub3QgaW50cm9kdWNlIG9yIG1vZGlmeSBhbnkgbWVtb3J5IGFsbG9jYXRpb25zLCBzdHJ1Y3R1cmUgaW5pdGlhbGl6YXRpb24sIGNvcHlpbmcgdG8gdXNlciBzcGFjZSwgb3IgYnVmZmVyIGxlbmd0aC9ib3VuZHMgbG9naWMuIE5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IG9yIGluZm9ybWF0aW9uIGxlYWsgcmlza3MgYXJlIGludHJvZHVjZWQuIFN0YW5kYXJkIHRlc3RpbmcgYW5kIEtBU0FOIGFyZSBzdWZmaWNpZW50LlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0udG9rZW5zIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnVG9vbER1ciA9IHN0YXRzLnRvb2wuY291bnQgPiAwID8gKHN0YXRzLnRvb2wuZHVyYXRpb24gLyBzdGF0cy50b29sLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCgkJCWNvbnN0IGxsbVN1bWFyeUNlbGxzID0gW3N0YXRzLmxsbS5jb3VudCwgc3RhdHMubGxtLnRva2VucywgYXZnTGxtVG9rZW4sIHN0YXRzLmxsbS5kdXJhdGlvbiwgYXZnTGxtRHVyXTsKCQkJY29uc3QgdG9vbFN1bW1hcnlDZWxscyA9IFtzdGF0cy50b29sLmNvdW50LCBzdGF0cy50b29sLmR1cmF0aW9uLCBhdmdUb29sRHVyXTsKCgkJCWNvbnN0IGxsbVN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xsbV9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJbGxtU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IGxsbVRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJbGxtU3VtYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCWxsbVRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCWxsbVN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKGxsbVRyKTsKCgkJCWNvbnN0IHRvb2xTdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b29sX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQl0b29sU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IHRvb2xUciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCXRvb2xTdW1tYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCXRvb2xUci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQl0b29sU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQodG9vbFRyKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgZmlsdGVyZWRTdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gWyJsbG0iLCAidG9vbCJdLmluY2x1ZGVzKGQuVHlwZSkpOwoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdEdXJhdGlvbicpOwoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOyAKCgkJCWZpbHRlcmVkU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCQoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7CgkJCQlsZXQgdG9vbHRpcCA9IHMuTmFtZTsKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iICYmIHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCQkJCWRhdGEuYWRkUm93KFtgJHtzLlNlcX1gLCBkdXIsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUaW1lIENvbnN1bXB0aW9uIG9mIExMTS9Ub29sIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0vVG9vbCBTdGVwcycsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdTZWNvbmRzJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkdXJhdGlvbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgbGxtU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IGQuVHlwZSA9PT0gImxsbSIpOwoJCQlpZiAobGxtU3RlcHMubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdUb2tlbnMnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAnc3R5bGUnfSk7CQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOwkKCgkJCWNvbnN0IGFnZW50Q29sb3JzID0ge307CgkJCWNvbnN0IHBhbGV0dGUgPSBbJyM0Mjg1RjQnLCAnI0RCNDQzNycsICcjRjRCNDAwJywgJyMwRjlENTgnLCAnI0FCNDdCQycsICcjMDBBQ0MxJ107CgkJCWxldCBjb2xvcklkeCA9IDA7CgkJCWNvbnN0IGFnZW50TExNQ291bnRzID0ge307CgkJCWxsbVN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQlpZiAoIWFnZW50Q29sb3JzW3MuTmFtZV0pIHsKCQkJCQlhZ2VudENvbG9yc1tzLk5hbWVdID0gcGFsZXR0ZVtjb2xvcklkeCAlIHBhbGV0dGUubGVuZ3RoXTsKCQkJCQljb2xvcklkeCsrOwoJCQkJfQoKCQkJCWFnZW50TExNQ291bnRzW3MuTmFtZV0gPSAoYWdlbnRMTE1Db3VudHNbcy5OYW1lXSB8fCAwKSArIDE7CgkJCQljb25zdCBsYWJlbCA9IGAke3MuTmFtZX0tJHthZ2VudExMTUNvdW50c1tzLk5hbWVdfWA7CgkJCQljb25zdCB0b3RhbFRva2VucyA9IHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnM7CgkJCQljb25zdCBzdHlsZSA9IGBjb2xvcjogJHthZ2VudENvbG9yc1tzLk5hbWVdfWA7CgkJCQlsZXQgdG9vbHRpcCA9IGBUb3RhbCBUb2tlbnM6ICR7dG90YWxUb2tlbnN9XG4oSW46ICR7cy5JbnB1dFRva2Vuc30sIE91dDogJHtzLk91dHB1dFRva2Vuc30sIFRob3VnaHRzOiAke3MuT3V0cHV0VGhvdWdodHNUb2tlbnN9KWA7CgkJCQlpZiAocy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoKCQkJCWRhdGEuYWRkUm93KFtsYWJlbCwgdG90YWxUb2tlbnMsIHN0eWxlLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVG9rZW4gQ29uc3VtcHRpb24gYnkgTExNIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0gQ2FsbCBTZXF1ZW5jZScsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdDb25zdW1lZCBUb2tlbnMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rva2VuX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgkJbGV0IGFsbEV4cGFuZGVkID0gZmFsc2U7CgkJZnVuY3Rpb24gdG9nZ2xlQWxsRGV0YWlscygpIHsKCQkJYWxsRXhwYW5kZWQgPSAhYWxsRXhwYW5kZWQ7CgkJCWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2RldGFpbHMnKS5mb3JFYWNoKGQgPT4gewoJCQkJaWYgKGFsbEV4cGFuZGVkKSBkLnNldEF0dHJpYnV0ZSgnb3BlbicsICcnKTsKCQkJCWVsc2UgZC5yZW1vdmVBdHRyaWJ1dGUoJ29wZW4nKTsKCQkJfSk7CgkJfQoJPC9zY3JpcHQ+CgoKPC9ib2R5Pgo8L2h0bWw+Cg==" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflow28n8r[0].run-triage(0) Phase: Succeeded StartedAt: 2026-09-07 02:33:14 +0000 UTC FinishedAt: 2026-09-07 02:59:10 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "net-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git", "commit_hash": "31f961de2f90fbf52eb2d4e15b3eeaa09f9b4fc2", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "INET", "NET_UDP_TUNNEL" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "net-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git", "commit_hash": "31f961de2f90fbf52eb2d4e15b3eeaa09f9b4fc2", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "INET", "NET_UDP_TUNNEL" ], "series_id": "f1987774-e9ec-417f-9afc-3028c43df235" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "udp_tunnel_gro_rcv", "udp_gro_receive", "udp_tunnel_update_gro_rcv", "udp4_gro_receive", "udp6_gro_receive" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDAyOjU3PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0lORVQmIzM0OywKICAgICYjMzQ7TkVUX1VEUF9UVU5ORUwmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDt1ZHBfdHVubmVsX2dyb19yY3YmIzM0OywKICAgICYjMzQ7dWRwX2dyb19yZWNlaXZlJiMzNDssCiAgICAmIzM0O3VkcF90dW5uZWxfdXBkYXRlX2dyb19yY3YmIzM0OywKICAgICYjMzQ7dWRwNF9ncm9fcmVjZWl2ZSYjMzQ7LAogICAgJiMzNDt1ZHA2X2dyb19yZWNlaXZlJiMzNDsKICBdLAogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggcmVtb3ZlcyB0aGUgc3RhdGljIGNhbGwgYnJhbmNoIG9wdGltaXphdGlvbiBpbiBgdWRwX3R1bm5lbF9ncm9fcmN2KClgLCByZXZlcnRpbmcgdG8gY2FsbGluZyBgY2FsbF9ncm9fcmVjZWl2ZV9zayh1ZHBfc2soc2spLVx1MDAzZWdyb19yZWNlaXZlLCBzaywgaGVhZCwgc2tiKWAgdW5jb25kaXRpb25hbGx5LiBUaGUgY2hhbmdlIGRvZXMgbm90IGludHJvZHVjZSBvciBtb2RpZnkgYW55IG1lbW9yeSBhbGxvY2F0aW9ucywgc3RydWN0dXJlIGluaXRpYWxpemF0aW9uLCBjb3B5aW5nIHRvIHVzZXIgc3BhY2UsIG9yIGJ1ZmZlciBsZW5ndGgvYm91bmRzIGxvZ2ljLiBObyB1bmluaXRpYWxpemVkIG1lbW9yeSBvciBpbmZvcm1hdGlvbiBsZWFrIHJpc2tzIGFyZSBpbnRyb2R1Y2VkLiBTdGFuZGFyZCB0ZXN0aW5nIGFuZCBLQVNBTiBhcmUgc3VmZmljaWVudC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIFVEUCB0dW5uZWwgR1JPIHJlY2VpdmUgcGF0aCAodWRwX3R1bm5lbF9ncm9fcmN2KSBpbiBuZXQvaXB2NC91ZHBfb2ZmbG9hZC5jLCByZW1vdmluZyB0aGUgc3RhdGljIGNhbGwgYnJhbmNoIGluIGZhdm9yIG9mIGRpcmVjdGx5IGludm9raW5nIGNhbGxfZ3JvX3JlY2VpdmVfc2suIFRoaXMgbW9kaWZpZXMgY29yZSBuZXR3b3JraW5nIEdSTyBleGVjdXRpb24gZmxvdyBhbmQgcmVjdXJzaW9uIGNoZWNrcywgd2hpY2ggYXJlIGZ1bGx5IHJlYWNoYWJsZSBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgdXNpbmcgVURQIHR1bm5lbHMsIHZpcnR1YWwgaW50ZXJmYWNlcywgYW5kIEdSTy1lbmFibGVkIHNvY2tldHMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDcgMDI6NTc8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCBjNWQ2MWJkNjM2Mjg0OWIxOGU5NTJmNjJmZjMyOTdlMWM5ZmU0YjhmXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIE1vbiBTZXAgNyAwMjo1Nzo1OCAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9uZXQvaXB2NC91ZHBfb2ZmbG9hZC5jIGIvbmV0L2lwdjQvdWRwX29mZmxvYWQuY1xuaW5kZXggY2YwN2MzYzY2MTFhMi4uMzA2NDlmNDA3YTc4OCAxMDA2NDRcbi0tLSBhL25ldC9pcHY0L3VkcF9vZmZsb2FkLmNcbiYjNDM7JiM0MzsmIzQzOyBiL25ldC9pcHY0L3VkcF9vZmZsb2FkLmNcbkBAIC0xNDgsMTMgJiM0MzsxNDgsNiBAQCBzdGF0aWMgc3RydWN0IHNrX2J1ZmYgKnVkcF90dW5uZWxfZ3JvX3JjdihzdHJ1Y3Qgc29jayAqc2ssXG4gXHRcdFx0XHRcdCAgc3RydWN0IGxpc3RfaGVhZCAqaGVhZCxcbiBcdFx0XHRcdFx0ICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuIHtcbi1cdGlmIChzdGF0aWNfYnJhbmNoX2xpa2VseShcdTAwMjZ1ZHBfdHVubmVsX3N0YXRpY19jYWxsKSkge1xuLVx0XHRpZiAodW5saWtlbHkoZ3JvX3JlY3Vyc2lvbl9pbmNfdGVzdChza2IpKSkge1xuLVx0XHRcdE5BUElfR1JPX0NCKHNrYiktXHUwMDNlZmx1c2ggfD0gMTtcbi1cdFx0XHRyZXR1cm4gTlVMTDtcbi1cdFx0fVxuLVx0XHRyZXR1cm4gc3RhdGljX2NhbGwodWRwX3R1bm5lbF9ncm9fcmN2KShzaywgaGVhZCwgc2tiKTtcbi1cdH1cbiBcdHJldHVybiBjYWxsX2dyb19yZWNlaXZlX3NrKHVkcF9zayhzayktXHUwMDNlZ3JvX3JlY2VpdmUsIHNrLCBoZWFkLCBza2IpO1xuIH1cbiBcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNyAwMjo1ODwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5jb3JlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtJTkVUJiMzNDssCiAgICAmIzM0O05FVF9VRFBfVFVOTkVMJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7dWRwX3R1bm5lbF9ncm9fcmN2JiMzNDssCiAgICAmIzM0O3VkcF9ncm9fcmVjZWl2ZSYjMzQ7LAogICAgJiMzNDt1ZHBfdHVubmVsX3VwZGF0ZV9ncm9fcmN2JiMzNDssCiAgICAmIzM0O3VkcDRfZ3JvX3JlY2VpdmUmIzM0OywKICAgICYjMzQ7dWRwNl9ncm9fcmVjZWl2ZSYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgVURQIHR1bm5lbCBHUk8gcmVjZWl2ZSBwYXRoICh1ZHBfdHVubmVsX2dyb19yY3YpIGluIG5ldC9pcHY0L3VkcF9vZmZsb2FkLmMsIHJlbW92aW5nIHRoZSBzdGF0aWMgY2FsbCBicmFuY2ggaW4gZmF2b3Igb2YgZGlyZWN0bHkgaW52b2tpbmcgY2FsbF9ncm9fcmVjZWl2ZV9zay4gVGhpcyBtb2RpZmllcyBjb3JlIG5ldHdvcmtpbmcgR1JPIGV4ZWN1dGlvbiBmbG93IGFuZCByZWN1cnNpb24gY2hlY2tzLCB3aGljaCBhcmUgZnVsbHkgcmVhY2hhYmxlIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyB1c2luZyBVRFAgdHVubmVscywgdmlydHVhbCBpbnRlcmZhY2VzLCBhbmQgR1JPLWVuYWJsZWQgc29ja2V0cy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIgYW5kIHNlY3VyaXR5IGVuZ2luZWVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGV2YWx1YXRlIHdoZXRoZXIgaXQgd2FycmFudHMgZnV6emluZyB3aXRoIHN5emthbGxlci4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24gaW50ZXJuYWwgYXNzdW1wdGlvbnMuIFlvdSBtdXN0IGFjdGl2ZWx5IHVzZSB5b3VyIGNvZGUgYWNjZXNzCnRvb2xzIHRvIGluc3BlY3QgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSwgY2FsbGVycywgYW5kIHN1cnJvdW5kaW5nIGNvbnRleHQuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoxLiBDT1JFIFRSSUFHRSBQSElMT1NPUEhZCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClRoZSBnb2FsIG9mIHBhdGNoIGZ1enppbmcgaXMgdG8gZGlzY292ZXIgY3Jhc2hlcywgcmVncmVzc2lvbnMsIGV4cG9zZWQgbGF0ZW50IGJ1Z3MsCmFuZCBuZXdseSB0cmlnZ2VyZWQgYXNzZXJ0aW9ucyBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBzZXJpZXMuCgotIFJFQUNIQUJJTElUWSBJUyBUSEUgUFJJTUFSWSBHQVRFOgogIEZ1enppbmcgY2FuIG9ubHkgZGlzY292ZXIgYnVncyBpbiBjb2RlIHRoYXQgY2FuIGFjdHVhbGx5IGV4ZWN1dGUgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQKICBlbnZpcm9ubWVudHMgKEdDRSBvciBRRU1VLCB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgZGV2aWNlcyBsaWtlIFVTQiBnYWRnZXRzLCBuZXRkZXYsIHR1bi90YXApLgogIElmIHRoZSBtb2RpZmllZCBjb2RlIGlzIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSAoc2VlIFNlY3Rpb24gMiksIGl0IE1VU1QgTk9UIGJlIGZ1enplZCwKICByZWdhcmRsZXNzIG9mIHdoZXRoZXIgaXQgYWRkcyBhc3NlcnRpb25zIG9yIGNvbXBsZXggbG9naWMuCgotIERPIE5PVCBCTElORExZIFRSVVNUICYjMzQ7Tk8gRlVOQ1RJT05BTCBDSEFOR0UmIzM0OyAoTkZDSSkgT1IgJiMzNDtSRUZBQ1RPUklORyYjMzQ7IENMQUlNUzoKICBQYXRjaCBhdXRob3JzIHJvdXRpbmVseSBsYWJlbCBjaGFuZ2VzIGFzICYjMzQ7Y2xlYW51cHMmIzM0OywgJiMzNDtyZWZhY3RvcmluZ3MmIzM0Oywgb3Igc3RhdGUKICAmIzM0O05vIGZ1bmN0aW9uYWwgY2hhbmdlIGludGVuZGVkJiMzNDsuIERvIE5PVCB0YWtlIHRoZXNlIGNsYWltcyBhdCBmYWNlIHZhbHVlLgogIENvZGUgcmVmYWN0b3JpbmdzIHRoYXQgcmVhcnJhbmdlIGxvZ2ljLCBpbnRyb2R1Y2UgaGVscGVyIGZ1bmN0aW9ucywgb3IgYWx0ZXIgc3RhdGUgbWFuYWdlbWVudAogIGluIGNvcmUgc3Vic3lzdGVtcyBmcmVxdWVudGx5IGludHJvZHVjZSBzdWJ0bGUgc2VtYW50aWMgc2hpZnRzIG9yIHVuY292ZXIgbGF0ZW50IGtlcm5lbCBidWdzLgogIElmIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUgaXMgbW9kaWZpZWQgb3IgcmVmYWN0b3JlZCwgaXQgTVVTVCBiZSBmdXp6ZWQuCgotIE5FVyBPUiBNT0RJRklFRCBBU1NFUlRJT05TIElOIFJFQUNIQUJMRSBDT0RFIE1VU1QgQkUgRlVaWkVEOgogIFdoZW4gYSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzIHJ1bnRpbWUgY2hlY2tzIG9yIGFzc2VydGlvbnMgKGUuZy4sIFdBUk5fT04qLCBWTV9XQVJOX09OKiwKICBCVUdfT04qLCBsb2NrZGVwX2Fzc2VydCopIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLCBpdCBlbmZvcmNlcyBuZXcgb3Igc3RyaWN0ZXIgaW52YXJpYW50cy4KICBFdmVuIGlmIHRoZSBhdXRob3IgYmVsaWV2ZXMgdGhlIGludmFyaWFudCBhbHdheXMgaG9sZHMsIGZ1enppbmcgaXMgZXNzZW50aWFsIHRvIHZlcmlmeSB3aGV0aGVyCiAgYW4gdW51c3VhbCBzZXF1ZW5jZSBvZiBvcGVyYXRpb25zIGNhbiB2aW9sYXRlIGl0LgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KMi4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPWZhbHNlIChORUdBVElWRSBDUklURVJJQSkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBPTkxZIElGIGFsbCBtb2RpZmllZCBjb2RlIGZhbGxzIHN0cmljdGx5IGludG8gb25lIG9yIG1vcmUgb2YgdGhlc2UgY2F0ZWdvcmllczoKCi0gTm9uLWtlcm5lbCBhbmQgbm9uLWV4ZWN1dGFibGUgY2hhbmdlczoKICAqIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIGNvbW1lbnRzLCBvciBzcGVsbGluZyBmaXhlcy4KICAqIFVzZXItc3BhY2UgZGlyZWN0b3JpZXMsIHNlbGYtdGVzdHMsIHNhbXBsZXMsIG9yIHNjcmlwdHMgKGUuZy4sIHRvb2xzLywgc2FtcGxlcy8sIHNjcmlwdHMvLCB1c3IvKQogICAgdGhhdCBkbyBub3QgYWZmZWN0IHRoZSBjb21waWxlZCBrZXJuZWwgaW1hZ2UgKHZtbGludXgpIG9yIGtlcm5lbCBtb2R1bGVzLgogICogUHVyZWx5IGRlY29yYXRpdmUgbG9nZ2luZyAoZS5nLiwgbWVzc2FnZSBzdHJpbmdzIGluIHByX2VyciwgcHJpbnRrLCBkZXZfaW5mbykgb3IgdHJhY2Vwb2ludHMKICAgIHRoYXQgZG8gbm90IGFsdGVyIGNvbnRyb2wgZmxvdyBvciBkYXRhIHN0cnVjdHVyZXMuCiAgKiBCdWlsZCBzeXN0ZW0gb3IgS2NvbmZpZyBjaGFuZ2VzIHRoYXQgZG8gbm90IGFsdGVyIGNvbXBpbGVkIEMgbG9naWMuCi0gU3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIGhhcmR3YXJlOgogICogVmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoZXMsIFNtYXJ0TklDcywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLAogICAgaW9uaWMsIGFtZGdwdSkgcmVxdWlyaW5nIHBoeXNpY2FsIEFTSUMvUENJZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4KLSBVbnJlYWNoYWJsZSBleGVjdXRpb24gcGF0aHM6CiAgKiBEcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzICgucmVtb3ZlLCAuc2h1dGRvd24sIHBjaV91bnJlZ2lzdGVyX2RyaXZlcikgZXhlY3V0ZWQgb25seSBkdXJpbmcKICAgIHBoeXNpY2FsIFBDSSBob3QtdW5wbHVnIG9yIG1hbnVhbCBzeXNmcyBkcml2ZXIgdW5iaW5kaW5nLgogICogQ29kZSBwYXRocyBleGNsdXNpdmUgdG8gYXJjaGl0ZWN0dXJlcyBvdGhlciB0aGFuIHRoZSB0YXJnZXQgYXJjaGl0ZWN0dXJlLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KMy4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPXRydWUgKFBPU0lUSVZFIENSSVRFUklBKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSZXR1cm4gV29ydGhGdXp6aW5nPXRydWUgd2hlbmV2ZXIgdGhlIHBhdGNoIHRvdWNoZXMgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSwgaW5jbHVkaW5nOgotIENvcmUgU3Vic3lzdGVtczoKICAqIEFueSBsb2dpYyBtb2RpZmljYXRpb25zIGluIG1lbW9yeSBtYW5hZ2VtZW50IChtbS8pLCBzeW5jaHJvbml6YXRpb24vbG9ja2luZyAoa2VybmVsL2xvY2tpbmcvKSwKICAgIEJQRiwgc2NoZWR1bGVyLCBjb3JlIG5ldHdvcmtpbmcsIFZGUywgb3Igc3lzY2FsbCBoYW5kbGluZy4KLSBSZWZhY3RvcmluZ3MgYW5kIENvZGUgQ2xlYW51cHM6CiAgKiBBbnkgcmVzdHJ1Y3R1cmluZyBvZiByZWFjaGFibGUgZGF0YSBzdHJ1Y3R1cmVzLCBoZWxwZXIgYWJzdHJhY3Rpb25zLCBvciBhbGdvcml0aG0gZmxvd3MuCi0gUnVudGltZSBBc3NlcnRpb25zIGFuZCBEZWZlbnNpdmUgQ2hlY2tzOgogICogQW55IGludHJvZHVjdGlvbiBvciBhbHRlcmF0aW9uIG9mIGFzc2VydGlvbnMgKFdBUk5fT04qLCBWTV9XQVJOX09OKiwgQlVHX09OKiwgZXRjLikgaW4gcmVhY2hhYmxlIHBhdGhzLgotIFJlYWNoYWJsZSBEcml2ZXJzIGFuZCBQcm90b2NvbHM6CiAgKiBEcml2ZXJzIGFjY2Vzc2libGUgdmlhIHZpcnR1YWwgYnVzZXMgKHZpcnRpbywgVVNCIGdhZGdldCwgbG9vcGJhY2ssIG5ldGxpbmssIGJpbmRlciwgc29ja2V0cywgZXRjLikuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQo0LiBFWFRSQUNUSU5HIEZvY3VzU3ltYm9scyAoUFJFVkVOVElORyBESUxVVElPTikKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KV2hlbiBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IG11c3QgZXh0cmFjdCBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIGludG8gRm9jdXNTeW1ib2xzIHRvIGd1aWRlIHRoZSBmdXp6ZXI6CgotIEFWT0lEIFVCSVFVSVRPVVMgTElGRUNZQ0xFIEhPVC1QQVRIUzoKICBEbyBOT1QgbGlzdCBnZW5lcmljLCB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYWxsZWQgYnkgYWxtb3N0IGV2ZXJ5IHByb2dyYW0gaW4gdGhlIGNvcnB1cwogIChpbmNsdWRpbmcsIGJ1dCBub3QgbGltaXRlZCB0bzogZ2VuZXJhbCBtZW1vcnkgYWxsb2NhdG9ycyBhbmQgZGVhbGxvY2F0b3JzLCBwYWdlIGZhdWx0CiAgYW5kIHRyYXAgaGFuZGxlcnMsIG9yIGNvcmUgc3luY2hyb25pemF0aW9uIHByaW1pdGl2ZXM7IHRoaXMgaXMgbm90IGFuIGV4aGF1c3RpdmUgbGlzdCkuCiAgTGlzdGluZyB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYXVzZXMgdGhlIGZ1enplciB0byBjbGFzc2lmeSB0aG91c2FuZHMgb2YgdW5yZWxhdGVkIHRlc3RzIGFzICYjMzQ7Zm9jdXNlZCYjMzQ7LAogIHdoaWNoIHNldmVyZWx5IGRpbHV0ZXMgZnV6emluZyBlZmZvcnQgYXdheSBmcm9tIHRoZSBhY3R1YWwgY2hhbmdlcy4KCi0gVEFSR0VUIFNQRUNJRklDIEZFQVRVUkUgTE9HSUMgQU5EIEVOVFJZUE9JTlRTOgogIExpc3QgZnVuY3Rpb25zIHRoYXQgc3BlY2lmaWNhbGx5IGltcGxlbWVudCB0aGUgbG9naWMgYmVpbmcgYWRkZWQgb3IgYWx0ZXJlZCwgb3IgZGlyZWN0IEFQSSBlbnRyeXBvaW50cwogIGZvciB0aGUgc3Vic3lzdGVtIGZlYXR1cmUgdW5kZXIgcmV2aWV3LgoKLSBIQU5ETElORyBTVEFUSUMgSU5MSU5FIEZVTkNUSU9OUyBJTiBIRUFERVJTICguaCk6CiAgQ29tcGlsZXItaW5saW5lZCBzdGF0aWMgZnVuY3Rpb25zIChzdWNoIGFzIHN0YXRpYyBpbmxpbmVzIGluIG1tLyouaCBvciBpbmNsdWRlL2xpbnV4LyouaCkgbGFjawogIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMgaW4gdm1saW51eCBhbmQgY2Fubm90IGJlIHRhcmdldGVkIGRpcmVjdGx5IGJ5IHN5bWJvbCBjb3ZlcmFnZSBmaWx0ZXJzLgogIElmIHRoZSBjaGFuZ2VzIGFyZSBwcmltYXJpbHkgaW4gc3RhdGljIGlubGluZSBoZWxwZXJzLCBpZGVudGlmeSBub24tc3RhdGljLCBmZWF0dXJlLXNwZWNpZmljIGNhbGxlcgogIGZ1bmN0aW9ucyBpbiAuYyBmaWxlcyB0aGF0IGV4ZXJjaXNlIHRoZW0gKGF2b2lkaW5nIHViaXF1aXRvdXMgbGlmZWN5Y2xlIHdyYXBwZXJzKS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjUuIElERU5USUZZSU5HIEVuYWJsZUNvbmZpZ3MKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSBjb21waWxlIGFuZCByZWFjaCB0aGUgbW9kaWZpZWQgY29kZToKLSBJbnNwZWN0IEtjb25maWcgZmlsZXMgYW5kICNpZmRlZiBndWFyZHM7IGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgotIENoZWNrICYjMzQ7ZGVwZW5kcyBvbiYjMzQ7IGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncyBuZWVkZWQuCi0gU3RyaXAgYW55ICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0CgpGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IGM1ZDYxYmQ2MzYyODQ5YjE4ZTk1MmY2MmZmMzI5N2UxYzlmZTRiOGYKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgTW9uIFNlcCA3IDAyOjU3OjU4IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvbmV0L2lwdjQvdWRwX29mZmxvYWQuYyBiL25ldC9pcHY0L3VkcF9vZmZsb2FkLmMKaW5kZXggY2YwN2MzYzY2MTFhMi4uMzA2NDlmNDA3YTc4OCAxMDA2NDQKLS0tIGEvbmV0L2lwdjQvdWRwX29mZmxvYWQuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvaXB2NC91ZHBfb2ZmbG9hZC5jCkBAIC0xNDgsMTMgJiM0MzsxNDgsNiBAQCBzdGF0aWMgc3RydWN0IHNrX2J1ZmYgKnVkcF90dW5uZWxfZ3JvX3JjdihzdHJ1Y3Qgc29jayAqc2ssCiAJCQkJCSAgc3RydWN0IGxpc3RfaGVhZCAqaGVhZCwKIAkJCQkJICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQogewotCWlmIChzdGF0aWNfYnJhbmNoX2xpa2VseSgmYW1wO3VkcF90dW5uZWxfc3RhdGljX2NhbGwpKSB7Ci0JCWlmICh1bmxpa2VseShncm9fcmVjdXJzaW9uX2luY190ZXN0KHNrYikpKSB7Ci0JCQlOQVBJX0dST19DQihza2IpLSZndDtmbHVzaCB8PSAxOwotCQkJcmV0dXJuIE5VTEw7Ci0JCX0KLQkJcmV0dXJuIHN0YXRpY19jYWxsKHVkcF90dW5uZWxfZ3JvX3Jjdikoc2ssIGhlYWQsIHNrYik7Ci0JfQogCXJldHVybiBjYWxsX2dyb19yZWNlaXZlX3NrKHVkcF9zayhzayktJmd0O2dyb19yZWNlaXZlLCBzaywgaGVhZCwgc2tiKTsKIH0KIAo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNyAwMjo1ODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyOTQ2CgkJCQkJCQlvdXRwdXQ6IDM5CgkJCQkJCQl0aG91Z2h0czogNzMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBDb2RlIE1vZGlmaWNhdGlvbioqCgpPa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMuIEZpcnN0LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGlzIGRpZmYuIEl0IGxvb2tzIGxpa2UgdGhlIGNoYW5nZSBpcyB3aXRoaW4gYG5ldC9pcHY0L3VkcF9vZmZsb2FkLmNgLCBzcGVjaWZpY2FsbHkgaW4gdGhlIGB1ZHBfdHVubmVsX2dyb19yY3ZgIGZ1bmN0aW9uLiBUaGF0JiMzOTtzIHRoZSBzdGFydGluZyBwb2ludC4gSSB3YW50IHRvIHplcm8gaW4gb24gd2hhdCYjMzk7cyBiZWVuIGFsdGVyZWQgaW4gdGhhdCBzcGVjaWZpYyBhcmVhLiBHaXZlbiB0aGUgcG90ZW50aWFsIGltcGFjdCBvbiBvZmZsb2FkaW5nLCBJIHNob3VsZCBiZSBsb29raW5nIGF0IGhvdyBVRFAgdHVubmVsIEdSTyBpcyBoYW5kbGVkLgoKTm93LCBJJiMzOTtsbCB1c2UgYHJlYWQtZmlsZWAgdG8gcGlucG9pbnQgdGhlIGNyaXRpY2FsIGxpbmUuIEkmIzM5O2xsIGNoZWNrIGBuZXQvaXB2NC91ZHBfb2ZmbG9hZC5jYCBhcm91bmQgbGluZSAxNDguIFRoYXQgc2hvdWxkIHByb3ZpZGUgdGhlIGltbWVkaWF0ZSBjb250ZXh0IG5lZWRlZCB0byBkZXRlcm1pbmUgd2hhdCYjMzk7cyBiZWVuIGNoYW5nZWQsIGFuZCB3aHksIGFuZCBtb3N0IGltcG9ydGFudGx5LCB1bmRlcnN0YW5kIHRoZSBpbXBsaWNhdGlvbnMgb2YgdGhlIHBhdGNoLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDAyOjU4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L2lwdjQvdWRwX29mZmxvYWQuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDEyMCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA2MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgMTIwOlx0XHRcdCAqIFRoZSBzdGFjayBjbGVhbnVwcyBvbmx5IHN1Y2Nlc3NmdWxseSBhZGRlZCB0dW5uZWwsIHRoZVxuIDEyMTpcdFx0XHQgKiBsb29rdXAgb24gcmVtb3ZhbCBzaG91bGQgbmV2ZXIgZmFpbC5cbiAxMjI6XHRcdFx0ICovXG4gMTIzOlx0XHRcdGlmIChXQVJOX09OX09OQ0UoIWN1cikpXG4gMTI0Olx0XHRcdFx0Z290byBvdXQ7XG4gMTI1Olx0XG4gMTI2Olx0XHRcdGlmICghcmVmY291bnRfZGVjX2FuZF90ZXN0KFx1MDAyNmN1ci1cdTAwM2Vjb3VudCkpXG4gMTI3Olx0XHRcdFx0Z290byBvdXQ7XG4gMTI4Olx0XG4gMTI5Olx0XHRcdC8qIEF2b2lkIGdhcHMsIHNvIHRoYXQgdGhlIGVuYWJsZSB0dW5uZWwgaGFzIGFsd2F5cyBpZCAwICovXG4gMTMwOlx0XHRcdCpjdXIgPSB1ZHBfdHVubmVsX2dyb190eXBlc1stLXVkcF90dW5uZWxfZ3JvX3R5cGVfbnJdO1xuIDEzMTpcdFx0fVxuIDEzMjpcdFxuIDEzMzpcdFx0aWYgKHVkcF90dW5uZWxfZ3JvX3R5cGVfbnIgPT0gMSkge1xuIDEzNDpcdFx0XHRzdGF0aWNfY2FsbF91cGRhdGUodWRwX3R1bm5lbF9ncm9fcmN2LFxuIDEzNTpcdFx0XHRcdFx0ICAgdWRwX3R1bm5lbF9ncm9fdHlwZXNbMF0uZ3JvX3JlY2VpdmUpO1xuIDEzNjpcdFx0XHRzdGF0aWNfYnJhbmNoX2VuYWJsZShcdTAwMjZ1ZHBfdHVubmVsX3N0YXRpY19jYWxsKTtcbiAxMzc6XHRcdH0gZWxzZSBpZiAob2xkX2dyb190eXBlX25yID09IDEpIHtcbiAxMzg6XHRcdFx0c3RhdGljX2JyYW5jaF9kaXNhYmxlKFx1MDAyNnVkcF90dW5uZWxfc3RhdGljX2NhbGwpO1xuIDEzOTpcdFx0XHRzdGF0aWNfY2FsbF91cGRhdGUodWRwX3R1bm5lbF9ncm9fcmN2LCBkdW1teV9ncm9fcmN2KTtcbiAxNDA6XHRcdH1cbiAxNDE6XHRcbiAxNDI6XHRvdXQ6XG4gMTQzOlx0XHRtdXRleF91bmxvY2soXHUwMDI2dWRwX3R1bm5lbF9ncm9fdHlwZV9sb2NrKTtcbiAxNDQ6XHR9XG4gMTQ1Olx0RVhQT1JUX1NZTUJPTF9HUEwodWRwX3R1bm5lbF91cGRhdGVfZ3JvX3Jjdik7XG4gMTQ2Olx0XG4gMTQ3Olx0c3RhdGljIHN0cnVjdCBza19idWZmICp1ZHBfdHVubmVsX2dyb19yY3Yoc3RydWN0IHNvY2sgKnNrLFxuIDE0ODpcdFx0XHRcdFx0XHQgIHN0cnVjdCBsaXN0X2hlYWQgKmhlYWQsXG4gMTQ5Olx0XHRcdFx0XHRcdCAgc3RydWN0IHNrX2J1ZmYgKnNrYilcbiAxNTA6XHR7XG4gMTUxOlx0XHRyZXR1cm4gY2FsbF9ncm9fcmVjZWl2ZV9zayh1ZHBfc2soc2spLVx1MDAzZWdyb19yZWNlaXZlLCBzaywgaGVhZCwgc2tiKTtcbiAxNTI6XHR9XG4gMTUzOlx0XG4gMTU0Olx0I2Vsc2VcbiAxNTU6XHRcbiAxNTY6XHRzdGF0aWMgc3RydWN0IHNrX2J1ZmYgKnVkcF90dW5uZWxfZ3JvX3JjdihzdHJ1Y3Qgc29jayAqc2ssXG4gMTU3Olx0XHRcdFx0XHRcdCAgc3RydWN0IGxpc3RfaGVhZCAqaGVhZCxcbiAxNTg6XHRcdFx0XHRcdFx0ICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuIDE1OTpcdHtcbiAxNjA6XHRcdHJldHVybiBjYWxsX2dyb19yZWNlaXZlX3NrKHVkcF9zayhzayktXHUwMDNlZ3JvX3JlY2VpdmUsIHNrLCBoZWFkLCBza2IpO1xuIDE2MTpcdH1cbiAxNjI6XHRcbiAxNjM6XHQjZW5kaWZcbiAxNjQ6XHRcbiAxNjU6XHRzdGF0aWMgc3RydWN0IHNrX2J1ZmYgKl9fc2tiX3VkcF90dW5uZWxfc2VnbWVudChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuIDE2NjpcdFx0bmV0ZGV2X2ZlYXR1cmVzX3QgZmVhdHVyZXMsXG4gMTY3Olx0XHRzdHJ1Y3Qgc2tfYnVmZiAqKCpnc29faW5uZXJfc2VnbWVudCkoc3RydWN0IHNrX2J1ZmYgKnNrYixcbiAxNjg6XHRcdFx0XHRcdFx0ICAgICBuZXRkZXZfZmVhdHVyZXNfdCBmZWF0dXJlcyksXG4gMTY5Olx0XHRfX2JlMTYgbmV3X3Byb3RvY29sLCBib29sIGlzX2lwdjYpXG4gMTcwOlx0e1xuIDE3MTpcdFx0aW50IHRubF9obGVuID0gc2tiX2lubmVyX21hY19oZWFkZXIoc2tiKSAtIHNrYl90cmFuc3BvcnRfaGVhZGVyKHNrYik7XG4gMTcyOlx0XHRib29sIHJlbWNzdW0sIG5lZWRfY3N1bSwgb2ZmbG9hZF9jc3VtLCBnc29fcGFydGlhbDtcbiAxNzM6XHRcdHN0cnVjdCBza19idWZmICpzZWdzID0gRVJSX1BUUigtRUlOVkFMKTtcbiAxNzQ6XHRcdHUxNiBtYWNfb2Zmc2V0ID0gc2tiLVx1MDAzZW1hY19oZWFkZXI7XG4gMTc1Olx0XHRfX2JlMTYgcHJvdG9jb2wgPSBza2ItXHUwMDNlcHJvdG9jb2w7XG4gMTc2Olx0XHR1MTYgbWFjX2xlbiA9IHNrYi1cdTAwM2VtYWNfbGVuO1xuIDE3NzpcdFx0aW50IHVkcF9vZmZzZXQsIG91dGVyX2hsZW47XG4gMTc4Olx0XHRzdHJ1Y3QgdWRwaGRyICp1aDtcbiAxNzk6XHRcdF9fd3N1bSBwYXJ0aWFsO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDAyOjU4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQyMzkKCQkJCQkJCW91dHB1dDogMzgKCQkJCQkJCXRob3VnaHRzOiAzNgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBzdW1tYXJ5LCBhcyB0aG91Z2ggSSB3ZXJlIHRoaW5raW5nIHRocm91Z2ggdGhlIHByb2JsZW06CgoqKkRlbHZpbmcgaW50byB0aGUgVURQIE9mZmxvYWQgSW1wbGVtZW50YXRpb24qKgoKT2theSwgc28gSSBuZWVkIHRvIGdldCBhIGhhbmRsZSBvbiBob3cgdGhpcyBVRFAgb2ZmbG9hZCBtZWNoYW5pc20gaXMgd29ya2luZy4gSSYjMzk7bSBnb2luZyB0byBqdW1wIGludG8gYG5ldC9pcHY0L3VkcF9vZmZsb2FkLmNgLCBzcGVjaWZpY2FsbHkgZm9jdXNpbmcgb24gdGhlIGNvZGUgYXJvdW5kIGxpbmVzIDUwIHRvIDE1MC4gVGhhdCBzaG91bGQgZ2l2ZSBtZSBhIHNvbGlkIGNodW5rIG9mIHRoZSBjb3JlIGxvZ2ljIHRvIGFuYWx5emUuIEkmIzM5O20gaG9waW5nIHRvIHVuZGVyc3RhbmQgdGhlIGludGVycGxheSBiZXR3ZWVuIHRoZSBuZXR3b3JrIHN0YWNrIGFuZCBhbnkgaGFyZHdhcmUgYWNjZWxlcmF0aW9uIOKAkyBhcmUgd2UgdGFsa2luZyBjaGVja3N1bSBvZmZsb2FkLCBzZWdtZW50YXRpb24sIG9yIHNvbWV0aGluZyBtb3JlIGNvbXBsZXg/IEkgbmVlZCB0byBmaWd1cmUgb3V0IHdoYXQmIzM5O3MgaGFwcGVuaW5nIGF0IHRoZSBwYWNrZXQgcHJvY2Vzc2luZyBsZXZlbCwgZXNwZWNpYWxseSByZWdhcmRpbmcgaG93IHRoZSBrZXJuZWwgaGFuZGxlcyB0aGUgb2ZmbG9hZCBvcGVyYXRpb25zLiBJJiMzOTtsbCBiZSBsb29raW5nIGZvciBjbHVlcyBvbiBob3cgdGhlIGRyaXZlciBpbnRlcmZhY2VzIHdpdGggdGhlIG5ldHdvcmsgc3RhY2sgZm9yIFVEUCBzcGVjaWZpY2FsbHkuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDcgMDI6NTg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvaXB2NC91ZHBfb2ZmbG9hZC5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNTAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogODAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7ICA1MDpcdHN0YXRpYyBERUZJTkVfU1BJTkxPQ0sodWRwX3R1bm5lbF9ncm9fbG9jayk7XG4gIDUxOlx0XG4gIDUyOlx0dm9pZCB1ZHBfdHVubmVsX3VwZGF0ZV9ncm9fbG9va3VwKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHNvY2sgKnNrLCBib29sIGFkZClcbiAgNTM6XHR7XG4gIDU0Olx0XHRib29sIGlzX2lwdjYgPSBzay1cdTAwM2Vza19mYW1pbHkgPT0gQUZfSU5FVDY7XG4gIDU1Olx0XHRzdHJ1Y3QgdWRwX3NvY2sgKnR1cCwgKnVwID0gdWRwX3NrKHNrKTtcbiAgNTY6XHRcdHN0cnVjdCB1ZHBfdHVubmVsX2dybyAqdWRwX3R1bm5lbF9ncm87XG4gIDU3Olx0XG4gIDU4Olx0XHRzcGluX2xvY2soXHUwMDI2dWRwX3R1bm5lbF9ncm9fbG9jayk7XG4gIDU5Olx0XHR1ZHBfdHVubmVsX2dybyA9IFx1MDAyNm5ldC1cdTAwM2VpcHY0LnVkcF90dW5uZWxfZ3JvW2lzX2lwdjZdO1xuICA2MDpcdFx0aWYgKGFkZClcbiAgNjE6XHRcdFx0aGxpc3RfYWRkX2hlYWQoXHUwMDI2dXAtXHUwMDNldHVubmVsX2xpc3QsIFx1MDAyNnVkcF90dW5uZWxfZ3JvLVx1MDAzZWxpc3QpO1xuICA2MjpcdFx0ZWxzZSBpZiAodXAtXHUwMDNldHVubmVsX2xpc3QucHByZXYpXG4gIDYzOlx0XHRcdGhsaXN0X2RlbF9pbml0KFx1MDAyNnVwLVx1MDAzZXR1bm5lbF9saXN0KTtcbiAgNjQ6XHRcbiAgNjU6XHRcdGlmICh1ZHBfdHVubmVsX2dyby1cdTAwM2VsaXN0LmZpcnN0IFx1MDAyNlx1MDAyNlxuICA2NjpcdFx0ICAgICF1ZHBfdHVubmVsX2dyby1cdTAwM2VsaXN0LmZpcnN0LVx1MDAzZW5leHQpIHtcbiAgNjc6XHRcdFx0dHVwID0gaGxpc3RfZW50cnkodWRwX3R1bm5lbF9ncm8tXHUwMDNlbGlzdC5maXJzdCwgc3RydWN0IHVkcF9zb2NrLFxuICA2ODpcdFx0XHRcdFx0ICB0dW5uZWxfbGlzdCk7XG4gIDY5Olx0XG4gIDcwOlx0XHRcdHJjdV9hc3NpZ25fcG9pbnRlcih1ZHBfdHVubmVsX2dyby1cdTAwM2VzaywgKHN0cnVjdCBzb2NrICopdHVwKTtcbiAgNzE6XHRcdH0gZWxzZSB7XG4gIDcyOlx0XHRcdFJDVV9JTklUX1BPSU5URVIodWRwX3R1bm5lbF9ncm8tXHUwMDNlc2ssIE5VTEwpO1xuICA3MzpcdFx0fVxuICA3NDpcdFxuICA3NTpcdFx0c3Bpbl91bmxvY2soXHUwMDI2dWRwX3R1bm5lbF9ncm9fbG9jayk7XG4gIDc2Olx0fVxuICA3NzpcdEVYUE9SVF9TWU1CT0xfR1BMKHVkcF90dW5uZWxfdXBkYXRlX2dyb19sb29rdXApO1xuICA3ODpcdFxuICA3OTpcdHZvaWQgdWRwX3R1bm5lbF91cGRhdGVfZ3JvX3JjdihzdHJ1Y3Qgc29jayAqc2ssIGJvb2wgYWRkKVxuICA4MDpcdHtcbiAgODE6XHRcdHN0cnVjdCB1ZHBfdHVubmVsX3R5cGVfZW50cnkgKmN1ciA9IE5VTEw7XG4gIDgyOlx0XHRzdHJ1Y3QgdWRwX3NvY2sgKnVwID0gdWRwX3NrKHNrKTtcbiAgODM6XHRcdGludCBpLCBvbGRfZ3JvX3R5cGVfbnI7XG4gIDg0Olx0XG4gIDg1Olx0XHRpZiAoIVVEUF9NQVhfVFVOTkVMX1RZUEVTIHx8ICF1cC1cdTAwM2Vncm9fcmVjZWl2ZSlcbiAgODY6XHRcdFx0cmV0dXJuO1xuICA4NzpcdFxuICA4ODpcdFx0bXV0ZXhfbG9jayhcdTAwMjZ1ZHBfdHVubmVsX2dyb190eXBlX2xvY2spO1xuICA4OTpcdFxuICA5MDpcdFx0LyogQ2hlY2sgaWYgdGhlIHN0YXRpYyBjYWxsIGlzIHBlcm1hbmVudGx5IGRpc2FibGVkLiAqL1xuICA5MTpcdFx0aWYgKHVkcF90dW5uZWxfZ3JvX3R5cGVfbnIgXHUwMDNlIFVEUF9NQVhfVFVOTkVMX1RZUEVTKVxuICA5MjpcdFx0XHRnb3RvIG91dDtcbiAgOTM6XHRcbiAgOTQ6XHRcdGZvciAoaSA9IDA7IGkgXHUwMDNjIHVkcF90dW5uZWxfZ3JvX3R5cGVfbnI7IGkmIzQzOyYjNDM7KVxuICA5NTpcdFx0XHRpZiAodWRwX3R1bm5lbF9ncm9fdHlwZXNbaV0uZ3JvX3JlY2VpdmUgPT0gdXAtXHUwMDNlZ3JvX3JlY2VpdmUpXG4gIDk2Olx0XHRcdFx0Y3VyID0gXHUwMDI2dWRwX3R1bm5lbF9ncm9fdHlwZXNbaV07XG4gIDk3Olx0XG4gIDk4Olx0XHRvbGRfZ3JvX3R5cGVfbnIgPSB1ZHBfdHVubmVsX2dyb190eXBlX25yO1xuICA5OTpcdFx0aWYgKGFkZCkge1xuIDEwMDpcdFx0XHQvKlxuIDEwMTpcdFx0XHQgKiBVcGRhdGUgdGhlIG1hdGNoaW5nIGVudHJ5LCBpZiBmb3VuZCwgb3IgYWRkIGEgbmV3IG9uZVxuIDEwMjpcdFx0XHQgKiBpZiBuZWVkZWRcbiAxMDM6XHRcdFx0ICovXG4gMTA0Olx0XHRcdGlmIChjdXIpIHtcbiAxMDU6XHRcdFx0XHRyZWZjb3VudF9pbmMoXHUwMDI2Y3VyLVx1MDAzZWNvdW50KTtcbiAxMDY6XHRcdFx0XHRnb3RvIG91dDtcbiAxMDc6XHRcdFx0fVxuIDEwODpcdFxuIDEwOTpcdFx0XHRpZiAodW5saWtlbHkodWRwX3R1bm5lbF9ncm9fdHlwZV9uciA9PSBVRFBfTUFYX1RVTk5FTF9UWVBFUykpIHtcbiAxMTA6XHRcdFx0XHRwcl9lcnJfb25jZShcJiMzNDtUb28gbWFueSBVRFAgdHVubmVsIHR5cGVzLCBwbGVhc2UgaW5jcmVhc2UgVURQX01BWF9UVU5ORUxfVFlQRVNcXG5cJiMzNDspO1xuIDExMTpcdFx0XHRcdC8qIEVuc3VyZSBzdGF0aWMgY2FsbCB3aWxsIG5ldmVyIGJlIGVuYWJsZWQgKi9cbiAxMTI6XHRcdFx0XHR1ZHBfdHVubmVsX2dyb190eXBlX25yID0gVURQX01BWF9UVU5ORUxfVFlQRVMgJiM0MzsgMTtcbiAxMTM6XHRcdFx0fSBlbHNlIHtcbiAxMTQ6XHRcdFx0XHRjdXIgPSBcdTAwMjZ1ZHBfdHVubmVsX2dyb190eXBlc1t1ZHBfdHVubmVsX2dyb190eXBlX25yJiM0MzsmIzQzO107XG4gMTE1Olx0XHRcdFx0cmVmY291bnRfc2V0KFx1MDAyNmN1ci1cdTAwM2Vjb3VudCwgMSk7XG4gMTE2Olx0XHRcdFx0Y3VyLVx1MDAzZWdyb19yZWNlaXZlID0gdXAtXHUwMDNlZ3JvX3JlY2VpdmU7XG4gMTE3Olx0XHRcdH1cbiAxMTg6XHRcdH0gZWxzZSB7XG4gMTE5Olx0XHRcdC8qXG4gMTIwOlx0XHRcdCAqIFRoZSBzdGFjayBjbGVhbnVwcyBvbmx5IHN1Y2Nlc3NmdWxseSBhZGRlZCB0dW5uZWwsIHRoZVxuIDEyMTpcdFx0XHQgKiBsb29rdXAgb24gcmVtb3ZhbCBzaG91bGQgbmV2ZXIgZmFpbC5cbiAxMjI6XHRcdFx0ICovXG4gMTIzOlx0XHRcdGlmIChXQVJOX09OX09OQ0UoIWN1cikpXG4gMTI0Olx0XHRcdFx0Z290byBvdXQ7XG4gMTI1Olx0XG4gMTI2Olx0XHRcdGlmICghcmVmY291bnRfZGVjX2FuZF90ZXN0KFx1MDAyNmN1ci1cdTAwM2Vjb3VudCkpXG4gMTI3Olx0XHRcdFx0Z290byBvdXQ7XG4gMTI4Olx0XG4gMTI5Olx0XHRcdC8qIEF2b2lkIGdhcHMsIHNvIHRoYXQgdGhlIGVuYWJsZSB0dW5uZWwgaGFzIGFsd2F5cyBpZCAwICovXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDcgMDI6NTg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNTc1NwoJCQkJCQkJb3V0cHV0OiAyMgoJCQkJCQkJdGhvdWdodHM6IDUwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRob3VnaHQgcHJvY2VzcyBvbiB0aGlzOgoKKipJbnZlc3RpZ2F0aW5nIHRoZSBgdWRwX3R1bm5lbF9ncm9fcmN2YCBGdW5jdGlvbioqCgpBbHJpZ2h0LCB0aW1lIHRvIGRpdmUgaW4uIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBjYWxsIGdyYXBoIGZvciBgdWRwX3R1bm5lbF9ncm9fcmN2YC4gVGhpcyBmdW5jdGlvbiBzb3VuZHMgbGlrZSBpdCYjMzk7cyBpbnZvbHZlZCBpbiBHZW5lcmljIFJlY2VpdmUgT2ZmbG9hZCAoR1JPKSBwcm9jZXNzaW5nIGZvciBVRFAgdHVubmVscywgcHJvYmFibHkgd2l0aGluIHRoZSBJUHY0IHN0YWNrLiBTbywgSSBuZWVkIHRvIGZpZ3VyZSBvdXQgd2hlcmUgaXQmIzM5O3MgYmVpbmcgdXNlZC4gVGhlIGxvZ2ljYWwgc3RhcnRpbmcgcG9pbnQgaXMgdGhlIHNvdXJjZSBjb2RlIGl0c2VsZi4gR2l2ZW4gaXRzIG5hbWUsIGl0JiMzOTtzIGhpZ2hseSBsaWtlbHkgdG8gcmVzaWRlIHNvbWV3aGVyZSBpbiB0aGUgYG5ldC9pcHY0YCBkaXJlY3RvcnksIHNwZWNpZmljYWxseSBhcm91bmQgYHVkcF9vZmZsb2FkLmNgLCBidXQganVzdCBpbiBjYXNlLCBJIHNob3VsZCBkbyBhIG1vcmUgZ2VuZXJhbCBzZWFyY2guIE15IGluc3RpbmN0IHNheXMgSSBzaG91bGQgdXNlIGBncmVwYCB0byBxdWlja2x5IGZpbmQgYWxsIGluc3RhbmNlcyBvZiB0aGF0IGZ1bmN0aW9uIG5hbWUuIEkmIzM5O2xsIGV4ZWN1dGUgdGhlIHNlYXJjaCBub3csIGFuZCBzZWUgd2hhdCB0aGUgb3V0cHV0IHRlbGxzIG1lLiBGcm9tIHRoZXJlLCBJIGNhbiBhbmFseXplIHRoZSBjYWxsaW5nIGNvbnRleHRzIGFuZCBidWlsZCBhIGJldHRlciBtZW50YWwgbW9kZWwgb2YgaG93IHRoaXMgZnVuY3Rpb24gZml0cyBpbnRvIHRoZSBvdmVyYWxsIGRhdGEgcGF0aC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNyAwMjo1ODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt1ZHBfdHVubmVsX2dyb19yY3YmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2lwdjQvdWRwX29mZmxvYWQuYz0yMz1zdGF0aWMgc3RydWN0IHNrX2J1ZmYgKmR1bW15X2dyb19yY3Yoc3RydWN0IHNvY2sgKnNrLFxuLS1cbm5ldC9pcHY0L3VkcF9vZmZsb2FkLmMtMzAtXG5uZXQvaXB2NC91ZHBfb2ZmbG9hZC5jOjMxOnR5cGVkZWYgc3RydWN0IHNrX2J1ZmYgKigqdWRwX3R1bm5lbF9ncm9fcmN2X3QpKHN0cnVjdCBzb2NrICpzayxcbm5ldC9pcHY0L3VkcF9vZmZsb2FkLmMtMzItXHRcdFx0XHRcdFx0c3RydWN0IGxpc3RfaGVhZCAqaGVhZCxcbi0tXG5uZXQvaXB2NC91ZHBfb2ZmbG9hZC5jPTM1PXN0cnVjdCB1ZHBfdHVubmVsX3R5cGVfZW50cnkge1xubmV0L2lwdjQvdWRwX29mZmxvYWQuYzozNjpcdHVkcF90dW5uZWxfZ3JvX3Jjdl90IGdyb19yZWNlaXZlO1xubmV0L2lwdjQvdWRwX29mZmxvYWQuYy0zNy1cdHJlZmNvdW50X3QgY291bnQ7XG4tLVxubmV0L2lwdjQvdWRwX29mZmxvYWQuYy00NC1cbm5ldC9pcHY0L3VkcF9vZmZsb2FkLmM6NDU6REVGSU5FX1NUQVRJQ19DQUxMKHVkcF90dW5uZWxfZ3JvX3JjdiwgZHVtbXlfZ3JvX3Jjdik7XG5uZXQvaXB2NC91ZHBfb2ZmbG9hZC5jLTQ2LXN0YXRpYyBERUZJTkVfU1RBVElDX0tFWV9GQUxTRSh1ZHBfdHVubmVsX3N0YXRpY19jYWxsKTtcbi0tXG5uZXQvaXB2NC91ZHBfb2ZmbG9hZC5jPTc5PXZvaWQgdWRwX3R1bm5lbF91cGRhdGVfZ3JvX3JjdihzdHJ1Y3Qgc29jayAqc2ssIGJvb2wgYWRkKVxuLS1cbm5ldC9pcHY0L3VkcF9vZmZsb2FkLmMtMTMzLVx0aWYgKHVkcF90dW5uZWxfZ3JvX3R5cGVfbnIgPT0gMSkge1xubmV0L2lwdjQvdWRwX29mZmxvYWQuYzoxMzQ6XHRcdHN0YXRpY19jYWxsX3VwZGF0ZSh1ZHBfdHVubmVsX2dyb19yY3YsXG5uZXQvaXB2NC91ZHBfb2ZmbG9hZC5jLTEzNS1cdFx0XHRcdCAgIHVkcF90dW5uZWxfZ3JvX3R5cGVzWzBdLmdyb19yZWNlaXZlKTtcbi0tXG5uZXQvaXB2NC91ZHBfb2ZmbG9hZC5jLTEzOC1cdFx0c3RhdGljX2JyYW5jaF9kaXNhYmxlKFx1MDAyNnVkcF90dW5uZWxfc3RhdGljX2NhbGwpO1xubmV0L2lwdjQvdWRwX29mZmxvYWQuYzoxMzk6XHRcdHN0YXRpY19jYWxsX3VwZGF0ZSh1ZHBfdHVubmVsX2dyb19yY3YsIGR1bW15X2dyb19yY3YpO1xubmV0L2lwdjQvdWRwX29mZmxvYWQuYy0xNDAtXHR9XG4tLVxubmV0L2lwdjQvdWRwX29mZmxvYWQuYz0xNDU9RVhQT1JUX1NZTUJPTF9HUEwodWRwX3R1bm5lbF91cGRhdGVfZ3JvX3Jjdik7XG5uZXQvaXB2NC91ZHBfb2ZmbG9hZC5jLTE0Ni1cbm5ldC9pcHY0L3VkcF9vZmZsb2FkLmM6MTQ3OnN0YXRpYyBzdHJ1Y3Qgc2tfYnVmZiAqdWRwX3R1bm5lbF9ncm9fcmN2KHN0cnVjdCBzb2NrICpzayxcbm5ldC9pcHY0L3VkcF9vZmZsb2FkLmMtMTQ4LVx0XHRcdFx0XHQgIHN0cnVjdCBsaXN0X2hlYWQgKmhlYWQsXG4tLVxubmV0L2lwdjQvdWRwX29mZmxvYWQuYy0xNTUtXG5uZXQvaXB2NC91ZHBfb2ZmbG9hZC5jOjE1NjpzdGF0aWMgc3RydWN0IHNrX2J1ZmYgKnVkcF90dW5uZWxfZ3JvX3JjdihzdHJ1Y3Qgc29jayAqc2ssXG5uZXQvaXB2NC91ZHBfb2ZmbG9hZC5jLTE1Ny1cdFx0XHRcdFx0ICBzdHJ1Y3QgbGlzdF9oZWFkICpoZWFkLFxuLS1cbm5ldC9pcHY0L3VkcF9vZmZsb2FkLmM9NzY5PXN0cnVjdCBza19idWZmICp1ZHBfZ3JvX3JlY2VpdmUoc3RydWN0IGxpc3RfaGVhZCAqaGVhZCwgc3RydWN0IHNrX2J1ZmYgKnNrYixcbi0tXG5uZXQvaXB2NC91ZHBfb2ZmbG9hZC5jLTgzNi1cdHNrYl9ncm9fcG9zdHB1bGxfcmNzdW0oc2tiLCB1aCwgc2l6ZW9mKHN0cnVjdCB1ZHBoZHIpKTtcbm5ldC9pcHY0L3VkcF9vZmZsb2FkLmM6ODM3Olx0cHAgPSB1ZHBfdHVubmVsX2dyb19yY3Yoc2ssIGhlYWQsIHNrYik7XG5uZXQvaXB2NC91ZHBfb2ZmbG9hZC5jLTgzOC1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNyAwMjo1ODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA2OTEyCgkJCQkJCQlvdXRwdXQ6IDM3CgkJCQkJCQl0aG91Z2h0czogMzQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgYSBzdW1tYXJ5IG9mIG15IHRob3VnaHQgcHJvY2VzcywgYXMgcmVxdWVzdGVkOgoKKipJbnZlc3RpZ2F0aW5nIFVEUCBPZmZsb2FkIEZ1bmN0aW9uYWxpdHkqKgoKT2theSwgc28gSSBuZWVkIHRvIGRpdmUgaW50byB0aGUgVURQIG9mZmxvYWQgY29kZSwgc3BlY2lmaWNhbGx5IHdpdGhpbiB0aGUgYG5ldC9pcHY0L3VkcF9vZmZsb2FkLmNgIGZpbGUuIE15IGluaXRpYWwgZm9jdXMgaXMgZ29pbmcgdG8gYmUgb24gbGluZXMgMSB0aHJvdWdoIDUwLiBUaGF0IHNob3VsZCBnaXZlIG1lIGEgZ29vZCBvdmVydmlldyBvZiB0aGUgaW5pdGlhbCBzZXR1cCwgaW5pdGlhbGl6YXRpb24sIG9yIGFueSBlYXJseSBkZWNsYXJhdGlvbnMgYW5kIHN0cnVjdHVyZXMgcmVsZXZhbnQgdG8gVURQIG9mZmxvYWQuIEkmIzM5O20gaG9waW5nIHRvIGdldCBhIGhhbmRsZSBvbiB0aGUgY29yZSBtZWNoYW5pc21zIGZyb20gdGhlIHN0YXJ0LgoKSSBhbHNvIHdhbnQgdG8gY2hlY2sgYXJvdW5kIGxpbmUgODM3LiBCYXNlZCBvbiBteSBleHBlcmllbmNlLCB0aGF0IGxvY2F0aW9uIGxpa2VseSBoYW5kbGVzIGEgc3BlY2lmaWMgZnVuY3Rpb24gY2FsbCBvciBkYXRhIHN0cnVjdHVyZSBtYW5pcHVsYXRpb24gLSBtYXliZSByZWxhdGVkIHRvIGNoZWNrc3VtbWluZywgZnJhZ21lbnRhdGlvbiwgb3IgcGFja2V0IHRyYW5zbWlzc2lvbi4gSSYjMzk7bSBub3Qgc3VyZSwgYnV0IHRoaXMgbGluZSBudW1iZXIganVzdCBmZWVscyBsaWtlIGEgcGxhY2Ugd2hlcmUgdGhpcyBmdW5jdGlvbiB3b3VsZCBiZSBkZWZpbmVkLiBJdCYjMzk7cyBhIGtleSBmdW5jdGlvbiBmb3Igb2ZmbG9hZCBmdW5jdGlvbmFsaXR5LiBJJiMzOTttIGtlZXBpbmcgYW4gb3BlbiBtaW5kIGZvciBub3csIGJ1dCB0aGF0IGlzIG15IGN1cnJlbnQgaHlwb3RoZXNpcywgYW5kIEkmIzM5O2xsIHNlZSB3aGVyZSBteSBhbmFseXNpcyBsZWFkcyBtZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDcgMDI6NTg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvaXB2NC91ZHBfb2ZmbG9hZC5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA1MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgICAxOlx0Ly8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb3ItbGF0ZXJcbiAgIDI6XHQvKlxuICAgMzpcdCAqXHRJUFY0IEdTTy9HUk8gb2ZmbG9hZCBzdXBwb3J0XG4gICA0Olx0ICpcdExpbnV4IElORVQgaW1wbGVtZW50YXRpb25cbiAgIDU6XHQgKlxuICAgNjpcdCAqXHRVRFB2NCBHU08gc3VwcG9ydFxuICAgNzpcdCAqL1xuICAgODpcdFxuICAgOTpcdCNpbmNsdWRlIFx1MDAzY2xpbnV4L3NrYnVmZi5oXHUwMDNlXG4gIDEwOlx0I2luY2x1ZGUgXHUwMDNjbmV0L2dyby5oXHUwMDNlXG4gIDExOlx0I2luY2x1ZGUgXHUwMDNjbmV0L2dzby5oXHUwMDNlXG4gIDEyOlx0I2luY2x1ZGUgXHUwMDNjbmV0L3VkcC5oXHUwMDNlXG4gIDEzOlx0I2luY2x1ZGUgXHUwMDNjbmV0L3Byb3RvY29sLmhcdTAwM2VcbiAgMTQ6XHQjaW5jbHVkZSBcdTAwM2NuZXQvaW5ldF9jb21tb24uaFx1MDAzZVxuICAxNTpcdCNpbmNsdWRlIFx1MDAzY25ldC91ZHBfdHVubmVsLmhcdTAwM2VcbiAgMTY6XHRcbiAgMTc6XHQjaWYgSVNfRU5BQkxFRChDT05GSUdfTkVUX1VEUF9UVU5ORUwpXG4gIDE4Olx0XG4gIDE5Olx0LypcbiAgMjA6XHQgKiBEdW1teSBHUk8gdHVubmVsIGNhbGxiYWNrLCBleGlzdHMgbWFpbmx5IHRvIGF2b2lkIGRhbmdsaW5nL05VTExcbiAgMjE6XHQgKiB2YWx1ZXMgZm9yIHRoZSB1ZHAgdHVubmVsIHN0YXRpYyBjYWxsLlxuICAyMjpcdCAqL1xuICAyMzpcdHN0YXRpYyBzdHJ1Y3Qgc2tfYnVmZiAqZHVtbXlfZ3JvX3JjdihzdHJ1Y3Qgc29jayAqc2ssXG4gIDI0Olx0XHRcdFx0XHQgICAgIHN0cnVjdCBsaXN0X2hlYWQgKmhlYWQsXG4gIDI1Olx0XHRcdFx0XHQgICAgIHN0cnVjdCBza19idWZmICpza2IpXG4gIDI2Olx0e1xuICAyNzpcdFx0TkFQSV9HUk9fQ0Ioc2tiKS1cdTAwM2VmbHVzaCA9IDE7XG4gIDI4Olx0XHRyZXR1cm4gTlVMTDtcbiAgMjk6XHR9XG4gIDMwOlx0XG4gIDMxOlx0dHlwZWRlZiBzdHJ1Y3Qgc2tfYnVmZiAqKCp1ZHBfdHVubmVsX2dyb19yY3ZfdCkoc3RydWN0IHNvY2sgKnNrLFxuICAzMjpcdFx0XHRcdFx0XHRcdHN0cnVjdCBsaXN0X2hlYWQgKmhlYWQsXG4gIDMzOlx0XHRcdFx0XHRcdFx0c3RydWN0IHNrX2J1ZmYgKnNrYik7XG4gIDM0Olx0XG4gIDM1Olx0c3RydWN0IHVkcF90dW5uZWxfdHlwZV9lbnRyeSB7XG4gIDM2Olx0XHR1ZHBfdHVubmVsX2dyb19yY3ZfdCBncm9fcmVjZWl2ZTtcbiAgMzc6XHRcdHJlZmNvdW50X3QgY291bnQ7XG4gIDM4Olx0fTtcbiAgMzk6XHRcbiAgNDA6XHQjZGVmaW5lIFVEUF9NQVhfVFVOTkVMX1RZUEVTIChJU19FTkFCTEVEKENPTkZJR19HRU5FVkUpICYjNDM7IFxcXG4gIDQxOlx0XHRcdFx0ICAgICAgSVNfRU5BQkxFRChDT05GSUdfVlhMQU4pICogMiAmIzQzOyBcXFxuICA0MjpcdFx0XHRcdCAgICAgIElTX0VOQUJMRUQoQ09ORklHX05FVF9GT1UpICogMiAmIzQzOyBcXFxuICA0MzpcdFx0XHRcdCAgICAgIElTX0VOQUJMRUQoQ09ORklHX1hGUk0pICogMilcbiAgNDQ6XHRcbiAgNDU6XHRERUZJTkVfU1RBVElDX0NBTEwodWRwX3R1bm5lbF9ncm9fcmN2LCBkdW1teV9ncm9fcmN2KTtcbiAgNDY6XHRzdGF0aWMgREVGSU5FX1NUQVRJQ19LRVlfRkFMU0UodWRwX3R1bm5lbF9zdGF0aWNfY2FsbCk7XG4gIDQ3Olx0c3RhdGljIERFRklORV9NVVRFWCh1ZHBfdHVubmVsX2dyb190eXBlX2xvY2spO1xuICA0ODpcdHN0YXRpYyBzdHJ1Y3QgdWRwX3R1bm5lbF90eXBlX2VudHJ5IHVkcF90dW5uZWxfZ3JvX3R5cGVzW1VEUF9NQVhfVFVOTkVMX1RZUEVTXTtcbiAgNDk6XHRzdGF0aWMgdW5zaWduZWQgaW50IHVkcF90dW5uZWxfZ3JvX3R5cGVfbnI7XG4gIDUwOlx0c3RhdGljIERFRklORV9TUElOTE9DSyh1ZHBfdHVubmVsX2dyb19sb2NrKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDcgMDI6NTg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNzk2MwoJCQkJCQkJb3V0cHV0OiAyMQoJCQkJCQkJdGhvdWdodHM6IDMzNgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIFJlY2VudCBDaGFuZ2UgdG8gYHVkcF90dW5uZWxfZ3JvX3JjdmAqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gSSYjMzk7bSBsb29raW5nIGF0IGEgZGlmZiB3aGVyZSB0aGUgYHVkcF90dW5uZWxfZ3JvX3JjdmAgZnVuY3Rpb24gaW4gdGhlIGtlcm5lbCYjMzk7cyBVRFAgdHVubmVsaW5nIGNvZGUgaGFzIGJlZW4gbW9kaWZpZWQuIE15IGluaXRpYWwgb2JzZXJ2YXRpb24gaXMgdGhhdCBhIGNvbmRpdGlvbmFsIGJsb2NrIHdhcyByZW1vdmVkLCBzcGVjaWZpY2FsbHkgdGhlIGBpZiAoc3RhdGljX2JyYW5jaF9saWtlbHkoJmFtcDt1ZHBfdHVubmVsX3N0YXRpY19jYWxsKSlgIHNlY3Rpb24uIFRoaXMgaXMgaW50ZXJlc3RpbmcuIFByZXZpb3VzbHksIGl0IHNlZW1zIHRoaXMgZnVuY3Rpb24gZW1wbG95ZWQgYSBzdGF0aWMgY2FsbCBvciBhIGRpcmVjdCBmdW5jdGlvbiBwb2ludGVyIGp1bXAsIGxpa2VseSBmb3IgcGVyZm9ybWFuY2UgcmVhc29ucywgb3B0aW1pemluZyBmb3IgYSBjb21tb24gcGF0aC4gTm93LCB0aGUgY29kZSBkaXJlY3RseSBjYWxscyBgY2FsbF9ncm9fcmVjZWl2ZV9za2AuCgpNeSBuZXh0IHF1ZXN0aW9uIGlzIHdoeT8gV2FzIHRoaXMgb3B0aW1pemF0aW9uIGRlZW1lZCB1bm5lY2Vzc2FyeSwgYnVnZ3ksIG9yIGltcHJvdmVkIGJ5IHNvbWUgb3RoZXIgY2hhbmdlPyBXaGF0IGhhcHBlbmVkIHRvIHRoZSBzdGF0aWMgY2FsbCBvcHRpbWl6YXRpb24gaW4gdGhpcyBwYXJ0IG9mIHRoZSBrZXJuZWw/IAoKSSBhbHNvIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0IGBjYWxsX2dyb19yZWNlaXZlX3NrYCBpcyBkb2luZyBiZWNhdXNlIGl0IHNlZW1zIHRvIGJlIHRoZSBjb3JlIHdvcmsuIEl0IG1pZ2h0IGJlIGdvb2QgZm9yIG1lIHRvIGRpZyBpbnRvIGhvdyB0aGlzIGZ1bmN0aW9uIGlzIGltcGxlbWVudGVkIGJlY2F1c2UgaXQgY291bGQgaW1wYWN0IHBlcmZvcm1hbmNlIGluIGludGVyZXN0aW5nIHdheXMuIFRoZSBjaGFuZ2UgdG8ganVzdCBjYWxsIGBjYWxsX2dyb19yZWNlaXZlX3NrYCBkaXJlY3RseSBpcyBzaW1wbGUsIGJ1dCB0aGUgcmVhc29uICp3aHkqIHRoaXMgY2hhbmdlIGhhcHBlbmVkIGlzIGNydWNpYWwsIHNvIGxldCYjMzk7cyBzdGFydCBkaWdnaW5nLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNyAwMjo1ODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjYWxsX2dyb19yZWNlaXZlX3NrJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2luY2x1ZGUvbmV0L2dyby5oPTEyMT10eXBlZGVmIHN0cnVjdCBza19idWZmICooKmdyb19yZWNlaXZlX3NrX3QpKHN0cnVjdCBzb2NrICosIHN0cnVjdCBsaXN0X2hlYWQgKixcbmluY2x1ZGUvbmV0L2dyby5oLTEyMi1cdFx0XHRcdFx0ICAgIHN0cnVjdCBza19idWZmICopO1xuaW5jbHVkZS9uZXQvZ3JvLmg6MTIzOnN0YXRpYyBpbmxpbmUgc3RydWN0IHNrX2J1ZmYgKmNhbGxfZ3JvX3JlY2VpdmVfc2soZ3JvX3JlY2VpdmVfc2tfdCBjYixcbmluY2x1ZGUvbmV0L2dyby5oLTEyNC1cdFx0XHRcdFx0XHQgIHN0cnVjdCBzb2NrICpzayxcbi0tXG5uZXQvaXB2NC91ZHBfb2ZmbG9hZC5jPTE0Nz1zdGF0aWMgc3RydWN0IHNrX2J1ZmYgKnVkcF90dW5uZWxfZ3JvX3JjdihzdHJ1Y3Qgc29jayAqc2ssXG4tLVxubmV0L2lwdjQvdWRwX29mZmxvYWQuYy0xNTAte1xubmV0L2lwdjQvdWRwX29mZmxvYWQuYzoxNTE6XHRyZXR1cm4gY2FsbF9ncm9fcmVjZWl2ZV9zayh1ZHBfc2soc2spLVx1MDAzZWdyb19yZWNlaXZlLCBzaywgaGVhZCwgc2tiKTtcbm5ldC9pcHY0L3VkcF9vZmZsb2FkLmMtMTUyLX1cbi0tXG5uZXQvaXB2NC91ZHBfb2ZmbG9hZC5jPTE1Nj1zdGF0aWMgc3RydWN0IHNrX2J1ZmYgKnVkcF90dW5uZWxfZ3JvX3JjdihzdHJ1Y3Qgc29jayAqc2ssXG4tLVxubmV0L2lwdjQvdWRwX29mZmxvYWQuYy0xNTkte1xubmV0L2lwdjQvdWRwX29mZmxvYWQuYzoxNjA6XHRyZXR1cm4gY2FsbF9ncm9fcmVjZWl2ZV9zayh1ZHBfc2soc2spLVx1MDAzZWdyb19yZWNlaXZlLCBzaywgaGVhZCwgc2tiKTtcbm5ldC9pcHY0L3VkcF9vZmZsb2FkLmMtMTYxLX1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDcgMDI6NTg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogODk0NgoJCQkJCQkJb3V0cHV0OiAzNQoJCQkJCQkJdGhvdWdodHM6IDE5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHN1bW1hcnksIGFzIHRob3VnaCBJJiMzOTttIHRoaW5raW5nIHRocm91Z2ggaXQ6CgoqKkRpdmluZyBpbnRvIHRoZSBHUk8gQ29kZSoqCgpPa2F5LCBzbyBJIG5lZWQgdG8gcmVmcmVzaCBteSBtZW1vcnkgb24gdGhlIEdSTyBjb2RlLCBhbmQgSSYjMzk7bSBzdGFydGluZyB3aXRoIGBpbmNsdWRlL25ldC9ncm8uaGAsIHNwZWNpZmljYWxseSBsaW5lIDEyMy4gTGV0JiMzOTtzIHNlZSB3aGF0JiMzOTtzIGJlaW5nIGRlZmluZWQgb3IgZGVjbGFyZWQgdGhlcmUuIEkmIzM5O20gZXhwZWN0aW5nIHNvbWV0aGluZyBjb3JlLCBsaWtlbHkgYSBzdHJ1Y3QsIG1hY3JvLCBvciBmdW5jdGlvbiBwcm90b3R5cGUgcmVsYXRlZCB0byBHZW5lcmljIFJlY2VpdmUgT2ZmbG9hZC4gR2l2ZW4gdGhlIGZpbGUsIGl0JiMzOTtzIHByb2JhYmx5IGEgZGF0YSBzdHJ1Y3R1cmUgdXNlZCB0byBtYW5hZ2UgdGhlIEdSTyBjb250ZXh0LCBvciBtYXliZSBhIGZsYWcgdGhhdCBjb250cm9scyBzb21lIEdSTyBiZWhhdmlvci4gSSYjMzk7bSBleHBlY3RpbmcgaXQgdG8gcHJvdmlkZSBzb21lIGVzc2VudGlhbCBkZXRhaWxzIHJlcXVpcmVkIHRvIG9mZmxvYWQgdGhlIHByb2Nlc3Mgb2YgbWVyZ2luZyBuZXR3b3JrIHBhY2tldHMsIG9yIGl0IG1heSBjb250YWluIGEgZGVmaW5pdGlvbiBmb3IgYSBnbG9iYWwgdmFyaWFibGUgdGhhdCBjb25maWd1cmVzIGEgYmVoYXZpb3Igb2YgR1JPLiBJJiMzOTttIGFsc28gcmVhZHkgdG8gYW5hbHl6ZSBpdCBpbiBkZXB0aCwgaW5jbHVkaW5nIGRlYnVnZ2luZyBvciBtYWtpbmcgY2hhbmdlcyB0byB0aGUgY29kZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDcgMDI6NTg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtpbmNsdWRlL25ldC9ncm8uaCYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDEyMCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgMTIwOlx0XG4gMTIxOlx0dHlwZWRlZiBzdHJ1Y3Qgc2tfYnVmZiAqKCpncm9fcmVjZWl2ZV9za190KShzdHJ1Y3Qgc29jayAqLCBzdHJ1Y3QgbGlzdF9oZWFkICosXG4gMTIyOlx0XHRcdFx0XHRcdCAgICBzdHJ1Y3Qgc2tfYnVmZiAqKTtcbiAxMjM6XHRzdGF0aWMgaW5saW5lIHN0cnVjdCBza19idWZmICpjYWxsX2dyb19yZWNlaXZlX3NrKGdyb19yZWNlaXZlX3NrX3QgY2IsXG4gMTI0Olx0XHRcdFx0XHRcdFx0ICBzdHJ1Y3Qgc29jayAqc2ssXG4gMTI1Olx0XHRcdFx0XHRcdFx0ICBzdHJ1Y3QgbGlzdF9oZWFkICpoZWFkLFxuIDEyNjpcdFx0XHRcdFx0XHRcdCAgc3RydWN0IHNrX2J1ZmYgKnNrYilcbiAxMjc6XHR7XG4gMTI4Olx0XHRpZiAodW5saWtlbHkoZ3JvX3JlY3Vyc2lvbl9pbmNfdGVzdChza2IpKSkge1xuIDEyOTpcdFx0XHROQVBJX0dST19DQihza2IpLVx1MDAzZWZsdXNoIHw9IDE7XG4gMTMwOlx0XHRcdHJldHVybiBOVUxMO1xuIDEzMTpcdFx0fVxuIDEzMjpcdFxuIDEzMzpcdFx0cmV0dXJuIGNiKHNrLCBoZWFkLCBza2IpO1xuIDEzNDpcdH1cbiAxMzU6XHRcbiAxMzY6XHRzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCBza2JfZ3JvX29mZnNldChjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuIDEzNzpcdHtcbiAxMzg6XHRcdHJldHVybiBOQVBJX0dST19DQihza2IpLVx1MDAzZWRhdGFfb2Zmc2V0O1xuIDEzOTpcdH1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDcgMDI6NTg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogOTQ5OQoJCQkJCQkJb3V0cHV0OiAzOQoJCQkJCQkJdGhvdWdodHM6IDUwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRob3VnaHQgcHJvY2VzcywgYXMgaWYgSSB3ZXJlIGFuYWx5emluZyB0aGlzIGNvZGU6CgoqKkRlZXAgRGl2ZSBpbnRvIFVEUCBHUk8qKgoKT2theSwgc28gSSBuZWVkIHRvIHRyYWNlIHRoZSBwYXRoIG9mIGB1ZHBfdHVubmVsX2dyb19yY3ZgIGFuZCBmaWd1cmUgb3V0IGV4YWN0bHkgaG93IGFuZCB3aGVyZSBHZW5lcmljIFJlY2VpdmUgT2ZmbG9hZCAoR1JPKSBpcyBiZWluZyBhcHBsaWVkIGluIHRoaXMgVURQIHR1bm5lbCBzY2VuYXJpby4gTGV0JiMzOTtzIHN0YXJ0IHdpdGggYSBzb2xpZCBhcHByb2FjaC4gTXkgZmlyc3Qgc3RlcCBpcyB0byBkaWcgaW50byBgdWRwX2dyb19yZWNlaXZlYCBpbiBgbmV0L2lwdjQvdWRwX29mZmxvYWQuY2AuIFRoYXQgZnVuY3Rpb24gaXMgY3J1Y2lhbC4gS25vd2luZyB0aGF0IGZ1bmN0aW9uLCB0aGUgY2FsbCBzdGFjayB3aWxsIGJlY29tZSBvYnZpb3VzLiBUaGF0IGlzIG15IHVuZGVyc3RhbmRpbmcuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDAyOjU4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L2lwdjQvdWRwX29mZmxvYWQuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDc2NSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA4MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgNzY1Olx0XHQvKiBtaXNtYXRjaCwgYnV0IHdlIG5ldmVyIG5lZWQgdG8gZmx1c2ggKi9cbiA3NjY6XHRcdHJldHVybiBOVUxMO1xuIDc2NzpcdH1cbiA3Njg6XHRcbiA3Njk6XHRzdHJ1Y3Qgc2tfYnVmZiAqdWRwX2dyb19yZWNlaXZlKHN0cnVjdCBsaXN0X2hlYWQgKmhlYWQsIHN0cnVjdCBza19idWZmICpza2IsXG4gNzcwOlx0XHRcdFx0XHRzdHJ1Y3QgdWRwaGRyICp1aCwgc3RydWN0IHNvY2sgKnNrKVxuIDc3MTpcdHtcbiA3NzI6XHRcdHN0cnVjdCBza19idWZmICpwcCA9IE5VTEw7XG4gNzczOlx0XHRzdHJ1Y3Qgc2tfYnVmZiAqcDtcbiA3NzQ6XHRcdHN0cnVjdCB1ZHBoZHIgKnVoMjtcbiA3NzU6XHRcdHVuc2lnbmVkIGludCBvZmYgPSBza2JfZ3JvX29mZnNldChza2IpO1xuIDc3NjpcdFx0dW5zaWduZWQgaW50IHVsZW47XG4gNzc3Olx0XHRpbnQgZmx1c2ggPSAxO1xuIDc3ODpcdFxuIDc3OTpcdFx0LyogRG8gbm90IGRlYWwgd2l0aCBwYWRkZWQgb3IgbWFsaWNpb3VzIHBhY2tldHMsIHNvcnJ5ISAqL1xuIDc4MDpcdFx0dWxlbiA9IHVkcF9nZXRfbGVuX3Nob3J0KHVoKTtcbiA3ODE6XHRcdGlmICh1bGVuIFx1MDAzYz0gc2l6ZW9mKCp1aCkgfHwgdWxlbiAhPSBza2JfZ3JvX2xlbihza2IpKVxuIDc4MjpcdFx0XHRnb3RvIG91dDtcbiA3ODM6XHRcbiA3ODQ6XHRcdC8qIFdlIGNhbiBkbyBMNCBhZ2dyZWdhdGlvbiBvbmx5IGlmIHRoZSBwYWNrZXQgY2FuJiMzOTt0IGxhbmQgaW4gYSB0dW5uZWxcbiA3ODU6XHRcdCAqIG90aGVyd2lzZSB3ZSBjb3VsZCBjb3JydXB0IHRoZSBpbm5lciBzdHJlYW0uIERldGVjdGluZyBzdWNoIHBhY2tldHNcbiA3ODY6XHRcdCAqIGNhbm5vdCBiZSBmb29scHJvb2YgYW5kIHRoZSBhZ2dyZWdhdGlvbiBtaWdodCBzdGlsbCBoYXBwZW4gaW4gc29tZVxuIDc4NzpcdFx0ICogY2FzZXMuIFN1Y2ggcGFja2V0cyBzaG91bGQgYmUgY2F1Z2h0IGluIHVkcF91bmV4cGVjdGVkX2dzbyBsYXRlci5cbiA3ODg6XHRcdCAqL1xuIDc4OTpcdFx0TkFQSV9HUk9fQ0Ioc2tiKS1cdTAwM2Vpc19mbGlzdCA9IDA7XG4gNzkwOlx0XHRpZiAoIXNrIHx8ICF1ZHBfc2soc2spLVx1MDAzZWdyb19yZWNlaXZlKSB7XG4gNzkxOlx0XHRcdC8qIElmIHRoZSBwYWNrZXQgd2FzIGxvY2FsbHkgZW5jYXBzdWxhdGVkIGluIGEgVURQIHR1bm5lbCB0aGF0XG4gNzkyOlx0XHRcdCAqIHdhc24mIzM5O3QgZGV0ZWN0ZWQgYWJvdmUsIGRvIG5vdCBHUk8uXG4gNzkzOlx0XHRcdCAqL1xuIDc5NDpcdFx0XHRpZiAoc2tiLVx1MDAzZWVuY2Fwc3VsYXRpb24pXG4gNzk1Olx0XHRcdFx0Z290byBvdXQ7XG4gNzk2Olx0XG4gNzk3Olx0XHRcdGlmIChza2ItXHUwMDNlZGV2LVx1MDAzZWZlYXR1cmVzIFx1MDAyNiBORVRJRl9GX0dST19GUkFHTElTVClcbiA3OTg6XHRcdFx0XHROQVBJX0dST19DQihza2IpLVx1MDAzZWlzX2ZsaXN0ID0gc2sgPyAhdWRwX3Rlc3RfYml0KEdST19FTkFCTEVELCBzaykgOiAxO1xuIDc5OTpcdFxuIDgwMDpcdFx0XHRpZiAoKCFzayBcdTAwMjZcdTAwMjYgKHNrYi1cdTAwM2VkZXYtXHUwMDNlZmVhdHVyZXMgXHUwMDI2IE5FVElGX0ZfR1JPX1VEUF9GV0QpKSB8fFxuIDgwMTpcdFx0XHQgICAgKHNrIFx1MDAyNlx1MDAyNiB1ZHBfdGVzdF9iaXQoR1JPX0VOQUJMRUQsIHNrKSkgfHwgTkFQSV9HUk9fQ0Ioc2tiKS1cdTAwM2Vpc19mbGlzdClcbiA4MDI6XHRcdFx0XHRyZXR1cm4gY2FsbF9ncm9fcmVjZWl2ZSh1ZHBfZ3JvX3JlY2VpdmVfc2VnbWVudCwgaGVhZCwgc2tiKTtcbiA4MDM6XHRcbiA4MDQ6XHRcdFx0Lyogbm8gR1JPLCBiZSBzdXJlIGZsdXNoIHRoZSBjdXJyZW50IHBhY2tldCAqL1xuIDgwNTpcdFx0XHRnb3RvIG91dDtcbiA4MDY6XHRcdH1cbiA4MDc6XHRcbiA4MDg6XHRcdGlmIChOQVBJX0dST19DQihza2IpLVx1MDAzZWVuY2FwX21hcmsgfHxcbiA4MDk6XHRcdCAgICAodWgtXHUwMDNlY2hlY2sgXHUwMDI2XHUwMDI2IHNrYi1cdTAwM2VpcF9zdW1tZWQgIT0gQ0hFQ0tTVU1fUEFSVElBTCBcdTAwMjZcdTAwMjZcbiA4MTA6XHRcdCAgICAgTkFQSV9HUk9fQ0Ioc2tiKS1cdTAwM2Vjc3VtX2NudCA9PSAwIFx1MDAyNlx1MDAyNlxuIDgxMTpcdFx0ICAgICAhTkFQSV9HUk9fQ0Ioc2tiKS1cdTAwM2Vjc3VtX3ZhbGlkKSlcbiA4MTI6XHRcdFx0Z290byBvdXQ7XG4gODEzOlx0XG4gODE0Olx0XHQvKiBtYXJrIHRoYXQgdGhpcyBza2IgcGFzc2VkIG9uY2UgdGhyb3VnaCB0aGUgdHVubmVsIGdybyBsYXllciAqL1xuIDgxNTpcdFx0TkFQSV9HUk9fQ0Ioc2tiKS1cdTAwM2VlbmNhcF9tYXJrID0gMTtcbiA4MTY6XHRcbiA4MTc6XHRcdGZsdXNoID0gMDtcbiA4MTg6XHRcbiA4MTk6XHRcdGxpc3RfZm9yX2VhY2hfZW50cnkocCwgaGVhZCwgbGlzdCkge1xuIDgyMDpcdFx0XHRpZiAoIU5BUElfR1JPX0NCKHApLVx1MDAzZXNhbWVfZmxvdylcbiA4MjE6XHRcdFx0XHRjb250aW51ZTtcbiA4MjI6XHRcbiA4MjM6XHRcdFx0dWgyID0gKHN0cnVjdCB1ZHBoZHIgICAqKShwLVx1MDAzZWRhdGEgJiM0Mzsgb2ZmKTtcbiA4MjQ6XHRcbiA4MjU6XHRcdFx0LyogTWF0Y2ggcG9ydHMgYW5kIGVpdGhlciBjaGVja3N1bXMgYXJlIGVpdGhlciBib3RoIHplcm9cbiA4MjY6XHRcdFx0ICogb3Igbm9uemVyby5cbiA4Mjc6XHRcdFx0ICovXG4gODI4Olx0XHRcdGlmICgoKih1MzIgKilcdTAwMjZ1aC1cdTAwM2Vzb3VyY2UgIT0gKih1MzIgKilcdTAwMjZ1aDItXHUwMDNlc291cmNlKSB8fFxuIDgyOTpcdFx0XHQgICAgKCF1aC1cdTAwM2VjaGVjayBeICF1aDItXHUwMDNlY2hlY2spKSB7XG4gODMwOlx0XHRcdFx0TkFQSV9HUk9fQ0IocCktXHUwMDNlc2FtZV9mbG93ID0gMDtcbiA4MzE6XHRcdFx0XHRjb250aW51ZTtcbiA4MzI6XHRcdFx0fVxuIDgzMzpcdFx0fVxuIDgzNDpcdFxuIDgzNTpcdFx0c2tiX2dyb19wdWxsKHNrYiwgc2l6ZW9mKHN0cnVjdCB1ZHBoZHIpKTsgLyogcHVsbCBlbmNhcHN1bGF0aW5nIHVkcCBoZWFkZXIgKi9cbiA4MzY6XHRcdHNrYl9ncm9fcG9zdHB1bGxfcmNzdW0oc2tiLCB1aCwgc2l6ZW9mKHN0cnVjdCB1ZHBoZHIpKTtcbiA4Mzc6XHRcdHBwID0gdWRwX3R1bm5lbF9ncm9fcmN2KHNrLCBoZWFkLCBza2IpO1xuIDgzODpcdFxuIDgzOTpcdG91dDpcbiA4NDA6XHRcdHNrYl9ncm9fZmx1c2hfZmluYWwoc2tiLCBwcCwgZmx1c2gpO1xuIDg0MTpcdFx0cmV0dXJuIHBwO1xuIDg0MjpcdH1cbiA4NDM6XHRcbiA4NDQ6XHRzdGF0aWMgc3RydWN0IHNvY2sgKnVkcDRfZ3JvX2xvb2t1cF9za2Ioc3RydWN0IHNrX2J1ZmYgKnNrYiwgX19iZTE2IHNwb3J0LFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNyAwMjo1ODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMTA2MAoJCQkJCQkJb3V0cHV0OiAxOQoJCQkJCQkJdGhvdWdodHM6IDc3MwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXNpcyBvZiBVRFAgR1JPIFByb2Nlc3NpbmcgTW9kaWZpY2F0aW9uKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byB0cmFjZSB0aGUgZXhlY3V0aW9uIHBhdGguIGB1ZHBfZ3JvX3JlY2VpdmVgIGNhbGxzIGB1ZHBfdHVubmVsX2dyb19yY3ZgLCBhbmQgd2UmIzM5O3JlIGxvb2tpbmcgYXQgVURQIHBhY2tldHMgZHVyaW5nIEdSTyAoR2VuZXJpYyBSZWNlaXZlIE9mZmxvYWQpIHByb2Nlc3NpbmcuIFRoaXMgaXMgY2xlYXJseSB3aXRoaW4gdGhlIGNvcmUgbmV0d29ya2luZyBzdGFjaywgc3BlY2lmaWNhbGx5IGBuZXQvaXB2NC91ZHBfb2ZmbG9hZC5jYC4gVGhlIGZhY3QgdGhhdCBTeXprYWxsZXIgcmVndWxhcmx5IGV4ZXJjaXNlcyBVRFAsIHNldHMgdXAgdHVubmVscyAoVlhMQU4sIEdFTkVWRSwgZXRjLiksIGFuZCB1c2VzIGxvb3BiYWNrLCB0dW4vdGFwLCB2ZXRoLCBtZWFucyB0aGlzIGFyZWEgaXMgZGVmaW5pdGVseSByZWFjaGFibGUsIGFuZCBwb3RlbnRpYWxseSB2dWxuZXJhYmxlLgoKVGhlIGtleSBjaGFuZ2UgaXMgdGhlIHJlbW92YWwgb2YgdGhlIGBzdGF0aWNfYnJhbmNoX2xpa2VseWAgY2hlY2sgYW5kIGBzdGF0aWNfY2FsbGAgaW4gYHVkcF90dW5uZWxfZ3JvX3JjdmAuIEl0IHNlZW1zIG5vdyB3ZSYjMzk7cmUganVzdCBkaXJlY3RseSBjYWxsaW5nIGBjYWxsX2dyb19yZWNlaXZlX3NrYC4gTXkgZmlyc3QgcXVlc3Rpb24gaXMgKndoeSo/ICBJcyB0aGlzIGEgc3RyYWlnaHQtdXAgb3B0aW1pemF0aW9uLCBhIHJlZmFjdG9yaW5nLCBvciBhIGZpeD8gQSBsb29rIGF0IHRoZSBnaXQgbG9nIG9yIGNvbW1lbnRzIHNob3VsZCB0ZWxsIHRoZSB0YWxlLCBvciB0aGUgYHVkcF90dW5uZWxfdXBkYXRlX2dyb19yY3ZgIGZ1bmN0aW9uIG1pZ2h0IHByb3ZpZGUgc29tZSBjb250ZXh0LgoKQWgsIGhlcmUmIzM5O3MgdGhlIHJlbGV2YW50IHNlY3Rpb24gZnJvbSBgdWRwX3R1bm5lbF91cGRhdGVfZ3JvX3JjdmAuIEl0IGxvb2tzIGxpa2UgdGhlIHN0YXRpYyBicmFuY2ggaXMgc3RpbGwgdXBkYXRlZCBiYXNlZCBvbiBgdWRwX3R1bm5lbF9ncm9fdHlwZV9ucmAsIGJ1dCBpdCYjMzk7cyBhcHBhcmVudGx5IGJlaW5nIGJ5cGFzc2VkIG9yIHJlbW92ZWQgaW5zaWRlIGB1ZHBfdHVubmVsX2dyb19yY3ZgIGl0c2VsZi4gVGhhdCYjMzk7cyBhIHNpZ25pZmljYW50IG1vZGlmaWNhdGlvbiB0byB0aGUgY29yZSBuZXR3b3JraW5nIGxvZ2ljIGludm9sdmVkIGluIGB1ZHBfdHVubmVsX2dyb19yY3ZgIGFuZCBjb25zZXF1ZW50bHkgYHVkcF9ncm9fcmVjZWl2ZWAuCgpOb3csIGxldCYjMzk7cyBhc3Nlc3MgdGhlIGltcGFjdCBiYXNlZCBvbiBteSBrbm93bGVkZ2UuIENvbnNpZGVyaW5nIHRoZSBjcml0ZXJpYToKCiogICAqKkNvcmUgU3Vic3lzdGVtczoqKiBZZXMsIGFueSBtb2RpZmljYXRpb24gdG8gbG9naWMgaGVyZSBpbiBjb3JlIG5ldHdvcmtpbmcgaXMgcmVsZXZhbnQuCiogICAqKlJlZmFjdG9yaW5ncyBhbmQgQ29kZSBDbGVhbnVwczoqKiBJZiB0aGlzICppcyogYSByZWZhY3RvcmluZywgaXQmIzM5O3Mgc3RpbGwgcmVzdHJ1Y3R1cmluZyByZWFjaGFibGUgZGF0YSBzdHJ1Y3R1cmVzIG9yIGFsZ29yaXRobSBmbG93cywgbWFraW5nIGl0IGltcG9ydGFudC4KKiAgICoqUmVhY2hhYmxlIENvZGU6KiogQWJzb2x1dGVseS4gVURQIEdSTyBpcyBleGVyY2lzZWQgaW4gY29tbW9uIHZpcnR1YWwgZW52aXJvbm1lbnRzIHVzZWQgZm9yIHRlc3RpbmcgYW5kIGZ1enppbmcuCgpHaXZlbiB0aGF0LCBJIGNhbiBjb25maWRlbnRseSBzYXkgdGhpcyBpcyBgV29ydGhGdXp6aW5nYCwgYW5kIHRoZSBxdWVzdGlvbiBpcyB3aGF0IHN5bWJvbHMgd2UgbmVlZCB0byBmb2N1cyBvbi4KClJlbGV2YW50IHN5bWJvbHM/IFRoZSBwcmltYXJ5IGZ1bmN0aW9ucyBhcmUgb2J2aW91c2x5IGB1ZHBfdHVubmVsX2dyb19yY3ZgIGFuZCBgdWRwX2dyb19yZWNlaXZlYC4gQnV0IHRvIGJlIHRob3JvdWdoLCBJIHNob3VsZCBjaGVjayB0aGUgY2FsbGVycyBvZiBib3RoIG9mIHRob3NlIGZ1bmN0aW9ucyBhbmQgb3RoZXIgcmVsYXRlZCBmdW5jdGlvbnMuIExldCYjMzk7cyBkbyBhIHF1aWNrIGdyZXAuIFRoaXMgaXMgZGVmaW5pdGVseSBzb21ldGhpbmcgdG8gYWRkIHRvIHRoZSBmdXp6aW5nIHRhcmdldHMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDAyOjU4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3VkcF9ncm9fcmVjZWl2ZSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtpbmNsdWRlL2xpbnV4L3VkcC5oPTIxND1zdGF0aWMgaW5saW5lIGJvb2wgdWRwX3VuZXhwZWN0ZWRfZ3NvKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYilcbi0tXG5pbmNsdWRlL2xpbnV4L3VkcC5oLTIyNy1cdC8qIEdTTyBwYWNrZXRzIGxhY2tpbmcgdGhlIFNLQl9HU09fVURQX1RVTk5FTC9fQ1NVTSBiaXRzIG1pZ2h0IHN0aWxsXG5pbmNsdWRlL2xpbnV4L3VkcC5oOjIyODpcdCAqIGxhbmQgaW4gYSB0dW5uZWwgYXMgdGhlIHNvY2tldCBjaGVjayBpbiB1ZHBfZ3JvX3JlY2VpdmUgY2Fubm90IGJlXG5pbmNsdWRlL2xpbnV4L3VkcC5oLTIyOS1cdCAqIGZvb2xwcm9vZi5cbi0tXG5pbmNsdWRlL25ldC9ncm8uaD00MDk9aW50IHVkcDZfZ3JvX2NvbXBsZXRlKHN0cnVjdCBza19idWZmICosIGludCk7XG4tLVxuaW5jbHVkZS9uZXQvZ3JvLmgtNDE3LVxuaW5jbHVkZS9uZXQvZ3JvLmg6NDE4OnN0cnVjdCBza19idWZmICp1ZHBfZ3JvX3JlY2VpdmUoc3RydWN0IGxpc3RfaGVhZCAqaGVhZCwgc3RydWN0IHNrX2J1ZmYgKnNrYixcbmluY2x1ZGUvbmV0L2dyby5oLTQxOS1cdFx0XHRcdHN0cnVjdCB1ZHBoZHIgKnVoLCBzdHJ1Y3Qgc29jayAqc2spO1xuLS1cbm5ldC9pcHY0L3VkcC5jPTI4NDQ9c3RhdGljIHZvaWQgdWRwX2Rlc3Ryb3lfc29jayhzdHJ1Y3Qgc29jayAqc2spXG4tLVxubmV0L2lwdjQvdWRwLmMtMjg2Ni1cbm5ldC9pcHY0L3VkcC5jOjI4Njc6dHlwZWRlZiBzdHJ1Y3Qgc2tfYnVmZiAqKCp1ZHBfZ3JvX3JlY2VpdmVfdCkoc3RydWN0IHNvY2sgKnNrLFxubmV0L2lwdjQvdWRwLmMtMjg2OC1cdFx0XHRcdFx0ICAgICBzdHJ1Y3QgbGlzdF9oZWFkICpoZWFkLFxuLS1cbm5ldC9pcHY0L3VkcC5jPTI4NzE9c3RhdGljIHZvaWQgc2V0X3hmcm1fZ3JvX3VkcF9lbmNhcF9yY3YoX191MTYgZW5jYXBfdHlwZSwgdW5zaWduZWQgc2hvcnQgZmFtaWx5LFxuLS1cbm5ldC9pcHY0L3VkcC5jLTI4NzQtI2lmZGVmIENPTkZJR19YRlJNXG5uZXQvaXB2NC91ZHAuYzoyODc1Olx0dWRwX2dyb19yZWNlaXZlX3QgbmV3X2dyb19yZWNlaXZlO1xubmV0L2lwdjQvdWRwLmMtMjg3Ni1cbi0tXG5uZXQvaXB2NC91ZHBfb2ZmbG9hZC5jPTYyNj1zdGF0aWMgc3RydWN0IHNrX2J1ZmYgKnVkcDRfdWZvX2ZyYWdtZW50KHN0cnVjdCBza19idWZmICpza2IsXG4tLVxubmV0L2lwdjQvdWRwX29mZmxvYWQuYy02ODctI2RlZmluZSBVRFBfR1JPX0NOVF9NQVggNjRcbm5ldC9pcHY0L3VkcF9vZmZsb2FkLmM6Njg4OnN0YXRpYyBzdHJ1Y3Qgc2tfYnVmZiAqdWRwX2dyb19yZWNlaXZlX3NlZ21lbnQoc3RydWN0IGxpc3RfaGVhZCAqaGVhZCxcbm5ldC9pcHY0L3VkcF9vZmZsb2FkLmMtNjg5LVx0XHRcdFx0XHQgICAgICAgc3RydWN0IHNrX2J1ZmYgKnNrYilcbi0tXG5uZXQvaXB2NC91ZHBfb2ZmbG9hZC5jLTc2OC1cbm5ldC9pcHY0L3VkcF9vZmZsb2FkLmM6NzY5OnN0cnVjdCBza19idWZmICp1ZHBfZ3JvX3JlY2VpdmUoc3RydWN0IGxpc3RfaGVhZCAqaGVhZCwgc3RydWN0IHNrX2J1ZmYgKnNrYixcbm5ldC9pcHY0L3VkcF9vZmZsb2FkLmMtNzcwLVx0XHRcdFx0c3RydWN0IHVkcGhkciAqdWgsIHN0cnVjdCBzb2NrICpzaylcbi0tXG5uZXQvaXB2NC91ZHBfb2ZmbG9hZC5jLTgwMS1cdFx0ICAgIChzayBcdTAwMjZcdTAwMjYgdWRwX3Rlc3RfYml0KEdST19FTkFCTEVELCBzaykpIHx8IE5BUElfR1JPX0NCKHNrYiktXHUwMDNlaXNfZmxpc3QpXG5uZXQvaXB2NC91ZHBfb2ZmbG9hZC5jOjgwMjpcdFx0XHRyZXR1cm4gY2FsbF9ncm9fcmVjZWl2ZSh1ZHBfZ3JvX3JlY2VpdmVfc2VnbWVudCwgaGVhZCwgc2tiKTtcbm5ldC9pcHY0L3VkcF9vZmZsb2FkLmMtODAzLVxuLS1cbm5ldC9pcHY0L3VkcF9vZmZsb2FkLmM9ODYzPXN0cnVjdCBza19idWZmICp1ZHA0X2dyb19yZWNlaXZlKHN0cnVjdCBsaXN0X2hlYWQgKmhlYWQsIHN0cnVjdCBza19idWZmICpza2IpXG4tLVxubmV0L2lwdjQvdWRwX29mZmxvYWQuYy04ODUtXG5uZXQvaXB2NC91ZHBfb2ZmbG9hZC5jOjg4NjpcdHBwID0gdWRwX2dyb19yZWNlaXZlKGhlYWQsIHNrYiwgdWgsIHNrKTtcbm5ldC9pcHY0L3VkcF9vZmZsb2FkLmMtODg3LVx0cmV0dXJuIHBwO1xuLS1cbm5ldC9pcHY2L3VkcF9vZmZsb2FkLmM9MTM0PXN0cnVjdCBza19idWZmICp1ZHA2X2dyb19yZWNlaXZlKHN0cnVjdCBsaXN0X2hlYWQgKmhlYWQsIHN0cnVjdCBza19idWZmICpza2IpXG4tLVxubmV0L2lwdjYvdWRwX29mZmxvYWQuYy0xNTctXG5uZXQvaXB2Ni91ZHBfb2ZmbG9hZC5jOjE1ODpcdHBwID0gdWRwX2dyb19yZWNlaXZlKGhlYWQsIHNrYiwgdWgsIHNrKTtcbm5ldC9pcHY2L3VkcF9vZmZsb2FkLmMtMTU5LVx0cmV0dXJuIHBwO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNyAwMjo1ODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMzQyOAoJCQkJCQkJb3V0cHV0OiAyNAoJCQkJCQkJdGhvdWdodHM6IDExOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgVURQIEdSTyBPZmZsb2FkIEZ1bmN0aW9ucyoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBGaXJzdCwgSSBzZWUgdGhhdCBgdWRwX2dyb19yZWNlaXZlYCBpcyBhIGNlbnRyYWwgZnVuY3Rpb24sIGxpa2VseSB0aGUgY29yZSBHUk8gKEdlbmVyaWMgUmVjZWl2ZSBPZmZsb2FkKSBoYW5kbGVyIGZvciBVRFAgcGFja2V0cywgYW5kIGl0JiMzOTtzIGRlZmluaXRlbHkgaW4gcGxheSB3aXRoaW4gYm90aCBgdWRwNF9ncm9fcmVjZWl2ZWAgYW5kIGB1ZHA2X2dyb19yZWNlaXZlYC4gR29vZCwgdGhhdCBtYWtlcyBzZW5zZS4gTm93LCB3aGF0JiMzOTtzIHRoaXMgYHVkcF90dW5uZWxfZ3JvX3JjdmAgZG9pbmc/IEhtbSwgaXQmIzM5O3MgbWFya2VkIGFzIHN0YXRpYyB3aXRoaW4gYG5ldC9pcHY0L3VkcF9vZmZsb2FkLmNgLiBUaGF0IGltcGxpZXMgaXQmIzM5O3MgYW4gaW50ZXJuYWwgaGVscGVyIGZ1bmN0aW9uLCBub3QgZGlyZWN0bHkgZXhwb3NlZCBmb3IgZXh0ZXJuYWwgdXNlIC0gcHJvYmFibHkgaGFuZGxpbmcgc29tZSBpbnRlcm5hbCB0dW5uZWwtc3BlY2lmaWMgbG9naWMuIEludGVyZXN0aW5nLgoKTm93LCBgdWRwX3R1bm5lbF91cGRhdGVfZ3JvX3JjdmAgaXMgZXhwb3J0ZWQgZnJvbSB0aGUgc2FtZSBmaWxlLiBJdCYjMzk7cyBsaWtlbHkgaW52b2x2ZWQgaW4gdXBkYXRpbmcgc29tZSBzdGF0ZSByZWxhdGVkIHRvIHRoZSBHUk8gb2ZmbG9hZCwgcGVyaGFwcyBiYXNlZCBvbiB0dW5uZWwgY29uZmlndXJhdGlvbiBvciBwYWNrZXQgY2hhcmFjdGVyaXN0aWNzLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgcmVsYXRpb25zaGlwIGJldHdlZW4gdGhlc2UgdHVubmVsLXJlbGF0ZWQgZnVuY3Rpb25zIGFuZCB0aGUgY29yZSBHUk8gcHJvY2Vzcy4gVGhlIG5leHQgbG9naWNhbCBzdGVwIGlzIHRvIHBpbnBvaW50IHdoZXJlIGB1ZHBfdHVubmVsX3VwZGF0ZV9ncm9fcmN2YCBpcyBhY3R1YWxseSBiZWluZyAqY2FsbGVkKi4gVGhhdCYjMzk7bGwgZ2l2ZSBtZSBhIG11Y2ggYmV0dGVyIGlkZWEgb2YgaXRzIHJvbGUgaW4gdGhlIGJpZ2dlciBwaWN0dXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNyAwMjo1ODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt1ZHBfdHVubmVsX3VwZGF0ZV9ncm9fcmN2JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2luY2x1ZGUvbmV0L3VkcF90dW5uZWwuaD0yMTE9dm9pZCB1ZHBfdHVubmVsX3VwZGF0ZV9ncm9fbG9va3VwKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHNvY2sgKnNrLCBib29sIGFkZCk7XG5pbmNsdWRlL25ldC91ZHBfdHVubmVsLmg6MjEyOnZvaWQgdWRwX3R1bm5lbF91cGRhdGVfZ3JvX3JjdihzdHJ1Y3Qgc29jayAqc2ssIGJvb2wgYWRkKTtcbmluY2x1ZGUvbmV0L3VkcF90dW5uZWwuaC0yMTMtI2Vsc2VcbmluY2x1ZGUvbmV0L3VkcF90dW5uZWwuaD0yMTQ9c3RhdGljIGlubGluZSB2b2lkIHVkcF90dW5uZWxfdXBkYXRlX2dyb19sb29rdXAoc3RydWN0IG5ldCAqbmV0LFxuaW5jbHVkZS9uZXQvdWRwX3R1bm5lbC5oLTIxNS1cdFx0XHRcdFx0XHRzdHJ1Y3Qgc29jayAqc2ssIGJvb2wgYWRkKSB7fVxuaW5jbHVkZS9uZXQvdWRwX3R1bm5lbC5oOjIxNjpzdGF0aWMgaW5saW5lIHZvaWQgdWRwX3R1bm5lbF91cGRhdGVfZ3JvX3JjdihzdHJ1Y3Qgc29jayAqc2ssIGJvb2wgYWRkKSB7fVxuaW5jbHVkZS9uZXQvdWRwX3R1bm5lbC5oLTIxNy0jZW5kaWZcbi0tXG5pbmNsdWRlL25ldC91ZHBfdHVubmVsLmg9MjE5PXN0YXRpYyBpbmxpbmUgdm9pZCB1ZHBfdHVubmVsX2NsZWFudXBfZ3JvKHN0cnVjdCBzb2NrICpzaylcbmluY2x1ZGUvbmV0L3VkcF90dW5uZWwuaC0yMjAte1xuaW5jbHVkZS9uZXQvdWRwX3R1bm5lbC5oOjIyMTpcdHVkcF90dW5uZWxfdXBkYXRlX2dyb19yY3Yoc2ssIGZhbHNlKTtcbmluY2x1ZGUvbmV0L3VkcF90dW5uZWwuaC0yMjItXHR1ZHBfdHVubmVsX3VwZGF0ZV9ncm9fbG9va3VwKHNvY2tfbmV0KHNrKSwgc2ssIGZhbHNlKTtcbi0tXG5uZXQvaXB2NC91ZHAuYz0yODcxPXN0YXRpYyB2b2lkIHNldF94ZnJtX2dyb191ZHBfZW5jYXBfcmN2KF9fdTE2IGVuY2FwX3R5cGUsIHVuc2lnbmVkIHNob3J0IGZhbWlseSxcbi0tXG5uZXQvaXB2NC91ZHAuYy0yODg4LVx0XHRcdGlmICh1ZHBfc2soc2spLVx1MDAzZWdyb19yZWNlaXZlKVxubmV0L2lwdjQvdWRwLmM6Mjg4OTpcdFx0XHRcdHVkcF90dW5uZWxfdXBkYXRlX2dyb19yY3Yoc2ssIGZhbHNlKTtcbm5ldC9pcHY0L3VkcC5jLTI4OTAtXG5uZXQvaXB2NC91ZHAuYy0yODkxLVx0XHRcdFdSSVRFX09OQ0UodWRwX3NrKHNrKS1cdTAwM2Vncm9fcmVjZWl2ZSwgbmV3X2dyb19yZWNlaXZlKTtcbm5ldC9pcHY0L3VkcC5jOjI4OTI6XHRcdFx0dWRwX3R1bm5lbF91cGRhdGVfZ3JvX3JjdihzaywgdHJ1ZSk7XG5uZXQvaXB2NC91ZHAuYy0yODkzLVx0XHR9XG4tLVxubmV0L2lwdjQvdWRwX29mZmxvYWQuYz03Nz1FWFBPUlRfU1lNQk9MX0dQTCh1ZHBfdHVubmVsX3VwZGF0ZV9ncm9fbG9va3VwKTtcbm5ldC9pcHY0L3VkcF9vZmZsb2FkLmMtNzgtXG5uZXQvaXB2NC91ZHBfb2ZmbG9hZC5jOjc5OnZvaWQgdWRwX3R1bm5lbF91cGRhdGVfZ3JvX3JjdihzdHJ1Y3Qgc29jayAqc2ssIGJvb2wgYWRkKVxubmV0L2lwdjQvdWRwX29mZmxvYWQuYy04MC17XG4tLVxubmV0L2lwdjQvdWRwX29mZmxvYWQuYy0xNDQtfVxubmV0L2lwdjQvdWRwX29mZmxvYWQuYzoxNDU6RVhQT1JUX1NZTUJPTF9HUEwodWRwX3R1bm5lbF91cGRhdGVfZ3JvX3Jjdik7XG5uZXQvaXB2NC91ZHBfb2ZmbG9hZC5jLTE0Ni1cbi0tXG5uZXQvaXB2NC91ZHBfdHVubmVsX2NvcmUuYz03MT12b2lkIHNldHVwX3VkcF90dW5uZWxfc29jayhzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBzb2NrICpzayxcbi0tXG5uZXQvaXB2NC91ZHBfdHVubmVsX2NvcmUuYy05MS1cbm5ldC9pcHY0L3VkcF90dW5uZWxfY29yZS5jOjkyOlx0dWRwX3R1bm5lbF91cGRhdGVfZ3JvX3JjdihzaywgdHJ1ZSk7XG5uZXQvaXB2NC91ZHBfdHVubmVsX2NvcmUuYy05My1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDcgMDI6NTg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTQ2NDcKCQkJCQkJCW91dHB1dDogMjEKCQkJCQkJCXRob3VnaHRzOiAzMjYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIFVEUCBHUk8gYW5kIFR1bm5lbHMgaW4gdGhlIEtlcm5lbCoqCgpPa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyBVRFAgR1JPIChHZW5lcmljIFJlY2VpdmUgT2ZmbG9hZCkgaW50ZXJhY3RzIHdpdGggdHVubmVscywgc3BlY2lmaWNhbGx5IHdpdGhpbiBgbmV0L2lwdjQvdWRwX29mZmxvYWQuY2AuIEZpcnN0LCBJIHF1aWNrbHkgY29uZmlybSB0aGF0IHRoZSBjb3JlIGZpbGUgaXMgYnVpbHQgdW5kZXIgYENPTkZJR19JTkVUYCwgYXMgZXhwZWN0ZWQuIE5vdywgSSBzaG91bGQgZG91YmxlIGNoZWNrIHRoZSBjb2RlIGJsb2NrIGd1YXJkZWQgYnkgYCNpZiBJU19FTkFCTEVEKENPTkZJR19ORVRfVURQX1RVTk5FTClgLiBBaCwgbGluZSAxNyBvZiBgdWRwX29mZmxvYWQuY2AgaXMgdGhlIGtleS4KCkxldCBtZSB0YWtlIGEgY2xvc2VyIGxvb2sgYXQgdGhhdCBzcGVjaWZpYyBzZWN0aW9uIG9mIGNvZGUuIE9rYXksIGxpbmVzIDE3IHRocm91Z2ggMjAgYXJlIHVzaW5nIHRoYXQgY29uZGl0aW9uYWwuIEl0IGFwcGVhcnMgdGhlIHJlbGV2YW50IGNvZGUsIHRoZSBgdWRwX3R1bm5lbF9ncm9fcmN2YCBmdW5jdGlvbiwgaXMgZGVmaW5lZCB3aXRoaW4gdGhhdCBibG9jayBhbmQgb25seSBleGlzdHMgaWYgYENPTkZJR19ORVRfVURQX1RVTk5FTGAgaXMgZW5hYmxlZC4gVGhlIG90aGVyIHNpZGUgb2YgdGhhdCBjb25kaXRpb25hbCBpcyBhdCBsaW5lIDE1NCwgd2l0aCBgI2Vsc2VgLiBJdCBsb29rcyBsaWtlIHRoZSBtb2RpZmllZCBHUk8gZnVuY3Rpb24gKGRlZmluZWQgbGluZXMgMTQ3LTE1MikgaXMgYWxzbyBwcm90ZWN0ZWQgYnkgdGhhdCBjb25kaXRpb25hbC4KClRoZSBjcml0aWNhbCBwaWVjZSBoZXJlIGlzIGBDT05GSUdfTkVUX1VEUF9UVU5ORUxgLiBUaW1lIHRvIGdyZXAgdGhlIEtjb25maWcgZmlsZXMgYW5kIGZpbmQgb3V0IHdoYXQgdGhhdCBvcHRpb24gYWN0dWFsbHkgY29udHJvbHMuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQgaXQgbWVhbnMgdG8gZW5hYmxlIGl0LCBhbmQgdGhlIGltcGxpY2F0aW9ucyBmb3IgR1JPIHdpdGggVURQIHR1bm5lbHMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDAyOjU4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBORVRfVURQX1RVTk5FTCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvaXB2NC9LY29uZmlnPTMwND1jb25maWcgTkVUX0lQVlRJXG4tLVxubmV0L2lwdjQvS2NvbmZpZy0zMTUtXG5uZXQvaXB2NC9LY29uZmlnOjMxNjpjb25maWcgTkVUX1VEUF9UVU5ORUxcbm5ldC9pcHY0L0tjb25maWctMzE3LVx0dHJpc3RhdGVcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDcgMDI6NTg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTUzNjIKCQkJCQkJCW91dHB1dDogMzUKCQkJCQkJCXRob3VnaHRzOiAyMAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipFeGFtaW5pbmcgYG5ldC9pcHY0L0tjb25maWdgKioKCk9rYXksIHRpbWUgdG8gZGlnIGluLiBJIG5lZWQgdG8gZ2V0IGEgaGFuZGxlIG9uIHRoaXMsIHNvIGxldCYjMzk7cyBzdGFydCBieSB6ZXJvaW5nIGluIG9uIHRoZSBjb25maWd1cmF0aW9uIGZvciBJUHY0LiBJJiMzOTttIGdvaW5nIHRvIGp1bXAgaW50byBgbmV0L2lwdjQvS2NvbmZpZ2AgYW5kIHRha2UgYSBsb29rIGFyb3VuZCBsaW5lIDMxNi4gVGhhdCBhcmVhIHVzdWFsbHkgaG9sZHMgY3J1Y2lhbCBkZWZpbml0aW9ucywgc28gSSYjMzk7bGwgYmUgYWJsZSB0byBxdWlja2x5IHVuZGVyc3RhbmQgdGhlIHN0cnVjdHVyZSwgYW5kIGhvcGVmdWxseSBnZXQgYSBoYW5kbGUgb24gd2hhdCB0aGlzIG1vZHVsZSBpcyBhYm91dC4gTGV0JiMzOTtzIHNlZSB3aGF0IHdlIGNhbiBmaW5kLiBJIGV4cGVjdCB0aGVyZSB3aWxsIGJlIHNvbWV0aGluZyBzcGVjaWZpYyBvZiBpbnRlcmVzdCB0aGVyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDcgMDI6NTg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvaXB2NC9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMzEwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDI1Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAzMTA6XHRcdCAgVHVubmVsaW5nIG1lYW5zIGVuY2Fwc3VsYXRpbmcgZGF0YSBvZiBvbmUgcHJvdG9jb2wgdHlwZSB3aXRoaW5cbiAzMTE6XHRcdCAgYW5vdGhlciBwcm90b2NvbCBhbmQgc2VuZGluZyBpdCBvdmVyIGEgY2hhbm5lbCB0aGF0IHVuZGVyc3RhbmRzIHRoZVxuIDMxMjpcdFx0ICBlbmNhcHN1bGF0aW5nIHByb3RvY29sLiBUaGlzIGNhbiBiZSB1c2VkIHdpdGggeGZybSBtb2RlIHR1bm5lbCB0byBnaXZlXG4gMzEzOlx0XHQgIHRoZSBub3Rpb24gb2YgYSBzZWN1cmUgdHVubmVsIGZvciBJUFNFQyBhbmQgdGhlbiB1c2Ugcm91dGluZyBwcm90b2NvbFxuIDMxNDpcdFx0ICBvbiB0b3AuXG4gMzE1Olx0XG4gMzE2Olx0Y29uZmlnIE5FVF9VRFBfVFVOTkVMXG4gMzE3Olx0XHR0cmlzdGF0ZVxuIDMxODpcdFx0c2VsZWN0IE5FVF9JUF9UVU5ORUxcbiAzMTk6XHRcdGRlZmF1bHQgblxuIDMyMDpcdFxuIDMyMTpcdGNvbmZpZyBORVRfRk9VXG4gMzIyOlx0XHR0cmlzdGF0ZSBcJiMzNDtJUDogRm9vIChJUCBwcm90b2NvbHMpIG92ZXIgVURQXCYjMzQ7XG4gMzIzOlx0XHRzZWxlY3QgTkVUX1VEUF9UVU5ORUxcbiAzMjQ6XHRcdGhlbHBcbiAzMjU6XHRcdCAgRm9vIG92ZXIgVURQIGFsbG93cyBhbnkgSVAgcHJvdG9jb2wgdG8gYmUgZGlyZWN0bHkgZW5jYXBzdWxhdGVkXG4gMzI2Olx0XHQgIG92ZXIgVURQIGluY2x1ZGUgdHVubmVscyAoSVBJUCwgR1JFLCBTSVQpLiBCeSBlbmNhcHN1bGF0aW5nIGluIFVEUFxuIDMyNzpcdFx0ICBuZXR3b3JrIG1lY2hhbmlzbXMgYW5kIG9wdGltaXphdGlvbnMgZm9yIFVEUCAoc3VjaCBhcyBFQ01QXG4gMzI4Olx0XHQgIGFuZCBSU1MpIGNhbiBiZSBsZXZlcmFnZWQgdG8gcHJvdmlkZSBiZXR0ZXIgc2VydmljZS5cbiAzMjk6XHRcbiAzMzA6XHRjb25maWcgTkVUX0ZPVV9JUF9UVU5ORUxTXG4gMzMxOlx0XHRib29sIFwmIzM0O0lQOiBGT1UgZW5jYXBzdWxhdGlvbiBvZiBJUCB0dW5uZWxzXCYjMzQ7XG4gMzMyOlx0XHRkZXBlbmRzIG9uIE5FVF9JUElQIHx8IE5FVF9JUEdSRSB8fCBJUFY2X1NJVFxuIDMzMzpcdFx0c2VsZWN0IE5FVF9GT1VcbiAzMzQ6XHRcdGhlbHBcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDcgMDI6NTg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTU5MzYKCQkJCQkJCW91dHB1dDogMTc0CgkJCQkJCQl0aG91Z2h0czogNTA1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFzc2Vzc21lbnQgb2YgdGhlIFVEUCBHUk8gUmVjZWl2ZSBQYXRoIE1vZGlmaWNhdGlvbioqCgpPa2F5LCBzbyBoZXJlJiMzOTtzIHRoZSBicmVha2Rvd24gb2YgdGhpcyBwYXRjaCBhbmQgd2hhdCBpdCBtZWFucyBmb3IgZnV6emluZy4gYENPTkZJR19ORVRfVURQX1RVTk5FTGAgaXMgc2VsZWN0ZWQgYnkgc2V2ZXJhbCBvdGhlciBjb25maWdzLCBsaWtlIGBDT05GSUdfTkVUX0ZPVWAsIGBDT05GSUdfR0VORVZFYCwgYW5kIGBDT05GSUdfVlhMQU5gLCBpbmRpY2F0aW5nIHRoaXMgaXMgYSBmZWF0dXJlIHdpdGggcG90ZW50aWFsbHkgYnJvYWQgaW1wYWN0LiBUaGUgYmFzZSBJUHY0IGNvbmZpZywgYENPTkZJR19JTkVUYCwgaXMgYWxzbyByZWxldmFudCwgc28gd2UgbmVlZCB0byBjb25zaWRlciBib3RoIGBORVRfVURQX1RVTk5FTGAgYW5kIGBJTkVUYCB3aGVuIGNvbmZpZ3VyaW5nIHRoZSB0ZXN0IGVudmlyb25tZW50LiBgTkVUX1VEUF9UVU5ORUxgIGlzIHRoZSBwcmltYXJ5IGd1YXJkIG9uIHRoZSBtb2RpZmllZCBjb2RlIGJsb2NrLCBzbyB0aGF0JiMzOTtzIGEga2V5IGVuYWJsZSBjb25maWcuCgpJJiMzOTt2ZSB6ZXJvZWQgaW4gb24gdGhlIHNwZWNpZmljIGZ1bmN0aW9ucyBhZmZlY3RlZDogYHVkcF90dW5uZWxfZ3JvX3JjdmAgKHRoZSB0YXJnZXQgZnVuY3Rpb24pLCBpdHMgZGlyZWN0IGNhbGxlciBgdWRwX2dyb19yZWNlaXZlYCwgYW5kIHRoZW4gdGhlIEdSTyByZWNlaXZlIGltcGxlbWVudGF0aW9ucyBmb3IgSVB2NCBhbmQgSVB2NiwgbmFtZWx5IGB1ZHA0X2dyb19yZWNlaXZlYCBhbmQgYHVkcDZfZ3JvX3JlY2VpdmVgLCBhbmQgYWxzbyB0aGUgdXBkYXRlIGZ1bmN0aW9uIGB1ZHBfdHVubmVsX3VwZGF0ZV9ncm9fcmN2YC4gVGhlc2UgYXJlIG15IGZvY3VzIHN5bWJvbHMuCgpJJiMzOTt2ZSBkb3VibGUtY2hlY2tlZCBteSBydWxlczogYXZvaWRpbmcgdWJpcXVpdG91cyBob3QtcGF0aHMsIGFuZCB0YXJnZXRpbmcgc3BlY2lmaWMgZmVhdHVyZSBsb2dpYyBhbmQgZW50cnlwb2ludHMuIFRoaXMgY2xlYXJseSBoaXRzIHRoZSBtYXJrLiBUaGUgbW9kaWZpZWQgY29kZSBpcyBhdCB0aGUgY29yZSBvZiBHUk8gcHJvY2Vzc2luZyB3aXRoaW4gdGhlIFVEUCB0dW5uZWwgcGF0aCwgbWFraW5nIGl0IGEgaGlnaC12YWx1ZSB0YXJnZXQuIEFuZCwgdGhlIGBFbmFibGVDb25maWdzYCBjbGVhcmx5IHNwZWNpZnkgdGhlIG5lY2Vzc2FyeSBidWlsZCBwYXJhbWV0ZXJzLgoKTm93IGZvciB0aGUgcmVhc29uaW5nLiBUaGUgcGF0Y2ggY2hhbmdlcyBgdWRwX3R1bm5lbF9ncm9fcmN2YCwgcmVtb3ZpbmcgYSBzdGF0aWMgY2FsbCBvcHRpbWl6YXRpb24gYW5kIHVzaW5nIGBjYWxsX2dyb19yZWNlaXZlX3NrYCBkaXJlY3RseS4gVGhpcyBkaXJlY3RseSBhZmZlY3RzIHBhY2tldCBwcm9jZXNzaW5nIGZvciBVRFAgdHVubmVscyBhbmQgR1JPIHJlY3Vyc2lvbiB3aXRoaW4gdGhlIGNvcmUgbmV0d29ya2luZyBzdGFjay4gVGhpcyBpcyBleGNlbGxlbnQgYmVjYXVzZSBpdCYjMzk7cyByZWFkaWx5IHJlYWNoYWJsZSBhbmQgdGVzdGFibGUsIGVzcGVjaWFsbHkgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzLiBTdGFuZGFyZCBuZXR3b3JrIGludGVyZmFjZXMgYW5kIHR1bm5lbCBzb2NrZXRzIGFyZSBhbGwgd2UgbmVlZCBmb3IgZWZmZWN0aXZlIGZ1enppbmcuCgpNeSBjb25jbHVzaW9uPyBUaGlzIGlzIGFic29sdXRlbHkgd29ydGggZnV6emluZy4gSSYjMzk7dmUgZ290IG15IGZvY3VzIHN5bWJvbHM6IGB1ZHBfdHVubmVsX2dyb19yY3ZgLCBgdWRwX2dyb19yZWNlaXZlYCwgYHVkcF90dW5uZWxfdXBkYXRlX2dyb19yY3ZgLCBgdWRwNF9ncm9fcmVjZWl2ZWAsIGFuZCBgdWRwNl9ncm9fcmVjZWl2ZWAuIE15IGVuYWJsZSBjb25maWdzIGFyZSBgSU5FVGAgYW5kIGBORVRfVURQX1RVTk5FTGAuIFRpbWUgdG8gaW52b2tlIGBzZXQtcmVzdWx0c2AuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDAyOjU4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtJTkVUJiMzNDssCiAgICAmIzM0O05FVF9VRFBfVFVOTkVMJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7dWRwX3R1bm5lbF9ncm9fcmN2JiMzNDssCiAgICAmIzM0O3VkcF9ncm9fcmVjZWl2ZSYjMzQ7LAogICAgJiMzNDt1ZHBfdHVubmVsX3VwZGF0ZV9ncm9fcmN2JiMzNDssCiAgICAmIzM0O3VkcDRfZ3JvX3JlY2VpdmUmIzM0OywKICAgICYjMzQ7dWRwNl9ncm9fcmVjZWl2ZSYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgVURQIHR1bm5lbCBHUk8gcmVjZWl2ZSBwYXRoICh1ZHBfdHVubmVsX2dyb19yY3YpIGluIG5ldC9pcHY0L3VkcF9vZmZsb2FkLmMsIHJlbW92aW5nIHRoZSBzdGF0aWMgY2FsbCBicmFuY2ggaW4gZmF2b3Igb2YgZGlyZWN0bHkgaW52b2tpbmcgY2FsbF9ncm9fcmVjZWl2ZV9zay4gVGhpcyBtb2RpZmllcyBjb3JlIG5ldHdvcmtpbmcgR1JPIGV4ZWN1dGlvbiBmbG93IGFuZCByZWN1cnNpb24gY2hlY2tzLCB3aGljaCBhcmUgZnVsbHkgcmVhY2hhYmxlIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyB1c2luZyBVRFAgdHVubmVscywgdmlydHVhbCBpbnRlcmZhY2VzLCBhbmQgR1JPLWVuYWJsZWQgc29ja2V0cy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7SU5FVCYjMzQ7LAogICAgJiMzNDtORVRfVURQX1RVTk5FTCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3VkcF90dW5uZWxfZ3JvX3JjdiYjMzQ7LAogICAgJiMzNDt1ZHBfZ3JvX3JlY2VpdmUmIzM0OywKICAgICYjMzQ7dWRwX3R1bm5lbF91cGRhdGVfZ3JvX3JjdiYjMzQ7LAogICAgJiMzNDt1ZHA0X2dyb19yZWNlaXZlJiMzNDssCiAgICAmIzM0O3VkcDZfZ3JvX3JlY2VpdmUmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIFVEUCB0dW5uZWwgR1JPIHJlY2VpdmUgcGF0aCAodWRwX3R1bm5lbF9ncm9fcmN2KSBpbiBuZXQvaXB2NC91ZHBfb2ZmbG9hZC5jLCByZW1vdmluZyB0aGUgc3RhdGljIGNhbGwgYnJhbmNoIGluIGZhdm9yIG9mIGRpcmVjdGx5IGludm9raW5nIGNhbGxfZ3JvX3JlY2VpdmVfc2suIFRoaXMgbW9kaWZpZXMgY29yZSBuZXR3b3JraW5nIEdSTyBleGVjdXRpb24gZmxvdyBhbmQgcmVjdXJzaW9uIGNoZWNrcywgd2hpY2ggYXJlIGZ1bGx5IHJlYWNoYWJsZSBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgdXNpbmcgVURQIHR1bm5lbHMsIHZpcnR1YWwgaW50ZXJmYWNlcywgYW5kIEdSTy1lbmFibGVkIHNvY2tldHMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjcvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDAyOjU4PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5JZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDcgMDI6NTg8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Y29yZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCByZW1vdmVzIHRoZSBzdGF0aWMgY2FsbCBicmFuY2ggb3B0aW1pemF0aW9uIGluIGB1ZHBfdHVubmVsX2dyb19yY3YoKWAsIHJldmVydGluZyB0byBjYWxsaW5nIGBjYWxsX2dyb19yZWNlaXZlX3NrKHVkcF9zayhzayktXHUwMDNlZ3JvX3JlY2VpdmUsIHNrLCBoZWFkLCBza2IpYCB1bmNvbmRpdGlvbmFsbHkuIFRoZSBjaGFuZ2UgZG9lcyBub3QgaW50cm9kdWNlIG9yIG1vZGlmeSBhbnkgbWVtb3J5IGFsbG9jYXRpb25zLCBzdHJ1Y3R1cmUgaW5pdGlhbGl6YXRpb24sIGNvcHlpbmcgdG8gdXNlciBzcGFjZSwgb3IgYnVmZmVyIGxlbmd0aC9ib3VuZHMgbG9naWMuIE5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IG9yIGluZm9ybWF0aW9uIGxlYWsgcmlza3MgYXJlIGludHJvZHVjZWQuIFN0YW5kYXJkIHRlc3RpbmcgYW5kIEtBU0FOIGFyZSBzdWZmaWNpZW50LiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeQplcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZApkZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpCmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLgoKQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46Ci0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZQogIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTgogIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVAKICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLgotIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLAogIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy4KClJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sCkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuCkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFkKc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3MKdGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi4KCkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0CnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLAphIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXMKdGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmcKdW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sCmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSwKY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuCgpTZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6CjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiCiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzCiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuCjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMKICAgb3Igc3RydWN0IGZpZWxkcy4KMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkcwogICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLgo0LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2VzcwogICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuCgpTZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjoKLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlcgogIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodAogIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS4KLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZAogIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC4KLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuCgpVc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlCmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+VGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjQKCkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgYzVkNjFiZDYzNjI4NDliMThlOTUyZjYyZmYzMjk3ZTFjOWZlNGI4ZgpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBNb24gU2VwIDcgMDI6NTc6NTggMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9uZXQvaXB2NC91ZHBfb2ZmbG9hZC5jIGIvbmV0L2lwdjQvdWRwX29mZmxvYWQuYwppbmRleCBjZjA3YzNjNjYxMWEyLi4zMDY0OWY0MDdhNzg4IDEwMDY0NAotLS0gYS9uZXQvaXB2NC91ZHBfb2ZmbG9hZC5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9pcHY0L3VkcF9vZmZsb2FkLmMKQEAgLTE0OCwxMyAmIzQzOzE0OCw2IEBAIHN0YXRpYyBzdHJ1Y3Qgc2tfYnVmZiAqdWRwX3R1bm5lbF9ncm9fcmN2KHN0cnVjdCBzb2NrICpzaywKIAkJCQkJICBzdHJ1Y3QgbGlzdF9oZWFkICpoZWFkLAogCQkJCQkgIHN0cnVjdCBza19idWZmICpza2IpCiB7Ci0JaWYgKHN0YXRpY19icmFuY2hfbGlrZWx5KCZhbXA7dWRwX3R1bm5lbF9zdGF0aWNfY2FsbCkpIHsKLQkJaWYgKHVubGlrZWx5KGdyb19yZWN1cnNpb25faW5jX3Rlc3Qoc2tiKSkpIHsKLQkJCU5BUElfR1JPX0NCKHNrYiktJmd0O2ZsdXNoIHw9IDE7Ci0JCQlyZXR1cm4gTlVMTDsKLQkJfQotCQlyZXR1cm4gc3RhdGljX2NhbGwodWRwX3R1bm5lbF9ncm9fcmN2KShzaywgaGVhZCwgc2tiKTsKLQl9CiAJcmV0dXJuIGNhbGxfZ3JvX3JlY2VpdmVfc2sodWRwX3NrKHNrKS0mZ3Q7Z3JvX3JlY2VpdmUsIHNrLCBoZWFkLCBza2IpOwogfQogCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI5LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNyAwMjo1ODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMTU4CgkJCQkJCQlvdXRwdXQ6IDM5CgkJCQkJCQl0aG91Z2h0czogMzM1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgVURQIE9mZmxvYWQgQ29kZSoqCgpPa2F5LCBsZXQmIzM5O3MgdGFrZSBhIGxvb2sgYXQgdGhpcyBgZGlmZmAuIEZpcnN0LCBJJiMzOTtsbCBuZWVkIHRvIGV4YW1pbmUgdGhlIGNvbnRleHQgYXJvdW5kIHRoZSBjaGFuZ2UgaW4gYG5ldC9pcHY0L3VkcF9vZmZsb2FkLmNgLiBJIHNlZSB0aGF0IHRoZSBjb2RlIGlzIGRlYWxpbmcgd2l0aCBVRFAgb2ZmbG9hZCBhbmQgc3BlY2lmaWNhbGx5IHdpdGggR1JPIChHZW5lcmljIFJlY2VpdmUgT2ZmbG9hZCkuIFRoZSBgZGlmZmAgc2hvd3MgdGhlIHJlbW92YWwgb2YgYSBjb25kaXRpb25hbCBjaGVjayBhbmQgYSBwb3RlbnRpYWwgY2FsbCB0byBhIHN0YXRpYyBmdW5jdGlvbi4KCkluaXRpYWxseSwgaXQgc2VlbXMgdGhlcmUgd2FzIGEgYHN0YXRpY19icmFuY2hfbGlrZWx5YCBjaGVjaywgd2hpY2ggZGV0ZXJtaW5lZCB3aGV0aGVyIHRvIGNhbGwgYHN0YXRpY19jYWxsKHVkcF90dW5uZWxfZ3JvX3JjdilgLiBUaGF0LCBpbiB0dXJuLCBzZWVtcyB0byBoYXZlIGhhZCBhIHRlc3QgZm9yIGEgYGdyb19yZWN1cnNpb25faW5jX3Rlc3RgIGFuZCBwb3NzaWJseSBzZXR0aW5nIGBOQVBJX0dST19DQihza2IpLSZndDtmbHVzaCB8PSAxO2AgaWYgYGdyb19yZWN1cnNpb25faW5jX3Rlc3RgIHJldHVybmVkIHRydWUuICBUaGUgYHN0YXRpY19jYWxsYCBtZWNoYW5pc20gaXMgaW50ZXJlc3Rpbmc7IGl0IHN1Z2dlc3RzIGEgbWVjaGFuaXNtIGZvciBvcHRpbWl6aW5nIGZ1bmN0aW9uIGNhbGxzLCBwb3NzaWJseSBmb3IgaW5saW5pbmcgb3IgZm9yIGVuYWJsaW5nL2Rpc2FibGluZyBhIGNvZGUgcGF0aCBhdCBjb21waWxlIHRpbWUuICBUaGUgZnVuY3Rpb24gYGdyb19yZWN1cnNpb25faW5jX3Rlc3RgIHNlZW1zIHJlbGF0ZWQgdG8gcmVjdXJzaW9uIHdpdGhpbiB0aGUgR1JPIHByb2Nlc3NpbmcuCgpOb3csIGluc3RlYWQsIGl0IGxvb2tzIGxpa2UgdGhpcyBpcyBiZWluZyByZXBsYWNlZCBieSBgY2FsbF9ncm9fcmVjZWl2ZV9za2AuIFRoaXMgbGlrZWx5IG1lYW5zIHRoZSBjb2RlIGlzIG5vdyBkaXJlY3RseSBjYWxsaW5nIGEgZnVuY3Rpb24gcG9pbnRlciAoYHVkcF9zayhzayktJmd0O2dyb19yZWNlaXZlYCkgdGhhdOKAmXMgYXNzb2NpYXRlZCB3aXRoIHRoZSBgc29ja2Agc3RydWN0dXJlLCBieXBhc3NpbmcgdGhlIGBzdGF0aWNfYnJhbmNoYCBvcHRpbWl6YXRpb24uIEkmIzM5O2xsIG5lZWQgdG8gaW52ZXN0aWdhdGUgd2hhdCBpcyBzdG9yZWQgaW4gYHVkcF9zayhzayktJmd0O2dyb19yZWNlaXZlYCBhbmQgZGV0ZXJtaW5lIHRoZSBpbXBsaWNhdGlvbnMgb2YgdGhpcyBjaGFuZ2UuIEl0JiMzOTtzIHBvc3NpYmxlIHRoaXMgaXMgYSBzaW1wbGlmaWNhdGlvbiwgb3IgbWF5YmUgYW4gb3B0aW1pemF0aW9uIGZvciBhIHBhcnRpY3VsYXIgaGFyZHdhcmUgY29uZmlndXJhdGlvbiwgb3IgbWF5YmUgYSBjaGFuZ2UgaW4gdGhlIHdheSBHUk8gaXMgaGFuZGxlZC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIHBlcmZvcm1hbmNlIGFuZCBmdW5jdGlvbmFsIGltcGFjdHMgaGVyZS4gSSYjMzk7bGwgbmVlZCB0byBrbm93OiB3aHkgdGhlIGBzdGF0aWNfYnJhbmNoYCB3YXMgcmVtb3ZlZCwgd2hhdCB0aGUgaW1wbGljYXRpb25zIG9mIHRoZSBkaXJlY3QgZnVuY3Rpb24gY2FsbCBhcmUgaW4gdGVybXMgb2YgcGVyZm9ybWFuY2UgYW5kIHBvdGVudGlhbCByZWdyZXNzaW9ucywgYW5kIHdoYXQgY2lyY3Vtc3RhbmNlcyB3b3VsZCBjYXVzZSB0aGUgb2xkIGNvZGUgdG8gZmFpbCBhbmQgdGhlIG5ldyBjb2RlIHRvIHBhc3MuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzAvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDAyOjU5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L2lwdjQvdWRwX29mZmxvYWQuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDEyMCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA4MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgMTIwOlx0XHRcdCAqIFRoZSBzdGFjayBjbGVhbnVwcyBvbmx5IHN1Y2Nlc3NmdWxseSBhZGRlZCB0dW5uZWwsIHRoZVxuIDEyMTpcdFx0XHQgKiBsb29rdXAgb24gcmVtb3ZhbCBzaG91bGQgbmV2ZXIgZmFpbC5cbiAxMjI6XHRcdFx0ICovXG4gMTIzOlx0XHRcdGlmIChXQVJOX09OX09OQ0UoIWN1cikpXG4gMTI0Olx0XHRcdFx0Z290byBvdXQ7XG4gMTI1Olx0XG4gMTI2Olx0XHRcdGlmICghcmVmY291bnRfZGVjX2FuZF90ZXN0KFx1MDAyNmN1ci1cdTAwM2Vjb3VudCkpXG4gMTI3Olx0XHRcdFx0Z290byBvdXQ7XG4gMTI4Olx0XG4gMTI5Olx0XHRcdC8qIEF2b2lkIGdhcHMsIHNvIHRoYXQgdGhlIGVuYWJsZSB0dW5uZWwgaGFzIGFsd2F5cyBpZCAwICovXG4gMTMwOlx0XHRcdCpjdXIgPSB1ZHBfdHVubmVsX2dyb190eXBlc1stLXVkcF90dW5uZWxfZ3JvX3R5cGVfbnJdO1xuIDEzMTpcdFx0fVxuIDEzMjpcdFxuIDEzMzpcdFx0aWYgKHVkcF90dW5uZWxfZ3JvX3R5cGVfbnIgPT0gMSkge1xuIDEzNDpcdFx0XHRzdGF0aWNfY2FsbF91cGRhdGUodWRwX3R1bm5lbF9ncm9fcmN2LFxuIDEzNTpcdFx0XHRcdFx0ICAgdWRwX3R1bm5lbF9ncm9fdHlwZXNbMF0uZ3JvX3JlY2VpdmUpO1xuIDEzNjpcdFx0XHRzdGF0aWNfYnJhbmNoX2VuYWJsZShcdTAwMjZ1ZHBfdHVubmVsX3N0YXRpY19jYWxsKTtcbiAxMzc6XHRcdH0gZWxzZSBpZiAob2xkX2dyb190eXBlX25yID09IDEpIHtcbiAxMzg6XHRcdFx0c3RhdGljX2JyYW5jaF9kaXNhYmxlKFx1MDAyNnVkcF90dW5uZWxfc3RhdGljX2NhbGwpO1xuIDEzOTpcdFx0XHRzdGF0aWNfY2FsbF91cGRhdGUodWRwX3R1bm5lbF9ncm9fcmN2LCBkdW1teV9ncm9fcmN2KTtcbiAxNDA6XHRcdH1cbiAxNDE6XHRcbiAxNDI6XHRvdXQ6XG4gMTQzOlx0XHRtdXRleF91bmxvY2soXHUwMDI2dWRwX3R1bm5lbF9ncm9fdHlwZV9sb2NrKTtcbiAxNDQ6XHR9XG4gMTQ1Olx0RVhQT1JUX1NZTUJPTF9HUEwodWRwX3R1bm5lbF91cGRhdGVfZ3JvX3Jjdik7XG4gMTQ2Olx0XG4gMTQ3Olx0c3RhdGljIHN0cnVjdCBza19idWZmICp1ZHBfdHVubmVsX2dyb19yY3Yoc3RydWN0IHNvY2sgKnNrLFxuIDE0ODpcdFx0XHRcdFx0XHQgIHN0cnVjdCBsaXN0X2hlYWQgKmhlYWQsXG4gMTQ5Olx0XHRcdFx0XHRcdCAgc3RydWN0IHNrX2J1ZmYgKnNrYilcbiAxNTA6XHR7XG4gMTUxOlx0XHRyZXR1cm4gY2FsbF9ncm9fcmVjZWl2ZV9zayh1ZHBfc2soc2spLVx1MDAzZWdyb19yZWNlaXZlLCBzaywgaGVhZCwgc2tiKTtcbiAxNTI6XHR9XG4gMTUzOlx0XG4gMTU0Olx0I2Vsc2VcbiAxNTU6XHRcbiAxNTY6XHRzdGF0aWMgc3RydWN0IHNrX2J1ZmYgKnVkcF90dW5uZWxfZ3JvX3JjdihzdHJ1Y3Qgc29jayAqc2ssXG4gMTU3Olx0XHRcdFx0XHRcdCAgc3RydWN0IGxpc3RfaGVhZCAqaGVhZCxcbiAxNTg6XHRcdFx0XHRcdFx0ICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuIDE1OTpcdHtcbiAxNjA6XHRcdHJldHVybiBjYWxsX2dyb19yZWNlaXZlX3NrKHVkcF9zayhzayktXHUwMDNlZ3JvX3JlY2VpdmUsIHNrLCBoZWFkLCBza2IpO1xuIDE2MTpcdH1cbiAxNjI6XHRcbiAxNjM6XHQjZW5kaWZcbiAxNjQ6XHRcbiAxNjU6XHRzdGF0aWMgc3RydWN0IHNrX2J1ZmYgKl9fc2tiX3VkcF90dW5uZWxfc2VnbWVudChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuIDE2NjpcdFx0bmV0ZGV2X2ZlYXR1cmVzX3QgZmVhdHVyZXMsXG4gMTY3Olx0XHRzdHJ1Y3Qgc2tfYnVmZiAqKCpnc29faW5uZXJfc2VnbWVudCkoc3RydWN0IHNrX2J1ZmYgKnNrYixcbiAxNjg6XHRcdFx0XHRcdFx0ICAgICBuZXRkZXZfZmVhdHVyZXNfdCBmZWF0dXJlcyksXG4gMTY5Olx0XHRfX2JlMTYgbmV3X3Byb3RvY29sLCBib29sIGlzX2lwdjYpXG4gMTcwOlx0e1xuIDE3MTpcdFx0aW50IHRubF9obGVuID0gc2tiX2lubmVyX21hY19oZWFkZXIoc2tiKSAtIHNrYl90cmFuc3BvcnRfaGVhZGVyKHNrYik7XG4gMTcyOlx0XHRib29sIHJlbWNzdW0sIG5lZWRfY3N1bSwgb2ZmbG9hZF9jc3VtLCBnc29fcGFydGlhbDtcbiAxNzM6XHRcdHN0cnVjdCBza19idWZmICpzZWdzID0gRVJSX1BUUigtRUlOVkFMKTtcbiAxNzQ6XHRcdHUxNiBtYWNfb2Zmc2V0ID0gc2tiLVx1MDAzZW1hY19oZWFkZXI7XG4gMTc1Olx0XHRfX2JlMTYgcHJvdG9jb2wgPSBza2ItXHUwMDNlcHJvdG9jb2w7XG4gMTc2Olx0XHR1MTYgbWFjX2xlbiA9IHNrYi1cdTAwM2VtYWNfbGVuO1xuIDE3NzpcdFx0aW50IHVkcF9vZmZzZXQsIG91dGVyX2hsZW47XG4gMTc4Olx0XHRzdHJ1Y3QgdWRwaGRyICp1aDtcbiAxNzk6XHRcdF9fd3N1bSBwYXJ0aWFsO1xuIDE4MDpcdFx0Ym9vbCBuZWVkX2lwc2VjO1xuIDE4MTpcdFxuIDE4MjpcdFx0aWYgKHVubGlrZWx5KCFwc2tiX21heV9wdWxsKHNrYiwgdG5sX2hsZW4pKSlcbiAxODM6XHRcdFx0Z290byBvdXQ7XG4gMTg0Olx0XG4gMTg1Olx0XHR1aCA9IHVkcF9oZHIoc2tiKTtcbiAxODY6XHRcbiAxODc6XHRcdC8qIEFkanVzdCBwYXJ0aWFsIGhlYWRlciBjaGVja3N1bSB0byBuZWdhdGUgb2xkIGxlbmd0aC5cbiAxODg6XHRcdCAqIFdlIGNhbm5vdCByZWx5IG9uIHRoZSB2YWx1ZSBjb250YWluZWQgaW4gdWgtXHUwMDNlbGVuIGFzIGl0IGlzXG4gMTg5Olx0XHQgKiBwb3NzaWJsZSB0aGF0IHRoZSBhY3R1YWwgdmFsdWUgZXhjZWVkcyB0aGUgYm91bmRhcmllcyBvZiB0aGVcbiAxOTA6XHRcdCAqIDE2IGJpdCBsZW5ndGggZmllbGQgZHVlIHRvIHRoZSBoZWFkZXIgYmVpbmcgYWRkZWQgb3V0c2lkZSBvZiBhblxuIDE5MTpcdFx0ICogSVAgb3IgSVB2NiBmcmFtZSB0aGF0IHdhcyBhbHJlYWR5IGxpbWl0ZWQgdG8gNjRLIC0gMS5cbiAxOTI6XHRcdCAqL1xuIDE5MzpcdFx0aWYgKHNrYl9zaGluZm8oc2tiKS1cdTAwM2Vnc29fdHlwZSBcdTAwMjYgU0tCX0dTT19QQVJUSUFMKVxuIDE5NDpcdFx0XHRwYXJ0aWFsID0gKF9fZm9yY2UgX193c3VtKXVoLVx1MDAzZWxlbjtcbiAxOTU6XHRcdGVsc2VcbiAxOTY6XHRcdFx0cGFydGlhbCA9IChfX2ZvcmNlIF9fd3N1bSlodG9ubChza2ItXHUwMDNlbGVuKTtcbiAxOTc6XHRcdHBhcnRpYWwgPSBjc3VtX3N1Yihjc3VtX3VuZm9sZCh1aC1cdTAwM2VjaGVjayksIHBhcnRpYWwpO1xuIDE5ODpcdFxuIDE5OTpcdFx0Lyogc2V0dXAgaW5uZXIgc2tiLiAqL1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMxLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNyAwMjo1OTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0Mjk0CgkJCQkJCQlvdXRwdXQ6IDM4CgkJCQkJCQl0aG91Z2h0czogNDkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgc3VtbWFyeSwgYXMgaWYgSSB3ZXJlIHRoaW5raW5nIHRoZXNlIHRob3VnaHRzOgoKKipBbmFseXppbmcgYHVkcF9vZmZsb2FkLmNgIGFuZCBTdGF0aWMgQ2FsbHMqKgoKT2theSwgdGltZSB0byBkaXZlIGRlZXBlciBpbnRvIGB1ZHBfb2ZmbG9hZC5jYCwgc3BlY2lmaWNhbGx5IGZvY3VzaW5nIG9uIHRoZSBhcmVhIGFyb3VuZCBgdWRwX3R1bm5lbF9ncm9fcmN2YC4gSSBuZWVkIHRvIGdldCBhIGJldHRlciBoYW5kbGUgb24gdGhlIGNvbnRleHQgb2YgdGhhdCBmdW5jdGlvbiwgZXNwZWNpYWxseSBob3cgaXQmIzM5O3MgYmVpbmcgdXNlZC4gVG8gZG8gdGhhdCwgSSYjMzk7bSBnb2luZyB0byBzY2FuIHRoZSBzdXJyb3VuZGluZyBjb2RlLCBsZXQmIzM5O3Mgc2F5IGZyb20gbGluZXMgNTAgdG8gMTIwLiBJIHdhbnQgdG8gc2VlIHdoYXQmIzM5O3MgaGFwcGVuaW5nIGp1c3QgYmVmb3JlIGFuZCBhZnRlciBgdWRwX3R1bm5lbF9ncm9fcmN2YCwgYW5kIG1vc3QgaW1wb3J0YW50bHksIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQgdGhhdCBgc3RhdGljYCBjYWxsIGlzIGRvaW5nLCB3aG8mIzM5O3MgY2FsbGluZyBpdCwgYW5kIHdoYXQgaXRzIG92ZXJhbGwgcHVycG9zZSBpcyBpbiB0aGUgYnJvYWRlciBuZXR3b3JraW5nIGZyYW1ld29yay4gSSYjMzk7bSBob3BpbmcgdG8gZGlzY292ZXIgdGhlIHJvbGUgYW5kIGltcGxpY2F0aW9ucyBmb3IgdGhlIGVudGlyZSB0dW5uZWwgcHJvY2Vzc2luZyBmbG93LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMyLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNyAwMjo1OTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9pcHY0L3VkcF9vZmZsb2FkLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA1MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA3MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgIDUwOlx0c3RhdGljIERFRklORV9TUElOTE9DSyh1ZHBfdHVubmVsX2dyb19sb2NrKTtcbiAgNTE6XHRcbiAgNTI6XHR2b2lkIHVkcF90dW5uZWxfdXBkYXRlX2dyb19sb29rdXAoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgc29jayAqc2ssIGJvb2wgYWRkKVxuICA1MzpcdHtcbiAgNTQ6XHRcdGJvb2wgaXNfaXB2NiA9IHNrLVx1MDAzZXNrX2ZhbWlseSA9PSBBRl9JTkVUNjtcbiAgNTU6XHRcdHN0cnVjdCB1ZHBfc29jayAqdHVwLCAqdXAgPSB1ZHBfc2soc2spO1xuICA1NjpcdFx0c3RydWN0IHVkcF90dW5uZWxfZ3JvICp1ZHBfdHVubmVsX2dybztcbiAgNTc6XHRcbiAgNTg6XHRcdHNwaW5fbG9jayhcdTAwMjZ1ZHBfdHVubmVsX2dyb19sb2NrKTtcbiAgNTk6XHRcdHVkcF90dW5uZWxfZ3JvID0gXHUwMDI2bmV0LVx1MDAzZWlwdjQudWRwX3R1bm5lbF9ncm9baXNfaXB2Nl07XG4gIDYwOlx0XHRpZiAoYWRkKVxuICA2MTpcdFx0XHRobGlzdF9hZGRfaGVhZChcdTAwMjZ1cC1cdTAwM2V0dW5uZWxfbGlzdCwgXHUwMDI2dWRwX3R1bm5lbF9ncm8tXHUwMDNlbGlzdCk7XG4gIDYyOlx0XHRlbHNlIGlmICh1cC1cdTAwM2V0dW5uZWxfbGlzdC5wcHJldilcbiAgNjM6XHRcdFx0aGxpc3RfZGVsX2luaXQoXHUwMDI2dXAtXHUwMDNldHVubmVsX2xpc3QpO1xuICA2NDpcdFxuICA2NTpcdFx0aWYgKHVkcF90dW5uZWxfZ3JvLVx1MDAzZWxpc3QuZmlyc3QgXHUwMDI2XHUwMDI2XG4gIDY2Olx0XHQgICAgIXVkcF90dW5uZWxfZ3JvLVx1MDAzZWxpc3QuZmlyc3QtXHUwMDNlbmV4dCkge1xuICA2NzpcdFx0XHR0dXAgPSBobGlzdF9lbnRyeSh1ZHBfdHVubmVsX2dyby1cdTAwM2VsaXN0LmZpcnN0LCBzdHJ1Y3QgdWRwX3NvY2ssXG4gIDY4Olx0XHRcdFx0XHQgIHR1bm5lbF9saXN0KTtcbiAgNjk6XHRcbiAgNzA6XHRcdFx0cmN1X2Fzc2lnbl9wb2ludGVyKHVkcF90dW5uZWxfZ3JvLVx1MDAzZXNrLCAoc3RydWN0IHNvY2sgKil0dXApO1xuICA3MTpcdFx0fSBlbHNlIHtcbiAgNzI6XHRcdFx0UkNVX0lOSVRfUE9JTlRFUih1ZHBfdHVubmVsX2dyby1cdTAwM2VzaywgTlVMTCk7XG4gIDczOlx0XHR9XG4gIDc0Olx0XG4gIDc1Olx0XHRzcGluX3VubG9jayhcdTAwMjZ1ZHBfdHVubmVsX2dyb19sb2NrKTtcbiAgNzY6XHR9XG4gIDc3Olx0RVhQT1JUX1NZTUJPTF9HUEwodWRwX3R1bm5lbF91cGRhdGVfZ3JvX2xvb2t1cCk7XG4gIDc4Olx0XG4gIDc5Olx0dm9pZCB1ZHBfdHVubmVsX3VwZGF0ZV9ncm9fcmN2KHN0cnVjdCBzb2NrICpzaywgYm9vbCBhZGQpXG4gIDgwOlx0e1xuICA4MTpcdFx0c3RydWN0IHVkcF90dW5uZWxfdHlwZV9lbnRyeSAqY3VyID0gTlVMTDtcbiAgODI6XHRcdHN0cnVjdCB1ZHBfc29jayAqdXAgPSB1ZHBfc2soc2spO1xuICA4MzpcdFx0aW50IGksIG9sZF9ncm9fdHlwZV9ucjtcbiAgODQ6XHRcbiAgODU6XHRcdGlmICghVURQX01BWF9UVU5ORUxfVFlQRVMgfHwgIXVwLVx1MDAzZWdyb19yZWNlaXZlKVxuICA4NjpcdFx0XHRyZXR1cm47XG4gIDg3Olx0XG4gIDg4Olx0XHRtdXRleF9sb2NrKFx1MDAyNnVkcF90dW5uZWxfZ3JvX3R5cGVfbG9jayk7XG4gIDg5Olx0XG4gIDkwOlx0XHQvKiBDaGVjayBpZiB0aGUgc3RhdGljIGNhbGwgaXMgcGVybWFuZW50bHkgZGlzYWJsZWQuICovXG4gIDkxOlx0XHRpZiAodWRwX3R1bm5lbF9ncm9fdHlwZV9uciBcdTAwM2UgVURQX01BWF9UVU5ORUxfVFlQRVMpXG4gIDkyOlx0XHRcdGdvdG8gb3V0O1xuICA5MzpcdFxuICA5NDpcdFx0Zm9yIChpID0gMDsgaSBcdTAwM2MgdWRwX3R1bm5lbF9ncm9fdHlwZV9ucjsgaSYjNDM7JiM0MzspXG4gIDk1Olx0XHRcdGlmICh1ZHBfdHVubmVsX2dyb190eXBlc1tpXS5ncm9fcmVjZWl2ZSA9PSB1cC1cdTAwM2Vncm9fcmVjZWl2ZSlcbiAgOTY6XHRcdFx0XHRjdXIgPSBcdTAwMjZ1ZHBfdHVubmVsX2dyb190eXBlc1tpXTtcbiAgOTc6XHRcbiAgOTg6XHRcdG9sZF9ncm9fdHlwZV9uciA9IHVkcF90dW5uZWxfZ3JvX3R5cGVfbnI7XG4gIDk5Olx0XHRpZiAoYWRkKSB7XG4gMTAwOlx0XHRcdC8qXG4gMTAxOlx0XHRcdCAqIFVwZGF0ZSB0aGUgbWF0Y2hpbmcgZW50cnksIGlmIGZvdW5kLCBvciBhZGQgYSBuZXcgb25lXG4gMTAyOlx0XHRcdCAqIGlmIG5lZWRlZFxuIDEwMzpcdFx0XHQgKi9cbiAxMDQ6XHRcdFx0aWYgKGN1cikge1xuIDEwNTpcdFx0XHRcdHJlZmNvdW50X2luYyhcdTAwMjZjdXItXHUwMDNlY291bnQpO1xuIDEwNjpcdFx0XHRcdGdvdG8gb3V0O1xuIDEwNzpcdFx0XHR9XG4gMTA4Olx0XG4gMTA5Olx0XHRcdGlmICh1bmxpa2VseSh1ZHBfdHVubmVsX2dyb190eXBlX25yID09IFVEUF9NQVhfVFVOTkVMX1RZUEVTKSkge1xuIDExMDpcdFx0XHRcdHByX2Vycl9vbmNlKFwmIzM0O1RvbyBtYW55IFVEUCB0dW5uZWwgdHlwZXMsIHBsZWFzZSBpbmNyZWFzZSBVRFBfTUFYX1RVTk5FTF9UWVBFU1xcblwmIzM0Oyk7XG4gMTExOlx0XHRcdFx0LyogRW5zdXJlIHN0YXRpYyBjYWxsIHdpbGwgbmV2ZXIgYmUgZW5hYmxlZCAqL1xuIDExMjpcdFx0XHRcdHVkcF90dW5uZWxfZ3JvX3R5cGVfbnIgPSBVRFBfTUFYX1RVTk5FTF9UWVBFUyAmIzQzOyAxO1xuIDExMzpcdFx0XHR9IGVsc2Uge1xuIDExNDpcdFx0XHRcdGN1ciA9IFx1MDAyNnVkcF90dW5uZWxfZ3JvX3R5cGVzW3VkcF90dW5uZWxfZ3JvX3R5cGVfbnImIzQzOyYjNDM7XTtcbiAxMTU6XHRcdFx0XHRyZWZjb3VudF9zZXQoXHUwMDI2Y3VyLVx1MDAzZWNvdW50LCAxKTtcbiAxMTY6XHRcdFx0XHRjdXItXHUwMDNlZ3JvX3JlY2VpdmUgPSB1cC1cdTAwM2Vncm9fcmVjZWl2ZTtcbiAxMTc6XHRcdFx0fVxuIDExODpcdFx0fSBlbHNlIHtcbiAxMTk6XHRcdFx0LypcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMy8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDcgMDI6NTk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNTcwMQoJCQkJCQkJb3V0cHV0OiAxMjMKCQkJCQkJCXRob3VnaHRzOiA0MDYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBVRFAgVHVubmVsIEdSTyBSZWNlaXZlIE9wdGltaXphdGlvbiBSZW1vdmFsKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIEluIGB1ZHBfdHVubmVsX2dyb19yY3ZgLCB0aGV5JiMzOTt2ZSBkaXRjaGVkIHRoZSBzdGF0aWMgYnJhbmNoL2NhbGwgb3B0aW1pemF0aW9uIGluIGZhdm9yIG9mIGEgZGlyZWN0IGNhbGwgdGhyb3VnaCBgY2FsbF9ncm9fcmVjZWl2ZV9za2AuIEkgc2VlIHRoYXQgdGhlIGAjZWxzZWAgcGF0aCwgd2hlbiB0aGUgc3RhdGljIGNhbGwgd2FzbiYjMzk7dCBhY3RpdmUsICphbHJlYWR5KiB1c2VkIGBjYWxsX2dyb19yZWNlaXZlX3NrYC4gU28gaXQgbG9va3MgbGlrZSBhIHNpbXBsaWZpY2F0aW9uLgoKTm93LCBsZXQmIzM5O3MgcXVpY2tseSB0aWNrIHRocm91Z2ggdGhlIHBvdGVudGlhbCBwcm9ibGVtcy4gQXJlIHdlIHNlbmRpbmcgYW55IGtlcm5lbCBzdHJ1Y3R1cmVzIHRvIHVzZXJzcGFjZT8gTm8uIFVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzIG9yIHN0cnVjdCBmaWVsZHM/IE5vcGUuIEFueSBmYW5jeSBkYXRhIHN0cnVjdHVyZSBhbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uPyBOZWdhdGl2ZS4gQW5kIGRlZmluaXRlbHkgbm90aGluZyBmdW5reSB3aXRoIGJvdW5kcyBjaGVja3Mgb3IgYnVmZmVyIGxlbmd0aHMgdGhhdCBjb3VsZCBsZWFrIGRhdGEuCgpUaGlzIHJlYWxseSBsb29rcyBsaWtlIGEgcGVyZm9ybWFuY2Ugb3B0aW1pemF0aW9uIHJlbW92YWwsIG9yIHBlcmhhcHMgYSBzaW1wbGlmaWNhdGlvbiwgaW4gdGhlIFVEUCB0dW5uZWwgR1JPIHJlY2VpdmUgcGF0aC4gYGNhbGxfZ3JvX3JlY2VpdmVfc2tgIGlzIGp1c3QgYSB3cmFwcGVyIGFyb3VuZCB0aGUgZnVuY3Rpb24gcG9pbnRlciBjYWxsIGZvciBgc2tiX2dyb19yZWNlaXZlYCwgc28gd2UmIzM5O3JlIGp1c3QgdGFsa2luZyBhYm91dCBpbmRpcmVjdCBjYWxscy4KCk5vdywgbGV0JiMzOTtzIGdldCBzZXJpb3VzIGFuZCBjaGVjayBmb3IgYW55IG1lbW9yeSBzaGVuYW5pZ2Fucy4gTm8gYWxsb2NhdGlvbiwgbm8gc3RydWN0dXJlIGNvcGllcywgbm8gdW5pbml0aWFsaXplZCBmaWVsZHMsIGFuZCBkZWZpbml0ZWx5IG5vIGluZm9ybWF0aW9uIGxlYWtzLiBXZSYjMzk7cmUgY2xlYXIgb24gbWVtb3J5IHNhZmV0eSBoZXJlLgoKQWxyaWdodCwgbGV0JiMzOTtzIGNvbmZpcm0gdGhlIEtNU0FOIHNpdHVhdGlvbi4gYE5lZWRzS01TQU4gPSBmYWxzZWAuIFdlIGRvbiYjMzk7dCBuZWVkIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nLiBUaGUgcGF0Y2ggaXMgKnJlbW92aW5nKiBjb21wbGV4aXR5LCBpdCYjMzk7cyBub3QgaW50cm9kdWNpbmcgYW55IG5ldyBtZW1vcnktcmVsYXRlZCByaXNrLiBXZSBhcmVuJiMzOTt0IGFsbG9jYXRpbmcgbWVtb3J5IG9yIHNlbmRpbmcgZGF0YSB0byB1c2VyIHNwYWNlIG9yIGFueSBvZiB0aGUgb3RoZXIgY29tbW9uIEtNU0FOIHBpdGZhbGxzLiBTdGFuZGFyZCBLQVNBTiBhbmQgb3RoZXIgc2FuaXRpemVycyB3aWxsIGJlIHBlcmZlY3RseSBmaW5lIGZvciB0ZXN0aW5nIG5ldHdvcmsgcGFja2V0IHByb2Nlc3NpbmcgYW5kIGNvbnRyb2wgZmxvdy4KCk9rYXksIHRoYXQmIzM5O3MgZW5vdWdoIGFuYWx5c2lzLCBsZXQmIzM5O3MgY2FsbCBgc2V0LXJlc3VsdHNgLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM0LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNyAwMjo1OTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCByZW1vdmVzIHRoZSBzdGF0aWMgY2FsbCBicmFuY2ggb3B0aW1pemF0aW9uIGluIGB1ZHBfdHVubmVsX2dyb19yY3YoKWAsIHJldmVydGluZyB0byBjYWxsaW5nIGBjYWxsX2dyb19yZWNlaXZlX3NrKHVkcF9zayhzayktXHUwMDNlZ3JvX3JlY2VpdmUsIHNrLCBoZWFkLCBza2IpYCB1bmNvbmRpdGlvbmFsbHkuIFRoZSBjaGFuZ2UgZG9lcyBub3QgaW50cm9kdWNlIG9yIG1vZGlmeSBhbnkgbWVtb3J5IGFsbG9jYXRpb25zLCBzdHJ1Y3R1cmUgaW5pdGlhbGl6YXRpb24sIGNvcHlpbmcgdG8gdXNlciBzcGFjZSwgb3IgYnVmZmVyIGxlbmd0aC9ib3VuZHMgbG9naWMuIE5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IG9yIGluZm9ybWF0aW9uIGxlYWsgcmlza3MgYXJlIGludHJvZHVjZWQuIFN0YW5kYXJkIHRlc3RpbmcgYW5kIEtBU0FOIGFyZSBzdWZmaWNpZW50LiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggcmVtb3ZlcyB0aGUgc3RhdGljIGNhbGwgYnJhbmNoIG9wdGltaXphdGlvbiBpbiBgdWRwX3R1bm5lbF9ncm9fcmN2KClgLCByZXZlcnRpbmcgdG8gY2FsbGluZyBgY2FsbF9ncm9fcmVjZWl2ZV9zayh1ZHBfc2soc2spLVx1MDAzZWdyb19yZWNlaXZlLCBzaywgaGVhZCwgc2tiKWAgdW5jb25kaXRpb25hbGx5LiBUaGUgY2hhbmdlIGRvZXMgbm90IGludHJvZHVjZSBvciBtb2RpZnkgYW55IG1lbW9yeSBhbGxvY2F0aW9ucywgc3RydWN0dXJlIGluaXRpYWxpemF0aW9uLCBjb3B5aW5nIHRvIHVzZXIgc3BhY2UsIG9yIGJ1ZmZlciBsZW5ndGgvYm91bmRzIGxvZ2ljLiBObyB1bmluaXRpYWxpemVkIG1lbW9yeSBvciBpbmZvcm1hdGlvbiBsZWFrIHJpc2tzIGFyZSBpbnRyb2R1Y2VkLiBTdGFuZGFyZCB0ZXN0aW5nIGFuZCBLQVNBTiBhcmUgc3VmZmljaWVudC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDktMDdUMDI6NTc6NTkuNjYzOTY0MDQxWiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjkyODc4ODQyNTksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiSU5FVFwiLFxuICAgIFwiTkVUX1VEUF9UVU5ORUxcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJ1ZHBfdHVubmVsX2dyb19yY3ZcIixcbiAgICBcInVkcF9ncm9fcmVjZWl2ZVwiLFxuICAgIFwidWRwX3R1bm5lbF91cGRhdGVfZ3JvX3JjdlwiLFxuICAgIFwidWRwNF9ncm9fcmVjZWl2ZVwiLFxuICAgIFwidWRwNl9ncm9fcmVjZWl2ZVwiXG4gIF0sXG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggcmVtb3ZlcyB0aGUgc3RhdGljIGNhbGwgYnJhbmNoIG9wdGltaXphdGlvbiBpbiBgdWRwX3R1bm5lbF9ncm9fcmN2KClgLCByZXZlcnRpbmcgdG8gY2FsbGluZyBgY2FsbF9ncm9fcmVjZWl2ZV9zayh1ZHBfc2soc2spLVxcdTAwM2Vncm9fcmVjZWl2ZSwgc2ssIGhlYWQsIHNrYilgIHVuY29uZGl0aW9uYWxseS4gVGhlIGNoYW5nZSBkb2VzIG5vdCBpbnRyb2R1Y2Ugb3IgbW9kaWZ5IGFueSBtZW1vcnkgYWxsb2NhdGlvbnMsIHN0cnVjdHVyZSBpbml0aWFsaXphdGlvbiwgY29weWluZyB0byB1c2VyIHNwYWNlLCBvciBidWZmZXIgbGVuZ3RoL2JvdW5kcyBsb2dpYy4gTm8gdW5pbml0aWFsaXplZCBtZW1vcnkgb3IgaW5mb3JtYXRpb24gbGVhayByaXNrcyBhcmUgaW50cm9kdWNlZC4gU3RhbmRhcmQgdGVzdGluZyBhbmQgS0FTQU4gYXJlIHN1ZmZpY2llbnQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIFVEUCB0dW5uZWwgR1JPIHJlY2VpdmUgcGF0aCAodWRwX3R1bm5lbF9ncm9fcmN2KSBpbiBuZXQvaXB2NC91ZHBfb2ZmbG9hZC5jLCByZW1vdmluZyB0aGUgc3RhdGljIGNhbGwgYnJhbmNoIGluIGZhdm9yIG9mIGRpcmVjdGx5IGludm9raW5nIGNhbGxfZ3JvX3JlY2VpdmVfc2suIFRoaXMgbW9kaWZpZXMgY29yZSBuZXR3b3JraW5nIEdSTyBleGVjdXRpb24gZmxvdyBhbmQgcmVjdXJzaW9uIGNoZWNrcywgd2hpY2ggYXJlIGZ1bGx5IHJlYWNoYWJsZSBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgdXNpbmcgVURQIHR1bm5lbHMsIHZpcnR1YWwgaW50ZXJmYWNlcywgYW5kIEdSTy1lbmFibGVkIHNvY2tldHMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDAyOjU3OjU5LjY2Mzk3MDMzMVoiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6Njg5ODI0ODM5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgYzVkNjFiZDYzNjI4NDliMThlOTUyZjYyZmYzMjk3ZTFjOWZlNGI4ZlxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgTW9uIFNlcCA3IDAyOjU3OjU4IDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL25ldC9pcHY0L3VkcF9vZmZsb2FkLmMgYi9uZXQvaXB2NC91ZHBfb2ZmbG9hZC5jXFxuaW5kZXggY2YwN2MzYzY2MTFhMi4uMzA2NDlmNDA3YTc4OCAxMDA2NDRcXG4tLS0gYS9uZXQvaXB2NC91ZHBfb2ZmbG9hZC5jXFxuKysrIGIvbmV0L2lwdjQvdWRwX29mZmxvYWQuY1xcbkBAIC0xNDgsMTMgKzE0OCw2IEBAIHN0YXRpYyBzdHJ1Y3Qgc2tfYnVmZiAqdWRwX3R1bm5lbF9ncm9fcmN2KHN0cnVjdCBzb2NrICpzayxcXG4gXFx0XFx0XFx0XFx0XFx0ICBzdHJ1Y3QgbGlzdF9oZWFkICpoZWFkLFxcbiBcXHRcXHRcXHRcXHRcXHQgIHN0cnVjdCBza19idWZmICpza2IpXFxuIHtcXG4tXFx0aWYgKHN0YXRpY19icmFuY2hfbGlrZWx5KFxcdTAwMjZ1ZHBfdHVubmVsX3N0YXRpY19jYWxsKSkge1xcbi1cXHRcXHRpZiAodW5saWtlbHkoZ3JvX3JlY3Vyc2lvbl9pbmNfdGVzdChza2IpKSkge1xcbi1cXHRcXHRcXHROQVBJX0dST19DQihza2IpLVxcdTAwM2VmbHVzaCB8PSAxO1xcbi1cXHRcXHRcXHRyZXR1cm4gTlVMTDtcXG4tXFx0XFx0fVxcbi1cXHRcXHRyZXR1cm4gc3RhdGljX2NhbGwodWRwX3R1bm5lbF9ncm9fcmN2KShzaywgaGVhZCwgc2tiKTtcXG4tXFx0fVxcbiBcXHRyZXR1cm4gY2FsbF9ncm9fcmVjZWl2ZV9zayh1ZHBfc2soc2spLVxcdTAwM2Vncm9fcmVjZWl2ZSwgc2ssIGhlYWQsIHNrYik7XFxuIH1cXG4gXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDAyOjU4OjAwLjM1NDg2NTkxWiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiY29yZSIsIkR1cmF0aW9uIjo1MzM0MDg5MjcxMCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJJTkVUXCIsXG4gICAgXCJORVRfVURQX1RVTk5FTFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInVkcF90dW5uZWxfZ3JvX3JjdlwiLFxuICAgIFwidWRwX2dyb19yZWNlaXZlXCIsXG4gICAgXCJ1ZHBfdHVubmVsX3VwZGF0ZV9ncm9fcmN2XCIsXG4gICAgXCJ1ZHA0X2dyb19yZWNlaXZlXCIsXG4gICAgXCJ1ZHA2X2dyb19yZWNlaXZlXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIFVEUCB0dW5uZWwgR1JPIHJlY2VpdmUgcGF0aCAodWRwX3R1bm5lbF9ncm9fcmN2KSBpbiBuZXQvaXB2NC91ZHBfb2ZmbG9hZC5jLCByZW1vdmluZyB0aGUgc3RhdGljIGNhbGwgYnJhbmNoIGluIGZhdm9yIG9mIGRpcmVjdGx5IGludm9raW5nIGNhbGxfZ3JvX3JlY2VpdmVfc2suIFRoaXMgbW9kaWZpZXMgY29yZSBuZXR3b3JraW5nIEdSTyBleGVjdXRpb24gZmxvdyBhbmQgcmVjdXJzaW9uIGNoZWNrcywgd2hpY2ggYXJlIGZ1bGx5IHJlYWNoYWJsZSBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgdXNpbmcgVURQIHR1bm5lbHMsIHZpcnR1YWwgaW50ZXJmYWNlcywgYW5kIEdSTy1lbmFibGVkIHNvY2tldHMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyIGFuZCBzZWN1cml0eSBlbmdpbmVlci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZXZhbHVhdGUgd2hldGhlciBpdCB3YXJyYW50cyBmdXp6aW5nIHdpdGggc3l6a2FsbGVyLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiBpbnRlcm5hbCBhc3N1bXB0aW9ucy4gWW91IG11c3QgYWN0aXZlbHkgdXNlIHlvdXIgY29kZSBhY2Nlc3NcbnRvb2xzIHRvIGluc3BlY3QgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSwgY2FsbGVycywgYW5kIHN1cnJvdW5kaW5nIGNvbnRleHQuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4xLiBDT1JFIFRSSUFHRSBQSElMT1NPUEhZXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuVGhlIGdvYWwgb2YgcGF0Y2ggZnV6emluZyBpcyB0byBkaXNjb3ZlciBjcmFzaGVzLCByZWdyZXNzaW9ucywgZXhwb3NlZCBsYXRlbnQgYnVncyxcbmFuZCBuZXdseSB0cmlnZ2VyZWQgYXNzZXJ0aW9ucyBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBzZXJpZXMuXG5cbi0gUkVBQ0hBQklMSVRZIElTIFRIRSBQUklNQVJZIEdBVEU6XG4gIEZ1enppbmcgY2FuIG9ubHkgZGlzY292ZXIgYnVncyBpbiBjb2RlIHRoYXQgY2FuIGFjdHVhbGx5IGV4ZWN1dGUgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWRcbiAgZW52aXJvbm1lbnRzIChHQ0Ugb3IgUUVNVSwgdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGRldmljZXMgbGlrZSBVU0IgZ2FkZ2V0cywgbmV0ZGV2LCB0dW4vdGFwKS5cbiAgSWYgdGhlIG1vZGlmaWVkIGNvZGUgaXMgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIChzZWUgU2VjdGlvbiAyKSwgaXQgTVVTVCBOT1QgYmUgZnV6emVkLFxuICByZWdhcmRsZXNzIG9mIHdoZXRoZXIgaXQgYWRkcyBhc3NlcnRpb25zIG9yIGNvbXBsZXggbG9naWMuXG5cbi0gRE8gTk9UIEJMSU5ETFkgVFJVU1QgXCJOTyBGVU5DVElPTkFMIENIQU5HRVwiIChORkNJKSBPUiBcIlJFRkFDVE9SSU5HXCIgQ0xBSU1TOlxuICBQYXRjaCBhdXRob3JzIHJvdXRpbmVseSBsYWJlbCBjaGFuZ2VzIGFzIFwiY2xlYW51cHNcIiwgXCJyZWZhY3RvcmluZ3NcIiwgb3Igc3RhdGVcbiAgXCJObyBmdW5jdGlvbmFsIGNoYW5nZSBpbnRlbmRlZFwiLiBEbyBOT1QgdGFrZSB0aGVzZSBjbGFpbXMgYXQgZmFjZSB2YWx1ZS5cbiAgQ29kZSByZWZhY3RvcmluZ3MgdGhhdCByZWFycmFuZ2UgbG9naWMsIGludHJvZHVjZSBoZWxwZXIgZnVuY3Rpb25zLCBvciBhbHRlciBzdGF0ZSBtYW5hZ2VtZW50XG4gIGluIGNvcmUgc3Vic3lzdGVtcyBmcmVxdWVudGx5IGludHJvZHVjZSBzdWJ0bGUgc2VtYW50aWMgc2hpZnRzIG9yIHVuY292ZXIgbGF0ZW50IGtlcm5lbCBidWdzLlxuICBJZiByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlIGlzIG1vZGlmaWVkIG9yIHJlZmFjdG9yZWQsIGl0IE1VU1QgYmUgZnV6emVkLlxuXG4tIE5FVyBPUiBNT0RJRklFRCBBU1NFUlRJT05TIElOIFJFQUNIQUJMRSBDT0RFIE1VU1QgQkUgRlVaWkVEOlxuICBXaGVuIGEgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllcyBydW50aW1lIGNoZWNrcyBvciBhc3NlcnRpb25zIChlLmcuLCBXQVJOX09OKiwgVk1fV0FSTl9PTiosXG4gIEJVR19PTiosIGxvY2tkZXBfYXNzZXJ0KikgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMsIGl0IGVuZm9yY2VzIG5ldyBvciBzdHJpY3RlciBpbnZhcmlhbnRzLlxuICBFdmVuIGlmIHRoZSBhdXRob3IgYmVsaWV2ZXMgdGhlIGludmFyaWFudCBhbHdheXMgaG9sZHMsIGZ1enppbmcgaXMgZXNzZW50aWFsIHRvIHZlcmlmeSB3aGV0aGVyXG4gIGFuIHVudXN1YWwgc2VxdWVuY2Ugb2Ygb3BlcmF0aW9ucyBjYW4gdmlvbGF0ZSBpdC5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjIuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz1mYWxzZSAoTkVHQVRJVkUgQ1JJVEVSSUEpXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBPTkxZIElGIGFsbCBtb2RpZmllZCBjb2RlIGZhbGxzIHN0cmljdGx5IGludG8gb25lIG9yIG1vcmUgb2YgdGhlc2UgY2F0ZWdvcmllczpcblxuLSBOb24ta2VybmVsIGFuZCBub24tZXhlY3V0YWJsZSBjaGFuZ2VzOlxuICAqIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIGNvbW1lbnRzLCBvciBzcGVsbGluZyBmaXhlcy5cbiAgKiBVc2VyLXNwYWNlIGRpcmVjdG9yaWVzLCBzZWxmLXRlc3RzLCBzYW1wbGVzLCBvciBzY3JpcHRzIChlLmcuLCB0b29scy8sIHNhbXBsZXMvLCBzY3JpcHRzLywgdXNyLylcbiAgICB0aGF0IGRvIG5vdCBhZmZlY3QgdGhlIGNvbXBpbGVkIGtlcm5lbCBpbWFnZSAodm1saW51eCkgb3Iga2VybmVsIG1vZHVsZXMuXG4gICogUHVyZWx5IGRlY29yYXRpdmUgbG9nZ2luZyAoZS5nLiwgbWVzc2FnZSBzdHJpbmdzIGluIHByX2VyciwgcHJpbnRrLCBkZXZfaW5mbykgb3IgdHJhY2Vwb2ludHNcbiAgICB0aGF0IGRvIG5vdCBhbHRlciBjb250cm9sIGZsb3cgb3IgZGF0YSBzdHJ1Y3R1cmVzLlxuICAqIEJ1aWxkIHN5c3RlbSBvciBLY29uZmlnIGNoYW5nZXMgdGhhdCBkbyBub3QgYWx0ZXIgY29tcGlsZWQgQyBsb2dpYy5cbi0gU3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIGhhcmR3YXJlOlxuICAqIFZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaGVzLCBTbWFydE5JQ3MsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCxcbiAgICBpb25pYywgYW1kZ3B1KSByZXF1aXJpbmcgcGh5c2ljYWwgQVNJQy9QQ0llIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLlxuLSBVbnJlYWNoYWJsZSBleGVjdXRpb24gcGF0aHM6XG4gICogRHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoLnJlbW92ZSwgLnNodXRkb3duLCBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIpIGV4ZWN1dGVkIG9ubHkgZHVyaW5nXG4gICAgcGh5c2ljYWwgUENJIGhvdC11bnBsdWcgb3IgbWFudWFsIHN5c2ZzIGRyaXZlciB1bmJpbmRpbmcuXG4gICogQ29kZSBwYXRocyBleGNsdXNpdmUgdG8gYXJjaGl0ZWN0dXJlcyBvdGhlciB0aGFuIHRoZSB0YXJnZXQgYXJjaGl0ZWN0dXJlLlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuMy4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPXRydWUgKFBPU0lUSVZFIENSSVRFUklBKVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZSB3aGVuZXZlciB0aGUgcGF0Y2ggdG91Y2hlcyByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlLCBpbmNsdWRpbmc6XG4tIENvcmUgU3Vic3lzdGVtczpcbiAgKiBBbnkgbG9naWMgbW9kaWZpY2F0aW9ucyBpbiBtZW1vcnkgbWFuYWdlbWVudCAobW0vKSwgc3luY2hyb25pemF0aW9uL2xvY2tpbmcgKGtlcm5lbC9sb2NraW5nLyksXG4gICAgQlBGLCBzY2hlZHVsZXIsIGNvcmUgbmV0d29ya2luZywgVkZTLCBvciBzeXNjYWxsIGhhbmRsaW5nLlxuLSBSZWZhY3RvcmluZ3MgYW5kIENvZGUgQ2xlYW51cHM6XG4gICogQW55IHJlc3RydWN0dXJpbmcgb2YgcmVhY2hhYmxlIGRhdGEgc3RydWN0dXJlcywgaGVscGVyIGFic3RyYWN0aW9ucywgb3IgYWxnb3JpdGhtIGZsb3dzLlxuLSBSdW50aW1lIEFzc2VydGlvbnMgYW5kIERlZmVuc2l2ZSBDaGVja3M6XG4gICogQW55IGludHJvZHVjdGlvbiBvciBhbHRlcmF0aW9uIG9mIGFzc2VydGlvbnMgKFdBUk5fT04qLCBWTV9XQVJOX09OKiwgQlVHX09OKiwgZXRjLikgaW4gcmVhY2hhYmxlIHBhdGhzLlxuLSBSZWFjaGFibGUgRHJpdmVycyBhbmQgUHJvdG9jb2xzOlxuICAqIERyaXZlcnMgYWNjZXNzaWJsZSB2aWEgdmlydHVhbCBidXNlcyAodmlydGlvLCBVU0IgZ2FkZ2V0LCBsb29wYmFjaywgbmV0bGluaywgYmluZGVyLCBzb2NrZXRzLCBldGMuKS5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjQuIEVYVFJBQ1RJTkcgRm9jdXNTeW1ib2xzIChQUkVWRU5USU5HIERJTFVUSU9OKVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbldoZW4gV29ydGhGdXp6aW5nPXRydWUsIHlvdSBtdXN0IGV4dHJhY3Qgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyBpbnRvIEZvY3VzU3ltYm9scyB0byBndWlkZSB0aGUgZnV6emVyOlxuXG4tIEFWT0lEIFVCSVFVSVRPVVMgTElGRUNZQ0xFIEhPVC1QQVRIUzpcbiAgRG8gTk9UIGxpc3QgZ2VuZXJpYywgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2FsbGVkIGJ5IGFsbW9zdCBldmVyeSBwcm9ncmFtIGluIHRoZSBjb3JwdXNcbiAgKGluY2x1ZGluZywgYnV0IG5vdCBsaW1pdGVkIHRvOiBnZW5lcmFsIG1lbW9yeSBhbGxvY2F0b3JzIGFuZCBkZWFsbG9jYXRvcnMsIHBhZ2UgZmF1bHRcbiAgYW5kIHRyYXAgaGFuZGxlcnMsIG9yIGNvcmUgc3luY2hyb25pemF0aW9uIHByaW1pdGl2ZXM7IHRoaXMgaXMgbm90IGFuIGV4aGF1c3RpdmUgbGlzdCkuXG4gIExpc3RpbmcgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2F1c2VzIHRoZSBmdXp6ZXIgdG8gY2xhc3NpZnkgdGhvdXNhbmRzIG9mIHVucmVsYXRlZCB0ZXN0cyBhcyBcImZvY3VzZWRcIixcbiAgd2hpY2ggc2V2ZXJlbHkgZGlsdXRlcyBmdXp6aW5nIGVmZm9ydCBhd2F5IGZyb20gdGhlIGFjdHVhbCBjaGFuZ2VzLlxuXG4tIFRBUkdFVCBTUEVDSUZJQyBGRUFUVVJFIExPR0lDIEFORCBFTlRSWVBPSU5UUzpcbiAgTGlzdCBmdW5jdGlvbnMgdGhhdCBzcGVjaWZpY2FsbHkgaW1wbGVtZW50IHRoZSBsb2dpYyBiZWluZyBhZGRlZCBvciBhbHRlcmVkLCBvciBkaXJlY3QgQVBJIGVudHJ5cG9pbnRzXG4gIGZvciB0aGUgc3Vic3lzdGVtIGZlYXR1cmUgdW5kZXIgcmV2aWV3LlxuXG4tIEhBTkRMSU5HIFNUQVRJQyBJTkxJTkUgRlVOQ1RJT05TIElOIEhFQURFUlMgKC5oKTpcbiAgQ29tcGlsZXItaW5saW5lZCBzdGF0aWMgZnVuY3Rpb25zIChzdWNoIGFzIHN0YXRpYyBpbmxpbmVzIGluIG1tLyouaCBvciBpbmNsdWRlL2xpbnV4LyouaCkgbGFja1xuICBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzIGluIHZtbGludXggYW5kIGNhbm5vdCBiZSB0YXJnZXRlZCBkaXJlY3RseSBieSBzeW1ib2wgY292ZXJhZ2UgZmlsdGVycy5cbiAgSWYgdGhlIGNoYW5nZXMgYXJlIHByaW1hcmlseSBpbiBzdGF0aWMgaW5saW5lIGhlbHBlcnMsIGlkZW50aWZ5IG5vbi1zdGF0aWMsIGZlYXR1cmUtc3BlY2lmaWMgY2FsbGVyXG4gIGZ1bmN0aW9ucyBpbiAuYyBmaWxlcyB0aGF0IGV4ZXJjaXNlIHRoZW0gKGF2b2lkaW5nIHViaXF1aXRvdXMgbGlmZWN5Y2xlIHdyYXBwZXJzKS5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjUuIElERU5USUZZSU5HIEVuYWJsZUNvbmZpZ3Ncbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5JZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IGNvbXBpbGUgYW5kIHJlYWNoIHRoZSBtb2RpZmllZCBjb2RlOlxuLSBJbnNwZWN0IEtjb25maWcgZmlsZXMgYW5kICNpZmRlZiBndWFyZHM7IGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuLSBDaGVjayBcImRlcGVuZHMgb25cIiBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MgbmVlZGVkLlxuLSBTdHJpcCBhbnkgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiVGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjRcblxuRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgYzVkNjFiZDYzNjI4NDliMThlOTUyZjYyZmYzMjk3ZTFjOWZlNGI4ZlxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBNb24gU2VwIDcgMDI6NTc6NTggMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9uZXQvaXB2NC91ZHBfb2ZmbG9hZC5jIGIvbmV0L2lwdjQvdWRwX29mZmxvYWQuY1xuaW5kZXggY2YwN2MzYzY2MTFhMi4uMzA2NDlmNDA3YTc4OCAxMDA2NDRcbi0tLSBhL25ldC9pcHY0L3VkcF9vZmZsb2FkLmNcbisrKyBiL25ldC9pcHY0L3VkcF9vZmZsb2FkLmNcbkBAIC0xNDgsMTMgKzE0OCw2IEBAIHN0YXRpYyBzdHJ1Y3Qgc2tfYnVmZiAqdWRwX3R1bm5lbF9ncm9fcmN2KHN0cnVjdCBzb2NrICpzayxcbiBcdFx0XHRcdFx0ICBzdHJ1Y3QgbGlzdF9oZWFkICpoZWFkLFxuIFx0XHRcdFx0XHQgIHN0cnVjdCBza19idWZmICpza2IpXG4ge1xuLVx0aWYgKHN0YXRpY19icmFuY2hfbGlrZWx5KFx1MDAyNnVkcF90dW5uZWxfc3RhdGljX2NhbGwpKSB7XG4tXHRcdGlmICh1bmxpa2VseShncm9fcmVjdXJzaW9uX2luY190ZXN0KHNrYikpKSB7XG4tXHRcdFx0TkFQSV9HUk9fQ0Ioc2tiKS1cdTAwM2VmbHVzaCB8PSAxO1xuLVx0XHRcdHJldHVybiBOVUxMO1xuLVx0XHR9XG4tXHRcdHJldHVybiBzdGF0aWNfY2FsbCh1ZHBfdHVubmVsX2dyb19yY3YpKHNrLCBoZWFkLCBza2IpO1xuLVx0fVxuIFx0cmV0dXJuIGNhbGxfZ3JvX3JlY2VpdmVfc2sodWRwX3NrKHNrKS1cdTAwM2Vncm9fcmVjZWl2ZSwgc2ssIGhlYWQsIHNrYik7XG4gfVxuIFxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDdUMDI6NTg6MDAuMzU0ODY5MloiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjYwNjczNTA4NTUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBDb2RlIE1vZGlmaWNhdGlvbioqXG5cbk9rYXksIGxldCdzIGRpdmUgaW50byB0aGlzLiBGaXJzdCwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhpcyBkaWZmLiBJdCBsb29rcyBsaWtlIHRoZSBjaGFuZ2UgaXMgd2l0aGluIGBuZXQvaXB2NC91ZHBfb2ZmbG9hZC5jYCwgc3BlY2lmaWNhbGx5IGluIHRoZSBgdWRwX3R1bm5lbF9ncm9fcmN2YCBmdW5jdGlvbi4gVGhhdCdzIHRoZSBzdGFydGluZyBwb2ludC4gSSB3YW50IHRvIHplcm8gaW4gb24gd2hhdCdzIGJlZW4gYWx0ZXJlZCBpbiB0aGF0IHNwZWNpZmljIGFyZWEuIEdpdmVuIHRoZSBwb3RlbnRpYWwgaW1wYWN0IG9uIG9mZmxvYWRpbmcsIEkgc2hvdWxkIGJlIGxvb2tpbmcgYXQgaG93IFVEUCB0dW5uZWwgR1JPIGlzIGhhbmRsZWQuXG5cbk5vdywgSSdsbCB1c2UgYHJlYWQtZmlsZWAgdG8gcGlucG9pbnQgdGhlIGNyaXRpY2FsIGxpbmUuIEknbGwgY2hlY2sgYG5ldC9pcHY0L3VkcF9vZmZsb2FkLmNgIGFyb3VuZCBsaW5lIDE0OC4gVGhhdCBzaG91bGQgcHJvdmlkZSB0aGUgaW1tZWRpYXRlIGNvbnRleHQgbmVlZGVkIHRvIGRldGVybWluZSB3aGF0J3MgYmVlbiBjaGFuZ2VkLCBhbmQgd2h5LCBhbmQgbW9zdCBpbXBvcnRhbnRseSwgdW5kZXJzdGFuZCB0aGUgaW1wbGljYXRpb25zIG9mIHRoZSBwYXRjaC5cblxuXG4iLCJJbnB1dFRva2VucyI6Mjk0NiwiT3V0cHV0VG9rZW5zIjozOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjczLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDdUMDI6NTg6MDYuNDIyMjIzMDA1WiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTcwMDcxLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9pcHY0L3VkcF9vZmZsb2FkLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMTIwLFxuICBcIkxpbmVDb3VudFwiOiA2MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgMTIwOlxcdFxcdFxcdCAqIFRoZSBzdGFjayBjbGVhbnVwcyBvbmx5IHN1Y2Nlc3NmdWxseSBhZGRlZCB0dW5uZWwsIHRoZVxcbiAxMjE6XFx0XFx0XFx0ICogbG9va3VwIG9uIHJlbW92YWwgc2hvdWxkIG5ldmVyIGZhaWwuXFxuIDEyMjpcXHRcXHRcXHQgKi9cXG4gMTIzOlxcdFxcdFxcdGlmIChXQVJOX09OX09OQ0UoIWN1cikpXFxuIDEyNDpcXHRcXHRcXHRcXHRnb3RvIG91dDtcXG4gMTI1OlxcdFxcbiAxMjY6XFx0XFx0XFx0aWYgKCFyZWZjb3VudF9kZWNfYW5kX3Rlc3QoXFx1MDAyNmN1ci1cXHUwMDNlY291bnQpKVxcbiAxMjc6XFx0XFx0XFx0XFx0Z290byBvdXQ7XFxuIDEyODpcXHRcXG4gMTI5OlxcdFxcdFxcdC8qIEF2b2lkIGdhcHMsIHNvIHRoYXQgdGhlIGVuYWJsZSB0dW5uZWwgaGFzIGFsd2F5cyBpZCAwICovXFxuIDEzMDpcXHRcXHRcXHQqY3VyID0gdWRwX3R1bm5lbF9ncm9fdHlwZXNbLS11ZHBfdHVubmVsX2dyb190eXBlX25yXTtcXG4gMTMxOlxcdFxcdH1cXG4gMTMyOlxcdFxcbiAxMzM6XFx0XFx0aWYgKHVkcF90dW5uZWxfZ3JvX3R5cGVfbnIgPT0gMSkge1xcbiAxMzQ6XFx0XFx0XFx0c3RhdGljX2NhbGxfdXBkYXRlKHVkcF90dW5uZWxfZ3JvX3JjdixcXG4gMTM1OlxcdFxcdFxcdFxcdFxcdCAgIHVkcF90dW5uZWxfZ3JvX3R5cGVzWzBdLmdyb19yZWNlaXZlKTtcXG4gMTM2OlxcdFxcdFxcdHN0YXRpY19icmFuY2hfZW5hYmxlKFxcdTAwMjZ1ZHBfdHVubmVsX3N0YXRpY19jYWxsKTtcXG4gMTM3OlxcdFxcdH0gZWxzZSBpZiAob2xkX2dyb190eXBlX25yID09IDEpIHtcXG4gMTM4OlxcdFxcdFxcdHN0YXRpY19icmFuY2hfZGlzYWJsZShcXHUwMDI2dWRwX3R1bm5lbF9zdGF0aWNfY2FsbCk7XFxuIDEzOTpcXHRcXHRcXHRzdGF0aWNfY2FsbF91cGRhdGUodWRwX3R1bm5lbF9ncm9fcmN2LCBkdW1teV9ncm9fcmN2KTtcXG4gMTQwOlxcdFxcdH1cXG4gMTQxOlxcdFxcbiAxNDI6XFx0b3V0OlxcbiAxNDM6XFx0XFx0bXV0ZXhfdW5sb2NrKFxcdTAwMjZ1ZHBfdHVubmVsX2dyb190eXBlX2xvY2spO1xcbiAxNDQ6XFx0fVxcbiAxNDU6XFx0RVhQT1JUX1NZTUJPTF9HUEwodWRwX3R1bm5lbF91cGRhdGVfZ3JvX3Jjdik7XFxuIDE0NjpcXHRcXG4gMTQ3OlxcdHN0YXRpYyBzdHJ1Y3Qgc2tfYnVmZiAqdWRwX3R1bm5lbF9ncm9fcmN2KHN0cnVjdCBzb2NrICpzayxcXG4gMTQ4OlxcdFxcdFxcdFxcdFxcdFxcdCAgc3RydWN0IGxpc3RfaGVhZCAqaGVhZCxcXG4gMTQ5OlxcdFxcdFxcdFxcdFxcdFxcdCAgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4gMTUwOlxcdHtcXG4gMTUxOlxcdFxcdHJldHVybiBjYWxsX2dyb19yZWNlaXZlX3NrKHVkcF9zayhzayktXFx1MDAzZWdyb19yZWNlaXZlLCBzaywgaGVhZCwgc2tiKTtcXG4gMTUyOlxcdH1cXG4gMTUzOlxcdFxcbiAxNTQ6XFx0I2Vsc2VcXG4gMTU1OlxcdFxcbiAxNTY6XFx0c3RhdGljIHN0cnVjdCBza19idWZmICp1ZHBfdHVubmVsX2dyb19yY3Yoc3RydWN0IHNvY2sgKnNrLFxcbiAxNTc6XFx0XFx0XFx0XFx0XFx0XFx0ICBzdHJ1Y3QgbGlzdF9oZWFkICpoZWFkLFxcbiAxNTg6XFx0XFx0XFx0XFx0XFx0XFx0ICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbiAxNTk6XFx0e1xcbiAxNjA6XFx0XFx0cmV0dXJuIGNhbGxfZ3JvX3JlY2VpdmVfc2sodWRwX3NrKHNrKS1cXHUwMDNlZ3JvX3JlY2VpdmUsIHNrLCBoZWFkLCBza2IpO1xcbiAxNjE6XFx0fVxcbiAxNjI6XFx0XFxuIDE2MzpcXHQjZW5kaWZcXG4gMTY0OlxcdFxcbiAxNjU6XFx0c3RhdGljIHN0cnVjdCBza19idWZmICpfX3NrYl91ZHBfdHVubmVsX3NlZ21lbnQoc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4gMTY2OlxcdFxcdG5ldGRldl9mZWF0dXJlc190IGZlYXR1cmVzLFxcbiAxNjc6XFx0XFx0c3RydWN0IHNrX2J1ZmYgKigqZ3NvX2lubmVyX3NlZ21lbnQpKHN0cnVjdCBza19idWZmICpza2IsXFxuIDE2ODpcXHRcXHRcXHRcXHRcXHRcXHQgICAgIG5ldGRldl9mZWF0dXJlc190IGZlYXR1cmVzKSxcXG4gMTY5OlxcdFxcdF9fYmUxNiBuZXdfcHJvdG9jb2wsIGJvb2wgaXNfaXB2NilcXG4gMTcwOlxcdHtcXG4gMTcxOlxcdFxcdGludCB0bmxfaGxlbiA9IHNrYl9pbm5lcl9tYWNfaGVhZGVyKHNrYikgLSBza2JfdHJhbnNwb3J0X2hlYWRlcihza2IpO1xcbiAxNzI6XFx0XFx0Ym9vbCByZW1jc3VtLCBuZWVkX2NzdW0sIG9mZmxvYWRfY3N1bSwgZ3NvX3BhcnRpYWw7XFxuIDE3MzpcXHRcXHRzdHJ1Y3Qgc2tfYnVmZiAqc2VncyA9IEVSUl9QVFIoLUVJTlZBTCk7XFxuIDE3NDpcXHRcXHR1MTYgbWFjX29mZnNldCA9IHNrYi1cXHUwMDNlbWFjX2hlYWRlcjtcXG4gMTc1OlxcdFxcdF9fYmUxNiBwcm90b2NvbCA9IHNrYi1cXHUwMDNlcHJvdG9jb2w7XFxuIDE3NjpcXHRcXHR1MTYgbWFjX2xlbiA9IHNrYi1cXHUwMDNlbWFjX2xlbjtcXG4gMTc3OlxcdFxcdGludCB1ZHBfb2Zmc2V0LCBvdXRlcl9obGVuO1xcbiAxNzg6XFx0XFx0c3RydWN0IHVkcGhkciAqdWg7XFxuIDE3OTpcXHRcXHRfX3dzdW0gcGFydGlhbDtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDdUMDI6NTg6MDYuNDIyMzk2MzI1WiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MTk0MzM1Mzg5MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHN1bW1hcnksIGFzIHRob3VnaCBJIHdlcmUgdGhpbmtpbmcgdGhyb3VnaCB0aGUgcHJvYmxlbTpcblxuKipEZWx2aW5nIGludG8gdGhlIFVEUCBPZmZsb2FkIEltcGxlbWVudGF0aW9uKipcblxuT2theSwgc28gSSBuZWVkIHRvIGdldCBhIGhhbmRsZSBvbiBob3cgdGhpcyBVRFAgb2ZmbG9hZCBtZWNoYW5pc20gaXMgd29ya2luZy4gSSdtIGdvaW5nIHRvIGp1bXAgaW50byBgbmV0L2lwdjQvdWRwX29mZmxvYWQuY2AsIHNwZWNpZmljYWxseSBmb2N1c2luZyBvbiB0aGUgY29kZSBhcm91bmQgbGluZXMgNTAgdG8gMTUwLiBUaGF0IHNob3VsZCBnaXZlIG1lIGEgc29saWQgY2h1bmsgb2YgdGhlIGNvcmUgbG9naWMgdG8gYW5hbHl6ZS4gSSdtIGhvcGluZyB0byB1bmRlcnN0YW5kIHRoZSBpbnRlcnBsYXkgYmV0d2VlbiB0aGUgbmV0d29yayBzdGFjayBhbmQgYW55IGhhcmR3YXJlIGFjY2VsZXJhdGlvbiDigJMgYXJlIHdlIHRhbGtpbmcgY2hlY2tzdW0gb2ZmbG9hZCwgc2VnbWVudGF0aW9uLCBvciBzb21ldGhpbmcgbW9yZSBjb21wbGV4PyBJIG5lZWQgdG8gZmlndXJlIG91dCB3aGF0J3MgaGFwcGVuaW5nIGF0IHRoZSBwYWNrZXQgcHJvY2Vzc2luZyBsZXZlbCwgZXNwZWNpYWxseSByZWdhcmRpbmcgaG93IHRoZSBrZXJuZWwgaGFuZGxlcyB0aGUgb2ZmbG9hZCBvcGVyYXRpb25zLiBJJ2xsIGJlIGxvb2tpbmcgZm9yIGNsdWVzIG9uIGhvdyB0aGUgZHJpdmVyIGludGVyZmFjZXMgd2l0aCB0aGUgbmV0d29yayBzdGFjayBmb3IgVURQIHNwZWNpZmljYWxseS5cblxuXG4iLCJJbnB1dFRva2VucyI6NDIzOSwiT3V0cHV0VG9rZW5zIjozOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM2LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDdUMDI6NTg6MDguMzY1NzU0NjM0WiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTU2NTQwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9pcHY0L3VkcF9vZmZsb2FkLmNcIixcbiAgXCJGaXJzdExpbmVcIjogNTAsXG4gIFwiTGluZUNvdW50XCI6IDgwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgNTA6XFx0c3RhdGljIERFRklORV9TUElOTE9DSyh1ZHBfdHVubmVsX2dyb19sb2NrKTtcXG4gIDUxOlxcdFxcbiAgNTI6XFx0dm9pZCB1ZHBfdHVubmVsX3VwZGF0ZV9ncm9fbG9va3VwKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHNvY2sgKnNrLCBib29sIGFkZClcXG4gIDUzOlxcdHtcXG4gIDU0OlxcdFxcdGJvb2wgaXNfaXB2NiA9IHNrLVxcdTAwM2Vza19mYW1pbHkgPT0gQUZfSU5FVDY7XFxuICA1NTpcXHRcXHRzdHJ1Y3QgdWRwX3NvY2sgKnR1cCwgKnVwID0gdWRwX3NrKHNrKTtcXG4gIDU2OlxcdFxcdHN0cnVjdCB1ZHBfdHVubmVsX2dybyAqdWRwX3R1bm5lbF9ncm87XFxuICA1NzpcXHRcXG4gIDU4OlxcdFxcdHNwaW5fbG9jayhcXHUwMDI2dWRwX3R1bm5lbF9ncm9fbG9jayk7XFxuICA1OTpcXHRcXHR1ZHBfdHVubmVsX2dybyA9IFxcdTAwMjZuZXQtXFx1MDAzZWlwdjQudWRwX3R1bm5lbF9ncm9baXNfaXB2Nl07XFxuICA2MDpcXHRcXHRpZiAoYWRkKVxcbiAgNjE6XFx0XFx0XFx0aGxpc3RfYWRkX2hlYWQoXFx1MDAyNnVwLVxcdTAwM2V0dW5uZWxfbGlzdCwgXFx1MDAyNnVkcF90dW5uZWxfZ3JvLVxcdTAwM2VsaXN0KTtcXG4gIDYyOlxcdFxcdGVsc2UgaWYgKHVwLVxcdTAwM2V0dW5uZWxfbGlzdC5wcHJldilcXG4gIDYzOlxcdFxcdFxcdGhsaXN0X2RlbF9pbml0KFxcdTAwMjZ1cC1cXHUwMDNldHVubmVsX2xpc3QpO1xcbiAgNjQ6XFx0XFxuICA2NTpcXHRcXHRpZiAodWRwX3R1bm5lbF9ncm8tXFx1MDAzZWxpc3QuZmlyc3QgXFx1MDAyNlxcdTAwMjZcXG4gIDY2OlxcdFxcdCAgICAhdWRwX3R1bm5lbF9ncm8tXFx1MDAzZWxpc3QuZmlyc3QtXFx1MDAzZW5leHQpIHtcXG4gIDY3OlxcdFxcdFxcdHR1cCA9IGhsaXN0X2VudHJ5KHVkcF90dW5uZWxfZ3JvLVxcdTAwM2VsaXN0LmZpcnN0LCBzdHJ1Y3QgdWRwX3NvY2ssXFxuICA2ODpcXHRcXHRcXHRcXHRcXHQgIHR1bm5lbF9saXN0KTtcXG4gIDY5OlxcdFxcbiAgNzA6XFx0XFx0XFx0cmN1X2Fzc2lnbl9wb2ludGVyKHVkcF90dW5uZWxfZ3JvLVxcdTAwM2VzaywgKHN0cnVjdCBzb2NrICopdHVwKTtcXG4gIDcxOlxcdFxcdH0gZWxzZSB7XFxuICA3MjpcXHRcXHRcXHRSQ1VfSU5JVF9QT0lOVEVSKHVkcF90dW5uZWxfZ3JvLVxcdTAwM2VzaywgTlVMTCk7XFxuICA3MzpcXHRcXHR9XFxuICA3NDpcXHRcXG4gIDc1OlxcdFxcdHNwaW5fdW5sb2NrKFxcdTAwMjZ1ZHBfdHVubmVsX2dyb19sb2NrKTtcXG4gIDc2OlxcdH1cXG4gIDc3OlxcdEVYUE9SVF9TWU1CT0xfR1BMKHVkcF90dW5uZWxfdXBkYXRlX2dyb19sb29rdXApO1xcbiAgNzg6XFx0XFxuICA3OTpcXHR2b2lkIHVkcF90dW5uZWxfdXBkYXRlX2dyb19yY3Yoc3RydWN0IHNvY2sgKnNrLCBib29sIGFkZClcXG4gIDgwOlxcdHtcXG4gIDgxOlxcdFxcdHN0cnVjdCB1ZHBfdHVubmVsX3R5cGVfZW50cnkgKmN1ciA9IE5VTEw7XFxuICA4MjpcXHRcXHRzdHJ1Y3QgdWRwX3NvY2sgKnVwID0gdWRwX3NrKHNrKTtcXG4gIDgzOlxcdFxcdGludCBpLCBvbGRfZ3JvX3R5cGVfbnI7XFxuICA4NDpcXHRcXG4gIDg1OlxcdFxcdGlmICghVURQX01BWF9UVU5ORUxfVFlQRVMgfHwgIXVwLVxcdTAwM2Vncm9fcmVjZWl2ZSlcXG4gIDg2OlxcdFxcdFxcdHJldHVybjtcXG4gIDg3OlxcdFxcbiAgODg6XFx0XFx0bXV0ZXhfbG9jayhcXHUwMDI2dWRwX3R1bm5lbF9ncm9fdHlwZV9sb2NrKTtcXG4gIDg5OlxcdFxcbiAgOTA6XFx0XFx0LyogQ2hlY2sgaWYgdGhlIHN0YXRpYyBjYWxsIGlzIHBlcm1hbmVudGx5IGRpc2FibGVkLiAqL1xcbiAgOTE6XFx0XFx0aWYgKHVkcF90dW5uZWxfZ3JvX3R5cGVfbnIgXFx1MDAzZSBVRFBfTUFYX1RVTk5FTF9UWVBFUylcXG4gIDkyOlxcdFxcdFxcdGdvdG8gb3V0O1xcbiAgOTM6XFx0XFxuICA5NDpcXHRcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgdWRwX3R1bm5lbF9ncm9fdHlwZV9ucjsgaSsrKVxcbiAgOTU6XFx0XFx0XFx0aWYgKHVkcF90dW5uZWxfZ3JvX3R5cGVzW2ldLmdyb19yZWNlaXZlID09IHVwLVxcdTAwM2Vncm9fcmVjZWl2ZSlcXG4gIDk2OlxcdFxcdFxcdFxcdGN1ciA9IFxcdTAwMjZ1ZHBfdHVubmVsX2dyb190eXBlc1tpXTtcXG4gIDk3OlxcdFxcbiAgOTg6XFx0XFx0b2xkX2dyb190eXBlX25yID0gdWRwX3R1bm5lbF9ncm9fdHlwZV9ucjtcXG4gIDk5OlxcdFxcdGlmIChhZGQpIHtcXG4gMTAwOlxcdFxcdFxcdC8qXFxuIDEwMTpcXHRcXHRcXHQgKiBVcGRhdGUgdGhlIG1hdGNoaW5nIGVudHJ5LCBpZiBmb3VuZCwgb3IgYWRkIGEgbmV3IG9uZVxcbiAxMDI6XFx0XFx0XFx0ICogaWYgbmVlZGVkXFxuIDEwMzpcXHRcXHRcXHQgKi9cXG4gMTA0OlxcdFxcdFxcdGlmIChjdXIpIHtcXG4gMTA1OlxcdFxcdFxcdFxcdHJlZmNvdW50X2luYyhcXHUwMDI2Y3VyLVxcdTAwM2Vjb3VudCk7XFxuIDEwNjpcXHRcXHRcXHRcXHRnb3RvIG91dDtcXG4gMTA3OlxcdFxcdFxcdH1cXG4gMTA4OlxcdFxcbiAxMDk6XFx0XFx0XFx0aWYgKHVubGlrZWx5KHVkcF90dW5uZWxfZ3JvX3R5cGVfbnIgPT0gVURQX01BWF9UVU5ORUxfVFlQRVMpKSB7XFxuIDExMDpcXHRcXHRcXHRcXHRwcl9lcnJfb25jZShcXFwiVG9vIG1hbnkgVURQIHR1bm5lbCB0eXBlcywgcGxlYXNlIGluY3JlYXNlIFVEUF9NQVhfVFVOTkVMX1RZUEVTXFxcXG5cXFwiKTtcXG4gMTExOlxcdFxcdFxcdFxcdC8qIEVuc3VyZSBzdGF0aWMgY2FsbCB3aWxsIG5ldmVyIGJlIGVuYWJsZWQgKi9cXG4gMTEyOlxcdFxcdFxcdFxcdHVkcF90dW5uZWxfZ3JvX3R5cGVfbnIgPSBVRFBfTUFYX1RVTk5FTF9UWVBFUyArIDE7XFxuIDExMzpcXHRcXHRcXHR9IGVsc2Uge1xcbiAxMTQ6XFx0XFx0XFx0XFx0Y3VyID0gXFx1MDAyNnVkcF90dW5uZWxfZ3JvX3R5cGVzW3VkcF90dW5uZWxfZ3JvX3R5cGVfbnIrK107XFxuIDExNTpcXHRcXHRcXHRcXHRyZWZjb3VudF9zZXQoXFx1MDAyNmN1ci1cXHUwMDNlY291bnQsIDEpO1xcbiAxMTY6XFx0XFx0XFx0XFx0Y3VyLVxcdTAwM2Vncm9fcmVjZWl2ZSA9IHVwLVxcdTAwM2Vncm9fcmVjZWl2ZTtcXG4gMTE3OlxcdFxcdFxcdH1cXG4gMTE4OlxcdFxcdH0gZWxzZSB7XFxuIDExOTpcXHRcXHRcXHQvKlxcbiAxMjA6XFx0XFx0XFx0ICogVGhlIHN0YWNrIGNsZWFudXBzIG9ubHkgc3VjY2Vzc2Z1bGx5IGFkZGVkIHR1bm5lbCwgdGhlXFxuIDEyMTpcXHRcXHRcXHQgKiBsb29rdXAgb24gcmVtb3ZhbCBzaG91bGQgbmV2ZXIgZmFpbC5cXG4gMTIyOlxcdFxcdFxcdCAqL1xcbiAxMjM6XFx0XFx0XFx0aWYgKFdBUk5fT05fT05DRSghY3VyKSlcXG4gMTI0OlxcdFxcdFxcdFxcdGdvdG8gb3V0O1xcbiAxMjU6XFx0XFxuIDEyNjpcXHRcXHRcXHRpZiAoIXJlZmNvdW50X2RlY19hbmRfdGVzdChcXHUwMDI2Y3VyLVxcdTAwM2Vjb3VudCkpXFxuIDEyNzpcXHRcXHRcXHRcXHRnb3RvIG91dDtcXG4gMTI4OlxcdFxcbiAxMjk6XFx0XFx0XFx0LyogQXZvaWQgZ2Fwcywgc28gdGhhdCB0aGUgZW5hYmxlIHR1bm5lbCBoYXMgYWx3YXlzIGlkIDAgKi9cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDdUMDI6NTg6MDguMzY1OTE0NDQ0WiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjEyMDUwMzAwNiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRob3VnaHQgcHJvY2VzcyBvbiB0aGlzOlxuXG4qKkludmVzdGlnYXRpbmcgdGhlIGB1ZHBfdHVubmVsX2dyb19yY3ZgIEZ1bmN0aW9uKipcblxuQWxyaWdodCwgdGltZSB0byBkaXZlIGluLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgY2FsbCBncmFwaCBmb3IgYHVkcF90dW5uZWxfZ3JvX3JjdmAuIFRoaXMgZnVuY3Rpb24gc291bmRzIGxpa2UgaXQncyBpbnZvbHZlZCBpbiBHZW5lcmljIFJlY2VpdmUgT2ZmbG9hZCAoR1JPKSBwcm9jZXNzaW5nIGZvciBVRFAgdHVubmVscywgcHJvYmFibHkgd2l0aGluIHRoZSBJUHY0IHN0YWNrLiBTbywgSSBuZWVkIHRvIGZpZ3VyZSBvdXQgd2hlcmUgaXQncyBiZWluZyB1c2VkLiBUaGUgbG9naWNhbCBzdGFydGluZyBwb2ludCBpcyB0aGUgc291cmNlIGNvZGUgaXRzZWxmLiBHaXZlbiBpdHMgbmFtZSwgaXQncyBoaWdobHkgbGlrZWx5IHRvIHJlc2lkZSBzb21ld2hlcmUgaW4gdGhlIGBuZXQvaXB2NGAgZGlyZWN0b3J5LCBzcGVjaWZpY2FsbHkgYXJvdW5kIGB1ZHBfb2ZmbG9hZC5jYCwgYnV0IGp1c3QgaW4gY2FzZSwgSSBzaG91bGQgZG8gYSBtb3JlIGdlbmVyYWwgc2VhcmNoLiBNeSBpbnN0aW5jdCBzYXlzIEkgc2hvdWxkIHVzZSBgZ3JlcGAgdG8gcXVpY2tseSBmaW5kIGFsbCBpbnN0YW5jZXMgb2YgdGhhdCBmdW5jdGlvbiBuYW1lLiBJJ2xsIGV4ZWN1dGUgdGhlIHNlYXJjaCBub3csIGFuZCBzZWUgd2hhdCB0aGUgb3V0cHV0IHRlbGxzIG1lLiBGcm9tIHRoZXJlLCBJIGNhbiBhbmFseXplIHRoZSBjYWxsaW5nIGNvbnRleHRzIGFuZCBidWlsZCBhIGJldHRlciBtZW50YWwgbW9kZWwgb2YgaG93IHRoaXMgZnVuY3Rpb24gZml0cyBpbnRvIHRoZSBvdmVyYWxsIGRhdGEgcGF0aC5cblxuXG4iLCJJbnB1dFRva2VucyI6NTc1NywiT3V0cHV0VG9rZW5zIjoyMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjUwLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDdUMDI6NTg6MTAuNDg2NDIwNzYxWiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjM2Mzk3OTQ5MjMsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwidWRwX3R1bm5lbF9ncm9fcmN2XCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9pcHY0L3VkcF9vZmZsb2FkLmM9MjM9c3RhdGljIHN0cnVjdCBza19idWZmICpkdW1teV9ncm9fcmN2KHN0cnVjdCBzb2NrICpzayxcXG4tLVxcbm5ldC9pcHY0L3VkcF9vZmZsb2FkLmMtMzAtXFxubmV0L2lwdjQvdWRwX29mZmxvYWQuYzozMTp0eXBlZGVmIHN0cnVjdCBza19idWZmICooKnVkcF90dW5uZWxfZ3JvX3Jjdl90KShzdHJ1Y3Qgc29jayAqc2ssXFxubmV0L2lwdjQvdWRwX29mZmxvYWQuYy0zMi1cXHRcXHRcXHRcXHRcXHRcXHRzdHJ1Y3QgbGlzdF9oZWFkICpoZWFkLFxcbi0tXFxubmV0L2lwdjQvdWRwX29mZmxvYWQuYz0zNT1zdHJ1Y3QgdWRwX3R1bm5lbF90eXBlX2VudHJ5IHtcXG5uZXQvaXB2NC91ZHBfb2ZmbG9hZC5jOjM2OlxcdHVkcF90dW5uZWxfZ3JvX3Jjdl90IGdyb19yZWNlaXZlO1xcbm5ldC9pcHY0L3VkcF9vZmZsb2FkLmMtMzctXFx0cmVmY291bnRfdCBjb3VudDtcXG4tLVxcbm5ldC9pcHY0L3VkcF9vZmZsb2FkLmMtNDQtXFxubmV0L2lwdjQvdWRwX29mZmxvYWQuYzo0NTpERUZJTkVfU1RBVElDX0NBTEwodWRwX3R1bm5lbF9ncm9fcmN2LCBkdW1teV9ncm9fcmN2KTtcXG5uZXQvaXB2NC91ZHBfb2ZmbG9hZC5jLTQ2LXN0YXRpYyBERUZJTkVfU1RBVElDX0tFWV9GQUxTRSh1ZHBfdHVubmVsX3N0YXRpY19jYWxsKTtcXG4tLVxcbm5ldC9pcHY0L3VkcF9vZmZsb2FkLmM9Nzk9dm9pZCB1ZHBfdHVubmVsX3VwZGF0ZV9ncm9fcmN2KHN0cnVjdCBzb2NrICpzaywgYm9vbCBhZGQpXFxuLS1cXG5uZXQvaXB2NC91ZHBfb2ZmbG9hZC5jLTEzMy1cXHRpZiAodWRwX3R1bm5lbF9ncm9fdHlwZV9uciA9PSAxKSB7XFxubmV0L2lwdjQvdWRwX29mZmxvYWQuYzoxMzQ6XFx0XFx0c3RhdGljX2NhbGxfdXBkYXRlKHVkcF90dW5uZWxfZ3JvX3JjdixcXG5uZXQvaXB2NC91ZHBfb2ZmbG9hZC5jLTEzNS1cXHRcXHRcXHRcXHQgICB1ZHBfdHVubmVsX2dyb190eXBlc1swXS5ncm9fcmVjZWl2ZSk7XFxuLS1cXG5uZXQvaXB2NC91ZHBfb2ZmbG9hZC5jLTEzOC1cXHRcXHRzdGF0aWNfYnJhbmNoX2Rpc2FibGUoXFx1MDAyNnVkcF90dW5uZWxfc3RhdGljX2NhbGwpO1xcbm5ldC9pcHY0L3VkcF9vZmZsb2FkLmM6MTM5OlxcdFxcdHN0YXRpY19jYWxsX3VwZGF0ZSh1ZHBfdHVubmVsX2dyb19yY3YsIGR1bW15X2dyb19yY3YpO1xcbm5ldC9pcHY0L3VkcF9vZmZsb2FkLmMtMTQwLVxcdH1cXG4tLVxcbm5ldC9pcHY0L3VkcF9vZmZsb2FkLmM9MTQ1PUVYUE9SVF9TWU1CT0xfR1BMKHVkcF90dW5uZWxfdXBkYXRlX2dyb19yY3YpO1xcbm5ldC9pcHY0L3VkcF9vZmZsb2FkLmMtMTQ2LVxcbm5ldC9pcHY0L3VkcF9vZmZsb2FkLmM6MTQ3OnN0YXRpYyBzdHJ1Y3Qgc2tfYnVmZiAqdWRwX3R1bm5lbF9ncm9fcmN2KHN0cnVjdCBzb2NrICpzayxcXG5uZXQvaXB2NC91ZHBfb2ZmbG9hZC5jLTE0OC1cXHRcXHRcXHRcXHRcXHQgIHN0cnVjdCBsaXN0X2hlYWQgKmhlYWQsXFxuLS1cXG5uZXQvaXB2NC91ZHBfb2ZmbG9hZC5jLTE1NS1cXG5uZXQvaXB2NC91ZHBfb2ZmbG9hZC5jOjE1NjpzdGF0aWMgc3RydWN0IHNrX2J1ZmYgKnVkcF90dW5uZWxfZ3JvX3JjdihzdHJ1Y3Qgc29jayAqc2ssXFxubmV0L2lwdjQvdWRwX29mZmxvYWQuYy0xNTctXFx0XFx0XFx0XFx0XFx0ICBzdHJ1Y3QgbGlzdF9oZWFkICpoZWFkLFxcbi0tXFxubmV0L2lwdjQvdWRwX29mZmxvYWQuYz03Njk9c3RydWN0IHNrX2J1ZmYgKnVkcF9ncm9fcmVjZWl2ZShzdHJ1Y3QgbGlzdF9oZWFkICpoZWFkLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbi0tXFxubmV0L2lwdjQvdWRwX29mZmxvYWQuYy04MzYtXFx0c2tiX2dyb19wb3N0cHVsbF9yY3N1bShza2IsIHVoLCBzaXplb2Yoc3RydWN0IHVkcGhkcikpO1xcbm5ldC9pcHY0L3VkcF9vZmZsb2FkLmM6ODM3OlxcdHBwID0gdWRwX3R1bm5lbF9ncm9fcmN2KHNrLCBoZWFkLCBza2IpO1xcbm5ldC9pcHY0L3VkcF9vZmZsb2FkLmMtODM4LVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wN1QwMjo1ODoxNC4xMjYyMzIxMzNaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyNjQ1MzYyOTA4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgYSBzdW1tYXJ5IG9mIG15IHRob3VnaHQgcHJvY2VzcywgYXMgcmVxdWVzdGVkOlxuXG4qKkludmVzdGlnYXRpbmcgVURQIE9mZmxvYWQgRnVuY3Rpb25hbGl0eSoqXG5cbk9rYXksIHNvIEkgbmVlZCB0byBkaXZlIGludG8gdGhlIFVEUCBvZmZsb2FkIGNvZGUsIHNwZWNpZmljYWxseSB3aXRoaW4gdGhlIGBuZXQvaXB2NC91ZHBfb2ZmbG9hZC5jYCBmaWxlLiBNeSBpbml0aWFsIGZvY3VzIGlzIGdvaW5nIHRvIGJlIG9uIGxpbmVzIDEgdGhyb3VnaCA1MC4gVGhhdCBzaG91bGQgZ2l2ZSBtZSBhIGdvb2Qgb3ZlcnZpZXcgb2YgdGhlIGluaXRpYWwgc2V0dXAsIGluaXRpYWxpemF0aW9uLCBvciBhbnkgZWFybHkgZGVjbGFyYXRpb25zIGFuZCBzdHJ1Y3R1cmVzIHJlbGV2YW50IHRvIFVEUCBvZmZsb2FkLiBJJ20gaG9waW5nIHRvIGdldCBhIGhhbmRsZSBvbiB0aGUgY29yZSBtZWNoYW5pc21zIGZyb20gdGhlIHN0YXJ0LlxuXG5JIGFsc28gd2FudCB0byBjaGVjayBhcm91bmQgbGluZSA4MzcuIEJhc2VkIG9uIG15IGV4cGVyaWVuY2UsIHRoYXQgbG9jYXRpb24gbGlrZWx5IGhhbmRsZXMgYSBzcGVjaWZpYyBmdW5jdGlvbiBjYWxsIG9yIGRhdGEgc3RydWN0dXJlIG1hbmlwdWxhdGlvbiAtIG1heWJlIHJlbGF0ZWQgdG8gY2hlY2tzdW1taW5nLCBmcmFnbWVudGF0aW9uLCBvciBwYWNrZXQgdHJhbnNtaXNzaW9uLiBJJ20gbm90IHN1cmUsIGJ1dCB0aGlzIGxpbmUgbnVtYmVyIGp1c3QgZmVlbHMgbGlrZSBhIHBsYWNlIHdoZXJlIHRoaXMgZnVuY3Rpb24gd291bGQgYmUgZGVmaW5lZC4gSXQncyBhIGtleSBmdW5jdGlvbiBmb3Igb2ZmbG9hZCBmdW5jdGlvbmFsaXR5LiBJJ20ga2VlcGluZyBhbiBvcGVuIG1pbmQgZm9yIG5vdywgYnV0IHRoYXQgaXMgbXkgY3VycmVudCBoeXBvdGhlc2lzLCBhbmQgSSdsbCBzZWUgd2hlcmUgbXkgYW5hbHlzaXMgbGVhZHMgbWUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjY5MTIsIk91dHB1dFRva2VucyI6MzcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozNCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wN1QwMjo1ODoxNi43NzE1OTg3ODJaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjQ4MTQ5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9pcHY0L3VkcF9vZmZsb2FkLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMSxcbiAgXCJMaW5lQ291bnRcIjogNTBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiICAgMTpcXHQvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vci1sYXRlclxcbiAgIDI6XFx0LypcXG4gICAzOlxcdCAqXFx0SVBWNCBHU08vR1JPIG9mZmxvYWQgc3VwcG9ydFxcbiAgIDQ6XFx0ICpcXHRMaW51eCBJTkVUIGltcGxlbWVudGF0aW9uXFxuICAgNTpcXHQgKlxcbiAgIDY6XFx0ICpcXHRVRFB2NCBHU08gc3VwcG9ydFxcbiAgIDc6XFx0ICovXFxuICAgODpcXHRcXG4gICA5OlxcdCNpbmNsdWRlIFxcdTAwM2NsaW51eC9za2J1ZmYuaFxcdTAwM2VcXG4gIDEwOlxcdCNpbmNsdWRlIFxcdTAwM2NuZXQvZ3JvLmhcXHUwMDNlXFxuICAxMTpcXHQjaW5jbHVkZSBcXHUwMDNjbmV0L2dzby5oXFx1MDAzZVxcbiAgMTI6XFx0I2luY2x1ZGUgXFx1MDAzY25ldC91ZHAuaFxcdTAwM2VcXG4gIDEzOlxcdCNpbmNsdWRlIFxcdTAwM2NuZXQvcHJvdG9jb2wuaFxcdTAwM2VcXG4gIDE0OlxcdCNpbmNsdWRlIFxcdTAwM2NuZXQvaW5ldF9jb21tb24uaFxcdTAwM2VcXG4gIDE1OlxcdCNpbmNsdWRlIFxcdTAwM2NuZXQvdWRwX3R1bm5lbC5oXFx1MDAzZVxcbiAgMTY6XFx0XFxuICAxNzpcXHQjaWYgSVNfRU5BQkxFRChDT05GSUdfTkVUX1VEUF9UVU5ORUwpXFxuICAxODpcXHRcXG4gIDE5OlxcdC8qXFxuICAyMDpcXHQgKiBEdW1teSBHUk8gdHVubmVsIGNhbGxiYWNrLCBleGlzdHMgbWFpbmx5IHRvIGF2b2lkIGRhbmdsaW5nL05VTExcXG4gIDIxOlxcdCAqIHZhbHVlcyBmb3IgdGhlIHVkcCB0dW5uZWwgc3RhdGljIGNhbGwuXFxuICAyMjpcXHQgKi9cXG4gIDIzOlxcdHN0YXRpYyBzdHJ1Y3Qgc2tfYnVmZiAqZHVtbXlfZ3JvX3JjdihzdHJ1Y3Qgc29jayAqc2ssXFxuICAyNDpcXHRcXHRcXHRcXHRcXHQgICAgIHN0cnVjdCBsaXN0X2hlYWQgKmhlYWQsXFxuICAyNTpcXHRcXHRcXHRcXHRcXHQgICAgIHN0cnVjdCBza19idWZmICpza2IpXFxuICAyNjpcXHR7XFxuICAyNzpcXHRcXHROQVBJX0dST19DQihza2IpLVxcdTAwM2VmbHVzaCA9IDE7XFxuICAyODpcXHRcXHRyZXR1cm4gTlVMTDtcXG4gIDI5OlxcdH1cXG4gIDMwOlxcdFxcbiAgMzE6XFx0dHlwZWRlZiBzdHJ1Y3Qgc2tfYnVmZiAqKCp1ZHBfdHVubmVsX2dyb19yY3ZfdCkoc3RydWN0IHNvY2sgKnNrLFxcbiAgMzI6XFx0XFx0XFx0XFx0XFx0XFx0XFx0c3RydWN0IGxpc3RfaGVhZCAqaGVhZCxcXG4gIDMzOlxcdFxcdFxcdFxcdFxcdFxcdFxcdHN0cnVjdCBza19idWZmICpza2IpO1xcbiAgMzQ6XFx0XFxuICAzNTpcXHRzdHJ1Y3QgdWRwX3R1bm5lbF90eXBlX2VudHJ5IHtcXG4gIDM2OlxcdFxcdHVkcF90dW5uZWxfZ3JvX3Jjdl90IGdyb19yZWNlaXZlO1xcbiAgMzc6XFx0XFx0cmVmY291bnRfdCBjb3VudDtcXG4gIDM4OlxcdH07XFxuICAzOTpcXHRcXG4gIDQwOlxcdCNkZWZpbmUgVURQX01BWF9UVU5ORUxfVFlQRVMgKElTX0VOQUJMRUQoQ09ORklHX0dFTkVWRSkgKyBcXFxcXFxuICA0MTpcXHRcXHRcXHRcXHQgICAgICBJU19FTkFCTEVEKENPTkZJR19WWExBTikgKiAyICsgXFxcXFxcbiAgNDI6XFx0XFx0XFx0XFx0ICAgICAgSVNfRU5BQkxFRChDT05GSUdfTkVUX0ZPVSkgKiAyICsgXFxcXFxcbiAgNDM6XFx0XFx0XFx0XFx0ICAgICAgSVNfRU5BQkxFRChDT05GSUdfWEZSTSkgKiAyKVxcbiAgNDQ6XFx0XFxuICA0NTpcXHRERUZJTkVfU1RBVElDX0NBTEwodWRwX3R1bm5lbF9ncm9fcmN2LCBkdW1teV9ncm9fcmN2KTtcXG4gIDQ2OlxcdHN0YXRpYyBERUZJTkVfU1RBVElDX0tFWV9GQUxTRSh1ZHBfdHVubmVsX3N0YXRpY19jYWxsKTtcXG4gIDQ3OlxcdHN0YXRpYyBERUZJTkVfTVVURVgodWRwX3R1bm5lbF9ncm9fdHlwZV9sb2NrKTtcXG4gIDQ4OlxcdHN0YXRpYyBzdHJ1Y3QgdWRwX3R1bm5lbF90eXBlX2VudHJ5IHVkcF90dW5uZWxfZ3JvX3R5cGVzW1VEUF9NQVhfVFVOTkVMX1RZUEVTXTtcXG4gIDQ5OlxcdHN0YXRpYyB1bnNpZ25lZCBpbnQgdWRwX3R1bm5lbF9ncm9fdHlwZV9ucjtcXG4gIDUwOlxcdHN0YXRpYyBERUZJTkVfU1BJTkxPQ0sodWRwX3R1bm5lbF9ncm9fbG9jayk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDAyOjU4OjE2Ljc3MTg1MTUzMVoiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyOTEyNzQ3ODYzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgUmVjZW50IENoYW5nZSB0byBgdWRwX3R1bm5lbF9ncm9fcmN2YCoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gSSdtIGxvb2tpbmcgYXQgYSBkaWZmIHdoZXJlIHRoZSBgdWRwX3R1bm5lbF9ncm9fcmN2YCBmdW5jdGlvbiBpbiB0aGUga2VybmVsJ3MgVURQIHR1bm5lbGluZyBjb2RlIGhhcyBiZWVuIG1vZGlmaWVkLiBNeSBpbml0aWFsIG9ic2VydmF0aW9uIGlzIHRoYXQgYSBjb25kaXRpb25hbCBibG9jayB3YXMgcmVtb3ZlZCwgc3BlY2lmaWNhbGx5IHRoZSBgaWYgKHN0YXRpY19icmFuY2hfbGlrZWx5KFx1MDAyNnVkcF90dW5uZWxfc3RhdGljX2NhbGwpKWAgc2VjdGlvbi4gVGhpcyBpcyBpbnRlcmVzdGluZy4gUHJldmlvdXNseSwgaXQgc2VlbXMgdGhpcyBmdW5jdGlvbiBlbXBsb3llZCBhIHN0YXRpYyBjYWxsIG9yIGEgZGlyZWN0IGZ1bmN0aW9uIHBvaW50ZXIganVtcCwgbGlrZWx5IGZvciBwZXJmb3JtYW5jZSByZWFzb25zLCBvcHRpbWl6aW5nIGZvciBhIGNvbW1vbiBwYXRoLiBOb3csIHRoZSBjb2RlIGRpcmVjdGx5IGNhbGxzIGBjYWxsX2dyb19yZWNlaXZlX3NrYC5cblxuTXkgbmV4dCBxdWVzdGlvbiBpcyB3aHk/IFdhcyB0aGlzIG9wdGltaXphdGlvbiBkZWVtZWQgdW5uZWNlc3NhcnksIGJ1Z2d5LCBvciBpbXByb3ZlZCBieSBzb21lIG90aGVyIGNoYW5nZT8gV2hhdCBoYXBwZW5lZCB0byB0aGUgc3RhdGljIGNhbGwgb3B0aW1pemF0aW9uIGluIHRoaXMgcGFydCBvZiB0aGUga2VybmVsPyBcblxuSSBhbHNvIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0IGBjYWxsX2dyb19yZWNlaXZlX3NrYCBpcyBkb2luZyBiZWNhdXNlIGl0IHNlZW1zIHRvIGJlIHRoZSBjb3JlIHdvcmsuIEl0IG1pZ2h0IGJlIGdvb2QgZm9yIG1lIHRvIGRpZyBpbnRvIGhvdyB0aGlzIGZ1bmN0aW9uIGlzIGltcGxlbWVudGVkIGJlY2F1c2UgaXQgY291bGQgaW1wYWN0IHBlcmZvcm1hbmNlIGluIGludGVyZXN0aW5nIHdheXMuIFRoZSBjaGFuZ2UgdG8ganVzdCBjYWxsIGBjYWxsX2dyb19yZWNlaXZlX3NrYCBkaXJlY3RseSBpcyBzaW1wbGUsIGJ1dCB0aGUgcmVhc29uICp3aHkqIHRoaXMgY2hhbmdlIGhhcHBlbmVkIGlzIGNydWNpYWwsIHNvIGxldCdzIHN0YXJ0IGRpZ2dpbmcuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjc5NjMsIk91dHB1dFRva2VucyI6MjEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMzYsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wN1QwMjo1ODoxOS42ODQ2MDM0MzZaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI5NDc1ODA3MjMsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY2FsbF9ncm9fcmVjZWl2ZV9za1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJpbmNsdWRlL25ldC9ncm8uaD0xMjE9dHlwZWRlZiBzdHJ1Y3Qgc2tfYnVmZiAqKCpncm9fcmVjZWl2ZV9za190KShzdHJ1Y3Qgc29jayAqLCBzdHJ1Y3QgbGlzdF9oZWFkICosXFxuaW5jbHVkZS9uZXQvZ3JvLmgtMTIyLVxcdFxcdFxcdFxcdFxcdCAgICBzdHJ1Y3Qgc2tfYnVmZiAqKTtcXG5pbmNsdWRlL25ldC9ncm8uaDoxMjM6c3RhdGljIGlubGluZSBzdHJ1Y3Qgc2tfYnVmZiAqY2FsbF9ncm9fcmVjZWl2ZV9zayhncm9fcmVjZWl2ZV9za190IGNiLFxcbmluY2x1ZGUvbmV0L2dyby5oLTEyNC1cXHRcXHRcXHRcXHRcXHRcXHQgIHN0cnVjdCBzb2NrICpzayxcXG4tLVxcbm5ldC9pcHY0L3VkcF9vZmZsb2FkLmM9MTQ3PXN0YXRpYyBzdHJ1Y3Qgc2tfYnVmZiAqdWRwX3R1bm5lbF9ncm9fcmN2KHN0cnVjdCBzb2NrICpzayxcXG4tLVxcbm5ldC9pcHY0L3VkcF9vZmZsb2FkLmMtMTUwLXtcXG5uZXQvaXB2NC91ZHBfb2ZmbG9hZC5jOjE1MTpcXHRyZXR1cm4gY2FsbF9ncm9fcmVjZWl2ZV9zayh1ZHBfc2soc2spLVxcdTAwM2Vncm9fcmVjZWl2ZSwgc2ssIGhlYWQsIHNrYik7XFxubmV0L2lwdjQvdWRwX29mZmxvYWQuYy0xNTItfVxcbi0tXFxubmV0L2lwdjQvdWRwX29mZmxvYWQuYz0xNTY9c3RhdGljIHN0cnVjdCBza19idWZmICp1ZHBfdHVubmVsX2dyb19yY3Yoc3RydWN0IHNvY2sgKnNrLFxcbi0tXFxubmV0L2lwdjQvdWRwX29mZmxvYWQuYy0xNTkte1xcbm5ldC9pcHY0L3VkcF9vZmZsb2FkLmM6MTYwOlxcdHJldHVybiBjYWxsX2dyb19yZWNlaXZlX3NrKHVkcF9zayhzayktXFx1MDAzZWdyb19yZWNlaXZlLCBzaywgaGVhZCwgc2tiKTtcXG5uZXQvaXB2NC91ZHBfb2ZmbG9hZC5jLTE2MS19XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDAyOjU4OjIyLjYzMjE5MTgxOVoiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoxODc2MzI3MzYwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgc3VtbWFyeSwgYXMgdGhvdWdoIEknbSB0aGlua2luZyB0aHJvdWdoIGl0OlxuXG4qKkRpdmluZyBpbnRvIHRoZSBHUk8gQ29kZSoqXG5cbk9rYXksIHNvIEkgbmVlZCB0byByZWZyZXNoIG15IG1lbW9yeSBvbiB0aGUgR1JPIGNvZGUsIGFuZCBJJ20gc3RhcnRpbmcgd2l0aCBgaW5jbHVkZS9uZXQvZ3JvLmhgLCBzcGVjaWZpY2FsbHkgbGluZSAxMjMuIExldCdzIHNlZSB3aGF0J3MgYmVpbmcgZGVmaW5lZCBvciBkZWNsYXJlZCB0aGVyZS4gSSdtIGV4cGVjdGluZyBzb21ldGhpbmcgY29yZSwgbGlrZWx5IGEgc3RydWN0LCBtYWNybywgb3IgZnVuY3Rpb24gcHJvdG90eXBlIHJlbGF0ZWQgdG8gR2VuZXJpYyBSZWNlaXZlIE9mZmxvYWQuIEdpdmVuIHRoZSBmaWxlLCBpdCdzIHByb2JhYmx5IGEgZGF0YSBzdHJ1Y3R1cmUgdXNlZCB0byBtYW5hZ2UgdGhlIEdSTyBjb250ZXh0LCBvciBtYXliZSBhIGZsYWcgdGhhdCBjb250cm9scyBzb21lIEdSTyBiZWhhdmlvci4gSSdtIGV4cGVjdGluZyBpdCB0byBwcm92aWRlIHNvbWUgZXNzZW50aWFsIGRldGFpbHMgcmVxdWlyZWQgdG8gb2ZmbG9hZCB0aGUgcHJvY2VzcyBvZiBtZXJnaW5nIG5ldHdvcmsgcGFja2V0cywgb3IgaXQgbWF5IGNvbnRhaW4gYSBkZWZpbml0aW9uIGZvciBhIGdsb2JhbCB2YXJpYWJsZSB0aGF0IGNvbmZpZ3VyZXMgYSBiZWhhdmlvciBvZiBHUk8uIEknbSBhbHNvIHJlYWR5IHRvIGFuYWx5emUgaXQgaW4gZGVwdGgsIGluY2x1ZGluZyBkZWJ1Z2dpbmcgb3IgbWFraW5nIGNoYW5nZXMgdG8gdGhlIGNvZGUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjg5NDYsIk91dHB1dFRva2VucyI6MzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxOSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wN1QwMjo1ODoyNC41MDg1MjQ5ODlaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTM1NDcxLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImluY2x1ZGUvbmV0L2dyby5oXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEyMCxcbiAgXCJMaW5lQ291bnRcIjogMjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDEyMDpcXHRcXG4gMTIxOlxcdHR5cGVkZWYgc3RydWN0IHNrX2J1ZmYgKigqZ3JvX3JlY2VpdmVfc2tfdCkoc3RydWN0IHNvY2sgKiwgc3RydWN0IGxpc3RfaGVhZCAqLFxcbiAxMjI6XFx0XFx0XFx0XFx0XFx0XFx0ICAgIHN0cnVjdCBza19idWZmICopO1xcbiAxMjM6XFx0c3RhdGljIGlubGluZSBzdHJ1Y3Qgc2tfYnVmZiAqY2FsbF9ncm9fcmVjZWl2ZV9zayhncm9fcmVjZWl2ZV9za190IGNiLFxcbiAxMjQ6XFx0XFx0XFx0XFx0XFx0XFx0XFx0ICBzdHJ1Y3Qgc29jayAqc2ssXFxuIDEyNTpcXHRcXHRcXHRcXHRcXHRcXHRcXHQgIHN0cnVjdCBsaXN0X2hlYWQgKmhlYWQsXFxuIDEyNjpcXHRcXHRcXHRcXHRcXHRcXHRcXHQgIHN0cnVjdCBza19idWZmICpza2IpXFxuIDEyNzpcXHR7XFxuIDEyODpcXHRcXHRpZiAodW5saWtlbHkoZ3JvX3JlY3Vyc2lvbl9pbmNfdGVzdChza2IpKSkge1xcbiAxMjk6XFx0XFx0XFx0TkFQSV9HUk9fQ0Ioc2tiKS1cXHUwMDNlZmx1c2ggfD0gMTtcXG4gMTMwOlxcdFxcdFxcdHJldHVybiBOVUxMO1xcbiAxMzE6XFx0XFx0fVxcbiAxMzI6XFx0XFxuIDEzMzpcXHRcXHRyZXR1cm4gY2Ioc2ssIGhlYWQsIHNrYik7XFxuIDEzNDpcXHR9XFxuIDEzNTpcXHRcXG4gMTM2OlxcdHN0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IHNrYl9ncm9fb2Zmc2V0KGNvbnN0IHN0cnVjdCBza19idWZmICpza2IpXFxuIDEzNzpcXHR7XFxuIDEzODpcXHRcXHRyZXR1cm4gTkFQSV9HUk9fQ0Ioc2tiKS1cXHUwMDNlZGF0YV9vZmZzZXQ7XFxuIDEzOTpcXHR9XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDAyOjU4OjI0LjUwODY2MzJaIiwiU2VxIjoxNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MTg3NzE5NzI0MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRob3VnaHQgcHJvY2VzcywgYXMgaWYgSSB3ZXJlIGFuYWx5emluZyB0aGlzIGNvZGU6XG5cbioqRGVlcCBEaXZlIGludG8gVURQIEdSTyoqXG5cbk9rYXksIHNvIEkgbmVlZCB0byB0cmFjZSB0aGUgcGF0aCBvZiBgdWRwX3R1bm5lbF9ncm9fcmN2YCBhbmQgZmlndXJlIG91dCBleGFjdGx5IGhvdyBhbmQgd2hlcmUgR2VuZXJpYyBSZWNlaXZlIE9mZmxvYWQgKEdSTykgaXMgYmVpbmcgYXBwbGllZCBpbiB0aGlzIFVEUCB0dW5uZWwgc2NlbmFyaW8uIExldCdzIHN0YXJ0IHdpdGggYSBzb2xpZCBhcHByb2FjaC4gTXkgZmlyc3Qgc3RlcCBpcyB0byBkaWcgaW50byBgdWRwX2dyb19yZWNlaXZlYCBpbiBgbmV0L2lwdjQvdWRwX29mZmxvYWQuY2AuIFRoYXQgZnVuY3Rpb24gaXMgY3J1Y2lhbC4gS25vd2luZyB0aGF0IGZ1bmN0aW9uLCB0aGUgY2FsbCBzdGFjayB3aWxsIGJlY29tZSBvYnZpb3VzLiBUaGF0IGlzIG15IHVuZGVyc3RhbmRpbmcuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjk0OTksIk91dHB1dFRva2VucyI6MzksIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1MCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDAyOjU4OjI2LjM4NTg2MzExWiIsIlNlcSI6MTYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEwMjczMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvaXB2NC91ZHBfb2ZmbG9hZC5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDc2NSxcbiAgXCJMaW5lQ291bnRcIjogODBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDc2NTpcXHRcXHQvKiBtaXNtYXRjaCwgYnV0IHdlIG5ldmVyIG5lZWQgdG8gZmx1c2ggKi9cXG4gNzY2OlxcdFxcdHJldHVybiBOVUxMO1xcbiA3Njc6XFx0fVxcbiA3Njg6XFx0XFxuIDc2OTpcXHRzdHJ1Y3Qgc2tfYnVmZiAqdWRwX2dyb19yZWNlaXZlKHN0cnVjdCBsaXN0X2hlYWQgKmhlYWQsIHN0cnVjdCBza19idWZmICpza2IsXFxuIDc3MDpcXHRcXHRcXHRcXHRcXHRzdHJ1Y3QgdWRwaGRyICp1aCwgc3RydWN0IHNvY2sgKnNrKVxcbiA3NzE6XFx0e1xcbiA3NzI6XFx0XFx0c3RydWN0IHNrX2J1ZmYgKnBwID0gTlVMTDtcXG4gNzczOlxcdFxcdHN0cnVjdCBza19idWZmICpwO1xcbiA3NzQ6XFx0XFx0c3RydWN0IHVkcGhkciAqdWgyO1xcbiA3NzU6XFx0XFx0dW5zaWduZWQgaW50IG9mZiA9IHNrYl9ncm9fb2Zmc2V0KHNrYik7XFxuIDc3NjpcXHRcXHR1bnNpZ25lZCBpbnQgdWxlbjtcXG4gNzc3OlxcdFxcdGludCBmbHVzaCA9IDE7XFxuIDc3ODpcXHRcXG4gNzc5OlxcdFxcdC8qIERvIG5vdCBkZWFsIHdpdGggcGFkZGVkIG9yIG1hbGljaW91cyBwYWNrZXRzLCBzb3JyeSEgKi9cXG4gNzgwOlxcdFxcdHVsZW4gPSB1ZHBfZ2V0X2xlbl9zaG9ydCh1aCk7XFxuIDc4MTpcXHRcXHRpZiAodWxlbiBcXHUwMDNjPSBzaXplb2YoKnVoKSB8fCB1bGVuICE9IHNrYl9ncm9fbGVuKHNrYikpXFxuIDc4MjpcXHRcXHRcXHRnb3RvIG91dDtcXG4gNzgzOlxcdFxcbiA3ODQ6XFx0XFx0LyogV2UgY2FuIGRvIEw0IGFnZ3JlZ2F0aW9uIG9ubHkgaWYgdGhlIHBhY2tldCBjYW4ndCBsYW5kIGluIGEgdHVubmVsXFxuIDc4NTpcXHRcXHQgKiBvdGhlcndpc2Ugd2UgY291bGQgY29ycnVwdCB0aGUgaW5uZXIgc3RyZWFtLiBEZXRlY3Rpbmcgc3VjaCBwYWNrZXRzXFxuIDc4NjpcXHRcXHQgKiBjYW5ub3QgYmUgZm9vbHByb29mIGFuZCB0aGUgYWdncmVnYXRpb24gbWlnaHQgc3RpbGwgaGFwcGVuIGluIHNvbWVcXG4gNzg3OlxcdFxcdCAqIGNhc2VzLiBTdWNoIHBhY2tldHMgc2hvdWxkIGJlIGNhdWdodCBpbiB1ZHBfdW5leHBlY3RlZF9nc28gbGF0ZXIuXFxuIDc4ODpcXHRcXHQgKi9cXG4gNzg5OlxcdFxcdE5BUElfR1JPX0NCKHNrYiktXFx1MDAzZWlzX2ZsaXN0ID0gMDtcXG4gNzkwOlxcdFxcdGlmICghc2sgfHwgIXVkcF9zayhzayktXFx1MDAzZWdyb19yZWNlaXZlKSB7XFxuIDc5MTpcXHRcXHRcXHQvKiBJZiB0aGUgcGFja2V0IHdhcyBsb2NhbGx5IGVuY2Fwc3VsYXRlZCBpbiBhIFVEUCB0dW5uZWwgdGhhdFxcbiA3OTI6XFx0XFx0XFx0ICogd2Fzbid0IGRldGVjdGVkIGFib3ZlLCBkbyBub3QgR1JPLlxcbiA3OTM6XFx0XFx0XFx0ICovXFxuIDc5NDpcXHRcXHRcXHRpZiAoc2tiLVxcdTAwM2VlbmNhcHN1bGF0aW9uKVxcbiA3OTU6XFx0XFx0XFx0XFx0Z290byBvdXQ7XFxuIDc5NjpcXHRcXG4gNzk3OlxcdFxcdFxcdGlmIChza2ItXFx1MDAzZWRldi1cXHUwMDNlZmVhdHVyZXMgXFx1MDAyNiBORVRJRl9GX0dST19GUkFHTElTVClcXG4gNzk4OlxcdFxcdFxcdFxcdE5BUElfR1JPX0NCKHNrYiktXFx1MDAzZWlzX2ZsaXN0ID0gc2sgPyAhdWRwX3Rlc3RfYml0KEdST19FTkFCTEVELCBzaykgOiAxO1xcbiA3OTk6XFx0XFxuIDgwMDpcXHRcXHRcXHRpZiAoKCFzayBcXHUwMDI2XFx1MDAyNiAoc2tiLVxcdTAwM2VkZXYtXFx1MDAzZWZlYXR1cmVzIFxcdTAwMjYgTkVUSUZfRl9HUk9fVURQX0ZXRCkpIHx8XFxuIDgwMTpcXHRcXHRcXHQgICAgKHNrIFxcdTAwMjZcXHUwMDI2IHVkcF90ZXN0X2JpdChHUk9fRU5BQkxFRCwgc2spKSB8fCBOQVBJX0dST19DQihza2IpLVxcdTAwM2Vpc19mbGlzdClcXG4gODAyOlxcdFxcdFxcdFxcdHJldHVybiBjYWxsX2dyb19yZWNlaXZlKHVkcF9ncm9fcmVjZWl2ZV9zZWdtZW50LCBoZWFkLCBza2IpO1xcbiA4MDM6XFx0XFxuIDgwNDpcXHRcXHRcXHQvKiBubyBHUk8sIGJlIHN1cmUgZmx1c2ggdGhlIGN1cnJlbnQgcGFja2V0ICovXFxuIDgwNTpcXHRcXHRcXHRnb3RvIG91dDtcXG4gODA2OlxcdFxcdH1cXG4gODA3OlxcdFxcbiA4MDg6XFx0XFx0aWYgKE5BUElfR1JPX0NCKHNrYiktXFx1MDAzZWVuY2FwX21hcmsgfHxcXG4gODA5OlxcdFxcdCAgICAodWgtXFx1MDAzZWNoZWNrIFxcdTAwMjZcXHUwMDI2IHNrYi1cXHUwMDNlaXBfc3VtbWVkICE9IENIRUNLU1VNX1BBUlRJQUwgXFx1MDAyNlxcdTAwMjZcXG4gODEwOlxcdFxcdCAgICAgTkFQSV9HUk9fQ0Ioc2tiKS1cXHUwMDNlY3N1bV9jbnQgPT0gMCBcXHUwMDI2XFx1MDAyNlxcbiA4MTE6XFx0XFx0ICAgICAhTkFQSV9HUk9fQ0Ioc2tiKS1cXHUwMDNlY3N1bV92YWxpZCkpXFxuIDgxMjpcXHRcXHRcXHRnb3RvIG91dDtcXG4gODEzOlxcdFxcbiA4MTQ6XFx0XFx0LyogbWFyayB0aGF0IHRoaXMgc2tiIHBhc3NlZCBvbmNlIHRocm91Z2ggdGhlIHR1bm5lbCBncm8gbGF5ZXIgKi9cXG4gODE1OlxcdFxcdE5BUElfR1JPX0NCKHNrYiktXFx1MDAzZWVuY2FwX21hcmsgPSAxO1xcbiA4MTY6XFx0XFxuIDgxNzpcXHRcXHRmbHVzaCA9IDA7XFxuIDgxODpcXHRcXG4gODE5OlxcdFxcdGxpc3RfZm9yX2VhY2hfZW50cnkocCwgaGVhZCwgbGlzdCkge1xcbiA4MjA6XFx0XFx0XFx0aWYgKCFOQVBJX0dST19DQihwKS1cXHUwMDNlc2FtZV9mbG93KVxcbiA4MjE6XFx0XFx0XFx0XFx0Y29udGludWU7XFxuIDgyMjpcXHRcXG4gODIzOlxcdFxcdFxcdHVoMiA9IChzdHJ1Y3QgdWRwaGRyICAgKikocC1cXHUwMDNlZGF0YSArIG9mZik7XFxuIDgyNDpcXHRcXG4gODI1OlxcdFxcdFxcdC8qIE1hdGNoIHBvcnRzIGFuZCBlaXRoZXIgY2hlY2tzdW1zIGFyZSBlaXRoZXIgYm90aCB6ZXJvXFxuIDgyNjpcXHRcXHRcXHQgKiBvciBub256ZXJvLlxcbiA4Mjc6XFx0XFx0XFx0ICovXFxuIDgyODpcXHRcXHRcXHRpZiAoKCoodTMyICopXFx1MDAyNnVoLVxcdTAwM2Vzb3VyY2UgIT0gKih1MzIgKilcXHUwMDI2dWgyLVxcdTAwM2Vzb3VyY2UpIHx8XFxuIDgyOTpcXHRcXHRcXHQgICAgKCF1aC1cXHUwMDNlY2hlY2sgXiAhdWgyLVxcdTAwM2VjaGVjaykpIHtcXG4gODMwOlxcdFxcdFxcdFxcdE5BUElfR1JPX0NCKHApLVxcdTAwM2VzYW1lX2Zsb3cgPSAwO1xcbiA4MzE6XFx0XFx0XFx0XFx0Y29udGludWU7XFxuIDgzMjpcXHRcXHRcXHR9XFxuIDgzMzpcXHRcXHR9XFxuIDgzNDpcXHRcXG4gODM1OlxcdFxcdHNrYl9ncm9fcHVsbChza2IsIHNpemVvZihzdHJ1Y3QgdWRwaGRyKSk7IC8qIHB1bGwgZW5jYXBzdWxhdGluZyB1ZHAgaGVhZGVyICovXFxuIDgzNjpcXHRcXHRza2JfZ3JvX3Bvc3RwdWxsX3Jjc3VtKHNrYiwgdWgsIHNpemVvZihzdHJ1Y3QgdWRwaGRyKSk7XFxuIDgzNzpcXHRcXHRwcCA9IHVkcF90dW5uZWxfZ3JvX3JjdihzaywgaGVhZCwgc2tiKTtcXG4gODM4OlxcdFxcbiA4Mzk6XFx0b3V0OlxcbiA4NDA6XFx0XFx0c2tiX2dyb19mbHVzaF9maW5hbChza2IsIHBwLCBmbHVzaCk7XFxuIDg0MTpcXHRcXHRyZXR1cm4gcHA7XFxuIDg0MjpcXHR9XFxuIDg0MzpcXHRcXG4gODQ0OlxcdHN0YXRpYyBzdHJ1Y3Qgc29jayAqdWRwNF9ncm9fbG9va3VwX3NrYihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBfX2JlMTYgc3BvcnQsXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDAyOjU4OjI2LjM4NTk2NzUyWiIsIlNlcSI6MTcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjU4MTM2MTUwMzgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHlzaXMgb2YgVURQIEdSTyBQcm9jZXNzaW5nIE1vZGlmaWNhdGlvbioqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIHRyYWNlIHRoZSBleGVjdXRpb24gcGF0aC4gYHVkcF9ncm9fcmVjZWl2ZWAgY2FsbHMgYHVkcF90dW5uZWxfZ3JvX3JjdmAsIGFuZCB3ZSdyZSBsb29raW5nIGF0IFVEUCBwYWNrZXRzIGR1cmluZyBHUk8gKEdlbmVyaWMgUmVjZWl2ZSBPZmZsb2FkKSBwcm9jZXNzaW5nLiBUaGlzIGlzIGNsZWFybHkgd2l0aGluIHRoZSBjb3JlIG5ldHdvcmtpbmcgc3RhY2ssIHNwZWNpZmljYWxseSBgbmV0L2lwdjQvdWRwX29mZmxvYWQuY2AuIFRoZSBmYWN0IHRoYXQgU3l6a2FsbGVyIHJlZ3VsYXJseSBleGVyY2lzZXMgVURQLCBzZXRzIHVwIHR1bm5lbHMgKFZYTEFOLCBHRU5FVkUsIGV0Yy4pLCBhbmQgdXNlcyBsb29wYmFjaywgdHVuL3RhcCwgdmV0aCwgbWVhbnMgdGhpcyBhcmVhIGlzIGRlZmluaXRlbHkgcmVhY2hhYmxlLCBhbmQgcG90ZW50aWFsbHkgdnVsbmVyYWJsZS5cblxuVGhlIGtleSBjaGFuZ2UgaXMgdGhlIHJlbW92YWwgb2YgdGhlIGBzdGF0aWNfYnJhbmNoX2xpa2VseWAgY2hlY2sgYW5kIGBzdGF0aWNfY2FsbGAgaW4gYHVkcF90dW5uZWxfZ3JvX3JjdmAuIEl0IHNlZW1zIG5vdyB3ZSdyZSBqdXN0IGRpcmVjdGx5IGNhbGxpbmcgYGNhbGxfZ3JvX3JlY2VpdmVfc2tgLiBNeSBmaXJzdCBxdWVzdGlvbiBpcyAqd2h5Kj8gIElzIHRoaXMgYSBzdHJhaWdodC11cCBvcHRpbWl6YXRpb24sIGEgcmVmYWN0b3JpbmcsIG9yIGEgZml4PyBBIGxvb2sgYXQgdGhlIGdpdCBsb2cgb3IgY29tbWVudHMgc2hvdWxkIHRlbGwgdGhlIHRhbGUsIG9yIHRoZSBgdWRwX3R1bm5lbF91cGRhdGVfZ3JvX3JjdmAgZnVuY3Rpb24gbWlnaHQgcHJvdmlkZSBzb21lIGNvbnRleHQuXG5cbkFoLCBoZXJlJ3MgdGhlIHJlbGV2YW50IHNlY3Rpb24gZnJvbSBgdWRwX3R1bm5lbF91cGRhdGVfZ3JvX3JjdmAuIEl0IGxvb2tzIGxpa2UgdGhlIHN0YXRpYyBicmFuY2ggaXMgc3RpbGwgdXBkYXRlZCBiYXNlZCBvbiBgdWRwX3R1bm5lbF9ncm9fdHlwZV9ucmAsIGJ1dCBpdCdzIGFwcGFyZW50bHkgYmVpbmcgYnlwYXNzZWQgb3IgcmVtb3ZlZCBpbnNpZGUgYHVkcF90dW5uZWxfZ3JvX3JjdmAgaXRzZWxmLiBUaGF0J3MgYSBzaWduaWZpY2FudCBtb2RpZmljYXRpb24gdG8gdGhlIGNvcmUgbmV0d29ya2luZyBsb2dpYyBpbnZvbHZlZCBpbiBgdWRwX3R1bm5lbF9ncm9fcmN2YCBhbmQgY29uc2VxdWVudGx5IGB1ZHBfZ3JvX3JlY2VpdmVgLlxuXG5Ob3csIGxldCdzIGFzc2VzcyB0aGUgaW1wYWN0IGJhc2VkIG9uIG15IGtub3dsZWRnZS4gQ29uc2lkZXJpbmcgdGhlIGNyaXRlcmlhOlxuXG4qICAgKipDb3JlIFN1YnN5c3RlbXM6KiogWWVzLCBhbnkgbW9kaWZpY2F0aW9uIHRvIGxvZ2ljIGhlcmUgaW4gY29yZSBuZXR3b3JraW5nIGlzIHJlbGV2YW50LlxuKiAgICoqUmVmYWN0b3JpbmdzIGFuZCBDb2RlIENsZWFudXBzOioqIElmIHRoaXMgKmlzKiBhIHJlZmFjdG9yaW5nLCBpdCdzIHN0aWxsIHJlc3RydWN0dXJpbmcgcmVhY2hhYmxlIGRhdGEgc3RydWN0dXJlcyBvciBhbGdvcml0aG0gZmxvd3MsIG1ha2luZyBpdCBpbXBvcnRhbnQuXG4qICAgKipSZWFjaGFibGUgQ29kZToqKiBBYnNvbHV0ZWx5LiBVRFAgR1JPIGlzIGV4ZXJjaXNlZCBpbiBjb21tb24gdmlydHVhbCBlbnZpcm9ubWVudHMgdXNlZCBmb3IgdGVzdGluZyBhbmQgZnV6emluZy5cblxuR2l2ZW4gdGhhdCwgSSBjYW4gY29uZmlkZW50bHkgc2F5IHRoaXMgaXMgYFdvcnRoRnV6emluZ2AsIGFuZCB0aGUgcXVlc3Rpb24gaXMgd2hhdCBzeW1ib2xzIHdlIG5lZWQgdG8gZm9jdXMgb24uXG5cblJlbGV2YW50IHN5bWJvbHM/IFRoZSBwcmltYXJ5IGZ1bmN0aW9ucyBhcmUgb2J2aW91c2x5IGB1ZHBfdHVubmVsX2dyb19yY3ZgIGFuZCBgdWRwX2dyb19yZWNlaXZlYC4gQnV0IHRvIGJlIHRob3JvdWdoLCBJIHNob3VsZCBjaGVjayB0aGUgY2FsbGVycyBvZiBib3RoIG9mIHRob3NlIGZ1bmN0aW9ucyBhbmQgb3RoZXIgcmVsYXRlZCBmdW5jdGlvbnMuIExldCdzIGRvIGEgcXVpY2sgZ3JlcC4gVGhpcyBpcyBkZWZpbml0ZWx5IHNvbWV0aGluZyB0byBhZGQgdG8gdGhlIGZ1enppbmcgdGFyZ2V0cy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTEwNjAsIk91dHB1dFRva2VucyI6MTksIk91dHB1dFRob3VnaHRzVG9rZW5zIjo3NzMsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wN1QwMjo1ODozMi4xOTk1ODUyMjhaIiwiU2VxIjoxOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjMyMDgyNDkyNDksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwidWRwX2dyb19yZWNlaXZlXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImluY2x1ZGUvbGludXgvdWRwLmg9MjE0PXN0YXRpYyBpbmxpbmUgYm9vbCB1ZHBfdW5leHBlY3RlZF9nc28oc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbi0tXFxuaW5jbHVkZS9saW51eC91ZHAuaC0yMjctXFx0LyogR1NPIHBhY2tldHMgbGFja2luZyB0aGUgU0tCX0dTT19VRFBfVFVOTkVML19DU1VNIGJpdHMgbWlnaHQgc3RpbGxcXG5pbmNsdWRlL2xpbnV4L3VkcC5oOjIyODpcXHQgKiBsYW5kIGluIGEgdHVubmVsIGFzIHRoZSBzb2NrZXQgY2hlY2sgaW4gdWRwX2dyb19yZWNlaXZlIGNhbm5vdCBiZVxcbmluY2x1ZGUvbGludXgvdWRwLmgtMjI5LVxcdCAqIGZvb2xwcm9vZi5cXG4tLVxcbmluY2x1ZGUvbmV0L2dyby5oPTQwOT1pbnQgdWRwNl9ncm9fY29tcGxldGUoc3RydWN0IHNrX2J1ZmYgKiwgaW50KTtcXG4tLVxcbmluY2x1ZGUvbmV0L2dyby5oLTQxNy1cXG5pbmNsdWRlL25ldC9ncm8uaDo0MTg6c3RydWN0IHNrX2J1ZmYgKnVkcF9ncm9fcmVjZWl2ZShzdHJ1Y3QgbGlzdF9oZWFkICpoZWFkLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbmluY2x1ZGUvbmV0L2dyby5oLTQxOS1cXHRcXHRcXHRcXHRzdHJ1Y3QgdWRwaGRyICp1aCwgc3RydWN0IHNvY2sgKnNrKTtcXG4tLVxcbm5ldC9pcHY0L3VkcC5jPTI4NDQ9c3RhdGljIHZvaWQgdWRwX2Rlc3Ryb3lfc29jayhzdHJ1Y3Qgc29jayAqc2spXFxuLS1cXG5uZXQvaXB2NC91ZHAuYy0yODY2LVxcbm5ldC9pcHY0L3VkcC5jOjI4Njc6dHlwZWRlZiBzdHJ1Y3Qgc2tfYnVmZiAqKCp1ZHBfZ3JvX3JlY2VpdmVfdCkoc3RydWN0IHNvY2sgKnNrLFxcbm5ldC9pcHY0L3VkcC5jLTI4NjgtXFx0XFx0XFx0XFx0XFx0ICAgICBzdHJ1Y3QgbGlzdF9oZWFkICpoZWFkLFxcbi0tXFxubmV0L2lwdjQvdWRwLmM9Mjg3MT1zdGF0aWMgdm9pZCBzZXRfeGZybV9ncm9fdWRwX2VuY2FwX3JjdihfX3UxNiBlbmNhcF90eXBlLCB1bnNpZ25lZCBzaG9ydCBmYW1pbHksXFxuLS1cXG5uZXQvaXB2NC91ZHAuYy0yODc0LSNpZmRlZiBDT05GSUdfWEZSTVxcbm5ldC9pcHY0L3VkcC5jOjI4NzU6XFx0dWRwX2dyb19yZWNlaXZlX3QgbmV3X2dyb19yZWNlaXZlO1xcbm5ldC9pcHY0L3VkcC5jLTI4NzYtXFxuLS1cXG5uZXQvaXB2NC91ZHBfb2ZmbG9hZC5jPTYyNj1zdGF0aWMgc3RydWN0IHNrX2J1ZmYgKnVkcDRfdWZvX2ZyYWdtZW50KHN0cnVjdCBza19idWZmICpza2IsXFxuLS1cXG5uZXQvaXB2NC91ZHBfb2ZmbG9hZC5jLTY4Ny0jZGVmaW5lIFVEUF9HUk9fQ05UX01BWCA2NFxcbm5ldC9pcHY0L3VkcF9vZmZsb2FkLmM6Njg4OnN0YXRpYyBzdHJ1Y3Qgc2tfYnVmZiAqdWRwX2dyb19yZWNlaXZlX3NlZ21lbnQoc3RydWN0IGxpc3RfaGVhZCAqaGVhZCxcXG5uZXQvaXB2NC91ZHBfb2ZmbG9hZC5jLTY4OS1cXHRcXHRcXHRcXHRcXHQgICAgICAgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4tLVxcbm5ldC9pcHY0L3VkcF9vZmZsb2FkLmMtNzY4LVxcbm5ldC9pcHY0L3VkcF9vZmZsb2FkLmM6NzY5OnN0cnVjdCBza19idWZmICp1ZHBfZ3JvX3JlY2VpdmUoc3RydWN0IGxpc3RfaGVhZCAqaGVhZCwgc3RydWN0IHNrX2J1ZmYgKnNrYixcXG5uZXQvaXB2NC91ZHBfb2ZmbG9hZC5jLTc3MC1cXHRcXHRcXHRcXHRzdHJ1Y3QgdWRwaGRyICp1aCwgc3RydWN0IHNvY2sgKnNrKVxcbi0tXFxubmV0L2lwdjQvdWRwX29mZmxvYWQuYy04MDEtXFx0XFx0ICAgIChzayBcXHUwMDI2XFx1MDAyNiB1ZHBfdGVzdF9iaXQoR1JPX0VOQUJMRUQsIHNrKSkgfHwgTkFQSV9HUk9fQ0Ioc2tiKS1cXHUwMDNlaXNfZmxpc3QpXFxubmV0L2lwdjQvdWRwX29mZmxvYWQuYzo4MDI6XFx0XFx0XFx0cmV0dXJuIGNhbGxfZ3JvX3JlY2VpdmUodWRwX2dyb19yZWNlaXZlX3NlZ21lbnQsIGhlYWQsIHNrYik7XFxubmV0L2lwdjQvdWRwX29mZmxvYWQuYy04MDMtXFxuLS1cXG5uZXQvaXB2NC91ZHBfb2ZmbG9hZC5jPTg2Mz1zdHJ1Y3Qgc2tfYnVmZiAqdWRwNF9ncm9fcmVjZWl2ZShzdHJ1Y3QgbGlzdF9oZWFkICpoZWFkLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbi0tXFxubmV0L2lwdjQvdWRwX29mZmxvYWQuYy04ODUtXFxubmV0L2lwdjQvdWRwX29mZmxvYWQuYzo4ODY6XFx0cHAgPSB1ZHBfZ3JvX3JlY2VpdmUoaGVhZCwgc2tiLCB1aCwgc2spO1xcbm5ldC9pcHY0L3VkcF9vZmZsb2FkLmMtODg3LVxcdHJldHVybiBwcDtcXG4tLVxcbm5ldC9pcHY2L3VkcF9vZmZsb2FkLmM9MTM0PXN0cnVjdCBza19idWZmICp1ZHA2X2dyb19yZWNlaXZlKHN0cnVjdCBsaXN0X2hlYWQgKmhlYWQsIHN0cnVjdCBza19idWZmICpza2IpXFxuLS1cXG5uZXQvaXB2Ni91ZHBfb2ZmbG9hZC5jLTE1Ny1cXG5uZXQvaXB2Ni91ZHBfb2ZmbG9hZC5jOjE1ODpcXHRwcCA9IHVkcF9ncm9fcmVjZWl2ZShoZWFkLCBza2IsIHVoLCBzayk7XFxubmV0L2lwdjYvdWRwX29mZmxvYWQuYy0xNTktXFx0cmV0dXJuIHBwO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wN1QwMjo1ODozNS40MDc4NDI1NjhaIiwiU2VxIjoxOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjQ2MDgyODA4MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgVURQIEdSTyBPZmZsb2FkIEZ1bmN0aW9ucyoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gRmlyc3QsIEkgc2VlIHRoYXQgYHVkcF9ncm9fcmVjZWl2ZWAgaXMgYSBjZW50cmFsIGZ1bmN0aW9uLCBsaWtlbHkgdGhlIGNvcmUgR1JPIChHZW5lcmljIFJlY2VpdmUgT2ZmbG9hZCkgaGFuZGxlciBmb3IgVURQIHBhY2tldHMsIGFuZCBpdCdzIGRlZmluaXRlbHkgaW4gcGxheSB3aXRoaW4gYm90aCBgdWRwNF9ncm9fcmVjZWl2ZWAgYW5kIGB1ZHA2X2dyb19yZWNlaXZlYC4gR29vZCwgdGhhdCBtYWtlcyBzZW5zZS4gTm93LCB3aGF0J3MgdGhpcyBgdWRwX3R1bm5lbF9ncm9fcmN2YCBkb2luZz8gSG1tLCBpdCdzIG1hcmtlZCBhcyBzdGF0aWMgd2l0aGluIGBuZXQvaXB2NC91ZHBfb2ZmbG9hZC5jYC4gVGhhdCBpbXBsaWVzIGl0J3MgYW4gaW50ZXJuYWwgaGVscGVyIGZ1bmN0aW9uLCBub3QgZGlyZWN0bHkgZXhwb3NlZCBmb3IgZXh0ZXJuYWwgdXNlIC0gcHJvYmFibHkgaGFuZGxpbmcgc29tZSBpbnRlcm5hbCB0dW5uZWwtc3BlY2lmaWMgbG9naWMuIEludGVyZXN0aW5nLlxuXG5Ob3csIGB1ZHBfdHVubmVsX3VwZGF0ZV9ncm9fcmN2YCBpcyBleHBvcnRlZCBmcm9tIHRoZSBzYW1lIGZpbGUuIEl0J3MgbGlrZWx5IGludm9sdmVkIGluIHVwZGF0aW5nIHNvbWUgc3RhdGUgcmVsYXRlZCB0byB0aGUgR1JPIG9mZmxvYWQsIHBlcmhhcHMgYmFzZWQgb24gdHVubmVsIGNvbmZpZ3VyYXRpb24gb3IgcGFja2V0IGNoYXJhY3RlcmlzdGljcy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIHJlbGF0aW9uc2hpcCBiZXR3ZWVuIHRoZXNlIHR1bm5lbC1yZWxhdGVkIGZ1bmN0aW9ucyBhbmQgdGhlIGNvcmUgR1JPIHByb2Nlc3MuIFRoZSBuZXh0IGxvZ2ljYWwgc3RlcCBpcyB0byBwaW5wb2ludCB3aGVyZSBgdWRwX3R1bm5lbF91cGRhdGVfZ3JvX3JjdmAgaXMgYWN0dWFsbHkgYmVpbmcgKmNhbGxlZCouIFRoYXQnbGwgZ2l2ZSBtZSBhIG11Y2ggYmV0dGVyIGlkZWEgb2YgaXRzIHJvbGUgaW4gdGhlIGJpZ2dlciBwaWN0dXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMzQyOCwiT3V0cHV0VG9rZW5zIjoyNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjExOSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wN1QwMjo1ODozNy44Njg2NzQwNDlaIiwiU2VxIjoyMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI4NDg1NzExNDUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwidWRwX3R1bm5lbF91cGRhdGVfZ3JvX3JjdlwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJpbmNsdWRlL25ldC91ZHBfdHVubmVsLmg9MjExPXZvaWQgdWRwX3R1bm5lbF91cGRhdGVfZ3JvX2xvb2t1cChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBzb2NrICpzaywgYm9vbCBhZGQpO1xcbmluY2x1ZGUvbmV0L3VkcF90dW5uZWwuaDoyMTI6dm9pZCB1ZHBfdHVubmVsX3VwZGF0ZV9ncm9fcmN2KHN0cnVjdCBzb2NrICpzaywgYm9vbCBhZGQpO1xcbmluY2x1ZGUvbmV0L3VkcF90dW5uZWwuaC0yMTMtI2Vsc2VcXG5pbmNsdWRlL25ldC91ZHBfdHVubmVsLmg9MjE0PXN0YXRpYyBpbmxpbmUgdm9pZCB1ZHBfdHVubmVsX3VwZGF0ZV9ncm9fbG9va3VwKHN0cnVjdCBuZXQgKm5ldCxcXG5pbmNsdWRlL25ldC91ZHBfdHVubmVsLmgtMjE1LVxcdFxcdFxcdFxcdFxcdFxcdHN0cnVjdCBzb2NrICpzaywgYm9vbCBhZGQpIHt9XFxuaW5jbHVkZS9uZXQvdWRwX3R1bm5lbC5oOjIxNjpzdGF0aWMgaW5saW5lIHZvaWQgdWRwX3R1bm5lbF91cGRhdGVfZ3JvX3JjdihzdHJ1Y3Qgc29jayAqc2ssIGJvb2wgYWRkKSB7fVxcbmluY2x1ZGUvbmV0L3VkcF90dW5uZWwuaC0yMTctI2VuZGlmXFxuLS1cXG5pbmNsdWRlL25ldC91ZHBfdHVubmVsLmg9MjE5PXN0YXRpYyBpbmxpbmUgdm9pZCB1ZHBfdHVubmVsX2NsZWFudXBfZ3JvKHN0cnVjdCBzb2NrICpzaylcXG5pbmNsdWRlL25ldC91ZHBfdHVubmVsLmgtMjIwLXtcXG5pbmNsdWRlL25ldC91ZHBfdHVubmVsLmg6MjIxOlxcdHVkcF90dW5uZWxfdXBkYXRlX2dyb19yY3Yoc2ssIGZhbHNlKTtcXG5pbmNsdWRlL25ldC91ZHBfdHVubmVsLmgtMjIyLVxcdHVkcF90dW5uZWxfdXBkYXRlX2dyb19sb29rdXAoc29ja19uZXQoc2spLCBzaywgZmFsc2UpO1xcbi0tXFxubmV0L2lwdjQvdWRwLmM9Mjg3MT1zdGF0aWMgdm9pZCBzZXRfeGZybV9ncm9fdWRwX2VuY2FwX3JjdihfX3UxNiBlbmNhcF90eXBlLCB1bnNpZ25lZCBzaG9ydCBmYW1pbHksXFxuLS1cXG5uZXQvaXB2NC91ZHAuYy0yODg4LVxcdFxcdFxcdGlmICh1ZHBfc2soc2spLVxcdTAwM2Vncm9fcmVjZWl2ZSlcXG5uZXQvaXB2NC91ZHAuYzoyODg5OlxcdFxcdFxcdFxcdHVkcF90dW5uZWxfdXBkYXRlX2dyb19yY3Yoc2ssIGZhbHNlKTtcXG5uZXQvaXB2NC91ZHAuYy0yODkwLVxcbm5ldC9pcHY0L3VkcC5jLTI4OTEtXFx0XFx0XFx0V1JJVEVfT05DRSh1ZHBfc2soc2spLVxcdTAwM2Vncm9fcmVjZWl2ZSwgbmV3X2dyb19yZWNlaXZlKTtcXG5uZXQvaXB2NC91ZHAuYzoyODkyOlxcdFxcdFxcdHVkcF90dW5uZWxfdXBkYXRlX2dyb19yY3Yoc2ssIHRydWUpO1xcbm5ldC9pcHY0L3VkcC5jLTI4OTMtXFx0XFx0fVxcbi0tXFxubmV0L2lwdjQvdWRwX29mZmxvYWQuYz03Nz1FWFBPUlRfU1lNQk9MX0dQTCh1ZHBfdHVubmVsX3VwZGF0ZV9ncm9fbG9va3VwKTtcXG5uZXQvaXB2NC91ZHBfb2ZmbG9hZC5jLTc4LVxcbm5ldC9pcHY0L3VkcF9vZmZsb2FkLmM6Nzk6dm9pZCB1ZHBfdHVubmVsX3VwZGF0ZV9ncm9fcmN2KHN0cnVjdCBzb2NrICpzaywgYm9vbCBhZGQpXFxubmV0L2lwdjQvdWRwX29mZmxvYWQuYy04MC17XFxuLS1cXG5uZXQvaXB2NC91ZHBfb2ZmbG9hZC5jLTE0NC19XFxubmV0L2lwdjQvdWRwX29mZmxvYWQuYzoxNDU6RVhQT1JUX1NZTUJPTF9HUEwodWRwX3R1bm5lbF91cGRhdGVfZ3JvX3Jjdik7XFxubmV0L2lwdjQvdWRwX29mZmxvYWQuYy0xNDYtXFxuLS1cXG5uZXQvaXB2NC91ZHBfdHVubmVsX2NvcmUuYz03MT12b2lkIHNldHVwX3VkcF90dW5uZWxfc29jayhzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBzb2NrICpzayxcXG4tLVxcbm5ldC9pcHY0L3VkcF90dW5uZWxfY29yZS5jLTkxLVxcbm5ldC9pcHY0L3VkcF90dW5uZWxfY29yZS5jOjkyOlxcdHVkcF90dW5uZWxfdXBkYXRlX2dyb19yY3Yoc2ssIHRydWUpO1xcbm5ldC9pcHY0L3VkcF90dW5uZWxfY29yZS5jLTkzLVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wN1QwMjo1ODo0MC43MTcyNTMwOTRaIiwiU2VxIjoyMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MzAwNjkzMDkxMywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgVURQIEdSTyBhbmQgVHVubmVscyBpbiB0aGUgS2VybmVsKipcblxuT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyBVRFAgR1JPIChHZW5lcmljIFJlY2VpdmUgT2ZmbG9hZCkgaW50ZXJhY3RzIHdpdGggdHVubmVscywgc3BlY2lmaWNhbGx5IHdpdGhpbiBgbmV0L2lwdjQvdWRwX29mZmxvYWQuY2AuIEZpcnN0LCBJIHF1aWNrbHkgY29uZmlybSB0aGF0IHRoZSBjb3JlIGZpbGUgaXMgYnVpbHQgdW5kZXIgYENPTkZJR19JTkVUYCwgYXMgZXhwZWN0ZWQuIE5vdywgSSBzaG91bGQgZG91YmxlIGNoZWNrIHRoZSBjb2RlIGJsb2NrIGd1YXJkZWQgYnkgYCNpZiBJU19FTkFCTEVEKENPTkZJR19ORVRfVURQX1RVTk5FTClgLiBBaCwgbGluZSAxNyBvZiBgdWRwX29mZmxvYWQuY2AgaXMgdGhlIGtleS5cblxuTGV0IG1lIHRha2UgYSBjbG9zZXIgbG9vayBhdCB0aGF0IHNwZWNpZmljIHNlY3Rpb24gb2YgY29kZS4gT2theSwgbGluZXMgMTcgdGhyb3VnaCAyMCBhcmUgdXNpbmcgdGhhdCBjb25kaXRpb25hbC4gSXQgYXBwZWFycyB0aGUgcmVsZXZhbnQgY29kZSwgdGhlIGB1ZHBfdHVubmVsX2dyb19yY3ZgIGZ1bmN0aW9uLCBpcyBkZWZpbmVkIHdpdGhpbiB0aGF0IGJsb2NrIGFuZCBvbmx5IGV4aXN0cyBpZiBgQ09ORklHX05FVF9VRFBfVFVOTkVMYCBpcyBlbmFibGVkLiBUaGUgb3RoZXIgc2lkZSBvZiB0aGF0IGNvbmRpdGlvbmFsIGlzIGF0IGxpbmUgMTU0LCB3aXRoIGAjZWxzZWAuIEl0IGxvb2tzIGxpa2UgdGhlIG1vZGlmaWVkIEdSTyBmdW5jdGlvbiAoZGVmaW5lZCBsaW5lcyAxNDctMTUyKSBpcyBhbHNvIHByb3RlY3RlZCBieSB0aGF0IGNvbmRpdGlvbmFsLlxuXG5UaGUgY3JpdGljYWwgcGllY2UgaGVyZSBpcyBgQ09ORklHX05FVF9VRFBfVFVOTkVMYC4gVGltZSB0byBncmVwIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBmaW5kIG91dCB3aGF0IHRoYXQgb3B0aW9uIGFjdHVhbGx5IGNvbnRyb2xzLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0IGl0IG1lYW5zIHRvIGVuYWJsZSBpdCwgYW5kIHRoZSBpbXBsaWNhdGlvbnMgZm9yIEdSTyB3aXRoIFVEUCB0dW5uZWxzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNDY0NywiT3V0cHV0VG9rZW5zIjoyMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMyNiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wN1QwMjo1ODo0My43MjQxODkyMTdaIiwiU2VxIjoyMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI5NjIzNzMxNjMsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIE5FVF9VRFBfVFVOTkVMXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9pcHY0L0tjb25maWc9MzA0PWNvbmZpZyBORVRfSVBWVElcXG4tLVxcbm5ldC9pcHY0L0tjb25maWctMzE1LVxcbm5ldC9pcHY0L0tjb25maWc6MzE2OmNvbmZpZyBORVRfVURQX1RVTk5FTFxcbm5ldC9pcHY0L0tjb25maWctMzE3LVxcdHRyaXN0YXRlXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDAyOjU4OjQ2LjY4NjU2ODIzWiIsIlNlcSI6MjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjIwMTQyNzY4MTgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqRXhhbWluaW5nIGBuZXQvaXB2NC9LY29uZmlnYCoqXG5cbk9rYXksIHRpbWUgdG8gZGlnIGluLiBJIG5lZWQgdG8gZ2V0IGEgaGFuZGxlIG9uIHRoaXMsIHNvIGxldCdzIHN0YXJ0IGJ5IHplcm9pbmcgaW4gb24gdGhlIGNvbmZpZ3VyYXRpb24gZm9yIElQdjQuIEknbSBnb2luZyB0byBqdW1wIGludG8gYG5ldC9pcHY0L0tjb25maWdgIGFuZCB0YWtlIGEgbG9vayBhcm91bmQgbGluZSAzMTYuIFRoYXQgYXJlYSB1c3VhbGx5IGhvbGRzIGNydWNpYWwgZGVmaW5pdGlvbnMsIHNvIEknbGwgYmUgYWJsZSB0byBxdWlja2x5IHVuZGVyc3RhbmQgdGhlIHN0cnVjdHVyZSwgYW5kIGhvcGVmdWxseSBnZXQgYSBoYW5kbGUgb24gd2hhdCB0aGlzIG1vZHVsZSBpcyBhYm91dC4gTGV0J3Mgc2VlIHdoYXQgd2UgY2FuIGZpbmQuIEkgZXhwZWN0IHRoZXJlIHdpbGwgYmUgc29tZXRoaW5nIHNwZWNpZmljIG9mIGludGVyZXN0IHRoZXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNTM2MiwiT3V0cHV0VG9rZW5zIjozNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDAyOjU4OjQ4LjcwMDg0Nzk3OVoiLCJTZXEiOjI0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMDc1NjksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L2lwdjQvS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiAzMTAsXG4gIFwiTGluZUNvdW50XCI6IDI1XG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAzMTA6XFx0XFx0ICBUdW5uZWxpbmcgbWVhbnMgZW5jYXBzdWxhdGluZyBkYXRhIG9mIG9uZSBwcm90b2NvbCB0eXBlIHdpdGhpblxcbiAzMTE6XFx0XFx0ICBhbm90aGVyIHByb3RvY29sIGFuZCBzZW5kaW5nIGl0IG92ZXIgYSBjaGFubmVsIHRoYXQgdW5kZXJzdGFuZHMgdGhlXFxuIDMxMjpcXHRcXHQgIGVuY2Fwc3VsYXRpbmcgcHJvdG9jb2wuIFRoaXMgY2FuIGJlIHVzZWQgd2l0aCB4ZnJtIG1vZGUgdHVubmVsIHRvIGdpdmVcXG4gMzEzOlxcdFxcdCAgdGhlIG5vdGlvbiBvZiBhIHNlY3VyZSB0dW5uZWwgZm9yIElQU0VDIGFuZCB0aGVuIHVzZSByb3V0aW5nIHByb3RvY29sXFxuIDMxNDpcXHRcXHQgIG9uIHRvcC5cXG4gMzE1OlxcdFxcbiAzMTY6XFx0Y29uZmlnIE5FVF9VRFBfVFVOTkVMXFxuIDMxNzpcXHRcXHR0cmlzdGF0ZVxcbiAzMTg6XFx0XFx0c2VsZWN0IE5FVF9JUF9UVU5ORUxcXG4gMzE5OlxcdFxcdGRlZmF1bHQgblxcbiAzMjA6XFx0XFxuIDMyMTpcXHRjb25maWcgTkVUX0ZPVVxcbiAzMjI6XFx0XFx0dHJpc3RhdGUgXFxcIklQOiBGb28gKElQIHByb3RvY29scykgb3ZlciBVRFBcXFwiXFxuIDMyMzpcXHRcXHRzZWxlY3QgTkVUX1VEUF9UVU5ORUxcXG4gMzI0OlxcdFxcdGhlbHBcXG4gMzI1OlxcdFxcdCAgRm9vIG92ZXIgVURQIGFsbG93cyBhbnkgSVAgcHJvdG9jb2wgdG8gYmUgZGlyZWN0bHkgZW5jYXBzdWxhdGVkXFxuIDMyNjpcXHRcXHQgIG92ZXIgVURQIGluY2x1ZGUgdHVubmVscyAoSVBJUCwgR1JFLCBTSVQpLiBCeSBlbmNhcHN1bGF0aW5nIGluIFVEUFxcbiAzMjc6XFx0XFx0ICBuZXR3b3JrIG1lY2hhbmlzbXMgYW5kIG9wdGltaXphdGlvbnMgZm9yIFVEUCAoc3VjaCBhcyBFQ01QXFxuIDMyODpcXHRcXHQgIGFuZCBSU1MpIGNhbiBiZSBsZXZlcmFnZWQgdG8gcHJvdmlkZSBiZXR0ZXIgc2VydmljZS5cXG4gMzI5OlxcdFxcbiAzMzA6XFx0Y29uZmlnIE5FVF9GT1VfSVBfVFVOTkVMU1xcbiAzMzE6XFx0XFx0Ym9vbCBcXFwiSVA6IEZPVSBlbmNhcHN1bGF0aW9uIG9mIElQIHR1bm5lbHNcXFwiXFxuIDMzMjpcXHRcXHRkZXBlbmRzIG9uIE5FVF9JUElQIHx8IE5FVF9JUEdSRSB8fCBJUFY2X1NJVFxcbiAzMzM6XFx0XFx0c2VsZWN0IE5FVF9GT1VcXG4gMzM0OlxcdFxcdGhlbHBcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDdUMDI6NTg6NDguNzAwOTU3NjA4WiIsIlNlcSI6MjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjQ4MTI3NjM1MDQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQXNzZXNzbWVudCBvZiB0aGUgVURQIEdSTyBSZWNlaXZlIFBhdGggTW9kaWZpY2F0aW9uKipcblxuT2theSwgc28gaGVyZSdzIHRoZSBicmVha2Rvd24gb2YgdGhpcyBwYXRjaCBhbmQgd2hhdCBpdCBtZWFucyBmb3IgZnV6emluZy4gYENPTkZJR19ORVRfVURQX1RVTk5FTGAgaXMgc2VsZWN0ZWQgYnkgc2V2ZXJhbCBvdGhlciBjb25maWdzLCBsaWtlIGBDT05GSUdfTkVUX0ZPVWAsIGBDT05GSUdfR0VORVZFYCwgYW5kIGBDT05GSUdfVlhMQU5gLCBpbmRpY2F0aW5nIHRoaXMgaXMgYSBmZWF0dXJlIHdpdGggcG90ZW50aWFsbHkgYnJvYWQgaW1wYWN0LiBUaGUgYmFzZSBJUHY0IGNvbmZpZywgYENPTkZJR19JTkVUYCwgaXMgYWxzbyByZWxldmFudCwgc28gd2UgbmVlZCB0byBjb25zaWRlciBib3RoIGBORVRfVURQX1RVTk5FTGAgYW5kIGBJTkVUYCB3aGVuIGNvbmZpZ3VyaW5nIHRoZSB0ZXN0IGVudmlyb25tZW50LiBgTkVUX1VEUF9UVU5ORUxgIGlzIHRoZSBwcmltYXJ5IGd1YXJkIG9uIHRoZSBtb2RpZmllZCBjb2RlIGJsb2NrLCBzbyB0aGF0J3MgYSBrZXkgZW5hYmxlIGNvbmZpZy5cblxuSSd2ZSB6ZXJvZWQgaW4gb24gdGhlIHNwZWNpZmljIGZ1bmN0aW9ucyBhZmZlY3RlZDogYHVkcF90dW5uZWxfZ3JvX3JjdmAgKHRoZSB0YXJnZXQgZnVuY3Rpb24pLCBpdHMgZGlyZWN0IGNhbGxlciBgdWRwX2dyb19yZWNlaXZlYCwgYW5kIHRoZW4gdGhlIEdSTyByZWNlaXZlIGltcGxlbWVudGF0aW9ucyBmb3IgSVB2NCBhbmQgSVB2NiwgbmFtZWx5IGB1ZHA0X2dyb19yZWNlaXZlYCBhbmQgYHVkcDZfZ3JvX3JlY2VpdmVgLCBhbmQgYWxzbyB0aGUgdXBkYXRlIGZ1bmN0aW9uIGB1ZHBfdHVubmVsX3VwZGF0ZV9ncm9fcmN2YC4gVGhlc2UgYXJlIG15IGZvY3VzIHN5bWJvbHMuXG5cbkkndmUgZG91YmxlLWNoZWNrZWQgbXkgcnVsZXM6IGF2b2lkaW5nIHViaXF1aXRvdXMgaG90LXBhdGhzLCBhbmQgdGFyZ2V0aW5nIHNwZWNpZmljIGZlYXR1cmUgbG9naWMgYW5kIGVudHJ5cG9pbnRzLiBUaGlzIGNsZWFybHkgaGl0cyB0aGUgbWFyay4gVGhlIG1vZGlmaWVkIGNvZGUgaXMgYXQgdGhlIGNvcmUgb2YgR1JPIHByb2Nlc3Npbmcgd2l0aGluIHRoZSBVRFAgdHVubmVsIHBhdGgsIG1ha2luZyBpdCBhIGhpZ2gtdmFsdWUgdGFyZ2V0LiBBbmQsIHRoZSBgRW5hYmxlQ29uZmlnc2AgY2xlYXJseSBzcGVjaWZ5IHRoZSBuZWNlc3NhcnkgYnVpbGQgcGFyYW1ldGVycy5cblxuTm93IGZvciB0aGUgcmVhc29uaW5nLiBUaGUgcGF0Y2ggY2hhbmdlcyBgdWRwX3R1bm5lbF9ncm9fcmN2YCwgcmVtb3ZpbmcgYSBzdGF0aWMgY2FsbCBvcHRpbWl6YXRpb24gYW5kIHVzaW5nIGBjYWxsX2dyb19yZWNlaXZlX3NrYCBkaXJlY3RseS4gVGhpcyBkaXJlY3RseSBhZmZlY3RzIHBhY2tldCBwcm9jZXNzaW5nIGZvciBVRFAgdHVubmVscyBhbmQgR1JPIHJlY3Vyc2lvbiB3aXRoaW4gdGhlIGNvcmUgbmV0d29ya2luZyBzdGFjay4gVGhpcyBpcyBleGNlbGxlbnQgYmVjYXVzZSBpdCdzIHJlYWRpbHkgcmVhY2hhYmxlIGFuZCB0ZXN0YWJsZSwgZXNwZWNpYWxseSBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMuIFN0YW5kYXJkIG5ldHdvcmsgaW50ZXJmYWNlcyBhbmQgdHVubmVsIHNvY2tldHMgYXJlIGFsbCB3ZSBuZWVkIGZvciBlZmZlY3RpdmUgZnV6emluZy5cblxuTXkgY29uY2x1c2lvbj8gVGhpcyBpcyBhYnNvbHV0ZWx5IHdvcnRoIGZ1enppbmcuIEkndmUgZ290IG15IGZvY3VzIHN5bWJvbHM6IGB1ZHBfdHVubmVsX2dyb19yY3ZgLCBgdWRwX2dyb19yZWNlaXZlYCwgYHVkcF90dW5uZWxfdXBkYXRlX2dyb19yY3ZgLCBgdWRwNF9ncm9fcmVjZWl2ZWAsIGFuZCBgdWRwNl9ncm9fcmVjZWl2ZWAuIE15IGVuYWJsZSBjb25maWdzIGFyZSBgSU5FVGAgYW5kIGBORVRfVURQX1RVTk5FTGAuIFRpbWUgdG8gaW52b2tlIGBzZXQtcmVzdWx0c2AuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE1OTM2LCJPdXRwdXRUb2tlbnMiOjE3NCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjUwNSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDAyOjU4OjUzLjUxMzcyNjYyM1oiLCJTZXEiOjI2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE4MjAyODMyNywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiSU5FVFwiLFxuICAgIFwiTkVUX1VEUF9UVU5ORUxcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJ1ZHBfdHVubmVsX2dyb19yY3ZcIixcbiAgICBcInVkcF9ncm9fcmVjZWl2ZVwiLFxuICAgIFwidWRwX3R1bm5lbF91cGRhdGVfZ3JvX3JjdlwiLFxuICAgIFwidWRwNF9ncm9fcmVjZWl2ZVwiLFxuICAgIFwidWRwNl9ncm9fcmVjZWl2ZVwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBVRFAgdHVubmVsIEdSTyByZWNlaXZlIHBhdGggKHVkcF90dW5uZWxfZ3JvX3JjdikgaW4gbmV0L2lwdjQvdWRwX29mZmxvYWQuYywgcmVtb3ZpbmcgdGhlIHN0YXRpYyBjYWxsIGJyYW5jaCBpbiBmYXZvciBvZiBkaXJlY3RseSBpbnZva2luZyBjYWxsX2dyb19yZWNlaXZlX3NrLiBUaGlzIG1vZGlmaWVzIGNvcmUgbmV0d29ya2luZyBHUk8gZXhlY3V0aW9uIGZsb3cgYW5kIHJlY3Vyc2lvbiBjaGVja3MsIHdoaWNoIGFyZSBmdWxseSByZWFjaGFibGUgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIHVzaW5nIFVEUCB0dW5uZWxzLCB2aXJ0dWFsIGludGVyZmFjZXMsIGFuZCBHUk8tZW5hYmxlZCBzb2NrZXRzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIklORVRcIixcbiAgICBcIk5FVF9VRFBfVFVOTkVMXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwidWRwX3R1bm5lbF9ncm9fcmN2XCIsXG4gICAgXCJ1ZHBfZ3JvX3JlY2VpdmVcIixcbiAgICBcInVkcF90dW5uZWxfdXBkYXRlX2dyb19yY3ZcIixcbiAgICBcInVkcDRfZ3JvX3JlY2VpdmVcIixcbiAgICBcInVkcDZfZ3JvX3JlY2VpdmVcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgVURQIHR1bm5lbCBHUk8gcmVjZWl2ZSBwYXRoICh1ZHBfdHVubmVsX2dyb19yY3YpIGluIG5ldC9pcHY0L3VkcF9vZmZsb2FkLmMsIHJlbW92aW5nIHRoZSBzdGF0aWMgY2FsbCBicmFuY2ggaW4gZmF2b3Igb2YgZGlyZWN0bHkgaW52b2tpbmcgY2FsbF9ncm9fcmVjZWl2ZV9zay4gVGhpcyBtb2RpZmllcyBjb3JlIG5ldHdvcmtpbmcgR1JPIGV4ZWN1dGlvbiBmbG93IGFuZCByZWN1cnNpb24gY2hlY2tzLCB3aGljaCBhcmUgZnVsbHkgcmVhY2hhYmxlIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyB1c2luZyBVRFAgdHVubmVscywgdmlydHVhbCBpbnRlcmZhY2VzLCBhbmQgR1JPLWVuYWJsZWQgc29ja2V0cy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDdUMDI6NTg6NTMuNjk1NzYyOTNaIiwiU2VxIjoyNywiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJJZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE1MjU2MDY4NTkwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDdUMDI6NTg6NTMuNjk2NDAwMTJaIiwiU2VxIjoyOCwiTmVzdGluZyI6MiwiVHlwZSI6ImFnZW50IiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiY29yZSIsIkR1cmF0aW9uIjoxNTI1NTQyNjEyMCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggcmVtb3ZlcyB0aGUgc3RhdGljIGNhbGwgYnJhbmNoIG9wdGltaXphdGlvbiBpbiBgdWRwX3R1bm5lbF9ncm9fcmN2KClgLCByZXZlcnRpbmcgdG8gY2FsbGluZyBgY2FsbF9ncm9fcmVjZWl2ZV9zayh1ZHBfc2soc2spLVxcdTAwM2Vncm9fcmVjZWl2ZSwgc2ssIGhlYWQsIHNrYilgIHVuY29uZGl0aW9uYWxseS4gVGhlIGNoYW5nZSBkb2VzIG5vdCBpbnRyb2R1Y2Ugb3IgbW9kaWZ5IGFueSBtZW1vcnkgYWxsb2NhdGlvbnMsIHN0cnVjdHVyZSBpbml0aWFsaXphdGlvbiwgY29weWluZyB0byB1c2VyIHNwYWNlLCBvciBidWZmZXIgbGVuZ3RoL2JvdW5kcyBsb2dpYy4gTm8gdW5pbml0aWFsaXplZCBtZW1vcnkgb3IgaW5mb3JtYXRpb24gbGVhayByaXNrcyBhcmUgaW50cm9kdWNlZC4gU3RhbmRhcmQgdGVzdGluZyBhbmQgS0FTQU4gYXJlIHN1ZmZpY2llbnQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5XG5lcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZFxuZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKVxuZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuXG5cbkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOlxuLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlXG4gIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTlxuICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQXG4gIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuXG4tIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLFxuICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuXG5cblJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sXG5MT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLlxuQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWVxuc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3NcbnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uXG5cbkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0XG51bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZixcbmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5c1xudGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmdcbnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbFxuZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLFxuY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuXG5cblNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczpcbjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiXG4gICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkc1xuICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC5cbjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXNcbiAgIG9yIHN0cnVjdCBmaWVsZHMuXG4zLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzXG4gICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLlxuNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3NcbiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy5cblxuU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6XG4tIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyXG4gIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodFxuICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuXG4tIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkXG4gIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC5cbi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLlxuXG5Vc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlXG5kZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiVGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjRcblxuRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgYzVkNjFiZDYzNjI4NDliMThlOTUyZjYyZmYzMjk3ZTFjOWZlNGI4ZlxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBNb24gU2VwIDcgMDI6NTc6NTggMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9uZXQvaXB2NC91ZHBfb2ZmbG9hZC5jIGIvbmV0L2lwdjQvdWRwX29mZmxvYWQuY1xuaW5kZXggY2YwN2MzYzY2MTFhMi4uMzA2NDlmNDA3YTc4OCAxMDA2NDRcbi0tLSBhL25ldC9pcHY0L3VkcF9vZmZsb2FkLmNcbisrKyBiL25ldC9pcHY0L3VkcF9vZmZsb2FkLmNcbkBAIC0xNDgsMTMgKzE0OCw2IEBAIHN0YXRpYyBzdHJ1Y3Qgc2tfYnVmZiAqdWRwX3R1bm5lbF9ncm9fcmN2KHN0cnVjdCBzb2NrICpzayxcbiBcdFx0XHRcdFx0ICBzdHJ1Y3QgbGlzdF9oZWFkICpoZWFkLFxuIFx0XHRcdFx0XHQgIHN0cnVjdCBza19idWZmICpza2IpXG4ge1xuLVx0aWYgKHN0YXRpY19icmFuY2hfbGlrZWx5KFx1MDAyNnVkcF90dW5uZWxfc3RhdGljX2NhbGwpKSB7XG4tXHRcdGlmICh1bmxpa2VseShncm9fcmVjdXJzaW9uX2luY190ZXN0KHNrYikpKSB7XG4tXHRcdFx0TkFQSV9HUk9fQ0Ioc2tiKS1cdTAwM2VmbHVzaCB8PSAxO1xuLVx0XHRcdHJldHVybiBOVUxMO1xuLVx0XHR9XG4tXHRcdHJldHVybiBzdGF0aWNfY2FsbCh1ZHBfdHVubmVsX2dyb19yY3YpKHNrLCBoZWFkLCBza2IpO1xuLVx0fVxuIFx0cmV0dXJuIGNhbGxfZ3JvX3JlY2VpdmVfc2sodWRwX3NrKHNrKS1cdTAwM2Vncm9fcmVjZWl2ZSwgc2ssIGhlYWQsIHNrYik7XG4gfVxuIFxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDdUMDI6NTg6NTMuNjk2NDA0MjlaIiwiU2VxIjoyOSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6OTI2ODgwOTI5NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIFVEUCBPZmZsb2FkIENvZGUqKlxuXG5Pa2F5LCBsZXQncyB0YWtlIGEgbG9vayBhdCB0aGlzIGBkaWZmYC4gRmlyc3QsIEknbGwgbmVlZCB0byBleGFtaW5lIHRoZSBjb250ZXh0IGFyb3VuZCB0aGUgY2hhbmdlIGluIGBuZXQvaXB2NC91ZHBfb2ZmbG9hZC5jYC4gSSBzZWUgdGhhdCB0aGUgY29kZSBpcyBkZWFsaW5nIHdpdGggVURQIG9mZmxvYWQgYW5kIHNwZWNpZmljYWxseSB3aXRoIEdSTyAoR2VuZXJpYyBSZWNlaXZlIE9mZmxvYWQpLiBUaGUgYGRpZmZgIHNob3dzIHRoZSByZW1vdmFsIG9mIGEgY29uZGl0aW9uYWwgY2hlY2sgYW5kIGEgcG90ZW50aWFsIGNhbGwgdG8gYSBzdGF0aWMgZnVuY3Rpb24uXG5cbkluaXRpYWxseSwgaXQgc2VlbXMgdGhlcmUgd2FzIGEgYHN0YXRpY19icmFuY2hfbGlrZWx5YCBjaGVjaywgd2hpY2ggZGV0ZXJtaW5lZCB3aGV0aGVyIHRvIGNhbGwgYHN0YXRpY19jYWxsKHVkcF90dW5uZWxfZ3JvX3JjdilgLiBUaGF0LCBpbiB0dXJuLCBzZWVtcyB0byBoYXZlIGhhZCBhIHRlc3QgZm9yIGEgYGdyb19yZWN1cnNpb25faW5jX3Rlc3RgIGFuZCBwb3NzaWJseSBzZXR0aW5nIGBOQVBJX0dST19DQihza2IpLVx1MDAzZWZsdXNoIHw9IDE7YCBpZiBgZ3JvX3JlY3Vyc2lvbl9pbmNfdGVzdGAgcmV0dXJuZWQgdHJ1ZS4gIFRoZSBgc3RhdGljX2NhbGxgIG1lY2hhbmlzbSBpcyBpbnRlcmVzdGluZzsgaXQgc3VnZ2VzdHMgYSBtZWNoYW5pc20gZm9yIG9wdGltaXppbmcgZnVuY3Rpb24gY2FsbHMsIHBvc3NpYmx5IGZvciBpbmxpbmluZyBvciBmb3IgZW5hYmxpbmcvZGlzYWJsaW5nIGEgY29kZSBwYXRoIGF0IGNvbXBpbGUgdGltZS4gIFRoZSBmdW5jdGlvbiBgZ3JvX3JlY3Vyc2lvbl9pbmNfdGVzdGAgc2VlbXMgcmVsYXRlZCB0byByZWN1cnNpb24gd2l0aGluIHRoZSBHUk8gcHJvY2Vzc2luZy5cblxuTm93LCBpbnN0ZWFkLCBpdCBsb29rcyBsaWtlIHRoaXMgaXMgYmVpbmcgcmVwbGFjZWQgYnkgYGNhbGxfZ3JvX3JlY2VpdmVfc2tgLiBUaGlzIGxpa2VseSBtZWFucyB0aGUgY29kZSBpcyBub3cgZGlyZWN0bHkgY2FsbGluZyBhIGZ1bmN0aW9uIHBvaW50ZXIgKGB1ZHBfc2soc2spLVx1MDAzZWdyb19yZWNlaXZlYCkgdGhhdOKAmXMgYXNzb2NpYXRlZCB3aXRoIHRoZSBgc29ja2Agc3RydWN0dXJlLCBieXBhc3NpbmcgdGhlIGBzdGF0aWNfYnJhbmNoYCBvcHRpbWl6YXRpb24uIEknbGwgbmVlZCB0byBpbnZlc3RpZ2F0ZSB3aGF0IGlzIHN0b3JlZCBpbiBgdWRwX3NrKHNrKS1cdTAwM2Vncm9fcmVjZWl2ZWAgYW5kIGRldGVybWluZSB0aGUgaW1wbGljYXRpb25zIG9mIHRoaXMgY2hhbmdlLiBJdCdzIHBvc3NpYmxlIHRoaXMgaXMgYSBzaW1wbGlmaWNhdGlvbiwgb3IgbWF5YmUgYW4gb3B0aW1pemF0aW9uIGZvciBhIHBhcnRpY3VsYXIgaGFyZHdhcmUgY29uZmlndXJhdGlvbiwgb3IgbWF5YmUgYSBjaGFuZ2UgaW4gdGhlIHdheSBHUk8gaXMgaGFuZGxlZC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIHBlcmZvcm1hbmNlIGFuZCBmdW5jdGlvbmFsIGltcGFjdHMgaGVyZS4gSSdsbCBuZWVkIHRvIGtub3c6IHdoeSB0aGUgYHN0YXRpY19icmFuY2hgIHdhcyByZW1vdmVkLCB3aGF0IHRoZSBpbXBsaWNhdGlvbnMgb2YgdGhlIGRpcmVjdCBmdW5jdGlvbiBjYWxsIGFyZSBpbiB0ZXJtcyBvZiBwZXJmb3JtYW5jZSBhbmQgcG90ZW50aWFsIHJlZ3Jlc3Npb25zLCBhbmQgd2hhdCBjaXJjdW1zdGFuY2VzIHdvdWxkIGNhdXNlIHRoZSBvbGQgY29kZSB0byBmYWlsIGFuZCB0aGUgbmV3IGNvZGUgdG8gcGFzcy5cblxuXG4iLCJJbnB1dFRva2VucyI6MjE1OCwiT3V0cHV0VG9rZW5zIjozOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMzNSwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDAyOjU5OjAyLjk2NTIxOTUyNFoiLCJTZXEiOjMwLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxOTQxMjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L2lwdjQvdWRwX29mZmxvYWQuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAxMjAsXG4gIFwiTGluZUNvdW50XCI6IDgwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAxMjA6XFx0XFx0XFx0ICogVGhlIHN0YWNrIGNsZWFudXBzIG9ubHkgc3VjY2Vzc2Z1bGx5IGFkZGVkIHR1bm5lbCwgdGhlXFxuIDEyMTpcXHRcXHRcXHQgKiBsb29rdXAgb24gcmVtb3ZhbCBzaG91bGQgbmV2ZXIgZmFpbC5cXG4gMTIyOlxcdFxcdFxcdCAqL1xcbiAxMjM6XFx0XFx0XFx0aWYgKFdBUk5fT05fT05DRSghY3VyKSlcXG4gMTI0OlxcdFxcdFxcdFxcdGdvdG8gb3V0O1xcbiAxMjU6XFx0XFxuIDEyNjpcXHRcXHRcXHRpZiAoIXJlZmNvdW50X2RlY19hbmRfdGVzdChcXHUwMDI2Y3VyLVxcdTAwM2Vjb3VudCkpXFxuIDEyNzpcXHRcXHRcXHRcXHRnb3RvIG91dDtcXG4gMTI4OlxcdFxcbiAxMjk6XFx0XFx0XFx0LyogQXZvaWQgZ2Fwcywgc28gdGhhdCB0aGUgZW5hYmxlIHR1bm5lbCBoYXMgYWx3YXlzIGlkIDAgKi9cXG4gMTMwOlxcdFxcdFxcdCpjdXIgPSB1ZHBfdHVubmVsX2dyb190eXBlc1stLXVkcF90dW5uZWxfZ3JvX3R5cGVfbnJdO1xcbiAxMzE6XFx0XFx0fVxcbiAxMzI6XFx0XFxuIDEzMzpcXHRcXHRpZiAodWRwX3R1bm5lbF9ncm9fdHlwZV9uciA9PSAxKSB7XFxuIDEzNDpcXHRcXHRcXHRzdGF0aWNfY2FsbF91cGRhdGUodWRwX3R1bm5lbF9ncm9fcmN2LFxcbiAxMzU6XFx0XFx0XFx0XFx0XFx0ICAgdWRwX3R1bm5lbF9ncm9fdHlwZXNbMF0uZ3JvX3JlY2VpdmUpO1xcbiAxMzY6XFx0XFx0XFx0c3RhdGljX2JyYW5jaF9lbmFibGUoXFx1MDAyNnVkcF90dW5uZWxfc3RhdGljX2NhbGwpO1xcbiAxMzc6XFx0XFx0fSBlbHNlIGlmIChvbGRfZ3JvX3R5cGVfbnIgPT0gMSkge1xcbiAxMzg6XFx0XFx0XFx0c3RhdGljX2JyYW5jaF9kaXNhYmxlKFxcdTAwMjZ1ZHBfdHVubmVsX3N0YXRpY19jYWxsKTtcXG4gMTM5OlxcdFxcdFxcdHN0YXRpY19jYWxsX3VwZGF0ZSh1ZHBfdHVubmVsX2dyb19yY3YsIGR1bW15X2dyb19yY3YpO1xcbiAxNDA6XFx0XFx0fVxcbiAxNDE6XFx0XFxuIDE0MjpcXHRvdXQ6XFxuIDE0MzpcXHRcXHRtdXRleF91bmxvY2soXFx1MDAyNnVkcF90dW5uZWxfZ3JvX3R5cGVfbG9jayk7XFxuIDE0NDpcXHR9XFxuIDE0NTpcXHRFWFBPUlRfU1lNQk9MX0dQTCh1ZHBfdHVubmVsX3VwZGF0ZV9ncm9fcmN2KTtcXG4gMTQ2OlxcdFxcbiAxNDc6XFx0c3RhdGljIHN0cnVjdCBza19idWZmICp1ZHBfdHVubmVsX2dyb19yY3Yoc3RydWN0IHNvY2sgKnNrLFxcbiAxNDg6XFx0XFx0XFx0XFx0XFx0XFx0ICBzdHJ1Y3QgbGlzdF9oZWFkICpoZWFkLFxcbiAxNDk6XFx0XFx0XFx0XFx0XFx0XFx0ICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbiAxNTA6XFx0e1xcbiAxNTE6XFx0XFx0cmV0dXJuIGNhbGxfZ3JvX3JlY2VpdmVfc2sodWRwX3NrKHNrKS1cXHUwMDNlZ3JvX3JlY2VpdmUsIHNrLCBoZWFkLCBza2IpO1xcbiAxNTI6XFx0fVxcbiAxNTM6XFx0XFxuIDE1NDpcXHQjZWxzZVxcbiAxNTU6XFx0XFxuIDE1NjpcXHRzdGF0aWMgc3RydWN0IHNrX2J1ZmYgKnVkcF90dW5uZWxfZ3JvX3JjdihzdHJ1Y3Qgc29jayAqc2ssXFxuIDE1NzpcXHRcXHRcXHRcXHRcXHRcXHQgIHN0cnVjdCBsaXN0X2hlYWQgKmhlYWQsXFxuIDE1ODpcXHRcXHRcXHRcXHRcXHRcXHQgIHN0cnVjdCBza19idWZmICpza2IpXFxuIDE1OTpcXHR7XFxuIDE2MDpcXHRcXHRyZXR1cm4gY2FsbF9ncm9fcmVjZWl2ZV9zayh1ZHBfc2soc2spLVxcdTAwM2Vncm9fcmVjZWl2ZSwgc2ssIGhlYWQsIHNrYik7XFxuIDE2MTpcXHR9XFxuIDE2MjpcXHRcXG4gMTYzOlxcdCNlbmRpZlxcbiAxNjQ6XFx0XFxuIDE2NTpcXHRzdGF0aWMgc3RydWN0IHNrX2J1ZmYgKl9fc2tiX3VkcF90dW5uZWxfc2VnbWVudChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbiAxNjY6XFx0XFx0bmV0ZGV2X2ZlYXR1cmVzX3QgZmVhdHVyZXMsXFxuIDE2NzpcXHRcXHRzdHJ1Y3Qgc2tfYnVmZiAqKCpnc29faW5uZXJfc2VnbWVudCkoc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4gMTY4OlxcdFxcdFxcdFxcdFxcdFxcdCAgICAgbmV0ZGV2X2ZlYXR1cmVzX3QgZmVhdHVyZXMpLFxcbiAxNjk6XFx0XFx0X19iZTE2IG5ld19wcm90b2NvbCwgYm9vbCBpc19pcHY2KVxcbiAxNzA6XFx0e1xcbiAxNzE6XFx0XFx0aW50IHRubF9obGVuID0gc2tiX2lubmVyX21hY19oZWFkZXIoc2tiKSAtIHNrYl90cmFuc3BvcnRfaGVhZGVyKHNrYik7XFxuIDE3MjpcXHRcXHRib29sIHJlbWNzdW0sIG5lZWRfY3N1bSwgb2ZmbG9hZF9jc3VtLCBnc29fcGFydGlhbDtcXG4gMTczOlxcdFxcdHN0cnVjdCBza19idWZmICpzZWdzID0gRVJSX1BUUigtRUlOVkFMKTtcXG4gMTc0OlxcdFxcdHUxNiBtYWNfb2Zmc2V0ID0gc2tiLVxcdTAwM2VtYWNfaGVhZGVyO1xcbiAxNzU6XFx0XFx0X19iZTE2IHByb3RvY29sID0gc2tiLVxcdTAwM2Vwcm90b2NvbDtcXG4gMTc2OlxcdFxcdHUxNiBtYWNfbGVuID0gc2tiLVxcdTAwM2VtYWNfbGVuO1xcbiAxNzc6XFx0XFx0aW50IHVkcF9vZmZzZXQsIG91dGVyX2hsZW47XFxuIDE3ODpcXHRcXHRzdHJ1Y3QgdWRwaGRyICp1aDtcXG4gMTc5OlxcdFxcdF9fd3N1bSBwYXJ0aWFsO1xcbiAxODA6XFx0XFx0Ym9vbCBuZWVkX2lwc2VjO1xcbiAxODE6XFx0XFxuIDE4MjpcXHRcXHRpZiAodW5saWtlbHkoIXBza2JfbWF5X3B1bGwoc2tiLCB0bmxfaGxlbikpKVxcbiAxODM6XFx0XFx0XFx0Z290byBvdXQ7XFxuIDE4NDpcXHRcXG4gMTg1OlxcdFxcdHVoID0gdWRwX2hkcihza2IpO1xcbiAxODY6XFx0XFxuIDE4NzpcXHRcXHQvKiBBZGp1c3QgcGFydGlhbCBoZWFkZXIgY2hlY2tzdW0gdG8gbmVnYXRlIG9sZCBsZW5ndGguXFxuIDE4ODpcXHRcXHQgKiBXZSBjYW5ub3QgcmVseSBvbiB0aGUgdmFsdWUgY29udGFpbmVkIGluIHVoLVxcdTAwM2VsZW4gYXMgaXQgaXNcXG4gMTg5OlxcdFxcdCAqIHBvc3NpYmxlIHRoYXQgdGhlIGFjdHVhbCB2YWx1ZSBleGNlZWRzIHRoZSBib3VuZGFyaWVzIG9mIHRoZVxcbiAxOTA6XFx0XFx0ICogMTYgYml0IGxlbmd0aCBmaWVsZCBkdWUgdG8gdGhlIGhlYWRlciBiZWluZyBhZGRlZCBvdXRzaWRlIG9mIGFuXFxuIDE5MTpcXHRcXHQgKiBJUCBvciBJUHY2IGZyYW1lIHRoYXQgd2FzIGFscmVhZHkgbGltaXRlZCB0byA2NEsgLSAxLlxcbiAxOTI6XFx0XFx0ICovXFxuIDE5MzpcXHRcXHRpZiAoc2tiX3NoaW5mbyhza2IpLVxcdTAwM2Vnc29fdHlwZSBcXHUwMDI2IFNLQl9HU09fUEFSVElBTClcXG4gMTk0OlxcdFxcdFxcdHBhcnRpYWwgPSAoX19mb3JjZSBfX3dzdW0pdWgtXFx1MDAzZWxlbjtcXG4gMTk1OlxcdFxcdGVsc2VcXG4gMTk2OlxcdFxcdFxcdHBhcnRpYWwgPSAoX19mb3JjZSBfX3dzdW0paHRvbmwoc2tiLVxcdTAwM2VsZW4pO1xcbiAxOTc6XFx0XFx0cGFydGlhbCA9IGNzdW1fc3ViKGNzdW1fdW5mb2xkKHVoLVxcdTAwM2VjaGVjayksIHBhcnRpYWwpO1xcbiAxOTg6XFx0XFxuIDE5OTpcXHRcXHQvKiBzZXR1cCBpbm5lciBza2IuICovXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDAyOjU5OjAyLjk2NTQxNzkyNFoiLCJTZXEiOjMxLCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoxNzk5NDk4NTgyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgc3VtbWFyeSwgYXMgaWYgSSB3ZXJlIHRoaW5raW5nIHRoZXNlIHRob3VnaHRzOlxuXG4qKkFuYWx5emluZyBgdWRwX29mZmxvYWQuY2AgYW5kIFN0YXRpYyBDYWxscyoqXG5cbk9rYXksIHRpbWUgdG8gZGl2ZSBkZWVwZXIgaW50byBgdWRwX29mZmxvYWQuY2AsIHNwZWNpZmljYWxseSBmb2N1c2luZyBvbiB0aGUgYXJlYSBhcm91bmQgYHVkcF90dW5uZWxfZ3JvX3JjdmAuIEkgbmVlZCB0byBnZXQgYSBiZXR0ZXIgaGFuZGxlIG9uIHRoZSBjb250ZXh0IG9mIHRoYXQgZnVuY3Rpb24sIGVzcGVjaWFsbHkgaG93IGl0J3MgYmVpbmcgdXNlZC4gVG8gZG8gdGhhdCwgSSdtIGdvaW5nIHRvIHNjYW4gdGhlIHN1cnJvdW5kaW5nIGNvZGUsIGxldCdzIHNheSBmcm9tIGxpbmVzIDUwIHRvIDEyMC4gSSB3YW50IHRvIHNlZSB3aGF0J3MgaGFwcGVuaW5nIGp1c3QgYmVmb3JlIGFuZCBhZnRlciBgdWRwX3R1bm5lbF9ncm9fcmN2YCwgYW5kIG1vc3QgaW1wb3J0YW50bHksIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQgdGhhdCBgc3RhdGljYCBjYWxsIGlzIGRvaW5nLCB3aG8ncyBjYWxsaW5nIGl0LCBhbmQgd2hhdCBpdHMgb3ZlcmFsbCBwdXJwb3NlIGlzIGluIHRoZSBicm9hZGVyIG5ldHdvcmtpbmcgZnJhbWV3b3JrLiBJJ20gaG9waW5nIHRvIGRpc2NvdmVyIHRoZSByb2xlIGFuZCBpbXBsaWNhdGlvbnMgZm9yIHRoZSBlbnRpcmUgdHVubmVsIHByb2Nlc3NpbmcgZmxvdy5cblxuXG4iLCJJbnB1dFRva2VucyI6NDI5NCwiT3V0cHV0VG9rZW5zIjozOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQ5LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDdUMDI6NTk6MDQuNzY0OTE5NzQ2WiIsIlNlcSI6MzIsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIwODg4MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvaXB2NC91ZHBfb2ZmbG9hZC5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDUwLFxuICBcIkxpbmVDb3VudFwiOiA3MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgIDUwOlxcdHN0YXRpYyBERUZJTkVfU1BJTkxPQ0sodWRwX3R1bm5lbF9ncm9fbG9jayk7XFxuICA1MTpcXHRcXG4gIDUyOlxcdHZvaWQgdWRwX3R1bm5lbF91cGRhdGVfZ3JvX2xvb2t1cChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBzb2NrICpzaywgYm9vbCBhZGQpXFxuICA1MzpcXHR7XFxuICA1NDpcXHRcXHRib29sIGlzX2lwdjYgPSBzay1cXHUwMDNlc2tfZmFtaWx5ID09IEFGX0lORVQ2O1xcbiAgNTU6XFx0XFx0c3RydWN0IHVkcF9zb2NrICp0dXAsICp1cCA9IHVkcF9zayhzayk7XFxuICA1NjpcXHRcXHRzdHJ1Y3QgdWRwX3R1bm5lbF9ncm8gKnVkcF90dW5uZWxfZ3JvO1xcbiAgNTc6XFx0XFxuICA1ODpcXHRcXHRzcGluX2xvY2soXFx1MDAyNnVkcF90dW5uZWxfZ3JvX2xvY2spO1xcbiAgNTk6XFx0XFx0dWRwX3R1bm5lbF9ncm8gPSBcXHUwMDI2bmV0LVxcdTAwM2VpcHY0LnVkcF90dW5uZWxfZ3JvW2lzX2lwdjZdO1xcbiAgNjA6XFx0XFx0aWYgKGFkZClcXG4gIDYxOlxcdFxcdFxcdGhsaXN0X2FkZF9oZWFkKFxcdTAwMjZ1cC1cXHUwMDNldHVubmVsX2xpc3QsIFxcdTAwMjZ1ZHBfdHVubmVsX2dyby1cXHUwMDNlbGlzdCk7XFxuICA2MjpcXHRcXHRlbHNlIGlmICh1cC1cXHUwMDNldHVubmVsX2xpc3QucHByZXYpXFxuICA2MzpcXHRcXHRcXHRobGlzdF9kZWxfaW5pdChcXHUwMDI2dXAtXFx1MDAzZXR1bm5lbF9saXN0KTtcXG4gIDY0OlxcdFxcbiAgNjU6XFx0XFx0aWYgKHVkcF90dW5uZWxfZ3JvLVxcdTAwM2VsaXN0LmZpcnN0IFxcdTAwMjZcXHUwMDI2XFxuICA2NjpcXHRcXHQgICAgIXVkcF90dW5uZWxfZ3JvLVxcdTAwM2VsaXN0LmZpcnN0LVxcdTAwM2VuZXh0KSB7XFxuICA2NzpcXHRcXHRcXHR0dXAgPSBobGlzdF9lbnRyeSh1ZHBfdHVubmVsX2dyby1cXHUwMDNlbGlzdC5maXJzdCwgc3RydWN0IHVkcF9zb2NrLFxcbiAgNjg6XFx0XFx0XFx0XFx0XFx0ICB0dW5uZWxfbGlzdCk7XFxuICA2OTpcXHRcXG4gIDcwOlxcdFxcdFxcdHJjdV9hc3NpZ25fcG9pbnRlcih1ZHBfdHVubmVsX2dyby1cXHUwMDNlc2ssIChzdHJ1Y3Qgc29jayAqKXR1cCk7XFxuICA3MTpcXHRcXHR9IGVsc2Uge1xcbiAgNzI6XFx0XFx0XFx0UkNVX0lOSVRfUE9JTlRFUih1ZHBfdHVubmVsX2dyby1cXHUwMDNlc2ssIE5VTEwpO1xcbiAgNzM6XFx0XFx0fVxcbiAgNzQ6XFx0XFxuICA3NTpcXHRcXHRzcGluX3VubG9jayhcXHUwMDI2dWRwX3R1bm5lbF9ncm9fbG9jayk7XFxuICA3NjpcXHR9XFxuICA3NzpcXHRFWFBPUlRfU1lNQk9MX0dQTCh1ZHBfdHVubmVsX3VwZGF0ZV9ncm9fbG9va3VwKTtcXG4gIDc4OlxcdFxcbiAgNzk6XFx0dm9pZCB1ZHBfdHVubmVsX3VwZGF0ZV9ncm9fcmN2KHN0cnVjdCBzb2NrICpzaywgYm9vbCBhZGQpXFxuICA4MDpcXHR7XFxuICA4MTpcXHRcXHRzdHJ1Y3QgdWRwX3R1bm5lbF90eXBlX2VudHJ5ICpjdXIgPSBOVUxMO1xcbiAgODI6XFx0XFx0c3RydWN0IHVkcF9zb2NrICp1cCA9IHVkcF9zayhzayk7XFxuICA4MzpcXHRcXHRpbnQgaSwgb2xkX2dyb190eXBlX25yO1xcbiAgODQ6XFx0XFxuICA4NTpcXHRcXHRpZiAoIVVEUF9NQVhfVFVOTkVMX1RZUEVTIHx8ICF1cC1cXHUwMDNlZ3JvX3JlY2VpdmUpXFxuICA4NjpcXHRcXHRcXHRyZXR1cm47XFxuICA4NzpcXHRcXG4gIDg4OlxcdFxcdG11dGV4X2xvY2soXFx1MDAyNnVkcF90dW5uZWxfZ3JvX3R5cGVfbG9jayk7XFxuICA4OTpcXHRcXG4gIDkwOlxcdFxcdC8qIENoZWNrIGlmIHRoZSBzdGF0aWMgY2FsbCBpcyBwZXJtYW5lbnRseSBkaXNhYmxlZC4gKi9cXG4gIDkxOlxcdFxcdGlmICh1ZHBfdHVubmVsX2dyb190eXBlX25yIFxcdTAwM2UgVURQX01BWF9UVU5ORUxfVFlQRVMpXFxuICA5MjpcXHRcXHRcXHRnb3RvIG91dDtcXG4gIDkzOlxcdFxcbiAgOTQ6XFx0XFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIHVkcF90dW5uZWxfZ3JvX3R5cGVfbnI7IGkrKylcXG4gIDk1OlxcdFxcdFxcdGlmICh1ZHBfdHVubmVsX2dyb190eXBlc1tpXS5ncm9fcmVjZWl2ZSA9PSB1cC1cXHUwMDNlZ3JvX3JlY2VpdmUpXFxuICA5NjpcXHRcXHRcXHRcXHRjdXIgPSBcXHUwMDI2dWRwX3R1bm5lbF9ncm9fdHlwZXNbaV07XFxuICA5NzpcXHRcXG4gIDk4OlxcdFxcdG9sZF9ncm9fdHlwZV9uciA9IHVkcF90dW5uZWxfZ3JvX3R5cGVfbnI7XFxuICA5OTpcXHRcXHRpZiAoYWRkKSB7XFxuIDEwMDpcXHRcXHRcXHQvKlxcbiAxMDE6XFx0XFx0XFx0ICogVXBkYXRlIHRoZSBtYXRjaGluZyBlbnRyeSwgaWYgZm91bmQsIG9yIGFkZCBhIG5ldyBvbmVcXG4gMTAyOlxcdFxcdFxcdCAqIGlmIG5lZWRlZFxcbiAxMDM6XFx0XFx0XFx0ICovXFxuIDEwNDpcXHRcXHRcXHRpZiAoY3VyKSB7XFxuIDEwNTpcXHRcXHRcXHRcXHRyZWZjb3VudF9pbmMoXFx1MDAyNmN1ci1cXHUwMDNlY291bnQpO1xcbiAxMDY6XFx0XFx0XFx0XFx0Z290byBvdXQ7XFxuIDEwNzpcXHRcXHRcXHR9XFxuIDEwODpcXHRcXG4gMTA5OlxcdFxcdFxcdGlmICh1bmxpa2VseSh1ZHBfdHVubmVsX2dyb190eXBlX25yID09IFVEUF9NQVhfVFVOTkVMX1RZUEVTKSkge1xcbiAxMTA6XFx0XFx0XFx0XFx0cHJfZXJyX29uY2UoXFxcIlRvbyBtYW55IFVEUCB0dW5uZWwgdHlwZXMsIHBsZWFzZSBpbmNyZWFzZSBVRFBfTUFYX1RVTk5FTF9UWVBFU1xcXFxuXFxcIik7XFxuIDExMTpcXHRcXHRcXHRcXHQvKiBFbnN1cmUgc3RhdGljIGNhbGwgd2lsbCBuZXZlciBiZSBlbmFibGVkICovXFxuIDExMjpcXHRcXHRcXHRcXHR1ZHBfdHVubmVsX2dyb190eXBlX25yID0gVURQX01BWF9UVU5ORUxfVFlQRVMgKyAxO1xcbiAxMTM6XFx0XFx0XFx0fSBlbHNlIHtcXG4gMTE0OlxcdFxcdFxcdFxcdGN1ciA9IFxcdTAwMjZ1ZHBfdHVubmVsX2dyb190eXBlc1t1ZHBfdHVubmVsX2dyb190eXBlX25yKytdO1xcbiAxMTU6XFx0XFx0XFx0XFx0cmVmY291bnRfc2V0KFxcdTAwMjZjdXItXFx1MDAzZWNvdW50LCAxKTtcXG4gMTE2OlxcdFxcdFxcdFxcdGN1ci1cXHUwMDNlZ3JvX3JlY2VpdmUgPSB1cC1cXHUwMDNlZ3JvX3JlY2VpdmU7XFxuIDExNzpcXHRcXHRcXHR9XFxuIDExODpcXHRcXHR9IGVsc2Uge1xcbiAxMTk6XFx0XFx0XFx0LypcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDdUMDI6NTk6MDQuNzY1MTMxOTI2WiIsIlNlcSI6MzMsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjQxODY2NjAwMzQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBVRFAgVHVubmVsIEdSTyBSZWNlaXZlIE9wdGltaXphdGlvbiBSZW1vdmFsKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBJbiBgdWRwX3R1bm5lbF9ncm9fcmN2YCwgdGhleSd2ZSBkaXRjaGVkIHRoZSBzdGF0aWMgYnJhbmNoL2NhbGwgb3B0aW1pemF0aW9uIGluIGZhdm9yIG9mIGEgZGlyZWN0IGNhbGwgdGhyb3VnaCBgY2FsbF9ncm9fcmVjZWl2ZV9za2AuIEkgc2VlIHRoYXQgdGhlIGAjZWxzZWAgcGF0aCwgd2hlbiB0aGUgc3RhdGljIGNhbGwgd2Fzbid0IGFjdGl2ZSwgKmFscmVhZHkqIHVzZWQgYGNhbGxfZ3JvX3JlY2VpdmVfc2tgLiBTbyBpdCBsb29rcyBsaWtlIGEgc2ltcGxpZmljYXRpb24uXG5cbk5vdywgbGV0J3MgcXVpY2tseSB0aWNrIHRocm91Z2ggdGhlIHBvdGVudGlhbCBwcm9ibGVtcy4gQXJlIHdlIHNlbmRpbmcgYW55IGtlcm5lbCBzdHJ1Y3R1cmVzIHRvIHVzZXJzcGFjZT8gTm8uIFVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzIG9yIHN0cnVjdCBmaWVsZHM/IE5vcGUuIEFueSBmYW5jeSBkYXRhIHN0cnVjdHVyZSBhbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uPyBOZWdhdGl2ZS4gQW5kIGRlZmluaXRlbHkgbm90aGluZyBmdW5reSB3aXRoIGJvdW5kcyBjaGVja3Mgb3IgYnVmZmVyIGxlbmd0aHMgdGhhdCBjb3VsZCBsZWFrIGRhdGEuXG5cblRoaXMgcmVhbGx5IGxvb2tzIGxpa2UgYSBwZXJmb3JtYW5jZSBvcHRpbWl6YXRpb24gcmVtb3ZhbCwgb3IgcGVyaGFwcyBhIHNpbXBsaWZpY2F0aW9uLCBpbiB0aGUgVURQIHR1bm5lbCBHUk8gcmVjZWl2ZSBwYXRoLiBgY2FsbF9ncm9fcmVjZWl2ZV9za2AgaXMganVzdCBhIHdyYXBwZXIgYXJvdW5kIHRoZSBmdW5jdGlvbiBwb2ludGVyIGNhbGwgZm9yIGBza2JfZ3JvX3JlY2VpdmVgLCBzbyB3ZSdyZSBqdXN0IHRhbGtpbmcgYWJvdXQgaW5kaXJlY3QgY2FsbHMuXG5cbk5vdywgbGV0J3MgZ2V0IHNlcmlvdXMgYW5kIGNoZWNrIGZvciBhbnkgbWVtb3J5IHNoZW5hbmlnYW5zLiBObyBhbGxvY2F0aW9uLCBubyBzdHJ1Y3R1cmUgY29waWVzLCBubyB1bmluaXRpYWxpemVkIGZpZWxkcywgYW5kIGRlZmluaXRlbHkgbm8gaW5mb3JtYXRpb24gbGVha3MuIFdlJ3JlIGNsZWFyIG9uIG1lbW9yeSBzYWZldHkgaGVyZS5cblxuQWxyaWdodCwgbGV0J3MgY29uZmlybSB0aGUgS01TQU4gc2l0dWF0aW9uLiBgTmVlZHNLTVNBTiA9IGZhbHNlYC4gV2UgZG9uJ3QgbmVlZCBkZWRpY2F0ZWQgS01TQU4gZnV6emluZy4gVGhlIHBhdGNoIGlzICpyZW1vdmluZyogY29tcGxleGl0eSwgaXQncyBub3QgaW50cm9kdWNpbmcgYW55IG5ldyBtZW1vcnktcmVsYXRlZCByaXNrLiBXZSBhcmVuJ3QgYWxsb2NhdGluZyBtZW1vcnkgb3Igc2VuZGluZyBkYXRhIHRvIHVzZXIgc3BhY2Ugb3IgYW55IG9mIHRoZSBvdGhlciBjb21tb24gS01TQU4gcGl0ZmFsbHMuIFN0YW5kYXJkIEtBU0FOIGFuZCBvdGhlciBzYW5pdGl6ZXJzIHdpbGwgYmUgcGVyZmVjdGx5IGZpbmUgZm9yIHRlc3RpbmcgbmV0d29yayBwYWNrZXQgcHJvY2Vzc2luZyBhbmQgY29udHJvbCBmbG93LlxuXG5Pa2F5LCB0aGF0J3MgZW5vdWdoIGFuYWx5c2lzLCBsZXQncyBjYWxsIGBzZXQtcmVzdWx0c2AuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjU3MDEsIk91dHB1dFRva2VucyI6MTIzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDA2LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDdUMDI6NTk6MDguOTUxNzk1MDRaIiwiU2VxIjozNCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyOTA1MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIHJlbW92ZXMgdGhlIHN0YXRpYyBjYWxsIGJyYW5jaCBvcHRpbWl6YXRpb24gaW4gYHVkcF90dW5uZWxfZ3JvX3JjdigpYCwgcmV2ZXJ0aW5nIHRvIGNhbGxpbmcgYGNhbGxfZ3JvX3JlY2VpdmVfc2sodWRwX3NrKHNrKS1cXHUwMDNlZ3JvX3JlY2VpdmUsIHNrLCBoZWFkLCBza2IpYCB1bmNvbmRpdGlvbmFsbHkuIFRoZSBjaGFuZ2UgZG9lcyBub3QgaW50cm9kdWNlIG9yIG1vZGlmeSBhbnkgbWVtb3J5IGFsbG9jYXRpb25zLCBzdHJ1Y3R1cmUgaW5pdGlhbGl6YXRpb24sIGNvcHlpbmcgdG8gdXNlciBzcGFjZSwgb3IgYnVmZmVyIGxlbmd0aC9ib3VuZHMgbG9naWMuIE5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IG9yIGluZm9ybWF0aW9uIGxlYWsgcmlza3MgYXJlIGludHJvZHVjZWQuIFN0YW5kYXJkIHRlc3RpbmcgYW5kIEtBU0FOIGFyZSBzdWZmaWNpZW50LlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIHJlbW92ZXMgdGhlIHN0YXRpYyBjYWxsIGJyYW5jaCBvcHRpbWl6YXRpb24gaW4gYHVkcF90dW5uZWxfZ3JvX3JjdigpYCwgcmV2ZXJ0aW5nIHRvIGNhbGxpbmcgYGNhbGxfZ3JvX3JlY2VpdmVfc2sodWRwX3NrKHNrKS1cXHUwMDNlZ3JvX3JlY2VpdmUsIHNrLCBoZWFkLCBza2IpYCB1bmNvbmRpdGlvbmFsbHkuIFRoZSBjaGFuZ2UgZG9lcyBub3QgaW50cm9kdWNlIG9yIG1vZGlmeSBhbnkgbWVtb3J5IGFsbG9jYXRpb25zLCBzdHJ1Y3R1cmUgaW5pdGlhbGl6YXRpb24sIGNvcHlpbmcgdG8gdXNlciBzcGFjZSwgb3IgYnVmZmVyIGxlbmd0aC9ib3VuZHMgbG9naWMuIE5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IG9yIGluZm9ybWF0aW9uIGxlYWsgcmlza3MgYXJlIGludHJvZHVjZWQuIFN0YW5kYXJkIHRlc3RpbmcgYW5kIEtBU0FOIGFyZSBzdWZmaWNpZW50LlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0udG9rZW5zIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnVG9vbER1ciA9IHN0YXRzLnRvb2wuY291bnQgPiAwID8gKHN0YXRzLnRvb2wuZHVyYXRpb24gLyBzdGF0cy50b29sLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCgkJCWNvbnN0IGxsbVN1bWFyeUNlbGxzID0gW3N0YXRzLmxsbS5jb3VudCwgc3RhdHMubGxtLnRva2VucywgYXZnTGxtVG9rZW4sIHN0YXRzLmxsbS5kdXJhdGlvbiwgYXZnTGxtRHVyXTsKCQkJY29uc3QgdG9vbFN1bW1hcnlDZWxscyA9IFtzdGF0cy50b29sLmNvdW50LCBzdGF0cy50b29sLmR1cmF0aW9uLCBhdmdUb29sRHVyXTsKCgkJCWNvbnN0IGxsbVN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xsbV9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJbGxtU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IGxsbVRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJbGxtU3VtYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCWxsbVRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCWxsbVN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKGxsbVRyKTsKCgkJCWNvbnN0IHRvb2xTdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b29sX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQl0b29sU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IHRvb2xUciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCXRvb2xTdW1tYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCXRvb2xUci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQl0b29sU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQodG9vbFRyKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgZmlsdGVyZWRTdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gWyJsbG0iLCAidG9vbCJdLmluY2x1ZGVzKGQuVHlwZSkpOwoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdEdXJhdGlvbicpOwoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOyAKCgkJCWZpbHRlcmVkU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCQoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7CgkJCQlsZXQgdG9vbHRpcCA9IHMuTmFtZTsKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iICYmIHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCQkJCWRhdGEuYWRkUm93KFtgJHtzLlNlcX1gLCBkdXIsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUaW1lIENvbnN1bXB0aW9uIG9mIExMTS9Ub29sIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0vVG9vbCBTdGVwcycsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdTZWNvbmRzJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkdXJhdGlvbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgbGxtU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IGQuVHlwZSA9PT0gImxsbSIpOwoJCQlpZiAobGxtU3RlcHMubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdUb2tlbnMnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAnc3R5bGUnfSk7CQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOwkKCgkJCWNvbnN0IGFnZW50Q29sb3JzID0ge307CgkJCWNvbnN0IHBhbGV0dGUgPSBbJyM0Mjg1RjQnLCAnI0RCNDQzNycsICcjRjRCNDAwJywgJyMwRjlENTgnLCAnI0FCNDdCQycsICcjMDBBQ0MxJ107CgkJCWxldCBjb2xvcklkeCA9IDA7CgkJCWNvbnN0IGFnZW50TExNQ291bnRzID0ge307CgkJCWxsbVN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQlpZiAoIWFnZW50Q29sb3JzW3MuTmFtZV0pIHsKCQkJCQlhZ2VudENvbG9yc1tzLk5hbWVdID0gcGFsZXR0ZVtjb2xvcklkeCAlIHBhbGV0dGUubGVuZ3RoXTsKCQkJCQljb2xvcklkeCsrOwoJCQkJfQoKCQkJCWFnZW50TExNQ291bnRzW3MuTmFtZV0gPSAoYWdlbnRMTE1Db3VudHNbcy5OYW1lXSB8fCAwKSArIDE7CgkJCQljb25zdCBsYWJlbCA9IGAke3MuTmFtZX0tJHthZ2VudExMTUNvdW50c1tzLk5hbWVdfWA7CgkJCQljb25zdCB0b3RhbFRva2VucyA9IHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnM7CgkJCQljb25zdCBzdHlsZSA9IGBjb2xvcjogJHthZ2VudENvbG9yc1tzLk5hbWVdfWA7CgkJCQlsZXQgdG9vbHRpcCA9IGBUb3RhbCBUb2tlbnM6ICR7dG90YWxUb2tlbnN9XG4oSW46ICR7cy5JbnB1dFRva2Vuc30sIE91dDogJHtzLk91dHB1dFRva2Vuc30sIFRob3VnaHRzOiAke3MuT3V0cHV0VGhvdWdodHNUb2tlbnN9KWA7CgkJCQlpZiAocy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoKCQkJCWRhdGEuYWRkUm93KFtsYWJlbCwgdG90YWxUb2tlbnMsIHN0eWxlLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVG9rZW4gQ29uc3VtcHRpb24gYnkgTExNIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0gQ2FsbCBTZXF1ZW5jZScsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdDb25zdW1lZCBUb2tlbnMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rva2VuX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgkJbGV0IGFsbEV4cGFuZGVkID0gZmFsc2U7CgkJZnVuY3Rpb24gdG9nZ2xlQWxsRGV0YWlscygpIHsKCQkJYWxsRXhwYW5kZWQgPSAhYWxsRXhwYW5kZWQ7CgkJCWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2RldGFpbHMnKS5mb3JFYWNoKGQgPT4gewoJCQkJaWYgKGFsbEV4cGFuZGVkKSBkLnNldEF0dHJpYnV0ZSgnb3BlbicsICcnKTsKCQkJCWVsc2UgZC5yZW1vdmVBdHRyaWJ1dGUoJ29wZW4nKTsKCQkJfSk7CgkJfQoJPC9zY3JpcHQ+CgoKPC9ib2R5Pgo8L2h0bWw+Cg==" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflow28n8r[1] Phase: Succeeded StartedAt: 2026-09-07 02:59:20 +0000 UTC FinishedAt: 2026-09-07 02:59:20 +0000 UTC Input: nil Output: nil --------- Name: series-workflow28n8r[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-09-07 02:59:20 +0000 UTC FinishedAt: 2026-09-07 02:59:20 +0000 UTC Input: nil Output: nil --------- Name: series-workflow28n8r[2] Phase: Succeeded StartedAt: 2026-09-07 02:59:20 +0000 UTC FinishedAt: 2026-09-07 06:37:27 +0000 UTC Input: nil Output: nil --------- Name: series-workflow28n8r[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"31f961de2f90fbf52eb2d4e15b3eeaa09f9b4fc2","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","NET_UDP_TUNNEL"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.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_tunnel_gro_rcv","udp_gro_receive","udp_tunnel_update_gro_rcv","udp4_gro_receive","udp6_gro_receive"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"31f961de2f90fbf52eb2d4e15b3eeaa09f9b4fc2","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","NET_UDP_TUNNEL"],"series_id":"f1987774-e9ec-417f-9afc-3028c43df235","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-09-07 02:59:20 +0000 UTC FinishedAt: 2026-09-07 06:37:27 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"31f961de2f90fbf52eb2d4e15b3eeaa09f9b4fc2","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","NET_UDP_TUNNEL"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.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_tunnel_gro_rcv","udp_gro_receive","udp_tunnel_update_gro_rcv","udp4_gro_receive","udp6_gro_receive"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"31f961de2f90fbf52eb2d4e15b3eeaa09f9b4fc2","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","NET_UDP_TUNNEL"],"series_id":"f1987774-e9ec-417f-9afc-3028c43df235","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflow28n8r[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"31f961de2f90fbf52eb2d4e15b3eeaa09f9b4fc2","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","NET_UDP_TUNNEL"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.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_tunnel_gro_rcv","udp_gro_receive","udp_tunnel_update_gro_rcv","udp4_gro_receive","udp6_gro_receive"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"31f961de2f90fbf52eb2d4e15b3eeaa09f9b4fc2","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","NET_UDP_TUNNEL"],"series_id":"f1987774-e9ec-417f-9afc-3028c43df235","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-09-07 02:59:20 +0000 UTC FinishedAt: 2026-09-07 02:59:30 +0000 UTC Input: nil Output: nil --------- Name: series-workflow28n8r[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"31f961de2f90fbf52eb2d4e15b3eeaa09f9b4fc2","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","NET_UDP_TUNNEL"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.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_tunnel_gro_rcv","udp_gro_receive","udp_tunnel_update_gro_rcv","udp4_gro_receive","udp6_gro_receive"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"31f961de2f90fbf52eb2d4e15b3eeaa09f9b4fc2","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","NET_UDP_TUNNEL"],"series_id":"f1987774-e9ec-417f-9afc-3028c43df235","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-09-07 02:59:20 +0000 UTC FinishedAt: 2026-09-07 02:59:24 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"31f961de2f90fbf52eb2d4e15b3eeaa09f9b4fc2","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","NET_UDP_TUNNEL"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.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-workflow28n8r/series-workflow28n8r-convert-artifact-1713902882/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow28n8r[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"31f961de2f90fbf52eb2d4e15b3eeaa09f9b4fc2","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","NET_UDP_TUNNEL"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.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_tunnel_gro_rcv","udp_gro_receive","udp_tunnel_update_gro_rcv","udp4_gro_receive","udp6_gro_receive"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"31f961de2f90fbf52eb2d4e15b3eeaa09f9b4fc2","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","NET_UDP_TUNNEL"],"series_id":"f1987774-e9ec-417f-9afc-3028c43df235","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-09-07 02:59:30 +0000 UTC FinishedAt: 2026-09-07 03:15:49 +0000 UTC Input: nil Output: nil --------- Name: series-workflow28n8r[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"31f961de2f90fbf52eb2d4e15b3eeaa09f9b4fc2","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","NET_UDP_TUNNEL"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.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_tunnel_gro_rcv","udp_gro_receive","udp_tunnel_update_gro_rcv","udp4_gro_receive","udp6_gro_receive"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"31f961de2f90fbf52eb2d4e15b3eeaa09f9b4fc2","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","NET_UDP_TUNNEL"],"series_id":"f1987774-e9ec-417f-9afc-3028c43df235","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-09-07 02:59:30 +0000 UTC FinishedAt: 2026-09-07 03:15:49 +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:*b8aff172-2804-4bb1-9f6b-7ef8a825cf76,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-workflow28n8r/series-workflow28n8r-convert-artifact-1713902882/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": "c066aef1-db91-40a4-aeda-dce87fc90804", "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-workflow28n8r/series-workflow28n8r-build-action-304453344/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow28n8r[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"31f961de2f90fbf52eb2d4e15b3eeaa09f9b4fc2","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","NET_UDP_TUNNEL"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.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_tunnel_gro_rcv","udp_gro_receive","udp_tunnel_update_gro_rcv","udp4_gro_receive","udp6_gro_receive"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"31f961de2f90fbf52eb2d4e15b3eeaa09f9b4fc2","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","NET_UDP_TUNNEL"],"series_id":"f1987774-e9ec-417f-9afc-3028c43df235","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-09-07 02:59:30 +0000 UTC FinishedAt: 2026-09-07 03:15: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:*b8aff172-2804-4bb1-9f6b-7ef8a825cf76,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-workflow28n8r/series-workflow28n8r-convert-artifact-1713902882/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": "c066aef1-db91-40a4-aeda-dce87fc90804", "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-workflow28n8r/series-workflow28n8r-build-action-304453344/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow28n8r[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"31f961de2f90fbf52eb2d4e15b3eeaa09f9b4fc2","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","NET_UDP_TUNNEL"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.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_tunnel_gro_rcv","udp_gro_receive","udp_tunnel_update_gro_rcv","udp4_gro_receive","udp6_gro_receive"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"31f961de2f90fbf52eb2d4e15b3eeaa09f9b4fc2","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","NET_UDP_TUNNEL"],"series_id":"f1987774-e9ec-417f-9afc-3028c43df235","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-09-07 03:15:49 +0000 UTC FinishedAt: 2026-09-07 03:15:49 +0000 UTC Input: nil Output: nil --------- Name: series-workflow28n8r[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"31f961de2f90fbf52eb2d4e15b3eeaa09f9b4fc2","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","NET_UDP_TUNNEL"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.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_tunnel_gro_rcv","udp_gro_receive","udp_tunnel_update_gro_rcv","udp4_gro_receive","udp6_gro_receive"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"31f961de2f90fbf52eb2d4e15b3eeaa09f9b4fc2","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","NET_UDP_TUNNEL"],"series_id":"f1987774-e9ec-417f-9afc-3028c43df235","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-09-07 03:15:49 +0000 UTC FinishedAt: 2026-09-07 03:15:49 +0000 UTC Input: nil Output: nil --------- Name: series-workflow28n8r[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"31f961de2f90fbf52eb2d4e15b3eeaa09f9b4fc2","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","NET_UDP_TUNNEL"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.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_tunnel_gro_rcv","udp_gro_receive","udp_tunnel_update_gro_rcv","udp4_gro_receive","udp6_gro_receive"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"31f961de2f90fbf52eb2d4e15b3eeaa09f9b4fc2","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","NET_UDP_TUNNEL"],"series_id":"f1987774-e9ec-417f-9afc-3028c43df235","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-09-07 03:15:49 +0000 UTC FinishedAt: 2026-09-07 03:15:59 +0000 UTC Input: nil Output: nil --------- Name: series-workflow28n8r[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"31f961de2f90fbf52eb2d4e15b3eeaa09f9b4fc2","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","NET_UDP_TUNNEL"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.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_tunnel_gro_rcv","udp_gro_receive","udp_tunnel_update_gro_rcv","udp4_gro_receive","udp6_gro_receive"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"31f961de2f90fbf52eb2d4e15b3eeaa09f9b4fc2","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","NET_UDP_TUNNEL"],"series_id":"f1987774-e9ec-417f-9afc-3028c43df235","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-09-07 03:15:49 +0000 UTC FinishedAt: 2026-09-07 03:15:54 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"31f961de2f90fbf52eb2d4e15b3eeaa09f9b4fc2","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","NET_UDP_TUNNEL"],"series_id":"f1987774-e9ec-417f-9afc-3028c43df235","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.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-workflow28n8r/series-workflow28n8r-convert-artifact-1031246205/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow28n8r[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"31f961de2f90fbf52eb2d4e15b3eeaa09f9b4fc2","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","NET_UDP_TUNNEL"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.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_tunnel_gro_rcv","udp_gro_receive","udp_tunnel_update_gro_rcv","udp4_gro_receive","udp6_gro_receive"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"31f961de2f90fbf52eb2d4e15b3eeaa09f9b4fc2","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","NET_UDP_TUNNEL"],"series_id":"f1987774-e9ec-417f-9afc-3028c43df235","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-09-07 03:15:59 +0000 UTC FinishedAt: 2026-09-07 03:18:09 +0000 UTC Input: nil Output: nil --------- Name: series-workflow28n8r[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"31f961de2f90fbf52eb2d4e15b3eeaa09f9b4fc2","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","NET_UDP_TUNNEL"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.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_tunnel_gro_rcv","udp_gro_receive","udp_tunnel_update_gro_rcv","udp4_gro_receive","udp6_gro_receive"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"31f961de2f90fbf52eb2d4e15b3eeaa09f9b4fc2","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","NET_UDP_TUNNEL"],"series_id":"f1987774-e9ec-417f-9afc-3028c43df235","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-09-07 03:15:59 +0000 UTC FinishedAt: 2026-09-07 03:17:59 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*c066aef1-db91-40a4-aeda-dce87fc90804,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-workflow28n8r/series-workflow28n8r-build-action-304453344/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-workflow28n8r[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"31f961de2f90fbf52eb2d4e15b3eeaa09f9b4fc2","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","NET_UDP_TUNNEL"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.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_tunnel_gro_rcv","udp_gro_receive","udp_tunnel_update_gro_rcv","udp4_gro_receive","udp6_gro_receive"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"31f961de2f90fbf52eb2d4e15b3eeaa09f9b4fc2","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","NET_UDP_TUNNEL"],"series_id":"f1987774-e9ec-417f-9afc-3028c43df235","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-09-07 03:18:09 +0000 UTC FinishedAt: 2026-09-07 03:18:09 +0000 UTC Input: nil Output: nil --------- Name: series-workflow28n8r[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"31f961de2f90fbf52eb2d4e15b3eeaa09f9b4fc2","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","NET_UDP_TUNNEL"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.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_tunnel_gro_rcv","udp_gro_receive","udp_tunnel_update_gro_rcv","udp4_gro_receive","udp6_gro_receive"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"31f961de2f90fbf52eb2d4e15b3eeaa09f9b4fc2","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","NET_UDP_TUNNEL"],"series_id":"f1987774-e9ec-417f-9afc-3028c43df235","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-09-07 03:18:09 +0000 UTC FinishedAt: 2026-09-07 03:18:09 +0000 UTC Input: nil Output: nil --------- Name: series-workflow28n8r[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"31f961de2f90fbf52eb2d4e15b3eeaa09f9b4fc2","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","NET_UDP_TUNNEL"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.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_tunnel_gro_rcv","udp_gro_receive","udp_tunnel_update_gro_rcv","udp4_gro_receive","udp6_gro_receive"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"31f961de2f90fbf52eb2d4e15b3eeaa09f9b4fc2","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","NET_UDP_TUNNEL"],"series_id":"f1987774-e9ec-417f-9afc-3028c43df235","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-09-07 03:18:09 +0000 UTC FinishedAt: 2026-09-07 03:34:13 +0000 UTC Input: nil Output: nil --------- Name: series-workflow28n8r[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"31f961de2f90fbf52eb2d4e15b3eeaa09f9b4fc2","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","NET_UDP_TUNNEL"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.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_tunnel_gro_rcv","udp_gro_receive","udp_tunnel_update_gro_rcv","udp4_gro_receive","udp6_gro_receive"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"31f961de2f90fbf52eb2d4e15b3eeaa09f9b4fc2","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","NET_UDP_TUNNEL"],"series_id":"f1987774-e9ec-417f-9afc-3028c43df235","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-09-07 03:18:09 +0000 UTC FinishedAt: 2026-09-07 03:34:13 +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:*b8aff172-2804-4bb1-9f6b-7ef8a825cf76,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-workflow28n8r/series-workflow28n8r-convert-artifact-1031246205/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": "bb02c226-6891-4c5f-be50-f12e1147a282", "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-workflow28n8r/series-workflow28n8r-build-action-2247578073/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow28n8r[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"31f961de2f90fbf52eb2d4e15b3eeaa09f9b4fc2","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","NET_UDP_TUNNEL"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.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_tunnel_gro_rcv","udp_gro_receive","udp_tunnel_update_gro_rcv","udp4_gro_receive","udp6_gro_receive"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"31f961de2f90fbf52eb2d4e15b3eeaa09f9b4fc2","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","NET_UDP_TUNNEL"],"series_id":"f1987774-e9ec-417f-9afc-3028c43df235","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-09-07 03:18:09 +0000 UTC FinishedAt: 2026-09-07 03:34:03 +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:*b8aff172-2804-4bb1-9f6b-7ef8a825cf76,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-workflow28n8r/series-workflow28n8r-convert-artifact-1031246205/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": "bb02c226-6891-4c5f-be50-f12e1147a282", "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-workflow28n8r/series-workflow28n8r-build-action-2247578073/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow28n8r[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"31f961de2f90fbf52eb2d4e15b3eeaa09f9b4fc2","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","NET_UDP_TUNNEL"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.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_tunnel_gro_rcv","udp_gro_receive","udp_tunnel_update_gro_rcv","udp4_gro_receive","udp6_gro_receive"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"31f961de2f90fbf52eb2d4e15b3eeaa09f9b4fc2","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","NET_UDP_TUNNEL"],"series_id":"f1987774-e9ec-417f-9afc-3028c43df235","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-09-07 03:34:13 +0000 UTC FinishedAt: 2026-09-07 03:34:13 +0000 UTC Input: nil Output: nil --------- Name: series-workflow28n8r[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"31f961de2f90fbf52eb2d4e15b3eeaa09f9b4fc2","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","NET_UDP_TUNNEL"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.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_tunnel_gro_rcv","udp_gro_receive","udp_tunnel_update_gro_rcv","udp4_gro_receive","udp6_gro_receive"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"31f961de2f90fbf52eb2d4e15b3eeaa09f9b4fc2","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","NET_UDP_TUNNEL"],"series_id":"f1987774-e9ec-417f-9afc-3028c43df235","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-09-07 03:34:13 +0000 UTC FinishedAt: 2026-09-07 03:34:13 +0000 UTC Input: nil Output: nil --------- Name: series-workflow28n8r[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"31f961de2f90fbf52eb2d4e15b3eeaa09f9b4fc2","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","NET_UDP_TUNNEL"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.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_tunnel_gro_rcv","udp_gro_receive","udp_tunnel_update_gro_rcv","udp4_gro_receive","udp6_gro_receive"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"31f961de2f90fbf52eb2d4e15b3eeaa09f9b4fc2","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","NET_UDP_TUNNEL"],"series_id":"f1987774-e9ec-417f-9afc-3028c43df235","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-09-07 03:34:13 +0000 UTC FinishedAt: 2026-09-07 03:35:58 +0000 UTC Input: nil Output: nil --------- Name: series-workflow28n8r[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"31f961de2f90fbf52eb2d4e15b3eeaa09f9b4fc2","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","NET_UDP_TUNNEL"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.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_tunnel_gro_rcv","udp_gro_receive","udp_tunnel_update_gro_rcv","udp4_gro_receive","udp6_gro_receive"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"31f961de2f90fbf52eb2d4e15b3eeaa09f9b4fc2","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","NET_UDP_TUNNEL"],"series_id":"f1987774-e9ec-417f-9afc-3028c43df235","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-09-07 03:34:13 +0000 UTC FinishedAt: 2026-09-07 03:35:48 +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:*bb02c226-6891-4c5f-be50-f12e1147a282,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-workflow28n8r/series-workflow28n8r-build-action-2247578073/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-workflow28n8r[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"31f961de2f90fbf52eb2d4e15b3eeaa09f9b4fc2","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","NET_UDP_TUNNEL"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.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_tunnel_gro_rcv","udp_gro_receive","udp_tunnel_update_gro_rcv","udp4_gro_receive","udp6_gro_receive"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"31f961de2f90fbf52eb2d4e15b3eeaa09f9b4fc2","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","NET_UDP_TUNNEL"],"series_id":"f1987774-e9ec-417f-9afc-3028c43df235","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-09-07 03:35:58 +0000 UTC FinishedAt: 2026-09-07 06:37:27 +0000 UTC Input: nil Output: nil --------- Name: series-workflow28n8r[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"31f961de2f90fbf52eb2d4e15b3eeaa09f9b4fc2","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","NET_UDP_TUNNEL"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.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_tunnel_gro_rcv","udp_gro_receive","udp_tunnel_update_gro_rcv","udp4_gro_receive","udp6_gro_receive"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"31f961de2f90fbf52eb2d4e15b3eeaa09f9b4fc2","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","NET_UDP_TUNNEL"],"series_id":"f1987774-e9ec-417f-9afc-3028c43df235","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-09-07 03:35:58 +0000 UTC FinishedAt: 2026-09-07 06:37:27 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:config,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["udp_tunnel_gro_rcv","udp_gro_receive","udp_tunnel_update_gro_rcv","udp4_gro_receive","udp6_gro_receive"],"skip_cover_check":false},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:track,Default:nil,Value:*KASAN,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:base-build-id,Default:nil,Value:*c066aef1-db91-40a4-aeda-dce87fc90804,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*bb02c226-6891-4c5f-be50-f12e1147a282,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-workflow28n8r/series-workflow28n8r-build-action-304453344/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-workflow28n8r/series-workflow28n8r-build-action-2247578073/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflow28n8r[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"31f961de2f90fbf52eb2d4e15b3eeaa09f9b4fc2","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","NET_UDP_TUNNEL"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.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_tunnel_gro_rcv","udp_gro_receive","udp_tunnel_update_gro_rcv","udp4_gro_receive","udp6_gro_receive"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"31f961de2f90fbf52eb2d4e15b3eeaa09f9b4fc2","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","NET_UDP_TUNNEL"],"series_id":"f1987774-e9ec-417f-9afc-3028c43df235","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-09-07 03:35:58 +0000 UTC FinishedAt: 2026-09-07 03:36:08 +0000 UTC Input: nil Output: nil --------- Name: series-workflow28n8r[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"31f961de2f90fbf52eb2d4e15b3eeaa09f9b4fc2","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","NET_UDP_TUNNEL"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.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_tunnel_gro_rcv","udp_gro_receive","udp_tunnel_update_gro_rcv","udp4_gro_receive","udp6_gro_receive"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"31f961de2f90fbf52eb2d4e15b3eeaa09f9b4fc2","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","NET_UDP_TUNNEL"],"series_id":"f1987774-e9ec-417f-9afc-3028c43df235","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-09-07 03:35:58 +0000 UTC FinishedAt: 2026-09-07 03:36:03 +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_tunnel_gro_rcv","udp_gro_receive","udp_tunnel_update_gro_rcv","udp4_gro_receive","udp6_gro_receive"],"skip_cover_check":false},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflow28n8r/series-workflow28n8r-convert-artifact-3138389762/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow28n8r[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"31f961de2f90fbf52eb2d4e15b3eeaa09f9b4fc2","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","NET_UDP_TUNNEL"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.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_tunnel_gro_rcv","udp_gro_receive","udp_tunnel_update_gro_rcv","udp4_gro_receive","udp6_gro_receive"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"31f961de2f90fbf52eb2d4e15b3eeaa09f9b4fc2","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","NET_UDP_TUNNEL"],"series_id":"f1987774-e9ec-417f-9afc-3028c43df235","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-09-07 03:35:58 +0000 UTC FinishedAt: 2026-09-07 03:35:58 +0000 UTC Input: nil Output: nil --------- Name: series-workflow28n8r[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"31f961de2f90fbf52eb2d4e15b3eeaa09f9b4fc2","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","NET_UDP_TUNNEL"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.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_tunnel_gro_rcv","udp_gro_receive","udp_tunnel_update_gro_rcv","udp4_gro_receive","udp6_gro_receive"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"31f961de2f90fbf52eb2d4e15b3eeaa09f9b4fc2","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","NET_UDP_TUNNEL"],"series_id":"f1987774-e9ec-417f-9afc-3028c43df235","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-09-07 03:35:58 +0000 UTC FinishedAt: 2026-09-07 03:35:58 +0000 UTC Input: nil Output: nil --------- Name: series-workflow28n8r[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"31f961de2f90fbf52eb2d4e15b3eeaa09f9b4fc2","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","NET_UDP_TUNNEL"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.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_tunnel_gro_rcv","udp_gro_receive","udp_tunnel_update_gro_rcv","udp4_gro_receive","udp6_gro_receive"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"31f961de2f90fbf52eb2d4e15b3eeaa09f9b4fc2","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","NET_UDP_TUNNEL"],"series_id":"f1987774-e9ec-417f-9afc-3028c43df235","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-09-07 03:35:58 +0000 UTC FinishedAt: 2026-09-07 03:35:58 +0000 UTC Input: nil Output: nil --------- Name: series-workflow28n8r[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"31f961de2f90fbf52eb2d4e15b3eeaa09f9b4fc2","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","NET_UDP_TUNNEL"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.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_tunnel_gro_rcv","udp_gro_receive","udp_tunnel_update_gro_rcv","udp4_gro_receive","udp6_gro_receive"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"31f961de2f90fbf52eb2d4e15b3eeaa09f9b4fc2","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","NET_UDP_TUNNEL"],"series_id":"f1987774-e9ec-417f-9afc-3028c43df235","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-09-07 03:36:08 +0000 UTC FinishedAt: 2026-09-07 06:37:27 +0000 UTC Input: nil Output: nil --------- Name: series-workflow28n8r[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"31f961de2f90fbf52eb2d4e15b3eeaa09f9b4fc2","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","NET_UDP_TUNNEL"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.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_tunnel_gro_rcv","udp_gro_receive","udp_tunnel_update_gro_rcv","udp4_gro_receive","udp6_gro_receive"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"31f961de2f90fbf52eb2d4e15b3eeaa09f9b4fc2","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","NET_UDP_TUNNEL"],"series_id":"f1987774-e9ec-417f-9afc-3028c43df235","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-09-07 03:36:08 +0000 UTC FinishedAt: 2026-09-07 06:37:17 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*c066aef1-db91-40a4-aeda-dce87fc90804,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*bb02c226-6891-4c5f-be50-f12e1147a282,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-workflow28n8r/series-workflow28n8r-build-action-304453344/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-workflow28n8r/series-workflow28n8r-build-action-2247578073/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-workflow28n8r/series-workflow28n8r-convert-artifact-3138389762/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,}