Name: series-workflowvd5jd Phase: Succeeded StartedAt: 2026-09-09 08:17:31 +0000 UTC FinishedAt: 2026-09-09 12:28:17 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvd5jd[0] Phase: Succeeded StartedAt: 2026-09-09 08:17:31 +0000 UTC FinishedAt: 2026-09-09 08:40:33 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvd5jd[0].run-triage Phase: Succeeded StartedAt: 2026-09-09 08:17:31 +0000 UTC FinishedAt: 2026-09-09 08:40:33 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "nf", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git", "commit_hash": "1b78070aaef63512688aebfbc82365ef9d6660f1", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "NET_ACT_CT", "NET_CLS_ACT", "NF_CONNTRACK", "NF_FLOW_TABLE" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "nf", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git", "commit_hash": "1b78070aaef63512688aebfbc82365ef9d6660f1", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "NET_ACT_CT", "NET_CLS_ACT", "NF_CONNTRACK", "NF_FLOW_TABLE" ], "series_id": "f9b031a6-1e69-4cb6-b486-01713405f2f9" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "tcf_ct_flow_table_get", "tcf_ct_init", "tcf_ct_act", "nf_flow_table_init" ], "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+CgkJCTx0ZD4yMDI2LzA5LzA5IDA4OjM4PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O05FVF9BQ1RfQ1QmIzM0OywKICAgICYjMzQ7TkVUX0NMU19BQ1QmIzM0OywKICAgICYjMzQ7TkZfQ09OTlRSQUNLJiMzNDssCiAgICAmIzM0O05GX0ZMT1dfVEFCTEUmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDt0Y2ZfY3RfZmxvd190YWJsZV9nZXQmIzM0OywKICAgICYjMzQ7dGNmX2N0X2luaXQmIzM0OywKICAgICYjMzQ7dGNmX2N0X2FjdCYjMzQ7LAogICAgJiMzNDtuZl9mbG93X3RhYmxlX2luaXQmIzM0OwogIF0sCiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCByZW9yZGVycyB0aGUgaW5pdGlhbGl6YXRpb24gb2YgdGhlIGZsb3cgdGFibGUmIzM5O3MgbmV0d29yayBuYW1lc3BhY2UgcG9pbnRlciAoYHdyaXRlX3BuZXQoXHUwMDI2Y3RfZnQtXHUwMDNlbmZfZnQubmV0LCBuZXQpYCkgc28gdGhhdCBpdCBvY2N1cnMgcHJpb3IgdG8gY2FsbGluZyBgbmZfZmxvd190YWJsZV9pbml0KFx1MDAyNmN0X2Z0LVx1MDAzZW5mX2Z0KWAuXG5cblRoZSBlbmNsb3NpbmcgYHN0cnVjdCB0Y2ZfY3RfZmxvd190YWJsZWAgKGBjdF9mdGApIGlzIGFsbG9jYXRlZCB2aWEgYGt6YWxsb2Nfb2JqYCwgZW5zdXJpbmcgYWxsIGZpZWxkcyBhbmQgcGFkZGluZyBhcmUgemVyby1pbml0aWFsaXplZC4gUHJpb3IgdG8gdGhlIGZpeCwgYWNjZXNzaW5nIGBuZl9mdC5uZXRgIGJlZm9yZSBgd3JpdGVfcG5ldGAgd291bGQgcmVhZCBhIHplcm9lZC9OVUxMIHBvaW50ZXIgKHdoaWNoIHdvdWxkIG1hbmlmZXN0IGFzIGEgTlVMTCBwb2ludGVyIGRlcmVmZXJlbmNlIG9yIGxvZ2ljYWwgZXJyb3IsIGNhdWdodCBieSBzdGFuZGFyZCBjcmFzaCBoYW5kbGVycyBhbmQgS0FTQU4pLCByYXRoZXIgdGhhbiB1bmluaXRpYWxpemVkIG1lbW9yeS5cblxuTm8gdW5pbml0aWFsaXplZCBzdGFjayBvciBoZWFwIG1lbW9yeSBpcyBpbnRyb2R1Y2VkIG9yIGV4cG9zZWQsIG5vIHVuaW5pdGlhbGl6ZWQgZmllbGRzIGFyZSByZWFkIG9yIGNvcGllZCB0byB1c2Vyc3BhY2UsIGFuZCBubyBidWZmZXIgYm91bmRzIG9yIGxlbmd0aHMgYXJlIGFmZmVjdGVkLiBIZW5jZSwgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgaXMgbm90IG5lZWRlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZml4ZXMgdGhlIGluaXRpYWxpemF0aW9uIG9yZGVyIGluIHRjZl9jdF9mbG93X3RhYmxlX2dldCgpIGJ5IHNldHRpbmcgdGhlIG5ldG5zIHBvaW50ZXIgKHdyaXRlX3BuZXQpIGJlZm9yZSBjYWxsaW5nIG5mX2Zsb3dfdGFibGVfaW5pdCgpLCBwcmV2ZW50aW5nIHBvdGVudGlhbCByYWNlcyBvciB1bmluaXRpYWxpemVkIG5ldG5zIGFjY2VzcyBkdXJpbmcgZmxvdyB0YWJsZSBpbml0aWFsaXphdGlvbi4gVGhlIGNvZGUgaXMgcGFydCBvZiB0aGUgVEMgY29ubmVjdGlvbiB0cmFja2luZyBhY3Rpb24gKGFjdF9jdCkgYW5kIGlzIHJlYWNoYWJsZSB2aWEgcnRuZXRsaW5rIHRjIGFjdGlvbiBjb21tYW5kcyBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDkgMDg6Mzg8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCA4OTRiOTFjMzg0NGM5Zjk1ZDcxM2JiZTE1MzBmNzQwOWI3MjVhM2JiXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFdlZCBTZXAgOSAwODozODozNCAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9uZXQvc2NoZWQvYWN0X2N0LmMgYi9uZXQvc2NoZWQvYWN0X2N0LmNcbmluZGV4IDkwODBjYjM4NmMxNjkuLjZiZDE5ZGI2OGQ5NzEgMTAwNjQ0XG4tLS0gYS9uZXQvc2NoZWQvYWN0X2N0LmNcbiYjNDM7JiM0MzsmIzQzOyBiL25ldC9zY2hlZC9hY3RfY3QuY1xuQEAgLTM0OSwxMCAmIzQzOzM0OSwxMCBAQCBzdGF0aWMgaW50IHRjZl9jdF9mbG93X3RhYmxlX2dldChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCB0Y2ZfY3RfcGFyYW1zICpwYXJhbXMpXG4gXHRjdF9mdC1cdTAwM2VuZl9mdC50eXBlID0gXHUwMDI2Zmxvd3RhYmxlX2N0O1xuIFx0Y3RfZnQtXHUwMDNlbmZfZnQuZmxhZ3MgfD0gTkZfRkxPV1RBQkxFX0hXX09GRkxPQUQgfFxuIFx0XHRcdCAgICAgIE5GX0ZMT1dUQUJMRV9DT1VOVEVSO1xuJiM0MztcdHdyaXRlX3BuZXQoXHUwMDI2Y3RfZnQtXHUwMDNlbmZfZnQubmV0LCBuZXQpO1xuIFx0ZXJyID0gbmZfZmxvd190YWJsZV9pbml0KFx1MDAyNmN0X2Z0LVx1MDAzZW5mX2Z0KTtcbiBcdGlmIChlcnIpXG4gXHRcdGdvdG8gZXJyX2luaXQ7XG4tXHR3cml0ZV9wbmV0KFx1MDAyNmN0X2Z0LVx1MDAzZW5mX2Z0Lm5ldCwgbmV0KTtcbiBcbiBcdF9fbW9kdWxlX2dldChUSElTX01PRFVMRSk7XG4gb3V0X3VubG9jazpcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOSAwODozODwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4xbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5jb3JlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtORVRfQUNUX0NUJiMzNDssCiAgICAmIzM0O05FVF9DTFNfQUNUJiMzNDssCiAgICAmIzM0O05GX0NPTk5UUkFDSyYjMzQ7LAogICAgJiMzNDtORl9GTE9XX1RBQkxFJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7dGNmX2N0X2Zsb3dfdGFibGVfZ2V0JiMzNDssCiAgICAmIzM0O3RjZl9jdF9pbml0JiMzNDssCiAgICAmIzM0O3RjZl9jdF9hY3QmIzM0OywKICAgICYjMzQ7bmZfZmxvd190YWJsZV9pbml0JiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGZpeGVzIHRoZSBpbml0aWFsaXphdGlvbiBvcmRlciBpbiB0Y2ZfY3RfZmxvd190YWJsZV9nZXQoKSBieSBzZXR0aW5nIHRoZSBuZXRucyBwb2ludGVyICh3cml0ZV9wbmV0KSBiZWZvcmUgY2FsbGluZyBuZl9mbG93X3RhYmxlX2luaXQoKSwgcHJldmVudGluZyBwb3RlbnRpYWwgcmFjZXMgb3IgdW5pbml0aWFsaXplZCBuZXRucyBhY2Nlc3MgZHVyaW5nIGZsb3cgdGFibGUgaW5pdGlhbGl6YXRpb24uIFRoZSBjb2RlIGlzIHBhcnQgb2YgdGhlIFRDIGNvbm5lY3Rpb24gdHJhY2tpbmcgYWN0aW9uIChhY3RfY3QpIGFuZCBpcyByZWFjaGFibGUgdmlhIHJ0bmV0bGluayB0YyBhY3Rpb24gY29tbWFuZHMgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lciBhbmQgc2VjdXJpdHkgZW5naW5lZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZXZhbHVhdGUgd2hldGhlciBpdCB3YXJyYW50cyBmdXp6aW5nIHdpdGggc3l6a2FsbGVyLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiBpbnRlcm5hbCBhc3N1bXB0aW9ucy4gWW91IG11c3QgYWN0aXZlbHkgdXNlIHlvdXIgY29kZSBhY2Nlc3MKdG9vbHMgdG8gaW5zcGVjdCB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlLCBjYWxsZXJzLCBhbmQgc3Vycm91bmRpbmcgY29udGV4dC4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjEuIENPUkUgVFJJQUdFIFBISUxPU09QSFkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KVGhlIGdvYWwgb2YgcGF0Y2ggZnV6emluZyBpcyB0byBkaXNjb3ZlciBjcmFzaGVzLCByZWdyZXNzaW9ucywgZXhwb3NlZCBsYXRlbnQgYnVncywKYW5kIG5ld2x5IHRyaWdnZXJlZCBhc3NlcnRpb25zIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIHNlcmllcy4KCi0gUkVBQ0hBQklMSVRZIElTIFRIRSBQUklNQVJZIEdBVEU6CiAgRnV6emluZyBjYW4gb25seSBkaXNjb3ZlciBidWdzIGluIGNvZGUgdGhhdCBjYW4gYWN0dWFsbHkgZXhlY3V0ZSBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZAogIGVudmlyb25tZW50cyAoR0NFIG9yIFFFTVUsIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBkZXZpY2VzIGxpa2UgVVNCIGdhZGdldHMsIG5ldGRldiwgdHVuL3RhcCkuCiAgSWYgdGhlIG1vZGlmaWVkIGNvZGUgaXMgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIChzZWUgU2VjdGlvbiAyKSwgaXQgTVVTVCBOT1QgYmUgZnV6emVkLAogIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciBpdCBhZGRzIGFzc2VydGlvbnMgb3IgY29tcGxleCBsb2dpYy4KCi0gRE8gTk9UIEJMSU5ETFkgVFJVU1QgJiMzNDtOTyBGVU5DVElPTkFMIENIQU5HRSYjMzQ7IChORkNJKSBPUiAmIzM0O1JFRkFDVE9SSU5HJiMzNDsgQ0xBSU1TOgogIFBhdGNoIGF1dGhvcnMgcm91dGluZWx5IGxhYmVsIGNoYW5nZXMgYXMgJiMzNDtjbGVhbnVwcyYjMzQ7LCAmIzM0O3JlZmFjdG9yaW5ncyYjMzQ7LCBvciBzdGF0ZQogICYjMzQ7Tm8gZnVuY3Rpb25hbCBjaGFuZ2UgaW50ZW5kZWQmIzM0Oy4gRG8gTk9UIHRha2UgdGhlc2UgY2xhaW1zIGF0IGZhY2UgdmFsdWUuCiAgQ29kZSByZWZhY3RvcmluZ3MgdGhhdCByZWFycmFuZ2UgbG9naWMsIGludHJvZHVjZSBoZWxwZXIgZnVuY3Rpb25zLCBvciBhbHRlciBzdGF0ZSBtYW5hZ2VtZW50CiAgaW4gY29yZSBzdWJzeXN0ZW1zIGZyZXF1ZW50bHkgaW50cm9kdWNlIHN1YnRsZSBzZW1hbnRpYyBzaGlmdHMgb3IgdW5jb3ZlciBsYXRlbnQga2VybmVsIGJ1Z3MuCiAgSWYgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSBpcyBtb2RpZmllZCBvciByZWZhY3RvcmVkLCBpdCBNVVNUIGJlIGZ1enplZC4KCi0gTkVXIE9SIE1PRElGSUVEIEFTU0VSVElPTlMgSU4gUkVBQ0hBQkxFIENPREUgTVVTVCBCRSBGVVpaRUQ6CiAgV2hlbiBhIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXMgcnVudGltZSBjaGVja3Mgb3IgYXNzZXJ0aW9ucyAoZS5nLiwgV0FSTl9PTiosIFZNX1dBUk5fT04qLAogIEJVR19PTiosIGxvY2tkZXBfYXNzZXJ0KikgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMsIGl0IGVuZm9yY2VzIG5ldyBvciBzdHJpY3RlciBpbnZhcmlhbnRzLgogIEV2ZW4gaWYgdGhlIGF1dGhvciBiZWxpZXZlcyB0aGUgaW52YXJpYW50IGFsd2F5cyBob2xkcywgZnV6emluZyBpcyBlc3NlbnRpYWwgdG8gdmVyaWZ5IHdoZXRoZXIKICBhbiB1bnVzdWFsIHNlcXVlbmNlIG9mIG9wZXJhdGlvbnMgY2FuIHZpb2xhdGUgaXQuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoyLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9ZmFsc2UgKE5FR0FUSVZFIENSSVRFUklBKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIE9OTFkgSUYgYWxsIG1vZGlmaWVkIGNvZGUgZmFsbHMgc3RyaWN0bHkgaW50byBvbmUgb3IgbW9yZSBvZiB0aGVzZSBjYXRlZ29yaWVzOgoKLSBOb24ta2VybmVsIGFuZCBub24tZXhlY3V0YWJsZSBjaGFuZ2VzOgogICogTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgY29tbWVudHMsIG9yIHNwZWxsaW5nIGZpeGVzLgogICogVXNlci1zcGFjZSBkaXJlY3Rvcmllcywgc2VsZi10ZXN0cywgc2FtcGxlcywgb3Igc2NyaXB0cyAoZS5nLiwgdG9vbHMvLCBzYW1wbGVzLywgc2NyaXB0cy8sIHVzci8pCiAgICB0aGF0IGRvIG5vdCBhZmZlY3QgdGhlIGNvbXBpbGVkIGtlcm5lbCBpbWFnZSAodm1saW51eCkgb3Iga2VybmVsIG1vZHVsZXMuCiAgKiBQdXJlbHkgZGVjb3JhdGl2ZSBsb2dnaW5nIChlLmcuLCBtZXNzYWdlIHN0cmluZ3MgaW4gcHJfZXJyLCBwcmludGssIGRldl9pbmZvKSBvciB0cmFjZXBvaW50cwogICAgdGhhdCBkbyBub3QgYWx0ZXIgY29udHJvbCBmbG93IG9yIGRhdGEgc3RydWN0dXJlcy4KICAqIEJ1aWxkIHN5c3RlbSBvciBLY29uZmlnIGNoYW5nZXMgdGhhdCBkbyBub3QgYWx0ZXIgY29tcGlsZWQgQyBsb2dpYy4KLSBTdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgaGFyZHdhcmU6CiAgKiBWZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2hlcywgU21hcnROSUNzLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgICBpb25pYywgYW1kZ3B1KSByZXF1aXJpbmcgcGh5c2ljYWwgQVNJQy9QQ0llIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIFVucmVhY2hhYmxlIGV4ZWN1dGlvbiBwYXRoczoKICAqIERyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKC5yZW1vdmUsIC5zaHV0ZG93biwgcGNpX3VucmVnaXN0ZXJfZHJpdmVyKSBleGVjdXRlZCBvbmx5IGR1cmluZwogICAgcGh5c2ljYWwgUENJIGhvdC11bnBsdWcgb3IgbWFudWFsIHN5c2ZzIGRyaXZlciB1bmJpbmRpbmcuCiAgKiBDb2RlIHBhdGhzIGV4Y2x1c2l2ZSB0byBhcmNoaXRlY3R1cmVzIG90aGVyIHRoYW4gdGhlIHRhcmdldCBhcmNoaXRlY3R1cmUuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQozLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9dHJ1ZSAoUE9TSVRJVkUgQ1JJVEVSSUEpCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZSB3aGVuZXZlciB0aGUgcGF0Y2ggdG91Y2hlcyByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlLCBpbmNsdWRpbmc6Ci0gQ29yZSBTdWJzeXN0ZW1zOgogICogQW55IGxvZ2ljIG1vZGlmaWNhdGlvbnMgaW4gbWVtb3J5IG1hbmFnZW1lbnQgKG1tLyksIHN5bmNocm9uaXphdGlvbi9sb2NraW5nIChrZXJuZWwvbG9ja2luZy8pLAogICAgQlBGLCBzY2hlZHVsZXIsIGNvcmUgbmV0d29ya2luZywgVkZTLCBvciBzeXNjYWxsIGhhbmRsaW5nLgotIFJlZmFjdG9yaW5ncyBhbmQgQ29kZSBDbGVhbnVwczoKICAqIEFueSByZXN0cnVjdHVyaW5nIG9mIHJlYWNoYWJsZSBkYXRhIHN0cnVjdHVyZXMsIGhlbHBlciBhYnN0cmFjdGlvbnMsIG9yIGFsZ29yaXRobSBmbG93cy4KLSBSdW50aW1lIEFzc2VydGlvbnMgYW5kIERlZmVuc2l2ZSBDaGVja3M6CiAgKiBBbnkgaW50cm9kdWN0aW9uIG9yIGFsdGVyYXRpb24gb2YgYXNzZXJ0aW9ucyAoV0FSTl9PTiosIFZNX1dBUk5fT04qLCBCVUdfT04qLCBldGMuKSBpbiByZWFjaGFibGUgcGF0aHMuCi0gUmVhY2hhYmxlIERyaXZlcnMgYW5kIFByb3RvY29sczoKICAqIERyaXZlcnMgYWNjZXNzaWJsZSB2aWEgdmlydHVhbCBidXNlcyAodmlydGlvLCBVU0IgZ2FkZ2V0LCBsb29wYmFjaywgbmV0bGluaywgYmluZGVyLCBzb2NrZXRzLCBldGMuKS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjQuIEVYVFJBQ1RJTkcgRm9jdXNTeW1ib2xzIChQUkVWRU5USU5HIERJTFVUSU9OKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpXaGVuIFdvcnRoRnV6emluZz10cnVlLCB5b3UgbXVzdCBleHRyYWN0IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgaW50byBGb2N1c1N5bWJvbHMgdG8gZ3VpZGUgdGhlIGZ1enplcjoKCi0gQVZPSUQgVUJJUVVJVE9VUyBMSUZFQ1lDTEUgSE9ULVBBVEhTOgogIERvIE5PVCBsaXN0IGdlbmVyaWMsIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhbGxlZCBieSBhbG1vc3QgZXZlcnkgcHJvZ3JhbSBpbiB0aGUgY29ycHVzCiAgKGluY2x1ZGluZywgYnV0IG5vdCBsaW1pdGVkIHRvOiBnZW5lcmFsIG1lbW9yeSBhbGxvY2F0b3JzIGFuZCBkZWFsbG9jYXRvcnMsIHBhZ2UgZmF1bHQKICBhbmQgdHJhcCBoYW5kbGVycywgb3IgY29yZSBzeW5jaHJvbml6YXRpb24gcHJpbWl0aXZlczsgdGhpcyBpcyBub3QgYW4gZXhoYXVzdGl2ZSBsaXN0KS4KICBMaXN0aW5nIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhdXNlcyB0aGUgZnV6emVyIHRvIGNsYXNzaWZ5IHRob3VzYW5kcyBvZiB1bnJlbGF0ZWQgdGVzdHMgYXMgJiMzNDtmb2N1c2VkJiMzNDssCiAgd2hpY2ggc2V2ZXJlbHkgZGlsdXRlcyBmdXp6aW5nIGVmZm9ydCBhd2F5IGZyb20gdGhlIGFjdHVhbCBjaGFuZ2VzLgoKLSBUQVJHRVQgU1BFQ0lGSUMgRkVBVFVSRSBMT0dJQyBBTkQgRU5UUllQT0lOVFM6CiAgTGlzdCBmdW5jdGlvbnMgdGhhdCBzcGVjaWZpY2FsbHkgaW1wbGVtZW50IHRoZSBsb2dpYyBiZWluZyBhZGRlZCBvciBhbHRlcmVkLCBvciBkaXJlY3QgQVBJIGVudHJ5cG9pbnRzCiAgZm9yIHRoZSBzdWJzeXN0ZW0gZmVhdHVyZSB1bmRlciByZXZpZXcuCgotIEhBTkRMSU5HIFNUQVRJQyBJTkxJTkUgRlVOQ1RJT05TIElOIEhFQURFUlMgKC5oKToKICBDb21waWxlci1pbmxpbmVkIHN0YXRpYyBmdW5jdGlvbnMgKHN1Y2ggYXMgc3RhdGljIGlubGluZXMgaW4gbW0vKi5oIG9yIGluY2x1ZGUvbGludXgvKi5oKSBsYWNrCiAgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcyBpbiB2bWxpbnV4IGFuZCBjYW5ub3QgYmUgdGFyZ2V0ZWQgZGlyZWN0bHkgYnkgc3ltYm9sIGNvdmVyYWdlIGZpbHRlcnMuCiAgSWYgdGhlIGNoYW5nZXMgYXJlIHByaW1hcmlseSBpbiBzdGF0aWMgaW5saW5lIGhlbHBlcnMsIGlkZW50aWZ5IG5vbi1zdGF0aWMsIGZlYXR1cmUtc3BlY2lmaWMgY2FsbGVyCiAgZnVuY3Rpb25zIGluIC5jIGZpbGVzIHRoYXQgZXhlcmNpc2UgdGhlbSAoYXZvaWRpbmcgdWJpcXVpdG91cyBsaWZlY3ljbGUgd3JhcHBlcnMpLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KNS4gSURFTlRJRllJTkcgRW5hYmxlQ29uZmlncwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IGNvbXBpbGUgYW5kIHJlYWNoIHRoZSBtb2RpZmllZCBjb2RlOgotIEluc3BlY3QgS2NvbmZpZyBmaWxlcyBhbmQgI2lmZGVmIGd1YXJkczsgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCi0gQ2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzIG5lZWRlZC4KLSBTdHJpcCBhbnkgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+VGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjQKCkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgODk0YjkxYzM4NDRjOWY5NWQ3MTNiYmUxNTMwZjc0MDliNzI1YTNiYgpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBXZWQgU2VwIDkgMDg6Mzg6MzQgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9uZXQvc2NoZWQvYWN0X2N0LmMgYi9uZXQvc2NoZWQvYWN0X2N0LmMKaW5kZXggOTA4MGNiMzg2YzE2OS4uNmJkMTlkYjY4ZDk3MSAxMDA2NDQKLS0tIGEvbmV0L3NjaGVkL2FjdF9jdC5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9zY2hlZC9hY3RfY3QuYwpAQCAtMzQ5LDEwICYjNDM7MzQ5LDEwIEBAIHN0YXRpYyBpbnQgdGNmX2N0X2Zsb3dfdGFibGVfZ2V0KHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHRjZl9jdF9wYXJhbXMgKnBhcmFtcykKIAljdF9mdC0mZ3Q7bmZfZnQudHlwZSA9ICZhbXA7Zmxvd3RhYmxlX2N0OwogCWN0X2Z0LSZndDtuZl9mdC5mbGFncyB8PSBORl9GTE9XVEFCTEVfSFdfT0ZGTE9BRCB8CiAJCQkgICAgICBORl9GTE9XVEFCTEVfQ09VTlRFUjsKJiM0MzsJd3JpdGVfcG5ldCgmYW1wO2N0X2Z0LSZndDtuZl9mdC5uZXQsIG5ldCk7CiAJZXJyID0gbmZfZmxvd190YWJsZV9pbml0KCZhbXA7Y3RfZnQtJmd0O25mX2Z0KTsKIAlpZiAoZXJyKQogCQlnb3RvIGVycl9pbml0OwotCXdyaXRlX3BuZXQoJmFtcDtjdF9mdC0mZ3Q7bmZfZnQubmV0LCBuZXQpOwogCiAJX19tb2R1bGVfZ2V0KFRISVNfTU9EVUxFKTsKIG91dF91bmxvY2s6CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA5IDA4OjM4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI5NDEKCQkJCQkJCW91dHB1dDogMzkKCQkJCQkJCXRob3VnaHRzOiA0MjgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIGEgS2VybmVsIFBhdGNoIGZvciBTeXprYWxsZXIgRnV6emluZyBQb3RlbnRpYWwqKgoKT2theSwgaGVyZSYjMzk7cyB0aGUgZGVhbC4gSSYjMzk7dmUgYmVlbiBhc2tlZCB0byByZXZpZXcgYSBMaW51eCBrZXJuZWwgcGF0Y2ggYW5kIGZpZ3VyZSBvdXQgaWYgaXQmIzM5O3MgYSBnb29kIGNhbmRpZGF0ZSBmb3IgZnV6emluZyB3aXRoIHN5emthbGxlci4gVGhlIHRhc2sgaXMgc3RyYWlnaHRmb3J3YXJkOiBpZGVudGlmeSByZWxldmFudCBzeW1ib2xzIGFuZCBkZXRlcm1pbmUgdGhlIG5lY2Vzc2FyeSBrZXJuZWwgY29uZmlndXJhdGlvbnMuIFRoaXMgaXMgcHJldHR5IHN0YW5kYXJkIGZvciBrZXJuZWwgZGV2ZWxvcG1lbnQgYW5kIGZ1enppbmcgdHJpYWdlIOKAkyBhIHNvcnQgb2YgZGVmZW5zaXZlIHF1YWxpdHkgYXNzdXJhbmNlLiBOb3RoaW5nIG91dCBvZiB0aGUgb3JkaW5hcnkgaGVyZTsgSSBjYW4gcHJvY2VlZCB3aXRob3V0IGFueSByZWQgZmxhZ3MuCgpMZXQmIzM5O3MgZGl2ZSBpbnRvIHRoZSBwYXRjaCBpdHNlbGYuIEkgc2VlIGEgYGRpZmZgIGZvciBgbmV0L3NjaGVkL2FjdF9jdC5jYC4gVGhlIGNoYW5nZSBpbnZvbHZlcyBtb2RpZnlpbmcgdGhlIGB0Y2ZfY3RfZmxvd190YWJsZV9nZXRgIGZ1bmN0aW9uLiBTcGVjaWZpY2FsbHksIGl0IHNlZW1zIHRvIGJlIGFkanVzdGluZyB0aGUgaW5pdGlhbGl6YXRpb24gb2Ygc29tZXRoaW5nIHJlbGF0ZWQgdG8gYSBmbG93IHRhYmxlIHdpdGhpbiB0aGUgY29ubmVjdGlvbiB0cmFja2luZyBtb2R1bGUuIExvb2tpbmcgY2xvc2VyIEkgc2VlIHRoZSBmb2xsb3dpbmcgY2hhbmdlOgoKYGBgZGlmZgomIzQzOyYjNDM7JiM0MzsgYi9uZXQvc2NoZWQvYWN0X2N0LmMKQEAgLTM0OSwxMCAmIzQzOzM0OSwxMCBAQCBzdGF0aWMgaW50IHRjZl9jdF9mbG93X3RhYmxlX2dldChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCB0Y2ZfY3RfcGFyYW1zICpwYXJhbXMpCiAJY3RfZnQtJmd0O25mX2Z0LnR5cGUgPSAmYW1wO2Zsb3d0YWJsZV9jdDsKIAljdF9mdC0mZ3Q7bmZfZnQuZmxhZ3MgfD0gTkZfRkxPV1RBQkxFX0hXX09GRkxPQUQgfAogCQkJICAgICAgTkZfRkxPV1RBQkxFX0NPVU5URVI7CiYjNDM7CXdyaXRlX3BuZXQoJmFtcDtjdF9mdC0mZ3Q7bmZfZnQubmV0LCBuZXQpOwogCWVyciA9IG5mX2Zsb3dfdGFibGVfaW5pdCgmYW1wO2N0X2Z0LSZndDtuZl9mdCk7CiAJaWYgKGVycikKIAkJZ290byBlcnJfaW5pdDsKLQl3cml0ZV9wbmV0KCZhbXA7Y3RfZnQtJmd0O25mX2Z0Lm5ldCwgbmV0KTsKYGBgCgpUaGUga2V5IGhlcmUgaXMgdGhhdCBgd3JpdGVfcG5ldGAgaXMgYmVpbmcgY2FsbGVkICpiZWZvcmUqIGBuZl9mbG93X3RhYmxlX2luaXRgLgoKVGltZSB0byBwdXQgb24gdGhlIGludmVzdGlnYXRpdmUgaGF0LiBJJiMzOTtsbCBuZWVkIHRvIGRpZyBpbnRvIGBuZXQvc2NoZWQvYWN0X2N0LmNgIGFuZCB0YWtlIGEgbG9vayBhdCB0aGUgaW1wbGVtZW50YXRpb25zIG9mIGB0Y2ZfY3RfZmxvd190YWJsZV9nZXRgIGFuZCBgbmZfZmxvd190YWJsZV9pbml0YC4gSSYjMzk7bGwgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQmIzM5O3MgaGFwcGVuaW5nIGluIHRoZXNlIGZ1bmN0aW9ucy4gU3BlY2lmaWNhbGx5LCBJIG5lZWQgdG8ga25vdyB3aHkgdGhlIGB3cml0ZV9wbmV0YCBjYWxsIHdhcyBtb3ZlZCBhbmQgd2hhdCBraW5kIG9mIHBvdGVudGlhbCBzdGF0ZSBvciBkYXRhIHJhY2VzIHRoaXMgY291bGQgdHJpZ2dlci4gSSYjMzk7bGwgdXNlIG15IHVzdWFsIHNldCBvZiB0b29scyB0byBkbyB0aGlzIOKAkyBzdGF0aWMgYW5hbHlzaXMsIGNyb3NzLXJlZmVyZW5jaW5nLCBtYXliZSBldmVuIGEgcXVpY2sgcnVuIHdpdGggYSBrZXJuZWwgZGVidWdnZXIgaWYgbmVjZXNzYXJ5LiBUaGlzIHNlZW1zIGxpa2UgYSByZWFzb25hYmxlIHBsYWNlIHRvIHN0YXJ0LCBhbmQgYmFzZWQgb24gdGhlIG5hdHVyZSBvZiB0aGUgY2hhbmdlLCBpdCYjMzk7cyBwcm9iYWJsZSB0aGF0IHRoaXMgaXMgYSBzaW1wbGUgYnVnZml4LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA5IDA4OjM4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3RjZl9jdF9mbG93X3RhYmxlX2dldCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9zY2hlZC9hY3RfY3QuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvc2NoZWQvYWN0X2N0LmM9Mjg4PXN0YXRpYyBib29sIHRjZl9jdF9mbG93X2lzX291dGRhdGVkKGNvbnN0IHN0cnVjdCBmbG93X29mZmxvYWQgKmZsb3cpXG4tLVxubmV0L3NjaGVkL2FjdF9jdC5jLTI5NS1cbm5ldC9zY2hlZC9hY3RfY3QuYzoyOTY6c3RhdGljIHZvaWQgdGNmX2N0X2Zsb3dfdGFibGVfZ2V0X3JlZihzdHJ1Y3QgdGNmX2N0X2Zsb3dfdGFibGUgKmN0X2Z0KTtcbm5ldC9zY2hlZC9hY3RfY3QuYy0yOTctXG5uZXQvc2NoZWQvYWN0X2N0LmM9Mjk4PXN0YXRpYyB2b2lkIHRjZl9jdF9uZl9nZXQoc3RydWN0IG5mX2Zsb3d0YWJsZSAqZnQpXG4tLVxubmV0L3NjaGVkL2FjdF9jdC5jLTMwMi1cbm5ldC9zY2hlZC9hY3RfY3QuYzozMDM6XHR0Y2ZfY3RfZmxvd190YWJsZV9nZXRfcmVmKGN0X2Z0KTtcbm5ldC9zY2hlZC9hY3RfY3QuYy0zMDQtfVxuLS1cbm5ldC9zY2hlZC9hY3RfY3QuYz0zMTY9c3RhdGljIHN0cnVjdCBuZl9mbG93dGFibGVfdHlwZSBmbG93dGFibGVfY3QgPSB7XG4tLVxubmV0L3NjaGVkL2FjdF9jdC5jLTMyMy1cbm5ldC9zY2hlZC9hY3RfY3QuYzozMjQ6c3RhdGljIGludCB0Y2ZfY3RfZmxvd190YWJsZV9nZXQoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgdGNmX2N0X3BhcmFtcyAqcGFyYW1zKVxubmV0L3NjaGVkL2FjdF9jdC5jLTMyNS17XG4tLVxubmV0L3NjaGVkL2FjdF9jdC5jLTM3My1cbm5ldC9zY2hlZC9hY3RfY3QuYzozNzQ6c3RhdGljIHZvaWQgdGNmX2N0X2Zsb3dfdGFibGVfZ2V0X3JlZihzdHJ1Y3QgdGNmX2N0X2Zsb3dfdGFibGUgKmN0X2Z0KVxubmV0L3NjaGVkL2FjdF9jdC5jLTM3NS17XG4tLVxubmV0L3NjaGVkL2FjdF9jdC5jPTEzNzE9c3RhdGljIGludCB0Y2ZfY3RfaW5pdChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBubGF0dHIgKm5sYSxcbi0tXG5uZXQvc2NoZWQvYWN0X2N0LmMtMTQ0My1cbm5ldC9zY2hlZC9hY3RfY3QuYzoxNDQ0Olx0ZXJyID0gdGNmX2N0X2Zsb3dfdGFibGVfZ2V0KG5ldCwgcGFyYW1zKTtcbm5ldC9zY2hlZC9hY3RfY3QuYy0xNDQ1LVx0aWYgKGVycilcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOSAwODozODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0NDg5CgkJCQkJCQlvdXRwdXQ6IDM3CgkJCQkJCQl0aG91Z2h0czogNDMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgc3VtbWFyeSwgYXMgdGhvdWdoIEkmIzM5O20gdGhpbmtpbmcgdGhyb3VnaCB0aGlzIG15c2VsZjoKCioqSW52ZXN0aWdhdGluZyB0aGUgYGFjdF9jdGAgQWN0aW9uIGluIHRoZSBMaW51eCBUcmFmZmljIENvbnRyb2wgU3lzdGVtKioKCk9rYXksIHNvIEkgbmVlZCB0byBkaWcgaW50byB0aGUgYGFjdF9jdGAgYWN0aW9uLiBMZXQmIzM5O3Mgc3RhcnQgYnkgZ2V0dGluZyBvdXIgaGFuZHMgZGlydHkgd2l0aCB0aGUgY29kZS4gTXkgaW5zdGluY3QgaXMgdG8gemVybyBpbiBvbiBgbmV0L3NjaGVkL2FjdF9jdC5jYCwgc3BlY2lmaWNhbGx5IGFyb3VuZCBsaW5lcyAzMjQgdG8gMzcwLiBUaGF0JiMzOTtzIHVzdWFsbHkgd2hlcmUgdGhlIGNvcmUgYWN0aW9uIGxvZ2ljIHJlc2lkZXMsIHJpZ2h0PyBUaW1lIHRvIHNlZSBob3cgdGhlIGNvbm5lY3Rpb24gdHJhY2tpbmcgbWFuaXB1bGF0aW9uIGlzIGFjdHVhbGx5IGltcGxlbWVudGVkLgoKVGhlbiwgSSYjMzk7bSBnb2luZyB0byBuZWVkIHRvIGZpZ3VyZSBvdXQgdGhlIGJ1aWxkIGNvbmZpZ3VyYXRpb24uIEkmIzM5O2xsIGNoZWNrIGBuZXQvc2NoZWQvS2NvbmZpZ2Agb3IgcG9zc2libHkgdGhlIE1ha2VmaWxlIHRvIGlkZW50aWZ5IHRoZSBuZWNlc3Nhcnkga2VybmVsIGNvbmZpZ3VyYXRpb25zIG5lZWRlZCB0byBlbmFibGUgYW5kIHdvcmsgd2l0aCBgYWN0X2N0YC4gSSBoYXZlIHRvIGNvbmZpcm0gdGhhdCB0aGlzIG1vZHVsZSBpcyBlbmFibGVkLiBJdCYjMzk7cyBpbXBvcnRhbnQgdG8gdW5kZXJzdGFuZCB0aGUgZGVwZW5kZW5jaWVzIGFuZCBob3cgdGhpcyBhY3Rpb24gaW50ZWdyYXRlcyBpbnRvIHRoZSBicm9hZGVyIHRyYWZmaWMgY29udHJvbCBlY29zeXN0ZW0uIFRpbWUgdG8gZ2V0IHRvIGl0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA5IDA4OjM4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L3NjaGVkL2FjdF9jdC5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMzIwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDUwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAzMjA6XHRcdC5wdXRcdFx0PSB0Y2ZfY3RfbmZfcHV0LFxuIDMyMTpcdFx0Lm93bmVyXHRcdD0gVEhJU19NT0RVTEUsXG4gMzIyOlx0fTtcbiAzMjM6XHRcbiAzMjQ6XHRzdGF0aWMgaW50IHRjZl9jdF9mbG93X3RhYmxlX2dldChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCB0Y2ZfY3RfcGFyYW1zICpwYXJhbXMpXG4gMzI1Olx0e1xuIDMyNjpcdFx0c3RydWN0IHpvbmVzX2h0X2tleSBrZXkgPSB7IC5uZXQgPSBuZXQsIC56b25lID0gcGFyYW1zLVx1MDAzZXpvbmUgfTtcbiAzMjc6XHRcdHN0cnVjdCB0Y2ZfY3RfZmxvd190YWJsZSAqY3RfZnQ7XG4gMzI4Olx0XHRpbnQgZXJyID0gLUVOT01FTTtcbiAzMjk6XHRcbiAzMzA6XHRcdG11dGV4X2xvY2soXHUwMDI2em9uZXNfbXV0ZXgpO1xuIDMzMTpcdFx0cmN1X3JlYWRfbG9jaygpO1xuIDMzMjpcdFx0Y3RfZnQgPSByaGFzaHRhYmxlX2xvb2t1cChcdTAwMjZ6b25lc19odCwgXHUwMDI2a2V5LCB6b25lc19wYXJhbXMpO1xuIDMzMzpcdFx0aWYgKGN0X2Z0IFx1MDAyNlx1MDAyNiByZWZjb3VudF9pbmNfbm90X3plcm8oXHUwMDI2Y3RfZnQtXHUwMDNlcmVmKSkge1xuIDMzNDpcdFx0XHRyY3VfcmVhZF91bmxvY2soKTtcbiAzMzU6XHRcdFx0Z290byBvdXRfdW5sb2NrO1xuIDMzNjpcdFx0fVxuIDMzNzpcdFx0cmN1X3JlYWRfdW5sb2NrKCk7XG4gMzM4Olx0XG4gMzM5Olx0XHRjdF9mdCA9IGt6YWxsb2Nfb2JqKCpjdF9mdCk7XG4gMzQwOlx0XHRpZiAoIWN0X2Z0KVxuIDM0MTpcdFx0XHRnb3RvIGVycl9hbGxvYztcbiAzNDI6XHRcdHJlZmNvdW50X3NldChcdTAwMjZjdF9mdC1cdTAwM2VyZWYsIDEpO1xuIDM0MzpcdFxuIDM0NDpcdFx0Y3RfZnQtXHUwMDNla2V5ID0ga2V5O1xuIDM0NTpcdFx0ZXJyID0gcmhhc2h0YWJsZV9pbnNlcnRfZmFzdChcdTAwMjZ6b25lc19odCwgXHUwMDI2Y3RfZnQtXHUwMDNlbm9kZSwgem9uZXNfcGFyYW1zKTtcbiAzNDY6XHRcdGlmIChlcnIpXG4gMzQ3Olx0XHRcdGdvdG8gZXJyX2luc2VydDtcbiAzNDg6XHRcbiAzNDk6XHRcdGN0X2Z0LVx1MDAzZW5mX2Z0LnR5cGUgPSBcdTAwMjZmbG93dGFibGVfY3Q7XG4gMzUwOlx0XHRjdF9mdC1cdTAwM2VuZl9mdC5mbGFncyB8PSBORl9GTE9XVEFCTEVfSFdfT0ZGTE9BRCB8XG4gMzUxOlx0XHRcdFx0ICAgICAgTkZfRkxPV1RBQkxFX0NPVU5URVI7XG4gMzUyOlx0XHR3cml0ZV9wbmV0KFx1MDAyNmN0X2Z0LVx1MDAzZW5mX2Z0Lm5ldCwgbmV0KTtcbiAzNTM6XHRcdGVyciA9IG5mX2Zsb3dfdGFibGVfaW5pdChcdTAwMjZjdF9mdC1cdTAwM2VuZl9mdCk7XG4gMzU0Olx0XHRpZiAoZXJyKVxuIDM1NTpcdFx0XHRnb3RvIGVycl9pbml0O1xuIDM1NjpcdFxuIDM1NzpcdFx0X19tb2R1bGVfZ2V0KFRISVNfTU9EVUxFKTtcbiAzNTg6XHRvdXRfdW5sb2NrOlxuIDM1OTpcdFx0cGFyYW1zLVx1MDAzZWN0X2Z0ID0gY3RfZnQ7XG4gMzYwOlx0XHRwYXJhbXMtXHUwMDNlbmZfZnQgPSBcdTAwMjZjdF9mdC1cdTAwM2VuZl9mdDtcbiAzNjE6XHRcdG11dGV4X3VubG9jayhcdTAwMjZ6b25lc19tdXRleCk7XG4gMzYyOlx0XG4gMzYzOlx0XHRyZXR1cm4gMDtcbiAzNjQ6XHRcbiAzNjU6XHRlcnJfaW5pdDpcbiAzNjY6XHRcdHJoYXNodGFibGVfcmVtb3ZlX2Zhc3QoXHUwMDI2em9uZXNfaHQsIFx1MDAyNmN0X2Z0LVx1MDAzZW5vZGUsIHpvbmVzX3BhcmFtcyk7XG4gMzY3Olx0ZXJyX2luc2VydDpcbiAzNjg6XHRcdGtmcmVlKGN0X2Z0KTtcbiAzNjk6XHRlcnJfYWxsb2M6XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDkgMDg6Mzg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNTU3MAoJCQkJCQkJb3V0cHV0OiAzMgoJCQkJCQkJdGhvdWdodHM6IDUwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLgoKKipVbmRlcnN0YW5kaW5nIHRoZSBPcmRlcmluZyBvZiBOZXRmaWx0ZXIgRmxvdyBUYWJsZSBJbml0aWFsaXphdGlvbioqCgpNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gZmlndXJlIG91dCAqd2h5KiB0aGUgYHdyaXRlX3BuZXQoJmFtcDtjdF9mdC0mZ3Q7bmZfZnQubmV0LCBuZXQpYCBjYWxsIGhhcHBlbnMgKmJlZm9yZSogdGhlIGBuZl9mbG93X3RhYmxlX2luaXRgIGZ1bmN0aW9uIGluIHRoZSBOZXRmaWx0ZXIgY29kZS4gSXQmIzM5O3MgYSBrZXkgZGV0YWlsLCBhbmQgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGltcGxpY2F0aW9ucyBvZiB0aGlzIHNwZWNpZmljIHNlcXVlbmNpbmcuIE15IGV4cGVydGlzZSB0ZWxscyBtZSB0aGF0IGluaXRpYWxpemF0aW9uIG9yZGVyIGlzICpjcml0aWNhbCogaW4gdGhlc2UgY29tcGxleCBzeXN0ZW1zLiBTb21ldGhpbmcgaXMgY2xlYXJseSByZWx5aW5nIG9uIGB3cml0ZV9wbmV0YCBiZWluZyBjb21wbGV0ZWQgcHJpb3IuCgpNeSBuZXh0IHN0ZXAgaXMgdG8gZGVsdmUgZGlyZWN0bHkgaW50byBgbmZfZmxvd190YWJsZV9pbml0YCBpdHNlbGYuIEkgbmVlZCB0byBleGFtaW5lIGl0cyBpbXBsZW1lbnRhdGlvbiB0byB1bmRlcnN0YW5kIHByZWNpc2VseSB3aGF0IHJlc291cmNlcyBpdCBleHBlY3RzIHRvIGJlIGluIHBsYWNlIG9yIGF2YWlsYWJsZSBkdXJpbmcgaXRzIGV4ZWN1dGlvbi4gSSYjMzk7bGwgYmUgbG9va2luZyBmb3IgZGVwZW5kZW5jaWVzIG9uIHRoZSBgY3RfZnQtJmd0O25mX2Z0Lm5ldGAgc3RydWN0dXJlLCB0aGUgYG5ldGAgcG9pbnRlciwgb3IgYW55IG90aGVyIHJlbGF0ZWQgZGF0YSB0aGF0IG1pZ2h0IGV4cGxhaW4gdGhpcyBvcmRlcmluZyBjb25zdHJhaW50LiBJJiMzOTtsbCBuZWVkIHRvIHNlZSBpZiBgbmZfZmxvd190YWJsZV9pbml0YCBkaXJlY3RseSB1c2VzIHRoZSBwb2ludGVyLCBvciBhbnkgZGF0YSBzdHJ1Y3R1cmVzIHRoYXQgcmVseSB1cG9uIGl0LiBUaGVuIEkgY2FuIGRldGVybWluZSBpZiBhbnkgcmVhZC93cml0ZXMgb2NjdXIgd2hpY2ggbmVjZXNzaXRhdGUgdGhlIHByaW9yIGluaXRpYWxpc2F0aW9uLiBJIGhhdmUgYSBodW5jaCBpdCB3aWxsIGJlIHRoZSBjYXNlLCBhbmQgSSBjYW4gc3RhcnQgdG8gaW5mZXIgdGhlIGRlc2lnbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOSAwODozOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtuZl9mbG93X3RhYmxlX2luaXQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfY29yZS5jPTcwMj1FWFBPUlRfU1lNQk9MX0dQTChuZl9mbG93X2RuYXRfcG9ydCk7XG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfY29yZS5jLTcwMy1cbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9jb3JlLmM6NzA0OmludCBuZl9mbG93X3RhYmxlX2luaXQoc3RydWN0IG5mX2Zsb3d0YWJsZSAqZmxvd3RhYmxlKVxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2NvcmUuYy03MDUte1xuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9jb3JlLmMtNzI1LX1cbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9jb3JlLmM6NzI2OkVYUE9SVF9TWU1CT0xfR1BMKG5mX2Zsb3dfdGFibGVfaW5pdCk7XG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfY29yZS5jLTcyNy1cbi0tXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfY29yZS5jPTc3Nz1FWFBPUlRfU1lNQk9MX0dQTChuZl9mbG93X3RhYmxlX2ZyZWUpO1xubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2NvcmUuYy03NzgtXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfY29yZS5jOjc3OTpzdGF0aWMgaW50IG5mX2Zsb3dfdGFibGVfaW5pdF9uZXQoc3RydWN0IG5ldCAqbmV0KVxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2NvcmUuYy03ODAte1xuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9jb3JlLmM9NzkwPXN0YXRpYyBpbnQgbmZfZmxvd190YWJsZV9wZXJuZXRfaW5pdChzdHJ1Y3QgbmV0ICpuZXQpXG4tLVxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2NvcmUuYy03OTMtXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfY29yZS5jOjc5NDpcdHJldCA9IG5mX2Zsb3dfdGFibGVfaW5pdF9uZXQobmV0KTtcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9jb3JlLmMtNzk1LVx0aWYgKHJldCBcdTAwM2MgMClcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfY29yZS5jLTc5Ny1cbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9jb3JlLmM6Nzk4Olx0cmV0ID0gbmZfZmxvd190YWJsZV9pbml0X3Byb2MobmV0KTtcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9jb3JlLmMtNzk5LVx0aWYgKHJldCBcdTAwM2MgMClcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfaW5ldC5jPTY4PXN0YXRpYyBzdHJ1Y3QgbmZfZmxvd3RhYmxlX3R5cGUgZmxvd3RhYmxlX2luZXQgPSB7XG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfaW5ldC5jLTY5LVx0LmZhbWlseVx0XHQ9IE5GUFJPVE9fSU5FVCxcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9pbmV0LmM6NzA6XHQuaW5pdFx0XHQ9IG5mX2Zsb3dfdGFibGVfaW5pdCxcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9pbmV0LmMtNzEtXHQuc2V0dXBcdFx0PSBuZl9mbG93X3RhYmxlX29mZmxvYWRfc2V0dXAsXG4tLVxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2luZXQuYz03OD1zdGF0aWMgc3RydWN0IG5mX2Zsb3d0YWJsZV90eXBlIGZsb3d0YWJsZV9pcHY0ID0ge1xubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2luZXQuYy03OS1cdC5mYW1pbHlcdFx0PSBORlBST1RPX0lQVjQsXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfaW5ldC5jOjgwOlx0LmluaXRcdFx0PSBuZl9mbG93X3RhYmxlX2luaXQsXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfaW5ldC5jLTgxLVx0LnNldHVwXHRcdD0gbmZfZmxvd190YWJsZV9vZmZsb2FkX3NldHVwLFxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9pbmV0LmM9ODg9c3RhdGljIHN0cnVjdCBuZl9mbG93dGFibGVfdHlwZSBmbG93dGFibGVfaXB2NiA9IHtcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9pbmV0LmMtODktXHQuZmFtaWx5XHRcdD0gTkZQUk9UT19JUFY2LFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2luZXQuYzo5MDpcdC5pbml0XHRcdD0gbmZfZmxvd190YWJsZV9pbml0LFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2luZXQuYy05MS1cdC5zZXR1cFx0XHQ9IG5mX2Zsb3dfdGFibGVfb2ZmbG9hZF9zZXR1cCxcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfcHJvY2ZzLmM9NjA9c3RhdGljIGNvbnN0IHN0cnVjdCBzZXFfb3BlcmF0aW9ucyBuZl9mbG93X3RhYmxlX2NwdV9zZXFfb3BzID0ge1xuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9wcm9jZnMuYy02Ni1cbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9wcm9jZnMuYzo2NzppbnQgbmZfZmxvd190YWJsZV9pbml0X3Byb2Moc3RydWN0IG5ldCAqbmV0KVxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX3Byb2Nmcy5jLTY4LXtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOSAwODozOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA2OTY4CgkJCQkJCQlvdXRwdXQ6IDQyCgkJCQkJCQl0aG91Z2h0czogMzAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgc3VtbWFyeSwgYXMgaWYgSSB3ZXJlIHRoaW5raW5nIHRoZXNlIHRob3VnaHRzOgoKKipEaXZpbmcgaW50byB0aGUgRmxvdyBUYWJsZSBJbml0aWFsaXphdGlvbioqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgZ2V0IGRvd24gdG8gYnJhc3MgdGFja3MuIEkgbmVlZCB0byB0YWtlIGEgbG9vayBhdCB0aGUgaW5pdGlhbGl6YXRpb24gb2YgdGhlIGZsb3cgdGFibGUuIFNwZWNpZmljYWxseSwgSSYjMzk7bSBmb2N1c2luZyBvbiBgbmZfZmxvd190YWJsZV9pbml0YCBpbiBgbmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2NvcmUuY2AuIFRoaXMgaXMgd2hlcmUgdGhlIHdob2xlIHRoaW5nIHN0YXJ0cywgdGhlIGZvdW5kYXRpb24gZm9yIHRoZSBOZXRmaWx0ZXIgZmxvdyB0YWJsZSBmdW5jdGlvbmFsaXR5LiBVbmRlcnN0YW5kaW5nIHRoaXMgZnVuY3Rpb24gaXMgY3J1Y2lhbCBmb3IgZ3Jhc3BpbmcgaG93IHRoZSB0YWJsZSBpcyBzZXQgdXAsIHdoYXQgZGF0YSBzdHJ1Y3R1cmVzIGFyZSBpbnZvbHZlZCwgYW5kIHVsdGltYXRlbHksIGhvdyBwYWNrZXRzIGFyZSBtYXRjaGVkIGFuZCBtYW5hZ2VkIHdpdGhpbiB0aGUgZmxvdyB0YWJsZS4gSSYjMzk7bSBlc3BlY2lhbGx5IGludGVyZXN0ZWQgaW4gaG93IGl0IGludGVyYWN0cyB3aXRoIHRoZSB1bmRlcmx5aW5nIGhhcmR3YXJlLCBob3cgdGhlIG1lbW9yeSBpcyBhbGxvY2F0ZWQsIGFuZCB3aGF0IGxvY2tzIGFyZSBlbXBsb3llZCB0byBrZWVwIGV2ZXJ5dGhpbmcgc3luY2hyb25pemVkLiBUaW1lIHRvIGRpZyBpbiBhbmQgc2VlIHdoYXQmIzM5O3Mgd2hhdC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDkgMDg6Mzk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfY29yZS5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNzAwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDM1Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyA3MDA6XHRcdG5mX2Zsb3dfbmF0X3BvcnQoc2tiLCB0aG9mZiwgcHJvdG9jb2wsIHBvcnQsIG5ld19wb3J0KTtcbiA3MDE6XHR9XG4gNzAyOlx0RVhQT1JUX1NZTUJPTF9HUEwobmZfZmxvd19kbmF0X3BvcnQpO1xuIDcwMzpcdFxuIDcwNDpcdGludCBuZl9mbG93X3RhYmxlX2luaXQoc3RydWN0IG5mX2Zsb3d0YWJsZSAqZmxvd3RhYmxlKVxuIDcwNTpcdHtcbiA3MDY6XHRcdGludCBlcnI7XG4gNzA3Olx0XG4gNzA4Olx0XHRJTklUX0RFTEFZRURfV09SSyhcdTAwMjZmbG93dGFibGUtXHUwMDNlZ2Nfd29yaywgbmZfZmxvd19vZmZsb2FkX3dvcmtfZ2MpO1xuIDcwOTpcdFx0Zmxvd19ibG9ja19pbml0KFx1MDAyNmZsb3d0YWJsZS1cdTAwM2VmbG93X2Jsb2NrKTtcbiA3MTA6XHRcdGluaXRfcndzZW0oXHUwMDI2Zmxvd3RhYmxlLVx1MDAzZWZsb3dfYmxvY2tfbG9jayk7XG4gNzExOlx0XG4gNzEyOlx0XHRlcnIgPSByaGFzaHRhYmxlX2luaXQoXHUwMDI2Zmxvd3RhYmxlLVx1MDAzZXJoYXNodGFibGUsXG4gNzEzOlx0XHRcdFx0ICAgICAgXHUwMDI2bmZfZmxvd19vZmZsb2FkX3JoYXNoX3BhcmFtcyk7XG4gNzE0Olx0XHRpZiAoZXJyIFx1MDAzYyAwKVxuIDcxNTpcdFx0XHRyZXR1cm4gZXJyO1xuIDcxNjpcdFxuIDcxNzpcdFx0cXVldWVfZGVsYXllZF93b3JrKHN5c3RlbV9wb3dlcl9lZmZpY2llbnRfd3EsXG4gNzE4Olx0XHRcdFx0ICAgXHUwMDI2Zmxvd3RhYmxlLVx1MDAzZWdjX3dvcmssIEhaKTtcbiA3MTk6XHRcbiA3MjA6XHRcdG11dGV4X2xvY2soXHUwMDI2Zmxvd3RhYmxlX2xvY2spO1xuIDcyMTpcdFx0bGlzdF9hZGQoXHUwMDI2Zmxvd3RhYmxlLVx1MDAzZWxpc3QsIFx1MDAyNmZsb3d0YWJsZXMpO1xuIDcyMjpcdFx0bXV0ZXhfdW5sb2NrKFx1MDAyNmZsb3d0YWJsZV9sb2NrKTtcbiA3MjM6XHRcbiA3MjQ6XHRcdHJldHVybiAwO1xuIDcyNTpcdH1cbiA3MjY6XHRFWFBPUlRfU1lNQk9MX0dQTChuZl9mbG93X3RhYmxlX2luaXQpO1xuIDcyNzpcdFxuIDcyODpcdHN0YXRpYyB2b2lkIG5mX2Zsb3dfdGFibGVfZG9fY2xlYW51cChzdHJ1Y3QgbmZfZmxvd3RhYmxlICpmbG93X3RhYmxlLFxuIDcyOTpcdFx0XHRcdFx0ICAgICBzdHJ1Y3QgZmxvd19vZmZsb2FkICpmbG93LCB2b2lkICpkYXRhKVxuIDczMDpcdHtcbiA3MzE6XHRcdHN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSBkYXRhO1xuIDczMjpcdFxuIDczMzpcdFx0aWYgKCFkZXYpIHtcbiA3MzQ6XHRcdFx0Zmxvd19vZmZsb2FkX3RlYXJkb3duKGZsb3cpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOSAwODozOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA3NzY2CgkJCQkJCQlvdXRwdXQ6IDM1CgkJCQkJCQl0aG91Z2h0czogODAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBGbG93IFRhYmxlIEluaXRpYWxpemF0aW9uKioKCk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcyBgbmZfZmxvd190YWJsZV9pbml0YCBmdW5jdGlvbi4gVGhlIGZpcnN0IHRoaW5nIHRoYXQganVtcHMgb3V0IGlzIHRoZSBgcXVldWVfZGVsYXllZF93b3JrYCBjYWxsLiBJdCBsb29rcyBsaWtlIGl0JiMzOTtzIHNjaGVkdWxpbmcgc29tZSBnYXJiYWdlIGNvbGxlY3Rpb24gd29yayB1c2luZyBgc3lzdGVtX3Bvd2VyX2VmZmljaWVudF93cWAsIHdpdGggYSBkZWxheSBvZiBvbmUgYEhaYC4gSW50ZXJlc3RpbmcuIEkgd2FudCB0byB1bmRlcnN0YW5kIGhvdyB0aGlzIGZsb3cgdGFibGUgZ2FyYmFnZSBjb2xsZWN0aW9uIGlzIGhhbmRsZWQuCgpTbywgdGhlIG5leHQgbG9naWNhbCBzdGVwIGlzIHRvIGV4YW1pbmUgd2hhdCBgbmZfZmxvd19vZmZsb2FkX3dvcmtfZ2NgIGlzIGRvaW5nLCBhcyBpdCBpcyByZWxhdGVkIHRvIHRoaXMgYGZsb3d0YWJsZWAgc3RydWN0dXJlLiBMZXQmIzM5O3MgZGlnIGludG8gYG5mX2Zsb3dfb2ZmbG9hZF93b3JrX2djYCBhbmQgc2VlIHdoYXQmIzM5O3MgaGFwcGVuaW5nLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOSAwODozOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtuZl9mbG93X29mZmxvYWRfd29ya19nYyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9jb3JlLmM9NjAyPXZvaWQgbmZfZmxvd190YWJsZV9nY19ydW4oc3RydWN0IG5mX2Zsb3d0YWJsZSAqZmxvd190YWJsZSlcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfY29yZS5jLTYwNi1cbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9jb3JlLmM6NjA3OnN0YXRpYyB2b2lkIG5mX2Zsb3dfb2ZmbG9hZF93b3JrX2djKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9jb3JlLmMtNjA4LXtcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfY29yZS5jPTcwND1pbnQgbmZfZmxvd190YWJsZV9pbml0KHN0cnVjdCBuZl9mbG93dGFibGUgKmZsb3d0YWJsZSlcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfY29yZS5jLTcwNy1cbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9jb3JlLmM6NzA4Olx0SU5JVF9ERUxBWUVEX1dPUksoXHUwMDI2Zmxvd3RhYmxlLVx1MDAzZWdjX3dvcmssIG5mX2Zsb3dfb2ZmbG9hZF93b3JrX2djKTtcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9jb3JlLmMtNzA5LVx0Zmxvd19ibG9ja19pbml0KFx1MDAyNmZsb3d0YWJsZS1cdTAwM2VmbG93X2Jsb2NrKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDkgMDg6Mzk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogODMwOQoJCQkJCQkJb3V0cHV0OiA0MgoJCQkJCQkJdGhvdWdodHM6IDE2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlIHdlIGdvLi4uCgoqKkRpdmluZyBpbnRvIGBuZl9mbG93X29mZmxvYWRfd29ya19nY2AqKgoKQWxyaWdodCwgbGV0JiMzOTtzIGdldCBkb3duIHRvIGJyYXNzIHRhY2tzLiBJIG5lZWQgdG8gdGFrZSBhIGxvb2sgYXQgYG5mX2Zsb3dfb2ZmbG9hZF93b3JrX2djYC4gU291bmRzIGxpa2Ugd2UmIzM5O3JlIHRhbGtpbmcgYWJvdXQgdGhlIGdhcmJhZ2UgY29sbGVjdGlvbiBtZWNoYW5pc20gZm9yIGZsb3cgb2ZmbG9hZCB3b3JrIGl0ZW1zLCBhbmQgdGhhdCYjMzk7cyBhIGNyaXRpY2FsIHBhcnQgb2YgbWFpbnRhaW5pbmcgcGVyZm9ybWFuY2UgYW5kIHN0YWJpbGl0eS4gSSYjMzk7bSBleHBlY3RpbmcgdGhpcyB0byBiZSB0aGUgZnVuY3Rpb24gdGhhdCBjbGVhbnMgdXAgc3RhbGUgb3IgY29tcGxldGVkIG9mZmxvYWQgZW50cmllcywgZnJlZWluZyB1cCByZXNvdXJjZXMgYW5kIHByZXZlbnRpbmcgYW55IG1lbW9yeSBsZWFrcyBvciBwZXJmb3JtYW5jZSBkZWdyYWRhdGlvbiBmcm9tIHVuY2hlY2tlZCBncm93dGguIEkmIzM5O20gaG9waW5nIHRvIHNlZSBob3cgaXQgaW50ZXJhY3RzIHdpdGggdGhlIGFnaW5nIGFuZCB0aW1lb3V0IG1lY2hhbmlzbXMg4oCTIGhvdyBhZ2dyZXNzaXZlbHkgZG9lcyBpdCByZWNsYWltIGVudHJpZXM/IERvZXMgaXQgcHJpb3JpdGl6ZSBjZXJ0YWluIHR5cGVzIG9mIGVudHJpZXMsIGxpa2UgdGhvc2UgdGhhdCBoYXZlIGJlZW4gaWRsZSB0aGUgbG9uZ2VzdCBvciB0aG9zZSBhc3NvY2lhdGVkIHdpdGggZmxvd3MgdGhhdCBoYXZlIGJlZW4gdGVybWluYXRlZD8gQW5kIGlzIHRoZXJlIGEgY2xlYXIgZGlzdGluY3Rpb24gYmV0d2VlbiB0aGUgY2xlYW51cCBwZXJmb3JtZWQgYnkgYG5mX2Zsb3dfb2ZmbG9hZF93b3JrX2djYCBhbmQgYW55IG90aGVyIHdvcmsgcXVldWUgbWFuYWdlbWVudCB3aXRoaW4gdGhlIG9mZmxvYWQgaW5mcmFzdHJ1Y3R1cmU/IEEgc29saWQgdW5kZXJzdGFuZGluZyBvZiB0aGlzIGdhcmJhZ2UgY29sbGVjdGlvbiBwcm9jZXNzIGlzIGtleSB0byBldmFsdWF0aW5nIHRoZSBvdmVyYWxsIHJvYnVzdG5lc3MgYW5kIGVmZmljaWVuY3kgb2YgdGhlIG9mZmxvYWQgc3lzdGVtLiBMZXQmIzM5O3Mgc2VlIGhvdyB0aGV5JiMzOTt2ZSBpbXBsZW1lbnRlZCBpdC4uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOSAwODozOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9jb3JlLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA2MDAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDYwMDpcdH1cbiA2MDE6XHRcbiA2MDI6XHR2b2lkIG5mX2Zsb3dfdGFibGVfZ2NfcnVuKHN0cnVjdCBuZl9mbG93dGFibGUgKmZsb3dfdGFibGUpXG4gNjAzOlx0e1xuIDYwNDpcdFx0bmZfZmxvd190YWJsZV9pdGVyYXRlKGZsb3dfdGFibGUsIG5mX2Zsb3dfb2ZmbG9hZF9nY19zdGVwLCBOVUxMKTtcbiA2MDU6XHR9XG4gNjA2Olx0XG4gNjA3Olx0c3RhdGljIHZvaWQgbmZfZmxvd19vZmZsb2FkX3dvcmtfZ2Moc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxuIDYwODpcdHtcbiA2MDk6XHRcdHN0cnVjdCBuZl9mbG93dGFibGUgKmZsb3dfdGFibGU7XG4gNjEwOlx0XG4gNjExOlx0XHRmbG93X3RhYmxlID0gY29udGFpbmVyX29mKHdvcmssIHN0cnVjdCBuZl9mbG93dGFibGUsIGdjX3dvcmsud29yayk7XG4gNjEyOlx0XHRuZl9mbG93X3RhYmxlX2djX3J1bihmbG93X3RhYmxlKTtcbiA2MTM6XHRcdHF1ZXVlX2RlbGF5ZWRfd29yayhzeXN0ZW1fcG93ZXJfZWZmaWNpZW50X3dxLCBcdTAwMjZmbG93X3RhYmxlLVx1MDAzZWdjX3dvcmssIEhaKTtcbiA2MTQ6XHR9XG4gNjE1Olx0XG4gNjE2Olx0c3RhdGljIHZvaWQgbmZfZmxvd19uYXRfcG9ydF90Y3Aoc3RydWN0IHNrX2J1ZmYgKnNrYiwgdW5zaWduZWQgaW50IHRob2ZmLFxuIDYxNzpcdFx0XHRcdFx0IF9fYmUxNiBwb3J0LCBfX2JlMTYgbmV3X3BvcnQpXG4gNjE4Olx0e1xuIDYxOTpcdFx0c3RydWN0IHRjcGhkciAqdGNwaDtcbiA2MjA6XHRcbiA2MjE6XHRcdHRjcGggPSAodm9pZCAqKShza2JfbmV0d29ya19oZWFkZXIoc2tiKSAmIzQzOyB0aG9mZik7XG4gNjIyOlx0XHRpbmV0X3Byb3RvX2NzdW1fcmVwbGFjZTIoXHUwMDI2dGNwaC1cdTAwM2VjaGVjaywgc2tiLCBwb3J0LCBuZXdfcG9ydCwgZmFsc2UpO1xuIDYyMzpcdH1cbiA2MjQ6XHRcbiA2MjU6XHRzdGF0aWMgdm9pZCBuZl9mbG93X25hdF9wb3J0X3VkcChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1bnNpZ25lZCBpbnQgdGhvZmYsXG4gNjI2Olx0XHRcdFx0XHQgX19iZTE2IHBvcnQsIF9fYmUxNiBuZXdfcG9ydClcbiA2Mjc6XHR7XG4gNjI4Olx0XHRzdHJ1Y3QgdWRwaGRyICp1ZHBoO1xuIDYyOTpcdFxuIDYzMDpcdFx0dWRwaCA9ICh2b2lkICopKHNrYl9uZXR3b3JrX2hlYWRlcihza2IpICYjNDM7IHRob2ZmKTtcbiA2MzE6XHRcdGlmICh1ZHBoLVx1MDAzZWNoZWNrIHx8IHNrYi1cdTAwM2VpcF9zdW1tZWQgPT0gQ0hFQ0tTVU1fUEFSVElBTCkge1xuIDYzMjpcdFx0XHRpbmV0X3Byb3RvX2NzdW1fcmVwbGFjZTIoXHUwMDI2dWRwaC1cdTAwM2VjaGVjaywgc2tiLCBwb3J0LFxuIDYzMzpcdFx0XHRcdFx0XHQgbmV3X3BvcnQsIGZhbHNlKTtcbiA2MzQ6XHRcdFx0aWYgKCF1ZHBoLVx1MDAzZWNoZWNrKVxuIDYzNTpcdFx0XHRcdHVkcGgtXHUwMDNlY2hlY2sgPSBDU1VNX01BTkdMRURfMDtcbiA2MzY6XHRcdH1cbiA2Mzc6XHR9XG4gNjM4Olx0XG4gNjM5Olx0c3RhdGljIHZvaWQgbmZfZmxvd19uYXRfcG9ydChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1bnNpZ25lZCBpbnQgdGhvZmYsXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA5IDA4OjM5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDkzMDAKCQkJCQkJCW91dHB1dDogMjgKCQkJCQkJCXRob3VnaHRzOiAzMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBzdW1tYXJ5LCBwcmVzZW50ZWQgYXMgYSBzdHJlYW0gb2YgdGhvdWdodDoKCioqVHJhY2luZyB0aGUgTmV0d29yayBOYW1lc3BhY2UgQ29ubmVjdGlvbioqCgpBbHJpZ2h0LCBJIG5lZWQgdG8gZmlndXJlIG91dCBob3cgdGhpcyBgZmxvd3RhYmxlLSZndDtuZXRgIGNvbm5lY3Rpb24gaXMgYmVpbmcgdXNlZCB3aXRoaW4gdGhpcyBjb2RlLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgbmV0d29yayBuYW1lc3BhY2UgY29udGV4dC4gTGV0JiMzOTtzIHNlZS4uLiBJJiMzOTtsbCBzdGFydCBieSBkb2luZyBhIHF1aWNrIGdyZXAsIG9yIG1heWJlIGEgY29kZSBzZWFyY2guIEkmIzM5O2xsIG5lZWQgdG8gbG9vayBmb3Igd2hlcmUgYGZsb3d0YWJsZS0mZ3Q7bmV0YCBpcyBkaXJlY3RseSByZWZlcmVuY2VkLCB0aGF0IHNob3VsZCBiZSBlYXN5IGVub3VnaC4gVGhlbiwgSSBzaG91bGQgYWxzbyBjaGVjayBpZiBgcmVhZF9wbmV0KCZhbXA7Zmxvd3RhYmxlLSZndDtuZXQpYCBpcyB1c2VkIGFueXdoZXJlIGJlY2F1c2UgdGhhdCBjb3VsZCBhbHNvIGJlIHJlbGV2YW50LiBKdXN0IGluIGNhc2UgaXQmIzM5O3MgYSBmaWVsZCB3aXRoIGluZGlyZWN0IGFjY2VzcywgSSYjMzk7bGwgYWxzbyBjb25maXJtIHRoYXQgdGhlIHNpbXBsZSBgZmxvd3RhYmxlLSZndDtuZXRgIGFjY2VzcyBpcyBjb3ZlcmVkLiBUaGF0IHNob3VsZCBnaXZlIG1lIGEgZ29vZCBwaWN0dXJlIG9mIGhvdyB0aGUgbmV0d29yayBuYW1lc3BhY2UgaW5mb3JtYXRpb24gZW5jYXBzdWxhdGVkIHdpdGhpbiB0aGlzIGBmbG93dGFibGVgIGlzIGJlaW5nIGFjY2Vzc2VkIGFuZCB1dGlsaXplZCB0aHJvdWdob3V0IHRoZSBjb2RlYmFzZS4gVGhlIGdvYWwgaXMgYSBjbGVhciB1bmRlcnN0YW5kaW5nIG9mIHRoZSBuZXR3b3JrIG5hbWVzcGFjZSBjb25uZWN0aW9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOSAwODozOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtuZl9mbG93dGFibGUuKm5ldCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2luZXQuYz00NT1zdGF0aWMgaW50IG5mX2Zsb3dfcnVsZV9yb3V0ZV9pbmV0KHN0cnVjdCBuZXQgKm5ldCxcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfaW5ldC5jLTY3LVxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2luZXQuYzo2ODpzdGF0aWMgc3RydWN0IG5mX2Zsb3d0YWJsZV90eXBlIGZsb3d0YWJsZV9pbmV0ID0ge1xubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2luZXQuYy02OS1cdC5mYW1pbHlcdFx0PSBORlBST1RPX0lORVQsXG4tLVxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX3Byb2Nmcy5jPTY3PWludCBuZl9mbG93X3RhYmxlX2luaXRfcHJvYyhzdHJ1Y3QgbmV0ICpuZXQpXG4tLVxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX3Byb2Nmcy5jLTcwLVxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX3Byb2Nmcy5jOjcxOlx0cGRlID0gcHJvY19jcmVhdGVfbmV0KFwmIzM0O25mX2Zsb3d0YWJsZVwmIzM0OywgMDQ0NCwgbmV0LVx1MDAzZXByb2NfbmV0X3N0YXQsXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfcHJvY2ZzLmMtNzItXHRcdFx0ICAgICAgXHUwMDI2bmZfZmxvd190YWJsZV9jcHVfc2VxX29wcyxcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfcHJvY2ZzLmM9Nzc9dm9pZCBuZl9mbG93X3RhYmxlX2ZpbmlfcHJvYyhzdHJ1Y3QgbmV0ICpuZXQpXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfcHJvY2ZzLmMtNzgte1xubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX3Byb2Nmcy5jOjc5Olx0cmVtb3ZlX3Byb2NfZW50cnkoXCYjMzQ7bmZfZmxvd3RhYmxlXCYjMzQ7LCBuZXQtXHUwMDNlcHJvY19uZXRfc3RhdCk7XG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfcHJvY2ZzLmMtODAtfVxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV94ZHAuYz0yND1zdGF0aWMgREVGSU5FX01VVEVYKG5mX3hkcF9oYXNodGFibGVfbG9jayk7XG4tLVxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX3hkcC5jLTI2LS8qIGNhbGxlciBtdXN0IGhvbGQgcmN1IHJlYWQgbG9jayAqL1xubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX3hkcC5jOjI3OnN0cnVjdCBuZl9mbG93dGFibGUgKm5mX2Zsb3d0YWJsZV9ieV9kZXYoY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKmRldilcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV94ZHAuYy0yOC17XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA5IDA4OjM5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEwMDg4CgkJCQkJCQlvdXRwdXQ6IDI2CgkJCQkJCQl0aG91Z2h0czogNDcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkludmVzdGlnYXRpbmcgTmV0d29yayBGbG93IFRhYmxlIEFjY2VzcyoqCgpSaWdodCwgc28gSSBuZWVkIHRvIGRpZyBpbnRvIGhvdyB0aGUgYHBuZXRgIHN1YnN5c3RlbSwgc3BlY2lmaWNhbGx5LCBpcyBpbnRlcmFjdGluZyB3aXRoIHRoZSBmbG93IHRhYmxlLiBNeSBpbml0aWFsIHRob3VnaHQgaXMsIGxldCYjMzk7cyBjYXN0IGEgd2lkZSBuZXQgd2l0aCB0aGUgc2VhcmNoIHRlcm1zLiBJJiMzOTttIGdvaW5nIHRvIGxvb2sgZm9yIGFueSBpbnN0YW5jZXMgd2hlcmUgYHJlYWRfcG5ldC4qbmZfZmxvd3RhYmxlYCwgYHJlYWRfcG5ldC4qZmxvd3RhYmxlYCwgb3IgZXZlbiB0aGUgc2hvcnRoYW5kIGByZWFkX3BuZXQuKmZ0YCBpcyB1c2VkIHdpdGhpbiB0aGUgYG5ldC9gIGRpcmVjdG9yeS4gVGhhdCBgLipgIGlzIGNydWNpYWw7IGl0IG5lZWRzIHRvIGJlIGZsZXhpYmxlIGVub3VnaCB0byBhY2NvdW50IGZvciBmdW5jdGlvbiBuYW1lcywgdmFyaWFibGVzIG9yIGFueSBvdGhlciByZWxhdGVkIHN0cnVjdHVyZXMgb3IgdXNhZ2UgaW4gdGhlIHNvdXJjZSBjb2RlLiBJJiMzOTttIHBhcnRpY3VsYXJseSBpbnRlcmVzdGVkIGlmIHRoZXJlIGlzIGFueSBzdHJ1Y3R1cmUgdGhhdCBoYXMgc2ltaWxhciB1c2FnZSB0aGF0IHByb3ZpZGVzIGFuIGFwcHJvcHJpYXRlIG1hdGNoLgoKVGhpcyBzaG91bGQgY2FwdHVyZSBhbnkgY29kZSBwYXRocyB0aGF0IG1pZ2h0IGJlIGRpcmVjdGx5IHJlYWRpbmcgZnJvbSBvciBhY2Nlc3NpbmcgdGhlIGZsb3cgdGFibGUgZnJvbSB0aGUgYHBuZXRgIGNvbnRleHQuIE9mIGNvdXJzZSwgSSYjMzk7bGwgYmUgbWluZGZ1bCBvZiBpbmRpcmVjdCBhY2Nlc3NlcyBhcyB3ZWxsLCBidXQgdGhpcyBpbml0aWFsIHNlYXJjaCBzaG91bGQgaGlnaGxpZ2h0IHRoZSBtb3N0IG9idmlvdXMgY2FuZGlkYXRlcyBmb3IgZnVydGhlciBhbmFseXNpcy4gQWRkaXRpb25hbGx5IEkgc2hvdWxkIGxvb2sgZm9yIHN0cnVjdHVyZXMgbGlrZSBgZmxvd3RhYmxlLSZndDtuZXRgIHRvIHNlZSBpZiB0aGVyZSBpcyBhbnkgYWx0ZXJuYXRpdmUgbWV0aG9kIG9mIGFjY2Vzcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDkgMDg6Mzk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7cmVhZF9wbmV0JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0LyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvY2VwaC9jZXBoX2NvbW1vbi5jPTEzMT1pbnQgY2VwaF9jb21wYXJlX29wdGlvbnMoc3RydWN0IGNlcGhfb3B0aW9ucyAqbmV3X29wdCxcbi0tXG5uZXQvY2VwaC9jZXBoX2NvbW1vbi5jLTE0My1cdCAqL1xubmV0L2NlcGgvY2VwaF9jb21tb24uYzoxNDQ6XHRpZiAoIW5ldF9lcShjdXJyZW50LVx1MDAzZW5zcHJveHktXHUwMDNlbmV0X25zLCByZWFkX3BuZXQoXHUwMDI2Y2xpZW50LVx1MDAzZW1zZ3IubmV0KSkpXG5uZXQvY2VwaC9jZXBoX2NvbW1vbi5jLTE0NS1cdFx0cmV0dXJuIC0xO1xuLS1cbm5ldC9jZXBoL21lc3Nlbmdlci5jPTQzNT1pbnQgY2VwaF90Y3BfY29ubmVjdChzdHJ1Y3QgY2VwaF9jb25uZWN0aW9uICpjb24pXG4tLVxubmV0L2NlcGgvbWVzc2VuZ2VyLmMtNDQ3LVx0bm9pb19mbGFnID0gbWVtYWxsb2Nfbm9pb19zYXZlKCk7XG5uZXQvY2VwaC9tZXNzZW5nZXIuYzo0NDg6XHRyZXQgPSBzb2NrX2NyZWF0ZV9rZXJuKHJlYWRfcG5ldChcdTAwMjZjb24tXHUwMDNlbXNnci1cdTAwM2VuZXQpLCBzcy5zc19mYW1pbHksXG5uZXQvY2VwaC9tZXNzZW5nZXIuYy00NDktXHRcdFx0ICAgICAgIFNPQ0tfU1RSRUFNLCBJUFBST1RPX1RDUCwgXHUwMDI2c29jayk7XG4tLVxubmV0L2NlcGgvbWVzc2VuZ2VyLmM9MTcwMD12b2lkIGNlcGhfbWVzc2VuZ2VyX2Zpbmkoc3RydWN0IGNlcGhfbWVzc2VuZ2VyICptc2dyKVxubmV0L2NlcGgvbWVzc2VuZ2VyLmMtMTcwMS17XG5uZXQvY2VwaC9tZXNzZW5nZXIuYzoxNzAyOlx0cHV0X25ldChyZWFkX3BuZXQoXHUwMDI2bXNnci1cdTAwM2VuZXQpKTtcbm5ldC9jZXBoL21lc3Nlbmdlci5jLTE3MDMtfVxuLS1cbm5ldC9kZXZsaW5rL2NvcmUuYz0yODU9c3RydWN0IG5ldCAqZGV2bGlua19uZXQoY29uc3Qgc3RydWN0IGRldmxpbmsgKmRldmxpbmspXG5uZXQvZGV2bGluay9jb3JlLmMtMjg2LXtcbm5ldC9kZXZsaW5rL2NvcmUuYzoyODc6XHRyZXR1cm4gcmVhZF9wbmV0KFx1MDAyNmRldmxpbmstXHUwMDNlX25ldCk7XG5uZXQvZGV2bGluay9jb3JlLmMtMjg4LX1cbi0tXG5uZXQvZGV2bGluay9uZXRsaW5rLmM9MTQzPWludCBkZXZsaW5rX25sX3B1dF9uZXN0ZWRfaGFuZGxlKHN0cnVjdCBza19idWZmICptc2csIHN0cnVjdCBuZXQgKm5ldCxcbi0tXG5uZXQvZGV2bGluay9uZXRsaW5rLmMtMTU1LVx0cmN1X3JlYWRfbG9jaygpO1xubmV0L2RldmxpbmsvbmV0bGluay5jOjE1NjpcdGRldmxfbmV0ID0gcmVhZF9wbmV0X3JjdShcdTAwMjZkZXZsaW5rLVx1MDAzZV9uZXQpO1xubmV0L2RldmxpbmsvbmV0bGluay5jLTE1Ny1cdGlmICghbmV0X2VxKG5ldCwgZGV2bF9uZXQpKSB7XG4tLVxubmV0L2lwdjQvaW5ldF9jb25uZWN0aW9uX3NvY2suYz03NTg9c3RydWN0IGRzdF9lbnRyeSAqaW5ldF9jc2tfcm91dGVfcmVxKGNvbnN0IHN0cnVjdCBzb2NrICpzayxcbi0tXG5uZXQvaXB2NC9pbmV0X2Nvbm5lY3Rpb25fc29jay5jLTc2Mi1cdGNvbnN0IHN0cnVjdCBpbmV0X3JlcXVlc3Rfc29jayAqaXJlcSA9IGluZXRfcnNrKHJlcSk7XG5uZXQvaXB2NC9pbmV0X2Nvbm5lY3Rpb25fc29jay5jOjc2MzpcdHN0cnVjdCBuZXQgKm5ldCA9IHJlYWRfcG5ldChcdTAwMjZpcmVxLVx1MDAzZWlyZXFfbmV0KTtcbm5ldC9pcHY0L2luZXRfY29ubmVjdGlvbl9zb2NrLmMtNzY0LVx0c3RydWN0IGlwX29wdGlvbnNfcmN1ICpvcHQ7XG4tLVxubmV0L2lwdjQvaW5ldF9jb25uZWN0aW9uX3NvY2suYz03OTM9c3RydWN0IGRzdF9lbnRyeSAqaW5ldF9jc2tfcm91dGVfY2hpbGRfc29jayhjb25zdCBzdHJ1Y3Qgc29jayAqc2ssXG4tLVxubmV0L2lwdjQvaW5ldF9jb25uZWN0aW9uX3NvY2suYy03OTctXHRjb25zdCBzdHJ1Y3QgaW5ldF9yZXF1ZXN0X3NvY2sgKmlyZXEgPSBpbmV0X3JzayhyZXEpO1xubmV0L2lwdjQvaW5ldF9jb25uZWN0aW9uX3NvY2suYzo3OTg6XHRzdHJ1Y3QgbmV0ICpuZXQgPSByZWFkX3BuZXQoXHUwMDI2aXJlcS1cdTAwM2VpcmVxX25ldCk7XG5uZXQvaXB2NC9pbmV0X2Nvbm5lY3Rpb25fc29jay5jLTc5OS1cdHN0cnVjdCBpbmV0X3NvY2sgKm5ld2luZXQgPSBpbmV0X3NrKG5ld3NrKTtcbi0tXG5uZXQvaXB2NC9pcG1yLmM9NDQyPXN0YXRpYyB2b2lkIGlwbXJfZnJlZV90YWJsZShzdHJ1Y3QgbXJfdGFibGUgKm1ydCwgc3RydWN0IGxpc3RfaGVhZCAqZGV2X2tpbGxfbGlzdClcbm5ldC9pcHY0L2lwbXIuYy00NDMte1xubmV0L2lwdjQvaXBtci5jOjQ0NDpcdHN0cnVjdCBuZXQgKm5ldCA9IHJlYWRfcG5ldChcdTAwMjZtcnQtXHUwMDNlbmV0KTtcbm5ldC9pcHY0L2lwbXIuYy00NDUtXHRMSVNUX0hFQUQoaXBtcl9kZXZfa2lsbF9saXN0KTtcbi0tXG5uZXQvaXB2NC9pcG1yLmM9Njg3PXN0YXRpYyBpbnQgdmlmX2RlbGV0ZShzdHJ1Y3QgbXJfdGFibGUgKm1ydCwgaW50IHZpZmksIGludCBub3RpZnksXG4tLVxubmV0L2lwdjQvaXBtci5jLTY4OS17XG5uZXQvaXB2NC9pcG1yLmM6NjkwOlx0c3RydWN0IG5ldCAqbmV0ID0gcmVhZF9wbmV0KFx1MDAyNm1ydC1cdTAwM2VuZXQpO1xubmV0L2lwdjQvaXBtci5jLTY5MS1cdHN0cnVjdCB2aWZfZGV2aWNlICp2O1xuLS1cbm5ldC9pcHY0L2lwbXIuYz03NTg9c3RhdGljIHZvaWQgaXBtcl9kZXN0cm95X3VucmVzKHN0cnVjdCBtcl90YWJsZSAqbXJ0LCBzdHJ1Y3QgbWZjX2NhY2hlICpjKVxubmV0L2lwdjQvaXBtci5jLTc1OS17XG5uZXQvaXB2NC9pcG1yLmM6NzYwOlx0c3RydWN0IG5ldCAqbmV0ID0gcmVhZF9wbmV0KFx1MDAyNm1ydC1cdTAwM2VuZXQpO1xubmV0L2lwdjQvaXBtci5jLTc2MS1cdHN0cnVjdCBza19idWZmICpza2I7XG4tLVxubmV0L2lwdjQvaXBtci5jPTExNDI9c3RhdGljIGludCBpcG1yX2NhY2hlX3VucmVzb2x2ZWQoc3RydWN0IG1yX3RhYmxlICptcnQsIHZpZmlfdCB2aWZpLFxuLS1cbm5ldC9pcHY0L2lwbXIuYy0xMTQ0LXtcbm5ldC9pcHY0L2lwbXIuYzoxMTQ1Olx0c3RydWN0IG5ldCAqbmV0ID0gcmVhZF9wbmV0KFx1MDAyNm1ydC1cdTAwM2VuZXQpO1xubmV0L2lwdjQvaXBtci5jLTExNDYtXHRjb25zdCBzdHJ1Y3QgaXBoZHIgKmlwaCA9IGlwX2hkcihza2IpO1xuLS1cbm5ldC9pcHY0L2lwbXIuYz0xMjIxPXN0YXRpYyBpbnQgaXBtcl9tZmNfZGVsZXRlKHN0cnVjdCBtcl90YWJsZSAqbXJ0LCBzdHJ1Y3QgbWZjY3RsICptZmMsIGludCBwYXJlbnQpXG5uZXQvaXB2NC9pcG1yLmMtMTIyMi17XG5uZXQvaXB2NC9pcG1yLmM6MTIyMzpcdHN0cnVjdCBuZXQgKm5ldCA9IHJlYWRfcG5ldChcdTAwMjZtcnQtXHUwMDNlbmV0KTtcbm5ldC9pcHY0L2lwbXIuYy0xMjI0LVx0c3RydWN0IG1mY19jYWNoZSAqYztcbi0tXG5uZXQvaXB2NC9pcG1yLmM9MTMyMj1zdGF0aWMgdm9pZCBtcm91dGVfY2xlYW5fdGFibGVzKHN0cnVjdCBtcl90YWJsZSAqbXJ0LCBpbnQgZmxhZ3MsXG4tLVxubmV0L2lwdjQvaXBtci5jLTEzMjQte1xubmV0L2lwdjQvaXBtci5jOjEzMjU6XHRzdHJ1Y3QgbmV0ICpuZXQgPSByZWFkX3BuZXQoXHUwMDI2bXJ0LVx1MDAzZW5ldCk7XG5uZXQvaXB2NC9pcG1yLmMtMTMyNi1cdHN0cnVjdCBtZmNfY2FjaGUgKmNhY2hlO1xuLS1cbm5ldC9pcHY0L2lwbXIuYz0yNTgyPXN0YXRpYyB2b2lkIG1yb3V0ZV9uZXRsaW5rX2V2ZW50KHN0cnVjdCBtcl90YWJsZSAqbXJ0LCBzdHJ1Y3QgbWZjX2NhY2hlICptZmMsXG4tLVxubmV0L2lwdjQvaXBtci5jLTI1ODQte1xubmV0L2lwdjQvaXBtci5jOjI1ODU6XHRzdHJ1Y3QgbmV0ICpuZXQgPSByZWFkX3BuZXQoXHUwMDI2bXJ0LVx1MDAzZW5ldCk7XG5uZXQvaXB2NC9pcG1yLmMtMjU4Ni1cdHN0cnVjdCBza19idWZmICpza2I7XG4tLVxubmV0L2lwdjQvaXBtci5jPTI2MjI9c3RhdGljIHZvaWQgaWdtcG1zZ19uZXRsaW5rX2V2ZW50KGNvbnN0IHN0cnVjdCBtcl90YWJsZSAqbXJ0LCBzdHJ1Y3Qgc2tfYnVmZiAqcGt0KVxubmV0L2lwdjQvaXBtci5jLTI2MjMte1xubmV0L2lwdjQvaXBtci5jOjI2MjQ6XHRzdHJ1Y3QgbmV0ICpuZXQgPSByZWFkX3BuZXQoXHUwMDI2bXJ0LVx1MDAzZW5ldCk7XG5uZXQvaXB2NC9pcG1yLmMtMjYyNS1cdHN0cnVjdCBubG1zZ2hkciAqbmxoO1xuLS1cbm5ldC9pcHY0L3RjcF90aW1lci5jPTc1Mz1ub2lubGluZV9mb3JfdHJhY2luZyB2b2lkIHRjcF9zeW5fYWNrX3RpbWVvdXQoY29uc3Qgc3RydWN0IHJlcXVlc3Rfc29jayAqcmVxKVxubmV0L2lwdjQvdGNwX3RpbWVyLmMtNzU0LXtcbm5ldC9pcHY0L3RjcF90aW1lci5jOjc1NTpcdHN0cnVjdCBuZXQgKm5ldCA9IHJlYWRfcG5ldChcdTAwMjZpbmV0X3JzayhyZXEpLVx1MDAzZWlyZXFfbmV0KTtcbm5ldC9pcHY0L3RjcF90aW1lci5jLTc1Ni1cbi0tXG5uZXQvaXB2Ni9pcDZtci5jPTQyMD1zdGF0aWMgdm9pZCBpcDZtcl9mcmVlX3RhYmxlKHN0cnVjdCBtcl90YWJsZSAqbXJ0LFxuLS1cbm5ldC9pcHY2L2lwNm1yLmMtNDIyLXtcbm5ldC9pcHY2L2lwNm1yLmM6NDIzOlx0c3RydWN0IG5ldCAqbmV0ID0gcmVhZF9wbmV0KFx1MDAyNm1ydC1cdTAwM2VuZXQpO1xubmV0L2lwdjYvaXA2bXIuYy00MjQtXHRMSVNUX0hFQUQoaXA2bXJfZGV2X2tpbGxfbGlzdCk7XG4tLVxubmV0L2lwdjYvaXA2bXIuYz03NDI9c3RhdGljIGludCBtaWY2X2RlbGV0ZShzdHJ1Y3QgbXJfdGFibGUgKm1ydCwgaW50IHZpZmksIGludCBub3RpZnksXG4tLVxubmV0L2lwdjYvaXA2bXIuYy03NTctXG5uZXQvaXB2Ni9pcDZtci5jOjc1ODpcdGNhbGxfaXA2bXJfdmlmX2VudHJ5X25vdGlmaWVycyhyZWFkX3BuZXQoXHUwMDI2bXJ0LVx1MDAzZW5ldCksXG5uZXQvaXB2Ni9pcDZtci5jLTc1OS1cdFx0XHRcdCAgICAgICBGSUJfRVZFTlRfVklGX0RFTCwgdiwgZGV2LFxuLS1cbm5ldC9pcHY2L2lwNm1yLmM9ODE1PXN0YXRpYyB2b2lkIGlwNm1yX2Rlc3Ryb3lfdW5yZXMoc3RydWN0IG1yX3RhYmxlICptcnQsIHN0cnVjdCBtZmM2X2NhY2hlICpjKVxubmV0L2lwdjYvaXA2bXIuYy04MTYte1xubmV0L2lwdjYvaXA2bXIuYzo4MTc6XHRzdHJ1Y3QgbmV0ICpuZXQgPSByZWFkX3BuZXQoXHUwMDI2bXJ0LVx1MDAzZW5ldCk7XG5uZXQvaXB2Ni9pcDZtci5jLTgxOC1cdHN0cnVjdCBza19idWZmICpza2I7XG4tLVxubmV0L2lwdjYvaXA2bXIuYz0xMTgzPXN0YXRpYyBpbnQgaXA2bXJfY2FjaGVfdW5yZXNvbHZlZChzdHJ1Y3QgbXJfdGFibGUgKm1ydCwgbWlmaV90IG1pZmksXG4tLVxubmV0L2lwdjYvaXA2bXIuYy0xMTg1LXtcbm5ldC9pcHY2L2lwNm1yLmM6MTE4NjpcdHN0cnVjdCBuZXQgKm5ldCA9IHJlYWRfcG5ldChcdTAwMjZtcnQtXHUwMDNlbmV0KTtcbm5ldC9pcHY2L2lwNm1yLmMtMTE4Ny1cdHN0cnVjdCBtZmM2X2NhY2hlICpjID0gTlVMTDtcbi0tXG5uZXQvaXB2Ni9pcDZtci5jPTEyNjc9c3RhdGljIGludCBpcDZtcl9tZmNfZGVsZXRlKHN0cnVjdCBtcl90YWJsZSAqbXJ0LCBzdHJ1Y3QgbWY2Y2N0bCAqbWZjLFxuLS1cbm5ldC9pcHY2L2lwNm1yLmMtMTI4MC1cbm5ldC9pcHY2L2lwNm1yLmM6MTI4MTpcdGNhbGxfaXA2bXJfbWZjX2VudHJ5X25vdGlmaWVycyhyZWFkX3BuZXQoXHUwMDI2bXJ0LVx1MDAzZW5ldCksXG5uZXQvaXB2Ni9pcDZtci5jLTEyODItXHRcdFx0XHQgICAgICAgRklCX0VWRU5UX0VOVFJZX0RFTCwgYywgbXJ0LVx1MDAzZWlkKTtcbi0tXG5uZXQvaXB2Ni9pcDZtci5jPTE1Njg9c3RhdGljIHZvaWQgbXJvdXRlX2NsZWFuX3RhYmxlcyhzdHJ1Y3QgbXJfdGFibGUgKm1ydCwgaW50IGZsYWdzLFxuLS1cbm5ldC9pcHY2L2lwNm1yLmMtMTU3MC17XG5uZXQvaXB2Ni9pcDZtci5jOjE1NzE6XHRzdHJ1Y3QgbmV0ICpuZXQgPSByZWFkX3BuZXQoXHUwMDI2bXJ0LVx1MDAzZW5ldCk7XG5uZXQvaXB2Ni9pcDZtci5jLTE1NzItXHRzdHJ1Y3QgbXJfbWZjICpjLCAqdG1wO1xuLS1cbm5ldC9pcHY2L2lwNm1yLmM9MjYwNz1zdGF0aWMgdm9pZCBtcjZfbmV0bGlua19ldmVudChzdHJ1Y3QgbXJfdGFibGUgKm1ydCwgc3RydWN0IG1mYzZfY2FjaGUgKm1mYyxcbi0tXG5uZXQvaXB2Ni9pcDZtci5jLTI2MDkte1xubmV0L2lwdjYvaXA2bXIuYzoyNjEwOlx0c3RydWN0IG5ldCAqbmV0ID0gcmVhZF9wbmV0KFx1MDAyNm1ydC1cdTAwM2VuZXQpO1xubmV0L2lwdjYvaXA2bXIuYy0yNjExLVx0c3RydWN0IHNrX2J1ZmYgKnNrYjtcbi0tXG5uZXQvaXB2Ni9pcDZtci5jPTI2NDc9c3RhdGljIHZvaWQgbXJ0Nm1zZ19uZXRsaW5rX2V2ZW50KGNvbnN0IHN0cnVjdCBtcl90YWJsZSAqbXJ0LCBzdHJ1Y3Qgc2tfYnVmZiAqcGt0KVxubmV0L2lwdjYvaXA2bXIuYy0yNjQ4LXtcbm5ldC9pcHY2L2lwNm1yLmM6MjY0OTpcdHN0cnVjdCBuZXQgKm5ldCA9IHJlYWRfcG5ldChcdTAwMjZtcnQtXHUwMDNlbmV0KTtcbm5ldC9pcHY2L2lwNm1yLmMtMjY1MC1cdHN0cnVjdCBubG1zZ2hkciAqbmxoO1xuLS1cbm5ldC9tcHRjcC9zeW5jb29raWVzLmM9NzE9dm9pZCBzdWJmbG93X2luaXRfcmVxX2Nvb2tpZV9qb2luX3NhdmUoY29uc3Qgc3RydWN0IG1wdGNwX3N1YmZsb3dfcmVxdWVzdF9zb2NrICpzdWJmbG93X3JlcSxcbi0tXG5uZXQvbXB0Y3Avc3luY29va2llcy5jLTczLXtcbm5ldC9tcHRjcC9zeW5jb29raWVzLmM6NzQ6XHRzdHJ1Y3QgbmV0ICpuZXQgPSByZWFkX3BuZXQoXHUwMDI2c3ViZmxvd19yZXEtXHUwMDNlc2sucmVxLmlyZXFfbmV0KTtcbm5ldC9tcHRjcC9zeW5jb29raWVzLmMtNzUtXHR1MzIgaSA9IG1wdGNwX2pvaW5fZW50cnlfaGFzaChza2IsIG5ldCk7XG4tLVxubmV0L21wdGNwL3N5bmNvb2tpZXMuYz05Mj1ib29sIG1wdGNwX3Rva2VuX2pvaW5fY29va2llX2luaXRfc3RhdGUoc3RydWN0IG1wdGNwX3N1YmZsb3dfcmVxdWVzdF9zb2NrICpzdWJmbG93X3JlcSxcbi0tXG5uZXQvbXB0Y3Avc3luY29va2llcy5jLTk0LXtcbm5ldC9tcHRjcC9zeW5jb29raWVzLmM6OTU6XHRzdHJ1Y3QgbmV0ICpuZXQgPSByZWFkX3BuZXQoXHUwMDI2c3ViZmxvd19yZXEtXHUwMDNlc2sucmVxLmlyZXFfbmV0KTtcbm5ldC9tcHRjcC9zeW5jb29raWVzLmMtOTYtXHR1MzIgaSA9IG1wdGNwX2pvaW5fZW50cnlfaGFzaChza2IsIG5ldCk7XG4tLVxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfYnJvYWRjYXN0LmM9MTk9aW50IG5mX2Nvbm50cmFja19icm9hZGNhc3RfaGVscChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2Jyb2FkY2FzdC5jLTI0LVx0Y29uc3Qgc3RydWN0IG5mX2Nvbm50cmFja19oZWxwZXIgKmhlbHBlcjtcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2Jyb2FkY2FzdC5jOjI1Olx0c3RydWN0IG5ldCAqbmV0ID0gcmVhZF9wbmV0KFx1MDAyNmN0LVx1MDAzZWN0X25ldCk7XG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19icm9hZGNhc3QuYy0yNi1cdHN0cnVjdCBuZl9jb25udHJhY2tfZXhwZWN0ICpleHA7XG4tLVxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfZXhwZWN0LmM9MTE3PW5mX2N0X2V4cF9lcXVhbChjb25zdCBzdHJ1Y3QgbmZfY29ubnRyYWNrX3R1cGxlICp0dXBsZSxcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19leHBlY3QuYy0xMjItXHRyZXR1cm4gbmZfY3RfdHVwbGVfbWFza19jbXAodHVwbGUsIFx1MDAyNmktXHUwMDNldHVwbGUsIFx1MDAyNmktXHUwMDNlbWFzaykgXHUwMDI2XHUwMDI2XG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19leHBlY3QuYzoxMjM6XHQgICAgICAgbmV0X2VxKG5ldCwgcmVhZF9wbmV0KFx1MDAyNmktXHUwMDNlbmV0KSkgXHUwMDI2XHUwMDI2XG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19leHBlY3QuYy0xMjQtXHQgICAgICAgbmZfY3RfZXhwX3pvbmVfZXF1YWxfYW55KGksIHpvbmUpO1xuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2V4cGVjdC5jPTMyND12b2lkIG5mX2N0X2V4cGVjdF9pbml0KHN0cnVjdCBuZl9jb25udHJhY2tfZXhwZWN0ICpleHAsIHVuc2lnbmVkIGludCBjbGFzcyxcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19leHBlY3QuYy0zMzEtXHRzdHJ1Y3QgbmZfY29ubiAqY3QgPSBleHAtXHUwMDNlbWFzdGVyO1xubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfZXhwZWN0LmM6MzMyOlx0c3RydWN0IG5ldCAqbmV0ID0gcmVhZF9wbmV0KFx1MDAyNmN0LVx1MDAzZWN0X25ldCk7XG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19leHBlY3QuYy0zMzMtXHRzdHJ1Y3QgbmZfY29ubnRyYWNrX2VjYWNoZSAqZWNhY2hlO1xuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX25ldGxpbmsuYz0zNTIwPWN0bmV0bGlua19hbGxvY19leHBlY3QoY29uc3Qgc3RydWN0IG5sYXR0ciAqIGNvbnN0IGNkYVtdLCBzdHJ1Y3QgbmZfY29ubiAqY3QsXG4tLVxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfbmV0bGluay5jLTM1MjQte1xubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfbmV0bGluay5jOjM1MjU6XHRzdHJ1Y3QgbmV0ICpuZXQgPSByZWFkX3BuZXQoXHUwMDI2Y3QtXHUwMDNlY3RfbmV0KTtcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX25ldGxpbmsuYy0zNTI2LVx0c3RydWN0IG5mX2Nvbm50cmFja19oZWxwZXIgKmhlbHBlcjtcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfb2ZmbG9hZC5jPTg2OD1zdGF0aWMgaW50IG5mX2Zsb3dfb2ZmbG9hZF9hbGxvYyhjb25zdCBzdHJ1Y3QgZmxvd19vZmZsb2FkX3dvcmsgKm9mZmxvYWQsXG4tLVxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX29mZmxvYWQuYy04NzAte1xubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX29mZmxvYWQuYzo4NzE6XHRzdHJ1Y3QgbmV0ICpuZXQgPSByZWFkX3BuZXQoXHUwMDI2b2ZmbG9hZC1cdTAwM2VmbG93dGFibGUtXHUwMDNlbmV0KTtcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9vZmZsb2FkLmMtODcyLVxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9vZmZsb2FkLmM9MTAzNz1zdGF0aWMgdm9pZCBmbG93X29mZmxvYWRfd29ya19oYW5kbGVyKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfb2ZmbG9hZC5jLTEwNDItXHRvZmZsb2FkID0gY29udGFpbmVyX29mKHdvcmssIHN0cnVjdCBmbG93X29mZmxvYWRfd29yaywgd29yayk7XG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfb2ZmbG9hZC5jOjEwNDM6XHRuZXQgPSByZWFkX3BuZXQoXHUwMDI2b2ZmbG9hZC1cdTAwM2VmbG93dGFibGUtXHUwMDNlbmV0KTtcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9vZmZsb2FkLmMtMTA0NC1cdHN3aXRjaCAob2ZmbG9hZC1cdTAwM2VjbWQpIHtcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfb2ZmbG9hZC5jPTEwNjU9c3RhdGljIHZvaWQgZmxvd19vZmZsb2FkX3F1ZXVlX3dvcmsoc3RydWN0IGZsb3dfb2ZmbG9hZF93b3JrICpvZmZsb2FkKVxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX29mZmxvYWQuYy0xMDY2LXtcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9vZmZsb2FkLmM6MTA2NzpcdHN0cnVjdCBuZXQgKm5ldCA9IHJlYWRfcG5ldChcdTAwMjZvZmZsb2FkLVx1MDAzZWZsb3d0YWJsZS1cdTAwM2VuZXQpO1xubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX29mZmxvYWQuYy0xMDY4LVxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jPTY4NzQ9dm9pZCBuZnRfc2V0X2VsZW1fZGVzdHJveShjb25zdCBzdHJ1Y3QgbmZ0X3NldCAqc2V0LFxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jLTY4NzgtXHRzdHJ1Y3QgbmZ0X2N0eCBjdHggPSB7XG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYzo2ODc5Olx0XHQubmV0XHQ9IHJlYWRfcG5ldChcdTAwMjZzZXQtXHUwMDNlbmV0KSxcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jLTY4ODAtXHRcdC5mYW1pbHlcdD0gc2V0LVx1MDAzZXRhYmxlLVx1MDAzZWZhbWlseSxcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYz0xMDQ5MT1zdGF0aWMgdm9pZCBuZnRfdHJhbnNfZ2NfdHJhbnNfZnJlZShzdHJ1Y3QgcmN1X2hlYWQgKnJjdSlcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYy0xMDQ5OC1cdHRyYW5zID0gY29udGFpbmVyX29mKHJjdSwgc3RydWN0IG5mdF90cmFuc19nYywgcmN1KTtcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jOjEwNDk5Olx0Y3R4Lm5ldFx0PSByZWFkX3BuZXQoXHUwMDI2dHJhbnMtXHUwMDNlc2V0LVx1MDAzZW5ldCk7XG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYy0xMDUwMC1cbi0tXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYz0xMDU1OT1zdHJ1Y3QgbmZ0X3RyYW5zX2djICpuZnRfdHJhbnNfZ2NfYWxsb2Moc3RydWN0IG5mdF9zZXQgKnNldCxcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYy0xMDU2MS17XG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYzoxMDU2MjpcdHN0cnVjdCBuZXQgKm5ldCA9IHJlYWRfcG5ldChcdTAwMjZzZXQtXHUwMDNlbmV0KTtcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jLTEwNTYzLVx0c3RydWN0IG5mdF90cmFuc19nYyAqdHJhbnM7XG4tLVxubmV0L25ldGZpbHRlci9uZnRfZHluc2V0LmM9MzA9c3RhdGljIGludCBuZnRfZHluc2V0X2V4cHJfc2V0dXAoY29uc3Qgc3RydWN0IG5mdF9keW5zZXQgKnByaXYsXG4tLVxubmV0L25ldGZpbHRlci9uZnRfZHluc2V0LmMtMzQtXHRzdHJ1Y3QgbmZ0X2N0eCBjdHggPSB7XG5uZXQvbmV0ZmlsdGVyL25mdF9keW5zZXQuYzozNTpcdFx0Lm5ldFx0PSByZWFkX3BuZXQoXHUwMDI2cHJpdi1cdTAwM2VzZXQtXHUwMDNlbmV0KSxcbm5ldC9uZXRmaWx0ZXIvbmZ0X2R5bnNldC5jLTM2LVx0XHQuZmFtaWx5XHQ9IHByaXYtXHUwMDNlc2V0LVx1MDAzZXRhYmxlLVx1MDAzZWZhbWlseSxcbi0tXG5uZXQvbmV0ZmlsdGVyL25mdF9zZXRfaGFzaC5jPTM5Mz1zdGF0aWMgYm9vbCBuZnRfcmhhc2hfZXhwcl9uZWVkc19nY19ydW4oY29uc3Qgc3RydWN0IG5mdF9zZXQgKnNldCxcbi0tXG5uZXQvbmV0ZmlsdGVyL25mdF9zZXRfaGFzaC5jLTQwMS1cdFx0aWYgKGV4cHItXHUwMDNlb3BzLVx1MDAzZWdjIFx1MDAyNlx1MDAyNlxubmV0L25ldGZpbHRlci9uZnRfc2V0X2hhc2guYzo0MDI6XHRcdCAgICBleHByLVx1MDAzZW9wcy1cdTAwM2VnYyhyZWFkX3BuZXQoXHUwMDI2c2V0LVx1MDAzZW5ldCksIGV4cHIpIFx1MDAyNlx1MDAyNlxubmV0L25ldGZpbHRlci9uZnRfc2V0X2hhc2guYy00MDMtXHRcdCAgICBzZXQtXHUwMDNlZmxhZ3MgXHUwMDI2IE5GVF9TRVRfRVZBTClcbi0tXG5uZXQvbmV0ZmlsdGVyL25mdF9zZXRfaGFzaC5jPTQxMD1zdGF0aWMgdm9pZCBuZnRfcmhhc2hfZ2Moc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZ0X3NldF9oYXNoLmMtNDIyLVx0c2V0ICA9IG5mdF9zZXRfY29udGFpbmVyX29mKHByaXYpO1xubmV0L25ldGZpbHRlci9uZnRfc2V0X2hhc2guYzo0MjM6XHRuZXQgID0gcmVhZF9wbmV0KFx1MDAyNnNldC1cdTAwM2VuZXQpO1xubmV0L25ldGZpbHRlci9uZnRfc2V0X2hhc2guYy00MjQtXHRuZnRfbmV0ID0gbmZ0X3Blcm5ldChuZXQpO1xuLS1cbm5ldC9uZXRmaWx0ZXIvbmZ0X3NldF9waXBhcG8uYz0xMjQzPXN0YXRpYyBib29sIG5mdF9waXBhcG9fdHJhbnNhY3Rpb25fbXV0ZXhfaGVsZChjb25zdCBzdHJ1Y3QgbmZ0X3NldCAqc2V0KVxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZ0X3NldF9waXBhcG8uYy0xMjQ1LSNpZmRlZiBDT05GSUdfUFJPVkVfTE9DS0lOR1xubmV0L25ldGZpbHRlci9uZnRfc2V0X3BpcGFwby5jOjEyNDY6XHRjb25zdCBzdHJ1Y3QgbmV0ICpuZXQgPSByZWFkX3BuZXQoXHUwMDI2c2V0LVx1MDAzZW5ldCk7XG5uZXQvbmV0ZmlsdGVyL25mdF9zZXRfcGlwYXBvLmMtMTI0Ny1cbi0tXG5uZXQvbmV0ZmlsdGVyL25mdF9zZXRfcGlwYXBvLmM9MTcxMD1zdGF0aWMgdm9pZCBwaXBhcG9fZ2Nfc2NhbihzdHJ1Y3QgbmZ0X3NldCAqc2V0LCBzdHJ1Y3QgbmZ0X3BpcGFwb19tYXRjaCAqbSlcbi0tXG5uZXQvbmV0ZmlsdGVyL25mdF9zZXRfcGlwYXBvLmMtMTcxMi1cdHN0cnVjdCBuZnRfcGlwYXBvICpwcml2ID0gbmZ0X3NldF9wcml2KHNldCk7XG5uZXQvbmV0ZmlsdGVyL25mdF9zZXRfcGlwYXBvLmM6MTcxMzpcdHN0cnVjdCBuZXQgKm5ldCA9IHJlYWRfcG5ldChcdTAwMjZzZXQtXHUwMDNlbmV0KTtcbm5ldC9uZXRmaWx0ZXIvbmZ0X3NldF9waXBhcG8uYy0xNzE0LVx0dW5zaWduZWQgaW50IHJ1bGVzX2YwLCBmaXJzdF9ydWxlID0gMDtcbi0tXG5uZXQvbmV0ZmlsdGVyL25mdF9zZXRfcmJ0cmVlLmM9MjEyPW5mdF9yYnRyZWVfZ2NfZWxlbShjb25zdCBzdHJ1Y3QgbmZ0X3NldCAqX19zZXQsIHN0cnVjdCBuZnRfcmJ0cmVlICpwcml2LFxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZ0X3NldF9yYnRyZWUuYy0yMTYtXHRzdHJ1Y3QgcmJfbm9kZSAqcHJldiA9IHJiX3ByZXYoXHUwMDI2cmJlLVx1MDAzZW5vZGUpO1xubmV0L25ldGZpbHRlci9uZnRfc2V0X3JidHJlZS5jOjIxNzpcdHN0cnVjdCBuZXQgKm5ldCA9IHJlYWRfcG5ldChcdTAwMjZzZXQtXHUwMDNlbmV0KTtcbm5ldC9uZXRmaWx0ZXIvbmZ0X3NldF9yYnRyZWUuYy0yMTgtXHRzdHJ1Y3QgbmZ0X3JidHJlZV9lbGVtICpyYmVfcHJldjtcbi0tXG5uZXQvbmV0ZmlsdGVyL25mdF9zZXRfcmJ0cmVlLmM9ODkxPXN0YXRpYyB2b2lkIG5mdF9yYnRyZWVfZ2Nfc2NhbihzdHJ1Y3QgbmZ0X3NldCAqc2V0KVxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZ0X3NldF9yYnRyZWUuYy04OTQtXHRzdHJ1Y3QgbmZ0X3JidHJlZV9lbGVtICpyYmUsICpyYmVfZW5kID0gTlVMTDtcbm5ldC9uZXRmaWx0ZXIvbmZ0X3NldF9yYnRyZWUuYzo4OTU6XHRzdHJ1Y3QgbmV0ICpuZXQgPSByZWFkX3BuZXQoXHUwMDI2c2V0LVx1MDAzZW5ldCk7XG5uZXQvbmV0ZmlsdGVyL25mdF9zZXRfcmJ0cmVlLmMtODk2LVx0dTY0IHRzdGFtcCA9IG5mdF9uZXRfdHN0YW1wKG5ldCk7XG4tLVxubmV0L25ldGZpbHRlci9uZnRfc2V0X3JidHJlZS5jPTEwMzg9c3RhdGljIHZvaWQgbmZ0X3JidHJlZV9jb21taXQoc3RydWN0IG5mdF9zZXQgKnNldClcbi0tXG5uZXQvbmV0ZmlsdGVyL25mdF9zZXRfcmJ0cmVlLmMtMTEwNy1cdG9sZCA9IHJjdV9yZXBsYWNlX3BvaW50ZXIocHJpdi1cdTAwM2VhcnJheSwgcHJpdi1cdTAwM2VhcnJheV9uZXh0LFxubmV0L25ldGZpbHRlci9uZnRfc2V0X3JidHJlZS5jOjExMDg6XHRcdFx0XHQgIGxvY2tkZXBfaXNfaGVsZChcdTAwMjZuZnRfcGVybmV0KHJlYWRfcG5ldChcdTAwMjZzZXQtXHUwMDNlbmV0KSktXHUwMDNlY29tbWl0X211dGV4KSk7XG5uZXQvbmV0ZmlsdGVyL25mdF9zZXRfcmJ0cmVlLmMtMTEwOS1cdHByaXYtXHUwMDNlYXJyYXlfbmV4dCA9IE5VTEw7XG4tLVxubmV0L25ldGxpbmsvYWZfbmV0bGluay5jPTQ3NT1zdGF0aWMgaW5saW5lIGludCBuZXRsaW5rX2NvbXBhcmUoc3RydWN0IHJoYXNodGFibGVfY29tcGFyZV9hcmcgKmFyZyxcbi0tXG5uZXQvbmV0bGluay9hZl9uZXRsaW5rLmMtNDgxLVx0cmV0dXJuIG5say1cdTAwM2Vwb3J0aWQgIT0geC1cdTAwM2Vwb3J0aWQgfHxcbm5ldC9uZXRsaW5rL2FmX25ldGxpbmsuYzo0ODI6XHQgICAgICAgIW5ldF9lcShzb2NrX25ldChcdTAwMjZubGstXHUwMDNlc2spLCByZWFkX3BuZXQoXHUwMDI2eC1cdTAwM2VwbmV0KSk7XG5uZXQvbmV0bGluay9hZl9uZXRsaW5rLmMtNDgzLX1cbi0tXG5uZXQvb3BlbnZzd2l0Y2gvYWN0aW9ucy5jPTgyOT1zdGF0aWMgdm9pZCBkb19vdXRwdXQoc3RydWN0IGRhdGFwYXRoICpkcCwgc3RydWN0IHNrX2J1ZmYgKnNrYiwgaW50IG91dF9wb3J0LFxuLS1cbm5ldC9vcGVudnN3aXRjaC9hY3Rpb25zLmMtODQ2LVx0XHR9IGVsc2UgaWYgKG1ydSBcdTAwM2M9IHZwb3J0LVx1MDAzZWRldi1cdTAwM2VtdHUpIHtcbm5ldC9vcGVudnN3aXRjaC9hY3Rpb25zLmM6ODQ3Olx0XHRcdHN0cnVjdCBuZXQgKm5ldCA9IHJlYWRfcG5ldChcdTAwMjZkcC1cdTAwM2VuZXQpO1xubmV0L29wZW52c3dpdGNoL2FjdGlvbnMuYy04NDgtXG4tLVxubmV0L29wZW52c3dpdGNoL2Nvbm50cmFjay5jPTU2MT1zdGF0aWMgYm9vbCBza2JfbmZjdF9jYWNoZWQoc3RydWN0IG5ldCAqbmV0LFxuLS1cbm5ldC9vcGVudnN3aXRjaC9jb25udHJhY2suYy01NzgtXG5uZXQvb3BlbnZzd2l0Y2gvY29ubnRyYWNrLmM6NTc5Olx0aWYgKCFuZXRfZXEobmV0LCByZWFkX3BuZXQoXHUwMDI2Y3QtXHUwMDNlY3RfbmV0KSkpXG5uZXQvb3BlbnZzd2l0Y2gvY29ubnRyYWNrLmMtNTgwLVx0XHRyZXR1cm4gZmFsc2U7XG4tLVxubmV0L29wZW52c3dpdGNoL2RhdGFwYXRoLmg9MjYxPXN0YXRpYyBpbmxpbmUgc3RydWN0IG5ldCAqb3ZzX2RwX2dldF9uZXQoY29uc3Qgc3RydWN0IGRhdGFwYXRoICpkcClcbm5ldC9vcGVudnN3aXRjaC9kYXRhcGF0aC5oLTI2Mi17XG5uZXQvb3BlbnZzd2l0Y2gvZGF0YXBhdGguaDoyNjM6XHRyZXR1cm4gcmVhZF9wbmV0KFx1MDAyNmRwLVx1MDAzZW5ldCk7XG5uZXQvb3BlbnZzd2l0Y2gvZGF0YXBhdGguaC0yNjQtfVxuLS1cbm5ldC9wYWNrZXQvYWZfcGFja2V0LmM9MTQ3MT1zdGF0aWMgaW50IHBhY2tldF9yY3ZfZmFub3V0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXG4tLVxubmV0L3BhY2tldC9hZl9wYWNrZXQuYy0xNDc1LVx0dW5zaWduZWQgaW50IG51bSA9IFJFQURfT05DRShmLVx1MDAzZW51bV9tZW1iZXJzKTtcbm5ldC9wYWNrZXQvYWZfcGFja2V0LmM6MTQ3NjpcdHN0cnVjdCBuZXQgKm5ldCA9IHJlYWRfcG5ldChcdTAwMjZmLVx1MDAzZW5ldCk7XG5uZXQvcGFja2V0L2FmX3BhY2tldC5jLTE0NzctXHRzdHJ1Y3QgcGFja2V0X3NvY2sgKnBvO1xuLS1cbm5ldC9wYWNrZXQvYWZfcGFja2V0LmM9MTY2Mz1zdGF0aWMgYm9vbCBfX2Zhbm91dF9pZF9pc19mcmVlKHN0cnVjdCBzb2NrICpzaywgdTE2IGNhbmRpZGF0ZV9pZClcbi0tXG5uZXQvcGFja2V0L2FmX3BhY2tldC5jLTE2NjgtXHRcdGlmIChmLVx1MDAzZWlkID09IGNhbmRpZGF0ZV9pZCBcdTAwMjZcdTAwMjZcbm5ldC9wYWNrZXQvYWZfcGFja2V0LmM6MTY2OTpcdFx0ICAgIHJlYWRfcG5ldChcdTAwMjZmLVx1MDAzZW5ldCkgPT0gc29ja19uZXQoc2spKSB7XG5uZXQvcGFja2V0L2FmX3BhY2tldC5jLTE2NzAtXHRcdFx0cmV0dXJuIGZhbHNlO1xuLS1cbm5ldC9wYWNrZXQvYWZfcGFja2V0LmM9MTY5Mz1zdGF0aWMgaW50IGZhbm91dF9hZGQoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgZmFub3V0X2FyZ3MgKmFyZ3MpXG4tLVxubmV0L3BhY2tldC9hZl9wYWNrZXQuYy0xNzUzLVx0XHRpZiAoZi1cdTAwM2VpZCA9PSBpZCBcdTAwMjZcdTAwMjZcbm5ldC9wYWNrZXQvYWZfcGFja2V0LmM6MTc1NDpcdFx0ICAgIHJlYWRfcG5ldChcdTAwMjZmLVx1MDAzZW5ldCkgPT0gc29ja19uZXQoc2spKSB7XG5uZXQvcGFja2V0L2FmX3BhY2tldC5jLTE3NTUtXHRcdFx0bWF0Y2ggPSBmO1xuLS1cbm5ldC9wYWNrZXQvYWZfcGFja2V0LmMtMTc4Ny1cdFx0bWF0Y2gtXHUwMDNlcHJvdF9ob29rLmFmX3BhY2tldF9wcml2ID0gbWF0Y2g7XG5uZXQvcGFja2V0L2FmX3BhY2tldC5jOjE3ODg6XHRcdG1hdGNoLVx1MDAzZXByb3RfaG9vay5hZl9wYWNrZXRfbmV0ID0gcmVhZF9wbmV0KFx1MDAyNm1hdGNoLVx1MDAzZW5ldCk7XG5uZXQvcGFja2V0L2FmX3BhY2tldC5jLTE3ODktXHRcdG1hdGNoLVx1MDAzZXByb3RfaG9vay5pZF9tYXRjaCA9IG1hdGNoX2Zhbm91dF9ncm91cDtcbi0tXG5uZXQvcmRzL2xvb3AuYz0yMDA9c3RhdGljIHZvaWQgcmRzX2xvb3Bfa2lsbF9jb25ucyhzdHJ1Y3QgbmV0ICpuZXQpXG4tLVxubmV0L3Jkcy9sb29wLmMtMjA2LVx0bGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKGxjLCBfbGMsIFx1MDAyNmxvb3BfY29ubnMsIGxvb3Bfbm9kZSkgIHtcbm5ldC9yZHMvbG9vcC5jOjIwNzpcdFx0c3RydWN0IG5ldCAqY19uZXQgPSByZWFkX3BuZXQoXHUwMDI2bGMtXHUwMDNlY29ubi1cdTAwM2VjX25ldCk7XG5uZXQvcmRzL2xvb3AuYy0yMDgtXG4tLVxubmV0L3Jkcy9yZHMuaD0xNzg9c3RydWN0IG5ldCAqcmRzX2Nvbm5fbmV0KHN0cnVjdCByZHNfY29ubmVjdGlvbiAqY29ubilcbm5ldC9yZHMvcmRzLmgtMTc5LXtcbm5ldC9yZHMvcmRzLmg6MTgwOlx0cmV0dXJuIHJlYWRfcG5ldChcdTAwMjZjb25uLVx1MDAzZWNfbmV0KTtcbm5ldC9yZHMvcmRzLmgtMTgxLX1cbi0tXG5uZXQvcmRzL3RjcC5jPTYyOT1zdGF0aWMgdm9pZCByZHNfdGNwX2tpbGxfc29jayhzdHJ1Y3QgbmV0ICpuZXQpXG4tLVxubmV0L3Jkcy90Y3AuYy02NDEtXHRsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUodGMsIF90YywgXHUwMDI2cmRzX3RjcF9jb25uX2xpc3QsIHRfdGNwX25vZGUpIHtcbm5ldC9yZHMvdGNwLmM6NjQyOlx0XHRzdHJ1Y3QgbmV0ICpjX25ldCA9IHJlYWRfcG5ldChcdTAwMjZ0Yy1cdTAwM2V0X2NwYXRoLVx1MDAzZWNwX2Nvbm4tXHUwMDNlY19uZXQpO1xubmV0L3Jkcy90Y3AuYy02NDMtXG4tLVxubmV0L3Jkcy90Y3AuYz02OTQ9c3RhdGljIHZvaWQgcmRzX3RjcF9zeXNjdGxfcmVzZXQoc3RydWN0IG5ldCAqbmV0KVxuLS1cbm5ldC9yZHMvdGNwLmMtNjk5LVx0bGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKHRjLCBfdGMsIFx1MDAyNnJkc190Y3BfY29ubl9saXN0LCB0X3RjcF9ub2RlKSB7XG5uZXQvcmRzL3RjcC5jOjcwMDpcdFx0c3RydWN0IG5ldCAqY19uZXQgPSByZWFkX3BuZXQoXHUwMDI2dGMtXHUwMDNldF9jcGF0aC1cdTAwM2VjcF9jb25uLVx1MDAzZWNfbmV0KTtcbm5ldC9yZHMvdGNwLmMtNzAxLVxuLS1cbm5ldC9zY2hlZC9hY3RfY3QuYz03NTI9c3RhdGljIGJvb2wgdGNmX2N0X3NrYl9uZmN0X2NhY2hlZChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBza19idWZmICpza2IsXG4tLVxubmV0L3NjaGVkL2FjdF9jdC5jLTc2MC1cdFx0cmV0dXJuIGZhbHNlO1xubmV0L3NjaGVkL2FjdF9jdC5jOjc2MTpcdGlmICghbmV0X2VxKG5ldCwgcmVhZF9wbmV0KFx1MDAyNmN0LVx1MDAzZWN0X25ldCkpKVxubmV0L3NjaGVkL2FjdF9jdC5jLTc2Mi1cdFx0Z290byBkcm9wX2N0O1xuLS1cbm5ldC9zbWMvc21jX2liLmg9NzI9c3RhdGljIGlubGluZSBzdHJ1Y3QgbmV0ICpzbWNfaWJfbmV0KHN0cnVjdCBzbWNfaWJfZGV2aWNlICpzbWNpYmRldilcbi0tXG5uZXQvc21jL3NtY19pYi5oLTc0LVx0aWYgKHNtY2liZGV2IFx1MDAyNlx1MDAyNiBzbWNpYmRldi1cdTAwM2VpYmRldilcbm5ldC9zbWMvc21jX2liLmg6NzU6XHRcdHJldHVybiByZWFkX3BuZXQoXHUwMDI2c21jaWJkZXYtXHUwMDNlaWJkZXYtXHUwMDNlY29yZWRldi5yZG1hX25ldCk7XG5uZXQvc21jL3NtY19pYi5oLTc2LVx0cmV0dXJuIE5VTEw7XG4tLVxubmV0L3hmcm0veGZybV9wb2xpY3kuYz0xNDg2PXN0YXRpYyB1MzIgeGZybV9wb2xfYmluX2tleShjb25zdCB2b2lkICpkYXRhLCB1MzIgbGVuLCB1MzIgc2VlZClcbi0tXG5uZXQveGZybS94ZnJtX3BvbGljeS5jLTE0OTAtXG5uZXQveGZybS94ZnJtX3BvbGljeS5jOjE0OTE6XHRyZXR1cm4gamhhc2hfM3dvcmRzKGEsIGstXHUwMDNlaWZfaWQsIG5ldF9oYXNoX21peChyZWFkX3BuZXQoXHUwMDI2ay1cdTAwM2VuZXQpKSxcbm5ldC94ZnJtL3hmcm1fcG9saWN5LmMtMTQ5Mi1cdFx0XHQgICAgc2VlZCk7XG4tLVxubmV0L3hmcm0veGZybV9wb2xpY3kuYz0xNTAyPXN0YXRpYyBpbnQgeGZybV9wb2xfYmluX2NtcChzdHJ1Y3Qgcmhhc2h0YWJsZV9jb21wYXJlX2FyZyAqYXJnLFxuLS1cbm5ldC94ZnJtL3hmcm1fcG9saWN5LmMtMTUwOC1cbm5ldC94ZnJtL3hmcm1fcG9saWN5LmM6MTUwOTpcdGlmICghbmV0X2VxKHJlYWRfcG5ldChcdTAwMjZiLVx1MDAzZWsubmV0KSwgcmVhZF9wbmV0KFx1MDAyNmtleS1cdTAwM2VuZXQpKSlcbm5ldC94ZnJtL3hmcm1fcG9saWN5LmMtMTUxMC1cdFx0cmV0dXJuIC0xO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOSAwODozOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxODExOAoJCQkJCQkJb3V0cHV0OiAyNwoJCQkJCQkJdGhvdWdodHM6IDQyMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIG5mX2Zsb3dfdGFibGVfb2ZmbG9hZC5jIGFuZCB0Y2ZfY3RfZmxvd190YWJsZV9nZXQgQ2hhbmdlcyoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBJJiMzOTttIGxvb2tpbmcgYXQgdGhlc2UgY2hhbmdlcyBpbiBgbmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX29mZmxvYWQuY2AgYW5kIGB0Y2ZfY3RfZmxvd190YWJsZV9nZXRgLiBJIHNlZSB0aGF0IGByZWFkX3BuZXQoJmFtcDtvZmZsb2FkLSZndDtmbG93dGFibGUtJmd0O25ldClgIGlzIHVzZWQgZHVyaW5nIG9mZmxvYWQgYW5kIHF1ZXVpbmcgb3BlcmF0aW9ucywgd2hpY2ggaXMgbXkgc3RhcnRpbmcgcG9pbnQuIFRoZSBjcnVjaWFsIHBhcnQgaXMgdGhlIGNvZGUgbW9kaWZpY2F0aW9uIHdpdGhpbiBgdGNmX2N0X2Zsb3dfdGFibGVfZ2V0YCwgc3BlY2lmaWNhbGx5IHRoZSBzaGlmdCBvZiBgd3JpdGVfcG5ldCgmYW1wO2N0X2Z0LSZndDtuZl9mdC5uZXQsIG5ldClgIGJlZm9yZSB0aGUgY2FsbCB0byBgbmZfZmxvd190YWJsZV9pbml0KCZhbXA7Y3RfZnQtJmd0O25mX2Z0KWAuCgpNeSBpbW1lZGlhdGUgcXVlc3Rpb24gaXMgKndoeSogdGhpcyByZW9yZGVyaW5nPyBXaGF0IGRvZXMgYG5mX2Zsb3dfdGFibGVfaW5pdGAgYWN0dWFsbHkgKmRvKj8gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaWYgdGhpcyBoYXMgYW55IGltcGxpY2F0aW9ucy4gRG9lcyBgbmZfZmxvd190YWJsZV9pbml0YCBvciBhbnkgZnVuY3Rpb24gaXQgY2FsbHMgdXRpbGl6ZSBgZmxvd3RhYmxlLSZndDtuZXRgPyBJZiBzbywgY291bGQgd2UgaGF2ZSBhIHBvdGVudGlhbCByYWNlIGNvbmRpdGlvbiBlbWVyZ2luZz8gSSYjMzk7bSB0aGlua2luZyBhYm91dCBjb25jdXJyZW50IHdvcms6IHRoZSBmbG93IG9mZmxvYWQgaXRzZWxmLCBnYXJiYWdlIGNvbGxlY3Rpb24sIGFuZCBuZXQgbmFtZXNwYWNlIGRlc3RydWN0aW9uLiBJIG5lZWQgdG8gbWFrZSBzdXJlIHRoaXMgcmVvcmRlcmluZyBkb2VzbiYjMzk7dCBpbnRyb2R1Y2UgYW55IHN1YnRsZSBidWdzLgoKTmV4dCBzdGVwOiBJIHdpbGwgY2hlY2sgd2hldGhlciBgbmZfZmxvd190YWJsZV9pbml0YCBpdHNlbGYgY2FsbHMgdGhlIGBmbG93dGFibGUtJmd0O3R5cGUtJmd0O2luaXRgIGZ1bmN0aW9uLCBvciBwb3RlbnRpYWxseSBvdGhlciBmdW5jdGlvbnMgdGhhdCBtaWdodCBpbnRlcmFjdCB3aXRoIGBuZXRgIG9yIG90aGVyIHNoYXJlZCByZXNvdXJjZXMuIEkgd2FudCB0byBzZWUgdGhlIGluaXRpYWxpemF0aW9uIG9yZGVyIGFuZCB3aGF0IGdldHMgaW5pdGlhbGl6ZWQgYnkgdGhlIHR5cGUgb3Igc29tZXRoaW5nLgoKRmluYWxseSwgSSB3YW50IHRvIGNvbmZpcm0gd2hhdCBjb25maWcgb3B0aW9ucyBhcmUgYXBwbGljYWJsZSB0byB0aGlzIHNlY3Rpb24gYnkgY2hlY2tpbmcgYG5ldC9zY2hlZC9LY29uZmlnYCB0byBzZWUgdGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBvZiBgYWN0X2N0LmNgLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOSAwODozOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDthY3RfY3QmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvc2NoZWQvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9zY2hlZC9LY29uZmlnPTg2NT1jb25maWcgTkVUX0FDVF9DVElORk9cbi0tXG5uZXQvc2NoZWQvS2NvbmZpZy04NzktXHQgIFRvIGNvbXBpbGUgdGhpcyBjb2RlIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGVcbm5ldC9zY2hlZC9LY29uZmlnOjg4MDpcdCAgbW9kdWxlIHdpbGwgYmUgY2FsbGVkIGFjdF9jdGluZm8uXG5uZXQvc2NoZWQvS2NvbmZpZy04ODEtXG4tLVxubmV0L3NjaGVkL0tjb25maWc9OTE3PWNvbmZpZyBORVRfQUNUX0NUXG4tLVxubmV0L3NjaGVkL0tjb25maWctOTI3LVx0ICBUbyBjb21waWxlIHRoaXMgY29kZSBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlXG5uZXQvc2NoZWQvS2NvbmZpZzo5Mjg6XHQgIG1vZHVsZSB3aWxsIGJlIGNhbGxlZCBhY3RfY3QuXG5uZXQvc2NoZWQvS2NvbmZpZy05MjktXG4tLVxubmV0L3NjaGVkL01ha2VmaWxlPTI0PW9iai0kKENPTkZJR19ORVRfQUNUX0NPTk5NQVJLKVx0JiM0Mzs9IGFjdF9jb25ubWFyay5vXG5uZXQvc2NoZWQvTWFrZWZpbGU6MjU6b2JqLSQoQ09ORklHX05FVF9BQ1RfQ1RJTkZPKVx0JiM0Mzs9IGFjdF9jdGluZm8ub1xubmV0L3NjaGVkL01ha2VmaWxlLTI2LW9iai0kKENPTkZJR19ORVRfQUNUX1NLQk1PRClcdCYjNDM7PSBhY3Rfc2tibW9kLm9cbi0tXG5uZXQvc2NoZWQvTWFrZWZpbGU9MzE9b2JqLSQoQ09ORklHX05FVF9BQ1RfVFVOTkVMX0tFWSkmIzQzOz0gYWN0X3R1bm5lbF9rZXkub1xubmV0L3NjaGVkL01ha2VmaWxlOjMyOm9iai0kKENPTkZJR19ORVRfQUNUX0NUKVx0JiM0Mzs9IGFjdF9jdC5vXG5uZXQvc2NoZWQvTWFrZWZpbGUtMzMtb2JqLSQoQ09ORklHX05FVF9BQ1RfR0FURSlcdCYjNDM7PSBhY3RfZ2F0ZS5vXG4tLVxubmV0L3NjaGVkL2FjdF9jdC5jLTItLyogLVxubmV0L3NjaGVkL2FjdF9jdC5jOjM6ICogbmV0L3NjaGVkL2FjdF9jdC5jICBDb25uZWN0aW9uIFRyYWNraW5nIGFjdGlvblxubmV0L3NjaGVkL2FjdF9jdC5jLTQtICpcbi0tXG5uZXQvc2NoZWQvYWN0X2N0LmMtMzctI2luY2x1ZGUgXHUwMDNjbmV0L25ldGZpbHRlci9pcHY2L25mX2RlZnJhZ19pcHY2LmhcdTAwM2Vcbm5ldC9zY2hlZC9hY3RfY3QuYzozODojaW5jbHVkZSBcdTAwM2NuZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19hY3RfY3QuaFx1MDAzZVxubmV0L3NjaGVkL2FjdF9jdC5jLTM5LSNpbmNsdWRlIFx1MDAzY25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3NlcWFkai5oXHUwMDNlXG4tLVxubmV0L3NjaGVkL2FjdF9jdC5jLTQxLVxubmV0L3NjaGVkL2FjdF9jdC5jOjQyOnN0YXRpYyBzdHJ1Y3Qgd29ya3F1ZXVlX3N0cnVjdCAqYWN0X2N0X3dxO1xubmV0L3NjaGVkL2FjdF9jdC5jLTQzLXN0YXRpYyBzdHJ1Y3Qgcmhhc2h0YWJsZSB6b25lc19odDtcbi0tXG5uZXQvc2NoZWQvYWN0X2N0LmM9MTc4PXN0YXRpYyB2b2lkIHRjZl9jdF9mbG93X3RhYmxlX2FkZF9hY3Rpb25fbWV0YShzdHJ1Y3QgbmZfY29ubiAqY3QsXG4tLVxubmV0L3NjaGVkL2FjdF9jdC5jLTE4NC1cdHN0cnVjdCBmbG93X2FjdGlvbl9lbnRyeSAqZW50cnk7XG5uZXQvc2NoZWQvYWN0X2N0LmM6MTg1Olx0dTMyICphY3RfY3RfbGFiZWxzO1xubmV0L3NjaGVkL2FjdF9jdC5jLTE4Ni1cbi0tXG5uZXQvc2NoZWQvYWN0X2N0LmMtMTk1LVxubmV0L3NjaGVkL2FjdF9jdC5jOjE5NjpcdGFjdF9jdF9sYWJlbHMgPSBlbnRyeS1cdTAwM2VjdF9tZXRhZGF0YS5sYWJlbHM7XG5uZXQvc2NoZWQvYWN0X2N0LmMtMTk3LVx0Y3RfbGFiZWxzID0gbmZfY3RfbGFiZWxzX2ZpbmQoY3QpO1xubmV0L3NjaGVkL2FjdF9jdC5jLTE5OC1cdGlmIChjdF9sYWJlbHMpXG5uZXQvc2NoZWQvYWN0X2N0LmM6MTk5Olx0XHRtZW1jcHkoYWN0X2N0X2xhYmVscywgY3RfbGFiZWxzLVx1MDAzZWJpdHMsIE5GX0NUX0xBQkVMU19NQVhfU0laRSk7XG5uZXQvc2NoZWQvYWN0X2N0LmMtMjAwLVx0ZWxzZVxubmV0L3NjaGVkL2FjdF9jdC5jOjIwMTpcdFx0bWVtc2V0KGFjdF9jdF9sYWJlbHMsIDAsIE5GX0NUX0xBQkVMU19NQVhfU0laRSk7XG5uZXQvc2NoZWQvYWN0X2N0LmMtMjAyLX1cbi0tXG5uZXQvc2NoZWQvYWN0X2N0LmM9Mzk3PXN0YXRpYyB2b2lkIHRjZl9jdF9mbG93X3RhYmxlX3B1dChzdHJ1Y3QgdGNmX2N0X2Zsb3dfdGFibGUgKmN0X2Z0KVxuLS1cbm5ldC9zY2hlZC9hY3RfY3QuYy00MDEtXHRcdElOSVRfUkNVX1dPUksoXHUwMDI2Y3RfZnQtXHUwMDNlcndvcmssIHRjZl9jdF9mbG93X3RhYmxlX2NsZWFudXBfd29yayk7XG5uZXQvc2NoZWQvYWN0X2N0LmM6NDAyOlx0XHRxdWV1ZV9yY3Vfd29yayhhY3RfY3Rfd3EsIFx1MDAyNmN0X2Z0LVx1MDAzZXJ3b3JrKTtcbm5ldC9zY2hlZC9hY3RfY3QuYy00MDMtXHR9XG4tLVxubmV0L3NjaGVkL2FjdF9jdC5jPTQwNj1zdGF0aWMgdm9pZCB0Y2ZfY3RfZmxvd190Y19pZmlkeChzdHJ1Y3QgZmxvd19vZmZsb2FkICplbnRyeSxcbm5ldC9zY2hlZC9hY3RfY3QuYzo0MDc6XHRcdFx0XHQgc3RydWN0IG5mX2Nvbm5fYWN0X2N0X2V4dCAqYWN0X2N0X2V4dCwgdTggZGlyKVxubmV0L3NjaGVkL2FjdF9jdC5jLTQwOC17XG5uZXQvc2NoZWQvYWN0X2N0LmMtNDA5LVx0ZW50cnktXHUwMDNldHVwbGVoYXNoW2Rpcl0udHVwbGUueG1pdF90eXBlID0gRkxPV19PRkZMT0FEX1hNSVRfVEM7XG5uZXQvc2NoZWQvYWN0X2N0LmM6NDEwOlx0ZW50cnktXHUwMDNldHVwbGVoYXNoW2Rpcl0udHVwbGUudGMuaWlmaWR4ID0gYWN0X2N0X2V4dC1cdTAwM2VpZmluZGV4W2Rpcl07XG5uZXQvc2NoZWQvYWN0X2N0LmMtNDExLX1cbi0tXG5uZXQvc2NoZWQvYWN0X2N0LmM9NDEzPXN0YXRpYyB2b2lkIHRjZl9jdF9mbG93X2N0X2V4dF9pZmlkeF91cGRhdGUoc3RydWN0IGZsb3dfb2ZmbG9hZCAqZW50cnkpXG5uZXQvc2NoZWQvYWN0X2N0LmMtNDE0LXtcbm5ldC9zY2hlZC9hY3RfY3QuYzo0MTU6XHRzdHJ1Y3QgbmZfY29ubl9hY3RfY3RfZXh0ICphY3RfY3RfZXh0O1xubmV0L3NjaGVkL2FjdF9jdC5jLTQxNi1cbm5ldC9zY2hlZC9hY3RfY3QuYzo0MTc6XHRhY3RfY3RfZXh0ID0gbmZfY29ubl9hY3RfY3RfZXh0X2ZpbmQoZW50cnktXHUwMDNlY3QpO1xubmV0L3NjaGVkL2FjdF9jdC5jOjQxODpcdGlmIChhY3RfY3RfZXh0KSB7XG5uZXQvc2NoZWQvYWN0X2N0LmM6NDE5Olx0XHR0Y2ZfY3RfZmxvd190Y19pZmlkeChlbnRyeSwgYWN0X2N0X2V4dCwgRkxPV19PRkZMT0FEX0RJUl9PUklHSU5BTCk7XG5uZXQvc2NoZWQvYWN0X2N0LmM6NDIwOlx0XHR0Y2ZfY3RfZmxvd190Y19pZmlkeChlbnRyeSwgYWN0X2N0X2V4dCwgRkxPV19PRkZMT0FEX0RJUl9SRVBMWSk7XG5uZXQvc2NoZWQvYWN0X2N0LmMtNDIxLVx0fVxuLS1cbm5ldC9zY2hlZC9hY3RfY3QuYz00MjQ9c3RhdGljIHZvaWQgdGNmX2N0X2Zsb3dfdGFibGVfYWRkKHN0cnVjdCB0Y2ZfY3RfZmxvd190YWJsZSAqY3RfZnQsXG4tLVxubmV0L3NjaGVkL2FjdF9jdC5jLTQyNy17XG5uZXQvc2NoZWQvYWN0X2N0LmM6NDI4Olx0c3RydWN0IG5mX2Nvbm5fYWN0X2N0X2V4dCAqYWN0X2N0X2V4dDtcbm5ldC9zY2hlZC9hY3RfY3QuYy00MjktXHRzdHJ1Y3QgZmxvd19vZmZsb2FkICplbnRyeTtcbi0tXG5uZXQvc2NoZWQvYWN0X2N0LmMtNDQ3LVxubmV0L3NjaGVkL2FjdF9jdC5jOjQ0ODpcdGFjdF9jdF9leHQgPSBuZl9jb25uX2FjdF9jdF9leHRfZmluZChjdCk7XG5uZXQvc2NoZWQvYWN0X2N0LmM6NDQ5Olx0aWYgKGFjdF9jdF9leHQpIHtcbm5ldC9zY2hlZC9hY3RfY3QuYzo0NTA6XHRcdHRjZl9jdF9mbG93X3RjX2lmaWR4KGVudHJ5LCBhY3RfY3RfZXh0LCBGTE9XX09GRkxPQURfRElSX09SSUdJTkFMKTtcbm5ldC9zY2hlZC9hY3RfY3QuYzo0NTE6XHRcdHRjZl9jdF9mbG93X3RjX2lmaWR4KGVudHJ5LCBhY3RfY3RfZXh0LCBGTE9XX09GRkxPQURfRElSX1JFUExZKTtcbm5ldC9zY2hlZC9hY3RfY3QuYy00NTItXHR9XG4tLVxubmV0L3NjaGVkL2FjdF9jdC5jPTY1OD1zdGF0aWMgYm9vbCB0Y2ZfY3RfZmxvd190YWJsZV9sb29rdXAoc3RydWN0IHRjZl9jdF9wYXJhbXMgKnAsXG4tLVxubmV0L3NjaGVkL2FjdF9jdC5jLTcxOC1cbm5ldC9zY2hlZC9hY3RfY3QuYzo3MTk6XHRuZl9jb25uX2FjdF9jdF9leHRfZmlsbChza2IsIGN0LCBjdGluZm8pO1xubmV0L3NjaGVkL2FjdF9jdC5jLTcyMC1cdHRjZl9jdF9mbG93X2N0X2V4dF9pZmlkeF91cGRhdGUoZmxvdyk7XG4tLVxubmV0L3NjaGVkL2FjdF9jdC5jPTc0MD1zdGF0aWMgdm9pZCB0Y2ZfY3RfZmxvd190YWJsZXNfdW5pbml0KHZvaWQpXG4tLVxubmV0L3NjaGVkL2FjdF9jdC5jLTc0NC1cbm5ldC9zY2hlZC9hY3RfY3QuYzo3NDU6c3RhdGljIHN0cnVjdCB0Y19hY3Rpb25fb3BzIGFjdF9jdF9vcHM7XG5uZXQvc2NoZWQvYWN0X2N0LmMtNzQ2LVxuLS1cbm5ldC9zY2hlZC9hY3RfY3QuYz05Nzk9VENfSU5ESVJFQ1RfU0NPUEUgaW50IHRjZl9jdF9hY3Qoc3RydWN0IHNrX2J1ZmYgKnNrYiwgY29uc3Qgc3RydWN0IHRjX2FjdGlvbiAqYSxcbi0tXG5uZXQvc2NoZWQvYWN0X2N0LmMtMTA3NS1cdG5mX2N0X2RlbGl2ZXJfY2FjaGVkX2V2ZW50cyhjdCk7XG5uZXQvc2NoZWQvYWN0X2N0LmM6MTA3NjpcdG5mX2Nvbm5fYWN0X2N0X2V4dF9maWxsKHNrYiwgY3QsIGN0aW5mbyk7XG5uZXQvc2NoZWQvYWN0X2N0LmMtMTA3Ny1cbi0tXG5uZXQvc2NoZWQvYWN0X2N0LmMtMTEwMy1cdFx0aWYgKCFuZl9jdF9pc19jb25maXJtZWQoY3QpKVxubmV0L3NjaGVkL2FjdF9jdC5jOjExMDQ6XHRcdFx0bmZfY29ubl9hY3RfY3RfZXh0X2FkZChza2IsIGN0LCBjdGluZm8pO1xubmV0L3NjaGVkL2FjdF9jdC5jLTExMDUtXG4tLVxubmV0L3NjaGVkL2FjdF9jdC5jPTEzNzE9c3RhdGljIGludCB0Y2ZfY3RfaW5pdChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBubGF0dHIgKm5sYSxcbi0tXG5uZXQvc2NoZWQvYWN0X2N0LmMtMTM3NS17XG5uZXQvc2NoZWQvYWN0X2N0LmM6MTM3NjpcdHN0cnVjdCB0Y19hY3Rpb25fbmV0ICp0biA9IG5ldF9nZW5lcmljKG5ldCwgYWN0X2N0X29wcy5uZXRfaWQpO1xubmV0L3NjaGVkL2FjdF9jdC5jLTEzNzctXHRib29sIGJpbmQgPSBmbGFncyBcdTAwMjYgVENBX0FDVF9GTEFHU19CSU5EO1xuLS1cbm5ldC9zY2hlZC9hY3RfY3QuYy0xNDEyLVx0XHRlcnIgPSB0Y2ZfaWRyX2NyZWF0ZV9mcm9tX2ZsYWdzKHRuLCBpbmRleCwgZXN0LCBhLFxubmV0L3NjaGVkL2FjdF9jdC5jOjE0MTM6XHRcdFx0XHRcdFx0XHUwMDI2YWN0X2N0X29wcywgYmluZCwgZmxhZ3MpO1xubmV0L3NjaGVkL2FjdF9jdC5jLTE0MTQtXHRcdGlmIChlcnIpIHtcbi0tXG5uZXQvc2NoZWQvYWN0X2N0LmM9MTY2MD1zdGF0aWMgc2l6ZV90IHRjZl9jdF9nZXRfZmlsbF9zaXplKGNvbnN0IHN0cnVjdCB0Y19hY3Rpb24gKmFjdClcbi0tXG5uZXQvc2NoZWQvYWN0X2N0LmMtMTcwNC1cbm5ldC9zY2hlZC9hY3RfY3QuYzoxNzA1OnN0YXRpYyBzdHJ1Y3QgdGNfYWN0aW9uX29wcyBhY3RfY3Rfb3BzID0ge1xubmV0L3NjaGVkL2FjdF9jdC5jLTE3MDYtXHQua2luZFx0XHQ9XHRcJiMzNDtjdFwmIzM0Oyxcbi0tXG5uZXQvc2NoZWQvYWN0X2N0LmM9MTcyMD1zdGF0aWMgX19uZXRfaW5pdCBpbnQgY3RfaW5pdF9uZXQoc3RydWN0IG5ldCAqbmV0KVxubmV0L3NjaGVkL2FjdF9jdC5jLTE3MjEte1xubmV0L3NjaGVkL2FjdF9jdC5jOjE3MjI6XHRzdHJ1Y3QgdGNfY3RfYWN0aW9uX25ldCAqdG4gPSBuZXRfZ2VuZXJpYyhuZXQsIGFjdF9jdF9vcHMubmV0X2lkKTtcbm5ldC9zY2hlZC9hY3RfY3QuYy0xNzIzLVxubmV0L3NjaGVkL2FjdF9jdC5jOjE3MjQ6XHRyZXR1cm4gdGNfYWN0aW9uX25ldF9pbml0KG5ldCwgXHUwMDI2dG4tXHUwMDNldG4sIFx1MDAyNmFjdF9jdF9vcHMpO1xubmV0L3NjaGVkL2FjdF9jdC5jLTE3MjUtfVxuLS1cbm5ldC9zY2hlZC9hY3RfY3QuYz0xNzI3PXN0YXRpYyB2b2lkIF9fbmV0X2V4aXQgY3RfZXhpdF9uZXQoc3RydWN0IGxpc3RfaGVhZCAqbmV0X2xpc3QpXG5uZXQvc2NoZWQvYWN0X2N0LmMtMTcyOC17XG5uZXQvc2NoZWQvYWN0X2N0LmM6MTcyOTpcdHRjX2FjdGlvbl9uZXRfZXhpdChuZXRfbGlzdCwgYWN0X2N0X29wcy5uZXRfaWQpO1xubmV0L3NjaGVkL2FjdF9jdC5jLTE3MzAtfVxuLS1cbm5ldC9zY2hlZC9hY3RfY3QuYz0xNzMyPXN0YXRpYyBzdHJ1Y3QgcGVybmV0X29wZXJhdGlvbnMgY3RfbmV0X29wcyA9IHtcbi0tXG5uZXQvc2NoZWQvYWN0X2N0LmMtMTczNC1cdC5leGl0X2JhdGNoID0gY3RfZXhpdF9uZXQsXG5uZXQvc2NoZWQvYWN0X2N0LmM6MTczNTpcdC5pZCAgID0gXHUwMDI2YWN0X2N0X29wcy5uZXRfaWQsXG5uZXQvc2NoZWQvYWN0X2N0LmMtMTczNi1cdC5zaXplID0gc2l6ZW9mKHN0cnVjdCB0Y19jdF9hY3Rpb25fbmV0KSxcbi0tXG5uZXQvc2NoZWQvYWN0X2N0LmM9MTczOT1zdGF0aWMgaW50IF9faW5pdCBjdF9pbml0X21vZHVsZSh2b2lkKVxuLS1cbm5ldC9zY2hlZC9hY3RfY3QuYy0xNzQyLVxubmV0L3NjaGVkL2FjdF9jdC5jOjE3NDM6XHRhY3RfY3Rfd3EgPSBhbGxvY19vcmRlcmVkX3dvcmtxdWV1ZShcJiMzNDthY3RfY3Rfd29ya3F1ZXVlXCYjMzQ7LCAwKTtcbm5ldC9zY2hlZC9hY3RfY3QuYzoxNzQ0Olx0aWYgKCFhY3RfY3Rfd3EpXG5uZXQvc2NoZWQvYWN0X2N0LmMtMTc0NS1cdFx0cmV0dXJuIC1FTk9NRU07XG4tLVxubmV0L3NjaGVkL2FjdF9jdC5jLTE3NTAtXG5uZXQvc2NoZWQvYWN0X2N0LmM6MTc1MTpcdGVyciA9IHRjZl9yZWdpc3Rlcl9hY3Rpb24oXHUwMDI2YWN0X2N0X29wcywgXHUwMDI2Y3RfbmV0X29wcyk7XG5uZXQvc2NoZWQvYWN0X2N0LmMtMTc1Mi1cdGlmIChlcnIpXG4tLVxubmV0L3NjaGVkL2FjdF9jdC5jLTE3NjEtZXJyX3RibF9pbml0OlxubmV0L3NjaGVkL2FjdF9jdC5jOjE3NjI6XHRkZXN0cm95X3dvcmtxdWV1ZShhY3RfY3Rfd3EpO1xubmV0L3NjaGVkL2FjdF9jdC5jLTE3NjMtXHRyZXR1cm4gZXJyO1xuLS1cbm5ldC9zY2hlZC9hY3RfY3QuYz0xNzY2PXN0YXRpYyB2b2lkIF9fZXhpdCBjdF9jbGVhbnVwX21vZHVsZSh2b2lkKVxuLS1cbm5ldC9zY2hlZC9hY3RfY3QuYy0xNzY4LVx0c3RhdGljX2JyYW5jaF9kZWMoXHUwMDI2dGNmX2ZyYWdfeG1pdF9jb3VudCk7XG5uZXQvc2NoZWQvYWN0X2N0LmM6MTc2OTpcdHRjZl91bnJlZ2lzdGVyX2FjdGlvbihcdTAwMjZhY3RfY3Rfb3BzLCBcdTAwMjZjdF9uZXRfb3BzKTtcbm5ldC9zY2hlZC9hY3RfY3QuYy0xNzcwLVx0dGNmX2N0X2Zsb3dfdGFibGVzX3VuaW5pdCgpO1xubmV0L3NjaGVkL2FjdF9jdC5jOjE3NzE6XHRkZXN0cm95X3dvcmtxdWV1ZShhY3RfY3Rfd3EpO1xubmV0L3NjaGVkL2FjdF9jdC5jLTE3NzItfVxuLS1cbm5ldC9zY2hlZC9hY3RfY3RpbmZvLmMtMS0vLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMCYjNDM7XG5uZXQvc2NoZWQvYWN0X2N0aW5mby5jOjI6LyogbmV0L3NjaGVkL2FjdF9jdGluZm8uYyAgbmV0ZmlsdGVyIGN0aW5mbyBjb25ubWFyayBhY3Rpb25zXG5uZXQvc2NoZWQvYWN0X2N0aW5mby5jLTMtICpcbi0tXG5uZXQvc2NoZWQvYWN0X2N0aW5mby5jLTI4LVxubmV0L3NjaGVkL2FjdF9jdGluZm8uYzoyOTpzdGF0aWMgc3RydWN0IHRjX2FjdGlvbl9vcHMgYWN0X2N0aW5mb19vcHM7XG5uZXQvc2NoZWQvYWN0X2N0aW5mby5jLTMwLVxuLS1cbm5ldC9zY2hlZC9hY3RfY3RpbmZvLmM9MTU1PXN0YXRpYyBpbnQgdGNmX2N0aW5mb19pbml0KHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IG5sYXR0ciAqbmxhLFxuLS1cbm5ldC9zY2hlZC9hY3RfY3RpbmZvLmMtMTU5LXtcbm5ldC9zY2hlZC9hY3RfY3RpbmZvLmM6MTYwOlx0c3RydWN0IHRjX2FjdGlvbl9uZXQgKnRuID0gbmV0X2dlbmVyaWMobmV0LCBhY3RfY3RpbmZvX29wcy5uZXRfaWQpO1xubmV0L3NjaGVkL2FjdF9jdGluZm8uYy0xNjEtXHRib29sIGJpbmQgPSBmbGFncyBcdTAwMjYgVENBX0FDVF9GTEFHU19CSU5EO1xuLS1cbm5ldC9zY2hlZC9hY3RfY3RpbmZvLmMtMjE1LVx0XHRyZXQgPSB0Y2ZfaWRyX2NyZWF0ZV9mcm9tX2ZsYWdzKHRuLCBpbmRleCwgZXN0LCBhLFxubmV0L3NjaGVkL2FjdF9jdGluZm8uYzoyMTY6XHRcdFx0XHRcdFx0XHUwMDI2YWN0X2N0aW5mb19vcHMsIGJpbmQsIGZsYWdzKTtcbm5ldC9zY2hlZC9hY3RfY3RpbmZvLmMtMjE3LVx0XHRpZiAocmV0KSB7XG4tLVxubmV0L3NjaGVkL2FjdF9jdGluZm8uYz0zNTk9c3RhdGljIHNpemVfdCB0Y2ZfY3RpbmZvX2dldF9maWxsX3NpemUoY29uc3Qgc3RydWN0IHRjX2FjdGlvbiAqYWN0KVxuLS1cbm5ldC9zY2hlZC9hY3RfY3RpbmZvLmMtMzY4LVxubmV0L3NjaGVkL2FjdF9jdGluZm8uYzozNjk6c3RhdGljIHN0cnVjdCB0Y19hY3Rpb25fb3BzIGFjdF9jdGluZm9fb3BzID0ge1xubmV0L3NjaGVkL2FjdF9jdGluZm8uYy0zNzAtXHQua2luZFx0PSBcJiMzNDtjdGluZm9cJiMzNDssXG4tLVxubmV0L3NjaGVkL2FjdF9jdGluZm8uYz0zODI9c3RhdGljIF9fbmV0X2luaXQgaW50IGN0aW5mb19pbml0X25ldChzdHJ1Y3QgbmV0ICpuZXQpXG5uZXQvc2NoZWQvYWN0X2N0aW5mby5jLTM4My17XG5uZXQvc2NoZWQvYWN0X2N0aW5mby5jOjM4NDpcdHN0cnVjdCB0Y19hY3Rpb25fbmV0ICp0biA9IG5ldF9nZW5lcmljKG5ldCwgYWN0X2N0aW5mb19vcHMubmV0X2lkKTtcbm5ldC9zY2hlZC9hY3RfY3RpbmZvLmMtMzg1LVxubmV0L3NjaGVkL2FjdF9jdGluZm8uYzozODY6XHRyZXR1cm4gdGNfYWN0aW9uX25ldF9pbml0KG5ldCwgdG4sIFx1MDAyNmFjdF9jdGluZm9fb3BzKTtcbm5ldC9zY2hlZC9hY3RfY3RpbmZvLmMtMzg3LX1cbi0tXG5uZXQvc2NoZWQvYWN0X2N0aW5mby5jPTM4OT1zdGF0aWMgdm9pZCBfX25ldF9leGl0IGN0aW5mb19leGl0X25ldChzdHJ1Y3QgbGlzdF9oZWFkICpuZXRfbGlzdClcbm5ldC9zY2hlZC9hY3RfY3RpbmZvLmMtMzkwLXtcbm5ldC9zY2hlZC9hY3RfY3RpbmZvLmM6MzkxOlx0dGNfYWN0aW9uX25ldF9leGl0KG5ldF9saXN0LCBhY3RfY3RpbmZvX29wcy5uZXRfaWQpO1xubmV0L3NjaGVkL2FjdF9jdGluZm8uYy0zOTItfVxuLS1cbm5ldC9zY2hlZC9hY3RfY3RpbmZvLmM9Mzk0PXN0YXRpYyBzdHJ1Y3QgcGVybmV0X29wZXJhdGlvbnMgY3RpbmZvX25ldF9vcHMgPSB7XG4tLVxubmV0L3NjaGVkL2FjdF9jdGluZm8uYy0zOTYtXHQuZXhpdF9iYXRjaFx0PSBjdGluZm9fZXhpdF9uZXQsXG5uZXQvc2NoZWQvYWN0X2N0aW5mby5jOjM5NzpcdC5pZFx0XHQ9IFx1MDAyNmFjdF9jdGluZm9fb3BzLm5ldF9pZCxcbm5ldC9zY2hlZC9hY3RfY3RpbmZvLmMtMzk4LVx0LnNpemVcdFx0PSBzaXplb2Yoc3RydWN0IHRjX2FjdGlvbl9uZXQpLFxuLS1cbm5ldC9zY2hlZC9hY3RfY3RpbmZvLmM9NDAxPXN0YXRpYyBpbnQgX19pbml0IGN0aW5mb19pbml0X21vZHVsZSh2b2lkKVxubmV0L3NjaGVkL2FjdF9jdGluZm8uYy00MDIte1xubmV0L3NjaGVkL2FjdF9jdGluZm8uYzo0MDM6XHRyZXR1cm4gdGNmX3JlZ2lzdGVyX2FjdGlvbihcdTAwMjZhY3RfY3RpbmZvX29wcywgXHUwMDI2Y3RpbmZvX25ldF9vcHMpO1xubmV0L3NjaGVkL2FjdF9jdGluZm8uYy00MDQtfVxuLS1cbm5ldC9zY2hlZC9hY3RfY3RpbmZvLmM9NDA2PXN0YXRpYyB2b2lkIF9fZXhpdCBjdGluZm9fY2xlYW51cF9tb2R1bGUodm9pZClcbm5ldC9zY2hlZC9hY3RfY3RpbmZvLmMtNDA3LXtcbm5ldC9zY2hlZC9hY3RfY3RpbmZvLmM6NDA4Olx0dGNmX3VucmVnaXN0ZXJfYWN0aW9uKFx1MDAyNmFjdF9jdGluZm9fb3BzLCBcdTAwMjZjdGluZm9fbmV0X29wcyk7XG5uZXQvc2NoZWQvYWN0X2N0aW5mby5jLTQwOS19XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA5IDA4OjM5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIzNDg2CgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogMTYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGhvdWdodCBwcm9jZXNzLCBzdW1tYXJpemVkIGFzIGlmIEkgd2VyZSBjb25zaWRlcmluZyB0aGlzIGlzc3VlOgoKKipFeGFtaW5pbmcgdGhlIEtlcm5lbCBDb25maWd1cmF0aW9uKioKCk9rYXksIHNvIEkgbmVlZCB0byB0cmFjayBkb3duIGhvdyBgTkVUX0FDVF9DVGAgaXMgY29uZmlndXJlZC4gTXkgaW5pdGlhbCBpbnN0aW5jdCBpcyB0byBnbyBzdHJhaWdodCB0byB0aGUgc291cmNlLCB0aGUgYEtjb25maWdgIGZpbGVzLiBUaGF0JiMzOTtzIHdoZXJlIGFsbCB0aGUga2VybmVsIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBhcmUgZGVmaW5lZC4gSSYjMzk7bGwgbmVlZCB0byBvcGVuIHRob3NlIHVwIGFuZCBzZWUgd2hhdCBJIGNhbiBsZWFybiBhYm91dCB0aGlzIHBhcnRpY3VsYXIgb3B0aW9uLiBJJiMzOTttIGxvb2tpbmcgZm9yIGl0cyBkZXBlbmRlbmNpZXMsIGRlZmF1bHQgdmFsdWVzLCBoZWxwIHRleHQsIGFuZCBhbnl0aGluZyBlbHNlIHRoYXQgbWlnaHQgZ2l2ZSBtZSBhIGNsdWUgYWJvdXQgaXRzIHJvbGUgaW4gdGhlIHN5c3RlbSBhbmQgaG93IGl0JiMzOTtzIGVuYWJsZWQuIEkmIzM5O2xsIGJlIGxvb2tpbmcgZm9yIHdoZXJlIGl0JiMzOTtzIGRlZmluZWQgYW5kIHdoYXQgY29udGV4dCBtYWtlcyBpdCBhdmFpbGFibGUgZm9yIHNlbGVjdGlvbi4gSSYjMzk7bGwgd2FudCB0byBzZWUgaG93IGl0IG1pZ2h0IHJlbGF0ZSB0byBvdGhlciBuZXR3b3JraW5nIGZlYXR1cmVzLCBzZWN1cml0eSBjb25zaWRlcmF0aW9ucywgb3IgcGVyaGFwcyBldmVuIHNwZWNpZmljIGhhcmR3YXJlIGRlcGVuZGVuY2llcy4gSSYjMzk7bSBleHBlY3RpbmcgdGhpcyB3aWxsIGxpa2VseSBnaXZlIG1lIGEgZGVlcGVyIHVuZGVyc3RhbmRpbmcgdGhhbiBqdXN0IGxvb2tpbmcgYXQgdGhlIHNvdXJjZSBjb2RlIHVzaW5nIGdyZXAuIEl0JiMzOTtzIHRpbWUgdG8gZGl2ZSBpbnRvIHRob3NlIGBLY29uZmlnYCBmaWxlcyBhbmQgcGllY2UgdGhpcyBpbmZvcm1hdGlvbiB0b2dldGhlci4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDkgMDg6Mzk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvc2NoZWQvS2NvbmZpZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDkxMCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAzMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgOTEwOlx0XHQgIFNheSBZIGhlcmUgdG8gc2V0L3JlbGVhc2UgaXAgdHVubmVsIG1ldGFkYXRhLlxuIDkxMTpcdFxuIDkxMjpcdFx0ICBJZiB1bnN1cmUsIHNheSBOLlxuIDkxMzpcdFxuIDkxNDpcdFx0ICBUbyBjb21waWxlIHRoaXMgY29kZSBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlXG4gOTE1Olx0XHQgIG1vZHVsZSB3aWxsIGJlIGNhbGxlZCBhY3RfdHVubmVsX2tleS5cbiA5MTY6XHRcbiA5MTc6XHRjb25maWcgTkVUX0FDVF9DVFxuIDkxODpcdFx0dHJpc3RhdGUgXCYjMzQ7Y29ubmVjdGlvbiB0cmFja2luZyB0YyBhY3Rpb25cJiMzNDtcbiA5MTk6XHRcdGRlcGVuZHMgb24gTkVUX0NMU19BQ1QgXHUwMDI2XHUwMDI2IE5GX0NPTk5UUkFDSyBcdTAwMjZcdTAwMjYgKCFORl9OQVQgfHwgTkZfTkFUKSBcdTAwMjZcdTAwMjYgTkZfRkxPV19UQUJMRVxuIDkyMDpcdFx0c2VsZWN0IE5GX0NPTk5UUkFDS19PVlNcbiA5MjE6XHRcdHNlbGVjdCBORl9OQVRfT1ZTIGlmIE5GX05BVFxuIDkyMjpcdFx0aGVscFxuIDkyMzpcdFx0ICBTYXkgWSBoZXJlIHRvIGFsbG93IHNlbmRpbmcgdGhlIHBhY2tldHMgdG8gY29ubnRyYWNrIG1vZHVsZS5cbiA5MjQ6XHRcbiA5MjU6XHRcdCAgSWYgdW5zdXJlLCBzYXkgTi5cbiA5MjY6XHRcbiA5Mjc6XHRcdCAgVG8gY29tcGlsZSB0aGlzIGNvZGUgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZVxuIDkyODpcdFx0ICBtb2R1bGUgd2lsbCBiZSBjYWxsZWQgYWN0X2N0LlxuIDkyOTpcdFxuIDkzMDpcdGNvbmZpZyBORVRfQUNUX0dBVEVcbiA5MzE6XHRcdHRyaXN0YXRlIFwmIzM0O0ZyYW1lIGdhdGUgZW50cnkgbGlzdCBjb250cm9sIHRjIGFjdGlvblwmIzM0O1xuIDkzMjpcdFx0ZGVwZW5kcyBvbiBORVRfQ0xTX0FDVFxuIDkzMzpcdFx0aGVscFxuIDkzNDpcdFx0ICBTYXkgWSBoZXJlIHRvIGFsbG93IHRvIGNvbnRyb2wgdGhlIGluZ3Jlc3MgZmxvdyB0byBiZSBwYXNzZWQgYXRcbiA5MzU6XHRcdCAgc3BlY2lmaWMgdGltZSBzbG90IGFuZCBiZSBkcm9wcGVkIGF0IG90aGVyIHNwZWNpZmljIHRpbWUgc2xvdCBieVxuIDkzNjpcdFx0ICB0aGUgZ2F0ZSBlbnRyeSBsaXN0LlxuIDkzNzpcdFxuIDkzODpcdFx0ICBJZiB1bnN1cmUsIHNheSBOLlxuIDkzOTpcdFx0ICBUbyBjb21waWxlIHRoaXMgY29kZSBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA5IDA4OjM5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI0MjA4CgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogODI5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBhIEtlcm5lbCBQYXRjaCBSZWxhdGVkIHRvIENvbm5lY3Rpb24gVHJhY2tpbmcgYW5kIEZsb3cgVGFibGVzKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIEl0IGxvb2tzIGxpa2Ugd2UmIzM5O3JlIGRlYWxpbmcgd2l0aCBhIGZpeCByZWxhdGVkIHRvIHRoZSBgTkVUX0FDVF9DVGAgZnVuY3Rpb25hbGl0eSwgd2hpY2ggZGVwZW5kcyBvbiBjb25uZWN0aW9uIHRyYWNraW5nIChgTkVUX0NMU19BQ1QgJmFtcDsmYW1wOyBORl9DT05OVFJBQ0tgKSBhbmQgZmxvdyB0YWJsZXMgKGBORl9GTE9XX1RBQkxFYCksIHBvdGVudGlhbGx5IHdpdGggTkFUIChgTkZfTkFUYCkuIFRoaXMgaXMgYWxsIGFjY2Vzc2libGUgdmlhIG5ldGxpbmssIHNwZWNpZmljYWxseSB0aHJvdWdoIHRoZSBgcnRuZXRsaW5rYCBpbnRlcmZhY2UgYW5kIHRoZSBgdGMgYWN0aW9uIGN0YCBjb21tYW5kLgoKVGhlIGNvcmUgaXNzdWUgc2VlbXMgdG8gcmV2b2x2ZSBhcm91bmQgdGhlIGB0Y2ZfY3RfZmxvd190YWJsZV9nZXRgIGZ1bmN0aW9uLiBUaGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCBkdXJpbmcgdGhlIGluaXRpYWxpemF0aW9uIG9mIHRoZSAmIzM5O2N0JiMzOTsgdHJhZmZpYyBjb250cm9sIGFjdGlvbiwgc3BlY2lmaWNhbGx5IGZyb20gYHRjZl9jdF9pbml0YC4gV2hlbiBhIHVzZXIgc2V0cyB1cCBhIGB0YyBhY3Rpb24gY3RgIHZpYSBuZXRsaW5rIHVzaW5nIGBSVE1fTkVXQUNUSU9OYCBvciBgUlRNX05FV1RGSUxURVJgLCB0aGUgYHRjZl9jdF9pbml0YCBmdW5jdGlvbiBpcyB0cmlnZ2VyZWQuCgpUaGUgcGF0Y2ggaXRzZWxmIGFkZHJlc3NlcyBhIHJhY2UgY29uZGl0aW9uIHdpdGhpbiBgdGNmX2N0X2Zsb3dfdGFibGVfZ2V0YC4gVGhlIG9yaWdpbmFsIGNvZGUgY2FsbGVkIGBuZl9mbG93X3RhYmxlX2luaXRgIHRvIGluaXRpYWxpemUgdGhlIGZsb3cgdGFibGUsIHdoaWNoLCBhbW9uZyBvdGhlciB0aGluZ3MsIGFkZHMgdGhlIGBmbG93dGFibGVgIHRvIHRoZSBnbG9iYWwgYGZsb3d0YWJsZXNgIGxpc3QgYW5kIHN0YXJ0cyB0aGUgZ2FyYmFnZSBjb2xsZWN0aW9uIHdvcmtlciBgbmZfZmxvd19vZmZsb2FkX3dvcmtfZ2NgLiBUaGUgcHJvYmxlbSB3YXMgdGhhdCBgZmxvd3RhYmxlLSZndDtuZXRgIHdhcyB3cml0dGVuICphZnRlciogdGhlIGBuZl9mbG93X3RhYmxlX2luaXRgIGNhbGwuIElmIGBuZl9mbG93X3RhYmxlX2luaXRgIHRyaWdnZXJlZCBhbnkgZGVsYXllZCB3b3JrIG9yIG9mZmxvYWQgb3BlcmF0aW9ucywgYSBgcmVhZF9wbmV0KCZhbXA7Zmxvd3RhYmxlLSZndDtuZXQpYCBjb3VsZCBwb3RlbnRpYWxseSByZWFkIE5VTEwgYmVjYXVzZSB0aGUgYG5ldGAgZmllbGQgd2FzbiYjMzk7dCBpbml0aWFsaXplZCB5ZXQuIFRoaXMgY291bGQgb2NjdXIgZHVyaW5nIG5ldCBjbGVhbnVwIG9yIGlmIHRoZXJlIHdhcyBhIGdhcmJhZ2UgY29sbGVjdGlvbiByYWNlIGNvbmRpdGlvbi4gVGhlIGZpeCBpcyB0byBlbnN1cmUgYGZsb3d0YWJsZS0mZ3Q7bmV0YCBpcyBpbml0aWFsaXplZCAqYmVmb3JlKiBgbmZfZmxvd190YWJsZV9pbml0YCBnZXRzIGNhbGxlZC4KCk5vdywgYSBrZXkgcXVlc3Rpb246IGlzIHRoaXMgY29kZSBwYXRoIHJlYWNoYWJsZSBpbiBzdGFuZGFyZCBzeXprYWxsZXIgZW52aXJvbm1lbnRzPyBUaGUgYW5zd2VyIGlzIHllcy4gVGhlIGBhY3RfY3RgIGFjdGlvbiBpcyB0aGUgY29ubmVjdGlvbiB0cmFja2luZyBhY3Rpb24gdXNlZCB3aXRoIFRDICh0cmFmZmljIGNvbnRyb2wpIGFuZCBpcyBjb25maWd1cmVkIHZpYSBgcnRuZXRsaW5rYCwgdXRpbGl6aW5nIGNvbW1hbmRzIGxpa2UgYFJUTV9ORVdBQ1RJT05gLCBgUlRNX05FV1RGSUxURVJgLCBvciB0aHJvdWdoIHRoZSBgdGNgIGNvbW1hbmQtbGluZSB1dGlsaXR5LiBBbmQgdGhlc2Ugd29yayBvbiBjb21tb24gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgUUVNVSBhbmQgR0NFLCBhcyBsb25nIGFzIG5ldHdvcmtpbmcgYW5kIG5ldGxpbmsgYXJlIGVuYWJsZWQuCgpUaGlzIGNoYW5nZSBkZWZpbml0ZWx5IG1vZGlmaWVzIGV4ZWN1dGFibGUga2VybmVsIGNvZGUuIFRoZSBjb2RlIGluIHF1ZXN0aW9uIGlzIGB0Y2ZfY3RfZmxvd190YWJsZV9nZXRgIGluIGBuZXQvc2NoZWQvYWN0X2N0LmNgLiBUaGlzIG1ha2VzIHRoaXMgYSBnb29kIGNhbmRpZGF0ZSBmb3IgZnV6emluZy4KCk15IGxpc3Qgb2YgYEZvY3VzU3ltYm9sc2Agd2lsbCBiZToKKiAgIGB0Y2ZfY3RfZmxvd190YWJsZV9nZXRgICh0aGUgbW9kaWZpZWQgZnVuY3Rpb24pLgoqICAgYHRjZl9jdF9pbml0YCAodGhlIGluaXRpYWxpemF0aW9uIGZ1bmN0aW9uIHRoYXQgY2FsbHMgYHRjZl9jdF9mbG93X3RhYmxlX2dldGApLgoqICAgYHRjZl9jdF9hY3RgICh0aGUgcGFja2V0IHByb2Nlc3NpbmcgYWN0aW9uIHRoYXQgaGFuZGxlcyB0aGUgdHJhZmZpYykuCiogICBgbmZfZmxvd190YWJsZV9pbml0YCAodGhlIGZsb3cgdGFibGUgaW5pdGlhbGl6YXRpb24gZnVuY3Rpb24gY2FsbGVkIGJ5IGB0Y2ZfY3RfZmxvd190YWJsZV9nZXRgKS4KClJlZ2FyZGluZyBzeW1ib2wgdmlzaWJpbGl0eSwgYHRjZl9jdF9mbG93X3RhYmxlX2dldGAgYW5kIGB0Y2ZfY3RfaW5pdGAgYXJlIHN0YXRpYyB3aXRoaW4gYG5ldC9zY2hlZC9hY3RfY3QuY2AsIHRob3VnaCBgdGNmX2N0X2luaXRgIGNhbGxzIGB0Y2ZfY3RfZmxvd190YWJsZV9nZXRgLiBgdGNmX2N0X2FjdGAgaXMgbm9uLXN0YXRpYyBhbmQgdXNlcyBgVENfSU5ESVJFQ1RfU0NPUEVgLCBhbHNvIGluIGBuZXQvc2NoZWQvYWN0X2N0LmNgLiBgbmZfZmxvd190YWJsZV9pbml0YCBpcyBub24tc3RhdGljIGFuZCBpbiBgbmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2NvcmUuY2AuIEkmIzM5O2xsIHdhbnQgdG8gZG91YmxlLWNoZWNrIHRoZWlyIGV4YWN0IHNpZ25hdHVyZXMgYW5kIHByZXNlbmNlIGluIHRoZWlyIHJlc3BlY3RpdmUgc291cmNlIGZpbGVzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOSAwODozOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt0Y2ZfY3RfJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L3NjaGVkL2FjdF9jdC5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9zY2hlZC9hY3RfY3QuYz00Nj1zdHJ1Y3Qgem9uZXNfaHRfa2V5IHtcbi0tXG5uZXQvc2NoZWQvYWN0X2N0LmMtNTAtXG5uZXQvc2NoZWQvYWN0X2N0LmM6NTE6c3RydWN0IHRjZl9jdF9mbG93X3RhYmxlIHtcbm5ldC9zY2hlZC9hY3RfY3QuYy01Mi1cdHN0cnVjdCByaGFzaF9oZWFkIG5vZGU7IC8qIEluIHpvbmVzIHRhYmxlcyAqL1xuLS1cbm5ldC9zY2hlZC9hY3RfY3QuYz02Mj1zdGF0aWMgY29uc3Qgc3RydWN0IHJoYXNodGFibGVfcGFyYW1zIHpvbmVzX3BhcmFtcyA9IHtcbm5ldC9zY2hlZC9hY3RfY3QuYzo2MzpcdC5oZWFkX29mZnNldCA9IG9mZnNldG9mKHN0cnVjdCB0Y2ZfY3RfZmxvd190YWJsZSwgbm9kZSksXG5uZXQvc2NoZWQvYWN0X2N0LmM6NjQ6XHQua2V5X29mZnNldCA9IG9mZnNldG9mKHN0cnVjdCB0Y2ZfY3RfZmxvd190YWJsZSwga2V5KSxcbm5ldC9zY2hlZC9hY3RfY3QuYy02NS1cdC5rZXlfbGVuID0gb2Zmc2V0b2ZlbmQoc3RydWN0IHpvbmVzX2h0X2tleSwgem9uZSksXG4tLVxubmV0L3NjaGVkL2FjdF9jdC5jPTY5PXN0YXRpYyBzdHJ1Y3QgZmxvd19hY3Rpb25fZW50cnkgKlxubmV0L3NjaGVkL2FjdF9jdC5jOjcwOnRjZl9jdF9mbG93X3RhYmxlX2Zsb3dfYWN0aW9uX2dldF9uZXh0KHN0cnVjdCBmbG93X2FjdGlvbiAqZmxvd19hY3Rpb24pXG5uZXQvc2NoZWQvYWN0X2N0LmMtNzEte1xuLS1cbm5ldC9zY2hlZC9hY3RfY3QuYy03Ni1cbm5ldC9zY2hlZC9hY3RfY3QuYzo3NzpzdGF0aWMgdm9pZCB0Y2ZfY3RfYWRkX21hbmdsZV9hY3Rpb24oc3RydWN0IGZsb3dfYWN0aW9uICphY3Rpb24sXG5uZXQvc2NoZWQvYWN0X2N0LmMtNzgtXHRcdFx0XHQgICAgIGVudW0gZmxvd19hY3Rpb25fbWFuZ2xlX2Jhc2UgaHR5cGUsXG4tLVxubmV0L3NjaGVkL2FjdF9jdC5jLTg0LVxubmV0L3NjaGVkL2FjdF9jdC5jOjg1Olx0ZW50cnkgPSB0Y2ZfY3RfZmxvd190YWJsZV9mbG93X2FjdGlvbl9nZXRfbmV4dChhY3Rpb24pO1xubmV0L3NjaGVkL2FjdF9jdC5jLTg2LVx0ZW50cnktXHUwMDNlaWQgPSBGTE9XX0FDVElPTl9NQU5HTEU7XG4tLVxubmV0L3NjaGVkL2FjdF9jdC5jPTk3PXN0YXRpYyB2b2lkXG5uZXQvc2NoZWQvYWN0X2N0LmM6OTg6dGNmX2N0X2Zsb3dfdGFibGVfYWRkX2FjdGlvbl9uYXRfaXB2NChjb25zdCBzdHJ1Y3QgbmZfY29ubnRyYWNrX3R1cGxlICp0dXBsZSxcbm5ldC9zY2hlZC9hY3RfY3QuYy05OS1cdFx0XHRcdCAgICAgIHN0cnVjdCBuZl9jb25udHJhY2tfdHVwbGUgdGFyZ2V0LFxuLS1cbm5ldC9zY2hlZC9hY3RfY3QuYy0xMDItXHRpZiAobWVtY21wKFx1MDAyNnRhcmdldC5zcmMudTMsIFx1MDAyNnR1cGxlLVx1MDAzZXNyYy51Mywgc2l6ZW9mKHRhcmdldC5zcmMudTMpKSlcbm5ldC9zY2hlZC9hY3RfY3QuYzoxMDM6XHRcdHRjZl9jdF9hZGRfbWFuZ2xlX2FjdGlvbihhY3Rpb24sIEZMT1dfQUNUX01BTkdMRV9IRFJfVFlQRV9JUDQsXG5uZXQvc2NoZWQvYWN0X2N0LmMtMTA0LVx0XHRcdFx0XHQgb2Zmc2V0b2Yoc3RydWN0IGlwaGRyLCBzYWRkciksXG4tLVxubmV0L3NjaGVkL2FjdF9jdC5jLTEwNy1cdGlmIChtZW1jbXAoXHUwMDI2dGFyZ2V0LmRzdC51MywgXHUwMDI2dHVwbGUtXHUwMDNlZHN0LnUzLCBzaXplb2YodGFyZ2V0LmRzdC51MykpKVxubmV0L3NjaGVkL2FjdF9jdC5jOjEwODpcdFx0dGNmX2N0X2FkZF9tYW5nbGVfYWN0aW9uKGFjdGlvbiwgRkxPV19BQ1RfTUFOR0xFX0hEUl9UWVBFX0lQNCxcbm5ldC9zY2hlZC9hY3RfY3QuYy0xMDktXHRcdFx0XHRcdCBvZmZzZXRvZihzdHJ1Y3QgaXBoZHIsIGRhZGRyKSxcbi0tXG5uZXQvc2NoZWQvYWN0X2N0LmM9MTE0PXN0YXRpYyB2b2lkXG5uZXQvc2NoZWQvYWN0X2N0LmM6MTE1OnRjZl9jdF9hZGRfaXB2Nl9hZGRyX21hbmdsZV9hY3Rpb24oc3RydWN0IGZsb3dfYWN0aW9uICphY3Rpb24sXG5uZXQvc2NoZWQvYWN0X2N0LmMtMTE2LVx0XHRcdFx0ICAgdW5pb24gbmZfaW5ldF9hZGRyICphZGRyLFxuLS1cbm5ldC9zY2hlZC9hY3RfY3QuYy0xMjEtXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBzaXplb2Yoc3RydWN0IGluNl9hZGRyKSAvIHNpemVvZih1MzIpOyBpJiM0MzsmIzQzOylcbm5ldC9zY2hlZC9hY3RfY3QuYzoxMjI6XHRcdHRjZl9jdF9hZGRfbWFuZ2xlX2FjdGlvbihhY3Rpb24sIEZMT1dfQUNUX01BTkdMRV9IRFJfVFlQRV9JUDYsXG5uZXQvc2NoZWQvYWN0X2N0LmMtMTIzLVx0XHRcdFx0XHQgaSAqIHNpemVvZih1MzIpICYjNDM7IG9mZnNldCxcbi0tXG5uZXQvc2NoZWQvYWN0X2N0LmM9MTI3PXN0YXRpYyB2b2lkXG5uZXQvc2NoZWQvYWN0X2N0LmM6MTI4OnRjZl9jdF9mbG93X3RhYmxlX2FkZF9hY3Rpb25fbmF0X2lwdjYoY29uc3Qgc3RydWN0IG5mX2Nvbm50cmFja190dXBsZSAqdHVwbGUsXG5uZXQvc2NoZWQvYWN0X2N0LmMtMTI5LVx0XHRcdFx0ICAgICAgc3RydWN0IG5mX2Nvbm50cmFja190dXBsZSB0YXJnZXQsXG4tLVxubmV0L3NjaGVkL2FjdF9jdC5jLTEzMi1cdGlmIChtZW1jbXAoXHUwMDI2dGFyZ2V0LnNyYy51MywgXHUwMDI2dHVwbGUtXHUwMDNlc3JjLnUzLCBzaXplb2YodGFyZ2V0LnNyYy51MykpKVxubmV0L3NjaGVkL2FjdF9jdC5jOjEzMzpcdFx0dGNmX2N0X2FkZF9pcHY2X2FkZHJfbWFuZ2xlX2FjdGlvbihhY3Rpb24sIFx1MDAyNnRhcmdldC5zcmMudTMsXG5uZXQvc2NoZWQvYWN0X2N0LmMtMTM0LVx0XHRcdFx0XHRcdCAgIG9mZnNldG9mKHN0cnVjdCBpcHY2aGRyLFxuLS1cbm5ldC9zY2hlZC9hY3RfY3QuYy0xMzYtXHRpZiAobWVtY21wKFx1MDAyNnRhcmdldC5kc3QudTMsIFx1MDAyNnR1cGxlLVx1MDAzZWRzdC51Mywgc2l6ZW9mKHRhcmdldC5kc3QudTMpKSlcbm5ldC9zY2hlZC9hY3RfY3QuYzoxMzc6XHRcdHRjZl9jdF9hZGRfaXB2Nl9hZGRyX21hbmdsZV9hY3Rpb24oYWN0aW9uLCBcdTAwMjZ0YXJnZXQuZHN0LnUzLFxubmV0L3NjaGVkL2FjdF9jdC5jLTEzOC1cdFx0XHRcdFx0XHQgICBvZmZzZXRvZihzdHJ1Y3QgaXB2Nmhkcixcbi0tXG5uZXQvc2NoZWQvYWN0X2N0LmM9MTQyPXN0YXRpYyB2b2lkXG5uZXQvc2NoZWQvYWN0X2N0LmM6MTQzOnRjZl9jdF9mbG93X3RhYmxlX2FkZF9hY3Rpb25fbmF0X3RjcChjb25zdCBzdHJ1Y3QgbmZfY29ubnRyYWNrX3R1cGxlICp0dXBsZSxcbm5ldC9zY2hlZC9hY3RfY3QuYy0xNDQtXHRcdFx0XHQgICAgIHN0cnVjdCBuZl9jb25udHJhY2tfdHVwbGUgdGFyZ2V0LFxuLS1cbm5ldC9zY2hlZC9hY3RfY3QuYy0xNTAtXHRpZiAodGFyZ2V0X3NyYyAhPSB0dXBsZS1cdTAwM2VzcmMudS50Y3AucG9ydClcbm5ldC9zY2hlZC9hY3RfY3QuYzoxNTE6XHRcdHRjZl9jdF9hZGRfbWFuZ2xlX2FjdGlvbihhY3Rpb24sIEZMT1dfQUNUX01BTkdMRV9IRFJfVFlQRV9UQ1AsXG5uZXQvc2NoZWQvYWN0X2N0LmMtMTUyLVx0XHRcdFx0XHQgb2Zmc2V0b2Yoc3RydWN0IHRjcGhkciwgc291cmNlKSxcbi0tXG5uZXQvc2NoZWQvYWN0X2N0LmMtMTU0LVx0aWYgKHRhcmdldF9kc3QgIT0gdHVwbGUtXHUwMDNlZHN0LnUudGNwLnBvcnQpXG5uZXQvc2NoZWQvYWN0X2N0LmM6MTU1Olx0XHR0Y2ZfY3RfYWRkX21hbmdsZV9hY3Rpb24oYWN0aW9uLCBGTE9XX0FDVF9NQU5HTEVfSERSX1RZUEVfVENQLFxubmV0L3NjaGVkL2FjdF9jdC5jLTE1Ni1cdFx0XHRcdFx0IG9mZnNldG9mKHN0cnVjdCB0Y3BoZHIsIGRlc3QpLFxuLS1cbm5ldC9zY2hlZC9hY3RfY3QuYz0xNjA9c3RhdGljIHZvaWRcbm5ldC9zY2hlZC9hY3RfY3QuYzoxNjE6dGNmX2N0X2Zsb3dfdGFibGVfYWRkX2FjdGlvbl9uYXRfdWRwKGNvbnN0IHN0cnVjdCBuZl9jb25udHJhY2tfdHVwbGUgKnR1cGxlLFxubmV0L3NjaGVkL2FjdF9jdC5jLTE2Mi1cdFx0XHRcdCAgICAgc3RydWN0IG5mX2Nvbm50cmFja190dXBsZSB0YXJnZXQsXG4tLVxubmV0L3NjaGVkL2FjdF9jdC5jLTE2OC1cdGlmICh0YXJnZXRfc3JjICE9IHR1cGxlLVx1MDAzZXNyYy51LnVkcC5wb3J0KVxubmV0L3NjaGVkL2FjdF9jdC5jOjE2OTpcdFx0dGNmX2N0X2FkZF9tYW5nbGVfYWN0aW9uKGFjdGlvbiwgRkxPV19BQ1RfTUFOR0xFX0hEUl9UWVBFX1VEUCxcbm5ldC9zY2hlZC9hY3RfY3QuYy0xNzAtXHRcdFx0XHRcdCBvZmZzZXRvZihzdHJ1Y3QgdWRwaGRyLCBzb3VyY2UpLFxuLS1cbm5ldC9zY2hlZC9hY3RfY3QuYy0xNzItXHRpZiAodGFyZ2V0X2RzdCAhPSB0dXBsZS1cdTAwM2Vkc3QudS51ZHAucG9ydClcbm5ldC9zY2hlZC9hY3RfY3QuYzoxNzM6XHRcdHRjZl9jdF9hZGRfbWFuZ2xlX2FjdGlvbihhY3Rpb24sIEZMT1dfQUNUX01BTkdMRV9IRFJfVFlQRV9VRFAsXG5uZXQvc2NoZWQvYWN0X2N0LmMtMTc0LVx0XHRcdFx0XHQgb2Zmc2V0b2Yoc3RydWN0IHVkcGhkciwgZGVzdCksXG4tLVxubmV0L3NjaGVkL2FjdF9jdC5jLTE3Ny1cbm5ldC9zY2hlZC9hY3RfY3QuYzoxNzg6c3RhdGljIHZvaWQgdGNmX2N0X2Zsb3dfdGFibGVfYWRkX2FjdGlvbl9tZXRhKHN0cnVjdCBuZl9jb25uICpjdCxcbm5ldC9zY2hlZC9hY3RfY3QuYy0xNzktXHRcdFx0XHRcdCAgICAgIGVudW0gaXBfY29ubnRyYWNrX2RpciBkaXIsXG4tLVxubmV0L3NjaGVkL2FjdF9jdC5jLTE4Ni1cbm5ldC9zY2hlZC9hY3RfY3QuYzoxODc6XHRlbnRyeSA9IHRjZl9jdF9mbG93X3RhYmxlX2Zsb3dfYWN0aW9uX2dldF9uZXh0KGFjdGlvbik7XG5uZXQvc2NoZWQvYWN0X2N0LmMtMTg4LVx0ZW50cnktXHUwMDNlaWQgPSBGTE9XX0FDVElPTl9DVF9NRVRBREFUQTtcbi0tXG5uZXQvc2NoZWQvYWN0X2N0LmMtMjAzLVxubmV0L3NjaGVkL2FjdF9jdC5jOjIwNDpzdGF0aWMgaW50IHRjZl9jdF9mbG93X3RhYmxlX2FkZF9hY3Rpb25fbmF0KHN0cnVjdCBuZXQgKm5ldCxcbm5ldC9zY2hlZC9hY3RfY3QuYy0yMDUtXHRcdFx0XHRcdCAgICBzdHJ1Y3QgbmZfY29ubiAqY3QsXG4tLVxubmV0L3NjaGVkL2FjdF9jdC5jLTIxOC1cdGNhc2UgTkZQUk9UT19JUFY0OlxubmV0L3NjaGVkL2FjdF9jdC5jOjIxOTpcdFx0dGNmX2N0X2Zsb3dfdGFibGVfYWRkX2FjdGlvbl9uYXRfaXB2NCh0dXBsZSwgdGFyZ2V0LFxubmV0L3NjaGVkL2FjdF9jdC5jLTIyMC1cdFx0XHRcdFx0XHQgICAgICBhY3Rpb24pO1xuLS1cbm5ldC9zY2hlZC9hY3RfY3QuYy0yMjItXHRjYXNlIE5GUFJPVE9fSVBWNjpcbm5ldC9zY2hlZC9hY3RfY3QuYzoyMjM6XHRcdHRjZl9jdF9mbG93X3RhYmxlX2FkZF9hY3Rpb25fbmF0X2lwdjYodHVwbGUsIHRhcmdldCxcbm5ldC9zY2hlZC9hY3RfY3QuYy0yMjQtXHRcdFx0XHRcdFx0ICAgICAgYWN0aW9uKTtcbi0tXG5uZXQvc2NoZWQvYWN0X2N0LmMtMjMxLVx0Y2FzZSBJUFBST1RPX1RDUDpcbm5ldC9zY2hlZC9hY3RfY3QuYzoyMzI6XHRcdHRjZl9jdF9mbG93X3RhYmxlX2FkZF9hY3Rpb25fbmF0X3RjcCh0dXBsZSwgdGFyZ2V0LCBhY3Rpb24pO1xubmV0L3NjaGVkL2FjdF9jdC5jLTIzMy1cdFx0YnJlYWs7XG5uZXQvc2NoZWQvYWN0X2N0LmMtMjM0LVx0Y2FzZSBJUFBST1RPX1VEUDpcbm5ldC9zY2hlZC9hY3RfY3QuYzoyMzU6XHRcdHRjZl9jdF9mbG93X3RhYmxlX2FkZF9hY3Rpb25fbmF0X3VkcCh0dXBsZSwgdGFyZ2V0LCBhY3Rpb24pO1xubmV0L3NjaGVkL2FjdF9jdC5jLTIzNi1cdFx0YnJlYWs7XG4tLVxubmV0L3NjaGVkL2FjdF9jdC5jLTI0My1cbm5ldC9zY2hlZC9hY3RfY3QuYzoyNDQ6c3RhdGljIGludCB0Y2ZfY3RfZmxvd190YWJsZV9maWxsX2FjdGlvbnMoc3RydWN0IG5ldCAqbmV0LFxubmV0L3NjaGVkL2FjdF9jdC5jLTI0NS1cdFx0XHRcdFx0ICBzdHJ1Y3QgZmxvd19vZmZsb2FkICpmbG93LFxuLS1cbm5ldC9zY2hlZC9hY3RfY3QuYy0yNzEtXG5uZXQvc2NoZWQvYWN0X2N0LmM6MjcyOlx0ZXJyID0gdGNmX2N0X2Zsb3dfdGFibGVfYWRkX2FjdGlvbl9uYXQobmV0LCBjdCwgZGlyLCBhY3Rpb24pO1xubmV0L3NjaGVkL2FjdF9jdC5jLTI3My1cdGlmIChlcnIpXG4tLVxubmV0L3NjaGVkL2FjdF9jdC5jLTI3NS1cbm5ldC9zY2hlZC9hY3RfY3QuYzoyNzY6XHR0Y2ZfY3RfZmxvd190YWJsZV9hZGRfYWN0aW9uX21ldGEoY3QsIGRpciwgY3RpbmZvLCBhY3Rpb24pO1xubmV0L3NjaGVkL2FjdF9jdC5jLTI3Ny1cdHJldHVybiAwO1xuLS1cbm5ldC9zY2hlZC9hY3RfY3QuYy0yODctXG5uZXQvc2NoZWQvYWN0X2N0LmM6Mjg4OnN0YXRpYyBib29sIHRjZl9jdF9mbG93X2lzX291dGRhdGVkKGNvbnN0IHN0cnVjdCBmbG93X29mZmxvYWQgKmZsb3cpXG5uZXQvc2NoZWQvYWN0X2N0LmMtMjg5LXtcbi0tXG5uZXQvc2NoZWQvYWN0X2N0LmMtMjk1LVxubmV0L3NjaGVkL2FjdF9jdC5jOjI5NjpzdGF0aWMgdm9pZCB0Y2ZfY3RfZmxvd190YWJsZV9nZXRfcmVmKHN0cnVjdCB0Y2ZfY3RfZmxvd190YWJsZSAqY3RfZnQpO1xubmV0L3NjaGVkL2FjdF9jdC5jLTI5Ny1cbm5ldC9zY2hlZC9hY3RfY3QuYzoyOTg6c3RhdGljIHZvaWQgdGNmX2N0X25mX2dldChzdHJ1Y3QgbmZfZmxvd3RhYmxlICpmdClcbm5ldC9zY2hlZC9hY3RfY3QuYy0yOTkte1xubmV0L3NjaGVkL2FjdF9jdC5jOjMwMDpcdHN0cnVjdCB0Y2ZfY3RfZmxvd190YWJsZSAqY3RfZnQgPVxubmV0L3NjaGVkL2FjdF9jdC5jOjMwMTpcdFx0Y29udGFpbmVyX29mKGZ0LCBzdHJ1Y3QgdGNmX2N0X2Zsb3dfdGFibGUsIG5mX2Z0KTtcbm5ldC9zY2hlZC9hY3RfY3QuYy0zMDItXG5uZXQvc2NoZWQvYWN0X2N0LmM6MzAzOlx0dGNmX2N0X2Zsb3dfdGFibGVfZ2V0X3JlZihjdF9mdCk7XG5uZXQvc2NoZWQvYWN0X2N0LmMtMzA0LX1cbm5ldC9zY2hlZC9hY3RfY3QuYy0zMDUtXG5uZXQvc2NoZWQvYWN0X2N0LmM6MzA2OnN0YXRpYyB2b2lkIHRjZl9jdF9mbG93X3RhYmxlX3B1dChzdHJ1Y3QgdGNmX2N0X2Zsb3dfdGFibGUgKmN0X2Z0KTtcbm5ldC9zY2hlZC9hY3RfY3QuYy0zMDctXG5uZXQvc2NoZWQvYWN0X2N0LmM6MzA4OnN0YXRpYyB2b2lkIHRjZl9jdF9uZl9wdXQoc3RydWN0IG5mX2Zsb3d0YWJsZSAqZnQpXG5uZXQvc2NoZWQvYWN0X2N0LmMtMzA5LXtcbm5ldC9zY2hlZC9hY3RfY3QuYzozMTA6XHRzdHJ1Y3QgdGNmX2N0X2Zsb3dfdGFibGUgKmN0X2Z0ID1cbm5ldC9zY2hlZC9hY3RfY3QuYzozMTE6XHRcdGNvbnRhaW5lcl9vZihmdCwgc3RydWN0IHRjZl9jdF9mbG93X3RhYmxlLCBuZl9mdCk7XG5uZXQvc2NoZWQvYWN0X2N0LmMtMzEyLVxubmV0L3NjaGVkL2FjdF9jdC5jOjMxMzpcdHRjZl9jdF9mbG93X3RhYmxlX3B1dChjdF9mdCk7XG5uZXQvc2NoZWQvYWN0X2N0LmMtMzE0LX1cbi0tXG5uZXQvc2NoZWQvYWN0X2N0LmM9MzE2PXN0YXRpYyBzdHJ1Y3QgbmZfZmxvd3RhYmxlX3R5cGUgZmxvd3RhYmxlX2N0ID0ge1xubmV0L3NjaGVkL2FjdF9jdC5jOjMxNzpcdC5nY1x0XHQ9IHRjZl9jdF9mbG93X2lzX291dGRhdGVkLFxubmV0L3NjaGVkL2FjdF9jdC5jOjMxODpcdC5hY3Rpb25cdFx0PSB0Y2ZfY3RfZmxvd190YWJsZV9maWxsX2FjdGlvbnMsXG5uZXQvc2NoZWQvYWN0X2N0LmM6MzE5Olx0LmdldFx0XHQ9IHRjZl9jdF9uZl9nZXQsXG5uZXQvc2NoZWQvYWN0X2N0LmM6MzIwOlx0LnB1dFx0XHQ9IHRjZl9jdF9uZl9wdXQsXG5uZXQvc2NoZWQvYWN0X2N0LmMtMzIxLVx0Lm93bmVyXHRcdD0gVEhJU19NT0RVTEUsXG4tLVxubmV0L3NjaGVkL2FjdF9jdC5jLTMyMy1cbm5ldC9zY2hlZC9hY3RfY3QuYzozMjQ6c3RhdGljIGludCB0Y2ZfY3RfZmxvd190YWJsZV9nZXQoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgdGNmX2N0X3BhcmFtcyAqcGFyYW1zKVxubmV0L3NjaGVkL2FjdF9jdC5jLTMyNS17XG5uZXQvc2NoZWQvYWN0X2N0LmMtMzI2LVx0c3RydWN0IHpvbmVzX2h0X2tleSBrZXkgPSB7IC5uZXQgPSBuZXQsIC56b25lID0gcGFyYW1zLVx1MDAzZXpvbmUgfTtcbm5ldC9zY2hlZC9hY3RfY3QuYzozMjc6XHRzdHJ1Y3QgdGNmX2N0X2Zsb3dfdGFibGUgKmN0X2Z0O1xubmV0L3NjaGVkL2FjdF9jdC5jLTMyOC1cdGludCBlcnIgPSAtRU5PTUVNO1xuLS1cbm5ldC9zY2hlZC9hY3RfY3QuYy0zNzMtXG5uZXQvc2NoZWQvYWN0X2N0LmM6Mzc0OnN0YXRpYyB2b2lkIHRjZl9jdF9mbG93X3RhYmxlX2dldF9yZWYoc3RydWN0IHRjZl9jdF9mbG93X3RhYmxlICpjdF9mdClcbm5ldC9zY2hlZC9hY3RfY3QuYy0zNzUte1xuLS1cbm5ldC9zY2hlZC9hY3RfY3QuYy0zNzgtXG5uZXQvc2NoZWQvYWN0X2N0LmM6Mzc5OnN0YXRpYyB2b2lkIHRjZl9jdF9mbG93X3RhYmxlX2NsZWFudXBfd29yayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXG5uZXQvc2NoZWQvYWN0X2N0LmMtMzgwLXtcbm5ldC9zY2hlZC9hY3RfY3QuYzozODE6XHRzdHJ1Y3QgdGNmX2N0X2Zsb3dfdGFibGUgKmN0X2Z0O1xubmV0L3NjaGVkL2FjdF9jdC5jLTM4Mi1cdHN0cnVjdCBmbG93X2Jsb2NrICpibG9jaztcbm5ldC9zY2hlZC9hY3RfY3QuYy0zODMtXG5uZXQvc2NoZWQvYWN0X2N0LmM6Mzg0Olx0Y3RfZnQgPSBjb250YWluZXJfb2YodG9fcmN1X3dvcmsod29yayksIHN0cnVjdCB0Y2ZfY3RfZmxvd190YWJsZSxcbm5ldC9zY2hlZC9hY3RfY3QuYy0zODUtXHRcdFx0ICAgICByd29yayk7XG4tLVxubmV0L3NjaGVkL2FjdF9jdC5jLTM5Ni1cbm5ldC9zY2hlZC9hY3RfY3QuYzozOTc6c3RhdGljIHZvaWQgdGNmX2N0X2Zsb3dfdGFibGVfcHV0KHN0cnVjdCB0Y2ZfY3RfZmxvd190YWJsZSAqY3RfZnQpXG5uZXQvc2NoZWQvYWN0X2N0LmMtMzk4LXtcbi0tXG5uZXQvc2NoZWQvYWN0X2N0LmMtNDAwLVx0XHRyaGFzaHRhYmxlX3JlbW92ZV9mYXN0KFx1MDAyNnpvbmVzX2h0LCBcdTAwMjZjdF9mdC1cdTAwM2Vub2RlLCB6b25lc19wYXJhbXMpO1xubmV0L3NjaGVkL2FjdF9jdC5jOjQwMTpcdFx0SU5JVF9SQ1VfV09SSyhcdTAwMjZjdF9mdC1cdTAwM2Vyd29yaywgdGNmX2N0X2Zsb3dfdGFibGVfY2xlYW51cF93b3JrKTtcbm5ldC9zY2hlZC9hY3RfY3QuYy00MDItXHRcdHF1ZXVlX3JjdV93b3JrKGFjdF9jdF93cSwgXHUwMDI2Y3RfZnQtXHUwMDNlcndvcmspO1xuLS1cbm5ldC9zY2hlZC9hY3RfY3QuYy00MDUtXG5uZXQvc2NoZWQvYWN0X2N0LmM6NDA2OnN0YXRpYyB2b2lkIHRjZl9jdF9mbG93X3RjX2lmaWR4KHN0cnVjdCBmbG93X29mZmxvYWQgKmVudHJ5LFxubmV0L3NjaGVkL2FjdF9jdC5jLTQwNy1cdFx0XHRcdCBzdHJ1Y3QgbmZfY29ubl9hY3RfY3RfZXh0ICphY3RfY3RfZXh0LCB1OCBkaXIpXG4tLVxubmV0L3NjaGVkL2FjdF9jdC5jLTQxMi1cbm5ldC9zY2hlZC9hY3RfY3QuYzo0MTM6c3RhdGljIHZvaWQgdGNmX2N0X2Zsb3dfY3RfZXh0X2lmaWR4X3VwZGF0ZShzdHJ1Y3QgZmxvd19vZmZsb2FkICplbnRyeSlcbm5ldC9zY2hlZC9hY3RfY3QuYy00MTQte1xuLS1cbm5ldC9zY2hlZC9hY3RfY3QuYy00MTgtXHRpZiAoYWN0X2N0X2V4dCkge1xubmV0L3NjaGVkL2FjdF9jdC5jOjQxOTpcdFx0dGNmX2N0X2Zsb3dfdGNfaWZpZHgoZW50cnksIGFjdF9jdF9leHQsIEZMT1dfT0ZGTE9BRF9ESVJfT1JJR0lOQUwpO1xubmV0L3NjaGVkL2FjdF9jdC5jOjQyMDpcdFx0dGNmX2N0X2Zsb3dfdGNfaWZpZHgoZW50cnksIGFjdF9jdF9leHQsIEZMT1dfT0ZGTE9BRF9ESVJfUkVQTFkpO1xubmV0L3NjaGVkL2FjdF9jdC5jLTQyMS1cdH1cbi0tXG5uZXQvc2NoZWQvYWN0X2N0LmMtNDIzLVxubmV0L3NjaGVkL2FjdF9jdC5jOjQyNDpzdGF0aWMgdm9pZCB0Y2ZfY3RfZmxvd190YWJsZV9hZGQoc3RydWN0IHRjZl9jdF9mbG93X3RhYmxlICpjdF9mdCxcbm5ldC9zY2hlZC9hY3RfY3QuYy00MjUtXHRcdFx0XHQgIHN0cnVjdCBuZl9jb25uICpjdCxcbi0tXG5uZXQvc2NoZWQvYWN0X2N0LmMtNDQ5LVx0aWYgKGFjdF9jdF9leHQpIHtcbm5ldC9zY2hlZC9hY3RfY3QuYzo0NTA6XHRcdHRjZl9jdF9mbG93X3RjX2lmaWR4KGVudHJ5LCBhY3RfY3RfZXh0LCBGTE9XX09GRkxPQURfRElSX09SSUdJTkFMKTtcbm5ldC9zY2hlZC9hY3RfY3QuYzo0NTE6XHRcdHRjZl9jdF9mbG93X3RjX2lmaWR4KGVudHJ5LCBhY3RfY3RfZXh0LCBGTE9XX09GRkxPQURfRElSX1JFUExZKTtcbm5ldC9zY2hlZC9hY3RfY3QuYy00NTItXHR9XG4tLVxubmV0L3NjaGVkL2FjdF9jdC5jLTQ2NS1cbm5ldC9zY2hlZC9hY3RfY3QuYzo0NjY6c3RhdGljIHZvaWQgdGNmX2N0X2Zsb3dfdGFibGVfcHJvY2Vzc19jb25uKHN0cnVjdCB0Y2ZfY3RfZmxvd190YWJsZSAqY3RfZnQsXG5uZXQvc2NoZWQvYWN0X2N0LmMtNDY3LVx0XHRcdFx0XHQgICBzdHJ1Y3QgbmZfY29ubiAqY3QsXG4tLVxubmV0L3NjaGVkL2FjdF9jdC5jLTUxMi1cbm5ldC9zY2hlZC9hY3RfY3QuYzo1MTM6XHR0Y2ZfY3RfZmxvd190YWJsZV9hZGQoY3RfZnQsIGN0LCB0Y3AsIGJpZGlyZWN0aW9uYWwpO1xubmV0L3NjaGVkL2FjdF9jdC5jLTUxNC19XG4tLVxubmV0L3NjaGVkL2FjdF9jdC5jPTUxNj1zdGF0aWMgYm9vbFxubmV0L3NjaGVkL2FjdF9jdC5jOjUxNzp0Y2ZfY3RfZmxvd190YWJsZV9maWxsX3R1cGxlX2lwdjQoc3RydWN0IHNrX2J1ZmYgKnNrYixcbm5ldC9zY2hlZC9hY3RfY3QuYy01MTgtXHRcdFx0XHQgIHN0cnVjdCBmbG93X29mZmxvYWRfdHVwbGUgKnR1cGxlLFxuLS1cbm5ldC9zY2hlZC9hY3RfY3QuYz01ODk9c3RhdGljIGJvb2xcbm5ldC9zY2hlZC9hY3RfY3QuYzo1OTA6dGNmX2N0X2Zsb3dfdGFibGVfZmlsbF90dXBsZV9pcHY2KHN0cnVjdCBza19idWZmICpza2IsXG5uZXQvc2NoZWQvYWN0X2N0LmMtNTkxLVx0XHRcdFx0ICBzdHJ1Y3QgZmxvd19vZmZsb2FkX3R1cGxlICp0dXBsZSxcbi0tXG5uZXQvc2NoZWQvYWN0X2N0LmMtNjU3LVxubmV0L3NjaGVkL2FjdF9jdC5jOjY1ODpzdGF0aWMgYm9vbCB0Y2ZfY3RfZmxvd190YWJsZV9sb29rdXAoc3RydWN0IHRjZl9jdF9wYXJhbXMgKnAsXG5uZXQvc2NoZWQvYWN0X2N0LmMtNjU5LVx0XHRcdFx0ICAgICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuLS1cbm5ldC9zY2hlZC9hY3RfY3QuYy02NzMtXHRjYXNlIE5GUFJPVE9fSVBWNDpcbm5ldC9zY2hlZC9hY3RfY3QuYzo2NzQ6XHRcdGlmICghdGNmX2N0X2Zsb3dfdGFibGVfZmlsbF90dXBsZV9pcHY0KHNrYiwgXHUwMDI2dHVwbGUsIFx1MDAyNnRjcGgpKVxubmV0L3NjaGVkL2FjdF9jdC5jLTY3NS1cdFx0XHRyZXR1cm4gZmFsc2U7XG4tLVxubmV0L3NjaGVkL2FjdF9jdC5jLTY3Ny1cdGNhc2UgTkZQUk9UT19JUFY2OlxubmV0L3NjaGVkL2FjdF9jdC5jOjY3ODpcdFx0aWYgKCF0Y2ZfY3RfZmxvd190YWJsZV9maWxsX3R1cGxlX2lwdjYoc2tiLCBcdTAwMjZ0dXBsZSwgXHUwMDI2dGNwaCkpXG5uZXQvc2NoZWQvYWN0X2N0LmMtNjc5LVx0XHRcdHJldHVybiBmYWxzZTtcbi0tXG5uZXQvc2NoZWQvYWN0X2N0LmMtNzE5LVx0bmZfY29ubl9hY3RfY3RfZXh0X2ZpbGwoc2tiLCBjdCwgY3RpbmZvKTtcbm5ldC9zY2hlZC9hY3RfY3QuYzo3MjA6XHR0Y2ZfY3RfZmxvd19jdF9leHRfaWZpZHhfdXBkYXRlKGZsb3cpO1xubmV0L3NjaGVkL2FjdF9jdC5jLTcyMS1cdGZsb3dfb2ZmbG9hZF9yZWZyZXNoKG5mX2Z0LCBmbG93LCBmb3JjZV9yZWZyZXNoKTtcbi0tXG5uZXQvc2NoZWQvYWN0X2N0LmMtNzM0LVxubmV0L3NjaGVkL2FjdF9jdC5jOjczNTpzdGF0aWMgaW50IHRjZl9jdF9mbG93X3RhYmxlc19pbml0KHZvaWQpXG5uZXQvc2NoZWQvYWN0X2N0LmMtNzM2LXtcbi0tXG5uZXQvc2NoZWQvYWN0X2N0LmMtNzM5LVxubmV0L3NjaGVkL2FjdF9jdC5jOjc0MDpzdGF0aWMgdm9pZCB0Y2ZfY3RfZmxvd190YWJsZXNfdW5pbml0KHZvaWQpXG5uZXQvc2NoZWQvYWN0X2N0LmMtNzQxLXtcbi0tXG5uZXQvc2NoZWQvYWN0X2N0LmM9NzQ3PXN0cnVjdCB0Y19jdF9hY3Rpb25fbmV0IHtcbi0tXG5uZXQvc2NoZWQvYWN0X2N0LmMtNzUxLS8qIERldGVybWluZSB3aGV0aGVyIHNrYi1cdTAwM2VfbmZjdCBpcyBlcXVhbCB0byB0aGUgcmVzdWx0IG9mIGNvbm50cmFjayBsb29rdXAuICovXG5uZXQvc2NoZWQvYWN0X2N0LmM6NzUyOnN0YXRpYyBib29sIHRjZl9jdF9za2JfbmZjdF9jYWNoZWQoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxubmV0L3NjaGVkL2FjdF9jdC5jOjc1MzpcdFx0XHRcdCAgIHN0cnVjdCB0Y2ZfY3RfcGFyYW1zICpwKVxubmV0L3NjaGVkL2FjdF9jdC5jLTc1NC17XG4tLVxubmV0L3NjaGVkL2FjdF9jdC5jLTc5MC1cbm5ldC9zY2hlZC9hY3RfY3QuYzo3OTE6c3RhdGljIHU4IHRjZl9jdF9za2JfbmZfZmFtaWx5KHN0cnVjdCBza19idWZmICpza2IpXG5uZXQvc2NoZWQvYWN0X2N0LmMtNzkyLXtcbi0tXG5uZXQvc2NoZWQvYWN0X2N0LmMtODA4LVxubmV0L3NjaGVkL2FjdF9jdC5jOjgwOTpzdGF0aWMgaW50IHRjZl9jdF9pcHY0X2lzX2ZyYWdtZW50KHN0cnVjdCBza19idWZmICpza2IsIGJvb2wgKmZyYWcpXG5uZXQvc2NoZWQvYWN0X2N0LmMtODEwLXtcbi0tXG5uZXQvc2NoZWQvYWN0X2N0LmMtODIyLVxubmV0L3NjaGVkL2FjdF9jdC5jOjgyMzpzdGF0aWMgaW50IHRjZl9jdF9pcHY2X2lzX2ZyYWdtZW50KHN0cnVjdCBza19idWZmICpza2IsIGJvb2wgKmZyYWcpXG5uZXQvc2NoZWQvYWN0X2N0LmMtODI0LXtcbi0tXG5uZXQvc2NoZWQvYWN0X2N0LmMtODQ4LSAqL1xubmV0L3NjaGVkL2FjdF9jdC5jOjg0OTpzdGF0aWMgaW50IHRjZl9jdF9oYW5kbGVfZnJhZ21lbnRzKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHNrX2J1ZmYgKnNrYixcbm5ldC9zY2hlZC9hY3RfY3QuYy04NTAtXHRcdFx0XHQgICB1OCBmYW1pbHksIHUxNiB6b25lLCBib29sICpkZWZyYWcsXG4tLVxubmV0L3NjaGVkL2FjdF9jdC5jLTg2NS1cdGlmIChmYW1pbHkgPT0gTkZQUk9UT19JUFY0KVxubmV0L3NjaGVkL2FjdF9jdC5jOjg2NjpcdFx0ZXJyID0gdGNmX2N0X2lwdjRfaXNfZnJhZ21lbnQoc2tiLCBcdTAwMjZmcmFnKTtcbm5ldC9zY2hlZC9hY3RfY3QuYy04NjctXHRlbHNlXG5uZXQvc2NoZWQvYWN0X2N0LmM6ODY4Olx0XHRlcnIgPSB0Y2ZfY3RfaXB2Nl9pc19mcmFnbWVudChza2IsIFx1MDAyNmZyYWcpO1xubmV0L3NjaGVkL2FjdF9jdC5jLTg2OS1cdGlmIChlcnIpIHtcbi0tXG5uZXQvc2NoZWQvYWN0X2N0LmMtODg2LVxubmV0L3NjaGVkL2FjdF9jdC5jOjg4NzpzdGF0aWMgdm9pZCB0Y2ZfY3RfcGFyYW1zX2ZyZWUoc3RydWN0IHRjZl9jdF9wYXJhbXMgKnBhcmFtcylcbm5ldC9zY2hlZC9hY3RfY3QuYy04ODgte1xuLS1cbm5ldC9zY2hlZC9hY3RfY3QuYy04OTYtXHRpZiAocGFyYW1zLVx1MDAzZWN0X2Z0KVxubmV0L3NjaGVkL2FjdF9jdC5jOjg5NzpcdFx0dGNmX2N0X2Zsb3dfdGFibGVfcHV0KHBhcmFtcy1cdTAwM2VjdF9mdCk7XG5uZXQvc2NoZWQvYWN0X2N0LmMtODk4LVx0aWYgKHBhcmFtcy1cdTAwM2V0bXBsKSB7XG4tLVxubmV0L3NjaGVkL2FjdF9jdC5jLTkwNy1cbm5ldC9zY2hlZC9hY3RfY3QuYzo5MDg6c3RhdGljIHZvaWQgdGNmX2N0X3BhcmFtc19mcmVlX3JjdShzdHJ1Y3QgcmN1X2hlYWQgKmhlYWQpXG5uZXQvc2NoZWQvYWN0X2N0LmMtOTA5LXtcbm5ldC9zY2hlZC9hY3RfY3QuYzo5MTA6XHRzdHJ1Y3QgdGNmX2N0X3BhcmFtcyAqcGFyYW1zO1xubmV0L3NjaGVkL2FjdF9jdC5jLTkxMS1cbm5ldC9zY2hlZC9hY3RfY3QuYzo5MTI6XHRwYXJhbXMgPSBjb250YWluZXJfb2YoaGVhZCwgc3RydWN0IHRjZl9jdF9wYXJhbXMsIHJjdSk7XG5uZXQvc2NoZWQvYWN0X2N0LmM6OTEzOlx0dGNmX2N0X3BhcmFtc19mcmVlKHBhcmFtcyk7XG5uZXQvc2NoZWQvYWN0X2N0LmMtOTE0LX1cbm5ldC9zY2hlZC9hY3RfY3QuYy05MTUtXG5uZXQvc2NoZWQvYWN0X2N0LmM6OTE2OnN0YXRpYyB2b2lkIHRjZl9jdF9hY3Rfc2V0X21hcmsoc3RydWN0IG5mX2Nvbm4gKmN0LCB1MzIgbWFyaywgdTMyIG1hc2spXG5uZXQvc2NoZWQvYWN0X2N0LmMtOTE3LXtcbi0tXG5uZXQvc2NoZWQvYWN0X2N0LmMtOTMyLVxubmV0L3NjaGVkL2FjdF9jdC5jOjkzMzpzdGF0aWMgdm9pZCB0Y2ZfY3RfYWN0X3NldF9sYWJlbHMoc3RydWN0IG5mX2Nvbm4gKmN0LFxubmV0L3NjaGVkL2FjdF9jdC5jLTkzNC1cdFx0XHRcdCAgdTMyICpsYWJlbHMsXG4tLVxubmV0L3NjaGVkL2FjdF9jdC5jLTkzNy0jaWYgSVNfRU5BQkxFRChDT05GSUdfTkZfQ09OTlRSQUNLX0xBQkVMUylcbm5ldC9zY2hlZC9hY3RfY3QuYzo5Mzg6XHRzaXplX3QgbGFiZWxzX3N6ID0gc2l6ZW9mX2ZpZWxkKHN0cnVjdCB0Y2ZfY3RfcGFyYW1zLCBsYWJlbHMpO1xubmV0L3NjaGVkL2FjdF9jdC5jLTkzOS1cbi0tXG5uZXQvc2NoZWQvYWN0X2N0LmMtOTQ2LVxubmV0L3NjaGVkL2FjdF9jdC5jOjk0NzpzdGF0aWMgaW50IHRjZl9jdF9hY3RfbmF0KHN0cnVjdCBza19idWZmICpza2IsXG5uZXQvc2NoZWQvYWN0X2N0LmMtOTQ4LVx0XHRcdCAgc3RydWN0IG5mX2Nvbm4gKmN0LFxuLS1cbm5ldC9zY2hlZC9hY3RfY3QuYy05NzgtXG5uZXQvc2NoZWQvYWN0X2N0LmM6OTc5OlRDX0lORElSRUNUX1NDT1BFIGludCB0Y2ZfY3RfYWN0KHN0cnVjdCBza19idWZmICpza2IsIGNvbnN0IHN0cnVjdCB0Y19hY3Rpb24gKmEsXG5uZXQvc2NoZWQvYWN0X2N0LmMtOTgwLVx0XHRcdFx0IHN0cnVjdCB0Y2ZfcmVzdWx0ICpyZXMpXG4tLVxubmV0L3NjaGVkL2FjdF9jdC5jLTk4OC1cdGludCBuaF9vZnMsIGVyciwgcmV0dmFsO1xubmV0L3NjaGVkL2FjdF9jdC5jOjk4OTpcdHN0cnVjdCB0Y2ZfY3RfcGFyYW1zICpwO1xubmV0L3NjaGVkL2FjdF9jdC5jLTk5MC1cdGJvb2wgYWRkX2hlbHBlciA9IGZhbHNlO1xuLS1cbm5ldC9zY2hlZC9hY3RfY3QuYy0xMDE3LVxubmV0L3NjaGVkL2FjdF9jdC5jOjEwMTg6XHRmYW1pbHkgPSB0Y2ZfY3Rfc2tiX25mX2ZhbWlseShza2IpO1xubmV0L3NjaGVkL2FjdF9jdC5jLTEwMTktXHRpZiAoZmFtaWx5ID09IE5GUFJPVE9fVU5TUEVDKVxuLS1cbm5ldC9zY2hlZC9hY3RfY3QuYy0xMDI2LVx0c2tiX3B1bGxfcmNzdW0oc2tiLCBuaF9vZnMpO1xubmV0L3NjaGVkL2FjdF9jdC5jOjEwMjc6XHRlcnIgPSB0Y2ZfY3RfaGFuZGxlX2ZyYWdtZW50cyhuZXQsIHNrYiwgZmFtaWx5LCBwLVx1MDAzZXpvbmUsIFx1MDAyNmRlZnJhZyxcbm5ldC9zY2hlZC9hY3RfY3QuYy0xMDI4LVx0XHRcdFx0ICAgICAgXHUwMDI2c2tiX2lzX291cnMpO1xuLS1cbm5ldC9zY2hlZC9hY3RfY3QuYy0xMDQ4LVx0ICovXG5uZXQvc2NoZWQvYWN0X2N0LmM6MTA0OTpcdGNhY2hlZCA9IHRjZl9jdF9za2JfbmZjdF9jYWNoZWQobmV0LCBza2IsIHApO1xubmV0L3NjaGVkL2FjdF9jdC5jLTEwNTAtXHRpZiAoIWNhY2hlZCkge1xubmV0L3NjaGVkL2FjdF9jdC5jOjEwNTE6XHRcdGlmICh0Y2ZfY3RfZmxvd190YWJsZV9sb29rdXAocCwgc2tiLCBmYW1pbHkpKSB7XG5uZXQvc2NoZWQvYWN0X2N0LmMtMTA1Mi1cdFx0XHRza2lwX2FkZCA9IHRydWU7XG4tLVxubmV0L3NjaGVkL2FjdF9jdC5jLTEwNzctXG5uZXQvc2NoZWQvYWN0X2N0LmM6MTA3ODpcdGVyciA9IHRjZl9jdF9hY3RfbmF0KHNrYiwgY3QsIGN0aW5mbywgcC1cdTAwM2VjdF9hY3Rpb24sIFx1MDAyNnAtXHUwMDNlcmFuZ2UsIGNvbW1pdCk7XG5uZXQvc2NoZWQvYWN0X2N0LmMtMTA3OS1cdGlmIChlcnIgIT0gTkZfQUNDRVBUKVxuLS1cbm5ldC9zY2hlZC9hY3RfY3QuYy0xMDk5LVx0aWYgKGNvbW1pdCkge1xubmV0L3NjaGVkL2FjdF9jdC5jOjExMDA6XHRcdHRjZl9jdF9hY3Rfc2V0X21hcmsoY3QsIHAtXHUwMDNlbWFyaywgcC1cdTAwM2VtYXJrX21hc2spO1xubmV0L3NjaGVkL2FjdF9jdC5jOjExMDE6XHRcdHRjZl9jdF9hY3Rfc2V0X2xhYmVscyhjdCwgcC1cdTAwM2VsYWJlbHMsIHAtXHUwMDNlbGFiZWxzX21hc2spO1xubmV0L3NjaGVkL2FjdF9jdC5jLTExMDItXG4tLVxubmV0L3NjaGVkL2FjdF9jdC5jLTExMjItXHRpZiAoIXNraXBfYWRkKVxubmV0L3NjaGVkL2FjdF9jdC5jOjExMjM6XHRcdHRjZl9jdF9mbG93X3RhYmxlX3Byb2Nlc3NfY29ubihwLVx1MDAzZWN0X2Z0LCBjdCwgY3RpbmZvKTtcbm5ldC9zY2hlZC9hY3RfY3QuYy0xMTI0LVxuLS1cbm5ldC9zY2hlZC9hY3RfY3QuYz0xMTYwPXN0YXRpYyBjb25zdCBzdHJ1Y3QgbmxhX3BvbGljeSBjdF9wb2xpY3lbVENBX0NUX01BWCAmIzQzOyAxXSA9IHtcbi0tXG5uZXQvc2NoZWQvYWN0X2N0LmMtMTE4MC1cbm5ldC9zY2hlZC9hY3RfY3QuYzoxMTgxOnN0YXRpYyBpbnQgdGNmX2N0X2ZpbGxfcGFyYW1zX25hdChzdHJ1Y3QgdGNmX2N0X3BhcmFtcyAqcCxcbm5ldC9zY2hlZC9hY3RfY3QuYy0xMTgyLVx0XHRcdFx0ICBzdHJ1Y3QgdGNfY3QgKnBhcm0sXG4tLVxubmV0L3NjaGVkL2FjdF9jdC5jLTEyNDAtXG5uZXQvc2NoZWQvYWN0X2N0LmM6MTI0MTpzdGF0aWMgdm9pZCB0Y2ZfY3Rfc2V0X2tleV92YWwoc3RydWN0IG5sYXR0ciAqKnRiLFxubmV0L3NjaGVkL2FjdF9jdC5jLTEyNDItXHRcdFx0ICAgICAgIHZvaWQgKnZhbCwgaW50IHZhbF90eXBlLFxuLS1cbm5ldC9zY2hlZC9hY3RfY3QuYy0xMjU4LVxubmV0L3NjaGVkL2FjdF9jdC5jOjEyNTk6c3RhdGljIGludCB0Y2ZfY3RfZmlsbF9wYXJhbXMoc3RydWN0IG5ldCAqbmV0LFxubmV0L3NjaGVkL2FjdF9jdC5jOjEyNjA6XHRcdFx0ICAgICAgc3RydWN0IHRjZl9jdF9wYXJhbXMgKnAsXG5uZXQvc2NoZWQvYWN0X2N0LmMtMTI2MS1cdFx0XHQgICAgICBzdHJ1Y3QgdGNfY3QgKnBhcm0sXG4tLVxubmV0L3NjaGVkL2FjdF9jdC5jLTEyNzItXG5uZXQvc2NoZWQvYWN0X2N0LmM6MTI3MzpcdHRjZl9jdF9zZXRfa2V5X3ZhbCh0Yixcbm5ldC9zY2hlZC9hY3RfY3QuYy0xMjc0LVx0XHRcdCAgIFx1MDAyNnAtXHUwMDNlY3RfYWN0aW9uLCBUQ0FfQ1RfQUNUSU9OLFxuLS1cbm5ldC9zY2hlZC9hY3RfY3QuYy0xMjgwLVxubmV0L3NjaGVkL2FjdF9jdC5jOjEyODE6XHRlcnIgPSB0Y2ZfY3RfZmlsbF9wYXJhbXNfbmF0KHAsIHBhcm0sIHRiLCBleHRhY2spO1xubmV0L3NjaGVkL2FjdF9jdC5jLTEyODItXHRpZiAoZXJyKVxuLS1cbm5ldC9zY2hlZC9hY3RfY3QuYy0xMjg5LVx0XHR9XG5uZXQvc2NoZWQvYWN0X2N0LmM6MTI5MDpcdFx0dGNmX2N0X3NldF9rZXlfdmFsKHRiLFxubmV0L3NjaGVkL2FjdF9jdC5jLTEyOTEtXHRcdFx0XHQgICBcdTAwMjZwLVx1MDAzZW1hcmssIFRDQV9DVF9NQVJLLFxuLS1cbm5ldC9zY2hlZC9hY3RfY3QuYy0xMjk2LVx0aWYgKHRiW1RDQV9DVF9MQUJFTFNdKSB7XG5uZXQvc2NoZWQvYWN0X2N0LmM6MTI5NzpcdFx0dW5zaWduZWQgaW50IG5fYml0cyA9IHNpemVvZl9maWVsZChzdHJ1Y3QgdGNmX2N0X3BhcmFtcywgbGFiZWxzKSAqIDg7XG5uZXQvc2NoZWQvYWN0X2N0LmMtMTI5OC1cbi0tXG5uZXQvc2NoZWQvYWN0X2N0LmMtMTMxMC1cbm5ldC9zY2hlZC9hY3RfY3QuYzoxMzExOlx0XHR0Y2ZfY3Rfc2V0X2tleV92YWwodGIsXG5uZXQvc2NoZWQvYWN0X2N0LmMtMTMxMi1cdFx0XHRcdCAgIHAtXHUwMDNlbGFiZWxzLCBUQ0FfQ1RfTEFCRUxTLFxuLS1cbm5ldC9zY2hlZC9hY3RfY3QuYy0xMzIzLVxubmV0L3NjaGVkL2FjdF9jdC5jOjEzMjQ6XHRcdHRjZl9jdF9zZXRfa2V5X3ZhbCh0Yixcbm5ldC9zY2hlZC9hY3RfY3QuYy0xMzI1LVx0XHRcdFx0ICAgXHUwMDI2cC1cdTAwM2V6b25lLCBUQ0FfQ1RfWk9ORSxcbi0tXG5uZXQvc2NoZWQvYWN0X2N0LmMtMTM3MC1cbm5ldC9zY2hlZC9hY3RfY3QuYzoxMzcxOnN0YXRpYyBpbnQgdGNmX2N0X2luaXQoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgbmxhdHRyICpubGEsXG5uZXQvc2NoZWQvYWN0X2N0LmMtMTM3Mi1cdFx0ICAgICAgIHN0cnVjdCBubGF0dHIgKmVzdCwgc3RydWN0IHRjX2FjdGlvbiAqKmEsXG4tLVxubmV0L3NjaGVkL2FjdF9jdC5jLTEzNzctXHRib29sIGJpbmQgPSBmbGFncyBcdTAwMjYgVENBX0FDVF9GTEFHU19CSU5EO1xubmV0L3NjaGVkL2FjdF9jdC5jOjEzNzg6XHRzdHJ1Y3QgdGNmX2N0X3BhcmFtcyAqcGFyYW1zID0gTlVMTDtcbm5ldC9zY2hlZC9hY3RfY3QuYy0xMzc5LVx0c3RydWN0IG5sYXR0ciAqdGJbVENBX0NUX01BWCAmIzQzOyAxXTtcbi0tXG5uZXQvc2NoZWQvYWN0X2N0LmMtMTQzOS1cbm5ldC9zY2hlZC9hY3RfY3QuYzoxNDQwOlx0ZXJyID0gdGNmX2N0X2ZpbGxfcGFyYW1zKG5ldCwgcGFyYW1zLCBwYXJtLCB0YiwgZXh0YWNrKTtcbm5ldC9zY2hlZC9hY3RfY3QuYy0xNDQxLVx0aWYgKGVycilcbi0tXG5uZXQvc2NoZWQvYWN0X2N0LmMtMTQ0My1cbm5ldC9zY2hlZC9hY3RfY3QuYzoxNDQ0Olx0ZXJyID0gdGNmX2N0X2Zsb3dfdGFibGVfZ2V0KG5ldCwgcGFyYW1zKTtcbm5ldC9zY2hlZC9hY3RfY3QuYy0xNDQ1LVx0aWYgKGVycilcbi0tXG5uZXQvc2NoZWQvYWN0X2N0LmMtMTQ1Ny1cdGlmIChwYXJhbXMpXG5uZXQvc2NoZWQvYWN0X2N0LmM6MTQ1ODpcdFx0Y2FsbF9yY3UoXHUwMDI2cGFyYW1zLVx1MDAzZXJjdSwgdGNmX2N0X3BhcmFtc19mcmVlX3JjdSk7XG5uZXQvc2NoZWQvYWN0X2N0LmMtMTQ1OS1cbi0tXG5uZXQvc2NoZWQvYWN0X2N0LmMtMTQ2NS1cdGlmIChwYXJhbXMpXG5uZXQvc2NoZWQvYWN0X2N0LmM6MTQ2NjpcdFx0dGNmX2N0X3BhcmFtc19mcmVlKHBhcmFtcyk7XG5uZXQvc2NoZWQvYWN0X2N0LmMtMTQ2Ny1cdHRjZl9pZHJfcmVsZWFzZSgqYSwgYmluZCk7XG4tLVxubmV0L3NjaGVkL2FjdF9jdC5jLTE0NzAtXG5uZXQvc2NoZWQvYWN0X2N0LmM6MTQ3MTpzdGF0aWMgdm9pZCB0Y2ZfY3RfY2xlYW51cChzdHJ1Y3QgdGNfYWN0aW9uICphKVxubmV0L3NjaGVkL2FjdF9jdC5jLTE0NzIte1xubmV0L3NjaGVkL2FjdF9jdC5jOjE0NzM6XHRzdHJ1Y3QgdGNmX2N0X3BhcmFtcyAqcGFyYW1zO1xubmV0L3NjaGVkL2FjdF9jdC5jLTE0NzQtXHRzdHJ1Y3QgdGNmX2N0ICpjID0gdG9fY3QoYSk7XG4tLVxubmV0L3NjaGVkL2FjdF9jdC5jLTE0NzctXHRpZiAocGFyYW1zKVxubmV0L3NjaGVkL2FjdF9jdC5jOjE0Nzg6XHRcdGNhbGxfcmN1KFx1MDAyNnBhcmFtcy1cdTAwM2VyY3UsIHRjZl9jdF9wYXJhbXNfZnJlZV9yY3UpO1xubmV0L3NjaGVkL2FjdF9jdC5jLTE0NzktfVxubmV0L3NjaGVkL2FjdF9jdC5jLTE0ODAtXG5uZXQvc2NoZWQvYWN0X2N0LmM6MTQ4MTpzdGF0aWMgaW50IHRjZl9jdF9kdW1wX2tleV92YWwoc3RydWN0IHNrX2J1ZmYgKnNrYixcbm5ldC9zY2hlZC9hY3RfY3QuYy0xNDgyLVx0XHRcdCAgICAgICBjb25zdCB2b2lkICp2YWwsIGludCB2YWxfdHlwZSxcbi0tXG5uZXQvc2NoZWQvYWN0X2N0LmMtMTUwMy1cbm5ldC9zY2hlZC9hY3RfY3QuYzoxNTA0OnN0YXRpYyBpbnQgdGNmX2N0X2R1bXBfbmF0KHN0cnVjdCBza19idWZmICpza2IsIGNvbnN0IHN0cnVjdCB0Y2ZfY3RfcGFyYW1zICpwKVxubmV0L3NjaGVkL2FjdF9jdC5jLTE1MDUte1xuLS1cbm5ldC9zY2hlZC9hY3RfY3QuYy0xNTQzLVxubmV0L3NjaGVkL2FjdF9jdC5jOjE1NDQ6c3RhdGljIGludCB0Y2ZfY3RfZHVtcF9oZWxwZXIoc3RydWN0IHNrX2J1ZmYgKnNrYixcbm5ldC9zY2hlZC9hY3RfY3QuYy0xNTQ1LVx0XHRcdCAgICAgIGNvbnN0IHN0cnVjdCBuZl9jb25udHJhY2tfaGVscGVyICpoZWxwZXIpXG4tLVxubmV0L3NjaGVkL2FjdF9jdC5jLTE1NTctXG5uZXQvc2NoZWQvYWN0X2N0LmM6MTU1ODpzdGF0aWMgaW5saW5lIGludCB0Y2ZfY3RfZHVtcChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgdGNfYWN0aW9uICphLFxubmV0L3NjaGVkL2FjdF9jdC5jLTE1NTktXHRcdFx0ICAgICAgaW50IGJpbmQsIGludCByZWYpXG4tLVxubmV0L3NjaGVkL2FjdF9jdC5jLTE1NjItXHRjb25zdCBzdHJ1Y3QgdGNmX2N0ICpjID0gdG9fY3QoYSk7XG5uZXQvc2NoZWQvYWN0X2N0LmM6MTU2MzpcdGNvbnN0IHN0cnVjdCB0Y2ZfY3RfcGFyYW1zICpwO1xubmV0L3NjaGVkL2FjdF9jdC5jLTE1NjQtXHRzdHJ1Y3QgdGNfY3Qgb3B0ID0ge1xuLS1cbm5ldC9zY2hlZC9hY3RfY3QuYy0xNTc0LVxubmV0L3NjaGVkL2FjdF9jdC5jOjE1NzU6XHRpZiAodGNmX2N0X2R1bXBfa2V5X3ZhbChza2IsXG5uZXQvc2NoZWQvYWN0X2N0LmMtMTU3Ni1cdFx0XHRcdFx1MDAyNnAtXHUwMDNlY3RfYWN0aW9uLCBUQ0FfQ1RfQUNUSU9OLFxuLS1cbm5ldC9zY2hlZC9hY3RfY3QuYy0xNTg0LVx0aWYgKElTX0VOQUJMRUQoQ09ORklHX05GX0NPTk5UUkFDS19NQVJLKSBcdTAwMjZcdTAwMjZcbm5ldC9zY2hlZC9hY3RfY3QuYzoxNTg1Olx0ICAgIHRjZl9jdF9kdW1wX2tleV92YWwoc2tiLFxubmV0L3NjaGVkL2FjdF9jdC5jLTE1ODYtXHRcdFx0XHRcdTAwMjZwLVx1MDAzZW1hcmssIFRDQV9DVF9NQVJLLFxuLS1cbm5ldC9zY2hlZC9hY3RfY3QuYy0xNTkxLVx0aWYgKElTX0VOQUJMRUQoQ09ORklHX05GX0NPTk5UUkFDS19MQUJFTFMpIFx1MDAyNlx1MDAyNlxubmV0L3NjaGVkL2FjdF9jdC5jOjE1OTI6XHQgICAgdGNmX2N0X2R1bXBfa2V5X3ZhbChza2IsXG5uZXQvc2NoZWQvYWN0X2N0LmMtMTU5My1cdFx0XHRcdHAtXHUwMDNlbGFiZWxzLCBUQ0FfQ1RfTEFCRUxTLFxuLS1cbm5ldC9zY2hlZC9hY3RfY3QuYy0xNTk4LVx0aWYgKElTX0VOQUJMRUQoQ09ORklHX05GX0NPTk5UUkFDS19aT05FUykgXHUwMDI2XHUwMDI2XG5uZXQvc2NoZWQvYWN0X2N0LmM6MTU5OTpcdCAgICB0Y2ZfY3RfZHVtcF9rZXlfdmFsKHNrYixcbm5ldC9zY2hlZC9hY3RfY3QuYy0xNjAwLVx0XHRcdFx0XHUwMDI2cC1cdTAwM2V6b25lLCBUQ0FfQ1RfWk9ORSxcbi0tXG5uZXQvc2NoZWQvYWN0X2N0LmMtMTYwNC1cbm5ldC9zY2hlZC9hY3RfY3QuYzoxNjA1Olx0aWYgKHRjZl9jdF9kdW1wX25hdChza2IsIHApKVxubmV0L3NjaGVkL2FjdF9jdC5jLTE2MDYtXHRcdGdvdG8gbmxhX3B1dF9mYWlsdXJlO1xubmV0L3NjaGVkL2FjdF9jdC5jLTE2MDctXG5uZXQvc2NoZWQvYWN0X2N0LmM6MTYwODpcdGlmICh0Y2ZfY3RfZHVtcF9oZWxwZXIoc2tiLCBwLVx1MDAzZWhlbHBlcikpXG5uZXQvc2NoZWQvYWN0X2N0LmMtMTYwOS1cdFx0Z290byBubGFfcHV0X2ZhaWx1cmU7XG4tLVxubmV0L3NjaGVkL2FjdF9jdC5jPTE2Mjc9c3RhdGljIHZvaWQgdGNmX3N0YXRzX3VwZGF0ZShzdHJ1Y3QgdGNfYWN0aW9uICphLCB1NjQgYnl0ZXMsIHU2NCBwYWNrZXRzLFxuLS1cbm5ldC9zY2hlZC9hY3RfY3QuYy0xNjM1LVxubmV0L3NjaGVkL2FjdF9jdC5jOjE2MzY6c3RhdGljIGludCB0Y2ZfY3Rfb2ZmbG9hZF9hY3Rfc2V0dXAoc3RydWN0IHRjX2FjdGlvbiAqYWN0LCB2b2lkICplbnRyeV9kYXRhLFxubmV0L3NjaGVkL2FjdF9jdC5jLTE2MzctXHRcdFx0XHQgICAgdTMyICppbmRleF9pbmMsIGJvb2wgYmluZCxcbi0tXG5uZXQvc2NoZWQvYWN0X2N0LmMtMTY0Mi1cbm5ldC9zY2hlZC9hY3RfY3QuYzoxNjQzOlx0XHRpZiAodGNmX2N0X2hlbHBlcihhY3QpKVxubmV0L3NjaGVkL2FjdF9jdC5jLTE2NDQtXHRcdFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xuLS1cbm5ldC9zY2hlZC9hY3RfY3QuYy0xNjQ2LVx0XHRlbnRyeS1cdTAwM2VpZCA9IEZMT1dfQUNUSU9OX0NUO1xubmV0L3NjaGVkL2FjdF9jdC5jOjE2NDc6XHRcdGVudHJ5LVx1MDAzZWN0LmFjdGlvbiA9IHRjZl9jdF9hY3Rpb24oYWN0KTtcbm5ldC9zY2hlZC9hY3RfY3QuYzoxNjQ4Olx0XHRlbnRyeS1cdTAwM2VjdC56b25lID0gdGNmX2N0X3pvbmUoYWN0KTtcbm5ldC9zY2hlZC9hY3RfY3QuYzoxNjQ5Olx0XHRlbnRyeS1cdTAwM2VjdC5mbG93X3RhYmxlID0gdGNmX2N0X2Z0KGFjdCk7XG5uZXQvc2NoZWQvYWN0X2N0LmMtMTY1MC1cdFx0KmluZGV4X2luYyA9IDE7XG4tLVxubmV0L3NjaGVkL2FjdF9jdC5jLTE2NTktXG5uZXQvc2NoZWQvYWN0X2N0LmM6MTY2MDpzdGF0aWMgc2l6ZV90IHRjZl9jdF9nZXRfZmlsbF9zaXplKGNvbnN0IHN0cnVjdCB0Y19hY3Rpb24gKmFjdClcbm5ldC9zY2hlZC9hY3RfY3QuYy0xNjYxLXtcbm5ldC9zY2hlZC9hY3RfY3QuYzoxNjYyOlx0Y29uc3Qgc3RydWN0IHRjZl9jdF9wYXJhbXMgKnA7XG5uZXQvc2NoZWQvYWN0X2N0LmMtMTY2My1cdHNpemVfdCBzaXplO1xuLS1cbm5ldC9zY2hlZC9hY3RfY3QuYz0xNzA1PXN0YXRpYyBzdHJ1Y3QgdGNfYWN0aW9uX29wcyBhY3RfY3Rfb3BzID0ge1xuLS1cbm5ldC9zY2hlZC9hY3RfY3QuYy0xNzA4LVx0Lm93bmVyXHRcdD1cdFRISVNfTU9EVUxFLFxubmV0L3NjaGVkL2FjdF9jdC5jOjE3MDk6XHQuYWN0XHRcdD1cdHRjZl9jdF9hY3QsXG5uZXQvc2NoZWQvYWN0X2N0LmM6MTcxMDpcdC5kdW1wXHRcdD1cdHRjZl9jdF9kdW1wLFxubmV0L3NjaGVkL2FjdF9jdC5jOjE3MTE6XHQuaW5pdFx0XHQ9XHR0Y2ZfY3RfaW5pdCxcbm5ldC9zY2hlZC9hY3RfY3QuYzoxNzEyOlx0LmNsZWFudXBcdD1cdHRjZl9jdF9jbGVhbnVwLFxubmV0L3NjaGVkL2FjdF9jdC5jLTE3MTMtXHQuc3RhdHNfdXBkYXRlXHQ9XHR0Y2Zfc3RhdHNfdXBkYXRlLFxubmV0L3NjaGVkL2FjdF9jdC5jOjE3MTQ6XHQuZ2V0X2ZpbGxfc2l6ZVx0PVx0dGNmX2N0X2dldF9maWxsX3NpemUsXG5uZXQvc2NoZWQvYWN0X2N0LmM6MTcxNTpcdC5vZmZsb2FkX2FjdF9zZXR1cCA9XHR0Y2ZfY3Rfb2ZmbG9hZF9hY3Rfc2V0dXAsXG5uZXQvc2NoZWQvYWN0X2N0LmMtMTcxNi1cdC5zaXplXHRcdD1cdHNpemVvZihzdHJ1Y3QgdGNmX2N0KSxcbi0tXG5uZXQvc2NoZWQvYWN0X2N0LmM9MTczOT1zdGF0aWMgaW50IF9faW5pdCBjdF9pbml0X21vZHVsZSh2b2lkKVxuLS1cbm5ldC9zY2hlZC9hY3RfY3QuYy0xNzQ2LVxubmV0L3NjaGVkL2FjdF9jdC5jOjE3NDc6XHRlcnIgPSB0Y2ZfY3RfZmxvd190YWJsZXNfaW5pdCgpO1xubmV0L3NjaGVkL2FjdF9jdC5jLTE3NDgtXHRpZiAoZXJyKVxuLS1cbm5ldC9zY2hlZC9hY3RfY3QuYy0xNzU5LWVycl9yZWdpc3Rlcjpcbm5ldC9zY2hlZC9hY3RfY3QuYzoxNzYwOlx0dGNmX2N0X2Zsb3dfdGFibGVzX3VuaW5pdCgpO1xubmV0L3NjaGVkL2FjdF9jdC5jLTE3NjEtZXJyX3RibF9pbml0OlxuLS1cbm5ldC9zY2hlZC9hY3RfY3QuYz0xNzY2PXN0YXRpYyB2b2lkIF9fZXhpdCBjdF9jbGVhbnVwX21vZHVsZSh2b2lkKVxuLS1cbm5ldC9zY2hlZC9hY3RfY3QuYy0xNzY5LVx0dGNmX3VucmVnaXN0ZXJfYWN0aW9uKFx1MDAyNmFjdF9jdF9vcHMsIFx1MDAyNmN0X25ldF9vcHMpO1xubmV0L3NjaGVkL2FjdF9jdC5jOjE3NzA6XHR0Y2ZfY3RfZmxvd190YWJsZXNfdW5pbml0KCk7XG5uZXQvc2NoZWQvYWN0X2N0LmMtMTc3MS1cdGRlc3Ryb3lfd29ya3F1ZXVlKGFjdF9jdF93cSk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA5IDA4OjM5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDM2ODAxCgkJCQkJCQlvdXRwdXQ6IDE4NgoJCQkJCQkJdGhvdWdodHM6IDM3MQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBbmFseXNpcyBvZiBDb25uZWN0aW9uIFRyYWNraW5nIENvbmZpZ3VyYXRpb24qKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93biBzeXN0ZW1hdGljYWxseS4gRmlyc3QsIEkgbmVlZCB0byBjb25maXJtIHRoZSBrZXkgc3ltYm9scyByZWxhdGVkIHRvIGNvbm5lY3Rpb24gdHJhY2tpbmcuIEkmIzM5O3ZlIGZsYWdnZWQgdGhlc2UgZnVuY3Rpb25zIGFzIHBvdGVudGlhbGx5IGludGVyZXN0aW5nOiBgdGNmX2N0X2Zsb3dfdGFibGVfZ2V0YCwgYHRjZl9jdF9pbml0YCwgYHRjZl9jdF9hY3RgLCBhbmQgYG5mX2Zsb3dfdGFibGVfaW5pdGAuIFRoZXNlIGFwcGVhciB0byBiZSB0aGUgY29yZSBrZXJuZWwgZnVuY3Rpb25zIEkmIzM5O20gaW50ZXJlc3RlZCBpbiB0ZXN0aW5nLgoKTmV4dCwgSSBuZWVkIHRvIGVuc3VyZSBhbGwgdGhlIHJlbGV2YW50IGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBhcmUgZW5hYmxlZCB0byBmdWxseSBleGVyY2lzZSB0aGlzIGZ1bmN0aW9uYWxpdHkuIEkgc2VlIGEgbGlzdCBvZiBsaWtlbHkgY2FuZGlkYXRlczogYE5FVF9BQ1RfQ1RgLCBgTkVUX0NMU19BQ1RgLCBgTkZfQ09OTlRSQUNLYCwgYW5kIGBORl9GTE9XX1RBQkxFYC4gSXQmIzM5O3MgYSBnb29kIHN0YXJ0aW5nIHBvaW50LCBidXQgSSBuZWVkIHRvIGJlIHN1cmUuCgpEaWdnaW5nIGludG8gdGhlIGBuZXQvc2NoZWQvS2NvbmZpZ2AgZmlsZSBpcyBjcnVjaWFsIGhlcmUuIFRoZSBkZWZpbml0aW9uIG9mIGBORVRfQUNUX0NUYCBpcyBwYXJ0aWN1bGFybHkgcmV2ZWFsaW5nLiBJdCB0ZWxscyBtZSB0aGF0IGBORVRfQUNUX0NUYCBkZXBlbmRzIG9uIGBORVRfQ0xTX0FDVGAsIGBORl9DT05OVFJBQ0tgLCBhbmQgYE5GX0ZMT1dfVEFCTEVgLCBhbmQgaXQgb3B0aW9uYWxseSBzZWxlY3RzIGBORl9OQVRfT1ZTYCBpZiBgTkZfTkFUYCBpcyBhbHNvIGVuYWJsZWQuIFRoZSBkZXBlbmRlbmN5IG9uIGBORl9GTE9XX1RBQkxFYCBpcyBwYXJ0aWN1bGFybHkgaW1wb3J0YW50LCBjb25maXJtaW5nIG15IGluaXRpYWwgYXNzZXNzbWVudC4gRnVydGhlcm1vcmUsIGl0ICpzZWxlY3RzKiBgTkZfQ09OTlRSQUNLX09WU2AsIHNvIEkgbmVlZCB0byBiZSBhd2FyZSBvZiB0aGUgaW1wbGljYXRpb25zLiBUaGlzIG1ha2VzIG1lIGNvbmZpZGVudCB0aGF0IGVuYWJsaW5nIGFsbCB0aGVzZSBjb25maWdzIOKAkyBgTkVUX0FDVF9DVGAsIGBORVRfQ0xTX0FDVGAsIGBORl9DT05OVFJBQ0tgLCBhbmQgYE5GX0ZMT1dfVEFCTEVgIOKAkyBzaG91bGQgZW5zdXJlIHRoYXQgZXZlcnl0aGluZyBpcyBjb21waWxlZCBhbmQgYXZhaWxhYmxlIGZvciB0ZXN0aW5nLgoKVG8gYmUgY29tcGxldGVseSB0aG9yb3VnaCwgSSYjMzk7bSBnb2luZyB0byBkb3VibGUtY2hlY2sgbXkgZmluZGluZ3MuIEkmIzM5O20gY29uZmlybWluZyB0aGF0IHRoaXMgY29tcG9uZW50IGlzIGluZGVlZCBmbGFnZ2VkIGFzICYjMzQ7V29ydGhGdXp6aW5nJiMzNDsgYW5kIHJlLXZlcmlmeWluZyBteSBsaXN0cyBvZiBgRW5hYmxlQ29uZmlnc2AgYW5kIGBGb2N1c1N5bWJvbHNgLiBGaW5hbGx5LCBJJiMzOTttIGdvaW5nIHRvIGluY2x1ZGUgYSBjb25jaXNlIHJlYXNvbmluZyBzdGF0ZW1lbnQgdGhhdCBzdW1tYXJpemVzIG15IGZpbmRpbmdzLCBiZWNhdXNlIGNsZWFyIGRvY3VtZW50YXRpb24gaXMgYWx3YXlzIGltcG9ydGFudC4gVGhpcyBzZWVtcyBzb2xpZCwgc28gSSYjMzk7bSByZWFkeSB0byBtb3ZlIGZvcndhcmQuIFRpbWUgdG8gY2FsbCBgc2V0LXJlc3VsdHNgLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOSAwODozOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7TkVUX0FDVF9DVCYjMzQ7LAogICAgJiMzNDtORVRfQ0xTX0FDVCYjMzQ7LAogICAgJiMzNDtORl9DT05OVFJBQ0smIzM0OywKICAgICYjMzQ7TkZfRkxPV19UQUJMRSYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3RjZl9jdF9mbG93X3RhYmxlX2dldCYjMzQ7LAogICAgJiMzNDt0Y2ZfY3RfaW5pdCYjMzQ7LAogICAgJiMzNDt0Y2ZfY3RfYWN0JiMzNDssCiAgICAmIzM0O25mX2Zsb3dfdGFibGVfaW5pdCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyB0aGUgaW5pdGlhbGl6YXRpb24gb3JkZXIgaW4gdGNmX2N0X2Zsb3dfdGFibGVfZ2V0KCkgYnkgc2V0dGluZyB0aGUgbmV0bnMgcG9pbnRlciAod3JpdGVfcG5ldCkgYmVmb3JlIGNhbGxpbmcgbmZfZmxvd190YWJsZV9pbml0KCksIHByZXZlbnRpbmcgcG90ZW50aWFsIHJhY2VzIG9yIHVuaW5pdGlhbGl6ZWQgbmV0bnMgYWNjZXNzIGR1cmluZyBmbG93IHRhYmxlIGluaXRpYWxpemF0aW9uLiBUaGUgY29kZSBpcyBwYXJ0IG9mIHRoZSBUQyBjb25uZWN0aW9uIHRyYWNraW5nIGFjdGlvbiAoYWN0X2N0KSBhbmQgaXMgcmVhY2hhYmxlIHZpYSBydG5ldGxpbmsgdGMgYWN0aW9uIGNvbW1hbmRzIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkIGVudmlyb25tZW50cy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7TkVUX0FDVF9DVCYjMzQ7LAogICAgJiMzNDtORVRfQ0xTX0FDVCYjMzQ7LAogICAgJiMzNDtORl9DT05OVFJBQ0smIzM0OywKICAgICYjMzQ7TkZfRkxPV19UQUJMRSYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3RjZl9jdF9mbG93X3RhYmxlX2dldCYjMzQ7LAogICAgJiMzNDt0Y2ZfY3RfaW5pdCYjMzQ7LAogICAgJiMzNDt0Y2ZfY3RfYWN0JiMzNDssCiAgICAmIzM0O25mX2Zsb3dfdGFibGVfaW5pdCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyB0aGUgaW5pdGlhbGl6YXRpb24gb3JkZXIgaW4gdGNmX2N0X2Zsb3dfdGFibGVfZ2V0KCkgYnkgc2V0dGluZyB0aGUgbmV0bnMgcG9pbnRlciAod3JpdGVfcG5ldCkgYmVmb3JlIGNhbGxpbmcgbmZfZmxvd190YWJsZV9pbml0KCksIHByZXZlbnRpbmcgcG90ZW50aWFsIHJhY2VzIG9yIHVuaW5pdGlhbGl6ZWQgbmV0bnMgYWNjZXNzIGR1cmluZyBmbG93IHRhYmxlIGluaXRpYWxpemF0aW9uLiBUaGUgY29kZSBpcyBwYXJ0IG9mIHRoZSBUQyBjb25uZWN0aW9uIHRyYWNraW5nIGFjdGlvbiAoYWN0X2N0KSBhbmQgaXMgcmVhY2hhYmxlIHZpYSBydG5ldGxpbmsgdGMgYWN0aW9uIGNvbW1hbmRzIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkIGVudmlyb25tZW50cy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNy8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDkgMDg6Mzk8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPklmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOSAwODozOTwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5jb3JlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIHJlb3JkZXJzIHRoZSBpbml0aWFsaXphdGlvbiBvZiB0aGUgZmxvdyB0YWJsZSYjMzk7cyBuZXR3b3JrIG5hbWVzcGFjZSBwb2ludGVyIChgd3JpdGVfcG5ldChcdTAwMjZjdF9mdC1cdTAwM2VuZl9mdC5uZXQsIG5ldClgKSBzbyB0aGF0IGl0IG9jY3VycyBwcmlvciB0byBjYWxsaW5nIGBuZl9mbG93X3RhYmxlX2luaXQoXHUwMDI2Y3RfZnQtXHUwMDNlbmZfZnQpYC5cblxuVGhlIGVuY2xvc2luZyBgc3RydWN0IHRjZl9jdF9mbG93X3RhYmxlYCAoYGN0X2Z0YCkgaXMgYWxsb2NhdGVkIHZpYSBga3phbGxvY19vYmpgLCBlbnN1cmluZyBhbGwgZmllbGRzIGFuZCBwYWRkaW5nIGFyZSB6ZXJvLWluaXRpYWxpemVkLiBQcmlvciB0byB0aGUgZml4LCBhY2Nlc3NpbmcgYG5mX2Z0Lm5ldGAgYmVmb3JlIGB3cml0ZV9wbmV0YCB3b3VsZCByZWFkIGEgemVyb2VkL05VTEwgcG9pbnRlciAod2hpY2ggd291bGQgbWFuaWZlc3QgYXMgYSBOVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2Ugb3IgbG9naWNhbCBlcnJvciwgY2F1Z2h0IGJ5IHN0YW5kYXJkIGNyYXNoIGhhbmRsZXJzIGFuZCBLQVNBTiksIHJhdGhlciB0aGFuIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LlxuXG5ObyB1bmluaXRpYWxpemVkIHN0YWNrIG9yIGhlYXAgbWVtb3J5IGlzIGludHJvZHVjZWQgb3IgZXhwb3NlZCwgbm8gdW5pbml0aWFsaXplZCBmaWVsZHMgYXJlIHJlYWQgb3IgY29waWVkIHRvIHVzZXJzcGFjZSwgYW5kIG5vIGJ1ZmZlciBib3VuZHMgb3IgbGVuZ3RocyBhcmUgYWZmZWN0ZWQuIEhlbmNlLCBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBpcyBub3QgbmVlZGVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeQplcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZApkZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpCmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLgoKQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46Ci0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZQogIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTgogIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVAKICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLgotIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLAogIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy4KClJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sCkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuCkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFkKc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3MKdGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi4KCkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0CnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLAphIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXMKdGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmcKdW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sCmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSwKY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuCgpTZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6CjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiCiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzCiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuCjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMKICAgb3Igc3RydWN0IGZpZWxkcy4KMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkcwogICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLgo0LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2VzcwogICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuCgpTZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjoKLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlcgogIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodAogIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS4KLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZAogIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC4KLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuCgpVc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlCmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+VGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjQKCkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgODk0YjkxYzM4NDRjOWY5NWQ3MTNiYmUxNTMwZjc0MDliNzI1YTNiYgpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBXZWQgU2VwIDkgMDg6Mzg6MzQgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9uZXQvc2NoZWQvYWN0X2N0LmMgYi9uZXQvc2NoZWQvYWN0X2N0LmMKaW5kZXggOTA4MGNiMzg2YzE2OS4uNmJkMTlkYjY4ZDk3MSAxMDA2NDQKLS0tIGEvbmV0L3NjaGVkL2FjdF9jdC5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9zY2hlZC9hY3RfY3QuYwpAQCAtMzQ5LDEwICYjNDM7MzQ5LDEwIEBAIHN0YXRpYyBpbnQgdGNmX2N0X2Zsb3dfdGFibGVfZ2V0KHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHRjZl9jdF9wYXJhbXMgKnBhcmFtcykKIAljdF9mdC0mZ3Q7bmZfZnQudHlwZSA9ICZhbXA7Zmxvd3RhYmxlX2N0OwogCWN0X2Z0LSZndDtuZl9mdC5mbGFncyB8PSBORl9GTE9XVEFCTEVfSFdfT0ZGTE9BRCB8CiAJCQkgICAgICBORl9GTE9XVEFCTEVfQ09VTlRFUjsKJiM0MzsJd3JpdGVfcG5ldCgmYW1wO2N0X2Z0LSZndDtuZl9mdC5uZXQsIG5ldCk7CiAJZXJyID0gbmZfZmxvd190YWJsZV9pbml0KCZhbXA7Y3RfZnQtJmd0O25mX2Z0KTsKIAlpZiAoZXJyKQogCQlnb3RvIGVycl9pbml0OwotCXdyaXRlX3BuZXQoJmFtcDtjdF9mdC0mZ3Q7bmZfZnQubmV0LCBuZXQpOwogCiAJX19tb2R1bGVfZ2V0KFRISVNfTU9EVUxFKTsKIG91dF91bmxvY2s6CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI5LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOSAwODozOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMTUzCgkJCQkJCQlvdXRwdXQ6IDM3CgkJCQkJCQl0aG91Z2h0czogNDIzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKktNU0FOIEZ1enppbmcgRXZhbHVhdGlvbiAtIEFjdF9DVCBQYXRjaCoqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBNeSBnb2FsIGlzIHRvIGRldGVybWluZSBpZiB0aGlzIGBhY3RfY3QuY2AgcGF0Y2ggd2FycmFudHMgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uLCBvciBpZiB0aGUgc3RhbmRhcmQgS0FTQU4vTE9DS0RFUCBjaGVja3Mgc3VmZmljZS4gVGhpcyBpcyBhIHN0YW5kYXJkIGJlbmlnbi9kZWZlbnNpdmUga2VybmVsIHNhbml0aXplciBhc3Nlc3NtZW50LCBhIHR5cGljYWwgUUEgdGFzaywgc28gbGV0JiMzOTtzIGtlZXAgaXQgc2ltcGxlLiBUaGUgc2VjdXJpdHkgZ3VpZGVsaW5lcyBhcmUgY2xlYXI6IGFuYWx5emUgdGhlIHBhdGNoLCBhc3Nlc3MgdGhlIGNvbnRleHQsIGFuZCB1dGlsaXplIHRoZSBwcm92aWRlZCB0b29scyBpZiBuZWVkZWQuCgpGaXJzdCwgbGV0JiMzOTtzIGV4YW1pbmUgdGhlIGNvZGUuIFRoaXMgZGlmZiBzZWVtcyByZWxhdGl2ZWx5IHN0cmFpZ2h0Zm9yd2FyZC4gSXQmIzM5O3MgYSByZW9yZGVyaW5nIG9mIHRoZSBgd3JpdGVfcG5ldGAgY2FsbCBhcm91bmQgYG5mX2Zsb3dfdGFibGVfaW5pdGAuIFRoZSBvcmlnaW5hbCBjb2RlIGhhZCBgd3JpdGVfcG5ldGAgKmFmdGVyKiBhIHBvdGVudGlhbCBmYWlsdXJlLiBUaGUgY2hhbmdlZCBjb2RlIG1vdmVzIHRoZSBjYWxsICpiZWZvcmUqIGluaXRpYWxpemF0aW9uLiBJdCYjMzk7cyBpbXBvcnRhbnQgdG8gdW5kZXJzdGFuZCAqd2h5KiB0aGlzIGNoYW5nZSB3YXMgbWFkZS4KCkkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQgYG5mX2Zsb3dfdGFibGVfaW5pdGAgYWN0dWFsbHkgZG9lcyBhbmQgd2hhdCBgZXJyX2luaXRgIGVudGFpbHMuIEp1bXBpbmcgdG8gYG5ldC9zY2hlZC9hY3RfY3QuY2AgYW5kIGxvb2tpbmcgYXJvdW5kIGxpbmUgMzQ5IGlzIHRoZSBuZXh0IHN0ZXAgdG8gZ2FpbiBhIGJldHRlciB1bmRlcnN0YW5kaW5nIG9mIHBvdGVudGlhbCByaXNrcyBhc3NvY2lhdGVkIHdpdGggdGhpcyBjaGFuZ2UuIFRoZSBnb2FsIGlzIHRvIHNlZSBpZiBhbnkgdW5pbml0aWFsaXplZCBkYXRhIG9yIHJhY2UgY29uZGl0aW9ucyBhcmUgZXhwb3NlZCBieSB0aGlzIGNvZGUgcmVvcmRlcmluZy4gVGhlbiBJIHdpbGwgZGV0ZXJtaW5lIHRoZSByaXNrIG9mIEtNU0FOIGJhc2VkIG9uIHRoYXQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzAvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA5IDA4OjM5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L3NjaGVkL2FjdF9jdC5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMzMwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDYwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAzMzA6XHRcdG11dGV4X2xvY2soXHUwMDI2em9uZXNfbXV0ZXgpO1xuIDMzMTpcdFx0cmN1X3JlYWRfbG9jaygpO1xuIDMzMjpcdFx0Y3RfZnQgPSByaGFzaHRhYmxlX2xvb2t1cChcdTAwMjZ6b25lc19odCwgXHUwMDI2a2V5LCB6b25lc19wYXJhbXMpO1xuIDMzMzpcdFx0aWYgKGN0X2Z0IFx1MDAyNlx1MDAyNiByZWZjb3VudF9pbmNfbm90X3plcm8oXHUwMDI2Y3RfZnQtXHUwMDNlcmVmKSkge1xuIDMzNDpcdFx0XHRyY3VfcmVhZF91bmxvY2soKTtcbiAzMzU6XHRcdFx0Z290byBvdXRfdW5sb2NrO1xuIDMzNjpcdFx0fVxuIDMzNzpcdFx0cmN1X3JlYWRfdW5sb2NrKCk7XG4gMzM4Olx0XG4gMzM5Olx0XHRjdF9mdCA9IGt6YWxsb2Nfb2JqKCpjdF9mdCk7XG4gMzQwOlx0XHRpZiAoIWN0X2Z0KVxuIDM0MTpcdFx0XHRnb3RvIGVycl9hbGxvYztcbiAzNDI6XHRcdHJlZmNvdW50X3NldChcdTAwMjZjdF9mdC1cdTAwM2VyZWYsIDEpO1xuIDM0MzpcdFxuIDM0NDpcdFx0Y3RfZnQtXHUwMDNla2V5ID0ga2V5O1xuIDM0NTpcdFx0ZXJyID0gcmhhc2h0YWJsZV9pbnNlcnRfZmFzdChcdTAwMjZ6b25lc19odCwgXHUwMDI2Y3RfZnQtXHUwMDNlbm9kZSwgem9uZXNfcGFyYW1zKTtcbiAzNDY6XHRcdGlmIChlcnIpXG4gMzQ3Olx0XHRcdGdvdG8gZXJyX2luc2VydDtcbiAzNDg6XHRcbiAzNDk6XHRcdGN0X2Z0LVx1MDAzZW5mX2Z0LnR5cGUgPSBcdTAwMjZmbG93dGFibGVfY3Q7XG4gMzUwOlx0XHRjdF9mdC1cdTAwM2VuZl9mdC5mbGFncyB8PSBORl9GTE9XVEFCTEVfSFdfT0ZGTE9BRCB8XG4gMzUxOlx0XHRcdFx0ICAgICAgTkZfRkxPV1RBQkxFX0NPVU5URVI7XG4gMzUyOlx0XHR3cml0ZV9wbmV0KFx1MDAyNmN0X2Z0LVx1MDAzZW5mX2Z0Lm5ldCwgbmV0KTtcbiAzNTM6XHRcdGVyciA9IG5mX2Zsb3dfdGFibGVfaW5pdChcdTAwMjZjdF9mdC1cdTAwM2VuZl9mdCk7XG4gMzU0Olx0XHRpZiAoZXJyKVxuIDM1NTpcdFx0XHRnb3RvIGVycl9pbml0O1xuIDM1NjpcdFxuIDM1NzpcdFx0X19tb2R1bGVfZ2V0KFRISVNfTU9EVUxFKTtcbiAzNTg6XHRvdXRfdW5sb2NrOlxuIDM1OTpcdFx0cGFyYW1zLVx1MDAzZWN0X2Z0ID0gY3RfZnQ7XG4gMzYwOlx0XHRwYXJhbXMtXHUwMDNlbmZfZnQgPSBcdTAwMjZjdF9mdC1cdTAwM2VuZl9mdDtcbiAzNjE6XHRcdG11dGV4X3VubG9jayhcdTAwMjZ6b25lc19tdXRleCk7XG4gMzYyOlx0XG4gMzYzOlx0XHRyZXR1cm4gMDtcbiAzNjQ6XHRcbiAzNjU6XHRlcnJfaW5pdDpcbiAzNjY6XHRcdHJoYXNodGFibGVfcmVtb3ZlX2Zhc3QoXHUwMDI2em9uZXNfaHQsIFx1MDAyNmN0X2Z0LVx1MDAzZW5vZGUsIHpvbmVzX3BhcmFtcyk7XG4gMzY3Olx0ZXJyX2luc2VydDpcbiAzNjg6XHRcdGtmcmVlKGN0X2Z0KTtcbiAzNjk6XHRlcnJfYWxsb2M6XG4gMzcwOlx0XHRtdXRleF91bmxvY2soXHUwMDI2em9uZXNfbXV0ZXgpO1xuIDM3MTpcdFx0cmV0dXJuIGVycjtcbiAzNzI6XHR9XG4gMzczOlx0XG4gMzc0Olx0c3RhdGljIHZvaWQgdGNmX2N0X2Zsb3dfdGFibGVfZ2V0X3JlZihzdHJ1Y3QgdGNmX2N0X2Zsb3dfdGFibGUgKmN0X2Z0KVxuIDM3NTpcdHtcbiAzNzY6XHRcdHJlZmNvdW50X2luYyhcdTAwMjZjdF9mdC1cdTAwM2VyZWYpO1xuIDM3NzpcdH1cbiAzNzg6XHRcbiAzNzk6XHRzdGF0aWMgdm9pZCB0Y2ZfY3RfZmxvd190YWJsZV9jbGVhbnVwX3dvcmsoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxuIDM4MDpcdHtcbiAzODE6XHRcdHN0cnVjdCB0Y2ZfY3RfZmxvd190YWJsZSAqY3RfZnQ7XG4gMzgyOlx0XHRzdHJ1Y3QgZmxvd19ibG9jayAqYmxvY2s7XG4gMzgzOlx0XG4gMzg0Olx0XHRjdF9mdCA9IGNvbnRhaW5lcl9vZih0b19yY3Vfd29yayh3b3JrKSwgc3RydWN0IHRjZl9jdF9mbG93X3RhYmxlLFxuIDM4NTpcdFx0XHRcdCAgICAgcndvcmspO1xuIDM4NjpcdFx0bmZfZmxvd190YWJsZV9mcmVlKFx1MDAyNmN0X2Z0LVx1MDAzZW5mX2Z0KTtcbiAzODc6XHRcbiAzODg6XHRcdGJsb2NrID0gXHUwMDI2Y3RfZnQtXHUwMDNlbmZfZnQuZmxvd19ibG9jaztcbiAzODk6XHRcdGRvd25fd3JpdGUoXHUwMDI2Y3RfZnQtXHUwMDNlbmZfZnQuZmxvd19ibG9ja19sb2NrKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMS8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDkgMDg6Mzk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzg1MgoJCQkJCQkJb3V0cHV0OiAyMQoJCQkJCQkJdGhvdWdodHM6IDMwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGFuYWx5c2lzIG9mIHdoYXQgSSYjMzk7bSB0aGlua2luZywgcmVuZGVyZWQgYXMgYSBmaXJzdC1wZXJzb24gc3VtbWFyeSwga2VlcGluZyBpbiBtaW5kIG15IGZpZWxkIGV4cGVydGlzZToKCioqRGl2aW5nIGludG8gdGhlIEZsb3cgVGFibGUgSW5pdGlhbGl6YXRpb24qKgoKT2theSwgdGltZSB0byBnZXQgbXkgaGFuZHMgZGlydHkgYW5kIHVuZGVyc3RhbmQgaG93IHRoZSBOZXR3b3JrIEZpbHRlciAobmYpIGZsb3cgdGFibGUgaXMgaW5pdGlhbGl6ZWQuIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzLCAmIzM0O0xldCYjMzk7cyB0cmFjayBkb3duIHRoZSBgbmZfZmxvd190YWJsZV9pbml0YCBmdW5jdGlvbi4mIzM0OyBJdCYjMzk7cyB0aGUgc3RhcnRpbmcgcG9pbnQgZm9yIHRoaXMgY3J1Y2lhbCBkYXRhIHN0cnVjdHVyZS4gSSYjMzk7bGwgcmVhY2ggZm9yIGBncmVwYCAob3IgbXkgcHJlZmVycmVkIHNlYXJjaCB0b29sIGluIHRoZSBrZXJuZWwgc291cmNlLCBkZXBlbmRpbmcgb24gdGhlIHByb2plY3QgY29udGV4dCkgdG8gcXVpY2tseSBsb2NhdGUgYWxsIGluc3RhbmNlcyBvZiBgbmZfZmxvd190YWJsZV9pbml0YC4gVGhhdCBzaG91bGQgZ2l2ZSBtZSB0aGUgZW50cnkgcG9pbnRzLCB1c2FnZXMsIGFuZCBsaWtlbHkgdGhlIGNyaXRpY2FsIGluY2x1ZGUgZmlsZXMgSSBuZWVkIHRvIGdldCBhIGhpZ2gtbGV2ZWwgdmlldyBvZiBob3cgdGhpcyB0aGluZyBnZXRzIG9mZiB0aGUgZ3JvdW5kLiBGcm9tIHRoZXJlLCBJIGNhbiBiZWdpbiB0byB1bnBhY2sgdGhlIGRhdGEgc3RydWN0dXJlcywgbXV0ZXhlcywgbWVtb3J5IGFsbG9jYXRpb24gc3RyYXRlZ2llcywgYW5kIG92ZXJhbGwgbG9naWMgaW52b2x2ZWQgaW4gc2V0dGluZyB1cCB0aGUgZmxvdyB0YWJsZSBmb3IgZWZmaWNpZW50IHBhY2tldCBwcm9jZXNzaW5nLiBUaGlzIHNlYXJjaCBpcyBteSBmaXJzdCwgY3J1Y2lhbCBzdGVwIHRvd2FyZCB1bmRlcnN0YW5kaW5nIHRoZSBmbG93IHRhYmxlJiMzOTtzIGJlaGF2aW9yLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMyLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOSAwODo0MDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtuZl9mbG93X3RhYmxlX2luaXQmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7aW5jbHVkZS9uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGUuaD0zMjY9dm9pZCBuZl9mbG93X3RhYmxlX2NsZWFudXAoc3RydWN0IG5ldF9kZXZpY2UgKmRldik7XG5pbmNsdWRlL25ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZS5oLTMyNy1cbmluY2x1ZGUvbmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlLmg6MzI4OmludCBuZl9mbG93X3RhYmxlX2luaXQoc3RydWN0IG5mX2Zsb3d0YWJsZSAqZmxvd190YWJsZSk7XG5pbmNsdWRlL25ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZS5oLTMyOS12b2lkIG5mX2Zsb3dfdGFibGVfZnJlZShzdHJ1Y3QgbmZfZmxvd3RhYmxlICpmbG93X3RhYmxlKTtcbi0tXG5pbmNsdWRlL25ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZS5oPTQwOD1zdGF0aWMgaW5saW5lIGJvb2wgbmZfZmxvd19wcHBvZV9wcm90byhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBfX2JlMTYgKmlubmVyX3Byb3RvKVxuLS1cbmluY2x1ZGUvbmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlLmgtNDI1LSNpZmRlZiBDT05GSUdfTkZfRkxPV19UQUJMRV9QUk9DRlNcbmluY2x1ZGUvbmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlLmg6NDI2OmludCBuZl9mbG93X3RhYmxlX2luaXRfcHJvYyhzdHJ1Y3QgbmV0ICpuZXQpO1xuaW5jbHVkZS9uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGUuaC00Mjctdm9pZCBuZl9mbG93X3RhYmxlX2ZpbmlfcHJvYyhzdHJ1Y3QgbmV0ICpuZXQpO1xuaW5jbHVkZS9uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGUuaC00MjgtI2Vsc2VcbmluY2x1ZGUvbmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlLmg6NDI5OnN0YXRpYyBpbmxpbmUgaW50IG5mX2Zsb3dfdGFibGVfaW5pdF9wcm9jKHN0cnVjdCBuZXQgKm5ldClcbmluY2x1ZGUvbmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlLmgtNDMwLXtcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfY29yZS5jPTcwMj1FWFBPUlRfU1lNQk9MX0dQTChuZl9mbG93X2RuYXRfcG9ydCk7XG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfY29yZS5jLTcwMy1cbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9jb3JlLmM6NzA0OmludCBuZl9mbG93X3RhYmxlX2luaXQoc3RydWN0IG5mX2Zsb3d0YWJsZSAqZmxvd3RhYmxlKVxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2NvcmUuYy03MDUte1xuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9jb3JlLmMtNzI1LX1cbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9jb3JlLmM6NzI2OkVYUE9SVF9TWU1CT0xfR1BMKG5mX2Zsb3dfdGFibGVfaW5pdCk7XG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfY29yZS5jLTcyNy1cbi0tXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfY29yZS5jPTc3Nz1FWFBPUlRfU1lNQk9MX0dQTChuZl9mbG93X3RhYmxlX2ZyZWUpO1xubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2NvcmUuYy03NzgtXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfY29yZS5jOjc3OTpzdGF0aWMgaW50IG5mX2Zsb3dfdGFibGVfaW5pdF9uZXQoc3RydWN0IG5ldCAqbmV0KVxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2NvcmUuYy03ODAte1xuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9jb3JlLmM9NzkwPXN0YXRpYyBpbnQgbmZfZmxvd190YWJsZV9wZXJuZXRfaW5pdChzdHJ1Y3QgbmV0ICpuZXQpXG4tLVxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2NvcmUuYy03OTMtXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfY29yZS5jOjc5NDpcdHJldCA9IG5mX2Zsb3dfdGFibGVfaW5pdF9uZXQobmV0KTtcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9jb3JlLmMtNzk1LVx0aWYgKHJldCBcdTAwM2MgMClcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfY29yZS5jLTc5Ny1cbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9jb3JlLmM6Nzk4Olx0cmV0ID0gbmZfZmxvd190YWJsZV9pbml0X3Byb2MobmV0KTtcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9jb3JlLmMtNzk5LVx0aWYgKHJldCBcdTAwM2MgMClcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfaW5ldC5jPTY4PXN0YXRpYyBzdHJ1Y3QgbmZfZmxvd3RhYmxlX3R5cGUgZmxvd3RhYmxlX2luZXQgPSB7XG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfaW5ldC5jLTY5LVx0LmZhbWlseVx0XHQ9IE5GUFJPVE9fSU5FVCxcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9pbmV0LmM6NzA6XHQuaW5pdFx0XHQ9IG5mX2Zsb3dfdGFibGVfaW5pdCxcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9pbmV0LmMtNzEtXHQuc2V0dXBcdFx0PSBuZl9mbG93X3RhYmxlX29mZmxvYWRfc2V0dXAsXG4tLVxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2luZXQuYz03OD1zdGF0aWMgc3RydWN0IG5mX2Zsb3d0YWJsZV90eXBlIGZsb3d0YWJsZV9pcHY0ID0ge1xubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2luZXQuYy03OS1cdC5mYW1pbHlcdFx0PSBORlBST1RPX0lQVjQsXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfaW5ldC5jOjgwOlx0LmluaXRcdFx0PSBuZl9mbG93X3RhYmxlX2luaXQsXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfaW5ldC5jLTgxLVx0LnNldHVwXHRcdD0gbmZfZmxvd190YWJsZV9vZmZsb2FkX3NldHVwLFxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9pbmV0LmM9ODg9c3RhdGljIHN0cnVjdCBuZl9mbG93dGFibGVfdHlwZSBmbG93dGFibGVfaXB2NiA9IHtcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9pbmV0LmMtODktXHQuZmFtaWx5XHRcdD0gTkZQUk9UT19JUFY2LFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2luZXQuYzo5MDpcdC5pbml0XHRcdD0gbmZfZmxvd190YWJsZV9pbml0LFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2luZXQuYy05MS1cdC5zZXR1cFx0XHQ9IG5mX2Zsb3dfdGFibGVfb2ZmbG9hZF9zZXR1cCxcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfcHJvY2ZzLmM9NjA9c3RhdGljIGNvbnN0IHN0cnVjdCBzZXFfb3BlcmF0aW9ucyBuZl9mbG93X3RhYmxlX2NwdV9zZXFfb3BzID0ge1xuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9wcm9jZnMuYy02Ni1cbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9wcm9jZnMuYzo2NzppbnQgbmZfZmxvd190YWJsZV9pbml0X3Byb2Moc3RydWN0IG5ldCAqbmV0KVxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX3Byb2Nmcy5jLTY4LXtcbi0tXG5uZXQvc2NoZWQvYWN0X2N0LmM9MzI0PXN0YXRpYyBpbnQgdGNmX2N0X2Zsb3dfdGFibGVfZ2V0KHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHRjZl9jdF9wYXJhbXMgKnBhcmFtcylcbi0tXG5uZXQvc2NoZWQvYWN0X2N0LmMtMzUyLVx0d3JpdGVfcG5ldChcdTAwMjZjdF9mdC1cdTAwM2VuZl9mdC5uZXQsIG5ldCk7XG5uZXQvc2NoZWQvYWN0X2N0LmM6MzUzOlx0ZXJyID0gbmZfZmxvd190YWJsZV9pbml0KFx1MDAyNmN0X2Z0LVx1MDAzZW5mX2Z0KTtcbm5ldC9zY2hlZC9hY3RfY3QuYy0zNTQtXHRpZiAoZXJyKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMzLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOSAwODo0MDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1Njc0CgkJCQkJCQlvdXRwdXQ6IDQyCgkJCQkJCQl0aG91Z2h0czogMjQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcy4gSGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIGxpbmVzIG9mIGNvZGUsIHByZXNlbnRlZCBhcyBpZiB0aGV5IHdlcmUgbXkgb3duIGludGVybmFsIHRob3VnaHQgcHJvY2VzczoKCioqRGl2aW5nIGludG8gYG5mX2Zsb3dfdGFibGVfY29yZS5jYCoqCgpBbHJpZ2h0LCB0aW1lIHRvIGNyYWNrIG9wZW4gYG5mX2Zsb3dfdGFibGVfY29yZS5jYC4gTGV0JiMzOTtzIGdldCBkb3duIHRvIGJyYXNzIHRhY2tzIGFuZCB1bmRlcnN0YW5kIGhvdyB0aGlzIGZsb3cgdGFibGUgaXMgYWN0dWFsbHkgd29ya2luZy4gSSYjMzk7bSBlc3BlY2lhbGx5IGludGVyZXN0ZWQgaW4gdGhlIGNvcmUgbWVjaGFuaXNtcy4gSSYjMzk7bSBleHBlY3RpbmcgdG8gc2VlIHRoZSBjZW50cmFsIGRhdGEgc3RydWN0dXJlcyBmb3Igc3RvcmluZyBmbG93IGVudHJpZXMsIHRoZSBsb2dpYyBmb3IgYWRkaW5nIGFuZCByZW1vdmluZyB0aGVtLCBhbmQgaG93IGl0IGFsbCBpbnRlcmFjdHMgd2l0aCB0aGUgbmV0d29yayBzdGFjay4gSSBhbnRpY2lwYXRlIHRoZXJlIHdpbGwgYmUgYSBjbGVhciBlbXBoYXNpcyBvbiBwZXJmb3JtYW5jZSBjb25zaWRlcmF0aW9uczsgZ2l2ZW4gdGhlIG5hdHVyZSBvZiBhIGZsb3cgdGFibGUsIHNwZWVkIGFuZCBlZmZpY2llbnQgbG9va3VwcyBhcmUgZ29pbmcgdG8gYmUgcGFyYW1vdW50LiBJJiMzOTttIGFsc28gYmV0dGluZyB0aGVyZSYjMzk7cyBhIGRlbGljYXRlIGJhbGFuY2UgaGVyZSBiZXR3ZWVuIG1lbW9yeSB1c2FnZSBhbmQgc2VhcmNoIGVmZmljaWVuY3kuIEkmIzM5O20ga2VlbiB0byBmaW5kIG91dCB0aGUgdHJhZGUtb2ZmcyBpbXBsZW1lbnRlZC4gSSYjMzk7bSBhbHNvIGN1cmlvdXMgdG8gc2VlIHRoZSBsb2NraW5nIG1lY2hhbmlzbXMgdXNlZDsgY29uY3VycmVuY3kgaXNzdWVzIGFyZSBhbHdheXMgYSBjb25jZXJuIGluIG5ldHdvcmsgcHJvZ3JhbW1pbmcuIEkmIzM5O20gZ29pbmcgdG8gbG9vayBmb3IgYW55IGNsZXZlciBvcHRpbWl6YXRpb25zLCBwZXJoYXBzIGxldmVyYWdpbmcgaGFyZHdhcmUgYWNjZWxlcmF0aW9uIGlmIGl0JiMzOTtzIHRoZXJlLCBhbmQgZXJyb3IgaGFuZGxpbmcgYXMgaXQgaGFzIHRvIGJlIHJvYnVzdC4gTGV0JiMzOTtzIHNlZSB3aGF0JiMzOTtzIGFjdHVhbGx5IHVuZGVyIHRoZSBob29kIQoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM0LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOSAwODo0MDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9jb3JlLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA3MDAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDcwMDpcdFx0bmZfZmxvd19uYXRfcG9ydChza2IsIHRob2ZmLCBwcm90b2NvbCwgcG9ydCwgbmV3X3BvcnQpO1xuIDcwMTpcdH1cbiA3MDI6XHRFWFBPUlRfU1lNQk9MX0dQTChuZl9mbG93X2RuYXRfcG9ydCk7XG4gNzAzOlx0XG4gNzA0Olx0aW50IG5mX2Zsb3dfdGFibGVfaW5pdChzdHJ1Y3QgbmZfZmxvd3RhYmxlICpmbG93dGFibGUpXG4gNzA1Olx0e1xuIDcwNjpcdFx0aW50IGVycjtcbiA3MDc6XHRcbiA3MDg6XHRcdElOSVRfREVMQVlFRF9XT1JLKFx1MDAyNmZsb3d0YWJsZS1cdTAwM2VnY193b3JrLCBuZl9mbG93X29mZmxvYWRfd29ya19nYyk7XG4gNzA5Olx0XHRmbG93X2Jsb2NrX2luaXQoXHUwMDI2Zmxvd3RhYmxlLVx1MDAzZWZsb3dfYmxvY2spO1xuIDcxMDpcdFx0aW5pdF9yd3NlbShcdTAwMjZmbG93dGFibGUtXHUwMDNlZmxvd19ibG9ja19sb2NrKTtcbiA3MTE6XHRcbiA3MTI6XHRcdGVyciA9IHJoYXNodGFibGVfaW5pdChcdTAwMjZmbG93dGFibGUtXHUwMDNlcmhhc2h0YWJsZSxcbiA3MTM6XHRcdFx0XHQgICAgICBcdTAwMjZuZl9mbG93X29mZmxvYWRfcmhhc2hfcGFyYW1zKTtcbiA3MTQ6XHRcdGlmIChlcnIgXHUwMDNjIDApXG4gNzE1Olx0XHRcdHJldHVybiBlcnI7XG4gNzE2Olx0XG4gNzE3Olx0XHRxdWV1ZV9kZWxheWVkX3dvcmsoc3lzdGVtX3Bvd2VyX2VmZmljaWVudF93cSxcbiA3MTg6XHRcdFx0XHQgICBcdTAwMjZmbG93dGFibGUtXHUwMDNlZ2Nfd29yaywgSFopO1xuIDcxOTpcdFxuIDcyMDpcdFx0bXV0ZXhfbG9jayhcdTAwMjZmbG93dGFibGVfbG9jayk7XG4gNzIxOlx0XHRsaXN0X2FkZChcdTAwMjZmbG93dGFibGUtXHUwMDNlbGlzdCwgXHUwMDI2Zmxvd3RhYmxlcyk7XG4gNzIyOlx0XHRtdXRleF91bmxvY2soXHUwMDI2Zmxvd3RhYmxlX2xvY2spO1xuIDcyMzpcdFxuIDcyNDpcdFx0cmV0dXJuIDA7XG4gNzI1Olx0fVxuIDcyNjpcdEVYUE9SVF9TWU1CT0xfR1BMKG5mX2Zsb3dfdGFibGVfaW5pdCk7XG4gNzI3Olx0XG4gNzI4Olx0c3RhdGljIHZvaWQgbmZfZmxvd190YWJsZV9kb19jbGVhbnVwKHN0cnVjdCBuZl9mbG93dGFibGUgKmZsb3dfdGFibGUsXG4gNzI5Olx0XHRcdFx0XHQgICAgIHN0cnVjdCBmbG93X29mZmxvYWQgKmZsb3csIHZvaWQgKmRhdGEpXG4gNzMwOlx0e1xuIDczMTpcdFx0c3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IGRhdGE7XG4gNzMyOlx0XG4gNzMzOlx0XHRpZiAoIWRldikge1xuIDczNDpcdFx0XHRmbG93X29mZmxvYWRfdGVhcmRvd24oZmxvdyk7XG4gNzM1Olx0XHRcdHJldHVybjtcbiA3MzY6XHRcdH1cbiA3Mzc6XHRcbiA3Mzg6XHRcdGlmIChuZXRfZXEobmZfY3RfbmV0KGZsb3ctXHUwMDNlY3QpLCBkZXZfbmV0KGRldikpIFx1MDAyNlx1MDAyNlxuIDczOTpcdFx0ICAgIChmbG93LVx1MDAzZXR1cGxlaGFzaFswXS50dXBsZS5paWZpZHggPT0gZGV2LVx1MDAzZWlmaW5kZXggfHxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNS8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDkgMDg6NDA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjYyNwoJCQkJCQkJb3V0cHV0OiAyOQoJCQkJCQkJdGhvdWdodHM6IDUxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRob3VnaHQgcHJvY2VzcywgYXMgaWYgSSB3ZXJlIGFuYWx5emluZyB0aGF0IGNvZGU6CgoqKkRpdmluZyBpbnRvIHRoZSBGbG93dGFibGUgTG9naWMqKgoKT2theSwgc28gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoaXMgY29kZSBpbnRlcmFjdHMgd2l0aCB0aGUgZmxvd3RhYmxlLiBNeSBmaXJzdCBpbnN0aW5jdCBpcyB0byBmaW5kIG91dCBleGFjdGx5IHdoZXJlIGByZWFkX3BuZXQoJmFtcDtmbG93dGFibGUtJmd0O25ldClgIG9yIGp1c3QgdGhlIGV4cHJlc3Npb24gYGZsb3d0YWJsZS0mZ3Q7bmV0YCBhcmUgYmVpbmcgKnVzZWQqLiAgVGhhdCYjMzk7cyBteSBzdGFydGluZyBwb2ludC4gSSBrbm93IHRoZXNlIG5ldHdvcmtpbmcgc3RydWN0dXJlcyBhcmUgY3J1Y2lhbCwgc28gdW5kZXJzdGFuZGluZyB0aGVpciB1c2FnZSBpcyBwYXJhbW91bnQuCgpJJiMzOTttIGdvaW5nIHRvIGxldmVyYWdlIG15IGV4cGVydCBrbm93bGVkZ2UgYW5kIHVzZSBgZ3JlcGAgdG8gcXVpY2tseSBzZWFyY2ggdGhlIGNvZGViYXNlLiBJJiMzOTtsbCBzZWFyY2ggZm9yIHZhcmlhdGlvbnMgb2YgdGhlIGtleSBzdHJ1Y3R1cmVzIGFuZCB2YXJpYWJsZXMgdG8gYmUgdGhvcm91Z2guIEkmIzM5O2xsIHN0YXJ0IHdpdGggYG5mX2Zsb3d0YWJsZWAgaXRzZWxmLCBzaW5jZSB0aGF0JiMzOTtzIGxpa2VseSB0aGUgcGFyZW50IHN0cnVjdHVyZS4gSSYjMzk7bGwgYWxzbyBleHBsaWNpdGx5IGxvb2sgZm9yIGBmbG93dGFibGUtJmd0O25ldGAgYW5kIGBmbG93X3RhYmxlLSZndDtuZXRgLCBqdXN0IGluIGNhc2UgdGhlcmUgYXJlIHZhcmlhdGlvbnMgb3IgaW5jb25zaXN0ZW5jaWVzIGluIG5hbWluZyBjb252ZW50aW9ucyB0aGF0IGFyZSBpbiB0aGUgY29kZWJhc2UuIFRoaXMgc2hvdWxkIGdpdmUgbWUgYSBnb29kIG92ZXJ2aWV3IG9mIHRoZSBjb250ZXh0cyB3aGVyZSB0aGlzIG5ldHdvcmstcmVsYXRlZCBmdW5jdGlvbmFsaXR5IGlzIGJlaW5nIHV0aWxpemVkLiBJIG5lZWQgdG8gZ2V0IGEgaGlnaCBsZXZlbCB2aWV3IG9mIHdoZXJlIHRoaXMgYGZsb3d0YWJsZWAgYW5kIGl0JiMzOTtzIG5ldHdvcmsgaW50ZWdyYXRpb24gY29tZXMgaW50byBwbGF5IHdpdGhpbiB0aGUgbGFyZ2VyIHBpY3R1cmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzYvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA5IDA4OjQwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0OyhmbG93dGFibGV8Zmxvd190YWJsZXxuZl9mdHxmdCktXHUwMDNlbmV0JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9vZmZsb2FkLmM9ODY4PXN0YXRpYyBpbnQgbmZfZmxvd19vZmZsb2FkX2FsbG9jKGNvbnN0IHN0cnVjdCBmbG93X29mZmxvYWRfd29yayAqb2ZmbG9hZCxcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfb2ZmbG9hZC5jLTg3MC17XG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfb2ZmbG9hZC5jOjg3MTpcdHN0cnVjdCBuZXQgKm5ldCA9IHJlYWRfcG5ldChcdTAwMjZvZmZsb2FkLVx1MDAzZWZsb3d0YWJsZS1cdTAwM2VuZXQpO1xubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX29mZmxvYWQuYy04NzItXG4tLVxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX29mZmxvYWQuYz0xMDM3PXN0YXRpYyB2b2lkIGZsb3dfb2ZmbG9hZF93b3JrX2hhbmRsZXIoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9vZmZsb2FkLmMtMTA0Mi1cdG9mZmxvYWQgPSBjb250YWluZXJfb2Yod29yaywgc3RydWN0IGZsb3dfb2ZmbG9hZF93b3JrLCB3b3JrKTtcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9vZmZsb2FkLmM6MTA0MzpcdG5ldCA9IHJlYWRfcG5ldChcdTAwMjZvZmZsb2FkLVx1MDAzZWZsb3d0YWJsZS1cdTAwM2VuZXQpO1xubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX29mZmxvYWQuYy0xMDQ0LVx0c3dpdGNoIChvZmZsb2FkLVx1MDAzZWNtZCkge1xuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9vZmZsb2FkLmM9MTA2NT1zdGF0aWMgdm9pZCBmbG93X29mZmxvYWRfcXVldWVfd29yayhzdHJ1Y3QgZmxvd19vZmZsb2FkX3dvcmsgKm9mZmxvYWQpXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfb2ZmbG9hZC5jLTEwNjYte1xubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX29mZmxvYWQuYzoxMDY3Olx0c3RydWN0IG5ldCAqbmV0ID0gcmVhZF9wbmV0KFx1MDAyNm9mZmxvYWQtXHUwMDNlZmxvd3RhYmxlLVx1MDAzZW5ldCk7XG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfb2ZmbG9hZC5jLTEwNjgtXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzcvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA5IDA4OjQwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDczODAKCQkJCQkJCW91dHB1dDogMjI2CgkJCQkJCQl0aG91Z2h0czogODE0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFuYWx5c2lzIG9mIHRoZSBGbG93IFRhYmxlIEluaXRpYWxpemF0aW9uIEJ1ZyoqCgpPa2F5LCBzbyBJJiMzOTt2ZSBiZWVuIGxvb2tpbmcgYXQgdGhpcyBjb2RlIGFuZCBJJiMzOTt2ZSB6ZXJvZWQgaW4gb24gdGhlIGNyaXRpY2FsIGlzc3VlOiB0aGUgb3JkZXIgb2Ygb3BlcmF0aW9ucyBpbiB0aGUgZmxvdyB0YWJsZSBpbml0aWFsaXphdGlvbi4gSXQgYXBwZWFycyB0aGF0IGB3cml0ZV9wbmV0KCZhbXA7Y3RfZnQtJmd0O25mX2Z0Lm5ldCwgbmV0KTtgIHdhcyBiZWluZyBjYWxsZWQgKmFmdGVyKiBgbmZfZmxvd190YWJsZV9pbml0KCZhbXA7Y3RfZnQtJmd0O25mX2Z0KTtgLiBUaGlzIGlzIHdoZXJlIHRoZSBwcm9ibGVtIGxpZXMuCgpJbiBgbmZfZmxvd190YWJsZV9pbml0YCwgYSBgZ2Nfd29ya2AgaXMgcXVldWVkLCBsaWtlbHkgdXNpbmcgYHF1ZXVlX2RlbGF5ZWRfd29yayhzeXN0ZW1fcG93ZXJfZWZmaWNpZW50X3dxLCAmYW1wO2Zsb3d0YWJsZS0mZ3Q7Z2Nfd29yaywgSFopYC4gIFRoZSBjb25jZXJuIGlzIHRoYXQgaWYgdGhlIGdhcmJhZ2UgY29sbGVjdGlvbiB3b3JrIChgbmZfZmxvd19vZmZsb2FkX3dvcmtfZ2NgKSBvciBvZmZsb2FkIHdvcmsgd2VyZSB0byBydW4gKmJlZm9yZSogYHdyaXRlX3BuZXRgIGlzIGNhbGxlZCwgaXQgY291bGQgcG90ZW50aWFsbHkgYWNjZXNzIGBmbG93dGFibGUtJmd0O25ldGAgYmVmb3JlIGl0JiMzOTtzIHByb3Blcmx5IGluaXRpYWxpemVkLiBGdXJ0aGVybW9yZSwgc2luY2UgYGN0X2Z0ID0ga3phbGxvY19vYmooKmN0X2Z0KTtgIGluaXRpYWxpemVzIHRoZSBtZW1vcnkgd2l0aCB6ZXJvLCBtZWFuaW5nIGBjdF9mdC0mZ3Q7bmZfZnQubmV0YCB3b3VsZCBoYXZlIGJlZW4gaW5pdGlhbGl6ZWQgdG8gTlVMTC4KClRoZSBjcnV4IG9mIHRoZSBtYXR0ZXIgaXMgdGhhdCB3aGVuIGBjdF9mdGAgZ2V0cyBhbGxvY2F0ZWQgdmlhIGBremFsbG9jX29iamAsIHRoZSBlbnRpcmUgc3RydWN0dXJlIGlzIHplcm9lZC4gVGhpcyBtZWFucyB0aGF0LCBkdWUgdG8gdGhlIGluaXRpYWwgcGxhY2VtZW50LCBiZWZvcmUgdGhlIGB3cml0ZV9wbmV0YCBjYWxsLCBgY3RfZnQtJmd0O25mX2Z0Lm5ldGAgaXMgKm5vdCogdW5pbml0aWFsaXplZCBtZW1vcnksIGJ1dCByYXRoZXIgYSAqemVyb2VkKiBwb2ludGVyIChOVUxMKS4gVGhpcyBpcyBjcml0aWNhbC4gTm93LCBpZiBhbnkgcGFydCBvZiB0aGUgYG5mX2Zsb3dfdGFibGVfaW5pdGAgb3IgcmVsYXRlZCB3b3JrIChnYXJiYWdlIGNvbGxlY3Rpb24sIG9mZmxvYWQpIHdhcyB0byBkZXJlZmVyZW5jZSBgZmxvd3RhYmxlLSZndDtuZXRgIGJlZm9yZSBgd3JpdGVfcG5ldGAgc2V0cyBpdCB0byBhIHZhbGlkIG5ldCBuYW1lc3BhY2UsIGl0IHdvdWxkIGxlYWQgdG8gYSBOVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2Ugb3IsIG1vcmUgbGlrZWx5LCBhIHVzZSBvZiBhbiBpbmNvcnJlY3QgbmV0d29yayBuYW1lc3BhY2UuIFRoaXMgaXMgTk9UIGFuIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWQ7IGl0JiMzOTtzIGEgemVyb2VkIG1lbW9yeSBhY2Nlc3MuCgpJJiMzOTt2ZSBjb25maXJtZWQgdGhpcyB3aXRoIGEgY2xvc2VyIGxvb2sgYXQgdGhlIGBremFsbG9jX29iamAgY2FsbCB3aXRoaW4gYGFjdF9jdC5jYC4gTGluZSAzMzkgY2xlYXJseSBkZW1vbnN0cmF0ZXMgdGhhdCBga3phbGxvY19vYmpgIHByb3ZpZGVzIHplcm8taW5pdGlhbGl6ZWQgaGVhcCBtZW1vcnkuIFRoZSByb290IGNhdXNlIG9mIHRoZSBidWcgdGhhdCB0aGUgY29kZSBhZGRyZXNzZXMgaXMgdGhhdCB0aGUgbmV0bnMgcG9pbnRlciBpbiB0aGUgYGZsb3d0YWJsZWAgaXMgbm90IGluaXRpYWxpemVkICpiZWZvcmUqIHRoZSB0YWJsZSBpcyBpbml0aWFsaXplZCwgZXhwb3NlZCBhbmQvb3IgZ2FyYmFnZSBjb2xsZWN0aW9uIHdvcmsgbWF5IGJlZ2luLiBJZiBhIHBpZWNlIG9mIGNvZGUgd2VyZSB0byBpbnZva2UgYHJlYWRfcG5ldCgmYW1wO2Zsb3d0YWJsZS0mZ3Q7bmV0KWAgYmVmb3JlIHRoZSBmaXgsIGl0IHdvdWxkIGdldCBhIGBOVUxMYCBwb2ludGVyLgoKTm93LCBsZXQmIzM5O3MgYWRkcmVzcyB0aGUgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSBhbmQgcG90ZW50aWFsIHZ1bG5lcmFiaWxpdGllczoKCjEuICAqKktlcm5lbCBzdHJ1Y3R1cmVzIHRvIHVzZXIgc3BhY2U/KiogTm8sIHRoaXMgaXMgYWxsIGludGVybmFsIGtlcm5lbCBmbG93IHRhYmxlIGluaXRpYWxpemF0aW9uLgoyLiAgKipDb25kaXRpb25hbCBsb2dpYyBvbiB1bmluaXRpYWxpemVkIHZhcmlhYmxlcz8qKiBObywgYmVjYXVzZSBgY3RfZnRgIGlzIGFsbG9jYXRlZCB3aXRoIGBremFsbG9jX29iamAg4oCTIGl0JiMzOTtzIHplcm8taW5pdGlhbGl6ZWQuCjMuICAqKkNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdpdGggdW5pbml0aWFsaXplZCBmaWVsZHM/KiogQWxsIGZpZWxkcyBhcmUgemVyb2VkIGJ5IGBremFsbG9jX29iamAuCjQuICAqKkJvdW5kcyBjaGVja3MvbGVuZ3Rocz8qKiBOb25lIG9mIGNvbmNlcm4gaGVyZS4KCkdpdmVuIHRoaXMgdW5kZXJzdGFuZGluZywgc3RhbmRhcmQgYnVnIGRldGVjdG9ycywgcGFydGljdWxhcmx5IHRob3NlIHRoYXQgaWRlbnRpZnkgbnVsbCBkZXJlZmVyZW5jZXMsIGFyZSBxdWl0ZSBhcHByb3ByaWF0ZS4gS2VybmVsIE1lbW9yeSBTYW5pdGl6ZXIgKEtNU0FOKSwgaG93ZXZlciwgaXMgKm5vdCogcmVxdWlyZWQsIGJlY2F1c2UgdGhlcmUgYXJlIG5vIGFjdHVhbCB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcyBvciBleHBvc3VyZXMuIFRoZSB2dWxuZXJhYmlsaXR5IHJldm9sdmVzIGFyb3VuZCB0aGUgemVyb2luZyAoTlVMTCksIG5vdCBnYXJiYWdlIHZhbHVlcy4KClRoZXJlZm9yZSwgc2V0dGluZyB0aGUgcmVzdWx0cyBwYXJhbWV0ZXJzIHdpdGggYE5lZWRzS01TQU5gOiBmYWxzZSBpcyB0aGUgY29ycmVjdCBjYWxsLiBgS01TQU5SZWFzb25pbmdgIGNsZWFybHk6CgotICAgYGN0X2Z0YCBpcyBpbml0aWFsaXplZCB2aWEgYGt6YWxsb2Nfb2JqYCwgd2hpY2ggemVyby1pbml0aWFsaXplcyB0aGUgZW50aXJlIG1lbW9yeSBjaHVuay4KLSAgIFRoZSBwYXRjaCByZW9yZGVycyBgd3JpdGVfcG5ldCgmYW1wO2N0X2Z0LSZndDtuZl9mdC5uZXQsIG5ldClgIGJlZm9yZSBgbmZfZmxvd190YWJsZV9pbml0KCZhbXA7Y3RfZnQtJmd0O25mX2Z0KWAuCi0gICBXaXRob3V0IHRoZSBmaXgsIGBuZl9mdC5uZXRgIHdvdWxkIGNvbnRhaW4gYE5VTExgLCBsZWFkaW5nIHRvIGEgTlVMTCBwb2ludGVyIGRlcmVmZXJlbmNlIG9yIGFuIGFjY2VzcyBpc3N1ZSBkdWUgdG8gdGhlIHdyb25nIG5ldHdvcmsgbmFtZXNwYWNlLCBidXQgbm90IGFuIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWQuCi0gICBUaGVyZSBhcmUgbm8gdW5pbml0aWFsaXplZCB2YXJpYWJsZXMsIGluZm8tbGVha3MsIG9yIHVuaW5pdGlhbGl6ZWQgcGFkZGluZy9maWVsZHMgY29waWVkIHRvIHVzZXIgc3BhY2UsIGFuZCBubyBjaGFuZ2VzIHRvIHRoZSBib3VuZHMgb2YgdGhlIGJ1ZmZlcnMuCi0gICBUaGVyZWZvcmUsIEtNU0FOIGlzIHVubmVjZXNzYXJ5LgoKVGltZSB0byBpbnZva2UgYHNldC1yZXN1bHRzYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zOC8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDkgMDg6NDA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggcmVvcmRlcnMgdGhlIGluaXRpYWxpemF0aW9uIG9mIHRoZSBmbG93IHRhYmxlJiMzOTtzIG5ldHdvcmsgbmFtZXNwYWNlIHBvaW50ZXIgKGB3cml0ZV9wbmV0KFx1MDAyNmN0X2Z0LVx1MDAzZW5mX2Z0Lm5ldCwgbmV0KWApIHNvIHRoYXQgaXQgb2NjdXJzIHByaW9yIHRvIGNhbGxpbmcgYG5mX2Zsb3dfdGFibGVfaW5pdChcdTAwMjZjdF9mdC1cdTAwM2VuZl9mdClgLlxuXG5UaGUgZW5jbG9zaW5nIGBzdHJ1Y3QgdGNmX2N0X2Zsb3dfdGFibGVgIChgY3RfZnRgKSBpcyBhbGxvY2F0ZWQgdmlhIGBremFsbG9jX29iamAsIGVuc3VyaW5nIGFsbCBmaWVsZHMgYW5kIHBhZGRpbmcgYXJlIHplcm8taW5pdGlhbGl6ZWQuIFByaW9yIHRvIHRoZSBmaXgsIGFjY2Vzc2luZyBgbmZfZnQubmV0YCBiZWZvcmUgYHdyaXRlX3BuZXRgIHdvdWxkIHJlYWQgYSB6ZXJvZWQvTlVMTCBwb2ludGVyICh3aGljaCB3b3VsZCBtYW5pZmVzdCBhcyBhIE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZSBvciBsb2dpY2FsIGVycm9yLCBjYXVnaHQgYnkgc3RhbmRhcmQgY3Jhc2ggaGFuZGxlcnMgYW5kIEtBU0FOKSwgcmF0aGVyIHRoYW4gdW5pbml0aWFsaXplZCBtZW1vcnkuXG5cbk5vIHVuaW5pdGlhbGl6ZWQgc3RhY2sgb3IgaGVhcCBtZW1vcnkgaXMgaW50cm9kdWNlZCBvciBleHBvc2VkLCBubyB1bmluaXRpYWxpemVkIGZpZWxkcyBhcmUgcmVhZCBvciBjb3BpZWQgdG8gdXNlcnNwYWNlLCBhbmQgbm8gYnVmZmVyIGJvdW5kcyBvciBsZW5ndGhzIGFyZSBhZmZlY3RlZC4gSGVuY2UsIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIGlzIG5vdCBuZWVkZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCByZW9yZGVycyB0aGUgaW5pdGlhbGl6YXRpb24gb2YgdGhlIGZsb3cgdGFibGUmIzM5O3MgbmV0d29yayBuYW1lc3BhY2UgcG9pbnRlciAoYHdyaXRlX3BuZXQoXHUwMDI2Y3RfZnQtXHUwMDNlbmZfZnQubmV0LCBuZXQpYCkgc28gdGhhdCBpdCBvY2N1cnMgcHJpb3IgdG8gY2FsbGluZyBgbmZfZmxvd190YWJsZV9pbml0KFx1MDAyNmN0X2Z0LVx1MDAzZW5mX2Z0KWAuXG5cblRoZSBlbmNsb3NpbmcgYHN0cnVjdCB0Y2ZfY3RfZmxvd190YWJsZWAgKGBjdF9mdGApIGlzIGFsbG9jYXRlZCB2aWEgYGt6YWxsb2Nfb2JqYCwgZW5zdXJpbmcgYWxsIGZpZWxkcyBhbmQgcGFkZGluZyBhcmUgemVyby1pbml0aWFsaXplZC4gUHJpb3IgdG8gdGhlIGZpeCwgYWNjZXNzaW5nIGBuZl9mdC5uZXRgIGJlZm9yZSBgd3JpdGVfcG5ldGAgd291bGQgcmVhZCBhIHplcm9lZC9OVUxMIHBvaW50ZXIgKHdoaWNoIHdvdWxkIG1hbmlmZXN0IGFzIGEgTlVMTCBwb2ludGVyIGRlcmVmZXJlbmNlIG9yIGxvZ2ljYWwgZXJyb3IsIGNhdWdodCBieSBzdGFuZGFyZCBjcmFzaCBoYW5kbGVycyBhbmQgS0FTQU4pLCByYXRoZXIgdGhhbiB1bmluaXRpYWxpemVkIG1lbW9yeS5cblxuTm8gdW5pbml0aWFsaXplZCBzdGFjayBvciBoZWFwIG1lbW9yeSBpcyBpbnRyb2R1Y2VkIG9yIGV4cG9zZWQsIG5vIHVuaW5pdGlhbGl6ZWQgZmllbGRzIGFyZSByZWFkIG9yIGNvcGllZCB0byB1c2Vyc3BhY2UsIGFuZCBubyBidWZmZXIgYm91bmRzIG9yIGxlbmd0aHMgYXJlIGFmZmVjdGVkLiBIZW5jZSwgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgaXMgbm90IG5lZWRlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDktMDlUMDg6Mzg6MzUuNDkzNzAwMTI0WiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTA2NjA5NDA0NjE5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIk5FVF9BQ1RfQ1RcIixcbiAgICBcIk5FVF9DTFNfQUNUXCIsXG4gICAgXCJORl9DT05OVFJBQ0tcIixcbiAgICBcIk5GX0ZMT1dfVEFCTEVcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJ0Y2ZfY3RfZmxvd190YWJsZV9nZXRcIixcbiAgICBcInRjZl9jdF9pbml0XCIsXG4gICAgXCJ0Y2ZfY3RfYWN0XCIsXG4gICAgXCJuZl9mbG93X3RhYmxlX2luaXRcIlxuICBdLFxuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIHJlb3JkZXJzIHRoZSBpbml0aWFsaXphdGlvbiBvZiB0aGUgZmxvdyB0YWJsZSdzIG5ldHdvcmsgbmFtZXNwYWNlIHBvaW50ZXIgKGB3cml0ZV9wbmV0KFxcdTAwMjZjdF9mdC1cXHUwMDNlbmZfZnQubmV0LCBuZXQpYCkgc28gdGhhdCBpdCBvY2N1cnMgcHJpb3IgdG8gY2FsbGluZyBgbmZfZmxvd190YWJsZV9pbml0KFxcdTAwMjZjdF9mdC1cXHUwMDNlbmZfZnQpYC5cXG5cXG5UaGUgZW5jbG9zaW5nIGBzdHJ1Y3QgdGNmX2N0X2Zsb3dfdGFibGVgIChgY3RfZnRgKSBpcyBhbGxvY2F0ZWQgdmlhIGBremFsbG9jX29iamAsIGVuc3VyaW5nIGFsbCBmaWVsZHMgYW5kIHBhZGRpbmcgYXJlIHplcm8taW5pdGlhbGl6ZWQuIFByaW9yIHRvIHRoZSBmaXgsIGFjY2Vzc2luZyBgbmZfZnQubmV0YCBiZWZvcmUgYHdyaXRlX3BuZXRgIHdvdWxkIHJlYWQgYSB6ZXJvZWQvTlVMTCBwb2ludGVyICh3aGljaCB3b3VsZCBtYW5pZmVzdCBhcyBhIE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZSBvciBsb2dpY2FsIGVycm9yLCBjYXVnaHQgYnkgc3RhbmRhcmQgY3Jhc2ggaGFuZGxlcnMgYW5kIEtBU0FOKSwgcmF0aGVyIHRoYW4gdW5pbml0aWFsaXplZCBtZW1vcnkuXFxuXFxuTm8gdW5pbml0aWFsaXplZCBzdGFjayBvciBoZWFwIG1lbW9yeSBpcyBpbnRyb2R1Y2VkIG9yIGV4cG9zZWQsIG5vIHVuaW5pdGlhbGl6ZWQgZmllbGRzIGFyZSByZWFkIG9yIGNvcGllZCB0byB1c2Vyc3BhY2UsIGFuZCBubyBidWZmZXIgYm91bmRzIG9yIGxlbmd0aHMgYXJlIGFmZmVjdGVkLiBIZW5jZSwgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgaXMgbm90IG5lZWRlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBmaXhlcyB0aGUgaW5pdGlhbGl6YXRpb24gb3JkZXIgaW4gdGNmX2N0X2Zsb3dfdGFibGVfZ2V0KCkgYnkgc2V0dGluZyB0aGUgbmV0bnMgcG9pbnRlciAod3JpdGVfcG5ldCkgYmVmb3JlIGNhbGxpbmcgbmZfZmxvd190YWJsZV9pbml0KCksIHByZXZlbnRpbmcgcG90ZW50aWFsIHJhY2VzIG9yIHVuaW5pdGlhbGl6ZWQgbmV0bnMgYWNjZXNzIGR1cmluZyBmbG93IHRhYmxlIGluaXRpYWxpemF0aW9uLiBUaGUgY29kZSBpcyBwYXJ0IG9mIHRoZSBUQyBjb25uZWN0aW9uIHRyYWNraW5nIGFjdGlvbiAoYWN0X2N0KSBhbmQgaXMgcmVhY2hhYmxlIHZpYSBydG5ldGxpbmsgdGMgYWN0aW9uIGNvbW1hbmRzIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkIGVudmlyb25tZW50cy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDlUMDg6Mzg6MzUuNDkzNzE2MTE0WiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1OTA5MjQxOTIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCA4OTRiOTFjMzg0NGM5Zjk1ZDcxM2JiZTE1MzBmNzQwOWI3MjVhM2JiXFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBXZWQgU2VwIDkgMDg6Mzg6MzQgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvbmV0L3NjaGVkL2FjdF9jdC5jIGIvbmV0L3NjaGVkL2FjdF9jdC5jXFxuaW5kZXggOTA4MGNiMzg2YzE2OS4uNmJkMTlkYjY4ZDk3MSAxMDA2NDRcXG4tLS0gYS9uZXQvc2NoZWQvYWN0X2N0LmNcXG4rKysgYi9uZXQvc2NoZWQvYWN0X2N0LmNcXG5AQCAtMzQ5LDEwICszNDksMTAgQEAgc3RhdGljIGludCB0Y2ZfY3RfZmxvd190YWJsZV9nZXQoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgdGNmX2N0X3BhcmFtcyAqcGFyYW1zKVxcbiBcXHRjdF9mdC1cXHUwMDNlbmZfZnQudHlwZSA9IFxcdTAwMjZmbG93dGFibGVfY3Q7XFxuIFxcdGN0X2Z0LVxcdTAwM2VuZl9mdC5mbGFncyB8PSBORl9GTE9XVEFCTEVfSFdfT0ZGTE9BRCB8XFxuIFxcdFxcdFxcdCAgICAgIE5GX0ZMT1dUQUJMRV9DT1VOVEVSO1xcbitcXHR3cml0ZV9wbmV0KFxcdTAwMjZjdF9mdC1cXHUwMDNlbmZfZnQubmV0LCBuZXQpO1xcbiBcXHRlcnIgPSBuZl9mbG93X3RhYmxlX2luaXQoXFx1MDAyNmN0X2Z0LVxcdTAwM2VuZl9mdCk7XFxuIFxcdGlmIChlcnIpXFxuIFxcdFxcdGdvdG8gZXJyX2luaXQ7XFxuLVxcdHdyaXRlX3BuZXQoXFx1MDAyNmN0X2Z0LVxcdTAwM2VuZl9mdC5uZXQsIG5ldCk7XFxuIFxcbiBcXHRfX21vZHVsZV9nZXQoVEhJU19NT0RVTEUpO1xcbiBvdXRfdW5sb2NrOlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOVQwODozODozNi4wODU2NDA4OTdaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJjb3JlIiwiRHVyYXRpb24iOjY4NDc0MjU4MDQwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIk5FVF9BQ1RfQ1RcIixcbiAgICBcIk5FVF9DTFNfQUNUXCIsXG4gICAgXCJORl9DT05OVFJBQ0tcIixcbiAgICBcIk5GX0ZMT1dfVEFCTEVcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJ0Y2ZfY3RfZmxvd190YWJsZV9nZXRcIixcbiAgICBcInRjZl9jdF9pbml0XCIsXG4gICAgXCJ0Y2ZfY3RfYWN0XCIsXG4gICAgXCJuZl9mbG93X3RhYmxlX2luaXRcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBmaXhlcyB0aGUgaW5pdGlhbGl6YXRpb24gb3JkZXIgaW4gdGNmX2N0X2Zsb3dfdGFibGVfZ2V0KCkgYnkgc2V0dGluZyB0aGUgbmV0bnMgcG9pbnRlciAod3JpdGVfcG5ldCkgYmVmb3JlIGNhbGxpbmcgbmZfZmxvd190YWJsZV9pbml0KCksIHByZXZlbnRpbmcgcG90ZW50aWFsIHJhY2VzIG9yIHVuaW5pdGlhbGl6ZWQgbmV0bnMgYWNjZXNzIGR1cmluZyBmbG93IHRhYmxlIGluaXRpYWxpemF0aW9uLiBUaGUgY29kZSBpcyBwYXJ0IG9mIHRoZSBUQyBjb25uZWN0aW9uIHRyYWNraW5nIGFjdGlvbiAoYWN0X2N0KSBhbmQgaXMgcmVhY2hhYmxlIHZpYSBydG5ldGxpbmsgdGMgYWN0aW9uIGNvbW1hbmRzIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkIGVudmlyb25tZW50cy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIgYW5kIHNlY3VyaXR5IGVuZ2luZWVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBldmFsdWF0ZSB3aGV0aGVyIGl0IHdhcnJhbnRzIGZ1enppbmcgd2l0aCBzeXprYWxsZXIuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIGludGVybmFsIGFzc3VtcHRpb25zLiBZb3UgbXVzdCBhY3RpdmVseSB1c2UgeW91ciBjb2RlIGFjY2Vzc1xudG9vbHMgdG8gaW5zcGVjdCB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlLCBjYWxsZXJzLCBhbmQgc3Vycm91bmRpbmcgY29udGV4dC5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjEuIENPUkUgVFJJQUdFIFBISUxPU09QSFlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5UaGUgZ29hbCBvZiBwYXRjaCBmdXp6aW5nIGlzIHRvIGRpc2NvdmVyIGNyYXNoZXMsIHJlZ3Jlc3Npb25zLCBleHBvc2VkIGxhdGVudCBidWdzLFxuYW5kIG5ld2x5IHRyaWdnZXJlZCBhc3NlcnRpb25zIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIHNlcmllcy5cblxuLSBSRUFDSEFCSUxJVFkgSVMgVEhFIFBSSU1BUlkgR0FURTpcbiAgRnV6emluZyBjYW4gb25seSBkaXNjb3ZlciBidWdzIGluIGNvZGUgdGhhdCBjYW4gYWN0dWFsbHkgZXhlY3V0ZSBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZFxuICBlbnZpcm9ubWVudHMgKEdDRSBvciBRRU1VLCB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgZGV2aWNlcyBsaWtlIFVTQiBnYWRnZXRzLCBuZXRkZXYsIHR1bi90YXApLlxuICBJZiB0aGUgbW9kaWZpZWQgY29kZSBpcyBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgKHNlZSBTZWN0aW9uIDIpLCBpdCBNVVNUIE5PVCBiZSBmdXp6ZWQsXG4gIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciBpdCBhZGRzIGFzc2VydGlvbnMgb3IgY29tcGxleCBsb2dpYy5cblxuLSBETyBOT1QgQkxJTkRMWSBUUlVTVCBcIk5PIEZVTkNUSU9OQUwgQ0hBTkdFXCIgKE5GQ0kpIE9SIFwiUkVGQUNUT1JJTkdcIiBDTEFJTVM6XG4gIFBhdGNoIGF1dGhvcnMgcm91dGluZWx5IGxhYmVsIGNoYW5nZXMgYXMgXCJjbGVhbnVwc1wiLCBcInJlZmFjdG9yaW5nc1wiLCBvciBzdGF0ZVxuICBcIk5vIGZ1bmN0aW9uYWwgY2hhbmdlIGludGVuZGVkXCIuIERvIE5PVCB0YWtlIHRoZXNlIGNsYWltcyBhdCBmYWNlIHZhbHVlLlxuICBDb2RlIHJlZmFjdG9yaW5ncyB0aGF0IHJlYXJyYW5nZSBsb2dpYywgaW50cm9kdWNlIGhlbHBlciBmdW5jdGlvbnMsIG9yIGFsdGVyIHN0YXRlIG1hbmFnZW1lbnRcbiAgaW4gY29yZSBzdWJzeXN0ZW1zIGZyZXF1ZW50bHkgaW50cm9kdWNlIHN1YnRsZSBzZW1hbnRpYyBzaGlmdHMgb3IgdW5jb3ZlciBsYXRlbnQga2VybmVsIGJ1Z3MuXG4gIElmIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUgaXMgbW9kaWZpZWQgb3IgcmVmYWN0b3JlZCwgaXQgTVVTVCBiZSBmdXp6ZWQuXG5cbi0gTkVXIE9SIE1PRElGSUVEIEFTU0VSVElPTlMgSU4gUkVBQ0hBQkxFIENPREUgTVVTVCBCRSBGVVpaRUQ6XG4gIFdoZW4gYSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzIHJ1bnRpbWUgY2hlY2tzIG9yIGFzc2VydGlvbnMgKGUuZy4sIFdBUk5fT04qLCBWTV9XQVJOX09OKixcbiAgQlVHX09OKiwgbG9ja2RlcF9hc3NlcnQqKSBpbiByZWFjaGFibGUgY29kZSBwYXRocywgaXQgZW5mb3JjZXMgbmV3IG9yIHN0cmljdGVyIGludmFyaWFudHMuXG4gIEV2ZW4gaWYgdGhlIGF1dGhvciBiZWxpZXZlcyB0aGUgaW52YXJpYW50IGFsd2F5cyBob2xkcywgZnV6emluZyBpcyBlc3NlbnRpYWwgdG8gdmVyaWZ5IHdoZXRoZXJcbiAgYW4gdW51c3VhbCBzZXF1ZW5jZSBvZiBvcGVyYXRpb25zIGNhbiB2aW9sYXRlIGl0LlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuMi4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPWZhbHNlIChORUdBVElWRSBDUklURVJJQSlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIE9OTFkgSUYgYWxsIG1vZGlmaWVkIGNvZGUgZmFsbHMgc3RyaWN0bHkgaW50byBvbmUgb3IgbW9yZSBvZiB0aGVzZSBjYXRlZ29yaWVzOlxuXG4tIE5vbi1rZXJuZWwgYW5kIG5vbi1leGVjdXRhYmxlIGNoYW5nZXM6XG4gICogTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgY29tbWVudHMsIG9yIHNwZWxsaW5nIGZpeGVzLlxuICAqIFVzZXItc3BhY2UgZGlyZWN0b3JpZXMsIHNlbGYtdGVzdHMsIHNhbXBsZXMsIG9yIHNjcmlwdHMgKGUuZy4sIHRvb2xzLywgc2FtcGxlcy8sIHNjcmlwdHMvLCB1c3IvKVxuICAgIHRoYXQgZG8gbm90IGFmZmVjdCB0aGUgY29tcGlsZWQga2VybmVsIGltYWdlICh2bWxpbnV4KSBvciBrZXJuZWwgbW9kdWxlcy5cbiAgKiBQdXJlbHkgZGVjb3JhdGl2ZSBsb2dnaW5nIChlLmcuLCBtZXNzYWdlIHN0cmluZ3MgaW4gcHJfZXJyLCBwcmludGssIGRldl9pbmZvKSBvciB0cmFjZXBvaW50c1xuICAgIHRoYXQgZG8gbm90IGFsdGVyIGNvbnRyb2wgZmxvdyBvciBkYXRhIHN0cnVjdHVyZXMuXG4gICogQnVpbGQgc3lzdGVtIG9yIEtjb25maWcgY2hhbmdlcyB0aGF0IGRvIG5vdCBhbHRlciBjb21waWxlZCBDIGxvZ2ljLlxuLSBTdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgaGFyZHdhcmU6XG4gICogVmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoZXMsIFNtYXJ0TklDcywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICAgIGlvbmljLCBhbWRncHUpIHJlcXVpcmluZyBwaHlzaWNhbCBBU0lDL1BDSWUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG4tIFVucmVhY2hhYmxlIGV4ZWN1dGlvbiBwYXRoczpcbiAgKiBEcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzICgucmVtb3ZlLCAuc2h1dGRvd24sIHBjaV91bnJlZ2lzdGVyX2RyaXZlcikgZXhlY3V0ZWQgb25seSBkdXJpbmdcbiAgICBwaHlzaWNhbCBQQ0kgaG90LXVucGx1ZyBvciBtYW51YWwgc3lzZnMgZHJpdmVyIHVuYmluZGluZy5cbiAgKiBDb2RlIHBhdGhzIGV4Y2x1c2l2ZSB0byBhcmNoaXRlY3R1cmVzIG90aGVyIHRoYW4gdGhlIHRhcmdldCBhcmNoaXRlY3R1cmUuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4zLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9dHJ1ZSAoUE9TSVRJVkUgQ1JJVEVSSUEpXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuUmV0dXJuIFdvcnRoRnV6emluZz10cnVlIHdoZW5ldmVyIHRoZSBwYXRjaCB0b3VjaGVzIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUsIGluY2x1ZGluZzpcbi0gQ29yZSBTdWJzeXN0ZW1zOlxuICAqIEFueSBsb2dpYyBtb2RpZmljYXRpb25zIGluIG1lbW9yeSBtYW5hZ2VtZW50IChtbS8pLCBzeW5jaHJvbml6YXRpb24vbG9ja2luZyAoa2VybmVsL2xvY2tpbmcvKSxcbiAgICBCUEYsIHNjaGVkdWxlciwgY29yZSBuZXR3b3JraW5nLCBWRlMsIG9yIHN5c2NhbGwgaGFuZGxpbmcuXG4tIFJlZmFjdG9yaW5ncyBhbmQgQ29kZSBDbGVhbnVwczpcbiAgKiBBbnkgcmVzdHJ1Y3R1cmluZyBvZiByZWFjaGFibGUgZGF0YSBzdHJ1Y3R1cmVzLCBoZWxwZXIgYWJzdHJhY3Rpb25zLCBvciBhbGdvcml0aG0gZmxvd3MuXG4tIFJ1bnRpbWUgQXNzZXJ0aW9ucyBhbmQgRGVmZW5zaXZlIENoZWNrczpcbiAgKiBBbnkgaW50cm9kdWN0aW9uIG9yIGFsdGVyYXRpb24gb2YgYXNzZXJ0aW9ucyAoV0FSTl9PTiosIFZNX1dBUk5fT04qLCBCVUdfT04qLCBldGMuKSBpbiByZWFjaGFibGUgcGF0aHMuXG4tIFJlYWNoYWJsZSBEcml2ZXJzIGFuZCBQcm90b2NvbHM6XG4gICogRHJpdmVycyBhY2Nlc3NpYmxlIHZpYSB2aXJ0dWFsIGJ1c2VzICh2aXJ0aW8sIFVTQiBnYWRnZXQsIGxvb3BiYWNrLCBuZXRsaW5rLCBiaW5kZXIsIHNvY2tldHMsIGV0Yy4pLlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuNC4gRVhUUkFDVElORyBGb2N1c1N5bWJvbHMgKFBSRVZFTlRJTkcgRElMVVRJT04pXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuV2hlbiBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IG11c3QgZXh0cmFjdCBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIGludG8gRm9jdXNTeW1ib2xzIHRvIGd1aWRlIHRoZSBmdXp6ZXI6XG5cbi0gQVZPSUQgVUJJUVVJVE9VUyBMSUZFQ1lDTEUgSE9ULVBBVEhTOlxuICBEbyBOT1QgbGlzdCBnZW5lcmljLCB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYWxsZWQgYnkgYWxtb3N0IGV2ZXJ5IHByb2dyYW0gaW4gdGhlIGNvcnB1c1xuICAoaW5jbHVkaW5nLCBidXQgbm90IGxpbWl0ZWQgdG86IGdlbmVyYWwgbWVtb3J5IGFsbG9jYXRvcnMgYW5kIGRlYWxsb2NhdG9ycywgcGFnZSBmYXVsdFxuICBhbmQgdHJhcCBoYW5kbGVycywgb3IgY29yZSBzeW5jaHJvbml6YXRpb24gcHJpbWl0aXZlczsgdGhpcyBpcyBub3QgYW4gZXhoYXVzdGl2ZSBsaXN0KS5cbiAgTGlzdGluZyB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYXVzZXMgdGhlIGZ1enplciB0byBjbGFzc2lmeSB0aG91c2FuZHMgb2YgdW5yZWxhdGVkIHRlc3RzIGFzIFwiZm9jdXNlZFwiLFxuICB3aGljaCBzZXZlcmVseSBkaWx1dGVzIGZ1enppbmcgZWZmb3J0IGF3YXkgZnJvbSB0aGUgYWN0dWFsIGNoYW5nZXMuXG5cbi0gVEFSR0VUIFNQRUNJRklDIEZFQVRVUkUgTE9HSUMgQU5EIEVOVFJZUE9JTlRTOlxuICBMaXN0IGZ1bmN0aW9ucyB0aGF0IHNwZWNpZmljYWxseSBpbXBsZW1lbnQgdGhlIGxvZ2ljIGJlaW5nIGFkZGVkIG9yIGFsdGVyZWQsIG9yIGRpcmVjdCBBUEkgZW50cnlwb2ludHNcbiAgZm9yIHRoZSBzdWJzeXN0ZW0gZmVhdHVyZSB1bmRlciByZXZpZXcuXG5cbi0gSEFORExJTkcgU1RBVElDIElOTElORSBGVU5DVElPTlMgSU4gSEVBREVSUyAoLmgpOlxuICBDb21waWxlci1pbmxpbmVkIHN0YXRpYyBmdW5jdGlvbnMgKHN1Y2ggYXMgc3RhdGljIGlubGluZXMgaW4gbW0vKi5oIG9yIGluY2x1ZGUvbGludXgvKi5oKSBsYWNrXG4gIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMgaW4gdm1saW51eCBhbmQgY2Fubm90IGJlIHRhcmdldGVkIGRpcmVjdGx5IGJ5IHN5bWJvbCBjb3ZlcmFnZSBmaWx0ZXJzLlxuICBJZiB0aGUgY2hhbmdlcyBhcmUgcHJpbWFyaWx5IGluIHN0YXRpYyBpbmxpbmUgaGVscGVycywgaWRlbnRpZnkgbm9uLXN0YXRpYywgZmVhdHVyZS1zcGVjaWZpYyBjYWxsZXJcbiAgZnVuY3Rpb25zIGluIC5jIGZpbGVzIHRoYXQgZXhlcmNpc2UgdGhlbSAoYXZvaWRpbmcgdWJpcXVpdG91cyBsaWZlY3ljbGUgd3JhcHBlcnMpLlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuNS4gSURFTlRJRllJTkcgRW5hYmxlQ29uZmlnc1xuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbklkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgY29tcGlsZSBhbmQgcmVhY2ggdGhlIG1vZGlmaWVkIGNvZGU6XG4tIEluc3BlY3QgS2NvbmZpZyBmaWxlcyBhbmQgI2lmZGVmIGd1YXJkczsgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4tIENoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncyBuZWVkZWQuXG4tIFN0cmlwIGFueSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJUYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NFxuXG5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCA4OTRiOTFjMzg0NGM5Zjk1ZDcxM2JiZTE1MzBmNzQwOWI3MjVhM2JiXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFdlZCBTZXAgOSAwODozODozNCAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL25ldC9zY2hlZC9hY3RfY3QuYyBiL25ldC9zY2hlZC9hY3RfY3QuY1xuaW5kZXggOTA4MGNiMzg2YzE2OS4uNmJkMTlkYjY4ZDk3MSAxMDA2NDRcbi0tLSBhL25ldC9zY2hlZC9hY3RfY3QuY1xuKysrIGIvbmV0L3NjaGVkL2FjdF9jdC5jXG5AQCAtMzQ5LDEwICszNDksMTAgQEAgc3RhdGljIGludCB0Y2ZfY3RfZmxvd190YWJsZV9nZXQoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgdGNmX2N0X3BhcmFtcyAqcGFyYW1zKVxuIFx0Y3RfZnQtXHUwMDNlbmZfZnQudHlwZSA9IFx1MDAyNmZsb3d0YWJsZV9jdDtcbiBcdGN0X2Z0LVx1MDAzZW5mX2Z0LmZsYWdzIHw9IE5GX0ZMT1dUQUJMRV9IV19PRkZMT0FEIHxcbiBcdFx0XHQgICAgICBORl9GTE9XVEFCTEVfQ09VTlRFUjtcbitcdHdyaXRlX3BuZXQoXHUwMDI2Y3RfZnQtXHUwMDNlbmZfZnQubmV0LCBuZXQpO1xuIFx0ZXJyID0gbmZfZmxvd190YWJsZV9pbml0KFx1MDAyNmN0X2Z0LVx1MDAzZW5mX2Z0KTtcbiBcdGlmIChlcnIpXG4gXHRcdGdvdG8gZXJyX2luaXQ7XG4tXHR3cml0ZV9wbmV0KFx1MDAyNmN0X2Z0LVx1MDAzZW5mX2Z0Lm5ldCwgbmV0KTtcbiBcbiBcdF9fbW9kdWxlX2dldChUSElTX01PRFVMRSk7XG4gb3V0X3VubG9jazpcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA5VDA4OjM4OjM2LjA4NTY0MjgwN1oiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjExNjYwMzg0NjkyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBhIEtlcm5lbCBQYXRjaCBmb3IgU3l6a2FsbGVyIEZ1enppbmcgUG90ZW50aWFsKipcblxuT2theSwgaGVyZSdzIHRoZSBkZWFsLiBJJ3ZlIGJlZW4gYXNrZWQgdG8gcmV2aWV3IGEgTGludXgga2VybmVsIHBhdGNoIGFuZCBmaWd1cmUgb3V0IGlmIGl0J3MgYSBnb29kIGNhbmRpZGF0ZSBmb3IgZnV6emluZyB3aXRoIHN5emthbGxlci4gVGhlIHRhc2sgaXMgc3RyYWlnaHRmb3J3YXJkOiBpZGVudGlmeSByZWxldmFudCBzeW1ib2xzIGFuZCBkZXRlcm1pbmUgdGhlIG5lY2Vzc2FyeSBrZXJuZWwgY29uZmlndXJhdGlvbnMuIFRoaXMgaXMgcHJldHR5IHN0YW5kYXJkIGZvciBrZXJuZWwgZGV2ZWxvcG1lbnQgYW5kIGZ1enppbmcgdHJpYWdlIOKAkyBhIHNvcnQgb2YgZGVmZW5zaXZlIHF1YWxpdHkgYXNzdXJhbmNlLiBOb3RoaW5nIG91dCBvZiB0aGUgb3JkaW5hcnkgaGVyZTsgSSBjYW4gcHJvY2VlZCB3aXRob3V0IGFueSByZWQgZmxhZ3MuXG5cbkxldCdzIGRpdmUgaW50byB0aGUgcGF0Y2ggaXRzZWxmLiBJIHNlZSBhIGBkaWZmYCBmb3IgYG5ldC9zY2hlZC9hY3RfY3QuY2AuIFRoZSBjaGFuZ2UgaW52b2x2ZXMgbW9kaWZ5aW5nIHRoZSBgdGNmX2N0X2Zsb3dfdGFibGVfZ2V0YCBmdW5jdGlvbi4gU3BlY2lmaWNhbGx5LCBpdCBzZWVtcyB0byBiZSBhZGp1c3RpbmcgdGhlIGluaXRpYWxpemF0aW9uIG9mIHNvbWV0aGluZyByZWxhdGVkIHRvIGEgZmxvdyB0YWJsZSB3aXRoaW4gdGhlIGNvbm5lY3Rpb24gdHJhY2tpbmcgbW9kdWxlLiBMb29raW5nIGNsb3NlciBJIHNlZSB0aGUgZm9sbG93aW5nIGNoYW5nZTpcblxuYGBgZGlmZlxuKysrIGIvbmV0L3NjaGVkL2FjdF9jdC5jXG5AQCAtMzQ5LDEwICszNDksMTAgQEAgc3RhdGljIGludCB0Y2ZfY3RfZmxvd190YWJsZV9nZXQoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgdGNmX2N0X3BhcmFtcyAqcGFyYW1zKVxuIFx0Y3RfZnQtXHUwMDNlbmZfZnQudHlwZSA9IFx1MDAyNmZsb3d0YWJsZV9jdDtcbiBcdGN0X2Z0LVx1MDAzZW5mX2Z0LmZsYWdzIHw9IE5GX0ZMT1dUQUJMRV9IV19PRkZMT0FEIHxcbiBcdFx0XHQgICAgICBORl9GTE9XVEFCTEVfQ09VTlRFUjtcbitcdHdyaXRlX3BuZXQoXHUwMDI2Y3RfZnQtXHUwMDNlbmZfZnQubmV0LCBuZXQpO1xuIFx0ZXJyID0gbmZfZmxvd190YWJsZV9pbml0KFx1MDAyNmN0X2Z0LVx1MDAzZW5mX2Z0KTtcbiBcdGlmIChlcnIpXG4gXHRcdGdvdG8gZXJyX2luaXQ7XG4tXHR3cml0ZV9wbmV0KFx1MDAyNmN0X2Z0LVx1MDAzZW5mX2Z0Lm5ldCwgbmV0KTtcbmBgYFxuXG5UaGUga2V5IGhlcmUgaXMgdGhhdCBgd3JpdGVfcG5ldGAgaXMgYmVpbmcgY2FsbGVkICpiZWZvcmUqIGBuZl9mbG93X3RhYmxlX2luaXRgLlxuXG5UaW1lIHRvIHB1dCBvbiB0aGUgaW52ZXN0aWdhdGl2ZSBoYXQuIEknbGwgbmVlZCB0byBkaWcgaW50byBgbmV0L3NjaGVkL2FjdF9jdC5jYCBhbmQgdGFrZSBhIGxvb2sgYXQgdGhlIGltcGxlbWVudGF0aW9ucyBvZiBgdGNmX2N0X2Zsb3dfdGFibGVfZ2V0YCBhbmQgYG5mX2Zsb3dfdGFibGVfaW5pdGAuIEknbGwgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQncyBoYXBwZW5pbmcgaW4gdGhlc2UgZnVuY3Rpb25zLiBTcGVjaWZpY2FsbHksIEkgbmVlZCB0byBrbm93IHdoeSB0aGUgYHdyaXRlX3BuZXRgIGNhbGwgd2FzIG1vdmVkIGFuZCB3aGF0IGtpbmQgb2YgcG90ZW50aWFsIHN0YXRlIG9yIGRhdGEgcmFjZXMgdGhpcyBjb3VsZCB0cmlnZ2VyLiBJJ2xsIHVzZSBteSB1c3VhbCBzZXQgb2YgdG9vbHMgdG8gZG8gdGhpcyDigJMgc3RhdGljIGFuYWx5c2lzLCBjcm9zcy1yZWZlcmVuY2luZywgbWF5YmUgZXZlbiBhIHF1aWNrIHJ1biB3aXRoIGEga2VybmVsIGRlYnVnZ2VyIGlmIG5lY2Vzc2FyeS4gVGhpcyBzZWVtcyBsaWtlIGEgcmVhc29uYWJsZSBwbGFjZSB0byBzdGFydCwgYW5kIGJhc2VkIG9uIHRoZSBuYXR1cmUgb2YgdGhlIGNoYW5nZSwgaXQncyBwcm9iYWJsZSB0aGF0IHRoaXMgaXMgYSBzaW1wbGUgYnVnZml4LlxuXG5cbiIsIklucHV0VG9rZW5zIjoyOTQxLCJPdXRwdXRUb2tlbnMiOjM5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDI4LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDlUMDg6Mzg6NDcuNzQ2MDMwNzc5WiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjExNDM4MzExMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ0Y2ZfY3RfZmxvd190YWJsZV9nZXRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L3NjaGVkL2FjdF9jdC5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9zY2hlZC9hY3RfY3QuYz0yODg9c3RhdGljIGJvb2wgdGNmX2N0X2Zsb3dfaXNfb3V0ZGF0ZWQoY29uc3Qgc3RydWN0IGZsb3dfb2ZmbG9hZCAqZmxvdylcXG4tLVxcbm5ldC9zY2hlZC9hY3RfY3QuYy0yOTUtXFxubmV0L3NjaGVkL2FjdF9jdC5jOjI5NjpzdGF0aWMgdm9pZCB0Y2ZfY3RfZmxvd190YWJsZV9nZXRfcmVmKHN0cnVjdCB0Y2ZfY3RfZmxvd190YWJsZSAqY3RfZnQpO1xcbm5ldC9zY2hlZC9hY3RfY3QuYy0yOTctXFxubmV0L3NjaGVkL2FjdF9jdC5jPTI5OD1zdGF0aWMgdm9pZCB0Y2ZfY3RfbmZfZ2V0KHN0cnVjdCBuZl9mbG93dGFibGUgKmZ0KVxcbi0tXFxubmV0L3NjaGVkL2FjdF9jdC5jLTMwMi1cXG5uZXQvc2NoZWQvYWN0X2N0LmM6MzAzOlxcdHRjZl9jdF9mbG93X3RhYmxlX2dldF9yZWYoY3RfZnQpO1xcbm5ldC9zY2hlZC9hY3RfY3QuYy0zMDQtfVxcbi0tXFxubmV0L3NjaGVkL2FjdF9jdC5jPTMxNj1zdGF0aWMgc3RydWN0IG5mX2Zsb3d0YWJsZV90eXBlIGZsb3d0YWJsZV9jdCA9IHtcXG4tLVxcbm5ldC9zY2hlZC9hY3RfY3QuYy0zMjMtXFxubmV0L3NjaGVkL2FjdF9jdC5jOjMyNDpzdGF0aWMgaW50IHRjZl9jdF9mbG93X3RhYmxlX2dldChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCB0Y2ZfY3RfcGFyYW1zICpwYXJhbXMpXFxubmV0L3NjaGVkL2FjdF9jdC5jLTMyNS17XFxuLS1cXG5uZXQvc2NoZWQvYWN0X2N0LmMtMzczLVxcbm5ldC9zY2hlZC9hY3RfY3QuYzozNzQ6c3RhdGljIHZvaWQgdGNmX2N0X2Zsb3dfdGFibGVfZ2V0X3JlZihzdHJ1Y3QgdGNmX2N0X2Zsb3dfdGFibGUgKmN0X2Z0KVxcbm5ldC9zY2hlZC9hY3RfY3QuYy0zNzUte1xcbi0tXFxubmV0L3NjaGVkL2FjdF9jdC5jPTEzNzE9c3RhdGljIGludCB0Y2ZfY3RfaW5pdChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBubGF0dHIgKm5sYSxcXG4tLVxcbm5ldC9zY2hlZC9hY3RfY3QuYy0xNDQzLVxcbm5ldC9zY2hlZC9hY3RfY3QuYzoxNDQ0OlxcdGVyciA9IHRjZl9jdF9mbG93X3RhYmxlX2dldChuZXQsIHBhcmFtcyk7XFxubmV0L3NjaGVkL2FjdF9jdC5jLTE0NDUtXFx0aWYgKGVycilcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDlUMDg6Mzg6NDcuODYwNDIyMjA5WiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjA2MDc1ODAwNiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHN1bW1hcnksIGFzIHRob3VnaCBJJ20gdGhpbmtpbmcgdGhyb3VnaCB0aGlzIG15c2VsZjpcblxuKipJbnZlc3RpZ2F0aW5nIHRoZSBgYWN0X2N0YCBBY3Rpb24gaW4gdGhlIExpbnV4IFRyYWZmaWMgQ29udHJvbCBTeXN0ZW0qKlxuXG5Pa2F5LCBzbyBJIG5lZWQgdG8gZGlnIGludG8gdGhlIGBhY3RfY3RgIGFjdGlvbi4gTGV0J3Mgc3RhcnQgYnkgZ2V0dGluZyBvdXIgaGFuZHMgZGlydHkgd2l0aCB0aGUgY29kZS4gTXkgaW5zdGluY3QgaXMgdG8gemVybyBpbiBvbiBgbmV0L3NjaGVkL2FjdF9jdC5jYCwgc3BlY2lmaWNhbGx5IGFyb3VuZCBsaW5lcyAzMjQgdG8gMzcwLiBUaGF0J3MgdXN1YWxseSB3aGVyZSB0aGUgY29yZSBhY3Rpb24gbG9naWMgcmVzaWRlcywgcmlnaHQ/IFRpbWUgdG8gc2VlIGhvdyB0aGUgY29ubmVjdGlvbiB0cmFja2luZyBtYW5pcHVsYXRpb24gaXMgYWN0dWFsbHkgaW1wbGVtZW50ZWQuXG5cblRoZW4sIEknbSBnb2luZyB0byBuZWVkIHRvIGZpZ3VyZSBvdXQgdGhlIGJ1aWxkIGNvbmZpZ3VyYXRpb24uIEknbGwgY2hlY2sgYG5ldC9zY2hlZC9LY29uZmlnYCBvciBwb3NzaWJseSB0aGUgTWFrZWZpbGUgdG8gaWRlbnRpZnkgdGhlIG5lY2Vzc2FyeSBrZXJuZWwgY29uZmlndXJhdGlvbnMgbmVlZGVkIHRvIGVuYWJsZSBhbmQgd29yayB3aXRoIGBhY3RfY3RgLiBJIGhhdmUgdG8gY29uZmlybSB0aGF0IHRoaXMgbW9kdWxlIGlzIGVuYWJsZWQuIEl0J3MgaW1wb3J0YW50IHRvIHVuZGVyc3RhbmQgdGhlIGRlcGVuZGVuY2llcyBhbmQgaG93IHRoaXMgYWN0aW9uIGludGVncmF0ZXMgaW50byB0aGUgYnJvYWRlciB0cmFmZmljIGNvbnRyb2wgZWNvc3lzdGVtLiBUaW1lIHRvIGdldCB0byBpdC5cblxuXG4iLCJJbnB1dFRva2VucyI6NDQ4OSwiT3V0cHV0VG9rZW5zIjozNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA5VDA4OjM4OjQ5LjkyMTE4MzY4NVoiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE1MTE5MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvc2NoZWQvYWN0X2N0LmNcIixcbiAgXCJGaXJzdExpbmVcIjogMzIwLFxuICBcIkxpbmVDb3VudFwiOiA1MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgMzIwOlxcdFxcdC5wdXRcXHRcXHQ9IHRjZl9jdF9uZl9wdXQsXFxuIDMyMTpcXHRcXHQub3duZXJcXHRcXHQ9IFRISVNfTU9EVUxFLFxcbiAzMjI6XFx0fTtcXG4gMzIzOlxcdFxcbiAzMjQ6XFx0c3RhdGljIGludCB0Y2ZfY3RfZmxvd190YWJsZV9nZXQoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgdGNmX2N0X3BhcmFtcyAqcGFyYW1zKVxcbiAzMjU6XFx0e1xcbiAzMjY6XFx0XFx0c3RydWN0IHpvbmVzX2h0X2tleSBrZXkgPSB7IC5uZXQgPSBuZXQsIC56b25lID0gcGFyYW1zLVxcdTAwM2V6b25lIH07XFxuIDMyNzpcXHRcXHRzdHJ1Y3QgdGNmX2N0X2Zsb3dfdGFibGUgKmN0X2Z0O1xcbiAzMjg6XFx0XFx0aW50IGVyciA9IC1FTk9NRU07XFxuIDMyOTpcXHRcXG4gMzMwOlxcdFxcdG11dGV4X2xvY2soXFx1MDAyNnpvbmVzX211dGV4KTtcXG4gMzMxOlxcdFxcdHJjdV9yZWFkX2xvY2soKTtcXG4gMzMyOlxcdFxcdGN0X2Z0ID0gcmhhc2h0YWJsZV9sb29rdXAoXFx1MDAyNnpvbmVzX2h0LCBcXHUwMDI2a2V5LCB6b25lc19wYXJhbXMpO1xcbiAzMzM6XFx0XFx0aWYgKGN0X2Z0IFxcdTAwMjZcXHUwMDI2IHJlZmNvdW50X2luY19ub3RfemVybyhcXHUwMDI2Y3RfZnQtXFx1MDAzZXJlZikpIHtcXG4gMzM0OlxcdFxcdFxcdHJjdV9yZWFkX3VubG9jaygpO1xcbiAzMzU6XFx0XFx0XFx0Z290byBvdXRfdW5sb2NrO1xcbiAzMzY6XFx0XFx0fVxcbiAzMzc6XFx0XFx0cmN1X3JlYWRfdW5sb2NrKCk7XFxuIDMzODpcXHRcXG4gMzM5OlxcdFxcdGN0X2Z0ID0ga3phbGxvY19vYmooKmN0X2Z0KTtcXG4gMzQwOlxcdFxcdGlmICghY3RfZnQpXFxuIDM0MTpcXHRcXHRcXHRnb3RvIGVycl9hbGxvYztcXG4gMzQyOlxcdFxcdHJlZmNvdW50X3NldChcXHUwMDI2Y3RfZnQtXFx1MDAzZXJlZiwgMSk7XFxuIDM0MzpcXHRcXG4gMzQ0OlxcdFxcdGN0X2Z0LVxcdTAwM2VrZXkgPSBrZXk7XFxuIDM0NTpcXHRcXHRlcnIgPSByaGFzaHRhYmxlX2luc2VydF9mYXN0KFxcdTAwMjZ6b25lc19odCwgXFx1MDAyNmN0X2Z0LVxcdTAwM2Vub2RlLCB6b25lc19wYXJhbXMpO1xcbiAzNDY6XFx0XFx0aWYgKGVycilcXG4gMzQ3OlxcdFxcdFxcdGdvdG8gZXJyX2luc2VydDtcXG4gMzQ4OlxcdFxcbiAzNDk6XFx0XFx0Y3RfZnQtXFx1MDAzZW5mX2Z0LnR5cGUgPSBcXHUwMDI2Zmxvd3RhYmxlX2N0O1xcbiAzNTA6XFx0XFx0Y3RfZnQtXFx1MDAzZW5mX2Z0LmZsYWdzIHw9IE5GX0ZMT1dUQUJMRV9IV19PRkZMT0FEIHxcXG4gMzUxOlxcdFxcdFxcdFxcdCAgICAgIE5GX0ZMT1dUQUJMRV9DT1VOVEVSO1xcbiAzNTI6XFx0XFx0d3JpdGVfcG5ldChcXHUwMDI2Y3RfZnQtXFx1MDAzZW5mX2Z0Lm5ldCwgbmV0KTtcXG4gMzUzOlxcdFxcdGVyciA9IG5mX2Zsb3dfdGFibGVfaW5pdChcXHUwMDI2Y3RfZnQtXFx1MDAzZW5mX2Z0KTtcXG4gMzU0OlxcdFxcdGlmIChlcnIpXFxuIDM1NTpcXHRcXHRcXHRnb3RvIGVycl9pbml0O1xcbiAzNTY6XFx0XFxuIDM1NzpcXHRcXHRfX21vZHVsZV9nZXQoVEhJU19NT0RVTEUpO1xcbiAzNTg6XFx0b3V0X3VubG9jazpcXG4gMzU5OlxcdFxcdHBhcmFtcy1cXHUwMDNlY3RfZnQgPSBjdF9mdDtcXG4gMzYwOlxcdFxcdHBhcmFtcy1cXHUwMDNlbmZfZnQgPSBcXHUwMDI2Y3RfZnQtXFx1MDAzZW5mX2Z0O1xcbiAzNjE6XFx0XFx0bXV0ZXhfdW5sb2NrKFxcdTAwMjZ6b25lc19tdXRleCk7XFxuIDM2MjpcXHRcXG4gMzYzOlxcdFxcdHJldHVybiAwO1xcbiAzNjQ6XFx0XFxuIDM2NTpcXHRlcnJfaW5pdDpcXG4gMzY2OlxcdFxcdHJoYXNodGFibGVfcmVtb3ZlX2Zhc3QoXFx1MDAyNnpvbmVzX2h0LCBcXHUwMDI2Y3RfZnQtXFx1MDAzZW5vZGUsIHpvbmVzX3BhcmFtcyk7XFxuIDM2NzpcXHRlcnJfaW5zZXJ0OlxcbiAzNjg6XFx0XFx0a2ZyZWUoY3RfZnQpO1xcbiAzNjk6XFx0ZXJyX2FsbG9jOlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOVQwODozODo0OS45MjEzMzgyMTVaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoxNTcyMjQxODIyNiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLlxuXG4qKlVuZGVyc3RhbmRpbmcgdGhlIE9yZGVyaW5nIG9mIE5ldGZpbHRlciBGbG93IFRhYmxlIEluaXRpYWxpemF0aW9uKipcblxuTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIGZpZ3VyZSBvdXQgKndoeSogdGhlIGB3cml0ZV9wbmV0KFx1MDAyNmN0X2Z0LVx1MDAzZW5mX2Z0Lm5ldCwgbmV0KWAgY2FsbCBoYXBwZW5zICpiZWZvcmUqIHRoZSBgbmZfZmxvd190YWJsZV9pbml0YCBmdW5jdGlvbiBpbiB0aGUgTmV0ZmlsdGVyIGNvZGUuIEl0J3MgYSBrZXkgZGV0YWlsLCBhbmQgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGltcGxpY2F0aW9ucyBvZiB0aGlzIHNwZWNpZmljIHNlcXVlbmNpbmcuIE15IGV4cGVydGlzZSB0ZWxscyBtZSB0aGF0IGluaXRpYWxpemF0aW9uIG9yZGVyIGlzICpjcml0aWNhbCogaW4gdGhlc2UgY29tcGxleCBzeXN0ZW1zLiBTb21ldGhpbmcgaXMgY2xlYXJseSByZWx5aW5nIG9uIGB3cml0ZV9wbmV0YCBiZWluZyBjb21wbGV0ZWQgcHJpb3IuXG5cbk15IG5leHQgc3RlcCBpcyB0byBkZWx2ZSBkaXJlY3RseSBpbnRvIGBuZl9mbG93X3RhYmxlX2luaXRgIGl0c2VsZi4gSSBuZWVkIHRvIGV4YW1pbmUgaXRzIGltcGxlbWVudGF0aW9uIHRvIHVuZGVyc3RhbmQgcHJlY2lzZWx5IHdoYXQgcmVzb3VyY2VzIGl0IGV4cGVjdHMgdG8gYmUgaW4gcGxhY2Ugb3IgYXZhaWxhYmxlIGR1cmluZyBpdHMgZXhlY3V0aW9uLiBJJ2xsIGJlIGxvb2tpbmcgZm9yIGRlcGVuZGVuY2llcyBvbiB0aGUgYGN0X2Z0LVx1MDAzZW5mX2Z0Lm5ldGAgc3RydWN0dXJlLCB0aGUgYG5ldGAgcG9pbnRlciwgb3IgYW55IG90aGVyIHJlbGF0ZWQgZGF0YSB0aGF0IG1pZ2h0IGV4cGxhaW4gdGhpcyBvcmRlcmluZyBjb25zdHJhaW50LiBJJ2xsIG5lZWQgdG8gc2VlIGlmIGBuZl9mbG93X3RhYmxlX2luaXRgIGRpcmVjdGx5IHVzZXMgdGhlIHBvaW50ZXIsIG9yIGFueSBkYXRhIHN0cnVjdHVyZXMgdGhhdCByZWx5IHVwb24gaXQuIFRoZW4gSSBjYW4gZGV0ZXJtaW5lIGlmIGFueSByZWFkL3dyaXRlcyBvY2N1ciB3aGljaCBuZWNlc3NpdGF0ZSB0aGUgcHJpb3IgaW5pdGlhbGlzYXRpb24uIEkgaGF2ZSBhIGh1bmNoIGl0IHdpbGwgYmUgdGhlIGNhc2UsIGFuZCBJIGNhbiBzdGFydCB0byBpbmZlciB0aGUgZGVzaWduLlxuXG5cbiIsIklucHV0VG9rZW5zIjo1NTcwLCJPdXRwdXRUb2tlbnMiOjMyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTAsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wOVQwODozOTowNS42NDM3NTg5MTFaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTE4MjU0ODU0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm5mX2Zsb3dfdGFibGVfaW5pdFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvbmV0ZmlsdGVyL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfY29yZS5jPTcwMj1FWFBPUlRfU1lNQk9MX0dQTChuZl9mbG93X2RuYXRfcG9ydCk7XFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2NvcmUuYy03MDMtXFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2NvcmUuYzo3MDQ6aW50IG5mX2Zsb3dfdGFibGVfaW5pdChzdHJ1Y3QgbmZfZmxvd3RhYmxlICpmbG93dGFibGUpXFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2NvcmUuYy03MDUte1xcbi0tXFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2NvcmUuYy03MjUtfVxcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9jb3JlLmM6NzI2OkVYUE9SVF9TWU1CT0xfR1BMKG5mX2Zsb3dfdGFibGVfaW5pdCk7XFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2NvcmUuYy03MjctXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfY29yZS5jPTc3Nz1FWFBPUlRfU1lNQk9MX0dQTChuZl9mbG93X3RhYmxlX2ZyZWUpO1xcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9jb3JlLmMtNzc4LVxcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9jb3JlLmM6Nzc5OnN0YXRpYyBpbnQgbmZfZmxvd190YWJsZV9pbml0X25ldChzdHJ1Y3QgbmV0ICpuZXQpXFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2NvcmUuYy03ODAte1xcbi0tXFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2NvcmUuYz03OTA9c3RhdGljIGludCBuZl9mbG93X3RhYmxlX3Blcm5ldF9pbml0KHN0cnVjdCBuZXQgKm5ldClcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9jb3JlLmMtNzkzLVxcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9jb3JlLmM6Nzk0OlxcdHJldCA9IG5mX2Zsb3dfdGFibGVfaW5pdF9uZXQobmV0KTtcXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfY29yZS5jLTc5NS1cXHRpZiAocmV0IFxcdTAwM2MgMClcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9jb3JlLmMtNzk3LVxcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9jb3JlLmM6Nzk4OlxcdHJldCA9IG5mX2Zsb3dfdGFibGVfaW5pdF9wcm9jKG5ldCk7XFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2NvcmUuYy03OTktXFx0aWYgKHJldCBcXHUwMDNjIDApXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfaW5ldC5jPTY4PXN0YXRpYyBzdHJ1Y3QgbmZfZmxvd3RhYmxlX3R5cGUgZmxvd3RhYmxlX2luZXQgPSB7XFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2luZXQuYy02OS1cXHQuZmFtaWx5XFx0XFx0PSBORlBST1RPX0lORVQsXFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2luZXQuYzo3MDpcXHQuaW5pdFxcdFxcdD0gbmZfZmxvd190YWJsZV9pbml0LFxcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9pbmV0LmMtNzEtXFx0LnNldHVwXFx0XFx0PSBuZl9mbG93X3RhYmxlX29mZmxvYWRfc2V0dXAsXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfaW5ldC5jPTc4PXN0YXRpYyBzdHJ1Y3QgbmZfZmxvd3RhYmxlX3R5cGUgZmxvd3RhYmxlX2lwdjQgPSB7XFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2luZXQuYy03OS1cXHQuZmFtaWx5XFx0XFx0PSBORlBST1RPX0lQVjQsXFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2luZXQuYzo4MDpcXHQuaW5pdFxcdFxcdD0gbmZfZmxvd190YWJsZV9pbml0LFxcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9pbmV0LmMtODEtXFx0LnNldHVwXFx0XFx0PSBuZl9mbG93X3RhYmxlX29mZmxvYWRfc2V0dXAsXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfaW5ldC5jPTg4PXN0YXRpYyBzdHJ1Y3QgbmZfZmxvd3RhYmxlX3R5cGUgZmxvd3RhYmxlX2lwdjYgPSB7XFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2luZXQuYy04OS1cXHQuZmFtaWx5XFx0XFx0PSBORlBST1RPX0lQVjYsXFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2luZXQuYzo5MDpcXHQuaW5pdFxcdFxcdD0gbmZfZmxvd190YWJsZV9pbml0LFxcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9pbmV0LmMtOTEtXFx0LnNldHVwXFx0XFx0PSBuZl9mbG93X3RhYmxlX29mZmxvYWRfc2V0dXAsXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfcHJvY2ZzLmM9NjA9c3RhdGljIGNvbnN0IHN0cnVjdCBzZXFfb3BlcmF0aW9ucyBuZl9mbG93X3RhYmxlX2NwdV9zZXFfb3BzID0ge1xcbi0tXFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX3Byb2Nmcy5jLTY2LVxcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9wcm9jZnMuYzo2NzppbnQgbmZfZmxvd190YWJsZV9pbml0X3Byb2Moc3RydWN0IG5ldCAqbmV0KVxcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9wcm9jZnMuYy02OC17XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA5VDA4OjM5OjA1Ljc2MjAxNzk4NVoiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjIwMDMyNTk1NzAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBzdW1tYXJ5LCBhcyBpZiBJIHdlcmUgdGhpbmtpbmcgdGhlc2UgdGhvdWdodHM6XG5cbioqRGl2aW5nIGludG8gdGhlIEZsb3cgVGFibGUgSW5pdGlhbGl6YXRpb24qKlxuXG5BbHJpZ2h0LCBsZXQncyBnZXQgZG93biB0byBicmFzcyB0YWNrcy4gSSBuZWVkIHRvIHRha2UgYSBsb29rIGF0IHRoZSBpbml0aWFsaXphdGlvbiBvZiB0aGUgZmxvdyB0YWJsZS4gU3BlY2lmaWNhbGx5LCBJJ20gZm9jdXNpbmcgb24gYG5mX2Zsb3dfdGFibGVfaW5pdGAgaW4gYG5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9jb3JlLmNgLiBUaGlzIGlzIHdoZXJlIHRoZSB3aG9sZSB0aGluZyBzdGFydHMsIHRoZSBmb3VuZGF0aW9uIGZvciB0aGUgTmV0ZmlsdGVyIGZsb3cgdGFibGUgZnVuY3Rpb25hbGl0eS4gVW5kZXJzdGFuZGluZyB0aGlzIGZ1bmN0aW9uIGlzIGNydWNpYWwgZm9yIGdyYXNwaW5nIGhvdyB0aGUgdGFibGUgaXMgc2V0IHVwLCB3aGF0IGRhdGEgc3RydWN0dXJlcyBhcmUgaW52b2x2ZWQsIGFuZCB1bHRpbWF0ZWx5LCBob3cgcGFja2V0cyBhcmUgbWF0Y2hlZCBhbmQgbWFuYWdlZCB3aXRoaW4gdGhlIGZsb3cgdGFibGUuIEknbSBlc3BlY2lhbGx5IGludGVyZXN0ZWQgaW4gaG93IGl0IGludGVyYWN0cyB3aXRoIHRoZSB1bmRlcmx5aW5nIGhhcmR3YXJlLCBob3cgdGhlIG1lbW9yeSBpcyBhbGxvY2F0ZWQsIGFuZCB3aGF0IGxvY2tzIGFyZSBlbXBsb3llZCB0byBrZWVwIGV2ZXJ5dGhpbmcgc3luY2hyb25pemVkLiBUaW1lIHRvIGRpZyBpbiBhbmQgc2VlIHdoYXQncyB3aGF0LlxuXG5cbiIsIklucHV0VG9rZW5zIjo2OTY4LCJPdXRwdXRUb2tlbnMiOjQyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDlUMDg6Mzk6MDcuNzY1Mjc5OTU1WiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjc5OTYwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9jb3JlLmNcIixcbiAgXCJGaXJzdExpbmVcIjogNzAwLFxuICBcIkxpbmVDb3VudFwiOiAzNVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgNzAwOlxcdFxcdG5mX2Zsb3dfbmF0X3BvcnQoc2tiLCB0aG9mZiwgcHJvdG9jb2wsIHBvcnQsIG5ld19wb3J0KTtcXG4gNzAxOlxcdH1cXG4gNzAyOlxcdEVYUE9SVF9TWU1CT0xfR1BMKG5mX2Zsb3dfZG5hdF9wb3J0KTtcXG4gNzAzOlxcdFxcbiA3MDQ6XFx0aW50IG5mX2Zsb3dfdGFibGVfaW5pdChzdHJ1Y3QgbmZfZmxvd3RhYmxlICpmbG93dGFibGUpXFxuIDcwNTpcXHR7XFxuIDcwNjpcXHRcXHRpbnQgZXJyO1xcbiA3MDc6XFx0XFxuIDcwODpcXHRcXHRJTklUX0RFTEFZRURfV09SSyhcXHUwMDI2Zmxvd3RhYmxlLVxcdTAwM2VnY193b3JrLCBuZl9mbG93X29mZmxvYWRfd29ya19nYyk7XFxuIDcwOTpcXHRcXHRmbG93X2Jsb2NrX2luaXQoXFx1MDAyNmZsb3d0YWJsZS1cXHUwMDNlZmxvd19ibG9jayk7XFxuIDcxMDpcXHRcXHRpbml0X3J3c2VtKFxcdTAwMjZmbG93dGFibGUtXFx1MDAzZWZsb3dfYmxvY2tfbG9jayk7XFxuIDcxMTpcXHRcXG4gNzEyOlxcdFxcdGVyciA9IHJoYXNodGFibGVfaW5pdChcXHUwMDI2Zmxvd3RhYmxlLVxcdTAwM2VyaGFzaHRhYmxlLFxcbiA3MTM6XFx0XFx0XFx0XFx0ICAgICAgXFx1MDAyNm5mX2Zsb3dfb2ZmbG9hZF9yaGFzaF9wYXJhbXMpO1xcbiA3MTQ6XFx0XFx0aWYgKGVyciBcXHUwMDNjIDApXFxuIDcxNTpcXHRcXHRcXHRyZXR1cm4gZXJyO1xcbiA3MTY6XFx0XFxuIDcxNzpcXHRcXHRxdWV1ZV9kZWxheWVkX3dvcmsoc3lzdGVtX3Bvd2VyX2VmZmljaWVudF93cSxcXG4gNzE4OlxcdFxcdFxcdFxcdCAgIFxcdTAwMjZmbG93dGFibGUtXFx1MDAzZWdjX3dvcmssIEhaKTtcXG4gNzE5OlxcdFxcbiA3MjA6XFx0XFx0bXV0ZXhfbG9jayhcXHUwMDI2Zmxvd3RhYmxlX2xvY2spO1xcbiA3MjE6XFx0XFx0bGlzdF9hZGQoXFx1MDAyNmZsb3d0YWJsZS1cXHUwMDNlbGlzdCwgXFx1MDAyNmZsb3d0YWJsZXMpO1xcbiA3MjI6XFx0XFx0bXV0ZXhfdW5sb2NrKFxcdTAwMjZmbG93dGFibGVfbG9jayk7XFxuIDcyMzpcXHRcXG4gNzI0OlxcdFxcdHJldHVybiAwO1xcbiA3MjU6XFx0fVxcbiA3MjY6XFx0RVhQT1JUX1NZTUJPTF9HUEwobmZfZmxvd190YWJsZV9pbml0KTtcXG4gNzI3OlxcdFxcbiA3Mjg6XFx0c3RhdGljIHZvaWQgbmZfZmxvd190YWJsZV9kb19jbGVhbnVwKHN0cnVjdCBuZl9mbG93dGFibGUgKmZsb3dfdGFibGUsXFxuIDcyOTpcXHRcXHRcXHRcXHRcXHQgICAgIHN0cnVjdCBmbG93X29mZmxvYWQgKmZsb3csIHZvaWQgKmRhdGEpXFxuIDczMDpcXHR7XFxuIDczMTpcXHRcXHRzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gZGF0YTtcXG4gNzMyOlxcdFxcbiA3MzM6XFx0XFx0aWYgKCFkZXYpIHtcXG4gNzM0OlxcdFxcdFxcdGZsb3dfb2ZmbG9hZF90ZWFyZG93bihmbG93KTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDlUMDg6Mzk6MDcuNzY1MzYxNTU1WiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjE3MTAyODA0MTYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBGbG93IFRhYmxlIEluaXRpYWxpemF0aW9uKipcblxuT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMgYG5mX2Zsb3dfdGFibGVfaW5pdGAgZnVuY3Rpb24uIFRoZSBmaXJzdCB0aGluZyB0aGF0IGp1bXBzIG91dCBpcyB0aGUgYHF1ZXVlX2RlbGF5ZWRfd29ya2AgY2FsbC4gSXQgbG9va3MgbGlrZSBpdCdzIHNjaGVkdWxpbmcgc29tZSBnYXJiYWdlIGNvbGxlY3Rpb24gd29yayB1c2luZyBgc3lzdGVtX3Bvd2VyX2VmZmljaWVudF93cWAsIHdpdGggYSBkZWxheSBvZiBvbmUgYEhaYC4gSW50ZXJlc3RpbmcuIEkgd2FudCB0byB1bmRlcnN0YW5kIGhvdyB0aGlzIGZsb3cgdGFibGUgZ2FyYmFnZSBjb2xsZWN0aW9uIGlzIGhhbmRsZWQuXG5cblNvLCB0aGUgbmV4dCBsb2dpY2FsIHN0ZXAgaXMgdG8gZXhhbWluZSB3aGF0IGBuZl9mbG93X29mZmxvYWRfd29ya19nY2AgaXMgZG9pbmcsIGFzIGl0IGlzIHJlbGF0ZWQgdG8gdGhpcyBgZmxvd3RhYmxlYCBzdHJ1Y3R1cmUuIExldCdzIGRpZyBpbnRvIGBuZl9mbG93X29mZmxvYWRfd29ya19nY2AgYW5kIHNlZSB3aGF0J3MgaGFwcGVuaW5nLlxuXG5cbiIsIklucHV0VG9rZW5zIjo3NzY2LCJPdXRwdXRUb2tlbnMiOjM1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6ODAsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wOVQwODozOTowOS40NzU2NDQ2MDFaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjk1MDYyMjYyLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm5mX2Zsb3dfb2ZmbG9hZF93b3JrX2djXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9uZXRmaWx0ZXIvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9jb3JlLmM9NjAyPXZvaWQgbmZfZmxvd190YWJsZV9nY19ydW4oc3RydWN0IG5mX2Zsb3d0YWJsZSAqZmxvd190YWJsZSlcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9jb3JlLmMtNjA2LVxcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9jb3JlLmM6NjA3OnN0YXRpYyB2b2lkIG5mX2Zsb3dfb2ZmbG9hZF93b3JrX2djKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfY29yZS5jLTYwOC17XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfY29yZS5jPTcwND1pbnQgbmZfZmxvd190YWJsZV9pbml0KHN0cnVjdCBuZl9mbG93dGFibGUgKmZsb3d0YWJsZSlcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9jb3JlLmMtNzA3LVxcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9jb3JlLmM6NzA4OlxcdElOSVRfREVMQVlFRF9XT1JLKFxcdTAwMjZmbG93dGFibGUtXFx1MDAzZWdjX3dvcmssIG5mX2Zsb3dfb2ZmbG9hZF93b3JrX2djKTtcXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfY29yZS5jLTcwOS1cXHRmbG93X2Jsb2NrX2luaXQoXFx1MDAyNmZsb3d0YWJsZS1cXHUwMDNlZmxvd19ibG9jayk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA5VDA4OjM5OjA5LjU3MDcxMTAyM1oiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjozNzYzMzQyNjI1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlIHdlIGdvLi4uXG5cbioqRGl2aW5nIGludG8gYG5mX2Zsb3dfb2ZmbG9hZF93b3JrX2djYCoqXG5cbkFscmlnaHQsIGxldCdzIGdldCBkb3duIHRvIGJyYXNzIHRhY2tzLiBJIG5lZWQgdG8gdGFrZSBhIGxvb2sgYXQgYG5mX2Zsb3dfb2ZmbG9hZF93b3JrX2djYC4gU291bmRzIGxpa2Ugd2UncmUgdGFsa2luZyBhYm91dCB0aGUgZ2FyYmFnZSBjb2xsZWN0aW9uIG1lY2hhbmlzbSBmb3IgZmxvdyBvZmZsb2FkIHdvcmsgaXRlbXMsIGFuZCB0aGF0J3MgYSBjcml0aWNhbCBwYXJ0IG9mIG1haW50YWluaW5nIHBlcmZvcm1hbmNlIGFuZCBzdGFiaWxpdHkuIEknbSBleHBlY3RpbmcgdGhpcyB0byBiZSB0aGUgZnVuY3Rpb24gdGhhdCBjbGVhbnMgdXAgc3RhbGUgb3IgY29tcGxldGVkIG9mZmxvYWQgZW50cmllcywgZnJlZWluZyB1cCByZXNvdXJjZXMgYW5kIHByZXZlbnRpbmcgYW55IG1lbW9yeSBsZWFrcyBvciBwZXJmb3JtYW5jZSBkZWdyYWRhdGlvbiBmcm9tIHVuY2hlY2tlZCBncm93dGguIEknbSBob3BpbmcgdG8gc2VlIGhvdyBpdCBpbnRlcmFjdHMgd2l0aCB0aGUgYWdpbmcgYW5kIHRpbWVvdXQgbWVjaGFuaXNtcyDigJMgaG93IGFnZ3Jlc3NpdmVseSBkb2VzIGl0IHJlY2xhaW0gZW50cmllcz8gRG9lcyBpdCBwcmlvcml0aXplIGNlcnRhaW4gdHlwZXMgb2YgZW50cmllcywgbGlrZSB0aG9zZSB0aGF0IGhhdmUgYmVlbiBpZGxlIHRoZSBsb25nZXN0IG9yIHRob3NlIGFzc29jaWF0ZWQgd2l0aCBmbG93cyB0aGF0IGhhdmUgYmVlbiB0ZXJtaW5hdGVkPyBBbmQgaXMgdGhlcmUgYSBjbGVhciBkaXN0aW5jdGlvbiBiZXR3ZWVuIHRoZSBjbGVhbnVwIHBlcmZvcm1lZCBieSBgbmZfZmxvd19vZmZsb2FkX3dvcmtfZ2NgIGFuZCBhbnkgb3RoZXIgd29yayBxdWV1ZSBtYW5hZ2VtZW50IHdpdGhpbiB0aGUgb2ZmbG9hZCBpbmZyYXN0cnVjdHVyZT8gQSBzb2xpZCB1bmRlcnN0YW5kaW5nIG9mIHRoaXMgZ2FyYmFnZSBjb2xsZWN0aW9uIHByb2Nlc3MgaXMga2V5IHRvIGV2YWx1YXRpbmcgdGhlIG92ZXJhbGwgcm9idXN0bmVzcyBhbmQgZWZmaWNpZW5jeSBvZiB0aGUgb2ZmbG9hZCBzeXN0ZW0uIExldCdzIHNlZSBob3cgdGhleSd2ZSBpbXBsZW1lbnRlZCBpdC4uLlxuXG5cbiIsIklucHV0VG9rZW5zIjo4MzA5LCJPdXRwdXRUb2tlbnMiOjQyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDlUMDg6Mzk6MTMuMzM0MDU2NTI4WiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEyNzc0MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfY29yZS5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDYwMCxcbiAgXCJMaW5lQ291bnRcIjogNDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDYwMDpcXHR9XFxuIDYwMTpcXHRcXG4gNjAyOlxcdHZvaWQgbmZfZmxvd190YWJsZV9nY19ydW4oc3RydWN0IG5mX2Zsb3d0YWJsZSAqZmxvd190YWJsZSlcXG4gNjAzOlxcdHtcXG4gNjA0OlxcdFxcdG5mX2Zsb3dfdGFibGVfaXRlcmF0ZShmbG93X3RhYmxlLCBuZl9mbG93X29mZmxvYWRfZ2Nfc3RlcCwgTlVMTCk7XFxuIDYwNTpcXHR9XFxuIDYwNjpcXHRcXG4gNjA3OlxcdHN0YXRpYyB2b2lkIG5mX2Zsb3dfb2ZmbG9hZF93b3JrX2djKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcXG4gNjA4OlxcdHtcXG4gNjA5OlxcdFxcdHN0cnVjdCBuZl9mbG93dGFibGUgKmZsb3dfdGFibGU7XFxuIDYxMDpcXHRcXG4gNjExOlxcdFxcdGZsb3dfdGFibGUgPSBjb250YWluZXJfb2Yod29yaywgc3RydWN0IG5mX2Zsb3d0YWJsZSwgZ2Nfd29yay53b3JrKTtcXG4gNjEyOlxcdFxcdG5mX2Zsb3dfdGFibGVfZ2NfcnVuKGZsb3dfdGFibGUpO1xcbiA2MTM6XFx0XFx0cXVldWVfZGVsYXllZF93b3JrKHN5c3RlbV9wb3dlcl9lZmZpY2llbnRfd3EsIFxcdTAwMjZmbG93X3RhYmxlLVxcdTAwM2VnY193b3JrLCBIWik7XFxuIDYxNDpcXHR9XFxuIDYxNTpcXHRcXG4gNjE2OlxcdHN0YXRpYyB2b2lkIG5mX2Zsb3dfbmF0X3BvcnRfdGNwKHN0cnVjdCBza19idWZmICpza2IsIHVuc2lnbmVkIGludCB0aG9mZixcXG4gNjE3OlxcdFxcdFxcdFxcdFxcdCBfX2JlMTYgcG9ydCwgX19iZTE2IG5ld19wb3J0KVxcbiA2MTg6XFx0e1xcbiA2MTk6XFx0XFx0c3RydWN0IHRjcGhkciAqdGNwaDtcXG4gNjIwOlxcdFxcbiA2MjE6XFx0XFx0dGNwaCA9ICh2b2lkICopKHNrYl9uZXR3b3JrX2hlYWRlcihza2IpICsgdGhvZmYpO1xcbiA2MjI6XFx0XFx0aW5ldF9wcm90b19jc3VtX3JlcGxhY2UyKFxcdTAwMjZ0Y3BoLVxcdTAwM2VjaGVjaywgc2tiLCBwb3J0LCBuZXdfcG9ydCwgZmFsc2UpO1xcbiA2MjM6XFx0fVxcbiA2MjQ6XFx0XFxuIDYyNTpcXHRzdGF0aWMgdm9pZCBuZl9mbG93X25hdF9wb3J0X3VkcChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1bnNpZ25lZCBpbnQgdGhvZmYsXFxuIDYyNjpcXHRcXHRcXHRcXHRcXHQgX19iZTE2IHBvcnQsIF9fYmUxNiBuZXdfcG9ydClcXG4gNjI3OlxcdHtcXG4gNjI4OlxcdFxcdHN0cnVjdCB1ZHBoZHIgKnVkcGg7XFxuIDYyOTpcXHRcXG4gNjMwOlxcdFxcdHVkcGggPSAodm9pZCAqKShza2JfbmV0d29ya19oZWFkZXIoc2tiKSArIHRob2ZmKTtcXG4gNjMxOlxcdFxcdGlmICh1ZHBoLVxcdTAwM2VjaGVjayB8fCBza2ItXFx1MDAzZWlwX3N1bW1lZCA9PSBDSEVDS1NVTV9QQVJUSUFMKSB7XFxuIDYzMjpcXHRcXHRcXHRpbmV0X3Byb3RvX2NzdW1fcmVwbGFjZTIoXFx1MDAyNnVkcGgtXFx1MDAzZWNoZWNrLCBza2IsIHBvcnQsXFxuIDYzMzpcXHRcXHRcXHRcXHRcXHRcXHQgbmV3X3BvcnQsIGZhbHNlKTtcXG4gNjM0OlxcdFxcdFxcdGlmICghdWRwaC1cXHUwMDNlY2hlY2spXFxuIDYzNTpcXHRcXHRcXHRcXHR1ZHBoLVxcdTAwM2VjaGVjayA9IENTVU1fTUFOR0xFRF8wO1xcbiA2MzY6XFx0XFx0fVxcbiA2Mzc6XFx0fVxcbiA2Mzg6XFx0XFxuIDYzOTpcXHRzdGF0aWMgdm9pZCBuZl9mbG93X25hdF9wb3J0KHN0cnVjdCBza19idWZmICpza2IsIHVuc2lnbmVkIGludCB0aG9mZixcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDlUMDg6Mzk6MTMuMzM0MTg3Mzg4WiIsIlNlcSI6MTUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjI1NjEwMjU5NTAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBzdW1tYXJ5LCBwcmVzZW50ZWQgYXMgYSBzdHJlYW0gb2YgdGhvdWdodDpcblxuKipUcmFjaW5nIHRoZSBOZXR3b3JrIE5hbWVzcGFjZSBDb25uZWN0aW9uKipcblxuQWxyaWdodCwgSSBuZWVkIHRvIGZpZ3VyZSBvdXQgaG93IHRoaXMgYGZsb3d0YWJsZS1cdTAwM2VuZXRgIGNvbm5lY3Rpb24gaXMgYmVpbmcgdXNlZCB3aXRoaW4gdGhpcyBjb2RlLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgbmV0d29yayBuYW1lc3BhY2UgY29udGV4dC4gTGV0J3Mgc2VlLi4uIEknbGwgc3RhcnQgYnkgZG9pbmcgYSBxdWljayBncmVwLCBvciBtYXliZSBhIGNvZGUgc2VhcmNoLiBJJ2xsIG5lZWQgdG8gbG9vayBmb3Igd2hlcmUgYGZsb3d0YWJsZS1cdTAwM2VuZXRgIGlzIGRpcmVjdGx5IHJlZmVyZW5jZWQsIHRoYXQgc2hvdWxkIGJlIGVhc3kgZW5vdWdoLiBUaGVuLCBJIHNob3VsZCBhbHNvIGNoZWNrIGlmIGByZWFkX3BuZXQoXHUwMDI2Zmxvd3RhYmxlLVx1MDAzZW5ldClgIGlzIHVzZWQgYW55d2hlcmUgYmVjYXVzZSB0aGF0IGNvdWxkIGFsc28gYmUgcmVsZXZhbnQuIEp1c3QgaW4gY2FzZSBpdCdzIGEgZmllbGQgd2l0aCBpbmRpcmVjdCBhY2Nlc3MsIEknbGwgYWxzbyBjb25maXJtIHRoYXQgdGhlIHNpbXBsZSBgZmxvd3RhYmxlLVx1MDAzZW5ldGAgYWNjZXNzIGlzIGNvdmVyZWQuIFRoYXQgc2hvdWxkIGdpdmUgbWUgYSBnb29kIHBpY3R1cmUgb2YgaG93IHRoZSBuZXR3b3JrIG5hbWVzcGFjZSBpbmZvcm1hdGlvbiBlbmNhcHN1bGF0ZWQgd2l0aGluIHRoaXMgYGZsb3d0YWJsZWAgaXMgYmVpbmcgYWNjZXNzZWQgYW5kIHV0aWxpemVkIHRocm91Z2hvdXQgdGhlIGNvZGViYXNlLiBUaGUgZ29hbCBpcyBhIGNsZWFyIHVuZGVyc3RhbmRpbmcgb2YgdGhlIG5ldHdvcmsgbmFtZXNwYWNlIGNvbm5lY3Rpb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjkzMDAsIk91dHB1dFRva2VucyI6MjgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMywiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA5VDA4OjM5OjE1Ljg5NTIxNjAzOFoiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjMxODA1MDE0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm5mX2Zsb3d0YWJsZS4qbmV0XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2luZXQuYz00NT1zdGF0aWMgaW50IG5mX2Zsb3dfcnVsZV9yb3V0ZV9pbmV0KHN0cnVjdCBuZXQgKm5ldCxcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9pbmV0LmMtNjctXFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2luZXQuYzo2ODpzdGF0aWMgc3RydWN0IG5mX2Zsb3d0YWJsZV90eXBlIGZsb3d0YWJsZV9pbmV0ID0ge1xcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9pbmV0LmMtNjktXFx0LmZhbWlseVxcdFxcdD0gTkZQUk9UT19JTkVULFxcbi0tXFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX3Byb2Nmcy5jPTY3PWludCBuZl9mbG93X3RhYmxlX2luaXRfcHJvYyhzdHJ1Y3QgbmV0ICpuZXQpXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfcHJvY2ZzLmMtNzAtXFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX3Byb2Nmcy5jOjcxOlxcdHBkZSA9IHByb2NfY3JlYXRlX25ldChcXFwibmZfZmxvd3RhYmxlXFxcIiwgMDQ0NCwgbmV0LVxcdTAwM2Vwcm9jX25ldF9zdGF0LFxcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9wcm9jZnMuYy03Mi1cXHRcXHRcXHQgICAgICBcXHUwMDI2bmZfZmxvd190YWJsZV9jcHVfc2VxX29wcyxcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9wcm9jZnMuYz03Nz12b2lkIG5mX2Zsb3dfdGFibGVfZmluaV9wcm9jKHN0cnVjdCBuZXQgKm5ldClcXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfcHJvY2ZzLmMtNzgte1xcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9wcm9jZnMuYzo3OTpcXHRyZW1vdmVfcHJvY19lbnRyeShcXFwibmZfZmxvd3RhYmxlXFxcIiwgbmV0LVxcdTAwM2Vwcm9jX25ldF9zdGF0KTtcXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfcHJvY2ZzLmMtODAtfVxcbi0tXFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX3hkcC5jPTI0PXN0YXRpYyBERUZJTkVfTVVURVgobmZfeGRwX2hhc2h0YWJsZV9sb2NrKTtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV94ZHAuYy0yNi0vKiBjYWxsZXIgbXVzdCBob2xkIHJjdSByZWFkIGxvY2sgKi9cXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfeGRwLmM6Mjc6c3RydWN0IG5mX2Zsb3d0YWJsZSAqbmZfZmxvd3RhYmxlX2J5X2Rldihjb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV94ZHAuYy0yOC17XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA5VDA4OjM5OjE2LjEyNzAyNjUxMloiLCJTZXEiOjE3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo1MTI4NzAyMDE3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqSW52ZXN0aWdhdGluZyBOZXR3b3JrIEZsb3cgVGFibGUgQWNjZXNzKipcblxuUmlnaHQsIHNvIEkgbmVlZCB0byBkaWcgaW50byBob3cgdGhlIGBwbmV0YCBzdWJzeXN0ZW0sIHNwZWNpZmljYWxseSwgaXMgaW50ZXJhY3Rpbmcgd2l0aCB0aGUgZmxvdyB0YWJsZS4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzLCBsZXQncyBjYXN0IGEgd2lkZSBuZXQgd2l0aCB0aGUgc2VhcmNoIHRlcm1zLiBJJ20gZ29pbmcgdG8gbG9vayBmb3IgYW55IGluc3RhbmNlcyB3aGVyZSBgcmVhZF9wbmV0LipuZl9mbG93dGFibGVgLCBgcmVhZF9wbmV0LipmbG93dGFibGVgLCBvciBldmVuIHRoZSBzaG9ydGhhbmQgYHJlYWRfcG5ldC4qZnRgIGlzIHVzZWQgd2l0aGluIHRoZSBgbmV0L2AgZGlyZWN0b3J5LiBUaGF0IGAuKmAgaXMgY3J1Y2lhbDsgaXQgbmVlZHMgdG8gYmUgZmxleGlibGUgZW5vdWdoIHRvIGFjY291bnQgZm9yIGZ1bmN0aW9uIG5hbWVzLCB2YXJpYWJsZXMgb3IgYW55IG90aGVyIHJlbGF0ZWQgc3RydWN0dXJlcyBvciB1c2FnZSBpbiB0aGUgc291cmNlIGNvZGUuIEknbSBwYXJ0aWN1bGFybHkgaW50ZXJlc3RlZCBpZiB0aGVyZSBpcyBhbnkgc3RydWN0dXJlIHRoYXQgaGFzIHNpbWlsYXIgdXNhZ2UgdGhhdCBwcm92aWRlcyBhbiBhcHByb3ByaWF0ZSBtYXRjaC5cblxuVGhpcyBzaG91bGQgY2FwdHVyZSBhbnkgY29kZSBwYXRocyB0aGF0IG1pZ2h0IGJlIGRpcmVjdGx5IHJlYWRpbmcgZnJvbSBvciBhY2Nlc3NpbmcgdGhlIGZsb3cgdGFibGUgZnJvbSB0aGUgYHBuZXRgIGNvbnRleHQuIE9mIGNvdXJzZSwgSSdsbCBiZSBtaW5kZnVsIG9mIGluZGlyZWN0IGFjY2Vzc2VzIGFzIHdlbGwsIGJ1dCB0aGlzIGluaXRpYWwgc2VhcmNoIHNob3VsZCBoaWdobGlnaHQgdGhlIG1vc3Qgb2J2aW91cyBjYW5kaWRhdGVzIGZvciBmdXJ0aGVyIGFuYWx5c2lzLiBBZGRpdGlvbmFsbHkgSSBzaG91bGQgbG9vayBmb3Igc3RydWN0dXJlcyBsaWtlIGBmbG93dGFibGUtXHUwMDNlbmV0YCB0byBzZWUgaWYgdGhlcmUgaXMgYW55IGFsdGVybmF0aXZlIG1ldGhvZCBvZiBhY2Nlc3MuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEwMDg4LCJPdXRwdXRUb2tlbnMiOjI2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDlUMDg6Mzk6MjEuMjU1NzMxMzY5WiIsIlNlcSI6MTgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMTkwNDc1MDUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwicmVhZF9wbmV0XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2NlcGgvY2VwaF9jb21tb24uYz0xMzE9aW50IGNlcGhfY29tcGFyZV9vcHRpb25zKHN0cnVjdCBjZXBoX29wdGlvbnMgKm5ld19vcHQsXFxuLS1cXG5uZXQvY2VwaC9jZXBoX2NvbW1vbi5jLTE0My1cXHQgKi9cXG5uZXQvY2VwaC9jZXBoX2NvbW1vbi5jOjE0NDpcXHRpZiAoIW5ldF9lcShjdXJyZW50LVxcdTAwM2Vuc3Byb3h5LVxcdTAwM2VuZXRfbnMsIHJlYWRfcG5ldChcXHUwMDI2Y2xpZW50LVxcdTAwM2Vtc2dyLm5ldCkpKVxcbm5ldC9jZXBoL2NlcGhfY29tbW9uLmMtMTQ1LVxcdFxcdHJldHVybiAtMTtcXG4tLVxcbm5ldC9jZXBoL21lc3Nlbmdlci5jPTQzNT1pbnQgY2VwaF90Y3BfY29ubmVjdChzdHJ1Y3QgY2VwaF9jb25uZWN0aW9uICpjb24pXFxuLS1cXG5uZXQvY2VwaC9tZXNzZW5nZXIuYy00NDctXFx0bm9pb19mbGFnID0gbWVtYWxsb2Nfbm9pb19zYXZlKCk7XFxubmV0L2NlcGgvbWVzc2VuZ2VyLmM6NDQ4OlxcdHJldCA9IHNvY2tfY3JlYXRlX2tlcm4ocmVhZF9wbmV0KFxcdTAwMjZjb24tXFx1MDAzZW1zZ3ItXFx1MDAzZW5ldCksIHNzLnNzX2ZhbWlseSxcXG5uZXQvY2VwaC9tZXNzZW5nZXIuYy00NDktXFx0XFx0XFx0ICAgICAgIFNPQ0tfU1RSRUFNLCBJUFBST1RPX1RDUCwgXFx1MDAyNnNvY2spO1xcbi0tXFxubmV0L2NlcGgvbWVzc2VuZ2VyLmM9MTcwMD12b2lkIGNlcGhfbWVzc2VuZ2VyX2Zpbmkoc3RydWN0IGNlcGhfbWVzc2VuZ2VyICptc2dyKVxcbm5ldC9jZXBoL21lc3Nlbmdlci5jLTE3MDEte1xcbm5ldC9jZXBoL21lc3Nlbmdlci5jOjE3MDI6XFx0cHV0X25ldChyZWFkX3BuZXQoXFx1MDAyNm1zZ3ItXFx1MDAzZW5ldCkpO1xcbm5ldC9jZXBoL21lc3Nlbmdlci5jLTE3MDMtfVxcbi0tXFxubmV0L2RldmxpbmsvY29yZS5jPTI4NT1zdHJ1Y3QgbmV0ICpkZXZsaW5rX25ldChjb25zdCBzdHJ1Y3QgZGV2bGluayAqZGV2bGluaylcXG5uZXQvZGV2bGluay9jb3JlLmMtMjg2LXtcXG5uZXQvZGV2bGluay9jb3JlLmM6Mjg3OlxcdHJldHVybiByZWFkX3BuZXQoXFx1MDAyNmRldmxpbmstXFx1MDAzZV9uZXQpO1xcbm5ldC9kZXZsaW5rL2NvcmUuYy0yODgtfVxcbi0tXFxubmV0L2RldmxpbmsvbmV0bGluay5jPTE0Mz1pbnQgZGV2bGlua19ubF9wdXRfbmVzdGVkX2hhbmRsZShzdHJ1Y3Qgc2tfYnVmZiAqbXNnLCBzdHJ1Y3QgbmV0ICpuZXQsXFxuLS1cXG5uZXQvZGV2bGluay9uZXRsaW5rLmMtMTU1LVxcdHJjdV9yZWFkX2xvY2soKTtcXG5uZXQvZGV2bGluay9uZXRsaW5rLmM6MTU2OlxcdGRldmxfbmV0ID0gcmVhZF9wbmV0X3JjdShcXHUwMDI2ZGV2bGluay1cXHUwMDNlX25ldCk7XFxubmV0L2RldmxpbmsvbmV0bGluay5jLTE1Ny1cXHRpZiAoIW5ldF9lcShuZXQsIGRldmxfbmV0KSkge1xcbi0tXFxubmV0L2lwdjQvaW5ldF9jb25uZWN0aW9uX3NvY2suYz03NTg9c3RydWN0IGRzdF9lbnRyeSAqaW5ldF9jc2tfcm91dGVfcmVxKGNvbnN0IHN0cnVjdCBzb2NrICpzayxcXG4tLVxcbm5ldC9pcHY0L2luZXRfY29ubmVjdGlvbl9zb2NrLmMtNzYyLVxcdGNvbnN0IHN0cnVjdCBpbmV0X3JlcXVlc3Rfc29jayAqaXJlcSA9IGluZXRfcnNrKHJlcSk7XFxubmV0L2lwdjQvaW5ldF9jb25uZWN0aW9uX3NvY2suYzo3NjM6XFx0c3RydWN0IG5ldCAqbmV0ID0gcmVhZF9wbmV0KFxcdTAwMjZpcmVxLVxcdTAwM2VpcmVxX25ldCk7XFxubmV0L2lwdjQvaW5ldF9jb25uZWN0aW9uX3NvY2suYy03NjQtXFx0c3RydWN0IGlwX29wdGlvbnNfcmN1ICpvcHQ7XFxuLS1cXG5uZXQvaXB2NC9pbmV0X2Nvbm5lY3Rpb25fc29jay5jPTc5Mz1zdHJ1Y3QgZHN0X2VudHJ5ICppbmV0X2Nza19yb3V0ZV9jaGlsZF9zb2NrKGNvbnN0IHN0cnVjdCBzb2NrICpzayxcXG4tLVxcbm5ldC9pcHY0L2luZXRfY29ubmVjdGlvbl9zb2NrLmMtNzk3LVxcdGNvbnN0IHN0cnVjdCBpbmV0X3JlcXVlc3Rfc29jayAqaXJlcSA9IGluZXRfcnNrKHJlcSk7XFxubmV0L2lwdjQvaW5ldF9jb25uZWN0aW9uX3NvY2suYzo3OTg6XFx0c3RydWN0IG5ldCAqbmV0ID0gcmVhZF9wbmV0KFxcdTAwMjZpcmVxLVxcdTAwM2VpcmVxX25ldCk7XFxubmV0L2lwdjQvaW5ldF9jb25uZWN0aW9uX3NvY2suYy03OTktXFx0c3RydWN0IGluZXRfc29jayAqbmV3aW5ldCA9IGluZXRfc2sobmV3c2spO1xcbi0tXFxubmV0L2lwdjQvaXBtci5jPTQ0Mj1zdGF0aWMgdm9pZCBpcG1yX2ZyZWVfdGFibGUoc3RydWN0IG1yX3RhYmxlICptcnQsIHN0cnVjdCBsaXN0X2hlYWQgKmRldl9raWxsX2xpc3QpXFxubmV0L2lwdjQvaXBtci5jLTQ0My17XFxubmV0L2lwdjQvaXBtci5jOjQ0NDpcXHRzdHJ1Y3QgbmV0ICpuZXQgPSByZWFkX3BuZXQoXFx1MDAyNm1ydC1cXHUwMDNlbmV0KTtcXG5uZXQvaXB2NC9pcG1yLmMtNDQ1LVxcdExJU1RfSEVBRChpcG1yX2Rldl9raWxsX2xpc3QpO1xcbi0tXFxubmV0L2lwdjQvaXBtci5jPTY4Nz1zdGF0aWMgaW50IHZpZl9kZWxldGUoc3RydWN0IG1yX3RhYmxlICptcnQsIGludCB2aWZpLCBpbnQgbm90aWZ5LFxcbi0tXFxubmV0L2lwdjQvaXBtci5jLTY4OS17XFxubmV0L2lwdjQvaXBtci5jOjY5MDpcXHRzdHJ1Y3QgbmV0ICpuZXQgPSByZWFkX3BuZXQoXFx1MDAyNm1ydC1cXHUwMDNlbmV0KTtcXG5uZXQvaXB2NC9pcG1yLmMtNjkxLVxcdHN0cnVjdCB2aWZfZGV2aWNlICp2O1xcbi0tXFxubmV0L2lwdjQvaXBtci5jPTc1OD1zdGF0aWMgdm9pZCBpcG1yX2Rlc3Ryb3lfdW5yZXMoc3RydWN0IG1yX3RhYmxlICptcnQsIHN0cnVjdCBtZmNfY2FjaGUgKmMpXFxubmV0L2lwdjQvaXBtci5jLTc1OS17XFxubmV0L2lwdjQvaXBtci5jOjc2MDpcXHRzdHJ1Y3QgbmV0ICpuZXQgPSByZWFkX3BuZXQoXFx1MDAyNm1ydC1cXHUwMDNlbmV0KTtcXG5uZXQvaXB2NC9pcG1yLmMtNzYxLVxcdHN0cnVjdCBza19idWZmICpza2I7XFxuLS1cXG5uZXQvaXB2NC9pcG1yLmM9MTE0Mj1zdGF0aWMgaW50IGlwbXJfY2FjaGVfdW5yZXNvbHZlZChzdHJ1Y3QgbXJfdGFibGUgKm1ydCwgdmlmaV90IHZpZmksXFxuLS1cXG5uZXQvaXB2NC9pcG1yLmMtMTE0NC17XFxubmV0L2lwdjQvaXBtci5jOjExNDU6XFx0c3RydWN0IG5ldCAqbmV0ID0gcmVhZF9wbmV0KFxcdTAwMjZtcnQtXFx1MDAzZW5ldCk7XFxubmV0L2lwdjQvaXBtci5jLTExNDYtXFx0Y29uc3Qgc3RydWN0IGlwaGRyICppcGggPSBpcF9oZHIoc2tiKTtcXG4tLVxcbm5ldC9pcHY0L2lwbXIuYz0xMjIxPXN0YXRpYyBpbnQgaXBtcl9tZmNfZGVsZXRlKHN0cnVjdCBtcl90YWJsZSAqbXJ0LCBzdHJ1Y3QgbWZjY3RsICptZmMsIGludCBwYXJlbnQpXFxubmV0L2lwdjQvaXBtci5jLTEyMjIte1xcbm5ldC9pcHY0L2lwbXIuYzoxMjIzOlxcdHN0cnVjdCBuZXQgKm5ldCA9IHJlYWRfcG5ldChcXHUwMDI2bXJ0LVxcdTAwM2VuZXQpO1xcbm5ldC9pcHY0L2lwbXIuYy0xMjI0LVxcdHN0cnVjdCBtZmNfY2FjaGUgKmM7XFxuLS1cXG5uZXQvaXB2NC9pcG1yLmM9MTMyMj1zdGF0aWMgdm9pZCBtcm91dGVfY2xlYW5fdGFibGVzKHN0cnVjdCBtcl90YWJsZSAqbXJ0LCBpbnQgZmxhZ3MsXFxuLS1cXG5uZXQvaXB2NC9pcG1yLmMtMTMyNC17XFxubmV0L2lwdjQvaXBtci5jOjEzMjU6XFx0c3RydWN0IG5ldCAqbmV0ID0gcmVhZF9wbmV0KFxcdTAwMjZtcnQtXFx1MDAzZW5ldCk7XFxubmV0L2lwdjQvaXBtci5jLTEzMjYtXFx0c3RydWN0IG1mY19jYWNoZSAqY2FjaGU7XFxuLS1cXG5uZXQvaXB2NC9pcG1yLmM9MjU4Mj1zdGF0aWMgdm9pZCBtcm91dGVfbmV0bGlua19ldmVudChzdHJ1Y3QgbXJfdGFibGUgKm1ydCwgc3RydWN0IG1mY19jYWNoZSAqbWZjLFxcbi0tXFxubmV0L2lwdjQvaXBtci5jLTI1ODQte1xcbm5ldC9pcHY0L2lwbXIuYzoyNTg1OlxcdHN0cnVjdCBuZXQgKm5ldCA9IHJlYWRfcG5ldChcXHUwMDI2bXJ0LVxcdTAwM2VuZXQpO1xcbm5ldC9pcHY0L2lwbXIuYy0yNTg2LVxcdHN0cnVjdCBza19idWZmICpza2I7XFxuLS1cXG5uZXQvaXB2NC9pcG1yLmM9MjYyMj1zdGF0aWMgdm9pZCBpZ21wbXNnX25ldGxpbmtfZXZlbnQoY29uc3Qgc3RydWN0IG1yX3RhYmxlICptcnQsIHN0cnVjdCBza19idWZmICpwa3QpXFxubmV0L2lwdjQvaXBtci5jLTI2MjMte1xcbm5ldC9pcHY0L2lwbXIuYzoyNjI0OlxcdHN0cnVjdCBuZXQgKm5ldCA9IHJlYWRfcG5ldChcXHUwMDI2bXJ0LVxcdTAwM2VuZXQpO1xcbm5ldC9pcHY0L2lwbXIuYy0yNjI1LVxcdHN0cnVjdCBubG1zZ2hkciAqbmxoO1xcbi0tXFxubmV0L2lwdjQvdGNwX3RpbWVyLmM9NzUzPW5vaW5saW5lX2Zvcl90cmFjaW5nIHZvaWQgdGNwX3N5bl9hY2tfdGltZW91dChjb25zdCBzdHJ1Y3QgcmVxdWVzdF9zb2NrICpyZXEpXFxubmV0L2lwdjQvdGNwX3RpbWVyLmMtNzU0LXtcXG5uZXQvaXB2NC90Y3BfdGltZXIuYzo3NTU6XFx0c3RydWN0IG5ldCAqbmV0ID0gcmVhZF9wbmV0KFxcdTAwMjZpbmV0X3JzayhyZXEpLVxcdTAwM2VpcmVxX25ldCk7XFxubmV0L2lwdjQvdGNwX3RpbWVyLmMtNzU2LVxcbi0tXFxubmV0L2lwdjYvaXA2bXIuYz00MjA9c3RhdGljIHZvaWQgaXA2bXJfZnJlZV90YWJsZShzdHJ1Y3QgbXJfdGFibGUgKm1ydCxcXG4tLVxcbm5ldC9pcHY2L2lwNm1yLmMtNDIyLXtcXG5uZXQvaXB2Ni9pcDZtci5jOjQyMzpcXHRzdHJ1Y3QgbmV0ICpuZXQgPSByZWFkX3BuZXQoXFx1MDAyNm1ydC1cXHUwMDNlbmV0KTtcXG5uZXQvaXB2Ni9pcDZtci5jLTQyNC1cXHRMSVNUX0hFQUQoaXA2bXJfZGV2X2tpbGxfbGlzdCk7XFxuLS1cXG5uZXQvaXB2Ni9pcDZtci5jPTc0Mj1zdGF0aWMgaW50IG1pZjZfZGVsZXRlKHN0cnVjdCBtcl90YWJsZSAqbXJ0LCBpbnQgdmlmaSwgaW50IG5vdGlmeSxcXG4tLVxcbm5ldC9pcHY2L2lwNm1yLmMtNzU3LVxcbm5ldC9pcHY2L2lwNm1yLmM6NzU4OlxcdGNhbGxfaXA2bXJfdmlmX2VudHJ5X25vdGlmaWVycyhyZWFkX3BuZXQoXFx1MDAyNm1ydC1cXHUwMDNlbmV0KSxcXG5uZXQvaXB2Ni9pcDZtci5jLTc1OS1cXHRcXHRcXHRcXHQgICAgICAgRklCX0VWRU5UX1ZJRl9ERUwsIHYsIGRldixcXG4tLVxcbm5ldC9pcHY2L2lwNm1yLmM9ODE1PXN0YXRpYyB2b2lkIGlwNm1yX2Rlc3Ryb3lfdW5yZXMoc3RydWN0IG1yX3RhYmxlICptcnQsIHN0cnVjdCBtZmM2X2NhY2hlICpjKVxcbm5ldC9pcHY2L2lwNm1yLmMtODE2LXtcXG5uZXQvaXB2Ni9pcDZtci5jOjgxNzpcXHRzdHJ1Y3QgbmV0ICpuZXQgPSByZWFkX3BuZXQoXFx1MDAyNm1ydC1cXHUwMDNlbmV0KTtcXG5uZXQvaXB2Ni9pcDZtci5jLTgxOC1cXHRzdHJ1Y3Qgc2tfYnVmZiAqc2tiO1xcbi0tXFxubmV0L2lwdjYvaXA2bXIuYz0xMTgzPXN0YXRpYyBpbnQgaXA2bXJfY2FjaGVfdW5yZXNvbHZlZChzdHJ1Y3QgbXJfdGFibGUgKm1ydCwgbWlmaV90IG1pZmksXFxuLS1cXG5uZXQvaXB2Ni9pcDZtci5jLTExODUte1xcbm5ldC9pcHY2L2lwNm1yLmM6MTE4NjpcXHRzdHJ1Y3QgbmV0ICpuZXQgPSByZWFkX3BuZXQoXFx1MDAyNm1ydC1cXHUwMDNlbmV0KTtcXG5uZXQvaXB2Ni9pcDZtci5jLTExODctXFx0c3RydWN0IG1mYzZfY2FjaGUgKmMgPSBOVUxMO1xcbi0tXFxubmV0L2lwdjYvaXA2bXIuYz0xMjY3PXN0YXRpYyBpbnQgaXA2bXJfbWZjX2RlbGV0ZShzdHJ1Y3QgbXJfdGFibGUgKm1ydCwgc3RydWN0IG1mNmNjdGwgKm1mYyxcXG4tLVxcbm5ldC9pcHY2L2lwNm1yLmMtMTI4MC1cXG5uZXQvaXB2Ni9pcDZtci5jOjEyODE6XFx0Y2FsbF9pcDZtcl9tZmNfZW50cnlfbm90aWZpZXJzKHJlYWRfcG5ldChcXHUwMDI2bXJ0LVxcdTAwM2VuZXQpLFxcbm5ldC9pcHY2L2lwNm1yLmMtMTI4Mi1cXHRcXHRcXHRcXHQgICAgICAgRklCX0VWRU5UX0VOVFJZX0RFTCwgYywgbXJ0LVxcdTAwM2VpZCk7XFxuLS1cXG5uZXQvaXB2Ni9pcDZtci5jPTE1Njg9c3RhdGljIHZvaWQgbXJvdXRlX2NsZWFuX3RhYmxlcyhzdHJ1Y3QgbXJfdGFibGUgKm1ydCwgaW50IGZsYWdzLFxcbi0tXFxubmV0L2lwdjYvaXA2bXIuYy0xNTcwLXtcXG5uZXQvaXB2Ni9pcDZtci5jOjE1NzE6XFx0c3RydWN0IG5ldCAqbmV0ID0gcmVhZF9wbmV0KFxcdTAwMjZtcnQtXFx1MDAzZW5ldCk7XFxubmV0L2lwdjYvaXA2bXIuYy0xNTcyLVxcdHN0cnVjdCBtcl9tZmMgKmMsICp0bXA7XFxuLS1cXG5uZXQvaXB2Ni9pcDZtci5jPTI2MDc9c3RhdGljIHZvaWQgbXI2X25ldGxpbmtfZXZlbnQoc3RydWN0IG1yX3RhYmxlICptcnQsIHN0cnVjdCBtZmM2X2NhY2hlICptZmMsXFxuLS1cXG5uZXQvaXB2Ni9pcDZtci5jLTI2MDkte1xcbm5ldC9pcHY2L2lwNm1yLmM6MjYxMDpcXHRzdHJ1Y3QgbmV0ICpuZXQgPSByZWFkX3BuZXQoXFx1MDAyNm1ydC1cXHUwMDNlbmV0KTtcXG5uZXQvaXB2Ni9pcDZtci5jLTI2MTEtXFx0c3RydWN0IHNrX2J1ZmYgKnNrYjtcXG4tLVxcbm5ldC9pcHY2L2lwNm1yLmM9MjY0Nz1zdGF0aWMgdm9pZCBtcnQ2bXNnX25ldGxpbmtfZXZlbnQoY29uc3Qgc3RydWN0IG1yX3RhYmxlICptcnQsIHN0cnVjdCBza19idWZmICpwa3QpXFxubmV0L2lwdjYvaXA2bXIuYy0yNjQ4LXtcXG5uZXQvaXB2Ni9pcDZtci5jOjI2NDk6XFx0c3RydWN0IG5ldCAqbmV0ID0gcmVhZF9wbmV0KFxcdTAwMjZtcnQtXFx1MDAzZW5ldCk7XFxubmV0L2lwdjYvaXA2bXIuYy0yNjUwLVxcdHN0cnVjdCBubG1zZ2hkciAqbmxoO1xcbi0tXFxubmV0L21wdGNwL3N5bmNvb2tpZXMuYz03MT12b2lkIHN1YmZsb3dfaW5pdF9yZXFfY29va2llX2pvaW5fc2F2ZShjb25zdCBzdHJ1Y3QgbXB0Y3Bfc3ViZmxvd19yZXF1ZXN0X3NvY2sgKnN1YmZsb3dfcmVxLFxcbi0tXFxubmV0L21wdGNwL3N5bmNvb2tpZXMuYy03My17XFxubmV0L21wdGNwL3N5bmNvb2tpZXMuYzo3NDpcXHRzdHJ1Y3QgbmV0ICpuZXQgPSByZWFkX3BuZXQoXFx1MDAyNnN1YmZsb3dfcmVxLVxcdTAwM2Vzay5yZXEuaXJlcV9uZXQpO1xcbm5ldC9tcHRjcC9zeW5jb29raWVzLmMtNzUtXFx0dTMyIGkgPSBtcHRjcF9qb2luX2VudHJ5X2hhc2goc2tiLCBuZXQpO1xcbi0tXFxubmV0L21wdGNwL3N5bmNvb2tpZXMuYz05Mj1ib29sIG1wdGNwX3Rva2VuX2pvaW5fY29va2llX2luaXRfc3RhdGUoc3RydWN0IG1wdGNwX3N1YmZsb3dfcmVxdWVzdF9zb2NrICpzdWJmbG93X3JlcSxcXG4tLVxcbm5ldC9tcHRjcC9zeW5jb29raWVzLmMtOTQte1xcbm5ldC9tcHRjcC9zeW5jb29raWVzLmM6OTU6XFx0c3RydWN0IG5ldCAqbmV0ID0gcmVhZF9wbmV0KFxcdTAwMjZzdWJmbG93X3JlcS1cXHUwMDNlc2sucmVxLmlyZXFfbmV0KTtcXG5uZXQvbXB0Y3Avc3luY29va2llcy5jLTk2LVxcdHUzMiBpID0gbXB0Y3Bfam9pbl9lbnRyeV9oYXNoKHNrYiwgbmV0KTtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2Jyb2FkY2FzdC5jPTE5PWludCBuZl9jb25udHJhY2tfYnJvYWRjYXN0X2hlbHAoc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2Jyb2FkY2FzdC5jLTI0LVxcdGNvbnN0IHN0cnVjdCBuZl9jb25udHJhY2tfaGVscGVyICpoZWxwZXI7XFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfYnJvYWRjYXN0LmM6MjU6XFx0c3RydWN0IG5ldCAqbmV0ID0gcmVhZF9wbmV0KFxcdTAwMjZjdC1cXHUwMDNlY3RfbmV0KTtcXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19icm9hZGNhc3QuYy0yNi1cXHRzdHJ1Y3QgbmZfY29ubnRyYWNrX2V4cGVjdCAqZXhwO1xcbi0tXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfZXhwZWN0LmM9MTE3PW5mX2N0X2V4cF9lcXVhbChjb25zdCBzdHJ1Y3QgbmZfY29ubnRyYWNrX3R1cGxlICp0dXBsZSxcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2V4cGVjdC5jLTEyMi1cXHRyZXR1cm4gbmZfY3RfdHVwbGVfbWFza19jbXAodHVwbGUsIFxcdTAwMjZpLVxcdTAwM2V0dXBsZSwgXFx1MDAyNmktXFx1MDAzZW1hc2spIFxcdTAwMjZcXHUwMDI2XFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfZXhwZWN0LmM6MTIzOlxcdCAgICAgICBuZXRfZXEobmV0LCByZWFkX3BuZXQoXFx1MDAyNmktXFx1MDAzZW5ldCkpIFxcdTAwMjZcXHUwMDI2XFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfZXhwZWN0LmMtMTI0LVxcdCAgICAgICBuZl9jdF9leHBfem9uZV9lcXVhbF9hbnkoaSwgem9uZSk7XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19leHBlY3QuYz0zMjQ9dm9pZCBuZl9jdF9leHBlY3RfaW5pdChzdHJ1Y3QgbmZfY29ubnRyYWNrX2V4cGVjdCAqZXhwLCB1bnNpZ25lZCBpbnQgY2xhc3MsXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19leHBlY3QuYy0zMzEtXFx0c3RydWN0IG5mX2Nvbm4gKmN0ID0gZXhwLVxcdTAwM2VtYXN0ZXI7XFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfZXhwZWN0LmM6MzMyOlxcdHN0cnVjdCBuZXQgKm5ldCA9IHJlYWRfcG5ldChcXHUwMDI2Y3QtXFx1MDAzZWN0X25ldCk7XFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfZXhwZWN0LmMtMzMzLVxcdHN0cnVjdCBuZl9jb25udHJhY2tfZWNhY2hlICplY2FjaGU7XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19uZXRsaW5rLmM9MzUyMD1jdG5ldGxpbmtfYWxsb2NfZXhwZWN0KGNvbnN0IHN0cnVjdCBubGF0dHIgKiBjb25zdCBjZGFbXSwgc3RydWN0IG5mX2Nvbm4gKmN0LFxcbi0tXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfbmV0bGluay5jLTM1MjQte1xcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX25ldGxpbmsuYzozNTI1OlxcdHN0cnVjdCBuZXQgKm5ldCA9IHJlYWRfcG5ldChcXHUwMDI2Y3QtXFx1MDAzZWN0X25ldCk7XFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfbmV0bGluay5jLTM1MjYtXFx0c3RydWN0IG5mX2Nvbm50cmFja19oZWxwZXIgKmhlbHBlcjtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9vZmZsb2FkLmM9ODY4PXN0YXRpYyBpbnQgbmZfZmxvd19vZmZsb2FkX2FsbG9jKGNvbnN0IHN0cnVjdCBmbG93X29mZmxvYWRfd29yayAqb2ZmbG9hZCxcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9vZmZsb2FkLmMtODcwLXtcXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfb2ZmbG9hZC5jOjg3MTpcXHRzdHJ1Y3QgbmV0ICpuZXQgPSByZWFkX3BuZXQoXFx1MDAyNm9mZmxvYWQtXFx1MDAzZWZsb3d0YWJsZS1cXHUwMDNlbmV0KTtcXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfb2ZmbG9hZC5jLTg3Mi1cXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9vZmZsb2FkLmM9MTAzNz1zdGF0aWMgdm9pZCBmbG93X29mZmxvYWRfd29ya19oYW5kbGVyKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9vZmZsb2FkLmMtMTA0Mi1cXHRvZmZsb2FkID0gY29udGFpbmVyX29mKHdvcmssIHN0cnVjdCBmbG93X29mZmxvYWRfd29yaywgd29yayk7XFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX29mZmxvYWQuYzoxMDQzOlxcdG5ldCA9IHJlYWRfcG5ldChcXHUwMDI2b2ZmbG9hZC1cXHUwMDNlZmxvd3RhYmxlLVxcdTAwM2VuZXQpO1xcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9vZmZsb2FkLmMtMTA0NC1cXHRzd2l0Y2ggKG9mZmxvYWQtXFx1MDAzZWNtZCkge1xcbi0tXFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX29mZmxvYWQuYz0xMDY1PXN0YXRpYyB2b2lkIGZsb3dfb2ZmbG9hZF9xdWV1ZV93b3JrKHN0cnVjdCBmbG93X29mZmxvYWRfd29yayAqb2ZmbG9hZClcXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfb2ZmbG9hZC5jLTEwNjYte1xcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9vZmZsb2FkLmM6MTA2NzpcXHRzdHJ1Y3QgbmV0ICpuZXQgPSByZWFkX3BuZXQoXFx1MDAyNm9mZmxvYWQtXFx1MDAzZWZsb3d0YWJsZS1cXHUwMDNlbmV0KTtcXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfb2ZmbG9hZC5jLTEwNjgtXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYz02ODc0PXZvaWQgbmZ0X3NldF9lbGVtX2Rlc3Ryb3koY29uc3Qgc3RydWN0IG5mdF9zZXQgKnNldCxcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jLTY4NzgtXFx0c3RydWN0IG5mdF9jdHggY3R4ID0ge1xcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jOjY4Nzk6XFx0XFx0Lm5ldFxcdD0gcmVhZF9wbmV0KFxcdTAwMjZzZXQtXFx1MDAzZW5ldCksXFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMtNjg4MC1cXHRcXHQuZmFtaWx5XFx0PSBzZXQtXFx1MDAzZXRhYmxlLVxcdTAwM2VmYW1pbHksXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYz0xMDQ5MT1zdGF0aWMgdm9pZCBuZnRfdHJhbnNfZ2NfdHJhbnNfZnJlZShzdHJ1Y3QgcmN1X2hlYWQgKnJjdSlcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jLTEwNDk4LVxcdHRyYW5zID0gY29udGFpbmVyX29mKHJjdSwgc3RydWN0IG5mdF90cmFuc19nYywgcmN1KTtcXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYzoxMDQ5OTpcXHRjdHgubmV0XFx0PSByZWFkX3BuZXQoXFx1MDAyNnRyYW5zLVxcdTAwM2VzZXQtXFx1MDAzZW5ldCk7XFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMtMTA1MDAtXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYz0xMDU1OT1zdHJ1Y3QgbmZ0X3RyYW5zX2djICpuZnRfdHJhbnNfZ2NfYWxsb2Moc3RydWN0IG5mdF9zZXQgKnNldCxcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jLTEwNTYxLXtcXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYzoxMDU2MjpcXHRzdHJ1Y3QgbmV0ICpuZXQgPSByZWFkX3BuZXQoXFx1MDAyNnNldC1cXHUwMDNlbmV0KTtcXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYy0xMDU2My1cXHRzdHJ1Y3QgbmZ0X3RyYW5zX2djICp0cmFucztcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZ0X2R5bnNldC5jPTMwPXN0YXRpYyBpbnQgbmZ0X2R5bnNldF9leHByX3NldHVwKGNvbnN0IHN0cnVjdCBuZnRfZHluc2V0ICpwcml2LFxcbi0tXFxubmV0L25ldGZpbHRlci9uZnRfZHluc2V0LmMtMzQtXFx0c3RydWN0IG5mdF9jdHggY3R4ID0ge1xcbm5ldC9uZXRmaWx0ZXIvbmZ0X2R5bnNldC5jOjM1OlxcdFxcdC5uZXRcXHQ9IHJlYWRfcG5ldChcXHUwMDI2cHJpdi1cXHUwMDNlc2V0LVxcdTAwM2VuZXQpLFxcbm5ldC9uZXRmaWx0ZXIvbmZ0X2R5bnNldC5jLTM2LVxcdFxcdC5mYW1pbHlcXHQ9IHByaXYtXFx1MDAzZXNldC1cXHUwMDNldGFibGUtXFx1MDAzZWZhbWlseSxcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3NldF9oYXNoLmM9MzkzPXN0YXRpYyBib29sIG5mdF9yaGFzaF9leHByX25lZWRzX2djX3J1bihjb25zdCBzdHJ1Y3QgbmZ0X3NldCAqc2V0LFxcbi0tXFxubmV0L25ldGZpbHRlci9uZnRfc2V0X2hhc2guYy00MDEtXFx0XFx0aWYgKGV4cHItXFx1MDAzZW9wcy1cXHUwMDNlZ2MgXFx1MDAyNlxcdTAwMjZcXG5uZXQvbmV0ZmlsdGVyL25mdF9zZXRfaGFzaC5jOjQwMjpcXHRcXHQgICAgZXhwci1cXHUwMDNlb3BzLVxcdTAwM2VnYyhyZWFkX3BuZXQoXFx1MDAyNnNldC1cXHUwMDNlbmV0KSwgZXhwcikgXFx1MDAyNlxcdTAwMjZcXG5uZXQvbmV0ZmlsdGVyL25mdF9zZXRfaGFzaC5jLTQwMy1cXHRcXHQgICAgc2V0LVxcdTAwM2VmbGFncyBcXHUwMDI2IE5GVF9TRVRfRVZBTClcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3NldF9oYXNoLmM9NDEwPXN0YXRpYyB2b2lkIG5mdF9yaGFzaF9nYyhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mdF9zZXRfaGFzaC5jLTQyMi1cXHRzZXQgID0gbmZ0X3NldF9jb250YWluZXJfb2YocHJpdik7XFxubmV0L25ldGZpbHRlci9uZnRfc2V0X2hhc2guYzo0MjM6XFx0bmV0ICA9IHJlYWRfcG5ldChcXHUwMDI2c2V0LVxcdTAwM2VuZXQpO1xcbm5ldC9uZXRmaWx0ZXIvbmZ0X3NldF9oYXNoLmMtNDI0LVxcdG5mdF9uZXQgPSBuZnRfcGVybmV0KG5ldCk7XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mdF9zZXRfcGlwYXBvLmM9MTI0Mz1zdGF0aWMgYm9vbCBuZnRfcGlwYXBvX3RyYW5zYWN0aW9uX211dGV4X2hlbGQoY29uc3Qgc3RydWN0IG5mdF9zZXQgKnNldClcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3NldF9waXBhcG8uYy0xMjQ1LSNpZmRlZiBDT05GSUdfUFJPVkVfTE9DS0lOR1xcbm5ldC9uZXRmaWx0ZXIvbmZ0X3NldF9waXBhcG8uYzoxMjQ2OlxcdGNvbnN0IHN0cnVjdCBuZXQgKm5ldCA9IHJlYWRfcG5ldChcXHUwMDI2c2V0LVxcdTAwM2VuZXQpO1xcbm5ldC9uZXRmaWx0ZXIvbmZ0X3NldF9waXBhcG8uYy0xMjQ3LVxcbi0tXFxubmV0L25ldGZpbHRlci9uZnRfc2V0X3BpcGFwby5jPTE3MTA9c3RhdGljIHZvaWQgcGlwYXBvX2djX3NjYW4oc3RydWN0IG5mdF9zZXQgKnNldCwgc3RydWN0IG5mdF9waXBhcG9fbWF0Y2ggKm0pXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mdF9zZXRfcGlwYXBvLmMtMTcxMi1cXHRzdHJ1Y3QgbmZ0X3BpcGFwbyAqcHJpdiA9IG5mdF9zZXRfcHJpdihzZXQpO1xcbm5ldC9uZXRmaWx0ZXIvbmZ0X3NldF9waXBhcG8uYzoxNzEzOlxcdHN0cnVjdCBuZXQgKm5ldCA9IHJlYWRfcG5ldChcXHUwMDI2c2V0LVxcdTAwM2VuZXQpO1xcbm5ldC9uZXRmaWx0ZXIvbmZ0X3NldF9waXBhcG8uYy0xNzE0LVxcdHVuc2lnbmVkIGludCBydWxlc19mMCwgZmlyc3RfcnVsZSA9IDA7XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mdF9zZXRfcmJ0cmVlLmM9MjEyPW5mdF9yYnRyZWVfZ2NfZWxlbShjb25zdCBzdHJ1Y3QgbmZ0X3NldCAqX19zZXQsIHN0cnVjdCBuZnRfcmJ0cmVlICpwcml2LFxcbi0tXFxubmV0L25ldGZpbHRlci9uZnRfc2V0X3JidHJlZS5jLTIxNi1cXHRzdHJ1Y3QgcmJfbm9kZSAqcHJldiA9IHJiX3ByZXYoXFx1MDAyNnJiZS1cXHUwMDNlbm9kZSk7XFxubmV0L25ldGZpbHRlci9uZnRfc2V0X3JidHJlZS5jOjIxNzpcXHRzdHJ1Y3QgbmV0ICpuZXQgPSByZWFkX3BuZXQoXFx1MDAyNnNldC1cXHUwMDNlbmV0KTtcXG5uZXQvbmV0ZmlsdGVyL25mdF9zZXRfcmJ0cmVlLmMtMjE4LVxcdHN0cnVjdCBuZnRfcmJ0cmVlX2VsZW0gKnJiZV9wcmV2O1xcbi0tXFxubmV0L25ldGZpbHRlci9uZnRfc2V0X3JidHJlZS5jPTg5MT1zdGF0aWMgdm9pZCBuZnRfcmJ0cmVlX2djX3NjYW4oc3RydWN0IG5mdF9zZXQgKnNldClcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3NldF9yYnRyZWUuYy04OTQtXFx0c3RydWN0IG5mdF9yYnRyZWVfZWxlbSAqcmJlLCAqcmJlX2VuZCA9IE5VTEw7XFxubmV0L25ldGZpbHRlci9uZnRfc2V0X3JidHJlZS5jOjg5NTpcXHRzdHJ1Y3QgbmV0ICpuZXQgPSByZWFkX3BuZXQoXFx1MDAyNnNldC1cXHUwMDNlbmV0KTtcXG5uZXQvbmV0ZmlsdGVyL25mdF9zZXRfcmJ0cmVlLmMtODk2LVxcdHU2NCB0c3RhbXAgPSBuZnRfbmV0X3RzdGFtcChuZXQpO1xcbi0tXFxubmV0L25ldGZpbHRlci9uZnRfc2V0X3JidHJlZS5jPTEwMzg9c3RhdGljIHZvaWQgbmZ0X3JidHJlZV9jb21taXQoc3RydWN0IG5mdF9zZXQgKnNldClcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3NldF9yYnRyZWUuYy0xMTA3LVxcdG9sZCA9IHJjdV9yZXBsYWNlX3BvaW50ZXIocHJpdi1cXHUwMDNlYXJyYXksIHByaXYtXFx1MDAzZWFycmF5X25leHQsXFxubmV0L25ldGZpbHRlci9uZnRfc2V0X3JidHJlZS5jOjExMDg6XFx0XFx0XFx0XFx0ICBsb2NrZGVwX2lzX2hlbGQoXFx1MDAyNm5mdF9wZXJuZXQocmVhZF9wbmV0KFxcdTAwMjZzZXQtXFx1MDAzZW5ldCkpLVxcdTAwM2Vjb21taXRfbXV0ZXgpKTtcXG5uZXQvbmV0ZmlsdGVyL25mdF9zZXRfcmJ0cmVlLmMtMTEwOS1cXHRwcml2LVxcdTAwM2VhcnJheV9uZXh0ID0gTlVMTDtcXG4tLVxcbm5ldC9uZXRsaW5rL2FmX25ldGxpbmsuYz00NzU9c3RhdGljIGlubGluZSBpbnQgbmV0bGlua19jb21wYXJlKHN0cnVjdCByaGFzaHRhYmxlX2NvbXBhcmVfYXJnICphcmcsXFxuLS1cXG5uZXQvbmV0bGluay9hZl9uZXRsaW5rLmMtNDgxLVxcdHJldHVybiBubGstXFx1MDAzZXBvcnRpZCAhPSB4LVxcdTAwM2Vwb3J0aWQgfHxcXG5uZXQvbmV0bGluay9hZl9uZXRsaW5rLmM6NDgyOlxcdCAgICAgICAhbmV0X2VxKHNvY2tfbmV0KFxcdTAwMjZubGstXFx1MDAzZXNrKSwgcmVhZF9wbmV0KFxcdTAwMjZ4LVxcdTAwM2VwbmV0KSk7XFxubmV0L25ldGxpbmsvYWZfbmV0bGluay5jLTQ4My19XFxuLS1cXG5uZXQvb3BlbnZzd2l0Y2gvYWN0aW9ucy5jPTgyOT1zdGF0aWMgdm9pZCBkb19vdXRwdXQoc3RydWN0IGRhdGFwYXRoICpkcCwgc3RydWN0IHNrX2J1ZmYgKnNrYiwgaW50IG91dF9wb3J0LFxcbi0tXFxubmV0L29wZW52c3dpdGNoL2FjdGlvbnMuYy04NDYtXFx0XFx0fSBlbHNlIGlmIChtcnUgXFx1MDAzYz0gdnBvcnQtXFx1MDAzZWRldi1cXHUwMDNlbXR1KSB7XFxubmV0L29wZW52c3dpdGNoL2FjdGlvbnMuYzo4NDc6XFx0XFx0XFx0c3RydWN0IG5ldCAqbmV0ID0gcmVhZF9wbmV0KFxcdTAwMjZkcC1cXHUwMDNlbmV0KTtcXG5uZXQvb3BlbnZzd2l0Y2gvYWN0aW9ucy5jLTg0OC1cXG4tLVxcbm5ldC9vcGVudnN3aXRjaC9jb25udHJhY2suYz01NjE9c3RhdGljIGJvb2wgc2tiX25mY3RfY2FjaGVkKHN0cnVjdCBuZXQgKm5ldCxcXG4tLVxcbm5ldC9vcGVudnN3aXRjaC9jb25udHJhY2suYy01NzgtXFxubmV0L29wZW52c3dpdGNoL2Nvbm50cmFjay5jOjU3OTpcXHRpZiAoIW5ldF9lcShuZXQsIHJlYWRfcG5ldChcXHUwMDI2Y3QtXFx1MDAzZWN0X25ldCkpKVxcbm5ldC9vcGVudnN3aXRjaC9jb25udHJhY2suYy01ODAtXFx0XFx0cmV0dXJuIGZhbHNlO1xcbi0tXFxubmV0L29wZW52c3dpdGNoL2RhdGFwYXRoLmg9MjYxPXN0YXRpYyBpbmxpbmUgc3RydWN0IG5ldCAqb3ZzX2RwX2dldF9uZXQoY29uc3Qgc3RydWN0IGRhdGFwYXRoICpkcClcXG5uZXQvb3BlbnZzd2l0Y2gvZGF0YXBhdGguaC0yNjIte1xcbm5ldC9vcGVudnN3aXRjaC9kYXRhcGF0aC5oOjI2MzpcXHRyZXR1cm4gcmVhZF9wbmV0KFxcdTAwMjZkcC1cXHUwMDNlbmV0KTtcXG5uZXQvb3BlbnZzd2l0Y2gvZGF0YXBhdGguaC0yNjQtfVxcbi0tXFxubmV0L3BhY2tldC9hZl9wYWNrZXQuYz0xNDcxPXN0YXRpYyBpbnQgcGFja2V0X3Jjdl9mYW5vdXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldixcXG4tLVxcbm5ldC9wYWNrZXQvYWZfcGFja2V0LmMtMTQ3NS1cXHR1bnNpZ25lZCBpbnQgbnVtID0gUkVBRF9PTkNFKGYtXFx1MDAzZW51bV9tZW1iZXJzKTtcXG5uZXQvcGFja2V0L2FmX3BhY2tldC5jOjE0NzY6XFx0c3RydWN0IG5ldCAqbmV0ID0gcmVhZF9wbmV0KFxcdTAwMjZmLVxcdTAwM2VuZXQpO1xcbm5ldC9wYWNrZXQvYWZfcGFja2V0LmMtMTQ3Ny1cXHRzdHJ1Y3QgcGFja2V0X3NvY2sgKnBvO1xcbi0tXFxubmV0L3BhY2tldC9hZl9wYWNrZXQuYz0xNjYzPXN0YXRpYyBib29sIF9fZmFub3V0X2lkX2lzX2ZyZWUoc3RydWN0IHNvY2sgKnNrLCB1MTYgY2FuZGlkYXRlX2lkKVxcbi0tXFxubmV0L3BhY2tldC9hZl9wYWNrZXQuYy0xNjY4LVxcdFxcdGlmIChmLVxcdTAwM2VpZCA9PSBjYW5kaWRhdGVfaWQgXFx1MDAyNlxcdTAwMjZcXG5uZXQvcGFja2V0L2FmX3BhY2tldC5jOjE2Njk6XFx0XFx0ICAgIHJlYWRfcG5ldChcXHUwMDI2Zi1cXHUwMDNlbmV0KSA9PSBzb2NrX25ldChzaykpIHtcXG5uZXQvcGFja2V0L2FmX3BhY2tldC5jLTE2NzAtXFx0XFx0XFx0cmV0dXJuIGZhbHNlO1xcbi0tXFxubmV0L3BhY2tldC9hZl9wYWNrZXQuYz0xNjkzPXN0YXRpYyBpbnQgZmFub3V0X2FkZChzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBmYW5vdXRfYXJncyAqYXJncylcXG4tLVxcbm5ldC9wYWNrZXQvYWZfcGFja2V0LmMtMTc1My1cXHRcXHRpZiAoZi1cXHUwMDNlaWQgPT0gaWQgXFx1MDAyNlxcdTAwMjZcXG5uZXQvcGFja2V0L2FmX3BhY2tldC5jOjE3NTQ6XFx0XFx0ICAgIHJlYWRfcG5ldChcXHUwMDI2Zi1cXHUwMDNlbmV0KSA9PSBzb2NrX25ldChzaykpIHtcXG5uZXQvcGFja2V0L2FmX3BhY2tldC5jLTE3NTUtXFx0XFx0XFx0bWF0Y2ggPSBmO1xcbi0tXFxubmV0L3BhY2tldC9hZl9wYWNrZXQuYy0xNzg3LVxcdFxcdG1hdGNoLVxcdTAwM2Vwcm90X2hvb2suYWZfcGFja2V0X3ByaXYgPSBtYXRjaDtcXG5uZXQvcGFja2V0L2FmX3BhY2tldC5jOjE3ODg6XFx0XFx0bWF0Y2gtXFx1MDAzZXByb3RfaG9vay5hZl9wYWNrZXRfbmV0ID0gcmVhZF9wbmV0KFxcdTAwMjZtYXRjaC1cXHUwMDNlbmV0KTtcXG5uZXQvcGFja2V0L2FmX3BhY2tldC5jLTE3ODktXFx0XFx0bWF0Y2gtXFx1MDAzZXByb3RfaG9vay5pZF9tYXRjaCA9IG1hdGNoX2Zhbm91dF9ncm91cDtcXG4tLVxcbm5ldC9yZHMvbG9vcC5jPTIwMD1zdGF0aWMgdm9pZCByZHNfbG9vcF9raWxsX2Nvbm5zKHN0cnVjdCBuZXQgKm5ldClcXG4tLVxcbm5ldC9yZHMvbG9vcC5jLTIwNi1cXHRsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUobGMsIF9sYywgXFx1MDAyNmxvb3BfY29ubnMsIGxvb3Bfbm9kZSkgIHtcXG5uZXQvcmRzL2xvb3AuYzoyMDc6XFx0XFx0c3RydWN0IG5ldCAqY19uZXQgPSByZWFkX3BuZXQoXFx1MDAyNmxjLVxcdTAwM2Vjb25uLVxcdTAwM2VjX25ldCk7XFxubmV0L3Jkcy9sb29wLmMtMjA4LVxcbi0tXFxubmV0L3Jkcy9yZHMuaD0xNzg9c3RydWN0IG5ldCAqcmRzX2Nvbm5fbmV0KHN0cnVjdCByZHNfY29ubmVjdGlvbiAqY29ubilcXG5uZXQvcmRzL3Jkcy5oLTE3OS17XFxubmV0L3Jkcy9yZHMuaDoxODA6XFx0cmV0dXJuIHJlYWRfcG5ldChcXHUwMDI2Y29ubi1cXHUwMDNlY19uZXQpO1xcbm5ldC9yZHMvcmRzLmgtMTgxLX1cXG4tLVxcbm5ldC9yZHMvdGNwLmM9NjI5PXN0YXRpYyB2b2lkIHJkc190Y3Bfa2lsbF9zb2NrKHN0cnVjdCBuZXQgKm5ldClcXG4tLVxcbm5ldC9yZHMvdGNwLmMtNjQxLVxcdGxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZSh0YywgX3RjLCBcXHUwMDI2cmRzX3RjcF9jb25uX2xpc3QsIHRfdGNwX25vZGUpIHtcXG5uZXQvcmRzL3RjcC5jOjY0MjpcXHRcXHRzdHJ1Y3QgbmV0ICpjX25ldCA9IHJlYWRfcG5ldChcXHUwMDI2dGMtXFx1MDAzZXRfY3BhdGgtXFx1MDAzZWNwX2Nvbm4tXFx1MDAzZWNfbmV0KTtcXG5uZXQvcmRzL3RjcC5jLTY0My1cXG4tLVxcbm5ldC9yZHMvdGNwLmM9Njk0PXN0YXRpYyB2b2lkIHJkc190Y3Bfc3lzY3RsX3Jlc2V0KHN0cnVjdCBuZXQgKm5ldClcXG4tLVxcbm5ldC9yZHMvdGNwLmMtNjk5LVxcdGxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZSh0YywgX3RjLCBcXHUwMDI2cmRzX3RjcF9jb25uX2xpc3QsIHRfdGNwX25vZGUpIHtcXG5uZXQvcmRzL3RjcC5jOjcwMDpcXHRcXHRzdHJ1Y3QgbmV0ICpjX25ldCA9IHJlYWRfcG5ldChcXHUwMDI2dGMtXFx1MDAzZXRfY3BhdGgtXFx1MDAzZWNwX2Nvbm4tXFx1MDAzZWNfbmV0KTtcXG5uZXQvcmRzL3RjcC5jLTcwMS1cXG4tLVxcbm5ldC9zY2hlZC9hY3RfY3QuYz03NTI9c3RhdGljIGJvb2wgdGNmX2N0X3NrYl9uZmN0X2NhY2hlZChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBza19idWZmICpza2IsXFxuLS1cXG5uZXQvc2NoZWQvYWN0X2N0LmMtNzYwLVxcdFxcdHJldHVybiBmYWxzZTtcXG5uZXQvc2NoZWQvYWN0X2N0LmM6NzYxOlxcdGlmICghbmV0X2VxKG5ldCwgcmVhZF9wbmV0KFxcdTAwMjZjdC1cXHUwMDNlY3RfbmV0KSkpXFxubmV0L3NjaGVkL2FjdF9jdC5jLTc2Mi1cXHRcXHRnb3RvIGRyb3BfY3Q7XFxuLS1cXG5uZXQvc21jL3NtY19pYi5oPTcyPXN0YXRpYyBpbmxpbmUgc3RydWN0IG5ldCAqc21jX2liX25ldChzdHJ1Y3Qgc21jX2liX2RldmljZSAqc21jaWJkZXYpXFxuLS1cXG5uZXQvc21jL3NtY19pYi5oLTc0LVxcdGlmIChzbWNpYmRldiBcXHUwMDI2XFx1MDAyNiBzbWNpYmRldi1cXHUwMDNlaWJkZXYpXFxubmV0L3NtYy9zbWNfaWIuaDo3NTpcXHRcXHRyZXR1cm4gcmVhZF9wbmV0KFxcdTAwMjZzbWNpYmRldi1cXHUwMDNlaWJkZXYtXFx1MDAzZWNvcmVkZXYucmRtYV9uZXQpO1xcbm5ldC9zbWMvc21jX2liLmgtNzYtXFx0cmV0dXJuIE5VTEw7XFxuLS1cXG5uZXQveGZybS94ZnJtX3BvbGljeS5jPTE0ODY9c3RhdGljIHUzMiB4ZnJtX3BvbF9iaW5fa2V5KGNvbnN0IHZvaWQgKmRhdGEsIHUzMiBsZW4sIHUzMiBzZWVkKVxcbi0tXFxubmV0L3hmcm0veGZybV9wb2xpY3kuYy0xNDkwLVxcbm5ldC94ZnJtL3hmcm1fcG9saWN5LmM6MTQ5MTpcXHRyZXR1cm4gamhhc2hfM3dvcmRzKGEsIGstXFx1MDAzZWlmX2lkLCBuZXRfaGFzaF9taXgocmVhZF9wbmV0KFxcdTAwMjZrLVxcdTAwM2VuZXQpKSxcXG5uZXQveGZybS94ZnJtX3BvbGljeS5jLTE0OTItXFx0XFx0XFx0ICAgIHNlZWQpO1xcbi0tXFxubmV0L3hmcm0veGZybV9wb2xpY3kuYz0xNTAyPXN0YXRpYyBpbnQgeGZybV9wb2xfYmluX2NtcChzdHJ1Y3Qgcmhhc2h0YWJsZV9jb21wYXJlX2FyZyAqYXJnLFxcbi0tXFxubmV0L3hmcm0veGZybV9wb2xpY3kuYy0xNTA4LVxcbm5ldC94ZnJtL3hmcm1fcG9saWN5LmM6MTUwOTpcXHRpZiAoIW5ldF9lcShyZWFkX3BuZXQoXFx1MDAyNmItXFx1MDAzZWsubmV0KSwgcmVhZF9wbmV0KFxcdTAwMjZrZXktXFx1MDAzZW5ldCkpKVxcbm5ldC94ZnJtL3hmcm1fcG9saWN5LmMtMTUxMC1cXHRcXHRyZXR1cm4gLTE7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA5VDA4OjM5OjIxLjM3NDc5ODYzNFoiLCJTZXEiOjE5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo1NzgyMTExNzYwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgbmZfZmxvd190YWJsZV9vZmZsb2FkLmMgYW5kIHRjZl9jdF9mbG93X3RhYmxlX2dldCBDaGFuZ2VzKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBJJ20gbG9va2luZyBhdCB0aGVzZSBjaGFuZ2VzIGluIGBuZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfb2ZmbG9hZC5jYCBhbmQgYHRjZl9jdF9mbG93X3RhYmxlX2dldGAuIEkgc2VlIHRoYXQgYHJlYWRfcG5ldChcdTAwMjZvZmZsb2FkLVx1MDAzZWZsb3d0YWJsZS1cdTAwM2VuZXQpYCBpcyB1c2VkIGR1cmluZyBvZmZsb2FkIGFuZCBxdWV1aW5nIG9wZXJhdGlvbnMsIHdoaWNoIGlzIG15IHN0YXJ0aW5nIHBvaW50LiBUaGUgY3J1Y2lhbCBwYXJ0IGlzIHRoZSBjb2RlIG1vZGlmaWNhdGlvbiB3aXRoaW4gYHRjZl9jdF9mbG93X3RhYmxlX2dldGAsIHNwZWNpZmljYWxseSB0aGUgc2hpZnQgb2YgYHdyaXRlX3BuZXQoXHUwMDI2Y3RfZnQtXHUwMDNlbmZfZnQubmV0LCBuZXQpYCBiZWZvcmUgdGhlIGNhbGwgdG8gYG5mX2Zsb3dfdGFibGVfaW5pdChcdTAwMjZjdF9mdC1cdTAwM2VuZl9mdClgLlxuXG5NeSBpbW1lZGlhdGUgcXVlc3Rpb24gaXMgKndoeSogdGhpcyByZW9yZGVyaW5nPyBXaGF0IGRvZXMgYG5mX2Zsb3dfdGFibGVfaW5pdGAgYWN0dWFsbHkgKmRvKj8gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaWYgdGhpcyBoYXMgYW55IGltcGxpY2F0aW9ucy4gRG9lcyBgbmZfZmxvd190YWJsZV9pbml0YCBvciBhbnkgZnVuY3Rpb24gaXQgY2FsbHMgdXRpbGl6ZSBgZmxvd3RhYmxlLVx1MDAzZW5ldGA/IElmIHNvLCBjb3VsZCB3ZSBoYXZlIGEgcG90ZW50aWFsIHJhY2UgY29uZGl0aW9uIGVtZXJnaW5nPyBJJ20gdGhpbmtpbmcgYWJvdXQgY29uY3VycmVudCB3b3JrOiB0aGUgZmxvdyBvZmZsb2FkIGl0c2VsZiwgZ2FyYmFnZSBjb2xsZWN0aW9uLCBhbmQgbmV0IG5hbWVzcGFjZSBkZXN0cnVjdGlvbi4gSSBuZWVkIHRvIG1ha2Ugc3VyZSB0aGlzIHJlb3JkZXJpbmcgZG9lc24ndCBpbnRyb2R1Y2UgYW55IHN1YnRsZSBidWdzLlxuXG5OZXh0IHN0ZXA6IEkgd2lsbCBjaGVjayB3aGV0aGVyIGBuZl9mbG93X3RhYmxlX2luaXRgIGl0c2VsZiBjYWxscyB0aGUgYGZsb3d0YWJsZS1cdTAwM2V0eXBlLVx1MDAzZWluaXRgIGZ1bmN0aW9uLCBvciBwb3RlbnRpYWxseSBvdGhlciBmdW5jdGlvbnMgdGhhdCBtaWdodCBpbnRlcmFjdCB3aXRoIGBuZXRgIG9yIG90aGVyIHNoYXJlZCByZXNvdXJjZXMuIEkgd2FudCB0byBzZWUgdGhlIGluaXRpYWxpemF0aW9uIG9yZGVyIGFuZCB3aGF0IGdldHMgaW5pdGlhbGl6ZWQgYnkgdGhlIHR5cGUgb3Igc29tZXRoaW5nLlxuXG5GaW5hbGx5LCBJIHdhbnQgdG8gY29uZmlybSB3aGF0IGNvbmZpZyBvcHRpb25zIGFyZSBhcHBsaWNhYmxlIHRvIHRoaXMgc2VjdGlvbiBieSBjaGVja2luZyBgbmV0L3NjaGVkL0tjb25maWdgIHRvIHNlZSB0aGUgY29uZmlndXJhdGlvbiBvcHRpb25zIG9mIGBhY3RfY3QuY2AuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE4MTE4LCJPdXRwdXRUb2tlbnMiOjI3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDIzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA5VDA4OjM5OjI3LjE1NjkxMjc5NFoiLCJTZXEiOjIwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTExMzYzNDc4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImFjdF9jdFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvc2NoZWQvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9zY2hlZC9LY29uZmlnPTg2NT1jb25maWcgTkVUX0FDVF9DVElORk9cXG4tLVxcbm5ldC9zY2hlZC9LY29uZmlnLTg3OS1cXHQgIFRvIGNvbXBpbGUgdGhpcyBjb2RlIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGVcXG5uZXQvc2NoZWQvS2NvbmZpZzo4ODA6XFx0ICBtb2R1bGUgd2lsbCBiZSBjYWxsZWQgYWN0X2N0aW5mby5cXG5uZXQvc2NoZWQvS2NvbmZpZy04ODEtXFxuLS1cXG5uZXQvc2NoZWQvS2NvbmZpZz05MTc9Y29uZmlnIE5FVF9BQ1RfQ1RcXG4tLVxcbm5ldC9zY2hlZC9LY29uZmlnLTkyNy1cXHQgIFRvIGNvbXBpbGUgdGhpcyBjb2RlIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGVcXG5uZXQvc2NoZWQvS2NvbmZpZzo5Mjg6XFx0ICBtb2R1bGUgd2lsbCBiZSBjYWxsZWQgYWN0X2N0Llxcbm5ldC9zY2hlZC9LY29uZmlnLTkyOS1cXG4tLVxcbm5ldC9zY2hlZC9NYWtlZmlsZT0yND1vYmotJChDT05GSUdfTkVUX0FDVF9DT05OTUFSSylcXHQrPSBhY3RfY29ubm1hcmsub1xcbm5ldC9zY2hlZC9NYWtlZmlsZToyNTpvYmotJChDT05GSUdfTkVUX0FDVF9DVElORk8pXFx0Kz0gYWN0X2N0aW5mby5vXFxubmV0L3NjaGVkL01ha2VmaWxlLTI2LW9iai0kKENPTkZJR19ORVRfQUNUX1NLQk1PRClcXHQrPSBhY3Rfc2tibW9kLm9cXG4tLVxcbm5ldC9zY2hlZC9NYWtlZmlsZT0zMT1vYmotJChDT05GSUdfTkVUX0FDVF9UVU5ORUxfS0VZKSs9IGFjdF90dW5uZWxfa2V5Lm9cXG5uZXQvc2NoZWQvTWFrZWZpbGU6MzI6b2JqLSQoQ09ORklHX05FVF9BQ1RfQ1QpXFx0Kz0gYWN0X2N0Lm9cXG5uZXQvc2NoZWQvTWFrZWZpbGUtMzMtb2JqLSQoQ09ORklHX05FVF9BQ1RfR0FURSlcXHQrPSBhY3RfZ2F0ZS5vXFxuLS1cXG5uZXQvc2NoZWQvYWN0X2N0LmMtMi0vKiAtXFxubmV0L3NjaGVkL2FjdF9jdC5jOjM6ICogbmV0L3NjaGVkL2FjdF9jdC5jICBDb25uZWN0aW9uIFRyYWNraW5nIGFjdGlvblxcbm5ldC9zY2hlZC9hY3RfY3QuYy00LSAqXFxuLS1cXG5uZXQvc2NoZWQvYWN0X2N0LmMtMzctI2luY2x1ZGUgXFx1MDAzY25ldC9uZXRmaWx0ZXIvaXB2Ni9uZl9kZWZyYWdfaXB2Ni5oXFx1MDAzZVxcbm5ldC9zY2hlZC9hY3RfY3QuYzozODojaW5jbHVkZSBcXHUwMDNjbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfYWN0X2N0LmhcXHUwMDNlXFxubmV0L3NjaGVkL2FjdF9jdC5jLTM5LSNpbmNsdWRlIFxcdTAwM2NuZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19zZXFhZGouaFxcdTAwM2VcXG4tLVxcbm5ldC9zY2hlZC9hY3RfY3QuYy00MS1cXG5uZXQvc2NoZWQvYWN0X2N0LmM6NDI6c3RhdGljIHN0cnVjdCB3b3JrcXVldWVfc3RydWN0ICphY3RfY3Rfd3E7XFxubmV0L3NjaGVkL2FjdF9jdC5jLTQzLXN0YXRpYyBzdHJ1Y3Qgcmhhc2h0YWJsZSB6b25lc19odDtcXG4tLVxcbm5ldC9zY2hlZC9hY3RfY3QuYz0xNzg9c3RhdGljIHZvaWQgdGNmX2N0X2Zsb3dfdGFibGVfYWRkX2FjdGlvbl9tZXRhKHN0cnVjdCBuZl9jb25uICpjdCxcXG4tLVxcbm5ldC9zY2hlZC9hY3RfY3QuYy0xODQtXFx0c3RydWN0IGZsb3dfYWN0aW9uX2VudHJ5ICplbnRyeTtcXG5uZXQvc2NoZWQvYWN0X2N0LmM6MTg1OlxcdHUzMiAqYWN0X2N0X2xhYmVscztcXG5uZXQvc2NoZWQvYWN0X2N0LmMtMTg2LVxcbi0tXFxubmV0L3NjaGVkL2FjdF9jdC5jLTE5NS1cXG5uZXQvc2NoZWQvYWN0X2N0LmM6MTk2OlxcdGFjdF9jdF9sYWJlbHMgPSBlbnRyeS1cXHUwMDNlY3RfbWV0YWRhdGEubGFiZWxzO1xcbm5ldC9zY2hlZC9hY3RfY3QuYy0xOTctXFx0Y3RfbGFiZWxzID0gbmZfY3RfbGFiZWxzX2ZpbmQoY3QpO1xcbm5ldC9zY2hlZC9hY3RfY3QuYy0xOTgtXFx0aWYgKGN0X2xhYmVscylcXG5uZXQvc2NoZWQvYWN0X2N0LmM6MTk5OlxcdFxcdG1lbWNweShhY3RfY3RfbGFiZWxzLCBjdF9sYWJlbHMtXFx1MDAzZWJpdHMsIE5GX0NUX0xBQkVMU19NQVhfU0laRSk7XFxubmV0L3NjaGVkL2FjdF9jdC5jLTIwMC1cXHRlbHNlXFxubmV0L3NjaGVkL2FjdF9jdC5jOjIwMTpcXHRcXHRtZW1zZXQoYWN0X2N0X2xhYmVscywgMCwgTkZfQ1RfTEFCRUxTX01BWF9TSVpFKTtcXG5uZXQvc2NoZWQvYWN0X2N0LmMtMjAyLX1cXG4tLVxcbm5ldC9zY2hlZC9hY3RfY3QuYz0zOTc9c3RhdGljIHZvaWQgdGNmX2N0X2Zsb3dfdGFibGVfcHV0KHN0cnVjdCB0Y2ZfY3RfZmxvd190YWJsZSAqY3RfZnQpXFxuLS1cXG5uZXQvc2NoZWQvYWN0X2N0LmMtNDAxLVxcdFxcdElOSVRfUkNVX1dPUksoXFx1MDAyNmN0X2Z0LVxcdTAwM2Vyd29yaywgdGNmX2N0X2Zsb3dfdGFibGVfY2xlYW51cF93b3JrKTtcXG5uZXQvc2NoZWQvYWN0X2N0LmM6NDAyOlxcdFxcdHF1ZXVlX3JjdV93b3JrKGFjdF9jdF93cSwgXFx1MDAyNmN0X2Z0LVxcdTAwM2Vyd29yayk7XFxubmV0L3NjaGVkL2FjdF9jdC5jLTQwMy1cXHR9XFxuLS1cXG5uZXQvc2NoZWQvYWN0X2N0LmM9NDA2PXN0YXRpYyB2b2lkIHRjZl9jdF9mbG93X3RjX2lmaWR4KHN0cnVjdCBmbG93X29mZmxvYWQgKmVudHJ5LFxcbm5ldC9zY2hlZC9hY3RfY3QuYzo0MDc6XFx0XFx0XFx0XFx0IHN0cnVjdCBuZl9jb25uX2FjdF9jdF9leHQgKmFjdF9jdF9leHQsIHU4IGRpcilcXG5uZXQvc2NoZWQvYWN0X2N0LmMtNDA4LXtcXG5uZXQvc2NoZWQvYWN0X2N0LmMtNDA5LVxcdGVudHJ5LVxcdTAwM2V0dXBsZWhhc2hbZGlyXS50dXBsZS54bWl0X3R5cGUgPSBGTE9XX09GRkxPQURfWE1JVF9UQztcXG5uZXQvc2NoZWQvYWN0X2N0LmM6NDEwOlxcdGVudHJ5LVxcdTAwM2V0dXBsZWhhc2hbZGlyXS50dXBsZS50Yy5paWZpZHggPSBhY3RfY3RfZXh0LVxcdTAwM2VpZmluZGV4W2Rpcl07XFxubmV0L3NjaGVkL2FjdF9jdC5jLTQxMS19XFxuLS1cXG5uZXQvc2NoZWQvYWN0X2N0LmM9NDEzPXN0YXRpYyB2b2lkIHRjZl9jdF9mbG93X2N0X2V4dF9pZmlkeF91cGRhdGUoc3RydWN0IGZsb3dfb2ZmbG9hZCAqZW50cnkpXFxubmV0L3NjaGVkL2FjdF9jdC5jLTQxNC17XFxubmV0L3NjaGVkL2FjdF9jdC5jOjQxNTpcXHRzdHJ1Y3QgbmZfY29ubl9hY3RfY3RfZXh0ICphY3RfY3RfZXh0O1xcbm5ldC9zY2hlZC9hY3RfY3QuYy00MTYtXFxubmV0L3NjaGVkL2FjdF9jdC5jOjQxNzpcXHRhY3RfY3RfZXh0ID0gbmZfY29ubl9hY3RfY3RfZXh0X2ZpbmQoZW50cnktXFx1MDAzZWN0KTtcXG5uZXQvc2NoZWQvYWN0X2N0LmM6NDE4OlxcdGlmIChhY3RfY3RfZXh0KSB7XFxubmV0L3NjaGVkL2FjdF9jdC5jOjQxOTpcXHRcXHR0Y2ZfY3RfZmxvd190Y19pZmlkeChlbnRyeSwgYWN0X2N0X2V4dCwgRkxPV19PRkZMT0FEX0RJUl9PUklHSU5BTCk7XFxubmV0L3NjaGVkL2FjdF9jdC5jOjQyMDpcXHRcXHR0Y2ZfY3RfZmxvd190Y19pZmlkeChlbnRyeSwgYWN0X2N0X2V4dCwgRkxPV19PRkZMT0FEX0RJUl9SRVBMWSk7XFxubmV0L3NjaGVkL2FjdF9jdC5jLTQyMS1cXHR9XFxuLS1cXG5uZXQvc2NoZWQvYWN0X2N0LmM9NDI0PXN0YXRpYyB2b2lkIHRjZl9jdF9mbG93X3RhYmxlX2FkZChzdHJ1Y3QgdGNmX2N0X2Zsb3dfdGFibGUgKmN0X2Z0LFxcbi0tXFxubmV0L3NjaGVkL2FjdF9jdC5jLTQyNy17XFxubmV0L3NjaGVkL2FjdF9jdC5jOjQyODpcXHRzdHJ1Y3QgbmZfY29ubl9hY3RfY3RfZXh0ICphY3RfY3RfZXh0O1xcbm5ldC9zY2hlZC9hY3RfY3QuYy00MjktXFx0c3RydWN0IGZsb3dfb2ZmbG9hZCAqZW50cnk7XFxuLS1cXG5uZXQvc2NoZWQvYWN0X2N0LmMtNDQ3LVxcbm5ldC9zY2hlZC9hY3RfY3QuYzo0NDg6XFx0YWN0X2N0X2V4dCA9IG5mX2Nvbm5fYWN0X2N0X2V4dF9maW5kKGN0KTtcXG5uZXQvc2NoZWQvYWN0X2N0LmM6NDQ5OlxcdGlmIChhY3RfY3RfZXh0KSB7XFxubmV0L3NjaGVkL2FjdF9jdC5jOjQ1MDpcXHRcXHR0Y2ZfY3RfZmxvd190Y19pZmlkeChlbnRyeSwgYWN0X2N0X2V4dCwgRkxPV19PRkZMT0FEX0RJUl9PUklHSU5BTCk7XFxubmV0L3NjaGVkL2FjdF9jdC5jOjQ1MTpcXHRcXHR0Y2ZfY3RfZmxvd190Y19pZmlkeChlbnRyeSwgYWN0X2N0X2V4dCwgRkxPV19PRkZMT0FEX0RJUl9SRVBMWSk7XFxubmV0L3NjaGVkL2FjdF9jdC5jLTQ1Mi1cXHR9XFxuLS1cXG5uZXQvc2NoZWQvYWN0X2N0LmM9NjU4PXN0YXRpYyBib29sIHRjZl9jdF9mbG93X3RhYmxlX2xvb2t1cChzdHJ1Y3QgdGNmX2N0X3BhcmFtcyAqcCxcXG4tLVxcbm5ldC9zY2hlZC9hY3RfY3QuYy03MTgtXFxubmV0L3NjaGVkL2FjdF9jdC5jOjcxOTpcXHRuZl9jb25uX2FjdF9jdF9leHRfZmlsbChza2IsIGN0LCBjdGluZm8pO1xcbm5ldC9zY2hlZC9hY3RfY3QuYy03MjAtXFx0dGNmX2N0X2Zsb3dfY3RfZXh0X2lmaWR4X3VwZGF0ZShmbG93KTtcXG4tLVxcbm5ldC9zY2hlZC9hY3RfY3QuYz03NDA9c3RhdGljIHZvaWQgdGNmX2N0X2Zsb3dfdGFibGVzX3VuaW5pdCh2b2lkKVxcbi0tXFxubmV0L3NjaGVkL2FjdF9jdC5jLTc0NC1cXG5uZXQvc2NoZWQvYWN0X2N0LmM6NzQ1OnN0YXRpYyBzdHJ1Y3QgdGNfYWN0aW9uX29wcyBhY3RfY3Rfb3BzO1xcbm5ldC9zY2hlZC9hY3RfY3QuYy03NDYtXFxuLS1cXG5uZXQvc2NoZWQvYWN0X2N0LmM9OTc5PVRDX0lORElSRUNUX1NDT1BFIGludCB0Y2ZfY3RfYWN0KHN0cnVjdCBza19idWZmICpza2IsIGNvbnN0IHN0cnVjdCB0Y19hY3Rpb24gKmEsXFxuLS1cXG5uZXQvc2NoZWQvYWN0X2N0LmMtMTA3NS1cXHRuZl9jdF9kZWxpdmVyX2NhY2hlZF9ldmVudHMoY3QpO1xcbm5ldC9zY2hlZC9hY3RfY3QuYzoxMDc2OlxcdG5mX2Nvbm5fYWN0X2N0X2V4dF9maWxsKHNrYiwgY3QsIGN0aW5mbyk7XFxubmV0L3NjaGVkL2FjdF9jdC5jLTEwNzctXFxuLS1cXG5uZXQvc2NoZWQvYWN0X2N0LmMtMTEwMy1cXHRcXHRpZiAoIW5mX2N0X2lzX2NvbmZpcm1lZChjdCkpXFxubmV0L3NjaGVkL2FjdF9jdC5jOjExMDQ6XFx0XFx0XFx0bmZfY29ubl9hY3RfY3RfZXh0X2FkZChza2IsIGN0LCBjdGluZm8pO1xcbm5ldC9zY2hlZC9hY3RfY3QuYy0xMTA1LVxcbi0tXFxubmV0L3NjaGVkL2FjdF9jdC5jPTEzNzE9c3RhdGljIGludCB0Y2ZfY3RfaW5pdChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBubGF0dHIgKm5sYSxcXG4tLVxcbm5ldC9zY2hlZC9hY3RfY3QuYy0xMzc1LXtcXG5uZXQvc2NoZWQvYWN0X2N0LmM6MTM3NjpcXHRzdHJ1Y3QgdGNfYWN0aW9uX25ldCAqdG4gPSBuZXRfZ2VuZXJpYyhuZXQsIGFjdF9jdF9vcHMubmV0X2lkKTtcXG5uZXQvc2NoZWQvYWN0X2N0LmMtMTM3Ny1cXHRib29sIGJpbmQgPSBmbGFncyBcXHUwMDI2IFRDQV9BQ1RfRkxBR1NfQklORDtcXG4tLVxcbm5ldC9zY2hlZC9hY3RfY3QuYy0xNDEyLVxcdFxcdGVyciA9IHRjZl9pZHJfY3JlYXRlX2Zyb21fZmxhZ3ModG4sIGluZGV4LCBlc3QsIGEsXFxubmV0L3NjaGVkL2FjdF9jdC5jOjE0MTM6XFx0XFx0XFx0XFx0XFx0XFx0XFx1MDAyNmFjdF9jdF9vcHMsIGJpbmQsIGZsYWdzKTtcXG5uZXQvc2NoZWQvYWN0X2N0LmMtMTQxNC1cXHRcXHRpZiAoZXJyKSB7XFxuLS1cXG5uZXQvc2NoZWQvYWN0X2N0LmM9MTY2MD1zdGF0aWMgc2l6ZV90IHRjZl9jdF9nZXRfZmlsbF9zaXplKGNvbnN0IHN0cnVjdCB0Y19hY3Rpb24gKmFjdClcXG4tLVxcbm5ldC9zY2hlZC9hY3RfY3QuYy0xNzA0LVxcbm5ldC9zY2hlZC9hY3RfY3QuYzoxNzA1OnN0YXRpYyBzdHJ1Y3QgdGNfYWN0aW9uX29wcyBhY3RfY3Rfb3BzID0ge1xcbm5ldC9zY2hlZC9hY3RfY3QuYy0xNzA2LVxcdC5raW5kXFx0XFx0PVxcdFxcXCJjdFxcXCIsXFxuLS1cXG5uZXQvc2NoZWQvYWN0X2N0LmM9MTcyMD1zdGF0aWMgX19uZXRfaW5pdCBpbnQgY3RfaW5pdF9uZXQoc3RydWN0IG5ldCAqbmV0KVxcbm5ldC9zY2hlZC9hY3RfY3QuYy0xNzIxLXtcXG5uZXQvc2NoZWQvYWN0X2N0LmM6MTcyMjpcXHRzdHJ1Y3QgdGNfY3RfYWN0aW9uX25ldCAqdG4gPSBuZXRfZ2VuZXJpYyhuZXQsIGFjdF9jdF9vcHMubmV0X2lkKTtcXG5uZXQvc2NoZWQvYWN0X2N0LmMtMTcyMy1cXG5uZXQvc2NoZWQvYWN0X2N0LmM6MTcyNDpcXHRyZXR1cm4gdGNfYWN0aW9uX25ldF9pbml0KG5ldCwgXFx1MDAyNnRuLVxcdTAwM2V0biwgXFx1MDAyNmFjdF9jdF9vcHMpO1xcbm5ldC9zY2hlZC9hY3RfY3QuYy0xNzI1LX1cXG4tLVxcbm5ldC9zY2hlZC9hY3RfY3QuYz0xNzI3PXN0YXRpYyB2b2lkIF9fbmV0X2V4aXQgY3RfZXhpdF9uZXQoc3RydWN0IGxpc3RfaGVhZCAqbmV0X2xpc3QpXFxubmV0L3NjaGVkL2FjdF9jdC5jLTE3Mjgte1xcbm5ldC9zY2hlZC9hY3RfY3QuYzoxNzI5OlxcdHRjX2FjdGlvbl9uZXRfZXhpdChuZXRfbGlzdCwgYWN0X2N0X29wcy5uZXRfaWQpO1xcbm5ldC9zY2hlZC9hY3RfY3QuYy0xNzMwLX1cXG4tLVxcbm5ldC9zY2hlZC9hY3RfY3QuYz0xNzMyPXN0YXRpYyBzdHJ1Y3QgcGVybmV0X29wZXJhdGlvbnMgY3RfbmV0X29wcyA9IHtcXG4tLVxcbm5ldC9zY2hlZC9hY3RfY3QuYy0xNzM0LVxcdC5leGl0X2JhdGNoID0gY3RfZXhpdF9uZXQsXFxubmV0L3NjaGVkL2FjdF9jdC5jOjE3MzU6XFx0LmlkICAgPSBcXHUwMDI2YWN0X2N0X29wcy5uZXRfaWQsXFxubmV0L3NjaGVkL2FjdF9jdC5jLTE3MzYtXFx0LnNpemUgPSBzaXplb2Yoc3RydWN0IHRjX2N0X2FjdGlvbl9uZXQpLFxcbi0tXFxubmV0L3NjaGVkL2FjdF9jdC5jPTE3Mzk9c3RhdGljIGludCBfX2luaXQgY3RfaW5pdF9tb2R1bGUodm9pZClcXG4tLVxcbm5ldC9zY2hlZC9hY3RfY3QuYy0xNzQyLVxcbm5ldC9zY2hlZC9hY3RfY3QuYzoxNzQzOlxcdGFjdF9jdF93cSA9IGFsbG9jX29yZGVyZWRfd29ya3F1ZXVlKFxcXCJhY3RfY3Rfd29ya3F1ZXVlXFxcIiwgMCk7XFxubmV0L3NjaGVkL2FjdF9jdC5jOjE3NDQ6XFx0aWYgKCFhY3RfY3Rfd3EpXFxubmV0L3NjaGVkL2FjdF9jdC5jLTE3NDUtXFx0XFx0cmV0dXJuIC1FTk9NRU07XFxuLS1cXG5uZXQvc2NoZWQvYWN0X2N0LmMtMTc1MC1cXG5uZXQvc2NoZWQvYWN0X2N0LmM6MTc1MTpcXHRlcnIgPSB0Y2ZfcmVnaXN0ZXJfYWN0aW9uKFxcdTAwMjZhY3RfY3Rfb3BzLCBcXHUwMDI2Y3RfbmV0X29wcyk7XFxubmV0L3NjaGVkL2FjdF9jdC5jLTE3NTItXFx0aWYgKGVycilcXG4tLVxcbm5ldC9zY2hlZC9hY3RfY3QuYy0xNzYxLWVycl90YmxfaW5pdDpcXG5uZXQvc2NoZWQvYWN0X2N0LmM6MTc2MjpcXHRkZXN0cm95X3dvcmtxdWV1ZShhY3RfY3Rfd3EpO1xcbm5ldC9zY2hlZC9hY3RfY3QuYy0xNzYzLVxcdHJldHVybiBlcnI7XFxuLS1cXG5uZXQvc2NoZWQvYWN0X2N0LmM9MTc2Nj1zdGF0aWMgdm9pZCBfX2V4aXQgY3RfY2xlYW51cF9tb2R1bGUodm9pZClcXG4tLVxcbm5ldC9zY2hlZC9hY3RfY3QuYy0xNzY4LVxcdHN0YXRpY19icmFuY2hfZGVjKFxcdTAwMjZ0Y2ZfZnJhZ194bWl0X2NvdW50KTtcXG5uZXQvc2NoZWQvYWN0X2N0LmM6MTc2OTpcXHR0Y2ZfdW5yZWdpc3Rlcl9hY3Rpb24oXFx1MDAyNmFjdF9jdF9vcHMsIFxcdTAwMjZjdF9uZXRfb3BzKTtcXG5uZXQvc2NoZWQvYWN0X2N0LmMtMTc3MC1cXHR0Y2ZfY3RfZmxvd190YWJsZXNfdW5pbml0KCk7XFxubmV0L3NjaGVkL2FjdF9jdC5jOjE3NzE6XFx0ZGVzdHJveV93b3JrcXVldWUoYWN0X2N0X3dxKTtcXG5uZXQvc2NoZWQvYWN0X2N0LmMtMTc3Mi19XFxuLS1cXG5uZXQvc2NoZWQvYWN0X2N0aW5mby5jLTEtLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjArXFxubmV0L3NjaGVkL2FjdF9jdGluZm8uYzoyOi8qIG5ldC9zY2hlZC9hY3RfY3RpbmZvLmMgIG5ldGZpbHRlciBjdGluZm8gY29ubm1hcmsgYWN0aW9uc1xcbm5ldC9zY2hlZC9hY3RfY3RpbmZvLmMtMy0gKlxcbi0tXFxubmV0L3NjaGVkL2FjdF9jdGluZm8uYy0yOC1cXG5uZXQvc2NoZWQvYWN0X2N0aW5mby5jOjI5OnN0YXRpYyBzdHJ1Y3QgdGNfYWN0aW9uX29wcyBhY3RfY3RpbmZvX29wcztcXG5uZXQvc2NoZWQvYWN0X2N0aW5mby5jLTMwLVxcbi0tXFxubmV0L3NjaGVkL2FjdF9jdGluZm8uYz0xNTU9c3RhdGljIGludCB0Y2ZfY3RpbmZvX2luaXQoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgbmxhdHRyICpubGEsXFxuLS1cXG5uZXQvc2NoZWQvYWN0X2N0aW5mby5jLTE1OS17XFxubmV0L3NjaGVkL2FjdF9jdGluZm8uYzoxNjA6XFx0c3RydWN0IHRjX2FjdGlvbl9uZXQgKnRuID0gbmV0X2dlbmVyaWMobmV0LCBhY3RfY3RpbmZvX29wcy5uZXRfaWQpO1xcbm5ldC9zY2hlZC9hY3RfY3RpbmZvLmMtMTYxLVxcdGJvb2wgYmluZCA9IGZsYWdzIFxcdTAwMjYgVENBX0FDVF9GTEFHU19CSU5EO1xcbi0tXFxubmV0L3NjaGVkL2FjdF9jdGluZm8uYy0yMTUtXFx0XFx0cmV0ID0gdGNmX2lkcl9jcmVhdGVfZnJvbV9mbGFncyh0biwgaW5kZXgsIGVzdCwgYSxcXG5uZXQvc2NoZWQvYWN0X2N0aW5mby5jOjIxNjpcXHRcXHRcXHRcXHRcXHRcXHRcXHUwMDI2YWN0X2N0aW5mb19vcHMsIGJpbmQsIGZsYWdzKTtcXG5uZXQvc2NoZWQvYWN0X2N0aW5mby5jLTIxNy1cXHRcXHRpZiAocmV0KSB7XFxuLS1cXG5uZXQvc2NoZWQvYWN0X2N0aW5mby5jPTM1OT1zdGF0aWMgc2l6ZV90IHRjZl9jdGluZm9fZ2V0X2ZpbGxfc2l6ZShjb25zdCBzdHJ1Y3QgdGNfYWN0aW9uICphY3QpXFxuLS1cXG5uZXQvc2NoZWQvYWN0X2N0aW5mby5jLTM2OC1cXG5uZXQvc2NoZWQvYWN0X2N0aW5mby5jOjM2OTpzdGF0aWMgc3RydWN0IHRjX2FjdGlvbl9vcHMgYWN0X2N0aW5mb19vcHMgPSB7XFxubmV0L3NjaGVkL2FjdF9jdGluZm8uYy0zNzAtXFx0LmtpbmRcXHQ9IFxcXCJjdGluZm9cXFwiLFxcbi0tXFxubmV0L3NjaGVkL2FjdF9jdGluZm8uYz0zODI9c3RhdGljIF9fbmV0X2luaXQgaW50IGN0aW5mb19pbml0X25ldChzdHJ1Y3QgbmV0ICpuZXQpXFxubmV0L3NjaGVkL2FjdF9jdGluZm8uYy0zODMte1xcbm5ldC9zY2hlZC9hY3RfY3RpbmZvLmM6Mzg0OlxcdHN0cnVjdCB0Y19hY3Rpb25fbmV0ICp0biA9IG5ldF9nZW5lcmljKG5ldCwgYWN0X2N0aW5mb19vcHMubmV0X2lkKTtcXG5uZXQvc2NoZWQvYWN0X2N0aW5mby5jLTM4NS1cXG5uZXQvc2NoZWQvYWN0X2N0aW5mby5jOjM4NjpcXHRyZXR1cm4gdGNfYWN0aW9uX25ldF9pbml0KG5ldCwgdG4sIFxcdTAwMjZhY3RfY3RpbmZvX29wcyk7XFxubmV0L3NjaGVkL2FjdF9jdGluZm8uYy0zODctfVxcbi0tXFxubmV0L3NjaGVkL2FjdF9jdGluZm8uYz0zODk9c3RhdGljIHZvaWQgX19uZXRfZXhpdCBjdGluZm9fZXhpdF9uZXQoc3RydWN0IGxpc3RfaGVhZCAqbmV0X2xpc3QpXFxubmV0L3NjaGVkL2FjdF9jdGluZm8uYy0zOTAte1xcbm5ldC9zY2hlZC9hY3RfY3RpbmZvLmM6MzkxOlxcdHRjX2FjdGlvbl9uZXRfZXhpdChuZXRfbGlzdCwgYWN0X2N0aW5mb19vcHMubmV0X2lkKTtcXG5uZXQvc2NoZWQvYWN0X2N0aW5mby5jLTM5Mi19XFxuLS1cXG5uZXQvc2NoZWQvYWN0X2N0aW5mby5jPTM5ND1zdGF0aWMgc3RydWN0IHBlcm5ldF9vcGVyYXRpb25zIGN0aW5mb19uZXRfb3BzID0ge1xcbi0tXFxubmV0L3NjaGVkL2FjdF9jdGluZm8uYy0zOTYtXFx0LmV4aXRfYmF0Y2hcXHQ9IGN0aW5mb19leGl0X25ldCxcXG5uZXQvc2NoZWQvYWN0X2N0aW5mby5jOjM5NzpcXHQuaWRcXHRcXHQ9IFxcdTAwMjZhY3RfY3RpbmZvX29wcy5uZXRfaWQsXFxubmV0L3NjaGVkL2FjdF9jdGluZm8uYy0zOTgtXFx0LnNpemVcXHRcXHQ9IHNpemVvZihzdHJ1Y3QgdGNfYWN0aW9uX25ldCksXFxuLS1cXG5uZXQvc2NoZWQvYWN0X2N0aW5mby5jPTQwMT1zdGF0aWMgaW50IF9faW5pdCBjdGluZm9faW5pdF9tb2R1bGUodm9pZClcXG5uZXQvc2NoZWQvYWN0X2N0aW5mby5jLTQwMi17XFxubmV0L3NjaGVkL2FjdF9jdGluZm8uYzo0MDM6XFx0cmV0dXJuIHRjZl9yZWdpc3Rlcl9hY3Rpb24oXFx1MDAyNmFjdF9jdGluZm9fb3BzLCBcXHUwMDI2Y3RpbmZvX25ldF9vcHMpO1xcbm5ldC9zY2hlZC9hY3RfY3RpbmZvLmMtNDA0LX1cXG4tLVxcbm5ldC9zY2hlZC9hY3RfY3RpbmZvLmM9NDA2PXN0YXRpYyB2b2lkIF9fZXhpdCBjdGluZm9fY2xlYW51cF9tb2R1bGUodm9pZClcXG5uZXQvc2NoZWQvYWN0X2N0aW5mby5jLTQwNy17XFxubmV0L3NjaGVkL2FjdF9jdGluZm8uYzo0MDg6XFx0dGNmX3VucmVnaXN0ZXJfYWN0aW9uKFxcdTAwMjZhY3RfY3RpbmZvX29wcywgXFx1MDAyNmN0aW5mb19uZXRfb3BzKTtcXG5uZXQvc2NoZWQvYWN0X2N0aW5mby5jLTQwOS19XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA5VDA4OjM5OjI3LjI2ODI4NDg5MVoiLCJTZXEiOjIxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo0MDY0NDYxNDU2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGhvdWdodCBwcm9jZXNzLCBzdW1tYXJpemVkIGFzIGlmIEkgd2VyZSBjb25zaWRlcmluZyB0aGlzIGlzc3VlOlxuXG4qKkV4YW1pbmluZyB0aGUgS2VybmVsIENvbmZpZ3VyYXRpb24qKlxuXG5Pa2F5LCBzbyBJIG5lZWQgdG8gdHJhY2sgZG93biBob3cgYE5FVF9BQ1RfQ1RgIGlzIGNvbmZpZ3VyZWQuIE15IGluaXRpYWwgaW5zdGluY3QgaXMgdG8gZ28gc3RyYWlnaHQgdG8gdGhlIHNvdXJjZSwgdGhlIGBLY29uZmlnYCBmaWxlcy4gVGhhdCdzIHdoZXJlIGFsbCB0aGUga2VybmVsIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBhcmUgZGVmaW5lZC4gSSdsbCBuZWVkIHRvIG9wZW4gdGhvc2UgdXAgYW5kIHNlZSB3aGF0IEkgY2FuIGxlYXJuIGFib3V0IHRoaXMgcGFydGljdWxhciBvcHRpb24uIEknbSBsb29raW5nIGZvciBpdHMgZGVwZW5kZW5jaWVzLCBkZWZhdWx0IHZhbHVlcywgaGVscCB0ZXh0LCBhbmQgYW55dGhpbmcgZWxzZSB0aGF0IG1pZ2h0IGdpdmUgbWUgYSBjbHVlIGFib3V0IGl0cyByb2xlIGluIHRoZSBzeXN0ZW0gYW5kIGhvdyBpdCdzIGVuYWJsZWQuIEknbGwgYmUgbG9va2luZyBmb3Igd2hlcmUgaXQncyBkZWZpbmVkIGFuZCB3aGF0IGNvbnRleHQgbWFrZXMgaXQgYXZhaWxhYmxlIGZvciBzZWxlY3Rpb24uIEknbGwgd2FudCB0byBzZWUgaG93IGl0IG1pZ2h0IHJlbGF0ZSB0byBvdGhlciBuZXR3b3JraW5nIGZlYXR1cmVzLCBzZWN1cml0eSBjb25zaWRlcmF0aW9ucywgb3IgcGVyaGFwcyBldmVuIHNwZWNpZmljIGhhcmR3YXJlIGRlcGVuZGVuY2llcy4gSSdtIGV4cGVjdGluZyB0aGlzIHdpbGwgbGlrZWx5IGdpdmUgbWUgYSBkZWVwZXIgdW5kZXJzdGFuZGluZyB0aGFuIGp1c3QgbG9va2luZyBhdCB0aGUgc291cmNlIGNvZGUgdXNpbmcgZ3JlcC4gSXQncyB0aW1lIHRvIGRpdmUgaW50byB0aG9zZSBgS2NvbmZpZ2AgZmlsZXMgYW5kIHBpZWNlIHRoaXMgaW5mb3JtYXRpb24gdG9nZXRoZXIuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIzNDg2LCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDlUMDg6Mzk6MzEuMzMyNzQ5MzU4WiIsIlNlcSI6MjIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE2NDk2MSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvc2NoZWQvS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiA5MTAsXG4gIFwiTGluZUNvdW50XCI6IDMwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiA5MTA6XFx0XFx0ICBTYXkgWSBoZXJlIHRvIHNldC9yZWxlYXNlIGlwIHR1bm5lbCBtZXRhZGF0YS5cXG4gOTExOlxcdFxcbiA5MTI6XFx0XFx0ICBJZiB1bnN1cmUsIHNheSBOLlxcbiA5MTM6XFx0XFxuIDkxNDpcXHRcXHQgIFRvIGNvbXBpbGUgdGhpcyBjb2RlIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGVcXG4gOTE1OlxcdFxcdCAgbW9kdWxlIHdpbGwgYmUgY2FsbGVkIGFjdF90dW5uZWxfa2V5LlxcbiA5MTY6XFx0XFxuIDkxNzpcXHRjb25maWcgTkVUX0FDVF9DVFxcbiA5MTg6XFx0XFx0dHJpc3RhdGUgXFxcImNvbm5lY3Rpb24gdHJhY2tpbmcgdGMgYWN0aW9uXFxcIlxcbiA5MTk6XFx0XFx0ZGVwZW5kcyBvbiBORVRfQ0xTX0FDVCBcXHUwMDI2XFx1MDAyNiBORl9DT05OVFJBQ0sgXFx1MDAyNlxcdTAwMjYgKCFORl9OQVQgfHwgTkZfTkFUKSBcXHUwMDI2XFx1MDAyNiBORl9GTE9XX1RBQkxFXFxuIDkyMDpcXHRcXHRzZWxlY3QgTkZfQ09OTlRSQUNLX09WU1xcbiA5MjE6XFx0XFx0c2VsZWN0IE5GX05BVF9PVlMgaWYgTkZfTkFUXFxuIDkyMjpcXHRcXHRoZWxwXFxuIDkyMzpcXHRcXHQgIFNheSBZIGhlcmUgdG8gYWxsb3cgc2VuZGluZyB0aGUgcGFja2V0cyB0byBjb25udHJhY2sgbW9kdWxlLlxcbiA5MjQ6XFx0XFxuIDkyNTpcXHRcXHQgIElmIHVuc3VyZSwgc2F5IE4uXFxuIDkyNjpcXHRcXG4gOTI3OlxcdFxcdCAgVG8gY29tcGlsZSB0aGlzIGNvZGUgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZVxcbiA5Mjg6XFx0XFx0ICBtb2R1bGUgd2lsbCBiZSBjYWxsZWQgYWN0X2N0LlxcbiA5Mjk6XFx0XFxuIDkzMDpcXHRjb25maWcgTkVUX0FDVF9HQVRFXFxuIDkzMTpcXHRcXHR0cmlzdGF0ZSBcXFwiRnJhbWUgZ2F0ZSBlbnRyeSBsaXN0IGNvbnRyb2wgdGMgYWN0aW9uXFxcIlxcbiA5MzI6XFx0XFx0ZGVwZW5kcyBvbiBORVRfQ0xTX0FDVFxcbiA5MzM6XFx0XFx0aGVscFxcbiA5MzQ6XFx0XFx0ICBTYXkgWSBoZXJlIHRvIGFsbG93IHRvIGNvbnRyb2wgdGhlIGluZ3Jlc3MgZmxvdyB0byBiZSBwYXNzZWQgYXRcXG4gOTM1OlxcdFxcdCAgc3BlY2lmaWMgdGltZSBzbG90IGFuZCBiZSBkcm9wcGVkIGF0IG90aGVyIHNwZWNpZmljIHRpbWUgc2xvdCBieVxcbiA5MzY6XFx0XFx0ICB0aGUgZ2F0ZSBlbnRyeSBsaXN0LlxcbiA5Mzc6XFx0XFxuIDkzODpcXHRcXHQgIElmIHVuc3VyZSwgc2F5IE4uXFxuIDkzOTpcXHRcXHQgIFRvIGNvbXBpbGUgdGhpcyBjb2RlIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGVcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDlUMDg6Mzk6MzEuMzMyOTE2OTk4WiIsIlNlcSI6MjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjg3NzEzMjAzODQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIGEgS2VybmVsIFBhdGNoIFJlbGF0ZWQgdG8gQ29ubmVjdGlvbiBUcmFja2luZyBhbmQgRmxvdyBUYWJsZXMqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIEl0IGxvb2tzIGxpa2Ugd2UncmUgZGVhbGluZyB3aXRoIGEgZml4IHJlbGF0ZWQgdG8gdGhlIGBORVRfQUNUX0NUYCBmdW5jdGlvbmFsaXR5LCB3aGljaCBkZXBlbmRzIG9uIGNvbm5lY3Rpb24gdHJhY2tpbmcgKGBORVRfQ0xTX0FDVCBcdTAwMjZcdTAwMjYgTkZfQ09OTlRSQUNLYCkgYW5kIGZsb3cgdGFibGVzIChgTkZfRkxPV19UQUJMRWApLCBwb3RlbnRpYWxseSB3aXRoIE5BVCAoYE5GX05BVGApLiBUaGlzIGlzIGFsbCBhY2Nlc3NpYmxlIHZpYSBuZXRsaW5rLCBzcGVjaWZpY2FsbHkgdGhyb3VnaCB0aGUgYHJ0bmV0bGlua2AgaW50ZXJmYWNlIGFuZCB0aGUgYHRjIGFjdGlvbiBjdGAgY29tbWFuZC5cblxuVGhlIGNvcmUgaXNzdWUgc2VlbXMgdG8gcmV2b2x2ZSBhcm91bmQgdGhlIGB0Y2ZfY3RfZmxvd190YWJsZV9nZXRgIGZ1bmN0aW9uLiBUaGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCBkdXJpbmcgdGhlIGluaXRpYWxpemF0aW9uIG9mIHRoZSAnY3QnIHRyYWZmaWMgY29udHJvbCBhY3Rpb24sIHNwZWNpZmljYWxseSBmcm9tIGB0Y2ZfY3RfaW5pdGAuIFdoZW4gYSB1c2VyIHNldHMgdXAgYSBgdGMgYWN0aW9uIGN0YCB2aWEgbmV0bGluayB1c2luZyBgUlRNX05FV0FDVElPTmAgb3IgYFJUTV9ORVdURklMVEVSYCwgdGhlIGB0Y2ZfY3RfaW5pdGAgZnVuY3Rpb24gaXMgdHJpZ2dlcmVkLlxuXG5UaGUgcGF0Y2ggaXRzZWxmIGFkZHJlc3NlcyBhIHJhY2UgY29uZGl0aW9uIHdpdGhpbiBgdGNmX2N0X2Zsb3dfdGFibGVfZ2V0YC4gVGhlIG9yaWdpbmFsIGNvZGUgY2FsbGVkIGBuZl9mbG93X3RhYmxlX2luaXRgIHRvIGluaXRpYWxpemUgdGhlIGZsb3cgdGFibGUsIHdoaWNoLCBhbW9uZyBvdGhlciB0aGluZ3MsIGFkZHMgdGhlIGBmbG93dGFibGVgIHRvIHRoZSBnbG9iYWwgYGZsb3d0YWJsZXNgIGxpc3QgYW5kIHN0YXJ0cyB0aGUgZ2FyYmFnZSBjb2xsZWN0aW9uIHdvcmtlciBgbmZfZmxvd19vZmZsb2FkX3dvcmtfZ2NgLiBUaGUgcHJvYmxlbSB3YXMgdGhhdCBgZmxvd3RhYmxlLVx1MDAzZW5ldGAgd2FzIHdyaXR0ZW4gKmFmdGVyKiB0aGUgYG5mX2Zsb3dfdGFibGVfaW5pdGAgY2FsbC4gSWYgYG5mX2Zsb3dfdGFibGVfaW5pdGAgdHJpZ2dlcmVkIGFueSBkZWxheWVkIHdvcmsgb3Igb2ZmbG9hZCBvcGVyYXRpb25zLCBhIGByZWFkX3BuZXQoXHUwMDI2Zmxvd3RhYmxlLVx1MDAzZW5ldClgIGNvdWxkIHBvdGVudGlhbGx5IHJlYWQgTlVMTCBiZWNhdXNlIHRoZSBgbmV0YCBmaWVsZCB3YXNuJ3QgaW5pdGlhbGl6ZWQgeWV0LiBUaGlzIGNvdWxkIG9jY3VyIGR1cmluZyBuZXQgY2xlYW51cCBvciBpZiB0aGVyZSB3YXMgYSBnYXJiYWdlIGNvbGxlY3Rpb24gcmFjZSBjb25kaXRpb24uIFRoZSBmaXggaXMgdG8gZW5zdXJlIGBmbG93dGFibGUtXHUwMDNlbmV0YCBpcyBpbml0aWFsaXplZCAqYmVmb3JlKiBgbmZfZmxvd190YWJsZV9pbml0YCBnZXRzIGNhbGxlZC5cblxuTm93LCBhIGtleSBxdWVzdGlvbjogaXMgdGhpcyBjb2RlIHBhdGggcmVhY2hhYmxlIGluIHN0YW5kYXJkIHN5emthbGxlciBlbnZpcm9ubWVudHM/IFRoZSBhbnN3ZXIgaXMgeWVzLiBUaGUgYGFjdF9jdGAgYWN0aW9uIGlzIHRoZSBjb25uZWN0aW9uIHRyYWNraW5nIGFjdGlvbiB1c2VkIHdpdGggVEMgKHRyYWZmaWMgY29udHJvbCkgYW5kIGlzIGNvbmZpZ3VyZWQgdmlhIGBydG5ldGxpbmtgLCB1dGlsaXppbmcgY29tbWFuZHMgbGlrZSBgUlRNX05FV0FDVElPTmAsIGBSVE1fTkVXVEZJTFRFUmAsIG9yIHRocm91Z2ggdGhlIGB0Y2AgY29tbWFuZC1saW5lIHV0aWxpdHkuIEFuZCB0aGVzZSB3b3JrIG9uIGNvbW1vbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBRRU1VIGFuZCBHQ0UsIGFzIGxvbmcgYXMgbmV0d29ya2luZyBhbmQgbmV0bGluayBhcmUgZW5hYmxlZC5cblxuVGhpcyBjaGFuZ2UgZGVmaW5pdGVseSBtb2RpZmllcyBleGVjdXRhYmxlIGtlcm5lbCBjb2RlLiBUaGUgY29kZSBpbiBxdWVzdGlvbiBpcyBgdGNmX2N0X2Zsb3dfdGFibGVfZ2V0YCBpbiBgbmV0L3NjaGVkL2FjdF9jdC5jYC4gVGhpcyBtYWtlcyB0aGlzIGEgZ29vZCBjYW5kaWRhdGUgZm9yIGZ1enppbmcuXG5cbk15IGxpc3Qgb2YgYEZvY3VzU3ltYm9sc2Agd2lsbCBiZTpcbiogICBgdGNmX2N0X2Zsb3dfdGFibGVfZ2V0YCAodGhlIG1vZGlmaWVkIGZ1bmN0aW9uKS5cbiogICBgdGNmX2N0X2luaXRgICh0aGUgaW5pdGlhbGl6YXRpb24gZnVuY3Rpb24gdGhhdCBjYWxscyBgdGNmX2N0X2Zsb3dfdGFibGVfZ2V0YCkuXG4qICAgYHRjZl9jdF9hY3RgICh0aGUgcGFja2V0IHByb2Nlc3NpbmcgYWN0aW9uIHRoYXQgaGFuZGxlcyB0aGUgdHJhZmZpYykuXG4qICAgYG5mX2Zsb3dfdGFibGVfaW5pdGAgKHRoZSBmbG93IHRhYmxlIGluaXRpYWxpemF0aW9uIGZ1bmN0aW9uIGNhbGxlZCBieSBgdGNmX2N0X2Zsb3dfdGFibGVfZ2V0YCkuXG5cblJlZ2FyZGluZyBzeW1ib2wgdmlzaWJpbGl0eSwgYHRjZl9jdF9mbG93X3RhYmxlX2dldGAgYW5kIGB0Y2ZfY3RfaW5pdGAgYXJlIHN0YXRpYyB3aXRoaW4gYG5ldC9zY2hlZC9hY3RfY3QuY2AsIHRob3VnaCBgdGNmX2N0X2luaXRgIGNhbGxzIGB0Y2ZfY3RfZmxvd190YWJsZV9nZXRgLiBgdGNmX2N0X2FjdGAgaXMgbm9uLXN0YXRpYyBhbmQgdXNlcyBgVENfSU5ESVJFQ1RfU0NPUEVgLCBhbHNvIGluIGBuZXQvc2NoZWQvYWN0X2N0LmNgLiBgbmZfZmxvd190YWJsZV9pbml0YCBpcyBub24tc3RhdGljIGFuZCBpbiBgbmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2NvcmUuY2AuIEknbGwgd2FudCB0byBkb3VibGUtY2hlY2sgdGhlaXIgZXhhY3Qgc2lnbmF0dXJlcyBhbmQgcHJlc2VuY2UgaW4gdGhlaXIgcmVzcGVjdGl2ZSBzb3VyY2UgZmlsZXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI0MjA4LCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6ODI5LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDlUMDg6Mzk6NDAuMTA0MjQxMjAyWiIsIlNlcSI6MjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2NjM2NjEzNCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ0Y2ZfY3RfXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9zY2hlZC9hY3RfY3QuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvc2NoZWQvYWN0X2N0LmM9NDY9c3RydWN0IHpvbmVzX2h0X2tleSB7XFxuLS1cXG5uZXQvc2NoZWQvYWN0X2N0LmMtNTAtXFxubmV0L3NjaGVkL2FjdF9jdC5jOjUxOnN0cnVjdCB0Y2ZfY3RfZmxvd190YWJsZSB7XFxubmV0L3NjaGVkL2FjdF9jdC5jLTUyLVxcdHN0cnVjdCByaGFzaF9oZWFkIG5vZGU7IC8qIEluIHpvbmVzIHRhYmxlcyAqL1xcbi0tXFxubmV0L3NjaGVkL2FjdF9jdC5jPTYyPXN0YXRpYyBjb25zdCBzdHJ1Y3Qgcmhhc2h0YWJsZV9wYXJhbXMgem9uZXNfcGFyYW1zID0ge1xcbm5ldC9zY2hlZC9hY3RfY3QuYzo2MzpcXHQuaGVhZF9vZmZzZXQgPSBvZmZzZXRvZihzdHJ1Y3QgdGNmX2N0X2Zsb3dfdGFibGUsIG5vZGUpLFxcbm5ldC9zY2hlZC9hY3RfY3QuYzo2NDpcXHQua2V5X29mZnNldCA9IG9mZnNldG9mKHN0cnVjdCB0Y2ZfY3RfZmxvd190YWJsZSwga2V5KSxcXG5uZXQvc2NoZWQvYWN0X2N0LmMtNjUtXFx0LmtleV9sZW4gPSBvZmZzZXRvZmVuZChzdHJ1Y3Qgem9uZXNfaHRfa2V5LCB6b25lKSxcXG4tLVxcbm5ldC9zY2hlZC9hY3RfY3QuYz02OT1zdGF0aWMgc3RydWN0IGZsb3dfYWN0aW9uX2VudHJ5ICpcXG5uZXQvc2NoZWQvYWN0X2N0LmM6NzA6dGNmX2N0X2Zsb3dfdGFibGVfZmxvd19hY3Rpb25fZ2V0X25leHQoc3RydWN0IGZsb3dfYWN0aW9uICpmbG93X2FjdGlvbilcXG5uZXQvc2NoZWQvYWN0X2N0LmMtNzEte1xcbi0tXFxubmV0L3NjaGVkL2FjdF9jdC5jLTc2LVxcbm5ldC9zY2hlZC9hY3RfY3QuYzo3NzpzdGF0aWMgdm9pZCB0Y2ZfY3RfYWRkX21hbmdsZV9hY3Rpb24oc3RydWN0IGZsb3dfYWN0aW9uICphY3Rpb24sXFxubmV0L3NjaGVkL2FjdF9jdC5jLTc4LVxcdFxcdFxcdFxcdCAgICAgZW51bSBmbG93X2FjdGlvbl9tYW5nbGVfYmFzZSBodHlwZSxcXG4tLVxcbm5ldC9zY2hlZC9hY3RfY3QuYy04NC1cXG5uZXQvc2NoZWQvYWN0X2N0LmM6ODU6XFx0ZW50cnkgPSB0Y2ZfY3RfZmxvd190YWJsZV9mbG93X2FjdGlvbl9nZXRfbmV4dChhY3Rpb24pO1xcbm5ldC9zY2hlZC9hY3RfY3QuYy04Ni1cXHRlbnRyeS1cXHUwMDNlaWQgPSBGTE9XX0FDVElPTl9NQU5HTEU7XFxuLS1cXG5uZXQvc2NoZWQvYWN0X2N0LmM9OTc9c3RhdGljIHZvaWRcXG5uZXQvc2NoZWQvYWN0X2N0LmM6OTg6dGNmX2N0X2Zsb3dfdGFibGVfYWRkX2FjdGlvbl9uYXRfaXB2NChjb25zdCBzdHJ1Y3QgbmZfY29ubnRyYWNrX3R1cGxlICp0dXBsZSxcXG5uZXQvc2NoZWQvYWN0X2N0LmMtOTktXFx0XFx0XFx0XFx0ICAgICAgc3RydWN0IG5mX2Nvbm50cmFja190dXBsZSB0YXJnZXQsXFxuLS1cXG5uZXQvc2NoZWQvYWN0X2N0LmMtMTAyLVxcdGlmIChtZW1jbXAoXFx1MDAyNnRhcmdldC5zcmMudTMsIFxcdTAwMjZ0dXBsZS1cXHUwMDNlc3JjLnUzLCBzaXplb2YodGFyZ2V0LnNyYy51MykpKVxcbm5ldC9zY2hlZC9hY3RfY3QuYzoxMDM6XFx0XFx0dGNmX2N0X2FkZF9tYW5nbGVfYWN0aW9uKGFjdGlvbiwgRkxPV19BQ1RfTUFOR0xFX0hEUl9UWVBFX0lQNCxcXG5uZXQvc2NoZWQvYWN0X2N0LmMtMTA0LVxcdFxcdFxcdFxcdFxcdCBvZmZzZXRvZihzdHJ1Y3QgaXBoZHIsIHNhZGRyKSxcXG4tLVxcbm5ldC9zY2hlZC9hY3RfY3QuYy0xMDctXFx0aWYgKG1lbWNtcChcXHUwMDI2dGFyZ2V0LmRzdC51MywgXFx1MDAyNnR1cGxlLVxcdTAwM2Vkc3QudTMsIHNpemVvZih0YXJnZXQuZHN0LnUzKSkpXFxubmV0L3NjaGVkL2FjdF9jdC5jOjEwODpcXHRcXHR0Y2ZfY3RfYWRkX21hbmdsZV9hY3Rpb24oYWN0aW9uLCBGTE9XX0FDVF9NQU5HTEVfSERSX1RZUEVfSVA0LFxcbm5ldC9zY2hlZC9hY3RfY3QuYy0xMDktXFx0XFx0XFx0XFx0XFx0IG9mZnNldG9mKHN0cnVjdCBpcGhkciwgZGFkZHIpLFxcbi0tXFxubmV0L3NjaGVkL2FjdF9jdC5jPTExND1zdGF0aWMgdm9pZFxcbm5ldC9zY2hlZC9hY3RfY3QuYzoxMTU6dGNmX2N0X2FkZF9pcHY2X2FkZHJfbWFuZ2xlX2FjdGlvbihzdHJ1Y3QgZmxvd19hY3Rpb24gKmFjdGlvbixcXG5uZXQvc2NoZWQvYWN0X2N0LmMtMTE2LVxcdFxcdFxcdFxcdCAgIHVuaW9uIG5mX2luZXRfYWRkciAqYWRkcixcXG4tLVxcbm5ldC9zY2hlZC9hY3RfY3QuYy0xMjEtXFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIHNpemVvZihzdHJ1Y3QgaW42X2FkZHIpIC8gc2l6ZW9mKHUzMik7IGkrKylcXG5uZXQvc2NoZWQvYWN0X2N0LmM6MTIyOlxcdFxcdHRjZl9jdF9hZGRfbWFuZ2xlX2FjdGlvbihhY3Rpb24sIEZMT1dfQUNUX01BTkdMRV9IRFJfVFlQRV9JUDYsXFxubmV0L3NjaGVkL2FjdF9jdC5jLTEyMy1cXHRcXHRcXHRcXHRcXHQgaSAqIHNpemVvZih1MzIpICsgb2Zmc2V0LFxcbi0tXFxubmV0L3NjaGVkL2FjdF9jdC5jPTEyNz1zdGF0aWMgdm9pZFxcbm5ldC9zY2hlZC9hY3RfY3QuYzoxMjg6dGNmX2N0X2Zsb3dfdGFibGVfYWRkX2FjdGlvbl9uYXRfaXB2Nihjb25zdCBzdHJ1Y3QgbmZfY29ubnRyYWNrX3R1cGxlICp0dXBsZSxcXG5uZXQvc2NoZWQvYWN0X2N0LmMtMTI5LVxcdFxcdFxcdFxcdCAgICAgIHN0cnVjdCBuZl9jb25udHJhY2tfdHVwbGUgdGFyZ2V0LFxcbi0tXFxubmV0L3NjaGVkL2FjdF9jdC5jLTEzMi1cXHRpZiAobWVtY21wKFxcdTAwMjZ0YXJnZXQuc3JjLnUzLCBcXHUwMDI2dHVwbGUtXFx1MDAzZXNyYy51Mywgc2l6ZW9mKHRhcmdldC5zcmMudTMpKSlcXG5uZXQvc2NoZWQvYWN0X2N0LmM6MTMzOlxcdFxcdHRjZl9jdF9hZGRfaXB2Nl9hZGRyX21hbmdsZV9hY3Rpb24oYWN0aW9uLCBcXHUwMDI2dGFyZ2V0LnNyYy51MyxcXG5uZXQvc2NoZWQvYWN0X2N0LmMtMTM0LVxcdFxcdFxcdFxcdFxcdFxcdCAgIG9mZnNldG9mKHN0cnVjdCBpcHY2aGRyLFxcbi0tXFxubmV0L3NjaGVkL2FjdF9jdC5jLTEzNi1cXHRpZiAobWVtY21wKFxcdTAwMjZ0YXJnZXQuZHN0LnUzLCBcXHUwMDI2dHVwbGUtXFx1MDAzZWRzdC51Mywgc2l6ZW9mKHRhcmdldC5kc3QudTMpKSlcXG5uZXQvc2NoZWQvYWN0X2N0LmM6MTM3OlxcdFxcdHRjZl9jdF9hZGRfaXB2Nl9hZGRyX21hbmdsZV9hY3Rpb24oYWN0aW9uLCBcXHUwMDI2dGFyZ2V0LmRzdC51MyxcXG5uZXQvc2NoZWQvYWN0X2N0LmMtMTM4LVxcdFxcdFxcdFxcdFxcdFxcdCAgIG9mZnNldG9mKHN0cnVjdCBpcHY2aGRyLFxcbi0tXFxubmV0L3NjaGVkL2FjdF9jdC5jPTE0Mj1zdGF0aWMgdm9pZFxcbm5ldC9zY2hlZC9hY3RfY3QuYzoxNDM6dGNmX2N0X2Zsb3dfdGFibGVfYWRkX2FjdGlvbl9uYXRfdGNwKGNvbnN0IHN0cnVjdCBuZl9jb25udHJhY2tfdHVwbGUgKnR1cGxlLFxcbm5ldC9zY2hlZC9hY3RfY3QuYy0xNDQtXFx0XFx0XFx0XFx0ICAgICBzdHJ1Y3QgbmZfY29ubnRyYWNrX3R1cGxlIHRhcmdldCxcXG4tLVxcbm5ldC9zY2hlZC9hY3RfY3QuYy0xNTAtXFx0aWYgKHRhcmdldF9zcmMgIT0gdHVwbGUtXFx1MDAzZXNyYy51LnRjcC5wb3J0KVxcbm5ldC9zY2hlZC9hY3RfY3QuYzoxNTE6XFx0XFx0dGNmX2N0X2FkZF9tYW5nbGVfYWN0aW9uKGFjdGlvbiwgRkxPV19BQ1RfTUFOR0xFX0hEUl9UWVBFX1RDUCxcXG5uZXQvc2NoZWQvYWN0X2N0LmMtMTUyLVxcdFxcdFxcdFxcdFxcdCBvZmZzZXRvZihzdHJ1Y3QgdGNwaGRyLCBzb3VyY2UpLFxcbi0tXFxubmV0L3NjaGVkL2FjdF9jdC5jLTE1NC1cXHRpZiAodGFyZ2V0X2RzdCAhPSB0dXBsZS1cXHUwMDNlZHN0LnUudGNwLnBvcnQpXFxubmV0L3NjaGVkL2FjdF9jdC5jOjE1NTpcXHRcXHR0Y2ZfY3RfYWRkX21hbmdsZV9hY3Rpb24oYWN0aW9uLCBGTE9XX0FDVF9NQU5HTEVfSERSX1RZUEVfVENQLFxcbm5ldC9zY2hlZC9hY3RfY3QuYy0xNTYtXFx0XFx0XFx0XFx0XFx0IG9mZnNldG9mKHN0cnVjdCB0Y3BoZHIsIGRlc3QpLFxcbi0tXFxubmV0L3NjaGVkL2FjdF9jdC5jPTE2MD1zdGF0aWMgdm9pZFxcbm5ldC9zY2hlZC9hY3RfY3QuYzoxNjE6dGNmX2N0X2Zsb3dfdGFibGVfYWRkX2FjdGlvbl9uYXRfdWRwKGNvbnN0IHN0cnVjdCBuZl9jb25udHJhY2tfdHVwbGUgKnR1cGxlLFxcbm5ldC9zY2hlZC9hY3RfY3QuYy0xNjItXFx0XFx0XFx0XFx0ICAgICBzdHJ1Y3QgbmZfY29ubnRyYWNrX3R1cGxlIHRhcmdldCxcXG4tLVxcbm5ldC9zY2hlZC9hY3RfY3QuYy0xNjgtXFx0aWYgKHRhcmdldF9zcmMgIT0gdHVwbGUtXFx1MDAzZXNyYy51LnVkcC5wb3J0KVxcbm5ldC9zY2hlZC9hY3RfY3QuYzoxNjk6XFx0XFx0dGNmX2N0X2FkZF9tYW5nbGVfYWN0aW9uKGFjdGlvbiwgRkxPV19BQ1RfTUFOR0xFX0hEUl9UWVBFX1VEUCxcXG5uZXQvc2NoZWQvYWN0X2N0LmMtMTcwLVxcdFxcdFxcdFxcdFxcdCBvZmZzZXRvZihzdHJ1Y3QgdWRwaGRyLCBzb3VyY2UpLFxcbi0tXFxubmV0L3NjaGVkL2FjdF9jdC5jLTE3Mi1cXHRpZiAodGFyZ2V0X2RzdCAhPSB0dXBsZS1cXHUwMDNlZHN0LnUudWRwLnBvcnQpXFxubmV0L3NjaGVkL2FjdF9jdC5jOjE3MzpcXHRcXHR0Y2ZfY3RfYWRkX21hbmdsZV9hY3Rpb24oYWN0aW9uLCBGTE9XX0FDVF9NQU5HTEVfSERSX1RZUEVfVURQLFxcbm5ldC9zY2hlZC9hY3RfY3QuYy0xNzQtXFx0XFx0XFx0XFx0XFx0IG9mZnNldG9mKHN0cnVjdCB1ZHBoZHIsIGRlc3QpLFxcbi0tXFxubmV0L3NjaGVkL2FjdF9jdC5jLTE3Ny1cXG5uZXQvc2NoZWQvYWN0X2N0LmM6MTc4OnN0YXRpYyB2b2lkIHRjZl9jdF9mbG93X3RhYmxlX2FkZF9hY3Rpb25fbWV0YShzdHJ1Y3QgbmZfY29ubiAqY3QsXFxubmV0L3NjaGVkL2FjdF9jdC5jLTE3OS1cXHRcXHRcXHRcXHRcXHQgICAgICBlbnVtIGlwX2Nvbm50cmFja19kaXIgZGlyLFxcbi0tXFxubmV0L3NjaGVkL2FjdF9jdC5jLTE4Ni1cXG5uZXQvc2NoZWQvYWN0X2N0LmM6MTg3OlxcdGVudHJ5ID0gdGNmX2N0X2Zsb3dfdGFibGVfZmxvd19hY3Rpb25fZ2V0X25leHQoYWN0aW9uKTtcXG5uZXQvc2NoZWQvYWN0X2N0LmMtMTg4LVxcdGVudHJ5LVxcdTAwM2VpZCA9IEZMT1dfQUNUSU9OX0NUX01FVEFEQVRBO1xcbi0tXFxubmV0L3NjaGVkL2FjdF9jdC5jLTIwMy1cXG5uZXQvc2NoZWQvYWN0X2N0LmM6MjA0OnN0YXRpYyBpbnQgdGNmX2N0X2Zsb3dfdGFibGVfYWRkX2FjdGlvbl9uYXQoc3RydWN0IG5ldCAqbmV0LFxcbm5ldC9zY2hlZC9hY3RfY3QuYy0yMDUtXFx0XFx0XFx0XFx0XFx0ICAgIHN0cnVjdCBuZl9jb25uICpjdCxcXG4tLVxcbm5ldC9zY2hlZC9hY3RfY3QuYy0yMTgtXFx0Y2FzZSBORlBST1RPX0lQVjQ6XFxubmV0L3NjaGVkL2FjdF9jdC5jOjIxOTpcXHRcXHR0Y2ZfY3RfZmxvd190YWJsZV9hZGRfYWN0aW9uX25hdF9pcHY0KHR1cGxlLCB0YXJnZXQsXFxubmV0L3NjaGVkL2FjdF9jdC5jLTIyMC1cXHRcXHRcXHRcXHRcXHRcXHQgICAgICBhY3Rpb24pO1xcbi0tXFxubmV0L3NjaGVkL2FjdF9jdC5jLTIyMi1cXHRjYXNlIE5GUFJPVE9fSVBWNjpcXG5uZXQvc2NoZWQvYWN0X2N0LmM6MjIzOlxcdFxcdHRjZl9jdF9mbG93X3RhYmxlX2FkZF9hY3Rpb25fbmF0X2lwdjYodHVwbGUsIHRhcmdldCxcXG5uZXQvc2NoZWQvYWN0X2N0LmMtMjI0LVxcdFxcdFxcdFxcdFxcdFxcdCAgICAgIGFjdGlvbik7XFxuLS1cXG5uZXQvc2NoZWQvYWN0X2N0LmMtMjMxLVxcdGNhc2UgSVBQUk9UT19UQ1A6XFxubmV0L3NjaGVkL2FjdF9jdC5jOjIzMjpcXHRcXHR0Y2ZfY3RfZmxvd190YWJsZV9hZGRfYWN0aW9uX25hdF90Y3AodHVwbGUsIHRhcmdldCwgYWN0aW9uKTtcXG5uZXQvc2NoZWQvYWN0X2N0LmMtMjMzLVxcdFxcdGJyZWFrO1xcbm5ldC9zY2hlZC9hY3RfY3QuYy0yMzQtXFx0Y2FzZSBJUFBST1RPX1VEUDpcXG5uZXQvc2NoZWQvYWN0X2N0LmM6MjM1OlxcdFxcdHRjZl9jdF9mbG93X3RhYmxlX2FkZF9hY3Rpb25fbmF0X3VkcCh0dXBsZSwgdGFyZ2V0LCBhY3Rpb24pO1xcbm5ldC9zY2hlZC9hY3RfY3QuYy0yMzYtXFx0XFx0YnJlYWs7XFxuLS1cXG5uZXQvc2NoZWQvYWN0X2N0LmMtMjQzLVxcbm5ldC9zY2hlZC9hY3RfY3QuYzoyNDQ6c3RhdGljIGludCB0Y2ZfY3RfZmxvd190YWJsZV9maWxsX2FjdGlvbnMoc3RydWN0IG5ldCAqbmV0LFxcbm5ldC9zY2hlZC9hY3RfY3QuYy0yNDUtXFx0XFx0XFx0XFx0XFx0ICBzdHJ1Y3QgZmxvd19vZmZsb2FkICpmbG93LFxcbi0tXFxubmV0L3NjaGVkL2FjdF9jdC5jLTI3MS1cXG5uZXQvc2NoZWQvYWN0X2N0LmM6MjcyOlxcdGVyciA9IHRjZl9jdF9mbG93X3RhYmxlX2FkZF9hY3Rpb25fbmF0KG5ldCwgY3QsIGRpciwgYWN0aW9uKTtcXG5uZXQvc2NoZWQvYWN0X2N0LmMtMjczLVxcdGlmIChlcnIpXFxuLS1cXG5uZXQvc2NoZWQvYWN0X2N0LmMtMjc1LVxcbm5ldC9zY2hlZC9hY3RfY3QuYzoyNzY6XFx0dGNmX2N0X2Zsb3dfdGFibGVfYWRkX2FjdGlvbl9tZXRhKGN0LCBkaXIsIGN0aW5mbywgYWN0aW9uKTtcXG5uZXQvc2NoZWQvYWN0X2N0LmMtMjc3LVxcdHJldHVybiAwO1xcbi0tXFxubmV0L3NjaGVkL2FjdF9jdC5jLTI4Ny1cXG5uZXQvc2NoZWQvYWN0X2N0LmM6Mjg4OnN0YXRpYyBib29sIHRjZl9jdF9mbG93X2lzX291dGRhdGVkKGNvbnN0IHN0cnVjdCBmbG93X29mZmxvYWQgKmZsb3cpXFxubmV0L3NjaGVkL2FjdF9jdC5jLTI4OS17XFxuLS1cXG5uZXQvc2NoZWQvYWN0X2N0LmMtMjk1LVxcbm5ldC9zY2hlZC9hY3RfY3QuYzoyOTY6c3RhdGljIHZvaWQgdGNmX2N0X2Zsb3dfdGFibGVfZ2V0X3JlZihzdHJ1Y3QgdGNmX2N0X2Zsb3dfdGFibGUgKmN0X2Z0KTtcXG5uZXQvc2NoZWQvYWN0X2N0LmMtMjk3LVxcbm5ldC9zY2hlZC9hY3RfY3QuYzoyOTg6c3RhdGljIHZvaWQgdGNmX2N0X25mX2dldChzdHJ1Y3QgbmZfZmxvd3RhYmxlICpmdClcXG5uZXQvc2NoZWQvYWN0X2N0LmMtMjk5LXtcXG5uZXQvc2NoZWQvYWN0X2N0LmM6MzAwOlxcdHN0cnVjdCB0Y2ZfY3RfZmxvd190YWJsZSAqY3RfZnQgPVxcbm5ldC9zY2hlZC9hY3RfY3QuYzozMDE6XFx0XFx0Y29udGFpbmVyX29mKGZ0LCBzdHJ1Y3QgdGNmX2N0X2Zsb3dfdGFibGUsIG5mX2Z0KTtcXG5uZXQvc2NoZWQvYWN0X2N0LmMtMzAyLVxcbm5ldC9zY2hlZC9hY3RfY3QuYzozMDM6XFx0dGNmX2N0X2Zsb3dfdGFibGVfZ2V0X3JlZihjdF9mdCk7XFxubmV0L3NjaGVkL2FjdF9jdC5jLTMwNC19XFxubmV0L3NjaGVkL2FjdF9jdC5jLTMwNS1cXG5uZXQvc2NoZWQvYWN0X2N0LmM6MzA2OnN0YXRpYyB2b2lkIHRjZl9jdF9mbG93X3RhYmxlX3B1dChzdHJ1Y3QgdGNmX2N0X2Zsb3dfdGFibGUgKmN0X2Z0KTtcXG5uZXQvc2NoZWQvYWN0X2N0LmMtMzA3LVxcbm5ldC9zY2hlZC9hY3RfY3QuYzozMDg6c3RhdGljIHZvaWQgdGNmX2N0X25mX3B1dChzdHJ1Y3QgbmZfZmxvd3RhYmxlICpmdClcXG5uZXQvc2NoZWQvYWN0X2N0LmMtMzA5LXtcXG5uZXQvc2NoZWQvYWN0X2N0LmM6MzEwOlxcdHN0cnVjdCB0Y2ZfY3RfZmxvd190YWJsZSAqY3RfZnQgPVxcbm5ldC9zY2hlZC9hY3RfY3QuYzozMTE6XFx0XFx0Y29udGFpbmVyX29mKGZ0LCBzdHJ1Y3QgdGNmX2N0X2Zsb3dfdGFibGUsIG5mX2Z0KTtcXG5uZXQvc2NoZWQvYWN0X2N0LmMtMzEyLVxcbm5ldC9zY2hlZC9hY3RfY3QuYzozMTM6XFx0dGNmX2N0X2Zsb3dfdGFibGVfcHV0KGN0X2Z0KTtcXG5uZXQvc2NoZWQvYWN0X2N0LmMtMzE0LX1cXG4tLVxcbm5ldC9zY2hlZC9hY3RfY3QuYz0zMTY9c3RhdGljIHN0cnVjdCBuZl9mbG93dGFibGVfdHlwZSBmbG93dGFibGVfY3QgPSB7XFxubmV0L3NjaGVkL2FjdF9jdC5jOjMxNzpcXHQuZ2NcXHRcXHQ9IHRjZl9jdF9mbG93X2lzX291dGRhdGVkLFxcbm5ldC9zY2hlZC9hY3RfY3QuYzozMTg6XFx0LmFjdGlvblxcdFxcdD0gdGNmX2N0X2Zsb3dfdGFibGVfZmlsbF9hY3Rpb25zLFxcbm5ldC9zY2hlZC9hY3RfY3QuYzozMTk6XFx0LmdldFxcdFxcdD0gdGNmX2N0X25mX2dldCxcXG5uZXQvc2NoZWQvYWN0X2N0LmM6MzIwOlxcdC5wdXRcXHRcXHQ9IHRjZl9jdF9uZl9wdXQsXFxubmV0L3NjaGVkL2FjdF9jdC5jLTMyMS1cXHQub3duZXJcXHRcXHQ9IFRISVNfTU9EVUxFLFxcbi0tXFxubmV0L3NjaGVkL2FjdF9jdC5jLTMyMy1cXG5uZXQvc2NoZWQvYWN0X2N0LmM6MzI0OnN0YXRpYyBpbnQgdGNmX2N0X2Zsb3dfdGFibGVfZ2V0KHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHRjZl9jdF9wYXJhbXMgKnBhcmFtcylcXG5uZXQvc2NoZWQvYWN0X2N0LmMtMzI1LXtcXG5uZXQvc2NoZWQvYWN0X2N0LmMtMzI2LVxcdHN0cnVjdCB6b25lc19odF9rZXkga2V5ID0geyAubmV0ID0gbmV0LCAuem9uZSA9IHBhcmFtcy1cXHUwMDNlem9uZSB9O1xcbm5ldC9zY2hlZC9hY3RfY3QuYzozMjc6XFx0c3RydWN0IHRjZl9jdF9mbG93X3RhYmxlICpjdF9mdDtcXG5uZXQvc2NoZWQvYWN0X2N0LmMtMzI4LVxcdGludCBlcnIgPSAtRU5PTUVNO1xcbi0tXFxubmV0L3NjaGVkL2FjdF9jdC5jLTM3My1cXG5uZXQvc2NoZWQvYWN0X2N0LmM6Mzc0OnN0YXRpYyB2b2lkIHRjZl9jdF9mbG93X3RhYmxlX2dldF9yZWYoc3RydWN0IHRjZl9jdF9mbG93X3RhYmxlICpjdF9mdClcXG5uZXQvc2NoZWQvYWN0X2N0LmMtMzc1LXtcXG4tLVxcbm5ldC9zY2hlZC9hY3RfY3QuYy0zNzgtXFxubmV0L3NjaGVkL2FjdF9jdC5jOjM3OTpzdGF0aWMgdm9pZCB0Y2ZfY3RfZmxvd190YWJsZV9jbGVhbnVwX3dvcmsoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxcbm5ldC9zY2hlZC9hY3RfY3QuYy0zODAte1xcbm5ldC9zY2hlZC9hY3RfY3QuYzozODE6XFx0c3RydWN0IHRjZl9jdF9mbG93X3RhYmxlICpjdF9mdDtcXG5uZXQvc2NoZWQvYWN0X2N0LmMtMzgyLVxcdHN0cnVjdCBmbG93X2Jsb2NrICpibG9jaztcXG5uZXQvc2NoZWQvYWN0X2N0LmMtMzgzLVxcbm5ldC9zY2hlZC9hY3RfY3QuYzozODQ6XFx0Y3RfZnQgPSBjb250YWluZXJfb2YodG9fcmN1X3dvcmsod29yayksIHN0cnVjdCB0Y2ZfY3RfZmxvd190YWJsZSxcXG5uZXQvc2NoZWQvYWN0X2N0LmMtMzg1LVxcdFxcdFxcdCAgICAgcndvcmspO1xcbi0tXFxubmV0L3NjaGVkL2FjdF9jdC5jLTM5Ni1cXG5uZXQvc2NoZWQvYWN0X2N0LmM6Mzk3OnN0YXRpYyB2b2lkIHRjZl9jdF9mbG93X3RhYmxlX3B1dChzdHJ1Y3QgdGNmX2N0X2Zsb3dfdGFibGUgKmN0X2Z0KVxcbm5ldC9zY2hlZC9hY3RfY3QuYy0zOTgte1xcbi0tXFxubmV0L3NjaGVkL2FjdF9jdC5jLTQwMC1cXHRcXHRyaGFzaHRhYmxlX3JlbW92ZV9mYXN0KFxcdTAwMjZ6b25lc19odCwgXFx1MDAyNmN0X2Z0LVxcdTAwM2Vub2RlLCB6b25lc19wYXJhbXMpO1xcbm5ldC9zY2hlZC9hY3RfY3QuYzo0MDE6XFx0XFx0SU5JVF9SQ1VfV09SSyhcXHUwMDI2Y3RfZnQtXFx1MDAzZXJ3b3JrLCB0Y2ZfY3RfZmxvd190YWJsZV9jbGVhbnVwX3dvcmspO1xcbm5ldC9zY2hlZC9hY3RfY3QuYy00MDItXFx0XFx0cXVldWVfcmN1X3dvcmsoYWN0X2N0X3dxLCBcXHUwMDI2Y3RfZnQtXFx1MDAzZXJ3b3JrKTtcXG4tLVxcbm5ldC9zY2hlZC9hY3RfY3QuYy00MDUtXFxubmV0L3NjaGVkL2FjdF9jdC5jOjQwNjpzdGF0aWMgdm9pZCB0Y2ZfY3RfZmxvd190Y19pZmlkeChzdHJ1Y3QgZmxvd19vZmZsb2FkICplbnRyeSxcXG5uZXQvc2NoZWQvYWN0X2N0LmMtNDA3LVxcdFxcdFxcdFxcdCBzdHJ1Y3QgbmZfY29ubl9hY3RfY3RfZXh0ICphY3RfY3RfZXh0LCB1OCBkaXIpXFxuLS1cXG5uZXQvc2NoZWQvYWN0X2N0LmMtNDEyLVxcbm5ldC9zY2hlZC9hY3RfY3QuYzo0MTM6c3RhdGljIHZvaWQgdGNmX2N0X2Zsb3dfY3RfZXh0X2lmaWR4X3VwZGF0ZShzdHJ1Y3QgZmxvd19vZmZsb2FkICplbnRyeSlcXG5uZXQvc2NoZWQvYWN0X2N0LmMtNDE0LXtcXG4tLVxcbm5ldC9zY2hlZC9hY3RfY3QuYy00MTgtXFx0aWYgKGFjdF9jdF9leHQpIHtcXG5uZXQvc2NoZWQvYWN0X2N0LmM6NDE5OlxcdFxcdHRjZl9jdF9mbG93X3RjX2lmaWR4KGVudHJ5LCBhY3RfY3RfZXh0LCBGTE9XX09GRkxPQURfRElSX09SSUdJTkFMKTtcXG5uZXQvc2NoZWQvYWN0X2N0LmM6NDIwOlxcdFxcdHRjZl9jdF9mbG93X3RjX2lmaWR4KGVudHJ5LCBhY3RfY3RfZXh0LCBGTE9XX09GRkxPQURfRElSX1JFUExZKTtcXG5uZXQvc2NoZWQvYWN0X2N0LmMtNDIxLVxcdH1cXG4tLVxcbm5ldC9zY2hlZC9hY3RfY3QuYy00MjMtXFxubmV0L3NjaGVkL2FjdF9jdC5jOjQyNDpzdGF0aWMgdm9pZCB0Y2ZfY3RfZmxvd190YWJsZV9hZGQoc3RydWN0IHRjZl9jdF9mbG93X3RhYmxlICpjdF9mdCxcXG5uZXQvc2NoZWQvYWN0X2N0LmMtNDI1LVxcdFxcdFxcdFxcdCAgc3RydWN0IG5mX2Nvbm4gKmN0LFxcbi0tXFxubmV0L3NjaGVkL2FjdF9jdC5jLTQ0OS1cXHRpZiAoYWN0X2N0X2V4dCkge1xcbm5ldC9zY2hlZC9hY3RfY3QuYzo0NTA6XFx0XFx0dGNmX2N0X2Zsb3dfdGNfaWZpZHgoZW50cnksIGFjdF9jdF9leHQsIEZMT1dfT0ZGTE9BRF9ESVJfT1JJR0lOQUwpO1xcbm5ldC9zY2hlZC9hY3RfY3QuYzo0NTE6XFx0XFx0dGNmX2N0X2Zsb3dfdGNfaWZpZHgoZW50cnksIGFjdF9jdF9leHQsIEZMT1dfT0ZGTE9BRF9ESVJfUkVQTFkpO1xcbm5ldC9zY2hlZC9hY3RfY3QuYy00NTItXFx0fVxcbi0tXFxubmV0L3NjaGVkL2FjdF9jdC5jLTQ2NS1cXG5uZXQvc2NoZWQvYWN0X2N0LmM6NDY2OnN0YXRpYyB2b2lkIHRjZl9jdF9mbG93X3RhYmxlX3Byb2Nlc3NfY29ubihzdHJ1Y3QgdGNmX2N0X2Zsb3dfdGFibGUgKmN0X2Z0LFxcbm5ldC9zY2hlZC9hY3RfY3QuYy00NjctXFx0XFx0XFx0XFx0XFx0ICAgc3RydWN0IG5mX2Nvbm4gKmN0LFxcbi0tXFxubmV0L3NjaGVkL2FjdF9jdC5jLTUxMi1cXG5uZXQvc2NoZWQvYWN0X2N0LmM6NTEzOlxcdHRjZl9jdF9mbG93X3RhYmxlX2FkZChjdF9mdCwgY3QsIHRjcCwgYmlkaXJlY3Rpb25hbCk7XFxubmV0L3NjaGVkL2FjdF9jdC5jLTUxNC19XFxuLS1cXG5uZXQvc2NoZWQvYWN0X2N0LmM9NTE2PXN0YXRpYyBib29sXFxubmV0L3NjaGVkL2FjdF9jdC5jOjUxNzp0Y2ZfY3RfZmxvd190YWJsZV9maWxsX3R1cGxlX2lwdjQoc3RydWN0IHNrX2J1ZmYgKnNrYixcXG5uZXQvc2NoZWQvYWN0X2N0LmMtNTE4LVxcdFxcdFxcdFxcdCAgc3RydWN0IGZsb3dfb2ZmbG9hZF90dXBsZSAqdHVwbGUsXFxuLS1cXG5uZXQvc2NoZWQvYWN0X2N0LmM9NTg5PXN0YXRpYyBib29sXFxubmV0L3NjaGVkL2FjdF9jdC5jOjU5MDp0Y2ZfY3RfZmxvd190YWJsZV9maWxsX3R1cGxlX2lwdjYoc3RydWN0IHNrX2J1ZmYgKnNrYixcXG5uZXQvc2NoZWQvYWN0X2N0LmMtNTkxLVxcdFxcdFxcdFxcdCAgc3RydWN0IGZsb3dfb2ZmbG9hZF90dXBsZSAqdHVwbGUsXFxuLS1cXG5uZXQvc2NoZWQvYWN0X2N0LmMtNjU3LVxcbm5ldC9zY2hlZC9hY3RfY3QuYzo2NTg6c3RhdGljIGJvb2wgdGNmX2N0X2Zsb3dfdGFibGVfbG9va3VwKHN0cnVjdCB0Y2ZfY3RfcGFyYW1zICpwLFxcbm5ldC9zY2hlZC9hY3RfY3QuYy02NTktXFx0XFx0XFx0XFx0ICAgICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbi0tXFxubmV0L3NjaGVkL2FjdF9jdC5jLTY3My1cXHRjYXNlIE5GUFJPVE9fSVBWNDpcXG5uZXQvc2NoZWQvYWN0X2N0LmM6Njc0OlxcdFxcdGlmICghdGNmX2N0X2Zsb3dfdGFibGVfZmlsbF90dXBsZV9pcHY0KHNrYiwgXFx1MDAyNnR1cGxlLCBcXHUwMDI2dGNwaCkpXFxubmV0L3NjaGVkL2FjdF9jdC5jLTY3NS1cXHRcXHRcXHRyZXR1cm4gZmFsc2U7XFxuLS1cXG5uZXQvc2NoZWQvYWN0X2N0LmMtNjc3LVxcdGNhc2UgTkZQUk9UT19JUFY2Olxcbm5ldC9zY2hlZC9hY3RfY3QuYzo2Nzg6XFx0XFx0aWYgKCF0Y2ZfY3RfZmxvd190YWJsZV9maWxsX3R1cGxlX2lwdjYoc2tiLCBcXHUwMDI2dHVwbGUsIFxcdTAwMjZ0Y3BoKSlcXG5uZXQvc2NoZWQvYWN0X2N0LmMtNjc5LVxcdFxcdFxcdHJldHVybiBmYWxzZTtcXG4tLVxcbm5ldC9zY2hlZC9hY3RfY3QuYy03MTktXFx0bmZfY29ubl9hY3RfY3RfZXh0X2ZpbGwoc2tiLCBjdCwgY3RpbmZvKTtcXG5uZXQvc2NoZWQvYWN0X2N0LmM6NzIwOlxcdHRjZl9jdF9mbG93X2N0X2V4dF9pZmlkeF91cGRhdGUoZmxvdyk7XFxubmV0L3NjaGVkL2FjdF9jdC5jLTcyMS1cXHRmbG93X29mZmxvYWRfcmVmcmVzaChuZl9mdCwgZmxvdywgZm9yY2VfcmVmcmVzaCk7XFxuLS1cXG5uZXQvc2NoZWQvYWN0X2N0LmMtNzM0LVxcbm5ldC9zY2hlZC9hY3RfY3QuYzo3MzU6c3RhdGljIGludCB0Y2ZfY3RfZmxvd190YWJsZXNfaW5pdCh2b2lkKVxcbm5ldC9zY2hlZC9hY3RfY3QuYy03MzYte1xcbi0tXFxubmV0L3NjaGVkL2FjdF9jdC5jLTczOS1cXG5uZXQvc2NoZWQvYWN0X2N0LmM6NzQwOnN0YXRpYyB2b2lkIHRjZl9jdF9mbG93X3RhYmxlc191bmluaXQodm9pZClcXG5uZXQvc2NoZWQvYWN0X2N0LmMtNzQxLXtcXG4tLVxcbm5ldC9zY2hlZC9hY3RfY3QuYz03NDc9c3RydWN0IHRjX2N0X2FjdGlvbl9uZXQge1xcbi0tXFxubmV0L3NjaGVkL2FjdF9jdC5jLTc1MS0vKiBEZXRlcm1pbmUgd2hldGhlciBza2ItXFx1MDAzZV9uZmN0IGlzIGVxdWFsIHRvIHRoZSByZXN1bHQgb2YgY29ubnRyYWNrIGxvb2t1cC4gKi9cXG5uZXQvc2NoZWQvYWN0X2N0LmM6NzUyOnN0YXRpYyBib29sIHRjZl9jdF9za2JfbmZjdF9jYWNoZWQoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbm5ldC9zY2hlZC9hY3RfY3QuYzo3NTM6XFx0XFx0XFx0XFx0ICAgc3RydWN0IHRjZl9jdF9wYXJhbXMgKnApXFxubmV0L3NjaGVkL2FjdF9jdC5jLTc1NC17XFxuLS1cXG5uZXQvc2NoZWQvYWN0X2N0LmMtNzkwLVxcbm5ldC9zY2hlZC9hY3RfY3QuYzo3OTE6c3RhdGljIHU4IHRjZl9jdF9za2JfbmZfZmFtaWx5KHN0cnVjdCBza19idWZmICpza2IpXFxubmV0L3NjaGVkL2FjdF9jdC5jLTc5Mi17XFxuLS1cXG5uZXQvc2NoZWQvYWN0X2N0LmMtODA4LVxcbm5ldC9zY2hlZC9hY3RfY3QuYzo4MDk6c3RhdGljIGludCB0Y2ZfY3RfaXB2NF9pc19mcmFnbWVudChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBib29sICpmcmFnKVxcbm5ldC9zY2hlZC9hY3RfY3QuYy04MTAte1xcbi0tXFxubmV0L3NjaGVkL2FjdF9jdC5jLTgyMi1cXG5uZXQvc2NoZWQvYWN0X2N0LmM6ODIzOnN0YXRpYyBpbnQgdGNmX2N0X2lwdjZfaXNfZnJhZ21lbnQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgYm9vbCAqZnJhZylcXG5uZXQvc2NoZWQvYWN0X2N0LmMtODI0LXtcXG4tLVxcbm5ldC9zY2hlZC9hY3RfY3QuYy04NDgtICovXFxubmV0L3NjaGVkL2FjdF9jdC5jOjg0OTpzdGF0aWMgaW50IHRjZl9jdF9oYW5kbGVfZnJhZ21lbnRzKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHNrX2J1ZmYgKnNrYixcXG5uZXQvc2NoZWQvYWN0X2N0LmMtODUwLVxcdFxcdFxcdFxcdCAgIHU4IGZhbWlseSwgdTE2IHpvbmUsIGJvb2wgKmRlZnJhZyxcXG4tLVxcbm5ldC9zY2hlZC9hY3RfY3QuYy04NjUtXFx0aWYgKGZhbWlseSA9PSBORlBST1RPX0lQVjQpXFxubmV0L3NjaGVkL2FjdF9jdC5jOjg2NjpcXHRcXHRlcnIgPSB0Y2ZfY3RfaXB2NF9pc19mcmFnbWVudChza2IsIFxcdTAwMjZmcmFnKTtcXG5uZXQvc2NoZWQvYWN0X2N0LmMtODY3LVxcdGVsc2VcXG5uZXQvc2NoZWQvYWN0X2N0LmM6ODY4OlxcdFxcdGVyciA9IHRjZl9jdF9pcHY2X2lzX2ZyYWdtZW50KHNrYiwgXFx1MDAyNmZyYWcpO1xcbm5ldC9zY2hlZC9hY3RfY3QuYy04NjktXFx0aWYgKGVycikge1xcbi0tXFxubmV0L3NjaGVkL2FjdF9jdC5jLTg4Ni1cXG5uZXQvc2NoZWQvYWN0X2N0LmM6ODg3OnN0YXRpYyB2b2lkIHRjZl9jdF9wYXJhbXNfZnJlZShzdHJ1Y3QgdGNmX2N0X3BhcmFtcyAqcGFyYW1zKVxcbm5ldC9zY2hlZC9hY3RfY3QuYy04ODgte1xcbi0tXFxubmV0L3NjaGVkL2FjdF9jdC5jLTg5Ni1cXHRpZiAocGFyYW1zLVxcdTAwM2VjdF9mdClcXG5uZXQvc2NoZWQvYWN0X2N0LmM6ODk3OlxcdFxcdHRjZl9jdF9mbG93X3RhYmxlX3B1dChwYXJhbXMtXFx1MDAzZWN0X2Z0KTtcXG5uZXQvc2NoZWQvYWN0X2N0LmMtODk4LVxcdGlmIChwYXJhbXMtXFx1MDAzZXRtcGwpIHtcXG4tLVxcbm5ldC9zY2hlZC9hY3RfY3QuYy05MDctXFxubmV0L3NjaGVkL2FjdF9jdC5jOjkwODpzdGF0aWMgdm9pZCB0Y2ZfY3RfcGFyYW1zX2ZyZWVfcmN1KHN0cnVjdCByY3VfaGVhZCAqaGVhZClcXG5uZXQvc2NoZWQvYWN0X2N0LmMtOTA5LXtcXG5uZXQvc2NoZWQvYWN0X2N0LmM6OTEwOlxcdHN0cnVjdCB0Y2ZfY3RfcGFyYW1zICpwYXJhbXM7XFxubmV0L3NjaGVkL2FjdF9jdC5jLTkxMS1cXG5uZXQvc2NoZWQvYWN0X2N0LmM6OTEyOlxcdHBhcmFtcyA9IGNvbnRhaW5lcl9vZihoZWFkLCBzdHJ1Y3QgdGNmX2N0X3BhcmFtcywgcmN1KTtcXG5uZXQvc2NoZWQvYWN0X2N0LmM6OTEzOlxcdHRjZl9jdF9wYXJhbXNfZnJlZShwYXJhbXMpO1xcbm5ldC9zY2hlZC9hY3RfY3QuYy05MTQtfVxcbm5ldC9zY2hlZC9hY3RfY3QuYy05MTUtXFxubmV0L3NjaGVkL2FjdF9jdC5jOjkxNjpzdGF0aWMgdm9pZCB0Y2ZfY3RfYWN0X3NldF9tYXJrKHN0cnVjdCBuZl9jb25uICpjdCwgdTMyIG1hcmssIHUzMiBtYXNrKVxcbm5ldC9zY2hlZC9hY3RfY3QuYy05MTcte1xcbi0tXFxubmV0L3NjaGVkL2FjdF9jdC5jLTkzMi1cXG5uZXQvc2NoZWQvYWN0X2N0LmM6OTMzOnN0YXRpYyB2b2lkIHRjZl9jdF9hY3Rfc2V0X2xhYmVscyhzdHJ1Y3QgbmZfY29ubiAqY3QsXFxubmV0L3NjaGVkL2FjdF9jdC5jLTkzNC1cXHRcXHRcXHRcXHQgIHUzMiAqbGFiZWxzLFxcbi0tXFxubmV0L3NjaGVkL2FjdF9jdC5jLTkzNy0jaWYgSVNfRU5BQkxFRChDT05GSUdfTkZfQ09OTlRSQUNLX0xBQkVMUylcXG5uZXQvc2NoZWQvYWN0X2N0LmM6OTM4OlxcdHNpemVfdCBsYWJlbHNfc3ogPSBzaXplb2ZfZmllbGQoc3RydWN0IHRjZl9jdF9wYXJhbXMsIGxhYmVscyk7XFxubmV0L3NjaGVkL2FjdF9jdC5jLTkzOS1cXG4tLVxcbm5ldC9zY2hlZC9hY3RfY3QuYy05NDYtXFxubmV0L3NjaGVkL2FjdF9jdC5jOjk0NzpzdGF0aWMgaW50IHRjZl9jdF9hY3RfbmF0KHN0cnVjdCBza19idWZmICpza2IsXFxubmV0L3NjaGVkL2FjdF9jdC5jLTk0OC1cXHRcXHRcXHQgIHN0cnVjdCBuZl9jb25uICpjdCxcXG4tLVxcbm5ldC9zY2hlZC9hY3RfY3QuYy05NzgtXFxubmV0L3NjaGVkL2FjdF9jdC5jOjk3OTpUQ19JTkRJUkVDVF9TQ09QRSBpbnQgdGNmX2N0X2FjdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBjb25zdCBzdHJ1Y3QgdGNfYWN0aW9uICphLFxcbm5ldC9zY2hlZC9hY3RfY3QuYy05ODAtXFx0XFx0XFx0XFx0IHN0cnVjdCB0Y2ZfcmVzdWx0ICpyZXMpXFxuLS1cXG5uZXQvc2NoZWQvYWN0X2N0LmMtOTg4LVxcdGludCBuaF9vZnMsIGVyciwgcmV0dmFsO1xcbm5ldC9zY2hlZC9hY3RfY3QuYzo5ODk6XFx0c3RydWN0IHRjZl9jdF9wYXJhbXMgKnA7XFxubmV0L3NjaGVkL2FjdF9jdC5jLTk5MC1cXHRib29sIGFkZF9oZWxwZXIgPSBmYWxzZTtcXG4tLVxcbm5ldC9zY2hlZC9hY3RfY3QuYy0xMDE3LVxcbm5ldC9zY2hlZC9hY3RfY3QuYzoxMDE4OlxcdGZhbWlseSA9IHRjZl9jdF9za2JfbmZfZmFtaWx5KHNrYik7XFxubmV0L3NjaGVkL2FjdF9jdC5jLTEwMTktXFx0aWYgKGZhbWlseSA9PSBORlBST1RPX1VOU1BFQylcXG4tLVxcbm5ldC9zY2hlZC9hY3RfY3QuYy0xMDI2LVxcdHNrYl9wdWxsX3Jjc3VtKHNrYiwgbmhfb2ZzKTtcXG5uZXQvc2NoZWQvYWN0X2N0LmM6MTAyNzpcXHRlcnIgPSB0Y2ZfY3RfaGFuZGxlX2ZyYWdtZW50cyhuZXQsIHNrYiwgZmFtaWx5LCBwLVxcdTAwM2V6b25lLCBcXHUwMDI2ZGVmcmFnLFxcbm5ldC9zY2hlZC9hY3RfY3QuYy0xMDI4LVxcdFxcdFxcdFxcdCAgICAgIFxcdTAwMjZza2JfaXNfb3Vycyk7XFxuLS1cXG5uZXQvc2NoZWQvYWN0X2N0LmMtMTA0OC1cXHQgKi9cXG5uZXQvc2NoZWQvYWN0X2N0LmM6MTA0OTpcXHRjYWNoZWQgPSB0Y2ZfY3Rfc2tiX25mY3RfY2FjaGVkKG5ldCwgc2tiLCBwKTtcXG5uZXQvc2NoZWQvYWN0X2N0LmMtMTA1MC1cXHRpZiAoIWNhY2hlZCkge1xcbm5ldC9zY2hlZC9hY3RfY3QuYzoxMDUxOlxcdFxcdGlmICh0Y2ZfY3RfZmxvd190YWJsZV9sb29rdXAocCwgc2tiLCBmYW1pbHkpKSB7XFxubmV0L3NjaGVkL2FjdF9jdC5jLTEwNTItXFx0XFx0XFx0c2tpcF9hZGQgPSB0cnVlO1xcbi0tXFxubmV0L3NjaGVkL2FjdF9jdC5jLTEwNzctXFxubmV0L3NjaGVkL2FjdF9jdC5jOjEwNzg6XFx0ZXJyID0gdGNmX2N0X2FjdF9uYXQoc2tiLCBjdCwgY3RpbmZvLCBwLVxcdTAwM2VjdF9hY3Rpb24sIFxcdTAwMjZwLVxcdTAwM2VyYW5nZSwgY29tbWl0KTtcXG5uZXQvc2NoZWQvYWN0X2N0LmMtMTA3OS1cXHRpZiAoZXJyICE9IE5GX0FDQ0VQVClcXG4tLVxcbm5ldC9zY2hlZC9hY3RfY3QuYy0xMDk5LVxcdGlmIChjb21taXQpIHtcXG5uZXQvc2NoZWQvYWN0X2N0LmM6MTEwMDpcXHRcXHR0Y2ZfY3RfYWN0X3NldF9tYXJrKGN0LCBwLVxcdTAwM2VtYXJrLCBwLVxcdTAwM2VtYXJrX21hc2spO1xcbm5ldC9zY2hlZC9hY3RfY3QuYzoxMTAxOlxcdFxcdHRjZl9jdF9hY3Rfc2V0X2xhYmVscyhjdCwgcC1cXHUwMDNlbGFiZWxzLCBwLVxcdTAwM2VsYWJlbHNfbWFzayk7XFxubmV0L3NjaGVkL2FjdF9jdC5jLTExMDItXFxuLS1cXG5uZXQvc2NoZWQvYWN0X2N0LmMtMTEyMi1cXHRpZiAoIXNraXBfYWRkKVxcbm5ldC9zY2hlZC9hY3RfY3QuYzoxMTIzOlxcdFxcdHRjZl9jdF9mbG93X3RhYmxlX3Byb2Nlc3NfY29ubihwLVxcdTAwM2VjdF9mdCwgY3QsIGN0aW5mbyk7XFxubmV0L3NjaGVkL2FjdF9jdC5jLTExMjQtXFxuLS1cXG5uZXQvc2NoZWQvYWN0X2N0LmM9MTE2MD1zdGF0aWMgY29uc3Qgc3RydWN0IG5sYV9wb2xpY3kgY3RfcG9saWN5W1RDQV9DVF9NQVggKyAxXSA9IHtcXG4tLVxcbm5ldC9zY2hlZC9hY3RfY3QuYy0xMTgwLVxcbm5ldC9zY2hlZC9hY3RfY3QuYzoxMTgxOnN0YXRpYyBpbnQgdGNmX2N0X2ZpbGxfcGFyYW1zX25hdChzdHJ1Y3QgdGNmX2N0X3BhcmFtcyAqcCxcXG5uZXQvc2NoZWQvYWN0X2N0LmMtMTE4Mi1cXHRcXHRcXHRcXHQgIHN0cnVjdCB0Y19jdCAqcGFybSxcXG4tLVxcbm5ldC9zY2hlZC9hY3RfY3QuYy0xMjQwLVxcbm5ldC9zY2hlZC9hY3RfY3QuYzoxMjQxOnN0YXRpYyB2b2lkIHRjZl9jdF9zZXRfa2V5X3ZhbChzdHJ1Y3QgbmxhdHRyICoqdGIsXFxubmV0L3NjaGVkL2FjdF9jdC5jLTEyNDItXFx0XFx0XFx0ICAgICAgIHZvaWQgKnZhbCwgaW50IHZhbF90eXBlLFxcbi0tXFxubmV0L3NjaGVkL2FjdF9jdC5jLTEyNTgtXFxubmV0L3NjaGVkL2FjdF9jdC5jOjEyNTk6c3RhdGljIGludCB0Y2ZfY3RfZmlsbF9wYXJhbXMoc3RydWN0IG5ldCAqbmV0LFxcbm5ldC9zY2hlZC9hY3RfY3QuYzoxMjYwOlxcdFxcdFxcdCAgICAgIHN0cnVjdCB0Y2ZfY3RfcGFyYW1zICpwLFxcbm5ldC9zY2hlZC9hY3RfY3QuYy0xMjYxLVxcdFxcdFxcdCAgICAgIHN0cnVjdCB0Y19jdCAqcGFybSxcXG4tLVxcbm5ldC9zY2hlZC9hY3RfY3QuYy0xMjcyLVxcbm5ldC9zY2hlZC9hY3RfY3QuYzoxMjczOlxcdHRjZl9jdF9zZXRfa2V5X3ZhbCh0YixcXG5uZXQvc2NoZWQvYWN0X2N0LmMtMTI3NC1cXHRcXHRcXHQgICBcXHUwMDI2cC1cXHUwMDNlY3RfYWN0aW9uLCBUQ0FfQ1RfQUNUSU9OLFxcbi0tXFxubmV0L3NjaGVkL2FjdF9jdC5jLTEyODAtXFxubmV0L3NjaGVkL2FjdF9jdC5jOjEyODE6XFx0ZXJyID0gdGNmX2N0X2ZpbGxfcGFyYW1zX25hdChwLCBwYXJtLCB0YiwgZXh0YWNrKTtcXG5uZXQvc2NoZWQvYWN0X2N0LmMtMTI4Mi1cXHRpZiAoZXJyKVxcbi0tXFxubmV0L3NjaGVkL2FjdF9jdC5jLTEyODktXFx0XFx0fVxcbm5ldC9zY2hlZC9hY3RfY3QuYzoxMjkwOlxcdFxcdHRjZl9jdF9zZXRfa2V5X3ZhbCh0YixcXG5uZXQvc2NoZWQvYWN0X2N0LmMtMTI5MS1cXHRcXHRcXHRcXHQgICBcXHUwMDI2cC1cXHUwMDNlbWFyaywgVENBX0NUX01BUkssXFxuLS1cXG5uZXQvc2NoZWQvYWN0X2N0LmMtMTI5Ni1cXHRpZiAodGJbVENBX0NUX0xBQkVMU10pIHtcXG5uZXQvc2NoZWQvYWN0X2N0LmM6MTI5NzpcXHRcXHR1bnNpZ25lZCBpbnQgbl9iaXRzID0gc2l6ZW9mX2ZpZWxkKHN0cnVjdCB0Y2ZfY3RfcGFyYW1zLCBsYWJlbHMpICogODtcXG5uZXQvc2NoZWQvYWN0X2N0LmMtMTI5OC1cXG4tLVxcbm5ldC9zY2hlZC9hY3RfY3QuYy0xMzEwLVxcbm5ldC9zY2hlZC9hY3RfY3QuYzoxMzExOlxcdFxcdHRjZl9jdF9zZXRfa2V5X3ZhbCh0YixcXG5uZXQvc2NoZWQvYWN0X2N0LmMtMTMxMi1cXHRcXHRcXHRcXHQgICBwLVxcdTAwM2VsYWJlbHMsIFRDQV9DVF9MQUJFTFMsXFxuLS1cXG5uZXQvc2NoZWQvYWN0X2N0LmMtMTMyMy1cXG5uZXQvc2NoZWQvYWN0X2N0LmM6MTMyNDpcXHRcXHR0Y2ZfY3Rfc2V0X2tleV92YWwodGIsXFxubmV0L3NjaGVkL2FjdF9jdC5jLTEzMjUtXFx0XFx0XFx0XFx0ICAgXFx1MDAyNnAtXFx1MDAzZXpvbmUsIFRDQV9DVF9aT05FLFxcbi0tXFxubmV0L3NjaGVkL2FjdF9jdC5jLTEzNzAtXFxubmV0L3NjaGVkL2FjdF9jdC5jOjEzNzE6c3RhdGljIGludCB0Y2ZfY3RfaW5pdChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBubGF0dHIgKm5sYSxcXG5uZXQvc2NoZWQvYWN0X2N0LmMtMTM3Mi1cXHRcXHQgICAgICAgc3RydWN0IG5sYXR0ciAqZXN0LCBzdHJ1Y3QgdGNfYWN0aW9uICoqYSxcXG4tLVxcbm5ldC9zY2hlZC9hY3RfY3QuYy0xMzc3LVxcdGJvb2wgYmluZCA9IGZsYWdzIFxcdTAwMjYgVENBX0FDVF9GTEFHU19CSU5EO1xcbm5ldC9zY2hlZC9hY3RfY3QuYzoxMzc4OlxcdHN0cnVjdCB0Y2ZfY3RfcGFyYW1zICpwYXJhbXMgPSBOVUxMO1xcbm5ldC9zY2hlZC9hY3RfY3QuYy0xMzc5LVxcdHN0cnVjdCBubGF0dHIgKnRiW1RDQV9DVF9NQVggKyAxXTtcXG4tLVxcbm5ldC9zY2hlZC9hY3RfY3QuYy0xNDM5LVxcbm5ldC9zY2hlZC9hY3RfY3QuYzoxNDQwOlxcdGVyciA9IHRjZl9jdF9maWxsX3BhcmFtcyhuZXQsIHBhcmFtcywgcGFybSwgdGIsIGV4dGFjayk7XFxubmV0L3NjaGVkL2FjdF9jdC5jLTE0NDEtXFx0aWYgKGVycilcXG4tLVxcbm5ldC9zY2hlZC9hY3RfY3QuYy0xNDQzLVxcbm5ldC9zY2hlZC9hY3RfY3QuYzoxNDQ0OlxcdGVyciA9IHRjZl9jdF9mbG93X3RhYmxlX2dldChuZXQsIHBhcmFtcyk7XFxubmV0L3NjaGVkL2FjdF9jdC5jLTE0NDUtXFx0aWYgKGVycilcXG4tLVxcbm5ldC9zY2hlZC9hY3RfY3QuYy0xNDU3LVxcdGlmIChwYXJhbXMpXFxubmV0L3NjaGVkL2FjdF9jdC5jOjE0NTg6XFx0XFx0Y2FsbF9yY3UoXFx1MDAyNnBhcmFtcy1cXHUwMDNlcmN1LCB0Y2ZfY3RfcGFyYW1zX2ZyZWVfcmN1KTtcXG5uZXQvc2NoZWQvYWN0X2N0LmMtMTQ1OS1cXG4tLVxcbm5ldC9zY2hlZC9hY3RfY3QuYy0xNDY1LVxcdGlmIChwYXJhbXMpXFxubmV0L3NjaGVkL2FjdF9jdC5jOjE0NjY6XFx0XFx0dGNmX2N0X3BhcmFtc19mcmVlKHBhcmFtcyk7XFxubmV0L3NjaGVkL2FjdF9jdC5jLTE0NjctXFx0dGNmX2lkcl9yZWxlYXNlKCphLCBiaW5kKTtcXG4tLVxcbm5ldC9zY2hlZC9hY3RfY3QuYy0xNDcwLVxcbm5ldC9zY2hlZC9hY3RfY3QuYzoxNDcxOnN0YXRpYyB2b2lkIHRjZl9jdF9jbGVhbnVwKHN0cnVjdCB0Y19hY3Rpb24gKmEpXFxubmV0L3NjaGVkL2FjdF9jdC5jLTE0NzIte1xcbm5ldC9zY2hlZC9hY3RfY3QuYzoxNDczOlxcdHN0cnVjdCB0Y2ZfY3RfcGFyYW1zICpwYXJhbXM7XFxubmV0L3NjaGVkL2FjdF9jdC5jLTE0NzQtXFx0c3RydWN0IHRjZl9jdCAqYyA9IHRvX2N0KGEpO1xcbi0tXFxubmV0L3NjaGVkL2FjdF9jdC5jLTE0NzctXFx0aWYgKHBhcmFtcylcXG5uZXQvc2NoZWQvYWN0X2N0LmM6MTQ3ODpcXHRcXHRjYWxsX3JjdShcXHUwMDI2cGFyYW1zLVxcdTAwM2VyY3UsIHRjZl9jdF9wYXJhbXNfZnJlZV9yY3UpO1xcbm5ldC9zY2hlZC9hY3RfY3QuYy0xNDc5LX1cXG5uZXQvc2NoZWQvYWN0X2N0LmMtMTQ4MC1cXG5uZXQvc2NoZWQvYWN0X2N0LmM6MTQ4MTpzdGF0aWMgaW50IHRjZl9jdF9kdW1wX2tleV92YWwoc3RydWN0IHNrX2J1ZmYgKnNrYixcXG5uZXQvc2NoZWQvYWN0X2N0LmMtMTQ4Mi1cXHRcXHRcXHQgICAgICAgY29uc3Qgdm9pZCAqdmFsLCBpbnQgdmFsX3R5cGUsXFxuLS1cXG5uZXQvc2NoZWQvYWN0X2N0LmMtMTUwMy1cXG5uZXQvc2NoZWQvYWN0X2N0LmM6MTUwNDpzdGF0aWMgaW50IHRjZl9jdF9kdW1wX25hdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBjb25zdCBzdHJ1Y3QgdGNmX2N0X3BhcmFtcyAqcClcXG5uZXQvc2NoZWQvYWN0X2N0LmMtMTUwNS17XFxuLS1cXG5uZXQvc2NoZWQvYWN0X2N0LmMtMTU0My1cXG5uZXQvc2NoZWQvYWN0X2N0LmM6MTU0NDpzdGF0aWMgaW50IHRjZl9jdF9kdW1wX2hlbHBlcihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbm5ldC9zY2hlZC9hY3RfY3QuYy0xNTQ1LVxcdFxcdFxcdCAgICAgIGNvbnN0IHN0cnVjdCBuZl9jb25udHJhY2tfaGVscGVyICpoZWxwZXIpXFxuLS1cXG5uZXQvc2NoZWQvYWN0X2N0LmMtMTU1Ny1cXG5uZXQvc2NoZWQvYWN0X2N0LmM6MTU1ODpzdGF0aWMgaW5saW5lIGludCB0Y2ZfY3RfZHVtcChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgdGNfYWN0aW9uICphLFxcbm5ldC9zY2hlZC9hY3RfY3QuYy0xNTU5LVxcdFxcdFxcdCAgICAgIGludCBiaW5kLCBpbnQgcmVmKVxcbi0tXFxubmV0L3NjaGVkL2FjdF9jdC5jLTE1NjItXFx0Y29uc3Qgc3RydWN0IHRjZl9jdCAqYyA9IHRvX2N0KGEpO1xcbm5ldC9zY2hlZC9hY3RfY3QuYzoxNTYzOlxcdGNvbnN0IHN0cnVjdCB0Y2ZfY3RfcGFyYW1zICpwO1xcbm5ldC9zY2hlZC9hY3RfY3QuYy0xNTY0LVxcdHN0cnVjdCB0Y19jdCBvcHQgPSB7XFxuLS1cXG5uZXQvc2NoZWQvYWN0X2N0LmMtMTU3NC1cXG5uZXQvc2NoZWQvYWN0X2N0LmM6MTU3NTpcXHRpZiAodGNmX2N0X2R1bXBfa2V5X3ZhbChza2IsXFxubmV0L3NjaGVkL2FjdF9jdC5jLTE1NzYtXFx0XFx0XFx0XFx0XFx1MDAyNnAtXFx1MDAzZWN0X2FjdGlvbiwgVENBX0NUX0FDVElPTixcXG4tLVxcbm5ldC9zY2hlZC9hY3RfY3QuYy0xNTg0LVxcdGlmIChJU19FTkFCTEVEKENPTkZJR19ORl9DT05OVFJBQ0tfTUFSSykgXFx1MDAyNlxcdTAwMjZcXG5uZXQvc2NoZWQvYWN0X2N0LmM6MTU4NTpcXHQgICAgdGNmX2N0X2R1bXBfa2V5X3ZhbChza2IsXFxubmV0L3NjaGVkL2FjdF9jdC5jLTE1ODYtXFx0XFx0XFx0XFx0XFx1MDAyNnAtXFx1MDAzZW1hcmssIFRDQV9DVF9NQVJLLFxcbi0tXFxubmV0L3NjaGVkL2FjdF9jdC5jLTE1OTEtXFx0aWYgKElTX0VOQUJMRUQoQ09ORklHX05GX0NPTk5UUkFDS19MQUJFTFMpIFxcdTAwMjZcXHUwMDI2XFxubmV0L3NjaGVkL2FjdF9jdC5jOjE1OTI6XFx0ICAgIHRjZl9jdF9kdW1wX2tleV92YWwoc2tiLFxcbm5ldC9zY2hlZC9hY3RfY3QuYy0xNTkzLVxcdFxcdFxcdFxcdHAtXFx1MDAzZWxhYmVscywgVENBX0NUX0xBQkVMUyxcXG4tLVxcbm5ldC9zY2hlZC9hY3RfY3QuYy0xNTk4LVxcdGlmIChJU19FTkFCTEVEKENPTkZJR19ORl9DT05OVFJBQ0tfWk9ORVMpIFxcdTAwMjZcXHUwMDI2XFxubmV0L3NjaGVkL2FjdF9jdC5jOjE1OTk6XFx0ICAgIHRjZl9jdF9kdW1wX2tleV92YWwoc2tiLFxcbm5ldC9zY2hlZC9hY3RfY3QuYy0xNjAwLVxcdFxcdFxcdFxcdFxcdTAwMjZwLVxcdTAwM2V6b25lLCBUQ0FfQ1RfWk9ORSxcXG4tLVxcbm5ldC9zY2hlZC9hY3RfY3QuYy0xNjA0LVxcbm5ldC9zY2hlZC9hY3RfY3QuYzoxNjA1OlxcdGlmICh0Y2ZfY3RfZHVtcF9uYXQoc2tiLCBwKSlcXG5uZXQvc2NoZWQvYWN0X2N0LmMtMTYwNi1cXHRcXHRnb3RvIG5sYV9wdXRfZmFpbHVyZTtcXG5uZXQvc2NoZWQvYWN0X2N0LmMtMTYwNy1cXG5uZXQvc2NoZWQvYWN0X2N0LmM6MTYwODpcXHRpZiAodGNmX2N0X2R1bXBfaGVscGVyKHNrYiwgcC1cXHUwMDNlaGVscGVyKSlcXG5uZXQvc2NoZWQvYWN0X2N0LmMtMTYwOS1cXHRcXHRnb3RvIG5sYV9wdXRfZmFpbHVyZTtcXG4tLVxcbm5ldC9zY2hlZC9hY3RfY3QuYz0xNjI3PXN0YXRpYyB2b2lkIHRjZl9zdGF0c191cGRhdGUoc3RydWN0IHRjX2FjdGlvbiAqYSwgdTY0IGJ5dGVzLCB1NjQgcGFja2V0cyxcXG4tLVxcbm5ldC9zY2hlZC9hY3RfY3QuYy0xNjM1LVxcbm5ldC9zY2hlZC9hY3RfY3QuYzoxNjM2OnN0YXRpYyBpbnQgdGNmX2N0X29mZmxvYWRfYWN0X3NldHVwKHN0cnVjdCB0Y19hY3Rpb24gKmFjdCwgdm9pZCAqZW50cnlfZGF0YSxcXG5uZXQvc2NoZWQvYWN0X2N0LmMtMTYzNy1cXHRcXHRcXHRcXHQgICAgdTMyICppbmRleF9pbmMsIGJvb2wgYmluZCxcXG4tLVxcbm5ldC9zY2hlZC9hY3RfY3QuYy0xNjQyLVxcbm5ldC9zY2hlZC9hY3RfY3QuYzoxNjQzOlxcdFxcdGlmICh0Y2ZfY3RfaGVscGVyKGFjdCkpXFxubmV0L3NjaGVkL2FjdF9jdC5jLTE2NDQtXFx0XFx0XFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xcbi0tXFxubmV0L3NjaGVkL2FjdF9jdC5jLTE2NDYtXFx0XFx0ZW50cnktXFx1MDAzZWlkID0gRkxPV19BQ1RJT05fQ1Q7XFxubmV0L3NjaGVkL2FjdF9jdC5jOjE2NDc6XFx0XFx0ZW50cnktXFx1MDAzZWN0LmFjdGlvbiA9IHRjZl9jdF9hY3Rpb24oYWN0KTtcXG5uZXQvc2NoZWQvYWN0X2N0LmM6MTY0ODpcXHRcXHRlbnRyeS1cXHUwMDNlY3Quem9uZSA9IHRjZl9jdF96b25lKGFjdCk7XFxubmV0L3NjaGVkL2FjdF9jdC5jOjE2NDk6XFx0XFx0ZW50cnktXFx1MDAzZWN0LmZsb3dfdGFibGUgPSB0Y2ZfY3RfZnQoYWN0KTtcXG5uZXQvc2NoZWQvYWN0X2N0LmMtMTY1MC1cXHRcXHQqaW5kZXhfaW5jID0gMTtcXG4tLVxcbm5ldC9zY2hlZC9hY3RfY3QuYy0xNjU5LVxcbm5ldC9zY2hlZC9hY3RfY3QuYzoxNjYwOnN0YXRpYyBzaXplX3QgdGNmX2N0X2dldF9maWxsX3NpemUoY29uc3Qgc3RydWN0IHRjX2FjdGlvbiAqYWN0KVxcbm5ldC9zY2hlZC9hY3RfY3QuYy0xNjYxLXtcXG5uZXQvc2NoZWQvYWN0X2N0LmM6MTY2MjpcXHRjb25zdCBzdHJ1Y3QgdGNmX2N0X3BhcmFtcyAqcDtcXG5uZXQvc2NoZWQvYWN0X2N0LmMtMTY2My1cXHRzaXplX3Qgc2l6ZTtcXG4tLVxcbm5ldC9zY2hlZC9hY3RfY3QuYz0xNzA1PXN0YXRpYyBzdHJ1Y3QgdGNfYWN0aW9uX29wcyBhY3RfY3Rfb3BzID0ge1xcbi0tXFxubmV0L3NjaGVkL2FjdF9jdC5jLTE3MDgtXFx0Lm93bmVyXFx0XFx0PVxcdFRISVNfTU9EVUxFLFxcbm5ldC9zY2hlZC9hY3RfY3QuYzoxNzA5OlxcdC5hY3RcXHRcXHQ9XFx0dGNmX2N0X2FjdCxcXG5uZXQvc2NoZWQvYWN0X2N0LmM6MTcxMDpcXHQuZHVtcFxcdFxcdD1cXHR0Y2ZfY3RfZHVtcCxcXG5uZXQvc2NoZWQvYWN0X2N0LmM6MTcxMTpcXHQuaW5pdFxcdFxcdD1cXHR0Y2ZfY3RfaW5pdCxcXG5uZXQvc2NoZWQvYWN0X2N0LmM6MTcxMjpcXHQuY2xlYW51cFxcdD1cXHR0Y2ZfY3RfY2xlYW51cCxcXG5uZXQvc2NoZWQvYWN0X2N0LmMtMTcxMy1cXHQuc3RhdHNfdXBkYXRlXFx0PVxcdHRjZl9zdGF0c191cGRhdGUsXFxubmV0L3NjaGVkL2FjdF9jdC5jOjE3MTQ6XFx0LmdldF9maWxsX3NpemVcXHQ9XFx0dGNmX2N0X2dldF9maWxsX3NpemUsXFxubmV0L3NjaGVkL2FjdF9jdC5jOjE3MTU6XFx0Lm9mZmxvYWRfYWN0X3NldHVwID1cXHR0Y2ZfY3Rfb2ZmbG9hZF9hY3Rfc2V0dXAsXFxubmV0L3NjaGVkL2FjdF9jdC5jLTE3MTYtXFx0LnNpemVcXHRcXHQ9XFx0c2l6ZW9mKHN0cnVjdCB0Y2ZfY3QpLFxcbi0tXFxubmV0L3NjaGVkL2FjdF9jdC5jPTE3Mzk9c3RhdGljIGludCBfX2luaXQgY3RfaW5pdF9tb2R1bGUodm9pZClcXG4tLVxcbm5ldC9zY2hlZC9hY3RfY3QuYy0xNzQ2LVxcbm5ldC9zY2hlZC9hY3RfY3QuYzoxNzQ3OlxcdGVyciA9IHRjZl9jdF9mbG93X3RhYmxlc19pbml0KCk7XFxubmV0L3NjaGVkL2FjdF9jdC5jLTE3NDgtXFx0aWYgKGVycilcXG4tLVxcbm5ldC9zY2hlZC9hY3RfY3QuYy0xNzU5LWVycl9yZWdpc3RlcjpcXG5uZXQvc2NoZWQvYWN0X2N0LmM6MTc2MDpcXHR0Y2ZfY3RfZmxvd190YWJsZXNfdW5pbml0KCk7XFxubmV0L3NjaGVkL2FjdF9jdC5jLTE3NjEtZXJyX3RibF9pbml0Olxcbi0tXFxubmV0L3NjaGVkL2FjdF9jdC5jPTE3NjY9c3RhdGljIHZvaWQgX19leGl0IGN0X2NsZWFudXBfbW9kdWxlKHZvaWQpXFxuLS1cXG5uZXQvc2NoZWQvYWN0X2N0LmMtMTc2OS1cXHR0Y2ZfdW5yZWdpc3Rlcl9hY3Rpb24oXFx1MDAyNmFjdF9jdF9vcHMsIFxcdTAwMjZjdF9uZXRfb3BzKTtcXG5uZXQvc2NoZWQvYWN0X2N0LmM6MTc3MDpcXHR0Y2ZfY3RfZmxvd190YWJsZXNfdW5pbml0KCk7XFxubmV0L3NjaGVkL2FjdF9jdC5jLTE3NzEtXFx0ZGVzdHJveV93b3JrcXVldWUoYWN0X2N0X3dxKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDlUMDg6Mzk6NDAuMTcwNjEyODA2WiIsIlNlcSI6MjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjQyNTc1ODc1NTMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQW5hbHlzaXMgb2YgQ29ubmVjdGlvbiBUcmFja2luZyBDb25maWd1cmF0aW9uKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duIHN5c3RlbWF0aWNhbGx5LiBGaXJzdCwgSSBuZWVkIHRvIGNvbmZpcm0gdGhlIGtleSBzeW1ib2xzIHJlbGF0ZWQgdG8gY29ubmVjdGlvbiB0cmFja2luZy4gSSd2ZSBmbGFnZ2VkIHRoZXNlIGZ1bmN0aW9ucyBhcyBwb3RlbnRpYWxseSBpbnRlcmVzdGluZzogYHRjZl9jdF9mbG93X3RhYmxlX2dldGAsIGB0Y2ZfY3RfaW5pdGAsIGB0Y2ZfY3RfYWN0YCwgYW5kIGBuZl9mbG93X3RhYmxlX2luaXRgLiBUaGVzZSBhcHBlYXIgdG8gYmUgdGhlIGNvcmUga2VybmVsIGZ1bmN0aW9ucyBJJ20gaW50ZXJlc3RlZCBpbiB0ZXN0aW5nLlxuXG5OZXh0LCBJIG5lZWQgdG8gZW5zdXJlIGFsbCB0aGUgcmVsZXZhbnQgY29uZmlndXJhdGlvbiBvcHRpb25zIGFyZSBlbmFibGVkIHRvIGZ1bGx5IGV4ZXJjaXNlIHRoaXMgZnVuY3Rpb25hbGl0eS4gSSBzZWUgYSBsaXN0IG9mIGxpa2VseSBjYW5kaWRhdGVzOiBgTkVUX0FDVF9DVGAsIGBORVRfQ0xTX0FDVGAsIGBORl9DT05OVFJBQ0tgLCBhbmQgYE5GX0ZMT1dfVEFCTEVgLiBJdCdzIGEgZ29vZCBzdGFydGluZyBwb2ludCwgYnV0IEkgbmVlZCB0byBiZSBzdXJlLlxuXG5EaWdnaW5nIGludG8gdGhlIGBuZXQvc2NoZWQvS2NvbmZpZ2AgZmlsZSBpcyBjcnVjaWFsIGhlcmUuIFRoZSBkZWZpbml0aW9uIG9mIGBORVRfQUNUX0NUYCBpcyBwYXJ0aWN1bGFybHkgcmV2ZWFsaW5nLiBJdCB0ZWxscyBtZSB0aGF0IGBORVRfQUNUX0NUYCBkZXBlbmRzIG9uIGBORVRfQ0xTX0FDVGAsIGBORl9DT05OVFJBQ0tgLCBhbmQgYE5GX0ZMT1dfVEFCTEVgLCBhbmQgaXQgb3B0aW9uYWxseSBzZWxlY3RzIGBORl9OQVRfT1ZTYCBpZiBgTkZfTkFUYCBpcyBhbHNvIGVuYWJsZWQuIFRoZSBkZXBlbmRlbmN5IG9uIGBORl9GTE9XX1RBQkxFYCBpcyBwYXJ0aWN1bGFybHkgaW1wb3J0YW50LCBjb25maXJtaW5nIG15IGluaXRpYWwgYXNzZXNzbWVudC4gRnVydGhlcm1vcmUsIGl0ICpzZWxlY3RzKiBgTkZfQ09OTlRSQUNLX09WU2AsIHNvIEkgbmVlZCB0byBiZSBhd2FyZSBvZiB0aGUgaW1wbGljYXRpb25zLiBUaGlzIG1ha2VzIG1lIGNvbmZpZGVudCB0aGF0IGVuYWJsaW5nIGFsbCB0aGVzZSBjb25maWdzIOKAkyBgTkVUX0FDVF9DVGAsIGBORVRfQ0xTX0FDVGAsIGBORl9DT05OVFJBQ0tgLCBhbmQgYE5GX0ZMT1dfVEFCTEVgIOKAkyBzaG91bGQgZW5zdXJlIHRoYXQgZXZlcnl0aGluZyBpcyBjb21waWxlZCBhbmQgYXZhaWxhYmxlIGZvciB0ZXN0aW5nLlxuXG5UbyBiZSBjb21wbGV0ZWx5IHRob3JvdWdoLCBJJ20gZ29pbmcgdG8gZG91YmxlLWNoZWNrIG15IGZpbmRpbmdzLiBJJ20gY29uZmlybWluZyB0aGF0IHRoaXMgY29tcG9uZW50IGlzIGluZGVlZCBmbGFnZ2VkIGFzIFwiV29ydGhGdXp6aW5nXCIgYW5kIHJlLXZlcmlmeWluZyBteSBsaXN0cyBvZiBgRW5hYmxlQ29uZmlnc2AgYW5kIGBGb2N1c1N5bWJvbHNgLiBGaW5hbGx5LCBJJ20gZ29pbmcgdG8gaW5jbHVkZSBhIGNvbmNpc2UgcmVhc29uaW5nIHN0YXRlbWVudCB0aGF0IHN1bW1hcml6ZXMgbXkgZmluZGluZ3MsIGJlY2F1c2UgY2xlYXIgZG9jdW1lbnRhdGlvbiBpcyBhbHdheXMgaW1wb3J0YW50LiBUaGlzIHNlZW1zIHNvbGlkLCBzbyBJJ20gcmVhZHkgdG8gbW92ZSBmb3J3YXJkLiBUaW1lIHRvIGNhbGwgYHNldC1yZXN1bHRzYC5cblxuXG4iLCJJbnB1dFRva2VucyI6MzY4MDEsIk91dHB1dFRva2VucyI6MTg2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzcxLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA5VDA4OjM5OjQ0LjQyODIwMzc3OVoiLCJTZXEiOjI2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEzMTY5MTY5OCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiTkVUX0FDVF9DVFwiLFxuICAgIFwiTkVUX0NMU19BQ1RcIixcbiAgICBcIk5GX0NPTk5UUkFDS1wiLFxuICAgIFwiTkZfRkxPV19UQUJMRVwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInRjZl9jdF9mbG93X3RhYmxlX2dldFwiLFxuICAgIFwidGNmX2N0X2luaXRcIixcbiAgICBcInRjZl9jdF9hY3RcIixcbiAgICBcIm5mX2Zsb3dfdGFibGVfaW5pdFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGZpeGVzIHRoZSBpbml0aWFsaXphdGlvbiBvcmRlciBpbiB0Y2ZfY3RfZmxvd190YWJsZV9nZXQoKSBieSBzZXR0aW5nIHRoZSBuZXRucyBwb2ludGVyICh3cml0ZV9wbmV0KSBiZWZvcmUgY2FsbGluZyBuZl9mbG93X3RhYmxlX2luaXQoKSwgcHJldmVudGluZyBwb3RlbnRpYWwgcmFjZXMgb3IgdW5pbml0aWFsaXplZCBuZXRucyBhY2Nlc3MgZHVyaW5nIGZsb3cgdGFibGUgaW5pdGlhbGl6YXRpb24uIFRoZSBjb2RlIGlzIHBhcnQgb2YgdGhlIFRDIGNvbm5lY3Rpb24gdHJhY2tpbmcgYWN0aW9uIChhY3RfY3QpIGFuZCBpcyByZWFjaGFibGUgdmlhIHJ0bmV0bGluayB0YyBhY3Rpb24gY29tbWFuZHMgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIk5FVF9BQ1RfQ1RcIixcbiAgICBcIk5FVF9DTFNfQUNUXCIsXG4gICAgXCJORl9DT05OVFJBQ0tcIixcbiAgICBcIk5GX0ZMT1dfVEFCTEVcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJ0Y2ZfY3RfZmxvd190YWJsZV9nZXRcIixcbiAgICBcInRjZl9jdF9pbml0XCIsXG4gICAgXCJ0Y2ZfY3RfYWN0XCIsXG4gICAgXCJuZl9mbG93X3RhYmxlX2luaXRcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBmaXhlcyB0aGUgaW5pdGlhbGl6YXRpb24gb3JkZXIgaW4gdGNmX2N0X2Zsb3dfdGFibGVfZ2V0KCkgYnkgc2V0dGluZyB0aGUgbmV0bnMgcG9pbnRlciAod3JpdGVfcG5ldCkgYmVmb3JlIGNhbGxpbmcgbmZfZmxvd190YWJsZV9pbml0KCksIHByZXZlbnRpbmcgcG90ZW50aWFsIHJhY2VzIG9yIHVuaW5pdGlhbGl6ZWQgbmV0bnMgYWNjZXNzIGR1cmluZyBmbG93IHRhYmxlIGluaXRpYWxpemF0aW9uLiBUaGUgY29kZSBpcyBwYXJ0IG9mIHRoZSBUQyBjb25uZWN0aW9uIHRyYWNraW5nIGFjdGlvbiAoYWN0X2N0KSBhbmQgaXMgcmVhY2hhYmxlIHZpYSBydG5ldGxpbmsgdGMgYWN0aW9uIGNvbW1hbmRzIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkIGVudmlyb25tZW50cy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDlUMDg6Mzk6NDQuNTU5OTAzMDg3WiIsIlNlcSI6MjcsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoiSWYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozNzU0MzE4NzY1NiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA5VDA4OjM5OjQ0LjU2MDM3MTYzN1oiLCJTZXEiOjI4LCJOZXN0aW5nIjoyLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJjb3JlIiwiRHVyYXRpb24iOjM3NTQyNzEzMzg2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCByZW9yZGVycyB0aGUgaW5pdGlhbGl6YXRpb24gb2YgdGhlIGZsb3cgdGFibGUncyBuZXR3b3JrIG5hbWVzcGFjZSBwb2ludGVyIChgd3JpdGVfcG5ldChcXHUwMDI2Y3RfZnQtXFx1MDAzZW5mX2Z0Lm5ldCwgbmV0KWApIHNvIHRoYXQgaXQgb2NjdXJzIHByaW9yIHRvIGNhbGxpbmcgYG5mX2Zsb3dfdGFibGVfaW5pdChcXHUwMDI2Y3RfZnQtXFx1MDAzZW5mX2Z0KWAuXFxuXFxuVGhlIGVuY2xvc2luZyBgc3RydWN0IHRjZl9jdF9mbG93X3RhYmxlYCAoYGN0X2Z0YCkgaXMgYWxsb2NhdGVkIHZpYSBga3phbGxvY19vYmpgLCBlbnN1cmluZyBhbGwgZmllbGRzIGFuZCBwYWRkaW5nIGFyZSB6ZXJvLWluaXRpYWxpemVkLiBQcmlvciB0byB0aGUgZml4LCBhY2Nlc3NpbmcgYG5mX2Z0Lm5ldGAgYmVmb3JlIGB3cml0ZV9wbmV0YCB3b3VsZCByZWFkIGEgemVyb2VkL05VTEwgcG9pbnRlciAod2hpY2ggd291bGQgbWFuaWZlc3QgYXMgYSBOVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2Ugb3IgbG9naWNhbCBlcnJvciwgY2F1Z2h0IGJ5IHN0YW5kYXJkIGNyYXNoIGhhbmRsZXJzIGFuZCBLQVNBTiksIHJhdGhlciB0aGFuIHVuaW5pdGlhbGl6ZWQgbWVtb3J5Llxcblxcbk5vIHVuaW5pdGlhbGl6ZWQgc3RhY2sgb3IgaGVhcCBtZW1vcnkgaXMgaW50cm9kdWNlZCBvciBleHBvc2VkLCBubyB1bmluaXRpYWxpemVkIGZpZWxkcyBhcmUgcmVhZCBvciBjb3BpZWQgdG8gdXNlcnNwYWNlLCBhbmQgbm8gYnVmZmVyIGJvdW5kcyBvciBsZW5ndGhzIGFyZSBhZmZlY3RlZC4gSGVuY2UsIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIGlzIG5vdCBuZWVkZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5XG5lcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZFxuZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKVxuZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuXG5cbkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOlxuLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlXG4gIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTlxuICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQXG4gIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuXG4tIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLFxuICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuXG5cblJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sXG5MT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLlxuQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWVxuc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3NcbnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uXG5cbkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0XG51bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZixcbmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5c1xudGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmdcbnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbFxuZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLFxuY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuXG5cblNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczpcbjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiXG4gICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkc1xuICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC5cbjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXNcbiAgIG9yIHN0cnVjdCBmaWVsZHMuXG4zLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzXG4gICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLlxuNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3NcbiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy5cblxuU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6XG4tIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyXG4gIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodFxuICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuXG4tIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkXG4gIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC5cbi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLlxuXG5Vc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlXG5kZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiVGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjRcblxuRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgODk0YjkxYzM4NDRjOWY5NWQ3MTNiYmUxNTMwZjc0MDliNzI1YTNiYlxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBXZWQgU2VwIDkgMDg6Mzg6MzQgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9uZXQvc2NoZWQvYWN0X2N0LmMgYi9uZXQvc2NoZWQvYWN0X2N0LmNcbmluZGV4IDkwODBjYjM4NmMxNjkuLjZiZDE5ZGI2OGQ5NzEgMTAwNjQ0XG4tLS0gYS9uZXQvc2NoZWQvYWN0X2N0LmNcbisrKyBiL25ldC9zY2hlZC9hY3RfY3QuY1xuQEAgLTM0OSwxMCArMzQ5LDEwIEBAIHN0YXRpYyBpbnQgdGNmX2N0X2Zsb3dfdGFibGVfZ2V0KHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHRjZl9jdF9wYXJhbXMgKnBhcmFtcylcbiBcdGN0X2Z0LVx1MDAzZW5mX2Z0LnR5cGUgPSBcdTAwMjZmbG93dGFibGVfY3Q7XG4gXHRjdF9mdC1cdTAwM2VuZl9mdC5mbGFncyB8PSBORl9GTE9XVEFCTEVfSFdfT0ZGTE9BRCB8XG4gXHRcdFx0ICAgICAgTkZfRkxPV1RBQkxFX0NPVU5URVI7XG4rXHR3cml0ZV9wbmV0KFx1MDAyNmN0X2Z0LVx1MDAzZW5mX2Z0Lm5ldCwgbmV0KTtcbiBcdGVyciA9IG5mX2Zsb3dfdGFibGVfaW5pdChcdTAwMjZjdF9mdC1cdTAwM2VuZl9mdCk7XG4gXHRpZiAoZXJyKVxuIFx0XHRnb3RvIGVycl9pbml0O1xuLVx0d3JpdGVfcG5ldChcdTAwMjZjdF9mdC1cdTAwM2VuZl9mdC5uZXQsIG5ldCk7XG4gXG4gXHRfX21vZHVsZV9nZXQoVEhJU19NT0RVTEUpO1xuIG91dF91bmxvY2s6XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOVQwODozOTo0NC41NjAzNzM5NjdaIiwiU2VxIjoyOSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MTQ5MDg5MTYxNDgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqS01TQU4gRnV6emluZyBFdmFsdWF0aW9uIC0gQWN0X0NUIFBhdGNoKipcblxuQWxyaWdodCwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBNeSBnb2FsIGlzIHRvIGRldGVybWluZSBpZiB0aGlzIGBhY3RfY3QuY2AgcGF0Y2ggd2FycmFudHMgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uLCBvciBpZiB0aGUgc3RhbmRhcmQgS0FTQU4vTE9DS0RFUCBjaGVja3Mgc3VmZmljZS4gVGhpcyBpcyBhIHN0YW5kYXJkIGJlbmlnbi9kZWZlbnNpdmUga2VybmVsIHNhbml0aXplciBhc3Nlc3NtZW50LCBhIHR5cGljYWwgUUEgdGFzaywgc28gbGV0J3Mga2VlcCBpdCBzaW1wbGUuIFRoZSBzZWN1cml0eSBndWlkZWxpbmVzIGFyZSBjbGVhcjogYW5hbHl6ZSB0aGUgcGF0Y2gsIGFzc2VzcyB0aGUgY29udGV4dCwgYW5kIHV0aWxpemUgdGhlIHByb3ZpZGVkIHRvb2xzIGlmIG5lZWRlZC5cblxuRmlyc3QsIGxldCdzIGV4YW1pbmUgdGhlIGNvZGUuIFRoaXMgZGlmZiBzZWVtcyByZWxhdGl2ZWx5IHN0cmFpZ2h0Zm9yd2FyZC4gSXQncyBhIHJlb3JkZXJpbmcgb2YgdGhlIGB3cml0ZV9wbmV0YCBjYWxsIGFyb3VuZCBgbmZfZmxvd190YWJsZV9pbml0YC4gVGhlIG9yaWdpbmFsIGNvZGUgaGFkIGB3cml0ZV9wbmV0YCAqYWZ0ZXIqIGEgcG90ZW50aWFsIGZhaWx1cmUuIFRoZSBjaGFuZ2VkIGNvZGUgbW92ZXMgdGhlIGNhbGwgKmJlZm9yZSogaW5pdGlhbGl6YXRpb24uIEl0J3MgaW1wb3J0YW50IHRvIHVuZGVyc3RhbmQgKndoeSogdGhpcyBjaGFuZ2Ugd2FzIG1hZGUuXG5cbkkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQgYG5mX2Zsb3dfdGFibGVfaW5pdGAgYWN0dWFsbHkgZG9lcyBhbmQgd2hhdCBgZXJyX2luaXRgIGVudGFpbHMuIEp1bXBpbmcgdG8gYG5ldC9zY2hlZC9hY3RfY3QuY2AgYW5kIGxvb2tpbmcgYXJvdW5kIGxpbmUgMzQ5IGlzIHRoZSBuZXh0IHN0ZXAgdG8gZ2FpbiBhIGJldHRlciB1bmRlcnN0YW5kaW5nIG9mIHBvdGVudGlhbCByaXNrcyBhc3NvY2lhdGVkIHdpdGggdGhpcyBjaGFuZ2UuIFRoZSBnb2FsIGlzIHRvIHNlZSBpZiBhbnkgdW5pbml0aWFsaXplZCBkYXRhIG9yIHJhY2UgY29uZGl0aW9ucyBhcmUgZXhwb3NlZCBieSB0aGlzIGNvZGUgcmVvcmRlcmluZy4gVGhlbiBJIHdpbGwgZGV0ZXJtaW5lIHRoZSByaXNrIG9mIEtNU0FOIGJhc2VkIG9uIHRoYXQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIxNTMsIk91dHB1dFRva2VucyI6MzcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0MjMsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOVQwODozOTo1OS40NjkyOTI0NzRaIiwiU2VxIjozMCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTMxMjEwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9zY2hlZC9hY3RfY3QuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAzMzAsXG4gIFwiTGluZUNvdW50XCI6IDYwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAzMzA6XFx0XFx0bXV0ZXhfbG9jayhcXHUwMDI2em9uZXNfbXV0ZXgpO1xcbiAzMzE6XFx0XFx0cmN1X3JlYWRfbG9jaygpO1xcbiAzMzI6XFx0XFx0Y3RfZnQgPSByaGFzaHRhYmxlX2xvb2t1cChcXHUwMDI2em9uZXNfaHQsIFxcdTAwMjZrZXksIHpvbmVzX3BhcmFtcyk7XFxuIDMzMzpcXHRcXHRpZiAoY3RfZnQgXFx1MDAyNlxcdTAwMjYgcmVmY291bnRfaW5jX25vdF96ZXJvKFxcdTAwMjZjdF9mdC1cXHUwMDNlcmVmKSkge1xcbiAzMzQ6XFx0XFx0XFx0cmN1X3JlYWRfdW5sb2NrKCk7XFxuIDMzNTpcXHRcXHRcXHRnb3RvIG91dF91bmxvY2s7XFxuIDMzNjpcXHRcXHR9XFxuIDMzNzpcXHRcXHRyY3VfcmVhZF91bmxvY2soKTtcXG4gMzM4OlxcdFxcbiAzMzk6XFx0XFx0Y3RfZnQgPSBremFsbG9jX29iaigqY3RfZnQpO1xcbiAzNDA6XFx0XFx0aWYgKCFjdF9mdClcXG4gMzQxOlxcdFxcdFxcdGdvdG8gZXJyX2FsbG9jO1xcbiAzNDI6XFx0XFx0cmVmY291bnRfc2V0KFxcdTAwMjZjdF9mdC1cXHUwMDNlcmVmLCAxKTtcXG4gMzQzOlxcdFxcbiAzNDQ6XFx0XFx0Y3RfZnQtXFx1MDAzZWtleSA9IGtleTtcXG4gMzQ1OlxcdFxcdGVyciA9IHJoYXNodGFibGVfaW5zZXJ0X2Zhc3QoXFx1MDAyNnpvbmVzX2h0LCBcXHUwMDI2Y3RfZnQtXFx1MDAzZW5vZGUsIHpvbmVzX3BhcmFtcyk7XFxuIDM0NjpcXHRcXHRpZiAoZXJyKVxcbiAzNDc6XFx0XFx0XFx0Z290byBlcnJfaW5zZXJ0O1xcbiAzNDg6XFx0XFxuIDM0OTpcXHRcXHRjdF9mdC1cXHUwMDNlbmZfZnQudHlwZSA9IFxcdTAwMjZmbG93dGFibGVfY3Q7XFxuIDM1MDpcXHRcXHRjdF9mdC1cXHUwMDNlbmZfZnQuZmxhZ3MgfD0gTkZfRkxPV1RBQkxFX0hXX09GRkxPQUQgfFxcbiAzNTE6XFx0XFx0XFx0XFx0ICAgICAgTkZfRkxPV1RBQkxFX0NPVU5URVI7XFxuIDM1MjpcXHRcXHR3cml0ZV9wbmV0KFxcdTAwMjZjdF9mdC1cXHUwMDNlbmZfZnQubmV0LCBuZXQpO1xcbiAzNTM6XFx0XFx0ZXJyID0gbmZfZmxvd190YWJsZV9pbml0KFxcdTAwMjZjdF9mdC1cXHUwMDNlbmZfZnQpO1xcbiAzNTQ6XFx0XFx0aWYgKGVycilcXG4gMzU1OlxcdFxcdFxcdGdvdG8gZXJyX2luaXQ7XFxuIDM1NjpcXHRcXG4gMzU3OlxcdFxcdF9fbW9kdWxlX2dldChUSElTX01PRFVMRSk7XFxuIDM1ODpcXHRvdXRfdW5sb2NrOlxcbiAzNTk6XFx0XFx0cGFyYW1zLVxcdTAwM2VjdF9mdCA9IGN0X2Z0O1xcbiAzNjA6XFx0XFx0cGFyYW1zLVxcdTAwM2VuZl9mdCA9IFxcdTAwMjZjdF9mdC1cXHUwMDNlbmZfZnQ7XFxuIDM2MTpcXHRcXHRtdXRleF91bmxvY2soXFx1MDAyNnpvbmVzX211dGV4KTtcXG4gMzYyOlxcdFxcbiAzNjM6XFx0XFx0cmV0dXJuIDA7XFxuIDM2NDpcXHRcXG4gMzY1OlxcdGVycl9pbml0OlxcbiAzNjY6XFx0XFx0cmhhc2h0YWJsZV9yZW1vdmVfZmFzdChcXHUwMDI2em9uZXNfaHQsIFxcdTAwMjZjdF9mdC1cXHUwMDNlbm9kZSwgem9uZXNfcGFyYW1zKTtcXG4gMzY3OlxcdGVycl9pbnNlcnQ6XFxuIDM2ODpcXHRcXHRrZnJlZShjdF9mdCk7XFxuIDM2OTpcXHRlcnJfYWxsb2M6XFxuIDM3MDpcXHRcXHRtdXRleF91bmxvY2soXFx1MDAyNnpvbmVzX211dGV4KTtcXG4gMzcxOlxcdFxcdHJldHVybiBlcnI7XFxuIDM3MjpcXHR9XFxuIDM3MzpcXHRcXG4gMzc0OlxcdHN0YXRpYyB2b2lkIHRjZl9jdF9mbG93X3RhYmxlX2dldF9yZWYoc3RydWN0IHRjZl9jdF9mbG93X3RhYmxlICpjdF9mdClcXG4gMzc1OlxcdHtcXG4gMzc2OlxcdFxcdHJlZmNvdW50X2luYyhcXHUwMDI2Y3RfZnQtXFx1MDAzZXJlZik7XFxuIDM3NzpcXHR9XFxuIDM3ODpcXHRcXG4gMzc5OlxcdHN0YXRpYyB2b2lkIHRjZl9jdF9mbG93X3RhYmxlX2NsZWFudXBfd29yayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXFxuIDM4MDpcXHR7XFxuIDM4MTpcXHRcXHRzdHJ1Y3QgdGNmX2N0X2Zsb3dfdGFibGUgKmN0X2Z0O1xcbiAzODI6XFx0XFx0c3RydWN0IGZsb3dfYmxvY2sgKmJsb2NrO1xcbiAzODM6XFx0XFxuIDM4NDpcXHRcXHRjdF9mdCA9IGNvbnRhaW5lcl9vZih0b19yY3Vfd29yayh3b3JrKSwgc3RydWN0IHRjZl9jdF9mbG93X3RhYmxlLFxcbiAzODU6XFx0XFx0XFx0XFx0ICAgICByd29yayk7XFxuIDM4NjpcXHRcXHRuZl9mbG93X3RhYmxlX2ZyZWUoXFx1MDAyNmN0X2Z0LVxcdTAwM2VuZl9mdCk7XFxuIDM4NzpcXHRcXG4gMzg4OlxcdFxcdGJsb2NrID0gXFx1MDAyNmN0X2Z0LVxcdTAwM2VuZl9mdC5mbG93X2Jsb2NrO1xcbiAzODk6XFx0XFx0ZG93bl93cml0ZShcXHUwMDI2Y3RfZnQtXFx1MDAzZW5mX2Z0LmZsb3dfYmxvY2tfbG9jayk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA5VDA4OjM5OjU5LjQ2OTQyNTQzNVoiLCJTZXEiOjMxLCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjozNDc1MzQ4NDg1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYW5hbHlzaXMgb2Ygd2hhdCBJJ20gdGhpbmtpbmcsIHJlbmRlcmVkIGFzIGEgZmlyc3QtcGVyc29uIHN1bW1hcnksIGtlZXBpbmcgaW4gbWluZCBteSBmaWVsZCBleHBlcnRpc2U6XG5cbioqRGl2aW5nIGludG8gdGhlIEZsb3cgVGFibGUgSW5pdGlhbGl6YXRpb24qKlxuXG5Pa2F5LCB0aW1lIHRvIGdldCBteSBoYW5kcyBkaXJ0eSBhbmQgdW5kZXJzdGFuZCBob3cgdGhlIE5ldHdvcmsgRmlsdGVyIChuZikgZmxvdyB0YWJsZSBpcyBpbml0aWFsaXplZC4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMsIFwiTGV0J3MgdHJhY2sgZG93biB0aGUgYG5mX2Zsb3dfdGFibGVfaW5pdGAgZnVuY3Rpb24uXCIgSXQncyB0aGUgc3RhcnRpbmcgcG9pbnQgZm9yIHRoaXMgY3J1Y2lhbCBkYXRhIHN0cnVjdHVyZS4gSSdsbCByZWFjaCBmb3IgYGdyZXBgIChvciBteSBwcmVmZXJyZWQgc2VhcmNoIHRvb2wgaW4gdGhlIGtlcm5lbCBzb3VyY2UsIGRlcGVuZGluZyBvbiB0aGUgcHJvamVjdCBjb250ZXh0KSB0byBxdWlja2x5IGxvY2F0ZSBhbGwgaW5zdGFuY2VzIG9mIGBuZl9mbG93X3RhYmxlX2luaXRgLiBUaGF0IHNob3VsZCBnaXZlIG1lIHRoZSBlbnRyeSBwb2ludHMsIHVzYWdlcywgYW5kIGxpa2VseSB0aGUgY3JpdGljYWwgaW5jbHVkZSBmaWxlcyBJIG5lZWQgdG8gZ2V0IGEgaGlnaC1sZXZlbCB2aWV3IG9mIGhvdyB0aGlzIHRoaW5nIGdldHMgb2ZmIHRoZSBncm91bmQuIEZyb20gdGhlcmUsIEkgY2FuIGJlZ2luIHRvIHVucGFjayB0aGUgZGF0YSBzdHJ1Y3R1cmVzLCBtdXRleGVzLCBtZW1vcnkgYWxsb2NhdGlvbiBzdHJhdGVnaWVzLCBhbmQgb3ZlcmFsbCBsb2dpYyBpbnZvbHZlZCBpbiBzZXR0aW5nIHVwIHRoZSBmbG93IHRhYmxlIGZvciBlZmZpY2llbnQgcGFja2V0IHByb2Nlc3NpbmcuIFRoaXMgc2VhcmNoIGlzIG15IGZpcnN0LCBjcnVjaWFsIHN0ZXAgdG93YXJkIHVuZGVyc3RhbmRpbmcgdGhlIGZsb3cgdGFibGUncyBiZWhhdmlvci5cblxuXG4iLCJJbnB1dFRva2VucyI6Mzg1MiwiT3V0cHV0VG9rZW5zIjoyMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMwLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDlUMDg6NDA6MDIuOTQ0Nzc2NzdaIiwiU2VxIjozMiwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIzMDAzMjQ2NzgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibmZfZmxvd190YWJsZV9pbml0XCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImluY2x1ZGUvbmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlLmg9MzI2PXZvaWQgbmZfZmxvd190YWJsZV9jbGVhbnVwKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpO1xcbmluY2x1ZGUvbmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlLmgtMzI3LVxcbmluY2x1ZGUvbmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlLmg6MzI4OmludCBuZl9mbG93X3RhYmxlX2luaXQoc3RydWN0IG5mX2Zsb3d0YWJsZSAqZmxvd190YWJsZSk7XFxuaW5jbHVkZS9uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGUuaC0zMjktdm9pZCBuZl9mbG93X3RhYmxlX2ZyZWUoc3RydWN0IG5mX2Zsb3d0YWJsZSAqZmxvd190YWJsZSk7XFxuLS1cXG5pbmNsdWRlL25ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZS5oPTQwOD1zdGF0aWMgaW5saW5lIGJvb2wgbmZfZmxvd19wcHBvZV9wcm90byhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBfX2JlMTYgKmlubmVyX3Byb3RvKVxcbi0tXFxuaW5jbHVkZS9uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGUuaC00MjUtI2lmZGVmIENPTkZJR19ORl9GTE9XX1RBQkxFX1BST0NGU1xcbmluY2x1ZGUvbmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlLmg6NDI2OmludCBuZl9mbG93X3RhYmxlX2luaXRfcHJvYyhzdHJ1Y3QgbmV0ICpuZXQpO1xcbmluY2x1ZGUvbmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlLmgtNDI3LXZvaWQgbmZfZmxvd190YWJsZV9maW5pX3Byb2Moc3RydWN0IG5ldCAqbmV0KTtcXG5pbmNsdWRlL25ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZS5oLTQyOC0jZWxzZVxcbmluY2x1ZGUvbmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlLmg6NDI5OnN0YXRpYyBpbmxpbmUgaW50IG5mX2Zsb3dfdGFibGVfaW5pdF9wcm9jKHN0cnVjdCBuZXQgKm5ldClcXG5pbmNsdWRlL25ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZS5oLTQzMC17XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfY29yZS5jPTcwMj1FWFBPUlRfU1lNQk9MX0dQTChuZl9mbG93X2RuYXRfcG9ydCk7XFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2NvcmUuYy03MDMtXFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2NvcmUuYzo3MDQ6aW50IG5mX2Zsb3dfdGFibGVfaW5pdChzdHJ1Y3QgbmZfZmxvd3RhYmxlICpmbG93dGFibGUpXFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2NvcmUuYy03MDUte1xcbi0tXFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2NvcmUuYy03MjUtfVxcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9jb3JlLmM6NzI2OkVYUE9SVF9TWU1CT0xfR1BMKG5mX2Zsb3dfdGFibGVfaW5pdCk7XFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2NvcmUuYy03MjctXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfY29yZS5jPTc3Nz1FWFBPUlRfU1lNQk9MX0dQTChuZl9mbG93X3RhYmxlX2ZyZWUpO1xcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9jb3JlLmMtNzc4LVxcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9jb3JlLmM6Nzc5OnN0YXRpYyBpbnQgbmZfZmxvd190YWJsZV9pbml0X25ldChzdHJ1Y3QgbmV0ICpuZXQpXFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2NvcmUuYy03ODAte1xcbi0tXFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2NvcmUuYz03OTA9c3RhdGljIGludCBuZl9mbG93X3RhYmxlX3Blcm5ldF9pbml0KHN0cnVjdCBuZXQgKm5ldClcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9jb3JlLmMtNzkzLVxcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9jb3JlLmM6Nzk0OlxcdHJldCA9IG5mX2Zsb3dfdGFibGVfaW5pdF9uZXQobmV0KTtcXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfY29yZS5jLTc5NS1cXHRpZiAocmV0IFxcdTAwM2MgMClcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9jb3JlLmMtNzk3LVxcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9jb3JlLmM6Nzk4OlxcdHJldCA9IG5mX2Zsb3dfdGFibGVfaW5pdF9wcm9jKG5ldCk7XFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2NvcmUuYy03OTktXFx0aWYgKHJldCBcXHUwMDNjIDApXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfaW5ldC5jPTY4PXN0YXRpYyBzdHJ1Y3QgbmZfZmxvd3RhYmxlX3R5cGUgZmxvd3RhYmxlX2luZXQgPSB7XFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2luZXQuYy02OS1cXHQuZmFtaWx5XFx0XFx0PSBORlBST1RPX0lORVQsXFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2luZXQuYzo3MDpcXHQuaW5pdFxcdFxcdD0gbmZfZmxvd190YWJsZV9pbml0LFxcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9pbmV0LmMtNzEtXFx0LnNldHVwXFx0XFx0PSBuZl9mbG93X3RhYmxlX29mZmxvYWRfc2V0dXAsXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfaW5ldC5jPTc4PXN0YXRpYyBzdHJ1Y3QgbmZfZmxvd3RhYmxlX3R5cGUgZmxvd3RhYmxlX2lwdjQgPSB7XFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2luZXQuYy03OS1cXHQuZmFtaWx5XFx0XFx0PSBORlBST1RPX0lQVjQsXFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2luZXQuYzo4MDpcXHQuaW5pdFxcdFxcdD0gbmZfZmxvd190YWJsZV9pbml0LFxcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9pbmV0LmMtODEtXFx0LnNldHVwXFx0XFx0PSBuZl9mbG93X3RhYmxlX29mZmxvYWRfc2V0dXAsXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfaW5ldC5jPTg4PXN0YXRpYyBzdHJ1Y3QgbmZfZmxvd3RhYmxlX3R5cGUgZmxvd3RhYmxlX2lwdjYgPSB7XFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2luZXQuYy04OS1cXHQuZmFtaWx5XFx0XFx0PSBORlBST1RPX0lQVjYsXFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2luZXQuYzo5MDpcXHQuaW5pdFxcdFxcdD0gbmZfZmxvd190YWJsZV9pbml0LFxcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9pbmV0LmMtOTEtXFx0LnNldHVwXFx0XFx0PSBuZl9mbG93X3RhYmxlX29mZmxvYWRfc2V0dXAsXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfcHJvY2ZzLmM9NjA9c3RhdGljIGNvbnN0IHN0cnVjdCBzZXFfb3BlcmF0aW9ucyBuZl9mbG93X3RhYmxlX2NwdV9zZXFfb3BzID0ge1xcbi0tXFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX3Byb2Nmcy5jLTY2LVxcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9wcm9jZnMuYzo2NzppbnQgbmZfZmxvd190YWJsZV9pbml0X3Byb2Moc3RydWN0IG5ldCAqbmV0KVxcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9wcm9jZnMuYy02OC17XFxuLS1cXG5uZXQvc2NoZWQvYWN0X2N0LmM9MzI0PXN0YXRpYyBpbnQgdGNmX2N0X2Zsb3dfdGFibGVfZ2V0KHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHRjZl9jdF9wYXJhbXMgKnBhcmFtcylcXG4tLVxcbm5ldC9zY2hlZC9hY3RfY3QuYy0zNTItXFx0d3JpdGVfcG5ldChcXHUwMDI2Y3RfZnQtXFx1MDAzZW5mX2Z0Lm5ldCwgbmV0KTtcXG5uZXQvc2NoZWQvYWN0X2N0LmM6MzUzOlxcdGVyciA9IG5mX2Zsb3dfdGFibGVfaW5pdChcXHUwMDI2Y3RfZnQtXFx1MDAzZW5mX2Z0KTtcXG5uZXQvc2NoZWQvYWN0X2N0LmMtMzU0LVxcdGlmIChlcnIpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA5VDA4OjQwOjA1LjI0NTEwODUzOFoiLCJTZXEiOjMzLCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyNjQxNzc4NDI4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcy4gSGVyZSdzIG15IHRha2Ugb24gdGhvc2UgbGluZXMgb2YgY29kZSwgcHJlc2VudGVkIGFzIGlmIHRoZXkgd2VyZSBteSBvd24gaW50ZXJuYWwgdGhvdWdodCBwcm9jZXNzOlxuXG4qKkRpdmluZyBpbnRvIGBuZl9mbG93X3RhYmxlX2NvcmUuY2AqKlxuXG5BbHJpZ2h0LCB0aW1lIHRvIGNyYWNrIG9wZW4gYG5mX2Zsb3dfdGFibGVfY29yZS5jYC4gTGV0J3MgZ2V0IGRvd24gdG8gYnJhc3MgdGFja3MgYW5kIHVuZGVyc3RhbmQgaG93IHRoaXMgZmxvdyB0YWJsZSBpcyBhY3R1YWxseSB3b3JraW5nLiBJJ20gZXNwZWNpYWxseSBpbnRlcmVzdGVkIGluIHRoZSBjb3JlIG1lY2hhbmlzbXMuIEknbSBleHBlY3RpbmcgdG8gc2VlIHRoZSBjZW50cmFsIGRhdGEgc3RydWN0dXJlcyBmb3Igc3RvcmluZyBmbG93IGVudHJpZXMsIHRoZSBsb2dpYyBmb3IgYWRkaW5nIGFuZCByZW1vdmluZyB0aGVtLCBhbmQgaG93IGl0IGFsbCBpbnRlcmFjdHMgd2l0aCB0aGUgbmV0d29yayBzdGFjay4gSSBhbnRpY2lwYXRlIHRoZXJlIHdpbGwgYmUgYSBjbGVhciBlbXBoYXNpcyBvbiBwZXJmb3JtYW5jZSBjb25zaWRlcmF0aW9uczsgZ2l2ZW4gdGhlIG5hdHVyZSBvZiBhIGZsb3cgdGFibGUsIHNwZWVkIGFuZCBlZmZpY2llbnQgbG9va3VwcyBhcmUgZ29pbmcgdG8gYmUgcGFyYW1vdW50LiBJJ20gYWxzbyBiZXR0aW5nIHRoZXJlJ3MgYSBkZWxpY2F0ZSBiYWxhbmNlIGhlcmUgYmV0d2VlbiBtZW1vcnkgdXNhZ2UgYW5kIHNlYXJjaCBlZmZpY2llbmN5LiBJJ20ga2VlbiB0byBmaW5kIG91dCB0aGUgdHJhZGUtb2ZmcyBpbXBsZW1lbnRlZC4gSSdtIGFsc28gY3VyaW91cyB0byBzZWUgdGhlIGxvY2tpbmcgbWVjaGFuaXNtcyB1c2VkOyBjb25jdXJyZW5jeSBpc3N1ZXMgYXJlIGFsd2F5cyBhIGNvbmNlcm4gaW4gbmV0d29yayBwcm9ncmFtbWluZy4gSSdtIGdvaW5nIHRvIGxvb2sgZm9yIGFueSBjbGV2ZXIgb3B0aW1pemF0aW9ucywgcGVyaGFwcyBsZXZlcmFnaW5nIGhhcmR3YXJlIGFjY2VsZXJhdGlvbiBpZiBpdCdzIHRoZXJlLCBhbmQgZXJyb3IgaGFuZGxpbmcgYXMgaXQgaGFzIHRvIGJlIHJvYnVzdC4gTGV0J3Mgc2VlIHdoYXQncyBhY3R1YWxseSB1bmRlciB0aGUgaG9vZCFcblxuXG4iLCJJbnB1dFRva2VucyI6NTY3NCwiT3V0cHV0VG9rZW5zIjo0MiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA5VDA4OjQwOjA3Ljg4Njg5MDM2NloiLCJTZXEiOjM0LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMzA2MTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2NvcmUuY1wiLFxuICBcIkZpcnN0TGluZVwiOiA3MDAsXG4gIFwiTGluZUNvdW50XCI6IDQwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiA3MDA6XFx0XFx0bmZfZmxvd19uYXRfcG9ydChza2IsIHRob2ZmLCBwcm90b2NvbCwgcG9ydCwgbmV3X3BvcnQpO1xcbiA3MDE6XFx0fVxcbiA3MDI6XFx0RVhQT1JUX1NZTUJPTF9HUEwobmZfZmxvd19kbmF0X3BvcnQpO1xcbiA3MDM6XFx0XFxuIDcwNDpcXHRpbnQgbmZfZmxvd190YWJsZV9pbml0KHN0cnVjdCBuZl9mbG93dGFibGUgKmZsb3d0YWJsZSlcXG4gNzA1OlxcdHtcXG4gNzA2OlxcdFxcdGludCBlcnI7XFxuIDcwNzpcXHRcXG4gNzA4OlxcdFxcdElOSVRfREVMQVlFRF9XT1JLKFxcdTAwMjZmbG93dGFibGUtXFx1MDAzZWdjX3dvcmssIG5mX2Zsb3dfb2ZmbG9hZF93b3JrX2djKTtcXG4gNzA5OlxcdFxcdGZsb3dfYmxvY2tfaW5pdChcXHUwMDI2Zmxvd3RhYmxlLVxcdTAwM2VmbG93X2Jsb2NrKTtcXG4gNzEwOlxcdFxcdGluaXRfcndzZW0oXFx1MDAyNmZsb3d0YWJsZS1cXHUwMDNlZmxvd19ibG9ja19sb2NrKTtcXG4gNzExOlxcdFxcbiA3MTI6XFx0XFx0ZXJyID0gcmhhc2h0YWJsZV9pbml0KFxcdTAwMjZmbG93dGFibGUtXFx1MDAzZXJoYXNodGFibGUsXFxuIDcxMzpcXHRcXHRcXHRcXHQgICAgICBcXHUwMDI2bmZfZmxvd19vZmZsb2FkX3JoYXNoX3BhcmFtcyk7XFxuIDcxNDpcXHRcXHRpZiAoZXJyIFxcdTAwM2MgMClcXG4gNzE1OlxcdFxcdFxcdHJldHVybiBlcnI7XFxuIDcxNjpcXHRcXG4gNzE3OlxcdFxcdHF1ZXVlX2RlbGF5ZWRfd29yayhzeXN0ZW1fcG93ZXJfZWZmaWNpZW50X3dxLFxcbiA3MTg6XFx0XFx0XFx0XFx0ICAgXFx1MDAyNmZsb3d0YWJsZS1cXHUwMDNlZ2Nfd29yaywgSFopO1xcbiA3MTk6XFx0XFxuIDcyMDpcXHRcXHRtdXRleF9sb2NrKFxcdTAwMjZmbG93dGFibGVfbG9jayk7XFxuIDcyMTpcXHRcXHRsaXN0X2FkZChcXHUwMDI2Zmxvd3RhYmxlLVxcdTAwM2VsaXN0LCBcXHUwMDI2Zmxvd3RhYmxlcyk7XFxuIDcyMjpcXHRcXHRtdXRleF91bmxvY2soXFx1MDAyNmZsb3d0YWJsZV9sb2NrKTtcXG4gNzIzOlxcdFxcbiA3MjQ6XFx0XFx0cmV0dXJuIDA7XFxuIDcyNTpcXHR9XFxuIDcyNjpcXHRFWFBPUlRfU1lNQk9MX0dQTChuZl9mbG93X3RhYmxlX2luaXQpO1xcbiA3Mjc6XFx0XFxuIDcyODpcXHRzdGF0aWMgdm9pZCBuZl9mbG93X3RhYmxlX2RvX2NsZWFudXAoc3RydWN0IG5mX2Zsb3d0YWJsZSAqZmxvd190YWJsZSxcXG4gNzI5OlxcdFxcdFxcdFxcdFxcdCAgICAgc3RydWN0IGZsb3dfb2ZmbG9hZCAqZmxvdywgdm9pZCAqZGF0YSlcXG4gNzMwOlxcdHtcXG4gNzMxOlxcdFxcdHN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSBkYXRhO1xcbiA3MzI6XFx0XFxuIDczMzpcXHRcXHRpZiAoIWRldikge1xcbiA3MzQ6XFx0XFx0XFx0Zmxvd19vZmZsb2FkX3RlYXJkb3duKGZsb3cpO1xcbiA3MzU6XFx0XFx0XFx0cmV0dXJuO1xcbiA3MzY6XFx0XFx0fVxcbiA3Mzc6XFx0XFxuIDczODpcXHRcXHRpZiAobmV0X2VxKG5mX2N0X25ldChmbG93LVxcdTAwM2VjdCksIGRldl9uZXQoZGV2KSkgXFx1MDAyNlxcdTAwMjZcXG4gNzM5OlxcdFxcdCAgICAoZmxvdy1cXHUwMDNldHVwbGVoYXNoWzBdLnR1cGxlLmlpZmlkeCA9PSBkZXYtXFx1MDAzZWlmaW5kZXggfHxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDlUMDg6NDA6MDcuODg3MDIzMzE2WiIsIlNlcSI6MzUsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjI0NTMwNjgyNDYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIEkgd2VyZSBhbmFseXppbmcgdGhhdCBjb2RlOlxuXG4qKkRpdmluZyBpbnRvIHRoZSBGbG93dGFibGUgTG9naWMqKlxuXG5Pa2F5LCBzbyBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhpcyBjb2RlIGludGVyYWN0cyB3aXRoIHRoZSBmbG93dGFibGUuIE15IGZpcnN0IGluc3RpbmN0IGlzIHRvIGZpbmQgb3V0IGV4YWN0bHkgd2hlcmUgYHJlYWRfcG5ldChcdTAwMjZmbG93dGFibGUtXHUwMDNlbmV0KWAgb3IganVzdCB0aGUgZXhwcmVzc2lvbiBgZmxvd3RhYmxlLVx1MDAzZW5ldGAgYXJlIGJlaW5nICp1c2VkKi4gIFRoYXQncyBteSBzdGFydGluZyBwb2ludC4gSSBrbm93IHRoZXNlIG5ldHdvcmtpbmcgc3RydWN0dXJlcyBhcmUgY3J1Y2lhbCwgc28gdW5kZXJzdGFuZGluZyB0aGVpciB1c2FnZSBpcyBwYXJhbW91bnQuXG5cbkknbSBnb2luZyB0byBsZXZlcmFnZSBteSBleHBlcnQga25vd2xlZGdlIGFuZCB1c2UgYGdyZXBgIHRvIHF1aWNrbHkgc2VhcmNoIHRoZSBjb2RlYmFzZS4gSSdsbCBzZWFyY2ggZm9yIHZhcmlhdGlvbnMgb2YgdGhlIGtleSBzdHJ1Y3R1cmVzIGFuZCB2YXJpYWJsZXMgdG8gYmUgdGhvcm91Z2guIEknbGwgc3RhcnQgd2l0aCBgbmZfZmxvd3RhYmxlYCBpdHNlbGYsIHNpbmNlIHRoYXQncyBsaWtlbHkgdGhlIHBhcmVudCBzdHJ1Y3R1cmUuIEknbGwgYWxzbyBleHBsaWNpdGx5IGxvb2sgZm9yIGBmbG93dGFibGUtXHUwMDNlbmV0YCBhbmQgYGZsb3dfdGFibGUtXHUwMDNlbmV0YCwganVzdCBpbiBjYXNlIHRoZXJlIGFyZSB2YXJpYXRpb25zIG9yIGluY29uc2lzdGVuY2llcyBpbiBuYW1pbmcgY29udmVudGlvbnMgdGhhdCBhcmUgaW4gdGhlIGNvZGViYXNlLiBUaGlzIHNob3VsZCBnaXZlIG1lIGEgZ29vZCBvdmVydmlldyBvZiB0aGUgY29udGV4dHMgd2hlcmUgdGhpcyBuZXR3b3JrLXJlbGF0ZWQgZnVuY3Rpb25hbGl0eSBpcyBiZWluZyB1dGlsaXplZC4gSSBuZWVkIHRvIGdldCBhIGhpZ2ggbGV2ZWwgdmlldyBvZiB3aGVyZSB0aGlzIGBmbG93dGFibGVgIGFuZCBpdCdzIG5ldHdvcmsgaW50ZWdyYXRpb24gY29tZXMgaW50byBwbGF5IHdpdGhpbiB0aGUgbGFyZ2VyIHBpY3R1cmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjY2MjcsIk91dHB1dFRva2VucyI6MjksIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1MSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA5VDA4OjQwOjEwLjM0MDA5MzkxMloiLCJTZXEiOjM2LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6Mjc5OTg0MDE1MSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCIoZmxvd3RhYmxlfGZsb3dfdGFibGV8bmZfZnR8ZnQpLVxcdTAwM2VuZXRcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX29mZmxvYWQuYz04Njg9c3RhdGljIGludCBuZl9mbG93X29mZmxvYWRfYWxsb2MoY29uc3Qgc3RydWN0IGZsb3dfb2ZmbG9hZF93b3JrICpvZmZsb2FkLFxcbi0tXFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX29mZmxvYWQuYy04NzAte1xcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9vZmZsb2FkLmM6ODcxOlxcdHN0cnVjdCBuZXQgKm5ldCA9IHJlYWRfcG5ldChcXHUwMDI2b2ZmbG9hZC1cXHUwMDNlZmxvd3RhYmxlLVxcdTAwM2VuZXQpO1xcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9vZmZsb2FkLmMtODcyLVxcbi0tXFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX29mZmxvYWQuYz0xMDM3PXN0YXRpYyB2b2lkIGZsb3dfb2ZmbG9hZF93b3JrX2hhbmRsZXIoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxcbi0tXFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX29mZmxvYWQuYy0xMDQyLVxcdG9mZmxvYWQgPSBjb250YWluZXJfb2Yod29yaywgc3RydWN0IGZsb3dfb2ZmbG9hZF93b3JrLCB3b3JrKTtcXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfb2ZmbG9hZC5jOjEwNDM6XFx0bmV0ID0gcmVhZF9wbmV0KFxcdTAwMjZvZmZsb2FkLVxcdTAwM2VmbG93dGFibGUtXFx1MDAzZW5ldCk7XFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX29mZmxvYWQuYy0xMDQ0LVxcdHN3aXRjaCAob2ZmbG9hZC1cXHUwMDNlY21kKSB7XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfb2ZmbG9hZC5jPTEwNjU9c3RhdGljIHZvaWQgZmxvd19vZmZsb2FkX3F1ZXVlX3dvcmsoc3RydWN0IGZsb3dfb2ZmbG9hZF93b3JrICpvZmZsb2FkKVxcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9vZmZsb2FkLmMtMTA2Ni17XFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX29mZmxvYWQuYzoxMDY3OlxcdHN0cnVjdCBuZXQgKm5ldCA9IHJlYWRfcG5ldChcXHUwMDI2b2ZmbG9hZC1cXHUwMDNlZmxvd3RhYmxlLVxcdTAwM2VuZXQpO1xcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9vZmZsb2FkLmMtMTA2OC1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDlUMDg6NDA6MTMuMTM5OTQ1NTIzWiIsIlNlcSI6MzcsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjg5NjMxMDkxODAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQW5hbHlzaXMgb2YgdGhlIEZsb3cgVGFibGUgSW5pdGlhbGl6YXRpb24gQnVnKipcblxuT2theSwgc28gSSd2ZSBiZWVuIGxvb2tpbmcgYXQgdGhpcyBjb2RlIGFuZCBJJ3ZlIHplcm9lZCBpbiBvbiB0aGUgY3JpdGljYWwgaXNzdWU6IHRoZSBvcmRlciBvZiBvcGVyYXRpb25zIGluIHRoZSBmbG93IHRhYmxlIGluaXRpYWxpemF0aW9uLiBJdCBhcHBlYXJzIHRoYXQgYHdyaXRlX3BuZXQoXHUwMDI2Y3RfZnQtXHUwMDNlbmZfZnQubmV0LCBuZXQpO2Agd2FzIGJlaW5nIGNhbGxlZCAqYWZ0ZXIqIGBuZl9mbG93X3RhYmxlX2luaXQoXHUwMDI2Y3RfZnQtXHUwMDNlbmZfZnQpO2AuIFRoaXMgaXMgd2hlcmUgdGhlIHByb2JsZW0gbGllcy5cblxuSW4gYG5mX2Zsb3dfdGFibGVfaW5pdGAsIGEgYGdjX3dvcmtgIGlzIHF1ZXVlZCwgbGlrZWx5IHVzaW5nIGBxdWV1ZV9kZWxheWVkX3dvcmsoc3lzdGVtX3Bvd2VyX2VmZmljaWVudF93cSwgXHUwMDI2Zmxvd3RhYmxlLVx1MDAzZWdjX3dvcmssIEhaKWAuICBUaGUgY29uY2VybiBpcyB0aGF0IGlmIHRoZSBnYXJiYWdlIGNvbGxlY3Rpb24gd29yayAoYG5mX2Zsb3dfb2ZmbG9hZF93b3JrX2djYCkgb3Igb2ZmbG9hZCB3b3JrIHdlcmUgdG8gcnVuICpiZWZvcmUqIGB3cml0ZV9wbmV0YCBpcyBjYWxsZWQsIGl0IGNvdWxkIHBvdGVudGlhbGx5IGFjY2VzcyBgZmxvd3RhYmxlLVx1MDAzZW5ldGAgYmVmb3JlIGl0J3MgcHJvcGVybHkgaW5pdGlhbGl6ZWQuIEZ1cnRoZXJtb3JlLCBzaW5jZSBgY3RfZnQgPSBremFsbG9jX29iaigqY3RfZnQpO2AgaW5pdGlhbGl6ZXMgdGhlIG1lbW9yeSB3aXRoIHplcm8sIG1lYW5pbmcgYGN0X2Z0LVx1MDAzZW5mX2Z0Lm5ldGAgd291bGQgaGF2ZSBiZWVuIGluaXRpYWxpemVkIHRvIE5VTEwuXG5cblRoZSBjcnV4IG9mIHRoZSBtYXR0ZXIgaXMgdGhhdCB3aGVuIGBjdF9mdGAgZ2V0cyBhbGxvY2F0ZWQgdmlhIGBremFsbG9jX29iamAsIHRoZSBlbnRpcmUgc3RydWN0dXJlIGlzIHplcm9lZC4gVGhpcyBtZWFucyB0aGF0LCBkdWUgdG8gdGhlIGluaXRpYWwgcGxhY2VtZW50LCBiZWZvcmUgdGhlIGB3cml0ZV9wbmV0YCBjYWxsLCBgY3RfZnQtXHUwMDNlbmZfZnQubmV0YCBpcyAqbm90KiB1bmluaXRpYWxpemVkIG1lbW9yeSwgYnV0IHJhdGhlciBhICp6ZXJvZWQqIHBvaW50ZXIgKE5VTEwpLiBUaGlzIGlzIGNyaXRpY2FsLiBOb3csIGlmIGFueSBwYXJ0IG9mIHRoZSBgbmZfZmxvd190YWJsZV9pbml0YCBvciByZWxhdGVkIHdvcmsgKGdhcmJhZ2UgY29sbGVjdGlvbiwgb2ZmbG9hZCkgd2FzIHRvIGRlcmVmZXJlbmNlIGBmbG93dGFibGUtXHUwMDNlbmV0YCBiZWZvcmUgYHdyaXRlX3BuZXRgIHNldHMgaXQgdG8gYSB2YWxpZCBuZXQgbmFtZXNwYWNlLCBpdCB3b3VsZCBsZWFkIHRvIGEgTlVMTCBwb2ludGVyIGRlcmVmZXJlbmNlIG9yLCBtb3JlIGxpa2VseSwgYSB1c2Ugb2YgYW4gaW5jb3JyZWN0IG5ldHdvcmsgbmFtZXNwYWNlLiBUaGlzIGlzIE5PVCBhbiB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkOyBpdCdzIGEgemVyb2VkIG1lbW9yeSBhY2Nlc3MuXG5cbkkndmUgY29uZmlybWVkIHRoaXMgd2l0aCBhIGNsb3NlciBsb29rIGF0IHRoZSBga3phbGxvY19vYmpgIGNhbGwgd2l0aGluIGBhY3RfY3QuY2AuIExpbmUgMzM5IGNsZWFybHkgZGVtb25zdHJhdGVzIHRoYXQgYGt6YWxsb2Nfb2JqYCBwcm92aWRlcyB6ZXJvLWluaXRpYWxpemVkIGhlYXAgbWVtb3J5LiBUaGUgcm9vdCBjYXVzZSBvZiB0aGUgYnVnIHRoYXQgdGhlIGNvZGUgYWRkcmVzc2VzIGlzIHRoYXQgdGhlIG5ldG5zIHBvaW50ZXIgaW4gdGhlIGBmbG93dGFibGVgIGlzIG5vdCBpbml0aWFsaXplZCAqYmVmb3JlKiB0aGUgdGFibGUgaXMgaW5pdGlhbGl6ZWQsIGV4cG9zZWQgYW5kL29yIGdhcmJhZ2UgY29sbGVjdGlvbiB3b3JrIG1heSBiZWdpbi4gSWYgYSBwaWVjZSBvZiBjb2RlIHdlcmUgdG8gaW52b2tlIGByZWFkX3BuZXQoXHUwMDI2Zmxvd3RhYmxlLVx1MDAzZW5ldClgIGJlZm9yZSB0aGUgZml4LCBpdCB3b3VsZCBnZXQgYSBgTlVMTGAgcG9pbnRlci5cblxuTm93LCBsZXQncyBhZGRyZXNzIHRoZSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGFuZCBwb3RlbnRpYWwgdnVsbmVyYWJpbGl0aWVzOlxuXG4xLiAgKipLZXJuZWwgc3RydWN0dXJlcyB0byB1c2VyIHNwYWNlPyoqIE5vLCB0aGlzIGlzIGFsbCBpbnRlcm5hbCBrZXJuZWwgZmxvdyB0YWJsZSBpbml0aWFsaXphdGlvbi5cbjIuICAqKkNvbmRpdGlvbmFsIGxvZ2ljIG9uIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzPyoqIE5vLCBiZWNhdXNlIGBjdF9mdGAgaXMgYWxsb2NhdGVkIHdpdGggYGt6YWxsb2Nfb2JqYCDigJMgaXQncyB6ZXJvLWluaXRpYWxpemVkLlxuMy4gICoqQ29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2l0aCB1bmluaXRpYWxpemVkIGZpZWxkcz8qKiBBbGwgZmllbGRzIGFyZSB6ZXJvZWQgYnkgYGt6YWxsb2Nfb2JqYC5cbjQuICAqKkJvdW5kcyBjaGVja3MvbGVuZ3Rocz8qKiBOb25lIG9mIGNvbmNlcm4gaGVyZS5cblxuR2l2ZW4gdGhpcyB1bmRlcnN0YW5kaW5nLCBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzLCBwYXJ0aWN1bGFybHkgdGhvc2UgdGhhdCBpZGVudGlmeSBudWxsIGRlcmVmZXJlbmNlcywgYXJlIHF1aXRlIGFwcHJvcHJpYXRlLiBLZXJuZWwgTWVtb3J5IFNhbml0aXplciAoS01TQU4pLCBob3dldmVyLCBpcyAqbm90KiByZXF1aXJlZCwgYmVjYXVzZSB0aGVyZSBhcmUgbm8gYWN0dWFsIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzIG9yIGV4cG9zdXJlcy4gVGhlIHZ1bG5lcmFiaWxpdHkgcmV2b2x2ZXMgYXJvdW5kIHRoZSB6ZXJvaW5nIChOVUxMKSwgbm90IGdhcmJhZ2UgdmFsdWVzLlxuXG5UaGVyZWZvcmUsIHNldHRpbmcgdGhlIHJlc3VsdHMgcGFyYW1ldGVycyB3aXRoIGBOZWVkc0tNU0FOYDogZmFsc2UgaXMgdGhlIGNvcnJlY3QgY2FsbC4gYEtNU0FOUmVhc29uaW5nYCBjbGVhcmx5OlxuXG4tICAgYGN0X2Z0YCBpcyBpbml0aWFsaXplZCB2aWEgYGt6YWxsb2Nfb2JqYCwgd2hpY2ggemVyby1pbml0aWFsaXplcyB0aGUgZW50aXJlIG1lbW9yeSBjaHVuay5cbi0gICBUaGUgcGF0Y2ggcmVvcmRlcnMgYHdyaXRlX3BuZXQoXHUwMDI2Y3RfZnQtXHUwMDNlbmZfZnQubmV0LCBuZXQpYCBiZWZvcmUgYG5mX2Zsb3dfdGFibGVfaW5pdChcdTAwMjZjdF9mdC1cdTAwM2VuZl9mdClgLlxuLSAgIFdpdGhvdXQgdGhlIGZpeCwgYG5mX2Z0Lm5ldGAgd291bGQgY29udGFpbiBgTlVMTGAsIGxlYWRpbmcgdG8gYSBOVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2Ugb3IgYW4gYWNjZXNzIGlzc3VlIGR1ZSB0byB0aGUgd3JvbmcgbmV0d29yayBuYW1lc3BhY2UsIGJ1dCBub3QgYW4gdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZC5cbi0gICBUaGVyZSBhcmUgbm8gdW5pbml0aWFsaXplZCB2YXJpYWJsZXMsIGluZm8tbGVha3MsIG9yIHVuaW5pdGlhbGl6ZWQgcGFkZGluZy9maWVsZHMgY29waWVkIHRvIHVzZXIgc3BhY2UsIGFuZCBubyBjaGFuZ2VzIHRvIHRoZSBib3VuZHMgb2YgdGhlIGJ1ZmZlcnMuXG4tICAgVGhlcmVmb3JlLCBLTVNBTiBpcyB1bm5lY2Vzc2FyeS5cblxuVGltZSB0byBpbnZva2UgYHNldC1yZXN1bHRzYC5cblxuXG4iLCJJbnB1dFRva2VucyI6NzM4MCwiT3V0cHV0VG9rZW5zIjoyMjYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo4MTQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDlUMDg6NDA6MjIuMTAzMDU4NTIzWiIsIlNlcSI6MzgsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjQzNDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCByZW9yZGVycyB0aGUgaW5pdGlhbGl6YXRpb24gb2YgdGhlIGZsb3cgdGFibGUncyBuZXR3b3JrIG5hbWVzcGFjZSBwb2ludGVyIChgd3JpdGVfcG5ldChcXHUwMDI2Y3RfZnQtXFx1MDAzZW5mX2Z0Lm5ldCwgbmV0KWApIHNvIHRoYXQgaXQgb2NjdXJzIHByaW9yIHRvIGNhbGxpbmcgYG5mX2Zsb3dfdGFibGVfaW5pdChcXHUwMDI2Y3RfZnQtXFx1MDAzZW5mX2Z0KWAuXFxuXFxuVGhlIGVuY2xvc2luZyBgc3RydWN0IHRjZl9jdF9mbG93X3RhYmxlYCAoYGN0X2Z0YCkgaXMgYWxsb2NhdGVkIHZpYSBga3phbGxvY19vYmpgLCBlbnN1cmluZyBhbGwgZmllbGRzIGFuZCBwYWRkaW5nIGFyZSB6ZXJvLWluaXRpYWxpemVkLiBQcmlvciB0byB0aGUgZml4LCBhY2Nlc3NpbmcgYG5mX2Z0Lm5ldGAgYmVmb3JlIGB3cml0ZV9wbmV0YCB3b3VsZCByZWFkIGEgemVyb2VkL05VTEwgcG9pbnRlciAod2hpY2ggd291bGQgbWFuaWZlc3QgYXMgYSBOVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2Ugb3IgbG9naWNhbCBlcnJvciwgY2F1Z2h0IGJ5IHN0YW5kYXJkIGNyYXNoIGhhbmRsZXJzIGFuZCBLQVNBTiksIHJhdGhlciB0aGFuIHVuaW5pdGlhbGl6ZWQgbWVtb3J5Llxcblxcbk5vIHVuaW5pdGlhbGl6ZWQgc3RhY2sgb3IgaGVhcCBtZW1vcnkgaXMgaW50cm9kdWNlZCBvciBleHBvc2VkLCBubyB1bmluaXRpYWxpemVkIGZpZWxkcyBhcmUgcmVhZCBvciBjb3BpZWQgdG8gdXNlcnNwYWNlLCBhbmQgbm8gYnVmZmVyIGJvdW5kcyBvciBsZW5ndGhzIGFyZSBhZmZlY3RlZC4gSGVuY2UsIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIGlzIG5vdCBuZWVkZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggcmVvcmRlcnMgdGhlIGluaXRpYWxpemF0aW9uIG9mIHRoZSBmbG93IHRhYmxlJ3MgbmV0d29yayBuYW1lc3BhY2UgcG9pbnRlciAoYHdyaXRlX3BuZXQoXFx1MDAyNmN0X2Z0LVxcdTAwM2VuZl9mdC5uZXQsIG5ldClgKSBzbyB0aGF0IGl0IG9jY3VycyBwcmlvciB0byBjYWxsaW5nIGBuZl9mbG93X3RhYmxlX2luaXQoXFx1MDAyNmN0X2Z0LVxcdTAwM2VuZl9mdClgLlxcblxcblRoZSBlbmNsb3NpbmcgYHN0cnVjdCB0Y2ZfY3RfZmxvd190YWJsZWAgKGBjdF9mdGApIGlzIGFsbG9jYXRlZCB2aWEgYGt6YWxsb2Nfb2JqYCwgZW5zdXJpbmcgYWxsIGZpZWxkcyBhbmQgcGFkZGluZyBhcmUgemVyby1pbml0aWFsaXplZC4gUHJpb3IgdG8gdGhlIGZpeCwgYWNjZXNzaW5nIGBuZl9mdC5uZXRgIGJlZm9yZSBgd3JpdGVfcG5ldGAgd291bGQgcmVhZCBhIHplcm9lZC9OVUxMIHBvaW50ZXIgKHdoaWNoIHdvdWxkIG1hbmlmZXN0IGFzIGEgTlVMTCBwb2ludGVyIGRlcmVmZXJlbmNlIG9yIGxvZ2ljYWwgZXJyb3IsIGNhdWdodCBieSBzdGFuZGFyZCBjcmFzaCBoYW5kbGVycyBhbmQgS0FTQU4pLCByYXRoZXIgdGhhbiB1bmluaXRpYWxpemVkIG1lbW9yeS5cXG5cXG5ObyB1bmluaXRpYWxpemVkIHN0YWNrIG9yIGhlYXAgbWVtb3J5IGlzIGludHJvZHVjZWQgb3IgZXhwb3NlZCwgbm8gdW5pbml0aWFsaXplZCBmaWVsZHMgYXJlIHJlYWQgb3IgY29waWVkIHRvIHVzZXJzcGFjZSwgYW5kIG5vIGJ1ZmZlciBib3VuZHMgb3IgbGVuZ3RocyBhcmUgYWZmZWN0ZWQuIEhlbmNlLCBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBpcyBub3QgbmVlZGVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/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-workflowvd5jd[0].run-triage(0) Phase: Succeeded StartedAt: 2026-09-09 08:17:31 +0000 UTC FinishedAt: 2026-09-09 08:40:23 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "nf", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git", "commit_hash": "1b78070aaef63512688aebfbc82365ef9d6660f1", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "NET_ACT_CT", "NET_CLS_ACT", "NF_CONNTRACK", "NF_FLOW_TABLE" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "nf", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git", "commit_hash": "1b78070aaef63512688aebfbc82365ef9d6660f1", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "NET_ACT_CT", "NET_CLS_ACT", "NF_CONNTRACK", "NF_FLOW_TABLE" ], "series_id": "f9b031a6-1e69-4cb6-b486-01713405f2f9" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "tcf_ct_flow_table_get", "tcf_ct_init", "tcf_ct_act", "nf_flow_table_init" ], "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+CgkJCTx0ZD4yMDI2LzA5LzA5IDA4OjM4PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O05FVF9BQ1RfQ1QmIzM0OywKICAgICYjMzQ7TkVUX0NMU19BQ1QmIzM0OywKICAgICYjMzQ7TkZfQ09OTlRSQUNLJiMzNDssCiAgICAmIzM0O05GX0ZMT1dfVEFCTEUmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDt0Y2ZfY3RfZmxvd190YWJsZV9nZXQmIzM0OywKICAgICYjMzQ7dGNmX2N0X2luaXQmIzM0OywKICAgICYjMzQ7dGNmX2N0X2FjdCYjMzQ7LAogICAgJiMzNDtuZl9mbG93X3RhYmxlX2luaXQmIzM0OwogIF0sCiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCByZW9yZGVycyB0aGUgaW5pdGlhbGl6YXRpb24gb2YgdGhlIGZsb3cgdGFibGUmIzM5O3MgbmV0d29yayBuYW1lc3BhY2UgcG9pbnRlciAoYHdyaXRlX3BuZXQoXHUwMDI2Y3RfZnQtXHUwMDNlbmZfZnQubmV0LCBuZXQpYCkgc28gdGhhdCBpdCBvY2N1cnMgcHJpb3IgdG8gY2FsbGluZyBgbmZfZmxvd190YWJsZV9pbml0KFx1MDAyNmN0X2Z0LVx1MDAzZW5mX2Z0KWAuXG5cblRoZSBlbmNsb3NpbmcgYHN0cnVjdCB0Y2ZfY3RfZmxvd190YWJsZWAgKGBjdF9mdGApIGlzIGFsbG9jYXRlZCB2aWEgYGt6YWxsb2Nfb2JqYCwgZW5zdXJpbmcgYWxsIGZpZWxkcyBhbmQgcGFkZGluZyBhcmUgemVyby1pbml0aWFsaXplZC4gUHJpb3IgdG8gdGhlIGZpeCwgYWNjZXNzaW5nIGBuZl9mdC5uZXRgIGJlZm9yZSBgd3JpdGVfcG5ldGAgd291bGQgcmVhZCBhIHplcm9lZC9OVUxMIHBvaW50ZXIgKHdoaWNoIHdvdWxkIG1hbmlmZXN0IGFzIGEgTlVMTCBwb2ludGVyIGRlcmVmZXJlbmNlIG9yIGxvZ2ljYWwgZXJyb3IsIGNhdWdodCBieSBzdGFuZGFyZCBjcmFzaCBoYW5kbGVycyBhbmQgS0FTQU4pLCByYXRoZXIgdGhhbiB1bmluaXRpYWxpemVkIG1lbW9yeS5cblxuTm8gdW5pbml0aWFsaXplZCBzdGFjayBvciBoZWFwIG1lbW9yeSBpcyBpbnRyb2R1Y2VkIG9yIGV4cG9zZWQsIG5vIHVuaW5pdGlhbGl6ZWQgZmllbGRzIGFyZSByZWFkIG9yIGNvcGllZCB0byB1c2Vyc3BhY2UsIGFuZCBubyBidWZmZXIgYm91bmRzIG9yIGxlbmd0aHMgYXJlIGFmZmVjdGVkLiBIZW5jZSwgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgaXMgbm90IG5lZWRlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZml4ZXMgdGhlIGluaXRpYWxpemF0aW9uIG9yZGVyIGluIHRjZl9jdF9mbG93X3RhYmxlX2dldCgpIGJ5IHNldHRpbmcgdGhlIG5ldG5zIHBvaW50ZXIgKHdyaXRlX3BuZXQpIGJlZm9yZSBjYWxsaW5nIG5mX2Zsb3dfdGFibGVfaW5pdCgpLCBwcmV2ZW50aW5nIHBvdGVudGlhbCByYWNlcyBvciB1bmluaXRpYWxpemVkIG5ldG5zIGFjY2VzcyBkdXJpbmcgZmxvdyB0YWJsZSBpbml0aWFsaXphdGlvbi4gVGhlIGNvZGUgaXMgcGFydCBvZiB0aGUgVEMgY29ubmVjdGlvbiB0cmFja2luZyBhY3Rpb24gKGFjdF9jdCkgYW5kIGlzIHJlYWNoYWJsZSB2aWEgcnRuZXRsaW5rIHRjIGFjdGlvbiBjb21tYW5kcyBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDkgMDg6Mzg8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCA4OTRiOTFjMzg0NGM5Zjk1ZDcxM2JiZTE1MzBmNzQwOWI3MjVhM2JiXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFdlZCBTZXAgOSAwODozODozNCAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9uZXQvc2NoZWQvYWN0X2N0LmMgYi9uZXQvc2NoZWQvYWN0X2N0LmNcbmluZGV4IDkwODBjYjM4NmMxNjkuLjZiZDE5ZGI2OGQ5NzEgMTAwNjQ0XG4tLS0gYS9uZXQvc2NoZWQvYWN0X2N0LmNcbiYjNDM7JiM0MzsmIzQzOyBiL25ldC9zY2hlZC9hY3RfY3QuY1xuQEAgLTM0OSwxMCAmIzQzOzM0OSwxMCBAQCBzdGF0aWMgaW50IHRjZl9jdF9mbG93X3RhYmxlX2dldChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCB0Y2ZfY3RfcGFyYW1zICpwYXJhbXMpXG4gXHRjdF9mdC1cdTAwM2VuZl9mdC50eXBlID0gXHUwMDI2Zmxvd3RhYmxlX2N0O1xuIFx0Y3RfZnQtXHUwMDNlbmZfZnQuZmxhZ3MgfD0gTkZfRkxPV1RBQkxFX0hXX09GRkxPQUQgfFxuIFx0XHRcdCAgICAgIE5GX0ZMT1dUQUJMRV9DT1VOVEVSO1xuJiM0MztcdHdyaXRlX3BuZXQoXHUwMDI2Y3RfZnQtXHUwMDNlbmZfZnQubmV0LCBuZXQpO1xuIFx0ZXJyID0gbmZfZmxvd190YWJsZV9pbml0KFx1MDAyNmN0X2Z0LVx1MDAzZW5mX2Z0KTtcbiBcdGlmIChlcnIpXG4gXHRcdGdvdG8gZXJyX2luaXQ7XG4tXHR3cml0ZV9wbmV0KFx1MDAyNmN0X2Z0LVx1MDAzZW5mX2Z0Lm5ldCwgbmV0KTtcbiBcbiBcdF9fbW9kdWxlX2dldChUSElTX01PRFVMRSk7XG4gb3V0X3VubG9jazpcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOSAwODozODwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4xbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5jb3JlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtORVRfQUNUX0NUJiMzNDssCiAgICAmIzM0O05FVF9DTFNfQUNUJiMzNDssCiAgICAmIzM0O05GX0NPTk5UUkFDSyYjMzQ7LAogICAgJiMzNDtORl9GTE9XX1RBQkxFJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7dGNmX2N0X2Zsb3dfdGFibGVfZ2V0JiMzNDssCiAgICAmIzM0O3RjZl9jdF9pbml0JiMzNDssCiAgICAmIzM0O3RjZl9jdF9hY3QmIzM0OywKICAgICYjMzQ7bmZfZmxvd190YWJsZV9pbml0JiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGZpeGVzIHRoZSBpbml0aWFsaXphdGlvbiBvcmRlciBpbiB0Y2ZfY3RfZmxvd190YWJsZV9nZXQoKSBieSBzZXR0aW5nIHRoZSBuZXRucyBwb2ludGVyICh3cml0ZV9wbmV0KSBiZWZvcmUgY2FsbGluZyBuZl9mbG93X3RhYmxlX2luaXQoKSwgcHJldmVudGluZyBwb3RlbnRpYWwgcmFjZXMgb3IgdW5pbml0aWFsaXplZCBuZXRucyBhY2Nlc3MgZHVyaW5nIGZsb3cgdGFibGUgaW5pdGlhbGl6YXRpb24uIFRoZSBjb2RlIGlzIHBhcnQgb2YgdGhlIFRDIGNvbm5lY3Rpb24gdHJhY2tpbmcgYWN0aW9uIChhY3RfY3QpIGFuZCBpcyByZWFjaGFibGUgdmlhIHJ0bmV0bGluayB0YyBhY3Rpb24gY29tbWFuZHMgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lciBhbmQgc2VjdXJpdHkgZW5naW5lZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZXZhbHVhdGUgd2hldGhlciBpdCB3YXJyYW50cyBmdXp6aW5nIHdpdGggc3l6a2FsbGVyLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiBpbnRlcm5hbCBhc3N1bXB0aW9ucy4gWW91IG11c3QgYWN0aXZlbHkgdXNlIHlvdXIgY29kZSBhY2Nlc3MKdG9vbHMgdG8gaW5zcGVjdCB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlLCBjYWxsZXJzLCBhbmQgc3Vycm91bmRpbmcgY29udGV4dC4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjEuIENPUkUgVFJJQUdFIFBISUxPU09QSFkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KVGhlIGdvYWwgb2YgcGF0Y2ggZnV6emluZyBpcyB0byBkaXNjb3ZlciBjcmFzaGVzLCByZWdyZXNzaW9ucywgZXhwb3NlZCBsYXRlbnQgYnVncywKYW5kIG5ld2x5IHRyaWdnZXJlZCBhc3NlcnRpb25zIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIHNlcmllcy4KCi0gUkVBQ0hBQklMSVRZIElTIFRIRSBQUklNQVJZIEdBVEU6CiAgRnV6emluZyBjYW4gb25seSBkaXNjb3ZlciBidWdzIGluIGNvZGUgdGhhdCBjYW4gYWN0dWFsbHkgZXhlY3V0ZSBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZAogIGVudmlyb25tZW50cyAoR0NFIG9yIFFFTVUsIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBkZXZpY2VzIGxpa2UgVVNCIGdhZGdldHMsIG5ldGRldiwgdHVuL3RhcCkuCiAgSWYgdGhlIG1vZGlmaWVkIGNvZGUgaXMgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIChzZWUgU2VjdGlvbiAyKSwgaXQgTVVTVCBOT1QgYmUgZnV6emVkLAogIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciBpdCBhZGRzIGFzc2VydGlvbnMgb3IgY29tcGxleCBsb2dpYy4KCi0gRE8gTk9UIEJMSU5ETFkgVFJVU1QgJiMzNDtOTyBGVU5DVElPTkFMIENIQU5HRSYjMzQ7IChORkNJKSBPUiAmIzM0O1JFRkFDVE9SSU5HJiMzNDsgQ0xBSU1TOgogIFBhdGNoIGF1dGhvcnMgcm91dGluZWx5IGxhYmVsIGNoYW5nZXMgYXMgJiMzNDtjbGVhbnVwcyYjMzQ7LCAmIzM0O3JlZmFjdG9yaW5ncyYjMzQ7LCBvciBzdGF0ZQogICYjMzQ7Tm8gZnVuY3Rpb25hbCBjaGFuZ2UgaW50ZW5kZWQmIzM0Oy4gRG8gTk9UIHRha2UgdGhlc2UgY2xhaW1zIGF0IGZhY2UgdmFsdWUuCiAgQ29kZSByZWZhY3RvcmluZ3MgdGhhdCByZWFycmFuZ2UgbG9naWMsIGludHJvZHVjZSBoZWxwZXIgZnVuY3Rpb25zLCBvciBhbHRlciBzdGF0ZSBtYW5hZ2VtZW50CiAgaW4gY29yZSBzdWJzeXN0ZW1zIGZyZXF1ZW50bHkgaW50cm9kdWNlIHN1YnRsZSBzZW1hbnRpYyBzaGlmdHMgb3IgdW5jb3ZlciBsYXRlbnQga2VybmVsIGJ1Z3MuCiAgSWYgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSBpcyBtb2RpZmllZCBvciByZWZhY3RvcmVkLCBpdCBNVVNUIGJlIGZ1enplZC4KCi0gTkVXIE9SIE1PRElGSUVEIEFTU0VSVElPTlMgSU4gUkVBQ0hBQkxFIENPREUgTVVTVCBCRSBGVVpaRUQ6CiAgV2hlbiBhIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXMgcnVudGltZSBjaGVja3Mgb3IgYXNzZXJ0aW9ucyAoZS5nLiwgV0FSTl9PTiosIFZNX1dBUk5fT04qLAogIEJVR19PTiosIGxvY2tkZXBfYXNzZXJ0KikgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMsIGl0IGVuZm9yY2VzIG5ldyBvciBzdHJpY3RlciBpbnZhcmlhbnRzLgogIEV2ZW4gaWYgdGhlIGF1dGhvciBiZWxpZXZlcyB0aGUgaW52YXJpYW50IGFsd2F5cyBob2xkcywgZnV6emluZyBpcyBlc3NlbnRpYWwgdG8gdmVyaWZ5IHdoZXRoZXIKICBhbiB1bnVzdWFsIHNlcXVlbmNlIG9mIG9wZXJhdGlvbnMgY2FuIHZpb2xhdGUgaXQuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoyLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9ZmFsc2UgKE5FR0FUSVZFIENSSVRFUklBKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIE9OTFkgSUYgYWxsIG1vZGlmaWVkIGNvZGUgZmFsbHMgc3RyaWN0bHkgaW50byBvbmUgb3IgbW9yZSBvZiB0aGVzZSBjYXRlZ29yaWVzOgoKLSBOb24ta2VybmVsIGFuZCBub24tZXhlY3V0YWJsZSBjaGFuZ2VzOgogICogTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgY29tbWVudHMsIG9yIHNwZWxsaW5nIGZpeGVzLgogICogVXNlci1zcGFjZSBkaXJlY3Rvcmllcywgc2VsZi10ZXN0cywgc2FtcGxlcywgb3Igc2NyaXB0cyAoZS5nLiwgdG9vbHMvLCBzYW1wbGVzLywgc2NyaXB0cy8sIHVzci8pCiAgICB0aGF0IGRvIG5vdCBhZmZlY3QgdGhlIGNvbXBpbGVkIGtlcm5lbCBpbWFnZSAodm1saW51eCkgb3Iga2VybmVsIG1vZHVsZXMuCiAgKiBQdXJlbHkgZGVjb3JhdGl2ZSBsb2dnaW5nIChlLmcuLCBtZXNzYWdlIHN0cmluZ3MgaW4gcHJfZXJyLCBwcmludGssIGRldl9pbmZvKSBvciB0cmFjZXBvaW50cwogICAgdGhhdCBkbyBub3QgYWx0ZXIgY29udHJvbCBmbG93IG9yIGRhdGEgc3RydWN0dXJlcy4KICAqIEJ1aWxkIHN5c3RlbSBvciBLY29uZmlnIGNoYW5nZXMgdGhhdCBkbyBub3QgYWx0ZXIgY29tcGlsZWQgQyBsb2dpYy4KLSBTdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgaGFyZHdhcmU6CiAgKiBWZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2hlcywgU21hcnROSUNzLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgICBpb25pYywgYW1kZ3B1KSByZXF1aXJpbmcgcGh5c2ljYWwgQVNJQy9QQ0llIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIFVucmVhY2hhYmxlIGV4ZWN1dGlvbiBwYXRoczoKICAqIERyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKC5yZW1vdmUsIC5zaHV0ZG93biwgcGNpX3VucmVnaXN0ZXJfZHJpdmVyKSBleGVjdXRlZCBvbmx5IGR1cmluZwogICAgcGh5c2ljYWwgUENJIGhvdC11bnBsdWcgb3IgbWFudWFsIHN5c2ZzIGRyaXZlciB1bmJpbmRpbmcuCiAgKiBDb2RlIHBhdGhzIGV4Y2x1c2l2ZSB0byBhcmNoaXRlY3R1cmVzIG90aGVyIHRoYW4gdGhlIHRhcmdldCBhcmNoaXRlY3R1cmUuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQozLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9dHJ1ZSAoUE9TSVRJVkUgQ1JJVEVSSUEpCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZSB3aGVuZXZlciB0aGUgcGF0Y2ggdG91Y2hlcyByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlLCBpbmNsdWRpbmc6Ci0gQ29yZSBTdWJzeXN0ZW1zOgogICogQW55IGxvZ2ljIG1vZGlmaWNhdGlvbnMgaW4gbWVtb3J5IG1hbmFnZW1lbnQgKG1tLyksIHN5bmNocm9uaXphdGlvbi9sb2NraW5nIChrZXJuZWwvbG9ja2luZy8pLAogICAgQlBGLCBzY2hlZHVsZXIsIGNvcmUgbmV0d29ya2luZywgVkZTLCBvciBzeXNjYWxsIGhhbmRsaW5nLgotIFJlZmFjdG9yaW5ncyBhbmQgQ29kZSBDbGVhbnVwczoKICAqIEFueSByZXN0cnVjdHVyaW5nIG9mIHJlYWNoYWJsZSBkYXRhIHN0cnVjdHVyZXMsIGhlbHBlciBhYnN0cmFjdGlvbnMsIG9yIGFsZ29yaXRobSBmbG93cy4KLSBSdW50aW1lIEFzc2VydGlvbnMgYW5kIERlZmVuc2l2ZSBDaGVja3M6CiAgKiBBbnkgaW50cm9kdWN0aW9uIG9yIGFsdGVyYXRpb24gb2YgYXNzZXJ0aW9ucyAoV0FSTl9PTiosIFZNX1dBUk5fT04qLCBCVUdfT04qLCBldGMuKSBpbiByZWFjaGFibGUgcGF0aHMuCi0gUmVhY2hhYmxlIERyaXZlcnMgYW5kIFByb3RvY29sczoKICAqIERyaXZlcnMgYWNjZXNzaWJsZSB2aWEgdmlydHVhbCBidXNlcyAodmlydGlvLCBVU0IgZ2FkZ2V0LCBsb29wYmFjaywgbmV0bGluaywgYmluZGVyLCBzb2NrZXRzLCBldGMuKS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjQuIEVYVFJBQ1RJTkcgRm9jdXNTeW1ib2xzIChQUkVWRU5USU5HIERJTFVUSU9OKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpXaGVuIFdvcnRoRnV6emluZz10cnVlLCB5b3UgbXVzdCBleHRyYWN0IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgaW50byBGb2N1c1N5bWJvbHMgdG8gZ3VpZGUgdGhlIGZ1enplcjoKCi0gQVZPSUQgVUJJUVVJVE9VUyBMSUZFQ1lDTEUgSE9ULVBBVEhTOgogIERvIE5PVCBsaXN0IGdlbmVyaWMsIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhbGxlZCBieSBhbG1vc3QgZXZlcnkgcHJvZ3JhbSBpbiB0aGUgY29ycHVzCiAgKGluY2x1ZGluZywgYnV0IG5vdCBsaW1pdGVkIHRvOiBnZW5lcmFsIG1lbW9yeSBhbGxvY2F0b3JzIGFuZCBkZWFsbG9jYXRvcnMsIHBhZ2UgZmF1bHQKICBhbmQgdHJhcCBoYW5kbGVycywgb3IgY29yZSBzeW5jaHJvbml6YXRpb24gcHJpbWl0aXZlczsgdGhpcyBpcyBub3QgYW4gZXhoYXVzdGl2ZSBsaXN0KS4KICBMaXN0aW5nIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhdXNlcyB0aGUgZnV6emVyIHRvIGNsYXNzaWZ5IHRob3VzYW5kcyBvZiB1bnJlbGF0ZWQgdGVzdHMgYXMgJiMzNDtmb2N1c2VkJiMzNDssCiAgd2hpY2ggc2V2ZXJlbHkgZGlsdXRlcyBmdXp6aW5nIGVmZm9ydCBhd2F5IGZyb20gdGhlIGFjdHVhbCBjaGFuZ2VzLgoKLSBUQVJHRVQgU1BFQ0lGSUMgRkVBVFVSRSBMT0dJQyBBTkQgRU5UUllQT0lOVFM6CiAgTGlzdCBmdW5jdGlvbnMgdGhhdCBzcGVjaWZpY2FsbHkgaW1wbGVtZW50IHRoZSBsb2dpYyBiZWluZyBhZGRlZCBvciBhbHRlcmVkLCBvciBkaXJlY3QgQVBJIGVudHJ5cG9pbnRzCiAgZm9yIHRoZSBzdWJzeXN0ZW0gZmVhdHVyZSB1bmRlciByZXZpZXcuCgotIEhBTkRMSU5HIFNUQVRJQyBJTkxJTkUgRlVOQ1RJT05TIElOIEhFQURFUlMgKC5oKToKICBDb21waWxlci1pbmxpbmVkIHN0YXRpYyBmdW5jdGlvbnMgKHN1Y2ggYXMgc3RhdGljIGlubGluZXMgaW4gbW0vKi5oIG9yIGluY2x1ZGUvbGludXgvKi5oKSBsYWNrCiAgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcyBpbiB2bWxpbnV4IGFuZCBjYW5ub3QgYmUgdGFyZ2V0ZWQgZGlyZWN0bHkgYnkgc3ltYm9sIGNvdmVyYWdlIGZpbHRlcnMuCiAgSWYgdGhlIGNoYW5nZXMgYXJlIHByaW1hcmlseSBpbiBzdGF0aWMgaW5saW5lIGhlbHBlcnMsIGlkZW50aWZ5IG5vbi1zdGF0aWMsIGZlYXR1cmUtc3BlY2lmaWMgY2FsbGVyCiAgZnVuY3Rpb25zIGluIC5jIGZpbGVzIHRoYXQgZXhlcmNpc2UgdGhlbSAoYXZvaWRpbmcgdWJpcXVpdG91cyBsaWZlY3ljbGUgd3JhcHBlcnMpLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KNS4gSURFTlRJRllJTkcgRW5hYmxlQ29uZmlncwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IGNvbXBpbGUgYW5kIHJlYWNoIHRoZSBtb2RpZmllZCBjb2RlOgotIEluc3BlY3QgS2NvbmZpZyBmaWxlcyBhbmQgI2lmZGVmIGd1YXJkczsgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCi0gQ2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzIG5lZWRlZC4KLSBTdHJpcCBhbnkgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+VGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjQKCkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgODk0YjkxYzM4NDRjOWY5NWQ3MTNiYmUxNTMwZjc0MDliNzI1YTNiYgpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBXZWQgU2VwIDkgMDg6Mzg6MzQgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9uZXQvc2NoZWQvYWN0X2N0LmMgYi9uZXQvc2NoZWQvYWN0X2N0LmMKaW5kZXggOTA4MGNiMzg2YzE2OS4uNmJkMTlkYjY4ZDk3MSAxMDA2NDQKLS0tIGEvbmV0L3NjaGVkL2FjdF9jdC5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9zY2hlZC9hY3RfY3QuYwpAQCAtMzQ5LDEwICYjNDM7MzQ5LDEwIEBAIHN0YXRpYyBpbnQgdGNmX2N0X2Zsb3dfdGFibGVfZ2V0KHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHRjZl9jdF9wYXJhbXMgKnBhcmFtcykKIAljdF9mdC0mZ3Q7bmZfZnQudHlwZSA9ICZhbXA7Zmxvd3RhYmxlX2N0OwogCWN0X2Z0LSZndDtuZl9mdC5mbGFncyB8PSBORl9GTE9XVEFCTEVfSFdfT0ZGTE9BRCB8CiAJCQkgICAgICBORl9GTE9XVEFCTEVfQ09VTlRFUjsKJiM0MzsJd3JpdGVfcG5ldCgmYW1wO2N0X2Z0LSZndDtuZl9mdC5uZXQsIG5ldCk7CiAJZXJyID0gbmZfZmxvd190YWJsZV9pbml0KCZhbXA7Y3RfZnQtJmd0O25mX2Z0KTsKIAlpZiAoZXJyKQogCQlnb3RvIGVycl9pbml0OwotCXdyaXRlX3BuZXQoJmFtcDtjdF9mdC0mZ3Q7bmZfZnQubmV0LCBuZXQpOwogCiAJX19tb2R1bGVfZ2V0KFRISVNfTU9EVUxFKTsKIG91dF91bmxvY2s6CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA5IDA4OjM4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI5NDEKCQkJCQkJCW91dHB1dDogMzkKCQkJCQkJCXRob3VnaHRzOiA0MjgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIGEgS2VybmVsIFBhdGNoIGZvciBTeXprYWxsZXIgRnV6emluZyBQb3RlbnRpYWwqKgoKT2theSwgaGVyZSYjMzk7cyB0aGUgZGVhbC4gSSYjMzk7dmUgYmVlbiBhc2tlZCB0byByZXZpZXcgYSBMaW51eCBrZXJuZWwgcGF0Y2ggYW5kIGZpZ3VyZSBvdXQgaWYgaXQmIzM5O3MgYSBnb29kIGNhbmRpZGF0ZSBmb3IgZnV6emluZyB3aXRoIHN5emthbGxlci4gVGhlIHRhc2sgaXMgc3RyYWlnaHRmb3J3YXJkOiBpZGVudGlmeSByZWxldmFudCBzeW1ib2xzIGFuZCBkZXRlcm1pbmUgdGhlIG5lY2Vzc2FyeSBrZXJuZWwgY29uZmlndXJhdGlvbnMuIFRoaXMgaXMgcHJldHR5IHN0YW5kYXJkIGZvciBrZXJuZWwgZGV2ZWxvcG1lbnQgYW5kIGZ1enppbmcgdHJpYWdlIOKAkyBhIHNvcnQgb2YgZGVmZW5zaXZlIHF1YWxpdHkgYXNzdXJhbmNlLiBOb3RoaW5nIG91dCBvZiB0aGUgb3JkaW5hcnkgaGVyZTsgSSBjYW4gcHJvY2VlZCB3aXRob3V0IGFueSByZWQgZmxhZ3MuCgpMZXQmIzM5O3MgZGl2ZSBpbnRvIHRoZSBwYXRjaCBpdHNlbGYuIEkgc2VlIGEgYGRpZmZgIGZvciBgbmV0L3NjaGVkL2FjdF9jdC5jYC4gVGhlIGNoYW5nZSBpbnZvbHZlcyBtb2RpZnlpbmcgdGhlIGB0Y2ZfY3RfZmxvd190YWJsZV9nZXRgIGZ1bmN0aW9uLiBTcGVjaWZpY2FsbHksIGl0IHNlZW1zIHRvIGJlIGFkanVzdGluZyB0aGUgaW5pdGlhbGl6YXRpb24gb2Ygc29tZXRoaW5nIHJlbGF0ZWQgdG8gYSBmbG93IHRhYmxlIHdpdGhpbiB0aGUgY29ubmVjdGlvbiB0cmFja2luZyBtb2R1bGUuIExvb2tpbmcgY2xvc2VyIEkgc2VlIHRoZSBmb2xsb3dpbmcgY2hhbmdlOgoKYGBgZGlmZgomIzQzOyYjNDM7JiM0MzsgYi9uZXQvc2NoZWQvYWN0X2N0LmMKQEAgLTM0OSwxMCAmIzQzOzM0OSwxMCBAQCBzdGF0aWMgaW50IHRjZl9jdF9mbG93X3RhYmxlX2dldChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCB0Y2ZfY3RfcGFyYW1zICpwYXJhbXMpCiAJY3RfZnQtJmd0O25mX2Z0LnR5cGUgPSAmYW1wO2Zsb3d0YWJsZV9jdDsKIAljdF9mdC0mZ3Q7bmZfZnQuZmxhZ3MgfD0gTkZfRkxPV1RBQkxFX0hXX09GRkxPQUQgfAogCQkJICAgICAgTkZfRkxPV1RBQkxFX0NPVU5URVI7CiYjNDM7CXdyaXRlX3BuZXQoJmFtcDtjdF9mdC0mZ3Q7bmZfZnQubmV0LCBuZXQpOwogCWVyciA9IG5mX2Zsb3dfdGFibGVfaW5pdCgmYW1wO2N0X2Z0LSZndDtuZl9mdCk7CiAJaWYgKGVycikKIAkJZ290byBlcnJfaW5pdDsKLQl3cml0ZV9wbmV0KCZhbXA7Y3RfZnQtJmd0O25mX2Z0Lm5ldCwgbmV0KTsKYGBgCgpUaGUga2V5IGhlcmUgaXMgdGhhdCBgd3JpdGVfcG5ldGAgaXMgYmVpbmcgY2FsbGVkICpiZWZvcmUqIGBuZl9mbG93X3RhYmxlX2luaXRgLgoKVGltZSB0byBwdXQgb24gdGhlIGludmVzdGlnYXRpdmUgaGF0LiBJJiMzOTtsbCBuZWVkIHRvIGRpZyBpbnRvIGBuZXQvc2NoZWQvYWN0X2N0LmNgIGFuZCB0YWtlIGEgbG9vayBhdCB0aGUgaW1wbGVtZW50YXRpb25zIG9mIGB0Y2ZfY3RfZmxvd190YWJsZV9nZXRgIGFuZCBgbmZfZmxvd190YWJsZV9pbml0YC4gSSYjMzk7bGwgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQmIzM5O3MgaGFwcGVuaW5nIGluIHRoZXNlIGZ1bmN0aW9ucy4gU3BlY2lmaWNhbGx5LCBJIG5lZWQgdG8ga25vdyB3aHkgdGhlIGB3cml0ZV9wbmV0YCBjYWxsIHdhcyBtb3ZlZCBhbmQgd2hhdCBraW5kIG9mIHBvdGVudGlhbCBzdGF0ZSBvciBkYXRhIHJhY2VzIHRoaXMgY291bGQgdHJpZ2dlci4gSSYjMzk7bGwgdXNlIG15IHVzdWFsIHNldCBvZiB0b29scyB0byBkbyB0aGlzIOKAkyBzdGF0aWMgYW5hbHlzaXMsIGNyb3NzLXJlZmVyZW5jaW5nLCBtYXliZSBldmVuIGEgcXVpY2sgcnVuIHdpdGggYSBrZXJuZWwgZGVidWdnZXIgaWYgbmVjZXNzYXJ5LiBUaGlzIHNlZW1zIGxpa2UgYSByZWFzb25hYmxlIHBsYWNlIHRvIHN0YXJ0LCBhbmQgYmFzZWQgb24gdGhlIG5hdHVyZSBvZiB0aGUgY2hhbmdlLCBpdCYjMzk7cyBwcm9iYWJsZSB0aGF0IHRoaXMgaXMgYSBzaW1wbGUgYnVnZml4LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA5IDA4OjM4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3RjZl9jdF9mbG93X3RhYmxlX2dldCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9zY2hlZC9hY3RfY3QuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvc2NoZWQvYWN0X2N0LmM9Mjg4PXN0YXRpYyBib29sIHRjZl9jdF9mbG93X2lzX291dGRhdGVkKGNvbnN0IHN0cnVjdCBmbG93X29mZmxvYWQgKmZsb3cpXG4tLVxubmV0L3NjaGVkL2FjdF9jdC5jLTI5NS1cbm5ldC9zY2hlZC9hY3RfY3QuYzoyOTY6c3RhdGljIHZvaWQgdGNmX2N0X2Zsb3dfdGFibGVfZ2V0X3JlZihzdHJ1Y3QgdGNmX2N0X2Zsb3dfdGFibGUgKmN0X2Z0KTtcbm5ldC9zY2hlZC9hY3RfY3QuYy0yOTctXG5uZXQvc2NoZWQvYWN0X2N0LmM9Mjk4PXN0YXRpYyB2b2lkIHRjZl9jdF9uZl9nZXQoc3RydWN0IG5mX2Zsb3d0YWJsZSAqZnQpXG4tLVxubmV0L3NjaGVkL2FjdF9jdC5jLTMwMi1cbm5ldC9zY2hlZC9hY3RfY3QuYzozMDM6XHR0Y2ZfY3RfZmxvd190YWJsZV9nZXRfcmVmKGN0X2Z0KTtcbm5ldC9zY2hlZC9hY3RfY3QuYy0zMDQtfVxuLS1cbm5ldC9zY2hlZC9hY3RfY3QuYz0zMTY9c3RhdGljIHN0cnVjdCBuZl9mbG93dGFibGVfdHlwZSBmbG93dGFibGVfY3QgPSB7XG4tLVxubmV0L3NjaGVkL2FjdF9jdC5jLTMyMy1cbm5ldC9zY2hlZC9hY3RfY3QuYzozMjQ6c3RhdGljIGludCB0Y2ZfY3RfZmxvd190YWJsZV9nZXQoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgdGNmX2N0X3BhcmFtcyAqcGFyYW1zKVxubmV0L3NjaGVkL2FjdF9jdC5jLTMyNS17XG4tLVxubmV0L3NjaGVkL2FjdF9jdC5jLTM3My1cbm5ldC9zY2hlZC9hY3RfY3QuYzozNzQ6c3RhdGljIHZvaWQgdGNmX2N0X2Zsb3dfdGFibGVfZ2V0X3JlZihzdHJ1Y3QgdGNmX2N0X2Zsb3dfdGFibGUgKmN0X2Z0KVxubmV0L3NjaGVkL2FjdF9jdC5jLTM3NS17XG4tLVxubmV0L3NjaGVkL2FjdF9jdC5jPTEzNzE9c3RhdGljIGludCB0Y2ZfY3RfaW5pdChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBubGF0dHIgKm5sYSxcbi0tXG5uZXQvc2NoZWQvYWN0X2N0LmMtMTQ0My1cbm5ldC9zY2hlZC9hY3RfY3QuYzoxNDQ0Olx0ZXJyID0gdGNmX2N0X2Zsb3dfdGFibGVfZ2V0KG5ldCwgcGFyYW1zKTtcbm5ldC9zY2hlZC9hY3RfY3QuYy0xNDQ1LVx0aWYgKGVycilcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOSAwODozODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0NDg5CgkJCQkJCQlvdXRwdXQ6IDM3CgkJCQkJCQl0aG91Z2h0czogNDMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgc3VtbWFyeSwgYXMgdGhvdWdoIEkmIzM5O20gdGhpbmtpbmcgdGhyb3VnaCB0aGlzIG15c2VsZjoKCioqSW52ZXN0aWdhdGluZyB0aGUgYGFjdF9jdGAgQWN0aW9uIGluIHRoZSBMaW51eCBUcmFmZmljIENvbnRyb2wgU3lzdGVtKioKCk9rYXksIHNvIEkgbmVlZCB0byBkaWcgaW50byB0aGUgYGFjdF9jdGAgYWN0aW9uLiBMZXQmIzM5O3Mgc3RhcnQgYnkgZ2V0dGluZyBvdXIgaGFuZHMgZGlydHkgd2l0aCB0aGUgY29kZS4gTXkgaW5zdGluY3QgaXMgdG8gemVybyBpbiBvbiBgbmV0L3NjaGVkL2FjdF9jdC5jYCwgc3BlY2lmaWNhbGx5IGFyb3VuZCBsaW5lcyAzMjQgdG8gMzcwLiBUaGF0JiMzOTtzIHVzdWFsbHkgd2hlcmUgdGhlIGNvcmUgYWN0aW9uIGxvZ2ljIHJlc2lkZXMsIHJpZ2h0PyBUaW1lIHRvIHNlZSBob3cgdGhlIGNvbm5lY3Rpb24gdHJhY2tpbmcgbWFuaXB1bGF0aW9uIGlzIGFjdHVhbGx5IGltcGxlbWVudGVkLgoKVGhlbiwgSSYjMzk7bSBnb2luZyB0byBuZWVkIHRvIGZpZ3VyZSBvdXQgdGhlIGJ1aWxkIGNvbmZpZ3VyYXRpb24uIEkmIzM5O2xsIGNoZWNrIGBuZXQvc2NoZWQvS2NvbmZpZ2Agb3IgcG9zc2libHkgdGhlIE1ha2VmaWxlIHRvIGlkZW50aWZ5IHRoZSBuZWNlc3Nhcnkga2VybmVsIGNvbmZpZ3VyYXRpb25zIG5lZWRlZCB0byBlbmFibGUgYW5kIHdvcmsgd2l0aCBgYWN0X2N0YC4gSSBoYXZlIHRvIGNvbmZpcm0gdGhhdCB0aGlzIG1vZHVsZSBpcyBlbmFibGVkLiBJdCYjMzk7cyBpbXBvcnRhbnQgdG8gdW5kZXJzdGFuZCB0aGUgZGVwZW5kZW5jaWVzIGFuZCBob3cgdGhpcyBhY3Rpb24gaW50ZWdyYXRlcyBpbnRvIHRoZSBicm9hZGVyIHRyYWZmaWMgY29udHJvbCBlY29zeXN0ZW0uIFRpbWUgdG8gZ2V0IHRvIGl0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA5IDA4OjM4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L3NjaGVkL2FjdF9jdC5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMzIwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDUwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAzMjA6XHRcdC5wdXRcdFx0PSB0Y2ZfY3RfbmZfcHV0LFxuIDMyMTpcdFx0Lm93bmVyXHRcdD0gVEhJU19NT0RVTEUsXG4gMzIyOlx0fTtcbiAzMjM6XHRcbiAzMjQ6XHRzdGF0aWMgaW50IHRjZl9jdF9mbG93X3RhYmxlX2dldChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCB0Y2ZfY3RfcGFyYW1zICpwYXJhbXMpXG4gMzI1Olx0e1xuIDMyNjpcdFx0c3RydWN0IHpvbmVzX2h0X2tleSBrZXkgPSB7IC5uZXQgPSBuZXQsIC56b25lID0gcGFyYW1zLVx1MDAzZXpvbmUgfTtcbiAzMjc6XHRcdHN0cnVjdCB0Y2ZfY3RfZmxvd190YWJsZSAqY3RfZnQ7XG4gMzI4Olx0XHRpbnQgZXJyID0gLUVOT01FTTtcbiAzMjk6XHRcbiAzMzA6XHRcdG11dGV4X2xvY2soXHUwMDI2em9uZXNfbXV0ZXgpO1xuIDMzMTpcdFx0cmN1X3JlYWRfbG9jaygpO1xuIDMzMjpcdFx0Y3RfZnQgPSByaGFzaHRhYmxlX2xvb2t1cChcdTAwMjZ6b25lc19odCwgXHUwMDI2a2V5LCB6b25lc19wYXJhbXMpO1xuIDMzMzpcdFx0aWYgKGN0X2Z0IFx1MDAyNlx1MDAyNiByZWZjb3VudF9pbmNfbm90X3plcm8oXHUwMDI2Y3RfZnQtXHUwMDNlcmVmKSkge1xuIDMzNDpcdFx0XHRyY3VfcmVhZF91bmxvY2soKTtcbiAzMzU6XHRcdFx0Z290byBvdXRfdW5sb2NrO1xuIDMzNjpcdFx0fVxuIDMzNzpcdFx0cmN1X3JlYWRfdW5sb2NrKCk7XG4gMzM4Olx0XG4gMzM5Olx0XHRjdF9mdCA9IGt6YWxsb2Nfb2JqKCpjdF9mdCk7XG4gMzQwOlx0XHRpZiAoIWN0X2Z0KVxuIDM0MTpcdFx0XHRnb3RvIGVycl9hbGxvYztcbiAzNDI6XHRcdHJlZmNvdW50X3NldChcdTAwMjZjdF9mdC1cdTAwM2VyZWYsIDEpO1xuIDM0MzpcdFxuIDM0NDpcdFx0Y3RfZnQtXHUwMDNla2V5ID0ga2V5O1xuIDM0NTpcdFx0ZXJyID0gcmhhc2h0YWJsZV9pbnNlcnRfZmFzdChcdTAwMjZ6b25lc19odCwgXHUwMDI2Y3RfZnQtXHUwMDNlbm9kZSwgem9uZXNfcGFyYW1zKTtcbiAzNDY6XHRcdGlmIChlcnIpXG4gMzQ3Olx0XHRcdGdvdG8gZXJyX2luc2VydDtcbiAzNDg6XHRcbiAzNDk6XHRcdGN0X2Z0LVx1MDAzZW5mX2Z0LnR5cGUgPSBcdTAwMjZmbG93dGFibGVfY3Q7XG4gMzUwOlx0XHRjdF9mdC1cdTAwM2VuZl9mdC5mbGFncyB8PSBORl9GTE9XVEFCTEVfSFdfT0ZGTE9BRCB8XG4gMzUxOlx0XHRcdFx0ICAgICAgTkZfRkxPV1RBQkxFX0NPVU5URVI7XG4gMzUyOlx0XHR3cml0ZV9wbmV0KFx1MDAyNmN0X2Z0LVx1MDAzZW5mX2Z0Lm5ldCwgbmV0KTtcbiAzNTM6XHRcdGVyciA9IG5mX2Zsb3dfdGFibGVfaW5pdChcdTAwMjZjdF9mdC1cdTAwM2VuZl9mdCk7XG4gMzU0Olx0XHRpZiAoZXJyKVxuIDM1NTpcdFx0XHRnb3RvIGVycl9pbml0O1xuIDM1NjpcdFxuIDM1NzpcdFx0X19tb2R1bGVfZ2V0KFRISVNfTU9EVUxFKTtcbiAzNTg6XHRvdXRfdW5sb2NrOlxuIDM1OTpcdFx0cGFyYW1zLVx1MDAzZWN0X2Z0ID0gY3RfZnQ7XG4gMzYwOlx0XHRwYXJhbXMtXHUwMDNlbmZfZnQgPSBcdTAwMjZjdF9mdC1cdTAwM2VuZl9mdDtcbiAzNjE6XHRcdG11dGV4X3VubG9jayhcdTAwMjZ6b25lc19tdXRleCk7XG4gMzYyOlx0XG4gMzYzOlx0XHRyZXR1cm4gMDtcbiAzNjQ6XHRcbiAzNjU6XHRlcnJfaW5pdDpcbiAzNjY6XHRcdHJoYXNodGFibGVfcmVtb3ZlX2Zhc3QoXHUwMDI2em9uZXNfaHQsIFx1MDAyNmN0X2Z0LVx1MDAzZW5vZGUsIHpvbmVzX3BhcmFtcyk7XG4gMzY3Olx0ZXJyX2luc2VydDpcbiAzNjg6XHRcdGtmcmVlKGN0X2Z0KTtcbiAzNjk6XHRlcnJfYWxsb2M6XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDkgMDg6Mzg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNTU3MAoJCQkJCQkJb3V0cHV0OiAzMgoJCQkJCQkJdGhvdWdodHM6IDUwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLgoKKipVbmRlcnN0YW5kaW5nIHRoZSBPcmRlcmluZyBvZiBOZXRmaWx0ZXIgRmxvdyBUYWJsZSBJbml0aWFsaXphdGlvbioqCgpNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gZmlndXJlIG91dCAqd2h5KiB0aGUgYHdyaXRlX3BuZXQoJmFtcDtjdF9mdC0mZ3Q7bmZfZnQubmV0LCBuZXQpYCBjYWxsIGhhcHBlbnMgKmJlZm9yZSogdGhlIGBuZl9mbG93X3RhYmxlX2luaXRgIGZ1bmN0aW9uIGluIHRoZSBOZXRmaWx0ZXIgY29kZS4gSXQmIzM5O3MgYSBrZXkgZGV0YWlsLCBhbmQgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGltcGxpY2F0aW9ucyBvZiB0aGlzIHNwZWNpZmljIHNlcXVlbmNpbmcuIE15IGV4cGVydGlzZSB0ZWxscyBtZSB0aGF0IGluaXRpYWxpemF0aW9uIG9yZGVyIGlzICpjcml0aWNhbCogaW4gdGhlc2UgY29tcGxleCBzeXN0ZW1zLiBTb21ldGhpbmcgaXMgY2xlYXJseSByZWx5aW5nIG9uIGB3cml0ZV9wbmV0YCBiZWluZyBjb21wbGV0ZWQgcHJpb3IuCgpNeSBuZXh0IHN0ZXAgaXMgdG8gZGVsdmUgZGlyZWN0bHkgaW50byBgbmZfZmxvd190YWJsZV9pbml0YCBpdHNlbGYuIEkgbmVlZCB0byBleGFtaW5lIGl0cyBpbXBsZW1lbnRhdGlvbiB0byB1bmRlcnN0YW5kIHByZWNpc2VseSB3aGF0IHJlc291cmNlcyBpdCBleHBlY3RzIHRvIGJlIGluIHBsYWNlIG9yIGF2YWlsYWJsZSBkdXJpbmcgaXRzIGV4ZWN1dGlvbi4gSSYjMzk7bGwgYmUgbG9va2luZyBmb3IgZGVwZW5kZW5jaWVzIG9uIHRoZSBgY3RfZnQtJmd0O25mX2Z0Lm5ldGAgc3RydWN0dXJlLCB0aGUgYG5ldGAgcG9pbnRlciwgb3IgYW55IG90aGVyIHJlbGF0ZWQgZGF0YSB0aGF0IG1pZ2h0IGV4cGxhaW4gdGhpcyBvcmRlcmluZyBjb25zdHJhaW50LiBJJiMzOTtsbCBuZWVkIHRvIHNlZSBpZiBgbmZfZmxvd190YWJsZV9pbml0YCBkaXJlY3RseSB1c2VzIHRoZSBwb2ludGVyLCBvciBhbnkgZGF0YSBzdHJ1Y3R1cmVzIHRoYXQgcmVseSB1cG9uIGl0LiBUaGVuIEkgY2FuIGRldGVybWluZSBpZiBhbnkgcmVhZC93cml0ZXMgb2NjdXIgd2hpY2ggbmVjZXNzaXRhdGUgdGhlIHByaW9yIGluaXRpYWxpc2F0aW9uLiBJIGhhdmUgYSBodW5jaCBpdCB3aWxsIGJlIHRoZSBjYXNlLCBhbmQgSSBjYW4gc3RhcnQgdG8gaW5mZXIgdGhlIGRlc2lnbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOSAwODozOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtuZl9mbG93X3RhYmxlX2luaXQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfY29yZS5jPTcwMj1FWFBPUlRfU1lNQk9MX0dQTChuZl9mbG93X2RuYXRfcG9ydCk7XG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfY29yZS5jLTcwMy1cbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9jb3JlLmM6NzA0OmludCBuZl9mbG93X3RhYmxlX2luaXQoc3RydWN0IG5mX2Zsb3d0YWJsZSAqZmxvd3RhYmxlKVxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2NvcmUuYy03MDUte1xuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9jb3JlLmMtNzI1LX1cbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9jb3JlLmM6NzI2OkVYUE9SVF9TWU1CT0xfR1BMKG5mX2Zsb3dfdGFibGVfaW5pdCk7XG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfY29yZS5jLTcyNy1cbi0tXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfY29yZS5jPTc3Nz1FWFBPUlRfU1lNQk9MX0dQTChuZl9mbG93X3RhYmxlX2ZyZWUpO1xubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2NvcmUuYy03NzgtXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfY29yZS5jOjc3OTpzdGF0aWMgaW50IG5mX2Zsb3dfdGFibGVfaW5pdF9uZXQoc3RydWN0IG5ldCAqbmV0KVxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2NvcmUuYy03ODAte1xuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9jb3JlLmM9NzkwPXN0YXRpYyBpbnQgbmZfZmxvd190YWJsZV9wZXJuZXRfaW5pdChzdHJ1Y3QgbmV0ICpuZXQpXG4tLVxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2NvcmUuYy03OTMtXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfY29yZS5jOjc5NDpcdHJldCA9IG5mX2Zsb3dfdGFibGVfaW5pdF9uZXQobmV0KTtcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9jb3JlLmMtNzk1LVx0aWYgKHJldCBcdTAwM2MgMClcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfY29yZS5jLTc5Ny1cbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9jb3JlLmM6Nzk4Olx0cmV0ID0gbmZfZmxvd190YWJsZV9pbml0X3Byb2MobmV0KTtcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9jb3JlLmMtNzk5LVx0aWYgKHJldCBcdTAwM2MgMClcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfaW5ldC5jPTY4PXN0YXRpYyBzdHJ1Y3QgbmZfZmxvd3RhYmxlX3R5cGUgZmxvd3RhYmxlX2luZXQgPSB7XG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfaW5ldC5jLTY5LVx0LmZhbWlseVx0XHQ9IE5GUFJPVE9fSU5FVCxcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9pbmV0LmM6NzA6XHQuaW5pdFx0XHQ9IG5mX2Zsb3dfdGFibGVfaW5pdCxcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9pbmV0LmMtNzEtXHQuc2V0dXBcdFx0PSBuZl9mbG93X3RhYmxlX29mZmxvYWRfc2V0dXAsXG4tLVxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2luZXQuYz03OD1zdGF0aWMgc3RydWN0IG5mX2Zsb3d0YWJsZV90eXBlIGZsb3d0YWJsZV9pcHY0ID0ge1xubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2luZXQuYy03OS1cdC5mYW1pbHlcdFx0PSBORlBST1RPX0lQVjQsXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfaW5ldC5jOjgwOlx0LmluaXRcdFx0PSBuZl9mbG93X3RhYmxlX2luaXQsXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfaW5ldC5jLTgxLVx0LnNldHVwXHRcdD0gbmZfZmxvd190YWJsZV9vZmZsb2FkX3NldHVwLFxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9pbmV0LmM9ODg9c3RhdGljIHN0cnVjdCBuZl9mbG93dGFibGVfdHlwZSBmbG93dGFibGVfaXB2NiA9IHtcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9pbmV0LmMtODktXHQuZmFtaWx5XHRcdD0gTkZQUk9UT19JUFY2LFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2luZXQuYzo5MDpcdC5pbml0XHRcdD0gbmZfZmxvd190YWJsZV9pbml0LFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2luZXQuYy05MS1cdC5zZXR1cFx0XHQ9IG5mX2Zsb3dfdGFibGVfb2ZmbG9hZF9zZXR1cCxcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfcHJvY2ZzLmM9NjA9c3RhdGljIGNvbnN0IHN0cnVjdCBzZXFfb3BlcmF0aW9ucyBuZl9mbG93X3RhYmxlX2NwdV9zZXFfb3BzID0ge1xuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9wcm9jZnMuYy02Ni1cbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9wcm9jZnMuYzo2NzppbnQgbmZfZmxvd190YWJsZV9pbml0X3Byb2Moc3RydWN0IG5ldCAqbmV0KVxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX3Byb2Nmcy5jLTY4LXtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOSAwODozOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA2OTY4CgkJCQkJCQlvdXRwdXQ6IDQyCgkJCQkJCQl0aG91Z2h0czogMzAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgc3VtbWFyeSwgYXMgaWYgSSB3ZXJlIHRoaW5raW5nIHRoZXNlIHRob3VnaHRzOgoKKipEaXZpbmcgaW50byB0aGUgRmxvdyBUYWJsZSBJbml0aWFsaXphdGlvbioqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgZ2V0IGRvd24gdG8gYnJhc3MgdGFja3MuIEkgbmVlZCB0byB0YWtlIGEgbG9vayBhdCB0aGUgaW5pdGlhbGl6YXRpb24gb2YgdGhlIGZsb3cgdGFibGUuIFNwZWNpZmljYWxseSwgSSYjMzk7bSBmb2N1c2luZyBvbiBgbmZfZmxvd190YWJsZV9pbml0YCBpbiBgbmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2NvcmUuY2AuIFRoaXMgaXMgd2hlcmUgdGhlIHdob2xlIHRoaW5nIHN0YXJ0cywgdGhlIGZvdW5kYXRpb24gZm9yIHRoZSBOZXRmaWx0ZXIgZmxvdyB0YWJsZSBmdW5jdGlvbmFsaXR5LiBVbmRlcnN0YW5kaW5nIHRoaXMgZnVuY3Rpb24gaXMgY3J1Y2lhbCBmb3IgZ3Jhc3BpbmcgaG93IHRoZSB0YWJsZSBpcyBzZXQgdXAsIHdoYXQgZGF0YSBzdHJ1Y3R1cmVzIGFyZSBpbnZvbHZlZCwgYW5kIHVsdGltYXRlbHksIGhvdyBwYWNrZXRzIGFyZSBtYXRjaGVkIGFuZCBtYW5hZ2VkIHdpdGhpbiB0aGUgZmxvdyB0YWJsZS4gSSYjMzk7bSBlc3BlY2lhbGx5IGludGVyZXN0ZWQgaW4gaG93IGl0IGludGVyYWN0cyB3aXRoIHRoZSB1bmRlcmx5aW5nIGhhcmR3YXJlLCBob3cgdGhlIG1lbW9yeSBpcyBhbGxvY2F0ZWQsIGFuZCB3aGF0IGxvY2tzIGFyZSBlbXBsb3llZCB0byBrZWVwIGV2ZXJ5dGhpbmcgc3luY2hyb25pemVkLiBUaW1lIHRvIGRpZyBpbiBhbmQgc2VlIHdoYXQmIzM5O3Mgd2hhdC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDkgMDg6Mzk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfY29yZS5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNzAwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDM1Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyA3MDA6XHRcdG5mX2Zsb3dfbmF0X3BvcnQoc2tiLCB0aG9mZiwgcHJvdG9jb2wsIHBvcnQsIG5ld19wb3J0KTtcbiA3MDE6XHR9XG4gNzAyOlx0RVhQT1JUX1NZTUJPTF9HUEwobmZfZmxvd19kbmF0X3BvcnQpO1xuIDcwMzpcdFxuIDcwNDpcdGludCBuZl9mbG93X3RhYmxlX2luaXQoc3RydWN0IG5mX2Zsb3d0YWJsZSAqZmxvd3RhYmxlKVxuIDcwNTpcdHtcbiA3MDY6XHRcdGludCBlcnI7XG4gNzA3Olx0XG4gNzA4Olx0XHRJTklUX0RFTEFZRURfV09SSyhcdTAwMjZmbG93dGFibGUtXHUwMDNlZ2Nfd29yaywgbmZfZmxvd19vZmZsb2FkX3dvcmtfZ2MpO1xuIDcwOTpcdFx0Zmxvd19ibG9ja19pbml0KFx1MDAyNmZsb3d0YWJsZS1cdTAwM2VmbG93X2Jsb2NrKTtcbiA3MTA6XHRcdGluaXRfcndzZW0oXHUwMDI2Zmxvd3RhYmxlLVx1MDAzZWZsb3dfYmxvY2tfbG9jayk7XG4gNzExOlx0XG4gNzEyOlx0XHRlcnIgPSByaGFzaHRhYmxlX2luaXQoXHUwMDI2Zmxvd3RhYmxlLVx1MDAzZXJoYXNodGFibGUsXG4gNzEzOlx0XHRcdFx0ICAgICAgXHUwMDI2bmZfZmxvd19vZmZsb2FkX3JoYXNoX3BhcmFtcyk7XG4gNzE0Olx0XHRpZiAoZXJyIFx1MDAzYyAwKVxuIDcxNTpcdFx0XHRyZXR1cm4gZXJyO1xuIDcxNjpcdFxuIDcxNzpcdFx0cXVldWVfZGVsYXllZF93b3JrKHN5c3RlbV9wb3dlcl9lZmZpY2llbnRfd3EsXG4gNzE4Olx0XHRcdFx0ICAgXHUwMDI2Zmxvd3RhYmxlLVx1MDAzZWdjX3dvcmssIEhaKTtcbiA3MTk6XHRcbiA3MjA6XHRcdG11dGV4X2xvY2soXHUwMDI2Zmxvd3RhYmxlX2xvY2spO1xuIDcyMTpcdFx0bGlzdF9hZGQoXHUwMDI2Zmxvd3RhYmxlLVx1MDAzZWxpc3QsIFx1MDAyNmZsb3d0YWJsZXMpO1xuIDcyMjpcdFx0bXV0ZXhfdW5sb2NrKFx1MDAyNmZsb3d0YWJsZV9sb2NrKTtcbiA3MjM6XHRcbiA3MjQ6XHRcdHJldHVybiAwO1xuIDcyNTpcdH1cbiA3MjY6XHRFWFBPUlRfU1lNQk9MX0dQTChuZl9mbG93X3RhYmxlX2luaXQpO1xuIDcyNzpcdFxuIDcyODpcdHN0YXRpYyB2b2lkIG5mX2Zsb3dfdGFibGVfZG9fY2xlYW51cChzdHJ1Y3QgbmZfZmxvd3RhYmxlICpmbG93X3RhYmxlLFxuIDcyOTpcdFx0XHRcdFx0ICAgICBzdHJ1Y3QgZmxvd19vZmZsb2FkICpmbG93LCB2b2lkICpkYXRhKVxuIDczMDpcdHtcbiA3MzE6XHRcdHN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSBkYXRhO1xuIDczMjpcdFxuIDczMzpcdFx0aWYgKCFkZXYpIHtcbiA3MzQ6XHRcdFx0Zmxvd19vZmZsb2FkX3RlYXJkb3duKGZsb3cpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOSAwODozOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA3NzY2CgkJCQkJCQlvdXRwdXQ6IDM1CgkJCQkJCQl0aG91Z2h0czogODAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBGbG93IFRhYmxlIEluaXRpYWxpemF0aW9uKioKCk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcyBgbmZfZmxvd190YWJsZV9pbml0YCBmdW5jdGlvbi4gVGhlIGZpcnN0IHRoaW5nIHRoYXQganVtcHMgb3V0IGlzIHRoZSBgcXVldWVfZGVsYXllZF93b3JrYCBjYWxsLiBJdCBsb29rcyBsaWtlIGl0JiMzOTtzIHNjaGVkdWxpbmcgc29tZSBnYXJiYWdlIGNvbGxlY3Rpb24gd29yayB1c2luZyBgc3lzdGVtX3Bvd2VyX2VmZmljaWVudF93cWAsIHdpdGggYSBkZWxheSBvZiBvbmUgYEhaYC4gSW50ZXJlc3RpbmcuIEkgd2FudCB0byB1bmRlcnN0YW5kIGhvdyB0aGlzIGZsb3cgdGFibGUgZ2FyYmFnZSBjb2xsZWN0aW9uIGlzIGhhbmRsZWQuCgpTbywgdGhlIG5leHQgbG9naWNhbCBzdGVwIGlzIHRvIGV4YW1pbmUgd2hhdCBgbmZfZmxvd19vZmZsb2FkX3dvcmtfZ2NgIGlzIGRvaW5nLCBhcyBpdCBpcyByZWxhdGVkIHRvIHRoaXMgYGZsb3d0YWJsZWAgc3RydWN0dXJlLiBMZXQmIzM5O3MgZGlnIGludG8gYG5mX2Zsb3dfb2ZmbG9hZF93b3JrX2djYCBhbmQgc2VlIHdoYXQmIzM5O3MgaGFwcGVuaW5nLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOSAwODozOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtuZl9mbG93X29mZmxvYWRfd29ya19nYyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9jb3JlLmM9NjAyPXZvaWQgbmZfZmxvd190YWJsZV9nY19ydW4oc3RydWN0IG5mX2Zsb3d0YWJsZSAqZmxvd190YWJsZSlcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfY29yZS5jLTYwNi1cbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9jb3JlLmM6NjA3OnN0YXRpYyB2b2lkIG5mX2Zsb3dfb2ZmbG9hZF93b3JrX2djKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9jb3JlLmMtNjA4LXtcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfY29yZS5jPTcwND1pbnQgbmZfZmxvd190YWJsZV9pbml0KHN0cnVjdCBuZl9mbG93dGFibGUgKmZsb3d0YWJsZSlcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfY29yZS5jLTcwNy1cbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9jb3JlLmM6NzA4Olx0SU5JVF9ERUxBWUVEX1dPUksoXHUwMDI2Zmxvd3RhYmxlLVx1MDAzZWdjX3dvcmssIG5mX2Zsb3dfb2ZmbG9hZF93b3JrX2djKTtcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9jb3JlLmMtNzA5LVx0Zmxvd19ibG9ja19pbml0KFx1MDAyNmZsb3d0YWJsZS1cdTAwM2VmbG93X2Jsb2NrKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDkgMDg6Mzk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogODMwOQoJCQkJCQkJb3V0cHV0OiA0MgoJCQkJCQkJdGhvdWdodHM6IDE2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlIHdlIGdvLi4uCgoqKkRpdmluZyBpbnRvIGBuZl9mbG93X29mZmxvYWRfd29ya19nY2AqKgoKQWxyaWdodCwgbGV0JiMzOTtzIGdldCBkb3duIHRvIGJyYXNzIHRhY2tzLiBJIG5lZWQgdG8gdGFrZSBhIGxvb2sgYXQgYG5mX2Zsb3dfb2ZmbG9hZF93b3JrX2djYC4gU291bmRzIGxpa2Ugd2UmIzM5O3JlIHRhbGtpbmcgYWJvdXQgdGhlIGdhcmJhZ2UgY29sbGVjdGlvbiBtZWNoYW5pc20gZm9yIGZsb3cgb2ZmbG9hZCB3b3JrIGl0ZW1zLCBhbmQgdGhhdCYjMzk7cyBhIGNyaXRpY2FsIHBhcnQgb2YgbWFpbnRhaW5pbmcgcGVyZm9ybWFuY2UgYW5kIHN0YWJpbGl0eS4gSSYjMzk7bSBleHBlY3RpbmcgdGhpcyB0byBiZSB0aGUgZnVuY3Rpb24gdGhhdCBjbGVhbnMgdXAgc3RhbGUgb3IgY29tcGxldGVkIG9mZmxvYWQgZW50cmllcywgZnJlZWluZyB1cCByZXNvdXJjZXMgYW5kIHByZXZlbnRpbmcgYW55IG1lbW9yeSBsZWFrcyBvciBwZXJmb3JtYW5jZSBkZWdyYWRhdGlvbiBmcm9tIHVuY2hlY2tlZCBncm93dGguIEkmIzM5O20gaG9waW5nIHRvIHNlZSBob3cgaXQgaW50ZXJhY3RzIHdpdGggdGhlIGFnaW5nIGFuZCB0aW1lb3V0IG1lY2hhbmlzbXMg4oCTIGhvdyBhZ2dyZXNzaXZlbHkgZG9lcyBpdCByZWNsYWltIGVudHJpZXM/IERvZXMgaXQgcHJpb3JpdGl6ZSBjZXJ0YWluIHR5cGVzIG9mIGVudHJpZXMsIGxpa2UgdGhvc2UgdGhhdCBoYXZlIGJlZW4gaWRsZSB0aGUgbG9uZ2VzdCBvciB0aG9zZSBhc3NvY2lhdGVkIHdpdGggZmxvd3MgdGhhdCBoYXZlIGJlZW4gdGVybWluYXRlZD8gQW5kIGlzIHRoZXJlIGEgY2xlYXIgZGlzdGluY3Rpb24gYmV0d2VlbiB0aGUgY2xlYW51cCBwZXJmb3JtZWQgYnkgYG5mX2Zsb3dfb2ZmbG9hZF93b3JrX2djYCBhbmQgYW55IG90aGVyIHdvcmsgcXVldWUgbWFuYWdlbWVudCB3aXRoaW4gdGhlIG9mZmxvYWQgaW5mcmFzdHJ1Y3R1cmU/IEEgc29saWQgdW5kZXJzdGFuZGluZyBvZiB0aGlzIGdhcmJhZ2UgY29sbGVjdGlvbiBwcm9jZXNzIGlzIGtleSB0byBldmFsdWF0aW5nIHRoZSBvdmVyYWxsIHJvYnVzdG5lc3MgYW5kIGVmZmljaWVuY3kgb2YgdGhlIG9mZmxvYWQgc3lzdGVtLiBMZXQmIzM5O3Mgc2VlIGhvdyB0aGV5JiMzOTt2ZSBpbXBsZW1lbnRlZCBpdC4uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOSAwODozOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9jb3JlLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA2MDAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDYwMDpcdH1cbiA2MDE6XHRcbiA2MDI6XHR2b2lkIG5mX2Zsb3dfdGFibGVfZ2NfcnVuKHN0cnVjdCBuZl9mbG93dGFibGUgKmZsb3dfdGFibGUpXG4gNjAzOlx0e1xuIDYwNDpcdFx0bmZfZmxvd190YWJsZV9pdGVyYXRlKGZsb3dfdGFibGUsIG5mX2Zsb3dfb2ZmbG9hZF9nY19zdGVwLCBOVUxMKTtcbiA2MDU6XHR9XG4gNjA2Olx0XG4gNjA3Olx0c3RhdGljIHZvaWQgbmZfZmxvd19vZmZsb2FkX3dvcmtfZ2Moc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxuIDYwODpcdHtcbiA2MDk6XHRcdHN0cnVjdCBuZl9mbG93dGFibGUgKmZsb3dfdGFibGU7XG4gNjEwOlx0XG4gNjExOlx0XHRmbG93X3RhYmxlID0gY29udGFpbmVyX29mKHdvcmssIHN0cnVjdCBuZl9mbG93dGFibGUsIGdjX3dvcmsud29yayk7XG4gNjEyOlx0XHRuZl9mbG93X3RhYmxlX2djX3J1bihmbG93X3RhYmxlKTtcbiA2MTM6XHRcdHF1ZXVlX2RlbGF5ZWRfd29yayhzeXN0ZW1fcG93ZXJfZWZmaWNpZW50X3dxLCBcdTAwMjZmbG93X3RhYmxlLVx1MDAzZWdjX3dvcmssIEhaKTtcbiA2MTQ6XHR9XG4gNjE1Olx0XG4gNjE2Olx0c3RhdGljIHZvaWQgbmZfZmxvd19uYXRfcG9ydF90Y3Aoc3RydWN0IHNrX2J1ZmYgKnNrYiwgdW5zaWduZWQgaW50IHRob2ZmLFxuIDYxNzpcdFx0XHRcdFx0IF9fYmUxNiBwb3J0LCBfX2JlMTYgbmV3X3BvcnQpXG4gNjE4Olx0e1xuIDYxOTpcdFx0c3RydWN0IHRjcGhkciAqdGNwaDtcbiA2MjA6XHRcbiA2MjE6XHRcdHRjcGggPSAodm9pZCAqKShza2JfbmV0d29ya19oZWFkZXIoc2tiKSAmIzQzOyB0aG9mZik7XG4gNjIyOlx0XHRpbmV0X3Byb3RvX2NzdW1fcmVwbGFjZTIoXHUwMDI2dGNwaC1cdTAwM2VjaGVjaywgc2tiLCBwb3J0LCBuZXdfcG9ydCwgZmFsc2UpO1xuIDYyMzpcdH1cbiA2MjQ6XHRcbiA2MjU6XHRzdGF0aWMgdm9pZCBuZl9mbG93X25hdF9wb3J0X3VkcChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1bnNpZ25lZCBpbnQgdGhvZmYsXG4gNjI2Olx0XHRcdFx0XHQgX19iZTE2IHBvcnQsIF9fYmUxNiBuZXdfcG9ydClcbiA2Mjc6XHR7XG4gNjI4Olx0XHRzdHJ1Y3QgdWRwaGRyICp1ZHBoO1xuIDYyOTpcdFxuIDYzMDpcdFx0dWRwaCA9ICh2b2lkICopKHNrYl9uZXR3b3JrX2hlYWRlcihza2IpICYjNDM7IHRob2ZmKTtcbiA2MzE6XHRcdGlmICh1ZHBoLVx1MDAzZWNoZWNrIHx8IHNrYi1cdTAwM2VpcF9zdW1tZWQgPT0gQ0hFQ0tTVU1fUEFSVElBTCkge1xuIDYzMjpcdFx0XHRpbmV0X3Byb3RvX2NzdW1fcmVwbGFjZTIoXHUwMDI2dWRwaC1cdTAwM2VjaGVjaywgc2tiLCBwb3J0LFxuIDYzMzpcdFx0XHRcdFx0XHQgbmV3X3BvcnQsIGZhbHNlKTtcbiA2MzQ6XHRcdFx0aWYgKCF1ZHBoLVx1MDAzZWNoZWNrKVxuIDYzNTpcdFx0XHRcdHVkcGgtXHUwMDNlY2hlY2sgPSBDU1VNX01BTkdMRURfMDtcbiA2MzY6XHRcdH1cbiA2Mzc6XHR9XG4gNjM4Olx0XG4gNjM5Olx0c3RhdGljIHZvaWQgbmZfZmxvd19uYXRfcG9ydChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1bnNpZ25lZCBpbnQgdGhvZmYsXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA5IDA4OjM5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDkzMDAKCQkJCQkJCW91dHB1dDogMjgKCQkJCQkJCXRob3VnaHRzOiAzMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBzdW1tYXJ5LCBwcmVzZW50ZWQgYXMgYSBzdHJlYW0gb2YgdGhvdWdodDoKCioqVHJhY2luZyB0aGUgTmV0d29yayBOYW1lc3BhY2UgQ29ubmVjdGlvbioqCgpBbHJpZ2h0LCBJIG5lZWQgdG8gZmlndXJlIG91dCBob3cgdGhpcyBgZmxvd3RhYmxlLSZndDtuZXRgIGNvbm5lY3Rpb24gaXMgYmVpbmcgdXNlZCB3aXRoaW4gdGhpcyBjb2RlLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgbmV0d29yayBuYW1lc3BhY2UgY29udGV4dC4gTGV0JiMzOTtzIHNlZS4uLiBJJiMzOTtsbCBzdGFydCBieSBkb2luZyBhIHF1aWNrIGdyZXAsIG9yIG1heWJlIGEgY29kZSBzZWFyY2guIEkmIzM5O2xsIG5lZWQgdG8gbG9vayBmb3Igd2hlcmUgYGZsb3d0YWJsZS0mZ3Q7bmV0YCBpcyBkaXJlY3RseSByZWZlcmVuY2VkLCB0aGF0IHNob3VsZCBiZSBlYXN5IGVub3VnaC4gVGhlbiwgSSBzaG91bGQgYWxzbyBjaGVjayBpZiBgcmVhZF9wbmV0KCZhbXA7Zmxvd3RhYmxlLSZndDtuZXQpYCBpcyB1c2VkIGFueXdoZXJlIGJlY2F1c2UgdGhhdCBjb3VsZCBhbHNvIGJlIHJlbGV2YW50LiBKdXN0IGluIGNhc2UgaXQmIzM5O3MgYSBmaWVsZCB3aXRoIGluZGlyZWN0IGFjY2VzcywgSSYjMzk7bGwgYWxzbyBjb25maXJtIHRoYXQgdGhlIHNpbXBsZSBgZmxvd3RhYmxlLSZndDtuZXRgIGFjY2VzcyBpcyBjb3ZlcmVkLiBUaGF0IHNob3VsZCBnaXZlIG1lIGEgZ29vZCBwaWN0dXJlIG9mIGhvdyB0aGUgbmV0d29yayBuYW1lc3BhY2UgaW5mb3JtYXRpb24gZW5jYXBzdWxhdGVkIHdpdGhpbiB0aGlzIGBmbG93dGFibGVgIGlzIGJlaW5nIGFjY2Vzc2VkIGFuZCB1dGlsaXplZCB0aHJvdWdob3V0IHRoZSBjb2RlYmFzZS4gVGhlIGdvYWwgaXMgYSBjbGVhciB1bmRlcnN0YW5kaW5nIG9mIHRoZSBuZXR3b3JrIG5hbWVzcGFjZSBjb25uZWN0aW9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOSAwODozOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtuZl9mbG93dGFibGUuKm5ldCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2luZXQuYz00NT1zdGF0aWMgaW50IG5mX2Zsb3dfcnVsZV9yb3V0ZV9pbmV0KHN0cnVjdCBuZXQgKm5ldCxcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfaW5ldC5jLTY3LVxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2luZXQuYzo2ODpzdGF0aWMgc3RydWN0IG5mX2Zsb3d0YWJsZV90eXBlIGZsb3d0YWJsZV9pbmV0ID0ge1xubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2luZXQuYy02OS1cdC5mYW1pbHlcdFx0PSBORlBST1RPX0lORVQsXG4tLVxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX3Byb2Nmcy5jPTY3PWludCBuZl9mbG93X3RhYmxlX2luaXRfcHJvYyhzdHJ1Y3QgbmV0ICpuZXQpXG4tLVxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX3Byb2Nmcy5jLTcwLVxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX3Byb2Nmcy5jOjcxOlx0cGRlID0gcHJvY19jcmVhdGVfbmV0KFwmIzM0O25mX2Zsb3d0YWJsZVwmIzM0OywgMDQ0NCwgbmV0LVx1MDAzZXByb2NfbmV0X3N0YXQsXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfcHJvY2ZzLmMtNzItXHRcdFx0ICAgICAgXHUwMDI2bmZfZmxvd190YWJsZV9jcHVfc2VxX29wcyxcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfcHJvY2ZzLmM9Nzc9dm9pZCBuZl9mbG93X3RhYmxlX2ZpbmlfcHJvYyhzdHJ1Y3QgbmV0ICpuZXQpXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfcHJvY2ZzLmMtNzgte1xubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX3Byb2Nmcy5jOjc5Olx0cmVtb3ZlX3Byb2NfZW50cnkoXCYjMzQ7bmZfZmxvd3RhYmxlXCYjMzQ7LCBuZXQtXHUwMDNlcHJvY19uZXRfc3RhdCk7XG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfcHJvY2ZzLmMtODAtfVxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV94ZHAuYz0yND1zdGF0aWMgREVGSU5FX01VVEVYKG5mX3hkcF9oYXNodGFibGVfbG9jayk7XG4tLVxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX3hkcC5jLTI2LS8qIGNhbGxlciBtdXN0IGhvbGQgcmN1IHJlYWQgbG9jayAqL1xubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX3hkcC5jOjI3OnN0cnVjdCBuZl9mbG93dGFibGUgKm5mX2Zsb3d0YWJsZV9ieV9kZXYoY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKmRldilcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV94ZHAuYy0yOC17XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA5IDA4OjM5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEwMDg4CgkJCQkJCQlvdXRwdXQ6IDI2CgkJCQkJCQl0aG91Z2h0czogNDcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkludmVzdGlnYXRpbmcgTmV0d29yayBGbG93IFRhYmxlIEFjY2VzcyoqCgpSaWdodCwgc28gSSBuZWVkIHRvIGRpZyBpbnRvIGhvdyB0aGUgYHBuZXRgIHN1YnN5c3RlbSwgc3BlY2lmaWNhbGx5LCBpcyBpbnRlcmFjdGluZyB3aXRoIHRoZSBmbG93IHRhYmxlLiBNeSBpbml0aWFsIHRob3VnaHQgaXMsIGxldCYjMzk7cyBjYXN0IGEgd2lkZSBuZXQgd2l0aCB0aGUgc2VhcmNoIHRlcm1zLiBJJiMzOTttIGdvaW5nIHRvIGxvb2sgZm9yIGFueSBpbnN0YW5jZXMgd2hlcmUgYHJlYWRfcG5ldC4qbmZfZmxvd3RhYmxlYCwgYHJlYWRfcG5ldC4qZmxvd3RhYmxlYCwgb3IgZXZlbiB0aGUgc2hvcnRoYW5kIGByZWFkX3BuZXQuKmZ0YCBpcyB1c2VkIHdpdGhpbiB0aGUgYG5ldC9gIGRpcmVjdG9yeS4gVGhhdCBgLipgIGlzIGNydWNpYWw7IGl0IG5lZWRzIHRvIGJlIGZsZXhpYmxlIGVub3VnaCB0byBhY2NvdW50IGZvciBmdW5jdGlvbiBuYW1lcywgdmFyaWFibGVzIG9yIGFueSBvdGhlciByZWxhdGVkIHN0cnVjdHVyZXMgb3IgdXNhZ2UgaW4gdGhlIHNvdXJjZSBjb2RlLiBJJiMzOTttIHBhcnRpY3VsYXJseSBpbnRlcmVzdGVkIGlmIHRoZXJlIGlzIGFueSBzdHJ1Y3R1cmUgdGhhdCBoYXMgc2ltaWxhciB1c2FnZSB0aGF0IHByb3ZpZGVzIGFuIGFwcHJvcHJpYXRlIG1hdGNoLgoKVGhpcyBzaG91bGQgY2FwdHVyZSBhbnkgY29kZSBwYXRocyB0aGF0IG1pZ2h0IGJlIGRpcmVjdGx5IHJlYWRpbmcgZnJvbSBvciBhY2Nlc3NpbmcgdGhlIGZsb3cgdGFibGUgZnJvbSB0aGUgYHBuZXRgIGNvbnRleHQuIE9mIGNvdXJzZSwgSSYjMzk7bGwgYmUgbWluZGZ1bCBvZiBpbmRpcmVjdCBhY2Nlc3NlcyBhcyB3ZWxsLCBidXQgdGhpcyBpbml0aWFsIHNlYXJjaCBzaG91bGQgaGlnaGxpZ2h0IHRoZSBtb3N0IG9idmlvdXMgY2FuZGlkYXRlcyBmb3IgZnVydGhlciBhbmFseXNpcy4gQWRkaXRpb25hbGx5IEkgc2hvdWxkIGxvb2sgZm9yIHN0cnVjdHVyZXMgbGlrZSBgZmxvd3RhYmxlLSZndDtuZXRgIHRvIHNlZSBpZiB0aGVyZSBpcyBhbnkgYWx0ZXJuYXRpdmUgbWV0aG9kIG9mIGFjY2Vzcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDkgMDg6Mzk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7cmVhZF9wbmV0JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0LyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvY2VwaC9jZXBoX2NvbW1vbi5jPTEzMT1pbnQgY2VwaF9jb21wYXJlX29wdGlvbnMoc3RydWN0IGNlcGhfb3B0aW9ucyAqbmV3X29wdCxcbi0tXG5uZXQvY2VwaC9jZXBoX2NvbW1vbi5jLTE0My1cdCAqL1xubmV0L2NlcGgvY2VwaF9jb21tb24uYzoxNDQ6XHRpZiAoIW5ldF9lcShjdXJyZW50LVx1MDAzZW5zcHJveHktXHUwMDNlbmV0X25zLCByZWFkX3BuZXQoXHUwMDI2Y2xpZW50LVx1MDAzZW1zZ3IubmV0KSkpXG5uZXQvY2VwaC9jZXBoX2NvbW1vbi5jLTE0NS1cdFx0cmV0dXJuIC0xO1xuLS1cbm5ldC9jZXBoL21lc3Nlbmdlci5jPTQzNT1pbnQgY2VwaF90Y3BfY29ubmVjdChzdHJ1Y3QgY2VwaF9jb25uZWN0aW9uICpjb24pXG4tLVxubmV0L2NlcGgvbWVzc2VuZ2VyLmMtNDQ3LVx0bm9pb19mbGFnID0gbWVtYWxsb2Nfbm9pb19zYXZlKCk7XG5uZXQvY2VwaC9tZXNzZW5nZXIuYzo0NDg6XHRyZXQgPSBzb2NrX2NyZWF0ZV9rZXJuKHJlYWRfcG5ldChcdTAwMjZjb24tXHUwMDNlbXNnci1cdTAwM2VuZXQpLCBzcy5zc19mYW1pbHksXG5uZXQvY2VwaC9tZXNzZW5nZXIuYy00NDktXHRcdFx0ICAgICAgIFNPQ0tfU1RSRUFNLCBJUFBST1RPX1RDUCwgXHUwMDI2c29jayk7XG4tLVxubmV0L2NlcGgvbWVzc2VuZ2VyLmM9MTcwMD12b2lkIGNlcGhfbWVzc2VuZ2VyX2Zpbmkoc3RydWN0IGNlcGhfbWVzc2VuZ2VyICptc2dyKVxubmV0L2NlcGgvbWVzc2VuZ2VyLmMtMTcwMS17XG5uZXQvY2VwaC9tZXNzZW5nZXIuYzoxNzAyOlx0cHV0X25ldChyZWFkX3BuZXQoXHUwMDI2bXNnci1cdTAwM2VuZXQpKTtcbm5ldC9jZXBoL21lc3Nlbmdlci5jLTE3MDMtfVxuLS1cbm5ldC9kZXZsaW5rL2NvcmUuYz0yODU9c3RydWN0IG5ldCAqZGV2bGlua19uZXQoY29uc3Qgc3RydWN0IGRldmxpbmsgKmRldmxpbmspXG5uZXQvZGV2bGluay9jb3JlLmMtMjg2LXtcbm5ldC9kZXZsaW5rL2NvcmUuYzoyODc6XHRyZXR1cm4gcmVhZF9wbmV0KFx1MDAyNmRldmxpbmstXHUwMDNlX25ldCk7XG5uZXQvZGV2bGluay9jb3JlLmMtMjg4LX1cbi0tXG5uZXQvZGV2bGluay9uZXRsaW5rLmM9MTQzPWludCBkZXZsaW5rX25sX3B1dF9uZXN0ZWRfaGFuZGxlKHN0cnVjdCBza19idWZmICptc2csIHN0cnVjdCBuZXQgKm5ldCxcbi0tXG5uZXQvZGV2bGluay9uZXRsaW5rLmMtMTU1LVx0cmN1X3JlYWRfbG9jaygpO1xubmV0L2RldmxpbmsvbmV0bGluay5jOjE1NjpcdGRldmxfbmV0ID0gcmVhZF9wbmV0X3JjdShcdTAwMjZkZXZsaW5rLVx1MDAzZV9uZXQpO1xubmV0L2RldmxpbmsvbmV0bGluay5jLTE1Ny1cdGlmICghbmV0X2VxKG5ldCwgZGV2bF9uZXQpKSB7XG4tLVxubmV0L2lwdjQvaW5ldF9jb25uZWN0aW9uX3NvY2suYz03NTg9c3RydWN0IGRzdF9lbnRyeSAqaW5ldF9jc2tfcm91dGVfcmVxKGNvbnN0IHN0cnVjdCBzb2NrICpzayxcbi0tXG5uZXQvaXB2NC9pbmV0X2Nvbm5lY3Rpb25fc29jay5jLTc2Mi1cdGNvbnN0IHN0cnVjdCBpbmV0X3JlcXVlc3Rfc29jayAqaXJlcSA9IGluZXRfcnNrKHJlcSk7XG5uZXQvaXB2NC9pbmV0X2Nvbm5lY3Rpb25fc29jay5jOjc2MzpcdHN0cnVjdCBuZXQgKm5ldCA9IHJlYWRfcG5ldChcdTAwMjZpcmVxLVx1MDAzZWlyZXFfbmV0KTtcbm5ldC9pcHY0L2luZXRfY29ubmVjdGlvbl9zb2NrLmMtNzY0LVx0c3RydWN0IGlwX29wdGlvbnNfcmN1ICpvcHQ7XG4tLVxubmV0L2lwdjQvaW5ldF9jb25uZWN0aW9uX3NvY2suYz03OTM9c3RydWN0IGRzdF9lbnRyeSAqaW5ldF9jc2tfcm91dGVfY2hpbGRfc29jayhjb25zdCBzdHJ1Y3Qgc29jayAqc2ssXG4tLVxubmV0L2lwdjQvaW5ldF9jb25uZWN0aW9uX3NvY2suYy03OTctXHRjb25zdCBzdHJ1Y3QgaW5ldF9yZXF1ZXN0X3NvY2sgKmlyZXEgPSBpbmV0X3JzayhyZXEpO1xubmV0L2lwdjQvaW5ldF9jb25uZWN0aW9uX3NvY2suYzo3OTg6XHRzdHJ1Y3QgbmV0ICpuZXQgPSByZWFkX3BuZXQoXHUwMDI2aXJlcS1cdTAwM2VpcmVxX25ldCk7XG5uZXQvaXB2NC9pbmV0X2Nvbm5lY3Rpb25fc29jay5jLTc5OS1cdHN0cnVjdCBpbmV0X3NvY2sgKm5ld2luZXQgPSBpbmV0X3NrKG5ld3NrKTtcbi0tXG5uZXQvaXB2NC9pcG1yLmM9NDQyPXN0YXRpYyB2b2lkIGlwbXJfZnJlZV90YWJsZShzdHJ1Y3QgbXJfdGFibGUgKm1ydCwgc3RydWN0IGxpc3RfaGVhZCAqZGV2X2tpbGxfbGlzdClcbm5ldC9pcHY0L2lwbXIuYy00NDMte1xubmV0L2lwdjQvaXBtci5jOjQ0NDpcdHN0cnVjdCBuZXQgKm5ldCA9IHJlYWRfcG5ldChcdTAwMjZtcnQtXHUwMDNlbmV0KTtcbm5ldC9pcHY0L2lwbXIuYy00NDUtXHRMSVNUX0hFQUQoaXBtcl9kZXZfa2lsbF9saXN0KTtcbi0tXG5uZXQvaXB2NC9pcG1yLmM9Njg3PXN0YXRpYyBpbnQgdmlmX2RlbGV0ZShzdHJ1Y3QgbXJfdGFibGUgKm1ydCwgaW50IHZpZmksIGludCBub3RpZnksXG4tLVxubmV0L2lwdjQvaXBtci5jLTY4OS17XG5uZXQvaXB2NC9pcG1yLmM6NjkwOlx0c3RydWN0IG5ldCAqbmV0ID0gcmVhZF9wbmV0KFx1MDAyNm1ydC1cdTAwM2VuZXQpO1xubmV0L2lwdjQvaXBtci5jLTY5MS1cdHN0cnVjdCB2aWZfZGV2aWNlICp2O1xuLS1cbm5ldC9pcHY0L2lwbXIuYz03NTg9c3RhdGljIHZvaWQgaXBtcl9kZXN0cm95X3VucmVzKHN0cnVjdCBtcl90YWJsZSAqbXJ0LCBzdHJ1Y3QgbWZjX2NhY2hlICpjKVxubmV0L2lwdjQvaXBtci5jLTc1OS17XG5uZXQvaXB2NC9pcG1yLmM6NzYwOlx0c3RydWN0IG5ldCAqbmV0ID0gcmVhZF9wbmV0KFx1MDAyNm1ydC1cdTAwM2VuZXQpO1xubmV0L2lwdjQvaXBtci5jLTc2MS1cdHN0cnVjdCBza19idWZmICpza2I7XG4tLVxubmV0L2lwdjQvaXBtci5jPTExNDI9c3RhdGljIGludCBpcG1yX2NhY2hlX3VucmVzb2x2ZWQoc3RydWN0IG1yX3RhYmxlICptcnQsIHZpZmlfdCB2aWZpLFxuLS1cbm5ldC9pcHY0L2lwbXIuYy0xMTQ0LXtcbm5ldC9pcHY0L2lwbXIuYzoxMTQ1Olx0c3RydWN0IG5ldCAqbmV0ID0gcmVhZF9wbmV0KFx1MDAyNm1ydC1cdTAwM2VuZXQpO1xubmV0L2lwdjQvaXBtci5jLTExNDYtXHRjb25zdCBzdHJ1Y3QgaXBoZHIgKmlwaCA9IGlwX2hkcihza2IpO1xuLS1cbm5ldC9pcHY0L2lwbXIuYz0xMjIxPXN0YXRpYyBpbnQgaXBtcl9tZmNfZGVsZXRlKHN0cnVjdCBtcl90YWJsZSAqbXJ0LCBzdHJ1Y3QgbWZjY3RsICptZmMsIGludCBwYXJlbnQpXG5uZXQvaXB2NC9pcG1yLmMtMTIyMi17XG5uZXQvaXB2NC9pcG1yLmM6MTIyMzpcdHN0cnVjdCBuZXQgKm5ldCA9IHJlYWRfcG5ldChcdTAwMjZtcnQtXHUwMDNlbmV0KTtcbm5ldC9pcHY0L2lwbXIuYy0xMjI0LVx0c3RydWN0IG1mY19jYWNoZSAqYztcbi0tXG5uZXQvaXB2NC9pcG1yLmM9MTMyMj1zdGF0aWMgdm9pZCBtcm91dGVfY2xlYW5fdGFibGVzKHN0cnVjdCBtcl90YWJsZSAqbXJ0LCBpbnQgZmxhZ3MsXG4tLVxubmV0L2lwdjQvaXBtci5jLTEzMjQte1xubmV0L2lwdjQvaXBtci5jOjEzMjU6XHRzdHJ1Y3QgbmV0ICpuZXQgPSByZWFkX3BuZXQoXHUwMDI2bXJ0LVx1MDAzZW5ldCk7XG5uZXQvaXB2NC9pcG1yLmMtMTMyNi1cdHN0cnVjdCBtZmNfY2FjaGUgKmNhY2hlO1xuLS1cbm5ldC9pcHY0L2lwbXIuYz0yNTgyPXN0YXRpYyB2b2lkIG1yb3V0ZV9uZXRsaW5rX2V2ZW50KHN0cnVjdCBtcl90YWJsZSAqbXJ0LCBzdHJ1Y3QgbWZjX2NhY2hlICptZmMsXG4tLVxubmV0L2lwdjQvaXBtci5jLTI1ODQte1xubmV0L2lwdjQvaXBtci5jOjI1ODU6XHRzdHJ1Y3QgbmV0ICpuZXQgPSByZWFkX3BuZXQoXHUwMDI2bXJ0LVx1MDAzZW5ldCk7XG5uZXQvaXB2NC9pcG1yLmMtMjU4Ni1cdHN0cnVjdCBza19idWZmICpza2I7XG4tLVxubmV0L2lwdjQvaXBtci5jPTI2MjI9c3RhdGljIHZvaWQgaWdtcG1zZ19uZXRsaW5rX2V2ZW50KGNvbnN0IHN0cnVjdCBtcl90YWJsZSAqbXJ0LCBzdHJ1Y3Qgc2tfYnVmZiAqcGt0KVxubmV0L2lwdjQvaXBtci5jLTI2MjMte1xubmV0L2lwdjQvaXBtci5jOjI2MjQ6XHRzdHJ1Y3QgbmV0ICpuZXQgPSByZWFkX3BuZXQoXHUwMDI2bXJ0LVx1MDAzZW5ldCk7XG5uZXQvaXB2NC9pcG1yLmMtMjYyNS1cdHN0cnVjdCBubG1zZ2hkciAqbmxoO1xuLS1cbm5ldC9pcHY0L3RjcF90aW1lci5jPTc1Mz1ub2lubGluZV9mb3JfdHJhY2luZyB2b2lkIHRjcF9zeW5fYWNrX3RpbWVvdXQoY29uc3Qgc3RydWN0IHJlcXVlc3Rfc29jayAqcmVxKVxubmV0L2lwdjQvdGNwX3RpbWVyLmMtNzU0LXtcbm5ldC9pcHY0L3RjcF90aW1lci5jOjc1NTpcdHN0cnVjdCBuZXQgKm5ldCA9IHJlYWRfcG5ldChcdTAwMjZpbmV0X3JzayhyZXEpLVx1MDAzZWlyZXFfbmV0KTtcbm5ldC9pcHY0L3RjcF90aW1lci5jLTc1Ni1cbi0tXG5uZXQvaXB2Ni9pcDZtci5jPTQyMD1zdGF0aWMgdm9pZCBpcDZtcl9mcmVlX3RhYmxlKHN0cnVjdCBtcl90YWJsZSAqbXJ0LFxuLS1cbm5ldC9pcHY2L2lwNm1yLmMtNDIyLXtcbm5ldC9pcHY2L2lwNm1yLmM6NDIzOlx0c3RydWN0IG5ldCAqbmV0ID0gcmVhZF9wbmV0KFx1MDAyNm1ydC1cdTAwM2VuZXQpO1xubmV0L2lwdjYvaXA2bXIuYy00MjQtXHRMSVNUX0hFQUQoaXA2bXJfZGV2X2tpbGxfbGlzdCk7XG4tLVxubmV0L2lwdjYvaXA2bXIuYz03NDI9c3RhdGljIGludCBtaWY2X2RlbGV0ZShzdHJ1Y3QgbXJfdGFibGUgKm1ydCwgaW50IHZpZmksIGludCBub3RpZnksXG4tLVxubmV0L2lwdjYvaXA2bXIuYy03NTctXG5uZXQvaXB2Ni9pcDZtci5jOjc1ODpcdGNhbGxfaXA2bXJfdmlmX2VudHJ5X25vdGlmaWVycyhyZWFkX3BuZXQoXHUwMDI2bXJ0LVx1MDAzZW5ldCksXG5uZXQvaXB2Ni9pcDZtci5jLTc1OS1cdFx0XHRcdCAgICAgICBGSUJfRVZFTlRfVklGX0RFTCwgdiwgZGV2LFxuLS1cbm5ldC9pcHY2L2lwNm1yLmM9ODE1PXN0YXRpYyB2b2lkIGlwNm1yX2Rlc3Ryb3lfdW5yZXMoc3RydWN0IG1yX3RhYmxlICptcnQsIHN0cnVjdCBtZmM2X2NhY2hlICpjKVxubmV0L2lwdjYvaXA2bXIuYy04MTYte1xubmV0L2lwdjYvaXA2bXIuYzo4MTc6XHRzdHJ1Y3QgbmV0ICpuZXQgPSByZWFkX3BuZXQoXHUwMDI2bXJ0LVx1MDAzZW5ldCk7XG5uZXQvaXB2Ni9pcDZtci5jLTgxOC1cdHN0cnVjdCBza19idWZmICpza2I7XG4tLVxubmV0L2lwdjYvaXA2bXIuYz0xMTgzPXN0YXRpYyBpbnQgaXA2bXJfY2FjaGVfdW5yZXNvbHZlZChzdHJ1Y3QgbXJfdGFibGUgKm1ydCwgbWlmaV90IG1pZmksXG4tLVxubmV0L2lwdjYvaXA2bXIuYy0xMTg1LXtcbm5ldC9pcHY2L2lwNm1yLmM6MTE4NjpcdHN0cnVjdCBuZXQgKm5ldCA9IHJlYWRfcG5ldChcdTAwMjZtcnQtXHUwMDNlbmV0KTtcbm5ldC9pcHY2L2lwNm1yLmMtMTE4Ny1cdHN0cnVjdCBtZmM2X2NhY2hlICpjID0gTlVMTDtcbi0tXG5uZXQvaXB2Ni9pcDZtci5jPTEyNjc9c3RhdGljIGludCBpcDZtcl9tZmNfZGVsZXRlKHN0cnVjdCBtcl90YWJsZSAqbXJ0LCBzdHJ1Y3QgbWY2Y2N0bCAqbWZjLFxuLS1cbm5ldC9pcHY2L2lwNm1yLmMtMTI4MC1cbm5ldC9pcHY2L2lwNm1yLmM6MTI4MTpcdGNhbGxfaXA2bXJfbWZjX2VudHJ5X25vdGlmaWVycyhyZWFkX3BuZXQoXHUwMDI2bXJ0LVx1MDAzZW5ldCksXG5uZXQvaXB2Ni9pcDZtci5jLTEyODItXHRcdFx0XHQgICAgICAgRklCX0VWRU5UX0VOVFJZX0RFTCwgYywgbXJ0LVx1MDAzZWlkKTtcbi0tXG5uZXQvaXB2Ni9pcDZtci5jPTE1Njg9c3RhdGljIHZvaWQgbXJvdXRlX2NsZWFuX3RhYmxlcyhzdHJ1Y3QgbXJfdGFibGUgKm1ydCwgaW50IGZsYWdzLFxuLS1cbm5ldC9pcHY2L2lwNm1yLmMtMTU3MC17XG5uZXQvaXB2Ni9pcDZtci5jOjE1NzE6XHRzdHJ1Y3QgbmV0ICpuZXQgPSByZWFkX3BuZXQoXHUwMDI2bXJ0LVx1MDAzZW5ldCk7XG5uZXQvaXB2Ni9pcDZtci5jLTE1NzItXHRzdHJ1Y3QgbXJfbWZjICpjLCAqdG1wO1xuLS1cbm5ldC9pcHY2L2lwNm1yLmM9MjYwNz1zdGF0aWMgdm9pZCBtcjZfbmV0bGlua19ldmVudChzdHJ1Y3QgbXJfdGFibGUgKm1ydCwgc3RydWN0IG1mYzZfY2FjaGUgKm1mYyxcbi0tXG5uZXQvaXB2Ni9pcDZtci5jLTI2MDkte1xubmV0L2lwdjYvaXA2bXIuYzoyNjEwOlx0c3RydWN0IG5ldCAqbmV0ID0gcmVhZF9wbmV0KFx1MDAyNm1ydC1cdTAwM2VuZXQpO1xubmV0L2lwdjYvaXA2bXIuYy0yNjExLVx0c3RydWN0IHNrX2J1ZmYgKnNrYjtcbi0tXG5uZXQvaXB2Ni9pcDZtci5jPTI2NDc9c3RhdGljIHZvaWQgbXJ0Nm1zZ19uZXRsaW5rX2V2ZW50KGNvbnN0IHN0cnVjdCBtcl90YWJsZSAqbXJ0LCBzdHJ1Y3Qgc2tfYnVmZiAqcGt0KVxubmV0L2lwdjYvaXA2bXIuYy0yNjQ4LXtcbm5ldC9pcHY2L2lwNm1yLmM6MjY0OTpcdHN0cnVjdCBuZXQgKm5ldCA9IHJlYWRfcG5ldChcdTAwMjZtcnQtXHUwMDNlbmV0KTtcbm5ldC9pcHY2L2lwNm1yLmMtMjY1MC1cdHN0cnVjdCBubG1zZ2hkciAqbmxoO1xuLS1cbm5ldC9tcHRjcC9zeW5jb29raWVzLmM9NzE9dm9pZCBzdWJmbG93X2luaXRfcmVxX2Nvb2tpZV9qb2luX3NhdmUoY29uc3Qgc3RydWN0IG1wdGNwX3N1YmZsb3dfcmVxdWVzdF9zb2NrICpzdWJmbG93X3JlcSxcbi0tXG5uZXQvbXB0Y3Avc3luY29va2llcy5jLTczLXtcbm5ldC9tcHRjcC9zeW5jb29raWVzLmM6NzQ6XHRzdHJ1Y3QgbmV0ICpuZXQgPSByZWFkX3BuZXQoXHUwMDI2c3ViZmxvd19yZXEtXHUwMDNlc2sucmVxLmlyZXFfbmV0KTtcbm5ldC9tcHRjcC9zeW5jb29raWVzLmMtNzUtXHR1MzIgaSA9IG1wdGNwX2pvaW5fZW50cnlfaGFzaChza2IsIG5ldCk7XG4tLVxubmV0L21wdGNwL3N5bmNvb2tpZXMuYz05Mj1ib29sIG1wdGNwX3Rva2VuX2pvaW5fY29va2llX2luaXRfc3RhdGUoc3RydWN0IG1wdGNwX3N1YmZsb3dfcmVxdWVzdF9zb2NrICpzdWJmbG93X3JlcSxcbi0tXG5uZXQvbXB0Y3Avc3luY29va2llcy5jLTk0LXtcbm5ldC9tcHRjcC9zeW5jb29raWVzLmM6OTU6XHRzdHJ1Y3QgbmV0ICpuZXQgPSByZWFkX3BuZXQoXHUwMDI2c3ViZmxvd19yZXEtXHUwMDNlc2sucmVxLmlyZXFfbmV0KTtcbm5ldC9tcHRjcC9zeW5jb29raWVzLmMtOTYtXHR1MzIgaSA9IG1wdGNwX2pvaW5fZW50cnlfaGFzaChza2IsIG5ldCk7XG4tLVxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfYnJvYWRjYXN0LmM9MTk9aW50IG5mX2Nvbm50cmFja19icm9hZGNhc3RfaGVscChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2Jyb2FkY2FzdC5jLTI0LVx0Y29uc3Qgc3RydWN0IG5mX2Nvbm50cmFja19oZWxwZXIgKmhlbHBlcjtcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2Jyb2FkY2FzdC5jOjI1Olx0c3RydWN0IG5ldCAqbmV0ID0gcmVhZF9wbmV0KFx1MDAyNmN0LVx1MDAzZWN0X25ldCk7XG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19icm9hZGNhc3QuYy0yNi1cdHN0cnVjdCBuZl9jb25udHJhY2tfZXhwZWN0ICpleHA7XG4tLVxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfZXhwZWN0LmM9MTE3PW5mX2N0X2V4cF9lcXVhbChjb25zdCBzdHJ1Y3QgbmZfY29ubnRyYWNrX3R1cGxlICp0dXBsZSxcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19leHBlY3QuYy0xMjItXHRyZXR1cm4gbmZfY3RfdHVwbGVfbWFza19jbXAodHVwbGUsIFx1MDAyNmktXHUwMDNldHVwbGUsIFx1MDAyNmktXHUwMDNlbWFzaykgXHUwMDI2XHUwMDI2XG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19leHBlY3QuYzoxMjM6XHQgICAgICAgbmV0X2VxKG5ldCwgcmVhZF9wbmV0KFx1MDAyNmktXHUwMDNlbmV0KSkgXHUwMDI2XHUwMDI2XG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19leHBlY3QuYy0xMjQtXHQgICAgICAgbmZfY3RfZXhwX3pvbmVfZXF1YWxfYW55KGksIHpvbmUpO1xuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2V4cGVjdC5jPTMyND12b2lkIG5mX2N0X2V4cGVjdF9pbml0KHN0cnVjdCBuZl9jb25udHJhY2tfZXhwZWN0ICpleHAsIHVuc2lnbmVkIGludCBjbGFzcyxcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19leHBlY3QuYy0zMzEtXHRzdHJ1Y3QgbmZfY29ubiAqY3QgPSBleHAtXHUwMDNlbWFzdGVyO1xubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfZXhwZWN0LmM6MzMyOlx0c3RydWN0IG5ldCAqbmV0ID0gcmVhZF9wbmV0KFx1MDAyNmN0LVx1MDAzZWN0X25ldCk7XG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19leHBlY3QuYy0zMzMtXHRzdHJ1Y3QgbmZfY29ubnRyYWNrX2VjYWNoZSAqZWNhY2hlO1xuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX25ldGxpbmsuYz0zNTIwPWN0bmV0bGlua19hbGxvY19leHBlY3QoY29uc3Qgc3RydWN0IG5sYXR0ciAqIGNvbnN0IGNkYVtdLCBzdHJ1Y3QgbmZfY29ubiAqY3QsXG4tLVxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfbmV0bGluay5jLTM1MjQte1xubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfbmV0bGluay5jOjM1MjU6XHRzdHJ1Y3QgbmV0ICpuZXQgPSByZWFkX3BuZXQoXHUwMDI2Y3QtXHUwMDNlY3RfbmV0KTtcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX25ldGxpbmsuYy0zNTI2LVx0c3RydWN0IG5mX2Nvbm50cmFja19oZWxwZXIgKmhlbHBlcjtcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfb2ZmbG9hZC5jPTg2OD1zdGF0aWMgaW50IG5mX2Zsb3dfb2ZmbG9hZF9hbGxvYyhjb25zdCBzdHJ1Y3QgZmxvd19vZmZsb2FkX3dvcmsgKm9mZmxvYWQsXG4tLVxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX29mZmxvYWQuYy04NzAte1xubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX29mZmxvYWQuYzo4NzE6XHRzdHJ1Y3QgbmV0ICpuZXQgPSByZWFkX3BuZXQoXHUwMDI2b2ZmbG9hZC1cdTAwM2VmbG93dGFibGUtXHUwMDNlbmV0KTtcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9vZmZsb2FkLmMtODcyLVxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9vZmZsb2FkLmM9MTAzNz1zdGF0aWMgdm9pZCBmbG93X29mZmxvYWRfd29ya19oYW5kbGVyKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfb2ZmbG9hZC5jLTEwNDItXHRvZmZsb2FkID0gY29udGFpbmVyX29mKHdvcmssIHN0cnVjdCBmbG93X29mZmxvYWRfd29yaywgd29yayk7XG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfb2ZmbG9hZC5jOjEwNDM6XHRuZXQgPSByZWFkX3BuZXQoXHUwMDI2b2ZmbG9hZC1cdTAwM2VmbG93dGFibGUtXHUwMDNlbmV0KTtcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9vZmZsb2FkLmMtMTA0NC1cdHN3aXRjaCAob2ZmbG9hZC1cdTAwM2VjbWQpIHtcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfb2ZmbG9hZC5jPTEwNjU9c3RhdGljIHZvaWQgZmxvd19vZmZsb2FkX3F1ZXVlX3dvcmsoc3RydWN0IGZsb3dfb2ZmbG9hZF93b3JrICpvZmZsb2FkKVxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX29mZmxvYWQuYy0xMDY2LXtcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9vZmZsb2FkLmM6MTA2NzpcdHN0cnVjdCBuZXQgKm5ldCA9IHJlYWRfcG5ldChcdTAwMjZvZmZsb2FkLVx1MDAzZWZsb3d0YWJsZS1cdTAwM2VuZXQpO1xubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX29mZmxvYWQuYy0xMDY4LVxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jPTY4NzQ9dm9pZCBuZnRfc2V0X2VsZW1fZGVzdHJveShjb25zdCBzdHJ1Y3QgbmZ0X3NldCAqc2V0LFxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jLTY4NzgtXHRzdHJ1Y3QgbmZ0X2N0eCBjdHggPSB7XG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYzo2ODc5Olx0XHQubmV0XHQ9IHJlYWRfcG5ldChcdTAwMjZzZXQtXHUwMDNlbmV0KSxcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jLTY4ODAtXHRcdC5mYW1pbHlcdD0gc2V0LVx1MDAzZXRhYmxlLVx1MDAzZWZhbWlseSxcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYz0xMDQ5MT1zdGF0aWMgdm9pZCBuZnRfdHJhbnNfZ2NfdHJhbnNfZnJlZShzdHJ1Y3QgcmN1X2hlYWQgKnJjdSlcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYy0xMDQ5OC1cdHRyYW5zID0gY29udGFpbmVyX29mKHJjdSwgc3RydWN0IG5mdF90cmFuc19nYywgcmN1KTtcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jOjEwNDk5Olx0Y3R4Lm5ldFx0PSByZWFkX3BuZXQoXHUwMDI2dHJhbnMtXHUwMDNlc2V0LVx1MDAzZW5ldCk7XG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYy0xMDUwMC1cbi0tXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYz0xMDU1OT1zdHJ1Y3QgbmZ0X3RyYW5zX2djICpuZnRfdHJhbnNfZ2NfYWxsb2Moc3RydWN0IG5mdF9zZXQgKnNldCxcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYy0xMDU2MS17XG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYzoxMDU2MjpcdHN0cnVjdCBuZXQgKm5ldCA9IHJlYWRfcG5ldChcdTAwMjZzZXQtXHUwMDNlbmV0KTtcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jLTEwNTYzLVx0c3RydWN0IG5mdF90cmFuc19nYyAqdHJhbnM7XG4tLVxubmV0L25ldGZpbHRlci9uZnRfZHluc2V0LmM9MzA9c3RhdGljIGludCBuZnRfZHluc2V0X2V4cHJfc2V0dXAoY29uc3Qgc3RydWN0IG5mdF9keW5zZXQgKnByaXYsXG4tLVxubmV0L25ldGZpbHRlci9uZnRfZHluc2V0LmMtMzQtXHRzdHJ1Y3QgbmZ0X2N0eCBjdHggPSB7XG5uZXQvbmV0ZmlsdGVyL25mdF9keW5zZXQuYzozNTpcdFx0Lm5ldFx0PSByZWFkX3BuZXQoXHUwMDI2cHJpdi1cdTAwM2VzZXQtXHUwMDNlbmV0KSxcbm5ldC9uZXRmaWx0ZXIvbmZ0X2R5bnNldC5jLTM2LVx0XHQuZmFtaWx5XHQ9IHByaXYtXHUwMDNlc2V0LVx1MDAzZXRhYmxlLVx1MDAzZWZhbWlseSxcbi0tXG5uZXQvbmV0ZmlsdGVyL25mdF9zZXRfaGFzaC5jPTM5Mz1zdGF0aWMgYm9vbCBuZnRfcmhhc2hfZXhwcl9uZWVkc19nY19ydW4oY29uc3Qgc3RydWN0IG5mdF9zZXQgKnNldCxcbi0tXG5uZXQvbmV0ZmlsdGVyL25mdF9zZXRfaGFzaC5jLTQwMS1cdFx0aWYgKGV4cHItXHUwMDNlb3BzLVx1MDAzZWdjIFx1MDAyNlx1MDAyNlxubmV0L25ldGZpbHRlci9uZnRfc2V0X2hhc2guYzo0MDI6XHRcdCAgICBleHByLVx1MDAzZW9wcy1cdTAwM2VnYyhyZWFkX3BuZXQoXHUwMDI2c2V0LVx1MDAzZW5ldCksIGV4cHIpIFx1MDAyNlx1MDAyNlxubmV0L25ldGZpbHRlci9uZnRfc2V0X2hhc2guYy00MDMtXHRcdCAgICBzZXQtXHUwMDNlZmxhZ3MgXHUwMDI2IE5GVF9TRVRfRVZBTClcbi0tXG5uZXQvbmV0ZmlsdGVyL25mdF9zZXRfaGFzaC5jPTQxMD1zdGF0aWMgdm9pZCBuZnRfcmhhc2hfZ2Moc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZ0X3NldF9oYXNoLmMtNDIyLVx0c2V0ICA9IG5mdF9zZXRfY29udGFpbmVyX29mKHByaXYpO1xubmV0L25ldGZpbHRlci9uZnRfc2V0X2hhc2guYzo0MjM6XHRuZXQgID0gcmVhZF9wbmV0KFx1MDAyNnNldC1cdTAwM2VuZXQpO1xubmV0L25ldGZpbHRlci9uZnRfc2V0X2hhc2guYy00MjQtXHRuZnRfbmV0ID0gbmZ0X3Blcm5ldChuZXQpO1xuLS1cbm5ldC9uZXRmaWx0ZXIvbmZ0X3NldF9waXBhcG8uYz0xMjQzPXN0YXRpYyBib29sIG5mdF9waXBhcG9fdHJhbnNhY3Rpb25fbXV0ZXhfaGVsZChjb25zdCBzdHJ1Y3QgbmZ0X3NldCAqc2V0KVxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZ0X3NldF9waXBhcG8uYy0xMjQ1LSNpZmRlZiBDT05GSUdfUFJPVkVfTE9DS0lOR1xubmV0L25ldGZpbHRlci9uZnRfc2V0X3BpcGFwby5jOjEyNDY6XHRjb25zdCBzdHJ1Y3QgbmV0ICpuZXQgPSByZWFkX3BuZXQoXHUwMDI2c2V0LVx1MDAzZW5ldCk7XG5uZXQvbmV0ZmlsdGVyL25mdF9zZXRfcGlwYXBvLmMtMTI0Ny1cbi0tXG5uZXQvbmV0ZmlsdGVyL25mdF9zZXRfcGlwYXBvLmM9MTcxMD1zdGF0aWMgdm9pZCBwaXBhcG9fZ2Nfc2NhbihzdHJ1Y3QgbmZ0X3NldCAqc2V0LCBzdHJ1Y3QgbmZ0X3BpcGFwb19tYXRjaCAqbSlcbi0tXG5uZXQvbmV0ZmlsdGVyL25mdF9zZXRfcGlwYXBvLmMtMTcxMi1cdHN0cnVjdCBuZnRfcGlwYXBvICpwcml2ID0gbmZ0X3NldF9wcml2KHNldCk7XG5uZXQvbmV0ZmlsdGVyL25mdF9zZXRfcGlwYXBvLmM6MTcxMzpcdHN0cnVjdCBuZXQgKm5ldCA9IHJlYWRfcG5ldChcdTAwMjZzZXQtXHUwMDNlbmV0KTtcbm5ldC9uZXRmaWx0ZXIvbmZ0X3NldF9waXBhcG8uYy0xNzE0LVx0dW5zaWduZWQgaW50IHJ1bGVzX2YwLCBmaXJzdF9ydWxlID0gMDtcbi0tXG5uZXQvbmV0ZmlsdGVyL25mdF9zZXRfcmJ0cmVlLmM9MjEyPW5mdF9yYnRyZWVfZ2NfZWxlbShjb25zdCBzdHJ1Y3QgbmZ0X3NldCAqX19zZXQsIHN0cnVjdCBuZnRfcmJ0cmVlICpwcml2LFxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZ0X3NldF9yYnRyZWUuYy0yMTYtXHRzdHJ1Y3QgcmJfbm9kZSAqcHJldiA9IHJiX3ByZXYoXHUwMDI2cmJlLVx1MDAzZW5vZGUpO1xubmV0L25ldGZpbHRlci9uZnRfc2V0X3JidHJlZS5jOjIxNzpcdHN0cnVjdCBuZXQgKm5ldCA9IHJlYWRfcG5ldChcdTAwMjZzZXQtXHUwMDNlbmV0KTtcbm5ldC9uZXRmaWx0ZXIvbmZ0X3NldF9yYnRyZWUuYy0yMTgtXHRzdHJ1Y3QgbmZ0X3JidHJlZV9lbGVtICpyYmVfcHJldjtcbi0tXG5uZXQvbmV0ZmlsdGVyL25mdF9zZXRfcmJ0cmVlLmM9ODkxPXN0YXRpYyB2b2lkIG5mdF9yYnRyZWVfZ2Nfc2NhbihzdHJ1Y3QgbmZ0X3NldCAqc2V0KVxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZ0X3NldF9yYnRyZWUuYy04OTQtXHRzdHJ1Y3QgbmZ0X3JidHJlZV9lbGVtICpyYmUsICpyYmVfZW5kID0gTlVMTDtcbm5ldC9uZXRmaWx0ZXIvbmZ0X3NldF9yYnRyZWUuYzo4OTU6XHRzdHJ1Y3QgbmV0ICpuZXQgPSByZWFkX3BuZXQoXHUwMDI2c2V0LVx1MDAzZW5ldCk7XG5uZXQvbmV0ZmlsdGVyL25mdF9zZXRfcmJ0cmVlLmMtODk2LVx0dTY0IHRzdGFtcCA9IG5mdF9uZXRfdHN0YW1wKG5ldCk7XG4tLVxubmV0L25ldGZpbHRlci9uZnRfc2V0X3JidHJlZS5jPTEwMzg9c3RhdGljIHZvaWQgbmZ0X3JidHJlZV9jb21taXQoc3RydWN0IG5mdF9zZXQgKnNldClcbi0tXG5uZXQvbmV0ZmlsdGVyL25mdF9zZXRfcmJ0cmVlLmMtMTEwNy1cdG9sZCA9IHJjdV9yZXBsYWNlX3BvaW50ZXIocHJpdi1cdTAwM2VhcnJheSwgcHJpdi1cdTAwM2VhcnJheV9uZXh0LFxubmV0L25ldGZpbHRlci9uZnRfc2V0X3JidHJlZS5jOjExMDg6XHRcdFx0XHQgIGxvY2tkZXBfaXNfaGVsZChcdTAwMjZuZnRfcGVybmV0KHJlYWRfcG5ldChcdTAwMjZzZXQtXHUwMDNlbmV0KSktXHUwMDNlY29tbWl0X211dGV4KSk7XG5uZXQvbmV0ZmlsdGVyL25mdF9zZXRfcmJ0cmVlLmMtMTEwOS1cdHByaXYtXHUwMDNlYXJyYXlfbmV4dCA9IE5VTEw7XG4tLVxubmV0L25ldGxpbmsvYWZfbmV0bGluay5jPTQ3NT1zdGF0aWMgaW5saW5lIGludCBuZXRsaW5rX2NvbXBhcmUoc3RydWN0IHJoYXNodGFibGVfY29tcGFyZV9hcmcgKmFyZyxcbi0tXG5uZXQvbmV0bGluay9hZl9uZXRsaW5rLmMtNDgxLVx0cmV0dXJuIG5say1cdTAwM2Vwb3J0aWQgIT0geC1cdTAwM2Vwb3J0aWQgfHxcbm5ldC9uZXRsaW5rL2FmX25ldGxpbmsuYzo0ODI6XHQgICAgICAgIW5ldF9lcShzb2NrX25ldChcdTAwMjZubGstXHUwMDNlc2spLCByZWFkX3BuZXQoXHUwMDI2eC1cdTAwM2VwbmV0KSk7XG5uZXQvbmV0bGluay9hZl9uZXRsaW5rLmMtNDgzLX1cbi0tXG5uZXQvb3BlbnZzd2l0Y2gvYWN0aW9ucy5jPTgyOT1zdGF0aWMgdm9pZCBkb19vdXRwdXQoc3RydWN0IGRhdGFwYXRoICpkcCwgc3RydWN0IHNrX2J1ZmYgKnNrYiwgaW50IG91dF9wb3J0LFxuLS1cbm5ldC9vcGVudnN3aXRjaC9hY3Rpb25zLmMtODQ2LVx0XHR9IGVsc2UgaWYgKG1ydSBcdTAwM2M9IHZwb3J0LVx1MDAzZWRldi1cdTAwM2VtdHUpIHtcbm5ldC9vcGVudnN3aXRjaC9hY3Rpb25zLmM6ODQ3Olx0XHRcdHN0cnVjdCBuZXQgKm5ldCA9IHJlYWRfcG5ldChcdTAwMjZkcC1cdTAwM2VuZXQpO1xubmV0L29wZW52c3dpdGNoL2FjdGlvbnMuYy04NDgtXG4tLVxubmV0L29wZW52c3dpdGNoL2Nvbm50cmFjay5jPTU2MT1zdGF0aWMgYm9vbCBza2JfbmZjdF9jYWNoZWQoc3RydWN0IG5ldCAqbmV0LFxuLS1cbm5ldC9vcGVudnN3aXRjaC9jb25udHJhY2suYy01NzgtXG5uZXQvb3BlbnZzd2l0Y2gvY29ubnRyYWNrLmM6NTc5Olx0aWYgKCFuZXRfZXEobmV0LCByZWFkX3BuZXQoXHUwMDI2Y3QtXHUwMDNlY3RfbmV0KSkpXG5uZXQvb3BlbnZzd2l0Y2gvY29ubnRyYWNrLmMtNTgwLVx0XHRyZXR1cm4gZmFsc2U7XG4tLVxubmV0L29wZW52c3dpdGNoL2RhdGFwYXRoLmg9MjYxPXN0YXRpYyBpbmxpbmUgc3RydWN0IG5ldCAqb3ZzX2RwX2dldF9uZXQoY29uc3Qgc3RydWN0IGRhdGFwYXRoICpkcClcbm5ldC9vcGVudnN3aXRjaC9kYXRhcGF0aC5oLTI2Mi17XG5uZXQvb3BlbnZzd2l0Y2gvZGF0YXBhdGguaDoyNjM6XHRyZXR1cm4gcmVhZF9wbmV0KFx1MDAyNmRwLVx1MDAzZW5ldCk7XG5uZXQvb3BlbnZzd2l0Y2gvZGF0YXBhdGguaC0yNjQtfVxuLS1cbm5ldC9wYWNrZXQvYWZfcGFja2V0LmM9MTQ3MT1zdGF0aWMgaW50IHBhY2tldF9yY3ZfZmFub3V0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXG4tLVxubmV0L3BhY2tldC9hZl9wYWNrZXQuYy0xNDc1LVx0dW5zaWduZWQgaW50IG51bSA9IFJFQURfT05DRShmLVx1MDAzZW51bV9tZW1iZXJzKTtcbm5ldC9wYWNrZXQvYWZfcGFja2V0LmM6MTQ3NjpcdHN0cnVjdCBuZXQgKm5ldCA9IHJlYWRfcG5ldChcdTAwMjZmLVx1MDAzZW5ldCk7XG5uZXQvcGFja2V0L2FmX3BhY2tldC5jLTE0NzctXHRzdHJ1Y3QgcGFja2V0X3NvY2sgKnBvO1xuLS1cbm5ldC9wYWNrZXQvYWZfcGFja2V0LmM9MTY2Mz1zdGF0aWMgYm9vbCBfX2Zhbm91dF9pZF9pc19mcmVlKHN0cnVjdCBzb2NrICpzaywgdTE2IGNhbmRpZGF0ZV9pZClcbi0tXG5uZXQvcGFja2V0L2FmX3BhY2tldC5jLTE2NjgtXHRcdGlmIChmLVx1MDAzZWlkID09IGNhbmRpZGF0ZV9pZCBcdTAwMjZcdTAwMjZcbm5ldC9wYWNrZXQvYWZfcGFja2V0LmM6MTY2OTpcdFx0ICAgIHJlYWRfcG5ldChcdTAwMjZmLVx1MDAzZW5ldCkgPT0gc29ja19uZXQoc2spKSB7XG5uZXQvcGFja2V0L2FmX3BhY2tldC5jLTE2NzAtXHRcdFx0cmV0dXJuIGZhbHNlO1xuLS1cbm5ldC9wYWNrZXQvYWZfcGFja2V0LmM9MTY5Mz1zdGF0aWMgaW50IGZhbm91dF9hZGQoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgZmFub3V0X2FyZ3MgKmFyZ3MpXG4tLVxubmV0L3BhY2tldC9hZl9wYWNrZXQuYy0xNzUzLVx0XHRpZiAoZi1cdTAwM2VpZCA9PSBpZCBcdTAwMjZcdTAwMjZcbm5ldC9wYWNrZXQvYWZfcGFja2V0LmM6MTc1NDpcdFx0ICAgIHJlYWRfcG5ldChcdTAwMjZmLVx1MDAzZW5ldCkgPT0gc29ja19uZXQoc2spKSB7XG5uZXQvcGFja2V0L2FmX3BhY2tldC5jLTE3NTUtXHRcdFx0bWF0Y2ggPSBmO1xuLS1cbm5ldC9wYWNrZXQvYWZfcGFja2V0LmMtMTc4Ny1cdFx0bWF0Y2gtXHUwMDNlcHJvdF9ob29rLmFmX3BhY2tldF9wcml2ID0gbWF0Y2g7XG5uZXQvcGFja2V0L2FmX3BhY2tldC5jOjE3ODg6XHRcdG1hdGNoLVx1MDAzZXByb3RfaG9vay5hZl9wYWNrZXRfbmV0ID0gcmVhZF9wbmV0KFx1MDAyNm1hdGNoLVx1MDAzZW5ldCk7XG5uZXQvcGFja2V0L2FmX3BhY2tldC5jLTE3ODktXHRcdG1hdGNoLVx1MDAzZXByb3RfaG9vay5pZF9tYXRjaCA9IG1hdGNoX2Zhbm91dF9ncm91cDtcbi0tXG5uZXQvcmRzL2xvb3AuYz0yMDA9c3RhdGljIHZvaWQgcmRzX2xvb3Bfa2lsbF9jb25ucyhzdHJ1Y3QgbmV0ICpuZXQpXG4tLVxubmV0L3Jkcy9sb29wLmMtMjA2LVx0bGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKGxjLCBfbGMsIFx1MDAyNmxvb3BfY29ubnMsIGxvb3Bfbm9kZSkgIHtcbm5ldC9yZHMvbG9vcC5jOjIwNzpcdFx0c3RydWN0IG5ldCAqY19uZXQgPSByZWFkX3BuZXQoXHUwMDI2bGMtXHUwMDNlY29ubi1cdTAwM2VjX25ldCk7XG5uZXQvcmRzL2xvb3AuYy0yMDgtXG4tLVxubmV0L3Jkcy9yZHMuaD0xNzg9c3RydWN0IG5ldCAqcmRzX2Nvbm5fbmV0KHN0cnVjdCByZHNfY29ubmVjdGlvbiAqY29ubilcbm5ldC9yZHMvcmRzLmgtMTc5LXtcbm5ldC9yZHMvcmRzLmg6MTgwOlx0cmV0dXJuIHJlYWRfcG5ldChcdTAwMjZjb25uLVx1MDAzZWNfbmV0KTtcbm5ldC9yZHMvcmRzLmgtMTgxLX1cbi0tXG5uZXQvcmRzL3RjcC5jPTYyOT1zdGF0aWMgdm9pZCByZHNfdGNwX2tpbGxfc29jayhzdHJ1Y3QgbmV0ICpuZXQpXG4tLVxubmV0L3Jkcy90Y3AuYy02NDEtXHRsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUodGMsIF90YywgXHUwMDI2cmRzX3RjcF9jb25uX2xpc3QsIHRfdGNwX25vZGUpIHtcbm5ldC9yZHMvdGNwLmM6NjQyOlx0XHRzdHJ1Y3QgbmV0ICpjX25ldCA9IHJlYWRfcG5ldChcdTAwMjZ0Yy1cdTAwM2V0X2NwYXRoLVx1MDAzZWNwX2Nvbm4tXHUwMDNlY19uZXQpO1xubmV0L3Jkcy90Y3AuYy02NDMtXG4tLVxubmV0L3Jkcy90Y3AuYz02OTQ9c3RhdGljIHZvaWQgcmRzX3RjcF9zeXNjdGxfcmVzZXQoc3RydWN0IG5ldCAqbmV0KVxuLS1cbm5ldC9yZHMvdGNwLmMtNjk5LVx0bGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKHRjLCBfdGMsIFx1MDAyNnJkc190Y3BfY29ubl9saXN0LCB0X3RjcF9ub2RlKSB7XG5uZXQvcmRzL3RjcC5jOjcwMDpcdFx0c3RydWN0IG5ldCAqY19uZXQgPSByZWFkX3BuZXQoXHUwMDI2dGMtXHUwMDNldF9jcGF0aC1cdTAwM2VjcF9jb25uLVx1MDAzZWNfbmV0KTtcbm5ldC9yZHMvdGNwLmMtNzAxLVxuLS1cbm5ldC9zY2hlZC9hY3RfY3QuYz03NTI9c3RhdGljIGJvb2wgdGNmX2N0X3NrYl9uZmN0X2NhY2hlZChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBza19idWZmICpza2IsXG4tLVxubmV0L3NjaGVkL2FjdF9jdC5jLTc2MC1cdFx0cmV0dXJuIGZhbHNlO1xubmV0L3NjaGVkL2FjdF9jdC5jOjc2MTpcdGlmICghbmV0X2VxKG5ldCwgcmVhZF9wbmV0KFx1MDAyNmN0LVx1MDAzZWN0X25ldCkpKVxubmV0L3NjaGVkL2FjdF9jdC5jLTc2Mi1cdFx0Z290byBkcm9wX2N0O1xuLS1cbm5ldC9zbWMvc21jX2liLmg9NzI9c3RhdGljIGlubGluZSBzdHJ1Y3QgbmV0ICpzbWNfaWJfbmV0KHN0cnVjdCBzbWNfaWJfZGV2aWNlICpzbWNpYmRldilcbi0tXG5uZXQvc21jL3NtY19pYi5oLTc0LVx0aWYgKHNtY2liZGV2IFx1MDAyNlx1MDAyNiBzbWNpYmRldi1cdTAwM2VpYmRldilcbm5ldC9zbWMvc21jX2liLmg6NzU6XHRcdHJldHVybiByZWFkX3BuZXQoXHUwMDI2c21jaWJkZXYtXHUwMDNlaWJkZXYtXHUwMDNlY29yZWRldi5yZG1hX25ldCk7XG5uZXQvc21jL3NtY19pYi5oLTc2LVx0cmV0dXJuIE5VTEw7XG4tLVxubmV0L3hmcm0veGZybV9wb2xpY3kuYz0xNDg2PXN0YXRpYyB1MzIgeGZybV9wb2xfYmluX2tleShjb25zdCB2b2lkICpkYXRhLCB1MzIgbGVuLCB1MzIgc2VlZClcbi0tXG5uZXQveGZybS94ZnJtX3BvbGljeS5jLTE0OTAtXG5uZXQveGZybS94ZnJtX3BvbGljeS5jOjE0OTE6XHRyZXR1cm4gamhhc2hfM3dvcmRzKGEsIGstXHUwMDNlaWZfaWQsIG5ldF9oYXNoX21peChyZWFkX3BuZXQoXHUwMDI2ay1cdTAwM2VuZXQpKSxcbm5ldC94ZnJtL3hmcm1fcG9saWN5LmMtMTQ5Mi1cdFx0XHQgICAgc2VlZCk7XG4tLVxubmV0L3hmcm0veGZybV9wb2xpY3kuYz0xNTAyPXN0YXRpYyBpbnQgeGZybV9wb2xfYmluX2NtcChzdHJ1Y3Qgcmhhc2h0YWJsZV9jb21wYXJlX2FyZyAqYXJnLFxuLS1cbm5ldC94ZnJtL3hmcm1fcG9saWN5LmMtMTUwOC1cbm5ldC94ZnJtL3hmcm1fcG9saWN5LmM6MTUwOTpcdGlmICghbmV0X2VxKHJlYWRfcG5ldChcdTAwMjZiLVx1MDAzZWsubmV0KSwgcmVhZF9wbmV0KFx1MDAyNmtleS1cdTAwM2VuZXQpKSlcbm5ldC94ZnJtL3hmcm1fcG9saWN5LmMtMTUxMC1cdFx0cmV0dXJuIC0xO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOSAwODozOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxODExOAoJCQkJCQkJb3V0cHV0OiAyNwoJCQkJCQkJdGhvdWdodHM6IDQyMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIG5mX2Zsb3dfdGFibGVfb2ZmbG9hZC5jIGFuZCB0Y2ZfY3RfZmxvd190YWJsZV9nZXQgQ2hhbmdlcyoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBJJiMzOTttIGxvb2tpbmcgYXQgdGhlc2UgY2hhbmdlcyBpbiBgbmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX29mZmxvYWQuY2AgYW5kIGB0Y2ZfY3RfZmxvd190YWJsZV9nZXRgLiBJIHNlZSB0aGF0IGByZWFkX3BuZXQoJmFtcDtvZmZsb2FkLSZndDtmbG93dGFibGUtJmd0O25ldClgIGlzIHVzZWQgZHVyaW5nIG9mZmxvYWQgYW5kIHF1ZXVpbmcgb3BlcmF0aW9ucywgd2hpY2ggaXMgbXkgc3RhcnRpbmcgcG9pbnQuIFRoZSBjcnVjaWFsIHBhcnQgaXMgdGhlIGNvZGUgbW9kaWZpY2F0aW9uIHdpdGhpbiBgdGNmX2N0X2Zsb3dfdGFibGVfZ2V0YCwgc3BlY2lmaWNhbGx5IHRoZSBzaGlmdCBvZiBgd3JpdGVfcG5ldCgmYW1wO2N0X2Z0LSZndDtuZl9mdC5uZXQsIG5ldClgIGJlZm9yZSB0aGUgY2FsbCB0byBgbmZfZmxvd190YWJsZV9pbml0KCZhbXA7Y3RfZnQtJmd0O25mX2Z0KWAuCgpNeSBpbW1lZGlhdGUgcXVlc3Rpb24gaXMgKndoeSogdGhpcyByZW9yZGVyaW5nPyBXaGF0IGRvZXMgYG5mX2Zsb3dfdGFibGVfaW5pdGAgYWN0dWFsbHkgKmRvKj8gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaWYgdGhpcyBoYXMgYW55IGltcGxpY2F0aW9ucy4gRG9lcyBgbmZfZmxvd190YWJsZV9pbml0YCBvciBhbnkgZnVuY3Rpb24gaXQgY2FsbHMgdXRpbGl6ZSBgZmxvd3RhYmxlLSZndDtuZXRgPyBJZiBzbywgY291bGQgd2UgaGF2ZSBhIHBvdGVudGlhbCByYWNlIGNvbmRpdGlvbiBlbWVyZ2luZz8gSSYjMzk7bSB0aGlua2luZyBhYm91dCBjb25jdXJyZW50IHdvcms6IHRoZSBmbG93IG9mZmxvYWQgaXRzZWxmLCBnYXJiYWdlIGNvbGxlY3Rpb24sIGFuZCBuZXQgbmFtZXNwYWNlIGRlc3RydWN0aW9uLiBJIG5lZWQgdG8gbWFrZSBzdXJlIHRoaXMgcmVvcmRlcmluZyBkb2VzbiYjMzk7dCBpbnRyb2R1Y2UgYW55IHN1YnRsZSBidWdzLgoKTmV4dCBzdGVwOiBJIHdpbGwgY2hlY2sgd2hldGhlciBgbmZfZmxvd190YWJsZV9pbml0YCBpdHNlbGYgY2FsbHMgdGhlIGBmbG93dGFibGUtJmd0O3R5cGUtJmd0O2luaXRgIGZ1bmN0aW9uLCBvciBwb3RlbnRpYWxseSBvdGhlciBmdW5jdGlvbnMgdGhhdCBtaWdodCBpbnRlcmFjdCB3aXRoIGBuZXRgIG9yIG90aGVyIHNoYXJlZCByZXNvdXJjZXMuIEkgd2FudCB0byBzZWUgdGhlIGluaXRpYWxpemF0aW9uIG9yZGVyIGFuZCB3aGF0IGdldHMgaW5pdGlhbGl6ZWQgYnkgdGhlIHR5cGUgb3Igc29tZXRoaW5nLgoKRmluYWxseSwgSSB3YW50IHRvIGNvbmZpcm0gd2hhdCBjb25maWcgb3B0aW9ucyBhcmUgYXBwbGljYWJsZSB0byB0aGlzIHNlY3Rpb24gYnkgY2hlY2tpbmcgYG5ldC9zY2hlZC9LY29uZmlnYCB0byBzZWUgdGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBvZiBgYWN0X2N0LmNgLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOSAwODozOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDthY3RfY3QmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvc2NoZWQvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9zY2hlZC9LY29uZmlnPTg2NT1jb25maWcgTkVUX0FDVF9DVElORk9cbi0tXG5uZXQvc2NoZWQvS2NvbmZpZy04NzktXHQgIFRvIGNvbXBpbGUgdGhpcyBjb2RlIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGVcbm5ldC9zY2hlZC9LY29uZmlnOjg4MDpcdCAgbW9kdWxlIHdpbGwgYmUgY2FsbGVkIGFjdF9jdGluZm8uXG5uZXQvc2NoZWQvS2NvbmZpZy04ODEtXG4tLVxubmV0L3NjaGVkL0tjb25maWc9OTE3PWNvbmZpZyBORVRfQUNUX0NUXG4tLVxubmV0L3NjaGVkL0tjb25maWctOTI3LVx0ICBUbyBjb21waWxlIHRoaXMgY29kZSBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlXG5uZXQvc2NoZWQvS2NvbmZpZzo5Mjg6XHQgIG1vZHVsZSB3aWxsIGJlIGNhbGxlZCBhY3RfY3QuXG5uZXQvc2NoZWQvS2NvbmZpZy05MjktXG4tLVxubmV0L3NjaGVkL01ha2VmaWxlPTI0PW9iai0kKENPTkZJR19ORVRfQUNUX0NPTk5NQVJLKVx0JiM0Mzs9IGFjdF9jb25ubWFyay5vXG5uZXQvc2NoZWQvTWFrZWZpbGU6MjU6b2JqLSQoQ09ORklHX05FVF9BQ1RfQ1RJTkZPKVx0JiM0Mzs9IGFjdF9jdGluZm8ub1xubmV0L3NjaGVkL01ha2VmaWxlLTI2LW9iai0kKENPTkZJR19ORVRfQUNUX1NLQk1PRClcdCYjNDM7PSBhY3Rfc2tibW9kLm9cbi0tXG5uZXQvc2NoZWQvTWFrZWZpbGU9MzE9b2JqLSQoQ09ORklHX05FVF9BQ1RfVFVOTkVMX0tFWSkmIzQzOz0gYWN0X3R1bm5lbF9rZXkub1xubmV0L3NjaGVkL01ha2VmaWxlOjMyOm9iai0kKENPTkZJR19ORVRfQUNUX0NUKVx0JiM0Mzs9IGFjdF9jdC5vXG5uZXQvc2NoZWQvTWFrZWZpbGUtMzMtb2JqLSQoQ09ORklHX05FVF9BQ1RfR0FURSlcdCYjNDM7PSBhY3RfZ2F0ZS5vXG4tLVxubmV0L3NjaGVkL2FjdF9jdC5jLTItLyogLVxubmV0L3NjaGVkL2FjdF9jdC5jOjM6ICogbmV0L3NjaGVkL2FjdF9jdC5jICBDb25uZWN0aW9uIFRyYWNraW5nIGFjdGlvblxubmV0L3NjaGVkL2FjdF9jdC5jLTQtICpcbi0tXG5uZXQvc2NoZWQvYWN0X2N0LmMtMzctI2luY2x1ZGUgXHUwMDNjbmV0L25ldGZpbHRlci9pcHY2L25mX2RlZnJhZ19pcHY2LmhcdTAwM2Vcbm5ldC9zY2hlZC9hY3RfY3QuYzozODojaW5jbHVkZSBcdTAwM2NuZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19hY3RfY3QuaFx1MDAzZVxubmV0L3NjaGVkL2FjdF9jdC5jLTM5LSNpbmNsdWRlIFx1MDAzY25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3NlcWFkai5oXHUwMDNlXG4tLVxubmV0L3NjaGVkL2FjdF9jdC5jLTQxLVxubmV0L3NjaGVkL2FjdF9jdC5jOjQyOnN0YXRpYyBzdHJ1Y3Qgd29ya3F1ZXVlX3N0cnVjdCAqYWN0X2N0X3dxO1xubmV0L3NjaGVkL2FjdF9jdC5jLTQzLXN0YXRpYyBzdHJ1Y3Qgcmhhc2h0YWJsZSB6b25lc19odDtcbi0tXG5uZXQvc2NoZWQvYWN0X2N0LmM9MTc4PXN0YXRpYyB2b2lkIHRjZl9jdF9mbG93X3RhYmxlX2FkZF9hY3Rpb25fbWV0YShzdHJ1Y3QgbmZfY29ubiAqY3QsXG4tLVxubmV0L3NjaGVkL2FjdF9jdC5jLTE4NC1cdHN0cnVjdCBmbG93X2FjdGlvbl9lbnRyeSAqZW50cnk7XG5uZXQvc2NoZWQvYWN0X2N0LmM6MTg1Olx0dTMyICphY3RfY3RfbGFiZWxzO1xubmV0L3NjaGVkL2FjdF9jdC5jLTE4Ni1cbi0tXG5uZXQvc2NoZWQvYWN0X2N0LmMtMTk1LVxubmV0L3NjaGVkL2FjdF9jdC5jOjE5NjpcdGFjdF9jdF9sYWJlbHMgPSBlbnRyeS1cdTAwM2VjdF9tZXRhZGF0YS5sYWJlbHM7XG5uZXQvc2NoZWQvYWN0X2N0LmMtMTk3LVx0Y3RfbGFiZWxzID0gbmZfY3RfbGFiZWxzX2ZpbmQoY3QpO1xubmV0L3NjaGVkL2FjdF9jdC5jLTE5OC1cdGlmIChjdF9sYWJlbHMpXG5uZXQvc2NoZWQvYWN0X2N0LmM6MTk5Olx0XHRtZW1jcHkoYWN0X2N0X2xhYmVscywgY3RfbGFiZWxzLVx1MDAzZWJpdHMsIE5GX0NUX0xBQkVMU19NQVhfU0laRSk7XG5uZXQvc2NoZWQvYWN0X2N0LmMtMjAwLVx0ZWxzZVxubmV0L3NjaGVkL2FjdF9jdC5jOjIwMTpcdFx0bWVtc2V0KGFjdF9jdF9sYWJlbHMsIDAsIE5GX0NUX0xBQkVMU19NQVhfU0laRSk7XG5uZXQvc2NoZWQvYWN0X2N0LmMtMjAyLX1cbi0tXG5uZXQvc2NoZWQvYWN0X2N0LmM9Mzk3PXN0YXRpYyB2b2lkIHRjZl9jdF9mbG93X3RhYmxlX3B1dChzdHJ1Y3QgdGNmX2N0X2Zsb3dfdGFibGUgKmN0X2Z0KVxuLS1cbm5ldC9zY2hlZC9hY3RfY3QuYy00MDEtXHRcdElOSVRfUkNVX1dPUksoXHUwMDI2Y3RfZnQtXHUwMDNlcndvcmssIHRjZl9jdF9mbG93X3RhYmxlX2NsZWFudXBfd29yayk7XG5uZXQvc2NoZWQvYWN0X2N0LmM6NDAyOlx0XHRxdWV1ZV9yY3Vfd29yayhhY3RfY3Rfd3EsIFx1MDAyNmN0X2Z0LVx1MDAzZXJ3b3JrKTtcbm5ldC9zY2hlZC9hY3RfY3QuYy00MDMtXHR9XG4tLVxubmV0L3NjaGVkL2FjdF9jdC5jPTQwNj1zdGF0aWMgdm9pZCB0Y2ZfY3RfZmxvd190Y19pZmlkeChzdHJ1Y3QgZmxvd19vZmZsb2FkICplbnRyeSxcbm5ldC9zY2hlZC9hY3RfY3QuYzo0MDc6XHRcdFx0XHQgc3RydWN0IG5mX2Nvbm5fYWN0X2N0X2V4dCAqYWN0X2N0X2V4dCwgdTggZGlyKVxubmV0L3NjaGVkL2FjdF9jdC5jLTQwOC17XG5uZXQvc2NoZWQvYWN0X2N0LmMtNDA5LVx0ZW50cnktXHUwMDNldHVwbGVoYXNoW2Rpcl0udHVwbGUueG1pdF90eXBlID0gRkxPV19PRkZMT0FEX1hNSVRfVEM7XG5uZXQvc2NoZWQvYWN0X2N0LmM6NDEwOlx0ZW50cnktXHUwMDNldHVwbGVoYXNoW2Rpcl0udHVwbGUudGMuaWlmaWR4ID0gYWN0X2N0X2V4dC1cdTAwM2VpZmluZGV4W2Rpcl07XG5uZXQvc2NoZWQvYWN0X2N0LmMtNDExLX1cbi0tXG5uZXQvc2NoZWQvYWN0X2N0LmM9NDEzPXN0YXRpYyB2b2lkIHRjZl9jdF9mbG93X2N0X2V4dF9pZmlkeF91cGRhdGUoc3RydWN0IGZsb3dfb2ZmbG9hZCAqZW50cnkpXG5uZXQvc2NoZWQvYWN0X2N0LmMtNDE0LXtcbm5ldC9zY2hlZC9hY3RfY3QuYzo0MTU6XHRzdHJ1Y3QgbmZfY29ubl9hY3RfY3RfZXh0ICphY3RfY3RfZXh0O1xubmV0L3NjaGVkL2FjdF9jdC5jLTQxNi1cbm5ldC9zY2hlZC9hY3RfY3QuYzo0MTc6XHRhY3RfY3RfZXh0ID0gbmZfY29ubl9hY3RfY3RfZXh0X2ZpbmQoZW50cnktXHUwMDNlY3QpO1xubmV0L3NjaGVkL2FjdF9jdC5jOjQxODpcdGlmIChhY3RfY3RfZXh0KSB7XG5uZXQvc2NoZWQvYWN0X2N0LmM6NDE5Olx0XHR0Y2ZfY3RfZmxvd190Y19pZmlkeChlbnRyeSwgYWN0X2N0X2V4dCwgRkxPV19PRkZMT0FEX0RJUl9PUklHSU5BTCk7XG5uZXQvc2NoZWQvYWN0X2N0LmM6NDIwOlx0XHR0Y2ZfY3RfZmxvd190Y19pZmlkeChlbnRyeSwgYWN0X2N0X2V4dCwgRkxPV19PRkZMT0FEX0RJUl9SRVBMWSk7XG5uZXQvc2NoZWQvYWN0X2N0LmMtNDIxLVx0fVxuLS1cbm5ldC9zY2hlZC9hY3RfY3QuYz00MjQ9c3RhdGljIHZvaWQgdGNmX2N0X2Zsb3dfdGFibGVfYWRkKHN0cnVjdCB0Y2ZfY3RfZmxvd190YWJsZSAqY3RfZnQsXG4tLVxubmV0L3NjaGVkL2FjdF9jdC5jLTQyNy17XG5uZXQvc2NoZWQvYWN0X2N0LmM6NDI4Olx0c3RydWN0IG5mX2Nvbm5fYWN0X2N0X2V4dCAqYWN0X2N0X2V4dDtcbm5ldC9zY2hlZC9hY3RfY3QuYy00MjktXHRzdHJ1Y3QgZmxvd19vZmZsb2FkICplbnRyeTtcbi0tXG5uZXQvc2NoZWQvYWN0X2N0LmMtNDQ3LVxubmV0L3NjaGVkL2FjdF9jdC5jOjQ0ODpcdGFjdF9jdF9leHQgPSBuZl9jb25uX2FjdF9jdF9leHRfZmluZChjdCk7XG5uZXQvc2NoZWQvYWN0X2N0LmM6NDQ5Olx0aWYgKGFjdF9jdF9leHQpIHtcbm5ldC9zY2hlZC9hY3RfY3QuYzo0NTA6XHRcdHRjZl9jdF9mbG93X3RjX2lmaWR4KGVudHJ5LCBhY3RfY3RfZXh0LCBGTE9XX09GRkxPQURfRElSX09SSUdJTkFMKTtcbm5ldC9zY2hlZC9hY3RfY3QuYzo0NTE6XHRcdHRjZl9jdF9mbG93X3RjX2lmaWR4KGVudHJ5LCBhY3RfY3RfZXh0LCBGTE9XX09GRkxPQURfRElSX1JFUExZKTtcbm5ldC9zY2hlZC9hY3RfY3QuYy00NTItXHR9XG4tLVxubmV0L3NjaGVkL2FjdF9jdC5jPTY1OD1zdGF0aWMgYm9vbCB0Y2ZfY3RfZmxvd190YWJsZV9sb29rdXAoc3RydWN0IHRjZl9jdF9wYXJhbXMgKnAsXG4tLVxubmV0L3NjaGVkL2FjdF9jdC5jLTcxOC1cbm5ldC9zY2hlZC9hY3RfY3QuYzo3MTk6XHRuZl9jb25uX2FjdF9jdF9leHRfZmlsbChza2IsIGN0LCBjdGluZm8pO1xubmV0L3NjaGVkL2FjdF9jdC5jLTcyMC1cdHRjZl9jdF9mbG93X2N0X2V4dF9pZmlkeF91cGRhdGUoZmxvdyk7XG4tLVxubmV0L3NjaGVkL2FjdF9jdC5jPTc0MD1zdGF0aWMgdm9pZCB0Y2ZfY3RfZmxvd190YWJsZXNfdW5pbml0KHZvaWQpXG4tLVxubmV0L3NjaGVkL2FjdF9jdC5jLTc0NC1cbm5ldC9zY2hlZC9hY3RfY3QuYzo3NDU6c3RhdGljIHN0cnVjdCB0Y19hY3Rpb25fb3BzIGFjdF9jdF9vcHM7XG5uZXQvc2NoZWQvYWN0X2N0LmMtNzQ2LVxuLS1cbm5ldC9zY2hlZC9hY3RfY3QuYz05Nzk9VENfSU5ESVJFQ1RfU0NPUEUgaW50IHRjZl9jdF9hY3Qoc3RydWN0IHNrX2J1ZmYgKnNrYiwgY29uc3Qgc3RydWN0IHRjX2FjdGlvbiAqYSxcbi0tXG5uZXQvc2NoZWQvYWN0X2N0LmMtMTA3NS1cdG5mX2N0X2RlbGl2ZXJfY2FjaGVkX2V2ZW50cyhjdCk7XG5uZXQvc2NoZWQvYWN0X2N0LmM6MTA3NjpcdG5mX2Nvbm5fYWN0X2N0X2V4dF9maWxsKHNrYiwgY3QsIGN0aW5mbyk7XG5uZXQvc2NoZWQvYWN0X2N0LmMtMTA3Ny1cbi0tXG5uZXQvc2NoZWQvYWN0X2N0LmMtMTEwMy1cdFx0aWYgKCFuZl9jdF9pc19jb25maXJtZWQoY3QpKVxubmV0L3NjaGVkL2FjdF9jdC5jOjExMDQ6XHRcdFx0bmZfY29ubl9hY3RfY3RfZXh0X2FkZChza2IsIGN0LCBjdGluZm8pO1xubmV0L3NjaGVkL2FjdF9jdC5jLTExMDUtXG4tLVxubmV0L3NjaGVkL2FjdF9jdC5jPTEzNzE9c3RhdGljIGludCB0Y2ZfY3RfaW5pdChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBubGF0dHIgKm5sYSxcbi0tXG5uZXQvc2NoZWQvYWN0X2N0LmMtMTM3NS17XG5uZXQvc2NoZWQvYWN0X2N0LmM6MTM3NjpcdHN0cnVjdCB0Y19hY3Rpb25fbmV0ICp0biA9IG5ldF9nZW5lcmljKG5ldCwgYWN0X2N0X29wcy5uZXRfaWQpO1xubmV0L3NjaGVkL2FjdF9jdC5jLTEzNzctXHRib29sIGJpbmQgPSBmbGFncyBcdTAwMjYgVENBX0FDVF9GTEFHU19CSU5EO1xuLS1cbm5ldC9zY2hlZC9hY3RfY3QuYy0xNDEyLVx0XHRlcnIgPSB0Y2ZfaWRyX2NyZWF0ZV9mcm9tX2ZsYWdzKHRuLCBpbmRleCwgZXN0LCBhLFxubmV0L3NjaGVkL2FjdF9jdC5jOjE0MTM6XHRcdFx0XHRcdFx0XHUwMDI2YWN0X2N0X29wcywgYmluZCwgZmxhZ3MpO1xubmV0L3NjaGVkL2FjdF9jdC5jLTE0MTQtXHRcdGlmIChlcnIpIHtcbi0tXG5uZXQvc2NoZWQvYWN0X2N0LmM9MTY2MD1zdGF0aWMgc2l6ZV90IHRjZl9jdF9nZXRfZmlsbF9zaXplKGNvbnN0IHN0cnVjdCB0Y19hY3Rpb24gKmFjdClcbi0tXG5uZXQvc2NoZWQvYWN0X2N0LmMtMTcwNC1cbm5ldC9zY2hlZC9hY3RfY3QuYzoxNzA1OnN0YXRpYyBzdHJ1Y3QgdGNfYWN0aW9uX29wcyBhY3RfY3Rfb3BzID0ge1xubmV0L3NjaGVkL2FjdF9jdC5jLTE3MDYtXHQua2luZFx0XHQ9XHRcJiMzNDtjdFwmIzM0Oyxcbi0tXG5uZXQvc2NoZWQvYWN0X2N0LmM9MTcyMD1zdGF0aWMgX19uZXRfaW5pdCBpbnQgY3RfaW5pdF9uZXQoc3RydWN0IG5ldCAqbmV0KVxubmV0L3NjaGVkL2FjdF9jdC5jLTE3MjEte1xubmV0L3NjaGVkL2FjdF9jdC5jOjE3MjI6XHRzdHJ1Y3QgdGNfY3RfYWN0aW9uX25ldCAqdG4gPSBuZXRfZ2VuZXJpYyhuZXQsIGFjdF9jdF9vcHMubmV0X2lkKTtcbm5ldC9zY2hlZC9hY3RfY3QuYy0xNzIzLVxubmV0L3NjaGVkL2FjdF9jdC5jOjE3MjQ6XHRyZXR1cm4gdGNfYWN0aW9uX25ldF9pbml0KG5ldCwgXHUwMDI2dG4tXHUwMDNldG4sIFx1MDAyNmFjdF9jdF9vcHMpO1xubmV0L3NjaGVkL2FjdF9jdC5jLTE3MjUtfVxuLS1cbm5ldC9zY2hlZC9hY3RfY3QuYz0xNzI3PXN0YXRpYyB2b2lkIF9fbmV0X2V4aXQgY3RfZXhpdF9uZXQoc3RydWN0IGxpc3RfaGVhZCAqbmV0X2xpc3QpXG5uZXQvc2NoZWQvYWN0X2N0LmMtMTcyOC17XG5uZXQvc2NoZWQvYWN0X2N0LmM6MTcyOTpcdHRjX2FjdGlvbl9uZXRfZXhpdChuZXRfbGlzdCwgYWN0X2N0X29wcy5uZXRfaWQpO1xubmV0L3NjaGVkL2FjdF9jdC5jLTE3MzAtfVxuLS1cbm5ldC9zY2hlZC9hY3RfY3QuYz0xNzMyPXN0YXRpYyBzdHJ1Y3QgcGVybmV0X29wZXJhdGlvbnMgY3RfbmV0X29wcyA9IHtcbi0tXG5uZXQvc2NoZWQvYWN0X2N0LmMtMTczNC1cdC5leGl0X2JhdGNoID0gY3RfZXhpdF9uZXQsXG5uZXQvc2NoZWQvYWN0X2N0LmM6MTczNTpcdC5pZCAgID0gXHUwMDI2YWN0X2N0X29wcy5uZXRfaWQsXG5uZXQvc2NoZWQvYWN0X2N0LmMtMTczNi1cdC5zaXplID0gc2l6ZW9mKHN0cnVjdCB0Y19jdF9hY3Rpb25fbmV0KSxcbi0tXG5uZXQvc2NoZWQvYWN0X2N0LmM9MTczOT1zdGF0aWMgaW50IF9faW5pdCBjdF9pbml0X21vZHVsZSh2b2lkKVxuLS1cbm5ldC9zY2hlZC9hY3RfY3QuYy0xNzQyLVxubmV0L3NjaGVkL2FjdF9jdC5jOjE3NDM6XHRhY3RfY3Rfd3EgPSBhbGxvY19vcmRlcmVkX3dvcmtxdWV1ZShcJiMzNDthY3RfY3Rfd29ya3F1ZXVlXCYjMzQ7LCAwKTtcbm5ldC9zY2hlZC9hY3RfY3QuYzoxNzQ0Olx0aWYgKCFhY3RfY3Rfd3EpXG5uZXQvc2NoZWQvYWN0X2N0LmMtMTc0NS1cdFx0cmV0dXJuIC1FTk9NRU07XG4tLVxubmV0L3NjaGVkL2FjdF9jdC5jLTE3NTAtXG5uZXQvc2NoZWQvYWN0X2N0LmM6MTc1MTpcdGVyciA9IHRjZl9yZWdpc3Rlcl9hY3Rpb24oXHUwMDI2YWN0X2N0X29wcywgXHUwMDI2Y3RfbmV0X29wcyk7XG5uZXQvc2NoZWQvYWN0X2N0LmMtMTc1Mi1cdGlmIChlcnIpXG4tLVxubmV0L3NjaGVkL2FjdF9jdC5jLTE3NjEtZXJyX3RibF9pbml0OlxubmV0L3NjaGVkL2FjdF9jdC5jOjE3NjI6XHRkZXN0cm95X3dvcmtxdWV1ZShhY3RfY3Rfd3EpO1xubmV0L3NjaGVkL2FjdF9jdC5jLTE3NjMtXHRyZXR1cm4gZXJyO1xuLS1cbm5ldC9zY2hlZC9hY3RfY3QuYz0xNzY2PXN0YXRpYyB2b2lkIF9fZXhpdCBjdF9jbGVhbnVwX21vZHVsZSh2b2lkKVxuLS1cbm5ldC9zY2hlZC9hY3RfY3QuYy0xNzY4LVx0c3RhdGljX2JyYW5jaF9kZWMoXHUwMDI2dGNmX2ZyYWdfeG1pdF9jb3VudCk7XG5uZXQvc2NoZWQvYWN0X2N0LmM6MTc2OTpcdHRjZl91bnJlZ2lzdGVyX2FjdGlvbihcdTAwMjZhY3RfY3Rfb3BzLCBcdTAwMjZjdF9uZXRfb3BzKTtcbm5ldC9zY2hlZC9hY3RfY3QuYy0xNzcwLVx0dGNmX2N0X2Zsb3dfdGFibGVzX3VuaW5pdCgpO1xubmV0L3NjaGVkL2FjdF9jdC5jOjE3NzE6XHRkZXN0cm95X3dvcmtxdWV1ZShhY3RfY3Rfd3EpO1xubmV0L3NjaGVkL2FjdF9jdC5jLTE3NzItfVxuLS1cbm5ldC9zY2hlZC9hY3RfY3RpbmZvLmMtMS0vLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMCYjNDM7XG5uZXQvc2NoZWQvYWN0X2N0aW5mby5jOjI6LyogbmV0L3NjaGVkL2FjdF9jdGluZm8uYyAgbmV0ZmlsdGVyIGN0aW5mbyBjb25ubWFyayBhY3Rpb25zXG5uZXQvc2NoZWQvYWN0X2N0aW5mby5jLTMtICpcbi0tXG5uZXQvc2NoZWQvYWN0X2N0aW5mby5jLTI4LVxubmV0L3NjaGVkL2FjdF9jdGluZm8uYzoyOTpzdGF0aWMgc3RydWN0IHRjX2FjdGlvbl9vcHMgYWN0X2N0aW5mb19vcHM7XG5uZXQvc2NoZWQvYWN0X2N0aW5mby5jLTMwLVxuLS1cbm5ldC9zY2hlZC9hY3RfY3RpbmZvLmM9MTU1PXN0YXRpYyBpbnQgdGNmX2N0aW5mb19pbml0KHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IG5sYXR0ciAqbmxhLFxuLS1cbm5ldC9zY2hlZC9hY3RfY3RpbmZvLmMtMTU5LXtcbm5ldC9zY2hlZC9hY3RfY3RpbmZvLmM6MTYwOlx0c3RydWN0IHRjX2FjdGlvbl9uZXQgKnRuID0gbmV0X2dlbmVyaWMobmV0LCBhY3RfY3RpbmZvX29wcy5uZXRfaWQpO1xubmV0L3NjaGVkL2FjdF9jdGluZm8uYy0xNjEtXHRib29sIGJpbmQgPSBmbGFncyBcdTAwMjYgVENBX0FDVF9GTEFHU19CSU5EO1xuLS1cbm5ldC9zY2hlZC9hY3RfY3RpbmZvLmMtMjE1LVx0XHRyZXQgPSB0Y2ZfaWRyX2NyZWF0ZV9mcm9tX2ZsYWdzKHRuLCBpbmRleCwgZXN0LCBhLFxubmV0L3NjaGVkL2FjdF9jdGluZm8uYzoyMTY6XHRcdFx0XHRcdFx0XHUwMDI2YWN0X2N0aW5mb19vcHMsIGJpbmQsIGZsYWdzKTtcbm5ldC9zY2hlZC9hY3RfY3RpbmZvLmMtMjE3LVx0XHRpZiAocmV0KSB7XG4tLVxubmV0L3NjaGVkL2FjdF9jdGluZm8uYz0zNTk9c3RhdGljIHNpemVfdCB0Y2ZfY3RpbmZvX2dldF9maWxsX3NpemUoY29uc3Qgc3RydWN0IHRjX2FjdGlvbiAqYWN0KVxuLS1cbm5ldC9zY2hlZC9hY3RfY3RpbmZvLmMtMzY4LVxubmV0L3NjaGVkL2FjdF9jdGluZm8uYzozNjk6c3RhdGljIHN0cnVjdCB0Y19hY3Rpb25fb3BzIGFjdF9jdGluZm9fb3BzID0ge1xubmV0L3NjaGVkL2FjdF9jdGluZm8uYy0zNzAtXHQua2luZFx0PSBcJiMzNDtjdGluZm9cJiMzNDssXG4tLVxubmV0L3NjaGVkL2FjdF9jdGluZm8uYz0zODI9c3RhdGljIF9fbmV0X2luaXQgaW50IGN0aW5mb19pbml0X25ldChzdHJ1Y3QgbmV0ICpuZXQpXG5uZXQvc2NoZWQvYWN0X2N0aW5mby5jLTM4My17XG5uZXQvc2NoZWQvYWN0X2N0aW5mby5jOjM4NDpcdHN0cnVjdCB0Y19hY3Rpb25fbmV0ICp0biA9IG5ldF9nZW5lcmljKG5ldCwgYWN0X2N0aW5mb19vcHMubmV0X2lkKTtcbm5ldC9zY2hlZC9hY3RfY3RpbmZvLmMtMzg1LVxubmV0L3NjaGVkL2FjdF9jdGluZm8uYzozODY6XHRyZXR1cm4gdGNfYWN0aW9uX25ldF9pbml0KG5ldCwgdG4sIFx1MDAyNmFjdF9jdGluZm9fb3BzKTtcbm5ldC9zY2hlZC9hY3RfY3RpbmZvLmMtMzg3LX1cbi0tXG5uZXQvc2NoZWQvYWN0X2N0aW5mby5jPTM4OT1zdGF0aWMgdm9pZCBfX25ldF9leGl0IGN0aW5mb19leGl0X25ldChzdHJ1Y3QgbGlzdF9oZWFkICpuZXRfbGlzdClcbm5ldC9zY2hlZC9hY3RfY3RpbmZvLmMtMzkwLXtcbm5ldC9zY2hlZC9hY3RfY3RpbmZvLmM6MzkxOlx0dGNfYWN0aW9uX25ldF9leGl0KG5ldF9saXN0LCBhY3RfY3RpbmZvX29wcy5uZXRfaWQpO1xubmV0L3NjaGVkL2FjdF9jdGluZm8uYy0zOTItfVxuLS1cbm5ldC9zY2hlZC9hY3RfY3RpbmZvLmM9Mzk0PXN0YXRpYyBzdHJ1Y3QgcGVybmV0X29wZXJhdGlvbnMgY3RpbmZvX25ldF9vcHMgPSB7XG4tLVxubmV0L3NjaGVkL2FjdF9jdGluZm8uYy0zOTYtXHQuZXhpdF9iYXRjaFx0PSBjdGluZm9fZXhpdF9uZXQsXG5uZXQvc2NoZWQvYWN0X2N0aW5mby5jOjM5NzpcdC5pZFx0XHQ9IFx1MDAyNmFjdF9jdGluZm9fb3BzLm5ldF9pZCxcbm5ldC9zY2hlZC9hY3RfY3RpbmZvLmMtMzk4LVx0LnNpemVcdFx0PSBzaXplb2Yoc3RydWN0IHRjX2FjdGlvbl9uZXQpLFxuLS1cbm5ldC9zY2hlZC9hY3RfY3RpbmZvLmM9NDAxPXN0YXRpYyBpbnQgX19pbml0IGN0aW5mb19pbml0X21vZHVsZSh2b2lkKVxubmV0L3NjaGVkL2FjdF9jdGluZm8uYy00MDIte1xubmV0L3NjaGVkL2FjdF9jdGluZm8uYzo0MDM6XHRyZXR1cm4gdGNmX3JlZ2lzdGVyX2FjdGlvbihcdTAwMjZhY3RfY3RpbmZvX29wcywgXHUwMDI2Y3RpbmZvX25ldF9vcHMpO1xubmV0L3NjaGVkL2FjdF9jdGluZm8uYy00MDQtfVxuLS1cbm5ldC9zY2hlZC9hY3RfY3RpbmZvLmM9NDA2PXN0YXRpYyB2b2lkIF9fZXhpdCBjdGluZm9fY2xlYW51cF9tb2R1bGUodm9pZClcbm5ldC9zY2hlZC9hY3RfY3RpbmZvLmMtNDA3LXtcbm5ldC9zY2hlZC9hY3RfY3RpbmZvLmM6NDA4Olx0dGNmX3VucmVnaXN0ZXJfYWN0aW9uKFx1MDAyNmFjdF9jdGluZm9fb3BzLCBcdTAwMjZjdGluZm9fbmV0X29wcyk7XG5uZXQvc2NoZWQvYWN0X2N0aW5mby5jLTQwOS19XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA5IDA4OjM5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIzNDg2CgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogMTYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGhvdWdodCBwcm9jZXNzLCBzdW1tYXJpemVkIGFzIGlmIEkgd2VyZSBjb25zaWRlcmluZyB0aGlzIGlzc3VlOgoKKipFeGFtaW5pbmcgdGhlIEtlcm5lbCBDb25maWd1cmF0aW9uKioKCk9rYXksIHNvIEkgbmVlZCB0byB0cmFjayBkb3duIGhvdyBgTkVUX0FDVF9DVGAgaXMgY29uZmlndXJlZC4gTXkgaW5pdGlhbCBpbnN0aW5jdCBpcyB0byBnbyBzdHJhaWdodCB0byB0aGUgc291cmNlLCB0aGUgYEtjb25maWdgIGZpbGVzLiBUaGF0JiMzOTtzIHdoZXJlIGFsbCB0aGUga2VybmVsIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBhcmUgZGVmaW5lZC4gSSYjMzk7bGwgbmVlZCB0byBvcGVuIHRob3NlIHVwIGFuZCBzZWUgd2hhdCBJIGNhbiBsZWFybiBhYm91dCB0aGlzIHBhcnRpY3VsYXIgb3B0aW9uLiBJJiMzOTttIGxvb2tpbmcgZm9yIGl0cyBkZXBlbmRlbmNpZXMsIGRlZmF1bHQgdmFsdWVzLCBoZWxwIHRleHQsIGFuZCBhbnl0aGluZyBlbHNlIHRoYXQgbWlnaHQgZ2l2ZSBtZSBhIGNsdWUgYWJvdXQgaXRzIHJvbGUgaW4gdGhlIHN5c3RlbSBhbmQgaG93IGl0JiMzOTtzIGVuYWJsZWQuIEkmIzM5O2xsIGJlIGxvb2tpbmcgZm9yIHdoZXJlIGl0JiMzOTtzIGRlZmluZWQgYW5kIHdoYXQgY29udGV4dCBtYWtlcyBpdCBhdmFpbGFibGUgZm9yIHNlbGVjdGlvbi4gSSYjMzk7bGwgd2FudCB0byBzZWUgaG93IGl0IG1pZ2h0IHJlbGF0ZSB0byBvdGhlciBuZXR3b3JraW5nIGZlYXR1cmVzLCBzZWN1cml0eSBjb25zaWRlcmF0aW9ucywgb3IgcGVyaGFwcyBldmVuIHNwZWNpZmljIGhhcmR3YXJlIGRlcGVuZGVuY2llcy4gSSYjMzk7bSBleHBlY3RpbmcgdGhpcyB3aWxsIGxpa2VseSBnaXZlIG1lIGEgZGVlcGVyIHVuZGVyc3RhbmRpbmcgdGhhbiBqdXN0IGxvb2tpbmcgYXQgdGhlIHNvdXJjZSBjb2RlIHVzaW5nIGdyZXAuIEl0JiMzOTtzIHRpbWUgdG8gZGl2ZSBpbnRvIHRob3NlIGBLY29uZmlnYCBmaWxlcyBhbmQgcGllY2UgdGhpcyBpbmZvcm1hdGlvbiB0b2dldGhlci4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDkgMDg6Mzk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvc2NoZWQvS2NvbmZpZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDkxMCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAzMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgOTEwOlx0XHQgIFNheSBZIGhlcmUgdG8gc2V0L3JlbGVhc2UgaXAgdHVubmVsIG1ldGFkYXRhLlxuIDkxMTpcdFxuIDkxMjpcdFx0ICBJZiB1bnN1cmUsIHNheSBOLlxuIDkxMzpcdFxuIDkxNDpcdFx0ICBUbyBjb21waWxlIHRoaXMgY29kZSBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlXG4gOTE1Olx0XHQgIG1vZHVsZSB3aWxsIGJlIGNhbGxlZCBhY3RfdHVubmVsX2tleS5cbiA5MTY6XHRcbiA5MTc6XHRjb25maWcgTkVUX0FDVF9DVFxuIDkxODpcdFx0dHJpc3RhdGUgXCYjMzQ7Y29ubmVjdGlvbiB0cmFja2luZyB0YyBhY3Rpb25cJiMzNDtcbiA5MTk6XHRcdGRlcGVuZHMgb24gTkVUX0NMU19BQ1QgXHUwMDI2XHUwMDI2IE5GX0NPTk5UUkFDSyBcdTAwMjZcdTAwMjYgKCFORl9OQVQgfHwgTkZfTkFUKSBcdTAwMjZcdTAwMjYgTkZfRkxPV19UQUJMRVxuIDkyMDpcdFx0c2VsZWN0IE5GX0NPTk5UUkFDS19PVlNcbiA5MjE6XHRcdHNlbGVjdCBORl9OQVRfT1ZTIGlmIE5GX05BVFxuIDkyMjpcdFx0aGVscFxuIDkyMzpcdFx0ICBTYXkgWSBoZXJlIHRvIGFsbG93IHNlbmRpbmcgdGhlIHBhY2tldHMgdG8gY29ubnRyYWNrIG1vZHVsZS5cbiA5MjQ6XHRcbiA5MjU6XHRcdCAgSWYgdW5zdXJlLCBzYXkgTi5cbiA5MjY6XHRcbiA5Mjc6XHRcdCAgVG8gY29tcGlsZSB0aGlzIGNvZGUgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZVxuIDkyODpcdFx0ICBtb2R1bGUgd2lsbCBiZSBjYWxsZWQgYWN0X2N0LlxuIDkyOTpcdFxuIDkzMDpcdGNvbmZpZyBORVRfQUNUX0dBVEVcbiA5MzE6XHRcdHRyaXN0YXRlIFwmIzM0O0ZyYW1lIGdhdGUgZW50cnkgbGlzdCBjb250cm9sIHRjIGFjdGlvblwmIzM0O1xuIDkzMjpcdFx0ZGVwZW5kcyBvbiBORVRfQ0xTX0FDVFxuIDkzMzpcdFx0aGVscFxuIDkzNDpcdFx0ICBTYXkgWSBoZXJlIHRvIGFsbG93IHRvIGNvbnRyb2wgdGhlIGluZ3Jlc3MgZmxvdyB0byBiZSBwYXNzZWQgYXRcbiA5MzU6XHRcdCAgc3BlY2lmaWMgdGltZSBzbG90IGFuZCBiZSBkcm9wcGVkIGF0IG90aGVyIHNwZWNpZmljIHRpbWUgc2xvdCBieVxuIDkzNjpcdFx0ICB0aGUgZ2F0ZSBlbnRyeSBsaXN0LlxuIDkzNzpcdFxuIDkzODpcdFx0ICBJZiB1bnN1cmUsIHNheSBOLlxuIDkzOTpcdFx0ICBUbyBjb21waWxlIHRoaXMgY29kZSBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA5IDA4OjM5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI0MjA4CgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogODI5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBhIEtlcm5lbCBQYXRjaCBSZWxhdGVkIHRvIENvbm5lY3Rpb24gVHJhY2tpbmcgYW5kIEZsb3cgVGFibGVzKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIEl0IGxvb2tzIGxpa2Ugd2UmIzM5O3JlIGRlYWxpbmcgd2l0aCBhIGZpeCByZWxhdGVkIHRvIHRoZSBgTkVUX0FDVF9DVGAgZnVuY3Rpb25hbGl0eSwgd2hpY2ggZGVwZW5kcyBvbiBjb25uZWN0aW9uIHRyYWNraW5nIChgTkVUX0NMU19BQ1QgJmFtcDsmYW1wOyBORl9DT05OVFJBQ0tgKSBhbmQgZmxvdyB0YWJsZXMgKGBORl9GTE9XX1RBQkxFYCksIHBvdGVudGlhbGx5IHdpdGggTkFUIChgTkZfTkFUYCkuIFRoaXMgaXMgYWxsIGFjY2Vzc2libGUgdmlhIG5ldGxpbmssIHNwZWNpZmljYWxseSB0aHJvdWdoIHRoZSBgcnRuZXRsaW5rYCBpbnRlcmZhY2UgYW5kIHRoZSBgdGMgYWN0aW9uIGN0YCBjb21tYW5kLgoKVGhlIGNvcmUgaXNzdWUgc2VlbXMgdG8gcmV2b2x2ZSBhcm91bmQgdGhlIGB0Y2ZfY3RfZmxvd190YWJsZV9nZXRgIGZ1bmN0aW9uLiBUaGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCBkdXJpbmcgdGhlIGluaXRpYWxpemF0aW9uIG9mIHRoZSAmIzM5O2N0JiMzOTsgdHJhZmZpYyBjb250cm9sIGFjdGlvbiwgc3BlY2lmaWNhbGx5IGZyb20gYHRjZl9jdF9pbml0YC4gV2hlbiBhIHVzZXIgc2V0cyB1cCBhIGB0YyBhY3Rpb24gY3RgIHZpYSBuZXRsaW5rIHVzaW5nIGBSVE1fTkVXQUNUSU9OYCBvciBgUlRNX05FV1RGSUxURVJgLCB0aGUgYHRjZl9jdF9pbml0YCBmdW5jdGlvbiBpcyB0cmlnZ2VyZWQuCgpUaGUgcGF0Y2ggaXRzZWxmIGFkZHJlc3NlcyBhIHJhY2UgY29uZGl0aW9uIHdpdGhpbiBgdGNmX2N0X2Zsb3dfdGFibGVfZ2V0YC4gVGhlIG9yaWdpbmFsIGNvZGUgY2FsbGVkIGBuZl9mbG93X3RhYmxlX2luaXRgIHRvIGluaXRpYWxpemUgdGhlIGZsb3cgdGFibGUsIHdoaWNoLCBhbW9uZyBvdGhlciB0aGluZ3MsIGFkZHMgdGhlIGBmbG93dGFibGVgIHRvIHRoZSBnbG9iYWwgYGZsb3d0YWJsZXNgIGxpc3QgYW5kIHN0YXJ0cyB0aGUgZ2FyYmFnZSBjb2xsZWN0aW9uIHdvcmtlciBgbmZfZmxvd19vZmZsb2FkX3dvcmtfZ2NgLiBUaGUgcHJvYmxlbSB3YXMgdGhhdCBgZmxvd3RhYmxlLSZndDtuZXRgIHdhcyB3cml0dGVuICphZnRlciogdGhlIGBuZl9mbG93X3RhYmxlX2luaXRgIGNhbGwuIElmIGBuZl9mbG93X3RhYmxlX2luaXRgIHRyaWdnZXJlZCBhbnkgZGVsYXllZCB3b3JrIG9yIG9mZmxvYWQgb3BlcmF0aW9ucywgYSBgcmVhZF9wbmV0KCZhbXA7Zmxvd3RhYmxlLSZndDtuZXQpYCBjb3VsZCBwb3RlbnRpYWxseSByZWFkIE5VTEwgYmVjYXVzZSB0aGUgYG5ldGAgZmllbGQgd2FzbiYjMzk7dCBpbml0aWFsaXplZCB5ZXQuIFRoaXMgY291bGQgb2NjdXIgZHVyaW5nIG5ldCBjbGVhbnVwIG9yIGlmIHRoZXJlIHdhcyBhIGdhcmJhZ2UgY29sbGVjdGlvbiByYWNlIGNvbmRpdGlvbi4gVGhlIGZpeCBpcyB0byBlbnN1cmUgYGZsb3d0YWJsZS0mZ3Q7bmV0YCBpcyBpbml0aWFsaXplZCAqYmVmb3JlKiBgbmZfZmxvd190YWJsZV9pbml0YCBnZXRzIGNhbGxlZC4KCk5vdywgYSBrZXkgcXVlc3Rpb246IGlzIHRoaXMgY29kZSBwYXRoIHJlYWNoYWJsZSBpbiBzdGFuZGFyZCBzeXprYWxsZXIgZW52aXJvbm1lbnRzPyBUaGUgYW5zd2VyIGlzIHllcy4gVGhlIGBhY3RfY3RgIGFjdGlvbiBpcyB0aGUgY29ubmVjdGlvbiB0cmFja2luZyBhY3Rpb24gdXNlZCB3aXRoIFRDICh0cmFmZmljIGNvbnRyb2wpIGFuZCBpcyBjb25maWd1cmVkIHZpYSBgcnRuZXRsaW5rYCwgdXRpbGl6aW5nIGNvbW1hbmRzIGxpa2UgYFJUTV9ORVdBQ1RJT05gLCBgUlRNX05FV1RGSUxURVJgLCBvciB0aHJvdWdoIHRoZSBgdGNgIGNvbW1hbmQtbGluZSB1dGlsaXR5LiBBbmQgdGhlc2Ugd29yayBvbiBjb21tb24gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgUUVNVSBhbmQgR0NFLCBhcyBsb25nIGFzIG5ldHdvcmtpbmcgYW5kIG5ldGxpbmsgYXJlIGVuYWJsZWQuCgpUaGlzIGNoYW5nZSBkZWZpbml0ZWx5IG1vZGlmaWVzIGV4ZWN1dGFibGUga2VybmVsIGNvZGUuIFRoZSBjb2RlIGluIHF1ZXN0aW9uIGlzIGB0Y2ZfY3RfZmxvd190YWJsZV9nZXRgIGluIGBuZXQvc2NoZWQvYWN0X2N0LmNgLiBUaGlzIG1ha2VzIHRoaXMgYSBnb29kIGNhbmRpZGF0ZSBmb3IgZnV6emluZy4KCk15IGxpc3Qgb2YgYEZvY3VzU3ltYm9sc2Agd2lsbCBiZToKKiAgIGB0Y2ZfY3RfZmxvd190YWJsZV9nZXRgICh0aGUgbW9kaWZpZWQgZnVuY3Rpb24pLgoqICAgYHRjZl9jdF9pbml0YCAodGhlIGluaXRpYWxpemF0aW9uIGZ1bmN0aW9uIHRoYXQgY2FsbHMgYHRjZl9jdF9mbG93X3RhYmxlX2dldGApLgoqICAgYHRjZl9jdF9hY3RgICh0aGUgcGFja2V0IHByb2Nlc3NpbmcgYWN0aW9uIHRoYXQgaGFuZGxlcyB0aGUgdHJhZmZpYykuCiogICBgbmZfZmxvd190YWJsZV9pbml0YCAodGhlIGZsb3cgdGFibGUgaW5pdGlhbGl6YXRpb24gZnVuY3Rpb24gY2FsbGVkIGJ5IGB0Y2ZfY3RfZmxvd190YWJsZV9nZXRgKS4KClJlZ2FyZGluZyBzeW1ib2wgdmlzaWJpbGl0eSwgYHRjZl9jdF9mbG93X3RhYmxlX2dldGAgYW5kIGB0Y2ZfY3RfaW5pdGAgYXJlIHN0YXRpYyB3aXRoaW4gYG5ldC9zY2hlZC9hY3RfY3QuY2AsIHRob3VnaCBgdGNmX2N0X2luaXRgIGNhbGxzIGB0Y2ZfY3RfZmxvd190YWJsZV9nZXRgLiBgdGNmX2N0X2FjdGAgaXMgbm9uLXN0YXRpYyBhbmQgdXNlcyBgVENfSU5ESVJFQ1RfU0NPUEVgLCBhbHNvIGluIGBuZXQvc2NoZWQvYWN0X2N0LmNgLiBgbmZfZmxvd190YWJsZV9pbml0YCBpcyBub24tc3RhdGljIGFuZCBpbiBgbmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2NvcmUuY2AuIEkmIzM5O2xsIHdhbnQgdG8gZG91YmxlLWNoZWNrIHRoZWlyIGV4YWN0IHNpZ25hdHVyZXMgYW5kIHByZXNlbmNlIGluIHRoZWlyIHJlc3BlY3RpdmUgc291cmNlIGZpbGVzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOSAwODozOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt0Y2ZfY3RfJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L3NjaGVkL2FjdF9jdC5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9zY2hlZC9hY3RfY3QuYz00Nj1zdHJ1Y3Qgem9uZXNfaHRfa2V5IHtcbi0tXG5uZXQvc2NoZWQvYWN0X2N0LmMtNTAtXG5uZXQvc2NoZWQvYWN0X2N0LmM6NTE6c3RydWN0IHRjZl9jdF9mbG93X3RhYmxlIHtcbm5ldC9zY2hlZC9hY3RfY3QuYy01Mi1cdHN0cnVjdCByaGFzaF9oZWFkIG5vZGU7IC8qIEluIHpvbmVzIHRhYmxlcyAqL1xuLS1cbm5ldC9zY2hlZC9hY3RfY3QuYz02Mj1zdGF0aWMgY29uc3Qgc3RydWN0IHJoYXNodGFibGVfcGFyYW1zIHpvbmVzX3BhcmFtcyA9IHtcbm5ldC9zY2hlZC9hY3RfY3QuYzo2MzpcdC5oZWFkX29mZnNldCA9IG9mZnNldG9mKHN0cnVjdCB0Y2ZfY3RfZmxvd190YWJsZSwgbm9kZSksXG5uZXQvc2NoZWQvYWN0X2N0LmM6NjQ6XHQua2V5X29mZnNldCA9IG9mZnNldG9mKHN0cnVjdCB0Y2ZfY3RfZmxvd190YWJsZSwga2V5KSxcbm5ldC9zY2hlZC9hY3RfY3QuYy02NS1cdC5rZXlfbGVuID0gb2Zmc2V0b2ZlbmQoc3RydWN0IHpvbmVzX2h0X2tleSwgem9uZSksXG4tLVxubmV0L3NjaGVkL2FjdF9jdC5jPTY5PXN0YXRpYyBzdHJ1Y3QgZmxvd19hY3Rpb25fZW50cnkgKlxubmV0L3NjaGVkL2FjdF9jdC5jOjcwOnRjZl9jdF9mbG93X3RhYmxlX2Zsb3dfYWN0aW9uX2dldF9uZXh0KHN0cnVjdCBmbG93X2FjdGlvbiAqZmxvd19hY3Rpb24pXG5uZXQvc2NoZWQvYWN0X2N0LmMtNzEte1xuLS1cbm5ldC9zY2hlZC9hY3RfY3QuYy03Ni1cbm5ldC9zY2hlZC9hY3RfY3QuYzo3NzpzdGF0aWMgdm9pZCB0Y2ZfY3RfYWRkX21hbmdsZV9hY3Rpb24oc3RydWN0IGZsb3dfYWN0aW9uICphY3Rpb24sXG5uZXQvc2NoZWQvYWN0X2N0LmMtNzgtXHRcdFx0XHQgICAgIGVudW0gZmxvd19hY3Rpb25fbWFuZ2xlX2Jhc2UgaHR5cGUsXG4tLVxubmV0L3NjaGVkL2FjdF9jdC5jLTg0LVxubmV0L3NjaGVkL2FjdF9jdC5jOjg1Olx0ZW50cnkgPSB0Y2ZfY3RfZmxvd190YWJsZV9mbG93X2FjdGlvbl9nZXRfbmV4dChhY3Rpb24pO1xubmV0L3NjaGVkL2FjdF9jdC5jLTg2LVx0ZW50cnktXHUwMDNlaWQgPSBGTE9XX0FDVElPTl9NQU5HTEU7XG4tLVxubmV0L3NjaGVkL2FjdF9jdC5jPTk3PXN0YXRpYyB2b2lkXG5uZXQvc2NoZWQvYWN0X2N0LmM6OTg6dGNmX2N0X2Zsb3dfdGFibGVfYWRkX2FjdGlvbl9uYXRfaXB2NChjb25zdCBzdHJ1Y3QgbmZfY29ubnRyYWNrX3R1cGxlICp0dXBsZSxcbm5ldC9zY2hlZC9hY3RfY3QuYy05OS1cdFx0XHRcdCAgICAgIHN0cnVjdCBuZl9jb25udHJhY2tfdHVwbGUgdGFyZ2V0LFxuLS1cbm5ldC9zY2hlZC9hY3RfY3QuYy0xMDItXHRpZiAobWVtY21wKFx1MDAyNnRhcmdldC5zcmMudTMsIFx1MDAyNnR1cGxlLVx1MDAzZXNyYy51Mywgc2l6ZW9mKHRhcmdldC5zcmMudTMpKSlcbm5ldC9zY2hlZC9hY3RfY3QuYzoxMDM6XHRcdHRjZl9jdF9hZGRfbWFuZ2xlX2FjdGlvbihhY3Rpb24sIEZMT1dfQUNUX01BTkdMRV9IRFJfVFlQRV9JUDQsXG5uZXQvc2NoZWQvYWN0X2N0LmMtMTA0LVx0XHRcdFx0XHQgb2Zmc2V0b2Yoc3RydWN0IGlwaGRyLCBzYWRkciksXG4tLVxubmV0L3NjaGVkL2FjdF9jdC5jLTEwNy1cdGlmIChtZW1jbXAoXHUwMDI2dGFyZ2V0LmRzdC51MywgXHUwMDI2dHVwbGUtXHUwMDNlZHN0LnUzLCBzaXplb2YodGFyZ2V0LmRzdC51MykpKVxubmV0L3NjaGVkL2FjdF9jdC5jOjEwODpcdFx0dGNmX2N0X2FkZF9tYW5nbGVfYWN0aW9uKGFjdGlvbiwgRkxPV19BQ1RfTUFOR0xFX0hEUl9UWVBFX0lQNCxcbm5ldC9zY2hlZC9hY3RfY3QuYy0xMDktXHRcdFx0XHRcdCBvZmZzZXRvZihzdHJ1Y3QgaXBoZHIsIGRhZGRyKSxcbi0tXG5uZXQvc2NoZWQvYWN0X2N0LmM9MTE0PXN0YXRpYyB2b2lkXG5uZXQvc2NoZWQvYWN0X2N0LmM6MTE1OnRjZl9jdF9hZGRfaXB2Nl9hZGRyX21hbmdsZV9hY3Rpb24oc3RydWN0IGZsb3dfYWN0aW9uICphY3Rpb24sXG5uZXQvc2NoZWQvYWN0X2N0LmMtMTE2LVx0XHRcdFx0ICAgdW5pb24gbmZfaW5ldF9hZGRyICphZGRyLFxuLS1cbm5ldC9zY2hlZC9hY3RfY3QuYy0xMjEtXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBzaXplb2Yoc3RydWN0IGluNl9hZGRyKSAvIHNpemVvZih1MzIpOyBpJiM0MzsmIzQzOylcbm5ldC9zY2hlZC9hY3RfY3QuYzoxMjI6XHRcdHRjZl9jdF9hZGRfbWFuZ2xlX2FjdGlvbihhY3Rpb24sIEZMT1dfQUNUX01BTkdMRV9IRFJfVFlQRV9JUDYsXG5uZXQvc2NoZWQvYWN0X2N0LmMtMTIzLVx0XHRcdFx0XHQgaSAqIHNpemVvZih1MzIpICYjNDM7IG9mZnNldCxcbi0tXG5uZXQvc2NoZWQvYWN0X2N0LmM9MTI3PXN0YXRpYyB2b2lkXG5uZXQvc2NoZWQvYWN0X2N0LmM6MTI4OnRjZl9jdF9mbG93X3RhYmxlX2FkZF9hY3Rpb25fbmF0X2lwdjYoY29uc3Qgc3RydWN0IG5mX2Nvbm50cmFja190dXBsZSAqdHVwbGUsXG5uZXQvc2NoZWQvYWN0X2N0LmMtMTI5LVx0XHRcdFx0ICAgICAgc3RydWN0IG5mX2Nvbm50cmFja190dXBsZSB0YXJnZXQsXG4tLVxubmV0L3NjaGVkL2FjdF9jdC5jLTEzMi1cdGlmIChtZW1jbXAoXHUwMDI2dGFyZ2V0LnNyYy51MywgXHUwMDI2dHVwbGUtXHUwMDNlc3JjLnUzLCBzaXplb2YodGFyZ2V0LnNyYy51MykpKVxubmV0L3NjaGVkL2FjdF9jdC5jOjEzMzpcdFx0dGNmX2N0X2FkZF9pcHY2X2FkZHJfbWFuZ2xlX2FjdGlvbihhY3Rpb24sIFx1MDAyNnRhcmdldC5zcmMudTMsXG5uZXQvc2NoZWQvYWN0X2N0LmMtMTM0LVx0XHRcdFx0XHRcdCAgIG9mZnNldG9mKHN0cnVjdCBpcHY2aGRyLFxuLS1cbm5ldC9zY2hlZC9hY3RfY3QuYy0xMzYtXHRpZiAobWVtY21wKFx1MDAyNnRhcmdldC5kc3QudTMsIFx1MDAyNnR1cGxlLVx1MDAzZWRzdC51Mywgc2l6ZW9mKHRhcmdldC5kc3QudTMpKSlcbm5ldC9zY2hlZC9hY3RfY3QuYzoxMzc6XHRcdHRjZl9jdF9hZGRfaXB2Nl9hZGRyX21hbmdsZV9hY3Rpb24oYWN0aW9uLCBcdTAwMjZ0YXJnZXQuZHN0LnUzLFxubmV0L3NjaGVkL2FjdF9jdC5jLTEzOC1cdFx0XHRcdFx0XHQgICBvZmZzZXRvZihzdHJ1Y3QgaXB2Nmhkcixcbi0tXG5uZXQvc2NoZWQvYWN0X2N0LmM9MTQyPXN0YXRpYyB2b2lkXG5uZXQvc2NoZWQvYWN0X2N0LmM6MTQzOnRjZl9jdF9mbG93X3RhYmxlX2FkZF9hY3Rpb25fbmF0X3RjcChjb25zdCBzdHJ1Y3QgbmZfY29ubnRyYWNrX3R1cGxlICp0dXBsZSxcbm5ldC9zY2hlZC9hY3RfY3QuYy0xNDQtXHRcdFx0XHQgICAgIHN0cnVjdCBuZl9jb25udHJhY2tfdHVwbGUgdGFyZ2V0LFxuLS1cbm5ldC9zY2hlZC9hY3RfY3QuYy0xNTAtXHRpZiAodGFyZ2V0X3NyYyAhPSB0dXBsZS1cdTAwM2VzcmMudS50Y3AucG9ydClcbm5ldC9zY2hlZC9hY3RfY3QuYzoxNTE6XHRcdHRjZl9jdF9hZGRfbWFuZ2xlX2FjdGlvbihhY3Rpb24sIEZMT1dfQUNUX01BTkdMRV9IRFJfVFlQRV9UQ1AsXG5uZXQvc2NoZWQvYWN0X2N0LmMtMTUyLVx0XHRcdFx0XHQgb2Zmc2V0b2Yoc3RydWN0IHRjcGhkciwgc291cmNlKSxcbi0tXG5uZXQvc2NoZWQvYWN0X2N0LmMtMTU0LVx0aWYgKHRhcmdldF9kc3QgIT0gdHVwbGUtXHUwMDNlZHN0LnUudGNwLnBvcnQpXG5uZXQvc2NoZWQvYWN0X2N0LmM6MTU1Olx0XHR0Y2ZfY3RfYWRkX21hbmdsZV9hY3Rpb24oYWN0aW9uLCBGTE9XX0FDVF9NQU5HTEVfSERSX1RZUEVfVENQLFxubmV0L3NjaGVkL2FjdF9jdC5jLTE1Ni1cdFx0XHRcdFx0IG9mZnNldG9mKHN0cnVjdCB0Y3BoZHIsIGRlc3QpLFxuLS1cbm5ldC9zY2hlZC9hY3RfY3QuYz0xNjA9c3RhdGljIHZvaWRcbm5ldC9zY2hlZC9hY3RfY3QuYzoxNjE6dGNmX2N0X2Zsb3dfdGFibGVfYWRkX2FjdGlvbl9uYXRfdWRwKGNvbnN0IHN0cnVjdCBuZl9jb25udHJhY2tfdHVwbGUgKnR1cGxlLFxubmV0L3NjaGVkL2FjdF9jdC5jLTE2Mi1cdFx0XHRcdCAgICAgc3RydWN0IG5mX2Nvbm50cmFja190dXBsZSB0YXJnZXQsXG4tLVxubmV0L3NjaGVkL2FjdF9jdC5jLTE2OC1cdGlmICh0YXJnZXRfc3JjICE9IHR1cGxlLVx1MDAzZXNyYy51LnVkcC5wb3J0KVxubmV0L3NjaGVkL2FjdF9jdC5jOjE2OTpcdFx0dGNmX2N0X2FkZF9tYW5nbGVfYWN0aW9uKGFjdGlvbiwgRkxPV19BQ1RfTUFOR0xFX0hEUl9UWVBFX1VEUCxcbm5ldC9zY2hlZC9hY3RfY3QuYy0xNzAtXHRcdFx0XHRcdCBvZmZzZXRvZihzdHJ1Y3QgdWRwaGRyLCBzb3VyY2UpLFxuLS1cbm5ldC9zY2hlZC9hY3RfY3QuYy0xNzItXHRpZiAodGFyZ2V0X2RzdCAhPSB0dXBsZS1cdTAwM2Vkc3QudS51ZHAucG9ydClcbm5ldC9zY2hlZC9hY3RfY3QuYzoxNzM6XHRcdHRjZl9jdF9hZGRfbWFuZ2xlX2FjdGlvbihhY3Rpb24sIEZMT1dfQUNUX01BTkdMRV9IRFJfVFlQRV9VRFAsXG5uZXQvc2NoZWQvYWN0X2N0LmMtMTc0LVx0XHRcdFx0XHQgb2Zmc2V0b2Yoc3RydWN0IHVkcGhkciwgZGVzdCksXG4tLVxubmV0L3NjaGVkL2FjdF9jdC5jLTE3Ny1cbm5ldC9zY2hlZC9hY3RfY3QuYzoxNzg6c3RhdGljIHZvaWQgdGNmX2N0X2Zsb3dfdGFibGVfYWRkX2FjdGlvbl9tZXRhKHN0cnVjdCBuZl9jb25uICpjdCxcbm5ldC9zY2hlZC9hY3RfY3QuYy0xNzktXHRcdFx0XHRcdCAgICAgIGVudW0gaXBfY29ubnRyYWNrX2RpciBkaXIsXG4tLVxubmV0L3NjaGVkL2FjdF9jdC5jLTE4Ni1cbm5ldC9zY2hlZC9hY3RfY3QuYzoxODc6XHRlbnRyeSA9IHRjZl9jdF9mbG93X3RhYmxlX2Zsb3dfYWN0aW9uX2dldF9uZXh0KGFjdGlvbik7XG5uZXQvc2NoZWQvYWN0X2N0LmMtMTg4LVx0ZW50cnktXHUwMDNlaWQgPSBGTE9XX0FDVElPTl9DVF9NRVRBREFUQTtcbi0tXG5uZXQvc2NoZWQvYWN0X2N0LmMtMjAzLVxubmV0L3NjaGVkL2FjdF9jdC5jOjIwNDpzdGF0aWMgaW50IHRjZl9jdF9mbG93X3RhYmxlX2FkZF9hY3Rpb25fbmF0KHN0cnVjdCBuZXQgKm5ldCxcbm5ldC9zY2hlZC9hY3RfY3QuYy0yMDUtXHRcdFx0XHRcdCAgICBzdHJ1Y3QgbmZfY29ubiAqY3QsXG4tLVxubmV0L3NjaGVkL2FjdF9jdC5jLTIxOC1cdGNhc2UgTkZQUk9UT19JUFY0OlxubmV0L3NjaGVkL2FjdF9jdC5jOjIxOTpcdFx0dGNmX2N0X2Zsb3dfdGFibGVfYWRkX2FjdGlvbl9uYXRfaXB2NCh0dXBsZSwgdGFyZ2V0LFxubmV0L3NjaGVkL2FjdF9jdC5jLTIyMC1cdFx0XHRcdFx0XHQgICAgICBhY3Rpb24pO1xuLS1cbm5ldC9zY2hlZC9hY3RfY3QuYy0yMjItXHRjYXNlIE5GUFJPVE9fSVBWNjpcbm5ldC9zY2hlZC9hY3RfY3QuYzoyMjM6XHRcdHRjZl9jdF9mbG93X3RhYmxlX2FkZF9hY3Rpb25fbmF0X2lwdjYodHVwbGUsIHRhcmdldCxcbm5ldC9zY2hlZC9hY3RfY3QuYy0yMjQtXHRcdFx0XHRcdFx0ICAgICAgYWN0aW9uKTtcbi0tXG5uZXQvc2NoZWQvYWN0X2N0LmMtMjMxLVx0Y2FzZSBJUFBST1RPX1RDUDpcbm5ldC9zY2hlZC9hY3RfY3QuYzoyMzI6XHRcdHRjZl9jdF9mbG93X3RhYmxlX2FkZF9hY3Rpb25fbmF0X3RjcCh0dXBsZSwgdGFyZ2V0LCBhY3Rpb24pO1xubmV0L3NjaGVkL2FjdF9jdC5jLTIzMy1cdFx0YnJlYWs7XG5uZXQvc2NoZWQvYWN0X2N0LmMtMjM0LVx0Y2FzZSBJUFBST1RPX1VEUDpcbm5ldC9zY2hlZC9hY3RfY3QuYzoyMzU6XHRcdHRjZl9jdF9mbG93X3RhYmxlX2FkZF9hY3Rpb25fbmF0X3VkcCh0dXBsZSwgdGFyZ2V0LCBhY3Rpb24pO1xubmV0L3NjaGVkL2FjdF9jdC5jLTIzNi1cdFx0YnJlYWs7XG4tLVxubmV0L3NjaGVkL2FjdF9jdC5jLTI0My1cbm5ldC9zY2hlZC9hY3RfY3QuYzoyNDQ6c3RhdGljIGludCB0Y2ZfY3RfZmxvd190YWJsZV9maWxsX2FjdGlvbnMoc3RydWN0IG5ldCAqbmV0LFxubmV0L3NjaGVkL2FjdF9jdC5jLTI0NS1cdFx0XHRcdFx0ICBzdHJ1Y3QgZmxvd19vZmZsb2FkICpmbG93LFxuLS1cbm5ldC9zY2hlZC9hY3RfY3QuYy0yNzEtXG5uZXQvc2NoZWQvYWN0X2N0LmM6MjcyOlx0ZXJyID0gdGNmX2N0X2Zsb3dfdGFibGVfYWRkX2FjdGlvbl9uYXQobmV0LCBjdCwgZGlyLCBhY3Rpb24pO1xubmV0L3NjaGVkL2FjdF9jdC5jLTI3My1cdGlmIChlcnIpXG4tLVxubmV0L3NjaGVkL2FjdF9jdC5jLTI3NS1cbm5ldC9zY2hlZC9hY3RfY3QuYzoyNzY6XHR0Y2ZfY3RfZmxvd190YWJsZV9hZGRfYWN0aW9uX21ldGEoY3QsIGRpciwgY3RpbmZvLCBhY3Rpb24pO1xubmV0L3NjaGVkL2FjdF9jdC5jLTI3Ny1cdHJldHVybiAwO1xuLS1cbm5ldC9zY2hlZC9hY3RfY3QuYy0yODctXG5uZXQvc2NoZWQvYWN0X2N0LmM6Mjg4OnN0YXRpYyBib29sIHRjZl9jdF9mbG93X2lzX291dGRhdGVkKGNvbnN0IHN0cnVjdCBmbG93X29mZmxvYWQgKmZsb3cpXG5uZXQvc2NoZWQvYWN0X2N0LmMtMjg5LXtcbi0tXG5uZXQvc2NoZWQvYWN0X2N0LmMtMjk1LVxubmV0L3NjaGVkL2FjdF9jdC5jOjI5NjpzdGF0aWMgdm9pZCB0Y2ZfY3RfZmxvd190YWJsZV9nZXRfcmVmKHN0cnVjdCB0Y2ZfY3RfZmxvd190YWJsZSAqY3RfZnQpO1xubmV0L3NjaGVkL2FjdF9jdC5jLTI5Ny1cbm5ldC9zY2hlZC9hY3RfY3QuYzoyOTg6c3RhdGljIHZvaWQgdGNmX2N0X25mX2dldChzdHJ1Y3QgbmZfZmxvd3RhYmxlICpmdClcbm5ldC9zY2hlZC9hY3RfY3QuYy0yOTkte1xubmV0L3NjaGVkL2FjdF9jdC5jOjMwMDpcdHN0cnVjdCB0Y2ZfY3RfZmxvd190YWJsZSAqY3RfZnQgPVxubmV0L3NjaGVkL2FjdF9jdC5jOjMwMTpcdFx0Y29udGFpbmVyX29mKGZ0LCBzdHJ1Y3QgdGNmX2N0X2Zsb3dfdGFibGUsIG5mX2Z0KTtcbm5ldC9zY2hlZC9hY3RfY3QuYy0zMDItXG5uZXQvc2NoZWQvYWN0X2N0LmM6MzAzOlx0dGNmX2N0X2Zsb3dfdGFibGVfZ2V0X3JlZihjdF9mdCk7XG5uZXQvc2NoZWQvYWN0X2N0LmMtMzA0LX1cbm5ldC9zY2hlZC9hY3RfY3QuYy0zMDUtXG5uZXQvc2NoZWQvYWN0X2N0LmM6MzA2OnN0YXRpYyB2b2lkIHRjZl9jdF9mbG93X3RhYmxlX3B1dChzdHJ1Y3QgdGNmX2N0X2Zsb3dfdGFibGUgKmN0X2Z0KTtcbm5ldC9zY2hlZC9hY3RfY3QuYy0zMDctXG5uZXQvc2NoZWQvYWN0X2N0LmM6MzA4OnN0YXRpYyB2b2lkIHRjZl9jdF9uZl9wdXQoc3RydWN0IG5mX2Zsb3d0YWJsZSAqZnQpXG5uZXQvc2NoZWQvYWN0X2N0LmMtMzA5LXtcbm5ldC9zY2hlZC9hY3RfY3QuYzozMTA6XHRzdHJ1Y3QgdGNmX2N0X2Zsb3dfdGFibGUgKmN0X2Z0ID1cbm5ldC9zY2hlZC9hY3RfY3QuYzozMTE6XHRcdGNvbnRhaW5lcl9vZihmdCwgc3RydWN0IHRjZl9jdF9mbG93X3RhYmxlLCBuZl9mdCk7XG5uZXQvc2NoZWQvYWN0X2N0LmMtMzEyLVxubmV0L3NjaGVkL2FjdF9jdC5jOjMxMzpcdHRjZl9jdF9mbG93X3RhYmxlX3B1dChjdF9mdCk7XG5uZXQvc2NoZWQvYWN0X2N0LmMtMzE0LX1cbi0tXG5uZXQvc2NoZWQvYWN0X2N0LmM9MzE2PXN0YXRpYyBzdHJ1Y3QgbmZfZmxvd3RhYmxlX3R5cGUgZmxvd3RhYmxlX2N0ID0ge1xubmV0L3NjaGVkL2FjdF9jdC5jOjMxNzpcdC5nY1x0XHQ9IHRjZl9jdF9mbG93X2lzX291dGRhdGVkLFxubmV0L3NjaGVkL2FjdF9jdC5jOjMxODpcdC5hY3Rpb25cdFx0PSB0Y2ZfY3RfZmxvd190YWJsZV9maWxsX2FjdGlvbnMsXG5uZXQvc2NoZWQvYWN0X2N0LmM6MzE5Olx0LmdldFx0XHQ9IHRjZl9jdF9uZl9nZXQsXG5uZXQvc2NoZWQvYWN0X2N0LmM6MzIwOlx0LnB1dFx0XHQ9IHRjZl9jdF9uZl9wdXQsXG5uZXQvc2NoZWQvYWN0X2N0LmMtMzIxLVx0Lm93bmVyXHRcdD0gVEhJU19NT0RVTEUsXG4tLVxubmV0L3NjaGVkL2FjdF9jdC5jLTMyMy1cbm5ldC9zY2hlZC9hY3RfY3QuYzozMjQ6c3RhdGljIGludCB0Y2ZfY3RfZmxvd190YWJsZV9nZXQoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgdGNmX2N0X3BhcmFtcyAqcGFyYW1zKVxubmV0L3NjaGVkL2FjdF9jdC5jLTMyNS17XG5uZXQvc2NoZWQvYWN0X2N0LmMtMzI2LVx0c3RydWN0IHpvbmVzX2h0X2tleSBrZXkgPSB7IC5uZXQgPSBuZXQsIC56b25lID0gcGFyYW1zLVx1MDAzZXpvbmUgfTtcbm5ldC9zY2hlZC9hY3RfY3QuYzozMjc6XHRzdHJ1Y3QgdGNmX2N0X2Zsb3dfdGFibGUgKmN0X2Z0O1xubmV0L3NjaGVkL2FjdF9jdC5jLTMyOC1cdGludCBlcnIgPSAtRU5PTUVNO1xuLS1cbm5ldC9zY2hlZC9hY3RfY3QuYy0zNzMtXG5uZXQvc2NoZWQvYWN0X2N0LmM6Mzc0OnN0YXRpYyB2b2lkIHRjZl9jdF9mbG93X3RhYmxlX2dldF9yZWYoc3RydWN0IHRjZl9jdF9mbG93X3RhYmxlICpjdF9mdClcbm5ldC9zY2hlZC9hY3RfY3QuYy0zNzUte1xuLS1cbm5ldC9zY2hlZC9hY3RfY3QuYy0zNzgtXG5uZXQvc2NoZWQvYWN0X2N0LmM6Mzc5OnN0YXRpYyB2b2lkIHRjZl9jdF9mbG93X3RhYmxlX2NsZWFudXBfd29yayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXG5uZXQvc2NoZWQvYWN0X2N0LmMtMzgwLXtcbm5ldC9zY2hlZC9hY3RfY3QuYzozODE6XHRzdHJ1Y3QgdGNmX2N0X2Zsb3dfdGFibGUgKmN0X2Z0O1xubmV0L3NjaGVkL2FjdF9jdC5jLTM4Mi1cdHN0cnVjdCBmbG93X2Jsb2NrICpibG9jaztcbm5ldC9zY2hlZC9hY3RfY3QuYy0zODMtXG5uZXQvc2NoZWQvYWN0X2N0LmM6Mzg0Olx0Y3RfZnQgPSBjb250YWluZXJfb2YodG9fcmN1X3dvcmsod29yayksIHN0cnVjdCB0Y2ZfY3RfZmxvd190YWJsZSxcbm5ldC9zY2hlZC9hY3RfY3QuYy0zODUtXHRcdFx0ICAgICByd29yayk7XG4tLVxubmV0L3NjaGVkL2FjdF9jdC5jLTM5Ni1cbm5ldC9zY2hlZC9hY3RfY3QuYzozOTc6c3RhdGljIHZvaWQgdGNmX2N0X2Zsb3dfdGFibGVfcHV0KHN0cnVjdCB0Y2ZfY3RfZmxvd190YWJsZSAqY3RfZnQpXG5uZXQvc2NoZWQvYWN0X2N0LmMtMzk4LXtcbi0tXG5uZXQvc2NoZWQvYWN0X2N0LmMtNDAwLVx0XHRyaGFzaHRhYmxlX3JlbW92ZV9mYXN0KFx1MDAyNnpvbmVzX2h0LCBcdTAwMjZjdF9mdC1cdTAwM2Vub2RlLCB6b25lc19wYXJhbXMpO1xubmV0L3NjaGVkL2FjdF9jdC5jOjQwMTpcdFx0SU5JVF9SQ1VfV09SSyhcdTAwMjZjdF9mdC1cdTAwM2Vyd29yaywgdGNmX2N0X2Zsb3dfdGFibGVfY2xlYW51cF93b3JrKTtcbm5ldC9zY2hlZC9hY3RfY3QuYy00MDItXHRcdHF1ZXVlX3JjdV93b3JrKGFjdF9jdF93cSwgXHUwMDI2Y3RfZnQtXHUwMDNlcndvcmspO1xuLS1cbm5ldC9zY2hlZC9hY3RfY3QuYy00MDUtXG5uZXQvc2NoZWQvYWN0X2N0LmM6NDA2OnN0YXRpYyB2b2lkIHRjZl9jdF9mbG93X3RjX2lmaWR4KHN0cnVjdCBmbG93X29mZmxvYWQgKmVudHJ5LFxubmV0L3NjaGVkL2FjdF9jdC5jLTQwNy1cdFx0XHRcdCBzdHJ1Y3QgbmZfY29ubl9hY3RfY3RfZXh0ICphY3RfY3RfZXh0LCB1OCBkaXIpXG4tLVxubmV0L3NjaGVkL2FjdF9jdC5jLTQxMi1cbm5ldC9zY2hlZC9hY3RfY3QuYzo0MTM6c3RhdGljIHZvaWQgdGNmX2N0X2Zsb3dfY3RfZXh0X2lmaWR4X3VwZGF0ZShzdHJ1Y3QgZmxvd19vZmZsb2FkICplbnRyeSlcbm5ldC9zY2hlZC9hY3RfY3QuYy00MTQte1xuLS1cbm5ldC9zY2hlZC9hY3RfY3QuYy00MTgtXHRpZiAoYWN0X2N0X2V4dCkge1xubmV0L3NjaGVkL2FjdF9jdC5jOjQxOTpcdFx0dGNmX2N0X2Zsb3dfdGNfaWZpZHgoZW50cnksIGFjdF9jdF9leHQsIEZMT1dfT0ZGTE9BRF9ESVJfT1JJR0lOQUwpO1xubmV0L3NjaGVkL2FjdF9jdC5jOjQyMDpcdFx0dGNmX2N0X2Zsb3dfdGNfaWZpZHgoZW50cnksIGFjdF9jdF9leHQsIEZMT1dfT0ZGTE9BRF9ESVJfUkVQTFkpO1xubmV0L3NjaGVkL2FjdF9jdC5jLTQyMS1cdH1cbi0tXG5uZXQvc2NoZWQvYWN0X2N0LmMtNDIzLVxubmV0L3NjaGVkL2FjdF9jdC5jOjQyNDpzdGF0aWMgdm9pZCB0Y2ZfY3RfZmxvd190YWJsZV9hZGQoc3RydWN0IHRjZl9jdF9mbG93X3RhYmxlICpjdF9mdCxcbm5ldC9zY2hlZC9hY3RfY3QuYy00MjUtXHRcdFx0XHQgIHN0cnVjdCBuZl9jb25uICpjdCxcbi0tXG5uZXQvc2NoZWQvYWN0X2N0LmMtNDQ5LVx0aWYgKGFjdF9jdF9leHQpIHtcbm5ldC9zY2hlZC9hY3RfY3QuYzo0NTA6XHRcdHRjZl9jdF9mbG93X3RjX2lmaWR4KGVudHJ5LCBhY3RfY3RfZXh0LCBGTE9XX09GRkxPQURfRElSX09SSUdJTkFMKTtcbm5ldC9zY2hlZC9hY3RfY3QuYzo0NTE6XHRcdHRjZl9jdF9mbG93X3RjX2lmaWR4KGVudHJ5LCBhY3RfY3RfZXh0LCBGTE9XX09GRkxPQURfRElSX1JFUExZKTtcbm5ldC9zY2hlZC9hY3RfY3QuYy00NTItXHR9XG4tLVxubmV0L3NjaGVkL2FjdF9jdC5jLTQ2NS1cbm5ldC9zY2hlZC9hY3RfY3QuYzo0NjY6c3RhdGljIHZvaWQgdGNmX2N0X2Zsb3dfdGFibGVfcHJvY2Vzc19jb25uKHN0cnVjdCB0Y2ZfY3RfZmxvd190YWJsZSAqY3RfZnQsXG5uZXQvc2NoZWQvYWN0X2N0LmMtNDY3LVx0XHRcdFx0XHQgICBzdHJ1Y3QgbmZfY29ubiAqY3QsXG4tLVxubmV0L3NjaGVkL2FjdF9jdC5jLTUxMi1cbm5ldC9zY2hlZC9hY3RfY3QuYzo1MTM6XHR0Y2ZfY3RfZmxvd190YWJsZV9hZGQoY3RfZnQsIGN0LCB0Y3AsIGJpZGlyZWN0aW9uYWwpO1xubmV0L3NjaGVkL2FjdF9jdC5jLTUxNC19XG4tLVxubmV0L3NjaGVkL2FjdF9jdC5jPTUxNj1zdGF0aWMgYm9vbFxubmV0L3NjaGVkL2FjdF9jdC5jOjUxNzp0Y2ZfY3RfZmxvd190YWJsZV9maWxsX3R1cGxlX2lwdjQoc3RydWN0IHNrX2J1ZmYgKnNrYixcbm5ldC9zY2hlZC9hY3RfY3QuYy01MTgtXHRcdFx0XHQgIHN0cnVjdCBmbG93X29mZmxvYWRfdHVwbGUgKnR1cGxlLFxuLS1cbm5ldC9zY2hlZC9hY3RfY3QuYz01ODk9c3RhdGljIGJvb2xcbm5ldC9zY2hlZC9hY3RfY3QuYzo1OTA6dGNmX2N0X2Zsb3dfdGFibGVfZmlsbF90dXBsZV9pcHY2KHN0cnVjdCBza19idWZmICpza2IsXG5uZXQvc2NoZWQvYWN0X2N0LmMtNTkxLVx0XHRcdFx0ICBzdHJ1Y3QgZmxvd19vZmZsb2FkX3R1cGxlICp0dXBsZSxcbi0tXG5uZXQvc2NoZWQvYWN0X2N0LmMtNjU3LVxubmV0L3NjaGVkL2FjdF9jdC5jOjY1ODpzdGF0aWMgYm9vbCB0Y2ZfY3RfZmxvd190YWJsZV9sb29rdXAoc3RydWN0IHRjZl9jdF9wYXJhbXMgKnAsXG5uZXQvc2NoZWQvYWN0X2N0LmMtNjU5LVx0XHRcdFx0ICAgICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuLS1cbm5ldC9zY2hlZC9hY3RfY3QuYy02NzMtXHRjYXNlIE5GUFJPVE9fSVBWNDpcbm5ldC9zY2hlZC9hY3RfY3QuYzo2NzQ6XHRcdGlmICghdGNmX2N0X2Zsb3dfdGFibGVfZmlsbF90dXBsZV9pcHY0KHNrYiwgXHUwMDI2dHVwbGUsIFx1MDAyNnRjcGgpKVxubmV0L3NjaGVkL2FjdF9jdC5jLTY3NS1cdFx0XHRyZXR1cm4gZmFsc2U7XG4tLVxubmV0L3NjaGVkL2FjdF9jdC5jLTY3Ny1cdGNhc2UgTkZQUk9UT19JUFY2OlxubmV0L3NjaGVkL2FjdF9jdC5jOjY3ODpcdFx0aWYgKCF0Y2ZfY3RfZmxvd190YWJsZV9maWxsX3R1cGxlX2lwdjYoc2tiLCBcdTAwMjZ0dXBsZSwgXHUwMDI2dGNwaCkpXG5uZXQvc2NoZWQvYWN0X2N0LmMtNjc5LVx0XHRcdHJldHVybiBmYWxzZTtcbi0tXG5uZXQvc2NoZWQvYWN0X2N0LmMtNzE5LVx0bmZfY29ubl9hY3RfY3RfZXh0X2ZpbGwoc2tiLCBjdCwgY3RpbmZvKTtcbm5ldC9zY2hlZC9hY3RfY3QuYzo3MjA6XHR0Y2ZfY3RfZmxvd19jdF9leHRfaWZpZHhfdXBkYXRlKGZsb3cpO1xubmV0L3NjaGVkL2FjdF9jdC5jLTcyMS1cdGZsb3dfb2ZmbG9hZF9yZWZyZXNoKG5mX2Z0LCBmbG93LCBmb3JjZV9yZWZyZXNoKTtcbi0tXG5uZXQvc2NoZWQvYWN0X2N0LmMtNzM0LVxubmV0L3NjaGVkL2FjdF9jdC5jOjczNTpzdGF0aWMgaW50IHRjZl9jdF9mbG93X3RhYmxlc19pbml0KHZvaWQpXG5uZXQvc2NoZWQvYWN0X2N0LmMtNzM2LXtcbi0tXG5uZXQvc2NoZWQvYWN0X2N0LmMtNzM5LVxubmV0L3NjaGVkL2FjdF9jdC5jOjc0MDpzdGF0aWMgdm9pZCB0Y2ZfY3RfZmxvd190YWJsZXNfdW5pbml0KHZvaWQpXG5uZXQvc2NoZWQvYWN0X2N0LmMtNzQxLXtcbi0tXG5uZXQvc2NoZWQvYWN0X2N0LmM9NzQ3PXN0cnVjdCB0Y19jdF9hY3Rpb25fbmV0IHtcbi0tXG5uZXQvc2NoZWQvYWN0X2N0LmMtNzUxLS8qIERldGVybWluZSB3aGV0aGVyIHNrYi1cdTAwM2VfbmZjdCBpcyBlcXVhbCB0byB0aGUgcmVzdWx0IG9mIGNvbm50cmFjayBsb29rdXAuICovXG5uZXQvc2NoZWQvYWN0X2N0LmM6NzUyOnN0YXRpYyBib29sIHRjZl9jdF9za2JfbmZjdF9jYWNoZWQoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxubmV0L3NjaGVkL2FjdF9jdC5jOjc1MzpcdFx0XHRcdCAgIHN0cnVjdCB0Y2ZfY3RfcGFyYW1zICpwKVxubmV0L3NjaGVkL2FjdF9jdC5jLTc1NC17XG4tLVxubmV0L3NjaGVkL2FjdF9jdC5jLTc5MC1cbm5ldC9zY2hlZC9hY3RfY3QuYzo3OTE6c3RhdGljIHU4IHRjZl9jdF9za2JfbmZfZmFtaWx5KHN0cnVjdCBza19idWZmICpza2IpXG5uZXQvc2NoZWQvYWN0X2N0LmMtNzkyLXtcbi0tXG5uZXQvc2NoZWQvYWN0X2N0LmMtODA4LVxubmV0L3NjaGVkL2FjdF9jdC5jOjgwOTpzdGF0aWMgaW50IHRjZl9jdF9pcHY0X2lzX2ZyYWdtZW50KHN0cnVjdCBza19idWZmICpza2IsIGJvb2wgKmZyYWcpXG5uZXQvc2NoZWQvYWN0X2N0LmMtODEwLXtcbi0tXG5uZXQvc2NoZWQvYWN0X2N0LmMtODIyLVxubmV0L3NjaGVkL2FjdF9jdC5jOjgyMzpzdGF0aWMgaW50IHRjZl9jdF9pcHY2X2lzX2ZyYWdtZW50KHN0cnVjdCBza19idWZmICpza2IsIGJvb2wgKmZyYWcpXG5uZXQvc2NoZWQvYWN0X2N0LmMtODI0LXtcbi0tXG5uZXQvc2NoZWQvYWN0X2N0LmMtODQ4LSAqL1xubmV0L3NjaGVkL2FjdF9jdC5jOjg0OTpzdGF0aWMgaW50IHRjZl9jdF9oYW5kbGVfZnJhZ21lbnRzKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHNrX2J1ZmYgKnNrYixcbm5ldC9zY2hlZC9hY3RfY3QuYy04NTAtXHRcdFx0XHQgICB1OCBmYW1pbHksIHUxNiB6b25lLCBib29sICpkZWZyYWcsXG4tLVxubmV0L3NjaGVkL2FjdF9jdC5jLTg2NS1cdGlmIChmYW1pbHkgPT0gTkZQUk9UT19JUFY0KVxubmV0L3NjaGVkL2FjdF9jdC5jOjg2NjpcdFx0ZXJyID0gdGNmX2N0X2lwdjRfaXNfZnJhZ21lbnQoc2tiLCBcdTAwMjZmcmFnKTtcbm5ldC9zY2hlZC9hY3RfY3QuYy04NjctXHRlbHNlXG5uZXQvc2NoZWQvYWN0X2N0LmM6ODY4Olx0XHRlcnIgPSB0Y2ZfY3RfaXB2Nl9pc19mcmFnbWVudChza2IsIFx1MDAyNmZyYWcpO1xubmV0L3NjaGVkL2FjdF9jdC5jLTg2OS1cdGlmIChlcnIpIHtcbi0tXG5uZXQvc2NoZWQvYWN0X2N0LmMtODg2LVxubmV0L3NjaGVkL2FjdF9jdC5jOjg4NzpzdGF0aWMgdm9pZCB0Y2ZfY3RfcGFyYW1zX2ZyZWUoc3RydWN0IHRjZl9jdF9wYXJhbXMgKnBhcmFtcylcbm5ldC9zY2hlZC9hY3RfY3QuYy04ODgte1xuLS1cbm5ldC9zY2hlZC9hY3RfY3QuYy04OTYtXHRpZiAocGFyYW1zLVx1MDAzZWN0X2Z0KVxubmV0L3NjaGVkL2FjdF9jdC5jOjg5NzpcdFx0dGNmX2N0X2Zsb3dfdGFibGVfcHV0KHBhcmFtcy1cdTAwM2VjdF9mdCk7XG5uZXQvc2NoZWQvYWN0X2N0LmMtODk4LVx0aWYgKHBhcmFtcy1cdTAwM2V0bXBsKSB7XG4tLVxubmV0L3NjaGVkL2FjdF9jdC5jLTkwNy1cbm5ldC9zY2hlZC9hY3RfY3QuYzo5MDg6c3RhdGljIHZvaWQgdGNmX2N0X3BhcmFtc19mcmVlX3JjdShzdHJ1Y3QgcmN1X2hlYWQgKmhlYWQpXG5uZXQvc2NoZWQvYWN0X2N0LmMtOTA5LXtcbm5ldC9zY2hlZC9hY3RfY3QuYzo5MTA6XHRzdHJ1Y3QgdGNmX2N0X3BhcmFtcyAqcGFyYW1zO1xubmV0L3NjaGVkL2FjdF9jdC5jLTkxMS1cbm5ldC9zY2hlZC9hY3RfY3QuYzo5MTI6XHRwYXJhbXMgPSBjb250YWluZXJfb2YoaGVhZCwgc3RydWN0IHRjZl9jdF9wYXJhbXMsIHJjdSk7XG5uZXQvc2NoZWQvYWN0X2N0LmM6OTEzOlx0dGNmX2N0X3BhcmFtc19mcmVlKHBhcmFtcyk7XG5uZXQvc2NoZWQvYWN0X2N0LmMtOTE0LX1cbm5ldC9zY2hlZC9hY3RfY3QuYy05MTUtXG5uZXQvc2NoZWQvYWN0X2N0LmM6OTE2OnN0YXRpYyB2b2lkIHRjZl9jdF9hY3Rfc2V0X21hcmsoc3RydWN0IG5mX2Nvbm4gKmN0LCB1MzIgbWFyaywgdTMyIG1hc2spXG5uZXQvc2NoZWQvYWN0X2N0LmMtOTE3LXtcbi0tXG5uZXQvc2NoZWQvYWN0X2N0LmMtOTMyLVxubmV0L3NjaGVkL2FjdF9jdC5jOjkzMzpzdGF0aWMgdm9pZCB0Y2ZfY3RfYWN0X3NldF9sYWJlbHMoc3RydWN0IG5mX2Nvbm4gKmN0LFxubmV0L3NjaGVkL2FjdF9jdC5jLTkzNC1cdFx0XHRcdCAgdTMyICpsYWJlbHMsXG4tLVxubmV0L3NjaGVkL2FjdF9jdC5jLTkzNy0jaWYgSVNfRU5BQkxFRChDT05GSUdfTkZfQ09OTlRSQUNLX0xBQkVMUylcbm5ldC9zY2hlZC9hY3RfY3QuYzo5Mzg6XHRzaXplX3QgbGFiZWxzX3N6ID0gc2l6ZW9mX2ZpZWxkKHN0cnVjdCB0Y2ZfY3RfcGFyYW1zLCBsYWJlbHMpO1xubmV0L3NjaGVkL2FjdF9jdC5jLTkzOS1cbi0tXG5uZXQvc2NoZWQvYWN0X2N0LmMtOTQ2LVxubmV0L3NjaGVkL2FjdF9jdC5jOjk0NzpzdGF0aWMgaW50IHRjZl9jdF9hY3RfbmF0KHN0cnVjdCBza19idWZmICpza2IsXG5uZXQvc2NoZWQvYWN0X2N0LmMtOTQ4LVx0XHRcdCAgc3RydWN0IG5mX2Nvbm4gKmN0LFxuLS1cbm5ldC9zY2hlZC9hY3RfY3QuYy05NzgtXG5uZXQvc2NoZWQvYWN0X2N0LmM6OTc5OlRDX0lORElSRUNUX1NDT1BFIGludCB0Y2ZfY3RfYWN0KHN0cnVjdCBza19idWZmICpza2IsIGNvbnN0IHN0cnVjdCB0Y19hY3Rpb24gKmEsXG5uZXQvc2NoZWQvYWN0X2N0LmMtOTgwLVx0XHRcdFx0IHN0cnVjdCB0Y2ZfcmVzdWx0ICpyZXMpXG4tLVxubmV0L3NjaGVkL2FjdF9jdC5jLTk4OC1cdGludCBuaF9vZnMsIGVyciwgcmV0dmFsO1xubmV0L3NjaGVkL2FjdF9jdC5jOjk4OTpcdHN0cnVjdCB0Y2ZfY3RfcGFyYW1zICpwO1xubmV0L3NjaGVkL2FjdF9jdC5jLTk5MC1cdGJvb2wgYWRkX2hlbHBlciA9IGZhbHNlO1xuLS1cbm5ldC9zY2hlZC9hY3RfY3QuYy0xMDE3LVxubmV0L3NjaGVkL2FjdF9jdC5jOjEwMTg6XHRmYW1pbHkgPSB0Y2ZfY3Rfc2tiX25mX2ZhbWlseShza2IpO1xubmV0L3NjaGVkL2FjdF9jdC5jLTEwMTktXHRpZiAoZmFtaWx5ID09IE5GUFJPVE9fVU5TUEVDKVxuLS1cbm5ldC9zY2hlZC9hY3RfY3QuYy0xMDI2LVx0c2tiX3B1bGxfcmNzdW0oc2tiLCBuaF9vZnMpO1xubmV0L3NjaGVkL2FjdF9jdC5jOjEwMjc6XHRlcnIgPSB0Y2ZfY3RfaGFuZGxlX2ZyYWdtZW50cyhuZXQsIHNrYiwgZmFtaWx5LCBwLVx1MDAzZXpvbmUsIFx1MDAyNmRlZnJhZyxcbm5ldC9zY2hlZC9hY3RfY3QuYy0xMDI4LVx0XHRcdFx0ICAgICAgXHUwMDI2c2tiX2lzX291cnMpO1xuLS1cbm5ldC9zY2hlZC9hY3RfY3QuYy0xMDQ4LVx0ICovXG5uZXQvc2NoZWQvYWN0X2N0LmM6MTA0OTpcdGNhY2hlZCA9IHRjZl9jdF9za2JfbmZjdF9jYWNoZWQobmV0LCBza2IsIHApO1xubmV0L3NjaGVkL2FjdF9jdC5jLTEwNTAtXHRpZiAoIWNhY2hlZCkge1xubmV0L3NjaGVkL2FjdF9jdC5jOjEwNTE6XHRcdGlmICh0Y2ZfY3RfZmxvd190YWJsZV9sb29rdXAocCwgc2tiLCBmYW1pbHkpKSB7XG5uZXQvc2NoZWQvYWN0X2N0LmMtMTA1Mi1cdFx0XHRza2lwX2FkZCA9IHRydWU7XG4tLVxubmV0L3NjaGVkL2FjdF9jdC5jLTEwNzctXG5uZXQvc2NoZWQvYWN0X2N0LmM6MTA3ODpcdGVyciA9IHRjZl9jdF9hY3RfbmF0KHNrYiwgY3QsIGN0aW5mbywgcC1cdTAwM2VjdF9hY3Rpb24sIFx1MDAyNnAtXHUwMDNlcmFuZ2UsIGNvbW1pdCk7XG5uZXQvc2NoZWQvYWN0X2N0LmMtMTA3OS1cdGlmIChlcnIgIT0gTkZfQUNDRVBUKVxuLS1cbm5ldC9zY2hlZC9hY3RfY3QuYy0xMDk5LVx0aWYgKGNvbW1pdCkge1xubmV0L3NjaGVkL2FjdF9jdC5jOjExMDA6XHRcdHRjZl9jdF9hY3Rfc2V0X21hcmsoY3QsIHAtXHUwMDNlbWFyaywgcC1cdTAwM2VtYXJrX21hc2spO1xubmV0L3NjaGVkL2FjdF9jdC5jOjExMDE6XHRcdHRjZl9jdF9hY3Rfc2V0X2xhYmVscyhjdCwgcC1cdTAwM2VsYWJlbHMsIHAtXHUwMDNlbGFiZWxzX21hc2spO1xubmV0L3NjaGVkL2FjdF9jdC5jLTExMDItXG4tLVxubmV0L3NjaGVkL2FjdF9jdC5jLTExMjItXHRpZiAoIXNraXBfYWRkKVxubmV0L3NjaGVkL2FjdF9jdC5jOjExMjM6XHRcdHRjZl9jdF9mbG93X3RhYmxlX3Byb2Nlc3NfY29ubihwLVx1MDAzZWN0X2Z0LCBjdCwgY3RpbmZvKTtcbm5ldC9zY2hlZC9hY3RfY3QuYy0xMTI0LVxuLS1cbm5ldC9zY2hlZC9hY3RfY3QuYz0xMTYwPXN0YXRpYyBjb25zdCBzdHJ1Y3QgbmxhX3BvbGljeSBjdF9wb2xpY3lbVENBX0NUX01BWCAmIzQzOyAxXSA9IHtcbi0tXG5uZXQvc2NoZWQvYWN0X2N0LmMtMTE4MC1cbm5ldC9zY2hlZC9hY3RfY3QuYzoxMTgxOnN0YXRpYyBpbnQgdGNmX2N0X2ZpbGxfcGFyYW1zX25hdChzdHJ1Y3QgdGNmX2N0X3BhcmFtcyAqcCxcbm5ldC9zY2hlZC9hY3RfY3QuYy0xMTgyLVx0XHRcdFx0ICBzdHJ1Y3QgdGNfY3QgKnBhcm0sXG4tLVxubmV0L3NjaGVkL2FjdF9jdC5jLTEyNDAtXG5uZXQvc2NoZWQvYWN0X2N0LmM6MTI0MTpzdGF0aWMgdm9pZCB0Y2ZfY3Rfc2V0X2tleV92YWwoc3RydWN0IG5sYXR0ciAqKnRiLFxubmV0L3NjaGVkL2FjdF9jdC5jLTEyNDItXHRcdFx0ICAgICAgIHZvaWQgKnZhbCwgaW50IHZhbF90eXBlLFxuLS1cbm5ldC9zY2hlZC9hY3RfY3QuYy0xMjU4LVxubmV0L3NjaGVkL2FjdF9jdC5jOjEyNTk6c3RhdGljIGludCB0Y2ZfY3RfZmlsbF9wYXJhbXMoc3RydWN0IG5ldCAqbmV0LFxubmV0L3NjaGVkL2FjdF9jdC5jOjEyNjA6XHRcdFx0ICAgICAgc3RydWN0IHRjZl9jdF9wYXJhbXMgKnAsXG5uZXQvc2NoZWQvYWN0X2N0LmMtMTI2MS1cdFx0XHQgICAgICBzdHJ1Y3QgdGNfY3QgKnBhcm0sXG4tLVxubmV0L3NjaGVkL2FjdF9jdC5jLTEyNzItXG5uZXQvc2NoZWQvYWN0X2N0LmM6MTI3MzpcdHRjZl9jdF9zZXRfa2V5X3ZhbCh0Yixcbm5ldC9zY2hlZC9hY3RfY3QuYy0xMjc0LVx0XHRcdCAgIFx1MDAyNnAtXHUwMDNlY3RfYWN0aW9uLCBUQ0FfQ1RfQUNUSU9OLFxuLS1cbm5ldC9zY2hlZC9hY3RfY3QuYy0xMjgwLVxubmV0L3NjaGVkL2FjdF9jdC5jOjEyODE6XHRlcnIgPSB0Y2ZfY3RfZmlsbF9wYXJhbXNfbmF0KHAsIHBhcm0sIHRiLCBleHRhY2spO1xubmV0L3NjaGVkL2FjdF9jdC5jLTEyODItXHRpZiAoZXJyKVxuLS1cbm5ldC9zY2hlZC9hY3RfY3QuYy0xMjg5LVx0XHR9XG5uZXQvc2NoZWQvYWN0X2N0LmM6MTI5MDpcdFx0dGNmX2N0X3NldF9rZXlfdmFsKHRiLFxubmV0L3NjaGVkL2FjdF9jdC5jLTEyOTEtXHRcdFx0XHQgICBcdTAwMjZwLVx1MDAzZW1hcmssIFRDQV9DVF9NQVJLLFxuLS1cbm5ldC9zY2hlZC9hY3RfY3QuYy0xMjk2LVx0aWYgKHRiW1RDQV9DVF9MQUJFTFNdKSB7XG5uZXQvc2NoZWQvYWN0X2N0LmM6MTI5NzpcdFx0dW5zaWduZWQgaW50IG5fYml0cyA9IHNpemVvZl9maWVsZChzdHJ1Y3QgdGNmX2N0X3BhcmFtcywgbGFiZWxzKSAqIDg7XG5uZXQvc2NoZWQvYWN0X2N0LmMtMTI5OC1cbi0tXG5uZXQvc2NoZWQvYWN0X2N0LmMtMTMxMC1cbm5ldC9zY2hlZC9hY3RfY3QuYzoxMzExOlx0XHR0Y2ZfY3Rfc2V0X2tleV92YWwodGIsXG5uZXQvc2NoZWQvYWN0X2N0LmMtMTMxMi1cdFx0XHRcdCAgIHAtXHUwMDNlbGFiZWxzLCBUQ0FfQ1RfTEFCRUxTLFxuLS1cbm5ldC9zY2hlZC9hY3RfY3QuYy0xMzIzLVxubmV0L3NjaGVkL2FjdF9jdC5jOjEzMjQ6XHRcdHRjZl9jdF9zZXRfa2V5X3ZhbCh0Yixcbm5ldC9zY2hlZC9hY3RfY3QuYy0xMzI1LVx0XHRcdFx0ICAgXHUwMDI2cC1cdTAwM2V6b25lLCBUQ0FfQ1RfWk9ORSxcbi0tXG5uZXQvc2NoZWQvYWN0X2N0LmMtMTM3MC1cbm5ldC9zY2hlZC9hY3RfY3QuYzoxMzcxOnN0YXRpYyBpbnQgdGNmX2N0X2luaXQoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgbmxhdHRyICpubGEsXG5uZXQvc2NoZWQvYWN0X2N0LmMtMTM3Mi1cdFx0ICAgICAgIHN0cnVjdCBubGF0dHIgKmVzdCwgc3RydWN0IHRjX2FjdGlvbiAqKmEsXG4tLVxubmV0L3NjaGVkL2FjdF9jdC5jLTEzNzctXHRib29sIGJpbmQgPSBmbGFncyBcdTAwMjYgVENBX0FDVF9GTEFHU19CSU5EO1xubmV0L3NjaGVkL2FjdF9jdC5jOjEzNzg6XHRzdHJ1Y3QgdGNmX2N0X3BhcmFtcyAqcGFyYW1zID0gTlVMTDtcbm5ldC9zY2hlZC9hY3RfY3QuYy0xMzc5LVx0c3RydWN0IG5sYXR0ciAqdGJbVENBX0NUX01BWCAmIzQzOyAxXTtcbi0tXG5uZXQvc2NoZWQvYWN0X2N0LmMtMTQzOS1cbm5ldC9zY2hlZC9hY3RfY3QuYzoxNDQwOlx0ZXJyID0gdGNmX2N0X2ZpbGxfcGFyYW1zKG5ldCwgcGFyYW1zLCBwYXJtLCB0YiwgZXh0YWNrKTtcbm5ldC9zY2hlZC9hY3RfY3QuYy0xNDQxLVx0aWYgKGVycilcbi0tXG5uZXQvc2NoZWQvYWN0X2N0LmMtMTQ0My1cbm5ldC9zY2hlZC9hY3RfY3QuYzoxNDQ0Olx0ZXJyID0gdGNmX2N0X2Zsb3dfdGFibGVfZ2V0KG5ldCwgcGFyYW1zKTtcbm5ldC9zY2hlZC9hY3RfY3QuYy0xNDQ1LVx0aWYgKGVycilcbi0tXG5uZXQvc2NoZWQvYWN0X2N0LmMtMTQ1Ny1cdGlmIChwYXJhbXMpXG5uZXQvc2NoZWQvYWN0X2N0LmM6MTQ1ODpcdFx0Y2FsbF9yY3UoXHUwMDI2cGFyYW1zLVx1MDAzZXJjdSwgdGNmX2N0X3BhcmFtc19mcmVlX3JjdSk7XG5uZXQvc2NoZWQvYWN0X2N0LmMtMTQ1OS1cbi0tXG5uZXQvc2NoZWQvYWN0X2N0LmMtMTQ2NS1cdGlmIChwYXJhbXMpXG5uZXQvc2NoZWQvYWN0X2N0LmM6MTQ2NjpcdFx0dGNmX2N0X3BhcmFtc19mcmVlKHBhcmFtcyk7XG5uZXQvc2NoZWQvYWN0X2N0LmMtMTQ2Ny1cdHRjZl9pZHJfcmVsZWFzZSgqYSwgYmluZCk7XG4tLVxubmV0L3NjaGVkL2FjdF9jdC5jLTE0NzAtXG5uZXQvc2NoZWQvYWN0X2N0LmM6MTQ3MTpzdGF0aWMgdm9pZCB0Y2ZfY3RfY2xlYW51cChzdHJ1Y3QgdGNfYWN0aW9uICphKVxubmV0L3NjaGVkL2FjdF9jdC5jLTE0NzIte1xubmV0L3NjaGVkL2FjdF9jdC5jOjE0NzM6XHRzdHJ1Y3QgdGNmX2N0X3BhcmFtcyAqcGFyYW1zO1xubmV0L3NjaGVkL2FjdF9jdC5jLTE0NzQtXHRzdHJ1Y3QgdGNmX2N0ICpjID0gdG9fY3QoYSk7XG4tLVxubmV0L3NjaGVkL2FjdF9jdC5jLTE0NzctXHRpZiAocGFyYW1zKVxubmV0L3NjaGVkL2FjdF9jdC5jOjE0Nzg6XHRcdGNhbGxfcmN1KFx1MDAyNnBhcmFtcy1cdTAwM2VyY3UsIHRjZl9jdF9wYXJhbXNfZnJlZV9yY3UpO1xubmV0L3NjaGVkL2FjdF9jdC5jLTE0NzktfVxubmV0L3NjaGVkL2FjdF9jdC5jLTE0ODAtXG5uZXQvc2NoZWQvYWN0X2N0LmM6MTQ4MTpzdGF0aWMgaW50IHRjZl9jdF9kdW1wX2tleV92YWwoc3RydWN0IHNrX2J1ZmYgKnNrYixcbm5ldC9zY2hlZC9hY3RfY3QuYy0xNDgyLVx0XHRcdCAgICAgICBjb25zdCB2b2lkICp2YWwsIGludCB2YWxfdHlwZSxcbi0tXG5uZXQvc2NoZWQvYWN0X2N0LmMtMTUwMy1cbm5ldC9zY2hlZC9hY3RfY3QuYzoxNTA0OnN0YXRpYyBpbnQgdGNmX2N0X2R1bXBfbmF0KHN0cnVjdCBza19idWZmICpza2IsIGNvbnN0IHN0cnVjdCB0Y2ZfY3RfcGFyYW1zICpwKVxubmV0L3NjaGVkL2FjdF9jdC5jLTE1MDUte1xuLS1cbm5ldC9zY2hlZC9hY3RfY3QuYy0xNTQzLVxubmV0L3NjaGVkL2FjdF9jdC5jOjE1NDQ6c3RhdGljIGludCB0Y2ZfY3RfZHVtcF9oZWxwZXIoc3RydWN0IHNrX2J1ZmYgKnNrYixcbm5ldC9zY2hlZC9hY3RfY3QuYy0xNTQ1LVx0XHRcdCAgICAgIGNvbnN0IHN0cnVjdCBuZl9jb25udHJhY2tfaGVscGVyICpoZWxwZXIpXG4tLVxubmV0L3NjaGVkL2FjdF9jdC5jLTE1NTctXG5uZXQvc2NoZWQvYWN0X2N0LmM6MTU1ODpzdGF0aWMgaW5saW5lIGludCB0Y2ZfY3RfZHVtcChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgdGNfYWN0aW9uICphLFxubmV0L3NjaGVkL2FjdF9jdC5jLTE1NTktXHRcdFx0ICAgICAgaW50IGJpbmQsIGludCByZWYpXG4tLVxubmV0L3NjaGVkL2FjdF9jdC5jLTE1NjItXHRjb25zdCBzdHJ1Y3QgdGNmX2N0ICpjID0gdG9fY3QoYSk7XG5uZXQvc2NoZWQvYWN0X2N0LmM6MTU2MzpcdGNvbnN0IHN0cnVjdCB0Y2ZfY3RfcGFyYW1zICpwO1xubmV0L3NjaGVkL2FjdF9jdC5jLTE1NjQtXHRzdHJ1Y3QgdGNfY3Qgb3B0ID0ge1xuLS1cbm5ldC9zY2hlZC9hY3RfY3QuYy0xNTc0LVxubmV0L3NjaGVkL2FjdF9jdC5jOjE1NzU6XHRpZiAodGNmX2N0X2R1bXBfa2V5X3ZhbChza2IsXG5uZXQvc2NoZWQvYWN0X2N0LmMtMTU3Ni1cdFx0XHRcdFx1MDAyNnAtXHUwMDNlY3RfYWN0aW9uLCBUQ0FfQ1RfQUNUSU9OLFxuLS1cbm5ldC9zY2hlZC9hY3RfY3QuYy0xNTg0LVx0aWYgKElTX0VOQUJMRUQoQ09ORklHX05GX0NPTk5UUkFDS19NQVJLKSBcdTAwMjZcdTAwMjZcbm5ldC9zY2hlZC9hY3RfY3QuYzoxNTg1Olx0ICAgIHRjZl9jdF9kdW1wX2tleV92YWwoc2tiLFxubmV0L3NjaGVkL2FjdF9jdC5jLTE1ODYtXHRcdFx0XHRcdTAwMjZwLVx1MDAzZW1hcmssIFRDQV9DVF9NQVJLLFxuLS1cbm5ldC9zY2hlZC9hY3RfY3QuYy0xNTkxLVx0aWYgKElTX0VOQUJMRUQoQ09ORklHX05GX0NPTk5UUkFDS19MQUJFTFMpIFx1MDAyNlx1MDAyNlxubmV0L3NjaGVkL2FjdF9jdC5jOjE1OTI6XHQgICAgdGNmX2N0X2R1bXBfa2V5X3ZhbChza2IsXG5uZXQvc2NoZWQvYWN0X2N0LmMtMTU5My1cdFx0XHRcdHAtXHUwMDNlbGFiZWxzLCBUQ0FfQ1RfTEFCRUxTLFxuLS1cbm5ldC9zY2hlZC9hY3RfY3QuYy0xNTk4LVx0aWYgKElTX0VOQUJMRUQoQ09ORklHX05GX0NPTk5UUkFDS19aT05FUykgXHUwMDI2XHUwMDI2XG5uZXQvc2NoZWQvYWN0X2N0LmM6MTU5OTpcdCAgICB0Y2ZfY3RfZHVtcF9rZXlfdmFsKHNrYixcbm5ldC9zY2hlZC9hY3RfY3QuYy0xNjAwLVx0XHRcdFx0XHUwMDI2cC1cdTAwM2V6b25lLCBUQ0FfQ1RfWk9ORSxcbi0tXG5uZXQvc2NoZWQvYWN0X2N0LmMtMTYwNC1cbm5ldC9zY2hlZC9hY3RfY3QuYzoxNjA1Olx0aWYgKHRjZl9jdF9kdW1wX25hdChza2IsIHApKVxubmV0L3NjaGVkL2FjdF9jdC5jLTE2MDYtXHRcdGdvdG8gbmxhX3B1dF9mYWlsdXJlO1xubmV0L3NjaGVkL2FjdF9jdC5jLTE2MDctXG5uZXQvc2NoZWQvYWN0X2N0LmM6MTYwODpcdGlmICh0Y2ZfY3RfZHVtcF9oZWxwZXIoc2tiLCBwLVx1MDAzZWhlbHBlcikpXG5uZXQvc2NoZWQvYWN0X2N0LmMtMTYwOS1cdFx0Z290byBubGFfcHV0X2ZhaWx1cmU7XG4tLVxubmV0L3NjaGVkL2FjdF9jdC5jPTE2Mjc9c3RhdGljIHZvaWQgdGNmX3N0YXRzX3VwZGF0ZShzdHJ1Y3QgdGNfYWN0aW9uICphLCB1NjQgYnl0ZXMsIHU2NCBwYWNrZXRzLFxuLS1cbm5ldC9zY2hlZC9hY3RfY3QuYy0xNjM1LVxubmV0L3NjaGVkL2FjdF9jdC5jOjE2MzY6c3RhdGljIGludCB0Y2ZfY3Rfb2ZmbG9hZF9hY3Rfc2V0dXAoc3RydWN0IHRjX2FjdGlvbiAqYWN0LCB2b2lkICplbnRyeV9kYXRhLFxubmV0L3NjaGVkL2FjdF9jdC5jLTE2MzctXHRcdFx0XHQgICAgdTMyICppbmRleF9pbmMsIGJvb2wgYmluZCxcbi0tXG5uZXQvc2NoZWQvYWN0X2N0LmMtMTY0Mi1cbm5ldC9zY2hlZC9hY3RfY3QuYzoxNjQzOlx0XHRpZiAodGNmX2N0X2hlbHBlcihhY3QpKVxubmV0L3NjaGVkL2FjdF9jdC5jLTE2NDQtXHRcdFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xuLS1cbm5ldC9zY2hlZC9hY3RfY3QuYy0xNjQ2LVx0XHRlbnRyeS1cdTAwM2VpZCA9IEZMT1dfQUNUSU9OX0NUO1xubmV0L3NjaGVkL2FjdF9jdC5jOjE2NDc6XHRcdGVudHJ5LVx1MDAzZWN0LmFjdGlvbiA9IHRjZl9jdF9hY3Rpb24oYWN0KTtcbm5ldC9zY2hlZC9hY3RfY3QuYzoxNjQ4Olx0XHRlbnRyeS1cdTAwM2VjdC56b25lID0gdGNmX2N0X3pvbmUoYWN0KTtcbm5ldC9zY2hlZC9hY3RfY3QuYzoxNjQ5Olx0XHRlbnRyeS1cdTAwM2VjdC5mbG93X3RhYmxlID0gdGNmX2N0X2Z0KGFjdCk7XG5uZXQvc2NoZWQvYWN0X2N0LmMtMTY1MC1cdFx0KmluZGV4X2luYyA9IDE7XG4tLVxubmV0L3NjaGVkL2FjdF9jdC5jLTE2NTktXG5uZXQvc2NoZWQvYWN0X2N0LmM6MTY2MDpzdGF0aWMgc2l6ZV90IHRjZl9jdF9nZXRfZmlsbF9zaXplKGNvbnN0IHN0cnVjdCB0Y19hY3Rpb24gKmFjdClcbm5ldC9zY2hlZC9hY3RfY3QuYy0xNjYxLXtcbm5ldC9zY2hlZC9hY3RfY3QuYzoxNjYyOlx0Y29uc3Qgc3RydWN0IHRjZl9jdF9wYXJhbXMgKnA7XG5uZXQvc2NoZWQvYWN0X2N0LmMtMTY2My1cdHNpemVfdCBzaXplO1xuLS1cbm5ldC9zY2hlZC9hY3RfY3QuYz0xNzA1PXN0YXRpYyBzdHJ1Y3QgdGNfYWN0aW9uX29wcyBhY3RfY3Rfb3BzID0ge1xuLS1cbm5ldC9zY2hlZC9hY3RfY3QuYy0xNzA4LVx0Lm93bmVyXHRcdD1cdFRISVNfTU9EVUxFLFxubmV0L3NjaGVkL2FjdF9jdC5jOjE3MDk6XHQuYWN0XHRcdD1cdHRjZl9jdF9hY3QsXG5uZXQvc2NoZWQvYWN0X2N0LmM6MTcxMDpcdC5kdW1wXHRcdD1cdHRjZl9jdF9kdW1wLFxubmV0L3NjaGVkL2FjdF9jdC5jOjE3MTE6XHQuaW5pdFx0XHQ9XHR0Y2ZfY3RfaW5pdCxcbm5ldC9zY2hlZC9hY3RfY3QuYzoxNzEyOlx0LmNsZWFudXBcdD1cdHRjZl9jdF9jbGVhbnVwLFxubmV0L3NjaGVkL2FjdF9jdC5jLTE3MTMtXHQuc3RhdHNfdXBkYXRlXHQ9XHR0Y2Zfc3RhdHNfdXBkYXRlLFxubmV0L3NjaGVkL2FjdF9jdC5jOjE3MTQ6XHQuZ2V0X2ZpbGxfc2l6ZVx0PVx0dGNmX2N0X2dldF9maWxsX3NpemUsXG5uZXQvc2NoZWQvYWN0X2N0LmM6MTcxNTpcdC5vZmZsb2FkX2FjdF9zZXR1cCA9XHR0Y2ZfY3Rfb2ZmbG9hZF9hY3Rfc2V0dXAsXG5uZXQvc2NoZWQvYWN0X2N0LmMtMTcxNi1cdC5zaXplXHRcdD1cdHNpemVvZihzdHJ1Y3QgdGNmX2N0KSxcbi0tXG5uZXQvc2NoZWQvYWN0X2N0LmM9MTczOT1zdGF0aWMgaW50IF9faW5pdCBjdF9pbml0X21vZHVsZSh2b2lkKVxuLS1cbm5ldC9zY2hlZC9hY3RfY3QuYy0xNzQ2LVxubmV0L3NjaGVkL2FjdF9jdC5jOjE3NDc6XHRlcnIgPSB0Y2ZfY3RfZmxvd190YWJsZXNfaW5pdCgpO1xubmV0L3NjaGVkL2FjdF9jdC5jLTE3NDgtXHRpZiAoZXJyKVxuLS1cbm5ldC9zY2hlZC9hY3RfY3QuYy0xNzU5LWVycl9yZWdpc3Rlcjpcbm5ldC9zY2hlZC9hY3RfY3QuYzoxNzYwOlx0dGNmX2N0X2Zsb3dfdGFibGVzX3VuaW5pdCgpO1xubmV0L3NjaGVkL2FjdF9jdC5jLTE3NjEtZXJyX3RibF9pbml0OlxuLS1cbm5ldC9zY2hlZC9hY3RfY3QuYz0xNzY2PXN0YXRpYyB2b2lkIF9fZXhpdCBjdF9jbGVhbnVwX21vZHVsZSh2b2lkKVxuLS1cbm5ldC9zY2hlZC9hY3RfY3QuYy0xNzY5LVx0dGNmX3VucmVnaXN0ZXJfYWN0aW9uKFx1MDAyNmFjdF9jdF9vcHMsIFx1MDAyNmN0X25ldF9vcHMpO1xubmV0L3NjaGVkL2FjdF9jdC5jOjE3NzA6XHR0Y2ZfY3RfZmxvd190YWJsZXNfdW5pbml0KCk7XG5uZXQvc2NoZWQvYWN0X2N0LmMtMTc3MS1cdGRlc3Ryb3lfd29ya3F1ZXVlKGFjdF9jdF93cSk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA5IDA4OjM5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDM2ODAxCgkJCQkJCQlvdXRwdXQ6IDE4NgoJCQkJCQkJdGhvdWdodHM6IDM3MQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBbmFseXNpcyBvZiBDb25uZWN0aW9uIFRyYWNraW5nIENvbmZpZ3VyYXRpb24qKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93biBzeXN0ZW1hdGljYWxseS4gRmlyc3QsIEkgbmVlZCB0byBjb25maXJtIHRoZSBrZXkgc3ltYm9scyByZWxhdGVkIHRvIGNvbm5lY3Rpb24gdHJhY2tpbmcuIEkmIzM5O3ZlIGZsYWdnZWQgdGhlc2UgZnVuY3Rpb25zIGFzIHBvdGVudGlhbGx5IGludGVyZXN0aW5nOiBgdGNmX2N0X2Zsb3dfdGFibGVfZ2V0YCwgYHRjZl9jdF9pbml0YCwgYHRjZl9jdF9hY3RgLCBhbmQgYG5mX2Zsb3dfdGFibGVfaW5pdGAuIFRoZXNlIGFwcGVhciB0byBiZSB0aGUgY29yZSBrZXJuZWwgZnVuY3Rpb25zIEkmIzM5O20gaW50ZXJlc3RlZCBpbiB0ZXN0aW5nLgoKTmV4dCwgSSBuZWVkIHRvIGVuc3VyZSBhbGwgdGhlIHJlbGV2YW50IGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBhcmUgZW5hYmxlZCB0byBmdWxseSBleGVyY2lzZSB0aGlzIGZ1bmN0aW9uYWxpdHkuIEkgc2VlIGEgbGlzdCBvZiBsaWtlbHkgY2FuZGlkYXRlczogYE5FVF9BQ1RfQ1RgLCBgTkVUX0NMU19BQ1RgLCBgTkZfQ09OTlRSQUNLYCwgYW5kIGBORl9GTE9XX1RBQkxFYC4gSXQmIzM5O3MgYSBnb29kIHN0YXJ0aW5nIHBvaW50LCBidXQgSSBuZWVkIHRvIGJlIHN1cmUuCgpEaWdnaW5nIGludG8gdGhlIGBuZXQvc2NoZWQvS2NvbmZpZ2AgZmlsZSBpcyBjcnVjaWFsIGhlcmUuIFRoZSBkZWZpbml0aW9uIG9mIGBORVRfQUNUX0NUYCBpcyBwYXJ0aWN1bGFybHkgcmV2ZWFsaW5nLiBJdCB0ZWxscyBtZSB0aGF0IGBORVRfQUNUX0NUYCBkZXBlbmRzIG9uIGBORVRfQ0xTX0FDVGAsIGBORl9DT05OVFJBQ0tgLCBhbmQgYE5GX0ZMT1dfVEFCTEVgLCBhbmQgaXQgb3B0aW9uYWxseSBzZWxlY3RzIGBORl9OQVRfT1ZTYCBpZiBgTkZfTkFUYCBpcyBhbHNvIGVuYWJsZWQuIFRoZSBkZXBlbmRlbmN5IG9uIGBORl9GTE9XX1RBQkxFYCBpcyBwYXJ0aWN1bGFybHkgaW1wb3J0YW50LCBjb25maXJtaW5nIG15IGluaXRpYWwgYXNzZXNzbWVudC4gRnVydGhlcm1vcmUsIGl0ICpzZWxlY3RzKiBgTkZfQ09OTlRSQUNLX09WU2AsIHNvIEkgbmVlZCB0byBiZSBhd2FyZSBvZiB0aGUgaW1wbGljYXRpb25zLiBUaGlzIG1ha2VzIG1lIGNvbmZpZGVudCB0aGF0IGVuYWJsaW5nIGFsbCB0aGVzZSBjb25maWdzIOKAkyBgTkVUX0FDVF9DVGAsIGBORVRfQ0xTX0FDVGAsIGBORl9DT05OVFJBQ0tgLCBhbmQgYE5GX0ZMT1dfVEFCTEVgIOKAkyBzaG91bGQgZW5zdXJlIHRoYXQgZXZlcnl0aGluZyBpcyBjb21waWxlZCBhbmQgYXZhaWxhYmxlIGZvciB0ZXN0aW5nLgoKVG8gYmUgY29tcGxldGVseSB0aG9yb3VnaCwgSSYjMzk7bSBnb2luZyB0byBkb3VibGUtY2hlY2sgbXkgZmluZGluZ3MuIEkmIzM5O20gY29uZmlybWluZyB0aGF0IHRoaXMgY29tcG9uZW50IGlzIGluZGVlZCBmbGFnZ2VkIGFzICYjMzQ7V29ydGhGdXp6aW5nJiMzNDsgYW5kIHJlLXZlcmlmeWluZyBteSBsaXN0cyBvZiBgRW5hYmxlQ29uZmlnc2AgYW5kIGBGb2N1c1N5bWJvbHNgLiBGaW5hbGx5LCBJJiMzOTttIGdvaW5nIHRvIGluY2x1ZGUgYSBjb25jaXNlIHJlYXNvbmluZyBzdGF0ZW1lbnQgdGhhdCBzdW1tYXJpemVzIG15IGZpbmRpbmdzLCBiZWNhdXNlIGNsZWFyIGRvY3VtZW50YXRpb24gaXMgYWx3YXlzIGltcG9ydGFudC4gVGhpcyBzZWVtcyBzb2xpZCwgc28gSSYjMzk7bSByZWFkeSB0byBtb3ZlIGZvcndhcmQuIFRpbWUgdG8gY2FsbCBgc2V0LXJlc3VsdHNgLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOSAwODozOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7TkVUX0FDVF9DVCYjMzQ7LAogICAgJiMzNDtORVRfQ0xTX0FDVCYjMzQ7LAogICAgJiMzNDtORl9DT05OVFJBQ0smIzM0OywKICAgICYjMzQ7TkZfRkxPV19UQUJMRSYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3RjZl9jdF9mbG93X3RhYmxlX2dldCYjMzQ7LAogICAgJiMzNDt0Y2ZfY3RfaW5pdCYjMzQ7LAogICAgJiMzNDt0Y2ZfY3RfYWN0JiMzNDssCiAgICAmIzM0O25mX2Zsb3dfdGFibGVfaW5pdCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyB0aGUgaW5pdGlhbGl6YXRpb24gb3JkZXIgaW4gdGNmX2N0X2Zsb3dfdGFibGVfZ2V0KCkgYnkgc2V0dGluZyB0aGUgbmV0bnMgcG9pbnRlciAod3JpdGVfcG5ldCkgYmVmb3JlIGNhbGxpbmcgbmZfZmxvd190YWJsZV9pbml0KCksIHByZXZlbnRpbmcgcG90ZW50aWFsIHJhY2VzIG9yIHVuaW5pdGlhbGl6ZWQgbmV0bnMgYWNjZXNzIGR1cmluZyBmbG93IHRhYmxlIGluaXRpYWxpemF0aW9uLiBUaGUgY29kZSBpcyBwYXJ0IG9mIHRoZSBUQyBjb25uZWN0aW9uIHRyYWNraW5nIGFjdGlvbiAoYWN0X2N0KSBhbmQgaXMgcmVhY2hhYmxlIHZpYSBydG5ldGxpbmsgdGMgYWN0aW9uIGNvbW1hbmRzIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkIGVudmlyb25tZW50cy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7TkVUX0FDVF9DVCYjMzQ7LAogICAgJiMzNDtORVRfQ0xTX0FDVCYjMzQ7LAogICAgJiMzNDtORl9DT05OVFJBQ0smIzM0OywKICAgICYjMzQ7TkZfRkxPV19UQUJMRSYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3RjZl9jdF9mbG93X3RhYmxlX2dldCYjMzQ7LAogICAgJiMzNDt0Y2ZfY3RfaW5pdCYjMzQ7LAogICAgJiMzNDt0Y2ZfY3RfYWN0JiMzNDssCiAgICAmIzM0O25mX2Zsb3dfdGFibGVfaW5pdCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyB0aGUgaW5pdGlhbGl6YXRpb24gb3JkZXIgaW4gdGNmX2N0X2Zsb3dfdGFibGVfZ2V0KCkgYnkgc2V0dGluZyB0aGUgbmV0bnMgcG9pbnRlciAod3JpdGVfcG5ldCkgYmVmb3JlIGNhbGxpbmcgbmZfZmxvd190YWJsZV9pbml0KCksIHByZXZlbnRpbmcgcG90ZW50aWFsIHJhY2VzIG9yIHVuaW5pdGlhbGl6ZWQgbmV0bnMgYWNjZXNzIGR1cmluZyBmbG93IHRhYmxlIGluaXRpYWxpemF0aW9uLiBUaGUgY29kZSBpcyBwYXJ0IG9mIHRoZSBUQyBjb25uZWN0aW9uIHRyYWNraW5nIGFjdGlvbiAoYWN0X2N0KSBhbmQgaXMgcmVhY2hhYmxlIHZpYSBydG5ldGxpbmsgdGMgYWN0aW9uIGNvbW1hbmRzIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkIGVudmlyb25tZW50cy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNy8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDkgMDg6Mzk8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPklmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOSAwODozOTwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5jb3JlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIHJlb3JkZXJzIHRoZSBpbml0aWFsaXphdGlvbiBvZiB0aGUgZmxvdyB0YWJsZSYjMzk7cyBuZXR3b3JrIG5hbWVzcGFjZSBwb2ludGVyIChgd3JpdGVfcG5ldChcdTAwMjZjdF9mdC1cdTAwM2VuZl9mdC5uZXQsIG5ldClgKSBzbyB0aGF0IGl0IG9jY3VycyBwcmlvciB0byBjYWxsaW5nIGBuZl9mbG93X3RhYmxlX2luaXQoXHUwMDI2Y3RfZnQtXHUwMDNlbmZfZnQpYC5cblxuVGhlIGVuY2xvc2luZyBgc3RydWN0IHRjZl9jdF9mbG93X3RhYmxlYCAoYGN0X2Z0YCkgaXMgYWxsb2NhdGVkIHZpYSBga3phbGxvY19vYmpgLCBlbnN1cmluZyBhbGwgZmllbGRzIGFuZCBwYWRkaW5nIGFyZSB6ZXJvLWluaXRpYWxpemVkLiBQcmlvciB0byB0aGUgZml4LCBhY2Nlc3NpbmcgYG5mX2Z0Lm5ldGAgYmVmb3JlIGB3cml0ZV9wbmV0YCB3b3VsZCByZWFkIGEgemVyb2VkL05VTEwgcG9pbnRlciAod2hpY2ggd291bGQgbWFuaWZlc3QgYXMgYSBOVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2Ugb3IgbG9naWNhbCBlcnJvciwgY2F1Z2h0IGJ5IHN0YW5kYXJkIGNyYXNoIGhhbmRsZXJzIGFuZCBLQVNBTiksIHJhdGhlciB0aGFuIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LlxuXG5ObyB1bmluaXRpYWxpemVkIHN0YWNrIG9yIGhlYXAgbWVtb3J5IGlzIGludHJvZHVjZWQgb3IgZXhwb3NlZCwgbm8gdW5pbml0aWFsaXplZCBmaWVsZHMgYXJlIHJlYWQgb3IgY29waWVkIHRvIHVzZXJzcGFjZSwgYW5kIG5vIGJ1ZmZlciBib3VuZHMgb3IgbGVuZ3RocyBhcmUgYWZmZWN0ZWQuIEhlbmNlLCBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBpcyBub3QgbmVlZGVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeQplcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZApkZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpCmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLgoKQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46Ci0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZQogIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTgogIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVAKICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLgotIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLAogIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy4KClJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sCkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuCkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFkKc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3MKdGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi4KCkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0CnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLAphIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXMKdGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmcKdW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sCmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSwKY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuCgpTZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6CjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiCiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzCiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuCjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMKICAgb3Igc3RydWN0IGZpZWxkcy4KMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkcwogICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLgo0LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2VzcwogICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuCgpTZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjoKLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlcgogIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodAogIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS4KLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZAogIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC4KLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuCgpVc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlCmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+VGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjQKCkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgODk0YjkxYzM4NDRjOWY5NWQ3MTNiYmUxNTMwZjc0MDliNzI1YTNiYgpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBXZWQgU2VwIDkgMDg6Mzg6MzQgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9uZXQvc2NoZWQvYWN0X2N0LmMgYi9uZXQvc2NoZWQvYWN0X2N0LmMKaW5kZXggOTA4MGNiMzg2YzE2OS4uNmJkMTlkYjY4ZDk3MSAxMDA2NDQKLS0tIGEvbmV0L3NjaGVkL2FjdF9jdC5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9zY2hlZC9hY3RfY3QuYwpAQCAtMzQ5LDEwICYjNDM7MzQ5LDEwIEBAIHN0YXRpYyBpbnQgdGNmX2N0X2Zsb3dfdGFibGVfZ2V0KHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHRjZl9jdF9wYXJhbXMgKnBhcmFtcykKIAljdF9mdC0mZ3Q7bmZfZnQudHlwZSA9ICZhbXA7Zmxvd3RhYmxlX2N0OwogCWN0X2Z0LSZndDtuZl9mdC5mbGFncyB8PSBORl9GTE9XVEFCTEVfSFdfT0ZGTE9BRCB8CiAJCQkgICAgICBORl9GTE9XVEFCTEVfQ09VTlRFUjsKJiM0MzsJd3JpdGVfcG5ldCgmYW1wO2N0X2Z0LSZndDtuZl9mdC5uZXQsIG5ldCk7CiAJZXJyID0gbmZfZmxvd190YWJsZV9pbml0KCZhbXA7Y3RfZnQtJmd0O25mX2Z0KTsKIAlpZiAoZXJyKQogCQlnb3RvIGVycl9pbml0OwotCXdyaXRlX3BuZXQoJmFtcDtjdF9mdC0mZ3Q7bmZfZnQubmV0LCBuZXQpOwogCiAJX19tb2R1bGVfZ2V0KFRISVNfTU9EVUxFKTsKIG91dF91bmxvY2s6CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI5LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOSAwODozOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMTUzCgkJCQkJCQlvdXRwdXQ6IDM3CgkJCQkJCQl0aG91Z2h0czogNDIzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKktNU0FOIEZ1enppbmcgRXZhbHVhdGlvbiAtIEFjdF9DVCBQYXRjaCoqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBNeSBnb2FsIGlzIHRvIGRldGVybWluZSBpZiB0aGlzIGBhY3RfY3QuY2AgcGF0Y2ggd2FycmFudHMgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uLCBvciBpZiB0aGUgc3RhbmRhcmQgS0FTQU4vTE9DS0RFUCBjaGVja3Mgc3VmZmljZS4gVGhpcyBpcyBhIHN0YW5kYXJkIGJlbmlnbi9kZWZlbnNpdmUga2VybmVsIHNhbml0aXplciBhc3Nlc3NtZW50LCBhIHR5cGljYWwgUUEgdGFzaywgc28gbGV0JiMzOTtzIGtlZXAgaXQgc2ltcGxlLiBUaGUgc2VjdXJpdHkgZ3VpZGVsaW5lcyBhcmUgY2xlYXI6IGFuYWx5emUgdGhlIHBhdGNoLCBhc3Nlc3MgdGhlIGNvbnRleHQsIGFuZCB1dGlsaXplIHRoZSBwcm92aWRlZCB0b29scyBpZiBuZWVkZWQuCgpGaXJzdCwgbGV0JiMzOTtzIGV4YW1pbmUgdGhlIGNvZGUuIFRoaXMgZGlmZiBzZWVtcyByZWxhdGl2ZWx5IHN0cmFpZ2h0Zm9yd2FyZC4gSXQmIzM5O3MgYSByZW9yZGVyaW5nIG9mIHRoZSBgd3JpdGVfcG5ldGAgY2FsbCBhcm91bmQgYG5mX2Zsb3dfdGFibGVfaW5pdGAuIFRoZSBvcmlnaW5hbCBjb2RlIGhhZCBgd3JpdGVfcG5ldGAgKmFmdGVyKiBhIHBvdGVudGlhbCBmYWlsdXJlLiBUaGUgY2hhbmdlZCBjb2RlIG1vdmVzIHRoZSBjYWxsICpiZWZvcmUqIGluaXRpYWxpemF0aW9uLiBJdCYjMzk7cyBpbXBvcnRhbnQgdG8gdW5kZXJzdGFuZCAqd2h5KiB0aGlzIGNoYW5nZSB3YXMgbWFkZS4KCkkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQgYG5mX2Zsb3dfdGFibGVfaW5pdGAgYWN0dWFsbHkgZG9lcyBhbmQgd2hhdCBgZXJyX2luaXRgIGVudGFpbHMuIEp1bXBpbmcgdG8gYG5ldC9zY2hlZC9hY3RfY3QuY2AgYW5kIGxvb2tpbmcgYXJvdW5kIGxpbmUgMzQ5IGlzIHRoZSBuZXh0IHN0ZXAgdG8gZ2FpbiBhIGJldHRlciB1bmRlcnN0YW5kaW5nIG9mIHBvdGVudGlhbCByaXNrcyBhc3NvY2lhdGVkIHdpdGggdGhpcyBjaGFuZ2UuIFRoZSBnb2FsIGlzIHRvIHNlZSBpZiBhbnkgdW5pbml0aWFsaXplZCBkYXRhIG9yIHJhY2UgY29uZGl0aW9ucyBhcmUgZXhwb3NlZCBieSB0aGlzIGNvZGUgcmVvcmRlcmluZy4gVGhlbiBJIHdpbGwgZGV0ZXJtaW5lIHRoZSByaXNrIG9mIEtNU0FOIGJhc2VkIG9uIHRoYXQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzAvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA5IDA4OjM5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L3NjaGVkL2FjdF9jdC5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMzMwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDYwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAzMzA6XHRcdG11dGV4X2xvY2soXHUwMDI2em9uZXNfbXV0ZXgpO1xuIDMzMTpcdFx0cmN1X3JlYWRfbG9jaygpO1xuIDMzMjpcdFx0Y3RfZnQgPSByaGFzaHRhYmxlX2xvb2t1cChcdTAwMjZ6b25lc19odCwgXHUwMDI2a2V5LCB6b25lc19wYXJhbXMpO1xuIDMzMzpcdFx0aWYgKGN0X2Z0IFx1MDAyNlx1MDAyNiByZWZjb3VudF9pbmNfbm90X3plcm8oXHUwMDI2Y3RfZnQtXHUwMDNlcmVmKSkge1xuIDMzNDpcdFx0XHRyY3VfcmVhZF91bmxvY2soKTtcbiAzMzU6XHRcdFx0Z290byBvdXRfdW5sb2NrO1xuIDMzNjpcdFx0fVxuIDMzNzpcdFx0cmN1X3JlYWRfdW5sb2NrKCk7XG4gMzM4Olx0XG4gMzM5Olx0XHRjdF9mdCA9IGt6YWxsb2Nfb2JqKCpjdF9mdCk7XG4gMzQwOlx0XHRpZiAoIWN0X2Z0KVxuIDM0MTpcdFx0XHRnb3RvIGVycl9hbGxvYztcbiAzNDI6XHRcdHJlZmNvdW50X3NldChcdTAwMjZjdF9mdC1cdTAwM2VyZWYsIDEpO1xuIDM0MzpcdFxuIDM0NDpcdFx0Y3RfZnQtXHUwMDNla2V5ID0ga2V5O1xuIDM0NTpcdFx0ZXJyID0gcmhhc2h0YWJsZV9pbnNlcnRfZmFzdChcdTAwMjZ6b25lc19odCwgXHUwMDI2Y3RfZnQtXHUwMDNlbm9kZSwgem9uZXNfcGFyYW1zKTtcbiAzNDY6XHRcdGlmIChlcnIpXG4gMzQ3Olx0XHRcdGdvdG8gZXJyX2luc2VydDtcbiAzNDg6XHRcbiAzNDk6XHRcdGN0X2Z0LVx1MDAzZW5mX2Z0LnR5cGUgPSBcdTAwMjZmbG93dGFibGVfY3Q7XG4gMzUwOlx0XHRjdF9mdC1cdTAwM2VuZl9mdC5mbGFncyB8PSBORl9GTE9XVEFCTEVfSFdfT0ZGTE9BRCB8XG4gMzUxOlx0XHRcdFx0ICAgICAgTkZfRkxPV1RBQkxFX0NPVU5URVI7XG4gMzUyOlx0XHR3cml0ZV9wbmV0KFx1MDAyNmN0X2Z0LVx1MDAzZW5mX2Z0Lm5ldCwgbmV0KTtcbiAzNTM6XHRcdGVyciA9IG5mX2Zsb3dfdGFibGVfaW5pdChcdTAwMjZjdF9mdC1cdTAwM2VuZl9mdCk7XG4gMzU0Olx0XHRpZiAoZXJyKVxuIDM1NTpcdFx0XHRnb3RvIGVycl9pbml0O1xuIDM1NjpcdFxuIDM1NzpcdFx0X19tb2R1bGVfZ2V0KFRISVNfTU9EVUxFKTtcbiAzNTg6XHRvdXRfdW5sb2NrOlxuIDM1OTpcdFx0cGFyYW1zLVx1MDAzZWN0X2Z0ID0gY3RfZnQ7XG4gMzYwOlx0XHRwYXJhbXMtXHUwMDNlbmZfZnQgPSBcdTAwMjZjdF9mdC1cdTAwM2VuZl9mdDtcbiAzNjE6XHRcdG11dGV4X3VubG9jayhcdTAwMjZ6b25lc19tdXRleCk7XG4gMzYyOlx0XG4gMzYzOlx0XHRyZXR1cm4gMDtcbiAzNjQ6XHRcbiAzNjU6XHRlcnJfaW5pdDpcbiAzNjY6XHRcdHJoYXNodGFibGVfcmVtb3ZlX2Zhc3QoXHUwMDI2em9uZXNfaHQsIFx1MDAyNmN0X2Z0LVx1MDAzZW5vZGUsIHpvbmVzX3BhcmFtcyk7XG4gMzY3Olx0ZXJyX2luc2VydDpcbiAzNjg6XHRcdGtmcmVlKGN0X2Z0KTtcbiAzNjk6XHRlcnJfYWxsb2M6XG4gMzcwOlx0XHRtdXRleF91bmxvY2soXHUwMDI2em9uZXNfbXV0ZXgpO1xuIDM3MTpcdFx0cmV0dXJuIGVycjtcbiAzNzI6XHR9XG4gMzczOlx0XG4gMzc0Olx0c3RhdGljIHZvaWQgdGNmX2N0X2Zsb3dfdGFibGVfZ2V0X3JlZihzdHJ1Y3QgdGNmX2N0X2Zsb3dfdGFibGUgKmN0X2Z0KVxuIDM3NTpcdHtcbiAzNzY6XHRcdHJlZmNvdW50X2luYyhcdTAwMjZjdF9mdC1cdTAwM2VyZWYpO1xuIDM3NzpcdH1cbiAzNzg6XHRcbiAzNzk6XHRzdGF0aWMgdm9pZCB0Y2ZfY3RfZmxvd190YWJsZV9jbGVhbnVwX3dvcmsoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxuIDM4MDpcdHtcbiAzODE6XHRcdHN0cnVjdCB0Y2ZfY3RfZmxvd190YWJsZSAqY3RfZnQ7XG4gMzgyOlx0XHRzdHJ1Y3QgZmxvd19ibG9jayAqYmxvY2s7XG4gMzgzOlx0XG4gMzg0Olx0XHRjdF9mdCA9IGNvbnRhaW5lcl9vZih0b19yY3Vfd29yayh3b3JrKSwgc3RydWN0IHRjZl9jdF9mbG93X3RhYmxlLFxuIDM4NTpcdFx0XHRcdCAgICAgcndvcmspO1xuIDM4NjpcdFx0bmZfZmxvd190YWJsZV9mcmVlKFx1MDAyNmN0X2Z0LVx1MDAzZW5mX2Z0KTtcbiAzODc6XHRcbiAzODg6XHRcdGJsb2NrID0gXHUwMDI2Y3RfZnQtXHUwMDNlbmZfZnQuZmxvd19ibG9jaztcbiAzODk6XHRcdGRvd25fd3JpdGUoXHUwMDI2Y3RfZnQtXHUwMDNlbmZfZnQuZmxvd19ibG9ja19sb2NrKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMS8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDkgMDg6Mzk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzg1MgoJCQkJCQkJb3V0cHV0OiAyMQoJCQkJCQkJdGhvdWdodHM6IDMwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGFuYWx5c2lzIG9mIHdoYXQgSSYjMzk7bSB0aGlua2luZywgcmVuZGVyZWQgYXMgYSBmaXJzdC1wZXJzb24gc3VtbWFyeSwga2VlcGluZyBpbiBtaW5kIG15IGZpZWxkIGV4cGVydGlzZToKCioqRGl2aW5nIGludG8gdGhlIEZsb3cgVGFibGUgSW5pdGlhbGl6YXRpb24qKgoKT2theSwgdGltZSB0byBnZXQgbXkgaGFuZHMgZGlydHkgYW5kIHVuZGVyc3RhbmQgaG93IHRoZSBOZXR3b3JrIEZpbHRlciAobmYpIGZsb3cgdGFibGUgaXMgaW5pdGlhbGl6ZWQuIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzLCAmIzM0O0xldCYjMzk7cyB0cmFjayBkb3duIHRoZSBgbmZfZmxvd190YWJsZV9pbml0YCBmdW5jdGlvbi4mIzM0OyBJdCYjMzk7cyB0aGUgc3RhcnRpbmcgcG9pbnQgZm9yIHRoaXMgY3J1Y2lhbCBkYXRhIHN0cnVjdHVyZS4gSSYjMzk7bGwgcmVhY2ggZm9yIGBncmVwYCAob3IgbXkgcHJlZmVycmVkIHNlYXJjaCB0b29sIGluIHRoZSBrZXJuZWwgc291cmNlLCBkZXBlbmRpbmcgb24gdGhlIHByb2plY3QgY29udGV4dCkgdG8gcXVpY2tseSBsb2NhdGUgYWxsIGluc3RhbmNlcyBvZiBgbmZfZmxvd190YWJsZV9pbml0YC4gVGhhdCBzaG91bGQgZ2l2ZSBtZSB0aGUgZW50cnkgcG9pbnRzLCB1c2FnZXMsIGFuZCBsaWtlbHkgdGhlIGNyaXRpY2FsIGluY2x1ZGUgZmlsZXMgSSBuZWVkIHRvIGdldCBhIGhpZ2gtbGV2ZWwgdmlldyBvZiBob3cgdGhpcyB0aGluZyBnZXRzIG9mZiB0aGUgZ3JvdW5kLiBGcm9tIHRoZXJlLCBJIGNhbiBiZWdpbiB0byB1bnBhY2sgdGhlIGRhdGEgc3RydWN0dXJlcywgbXV0ZXhlcywgbWVtb3J5IGFsbG9jYXRpb24gc3RyYXRlZ2llcywgYW5kIG92ZXJhbGwgbG9naWMgaW52b2x2ZWQgaW4gc2V0dGluZyB1cCB0aGUgZmxvdyB0YWJsZSBmb3IgZWZmaWNpZW50IHBhY2tldCBwcm9jZXNzaW5nLiBUaGlzIHNlYXJjaCBpcyBteSBmaXJzdCwgY3J1Y2lhbCBzdGVwIHRvd2FyZCB1bmRlcnN0YW5kaW5nIHRoZSBmbG93IHRhYmxlJiMzOTtzIGJlaGF2aW9yLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMyLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOSAwODo0MDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtuZl9mbG93X3RhYmxlX2luaXQmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7aW5jbHVkZS9uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGUuaD0zMjY9dm9pZCBuZl9mbG93X3RhYmxlX2NsZWFudXAoc3RydWN0IG5ldF9kZXZpY2UgKmRldik7XG5pbmNsdWRlL25ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZS5oLTMyNy1cbmluY2x1ZGUvbmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlLmg6MzI4OmludCBuZl9mbG93X3RhYmxlX2luaXQoc3RydWN0IG5mX2Zsb3d0YWJsZSAqZmxvd190YWJsZSk7XG5pbmNsdWRlL25ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZS5oLTMyOS12b2lkIG5mX2Zsb3dfdGFibGVfZnJlZShzdHJ1Y3QgbmZfZmxvd3RhYmxlICpmbG93X3RhYmxlKTtcbi0tXG5pbmNsdWRlL25ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZS5oPTQwOD1zdGF0aWMgaW5saW5lIGJvb2wgbmZfZmxvd19wcHBvZV9wcm90byhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBfX2JlMTYgKmlubmVyX3Byb3RvKVxuLS1cbmluY2x1ZGUvbmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlLmgtNDI1LSNpZmRlZiBDT05GSUdfTkZfRkxPV19UQUJMRV9QUk9DRlNcbmluY2x1ZGUvbmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlLmg6NDI2OmludCBuZl9mbG93X3RhYmxlX2luaXRfcHJvYyhzdHJ1Y3QgbmV0ICpuZXQpO1xuaW5jbHVkZS9uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGUuaC00Mjctdm9pZCBuZl9mbG93X3RhYmxlX2ZpbmlfcHJvYyhzdHJ1Y3QgbmV0ICpuZXQpO1xuaW5jbHVkZS9uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGUuaC00MjgtI2Vsc2VcbmluY2x1ZGUvbmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlLmg6NDI5OnN0YXRpYyBpbmxpbmUgaW50IG5mX2Zsb3dfdGFibGVfaW5pdF9wcm9jKHN0cnVjdCBuZXQgKm5ldClcbmluY2x1ZGUvbmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlLmgtNDMwLXtcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfY29yZS5jPTcwMj1FWFBPUlRfU1lNQk9MX0dQTChuZl9mbG93X2RuYXRfcG9ydCk7XG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfY29yZS5jLTcwMy1cbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9jb3JlLmM6NzA0OmludCBuZl9mbG93X3RhYmxlX2luaXQoc3RydWN0IG5mX2Zsb3d0YWJsZSAqZmxvd3RhYmxlKVxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2NvcmUuYy03MDUte1xuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9jb3JlLmMtNzI1LX1cbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9jb3JlLmM6NzI2OkVYUE9SVF9TWU1CT0xfR1BMKG5mX2Zsb3dfdGFibGVfaW5pdCk7XG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfY29yZS5jLTcyNy1cbi0tXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfY29yZS5jPTc3Nz1FWFBPUlRfU1lNQk9MX0dQTChuZl9mbG93X3RhYmxlX2ZyZWUpO1xubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2NvcmUuYy03NzgtXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfY29yZS5jOjc3OTpzdGF0aWMgaW50IG5mX2Zsb3dfdGFibGVfaW5pdF9uZXQoc3RydWN0IG5ldCAqbmV0KVxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2NvcmUuYy03ODAte1xuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9jb3JlLmM9NzkwPXN0YXRpYyBpbnQgbmZfZmxvd190YWJsZV9wZXJuZXRfaW5pdChzdHJ1Y3QgbmV0ICpuZXQpXG4tLVxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2NvcmUuYy03OTMtXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfY29yZS5jOjc5NDpcdHJldCA9IG5mX2Zsb3dfdGFibGVfaW5pdF9uZXQobmV0KTtcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9jb3JlLmMtNzk1LVx0aWYgKHJldCBcdTAwM2MgMClcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfY29yZS5jLTc5Ny1cbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9jb3JlLmM6Nzk4Olx0cmV0ID0gbmZfZmxvd190YWJsZV9pbml0X3Byb2MobmV0KTtcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9jb3JlLmMtNzk5LVx0aWYgKHJldCBcdTAwM2MgMClcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfaW5ldC5jPTY4PXN0YXRpYyBzdHJ1Y3QgbmZfZmxvd3RhYmxlX3R5cGUgZmxvd3RhYmxlX2luZXQgPSB7XG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfaW5ldC5jLTY5LVx0LmZhbWlseVx0XHQ9IE5GUFJPVE9fSU5FVCxcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9pbmV0LmM6NzA6XHQuaW5pdFx0XHQ9IG5mX2Zsb3dfdGFibGVfaW5pdCxcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9pbmV0LmMtNzEtXHQuc2V0dXBcdFx0PSBuZl9mbG93X3RhYmxlX29mZmxvYWRfc2V0dXAsXG4tLVxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2luZXQuYz03OD1zdGF0aWMgc3RydWN0IG5mX2Zsb3d0YWJsZV90eXBlIGZsb3d0YWJsZV9pcHY0ID0ge1xubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2luZXQuYy03OS1cdC5mYW1pbHlcdFx0PSBORlBST1RPX0lQVjQsXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfaW5ldC5jOjgwOlx0LmluaXRcdFx0PSBuZl9mbG93X3RhYmxlX2luaXQsXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfaW5ldC5jLTgxLVx0LnNldHVwXHRcdD0gbmZfZmxvd190YWJsZV9vZmZsb2FkX3NldHVwLFxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9pbmV0LmM9ODg9c3RhdGljIHN0cnVjdCBuZl9mbG93dGFibGVfdHlwZSBmbG93dGFibGVfaXB2NiA9IHtcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9pbmV0LmMtODktXHQuZmFtaWx5XHRcdD0gTkZQUk9UT19JUFY2LFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2luZXQuYzo5MDpcdC5pbml0XHRcdD0gbmZfZmxvd190YWJsZV9pbml0LFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2luZXQuYy05MS1cdC5zZXR1cFx0XHQ9IG5mX2Zsb3dfdGFibGVfb2ZmbG9hZF9zZXR1cCxcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfcHJvY2ZzLmM9NjA9c3RhdGljIGNvbnN0IHN0cnVjdCBzZXFfb3BlcmF0aW9ucyBuZl9mbG93X3RhYmxlX2NwdV9zZXFfb3BzID0ge1xuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9wcm9jZnMuYy02Ni1cbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9wcm9jZnMuYzo2NzppbnQgbmZfZmxvd190YWJsZV9pbml0X3Byb2Moc3RydWN0IG5ldCAqbmV0KVxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX3Byb2Nmcy5jLTY4LXtcbi0tXG5uZXQvc2NoZWQvYWN0X2N0LmM9MzI0PXN0YXRpYyBpbnQgdGNmX2N0X2Zsb3dfdGFibGVfZ2V0KHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHRjZl9jdF9wYXJhbXMgKnBhcmFtcylcbi0tXG5uZXQvc2NoZWQvYWN0X2N0LmMtMzUyLVx0d3JpdGVfcG5ldChcdTAwMjZjdF9mdC1cdTAwM2VuZl9mdC5uZXQsIG5ldCk7XG5uZXQvc2NoZWQvYWN0X2N0LmM6MzUzOlx0ZXJyID0gbmZfZmxvd190YWJsZV9pbml0KFx1MDAyNmN0X2Z0LVx1MDAzZW5mX2Z0KTtcbm5ldC9zY2hlZC9hY3RfY3QuYy0zNTQtXHRpZiAoZXJyKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMzLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOSAwODo0MDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1Njc0CgkJCQkJCQlvdXRwdXQ6IDQyCgkJCQkJCQl0aG91Z2h0czogMjQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcy4gSGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIGxpbmVzIG9mIGNvZGUsIHByZXNlbnRlZCBhcyBpZiB0aGV5IHdlcmUgbXkgb3duIGludGVybmFsIHRob3VnaHQgcHJvY2VzczoKCioqRGl2aW5nIGludG8gYG5mX2Zsb3dfdGFibGVfY29yZS5jYCoqCgpBbHJpZ2h0LCB0aW1lIHRvIGNyYWNrIG9wZW4gYG5mX2Zsb3dfdGFibGVfY29yZS5jYC4gTGV0JiMzOTtzIGdldCBkb3duIHRvIGJyYXNzIHRhY2tzIGFuZCB1bmRlcnN0YW5kIGhvdyB0aGlzIGZsb3cgdGFibGUgaXMgYWN0dWFsbHkgd29ya2luZy4gSSYjMzk7bSBlc3BlY2lhbGx5IGludGVyZXN0ZWQgaW4gdGhlIGNvcmUgbWVjaGFuaXNtcy4gSSYjMzk7bSBleHBlY3RpbmcgdG8gc2VlIHRoZSBjZW50cmFsIGRhdGEgc3RydWN0dXJlcyBmb3Igc3RvcmluZyBmbG93IGVudHJpZXMsIHRoZSBsb2dpYyBmb3IgYWRkaW5nIGFuZCByZW1vdmluZyB0aGVtLCBhbmQgaG93IGl0IGFsbCBpbnRlcmFjdHMgd2l0aCB0aGUgbmV0d29yayBzdGFjay4gSSBhbnRpY2lwYXRlIHRoZXJlIHdpbGwgYmUgYSBjbGVhciBlbXBoYXNpcyBvbiBwZXJmb3JtYW5jZSBjb25zaWRlcmF0aW9uczsgZ2l2ZW4gdGhlIG5hdHVyZSBvZiBhIGZsb3cgdGFibGUsIHNwZWVkIGFuZCBlZmZpY2llbnQgbG9va3VwcyBhcmUgZ29pbmcgdG8gYmUgcGFyYW1vdW50LiBJJiMzOTttIGFsc28gYmV0dGluZyB0aGVyZSYjMzk7cyBhIGRlbGljYXRlIGJhbGFuY2UgaGVyZSBiZXR3ZWVuIG1lbW9yeSB1c2FnZSBhbmQgc2VhcmNoIGVmZmljaWVuY3kuIEkmIzM5O20ga2VlbiB0byBmaW5kIG91dCB0aGUgdHJhZGUtb2ZmcyBpbXBsZW1lbnRlZC4gSSYjMzk7bSBhbHNvIGN1cmlvdXMgdG8gc2VlIHRoZSBsb2NraW5nIG1lY2hhbmlzbXMgdXNlZDsgY29uY3VycmVuY3kgaXNzdWVzIGFyZSBhbHdheXMgYSBjb25jZXJuIGluIG5ldHdvcmsgcHJvZ3JhbW1pbmcuIEkmIzM5O20gZ29pbmcgdG8gbG9vayBmb3IgYW55IGNsZXZlciBvcHRpbWl6YXRpb25zLCBwZXJoYXBzIGxldmVyYWdpbmcgaGFyZHdhcmUgYWNjZWxlcmF0aW9uIGlmIGl0JiMzOTtzIHRoZXJlLCBhbmQgZXJyb3IgaGFuZGxpbmcgYXMgaXQgaGFzIHRvIGJlIHJvYnVzdC4gTGV0JiMzOTtzIHNlZSB3aGF0JiMzOTtzIGFjdHVhbGx5IHVuZGVyIHRoZSBob29kIQoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM0LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOSAwODo0MDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9jb3JlLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA3MDAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDcwMDpcdFx0bmZfZmxvd19uYXRfcG9ydChza2IsIHRob2ZmLCBwcm90b2NvbCwgcG9ydCwgbmV3X3BvcnQpO1xuIDcwMTpcdH1cbiA3MDI6XHRFWFBPUlRfU1lNQk9MX0dQTChuZl9mbG93X2RuYXRfcG9ydCk7XG4gNzAzOlx0XG4gNzA0Olx0aW50IG5mX2Zsb3dfdGFibGVfaW5pdChzdHJ1Y3QgbmZfZmxvd3RhYmxlICpmbG93dGFibGUpXG4gNzA1Olx0e1xuIDcwNjpcdFx0aW50IGVycjtcbiA3MDc6XHRcbiA3MDg6XHRcdElOSVRfREVMQVlFRF9XT1JLKFx1MDAyNmZsb3d0YWJsZS1cdTAwM2VnY193b3JrLCBuZl9mbG93X29mZmxvYWRfd29ya19nYyk7XG4gNzA5Olx0XHRmbG93X2Jsb2NrX2luaXQoXHUwMDI2Zmxvd3RhYmxlLVx1MDAzZWZsb3dfYmxvY2spO1xuIDcxMDpcdFx0aW5pdF9yd3NlbShcdTAwMjZmbG93dGFibGUtXHUwMDNlZmxvd19ibG9ja19sb2NrKTtcbiA3MTE6XHRcbiA3MTI6XHRcdGVyciA9IHJoYXNodGFibGVfaW5pdChcdTAwMjZmbG93dGFibGUtXHUwMDNlcmhhc2h0YWJsZSxcbiA3MTM6XHRcdFx0XHQgICAgICBcdTAwMjZuZl9mbG93X29mZmxvYWRfcmhhc2hfcGFyYW1zKTtcbiA3MTQ6XHRcdGlmIChlcnIgXHUwMDNjIDApXG4gNzE1Olx0XHRcdHJldHVybiBlcnI7XG4gNzE2Olx0XG4gNzE3Olx0XHRxdWV1ZV9kZWxheWVkX3dvcmsoc3lzdGVtX3Bvd2VyX2VmZmljaWVudF93cSxcbiA3MTg6XHRcdFx0XHQgICBcdTAwMjZmbG93dGFibGUtXHUwMDNlZ2Nfd29yaywgSFopO1xuIDcxOTpcdFxuIDcyMDpcdFx0bXV0ZXhfbG9jayhcdTAwMjZmbG93dGFibGVfbG9jayk7XG4gNzIxOlx0XHRsaXN0X2FkZChcdTAwMjZmbG93dGFibGUtXHUwMDNlbGlzdCwgXHUwMDI2Zmxvd3RhYmxlcyk7XG4gNzIyOlx0XHRtdXRleF91bmxvY2soXHUwMDI2Zmxvd3RhYmxlX2xvY2spO1xuIDcyMzpcdFxuIDcyNDpcdFx0cmV0dXJuIDA7XG4gNzI1Olx0fVxuIDcyNjpcdEVYUE9SVF9TWU1CT0xfR1BMKG5mX2Zsb3dfdGFibGVfaW5pdCk7XG4gNzI3Olx0XG4gNzI4Olx0c3RhdGljIHZvaWQgbmZfZmxvd190YWJsZV9kb19jbGVhbnVwKHN0cnVjdCBuZl9mbG93dGFibGUgKmZsb3dfdGFibGUsXG4gNzI5Olx0XHRcdFx0XHQgICAgIHN0cnVjdCBmbG93X29mZmxvYWQgKmZsb3csIHZvaWQgKmRhdGEpXG4gNzMwOlx0e1xuIDczMTpcdFx0c3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IGRhdGE7XG4gNzMyOlx0XG4gNzMzOlx0XHRpZiAoIWRldikge1xuIDczNDpcdFx0XHRmbG93X29mZmxvYWRfdGVhcmRvd24oZmxvdyk7XG4gNzM1Olx0XHRcdHJldHVybjtcbiA3MzY6XHRcdH1cbiA3Mzc6XHRcbiA3Mzg6XHRcdGlmIChuZXRfZXEobmZfY3RfbmV0KGZsb3ctXHUwMDNlY3QpLCBkZXZfbmV0KGRldikpIFx1MDAyNlx1MDAyNlxuIDczOTpcdFx0ICAgIChmbG93LVx1MDAzZXR1cGxlaGFzaFswXS50dXBsZS5paWZpZHggPT0gZGV2LVx1MDAzZWlmaW5kZXggfHxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNS8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDkgMDg6NDA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjYyNwoJCQkJCQkJb3V0cHV0OiAyOQoJCQkJCQkJdGhvdWdodHM6IDUxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRob3VnaHQgcHJvY2VzcywgYXMgaWYgSSB3ZXJlIGFuYWx5emluZyB0aGF0IGNvZGU6CgoqKkRpdmluZyBpbnRvIHRoZSBGbG93dGFibGUgTG9naWMqKgoKT2theSwgc28gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoaXMgY29kZSBpbnRlcmFjdHMgd2l0aCB0aGUgZmxvd3RhYmxlLiBNeSBmaXJzdCBpbnN0aW5jdCBpcyB0byBmaW5kIG91dCBleGFjdGx5IHdoZXJlIGByZWFkX3BuZXQoJmFtcDtmbG93dGFibGUtJmd0O25ldClgIG9yIGp1c3QgdGhlIGV4cHJlc3Npb24gYGZsb3d0YWJsZS0mZ3Q7bmV0YCBhcmUgYmVpbmcgKnVzZWQqLiAgVGhhdCYjMzk7cyBteSBzdGFydGluZyBwb2ludC4gSSBrbm93IHRoZXNlIG5ldHdvcmtpbmcgc3RydWN0dXJlcyBhcmUgY3J1Y2lhbCwgc28gdW5kZXJzdGFuZGluZyB0aGVpciB1c2FnZSBpcyBwYXJhbW91bnQuCgpJJiMzOTttIGdvaW5nIHRvIGxldmVyYWdlIG15IGV4cGVydCBrbm93bGVkZ2UgYW5kIHVzZSBgZ3JlcGAgdG8gcXVpY2tseSBzZWFyY2ggdGhlIGNvZGViYXNlLiBJJiMzOTtsbCBzZWFyY2ggZm9yIHZhcmlhdGlvbnMgb2YgdGhlIGtleSBzdHJ1Y3R1cmVzIGFuZCB2YXJpYWJsZXMgdG8gYmUgdGhvcm91Z2guIEkmIzM5O2xsIHN0YXJ0IHdpdGggYG5mX2Zsb3d0YWJsZWAgaXRzZWxmLCBzaW5jZSB0aGF0JiMzOTtzIGxpa2VseSB0aGUgcGFyZW50IHN0cnVjdHVyZS4gSSYjMzk7bGwgYWxzbyBleHBsaWNpdGx5IGxvb2sgZm9yIGBmbG93dGFibGUtJmd0O25ldGAgYW5kIGBmbG93X3RhYmxlLSZndDtuZXRgLCBqdXN0IGluIGNhc2UgdGhlcmUgYXJlIHZhcmlhdGlvbnMgb3IgaW5jb25zaXN0ZW5jaWVzIGluIG5hbWluZyBjb252ZW50aW9ucyB0aGF0IGFyZSBpbiB0aGUgY29kZWJhc2UuIFRoaXMgc2hvdWxkIGdpdmUgbWUgYSBnb29kIG92ZXJ2aWV3IG9mIHRoZSBjb250ZXh0cyB3aGVyZSB0aGlzIG5ldHdvcmstcmVsYXRlZCBmdW5jdGlvbmFsaXR5IGlzIGJlaW5nIHV0aWxpemVkLiBJIG5lZWQgdG8gZ2V0IGEgaGlnaCBsZXZlbCB2aWV3IG9mIHdoZXJlIHRoaXMgYGZsb3d0YWJsZWAgYW5kIGl0JiMzOTtzIG5ldHdvcmsgaW50ZWdyYXRpb24gY29tZXMgaW50byBwbGF5IHdpdGhpbiB0aGUgbGFyZ2VyIHBpY3R1cmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzYvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA5IDA4OjQwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0OyhmbG93dGFibGV8Zmxvd190YWJsZXxuZl9mdHxmdCktXHUwMDNlbmV0JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9vZmZsb2FkLmM9ODY4PXN0YXRpYyBpbnQgbmZfZmxvd19vZmZsb2FkX2FsbG9jKGNvbnN0IHN0cnVjdCBmbG93X29mZmxvYWRfd29yayAqb2ZmbG9hZCxcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfb2ZmbG9hZC5jLTg3MC17XG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfb2ZmbG9hZC5jOjg3MTpcdHN0cnVjdCBuZXQgKm5ldCA9IHJlYWRfcG5ldChcdTAwMjZvZmZsb2FkLVx1MDAzZWZsb3d0YWJsZS1cdTAwM2VuZXQpO1xubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX29mZmxvYWQuYy04NzItXG4tLVxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX29mZmxvYWQuYz0xMDM3PXN0YXRpYyB2b2lkIGZsb3dfb2ZmbG9hZF93b3JrX2hhbmRsZXIoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9vZmZsb2FkLmMtMTA0Mi1cdG9mZmxvYWQgPSBjb250YWluZXJfb2Yod29yaywgc3RydWN0IGZsb3dfb2ZmbG9hZF93b3JrLCB3b3JrKTtcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9vZmZsb2FkLmM6MTA0MzpcdG5ldCA9IHJlYWRfcG5ldChcdTAwMjZvZmZsb2FkLVx1MDAzZWZsb3d0YWJsZS1cdTAwM2VuZXQpO1xubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX29mZmxvYWQuYy0xMDQ0LVx0c3dpdGNoIChvZmZsb2FkLVx1MDAzZWNtZCkge1xuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9vZmZsb2FkLmM9MTA2NT1zdGF0aWMgdm9pZCBmbG93X29mZmxvYWRfcXVldWVfd29yayhzdHJ1Y3QgZmxvd19vZmZsb2FkX3dvcmsgKm9mZmxvYWQpXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfb2ZmbG9hZC5jLTEwNjYte1xubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX29mZmxvYWQuYzoxMDY3Olx0c3RydWN0IG5ldCAqbmV0ID0gcmVhZF9wbmV0KFx1MDAyNm9mZmxvYWQtXHUwMDNlZmxvd3RhYmxlLVx1MDAzZW5ldCk7XG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfb2ZmbG9hZC5jLTEwNjgtXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzcvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA5IDA4OjQwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDczODAKCQkJCQkJCW91dHB1dDogMjI2CgkJCQkJCQl0aG91Z2h0czogODE0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFuYWx5c2lzIG9mIHRoZSBGbG93IFRhYmxlIEluaXRpYWxpemF0aW9uIEJ1ZyoqCgpPa2F5LCBzbyBJJiMzOTt2ZSBiZWVuIGxvb2tpbmcgYXQgdGhpcyBjb2RlIGFuZCBJJiMzOTt2ZSB6ZXJvZWQgaW4gb24gdGhlIGNyaXRpY2FsIGlzc3VlOiB0aGUgb3JkZXIgb2Ygb3BlcmF0aW9ucyBpbiB0aGUgZmxvdyB0YWJsZSBpbml0aWFsaXphdGlvbi4gSXQgYXBwZWFycyB0aGF0IGB3cml0ZV9wbmV0KCZhbXA7Y3RfZnQtJmd0O25mX2Z0Lm5ldCwgbmV0KTtgIHdhcyBiZWluZyBjYWxsZWQgKmFmdGVyKiBgbmZfZmxvd190YWJsZV9pbml0KCZhbXA7Y3RfZnQtJmd0O25mX2Z0KTtgLiBUaGlzIGlzIHdoZXJlIHRoZSBwcm9ibGVtIGxpZXMuCgpJbiBgbmZfZmxvd190YWJsZV9pbml0YCwgYSBgZ2Nfd29ya2AgaXMgcXVldWVkLCBsaWtlbHkgdXNpbmcgYHF1ZXVlX2RlbGF5ZWRfd29yayhzeXN0ZW1fcG93ZXJfZWZmaWNpZW50X3dxLCAmYW1wO2Zsb3d0YWJsZS0mZ3Q7Z2Nfd29yaywgSFopYC4gIFRoZSBjb25jZXJuIGlzIHRoYXQgaWYgdGhlIGdhcmJhZ2UgY29sbGVjdGlvbiB3b3JrIChgbmZfZmxvd19vZmZsb2FkX3dvcmtfZ2NgKSBvciBvZmZsb2FkIHdvcmsgd2VyZSB0byBydW4gKmJlZm9yZSogYHdyaXRlX3BuZXRgIGlzIGNhbGxlZCwgaXQgY291bGQgcG90ZW50aWFsbHkgYWNjZXNzIGBmbG93dGFibGUtJmd0O25ldGAgYmVmb3JlIGl0JiMzOTtzIHByb3Blcmx5IGluaXRpYWxpemVkLiBGdXJ0aGVybW9yZSwgc2luY2UgYGN0X2Z0ID0ga3phbGxvY19vYmooKmN0X2Z0KTtgIGluaXRpYWxpemVzIHRoZSBtZW1vcnkgd2l0aCB6ZXJvLCBtZWFuaW5nIGBjdF9mdC0mZ3Q7bmZfZnQubmV0YCB3b3VsZCBoYXZlIGJlZW4gaW5pdGlhbGl6ZWQgdG8gTlVMTC4KClRoZSBjcnV4IG9mIHRoZSBtYXR0ZXIgaXMgdGhhdCB3aGVuIGBjdF9mdGAgZ2V0cyBhbGxvY2F0ZWQgdmlhIGBremFsbG9jX29iamAsIHRoZSBlbnRpcmUgc3RydWN0dXJlIGlzIHplcm9lZC4gVGhpcyBtZWFucyB0aGF0LCBkdWUgdG8gdGhlIGluaXRpYWwgcGxhY2VtZW50LCBiZWZvcmUgdGhlIGB3cml0ZV9wbmV0YCBjYWxsLCBgY3RfZnQtJmd0O25mX2Z0Lm5ldGAgaXMgKm5vdCogdW5pbml0aWFsaXplZCBtZW1vcnksIGJ1dCByYXRoZXIgYSAqemVyb2VkKiBwb2ludGVyIChOVUxMKS4gVGhpcyBpcyBjcml0aWNhbC4gTm93LCBpZiBhbnkgcGFydCBvZiB0aGUgYG5mX2Zsb3dfdGFibGVfaW5pdGAgb3IgcmVsYXRlZCB3b3JrIChnYXJiYWdlIGNvbGxlY3Rpb24sIG9mZmxvYWQpIHdhcyB0byBkZXJlZmVyZW5jZSBgZmxvd3RhYmxlLSZndDtuZXRgIGJlZm9yZSBgd3JpdGVfcG5ldGAgc2V0cyBpdCB0byBhIHZhbGlkIG5ldCBuYW1lc3BhY2UsIGl0IHdvdWxkIGxlYWQgdG8gYSBOVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2Ugb3IsIG1vcmUgbGlrZWx5LCBhIHVzZSBvZiBhbiBpbmNvcnJlY3QgbmV0d29yayBuYW1lc3BhY2UuIFRoaXMgaXMgTk9UIGFuIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWQ7IGl0JiMzOTtzIGEgemVyb2VkIG1lbW9yeSBhY2Nlc3MuCgpJJiMzOTt2ZSBjb25maXJtZWQgdGhpcyB3aXRoIGEgY2xvc2VyIGxvb2sgYXQgdGhlIGBremFsbG9jX29iamAgY2FsbCB3aXRoaW4gYGFjdF9jdC5jYC4gTGluZSAzMzkgY2xlYXJseSBkZW1vbnN0cmF0ZXMgdGhhdCBga3phbGxvY19vYmpgIHByb3ZpZGVzIHplcm8taW5pdGlhbGl6ZWQgaGVhcCBtZW1vcnkuIFRoZSByb290IGNhdXNlIG9mIHRoZSBidWcgdGhhdCB0aGUgY29kZSBhZGRyZXNzZXMgaXMgdGhhdCB0aGUgbmV0bnMgcG9pbnRlciBpbiB0aGUgYGZsb3d0YWJsZWAgaXMgbm90IGluaXRpYWxpemVkICpiZWZvcmUqIHRoZSB0YWJsZSBpcyBpbml0aWFsaXplZCwgZXhwb3NlZCBhbmQvb3IgZ2FyYmFnZSBjb2xsZWN0aW9uIHdvcmsgbWF5IGJlZ2luLiBJZiBhIHBpZWNlIG9mIGNvZGUgd2VyZSB0byBpbnZva2UgYHJlYWRfcG5ldCgmYW1wO2Zsb3d0YWJsZS0mZ3Q7bmV0KWAgYmVmb3JlIHRoZSBmaXgsIGl0IHdvdWxkIGdldCBhIGBOVUxMYCBwb2ludGVyLgoKTm93LCBsZXQmIzM5O3MgYWRkcmVzcyB0aGUgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSBhbmQgcG90ZW50aWFsIHZ1bG5lcmFiaWxpdGllczoKCjEuICAqKktlcm5lbCBzdHJ1Y3R1cmVzIHRvIHVzZXIgc3BhY2U/KiogTm8sIHRoaXMgaXMgYWxsIGludGVybmFsIGtlcm5lbCBmbG93IHRhYmxlIGluaXRpYWxpemF0aW9uLgoyLiAgKipDb25kaXRpb25hbCBsb2dpYyBvbiB1bmluaXRpYWxpemVkIHZhcmlhYmxlcz8qKiBObywgYmVjYXVzZSBgY3RfZnRgIGlzIGFsbG9jYXRlZCB3aXRoIGBremFsbG9jX29iamAg4oCTIGl0JiMzOTtzIHplcm8taW5pdGlhbGl6ZWQuCjMuICAqKkNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdpdGggdW5pbml0aWFsaXplZCBmaWVsZHM/KiogQWxsIGZpZWxkcyBhcmUgemVyb2VkIGJ5IGBremFsbG9jX29iamAuCjQuICAqKkJvdW5kcyBjaGVja3MvbGVuZ3Rocz8qKiBOb25lIG9mIGNvbmNlcm4gaGVyZS4KCkdpdmVuIHRoaXMgdW5kZXJzdGFuZGluZywgc3RhbmRhcmQgYnVnIGRldGVjdG9ycywgcGFydGljdWxhcmx5IHRob3NlIHRoYXQgaWRlbnRpZnkgbnVsbCBkZXJlZmVyZW5jZXMsIGFyZSBxdWl0ZSBhcHByb3ByaWF0ZS4gS2VybmVsIE1lbW9yeSBTYW5pdGl6ZXIgKEtNU0FOKSwgaG93ZXZlciwgaXMgKm5vdCogcmVxdWlyZWQsIGJlY2F1c2UgdGhlcmUgYXJlIG5vIGFjdHVhbCB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcyBvciBleHBvc3VyZXMuIFRoZSB2dWxuZXJhYmlsaXR5IHJldm9sdmVzIGFyb3VuZCB0aGUgemVyb2luZyAoTlVMTCksIG5vdCBnYXJiYWdlIHZhbHVlcy4KClRoZXJlZm9yZSwgc2V0dGluZyB0aGUgcmVzdWx0cyBwYXJhbWV0ZXJzIHdpdGggYE5lZWRzS01TQU5gOiBmYWxzZSBpcyB0aGUgY29ycmVjdCBjYWxsLiBgS01TQU5SZWFzb25pbmdgIGNsZWFybHk6CgotICAgYGN0X2Z0YCBpcyBpbml0aWFsaXplZCB2aWEgYGt6YWxsb2Nfb2JqYCwgd2hpY2ggemVyby1pbml0aWFsaXplcyB0aGUgZW50aXJlIG1lbW9yeSBjaHVuay4KLSAgIFRoZSBwYXRjaCByZW9yZGVycyBgd3JpdGVfcG5ldCgmYW1wO2N0X2Z0LSZndDtuZl9mdC5uZXQsIG5ldClgIGJlZm9yZSBgbmZfZmxvd190YWJsZV9pbml0KCZhbXA7Y3RfZnQtJmd0O25mX2Z0KWAuCi0gICBXaXRob3V0IHRoZSBmaXgsIGBuZl9mdC5uZXRgIHdvdWxkIGNvbnRhaW4gYE5VTExgLCBsZWFkaW5nIHRvIGEgTlVMTCBwb2ludGVyIGRlcmVmZXJlbmNlIG9yIGFuIGFjY2VzcyBpc3N1ZSBkdWUgdG8gdGhlIHdyb25nIG5ldHdvcmsgbmFtZXNwYWNlLCBidXQgbm90IGFuIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWQuCi0gICBUaGVyZSBhcmUgbm8gdW5pbml0aWFsaXplZCB2YXJpYWJsZXMsIGluZm8tbGVha3MsIG9yIHVuaW5pdGlhbGl6ZWQgcGFkZGluZy9maWVsZHMgY29waWVkIHRvIHVzZXIgc3BhY2UsIGFuZCBubyBjaGFuZ2VzIHRvIHRoZSBib3VuZHMgb2YgdGhlIGJ1ZmZlcnMuCi0gICBUaGVyZWZvcmUsIEtNU0FOIGlzIHVubmVjZXNzYXJ5LgoKVGltZSB0byBpbnZva2UgYHNldC1yZXN1bHRzYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zOC8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDkgMDg6NDA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggcmVvcmRlcnMgdGhlIGluaXRpYWxpemF0aW9uIG9mIHRoZSBmbG93IHRhYmxlJiMzOTtzIG5ldHdvcmsgbmFtZXNwYWNlIHBvaW50ZXIgKGB3cml0ZV9wbmV0KFx1MDAyNmN0X2Z0LVx1MDAzZW5mX2Z0Lm5ldCwgbmV0KWApIHNvIHRoYXQgaXQgb2NjdXJzIHByaW9yIHRvIGNhbGxpbmcgYG5mX2Zsb3dfdGFibGVfaW5pdChcdTAwMjZjdF9mdC1cdTAwM2VuZl9mdClgLlxuXG5UaGUgZW5jbG9zaW5nIGBzdHJ1Y3QgdGNmX2N0X2Zsb3dfdGFibGVgIChgY3RfZnRgKSBpcyBhbGxvY2F0ZWQgdmlhIGBremFsbG9jX29iamAsIGVuc3VyaW5nIGFsbCBmaWVsZHMgYW5kIHBhZGRpbmcgYXJlIHplcm8taW5pdGlhbGl6ZWQuIFByaW9yIHRvIHRoZSBmaXgsIGFjY2Vzc2luZyBgbmZfZnQubmV0YCBiZWZvcmUgYHdyaXRlX3BuZXRgIHdvdWxkIHJlYWQgYSB6ZXJvZWQvTlVMTCBwb2ludGVyICh3aGljaCB3b3VsZCBtYW5pZmVzdCBhcyBhIE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZSBvciBsb2dpY2FsIGVycm9yLCBjYXVnaHQgYnkgc3RhbmRhcmQgY3Jhc2ggaGFuZGxlcnMgYW5kIEtBU0FOKSwgcmF0aGVyIHRoYW4gdW5pbml0aWFsaXplZCBtZW1vcnkuXG5cbk5vIHVuaW5pdGlhbGl6ZWQgc3RhY2sgb3IgaGVhcCBtZW1vcnkgaXMgaW50cm9kdWNlZCBvciBleHBvc2VkLCBubyB1bmluaXRpYWxpemVkIGZpZWxkcyBhcmUgcmVhZCBvciBjb3BpZWQgdG8gdXNlcnNwYWNlLCBhbmQgbm8gYnVmZmVyIGJvdW5kcyBvciBsZW5ndGhzIGFyZSBhZmZlY3RlZC4gSGVuY2UsIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIGlzIG5vdCBuZWVkZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCByZW9yZGVycyB0aGUgaW5pdGlhbGl6YXRpb24gb2YgdGhlIGZsb3cgdGFibGUmIzM5O3MgbmV0d29yayBuYW1lc3BhY2UgcG9pbnRlciAoYHdyaXRlX3BuZXQoXHUwMDI2Y3RfZnQtXHUwMDNlbmZfZnQubmV0LCBuZXQpYCkgc28gdGhhdCBpdCBvY2N1cnMgcHJpb3IgdG8gY2FsbGluZyBgbmZfZmxvd190YWJsZV9pbml0KFx1MDAyNmN0X2Z0LVx1MDAzZW5mX2Z0KWAuXG5cblRoZSBlbmNsb3NpbmcgYHN0cnVjdCB0Y2ZfY3RfZmxvd190YWJsZWAgKGBjdF9mdGApIGlzIGFsbG9jYXRlZCB2aWEgYGt6YWxsb2Nfb2JqYCwgZW5zdXJpbmcgYWxsIGZpZWxkcyBhbmQgcGFkZGluZyBhcmUgemVyby1pbml0aWFsaXplZC4gUHJpb3IgdG8gdGhlIGZpeCwgYWNjZXNzaW5nIGBuZl9mdC5uZXRgIGJlZm9yZSBgd3JpdGVfcG5ldGAgd291bGQgcmVhZCBhIHplcm9lZC9OVUxMIHBvaW50ZXIgKHdoaWNoIHdvdWxkIG1hbmlmZXN0IGFzIGEgTlVMTCBwb2ludGVyIGRlcmVmZXJlbmNlIG9yIGxvZ2ljYWwgZXJyb3IsIGNhdWdodCBieSBzdGFuZGFyZCBjcmFzaCBoYW5kbGVycyBhbmQgS0FTQU4pLCByYXRoZXIgdGhhbiB1bmluaXRpYWxpemVkIG1lbW9yeS5cblxuTm8gdW5pbml0aWFsaXplZCBzdGFjayBvciBoZWFwIG1lbW9yeSBpcyBpbnRyb2R1Y2VkIG9yIGV4cG9zZWQsIG5vIHVuaW5pdGlhbGl6ZWQgZmllbGRzIGFyZSByZWFkIG9yIGNvcGllZCB0byB1c2Vyc3BhY2UsIGFuZCBubyBidWZmZXIgYm91bmRzIG9yIGxlbmd0aHMgYXJlIGFmZmVjdGVkLiBIZW5jZSwgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgaXMgbm90IG5lZWRlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDktMDlUMDg6Mzg6MzUuNDkzNzAwMTI0WiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTA2NjA5NDA0NjE5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIk5FVF9BQ1RfQ1RcIixcbiAgICBcIk5FVF9DTFNfQUNUXCIsXG4gICAgXCJORl9DT05OVFJBQ0tcIixcbiAgICBcIk5GX0ZMT1dfVEFCTEVcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJ0Y2ZfY3RfZmxvd190YWJsZV9nZXRcIixcbiAgICBcInRjZl9jdF9pbml0XCIsXG4gICAgXCJ0Y2ZfY3RfYWN0XCIsXG4gICAgXCJuZl9mbG93X3RhYmxlX2luaXRcIlxuICBdLFxuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIHJlb3JkZXJzIHRoZSBpbml0aWFsaXphdGlvbiBvZiB0aGUgZmxvdyB0YWJsZSdzIG5ldHdvcmsgbmFtZXNwYWNlIHBvaW50ZXIgKGB3cml0ZV9wbmV0KFxcdTAwMjZjdF9mdC1cXHUwMDNlbmZfZnQubmV0LCBuZXQpYCkgc28gdGhhdCBpdCBvY2N1cnMgcHJpb3IgdG8gY2FsbGluZyBgbmZfZmxvd190YWJsZV9pbml0KFxcdTAwMjZjdF9mdC1cXHUwMDNlbmZfZnQpYC5cXG5cXG5UaGUgZW5jbG9zaW5nIGBzdHJ1Y3QgdGNmX2N0X2Zsb3dfdGFibGVgIChgY3RfZnRgKSBpcyBhbGxvY2F0ZWQgdmlhIGBremFsbG9jX29iamAsIGVuc3VyaW5nIGFsbCBmaWVsZHMgYW5kIHBhZGRpbmcgYXJlIHplcm8taW5pdGlhbGl6ZWQuIFByaW9yIHRvIHRoZSBmaXgsIGFjY2Vzc2luZyBgbmZfZnQubmV0YCBiZWZvcmUgYHdyaXRlX3BuZXRgIHdvdWxkIHJlYWQgYSB6ZXJvZWQvTlVMTCBwb2ludGVyICh3aGljaCB3b3VsZCBtYW5pZmVzdCBhcyBhIE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZSBvciBsb2dpY2FsIGVycm9yLCBjYXVnaHQgYnkgc3RhbmRhcmQgY3Jhc2ggaGFuZGxlcnMgYW5kIEtBU0FOKSwgcmF0aGVyIHRoYW4gdW5pbml0aWFsaXplZCBtZW1vcnkuXFxuXFxuTm8gdW5pbml0aWFsaXplZCBzdGFjayBvciBoZWFwIG1lbW9yeSBpcyBpbnRyb2R1Y2VkIG9yIGV4cG9zZWQsIG5vIHVuaW5pdGlhbGl6ZWQgZmllbGRzIGFyZSByZWFkIG9yIGNvcGllZCB0byB1c2Vyc3BhY2UsIGFuZCBubyBidWZmZXIgYm91bmRzIG9yIGxlbmd0aHMgYXJlIGFmZmVjdGVkLiBIZW5jZSwgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgaXMgbm90IG5lZWRlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBmaXhlcyB0aGUgaW5pdGlhbGl6YXRpb24gb3JkZXIgaW4gdGNmX2N0X2Zsb3dfdGFibGVfZ2V0KCkgYnkgc2V0dGluZyB0aGUgbmV0bnMgcG9pbnRlciAod3JpdGVfcG5ldCkgYmVmb3JlIGNhbGxpbmcgbmZfZmxvd190YWJsZV9pbml0KCksIHByZXZlbnRpbmcgcG90ZW50aWFsIHJhY2VzIG9yIHVuaW5pdGlhbGl6ZWQgbmV0bnMgYWNjZXNzIGR1cmluZyBmbG93IHRhYmxlIGluaXRpYWxpemF0aW9uLiBUaGUgY29kZSBpcyBwYXJ0IG9mIHRoZSBUQyBjb25uZWN0aW9uIHRyYWNraW5nIGFjdGlvbiAoYWN0X2N0KSBhbmQgaXMgcmVhY2hhYmxlIHZpYSBydG5ldGxpbmsgdGMgYWN0aW9uIGNvbW1hbmRzIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkIGVudmlyb25tZW50cy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDlUMDg6Mzg6MzUuNDkzNzE2MTE0WiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1OTA5MjQxOTIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCA4OTRiOTFjMzg0NGM5Zjk1ZDcxM2JiZTE1MzBmNzQwOWI3MjVhM2JiXFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBXZWQgU2VwIDkgMDg6Mzg6MzQgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvbmV0L3NjaGVkL2FjdF9jdC5jIGIvbmV0L3NjaGVkL2FjdF9jdC5jXFxuaW5kZXggOTA4MGNiMzg2YzE2OS4uNmJkMTlkYjY4ZDk3MSAxMDA2NDRcXG4tLS0gYS9uZXQvc2NoZWQvYWN0X2N0LmNcXG4rKysgYi9uZXQvc2NoZWQvYWN0X2N0LmNcXG5AQCAtMzQ5LDEwICszNDksMTAgQEAgc3RhdGljIGludCB0Y2ZfY3RfZmxvd190YWJsZV9nZXQoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgdGNmX2N0X3BhcmFtcyAqcGFyYW1zKVxcbiBcXHRjdF9mdC1cXHUwMDNlbmZfZnQudHlwZSA9IFxcdTAwMjZmbG93dGFibGVfY3Q7XFxuIFxcdGN0X2Z0LVxcdTAwM2VuZl9mdC5mbGFncyB8PSBORl9GTE9XVEFCTEVfSFdfT0ZGTE9BRCB8XFxuIFxcdFxcdFxcdCAgICAgIE5GX0ZMT1dUQUJMRV9DT1VOVEVSO1xcbitcXHR3cml0ZV9wbmV0KFxcdTAwMjZjdF9mdC1cXHUwMDNlbmZfZnQubmV0LCBuZXQpO1xcbiBcXHRlcnIgPSBuZl9mbG93X3RhYmxlX2luaXQoXFx1MDAyNmN0X2Z0LVxcdTAwM2VuZl9mdCk7XFxuIFxcdGlmIChlcnIpXFxuIFxcdFxcdGdvdG8gZXJyX2luaXQ7XFxuLVxcdHdyaXRlX3BuZXQoXFx1MDAyNmN0X2Z0LVxcdTAwM2VuZl9mdC5uZXQsIG5ldCk7XFxuIFxcbiBcXHRfX21vZHVsZV9nZXQoVEhJU19NT0RVTEUpO1xcbiBvdXRfdW5sb2NrOlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOVQwODozODozNi4wODU2NDA4OTdaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJjb3JlIiwiRHVyYXRpb24iOjY4NDc0MjU4MDQwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIk5FVF9BQ1RfQ1RcIixcbiAgICBcIk5FVF9DTFNfQUNUXCIsXG4gICAgXCJORl9DT05OVFJBQ0tcIixcbiAgICBcIk5GX0ZMT1dfVEFCTEVcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJ0Y2ZfY3RfZmxvd190YWJsZV9nZXRcIixcbiAgICBcInRjZl9jdF9pbml0XCIsXG4gICAgXCJ0Y2ZfY3RfYWN0XCIsXG4gICAgXCJuZl9mbG93X3RhYmxlX2luaXRcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBmaXhlcyB0aGUgaW5pdGlhbGl6YXRpb24gb3JkZXIgaW4gdGNmX2N0X2Zsb3dfdGFibGVfZ2V0KCkgYnkgc2V0dGluZyB0aGUgbmV0bnMgcG9pbnRlciAod3JpdGVfcG5ldCkgYmVmb3JlIGNhbGxpbmcgbmZfZmxvd190YWJsZV9pbml0KCksIHByZXZlbnRpbmcgcG90ZW50aWFsIHJhY2VzIG9yIHVuaW5pdGlhbGl6ZWQgbmV0bnMgYWNjZXNzIGR1cmluZyBmbG93IHRhYmxlIGluaXRpYWxpemF0aW9uLiBUaGUgY29kZSBpcyBwYXJ0IG9mIHRoZSBUQyBjb25uZWN0aW9uIHRyYWNraW5nIGFjdGlvbiAoYWN0X2N0KSBhbmQgaXMgcmVhY2hhYmxlIHZpYSBydG5ldGxpbmsgdGMgYWN0aW9uIGNvbW1hbmRzIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkIGVudmlyb25tZW50cy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIgYW5kIHNlY3VyaXR5IGVuZ2luZWVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBldmFsdWF0ZSB3aGV0aGVyIGl0IHdhcnJhbnRzIGZ1enppbmcgd2l0aCBzeXprYWxsZXIuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIGludGVybmFsIGFzc3VtcHRpb25zLiBZb3UgbXVzdCBhY3RpdmVseSB1c2UgeW91ciBjb2RlIGFjY2Vzc1xudG9vbHMgdG8gaW5zcGVjdCB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlLCBjYWxsZXJzLCBhbmQgc3Vycm91bmRpbmcgY29udGV4dC5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjEuIENPUkUgVFJJQUdFIFBISUxPU09QSFlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5UaGUgZ29hbCBvZiBwYXRjaCBmdXp6aW5nIGlzIHRvIGRpc2NvdmVyIGNyYXNoZXMsIHJlZ3Jlc3Npb25zLCBleHBvc2VkIGxhdGVudCBidWdzLFxuYW5kIG5ld2x5IHRyaWdnZXJlZCBhc3NlcnRpb25zIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIHNlcmllcy5cblxuLSBSRUFDSEFCSUxJVFkgSVMgVEhFIFBSSU1BUlkgR0FURTpcbiAgRnV6emluZyBjYW4gb25seSBkaXNjb3ZlciBidWdzIGluIGNvZGUgdGhhdCBjYW4gYWN0dWFsbHkgZXhlY3V0ZSBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZFxuICBlbnZpcm9ubWVudHMgKEdDRSBvciBRRU1VLCB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgZGV2aWNlcyBsaWtlIFVTQiBnYWRnZXRzLCBuZXRkZXYsIHR1bi90YXApLlxuICBJZiB0aGUgbW9kaWZpZWQgY29kZSBpcyBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgKHNlZSBTZWN0aW9uIDIpLCBpdCBNVVNUIE5PVCBiZSBmdXp6ZWQsXG4gIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciBpdCBhZGRzIGFzc2VydGlvbnMgb3IgY29tcGxleCBsb2dpYy5cblxuLSBETyBOT1QgQkxJTkRMWSBUUlVTVCBcIk5PIEZVTkNUSU9OQUwgQ0hBTkdFXCIgKE5GQ0kpIE9SIFwiUkVGQUNUT1JJTkdcIiBDTEFJTVM6XG4gIFBhdGNoIGF1dGhvcnMgcm91dGluZWx5IGxhYmVsIGNoYW5nZXMgYXMgXCJjbGVhbnVwc1wiLCBcInJlZmFjdG9yaW5nc1wiLCBvciBzdGF0ZVxuICBcIk5vIGZ1bmN0aW9uYWwgY2hhbmdlIGludGVuZGVkXCIuIERvIE5PVCB0YWtlIHRoZXNlIGNsYWltcyBhdCBmYWNlIHZhbHVlLlxuICBDb2RlIHJlZmFjdG9yaW5ncyB0aGF0IHJlYXJyYW5nZSBsb2dpYywgaW50cm9kdWNlIGhlbHBlciBmdW5jdGlvbnMsIG9yIGFsdGVyIHN0YXRlIG1hbmFnZW1lbnRcbiAgaW4gY29yZSBzdWJzeXN0ZW1zIGZyZXF1ZW50bHkgaW50cm9kdWNlIHN1YnRsZSBzZW1hbnRpYyBzaGlmdHMgb3IgdW5jb3ZlciBsYXRlbnQga2VybmVsIGJ1Z3MuXG4gIElmIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUgaXMgbW9kaWZpZWQgb3IgcmVmYWN0b3JlZCwgaXQgTVVTVCBiZSBmdXp6ZWQuXG5cbi0gTkVXIE9SIE1PRElGSUVEIEFTU0VSVElPTlMgSU4gUkVBQ0hBQkxFIENPREUgTVVTVCBCRSBGVVpaRUQ6XG4gIFdoZW4gYSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzIHJ1bnRpbWUgY2hlY2tzIG9yIGFzc2VydGlvbnMgKGUuZy4sIFdBUk5fT04qLCBWTV9XQVJOX09OKixcbiAgQlVHX09OKiwgbG9ja2RlcF9hc3NlcnQqKSBpbiByZWFjaGFibGUgY29kZSBwYXRocywgaXQgZW5mb3JjZXMgbmV3IG9yIHN0cmljdGVyIGludmFyaWFudHMuXG4gIEV2ZW4gaWYgdGhlIGF1dGhvciBiZWxpZXZlcyB0aGUgaW52YXJpYW50IGFsd2F5cyBob2xkcywgZnV6emluZyBpcyBlc3NlbnRpYWwgdG8gdmVyaWZ5IHdoZXRoZXJcbiAgYW4gdW51c3VhbCBzZXF1ZW5jZSBvZiBvcGVyYXRpb25zIGNhbiB2aW9sYXRlIGl0LlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuMi4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPWZhbHNlIChORUdBVElWRSBDUklURVJJQSlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIE9OTFkgSUYgYWxsIG1vZGlmaWVkIGNvZGUgZmFsbHMgc3RyaWN0bHkgaW50byBvbmUgb3IgbW9yZSBvZiB0aGVzZSBjYXRlZ29yaWVzOlxuXG4tIE5vbi1rZXJuZWwgYW5kIG5vbi1leGVjdXRhYmxlIGNoYW5nZXM6XG4gICogTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgY29tbWVudHMsIG9yIHNwZWxsaW5nIGZpeGVzLlxuICAqIFVzZXItc3BhY2UgZGlyZWN0b3JpZXMsIHNlbGYtdGVzdHMsIHNhbXBsZXMsIG9yIHNjcmlwdHMgKGUuZy4sIHRvb2xzLywgc2FtcGxlcy8sIHNjcmlwdHMvLCB1c3IvKVxuICAgIHRoYXQgZG8gbm90IGFmZmVjdCB0aGUgY29tcGlsZWQga2VybmVsIGltYWdlICh2bWxpbnV4KSBvciBrZXJuZWwgbW9kdWxlcy5cbiAgKiBQdXJlbHkgZGVjb3JhdGl2ZSBsb2dnaW5nIChlLmcuLCBtZXNzYWdlIHN0cmluZ3MgaW4gcHJfZXJyLCBwcmludGssIGRldl9pbmZvKSBvciB0cmFjZXBvaW50c1xuICAgIHRoYXQgZG8gbm90IGFsdGVyIGNvbnRyb2wgZmxvdyBvciBkYXRhIHN0cnVjdHVyZXMuXG4gICogQnVpbGQgc3lzdGVtIG9yIEtjb25maWcgY2hhbmdlcyB0aGF0IGRvIG5vdCBhbHRlciBjb21waWxlZCBDIGxvZ2ljLlxuLSBTdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgaGFyZHdhcmU6XG4gICogVmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoZXMsIFNtYXJ0TklDcywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICAgIGlvbmljLCBhbWRncHUpIHJlcXVpcmluZyBwaHlzaWNhbCBBU0lDL1BDSWUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG4tIFVucmVhY2hhYmxlIGV4ZWN1dGlvbiBwYXRoczpcbiAgKiBEcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzICgucmVtb3ZlLCAuc2h1dGRvd24sIHBjaV91bnJlZ2lzdGVyX2RyaXZlcikgZXhlY3V0ZWQgb25seSBkdXJpbmdcbiAgICBwaHlzaWNhbCBQQ0kgaG90LXVucGx1ZyBvciBtYW51YWwgc3lzZnMgZHJpdmVyIHVuYmluZGluZy5cbiAgKiBDb2RlIHBhdGhzIGV4Y2x1c2l2ZSB0byBhcmNoaXRlY3R1cmVzIG90aGVyIHRoYW4gdGhlIHRhcmdldCBhcmNoaXRlY3R1cmUuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4zLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9dHJ1ZSAoUE9TSVRJVkUgQ1JJVEVSSUEpXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuUmV0dXJuIFdvcnRoRnV6emluZz10cnVlIHdoZW5ldmVyIHRoZSBwYXRjaCB0b3VjaGVzIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUsIGluY2x1ZGluZzpcbi0gQ29yZSBTdWJzeXN0ZW1zOlxuICAqIEFueSBsb2dpYyBtb2RpZmljYXRpb25zIGluIG1lbW9yeSBtYW5hZ2VtZW50IChtbS8pLCBzeW5jaHJvbml6YXRpb24vbG9ja2luZyAoa2VybmVsL2xvY2tpbmcvKSxcbiAgICBCUEYsIHNjaGVkdWxlciwgY29yZSBuZXR3b3JraW5nLCBWRlMsIG9yIHN5c2NhbGwgaGFuZGxpbmcuXG4tIFJlZmFjdG9yaW5ncyBhbmQgQ29kZSBDbGVhbnVwczpcbiAgKiBBbnkgcmVzdHJ1Y3R1cmluZyBvZiByZWFjaGFibGUgZGF0YSBzdHJ1Y3R1cmVzLCBoZWxwZXIgYWJzdHJhY3Rpb25zLCBvciBhbGdvcml0aG0gZmxvd3MuXG4tIFJ1bnRpbWUgQXNzZXJ0aW9ucyBhbmQgRGVmZW5zaXZlIENoZWNrczpcbiAgKiBBbnkgaW50cm9kdWN0aW9uIG9yIGFsdGVyYXRpb24gb2YgYXNzZXJ0aW9ucyAoV0FSTl9PTiosIFZNX1dBUk5fT04qLCBCVUdfT04qLCBldGMuKSBpbiByZWFjaGFibGUgcGF0aHMuXG4tIFJlYWNoYWJsZSBEcml2ZXJzIGFuZCBQcm90b2NvbHM6XG4gICogRHJpdmVycyBhY2Nlc3NpYmxlIHZpYSB2aXJ0dWFsIGJ1c2VzICh2aXJ0aW8sIFVTQiBnYWRnZXQsIGxvb3BiYWNrLCBuZXRsaW5rLCBiaW5kZXIsIHNvY2tldHMsIGV0Yy4pLlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuNC4gRVhUUkFDVElORyBGb2N1c1N5bWJvbHMgKFBSRVZFTlRJTkcgRElMVVRJT04pXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuV2hlbiBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IG11c3QgZXh0cmFjdCBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIGludG8gRm9jdXNTeW1ib2xzIHRvIGd1aWRlIHRoZSBmdXp6ZXI6XG5cbi0gQVZPSUQgVUJJUVVJVE9VUyBMSUZFQ1lDTEUgSE9ULVBBVEhTOlxuICBEbyBOT1QgbGlzdCBnZW5lcmljLCB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYWxsZWQgYnkgYWxtb3N0IGV2ZXJ5IHByb2dyYW0gaW4gdGhlIGNvcnB1c1xuICAoaW5jbHVkaW5nLCBidXQgbm90IGxpbWl0ZWQgdG86IGdlbmVyYWwgbWVtb3J5IGFsbG9jYXRvcnMgYW5kIGRlYWxsb2NhdG9ycywgcGFnZSBmYXVsdFxuICBhbmQgdHJhcCBoYW5kbGVycywgb3IgY29yZSBzeW5jaHJvbml6YXRpb24gcHJpbWl0aXZlczsgdGhpcyBpcyBub3QgYW4gZXhoYXVzdGl2ZSBsaXN0KS5cbiAgTGlzdGluZyB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYXVzZXMgdGhlIGZ1enplciB0byBjbGFzc2lmeSB0aG91c2FuZHMgb2YgdW5yZWxhdGVkIHRlc3RzIGFzIFwiZm9jdXNlZFwiLFxuICB3aGljaCBzZXZlcmVseSBkaWx1dGVzIGZ1enppbmcgZWZmb3J0IGF3YXkgZnJvbSB0aGUgYWN0dWFsIGNoYW5nZXMuXG5cbi0gVEFSR0VUIFNQRUNJRklDIEZFQVRVUkUgTE9HSUMgQU5EIEVOVFJZUE9JTlRTOlxuICBMaXN0IGZ1bmN0aW9ucyB0aGF0IHNwZWNpZmljYWxseSBpbXBsZW1lbnQgdGhlIGxvZ2ljIGJlaW5nIGFkZGVkIG9yIGFsdGVyZWQsIG9yIGRpcmVjdCBBUEkgZW50cnlwb2ludHNcbiAgZm9yIHRoZSBzdWJzeXN0ZW0gZmVhdHVyZSB1bmRlciByZXZpZXcuXG5cbi0gSEFORExJTkcgU1RBVElDIElOTElORSBGVU5DVElPTlMgSU4gSEVBREVSUyAoLmgpOlxuICBDb21waWxlci1pbmxpbmVkIHN0YXRpYyBmdW5jdGlvbnMgKHN1Y2ggYXMgc3RhdGljIGlubGluZXMgaW4gbW0vKi5oIG9yIGluY2x1ZGUvbGludXgvKi5oKSBsYWNrXG4gIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMgaW4gdm1saW51eCBhbmQgY2Fubm90IGJlIHRhcmdldGVkIGRpcmVjdGx5IGJ5IHN5bWJvbCBjb3ZlcmFnZSBmaWx0ZXJzLlxuICBJZiB0aGUgY2hhbmdlcyBhcmUgcHJpbWFyaWx5IGluIHN0YXRpYyBpbmxpbmUgaGVscGVycywgaWRlbnRpZnkgbm9uLXN0YXRpYywgZmVhdHVyZS1zcGVjaWZpYyBjYWxsZXJcbiAgZnVuY3Rpb25zIGluIC5jIGZpbGVzIHRoYXQgZXhlcmNpc2UgdGhlbSAoYXZvaWRpbmcgdWJpcXVpdG91cyBsaWZlY3ljbGUgd3JhcHBlcnMpLlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuNS4gSURFTlRJRllJTkcgRW5hYmxlQ29uZmlnc1xuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbklkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgY29tcGlsZSBhbmQgcmVhY2ggdGhlIG1vZGlmaWVkIGNvZGU6XG4tIEluc3BlY3QgS2NvbmZpZyBmaWxlcyBhbmQgI2lmZGVmIGd1YXJkczsgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4tIENoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncyBuZWVkZWQuXG4tIFN0cmlwIGFueSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJUYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NFxuXG5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCA4OTRiOTFjMzg0NGM5Zjk1ZDcxM2JiZTE1MzBmNzQwOWI3MjVhM2JiXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFdlZCBTZXAgOSAwODozODozNCAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL25ldC9zY2hlZC9hY3RfY3QuYyBiL25ldC9zY2hlZC9hY3RfY3QuY1xuaW5kZXggOTA4MGNiMzg2YzE2OS4uNmJkMTlkYjY4ZDk3MSAxMDA2NDRcbi0tLSBhL25ldC9zY2hlZC9hY3RfY3QuY1xuKysrIGIvbmV0L3NjaGVkL2FjdF9jdC5jXG5AQCAtMzQ5LDEwICszNDksMTAgQEAgc3RhdGljIGludCB0Y2ZfY3RfZmxvd190YWJsZV9nZXQoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgdGNmX2N0X3BhcmFtcyAqcGFyYW1zKVxuIFx0Y3RfZnQtXHUwMDNlbmZfZnQudHlwZSA9IFx1MDAyNmZsb3d0YWJsZV9jdDtcbiBcdGN0X2Z0LVx1MDAzZW5mX2Z0LmZsYWdzIHw9IE5GX0ZMT1dUQUJMRV9IV19PRkZMT0FEIHxcbiBcdFx0XHQgICAgICBORl9GTE9XVEFCTEVfQ09VTlRFUjtcbitcdHdyaXRlX3BuZXQoXHUwMDI2Y3RfZnQtXHUwMDNlbmZfZnQubmV0LCBuZXQpO1xuIFx0ZXJyID0gbmZfZmxvd190YWJsZV9pbml0KFx1MDAyNmN0X2Z0LVx1MDAzZW5mX2Z0KTtcbiBcdGlmIChlcnIpXG4gXHRcdGdvdG8gZXJyX2luaXQ7XG4tXHR3cml0ZV9wbmV0KFx1MDAyNmN0X2Z0LVx1MDAzZW5mX2Z0Lm5ldCwgbmV0KTtcbiBcbiBcdF9fbW9kdWxlX2dldChUSElTX01PRFVMRSk7XG4gb3V0X3VubG9jazpcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA5VDA4OjM4OjM2LjA4NTY0MjgwN1oiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjExNjYwMzg0NjkyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBhIEtlcm5lbCBQYXRjaCBmb3IgU3l6a2FsbGVyIEZ1enppbmcgUG90ZW50aWFsKipcblxuT2theSwgaGVyZSdzIHRoZSBkZWFsLiBJJ3ZlIGJlZW4gYXNrZWQgdG8gcmV2aWV3IGEgTGludXgga2VybmVsIHBhdGNoIGFuZCBmaWd1cmUgb3V0IGlmIGl0J3MgYSBnb29kIGNhbmRpZGF0ZSBmb3IgZnV6emluZyB3aXRoIHN5emthbGxlci4gVGhlIHRhc2sgaXMgc3RyYWlnaHRmb3J3YXJkOiBpZGVudGlmeSByZWxldmFudCBzeW1ib2xzIGFuZCBkZXRlcm1pbmUgdGhlIG5lY2Vzc2FyeSBrZXJuZWwgY29uZmlndXJhdGlvbnMuIFRoaXMgaXMgcHJldHR5IHN0YW5kYXJkIGZvciBrZXJuZWwgZGV2ZWxvcG1lbnQgYW5kIGZ1enppbmcgdHJpYWdlIOKAkyBhIHNvcnQgb2YgZGVmZW5zaXZlIHF1YWxpdHkgYXNzdXJhbmNlLiBOb3RoaW5nIG91dCBvZiB0aGUgb3JkaW5hcnkgaGVyZTsgSSBjYW4gcHJvY2VlZCB3aXRob3V0IGFueSByZWQgZmxhZ3MuXG5cbkxldCdzIGRpdmUgaW50byB0aGUgcGF0Y2ggaXRzZWxmLiBJIHNlZSBhIGBkaWZmYCBmb3IgYG5ldC9zY2hlZC9hY3RfY3QuY2AuIFRoZSBjaGFuZ2UgaW52b2x2ZXMgbW9kaWZ5aW5nIHRoZSBgdGNmX2N0X2Zsb3dfdGFibGVfZ2V0YCBmdW5jdGlvbi4gU3BlY2lmaWNhbGx5LCBpdCBzZWVtcyB0byBiZSBhZGp1c3RpbmcgdGhlIGluaXRpYWxpemF0aW9uIG9mIHNvbWV0aGluZyByZWxhdGVkIHRvIGEgZmxvdyB0YWJsZSB3aXRoaW4gdGhlIGNvbm5lY3Rpb24gdHJhY2tpbmcgbW9kdWxlLiBMb29raW5nIGNsb3NlciBJIHNlZSB0aGUgZm9sbG93aW5nIGNoYW5nZTpcblxuYGBgZGlmZlxuKysrIGIvbmV0L3NjaGVkL2FjdF9jdC5jXG5AQCAtMzQ5LDEwICszNDksMTAgQEAgc3RhdGljIGludCB0Y2ZfY3RfZmxvd190YWJsZV9nZXQoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgdGNmX2N0X3BhcmFtcyAqcGFyYW1zKVxuIFx0Y3RfZnQtXHUwMDNlbmZfZnQudHlwZSA9IFx1MDAyNmZsb3d0YWJsZV9jdDtcbiBcdGN0X2Z0LVx1MDAzZW5mX2Z0LmZsYWdzIHw9IE5GX0ZMT1dUQUJMRV9IV19PRkZMT0FEIHxcbiBcdFx0XHQgICAgICBORl9GTE9XVEFCTEVfQ09VTlRFUjtcbitcdHdyaXRlX3BuZXQoXHUwMDI2Y3RfZnQtXHUwMDNlbmZfZnQubmV0LCBuZXQpO1xuIFx0ZXJyID0gbmZfZmxvd190YWJsZV9pbml0KFx1MDAyNmN0X2Z0LVx1MDAzZW5mX2Z0KTtcbiBcdGlmIChlcnIpXG4gXHRcdGdvdG8gZXJyX2luaXQ7XG4tXHR3cml0ZV9wbmV0KFx1MDAyNmN0X2Z0LVx1MDAzZW5mX2Z0Lm5ldCwgbmV0KTtcbmBgYFxuXG5UaGUga2V5IGhlcmUgaXMgdGhhdCBgd3JpdGVfcG5ldGAgaXMgYmVpbmcgY2FsbGVkICpiZWZvcmUqIGBuZl9mbG93X3RhYmxlX2luaXRgLlxuXG5UaW1lIHRvIHB1dCBvbiB0aGUgaW52ZXN0aWdhdGl2ZSBoYXQuIEknbGwgbmVlZCB0byBkaWcgaW50byBgbmV0L3NjaGVkL2FjdF9jdC5jYCBhbmQgdGFrZSBhIGxvb2sgYXQgdGhlIGltcGxlbWVudGF0aW9ucyBvZiBgdGNmX2N0X2Zsb3dfdGFibGVfZ2V0YCBhbmQgYG5mX2Zsb3dfdGFibGVfaW5pdGAuIEknbGwgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQncyBoYXBwZW5pbmcgaW4gdGhlc2UgZnVuY3Rpb25zLiBTcGVjaWZpY2FsbHksIEkgbmVlZCB0byBrbm93IHdoeSB0aGUgYHdyaXRlX3BuZXRgIGNhbGwgd2FzIG1vdmVkIGFuZCB3aGF0IGtpbmQgb2YgcG90ZW50aWFsIHN0YXRlIG9yIGRhdGEgcmFjZXMgdGhpcyBjb3VsZCB0cmlnZ2VyLiBJJ2xsIHVzZSBteSB1c3VhbCBzZXQgb2YgdG9vbHMgdG8gZG8gdGhpcyDigJMgc3RhdGljIGFuYWx5c2lzLCBjcm9zcy1yZWZlcmVuY2luZywgbWF5YmUgZXZlbiBhIHF1aWNrIHJ1biB3aXRoIGEga2VybmVsIGRlYnVnZ2VyIGlmIG5lY2Vzc2FyeS4gVGhpcyBzZWVtcyBsaWtlIGEgcmVhc29uYWJsZSBwbGFjZSB0byBzdGFydCwgYW5kIGJhc2VkIG9uIHRoZSBuYXR1cmUgb2YgdGhlIGNoYW5nZSwgaXQncyBwcm9iYWJsZSB0aGF0IHRoaXMgaXMgYSBzaW1wbGUgYnVnZml4LlxuXG5cbiIsIklucHV0VG9rZW5zIjoyOTQxLCJPdXRwdXRUb2tlbnMiOjM5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDI4LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDlUMDg6Mzg6NDcuNzQ2MDMwNzc5WiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjExNDM4MzExMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ0Y2ZfY3RfZmxvd190YWJsZV9nZXRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L3NjaGVkL2FjdF9jdC5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9zY2hlZC9hY3RfY3QuYz0yODg9c3RhdGljIGJvb2wgdGNmX2N0X2Zsb3dfaXNfb3V0ZGF0ZWQoY29uc3Qgc3RydWN0IGZsb3dfb2ZmbG9hZCAqZmxvdylcXG4tLVxcbm5ldC9zY2hlZC9hY3RfY3QuYy0yOTUtXFxubmV0L3NjaGVkL2FjdF9jdC5jOjI5NjpzdGF0aWMgdm9pZCB0Y2ZfY3RfZmxvd190YWJsZV9nZXRfcmVmKHN0cnVjdCB0Y2ZfY3RfZmxvd190YWJsZSAqY3RfZnQpO1xcbm5ldC9zY2hlZC9hY3RfY3QuYy0yOTctXFxubmV0L3NjaGVkL2FjdF9jdC5jPTI5OD1zdGF0aWMgdm9pZCB0Y2ZfY3RfbmZfZ2V0KHN0cnVjdCBuZl9mbG93dGFibGUgKmZ0KVxcbi0tXFxubmV0L3NjaGVkL2FjdF9jdC5jLTMwMi1cXG5uZXQvc2NoZWQvYWN0X2N0LmM6MzAzOlxcdHRjZl9jdF9mbG93X3RhYmxlX2dldF9yZWYoY3RfZnQpO1xcbm5ldC9zY2hlZC9hY3RfY3QuYy0zMDQtfVxcbi0tXFxubmV0L3NjaGVkL2FjdF9jdC5jPTMxNj1zdGF0aWMgc3RydWN0IG5mX2Zsb3d0YWJsZV90eXBlIGZsb3d0YWJsZV9jdCA9IHtcXG4tLVxcbm5ldC9zY2hlZC9hY3RfY3QuYy0zMjMtXFxubmV0L3NjaGVkL2FjdF9jdC5jOjMyNDpzdGF0aWMgaW50IHRjZl9jdF9mbG93X3RhYmxlX2dldChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCB0Y2ZfY3RfcGFyYW1zICpwYXJhbXMpXFxubmV0L3NjaGVkL2FjdF9jdC5jLTMyNS17XFxuLS1cXG5uZXQvc2NoZWQvYWN0X2N0LmMtMzczLVxcbm5ldC9zY2hlZC9hY3RfY3QuYzozNzQ6c3RhdGljIHZvaWQgdGNmX2N0X2Zsb3dfdGFibGVfZ2V0X3JlZihzdHJ1Y3QgdGNmX2N0X2Zsb3dfdGFibGUgKmN0X2Z0KVxcbm5ldC9zY2hlZC9hY3RfY3QuYy0zNzUte1xcbi0tXFxubmV0L3NjaGVkL2FjdF9jdC5jPTEzNzE9c3RhdGljIGludCB0Y2ZfY3RfaW5pdChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBubGF0dHIgKm5sYSxcXG4tLVxcbm5ldC9zY2hlZC9hY3RfY3QuYy0xNDQzLVxcbm5ldC9zY2hlZC9hY3RfY3QuYzoxNDQ0OlxcdGVyciA9IHRjZl9jdF9mbG93X3RhYmxlX2dldChuZXQsIHBhcmFtcyk7XFxubmV0L3NjaGVkL2FjdF9jdC5jLTE0NDUtXFx0aWYgKGVycilcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDlUMDg6Mzg6NDcuODYwNDIyMjA5WiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjA2MDc1ODAwNiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHN1bW1hcnksIGFzIHRob3VnaCBJJ20gdGhpbmtpbmcgdGhyb3VnaCB0aGlzIG15c2VsZjpcblxuKipJbnZlc3RpZ2F0aW5nIHRoZSBgYWN0X2N0YCBBY3Rpb24gaW4gdGhlIExpbnV4IFRyYWZmaWMgQ29udHJvbCBTeXN0ZW0qKlxuXG5Pa2F5LCBzbyBJIG5lZWQgdG8gZGlnIGludG8gdGhlIGBhY3RfY3RgIGFjdGlvbi4gTGV0J3Mgc3RhcnQgYnkgZ2V0dGluZyBvdXIgaGFuZHMgZGlydHkgd2l0aCB0aGUgY29kZS4gTXkgaW5zdGluY3QgaXMgdG8gemVybyBpbiBvbiBgbmV0L3NjaGVkL2FjdF9jdC5jYCwgc3BlY2lmaWNhbGx5IGFyb3VuZCBsaW5lcyAzMjQgdG8gMzcwLiBUaGF0J3MgdXN1YWxseSB3aGVyZSB0aGUgY29yZSBhY3Rpb24gbG9naWMgcmVzaWRlcywgcmlnaHQ/IFRpbWUgdG8gc2VlIGhvdyB0aGUgY29ubmVjdGlvbiB0cmFja2luZyBtYW5pcHVsYXRpb24gaXMgYWN0dWFsbHkgaW1wbGVtZW50ZWQuXG5cblRoZW4sIEknbSBnb2luZyB0byBuZWVkIHRvIGZpZ3VyZSBvdXQgdGhlIGJ1aWxkIGNvbmZpZ3VyYXRpb24uIEknbGwgY2hlY2sgYG5ldC9zY2hlZC9LY29uZmlnYCBvciBwb3NzaWJseSB0aGUgTWFrZWZpbGUgdG8gaWRlbnRpZnkgdGhlIG5lY2Vzc2FyeSBrZXJuZWwgY29uZmlndXJhdGlvbnMgbmVlZGVkIHRvIGVuYWJsZSBhbmQgd29yayB3aXRoIGBhY3RfY3RgLiBJIGhhdmUgdG8gY29uZmlybSB0aGF0IHRoaXMgbW9kdWxlIGlzIGVuYWJsZWQuIEl0J3MgaW1wb3J0YW50IHRvIHVuZGVyc3RhbmQgdGhlIGRlcGVuZGVuY2llcyBhbmQgaG93IHRoaXMgYWN0aW9uIGludGVncmF0ZXMgaW50byB0aGUgYnJvYWRlciB0cmFmZmljIGNvbnRyb2wgZWNvc3lzdGVtLiBUaW1lIHRvIGdldCB0byBpdC5cblxuXG4iLCJJbnB1dFRva2VucyI6NDQ4OSwiT3V0cHV0VG9rZW5zIjozNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA5VDA4OjM4OjQ5LjkyMTE4MzY4NVoiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE1MTE5MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvc2NoZWQvYWN0X2N0LmNcIixcbiAgXCJGaXJzdExpbmVcIjogMzIwLFxuICBcIkxpbmVDb3VudFwiOiA1MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgMzIwOlxcdFxcdC5wdXRcXHRcXHQ9IHRjZl9jdF9uZl9wdXQsXFxuIDMyMTpcXHRcXHQub3duZXJcXHRcXHQ9IFRISVNfTU9EVUxFLFxcbiAzMjI6XFx0fTtcXG4gMzIzOlxcdFxcbiAzMjQ6XFx0c3RhdGljIGludCB0Y2ZfY3RfZmxvd190YWJsZV9nZXQoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgdGNmX2N0X3BhcmFtcyAqcGFyYW1zKVxcbiAzMjU6XFx0e1xcbiAzMjY6XFx0XFx0c3RydWN0IHpvbmVzX2h0X2tleSBrZXkgPSB7IC5uZXQgPSBuZXQsIC56b25lID0gcGFyYW1zLVxcdTAwM2V6b25lIH07XFxuIDMyNzpcXHRcXHRzdHJ1Y3QgdGNmX2N0X2Zsb3dfdGFibGUgKmN0X2Z0O1xcbiAzMjg6XFx0XFx0aW50IGVyciA9IC1FTk9NRU07XFxuIDMyOTpcXHRcXG4gMzMwOlxcdFxcdG11dGV4X2xvY2soXFx1MDAyNnpvbmVzX211dGV4KTtcXG4gMzMxOlxcdFxcdHJjdV9yZWFkX2xvY2soKTtcXG4gMzMyOlxcdFxcdGN0X2Z0ID0gcmhhc2h0YWJsZV9sb29rdXAoXFx1MDAyNnpvbmVzX2h0LCBcXHUwMDI2a2V5LCB6b25lc19wYXJhbXMpO1xcbiAzMzM6XFx0XFx0aWYgKGN0X2Z0IFxcdTAwMjZcXHUwMDI2IHJlZmNvdW50X2luY19ub3RfemVybyhcXHUwMDI2Y3RfZnQtXFx1MDAzZXJlZikpIHtcXG4gMzM0OlxcdFxcdFxcdHJjdV9yZWFkX3VubG9jaygpO1xcbiAzMzU6XFx0XFx0XFx0Z290byBvdXRfdW5sb2NrO1xcbiAzMzY6XFx0XFx0fVxcbiAzMzc6XFx0XFx0cmN1X3JlYWRfdW5sb2NrKCk7XFxuIDMzODpcXHRcXG4gMzM5OlxcdFxcdGN0X2Z0ID0ga3phbGxvY19vYmooKmN0X2Z0KTtcXG4gMzQwOlxcdFxcdGlmICghY3RfZnQpXFxuIDM0MTpcXHRcXHRcXHRnb3RvIGVycl9hbGxvYztcXG4gMzQyOlxcdFxcdHJlZmNvdW50X3NldChcXHUwMDI2Y3RfZnQtXFx1MDAzZXJlZiwgMSk7XFxuIDM0MzpcXHRcXG4gMzQ0OlxcdFxcdGN0X2Z0LVxcdTAwM2VrZXkgPSBrZXk7XFxuIDM0NTpcXHRcXHRlcnIgPSByaGFzaHRhYmxlX2luc2VydF9mYXN0KFxcdTAwMjZ6b25lc19odCwgXFx1MDAyNmN0X2Z0LVxcdTAwM2Vub2RlLCB6b25lc19wYXJhbXMpO1xcbiAzNDY6XFx0XFx0aWYgKGVycilcXG4gMzQ3OlxcdFxcdFxcdGdvdG8gZXJyX2luc2VydDtcXG4gMzQ4OlxcdFxcbiAzNDk6XFx0XFx0Y3RfZnQtXFx1MDAzZW5mX2Z0LnR5cGUgPSBcXHUwMDI2Zmxvd3RhYmxlX2N0O1xcbiAzNTA6XFx0XFx0Y3RfZnQtXFx1MDAzZW5mX2Z0LmZsYWdzIHw9IE5GX0ZMT1dUQUJMRV9IV19PRkZMT0FEIHxcXG4gMzUxOlxcdFxcdFxcdFxcdCAgICAgIE5GX0ZMT1dUQUJMRV9DT1VOVEVSO1xcbiAzNTI6XFx0XFx0d3JpdGVfcG5ldChcXHUwMDI2Y3RfZnQtXFx1MDAzZW5mX2Z0Lm5ldCwgbmV0KTtcXG4gMzUzOlxcdFxcdGVyciA9IG5mX2Zsb3dfdGFibGVfaW5pdChcXHUwMDI2Y3RfZnQtXFx1MDAzZW5mX2Z0KTtcXG4gMzU0OlxcdFxcdGlmIChlcnIpXFxuIDM1NTpcXHRcXHRcXHRnb3RvIGVycl9pbml0O1xcbiAzNTY6XFx0XFxuIDM1NzpcXHRcXHRfX21vZHVsZV9nZXQoVEhJU19NT0RVTEUpO1xcbiAzNTg6XFx0b3V0X3VubG9jazpcXG4gMzU5OlxcdFxcdHBhcmFtcy1cXHUwMDNlY3RfZnQgPSBjdF9mdDtcXG4gMzYwOlxcdFxcdHBhcmFtcy1cXHUwMDNlbmZfZnQgPSBcXHUwMDI2Y3RfZnQtXFx1MDAzZW5mX2Z0O1xcbiAzNjE6XFx0XFx0bXV0ZXhfdW5sb2NrKFxcdTAwMjZ6b25lc19tdXRleCk7XFxuIDM2MjpcXHRcXG4gMzYzOlxcdFxcdHJldHVybiAwO1xcbiAzNjQ6XFx0XFxuIDM2NTpcXHRlcnJfaW5pdDpcXG4gMzY2OlxcdFxcdHJoYXNodGFibGVfcmVtb3ZlX2Zhc3QoXFx1MDAyNnpvbmVzX2h0LCBcXHUwMDI2Y3RfZnQtXFx1MDAzZW5vZGUsIHpvbmVzX3BhcmFtcyk7XFxuIDM2NzpcXHRlcnJfaW5zZXJ0OlxcbiAzNjg6XFx0XFx0a2ZyZWUoY3RfZnQpO1xcbiAzNjk6XFx0ZXJyX2FsbG9jOlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOVQwODozODo0OS45MjEzMzgyMTVaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoxNTcyMjQxODIyNiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLlxuXG4qKlVuZGVyc3RhbmRpbmcgdGhlIE9yZGVyaW5nIG9mIE5ldGZpbHRlciBGbG93IFRhYmxlIEluaXRpYWxpemF0aW9uKipcblxuTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIGZpZ3VyZSBvdXQgKndoeSogdGhlIGB3cml0ZV9wbmV0KFx1MDAyNmN0X2Z0LVx1MDAzZW5mX2Z0Lm5ldCwgbmV0KWAgY2FsbCBoYXBwZW5zICpiZWZvcmUqIHRoZSBgbmZfZmxvd190YWJsZV9pbml0YCBmdW5jdGlvbiBpbiB0aGUgTmV0ZmlsdGVyIGNvZGUuIEl0J3MgYSBrZXkgZGV0YWlsLCBhbmQgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGltcGxpY2F0aW9ucyBvZiB0aGlzIHNwZWNpZmljIHNlcXVlbmNpbmcuIE15IGV4cGVydGlzZSB0ZWxscyBtZSB0aGF0IGluaXRpYWxpemF0aW9uIG9yZGVyIGlzICpjcml0aWNhbCogaW4gdGhlc2UgY29tcGxleCBzeXN0ZW1zLiBTb21ldGhpbmcgaXMgY2xlYXJseSByZWx5aW5nIG9uIGB3cml0ZV9wbmV0YCBiZWluZyBjb21wbGV0ZWQgcHJpb3IuXG5cbk15IG5leHQgc3RlcCBpcyB0byBkZWx2ZSBkaXJlY3RseSBpbnRvIGBuZl9mbG93X3RhYmxlX2luaXRgIGl0c2VsZi4gSSBuZWVkIHRvIGV4YW1pbmUgaXRzIGltcGxlbWVudGF0aW9uIHRvIHVuZGVyc3RhbmQgcHJlY2lzZWx5IHdoYXQgcmVzb3VyY2VzIGl0IGV4cGVjdHMgdG8gYmUgaW4gcGxhY2Ugb3IgYXZhaWxhYmxlIGR1cmluZyBpdHMgZXhlY3V0aW9uLiBJJ2xsIGJlIGxvb2tpbmcgZm9yIGRlcGVuZGVuY2llcyBvbiB0aGUgYGN0X2Z0LVx1MDAzZW5mX2Z0Lm5ldGAgc3RydWN0dXJlLCB0aGUgYG5ldGAgcG9pbnRlciwgb3IgYW55IG90aGVyIHJlbGF0ZWQgZGF0YSB0aGF0IG1pZ2h0IGV4cGxhaW4gdGhpcyBvcmRlcmluZyBjb25zdHJhaW50LiBJJ2xsIG5lZWQgdG8gc2VlIGlmIGBuZl9mbG93X3RhYmxlX2luaXRgIGRpcmVjdGx5IHVzZXMgdGhlIHBvaW50ZXIsIG9yIGFueSBkYXRhIHN0cnVjdHVyZXMgdGhhdCByZWx5IHVwb24gaXQuIFRoZW4gSSBjYW4gZGV0ZXJtaW5lIGlmIGFueSByZWFkL3dyaXRlcyBvY2N1ciB3aGljaCBuZWNlc3NpdGF0ZSB0aGUgcHJpb3IgaW5pdGlhbGlzYXRpb24uIEkgaGF2ZSBhIGh1bmNoIGl0IHdpbGwgYmUgdGhlIGNhc2UsIGFuZCBJIGNhbiBzdGFydCB0byBpbmZlciB0aGUgZGVzaWduLlxuXG5cbiIsIklucHV0VG9rZW5zIjo1NTcwLCJPdXRwdXRUb2tlbnMiOjMyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTAsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wOVQwODozOTowNS42NDM3NTg5MTFaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTE4MjU0ODU0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm5mX2Zsb3dfdGFibGVfaW5pdFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvbmV0ZmlsdGVyL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfY29yZS5jPTcwMj1FWFBPUlRfU1lNQk9MX0dQTChuZl9mbG93X2RuYXRfcG9ydCk7XFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2NvcmUuYy03MDMtXFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2NvcmUuYzo3MDQ6aW50IG5mX2Zsb3dfdGFibGVfaW5pdChzdHJ1Y3QgbmZfZmxvd3RhYmxlICpmbG93dGFibGUpXFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2NvcmUuYy03MDUte1xcbi0tXFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2NvcmUuYy03MjUtfVxcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9jb3JlLmM6NzI2OkVYUE9SVF9TWU1CT0xfR1BMKG5mX2Zsb3dfdGFibGVfaW5pdCk7XFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2NvcmUuYy03MjctXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfY29yZS5jPTc3Nz1FWFBPUlRfU1lNQk9MX0dQTChuZl9mbG93X3RhYmxlX2ZyZWUpO1xcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9jb3JlLmMtNzc4LVxcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9jb3JlLmM6Nzc5OnN0YXRpYyBpbnQgbmZfZmxvd190YWJsZV9pbml0X25ldChzdHJ1Y3QgbmV0ICpuZXQpXFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2NvcmUuYy03ODAte1xcbi0tXFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2NvcmUuYz03OTA9c3RhdGljIGludCBuZl9mbG93X3RhYmxlX3Blcm5ldF9pbml0KHN0cnVjdCBuZXQgKm5ldClcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9jb3JlLmMtNzkzLVxcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9jb3JlLmM6Nzk0OlxcdHJldCA9IG5mX2Zsb3dfdGFibGVfaW5pdF9uZXQobmV0KTtcXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfY29yZS5jLTc5NS1cXHRpZiAocmV0IFxcdTAwM2MgMClcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9jb3JlLmMtNzk3LVxcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9jb3JlLmM6Nzk4OlxcdHJldCA9IG5mX2Zsb3dfdGFibGVfaW5pdF9wcm9jKG5ldCk7XFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2NvcmUuYy03OTktXFx0aWYgKHJldCBcXHUwMDNjIDApXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfaW5ldC5jPTY4PXN0YXRpYyBzdHJ1Y3QgbmZfZmxvd3RhYmxlX3R5cGUgZmxvd3RhYmxlX2luZXQgPSB7XFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2luZXQuYy02OS1cXHQuZmFtaWx5XFx0XFx0PSBORlBST1RPX0lORVQsXFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2luZXQuYzo3MDpcXHQuaW5pdFxcdFxcdD0gbmZfZmxvd190YWJsZV9pbml0LFxcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9pbmV0LmMtNzEtXFx0LnNldHVwXFx0XFx0PSBuZl9mbG93X3RhYmxlX29mZmxvYWRfc2V0dXAsXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfaW5ldC5jPTc4PXN0YXRpYyBzdHJ1Y3QgbmZfZmxvd3RhYmxlX3R5cGUgZmxvd3RhYmxlX2lwdjQgPSB7XFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2luZXQuYy03OS1cXHQuZmFtaWx5XFx0XFx0PSBORlBST1RPX0lQVjQsXFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2luZXQuYzo4MDpcXHQuaW5pdFxcdFxcdD0gbmZfZmxvd190YWJsZV9pbml0LFxcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9pbmV0LmMtODEtXFx0LnNldHVwXFx0XFx0PSBuZl9mbG93X3RhYmxlX29mZmxvYWRfc2V0dXAsXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfaW5ldC5jPTg4PXN0YXRpYyBzdHJ1Y3QgbmZfZmxvd3RhYmxlX3R5cGUgZmxvd3RhYmxlX2lwdjYgPSB7XFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2luZXQuYy04OS1cXHQuZmFtaWx5XFx0XFx0PSBORlBST1RPX0lQVjYsXFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2luZXQuYzo5MDpcXHQuaW5pdFxcdFxcdD0gbmZfZmxvd190YWJsZV9pbml0LFxcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9pbmV0LmMtOTEtXFx0LnNldHVwXFx0XFx0PSBuZl9mbG93X3RhYmxlX29mZmxvYWRfc2V0dXAsXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfcHJvY2ZzLmM9NjA9c3RhdGljIGNvbnN0IHN0cnVjdCBzZXFfb3BlcmF0aW9ucyBuZl9mbG93X3RhYmxlX2NwdV9zZXFfb3BzID0ge1xcbi0tXFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX3Byb2Nmcy5jLTY2LVxcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9wcm9jZnMuYzo2NzppbnQgbmZfZmxvd190YWJsZV9pbml0X3Byb2Moc3RydWN0IG5ldCAqbmV0KVxcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9wcm9jZnMuYy02OC17XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA5VDA4OjM5OjA1Ljc2MjAxNzk4NVoiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjIwMDMyNTk1NzAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBzdW1tYXJ5LCBhcyBpZiBJIHdlcmUgdGhpbmtpbmcgdGhlc2UgdGhvdWdodHM6XG5cbioqRGl2aW5nIGludG8gdGhlIEZsb3cgVGFibGUgSW5pdGlhbGl6YXRpb24qKlxuXG5BbHJpZ2h0LCBsZXQncyBnZXQgZG93biB0byBicmFzcyB0YWNrcy4gSSBuZWVkIHRvIHRha2UgYSBsb29rIGF0IHRoZSBpbml0aWFsaXphdGlvbiBvZiB0aGUgZmxvdyB0YWJsZS4gU3BlY2lmaWNhbGx5LCBJJ20gZm9jdXNpbmcgb24gYG5mX2Zsb3dfdGFibGVfaW5pdGAgaW4gYG5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9jb3JlLmNgLiBUaGlzIGlzIHdoZXJlIHRoZSB3aG9sZSB0aGluZyBzdGFydHMsIHRoZSBmb3VuZGF0aW9uIGZvciB0aGUgTmV0ZmlsdGVyIGZsb3cgdGFibGUgZnVuY3Rpb25hbGl0eS4gVW5kZXJzdGFuZGluZyB0aGlzIGZ1bmN0aW9uIGlzIGNydWNpYWwgZm9yIGdyYXNwaW5nIGhvdyB0aGUgdGFibGUgaXMgc2V0IHVwLCB3aGF0IGRhdGEgc3RydWN0dXJlcyBhcmUgaW52b2x2ZWQsIGFuZCB1bHRpbWF0ZWx5LCBob3cgcGFja2V0cyBhcmUgbWF0Y2hlZCBhbmQgbWFuYWdlZCB3aXRoaW4gdGhlIGZsb3cgdGFibGUuIEknbSBlc3BlY2lhbGx5IGludGVyZXN0ZWQgaW4gaG93IGl0IGludGVyYWN0cyB3aXRoIHRoZSB1bmRlcmx5aW5nIGhhcmR3YXJlLCBob3cgdGhlIG1lbW9yeSBpcyBhbGxvY2F0ZWQsIGFuZCB3aGF0IGxvY2tzIGFyZSBlbXBsb3llZCB0byBrZWVwIGV2ZXJ5dGhpbmcgc3luY2hyb25pemVkLiBUaW1lIHRvIGRpZyBpbiBhbmQgc2VlIHdoYXQncyB3aGF0LlxuXG5cbiIsIklucHV0VG9rZW5zIjo2OTY4LCJPdXRwdXRUb2tlbnMiOjQyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDlUMDg6Mzk6MDcuNzY1Mjc5OTU1WiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjc5OTYwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9jb3JlLmNcIixcbiAgXCJGaXJzdExpbmVcIjogNzAwLFxuICBcIkxpbmVDb3VudFwiOiAzNVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgNzAwOlxcdFxcdG5mX2Zsb3dfbmF0X3BvcnQoc2tiLCB0aG9mZiwgcHJvdG9jb2wsIHBvcnQsIG5ld19wb3J0KTtcXG4gNzAxOlxcdH1cXG4gNzAyOlxcdEVYUE9SVF9TWU1CT0xfR1BMKG5mX2Zsb3dfZG5hdF9wb3J0KTtcXG4gNzAzOlxcdFxcbiA3MDQ6XFx0aW50IG5mX2Zsb3dfdGFibGVfaW5pdChzdHJ1Y3QgbmZfZmxvd3RhYmxlICpmbG93dGFibGUpXFxuIDcwNTpcXHR7XFxuIDcwNjpcXHRcXHRpbnQgZXJyO1xcbiA3MDc6XFx0XFxuIDcwODpcXHRcXHRJTklUX0RFTEFZRURfV09SSyhcXHUwMDI2Zmxvd3RhYmxlLVxcdTAwM2VnY193b3JrLCBuZl9mbG93X29mZmxvYWRfd29ya19nYyk7XFxuIDcwOTpcXHRcXHRmbG93X2Jsb2NrX2luaXQoXFx1MDAyNmZsb3d0YWJsZS1cXHUwMDNlZmxvd19ibG9jayk7XFxuIDcxMDpcXHRcXHRpbml0X3J3c2VtKFxcdTAwMjZmbG93dGFibGUtXFx1MDAzZWZsb3dfYmxvY2tfbG9jayk7XFxuIDcxMTpcXHRcXG4gNzEyOlxcdFxcdGVyciA9IHJoYXNodGFibGVfaW5pdChcXHUwMDI2Zmxvd3RhYmxlLVxcdTAwM2VyaGFzaHRhYmxlLFxcbiA3MTM6XFx0XFx0XFx0XFx0ICAgICAgXFx1MDAyNm5mX2Zsb3dfb2ZmbG9hZF9yaGFzaF9wYXJhbXMpO1xcbiA3MTQ6XFx0XFx0aWYgKGVyciBcXHUwMDNjIDApXFxuIDcxNTpcXHRcXHRcXHRyZXR1cm4gZXJyO1xcbiA3MTY6XFx0XFxuIDcxNzpcXHRcXHRxdWV1ZV9kZWxheWVkX3dvcmsoc3lzdGVtX3Bvd2VyX2VmZmljaWVudF93cSxcXG4gNzE4OlxcdFxcdFxcdFxcdCAgIFxcdTAwMjZmbG93dGFibGUtXFx1MDAzZWdjX3dvcmssIEhaKTtcXG4gNzE5OlxcdFxcbiA3MjA6XFx0XFx0bXV0ZXhfbG9jayhcXHUwMDI2Zmxvd3RhYmxlX2xvY2spO1xcbiA3MjE6XFx0XFx0bGlzdF9hZGQoXFx1MDAyNmZsb3d0YWJsZS1cXHUwMDNlbGlzdCwgXFx1MDAyNmZsb3d0YWJsZXMpO1xcbiA3MjI6XFx0XFx0bXV0ZXhfdW5sb2NrKFxcdTAwMjZmbG93dGFibGVfbG9jayk7XFxuIDcyMzpcXHRcXG4gNzI0OlxcdFxcdHJldHVybiAwO1xcbiA3MjU6XFx0fVxcbiA3MjY6XFx0RVhQT1JUX1NZTUJPTF9HUEwobmZfZmxvd190YWJsZV9pbml0KTtcXG4gNzI3OlxcdFxcbiA3Mjg6XFx0c3RhdGljIHZvaWQgbmZfZmxvd190YWJsZV9kb19jbGVhbnVwKHN0cnVjdCBuZl9mbG93dGFibGUgKmZsb3dfdGFibGUsXFxuIDcyOTpcXHRcXHRcXHRcXHRcXHQgICAgIHN0cnVjdCBmbG93X29mZmxvYWQgKmZsb3csIHZvaWQgKmRhdGEpXFxuIDczMDpcXHR7XFxuIDczMTpcXHRcXHRzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gZGF0YTtcXG4gNzMyOlxcdFxcbiA3MzM6XFx0XFx0aWYgKCFkZXYpIHtcXG4gNzM0OlxcdFxcdFxcdGZsb3dfb2ZmbG9hZF90ZWFyZG93bihmbG93KTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDlUMDg6Mzk6MDcuNzY1MzYxNTU1WiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjE3MTAyODA0MTYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBGbG93IFRhYmxlIEluaXRpYWxpemF0aW9uKipcblxuT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMgYG5mX2Zsb3dfdGFibGVfaW5pdGAgZnVuY3Rpb24uIFRoZSBmaXJzdCB0aGluZyB0aGF0IGp1bXBzIG91dCBpcyB0aGUgYHF1ZXVlX2RlbGF5ZWRfd29ya2AgY2FsbC4gSXQgbG9va3MgbGlrZSBpdCdzIHNjaGVkdWxpbmcgc29tZSBnYXJiYWdlIGNvbGxlY3Rpb24gd29yayB1c2luZyBgc3lzdGVtX3Bvd2VyX2VmZmljaWVudF93cWAsIHdpdGggYSBkZWxheSBvZiBvbmUgYEhaYC4gSW50ZXJlc3RpbmcuIEkgd2FudCB0byB1bmRlcnN0YW5kIGhvdyB0aGlzIGZsb3cgdGFibGUgZ2FyYmFnZSBjb2xsZWN0aW9uIGlzIGhhbmRsZWQuXG5cblNvLCB0aGUgbmV4dCBsb2dpY2FsIHN0ZXAgaXMgdG8gZXhhbWluZSB3aGF0IGBuZl9mbG93X29mZmxvYWRfd29ya19nY2AgaXMgZG9pbmcsIGFzIGl0IGlzIHJlbGF0ZWQgdG8gdGhpcyBgZmxvd3RhYmxlYCBzdHJ1Y3R1cmUuIExldCdzIGRpZyBpbnRvIGBuZl9mbG93X29mZmxvYWRfd29ya19nY2AgYW5kIHNlZSB3aGF0J3MgaGFwcGVuaW5nLlxuXG5cbiIsIklucHV0VG9rZW5zIjo3NzY2LCJPdXRwdXRUb2tlbnMiOjM1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6ODAsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wOVQwODozOTowOS40NzU2NDQ2MDFaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjk1MDYyMjYyLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm5mX2Zsb3dfb2ZmbG9hZF93b3JrX2djXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9uZXRmaWx0ZXIvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9jb3JlLmM9NjAyPXZvaWQgbmZfZmxvd190YWJsZV9nY19ydW4oc3RydWN0IG5mX2Zsb3d0YWJsZSAqZmxvd190YWJsZSlcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9jb3JlLmMtNjA2LVxcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9jb3JlLmM6NjA3OnN0YXRpYyB2b2lkIG5mX2Zsb3dfb2ZmbG9hZF93b3JrX2djKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfY29yZS5jLTYwOC17XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfY29yZS5jPTcwND1pbnQgbmZfZmxvd190YWJsZV9pbml0KHN0cnVjdCBuZl9mbG93dGFibGUgKmZsb3d0YWJsZSlcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9jb3JlLmMtNzA3LVxcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9jb3JlLmM6NzA4OlxcdElOSVRfREVMQVlFRF9XT1JLKFxcdTAwMjZmbG93dGFibGUtXFx1MDAzZWdjX3dvcmssIG5mX2Zsb3dfb2ZmbG9hZF93b3JrX2djKTtcXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfY29yZS5jLTcwOS1cXHRmbG93X2Jsb2NrX2luaXQoXFx1MDAyNmZsb3d0YWJsZS1cXHUwMDNlZmxvd19ibG9jayk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA5VDA4OjM5OjA5LjU3MDcxMTAyM1oiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjozNzYzMzQyNjI1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlIHdlIGdvLi4uXG5cbioqRGl2aW5nIGludG8gYG5mX2Zsb3dfb2ZmbG9hZF93b3JrX2djYCoqXG5cbkFscmlnaHQsIGxldCdzIGdldCBkb3duIHRvIGJyYXNzIHRhY2tzLiBJIG5lZWQgdG8gdGFrZSBhIGxvb2sgYXQgYG5mX2Zsb3dfb2ZmbG9hZF93b3JrX2djYC4gU291bmRzIGxpa2Ugd2UncmUgdGFsa2luZyBhYm91dCB0aGUgZ2FyYmFnZSBjb2xsZWN0aW9uIG1lY2hhbmlzbSBmb3IgZmxvdyBvZmZsb2FkIHdvcmsgaXRlbXMsIGFuZCB0aGF0J3MgYSBjcml0aWNhbCBwYXJ0IG9mIG1haW50YWluaW5nIHBlcmZvcm1hbmNlIGFuZCBzdGFiaWxpdHkuIEknbSBleHBlY3RpbmcgdGhpcyB0byBiZSB0aGUgZnVuY3Rpb24gdGhhdCBjbGVhbnMgdXAgc3RhbGUgb3IgY29tcGxldGVkIG9mZmxvYWQgZW50cmllcywgZnJlZWluZyB1cCByZXNvdXJjZXMgYW5kIHByZXZlbnRpbmcgYW55IG1lbW9yeSBsZWFrcyBvciBwZXJmb3JtYW5jZSBkZWdyYWRhdGlvbiBmcm9tIHVuY2hlY2tlZCBncm93dGguIEknbSBob3BpbmcgdG8gc2VlIGhvdyBpdCBpbnRlcmFjdHMgd2l0aCB0aGUgYWdpbmcgYW5kIHRpbWVvdXQgbWVjaGFuaXNtcyDigJMgaG93IGFnZ3Jlc3NpdmVseSBkb2VzIGl0IHJlY2xhaW0gZW50cmllcz8gRG9lcyBpdCBwcmlvcml0aXplIGNlcnRhaW4gdHlwZXMgb2YgZW50cmllcywgbGlrZSB0aG9zZSB0aGF0IGhhdmUgYmVlbiBpZGxlIHRoZSBsb25nZXN0IG9yIHRob3NlIGFzc29jaWF0ZWQgd2l0aCBmbG93cyB0aGF0IGhhdmUgYmVlbiB0ZXJtaW5hdGVkPyBBbmQgaXMgdGhlcmUgYSBjbGVhciBkaXN0aW5jdGlvbiBiZXR3ZWVuIHRoZSBjbGVhbnVwIHBlcmZvcm1lZCBieSBgbmZfZmxvd19vZmZsb2FkX3dvcmtfZ2NgIGFuZCBhbnkgb3RoZXIgd29yayBxdWV1ZSBtYW5hZ2VtZW50IHdpdGhpbiB0aGUgb2ZmbG9hZCBpbmZyYXN0cnVjdHVyZT8gQSBzb2xpZCB1bmRlcnN0YW5kaW5nIG9mIHRoaXMgZ2FyYmFnZSBjb2xsZWN0aW9uIHByb2Nlc3MgaXMga2V5IHRvIGV2YWx1YXRpbmcgdGhlIG92ZXJhbGwgcm9idXN0bmVzcyBhbmQgZWZmaWNpZW5jeSBvZiB0aGUgb2ZmbG9hZCBzeXN0ZW0uIExldCdzIHNlZSBob3cgdGhleSd2ZSBpbXBsZW1lbnRlZCBpdC4uLlxuXG5cbiIsIklucHV0VG9rZW5zIjo4MzA5LCJPdXRwdXRUb2tlbnMiOjQyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDlUMDg6Mzk6MTMuMzM0MDU2NTI4WiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEyNzc0MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfY29yZS5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDYwMCxcbiAgXCJMaW5lQ291bnRcIjogNDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDYwMDpcXHR9XFxuIDYwMTpcXHRcXG4gNjAyOlxcdHZvaWQgbmZfZmxvd190YWJsZV9nY19ydW4oc3RydWN0IG5mX2Zsb3d0YWJsZSAqZmxvd190YWJsZSlcXG4gNjAzOlxcdHtcXG4gNjA0OlxcdFxcdG5mX2Zsb3dfdGFibGVfaXRlcmF0ZShmbG93X3RhYmxlLCBuZl9mbG93X29mZmxvYWRfZ2Nfc3RlcCwgTlVMTCk7XFxuIDYwNTpcXHR9XFxuIDYwNjpcXHRcXG4gNjA3OlxcdHN0YXRpYyB2b2lkIG5mX2Zsb3dfb2ZmbG9hZF93b3JrX2djKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcXG4gNjA4OlxcdHtcXG4gNjA5OlxcdFxcdHN0cnVjdCBuZl9mbG93dGFibGUgKmZsb3dfdGFibGU7XFxuIDYxMDpcXHRcXG4gNjExOlxcdFxcdGZsb3dfdGFibGUgPSBjb250YWluZXJfb2Yod29yaywgc3RydWN0IG5mX2Zsb3d0YWJsZSwgZ2Nfd29yay53b3JrKTtcXG4gNjEyOlxcdFxcdG5mX2Zsb3dfdGFibGVfZ2NfcnVuKGZsb3dfdGFibGUpO1xcbiA2MTM6XFx0XFx0cXVldWVfZGVsYXllZF93b3JrKHN5c3RlbV9wb3dlcl9lZmZpY2llbnRfd3EsIFxcdTAwMjZmbG93X3RhYmxlLVxcdTAwM2VnY193b3JrLCBIWik7XFxuIDYxNDpcXHR9XFxuIDYxNTpcXHRcXG4gNjE2OlxcdHN0YXRpYyB2b2lkIG5mX2Zsb3dfbmF0X3BvcnRfdGNwKHN0cnVjdCBza19idWZmICpza2IsIHVuc2lnbmVkIGludCB0aG9mZixcXG4gNjE3OlxcdFxcdFxcdFxcdFxcdCBfX2JlMTYgcG9ydCwgX19iZTE2IG5ld19wb3J0KVxcbiA2MTg6XFx0e1xcbiA2MTk6XFx0XFx0c3RydWN0IHRjcGhkciAqdGNwaDtcXG4gNjIwOlxcdFxcbiA2MjE6XFx0XFx0dGNwaCA9ICh2b2lkICopKHNrYl9uZXR3b3JrX2hlYWRlcihza2IpICsgdGhvZmYpO1xcbiA2MjI6XFx0XFx0aW5ldF9wcm90b19jc3VtX3JlcGxhY2UyKFxcdTAwMjZ0Y3BoLVxcdTAwM2VjaGVjaywgc2tiLCBwb3J0LCBuZXdfcG9ydCwgZmFsc2UpO1xcbiA2MjM6XFx0fVxcbiA2MjQ6XFx0XFxuIDYyNTpcXHRzdGF0aWMgdm9pZCBuZl9mbG93X25hdF9wb3J0X3VkcChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1bnNpZ25lZCBpbnQgdGhvZmYsXFxuIDYyNjpcXHRcXHRcXHRcXHRcXHQgX19iZTE2IHBvcnQsIF9fYmUxNiBuZXdfcG9ydClcXG4gNjI3OlxcdHtcXG4gNjI4OlxcdFxcdHN0cnVjdCB1ZHBoZHIgKnVkcGg7XFxuIDYyOTpcXHRcXG4gNjMwOlxcdFxcdHVkcGggPSAodm9pZCAqKShza2JfbmV0d29ya19oZWFkZXIoc2tiKSArIHRob2ZmKTtcXG4gNjMxOlxcdFxcdGlmICh1ZHBoLVxcdTAwM2VjaGVjayB8fCBza2ItXFx1MDAzZWlwX3N1bW1lZCA9PSBDSEVDS1NVTV9QQVJUSUFMKSB7XFxuIDYzMjpcXHRcXHRcXHRpbmV0X3Byb3RvX2NzdW1fcmVwbGFjZTIoXFx1MDAyNnVkcGgtXFx1MDAzZWNoZWNrLCBza2IsIHBvcnQsXFxuIDYzMzpcXHRcXHRcXHRcXHRcXHRcXHQgbmV3X3BvcnQsIGZhbHNlKTtcXG4gNjM0OlxcdFxcdFxcdGlmICghdWRwaC1cXHUwMDNlY2hlY2spXFxuIDYzNTpcXHRcXHRcXHRcXHR1ZHBoLVxcdTAwM2VjaGVjayA9IENTVU1fTUFOR0xFRF8wO1xcbiA2MzY6XFx0XFx0fVxcbiA2Mzc6XFx0fVxcbiA2Mzg6XFx0XFxuIDYzOTpcXHRzdGF0aWMgdm9pZCBuZl9mbG93X25hdF9wb3J0KHN0cnVjdCBza19idWZmICpza2IsIHVuc2lnbmVkIGludCB0aG9mZixcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDlUMDg6Mzk6MTMuMzM0MTg3Mzg4WiIsIlNlcSI6MTUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjI1NjEwMjU5NTAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBzdW1tYXJ5LCBwcmVzZW50ZWQgYXMgYSBzdHJlYW0gb2YgdGhvdWdodDpcblxuKipUcmFjaW5nIHRoZSBOZXR3b3JrIE5hbWVzcGFjZSBDb25uZWN0aW9uKipcblxuQWxyaWdodCwgSSBuZWVkIHRvIGZpZ3VyZSBvdXQgaG93IHRoaXMgYGZsb3d0YWJsZS1cdTAwM2VuZXRgIGNvbm5lY3Rpb24gaXMgYmVpbmcgdXNlZCB3aXRoaW4gdGhpcyBjb2RlLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgbmV0d29yayBuYW1lc3BhY2UgY29udGV4dC4gTGV0J3Mgc2VlLi4uIEknbGwgc3RhcnQgYnkgZG9pbmcgYSBxdWljayBncmVwLCBvciBtYXliZSBhIGNvZGUgc2VhcmNoLiBJJ2xsIG5lZWQgdG8gbG9vayBmb3Igd2hlcmUgYGZsb3d0YWJsZS1cdTAwM2VuZXRgIGlzIGRpcmVjdGx5IHJlZmVyZW5jZWQsIHRoYXQgc2hvdWxkIGJlIGVhc3kgZW5vdWdoLiBUaGVuLCBJIHNob3VsZCBhbHNvIGNoZWNrIGlmIGByZWFkX3BuZXQoXHUwMDI2Zmxvd3RhYmxlLVx1MDAzZW5ldClgIGlzIHVzZWQgYW55d2hlcmUgYmVjYXVzZSB0aGF0IGNvdWxkIGFsc28gYmUgcmVsZXZhbnQuIEp1c3QgaW4gY2FzZSBpdCdzIGEgZmllbGQgd2l0aCBpbmRpcmVjdCBhY2Nlc3MsIEknbGwgYWxzbyBjb25maXJtIHRoYXQgdGhlIHNpbXBsZSBgZmxvd3RhYmxlLVx1MDAzZW5ldGAgYWNjZXNzIGlzIGNvdmVyZWQuIFRoYXQgc2hvdWxkIGdpdmUgbWUgYSBnb29kIHBpY3R1cmUgb2YgaG93IHRoZSBuZXR3b3JrIG5hbWVzcGFjZSBpbmZvcm1hdGlvbiBlbmNhcHN1bGF0ZWQgd2l0aGluIHRoaXMgYGZsb3d0YWJsZWAgaXMgYmVpbmcgYWNjZXNzZWQgYW5kIHV0aWxpemVkIHRocm91Z2hvdXQgdGhlIGNvZGViYXNlLiBUaGUgZ29hbCBpcyBhIGNsZWFyIHVuZGVyc3RhbmRpbmcgb2YgdGhlIG5ldHdvcmsgbmFtZXNwYWNlIGNvbm5lY3Rpb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjkzMDAsIk91dHB1dFRva2VucyI6MjgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMywiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA5VDA4OjM5OjE1Ljg5NTIxNjAzOFoiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjMxODA1MDE0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm5mX2Zsb3d0YWJsZS4qbmV0XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2luZXQuYz00NT1zdGF0aWMgaW50IG5mX2Zsb3dfcnVsZV9yb3V0ZV9pbmV0KHN0cnVjdCBuZXQgKm5ldCxcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9pbmV0LmMtNjctXFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2luZXQuYzo2ODpzdGF0aWMgc3RydWN0IG5mX2Zsb3d0YWJsZV90eXBlIGZsb3d0YWJsZV9pbmV0ID0ge1xcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9pbmV0LmMtNjktXFx0LmZhbWlseVxcdFxcdD0gTkZQUk9UT19JTkVULFxcbi0tXFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX3Byb2Nmcy5jPTY3PWludCBuZl9mbG93X3RhYmxlX2luaXRfcHJvYyhzdHJ1Y3QgbmV0ICpuZXQpXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfcHJvY2ZzLmMtNzAtXFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX3Byb2Nmcy5jOjcxOlxcdHBkZSA9IHByb2NfY3JlYXRlX25ldChcXFwibmZfZmxvd3RhYmxlXFxcIiwgMDQ0NCwgbmV0LVxcdTAwM2Vwcm9jX25ldF9zdGF0LFxcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9wcm9jZnMuYy03Mi1cXHRcXHRcXHQgICAgICBcXHUwMDI2bmZfZmxvd190YWJsZV9jcHVfc2VxX29wcyxcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9wcm9jZnMuYz03Nz12b2lkIG5mX2Zsb3dfdGFibGVfZmluaV9wcm9jKHN0cnVjdCBuZXQgKm5ldClcXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfcHJvY2ZzLmMtNzgte1xcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9wcm9jZnMuYzo3OTpcXHRyZW1vdmVfcHJvY19lbnRyeShcXFwibmZfZmxvd3RhYmxlXFxcIiwgbmV0LVxcdTAwM2Vwcm9jX25ldF9zdGF0KTtcXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfcHJvY2ZzLmMtODAtfVxcbi0tXFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX3hkcC5jPTI0PXN0YXRpYyBERUZJTkVfTVVURVgobmZfeGRwX2hhc2h0YWJsZV9sb2NrKTtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV94ZHAuYy0yNi0vKiBjYWxsZXIgbXVzdCBob2xkIHJjdSByZWFkIGxvY2sgKi9cXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfeGRwLmM6Mjc6c3RydWN0IG5mX2Zsb3d0YWJsZSAqbmZfZmxvd3RhYmxlX2J5X2Rldihjb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV94ZHAuYy0yOC17XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA5VDA4OjM5OjE2LjEyNzAyNjUxMloiLCJTZXEiOjE3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo1MTI4NzAyMDE3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqSW52ZXN0aWdhdGluZyBOZXR3b3JrIEZsb3cgVGFibGUgQWNjZXNzKipcblxuUmlnaHQsIHNvIEkgbmVlZCB0byBkaWcgaW50byBob3cgdGhlIGBwbmV0YCBzdWJzeXN0ZW0sIHNwZWNpZmljYWxseSwgaXMgaW50ZXJhY3Rpbmcgd2l0aCB0aGUgZmxvdyB0YWJsZS4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzLCBsZXQncyBjYXN0IGEgd2lkZSBuZXQgd2l0aCB0aGUgc2VhcmNoIHRlcm1zLiBJJ20gZ29pbmcgdG8gbG9vayBmb3IgYW55IGluc3RhbmNlcyB3aGVyZSBgcmVhZF9wbmV0LipuZl9mbG93dGFibGVgLCBgcmVhZF9wbmV0LipmbG93dGFibGVgLCBvciBldmVuIHRoZSBzaG9ydGhhbmQgYHJlYWRfcG5ldC4qZnRgIGlzIHVzZWQgd2l0aGluIHRoZSBgbmV0L2AgZGlyZWN0b3J5LiBUaGF0IGAuKmAgaXMgY3J1Y2lhbDsgaXQgbmVlZHMgdG8gYmUgZmxleGlibGUgZW5vdWdoIHRvIGFjY291bnQgZm9yIGZ1bmN0aW9uIG5hbWVzLCB2YXJpYWJsZXMgb3IgYW55IG90aGVyIHJlbGF0ZWQgc3RydWN0dXJlcyBvciB1c2FnZSBpbiB0aGUgc291cmNlIGNvZGUuIEknbSBwYXJ0aWN1bGFybHkgaW50ZXJlc3RlZCBpZiB0aGVyZSBpcyBhbnkgc3RydWN0dXJlIHRoYXQgaGFzIHNpbWlsYXIgdXNhZ2UgdGhhdCBwcm92aWRlcyBhbiBhcHByb3ByaWF0ZSBtYXRjaC5cblxuVGhpcyBzaG91bGQgY2FwdHVyZSBhbnkgY29kZSBwYXRocyB0aGF0IG1pZ2h0IGJlIGRpcmVjdGx5IHJlYWRpbmcgZnJvbSBvciBhY2Nlc3NpbmcgdGhlIGZsb3cgdGFibGUgZnJvbSB0aGUgYHBuZXRgIGNvbnRleHQuIE9mIGNvdXJzZSwgSSdsbCBiZSBtaW5kZnVsIG9mIGluZGlyZWN0IGFjY2Vzc2VzIGFzIHdlbGwsIGJ1dCB0aGlzIGluaXRpYWwgc2VhcmNoIHNob3VsZCBoaWdobGlnaHQgdGhlIG1vc3Qgb2J2aW91cyBjYW5kaWRhdGVzIGZvciBmdXJ0aGVyIGFuYWx5c2lzLiBBZGRpdGlvbmFsbHkgSSBzaG91bGQgbG9vayBmb3Igc3RydWN0dXJlcyBsaWtlIGBmbG93dGFibGUtXHUwMDNlbmV0YCB0byBzZWUgaWYgdGhlcmUgaXMgYW55IGFsdGVybmF0aXZlIG1ldGhvZCBvZiBhY2Nlc3MuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEwMDg4LCJPdXRwdXRUb2tlbnMiOjI2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDlUMDg6Mzk6MjEuMjU1NzMxMzY5WiIsIlNlcSI6MTgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMTkwNDc1MDUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwicmVhZF9wbmV0XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2NlcGgvY2VwaF9jb21tb24uYz0xMzE9aW50IGNlcGhfY29tcGFyZV9vcHRpb25zKHN0cnVjdCBjZXBoX29wdGlvbnMgKm5ld19vcHQsXFxuLS1cXG5uZXQvY2VwaC9jZXBoX2NvbW1vbi5jLTE0My1cXHQgKi9cXG5uZXQvY2VwaC9jZXBoX2NvbW1vbi5jOjE0NDpcXHRpZiAoIW5ldF9lcShjdXJyZW50LVxcdTAwM2Vuc3Byb3h5LVxcdTAwM2VuZXRfbnMsIHJlYWRfcG5ldChcXHUwMDI2Y2xpZW50LVxcdTAwM2Vtc2dyLm5ldCkpKVxcbm5ldC9jZXBoL2NlcGhfY29tbW9uLmMtMTQ1LVxcdFxcdHJldHVybiAtMTtcXG4tLVxcbm5ldC9jZXBoL21lc3Nlbmdlci5jPTQzNT1pbnQgY2VwaF90Y3BfY29ubmVjdChzdHJ1Y3QgY2VwaF9jb25uZWN0aW9uICpjb24pXFxuLS1cXG5uZXQvY2VwaC9tZXNzZW5nZXIuYy00NDctXFx0bm9pb19mbGFnID0gbWVtYWxsb2Nfbm9pb19zYXZlKCk7XFxubmV0L2NlcGgvbWVzc2VuZ2VyLmM6NDQ4OlxcdHJldCA9IHNvY2tfY3JlYXRlX2tlcm4ocmVhZF9wbmV0KFxcdTAwMjZjb24tXFx1MDAzZW1zZ3ItXFx1MDAzZW5ldCksIHNzLnNzX2ZhbWlseSxcXG5uZXQvY2VwaC9tZXNzZW5nZXIuYy00NDktXFx0XFx0XFx0ICAgICAgIFNPQ0tfU1RSRUFNLCBJUFBST1RPX1RDUCwgXFx1MDAyNnNvY2spO1xcbi0tXFxubmV0L2NlcGgvbWVzc2VuZ2VyLmM9MTcwMD12b2lkIGNlcGhfbWVzc2VuZ2VyX2Zpbmkoc3RydWN0IGNlcGhfbWVzc2VuZ2VyICptc2dyKVxcbm5ldC9jZXBoL21lc3Nlbmdlci5jLTE3MDEte1xcbm5ldC9jZXBoL21lc3Nlbmdlci5jOjE3MDI6XFx0cHV0X25ldChyZWFkX3BuZXQoXFx1MDAyNm1zZ3ItXFx1MDAzZW5ldCkpO1xcbm5ldC9jZXBoL21lc3Nlbmdlci5jLTE3MDMtfVxcbi0tXFxubmV0L2RldmxpbmsvY29yZS5jPTI4NT1zdHJ1Y3QgbmV0ICpkZXZsaW5rX25ldChjb25zdCBzdHJ1Y3QgZGV2bGluayAqZGV2bGluaylcXG5uZXQvZGV2bGluay9jb3JlLmMtMjg2LXtcXG5uZXQvZGV2bGluay9jb3JlLmM6Mjg3OlxcdHJldHVybiByZWFkX3BuZXQoXFx1MDAyNmRldmxpbmstXFx1MDAzZV9uZXQpO1xcbm5ldC9kZXZsaW5rL2NvcmUuYy0yODgtfVxcbi0tXFxubmV0L2RldmxpbmsvbmV0bGluay5jPTE0Mz1pbnQgZGV2bGlua19ubF9wdXRfbmVzdGVkX2hhbmRsZShzdHJ1Y3Qgc2tfYnVmZiAqbXNnLCBzdHJ1Y3QgbmV0ICpuZXQsXFxuLS1cXG5uZXQvZGV2bGluay9uZXRsaW5rLmMtMTU1LVxcdHJjdV9yZWFkX2xvY2soKTtcXG5uZXQvZGV2bGluay9uZXRsaW5rLmM6MTU2OlxcdGRldmxfbmV0ID0gcmVhZF9wbmV0X3JjdShcXHUwMDI2ZGV2bGluay1cXHUwMDNlX25ldCk7XFxubmV0L2RldmxpbmsvbmV0bGluay5jLTE1Ny1cXHRpZiAoIW5ldF9lcShuZXQsIGRldmxfbmV0KSkge1xcbi0tXFxubmV0L2lwdjQvaW5ldF9jb25uZWN0aW9uX3NvY2suYz03NTg9c3RydWN0IGRzdF9lbnRyeSAqaW5ldF9jc2tfcm91dGVfcmVxKGNvbnN0IHN0cnVjdCBzb2NrICpzayxcXG4tLVxcbm5ldC9pcHY0L2luZXRfY29ubmVjdGlvbl9zb2NrLmMtNzYyLVxcdGNvbnN0IHN0cnVjdCBpbmV0X3JlcXVlc3Rfc29jayAqaXJlcSA9IGluZXRfcnNrKHJlcSk7XFxubmV0L2lwdjQvaW5ldF9jb25uZWN0aW9uX3NvY2suYzo3NjM6XFx0c3RydWN0IG5ldCAqbmV0ID0gcmVhZF9wbmV0KFxcdTAwMjZpcmVxLVxcdTAwM2VpcmVxX25ldCk7XFxubmV0L2lwdjQvaW5ldF9jb25uZWN0aW9uX3NvY2suYy03NjQtXFx0c3RydWN0IGlwX29wdGlvbnNfcmN1ICpvcHQ7XFxuLS1cXG5uZXQvaXB2NC9pbmV0X2Nvbm5lY3Rpb25fc29jay5jPTc5Mz1zdHJ1Y3QgZHN0X2VudHJ5ICppbmV0X2Nza19yb3V0ZV9jaGlsZF9zb2NrKGNvbnN0IHN0cnVjdCBzb2NrICpzayxcXG4tLVxcbm5ldC9pcHY0L2luZXRfY29ubmVjdGlvbl9zb2NrLmMtNzk3LVxcdGNvbnN0IHN0cnVjdCBpbmV0X3JlcXVlc3Rfc29jayAqaXJlcSA9IGluZXRfcnNrKHJlcSk7XFxubmV0L2lwdjQvaW5ldF9jb25uZWN0aW9uX3NvY2suYzo3OTg6XFx0c3RydWN0IG5ldCAqbmV0ID0gcmVhZF9wbmV0KFxcdTAwMjZpcmVxLVxcdTAwM2VpcmVxX25ldCk7XFxubmV0L2lwdjQvaW5ldF9jb25uZWN0aW9uX3NvY2suYy03OTktXFx0c3RydWN0IGluZXRfc29jayAqbmV3aW5ldCA9IGluZXRfc2sobmV3c2spO1xcbi0tXFxubmV0L2lwdjQvaXBtci5jPTQ0Mj1zdGF0aWMgdm9pZCBpcG1yX2ZyZWVfdGFibGUoc3RydWN0IG1yX3RhYmxlICptcnQsIHN0cnVjdCBsaXN0X2hlYWQgKmRldl9raWxsX2xpc3QpXFxubmV0L2lwdjQvaXBtci5jLTQ0My17XFxubmV0L2lwdjQvaXBtci5jOjQ0NDpcXHRzdHJ1Y3QgbmV0ICpuZXQgPSByZWFkX3BuZXQoXFx1MDAyNm1ydC1cXHUwMDNlbmV0KTtcXG5uZXQvaXB2NC9pcG1yLmMtNDQ1LVxcdExJU1RfSEVBRChpcG1yX2Rldl9raWxsX2xpc3QpO1xcbi0tXFxubmV0L2lwdjQvaXBtci5jPTY4Nz1zdGF0aWMgaW50IHZpZl9kZWxldGUoc3RydWN0IG1yX3RhYmxlICptcnQsIGludCB2aWZpLCBpbnQgbm90aWZ5LFxcbi0tXFxubmV0L2lwdjQvaXBtci5jLTY4OS17XFxubmV0L2lwdjQvaXBtci5jOjY5MDpcXHRzdHJ1Y3QgbmV0ICpuZXQgPSByZWFkX3BuZXQoXFx1MDAyNm1ydC1cXHUwMDNlbmV0KTtcXG5uZXQvaXB2NC9pcG1yLmMtNjkxLVxcdHN0cnVjdCB2aWZfZGV2aWNlICp2O1xcbi0tXFxubmV0L2lwdjQvaXBtci5jPTc1OD1zdGF0aWMgdm9pZCBpcG1yX2Rlc3Ryb3lfdW5yZXMoc3RydWN0IG1yX3RhYmxlICptcnQsIHN0cnVjdCBtZmNfY2FjaGUgKmMpXFxubmV0L2lwdjQvaXBtci5jLTc1OS17XFxubmV0L2lwdjQvaXBtci5jOjc2MDpcXHRzdHJ1Y3QgbmV0ICpuZXQgPSByZWFkX3BuZXQoXFx1MDAyNm1ydC1cXHUwMDNlbmV0KTtcXG5uZXQvaXB2NC9pcG1yLmMtNzYxLVxcdHN0cnVjdCBza19idWZmICpza2I7XFxuLS1cXG5uZXQvaXB2NC9pcG1yLmM9MTE0Mj1zdGF0aWMgaW50IGlwbXJfY2FjaGVfdW5yZXNvbHZlZChzdHJ1Y3QgbXJfdGFibGUgKm1ydCwgdmlmaV90IHZpZmksXFxuLS1cXG5uZXQvaXB2NC9pcG1yLmMtMTE0NC17XFxubmV0L2lwdjQvaXBtci5jOjExNDU6XFx0c3RydWN0IG5ldCAqbmV0ID0gcmVhZF9wbmV0KFxcdTAwMjZtcnQtXFx1MDAzZW5ldCk7XFxubmV0L2lwdjQvaXBtci5jLTExNDYtXFx0Y29uc3Qgc3RydWN0IGlwaGRyICppcGggPSBpcF9oZHIoc2tiKTtcXG4tLVxcbm5ldC9pcHY0L2lwbXIuYz0xMjIxPXN0YXRpYyBpbnQgaXBtcl9tZmNfZGVsZXRlKHN0cnVjdCBtcl90YWJsZSAqbXJ0LCBzdHJ1Y3QgbWZjY3RsICptZmMsIGludCBwYXJlbnQpXFxubmV0L2lwdjQvaXBtci5jLTEyMjIte1xcbm5ldC9pcHY0L2lwbXIuYzoxMjIzOlxcdHN0cnVjdCBuZXQgKm5ldCA9IHJlYWRfcG5ldChcXHUwMDI2bXJ0LVxcdTAwM2VuZXQpO1xcbm5ldC9pcHY0L2lwbXIuYy0xMjI0LVxcdHN0cnVjdCBtZmNfY2FjaGUgKmM7XFxuLS1cXG5uZXQvaXB2NC9pcG1yLmM9MTMyMj1zdGF0aWMgdm9pZCBtcm91dGVfY2xlYW5fdGFibGVzKHN0cnVjdCBtcl90YWJsZSAqbXJ0LCBpbnQgZmxhZ3MsXFxuLS1cXG5uZXQvaXB2NC9pcG1yLmMtMTMyNC17XFxubmV0L2lwdjQvaXBtci5jOjEzMjU6XFx0c3RydWN0IG5ldCAqbmV0ID0gcmVhZF9wbmV0KFxcdTAwMjZtcnQtXFx1MDAzZW5ldCk7XFxubmV0L2lwdjQvaXBtci5jLTEzMjYtXFx0c3RydWN0IG1mY19jYWNoZSAqY2FjaGU7XFxuLS1cXG5uZXQvaXB2NC9pcG1yLmM9MjU4Mj1zdGF0aWMgdm9pZCBtcm91dGVfbmV0bGlua19ldmVudChzdHJ1Y3QgbXJfdGFibGUgKm1ydCwgc3RydWN0IG1mY19jYWNoZSAqbWZjLFxcbi0tXFxubmV0L2lwdjQvaXBtci5jLTI1ODQte1xcbm5ldC9pcHY0L2lwbXIuYzoyNTg1OlxcdHN0cnVjdCBuZXQgKm5ldCA9IHJlYWRfcG5ldChcXHUwMDI2bXJ0LVxcdTAwM2VuZXQpO1xcbm5ldC9pcHY0L2lwbXIuYy0yNTg2LVxcdHN0cnVjdCBza19idWZmICpza2I7XFxuLS1cXG5uZXQvaXB2NC9pcG1yLmM9MjYyMj1zdGF0aWMgdm9pZCBpZ21wbXNnX25ldGxpbmtfZXZlbnQoY29uc3Qgc3RydWN0IG1yX3RhYmxlICptcnQsIHN0cnVjdCBza19idWZmICpwa3QpXFxubmV0L2lwdjQvaXBtci5jLTI2MjMte1xcbm5ldC9pcHY0L2lwbXIuYzoyNjI0OlxcdHN0cnVjdCBuZXQgKm5ldCA9IHJlYWRfcG5ldChcXHUwMDI2bXJ0LVxcdTAwM2VuZXQpO1xcbm5ldC9pcHY0L2lwbXIuYy0yNjI1LVxcdHN0cnVjdCBubG1zZ2hkciAqbmxoO1xcbi0tXFxubmV0L2lwdjQvdGNwX3RpbWVyLmM9NzUzPW5vaW5saW5lX2Zvcl90cmFjaW5nIHZvaWQgdGNwX3N5bl9hY2tfdGltZW91dChjb25zdCBzdHJ1Y3QgcmVxdWVzdF9zb2NrICpyZXEpXFxubmV0L2lwdjQvdGNwX3RpbWVyLmMtNzU0LXtcXG5uZXQvaXB2NC90Y3BfdGltZXIuYzo3NTU6XFx0c3RydWN0IG5ldCAqbmV0ID0gcmVhZF9wbmV0KFxcdTAwMjZpbmV0X3JzayhyZXEpLVxcdTAwM2VpcmVxX25ldCk7XFxubmV0L2lwdjQvdGNwX3RpbWVyLmMtNzU2LVxcbi0tXFxubmV0L2lwdjYvaXA2bXIuYz00MjA9c3RhdGljIHZvaWQgaXA2bXJfZnJlZV90YWJsZShzdHJ1Y3QgbXJfdGFibGUgKm1ydCxcXG4tLVxcbm5ldC9pcHY2L2lwNm1yLmMtNDIyLXtcXG5uZXQvaXB2Ni9pcDZtci5jOjQyMzpcXHRzdHJ1Y3QgbmV0ICpuZXQgPSByZWFkX3BuZXQoXFx1MDAyNm1ydC1cXHUwMDNlbmV0KTtcXG5uZXQvaXB2Ni9pcDZtci5jLTQyNC1cXHRMSVNUX0hFQUQoaXA2bXJfZGV2X2tpbGxfbGlzdCk7XFxuLS1cXG5uZXQvaXB2Ni9pcDZtci5jPTc0Mj1zdGF0aWMgaW50IG1pZjZfZGVsZXRlKHN0cnVjdCBtcl90YWJsZSAqbXJ0LCBpbnQgdmlmaSwgaW50IG5vdGlmeSxcXG4tLVxcbm5ldC9pcHY2L2lwNm1yLmMtNzU3LVxcbm5ldC9pcHY2L2lwNm1yLmM6NzU4OlxcdGNhbGxfaXA2bXJfdmlmX2VudHJ5X25vdGlmaWVycyhyZWFkX3BuZXQoXFx1MDAyNm1ydC1cXHUwMDNlbmV0KSxcXG5uZXQvaXB2Ni9pcDZtci5jLTc1OS1cXHRcXHRcXHRcXHQgICAgICAgRklCX0VWRU5UX1ZJRl9ERUwsIHYsIGRldixcXG4tLVxcbm5ldC9pcHY2L2lwNm1yLmM9ODE1PXN0YXRpYyB2b2lkIGlwNm1yX2Rlc3Ryb3lfdW5yZXMoc3RydWN0IG1yX3RhYmxlICptcnQsIHN0cnVjdCBtZmM2X2NhY2hlICpjKVxcbm5ldC9pcHY2L2lwNm1yLmMtODE2LXtcXG5uZXQvaXB2Ni9pcDZtci5jOjgxNzpcXHRzdHJ1Y3QgbmV0ICpuZXQgPSByZWFkX3BuZXQoXFx1MDAyNm1ydC1cXHUwMDNlbmV0KTtcXG5uZXQvaXB2Ni9pcDZtci5jLTgxOC1cXHRzdHJ1Y3Qgc2tfYnVmZiAqc2tiO1xcbi0tXFxubmV0L2lwdjYvaXA2bXIuYz0xMTgzPXN0YXRpYyBpbnQgaXA2bXJfY2FjaGVfdW5yZXNvbHZlZChzdHJ1Y3QgbXJfdGFibGUgKm1ydCwgbWlmaV90IG1pZmksXFxuLS1cXG5uZXQvaXB2Ni9pcDZtci5jLTExODUte1xcbm5ldC9pcHY2L2lwNm1yLmM6MTE4NjpcXHRzdHJ1Y3QgbmV0ICpuZXQgPSByZWFkX3BuZXQoXFx1MDAyNm1ydC1cXHUwMDNlbmV0KTtcXG5uZXQvaXB2Ni9pcDZtci5jLTExODctXFx0c3RydWN0IG1mYzZfY2FjaGUgKmMgPSBOVUxMO1xcbi0tXFxubmV0L2lwdjYvaXA2bXIuYz0xMjY3PXN0YXRpYyBpbnQgaXA2bXJfbWZjX2RlbGV0ZShzdHJ1Y3QgbXJfdGFibGUgKm1ydCwgc3RydWN0IG1mNmNjdGwgKm1mYyxcXG4tLVxcbm5ldC9pcHY2L2lwNm1yLmMtMTI4MC1cXG5uZXQvaXB2Ni9pcDZtci5jOjEyODE6XFx0Y2FsbF9pcDZtcl9tZmNfZW50cnlfbm90aWZpZXJzKHJlYWRfcG5ldChcXHUwMDI2bXJ0LVxcdTAwM2VuZXQpLFxcbm5ldC9pcHY2L2lwNm1yLmMtMTI4Mi1cXHRcXHRcXHRcXHQgICAgICAgRklCX0VWRU5UX0VOVFJZX0RFTCwgYywgbXJ0LVxcdTAwM2VpZCk7XFxuLS1cXG5uZXQvaXB2Ni9pcDZtci5jPTE1Njg9c3RhdGljIHZvaWQgbXJvdXRlX2NsZWFuX3RhYmxlcyhzdHJ1Y3QgbXJfdGFibGUgKm1ydCwgaW50IGZsYWdzLFxcbi0tXFxubmV0L2lwdjYvaXA2bXIuYy0xNTcwLXtcXG5uZXQvaXB2Ni9pcDZtci5jOjE1NzE6XFx0c3RydWN0IG5ldCAqbmV0ID0gcmVhZF9wbmV0KFxcdTAwMjZtcnQtXFx1MDAzZW5ldCk7XFxubmV0L2lwdjYvaXA2bXIuYy0xNTcyLVxcdHN0cnVjdCBtcl9tZmMgKmMsICp0bXA7XFxuLS1cXG5uZXQvaXB2Ni9pcDZtci5jPTI2MDc9c3RhdGljIHZvaWQgbXI2X25ldGxpbmtfZXZlbnQoc3RydWN0IG1yX3RhYmxlICptcnQsIHN0cnVjdCBtZmM2X2NhY2hlICptZmMsXFxuLS1cXG5uZXQvaXB2Ni9pcDZtci5jLTI2MDkte1xcbm5ldC9pcHY2L2lwNm1yLmM6MjYxMDpcXHRzdHJ1Y3QgbmV0ICpuZXQgPSByZWFkX3BuZXQoXFx1MDAyNm1ydC1cXHUwMDNlbmV0KTtcXG5uZXQvaXB2Ni9pcDZtci5jLTI2MTEtXFx0c3RydWN0IHNrX2J1ZmYgKnNrYjtcXG4tLVxcbm5ldC9pcHY2L2lwNm1yLmM9MjY0Nz1zdGF0aWMgdm9pZCBtcnQ2bXNnX25ldGxpbmtfZXZlbnQoY29uc3Qgc3RydWN0IG1yX3RhYmxlICptcnQsIHN0cnVjdCBza19idWZmICpwa3QpXFxubmV0L2lwdjYvaXA2bXIuYy0yNjQ4LXtcXG5uZXQvaXB2Ni9pcDZtci5jOjI2NDk6XFx0c3RydWN0IG5ldCAqbmV0ID0gcmVhZF9wbmV0KFxcdTAwMjZtcnQtXFx1MDAzZW5ldCk7XFxubmV0L2lwdjYvaXA2bXIuYy0yNjUwLVxcdHN0cnVjdCBubG1zZ2hkciAqbmxoO1xcbi0tXFxubmV0L21wdGNwL3N5bmNvb2tpZXMuYz03MT12b2lkIHN1YmZsb3dfaW5pdF9yZXFfY29va2llX2pvaW5fc2F2ZShjb25zdCBzdHJ1Y3QgbXB0Y3Bfc3ViZmxvd19yZXF1ZXN0X3NvY2sgKnN1YmZsb3dfcmVxLFxcbi0tXFxubmV0L21wdGNwL3N5bmNvb2tpZXMuYy03My17XFxubmV0L21wdGNwL3N5bmNvb2tpZXMuYzo3NDpcXHRzdHJ1Y3QgbmV0ICpuZXQgPSByZWFkX3BuZXQoXFx1MDAyNnN1YmZsb3dfcmVxLVxcdTAwM2Vzay5yZXEuaXJlcV9uZXQpO1xcbm5ldC9tcHRjcC9zeW5jb29raWVzLmMtNzUtXFx0dTMyIGkgPSBtcHRjcF9qb2luX2VudHJ5X2hhc2goc2tiLCBuZXQpO1xcbi0tXFxubmV0L21wdGNwL3N5bmNvb2tpZXMuYz05Mj1ib29sIG1wdGNwX3Rva2VuX2pvaW5fY29va2llX2luaXRfc3RhdGUoc3RydWN0IG1wdGNwX3N1YmZsb3dfcmVxdWVzdF9zb2NrICpzdWJmbG93X3JlcSxcXG4tLVxcbm5ldC9tcHRjcC9zeW5jb29raWVzLmMtOTQte1xcbm5ldC9tcHRjcC9zeW5jb29raWVzLmM6OTU6XFx0c3RydWN0IG5ldCAqbmV0ID0gcmVhZF9wbmV0KFxcdTAwMjZzdWJmbG93X3JlcS1cXHUwMDNlc2sucmVxLmlyZXFfbmV0KTtcXG5uZXQvbXB0Y3Avc3luY29va2llcy5jLTk2LVxcdHUzMiBpID0gbXB0Y3Bfam9pbl9lbnRyeV9oYXNoKHNrYiwgbmV0KTtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2Jyb2FkY2FzdC5jPTE5PWludCBuZl9jb25udHJhY2tfYnJvYWRjYXN0X2hlbHAoc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2Jyb2FkY2FzdC5jLTI0LVxcdGNvbnN0IHN0cnVjdCBuZl9jb25udHJhY2tfaGVscGVyICpoZWxwZXI7XFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfYnJvYWRjYXN0LmM6MjU6XFx0c3RydWN0IG5ldCAqbmV0ID0gcmVhZF9wbmV0KFxcdTAwMjZjdC1cXHUwMDNlY3RfbmV0KTtcXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19icm9hZGNhc3QuYy0yNi1cXHRzdHJ1Y3QgbmZfY29ubnRyYWNrX2V4cGVjdCAqZXhwO1xcbi0tXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfZXhwZWN0LmM9MTE3PW5mX2N0X2V4cF9lcXVhbChjb25zdCBzdHJ1Y3QgbmZfY29ubnRyYWNrX3R1cGxlICp0dXBsZSxcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2V4cGVjdC5jLTEyMi1cXHRyZXR1cm4gbmZfY3RfdHVwbGVfbWFza19jbXAodHVwbGUsIFxcdTAwMjZpLVxcdTAwM2V0dXBsZSwgXFx1MDAyNmktXFx1MDAzZW1hc2spIFxcdTAwMjZcXHUwMDI2XFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfZXhwZWN0LmM6MTIzOlxcdCAgICAgICBuZXRfZXEobmV0LCByZWFkX3BuZXQoXFx1MDAyNmktXFx1MDAzZW5ldCkpIFxcdTAwMjZcXHUwMDI2XFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfZXhwZWN0LmMtMTI0LVxcdCAgICAgICBuZl9jdF9leHBfem9uZV9lcXVhbF9hbnkoaSwgem9uZSk7XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19leHBlY3QuYz0zMjQ9dm9pZCBuZl9jdF9leHBlY3RfaW5pdChzdHJ1Y3QgbmZfY29ubnRyYWNrX2V4cGVjdCAqZXhwLCB1bnNpZ25lZCBpbnQgY2xhc3MsXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19leHBlY3QuYy0zMzEtXFx0c3RydWN0IG5mX2Nvbm4gKmN0ID0gZXhwLVxcdTAwM2VtYXN0ZXI7XFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfZXhwZWN0LmM6MzMyOlxcdHN0cnVjdCBuZXQgKm5ldCA9IHJlYWRfcG5ldChcXHUwMDI2Y3QtXFx1MDAzZWN0X25ldCk7XFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfZXhwZWN0LmMtMzMzLVxcdHN0cnVjdCBuZl9jb25udHJhY2tfZWNhY2hlICplY2FjaGU7XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19uZXRsaW5rLmM9MzUyMD1jdG5ldGxpbmtfYWxsb2NfZXhwZWN0KGNvbnN0IHN0cnVjdCBubGF0dHIgKiBjb25zdCBjZGFbXSwgc3RydWN0IG5mX2Nvbm4gKmN0LFxcbi0tXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfbmV0bGluay5jLTM1MjQte1xcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX25ldGxpbmsuYzozNTI1OlxcdHN0cnVjdCBuZXQgKm5ldCA9IHJlYWRfcG5ldChcXHUwMDI2Y3QtXFx1MDAzZWN0X25ldCk7XFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfbmV0bGluay5jLTM1MjYtXFx0c3RydWN0IG5mX2Nvbm50cmFja19oZWxwZXIgKmhlbHBlcjtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9vZmZsb2FkLmM9ODY4PXN0YXRpYyBpbnQgbmZfZmxvd19vZmZsb2FkX2FsbG9jKGNvbnN0IHN0cnVjdCBmbG93X29mZmxvYWRfd29yayAqb2ZmbG9hZCxcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9vZmZsb2FkLmMtODcwLXtcXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfb2ZmbG9hZC5jOjg3MTpcXHRzdHJ1Y3QgbmV0ICpuZXQgPSByZWFkX3BuZXQoXFx1MDAyNm9mZmxvYWQtXFx1MDAzZWZsb3d0YWJsZS1cXHUwMDNlbmV0KTtcXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfb2ZmbG9hZC5jLTg3Mi1cXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9vZmZsb2FkLmM9MTAzNz1zdGF0aWMgdm9pZCBmbG93X29mZmxvYWRfd29ya19oYW5kbGVyKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9vZmZsb2FkLmMtMTA0Mi1cXHRvZmZsb2FkID0gY29udGFpbmVyX29mKHdvcmssIHN0cnVjdCBmbG93X29mZmxvYWRfd29yaywgd29yayk7XFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX29mZmxvYWQuYzoxMDQzOlxcdG5ldCA9IHJlYWRfcG5ldChcXHUwMDI2b2ZmbG9hZC1cXHUwMDNlZmxvd3RhYmxlLVxcdTAwM2VuZXQpO1xcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9vZmZsb2FkLmMtMTA0NC1cXHRzd2l0Y2ggKG9mZmxvYWQtXFx1MDAzZWNtZCkge1xcbi0tXFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX29mZmxvYWQuYz0xMDY1PXN0YXRpYyB2b2lkIGZsb3dfb2ZmbG9hZF9xdWV1ZV93b3JrKHN0cnVjdCBmbG93X29mZmxvYWRfd29yayAqb2ZmbG9hZClcXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfb2ZmbG9hZC5jLTEwNjYte1xcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9vZmZsb2FkLmM6MTA2NzpcXHRzdHJ1Y3QgbmV0ICpuZXQgPSByZWFkX3BuZXQoXFx1MDAyNm9mZmxvYWQtXFx1MDAzZWZsb3d0YWJsZS1cXHUwMDNlbmV0KTtcXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfb2ZmbG9hZC5jLTEwNjgtXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYz02ODc0PXZvaWQgbmZ0X3NldF9lbGVtX2Rlc3Ryb3koY29uc3Qgc3RydWN0IG5mdF9zZXQgKnNldCxcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jLTY4NzgtXFx0c3RydWN0IG5mdF9jdHggY3R4ID0ge1xcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jOjY4Nzk6XFx0XFx0Lm5ldFxcdD0gcmVhZF9wbmV0KFxcdTAwMjZzZXQtXFx1MDAzZW5ldCksXFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMtNjg4MC1cXHRcXHQuZmFtaWx5XFx0PSBzZXQtXFx1MDAzZXRhYmxlLVxcdTAwM2VmYW1pbHksXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYz0xMDQ5MT1zdGF0aWMgdm9pZCBuZnRfdHJhbnNfZ2NfdHJhbnNfZnJlZShzdHJ1Y3QgcmN1X2hlYWQgKnJjdSlcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jLTEwNDk4LVxcdHRyYW5zID0gY29udGFpbmVyX29mKHJjdSwgc3RydWN0IG5mdF90cmFuc19nYywgcmN1KTtcXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYzoxMDQ5OTpcXHRjdHgubmV0XFx0PSByZWFkX3BuZXQoXFx1MDAyNnRyYW5zLVxcdTAwM2VzZXQtXFx1MDAzZW5ldCk7XFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMtMTA1MDAtXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYz0xMDU1OT1zdHJ1Y3QgbmZ0X3RyYW5zX2djICpuZnRfdHJhbnNfZ2NfYWxsb2Moc3RydWN0IG5mdF9zZXQgKnNldCxcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jLTEwNTYxLXtcXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYzoxMDU2MjpcXHRzdHJ1Y3QgbmV0ICpuZXQgPSByZWFkX3BuZXQoXFx1MDAyNnNldC1cXHUwMDNlbmV0KTtcXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYy0xMDU2My1cXHRzdHJ1Y3QgbmZ0X3RyYW5zX2djICp0cmFucztcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZ0X2R5bnNldC5jPTMwPXN0YXRpYyBpbnQgbmZ0X2R5bnNldF9leHByX3NldHVwKGNvbnN0IHN0cnVjdCBuZnRfZHluc2V0ICpwcml2LFxcbi0tXFxubmV0L25ldGZpbHRlci9uZnRfZHluc2V0LmMtMzQtXFx0c3RydWN0IG5mdF9jdHggY3R4ID0ge1xcbm5ldC9uZXRmaWx0ZXIvbmZ0X2R5bnNldC5jOjM1OlxcdFxcdC5uZXRcXHQ9IHJlYWRfcG5ldChcXHUwMDI2cHJpdi1cXHUwMDNlc2V0LVxcdTAwM2VuZXQpLFxcbm5ldC9uZXRmaWx0ZXIvbmZ0X2R5bnNldC5jLTM2LVxcdFxcdC5mYW1pbHlcXHQ9IHByaXYtXFx1MDAzZXNldC1cXHUwMDNldGFibGUtXFx1MDAzZWZhbWlseSxcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3NldF9oYXNoLmM9MzkzPXN0YXRpYyBib29sIG5mdF9yaGFzaF9leHByX25lZWRzX2djX3J1bihjb25zdCBzdHJ1Y3QgbmZ0X3NldCAqc2V0LFxcbi0tXFxubmV0L25ldGZpbHRlci9uZnRfc2V0X2hhc2guYy00MDEtXFx0XFx0aWYgKGV4cHItXFx1MDAzZW9wcy1cXHUwMDNlZ2MgXFx1MDAyNlxcdTAwMjZcXG5uZXQvbmV0ZmlsdGVyL25mdF9zZXRfaGFzaC5jOjQwMjpcXHRcXHQgICAgZXhwci1cXHUwMDNlb3BzLVxcdTAwM2VnYyhyZWFkX3BuZXQoXFx1MDAyNnNldC1cXHUwMDNlbmV0KSwgZXhwcikgXFx1MDAyNlxcdTAwMjZcXG5uZXQvbmV0ZmlsdGVyL25mdF9zZXRfaGFzaC5jLTQwMy1cXHRcXHQgICAgc2V0LVxcdTAwM2VmbGFncyBcXHUwMDI2IE5GVF9TRVRfRVZBTClcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3NldF9oYXNoLmM9NDEwPXN0YXRpYyB2b2lkIG5mdF9yaGFzaF9nYyhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mdF9zZXRfaGFzaC5jLTQyMi1cXHRzZXQgID0gbmZ0X3NldF9jb250YWluZXJfb2YocHJpdik7XFxubmV0L25ldGZpbHRlci9uZnRfc2V0X2hhc2guYzo0MjM6XFx0bmV0ICA9IHJlYWRfcG5ldChcXHUwMDI2c2V0LVxcdTAwM2VuZXQpO1xcbm5ldC9uZXRmaWx0ZXIvbmZ0X3NldF9oYXNoLmMtNDI0LVxcdG5mdF9uZXQgPSBuZnRfcGVybmV0KG5ldCk7XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mdF9zZXRfcGlwYXBvLmM9MTI0Mz1zdGF0aWMgYm9vbCBuZnRfcGlwYXBvX3RyYW5zYWN0aW9uX211dGV4X2hlbGQoY29uc3Qgc3RydWN0IG5mdF9zZXQgKnNldClcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3NldF9waXBhcG8uYy0xMjQ1LSNpZmRlZiBDT05GSUdfUFJPVkVfTE9DS0lOR1xcbm5ldC9uZXRmaWx0ZXIvbmZ0X3NldF9waXBhcG8uYzoxMjQ2OlxcdGNvbnN0IHN0cnVjdCBuZXQgKm5ldCA9IHJlYWRfcG5ldChcXHUwMDI2c2V0LVxcdTAwM2VuZXQpO1xcbm5ldC9uZXRmaWx0ZXIvbmZ0X3NldF9waXBhcG8uYy0xMjQ3LVxcbi0tXFxubmV0L25ldGZpbHRlci9uZnRfc2V0X3BpcGFwby5jPTE3MTA9c3RhdGljIHZvaWQgcGlwYXBvX2djX3NjYW4oc3RydWN0IG5mdF9zZXQgKnNldCwgc3RydWN0IG5mdF9waXBhcG9fbWF0Y2ggKm0pXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mdF9zZXRfcGlwYXBvLmMtMTcxMi1cXHRzdHJ1Y3QgbmZ0X3BpcGFwbyAqcHJpdiA9IG5mdF9zZXRfcHJpdihzZXQpO1xcbm5ldC9uZXRmaWx0ZXIvbmZ0X3NldF9waXBhcG8uYzoxNzEzOlxcdHN0cnVjdCBuZXQgKm5ldCA9IHJlYWRfcG5ldChcXHUwMDI2c2V0LVxcdTAwM2VuZXQpO1xcbm5ldC9uZXRmaWx0ZXIvbmZ0X3NldF9waXBhcG8uYy0xNzE0LVxcdHVuc2lnbmVkIGludCBydWxlc19mMCwgZmlyc3RfcnVsZSA9IDA7XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mdF9zZXRfcmJ0cmVlLmM9MjEyPW5mdF9yYnRyZWVfZ2NfZWxlbShjb25zdCBzdHJ1Y3QgbmZ0X3NldCAqX19zZXQsIHN0cnVjdCBuZnRfcmJ0cmVlICpwcml2LFxcbi0tXFxubmV0L25ldGZpbHRlci9uZnRfc2V0X3JidHJlZS5jLTIxNi1cXHRzdHJ1Y3QgcmJfbm9kZSAqcHJldiA9IHJiX3ByZXYoXFx1MDAyNnJiZS1cXHUwMDNlbm9kZSk7XFxubmV0L25ldGZpbHRlci9uZnRfc2V0X3JidHJlZS5jOjIxNzpcXHRzdHJ1Y3QgbmV0ICpuZXQgPSByZWFkX3BuZXQoXFx1MDAyNnNldC1cXHUwMDNlbmV0KTtcXG5uZXQvbmV0ZmlsdGVyL25mdF9zZXRfcmJ0cmVlLmMtMjE4LVxcdHN0cnVjdCBuZnRfcmJ0cmVlX2VsZW0gKnJiZV9wcmV2O1xcbi0tXFxubmV0L25ldGZpbHRlci9uZnRfc2V0X3JidHJlZS5jPTg5MT1zdGF0aWMgdm9pZCBuZnRfcmJ0cmVlX2djX3NjYW4oc3RydWN0IG5mdF9zZXQgKnNldClcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3NldF9yYnRyZWUuYy04OTQtXFx0c3RydWN0IG5mdF9yYnRyZWVfZWxlbSAqcmJlLCAqcmJlX2VuZCA9IE5VTEw7XFxubmV0L25ldGZpbHRlci9uZnRfc2V0X3JidHJlZS5jOjg5NTpcXHRzdHJ1Y3QgbmV0ICpuZXQgPSByZWFkX3BuZXQoXFx1MDAyNnNldC1cXHUwMDNlbmV0KTtcXG5uZXQvbmV0ZmlsdGVyL25mdF9zZXRfcmJ0cmVlLmMtODk2LVxcdHU2NCB0c3RhbXAgPSBuZnRfbmV0X3RzdGFtcChuZXQpO1xcbi0tXFxubmV0L25ldGZpbHRlci9uZnRfc2V0X3JidHJlZS5jPTEwMzg9c3RhdGljIHZvaWQgbmZ0X3JidHJlZV9jb21taXQoc3RydWN0IG5mdF9zZXQgKnNldClcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3NldF9yYnRyZWUuYy0xMTA3LVxcdG9sZCA9IHJjdV9yZXBsYWNlX3BvaW50ZXIocHJpdi1cXHUwMDNlYXJyYXksIHByaXYtXFx1MDAzZWFycmF5X25leHQsXFxubmV0L25ldGZpbHRlci9uZnRfc2V0X3JidHJlZS5jOjExMDg6XFx0XFx0XFx0XFx0ICBsb2NrZGVwX2lzX2hlbGQoXFx1MDAyNm5mdF9wZXJuZXQocmVhZF9wbmV0KFxcdTAwMjZzZXQtXFx1MDAzZW5ldCkpLVxcdTAwM2Vjb21taXRfbXV0ZXgpKTtcXG5uZXQvbmV0ZmlsdGVyL25mdF9zZXRfcmJ0cmVlLmMtMTEwOS1cXHRwcml2LVxcdTAwM2VhcnJheV9uZXh0ID0gTlVMTDtcXG4tLVxcbm5ldC9uZXRsaW5rL2FmX25ldGxpbmsuYz00NzU9c3RhdGljIGlubGluZSBpbnQgbmV0bGlua19jb21wYXJlKHN0cnVjdCByaGFzaHRhYmxlX2NvbXBhcmVfYXJnICphcmcsXFxuLS1cXG5uZXQvbmV0bGluay9hZl9uZXRsaW5rLmMtNDgxLVxcdHJldHVybiBubGstXFx1MDAzZXBvcnRpZCAhPSB4LVxcdTAwM2Vwb3J0aWQgfHxcXG5uZXQvbmV0bGluay9hZl9uZXRsaW5rLmM6NDgyOlxcdCAgICAgICAhbmV0X2VxKHNvY2tfbmV0KFxcdTAwMjZubGstXFx1MDAzZXNrKSwgcmVhZF9wbmV0KFxcdTAwMjZ4LVxcdTAwM2VwbmV0KSk7XFxubmV0L25ldGxpbmsvYWZfbmV0bGluay5jLTQ4My19XFxuLS1cXG5uZXQvb3BlbnZzd2l0Y2gvYWN0aW9ucy5jPTgyOT1zdGF0aWMgdm9pZCBkb19vdXRwdXQoc3RydWN0IGRhdGFwYXRoICpkcCwgc3RydWN0IHNrX2J1ZmYgKnNrYiwgaW50IG91dF9wb3J0LFxcbi0tXFxubmV0L29wZW52c3dpdGNoL2FjdGlvbnMuYy04NDYtXFx0XFx0fSBlbHNlIGlmIChtcnUgXFx1MDAzYz0gdnBvcnQtXFx1MDAzZWRldi1cXHUwMDNlbXR1KSB7XFxubmV0L29wZW52c3dpdGNoL2FjdGlvbnMuYzo4NDc6XFx0XFx0XFx0c3RydWN0IG5ldCAqbmV0ID0gcmVhZF9wbmV0KFxcdTAwMjZkcC1cXHUwMDNlbmV0KTtcXG5uZXQvb3BlbnZzd2l0Y2gvYWN0aW9ucy5jLTg0OC1cXG4tLVxcbm5ldC9vcGVudnN3aXRjaC9jb25udHJhY2suYz01NjE9c3RhdGljIGJvb2wgc2tiX25mY3RfY2FjaGVkKHN0cnVjdCBuZXQgKm5ldCxcXG4tLVxcbm5ldC9vcGVudnN3aXRjaC9jb25udHJhY2suYy01NzgtXFxubmV0L29wZW52c3dpdGNoL2Nvbm50cmFjay5jOjU3OTpcXHRpZiAoIW5ldF9lcShuZXQsIHJlYWRfcG5ldChcXHUwMDI2Y3QtXFx1MDAzZWN0X25ldCkpKVxcbm5ldC9vcGVudnN3aXRjaC9jb25udHJhY2suYy01ODAtXFx0XFx0cmV0dXJuIGZhbHNlO1xcbi0tXFxubmV0L29wZW52c3dpdGNoL2RhdGFwYXRoLmg9MjYxPXN0YXRpYyBpbmxpbmUgc3RydWN0IG5ldCAqb3ZzX2RwX2dldF9uZXQoY29uc3Qgc3RydWN0IGRhdGFwYXRoICpkcClcXG5uZXQvb3BlbnZzd2l0Y2gvZGF0YXBhdGguaC0yNjIte1xcbm5ldC9vcGVudnN3aXRjaC9kYXRhcGF0aC5oOjI2MzpcXHRyZXR1cm4gcmVhZF9wbmV0KFxcdTAwMjZkcC1cXHUwMDNlbmV0KTtcXG5uZXQvb3BlbnZzd2l0Y2gvZGF0YXBhdGguaC0yNjQtfVxcbi0tXFxubmV0L3BhY2tldC9hZl9wYWNrZXQuYz0xNDcxPXN0YXRpYyBpbnQgcGFja2V0X3Jjdl9mYW5vdXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldixcXG4tLVxcbm5ldC9wYWNrZXQvYWZfcGFja2V0LmMtMTQ3NS1cXHR1bnNpZ25lZCBpbnQgbnVtID0gUkVBRF9PTkNFKGYtXFx1MDAzZW51bV9tZW1iZXJzKTtcXG5uZXQvcGFja2V0L2FmX3BhY2tldC5jOjE0NzY6XFx0c3RydWN0IG5ldCAqbmV0ID0gcmVhZF9wbmV0KFxcdTAwMjZmLVxcdTAwM2VuZXQpO1xcbm5ldC9wYWNrZXQvYWZfcGFja2V0LmMtMTQ3Ny1cXHRzdHJ1Y3QgcGFja2V0X3NvY2sgKnBvO1xcbi0tXFxubmV0L3BhY2tldC9hZl9wYWNrZXQuYz0xNjYzPXN0YXRpYyBib29sIF9fZmFub3V0X2lkX2lzX2ZyZWUoc3RydWN0IHNvY2sgKnNrLCB1MTYgY2FuZGlkYXRlX2lkKVxcbi0tXFxubmV0L3BhY2tldC9hZl9wYWNrZXQuYy0xNjY4LVxcdFxcdGlmIChmLVxcdTAwM2VpZCA9PSBjYW5kaWRhdGVfaWQgXFx1MDAyNlxcdTAwMjZcXG5uZXQvcGFja2V0L2FmX3BhY2tldC5jOjE2Njk6XFx0XFx0ICAgIHJlYWRfcG5ldChcXHUwMDI2Zi1cXHUwMDNlbmV0KSA9PSBzb2NrX25ldChzaykpIHtcXG5uZXQvcGFja2V0L2FmX3BhY2tldC5jLTE2NzAtXFx0XFx0XFx0cmV0dXJuIGZhbHNlO1xcbi0tXFxubmV0L3BhY2tldC9hZl9wYWNrZXQuYz0xNjkzPXN0YXRpYyBpbnQgZmFub3V0X2FkZChzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBmYW5vdXRfYXJncyAqYXJncylcXG4tLVxcbm5ldC9wYWNrZXQvYWZfcGFja2V0LmMtMTc1My1cXHRcXHRpZiAoZi1cXHUwMDNlaWQgPT0gaWQgXFx1MDAyNlxcdTAwMjZcXG5uZXQvcGFja2V0L2FmX3BhY2tldC5jOjE3NTQ6XFx0XFx0ICAgIHJlYWRfcG5ldChcXHUwMDI2Zi1cXHUwMDNlbmV0KSA9PSBzb2NrX25ldChzaykpIHtcXG5uZXQvcGFja2V0L2FmX3BhY2tldC5jLTE3NTUtXFx0XFx0XFx0bWF0Y2ggPSBmO1xcbi0tXFxubmV0L3BhY2tldC9hZl9wYWNrZXQuYy0xNzg3LVxcdFxcdG1hdGNoLVxcdTAwM2Vwcm90X2hvb2suYWZfcGFja2V0X3ByaXYgPSBtYXRjaDtcXG5uZXQvcGFja2V0L2FmX3BhY2tldC5jOjE3ODg6XFx0XFx0bWF0Y2gtXFx1MDAzZXByb3RfaG9vay5hZl9wYWNrZXRfbmV0ID0gcmVhZF9wbmV0KFxcdTAwMjZtYXRjaC1cXHUwMDNlbmV0KTtcXG5uZXQvcGFja2V0L2FmX3BhY2tldC5jLTE3ODktXFx0XFx0bWF0Y2gtXFx1MDAzZXByb3RfaG9vay5pZF9tYXRjaCA9IG1hdGNoX2Zhbm91dF9ncm91cDtcXG4tLVxcbm5ldC9yZHMvbG9vcC5jPTIwMD1zdGF0aWMgdm9pZCByZHNfbG9vcF9raWxsX2Nvbm5zKHN0cnVjdCBuZXQgKm5ldClcXG4tLVxcbm5ldC9yZHMvbG9vcC5jLTIwNi1cXHRsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUobGMsIF9sYywgXFx1MDAyNmxvb3BfY29ubnMsIGxvb3Bfbm9kZSkgIHtcXG5uZXQvcmRzL2xvb3AuYzoyMDc6XFx0XFx0c3RydWN0IG5ldCAqY19uZXQgPSByZWFkX3BuZXQoXFx1MDAyNmxjLVxcdTAwM2Vjb25uLVxcdTAwM2VjX25ldCk7XFxubmV0L3Jkcy9sb29wLmMtMjA4LVxcbi0tXFxubmV0L3Jkcy9yZHMuaD0xNzg9c3RydWN0IG5ldCAqcmRzX2Nvbm5fbmV0KHN0cnVjdCByZHNfY29ubmVjdGlvbiAqY29ubilcXG5uZXQvcmRzL3Jkcy5oLTE3OS17XFxubmV0L3Jkcy9yZHMuaDoxODA6XFx0cmV0dXJuIHJlYWRfcG5ldChcXHUwMDI2Y29ubi1cXHUwMDNlY19uZXQpO1xcbm5ldC9yZHMvcmRzLmgtMTgxLX1cXG4tLVxcbm5ldC9yZHMvdGNwLmM9NjI5PXN0YXRpYyB2b2lkIHJkc190Y3Bfa2lsbF9zb2NrKHN0cnVjdCBuZXQgKm5ldClcXG4tLVxcbm5ldC9yZHMvdGNwLmMtNjQxLVxcdGxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZSh0YywgX3RjLCBcXHUwMDI2cmRzX3RjcF9jb25uX2xpc3QsIHRfdGNwX25vZGUpIHtcXG5uZXQvcmRzL3RjcC5jOjY0MjpcXHRcXHRzdHJ1Y3QgbmV0ICpjX25ldCA9IHJlYWRfcG5ldChcXHUwMDI2dGMtXFx1MDAzZXRfY3BhdGgtXFx1MDAzZWNwX2Nvbm4tXFx1MDAzZWNfbmV0KTtcXG5uZXQvcmRzL3RjcC5jLTY0My1cXG4tLVxcbm5ldC9yZHMvdGNwLmM9Njk0PXN0YXRpYyB2b2lkIHJkc190Y3Bfc3lzY3RsX3Jlc2V0KHN0cnVjdCBuZXQgKm5ldClcXG4tLVxcbm5ldC9yZHMvdGNwLmMtNjk5LVxcdGxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZSh0YywgX3RjLCBcXHUwMDI2cmRzX3RjcF9jb25uX2xpc3QsIHRfdGNwX25vZGUpIHtcXG5uZXQvcmRzL3RjcC5jOjcwMDpcXHRcXHRzdHJ1Y3QgbmV0ICpjX25ldCA9IHJlYWRfcG5ldChcXHUwMDI2dGMtXFx1MDAzZXRfY3BhdGgtXFx1MDAzZWNwX2Nvbm4tXFx1MDAzZWNfbmV0KTtcXG5uZXQvcmRzL3RjcC5jLTcwMS1cXG4tLVxcbm5ldC9zY2hlZC9hY3RfY3QuYz03NTI9c3RhdGljIGJvb2wgdGNmX2N0X3NrYl9uZmN0X2NhY2hlZChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBza19idWZmICpza2IsXFxuLS1cXG5uZXQvc2NoZWQvYWN0X2N0LmMtNzYwLVxcdFxcdHJldHVybiBmYWxzZTtcXG5uZXQvc2NoZWQvYWN0X2N0LmM6NzYxOlxcdGlmICghbmV0X2VxKG5ldCwgcmVhZF9wbmV0KFxcdTAwMjZjdC1cXHUwMDNlY3RfbmV0KSkpXFxubmV0L3NjaGVkL2FjdF9jdC5jLTc2Mi1cXHRcXHRnb3RvIGRyb3BfY3Q7XFxuLS1cXG5uZXQvc21jL3NtY19pYi5oPTcyPXN0YXRpYyBpbmxpbmUgc3RydWN0IG5ldCAqc21jX2liX25ldChzdHJ1Y3Qgc21jX2liX2RldmljZSAqc21jaWJkZXYpXFxuLS1cXG5uZXQvc21jL3NtY19pYi5oLTc0LVxcdGlmIChzbWNpYmRldiBcXHUwMDI2XFx1MDAyNiBzbWNpYmRldi1cXHUwMDNlaWJkZXYpXFxubmV0L3NtYy9zbWNfaWIuaDo3NTpcXHRcXHRyZXR1cm4gcmVhZF9wbmV0KFxcdTAwMjZzbWNpYmRldi1cXHUwMDNlaWJkZXYtXFx1MDAzZWNvcmVkZXYucmRtYV9uZXQpO1xcbm5ldC9zbWMvc21jX2liLmgtNzYtXFx0cmV0dXJuIE5VTEw7XFxuLS1cXG5uZXQveGZybS94ZnJtX3BvbGljeS5jPTE0ODY9c3RhdGljIHUzMiB4ZnJtX3BvbF9iaW5fa2V5KGNvbnN0IHZvaWQgKmRhdGEsIHUzMiBsZW4sIHUzMiBzZWVkKVxcbi0tXFxubmV0L3hmcm0veGZybV9wb2xpY3kuYy0xNDkwLVxcbm5ldC94ZnJtL3hmcm1fcG9saWN5LmM6MTQ5MTpcXHRyZXR1cm4gamhhc2hfM3dvcmRzKGEsIGstXFx1MDAzZWlmX2lkLCBuZXRfaGFzaF9taXgocmVhZF9wbmV0KFxcdTAwMjZrLVxcdTAwM2VuZXQpKSxcXG5uZXQveGZybS94ZnJtX3BvbGljeS5jLTE0OTItXFx0XFx0XFx0ICAgIHNlZWQpO1xcbi0tXFxubmV0L3hmcm0veGZybV9wb2xpY3kuYz0xNTAyPXN0YXRpYyBpbnQgeGZybV9wb2xfYmluX2NtcChzdHJ1Y3Qgcmhhc2h0YWJsZV9jb21wYXJlX2FyZyAqYXJnLFxcbi0tXFxubmV0L3hmcm0veGZybV9wb2xpY3kuYy0xNTA4LVxcbm5ldC94ZnJtL3hmcm1fcG9saWN5LmM6MTUwOTpcXHRpZiAoIW5ldF9lcShyZWFkX3BuZXQoXFx1MDAyNmItXFx1MDAzZWsubmV0KSwgcmVhZF9wbmV0KFxcdTAwMjZrZXktXFx1MDAzZW5ldCkpKVxcbm5ldC94ZnJtL3hmcm1fcG9saWN5LmMtMTUxMC1cXHRcXHRyZXR1cm4gLTE7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA5VDA4OjM5OjIxLjM3NDc5ODYzNFoiLCJTZXEiOjE5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo1NzgyMTExNzYwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgbmZfZmxvd190YWJsZV9vZmZsb2FkLmMgYW5kIHRjZl9jdF9mbG93X3RhYmxlX2dldCBDaGFuZ2VzKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBJJ20gbG9va2luZyBhdCB0aGVzZSBjaGFuZ2VzIGluIGBuZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfb2ZmbG9hZC5jYCBhbmQgYHRjZl9jdF9mbG93X3RhYmxlX2dldGAuIEkgc2VlIHRoYXQgYHJlYWRfcG5ldChcdTAwMjZvZmZsb2FkLVx1MDAzZWZsb3d0YWJsZS1cdTAwM2VuZXQpYCBpcyB1c2VkIGR1cmluZyBvZmZsb2FkIGFuZCBxdWV1aW5nIG9wZXJhdGlvbnMsIHdoaWNoIGlzIG15IHN0YXJ0aW5nIHBvaW50LiBUaGUgY3J1Y2lhbCBwYXJ0IGlzIHRoZSBjb2RlIG1vZGlmaWNhdGlvbiB3aXRoaW4gYHRjZl9jdF9mbG93X3RhYmxlX2dldGAsIHNwZWNpZmljYWxseSB0aGUgc2hpZnQgb2YgYHdyaXRlX3BuZXQoXHUwMDI2Y3RfZnQtXHUwMDNlbmZfZnQubmV0LCBuZXQpYCBiZWZvcmUgdGhlIGNhbGwgdG8gYG5mX2Zsb3dfdGFibGVfaW5pdChcdTAwMjZjdF9mdC1cdTAwM2VuZl9mdClgLlxuXG5NeSBpbW1lZGlhdGUgcXVlc3Rpb24gaXMgKndoeSogdGhpcyByZW9yZGVyaW5nPyBXaGF0IGRvZXMgYG5mX2Zsb3dfdGFibGVfaW5pdGAgYWN0dWFsbHkgKmRvKj8gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaWYgdGhpcyBoYXMgYW55IGltcGxpY2F0aW9ucy4gRG9lcyBgbmZfZmxvd190YWJsZV9pbml0YCBvciBhbnkgZnVuY3Rpb24gaXQgY2FsbHMgdXRpbGl6ZSBgZmxvd3RhYmxlLVx1MDAzZW5ldGA/IElmIHNvLCBjb3VsZCB3ZSBoYXZlIGEgcG90ZW50aWFsIHJhY2UgY29uZGl0aW9uIGVtZXJnaW5nPyBJJ20gdGhpbmtpbmcgYWJvdXQgY29uY3VycmVudCB3b3JrOiB0aGUgZmxvdyBvZmZsb2FkIGl0c2VsZiwgZ2FyYmFnZSBjb2xsZWN0aW9uLCBhbmQgbmV0IG5hbWVzcGFjZSBkZXN0cnVjdGlvbi4gSSBuZWVkIHRvIG1ha2Ugc3VyZSB0aGlzIHJlb3JkZXJpbmcgZG9lc24ndCBpbnRyb2R1Y2UgYW55IHN1YnRsZSBidWdzLlxuXG5OZXh0IHN0ZXA6IEkgd2lsbCBjaGVjayB3aGV0aGVyIGBuZl9mbG93X3RhYmxlX2luaXRgIGl0c2VsZiBjYWxscyB0aGUgYGZsb3d0YWJsZS1cdTAwM2V0eXBlLVx1MDAzZWluaXRgIGZ1bmN0aW9uLCBvciBwb3RlbnRpYWxseSBvdGhlciBmdW5jdGlvbnMgdGhhdCBtaWdodCBpbnRlcmFjdCB3aXRoIGBuZXRgIG9yIG90aGVyIHNoYXJlZCByZXNvdXJjZXMuIEkgd2FudCB0byBzZWUgdGhlIGluaXRpYWxpemF0aW9uIG9yZGVyIGFuZCB3aGF0IGdldHMgaW5pdGlhbGl6ZWQgYnkgdGhlIHR5cGUgb3Igc29tZXRoaW5nLlxuXG5GaW5hbGx5LCBJIHdhbnQgdG8gY29uZmlybSB3aGF0IGNvbmZpZyBvcHRpb25zIGFyZSBhcHBsaWNhYmxlIHRvIHRoaXMgc2VjdGlvbiBieSBjaGVja2luZyBgbmV0L3NjaGVkL0tjb25maWdgIHRvIHNlZSB0aGUgY29uZmlndXJhdGlvbiBvcHRpb25zIG9mIGBhY3RfY3QuY2AuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE4MTE4LCJPdXRwdXRUb2tlbnMiOjI3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDIzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA5VDA4OjM5OjI3LjE1NjkxMjc5NFoiLCJTZXEiOjIwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTExMzYzNDc4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImFjdF9jdFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvc2NoZWQvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9zY2hlZC9LY29uZmlnPTg2NT1jb25maWcgTkVUX0FDVF9DVElORk9cXG4tLVxcbm5ldC9zY2hlZC9LY29uZmlnLTg3OS1cXHQgIFRvIGNvbXBpbGUgdGhpcyBjb2RlIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGVcXG5uZXQvc2NoZWQvS2NvbmZpZzo4ODA6XFx0ICBtb2R1bGUgd2lsbCBiZSBjYWxsZWQgYWN0X2N0aW5mby5cXG5uZXQvc2NoZWQvS2NvbmZpZy04ODEtXFxuLS1cXG5uZXQvc2NoZWQvS2NvbmZpZz05MTc9Y29uZmlnIE5FVF9BQ1RfQ1RcXG4tLVxcbm5ldC9zY2hlZC9LY29uZmlnLTkyNy1cXHQgIFRvIGNvbXBpbGUgdGhpcyBjb2RlIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGVcXG5uZXQvc2NoZWQvS2NvbmZpZzo5Mjg6XFx0ICBtb2R1bGUgd2lsbCBiZSBjYWxsZWQgYWN0X2N0Llxcbm5ldC9zY2hlZC9LY29uZmlnLTkyOS1cXG4tLVxcbm5ldC9zY2hlZC9NYWtlZmlsZT0yND1vYmotJChDT05GSUdfTkVUX0FDVF9DT05OTUFSSylcXHQrPSBhY3RfY29ubm1hcmsub1xcbm5ldC9zY2hlZC9NYWtlZmlsZToyNTpvYmotJChDT05GSUdfTkVUX0FDVF9DVElORk8pXFx0Kz0gYWN0X2N0aW5mby5vXFxubmV0L3NjaGVkL01ha2VmaWxlLTI2LW9iai0kKENPTkZJR19ORVRfQUNUX1NLQk1PRClcXHQrPSBhY3Rfc2tibW9kLm9cXG4tLVxcbm5ldC9zY2hlZC9NYWtlZmlsZT0zMT1vYmotJChDT05GSUdfTkVUX0FDVF9UVU5ORUxfS0VZKSs9IGFjdF90dW5uZWxfa2V5Lm9cXG5uZXQvc2NoZWQvTWFrZWZpbGU6MzI6b2JqLSQoQ09ORklHX05FVF9BQ1RfQ1QpXFx0Kz0gYWN0X2N0Lm9cXG5uZXQvc2NoZWQvTWFrZWZpbGUtMzMtb2JqLSQoQ09ORklHX05FVF9BQ1RfR0FURSlcXHQrPSBhY3RfZ2F0ZS5vXFxuLS1cXG5uZXQvc2NoZWQvYWN0X2N0LmMtMi0vKiAtXFxubmV0L3NjaGVkL2FjdF9jdC5jOjM6ICogbmV0L3NjaGVkL2FjdF9jdC5jICBDb25uZWN0aW9uIFRyYWNraW5nIGFjdGlvblxcbm5ldC9zY2hlZC9hY3RfY3QuYy00LSAqXFxuLS1cXG5uZXQvc2NoZWQvYWN0X2N0LmMtMzctI2luY2x1ZGUgXFx1MDAzY25ldC9uZXRmaWx0ZXIvaXB2Ni9uZl9kZWZyYWdfaXB2Ni5oXFx1MDAzZVxcbm5ldC9zY2hlZC9hY3RfY3QuYzozODojaW5jbHVkZSBcXHUwMDNjbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfYWN0X2N0LmhcXHUwMDNlXFxubmV0L3NjaGVkL2FjdF9jdC5jLTM5LSNpbmNsdWRlIFxcdTAwM2NuZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19zZXFhZGouaFxcdTAwM2VcXG4tLVxcbm5ldC9zY2hlZC9hY3RfY3QuYy00MS1cXG5uZXQvc2NoZWQvYWN0X2N0LmM6NDI6c3RhdGljIHN0cnVjdCB3b3JrcXVldWVfc3RydWN0ICphY3RfY3Rfd3E7XFxubmV0L3NjaGVkL2FjdF9jdC5jLTQzLXN0YXRpYyBzdHJ1Y3Qgcmhhc2h0YWJsZSB6b25lc19odDtcXG4tLVxcbm5ldC9zY2hlZC9hY3RfY3QuYz0xNzg9c3RhdGljIHZvaWQgdGNmX2N0X2Zsb3dfdGFibGVfYWRkX2FjdGlvbl9tZXRhKHN0cnVjdCBuZl9jb25uICpjdCxcXG4tLVxcbm5ldC9zY2hlZC9hY3RfY3QuYy0xODQtXFx0c3RydWN0IGZsb3dfYWN0aW9uX2VudHJ5ICplbnRyeTtcXG5uZXQvc2NoZWQvYWN0X2N0LmM6MTg1OlxcdHUzMiAqYWN0X2N0X2xhYmVscztcXG5uZXQvc2NoZWQvYWN0X2N0LmMtMTg2LVxcbi0tXFxubmV0L3NjaGVkL2FjdF9jdC5jLTE5NS1cXG5uZXQvc2NoZWQvYWN0X2N0LmM6MTk2OlxcdGFjdF9jdF9sYWJlbHMgPSBlbnRyeS1cXHUwMDNlY3RfbWV0YWRhdGEubGFiZWxzO1xcbm5ldC9zY2hlZC9hY3RfY3QuYy0xOTctXFx0Y3RfbGFiZWxzID0gbmZfY3RfbGFiZWxzX2ZpbmQoY3QpO1xcbm5ldC9zY2hlZC9hY3RfY3QuYy0xOTgtXFx0aWYgKGN0X2xhYmVscylcXG5uZXQvc2NoZWQvYWN0X2N0LmM6MTk5OlxcdFxcdG1lbWNweShhY3RfY3RfbGFiZWxzLCBjdF9sYWJlbHMtXFx1MDAzZWJpdHMsIE5GX0NUX0xBQkVMU19NQVhfU0laRSk7XFxubmV0L3NjaGVkL2FjdF9jdC5jLTIwMC1cXHRlbHNlXFxubmV0L3NjaGVkL2FjdF9jdC5jOjIwMTpcXHRcXHRtZW1zZXQoYWN0X2N0X2xhYmVscywgMCwgTkZfQ1RfTEFCRUxTX01BWF9TSVpFKTtcXG5uZXQvc2NoZWQvYWN0X2N0LmMtMjAyLX1cXG4tLVxcbm5ldC9zY2hlZC9hY3RfY3QuYz0zOTc9c3RhdGljIHZvaWQgdGNmX2N0X2Zsb3dfdGFibGVfcHV0KHN0cnVjdCB0Y2ZfY3RfZmxvd190YWJsZSAqY3RfZnQpXFxuLS1cXG5uZXQvc2NoZWQvYWN0X2N0LmMtNDAxLVxcdFxcdElOSVRfUkNVX1dPUksoXFx1MDAyNmN0X2Z0LVxcdTAwM2Vyd29yaywgdGNmX2N0X2Zsb3dfdGFibGVfY2xlYW51cF93b3JrKTtcXG5uZXQvc2NoZWQvYWN0X2N0LmM6NDAyOlxcdFxcdHF1ZXVlX3JjdV93b3JrKGFjdF9jdF93cSwgXFx1MDAyNmN0X2Z0LVxcdTAwM2Vyd29yayk7XFxubmV0L3NjaGVkL2FjdF9jdC5jLTQwMy1cXHR9XFxuLS1cXG5uZXQvc2NoZWQvYWN0X2N0LmM9NDA2PXN0YXRpYyB2b2lkIHRjZl9jdF9mbG93X3RjX2lmaWR4KHN0cnVjdCBmbG93X29mZmxvYWQgKmVudHJ5LFxcbm5ldC9zY2hlZC9hY3RfY3QuYzo0MDc6XFx0XFx0XFx0XFx0IHN0cnVjdCBuZl9jb25uX2FjdF9jdF9leHQgKmFjdF9jdF9leHQsIHU4IGRpcilcXG5uZXQvc2NoZWQvYWN0X2N0LmMtNDA4LXtcXG5uZXQvc2NoZWQvYWN0X2N0LmMtNDA5LVxcdGVudHJ5LVxcdTAwM2V0dXBsZWhhc2hbZGlyXS50dXBsZS54bWl0X3R5cGUgPSBGTE9XX09GRkxPQURfWE1JVF9UQztcXG5uZXQvc2NoZWQvYWN0X2N0LmM6NDEwOlxcdGVudHJ5LVxcdTAwM2V0dXBsZWhhc2hbZGlyXS50dXBsZS50Yy5paWZpZHggPSBhY3RfY3RfZXh0LVxcdTAwM2VpZmluZGV4W2Rpcl07XFxubmV0L3NjaGVkL2FjdF9jdC5jLTQxMS19XFxuLS1cXG5uZXQvc2NoZWQvYWN0X2N0LmM9NDEzPXN0YXRpYyB2b2lkIHRjZl9jdF9mbG93X2N0X2V4dF9pZmlkeF91cGRhdGUoc3RydWN0IGZsb3dfb2ZmbG9hZCAqZW50cnkpXFxubmV0L3NjaGVkL2FjdF9jdC5jLTQxNC17XFxubmV0L3NjaGVkL2FjdF9jdC5jOjQxNTpcXHRzdHJ1Y3QgbmZfY29ubl9hY3RfY3RfZXh0ICphY3RfY3RfZXh0O1xcbm5ldC9zY2hlZC9hY3RfY3QuYy00MTYtXFxubmV0L3NjaGVkL2FjdF9jdC5jOjQxNzpcXHRhY3RfY3RfZXh0ID0gbmZfY29ubl9hY3RfY3RfZXh0X2ZpbmQoZW50cnktXFx1MDAzZWN0KTtcXG5uZXQvc2NoZWQvYWN0X2N0LmM6NDE4OlxcdGlmIChhY3RfY3RfZXh0KSB7XFxubmV0L3NjaGVkL2FjdF9jdC5jOjQxOTpcXHRcXHR0Y2ZfY3RfZmxvd190Y19pZmlkeChlbnRyeSwgYWN0X2N0X2V4dCwgRkxPV19PRkZMT0FEX0RJUl9PUklHSU5BTCk7XFxubmV0L3NjaGVkL2FjdF9jdC5jOjQyMDpcXHRcXHR0Y2ZfY3RfZmxvd190Y19pZmlkeChlbnRyeSwgYWN0X2N0X2V4dCwgRkxPV19PRkZMT0FEX0RJUl9SRVBMWSk7XFxubmV0L3NjaGVkL2FjdF9jdC5jLTQyMS1cXHR9XFxuLS1cXG5uZXQvc2NoZWQvYWN0X2N0LmM9NDI0PXN0YXRpYyB2b2lkIHRjZl9jdF9mbG93X3RhYmxlX2FkZChzdHJ1Y3QgdGNmX2N0X2Zsb3dfdGFibGUgKmN0X2Z0LFxcbi0tXFxubmV0L3NjaGVkL2FjdF9jdC5jLTQyNy17XFxubmV0L3NjaGVkL2FjdF9jdC5jOjQyODpcXHRzdHJ1Y3QgbmZfY29ubl9hY3RfY3RfZXh0ICphY3RfY3RfZXh0O1xcbm5ldC9zY2hlZC9hY3RfY3QuYy00MjktXFx0c3RydWN0IGZsb3dfb2ZmbG9hZCAqZW50cnk7XFxuLS1cXG5uZXQvc2NoZWQvYWN0X2N0LmMtNDQ3LVxcbm5ldC9zY2hlZC9hY3RfY3QuYzo0NDg6XFx0YWN0X2N0X2V4dCA9IG5mX2Nvbm5fYWN0X2N0X2V4dF9maW5kKGN0KTtcXG5uZXQvc2NoZWQvYWN0X2N0LmM6NDQ5OlxcdGlmIChhY3RfY3RfZXh0KSB7XFxubmV0L3NjaGVkL2FjdF9jdC5jOjQ1MDpcXHRcXHR0Y2ZfY3RfZmxvd190Y19pZmlkeChlbnRyeSwgYWN0X2N0X2V4dCwgRkxPV19PRkZMT0FEX0RJUl9PUklHSU5BTCk7XFxubmV0L3NjaGVkL2FjdF9jdC5jOjQ1MTpcXHRcXHR0Y2ZfY3RfZmxvd190Y19pZmlkeChlbnRyeSwgYWN0X2N0X2V4dCwgRkxPV19PRkZMT0FEX0RJUl9SRVBMWSk7XFxubmV0L3NjaGVkL2FjdF9jdC5jLTQ1Mi1cXHR9XFxuLS1cXG5uZXQvc2NoZWQvYWN0X2N0LmM9NjU4PXN0YXRpYyBib29sIHRjZl9jdF9mbG93X3RhYmxlX2xvb2t1cChzdHJ1Y3QgdGNmX2N0X3BhcmFtcyAqcCxcXG4tLVxcbm5ldC9zY2hlZC9hY3RfY3QuYy03MTgtXFxubmV0L3NjaGVkL2FjdF9jdC5jOjcxOTpcXHRuZl9jb25uX2FjdF9jdF9leHRfZmlsbChza2IsIGN0LCBjdGluZm8pO1xcbm5ldC9zY2hlZC9hY3RfY3QuYy03MjAtXFx0dGNmX2N0X2Zsb3dfY3RfZXh0X2lmaWR4X3VwZGF0ZShmbG93KTtcXG4tLVxcbm5ldC9zY2hlZC9hY3RfY3QuYz03NDA9c3RhdGljIHZvaWQgdGNmX2N0X2Zsb3dfdGFibGVzX3VuaW5pdCh2b2lkKVxcbi0tXFxubmV0L3NjaGVkL2FjdF9jdC5jLTc0NC1cXG5uZXQvc2NoZWQvYWN0X2N0LmM6NzQ1OnN0YXRpYyBzdHJ1Y3QgdGNfYWN0aW9uX29wcyBhY3RfY3Rfb3BzO1xcbm5ldC9zY2hlZC9hY3RfY3QuYy03NDYtXFxuLS1cXG5uZXQvc2NoZWQvYWN0X2N0LmM9OTc5PVRDX0lORElSRUNUX1NDT1BFIGludCB0Y2ZfY3RfYWN0KHN0cnVjdCBza19idWZmICpza2IsIGNvbnN0IHN0cnVjdCB0Y19hY3Rpb24gKmEsXFxuLS1cXG5uZXQvc2NoZWQvYWN0X2N0LmMtMTA3NS1cXHRuZl9jdF9kZWxpdmVyX2NhY2hlZF9ldmVudHMoY3QpO1xcbm5ldC9zY2hlZC9hY3RfY3QuYzoxMDc2OlxcdG5mX2Nvbm5fYWN0X2N0X2V4dF9maWxsKHNrYiwgY3QsIGN0aW5mbyk7XFxubmV0L3NjaGVkL2FjdF9jdC5jLTEwNzctXFxuLS1cXG5uZXQvc2NoZWQvYWN0X2N0LmMtMTEwMy1cXHRcXHRpZiAoIW5mX2N0X2lzX2NvbmZpcm1lZChjdCkpXFxubmV0L3NjaGVkL2FjdF9jdC5jOjExMDQ6XFx0XFx0XFx0bmZfY29ubl9hY3RfY3RfZXh0X2FkZChza2IsIGN0LCBjdGluZm8pO1xcbm5ldC9zY2hlZC9hY3RfY3QuYy0xMTA1LVxcbi0tXFxubmV0L3NjaGVkL2FjdF9jdC5jPTEzNzE9c3RhdGljIGludCB0Y2ZfY3RfaW5pdChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBubGF0dHIgKm5sYSxcXG4tLVxcbm5ldC9zY2hlZC9hY3RfY3QuYy0xMzc1LXtcXG5uZXQvc2NoZWQvYWN0X2N0LmM6MTM3NjpcXHRzdHJ1Y3QgdGNfYWN0aW9uX25ldCAqdG4gPSBuZXRfZ2VuZXJpYyhuZXQsIGFjdF9jdF9vcHMubmV0X2lkKTtcXG5uZXQvc2NoZWQvYWN0X2N0LmMtMTM3Ny1cXHRib29sIGJpbmQgPSBmbGFncyBcXHUwMDI2IFRDQV9BQ1RfRkxBR1NfQklORDtcXG4tLVxcbm5ldC9zY2hlZC9hY3RfY3QuYy0xNDEyLVxcdFxcdGVyciA9IHRjZl9pZHJfY3JlYXRlX2Zyb21fZmxhZ3ModG4sIGluZGV4LCBlc3QsIGEsXFxubmV0L3NjaGVkL2FjdF9jdC5jOjE0MTM6XFx0XFx0XFx0XFx0XFx0XFx0XFx1MDAyNmFjdF9jdF9vcHMsIGJpbmQsIGZsYWdzKTtcXG5uZXQvc2NoZWQvYWN0X2N0LmMtMTQxNC1cXHRcXHRpZiAoZXJyKSB7XFxuLS1cXG5uZXQvc2NoZWQvYWN0X2N0LmM9MTY2MD1zdGF0aWMgc2l6ZV90IHRjZl9jdF9nZXRfZmlsbF9zaXplKGNvbnN0IHN0cnVjdCB0Y19hY3Rpb24gKmFjdClcXG4tLVxcbm5ldC9zY2hlZC9hY3RfY3QuYy0xNzA0LVxcbm5ldC9zY2hlZC9hY3RfY3QuYzoxNzA1OnN0YXRpYyBzdHJ1Y3QgdGNfYWN0aW9uX29wcyBhY3RfY3Rfb3BzID0ge1xcbm5ldC9zY2hlZC9hY3RfY3QuYy0xNzA2LVxcdC5raW5kXFx0XFx0PVxcdFxcXCJjdFxcXCIsXFxuLS1cXG5uZXQvc2NoZWQvYWN0X2N0LmM9MTcyMD1zdGF0aWMgX19uZXRfaW5pdCBpbnQgY3RfaW5pdF9uZXQoc3RydWN0IG5ldCAqbmV0KVxcbm5ldC9zY2hlZC9hY3RfY3QuYy0xNzIxLXtcXG5uZXQvc2NoZWQvYWN0X2N0LmM6MTcyMjpcXHRzdHJ1Y3QgdGNfY3RfYWN0aW9uX25ldCAqdG4gPSBuZXRfZ2VuZXJpYyhuZXQsIGFjdF9jdF9vcHMubmV0X2lkKTtcXG5uZXQvc2NoZWQvYWN0X2N0LmMtMTcyMy1cXG5uZXQvc2NoZWQvYWN0X2N0LmM6MTcyNDpcXHRyZXR1cm4gdGNfYWN0aW9uX25ldF9pbml0KG5ldCwgXFx1MDAyNnRuLVxcdTAwM2V0biwgXFx1MDAyNmFjdF9jdF9vcHMpO1xcbm5ldC9zY2hlZC9hY3RfY3QuYy0xNzI1LX1cXG4tLVxcbm5ldC9zY2hlZC9hY3RfY3QuYz0xNzI3PXN0YXRpYyB2b2lkIF9fbmV0X2V4aXQgY3RfZXhpdF9uZXQoc3RydWN0IGxpc3RfaGVhZCAqbmV0X2xpc3QpXFxubmV0L3NjaGVkL2FjdF9jdC5jLTE3Mjgte1xcbm5ldC9zY2hlZC9hY3RfY3QuYzoxNzI5OlxcdHRjX2FjdGlvbl9uZXRfZXhpdChuZXRfbGlzdCwgYWN0X2N0X29wcy5uZXRfaWQpO1xcbm5ldC9zY2hlZC9hY3RfY3QuYy0xNzMwLX1cXG4tLVxcbm5ldC9zY2hlZC9hY3RfY3QuYz0xNzMyPXN0YXRpYyBzdHJ1Y3QgcGVybmV0X29wZXJhdGlvbnMgY3RfbmV0X29wcyA9IHtcXG4tLVxcbm5ldC9zY2hlZC9hY3RfY3QuYy0xNzM0LVxcdC5leGl0X2JhdGNoID0gY3RfZXhpdF9uZXQsXFxubmV0L3NjaGVkL2FjdF9jdC5jOjE3MzU6XFx0LmlkICAgPSBcXHUwMDI2YWN0X2N0X29wcy5uZXRfaWQsXFxubmV0L3NjaGVkL2FjdF9jdC5jLTE3MzYtXFx0LnNpemUgPSBzaXplb2Yoc3RydWN0IHRjX2N0X2FjdGlvbl9uZXQpLFxcbi0tXFxubmV0L3NjaGVkL2FjdF9jdC5jPTE3Mzk9c3RhdGljIGludCBfX2luaXQgY3RfaW5pdF9tb2R1bGUodm9pZClcXG4tLVxcbm5ldC9zY2hlZC9hY3RfY3QuYy0xNzQyLVxcbm5ldC9zY2hlZC9hY3RfY3QuYzoxNzQzOlxcdGFjdF9jdF93cSA9IGFsbG9jX29yZGVyZWRfd29ya3F1ZXVlKFxcXCJhY3RfY3Rfd29ya3F1ZXVlXFxcIiwgMCk7XFxubmV0L3NjaGVkL2FjdF9jdC5jOjE3NDQ6XFx0aWYgKCFhY3RfY3Rfd3EpXFxubmV0L3NjaGVkL2FjdF9jdC5jLTE3NDUtXFx0XFx0cmV0dXJuIC1FTk9NRU07XFxuLS1cXG5uZXQvc2NoZWQvYWN0X2N0LmMtMTc1MC1cXG5uZXQvc2NoZWQvYWN0X2N0LmM6MTc1MTpcXHRlcnIgPSB0Y2ZfcmVnaXN0ZXJfYWN0aW9uKFxcdTAwMjZhY3RfY3Rfb3BzLCBcXHUwMDI2Y3RfbmV0X29wcyk7XFxubmV0L3NjaGVkL2FjdF9jdC5jLTE3NTItXFx0aWYgKGVycilcXG4tLVxcbm5ldC9zY2hlZC9hY3RfY3QuYy0xNzYxLWVycl90YmxfaW5pdDpcXG5uZXQvc2NoZWQvYWN0X2N0LmM6MTc2MjpcXHRkZXN0cm95X3dvcmtxdWV1ZShhY3RfY3Rfd3EpO1xcbm5ldC9zY2hlZC9hY3RfY3QuYy0xNzYzLVxcdHJldHVybiBlcnI7XFxuLS1cXG5uZXQvc2NoZWQvYWN0X2N0LmM9MTc2Nj1zdGF0aWMgdm9pZCBfX2V4aXQgY3RfY2xlYW51cF9tb2R1bGUodm9pZClcXG4tLVxcbm5ldC9zY2hlZC9hY3RfY3QuYy0xNzY4LVxcdHN0YXRpY19icmFuY2hfZGVjKFxcdTAwMjZ0Y2ZfZnJhZ194bWl0X2NvdW50KTtcXG5uZXQvc2NoZWQvYWN0X2N0LmM6MTc2OTpcXHR0Y2ZfdW5yZWdpc3Rlcl9hY3Rpb24oXFx1MDAyNmFjdF9jdF9vcHMsIFxcdTAwMjZjdF9uZXRfb3BzKTtcXG5uZXQvc2NoZWQvYWN0X2N0LmMtMTc3MC1cXHR0Y2ZfY3RfZmxvd190YWJsZXNfdW5pbml0KCk7XFxubmV0L3NjaGVkL2FjdF9jdC5jOjE3NzE6XFx0ZGVzdHJveV93b3JrcXVldWUoYWN0X2N0X3dxKTtcXG5uZXQvc2NoZWQvYWN0X2N0LmMtMTc3Mi19XFxuLS1cXG5uZXQvc2NoZWQvYWN0X2N0aW5mby5jLTEtLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjArXFxubmV0L3NjaGVkL2FjdF9jdGluZm8uYzoyOi8qIG5ldC9zY2hlZC9hY3RfY3RpbmZvLmMgIG5ldGZpbHRlciBjdGluZm8gY29ubm1hcmsgYWN0aW9uc1xcbm5ldC9zY2hlZC9hY3RfY3RpbmZvLmMtMy0gKlxcbi0tXFxubmV0L3NjaGVkL2FjdF9jdGluZm8uYy0yOC1cXG5uZXQvc2NoZWQvYWN0X2N0aW5mby5jOjI5OnN0YXRpYyBzdHJ1Y3QgdGNfYWN0aW9uX29wcyBhY3RfY3RpbmZvX29wcztcXG5uZXQvc2NoZWQvYWN0X2N0aW5mby5jLTMwLVxcbi0tXFxubmV0L3NjaGVkL2FjdF9jdGluZm8uYz0xNTU9c3RhdGljIGludCB0Y2ZfY3RpbmZvX2luaXQoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgbmxhdHRyICpubGEsXFxuLS1cXG5uZXQvc2NoZWQvYWN0X2N0aW5mby5jLTE1OS17XFxubmV0L3NjaGVkL2FjdF9jdGluZm8uYzoxNjA6XFx0c3RydWN0IHRjX2FjdGlvbl9uZXQgKnRuID0gbmV0X2dlbmVyaWMobmV0LCBhY3RfY3RpbmZvX29wcy5uZXRfaWQpO1xcbm5ldC9zY2hlZC9hY3RfY3RpbmZvLmMtMTYxLVxcdGJvb2wgYmluZCA9IGZsYWdzIFxcdTAwMjYgVENBX0FDVF9GTEFHU19CSU5EO1xcbi0tXFxubmV0L3NjaGVkL2FjdF9jdGluZm8uYy0yMTUtXFx0XFx0cmV0ID0gdGNmX2lkcl9jcmVhdGVfZnJvbV9mbGFncyh0biwgaW5kZXgsIGVzdCwgYSxcXG5uZXQvc2NoZWQvYWN0X2N0aW5mby5jOjIxNjpcXHRcXHRcXHRcXHRcXHRcXHRcXHUwMDI2YWN0X2N0aW5mb19vcHMsIGJpbmQsIGZsYWdzKTtcXG5uZXQvc2NoZWQvYWN0X2N0aW5mby5jLTIxNy1cXHRcXHRpZiAocmV0KSB7XFxuLS1cXG5uZXQvc2NoZWQvYWN0X2N0aW5mby5jPTM1OT1zdGF0aWMgc2l6ZV90IHRjZl9jdGluZm9fZ2V0X2ZpbGxfc2l6ZShjb25zdCBzdHJ1Y3QgdGNfYWN0aW9uICphY3QpXFxuLS1cXG5uZXQvc2NoZWQvYWN0X2N0aW5mby5jLTM2OC1cXG5uZXQvc2NoZWQvYWN0X2N0aW5mby5jOjM2OTpzdGF0aWMgc3RydWN0IHRjX2FjdGlvbl9vcHMgYWN0X2N0aW5mb19vcHMgPSB7XFxubmV0L3NjaGVkL2FjdF9jdGluZm8uYy0zNzAtXFx0LmtpbmRcXHQ9IFxcXCJjdGluZm9cXFwiLFxcbi0tXFxubmV0L3NjaGVkL2FjdF9jdGluZm8uYz0zODI9c3RhdGljIF9fbmV0X2luaXQgaW50IGN0aW5mb19pbml0X25ldChzdHJ1Y3QgbmV0ICpuZXQpXFxubmV0L3NjaGVkL2FjdF9jdGluZm8uYy0zODMte1xcbm5ldC9zY2hlZC9hY3RfY3RpbmZvLmM6Mzg0OlxcdHN0cnVjdCB0Y19hY3Rpb25fbmV0ICp0biA9IG5ldF9nZW5lcmljKG5ldCwgYWN0X2N0aW5mb19vcHMubmV0X2lkKTtcXG5uZXQvc2NoZWQvYWN0X2N0aW5mby5jLTM4NS1cXG5uZXQvc2NoZWQvYWN0X2N0aW5mby5jOjM4NjpcXHRyZXR1cm4gdGNfYWN0aW9uX25ldF9pbml0KG5ldCwgdG4sIFxcdTAwMjZhY3RfY3RpbmZvX29wcyk7XFxubmV0L3NjaGVkL2FjdF9jdGluZm8uYy0zODctfVxcbi0tXFxubmV0L3NjaGVkL2FjdF9jdGluZm8uYz0zODk9c3RhdGljIHZvaWQgX19uZXRfZXhpdCBjdGluZm9fZXhpdF9uZXQoc3RydWN0IGxpc3RfaGVhZCAqbmV0X2xpc3QpXFxubmV0L3NjaGVkL2FjdF9jdGluZm8uYy0zOTAte1xcbm5ldC9zY2hlZC9hY3RfY3RpbmZvLmM6MzkxOlxcdHRjX2FjdGlvbl9uZXRfZXhpdChuZXRfbGlzdCwgYWN0X2N0aW5mb19vcHMubmV0X2lkKTtcXG5uZXQvc2NoZWQvYWN0X2N0aW5mby5jLTM5Mi19XFxuLS1cXG5uZXQvc2NoZWQvYWN0X2N0aW5mby5jPTM5ND1zdGF0aWMgc3RydWN0IHBlcm5ldF9vcGVyYXRpb25zIGN0aW5mb19uZXRfb3BzID0ge1xcbi0tXFxubmV0L3NjaGVkL2FjdF9jdGluZm8uYy0zOTYtXFx0LmV4aXRfYmF0Y2hcXHQ9IGN0aW5mb19leGl0X25ldCxcXG5uZXQvc2NoZWQvYWN0X2N0aW5mby5jOjM5NzpcXHQuaWRcXHRcXHQ9IFxcdTAwMjZhY3RfY3RpbmZvX29wcy5uZXRfaWQsXFxubmV0L3NjaGVkL2FjdF9jdGluZm8uYy0zOTgtXFx0LnNpemVcXHRcXHQ9IHNpemVvZihzdHJ1Y3QgdGNfYWN0aW9uX25ldCksXFxuLS1cXG5uZXQvc2NoZWQvYWN0X2N0aW5mby5jPTQwMT1zdGF0aWMgaW50IF9faW5pdCBjdGluZm9faW5pdF9tb2R1bGUodm9pZClcXG5uZXQvc2NoZWQvYWN0X2N0aW5mby5jLTQwMi17XFxubmV0L3NjaGVkL2FjdF9jdGluZm8uYzo0MDM6XFx0cmV0dXJuIHRjZl9yZWdpc3Rlcl9hY3Rpb24oXFx1MDAyNmFjdF9jdGluZm9fb3BzLCBcXHUwMDI2Y3RpbmZvX25ldF9vcHMpO1xcbm5ldC9zY2hlZC9hY3RfY3RpbmZvLmMtNDA0LX1cXG4tLVxcbm5ldC9zY2hlZC9hY3RfY3RpbmZvLmM9NDA2PXN0YXRpYyB2b2lkIF9fZXhpdCBjdGluZm9fY2xlYW51cF9tb2R1bGUodm9pZClcXG5uZXQvc2NoZWQvYWN0X2N0aW5mby5jLTQwNy17XFxubmV0L3NjaGVkL2FjdF9jdGluZm8uYzo0MDg6XFx0dGNmX3VucmVnaXN0ZXJfYWN0aW9uKFxcdTAwMjZhY3RfY3RpbmZvX29wcywgXFx1MDAyNmN0aW5mb19uZXRfb3BzKTtcXG5uZXQvc2NoZWQvYWN0X2N0aW5mby5jLTQwOS19XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA5VDA4OjM5OjI3LjI2ODI4NDg5MVoiLCJTZXEiOjIxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo0MDY0NDYxNDU2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGhvdWdodCBwcm9jZXNzLCBzdW1tYXJpemVkIGFzIGlmIEkgd2VyZSBjb25zaWRlcmluZyB0aGlzIGlzc3VlOlxuXG4qKkV4YW1pbmluZyB0aGUgS2VybmVsIENvbmZpZ3VyYXRpb24qKlxuXG5Pa2F5LCBzbyBJIG5lZWQgdG8gdHJhY2sgZG93biBob3cgYE5FVF9BQ1RfQ1RgIGlzIGNvbmZpZ3VyZWQuIE15IGluaXRpYWwgaW5zdGluY3QgaXMgdG8gZ28gc3RyYWlnaHQgdG8gdGhlIHNvdXJjZSwgdGhlIGBLY29uZmlnYCBmaWxlcy4gVGhhdCdzIHdoZXJlIGFsbCB0aGUga2VybmVsIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBhcmUgZGVmaW5lZC4gSSdsbCBuZWVkIHRvIG9wZW4gdGhvc2UgdXAgYW5kIHNlZSB3aGF0IEkgY2FuIGxlYXJuIGFib3V0IHRoaXMgcGFydGljdWxhciBvcHRpb24uIEknbSBsb29raW5nIGZvciBpdHMgZGVwZW5kZW5jaWVzLCBkZWZhdWx0IHZhbHVlcywgaGVscCB0ZXh0LCBhbmQgYW55dGhpbmcgZWxzZSB0aGF0IG1pZ2h0IGdpdmUgbWUgYSBjbHVlIGFib3V0IGl0cyByb2xlIGluIHRoZSBzeXN0ZW0gYW5kIGhvdyBpdCdzIGVuYWJsZWQuIEknbGwgYmUgbG9va2luZyBmb3Igd2hlcmUgaXQncyBkZWZpbmVkIGFuZCB3aGF0IGNvbnRleHQgbWFrZXMgaXQgYXZhaWxhYmxlIGZvciBzZWxlY3Rpb24uIEknbGwgd2FudCB0byBzZWUgaG93IGl0IG1pZ2h0IHJlbGF0ZSB0byBvdGhlciBuZXR3b3JraW5nIGZlYXR1cmVzLCBzZWN1cml0eSBjb25zaWRlcmF0aW9ucywgb3IgcGVyaGFwcyBldmVuIHNwZWNpZmljIGhhcmR3YXJlIGRlcGVuZGVuY2llcy4gSSdtIGV4cGVjdGluZyB0aGlzIHdpbGwgbGlrZWx5IGdpdmUgbWUgYSBkZWVwZXIgdW5kZXJzdGFuZGluZyB0aGFuIGp1c3QgbG9va2luZyBhdCB0aGUgc291cmNlIGNvZGUgdXNpbmcgZ3JlcC4gSXQncyB0aW1lIHRvIGRpdmUgaW50byB0aG9zZSBgS2NvbmZpZ2AgZmlsZXMgYW5kIHBpZWNlIHRoaXMgaW5mb3JtYXRpb24gdG9nZXRoZXIuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIzNDg2LCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDlUMDg6Mzk6MzEuMzMyNzQ5MzU4WiIsIlNlcSI6MjIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE2NDk2MSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvc2NoZWQvS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiA5MTAsXG4gIFwiTGluZUNvdW50XCI6IDMwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiA5MTA6XFx0XFx0ICBTYXkgWSBoZXJlIHRvIHNldC9yZWxlYXNlIGlwIHR1bm5lbCBtZXRhZGF0YS5cXG4gOTExOlxcdFxcbiA5MTI6XFx0XFx0ICBJZiB1bnN1cmUsIHNheSBOLlxcbiA5MTM6XFx0XFxuIDkxNDpcXHRcXHQgIFRvIGNvbXBpbGUgdGhpcyBjb2RlIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGVcXG4gOTE1OlxcdFxcdCAgbW9kdWxlIHdpbGwgYmUgY2FsbGVkIGFjdF90dW5uZWxfa2V5LlxcbiA5MTY6XFx0XFxuIDkxNzpcXHRjb25maWcgTkVUX0FDVF9DVFxcbiA5MTg6XFx0XFx0dHJpc3RhdGUgXFxcImNvbm5lY3Rpb24gdHJhY2tpbmcgdGMgYWN0aW9uXFxcIlxcbiA5MTk6XFx0XFx0ZGVwZW5kcyBvbiBORVRfQ0xTX0FDVCBcXHUwMDI2XFx1MDAyNiBORl9DT05OVFJBQ0sgXFx1MDAyNlxcdTAwMjYgKCFORl9OQVQgfHwgTkZfTkFUKSBcXHUwMDI2XFx1MDAyNiBORl9GTE9XX1RBQkxFXFxuIDkyMDpcXHRcXHRzZWxlY3QgTkZfQ09OTlRSQUNLX09WU1xcbiA5MjE6XFx0XFx0c2VsZWN0IE5GX05BVF9PVlMgaWYgTkZfTkFUXFxuIDkyMjpcXHRcXHRoZWxwXFxuIDkyMzpcXHRcXHQgIFNheSBZIGhlcmUgdG8gYWxsb3cgc2VuZGluZyB0aGUgcGFja2V0cyB0byBjb25udHJhY2sgbW9kdWxlLlxcbiA5MjQ6XFx0XFxuIDkyNTpcXHRcXHQgIElmIHVuc3VyZSwgc2F5IE4uXFxuIDkyNjpcXHRcXG4gOTI3OlxcdFxcdCAgVG8gY29tcGlsZSB0aGlzIGNvZGUgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZVxcbiA5Mjg6XFx0XFx0ICBtb2R1bGUgd2lsbCBiZSBjYWxsZWQgYWN0X2N0LlxcbiA5Mjk6XFx0XFxuIDkzMDpcXHRjb25maWcgTkVUX0FDVF9HQVRFXFxuIDkzMTpcXHRcXHR0cmlzdGF0ZSBcXFwiRnJhbWUgZ2F0ZSBlbnRyeSBsaXN0IGNvbnRyb2wgdGMgYWN0aW9uXFxcIlxcbiA5MzI6XFx0XFx0ZGVwZW5kcyBvbiBORVRfQ0xTX0FDVFxcbiA5MzM6XFx0XFx0aGVscFxcbiA5MzQ6XFx0XFx0ICBTYXkgWSBoZXJlIHRvIGFsbG93IHRvIGNvbnRyb2wgdGhlIGluZ3Jlc3MgZmxvdyB0byBiZSBwYXNzZWQgYXRcXG4gOTM1OlxcdFxcdCAgc3BlY2lmaWMgdGltZSBzbG90IGFuZCBiZSBkcm9wcGVkIGF0IG90aGVyIHNwZWNpZmljIHRpbWUgc2xvdCBieVxcbiA5MzY6XFx0XFx0ICB0aGUgZ2F0ZSBlbnRyeSBsaXN0LlxcbiA5Mzc6XFx0XFxuIDkzODpcXHRcXHQgIElmIHVuc3VyZSwgc2F5IE4uXFxuIDkzOTpcXHRcXHQgIFRvIGNvbXBpbGUgdGhpcyBjb2RlIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGVcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDlUMDg6Mzk6MzEuMzMyOTE2OTk4WiIsIlNlcSI6MjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjg3NzEzMjAzODQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIGEgS2VybmVsIFBhdGNoIFJlbGF0ZWQgdG8gQ29ubmVjdGlvbiBUcmFja2luZyBhbmQgRmxvdyBUYWJsZXMqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIEl0IGxvb2tzIGxpa2Ugd2UncmUgZGVhbGluZyB3aXRoIGEgZml4IHJlbGF0ZWQgdG8gdGhlIGBORVRfQUNUX0NUYCBmdW5jdGlvbmFsaXR5LCB3aGljaCBkZXBlbmRzIG9uIGNvbm5lY3Rpb24gdHJhY2tpbmcgKGBORVRfQ0xTX0FDVCBcdTAwMjZcdTAwMjYgTkZfQ09OTlRSQUNLYCkgYW5kIGZsb3cgdGFibGVzIChgTkZfRkxPV19UQUJMRWApLCBwb3RlbnRpYWxseSB3aXRoIE5BVCAoYE5GX05BVGApLiBUaGlzIGlzIGFsbCBhY2Nlc3NpYmxlIHZpYSBuZXRsaW5rLCBzcGVjaWZpY2FsbHkgdGhyb3VnaCB0aGUgYHJ0bmV0bGlua2AgaW50ZXJmYWNlIGFuZCB0aGUgYHRjIGFjdGlvbiBjdGAgY29tbWFuZC5cblxuVGhlIGNvcmUgaXNzdWUgc2VlbXMgdG8gcmV2b2x2ZSBhcm91bmQgdGhlIGB0Y2ZfY3RfZmxvd190YWJsZV9nZXRgIGZ1bmN0aW9uLiBUaGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCBkdXJpbmcgdGhlIGluaXRpYWxpemF0aW9uIG9mIHRoZSAnY3QnIHRyYWZmaWMgY29udHJvbCBhY3Rpb24sIHNwZWNpZmljYWxseSBmcm9tIGB0Y2ZfY3RfaW5pdGAuIFdoZW4gYSB1c2VyIHNldHMgdXAgYSBgdGMgYWN0aW9uIGN0YCB2aWEgbmV0bGluayB1c2luZyBgUlRNX05FV0FDVElPTmAgb3IgYFJUTV9ORVdURklMVEVSYCwgdGhlIGB0Y2ZfY3RfaW5pdGAgZnVuY3Rpb24gaXMgdHJpZ2dlcmVkLlxuXG5UaGUgcGF0Y2ggaXRzZWxmIGFkZHJlc3NlcyBhIHJhY2UgY29uZGl0aW9uIHdpdGhpbiBgdGNmX2N0X2Zsb3dfdGFibGVfZ2V0YC4gVGhlIG9yaWdpbmFsIGNvZGUgY2FsbGVkIGBuZl9mbG93X3RhYmxlX2luaXRgIHRvIGluaXRpYWxpemUgdGhlIGZsb3cgdGFibGUsIHdoaWNoLCBhbW9uZyBvdGhlciB0aGluZ3MsIGFkZHMgdGhlIGBmbG93dGFibGVgIHRvIHRoZSBnbG9iYWwgYGZsb3d0YWJsZXNgIGxpc3QgYW5kIHN0YXJ0cyB0aGUgZ2FyYmFnZSBjb2xsZWN0aW9uIHdvcmtlciBgbmZfZmxvd19vZmZsb2FkX3dvcmtfZ2NgLiBUaGUgcHJvYmxlbSB3YXMgdGhhdCBgZmxvd3RhYmxlLVx1MDAzZW5ldGAgd2FzIHdyaXR0ZW4gKmFmdGVyKiB0aGUgYG5mX2Zsb3dfdGFibGVfaW5pdGAgY2FsbC4gSWYgYG5mX2Zsb3dfdGFibGVfaW5pdGAgdHJpZ2dlcmVkIGFueSBkZWxheWVkIHdvcmsgb3Igb2ZmbG9hZCBvcGVyYXRpb25zLCBhIGByZWFkX3BuZXQoXHUwMDI2Zmxvd3RhYmxlLVx1MDAzZW5ldClgIGNvdWxkIHBvdGVudGlhbGx5IHJlYWQgTlVMTCBiZWNhdXNlIHRoZSBgbmV0YCBmaWVsZCB3YXNuJ3QgaW5pdGlhbGl6ZWQgeWV0LiBUaGlzIGNvdWxkIG9jY3VyIGR1cmluZyBuZXQgY2xlYW51cCBvciBpZiB0aGVyZSB3YXMgYSBnYXJiYWdlIGNvbGxlY3Rpb24gcmFjZSBjb25kaXRpb24uIFRoZSBmaXggaXMgdG8gZW5zdXJlIGBmbG93dGFibGUtXHUwMDNlbmV0YCBpcyBpbml0aWFsaXplZCAqYmVmb3JlKiBgbmZfZmxvd190YWJsZV9pbml0YCBnZXRzIGNhbGxlZC5cblxuTm93LCBhIGtleSBxdWVzdGlvbjogaXMgdGhpcyBjb2RlIHBhdGggcmVhY2hhYmxlIGluIHN0YW5kYXJkIHN5emthbGxlciBlbnZpcm9ubWVudHM/IFRoZSBhbnN3ZXIgaXMgeWVzLiBUaGUgYGFjdF9jdGAgYWN0aW9uIGlzIHRoZSBjb25uZWN0aW9uIHRyYWNraW5nIGFjdGlvbiB1c2VkIHdpdGggVEMgKHRyYWZmaWMgY29udHJvbCkgYW5kIGlzIGNvbmZpZ3VyZWQgdmlhIGBydG5ldGxpbmtgLCB1dGlsaXppbmcgY29tbWFuZHMgbGlrZSBgUlRNX05FV0FDVElPTmAsIGBSVE1fTkVXVEZJTFRFUmAsIG9yIHRocm91Z2ggdGhlIGB0Y2AgY29tbWFuZC1saW5lIHV0aWxpdHkuIEFuZCB0aGVzZSB3b3JrIG9uIGNvbW1vbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBRRU1VIGFuZCBHQ0UsIGFzIGxvbmcgYXMgbmV0d29ya2luZyBhbmQgbmV0bGluayBhcmUgZW5hYmxlZC5cblxuVGhpcyBjaGFuZ2UgZGVmaW5pdGVseSBtb2RpZmllcyBleGVjdXRhYmxlIGtlcm5lbCBjb2RlLiBUaGUgY29kZSBpbiBxdWVzdGlvbiBpcyBgdGNmX2N0X2Zsb3dfdGFibGVfZ2V0YCBpbiBgbmV0L3NjaGVkL2FjdF9jdC5jYC4gVGhpcyBtYWtlcyB0aGlzIGEgZ29vZCBjYW5kaWRhdGUgZm9yIGZ1enppbmcuXG5cbk15IGxpc3Qgb2YgYEZvY3VzU3ltYm9sc2Agd2lsbCBiZTpcbiogICBgdGNmX2N0X2Zsb3dfdGFibGVfZ2V0YCAodGhlIG1vZGlmaWVkIGZ1bmN0aW9uKS5cbiogICBgdGNmX2N0X2luaXRgICh0aGUgaW5pdGlhbGl6YXRpb24gZnVuY3Rpb24gdGhhdCBjYWxscyBgdGNmX2N0X2Zsb3dfdGFibGVfZ2V0YCkuXG4qICAgYHRjZl9jdF9hY3RgICh0aGUgcGFja2V0IHByb2Nlc3NpbmcgYWN0aW9uIHRoYXQgaGFuZGxlcyB0aGUgdHJhZmZpYykuXG4qICAgYG5mX2Zsb3dfdGFibGVfaW5pdGAgKHRoZSBmbG93IHRhYmxlIGluaXRpYWxpemF0aW9uIGZ1bmN0aW9uIGNhbGxlZCBieSBgdGNmX2N0X2Zsb3dfdGFibGVfZ2V0YCkuXG5cblJlZ2FyZGluZyBzeW1ib2wgdmlzaWJpbGl0eSwgYHRjZl9jdF9mbG93X3RhYmxlX2dldGAgYW5kIGB0Y2ZfY3RfaW5pdGAgYXJlIHN0YXRpYyB3aXRoaW4gYG5ldC9zY2hlZC9hY3RfY3QuY2AsIHRob3VnaCBgdGNmX2N0X2luaXRgIGNhbGxzIGB0Y2ZfY3RfZmxvd190YWJsZV9nZXRgLiBgdGNmX2N0X2FjdGAgaXMgbm9uLXN0YXRpYyBhbmQgdXNlcyBgVENfSU5ESVJFQ1RfU0NPUEVgLCBhbHNvIGluIGBuZXQvc2NoZWQvYWN0X2N0LmNgLiBgbmZfZmxvd190YWJsZV9pbml0YCBpcyBub24tc3RhdGljIGFuZCBpbiBgbmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2NvcmUuY2AuIEknbGwgd2FudCB0byBkb3VibGUtY2hlY2sgdGhlaXIgZXhhY3Qgc2lnbmF0dXJlcyBhbmQgcHJlc2VuY2UgaW4gdGhlaXIgcmVzcGVjdGl2ZSBzb3VyY2UgZmlsZXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI0MjA4LCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6ODI5LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDlUMDg6Mzk6NDAuMTA0MjQxMjAyWiIsIlNlcSI6MjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2NjM2NjEzNCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ0Y2ZfY3RfXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9zY2hlZC9hY3RfY3QuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvc2NoZWQvYWN0X2N0LmM9NDY9c3RydWN0IHpvbmVzX2h0X2tleSB7XFxuLS1cXG5uZXQvc2NoZWQvYWN0X2N0LmMtNTAtXFxubmV0L3NjaGVkL2FjdF9jdC5jOjUxOnN0cnVjdCB0Y2ZfY3RfZmxvd190YWJsZSB7XFxubmV0L3NjaGVkL2FjdF9jdC5jLTUyLVxcdHN0cnVjdCByaGFzaF9oZWFkIG5vZGU7IC8qIEluIHpvbmVzIHRhYmxlcyAqL1xcbi0tXFxubmV0L3NjaGVkL2FjdF9jdC5jPTYyPXN0YXRpYyBjb25zdCBzdHJ1Y3Qgcmhhc2h0YWJsZV9wYXJhbXMgem9uZXNfcGFyYW1zID0ge1xcbm5ldC9zY2hlZC9hY3RfY3QuYzo2MzpcXHQuaGVhZF9vZmZzZXQgPSBvZmZzZXRvZihzdHJ1Y3QgdGNmX2N0X2Zsb3dfdGFibGUsIG5vZGUpLFxcbm5ldC9zY2hlZC9hY3RfY3QuYzo2NDpcXHQua2V5X29mZnNldCA9IG9mZnNldG9mKHN0cnVjdCB0Y2ZfY3RfZmxvd190YWJsZSwga2V5KSxcXG5uZXQvc2NoZWQvYWN0X2N0LmMtNjUtXFx0LmtleV9sZW4gPSBvZmZzZXRvZmVuZChzdHJ1Y3Qgem9uZXNfaHRfa2V5LCB6b25lKSxcXG4tLVxcbm5ldC9zY2hlZC9hY3RfY3QuYz02OT1zdGF0aWMgc3RydWN0IGZsb3dfYWN0aW9uX2VudHJ5ICpcXG5uZXQvc2NoZWQvYWN0X2N0LmM6NzA6dGNmX2N0X2Zsb3dfdGFibGVfZmxvd19hY3Rpb25fZ2V0X25leHQoc3RydWN0IGZsb3dfYWN0aW9uICpmbG93X2FjdGlvbilcXG5uZXQvc2NoZWQvYWN0X2N0LmMtNzEte1xcbi0tXFxubmV0L3NjaGVkL2FjdF9jdC5jLTc2LVxcbm5ldC9zY2hlZC9hY3RfY3QuYzo3NzpzdGF0aWMgdm9pZCB0Y2ZfY3RfYWRkX21hbmdsZV9hY3Rpb24oc3RydWN0IGZsb3dfYWN0aW9uICphY3Rpb24sXFxubmV0L3NjaGVkL2FjdF9jdC5jLTc4LVxcdFxcdFxcdFxcdCAgICAgZW51bSBmbG93X2FjdGlvbl9tYW5nbGVfYmFzZSBodHlwZSxcXG4tLVxcbm5ldC9zY2hlZC9hY3RfY3QuYy04NC1cXG5uZXQvc2NoZWQvYWN0X2N0LmM6ODU6XFx0ZW50cnkgPSB0Y2ZfY3RfZmxvd190YWJsZV9mbG93X2FjdGlvbl9nZXRfbmV4dChhY3Rpb24pO1xcbm5ldC9zY2hlZC9hY3RfY3QuYy04Ni1cXHRlbnRyeS1cXHUwMDNlaWQgPSBGTE9XX0FDVElPTl9NQU5HTEU7XFxuLS1cXG5uZXQvc2NoZWQvYWN0X2N0LmM9OTc9c3RhdGljIHZvaWRcXG5uZXQvc2NoZWQvYWN0X2N0LmM6OTg6dGNmX2N0X2Zsb3dfdGFibGVfYWRkX2FjdGlvbl9uYXRfaXB2NChjb25zdCBzdHJ1Y3QgbmZfY29ubnRyYWNrX3R1cGxlICp0dXBsZSxcXG5uZXQvc2NoZWQvYWN0X2N0LmMtOTktXFx0XFx0XFx0XFx0ICAgICAgc3RydWN0IG5mX2Nvbm50cmFja190dXBsZSB0YXJnZXQsXFxuLS1cXG5uZXQvc2NoZWQvYWN0X2N0LmMtMTAyLVxcdGlmIChtZW1jbXAoXFx1MDAyNnRhcmdldC5zcmMudTMsIFxcdTAwMjZ0dXBsZS1cXHUwMDNlc3JjLnUzLCBzaXplb2YodGFyZ2V0LnNyYy51MykpKVxcbm5ldC9zY2hlZC9hY3RfY3QuYzoxMDM6XFx0XFx0dGNmX2N0X2FkZF9tYW5nbGVfYWN0aW9uKGFjdGlvbiwgRkxPV19BQ1RfTUFOR0xFX0hEUl9UWVBFX0lQNCxcXG5uZXQvc2NoZWQvYWN0X2N0LmMtMTA0LVxcdFxcdFxcdFxcdFxcdCBvZmZzZXRvZihzdHJ1Y3QgaXBoZHIsIHNhZGRyKSxcXG4tLVxcbm5ldC9zY2hlZC9hY3RfY3QuYy0xMDctXFx0aWYgKG1lbWNtcChcXHUwMDI2dGFyZ2V0LmRzdC51MywgXFx1MDAyNnR1cGxlLVxcdTAwM2Vkc3QudTMsIHNpemVvZih0YXJnZXQuZHN0LnUzKSkpXFxubmV0L3NjaGVkL2FjdF9jdC5jOjEwODpcXHRcXHR0Y2ZfY3RfYWRkX21hbmdsZV9hY3Rpb24oYWN0aW9uLCBGTE9XX0FDVF9NQU5HTEVfSERSX1RZUEVfSVA0LFxcbm5ldC9zY2hlZC9hY3RfY3QuYy0xMDktXFx0XFx0XFx0XFx0XFx0IG9mZnNldG9mKHN0cnVjdCBpcGhkciwgZGFkZHIpLFxcbi0tXFxubmV0L3NjaGVkL2FjdF9jdC5jPTExND1zdGF0aWMgdm9pZFxcbm5ldC9zY2hlZC9hY3RfY3QuYzoxMTU6dGNmX2N0X2FkZF9pcHY2X2FkZHJfbWFuZ2xlX2FjdGlvbihzdHJ1Y3QgZmxvd19hY3Rpb24gKmFjdGlvbixcXG5uZXQvc2NoZWQvYWN0X2N0LmMtMTE2LVxcdFxcdFxcdFxcdCAgIHVuaW9uIG5mX2luZXRfYWRkciAqYWRkcixcXG4tLVxcbm5ldC9zY2hlZC9hY3RfY3QuYy0xMjEtXFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIHNpemVvZihzdHJ1Y3QgaW42X2FkZHIpIC8gc2l6ZW9mKHUzMik7IGkrKylcXG5uZXQvc2NoZWQvYWN0X2N0LmM6MTIyOlxcdFxcdHRjZl9jdF9hZGRfbWFuZ2xlX2FjdGlvbihhY3Rpb24sIEZMT1dfQUNUX01BTkdMRV9IRFJfVFlQRV9JUDYsXFxubmV0L3NjaGVkL2FjdF9jdC5jLTEyMy1cXHRcXHRcXHRcXHRcXHQgaSAqIHNpemVvZih1MzIpICsgb2Zmc2V0LFxcbi0tXFxubmV0L3NjaGVkL2FjdF9jdC5jPTEyNz1zdGF0aWMgdm9pZFxcbm5ldC9zY2hlZC9hY3RfY3QuYzoxMjg6dGNmX2N0X2Zsb3dfdGFibGVfYWRkX2FjdGlvbl9uYXRfaXB2Nihjb25zdCBzdHJ1Y3QgbmZfY29ubnRyYWNrX3R1cGxlICp0dXBsZSxcXG5uZXQvc2NoZWQvYWN0X2N0LmMtMTI5LVxcdFxcdFxcdFxcdCAgICAgIHN0cnVjdCBuZl9jb25udHJhY2tfdHVwbGUgdGFyZ2V0LFxcbi0tXFxubmV0L3NjaGVkL2FjdF9jdC5jLTEzMi1cXHRpZiAobWVtY21wKFxcdTAwMjZ0YXJnZXQuc3JjLnUzLCBcXHUwMDI2dHVwbGUtXFx1MDAzZXNyYy51Mywgc2l6ZW9mKHRhcmdldC5zcmMudTMpKSlcXG5uZXQvc2NoZWQvYWN0X2N0LmM6MTMzOlxcdFxcdHRjZl9jdF9hZGRfaXB2Nl9hZGRyX21hbmdsZV9hY3Rpb24oYWN0aW9uLCBcXHUwMDI2dGFyZ2V0LnNyYy51MyxcXG5uZXQvc2NoZWQvYWN0X2N0LmMtMTM0LVxcdFxcdFxcdFxcdFxcdFxcdCAgIG9mZnNldG9mKHN0cnVjdCBpcHY2aGRyLFxcbi0tXFxubmV0L3NjaGVkL2FjdF9jdC5jLTEzNi1cXHRpZiAobWVtY21wKFxcdTAwMjZ0YXJnZXQuZHN0LnUzLCBcXHUwMDI2dHVwbGUtXFx1MDAzZWRzdC51Mywgc2l6ZW9mKHRhcmdldC5kc3QudTMpKSlcXG5uZXQvc2NoZWQvYWN0X2N0LmM6MTM3OlxcdFxcdHRjZl9jdF9hZGRfaXB2Nl9hZGRyX21hbmdsZV9hY3Rpb24oYWN0aW9uLCBcXHUwMDI2dGFyZ2V0LmRzdC51MyxcXG5uZXQvc2NoZWQvYWN0X2N0LmMtMTM4LVxcdFxcdFxcdFxcdFxcdFxcdCAgIG9mZnNldG9mKHN0cnVjdCBpcHY2aGRyLFxcbi0tXFxubmV0L3NjaGVkL2FjdF9jdC5jPTE0Mj1zdGF0aWMgdm9pZFxcbm5ldC9zY2hlZC9hY3RfY3QuYzoxNDM6dGNmX2N0X2Zsb3dfdGFibGVfYWRkX2FjdGlvbl9uYXRfdGNwKGNvbnN0IHN0cnVjdCBuZl9jb25udHJhY2tfdHVwbGUgKnR1cGxlLFxcbm5ldC9zY2hlZC9hY3RfY3QuYy0xNDQtXFx0XFx0XFx0XFx0ICAgICBzdHJ1Y3QgbmZfY29ubnRyYWNrX3R1cGxlIHRhcmdldCxcXG4tLVxcbm5ldC9zY2hlZC9hY3RfY3QuYy0xNTAtXFx0aWYgKHRhcmdldF9zcmMgIT0gdHVwbGUtXFx1MDAzZXNyYy51LnRjcC5wb3J0KVxcbm5ldC9zY2hlZC9hY3RfY3QuYzoxNTE6XFx0XFx0dGNmX2N0X2FkZF9tYW5nbGVfYWN0aW9uKGFjdGlvbiwgRkxPV19BQ1RfTUFOR0xFX0hEUl9UWVBFX1RDUCxcXG5uZXQvc2NoZWQvYWN0X2N0LmMtMTUyLVxcdFxcdFxcdFxcdFxcdCBvZmZzZXRvZihzdHJ1Y3QgdGNwaGRyLCBzb3VyY2UpLFxcbi0tXFxubmV0L3NjaGVkL2FjdF9jdC5jLTE1NC1cXHRpZiAodGFyZ2V0X2RzdCAhPSB0dXBsZS1cXHUwMDNlZHN0LnUudGNwLnBvcnQpXFxubmV0L3NjaGVkL2FjdF9jdC5jOjE1NTpcXHRcXHR0Y2ZfY3RfYWRkX21hbmdsZV9hY3Rpb24oYWN0aW9uLCBGTE9XX0FDVF9NQU5HTEVfSERSX1RZUEVfVENQLFxcbm5ldC9zY2hlZC9hY3RfY3QuYy0xNTYtXFx0XFx0XFx0XFx0XFx0IG9mZnNldG9mKHN0cnVjdCB0Y3BoZHIsIGRlc3QpLFxcbi0tXFxubmV0L3NjaGVkL2FjdF9jdC5jPTE2MD1zdGF0aWMgdm9pZFxcbm5ldC9zY2hlZC9hY3RfY3QuYzoxNjE6dGNmX2N0X2Zsb3dfdGFibGVfYWRkX2FjdGlvbl9uYXRfdWRwKGNvbnN0IHN0cnVjdCBuZl9jb25udHJhY2tfdHVwbGUgKnR1cGxlLFxcbm5ldC9zY2hlZC9hY3RfY3QuYy0xNjItXFx0XFx0XFx0XFx0ICAgICBzdHJ1Y3QgbmZfY29ubnRyYWNrX3R1cGxlIHRhcmdldCxcXG4tLVxcbm5ldC9zY2hlZC9hY3RfY3QuYy0xNjgtXFx0aWYgKHRhcmdldF9zcmMgIT0gdHVwbGUtXFx1MDAzZXNyYy51LnVkcC5wb3J0KVxcbm5ldC9zY2hlZC9hY3RfY3QuYzoxNjk6XFx0XFx0dGNmX2N0X2FkZF9tYW5nbGVfYWN0aW9uKGFjdGlvbiwgRkxPV19BQ1RfTUFOR0xFX0hEUl9UWVBFX1VEUCxcXG5uZXQvc2NoZWQvYWN0X2N0LmMtMTcwLVxcdFxcdFxcdFxcdFxcdCBvZmZzZXRvZihzdHJ1Y3QgdWRwaGRyLCBzb3VyY2UpLFxcbi0tXFxubmV0L3NjaGVkL2FjdF9jdC5jLTE3Mi1cXHRpZiAodGFyZ2V0X2RzdCAhPSB0dXBsZS1cXHUwMDNlZHN0LnUudWRwLnBvcnQpXFxubmV0L3NjaGVkL2FjdF9jdC5jOjE3MzpcXHRcXHR0Y2ZfY3RfYWRkX21hbmdsZV9hY3Rpb24oYWN0aW9uLCBGTE9XX0FDVF9NQU5HTEVfSERSX1RZUEVfVURQLFxcbm5ldC9zY2hlZC9hY3RfY3QuYy0xNzQtXFx0XFx0XFx0XFx0XFx0IG9mZnNldG9mKHN0cnVjdCB1ZHBoZHIsIGRlc3QpLFxcbi0tXFxubmV0L3NjaGVkL2FjdF9jdC5jLTE3Ny1cXG5uZXQvc2NoZWQvYWN0X2N0LmM6MTc4OnN0YXRpYyB2b2lkIHRjZl9jdF9mbG93X3RhYmxlX2FkZF9hY3Rpb25fbWV0YShzdHJ1Y3QgbmZfY29ubiAqY3QsXFxubmV0L3NjaGVkL2FjdF9jdC5jLTE3OS1cXHRcXHRcXHRcXHRcXHQgICAgICBlbnVtIGlwX2Nvbm50cmFja19kaXIgZGlyLFxcbi0tXFxubmV0L3NjaGVkL2FjdF9jdC5jLTE4Ni1cXG5uZXQvc2NoZWQvYWN0X2N0LmM6MTg3OlxcdGVudHJ5ID0gdGNmX2N0X2Zsb3dfdGFibGVfZmxvd19hY3Rpb25fZ2V0X25leHQoYWN0aW9uKTtcXG5uZXQvc2NoZWQvYWN0X2N0LmMtMTg4LVxcdGVudHJ5LVxcdTAwM2VpZCA9IEZMT1dfQUNUSU9OX0NUX01FVEFEQVRBO1xcbi0tXFxubmV0L3NjaGVkL2FjdF9jdC5jLTIwMy1cXG5uZXQvc2NoZWQvYWN0X2N0LmM6MjA0OnN0YXRpYyBpbnQgdGNmX2N0X2Zsb3dfdGFibGVfYWRkX2FjdGlvbl9uYXQoc3RydWN0IG5ldCAqbmV0LFxcbm5ldC9zY2hlZC9hY3RfY3QuYy0yMDUtXFx0XFx0XFx0XFx0XFx0ICAgIHN0cnVjdCBuZl9jb25uICpjdCxcXG4tLVxcbm5ldC9zY2hlZC9hY3RfY3QuYy0yMTgtXFx0Y2FzZSBORlBST1RPX0lQVjQ6XFxubmV0L3NjaGVkL2FjdF9jdC5jOjIxOTpcXHRcXHR0Y2ZfY3RfZmxvd190YWJsZV9hZGRfYWN0aW9uX25hdF9pcHY0KHR1cGxlLCB0YXJnZXQsXFxubmV0L3NjaGVkL2FjdF9jdC5jLTIyMC1cXHRcXHRcXHRcXHRcXHRcXHQgICAgICBhY3Rpb24pO1xcbi0tXFxubmV0L3NjaGVkL2FjdF9jdC5jLTIyMi1cXHRjYXNlIE5GUFJPVE9fSVBWNjpcXG5uZXQvc2NoZWQvYWN0X2N0LmM6MjIzOlxcdFxcdHRjZl9jdF9mbG93X3RhYmxlX2FkZF9hY3Rpb25fbmF0X2lwdjYodHVwbGUsIHRhcmdldCxcXG5uZXQvc2NoZWQvYWN0X2N0LmMtMjI0LVxcdFxcdFxcdFxcdFxcdFxcdCAgICAgIGFjdGlvbik7XFxuLS1cXG5uZXQvc2NoZWQvYWN0X2N0LmMtMjMxLVxcdGNhc2UgSVBQUk9UT19UQ1A6XFxubmV0L3NjaGVkL2FjdF9jdC5jOjIzMjpcXHRcXHR0Y2ZfY3RfZmxvd190YWJsZV9hZGRfYWN0aW9uX25hdF90Y3AodHVwbGUsIHRhcmdldCwgYWN0aW9uKTtcXG5uZXQvc2NoZWQvYWN0X2N0LmMtMjMzLVxcdFxcdGJyZWFrO1xcbm5ldC9zY2hlZC9hY3RfY3QuYy0yMzQtXFx0Y2FzZSBJUFBST1RPX1VEUDpcXG5uZXQvc2NoZWQvYWN0X2N0LmM6MjM1OlxcdFxcdHRjZl9jdF9mbG93X3RhYmxlX2FkZF9hY3Rpb25fbmF0X3VkcCh0dXBsZSwgdGFyZ2V0LCBhY3Rpb24pO1xcbm5ldC9zY2hlZC9hY3RfY3QuYy0yMzYtXFx0XFx0YnJlYWs7XFxuLS1cXG5uZXQvc2NoZWQvYWN0X2N0LmMtMjQzLVxcbm5ldC9zY2hlZC9hY3RfY3QuYzoyNDQ6c3RhdGljIGludCB0Y2ZfY3RfZmxvd190YWJsZV9maWxsX2FjdGlvbnMoc3RydWN0IG5ldCAqbmV0LFxcbm5ldC9zY2hlZC9hY3RfY3QuYy0yNDUtXFx0XFx0XFx0XFx0XFx0ICBzdHJ1Y3QgZmxvd19vZmZsb2FkICpmbG93LFxcbi0tXFxubmV0L3NjaGVkL2FjdF9jdC5jLTI3MS1cXG5uZXQvc2NoZWQvYWN0X2N0LmM6MjcyOlxcdGVyciA9IHRjZl9jdF9mbG93X3RhYmxlX2FkZF9hY3Rpb25fbmF0KG5ldCwgY3QsIGRpciwgYWN0aW9uKTtcXG5uZXQvc2NoZWQvYWN0X2N0LmMtMjczLVxcdGlmIChlcnIpXFxuLS1cXG5uZXQvc2NoZWQvYWN0X2N0LmMtMjc1LVxcbm5ldC9zY2hlZC9hY3RfY3QuYzoyNzY6XFx0dGNmX2N0X2Zsb3dfdGFibGVfYWRkX2FjdGlvbl9tZXRhKGN0LCBkaXIsIGN0aW5mbywgYWN0aW9uKTtcXG5uZXQvc2NoZWQvYWN0X2N0LmMtMjc3LVxcdHJldHVybiAwO1xcbi0tXFxubmV0L3NjaGVkL2FjdF9jdC5jLTI4Ny1cXG5uZXQvc2NoZWQvYWN0X2N0LmM6Mjg4OnN0YXRpYyBib29sIHRjZl9jdF9mbG93X2lzX291dGRhdGVkKGNvbnN0IHN0cnVjdCBmbG93X29mZmxvYWQgKmZsb3cpXFxubmV0L3NjaGVkL2FjdF9jdC5jLTI4OS17XFxuLS1cXG5uZXQvc2NoZWQvYWN0X2N0LmMtMjk1LVxcbm5ldC9zY2hlZC9hY3RfY3QuYzoyOTY6c3RhdGljIHZvaWQgdGNmX2N0X2Zsb3dfdGFibGVfZ2V0X3JlZihzdHJ1Y3QgdGNmX2N0X2Zsb3dfdGFibGUgKmN0X2Z0KTtcXG5uZXQvc2NoZWQvYWN0X2N0LmMtMjk3LVxcbm5ldC9zY2hlZC9hY3RfY3QuYzoyOTg6c3RhdGljIHZvaWQgdGNmX2N0X25mX2dldChzdHJ1Y3QgbmZfZmxvd3RhYmxlICpmdClcXG5uZXQvc2NoZWQvYWN0X2N0LmMtMjk5LXtcXG5uZXQvc2NoZWQvYWN0X2N0LmM6MzAwOlxcdHN0cnVjdCB0Y2ZfY3RfZmxvd190YWJsZSAqY3RfZnQgPVxcbm5ldC9zY2hlZC9hY3RfY3QuYzozMDE6XFx0XFx0Y29udGFpbmVyX29mKGZ0LCBzdHJ1Y3QgdGNmX2N0X2Zsb3dfdGFibGUsIG5mX2Z0KTtcXG5uZXQvc2NoZWQvYWN0X2N0LmMtMzAyLVxcbm5ldC9zY2hlZC9hY3RfY3QuYzozMDM6XFx0dGNmX2N0X2Zsb3dfdGFibGVfZ2V0X3JlZihjdF9mdCk7XFxubmV0L3NjaGVkL2FjdF9jdC5jLTMwNC19XFxubmV0L3NjaGVkL2FjdF9jdC5jLTMwNS1cXG5uZXQvc2NoZWQvYWN0X2N0LmM6MzA2OnN0YXRpYyB2b2lkIHRjZl9jdF9mbG93X3RhYmxlX3B1dChzdHJ1Y3QgdGNmX2N0X2Zsb3dfdGFibGUgKmN0X2Z0KTtcXG5uZXQvc2NoZWQvYWN0X2N0LmMtMzA3LVxcbm5ldC9zY2hlZC9hY3RfY3QuYzozMDg6c3RhdGljIHZvaWQgdGNmX2N0X25mX3B1dChzdHJ1Y3QgbmZfZmxvd3RhYmxlICpmdClcXG5uZXQvc2NoZWQvYWN0X2N0LmMtMzA5LXtcXG5uZXQvc2NoZWQvYWN0X2N0LmM6MzEwOlxcdHN0cnVjdCB0Y2ZfY3RfZmxvd190YWJsZSAqY3RfZnQgPVxcbm5ldC9zY2hlZC9hY3RfY3QuYzozMTE6XFx0XFx0Y29udGFpbmVyX29mKGZ0LCBzdHJ1Y3QgdGNmX2N0X2Zsb3dfdGFibGUsIG5mX2Z0KTtcXG5uZXQvc2NoZWQvYWN0X2N0LmMtMzEyLVxcbm5ldC9zY2hlZC9hY3RfY3QuYzozMTM6XFx0dGNmX2N0X2Zsb3dfdGFibGVfcHV0KGN0X2Z0KTtcXG5uZXQvc2NoZWQvYWN0X2N0LmMtMzE0LX1cXG4tLVxcbm5ldC9zY2hlZC9hY3RfY3QuYz0zMTY9c3RhdGljIHN0cnVjdCBuZl9mbG93dGFibGVfdHlwZSBmbG93dGFibGVfY3QgPSB7XFxubmV0L3NjaGVkL2FjdF9jdC5jOjMxNzpcXHQuZ2NcXHRcXHQ9IHRjZl9jdF9mbG93X2lzX291dGRhdGVkLFxcbm5ldC9zY2hlZC9hY3RfY3QuYzozMTg6XFx0LmFjdGlvblxcdFxcdD0gdGNmX2N0X2Zsb3dfdGFibGVfZmlsbF9hY3Rpb25zLFxcbm5ldC9zY2hlZC9hY3RfY3QuYzozMTk6XFx0LmdldFxcdFxcdD0gdGNmX2N0X25mX2dldCxcXG5uZXQvc2NoZWQvYWN0X2N0LmM6MzIwOlxcdC5wdXRcXHRcXHQ9IHRjZl9jdF9uZl9wdXQsXFxubmV0L3NjaGVkL2FjdF9jdC5jLTMyMS1cXHQub3duZXJcXHRcXHQ9IFRISVNfTU9EVUxFLFxcbi0tXFxubmV0L3NjaGVkL2FjdF9jdC5jLTMyMy1cXG5uZXQvc2NoZWQvYWN0X2N0LmM6MzI0OnN0YXRpYyBpbnQgdGNmX2N0X2Zsb3dfdGFibGVfZ2V0KHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHRjZl9jdF9wYXJhbXMgKnBhcmFtcylcXG5uZXQvc2NoZWQvYWN0X2N0LmMtMzI1LXtcXG5uZXQvc2NoZWQvYWN0X2N0LmMtMzI2LVxcdHN0cnVjdCB6b25lc19odF9rZXkga2V5ID0geyAubmV0ID0gbmV0LCAuem9uZSA9IHBhcmFtcy1cXHUwMDNlem9uZSB9O1xcbm5ldC9zY2hlZC9hY3RfY3QuYzozMjc6XFx0c3RydWN0IHRjZl9jdF9mbG93X3RhYmxlICpjdF9mdDtcXG5uZXQvc2NoZWQvYWN0X2N0LmMtMzI4LVxcdGludCBlcnIgPSAtRU5PTUVNO1xcbi0tXFxubmV0L3NjaGVkL2FjdF9jdC5jLTM3My1cXG5uZXQvc2NoZWQvYWN0X2N0LmM6Mzc0OnN0YXRpYyB2b2lkIHRjZl9jdF9mbG93X3RhYmxlX2dldF9yZWYoc3RydWN0IHRjZl9jdF9mbG93X3RhYmxlICpjdF9mdClcXG5uZXQvc2NoZWQvYWN0X2N0LmMtMzc1LXtcXG4tLVxcbm5ldC9zY2hlZC9hY3RfY3QuYy0zNzgtXFxubmV0L3NjaGVkL2FjdF9jdC5jOjM3OTpzdGF0aWMgdm9pZCB0Y2ZfY3RfZmxvd190YWJsZV9jbGVhbnVwX3dvcmsoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxcbm5ldC9zY2hlZC9hY3RfY3QuYy0zODAte1xcbm5ldC9zY2hlZC9hY3RfY3QuYzozODE6XFx0c3RydWN0IHRjZl9jdF9mbG93X3RhYmxlICpjdF9mdDtcXG5uZXQvc2NoZWQvYWN0X2N0LmMtMzgyLVxcdHN0cnVjdCBmbG93X2Jsb2NrICpibG9jaztcXG5uZXQvc2NoZWQvYWN0X2N0LmMtMzgzLVxcbm5ldC9zY2hlZC9hY3RfY3QuYzozODQ6XFx0Y3RfZnQgPSBjb250YWluZXJfb2YodG9fcmN1X3dvcmsod29yayksIHN0cnVjdCB0Y2ZfY3RfZmxvd190YWJsZSxcXG5uZXQvc2NoZWQvYWN0X2N0LmMtMzg1LVxcdFxcdFxcdCAgICAgcndvcmspO1xcbi0tXFxubmV0L3NjaGVkL2FjdF9jdC5jLTM5Ni1cXG5uZXQvc2NoZWQvYWN0X2N0LmM6Mzk3OnN0YXRpYyB2b2lkIHRjZl9jdF9mbG93X3RhYmxlX3B1dChzdHJ1Y3QgdGNmX2N0X2Zsb3dfdGFibGUgKmN0X2Z0KVxcbm5ldC9zY2hlZC9hY3RfY3QuYy0zOTgte1xcbi0tXFxubmV0L3NjaGVkL2FjdF9jdC5jLTQwMC1cXHRcXHRyaGFzaHRhYmxlX3JlbW92ZV9mYXN0KFxcdTAwMjZ6b25lc19odCwgXFx1MDAyNmN0X2Z0LVxcdTAwM2Vub2RlLCB6b25lc19wYXJhbXMpO1xcbm5ldC9zY2hlZC9hY3RfY3QuYzo0MDE6XFx0XFx0SU5JVF9SQ1VfV09SSyhcXHUwMDI2Y3RfZnQtXFx1MDAzZXJ3b3JrLCB0Y2ZfY3RfZmxvd190YWJsZV9jbGVhbnVwX3dvcmspO1xcbm5ldC9zY2hlZC9hY3RfY3QuYy00MDItXFx0XFx0cXVldWVfcmN1X3dvcmsoYWN0X2N0X3dxLCBcXHUwMDI2Y3RfZnQtXFx1MDAzZXJ3b3JrKTtcXG4tLVxcbm5ldC9zY2hlZC9hY3RfY3QuYy00MDUtXFxubmV0L3NjaGVkL2FjdF9jdC5jOjQwNjpzdGF0aWMgdm9pZCB0Y2ZfY3RfZmxvd190Y19pZmlkeChzdHJ1Y3QgZmxvd19vZmZsb2FkICplbnRyeSxcXG5uZXQvc2NoZWQvYWN0X2N0LmMtNDA3LVxcdFxcdFxcdFxcdCBzdHJ1Y3QgbmZfY29ubl9hY3RfY3RfZXh0ICphY3RfY3RfZXh0LCB1OCBkaXIpXFxuLS1cXG5uZXQvc2NoZWQvYWN0X2N0LmMtNDEyLVxcbm5ldC9zY2hlZC9hY3RfY3QuYzo0MTM6c3RhdGljIHZvaWQgdGNmX2N0X2Zsb3dfY3RfZXh0X2lmaWR4X3VwZGF0ZShzdHJ1Y3QgZmxvd19vZmZsb2FkICplbnRyeSlcXG5uZXQvc2NoZWQvYWN0X2N0LmMtNDE0LXtcXG4tLVxcbm5ldC9zY2hlZC9hY3RfY3QuYy00MTgtXFx0aWYgKGFjdF9jdF9leHQpIHtcXG5uZXQvc2NoZWQvYWN0X2N0LmM6NDE5OlxcdFxcdHRjZl9jdF9mbG93X3RjX2lmaWR4KGVudHJ5LCBhY3RfY3RfZXh0LCBGTE9XX09GRkxPQURfRElSX09SSUdJTkFMKTtcXG5uZXQvc2NoZWQvYWN0X2N0LmM6NDIwOlxcdFxcdHRjZl9jdF9mbG93X3RjX2lmaWR4KGVudHJ5LCBhY3RfY3RfZXh0LCBGTE9XX09GRkxPQURfRElSX1JFUExZKTtcXG5uZXQvc2NoZWQvYWN0X2N0LmMtNDIxLVxcdH1cXG4tLVxcbm5ldC9zY2hlZC9hY3RfY3QuYy00MjMtXFxubmV0L3NjaGVkL2FjdF9jdC5jOjQyNDpzdGF0aWMgdm9pZCB0Y2ZfY3RfZmxvd190YWJsZV9hZGQoc3RydWN0IHRjZl9jdF9mbG93X3RhYmxlICpjdF9mdCxcXG5uZXQvc2NoZWQvYWN0X2N0LmMtNDI1LVxcdFxcdFxcdFxcdCAgc3RydWN0IG5mX2Nvbm4gKmN0LFxcbi0tXFxubmV0L3NjaGVkL2FjdF9jdC5jLTQ0OS1cXHRpZiAoYWN0X2N0X2V4dCkge1xcbm5ldC9zY2hlZC9hY3RfY3QuYzo0NTA6XFx0XFx0dGNmX2N0X2Zsb3dfdGNfaWZpZHgoZW50cnksIGFjdF9jdF9leHQsIEZMT1dfT0ZGTE9BRF9ESVJfT1JJR0lOQUwpO1xcbm5ldC9zY2hlZC9hY3RfY3QuYzo0NTE6XFx0XFx0dGNmX2N0X2Zsb3dfdGNfaWZpZHgoZW50cnksIGFjdF9jdF9leHQsIEZMT1dfT0ZGTE9BRF9ESVJfUkVQTFkpO1xcbm5ldC9zY2hlZC9hY3RfY3QuYy00NTItXFx0fVxcbi0tXFxubmV0L3NjaGVkL2FjdF9jdC5jLTQ2NS1cXG5uZXQvc2NoZWQvYWN0X2N0LmM6NDY2OnN0YXRpYyB2b2lkIHRjZl9jdF9mbG93X3RhYmxlX3Byb2Nlc3NfY29ubihzdHJ1Y3QgdGNmX2N0X2Zsb3dfdGFibGUgKmN0X2Z0LFxcbm5ldC9zY2hlZC9hY3RfY3QuYy00NjctXFx0XFx0XFx0XFx0XFx0ICAgc3RydWN0IG5mX2Nvbm4gKmN0LFxcbi0tXFxubmV0L3NjaGVkL2FjdF9jdC5jLTUxMi1cXG5uZXQvc2NoZWQvYWN0X2N0LmM6NTEzOlxcdHRjZl9jdF9mbG93X3RhYmxlX2FkZChjdF9mdCwgY3QsIHRjcCwgYmlkaXJlY3Rpb25hbCk7XFxubmV0L3NjaGVkL2FjdF9jdC5jLTUxNC19XFxuLS1cXG5uZXQvc2NoZWQvYWN0X2N0LmM9NTE2PXN0YXRpYyBib29sXFxubmV0L3NjaGVkL2FjdF9jdC5jOjUxNzp0Y2ZfY3RfZmxvd190YWJsZV9maWxsX3R1cGxlX2lwdjQoc3RydWN0IHNrX2J1ZmYgKnNrYixcXG5uZXQvc2NoZWQvYWN0X2N0LmMtNTE4LVxcdFxcdFxcdFxcdCAgc3RydWN0IGZsb3dfb2ZmbG9hZF90dXBsZSAqdHVwbGUsXFxuLS1cXG5uZXQvc2NoZWQvYWN0X2N0LmM9NTg5PXN0YXRpYyBib29sXFxubmV0L3NjaGVkL2FjdF9jdC5jOjU5MDp0Y2ZfY3RfZmxvd190YWJsZV9maWxsX3R1cGxlX2lwdjYoc3RydWN0IHNrX2J1ZmYgKnNrYixcXG5uZXQvc2NoZWQvYWN0X2N0LmMtNTkxLVxcdFxcdFxcdFxcdCAgc3RydWN0IGZsb3dfb2ZmbG9hZF90dXBsZSAqdHVwbGUsXFxuLS1cXG5uZXQvc2NoZWQvYWN0X2N0LmMtNjU3LVxcbm5ldC9zY2hlZC9hY3RfY3QuYzo2NTg6c3RhdGljIGJvb2wgdGNmX2N0X2Zsb3dfdGFibGVfbG9va3VwKHN0cnVjdCB0Y2ZfY3RfcGFyYW1zICpwLFxcbm5ldC9zY2hlZC9hY3RfY3QuYy02NTktXFx0XFx0XFx0XFx0ICAgICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbi0tXFxubmV0L3NjaGVkL2FjdF9jdC5jLTY3My1cXHRjYXNlIE5GUFJPVE9fSVBWNDpcXG5uZXQvc2NoZWQvYWN0X2N0LmM6Njc0OlxcdFxcdGlmICghdGNmX2N0X2Zsb3dfdGFibGVfZmlsbF90dXBsZV9pcHY0KHNrYiwgXFx1MDAyNnR1cGxlLCBcXHUwMDI2dGNwaCkpXFxubmV0L3NjaGVkL2FjdF9jdC5jLTY3NS1cXHRcXHRcXHRyZXR1cm4gZmFsc2U7XFxuLS1cXG5uZXQvc2NoZWQvYWN0X2N0LmMtNjc3LVxcdGNhc2UgTkZQUk9UT19JUFY2Olxcbm5ldC9zY2hlZC9hY3RfY3QuYzo2Nzg6XFx0XFx0aWYgKCF0Y2ZfY3RfZmxvd190YWJsZV9maWxsX3R1cGxlX2lwdjYoc2tiLCBcXHUwMDI2dHVwbGUsIFxcdTAwMjZ0Y3BoKSlcXG5uZXQvc2NoZWQvYWN0X2N0LmMtNjc5LVxcdFxcdFxcdHJldHVybiBmYWxzZTtcXG4tLVxcbm5ldC9zY2hlZC9hY3RfY3QuYy03MTktXFx0bmZfY29ubl9hY3RfY3RfZXh0X2ZpbGwoc2tiLCBjdCwgY3RpbmZvKTtcXG5uZXQvc2NoZWQvYWN0X2N0LmM6NzIwOlxcdHRjZl9jdF9mbG93X2N0X2V4dF9pZmlkeF91cGRhdGUoZmxvdyk7XFxubmV0L3NjaGVkL2FjdF9jdC5jLTcyMS1cXHRmbG93X29mZmxvYWRfcmVmcmVzaChuZl9mdCwgZmxvdywgZm9yY2VfcmVmcmVzaCk7XFxuLS1cXG5uZXQvc2NoZWQvYWN0X2N0LmMtNzM0LVxcbm5ldC9zY2hlZC9hY3RfY3QuYzo3MzU6c3RhdGljIGludCB0Y2ZfY3RfZmxvd190YWJsZXNfaW5pdCh2b2lkKVxcbm5ldC9zY2hlZC9hY3RfY3QuYy03MzYte1xcbi0tXFxubmV0L3NjaGVkL2FjdF9jdC5jLTczOS1cXG5uZXQvc2NoZWQvYWN0X2N0LmM6NzQwOnN0YXRpYyB2b2lkIHRjZl9jdF9mbG93X3RhYmxlc191bmluaXQodm9pZClcXG5uZXQvc2NoZWQvYWN0X2N0LmMtNzQxLXtcXG4tLVxcbm5ldC9zY2hlZC9hY3RfY3QuYz03NDc9c3RydWN0IHRjX2N0X2FjdGlvbl9uZXQge1xcbi0tXFxubmV0L3NjaGVkL2FjdF9jdC5jLTc1MS0vKiBEZXRlcm1pbmUgd2hldGhlciBza2ItXFx1MDAzZV9uZmN0IGlzIGVxdWFsIHRvIHRoZSByZXN1bHQgb2YgY29ubnRyYWNrIGxvb2t1cC4gKi9cXG5uZXQvc2NoZWQvYWN0X2N0LmM6NzUyOnN0YXRpYyBib29sIHRjZl9jdF9za2JfbmZjdF9jYWNoZWQoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbm5ldC9zY2hlZC9hY3RfY3QuYzo3NTM6XFx0XFx0XFx0XFx0ICAgc3RydWN0IHRjZl9jdF9wYXJhbXMgKnApXFxubmV0L3NjaGVkL2FjdF9jdC5jLTc1NC17XFxuLS1cXG5uZXQvc2NoZWQvYWN0X2N0LmMtNzkwLVxcbm5ldC9zY2hlZC9hY3RfY3QuYzo3OTE6c3RhdGljIHU4IHRjZl9jdF9za2JfbmZfZmFtaWx5KHN0cnVjdCBza19idWZmICpza2IpXFxubmV0L3NjaGVkL2FjdF9jdC5jLTc5Mi17XFxuLS1cXG5uZXQvc2NoZWQvYWN0X2N0LmMtODA4LVxcbm5ldC9zY2hlZC9hY3RfY3QuYzo4MDk6c3RhdGljIGludCB0Y2ZfY3RfaXB2NF9pc19mcmFnbWVudChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBib29sICpmcmFnKVxcbm5ldC9zY2hlZC9hY3RfY3QuYy04MTAte1xcbi0tXFxubmV0L3NjaGVkL2FjdF9jdC5jLTgyMi1cXG5uZXQvc2NoZWQvYWN0X2N0LmM6ODIzOnN0YXRpYyBpbnQgdGNmX2N0X2lwdjZfaXNfZnJhZ21lbnQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgYm9vbCAqZnJhZylcXG5uZXQvc2NoZWQvYWN0X2N0LmMtODI0LXtcXG4tLVxcbm5ldC9zY2hlZC9hY3RfY3QuYy04NDgtICovXFxubmV0L3NjaGVkL2FjdF9jdC5jOjg0OTpzdGF0aWMgaW50IHRjZl9jdF9oYW5kbGVfZnJhZ21lbnRzKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHNrX2J1ZmYgKnNrYixcXG5uZXQvc2NoZWQvYWN0X2N0LmMtODUwLVxcdFxcdFxcdFxcdCAgIHU4IGZhbWlseSwgdTE2IHpvbmUsIGJvb2wgKmRlZnJhZyxcXG4tLVxcbm5ldC9zY2hlZC9hY3RfY3QuYy04NjUtXFx0aWYgKGZhbWlseSA9PSBORlBST1RPX0lQVjQpXFxubmV0L3NjaGVkL2FjdF9jdC5jOjg2NjpcXHRcXHRlcnIgPSB0Y2ZfY3RfaXB2NF9pc19mcmFnbWVudChza2IsIFxcdTAwMjZmcmFnKTtcXG5uZXQvc2NoZWQvYWN0X2N0LmMtODY3LVxcdGVsc2VcXG5uZXQvc2NoZWQvYWN0X2N0LmM6ODY4OlxcdFxcdGVyciA9IHRjZl9jdF9pcHY2X2lzX2ZyYWdtZW50KHNrYiwgXFx1MDAyNmZyYWcpO1xcbm5ldC9zY2hlZC9hY3RfY3QuYy04NjktXFx0aWYgKGVycikge1xcbi0tXFxubmV0L3NjaGVkL2FjdF9jdC5jLTg4Ni1cXG5uZXQvc2NoZWQvYWN0X2N0LmM6ODg3OnN0YXRpYyB2b2lkIHRjZl9jdF9wYXJhbXNfZnJlZShzdHJ1Y3QgdGNmX2N0X3BhcmFtcyAqcGFyYW1zKVxcbm5ldC9zY2hlZC9hY3RfY3QuYy04ODgte1xcbi0tXFxubmV0L3NjaGVkL2FjdF9jdC5jLTg5Ni1cXHRpZiAocGFyYW1zLVxcdTAwM2VjdF9mdClcXG5uZXQvc2NoZWQvYWN0X2N0LmM6ODk3OlxcdFxcdHRjZl9jdF9mbG93X3RhYmxlX3B1dChwYXJhbXMtXFx1MDAzZWN0X2Z0KTtcXG5uZXQvc2NoZWQvYWN0X2N0LmMtODk4LVxcdGlmIChwYXJhbXMtXFx1MDAzZXRtcGwpIHtcXG4tLVxcbm5ldC9zY2hlZC9hY3RfY3QuYy05MDctXFxubmV0L3NjaGVkL2FjdF9jdC5jOjkwODpzdGF0aWMgdm9pZCB0Y2ZfY3RfcGFyYW1zX2ZyZWVfcmN1KHN0cnVjdCByY3VfaGVhZCAqaGVhZClcXG5uZXQvc2NoZWQvYWN0X2N0LmMtOTA5LXtcXG5uZXQvc2NoZWQvYWN0X2N0LmM6OTEwOlxcdHN0cnVjdCB0Y2ZfY3RfcGFyYW1zICpwYXJhbXM7XFxubmV0L3NjaGVkL2FjdF9jdC5jLTkxMS1cXG5uZXQvc2NoZWQvYWN0X2N0LmM6OTEyOlxcdHBhcmFtcyA9IGNvbnRhaW5lcl9vZihoZWFkLCBzdHJ1Y3QgdGNmX2N0X3BhcmFtcywgcmN1KTtcXG5uZXQvc2NoZWQvYWN0X2N0LmM6OTEzOlxcdHRjZl9jdF9wYXJhbXNfZnJlZShwYXJhbXMpO1xcbm5ldC9zY2hlZC9hY3RfY3QuYy05MTQtfVxcbm5ldC9zY2hlZC9hY3RfY3QuYy05MTUtXFxubmV0L3NjaGVkL2FjdF9jdC5jOjkxNjpzdGF0aWMgdm9pZCB0Y2ZfY3RfYWN0X3NldF9tYXJrKHN0cnVjdCBuZl9jb25uICpjdCwgdTMyIG1hcmssIHUzMiBtYXNrKVxcbm5ldC9zY2hlZC9hY3RfY3QuYy05MTcte1xcbi0tXFxubmV0L3NjaGVkL2FjdF9jdC5jLTkzMi1cXG5uZXQvc2NoZWQvYWN0X2N0LmM6OTMzOnN0YXRpYyB2b2lkIHRjZl9jdF9hY3Rfc2V0X2xhYmVscyhzdHJ1Y3QgbmZfY29ubiAqY3QsXFxubmV0L3NjaGVkL2FjdF9jdC5jLTkzNC1cXHRcXHRcXHRcXHQgIHUzMiAqbGFiZWxzLFxcbi0tXFxubmV0L3NjaGVkL2FjdF9jdC5jLTkzNy0jaWYgSVNfRU5BQkxFRChDT05GSUdfTkZfQ09OTlRSQUNLX0xBQkVMUylcXG5uZXQvc2NoZWQvYWN0X2N0LmM6OTM4OlxcdHNpemVfdCBsYWJlbHNfc3ogPSBzaXplb2ZfZmllbGQoc3RydWN0IHRjZl9jdF9wYXJhbXMsIGxhYmVscyk7XFxubmV0L3NjaGVkL2FjdF9jdC5jLTkzOS1cXG4tLVxcbm5ldC9zY2hlZC9hY3RfY3QuYy05NDYtXFxubmV0L3NjaGVkL2FjdF9jdC5jOjk0NzpzdGF0aWMgaW50IHRjZl9jdF9hY3RfbmF0KHN0cnVjdCBza19idWZmICpza2IsXFxubmV0L3NjaGVkL2FjdF9jdC5jLTk0OC1cXHRcXHRcXHQgIHN0cnVjdCBuZl9jb25uICpjdCxcXG4tLVxcbm5ldC9zY2hlZC9hY3RfY3QuYy05NzgtXFxubmV0L3NjaGVkL2FjdF9jdC5jOjk3OTpUQ19JTkRJUkVDVF9TQ09QRSBpbnQgdGNmX2N0X2FjdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBjb25zdCBzdHJ1Y3QgdGNfYWN0aW9uICphLFxcbm5ldC9zY2hlZC9hY3RfY3QuYy05ODAtXFx0XFx0XFx0XFx0IHN0cnVjdCB0Y2ZfcmVzdWx0ICpyZXMpXFxuLS1cXG5uZXQvc2NoZWQvYWN0X2N0LmMtOTg4LVxcdGludCBuaF9vZnMsIGVyciwgcmV0dmFsO1xcbm5ldC9zY2hlZC9hY3RfY3QuYzo5ODk6XFx0c3RydWN0IHRjZl9jdF9wYXJhbXMgKnA7XFxubmV0L3NjaGVkL2FjdF9jdC5jLTk5MC1cXHRib29sIGFkZF9oZWxwZXIgPSBmYWxzZTtcXG4tLVxcbm5ldC9zY2hlZC9hY3RfY3QuYy0xMDE3LVxcbm5ldC9zY2hlZC9hY3RfY3QuYzoxMDE4OlxcdGZhbWlseSA9IHRjZl9jdF9za2JfbmZfZmFtaWx5KHNrYik7XFxubmV0L3NjaGVkL2FjdF9jdC5jLTEwMTktXFx0aWYgKGZhbWlseSA9PSBORlBST1RPX1VOU1BFQylcXG4tLVxcbm5ldC9zY2hlZC9hY3RfY3QuYy0xMDI2LVxcdHNrYl9wdWxsX3Jjc3VtKHNrYiwgbmhfb2ZzKTtcXG5uZXQvc2NoZWQvYWN0X2N0LmM6MTAyNzpcXHRlcnIgPSB0Y2ZfY3RfaGFuZGxlX2ZyYWdtZW50cyhuZXQsIHNrYiwgZmFtaWx5LCBwLVxcdTAwM2V6b25lLCBcXHUwMDI2ZGVmcmFnLFxcbm5ldC9zY2hlZC9hY3RfY3QuYy0xMDI4LVxcdFxcdFxcdFxcdCAgICAgIFxcdTAwMjZza2JfaXNfb3Vycyk7XFxuLS1cXG5uZXQvc2NoZWQvYWN0X2N0LmMtMTA0OC1cXHQgKi9cXG5uZXQvc2NoZWQvYWN0X2N0LmM6MTA0OTpcXHRjYWNoZWQgPSB0Y2ZfY3Rfc2tiX25mY3RfY2FjaGVkKG5ldCwgc2tiLCBwKTtcXG5uZXQvc2NoZWQvYWN0X2N0LmMtMTA1MC1cXHRpZiAoIWNhY2hlZCkge1xcbm5ldC9zY2hlZC9hY3RfY3QuYzoxMDUxOlxcdFxcdGlmICh0Y2ZfY3RfZmxvd190YWJsZV9sb29rdXAocCwgc2tiLCBmYW1pbHkpKSB7XFxubmV0L3NjaGVkL2FjdF9jdC5jLTEwNTItXFx0XFx0XFx0c2tpcF9hZGQgPSB0cnVlO1xcbi0tXFxubmV0L3NjaGVkL2FjdF9jdC5jLTEwNzctXFxubmV0L3NjaGVkL2FjdF9jdC5jOjEwNzg6XFx0ZXJyID0gdGNmX2N0X2FjdF9uYXQoc2tiLCBjdCwgY3RpbmZvLCBwLVxcdTAwM2VjdF9hY3Rpb24sIFxcdTAwMjZwLVxcdTAwM2VyYW5nZSwgY29tbWl0KTtcXG5uZXQvc2NoZWQvYWN0X2N0LmMtMTA3OS1cXHRpZiAoZXJyICE9IE5GX0FDQ0VQVClcXG4tLVxcbm5ldC9zY2hlZC9hY3RfY3QuYy0xMDk5LVxcdGlmIChjb21taXQpIHtcXG5uZXQvc2NoZWQvYWN0X2N0LmM6MTEwMDpcXHRcXHR0Y2ZfY3RfYWN0X3NldF9tYXJrKGN0LCBwLVxcdTAwM2VtYXJrLCBwLVxcdTAwM2VtYXJrX21hc2spO1xcbm5ldC9zY2hlZC9hY3RfY3QuYzoxMTAxOlxcdFxcdHRjZl9jdF9hY3Rfc2V0X2xhYmVscyhjdCwgcC1cXHUwMDNlbGFiZWxzLCBwLVxcdTAwM2VsYWJlbHNfbWFzayk7XFxubmV0L3NjaGVkL2FjdF9jdC5jLTExMDItXFxuLS1cXG5uZXQvc2NoZWQvYWN0X2N0LmMtMTEyMi1cXHRpZiAoIXNraXBfYWRkKVxcbm5ldC9zY2hlZC9hY3RfY3QuYzoxMTIzOlxcdFxcdHRjZl9jdF9mbG93X3RhYmxlX3Byb2Nlc3NfY29ubihwLVxcdTAwM2VjdF9mdCwgY3QsIGN0aW5mbyk7XFxubmV0L3NjaGVkL2FjdF9jdC5jLTExMjQtXFxuLS1cXG5uZXQvc2NoZWQvYWN0X2N0LmM9MTE2MD1zdGF0aWMgY29uc3Qgc3RydWN0IG5sYV9wb2xpY3kgY3RfcG9saWN5W1RDQV9DVF9NQVggKyAxXSA9IHtcXG4tLVxcbm5ldC9zY2hlZC9hY3RfY3QuYy0xMTgwLVxcbm5ldC9zY2hlZC9hY3RfY3QuYzoxMTgxOnN0YXRpYyBpbnQgdGNmX2N0X2ZpbGxfcGFyYW1zX25hdChzdHJ1Y3QgdGNmX2N0X3BhcmFtcyAqcCxcXG5uZXQvc2NoZWQvYWN0X2N0LmMtMTE4Mi1cXHRcXHRcXHRcXHQgIHN0cnVjdCB0Y19jdCAqcGFybSxcXG4tLVxcbm5ldC9zY2hlZC9hY3RfY3QuYy0xMjQwLVxcbm5ldC9zY2hlZC9hY3RfY3QuYzoxMjQxOnN0YXRpYyB2b2lkIHRjZl9jdF9zZXRfa2V5X3ZhbChzdHJ1Y3QgbmxhdHRyICoqdGIsXFxubmV0L3NjaGVkL2FjdF9jdC5jLTEyNDItXFx0XFx0XFx0ICAgICAgIHZvaWQgKnZhbCwgaW50IHZhbF90eXBlLFxcbi0tXFxubmV0L3NjaGVkL2FjdF9jdC5jLTEyNTgtXFxubmV0L3NjaGVkL2FjdF9jdC5jOjEyNTk6c3RhdGljIGludCB0Y2ZfY3RfZmlsbF9wYXJhbXMoc3RydWN0IG5ldCAqbmV0LFxcbm5ldC9zY2hlZC9hY3RfY3QuYzoxMjYwOlxcdFxcdFxcdCAgICAgIHN0cnVjdCB0Y2ZfY3RfcGFyYW1zICpwLFxcbm5ldC9zY2hlZC9hY3RfY3QuYy0xMjYxLVxcdFxcdFxcdCAgICAgIHN0cnVjdCB0Y19jdCAqcGFybSxcXG4tLVxcbm5ldC9zY2hlZC9hY3RfY3QuYy0xMjcyLVxcbm5ldC9zY2hlZC9hY3RfY3QuYzoxMjczOlxcdHRjZl9jdF9zZXRfa2V5X3ZhbCh0YixcXG5uZXQvc2NoZWQvYWN0X2N0LmMtMTI3NC1cXHRcXHRcXHQgICBcXHUwMDI2cC1cXHUwMDNlY3RfYWN0aW9uLCBUQ0FfQ1RfQUNUSU9OLFxcbi0tXFxubmV0L3NjaGVkL2FjdF9jdC5jLTEyODAtXFxubmV0L3NjaGVkL2FjdF9jdC5jOjEyODE6XFx0ZXJyID0gdGNmX2N0X2ZpbGxfcGFyYW1zX25hdChwLCBwYXJtLCB0YiwgZXh0YWNrKTtcXG5uZXQvc2NoZWQvYWN0X2N0LmMtMTI4Mi1cXHRpZiAoZXJyKVxcbi0tXFxubmV0L3NjaGVkL2FjdF9jdC5jLTEyODktXFx0XFx0fVxcbm5ldC9zY2hlZC9hY3RfY3QuYzoxMjkwOlxcdFxcdHRjZl9jdF9zZXRfa2V5X3ZhbCh0YixcXG5uZXQvc2NoZWQvYWN0X2N0LmMtMTI5MS1cXHRcXHRcXHRcXHQgICBcXHUwMDI2cC1cXHUwMDNlbWFyaywgVENBX0NUX01BUkssXFxuLS1cXG5uZXQvc2NoZWQvYWN0X2N0LmMtMTI5Ni1cXHRpZiAodGJbVENBX0NUX0xBQkVMU10pIHtcXG5uZXQvc2NoZWQvYWN0X2N0LmM6MTI5NzpcXHRcXHR1bnNpZ25lZCBpbnQgbl9iaXRzID0gc2l6ZW9mX2ZpZWxkKHN0cnVjdCB0Y2ZfY3RfcGFyYW1zLCBsYWJlbHMpICogODtcXG5uZXQvc2NoZWQvYWN0X2N0LmMtMTI5OC1cXG4tLVxcbm5ldC9zY2hlZC9hY3RfY3QuYy0xMzEwLVxcbm5ldC9zY2hlZC9hY3RfY3QuYzoxMzExOlxcdFxcdHRjZl9jdF9zZXRfa2V5X3ZhbCh0YixcXG5uZXQvc2NoZWQvYWN0X2N0LmMtMTMxMi1cXHRcXHRcXHRcXHQgICBwLVxcdTAwM2VsYWJlbHMsIFRDQV9DVF9MQUJFTFMsXFxuLS1cXG5uZXQvc2NoZWQvYWN0X2N0LmMtMTMyMy1cXG5uZXQvc2NoZWQvYWN0X2N0LmM6MTMyNDpcXHRcXHR0Y2ZfY3Rfc2V0X2tleV92YWwodGIsXFxubmV0L3NjaGVkL2FjdF9jdC5jLTEzMjUtXFx0XFx0XFx0XFx0ICAgXFx1MDAyNnAtXFx1MDAzZXpvbmUsIFRDQV9DVF9aT05FLFxcbi0tXFxubmV0L3NjaGVkL2FjdF9jdC5jLTEzNzAtXFxubmV0L3NjaGVkL2FjdF9jdC5jOjEzNzE6c3RhdGljIGludCB0Y2ZfY3RfaW5pdChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBubGF0dHIgKm5sYSxcXG5uZXQvc2NoZWQvYWN0X2N0LmMtMTM3Mi1cXHRcXHQgICAgICAgc3RydWN0IG5sYXR0ciAqZXN0LCBzdHJ1Y3QgdGNfYWN0aW9uICoqYSxcXG4tLVxcbm5ldC9zY2hlZC9hY3RfY3QuYy0xMzc3LVxcdGJvb2wgYmluZCA9IGZsYWdzIFxcdTAwMjYgVENBX0FDVF9GTEFHU19CSU5EO1xcbm5ldC9zY2hlZC9hY3RfY3QuYzoxMzc4OlxcdHN0cnVjdCB0Y2ZfY3RfcGFyYW1zICpwYXJhbXMgPSBOVUxMO1xcbm5ldC9zY2hlZC9hY3RfY3QuYy0xMzc5LVxcdHN0cnVjdCBubGF0dHIgKnRiW1RDQV9DVF9NQVggKyAxXTtcXG4tLVxcbm5ldC9zY2hlZC9hY3RfY3QuYy0xNDM5LVxcbm5ldC9zY2hlZC9hY3RfY3QuYzoxNDQwOlxcdGVyciA9IHRjZl9jdF9maWxsX3BhcmFtcyhuZXQsIHBhcmFtcywgcGFybSwgdGIsIGV4dGFjayk7XFxubmV0L3NjaGVkL2FjdF9jdC5jLTE0NDEtXFx0aWYgKGVycilcXG4tLVxcbm5ldC9zY2hlZC9hY3RfY3QuYy0xNDQzLVxcbm5ldC9zY2hlZC9hY3RfY3QuYzoxNDQ0OlxcdGVyciA9IHRjZl9jdF9mbG93X3RhYmxlX2dldChuZXQsIHBhcmFtcyk7XFxubmV0L3NjaGVkL2FjdF9jdC5jLTE0NDUtXFx0aWYgKGVycilcXG4tLVxcbm5ldC9zY2hlZC9hY3RfY3QuYy0xNDU3LVxcdGlmIChwYXJhbXMpXFxubmV0L3NjaGVkL2FjdF9jdC5jOjE0NTg6XFx0XFx0Y2FsbF9yY3UoXFx1MDAyNnBhcmFtcy1cXHUwMDNlcmN1LCB0Y2ZfY3RfcGFyYW1zX2ZyZWVfcmN1KTtcXG5uZXQvc2NoZWQvYWN0X2N0LmMtMTQ1OS1cXG4tLVxcbm5ldC9zY2hlZC9hY3RfY3QuYy0xNDY1LVxcdGlmIChwYXJhbXMpXFxubmV0L3NjaGVkL2FjdF9jdC5jOjE0NjY6XFx0XFx0dGNmX2N0X3BhcmFtc19mcmVlKHBhcmFtcyk7XFxubmV0L3NjaGVkL2FjdF9jdC5jLTE0NjctXFx0dGNmX2lkcl9yZWxlYXNlKCphLCBiaW5kKTtcXG4tLVxcbm5ldC9zY2hlZC9hY3RfY3QuYy0xNDcwLVxcbm5ldC9zY2hlZC9hY3RfY3QuYzoxNDcxOnN0YXRpYyB2b2lkIHRjZl9jdF9jbGVhbnVwKHN0cnVjdCB0Y19hY3Rpb24gKmEpXFxubmV0L3NjaGVkL2FjdF9jdC5jLTE0NzIte1xcbm5ldC9zY2hlZC9hY3RfY3QuYzoxNDczOlxcdHN0cnVjdCB0Y2ZfY3RfcGFyYW1zICpwYXJhbXM7XFxubmV0L3NjaGVkL2FjdF9jdC5jLTE0NzQtXFx0c3RydWN0IHRjZl9jdCAqYyA9IHRvX2N0KGEpO1xcbi0tXFxubmV0L3NjaGVkL2FjdF9jdC5jLTE0NzctXFx0aWYgKHBhcmFtcylcXG5uZXQvc2NoZWQvYWN0X2N0LmM6MTQ3ODpcXHRcXHRjYWxsX3JjdShcXHUwMDI2cGFyYW1zLVxcdTAwM2VyY3UsIHRjZl9jdF9wYXJhbXNfZnJlZV9yY3UpO1xcbm5ldC9zY2hlZC9hY3RfY3QuYy0xNDc5LX1cXG5uZXQvc2NoZWQvYWN0X2N0LmMtMTQ4MC1cXG5uZXQvc2NoZWQvYWN0X2N0LmM6MTQ4MTpzdGF0aWMgaW50IHRjZl9jdF9kdW1wX2tleV92YWwoc3RydWN0IHNrX2J1ZmYgKnNrYixcXG5uZXQvc2NoZWQvYWN0X2N0LmMtMTQ4Mi1cXHRcXHRcXHQgICAgICAgY29uc3Qgdm9pZCAqdmFsLCBpbnQgdmFsX3R5cGUsXFxuLS1cXG5uZXQvc2NoZWQvYWN0X2N0LmMtMTUwMy1cXG5uZXQvc2NoZWQvYWN0X2N0LmM6MTUwNDpzdGF0aWMgaW50IHRjZl9jdF9kdW1wX25hdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBjb25zdCBzdHJ1Y3QgdGNmX2N0X3BhcmFtcyAqcClcXG5uZXQvc2NoZWQvYWN0X2N0LmMtMTUwNS17XFxuLS1cXG5uZXQvc2NoZWQvYWN0X2N0LmMtMTU0My1cXG5uZXQvc2NoZWQvYWN0X2N0LmM6MTU0NDpzdGF0aWMgaW50IHRjZl9jdF9kdW1wX2hlbHBlcihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbm5ldC9zY2hlZC9hY3RfY3QuYy0xNTQ1LVxcdFxcdFxcdCAgICAgIGNvbnN0IHN0cnVjdCBuZl9jb25udHJhY2tfaGVscGVyICpoZWxwZXIpXFxuLS1cXG5uZXQvc2NoZWQvYWN0X2N0LmMtMTU1Ny1cXG5uZXQvc2NoZWQvYWN0X2N0LmM6MTU1ODpzdGF0aWMgaW5saW5lIGludCB0Y2ZfY3RfZHVtcChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgdGNfYWN0aW9uICphLFxcbm5ldC9zY2hlZC9hY3RfY3QuYy0xNTU5LVxcdFxcdFxcdCAgICAgIGludCBiaW5kLCBpbnQgcmVmKVxcbi0tXFxubmV0L3NjaGVkL2FjdF9jdC5jLTE1NjItXFx0Y29uc3Qgc3RydWN0IHRjZl9jdCAqYyA9IHRvX2N0KGEpO1xcbm5ldC9zY2hlZC9hY3RfY3QuYzoxNTYzOlxcdGNvbnN0IHN0cnVjdCB0Y2ZfY3RfcGFyYW1zICpwO1xcbm5ldC9zY2hlZC9hY3RfY3QuYy0xNTY0LVxcdHN0cnVjdCB0Y19jdCBvcHQgPSB7XFxuLS1cXG5uZXQvc2NoZWQvYWN0X2N0LmMtMTU3NC1cXG5uZXQvc2NoZWQvYWN0X2N0LmM6MTU3NTpcXHRpZiAodGNmX2N0X2R1bXBfa2V5X3ZhbChza2IsXFxubmV0L3NjaGVkL2FjdF9jdC5jLTE1NzYtXFx0XFx0XFx0XFx0XFx1MDAyNnAtXFx1MDAzZWN0X2FjdGlvbiwgVENBX0NUX0FDVElPTixcXG4tLVxcbm5ldC9zY2hlZC9hY3RfY3QuYy0xNTg0LVxcdGlmIChJU19FTkFCTEVEKENPTkZJR19ORl9DT05OVFJBQ0tfTUFSSykgXFx1MDAyNlxcdTAwMjZcXG5uZXQvc2NoZWQvYWN0X2N0LmM6MTU4NTpcXHQgICAgdGNmX2N0X2R1bXBfa2V5X3ZhbChza2IsXFxubmV0L3NjaGVkL2FjdF9jdC5jLTE1ODYtXFx0XFx0XFx0XFx0XFx1MDAyNnAtXFx1MDAzZW1hcmssIFRDQV9DVF9NQVJLLFxcbi0tXFxubmV0L3NjaGVkL2FjdF9jdC5jLTE1OTEtXFx0aWYgKElTX0VOQUJMRUQoQ09ORklHX05GX0NPTk5UUkFDS19MQUJFTFMpIFxcdTAwMjZcXHUwMDI2XFxubmV0L3NjaGVkL2FjdF9jdC5jOjE1OTI6XFx0ICAgIHRjZl9jdF9kdW1wX2tleV92YWwoc2tiLFxcbm5ldC9zY2hlZC9hY3RfY3QuYy0xNTkzLVxcdFxcdFxcdFxcdHAtXFx1MDAzZWxhYmVscywgVENBX0NUX0xBQkVMUyxcXG4tLVxcbm5ldC9zY2hlZC9hY3RfY3QuYy0xNTk4LVxcdGlmIChJU19FTkFCTEVEKENPTkZJR19ORl9DT05OVFJBQ0tfWk9ORVMpIFxcdTAwMjZcXHUwMDI2XFxubmV0L3NjaGVkL2FjdF9jdC5jOjE1OTk6XFx0ICAgIHRjZl9jdF9kdW1wX2tleV92YWwoc2tiLFxcbm5ldC9zY2hlZC9hY3RfY3QuYy0xNjAwLVxcdFxcdFxcdFxcdFxcdTAwMjZwLVxcdTAwM2V6b25lLCBUQ0FfQ1RfWk9ORSxcXG4tLVxcbm5ldC9zY2hlZC9hY3RfY3QuYy0xNjA0LVxcbm5ldC9zY2hlZC9hY3RfY3QuYzoxNjA1OlxcdGlmICh0Y2ZfY3RfZHVtcF9uYXQoc2tiLCBwKSlcXG5uZXQvc2NoZWQvYWN0X2N0LmMtMTYwNi1cXHRcXHRnb3RvIG5sYV9wdXRfZmFpbHVyZTtcXG5uZXQvc2NoZWQvYWN0X2N0LmMtMTYwNy1cXG5uZXQvc2NoZWQvYWN0X2N0LmM6MTYwODpcXHRpZiAodGNmX2N0X2R1bXBfaGVscGVyKHNrYiwgcC1cXHUwMDNlaGVscGVyKSlcXG5uZXQvc2NoZWQvYWN0X2N0LmMtMTYwOS1cXHRcXHRnb3RvIG5sYV9wdXRfZmFpbHVyZTtcXG4tLVxcbm5ldC9zY2hlZC9hY3RfY3QuYz0xNjI3PXN0YXRpYyB2b2lkIHRjZl9zdGF0c191cGRhdGUoc3RydWN0IHRjX2FjdGlvbiAqYSwgdTY0IGJ5dGVzLCB1NjQgcGFja2V0cyxcXG4tLVxcbm5ldC9zY2hlZC9hY3RfY3QuYy0xNjM1LVxcbm5ldC9zY2hlZC9hY3RfY3QuYzoxNjM2OnN0YXRpYyBpbnQgdGNmX2N0X29mZmxvYWRfYWN0X3NldHVwKHN0cnVjdCB0Y19hY3Rpb24gKmFjdCwgdm9pZCAqZW50cnlfZGF0YSxcXG5uZXQvc2NoZWQvYWN0X2N0LmMtMTYzNy1cXHRcXHRcXHRcXHQgICAgdTMyICppbmRleF9pbmMsIGJvb2wgYmluZCxcXG4tLVxcbm5ldC9zY2hlZC9hY3RfY3QuYy0xNjQyLVxcbm5ldC9zY2hlZC9hY3RfY3QuYzoxNjQzOlxcdFxcdGlmICh0Y2ZfY3RfaGVscGVyKGFjdCkpXFxubmV0L3NjaGVkL2FjdF9jdC5jLTE2NDQtXFx0XFx0XFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xcbi0tXFxubmV0L3NjaGVkL2FjdF9jdC5jLTE2NDYtXFx0XFx0ZW50cnktXFx1MDAzZWlkID0gRkxPV19BQ1RJT05fQ1Q7XFxubmV0L3NjaGVkL2FjdF9jdC5jOjE2NDc6XFx0XFx0ZW50cnktXFx1MDAzZWN0LmFjdGlvbiA9IHRjZl9jdF9hY3Rpb24oYWN0KTtcXG5uZXQvc2NoZWQvYWN0X2N0LmM6MTY0ODpcXHRcXHRlbnRyeS1cXHUwMDNlY3Quem9uZSA9IHRjZl9jdF96b25lKGFjdCk7XFxubmV0L3NjaGVkL2FjdF9jdC5jOjE2NDk6XFx0XFx0ZW50cnktXFx1MDAzZWN0LmZsb3dfdGFibGUgPSB0Y2ZfY3RfZnQoYWN0KTtcXG5uZXQvc2NoZWQvYWN0X2N0LmMtMTY1MC1cXHRcXHQqaW5kZXhfaW5jID0gMTtcXG4tLVxcbm5ldC9zY2hlZC9hY3RfY3QuYy0xNjU5LVxcbm5ldC9zY2hlZC9hY3RfY3QuYzoxNjYwOnN0YXRpYyBzaXplX3QgdGNmX2N0X2dldF9maWxsX3NpemUoY29uc3Qgc3RydWN0IHRjX2FjdGlvbiAqYWN0KVxcbm5ldC9zY2hlZC9hY3RfY3QuYy0xNjYxLXtcXG5uZXQvc2NoZWQvYWN0X2N0LmM6MTY2MjpcXHRjb25zdCBzdHJ1Y3QgdGNmX2N0X3BhcmFtcyAqcDtcXG5uZXQvc2NoZWQvYWN0X2N0LmMtMTY2My1cXHRzaXplX3Qgc2l6ZTtcXG4tLVxcbm5ldC9zY2hlZC9hY3RfY3QuYz0xNzA1PXN0YXRpYyBzdHJ1Y3QgdGNfYWN0aW9uX29wcyBhY3RfY3Rfb3BzID0ge1xcbi0tXFxubmV0L3NjaGVkL2FjdF9jdC5jLTE3MDgtXFx0Lm93bmVyXFx0XFx0PVxcdFRISVNfTU9EVUxFLFxcbm5ldC9zY2hlZC9hY3RfY3QuYzoxNzA5OlxcdC5hY3RcXHRcXHQ9XFx0dGNmX2N0X2FjdCxcXG5uZXQvc2NoZWQvYWN0X2N0LmM6MTcxMDpcXHQuZHVtcFxcdFxcdD1cXHR0Y2ZfY3RfZHVtcCxcXG5uZXQvc2NoZWQvYWN0X2N0LmM6MTcxMTpcXHQuaW5pdFxcdFxcdD1cXHR0Y2ZfY3RfaW5pdCxcXG5uZXQvc2NoZWQvYWN0X2N0LmM6MTcxMjpcXHQuY2xlYW51cFxcdD1cXHR0Y2ZfY3RfY2xlYW51cCxcXG5uZXQvc2NoZWQvYWN0X2N0LmMtMTcxMy1cXHQuc3RhdHNfdXBkYXRlXFx0PVxcdHRjZl9zdGF0c191cGRhdGUsXFxubmV0L3NjaGVkL2FjdF9jdC5jOjE3MTQ6XFx0LmdldF9maWxsX3NpemVcXHQ9XFx0dGNmX2N0X2dldF9maWxsX3NpemUsXFxubmV0L3NjaGVkL2FjdF9jdC5jOjE3MTU6XFx0Lm9mZmxvYWRfYWN0X3NldHVwID1cXHR0Y2ZfY3Rfb2ZmbG9hZF9hY3Rfc2V0dXAsXFxubmV0L3NjaGVkL2FjdF9jdC5jLTE3MTYtXFx0LnNpemVcXHRcXHQ9XFx0c2l6ZW9mKHN0cnVjdCB0Y2ZfY3QpLFxcbi0tXFxubmV0L3NjaGVkL2FjdF9jdC5jPTE3Mzk9c3RhdGljIGludCBfX2luaXQgY3RfaW5pdF9tb2R1bGUodm9pZClcXG4tLVxcbm5ldC9zY2hlZC9hY3RfY3QuYy0xNzQ2LVxcbm5ldC9zY2hlZC9hY3RfY3QuYzoxNzQ3OlxcdGVyciA9IHRjZl9jdF9mbG93X3RhYmxlc19pbml0KCk7XFxubmV0L3NjaGVkL2FjdF9jdC5jLTE3NDgtXFx0aWYgKGVycilcXG4tLVxcbm5ldC9zY2hlZC9hY3RfY3QuYy0xNzU5LWVycl9yZWdpc3RlcjpcXG5uZXQvc2NoZWQvYWN0X2N0LmM6MTc2MDpcXHR0Y2ZfY3RfZmxvd190YWJsZXNfdW5pbml0KCk7XFxubmV0L3NjaGVkL2FjdF9jdC5jLTE3NjEtZXJyX3RibF9pbml0Olxcbi0tXFxubmV0L3NjaGVkL2FjdF9jdC5jPTE3NjY9c3RhdGljIHZvaWQgX19leGl0IGN0X2NsZWFudXBfbW9kdWxlKHZvaWQpXFxuLS1cXG5uZXQvc2NoZWQvYWN0X2N0LmMtMTc2OS1cXHR0Y2ZfdW5yZWdpc3Rlcl9hY3Rpb24oXFx1MDAyNmFjdF9jdF9vcHMsIFxcdTAwMjZjdF9uZXRfb3BzKTtcXG5uZXQvc2NoZWQvYWN0X2N0LmM6MTc3MDpcXHR0Y2ZfY3RfZmxvd190YWJsZXNfdW5pbml0KCk7XFxubmV0L3NjaGVkL2FjdF9jdC5jLTE3NzEtXFx0ZGVzdHJveV93b3JrcXVldWUoYWN0X2N0X3dxKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDlUMDg6Mzk6NDAuMTcwNjEyODA2WiIsIlNlcSI6MjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjQyNTc1ODc1NTMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQW5hbHlzaXMgb2YgQ29ubmVjdGlvbiBUcmFja2luZyBDb25maWd1cmF0aW9uKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duIHN5c3RlbWF0aWNhbGx5LiBGaXJzdCwgSSBuZWVkIHRvIGNvbmZpcm0gdGhlIGtleSBzeW1ib2xzIHJlbGF0ZWQgdG8gY29ubmVjdGlvbiB0cmFja2luZy4gSSd2ZSBmbGFnZ2VkIHRoZXNlIGZ1bmN0aW9ucyBhcyBwb3RlbnRpYWxseSBpbnRlcmVzdGluZzogYHRjZl9jdF9mbG93X3RhYmxlX2dldGAsIGB0Y2ZfY3RfaW5pdGAsIGB0Y2ZfY3RfYWN0YCwgYW5kIGBuZl9mbG93X3RhYmxlX2luaXRgLiBUaGVzZSBhcHBlYXIgdG8gYmUgdGhlIGNvcmUga2VybmVsIGZ1bmN0aW9ucyBJJ20gaW50ZXJlc3RlZCBpbiB0ZXN0aW5nLlxuXG5OZXh0LCBJIG5lZWQgdG8gZW5zdXJlIGFsbCB0aGUgcmVsZXZhbnQgY29uZmlndXJhdGlvbiBvcHRpb25zIGFyZSBlbmFibGVkIHRvIGZ1bGx5IGV4ZXJjaXNlIHRoaXMgZnVuY3Rpb25hbGl0eS4gSSBzZWUgYSBsaXN0IG9mIGxpa2VseSBjYW5kaWRhdGVzOiBgTkVUX0FDVF9DVGAsIGBORVRfQ0xTX0FDVGAsIGBORl9DT05OVFJBQ0tgLCBhbmQgYE5GX0ZMT1dfVEFCTEVgLiBJdCdzIGEgZ29vZCBzdGFydGluZyBwb2ludCwgYnV0IEkgbmVlZCB0byBiZSBzdXJlLlxuXG5EaWdnaW5nIGludG8gdGhlIGBuZXQvc2NoZWQvS2NvbmZpZ2AgZmlsZSBpcyBjcnVjaWFsIGhlcmUuIFRoZSBkZWZpbml0aW9uIG9mIGBORVRfQUNUX0NUYCBpcyBwYXJ0aWN1bGFybHkgcmV2ZWFsaW5nLiBJdCB0ZWxscyBtZSB0aGF0IGBORVRfQUNUX0NUYCBkZXBlbmRzIG9uIGBORVRfQ0xTX0FDVGAsIGBORl9DT05OVFJBQ0tgLCBhbmQgYE5GX0ZMT1dfVEFCTEVgLCBhbmQgaXQgb3B0aW9uYWxseSBzZWxlY3RzIGBORl9OQVRfT1ZTYCBpZiBgTkZfTkFUYCBpcyBhbHNvIGVuYWJsZWQuIFRoZSBkZXBlbmRlbmN5IG9uIGBORl9GTE9XX1RBQkxFYCBpcyBwYXJ0aWN1bGFybHkgaW1wb3J0YW50LCBjb25maXJtaW5nIG15IGluaXRpYWwgYXNzZXNzbWVudC4gRnVydGhlcm1vcmUsIGl0ICpzZWxlY3RzKiBgTkZfQ09OTlRSQUNLX09WU2AsIHNvIEkgbmVlZCB0byBiZSBhd2FyZSBvZiB0aGUgaW1wbGljYXRpb25zLiBUaGlzIG1ha2VzIG1lIGNvbmZpZGVudCB0aGF0IGVuYWJsaW5nIGFsbCB0aGVzZSBjb25maWdzIOKAkyBgTkVUX0FDVF9DVGAsIGBORVRfQ0xTX0FDVGAsIGBORl9DT05OVFJBQ0tgLCBhbmQgYE5GX0ZMT1dfVEFCTEVgIOKAkyBzaG91bGQgZW5zdXJlIHRoYXQgZXZlcnl0aGluZyBpcyBjb21waWxlZCBhbmQgYXZhaWxhYmxlIGZvciB0ZXN0aW5nLlxuXG5UbyBiZSBjb21wbGV0ZWx5IHRob3JvdWdoLCBJJ20gZ29pbmcgdG8gZG91YmxlLWNoZWNrIG15IGZpbmRpbmdzLiBJJ20gY29uZmlybWluZyB0aGF0IHRoaXMgY29tcG9uZW50IGlzIGluZGVlZCBmbGFnZ2VkIGFzIFwiV29ydGhGdXp6aW5nXCIgYW5kIHJlLXZlcmlmeWluZyBteSBsaXN0cyBvZiBgRW5hYmxlQ29uZmlnc2AgYW5kIGBGb2N1c1N5bWJvbHNgLiBGaW5hbGx5LCBJJ20gZ29pbmcgdG8gaW5jbHVkZSBhIGNvbmNpc2UgcmVhc29uaW5nIHN0YXRlbWVudCB0aGF0IHN1bW1hcml6ZXMgbXkgZmluZGluZ3MsIGJlY2F1c2UgY2xlYXIgZG9jdW1lbnRhdGlvbiBpcyBhbHdheXMgaW1wb3J0YW50LiBUaGlzIHNlZW1zIHNvbGlkLCBzbyBJJ20gcmVhZHkgdG8gbW92ZSBmb3J3YXJkLiBUaW1lIHRvIGNhbGwgYHNldC1yZXN1bHRzYC5cblxuXG4iLCJJbnB1dFRva2VucyI6MzY4MDEsIk91dHB1dFRva2VucyI6MTg2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzcxLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA5VDA4OjM5OjQ0LjQyODIwMzc3OVoiLCJTZXEiOjI2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEzMTY5MTY5OCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiTkVUX0FDVF9DVFwiLFxuICAgIFwiTkVUX0NMU19BQ1RcIixcbiAgICBcIk5GX0NPTk5UUkFDS1wiLFxuICAgIFwiTkZfRkxPV19UQUJMRVwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInRjZl9jdF9mbG93X3RhYmxlX2dldFwiLFxuICAgIFwidGNmX2N0X2luaXRcIixcbiAgICBcInRjZl9jdF9hY3RcIixcbiAgICBcIm5mX2Zsb3dfdGFibGVfaW5pdFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGZpeGVzIHRoZSBpbml0aWFsaXphdGlvbiBvcmRlciBpbiB0Y2ZfY3RfZmxvd190YWJsZV9nZXQoKSBieSBzZXR0aW5nIHRoZSBuZXRucyBwb2ludGVyICh3cml0ZV9wbmV0KSBiZWZvcmUgY2FsbGluZyBuZl9mbG93X3RhYmxlX2luaXQoKSwgcHJldmVudGluZyBwb3RlbnRpYWwgcmFjZXMgb3IgdW5pbml0aWFsaXplZCBuZXRucyBhY2Nlc3MgZHVyaW5nIGZsb3cgdGFibGUgaW5pdGlhbGl6YXRpb24uIFRoZSBjb2RlIGlzIHBhcnQgb2YgdGhlIFRDIGNvbm5lY3Rpb24gdHJhY2tpbmcgYWN0aW9uIChhY3RfY3QpIGFuZCBpcyByZWFjaGFibGUgdmlhIHJ0bmV0bGluayB0YyBhY3Rpb24gY29tbWFuZHMgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIk5FVF9BQ1RfQ1RcIixcbiAgICBcIk5FVF9DTFNfQUNUXCIsXG4gICAgXCJORl9DT05OVFJBQ0tcIixcbiAgICBcIk5GX0ZMT1dfVEFCTEVcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJ0Y2ZfY3RfZmxvd190YWJsZV9nZXRcIixcbiAgICBcInRjZl9jdF9pbml0XCIsXG4gICAgXCJ0Y2ZfY3RfYWN0XCIsXG4gICAgXCJuZl9mbG93X3RhYmxlX2luaXRcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBmaXhlcyB0aGUgaW5pdGlhbGl6YXRpb24gb3JkZXIgaW4gdGNmX2N0X2Zsb3dfdGFibGVfZ2V0KCkgYnkgc2V0dGluZyB0aGUgbmV0bnMgcG9pbnRlciAod3JpdGVfcG5ldCkgYmVmb3JlIGNhbGxpbmcgbmZfZmxvd190YWJsZV9pbml0KCksIHByZXZlbnRpbmcgcG90ZW50aWFsIHJhY2VzIG9yIHVuaW5pdGlhbGl6ZWQgbmV0bnMgYWNjZXNzIGR1cmluZyBmbG93IHRhYmxlIGluaXRpYWxpemF0aW9uLiBUaGUgY29kZSBpcyBwYXJ0IG9mIHRoZSBUQyBjb25uZWN0aW9uIHRyYWNraW5nIGFjdGlvbiAoYWN0X2N0KSBhbmQgaXMgcmVhY2hhYmxlIHZpYSBydG5ldGxpbmsgdGMgYWN0aW9uIGNvbW1hbmRzIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkIGVudmlyb25tZW50cy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDlUMDg6Mzk6NDQuNTU5OTAzMDg3WiIsIlNlcSI6MjcsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoiSWYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozNzU0MzE4NzY1NiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA5VDA4OjM5OjQ0LjU2MDM3MTYzN1oiLCJTZXEiOjI4LCJOZXN0aW5nIjoyLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJjb3JlIiwiRHVyYXRpb24iOjM3NTQyNzEzMzg2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCByZW9yZGVycyB0aGUgaW5pdGlhbGl6YXRpb24gb2YgdGhlIGZsb3cgdGFibGUncyBuZXR3b3JrIG5hbWVzcGFjZSBwb2ludGVyIChgd3JpdGVfcG5ldChcXHUwMDI2Y3RfZnQtXFx1MDAzZW5mX2Z0Lm5ldCwgbmV0KWApIHNvIHRoYXQgaXQgb2NjdXJzIHByaW9yIHRvIGNhbGxpbmcgYG5mX2Zsb3dfdGFibGVfaW5pdChcXHUwMDI2Y3RfZnQtXFx1MDAzZW5mX2Z0KWAuXFxuXFxuVGhlIGVuY2xvc2luZyBgc3RydWN0IHRjZl9jdF9mbG93X3RhYmxlYCAoYGN0X2Z0YCkgaXMgYWxsb2NhdGVkIHZpYSBga3phbGxvY19vYmpgLCBlbnN1cmluZyBhbGwgZmllbGRzIGFuZCBwYWRkaW5nIGFyZSB6ZXJvLWluaXRpYWxpemVkLiBQcmlvciB0byB0aGUgZml4LCBhY2Nlc3NpbmcgYG5mX2Z0Lm5ldGAgYmVmb3JlIGB3cml0ZV9wbmV0YCB3b3VsZCByZWFkIGEgemVyb2VkL05VTEwgcG9pbnRlciAod2hpY2ggd291bGQgbWFuaWZlc3QgYXMgYSBOVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2Ugb3IgbG9naWNhbCBlcnJvciwgY2F1Z2h0IGJ5IHN0YW5kYXJkIGNyYXNoIGhhbmRsZXJzIGFuZCBLQVNBTiksIHJhdGhlciB0aGFuIHVuaW5pdGlhbGl6ZWQgbWVtb3J5Llxcblxcbk5vIHVuaW5pdGlhbGl6ZWQgc3RhY2sgb3IgaGVhcCBtZW1vcnkgaXMgaW50cm9kdWNlZCBvciBleHBvc2VkLCBubyB1bmluaXRpYWxpemVkIGZpZWxkcyBhcmUgcmVhZCBvciBjb3BpZWQgdG8gdXNlcnNwYWNlLCBhbmQgbm8gYnVmZmVyIGJvdW5kcyBvciBsZW5ndGhzIGFyZSBhZmZlY3RlZC4gSGVuY2UsIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIGlzIG5vdCBuZWVkZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5XG5lcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZFxuZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKVxuZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuXG5cbkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOlxuLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlXG4gIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTlxuICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQXG4gIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuXG4tIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLFxuICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuXG5cblJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sXG5MT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLlxuQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWVxuc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3NcbnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uXG5cbkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0XG51bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZixcbmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5c1xudGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmdcbnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbFxuZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLFxuY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuXG5cblNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczpcbjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiXG4gICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkc1xuICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC5cbjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXNcbiAgIG9yIHN0cnVjdCBmaWVsZHMuXG4zLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzXG4gICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLlxuNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3NcbiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy5cblxuU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6XG4tIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyXG4gIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodFxuICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuXG4tIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkXG4gIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC5cbi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLlxuXG5Vc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlXG5kZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiVGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjRcblxuRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgODk0YjkxYzM4NDRjOWY5NWQ3MTNiYmUxNTMwZjc0MDliNzI1YTNiYlxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBXZWQgU2VwIDkgMDg6Mzg6MzQgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9uZXQvc2NoZWQvYWN0X2N0LmMgYi9uZXQvc2NoZWQvYWN0X2N0LmNcbmluZGV4IDkwODBjYjM4NmMxNjkuLjZiZDE5ZGI2OGQ5NzEgMTAwNjQ0XG4tLS0gYS9uZXQvc2NoZWQvYWN0X2N0LmNcbisrKyBiL25ldC9zY2hlZC9hY3RfY3QuY1xuQEAgLTM0OSwxMCArMzQ5LDEwIEBAIHN0YXRpYyBpbnQgdGNmX2N0X2Zsb3dfdGFibGVfZ2V0KHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHRjZl9jdF9wYXJhbXMgKnBhcmFtcylcbiBcdGN0X2Z0LVx1MDAzZW5mX2Z0LnR5cGUgPSBcdTAwMjZmbG93dGFibGVfY3Q7XG4gXHRjdF9mdC1cdTAwM2VuZl9mdC5mbGFncyB8PSBORl9GTE9XVEFCTEVfSFdfT0ZGTE9BRCB8XG4gXHRcdFx0ICAgICAgTkZfRkxPV1RBQkxFX0NPVU5URVI7XG4rXHR3cml0ZV9wbmV0KFx1MDAyNmN0X2Z0LVx1MDAzZW5mX2Z0Lm5ldCwgbmV0KTtcbiBcdGVyciA9IG5mX2Zsb3dfdGFibGVfaW5pdChcdTAwMjZjdF9mdC1cdTAwM2VuZl9mdCk7XG4gXHRpZiAoZXJyKVxuIFx0XHRnb3RvIGVycl9pbml0O1xuLVx0d3JpdGVfcG5ldChcdTAwMjZjdF9mdC1cdTAwM2VuZl9mdC5uZXQsIG5ldCk7XG4gXG4gXHRfX21vZHVsZV9nZXQoVEhJU19NT0RVTEUpO1xuIG91dF91bmxvY2s6XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOVQwODozOTo0NC41NjAzNzM5NjdaIiwiU2VxIjoyOSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MTQ5MDg5MTYxNDgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqS01TQU4gRnV6emluZyBFdmFsdWF0aW9uIC0gQWN0X0NUIFBhdGNoKipcblxuQWxyaWdodCwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBNeSBnb2FsIGlzIHRvIGRldGVybWluZSBpZiB0aGlzIGBhY3RfY3QuY2AgcGF0Y2ggd2FycmFudHMgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uLCBvciBpZiB0aGUgc3RhbmRhcmQgS0FTQU4vTE9DS0RFUCBjaGVja3Mgc3VmZmljZS4gVGhpcyBpcyBhIHN0YW5kYXJkIGJlbmlnbi9kZWZlbnNpdmUga2VybmVsIHNhbml0aXplciBhc3Nlc3NtZW50LCBhIHR5cGljYWwgUUEgdGFzaywgc28gbGV0J3Mga2VlcCBpdCBzaW1wbGUuIFRoZSBzZWN1cml0eSBndWlkZWxpbmVzIGFyZSBjbGVhcjogYW5hbHl6ZSB0aGUgcGF0Y2gsIGFzc2VzcyB0aGUgY29udGV4dCwgYW5kIHV0aWxpemUgdGhlIHByb3ZpZGVkIHRvb2xzIGlmIG5lZWRlZC5cblxuRmlyc3QsIGxldCdzIGV4YW1pbmUgdGhlIGNvZGUuIFRoaXMgZGlmZiBzZWVtcyByZWxhdGl2ZWx5IHN0cmFpZ2h0Zm9yd2FyZC4gSXQncyBhIHJlb3JkZXJpbmcgb2YgdGhlIGB3cml0ZV9wbmV0YCBjYWxsIGFyb3VuZCBgbmZfZmxvd190YWJsZV9pbml0YC4gVGhlIG9yaWdpbmFsIGNvZGUgaGFkIGB3cml0ZV9wbmV0YCAqYWZ0ZXIqIGEgcG90ZW50aWFsIGZhaWx1cmUuIFRoZSBjaGFuZ2VkIGNvZGUgbW92ZXMgdGhlIGNhbGwgKmJlZm9yZSogaW5pdGlhbGl6YXRpb24uIEl0J3MgaW1wb3J0YW50IHRvIHVuZGVyc3RhbmQgKndoeSogdGhpcyBjaGFuZ2Ugd2FzIG1hZGUuXG5cbkkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQgYG5mX2Zsb3dfdGFibGVfaW5pdGAgYWN0dWFsbHkgZG9lcyBhbmQgd2hhdCBgZXJyX2luaXRgIGVudGFpbHMuIEp1bXBpbmcgdG8gYG5ldC9zY2hlZC9hY3RfY3QuY2AgYW5kIGxvb2tpbmcgYXJvdW5kIGxpbmUgMzQ5IGlzIHRoZSBuZXh0IHN0ZXAgdG8gZ2FpbiBhIGJldHRlciB1bmRlcnN0YW5kaW5nIG9mIHBvdGVudGlhbCByaXNrcyBhc3NvY2lhdGVkIHdpdGggdGhpcyBjaGFuZ2UuIFRoZSBnb2FsIGlzIHRvIHNlZSBpZiBhbnkgdW5pbml0aWFsaXplZCBkYXRhIG9yIHJhY2UgY29uZGl0aW9ucyBhcmUgZXhwb3NlZCBieSB0aGlzIGNvZGUgcmVvcmRlcmluZy4gVGhlbiBJIHdpbGwgZGV0ZXJtaW5lIHRoZSByaXNrIG9mIEtNU0FOIGJhc2VkIG9uIHRoYXQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIxNTMsIk91dHB1dFRva2VucyI6MzcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0MjMsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOVQwODozOTo1OS40NjkyOTI0NzRaIiwiU2VxIjozMCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTMxMjEwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9zY2hlZC9hY3RfY3QuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAzMzAsXG4gIFwiTGluZUNvdW50XCI6IDYwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAzMzA6XFx0XFx0bXV0ZXhfbG9jayhcXHUwMDI2em9uZXNfbXV0ZXgpO1xcbiAzMzE6XFx0XFx0cmN1X3JlYWRfbG9jaygpO1xcbiAzMzI6XFx0XFx0Y3RfZnQgPSByaGFzaHRhYmxlX2xvb2t1cChcXHUwMDI2em9uZXNfaHQsIFxcdTAwMjZrZXksIHpvbmVzX3BhcmFtcyk7XFxuIDMzMzpcXHRcXHRpZiAoY3RfZnQgXFx1MDAyNlxcdTAwMjYgcmVmY291bnRfaW5jX25vdF96ZXJvKFxcdTAwMjZjdF9mdC1cXHUwMDNlcmVmKSkge1xcbiAzMzQ6XFx0XFx0XFx0cmN1X3JlYWRfdW5sb2NrKCk7XFxuIDMzNTpcXHRcXHRcXHRnb3RvIG91dF91bmxvY2s7XFxuIDMzNjpcXHRcXHR9XFxuIDMzNzpcXHRcXHRyY3VfcmVhZF91bmxvY2soKTtcXG4gMzM4OlxcdFxcbiAzMzk6XFx0XFx0Y3RfZnQgPSBremFsbG9jX29iaigqY3RfZnQpO1xcbiAzNDA6XFx0XFx0aWYgKCFjdF9mdClcXG4gMzQxOlxcdFxcdFxcdGdvdG8gZXJyX2FsbG9jO1xcbiAzNDI6XFx0XFx0cmVmY291bnRfc2V0KFxcdTAwMjZjdF9mdC1cXHUwMDNlcmVmLCAxKTtcXG4gMzQzOlxcdFxcbiAzNDQ6XFx0XFx0Y3RfZnQtXFx1MDAzZWtleSA9IGtleTtcXG4gMzQ1OlxcdFxcdGVyciA9IHJoYXNodGFibGVfaW5zZXJ0X2Zhc3QoXFx1MDAyNnpvbmVzX2h0LCBcXHUwMDI2Y3RfZnQtXFx1MDAzZW5vZGUsIHpvbmVzX3BhcmFtcyk7XFxuIDM0NjpcXHRcXHRpZiAoZXJyKVxcbiAzNDc6XFx0XFx0XFx0Z290byBlcnJfaW5zZXJ0O1xcbiAzNDg6XFx0XFxuIDM0OTpcXHRcXHRjdF9mdC1cXHUwMDNlbmZfZnQudHlwZSA9IFxcdTAwMjZmbG93dGFibGVfY3Q7XFxuIDM1MDpcXHRcXHRjdF9mdC1cXHUwMDNlbmZfZnQuZmxhZ3MgfD0gTkZfRkxPV1RBQkxFX0hXX09GRkxPQUQgfFxcbiAzNTE6XFx0XFx0XFx0XFx0ICAgICAgTkZfRkxPV1RBQkxFX0NPVU5URVI7XFxuIDM1MjpcXHRcXHR3cml0ZV9wbmV0KFxcdTAwMjZjdF9mdC1cXHUwMDNlbmZfZnQubmV0LCBuZXQpO1xcbiAzNTM6XFx0XFx0ZXJyID0gbmZfZmxvd190YWJsZV9pbml0KFxcdTAwMjZjdF9mdC1cXHUwMDNlbmZfZnQpO1xcbiAzNTQ6XFx0XFx0aWYgKGVycilcXG4gMzU1OlxcdFxcdFxcdGdvdG8gZXJyX2luaXQ7XFxuIDM1NjpcXHRcXG4gMzU3OlxcdFxcdF9fbW9kdWxlX2dldChUSElTX01PRFVMRSk7XFxuIDM1ODpcXHRvdXRfdW5sb2NrOlxcbiAzNTk6XFx0XFx0cGFyYW1zLVxcdTAwM2VjdF9mdCA9IGN0X2Z0O1xcbiAzNjA6XFx0XFx0cGFyYW1zLVxcdTAwM2VuZl9mdCA9IFxcdTAwMjZjdF9mdC1cXHUwMDNlbmZfZnQ7XFxuIDM2MTpcXHRcXHRtdXRleF91bmxvY2soXFx1MDAyNnpvbmVzX211dGV4KTtcXG4gMzYyOlxcdFxcbiAzNjM6XFx0XFx0cmV0dXJuIDA7XFxuIDM2NDpcXHRcXG4gMzY1OlxcdGVycl9pbml0OlxcbiAzNjY6XFx0XFx0cmhhc2h0YWJsZV9yZW1vdmVfZmFzdChcXHUwMDI2em9uZXNfaHQsIFxcdTAwMjZjdF9mdC1cXHUwMDNlbm9kZSwgem9uZXNfcGFyYW1zKTtcXG4gMzY3OlxcdGVycl9pbnNlcnQ6XFxuIDM2ODpcXHRcXHRrZnJlZShjdF9mdCk7XFxuIDM2OTpcXHRlcnJfYWxsb2M6XFxuIDM3MDpcXHRcXHRtdXRleF91bmxvY2soXFx1MDAyNnpvbmVzX211dGV4KTtcXG4gMzcxOlxcdFxcdHJldHVybiBlcnI7XFxuIDM3MjpcXHR9XFxuIDM3MzpcXHRcXG4gMzc0OlxcdHN0YXRpYyB2b2lkIHRjZl9jdF9mbG93X3RhYmxlX2dldF9yZWYoc3RydWN0IHRjZl9jdF9mbG93X3RhYmxlICpjdF9mdClcXG4gMzc1OlxcdHtcXG4gMzc2OlxcdFxcdHJlZmNvdW50X2luYyhcXHUwMDI2Y3RfZnQtXFx1MDAzZXJlZik7XFxuIDM3NzpcXHR9XFxuIDM3ODpcXHRcXG4gMzc5OlxcdHN0YXRpYyB2b2lkIHRjZl9jdF9mbG93X3RhYmxlX2NsZWFudXBfd29yayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXFxuIDM4MDpcXHR7XFxuIDM4MTpcXHRcXHRzdHJ1Y3QgdGNmX2N0X2Zsb3dfdGFibGUgKmN0X2Z0O1xcbiAzODI6XFx0XFx0c3RydWN0IGZsb3dfYmxvY2sgKmJsb2NrO1xcbiAzODM6XFx0XFxuIDM4NDpcXHRcXHRjdF9mdCA9IGNvbnRhaW5lcl9vZih0b19yY3Vfd29yayh3b3JrKSwgc3RydWN0IHRjZl9jdF9mbG93X3RhYmxlLFxcbiAzODU6XFx0XFx0XFx0XFx0ICAgICByd29yayk7XFxuIDM4NjpcXHRcXHRuZl9mbG93X3RhYmxlX2ZyZWUoXFx1MDAyNmN0X2Z0LVxcdTAwM2VuZl9mdCk7XFxuIDM4NzpcXHRcXG4gMzg4OlxcdFxcdGJsb2NrID0gXFx1MDAyNmN0X2Z0LVxcdTAwM2VuZl9mdC5mbG93X2Jsb2NrO1xcbiAzODk6XFx0XFx0ZG93bl93cml0ZShcXHUwMDI2Y3RfZnQtXFx1MDAzZW5mX2Z0LmZsb3dfYmxvY2tfbG9jayk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA5VDA4OjM5OjU5LjQ2OTQyNTQzNVoiLCJTZXEiOjMxLCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjozNDc1MzQ4NDg1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYW5hbHlzaXMgb2Ygd2hhdCBJJ20gdGhpbmtpbmcsIHJlbmRlcmVkIGFzIGEgZmlyc3QtcGVyc29uIHN1bW1hcnksIGtlZXBpbmcgaW4gbWluZCBteSBmaWVsZCBleHBlcnRpc2U6XG5cbioqRGl2aW5nIGludG8gdGhlIEZsb3cgVGFibGUgSW5pdGlhbGl6YXRpb24qKlxuXG5Pa2F5LCB0aW1lIHRvIGdldCBteSBoYW5kcyBkaXJ0eSBhbmQgdW5kZXJzdGFuZCBob3cgdGhlIE5ldHdvcmsgRmlsdGVyIChuZikgZmxvdyB0YWJsZSBpcyBpbml0aWFsaXplZC4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMsIFwiTGV0J3MgdHJhY2sgZG93biB0aGUgYG5mX2Zsb3dfdGFibGVfaW5pdGAgZnVuY3Rpb24uXCIgSXQncyB0aGUgc3RhcnRpbmcgcG9pbnQgZm9yIHRoaXMgY3J1Y2lhbCBkYXRhIHN0cnVjdHVyZS4gSSdsbCByZWFjaCBmb3IgYGdyZXBgIChvciBteSBwcmVmZXJyZWQgc2VhcmNoIHRvb2wgaW4gdGhlIGtlcm5lbCBzb3VyY2UsIGRlcGVuZGluZyBvbiB0aGUgcHJvamVjdCBjb250ZXh0KSB0byBxdWlja2x5IGxvY2F0ZSBhbGwgaW5zdGFuY2VzIG9mIGBuZl9mbG93X3RhYmxlX2luaXRgLiBUaGF0IHNob3VsZCBnaXZlIG1lIHRoZSBlbnRyeSBwb2ludHMsIHVzYWdlcywgYW5kIGxpa2VseSB0aGUgY3JpdGljYWwgaW5jbHVkZSBmaWxlcyBJIG5lZWQgdG8gZ2V0IGEgaGlnaC1sZXZlbCB2aWV3IG9mIGhvdyB0aGlzIHRoaW5nIGdldHMgb2ZmIHRoZSBncm91bmQuIEZyb20gdGhlcmUsIEkgY2FuIGJlZ2luIHRvIHVucGFjayB0aGUgZGF0YSBzdHJ1Y3R1cmVzLCBtdXRleGVzLCBtZW1vcnkgYWxsb2NhdGlvbiBzdHJhdGVnaWVzLCBhbmQgb3ZlcmFsbCBsb2dpYyBpbnZvbHZlZCBpbiBzZXR0aW5nIHVwIHRoZSBmbG93IHRhYmxlIGZvciBlZmZpY2llbnQgcGFja2V0IHByb2Nlc3NpbmcuIFRoaXMgc2VhcmNoIGlzIG15IGZpcnN0LCBjcnVjaWFsIHN0ZXAgdG93YXJkIHVuZGVyc3RhbmRpbmcgdGhlIGZsb3cgdGFibGUncyBiZWhhdmlvci5cblxuXG4iLCJJbnB1dFRva2VucyI6Mzg1MiwiT3V0cHV0VG9rZW5zIjoyMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMwLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDlUMDg6NDA6MDIuOTQ0Nzc2NzdaIiwiU2VxIjozMiwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIzMDAzMjQ2NzgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibmZfZmxvd190YWJsZV9pbml0XCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImluY2x1ZGUvbmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlLmg9MzI2PXZvaWQgbmZfZmxvd190YWJsZV9jbGVhbnVwKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpO1xcbmluY2x1ZGUvbmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlLmgtMzI3LVxcbmluY2x1ZGUvbmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlLmg6MzI4OmludCBuZl9mbG93X3RhYmxlX2luaXQoc3RydWN0IG5mX2Zsb3d0YWJsZSAqZmxvd190YWJsZSk7XFxuaW5jbHVkZS9uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGUuaC0zMjktdm9pZCBuZl9mbG93X3RhYmxlX2ZyZWUoc3RydWN0IG5mX2Zsb3d0YWJsZSAqZmxvd190YWJsZSk7XFxuLS1cXG5pbmNsdWRlL25ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZS5oPTQwOD1zdGF0aWMgaW5saW5lIGJvb2wgbmZfZmxvd19wcHBvZV9wcm90byhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBfX2JlMTYgKmlubmVyX3Byb3RvKVxcbi0tXFxuaW5jbHVkZS9uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGUuaC00MjUtI2lmZGVmIENPTkZJR19ORl9GTE9XX1RBQkxFX1BST0NGU1xcbmluY2x1ZGUvbmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlLmg6NDI2OmludCBuZl9mbG93X3RhYmxlX2luaXRfcHJvYyhzdHJ1Y3QgbmV0ICpuZXQpO1xcbmluY2x1ZGUvbmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlLmgtNDI3LXZvaWQgbmZfZmxvd190YWJsZV9maW5pX3Byb2Moc3RydWN0IG5ldCAqbmV0KTtcXG5pbmNsdWRlL25ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZS5oLTQyOC0jZWxzZVxcbmluY2x1ZGUvbmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlLmg6NDI5OnN0YXRpYyBpbmxpbmUgaW50IG5mX2Zsb3dfdGFibGVfaW5pdF9wcm9jKHN0cnVjdCBuZXQgKm5ldClcXG5pbmNsdWRlL25ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZS5oLTQzMC17XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfY29yZS5jPTcwMj1FWFBPUlRfU1lNQk9MX0dQTChuZl9mbG93X2RuYXRfcG9ydCk7XFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2NvcmUuYy03MDMtXFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2NvcmUuYzo3MDQ6aW50IG5mX2Zsb3dfdGFibGVfaW5pdChzdHJ1Y3QgbmZfZmxvd3RhYmxlICpmbG93dGFibGUpXFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2NvcmUuYy03MDUte1xcbi0tXFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2NvcmUuYy03MjUtfVxcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9jb3JlLmM6NzI2OkVYUE9SVF9TWU1CT0xfR1BMKG5mX2Zsb3dfdGFibGVfaW5pdCk7XFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2NvcmUuYy03MjctXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfY29yZS5jPTc3Nz1FWFBPUlRfU1lNQk9MX0dQTChuZl9mbG93X3RhYmxlX2ZyZWUpO1xcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9jb3JlLmMtNzc4LVxcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9jb3JlLmM6Nzc5OnN0YXRpYyBpbnQgbmZfZmxvd190YWJsZV9pbml0X25ldChzdHJ1Y3QgbmV0ICpuZXQpXFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2NvcmUuYy03ODAte1xcbi0tXFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2NvcmUuYz03OTA9c3RhdGljIGludCBuZl9mbG93X3RhYmxlX3Blcm5ldF9pbml0KHN0cnVjdCBuZXQgKm5ldClcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9jb3JlLmMtNzkzLVxcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9jb3JlLmM6Nzk0OlxcdHJldCA9IG5mX2Zsb3dfdGFibGVfaW5pdF9uZXQobmV0KTtcXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfY29yZS5jLTc5NS1cXHRpZiAocmV0IFxcdTAwM2MgMClcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9jb3JlLmMtNzk3LVxcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9jb3JlLmM6Nzk4OlxcdHJldCA9IG5mX2Zsb3dfdGFibGVfaW5pdF9wcm9jKG5ldCk7XFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2NvcmUuYy03OTktXFx0aWYgKHJldCBcXHUwMDNjIDApXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfaW5ldC5jPTY4PXN0YXRpYyBzdHJ1Y3QgbmZfZmxvd3RhYmxlX3R5cGUgZmxvd3RhYmxlX2luZXQgPSB7XFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2luZXQuYy02OS1cXHQuZmFtaWx5XFx0XFx0PSBORlBST1RPX0lORVQsXFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2luZXQuYzo3MDpcXHQuaW5pdFxcdFxcdD0gbmZfZmxvd190YWJsZV9pbml0LFxcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9pbmV0LmMtNzEtXFx0LnNldHVwXFx0XFx0PSBuZl9mbG93X3RhYmxlX29mZmxvYWRfc2V0dXAsXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfaW5ldC5jPTc4PXN0YXRpYyBzdHJ1Y3QgbmZfZmxvd3RhYmxlX3R5cGUgZmxvd3RhYmxlX2lwdjQgPSB7XFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2luZXQuYy03OS1cXHQuZmFtaWx5XFx0XFx0PSBORlBST1RPX0lQVjQsXFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2luZXQuYzo4MDpcXHQuaW5pdFxcdFxcdD0gbmZfZmxvd190YWJsZV9pbml0LFxcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9pbmV0LmMtODEtXFx0LnNldHVwXFx0XFx0PSBuZl9mbG93X3RhYmxlX29mZmxvYWRfc2V0dXAsXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfaW5ldC5jPTg4PXN0YXRpYyBzdHJ1Y3QgbmZfZmxvd3RhYmxlX3R5cGUgZmxvd3RhYmxlX2lwdjYgPSB7XFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2luZXQuYy04OS1cXHQuZmFtaWx5XFx0XFx0PSBORlBST1RPX0lQVjYsXFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2luZXQuYzo5MDpcXHQuaW5pdFxcdFxcdD0gbmZfZmxvd190YWJsZV9pbml0LFxcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9pbmV0LmMtOTEtXFx0LnNldHVwXFx0XFx0PSBuZl9mbG93X3RhYmxlX29mZmxvYWRfc2V0dXAsXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfcHJvY2ZzLmM9NjA9c3RhdGljIGNvbnN0IHN0cnVjdCBzZXFfb3BlcmF0aW9ucyBuZl9mbG93X3RhYmxlX2NwdV9zZXFfb3BzID0ge1xcbi0tXFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX3Byb2Nmcy5jLTY2LVxcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9wcm9jZnMuYzo2NzppbnQgbmZfZmxvd190YWJsZV9pbml0X3Byb2Moc3RydWN0IG5ldCAqbmV0KVxcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9wcm9jZnMuYy02OC17XFxuLS1cXG5uZXQvc2NoZWQvYWN0X2N0LmM9MzI0PXN0YXRpYyBpbnQgdGNmX2N0X2Zsb3dfdGFibGVfZ2V0KHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHRjZl9jdF9wYXJhbXMgKnBhcmFtcylcXG4tLVxcbm5ldC9zY2hlZC9hY3RfY3QuYy0zNTItXFx0d3JpdGVfcG5ldChcXHUwMDI2Y3RfZnQtXFx1MDAzZW5mX2Z0Lm5ldCwgbmV0KTtcXG5uZXQvc2NoZWQvYWN0X2N0LmM6MzUzOlxcdGVyciA9IG5mX2Zsb3dfdGFibGVfaW5pdChcXHUwMDI2Y3RfZnQtXFx1MDAzZW5mX2Z0KTtcXG5uZXQvc2NoZWQvYWN0X2N0LmMtMzU0LVxcdGlmIChlcnIpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA5VDA4OjQwOjA1LjI0NTEwODUzOFoiLCJTZXEiOjMzLCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyNjQxNzc4NDI4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcy4gSGVyZSdzIG15IHRha2Ugb24gdGhvc2UgbGluZXMgb2YgY29kZSwgcHJlc2VudGVkIGFzIGlmIHRoZXkgd2VyZSBteSBvd24gaW50ZXJuYWwgdGhvdWdodCBwcm9jZXNzOlxuXG4qKkRpdmluZyBpbnRvIGBuZl9mbG93X3RhYmxlX2NvcmUuY2AqKlxuXG5BbHJpZ2h0LCB0aW1lIHRvIGNyYWNrIG9wZW4gYG5mX2Zsb3dfdGFibGVfY29yZS5jYC4gTGV0J3MgZ2V0IGRvd24gdG8gYnJhc3MgdGFja3MgYW5kIHVuZGVyc3RhbmQgaG93IHRoaXMgZmxvdyB0YWJsZSBpcyBhY3R1YWxseSB3b3JraW5nLiBJJ20gZXNwZWNpYWxseSBpbnRlcmVzdGVkIGluIHRoZSBjb3JlIG1lY2hhbmlzbXMuIEknbSBleHBlY3RpbmcgdG8gc2VlIHRoZSBjZW50cmFsIGRhdGEgc3RydWN0dXJlcyBmb3Igc3RvcmluZyBmbG93IGVudHJpZXMsIHRoZSBsb2dpYyBmb3IgYWRkaW5nIGFuZCByZW1vdmluZyB0aGVtLCBhbmQgaG93IGl0IGFsbCBpbnRlcmFjdHMgd2l0aCB0aGUgbmV0d29yayBzdGFjay4gSSBhbnRpY2lwYXRlIHRoZXJlIHdpbGwgYmUgYSBjbGVhciBlbXBoYXNpcyBvbiBwZXJmb3JtYW5jZSBjb25zaWRlcmF0aW9uczsgZ2l2ZW4gdGhlIG5hdHVyZSBvZiBhIGZsb3cgdGFibGUsIHNwZWVkIGFuZCBlZmZpY2llbnQgbG9va3VwcyBhcmUgZ29pbmcgdG8gYmUgcGFyYW1vdW50LiBJJ20gYWxzbyBiZXR0aW5nIHRoZXJlJ3MgYSBkZWxpY2F0ZSBiYWxhbmNlIGhlcmUgYmV0d2VlbiBtZW1vcnkgdXNhZ2UgYW5kIHNlYXJjaCBlZmZpY2llbmN5LiBJJ20ga2VlbiB0byBmaW5kIG91dCB0aGUgdHJhZGUtb2ZmcyBpbXBsZW1lbnRlZC4gSSdtIGFsc28gY3VyaW91cyB0byBzZWUgdGhlIGxvY2tpbmcgbWVjaGFuaXNtcyB1c2VkOyBjb25jdXJyZW5jeSBpc3N1ZXMgYXJlIGFsd2F5cyBhIGNvbmNlcm4gaW4gbmV0d29yayBwcm9ncmFtbWluZy4gSSdtIGdvaW5nIHRvIGxvb2sgZm9yIGFueSBjbGV2ZXIgb3B0aW1pemF0aW9ucywgcGVyaGFwcyBsZXZlcmFnaW5nIGhhcmR3YXJlIGFjY2VsZXJhdGlvbiBpZiBpdCdzIHRoZXJlLCBhbmQgZXJyb3IgaGFuZGxpbmcgYXMgaXQgaGFzIHRvIGJlIHJvYnVzdC4gTGV0J3Mgc2VlIHdoYXQncyBhY3R1YWxseSB1bmRlciB0aGUgaG9vZCFcblxuXG4iLCJJbnB1dFRva2VucyI6NTY3NCwiT3V0cHV0VG9rZW5zIjo0MiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA5VDA4OjQwOjA3Ljg4Njg5MDM2NloiLCJTZXEiOjM0LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMzA2MTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2NvcmUuY1wiLFxuICBcIkZpcnN0TGluZVwiOiA3MDAsXG4gIFwiTGluZUNvdW50XCI6IDQwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiA3MDA6XFx0XFx0bmZfZmxvd19uYXRfcG9ydChza2IsIHRob2ZmLCBwcm90b2NvbCwgcG9ydCwgbmV3X3BvcnQpO1xcbiA3MDE6XFx0fVxcbiA3MDI6XFx0RVhQT1JUX1NZTUJPTF9HUEwobmZfZmxvd19kbmF0X3BvcnQpO1xcbiA3MDM6XFx0XFxuIDcwNDpcXHRpbnQgbmZfZmxvd190YWJsZV9pbml0KHN0cnVjdCBuZl9mbG93dGFibGUgKmZsb3d0YWJsZSlcXG4gNzA1OlxcdHtcXG4gNzA2OlxcdFxcdGludCBlcnI7XFxuIDcwNzpcXHRcXG4gNzA4OlxcdFxcdElOSVRfREVMQVlFRF9XT1JLKFxcdTAwMjZmbG93dGFibGUtXFx1MDAzZWdjX3dvcmssIG5mX2Zsb3dfb2ZmbG9hZF93b3JrX2djKTtcXG4gNzA5OlxcdFxcdGZsb3dfYmxvY2tfaW5pdChcXHUwMDI2Zmxvd3RhYmxlLVxcdTAwM2VmbG93X2Jsb2NrKTtcXG4gNzEwOlxcdFxcdGluaXRfcndzZW0oXFx1MDAyNmZsb3d0YWJsZS1cXHUwMDNlZmxvd19ibG9ja19sb2NrKTtcXG4gNzExOlxcdFxcbiA3MTI6XFx0XFx0ZXJyID0gcmhhc2h0YWJsZV9pbml0KFxcdTAwMjZmbG93dGFibGUtXFx1MDAzZXJoYXNodGFibGUsXFxuIDcxMzpcXHRcXHRcXHRcXHQgICAgICBcXHUwMDI2bmZfZmxvd19vZmZsb2FkX3JoYXNoX3BhcmFtcyk7XFxuIDcxNDpcXHRcXHRpZiAoZXJyIFxcdTAwM2MgMClcXG4gNzE1OlxcdFxcdFxcdHJldHVybiBlcnI7XFxuIDcxNjpcXHRcXG4gNzE3OlxcdFxcdHF1ZXVlX2RlbGF5ZWRfd29yayhzeXN0ZW1fcG93ZXJfZWZmaWNpZW50X3dxLFxcbiA3MTg6XFx0XFx0XFx0XFx0ICAgXFx1MDAyNmZsb3d0YWJsZS1cXHUwMDNlZ2Nfd29yaywgSFopO1xcbiA3MTk6XFx0XFxuIDcyMDpcXHRcXHRtdXRleF9sb2NrKFxcdTAwMjZmbG93dGFibGVfbG9jayk7XFxuIDcyMTpcXHRcXHRsaXN0X2FkZChcXHUwMDI2Zmxvd3RhYmxlLVxcdTAwM2VsaXN0LCBcXHUwMDI2Zmxvd3RhYmxlcyk7XFxuIDcyMjpcXHRcXHRtdXRleF91bmxvY2soXFx1MDAyNmZsb3d0YWJsZV9sb2NrKTtcXG4gNzIzOlxcdFxcbiA3MjQ6XFx0XFx0cmV0dXJuIDA7XFxuIDcyNTpcXHR9XFxuIDcyNjpcXHRFWFBPUlRfU1lNQk9MX0dQTChuZl9mbG93X3RhYmxlX2luaXQpO1xcbiA3Mjc6XFx0XFxuIDcyODpcXHRzdGF0aWMgdm9pZCBuZl9mbG93X3RhYmxlX2RvX2NsZWFudXAoc3RydWN0IG5mX2Zsb3d0YWJsZSAqZmxvd190YWJsZSxcXG4gNzI5OlxcdFxcdFxcdFxcdFxcdCAgICAgc3RydWN0IGZsb3dfb2ZmbG9hZCAqZmxvdywgdm9pZCAqZGF0YSlcXG4gNzMwOlxcdHtcXG4gNzMxOlxcdFxcdHN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSBkYXRhO1xcbiA3MzI6XFx0XFxuIDczMzpcXHRcXHRpZiAoIWRldikge1xcbiA3MzQ6XFx0XFx0XFx0Zmxvd19vZmZsb2FkX3RlYXJkb3duKGZsb3cpO1xcbiA3MzU6XFx0XFx0XFx0cmV0dXJuO1xcbiA3MzY6XFx0XFx0fVxcbiA3Mzc6XFx0XFxuIDczODpcXHRcXHRpZiAobmV0X2VxKG5mX2N0X25ldChmbG93LVxcdTAwM2VjdCksIGRldl9uZXQoZGV2KSkgXFx1MDAyNlxcdTAwMjZcXG4gNzM5OlxcdFxcdCAgICAoZmxvdy1cXHUwMDNldHVwbGVoYXNoWzBdLnR1cGxlLmlpZmlkeCA9PSBkZXYtXFx1MDAzZWlmaW5kZXggfHxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDlUMDg6NDA6MDcuODg3MDIzMzE2WiIsIlNlcSI6MzUsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjI0NTMwNjgyNDYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIEkgd2VyZSBhbmFseXppbmcgdGhhdCBjb2RlOlxuXG4qKkRpdmluZyBpbnRvIHRoZSBGbG93dGFibGUgTG9naWMqKlxuXG5Pa2F5LCBzbyBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhpcyBjb2RlIGludGVyYWN0cyB3aXRoIHRoZSBmbG93dGFibGUuIE15IGZpcnN0IGluc3RpbmN0IGlzIHRvIGZpbmQgb3V0IGV4YWN0bHkgd2hlcmUgYHJlYWRfcG5ldChcdTAwMjZmbG93dGFibGUtXHUwMDNlbmV0KWAgb3IganVzdCB0aGUgZXhwcmVzc2lvbiBgZmxvd3RhYmxlLVx1MDAzZW5ldGAgYXJlIGJlaW5nICp1c2VkKi4gIFRoYXQncyBteSBzdGFydGluZyBwb2ludC4gSSBrbm93IHRoZXNlIG5ldHdvcmtpbmcgc3RydWN0dXJlcyBhcmUgY3J1Y2lhbCwgc28gdW5kZXJzdGFuZGluZyB0aGVpciB1c2FnZSBpcyBwYXJhbW91bnQuXG5cbkknbSBnb2luZyB0byBsZXZlcmFnZSBteSBleHBlcnQga25vd2xlZGdlIGFuZCB1c2UgYGdyZXBgIHRvIHF1aWNrbHkgc2VhcmNoIHRoZSBjb2RlYmFzZS4gSSdsbCBzZWFyY2ggZm9yIHZhcmlhdGlvbnMgb2YgdGhlIGtleSBzdHJ1Y3R1cmVzIGFuZCB2YXJpYWJsZXMgdG8gYmUgdGhvcm91Z2guIEknbGwgc3RhcnQgd2l0aCBgbmZfZmxvd3RhYmxlYCBpdHNlbGYsIHNpbmNlIHRoYXQncyBsaWtlbHkgdGhlIHBhcmVudCBzdHJ1Y3R1cmUuIEknbGwgYWxzbyBleHBsaWNpdGx5IGxvb2sgZm9yIGBmbG93dGFibGUtXHUwMDNlbmV0YCBhbmQgYGZsb3dfdGFibGUtXHUwMDNlbmV0YCwganVzdCBpbiBjYXNlIHRoZXJlIGFyZSB2YXJpYXRpb25zIG9yIGluY29uc2lzdGVuY2llcyBpbiBuYW1pbmcgY29udmVudGlvbnMgdGhhdCBhcmUgaW4gdGhlIGNvZGViYXNlLiBUaGlzIHNob3VsZCBnaXZlIG1lIGEgZ29vZCBvdmVydmlldyBvZiB0aGUgY29udGV4dHMgd2hlcmUgdGhpcyBuZXR3b3JrLXJlbGF0ZWQgZnVuY3Rpb25hbGl0eSBpcyBiZWluZyB1dGlsaXplZC4gSSBuZWVkIHRvIGdldCBhIGhpZ2ggbGV2ZWwgdmlldyBvZiB3aGVyZSB0aGlzIGBmbG93dGFibGVgIGFuZCBpdCdzIG5ldHdvcmsgaW50ZWdyYXRpb24gY29tZXMgaW50byBwbGF5IHdpdGhpbiB0aGUgbGFyZ2VyIHBpY3R1cmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjY2MjcsIk91dHB1dFRva2VucyI6MjksIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1MSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA5VDA4OjQwOjEwLjM0MDA5MzkxMloiLCJTZXEiOjM2LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6Mjc5OTg0MDE1MSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCIoZmxvd3RhYmxlfGZsb3dfdGFibGV8bmZfZnR8ZnQpLVxcdTAwM2VuZXRcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX29mZmxvYWQuYz04Njg9c3RhdGljIGludCBuZl9mbG93X29mZmxvYWRfYWxsb2MoY29uc3Qgc3RydWN0IGZsb3dfb2ZmbG9hZF93b3JrICpvZmZsb2FkLFxcbi0tXFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX29mZmxvYWQuYy04NzAte1xcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9vZmZsb2FkLmM6ODcxOlxcdHN0cnVjdCBuZXQgKm5ldCA9IHJlYWRfcG5ldChcXHUwMDI2b2ZmbG9hZC1cXHUwMDNlZmxvd3RhYmxlLVxcdTAwM2VuZXQpO1xcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9vZmZsb2FkLmMtODcyLVxcbi0tXFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX29mZmxvYWQuYz0xMDM3PXN0YXRpYyB2b2lkIGZsb3dfb2ZmbG9hZF93b3JrX2hhbmRsZXIoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxcbi0tXFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX29mZmxvYWQuYy0xMDQyLVxcdG9mZmxvYWQgPSBjb250YWluZXJfb2Yod29yaywgc3RydWN0IGZsb3dfb2ZmbG9hZF93b3JrLCB3b3JrKTtcXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfb2ZmbG9hZC5jOjEwNDM6XFx0bmV0ID0gcmVhZF9wbmV0KFxcdTAwMjZvZmZsb2FkLVxcdTAwM2VmbG93dGFibGUtXFx1MDAzZW5ldCk7XFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX29mZmxvYWQuYy0xMDQ0LVxcdHN3aXRjaCAob2ZmbG9hZC1cXHUwMDNlY21kKSB7XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfb2ZmbG9hZC5jPTEwNjU9c3RhdGljIHZvaWQgZmxvd19vZmZsb2FkX3F1ZXVlX3dvcmsoc3RydWN0IGZsb3dfb2ZmbG9hZF93b3JrICpvZmZsb2FkKVxcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9vZmZsb2FkLmMtMTA2Ni17XFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX29mZmxvYWQuYzoxMDY3OlxcdHN0cnVjdCBuZXQgKm5ldCA9IHJlYWRfcG5ldChcXHUwMDI2b2ZmbG9hZC1cXHUwMDNlZmxvd3RhYmxlLVxcdTAwM2VuZXQpO1xcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9vZmZsb2FkLmMtMTA2OC1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDlUMDg6NDA6MTMuMTM5OTQ1NTIzWiIsIlNlcSI6MzcsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjg5NjMxMDkxODAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQW5hbHlzaXMgb2YgdGhlIEZsb3cgVGFibGUgSW5pdGlhbGl6YXRpb24gQnVnKipcblxuT2theSwgc28gSSd2ZSBiZWVuIGxvb2tpbmcgYXQgdGhpcyBjb2RlIGFuZCBJJ3ZlIHplcm9lZCBpbiBvbiB0aGUgY3JpdGljYWwgaXNzdWU6IHRoZSBvcmRlciBvZiBvcGVyYXRpb25zIGluIHRoZSBmbG93IHRhYmxlIGluaXRpYWxpemF0aW9uLiBJdCBhcHBlYXJzIHRoYXQgYHdyaXRlX3BuZXQoXHUwMDI2Y3RfZnQtXHUwMDNlbmZfZnQubmV0LCBuZXQpO2Agd2FzIGJlaW5nIGNhbGxlZCAqYWZ0ZXIqIGBuZl9mbG93X3RhYmxlX2luaXQoXHUwMDI2Y3RfZnQtXHUwMDNlbmZfZnQpO2AuIFRoaXMgaXMgd2hlcmUgdGhlIHByb2JsZW0gbGllcy5cblxuSW4gYG5mX2Zsb3dfdGFibGVfaW5pdGAsIGEgYGdjX3dvcmtgIGlzIHF1ZXVlZCwgbGlrZWx5IHVzaW5nIGBxdWV1ZV9kZWxheWVkX3dvcmsoc3lzdGVtX3Bvd2VyX2VmZmljaWVudF93cSwgXHUwMDI2Zmxvd3RhYmxlLVx1MDAzZWdjX3dvcmssIEhaKWAuICBUaGUgY29uY2VybiBpcyB0aGF0IGlmIHRoZSBnYXJiYWdlIGNvbGxlY3Rpb24gd29yayAoYG5mX2Zsb3dfb2ZmbG9hZF93b3JrX2djYCkgb3Igb2ZmbG9hZCB3b3JrIHdlcmUgdG8gcnVuICpiZWZvcmUqIGB3cml0ZV9wbmV0YCBpcyBjYWxsZWQsIGl0IGNvdWxkIHBvdGVudGlhbGx5IGFjY2VzcyBgZmxvd3RhYmxlLVx1MDAzZW5ldGAgYmVmb3JlIGl0J3MgcHJvcGVybHkgaW5pdGlhbGl6ZWQuIEZ1cnRoZXJtb3JlLCBzaW5jZSBgY3RfZnQgPSBremFsbG9jX29iaigqY3RfZnQpO2AgaW5pdGlhbGl6ZXMgdGhlIG1lbW9yeSB3aXRoIHplcm8sIG1lYW5pbmcgYGN0X2Z0LVx1MDAzZW5mX2Z0Lm5ldGAgd291bGQgaGF2ZSBiZWVuIGluaXRpYWxpemVkIHRvIE5VTEwuXG5cblRoZSBjcnV4IG9mIHRoZSBtYXR0ZXIgaXMgdGhhdCB3aGVuIGBjdF9mdGAgZ2V0cyBhbGxvY2F0ZWQgdmlhIGBremFsbG9jX29iamAsIHRoZSBlbnRpcmUgc3RydWN0dXJlIGlzIHplcm9lZC4gVGhpcyBtZWFucyB0aGF0LCBkdWUgdG8gdGhlIGluaXRpYWwgcGxhY2VtZW50LCBiZWZvcmUgdGhlIGB3cml0ZV9wbmV0YCBjYWxsLCBgY3RfZnQtXHUwMDNlbmZfZnQubmV0YCBpcyAqbm90KiB1bmluaXRpYWxpemVkIG1lbW9yeSwgYnV0IHJhdGhlciBhICp6ZXJvZWQqIHBvaW50ZXIgKE5VTEwpLiBUaGlzIGlzIGNyaXRpY2FsLiBOb3csIGlmIGFueSBwYXJ0IG9mIHRoZSBgbmZfZmxvd190YWJsZV9pbml0YCBvciByZWxhdGVkIHdvcmsgKGdhcmJhZ2UgY29sbGVjdGlvbiwgb2ZmbG9hZCkgd2FzIHRvIGRlcmVmZXJlbmNlIGBmbG93dGFibGUtXHUwMDNlbmV0YCBiZWZvcmUgYHdyaXRlX3BuZXRgIHNldHMgaXQgdG8gYSB2YWxpZCBuZXQgbmFtZXNwYWNlLCBpdCB3b3VsZCBsZWFkIHRvIGEgTlVMTCBwb2ludGVyIGRlcmVmZXJlbmNlIG9yLCBtb3JlIGxpa2VseSwgYSB1c2Ugb2YgYW4gaW5jb3JyZWN0IG5ldHdvcmsgbmFtZXNwYWNlLiBUaGlzIGlzIE5PVCBhbiB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkOyBpdCdzIGEgemVyb2VkIG1lbW9yeSBhY2Nlc3MuXG5cbkkndmUgY29uZmlybWVkIHRoaXMgd2l0aCBhIGNsb3NlciBsb29rIGF0IHRoZSBga3phbGxvY19vYmpgIGNhbGwgd2l0aGluIGBhY3RfY3QuY2AuIExpbmUgMzM5IGNsZWFybHkgZGVtb25zdHJhdGVzIHRoYXQgYGt6YWxsb2Nfb2JqYCBwcm92aWRlcyB6ZXJvLWluaXRpYWxpemVkIGhlYXAgbWVtb3J5LiBUaGUgcm9vdCBjYXVzZSBvZiB0aGUgYnVnIHRoYXQgdGhlIGNvZGUgYWRkcmVzc2VzIGlzIHRoYXQgdGhlIG5ldG5zIHBvaW50ZXIgaW4gdGhlIGBmbG93dGFibGVgIGlzIG5vdCBpbml0aWFsaXplZCAqYmVmb3JlKiB0aGUgdGFibGUgaXMgaW5pdGlhbGl6ZWQsIGV4cG9zZWQgYW5kL29yIGdhcmJhZ2UgY29sbGVjdGlvbiB3b3JrIG1heSBiZWdpbi4gSWYgYSBwaWVjZSBvZiBjb2RlIHdlcmUgdG8gaW52b2tlIGByZWFkX3BuZXQoXHUwMDI2Zmxvd3RhYmxlLVx1MDAzZW5ldClgIGJlZm9yZSB0aGUgZml4LCBpdCB3b3VsZCBnZXQgYSBgTlVMTGAgcG9pbnRlci5cblxuTm93LCBsZXQncyBhZGRyZXNzIHRoZSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGFuZCBwb3RlbnRpYWwgdnVsbmVyYWJpbGl0aWVzOlxuXG4xLiAgKipLZXJuZWwgc3RydWN0dXJlcyB0byB1c2VyIHNwYWNlPyoqIE5vLCB0aGlzIGlzIGFsbCBpbnRlcm5hbCBrZXJuZWwgZmxvdyB0YWJsZSBpbml0aWFsaXphdGlvbi5cbjIuICAqKkNvbmRpdGlvbmFsIGxvZ2ljIG9uIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzPyoqIE5vLCBiZWNhdXNlIGBjdF9mdGAgaXMgYWxsb2NhdGVkIHdpdGggYGt6YWxsb2Nfb2JqYCDigJMgaXQncyB6ZXJvLWluaXRpYWxpemVkLlxuMy4gICoqQ29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2l0aCB1bmluaXRpYWxpemVkIGZpZWxkcz8qKiBBbGwgZmllbGRzIGFyZSB6ZXJvZWQgYnkgYGt6YWxsb2Nfb2JqYC5cbjQuICAqKkJvdW5kcyBjaGVja3MvbGVuZ3Rocz8qKiBOb25lIG9mIGNvbmNlcm4gaGVyZS5cblxuR2l2ZW4gdGhpcyB1bmRlcnN0YW5kaW5nLCBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzLCBwYXJ0aWN1bGFybHkgdGhvc2UgdGhhdCBpZGVudGlmeSBudWxsIGRlcmVmZXJlbmNlcywgYXJlIHF1aXRlIGFwcHJvcHJpYXRlLiBLZXJuZWwgTWVtb3J5IFNhbml0aXplciAoS01TQU4pLCBob3dldmVyLCBpcyAqbm90KiByZXF1aXJlZCwgYmVjYXVzZSB0aGVyZSBhcmUgbm8gYWN0dWFsIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzIG9yIGV4cG9zdXJlcy4gVGhlIHZ1bG5lcmFiaWxpdHkgcmV2b2x2ZXMgYXJvdW5kIHRoZSB6ZXJvaW5nIChOVUxMKSwgbm90IGdhcmJhZ2UgdmFsdWVzLlxuXG5UaGVyZWZvcmUsIHNldHRpbmcgdGhlIHJlc3VsdHMgcGFyYW1ldGVycyB3aXRoIGBOZWVkc0tNU0FOYDogZmFsc2UgaXMgdGhlIGNvcnJlY3QgY2FsbC4gYEtNU0FOUmVhc29uaW5nYCBjbGVhcmx5OlxuXG4tICAgYGN0X2Z0YCBpcyBpbml0aWFsaXplZCB2aWEgYGt6YWxsb2Nfb2JqYCwgd2hpY2ggemVyby1pbml0aWFsaXplcyB0aGUgZW50aXJlIG1lbW9yeSBjaHVuay5cbi0gICBUaGUgcGF0Y2ggcmVvcmRlcnMgYHdyaXRlX3BuZXQoXHUwMDI2Y3RfZnQtXHUwMDNlbmZfZnQubmV0LCBuZXQpYCBiZWZvcmUgYG5mX2Zsb3dfdGFibGVfaW5pdChcdTAwMjZjdF9mdC1cdTAwM2VuZl9mdClgLlxuLSAgIFdpdGhvdXQgdGhlIGZpeCwgYG5mX2Z0Lm5ldGAgd291bGQgY29udGFpbiBgTlVMTGAsIGxlYWRpbmcgdG8gYSBOVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2Ugb3IgYW4gYWNjZXNzIGlzc3VlIGR1ZSB0byB0aGUgd3JvbmcgbmV0d29yayBuYW1lc3BhY2UsIGJ1dCBub3QgYW4gdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZC5cbi0gICBUaGVyZSBhcmUgbm8gdW5pbml0aWFsaXplZCB2YXJpYWJsZXMsIGluZm8tbGVha3MsIG9yIHVuaW5pdGlhbGl6ZWQgcGFkZGluZy9maWVsZHMgY29waWVkIHRvIHVzZXIgc3BhY2UsIGFuZCBubyBjaGFuZ2VzIHRvIHRoZSBib3VuZHMgb2YgdGhlIGJ1ZmZlcnMuXG4tICAgVGhlcmVmb3JlLCBLTVNBTiBpcyB1bm5lY2Vzc2FyeS5cblxuVGltZSB0byBpbnZva2UgYHNldC1yZXN1bHRzYC5cblxuXG4iLCJJbnB1dFRva2VucyI6NzM4MCwiT3V0cHV0VG9rZW5zIjoyMjYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo4MTQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDlUMDg6NDA6MjIuMTAzMDU4NTIzWiIsIlNlcSI6MzgsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjQzNDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCByZW9yZGVycyB0aGUgaW5pdGlhbGl6YXRpb24gb2YgdGhlIGZsb3cgdGFibGUncyBuZXR3b3JrIG5hbWVzcGFjZSBwb2ludGVyIChgd3JpdGVfcG5ldChcXHUwMDI2Y3RfZnQtXFx1MDAzZW5mX2Z0Lm5ldCwgbmV0KWApIHNvIHRoYXQgaXQgb2NjdXJzIHByaW9yIHRvIGNhbGxpbmcgYG5mX2Zsb3dfdGFibGVfaW5pdChcXHUwMDI2Y3RfZnQtXFx1MDAzZW5mX2Z0KWAuXFxuXFxuVGhlIGVuY2xvc2luZyBgc3RydWN0IHRjZl9jdF9mbG93X3RhYmxlYCAoYGN0X2Z0YCkgaXMgYWxsb2NhdGVkIHZpYSBga3phbGxvY19vYmpgLCBlbnN1cmluZyBhbGwgZmllbGRzIGFuZCBwYWRkaW5nIGFyZSB6ZXJvLWluaXRpYWxpemVkLiBQcmlvciB0byB0aGUgZml4LCBhY2Nlc3NpbmcgYG5mX2Z0Lm5ldGAgYmVmb3JlIGB3cml0ZV9wbmV0YCB3b3VsZCByZWFkIGEgemVyb2VkL05VTEwgcG9pbnRlciAod2hpY2ggd291bGQgbWFuaWZlc3QgYXMgYSBOVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2Ugb3IgbG9naWNhbCBlcnJvciwgY2F1Z2h0IGJ5IHN0YW5kYXJkIGNyYXNoIGhhbmRsZXJzIGFuZCBLQVNBTiksIHJhdGhlciB0aGFuIHVuaW5pdGlhbGl6ZWQgbWVtb3J5Llxcblxcbk5vIHVuaW5pdGlhbGl6ZWQgc3RhY2sgb3IgaGVhcCBtZW1vcnkgaXMgaW50cm9kdWNlZCBvciBleHBvc2VkLCBubyB1bmluaXRpYWxpemVkIGZpZWxkcyBhcmUgcmVhZCBvciBjb3BpZWQgdG8gdXNlcnNwYWNlLCBhbmQgbm8gYnVmZmVyIGJvdW5kcyBvciBsZW5ndGhzIGFyZSBhZmZlY3RlZC4gSGVuY2UsIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIGlzIG5vdCBuZWVkZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggcmVvcmRlcnMgdGhlIGluaXRpYWxpemF0aW9uIG9mIHRoZSBmbG93IHRhYmxlJ3MgbmV0d29yayBuYW1lc3BhY2UgcG9pbnRlciAoYHdyaXRlX3BuZXQoXFx1MDAyNmN0X2Z0LVxcdTAwM2VuZl9mdC5uZXQsIG5ldClgKSBzbyB0aGF0IGl0IG9jY3VycyBwcmlvciB0byBjYWxsaW5nIGBuZl9mbG93X3RhYmxlX2luaXQoXFx1MDAyNmN0X2Z0LVxcdTAwM2VuZl9mdClgLlxcblxcblRoZSBlbmNsb3NpbmcgYHN0cnVjdCB0Y2ZfY3RfZmxvd190YWJsZWAgKGBjdF9mdGApIGlzIGFsbG9jYXRlZCB2aWEgYGt6YWxsb2Nfb2JqYCwgZW5zdXJpbmcgYWxsIGZpZWxkcyBhbmQgcGFkZGluZyBhcmUgemVyby1pbml0aWFsaXplZC4gUHJpb3IgdG8gdGhlIGZpeCwgYWNjZXNzaW5nIGBuZl9mdC5uZXRgIGJlZm9yZSBgd3JpdGVfcG5ldGAgd291bGQgcmVhZCBhIHplcm9lZC9OVUxMIHBvaW50ZXIgKHdoaWNoIHdvdWxkIG1hbmlmZXN0IGFzIGEgTlVMTCBwb2ludGVyIGRlcmVmZXJlbmNlIG9yIGxvZ2ljYWwgZXJyb3IsIGNhdWdodCBieSBzdGFuZGFyZCBjcmFzaCBoYW5kbGVycyBhbmQgS0FTQU4pLCByYXRoZXIgdGhhbiB1bmluaXRpYWxpemVkIG1lbW9yeS5cXG5cXG5ObyB1bmluaXRpYWxpemVkIHN0YWNrIG9yIGhlYXAgbWVtb3J5IGlzIGludHJvZHVjZWQgb3IgZXhwb3NlZCwgbm8gdW5pbml0aWFsaXplZCBmaWVsZHMgYXJlIHJlYWQgb3IgY29waWVkIHRvIHVzZXJzcGFjZSwgYW5kIG5vIGJ1ZmZlciBib3VuZHMgb3IgbGVuZ3RocyBhcmUgYWZmZWN0ZWQuIEhlbmNlLCBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBpcyBub3QgbmVlZGVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/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-workflowvd5jd[1] Phase: Succeeded StartedAt: 2026-09-09 08:40:33 +0000 UTC FinishedAt: 2026-09-09 08:40:33 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvd5jd[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-09-09 08:40:33 +0000 UTC FinishedAt: 2026-09-09 08:40:33 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvd5jd[2] Phase: Succeeded StartedAt: 2026-09-09 08:40:33 +0000 UTC FinishedAt: 2026-09-09 12:28:17 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvd5jd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1b78070aaef63512688aebfbc82365ef9d6660f1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_ACT_CT","NET_CLS_ACT","NF_CONNTRACK","NF_FLOW_TABLE"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tcf_ct_flow_table_get","tcf_ct_init","tcf_ct_act","nf_flow_table_init"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1b78070aaef63512688aebfbc82365ef9d6660f1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_ACT_CT","NET_CLS_ACT","NF_CONNTRACK","NF_FLOW_TABLE"],"series_id":"f9b031a6-1e69-4cb6-b486-01713405f2f9","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-09-09 08:40:33 +0000 UTC FinishedAt: 2026-09-09 12:28:17 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"1b78070aaef63512688aebfbc82365ef9d6660f1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_ACT_CT","NET_CLS_ACT","NF_CONNTRACK","NF_FLOW_TABLE"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tcf_ct_flow_table_get","tcf_ct_init","tcf_ct_act","nf_flow_table_init"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"1b78070aaef63512688aebfbc82365ef9d6660f1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_ACT_CT","NET_CLS_ACT","NF_CONNTRACK","NF_FLOW_TABLE"],"series_id":"f9b031a6-1e69-4cb6-b486-01713405f2f9","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflowvd5jd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1b78070aaef63512688aebfbc82365ef9d6660f1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_ACT_CT","NET_CLS_ACT","NF_CONNTRACK","NF_FLOW_TABLE"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tcf_ct_flow_table_get","tcf_ct_init","tcf_ct_act","nf_flow_table_init"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1b78070aaef63512688aebfbc82365ef9d6660f1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_ACT_CT","NET_CLS_ACT","NF_CONNTRACK","NF_FLOW_TABLE"],"series_id":"f9b031a6-1e69-4cb6-b486-01713405f2f9","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-09-09 08:40:33 +0000 UTC FinishedAt: 2026-09-09 08:40:43 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvd5jd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1b78070aaef63512688aebfbc82365ef9d6660f1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_ACT_CT","NET_CLS_ACT","NF_CONNTRACK","NF_FLOW_TABLE"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tcf_ct_flow_table_get","tcf_ct_init","tcf_ct_act","nf_flow_table_init"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1b78070aaef63512688aebfbc82365ef9d6660f1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_ACT_CT","NET_CLS_ACT","NF_CONNTRACK","NF_FLOW_TABLE"],"series_id":"f9b031a6-1e69-4cb6-b486-01713405f2f9","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-09-09 08:40:33 +0000 UTC FinishedAt: 2026-09-09 08:40:40 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"1b78070aaef63512688aebfbc82365ef9d6660f1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_ACT_CT","NET_CLS_ACT","NF_CONNTRACK","NF_FLOW_TABLE"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.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-workflowvd5jd/series-workflowvd5jd-convert-artifact-2781217831/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowvd5jd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1b78070aaef63512688aebfbc82365ef9d6660f1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_ACT_CT","NET_CLS_ACT","NF_CONNTRACK","NF_FLOW_TABLE"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tcf_ct_flow_table_get","tcf_ct_init","tcf_ct_act","nf_flow_table_init"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1b78070aaef63512688aebfbc82365ef9d6660f1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_ACT_CT","NET_CLS_ACT","NF_CONNTRACK","NF_FLOW_TABLE"],"series_id":"f9b031a6-1e69-4cb6-b486-01713405f2f9","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-09-09 08:40:43 +0000 UTC FinishedAt: 2026-09-09 09:01:26 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvd5jd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1b78070aaef63512688aebfbc82365ef9d6660f1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_ACT_CT","NET_CLS_ACT","NF_CONNTRACK","NF_FLOW_TABLE"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tcf_ct_flow_table_get","tcf_ct_init","tcf_ct_act","nf_flow_table_init"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1b78070aaef63512688aebfbc82365ef9d6660f1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_ACT_CT","NET_CLS_ACT","NF_CONNTRACK","NF_FLOW_TABLE"],"series_id":"f9b031a6-1e69-4cb6-b486-01713405f2f9","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-09-09 08:40:43 +0000 UTC FinishedAt: 2026-09-09 09:01:26 +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:*323c6b4e-cc68-408a-83df-2b6ba001bf88,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-workflowvd5jd/series-workflowvd5jd-convert-artifact-2781217831/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": "fee21ee8-390f-4e72-8969-fcb3dce56928", "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-workflowvd5jd/series-workflowvd5jd-build-action-1958630333/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowvd5jd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1b78070aaef63512688aebfbc82365ef9d6660f1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_ACT_CT","NET_CLS_ACT","NF_CONNTRACK","NF_FLOW_TABLE"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tcf_ct_flow_table_get","tcf_ct_init","tcf_ct_act","nf_flow_table_init"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1b78070aaef63512688aebfbc82365ef9d6660f1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_ACT_CT","NET_CLS_ACT","NF_CONNTRACK","NF_FLOW_TABLE"],"series_id":"f9b031a6-1e69-4cb6-b486-01713405f2f9","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-09-09 08:40:43 +0000 UTC FinishedAt: 2026-09-09 09:01:16 +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:*323c6b4e-cc68-408a-83df-2b6ba001bf88,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-workflowvd5jd/series-workflowvd5jd-convert-artifact-2781217831/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": "fee21ee8-390f-4e72-8969-fcb3dce56928", "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-workflowvd5jd/series-workflowvd5jd-build-action-1958630333/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowvd5jd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1b78070aaef63512688aebfbc82365ef9d6660f1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_ACT_CT","NET_CLS_ACT","NF_CONNTRACK","NF_FLOW_TABLE"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tcf_ct_flow_table_get","tcf_ct_init","tcf_ct_act","nf_flow_table_init"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1b78070aaef63512688aebfbc82365ef9d6660f1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_ACT_CT","NET_CLS_ACT","NF_CONNTRACK","NF_FLOW_TABLE"],"series_id":"f9b031a6-1e69-4cb6-b486-01713405f2f9","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-09-09 09:01:26 +0000 UTC FinishedAt: 2026-09-09 09:01:26 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvd5jd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1b78070aaef63512688aebfbc82365ef9d6660f1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_ACT_CT","NET_CLS_ACT","NF_CONNTRACK","NF_FLOW_TABLE"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tcf_ct_flow_table_get","tcf_ct_init","tcf_ct_act","nf_flow_table_init"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1b78070aaef63512688aebfbc82365ef9d6660f1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_ACT_CT","NET_CLS_ACT","NF_CONNTRACK","NF_FLOW_TABLE"],"series_id":"f9b031a6-1e69-4cb6-b486-01713405f2f9","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-09-09 09:01:26 +0000 UTC FinishedAt: 2026-09-09 09:01:26 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvd5jd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1b78070aaef63512688aebfbc82365ef9d6660f1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_ACT_CT","NET_CLS_ACT","NF_CONNTRACK","NF_FLOW_TABLE"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tcf_ct_flow_table_get","tcf_ct_init","tcf_ct_act","nf_flow_table_init"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1b78070aaef63512688aebfbc82365ef9d6660f1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_ACT_CT","NET_CLS_ACT","NF_CONNTRACK","NF_FLOW_TABLE"],"series_id":"f9b031a6-1e69-4cb6-b486-01713405f2f9","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-09-09 09:01:26 +0000 UTC FinishedAt: 2026-09-09 09:01:36 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvd5jd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1b78070aaef63512688aebfbc82365ef9d6660f1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_ACT_CT","NET_CLS_ACT","NF_CONNTRACK","NF_FLOW_TABLE"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tcf_ct_flow_table_get","tcf_ct_init","tcf_ct_act","nf_flow_table_init"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1b78070aaef63512688aebfbc82365ef9d6660f1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_ACT_CT","NET_CLS_ACT","NF_CONNTRACK","NF_FLOW_TABLE"],"series_id":"f9b031a6-1e69-4cb6-b486-01713405f2f9","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-09-09 09:01:26 +0000 UTC FinishedAt: 2026-09-09 09:01:33 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"1b78070aaef63512688aebfbc82365ef9d6660f1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_ACT_CT","NET_CLS_ACT","NF_CONNTRACK","NF_FLOW_TABLE"],"series_id":"f9b031a6-1e69-4cb6-b486-01713405f2f9","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.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-workflowvd5jd/series-workflowvd5jd-convert-artifact-3119462870/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowvd5jd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1b78070aaef63512688aebfbc82365ef9d6660f1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_ACT_CT","NET_CLS_ACT","NF_CONNTRACK","NF_FLOW_TABLE"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tcf_ct_flow_table_get","tcf_ct_init","tcf_ct_act","nf_flow_table_init"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1b78070aaef63512688aebfbc82365ef9d6660f1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_ACT_CT","NET_CLS_ACT","NF_CONNTRACK","NF_FLOW_TABLE"],"series_id":"f9b031a6-1e69-4cb6-b486-01713405f2f9","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-09-09 09:01:36 +0000 UTC FinishedAt: 2026-09-09 09:03:46 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvd5jd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1b78070aaef63512688aebfbc82365ef9d6660f1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_ACT_CT","NET_CLS_ACT","NF_CONNTRACK","NF_FLOW_TABLE"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tcf_ct_flow_table_get","tcf_ct_init","tcf_ct_act","nf_flow_table_init"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1b78070aaef63512688aebfbc82365ef9d6660f1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_ACT_CT","NET_CLS_ACT","NF_CONNTRACK","NF_FLOW_TABLE"],"series_id":"f9b031a6-1e69-4cb6-b486-01713405f2f9","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-09-09 09:01:36 +0000 UTC FinishedAt: 2026-09-09 09:03:39 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*fee21ee8-390f-4e72-8969-fcb3dce56928,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-workflowvd5jd/series-workflowvd5jd-build-action-1958630333/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-workflowvd5jd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1b78070aaef63512688aebfbc82365ef9d6660f1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_ACT_CT","NET_CLS_ACT","NF_CONNTRACK","NF_FLOW_TABLE"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tcf_ct_flow_table_get","tcf_ct_init","tcf_ct_act","nf_flow_table_init"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1b78070aaef63512688aebfbc82365ef9d6660f1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_ACT_CT","NET_CLS_ACT","NF_CONNTRACK","NF_FLOW_TABLE"],"series_id":"f9b031a6-1e69-4cb6-b486-01713405f2f9","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-09-09 09:03:46 +0000 UTC FinishedAt: 2026-09-09 09:03:46 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvd5jd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1b78070aaef63512688aebfbc82365ef9d6660f1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_ACT_CT","NET_CLS_ACT","NF_CONNTRACK","NF_FLOW_TABLE"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tcf_ct_flow_table_get","tcf_ct_init","tcf_ct_act","nf_flow_table_init"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1b78070aaef63512688aebfbc82365ef9d6660f1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_ACT_CT","NET_CLS_ACT","NF_CONNTRACK","NF_FLOW_TABLE"],"series_id":"f9b031a6-1e69-4cb6-b486-01713405f2f9","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-09-09 09:03:46 +0000 UTC FinishedAt: 2026-09-09 09:03:46 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvd5jd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1b78070aaef63512688aebfbc82365ef9d6660f1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_ACT_CT","NET_CLS_ACT","NF_CONNTRACK","NF_FLOW_TABLE"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tcf_ct_flow_table_get","tcf_ct_init","tcf_ct_act","nf_flow_table_init"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1b78070aaef63512688aebfbc82365ef9d6660f1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_ACT_CT","NET_CLS_ACT","NF_CONNTRACK","NF_FLOW_TABLE"],"series_id":"f9b031a6-1e69-4cb6-b486-01713405f2f9","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-09-09 09:03:46 +0000 UTC FinishedAt: 2026-09-09 09:23:19 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvd5jd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1b78070aaef63512688aebfbc82365ef9d6660f1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_ACT_CT","NET_CLS_ACT","NF_CONNTRACK","NF_FLOW_TABLE"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tcf_ct_flow_table_get","tcf_ct_init","tcf_ct_act","nf_flow_table_init"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1b78070aaef63512688aebfbc82365ef9d6660f1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_ACT_CT","NET_CLS_ACT","NF_CONNTRACK","NF_FLOW_TABLE"],"series_id":"f9b031a6-1e69-4cb6-b486-01713405f2f9","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-09-09 09:03:46 +0000 UTC FinishedAt: 2026-09-09 09:23:19 +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:*323c6b4e-cc68-408a-83df-2b6ba001bf88,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-workflowvd5jd/series-workflowvd5jd-convert-artifact-3119462870/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": "3870b8c7-0b36-4820-af3f-219850fa7fff", "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-workflowvd5jd/series-workflowvd5jd-build-action-3936608218/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowvd5jd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1b78070aaef63512688aebfbc82365ef9d6660f1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_ACT_CT","NET_CLS_ACT","NF_CONNTRACK","NF_FLOW_TABLE"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tcf_ct_flow_table_get","tcf_ct_init","tcf_ct_act","nf_flow_table_init"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1b78070aaef63512688aebfbc82365ef9d6660f1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_ACT_CT","NET_CLS_ACT","NF_CONNTRACK","NF_FLOW_TABLE"],"series_id":"f9b031a6-1e69-4cb6-b486-01713405f2f9","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-09-09 09:03:46 +0000 UTC FinishedAt: 2026-09-09 09:23:09 +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:*323c6b4e-cc68-408a-83df-2b6ba001bf88,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-workflowvd5jd/series-workflowvd5jd-convert-artifact-3119462870/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": "3870b8c7-0b36-4820-af3f-219850fa7fff", "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-workflowvd5jd/series-workflowvd5jd-build-action-3936608218/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowvd5jd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1b78070aaef63512688aebfbc82365ef9d6660f1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_ACT_CT","NET_CLS_ACT","NF_CONNTRACK","NF_FLOW_TABLE"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tcf_ct_flow_table_get","tcf_ct_init","tcf_ct_act","nf_flow_table_init"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1b78070aaef63512688aebfbc82365ef9d6660f1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_ACT_CT","NET_CLS_ACT","NF_CONNTRACK","NF_FLOW_TABLE"],"series_id":"f9b031a6-1e69-4cb6-b486-01713405f2f9","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-09-09 09:23:19 +0000 UTC FinishedAt: 2026-09-09 09:23:19 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvd5jd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1b78070aaef63512688aebfbc82365ef9d6660f1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_ACT_CT","NET_CLS_ACT","NF_CONNTRACK","NF_FLOW_TABLE"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tcf_ct_flow_table_get","tcf_ct_init","tcf_ct_act","nf_flow_table_init"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1b78070aaef63512688aebfbc82365ef9d6660f1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_ACT_CT","NET_CLS_ACT","NF_CONNTRACK","NF_FLOW_TABLE"],"series_id":"f9b031a6-1e69-4cb6-b486-01713405f2f9","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-09-09 09:23:19 +0000 UTC FinishedAt: 2026-09-09 09:23:19 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvd5jd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1b78070aaef63512688aebfbc82365ef9d6660f1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_ACT_CT","NET_CLS_ACT","NF_CONNTRACK","NF_FLOW_TABLE"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tcf_ct_flow_table_get","tcf_ct_init","tcf_ct_act","nf_flow_table_init"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1b78070aaef63512688aebfbc82365ef9d6660f1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_ACT_CT","NET_CLS_ACT","NF_CONNTRACK","NF_FLOW_TABLE"],"series_id":"f9b031a6-1e69-4cb6-b486-01713405f2f9","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-09-09 09:23:19 +0000 UTC FinishedAt: 2026-09-09 09:25:37 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvd5jd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1b78070aaef63512688aebfbc82365ef9d6660f1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_ACT_CT","NET_CLS_ACT","NF_CONNTRACK","NF_FLOW_TABLE"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tcf_ct_flow_table_get","tcf_ct_init","tcf_ct_act","nf_flow_table_init"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1b78070aaef63512688aebfbc82365ef9d6660f1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_ACT_CT","NET_CLS_ACT","NF_CONNTRACK","NF_FLOW_TABLE"],"series_id":"f9b031a6-1e69-4cb6-b486-01713405f2f9","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-09-09 09:23:19 +0000 UTC FinishedAt: 2026-09-09 09:25:27 +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:*3870b8c7-0b36-4820-af3f-219850fa7fff,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-workflowvd5jd/series-workflowvd5jd-build-action-3936608218/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-workflowvd5jd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1b78070aaef63512688aebfbc82365ef9d6660f1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_ACT_CT","NET_CLS_ACT","NF_CONNTRACK","NF_FLOW_TABLE"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tcf_ct_flow_table_get","tcf_ct_init","tcf_ct_act","nf_flow_table_init"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1b78070aaef63512688aebfbc82365ef9d6660f1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_ACT_CT","NET_CLS_ACT","NF_CONNTRACK","NF_FLOW_TABLE"],"series_id":"f9b031a6-1e69-4cb6-b486-01713405f2f9","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-09-09 09:25:37 +0000 UTC FinishedAt: 2026-09-09 12:28:17 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvd5jd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1b78070aaef63512688aebfbc82365ef9d6660f1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_ACT_CT","NET_CLS_ACT","NF_CONNTRACK","NF_FLOW_TABLE"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tcf_ct_flow_table_get","tcf_ct_init","tcf_ct_act","nf_flow_table_init"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1b78070aaef63512688aebfbc82365ef9d6660f1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_ACT_CT","NET_CLS_ACT","NF_CONNTRACK","NF_FLOW_TABLE"],"series_id":"f9b031a6-1e69-4cb6-b486-01713405f2f9","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-09-09 09:25:37 +0000 UTC FinishedAt: 2026-09-09 12:28:17 +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":["tcf_ct_flow_table_get","tcf_ct_init","tcf_ct_act","nf_flow_table_init"],"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:*fee21ee8-390f-4e72-8969-fcb3dce56928,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*3870b8c7-0b36-4820-af3f-219850fa7fff,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-workflowvd5jd/series-workflowvd5jd-build-action-1958630333/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-workflowvd5jd/series-workflowvd5jd-build-action-3936608218/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowvd5jd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1b78070aaef63512688aebfbc82365ef9d6660f1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_ACT_CT","NET_CLS_ACT","NF_CONNTRACK","NF_FLOW_TABLE"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tcf_ct_flow_table_get","tcf_ct_init","tcf_ct_act","nf_flow_table_init"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1b78070aaef63512688aebfbc82365ef9d6660f1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_ACT_CT","NET_CLS_ACT","NF_CONNTRACK","NF_FLOW_TABLE"],"series_id":"f9b031a6-1e69-4cb6-b486-01713405f2f9","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-09-09 09:25:37 +0000 UTC FinishedAt: 2026-09-09 09:25:47 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvd5jd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1b78070aaef63512688aebfbc82365ef9d6660f1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_ACT_CT","NET_CLS_ACT","NF_CONNTRACK","NF_FLOW_TABLE"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tcf_ct_flow_table_get","tcf_ct_init","tcf_ct_act","nf_flow_table_init"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1b78070aaef63512688aebfbc82365ef9d6660f1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_ACT_CT","NET_CLS_ACT","NF_CONNTRACK","NF_FLOW_TABLE"],"series_id":"f9b031a6-1e69-4cb6-b486-01713405f2f9","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-09-09 09:25:37 +0000 UTC FinishedAt: 2026-09-09 09:25:42 +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":["tcf_ct_flow_table_get","tcf_ct_init","tcf_ct_act","nf_flow_table_init"],"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-workflowvd5jd/series-workflowvd5jd-convert-artifact-3572026235/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowvd5jd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1b78070aaef63512688aebfbc82365ef9d6660f1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_ACT_CT","NET_CLS_ACT","NF_CONNTRACK","NF_FLOW_TABLE"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tcf_ct_flow_table_get","tcf_ct_init","tcf_ct_act","nf_flow_table_init"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1b78070aaef63512688aebfbc82365ef9d6660f1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_ACT_CT","NET_CLS_ACT","NF_CONNTRACK","NF_FLOW_TABLE"],"series_id":"f9b031a6-1e69-4cb6-b486-01713405f2f9","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-09-09 09:25:37 +0000 UTC FinishedAt: 2026-09-09 09:25:37 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvd5jd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1b78070aaef63512688aebfbc82365ef9d6660f1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_ACT_CT","NET_CLS_ACT","NF_CONNTRACK","NF_FLOW_TABLE"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tcf_ct_flow_table_get","tcf_ct_init","tcf_ct_act","nf_flow_table_init"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1b78070aaef63512688aebfbc82365ef9d6660f1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_ACT_CT","NET_CLS_ACT","NF_CONNTRACK","NF_FLOW_TABLE"],"series_id":"f9b031a6-1e69-4cb6-b486-01713405f2f9","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-09-09 09:25:37 +0000 UTC FinishedAt: 2026-09-09 09:25:37 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvd5jd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1b78070aaef63512688aebfbc82365ef9d6660f1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_ACT_CT","NET_CLS_ACT","NF_CONNTRACK","NF_FLOW_TABLE"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tcf_ct_flow_table_get","tcf_ct_init","tcf_ct_act","nf_flow_table_init"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1b78070aaef63512688aebfbc82365ef9d6660f1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_ACT_CT","NET_CLS_ACT","NF_CONNTRACK","NF_FLOW_TABLE"],"series_id":"f9b031a6-1e69-4cb6-b486-01713405f2f9","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-09-09 09:25:37 +0000 UTC FinishedAt: 2026-09-09 09:25:37 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvd5jd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1b78070aaef63512688aebfbc82365ef9d6660f1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_ACT_CT","NET_CLS_ACT","NF_CONNTRACK","NF_FLOW_TABLE"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tcf_ct_flow_table_get","tcf_ct_init","tcf_ct_act","nf_flow_table_init"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1b78070aaef63512688aebfbc82365ef9d6660f1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_ACT_CT","NET_CLS_ACT","NF_CONNTRACK","NF_FLOW_TABLE"],"series_id":"f9b031a6-1e69-4cb6-b486-01713405f2f9","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-09-09 09:25:47 +0000 UTC FinishedAt: 2026-09-09 12:28:17 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvd5jd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1b78070aaef63512688aebfbc82365ef9d6660f1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_ACT_CT","NET_CLS_ACT","NF_CONNTRACK","NF_FLOW_TABLE"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tcf_ct_flow_table_get","tcf_ct_init","tcf_ct_act","nf_flow_table_init"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1b78070aaef63512688aebfbc82365ef9d6660f1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_ACT_CT","NET_CLS_ACT","NF_CONNTRACK","NF_FLOW_TABLE"],"series_id":"f9b031a6-1e69-4cb6-b486-01713405f2f9","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-09-09 09:25:47 +0000 UTC FinishedAt: 2026-09-09 12:28:07 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*fee21ee8-390f-4e72-8969-fcb3dce56928,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*3870b8c7-0b36-4820-af3f-219850fa7fff,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-workflowvd5jd/series-workflowvd5jd-build-action-1958630333/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-workflowvd5jd/series-workflowvd5jd-build-action-3936608218/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-workflowvd5jd/series-workflowvd5jd-convert-artifact-3572026235/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,}