Name: series-workflow9bxsr Phase: Succeeded StartedAt: 2026-08-13 10:42:42 +0000 UTC FinishedAt: 2026-08-13 14:49:11 +0000 UTC Input: nil Output: nil --------- Name: series-workflow9bxsr[0] Phase: Succeeded StartedAt: 2026-08-13 10:42:42 +0000 UTC FinishedAt: 2026-08-13 11:08:07 +0000 UTC Input: nil Output: nil --------- Name: series-workflow9bxsr[0].run-triage Phase: Succeeded StartedAt: 2026-08-13 10:42:42 +0000 UTC FinishedAt: 2026-08-13 11:08:07 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "mm-new", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git", "commit_hash": "7ba5daade5ab61776382020b708b1ef75c9af1ea", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "NUMA" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "mm-new", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git", "commit_hash": "7ba5daade5ab61776382020b708b1ef75c9af1ea", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "NUMA" ], "series_id": "a89db2e6-bc89-45b8-a883-e6e108ee0574" }, "track": "KASAN", "fuzz": { "focus": null, "focus_symbols": [ "out_of_memory" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db" ], "skip_cover_check": true, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEzIDExOjA3PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O05VTUEmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtvdXRfb2ZfbWVtb3J5JiMzNDsKICBdLAogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIE9PTSBraWxsZXIgbG9naWMgYnkgcmVtb3ZpbmcgYSBjaGVjayBmb3IgYF9fR0ZQX1RISVNOT0RFYCBpbiBgY29uc3RyYWluZWRfYWxsb2MoKWAuIFRoaXMgaXMgYSBwdXJlbHkgbG9naWNhbCBjaGFuZ2UgYWZmZWN0aW5nIE9PTSBjb25zdHJhaW50IGV2YWx1YXRpb24gYW5kIG1lbW9yeSBhbGxvY2F0aW9uIHBvbGljaWVzLiBJdCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IG5ldyBkYXRhIHN0cnVjdHVyZXMsIG1lbW9yeSBhbGxvY2F0aW9ucywgb3IgZGF0YSBjb3BpZXMgdG8gdXNlciBzcGFjZS4gVGhlcmUgaXMgbm8gcmlzayBvZiBleHBvc2luZyB1bmluaXRpYWxpemVkIG1lbW9yeSBvciBjcmVhdGluZyBpbmZvLWxlYWtzLCBzbyBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IG5lY2Vzc2FyeS4gQW55IHBvdGVudGlhbCBidWdzIHJlc3VsdGluZyBmcm9tIHRoaXMgY2hhbmdlIChlLmcuLCBkZWFkbG9ja3Mgb3IgaW5jb3JyZWN0IG1lbW9yeSBtYW5hZ2VtZW50KSB3b3VsZCBiZSBjYXVnaHQgYnkgc3RhbmRhcmQgZGV0ZWN0b3JzIGxpa2UgS0FTQU4gb3IgTE9DS0RFUC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIE9PTSBraWxsZXImIzM5O3MgY29uc3RyYWludCBsb2dpYyBieSByZW1vdmluZyBhIGNoZWNrIGZvciBfX0dGUF9USElTTk9ERSBpbiBjb25zdHJhaW5lZF9hbGxvYygpLiBUaGlzIGNoYW5nZXMgaG93IHRoZSBPT00ga2lsbGVyIHNlbGVjdHMgdGFza3MgdG8ga2lsbCB3aGVuIG1lbW9yeSBwb2xpY2llcyBhcmUgaW4gZWZmZWN0LiBUaGUgY29kZSBpcyByZWFjaGFibGUgYW5kIGZ1bmN0aW9uYWxseSBhbHRlcnMgdGhlIGV4ZWN1dGlvbiBmbG93IG9mIHRoZSBPT00ga2lsbGVyLCBtYWtpbmcgaXQgd29ydGggZnV6emluZy4gVGhlIENPTkZJR19OVU1BIG9wdGlvbiBpcyByZXF1aXJlZCB0byByZWFjaCB0aGlzIGNvZGUuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTMgMTE6MDc8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCAyOGRjMjZkYzA0ZDVlYmIzYWEzYTg3Y2NiNjM2MzI1NTM1NGRmMmQ3XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFRodSBBdWcgMTMgMTE6MDc6MjAgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvbW0vb29tX2tpbGwuYyBiL21tL29vbV9raWxsLmNcbmluZGV4IDVmMzcyZjZlMjZmYTMuLmZkM2M0NzY4NDZhMzAgMTAwNjQ0XG4tLS0gYS9tbS9vb21fa2lsbC5jXG4mIzQzOyYjNDM7JiM0MzsgYi9tbS9vb21fa2lsbC5jXG5AQCAtMjY3LDE4ICYjNDM7MjY3LDExIEBAIHN0YXRpYyBlbnVtIG9vbV9jb25zdHJhaW50IGNvbnN0cmFpbmVkX2FsbG9jKHN0cnVjdCBvb21fY29udHJvbCAqb2MpXG4gXG4gXHRpZiAoIW9jLVx1MDAzZXpvbmVsaXN0KVxuIFx0XHRyZXR1cm4gQ09OU1RSQUlOVF9OT05FO1xuLVx0Lypcbi1cdCAqIFJlYWNoIGhlcmUgb25seSB3aGVuIF9fR0ZQX05PRkFJTCBpcyB1c2VkLiBTbywgd2Ugc2hvdWxkIGF2b2lkXG4tXHQgKiB0byBraWxsIGN1cnJlbnQuV2UgaGF2ZSB0byByYW5kb20gdGFzayBraWxsIGluIHRoaXMgY2FzZS5cbi1cdCAqIEhvcGVmdWxseSwgQ09OU1RSQUlOVF9USElTTk9ERS4uLmJ1dCBubyB3YXkgdG8gaGFuZGxlIGl0LCBub3cuXG4tXHQgKi9cbi1cdGlmIChvYy1cdTAwM2VnZnBfbWFzayBcdTAwMjYgX19HRlBfVEhJU05PREUpXG4tXHRcdHJldHVybiBDT05TVFJBSU5UX05PTkU7XG4gXG4gXHQvKlxuLVx0ICogVGhpcyBpcyBub3QgYSBfX0dGUF9USElTTk9ERSBhbGxvY2F0aW9uLCBzbyBhIHRydW5jYXRlZCBub2RlbWFzayBpblxuLVx0ICogdGhlIHBhZ2UgYWxsb2NhdG9yIG1lYW5zIGEgbWVtcG9saWN5IGlzIGluIGVmZmVjdC4gIENwdXNldCBwb2xpY3lcbi1cdCAqIGlzIGVuZm9yY2VkIGluIGdldF9wYWdlX2Zyb21fZnJlZWxpc3QoKS5cbiYjNDM7XHQgKiBBIHRydW5jYXRlZCBub2RlbWFzayBpbiB0aGUgcGFnZSBhbGxvY2F0b3IgbWVhbnMgYSBtZW1wb2xpY3lcbiYjNDM7XHQgKiBpcyBpbiBlZmZlY3QuICBDcHVzZXQgcG9saWN5IGlzIGVuZm9yY2VkIGluXG4mIzQzO1x0ICogZ2V0X3BhZ2VfZnJvbV9mcmVlbGlzdCgpLlxuIFx0ICovXG4gXHRpZiAob2MtXHUwMDNlbm9kZW1hc2sgXHUwMDI2XHUwMDI2XG4gXHQgICAgIW5vZGVzX3N1YnNldChub2RlX3N0YXRlc1tOX01FTU9SWV0sICpvYy1cdTAwM2Vub2RlbWFzaykpIHtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMyAxMTowNzwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5iZXN0LWV4cGVuc2l2ZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7TlVNQSYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O291dF9vZl9tZW1vcnkmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIE9PTSBraWxsZXImIzM5O3MgY29uc3RyYWludCBsb2dpYyBieSByZW1vdmluZyBhIGNoZWNrIGZvciBfX0dGUF9USElTTk9ERSBpbiBjb25zdHJhaW5lZF9hbGxvYygpLiBUaGlzIGNoYW5nZXMgaG93IHRoZSBPT00ga2lsbGVyIHNlbGVjdHMgdGFza3MgdG8ga2lsbCB3aGVuIG1lbW9yeSBwb2xpY2llcyBhcmUgaW4gZWZmZWN0LiBUaGUgY29kZSBpcyByZWFjaGFibGUgYW5kIGZ1bmN0aW9uYWxseSBhbHRlcnMgdGhlIGV4ZWN1dGlvbiBmbG93IG9mIHRoZSBPT00ga2lsbGVyLCBtYWtpbmcgaXQgd29ydGggZnV6emluZy4gVGhlIENPTkZJR19OVU1BIG9wdGlvbiBpcyByZXF1aXJlZCB0byByZWFjaCB0aGlzIGNvZGUuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuCi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSkKICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgogICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnMKICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuCjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLgogICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCiAgIEFsc28gY2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzCiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncwogICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCAyOGRjMjZkYzA0ZDVlYmIzYWEzYTg3Y2NiNjM2MzI1NTM1NGRmMmQ3CkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFRodSBBdWcgMTMgMTE6MDc6MjAgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9tbS9vb21fa2lsbC5jIGIvbW0vb29tX2tpbGwuYwppbmRleCA1ZjM3MmY2ZTI2ZmEzLi5mZDNjNDc2ODQ2YTMwIDEwMDY0NAotLS0gYS9tbS9vb21fa2lsbC5jCiYjNDM7JiM0MzsmIzQzOyBiL21tL29vbV9raWxsLmMKQEAgLTI2NywxOCAmIzQzOzI2NywxMSBAQCBzdGF0aWMgZW51bSBvb21fY29uc3RyYWludCBjb25zdHJhaW5lZF9hbGxvYyhzdHJ1Y3Qgb29tX2NvbnRyb2wgKm9jKQogCiAJaWYgKCFvYy0mZ3Q7em9uZWxpc3QpCiAJCXJldHVybiBDT05TVFJBSU5UX05PTkU7Ci0JLyoKLQkgKiBSZWFjaCBoZXJlIG9ubHkgd2hlbiBfX0dGUF9OT0ZBSUwgaXMgdXNlZC4gU28sIHdlIHNob3VsZCBhdm9pZAotCSAqIHRvIGtpbGwgY3VycmVudC5XZSBoYXZlIHRvIHJhbmRvbSB0YXNrIGtpbGwgaW4gdGhpcyBjYXNlLgotCSAqIEhvcGVmdWxseSwgQ09OU1RSQUlOVF9USElTTk9ERS4uLmJ1dCBubyB3YXkgdG8gaGFuZGxlIGl0LCBub3cuCi0JICovCi0JaWYgKG9jLSZndDtnZnBfbWFzayAmYW1wOyBfX0dGUF9USElTTk9ERSkKLQkJcmV0dXJuIENPTlNUUkFJTlRfTk9ORTsKIAogCS8qCi0JICogVGhpcyBpcyBub3QgYSBfX0dGUF9USElTTk9ERSBhbGxvY2F0aW9uLCBzbyBhIHRydW5jYXRlZCBub2RlbWFzayBpbgotCSAqIHRoZSBwYWdlIGFsbG9jYXRvciBtZWFucyBhIG1lbXBvbGljeSBpcyBpbiBlZmZlY3QuICBDcHVzZXQgcG9saWN5Ci0JICogaXMgZW5mb3JjZWQgaW4gZ2V0X3BhZ2VfZnJvbV9mcmVlbGlzdCgpLgomIzQzOwkgKiBBIHRydW5jYXRlZCBub2RlbWFzayBpbiB0aGUgcGFnZSBhbGxvY2F0b3IgbWVhbnMgYSBtZW1wb2xpY3kKJiM0MzsJICogaXMgaW4gZWZmZWN0LiAgQ3B1c2V0IHBvbGljeSBpcyBlbmZvcmNlZCBpbgomIzQzOwkgKiBnZXRfcGFnZV9mcm9tX2ZyZWVsaXN0KCkuCiAJICovCiAJaWYgKG9jLSZndDtub2RlbWFzayAmYW1wOyZhbXA7CiAJICAgICFub2Rlc19zdWJzZXQobm9kZV9zdGF0ZXNbTl9NRU1PUlldLCAqb2MtJmd0O25vZGVtYXNrKSkgewo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMyAxMTowNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMTUyCgkJCQkJCQlvdXRwdXQ6IDMwCgkJCQkJCQl0aG91Z2h0czogMjAwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgT09NIEtpbGxlciBQYXRjaCoqCgpPa2F5LCBzbyB0aGlzIHBhdGNoIGlzIHRvdWNoaW5nIGBtbS9vb21fa2lsbC5jYCwgc3BlY2lmaWNhbGx5IGBjb25zdHJhaW5lZF9hbGxvYygpYC4gVGhlIGNvcmUgb2YgdGhlIGNoYW5nZSBzZWVtcyB0byBiZSByZW1vdmluZyBhIGNoZWNrIGZvciBgX19HRlBfVEhJU05PREVgLiBIbW0sIGxldCYjMzk7cyBzZWUsIHRoZSBvcmlnaW5hbCBjb2RlIGhhZCB0aGlzOgoKYGBgYwoJaWYgKG9jLSZndDtnZnBfbWFzayAmYW1wOyBfX0dGUF9USElTTk9ERSkKCQlyZXR1cm4gQ09OU1RSQUlOVF9OT05FOwpgYGAKClRoaXMgKnJlbW92ZXMqIHRoaXMsIG1lYW5pbmcgaXQmIzM5O3MgYWx0ZXJpbmcgdGhlIGJlaGF2aW9yIG9mIHRoZSBPT00ga2lsbGVyIHdoZW4gYF9fR0ZQX1RISVNOT0RFYCBpcyBpbiBwbGF5LiBUaGUgY29tbWVudCBpbiB0aGUgb3JpZ2luYWwgY29kZSBpcyBwcmV0dHkgZW5saWdodGVuaW5nLCBpdCBzYXlzIHRoaXMgc2VjdGlvbiBpcyByZWFjaGVkIG9ubHkgd2hlbiBgX19HRlBfTk9GQUlMYCBpcyB1c2VkLiBUaGUgY29tbWVudCBzdGF0ZXMgdGhhdCBraWxsaW5nIHRoZSBjdXJyZW50IHRhc2sgaXMgdG8gYmUgYXZvaWRlZCBhbmQgdGhlIGNvZGUgcmFuZG9tbHkga2lsbHMgYW5vdGhlciB0YXNrLiBUaGF0IGRvZXNuJiMzOTt0IHNlZW0gb3B0aW1hbCBidXQgaXQgaXMgdGhlIGNvZGUgdGhhdCBpcyBiZWluZyByZW1vdmVkLiBJIGhhdmUgdG8gdGhpbmsgYWJvdXQgd2hhdCB0aGlzIG1lYW5zIGluIHRlcm1zIG9mIGNvbnN0cmFpbnQgbG9naWMuIEkgc2hvdWxkIHByb2JhYmx5IHJlLWV4YW1pbmUgaG93IGBjb25zdHJhaW5lZF9hbGxvY2AgaXMgdXNlZCB3aXRoaW4gYG1tL29vbV9raWxsLmNgIHRvIGZ1bGx5IGdyYXNwIHRoZSByYW1pZmljYXRpb25zIG9mIHRoaXMgY2hhbmdlLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aHkgdGhpcyBjaGVjayB3YXMgdGhlcmUgaW4gdGhlIGZpcnN0IHBsYWNlLCBhbmQgd2hhdCB0aGUgaW1wbGljYXRpb25zIG9mIGl0cyByZW1vdmFsIGFyZSBmb3IgdGhlIHZhcmlvdXMgYWxsb2NhdGlvbiBzY2VuYXJpb3MsIGVzcGVjaWFsbHkgdGhvc2UgdGhhdCBpbnZvbHZlIGBfX0dGUF9OT0ZBSUxgLiAKCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMyAxMTowNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25zdHJhaW5lZF9hbGxvYyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tL29vbV9raWxsLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vb29tX2tpbGwuYz0yMzk9c3RhdGljIGNvbnN0IGNoYXIgKiBjb25zdCBvb21fY29uc3RyYWludF90ZXh0W10gPSB7XG4tLVxubW0vb29tX2tpbGwuYy0yNDgtICovXG5tbS9vb21fa2lsbC5jOjI0OTpzdGF0aWMgZW51bSBvb21fY29uc3RyYWludCBjb25zdHJhaW5lZF9hbGxvYyhzdHJ1Y3Qgb29tX2NvbnRyb2wgKm9jKVxubW0vb29tX2tpbGwuYy0yNTAte1xuLS1cbm1tL29vbV9raWxsLmM9MTA5Nj1ib29sIG91dF9vZl9tZW1vcnkoc3RydWN0IG9vbV9jb250cm9sICpvYylcbi0tXG5tbS9vb21fa2lsbC5jLTExMzItXHQgKi9cbm1tL29vbV9raWxsLmM6MTEzMzpcdG9jLVx1MDAzZWNvbnN0cmFpbnQgPSBjb25zdHJhaW5lZF9hbGxvYyhvYyk7XG5tbS9vb21fa2lsbC5jLTExMzQtXHRpZiAob2MtXHUwMDNlY29uc3RyYWludCAhPSBDT05TVFJBSU5UX01FTU9SWV9QT0xJQ1kpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTMgMTE6MDc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjg1OQoJCQkJCQkJb3V0cHV0OiAzMwoJCQkJCQkJdGhvdWdodHM6IDk1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKktlcm5lbCBNZW1vcnkgQWxsb2NhdGlvbiBQYXRjaCBBbmFseXNpcyoqCgpPa2F5LCBzbyB0aGlzIHBhdGNoIGlzIHRvdWNoaW5nIGBjb25zdHJhaW5lZF9hbGxvY2AuIEFuZCBJIGtub3cgdGhhdCBmdW5jdGlvbiBpcyBjYWxsZWQgYnkgYG91dF9vZl9tZW1vcnlgIOKAkyB0aGF0JiMzOTtzIHRoZSBPT00ga2lsbGVyISBUaGlzIGlzIHByZXR0eSBzZXJpb3VzIHN0dWZmOyB3ZSYjMzk7cmUgdGFsa2luZyBhYm91dCBjb3JlIGtlcm5lbCBtZW1vcnkgbWFuYWdlbWVudCwgdGhlIHNvcnQgb2YgY29kZSB0aGF0JiMzOTtzIHJpcGUgZm9yIGV4cGxvaXRhdGlvbiBpZiB0aGVyZSYjMzk7cyBldmVuIGEgc3VidGxlIGJ1Zy4gTXkgZmlyc3QgaW5zdGluY3QgaXMsIGRlZmluaXRlbHksIGZ1enogdGhpcy4KCk5vdywgbXkgZm9jdXMgaXMgZ29pbmcgdG8gYmUgb24gYGNvbnN0cmFpbmVkX2FsbG9jYCBhbmQgYG91dF9vZl9tZW1vcnlgLiBXYWl0IGEgc2Vjb25k4oCmIGlzbiYjMzk7dCBgY29uc3RyYWluZWRfYWxsb2NgIGRlY2xhcmVkIHN0YXRpYz8gVGhhdCBjb3VsZCBjb21wbGljYXRlIHRoaW5ncyBhIGJpdC4gSXQgaXMsIGFuZCBgb3V0X29mX21lbW9yeWAgaXMgbm90LiBUaGlzIG1lYW5zIEkgbmVlZCB0byBkb3VibGUtY2hlY2sgd2hldGhlciBgb3V0X29mX21lbW9yeWAgaXMgZXhwb3J0ZWQgb3IgZ2xvYmFsLiBHb3R0YSBzZWUgaWYgdGhlcmUmIzM5O3MgYW55IHdheSB0byBkaXJlY3RseSBjYWxsIGl0LCBpZiBJIHdhbnQgdG8gaGF2ZSBhIGxvb2staW4gZnJvbSB1c2VyLXNwYWNlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEzIDExOjA3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2Jvb2wgb3V0X29mX21lbW9yeSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tL29vbV9raWxsLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vb29tX2tpbGwuYz0xMDg1PUVYUE9SVF9TWU1CT0xfR1BMKHVucmVnaXN0ZXJfb29tX25vdGlmaWVyKTtcbi0tXG5tbS9vb21fa2lsbC5jLTEwOTUtICovXG5tbS9vb21fa2lsbC5jOjEwOTY6Ym9vbCBvdXRfb2ZfbWVtb3J5KHN0cnVjdCBvb21fY29udHJvbCAqb2MpXG5tbS9vb21fa2lsbC5jLTEwOTcte1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEzIDExOjA3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDMyODMKCQkJCQkJCW91dHB1dDogMzEKCQkJCQkJCXRob3VnaHRzOiA3NAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIE9PTSBTaXR1YXRpb24qKgoKT2theSwgc28gSSYjMzk7bSBkZWFsaW5nIHdpdGggYW4gYG91dF9vZl9tZW1vcnlgIHNjZW5hcmlvIGhlcmUuIFRoZSBrZXkgaXMgdGhhdCBgb3V0X29mX21lbW9yeWAgaXMgYSBnbG9iYWwgZnVuY3Rpb24sIHdoaWNoIGdpdmVzIHVzIGEgY2VydGFpbiBsZXZlbCBvZiBjb250cm9sLCBidXQgd2UgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBzcGVjaWZpY3MuIE15IGZpcnN0IHRob3VnaHQgaXMgdG8gZGlnIGludG8gdGhlIGNvbmZpZ3VyYXRpb24g4oCTIGFyZSB0aGVyZSBhbnkgY3VzdG9tIGNvbmZpZ3VyYXRpb25zIHRoYXQgbWlnaHQgYmUgaW5mbHVlbmNpbmcgdGhpcyBiZWhhdmlvcj8gVGhlIE9PTSBraWxsZXIgaXMsIGFzIGV4cGVjdGVkLCBhIGJ1aWx0LWluIGZ1bmN0aW9uIG9mIHRoZSBjb3JlIHN5c3RlbS4gTm93LCB0aGUgcHJldmlvdXMgY29kZSBoYWQgc29tZSBjaGVja3MgcmVsYXRlZCB0byBgX19HRlBfVEhJU05PREVgIGFuZCBgb2MtJmd0O25vZGVtYXNrYC4gS25vd2luZyB0aGlzIGlzIGNyaXRpY2FsLCBiZWNhdXNlIHRoaXMgbGlrZWx5IHBvaW50cyB0b3dhcmRzIE5VTUEgY29uZmlndXJhdGlvbnMgb3IgbWVtcG9saWN5IHNldHRpbmdzLiBJIGhhdmUgdG8gc2VlIGlmIHRoZXJlIGFyZSBzcGVjaWZpYyBjb25maWd1cmF0aW9ucyByZWxhdGVkIHRvIHRob3NlIGFyZWFzIHRoYXQgd2UgbmVlZCB0byBleGFtaW5lIGZ1cnRoZXIuIFRoaXMgaXMgd2hlcmUgdGhlIHJvb3Qgb2YgdGhlIHByb2JsZW0gbWlnaHQgbGllLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEzIDExOjA3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O0NPTkZJR19OVU1BJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vb29tX2tpbGwuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9vb21fa2lsbC5jPTcyPXN0YXRpYyBpbmxpbmUgYm9vbCBpc19tZW1jZ19vb20oc3RydWN0IG9vbV9jb250cm9sICpvYylcbi0tXG5tbS9vb21fa2lsbC5jLTc2LVxubW0vb29tX2tpbGwuYzo3NzojaWZkZWYgQ09ORklHX05VTUFcbm1tL29vbV9raWxsLmMtNzgtLyoqXG4tLVxubW0vb29tX2tpbGwuYz0xMjI9c3RhdGljIGJvb2wgb29tX2NwdXNldF9lbGlnaWJsZShzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRzaywgc3RydWN0IG9vbV9jb250cm9sICpvYylcbi0tXG5tbS9vb21fa2lsbC5jLTEyNS19XG5tbS9vb21fa2lsbC5jOjEyNjojZW5kaWYgLyogQ09ORklHX05VTUEgKi9cbm1tL29vbV9raWxsLmMtMTI3LVxuLS1cbm1tL29vbV9raWxsLmM9MjQ5PXN0YXRpYyBlbnVtIG9vbV9jb25zdHJhaW50IGNvbnN0cmFpbmVkX2FsbG9jKHN0cnVjdCBvb21fY29udHJvbCAqb2MpXG4tLVxubW0vb29tX2tpbGwuYy0yNjQtXG5tbS9vb21fa2lsbC5jOjI2NTpcdGlmICghSVNfRU5BQkxFRChDT05GSUdfTlVNQSkpXG5tbS9vb21fa2lsbC5jLTI2Ni1cdFx0cmV0dXJuIENPTlNUUkFJTlRfTk9ORTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMyAxMTowNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzODMwCgkJCQkJCQlvdXRwdXQ6IDM1CgkJCQkJCQl0aG91Z2h0czogNDIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIGFzc3VtaW5nIEkmIzM5O20gZGVlcCBpbiB0aGUgd2VlZHMgb2Yga2VybmVsIG1lbW9yeSBtYW5hZ2VtZW50OgoKKipEaWdnaW5nIGludG8gYGNvbnN0cmFpbmVkX2FsbG9jYCoqCgpSaWdodCwgcmlnaHQsIHRoYXQmIzM5O3MgaXQhIEkgcmVtZW1iZXIgbm93LCBgY29uc3RyYWluZWRfYWxsb2NgIGltbWVkaWF0ZWx5IGNoZWNrcyBmb3IgYENPTkZJR19OVU1BYCBiZWZvcmUgZG9pbmcgYW55dGhpbmcgaW50ZXJlc3RpbmcuIFNwZWNpZmljYWxseSwgaXQgaGFzIGFuIGBpZiAoIUlTX0VOQUJMRUQoQ09ORklHX05VTUEpKSByZXR1cm4gQ09OU1RSQUlOVF9OT05FO2AgY2hlY2sgcmlnaHQgYmVmb3JlIHRoZSBzdHVmZiBJIHdhcyBsb29raW5nIGF0ISBUaGF0JiMzOTtzIGEga2V5IGRldGFpbCBJIGFsbW9zdCBtaXNzZWQuIE9rYXksIGxldCYjMzk7cyByZWZyZXNoIG15IG1lbW9yeSBvbiB0aGUgd2hvbGUgZnVuY3Rpb24uIFRpbWUgdG8gZGl2ZSBpbnRvIHRoZSBjb2RlIGZvciBgY29uc3RyYWluZWRfYWxsb2NgIGFuZCBzZWUgd2hhdCYjMzk7cyB3aGF0LiBHb3R0YSB1bmRlcnN0YW5kIHRoaXMgZnVsbHkgYmVmb3JlIEkgY2FuIHByb2NlZWQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEzIDExOjA3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bW0vb29tX2tpbGwuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDI0OSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA1MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgMjQ5Olx0c3RhdGljIGVudW0gb29tX2NvbnN0cmFpbnQgY29uc3RyYWluZWRfYWxsb2Moc3RydWN0IG9vbV9jb250cm9sICpvYylcbiAyNTA6XHR7XG4gMjUxOlx0XHRzdHJ1Y3Qgem9uZSAqem9uZTtcbiAyNTI6XHRcdHN0cnVjdCB6b25lcmVmICp6O1xuIDI1MzpcdFx0ZW51bSB6b25lX3R5cGUgaGlnaGVzdF96b25laWR4ID0gZ2ZwX3pvbmUob2MtXHUwMDNlZ2ZwX21hc2spO1xuIDI1NDpcdFx0Ym9vbCBjcHVzZXRfbGltaXRlZCA9IGZhbHNlO1xuIDI1NTpcdFx0aW50IG5pZDtcbiAyNTY6XHRcbiAyNTc6XHRcdGlmIChpc19tZW1jZ19vb20ob2MpKSB7XG4gMjU4Olx0XHRcdG9jLVx1MDAzZXRvdGFscGFnZXMgPSBtZW1fY2dyb3VwX2dldF9tYXgob2MtXHUwMDNlbWVtY2cpID86IDE7XG4gMjU5Olx0XHRcdHJldHVybiBDT05TVFJBSU5UX01FTUNHO1xuIDI2MDpcdFx0fVxuIDI2MTpcdFxuIDI2MjpcdFx0LyogRGVmYXVsdCB0byBhbGwgYXZhaWxhYmxlIG1lbW9yeSAqL1xuIDI2MzpcdFx0b2MtXHUwMDNldG90YWxwYWdlcyA9IHRvdGFscmFtX3BhZ2VzKCkgJiM0MzsgdG90YWxfc3dhcF9wYWdlcztcbiAyNjQ6XHRcbiAyNjU6XHRcdGlmICghSVNfRU5BQkxFRChDT05GSUdfTlVNQSkpXG4gMjY2Olx0XHRcdHJldHVybiBDT05TVFJBSU5UX05PTkU7XG4gMjY3Olx0XG4gMjY4Olx0XHRpZiAoIW9jLVx1MDAzZXpvbmVsaXN0KVxuIDI2OTpcdFx0XHRyZXR1cm4gQ09OU1RSQUlOVF9OT05FO1xuIDI3MDpcdFxuIDI3MTpcdFx0LypcbiAyNzI6XHRcdCAqIEEgdHJ1bmNhdGVkIG5vZGVtYXNrIGluIHRoZSBwYWdlIGFsbG9jYXRvciBtZWFucyBhIG1lbXBvbGljeVxuIDI3MzpcdFx0ICogaXMgaW4gZWZmZWN0LiAgQ3B1c2V0IHBvbGljeSBpcyBlbmZvcmNlZCBpblxuIDI3NDpcdFx0ICogZ2V0X3BhZ2VfZnJvbV9mcmVlbGlzdCgpLlxuIDI3NTpcdFx0ICovXG4gMjc2Olx0XHRpZiAob2MtXHUwMDNlbm9kZW1hc2sgXHUwMDI2XHUwMDI2XG4gMjc3Olx0XHQgICAgIW5vZGVzX3N1YnNldChub2RlX3N0YXRlc1tOX01FTU9SWV0sICpvYy1cdTAwM2Vub2RlbWFzaykpIHtcbiAyNzg6XHRcdFx0b2MtXHUwMDNldG90YWxwYWdlcyA9IHRvdGFsX3N3YXBfcGFnZXM7XG4gMjc5Olx0XHRcdGZvcl9lYWNoX25vZGVfbWFzayhuaWQsICpvYy1cdTAwM2Vub2RlbWFzaylcbiAyODA6XHRcdFx0XHRvYy1cdTAwM2V0b3RhbHBhZ2VzICYjNDM7PSBub2RlX3ByZXNlbnRfcGFnZXMobmlkKTtcbiAyODE6XHRcdFx0cmV0dXJuIENPTlNUUkFJTlRfTUVNT1JZX1BPTElDWTtcbiAyODI6XHRcdH1cbiAyODM6XHRcbiAyODQ6XHRcdC8qIENoZWNrIHRoaXMgYWxsb2NhdGlvbiBmYWlsdXJlIGlzIGNhdXNlZCBieSBjcHVzZXQmIzM5O3Mgd2FsbCBmdW5jdGlvbiAqL1xuIDI4NTpcdFx0Zm9yX2VhY2hfem9uZV96b25lbGlzdF9ub2RlbWFzayh6b25lLCB6LCBvYy1cdTAwM2V6b25lbGlzdCxcbiAyODY6XHRcdFx0XHRoaWdoZXN0X3pvbmVpZHgsIG9jLVx1MDAzZW5vZGVtYXNrKVxuIDI4NzpcdFx0XHRpZiAoIWNwdXNldF96b25lX2FsbG93ZWQoem9uZSwgb2MtXHUwMDNlZ2ZwX21hc2spKVxuIDI4ODpcdFx0XHRcdGNwdXNldF9saW1pdGVkID0gdHJ1ZTtcbiAyODk6XHRcbiAyOTA6XHRcdGlmIChjcHVzZXRfbGltaXRlZCkge1xuIDI5MTpcdFx0XHRvYy1cdTAwM2V0b3RhbHBhZ2VzID0gdG90YWxfc3dhcF9wYWdlcztcbiAyOTI6XHRcdFx0Zm9yX2VhY2hfbm9kZV9tYXNrKG5pZCwgY3B1c2V0X2N1cnJlbnRfbWVtc19hbGxvd2VkKVxuIDI5MzpcdFx0XHRcdG9jLVx1MDAzZXRvdGFscGFnZXMgJiM0Mzs9IG5vZGVfcHJlc2VudF9wYWdlcyhuaWQpO1xuIDI5NDpcdFx0XHRyZXR1cm4gQ09OU1RSQUlOVF9DUFVTRVQ7XG4gMjk1Olx0XHR9XG4gMjk2Olx0XHRyZXR1cm4gQ09OU1RSQUlOVF9OT05FO1xuIDI5NzpcdH1cbiAyOTg6XHRcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTMgMTE6MDc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDgzNQoJCQkJCQkJb3V0cHV0OiAzMgoJCQkJCQkJdGhvdWdodHM6IDEzMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBc3Nlc3NtZW50IG9mIHRoZSBPT00gS2lsbGVyIENoYW5nZSoqCgpPa2F5LCBzbyB0aGlzIGNvZGUgcGF0aCBJJiMzOTttIGxvb2tpbmcgYXQsIHRoZSBvbmUgdGhlIHBhdGNoIG1vZGlmaWVzLCBpcyBvbmx5IGhpdCBpZiBgQ09ORklHX05VTUFgIGlzIGVuYWJsZWQuIFRoYXQmIzM5O3MgZ29vZCB0byBrbm93LCBuYXJyb3dzIGRvd24gdGhlIHBvdGVudGlhbCBpbXBhY3QuIFRoZSByZWFsIG1lYXQgb2YgdGhpcyBpcyB0aGF0IHRoZSBwYXRjaCByZW1vdmVzIHRoZSBgX19HRlBfVEhJU05PREVgIGNoZWNrIHdpdGhpbiB0aGUgT09NIGtpbGxlciBsb2dpYy4gRnVuY3Rpb25hbGx5LCB0aGlzIGlzIGEgY2hhbmdlIGluIHRoZSBPT00ga2lsbGVyJiMzOTtzIGJlaGF2aW9yLCBhbmQgdGhhdCwgbXkgZnJpZW5kLCBpbW1lZGlhdGVseSBmbGFncyB0aGlzIGFzIHNvbWV0aGluZyB0byBtZXRpY3Vsb3VzbHkgdGVzdC4gR2l2ZW4gdGhhdCwgSSYjMzk7ZCBzYXkgZnV6emluZyBpcyBhYnNvbHV0ZWx5IHdhcnJhbnRlZCBoZXJlLgoKTGV0JiMzOTtzIGZvY3VzIHRoZSBmdXp6aW5nIGVmZm9ydHMuIFRoZSBwcmltYXJ5IHN5bWJvbCB0byB0YXJnZXQgaXMgZGVmaW5pdGVseSBgb3V0X29mX21lbW9yeWAuIFRoYXQmIzM5O3MgdGhlIGVudHJ5IHBvaW50LCB0aGUgY3JpdGljYWwgZnVuY3Rpb24gaGVyZS4gSSYjMzk7bGwgbmVlZCB0byBlbmFibGUgYE5VTUFgIGluIG15IGZ1enppbmcgc2V0dXAgdG8gZXhlcmNpc2UgdGhpcyBjb2RlLgoKSnVzdCB0byBiZSBhYnNvbHV0ZWx5IGNlcnRhaW4sIGxldCBtZSBxdWlja2x5IGRvdWJsZS1jaGVjayB0aGF0IGBDT05GSUdfTlVNQWAgaXMgdGhlICpvbmx5KiByZXF1aXJlZCBjb25maWcuIFl1cCwgbG9va3MgbGlrZSBpdCYjMzk7cyB0aGUgbWFpbiBvbmUsIGFzIGV4cGVjdGVkLiBOb3csIHRoaW5raW5nIGFib3V0IHRoZSBPT00ga2lsbGVyJiMzOTtzIGVudHJ5IHBvaW50c+KApiBpcyBgb3V0X29mX21lbW9yeWAgdGhlICpvbmx5KiBvbmU/IEhtbSwgd2hhdCBhYm91dCBgcGFnZWZhdWx0X291dF9vZl9tZW1vcnlgPyBOZWVkIHRvIGNvbnNpZGVyIHRoYXQgb25lIHRvby4gSSYjMzk7bGwgbmVlZCB0byBrZWVwIHRoYXQgaW4gbWluZCB3aGVuIHNjb3BpbmcgdGhlIGZ1enppbmcgdGFyZ2V0cyBhbmQgYW55IGFzc29jaWF0ZWQgYW5hbHlzaXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEzIDExOjA3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O291dF9vZl9tZW1vcnkmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS9vb21fa2lsbC5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL29vbV9raWxsLmM9NTg9c3RhdGljIGludCBzeXNjdGxfb29tX2R1bXBfdGFza3MgPSAxO1xuLS1cbm1tL29vbV9raWxsLmMtNjAtLypcbm1tL29vbV9raWxsLmM6NjE6ICogU2VyaWFsaXplcyBvb20ga2lsbGVyIGludm9jYXRpb25zIChvdXRfb2ZfbWVtb3J5KCkpIGZyb20gYWxsIGNvbnRleHRzIHRvXG5tbS9vb21fa2lsbC5jLTYyLSAqIHByZXZlbnQgZnJvbSBvdmVyIGVhZ2VyIG9vbSBraWxsaW5nIChlLmcuIHdoZW4gdGhlIG9vbSBraWxsZXIgaXMgaW52b2tlZFxuLS1cbm1tL29vbV9raWxsLmM9MTA4NT1FWFBPUlRfU1lNQk9MX0dQTCh1bnJlZ2lzdGVyX29vbV9ub3RpZmllcik7XG4tLVxubW0vb29tX2tpbGwuYy0xMDg3LS8qKlxubW0vb29tX2tpbGwuYzoxMDg4OiAqIG91dF9vZl9tZW1vcnkgLSBraWxsIHRoZSBcJiMzNDtiZXN0XCYjMzQ7IHByb2Nlc3Mgd2hlbiB3ZSBydW4gb3V0IG9mIG1lbW9yeVxubW0vb29tX2tpbGwuYy0xMDg5LSAqIEBvYzogcG9pbnRlciB0byBzdHJ1Y3Qgb29tX2NvbnRyb2xcbi0tXG5tbS9vb21fa2lsbC5jLTEwOTUtICovXG5tbS9vb21fa2lsbC5jOjEwOTY6Ym9vbCBvdXRfb2ZfbWVtb3J5KHN0cnVjdCBvb21fY29udHJvbCAqb2MpXG5tbS9vb21fa2lsbC5jLTEwOTcte1xuLS1cbm1tL29vbV9raWxsLmMtMTE3Mi0gKi9cbm1tL29vbV9raWxsLmM6MTE3Mzp2b2lkIHBhZ2VmYXVsdF9vdXRfb2ZfbWVtb3J5KHZvaWQpXG5tbS9vb21fa2lsbC5jLTExNzQte1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMyAxMTowNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1NjMxCgkJCQkJCQlvdXRwdXQ6IDEyMQoJCQkJCQkJdGhvdWdodHM6IDEyOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBPT00gS2lsbGVyIEFuYWx5c2lzKioKCk9rYXksIHNvIHRoZSBiaWdnZXN0IGZsYWcgaGVyZSBpcywgdW5zdXJwcmlzaW5nbHksIGBvdXRfb2ZfbWVtb3J5YC4gVGhhdCYjMzk7cyB3aGVyZSBJIG5lZWQgdG8gZm9jdXMuIEkmIzM5O20gZ29pbmcgdG8gc2V0IHRoYXQgYXMgbXkgcHJpbWFyeSBzeW1ib2wsIHRoZSBjZW50cmFsIHBvaW50IG9mIHRoaXMgaW52ZXN0aWdhdGlvbi4KClRoZSBrZXkgY2hhbmdlIGlzIGluIHRoZSBPT00ga2lsbGVyJiMzOTtzIGNvbnN0cmFpbnQgbG9naWMsIHNwZWNpZmljYWxseSB0aGUgcmVtb3ZhbCBvZiB0aGUgYF9fR0ZQX1RISVNOT0RFYCBjaGVjayB3aXRoaW4gYGNvbnN0cmFpbmVkX2FsbG9jKClgLiBUaGlzIHN1YnRseSBidXQgc2lnbmlmaWNhbnRseSBhbHRlcnMgaG93IHRoZSBPT00ga2lsbGVyIGJlaGF2ZXMgd2hlbiBtZW1vcnkgcG9saWNpZXMgYXJlIGFjdGl2ZWx5IGluIHBsYXkuIEl0IHNlZW1zIHRoaXMgbW9kaWZpY2F0aW9uICpkb2VzKiBhbHRlciB0aGUgY29udHJvbCBmbG93IG9mIHRoZSBPT00ga2lsbGVyLCBtYWtpbmcgaXQgYSB2aWFibGUgdGFyZ2V0IGZvciBmdXp6aW5nLiBOb3csIHRvIGdldCB0aGlzIGNvZGUgdG8gZXhlY3V0ZSwgSSYjMzk7bGwgbmVlZCB0byBlbmFibGUgYENPTkZJR19OVU1BYC4gVGhhdCYjMzk7cyB0aGUgZW5hYmxlci4gR290IGl0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMyAxMTowNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7TlVNQSYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O291dF9vZl9tZW1vcnkmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIE9PTSBraWxsZXImIzM5O3MgY29uc3RyYWludCBsb2dpYyBieSByZW1vdmluZyBhIGNoZWNrIGZvciBfX0dGUF9USElTTk9ERSBpbiBjb25zdHJhaW5lZF9hbGxvYygpLiBUaGlzIGNoYW5nZXMgaG93IHRoZSBPT00ga2lsbGVyIHNlbGVjdHMgdGFza3MgdG8ga2lsbCB3aGVuIG1lbW9yeSBwb2xpY2llcyBhcmUgaW4gZWZmZWN0LiBUaGUgY29kZSBpcyByZWFjaGFibGUgYW5kIGZ1bmN0aW9uYWxseSBhbHRlcnMgdGhlIGV4ZWN1dGlvbiBmbG93IG9mIHRoZSBPT00ga2lsbGVyLCBtYWtpbmcgaXQgd29ydGggZnV6emluZy4gVGhlIENPTkZJR19OVU1BIG9wdGlvbiBpcyByZXF1aXJlZCB0byByZWFjaCB0aGlzIGNvZGUuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O05VTUEmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtvdXRfb2ZfbWVtb3J5JiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBPT00ga2lsbGVyJiMzOTtzIGNvbnN0cmFpbnQgbG9naWMgYnkgcmVtb3ZpbmcgYSBjaGVjayBmb3IgX19HRlBfVEhJU05PREUgaW4gY29uc3RyYWluZWRfYWxsb2MoKS4gVGhpcyBjaGFuZ2VzIGhvdyB0aGUgT09NIGtpbGxlciBzZWxlY3RzIHRhc2tzIHRvIGtpbGwgd2hlbiBtZW1vcnkgcG9saWNpZXMgYXJlIGluIGVmZmVjdC4gVGhlIGNvZGUgaXMgcmVhY2hhYmxlIGFuZCBmdW5jdGlvbmFsbHkgYWx0ZXJzIHRoZSBleGVjdXRpb24gZmxvdyBvZiB0aGUgT09NIGtpbGxlciwgbWFraW5nIGl0IHdvcnRoIGZ1enppbmcuIFRoZSBDT05GSUdfTlVNQSBvcHRpb24gaXMgcmVxdWlyZWQgdG8gcmVhY2ggdGhpcyBjb2RlLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE1LzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMyAxMTowNzwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+SWY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEzIDExOjA3PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmJlc3QtZXhwZW5zaXZlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBPT00ga2lsbGVyIGxvZ2ljIGJ5IHJlbW92aW5nIGEgY2hlY2sgZm9yIGBfX0dGUF9USElTTk9ERWAgaW4gYGNvbnN0cmFpbmVkX2FsbG9jKClgLiBUaGlzIGlzIGEgcHVyZWx5IGxvZ2ljYWwgY2hhbmdlIGFmZmVjdGluZyBPT00gY29uc3RyYWludCBldmFsdWF0aW9uIGFuZCBtZW1vcnkgYWxsb2NhdGlvbiBwb2xpY2llcy4gSXQgZG9lcyBub3QgaW50cm9kdWNlIGFueSBuZXcgZGF0YSBzdHJ1Y3R1cmVzLCBtZW1vcnkgYWxsb2NhdGlvbnMsIG9yIGRhdGEgY29waWVzIHRvIHVzZXIgc3BhY2UuIFRoZXJlIGlzIG5vIHJpc2sgb2YgZXhwb3NpbmcgdW5pbml0aWFsaXplZCBtZW1vcnkgb3IgY3JlYXRpbmcgaW5mby1sZWFrcywgc28gYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCBuZWNlc3NhcnkuIEFueSBwb3RlbnRpYWwgYnVncyByZXN1bHRpbmcgZnJvbSB0aGlzIGNoYW5nZSAoZS5nLiwgZGVhZGxvY2tzIG9yIGluY29ycmVjdCBtZW1vcnkgbWFuYWdlbWVudCkgd291bGQgYmUgY2F1Z2h0IGJ5IHN0YW5kYXJkIGRldGVjdG9ycyBsaWtlIEtBU0FOIG9yIExPQ0tERVAuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5CmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kCmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikKZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuCgpDUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjoKLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlCiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOCiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUAogIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuCi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsCiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLgoKUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTiwKTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy4KQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWQpzZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrcwp0aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLgoKTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3QKdW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsCmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5cwp0aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZwp1bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2wKZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLApjYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy4KClNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczoKMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2IKICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHMKICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC4KMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlcwogICBvciBzdHJ1Y3QgZmllbGRzLgozLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzCiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuCjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzCiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy4KClNldCBOZWVkc0tNU0FOPWZhbHNlIElGOgotIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyCiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0CiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLgotIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkCiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLgotIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy4KClVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGUKZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDI4ZGMyNmRjMDRkNWViYjNhYTNhODdjY2I2MzYzMjU1MzU0ZGYyZDcKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgVGh1IEF1ZyAxMyAxMTowNzoyMCAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL21tL29vbV9raWxsLmMgYi9tbS9vb21fa2lsbC5jCmluZGV4IDVmMzcyZjZlMjZmYTMuLmZkM2M0NzY4NDZhMzAgMTAwNjQ0Ci0tLSBhL21tL29vbV9raWxsLmMKJiM0MzsmIzQzOyYjNDM7IGIvbW0vb29tX2tpbGwuYwpAQCAtMjY3LDE4ICYjNDM7MjY3LDExIEBAIHN0YXRpYyBlbnVtIG9vbV9jb25zdHJhaW50IGNvbnN0cmFpbmVkX2FsbG9jKHN0cnVjdCBvb21fY29udHJvbCAqb2MpCiAKIAlpZiAoIW9jLSZndDt6b25lbGlzdCkKIAkJcmV0dXJuIENPTlNUUkFJTlRfTk9ORTsKLQkvKgotCSAqIFJlYWNoIGhlcmUgb25seSB3aGVuIF9fR0ZQX05PRkFJTCBpcyB1c2VkLiBTbywgd2Ugc2hvdWxkIGF2b2lkCi0JICogdG8ga2lsbCBjdXJyZW50LldlIGhhdmUgdG8gcmFuZG9tIHRhc2sga2lsbCBpbiB0aGlzIGNhc2UuCi0JICogSG9wZWZ1bGx5LCBDT05TVFJBSU5UX1RISVNOT0RFLi4uYnV0IG5vIHdheSB0byBoYW5kbGUgaXQsIG5vdy4KLQkgKi8KLQlpZiAob2MtJmd0O2dmcF9tYXNrICZhbXA7IF9fR0ZQX1RISVNOT0RFKQotCQlyZXR1cm4gQ09OU1RSQUlOVF9OT05FOwogCiAJLyoKLQkgKiBUaGlzIGlzIG5vdCBhIF9fR0ZQX1RISVNOT0RFIGFsbG9jYXRpb24sIHNvIGEgdHJ1bmNhdGVkIG5vZGVtYXNrIGluCi0JICogdGhlIHBhZ2UgYWxsb2NhdG9yIG1lYW5zIGEgbWVtcG9saWN5IGlzIGluIGVmZmVjdC4gIENwdXNldCBwb2xpY3kKLQkgKiBpcyBlbmZvcmNlZCBpbiBnZXRfcGFnZV9mcm9tX2ZyZWVsaXN0KCkuCiYjNDM7CSAqIEEgdHJ1bmNhdGVkIG5vZGVtYXNrIGluIHRoZSBwYWdlIGFsbG9jYXRvciBtZWFucyBhIG1lbXBvbGljeQomIzQzOwkgKiBpcyBpbiBlZmZlY3QuICBDcHVzZXQgcG9saWN5IGlzIGVuZm9yY2VkIGluCiYjNDM7CSAqIGdldF9wYWdlX2Zyb21fZnJlZWxpc3QoKS4KIAkgKi8KIAlpZiAob2MtJmd0O25vZGVtYXNrICZhbXA7JmFtcDsKIAkgICAgIW5vZGVzX3N1YnNldChub2RlX3N0YXRlc1tOX01FTU9SWV0sICpvYy0mZ3Q7bm9kZW1hc2spKSB7CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE3LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMyAxMTowNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMTQ5CgkJCQkJCQlvdXRwdXQ6IDM1CgkJCQkJCQl0aG91Z2h0czogMjQ1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgT09NIEtpbGxlciBDb25zdHJhaW50IE1vZGlmaWNhdGlvbioqCgpPa2F5LCBzbyB0aGlzIHBhdGNoIGlzIHRvdWNoaW5nIGBtbS9vb21fa2lsbC5jYCwgc3BlY2lmaWNhbGx5IGBjb25zdHJhaW5lZF9hbGxvYygpYC4gVGhlIGNvcmUgb2YgdGhlIGNoYW5nZSBpcyByZW1vdmluZyBhIGNoZWNrIGZvciBgX19HRlBfVEhJU05PREVgLiBSaWdodCwgc28gdGhpcyBmdW5jdGlvbiBpcyBhbGwgYWJvdXQgZmlndXJpbmcgb3V0IHRoZSBPT00gY29uc3RyYWludCDigJMgd2hldGhlciBpdCYjMzk7cyBsaW1pdGVkIGJ5IENQVSBzZXQsIG1lbW9yeSBwb2xpY3ksIG9yIG1lbWNnLiBSZW1vdmluZyB0aGF0IGNoZWNrIGVzc2VudGlhbGx5IGFsdGVycyBob3cgdGhlIE9PTSBraWxsZXIgZGVjaWRlcyB3aGljaCBhbGxvY2F0aW9ucyBhcmUgY29uc2lkZXJlZCBjb25zdHJhaW5lZC4KCk15IGltbWVkaWF0ZSBhc3Nlc3NtZW50IGlzIHRoaXM6IGl0IGRvZXNuJiMzOTt0IGFwcGVhciB0byBiZSBhIEtNU0FOIChLZXJuZWwgTWVtb3J5IFNhbml0aXplcikgaXNzdWUuIFRoZXJlJiMzOTtzIG5vIG9idmlvdXMgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSBoZXJlLiBUaGlzIGlzbiYjMzk7dCBhYm91dCBleHBvc2luZyBrZXJuZWwgaW50ZXJuYWxzIHRvIHVzZXJzcGFjZSwgYW5kIHRoZXJlIGFyZSBubyBuZXcgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMgaW50cm9kdWNlZC4gVGhpcyBjaGFuZ2UgaXMgcHVyZWx5IGFib3V0IHRoZSBPT00ga2lsbGVyJiMzOTtzIGRlY2lzaW9uLW1ha2luZyBwcm9jZXNzIGNvbmNlcm5pbmcgbWVtb3J5IGFsbG9jYXRpb24gY29uc3RyYWludHMuCgpPZiBjb3Vyc2UsIGFueSBjaGFuZ2UgdG8gbWVtb3J5IG1hbmFnZW1lbnQgaGFzIHRvIGJlIGV4YW1pbmVkIGNhcmVmdWxseS4gQWx0aG91Z2ggS01TQU4gaXNuJiMzOTt0IHJlbGV2YW50IGluIHRoaXMgc3BlY2lmaWMgY2FzZSwgaXQmIzM5O3Mgd29ydGggYnJpZWZseSBjb25zaWRlcmluZyBLQVNBTi9MT0NLREVQIGV0Yy4gdG8gc2VlIGlmIHRoaXMgdHdlYWsgY291bGQgKmluZGlyZWN0bHkqIHRyaWdnZXIgbWVtb3J5IGNvcnJ1cHRpb24gb3IgZGVhZGxvY2tzLiBJJiMzOTtsbCBxdWlja2x5IGdsYW5jZSBhdCB0aGUgc3Vycm91bmRpbmcgY29kZSBqdXN0IHRvIGJlIGNlcnRhaW4uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEzIDExOjA3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bW0vb29tX2tpbGwuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDI1MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA1MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgMjUwOlx0e1xuIDI1MTpcdFx0c3RydWN0IHpvbmUgKnpvbmU7XG4gMjUyOlx0XHRzdHJ1Y3Qgem9uZXJlZiAqejtcbiAyNTM6XHRcdGVudW0gem9uZV90eXBlIGhpZ2hlc3Rfem9uZWlkeCA9IGdmcF96b25lKG9jLVx1MDAzZWdmcF9tYXNrKTtcbiAyNTQ6XHRcdGJvb2wgY3B1c2V0X2xpbWl0ZWQgPSBmYWxzZTtcbiAyNTU6XHRcdGludCBuaWQ7XG4gMjU2Olx0XG4gMjU3Olx0XHRpZiAoaXNfbWVtY2dfb29tKG9jKSkge1xuIDI1ODpcdFx0XHRvYy1cdTAwM2V0b3RhbHBhZ2VzID0gbWVtX2Nncm91cF9nZXRfbWF4KG9jLVx1MDAzZW1lbWNnKSA/OiAxO1xuIDI1OTpcdFx0XHRyZXR1cm4gQ09OU1RSQUlOVF9NRU1DRztcbiAyNjA6XHRcdH1cbiAyNjE6XHRcbiAyNjI6XHRcdC8qIERlZmF1bHQgdG8gYWxsIGF2YWlsYWJsZSBtZW1vcnkgKi9cbiAyNjM6XHRcdG9jLVx1MDAzZXRvdGFscGFnZXMgPSB0b3RhbHJhbV9wYWdlcygpICYjNDM7IHRvdGFsX3N3YXBfcGFnZXM7XG4gMjY0Olx0XG4gMjY1Olx0XHRpZiAoIUlTX0VOQUJMRUQoQ09ORklHX05VTUEpKVxuIDI2NjpcdFx0XHRyZXR1cm4gQ09OU1RSQUlOVF9OT05FO1xuIDI2NzpcdFxuIDI2ODpcdFx0aWYgKCFvYy1cdTAwM2V6b25lbGlzdClcbiAyNjk6XHRcdFx0cmV0dXJuIENPTlNUUkFJTlRfTk9ORTtcbiAyNzA6XHRcbiAyNzE6XHRcdC8qXG4gMjcyOlx0XHQgKiBBIHRydW5jYXRlZCBub2RlbWFzayBpbiB0aGUgcGFnZSBhbGxvY2F0b3IgbWVhbnMgYSBtZW1wb2xpY3lcbiAyNzM6XHRcdCAqIGlzIGluIGVmZmVjdC4gIENwdXNldCBwb2xpY3kgaXMgZW5mb3JjZWQgaW5cbiAyNzQ6XHRcdCAqIGdldF9wYWdlX2Zyb21fZnJlZWxpc3QoKS5cbiAyNzU6XHRcdCAqL1xuIDI3NjpcdFx0aWYgKG9jLVx1MDAzZW5vZGVtYXNrIFx1MDAyNlx1MDAyNlxuIDI3NzpcdFx0ICAgICFub2Rlc19zdWJzZXQobm9kZV9zdGF0ZXNbTl9NRU1PUlldLCAqb2MtXHUwMDNlbm9kZW1hc2spKSB7XG4gMjc4Olx0XHRcdG9jLVx1MDAzZXRvdGFscGFnZXMgPSB0b3RhbF9zd2FwX3BhZ2VzO1xuIDI3OTpcdFx0XHRmb3JfZWFjaF9ub2RlX21hc2sobmlkLCAqb2MtXHUwMDNlbm9kZW1hc2spXG4gMjgwOlx0XHRcdFx0b2MtXHUwMDNldG90YWxwYWdlcyAmIzQzOz0gbm9kZV9wcmVzZW50X3BhZ2VzKG5pZCk7XG4gMjgxOlx0XHRcdHJldHVybiBDT05TVFJBSU5UX01FTU9SWV9QT0xJQ1k7XG4gMjgyOlx0XHR9XG4gMjgzOlx0XG4gMjg0Olx0XHQvKiBDaGVjayB0aGlzIGFsbG9jYXRpb24gZmFpbHVyZSBpcyBjYXVzZWQgYnkgY3B1c2V0JiMzOTtzIHdhbGwgZnVuY3Rpb24gKi9cbiAyODU6XHRcdGZvcl9lYWNoX3pvbmVfem9uZWxpc3Rfbm9kZW1hc2soem9uZSwgeiwgb2MtXHUwMDNlem9uZWxpc3QsXG4gMjg2Olx0XHRcdFx0aGlnaGVzdF96b25laWR4LCBvYy1cdTAwM2Vub2RlbWFzaylcbiAyODc6XHRcdFx0aWYgKCFjcHVzZXRfem9uZV9hbGxvd2VkKHpvbmUsIG9jLVx1MDAzZWdmcF9tYXNrKSlcbiAyODg6XHRcdFx0XHRjcHVzZXRfbGltaXRlZCA9IHRydWU7XG4gMjg5Olx0XG4gMjkwOlx0XHRpZiAoY3B1c2V0X2xpbWl0ZWQpIHtcbiAyOTE6XHRcdFx0b2MtXHUwMDNldG90YWxwYWdlcyA9IHRvdGFsX3N3YXBfcGFnZXM7XG4gMjkyOlx0XHRcdGZvcl9lYWNoX25vZGVfbWFzayhuaWQsIGNwdXNldF9jdXJyZW50X21lbXNfYWxsb3dlZClcbiAyOTM6XHRcdFx0XHRvYy1cdTAwM2V0b3RhbHBhZ2VzICYjNDM7PSBub2RlX3ByZXNlbnRfcGFnZXMobmlkKTtcbiAyOTQ6XHRcdFx0cmV0dXJuIENPTlNUUkFJTlRfQ1BVU0VUO1xuIDI5NTpcdFx0fVxuIDI5NjpcdFx0cmV0dXJuIENPTlNUUkFJTlRfTk9ORTtcbiAyOTc6XHR9XG4gMjk4Olx0XG4gMjk5Olx0c3RhdGljIGludCBvb21fZXZhbHVhdGVfdGFzayhzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhc2ssIHZvaWQgKmFyZylcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOS8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTMgMTE6MDc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzQ1NQoJCQkJCQkJb3V0cHV0OiAxNDkKCQkJCQkJCXRob3VnaHRzOiA0MgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBc3Nlc3NtZW50IG9mIHRoZSBQYXRjaCoqCgpPa2F5LCBzbyBJJiMzOTt2ZSBqdXN0IHJldmlld2VkIHRoaXMgcGF0Y2guIEVzc2VudGlhbGx5LCBhbGwgaXQgZG9lcyBpcyBlbGltaW5hdGUgYSBzcGVjaWZpYyBjb25kaXRpb25hbCBjaGVjayByZWxhdGVkIHRvIGBvYy0mZ3Q7Z2ZwX21hc2tgIGFuZCB0aGUgYF9fR0ZQX1RISVNOT0RFYCBmbGFnLiBNeSBhbmFseXNpcz8gVGhlcmUmIzM5O3Mgbm8gZGV0ZWN0YWJsZSB1bmluaXRpYWxpemVkIG1lbW9yeSBleHBvc3VyZSBpbnRyb2R1Y2VkIGJ5IHRoaXMgY2hhbmdlLiBUaGUgcmVtb3ZhbCBvZiB0aGlzIGNvbmRpdGlvbiBhcHBlYXJzIHN0cmFpZ2h0Zm9yd2FyZCBhbmQgaGFybWxlc3MgaW4gdGVybXMgb2YgbWVtb3J5IHNhZmV0eSwgZ2l2ZW4gdGhlIGNvbnRleHQuIFRoZXJlZm9yZSwgSSYjMzk7bSBjb25maWRlbnQgaW4gc2V0dGluZyBgTmVlZHNLTVNBTmAgdG8gZmFsc2UuIFRoaXMgbG9va3MgbGlrZSBhIGNsZWFuIGFuZCBsaWtlbHkgcGVyZm9ybWFuY2Utb3JpZW50ZWQgdHdlYWsuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjAvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEzIDExOjA3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBPT00ga2lsbGVyIGxvZ2ljIGJ5IHJlbW92aW5nIGEgY2hlY2sgZm9yIGBfX0dGUF9USElTTk9ERWAgaW4gYGNvbnN0cmFpbmVkX2FsbG9jKClgLiBUaGlzIGlzIGEgcHVyZWx5IGxvZ2ljYWwgY2hhbmdlIGFmZmVjdGluZyBPT00gY29uc3RyYWludCBldmFsdWF0aW9uIGFuZCBtZW1vcnkgYWxsb2NhdGlvbiBwb2xpY2llcy4gSXQgZG9lcyBub3QgaW50cm9kdWNlIGFueSBuZXcgZGF0YSBzdHJ1Y3R1cmVzLCBtZW1vcnkgYWxsb2NhdGlvbnMsIG9yIGRhdGEgY29waWVzIHRvIHVzZXIgc3BhY2UuIFRoZXJlIGlzIG5vIHJpc2sgb2YgZXhwb3NpbmcgdW5pbml0aWFsaXplZCBtZW1vcnkgb3IgY3JlYXRpbmcgaW5mby1sZWFrcywgc28gYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCBuZWNlc3NhcnkuIEFueSBwb3RlbnRpYWwgYnVncyByZXN1bHRpbmcgZnJvbSB0aGlzIGNoYW5nZSAoZS5nLiwgZGVhZGxvY2tzIG9yIGluY29ycmVjdCBtZW1vcnkgbWFuYWdlbWVudCkgd291bGQgYmUgY2F1Z2h0IGJ5IHN0YW5kYXJkIGRldGVjdG9ycyBsaWtlIEtBU0FOIG9yIExPQ0tERVAuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgT09NIGtpbGxlciBsb2dpYyBieSByZW1vdmluZyBhIGNoZWNrIGZvciBgX19HRlBfVEhJU05PREVgIGluIGBjb25zdHJhaW5lZF9hbGxvYygpYC4gVGhpcyBpcyBhIHB1cmVseSBsb2dpY2FsIGNoYW5nZSBhZmZlY3RpbmcgT09NIGNvbnN0cmFpbnQgZXZhbHVhdGlvbiBhbmQgbWVtb3J5IGFsbG9jYXRpb24gcG9saWNpZXMuIEl0IGRvZXMgbm90IGludHJvZHVjZSBhbnkgbmV3IGRhdGEgc3RydWN0dXJlcywgbWVtb3J5IGFsbG9jYXRpb25zLCBvciBkYXRhIGNvcGllcyB0byB1c2VyIHNwYWNlLiBUaGVyZSBpcyBubyByaXNrIG9mIGV4cG9zaW5nIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IG9yIGNyZWF0aW5nIGluZm8tbGVha3MsIHNvIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgbmVjZXNzYXJ5LiBBbnkgcG90ZW50aWFsIGJ1Z3MgcmVzdWx0aW5nIGZyb20gdGhpcyBjaGFuZ2UgKGUuZy4sIGRlYWRsb2NrcyBvciBpbmNvcnJlY3QgbWVtb3J5IG1hbmFnZW1lbnQpIHdvdWxkIGJlIGNhdWdodCBieSBzdGFuZGFyZCBkZXRlY3RvcnMgbGlrZSBLQVNBTiBvciBMT0NLREVQLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wOC0xM1QxMTowNzoyMS4xNjc3MDM5MDZaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozNDQzOTk3NzU4NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJOVU1BXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwib3V0X29mX21lbW9yeVwiXG4gIF0sXG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIE9PTSBraWxsZXIgbG9naWMgYnkgcmVtb3ZpbmcgYSBjaGVjayBmb3IgYF9fR0ZQX1RISVNOT0RFYCBpbiBgY29uc3RyYWluZWRfYWxsb2MoKWAuIFRoaXMgaXMgYSBwdXJlbHkgbG9naWNhbCBjaGFuZ2UgYWZmZWN0aW5nIE9PTSBjb25zdHJhaW50IGV2YWx1YXRpb24gYW5kIG1lbW9yeSBhbGxvY2F0aW9uIHBvbGljaWVzLiBJdCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IG5ldyBkYXRhIHN0cnVjdHVyZXMsIG1lbW9yeSBhbGxvY2F0aW9ucywgb3IgZGF0YSBjb3BpZXMgdG8gdXNlciBzcGFjZS4gVGhlcmUgaXMgbm8gcmlzayBvZiBleHBvc2luZyB1bmluaXRpYWxpemVkIG1lbW9yeSBvciBjcmVhdGluZyBpbmZvLWxlYWtzLCBzbyBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IG5lY2Vzc2FyeS4gQW55IHBvdGVudGlhbCBidWdzIHJlc3VsdGluZyBmcm9tIHRoaXMgY2hhbmdlIChlLmcuLCBkZWFkbG9ja3Mgb3IgaW5jb3JyZWN0IG1lbW9yeSBtYW5hZ2VtZW50KSB3b3VsZCBiZSBjYXVnaHQgYnkgc3RhbmRhcmQgZGV0ZWN0b3JzIGxpa2UgS0FTQU4gb3IgTE9DS0RFUC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgT09NIGtpbGxlcidzIGNvbnN0cmFpbnQgbG9naWMgYnkgcmVtb3ZpbmcgYSBjaGVjayBmb3IgX19HRlBfVEhJU05PREUgaW4gY29uc3RyYWluZWRfYWxsb2MoKS4gVGhpcyBjaGFuZ2VzIGhvdyB0aGUgT09NIGtpbGxlciBzZWxlY3RzIHRhc2tzIHRvIGtpbGwgd2hlbiBtZW1vcnkgcG9saWNpZXMgYXJlIGluIGVmZmVjdC4gVGhlIGNvZGUgaXMgcmVhY2hhYmxlIGFuZCBmdW5jdGlvbmFsbHkgYWx0ZXJzIHRoZSBleGVjdXRpb24gZmxvdyBvZiB0aGUgT09NIGtpbGxlciwgbWFraW5nIGl0IHdvcnRoIGZ1enppbmcuIFRoZSBDT05GSUdfTlVNQSBvcHRpb24gaXMgcmVxdWlyZWQgdG8gcmVhY2ggdGhpcyBjb2RlLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xM1QxMTowNzoyMS4xNjc3MDk1MjZaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ5MzI5MDM2NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IDI4ZGMyNmRjMDRkNWViYjNhYTNhODdjY2I2MzYzMjU1MzU0ZGYyZDdcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIFRodSBBdWcgMTMgMTE6MDc6MjAgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvbW0vb29tX2tpbGwuYyBiL21tL29vbV9raWxsLmNcXG5pbmRleCA1ZjM3MmY2ZTI2ZmEzLi5mZDNjNDc2ODQ2YTMwIDEwMDY0NFxcbi0tLSBhL21tL29vbV9raWxsLmNcXG4rKysgYi9tbS9vb21fa2lsbC5jXFxuQEAgLTI2NywxOCArMjY3LDExIEBAIHN0YXRpYyBlbnVtIG9vbV9jb25zdHJhaW50IGNvbnN0cmFpbmVkX2FsbG9jKHN0cnVjdCBvb21fY29udHJvbCAqb2MpXFxuIFxcbiBcXHRpZiAoIW9jLVxcdTAwM2V6b25lbGlzdClcXG4gXFx0XFx0cmV0dXJuIENPTlNUUkFJTlRfTk9ORTtcXG4tXFx0LypcXG4tXFx0ICogUmVhY2ggaGVyZSBvbmx5IHdoZW4gX19HRlBfTk9GQUlMIGlzIHVzZWQuIFNvLCB3ZSBzaG91bGQgYXZvaWRcXG4tXFx0ICogdG8ga2lsbCBjdXJyZW50LldlIGhhdmUgdG8gcmFuZG9tIHRhc2sga2lsbCBpbiB0aGlzIGNhc2UuXFxuLVxcdCAqIEhvcGVmdWxseSwgQ09OU1RSQUlOVF9USElTTk9ERS4uLmJ1dCBubyB3YXkgdG8gaGFuZGxlIGl0LCBub3cuXFxuLVxcdCAqL1xcbi1cXHRpZiAob2MtXFx1MDAzZWdmcF9tYXNrIFxcdTAwMjYgX19HRlBfVEhJU05PREUpXFxuLVxcdFxcdHJldHVybiBDT05TVFJBSU5UX05PTkU7XFxuIFxcbiBcXHQvKlxcbi1cXHQgKiBUaGlzIGlzIG5vdCBhIF9fR0ZQX1RISVNOT0RFIGFsbG9jYXRpb24sIHNvIGEgdHJ1bmNhdGVkIG5vZGVtYXNrIGluXFxuLVxcdCAqIHRoZSBwYWdlIGFsbG9jYXRvciBtZWFucyBhIG1lbXBvbGljeSBpcyBpbiBlZmZlY3QuICBDcHVzZXQgcG9saWN5XFxuLVxcdCAqIGlzIGVuZm9yY2VkIGluIGdldF9wYWdlX2Zyb21fZnJlZWxpc3QoKS5cXG4rXFx0ICogQSB0cnVuY2F0ZWQgbm9kZW1hc2sgaW4gdGhlIHBhZ2UgYWxsb2NhdG9yIG1lYW5zIGEgbWVtcG9saWN5XFxuK1xcdCAqIGlzIGluIGVmZmVjdC4gIENwdXNldCBwb2xpY3kgaXMgZW5mb3JjZWQgaW5cXG4rXFx0ICogZ2V0X3BhZ2VfZnJvbV9mcmVlbGlzdCgpLlxcbiBcXHQgKi9cXG4gXFx0aWYgKG9jLVxcdTAwM2Vub2RlbWFzayBcXHUwMDI2XFx1MDAyNlxcbiBcXHQgICAgIW5vZGVzX3N1YnNldChub2RlX3N0YXRlc1tOX01FTU9SWV0sICpvYy1cXHUwMDNlbm9kZW1hc2spKSB7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEzVDExOjA3OjIxLjY2MTYwNjcyMVoiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImJlc3QtZXhwZW5zaXZlIiwiRHVyYXRpb24iOjI0Njg1MzYyNTE5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIk5VTUFcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJvdXRfb2ZfbWVtb3J5XCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIE9PTSBraWxsZXIncyBjb25zdHJhaW50IGxvZ2ljIGJ5IHJlbW92aW5nIGEgY2hlY2sgZm9yIF9fR0ZQX1RISVNOT0RFIGluIGNvbnN0cmFpbmVkX2FsbG9jKCkuIFRoaXMgY2hhbmdlcyBob3cgdGhlIE9PTSBraWxsZXIgc2VsZWN0cyB0YXNrcyB0byBraWxsIHdoZW4gbWVtb3J5IHBvbGljaWVzIGFyZSBpbiBlZmZlY3QuIFRoZSBjb2RlIGlzIHJlYWNoYWJsZSBhbmQgZnVuY3Rpb25hbGx5IGFsdGVycyB0aGUgZXhlY3V0aW9uIGZsb3cgb2YgdGhlIE9PTSBraWxsZXIsIG1ha2luZyBpdCB3b3J0aCBmdXp6aW5nLiBUaGUgQ09ORklHX05VTUEgb3B0aW9uIGlzIHJlcXVpcmVkIHRvIHJlYWNoIHRoaXMgY29kZS5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG4tIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cbi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSlcbiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4gICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnNcbiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBBbHNvIGNoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlnc1xuICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzXG4gICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgMjhkYzI2ZGMwNGQ1ZWJiM2FhM2E4N2NjYjYzNjMyNTUzNTRkZjJkN1xuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBUaHUgQXVnIDEzIDExOjA3OjIwIDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvbW0vb29tX2tpbGwuYyBiL21tL29vbV9raWxsLmNcbmluZGV4IDVmMzcyZjZlMjZmYTMuLmZkM2M0NzY4NDZhMzAgMTAwNjQ0XG4tLS0gYS9tbS9vb21fa2lsbC5jXG4rKysgYi9tbS9vb21fa2lsbC5jXG5AQCAtMjY3LDE4ICsyNjcsMTEgQEAgc3RhdGljIGVudW0gb29tX2NvbnN0cmFpbnQgY29uc3RyYWluZWRfYWxsb2Moc3RydWN0IG9vbV9jb250cm9sICpvYylcbiBcbiBcdGlmICghb2MtXHUwMDNlem9uZWxpc3QpXG4gXHRcdHJldHVybiBDT05TVFJBSU5UX05PTkU7XG4tXHQvKlxuLVx0ICogUmVhY2ggaGVyZSBvbmx5IHdoZW4gX19HRlBfTk9GQUlMIGlzIHVzZWQuIFNvLCB3ZSBzaG91bGQgYXZvaWRcbi1cdCAqIHRvIGtpbGwgY3VycmVudC5XZSBoYXZlIHRvIHJhbmRvbSB0YXNrIGtpbGwgaW4gdGhpcyBjYXNlLlxuLVx0ICogSG9wZWZ1bGx5LCBDT05TVFJBSU5UX1RISVNOT0RFLi4uYnV0IG5vIHdheSB0byBoYW5kbGUgaXQsIG5vdy5cbi1cdCAqL1xuLVx0aWYgKG9jLVx1MDAzZWdmcF9tYXNrIFx1MDAyNiBfX0dGUF9USElTTk9ERSlcbi1cdFx0cmV0dXJuIENPTlNUUkFJTlRfTk9ORTtcbiBcbiBcdC8qXG4tXHQgKiBUaGlzIGlzIG5vdCBhIF9fR0ZQX1RISVNOT0RFIGFsbG9jYXRpb24sIHNvIGEgdHJ1bmNhdGVkIG5vZGVtYXNrIGluXG4tXHQgKiB0aGUgcGFnZSBhbGxvY2F0b3IgbWVhbnMgYSBtZW1wb2xpY3kgaXMgaW4gZWZmZWN0LiAgQ3B1c2V0IHBvbGljeVxuLVx0ICogaXMgZW5mb3JjZWQgaW4gZ2V0X3BhZ2VfZnJvbV9mcmVlbGlzdCgpLlxuK1x0ICogQSB0cnVuY2F0ZWQgbm9kZW1hc2sgaW4gdGhlIHBhZ2UgYWxsb2NhdG9yIG1lYW5zIGEgbWVtcG9saWN5XG4rXHQgKiBpcyBpbiBlZmZlY3QuICBDcHVzZXQgcG9saWN5IGlzIGVuZm9yY2VkIGluXG4rXHQgKiBnZXRfcGFnZV9mcm9tX2ZyZWVsaXN0KCkuXG4gXHQgKi9cbiBcdGlmIChvYy1cdTAwM2Vub2RlbWFzayBcdTAwMjZcdTAwMjZcbiBcdCAgICAhbm9kZXNfc3Vic2V0KG5vZGVfc3RhdGVzW05fTUVNT1JZXSwgKm9jLVx1MDAzZW5vZGVtYXNrKSkge1xuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTNUMTE6MDc6MjEuNjYxNjA3OTQxWiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTE1MTI2NDQwNSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIE9PTSBLaWxsZXIgUGF0Y2gqKlxuXG5Pa2F5LCBzbyB0aGlzIHBhdGNoIGlzIHRvdWNoaW5nIGBtbS9vb21fa2lsbC5jYCwgc3BlY2lmaWNhbGx5IGBjb25zdHJhaW5lZF9hbGxvYygpYC4gVGhlIGNvcmUgb2YgdGhlIGNoYW5nZSBzZWVtcyB0byBiZSByZW1vdmluZyBhIGNoZWNrIGZvciBgX19HRlBfVEhJU05PREVgLiBIbW0sIGxldCdzIHNlZSwgdGhlIG9yaWdpbmFsIGNvZGUgaGFkIHRoaXM6XG5cbmBgYGNcblx0aWYgKG9jLVx1MDAzZWdmcF9tYXNrIFx1MDAyNiBfX0dGUF9USElTTk9ERSlcblx0XHRyZXR1cm4gQ09OU1RSQUlOVF9OT05FO1xuYGBgXG5cblRoaXMgKnJlbW92ZXMqIHRoaXMsIG1lYW5pbmcgaXQncyBhbHRlcmluZyB0aGUgYmVoYXZpb3Igb2YgdGhlIE9PTSBraWxsZXIgd2hlbiBgX19HRlBfVEhJU05PREVgIGlzIGluIHBsYXkuIFRoZSBjb21tZW50IGluIHRoZSBvcmlnaW5hbCBjb2RlIGlzIHByZXR0eSBlbmxpZ2h0ZW5pbmcsIGl0IHNheXMgdGhpcyBzZWN0aW9uIGlzIHJlYWNoZWQgb25seSB3aGVuIGBfX0dGUF9OT0ZBSUxgIGlzIHVzZWQuIFRoZSBjb21tZW50IHN0YXRlcyB0aGF0IGtpbGxpbmcgdGhlIGN1cnJlbnQgdGFzayBpcyB0byBiZSBhdm9pZGVkIGFuZCB0aGUgY29kZSByYW5kb21seSBraWxscyBhbm90aGVyIHRhc2suIFRoYXQgZG9lc24ndCBzZWVtIG9wdGltYWwgYnV0IGl0IGlzIHRoZSBjb2RlIHRoYXQgaXMgYmVpbmcgcmVtb3ZlZC4gSSBoYXZlIHRvIHRoaW5rIGFib3V0IHdoYXQgdGhpcyBtZWFucyBpbiB0ZXJtcyBvZiBjb25zdHJhaW50IGxvZ2ljLiBJIHNob3VsZCBwcm9iYWJseSByZS1leGFtaW5lIGhvdyBgY29uc3RyYWluZWRfYWxsb2NgIGlzIHVzZWQgd2l0aGluIGBtbS9vb21fa2lsbC5jYCB0byBmdWxseSBncmFzcCB0aGUgcmFtaWZpY2F0aW9ucyBvZiB0aGlzIGNoYW5nZS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2h5IHRoaXMgY2hlY2sgd2FzIHRoZXJlIGluIHRoZSBmaXJzdCBwbGFjZSwgYW5kIHdoYXQgdGhlIGltcGxpY2F0aW9ucyBvZiBpdHMgcmVtb3ZhbCBhcmUgZm9yIHRoZSB2YXJpb3VzIGFsbG9jYXRpb24gc2NlbmFyaW9zLCBlc3BlY2lhbGx5IHRob3NlIHRoYXQgaW52b2x2ZSBgX19HRlBfTk9GQUlMYC4gXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIxNTIsIk91dHB1dFRva2VucyI6MzAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMDAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xM1QxMTowNzoyNi44MTI4NzQyMzdaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTkwMzY3MjgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uc3RyYWluZWRfYWxsb2NcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vb29tX2tpbGwuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9vb21fa2lsbC5jPTIzOT1zdGF0aWMgY29uc3QgY2hhciAqIGNvbnN0IG9vbV9jb25zdHJhaW50X3RleHRbXSA9IHtcXG4tLVxcbm1tL29vbV9raWxsLmMtMjQ4LSAqL1xcbm1tL29vbV9raWxsLmM6MjQ5OnN0YXRpYyBlbnVtIG9vbV9jb25zdHJhaW50IGNvbnN0cmFpbmVkX2FsbG9jKHN0cnVjdCBvb21fY29udHJvbCAqb2MpXFxubW0vb29tX2tpbGwuYy0yNTAte1xcbi0tXFxubW0vb29tX2tpbGwuYz0xMDk2PWJvb2wgb3V0X29mX21lbW9yeShzdHJ1Y3Qgb29tX2NvbnRyb2wgKm9jKVxcbi0tXFxubW0vb29tX2tpbGwuYy0xMTMyLVxcdCAqL1xcbm1tL29vbV9raWxsLmM6MTEzMzpcXHRvYy1cXHUwMDNlY29uc3RyYWludCA9IGNvbnN0cmFpbmVkX2FsbG9jKG9jKTtcXG5tbS9vb21fa2lsbC5jLTExMzQtXFx0aWYgKG9jLVxcdTAwM2Vjb25zdHJhaW50ICE9IENPTlNUUkFJTlRfTUVNT1JZX1BPTElDWSlcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTNUMTE6MDc6MjYuODcxOTE0NjQ1WiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Mzc1NDAzODUyNywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipLZXJuZWwgTWVtb3J5IEFsbG9jYXRpb24gUGF0Y2ggQW5hbHlzaXMqKlxuXG5Pa2F5LCBzbyB0aGlzIHBhdGNoIGlzIHRvdWNoaW5nIGBjb25zdHJhaW5lZF9hbGxvY2AuIEFuZCBJIGtub3cgdGhhdCBmdW5jdGlvbiBpcyBjYWxsZWQgYnkgYG91dF9vZl9tZW1vcnlgIOKAkyB0aGF0J3MgdGhlIE9PTSBraWxsZXIhIFRoaXMgaXMgcHJldHR5IHNlcmlvdXMgc3R1ZmY7IHdlJ3JlIHRhbGtpbmcgYWJvdXQgY29yZSBrZXJuZWwgbWVtb3J5IG1hbmFnZW1lbnQsIHRoZSBzb3J0IG9mIGNvZGUgdGhhdCdzIHJpcGUgZm9yIGV4cGxvaXRhdGlvbiBpZiB0aGVyZSdzIGV2ZW4gYSBzdWJ0bGUgYnVnLiBNeSBmaXJzdCBpbnN0aW5jdCBpcywgZGVmaW5pdGVseSwgZnV6eiB0aGlzLlxuXG5Ob3csIG15IGZvY3VzIGlzIGdvaW5nIHRvIGJlIG9uIGBjb25zdHJhaW5lZF9hbGxvY2AgYW5kIGBvdXRfb2ZfbWVtb3J5YC4gV2FpdCBhIHNlY29uZOKApiBpc24ndCBgY29uc3RyYWluZWRfYWxsb2NgIGRlY2xhcmVkIHN0YXRpYz8gVGhhdCBjb3VsZCBjb21wbGljYXRlIHRoaW5ncyBhIGJpdC4gSXQgaXMsIGFuZCBgb3V0X29mX21lbW9yeWAgaXMgbm90LiBUaGlzIG1lYW5zIEkgbmVlZCB0byBkb3VibGUtY2hlY2sgd2hldGhlciBgb3V0X29mX21lbW9yeWAgaXMgZXhwb3J0ZWQgb3IgZ2xvYmFsLiBHb3R0YSBzZWUgaWYgdGhlcmUncyBhbnkgd2F5IHRvIGRpcmVjdGx5IGNhbGwgaXQsIGlmIEkgd2FudCB0byBoYXZlIGEgbG9vay1pbiBmcm9tIHVzZXItc3BhY2UuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI4NTksIk91dHB1dFRva2VucyI6MzMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo5NSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xM1QxMTowNzozMC42MjU5NTYzMTJaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDkyMDAyOTksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiYm9vbCBvdXRfb2ZfbWVtb3J5XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL29vbV9raWxsLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vb29tX2tpbGwuYz0xMDg1PUVYUE9SVF9TWU1CT0xfR1BMKHVucmVnaXN0ZXJfb29tX25vdGlmaWVyKTtcXG4tLVxcbm1tL29vbV9raWxsLmMtMTA5NS0gKi9cXG5tbS9vb21fa2lsbC5jOjEwOTY6Ym9vbCBvdXRfb2ZfbWVtb3J5KHN0cnVjdCBvb21fY29udHJvbCAqb2MpXFxubW0vb29tX2tpbGwuYy0xMDk3LXtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTNUMTE6MDc6MzAuNjc1MTYxODUxWiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzM5OTcwOTkzOCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIE9PTSBTaXR1YXRpb24qKlxuXG5Pa2F5LCBzbyBJJ20gZGVhbGluZyB3aXRoIGFuIGBvdXRfb2ZfbWVtb3J5YCBzY2VuYXJpbyBoZXJlLiBUaGUga2V5IGlzIHRoYXQgYG91dF9vZl9tZW1vcnlgIGlzIGEgZ2xvYmFsIGZ1bmN0aW9uLCB3aGljaCBnaXZlcyB1cyBhIGNlcnRhaW4gbGV2ZWwgb2YgY29udHJvbCwgYnV0IHdlIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgc3BlY2lmaWNzLiBNeSBmaXJzdCB0aG91Z2h0IGlzIHRvIGRpZyBpbnRvIHRoZSBjb25maWd1cmF0aW9uIOKAkyBhcmUgdGhlcmUgYW55IGN1c3RvbSBjb25maWd1cmF0aW9ucyB0aGF0IG1pZ2h0IGJlIGluZmx1ZW5jaW5nIHRoaXMgYmVoYXZpb3I/IFRoZSBPT00ga2lsbGVyIGlzLCBhcyBleHBlY3RlZCwgYSBidWlsdC1pbiBmdW5jdGlvbiBvZiB0aGUgY29yZSBzeXN0ZW0uIE5vdywgdGhlIHByZXZpb3VzIGNvZGUgaGFkIHNvbWUgY2hlY2tzIHJlbGF0ZWQgdG8gYF9fR0ZQX1RISVNOT0RFYCBhbmQgYG9jLVx1MDAzZW5vZGVtYXNrYC4gS25vd2luZyB0aGlzIGlzIGNyaXRpY2FsLCBiZWNhdXNlIHRoaXMgbGlrZWx5IHBvaW50cyB0b3dhcmRzIE5VTUEgY29uZmlndXJhdGlvbnMgb3IgbWVtcG9saWN5IHNldHRpbmdzLiBJIGhhdmUgdG8gc2VlIGlmIHRoZXJlIGFyZSBzcGVjaWZpYyBjb25maWd1cmF0aW9ucyByZWxhdGVkIHRvIHRob3NlIGFyZWFzIHRoYXQgd2UgbmVlZCB0byBleGFtaW5lIGZ1cnRoZXIuIFRoaXMgaXMgd2hlcmUgdGhlIHJvb3Qgb2YgdGhlIHByb2JsZW0gbWlnaHQgbGllLlxuXG5cbiIsIklucHV0VG9rZW5zIjozMjgzLCJPdXRwdXRUb2tlbnMiOjMxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NzQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTNUMTE6MDc6MzQuMDc0ODczOTU5WiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjU1MjEyMTc4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIkNPTkZJR19OVU1BXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL29vbV9raWxsLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vb29tX2tpbGwuYz03Mj1zdGF0aWMgaW5saW5lIGJvb2wgaXNfbWVtY2dfb29tKHN0cnVjdCBvb21fY29udHJvbCAqb2MpXFxuLS1cXG5tbS9vb21fa2lsbC5jLTc2LVxcbm1tL29vbV9raWxsLmM6Nzc6I2lmZGVmIENPTkZJR19OVU1BXFxubW0vb29tX2tpbGwuYy03OC0vKipcXG4tLVxcbm1tL29vbV9raWxsLmM9MTIyPXN0YXRpYyBib29sIG9vbV9jcHVzZXRfZWxpZ2libGUoc3RydWN0IHRhc2tfc3RydWN0ICp0c2ssIHN0cnVjdCBvb21fY29udHJvbCAqb2MpXFxuLS1cXG5tbS9vb21fa2lsbC5jLTEyNS19XFxubW0vb29tX2tpbGwuYzoxMjY6I2VuZGlmIC8qIENPTkZJR19OVU1BICovXFxubW0vb29tX2tpbGwuYy0xMjctXFxuLS1cXG5tbS9vb21fa2lsbC5jPTI0OT1zdGF0aWMgZW51bSBvb21fY29uc3RyYWludCBjb25zdHJhaW5lZF9hbGxvYyhzdHJ1Y3Qgb29tX2NvbnRyb2wgKm9jKVxcbi0tXFxubW0vb29tX2tpbGwuYy0yNjQtXFxubW0vb29tX2tpbGwuYzoyNjU6XFx0aWYgKCFJU19FTkFCTEVEKENPTkZJR19OVU1BKSlcXG5tbS9vb21fa2lsbC5jLTI2Ni1cXHRcXHRyZXR1cm4gQ09OU1RSQUlOVF9OT05FO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xM1QxMTowNzozNC4xMzAwOTAzNzdaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMjQwNzY3NjMzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIGFzc3VtaW5nIEknbSBkZWVwIGluIHRoZSB3ZWVkcyBvZiBrZXJuZWwgbWVtb3J5IG1hbmFnZW1lbnQ6XG5cbioqRGlnZ2luZyBpbnRvIGBjb25zdHJhaW5lZF9hbGxvY2AqKlxuXG5SaWdodCwgcmlnaHQsIHRoYXQncyBpdCEgSSByZW1lbWJlciBub3csIGBjb25zdHJhaW5lZF9hbGxvY2AgaW1tZWRpYXRlbHkgY2hlY2tzIGZvciBgQ09ORklHX05VTUFgIGJlZm9yZSBkb2luZyBhbnl0aGluZyBpbnRlcmVzdGluZy4gU3BlY2lmaWNhbGx5LCBpdCBoYXMgYW4gYGlmICghSVNfRU5BQkxFRChDT05GSUdfTlVNQSkpIHJldHVybiBDT05TVFJBSU5UX05PTkU7YCBjaGVjayByaWdodCBiZWZvcmUgdGhlIHN0dWZmIEkgd2FzIGxvb2tpbmcgYXQhIFRoYXQncyBhIGtleSBkZXRhaWwgSSBhbG1vc3QgbWlzc2VkLiBPa2F5LCBsZXQncyByZWZyZXNoIG15IG1lbW9yeSBvbiB0aGUgd2hvbGUgZnVuY3Rpb24uIFRpbWUgdG8gZGl2ZSBpbnRvIHRoZSBjb2RlIGZvciBgY29uc3RyYWluZWRfYWxsb2NgIGFuZCBzZWUgd2hhdCdzIHdoYXQuIEdvdHRhIHVuZGVyc3RhbmQgdGhpcyBmdWxseSBiZWZvcmUgSSBjYW4gcHJvY2VlZC5cblxuXG4iLCJJbnB1dFRva2VucyI6MzgzMCwiT3V0cHV0VG9rZW5zIjozNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEzVDExOjA3OjM3LjM3MDg2MTI4WiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjExNzk4MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJtbS9vb21fa2lsbC5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDI0OSxcbiAgXCJMaW5lQ291bnRcIjogNTBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDI0OTpcXHRzdGF0aWMgZW51bSBvb21fY29uc3RyYWludCBjb25zdHJhaW5lZF9hbGxvYyhzdHJ1Y3Qgb29tX2NvbnRyb2wgKm9jKVxcbiAyNTA6XFx0e1xcbiAyNTE6XFx0XFx0c3RydWN0IHpvbmUgKnpvbmU7XFxuIDI1MjpcXHRcXHRzdHJ1Y3Qgem9uZXJlZiAqejtcXG4gMjUzOlxcdFxcdGVudW0gem9uZV90eXBlIGhpZ2hlc3Rfem9uZWlkeCA9IGdmcF96b25lKG9jLVxcdTAwM2VnZnBfbWFzayk7XFxuIDI1NDpcXHRcXHRib29sIGNwdXNldF9saW1pdGVkID0gZmFsc2U7XFxuIDI1NTpcXHRcXHRpbnQgbmlkO1xcbiAyNTY6XFx0XFxuIDI1NzpcXHRcXHRpZiAoaXNfbWVtY2dfb29tKG9jKSkge1xcbiAyNTg6XFx0XFx0XFx0b2MtXFx1MDAzZXRvdGFscGFnZXMgPSBtZW1fY2dyb3VwX2dldF9tYXgob2MtXFx1MDAzZW1lbWNnKSA/OiAxO1xcbiAyNTk6XFx0XFx0XFx0cmV0dXJuIENPTlNUUkFJTlRfTUVNQ0c7XFxuIDI2MDpcXHRcXHR9XFxuIDI2MTpcXHRcXG4gMjYyOlxcdFxcdC8qIERlZmF1bHQgdG8gYWxsIGF2YWlsYWJsZSBtZW1vcnkgKi9cXG4gMjYzOlxcdFxcdG9jLVxcdTAwM2V0b3RhbHBhZ2VzID0gdG90YWxyYW1fcGFnZXMoKSArIHRvdGFsX3N3YXBfcGFnZXM7XFxuIDI2NDpcXHRcXG4gMjY1OlxcdFxcdGlmICghSVNfRU5BQkxFRChDT05GSUdfTlVNQSkpXFxuIDI2NjpcXHRcXHRcXHRyZXR1cm4gQ09OU1RSQUlOVF9OT05FO1xcbiAyNjc6XFx0XFxuIDI2ODpcXHRcXHRpZiAoIW9jLVxcdTAwM2V6b25lbGlzdClcXG4gMjY5OlxcdFxcdFxcdHJldHVybiBDT05TVFJBSU5UX05PTkU7XFxuIDI3MDpcXHRcXG4gMjcxOlxcdFxcdC8qXFxuIDI3MjpcXHRcXHQgKiBBIHRydW5jYXRlZCBub2RlbWFzayBpbiB0aGUgcGFnZSBhbGxvY2F0b3IgbWVhbnMgYSBtZW1wb2xpY3lcXG4gMjczOlxcdFxcdCAqIGlzIGluIGVmZmVjdC4gIENwdXNldCBwb2xpY3kgaXMgZW5mb3JjZWQgaW5cXG4gMjc0OlxcdFxcdCAqIGdldF9wYWdlX2Zyb21fZnJlZWxpc3QoKS5cXG4gMjc1OlxcdFxcdCAqL1xcbiAyNzY6XFx0XFx0aWYgKG9jLVxcdTAwM2Vub2RlbWFzayBcXHUwMDI2XFx1MDAyNlxcbiAyNzc6XFx0XFx0ICAgICFub2Rlc19zdWJzZXQobm9kZV9zdGF0ZXNbTl9NRU1PUlldLCAqb2MtXFx1MDAzZW5vZGVtYXNrKSkge1xcbiAyNzg6XFx0XFx0XFx0b2MtXFx1MDAzZXRvdGFscGFnZXMgPSB0b3RhbF9zd2FwX3BhZ2VzO1xcbiAyNzk6XFx0XFx0XFx0Zm9yX2VhY2hfbm9kZV9tYXNrKG5pZCwgKm9jLVxcdTAwM2Vub2RlbWFzaylcXG4gMjgwOlxcdFxcdFxcdFxcdG9jLVxcdTAwM2V0b3RhbHBhZ2VzICs9IG5vZGVfcHJlc2VudF9wYWdlcyhuaWQpO1xcbiAyODE6XFx0XFx0XFx0cmV0dXJuIENPTlNUUkFJTlRfTUVNT1JZX1BPTElDWTtcXG4gMjgyOlxcdFxcdH1cXG4gMjgzOlxcdFxcbiAyODQ6XFx0XFx0LyogQ2hlY2sgdGhpcyBhbGxvY2F0aW9uIGZhaWx1cmUgaXMgY2F1c2VkIGJ5IGNwdXNldCdzIHdhbGwgZnVuY3Rpb24gKi9cXG4gMjg1OlxcdFxcdGZvcl9lYWNoX3pvbmVfem9uZWxpc3Rfbm9kZW1hc2soem9uZSwgeiwgb2MtXFx1MDAzZXpvbmVsaXN0LFxcbiAyODY6XFx0XFx0XFx0XFx0aGlnaGVzdF96b25laWR4LCBvYy1cXHUwMDNlbm9kZW1hc2spXFxuIDI4NzpcXHRcXHRcXHRpZiAoIWNwdXNldF96b25lX2FsbG93ZWQoem9uZSwgb2MtXFx1MDAzZWdmcF9tYXNrKSlcXG4gMjg4OlxcdFxcdFxcdFxcdGNwdXNldF9saW1pdGVkID0gdHJ1ZTtcXG4gMjg5OlxcdFxcbiAyOTA6XFx0XFx0aWYgKGNwdXNldF9saW1pdGVkKSB7XFxuIDI5MTpcXHRcXHRcXHRvYy1cXHUwMDNldG90YWxwYWdlcyA9IHRvdGFsX3N3YXBfcGFnZXM7XFxuIDI5MjpcXHRcXHRcXHRmb3JfZWFjaF9ub2RlX21hc2sobmlkLCBjcHVzZXRfY3VycmVudF9tZW1zX2FsbG93ZWQpXFxuIDI5MzpcXHRcXHRcXHRcXHRvYy1cXHUwMDNldG90YWxwYWdlcyArPSBub2RlX3ByZXNlbnRfcGFnZXMobmlkKTtcXG4gMjk0OlxcdFxcdFxcdHJldHVybiBDT05TVFJBSU5UX0NQVVNFVDtcXG4gMjk1OlxcdFxcdH1cXG4gMjk2OlxcdFxcdHJldHVybiBDT05TVFJBSU5UX05PTkU7XFxuIDI5NzpcXHR9XFxuIDI5ODpcXHRcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTNUMTE6MDc6MzcuMzcwOTgxMzZaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDU4ODk5NjA5MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBc3Nlc3NtZW50IG9mIHRoZSBPT00gS2lsbGVyIENoYW5nZSoqXG5cbk9rYXksIHNvIHRoaXMgY29kZSBwYXRoIEknbSBsb29raW5nIGF0LCB0aGUgb25lIHRoZSBwYXRjaCBtb2RpZmllcywgaXMgb25seSBoaXQgaWYgYENPTkZJR19OVU1BYCBpcyBlbmFibGVkLiBUaGF0J3MgZ29vZCB0byBrbm93LCBuYXJyb3dzIGRvd24gdGhlIHBvdGVudGlhbCBpbXBhY3QuIFRoZSByZWFsIG1lYXQgb2YgdGhpcyBpcyB0aGF0IHRoZSBwYXRjaCByZW1vdmVzIHRoZSBgX19HRlBfVEhJU05PREVgIGNoZWNrIHdpdGhpbiB0aGUgT09NIGtpbGxlciBsb2dpYy4gRnVuY3Rpb25hbGx5LCB0aGlzIGlzIGEgY2hhbmdlIGluIHRoZSBPT00ga2lsbGVyJ3MgYmVoYXZpb3IsIGFuZCB0aGF0LCBteSBmcmllbmQsIGltbWVkaWF0ZWx5IGZsYWdzIHRoaXMgYXMgc29tZXRoaW5nIHRvIG1ldGljdWxvdXNseSB0ZXN0LiBHaXZlbiB0aGF0LCBJJ2Qgc2F5IGZ1enppbmcgaXMgYWJzb2x1dGVseSB3YXJyYW50ZWQgaGVyZS5cblxuTGV0J3MgZm9jdXMgdGhlIGZ1enppbmcgZWZmb3J0cy4gVGhlIHByaW1hcnkgc3ltYm9sIHRvIHRhcmdldCBpcyBkZWZpbml0ZWx5IGBvdXRfb2ZfbWVtb3J5YC4gVGhhdCdzIHRoZSBlbnRyeSBwb2ludCwgdGhlIGNyaXRpY2FsIGZ1bmN0aW9uIGhlcmUuIEknbGwgbmVlZCB0byBlbmFibGUgYE5VTUFgIGluIG15IGZ1enppbmcgc2V0dXAgdG8gZXhlcmNpc2UgdGhpcyBjb2RlLlxuXG5KdXN0IHRvIGJlIGFic29sdXRlbHkgY2VydGFpbiwgbGV0IG1lIHF1aWNrbHkgZG91YmxlLWNoZWNrIHRoYXQgYENPTkZJR19OVU1BYCBpcyB0aGUgKm9ubHkqIHJlcXVpcmVkIGNvbmZpZy4gWXVwLCBsb29rcyBsaWtlIGl0J3MgdGhlIG1haW4gb25lLCBhcyBleHBlY3RlZC4gTm93LCB0aGlua2luZyBhYm91dCB0aGUgT09NIGtpbGxlcidzIGVudHJ5IHBvaW50c+KApiBpcyBgb3V0X29mX21lbW9yeWAgdGhlICpvbmx5KiBvbmU/IEhtbSwgd2hhdCBhYm91dCBgcGFnZWZhdWx0X291dF9vZl9tZW1vcnlgPyBOZWVkIHRvIGNvbnNpZGVyIHRoYXQgb25lIHRvby4gSSdsbCBuZWVkIHRvIGtlZXAgdGhhdCBpbiBtaW5kIHdoZW4gc2NvcGluZyB0aGUgZnV6emluZyB0YXJnZXRzIGFuZCBhbnkgYXNzb2NpYXRlZCBhbmFseXNpcy5cblxuXG4iLCJJbnB1dFRva2VucyI6NDgzNSwiT3V0cHV0VG9rZW5zIjozMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEzMywiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEzVDExOjA3OjQxLjk1OTk4MDM1MloiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTE4Mjg3ODgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwib3V0X29mX21lbW9yeVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9vb21fa2lsbC5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL29vbV9raWxsLmM9NTg9c3RhdGljIGludCBzeXNjdGxfb29tX2R1bXBfdGFza3MgPSAxO1xcbi0tXFxubW0vb29tX2tpbGwuYy02MC0vKlxcbm1tL29vbV9raWxsLmM6NjE6ICogU2VyaWFsaXplcyBvb20ga2lsbGVyIGludm9jYXRpb25zIChvdXRfb2ZfbWVtb3J5KCkpIGZyb20gYWxsIGNvbnRleHRzIHRvXFxubW0vb29tX2tpbGwuYy02Mi0gKiBwcmV2ZW50IGZyb20gb3ZlciBlYWdlciBvb20ga2lsbGluZyAoZS5nLiB3aGVuIHRoZSBvb20ga2lsbGVyIGlzIGludm9rZWRcXG4tLVxcbm1tL29vbV9raWxsLmM9MTA4NT1FWFBPUlRfU1lNQk9MX0dQTCh1bnJlZ2lzdGVyX29vbV9ub3RpZmllcik7XFxuLS1cXG5tbS9vb21fa2lsbC5jLTEwODctLyoqXFxubW0vb29tX2tpbGwuYzoxMDg4OiAqIG91dF9vZl9tZW1vcnkgLSBraWxsIHRoZSBcXFwiYmVzdFxcXCIgcHJvY2VzcyB3aGVuIHdlIHJ1biBvdXQgb2YgbWVtb3J5XFxubW0vb29tX2tpbGwuYy0xMDg5LSAqIEBvYzogcG9pbnRlciB0byBzdHJ1Y3Qgb29tX2NvbnRyb2xcXG4tLVxcbm1tL29vbV9raWxsLmMtMTA5NS0gKi9cXG5tbS9vb21fa2lsbC5jOjEwOTY6Ym9vbCBvdXRfb2ZfbWVtb3J5KHN0cnVjdCBvb21fY29udHJvbCAqb2MpXFxubW0vb29tX2tpbGwuYy0xMDk3LXtcXG4tLVxcbm1tL29vbV9raWxsLmMtMTE3Mi0gKi9cXG5tbS9vb21fa2lsbC5jOjExNzM6dm9pZCBwYWdlZmF1bHRfb3V0X29mX21lbW9yeSh2b2lkKVxcbm1tL29vbV9raWxsLmMtMTE3NC17XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEzVDExOjA3OjQyLjAxMTgyNjkwMVoiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0MjU2NzA2OTcyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IE9PTSBLaWxsZXIgQW5hbHlzaXMqKlxuXG5Pa2F5LCBzbyB0aGUgYmlnZ2VzdCBmbGFnIGhlcmUgaXMsIHVuc3VycHJpc2luZ2x5LCBgb3V0X29mX21lbW9yeWAuIFRoYXQncyB3aGVyZSBJIG5lZWQgdG8gZm9jdXMuIEknbSBnb2luZyB0byBzZXQgdGhhdCBhcyBteSBwcmltYXJ5IHN5bWJvbCwgdGhlIGNlbnRyYWwgcG9pbnQgb2YgdGhpcyBpbnZlc3RpZ2F0aW9uLlxuXG5UaGUga2V5IGNoYW5nZSBpcyBpbiB0aGUgT09NIGtpbGxlcidzIGNvbnN0cmFpbnQgbG9naWMsIHNwZWNpZmljYWxseSB0aGUgcmVtb3ZhbCBvZiB0aGUgYF9fR0ZQX1RISVNOT0RFYCBjaGVjayB3aXRoaW4gYGNvbnN0cmFpbmVkX2FsbG9jKClgLiBUaGlzIHN1YnRseSBidXQgc2lnbmlmaWNhbnRseSBhbHRlcnMgaG93IHRoZSBPT00ga2lsbGVyIGJlaGF2ZXMgd2hlbiBtZW1vcnkgcG9saWNpZXMgYXJlIGFjdGl2ZWx5IGluIHBsYXkuIEl0IHNlZW1zIHRoaXMgbW9kaWZpY2F0aW9uICpkb2VzKiBhbHRlciB0aGUgY29udHJvbCBmbG93IG9mIHRoZSBPT00ga2lsbGVyLCBtYWtpbmcgaXQgYSB2aWFibGUgdGFyZ2V0IGZvciBmdXp6aW5nLiBOb3csIHRvIGdldCB0aGlzIGNvZGUgdG8gZXhlY3V0ZSwgSSdsbCBuZWVkIHRvIGVuYWJsZSBgQ09ORklHX05VTUFgLiBUaGF0J3MgdGhlIGVuYWJsZXIuIEdvdCBpdC5cblxuXG4iLCJJbnB1dFRva2VucyI6NTYzMSwiT3V0cHV0VG9rZW5zIjoxMjEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMjgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTNUMTE6MDc6NDYuMjY4NTM2MzAzWiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6Nzg0MzAwMjgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIk5VTUFcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJvdXRfb2ZfbWVtb3J5XCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIE9PTSBraWxsZXIncyBjb25zdHJhaW50IGxvZ2ljIGJ5IHJlbW92aW5nIGEgY2hlY2sgZm9yIF9fR0ZQX1RISVNOT0RFIGluIGNvbnN0cmFpbmVkX2FsbG9jKCkuIFRoaXMgY2hhbmdlcyBob3cgdGhlIE9PTSBraWxsZXIgc2VsZWN0cyB0YXNrcyB0byBraWxsIHdoZW4gbWVtb3J5IHBvbGljaWVzIGFyZSBpbiBlZmZlY3QuIFRoZSBjb2RlIGlzIHJlYWNoYWJsZSBhbmQgZnVuY3Rpb25hbGx5IGFsdGVycyB0aGUgZXhlY3V0aW9uIGZsb3cgb2YgdGhlIE9PTSBraWxsZXIsIG1ha2luZyBpdCB3b3J0aCBmdXp6aW5nLiBUaGUgQ09ORklHX05VTUEgb3B0aW9uIGlzIHJlcXVpcmVkIHRvIHJlYWNoIHRoaXMgY29kZS5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJOVU1BXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwib3V0X29mX21lbW9yeVwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBPT00ga2lsbGVyJ3MgY29uc3RyYWludCBsb2dpYyBieSByZW1vdmluZyBhIGNoZWNrIGZvciBfX0dGUF9USElTTk9ERSBpbiBjb25zdHJhaW5lZF9hbGxvYygpLiBUaGlzIGNoYW5nZXMgaG93IHRoZSBPT00ga2lsbGVyIHNlbGVjdHMgdGFza3MgdG8ga2lsbCB3aGVuIG1lbW9yeSBwb2xpY2llcyBhcmUgaW4gZWZmZWN0LiBUaGUgY29kZSBpcyByZWFjaGFibGUgYW5kIGZ1bmN0aW9uYWxseSBhbHRlcnMgdGhlIGV4ZWN1dGlvbiBmbG93IG9mIHRoZSBPT00ga2lsbGVyLCBtYWtpbmcgaXQgd29ydGggZnV6emluZy4gVGhlIENPTkZJR19OVU1BIG9wdGlvbiBpcyByZXF1aXJlZCB0byByZWFjaCB0aGlzIGNvZGUuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEzVDExOjA3OjQ2LjM0Njk3MzYxMVoiLCJTZXEiOjE1LCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6IklmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6OTI2MDY5ODQxMiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEzVDExOjA3OjQ2LjM0NzQ0Nzg1MVoiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJiZXN0LWV4cGVuc2l2ZSIsIkR1cmF0aW9uIjo5MjYwMjIxMTkyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgT09NIGtpbGxlciBsb2dpYyBieSByZW1vdmluZyBhIGNoZWNrIGZvciBgX19HRlBfVEhJU05PREVgIGluIGBjb25zdHJhaW5lZF9hbGxvYygpYC4gVGhpcyBpcyBhIHB1cmVseSBsb2dpY2FsIGNoYW5nZSBhZmZlY3RpbmcgT09NIGNvbnN0cmFpbnQgZXZhbHVhdGlvbiBhbmQgbWVtb3J5IGFsbG9jYXRpb24gcG9saWNpZXMuIEl0IGRvZXMgbm90IGludHJvZHVjZSBhbnkgbmV3IGRhdGEgc3RydWN0dXJlcywgbWVtb3J5IGFsbG9jYXRpb25zLCBvciBkYXRhIGNvcGllcyB0byB1c2VyIHNwYWNlLiBUaGVyZSBpcyBubyByaXNrIG9mIGV4cG9zaW5nIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IG9yIGNyZWF0aW5nIGluZm8tbGVha3MsIHNvIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgbmVjZXNzYXJ5LiBBbnkgcG90ZW50aWFsIGJ1Z3MgcmVzdWx0aW5nIGZyb20gdGhpcyBjaGFuZ2UgKGUuZy4sIGRlYWRsb2NrcyBvciBpbmNvcnJlY3QgbWVtb3J5IG1hbmFnZW1lbnQpIHdvdWxkIGJlIGNhdWdodCBieSBzdGFuZGFyZCBkZXRlY3RvcnMgbGlrZSBLQVNBTiBvciBMT0NLREVQLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeVxuZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmRcbmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcilcbmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLlxuXG5DUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjpcbi0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZVxuICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU5cbiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUFxuICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLlxuLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCxcbiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLlxuXG5SdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLFxuTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy5cbkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFlcbnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzXG50aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLlxuXG5Mb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdFxudW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsXG5hIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXNcbnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nXG51bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2xcbmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSxcbmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6XG4xLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYlxuICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHNcbiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuXG4yLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzXG4gICBvciBzdHJ1Y3QgZmllbGRzLlxuMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkc1xuICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy5cbjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzXG4gICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuXG5cblNldCBOZWVkc0tNU0FOPWZhbHNlIElGOlxuLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlclxuICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHRcbiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLlxuLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZFxuICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuXG4tIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy5cblxuVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZVxuZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDI4ZGMyNmRjMDRkNWViYjNhYTNhODdjY2I2MzYzMjU1MzU0ZGYyZDdcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVGh1IEF1ZyAxMyAxMTowNzoyMCAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL21tL29vbV9raWxsLmMgYi9tbS9vb21fa2lsbC5jXG5pbmRleCA1ZjM3MmY2ZTI2ZmEzLi5mZDNjNDc2ODQ2YTMwIDEwMDY0NFxuLS0tIGEvbW0vb29tX2tpbGwuY1xuKysrIGIvbW0vb29tX2tpbGwuY1xuQEAgLTI2NywxOCArMjY3LDExIEBAIHN0YXRpYyBlbnVtIG9vbV9jb25zdHJhaW50IGNvbnN0cmFpbmVkX2FsbG9jKHN0cnVjdCBvb21fY29udHJvbCAqb2MpXG4gXG4gXHRpZiAoIW9jLVx1MDAzZXpvbmVsaXN0KVxuIFx0XHRyZXR1cm4gQ09OU1RSQUlOVF9OT05FO1xuLVx0Lypcbi1cdCAqIFJlYWNoIGhlcmUgb25seSB3aGVuIF9fR0ZQX05PRkFJTCBpcyB1c2VkLiBTbywgd2Ugc2hvdWxkIGF2b2lkXG4tXHQgKiB0byBraWxsIGN1cnJlbnQuV2UgaGF2ZSB0byByYW5kb20gdGFzayBraWxsIGluIHRoaXMgY2FzZS5cbi1cdCAqIEhvcGVmdWxseSwgQ09OU1RSQUlOVF9USElTTk9ERS4uLmJ1dCBubyB3YXkgdG8gaGFuZGxlIGl0LCBub3cuXG4tXHQgKi9cbi1cdGlmIChvYy1cdTAwM2VnZnBfbWFzayBcdTAwMjYgX19HRlBfVEhJU05PREUpXG4tXHRcdHJldHVybiBDT05TVFJBSU5UX05PTkU7XG4gXG4gXHQvKlxuLVx0ICogVGhpcyBpcyBub3QgYSBfX0dGUF9USElTTk9ERSBhbGxvY2F0aW9uLCBzbyBhIHRydW5jYXRlZCBub2RlbWFzayBpblxuLVx0ICogdGhlIHBhZ2UgYWxsb2NhdG9yIG1lYW5zIGEgbWVtcG9saWN5IGlzIGluIGVmZmVjdC4gIENwdXNldCBwb2xpY3lcbi1cdCAqIGlzIGVuZm9yY2VkIGluIGdldF9wYWdlX2Zyb21fZnJlZWxpc3QoKS5cbitcdCAqIEEgdHJ1bmNhdGVkIG5vZGVtYXNrIGluIHRoZSBwYWdlIGFsbG9jYXRvciBtZWFucyBhIG1lbXBvbGljeVxuK1x0ICogaXMgaW4gZWZmZWN0LiAgQ3B1c2V0IHBvbGljeSBpcyBlbmZvcmNlZCBpblxuK1x0ICogZ2V0X3BhZ2VfZnJvbV9mcmVlbGlzdCgpLlxuIFx0ICovXG4gXHRpZiAob2MtXHUwMDNlbm9kZW1hc2sgXHUwMDI2XHUwMDI2XG4gXHQgICAgIW5vZGVzX3N1YnNldChub2RlX3N0YXRlc1tOX01FTU9SWV0sICpvYy1cdTAwM2Vub2RlbWFzaykpIHtcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEzVDExOjA3OjQ2LjM0NzQ0OTU2MVoiLCJTZXEiOjE3LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1MTIyMDc0NTg2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgT09NIEtpbGxlciBDb25zdHJhaW50IE1vZGlmaWNhdGlvbioqXG5cbk9rYXksIHNvIHRoaXMgcGF0Y2ggaXMgdG91Y2hpbmcgYG1tL29vbV9raWxsLmNgLCBzcGVjaWZpY2FsbHkgYGNvbnN0cmFpbmVkX2FsbG9jKClgLiBUaGUgY29yZSBvZiB0aGUgY2hhbmdlIGlzIHJlbW92aW5nIGEgY2hlY2sgZm9yIGBfX0dGUF9USElTTk9ERWAuIFJpZ2h0LCBzbyB0aGlzIGZ1bmN0aW9uIGlzIGFsbCBhYm91dCBmaWd1cmluZyBvdXQgdGhlIE9PTSBjb25zdHJhaW50IOKAkyB3aGV0aGVyIGl0J3MgbGltaXRlZCBieSBDUFUgc2V0LCBtZW1vcnkgcG9saWN5LCBvciBtZW1jZy4gUmVtb3ZpbmcgdGhhdCBjaGVjayBlc3NlbnRpYWxseSBhbHRlcnMgaG93IHRoZSBPT00ga2lsbGVyIGRlY2lkZXMgd2hpY2ggYWxsb2NhdGlvbnMgYXJlIGNvbnNpZGVyZWQgY29uc3RyYWluZWQuXG5cbk15IGltbWVkaWF0ZSBhc3Nlc3NtZW50IGlzIHRoaXM6IGl0IGRvZXNuJ3QgYXBwZWFyIHRvIGJlIGEgS01TQU4gKEtlcm5lbCBNZW1vcnkgU2FuaXRpemVyKSBpc3N1ZS4gVGhlcmUncyBubyBvYnZpb3VzIHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgaGVyZS4gVGhpcyBpc24ndCBhYm91dCBleHBvc2luZyBrZXJuZWwgaW50ZXJuYWxzIHRvIHVzZXJzcGFjZSwgYW5kIHRoZXJlIGFyZSBubyBuZXcgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMgaW50cm9kdWNlZC4gVGhpcyBjaGFuZ2UgaXMgcHVyZWx5IGFib3V0IHRoZSBPT00ga2lsbGVyJ3MgZGVjaXNpb24tbWFraW5nIHByb2Nlc3MgY29uY2VybmluZyBtZW1vcnkgYWxsb2NhdGlvbiBjb25zdHJhaW50cy5cblxuT2YgY291cnNlLCBhbnkgY2hhbmdlIHRvIG1lbW9yeSBtYW5hZ2VtZW50IGhhcyB0byBiZSBleGFtaW5lZCBjYXJlZnVsbHkuIEFsdGhvdWdoIEtNU0FOIGlzbid0IHJlbGV2YW50IGluIHRoaXMgc3BlY2lmaWMgY2FzZSwgaXQncyB3b3J0aCBicmllZmx5IGNvbnNpZGVyaW5nIEtBU0FOL0xPQ0tERVAgZXRjLiB0byBzZWUgaWYgdGhpcyB0d2VhayBjb3VsZCAqaW5kaXJlY3RseSogdHJpZ2dlciBtZW1vcnkgY29ycnVwdGlvbiBvciBkZWFkbG9ja3MuIEknbGwgcXVpY2tseSBnbGFuY2UgYXQgdGhlIHN1cnJvdW5kaW5nIGNvZGUganVzdCB0byBiZSBjZXJ0YWluLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMTQ5LCJPdXRwdXRUb2tlbnMiOjM1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjQ1LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTNUMTE6MDc6NTEuNDY5NTI3MjM3WiIsIlNlcSI6MTgsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjExMTk0MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJtbS9vb21fa2lsbC5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDI1MCxcbiAgXCJMaW5lQ291bnRcIjogNTBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDI1MDpcXHR7XFxuIDI1MTpcXHRcXHRzdHJ1Y3Qgem9uZSAqem9uZTtcXG4gMjUyOlxcdFxcdHN0cnVjdCB6b25lcmVmICp6O1xcbiAyNTM6XFx0XFx0ZW51bSB6b25lX3R5cGUgaGlnaGVzdF96b25laWR4ID0gZ2ZwX3pvbmUob2MtXFx1MDAzZWdmcF9tYXNrKTtcXG4gMjU0OlxcdFxcdGJvb2wgY3B1c2V0X2xpbWl0ZWQgPSBmYWxzZTtcXG4gMjU1OlxcdFxcdGludCBuaWQ7XFxuIDI1NjpcXHRcXG4gMjU3OlxcdFxcdGlmIChpc19tZW1jZ19vb20ob2MpKSB7XFxuIDI1ODpcXHRcXHRcXHRvYy1cXHUwMDNldG90YWxwYWdlcyA9IG1lbV9jZ3JvdXBfZ2V0X21heChvYy1cXHUwMDNlbWVtY2cpID86IDE7XFxuIDI1OTpcXHRcXHRcXHRyZXR1cm4gQ09OU1RSQUlOVF9NRU1DRztcXG4gMjYwOlxcdFxcdH1cXG4gMjYxOlxcdFxcbiAyNjI6XFx0XFx0LyogRGVmYXVsdCB0byBhbGwgYXZhaWxhYmxlIG1lbW9yeSAqL1xcbiAyNjM6XFx0XFx0b2MtXFx1MDAzZXRvdGFscGFnZXMgPSB0b3RhbHJhbV9wYWdlcygpICsgdG90YWxfc3dhcF9wYWdlcztcXG4gMjY0OlxcdFxcbiAyNjU6XFx0XFx0aWYgKCFJU19FTkFCTEVEKENPTkZJR19OVU1BKSlcXG4gMjY2OlxcdFxcdFxcdHJldHVybiBDT05TVFJBSU5UX05PTkU7XFxuIDI2NzpcXHRcXG4gMjY4OlxcdFxcdGlmICghb2MtXFx1MDAzZXpvbmVsaXN0KVxcbiAyNjk6XFx0XFx0XFx0cmV0dXJuIENPTlNUUkFJTlRfTk9ORTtcXG4gMjcwOlxcdFxcbiAyNzE6XFx0XFx0LypcXG4gMjcyOlxcdFxcdCAqIEEgdHJ1bmNhdGVkIG5vZGVtYXNrIGluIHRoZSBwYWdlIGFsbG9jYXRvciBtZWFucyBhIG1lbXBvbGljeVxcbiAyNzM6XFx0XFx0ICogaXMgaW4gZWZmZWN0LiAgQ3B1c2V0IHBvbGljeSBpcyBlbmZvcmNlZCBpblxcbiAyNzQ6XFx0XFx0ICogZ2V0X3BhZ2VfZnJvbV9mcmVlbGlzdCgpLlxcbiAyNzU6XFx0XFx0ICovXFxuIDI3NjpcXHRcXHRpZiAob2MtXFx1MDAzZW5vZGVtYXNrIFxcdTAwMjZcXHUwMDI2XFxuIDI3NzpcXHRcXHQgICAgIW5vZGVzX3N1YnNldChub2RlX3N0YXRlc1tOX01FTU9SWV0sICpvYy1cXHUwMDNlbm9kZW1hc2spKSB7XFxuIDI3ODpcXHRcXHRcXHRvYy1cXHUwMDNldG90YWxwYWdlcyA9IHRvdGFsX3N3YXBfcGFnZXM7XFxuIDI3OTpcXHRcXHRcXHRmb3JfZWFjaF9ub2RlX21hc2sobmlkLCAqb2MtXFx1MDAzZW5vZGVtYXNrKVxcbiAyODA6XFx0XFx0XFx0XFx0b2MtXFx1MDAzZXRvdGFscGFnZXMgKz0gbm9kZV9wcmVzZW50X3BhZ2VzKG5pZCk7XFxuIDI4MTpcXHRcXHRcXHRyZXR1cm4gQ09OU1RSQUlOVF9NRU1PUllfUE9MSUNZO1xcbiAyODI6XFx0XFx0fVxcbiAyODM6XFx0XFxuIDI4NDpcXHRcXHQvKiBDaGVjayB0aGlzIGFsbG9jYXRpb24gZmFpbHVyZSBpcyBjYXVzZWQgYnkgY3B1c2V0J3Mgd2FsbCBmdW5jdGlvbiAqL1xcbiAyODU6XFx0XFx0Zm9yX2VhY2hfem9uZV96b25lbGlzdF9ub2RlbWFzayh6b25lLCB6LCBvYy1cXHUwMDNlem9uZWxpc3QsXFxuIDI4NjpcXHRcXHRcXHRcXHRoaWdoZXN0X3pvbmVpZHgsIG9jLVxcdTAwM2Vub2RlbWFzaylcXG4gMjg3OlxcdFxcdFxcdGlmICghY3B1c2V0X3pvbmVfYWxsb3dlZCh6b25lLCBvYy1cXHUwMDNlZ2ZwX21hc2spKVxcbiAyODg6XFx0XFx0XFx0XFx0Y3B1c2V0X2xpbWl0ZWQgPSB0cnVlO1xcbiAyODk6XFx0XFxuIDI5MDpcXHRcXHRpZiAoY3B1c2V0X2xpbWl0ZWQpIHtcXG4gMjkxOlxcdFxcdFxcdG9jLVxcdTAwM2V0b3RhbHBhZ2VzID0gdG90YWxfc3dhcF9wYWdlcztcXG4gMjkyOlxcdFxcdFxcdGZvcl9lYWNoX25vZGVfbWFzayhuaWQsIGNwdXNldF9jdXJyZW50X21lbXNfYWxsb3dlZClcXG4gMjkzOlxcdFxcdFxcdFxcdG9jLVxcdTAwM2V0b3RhbHBhZ2VzICs9IG5vZGVfcHJlc2VudF9wYWdlcyhuaWQpO1xcbiAyOTQ6XFx0XFx0XFx0cmV0dXJuIENPTlNUUkFJTlRfQ1BVU0VUO1xcbiAyOTU6XFx0XFx0fVxcbiAyOTY6XFx0XFx0cmV0dXJuIENPTlNUUkFJTlRfTk9ORTtcXG4gMjk3OlxcdH1cXG4gMjk4OlxcdFxcbiAyOTk6XFx0c3RhdGljIGludCBvb21fZXZhbHVhdGVfdGFzayhzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhc2ssIHZvaWQgKmFyZylcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTNUMTE6MDc6NTEuNDY5NjQwOTg3WiIsIlNlcSI6MTksIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQxMzgwMDkwMTYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQXNzZXNzbWVudCBvZiB0aGUgUGF0Y2gqKlxuXG5Pa2F5LCBzbyBJJ3ZlIGp1c3QgcmV2aWV3ZWQgdGhpcyBwYXRjaC4gRXNzZW50aWFsbHksIGFsbCBpdCBkb2VzIGlzIGVsaW1pbmF0ZSBhIHNwZWNpZmljIGNvbmRpdGlvbmFsIGNoZWNrIHJlbGF0ZWQgdG8gYG9jLVx1MDAzZWdmcF9tYXNrYCBhbmQgdGhlIGBfX0dGUF9USElTTk9ERWAgZmxhZy4gTXkgYW5hbHlzaXM/IFRoZXJlJ3Mgbm8gZGV0ZWN0YWJsZSB1bmluaXRpYWxpemVkIG1lbW9yeSBleHBvc3VyZSBpbnRyb2R1Y2VkIGJ5IHRoaXMgY2hhbmdlLiBUaGUgcmVtb3ZhbCBvZiB0aGlzIGNvbmRpdGlvbiBhcHBlYXJzIHN0cmFpZ2h0Zm9yd2FyZCBhbmQgaGFybWxlc3MgaW4gdGVybXMgb2YgbWVtb3J5IHNhZmV0eSwgZ2l2ZW4gdGhlIGNvbnRleHQuIFRoZXJlZm9yZSwgSSdtIGNvbmZpZGVudCBpbiBzZXR0aW5nIGBOZWVkc0tNU0FOYCB0byBmYWxzZS4gVGhpcyBsb29rcyBsaWtlIGEgY2xlYW4gYW5kIGxpa2VseSBwZXJmb3JtYW5jZS1vcmllbnRlZCB0d2Vhay5cblxuXG4iLCJJbnB1dFRva2VucyI6MzQ1NSwiT3V0cHV0VG9rZW5zIjoxNDksIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0MiwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEzVDExOjA3OjU1LjYwNzY1MjIzM1oiLCJTZXEiOjIwLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE1MzUwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIE9PTSBraWxsZXIgbG9naWMgYnkgcmVtb3ZpbmcgYSBjaGVjayBmb3IgYF9fR0ZQX1RISVNOT0RFYCBpbiBgY29uc3RyYWluZWRfYWxsb2MoKWAuIFRoaXMgaXMgYSBwdXJlbHkgbG9naWNhbCBjaGFuZ2UgYWZmZWN0aW5nIE9PTSBjb25zdHJhaW50IGV2YWx1YXRpb24gYW5kIG1lbW9yeSBhbGxvY2F0aW9uIHBvbGljaWVzLiBJdCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IG5ldyBkYXRhIHN0cnVjdHVyZXMsIG1lbW9yeSBhbGxvY2F0aW9ucywgb3IgZGF0YSBjb3BpZXMgdG8gdXNlciBzcGFjZS4gVGhlcmUgaXMgbm8gcmlzayBvZiBleHBvc2luZyB1bmluaXRpYWxpemVkIG1lbW9yeSBvciBjcmVhdGluZyBpbmZvLWxlYWtzLCBzbyBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IG5lY2Vzc2FyeS4gQW55IHBvdGVudGlhbCBidWdzIHJlc3VsdGluZyBmcm9tIHRoaXMgY2hhbmdlIChlLmcuLCBkZWFkbG9ja3Mgb3IgaW5jb3JyZWN0IG1lbW9yeSBtYW5hZ2VtZW50KSB3b3VsZCBiZSBjYXVnaHQgYnkgc3RhbmRhcmQgZGV0ZWN0b3JzIGxpa2UgS0FTQU4gb3IgTE9DS0RFUC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgT09NIGtpbGxlciBsb2dpYyBieSByZW1vdmluZyBhIGNoZWNrIGZvciBgX19HRlBfVEhJU05PREVgIGluIGBjb25zdHJhaW5lZF9hbGxvYygpYC4gVGhpcyBpcyBhIHB1cmVseSBsb2dpY2FsIGNoYW5nZSBhZmZlY3RpbmcgT09NIGNvbnN0cmFpbnQgZXZhbHVhdGlvbiBhbmQgbWVtb3J5IGFsbG9jYXRpb24gcG9saWNpZXMuIEl0IGRvZXMgbm90IGludHJvZHVjZSBhbnkgbmV3IGRhdGEgc3RydWN0dXJlcywgbWVtb3J5IGFsbG9jYXRpb25zLCBvciBkYXRhIGNvcGllcyB0byB1c2VyIHNwYWNlLiBUaGVyZSBpcyBubyByaXNrIG9mIGV4cG9zaW5nIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IG9yIGNyZWF0aW5nIGluZm8tbGVha3MsIHNvIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgbmVjZXNzYXJ5LiBBbnkgcG90ZW50aWFsIGJ1Z3MgcmVzdWx0aW5nIGZyb20gdGhpcyBjaGFuZ2UgKGUuZy4sIGRlYWRsb2NrcyBvciBpbmNvcnJlY3QgbWVtb3J5IG1hbmFnZW1lbnQpIHdvdWxkIGJlIGNhdWdodCBieSBzdGFuZGFyZCBkZXRlY3RvcnMgbGlrZSBLQVNBTiBvciBMT0NLREVQLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/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-workflow9bxsr[0].run-triage(0) Phase: Succeeded StartedAt: 2026-08-13 10:42:42 +0000 UTC FinishedAt: 2026-08-13 11:07:57 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "mm-new", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git", "commit_hash": "7ba5daade5ab61776382020b708b1ef75c9af1ea", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "NUMA" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "mm-new", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git", "commit_hash": "7ba5daade5ab61776382020b708b1ef75c9af1ea", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "NUMA" ], "series_id": "a89db2e6-bc89-45b8-a883-e6e108ee0574" }, "track": "KASAN", "fuzz": { "focus": null, "focus_symbols": [ "out_of_memory" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db" ], "skip_cover_check": true, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEzIDExOjA3PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O05VTUEmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtvdXRfb2ZfbWVtb3J5JiMzNDsKICBdLAogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIE9PTSBraWxsZXIgbG9naWMgYnkgcmVtb3ZpbmcgYSBjaGVjayBmb3IgYF9fR0ZQX1RISVNOT0RFYCBpbiBgY29uc3RyYWluZWRfYWxsb2MoKWAuIFRoaXMgaXMgYSBwdXJlbHkgbG9naWNhbCBjaGFuZ2UgYWZmZWN0aW5nIE9PTSBjb25zdHJhaW50IGV2YWx1YXRpb24gYW5kIG1lbW9yeSBhbGxvY2F0aW9uIHBvbGljaWVzLiBJdCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IG5ldyBkYXRhIHN0cnVjdHVyZXMsIG1lbW9yeSBhbGxvY2F0aW9ucywgb3IgZGF0YSBjb3BpZXMgdG8gdXNlciBzcGFjZS4gVGhlcmUgaXMgbm8gcmlzayBvZiBleHBvc2luZyB1bmluaXRpYWxpemVkIG1lbW9yeSBvciBjcmVhdGluZyBpbmZvLWxlYWtzLCBzbyBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IG5lY2Vzc2FyeS4gQW55IHBvdGVudGlhbCBidWdzIHJlc3VsdGluZyBmcm9tIHRoaXMgY2hhbmdlIChlLmcuLCBkZWFkbG9ja3Mgb3IgaW5jb3JyZWN0IG1lbW9yeSBtYW5hZ2VtZW50KSB3b3VsZCBiZSBjYXVnaHQgYnkgc3RhbmRhcmQgZGV0ZWN0b3JzIGxpa2UgS0FTQU4gb3IgTE9DS0RFUC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIE9PTSBraWxsZXImIzM5O3MgY29uc3RyYWludCBsb2dpYyBieSByZW1vdmluZyBhIGNoZWNrIGZvciBfX0dGUF9USElTTk9ERSBpbiBjb25zdHJhaW5lZF9hbGxvYygpLiBUaGlzIGNoYW5nZXMgaG93IHRoZSBPT00ga2lsbGVyIHNlbGVjdHMgdGFza3MgdG8ga2lsbCB3aGVuIG1lbW9yeSBwb2xpY2llcyBhcmUgaW4gZWZmZWN0LiBUaGUgY29kZSBpcyByZWFjaGFibGUgYW5kIGZ1bmN0aW9uYWxseSBhbHRlcnMgdGhlIGV4ZWN1dGlvbiBmbG93IG9mIHRoZSBPT00ga2lsbGVyLCBtYWtpbmcgaXQgd29ydGggZnV6emluZy4gVGhlIENPTkZJR19OVU1BIG9wdGlvbiBpcyByZXF1aXJlZCB0byByZWFjaCB0aGlzIGNvZGUuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTMgMTE6MDc8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCAyOGRjMjZkYzA0ZDVlYmIzYWEzYTg3Y2NiNjM2MzI1NTM1NGRmMmQ3XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFRodSBBdWcgMTMgMTE6MDc6MjAgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvbW0vb29tX2tpbGwuYyBiL21tL29vbV9raWxsLmNcbmluZGV4IDVmMzcyZjZlMjZmYTMuLmZkM2M0NzY4NDZhMzAgMTAwNjQ0XG4tLS0gYS9tbS9vb21fa2lsbC5jXG4mIzQzOyYjNDM7JiM0MzsgYi9tbS9vb21fa2lsbC5jXG5AQCAtMjY3LDE4ICYjNDM7MjY3LDExIEBAIHN0YXRpYyBlbnVtIG9vbV9jb25zdHJhaW50IGNvbnN0cmFpbmVkX2FsbG9jKHN0cnVjdCBvb21fY29udHJvbCAqb2MpXG4gXG4gXHRpZiAoIW9jLVx1MDAzZXpvbmVsaXN0KVxuIFx0XHRyZXR1cm4gQ09OU1RSQUlOVF9OT05FO1xuLVx0Lypcbi1cdCAqIFJlYWNoIGhlcmUgb25seSB3aGVuIF9fR0ZQX05PRkFJTCBpcyB1c2VkLiBTbywgd2Ugc2hvdWxkIGF2b2lkXG4tXHQgKiB0byBraWxsIGN1cnJlbnQuV2UgaGF2ZSB0byByYW5kb20gdGFzayBraWxsIGluIHRoaXMgY2FzZS5cbi1cdCAqIEhvcGVmdWxseSwgQ09OU1RSQUlOVF9USElTTk9ERS4uLmJ1dCBubyB3YXkgdG8gaGFuZGxlIGl0LCBub3cuXG4tXHQgKi9cbi1cdGlmIChvYy1cdTAwM2VnZnBfbWFzayBcdTAwMjYgX19HRlBfVEhJU05PREUpXG4tXHRcdHJldHVybiBDT05TVFJBSU5UX05PTkU7XG4gXG4gXHQvKlxuLVx0ICogVGhpcyBpcyBub3QgYSBfX0dGUF9USElTTk9ERSBhbGxvY2F0aW9uLCBzbyBhIHRydW5jYXRlZCBub2RlbWFzayBpblxuLVx0ICogdGhlIHBhZ2UgYWxsb2NhdG9yIG1lYW5zIGEgbWVtcG9saWN5IGlzIGluIGVmZmVjdC4gIENwdXNldCBwb2xpY3lcbi1cdCAqIGlzIGVuZm9yY2VkIGluIGdldF9wYWdlX2Zyb21fZnJlZWxpc3QoKS5cbiYjNDM7XHQgKiBBIHRydW5jYXRlZCBub2RlbWFzayBpbiB0aGUgcGFnZSBhbGxvY2F0b3IgbWVhbnMgYSBtZW1wb2xpY3lcbiYjNDM7XHQgKiBpcyBpbiBlZmZlY3QuICBDcHVzZXQgcG9saWN5IGlzIGVuZm9yY2VkIGluXG4mIzQzO1x0ICogZ2V0X3BhZ2VfZnJvbV9mcmVlbGlzdCgpLlxuIFx0ICovXG4gXHRpZiAob2MtXHUwMDNlbm9kZW1hc2sgXHUwMDI2XHUwMDI2XG4gXHQgICAgIW5vZGVzX3N1YnNldChub2RlX3N0YXRlc1tOX01FTU9SWV0sICpvYy1cdTAwM2Vub2RlbWFzaykpIHtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMyAxMTowNzwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5iZXN0LWV4cGVuc2l2ZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7TlVNQSYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O291dF9vZl9tZW1vcnkmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIE9PTSBraWxsZXImIzM5O3MgY29uc3RyYWludCBsb2dpYyBieSByZW1vdmluZyBhIGNoZWNrIGZvciBfX0dGUF9USElTTk9ERSBpbiBjb25zdHJhaW5lZF9hbGxvYygpLiBUaGlzIGNoYW5nZXMgaG93IHRoZSBPT00ga2lsbGVyIHNlbGVjdHMgdGFza3MgdG8ga2lsbCB3aGVuIG1lbW9yeSBwb2xpY2llcyBhcmUgaW4gZWZmZWN0LiBUaGUgY29kZSBpcyByZWFjaGFibGUgYW5kIGZ1bmN0aW9uYWxseSBhbHRlcnMgdGhlIGV4ZWN1dGlvbiBmbG93IG9mIHRoZSBPT00ga2lsbGVyLCBtYWtpbmcgaXQgd29ydGggZnV6emluZy4gVGhlIENPTkZJR19OVU1BIG9wdGlvbiBpcyByZXF1aXJlZCB0byByZWFjaCB0aGlzIGNvZGUuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuCi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSkKICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgogICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnMKICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuCjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLgogICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCiAgIEFsc28gY2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzCiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncwogICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCAyOGRjMjZkYzA0ZDVlYmIzYWEzYTg3Y2NiNjM2MzI1NTM1NGRmMmQ3CkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFRodSBBdWcgMTMgMTE6MDc6MjAgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9tbS9vb21fa2lsbC5jIGIvbW0vb29tX2tpbGwuYwppbmRleCA1ZjM3MmY2ZTI2ZmEzLi5mZDNjNDc2ODQ2YTMwIDEwMDY0NAotLS0gYS9tbS9vb21fa2lsbC5jCiYjNDM7JiM0MzsmIzQzOyBiL21tL29vbV9raWxsLmMKQEAgLTI2NywxOCAmIzQzOzI2NywxMSBAQCBzdGF0aWMgZW51bSBvb21fY29uc3RyYWludCBjb25zdHJhaW5lZF9hbGxvYyhzdHJ1Y3Qgb29tX2NvbnRyb2wgKm9jKQogCiAJaWYgKCFvYy0mZ3Q7em9uZWxpc3QpCiAJCXJldHVybiBDT05TVFJBSU5UX05PTkU7Ci0JLyoKLQkgKiBSZWFjaCBoZXJlIG9ubHkgd2hlbiBfX0dGUF9OT0ZBSUwgaXMgdXNlZC4gU28sIHdlIHNob3VsZCBhdm9pZAotCSAqIHRvIGtpbGwgY3VycmVudC5XZSBoYXZlIHRvIHJhbmRvbSB0YXNrIGtpbGwgaW4gdGhpcyBjYXNlLgotCSAqIEhvcGVmdWxseSwgQ09OU1RSQUlOVF9USElTTk9ERS4uLmJ1dCBubyB3YXkgdG8gaGFuZGxlIGl0LCBub3cuCi0JICovCi0JaWYgKG9jLSZndDtnZnBfbWFzayAmYW1wOyBfX0dGUF9USElTTk9ERSkKLQkJcmV0dXJuIENPTlNUUkFJTlRfTk9ORTsKIAogCS8qCi0JICogVGhpcyBpcyBub3QgYSBfX0dGUF9USElTTk9ERSBhbGxvY2F0aW9uLCBzbyBhIHRydW5jYXRlZCBub2RlbWFzayBpbgotCSAqIHRoZSBwYWdlIGFsbG9jYXRvciBtZWFucyBhIG1lbXBvbGljeSBpcyBpbiBlZmZlY3QuICBDcHVzZXQgcG9saWN5Ci0JICogaXMgZW5mb3JjZWQgaW4gZ2V0X3BhZ2VfZnJvbV9mcmVlbGlzdCgpLgomIzQzOwkgKiBBIHRydW5jYXRlZCBub2RlbWFzayBpbiB0aGUgcGFnZSBhbGxvY2F0b3IgbWVhbnMgYSBtZW1wb2xpY3kKJiM0MzsJICogaXMgaW4gZWZmZWN0LiAgQ3B1c2V0IHBvbGljeSBpcyBlbmZvcmNlZCBpbgomIzQzOwkgKiBnZXRfcGFnZV9mcm9tX2ZyZWVsaXN0KCkuCiAJICovCiAJaWYgKG9jLSZndDtub2RlbWFzayAmYW1wOyZhbXA7CiAJICAgICFub2Rlc19zdWJzZXQobm9kZV9zdGF0ZXNbTl9NRU1PUlldLCAqb2MtJmd0O25vZGVtYXNrKSkgewo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMyAxMTowNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMTUyCgkJCQkJCQlvdXRwdXQ6IDMwCgkJCQkJCQl0aG91Z2h0czogMjAwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgT09NIEtpbGxlciBQYXRjaCoqCgpPa2F5LCBzbyB0aGlzIHBhdGNoIGlzIHRvdWNoaW5nIGBtbS9vb21fa2lsbC5jYCwgc3BlY2lmaWNhbGx5IGBjb25zdHJhaW5lZF9hbGxvYygpYC4gVGhlIGNvcmUgb2YgdGhlIGNoYW5nZSBzZWVtcyB0byBiZSByZW1vdmluZyBhIGNoZWNrIGZvciBgX19HRlBfVEhJU05PREVgLiBIbW0sIGxldCYjMzk7cyBzZWUsIHRoZSBvcmlnaW5hbCBjb2RlIGhhZCB0aGlzOgoKYGBgYwoJaWYgKG9jLSZndDtnZnBfbWFzayAmYW1wOyBfX0dGUF9USElTTk9ERSkKCQlyZXR1cm4gQ09OU1RSQUlOVF9OT05FOwpgYGAKClRoaXMgKnJlbW92ZXMqIHRoaXMsIG1lYW5pbmcgaXQmIzM5O3MgYWx0ZXJpbmcgdGhlIGJlaGF2aW9yIG9mIHRoZSBPT00ga2lsbGVyIHdoZW4gYF9fR0ZQX1RISVNOT0RFYCBpcyBpbiBwbGF5LiBUaGUgY29tbWVudCBpbiB0aGUgb3JpZ2luYWwgY29kZSBpcyBwcmV0dHkgZW5saWdodGVuaW5nLCBpdCBzYXlzIHRoaXMgc2VjdGlvbiBpcyByZWFjaGVkIG9ubHkgd2hlbiBgX19HRlBfTk9GQUlMYCBpcyB1c2VkLiBUaGUgY29tbWVudCBzdGF0ZXMgdGhhdCBraWxsaW5nIHRoZSBjdXJyZW50IHRhc2sgaXMgdG8gYmUgYXZvaWRlZCBhbmQgdGhlIGNvZGUgcmFuZG9tbHkga2lsbHMgYW5vdGhlciB0YXNrLiBUaGF0IGRvZXNuJiMzOTt0IHNlZW0gb3B0aW1hbCBidXQgaXQgaXMgdGhlIGNvZGUgdGhhdCBpcyBiZWluZyByZW1vdmVkLiBJIGhhdmUgdG8gdGhpbmsgYWJvdXQgd2hhdCB0aGlzIG1lYW5zIGluIHRlcm1zIG9mIGNvbnN0cmFpbnQgbG9naWMuIEkgc2hvdWxkIHByb2JhYmx5IHJlLWV4YW1pbmUgaG93IGBjb25zdHJhaW5lZF9hbGxvY2AgaXMgdXNlZCB3aXRoaW4gYG1tL29vbV9raWxsLmNgIHRvIGZ1bGx5IGdyYXNwIHRoZSByYW1pZmljYXRpb25zIG9mIHRoaXMgY2hhbmdlLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aHkgdGhpcyBjaGVjayB3YXMgdGhlcmUgaW4gdGhlIGZpcnN0IHBsYWNlLCBhbmQgd2hhdCB0aGUgaW1wbGljYXRpb25zIG9mIGl0cyByZW1vdmFsIGFyZSBmb3IgdGhlIHZhcmlvdXMgYWxsb2NhdGlvbiBzY2VuYXJpb3MsIGVzcGVjaWFsbHkgdGhvc2UgdGhhdCBpbnZvbHZlIGBfX0dGUF9OT0ZBSUxgLiAKCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMyAxMTowNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25zdHJhaW5lZF9hbGxvYyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tL29vbV9raWxsLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vb29tX2tpbGwuYz0yMzk9c3RhdGljIGNvbnN0IGNoYXIgKiBjb25zdCBvb21fY29uc3RyYWludF90ZXh0W10gPSB7XG4tLVxubW0vb29tX2tpbGwuYy0yNDgtICovXG5tbS9vb21fa2lsbC5jOjI0OTpzdGF0aWMgZW51bSBvb21fY29uc3RyYWludCBjb25zdHJhaW5lZF9hbGxvYyhzdHJ1Y3Qgb29tX2NvbnRyb2wgKm9jKVxubW0vb29tX2tpbGwuYy0yNTAte1xuLS1cbm1tL29vbV9raWxsLmM9MTA5Nj1ib29sIG91dF9vZl9tZW1vcnkoc3RydWN0IG9vbV9jb250cm9sICpvYylcbi0tXG5tbS9vb21fa2lsbC5jLTExMzItXHQgKi9cbm1tL29vbV9raWxsLmM6MTEzMzpcdG9jLVx1MDAzZWNvbnN0cmFpbnQgPSBjb25zdHJhaW5lZF9hbGxvYyhvYyk7XG5tbS9vb21fa2lsbC5jLTExMzQtXHRpZiAob2MtXHUwMDNlY29uc3RyYWludCAhPSBDT05TVFJBSU5UX01FTU9SWV9QT0xJQ1kpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTMgMTE6MDc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjg1OQoJCQkJCQkJb3V0cHV0OiAzMwoJCQkJCQkJdGhvdWdodHM6IDk1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKktlcm5lbCBNZW1vcnkgQWxsb2NhdGlvbiBQYXRjaCBBbmFseXNpcyoqCgpPa2F5LCBzbyB0aGlzIHBhdGNoIGlzIHRvdWNoaW5nIGBjb25zdHJhaW5lZF9hbGxvY2AuIEFuZCBJIGtub3cgdGhhdCBmdW5jdGlvbiBpcyBjYWxsZWQgYnkgYG91dF9vZl9tZW1vcnlgIOKAkyB0aGF0JiMzOTtzIHRoZSBPT00ga2lsbGVyISBUaGlzIGlzIHByZXR0eSBzZXJpb3VzIHN0dWZmOyB3ZSYjMzk7cmUgdGFsa2luZyBhYm91dCBjb3JlIGtlcm5lbCBtZW1vcnkgbWFuYWdlbWVudCwgdGhlIHNvcnQgb2YgY29kZSB0aGF0JiMzOTtzIHJpcGUgZm9yIGV4cGxvaXRhdGlvbiBpZiB0aGVyZSYjMzk7cyBldmVuIGEgc3VidGxlIGJ1Zy4gTXkgZmlyc3QgaW5zdGluY3QgaXMsIGRlZmluaXRlbHksIGZ1enogdGhpcy4KCk5vdywgbXkgZm9jdXMgaXMgZ29pbmcgdG8gYmUgb24gYGNvbnN0cmFpbmVkX2FsbG9jYCBhbmQgYG91dF9vZl9tZW1vcnlgLiBXYWl0IGEgc2Vjb25k4oCmIGlzbiYjMzk7dCBgY29uc3RyYWluZWRfYWxsb2NgIGRlY2xhcmVkIHN0YXRpYz8gVGhhdCBjb3VsZCBjb21wbGljYXRlIHRoaW5ncyBhIGJpdC4gSXQgaXMsIGFuZCBgb3V0X29mX21lbW9yeWAgaXMgbm90LiBUaGlzIG1lYW5zIEkgbmVlZCB0byBkb3VibGUtY2hlY2sgd2hldGhlciBgb3V0X29mX21lbW9yeWAgaXMgZXhwb3J0ZWQgb3IgZ2xvYmFsLiBHb3R0YSBzZWUgaWYgdGhlcmUmIzM5O3MgYW55IHdheSB0byBkaXJlY3RseSBjYWxsIGl0LCBpZiBJIHdhbnQgdG8gaGF2ZSBhIGxvb2staW4gZnJvbSB1c2VyLXNwYWNlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEzIDExOjA3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2Jvb2wgb3V0X29mX21lbW9yeSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tL29vbV9raWxsLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vb29tX2tpbGwuYz0xMDg1PUVYUE9SVF9TWU1CT0xfR1BMKHVucmVnaXN0ZXJfb29tX25vdGlmaWVyKTtcbi0tXG5tbS9vb21fa2lsbC5jLTEwOTUtICovXG5tbS9vb21fa2lsbC5jOjEwOTY6Ym9vbCBvdXRfb2ZfbWVtb3J5KHN0cnVjdCBvb21fY29udHJvbCAqb2MpXG5tbS9vb21fa2lsbC5jLTEwOTcte1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEzIDExOjA3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDMyODMKCQkJCQkJCW91dHB1dDogMzEKCQkJCQkJCXRob3VnaHRzOiA3NAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIE9PTSBTaXR1YXRpb24qKgoKT2theSwgc28gSSYjMzk7bSBkZWFsaW5nIHdpdGggYW4gYG91dF9vZl9tZW1vcnlgIHNjZW5hcmlvIGhlcmUuIFRoZSBrZXkgaXMgdGhhdCBgb3V0X29mX21lbW9yeWAgaXMgYSBnbG9iYWwgZnVuY3Rpb24sIHdoaWNoIGdpdmVzIHVzIGEgY2VydGFpbiBsZXZlbCBvZiBjb250cm9sLCBidXQgd2UgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBzcGVjaWZpY3MuIE15IGZpcnN0IHRob3VnaHQgaXMgdG8gZGlnIGludG8gdGhlIGNvbmZpZ3VyYXRpb24g4oCTIGFyZSB0aGVyZSBhbnkgY3VzdG9tIGNvbmZpZ3VyYXRpb25zIHRoYXQgbWlnaHQgYmUgaW5mbHVlbmNpbmcgdGhpcyBiZWhhdmlvcj8gVGhlIE9PTSBraWxsZXIgaXMsIGFzIGV4cGVjdGVkLCBhIGJ1aWx0LWluIGZ1bmN0aW9uIG9mIHRoZSBjb3JlIHN5c3RlbS4gTm93LCB0aGUgcHJldmlvdXMgY29kZSBoYWQgc29tZSBjaGVja3MgcmVsYXRlZCB0byBgX19HRlBfVEhJU05PREVgIGFuZCBgb2MtJmd0O25vZGVtYXNrYC4gS25vd2luZyB0aGlzIGlzIGNyaXRpY2FsLCBiZWNhdXNlIHRoaXMgbGlrZWx5IHBvaW50cyB0b3dhcmRzIE5VTUEgY29uZmlndXJhdGlvbnMgb3IgbWVtcG9saWN5IHNldHRpbmdzLiBJIGhhdmUgdG8gc2VlIGlmIHRoZXJlIGFyZSBzcGVjaWZpYyBjb25maWd1cmF0aW9ucyByZWxhdGVkIHRvIHRob3NlIGFyZWFzIHRoYXQgd2UgbmVlZCB0byBleGFtaW5lIGZ1cnRoZXIuIFRoaXMgaXMgd2hlcmUgdGhlIHJvb3Qgb2YgdGhlIHByb2JsZW0gbWlnaHQgbGllLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEzIDExOjA3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O0NPTkZJR19OVU1BJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vb29tX2tpbGwuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9vb21fa2lsbC5jPTcyPXN0YXRpYyBpbmxpbmUgYm9vbCBpc19tZW1jZ19vb20oc3RydWN0IG9vbV9jb250cm9sICpvYylcbi0tXG5tbS9vb21fa2lsbC5jLTc2LVxubW0vb29tX2tpbGwuYzo3NzojaWZkZWYgQ09ORklHX05VTUFcbm1tL29vbV9raWxsLmMtNzgtLyoqXG4tLVxubW0vb29tX2tpbGwuYz0xMjI9c3RhdGljIGJvb2wgb29tX2NwdXNldF9lbGlnaWJsZShzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRzaywgc3RydWN0IG9vbV9jb250cm9sICpvYylcbi0tXG5tbS9vb21fa2lsbC5jLTEyNS19XG5tbS9vb21fa2lsbC5jOjEyNjojZW5kaWYgLyogQ09ORklHX05VTUEgKi9cbm1tL29vbV9raWxsLmMtMTI3LVxuLS1cbm1tL29vbV9raWxsLmM9MjQ5PXN0YXRpYyBlbnVtIG9vbV9jb25zdHJhaW50IGNvbnN0cmFpbmVkX2FsbG9jKHN0cnVjdCBvb21fY29udHJvbCAqb2MpXG4tLVxubW0vb29tX2tpbGwuYy0yNjQtXG5tbS9vb21fa2lsbC5jOjI2NTpcdGlmICghSVNfRU5BQkxFRChDT05GSUdfTlVNQSkpXG5tbS9vb21fa2lsbC5jLTI2Ni1cdFx0cmV0dXJuIENPTlNUUkFJTlRfTk9ORTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMyAxMTowNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzODMwCgkJCQkJCQlvdXRwdXQ6IDM1CgkJCQkJCQl0aG91Z2h0czogNDIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIGFzc3VtaW5nIEkmIzM5O20gZGVlcCBpbiB0aGUgd2VlZHMgb2Yga2VybmVsIG1lbW9yeSBtYW5hZ2VtZW50OgoKKipEaWdnaW5nIGludG8gYGNvbnN0cmFpbmVkX2FsbG9jYCoqCgpSaWdodCwgcmlnaHQsIHRoYXQmIzM5O3MgaXQhIEkgcmVtZW1iZXIgbm93LCBgY29uc3RyYWluZWRfYWxsb2NgIGltbWVkaWF0ZWx5IGNoZWNrcyBmb3IgYENPTkZJR19OVU1BYCBiZWZvcmUgZG9pbmcgYW55dGhpbmcgaW50ZXJlc3RpbmcuIFNwZWNpZmljYWxseSwgaXQgaGFzIGFuIGBpZiAoIUlTX0VOQUJMRUQoQ09ORklHX05VTUEpKSByZXR1cm4gQ09OU1RSQUlOVF9OT05FO2AgY2hlY2sgcmlnaHQgYmVmb3JlIHRoZSBzdHVmZiBJIHdhcyBsb29raW5nIGF0ISBUaGF0JiMzOTtzIGEga2V5IGRldGFpbCBJIGFsbW9zdCBtaXNzZWQuIE9rYXksIGxldCYjMzk7cyByZWZyZXNoIG15IG1lbW9yeSBvbiB0aGUgd2hvbGUgZnVuY3Rpb24uIFRpbWUgdG8gZGl2ZSBpbnRvIHRoZSBjb2RlIGZvciBgY29uc3RyYWluZWRfYWxsb2NgIGFuZCBzZWUgd2hhdCYjMzk7cyB3aGF0LiBHb3R0YSB1bmRlcnN0YW5kIHRoaXMgZnVsbHkgYmVmb3JlIEkgY2FuIHByb2NlZWQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEzIDExOjA3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bW0vb29tX2tpbGwuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDI0OSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA1MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgMjQ5Olx0c3RhdGljIGVudW0gb29tX2NvbnN0cmFpbnQgY29uc3RyYWluZWRfYWxsb2Moc3RydWN0IG9vbV9jb250cm9sICpvYylcbiAyNTA6XHR7XG4gMjUxOlx0XHRzdHJ1Y3Qgem9uZSAqem9uZTtcbiAyNTI6XHRcdHN0cnVjdCB6b25lcmVmICp6O1xuIDI1MzpcdFx0ZW51bSB6b25lX3R5cGUgaGlnaGVzdF96b25laWR4ID0gZ2ZwX3pvbmUob2MtXHUwMDNlZ2ZwX21hc2spO1xuIDI1NDpcdFx0Ym9vbCBjcHVzZXRfbGltaXRlZCA9IGZhbHNlO1xuIDI1NTpcdFx0aW50IG5pZDtcbiAyNTY6XHRcbiAyNTc6XHRcdGlmIChpc19tZW1jZ19vb20ob2MpKSB7XG4gMjU4Olx0XHRcdG9jLVx1MDAzZXRvdGFscGFnZXMgPSBtZW1fY2dyb3VwX2dldF9tYXgob2MtXHUwMDNlbWVtY2cpID86IDE7XG4gMjU5Olx0XHRcdHJldHVybiBDT05TVFJBSU5UX01FTUNHO1xuIDI2MDpcdFx0fVxuIDI2MTpcdFxuIDI2MjpcdFx0LyogRGVmYXVsdCB0byBhbGwgYXZhaWxhYmxlIG1lbW9yeSAqL1xuIDI2MzpcdFx0b2MtXHUwMDNldG90YWxwYWdlcyA9IHRvdGFscmFtX3BhZ2VzKCkgJiM0MzsgdG90YWxfc3dhcF9wYWdlcztcbiAyNjQ6XHRcbiAyNjU6XHRcdGlmICghSVNfRU5BQkxFRChDT05GSUdfTlVNQSkpXG4gMjY2Olx0XHRcdHJldHVybiBDT05TVFJBSU5UX05PTkU7XG4gMjY3Olx0XG4gMjY4Olx0XHRpZiAoIW9jLVx1MDAzZXpvbmVsaXN0KVxuIDI2OTpcdFx0XHRyZXR1cm4gQ09OU1RSQUlOVF9OT05FO1xuIDI3MDpcdFxuIDI3MTpcdFx0LypcbiAyNzI6XHRcdCAqIEEgdHJ1bmNhdGVkIG5vZGVtYXNrIGluIHRoZSBwYWdlIGFsbG9jYXRvciBtZWFucyBhIG1lbXBvbGljeVxuIDI3MzpcdFx0ICogaXMgaW4gZWZmZWN0LiAgQ3B1c2V0IHBvbGljeSBpcyBlbmZvcmNlZCBpblxuIDI3NDpcdFx0ICogZ2V0X3BhZ2VfZnJvbV9mcmVlbGlzdCgpLlxuIDI3NTpcdFx0ICovXG4gMjc2Olx0XHRpZiAob2MtXHUwMDNlbm9kZW1hc2sgXHUwMDI2XHUwMDI2XG4gMjc3Olx0XHQgICAgIW5vZGVzX3N1YnNldChub2RlX3N0YXRlc1tOX01FTU9SWV0sICpvYy1cdTAwM2Vub2RlbWFzaykpIHtcbiAyNzg6XHRcdFx0b2MtXHUwMDNldG90YWxwYWdlcyA9IHRvdGFsX3N3YXBfcGFnZXM7XG4gMjc5Olx0XHRcdGZvcl9lYWNoX25vZGVfbWFzayhuaWQsICpvYy1cdTAwM2Vub2RlbWFzaylcbiAyODA6XHRcdFx0XHRvYy1cdTAwM2V0b3RhbHBhZ2VzICYjNDM7PSBub2RlX3ByZXNlbnRfcGFnZXMobmlkKTtcbiAyODE6XHRcdFx0cmV0dXJuIENPTlNUUkFJTlRfTUVNT1JZX1BPTElDWTtcbiAyODI6XHRcdH1cbiAyODM6XHRcbiAyODQ6XHRcdC8qIENoZWNrIHRoaXMgYWxsb2NhdGlvbiBmYWlsdXJlIGlzIGNhdXNlZCBieSBjcHVzZXQmIzM5O3Mgd2FsbCBmdW5jdGlvbiAqL1xuIDI4NTpcdFx0Zm9yX2VhY2hfem9uZV96b25lbGlzdF9ub2RlbWFzayh6b25lLCB6LCBvYy1cdTAwM2V6b25lbGlzdCxcbiAyODY6XHRcdFx0XHRoaWdoZXN0X3pvbmVpZHgsIG9jLVx1MDAzZW5vZGVtYXNrKVxuIDI4NzpcdFx0XHRpZiAoIWNwdXNldF96b25lX2FsbG93ZWQoem9uZSwgb2MtXHUwMDNlZ2ZwX21hc2spKVxuIDI4ODpcdFx0XHRcdGNwdXNldF9saW1pdGVkID0gdHJ1ZTtcbiAyODk6XHRcbiAyOTA6XHRcdGlmIChjcHVzZXRfbGltaXRlZCkge1xuIDI5MTpcdFx0XHRvYy1cdTAwM2V0b3RhbHBhZ2VzID0gdG90YWxfc3dhcF9wYWdlcztcbiAyOTI6XHRcdFx0Zm9yX2VhY2hfbm9kZV9tYXNrKG5pZCwgY3B1c2V0X2N1cnJlbnRfbWVtc19hbGxvd2VkKVxuIDI5MzpcdFx0XHRcdG9jLVx1MDAzZXRvdGFscGFnZXMgJiM0Mzs9IG5vZGVfcHJlc2VudF9wYWdlcyhuaWQpO1xuIDI5NDpcdFx0XHRyZXR1cm4gQ09OU1RSQUlOVF9DUFVTRVQ7XG4gMjk1Olx0XHR9XG4gMjk2Olx0XHRyZXR1cm4gQ09OU1RSQUlOVF9OT05FO1xuIDI5NzpcdH1cbiAyOTg6XHRcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTMgMTE6MDc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDgzNQoJCQkJCQkJb3V0cHV0OiAzMgoJCQkJCQkJdGhvdWdodHM6IDEzMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBc3Nlc3NtZW50IG9mIHRoZSBPT00gS2lsbGVyIENoYW5nZSoqCgpPa2F5LCBzbyB0aGlzIGNvZGUgcGF0aCBJJiMzOTttIGxvb2tpbmcgYXQsIHRoZSBvbmUgdGhlIHBhdGNoIG1vZGlmaWVzLCBpcyBvbmx5IGhpdCBpZiBgQ09ORklHX05VTUFgIGlzIGVuYWJsZWQuIFRoYXQmIzM5O3MgZ29vZCB0byBrbm93LCBuYXJyb3dzIGRvd24gdGhlIHBvdGVudGlhbCBpbXBhY3QuIFRoZSByZWFsIG1lYXQgb2YgdGhpcyBpcyB0aGF0IHRoZSBwYXRjaCByZW1vdmVzIHRoZSBgX19HRlBfVEhJU05PREVgIGNoZWNrIHdpdGhpbiB0aGUgT09NIGtpbGxlciBsb2dpYy4gRnVuY3Rpb25hbGx5LCB0aGlzIGlzIGEgY2hhbmdlIGluIHRoZSBPT00ga2lsbGVyJiMzOTtzIGJlaGF2aW9yLCBhbmQgdGhhdCwgbXkgZnJpZW5kLCBpbW1lZGlhdGVseSBmbGFncyB0aGlzIGFzIHNvbWV0aGluZyB0byBtZXRpY3Vsb3VzbHkgdGVzdC4gR2l2ZW4gdGhhdCwgSSYjMzk7ZCBzYXkgZnV6emluZyBpcyBhYnNvbHV0ZWx5IHdhcnJhbnRlZCBoZXJlLgoKTGV0JiMzOTtzIGZvY3VzIHRoZSBmdXp6aW5nIGVmZm9ydHMuIFRoZSBwcmltYXJ5IHN5bWJvbCB0byB0YXJnZXQgaXMgZGVmaW5pdGVseSBgb3V0X29mX21lbW9yeWAuIFRoYXQmIzM5O3MgdGhlIGVudHJ5IHBvaW50LCB0aGUgY3JpdGljYWwgZnVuY3Rpb24gaGVyZS4gSSYjMzk7bGwgbmVlZCB0byBlbmFibGUgYE5VTUFgIGluIG15IGZ1enppbmcgc2V0dXAgdG8gZXhlcmNpc2UgdGhpcyBjb2RlLgoKSnVzdCB0byBiZSBhYnNvbHV0ZWx5IGNlcnRhaW4sIGxldCBtZSBxdWlja2x5IGRvdWJsZS1jaGVjayB0aGF0IGBDT05GSUdfTlVNQWAgaXMgdGhlICpvbmx5KiByZXF1aXJlZCBjb25maWcuIFl1cCwgbG9va3MgbGlrZSBpdCYjMzk7cyB0aGUgbWFpbiBvbmUsIGFzIGV4cGVjdGVkLiBOb3csIHRoaW5raW5nIGFib3V0IHRoZSBPT00ga2lsbGVyJiMzOTtzIGVudHJ5IHBvaW50c+KApiBpcyBgb3V0X29mX21lbW9yeWAgdGhlICpvbmx5KiBvbmU/IEhtbSwgd2hhdCBhYm91dCBgcGFnZWZhdWx0X291dF9vZl9tZW1vcnlgPyBOZWVkIHRvIGNvbnNpZGVyIHRoYXQgb25lIHRvby4gSSYjMzk7bGwgbmVlZCB0byBrZWVwIHRoYXQgaW4gbWluZCB3aGVuIHNjb3BpbmcgdGhlIGZ1enppbmcgdGFyZ2V0cyBhbmQgYW55IGFzc29jaWF0ZWQgYW5hbHlzaXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEzIDExOjA3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O291dF9vZl9tZW1vcnkmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS9vb21fa2lsbC5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL29vbV9raWxsLmM9NTg9c3RhdGljIGludCBzeXNjdGxfb29tX2R1bXBfdGFza3MgPSAxO1xuLS1cbm1tL29vbV9raWxsLmMtNjAtLypcbm1tL29vbV9raWxsLmM6NjE6ICogU2VyaWFsaXplcyBvb20ga2lsbGVyIGludm9jYXRpb25zIChvdXRfb2ZfbWVtb3J5KCkpIGZyb20gYWxsIGNvbnRleHRzIHRvXG5tbS9vb21fa2lsbC5jLTYyLSAqIHByZXZlbnQgZnJvbSBvdmVyIGVhZ2VyIG9vbSBraWxsaW5nIChlLmcuIHdoZW4gdGhlIG9vbSBraWxsZXIgaXMgaW52b2tlZFxuLS1cbm1tL29vbV9raWxsLmM9MTA4NT1FWFBPUlRfU1lNQk9MX0dQTCh1bnJlZ2lzdGVyX29vbV9ub3RpZmllcik7XG4tLVxubW0vb29tX2tpbGwuYy0xMDg3LS8qKlxubW0vb29tX2tpbGwuYzoxMDg4OiAqIG91dF9vZl9tZW1vcnkgLSBraWxsIHRoZSBcJiMzNDtiZXN0XCYjMzQ7IHByb2Nlc3Mgd2hlbiB3ZSBydW4gb3V0IG9mIG1lbW9yeVxubW0vb29tX2tpbGwuYy0xMDg5LSAqIEBvYzogcG9pbnRlciB0byBzdHJ1Y3Qgb29tX2NvbnRyb2xcbi0tXG5tbS9vb21fa2lsbC5jLTEwOTUtICovXG5tbS9vb21fa2lsbC5jOjEwOTY6Ym9vbCBvdXRfb2ZfbWVtb3J5KHN0cnVjdCBvb21fY29udHJvbCAqb2MpXG5tbS9vb21fa2lsbC5jLTEwOTcte1xuLS1cbm1tL29vbV9raWxsLmMtMTE3Mi0gKi9cbm1tL29vbV9raWxsLmM6MTE3Mzp2b2lkIHBhZ2VmYXVsdF9vdXRfb2ZfbWVtb3J5KHZvaWQpXG5tbS9vb21fa2lsbC5jLTExNzQte1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMyAxMTowNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1NjMxCgkJCQkJCQlvdXRwdXQ6IDEyMQoJCQkJCQkJdGhvdWdodHM6IDEyOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBPT00gS2lsbGVyIEFuYWx5c2lzKioKCk9rYXksIHNvIHRoZSBiaWdnZXN0IGZsYWcgaGVyZSBpcywgdW5zdXJwcmlzaW5nbHksIGBvdXRfb2ZfbWVtb3J5YC4gVGhhdCYjMzk7cyB3aGVyZSBJIG5lZWQgdG8gZm9jdXMuIEkmIzM5O20gZ29pbmcgdG8gc2V0IHRoYXQgYXMgbXkgcHJpbWFyeSBzeW1ib2wsIHRoZSBjZW50cmFsIHBvaW50IG9mIHRoaXMgaW52ZXN0aWdhdGlvbi4KClRoZSBrZXkgY2hhbmdlIGlzIGluIHRoZSBPT00ga2lsbGVyJiMzOTtzIGNvbnN0cmFpbnQgbG9naWMsIHNwZWNpZmljYWxseSB0aGUgcmVtb3ZhbCBvZiB0aGUgYF9fR0ZQX1RISVNOT0RFYCBjaGVjayB3aXRoaW4gYGNvbnN0cmFpbmVkX2FsbG9jKClgLiBUaGlzIHN1YnRseSBidXQgc2lnbmlmaWNhbnRseSBhbHRlcnMgaG93IHRoZSBPT00ga2lsbGVyIGJlaGF2ZXMgd2hlbiBtZW1vcnkgcG9saWNpZXMgYXJlIGFjdGl2ZWx5IGluIHBsYXkuIEl0IHNlZW1zIHRoaXMgbW9kaWZpY2F0aW9uICpkb2VzKiBhbHRlciB0aGUgY29udHJvbCBmbG93IG9mIHRoZSBPT00ga2lsbGVyLCBtYWtpbmcgaXQgYSB2aWFibGUgdGFyZ2V0IGZvciBmdXp6aW5nLiBOb3csIHRvIGdldCB0aGlzIGNvZGUgdG8gZXhlY3V0ZSwgSSYjMzk7bGwgbmVlZCB0byBlbmFibGUgYENPTkZJR19OVU1BYC4gVGhhdCYjMzk7cyB0aGUgZW5hYmxlci4gR290IGl0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMyAxMTowNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7TlVNQSYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O291dF9vZl9tZW1vcnkmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIE9PTSBraWxsZXImIzM5O3MgY29uc3RyYWludCBsb2dpYyBieSByZW1vdmluZyBhIGNoZWNrIGZvciBfX0dGUF9USElTTk9ERSBpbiBjb25zdHJhaW5lZF9hbGxvYygpLiBUaGlzIGNoYW5nZXMgaG93IHRoZSBPT00ga2lsbGVyIHNlbGVjdHMgdGFza3MgdG8ga2lsbCB3aGVuIG1lbW9yeSBwb2xpY2llcyBhcmUgaW4gZWZmZWN0LiBUaGUgY29kZSBpcyByZWFjaGFibGUgYW5kIGZ1bmN0aW9uYWxseSBhbHRlcnMgdGhlIGV4ZWN1dGlvbiBmbG93IG9mIHRoZSBPT00ga2lsbGVyLCBtYWtpbmcgaXQgd29ydGggZnV6emluZy4gVGhlIENPTkZJR19OVU1BIG9wdGlvbiBpcyByZXF1aXJlZCB0byByZWFjaCB0aGlzIGNvZGUuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O05VTUEmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtvdXRfb2ZfbWVtb3J5JiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBPT00ga2lsbGVyJiMzOTtzIGNvbnN0cmFpbnQgbG9naWMgYnkgcmVtb3ZpbmcgYSBjaGVjayBmb3IgX19HRlBfVEhJU05PREUgaW4gY29uc3RyYWluZWRfYWxsb2MoKS4gVGhpcyBjaGFuZ2VzIGhvdyB0aGUgT09NIGtpbGxlciBzZWxlY3RzIHRhc2tzIHRvIGtpbGwgd2hlbiBtZW1vcnkgcG9saWNpZXMgYXJlIGluIGVmZmVjdC4gVGhlIGNvZGUgaXMgcmVhY2hhYmxlIGFuZCBmdW5jdGlvbmFsbHkgYWx0ZXJzIHRoZSBleGVjdXRpb24gZmxvdyBvZiB0aGUgT09NIGtpbGxlciwgbWFraW5nIGl0IHdvcnRoIGZ1enppbmcuIFRoZSBDT05GSUdfTlVNQSBvcHRpb24gaXMgcmVxdWlyZWQgdG8gcmVhY2ggdGhpcyBjb2RlLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE1LzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMyAxMTowNzwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+SWY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEzIDExOjA3PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmJlc3QtZXhwZW5zaXZlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBPT00ga2lsbGVyIGxvZ2ljIGJ5IHJlbW92aW5nIGEgY2hlY2sgZm9yIGBfX0dGUF9USElTTk9ERWAgaW4gYGNvbnN0cmFpbmVkX2FsbG9jKClgLiBUaGlzIGlzIGEgcHVyZWx5IGxvZ2ljYWwgY2hhbmdlIGFmZmVjdGluZyBPT00gY29uc3RyYWludCBldmFsdWF0aW9uIGFuZCBtZW1vcnkgYWxsb2NhdGlvbiBwb2xpY2llcy4gSXQgZG9lcyBub3QgaW50cm9kdWNlIGFueSBuZXcgZGF0YSBzdHJ1Y3R1cmVzLCBtZW1vcnkgYWxsb2NhdGlvbnMsIG9yIGRhdGEgY29waWVzIHRvIHVzZXIgc3BhY2UuIFRoZXJlIGlzIG5vIHJpc2sgb2YgZXhwb3NpbmcgdW5pbml0aWFsaXplZCBtZW1vcnkgb3IgY3JlYXRpbmcgaW5mby1sZWFrcywgc28gYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCBuZWNlc3NhcnkuIEFueSBwb3RlbnRpYWwgYnVncyByZXN1bHRpbmcgZnJvbSB0aGlzIGNoYW5nZSAoZS5nLiwgZGVhZGxvY2tzIG9yIGluY29ycmVjdCBtZW1vcnkgbWFuYWdlbWVudCkgd291bGQgYmUgY2F1Z2h0IGJ5IHN0YW5kYXJkIGRldGVjdG9ycyBsaWtlIEtBU0FOIG9yIExPQ0tERVAuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5CmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kCmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikKZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuCgpDUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjoKLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlCiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOCiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUAogIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuCi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsCiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLgoKUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTiwKTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy4KQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWQpzZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrcwp0aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLgoKTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3QKdW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsCmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5cwp0aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZwp1bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2wKZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLApjYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy4KClNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczoKMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2IKICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHMKICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC4KMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlcwogICBvciBzdHJ1Y3QgZmllbGRzLgozLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzCiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuCjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzCiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy4KClNldCBOZWVkc0tNU0FOPWZhbHNlIElGOgotIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyCiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0CiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLgotIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkCiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLgotIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy4KClVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGUKZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDI4ZGMyNmRjMDRkNWViYjNhYTNhODdjY2I2MzYzMjU1MzU0ZGYyZDcKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgVGh1IEF1ZyAxMyAxMTowNzoyMCAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL21tL29vbV9raWxsLmMgYi9tbS9vb21fa2lsbC5jCmluZGV4IDVmMzcyZjZlMjZmYTMuLmZkM2M0NzY4NDZhMzAgMTAwNjQ0Ci0tLSBhL21tL29vbV9raWxsLmMKJiM0MzsmIzQzOyYjNDM7IGIvbW0vb29tX2tpbGwuYwpAQCAtMjY3LDE4ICYjNDM7MjY3LDExIEBAIHN0YXRpYyBlbnVtIG9vbV9jb25zdHJhaW50IGNvbnN0cmFpbmVkX2FsbG9jKHN0cnVjdCBvb21fY29udHJvbCAqb2MpCiAKIAlpZiAoIW9jLSZndDt6b25lbGlzdCkKIAkJcmV0dXJuIENPTlNUUkFJTlRfTk9ORTsKLQkvKgotCSAqIFJlYWNoIGhlcmUgb25seSB3aGVuIF9fR0ZQX05PRkFJTCBpcyB1c2VkLiBTbywgd2Ugc2hvdWxkIGF2b2lkCi0JICogdG8ga2lsbCBjdXJyZW50LldlIGhhdmUgdG8gcmFuZG9tIHRhc2sga2lsbCBpbiB0aGlzIGNhc2UuCi0JICogSG9wZWZ1bGx5LCBDT05TVFJBSU5UX1RISVNOT0RFLi4uYnV0IG5vIHdheSB0byBoYW5kbGUgaXQsIG5vdy4KLQkgKi8KLQlpZiAob2MtJmd0O2dmcF9tYXNrICZhbXA7IF9fR0ZQX1RISVNOT0RFKQotCQlyZXR1cm4gQ09OU1RSQUlOVF9OT05FOwogCiAJLyoKLQkgKiBUaGlzIGlzIG5vdCBhIF9fR0ZQX1RISVNOT0RFIGFsbG9jYXRpb24sIHNvIGEgdHJ1bmNhdGVkIG5vZGVtYXNrIGluCi0JICogdGhlIHBhZ2UgYWxsb2NhdG9yIG1lYW5zIGEgbWVtcG9saWN5IGlzIGluIGVmZmVjdC4gIENwdXNldCBwb2xpY3kKLQkgKiBpcyBlbmZvcmNlZCBpbiBnZXRfcGFnZV9mcm9tX2ZyZWVsaXN0KCkuCiYjNDM7CSAqIEEgdHJ1bmNhdGVkIG5vZGVtYXNrIGluIHRoZSBwYWdlIGFsbG9jYXRvciBtZWFucyBhIG1lbXBvbGljeQomIzQzOwkgKiBpcyBpbiBlZmZlY3QuICBDcHVzZXQgcG9saWN5IGlzIGVuZm9yY2VkIGluCiYjNDM7CSAqIGdldF9wYWdlX2Zyb21fZnJlZWxpc3QoKS4KIAkgKi8KIAlpZiAob2MtJmd0O25vZGVtYXNrICZhbXA7JmFtcDsKIAkgICAgIW5vZGVzX3N1YnNldChub2RlX3N0YXRlc1tOX01FTU9SWV0sICpvYy0mZ3Q7bm9kZW1hc2spKSB7CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE3LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMyAxMTowNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMTQ5CgkJCQkJCQlvdXRwdXQ6IDM1CgkJCQkJCQl0aG91Z2h0czogMjQ1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgT09NIEtpbGxlciBDb25zdHJhaW50IE1vZGlmaWNhdGlvbioqCgpPa2F5LCBzbyB0aGlzIHBhdGNoIGlzIHRvdWNoaW5nIGBtbS9vb21fa2lsbC5jYCwgc3BlY2lmaWNhbGx5IGBjb25zdHJhaW5lZF9hbGxvYygpYC4gVGhlIGNvcmUgb2YgdGhlIGNoYW5nZSBpcyByZW1vdmluZyBhIGNoZWNrIGZvciBgX19HRlBfVEhJU05PREVgLiBSaWdodCwgc28gdGhpcyBmdW5jdGlvbiBpcyBhbGwgYWJvdXQgZmlndXJpbmcgb3V0IHRoZSBPT00gY29uc3RyYWludCDigJMgd2hldGhlciBpdCYjMzk7cyBsaW1pdGVkIGJ5IENQVSBzZXQsIG1lbW9yeSBwb2xpY3ksIG9yIG1lbWNnLiBSZW1vdmluZyB0aGF0IGNoZWNrIGVzc2VudGlhbGx5IGFsdGVycyBob3cgdGhlIE9PTSBraWxsZXIgZGVjaWRlcyB3aGljaCBhbGxvY2F0aW9ucyBhcmUgY29uc2lkZXJlZCBjb25zdHJhaW5lZC4KCk15IGltbWVkaWF0ZSBhc3Nlc3NtZW50IGlzIHRoaXM6IGl0IGRvZXNuJiMzOTt0IGFwcGVhciB0byBiZSBhIEtNU0FOIChLZXJuZWwgTWVtb3J5IFNhbml0aXplcikgaXNzdWUuIFRoZXJlJiMzOTtzIG5vIG9idmlvdXMgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSBoZXJlLiBUaGlzIGlzbiYjMzk7dCBhYm91dCBleHBvc2luZyBrZXJuZWwgaW50ZXJuYWxzIHRvIHVzZXJzcGFjZSwgYW5kIHRoZXJlIGFyZSBubyBuZXcgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMgaW50cm9kdWNlZC4gVGhpcyBjaGFuZ2UgaXMgcHVyZWx5IGFib3V0IHRoZSBPT00ga2lsbGVyJiMzOTtzIGRlY2lzaW9uLW1ha2luZyBwcm9jZXNzIGNvbmNlcm5pbmcgbWVtb3J5IGFsbG9jYXRpb24gY29uc3RyYWludHMuCgpPZiBjb3Vyc2UsIGFueSBjaGFuZ2UgdG8gbWVtb3J5IG1hbmFnZW1lbnQgaGFzIHRvIGJlIGV4YW1pbmVkIGNhcmVmdWxseS4gQWx0aG91Z2ggS01TQU4gaXNuJiMzOTt0IHJlbGV2YW50IGluIHRoaXMgc3BlY2lmaWMgY2FzZSwgaXQmIzM5O3Mgd29ydGggYnJpZWZseSBjb25zaWRlcmluZyBLQVNBTi9MT0NLREVQIGV0Yy4gdG8gc2VlIGlmIHRoaXMgdHdlYWsgY291bGQgKmluZGlyZWN0bHkqIHRyaWdnZXIgbWVtb3J5IGNvcnJ1cHRpb24gb3IgZGVhZGxvY2tzLiBJJiMzOTtsbCBxdWlja2x5IGdsYW5jZSBhdCB0aGUgc3Vycm91bmRpbmcgY29kZSBqdXN0IHRvIGJlIGNlcnRhaW4uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEzIDExOjA3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bW0vb29tX2tpbGwuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDI1MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA1MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgMjUwOlx0e1xuIDI1MTpcdFx0c3RydWN0IHpvbmUgKnpvbmU7XG4gMjUyOlx0XHRzdHJ1Y3Qgem9uZXJlZiAqejtcbiAyNTM6XHRcdGVudW0gem9uZV90eXBlIGhpZ2hlc3Rfem9uZWlkeCA9IGdmcF96b25lKG9jLVx1MDAzZWdmcF9tYXNrKTtcbiAyNTQ6XHRcdGJvb2wgY3B1c2V0X2xpbWl0ZWQgPSBmYWxzZTtcbiAyNTU6XHRcdGludCBuaWQ7XG4gMjU2Olx0XG4gMjU3Olx0XHRpZiAoaXNfbWVtY2dfb29tKG9jKSkge1xuIDI1ODpcdFx0XHRvYy1cdTAwM2V0b3RhbHBhZ2VzID0gbWVtX2Nncm91cF9nZXRfbWF4KG9jLVx1MDAzZW1lbWNnKSA/OiAxO1xuIDI1OTpcdFx0XHRyZXR1cm4gQ09OU1RSQUlOVF9NRU1DRztcbiAyNjA6XHRcdH1cbiAyNjE6XHRcbiAyNjI6XHRcdC8qIERlZmF1bHQgdG8gYWxsIGF2YWlsYWJsZSBtZW1vcnkgKi9cbiAyNjM6XHRcdG9jLVx1MDAzZXRvdGFscGFnZXMgPSB0b3RhbHJhbV9wYWdlcygpICYjNDM7IHRvdGFsX3N3YXBfcGFnZXM7XG4gMjY0Olx0XG4gMjY1Olx0XHRpZiAoIUlTX0VOQUJMRUQoQ09ORklHX05VTUEpKVxuIDI2NjpcdFx0XHRyZXR1cm4gQ09OU1RSQUlOVF9OT05FO1xuIDI2NzpcdFxuIDI2ODpcdFx0aWYgKCFvYy1cdTAwM2V6b25lbGlzdClcbiAyNjk6XHRcdFx0cmV0dXJuIENPTlNUUkFJTlRfTk9ORTtcbiAyNzA6XHRcbiAyNzE6XHRcdC8qXG4gMjcyOlx0XHQgKiBBIHRydW5jYXRlZCBub2RlbWFzayBpbiB0aGUgcGFnZSBhbGxvY2F0b3IgbWVhbnMgYSBtZW1wb2xpY3lcbiAyNzM6XHRcdCAqIGlzIGluIGVmZmVjdC4gIENwdXNldCBwb2xpY3kgaXMgZW5mb3JjZWQgaW5cbiAyNzQ6XHRcdCAqIGdldF9wYWdlX2Zyb21fZnJlZWxpc3QoKS5cbiAyNzU6XHRcdCAqL1xuIDI3NjpcdFx0aWYgKG9jLVx1MDAzZW5vZGVtYXNrIFx1MDAyNlx1MDAyNlxuIDI3NzpcdFx0ICAgICFub2Rlc19zdWJzZXQobm9kZV9zdGF0ZXNbTl9NRU1PUlldLCAqb2MtXHUwMDNlbm9kZW1hc2spKSB7XG4gMjc4Olx0XHRcdG9jLVx1MDAzZXRvdGFscGFnZXMgPSB0b3RhbF9zd2FwX3BhZ2VzO1xuIDI3OTpcdFx0XHRmb3JfZWFjaF9ub2RlX21hc2sobmlkLCAqb2MtXHUwMDNlbm9kZW1hc2spXG4gMjgwOlx0XHRcdFx0b2MtXHUwMDNldG90YWxwYWdlcyAmIzQzOz0gbm9kZV9wcmVzZW50X3BhZ2VzKG5pZCk7XG4gMjgxOlx0XHRcdHJldHVybiBDT05TVFJBSU5UX01FTU9SWV9QT0xJQ1k7XG4gMjgyOlx0XHR9XG4gMjgzOlx0XG4gMjg0Olx0XHQvKiBDaGVjayB0aGlzIGFsbG9jYXRpb24gZmFpbHVyZSBpcyBjYXVzZWQgYnkgY3B1c2V0JiMzOTtzIHdhbGwgZnVuY3Rpb24gKi9cbiAyODU6XHRcdGZvcl9lYWNoX3pvbmVfem9uZWxpc3Rfbm9kZW1hc2soem9uZSwgeiwgb2MtXHUwMDNlem9uZWxpc3QsXG4gMjg2Olx0XHRcdFx0aGlnaGVzdF96b25laWR4LCBvYy1cdTAwM2Vub2RlbWFzaylcbiAyODc6XHRcdFx0aWYgKCFjcHVzZXRfem9uZV9hbGxvd2VkKHpvbmUsIG9jLVx1MDAzZWdmcF9tYXNrKSlcbiAyODg6XHRcdFx0XHRjcHVzZXRfbGltaXRlZCA9IHRydWU7XG4gMjg5Olx0XG4gMjkwOlx0XHRpZiAoY3B1c2V0X2xpbWl0ZWQpIHtcbiAyOTE6XHRcdFx0b2MtXHUwMDNldG90YWxwYWdlcyA9IHRvdGFsX3N3YXBfcGFnZXM7XG4gMjkyOlx0XHRcdGZvcl9lYWNoX25vZGVfbWFzayhuaWQsIGNwdXNldF9jdXJyZW50X21lbXNfYWxsb3dlZClcbiAyOTM6XHRcdFx0XHRvYy1cdTAwM2V0b3RhbHBhZ2VzICYjNDM7PSBub2RlX3ByZXNlbnRfcGFnZXMobmlkKTtcbiAyOTQ6XHRcdFx0cmV0dXJuIENPTlNUUkFJTlRfQ1BVU0VUO1xuIDI5NTpcdFx0fVxuIDI5NjpcdFx0cmV0dXJuIENPTlNUUkFJTlRfTk9ORTtcbiAyOTc6XHR9XG4gMjk4Olx0XG4gMjk5Olx0c3RhdGljIGludCBvb21fZXZhbHVhdGVfdGFzayhzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhc2ssIHZvaWQgKmFyZylcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOS8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTMgMTE6MDc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzQ1NQoJCQkJCQkJb3V0cHV0OiAxNDkKCQkJCQkJCXRob3VnaHRzOiA0MgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBc3Nlc3NtZW50IG9mIHRoZSBQYXRjaCoqCgpPa2F5LCBzbyBJJiMzOTt2ZSBqdXN0IHJldmlld2VkIHRoaXMgcGF0Y2guIEVzc2VudGlhbGx5LCBhbGwgaXQgZG9lcyBpcyBlbGltaW5hdGUgYSBzcGVjaWZpYyBjb25kaXRpb25hbCBjaGVjayByZWxhdGVkIHRvIGBvYy0mZ3Q7Z2ZwX21hc2tgIGFuZCB0aGUgYF9fR0ZQX1RISVNOT0RFYCBmbGFnLiBNeSBhbmFseXNpcz8gVGhlcmUmIzM5O3Mgbm8gZGV0ZWN0YWJsZSB1bmluaXRpYWxpemVkIG1lbW9yeSBleHBvc3VyZSBpbnRyb2R1Y2VkIGJ5IHRoaXMgY2hhbmdlLiBUaGUgcmVtb3ZhbCBvZiB0aGlzIGNvbmRpdGlvbiBhcHBlYXJzIHN0cmFpZ2h0Zm9yd2FyZCBhbmQgaGFybWxlc3MgaW4gdGVybXMgb2YgbWVtb3J5IHNhZmV0eSwgZ2l2ZW4gdGhlIGNvbnRleHQuIFRoZXJlZm9yZSwgSSYjMzk7bSBjb25maWRlbnQgaW4gc2V0dGluZyBgTmVlZHNLTVNBTmAgdG8gZmFsc2UuIFRoaXMgbG9va3MgbGlrZSBhIGNsZWFuIGFuZCBsaWtlbHkgcGVyZm9ybWFuY2Utb3JpZW50ZWQgdHdlYWsuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjAvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEzIDExOjA3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBPT00ga2lsbGVyIGxvZ2ljIGJ5IHJlbW92aW5nIGEgY2hlY2sgZm9yIGBfX0dGUF9USElTTk9ERWAgaW4gYGNvbnN0cmFpbmVkX2FsbG9jKClgLiBUaGlzIGlzIGEgcHVyZWx5IGxvZ2ljYWwgY2hhbmdlIGFmZmVjdGluZyBPT00gY29uc3RyYWludCBldmFsdWF0aW9uIGFuZCBtZW1vcnkgYWxsb2NhdGlvbiBwb2xpY2llcy4gSXQgZG9lcyBub3QgaW50cm9kdWNlIGFueSBuZXcgZGF0YSBzdHJ1Y3R1cmVzLCBtZW1vcnkgYWxsb2NhdGlvbnMsIG9yIGRhdGEgY29waWVzIHRvIHVzZXIgc3BhY2UuIFRoZXJlIGlzIG5vIHJpc2sgb2YgZXhwb3NpbmcgdW5pbml0aWFsaXplZCBtZW1vcnkgb3IgY3JlYXRpbmcgaW5mby1sZWFrcywgc28gYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCBuZWNlc3NhcnkuIEFueSBwb3RlbnRpYWwgYnVncyByZXN1bHRpbmcgZnJvbSB0aGlzIGNoYW5nZSAoZS5nLiwgZGVhZGxvY2tzIG9yIGluY29ycmVjdCBtZW1vcnkgbWFuYWdlbWVudCkgd291bGQgYmUgY2F1Z2h0IGJ5IHN0YW5kYXJkIGRldGVjdG9ycyBsaWtlIEtBU0FOIG9yIExPQ0tERVAuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgT09NIGtpbGxlciBsb2dpYyBieSByZW1vdmluZyBhIGNoZWNrIGZvciBgX19HRlBfVEhJU05PREVgIGluIGBjb25zdHJhaW5lZF9hbGxvYygpYC4gVGhpcyBpcyBhIHB1cmVseSBsb2dpY2FsIGNoYW5nZSBhZmZlY3RpbmcgT09NIGNvbnN0cmFpbnQgZXZhbHVhdGlvbiBhbmQgbWVtb3J5IGFsbG9jYXRpb24gcG9saWNpZXMuIEl0IGRvZXMgbm90IGludHJvZHVjZSBhbnkgbmV3IGRhdGEgc3RydWN0dXJlcywgbWVtb3J5IGFsbG9jYXRpb25zLCBvciBkYXRhIGNvcGllcyB0byB1c2VyIHNwYWNlLiBUaGVyZSBpcyBubyByaXNrIG9mIGV4cG9zaW5nIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IG9yIGNyZWF0aW5nIGluZm8tbGVha3MsIHNvIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgbmVjZXNzYXJ5LiBBbnkgcG90ZW50aWFsIGJ1Z3MgcmVzdWx0aW5nIGZyb20gdGhpcyBjaGFuZ2UgKGUuZy4sIGRlYWRsb2NrcyBvciBpbmNvcnJlY3QgbWVtb3J5IG1hbmFnZW1lbnQpIHdvdWxkIGJlIGNhdWdodCBieSBzdGFuZGFyZCBkZXRlY3RvcnMgbGlrZSBLQVNBTiBvciBMT0NLREVQLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wOC0xM1QxMTowNzoyMS4xNjc3MDM5MDZaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozNDQzOTk3NzU4NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJOVU1BXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwib3V0X29mX21lbW9yeVwiXG4gIF0sXG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIE9PTSBraWxsZXIgbG9naWMgYnkgcmVtb3ZpbmcgYSBjaGVjayBmb3IgYF9fR0ZQX1RISVNOT0RFYCBpbiBgY29uc3RyYWluZWRfYWxsb2MoKWAuIFRoaXMgaXMgYSBwdXJlbHkgbG9naWNhbCBjaGFuZ2UgYWZmZWN0aW5nIE9PTSBjb25zdHJhaW50IGV2YWx1YXRpb24gYW5kIG1lbW9yeSBhbGxvY2F0aW9uIHBvbGljaWVzLiBJdCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IG5ldyBkYXRhIHN0cnVjdHVyZXMsIG1lbW9yeSBhbGxvY2F0aW9ucywgb3IgZGF0YSBjb3BpZXMgdG8gdXNlciBzcGFjZS4gVGhlcmUgaXMgbm8gcmlzayBvZiBleHBvc2luZyB1bmluaXRpYWxpemVkIG1lbW9yeSBvciBjcmVhdGluZyBpbmZvLWxlYWtzLCBzbyBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IG5lY2Vzc2FyeS4gQW55IHBvdGVudGlhbCBidWdzIHJlc3VsdGluZyBmcm9tIHRoaXMgY2hhbmdlIChlLmcuLCBkZWFkbG9ja3Mgb3IgaW5jb3JyZWN0IG1lbW9yeSBtYW5hZ2VtZW50KSB3b3VsZCBiZSBjYXVnaHQgYnkgc3RhbmRhcmQgZGV0ZWN0b3JzIGxpa2UgS0FTQU4gb3IgTE9DS0RFUC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgT09NIGtpbGxlcidzIGNvbnN0cmFpbnQgbG9naWMgYnkgcmVtb3ZpbmcgYSBjaGVjayBmb3IgX19HRlBfVEhJU05PREUgaW4gY29uc3RyYWluZWRfYWxsb2MoKS4gVGhpcyBjaGFuZ2VzIGhvdyB0aGUgT09NIGtpbGxlciBzZWxlY3RzIHRhc2tzIHRvIGtpbGwgd2hlbiBtZW1vcnkgcG9saWNpZXMgYXJlIGluIGVmZmVjdC4gVGhlIGNvZGUgaXMgcmVhY2hhYmxlIGFuZCBmdW5jdGlvbmFsbHkgYWx0ZXJzIHRoZSBleGVjdXRpb24gZmxvdyBvZiB0aGUgT09NIGtpbGxlciwgbWFraW5nIGl0IHdvcnRoIGZ1enppbmcuIFRoZSBDT05GSUdfTlVNQSBvcHRpb24gaXMgcmVxdWlyZWQgdG8gcmVhY2ggdGhpcyBjb2RlLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xM1QxMTowNzoyMS4xNjc3MDk1MjZaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ5MzI5MDM2NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IDI4ZGMyNmRjMDRkNWViYjNhYTNhODdjY2I2MzYzMjU1MzU0ZGYyZDdcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIFRodSBBdWcgMTMgMTE6MDc6MjAgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvbW0vb29tX2tpbGwuYyBiL21tL29vbV9raWxsLmNcXG5pbmRleCA1ZjM3MmY2ZTI2ZmEzLi5mZDNjNDc2ODQ2YTMwIDEwMDY0NFxcbi0tLSBhL21tL29vbV9raWxsLmNcXG4rKysgYi9tbS9vb21fa2lsbC5jXFxuQEAgLTI2NywxOCArMjY3LDExIEBAIHN0YXRpYyBlbnVtIG9vbV9jb25zdHJhaW50IGNvbnN0cmFpbmVkX2FsbG9jKHN0cnVjdCBvb21fY29udHJvbCAqb2MpXFxuIFxcbiBcXHRpZiAoIW9jLVxcdTAwM2V6b25lbGlzdClcXG4gXFx0XFx0cmV0dXJuIENPTlNUUkFJTlRfTk9ORTtcXG4tXFx0LypcXG4tXFx0ICogUmVhY2ggaGVyZSBvbmx5IHdoZW4gX19HRlBfTk9GQUlMIGlzIHVzZWQuIFNvLCB3ZSBzaG91bGQgYXZvaWRcXG4tXFx0ICogdG8ga2lsbCBjdXJyZW50LldlIGhhdmUgdG8gcmFuZG9tIHRhc2sga2lsbCBpbiB0aGlzIGNhc2UuXFxuLVxcdCAqIEhvcGVmdWxseSwgQ09OU1RSQUlOVF9USElTTk9ERS4uLmJ1dCBubyB3YXkgdG8gaGFuZGxlIGl0LCBub3cuXFxuLVxcdCAqL1xcbi1cXHRpZiAob2MtXFx1MDAzZWdmcF9tYXNrIFxcdTAwMjYgX19HRlBfVEhJU05PREUpXFxuLVxcdFxcdHJldHVybiBDT05TVFJBSU5UX05PTkU7XFxuIFxcbiBcXHQvKlxcbi1cXHQgKiBUaGlzIGlzIG5vdCBhIF9fR0ZQX1RISVNOT0RFIGFsbG9jYXRpb24sIHNvIGEgdHJ1bmNhdGVkIG5vZGVtYXNrIGluXFxuLVxcdCAqIHRoZSBwYWdlIGFsbG9jYXRvciBtZWFucyBhIG1lbXBvbGljeSBpcyBpbiBlZmZlY3QuICBDcHVzZXQgcG9saWN5XFxuLVxcdCAqIGlzIGVuZm9yY2VkIGluIGdldF9wYWdlX2Zyb21fZnJlZWxpc3QoKS5cXG4rXFx0ICogQSB0cnVuY2F0ZWQgbm9kZW1hc2sgaW4gdGhlIHBhZ2UgYWxsb2NhdG9yIG1lYW5zIGEgbWVtcG9saWN5XFxuK1xcdCAqIGlzIGluIGVmZmVjdC4gIENwdXNldCBwb2xpY3kgaXMgZW5mb3JjZWQgaW5cXG4rXFx0ICogZ2V0X3BhZ2VfZnJvbV9mcmVlbGlzdCgpLlxcbiBcXHQgKi9cXG4gXFx0aWYgKG9jLVxcdTAwM2Vub2RlbWFzayBcXHUwMDI2XFx1MDAyNlxcbiBcXHQgICAgIW5vZGVzX3N1YnNldChub2RlX3N0YXRlc1tOX01FTU9SWV0sICpvYy1cXHUwMDNlbm9kZW1hc2spKSB7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEzVDExOjA3OjIxLjY2MTYwNjcyMVoiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImJlc3QtZXhwZW5zaXZlIiwiRHVyYXRpb24iOjI0Njg1MzYyNTE5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIk5VTUFcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJvdXRfb2ZfbWVtb3J5XCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIE9PTSBraWxsZXIncyBjb25zdHJhaW50IGxvZ2ljIGJ5IHJlbW92aW5nIGEgY2hlY2sgZm9yIF9fR0ZQX1RISVNOT0RFIGluIGNvbnN0cmFpbmVkX2FsbG9jKCkuIFRoaXMgY2hhbmdlcyBob3cgdGhlIE9PTSBraWxsZXIgc2VsZWN0cyB0YXNrcyB0byBraWxsIHdoZW4gbWVtb3J5IHBvbGljaWVzIGFyZSBpbiBlZmZlY3QuIFRoZSBjb2RlIGlzIHJlYWNoYWJsZSBhbmQgZnVuY3Rpb25hbGx5IGFsdGVycyB0aGUgZXhlY3V0aW9uIGZsb3cgb2YgdGhlIE9PTSBraWxsZXIsIG1ha2luZyBpdCB3b3J0aCBmdXp6aW5nLiBUaGUgQ09ORklHX05VTUEgb3B0aW9uIGlzIHJlcXVpcmVkIHRvIHJlYWNoIHRoaXMgY29kZS5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG4tIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cbi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSlcbiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4gICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnNcbiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBBbHNvIGNoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlnc1xuICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzXG4gICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgMjhkYzI2ZGMwNGQ1ZWJiM2FhM2E4N2NjYjYzNjMyNTUzNTRkZjJkN1xuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBUaHUgQXVnIDEzIDExOjA3OjIwIDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvbW0vb29tX2tpbGwuYyBiL21tL29vbV9raWxsLmNcbmluZGV4IDVmMzcyZjZlMjZmYTMuLmZkM2M0NzY4NDZhMzAgMTAwNjQ0XG4tLS0gYS9tbS9vb21fa2lsbC5jXG4rKysgYi9tbS9vb21fa2lsbC5jXG5AQCAtMjY3LDE4ICsyNjcsMTEgQEAgc3RhdGljIGVudW0gb29tX2NvbnN0cmFpbnQgY29uc3RyYWluZWRfYWxsb2Moc3RydWN0IG9vbV9jb250cm9sICpvYylcbiBcbiBcdGlmICghb2MtXHUwMDNlem9uZWxpc3QpXG4gXHRcdHJldHVybiBDT05TVFJBSU5UX05PTkU7XG4tXHQvKlxuLVx0ICogUmVhY2ggaGVyZSBvbmx5IHdoZW4gX19HRlBfTk9GQUlMIGlzIHVzZWQuIFNvLCB3ZSBzaG91bGQgYXZvaWRcbi1cdCAqIHRvIGtpbGwgY3VycmVudC5XZSBoYXZlIHRvIHJhbmRvbSB0YXNrIGtpbGwgaW4gdGhpcyBjYXNlLlxuLVx0ICogSG9wZWZ1bGx5LCBDT05TVFJBSU5UX1RISVNOT0RFLi4uYnV0IG5vIHdheSB0byBoYW5kbGUgaXQsIG5vdy5cbi1cdCAqL1xuLVx0aWYgKG9jLVx1MDAzZWdmcF9tYXNrIFx1MDAyNiBfX0dGUF9USElTTk9ERSlcbi1cdFx0cmV0dXJuIENPTlNUUkFJTlRfTk9ORTtcbiBcbiBcdC8qXG4tXHQgKiBUaGlzIGlzIG5vdCBhIF9fR0ZQX1RISVNOT0RFIGFsbG9jYXRpb24sIHNvIGEgdHJ1bmNhdGVkIG5vZGVtYXNrIGluXG4tXHQgKiB0aGUgcGFnZSBhbGxvY2F0b3IgbWVhbnMgYSBtZW1wb2xpY3kgaXMgaW4gZWZmZWN0LiAgQ3B1c2V0IHBvbGljeVxuLVx0ICogaXMgZW5mb3JjZWQgaW4gZ2V0X3BhZ2VfZnJvbV9mcmVlbGlzdCgpLlxuK1x0ICogQSB0cnVuY2F0ZWQgbm9kZW1hc2sgaW4gdGhlIHBhZ2UgYWxsb2NhdG9yIG1lYW5zIGEgbWVtcG9saWN5XG4rXHQgKiBpcyBpbiBlZmZlY3QuICBDcHVzZXQgcG9saWN5IGlzIGVuZm9yY2VkIGluXG4rXHQgKiBnZXRfcGFnZV9mcm9tX2ZyZWVsaXN0KCkuXG4gXHQgKi9cbiBcdGlmIChvYy1cdTAwM2Vub2RlbWFzayBcdTAwMjZcdTAwMjZcbiBcdCAgICAhbm9kZXNfc3Vic2V0KG5vZGVfc3RhdGVzW05fTUVNT1JZXSwgKm9jLVx1MDAzZW5vZGVtYXNrKSkge1xuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTNUMTE6MDc6MjEuNjYxNjA3OTQxWiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTE1MTI2NDQwNSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIE9PTSBLaWxsZXIgUGF0Y2gqKlxuXG5Pa2F5LCBzbyB0aGlzIHBhdGNoIGlzIHRvdWNoaW5nIGBtbS9vb21fa2lsbC5jYCwgc3BlY2lmaWNhbGx5IGBjb25zdHJhaW5lZF9hbGxvYygpYC4gVGhlIGNvcmUgb2YgdGhlIGNoYW5nZSBzZWVtcyB0byBiZSByZW1vdmluZyBhIGNoZWNrIGZvciBgX19HRlBfVEhJU05PREVgLiBIbW0sIGxldCdzIHNlZSwgdGhlIG9yaWdpbmFsIGNvZGUgaGFkIHRoaXM6XG5cbmBgYGNcblx0aWYgKG9jLVx1MDAzZWdmcF9tYXNrIFx1MDAyNiBfX0dGUF9USElTTk9ERSlcblx0XHRyZXR1cm4gQ09OU1RSQUlOVF9OT05FO1xuYGBgXG5cblRoaXMgKnJlbW92ZXMqIHRoaXMsIG1lYW5pbmcgaXQncyBhbHRlcmluZyB0aGUgYmVoYXZpb3Igb2YgdGhlIE9PTSBraWxsZXIgd2hlbiBgX19HRlBfVEhJU05PREVgIGlzIGluIHBsYXkuIFRoZSBjb21tZW50IGluIHRoZSBvcmlnaW5hbCBjb2RlIGlzIHByZXR0eSBlbmxpZ2h0ZW5pbmcsIGl0IHNheXMgdGhpcyBzZWN0aW9uIGlzIHJlYWNoZWQgb25seSB3aGVuIGBfX0dGUF9OT0ZBSUxgIGlzIHVzZWQuIFRoZSBjb21tZW50IHN0YXRlcyB0aGF0IGtpbGxpbmcgdGhlIGN1cnJlbnQgdGFzayBpcyB0byBiZSBhdm9pZGVkIGFuZCB0aGUgY29kZSByYW5kb21seSBraWxscyBhbm90aGVyIHRhc2suIFRoYXQgZG9lc24ndCBzZWVtIG9wdGltYWwgYnV0IGl0IGlzIHRoZSBjb2RlIHRoYXQgaXMgYmVpbmcgcmVtb3ZlZC4gSSBoYXZlIHRvIHRoaW5rIGFib3V0IHdoYXQgdGhpcyBtZWFucyBpbiB0ZXJtcyBvZiBjb25zdHJhaW50IGxvZ2ljLiBJIHNob3VsZCBwcm9iYWJseSByZS1leGFtaW5lIGhvdyBgY29uc3RyYWluZWRfYWxsb2NgIGlzIHVzZWQgd2l0aGluIGBtbS9vb21fa2lsbC5jYCB0byBmdWxseSBncmFzcCB0aGUgcmFtaWZpY2F0aW9ucyBvZiB0aGlzIGNoYW5nZS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2h5IHRoaXMgY2hlY2sgd2FzIHRoZXJlIGluIHRoZSBmaXJzdCBwbGFjZSwgYW5kIHdoYXQgdGhlIGltcGxpY2F0aW9ucyBvZiBpdHMgcmVtb3ZhbCBhcmUgZm9yIHRoZSB2YXJpb3VzIGFsbG9jYXRpb24gc2NlbmFyaW9zLCBlc3BlY2lhbGx5IHRob3NlIHRoYXQgaW52b2x2ZSBgX19HRlBfTk9GQUlMYC4gXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIxNTIsIk91dHB1dFRva2VucyI6MzAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMDAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xM1QxMTowNzoyNi44MTI4NzQyMzdaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTkwMzY3MjgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uc3RyYWluZWRfYWxsb2NcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vb29tX2tpbGwuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9vb21fa2lsbC5jPTIzOT1zdGF0aWMgY29uc3QgY2hhciAqIGNvbnN0IG9vbV9jb25zdHJhaW50X3RleHRbXSA9IHtcXG4tLVxcbm1tL29vbV9raWxsLmMtMjQ4LSAqL1xcbm1tL29vbV9raWxsLmM6MjQ5OnN0YXRpYyBlbnVtIG9vbV9jb25zdHJhaW50IGNvbnN0cmFpbmVkX2FsbG9jKHN0cnVjdCBvb21fY29udHJvbCAqb2MpXFxubW0vb29tX2tpbGwuYy0yNTAte1xcbi0tXFxubW0vb29tX2tpbGwuYz0xMDk2PWJvb2wgb3V0X29mX21lbW9yeShzdHJ1Y3Qgb29tX2NvbnRyb2wgKm9jKVxcbi0tXFxubW0vb29tX2tpbGwuYy0xMTMyLVxcdCAqL1xcbm1tL29vbV9raWxsLmM6MTEzMzpcXHRvYy1cXHUwMDNlY29uc3RyYWludCA9IGNvbnN0cmFpbmVkX2FsbG9jKG9jKTtcXG5tbS9vb21fa2lsbC5jLTExMzQtXFx0aWYgKG9jLVxcdTAwM2Vjb25zdHJhaW50ICE9IENPTlNUUkFJTlRfTUVNT1JZX1BPTElDWSlcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTNUMTE6MDc6MjYuODcxOTE0NjQ1WiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Mzc1NDAzODUyNywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipLZXJuZWwgTWVtb3J5IEFsbG9jYXRpb24gUGF0Y2ggQW5hbHlzaXMqKlxuXG5Pa2F5LCBzbyB0aGlzIHBhdGNoIGlzIHRvdWNoaW5nIGBjb25zdHJhaW5lZF9hbGxvY2AuIEFuZCBJIGtub3cgdGhhdCBmdW5jdGlvbiBpcyBjYWxsZWQgYnkgYG91dF9vZl9tZW1vcnlgIOKAkyB0aGF0J3MgdGhlIE9PTSBraWxsZXIhIFRoaXMgaXMgcHJldHR5IHNlcmlvdXMgc3R1ZmY7IHdlJ3JlIHRhbGtpbmcgYWJvdXQgY29yZSBrZXJuZWwgbWVtb3J5IG1hbmFnZW1lbnQsIHRoZSBzb3J0IG9mIGNvZGUgdGhhdCdzIHJpcGUgZm9yIGV4cGxvaXRhdGlvbiBpZiB0aGVyZSdzIGV2ZW4gYSBzdWJ0bGUgYnVnLiBNeSBmaXJzdCBpbnN0aW5jdCBpcywgZGVmaW5pdGVseSwgZnV6eiB0aGlzLlxuXG5Ob3csIG15IGZvY3VzIGlzIGdvaW5nIHRvIGJlIG9uIGBjb25zdHJhaW5lZF9hbGxvY2AgYW5kIGBvdXRfb2ZfbWVtb3J5YC4gV2FpdCBhIHNlY29uZOKApiBpc24ndCBgY29uc3RyYWluZWRfYWxsb2NgIGRlY2xhcmVkIHN0YXRpYz8gVGhhdCBjb3VsZCBjb21wbGljYXRlIHRoaW5ncyBhIGJpdC4gSXQgaXMsIGFuZCBgb3V0X29mX21lbW9yeWAgaXMgbm90LiBUaGlzIG1lYW5zIEkgbmVlZCB0byBkb3VibGUtY2hlY2sgd2hldGhlciBgb3V0X29mX21lbW9yeWAgaXMgZXhwb3J0ZWQgb3IgZ2xvYmFsLiBHb3R0YSBzZWUgaWYgdGhlcmUncyBhbnkgd2F5IHRvIGRpcmVjdGx5IGNhbGwgaXQsIGlmIEkgd2FudCB0byBoYXZlIGEgbG9vay1pbiBmcm9tIHVzZXItc3BhY2UuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI4NTksIk91dHB1dFRva2VucyI6MzMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo5NSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xM1QxMTowNzozMC42MjU5NTYzMTJaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDkyMDAyOTksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiYm9vbCBvdXRfb2ZfbWVtb3J5XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL29vbV9raWxsLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vb29tX2tpbGwuYz0xMDg1PUVYUE9SVF9TWU1CT0xfR1BMKHVucmVnaXN0ZXJfb29tX25vdGlmaWVyKTtcXG4tLVxcbm1tL29vbV9raWxsLmMtMTA5NS0gKi9cXG5tbS9vb21fa2lsbC5jOjEwOTY6Ym9vbCBvdXRfb2ZfbWVtb3J5KHN0cnVjdCBvb21fY29udHJvbCAqb2MpXFxubW0vb29tX2tpbGwuYy0xMDk3LXtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTNUMTE6MDc6MzAuNjc1MTYxODUxWiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzM5OTcwOTkzOCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIE9PTSBTaXR1YXRpb24qKlxuXG5Pa2F5LCBzbyBJJ20gZGVhbGluZyB3aXRoIGFuIGBvdXRfb2ZfbWVtb3J5YCBzY2VuYXJpbyBoZXJlLiBUaGUga2V5IGlzIHRoYXQgYG91dF9vZl9tZW1vcnlgIGlzIGEgZ2xvYmFsIGZ1bmN0aW9uLCB3aGljaCBnaXZlcyB1cyBhIGNlcnRhaW4gbGV2ZWwgb2YgY29udHJvbCwgYnV0IHdlIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgc3BlY2lmaWNzLiBNeSBmaXJzdCB0aG91Z2h0IGlzIHRvIGRpZyBpbnRvIHRoZSBjb25maWd1cmF0aW9uIOKAkyBhcmUgdGhlcmUgYW55IGN1c3RvbSBjb25maWd1cmF0aW9ucyB0aGF0IG1pZ2h0IGJlIGluZmx1ZW5jaW5nIHRoaXMgYmVoYXZpb3I/IFRoZSBPT00ga2lsbGVyIGlzLCBhcyBleHBlY3RlZCwgYSBidWlsdC1pbiBmdW5jdGlvbiBvZiB0aGUgY29yZSBzeXN0ZW0uIE5vdywgdGhlIHByZXZpb3VzIGNvZGUgaGFkIHNvbWUgY2hlY2tzIHJlbGF0ZWQgdG8gYF9fR0ZQX1RISVNOT0RFYCBhbmQgYG9jLVx1MDAzZW5vZGVtYXNrYC4gS25vd2luZyB0aGlzIGlzIGNyaXRpY2FsLCBiZWNhdXNlIHRoaXMgbGlrZWx5IHBvaW50cyB0b3dhcmRzIE5VTUEgY29uZmlndXJhdGlvbnMgb3IgbWVtcG9saWN5IHNldHRpbmdzLiBJIGhhdmUgdG8gc2VlIGlmIHRoZXJlIGFyZSBzcGVjaWZpYyBjb25maWd1cmF0aW9ucyByZWxhdGVkIHRvIHRob3NlIGFyZWFzIHRoYXQgd2UgbmVlZCB0byBleGFtaW5lIGZ1cnRoZXIuIFRoaXMgaXMgd2hlcmUgdGhlIHJvb3Qgb2YgdGhlIHByb2JsZW0gbWlnaHQgbGllLlxuXG5cbiIsIklucHV0VG9rZW5zIjozMjgzLCJPdXRwdXRUb2tlbnMiOjMxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NzQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTNUMTE6MDc6MzQuMDc0ODczOTU5WiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjU1MjEyMTc4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIkNPTkZJR19OVU1BXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL29vbV9raWxsLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vb29tX2tpbGwuYz03Mj1zdGF0aWMgaW5saW5lIGJvb2wgaXNfbWVtY2dfb29tKHN0cnVjdCBvb21fY29udHJvbCAqb2MpXFxuLS1cXG5tbS9vb21fa2lsbC5jLTc2LVxcbm1tL29vbV9raWxsLmM6Nzc6I2lmZGVmIENPTkZJR19OVU1BXFxubW0vb29tX2tpbGwuYy03OC0vKipcXG4tLVxcbm1tL29vbV9raWxsLmM9MTIyPXN0YXRpYyBib29sIG9vbV9jcHVzZXRfZWxpZ2libGUoc3RydWN0IHRhc2tfc3RydWN0ICp0c2ssIHN0cnVjdCBvb21fY29udHJvbCAqb2MpXFxuLS1cXG5tbS9vb21fa2lsbC5jLTEyNS19XFxubW0vb29tX2tpbGwuYzoxMjY6I2VuZGlmIC8qIENPTkZJR19OVU1BICovXFxubW0vb29tX2tpbGwuYy0xMjctXFxuLS1cXG5tbS9vb21fa2lsbC5jPTI0OT1zdGF0aWMgZW51bSBvb21fY29uc3RyYWludCBjb25zdHJhaW5lZF9hbGxvYyhzdHJ1Y3Qgb29tX2NvbnRyb2wgKm9jKVxcbi0tXFxubW0vb29tX2tpbGwuYy0yNjQtXFxubW0vb29tX2tpbGwuYzoyNjU6XFx0aWYgKCFJU19FTkFCTEVEKENPTkZJR19OVU1BKSlcXG5tbS9vb21fa2lsbC5jLTI2Ni1cXHRcXHRyZXR1cm4gQ09OU1RSQUlOVF9OT05FO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xM1QxMTowNzozNC4xMzAwOTAzNzdaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMjQwNzY3NjMzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIGFzc3VtaW5nIEknbSBkZWVwIGluIHRoZSB3ZWVkcyBvZiBrZXJuZWwgbWVtb3J5IG1hbmFnZW1lbnQ6XG5cbioqRGlnZ2luZyBpbnRvIGBjb25zdHJhaW5lZF9hbGxvY2AqKlxuXG5SaWdodCwgcmlnaHQsIHRoYXQncyBpdCEgSSByZW1lbWJlciBub3csIGBjb25zdHJhaW5lZF9hbGxvY2AgaW1tZWRpYXRlbHkgY2hlY2tzIGZvciBgQ09ORklHX05VTUFgIGJlZm9yZSBkb2luZyBhbnl0aGluZyBpbnRlcmVzdGluZy4gU3BlY2lmaWNhbGx5LCBpdCBoYXMgYW4gYGlmICghSVNfRU5BQkxFRChDT05GSUdfTlVNQSkpIHJldHVybiBDT05TVFJBSU5UX05PTkU7YCBjaGVjayByaWdodCBiZWZvcmUgdGhlIHN0dWZmIEkgd2FzIGxvb2tpbmcgYXQhIFRoYXQncyBhIGtleSBkZXRhaWwgSSBhbG1vc3QgbWlzc2VkLiBPa2F5LCBsZXQncyByZWZyZXNoIG15IG1lbW9yeSBvbiB0aGUgd2hvbGUgZnVuY3Rpb24uIFRpbWUgdG8gZGl2ZSBpbnRvIHRoZSBjb2RlIGZvciBgY29uc3RyYWluZWRfYWxsb2NgIGFuZCBzZWUgd2hhdCdzIHdoYXQuIEdvdHRhIHVuZGVyc3RhbmQgdGhpcyBmdWxseSBiZWZvcmUgSSBjYW4gcHJvY2VlZC5cblxuXG4iLCJJbnB1dFRva2VucyI6MzgzMCwiT3V0cHV0VG9rZW5zIjozNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEzVDExOjA3OjM3LjM3MDg2MTI4WiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjExNzk4MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJtbS9vb21fa2lsbC5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDI0OSxcbiAgXCJMaW5lQ291bnRcIjogNTBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDI0OTpcXHRzdGF0aWMgZW51bSBvb21fY29uc3RyYWludCBjb25zdHJhaW5lZF9hbGxvYyhzdHJ1Y3Qgb29tX2NvbnRyb2wgKm9jKVxcbiAyNTA6XFx0e1xcbiAyNTE6XFx0XFx0c3RydWN0IHpvbmUgKnpvbmU7XFxuIDI1MjpcXHRcXHRzdHJ1Y3Qgem9uZXJlZiAqejtcXG4gMjUzOlxcdFxcdGVudW0gem9uZV90eXBlIGhpZ2hlc3Rfem9uZWlkeCA9IGdmcF96b25lKG9jLVxcdTAwM2VnZnBfbWFzayk7XFxuIDI1NDpcXHRcXHRib29sIGNwdXNldF9saW1pdGVkID0gZmFsc2U7XFxuIDI1NTpcXHRcXHRpbnQgbmlkO1xcbiAyNTY6XFx0XFxuIDI1NzpcXHRcXHRpZiAoaXNfbWVtY2dfb29tKG9jKSkge1xcbiAyNTg6XFx0XFx0XFx0b2MtXFx1MDAzZXRvdGFscGFnZXMgPSBtZW1fY2dyb3VwX2dldF9tYXgob2MtXFx1MDAzZW1lbWNnKSA/OiAxO1xcbiAyNTk6XFx0XFx0XFx0cmV0dXJuIENPTlNUUkFJTlRfTUVNQ0c7XFxuIDI2MDpcXHRcXHR9XFxuIDI2MTpcXHRcXG4gMjYyOlxcdFxcdC8qIERlZmF1bHQgdG8gYWxsIGF2YWlsYWJsZSBtZW1vcnkgKi9cXG4gMjYzOlxcdFxcdG9jLVxcdTAwM2V0b3RhbHBhZ2VzID0gdG90YWxyYW1fcGFnZXMoKSArIHRvdGFsX3N3YXBfcGFnZXM7XFxuIDI2NDpcXHRcXG4gMjY1OlxcdFxcdGlmICghSVNfRU5BQkxFRChDT05GSUdfTlVNQSkpXFxuIDI2NjpcXHRcXHRcXHRyZXR1cm4gQ09OU1RSQUlOVF9OT05FO1xcbiAyNjc6XFx0XFxuIDI2ODpcXHRcXHRpZiAoIW9jLVxcdTAwM2V6b25lbGlzdClcXG4gMjY5OlxcdFxcdFxcdHJldHVybiBDT05TVFJBSU5UX05PTkU7XFxuIDI3MDpcXHRcXG4gMjcxOlxcdFxcdC8qXFxuIDI3MjpcXHRcXHQgKiBBIHRydW5jYXRlZCBub2RlbWFzayBpbiB0aGUgcGFnZSBhbGxvY2F0b3IgbWVhbnMgYSBtZW1wb2xpY3lcXG4gMjczOlxcdFxcdCAqIGlzIGluIGVmZmVjdC4gIENwdXNldCBwb2xpY3kgaXMgZW5mb3JjZWQgaW5cXG4gMjc0OlxcdFxcdCAqIGdldF9wYWdlX2Zyb21fZnJlZWxpc3QoKS5cXG4gMjc1OlxcdFxcdCAqL1xcbiAyNzY6XFx0XFx0aWYgKG9jLVxcdTAwM2Vub2RlbWFzayBcXHUwMDI2XFx1MDAyNlxcbiAyNzc6XFx0XFx0ICAgICFub2Rlc19zdWJzZXQobm9kZV9zdGF0ZXNbTl9NRU1PUlldLCAqb2MtXFx1MDAzZW5vZGVtYXNrKSkge1xcbiAyNzg6XFx0XFx0XFx0b2MtXFx1MDAzZXRvdGFscGFnZXMgPSB0b3RhbF9zd2FwX3BhZ2VzO1xcbiAyNzk6XFx0XFx0XFx0Zm9yX2VhY2hfbm9kZV9tYXNrKG5pZCwgKm9jLVxcdTAwM2Vub2RlbWFzaylcXG4gMjgwOlxcdFxcdFxcdFxcdG9jLVxcdTAwM2V0b3RhbHBhZ2VzICs9IG5vZGVfcHJlc2VudF9wYWdlcyhuaWQpO1xcbiAyODE6XFx0XFx0XFx0cmV0dXJuIENPTlNUUkFJTlRfTUVNT1JZX1BPTElDWTtcXG4gMjgyOlxcdFxcdH1cXG4gMjgzOlxcdFxcbiAyODQ6XFx0XFx0LyogQ2hlY2sgdGhpcyBhbGxvY2F0aW9uIGZhaWx1cmUgaXMgY2F1c2VkIGJ5IGNwdXNldCdzIHdhbGwgZnVuY3Rpb24gKi9cXG4gMjg1OlxcdFxcdGZvcl9lYWNoX3pvbmVfem9uZWxpc3Rfbm9kZW1hc2soem9uZSwgeiwgb2MtXFx1MDAzZXpvbmVsaXN0LFxcbiAyODY6XFx0XFx0XFx0XFx0aGlnaGVzdF96b25laWR4LCBvYy1cXHUwMDNlbm9kZW1hc2spXFxuIDI4NzpcXHRcXHRcXHRpZiAoIWNwdXNldF96b25lX2FsbG93ZWQoem9uZSwgb2MtXFx1MDAzZWdmcF9tYXNrKSlcXG4gMjg4OlxcdFxcdFxcdFxcdGNwdXNldF9saW1pdGVkID0gdHJ1ZTtcXG4gMjg5OlxcdFxcbiAyOTA6XFx0XFx0aWYgKGNwdXNldF9saW1pdGVkKSB7XFxuIDI5MTpcXHRcXHRcXHRvYy1cXHUwMDNldG90YWxwYWdlcyA9IHRvdGFsX3N3YXBfcGFnZXM7XFxuIDI5MjpcXHRcXHRcXHRmb3JfZWFjaF9ub2RlX21hc2sobmlkLCBjcHVzZXRfY3VycmVudF9tZW1zX2FsbG93ZWQpXFxuIDI5MzpcXHRcXHRcXHRcXHRvYy1cXHUwMDNldG90YWxwYWdlcyArPSBub2RlX3ByZXNlbnRfcGFnZXMobmlkKTtcXG4gMjk0OlxcdFxcdFxcdHJldHVybiBDT05TVFJBSU5UX0NQVVNFVDtcXG4gMjk1OlxcdFxcdH1cXG4gMjk2OlxcdFxcdHJldHVybiBDT05TVFJBSU5UX05PTkU7XFxuIDI5NzpcXHR9XFxuIDI5ODpcXHRcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTNUMTE6MDc6MzcuMzcwOTgxMzZaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDU4ODk5NjA5MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBc3Nlc3NtZW50IG9mIHRoZSBPT00gS2lsbGVyIENoYW5nZSoqXG5cbk9rYXksIHNvIHRoaXMgY29kZSBwYXRoIEknbSBsb29raW5nIGF0LCB0aGUgb25lIHRoZSBwYXRjaCBtb2RpZmllcywgaXMgb25seSBoaXQgaWYgYENPTkZJR19OVU1BYCBpcyBlbmFibGVkLiBUaGF0J3MgZ29vZCB0byBrbm93LCBuYXJyb3dzIGRvd24gdGhlIHBvdGVudGlhbCBpbXBhY3QuIFRoZSByZWFsIG1lYXQgb2YgdGhpcyBpcyB0aGF0IHRoZSBwYXRjaCByZW1vdmVzIHRoZSBgX19HRlBfVEhJU05PREVgIGNoZWNrIHdpdGhpbiB0aGUgT09NIGtpbGxlciBsb2dpYy4gRnVuY3Rpb25hbGx5LCB0aGlzIGlzIGEgY2hhbmdlIGluIHRoZSBPT00ga2lsbGVyJ3MgYmVoYXZpb3IsIGFuZCB0aGF0LCBteSBmcmllbmQsIGltbWVkaWF0ZWx5IGZsYWdzIHRoaXMgYXMgc29tZXRoaW5nIHRvIG1ldGljdWxvdXNseSB0ZXN0LiBHaXZlbiB0aGF0LCBJJ2Qgc2F5IGZ1enppbmcgaXMgYWJzb2x1dGVseSB3YXJyYW50ZWQgaGVyZS5cblxuTGV0J3MgZm9jdXMgdGhlIGZ1enppbmcgZWZmb3J0cy4gVGhlIHByaW1hcnkgc3ltYm9sIHRvIHRhcmdldCBpcyBkZWZpbml0ZWx5IGBvdXRfb2ZfbWVtb3J5YC4gVGhhdCdzIHRoZSBlbnRyeSBwb2ludCwgdGhlIGNyaXRpY2FsIGZ1bmN0aW9uIGhlcmUuIEknbGwgbmVlZCB0byBlbmFibGUgYE5VTUFgIGluIG15IGZ1enppbmcgc2V0dXAgdG8gZXhlcmNpc2UgdGhpcyBjb2RlLlxuXG5KdXN0IHRvIGJlIGFic29sdXRlbHkgY2VydGFpbiwgbGV0IG1lIHF1aWNrbHkgZG91YmxlLWNoZWNrIHRoYXQgYENPTkZJR19OVU1BYCBpcyB0aGUgKm9ubHkqIHJlcXVpcmVkIGNvbmZpZy4gWXVwLCBsb29rcyBsaWtlIGl0J3MgdGhlIG1haW4gb25lLCBhcyBleHBlY3RlZC4gTm93LCB0aGlua2luZyBhYm91dCB0aGUgT09NIGtpbGxlcidzIGVudHJ5IHBvaW50c+KApiBpcyBgb3V0X29mX21lbW9yeWAgdGhlICpvbmx5KiBvbmU/IEhtbSwgd2hhdCBhYm91dCBgcGFnZWZhdWx0X291dF9vZl9tZW1vcnlgPyBOZWVkIHRvIGNvbnNpZGVyIHRoYXQgb25lIHRvby4gSSdsbCBuZWVkIHRvIGtlZXAgdGhhdCBpbiBtaW5kIHdoZW4gc2NvcGluZyB0aGUgZnV6emluZyB0YXJnZXRzIGFuZCBhbnkgYXNzb2NpYXRlZCBhbmFseXNpcy5cblxuXG4iLCJJbnB1dFRva2VucyI6NDgzNSwiT3V0cHV0VG9rZW5zIjozMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEzMywiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEzVDExOjA3OjQxLjk1OTk4MDM1MloiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTE4Mjg3ODgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwib3V0X29mX21lbW9yeVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9vb21fa2lsbC5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL29vbV9raWxsLmM9NTg9c3RhdGljIGludCBzeXNjdGxfb29tX2R1bXBfdGFza3MgPSAxO1xcbi0tXFxubW0vb29tX2tpbGwuYy02MC0vKlxcbm1tL29vbV9raWxsLmM6NjE6ICogU2VyaWFsaXplcyBvb20ga2lsbGVyIGludm9jYXRpb25zIChvdXRfb2ZfbWVtb3J5KCkpIGZyb20gYWxsIGNvbnRleHRzIHRvXFxubW0vb29tX2tpbGwuYy02Mi0gKiBwcmV2ZW50IGZyb20gb3ZlciBlYWdlciBvb20ga2lsbGluZyAoZS5nLiB3aGVuIHRoZSBvb20ga2lsbGVyIGlzIGludm9rZWRcXG4tLVxcbm1tL29vbV9raWxsLmM9MTA4NT1FWFBPUlRfU1lNQk9MX0dQTCh1bnJlZ2lzdGVyX29vbV9ub3RpZmllcik7XFxuLS1cXG5tbS9vb21fa2lsbC5jLTEwODctLyoqXFxubW0vb29tX2tpbGwuYzoxMDg4OiAqIG91dF9vZl9tZW1vcnkgLSBraWxsIHRoZSBcXFwiYmVzdFxcXCIgcHJvY2VzcyB3aGVuIHdlIHJ1biBvdXQgb2YgbWVtb3J5XFxubW0vb29tX2tpbGwuYy0xMDg5LSAqIEBvYzogcG9pbnRlciB0byBzdHJ1Y3Qgb29tX2NvbnRyb2xcXG4tLVxcbm1tL29vbV9raWxsLmMtMTA5NS0gKi9cXG5tbS9vb21fa2lsbC5jOjEwOTY6Ym9vbCBvdXRfb2ZfbWVtb3J5KHN0cnVjdCBvb21fY29udHJvbCAqb2MpXFxubW0vb29tX2tpbGwuYy0xMDk3LXtcXG4tLVxcbm1tL29vbV9raWxsLmMtMTE3Mi0gKi9cXG5tbS9vb21fa2lsbC5jOjExNzM6dm9pZCBwYWdlZmF1bHRfb3V0X29mX21lbW9yeSh2b2lkKVxcbm1tL29vbV9raWxsLmMtMTE3NC17XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEzVDExOjA3OjQyLjAxMTgyNjkwMVoiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0MjU2NzA2OTcyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IE9PTSBLaWxsZXIgQW5hbHlzaXMqKlxuXG5Pa2F5LCBzbyB0aGUgYmlnZ2VzdCBmbGFnIGhlcmUgaXMsIHVuc3VycHJpc2luZ2x5LCBgb3V0X29mX21lbW9yeWAuIFRoYXQncyB3aGVyZSBJIG5lZWQgdG8gZm9jdXMuIEknbSBnb2luZyB0byBzZXQgdGhhdCBhcyBteSBwcmltYXJ5IHN5bWJvbCwgdGhlIGNlbnRyYWwgcG9pbnQgb2YgdGhpcyBpbnZlc3RpZ2F0aW9uLlxuXG5UaGUga2V5IGNoYW5nZSBpcyBpbiB0aGUgT09NIGtpbGxlcidzIGNvbnN0cmFpbnQgbG9naWMsIHNwZWNpZmljYWxseSB0aGUgcmVtb3ZhbCBvZiB0aGUgYF9fR0ZQX1RISVNOT0RFYCBjaGVjayB3aXRoaW4gYGNvbnN0cmFpbmVkX2FsbG9jKClgLiBUaGlzIHN1YnRseSBidXQgc2lnbmlmaWNhbnRseSBhbHRlcnMgaG93IHRoZSBPT00ga2lsbGVyIGJlaGF2ZXMgd2hlbiBtZW1vcnkgcG9saWNpZXMgYXJlIGFjdGl2ZWx5IGluIHBsYXkuIEl0IHNlZW1zIHRoaXMgbW9kaWZpY2F0aW9uICpkb2VzKiBhbHRlciB0aGUgY29udHJvbCBmbG93IG9mIHRoZSBPT00ga2lsbGVyLCBtYWtpbmcgaXQgYSB2aWFibGUgdGFyZ2V0IGZvciBmdXp6aW5nLiBOb3csIHRvIGdldCB0aGlzIGNvZGUgdG8gZXhlY3V0ZSwgSSdsbCBuZWVkIHRvIGVuYWJsZSBgQ09ORklHX05VTUFgLiBUaGF0J3MgdGhlIGVuYWJsZXIuIEdvdCBpdC5cblxuXG4iLCJJbnB1dFRva2VucyI6NTYzMSwiT3V0cHV0VG9rZW5zIjoxMjEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMjgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTNUMTE6MDc6NDYuMjY4NTM2MzAzWiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6Nzg0MzAwMjgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIk5VTUFcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJvdXRfb2ZfbWVtb3J5XCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIE9PTSBraWxsZXIncyBjb25zdHJhaW50IGxvZ2ljIGJ5IHJlbW92aW5nIGEgY2hlY2sgZm9yIF9fR0ZQX1RISVNOT0RFIGluIGNvbnN0cmFpbmVkX2FsbG9jKCkuIFRoaXMgY2hhbmdlcyBob3cgdGhlIE9PTSBraWxsZXIgc2VsZWN0cyB0YXNrcyB0byBraWxsIHdoZW4gbWVtb3J5IHBvbGljaWVzIGFyZSBpbiBlZmZlY3QuIFRoZSBjb2RlIGlzIHJlYWNoYWJsZSBhbmQgZnVuY3Rpb25hbGx5IGFsdGVycyB0aGUgZXhlY3V0aW9uIGZsb3cgb2YgdGhlIE9PTSBraWxsZXIsIG1ha2luZyBpdCB3b3J0aCBmdXp6aW5nLiBUaGUgQ09ORklHX05VTUEgb3B0aW9uIGlzIHJlcXVpcmVkIHRvIHJlYWNoIHRoaXMgY29kZS5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJOVU1BXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwib3V0X29mX21lbW9yeVwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBPT00ga2lsbGVyJ3MgY29uc3RyYWludCBsb2dpYyBieSByZW1vdmluZyBhIGNoZWNrIGZvciBfX0dGUF9USElTTk9ERSBpbiBjb25zdHJhaW5lZF9hbGxvYygpLiBUaGlzIGNoYW5nZXMgaG93IHRoZSBPT00ga2lsbGVyIHNlbGVjdHMgdGFza3MgdG8ga2lsbCB3aGVuIG1lbW9yeSBwb2xpY2llcyBhcmUgaW4gZWZmZWN0LiBUaGUgY29kZSBpcyByZWFjaGFibGUgYW5kIGZ1bmN0aW9uYWxseSBhbHRlcnMgdGhlIGV4ZWN1dGlvbiBmbG93IG9mIHRoZSBPT00ga2lsbGVyLCBtYWtpbmcgaXQgd29ydGggZnV6emluZy4gVGhlIENPTkZJR19OVU1BIG9wdGlvbiBpcyByZXF1aXJlZCB0byByZWFjaCB0aGlzIGNvZGUuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEzVDExOjA3OjQ2LjM0Njk3MzYxMVoiLCJTZXEiOjE1LCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6IklmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6OTI2MDY5ODQxMiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEzVDExOjA3OjQ2LjM0NzQ0Nzg1MVoiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJiZXN0LWV4cGVuc2l2ZSIsIkR1cmF0aW9uIjo5MjYwMjIxMTkyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgT09NIGtpbGxlciBsb2dpYyBieSByZW1vdmluZyBhIGNoZWNrIGZvciBgX19HRlBfVEhJU05PREVgIGluIGBjb25zdHJhaW5lZF9hbGxvYygpYC4gVGhpcyBpcyBhIHB1cmVseSBsb2dpY2FsIGNoYW5nZSBhZmZlY3RpbmcgT09NIGNvbnN0cmFpbnQgZXZhbHVhdGlvbiBhbmQgbWVtb3J5IGFsbG9jYXRpb24gcG9saWNpZXMuIEl0IGRvZXMgbm90IGludHJvZHVjZSBhbnkgbmV3IGRhdGEgc3RydWN0dXJlcywgbWVtb3J5IGFsbG9jYXRpb25zLCBvciBkYXRhIGNvcGllcyB0byB1c2VyIHNwYWNlLiBUaGVyZSBpcyBubyByaXNrIG9mIGV4cG9zaW5nIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IG9yIGNyZWF0aW5nIGluZm8tbGVha3MsIHNvIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgbmVjZXNzYXJ5LiBBbnkgcG90ZW50aWFsIGJ1Z3MgcmVzdWx0aW5nIGZyb20gdGhpcyBjaGFuZ2UgKGUuZy4sIGRlYWRsb2NrcyBvciBpbmNvcnJlY3QgbWVtb3J5IG1hbmFnZW1lbnQpIHdvdWxkIGJlIGNhdWdodCBieSBzdGFuZGFyZCBkZXRlY3RvcnMgbGlrZSBLQVNBTiBvciBMT0NLREVQLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeVxuZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmRcbmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcilcbmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLlxuXG5DUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjpcbi0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZVxuICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU5cbiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUFxuICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLlxuLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCxcbiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLlxuXG5SdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLFxuTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy5cbkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFlcbnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzXG50aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLlxuXG5Mb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdFxudW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsXG5hIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXNcbnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nXG51bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2xcbmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSxcbmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6XG4xLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYlxuICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHNcbiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuXG4yLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzXG4gICBvciBzdHJ1Y3QgZmllbGRzLlxuMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkc1xuICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy5cbjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzXG4gICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuXG5cblNldCBOZWVkc0tNU0FOPWZhbHNlIElGOlxuLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlclxuICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHRcbiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLlxuLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZFxuICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuXG4tIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy5cblxuVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZVxuZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDI4ZGMyNmRjMDRkNWViYjNhYTNhODdjY2I2MzYzMjU1MzU0ZGYyZDdcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVGh1IEF1ZyAxMyAxMTowNzoyMCAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL21tL29vbV9raWxsLmMgYi9tbS9vb21fa2lsbC5jXG5pbmRleCA1ZjM3MmY2ZTI2ZmEzLi5mZDNjNDc2ODQ2YTMwIDEwMDY0NFxuLS0tIGEvbW0vb29tX2tpbGwuY1xuKysrIGIvbW0vb29tX2tpbGwuY1xuQEAgLTI2NywxOCArMjY3LDExIEBAIHN0YXRpYyBlbnVtIG9vbV9jb25zdHJhaW50IGNvbnN0cmFpbmVkX2FsbG9jKHN0cnVjdCBvb21fY29udHJvbCAqb2MpXG4gXG4gXHRpZiAoIW9jLVx1MDAzZXpvbmVsaXN0KVxuIFx0XHRyZXR1cm4gQ09OU1RSQUlOVF9OT05FO1xuLVx0Lypcbi1cdCAqIFJlYWNoIGhlcmUgb25seSB3aGVuIF9fR0ZQX05PRkFJTCBpcyB1c2VkLiBTbywgd2Ugc2hvdWxkIGF2b2lkXG4tXHQgKiB0byBraWxsIGN1cnJlbnQuV2UgaGF2ZSB0byByYW5kb20gdGFzayBraWxsIGluIHRoaXMgY2FzZS5cbi1cdCAqIEhvcGVmdWxseSwgQ09OU1RSQUlOVF9USElTTk9ERS4uLmJ1dCBubyB3YXkgdG8gaGFuZGxlIGl0LCBub3cuXG4tXHQgKi9cbi1cdGlmIChvYy1cdTAwM2VnZnBfbWFzayBcdTAwMjYgX19HRlBfVEhJU05PREUpXG4tXHRcdHJldHVybiBDT05TVFJBSU5UX05PTkU7XG4gXG4gXHQvKlxuLVx0ICogVGhpcyBpcyBub3QgYSBfX0dGUF9USElTTk9ERSBhbGxvY2F0aW9uLCBzbyBhIHRydW5jYXRlZCBub2RlbWFzayBpblxuLVx0ICogdGhlIHBhZ2UgYWxsb2NhdG9yIG1lYW5zIGEgbWVtcG9saWN5IGlzIGluIGVmZmVjdC4gIENwdXNldCBwb2xpY3lcbi1cdCAqIGlzIGVuZm9yY2VkIGluIGdldF9wYWdlX2Zyb21fZnJlZWxpc3QoKS5cbitcdCAqIEEgdHJ1bmNhdGVkIG5vZGVtYXNrIGluIHRoZSBwYWdlIGFsbG9jYXRvciBtZWFucyBhIG1lbXBvbGljeVxuK1x0ICogaXMgaW4gZWZmZWN0LiAgQ3B1c2V0IHBvbGljeSBpcyBlbmZvcmNlZCBpblxuK1x0ICogZ2V0X3BhZ2VfZnJvbV9mcmVlbGlzdCgpLlxuIFx0ICovXG4gXHRpZiAob2MtXHUwMDNlbm9kZW1hc2sgXHUwMDI2XHUwMDI2XG4gXHQgICAgIW5vZGVzX3N1YnNldChub2RlX3N0YXRlc1tOX01FTU9SWV0sICpvYy1cdTAwM2Vub2RlbWFzaykpIHtcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEzVDExOjA3OjQ2LjM0NzQ0OTU2MVoiLCJTZXEiOjE3LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1MTIyMDc0NTg2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgT09NIEtpbGxlciBDb25zdHJhaW50IE1vZGlmaWNhdGlvbioqXG5cbk9rYXksIHNvIHRoaXMgcGF0Y2ggaXMgdG91Y2hpbmcgYG1tL29vbV9raWxsLmNgLCBzcGVjaWZpY2FsbHkgYGNvbnN0cmFpbmVkX2FsbG9jKClgLiBUaGUgY29yZSBvZiB0aGUgY2hhbmdlIGlzIHJlbW92aW5nIGEgY2hlY2sgZm9yIGBfX0dGUF9USElTTk9ERWAuIFJpZ2h0LCBzbyB0aGlzIGZ1bmN0aW9uIGlzIGFsbCBhYm91dCBmaWd1cmluZyBvdXQgdGhlIE9PTSBjb25zdHJhaW50IOKAkyB3aGV0aGVyIGl0J3MgbGltaXRlZCBieSBDUFUgc2V0LCBtZW1vcnkgcG9saWN5LCBvciBtZW1jZy4gUmVtb3ZpbmcgdGhhdCBjaGVjayBlc3NlbnRpYWxseSBhbHRlcnMgaG93IHRoZSBPT00ga2lsbGVyIGRlY2lkZXMgd2hpY2ggYWxsb2NhdGlvbnMgYXJlIGNvbnNpZGVyZWQgY29uc3RyYWluZWQuXG5cbk15IGltbWVkaWF0ZSBhc3Nlc3NtZW50IGlzIHRoaXM6IGl0IGRvZXNuJ3QgYXBwZWFyIHRvIGJlIGEgS01TQU4gKEtlcm5lbCBNZW1vcnkgU2FuaXRpemVyKSBpc3N1ZS4gVGhlcmUncyBubyBvYnZpb3VzIHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgaGVyZS4gVGhpcyBpc24ndCBhYm91dCBleHBvc2luZyBrZXJuZWwgaW50ZXJuYWxzIHRvIHVzZXJzcGFjZSwgYW5kIHRoZXJlIGFyZSBubyBuZXcgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMgaW50cm9kdWNlZC4gVGhpcyBjaGFuZ2UgaXMgcHVyZWx5IGFib3V0IHRoZSBPT00ga2lsbGVyJ3MgZGVjaXNpb24tbWFraW5nIHByb2Nlc3MgY29uY2VybmluZyBtZW1vcnkgYWxsb2NhdGlvbiBjb25zdHJhaW50cy5cblxuT2YgY291cnNlLCBhbnkgY2hhbmdlIHRvIG1lbW9yeSBtYW5hZ2VtZW50IGhhcyB0byBiZSBleGFtaW5lZCBjYXJlZnVsbHkuIEFsdGhvdWdoIEtNU0FOIGlzbid0IHJlbGV2YW50IGluIHRoaXMgc3BlY2lmaWMgY2FzZSwgaXQncyB3b3J0aCBicmllZmx5IGNvbnNpZGVyaW5nIEtBU0FOL0xPQ0tERVAgZXRjLiB0byBzZWUgaWYgdGhpcyB0d2VhayBjb3VsZCAqaW5kaXJlY3RseSogdHJpZ2dlciBtZW1vcnkgY29ycnVwdGlvbiBvciBkZWFkbG9ja3MuIEknbGwgcXVpY2tseSBnbGFuY2UgYXQgdGhlIHN1cnJvdW5kaW5nIGNvZGUganVzdCB0byBiZSBjZXJ0YWluLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMTQ5LCJPdXRwdXRUb2tlbnMiOjM1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjQ1LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTNUMTE6MDc6NTEuNDY5NTI3MjM3WiIsIlNlcSI6MTgsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjExMTk0MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJtbS9vb21fa2lsbC5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDI1MCxcbiAgXCJMaW5lQ291bnRcIjogNTBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDI1MDpcXHR7XFxuIDI1MTpcXHRcXHRzdHJ1Y3Qgem9uZSAqem9uZTtcXG4gMjUyOlxcdFxcdHN0cnVjdCB6b25lcmVmICp6O1xcbiAyNTM6XFx0XFx0ZW51bSB6b25lX3R5cGUgaGlnaGVzdF96b25laWR4ID0gZ2ZwX3pvbmUob2MtXFx1MDAzZWdmcF9tYXNrKTtcXG4gMjU0OlxcdFxcdGJvb2wgY3B1c2V0X2xpbWl0ZWQgPSBmYWxzZTtcXG4gMjU1OlxcdFxcdGludCBuaWQ7XFxuIDI1NjpcXHRcXG4gMjU3OlxcdFxcdGlmIChpc19tZW1jZ19vb20ob2MpKSB7XFxuIDI1ODpcXHRcXHRcXHRvYy1cXHUwMDNldG90YWxwYWdlcyA9IG1lbV9jZ3JvdXBfZ2V0X21heChvYy1cXHUwMDNlbWVtY2cpID86IDE7XFxuIDI1OTpcXHRcXHRcXHRyZXR1cm4gQ09OU1RSQUlOVF9NRU1DRztcXG4gMjYwOlxcdFxcdH1cXG4gMjYxOlxcdFxcbiAyNjI6XFx0XFx0LyogRGVmYXVsdCB0byBhbGwgYXZhaWxhYmxlIG1lbW9yeSAqL1xcbiAyNjM6XFx0XFx0b2MtXFx1MDAzZXRvdGFscGFnZXMgPSB0b3RhbHJhbV9wYWdlcygpICsgdG90YWxfc3dhcF9wYWdlcztcXG4gMjY0OlxcdFxcbiAyNjU6XFx0XFx0aWYgKCFJU19FTkFCTEVEKENPTkZJR19OVU1BKSlcXG4gMjY2OlxcdFxcdFxcdHJldHVybiBDT05TVFJBSU5UX05PTkU7XFxuIDI2NzpcXHRcXG4gMjY4OlxcdFxcdGlmICghb2MtXFx1MDAzZXpvbmVsaXN0KVxcbiAyNjk6XFx0XFx0XFx0cmV0dXJuIENPTlNUUkFJTlRfTk9ORTtcXG4gMjcwOlxcdFxcbiAyNzE6XFx0XFx0LypcXG4gMjcyOlxcdFxcdCAqIEEgdHJ1bmNhdGVkIG5vZGVtYXNrIGluIHRoZSBwYWdlIGFsbG9jYXRvciBtZWFucyBhIG1lbXBvbGljeVxcbiAyNzM6XFx0XFx0ICogaXMgaW4gZWZmZWN0LiAgQ3B1c2V0IHBvbGljeSBpcyBlbmZvcmNlZCBpblxcbiAyNzQ6XFx0XFx0ICogZ2V0X3BhZ2VfZnJvbV9mcmVlbGlzdCgpLlxcbiAyNzU6XFx0XFx0ICovXFxuIDI3NjpcXHRcXHRpZiAob2MtXFx1MDAzZW5vZGVtYXNrIFxcdTAwMjZcXHUwMDI2XFxuIDI3NzpcXHRcXHQgICAgIW5vZGVzX3N1YnNldChub2RlX3N0YXRlc1tOX01FTU9SWV0sICpvYy1cXHUwMDNlbm9kZW1hc2spKSB7XFxuIDI3ODpcXHRcXHRcXHRvYy1cXHUwMDNldG90YWxwYWdlcyA9IHRvdGFsX3N3YXBfcGFnZXM7XFxuIDI3OTpcXHRcXHRcXHRmb3JfZWFjaF9ub2RlX21hc2sobmlkLCAqb2MtXFx1MDAzZW5vZGVtYXNrKVxcbiAyODA6XFx0XFx0XFx0XFx0b2MtXFx1MDAzZXRvdGFscGFnZXMgKz0gbm9kZV9wcmVzZW50X3BhZ2VzKG5pZCk7XFxuIDI4MTpcXHRcXHRcXHRyZXR1cm4gQ09OU1RSQUlOVF9NRU1PUllfUE9MSUNZO1xcbiAyODI6XFx0XFx0fVxcbiAyODM6XFx0XFxuIDI4NDpcXHRcXHQvKiBDaGVjayB0aGlzIGFsbG9jYXRpb24gZmFpbHVyZSBpcyBjYXVzZWQgYnkgY3B1c2V0J3Mgd2FsbCBmdW5jdGlvbiAqL1xcbiAyODU6XFx0XFx0Zm9yX2VhY2hfem9uZV96b25lbGlzdF9ub2RlbWFzayh6b25lLCB6LCBvYy1cXHUwMDNlem9uZWxpc3QsXFxuIDI4NjpcXHRcXHRcXHRcXHRoaWdoZXN0X3pvbmVpZHgsIG9jLVxcdTAwM2Vub2RlbWFzaylcXG4gMjg3OlxcdFxcdFxcdGlmICghY3B1c2V0X3pvbmVfYWxsb3dlZCh6b25lLCBvYy1cXHUwMDNlZ2ZwX21hc2spKVxcbiAyODg6XFx0XFx0XFx0XFx0Y3B1c2V0X2xpbWl0ZWQgPSB0cnVlO1xcbiAyODk6XFx0XFxuIDI5MDpcXHRcXHRpZiAoY3B1c2V0X2xpbWl0ZWQpIHtcXG4gMjkxOlxcdFxcdFxcdG9jLVxcdTAwM2V0b3RhbHBhZ2VzID0gdG90YWxfc3dhcF9wYWdlcztcXG4gMjkyOlxcdFxcdFxcdGZvcl9lYWNoX25vZGVfbWFzayhuaWQsIGNwdXNldF9jdXJyZW50X21lbXNfYWxsb3dlZClcXG4gMjkzOlxcdFxcdFxcdFxcdG9jLVxcdTAwM2V0b3RhbHBhZ2VzICs9IG5vZGVfcHJlc2VudF9wYWdlcyhuaWQpO1xcbiAyOTQ6XFx0XFx0XFx0cmV0dXJuIENPTlNUUkFJTlRfQ1BVU0VUO1xcbiAyOTU6XFx0XFx0fVxcbiAyOTY6XFx0XFx0cmV0dXJuIENPTlNUUkFJTlRfTk9ORTtcXG4gMjk3OlxcdH1cXG4gMjk4OlxcdFxcbiAyOTk6XFx0c3RhdGljIGludCBvb21fZXZhbHVhdGVfdGFzayhzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhc2ssIHZvaWQgKmFyZylcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTNUMTE6MDc6NTEuNDY5NjQwOTg3WiIsIlNlcSI6MTksIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQxMzgwMDkwMTYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQXNzZXNzbWVudCBvZiB0aGUgUGF0Y2gqKlxuXG5Pa2F5LCBzbyBJJ3ZlIGp1c3QgcmV2aWV3ZWQgdGhpcyBwYXRjaC4gRXNzZW50aWFsbHksIGFsbCBpdCBkb2VzIGlzIGVsaW1pbmF0ZSBhIHNwZWNpZmljIGNvbmRpdGlvbmFsIGNoZWNrIHJlbGF0ZWQgdG8gYG9jLVx1MDAzZWdmcF9tYXNrYCBhbmQgdGhlIGBfX0dGUF9USElTTk9ERWAgZmxhZy4gTXkgYW5hbHlzaXM/IFRoZXJlJ3Mgbm8gZGV0ZWN0YWJsZSB1bmluaXRpYWxpemVkIG1lbW9yeSBleHBvc3VyZSBpbnRyb2R1Y2VkIGJ5IHRoaXMgY2hhbmdlLiBUaGUgcmVtb3ZhbCBvZiB0aGlzIGNvbmRpdGlvbiBhcHBlYXJzIHN0cmFpZ2h0Zm9yd2FyZCBhbmQgaGFybWxlc3MgaW4gdGVybXMgb2YgbWVtb3J5IHNhZmV0eSwgZ2l2ZW4gdGhlIGNvbnRleHQuIFRoZXJlZm9yZSwgSSdtIGNvbmZpZGVudCBpbiBzZXR0aW5nIGBOZWVkc0tNU0FOYCB0byBmYWxzZS4gVGhpcyBsb29rcyBsaWtlIGEgY2xlYW4gYW5kIGxpa2VseSBwZXJmb3JtYW5jZS1vcmllbnRlZCB0d2Vhay5cblxuXG4iLCJJbnB1dFRva2VucyI6MzQ1NSwiT3V0cHV0VG9rZW5zIjoxNDksIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0MiwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEzVDExOjA3OjU1LjYwNzY1MjIzM1oiLCJTZXEiOjIwLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE1MzUwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIE9PTSBraWxsZXIgbG9naWMgYnkgcmVtb3ZpbmcgYSBjaGVjayBmb3IgYF9fR0ZQX1RISVNOT0RFYCBpbiBgY29uc3RyYWluZWRfYWxsb2MoKWAuIFRoaXMgaXMgYSBwdXJlbHkgbG9naWNhbCBjaGFuZ2UgYWZmZWN0aW5nIE9PTSBjb25zdHJhaW50IGV2YWx1YXRpb24gYW5kIG1lbW9yeSBhbGxvY2F0aW9uIHBvbGljaWVzLiBJdCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IG5ldyBkYXRhIHN0cnVjdHVyZXMsIG1lbW9yeSBhbGxvY2F0aW9ucywgb3IgZGF0YSBjb3BpZXMgdG8gdXNlciBzcGFjZS4gVGhlcmUgaXMgbm8gcmlzayBvZiBleHBvc2luZyB1bmluaXRpYWxpemVkIG1lbW9yeSBvciBjcmVhdGluZyBpbmZvLWxlYWtzLCBzbyBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IG5lY2Vzc2FyeS4gQW55IHBvdGVudGlhbCBidWdzIHJlc3VsdGluZyBmcm9tIHRoaXMgY2hhbmdlIChlLmcuLCBkZWFkbG9ja3Mgb3IgaW5jb3JyZWN0IG1lbW9yeSBtYW5hZ2VtZW50KSB3b3VsZCBiZSBjYXVnaHQgYnkgc3RhbmRhcmQgZGV0ZWN0b3JzIGxpa2UgS0FTQU4gb3IgTE9DS0RFUC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgT09NIGtpbGxlciBsb2dpYyBieSByZW1vdmluZyBhIGNoZWNrIGZvciBgX19HRlBfVEhJU05PREVgIGluIGBjb25zdHJhaW5lZF9hbGxvYygpYC4gVGhpcyBpcyBhIHB1cmVseSBsb2dpY2FsIGNoYW5nZSBhZmZlY3RpbmcgT09NIGNvbnN0cmFpbnQgZXZhbHVhdGlvbiBhbmQgbWVtb3J5IGFsbG9jYXRpb24gcG9saWNpZXMuIEl0IGRvZXMgbm90IGludHJvZHVjZSBhbnkgbmV3IGRhdGEgc3RydWN0dXJlcywgbWVtb3J5IGFsbG9jYXRpb25zLCBvciBkYXRhIGNvcGllcyB0byB1c2VyIHNwYWNlLiBUaGVyZSBpcyBubyByaXNrIG9mIGV4cG9zaW5nIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IG9yIGNyZWF0aW5nIGluZm8tbGVha3MsIHNvIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgbmVjZXNzYXJ5LiBBbnkgcG90ZW50aWFsIGJ1Z3MgcmVzdWx0aW5nIGZyb20gdGhpcyBjaGFuZ2UgKGUuZy4sIGRlYWRsb2NrcyBvciBpbmNvcnJlY3QgbWVtb3J5IG1hbmFnZW1lbnQpIHdvdWxkIGJlIGNhdWdodCBieSBzdGFuZGFyZCBkZXRlY3RvcnMgbGlrZSBLQVNBTiBvciBMT0NLREVQLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/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-workflow9bxsr[1] Phase: Succeeded StartedAt: 2026-08-13 11:08:07 +0000 UTC FinishedAt: 2026-08-13 11:08:07 +0000 UTC Input: nil Output: nil --------- Name: series-workflow9bxsr[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-08-13 11:08:07 +0000 UTC FinishedAt: 2026-08-13 11:08:07 +0000 UTC Input: nil Output: nil --------- Name: series-workflow9bxsr[2] Phase: Succeeded StartedAt: 2026-08-13 11:08:07 +0000 UTC FinishedAt: 2026-08-13 14:49:11 +0000 UTC Input: nil Output: nil --------- Name: series-workflow9bxsr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7ba5daade5ab61776382020b708b1ef75c9af1ea","config_name":"upstream-apparmor-kasan.config","enable_configs":["NUMA"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["out_of_memory"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"7ba5daade5ab61776382020b708b1ef75c9af1ea","config_name":"upstream-apparmor-kasan.config","enable_configs":["NUMA"],"series_id":"a89db2e6-bc89-45b8-a883-e6e108ee0574","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-08-13 11:08:07 +0000 UTC FinishedAt: 2026-08-13 14:49:11 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"7ba5daade5ab61776382020b708b1ef75c9af1ea","config_name":"upstream-apparmor-kasan.config","enable_configs":["NUMA"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["out_of_memory"],"skip_cover_check":true},"patched":{"arch":"amd64","commit_hash":"7ba5daade5ab61776382020b708b1ef75c9af1ea","config_name":"upstream-apparmor-kasan.config","enable_configs":["NUMA"],"series_id":"a89db2e6-bc89-45b8-a883-e6e108ee0574","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflow9bxsr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7ba5daade5ab61776382020b708b1ef75c9af1ea","config_name":"upstream-apparmor-kasan.config","enable_configs":["NUMA"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["out_of_memory"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"7ba5daade5ab61776382020b708b1ef75c9af1ea","config_name":"upstream-apparmor-kasan.config","enable_configs":["NUMA"],"series_id":"a89db2e6-bc89-45b8-a883-e6e108ee0574","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-08-13 11:08:07 +0000 UTC FinishedAt: 2026-08-13 11:08:17 +0000 UTC Input: nil Output: nil --------- Name: series-workflow9bxsr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7ba5daade5ab61776382020b708b1ef75c9af1ea","config_name":"upstream-apparmor-kasan.config","enable_configs":["NUMA"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["out_of_memory"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"7ba5daade5ab61776382020b708b1ef75c9af1ea","config_name":"upstream-apparmor-kasan.config","enable_configs":["NUMA"],"series_id":"a89db2e6-bc89-45b8-a883-e6e108ee0574","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-08-13 11:08:07 +0000 UTC FinishedAt: 2026-08-13 11:08:11 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"7ba5daade5ab61776382020b708b1ef75c9af1ea","config_name":"upstream-apparmor-kasan.config","enable_configs":["NUMA"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.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-workflow9bxsr/series-workflow9bxsr-convert-artifact-2170095772/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow9bxsr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7ba5daade5ab61776382020b708b1ef75c9af1ea","config_name":"upstream-apparmor-kasan.config","enable_configs":["NUMA"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["out_of_memory"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"7ba5daade5ab61776382020b708b1ef75c9af1ea","config_name":"upstream-apparmor-kasan.config","enable_configs":["NUMA"],"series_id":"a89db2e6-bc89-45b8-a883-e6e108ee0574","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-08-13 11:08:17 +0000 UTC FinishedAt: 2026-08-13 11:24:36 +0000 UTC Input: nil Output: nil --------- Name: series-workflow9bxsr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7ba5daade5ab61776382020b708b1ef75c9af1ea","config_name":"upstream-apparmor-kasan.config","enable_configs":["NUMA"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["out_of_memory"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"7ba5daade5ab61776382020b708b1ef75c9af1ea","config_name":"upstream-apparmor-kasan.config","enable_configs":["NUMA"],"series_id":"a89db2e6-bc89-45b8-a883-e6e108ee0574","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-08-13 11:08:17 +0000 UTC FinishedAt: 2026-08-13 11:24:36 +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:*d3f126c5-8296-4500-8a7b-db9697dd4046,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-workflow9bxsr/series-workflow9bxsr-convert-artifact-2170095772/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": "3c5f1714-e2b3-46ec-9609-14897e97609c", "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-workflow9bxsr/series-workflow9bxsr-build-action-241354/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow9bxsr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7ba5daade5ab61776382020b708b1ef75c9af1ea","config_name":"upstream-apparmor-kasan.config","enable_configs":["NUMA"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["out_of_memory"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"7ba5daade5ab61776382020b708b1ef75c9af1ea","config_name":"upstream-apparmor-kasan.config","enable_configs":["NUMA"],"series_id":"a89db2e6-bc89-45b8-a883-e6e108ee0574","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-08-13 11:08:17 +0000 UTC FinishedAt: 2026-08-13 11:24: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:*d3f126c5-8296-4500-8a7b-db9697dd4046,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-workflow9bxsr/series-workflow9bxsr-convert-artifact-2170095772/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": "3c5f1714-e2b3-46ec-9609-14897e97609c", "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-workflow9bxsr/series-workflow9bxsr-build-action-241354/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow9bxsr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7ba5daade5ab61776382020b708b1ef75c9af1ea","config_name":"upstream-apparmor-kasan.config","enable_configs":["NUMA"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["out_of_memory"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"7ba5daade5ab61776382020b708b1ef75c9af1ea","config_name":"upstream-apparmor-kasan.config","enable_configs":["NUMA"],"series_id":"a89db2e6-bc89-45b8-a883-e6e108ee0574","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-08-13 11:24:36 +0000 UTC FinishedAt: 2026-08-13 11:24:36 +0000 UTC Input: nil Output: nil --------- Name: series-workflow9bxsr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7ba5daade5ab61776382020b708b1ef75c9af1ea","config_name":"upstream-apparmor-kasan.config","enable_configs":["NUMA"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["out_of_memory"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"7ba5daade5ab61776382020b708b1ef75c9af1ea","config_name":"upstream-apparmor-kasan.config","enable_configs":["NUMA"],"series_id":"a89db2e6-bc89-45b8-a883-e6e108ee0574","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-08-13 11:24:36 +0000 UTC FinishedAt: 2026-08-13 11:24:36 +0000 UTC Input: nil Output: nil --------- Name: series-workflow9bxsr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7ba5daade5ab61776382020b708b1ef75c9af1ea","config_name":"upstream-apparmor-kasan.config","enable_configs":["NUMA"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["out_of_memory"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"7ba5daade5ab61776382020b708b1ef75c9af1ea","config_name":"upstream-apparmor-kasan.config","enable_configs":["NUMA"],"series_id":"a89db2e6-bc89-45b8-a883-e6e108ee0574","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-08-13 11:24:36 +0000 UTC FinishedAt: 2026-08-13 11:24:46 +0000 UTC Input: nil Output: nil --------- Name: series-workflow9bxsr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7ba5daade5ab61776382020b708b1ef75c9af1ea","config_name":"upstream-apparmor-kasan.config","enable_configs":["NUMA"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["out_of_memory"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"7ba5daade5ab61776382020b708b1ef75c9af1ea","config_name":"upstream-apparmor-kasan.config","enable_configs":["NUMA"],"series_id":"a89db2e6-bc89-45b8-a883-e6e108ee0574","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-08-13 11:24:36 +0000 UTC FinishedAt: 2026-08-13 11:24:40 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"7ba5daade5ab61776382020b708b1ef75c9af1ea","config_name":"upstream-apparmor-kasan.config","enable_configs":["NUMA"],"series_id":"a89db2e6-bc89-45b8-a883-e6e108ee0574","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.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-workflow9bxsr/series-workflow9bxsr-convert-artifact-2969474267/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow9bxsr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7ba5daade5ab61776382020b708b1ef75c9af1ea","config_name":"upstream-apparmor-kasan.config","enable_configs":["NUMA"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["out_of_memory"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"7ba5daade5ab61776382020b708b1ef75c9af1ea","config_name":"upstream-apparmor-kasan.config","enable_configs":["NUMA"],"series_id":"a89db2e6-bc89-45b8-a883-e6e108ee0574","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-08-13 11:24:46 +0000 UTC FinishedAt: 2026-08-13 11:27:16 +0000 UTC Input: nil Output: nil --------- Name: series-workflow9bxsr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7ba5daade5ab61776382020b708b1ef75c9af1ea","config_name":"upstream-apparmor-kasan.config","enable_configs":["NUMA"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["out_of_memory"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"7ba5daade5ab61776382020b708b1ef75c9af1ea","config_name":"upstream-apparmor-kasan.config","enable_configs":["NUMA"],"series_id":"a89db2e6-bc89-45b8-a883-e6e108ee0574","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-08-13 11:24:46 +0000 UTC FinishedAt: 2026-08-13 11:27:06 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*3c5f1714-e2b3-46ec-9609-14897e97609c,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-workflow9bxsr/series-workflow9bxsr-build-action-241354/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-workflow9bxsr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7ba5daade5ab61776382020b708b1ef75c9af1ea","config_name":"upstream-apparmor-kasan.config","enable_configs":["NUMA"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["out_of_memory"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"7ba5daade5ab61776382020b708b1ef75c9af1ea","config_name":"upstream-apparmor-kasan.config","enable_configs":["NUMA"],"series_id":"a89db2e6-bc89-45b8-a883-e6e108ee0574","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-08-13 11:27:16 +0000 UTC FinishedAt: 2026-08-13 11:27:16 +0000 UTC Input: nil Output: nil --------- Name: series-workflow9bxsr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7ba5daade5ab61776382020b708b1ef75c9af1ea","config_name":"upstream-apparmor-kasan.config","enable_configs":["NUMA"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["out_of_memory"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"7ba5daade5ab61776382020b708b1ef75c9af1ea","config_name":"upstream-apparmor-kasan.config","enable_configs":["NUMA"],"series_id":"a89db2e6-bc89-45b8-a883-e6e108ee0574","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-08-13 11:27:16 +0000 UTC FinishedAt: 2026-08-13 11:27:16 +0000 UTC Input: nil Output: nil --------- Name: series-workflow9bxsr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7ba5daade5ab61776382020b708b1ef75c9af1ea","config_name":"upstream-apparmor-kasan.config","enable_configs":["NUMA"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["out_of_memory"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"7ba5daade5ab61776382020b708b1ef75c9af1ea","config_name":"upstream-apparmor-kasan.config","enable_configs":["NUMA"],"series_id":"a89db2e6-bc89-45b8-a883-e6e108ee0574","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-08-13 11:27:16 +0000 UTC FinishedAt: 2026-08-13 11:43:54 +0000 UTC Input: nil Output: nil --------- Name: series-workflow9bxsr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7ba5daade5ab61776382020b708b1ef75c9af1ea","config_name":"upstream-apparmor-kasan.config","enable_configs":["NUMA"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["out_of_memory"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"7ba5daade5ab61776382020b708b1ef75c9af1ea","config_name":"upstream-apparmor-kasan.config","enable_configs":["NUMA"],"series_id":"a89db2e6-bc89-45b8-a883-e6e108ee0574","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-08-13 11:27:16 +0000 UTC FinishedAt: 2026-08-13 11:43:54 +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:*d3f126c5-8296-4500-8a7b-db9697dd4046,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-workflow9bxsr/series-workflow9bxsr-convert-artifact-2969474267/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": "fc751076-06ba-4a49-9a8c-c8ff8d15ba13", "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-workflow9bxsr/series-workflow9bxsr-build-action-3006413695/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow9bxsr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7ba5daade5ab61776382020b708b1ef75c9af1ea","config_name":"upstream-apparmor-kasan.config","enable_configs":["NUMA"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["out_of_memory"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"7ba5daade5ab61776382020b708b1ef75c9af1ea","config_name":"upstream-apparmor-kasan.config","enable_configs":["NUMA"],"series_id":"a89db2e6-bc89-45b8-a883-e6e108ee0574","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-08-13 11:27:16 +0000 UTC FinishedAt: 2026-08-13 11:43:44 +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:*d3f126c5-8296-4500-8a7b-db9697dd4046,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-workflow9bxsr/series-workflow9bxsr-convert-artifact-2969474267/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": "fc751076-06ba-4a49-9a8c-c8ff8d15ba13", "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-workflow9bxsr/series-workflow9bxsr-build-action-3006413695/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow9bxsr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7ba5daade5ab61776382020b708b1ef75c9af1ea","config_name":"upstream-apparmor-kasan.config","enable_configs":["NUMA"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["out_of_memory"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"7ba5daade5ab61776382020b708b1ef75c9af1ea","config_name":"upstream-apparmor-kasan.config","enable_configs":["NUMA"],"series_id":"a89db2e6-bc89-45b8-a883-e6e108ee0574","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-08-13 11:43:54 +0000 UTC FinishedAt: 2026-08-13 11:43:54 +0000 UTC Input: nil Output: nil --------- Name: series-workflow9bxsr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7ba5daade5ab61776382020b708b1ef75c9af1ea","config_name":"upstream-apparmor-kasan.config","enable_configs":["NUMA"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["out_of_memory"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"7ba5daade5ab61776382020b708b1ef75c9af1ea","config_name":"upstream-apparmor-kasan.config","enable_configs":["NUMA"],"series_id":"a89db2e6-bc89-45b8-a883-e6e108ee0574","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-08-13 11:43:54 +0000 UTC FinishedAt: 2026-08-13 11:43:54 +0000 UTC Input: nil Output: nil --------- Name: series-workflow9bxsr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7ba5daade5ab61776382020b708b1ef75c9af1ea","config_name":"upstream-apparmor-kasan.config","enable_configs":["NUMA"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["out_of_memory"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"7ba5daade5ab61776382020b708b1ef75c9af1ea","config_name":"upstream-apparmor-kasan.config","enable_configs":["NUMA"],"series_id":"a89db2e6-bc89-45b8-a883-e6e108ee0574","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-08-13 11:43:54 +0000 UTC FinishedAt: 2026-08-13 11:45:50 +0000 UTC Input: nil Output: nil --------- Name: series-workflow9bxsr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7ba5daade5ab61776382020b708b1ef75c9af1ea","config_name":"upstream-apparmor-kasan.config","enable_configs":["NUMA"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["out_of_memory"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"7ba5daade5ab61776382020b708b1ef75c9af1ea","config_name":"upstream-apparmor-kasan.config","enable_configs":["NUMA"],"series_id":"a89db2e6-bc89-45b8-a883-e6e108ee0574","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-08-13 11:43:54 +0000 UTC FinishedAt: 2026-08-13 11:45:40 +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:*fc751076-06ba-4a49-9a8c-c8ff8d15ba13,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-workflow9bxsr/series-workflow9bxsr-build-action-3006413695/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-workflow9bxsr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7ba5daade5ab61776382020b708b1ef75c9af1ea","config_name":"upstream-apparmor-kasan.config","enable_configs":["NUMA"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["out_of_memory"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"7ba5daade5ab61776382020b708b1ef75c9af1ea","config_name":"upstream-apparmor-kasan.config","enable_configs":["NUMA"],"series_id":"a89db2e6-bc89-45b8-a883-e6e108ee0574","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-08-13 11:45:50 +0000 UTC FinishedAt: 2026-08-13 14:49:11 +0000 UTC Input: nil Output: nil --------- Name: series-workflow9bxsr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7ba5daade5ab61776382020b708b1ef75c9af1ea","config_name":"upstream-apparmor-kasan.config","enable_configs":["NUMA"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["out_of_memory"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"7ba5daade5ab61776382020b708b1ef75c9af1ea","config_name":"upstream-apparmor-kasan.config","enable_configs":["NUMA"],"series_id":"a89db2e6-bc89-45b8-a883-e6e108ee0574","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-08-13 11:45:50 +0000 UTC FinishedAt: 2026-08-13 14:49:11 +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-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["out_of_memory"],"skip_cover_check":true},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:*3c5f1714-e2b3-46ec-9609-14897e97609c,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*fc751076-06ba-4a49-9a8c-c8ff8d15ba13,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-workflow9bxsr/series-workflow9bxsr-build-action-241354/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-workflow9bxsr/series-workflow9bxsr-build-action-3006413695/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflow9bxsr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7ba5daade5ab61776382020b708b1ef75c9af1ea","config_name":"upstream-apparmor-kasan.config","enable_configs":["NUMA"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["out_of_memory"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"7ba5daade5ab61776382020b708b1ef75c9af1ea","config_name":"upstream-apparmor-kasan.config","enable_configs":["NUMA"],"series_id":"a89db2e6-bc89-45b8-a883-e6e108ee0574","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-08-13 11:45:50 +0000 UTC FinishedAt: 2026-08-13 11:46:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflow9bxsr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7ba5daade5ab61776382020b708b1ef75c9af1ea","config_name":"upstream-apparmor-kasan.config","enable_configs":["NUMA"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["out_of_memory"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"7ba5daade5ab61776382020b708b1ef75c9af1ea","config_name":"upstream-apparmor-kasan.config","enable_configs":["NUMA"],"series_id":"a89db2e6-bc89-45b8-a883-e6e108ee0574","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-08-13 11:45:50 +0000 UTC FinishedAt: 2026-08-13 11:45:55 +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-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["out_of_memory"],"skip_cover_check":true},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-workflow9bxsr/series-workflow9bxsr-convert-artifact-941590740/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow9bxsr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7ba5daade5ab61776382020b708b1ef75c9af1ea","config_name":"upstream-apparmor-kasan.config","enable_configs":["NUMA"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["out_of_memory"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"7ba5daade5ab61776382020b708b1ef75c9af1ea","config_name":"upstream-apparmor-kasan.config","enable_configs":["NUMA"],"series_id":"a89db2e6-bc89-45b8-a883-e6e108ee0574","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-08-13 11:45:50 +0000 UTC FinishedAt: 2026-08-13 11:45:50 +0000 UTC Input: nil Output: nil --------- Name: series-workflow9bxsr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7ba5daade5ab61776382020b708b1ef75c9af1ea","config_name":"upstream-apparmor-kasan.config","enable_configs":["NUMA"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["out_of_memory"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"7ba5daade5ab61776382020b708b1ef75c9af1ea","config_name":"upstream-apparmor-kasan.config","enable_configs":["NUMA"],"series_id":"a89db2e6-bc89-45b8-a883-e6e108ee0574","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-08-13 11:45:50 +0000 UTC FinishedAt: 2026-08-13 11:45:50 +0000 UTC Input: nil Output: nil --------- Name: series-workflow9bxsr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7ba5daade5ab61776382020b708b1ef75c9af1ea","config_name":"upstream-apparmor-kasan.config","enable_configs":["NUMA"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["out_of_memory"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"7ba5daade5ab61776382020b708b1ef75c9af1ea","config_name":"upstream-apparmor-kasan.config","enable_configs":["NUMA"],"series_id":"a89db2e6-bc89-45b8-a883-e6e108ee0574","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-08-13 11:45:50 +0000 UTC FinishedAt: 2026-08-13 11:45:50 +0000 UTC Input: nil Output: nil --------- Name: series-workflow9bxsr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7ba5daade5ab61776382020b708b1ef75c9af1ea","config_name":"upstream-apparmor-kasan.config","enable_configs":["NUMA"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["out_of_memory"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"7ba5daade5ab61776382020b708b1ef75c9af1ea","config_name":"upstream-apparmor-kasan.config","enable_configs":["NUMA"],"series_id":"a89db2e6-bc89-45b8-a883-e6e108ee0574","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-08-13 11:46:00 +0000 UTC FinishedAt: 2026-08-13 14:49:11 +0000 UTC Input: nil Output: nil --------- Name: series-workflow9bxsr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7ba5daade5ab61776382020b708b1ef75c9af1ea","config_name":"upstream-apparmor-kasan.config","enable_configs":["NUMA"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["out_of_memory"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"7ba5daade5ab61776382020b708b1ef75c9af1ea","config_name":"upstream-apparmor-kasan.config","enable_configs":["NUMA"],"series_id":"a89db2e6-bc89-45b8-a883-e6e108ee0574","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-08-13 11:46:00 +0000 UTC FinishedAt: 2026-08-13 14:49:01 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*3c5f1714-e2b3-46ec-9609-14897e97609c,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*fc751076-06ba-4a49-9a8c-c8ff8d15ba13,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-workflow9bxsr/series-workflow9bxsr-build-action-241354/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-workflow9bxsr/series-workflow9bxsr-build-action-3006413695/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-workflow9bxsr/series-workflow9bxsr-convert-artifact-941590740/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,}