Name: series-workflowwmc2v Phase: Succeeded StartedAt: 2026-09-07 07:04:12 +0000 UTC FinishedAt: 2026-09-07 11:12:14 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwmc2v[0] Phase: Succeeded StartedAt: 2026-09-07 07:04:12 +0000 UTC FinishedAt: 2026-09-07 07:26:21 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwmc2v[0].run-triage Phase: Succeeded StartedAt: 2026-09-07 07:04:12 +0000 UTC FinishedAt: 2026-09-07 07:26:21 +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": "9d3243fc689fef444f87e0a703b4c99653137e1b", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "LRU_GEN", "LRU_GEN_ENABLED" ], "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": "9d3243fc689fef444f87e0a703b4c99653137e1b", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "LRU_GEN", "LRU_GEN_ENABLED" ], "series_id": "258108d5-6ce7-4cbd-9037-ac3e1f9c9bcd" }, "track": "KASAN", "fuzz": { "focus": null, "focus_symbols": [ "evict_folios", "try_to_shrink_lruvec", "run_eviction", "lru_gen_shrink_lruvec" ], "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+CgkJCTx0ZD4yMDI2LzA5LzA3IDA3OjI1PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0xSVV9HRU4mIzM0OywKICAgICYjMzQ7TFJVX0dFTl9FTkFCTEVEJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7ZXZpY3RfZm9saW9zJiMzNDssCiAgICAmIzM0O3RyeV90b19zaHJpbmtfbHJ1dmVjJiMzNDssCiAgICAmIzM0O3J1bl9ldmljdGlvbiYjMzQ7LAogICAgJiMzNDtscnVfZ2VuX3Nocmlua19scnV2ZWMmIzM0OwogIF0sCiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBwYWdlIHJlY2xhaW0gbG9naWMgaW4gdGhlIE11bHRpLUdlbiBMUlUgKE1HTFJVKSBzdWJzeXN0ZW0gKGBtbS92bXNjYW4uY2ApLCBzcGVjaWZpY2FsbHkgaW4gYGV2aWN0X2ZvbGlvcygpYC4gSXQgbW92ZXMgYGZvbGlvX3NldF9scnVfcmVmcyhmb2xpbywgMClgIG91dHNpZGUgb2YgYSBjb25kaXRpb25hbCBjaGVjayBzbyB0aGF0IExSVSByZWZlcmVuY2UgZmxhZ3MgYXJlIGNsZWFyZWQgdW5jb25kaXRpb25hbGx5IGZvciBmb2xpb3MgcmVtYWluaW5nIG9uIHRoZSBsaXN0LlxuXG5UaGlzIGNoYW5nZSBwdXJlbHkgYWZmZWN0cyBmb2xpbyBtZXRhZGF0YS9mbGFncyBkdXJpbmcgTFJVIHBhZ2UgcmVjbGFpbS4gSXQgZG9lcyBub3QgaW50cm9kdWNlIG9yIG1vZGlmeTpcbjEuIERhdGEgc3RydWN0dXJlcyBjb3BpZWQgdG8gdXNlciBzcGFjZSBvciBrZXJuZWwgaW5mby1sZWFrcy5cbjIuIFVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzLCBzdHJ1Y3QgZmllbGRzLCBvciBtZW1vcnkgYWxsb2NhdGlvbnMuXG4zLiBMZW5ndGhzIG9yIGJvdW5kcyBjaGVja3MgdGhhdCBjb3VsZCBleHBvc2UgdW5pbml0aWFsaXplZCBidWZmZXIgbWVtb3J5LlxuXG5CZWNhdXNlIHRoZXJlIGFyZSBubyB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcyBvciBpbmZvLWxlYWtzLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZC4gU3RhbmRhcmQgS0FTQU4vc2FuaXRpemVyIGJ1aWxkcyBhcmUgc3VmZmljaWVudC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgTXVsdGktR2VuIExSVSAoTUdMUlUpIHBhZ2UgcmVjbGFpbSBsb2dpYyBpbiBtbS92bXNjYW4uYywgZW5zdXJpbmcgZm9saW8gTFJVIHJlZmVyZW5jZXMgYXJlIHVuY29uZGl0aW9uYWxseSByZXNldCB3aGVuIGZvbGlvcyBhcmUgcHV0IGJhY2suIFRoaXMgdG91Y2hlcyBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IHBhZ2UgZXZpY3Rpb24gcGF0aHMgcmVhY2hhYmxlIGR1cmluZyBtZW1vcnkgcmVjbGFpbSB1bmRlciBNR0xSVS4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNyAwNzoyNTwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IGEzOGVlMDkxM2JmYTEyNDQ5Nzk4M2I4ZWNhNGE4NmI2MmM5NDY0ZDBcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgTW9uIFNlcCA3IDA3OjI1OjE5IDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL21tL3Ztc2Nhbi5jIGIvbW0vdm1zY2FuLmNcbmluZGV4IDQwZDNmMWI0OGE3NGMuLjQyYzBhMDk5MzhhYjIgMTAwNjQ0XG4tLS0gYS9tbS92bXNjYW4uY1xuJiM0MzsmIzQzOyYjNDM7IGIvbW0vdm1zY2FuLmNcbkBAIC01MDIxLDEwICYjNDM7NTAyMSwxMSBAQCBzdGF0aWMgaW50IGV2aWN0X2ZvbGlvcyh1bnNpZ25lZCBsb25nIG5yX3RvX3NjYW4sIHN0cnVjdCBscnV2ZWMgKmxydXZlYyxcbiBcdFx0fVxuIFxuIFx0XHQvKiBkb24mIzM5O3QgYWRkIHJlamVjdGVkIGZvbGlvcyB0byB0aGUgb2xkZXN0IGdlbmVyYXRpb24gKi9cbi1cdFx0aWYgKGxydV9nZW5fZm9saW9fc2VxKGxydXZlYywgZm9saW8sIGZhbHNlKSA9PSBtaW5fc2VxW3R5cGVdKSB7XG4tXHRcdFx0Zm9saW9fc2V0X2xydV9yZWZzKGZvbGlvLCAwKTtcbiYjNDM7XHRcdGlmIChscnVfZ2VuX2ZvbGlvX3NlcShscnV2ZWMsIGZvbGlvLCBmYWxzZSkgPT0gbWluX3NlcVt0eXBlXSlcbiBcdFx0XHRmb2xpb19zZXRfYWN0aXZlKGZvbGlvKTtcbi1cdFx0fVxuJiM0MztcbiYjNDM7XHRcdC8qIFNlZSB0aGUgY29tbWVudHMgb24gTFJVX1JFRlNfRkxBR1MgKi9cbiYjNDM7XHRcdGZvbGlvX3NldF9scnVfcmVmcyhmb2xpbywgMCk7XG4gXHR9XG4gXG4gXHRtb3ZlX2ZvbGlvc190b19scnUoXHUwMDI2bGlzdCk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDcgMDc6MjU8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Y29yZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7TFJVX0dFTiYjMzQ7LAogICAgJiMzNDtMUlVfR0VOX0VOQUJMRUQmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtldmljdF9mb2xpb3MmIzM0OywKICAgICYjMzQ7dHJ5X3RvX3Nocmlua19scnV2ZWMmIzM0OywKICAgICYjMzQ7cnVuX2V2aWN0aW9uJiMzNDssCiAgICAmIzM0O2xydV9nZW5fc2hyaW5rX2xydXZlYyYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBNdWx0aS1HZW4gTFJVIChNR0xSVSkgcGFnZSByZWNsYWltIGxvZ2ljIGluIG1tL3Ztc2Nhbi5jLCBlbnN1cmluZyBmb2xpbyBMUlUgcmVmZXJlbmNlcyBhcmUgdW5jb25kaXRpb25hbGx5IHJlc2V0IHdoZW4gZm9saW9zIGFyZSBwdXQgYmFjay4gVGhpcyB0b3VjaGVzIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgcGFnZSBldmljdGlvbiBwYXRocyByZWFjaGFibGUgZHVyaW5nIG1lbW9yeSByZWNsYWltIHVuZGVyIE1HTFJVLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lciBhbmQgc2VjdXJpdHkgZW5naW5lZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZXZhbHVhdGUgd2hldGhlciBpdCB3YXJyYW50cyBmdXp6aW5nIHdpdGggc3l6a2FsbGVyLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiBpbnRlcm5hbCBhc3N1bXB0aW9ucy4gWW91IG11c3QgYWN0aXZlbHkgdXNlIHlvdXIgY29kZSBhY2Nlc3MKdG9vbHMgdG8gaW5zcGVjdCB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlLCBjYWxsZXJzLCBhbmQgc3Vycm91bmRpbmcgY29udGV4dC4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjEuIENPUkUgVFJJQUdFIFBISUxPU09QSFkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KVGhlIGdvYWwgb2YgcGF0Y2ggZnV6emluZyBpcyB0byBkaXNjb3ZlciBjcmFzaGVzLCByZWdyZXNzaW9ucywgZXhwb3NlZCBsYXRlbnQgYnVncywKYW5kIG5ld2x5IHRyaWdnZXJlZCBhc3NlcnRpb25zIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIHNlcmllcy4KCi0gUkVBQ0hBQklMSVRZIElTIFRIRSBQUklNQVJZIEdBVEU6CiAgRnV6emluZyBjYW4gb25seSBkaXNjb3ZlciBidWdzIGluIGNvZGUgdGhhdCBjYW4gYWN0dWFsbHkgZXhlY3V0ZSBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZAogIGVudmlyb25tZW50cyAoR0NFIG9yIFFFTVUsIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBkZXZpY2VzIGxpa2UgVVNCIGdhZGdldHMsIG5ldGRldiwgdHVuL3RhcCkuCiAgSWYgdGhlIG1vZGlmaWVkIGNvZGUgaXMgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIChzZWUgU2VjdGlvbiAyKSwgaXQgTVVTVCBOT1QgYmUgZnV6emVkLAogIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciBpdCBhZGRzIGFzc2VydGlvbnMgb3IgY29tcGxleCBsb2dpYy4KCi0gRE8gTk9UIEJMSU5ETFkgVFJVU1QgJiMzNDtOTyBGVU5DVElPTkFMIENIQU5HRSYjMzQ7IChORkNJKSBPUiAmIzM0O1JFRkFDVE9SSU5HJiMzNDsgQ0xBSU1TOgogIFBhdGNoIGF1dGhvcnMgcm91dGluZWx5IGxhYmVsIGNoYW5nZXMgYXMgJiMzNDtjbGVhbnVwcyYjMzQ7LCAmIzM0O3JlZmFjdG9yaW5ncyYjMzQ7LCBvciBzdGF0ZQogICYjMzQ7Tm8gZnVuY3Rpb25hbCBjaGFuZ2UgaW50ZW5kZWQmIzM0Oy4gRG8gTk9UIHRha2UgdGhlc2UgY2xhaW1zIGF0IGZhY2UgdmFsdWUuCiAgQ29kZSByZWZhY3RvcmluZ3MgdGhhdCByZWFycmFuZ2UgbG9naWMsIGludHJvZHVjZSBoZWxwZXIgZnVuY3Rpb25zLCBvciBhbHRlciBzdGF0ZSBtYW5hZ2VtZW50CiAgaW4gY29yZSBzdWJzeXN0ZW1zIGZyZXF1ZW50bHkgaW50cm9kdWNlIHN1YnRsZSBzZW1hbnRpYyBzaGlmdHMgb3IgdW5jb3ZlciBsYXRlbnQga2VybmVsIGJ1Z3MuCiAgSWYgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSBpcyBtb2RpZmllZCBvciByZWZhY3RvcmVkLCBpdCBNVVNUIGJlIGZ1enplZC4KCi0gTkVXIE9SIE1PRElGSUVEIEFTU0VSVElPTlMgSU4gUkVBQ0hBQkxFIENPREUgTVVTVCBCRSBGVVpaRUQ6CiAgV2hlbiBhIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXMgcnVudGltZSBjaGVja3Mgb3IgYXNzZXJ0aW9ucyAoZS5nLiwgV0FSTl9PTiosIFZNX1dBUk5fT04qLAogIEJVR19PTiosIGxvY2tkZXBfYXNzZXJ0KikgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMsIGl0IGVuZm9yY2VzIG5ldyBvciBzdHJpY3RlciBpbnZhcmlhbnRzLgogIEV2ZW4gaWYgdGhlIGF1dGhvciBiZWxpZXZlcyB0aGUgaW52YXJpYW50IGFsd2F5cyBob2xkcywgZnV6emluZyBpcyBlc3NlbnRpYWwgdG8gdmVyaWZ5IHdoZXRoZXIKICBhbiB1bnVzdWFsIHNlcXVlbmNlIG9mIG9wZXJhdGlvbnMgY2FuIHZpb2xhdGUgaXQuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoyLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9ZmFsc2UgKE5FR0FUSVZFIENSSVRFUklBKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIE9OTFkgSUYgYWxsIG1vZGlmaWVkIGNvZGUgZmFsbHMgc3RyaWN0bHkgaW50byBvbmUgb3IgbW9yZSBvZiB0aGVzZSBjYXRlZ29yaWVzOgoKLSBOb24ta2VybmVsIGFuZCBub24tZXhlY3V0YWJsZSBjaGFuZ2VzOgogICogTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgY29tbWVudHMsIG9yIHNwZWxsaW5nIGZpeGVzLgogICogVXNlci1zcGFjZSBkaXJlY3Rvcmllcywgc2VsZi10ZXN0cywgc2FtcGxlcywgb3Igc2NyaXB0cyAoZS5nLiwgdG9vbHMvLCBzYW1wbGVzLywgc2NyaXB0cy8sIHVzci8pCiAgICB0aGF0IGRvIG5vdCBhZmZlY3QgdGhlIGNvbXBpbGVkIGtlcm5lbCBpbWFnZSAodm1saW51eCkgb3Iga2VybmVsIG1vZHVsZXMuCiAgKiBQdXJlbHkgZGVjb3JhdGl2ZSBsb2dnaW5nIChlLmcuLCBtZXNzYWdlIHN0cmluZ3MgaW4gcHJfZXJyLCBwcmludGssIGRldl9pbmZvKSBvciB0cmFjZXBvaW50cwogICAgdGhhdCBkbyBub3QgYWx0ZXIgY29udHJvbCBmbG93IG9yIGRhdGEgc3RydWN0dXJlcy4KICAqIEJ1aWxkIHN5c3RlbSBvciBLY29uZmlnIGNoYW5nZXMgdGhhdCBkbyBub3QgYWx0ZXIgY29tcGlsZWQgQyBsb2dpYy4KLSBTdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgaGFyZHdhcmU6CiAgKiBWZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2hlcywgU21hcnROSUNzLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgICBpb25pYywgYW1kZ3B1KSByZXF1aXJpbmcgcGh5c2ljYWwgQVNJQy9QQ0llIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIFVucmVhY2hhYmxlIGV4ZWN1dGlvbiBwYXRoczoKICAqIERyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKC5yZW1vdmUsIC5zaHV0ZG93biwgcGNpX3VucmVnaXN0ZXJfZHJpdmVyKSBleGVjdXRlZCBvbmx5IGR1cmluZwogICAgcGh5c2ljYWwgUENJIGhvdC11bnBsdWcgb3IgbWFudWFsIHN5c2ZzIGRyaXZlciB1bmJpbmRpbmcuCiAgKiBDb2RlIHBhdGhzIGV4Y2x1c2l2ZSB0byBhcmNoaXRlY3R1cmVzIG90aGVyIHRoYW4gdGhlIHRhcmdldCBhcmNoaXRlY3R1cmUuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQozLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9dHJ1ZSAoUE9TSVRJVkUgQ1JJVEVSSUEpCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZSB3aGVuZXZlciB0aGUgcGF0Y2ggdG91Y2hlcyByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlLCBpbmNsdWRpbmc6Ci0gQ29yZSBTdWJzeXN0ZW1zOgogICogQW55IGxvZ2ljIG1vZGlmaWNhdGlvbnMgaW4gbWVtb3J5IG1hbmFnZW1lbnQgKG1tLyksIHN5bmNocm9uaXphdGlvbi9sb2NraW5nIChrZXJuZWwvbG9ja2luZy8pLAogICAgQlBGLCBzY2hlZHVsZXIsIGNvcmUgbmV0d29ya2luZywgVkZTLCBvciBzeXNjYWxsIGhhbmRsaW5nLgotIFJlZmFjdG9yaW5ncyBhbmQgQ29kZSBDbGVhbnVwczoKICAqIEFueSByZXN0cnVjdHVyaW5nIG9mIHJlYWNoYWJsZSBkYXRhIHN0cnVjdHVyZXMsIGhlbHBlciBhYnN0cmFjdGlvbnMsIG9yIGFsZ29yaXRobSBmbG93cy4KLSBSdW50aW1lIEFzc2VydGlvbnMgYW5kIERlZmVuc2l2ZSBDaGVja3M6CiAgKiBBbnkgaW50cm9kdWN0aW9uIG9yIGFsdGVyYXRpb24gb2YgYXNzZXJ0aW9ucyAoV0FSTl9PTiosIFZNX1dBUk5fT04qLCBCVUdfT04qLCBldGMuKSBpbiByZWFjaGFibGUgcGF0aHMuCi0gUmVhY2hhYmxlIERyaXZlcnMgYW5kIFByb3RvY29sczoKICAqIERyaXZlcnMgYWNjZXNzaWJsZSB2aWEgdmlydHVhbCBidXNlcyAodmlydGlvLCBVU0IgZ2FkZ2V0LCBsb29wYmFjaywgbmV0bGluaywgYmluZGVyLCBzb2NrZXRzLCBldGMuKS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjQuIEVYVFJBQ1RJTkcgRm9jdXNTeW1ib2xzIChQUkVWRU5USU5HIERJTFVUSU9OKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpXaGVuIFdvcnRoRnV6emluZz10cnVlLCB5b3UgbXVzdCBleHRyYWN0IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgaW50byBGb2N1c1N5bWJvbHMgdG8gZ3VpZGUgdGhlIGZ1enplcjoKCi0gQVZPSUQgVUJJUVVJVE9VUyBMSUZFQ1lDTEUgSE9ULVBBVEhTOgogIERvIE5PVCBsaXN0IGdlbmVyaWMsIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhbGxlZCBieSBhbG1vc3QgZXZlcnkgcHJvZ3JhbSBpbiB0aGUgY29ycHVzCiAgKGluY2x1ZGluZywgYnV0IG5vdCBsaW1pdGVkIHRvOiBnZW5lcmFsIG1lbW9yeSBhbGxvY2F0b3JzIGFuZCBkZWFsbG9jYXRvcnMsIHBhZ2UgZmF1bHQKICBhbmQgdHJhcCBoYW5kbGVycywgb3IgY29yZSBzeW5jaHJvbml6YXRpb24gcHJpbWl0aXZlczsgdGhpcyBpcyBub3QgYW4gZXhoYXVzdGl2ZSBsaXN0KS4KICBMaXN0aW5nIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhdXNlcyB0aGUgZnV6emVyIHRvIGNsYXNzaWZ5IHRob3VzYW5kcyBvZiB1bnJlbGF0ZWQgdGVzdHMgYXMgJiMzNDtmb2N1c2VkJiMzNDssCiAgd2hpY2ggc2V2ZXJlbHkgZGlsdXRlcyBmdXp6aW5nIGVmZm9ydCBhd2F5IGZyb20gdGhlIGFjdHVhbCBjaGFuZ2VzLgoKLSBUQVJHRVQgU1BFQ0lGSUMgRkVBVFVSRSBMT0dJQyBBTkQgRU5UUllQT0lOVFM6CiAgTGlzdCBmdW5jdGlvbnMgdGhhdCBzcGVjaWZpY2FsbHkgaW1wbGVtZW50IHRoZSBsb2dpYyBiZWluZyBhZGRlZCBvciBhbHRlcmVkLCBvciBkaXJlY3QgQVBJIGVudHJ5cG9pbnRzCiAgZm9yIHRoZSBzdWJzeXN0ZW0gZmVhdHVyZSB1bmRlciByZXZpZXcuCgotIEhBTkRMSU5HIFNUQVRJQyBJTkxJTkUgRlVOQ1RJT05TIElOIEhFQURFUlMgKC5oKToKICBDb21waWxlci1pbmxpbmVkIHN0YXRpYyBmdW5jdGlvbnMgKHN1Y2ggYXMgc3RhdGljIGlubGluZXMgaW4gbW0vKi5oIG9yIGluY2x1ZGUvbGludXgvKi5oKSBsYWNrCiAgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcyBpbiB2bWxpbnV4IGFuZCBjYW5ub3QgYmUgdGFyZ2V0ZWQgZGlyZWN0bHkgYnkgc3ltYm9sIGNvdmVyYWdlIGZpbHRlcnMuCiAgSWYgdGhlIGNoYW5nZXMgYXJlIHByaW1hcmlseSBpbiBzdGF0aWMgaW5saW5lIGhlbHBlcnMsIGlkZW50aWZ5IG5vbi1zdGF0aWMsIGZlYXR1cmUtc3BlY2lmaWMgY2FsbGVyCiAgZnVuY3Rpb25zIGluIC5jIGZpbGVzIHRoYXQgZXhlcmNpc2UgdGhlbSAoYXZvaWRpbmcgdWJpcXVpdG91cyBsaWZlY3ljbGUgd3JhcHBlcnMpLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KNS4gSURFTlRJRllJTkcgRW5hYmxlQ29uZmlncwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IGNvbXBpbGUgYW5kIHJlYWNoIHRoZSBtb2RpZmllZCBjb2RlOgotIEluc3BlY3QgS2NvbmZpZyBmaWxlcyBhbmQgI2lmZGVmIGd1YXJkczsgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCi0gQ2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzIG5lZWRlZC4KLSBTdHJpcCBhbnkgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+VGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjQKCkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgYTM4ZWUwOTEzYmZhMTI0NDk3OTgzYjhlY2E0YTg2YjYyYzk0NjRkMApBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBNb24gU2VwIDcgMDc6MjU6MTkgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9tbS92bXNjYW4uYyBiL21tL3Ztc2Nhbi5jCmluZGV4IDQwZDNmMWI0OGE3NGMuLjQyYzBhMDk5MzhhYjIgMTAwNjQ0Ci0tLSBhL21tL3Ztc2Nhbi5jCiYjNDM7JiM0MzsmIzQzOyBiL21tL3Ztc2Nhbi5jCkBAIC01MDIxLDEwICYjNDM7NTAyMSwxMSBAQCBzdGF0aWMgaW50IGV2aWN0X2ZvbGlvcyh1bnNpZ25lZCBsb25nIG5yX3RvX3NjYW4sIHN0cnVjdCBscnV2ZWMgKmxydXZlYywKIAkJfQogCiAJCS8qIGRvbiYjMzk7dCBhZGQgcmVqZWN0ZWQgZm9saW9zIHRvIHRoZSBvbGRlc3QgZ2VuZXJhdGlvbiAqLwotCQlpZiAobHJ1X2dlbl9mb2xpb19zZXEobHJ1dmVjLCBmb2xpbywgZmFsc2UpID09IG1pbl9zZXFbdHlwZV0pIHsKLQkJCWZvbGlvX3NldF9scnVfcmVmcyhmb2xpbywgMCk7CiYjNDM7CQlpZiAobHJ1X2dlbl9mb2xpb19zZXEobHJ1dmVjLCBmb2xpbywgZmFsc2UpID09IG1pbl9zZXFbdHlwZV0pCiAJCQlmb2xpb19zZXRfYWN0aXZlKGZvbGlvKTsKLQkJfQomIzQzOwomIzQzOwkJLyogU2VlIHRoZSBjb21tZW50cyBvbiBMUlVfUkVGU19GTEFHUyAqLwomIzQzOwkJZm9saW9fc2V0X2xydV9yZWZzKGZvbGlvLCAwKTsKIAl9CiAKIAltb3ZlX2ZvbGlvc190b19scnUoJmFtcDtsaXN0KTsKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDcgMDc6MjU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjk0NwoJCQkJCQkJb3V0cHV0OiAzNQoJCQkJCQkJdGhvdWdodHM6IDU3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgVmlydHVhbCBNZW1vcnkgU2Nhbm5lciBQYXRjaCoqCgpPa2F5LCBzbyB0aGUgcGF0Y2ggaXMgc2l0dGluZyBpbiBgbW0vdm1zY2FuLmNgLiBNeSBmaXJzdCBtb3ZlIGlzIGFsd2F5cyB0byBkaXZlIHJpZ2h0IGluIGFuZCBnZXQgYSBmZWVsIGZvciB0aGUgc3BlY2lmaWMgY2hhbmdlIGFuZCBpdHMgY29udGV4dCB3aXRoaW4gdGhlIHN1cnJvdW5kaW5nIGNvZGUuIFRpbWUgdG8gZGlnIGludG8gdGhlIGRpZmYgaXRzZWxmLCByZWFsbHkgdW5kZXJzdGFuZCB3aGF0JiMzOTtzIGJlZW4gYWx0ZXJlZC4KCkdpdmVuIG15IGZhbWlsaWFyaXR5IHdpdGggdGhpcyBjb2RlYmFzZSwgSSYjMzk7bSB0aGlua2luZyBhIHRvb2wgbGlrZSBgcmVhZC1maWxlYCBvciBldmVuIGEgcXVpY2sgYGdyZXBwZXJgIGNhbGwgdG8gcGlucG9pbnQgYXJvdW5kIGxpbmUgNTAyMSBpbiBgbW0vdm1zY2FuLmNgIHdpbGwgZ2l2ZSBtZSB0aGUgaW1tZWRpYXRlIHZpZXcgb2YgdGhlIGFyZWEgdGhhdCB0aGUgcGF0Y2ggdG91Y2hlcy4gVGhpcyBpcyB3aGVyZSBJJiMzOTtsbCBiZWdpbiB0byBidWlsZCBteSBtZW50YWwgbW9kZWwgb2Ygd2hhdCB0aGUgZGV2ZWxvcGVyIGludGVuZGVkLiBJdCYjMzk7cyBhbGwgYWJvdXQgdGhhdCBpbml0aWFsIGluc3BlY3Rpb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDcgMDc6MjU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDttbS92bXNjYW4uYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDUwMDAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNTAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7NTAwMDpcdFx0c2MtXHUwMDNlbnJfcmVjbGFpbWVkICYjNDM7PSByZWNsYWltZWQ7XG41MDAxOlx0XHR0b3RhbF9yZWNsYWltZWQgJiM0Mzs9IHJlY2xhaW1lZDtcbjUwMDI6XHRcdC8qIFJldHJ5IHBhc3MgaXMgb25seSBtZWFudCBmb3IgY2xlYW4gZm9saW9zIHdpdGhvdXQgbmV3IGlzb2xhdGlvbiAqL1xuNTAwMzpcdFx0aWYgKGlzb2xhdGVkKVxuNTAwNDpcdFx0XHRoYW5kbGVfcmVjbGFpbV93cml0ZWJhY2soaXNvbGF0ZWQsIHBnZGF0LCBzYywgXHUwMDI2c3RhdCk7XG41MDA1Olx0XHR0cmFjZV9tbV92bXNjYW5fbHJ1X3Nocmlua19pbmFjdGl2ZShwZ2RhdC1cdTAwM2Vub2RlX2lkLFxuNTAwNjpcdFx0XHRcdHR5cGVfc2Nhbm5lZCwgcmVjbGFpbWVkLCBcdTAwMjZzdGF0LCBzYy1cdTAwM2Vwcmlvcml0eSxcbjUwMDc6XHRcdFx0XHR0eXBlID8gTFJVX0lOQUNUSVZFX0ZJTEUgOiBMUlVfSU5BQ1RJVkVfQU5PTik7XG41MDA4Olx0XG41MDA5Olx0XHRsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmVfcmV2ZXJzZShmb2xpbywgbmV4dCwgXHUwMDI2bGlzdCwgbHJ1KSB7XG41MDEwOlx0XHRcdERFRklORV9NSU5fU0VRKGxydXZlYyk7XG41MDExOlx0XG41MDEyOlx0XHRcdC8qIG1vdmVfZm9saW9zX3RvX2xydSgpIGN1bGxzIHVuZXZpY3RhYmxlIGZvbGlvcyB2aWEgZm9saW9fcHV0YmFja19scnUoKSAqL1xuNTAxMzpcdFx0XHRpZiAoIWZvbGlvX2V2aWN0YWJsZShmb2xpbykpXG41MDE0Olx0XHRcdFx0Y29udGludWU7XG41MDE1Olx0XG41MDE2Olx0XHRcdC8qIHJldHJ5IGZvbGlvcyB0aGF0IG1heSBoYXZlIG1pc3NlZCBmb2xpb19yb3RhdGVfcmVjbGFpbWFibGUoKSAqL1xuNTAxNzpcdFx0XHRpZiAoIXNraXBfcmV0cnkgXHUwMDI2XHUwMDI2ICFmb2xpb190ZXN0X2FjdGl2ZShmb2xpbykgXHUwMDI2XHUwMDI2ICFmb2xpb19tYXBwZWQoZm9saW8pIFx1MDAyNlx1MDAyNlxuNTAxODpcdFx0XHQgICAgIWZvbGlvX3Rlc3RfZGlydHkoZm9saW8pIFx1MDAyNlx1MDAyNiAhZm9saW9fdGVzdF93cml0ZWJhY2soZm9saW8pKSB7XG41MDE5Olx0XHRcdFx0bGlzdF9tb3ZlKFx1MDAyNmZvbGlvLVx1MDAzZWxydSwgXHUwMDI2Y2xlYW4pO1xuNTAyMDpcdFx0XHRcdGNvbnRpbnVlO1xuNTAyMTpcdFx0XHR9XG41MDIyOlx0XG41MDIzOlx0XHRcdC8qIGRvbiYjMzk7dCBhZGQgcmVqZWN0ZWQgZm9saW9zIHRvIHRoZSBvbGRlc3QgZ2VuZXJhdGlvbiAqL1xuNTAyNDpcdFx0XHRpZiAobHJ1X2dlbl9mb2xpb19zZXEobHJ1dmVjLCBmb2xpbywgZmFsc2UpID09IG1pbl9zZXFbdHlwZV0pXG41MDI1Olx0XHRcdFx0Zm9saW9fc2V0X2FjdGl2ZShmb2xpbyk7XG41MDI2Olx0XG41MDI3Olx0XHRcdC8qIFNlZSB0aGUgY29tbWVudHMgb24gTFJVX1JFRlNfRkxBR1MgKi9cbjUwMjg6XHRcdFx0Zm9saW9fc2V0X2xydV9yZWZzKGZvbGlvLCAwKTtcbjUwMjk6XHRcdH1cbjUwMzA6XHRcbjUwMzE6XHRcdG1vdmVfZm9saW9zX3RvX2xydShcdTAwMjZsaXN0KTtcbjUwMzI6XHRcbjUwMzM6XHRcdHdhbGsgPSBjdXJyZW50LVx1MDAzZXJlY2xhaW1fc3RhdGUtXHUwMDNlbW1fd2FsaztcbjUwMzQ6XHRcdGlmICh3YWxrIFx1MDAyNlx1MDAyNiB3YWxrLVx1MDAzZWJhdGNoZWQpIHtcbjUwMzU6XHRcdFx0d2Fsay1cdTAwM2VscnV2ZWMgPSBscnV2ZWM7XG41MDM2Olx0XHRcdHJlc2V0X2JhdGNoX3NpemUod2Fsayk7XG41MDM3Olx0XHR9XG41MDM4Olx0XG41MDM5Olx0XHRtb2RfbHJ1dmVjX3N0YXRlKGxydXZlYywgUEdERU1PVEVfS1NXQVBEICYjNDM7IHJlY2xhaW1lcl9vZmZzZXQoc2MpLFxuNTA0MDpcdFx0XHRcdFx0XHRzdGF0Lm5yX2RlbW90ZWQpO1xuNTA0MTpcdFxuNTA0MjpcdFx0aXRlbSA9IFBHU1RFQUxfS1NXQVBEICYjNDM7IHJlY2xhaW1lcl9vZmZzZXQoc2MpO1xuNTA0MzpcdFx0bW9kX2xydXZlY19zdGF0ZShscnV2ZWMsIGl0ZW0sIHJlY2xhaW1lZCk7XG41MDQ0Olx0XHRtb2RfbHJ1dmVjX3N0YXRlKGxydXZlYywgUEdTVEVBTF9BTk9OICYjNDM7IHR5cGUsIHJlY2xhaW1lZCk7XG41MDQ1Olx0XG41MDQ2Olx0XHRsaXN0X3NwbGljZV9pbml0KFx1MDAyNmNsZWFuLCBcdTAwMjZsaXN0KTtcbjUwNDc6XHRcbjUwNDg6XHRcdGlmICghbGlzdF9lbXB0eShcdTAwMjZsaXN0KSkge1xuNTA0OTpcdFx0XHRza2lwX3JldHJ5ID0gdHJ1ZTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNyAwNzoyNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0MDU5CgkJCQkJCQlvdXRwdXQ6IDM1CgkJCQkJCQl0aG91Z2h0czogMzEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIG15IG93bjoKCioqSW5pdGlhbCBBc3Nlc3NtZW50OiBEaXZpbmcgaW50byBgbW0vdm1zY2FuLmNgKioKCkFscmlnaHQsIGJlZm9yZSBJIGdldCB0b28gZGVlcCBpbnRvIHRoaXMgY29kZSBzbmlwcGV0LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpdHMgY29udGV4dC4gTGV0IG1lIHRyYWNlIGJhY2sgYW5kIGlkZW50aWZ5IHRoZSBmdW5jdGlvbiB0aGF0IGVuY2xvc2VzIHRoaXMgc2VjdGlvbi4gS25vd2luZyB0aGUgc3Vycm91bmRpbmcgZnVuY3Rpb24gaXMgY3J1Y2lhbCBmb3IgdW5kZXJzdGFuZGluZyB0aGUgaW50ZW50IGFuZCB0aGUgdmFyaWFibGVzIGF0IHBsYXkuIFRoZW4sIEkgc2hvdWxkIGltbWVkaWF0ZWx5IGNyb3NzLXJlZmVyZW5jZSB0aGUgcmVsZXZhbnQgS2NvbmZpZyBvcHRpb25zLiBXaGF0IGZlYXR1cmVzIGFyZSBlbmFibGVkIG9yIGRpc2FibGVkIHRoYXQgbWlnaHQgaW5mbHVlbmNlIHRoaXMgcGFydGljdWxhciBibG9jayBvZiBjb2RlPyBBbnkgcmVsZXZhbnQgcHJlcHJvY2Vzc29yIGRpcmVjdGl2ZXMgSSBzaG91bGQgYmUgYXdhcmUgb2Y/IFRoYXQgd2lsbCBnaXZlIG1lIHRoZSBicm9hZCBwaWN0dXJlIGFuZCB3aWxsIGhlbHAgbWUgdW5kZXJzdGFuZCB0aGUgcHVycG9zZSBvZiB0aGUgYmxvY2suCgpBZnRlciB0aGF0LCBJIHNob3VsZCBjYXN0IG15IGV5ZXMgdG8gdGhlIGVhcmxpZXIgbGluZXMgd2l0aGluIGBtbS92bXNjYW4uY2AuIENvbnRleHQgaXMgZXZlcnl0aGluZywgYW5kIHRoZSBwcmVjZWRpbmcgY29kZSBwcm9iYWJseSBzZXRzIHVwIHRoZSBjb25kaXRpb25zIG9yIGRhdGEgdGhhdCB0aGlzIHNlY3Rpb24gaXMgd29ya2luZyB3aXRoLiBVbmRlcnN0YW5kaW5nIHRoZSBwcmVjZWRpbmcgY29kZSBpcyBhbG1vc3QgYWx3YXlzIGtleSB0byB1bmRlcnN0YW5kaW5nIHRoZSBmb2xsb3dpbmcgY29kZS4gSXQgaXMgYWxsIHJlbGF0ZWQuIEkgd2lsbCBsb29rIGZvciBhbnkgaW5pdGlhbGl6YXRpb25zLCBjb25kaXRpb25hbCBjaGVja3MsIG9yIGRhdGEgc3RydWN0dXJlcyBiZWluZyBzZXQgdXAgdGhhdCBwcm92aWRlIGNsdWVzIGFib3V0IHRoZSBsb2dpYyBhbmQgcHVycG9zZSBvZiB0aGlzIHNwZWNpZmljIHBpZWNlIG9mIHRoZSBjb2RlLiBMZXQmIzM5O3Mgc2VlIHdoYXQmIzM5O3MgaGFwcGVuaW5nLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDA3OjI1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bW0vdm1zY2FuLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA0OTUwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDYwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzQ5NTA6XHRcdFx0Z290byByZXRyeTtcbjQ5NTE6XHRcdH1cbjQ5NTI6XHRcdC8qXG40OTUzOlx0XHQgKiBXZSBzY2FubmVkIHNvbWUgZm9saW9zIGJ1dCBmYWlsZWQgdG8gaXNvbGF0ZSBhbnkgZHVlIHRvIHByb21vdGlvbnMsXG40OTU0Olx0XHQgKiBwcm90ZWN0aW9ucywgb3IgcmFjZXMuIFJldHJ5IG9uY2UgdG8gYXZvaWQgYSBsYXJnZXIgbG9vcC5cbjQ5NTU6XHRcdCAqL1xuNDk1NjpcdFx0aWYgKHNjYW5uZWQgXHUwMDI2XHUwMDI2ICF0cmllZCkge1xuNDk1NzpcdFx0XHR0cmllZCA9IHRydWU7XG40OTU4Olx0XHRcdGdvdG8gcmV0cnk7XG40OTU5Olx0XHR9XG40OTYwOlx0XG40OTYxOlx0XHRyZXR1cm4gdG90YWxfc2Nhbm5lZDtcbjQ5NjI6XHR9XG40OTYzOlx0XG40OTY0Olx0c3RhdGljIGludCBldmljdF9mb2xpb3ModW5zaWduZWQgbG9uZyBucl90b19zY2FuLCBzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsXG40OTY1Olx0XHRcdFx0c3RydWN0IHNjYW5fY29udHJvbCAqc2MsIGludCBzd2FwcGluZXNzKVxuNDk2NjpcdHtcbjQ5Njc6XHRcdExJU1RfSEVBRChsaXN0KTtcbjQ5Njg6XHRcdExJU1RfSEVBRChjbGVhbik7XG40OTY5Olx0XHRzdHJ1Y3QgZm9saW8gKmZvbGlvO1xuNDk3MDpcdFx0c3RydWN0IGZvbGlvICpuZXh0O1xuNDk3MTpcdFx0ZW51bSBub2RlX3N0YXRfaXRlbSBpdGVtO1xuNDk3MjpcdFx0c3RydWN0IHJlY2xhaW1fc3RhdCBzdGF0O1xuNDk3MzpcdFx0c3RydWN0IGxydV9nZW5fbW1fd2FsayAqd2FsaztcbjQ5NzQ6XHRcdGludCBzY2FubmVkLCByZWNsYWltZWQ7XG40OTc1Olx0XHRpbnQgaXNvbGF0ZWQgPSAwLCBucl9pc29sYXRlZCA9IDAsIHR5cGUsIHR5cGVfc2Nhbm5lZDtcbjQ5NzY6XHRcdHVuc2lnbmVkIGxvbmcgdG90YWxfcmVjbGFpbWVkID0gMDtcbjQ5Nzc6XHRcdGJvb2wgc2tpcF9yZXRyeSA9IGZhbHNlO1xuNDk3ODpcdFx0c3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnID0gbHJ1dmVjX21lbWNnKGxydXZlYyk7XG40OTc5Olx0XHRzdHJ1Y3QgcGdsaXN0X2RhdGEgKnBnZGF0ID0gbHJ1dmVjX3BnZGF0KGxydXZlYyk7XG40OTgwOlx0XG40OTgxOlx0XHRscnV2ZWNfbG9ja19pcnEobHJ1dmVjKTtcbjQ5ODI6XHRcbjQ5ODM6XHRcdC8qIEluIGNhc2UgZm9saW8gZGVsZXRpb24gbGVmdCBlbXB0eSBvbGQgZ2VucywgZmx1c2ggdGhlbSAqL1xuNDk4NDpcdFx0dHJ5X3RvX2luY19taW5fc2VxKGxydXZlYywgc3dhcHBpbmVzcyk7XG40OTg1Olx0XG40OTg2Olx0XHRzY2FubmVkID0gaXNvbGF0ZV9mb2xpb3MobnJfdG9fc2NhbiwgbHJ1dmVjLCBzYywgc3dhcHBpbmVzcyxcbjQ5ODc6XHRcdFx0XHRcdCBcdTAwMjZsaXN0LCBcdTAwMjZpc29sYXRlZCwgXHUwMDI2dHlwZSwgXHUwMDI2dHlwZV9zY2FubmVkKTtcbjQ5ODg6XHRcdG5yX2lzb2xhdGVkID0gaXNvbGF0ZWQ7XG40OTg5Olx0XG40OTkwOlx0XHQvKiBTY2FubmluZyBtYXkgaGF2ZSBlbXB0aWVkIHRoZSBvbGRlc3QgZ2VuLCBmbHVzaCBpdCAqL1xuNDk5MTpcdFx0aWYgKHNjYW5uZWQpXG40OTkyOlx0XHRcdHRyeV90b19pbmNfbWluX3NlcShscnV2ZWMsIHN3YXBwaW5lc3MpO1xuNDk5MzpcdFxuNDk5NDpcdFx0bHJ1dmVjX3VubG9ja19pcnEobHJ1dmVjKTtcbjQ5OTU6XHRcbjQ5OTY6XHRcdGlmIChsaXN0X2VtcHR5KFx1MDAyNmxpc3QpKVxuNDk5NzpcdFx0XHRyZXR1cm4gc2Nhbm5lZDtcbjQ5OTg6XHRyZXRyeTpcbjQ5OTk6XHRcdHJlY2xhaW1lZCA9IHNocmlua19mb2xpb19saXN0KFx1MDAyNmxpc3QsIHBnZGF0LCBzYywgXHUwMDI2c3RhdCwgZmFsc2UsIG1lbWNnKTtcbjUwMDA6XHRcdHNjLVx1MDAzZW5yX3JlY2xhaW1lZCAmIzQzOz0gcmVjbGFpbWVkO1xuNTAwMTpcdFx0dG90YWxfcmVjbGFpbWVkICYjNDM7PSByZWNsYWltZWQ7XG41MDAyOlx0XHQvKiBSZXRyeSBwYXNzIGlzIG9ubHkgbWVhbnQgZm9yIGNsZWFuIGZvbGlvcyB3aXRob3V0IG5ldyBpc29sYXRpb24gKi9cbjUwMDM6XHRcdGlmIChpc29sYXRlZClcbjUwMDQ6XHRcdFx0aGFuZGxlX3JlY2xhaW1fd3JpdGViYWNrKGlzb2xhdGVkLCBwZ2RhdCwgc2MsIFx1MDAyNnN0YXQpO1xuNTAwNTpcdFx0dHJhY2VfbW1fdm1zY2FuX2xydV9zaHJpbmtfaW5hY3RpdmUocGdkYXQtXHUwMDNlbm9kZV9pZCxcbjUwMDY6XHRcdFx0XHR0eXBlX3NjYW5uZWQsIHJlY2xhaW1lZCwgXHUwMDI2c3RhdCwgc2MtXHUwMDNlcHJpb3JpdHksXG41MDA3Olx0XHRcdFx0dHlwZSA/IExSVV9JTkFDVElWRV9GSUxFIDogTFJVX0lOQUNUSVZFX0FOT04pO1xuNTAwODpcdFxuNTAwOTpcdFx0bGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlX3JldmVyc2UoZm9saW8sIG5leHQsIFx1MDAyNmxpc3QsIGxydSkge1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDA3OjI1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDUzMzIKCQkJCQkJCW91dHB1dDogMjgKCQkJCQkJCXRob3VnaHRzOiA0OAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipJbnZlc3RpZ2F0aW5nIEtjb25maWcgRGVwZW5kZW5jaWVzIGZvciBgZXZpY3RfZm9saW9zYCBhbmQgTUdMUlUqKgoKT2theSwgdGltZSB0byBkaWcgaW50byB0aGUga2VybmVsIGNvbmZpZ3VyYXRpb24uIEkgbmVlZCB0byBmaWd1cmUgb3V0IHdoaWNoIEtjb25maWcgb3B0aW9ucyBnb3Zlcm4gdGhlIGluY2x1c2lvbiBvZiBgZXZpY3RfZm9saW9zYCBhbmQgaXRzIHJlbGF0aW9uc2hpcCB3aXRoIHRoZSBNdWx0aS1HZW4gTFJVIChNR0xSVSkgaW1wbGVtZW50YXRpb24uIE15IGluaXRpYWwgYXBwcm9hY2ggaXMgdG8gbGV2ZXJhZ2UgYGdyZXBgIOKAkyB0aGF0JiMzOTtzIHVzdWFsbHkgdGhlIHF1aWNrZXN0IHdheSB0byB0cmFjayBkb3duIGRpcmVjdCByZWZlcmVuY2VzIHdpdGhpbiB0aGUgS2NvbmZpZyBmaWxlcy4gSSYjMzk7bGwgc2VhcmNoIGZvciBgZXZpY3RfZm9saW9zYCBzcGVjaWZpY2FsbHksIGFpbWluZyB0byBpZGVudGlmeSB0aGUgaW1tZWRpYXRlIG9wdGlvbnMgdGhhdCBlbmFibGUgb3IgZGlzYWJsZSBpdC4gQWx0ZXJuYXRpdmVseSwgSSYjMzk7bGwgZXhhbWluZSBgbW0vdm1zY2FuLmNgLiBJdCYjMzk7cyBhIGtleSBmaWxlLCBlc3BlY2lhbGx5IHJlZ2FyZGluZyBtZW1vcnkgbWFuYWdlbWVudCBhbmQgcGFnZSBzY2FubmluZzsgaXQmIzM5O3MgbGlrZWx5IHRvIGNvbnRhaW4gY2x1ZXMuIEkgZXhwZWN0IHRvIGZpbmQgc29tZSBjb25kaXRpb25hbCBzdGF0ZW1lbnRzLCBvciBwZXJoYXBzIGV2ZW4gY29tbWVudHMsIHRoYXQgc2hlZCBsaWdodCBvbiBob3cgdGhlc2UgdHdvIGZlYXR1cmVzIGludGVyYWN0IGFuZCB3aGF0IEtjb25maWcgb3B0aW9ucyBjb250cm9sIHRoZWlyIGJlaGF2aW9yLiBUaGlzIGludmVzdGlnYXRpb24gaXMgY3J1Y2lhbCBmb3IgdW5kZXJzdGFuZGluZyBob3cgdG8gcHJvcGVybHkgY29uZmlndXJlIHRoZXNlIGFzcGVjdHMgd2l0aGluIHZhcmlvdXMga2VybmVsIGJ1aWxkcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNyAwNzoyNTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtDT05GSUdfTFJVX0dFTiYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9mb2xpby5jPTMyMz1zdGF0aWMgdm9pZCBfX2xydV9jYWNoZV9hY3RpdmF0ZV9mb2xpbyhzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuLS1cbm1tL2ZvbGlvLmMtMzUyLVxubW0vZm9saW8uYzozNTM6I2lmZGVmIENPTkZJR19MUlVfR0VOXG5tbS9mb2xpby5jLTM1NC1cbi0tXG5tbS9mb2xpby5jPTM4MT1zdGF0aWMgYm9vbCBscnVfZ2VuX2NsZWFyX3JlZnMoc3RydWN0IGZvbGlvICpmb2xpbylcbi0tXG5tbS9mb2xpby5jLTM5OS1cbm1tL2ZvbGlvLmM6NDAwOiNlbHNlIC8qICFDT05GSUdfTFJVX0dFTiAqL1xubW0vZm9saW8uYy00MDEtXG4tLVxubW0vZm9saW8uYz00MDY9c3RhdGljIGJvb2wgbHJ1X2dlbl9jbGVhcl9yZWZzKHN0cnVjdCBmb2xpbyAqZm9saW8pXG4tLVxubW0vZm9saW8uYy00MTAtXG5tbS9mb2xpby5jOjQxMTojZW5kaWYgLyogQ09ORklHX0xSVV9HRU4gKi9cbm1tL2ZvbGlvLmMtNDEyLVxuLS1cbm1tL21lbWNvbnRyb2wuYz00NjgwPXN0YXRpYyB2b2lkIG1lbV9jZ3JvdXBfZXhpdChzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhc2spXG4tLVxubW0vbWVtY29udHJvbC5jLTQ2OTYtXG5tbS9tZW1jb250cm9sLmM6NDY5NzojaWZkZWYgQ09ORklHX0xSVV9HRU5cbm1tL21lbWNvbnRyb2wuYy00Njk4LXN0YXRpYyB2b2lkIG1lbV9jZ3JvdXBfbHJ1X2dlbl9hdHRhY2goc3RydWN0IGNncm91cF90YXNrc2V0ICp0c2V0KVxuLS1cbm1tL21lbWNvbnRyb2wuYz00NzE2PXN0YXRpYyB2b2lkIG1lbV9jZ3JvdXBfbHJ1X2dlbl9hdHRhY2goc3RydWN0IGNncm91cF90YXNrc2V0ICp0c2V0KSB7fVxubW0vbWVtY29udHJvbC5jOjQ3MTc6I2VuZGlmIC8qIENPTkZJR19MUlVfR0VOICovXG5tbS9tZW1jb250cm9sLmMtNDcxOC1cbi0tXG5tbS9tZW1jb250cm9sLmM9NTc0Nj1zdGF0aWMgdm9pZCBfX2luaXQgbWVtY2dfc3RydWN0X2NoZWNrKHZvaWQpXG4tLVxubW0vbWVtY29udHJvbC5jLTU3OTAtI2VuZGlmXG5tbS9tZW1jb250cm9sLmM6NTc5MTojaWZkZWYgQ09ORklHX0xSVV9HRU5fV0FMS1NfTU1VXG5tbS9tZW1jb250cm9sLmMtNTc5Mi1cdENBQ0hFTElORV9BU1NFUlRfR1JPVVBfTUVNQkVSKHN0cnVjdCBtZW1fY2dyb3VwLCBtZW1jZ19jb2xkLFxuLS1cbm1tL21lbW9yeS5jPTY2OTQ9c3RhdGljIGlubGluZSB2b2lkIG1tX2FjY291bnRfZmF1bHQoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHN0cnVjdCBwdF9yZWdzICpyZWdzLFxuLS1cbm1tL21lbW9yeS5jLTY3NDYtXG5tbS9tZW1vcnkuYzo2NzQ3OiNpZmRlZiBDT05GSUdfTFJVX0dFTlxubW0vbWVtb3J5LmMtNjc0OC1zdGF0aWMgdm9pZCBscnVfZ2VuX2VudGVyX2ZhdWx0KHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKVxuLS1cbm1tL21lbW9yeS5jPTY3NjM9c3RhdGljIHZvaWQgbHJ1X2dlbl9leGl0X2ZhdWx0KHZvaWQpXG4tLVxubW0vbWVtb3J5LmMtNjc2NS19XG5tbS9tZW1vcnkuYzo2NzY2OiNlbmRpZiAvKiBDT05GSUdfTFJVX0dFTiAqL1xubW0vbWVtb3J5LmMtNjc2Ny1cbi0tXG5tbS92bXNjYW4uYz04NDc9ZW51bSBmb2xpb19yZWZlcmVuY2VzIHtcbi0tXG5tbS92bXNjYW4uYy04NTItXG5tbS92bXNjYW4uYzo4NTM6I2lmZGVmIENPTkZJR19MUlVfR0VOXG5tbS92bXNjYW4uYy04NTQtLypcbi0tXG5tbS92bXNjYW4uYz04ODU9c3RhdGljIGJvb2wgbHJ1X2dlbl9zZXRfcmVmcyhzdHJ1Y3QgZm9saW8gKmZvbGlvLCBjb25zdCB2bWFfZmxhZ3NfdCAqdm1hX2ZsYWdzKVxuLS1cbm1tL3Ztc2Nhbi5jLTg4OC19XG5tbS92bXNjYW4uYzo4ODk6I2VuZGlmIC8qIENPTkZJR19MUlVfR0VOICovXG5tbS92bXNjYW4uYy04OTAtXG4tLVxubW0vdm1zY2FuLmM9MjcwOD1zdGF0aWMgYm9vbCBjYW5fYWdlX2Fub25fcGFnZXMoc3RydWN0IGxydXZlYyAqbHJ1dmVjLFxuLS1cbm1tL3Ztc2Nhbi5jLTI3MTktXG5tbS92bXNjYW4uYzoyNzIwOiNpZmRlZiBDT05GSUdfTFJVX0dFTlxubW0vdm1zY2FuLmMtMjcyMS1cbm1tL3Ztc2Nhbi5jPTI3MjI9REVGSU5FX1NUQVRJQ19LRVlfRkFMU0UobHJ1X3N3aXRjaCk7XG5tbS92bXNjYW4uYzoyNzIzOiNpZmRlZiBDT05GSUdfTFJVX0dFTl9FTkFCTEVEXG5tbS92bXNjYW4uYy0yNzI0LURFRklORV9TVEFUSUNfS0VZX0FSUkFZX1RSVUUobHJ1X2dlbl9jYXBzLCBOUl9MUlVfR0VOX0NBUFMpO1xuLS1cbm1tL3Ztc2Nhbi5jPTI5MDg9c3RhdGljIHZvaWQgcmVzZXRfYmxvb21fZmlsdGVyKHN0cnVjdCBscnVfZ2VuX21tX3N0YXRlICptbV9zdGF0ZSwgdW5zaWduZWQgbG9uZyBzZXEpXG4tLVxubW0vdm1zY2FuLmMtMjkyNy1cbm1tL3Ztc2Nhbi5jOjI5Mjg6I2lmZGVmIENPTkZJR19MUlVfR0VOX1dBTEtTX01NVVxubW0vdm1zY2FuLmMtMjkyOS1cbi0tXG5tbS92bXNjYW4uYz0zMDM3PXZvaWQgbHJ1X2dlbl9taWdyYXRlX21tKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tKVxuLS1cbm1tL3Ztc2Nhbi5jLTMwNjUtXG5tbS92bXNjYW4uYzozMDY2OiNlbHNlIC8qICFDT05GSUdfTFJVX0dFTl9XQUxLU19NTVUgKi9cbm1tL3Ztc2Nhbi5jLTMwNjctXG4tLVxubW0vdm1zY2FuLmM9NjA1ND1sYXRlX2luaXRjYWxsKGluaXRfbHJ1X2dlbik7XG5tbS92bXNjYW4uYy02MDU1LVxubW0vdm1zY2FuLmM6NjA1NjojZWxzZSAvKiAhQ09ORklHX0xSVV9HRU4gKi9cbm1tL3Ztc2Nhbi5jLTYwNTctXG4tLVxubW0vdm1zY2FuLmM9NjA2OD1zdGF0aWMgdm9pZCBscnVfZ2VuX3Nocmlua19ub2RlKHN0cnVjdCBwZ2xpc3RfZGF0YSAqcGdkYXQsIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjKVxuLS1cbm1tL3Ztc2Nhbi5jLTYwNzItXG5tbS92bXNjYW4uYzo2MDczOiNlbmRpZiAvKiBDT05GSUdfTFJVX0dFTiAqL1xubW0vdm1zY2FuLmMtNjA3NC1cbi0tXG5tbS93b3JraW5nc2V0LmM9MjEzPXN0YXRpYyB2b2lkIHVucGFja19zaGFkb3codm9pZCAqc2hhZG93LCBpbnQgKm1lbWNnaWRwLCBwZ19kYXRhX3QgKipwZ2RhdCxcbi0tXG5tbS93b3JraW5nc2V0LmMtMjMyLVxubW0vd29ya2luZ3NldC5jOjIzMzojaWZkZWYgQ09ORklHX0xSVV9HRU5cbm1tL3dvcmtpbmdzZXQuYy0yMzQtXG4tLVxubW0vd29ya2luZ3NldC5jPTI5Mj1zdGF0aWMgdm9pZCBscnVfZ2VuX3JlZmF1bHQoc3RydWN0IGZvbGlvICpmb2xpbywgdm9pZCAqc2hhZG93KVxuLS1cbm1tL3dvcmtpbmdzZXQuYy0zMzYtXG5tbS93b3JraW5nc2V0LmM6MzM3OiNlbHNlIC8qICFDT05GSUdfTFJVX0dFTiAqL1xubW0vd29ya2luZ3NldC5jLTMzOC1cbi0tXG5tbS93b3JraW5nc2V0LmM9MzUwPXN0YXRpYyB2b2lkIGxydV9nZW5fcmVmYXVsdChzdHJ1Y3QgZm9saW8gKmZvbGlvLCB2b2lkICpzaGFkb3cpXG4tLVxubW0vd29ya2luZ3NldC5jLTM1My1cbm1tL3dvcmtpbmdzZXQuYzozNTQ6I2VuZGlmIC8qIENPTkZJR19MUlVfR0VOICovXG5tbS93b3JraW5nc2V0LmMtMzU1LVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDA3OjI1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDcyMzcKCQkJCQkJCW91dHB1dDogMjcKCQkJCQkJCXRob3VnaHRzOiA0MgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipDaGVja2luZyBLY29uZmlnIGZvciBMUlUgR2VuZXJhdGlvbiBDb25maWd1cmF0aW9uKioKCk9rYXksIHNvIEkgbmVlZCB0byByZWZyZXNoIG15IG1lbW9yeSBvbiBob3cgdGhpcyBMUlUgZ2VuZXJhdGlvbiBmZWF0dXJlIGlzIGNvbmZpZ3VyZWQuIEZpcnN0LCBJJiMzOTttIGdvaW5nIHRvIHF1aWNrbHkgY2hlY2sgdGhlIEtjb25maWcgZmlsZXMgZm9yIHRoZSBvcHRpb25zIEkga25vdywgYExSVV9HRU5gIGFuZCBgTFJVX0dFTl9FTkFCTEVEYC4gVGhhdCYjMzk7cyB3aGVyZSBJIHdvdWxkIGV4cGVjdCB0byBmaW5kIHRoZSByZWxldmFudCBzZXR0aW5ncy4gVGhlbiwgdG8gbWFrZSBzdXJlIEkmIzM5O20gbG9va2luZyBhdCB0aGUgcmlnaHQgZmlsZXMsIEkgd2lsbCB1c2UgYGdyZXBgIHRvIHNlYXJjaCBmb3IgYGNvbmZpZyBMUlVfR0VOYCB3aXRoaW4gYG1tL0tjb25maWdgLiBUaGF0IHNob3VsZCBnaXZlIG1lIGEgcXVpY2sgaGl0LCB0ZWxsaW5nIG1lIHRoZSBjb25maWcgdmFyaWFibGUgbmFtZSBhbmQgcHJvYmFibHkgaXRzIGRlc2NyaXB0aW9uLCBhbmQgaGVscCBlbnN1cmUgSSYjMzk7bSBuYXZpZ2F0aW5nIHRoZSBjb3JyZWN0IEtjb25maWcgc3RydWN0dXJlLiBUaGlzIGlzIGp1c3QgYSBwcmVsaW1pbmFyeSBzY2FuIGJlZm9yZSBJIGRpdmUgZGVlcGVyIGludG8gdGhlIGNvZGUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDA3OjI1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBMUlVfR0VOJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL0tjb25maWc9MTM4Nz1jb25maWcgUFRFX01BUktFUl9VRkZEX1dQXG4tLVxubW0vS2NvbmZpZy0xMzk3LSMgbXVsdGktZ2VuIExSVSB7XG5tbS9LY29uZmlnOjEzOTg6Y29uZmlnIExSVV9HRU5cbm1tL0tjb25maWctMTM5OS1cdGJvb2wgXCYjMzQ7TXVsdGktR2VuIExSVVwmIzM0O1xuLS1cbm1tL0tjb25maWctMTQwNi1cbm1tL0tjb25maWc6MTQwNzpjb25maWcgTFJVX0dFTl9FTkFCTEVEXG5tbS9LY29uZmlnLTE0MDgtXHRib29sIFwmIzM0O0VuYWJsZSBieSBkZWZhdWx0XCYjMzQ7XG4tLVxubW0vS2NvbmZpZy0xNDEyLVxubW0vS2NvbmZpZzoxNDEzOmNvbmZpZyBMUlVfR0VOX1NUQVRTXG5tbS9LY29uZmlnLTE0MTQtXHRib29sIFwmIzM0O0Z1bGwgc3RhdHMgZm9yIGRlYnVnZ2luZ1wmIzM0O1xuLS1cbm1tL0tjb25maWctMTQyMS1cbm1tL0tjb25maWc6MTQyMjpjb25maWcgTFJVX0dFTl9XQUxLU19NTVVcbm1tL0tjb25maWctMTQyMy1cdGRlZl9ib29sIHlcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDcgMDc6MjU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNzcwNQoJCQkJCQkJb3V0cHV0OiAzMwoJCQkJCQkJdGhvdWdodHM6IDIyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIGEgc3VtbWFyeSBvZiBteSB0aG91Z2h0IHByb2Nlc3M6CgoqKkRpdmluZyBpbnRvIHRoZSBLZXJuZWwgQ29uZmlndXJhdGlvbiBMYW5kc2NhcGUqKgoKT2theSwgc28gSSBuZWVkIHRvIHVuZGVyc3RhbmQgYSBzcGVjaWZpYyBhc3BlY3Qgb2YgdGhpcyBjb25maWd1cmF0aW9uLiBNeSBpbW1lZGlhdGUgaW5zdGluY3QgaXMgdG8ganVtcCBpbnRvIHRoZSBgbW0vS2NvbmZpZ2AgZmlsZS4gSSYjMzk7bSB0aGlua2luZywgYmFzZWQgb24gZXhwZXJpZW5jZSwgdGhhdCBhcm91bmQgbGluZSAxMzk4LCBJJiMzOTttIGxpa2VseSB0byBmaW5kIHRoZSByZWxldmFudCBzZWN0aW9uIGNvbnRhaW5pbmcgdGhlIGRlcGVuZGVuY2llcywgZnVydGhlciBkZXRhaWxzLCBhbmQgcGVyaGFwcyBzb21lIGhlbHBmdWwgY29tbWVudHMgYWJvdXQgd2hhdGV2ZXIgaXQgaXMgSSYjMzk7bSBjdXJyZW50bHkgaW52ZXN0aWdhdGluZy4gVGltZSB0byBjaGVjayB0aGVyZSBkaXJlY3RseS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDcgMDc6MjU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDttbS9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTM5NSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA0MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsxMzk1Olx0XHQgIGZpbGUtYmFja2VkIG1lbW9yeSB0eXBlcyBsaWtlIHNobWVtIGFuZCBodWdldGxiZnMuXG4xMzk2Olx0XG4xMzk3Olx0IyBtdWx0aS1nZW4gTFJVIHtcbjEzOTg6XHRjb25maWcgTFJVX0dFTlxuMTM5OTpcdFx0Ym9vbCBcJiMzNDtNdWx0aS1HZW4gTFJVXCYjMzQ7XG4xNDAwOlx0XHRkZXBlbmRzIG9uIE1NVVxuMTQwMTpcdFx0IyBtYWtlIHN1cmUgZm9saW8tXHUwMDNlZmxhZ3MgaGFzIGVub3VnaCBzcGFyZSBiaXRzXG4xNDAyOlx0XHRkZXBlbmRzIG9uIDY0QklUIHx8ICFTUEFSU0VNRU0gfHwgU1BBUlNFTUVNX1ZNRU1NQVBcbjE0MDM6XHRcdGhlbHBcbjE0MDQ6XHRcdCAgQSBoaWdoIHBlcmZvcm1hbmNlIExSVSBpbXBsZW1lbnRhdGlvbiB0byBvdmVyY29tbWl0IG1lbW9yeS4gU2VlXG4xNDA1Olx0XHQgIERvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUvbW0vbXVsdGlnZW5fbHJ1LnJzdCBmb3IgZGV0YWlscy5cbjE0MDY6XHRcbjE0MDc6XHRjb25maWcgTFJVX0dFTl9FTkFCTEVEXG4xNDA4Olx0XHRib29sIFwmIzM0O0VuYWJsZSBieSBkZWZhdWx0XCYjMzQ7XG4xNDA5Olx0XHRkZXBlbmRzIG9uIExSVV9HRU5cbjE0MTA6XHRcdGhlbHBcbjE0MTE6XHRcdCAgVGhpcyBvcHRpb24gZW5hYmxlcyB0aGUgbXVsdGktZ2VuIExSVSBieSBkZWZhdWx0LlxuMTQxMjpcdFxuMTQxMzpcdGNvbmZpZyBMUlVfR0VOX1NUQVRTXG4xNDE0Olx0XHRib29sIFwmIzM0O0Z1bGwgc3RhdHMgZm9yIGRlYnVnZ2luZ1wmIzM0O1xuMTQxNTpcdFx0ZGVwZW5kcyBvbiBMUlVfR0VOXG4xNDE2Olx0XHRoZWxwXG4xNDE3Olx0XHQgIERvIG5vdCBlbmFibGUgdGhpcyBvcHRpb24gdW5sZXNzIHlvdSBwbGFuIHRvIGxvb2sgYXQgaGlzdG9yaWNhbCBzdGF0c1xuMTQxODpcdFx0ICBmcm9tIGV2aWN0ZWQgZ2VuZXJhdGlvbnMgZm9yIGRlYnVnZ2luZyBwdXJwb3NlLlxuMTQxOTpcdFxuMTQyMDpcdFx0ICBUaGlzIG9wdGlvbiBoYXMgYSBwZXItbWVtY2cgYW5kIHBlci1ub2RlIG1lbW9yeSBvdmVyaGVhZC5cbjE0MjE6XHRcbjE0MjI6XHRjb25maWcgTFJVX0dFTl9XQUxLU19NTVVcbjE0MjM6XHRcdGRlZl9ib29sIHlcbjE0MjQ6XHRcdGRlcGVuZHMgb24gTFJVX0dFTiBcdTAwMjZcdTAwMjYgQVJDSF9IQVNfSFdfUFRFX1lPVU5HXG4xNDI1Olx0IyB9XG4xNDI2Olx0XG4xNDI3Olx0Y29uZmlnIExPQ0tfTU1fQU5EX0ZJTkRfVk1BXG4xNDI4Olx0XHRib29sXG4xNDI5Olx0XHRkZXBlbmRzIG9uICFTVEFDS19HUk9XU1VQXG4xNDMwOlx0XG4xNDMxOlx0Y29uZmlnIElPTU1VX01NX0RBVEFcbjE0MzI6XHRcdGJvb2xcbjE0MzM6XHRcbjE0MzQ6XHRjb25maWcgRVhFQ01FTVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNyAwNzoyNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA4NDIxCgkJCQkJCQlvdXRwdXQ6IDI5CgkJCQkJCQl0aG91Z2h0czogMzE5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkRpdmluZyBpbnRvIGBtbS92bXNjYW4uY2AgYW5kIE1HTFJVIFBhZ2UgUmVjbGFpbSoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgYG1tL3Ztc2Nhbi5jYCwgd2hpY2gsIGFzIHdlIGtub3csIGlzIHRoZSBoZWFydCBvZiB0aGUga2VybmVsJiMzOTtzIG1lbW9yeSBtYW5hZ2VtZW50LCBhbmQgc3BlY2lmaWNhbGx5IGRlYWxpbmcgd2l0aCB0aGUgTXVsdGktR2VuIExSVSAoTUdMUlUpIGltcGxlbWVudGF0aW9uIGZvciBwYWdlIHJlY2xhaW0gYW5kIGFnaW5nLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0IHRoaXMgZGlmZiBpcyBkb2luZyBhbmQgdGhlIHJhdGlvbmFsZSBiZWhpbmQgaXQuCgpUaGUgZGlmZiBpdHNlbGYgaXMgcHJldHR5IGNvbmNpc2UuIEl0IHNlZW1zIHRvIGJlIG1vZGlmeWluZyBob3cgZm9saW9zIGFyZSBoYW5kbGVkIGR1cmluZyBldmljdGlvbi4gQmVmb3JlIHRoZSBjaGFuZ2UsIGlmIGEgZm9saW8mIzM5O3Mgc2VxdWVuY2UgbnVtYmVyIG1hdGNoZWQgdGhlIG1pbmltdW0gc2VxdWVuY2UgZm9yIGEgcGFydGljdWxhciB0eXBlLCBpdCB3YXMgKmltcGxpY2l0bHkqIG1hZGUgYWN0aXZlICphbmQqIGl0cyBMUlUgcmVmZXJlbmNlcyB3ZXJlIHNldCB0byB6ZXJvLiBOb3csIHRoZSBjb2RlIGV4cGxpY2l0bHkgc2V0cyB0aGUgZm9saW8gYXMgYWN0aXZlLCBhbmQgdGhlbiAqZXhwbGljaXRseSogc2V0cyB0aGUgTFJVIHJlZmVyZW5jZXMgdG8gemVybywgcmVnYXJkbGVzcyBvZiB0aGUgc2VxdWVuY2UgbnVtYmVyLiAKClRoZSBpbnRlcmVzdGluZyBwYXJ0IGlzIHRoZSBjb21tZW50OiAqJiMzNDtTZWUgdGhlIGNvbW1lbnRzIG9uIExSVV9SRUZTX0ZMQUdTJiMzNDsqLiBTbywgdGhlcmUmIzM5O3Mgb2J2aW91c2x5IGEgYml0IG9mIGJhY2tncm91bmQgb3IgY29udGV4dCBoZXJlIHRoYXQgSSBuZWVkIHRvIHVuZGVyc3RhbmQuIEkmIzM5O20gZ29pbmcgdG8gaGF2ZSB0byBkaWcgaW50byB0aGUgY29tbWVudHMgYXJvdW5kIGBMUlVfUkVGU19GTEFHU2AgaW4gYG1tL3Ztc2Nhbi5jYCBvciBlbHNld2hlcmUgaW4gdGhlIGNvZGViYXNlIHRvIHVuZGVyc3RhbmQgdGhlIGltcGxpY2F0aW9ucyBvZiB0aGlzIGNoYW5nZS4gSXQgc2VlbXMgdG8gYmUgYSBzdWJ0bGUgYnV0IHBvdGVudGlhbGx5IGltcG9ydGFudCBhbHRlcmF0aW9uIGluIGhvdyB0aGUgTUdMUlUgYWxnb3JpdGhtIGFnZXMgYW5kIHJlY2xhaW1zIHBhZ2VzLiBJJiMzOTtsbCBuZWVkIHRvIHNlZSBpZiBpdCBpcyByZWxhdGVkIHRvIGEgc3VidGxlIGJ1ZyBmaXgsIG9yIG1heWJlIGEgcGVyZm9ybWFuY2Ugb3B0aW1pemF0aW9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNyAwNzoyNTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtMUlVfUkVGU19GTEFHUyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9mb2xpby5jPTM1NT1zdGF0aWMgdm9pZCBscnVfZ2VuX2luY19yZWZzKHN0cnVjdCBmb2xpbyAqZm9saW8pXG4tLVxubW0vZm9saW8uYy0zNjItXG5tbS9mb2xpby5jOjM2MzpcdC8qIHNlZSB0aGUgY29tbWVudCBvbiBMUlVfUkVGU19GTEFHUyAqL1xubW0vZm9saW8uYy0zNjQtXHRpZiAoIWZvbGlvX2xydV9yZWZzKGZvbGlvKSkge1xuLS1cbm1tL3Ztc2Nhbi5jPTg2MD1zdGF0aWMgYm9vbCBscnVfZ2VuX3NldF9yZWZzKHN0cnVjdCBmb2xpbyAqZm9saW8sIGNvbnN0IHZtYV9mbGFnc190ICp2bWFfZmxhZ3MpXG5tbS92bXNjYW4uYy04NjEte1xubW0vdm1zY2FuLmM6ODYyOlx0Lyogc2VlIHRoZSBjb21tZW50IG9uIExSVV9SRUZTX0ZMQUdTICovXG5tbS92bXNjYW4uYy04NjMtXHRpZiAoIWZvbGlvX3Rlc3RfcmVmZXJlbmNlZChmb2xpbykgXHUwMDI2XHUwMDI2ICFmb2xpb190ZXN0X3dvcmtpbmdzZXQoZm9saW8pKSB7XG4tLVxubW0vdm1zY2FuLmM9MzI5Nz1zdGF0aWMgaW50IGZvbGlvX3VwZGF0ZV9nZW4oc3RydWN0IGZvbGlvICpmb2xpbywgaW50IG5ld19nZW4sIGludCAqdHlwZSxcbi0tXG5tbS92bXNjYW4uYy0zMzAzLVx0Lypcbm1tL3Ztc2Nhbi5jOjMzMDQ6XHQgKiBTZWUgdGhlIGNvbW1lbnQgb24gTFJVX1JFRlNfRkxBR1MsIGFuZCBhY3RpdmF0ZSBmaWxlLWJhY2tlZFxubW0vdm1zY2FuLmMtMzMwNS1cdCAqIGV4ZWN1dGFibGUgZm9saW9zIGFmdGVyIGZpcnN0IHVzYWdlIHRvIGF2b2lkIHR5cGljYWwgSU9cbi0tXG5tbS92bXNjYW4uYz00Nzc0PXN0YXRpYyBib29sIGlzb2xhdGVfZm9saW8oc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYylcbi0tXG5tbS92bXNjYW4uYy00Nzg3LVxubW0vdm1zY2FuLmM6NDc4ODpcdC8qIHNlZSB0aGUgY29tbWVudCBvbiBMUlVfUkVGU19GTEFHUyAqL1xubW0vdm1zY2FuLmMtNDc4OS1cdGlmICghZm9saW9fdGVzdF9yZWZlcmVuY2VkKGZvbGlvKSlcbi0tXG5tbS92bXNjYW4uYz00OTY0PXN0YXRpYyBpbnQgZXZpY3RfZm9saW9zKHVuc2lnbmVkIGxvbmcgbnJfdG9fc2Nhbiwgc3RydWN0IGxydXZlYyAqbHJ1dmVjLFxuLS1cbm1tL3Ztc2Nhbi5jLTUwMjYtXG5tbS92bXNjYW4uYzo1MDI3Olx0XHQvKiBTZWUgdGhlIGNvbW1lbnRzIG9uIExSVV9SRUZTX0ZMQUdTICovXG5tbS92bXNjYW4uYy01MDI4LVx0XHRmb2xpb19zZXRfbHJ1X3JlZnMoZm9saW8sIDApO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNyAwNzoyNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA5NjI4CgkJCQkJCQlvdXRwdXQ6IDI2CgkJCQkJCQl0aG91Z2h0czogMjM1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBNR0xSVSBFdmljdGlvbiBMb2dpYyBmb3IgRnV6emluZyBPcHBvcnR1bml0aWVzKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIEkmIzM5O20gbG9va2luZyBhdCBgZXZpY3RfZm9saW9zKClgIGluIGBtbS92bXNjYW4uY2AsIHdoaWNoLCBhcyBJIGtub3csIGlzIGEga2V5IGNvbXBvbmVudCBvZiB0aGUgTXVsdGlnZW5lcmF0aW9uYWwgTFJVIChNR0xSVSkgZXZpY3Rpb24gcHJvY2Vzcy4gU3BlY2lmaWNhbGx5LCBJJiMzOTttIG5vdGljaW5nIGEgY2hhbmdlOiBgZm9saW9fc2V0X2xydV9yZWZzKGZvbGlvLCAwKTtgIGlzIG5vdyB1bmNvbmRpdGlvbmFsbHkgY2FsbGVkIHdpdGhpbiB0aGlzIGxvb3AuIEJlZm9yZSwgaXQgd2FzIHRpZWQgdG8gYSBjb25kaXRpb25hbCBjaGVjayByZWxhdGVkIHRvIHRoZSBMUlUgc2VxdWVuY2UuCgpNeSBpbW1lZGlhdGUgdGhvdWdodCBpcywgJiMzNDtJcyB0aGlzIHJlYWNoYWJsZT8mIzM0OyBhbmQgaWYgc28sICYjMzQ7SXMgaXQgd29ydGggYSBjbG9zZXIgbG9vayBmb3IgZnV6emluZyBwb3RlbnRpYWw/JiMzNDsgVGhlIGFuc3dlciB0byB0aGUgcmVhY2hhYmlsaXR5IHF1ZXN0aW9uIGFwcGVhcnMgdG8gYmUgeWVzOyB0aGlzIGlzIGNvcmUgTU0gcGFnZSByZWNsYWltIGFuZCBNR0xSVSBldmljdGlvbiwgdHJpZ2dlcmVkIGJ5IG1lbW9yeSBwcmVzc3VyZSBvciBkdXJpbmcgbm9ybWFsIHBhZ2UgcmVjbGFpbSBvcGVyYXRpb25zLiBTbywgaXQmIzM5O3MgZGVmaW5pdGVseSBpbiB0aGUgaG90IHBhdGguCgpOb3csIHRoYXQgYnJpbmdzIHVzIHRvICYjMzQ7V29ydGhGdXp6aW5nPXRydWUuJiMzNDsgR2l2ZW4gdGhhdCB0aGlzIGlzIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQsIHNwZWNpZmljYWxseSB3aXRoaW4gYSByZWNsYWltIHBhdGgsIHRoZSBwb3RlbnRpYWwgaW1wYWN0IG9mIGlzc3VlcyBoZXJlIGlzIGhpZ2guIEl0JiMzOTtzIGRlZmluaXRlbHkgaW4gYSBzdWJzeXN0ZW0sIGBtbS9gLCB0aGF0JiMzOTtzIGtub3duIHRvIGhhdmUgaGFkIHBhc3QgaXNzdWVzIHNvIHRoaXMgZGVmaW5pdGVseSB3YXJyYW50cyBjbG9zZXIgaW5zcGVjdGlvbi4KClNvLCBsZXQmIzM5O3MgaWRlbnRpZnkgcmVsZXZhbnQgZnVuY3Rpb25zIHRoYXQgY2FsbCBgZXZpY3RfZm9saW9zYCB0byB1bmRlcnN0YW5kIHdoZXJlIHRoaXMgaXMgYmVpbmcgZXhlY3V0ZWQuIFdoYXQgZnVuY3Rpb25zIHdpdGhpbiBgbW0vdm1zY2FuLmNgIGFyZSBjYWxsaW5nIGBldmljdF9mb2xpb3NgIGFuZCB3aGF0IHN1YnN5c3RlbXMgd291bGQgYmUgaW1wYWN0ZWQgaWYgdGhlcmUgYXJlIGlzc3Vlcz8KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDcgMDc6MjU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7ZXZpY3RfZm9saW9zJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL3Ztc2Nhbi5jPTQ5MjA9c3RhdGljIGludCBpc29sYXRlX2ZvbGlvcyh1bnNpZ25lZCBsb25nIG5yX3RvX3NjYW4sIHN0cnVjdCBscnV2ZWMgKmxydXZlYyxcbi0tXG5tbS92bXNjYW4uYy00OTYzLVxubW0vdm1zY2FuLmM6NDk2NDpzdGF0aWMgaW50IGV2aWN0X2ZvbGlvcyh1bnNpZ25lZCBsb25nIG5yX3RvX3NjYW4sIHN0cnVjdCBscnV2ZWMgKmxydXZlYyxcbm1tL3Ztc2Nhbi5jLTQ5NjUtXHRcdFx0c3RydWN0IHNjYW5fY29udHJvbCAqc2MsIGludCBzd2FwcGluZXNzKVxuLS1cbm1tL3Ztc2Nhbi5jPTUxNDQ9c3RhdGljIGJvb2wgdHJ5X3RvX3Nocmlua19scnV2ZWMoc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYylcbi0tXG5tbS92bXNjYW4uYy01MTY3LVx0XHRucl9iYXRjaCA9IG1pbihucl90b19zY2FuLCBNSU5fTFJVX0JBVENIKTtcbm1tL3Ztc2Nhbi5jOjUxNjg6XHRcdGRlbHRhID0gZXZpY3RfZm9saW9zKG5yX2JhdGNoLCBscnV2ZWMsIHNjLCBzd2FwcGluZXNzKTtcbm1tL3Ztc2Nhbi5jLTUxNjktXHRcdGlmICghZGVsdGEpXG4tLVxubW0vdm1zY2FuLmM9NTc4NT1zdGF0aWMgaW50IHJ1bl9ldmljdGlvbihzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIHVuc2lnbmVkIGxvbmcgc2VxLCBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYyxcbi0tXG5tbS92bXNjYW4uYy01ODA1LVx0XHRucl9iYXRjaCA9IG1pbihucl90b19yZWNsYWltIC0gc2MtXHUwMDNlbnJfcmVjbGFpbWVkLCBNQVhfTFJVX0JBVENIKTtcbm1tL3Ztc2Nhbi5jOjU4MDY6XHRcdGlmICghZXZpY3RfZm9saW9zKG5yX2JhdGNoLCBscnV2ZWMsIHNjLCBzd2FwcGluZXNzKSlcbm1tL3Ztc2Nhbi5jLTU4MDctXHRcdFx0cmV0dXJuIDA7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDA3OjI1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEwNTk4CgkJCQkJCQlvdXRwdXQ6IDQ5CgkJCQkJCQl0aG91Z2h0czogMTU1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgYGV2aWN0X2ZvbGlvc2AgRnVuY3Rpb24qKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gSSYjMzk7bSBsb29raW5nIGF0IGBldmljdF9mb2xpb3NgLCBhbmQgaW1tZWRpYXRlbHkgSSBub3RlIGl0JiMzOTtzIGEgc3RhdGljIGZ1bmN0aW9uIHJlc2lkaW5nIGluIGBtbS92bXNjYW4uY2AuIEl0JiMzOTtzIHByZXR0eSBzdWJzdGFudGlhbCwgcm91Z2hseSBhIGh1bmRyZWQgbGluZXMsIGludm9sdmluZyBsb29wcyBhbmQgY2FsbHMgdG8gYHNocmlua19mb2xpb19saXN0YC4gR2l2ZW4gaXRzIHNpemUgYW5kIHN0YXRpYyBuYXR1cmUsIGl0JiMzOTtzIGhpZ2hseSB1bmxpa2VseSB0byBiZSBpbmxpbmVkLCBhbHRob3VnaCBpZiB0aGUgc3ltYm9sIGlzIHJldGFpbmVkIGl0IGNhbiBiZSB0YXJnZXRlZC4gU28sIG15IG5leHQgdGhvdWdodCBpcywgd2hvJiMzOTtzICpjYWxsaW5nKiB0aGlzIHRoaW5nPwoKTGV0JiMzOTtzIHNlZTogYHRyeV90b19zaHJpbmtfbHJ1dmVjYCwgYHJ1bl9ldmljdGlvbmAsIGFuZCBgbHJ1X2dlbl9zaHJpbmtfbHJ1dmVjYCBhbmQgYGxydV9nZW5fc2hyaW5rX25vZGVgLiBOb3cgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGJyb2FkZXIgY29udGV4dC4gSSYjMzk7bSBnb2luZyB0byBsb29rIGF0IHRoZSBjYWxsZXJzIG9mIGBydW5fZXZpY3Rpb25gIGFuZCBgdHJ5X3RvX3Nocmlua19scnV2ZWNgIHRvIGdldCBhIGJldHRlciBzZW5zZSBvZiB0aGUgb3ZlcmFsbCBtZW1vcnkgbWFuYWdlbWVudCBmbG93IGFuZCBob3cgYGV2aWN0X2ZvbGlvc2AgZml0cyB3aXRoaW4gaXQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDA3OjI1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0OyhydW5fZXZpY3Rpb258dHJ5X3RvX3Nocmlua19scnV2ZWN8bHJ1X2dlbl9zaHJpbmspJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vdm1zY2FuLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vdm1zY2FuLmM9NTEwOT1zdGF0aWMgYm9vbCBzaG91bGRfYWJvcnRfc2NhbihzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjKVxuLS1cbm1tL3Ztc2Nhbi5jLTUxNDMtICovXG5tbS92bXNjYW4uYzo1MTQ0OnN0YXRpYyBib29sIHRyeV90b19zaHJpbmtfbHJ1dmVjKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgc3RydWN0IHNjYW5fY29udHJvbCAqc2MpXG5tbS92bXNjYW4uYy01MTQ1LXtcbi0tXG5tbS92bXNjYW4uYz01MTg5PXN0YXRpYyBpbnQgc2hyaW5rX29uZShzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjKVxuLS1cbm1tL3Ztc2Nhbi5jLTUyMDgtXG5tbS92bXNjYW4uYzo1MjA5Olx0bmVlZF9yb3RhdGUgPSB0cnlfdG9fc2hyaW5rX2xydXZlYyhscnV2ZWMsIHNjKTtcbm1tL3Ztc2Nhbi5jLTUyMTAtXG4tLVxubW0vdm1zY2FuLmM9NTIzMD1zdGF0aWMgdm9pZCBzaHJpbmtfbWFueShzdHJ1Y3QgcGdsaXN0X2RhdGEgKnBnZGF0LCBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYylcbi0tXG5tbS92bXNjYW4uYy01Mjk5LVxubW0vdm1zY2FuLmM6NTMwMDpzdGF0aWMgdm9pZCBscnVfZ2VuX3Nocmlua19scnV2ZWMoc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYylcbm1tL3Ztc2Nhbi5jLTUzMDEte1xuLS1cbm1tL3Ztc2Nhbi5jLTUzMTItXG5tbS92bXNjYW4uYzo1MzEzOlx0aWYgKHRyeV90b19zaHJpbmtfbHJ1dmVjKGxydXZlYywgc2MpKVxubW0vdm1zY2FuLmMtNTMxNC1cdFx0bHJ1X2dlbl9yb3RhdGVfbWVtY2cobHJ1dmVjLCBNRU1DR19MUlVfWU9VTkcpO1xuLS1cbm1tL3Ztc2Nhbi5jLTUzMjAtXG5tbS92bXNjYW4uYzo1MzIxOnN0YXRpYyB2b2lkIGxydV9nZW5fc2hyaW5rX25vZGUoc3RydWN0IHBnbGlzdF9kYXRhICpwZ2RhdCwgc3RydWN0IHNjYW5fY29udHJvbCAqc2MpXG5tbS92bXNjYW4uYy01MzIyLXtcbi0tXG5tbS92bXNjYW4uYz01Nzc0PXN0YXRpYyBpbnQgcnVuX2FnaW5nKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgdW5zaWduZWQgbG9uZyBzZXEsXG4tLVxubW0vdm1zY2FuLmMtNTc4NC1cbm1tL3Ztc2Nhbi5jOjU3ODU6c3RhdGljIGludCBydW5fZXZpY3Rpb24oc3RydWN0IGxydXZlYyAqbHJ1dmVjLCB1bnNpZ25lZCBsb25nIHNlcSwgc3RydWN0IHNjYW5fY29udHJvbCAqc2MsXG5tbS92bXNjYW4uYy01Nzg2LVx0XHRcdGludCBzd2FwcGluZXNzLCB1bnNpZ25lZCBsb25nIG5yX3RvX3JlY2xhaW0pXG4tLVxubW0vdm1zY2FuLmM9NTgxNT1zdGF0aWMgaW50IHJ1bl9jbWQoY2hhciBjbWQsIHU2NCBtZW1jZ19pZCwgaW50IG5pZCwgdW5zaWduZWQgbG9uZyBzZXEsXG4tLVxubW0vdm1zY2FuLmMtNTg0Ni1cdGNhc2UgJiMzOTstJiMzOTs6XG5tbS92bXNjYW4uYzo1ODQ3Olx0XHRlcnIgPSBydW5fZXZpY3Rpb24obHJ1dmVjLCBzZXEsIHNjLCBzd2FwcGluZXNzLCBvcHQpO1xubW0vdm1zY2FuLmMtNTg0OC1cdFx0YnJlYWs7XG4tLVxubW0vdm1zY2FuLmM9NjA1OD1zdGF0aWMgdm9pZCBscnVfZ2VuX2FnZV9ub2RlKHN0cnVjdCBwZ2xpc3RfZGF0YSAqcGdkYXQsIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjKVxuLS1cbm1tL3Ztc2Nhbi5jLTYwNjItXG5tbS92bXNjYW4uYzo2MDYzOnN0YXRpYyB2b2lkIGxydV9nZW5fc2hyaW5rX2xydXZlYyhzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjKVxubW0vdm1zY2FuLmMtNjA2NC17XG4tLVxubW0vdm1zY2FuLmMtNjA2Ny1cbm1tL3Ztc2Nhbi5jOjYwNjg6c3RhdGljIHZvaWQgbHJ1X2dlbl9zaHJpbmtfbm9kZShzdHJ1Y3QgcGdsaXN0X2RhdGEgKnBnZGF0LCBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYylcbm1tL3Ztc2Nhbi5jLTYwNjkte1xuLS1cbm1tL3Ztc2Nhbi5jPTYwNzU9c3RhdGljIHZvaWQgc2hyaW5rX2xydXZlYyhzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjKVxuLS1cbm1tL3Ztc2Nhbi5jLTYwODYtXHRpZiAoKGxydV9nZW5fZW5hYmxlZCgpIHx8IGxydV9nZW5fc3dpdGNoaW5nKCkpIFx1MDAyNlx1MDAyNiAhcm9vdF9yZWNsYWltKHNjKSkge1xubW0vdm1zY2FuLmM6NjA4NzpcdFx0bHJ1X2dlbl9zaHJpbmtfbHJ1dmVjKGxydXZlYywgc2MpO1xubW0vdm1zY2FuLmMtNjA4OC1cbi0tXG5tbS92bXNjYW4uYz02MzQ1PXN0YXRpYyB2b2lkIHNocmlua19ub2RlKHBnX2RhdGFfdCAqcGdkYXQsIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjKVxuLS1cbm1tL3Ztc2Nhbi5jLTYzNTItXHRcdG1lbXNldChcdTAwMjZzYy1cdTAwM2VuciwgMCwgc2l6ZW9mKHNjLVx1MDAzZW5yKSk7XG5tbS92bXNjYW4uYzo2MzUzOlx0XHRscnVfZ2VuX3Nocmlua19ub2RlKHBnZGF0LCBzYyk7XG5tbS92bXNjYW4uYy02MzU0LVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNyAwNzoyNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMjE0NgoJCQkJCQkJb3V0cHV0OiAyOAoJCQkJCQkJdGhvdWdodHM6IDI2OAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBbmFseXNpcyBvZiBNR0xSVSBSZWNsYWltIEZ1bmN0aW9ucyoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBJJiMzOTttIGxvb2tpbmcgYXQgYSBzZXQgb2YgZnVuY3Rpb25zIHRoYXQgc2VlbSByZWxhdGVkIHRvIG1lbW9yeSByZWNsYWltLCBhbmQgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlaXIgcm9sZXMgd2l0aGluIHRoZSBNR0xSVSBmcmFtZXdvcmsuIFRoZSBgRm9jdXNTeW1ib2xzYCBoZXJlIGFyZSBxdWl0ZSBzcGVjaWZpYy4gSSBzZWU6CgoqICAgYGV2aWN0X2ZvbGlvc2A6IFRoaXMgb25lIGltbWVkaWF0ZWx5IGp1bXBzIG91dCBhcyBpdCYjMzk7cyB0aGUgc3BlY2lmaWMgZnVuY3Rpb24gdGhhdCYjMzk7cyBiZWVuIG1vZGlmaWVkLgoqICAgYHRyeV90b19zaHJpbmtfbHJ1dmVjYDogVGhpcyBpcyBhIGtleSBwbGF5ZXIgaW4gdGhlIHBhZ2UgcmVjbGFpbSBwYXRoLCBjYWxsaW5nIHVwb24gdGhlIGBldmljdF9mb2xpb3NgIGZ1bmN0aW9uLgoqICAgYHJ1bl9ldmljdGlvbmA6IFRoaXMgaXMgYWxzbyBhIGNhbGxlciwgYnV0IGl0IGFwcGVhcnMgdG8gYmUgcGFydCBvZiB0aGUgZGVidWcgaW50ZXJmYWNlIG9yIGFkbWluIGZ1bmN0aW9uYWxpdHksIGxpa2VseSBhY2Nlc3NlZCB0aHJvdWdoIHNvbWV0aGluZyBsaWtlIGAvc3lzL2tlcm5lbC9kZWJ1Zy9scnVfZ2VuYC4KKiAgIGBscnVfZ2VuX3Nocmlua19scnV2ZWNgOiBUaGlzIGFuZCBgbHJ1X2dlbl9zaHJpbmtfbm9kZWAgc2VlbXMgc3BlY2lhbGl6ZWQgdG8gdGhlIE11bHRpLUdlbiBMUlUgbG9naWMuCgpOb3csIHdoaWxlIGBzaHJpbmtfbm9kZWAgc2VlbXMgbGlrZSBhIG1vcmUgZ2VuZXJpYyByZWNsYWltZXIsIHRoZSBvdGhlcnMgKGBscnVfZ2VuX3Nocmlua19scnV2ZWNgLCBgdHJ5X3RvX3Nocmlua19scnV2ZWNgLCBgcnVuX2V2aWN0aW9uYCwgYW5kIGBldmljdF9mb2xpb3NgKSBhcmUgYWxsIGNsZWFybHkgTUdMUlUtc3BlY2lmaWMgcmVjbGFpbSBmdW5jdGlvbnMuIEtub3dpbmcgdGhhdCBgZXZpY3RfZm9saW9zYCBpcyB0aGUgZnVuY3Rpb24gdGhhdCYjMzk7cyBiZWVuIG1vZGlmaWVkIGlzIHBhcnRpY3VsYXJseSBpbXBvcnRhbnQuCgpUaGUgbmV4dCB0aGluZyBJIHdhbnQgdG8gdW5kZXJzdGFuZCBhcmUgdGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucy4gSXQgbG9va3MgbGlrZSBgQ09ORklHX0xSVV9HRU5gIGlzIHRoZSBtYWluIG9uZSB0aGF0IGVuYWJsZXMgTXVsdGktR2VuIExSVS4gVGhlIHF1ZXN0aW9uIEkgaGF2ZSBpcyB3aGV0aGVyIHRoZSBgQ09ORklHX0xSVV9HRU5fRU5BQkxFRGAgaXMgbmVlZGVkLCBvciBpZiBgQ09ORklHX0xSVV9HRU5gIGlzIGVub3VnaCB0byBlbmFibGUgTUdMUlUuIEkgbmVlZCB0byBkaXZlIGludG8gdGhlIGltcGxlbWVudGF0aW9uIG9mIGBscnVfZ2VuX2VuYWJsZWQoKWAgdG8gY2xhcmlmeSB0aGlzIHBvaW50LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNyAwNzoyNTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtscnVfZ2VuX2VuYWJsZWQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vZm9saW8uYz00MjY9dm9pZCBmb2xpb19tYXJrX2FjY2Vzc2VkKHN0cnVjdCBmb2xpbyAqZm9saW8pXG4tLVxubW0vZm9saW8uYy00MjktXHRcdHJldHVybjtcbm1tL2ZvbGlvLmM6NDMwOlx0aWYgKGxydV9nZW5fZW5hYmxlZCgpKSB7XG5tbS9mb2xpby5jLTQzMS1cdFx0bHJ1X2dlbl9pbmNfcmVmcyhmb2xpbyk7XG4tLVxubW0vZm9saW8uYz00NzE9dm9pZCBmb2xpb19hZGRfbHJ1KHN0cnVjdCBmb2xpbyAqZm9saW8pXG4tLVxubW0vZm9saW8uYy00ODMtXHQgKi9cbm1tL2ZvbGlvLmM6NDg0Olx0aWYgKGxydV9nZW5fZW5hYmxlZCgpIFx1MDAyNlx1MDAyNiAhZm9saW9fdGVzdF91bmV2aWN0YWJsZShmb2xpbykgXHUwMDI2XHUwMDI2XG5tbS9mb2xpby5jLTQ4NS1cdCAgICBscnVfZ2VuX2luX2ZhdWx0KCkgXHUwMDI2XHUwMDI2ICEoY3VycmVudC1cdTAwM2VmbGFncyBcdTAwMjYgUEZfTUVNQUxMT0MpKSB7XG4tLVxubW0vZm9saW8uYz01MzU9c3RhdGljIHZvaWQgbHJ1X2RlYWN0aXZhdGVfZmlsZShzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIHN0cnVjdCBmb2xpbyAqZm9saW8pXG5tbS9mb2xpby5jLTUzNi17XG5tbS9mb2xpby5jOjUzNzpcdGJvb2wgYWN0aXZlID0gZm9saW9fdGVzdF9hY3RpdmUoZm9saW8pIHx8IGxydV9nZW5fZW5hYmxlZCgpO1xubW0vZm9saW8uYy01MzgtXHRsb25nIG5yX3BhZ2VzID0gZm9saW9fbnJfcGFnZXMoZm9saW8pO1xuLS1cbm1tL2ZvbGlvLmM9NTc2PXN0YXRpYyB2b2lkIGxydV9kZWFjdGl2YXRlKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgc3RydWN0IGZvbGlvICpmb2xpbylcbi0tXG5tbS9mb2xpby5jLTU3OS1cbm1tL2ZvbGlvLmM6NTgwOlx0aWYgKGZvbGlvX3Rlc3RfdW5ldmljdGFibGUoZm9saW8pIHx8ICEoZm9saW9fdGVzdF9hY3RpdmUoZm9saW8pIHx8IGxydV9nZW5fZW5hYmxlZCgpKSlcbm1tL2ZvbGlvLmMtNTgxLVx0XHRyZXR1cm47XG4tLVxubW0vZm9saW8uYz01OTI9c3RhdGljIHZvaWQgbHJ1X2xhenlmcmVlKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgc3RydWN0IGZvbGlvICpmb2xpbylcbi0tXG5tbS9mb2xpby5jLTYwMS1cdGZvbGlvX2NsZWFyX2FjdGl2ZShmb2xpbyk7XG5tbS9mb2xpby5jOjYwMjpcdGlmIChscnVfZ2VuX2VuYWJsZWQoKSlcbm1tL2ZvbGlvLmMtNjAzLVx0XHRscnVfZ2VuX2NsZWFyX3JlZnMoZm9saW8pO1xuLS1cbm1tL2ZvbGlvLmM9NjcwPXZvaWQgZGVhY3RpdmF0ZV9maWxlX2ZvbGlvKHN0cnVjdCBmb2xpbyAqZm9saW8pXG4tLVxubW0vZm9saW8uYy02NzUtXG5tbS9mb2xpby5jOjY3NjpcdGlmIChscnVfZ2VuX2VuYWJsZWQoKSBcdTAwMjZcdTAwMjYgbHJ1X2dlbl9jbGVhcl9yZWZzKGZvbGlvKSlcbm1tL2ZvbGlvLmMtNjc3LVx0XHRyZXR1cm47XG4tLVxubW0vZm9saW8uYz02OTA9dm9pZCBmb2xpb19kZWFjdGl2YXRlKHN0cnVjdCBmb2xpbyAqZm9saW8pXG4tLVxubW0vZm9saW8uYy02OTQtXG5tbS9mb2xpby5jOjY5NTpcdGlmIChscnVfZ2VuX2VuYWJsZWQoKSA/IGxydV9nZW5fY2xlYXJfcmVmcyhmb2xpbykgOiAhZm9saW9fdGVzdF9hY3RpdmUoZm9saW8pKVxubW0vZm9saW8uYy02OTYtXHRcdHJldHVybjtcbi0tXG5tbS9tZW1jb250cm9sLmM9Mjc4PXN0YXRpYyB2b2lkIG1lbWNnX3JlcGFyZW50X29iamNncyhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpXG4tLVxubW0vbWVtY29udHJvbC5jLTI4NS1yZXRyeTpcbm1tL21lbWNvbnRyb2wuYzoyODY6XHRcdGlmIChscnVfZ2VuX2VuYWJsZWQoKSlcbm1tL21lbWNvbnRyb2wuYy0yODctXHRcdFx0bWF4X2xydV9nZW5fbWVtY2cocGFyZW50LCBuaWQpO1xuLS1cbm1tL21lbWNvbnRyb2wuYy0yOTAtXG5tbS9tZW1jb250cm9sLmM6MjkxOlx0XHRpZiAobHJ1X2dlbl9lbmFibGVkKCkpIHtcbm1tL21lbWNvbnRyb2wuYy0yOTItXHRcdFx0aWYgKCFyZWNoZWNrX2xydV9nZW5fbWF4X21lbWNnKHBhcmVudCwgbmlkKSkge1xuLS1cbm1tL3JtYXAuYz05MjA9c3RhdGljIGJvb2wgZm9saW9fcmVmZXJlbmNlZF9vbmUoc3RydWN0IGZvbGlvICpmb2xpbyxcbi0tXG5tbS9ybWFwLmMtOTgzLVx0XHQgKi9cbm1tL3JtYXAuYzo5ODQ6XHRcdGlmIChscnVfZ2VuX2VuYWJsZWQoKSBcdTAwMjZcdTAwMjYgIWxydV9nZW5fc3dpdGNoaW5nKCkgXHUwMDI2XHUwMDI2IHB2bXcucHRlKSB7XG5tbS9ybWFwLmMtOTg1LVx0XHRcdGlmIChscnVfZ2VuX2xvb2tfYXJvdW5kKFx1MDAyNnB2bXcsIG5yKSlcbi0tXG5tbS92bXNjYW4uYz04OTE9c3RhdGljIGVudW0gZm9saW9fcmVmZXJlbmNlcyBmb2xpb19jaGVja19yZWZlcmVuY2VzKHN0cnVjdCBmb2xpbyAqZm9saW8sXG4tLVxubW0vdm1zY2FuLmMtOTE1LVxubW0vdm1zY2FuLmM6OTE2Olx0aWYgKGxydV9nZW5fZW5hYmxlZCgpIFx1MDAyNlx1MDAyNiAhbHJ1X2dlbl9zd2l0Y2hpbmcoKSkge1xubW0vdm1zY2FuLmMtOTE3LVx0XHRpZiAoIXJlZmVyZW5jZWRfcHRlcylcbi0tXG5tbS92bXNjYW4uYz0yMzA4PXN0YXRpYyB2b2lkIHByZXBhcmVfc2Nhbl9jb250cm9sKHBnX2RhdGFfdCAqcGdkYXQsIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjKVxuLS1cbm1tL3Ztc2Nhbi5jLTIzMTQtXG5tbS92bXNjYW4uYzoyMzE1Olx0aWYgKGxydV9nZW5fZW5hYmxlZCgpIFx1MDAyNlx1MDAyNiAhbHJ1X2dlbl9zd2l0Y2hpbmcoKSlcbm1tL3Ztc2Nhbi5jLTIzMTYtXHRcdHJldHVybjtcbi0tXG5tbS92bXNjYW4uYz01NDY0PXN0YXRpYyB2b2lkIGxydV9nZW5fY2hhbmdlX3N0YXRlKGJvb2wgZW5hYmxlZClcbi0tXG5tbS92bXNjYW4uYy01NDc0LVxubW0vdm1zY2FuLmM6NTQ3NTpcdGlmIChlbmFibGVkID09IGxydV9nZW5fZW5hYmxlZCgpKVxubW0vdm1zY2FuLmMtNTQ3Ni1cdFx0Z290byB1bmxvY2s7XG4tLVxubW0vdm1zY2FuLmM9NTU2Mj1zdGF0aWMgc3NpemVfdCBlbmFibGVkX3N0b3JlKHN0cnVjdCBrb2JqZWN0ICprb2JqLCBzdHJ1Y3Qga29ial9hdHRyaWJ1dGUgKmF0dHIsXG4tLVxubW0vdm1zY2FuLmMtNTU4OC1cbm1tL3Ztc2Nhbi5jOjU1ODk6c3RhdGljIHN0cnVjdCBrb2JqX2F0dHJpYnV0ZSBscnVfZ2VuX2VuYWJsZWRfYXR0ciA9IF9fQVRUUl9SVyhlbmFibGVkKTtcbm1tL3Ztc2Nhbi5jLTU1OTAtXG5tbS92bXNjYW4uYz01NTkxPXN0YXRpYyBzdHJ1Y3QgYXR0cmlidXRlICpscnVfZ2VuX2F0dHJzW10gPSB7XG5tbS92bXNjYW4uYy01NTkyLVx0XHUwMDI2bHJ1X2dlbl9taW5fdHRsX2F0dHIuYXR0cixcbm1tL3Ztc2Nhbi5jOjU1OTM6XHRcdTAwMjZscnVfZ2VuX2VuYWJsZWRfYXR0ci5hdHRyLFxubW0vdm1zY2FuLmMtNTU5NC1cdE5VTExcbi0tXG5tbS92bXNjYW4uYz01OTc3PXZvaWQgbHJ1X2dlbl9pbml0X2xydXZlYyhzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMpXG4tLVxubW0vdm1zY2FuLmMtNTk4NC1cdGxydWdlbi1cdTAwM2VtYXhfc2VxID0gTUlOX05SX0dFTlMgJiM0MzsgMTtcbm1tL3Ztc2Nhbi5jOjU5ODU6XHRscnVnZW4tXHUwMDNlZW5hYmxlZCA9IGxydV9nZW5fZW5hYmxlZCgpO1xubW0vdm1zY2FuLmMtNTk4Ni1cbi0tXG5tbS92bXNjYW4uYz02MDc1PXN0YXRpYyB2b2lkIHNocmlua19scnV2ZWMoc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYylcbi0tXG5tbS92bXNjYW4uYy02MDg1LVxubW0vdm1zY2FuLmM6NjA4NjpcdGlmICgobHJ1X2dlbl9lbmFibGVkKCkgfHwgbHJ1X2dlbl9zd2l0Y2hpbmcoKSkgXHUwMDI2XHUwMDI2ICFyb290X3JlY2xhaW0oc2MpKSB7XG5tbS92bXNjYW4uYy02MDg3LVx0XHRscnVfZ2VuX3Nocmlua19scnV2ZWMobHJ1dmVjLCBzYyk7XG4tLVxubW0vdm1zY2FuLmM9NjM0NT1zdGF0aWMgdm9pZCBzaHJpbmtfbm9kZShwZ19kYXRhX3QgKnBnZGF0LCBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYylcbi0tXG5tbS92bXNjYW4uYy02MzUwLVxubW0vdm1zY2FuLmM6NjM1MTpcdGlmICgobHJ1X2dlbl9lbmFibGVkKCkgfHwgbHJ1X2dlbl9zd2l0Y2hpbmcoKSkgXHUwMDI2XHUwMDI2IHJvb3RfcmVjbGFpbShzYykpIHtcbm1tL3Ztc2Nhbi5jLTYzNTItXHRcdG1lbXNldChcdTAwMjZzYy1cdTAwM2VuciwgMCwgc2l6ZW9mKHNjLVx1MDAzZW5yKSk7XG4tLVxubW0vdm1zY2FuLmM9NjYwMj1zdGF0aWMgdm9pZCBzbmFwc2hvdF9yZWZhdWx0cyhzdHJ1Y3QgbWVtX2Nncm91cCAqdGFyZ2V0X21lbWNnLCBwZ19kYXRhX3QgKnBnZGF0KVxuLS1cbm1tL3Ztc2Nhbi5jLTY2MDYtXG5tbS92bXNjYW4uYzo2NjA3Olx0aWYgKGxydV9nZW5fZW5hYmxlZCgpIFx1MDAyNlx1MDAyNiAhbHJ1X2dlbl9zd2l0Y2hpbmcoKSlcbm1tL3Ztc2Nhbi5jLTY2MDgtXHRcdHJldHVybjtcbi0tXG5tbS92bXNjYW4uYz02OTUxPXN0YXRpYyB2b2lkIGtzd2FwZF9hZ2Vfbm9kZShzdHJ1Y3QgcGdsaXN0X2RhdGEgKnBnZGF0LCBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYylcbi0tXG5tbS92bXNjYW4uYy02OTU1LVxubW0vdm1zY2FuLmM6Njk1NjpcdGlmIChscnVfZ2VuX2VuYWJsZWQoKSB8fCBscnVfZ2VuX3N3aXRjaGluZygpKSB7XG5tbS92bXNjYW4uYy02OTU3LVx0XHRscnVfZ2VuX2FnZV9ub2RlKHBnZGF0LCBzYyk7XG4tLVxubW0vd29ya2luZ3NldC5jPTM5Mj12b2lkICp3b3JraW5nc2V0X2V2aWN0aW9uKHN0cnVjdCBmb2xpbyAqZm9saW8sIHN0cnVjdCBtZW1fY2dyb3VwICp0YXJnZXRfbWVtY2cpXG4tLVxubW0vd29ya2luZ3NldC5jLTQwNC1cbm1tL3dvcmtpbmdzZXQuYzo0MDU6XHRpZiAobHJ1X2dlbl9lbmFibGVkKCkpXG5tbS93b3JraW5nc2V0LmMtNDA2LVx0XHRyZXR1cm4gbHJ1X2dlbl9ldmljdGlvbihmb2xpbyk7XG4tLVxubW0vd29ya2luZ3NldC5jPTQzMD1ib29sIHdvcmtpbmdzZXRfdGVzdF9yZWNlbnQodm9pZCAqc2hhZG93LCBib29sIGZpbGUsIGJvb2wgKndvcmtpbmdzZXQsXG4tLVxubW0vd29ya2luZ3NldC5jLTQ0MS1cbm1tL3dvcmtpbmdzZXQuYzo0NDI6XHRpZiAobHJ1X2dlbl9lbmFibGVkKCkpIHtcbm1tL3dvcmtpbmdzZXQuYy00NDMtXHRcdGJvb2wgcmVjZW50O1xuLS1cbm1tL3dvcmtpbmdzZXQuYz01NDg9dm9pZCB3b3JraW5nc2V0X3JlZmF1bHQoc3RydWN0IGZvbGlvICpmb2xpbywgdm9pZCAqc2hhZG93KVxuLS1cbm1tL3dvcmtpbmdzZXQuYy01NTctXG5tbS93b3JraW5nc2V0LmM6NTU4Olx0aWYgKGxydV9nZW5fZW5hYmxlZCgpKSB7XG5tbS93b3JraW5nc2V0LmMtNTU5LVx0XHRscnVfZ2VuX3JlZmF1bHQoZm9saW8sIHNoYWRvdyk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDA3OjI1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE1MTU1CgkJCQkJCQlvdXRwdXQ6IDE0MAoJCQkJCQkJdGhvdWdodHM6IDI0MwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBbmFseXNpcyBvZiBNR0xSVSBDb25maWd1cmF0aW9uIGFuZCBGdXp6aW5nIFJlcXVpcmVtZW50cyoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBNR0xSVSBzZXR1cCBhbmQgbXkgaW5pdGlhbCBhc3Nlc3NtZW50IGNvbmZpcm1zIHRoYXQgYENPTkZJR19MUlVfR0VOYCBhbmQgYENPTkZJR19MUlVfR0VOX0VOQUJMRURgIGFyZSB0aGUga2V5IGNvbmZpZ3VyYXRpb25zIGhlcmUuIGBMUlVfR0VOX0VOQUJMRURgIGlzIHBhcnRpY3VsYXJseSBpbnRlcmVzdGluZyBiZWNhdXNlIGl0IHNlZW1zIHRvIGFjdGl2YXRlIE1HTFJVIGJ5IGRlZmF1bHQsIGJ5cGFzc2luZyB0aGUgbmVlZCBmb3Igc3lzZnMgaW50ZXJhY3Rpb24sIHdoaWNoIGlzIHNvbWV0aGluZyBJIG5lZWQgdG8ga2VlcCBpbiBtaW5kLgoKTm93LCBsZXQmIzM5O3MgbWFrZSBzdXJlIGV2ZXJ5dGhpbmcgY2hlY2tzIG91dCBmb3IgdGhlIGZ1enppbmcgcnVuLiBMb29rcyBsaWtlIGl0JiMzOTtzIGZsYWdnZWQgYXMgYFdvcnRoRnV6emluZzogdHJ1ZWAsIGFuZCB0aGUgcHJvdmlkZWQgcmVhc29uaW5nIHNlZW1zIHBlcmZlY3RseSBjb25jaXNlIGFuZCBsb2dpY2FsLiBUaGUgYEZvY3VzU3ltYm9sc2AgYXJlIHNwb3Qgb24g4oCTIGBldmljdF9mb2xpb3NgLCBgdHJ5X3RvX3Nocmlua19scnV2ZWNgLCBgcnVuX2V2aWN0aW9uYCwgYW5kIGBscnVfZ2VuX3Nocmlua19scnV2ZWNgLiBUaG9zZSBhcmUgdGhlIGNvcmUgZnVuY3Rpb25zIGRpcmVjdGx5IGludm9sdmVkIGluIG9yIGNvbnRhaW5pbmcgdGhlIG1vZGlmaWVkIGxvZ2ljIHdpdGhpbiBNR0xSVSYjMzk7cyBldmljdGlvbiBhbmQgcmVjbGFpbSBwYXRocywgc28gZnV6emluZyB0aGVtIGlzIGRlZmluaXRlbHkgdGhlIHJpZ2h0IGFwcHJvYWNoLgoKSSYjMzk7bGwgcXVpY2tseSBkbyBhIHNhbml0eSBjaGVjayBvbiB0aGUgY29uZmlncyBhZ2FpbiwganVzdCB0byBiZSBhYnNvbHV0ZWx5IGNlcnRhaW46ICYjMzQ7TFJVX0dFTiYjMzQ7LCAmIzM0O0xSVV9HRU5fRU5BQkxFRCYjMzQ7IOKAkyB5ZXAsIGFsbCBwcmVzZW50IGFuZCBhY2NvdW50ZWQgZm9yLiBBbmQgYSBmaW5hbCBzYW5pdHkgY2hlY2sgb24gdGhvc2UgZm9jdXMgc3ltYm9sczogJiMzNDtldmljdF9mb2xpb3MmIzM0OywgJiMzNDt0cnlfdG9fc2hyaW5rX2xydXZlYyYjMzQ7LCAmIzM0O3J1bl9ldmljdGlvbiYjMzQ7LCAmIzM0O2xydV9nZW5fc2hyaW5rX2xydXZlYyYjMzQ7IC0tIFllcCwgYWxsIG9mIHRoZW0uCgpHaXZlbiBhbGwgb2YgdGhpcywgSSYjMzk7bSBjb25maWRlbnQgaW4gdGhlIHNldHVwLiBUaW1lIHRvIHByb2NlZWQgYW5kIGNhbGwgYHNldC1yZXN1bHRzYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDcgMDc6MjU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0xSVV9HRU4mIzM0OywKICAgICYjMzQ7TFJVX0dFTl9FTkFCTEVEJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7ZXZpY3RfZm9saW9zJiMzNDssCiAgICAmIzM0O3RyeV90b19zaHJpbmtfbHJ1dmVjJiMzNDssCiAgICAmIzM0O3J1bl9ldmljdGlvbiYjMzQ7LAogICAgJiMzNDtscnVfZ2VuX3Nocmlua19scnV2ZWMmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgTXVsdGktR2VuIExSVSAoTUdMUlUpIHBhZ2UgcmVjbGFpbSBsb2dpYyBpbiBtbS92bXNjYW4uYywgZW5zdXJpbmcgZm9saW8gTFJVIHJlZmVyZW5jZXMgYXJlIHVuY29uZGl0aW9uYWxseSByZXNldCB3aGVuIGZvbGlvcyBhcmUgcHV0IGJhY2suIFRoaXMgdG91Y2hlcyBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IHBhZ2UgZXZpY3Rpb24gcGF0aHMgcmVhY2hhYmxlIGR1cmluZyBtZW1vcnkgcmVjbGFpbSB1bmRlciBNR0xSVS4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7TFJVX0dFTiYjMzQ7LAogICAgJiMzNDtMUlVfR0VOX0VOQUJMRUQmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtldmljdF9mb2xpb3MmIzM0OywKICAgICYjMzQ7dHJ5X3RvX3Nocmlua19scnV2ZWMmIzM0OywKICAgICYjMzQ7cnVuX2V2aWN0aW9uJiMzNDssCiAgICAmIzM0O2xydV9nZW5fc2hyaW5rX2xydXZlYyYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBNdWx0aS1HZW4gTFJVIChNR0xSVSkgcGFnZSByZWNsYWltIGxvZ2ljIGluIG1tL3Ztc2Nhbi5jLCBlbnN1cmluZyBmb2xpbyBMUlUgcmVmZXJlbmNlcyBhcmUgdW5jb25kaXRpb25hbGx5IHJlc2V0IHdoZW4gZm9saW9zIGFyZSBwdXQgYmFjay4gVGhpcyB0b3VjaGVzIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgcGFnZSBldmljdGlvbiBwYXRocyByZWFjaGFibGUgZHVyaW5nIG1lbW9yeSByZWNsYWltIHVuZGVyIE1HTFJVLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIzLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNyAwNzoyNTwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+SWY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDA3OjI1PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmNvcmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgcGFnZSByZWNsYWltIGxvZ2ljIGluIHRoZSBNdWx0aS1HZW4gTFJVIChNR0xSVSkgc3Vic3lzdGVtIChgbW0vdm1zY2FuLmNgKSwgc3BlY2lmaWNhbGx5IGluIGBldmljdF9mb2xpb3MoKWAuIEl0IG1vdmVzIGBmb2xpb19zZXRfbHJ1X3JlZnMoZm9saW8sIDApYCBvdXRzaWRlIG9mIGEgY29uZGl0aW9uYWwgY2hlY2sgc28gdGhhdCBMUlUgcmVmZXJlbmNlIGZsYWdzIGFyZSBjbGVhcmVkIHVuY29uZGl0aW9uYWxseSBmb3IgZm9saW9zIHJlbWFpbmluZyBvbiB0aGUgbGlzdC5cblxuVGhpcyBjaGFuZ2UgcHVyZWx5IGFmZmVjdHMgZm9saW8gbWV0YWRhdGEvZmxhZ3MgZHVyaW5nIExSVSBwYWdlIHJlY2xhaW0uIEl0IGRvZXMgbm90IGludHJvZHVjZSBvciBtb2RpZnk6XG4xLiBEYXRhIHN0cnVjdHVyZXMgY29waWVkIHRvIHVzZXIgc3BhY2Ugb3Iga2VybmVsIGluZm8tbGVha3MuXG4yLiBVbmluaXRpYWxpemVkIHZhcmlhYmxlcywgc3RydWN0IGZpZWxkcywgb3IgbWVtb3J5IGFsbG9jYXRpb25zLlxuMy4gTGVuZ3RocyBvciBib3VuZHMgY2hlY2tzIHRoYXQgY291bGQgZXhwb3NlIHVuaW5pdGlhbGl6ZWQgYnVmZmVyIG1lbW9yeS5cblxuQmVjYXVzZSB0aGVyZSBhcmUgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3Mgb3IgaW5mby1sZWFrcywgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCB3YXJyYW50ZWQuIFN0YW5kYXJkIEtBU0FOL3Nhbml0aXplciBidWlsZHMgYXJlIHN1ZmZpY2llbnQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5CmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kCmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikKZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuCgpDUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjoKLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlCiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOCiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUAogIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuCi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsCiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLgoKUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTiwKTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy4KQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWQpzZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrcwp0aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLgoKTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3QKdW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsCmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5cwp0aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZwp1bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2wKZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLApjYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy4KClNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczoKMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2IKICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHMKICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC4KMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlcwogICBvciBzdHJ1Y3QgZmllbGRzLgozLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzCiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuCjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzCiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy4KClNldCBOZWVkc0tNU0FOPWZhbHNlIElGOgotIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyCiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0CiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLgotIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkCiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLgotIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy4KClVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGUKZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5UYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NAoKRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCBhMzhlZTA5MTNiZmExMjQ0OTc5ODNiOGVjYTRhODZiNjJjOTQ2NGQwCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIE1vbiBTZXAgNyAwNzoyNToxOSAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL21tL3Ztc2Nhbi5jIGIvbW0vdm1zY2FuLmMKaW5kZXggNDBkM2YxYjQ4YTc0Yy4uNDJjMGEwOTkzOGFiMiAxMDA2NDQKLS0tIGEvbW0vdm1zY2FuLmMKJiM0MzsmIzQzOyYjNDM7IGIvbW0vdm1zY2FuLmMKQEAgLTUwMjEsMTAgJiM0Mzs1MDIxLDExIEBAIHN0YXRpYyBpbnQgZXZpY3RfZm9saW9zKHVuc2lnbmVkIGxvbmcgbnJfdG9fc2Nhbiwgc3RydWN0IGxydXZlYyAqbHJ1dmVjLAogCQl9CiAKIAkJLyogZG9uJiMzOTt0IGFkZCByZWplY3RlZCBmb2xpb3MgdG8gdGhlIG9sZGVzdCBnZW5lcmF0aW9uICovCi0JCWlmIChscnVfZ2VuX2ZvbGlvX3NlcShscnV2ZWMsIGZvbGlvLCBmYWxzZSkgPT0gbWluX3NlcVt0eXBlXSkgewotCQkJZm9saW9fc2V0X2xydV9yZWZzKGZvbGlvLCAwKTsKJiM0MzsJCWlmIChscnVfZ2VuX2ZvbGlvX3NlcShscnV2ZWMsIGZvbGlvLCBmYWxzZSkgPT0gbWluX3NlcVt0eXBlXSkKIAkJCWZvbGlvX3NldF9hY3RpdmUoZm9saW8pOwotCQl9CiYjNDM7CiYjNDM7CQkvKiBTZWUgdGhlIGNvbW1lbnRzIG9uIExSVV9SRUZTX0ZMQUdTICovCiYjNDM7CQlmb2xpb19zZXRfbHJ1X3JlZnMoZm9saW8sIDApOwogCX0KIAogCW1vdmVfZm9saW9zX3RvX2xydSgmYW1wO2xpc3QpOwo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNS8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDcgMDc6MjU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjE1OQoJCQkJCQkJb3V0cHV0OiAzNQoJCQkJCQkJdGhvdWdodHM6IDQ3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBteSBvd246CgoqKkFuYWx5emluZyBhIFBvdGVudGlhbCBNZW1vcnkgTWFuYWdlbWVudCBQYXRjaCoqCgpBbHJpZ2h0LCB0aW1lIHRvIGRpdmUgaW4uIEkgbmVlZCB0byBnZXQgYSBoYW5kbGUgb24gdGhpcyBwYXRjaCwgYW5kIHRoZSBjb250ZXh0IGl0JiMzOTtzIHdvcmtpbmcgd2l0aGluLiBJJiMzOTttIHRoaW5raW5nIHRoZSBsb2dpY2FsIHBsYWNlIHRvIHN0YXJ0IGlzIHJpZ2h0IHRoZXJlIGluIGBtbS92bXNjYW4uY2AuIExldCBtZSBxdWlja2x5IHB1bGwgdXAgdGhhdCBmaWxlIOKAkyB0aGUgdXN1YWwgYHJlYWQtZmlsZWAgY29tbWFuZCBzaG91bGQgZG8gdGhlIHRyaWNrLiBOb3csIGxldCYjMzk7cyB6ZXJvIGluIG9uIHJvdWdobHkgbGluZSA1MDIxLiBUaGF0JiMzOTtzIHVzdWFsbHkgYSBnb29kIHN0YXJ0aW5nIHBvaW50IHRvIGdldCBhIGZlZWwgZm9yIHdoYXQmIzM5O3MgaGFwcGVuaW5nIGluIHRoZSB2aWNpbml0eSBvZiB0aGUgY2hhbmdlLiBUaGlzIHNob3VsZCBnaXZlIG1lIHRoZSBjb3JlIGlkZWEgb2Ygd2hhdCBpcyBoYXBwZW5pbmcuIE9uY2UgSSBoYXZlIHRoZSBjb3JlIGNvbmNlcHQsIEkmIzM5O2xsIGJyYW5jaCBvdXQgYXMgcmVxdWlyZWQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjYvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDA3OjI2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bW0vdm1zY2FuLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA1MDAwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDQ1Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzUwMDA6XHRcdHNjLVx1MDAzZW5yX3JlY2xhaW1lZCAmIzQzOz0gcmVjbGFpbWVkO1xuNTAwMTpcdFx0dG90YWxfcmVjbGFpbWVkICYjNDM7PSByZWNsYWltZWQ7XG41MDAyOlx0XHQvKiBSZXRyeSBwYXNzIGlzIG9ubHkgbWVhbnQgZm9yIGNsZWFuIGZvbGlvcyB3aXRob3V0IG5ldyBpc29sYXRpb24gKi9cbjUwMDM6XHRcdGlmIChpc29sYXRlZClcbjUwMDQ6XHRcdFx0aGFuZGxlX3JlY2xhaW1fd3JpdGViYWNrKGlzb2xhdGVkLCBwZ2RhdCwgc2MsIFx1MDAyNnN0YXQpO1xuNTAwNTpcdFx0dHJhY2VfbW1fdm1zY2FuX2xydV9zaHJpbmtfaW5hY3RpdmUocGdkYXQtXHUwMDNlbm9kZV9pZCxcbjUwMDY6XHRcdFx0XHR0eXBlX3NjYW5uZWQsIHJlY2xhaW1lZCwgXHUwMDI2c3RhdCwgc2MtXHUwMDNlcHJpb3JpdHksXG41MDA3Olx0XHRcdFx0dHlwZSA/IExSVV9JTkFDVElWRV9GSUxFIDogTFJVX0lOQUNUSVZFX0FOT04pO1xuNTAwODpcdFxuNTAwOTpcdFx0bGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlX3JldmVyc2UoZm9saW8sIG5leHQsIFx1MDAyNmxpc3QsIGxydSkge1xuNTAxMDpcdFx0XHRERUZJTkVfTUlOX1NFUShscnV2ZWMpO1xuNTAxMTpcdFxuNTAxMjpcdFx0XHQvKiBtb3ZlX2ZvbGlvc190b19scnUoKSBjdWxscyB1bmV2aWN0YWJsZSBmb2xpb3MgdmlhIGZvbGlvX3B1dGJhY2tfbHJ1KCkgKi9cbjUwMTM6XHRcdFx0aWYgKCFmb2xpb19ldmljdGFibGUoZm9saW8pKVxuNTAxNDpcdFx0XHRcdGNvbnRpbnVlO1xuNTAxNTpcdFxuNTAxNjpcdFx0XHQvKiByZXRyeSBmb2xpb3MgdGhhdCBtYXkgaGF2ZSBtaXNzZWQgZm9saW9fcm90YXRlX3JlY2xhaW1hYmxlKCkgKi9cbjUwMTc6XHRcdFx0aWYgKCFza2lwX3JldHJ5IFx1MDAyNlx1MDAyNiAhZm9saW9fdGVzdF9hY3RpdmUoZm9saW8pIFx1MDAyNlx1MDAyNiAhZm9saW9fbWFwcGVkKGZvbGlvKSBcdTAwMjZcdTAwMjZcbjUwMTg6XHRcdFx0ICAgICFmb2xpb190ZXN0X2RpcnR5KGZvbGlvKSBcdTAwMjZcdTAwMjYgIWZvbGlvX3Rlc3Rfd3JpdGViYWNrKGZvbGlvKSkge1xuNTAxOTpcdFx0XHRcdGxpc3RfbW92ZShcdTAwMjZmb2xpby1cdTAwM2VscnUsIFx1MDAyNmNsZWFuKTtcbjUwMjA6XHRcdFx0XHRjb250aW51ZTtcbjUwMjE6XHRcdFx0fVxuNTAyMjpcdFxuNTAyMzpcdFx0XHQvKiBkb24mIzM5O3QgYWRkIHJlamVjdGVkIGZvbGlvcyB0byB0aGUgb2xkZXN0IGdlbmVyYXRpb24gKi9cbjUwMjQ6XHRcdFx0aWYgKGxydV9nZW5fZm9saW9fc2VxKGxydXZlYywgZm9saW8sIGZhbHNlKSA9PSBtaW5fc2VxW3R5cGVdKVxuNTAyNTpcdFx0XHRcdGZvbGlvX3NldF9hY3RpdmUoZm9saW8pO1xuNTAyNjpcdFxuNTAyNzpcdFx0XHQvKiBTZWUgdGhlIGNvbW1lbnRzIG9uIExSVV9SRUZTX0ZMQUdTICovXG41MDI4Olx0XHRcdGZvbGlvX3NldF9scnVfcmVmcyhmb2xpbywgMCk7XG41MDI5Olx0XHR9XG41MDMwOlx0XG41MDMxOlx0XHRtb3ZlX2ZvbGlvc190b19scnUoXHUwMDI2bGlzdCk7XG41MDMyOlx0XG41MDMzOlx0XHR3YWxrID0gY3VycmVudC1cdTAwM2VyZWNsYWltX3N0YXRlLVx1MDAzZW1tX3dhbGs7XG41MDM0Olx0XHRpZiAod2FsayBcdTAwMjZcdTAwMjYgd2Fsay1cdTAwM2ViYXRjaGVkKSB7XG41MDM1Olx0XHRcdHdhbGstXHUwMDNlbHJ1dmVjID0gbHJ1dmVjO1xuNTAzNjpcdFx0XHRyZXNldF9iYXRjaF9zaXplKHdhbGspO1xuNTAzNzpcdFx0fVxuNTAzODpcdFxuNTAzOTpcdFx0bW9kX2xydXZlY19zdGF0ZShscnV2ZWMsIFBHREVNT1RFX0tTV0FQRCAmIzQzOyByZWNsYWltZXJfb2Zmc2V0KHNjKSxcbjUwNDA6XHRcdFx0XHRcdFx0c3RhdC5ucl9kZW1vdGVkKTtcbjUwNDE6XHRcbjUwNDI6XHRcdGl0ZW0gPSBQR1NURUFMX0tTV0FQRCAmIzQzOyByZWNsYWltZXJfb2Zmc2V0KHNjKTtcbjUwNDM6XHRcdG1vZF9scnV2ZWNfc3RhdGUobHJ1dmVjLCBpdGVtLCByZWNsYWltZWQpO1xuNTA0NDpcdFx0bW9kX2xydXZlY19zdGF0ZShscnV2ZWMsIFBHU1RFQUxfQU5PTiAmIzQzOyB0eXBlLCByZWNsYWltZWQpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI3LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNyAwNzoyNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzMjA3CgkJCQkJCQlvdXRwdXQ6IDIyCgkJCQkJCQl0aG91Z2h0czogMjMzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgRXZpY3QgRm9saW9zIFBhdGNoKioKCkFscmlnaHQsIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcyBwYXRjaC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGNoYW5nZSBpbiBgZXZpY3RfZm9saW9zYC4gT2theSwgcHJldmlvdXNseSwgdGhlIGNvZGUgaW5jbHVkZWQgYSBjaGVjayB0byBwcmV2ZW50IHJlamVjdGVkIGZvbGlvcyBmcm9tIGJlaW5nIGFkZGVkIHRvIHRoZSBvbGRlc3QgZ2VuZXJhdGlvbi4gSWYgYSBmb2xpbyYjMzk7cyBzZXF1ZW5jZSBtYXRjaGVkIHRoZSBtaW5pbXVtIHNlcXVlbmNlLCBpdCB3YXMgYmVpbmcgemVyb2VkIG91dCByZWdhcmRpbmcgcmVmZXJlbmNlcyAqYW5kKiBzZXQgdG8gYWN0aXZlLiBUaGUgY2hhbmdlIGFwcGVhcnMgdG8gaGF2ZSByZW1vdmVkIHRoZSBgZm9saW9fc2V0X2xydV9yZWZzKGZvbGlvLCAwKWAgY2FsbCBmcm9tIHdpdGhpbiB0aGUgYGlmYCBibG9jaywgaW5zdGVhZCBtb3ZpbmcgaXQgKmFmdGVyKiB0aGUgYGlmYCBzdGF0ZW1lbnQuIEFuZCB0aGUgZm9saW8gaXMgbm93ICpvbmx5KiBzZXQgdG8gYWN0aXZlIGluc2lkZSB0aGUgYGlmYCBzdGF0ZW1lbnQuCgpJIG5lZWQgdG8gdW5kZXJzdGFuZCAqd2h5KiB0aGlzIGNoYW5nZSB3YXMgbWFkZS4gSXQgc2VlbXMgbGlrZSB0aGUgaW50ZW50aW9uIGlzIHRvIG1vZGlmeSBob3cgbHJ1IHJlZmVyZW5jZXMgYXJlIGhhbmRsZWQgc3BlY2lmaWNhbGx5IGNvbmNlcm5pbmcgcmVqZWN0ZWQgZm9saW9zLiBUaGUgY29tbWVudCBvbiBgTFJVX1JFRlNfRkxBR1NgIGlzIGEgY2x1ZS4gSSYjMzk7bGwgbmVlZCB0byBjaGVjayB0aGUgZGVmaW5pdGlvbiBvZiBgZm9saW9fc2V0X2xydV9yZWZzYCBhbmQgdGhlIGBMUlVfUkVGU19GTEFHU2AgY29tbWVudC4gTGV0JiMzOTtzIHNlZS4uLiBhIHF1aWNrIGdyZXAgZm9yIGBmb2xpb19zZXRfbHJ1X3JlZnNgIHNob3VsZCBnaXZlIG1lIHRoZSByZWxldmFudCBpbmZvcm1hdGlvbi4gSXQgc2VlbXMgbGlrZSB0aGlzIG1vZGlmaWNhdGlvbiBpcyBkZXNpZ25lZCB0byBwcmV2ZW50IGEgcmFjZSBjb25kaXRpb24gb3Igc29tZSB1bmV4cGVjdGVkIGJlaGF2aW9yIHJlbGF0ZWQgdG8gaG93IHRoZSBMUlUgcmVmZXJlbmNlcyBhcmUgbWFuYWdlZCBpbiB0aGlzIHNwZWNpZmljIHNjZW5hcmlvIHdpdGggcmVqZWN0ZWQgZm9saW9zLiBJIG5lZWQgdG8gdHJhY2UgdGhpcyBmdXJ0aGVyIHRvIGJlIGNlcnRhaW4sIGJ1dCB0aGlzIGluaXRpYWwgYW5hbHlzaXMgZ2l2ZXMgbWUgYSBnb29kIHN0YXJ0aW5nIHBvaW50LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI4LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNyAwNzoyNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtmb2xpb19zZXRfbHJ1X3JlZnMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7aW5jbHVkZS9saW51eC9tbV9pbmxpbmUuaD0yMjU9c3RhdGljIGlubGluZSBpbnQgZm9saW9fbHJ1X3JlZnMoY29uc3Qgc3RydWN0IGZvbGlvICpmb2xpbylcbi0tXG5pbmNsdWRlL2xpbnV4L21tX2lubGluZS5oLTIyOS1cbmluY2x1ZGUvbGludXgvbW1faW5saW5lLmg6MjMwOnN0YXRpYyBpbmxpbmUgdm9pZCBmb2xpb19zZXRfbHJ1X3JlZnMoc3RydWN0IGZvbGlvICpmb2xpbywgdW5zaWduZWQgaW50IHJlZnMpXG5pbmNsdWRlL2xpbnV4L21tX2lubGluZS5oLTIzMS17XG4tLVxuaW5jbHVkZS9saW51eC9tbV9pbmxpbmUuaD0zOTY9c3RhdGljIGlubGluZSB2b2lkIGZvbGlvX21pZ3JhdGVfbHJ1X3JlZnMoc3RydWN0IGZvbGlvICpuZXcsIGNvbnN0IHN0cnVjdCBmb2xpbyAqb2xkKVxuLS1cbmluY2x1ZGUvbGludXgvbW1faW5saW5lLmgtMzk4LVx0QlVJTERfQlVHX09OKExSVV9SRUZTX01BU0sgXHUwMDI2IEJJVChQR19yZWZlcmVuY2VkKSk7XG5pbmNsdWRlL2xpbnV4L21tX2lubGluZS5oOjM5OTpcdGZvbGlvX3NldF9scnVfcmVmcyhuZXcsIGZvbGlvX2xydV9yZWZzKG9sZCkpO1xuaW5jbHVkZS9saW51eC9tbV9pbmxpbmUuaC00MDAtfVxuLS1cbm1tL2ZvbGlvLmM9MzU1PXN0YXRpYyB2b2lkIGxydV9nZW5faW5jX3JlZnMoc3RydWN0IGZvbGlvICpmb2xpbylcbi0tXG5tbS9mb2xpby5jLTM2NC1cdGlmICghZm9saW9fbHJ1X3JlZnMoZm9saW8pKSB7XG5tbS9mb2xpby5jOjM2NTpcdFx0Zm9saW9fc2V0X2xydV9yZWZzKGZvbGlvLCAxKTtcbm1tL2ZvbGlvLmMtMzY2LVx0XHRyZXR1cm47XG4tLVxubW0vZm9saW8uYz0zODE9c3RhdGljIGJvb2wgbHJ1X2dlbl9jbGVhcl9yZWZzKHN0cnVjdCBmb2xpbyAqZm9saW8pXG4tLVxubW0vZm9saW8uYy0zODktXG5tbS9mb2xpby5jOjM5MDpcdGZvbGlvX3NldF9scnVfcmVmcyhmb2xpbywgMCk7XG5tbS9mb2xpby5jLTM5MS1cdGZvbGlvX2NsZWFyX3dvcmtpbmdzZXQoZm9saW8pO1xuLS1cbm1tL3Ztc2Nhbi5jPTg2MD1zdGF0aWMgYm9vbCBscnVfZ2VuX3NldF9yZWZzKHN0cnVjdCBmb2xpbyAqZm9saW8sIGNvbnN0IHZtYV9mbGFnc190ICp2bWFfZmxhZ3MpXG4tLVxubW0vdm1zY2FuLmMtODY2LVx0XHRcdGZvbGlvX3NldF93b3JraW5nc2V0KGZvbGlvKTtcbm1tL3Ztc2Nhbi5jOjg2NzpcdFx0XHRmb2xpb19zZXRfbHJ1X3JlZnMoZm9saW8sIDApO1xubW0vdm1zY2FuLmMtODY4LVx0XHRcdHJldHVybiB0cnVlO1xuLS1cbm1tL3Ztc2Nhbi5jLTg3MC1cbm1tL3Ztc2Nhbi5jOjg3MTpcdFx0Zm9saW9fc2V0X2xydV9yZWZzKGZvbGlvLCAxKTtcbm1tL3Ztc2Nhbi5jLTg3Mi1cdFx0cmV0dXJuIGZhbHNlO1xuLS1cbm1tL3Ztc2Nhbi5jLTg3Ny1cdFx0Zm9saW9fc2V0X3dvcmtpbmdzZXQoZm9saW8pO1xubW0vdm1zY2FuLmM6ODc4Olx0XHRmb2xpb19zZXRfbHJ1X3JlZnMoZm9saW8sIDApO1xubW0vdm1zY2FuLmMtODc5LVx0fSBlbHNlIHtcbi0tXG5tbS92bXNjYW4uYz0zMjk3PXN0YXRpYyBpbnQgZm9saW9fdXBkYXRlX2dlbihzdHJ1Y3QgZm9saW8gKmZvbGlvLCBpbnQgbmV3X2dlbiwgaW50ICp0eXBlLFxuLS1cbm1tL3Ztc2Nhbi5jLTMzMDktXHQgICAgIWlzX2V4ZWNfZmlsZV9mb2xpbyhmb2xpbywgdm1hX2ZsYWdzKSkge1xubW0vdm1zY2FuLmM6MzMxMDpcdFx0Zm9saW9fc2V0X2xydV9yZWZzKGZvbGlvLCAxKTtcbm1tL3Ztc2Nhbi5jLTMzMTEtXHRcdHJldHVybiAtMTtcbi0tXG5tbS92bXNjYW4uYz00Nzc0PXN0YXRpYyBib29sIGlzb2xhdGVfZm9saW8oc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYylcbi0tXG5tbS92bXNjYW4uYy00Nzg5LVx0aWYgKCFmb2xpb190ZXN0X3JlZmVyZW5jZWQoZm9saW8pKVxubW0vdm1zY2FuLmM6NDc5MDpcdFx0Zm9saW9fc2V0X2xydV9yZWZzKGZvbGlvLCAwKTtcbm1tL3Ztc2Nhbi5jLTQ3OTEtXG4tLVxubW0vdm1zY2FuLmM9NDk2ND1zdGF0aWMgaW50IGV2aWN0X2ZvbGlvcyh1bnNpZ25lZCBsb25nIG5yX3RvX3NjYW4sIHN0cnVjdCBscnV2ZWMgKmxydXZlYyxcbi0tXG5tbS92bXNjYW4uYy01MDI3LVx0XHQvKiBTZWUgdGhlIGNvbW1lbnRzIG9uIExSVV9SRUZTX0ZMQUdTICovXG5tbS92bXNjYW4uYzo1MDI4Olx0XHRmb2xpb19zZXRfbHJ1X3JlZnMoZm9saW8sIDApO1xubW0vdm1zY2FuLmMtNTAyOS1cdH1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOS8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDcgMDc6MjY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDc2NQoJCQkJCQkJb3V0cHV0OiAyMDcKCQkJCQkJCXRob3VnaHRzOiA1NTQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqS01TQU4gQ2hlY2s6IEFsbCBDbGVhcioqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBNeSBmb2N1cyBoZXJlIGlzIG9uIGVuc3VyaW5nIHRoaXMgYGZvbGlvX3NldF9scnVfcmVmcyhmb2xpbywgMClgIGNoYW5nZSBpcyBLTVNBTi1zYWZlLCBzcGVjaWZpY2FsbHkgaW4gdGhlIGNvbnRleHQgb2YgbXVsdGktZ2VuIExSVSBldmljdGlvbi4gSXQmIzM5O3MgZXNzZW50aWFsbHkgYWJvdXQgY2xlYXJpbmcgTFJVIHJlZmVyZW5jZSBiaXRzIHdpdGhpbiB0aGUgZm9saW8gZmxhZ3MgZm9yIGZvbGlvcyBvbiB0aGUgcmVjbGFpbSBsaXN0LCByaWdodD8KCkZpcnN0LCB0aGUga2V5IHBvaW50IGlzIHRoYXQgYGZvbGlvYCBpcyBhbHJlYWR5IGEgdmFsaWQgYHN0cnVjdCBmb2xpbyAqYCBvbiB0aGUgcmVjbGFpbSBsaXN0LiBgZm9saW9fc2V0X2xydV9yZWZzYCBpcyBqdXN0IG1hbmlwdWxhdGluZyAqZXhpc3RpbmcqIGJpdHMgd2l0aGluIHRoZSBmb2xpbyBmbGFncy4gTm8gbmV3IG1lbW9yeSBpcyBiZWluZyBhbGxvY2F0ZWQsIG5vIGRhdGEgaXMgYmVpbmcgY29waWVkIHRvIHVzZXJzcGFjZSwgYW5kIHRoZXJlJiMzOTtzIGFic29sdXRlbHkgbm8gcmlzayBvZiBlbmNvdW50ZXJpbmcgdW5pbml0aWFsaXplZCBzdGFjayBvciBoZWFwIHZhcmlhYmxlcywgc3RydWN0IGZpZWxkcywgb3IgcmVhZHMuCgpOb3csIGxldCYjMzk7cyBjb25zaWRlciB3aGF0IEtNU0FOIGFuZCBLQVNBTiB3b3VsZCBub3JtYWxseSBjYXRjaC4gS0FTQU4gaXMgYWxsIGFib3V0IG1lbW9yeSBzYWZldHkg4oCTIG91dC1vZi1ib3VuZHMgYWNjZXNzLCB1c2UtYWZ0ZXItZnJlZSwgZXRjLiBLTVNBTiBkZWFscyB3aXRoIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzIHRoYXQgY291bGQgcG90ZW50aWFsbHkgbGVhayBpbmZvcm1hdGlvbiB0byB1c2Vyc3BhY2UuIFNpbmNlIHRoaXMgaXMgcHVyZWx5IHN0YXRlIG1hbmFnZW1lbnQgZm9yIExSVSBwYWdlIHJlY2xhaW0sIGp1c3QgcmVzZXR0aW5nIHRob3NlIHJlZmVyZW5jZXMgb24gZm9saW9zIHVuY29uZGl0aW9uYWxseSwgdGhlcmUmIzM5O3MgemVybyBjaGFuY2Ugb2YgaW50cm9kdWNpbmcgdW5pbml0aWFsaXplZCBtZW1vcnkgYWNjZXNzLgoKSSYjMzk7dmUgZ29uZSB0aHJvdWdoIHRoZSBjcml0ZXJpYS4gRG9lcyB0aGlzIHBhdGNoOgoKMS4gIEludHJvZHVjZS9tb2RpZnkga2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2Vyc3BhY2Ugd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHMgY291bGQgYmUgZXhwb3NlZD8gTm9wZS4KMi4gIEhhdmUgY29uZGl0aW9uYWwgbG9naWMgZGVwZW5kaW5nIG9uIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzPyBBYnNvbHV0ZWx5IG5vdC4KMy4gIEFsbG9jYXRlIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzIGNvdWxkIGJlIHJlYWQ/IE5vIHdheS4KNC4gIEFmZmVjdCBib3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyB0aGF0IGNvdWxkIGV4cG9zZSB1bmluaXRpYWxpemVkIGRhdGE/IE5vcGUuCgpBbmQgY29udmVyc2VseSwgaXQgZml0cyB0aGUgY3JpdGVyaWEgZm9yIGBOZWVkc0tNU0FOPWZhbHNlYDogaXQmIzM5O3MgcHJpbWFyaWx5IGFib3V0IHBhZ2UgcmVjbGFpbSBzdGF0ZSBtYW5hZ2VtZW50LCB3aGljaCBtZWFucyB3ZSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzIChhbGwgb2Ygd2hpY2ggYXJlIEtBU0FOJiMzOTtzIGRvbWFpbikuIEFsbCBzdHJ1Y3R1cmVzIGFyZSBpbml0aWFsaXplZCBiZWZvcmUgdXNlIGFuZCB0aGVyZSYjMzk7cyBubyByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlLiBUaGlzIGlzIGNvbXBsZXRlbHkgY2xlYXIsIGNvbmNpc2UsIGFuZCB1bmFtYmlndW91cy4KCk9rYXksIEkmIzM5O20gY29uZmlkZW50LiBMZXQmIzM5O3MgY2FsbCBgc2V0LXJlc3VsdHNgLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMwLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNyAwNzoyNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBwYWdlIHJlY2xhaW0gbG9naWMgaW4gdGhlIE11bHRpLUdlbiBMUlUgKE1HTFJVKSBzdWJzeXN0ZW0gKGBtbS92bXNjYW4uY2ApLCBzcGVjaWZpY2FsbHkgaW4gYGV2aWN0X2ZvbGlvcygpYC4gSXQgbW92ZXMgYGZvbGlvX3NldF9scnVfcmVmcyhmb2xpbywgMClgIG91dHNpZGUgb2YgYSBjb25kaXRpb25hbCBjaGVjayBzbyB0aGF0IExSVSByZWZlcmVuY2UgZmxhZ3MgYXJlIGNsZWFyZWQgdW5jb25kaXRpb25hbGx5IGZvciBmb2xpb3MgcmVtYWluaW5nIG9uIHRoZSBsaXN0LlxuXG5UaGlzIGNoYW5nZSBwdXJlbHkgYWZmZWN0cyBmb2xpbyBtZXRhZGF0YS9mbGFncyBkdXJpbmcgTFJVIHBhZ2UgcmVjbGFpbS4gSXQgZG9lcyBub3QgaW50cm9kdWNlIG9yIG1vZGlmeTpcbjEuIERhdGEgc3RydWN0dXJlcyBjb3BpZWQgdG8gdXNlciBzcGFjZSBvciBrZXJuZWwgaW5mby1sZWFrcy5cbjIuIFVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzLCBzdHJ1Y3QgZmllbGRzLCBvciBtZW1vcnkgYWxsb2NhdGlvbnMuXG4zLiBMZW5ndGhzIG9yIGJvdW5kcyBjaGVja3MgdGhhdCBjb3VsZCBleHBvc2UgdW5pbml0aWFsaXplZCBidWZmZXIgbWVtb3J5LlxuXG5CZWNhdXNlIHRoZXJlIGFyZSBubyB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcyBvciBpbmZvLWxlYWtzLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZC4gU3RhbmRhcmQgS0FTQU4vc2FuaXRpemVyIGJ1aWxkcyBhcmUgc3VmZmljaWVudC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHBhZ2UgcmVjbGFpbSBsb2dpYyBpbiB0aGUgTXVsdGktR2VuIExSVSAoTUdMUlUpIHN1YnN5c3RlbSAoYG1tL3Ztc2Nhbi5jYCksIHNwZWNpZmljYWxseSBpbiBgZXZpY3RfZm9saW9zKClgLiBJdCBtb3ZlcyBgZm9saW9fc2V0X2xydV9yZWZzKGZvbGlvLCAwKWAgb3V0c2lkZSBvZiBhIGNvbmRpdGlvbmFsIGNoZWNrIHNvIHRoYXQgTFJVIHJlZmVyZW5jZSBmbGFncyBhcmUgY2xlYXJlZCB1bmNvbmRpdGlvbmFsbHkgZm9yIGZvbGlvcyByZW1haW5pbmcgb24gdGhlIGxpc3QuXG5cblRoaXMgY2hhbmdlIHB1cmVseSBhZmZlY3RzIGZvbGlvIG1ldGFkYXRhL2ZsYWdzIGR1cmluZyBMUlUgcGFnZSByZWNsYWltLiBJdCBkb2VzIG5vdCBpbnRyb2R1Y2Ugb3IgbW9kaWZ5OlxuMS4gRGF0YSBzdHJ1Y3R1cmVzIGNvcGllZCB0byB1c2VyIHNwYWNlIG9yIGtlcm5lbCBpbmZvLWxlYWtzLlxuMi4gVW5pbml0aWFsaXplZCB2YXJpYWJsZXMsIHN0cnVjdCBmaWVsZHMsIG9yIG1lbW9yeSBhbGxvY2F0aW9ucy5cbjMuIExlbmd0aHMgb3IgYm91bmRzIGNoZWNrcyB0aGF0IGNvdWxkIGV4cG9zZSB1bmluaXRpYWxpemVkIGJ1ZmZlciBtZW1vcnkuXG5cbkJlY2F1c2UgdGhlcmUgYXJlIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzIG9yIGluZm8tbGVha3MsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3Qgd2FycmFudGVkLiBTdGFuZGFyZCBLQVNBTi9zYW5pdGl6ZXIgYnVpbGRzIGFyZSBzdWZmaWNpZW50LiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wOS0wN1QwNzoyNToyMS4yNTc0NTI4OFoiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ4OTgxOTk0MTQ3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkxSVV9HRU5cIixcbiAgICBcIkxSVV9HRU5fRU5BQkxFRFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImV2aWN0X2ZvbGlvc1wiLFxuICAgIFwidHJ5X3RvX3Nocmlua19scnV2ZWNcIixcbiAgICBcInJ1bl9ldmljdGlvblwiLFxuICAgIFwibHJ1X2dlbl9zaHJpbmtfbHJ1dmVjXCJcbiAgXSxcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBwYWdlIHJlY2xhaW0gbG9naWMgaW4gdGhlIE11bHRpLUdlbiBMUlUgKE1HTFJVKSBzdWJzeXN0ZW0gKGBtbS92bXNjYW4uY2ApLCBzcGVjaWZpY2FsbHkgaW4gYGV2aWN0X2ZvbGlvcygpYC4gSXQgbW92ZXMgYGZvbGlvX3NldF9scnVfcmVmcyhmb2xpbywgMClgIG91dHNpZGUgb2YgYSBjb25kaXRpb25hbCBjaGVjayBzbyB0aGF0IExSVSByZWZlcmVuY2UgZmxhZ3MgYXJlIGNsZWFyZWQgdW5jb25kaXRpb25hbGx5IGZvciBmb2xpb3MgcmVtYWluaW5nIG9uIHRoZSBsaXN0LlxcblxcblRoaXMgY2hhbmdlIHB1cmVseSBhZmZlY3RzIGZvbGlvIG1ldGFkYXRhL2ZsYWdzIGR1cmluZyBMUlUgcGFnZSByZWNsYWltLiBJdCBkb2VzIG5vdCBpbnRyb2R1Y2Ugb3IgbW9kaWZ5OlxcbjEuIERhdGEgc3RydWN0dXJlcyBjb3BpZWQgdG8gdXNlciBzcGFjZSBvciBrZXJuZWwgaW5mby1sZWFrcy5cXG4yLiBVbmluaXRpYWxpemVkIHZhcmlhYmxlcywgc3RydWN0IGZpZWxkcywgb3IgbWVtb3J5IGFsbG9jYXRpb25zLlxcbjMuIExlbmd0aHMgb3IgYm91bmRzIGNoZWNrcyB0aGF0IGNvdWxkIGV4cG9zZSB1bmluaXRpYWxpemVkIGJ1ZmZlciBtZW1vcnkuXFxuXFxuQmVjYXVzZSB0aGVyZSBhcmUgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3Mgb3IgaW5mby1sZWFrcywgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCB3YXJyYW50ZWQuIFN0YW5kYXJkIEtBU0FOL3Nhbml0aXplciBidWlsZHMgYXJlIHN1ZmZpY2llbnQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgTXVsdGktR2VuIExSVSAoTUdMUlUpIHBhZ2UgcmVjbGFpbSBsb2dpYyBpbiBtbS92bXNjYW4uYywgZW5zdXJpbmcgZm9saW8gTFJVIHJlZmVyZW5jZXMgYXJlIHVuY29uZGl0aW9uYWxseSByZXNldCB3aGVuIGZvbGlvcyBhcmUgcHV0IGJhY2suIFRoaXMgdG91Y2hlcyBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IHBhZ2UgZXZpY3Rpb24gcGF0aHMgcmVhY2hhYmxlIGR1cmluZyBtZW1vcnkgcmVjbGFpbSB1bmRlciBNR0xSVS5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDdUMDc6MjU6MjEuMjU3NDU4NjVaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE1NjEzNTE4NjksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCBhMzhlZTA5MTNiZmExMjQ0OTc5ODNiOGVjYTRhODZiNjJjOTQ2NGQwXFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBNb24gU2VwIDcgMDc6MjU6MTkgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvbW0vdm1zY2FuLmMgYi9tbS92bXNjYW4uY1xcbmluZGV4IDQwZDNmMWI0OGE3NGMuLjQyYzBhMDk5MzhhYjIgMTAwNjQ0XFxuLS0tIGEvbW0vdm1zY2FuLmNcXG4rKysgYi9tbS92bXNjYW4uY1xcbkBAIC01MDIxLDEwICs1MDIxLDExIEBAIHN0YXRpYyBpbnQgZXZpY3RfZm9saW9zKHVuc2lnbmVkIGxvbmcgbnJfdG9fc2Nhbiwgc3RydWN0IGxydXZlYyAqbHJ1dmVjLFxcbiBcXHRcXHR9XFxuIFxcbiBcXHRcXHQvKiBkb24ndCBhZGQgcmVqZWN0ZWQgZm9saW9zIHRvIHRoZSBvbGRlc3QgZ2VuZXJhdGlvbiAqL1xcbi1cXHRcXHRpZiAobHJ1X2dlbl9mb2xpb19zZXEobHJ1dmVjLCBmb2xpbywgZmFsc2UpID09IG1pbl9zZXFbdHlwZV0pIHtcXG4tXFx0XFx0XFx0Zm9saW9fc2V0X2xydV9yZWZzKGZvbGlvLCAwKTtcXG4rXFx0XFx0aWYgKGxydV9nZW5fZm9saW9fc2VxKGxydXZlYywgZm9saW8sIGZhbHNlKSA9PSBtaW5fc2VxW3R5cGVdKVxcbiBcXHRcXHRcXHRmb2xpb19zZXRfYWN0aXZlKGZvbGlvKTtcXG4tXFx0XFx0fVxcbitcXG4rXFx0XFx0LyogU2VlIHRoZSBjb21tZW50cyBvbiBMUlVfUkVGU19GTEFHUyAqL1xcbitcXHRcXHRmb2xpb19zZXRfbHJ1X3JlZnMoZm9saW8sIDApO1xcbiBcXHR9XFxuIFxcbiBcXHRtb3ZlX2ZvbGlvc190b19scnUoXFx1MDAyNmxpc3QpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wN1QwNzoyNToyMi44MTk3MzkxMDlaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJjb3JlIiwiRHVyYXRpb24iOjM0MTU0ODgzODAzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkxSVV9HRU5cIixcbiAgICBcIkxSVV9HRU5fRU5BQkxFRFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImV2aWN0X2ZvbGlvc1wiLFxuICAgIFwidHJ5X3RvX3Nocmlua19scnV2ZWNcIixcbiAgICBcInJ1bl9ldmljdGlvblwiLFxuICAgIFwibHJ1X2dlbl9zaHJpbmtfbHJ1dmVjXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgTXVsdGktR2VuIExSVSAoTUdMUlUpIHBhZ2UgcmVjbGFpbSBsb2dpYyBpbiBtbS92bXNjYW4uYywgZW5zdXJpbmcgZm9saW8gTFJVIHJlZmVyZW5jZXMgYXJlIHVuY29uZGl0aW9uYWxseSByZXNldCB3aGVuIGZvbGlvcyBhcmUgcHV0IGJhY2suIFRoaXMgdG91Y2hlcyBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IHBhZ2UgZXZpY3Rpb24gcGF0aHMgcmVhY2hhYmxlIGR1cmluZyBtZW1vcnkgcmVjbGFpbSB1bmRlciBNR0xSVS5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIgYW5kIHNlY3VyaXR5IGVuZ2luZWVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBldmFsdWF0ZSB3aGV0aGVyIGl0IHdhcnJhbnRzIGZ1enppbmcgd2l0aCBzeXprYWxsZXIuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIGludGVybmFsIGFzc3VtcHRpb25zLiBZb3UgbXVzdCBhY3RpdmVseSB1c2UgeW91ciBjb2RlIGFjY2Vzc1xudG9vbHMgdG8gaW5zcGVjdCB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlLCBjYWxsZXJzLCBhbmQgc3Vycm91bmRpbmcgY29udGV4dC5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjEuIENPUkUgVFJJQUdFIFBISUxPU09QSFlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5UaGUgZ29hbCBvZiBwYXRjaCBmdXp6aW5nIGlzIHRvIGRpc2NvdmVyIGNyYXNoZXMsIHJlZ3Jlc3Npb25zLCBleHBvc2VkIGxhdGVudCBidWdzLFxuYW5kIG5ld2x5IHRyaWdnZXJlZCBhc3NlcnRpb25zIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIHNlcmllcy5cblxuLSBSRUFDSEFCSUxJVFkgSVMgVEhFIFBSSU1BUlkgR0FURTpcbiAgRnV6emluZyBjYW4gb25seSBkaXNjb3ZlciBidWdzIGluIGNvZGUgdGhhdCBjYW4gYWN0dWFsbHkgZXhlY3V0ZSBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZFxuICBlbnZpcm9ubWVudHMgKEdDRSBvciBRRU1VLCB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgZGV2aWNlcyBsaWtlIFVTQiBnYWRnZXRzLCBuZXRkZXYsIHR1bi90YXApLlxuICBJZiB0aGUgbW9kaWZpZWQgY29kZSBpcyBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgKHNlZSBTZWN0aW9uIDIpLCBpdCBNVVNUIE5PVCBiZSBmdXp6ZWQsXG4gIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciBpdCBhZGRzIGFzc2VydGlvbnMgb3IgY29tcGxleCBsb2dpYy5cblxuLSBETyBOT1QgQkxJTkRMWSBUUlVTVCBcIk5PIEZVTkNUSU9OQUwgQ0hBTkdFXCIgKE5GQ0kpIE9SIFwiUkVGQUNUT1JJTkdcIiBDTEFJTVM6XG4gIFBhdGNoIGF1dGhvcnMgcm91dGluZWx5IGxhYmVsIGNoYW5nZXMgYXMgXCJjbGVhbnVwc1wiLCBcInJlZmFjdG9yaW5nc1wiLCBvciBzdGF0ZVxuICBcIk5vIGZ1bmN0aW9uYWwgY2hhbmdlIGludGVuZGVkXCIuIERvIE5PVCB0YWtlIHRoZXNlIGNsYWltcyBhdCBmYWNlIHZhbHVlLlxuICBDb2RlIHJlZmFjdG9yaW5ncyB0aGF0IHJlYXJyYW5nZSBsb2dpYywgaW50cm9kdWNlIGhlbHBlciBmdW5jdGlvbnMsIG9yIGFsdGVyIHN0YXRlIG1hbmFnZW1lbnRcbiAgaW4gY29yZSBzdWJzeXN0ZW1zIGZyZXF1ZW50bHkgaW50cm9kdWNlIHN1YnRsZSBzZW1hbnRpYyBzaGlmdHMgb3IgdW5jb3ZlciBsYXRlbnQga2VybmVsIGJ1Z3MuXG4gIElmIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUgaXMgbW9kaWZpZWQgb3IgcmVmYWN0b3JlZCwgaXQgTVVTVCBiZSBmdXp6ZWQuXG5cbi0gTkVXIE9SIE1PRElGSUVEIEFTU0VSVElPTlMgSU4gUkVBQ0hBQkxFIENPREUgTVVTVCBCRSBGVVpaRUQ6XG4gIFdoZW4gYSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzIHJ1bnRpbWUgY2hlY2tzIG9yIGFzc2VydGlvbnMgKGUuZy4sIFdBUk5fT04qLCBWTV9XQVJOX09OKixcbiAgQlVHX09OKiwgbG9ja2RlcF9hc3NlcnQqKSBpbiByZWFjaGFibGUgY29kZSBwYXRocywgaXQgZW5mb3JjZXMgbmV3IG9yIHN0cmljdGVyIGludmFyaWFudHMuXG4gIEV2ZW4gaWYgdGhlIGF1dGhvciBiZWxpZXZlcyB0aGUgaW52YXJpYW50IGFsd2F5cyBob2xkcywgZnV6emluZyBpcyBlc3NlbnRpYWwgdG8gdmVyaWZ5IHdoZXRoZXJcbiAgYW4gdW51c3VhbCBzZXF1ZW5jZSBvZiBvcGVyYXRpb25zIGNhbiB2aW9sYXRlIGl0LlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuMi4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPWZhbHNlIChORUdBVElWRSBDUklURVJJQSlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIE9OTFkgSUYgYWxsIG1vZGlmaWVkIGNvZGUgZmFsbHMgc3RyaWN0bHkgaW50byBvbmUgb3IgbW9yZSBvZiB0aGVzZSBjYXRlZ29yaWVzOlxuXG4tIE5vbi1rZXJuZWwgYW5kIG5vbi1leGVjdXRhYmxlIGNoYW5nZXM6XG4gICogTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgY29tbWVudHMsIG9yIHNwZWxsaW5nIGZpeGVzLlxuICAqIFVzZXItc3BhY2UgZGlyZWN0b3JpZXMsIHNlbGYtdGVzdHMsIHNhbXBsZXMsIG9yIHNjcmlwdHMgKGUuZy4sIHRvb2xzLywgc2FtcGxlcy8sIHNjcmlwdHMvLCB1c3IvKVxuICAgIHRoYXQgZG8gbm90IGFmZmVjdCB0aGUgY29tcGlsZWQga2VybmVsIGltYWdlICh2bWxpbnV4KSBvciBrZXJuZWwgbW9kdWxlcy5cbiAgKiBQdXJlbHkgZGVjb3JhdGl2ZSBsb2dnaW5nIChlLmcuLCBtZXNzYWdlIHN0cmluZ3MgaW4gcHJfZXJyLCBwcmludGssIGRldl9pbmZvKSBvciB0cmFjZXBvaW50c1xuICAgIHRoYXQgZG8gbm90IGFsdGVyIGNvbnRyb2wgZmxvdyBvciBkYXRhIHN0cnVjdHVyZXMuXG4gICogQnVpbGQgc3lzdGVtIG9yIEtjb25maWcgY2hhbmdlcyB0aGF0IGRvIG5vdCBhbHRlciBjb21waWxlZCBDIGxvZ2ljLlxuLSBTdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgaGFyZHdhcmU6XG4gICogVmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoZXMsIFNtYXJ0TklDcywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICAgIGlvbmljLCBhbWRncHUpIHJlcXVpcmluZyBwaHlzaWNhbCBBU0lDL1BDSWUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG4tIFVucmVhY2hhYmxlIGV4ZWN1dGlvbiBwYXRoczpcbiAgKiBEcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzICgucmVtb3ZlLCAuc2h1dGRvd24sIHBjaV91bnJlZ2lzdGVyX2RyaXZlcikgZXhlY3V0ZWQgb25seSBkdXJpbmdcbiAgICBwaHlzaWNhbCBQQ0kgaG90LXVucGx1ZyBvciBtYW51YWwgc3lzZnMgZHJpdmVyIHVuYmluZGluZy5cbiAgKiBDb2RlIHBhdGhzIGV4Y2x1c2l2ZSB0byBhcmNoaXRlY3R1cmVzIG90aGVyIHRoYW4gdGhlIHRhcmdldCBhcmNoaXRlY3R1cmUuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4zLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9dHJ1ZSAoUE9TSVRJVkUgQ1JJVEVSSUEpXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuUmV0dXJuIFdvcnRoRnV6emluZz10cnVlIHdoZW5ldmVyIHRoZSBwYXRjaCB0b3VjaGVzIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUsIGluY2x1ZGluZzpcbi0gQ29yZSBTdWJzeXN0ZW1zOlxuICAqIEFueSBsb2dpYyBtb2RpZmljYXRpb25zIGluIG1lbW9yeSBtYW5hZ2VtZW50IChtbS8pLCBzeW5jaHJvbml6YXRpb24vbG9ja2luZyAoa2VybmVsL2xvY2tpbmcvKSxcbiAgICBCUEYsIHNjaGVkdWxlciwgY29yZSBuZXR3b3JraW5nLCBWRlMsIG9yIHN5c2NhbGwgaGFuZGxpbmcuXG4tIFJlZmFjdG9yaW5ncyBhbmQgQ29kZSBDbGVhbnVwczpcbiAgKiBBbnkgcmVzdHJ1Y3R1cmluZyBvZiByZWFjaGFibGUgZGF0YSBzdHJ1Y3R1cmVzLCBoZWxwZXIgYWJzdHJhY3Rpb25zLCBvciBhbGdvcml0aG0gZmxvd3MuXG4tIFJ1bnRpbWUgQXNzZXJ0aW9ucyBhbmQgRGVmZW5zaXZlIENoZWNrczpcbiAgKiBBbnkgaW50cm9kdWN0aW9uIG9yIGFsdGVyYXRpb24gb2YgYXNzZXJ0aW9ucyAoV0FSTl9PTiosIFZNX1dBUk5fT04qLCBCVUdfT04qLCBldGMuKSBpbiByZWFjaGFibGUgcGF0aHMuXG4tIFJlYWNoYWJsZSBEcml2ZXJzIGFuZCBQcm90b2NvbHM6XG4gICogRHJpdmVycyBhY2Nlc3NpYmxlIHZpYSB2aXJ0dWFsIGJ1c2VzICh2aXJ0aW8sIFVTQiBnYWRnZXQsIGxvb3BiYWNrLCBuZXRsaW5rLCBiaW5kZXIsIHNvY2tldHMsIGV0Yy4pLlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuNC4gRVhUUkFDVElORyBGb2N1c1N5bWJvbHMgKFBSRVZFTlRJTkcgRElMVVRJT04pXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuV2hlbiBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IG11c3QgZXh0cmFjdCBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIGludG8gRm9jdXNTeW1ib2xzIHRvIGd1aWRlIHRoZSBmdXp6ZXI6XG5cbi0gQVZPSUQgVUJJUVVJVE9VUyBMSUZFQ1lDTEUgSE9ULVBBVEhTOlxuICBEbyBOT1QgbGlzdCBnZW5lcmljLCB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYWxsZWQgYnkgYWxtb3N0IGV2ZXJ5IHByb2dyYW0gaW4gdGhlIGNvcnB1c1xuICAoaW5jbHVkaW5nLCBidXQgbm90IGxpbWl0ZWQgdG86IGdlbmVyYWwgbWVtb3J5IGFsbG9jYXRvcnMgYW5kIGRlYWxsb2NhdG9ycywgcGFnZSBmYXVsdFxuICBhbmQgdHJhcCBoYW5kbGVycywgb3IgY29yZSBzeW5jaHJvbml6YXRpb24gcHJpbWl0aXZlczsgdGhpcyBpcyBub3QgYW4gZXhoYXVzdGl2ZSBsaXN0KS5cbiAgTGlzdGluZyB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYXVzZXMgdGhlIGZ1enplciB0byBjbGFzc2lmeSB0aG91c2FuZHMgb2YgdW5yZWxhdGVkIHRlc3RzIGFzIFwiZm9jdXNlZFwiLFxuICB3aGljaCBzZXZlcmVseSBkaWx1dGVzIGZ1enppbmcgZWZmb3J0IGF3YXkgZnJvbSB0aGUgYWN0dWFsIGNoYW5nZXMuXG5cbi0gVEFSR0VUIFNQRUNJRklDIEZFQVRVUkUgTE9HSUMgQU5EIEVOVFJZUE9JTlRTOlxuICBMaXN0IGZ1bmN0aW9ucyB0aGF0IHNwZWNpZmljYWxseSBpbXBsZW1lbnQgdGhlIGxvZ2ljIGJlaW5nIGFkZGVkIG9yIGFsdGVyZWQsIG9yIGRpcmVjdCBBUEkgZW50cnlwb2ludHNcbiAgZm9yIHRoZSBzdWJzeXN0ZW0gZmVhdHVyZSB1bmRlciByZXZpZXcuXG5cbi0gSEFORExJTkcgU1RBVElDIElOTElORSBGVU5DVElPTlMgSU4gSEVBREVSUyAoLmgpOlxuICBDb21waWxlci1pbmxpbmVkIHN0YXRpYyBmdW5jdGlvbnMgKHN1Y2ggYXMgc3RhdGljIGlubGluZXMgaW4gbW0vKi5oIG9yIGluY2x1ZGUvbGludXgvKi5oKSBsYWNrXG4gIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMgaW4gdm1saW51eCBhbmQgY2Fubm90IGJlIHRhcmdldGVkIGRpcmVjdGx5IGJ5IHN5bWJvbCBjb3ZlcmFnZSBmaWx0ZXJzLlxuICBJZiB0aGUgY2hhbmdlcyBhcmUgcHJpbWFyaWx5IGluIHN0YXRpYyBpbmxpbmUgaGVscGVycywgaWRlbnRpZnkgbm9uLXN0YXRpYywgZmVhdHVyZS1zcGVjaWZpYyBjYWxsZXJcbiAgZnVuY3Rpb25zIGluIC5jIGZpbGVzIHRoYXQgZXhlcmNpc2UgdGhlbSAoYXZvaWRpbmcgdWJpcXVpdG91cyBsaWZlY3ljbGUgd3JhcHBlcnMpLlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuNS4gSURFTlRJRllJTkcgRW5hYmxlQ29uZmlnc1xuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbklkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgY29tcGlsZSBhbmQgcmVhY2ggdGhlIG1vZGlmaWVkIGNvZGU6XG4tIEluc3BlY3QgS2NvbmZpZyBmaWxlcyBhbmQgI2lmZGVmIGd1YXJkczsgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4tIENoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncyBuZWVkZWQuXG4tIFN0cmlwIGFueSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJUYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NFxuXG5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCBhMzhlZTA5MTNiZmExMjQ0OTc5ODNiOGVjYTRhODZiNjJjOTQ2NGQwXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIE1vbiBTZXAgNyAwNzoyNToxOSAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL21tL3Ztc2Nhbi5jIGIvbW0vdm1zY2FuLmNcbmluZGV4IDQwZDNmMWI0OGE3NGMuLjQyYzBhMDk5MzhhYjIgMTAwNjQ0XG4tLS0gYS9tbS92bXNjYW4uY1xuKysrIGIvbW0vdm1zY2FuLmNcbkBAIC01MDIxLDEwICs1MDIxLDExIEBAIHN0YXRpYyBpbnQgZXZpY3RfZm9saW9zKHVuc2lnbmVkIGxvbmcgbnJfdG9fc2Nhbiwgc3RydWN0IGxydXZlYyAqbHJ1dmVjLFxuIFx0XHR9XG4gXG4gXHRcdC8qIGRvbid0IGFkZCByZWplY3RlZCBmb2xpb3MgdG8gdGhlIG9sZGVzdCBnZW5lcmF0aW9uICovXG4tXHRcdGlmIChscnVfZ2VuX2ZvbGlvX3NlcShscnV2ZWMsIGZvbGlvLCBmYWxzZSkgPT0gbWluX3NlcVt0eXBlXSkge1xuLVx0XHRcdGZvbGlvX3NldF9scnVfcmVmcyhmb2xpbywgMCk7XG4rXHRcdGlmIChscnVfZ2VuX2ZvbGlvX3NlcShscnV2ZWMsIGZvbGlvLCBmYWxzZSkgPT0gbWluX3NlcVt0eXBlXSlcbiBcdFx0XHRmb2xpb19zZXRfYWN0aXZlKGZvbGlvKTtcbi1cdFx0fVxuK1xuK1x0XHQvKiBTZWUgdGhlIGNvbW1lbnRzIG9uIExSVV9SRUZTX0ZMQUdTICovXG4rXHRcdGZvbGlvX3NldF9scnVfcmVmcyhmb2xpbywgMCk7XG4gXHR9XG4gXG4gXHRtb3ZlX2ZvbGlvc190b19scnUoXHUwMDI2bGlzdCk7XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wN1QwNzoyNToyMi44MTk3NDEzNTlaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjozNTMxNDc0MzExLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgVmlydHVhbCBNZW1vcnkgU2Nhbm5lciBQYXRjaCoqXG5cbk9rYXksIHNvIHRoZSBwYXRjaCBpcyBzaXR0aW5nIGluIGBtbS92bXNjYW4uY2AuIE15IGZpcnN0IG1vdmUgaXMgYWx3YXlzIHRvIGRpdmUgcmlnaHQgaW4gYW5kIGdldCBhIGZlZWwgZm9yIHRoZSBzcGVjaWZpYyBjaGFuZ2UgYW5kIGl0cyBjb250ZXh0IHdpdGhpbiB0aGUgc3Vycm91bmRpbmcgY29kZS4gVGltZSB0byBkaWcgaW50byB0aGUgZGlmZiBpdHNlbGYsIHJlYWxseSB1bmRlcnN0YW5kIHdoYXQncyBiZWVuIGFsdGVyZWQuXG5cbkdpdmVuIG15IGZhbWlsaWFyaXR5IHdpdGggdGhpcyBjb2RlYmFzZSwgSSdtIHRoaW5raW5nIGEgdG9vbCBsaWtlIGByZWFkLWZpbGVgIG9yIGV2ZW4gYSBxdWljayBgZ3JlcHBlcmAgY2FsbCB0byBwaW5wb2ludCBhcm91bmQgbGluZSA1MDIxIGluIGBtbS92bXNjYW4uY2Agd2lsbCBnaXZlIG1lIHRoZSBpbW1lZGlhdGUgdmlldyBvZiB0aGUgYXJlYSB0aGF0IHRoZSBwYXRjaCB0b3VjaGVzLiBUaGlzIGlzIHdoZXJlIEknbGwgYmVnaW4gdG8gYnVpbGQgbXkgbWVudGFsIG1vZGVsIG9mIHdoYXQgdGhlIGRldmVsb3BlciBpbnRlbmRlZC4gSXQncyBhbGwgYWJvdXQgdGhhdCBpbml0aWFsIGluc3BlY3Rpb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI5NDcsIk91dHB1dFRva2VucyI6MzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1NywiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDA3OjI1OjI2LjM1MTIxODgxMVoiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQxNDc0MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJtbS92bXNjYW4uY1wiLFxuICBcIkZpcnN0TGluZVwiOiA1MDAwLFxuICBcIkxpbmVDb3VudFwiOiA1MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCI1MDAwOlxcdFxcdHNjLVxcdTAwM2Vucl9yZWNsYWltZWQgKz0gcmVjbGFpbWVkO1xcbjUwMDE6XFx0XFx0dG90YWxfcmVjbGFpbWVkICs9IHJlY2xhaW1lZDtcXG41MDAyOlxcdFxcdC8qIFJldHJ5IHBhc3MgaXMgb25seSBtZWFudCBmb3IgY2xlYW4gZm9saW9zIHdpdGhvdXQgbmV3IGlzb2xhdGlvbiAqL1xcbjUwMDM6XFx0XFx0aWYgKGlzb2xhdGVkKVxcbjUwMDQ6XFx0XFx0XFx0aGFuZGxlX3JlY2xhaW1fd3JpdGViYWNrKGlzb2xhdGVkLCBwZ2RhdCwgc2MsIFxcdTAwMjZzdGF0KTtcXG41MDA1OlxcdFxcdHRyYWNlX21tX3Ztc2Nhbl9scnVfc2hyaW5rX2luYWN0aXZlKHBnZGF0LVxcdTAwM2Vub2RlX2lkLFxcbjUwMDY6XFx0XFx0XFx0XFx0dHlwZV9zY2FubmVkLCByZWNsYWltZWQsIFxcdTAwMjZzdGF0LCBzYy1cXHUwMDNlcHJpb3JpdHksXFxuNTAwNzpcXHRcXHRcXHRcXHR0eXBlID8gTFJVX0lOQUNUSVZFX0ZJTEUgOiBMUlVfSU5BQ1RJVkVfQU5PTik7XFxuNTAwODpcXHRcXG41MDA5OlxcdFxcdGxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZV9yZXZlcnNlKGZvbGlvLCBuZXh0LCBcXHUwMDI2bGlzdCwgbHJ1KSB7XFxuNTAxMDpcXHRcXHRcXHRERUZJTkVfTUlOX1NFUShscnV2ZWMpO1xcbjUwMTE6XFx0XFxuNTAxMjpcXHRcXHRcXHQvKiBtb3ZlX2ZvbGlvc190b19scnUoKSBjdWxscyB1bmV2aWN0YWJsZSBmb2xpb3MgdmlhIGZvbGlvX3B1dGJhY2tfbHJ1KCkgKi9cXG41MDEzOlxcdFxcdFxcdGlmICghZm9saW9fZXZpY3RhYmxlKGZvbGlvKSlcXG41MDE0OlxcdFxcdFxcdFxcdGNvbnRpbnVlO1xcbjUwMTU6XFx0XFxuNTAxNjpcXHRcXHRcXHQvKiByZXRyeSBmb2xpb3MgdGhhdCBtYXkgaGF2ZSBtaXNzZWQgZm9saW9fcm90YXRlX3JlY2xhaW1hYmxlKCkgKi9cXG41MDE3OlxcdFxcdFxcdGlmICghc2tpcF9yZXRyeSBcXHUwMDI2XFx1MDAyNiAhZm9saW9fdGVzdF9hY3RpdmUoZm9saW8pIFxcdTAwMjZcXHUwMDI2ICFmb2xpb19tYXBwZWQoZm9saW8pIFxcdTAwMjZcXHUwMDI2XFxuNTAxODpcXHRcXHRcXHQgICAgIWZvbGlvX3Rlc3RfZGlydHkoZm9saW8pIFxcdTAwMjZcXHUwMDI2ICFmb2xpb190ZXN0X3dyaXRlYmFjayhmb2xpbykpIHtcXG41MDE5OlxcdFxcdFxcdFxcdGxpc3RfbW92ZShcXHUwMDI2Zm9saW8tXFx1MDAzZWxydSwgXFx1MDAyNmNsZWFuKTtcXG41MDIwOlxcdFxcdFxcdFxcdGNvbnRpbnVlO1xcbjUwMjE6XFx0XFx0XFx0fVxcbjUwMjI6XFx0XFxuNTAyMzpcXHRcXHRcXHQvKiBkb24ndCBhZGQgcmVqZWN0ZWQgZm9saW9zIHRvIHRoZSBvbGRlc3QgZ2VuZXJhdGlvbiAqL1xcbjUwMjQ6XFx0XFx0XFx0aWYgKGxydV9nZW5fZm9saW9fc2VxKGxydXZlYywgZm9saW8sIGZhbHNlKSA9PSBtaW5fc2VxW3R5cGVdKVxcbjUwMjU6XFx0XFx0XFx0XFx0Zm9saW9fc2V0X2FjdGl2ZShmb2xpbyk7XFxuNTAyNjpcXHRcXG41MDI3OlxcdFxcdFxcdC8qIFNlZSB0aGUgY29tbWVudHMgb24gTFJVX1JFRlNfRkxBR1MgKi9cXG41MDI4OlxcdFxcdFxcdGZvbGlvX3NldF9scnVfcmVmcyhmb2xpbywgMCk7XFxuNTAyOTpcXHRcXHR9XFxuNTAzMDpcXHRcXG41MDMxOlxcdFxcdG1vdmVfZm9saW9zX3RvX2xydShcXHUwMDI2bGlzdCk7XFxuNTAzMjpcXHRcXG41MDMzOlxcdFxcdHdhbGsgPSBjdXJyZW50LVxcdTAwM2VyZWNsYWltX3N0YXRlLVxcdTAwM2VtbV93YWxrO1xcbjUwMzQ6XFx0XFx0aWYgKHdhbGsgXFx1MDAyNlxcdTAwMjYgd2Fsay1cXHUwMDNlYmF0Y2hlZCkge1xcbjUwMzU6XFx0XFx0XFx0d2Fsay1cXHUwMDNlbHJ1dmVjID0gbHJ1dmVjO1xcbjUwMzY6XFx0XFx0XFx0cmVzZXRfYmF0Y2hfc2l6ZSh3YWxrKTtcXG41MDM3OlxcdFxcdH1cXG41MDM4OlxcdFxcbjUwMzk6XFx0XFx0bW9kX2xydXZlY19zdGF0ZShscnV2ZWMsIFBHREVNT1RFX0tTV0FQRCArIHJlY2xhaW1lcl9vZmZzZXQoc2MpLFxcbjUwNDA6XFx0XFx0XFx0XFx0XFx0XFx0c3RhdC5ucl9kZW1vdGVkKTtcXG41MDQxOlxcdFxcbjUwNDI6XFx0XFx0aXRlbSA9IFBHU1RFQUxfS1NXQVBEICsgcmVjbGFpbWVyX29mZnNldChzYyk7XFxuNTA0MzpcXHRcXHRtb2RfbHJ1dmVjX3N0YXRlKGxydXZlYywgaXRlbSwgcmVjbGFpbWVkKTtcXG41MDQ0OlxcdFxcdG1vZF9scnV2ZWNfc3RhdGUobHJ1dmVjLCBQR1NURUFMX0FOT04gKyB0eXBlLCByZWNsYWltZWQpO1xcbjUwNDU6XFx0XFxuNTA0NjpcXHRcXHRsaXN0X3NwbGljZV9pbml0KFxcdTAwMjZjbGVhbiwgXFx1MDAyNmxpc3QpO1xcbjUwNDc6XFx0XFxuNTA0ODpcXHRcXHRpZiAoIWxpc3RfZW1wdHkoXFx1MDAyNmxpc3QpKSB7XFxuNTA0OTpcXHRcXHRcXHRza2lwX3JldHJ5ID0gdHJ1ZTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDdUMDc6MjU6MjYuMzUxNjM1NzRaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjozODUxMjk0MzYwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIG15IG93bjpcblxuKipJbml0aWFsIEFzc2Vzc21lbnQ6IERpdmluZyBpbnRvIGBtbS92bXNjYW4uY2AqKlxuXG5BbHJpZ2h0LCBiZWZvcmUgSSBnZXQgdG9vIGRlZXAgaW50byB0aGlzIGNvZGUgc25pcHBldCwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXRzIGNvbnRleHQuIExldCBtZSB0cmFjZSBiYWNrIGFuZCBpZGVudGlmeSB0aGUgZnVuY3Rpb24gdGhhdCBlbmNsb3NlcyB0aGlzIHNlY3Rpb24uIEtub3dpbmcgdGhlIHN1cnJvdW5kaW5nIGZ1bmN0aW9uIGlzIGNydWNpYWwgZm9yIHVuZGVyc3RhbmRpbmcgdGhlIGludGVudCBhbmQgdGhlIHZhcmlhYmxlcyBhdCBwbGF5LiBUaGVuLCBJIHNob3VsZCBpbW1lZGlhdGVseSBjcm9zcy1yZWZlcmVuY2UgdGhlIHJlbGV2YW50IEtjb25maWcgb3B0aW9ucy4gV2hhdCBmZWF0dXJlcyBhcmUgZW5hYmxlZCBvciBkaXNhYmxlZCB0aGF0IG1pZ2h0IGluZmx1ZW5jZSB0aGlzIHBhcnRpY3VsYXIgYmxvY2sgb2YgY29kZT8gQW55IHJlbGV2YW50IHByZXByb2Nlc3NvciBkaXJlY3RpdmVzIEkgc2hvdWxkIGJlIGF3YXJlIG9mPyBUaGF0IHdpbGwgZ2l2ZSBtZSB0aGUgYnJvYWQgcGljdHVyZSBhbmQgd2lsbCBoZWxwIG1lIHVuZGVyc3RhbmQgdGhlIHB1cnBvc2Ugb2YgdGhlIGJsb2NrLlxuXG5BZnRlciB0aGF0LCBJIHNob3VsZCBjYXN0IG15IGV5ZXMgdG8gdGhlIGVhcmxpZXIgbGluZXMgd2l0aGluIGBtbS92bXNjYW4uY2AuIENvbnRleHQgaXMgZXZlcnl0aGluZywgYW5kIHRoZSBwcmVjZWRpbmcgY29kZSBwcm9iYWJseSBzZXRzIHVwIHRoZSBjb25kaXRpb25zIG9yIGRhdGEgdGhhdCB0aGlzIHNlY3Rpb24gaXMgd29ya2luZyB3aXRoLiBVbmRlcnN0YW5kaW5nIHRoZSBwcmVjZWRpbmcgY29kZSBpcyBhbG1vc3QgYWx3YXlzIGtleSB0byB1bmRlcnN0YW5kaW5nIHRoZSBmb2xsb3dpbmcgY29kZS4gSXQgaXMgYWxsIHJlbGF0ZWQuIEkgd2lsbCBsb29rIGZvciBhbnkgaW5pdGlhbGl6YXRpb25zLCBjb25kaXRpb25hbCBjaGVja3MsIG9yIGRhdGEgc3RydWN0dXJlcyBiZWluZyBzZXQgdXAgdGhhdCBwcm92aWRlIGNsdWVzIGFib3V0IHRoZSBsb2dpYyBhbmQgcHVycG9zZSBvZiB0aGlzIHNwZWNpZmljIHBpZWNlIG9mIHRoZSBjb2RlLiBMZXQncyBzZWUgd2hhdCdzIGhhcHBlbmluZy5cblxuXG4iLCJJbnB1dFRva2VucyI6NDA1OSwiT3V0cHV0VG9rZW5zIjozNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMxLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDdUMDc6MjU6MzAuMjAyOTMyMDMxWiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjkzMDAwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm1tL3Ztc2Nhbi5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDQ5NTAsXG4gIFwiTGluZUNvdW50XCI6IDYwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjQ5NTA6XFx0XFx0XFx0Z290byByZXRyeTtcXG40OTUxOlxcdFxcdH1cXG40OTUyOlxcdFxcdC8qXFxuNDk1MzpcXHRcXHQgKiBXZSBzY2FubmVkIHNvbWUgZm9saW9zIGJ1dCBmYWlsZWQgdG8gaXNvbGF0ZSBhbnkgZHVlIHRvIHByb21vdGlvbnMsXFxuNDk1NDpcXHRcXHQgKiBwcm90ZWN0aW9ucywgb3IgcmFjZXMuIFJldHJ5IG9uY2UgdG8gYXZvaWQgYSBsYXJnZXIgbG9vcC5cXG40OTU1OlxcdFxcdCAqL1xcbjQ5NTY6XFx0XFx0aWYgKHNjYW5uZWQgXFx1MDAyNlxcdTAwMjYgIXRyaWVkKSB7XFxuNDk1NzpcXHRcXHRcXHR0cmllZCA9IHRydWU7XFxuNDk1ODpcXHRcXHRcXHRnb3RvIHJldHJ5O1xcbjQ5NTk6XFx0XFx0fVxcbjQ5NjA6XFx0XFxuNDk2MTpcXHRcXHRyZXR1cm4gdG90YWxfc2Nhbm5lZDtcXG40OTYyOlxcdH1cXG40OTYzOlxcdFxcbjQ5NjQ6XFx0c3RhdGljIGludCBldmljdF9mb2xpb3ModW5zaWduZWQgbG9uZyBucl90b19zY2FuLCBzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsXFxuNDk2NTpcXHRcXHRcXHRcXHRzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYywgaW50IHN3YXBwaW5lc3MpXFxuNDk2NjpcXHR7XFxuNDk2NzpcXHRcXHRMSVNUX0hFQUQobGlzdCk7XFxuNDk2ODpcXHRcXHRMSVNUX0hFQUQoY2xlYW4pO1xcbjQ5Njk6XFx0XFx0c3RydWN0IGZvbGlvICpmb2xpbztcXG40OTcwOlxcdFxcdHN0cnVjdCBmb2xpbyAqbmV4dDtcXG40OTcxOlxcdFxcdGVudW0gbm9kZV9zdGF0X2l0ZW0gaXRlbTtcXG40OTcyOlxcdFxcdHN0cnVjdCByZWNsYWltX3N0YXQgc3RhdDtcXG40OTczOlxcdFxcdHN0cnVjdCBscnVfZ2VuX21tX3dhbGsgKndhbGs7XFxuNDk3NDpcXHRcXHRpbnQgc2Nhbm5lZCwgcmVjbGFpbWVkO1xcbjQ5NzU6XFx0XFx0aW50IGlzb2xhdGVkID0gMCwgbnJfaXNvbGF0ZWQgPSAwLCB0eXBlLCB0eXBlX3NjYW5uZWQ7XFxuNDk3NjpcXHRcXHR1bnNpZ25lZCBsb25nIHRvdGFsX3JlY2xhaW1lZCA9IDA7XFxuNDk3NzpcXHRcXHRib29sIHNraXBfcmV0cnkgPSBmYWxzZTtcXG40OTc4OlxcdFxcdHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZyA9IGxydXZlY19tZW1jZyhscnV2ZWMpO1xcbjQ5Nzk6XFx0XFx0c3RydWN0IHBnbGlzdF9kYXRhICpwZ2RhdCA9IGxydXZlY19wZ2RhdChscnV2ZWMpO1xcbjQ5ODA6XFx0XFxuNDk4MTpcXHRcXHRscnV2ZWNfbG9ja19pcnEobHJ1dmVjKTtcXG40OTgyOlxcdFxcbjQ5ODM6XFx0XFx0LyogSW4gY2FzZSBmb2xpbyBkZWxldGlvbiBsZWZ0IGVtcHR5IG9sZCBnZW5zLCBmbHVzaCB0aGVtICovXFxuNDk4NDpcXHRcXHR0cnlfdG9faW5jX21pbl9zZXEobHJ1dmVjLCBzd2FwcGluZXNzKTtcXG40OTg1OlxcdFxcbjQ5ODY6XFx0XFx0c2Nhbm5lZCA9IGlzb2xhdGVfZm9saW9zKG5yX3RvX3NjYW4sIGxydXZlYywgc2MsIHN3YXBwaW5lc3MsXFxuNDk4NzpcXHRcXHRcXHRcXHRcXHQgXFx1MDAyNmxpc3QsIFxcdTAwMjZpc29sYXRlZCwgXFx1MDAyNnR5cGUsIFxcdTAwMjZ0eXBlX3NjYW5uZWQpO1xcbjQ5ODg6XFx0XFx0bnJfaXNvbGF0ZWQgPSBpc29sYXRlZDtcXG40OTg5OlxcdFxcbjQ5OTA6XFx0XFx0LyogU2Nhbm5pbmcgbWF5IGhhdmUgZW1wdGllZCB0aGUgb2xkZXN0IGdlbiwgZmx1c2ggaXQgKi9cXG40OTkxOlxcdFxcdGlmIChzY2FubmVkKVxcbjQ5OTI6XFx0XFx0XFx0dHJ5X3RvX2luY19taW5fc2VxKGxydXZlYywgc3dhcHBpbmVzcyk7XFxuNDk5MzpcXHRcXG40OTk0OlxcdFxcdGxydXZlY191bmxvY2tfaXJxKGxydXZlYyk7XFxuNDk5NTpcXHRcXG40OTk2OlxcdFxcdGlmIChsaXN0X2VtcHR5KFxcdTAwMjZsaXN0KSlcXG40OTk3OlxcdFxcdFxcdHJldHVybiBzY2FubmVkO1xcbjQ5OTg6XFx0cmV0cnk6XFxuNDk5OTpcXHRcXHRyZWNsYWltZWQgPSBzaHJpbmtfZm9saW9fbGlzdChcXHUwMDI2bGlzdCwgcGdkYXQsIHNjLCBcXHUwMDI2c3RhdCwgZmFsc2UsIG1lbWNnKTtcXG41MDAwOlxcdFxcdHNjLVxcdTAwM2Vucl9yZWNsYWltZWQgKz0gcmVjbGFpbWVkO1xcbjUwMDE6XFx0XFx0dG90YWxfcmVjbGFpbWVkICs9IHJlY2xhaW1lZDtcXG41MDAyOlxcdFxcdC8qIFJldHJ5IHBhc3MgaXMgb25seSBtZWFudCBmb3IgY2xlYW4gZm9saW9zIHdpdGhvdXQgbmV3IGlzb2xhdGlvbiAqL1xcbjUwMDM6XFx0XFx0aWYgKGlzb2xhdGVkKVxcbjUwMDQ6XFx0XFx0XFx0aGFuZGxlX3JlY2xhaW1fd3JpdGViYWNrKGlzb2xhdGVkLCBwZ2RhdCwgc2MsIFxcdTAwMjZzdGF0KTtcXG41MDA1OlxcdFxcdHRyYWNlX21tX3Ztc2Nhbl9scnVfc2hyaW5rX2luYWN0aXZlKHBnZGF0LVxcdTAwM2Vub2RlX2lkLFxcbjUwMDY6XFx0XFx0XFx0XFx0dHlwZV9zY2FubmVkLCByZWNsYWltZWQsIFxcdTAwMjZzdGF0LCBzYy1cXHUwMDNlcHJpb3JpdHksXFxuNTAwNzpcXHRcXHRcXHRcXHR0eXBlID8gTFJVX0lOQUNUSVZFX0ZJTEUgOiBMUlVfSU5BQ1RJVkVfQU5PTik7XFxuNTAwODpcXHRcXG41MDA5OlxcdFxcdGxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZV9yZXZlcnNlKGZvbGlvLCBuZXh0LCBcXHUwMDI2bGlzdCwgbHJ1KSB7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDA3OjI1OjMwLjIwMzIyNzQzMVoiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjI4MjA1MTM1MjcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqSW52ZXN0aWdhdGluZyBLY29uZmlnIERlcGVuZGVuY2llcyBmb3IgYGV2aWN0X2ZvbGlvc2AgYW5kIE1HTFJVKipcblxuT2theSwgdGltZSB0byBkaWcgaW50byB0aGUga2VybmVsIGNvbmZpZ3VyYXRpb24uIEkgbmVlZCB0byBmaWd1cmUgb3V0IHdoaWNoIEtjb25maWcgb3B0aW9ucyBnb3Zlcm4gdGhlIGluY2x1c2lvbiBvZiBgZXZpY3RfZm9saW9zYCBhbmQgaXRzIHJlbGF0aW9uc2hpcCB3aXRoIHRoZSBNdWx0aS1HZW4gTFJVIChNR0xSVSkgaW1wbGVtZW50YXRpb24uIE15IGluaXRpYWwgYXBwcm9hY2ggaXMgdG8gbGV2ZXJhZ2UgYGdyZXBgIOKAkyB0aGF0J3MgdXN1YWxseSB0aGUgcXVpY2tlc3Qgd2F5IHRvIHRyYWNrIGRvd24gZGlyZWN0IHJlZmVyZW5jZXMgd2l0aGluIHRoZSBLY29uZmlnIGZpbGVzLiBJJ2xsIHNlYXJjaCBmb3IgYGV2aWN0X2ZvbGlvc2Agc3BlY2lmaWNhbGx5LCBhaW1pbmcgdG8gaWRlbnRpZnkgdGhlIGltbWVkaWF0ZSBvcHRpb25zIHRoYXQgZW5hYmxlIG9yIGRpc2FibGUgaXQuIEFsdGVybmF0aXZlbHksIEknbGwgZXhhbWluZSBgbW0vdm1zY2FuLmNgLiBJdCdzIGEga2V5IGZpbGUsIGVzcGVjaWFsbHkgcmVnYXJkaW5nIG1lbW9yeSBtYW5hZ2VtZW50IGFuZCBwYWdlIHNjYW5uaW5nOyBpdCdzIGxpa2VseSB0byBjb250YWluIGNsdWVzLiBJIGV4cGVjdCB0byBmaW5kIHNvbWUgY29uZGl0aW9uYWwgc3RhdGVtZW50cywgb3IgcGVyaGFwcyBldmVuIGNvbW1lbnRzLCB0aGF0IHNoZWQgbGlnaHQgb24gaG93IHRoZXNlIHR3byBmZWF0dXJlcyBpbnRlcmFjdCBhbmQgd2hhdCBLY29uZmlnIG9wdGlvbnMgY29udHJvbCB0aGVpciBiZWhhdmlvci4gVGhpcyBpbnZlc3RpZ2F0aW9uIGlzIGNydWNpYWwgZm9yIHVuZGVyc3RhbmRpbmcgaG93IHRvIHByb3Blcmx5IGNvbmZpZ3VyZSB0aGVzZSBhc3BlY3RzIHdpdGhpbiB2YXJpb3VzIGtlcm5lbCBidWlsZHMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjUzMzIsIk91dHB1dFRva2VucyI6MjgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0OCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDA3OjI1OjMzLjAyMzc0MzE1N1oiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0OTQ0MzI5MiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJDT05GSUdfTFJVX0dFTlwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vZm9saW8uYz0zMjM9c3RhdGljIHZvaWQgX19scnVfY2FjaGVfYWN0aXZhdGVfZm9saW8oc3RydWN0IGZvbGlvICpmb2xpbylcXG4tLVxcbm1tL2ZvbGlvLmMtMzUyLVxcbm1tL2ZvbGlvLmM6MzUzOiNpZmRlZiBDT05GSUdfTFJVX0dFTlxcbm1tL2ZvbGlvLmMtMzU0LVxcbi0tXFxubW0vZm9saW8uYz0zODE9c3RhdGljIGJvb2wgbHJ1X2dlbl9jbGVhcl9yZWZzKHN0cnVjdCBmb2xpbyAqZm9saW8pXFxuLS1cXG5tbS9mb2xpby5jLTM5OS1cXG5tbS9mb2xpby5jOjQwMDojZWxzZSAvKiAhQ09ORklHX0xSVV9HRU4gKi9cXG5tbS9mb2xpby5jLTQwMS1cXG4tLVxcbm1tL2ZvbGlvLmM9NDA2PXN0YXRpYyBib29sIGxydV9nZW5fY2xlYXJfcmVmcyhzdHJ1Y3QgZm9saW8gKmZvbGlvKVxcbi0tXFxubW0vZm9saW8uYy00MTAtXFxubW0vZm9saW8uYzo0MTE6I2VuZGlmIC8qIENPTkZJR19MUlVfR0VOICovXFxubW0vZm9saW8uYy00MTItXFxuLS1cXG5tbS9tZW1jb250cm9sLmM9NDY4MD1zdGF0aWMgdm9pZCBtZW1fY2dyb3VwX2V4aXQoc3RydWN0IHRhc2tfc3RydWN0ICp0YXNrKVxcbi0tXFxubW0vbWVtY29udHJvbC5jLTQ2OTYtXFxubW0vbWVtY29udHJvbC5jOjQ2OTc6I2lmZGVmIENPTkZJR19MUlVfR0VOXFxubW0vbWVtY29udHJvbC5jLTQ2OTgtc3RhdGljIHZvaWQgbWVtX2Nncm91cF9scnVfZ2VuX2F0dGFjaChzdHJ1Y3QgY2dyb3VwX3Rhc2tzZXQgKnRzZXQpXFxuLS1cXG5tbS9tZW1jb250cm9sLmM9NDcxNj1zdGF0aWMgdm9pZCBtZW1fY2dyb3VwX2xydV9nZW5fYXR0YWNoKHN0cnVjdCBjZ3JvdXBfdGFza3NldCAqdHNldCkge31cXG5tbS9tZW1jb250cm9sLmM6NDcxNzojZW5kaWYgLyogQ09ORklHX0xSVV9HRU4gKi9cXG5tbS9tZW1jb250cm9sLmMtNDcxOC1cXG4tLVxcbm1tL21lbWNvbnRyb2wuYz01NzQ2PXN0YXRpYyB2b2lkIF9faW5pdCBtZW1jZ19zdHJ1Y3RfY2hlY2sodm9pZClcXG4tLVxcbm1tL21lbWNvbnRyb2wuYy01NzkwLSNlbmRpZlxcbm1tL21lbWNvbnRyb2wuYzo1NzkxOiNpZmRlZiBDT05GSUdfTFJVX0dFTl9XQUxLU19NTVVcXG5tbS9tZW1jb250cm9sLmMtNTc5Mi1cXHRDQUNIRUxJTkVfQVNTRVJUX0dST1VQX01FTUJFUihzdHJ1Y3QgbWVtX2Nncm91cCwgbWVtY2dfY29sZCxcXG4tLVxcbm1tL21lbW9yeS5jPTY2OTQ9c3RhdGljIGlubGluZSB2b2lkIG1tX2FjY291bnRfZmF1bHQoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHN0cnVjdCBwdF9yZWdzICpyZWdzLFxcbi0tXFxubW0vbWVtb3J5LmMtNjc0Ni1cXG5tbS9tZW1vcnkuYzo2NzQ3OiNpZmRlZiBDT05GSUdfTFJVX0dFTlxcbm1tL21lbW9yeS5jLTY3NDgtc3RhdGljIHZvaWQgbHJ1X2dlbl9lbnRlcl9mYXVsdChzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSlcXG4tLVxcbm1tL21lbW9yeS5jPTY3NjM9c3RhdGljIHZvaWQgbHJ1X2dlbl9leGl0X2ZhdWx0KHZvaWQpXFxuLS1cXG5tbS9tZW1vcnkuYy02NzY1LX1cXG5tbS9tZW1vcnkuYzo2NzY2OiNlbmRpZiAvKiBDT05GSUdfTFJVX0dFTiAqL1xcbm1tL21lbW9yeS5jLTY3NjctXFxuLS1cXG5tbS92bXNjYW4uYz04NDc9ZW51bSBmb2xpb19yZWZlcmVuY2VzIHtcXG4tLVxcbm1tL3Ztc2Nhbi5jLTg1Mi1cXG5tbS92bXNjYW4uYzo4NTM6I2lmZGVmIENPTkZJR19MUlVfR0VOXFxubW0vdm1zY2FuLmMtODU0LS8qXFxuLS1cXG5tbS92bXNjYW4uYz04ODU9c3RhdGljIGJvb2wgbHJ1X2dlbl9zZXRfcmVmcyhzdHJ1Y3QgZm9saW8gKmZvbGlvLCBjb25zdCB2bWFfZmxhZ3NfdCAqdm1hX2ZsYWdzKVxcbi0tXFxubW0vdm1zY2FuLmMtODg4LX1cXG5tbS92bXNjYW4uYzo4ODk6I2VuZGlmIC8qIENPTkZJR19MUlVfR0VOICovXFxubW0vdm1zY2FuLmMtODkwLVxcbi0tXFxubW0vdm1zY2FuLmM9MjcwOD1zdGF0aWMgYm9vbCBjYW5fYWdlX2Fub25fcGFnZXMoc3RydWN0IGxydXZlYyAqbHJ1dmVjLFxcbi0tXFxubW0vdm1zY2FuLmMtMjcxOS1cXG5tbS92bXNjYW4uYzoyNzIwOiNpZmRlZiBDT05GSUdfTFJVX0dFTlxcbm1tL3Ztc2Nhbi5jLTI3MjEtXFxubW0vdm1zY2FuLmM9MjcyMj1ERUZJTkVfU1RBVElDX0tFWV9GQUxTRShscnVfc3dpdGNoKTtcXG5tbS92bXNjYW4uYzoyNzIzOiNpZmRlZiBDT05GSUdfTFJVX0dFTl9FTkFCTEVEXFxubW0vdm1zY2FuLmMtMjcyNC1ERUZJTkVfU1RBVElDX0tFWV9BUlJBWV9UUlVFKGxydV9nZW5fY2FwcywgTlJfTFJVX0dFTl9DQVBTKTtcXG4tLVxcbm1tL3Ztc2Nhbi5jPTI5MDg9c3RhdGljIHZvaWQgcmVzZXRfYmxvb21fZmlsdGVyKHN0cnVjdCBscnVfZ2VuX21tX3N0YXRlICptbV9zdGF0ZSwgdW5zaWduZWQgbG9uZyBzZXEpXFxuLS1cXG5tbS92bXNjYW4uYy0yOTI3LVxcbm1tL3Ztc2Nhbi5jOjI5Mjg6I2lmZGVmIENPTkZJR19MUlVfR0VOX1dBTEtTX01NVVxcbm1tL3Ztc2Nhbi5jLTI5MjktXFxuLS1cXG5tbS92bXNjYW4uYz0zMDM3PXZvaWQgbHJ1X2dlbl9taWdyYXRlX21tKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tKVxcbi0tXFxubW0vdm1zY2FuLmMtMzA2NS1cXG5tbS92bXNjYW4uYzozMDY2OiNlbHNlIC8qICFDT05GSUdfTFJVX0dFTl9XQUxLU19NTVUgKi9cXG5tbS92bXNjYW4uYy0zMDY3LVxcbi0tXFxubW0vdm1zY2FuLmM9NjA1ND1sYXRlX2luaXRjYWxsKGluaXRfbHJ1X2dlbik7XFxubW0vdm1zY2FuLmMtNjA1NS1cXG5tbS92bXNjYW4uYzo2MDU2OiNlbHNlIC8qICFDT05GSUdfTFJVX0dFTiAqL1xcbm1tL3Ztc2Nhbi5jLTYwNTctXFxuLS1cXG5tbS92bXNjYW4uYz02MDY4PXN0YXRpYyB2b2lkIGxydV9nZW5fc2hyaW5rX25vZGUoc3RydWN0IHBnbGlzdF9kYXRhICpwZ2RhdCwgc3RydWN0IHNjYW5fY29udHJvbCAqc2MpXFxuLS1cXG5tbS92bXNjYW4uYy02MDcyLVxcbm1tL3Ztc2Nhbi5jOjYwNzM6I2VuZGlmIC8qIENPTkZJR19MUlVfR0VOICovXFxubW0vdm1zY2FuLmMtNjA3NC1cXG4tLVxcbm1tL3dvcmtpbmdzZXQuYz0yMTM9c3RhdGljIHZvaWQgdW5wYWNrX3NoYWRvdyh2b2lkICpzaGFkb3csIGludCAqbWVtY2dpZHAsIHBnX2RhdGFfdCAqKnBnZGF0LFxcbi0tXFxubW0vd29ya2luZ3NldC5jLTIzMi1cXG5tbS93b3JraW5nc2V0LmM6MjMzOiNpZmRlZiBDT05GSUdfTFJVX0dFTlxcbm1tL3dvcmtpbmdzZXQuYy0yMzQtXFxuLS1cXG5tbS93b3JraW5nc2V0LmM9MjkyPXN0YXRpYyB2b2lkIGxydV9nZW5fcmVmYXVsdChzdHJ1Y3QgZm9saW8gKmZvbGlvLCB2b2lkICpzaGFkb3cpXFxuLS1cXG5tbS93b3JraW5nc2V0LmMtMzM2LVxcbm1tL3dvcmtpbmdzZXQuYzozMzc6I2Vsc2UgLyogIUNPTkZJR19MUlVfR0VOICovXFxubW0vd29ya2luZ3NldC5jLTMzOC1cXG4tLVxcbm1tL3dvcmtpbmdzZXQuYz0zNTA9c3RhdGljIHZvaWQgbHJ1X2dlbl9yZWZhdWx0KHN0cnVjdCBmb2xpbyAqZm9saW8sIHZvaWQgKnNoYWRvdylcXG4tLVxcbm1tL3dvcmtpbmdzZXQuYy0zNTMtXFxubW0vd29ya2luZ3NldC5jOjM1NDojZW5kaWYgLyogQ09ORklHX0xSVV9HRU4gKi9cXG5tbS93b3JraW5nc2V0LmMtMzU1LVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wN1QwNzoyNTozMy4wNzMxOTA5ODlaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyODEzMzIyOTU3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkNoZWNraW5nIEtjb25maWcgZm9yIExSVSBHZW5lcmF0aW9uIENvbmZpZ3VyYXRpb24qKlxuXG5Pa2F5LCBzbyBJIG5lZWQgdG8gcmVmcmVzaCBteSBtZW1vcnkgb24gaG93IHRoaXMgTFJVIGdlbmVyYXRpb24gZmVhdHVyZSBpcyBjb25maWd1cmVkLiBGaXJzdCwgSSdtIGdvaW5nIHRvIHF1aWNrbHkgY2hlY2sgdGhlIEtjb25maWcgZmlsZXMgZm9yIHRoZSBvcHRpb25zIEkga25vdywgYExSVV9HRU5gIGFuZCBgTFJVX0dFTl9FTkFCTEVEYC4gVGhhdCdzIHdoZXJlIEkgd291bGQgZXhwZWN0IHRvIGZpbmQgdGhlIHJlbGV2YW50IHNldHRpbmdzLiBUaGVuLCB0byBtYWtlIHN1cmUgSSdtIGxvb2tpbmcgYXQgdGhlIHJpZ2h0IGZpbGVzLCBJIHdpbGwgdXNlIGBncmVwYCB0byBzZWFyY2ggZm9yIGBjb25maWcgTFJVX0dFTmAgd2l0aGluIGBtbS9LY29uZmlnYC4gVGhhdCBzaG91bGQgZ2l2ZSBtZSBhIHF1aWNrIGhpdCwgdGVsbGluZyBtZSB0aGUgY29uZmlnIHZhcmlhYmxlIG5hbWUgYW5kIHByb2JhYmx5IGl0cyBkZXNjcmlwdGlvbiwgYW5kIGhlbHAgZW5zdXJlIEknbSBuYXZpZ2F0aW5nIHRoZSBjb3JyZWN0IEtjb25maWcgc3RydWN0dXJlLiBUaGlzIGlzIGp1c3QgYSBwcmVsaW1pbmFyeSBzY2FuIGJlZm9yZSBJIGRpdmUgZGVlcGVyIGludG8gdGhlIGNvZGUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjcyMzcsIk91dHB1dFRva2VucyI6MjcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0MiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wN1QwNzoyNTozNS44ODY1MTYzMTZaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ5OTEyNDUyLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBMUlVfR0VOXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9LY29uZmlnPTEzODc9Y29uZmlnIFBURV9NQVJLRVJfVUZGRF9XUFxcbi0tXFxubW0vS2NvbmZpZy0xMzk3LSMgbXVsdGktZ2VuIExSVSB7XFxubW0vS2NvbmZpZzoxMzk4OmNvbmZpZyBMUlVfR0VOXFxubW0vS2NvbmZpZy0xMzk5LVxcdGJvb2wgXFxcIk11bHRpLUdlbiBMUlVcXFwiXFxuLS1cXG5tbS9LY29uZmlnLTE0MDYtXFxubW0vS2NvbmZpZzoxNDA3OmNvbmZpZyBMUlVfR0VOX0VOQUJMRURcXG5tbS9LY29uZmlnLTE0MDgtXFx0Ym9vbCBcXFwiRW5hYmxlIGJ5IGRlZmF1bHRcXFwiXFxuLS1cXG5tbS9LY29uZmlnLTE0MTItXFxubW0vS2NvbmZpZzoxNDEzOmNvbmZpZyBMUlVfR0VOX1NUQVRTXFxubW0vS2NvbmZpZy0xNDE0LVxcdGJvb2wgXFxcIkZ1bGwgc3RhdHMgZm9yIGRlYnVnZ2luZ1xcXCJcXG4tLVxcbm1tL0tjb25maWctMTQyMS1cXG5tbS9LY29uZmlnOjE0MjI6Y29uZmlnIExSVV9HRU5fV0FMS1NfTU1VXFxubW0vS2NvbmZpZy0xNDIzLVxcdGRlZl9ib29sIHlcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDdUMDc6MjU6MzUuOTM2NDM3ODI4WiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjE2NzYyNDMxNzAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBhIHN1bW1hcnkgb2YgbXkgdGhvdWdodCBwcm9jZXNzOlxuXG4qKkRpdmluZyBpbnRvIHRoZSBLZXJuZWwgQ29uZmlndXJhdGlvbiBMYW5kc2NhcGUqKlxuXG5Pa2F5LCBzbyBJIG5lZWQgdG8gdW5kZXJzdGFuZCBhIHNwZWNpZmljIGFzcGVjdCBvZiB0aGlzIGNvbmZpZ3VyYXRpb24uIE15IGltbWVkaWF0ZSBpbnN0aW5jdCBpcyB0byBqdW1wIGludG8gdGhlIGBtbS9LY29uZmlnYCBmaWxlLiBJJ20gdGhpbmtpbmcsIGJhc2VkIG9uIGV4cGVyaWVuY2UsIHRoYXQgYXJvdW5kIGxpbmUgMTM5OCwgSSdtIGxpa2VseSB0byBmaW5kIHRoZSByZWxldmFudCBzZWN0aW9uIGNvbnRhaW5pbmcgdGhlIGRlcGVuZGVuY2llcywgZnVydGhlciBkZXRhaWxzLCBhbmQgcGVyaGFwcyBzb21lIGhlbHBmdWwgY29tbWVudHMgYWJvdXQgd2hhdGV2ZXIgaXQgaXMgSSdtIGN1cnJlbnRseSBpbnZlc3RpZ2F0aW5nLiBUaW1lIHRvIGNoZWNrIHRoZXJlIGRpcmVjdGx5LlxuXG5cbiIsIklucHV0VG9rZW5zIjo3NzA1LCJPdXRwdXRUb2tlbnMiOjMzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDdUMDc6MjU6MzcuNjEyNjgyOTY4WiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEzNDMxMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJtbS9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEzOTUsXG4gIFwiTGluZUNvdW50XCI6IDQwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjEzOTU6XFx0XFx0ICBmaWxlLWJhY2tlZCBtZW1vcnkgdHlwZXMgbGlrZSBzaG1lbSBhbmQgaHVnZXRsYmZzLlxcbjEzOTY6XFx0XFxuMTM5NzpcXHQjIG11bHRpLWdlbiBMUlUge1xcbjEzOTg6XFx0Y29uZmlnIExSVV9HRU5cXG4xMzk5OlxcdFxcdGJvb2wgXFxcIk11bHRpLUdlbiBMUlVcXFwiXFxuMTQwMDpcXHRcXHRkZXBlbmRzIG9uIE1NVVxcbjE0MDE6XFx0XFx0IyBtYWtlIHN1cmUgZm9saW8tXFx1MDAzZWZsYWdzIGhhcyBlbm91Z2ggc3BhcmUgYml0c1xcbjE0MDI6XFx0XFx0ZGVwZW5kcyBvbiA2NEJJVCB8fCAhU1BBUlNFTUVNIHx8IFNQQVJTRU1FTV9WTUVNTUFQXFxuMTQwMzpcXHRcXHRoZWxwXFxuMTQwNDpcXHRcXHQgIEEgaGlnaCBwZXJmb3JtYW5jZSBMUlUgaW1wbGVtZW50YXRpb24gdG8gb3ZlcmNvbW1pdCBtZW1vcnkuIFNlZVxcbjE0MDU6XFx0XFx0ICBEb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL21tL211bHRpZ2VuX2xydS5yc3QgZm9yIGRldGFpbHMuXFxuMTQwNjpcXHRcXG4xNDA3OlxcdGNvbmZpZyBMUlVfR0VOX0VOQUJMRURcXG4xNDA4OlxcdFxcdGJvb2wgXFxcIkVuYWJsZSBieSBkZWZhdWx0XFxcIlxcbjE0MDk6XFx0XFx0ZGVwZW5kcyBvbiBMUlVfR0VOXFxuMTQxMDpcXHRcXHRoZWxwXFxuMTQxMTpcXHRcXHQgIFRoaXMgb3B0aW9uIGVuYWJsZXMgdGhlIG11bHRpLWdlbiBMUlUgYnkgZGVmYXVsdC5cXG4xNDEyOlxcdFxcbjE0MTM6XFx0Y29uZmlnIExSVV9HRU5fU1RBVFNcXG4xNDE0OlxcdFxcdGJvb2wgXFxcIkZ1bGwgc3RhdHMgZm9yIGRlYnVnZ2luZ1xcXCJcXG4xNDE1OlxcdFxcdGRlcGVuZHMgb24gTFJVX0dFTlxcbjE0MTY6XFx0XFx0aGVscFxcbjE0MTc6XFx0XFx0ICBEbyBub3QgZW5hYmxlIHRoaXMgb3B0aW9uIHVubGVzcyB5b3UgcGxhbiB0byBsb29rIGF0IGhpc3RvcmljYWwgc3RhdHNcXG4xNDE4OlxcdFxcdCAgZnJvbSBldmljdGVkIGdlbmVyYXRpb25zIGZvciBkZWJ1Z2dpbmcgcHVycG9zZS5cXG4xNDE5OlxcdFxcbjE0MjA6XFx0XFx0ICBUaGlzIG9wdGlvbiBoYXMgYSBwZXItbWVtY2cgYW5kIHBlci1ub2RlIG1lbW9yeSBvdmVyaGVhZC5cXG4xNDIxOlxcdFxcbjE0MjI6XFx0Y29uZmlnIExSVV9HRU5fV0FMS1NfTU1VXFxuMTQyMzpcXHRcXHRkZWZfYm9vbCB5XFxuMTQyNDpcXHRcXHRkZXBlbmRzIG9uIExSVV9HRU4gXFx1MDAyNlxcdTAwMjYgQVJDSF9IQVNfSFdfUFRFX1lPVU5HXFxuMTQyNTpcXHQjIH1cXG4xNDI2OlxcdFxcbjE0Mjc6XFx0Y29uZmlnIExPQ0tfTU1fQU5EX0ZJTkRfVk1BXFxuMTQyODpcXHRcXHRib29sXFxuMTQyOTpcXHRcXHRkZXBlbmRzIG9uICFTVEFDS19HUk9XU1VQXFxuMTQzMDpcXHRcXG4xNDMxOlxcdGNvbmZpZyBJT01NVV9NTV9EQVRBXFxuMTQzMjpcXHRcXHRib29sXFxuMTQzMzpcXHRcXG4xNDM0OlxcdGNvbmZpZyBFWEVDTUVNXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDA3OjI1OjM3LjYxMjgxODYwOFoiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjozODc0NDMzMzM3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkRpdmluZyBpbnRvIGBtbS92bXNjYW4uY2AgYW5kIE1HTFJVIFBhZ2UgUmVjbGFpbSoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IGBtbS92bXNjYW4uY2AsIHdoaWNoLCBhcyB3ZSBrbm93LCBpcyB0aGUgaGVhcnQgb2YgdGhlIGtlcm5lbCdzIG1lbW9yeSBtYW5hZ2VtZW50LCBhbmQgc3BlY2lmaWNhbGx5IGRlYWxpbmcgd2l0aCB0aGUgTXVsdGktR2VuIExSVSAoTUdMUlUpIGltcGxlbWVudGF0aW9uIGZvciBwYWdlIHJlY2xhaW0gYW5kIGFnaW5nLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0IHRoaXMgZGlmZiBpcyBkb2luZyBhbmQgdGhlIHJhdGlvbmFsZSBiZWhpbmQgaXQuXG5cblRoZSBkaWZmIGl0c2VsZiBpcyBwcmV0dHkgY29uY2lzZS4gSXQgc2VlbXMgdG8gYmUgbW9kaWZ5aW5nIGhvdyBmb2xpb3MgYXJlIGhhbmRsZWQgZHVyaW5nIGV2aWN0aW9uLiBCZWZvcmUgdGhlIGNoYW5nZSwgaWYgYSBmb2xpbydzIHNlcXVlbmNlIG51bWJlciBtYXRjaGVkIHRoZSBtaW5pbXVtIHNlcXVlbmNlIGZvciBhIHBhcnRpY3VsYXIgdHlwZSwgaXQgd2FzICppbXBsaWNpdGx5KiBtYWRlIGFjdGl2ZSAqYW5kKiBpdHMgTFJVIHJlZmVyZW5jZXMgd2VyZSBzZXQgdG8gemVyby4gTm93LCB0aGUgY29kZSBleHBsaWNpdGx5IHNldHMgdGhlIGZvbGlvIGFzIGFjdGl2ZSwgYW5kIHRoZW4gKmV4cGxpY2l0bHkqIHNldHMgdGhlIExSVSByZWZlcmVuY2VzIHRvIHplcm8sIHJlZ2FyZGxlc3Mgb2YgdGhlIHNlcXVlbmNlIG51bWJlci4gXG5cblRoZSBpbnRlcmVzdGluZyBwYXJ0IGlzIHRoZSBjb21tZW50OiAqXCJTZWUgdGhlIGNvbW1lbnRzIG9uIExSVV9SRUZTX0ZMQUdTXCIqLiBTbywgdGhlcmUncyBvYnZpb3VzbHkgYSBiaXQgb2YgYmFja2dyb3VuZCBvciBjb250ZXh0IGhlcmUgdGhhdCBJIG5lZWQgdG8gdW5kZXJzdGFuZC4gSSdtIGdvaW5nIHRvIGhhdmUgdG8gZGlnIGludG8gdGhlIGNvbW1lbnRzIGFyb3VuZCBgTFJVX1JFRlNfRkxBR1NgIGluIGBtbS92bXNjYW4uY2Agb3IgZWxzZXdoZXJlIGluIHRoZSBjb2RlYmFzZSB0byB1bmRlcnN0YW5kIHRoZSBpbXBsaWNhdGlvbnMgb2YgdGhpcyBjaGFuZ2UuIEl0IHNlZW1zIHRvIGJlIGEgc3VidGxlIGJ1dCBwb3RlbnRpYWxseSBpbXBvcnRhbnQgYWx0ZXJhdGlvbiBpbiBob3cgdGhlIE1HTFJVIGFsZ29yaXRobSBhZ2VzIGFuZCByZWNsYWltcyBwYWdlcy4gSSdsbCBuZWVkIHRvIHNlZSBpZiBpdCBpcyByZWxhdGVkIHRvIGEgc3VidGxlIGJ1ZyBmaXgsIG9yIG1heWJlIGEgcGVyZm9ybWFuY2Ugb3B0aW1pemF0aW9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjo4NDIxLCJPdXRwdXRUb2tlbnMiOjI5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzE5LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDdUMDc6MjU6NDEuNDg3MjU5ODI0WiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0OTg4OTYxMiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJMUlVfUkVGU19GTEFHU1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vZm9saW8uYz0zNTU9c3RhdGljIHZvaWQgbHJ1X2dlbl9pbmNfcmVmcyhzdHJ1Y3QgZm9saW8gKmZvbGlvKVxcbi0tXFxubW0vZm9saW8uYy0zNjItXFxubW0vZm9saW8uYzozNjM6XFx0Lyogc2VlIHRoZSBjb21tZW50IG9uIExSVV9SRUZTX0ZMQUdTICovXFxubW0vZm9saW8uYy0zNjQtXFx0aWYgKCFmb2xpb19scnVfcmVmcyhmb2xpbykpIHtcXG4tLVxcbm1tL3Ztc2Nhbi5jPTg2MD1zdGF0aWMgYm9vbCBscnVfZ2VuX3NldF9yZWZzKHN0cnVjdCBmb2xpbyAqZm9saW8sIGNvbnN0IHZtYV9mbGFnc190ICp2bWFfZmxhZ3MpXFxubW0vdm1zY2FuLmMtODYxLXtcXG5tbS92bXNjYW4uYzo4NjI6XFx0Lyogc2VlIHRoZSBjb21tZW50IG9uIExSVV9SRUZTX0ZMQUdTICovXFxubW0vdm1zY2FuLmMtODYzLVxcdGlmICghZm9saW9fdGVzdF9yZWZlcmVuY2VkKGZvbGlvKSBcXHUwMDI2XFx1MDAyNiAhZm9saW9fdGVzdF93b3JraW5nc2V0KGZvbGlvKSkge1xcbi0tXFxubW0vdm1zY2FuLmM9MzI5Nz1zdGF0aWMgaW50IGZvbGlvX3VwZGF0ZV9nZW4oc3RydWN0IGZvbGlvICpmb2xpbywgaW50IG5ld19nZW4sIGludCAqdHlwZSxcXG4tLVxcbm1tL3Ztc2Nhbi5jLTMzMDMtXFx0LypcXG5tbS92bXNjYW4uYzozMzA0OlxcdCAqIFNlZSB0aGUgY29tbWVudCBvbiBMUlVfUkVGU19GTEFHUywgYW5kIGFjdGl2YXRlIGZpbGUtYmFja2VkXFxubW0vdm1zY2FuLmMtMzMwNS1cXHQgKiBleGVjdXRhYmxlIGZvbGlvcyBhZnRlciBmaXJzdCB1c2FnZSB0byBhdm9pZCB0eXBpY2FsIElPXFxuLS1cXG5tbS92bXNjYW4uYz00Nzc0PXN0YXRpYyBib29sIGlzb2xhdGVfZm9saW8oc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYylcXG4tLVxcbm1tL3Ztc2Nhbi5jLTQ3ODctXFxubW0vdm1zY2FuLmM6NDc4ODpcXHQvKiBzZWUgdGhlIGNvbW1lbnQgb24gTFJVX1JFRlNfRkxBR1MgKi9cXG5tbS92bXNjYW4uYy00Nzg5LVxcdGlmICghZm9saW9fdGVzdF9yZWZlcmVuY2VkKGZvbGlvKSlcXG4tLVxcbm1tL3Ztc2Nhbi5jPTQ5NjQ9c3RhdGljIGludCBldmljdF9mb2xpb3ModW5zaWduZWQgbG9uZyBucl90b19zY2FuLCBzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsXFxuLS1cXG5tbS92bXNjYW4uYy01MDI2LVxcbm1tL3Ztc2Nhbi5jOjUwMjc6XFx0XFx0LyogU2VlIHRoZSBjb21tZW50cyBvbiBMUlVfUkVGU19GTEFHUyAqL1xcbm1tL3Ztc2Nhbi5jLTUwMjgtXFx0XFx0Zm9saW9fc2V0X2xydV9yZWZzKGZvbGlvLCAwKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDdUMDc6MjU6NDEuNTM3MTUzOTc2WiIsIlNlcSI6MTUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjM3NTkyMzcxMjYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIE1HTFJVIEV2aWN0aW9uIExvZ2ljIGZvciBGdXp6aW5nIE9wcG9ydHVuaXRpZXMqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIEknbSBsb29raW5nIGF0IGBldmljdF9mb2xpb3MoKWAgaW4gYG1tL3Ztc2Nhbi5jYCwgd2hpY2gsIGFzIEkga25vdywgaXMgYSBrZXkgY29tcG9uZW50IG9mIHRoZSBNdWx0aWdlbmVyYXRpb25hbCBMUlUgKE1HTFJVKSBldmljdGlvbiBwcm9jZXNzLiBTcGVjaWZpY2FsbHksIEknbSBub3RpY2luZyBhIGNoYW5nZTogYGZvbGlvX3NldF9scnVfcmVmcyhmb2xpbywgMCk7YCBpcyBub3cgdW5jb25kaXRpb25hbGx5IGNhbGxlZCB3aXRoaW4gdGhpcyBsb29wLiBCZWZvcmUsIGl0IHdhcyB0aWVkIHRvIGEgY29uZGl0aW9uYWwgY2hlY2sgcmVsYXRlZCB0byB0aGUgTFJVIHNlcXVlbmNlLlxuXG5NeSBpbW1lZGlhdGUgdGhvdWdodCBpcywgXCJJcyB0aGlzIHJlYWNoYWJsZT9cIiBhbmQgaWYgc28sIFwiSXMgaXQgd29ydGggYSBjbG9zZXIgbG9vayBmb3IgZnV6emluZyBwb3RlbnRpYWw/XCIgVGhlIGFuc3dlciB0byB0aGUgcmVhY2hhYmlsaXR5IHF1ZXN0aW9uIGFwcGVhcnMgdG8gYmUgeWVzOyB0aGlzIGlzIGNvcmUgTU0gcGFnZSByZWNsYWltIGFuZCBNR0xSVSBldmljdGlvbiwgdHJpZ2dlcmVkIGJ5IG1lbW9yeSBwcmVzc3VyZSBvciBkdXJpbmcgbm9ybWFsIHBhZ2UgcmVjbGFpbSBvcGVyYXRpb25zLiBTbywgaXQncyBkZWZpbml0ZWx5IGluIHRoZSBob3QgcGF0aC5cblxuTm93LCB0aGF0IGJyaW5ncyB1cyB0byBcIldvcnRoRnV6emluZz10cnVlLlwiIEdpdmVuIHRoYXQgdGhpcyBpcyBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50LCBzcGVjaWZpY2FsbHkgd2l0aGluIGEgcmVjbGFpbSBwYXRoLCB0aGUgcG90ZW50aWFsIGltcGFjdCBvZiBpc3N1ZXMgaGVyZSBpcyBoaWdoLiBJdCdzIGRlZmluaXRlbHkgaW4gYSBzdWJzeXN0ZW0sIGBtbS9gLCB0aGF0J3Mga25vd24gdG8gaGF2ZSBoYWQgcGFzdCBpc3N1ZXMgc28gdGhpcyBkZWZpbml0ZWx5IHdhcnJhbnRzIGNsb3NlciBpbnNwZWN0aW9uLlxuXG5TbywgbGV0J3MgaWRlbnRpZnkgcmVsZXZhbnQgZnVuY3Rpb25zIHRoYXQgY2FsbCBgZXZpY3RfZm9saW9zYCB0byB1bmRlcnN0YW5kIHdoZXJlIHRoaXMgaXMgYmVpbmcgZXhlY3V0ZWQuIFdoYXQgZnVuY3Rpb25zIHdpdGhpbiBgbW0vdm1zY2FuLmNgIGFyZSBjYWxsaW5nIGBldmljdF9mb2xpb3NgIGFuZCB3aGF0IHN1YnN5c3RlbXMgd291bGQgYmUgaW1wYWN0ZWQgaWYgdGhlcmUgYXJlIGlzc3Vlcz9cblxuXG4iLCJJbnB1dFRva2VucyI6OTYyOCwiT3V0cHV0VG9rZW5zIjoyNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIzNSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wN1QwNzoyNTo0NS4yOTYzOTg5MzFaIiwiU2VxIjoxNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjUwMTA3MTYzLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImV2aWN0X2ZvbGlvc1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vdm1zY2FuLmM9NDkyMD1zdGF0aWMgaW50IGlzb2xhdGVfZm9saW9zKHVuc2lnbmVkIGxvbmcgbnJfdG9fc2Nhbiwgc3RydWN0IGxydXZlYyAqbHJ1dmVjLFxcbi0tXFxubW0vdm1zY2FuLmMtNDk2My1cXG5tbS92bXNjYW4uYzo0OTY0OnN0YXRpYyBpbnQgZXZpY3RfZm9saW9zKHVuc2lnbmVkIGxvbmcgbnJfdG9fc2Nhbiwgc3RydWN0IGxydXZlYyAqbHJ1dmVjLFxcbm1tL3Ztc2Nhbi5jLTQ5NjUtXFx0XFx0XFx0c3RydWN0IHNjYW5fY29udHJvbCAqc2MsIGludCBzd2FwcGluZXNzKVxcbi0tXFxubW0vdm1zY2FuLmM9NTE0ND1zdGF0aWMgYm9vbCB0cnlfdG9fc2hyaW5rX2xydXZlYyhzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjKVxcbi0tXFxubW0vdm1zY2FuLmMtNTE2Ny1cXHRcXHRucl9iYXRjaCA9IG1pbihucl90b19zY2FuLCBNSU5fTFJVX0JBVENIKTtcXG5tbS92bXNjYW4uYzo1MTY4OlxcdFxcdGRlbHRhID0gZXZpY3RfZm9saW9zKG5yX2JhdGNoLCBscnV2ZWMsIHNjLCBzd2FwcGluZXNzKTtcXG5tbS92bXNjYW4uYy01MTY5LVxcdFxcdGlmICghZGVsdGEpXFxuLS1cXG5tbS92bXNjYW4uYz01Nzg1PXN0YXRpYyBpbnQgcnVuX2V2aWN0aW9uKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgdW5zaWduZWQgbG9uZyBzZXEsIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjLFxcbi0tXFxubW0vdm1zY2FuLmMtNTgwNS1cXHRcXHRucl9iYXRjaCA9IG1pbihucl90b19yZWNsYWltIC0gc2MtXFx1MDAzZW5yX3JlY2xhaW1lZCwgTUFYX0xSVV9CQVRDSCk7XFxubW0vdm1zY2FuLmM6NTgwNjpcXHRcXHRpZiAoIWV2aWN0X2ZvbGlvcyhucl9iYXRjaCwgbHJ1dmVjLCBzYywgc3dhcHBpbmVzcykpXFxubW0vdm1zY2FuLmMtNTgwNy1cXHRcXHRcXHRyZXR1cm4gMDtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDdUMDc6MjU6NDUuMzQ2NTEzMDQzWiIsIlNlcSI6MTcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjM1MDE3OTY0MDYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBgZXZpY3RfZm9saW9zYCBGdW5jdGlvbioqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gSSdtIGxvb2tpbmcgYXQgYGV2aWN0X2ZvbGlvc2AsIGFuZCBpbW1lZGlhdGVseSBJIG5vdGUgaXQncyBhIHN0YXRpYyBmdW5jdGlvbiByZXNpZGluZyBpbiBgbW0vdm1zY2FuLmNgLiBJdCdzIHByZXR0eSBzdWJzdGFudGlhbCwgcm91Z2hseSBhIGh1bmRyZWQgbGluZXMsIGludm9sdmluZyBsb29wcyBhbmQgY2FsbHMgdG8gYHNocmlua19mb2xpb19saXN0YC4gR2l2ZW4gaXRzIHNpemUgYW5kIHN0YXRpYyBuYXR1cmUsIGl0J3MgaGlnaGx5IHVubGlrZWx5IHRvIGJlIGlubGluZWQsIGFsdGhvdWdoIGlmIHRoZSBzeW1ib2wgaXMgcmV0YWluZWQgaXQgY2FuIGJlIHRhcmdldGVkLiBTbywgbXkgbmV4dCB0aG91Z2h0IGlzLCB3aG8ncyAqY2FsbGluZyogdGhpcyB0aGluZz9cblxuTGV0J3Mgc2VlOiBgdHJ5X3RvX3Nocmlua19scnV2ZWNgLCBgcnVuX2V2aWN0aW9uYCwgYW5kIGBscnVfZ2VuX3Nocmlua19scnV2ZWNgIGFuZCBgbHJ1X2dlbl9zaHJpbmtfbm9kZWAuIE5vdyBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgYnJvYWRlciBjb250ZXh0LiBJJ20gZ29pbmcgdG8gbG9vayBhdCB0aGUgY2FsbGVycyBvZiBgcnVuX2V2aWN0aW9uYCBhbmQgYHRyeV90b19zaHJpbmtfbHJ1dmVjYCB0byBnZXQgYSBiZXR0ZXIgc2Vuc2Ugb2YgdGhlIG92ZXJhbGwgbWVtb3J5IG1hbmFnZW1lbnQgZmxvdyBhbmQgaG93IGBldmljdF9mb2xpb3NgIGZpdHMgd2l0aGluIGl0LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMDU5OCwiT3V0cHV0VG9rZW5zIjo0OSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE1NSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wN1QwNzoyNTo0OC44NDgzMTIxMVoiLCJTZXEiOjE4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTEyMjk1MTIsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiKHJ1bl9ldmljdGlvbnx0cnlfdG9fc2hyaW5rX2xydXZlY3xscnVfZ2VuX3NocmluaylcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vdm1zY2FuLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vdm1zY2FuLmM9NTEwOT1zdGF0aWMgYm9vbCBzaG91bGRfYWJvcnRfc2NhbihzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjKVxcbi0tXFxubW0vdm1zY2FuLmMtNTE0My0gKi9cXG5tbS92bXNjYW4uYzo1MTQ0OnN0YXRpYyBib29sIHRyeV90b19zaHJpbmtfbHJ1dmVjKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgc3RydWN0IHNjYW5fY29udHJvbCAqc2MpXFxubW0vdm1zY2FuLmMtNTE0NS17XFxuLS1cXG5tbS92bXNjYW4uYz01MTg5PXN0YXRpYyBpbnQgc2hyaW5rX29uZShzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjKVxcbi0tXFxubW0vdm1zY2FuLmMtNTIwOC1cXG5tbS92bXNjYW4uYzo1MjA5OlxcdG5lZWRfcm90YXRlID0gdHJ5X3RvX3Nocmlua19scnV2ZWMobHJ1dmVjLCBzYyk7XFxubW0vdm1zY2FuLmMtNTIxMC1cXG4tLVxcbm1tL3Ztc2Nhbi5jPTUyMzA9c3RhdGljIHZvaWQgc2hyaW5rX21hbnkoc3RydWN0IHBnbGlzdF9kYXRhICpwZ2RhdCwgc3RydWN0IHNjYW5fY29udHJvbCAqc2MpXFxuLS1cXG5tbS92bXNjYW4uYy01Mjk5LVxcbm1tL3Ztc2Nhbi5jOjUzMDA6c3RhdGljIHZvaWQgbHJ1X2dlbl9zaHJpbmtfbHJ1dmVjKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgc3RydWN0IHNjYW5fY29udHJvbCAqc2MpXFxubW0vdm1zY2FuLmMtNTMwMS17XFxuLS1cXG5tbS92bXNjYW4uYy01MzEyLVxcbm1tL3Ztc2Nhbi5jOjUzMTM6XFx0aWYgKHRyeV90b19zaHJpbmtfbHJ1dmVjKGxydXZlYywgc2MpKVxcbm1tL3Ztc2Nhbi5jLTUzMTQtXFx0XFx0bHJ1X2dlbl9yb3RhdGVfbWVtY2cobHJ1dmVjLCBNRU1DR19MUlVfWU9VTkcpO1xcbi0tXFxubW0vdm1zY2FuLmMtNTMyMC1cXG5tbS92bXNjYW4uYzo1MzIxOnN0YXRpYyB2b2lkIGxydV9nZW5fc2hyaW5rX25vZGUoc3RydWN0IHBnbGlzdF9kYXRhICpwZ2RhdCwgc3RydWN0IHNjYW5fY29udHJvbCAqc2MpXFxubW0vdm1zY2FuLmMtNTMyMi17XFxuLS1cXG5tbS92bXNjYW4uYz01Nzc0PXN0YXRpYyBpbnQgcnVuX2FnaW5nKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgdW5zaWduZWQgbG9uZyBzZXEsXFxuLS1cXG5tbS92bXNjYW4uYy01Nzg0LVxcbm1tL3Ztc2Nhbi5jOjU3ODU6c3RhdGljIGludCBydW5fZXZpY3Rpb24oc3RydWN0IGxydXZlYyAqbHJ1dmVjLCB1bnNpZ25lZCBsb25nIHNlcSwgc3RydWN0IHNjYW5fY29udHJvbCAqc2MsXFxubW0vdm1zY2FuLmMtNTc4Ni1cXHRcXHRcXHRpbnQgc3dhcHBpbmVzcywgdW5zaWduZWQgbG9uZyBucl90b19yZWNsYWltKVxcbi0tXFxubW0vdm1zY2FuLmM9NTgxNT1zdGF0aWMgaW50IHJ1bl9jbWQoY2hhciBjbWQsIHU2NCBtZW1jZ19pZCwgaW50IG5pZCwgdW5zaWduZWQgbG9uZyBzZXEsXFxuLS1cXG5tbS92bXNjYW4uYy01ODQ2LVxcdGNhc2UgJy0nOlxcbm1tL3Ztc2Nhbi5jOjU4NDc6XFx0XFx0ZXJyID0gcnVuX2V2aWN0aW9uKGxydXZlYywgc2VxLCBzYywgc3dhcHBpbmVzcywgb3B0KTtcXG5tbS92bXNjYW4uYy01ODQ4LVxcdFxcdGJyZWFrO1xcbi0tXFxubW0vdm1zY2FuLmM9NjA1OD1zdGF0aWMgdm9pZCBscnVfZ2VuX2FnZV9ub2RlKHN0cnVjdCBwZ2xpc3RfZGF0YSAqcGdkYXQsIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjKVxcbi0tXFxubW0vdm1zY2FuLmMtNjA2Mi1cXG5tbS92bXNjYW4uYzo2MDYzOnN0YXRpYyB2b2lkIGxydV9nZW5fc2hyaW5rX2xydXZlYyhzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjKVxcbm1tL3Ztc2Nhbi5jLTYwNjQte1xcbi0tXFxubW0vdm1zY2FuLmMtNjA2Ny1cXG5tbS92bXNjYW4uYzo2MDY4OnN0YXRpYyB2b2lkIGxydV9nZW5fc2hyaW5rX25vZGUoc3RydWN0IHBnbGlzdF9kYXRhICpwZ2RhdCwgc3RydWN0IHNjYW5fY29udHJvbCAqc2MpXFxubW0vdm1zY2FuLmMtNjA2OS17XFxuLS1cXG5tbS92bXNjYW4uYz02MDc1PXN0YXRpYyB2b2lkIHNocmlua19scnV2ZWMoc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYylcXG4tLVxcbm1tL3Ztc2Nhbi5jLTYwODYtXFx0aWYgKChscnVfZ2VuX2VuYWJsZWQoKSB8fCBscnVfZ2VuX3N3aXRjaGluZygpKSBcXHUwMDI2XFx1MDAyNiAhcm9vdF9yZWNsYWltKHNjKSkge1xcbm1tL3Ztc2Nhbi5jOjYwODc6XFx0XFx0bHJ1X2dlbl9zaHJpbmtfbHJ1dmVjKGxydXZlYywgc2MpO1xcbm1tL3Ztc2Nhbi5jLTYwODgtXFxuLS1cXG5tbS92bXNjYW4uYz02MzQ1PXN0YXRpYyB2b2lkIHNocmlua19ub2RlKHBnX2RhdGFfdCAqcGdkYXQsIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjKVxcbi0tXFxubW0vdm1zY2FuLmMtNjM1Mi1cXHRcXHRtZW1zZXQoXFx1MDAyNnNjLVxcdTAwM2VuciwgMCwgc2l6ZW9mKHNjLVxcdTAwM2VucikpO1xcbm1tL3Ztc2Nhbi5jOjYzNTM6XFx0XFx0bHJ1X2dlbl9zaHJpbmtfbm9kZShwZ2RhdCwgc2MpO1xcbm1tL3Ztc2Nhbi5jLTYzNTQtXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDA3OjI1OjQ4Ljg5OTU0Njg2MloiLCJTZXEiOjE5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjozMzY0MDA4MzY4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFuYWx5c2lzIG9mIE1HTFJVIFJlY2xhaW0gRnVuY3Rpb25zKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBJJ20gbG9va2luZyBhdCBhIHNldCBvZiBmdW5jdGlvbnMgdGhhdCBzZWVtIHJlbGF0ZWQgdG8gbWVtb3J5IHJlY2xhaW0sIGFuZCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGVpciByb2xlcyB3aXRoaW4gdGhlIE1HTFJVIGZyYW1ld29yay4gVGhlIGBGb2N1c1N5bWJvbHNgIGhlcmUgYXJlIHF1aXRlIHNwZWNpZmljLiBJIHNlZTpcblxuKiAgIGBldmljdF9mb2xpb3NgOiBUaGlzIG9uZSBpbW1lZGlhdGVseSBqdW1wcyBvdXQgYXMgaXQncyB0aGUgc3BlY2lmaWMgZnVuY3Rpb24gdGhhdCdzIGJlZW4gbW9kaWZpZWQuXG4qICAgYHRyeV90b19zaHJpbmtfbHJ1dmVjYDogVGhpcyBpcyBhIGtleSBwbGF5ZXIgaW4gdGhlIHBhZ2UgcmVjbGFpbSBwYXRoLCBjYWxsaW5nIHVwb24gdGhlIGBldmljdF9mb2xpb3NgIGZ1bmN0aW9uLlxuKiAgIGBydW5fZXZpY3Rpb25gOiBUaGlzIGlzIGFsc28gYSBjYWxsZXIsIGJ1dCBpdCBhcHBlYXJzIHRvIGJlIHBhcnQgb2YgdGhlIGRlYnVnIGludGVyZmFjZSBvciBhZG1pbiBmdW5jdGlvbmFsaXR5LCBsaWtlbHkgYWNjZXNzZWQgdGhyb3VnaCBzb21ldGhpbmcgbGlrZSBgL3N5cy9rZXJuZWwvZGVidWcvbHJ1X2dlbmAuXG4qICAgYGxydV9nZW5fc2hyaW5rX2xydXZlY2A6IFRoaXMgYW5kIGBscnVfZ2VuX3Nocmlua19ub2RlYCBzZWVtcyBzcGVjaWFsaXplZCB0byB0aGUgTXVsdGktR2VuIExSVSBsb2dpYy5cblxuTm93LCB3aGlsZSBgc2hyaW5rX25vZGVgIHNlZW1zIGxpa2UgYSBtb3JlIGdlbmVyaWMgcmVjbGFpbWVyLCB0aGUgb3RoZXJzIChgbHJ1X2dlbl9zaHJpbmtfbHJ1dmVjYCwgYHRyeV90b19zaHJpbmtfbHJ1dmVjYCwgYHJ1bl9ldmljdGlvbmAsIGFuZCBgZXZpY3RfZm9saW9zYCkgYXJlIGFsbCBjbGVhcmx5IE1HTFJVLXNwZWNpZmljIHJlY2xhaW0gZnVuY3Rpb25zLiBLbm93aW5nIHRoYXQgYGV2aWN0X2ZvbGlvc2AgaXMgdGhlIGZ1bmN0aW9uIHRoYXQncyBiZWVuIG1vZGlmaWVkIGlzIHBhcnRpY3VsYXJseSBpbXBvcnRhbnQuXG5cblRoZSBuZXh0IHRoaW5nIEkgd2FudCB0byB1bmRlcnN0YW5kIGFyZSB0aGUgY29uZmlndXJhdGlvbiBvcHRpb25zLiBJdCBsb29rcyBsaWtlIGBDT05GSUdfTFJVX0dFTmAgaXMgdGhlIG1haW4gb25lIHRoYXQgZW5hYmxlcyBNdWx0aS1HZW4gTFJVLiBUaGUgcXVlc3Rpb24gSSBoYXZlIGlzIHdoZXRoZXIgdGhlIGBDT05GSUdfTFJVX0dFTl9FTkFCTEVEYCBpcyBuZWVkZWQsIG9yIGlmIGBDT05GSUdfTFJVX0dFTmAgaXMgZW5vdWdoIHRvIGVuYWJsZSBNR0xSVS4gSSBuZWVkIHRvIGRpdmUgaW50byB0aGUgaW1wbGVtZW50YXRpb24gb2YgYGxydV9nZW5fZW5hYmxlZCgpYCB0byBjbGFyaWZ5IHRoaXMgcG9pbnQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEyMTQ2LCJPdXRwdXRUb2tlbnMiOjI4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjY4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDA3OjI1OjUyLjI2MzU1NzU1WiIsIlNlcSI6MjAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1MzY0Njk3MiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJscnVfZ2VuX2VuYWJsZWRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL2ZvbGlvLmM9NDI2PXZvaWQgZm9saW9fbWFya19hY2Nlc3NlZChzdHJ1Y3QgZm9saW8gKmZvbGlvKVxcbi0tXFxubW0vZm9saW8uYy00MjktXFx0XFx0cmV0dXJuO1xcbm1tL2ZvbGlvLmM6NDMwOlxcdGlmIChscnVfZ2VuX2VuYWJsZWQoKSkge1xcbm1tL2ZvbGlvLmMtNDMxLVxcdFxcdGxydV9nZW5faW5jX3JlZnMoZm9saW8pO1xcbi0tXFxubW0vZm9saW8uYz00NzE9dm9pZCBmb2xpb19hZGRfbHJ1KHN0cnVjdCBmb2xpbyAqZm9saW8pXFxuLS1cXG5tbS9mb2xpby5jLTQ4My1cXHQgKi9cXG5tbS9mb2xpby5jOjQ4NDpcXHRpZiAobHJ1X2dlbl9lbmFibGVkKCkgXFx1MDAyNlxcdTAwMjYgIWZvbGlvX3Rlc3RfdW5ldmljdGFibGUoZm9saW8pIFxcdTAwMjZcXHUwMDI2XFxubW0vZm9saW8uYy00ODUtXFx0ICAgIGxydV9nZW5faW5fZmF1bHQoKSBcXHUwMDI2XFx1MDAyNiAhKGN1cnJlbnQtXFx1MDAzZWZsYWdzIFxcdTAwMjYgUEZfTUVNQUxMT0MpKSB7XFxuLS1cXG5tbS9mb2xpby5jPTUzNT1zdGF0aWMgdm9pZCBscnVfZGVhY3RpdmF0ZV9maWxlKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgc3RydWN0IGZvbGlvICpmb2xpbylcXG5tbS9mb2xpby5jLTUzNi17XFxubW0vZm9saW8uYzo1Mzc6XFx0Ym9vbCBhY3RpdmUgPSBmb2xpb190ZXN0X2FjdGl2ZShmb2xpbykgfHwgbHJ1X2dlbl9lbmFibGVkKCk7XFxubW0vZm9saW8uYy01MzgtXFx0bG9uZyBucl9wYWdlcyA9IGZvbGlvX25yX3BhZ2VzKGZvbGlvKTtcXG4tLVxcbm1tL2ZvbGlvLmM9NTc2PXN0YXRpYyB2b2lkIGxydV9kZWFjdGl2YXRlKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgc3RydWN0IGZvbGlvICpmb2xpbylcXG4tLVxcbm1tL2ZvbGlvLmMtNTc5LVxcbm1tL2ZvbGlvLmM6NTgwOlxcdGlmIChmb2xpb190ZXN0X3VuZXZpY3RhYmxlKGZvbGlvKSB8fCAhKGZvbGlvX3Rlc3RfYWN0aXZlKGZvbGlvKSB8fCBscnVfZ2VuX2VuYWJsZWQoKSkpXFxubW0vZm9saW8uYy01ODEtXFx0XFx0cmV0dXJuO1xcbi0tXFxubW0vZm9saW8uYz01OTI9c3RhdGljIHZvaWQgbHJ1X2xhenlmcmVlKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgc3RydWN0IGZvbGlvICpmb2xpbylcXG4tLVxcbm1tL2ZvbGlvLmMtNjAxLVxcdGZvbGlvX2NsZWFyX2FjdGl2ZShmb2xpbyk7XFxubW0vZm9saW8uYzo2MDI6XFx0aWYgKGxydV9nZW5fZW5hYmxlZCgpKVxcbm1tL2ZvbGlvLmMtNjAzLVxcdFxcdGxydV9nZW5fY2xlYXJfcmVmcyhmb2xpbyk7XFxuLS1cXG5tbS9mb2xpby5jPTY3MD12b2lkIGRlYWN0aXZhdGVfZmlsZV9mb2xpbyhzdHJ1Y3QgZm9saW8gKmZvbGlvKVxcbi0tXFxubW0vZm9saW8uYy02NzUtXFxubW0vZm9saW8uYzo2NzY6XFx0aWYgKGxydV9nZW5fZW5hYmxlZCgpIFxcdTAwMjZcXHUwMDI2IGxydV9nZW5fY2xlYXJfcmVmcyhmb2xpbykpXFxubW0vZm9saW8uYy02NzctXFx0XFx0cmV0dXJuO1xcbi0tXFxubW0vZm9saW8uYz02OTA9dm9pZCBmb2xpb19kZWFjdGl2YXRlKHN0cnVjdCBmb2xpbyAqZm9saW8pXFxuLS1cXG5tbS9mb2xpby5jLTY5NC1cXG5tbS9mb2xpby5jOjY5NTpcXHRpZiAobHJ1X2dlbl9lbmFibGVkKCkgPyBscnVfZ2VuX2NsZWFyX3JlZnMoZm9saW8pIDogIWZvbGlvX3Rlc3RfYWN0aXZlKGZvbGlvKSlcXG5tbS9mb2xpby5jLTY5Ni1cXHRcXHRyZXR1cm47XFxuLS1cXG5tbS9tZW1jb250cm9sLmM9Mjc4PXN0YXRpYyB2b2lkIG1lbWNnX3JlcGFyZW50X29iamNncyhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpXFxuLS1cXG5tbS9tZW1jb250cm9sLmMtMjg1LXJldHJ5Olxcbm1tL21lbWNvbnRyb2wuYzoyODY6XFx0XFx0aWYgKGxydV9nZW5fZW5hYmxlZCgpKVxcbm1tL21lbWNvbnRyb2wuYy0yODctXFx0XFx0XFx0bWF4X2xydV9nZW5fbWVtY2cocGFyZW50LCBuaWQpO1xcbi0tXFxubW0vbWVtY29udHJvbC5jLTI5MC1cXG5tbS9tZW1jb250cm9sLmM6MjkxOlxcdFxcdGlmIChscnVfZ2VuX2VuYWJsZWQoKSkge1xcbm1tL21lbWNvbnRyb2wuYy0yOTItXFx0XFx0XFx0aWYgKCFyZWNoZWNrX2xydV9nZW5fbWF4X21lbWNnKHBhcmVudCwgbmlkKSkge1xcbi0tXFxubW0vcm1hcC5jPTkyMD1zdGF0aWMgYm9vbCBmb2xpb19yZWZlcmVuY2VkX29uZShzdHJ1Y3QgZm9saW8gKmZvbGlvLFxcbi0tXFxubW0vcm1hcC5jLTk4My1cXHRcXHQgKi9cXG5tbS9ybWFwLmM6OTg0OlxcdFxcdGlmIChscnVfZ2VuX2VuYWJsZWQoKSBcXHUwMDI2XFx1MDAyNiAhbHJ1X2dlbl9zd2l0Y2hpbmcoKSBcXHUwMDI2XFx1MDAyNiBwdm13LnB0ZSkge1xcbm1tL3JtYXAuYy05ODUtXFx0XFx0XFx0aWYgKGxydV9nZW5fbG9va19hcm91bmQoXFx1MDAyNnB2bXcsIG5yKSlcXG4tLVxcbm1tL3Ztc2Nhbi5jPTg5MT1zdGF0aWMgZW51bSBmb2xpb19yZWZlcmVuY2VzIGZvbGlvX2NoZWNrX3JlZmVyZW5jZXMoc3RydWN0IGZvbGlvICpmb2xpbyxcXG4tLVxcbm1tL3Ztc2Nhbi5jLTkxNS1cXG5tbS92bXNjYW4uYzo5MTY6XFx0aWYgKGxydV9nZW5fZW5hYmxlZCgpIFxcdTAwMjZcXHUwMDI2ICFscnVfZ2VuX3N3aXRjaGluZygpKSB7XFxubW0vdm1zY2FuLmMtOTE3LVxcdFxcdGlmICghcmVmZXJlbmNlZF9wdGVzKVxcbi0tXFxubW0vdm1zY2FuLmM9MjMwOD1zdGF0aWMgdm9pZCBwcmVwYXJlX3NjYW5fY29udHJvbChwZ19kYXRhX3QgKnBnZGF0LCBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYylcXG4tLVxcbm1tL3Ztc2Nhbi5jLTIzMTQtXFxubW0vdm1zY2FuLmM6MjMxNTpcXHRpZiAobHJ1X2dlbl9lbmFibGVkKCkgXFx1MDAyNlxcdTAwMjYgIWxydV9nZW5fc3dpdGNoaW5nKCkpXFxubW0vdm1zY2FuLmMtMjMxNi1cXHRcXHRyZXR1cm47XFxuLS1cXG5tbS92bXNjYW4uYz01NDY0PXN0YXRpYyB2b2lkIGxydV9nZW5fY2hhbmdlX3N0YXRlKGJvb2wgZW5hYmxlZClcXG4tLVxcbm1tL3Ztc2Nhbi5jLTU0NzQtXFxubW0vdm1zY2FuLmM6NTQ3NTpcXHRpZiAoZW5hYmxlZCA9PSBscnVfZ2VuX2VuYWJsZWQoKSlcXG5tbS92bXNjYW4uYy01NDc2LVxcdFxcdGdvdG8gdW5sb2NrO1xcbi0tXFxubW0vdm1zY2FuLmM9NTU2Mj1zdGF0aWMgc3NpemVfdCBlbmFibGVkX3N0b3JlKHN0cnVjdCBrb2JqZWN0ICprb2JqLCBzdHJ1Y3Qga29ial9hdHRyaWJ1dGUgKmF0dHIsXFxuLS1cXG5tbS92bXNjYW4uYy01NTg4LVxcbm1tL3Ztc2Nhbi5jOjU1ODk6c3RhdGljIHN0cnVjdCBrb2JqX2F0dHJpYnV0ZSBscnVfZ2VuX2VuYWJsZWRfYXR0ciA9IF9fQVRUUl9SVyhlbmFibGVkKTtcXG5tbS92bXNjYW4uYy01NTkwLVxcbm1tL3Ztc2Nhbi5jPTU1OTE9c3RhdGljIHN0cnVjdCBhdHRyaWJ1dGUgKmxydV9nZW5fYXR0cnNbXSA9IHtcXG5tbS92bXNjYW4uYy01NTkyLVxcdFxcdTAwMjZscnVfZ2VuX21pbl90dGxfYXR0ci5hdHRyLFxcbm1tL3Ztc2Nhbi5jOjU1OTM6XFx0XFx1MDAyNmxydV9nZW5fZW5hYmxlZF9hdHRyLmF0dHIsXFxubW0vdm1zY2FuLmMtNTU5NC1cXHROVUxMXFxuLS1cXG5tbS92bXNjYW4uYz01OTc3PXZvaWQgbHJ1X2dlbl9pbml0X2xydXZlYyhzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMpXFxuLS1cXG5tbS92bXNjYW4uYy01OTg0LVxcdGxydWdlbi1cXHUwMDNlbWF4X3NlcSA9IE1JTl9OUl9HRU5TICsgMTtcXG5tbS92bXNjYW4uYzo1OTg1OlxcdGxydWdlbi1cXHUwMDNlZW5hYmxlZCA9IGxydV9nZW5fZW5hYmxlZCgpO1xcbm1tL3Ztc2Nhbi5jLTU5ODYtXFxuLS1cXG5tbS92bXNjYW4uYz02MDc1PXN0YXRpYyB2b2lkIHNocmlua19scnV2ZWMoc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYylcXG4tLVxcbm1tL3Ztc2Nhbi5jLTYwODUtXFxubW0vdm1zY2FuLmM6NjA4NjpcXHRpZiAoKGxydV9nZW5fZW5hYmxlZCgpIHx8IGxydV9nZW5fc3dpdGNoaW5nKCkpIFxcdTAwMjZcXHUwMDI2ICFyb290X3JlY2xhaW0oc2MpKSB7XFxubW0vdm1zY2FuLmMtNjA4Ny1cXHRcXHRscnVfZ2VuX3Nocmlua19scnV2ZWMobHJ1dmVjLCBzYyk7XFxuLS1cXG5tbS92bXNjYW4uYz02MzQ1PXN0YXRpYyB2b2lkIHNocmlua19ub2RlKHBnX2RhdGFfdCAqcGdkYXQsIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjKVxcbi0tXFxubW0vdm1zY2FuLmMtNjM1MC1cXG5tbS92bXNjYW4uYzo2MzUxOlxcdGlmICgobHJ1X2dlbl9lbmFibGVkKCkgfHwgbHJ1X2dlbl9zd2l0Y2hpbmcoKSkgXFx1MDAyNlxcdTAwMjYgcm9vdF9yZWNsYWltKHNjKSkge1xcbm1tL3Ztc2Nhbi5jLTYzNTItXFx0XFx0bWVtc2V0KFxcdTAwMjZzYy1cXHUwMDNlbnIsIDAsIHNpemVvZihzYy1cXHUwMDNlbnIpKTtcXG4tLVxcbm1tL3Ztc2Nhbi5jPTY2MDI9c3RhdGljIHZvaWQgc25hcHNob3RfcmVmYXVsdHMoc3RydWN0IG1lbV9jZ3JvdXAgKnRhcmdldF9tZW1jZywgcGdfZGF0YV90ICpwZ2RhdClcXG4tLVxcbm1tL3Ztc2Nhbi5jLTY2MDYtXFxubW0vdm1zY2FuLmM6NjYwNzpcXHRpZiAobHJ1X2dlbl9lbmFibGVkKCkgXFx1MDAyNlxcdTAwMjYgIWxydV9nZW5fc3dpdGNoaW5nKCkpXFxubW0vdm1zY2FuLmMtNjYwOC1cXHRcXHRyZXR1cm47XFxuLS1cXG5tbS92bXNjYW4uYz02OTUxPXN0YXRpYyB2b2lkIGtzd2FwZF9hZ2Vfbm9kZShzdHJ1Y3QgcGdsaXN0X2RhdGEgKnBnZGF0LCBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYylcXG4tLVxcbm1tL3Ztc2Nhbi5jLTY5NTUtXFxubW0vdm1zY2FuLmM6Njk1NjpcXHRpZiAobHJ1X2dlbl9lbmFibGVkKCkgfHwgbHJ1X2dlbl9zd2l0Y2hpbmcoKSkge1xcbm1tL3Ztc2Nhbi5jLTY5NTctXFx0XFx0bHJ1X2dlbl9hZ2Vfbm9kZShwZ2RhdCwgc2MpO1xcbi0tXFxubW0vd29ya2luZ3NldC5jPTM5Mj12b2lkICp3b3JraW5nc2V0X2V2aWN0aW9uKHN0cnVjdCBmb2xpbyAqZm9saW8sIHN0cnVjdCBtZW1fY2dyb3VwICp0YXJnZXRfbWVtY2cpXFxuLS1cXG5tbS93b3JraW5nc2V0LmMtNDA0LVxcbm1tL3dvcmtpbmdzZXQuYzo0MDU6XFx0aWYgKGxydV9nZW5fZW5hYmxlZCgpKVxcbm1tL3dvcmtpbmdzZXQuYy00MDYtXFx0XFx0cmV0dXJuIGxydV9nZW5fZXZpY3Rpb24oZm9saW8pO1xcbi0tXFxubW0vd29ya2luZ3NldC5jPTQzMD1ib29sIHdvcmtpbmdzZXRfdGVzdF9yZWNlbnQodm9pZCAqc2hhZG93LCBib29sIGZpbGUsIGJvb2wgKndvcmtpbmdzZXQsXFxuLS1cXG5tbS93b3JraW5nc2V0LmMtNDQxLVxcbm1tL3dvcmtpbmdzZXQuYzo0NDI6XFx0aWYgKGxydV9nZW5fZW5hYmxlZCgpKSB7XFxubW0vd29ya2luZ3NldC5jLTQ0My1cXHRcXHRib29sIHJlY2VudDtcXG4tLVxcbm1tL3dvcmtpbmdzZXQuYz01NDg9dm9pZCB3b3JraW5nc2V0X3JlZmF1bHQoc3RydWN0IGZvbGlvICpmb2xpbywgdm9pZCAqc2hhZG93KVxcbi0tXFxubW0vd29ya2luZ3NldC5jLTU1Ny1cXG5tbS93b3JraW5nc2V0LmM6NTU4OlxcdGlmIChscnVfZ2VuX2VuYWJsZWQoKSkge1xcbm1tL3dvcmtpbmdzZXQuYy01NTktXFx0XFx0bHJ1X2dlbl9yZWZhdWx0KGZvbGlvLCBzaGFkb3cpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wN1QwNzoyNTo1Mi4zMTcyMDk3MzJaIiwiU2VxIjoyMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NDU3MDAwMzY3NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBbmFseXNpcyBvZiBNR0xSVSBDb25maWd1cmF0aW9uIGFuZCBGdXp6aW5nIFJlcXVpcmVtZW50cyoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgTUdMUlUgc2V0dXAgYW5kIG15IGluaXRpYWwgYXNzZXNzbWVudCBjb25maXJtcyB0aGF0IGBDT05GSUdfTFJVX0dFTmAgYW5kIGBDT05GSUdfTFJVX0dFTl9FTkFCTEVEYCBhcmUgdGhlIGtleSBjb25maWd1cmF0aW9ucyBoZXJlLiBgTFJVX0dFTl9FTkFCTEVEYCBpcyBwYXJ0aWN1bGFybHkgaW50ZXJlc3RpbmcgYmVjYXVzZSBpdCBzZWVtcyB0byBhY3RpdmF0ZSBNR0xSVSBieSBkZWZhdWx0LCBieXBhc3NpbmcgdGhlIG5lZWQgZm9yIHN5c2ZzIGludGVyYWN0aW9uLCB3aGljaCBpcyBzb21ldGhpbmcgSSBuZWVkIHRvIGtlZXAgaW4gbWluZC5cblxuTm93LCBsZXQncyBtYWtlIHN1cmUgZXZlcnl0aGluZyBjaGVja3Mgb3V0IGZvciB0aGUgZnV6emluZyBydW4uIExvb2tzIGxpa2UgaXQncyBmbGFnZ2VkIGFzIGBXb3J0aEZ1enppbmc6IHRydWVgLCBhbmQgdGhlIHByb3ZpZGVkIHJlYXNvbmluZyBzZWVtcyBwZXJmZWN0bHkgY29uY2lzZSBhbmQgbG9naWNhbC4gVGhlIGBGb2N1c1N5bWJvbHNgIGFyZSBzcG90IG9uIOKAkyBgZXZpY3RfZm9saW9zYCwgYHRyeV90b19zaHJpbmtfbHJ1dmVjYCwgYHJ1bl9ldmljdGlvbmAsIGFuZCBgbHJ1X2dlbl9zaHJpbmtfbHJ1dmVjYC4gVGhvc2UgYXJlIHRoZSBjb3JlIGZ1bmN0aW9ucyBkaXJlY3RseSBpbnZvbHZlZCBpbiBvciBjb250YWluaW5nIHRoZSBtb2RpZmllZCBsb2dpYyB3aXRoaW4gTUdMUlUncyBldmljdGlvbiBhbmQgcmVjbGFpbSBwYXRocywgc28gZnV6emluZyB0aGVtIGlzIGRlZmluaXRlbHkgdGhlIHJpZ2h0IGFwcHJvYWNoLlxuXG5JJ2xsIHF1aWNrbHkgZG8gYSBzYW5pdHkgY2hlY2sgb24gdGhlIGNvbmZpZ3MgYWdhaW4sIGp1c3QgdG8gYmUgYWJzb2x1dGVseSBjZXJ0YWluOiBcIkxSVV9HRU5cIiwgXCJMUlVfR0VOX0VOQUJMRURcIiDigJMgeWVwLCBhbGwgcHJlc2VudCBhbmQgYWNjb3VudGVkIGZvci4gQW5kIGEgZmluYWwgc2FuaXR5IGNoZWNrIG9uIHRob3NlIGZvY3VzIHN5bWJvbHM6IFwiZXZpY3RfZm9saW9zXCIsIFwidHJ5X3RvX3Nocmlua19scnV2ZWNcIiwgXCJydW5fZXZpY3Rpb25cIiwgXCJscnVfZ2VuX3Nocmlua19scnV2ZWNcIiAtLSBZZXAsIGFsbCBvZiB0aGVtLlxuXG5HaXZlbiBhbGwgb2YgdGhpcywgSSdtIGNvbmZpZGVudCBpbiB0aGUgc2V0dXAuIFRpbWUgdG8gcHJvY2VlZCBhbmQgY2FsbCBgc2V0LXJlc3VsdHNgLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNTE1NSwiT3V0cHV0VG9rZW5zIjoxNDAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNDMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDdUMDc6MjU6NTYuODg3MjE1Nzc2WiIsIlNlcSI6MjIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODc0MDQ4MzYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkxSVV9HRU5cIixcbiAgICBcIkxSVV9HRU5fRU5BQkxFRFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImV2aWN0X2ZvbGlvc1wiLFxuICAgIFwidHJ5X3RvX3Nocmlua19scnV2ZWNcIixcbiAgICBcInJ1bl9ldmljdGlvblwiLFxuICAgIFwibHJ1X2dlbl9zaHJpbmtfbHJ1dmVjXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgTXVsdGktR2VuIExSVSAoTUdMUlUpIHBhZ2UgcmVjbGFpbSBsb2dpYyBpbiBtbS92bXNjYW4uYywgZW5zdXJpbmcgZm9saW8gTFJVIHJlZmVyZW5jZXMgYXJlIHVuY29uZGl0aW9uYWxseSByZXNldCB3aGVuIGZvbGlvcyBhcmUgcHV0IGJhY2suIFRoaXMgdG91Y2hlcyBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IHBhZ2UgZXZpY3Rpb24gcGF0aHMgcmVhY2hhYmxlIGR1cmluZyBtZW1vcnkgcmVjbGFpbSB1bmRlciBNR0xSVS5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJMUlVfR0VOXCIsXG4gICAgXCJMUlVfR0VOX0VOQUJMRURcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJldmljdF9mb2xpb3NcIixcbiAgICBcInRyeV90b19zaHJpbmtfbHJ1dmVjXCIsXG4gICAgXCJydW5fZXZpY3Rpb25cIixcbiAgICBcImxydV9nZW5fc2hyaW5rX2xydXZlY1wiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIE11bHRpLUdlbiBMUlUgKE1HTFJVKSBwYWdlIHJlY2xhaW0gbG9naWMgaW4gbW0vdm1zY2FuLmMsIGVuc3VyaW5nIGZvbGlvIExSVSByZWZlcmVuY2VzIGFyZSB1bmNvbmRpdGlvbmFsbHkgcmVzZXQgd2hlbiBmb2xpb3MgYXJlIHB1dCBiYWNrLiBUaGlzIHRvdWNoZXMgY29yZSBtZW1vcnkgbWFuYWdlbWVudCBwYWdlIGV2aWN0aW9uIHBhdGhzIHJlYWNoYWJsZSBkdXJpbmcgbWVtb3J5IHJlY2xhaW0gdW5kZXIgTUdMUlUuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDA3OjI1OjU2Ljk3NDYyNjI4MloiLCJTZXEiOjIzLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6IklmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTMyNjQ4MDk5MjUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wN1QwNzoyNTo1Ni45NzUxNjc0NDJaIiwiU2VxIjoyNCwiTmVzdGluZyI6MiwiVHlwZSI6ImFnZW50IiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiY29yZSIsIkR1cmF0aW9uIjoxMzI2NDI2NDg5NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgcGFnZSByZWNsYWltIGxvZ2ljIGluIHRoZSBNdWx0aS1HZW4gTFJVIChNR0xSVSkgc3Vic3lzdGVtIChgbW0vdm1zY2FuLmNgKSwgc3BlY2lmaWNhbGx5IGluIGBldmljdF9mb2xpb3MoKWAuIEl0IG1vdmVzIGBmb2xpb19zZXRfbHJ1X3JlZnMoZm9saW8sIDApYCBvdXRzaWRlIG9mIGEgY29uZGl0aW9uYWwgY2hlY2sgc28gdGhhdCBMUlUgcmVmZXJlbmNlIGZsYWdzIGFyZSBjbGVhcmVkIHVuY29uZGl0aW9uYWxseSBmb3IgZm9saW9zIHJlbWFpbmluZyBvbiB0aGUgbGlzdC5cXG5cXG5UaGlzIGNoYW5nZSBwdXJlbHkgYWZmZWN0cyBmb2xpbyBtZXRhZGF0YS9mbGFncyBkdXJpbmcgTFJVIHBhZ2UgcmVjbGFpbS4gSXQgZG9lcyBub3QgaW50cm9kdWNlIG9yIG1vZGlmeTpcXG4xLiBEYXRhIHN0cnVjdHVyZXMgY29waWVkIHRvIHVzZXIgc3BhY2Ugb3Iga2VybmVsIGluZm8tbGVha3MuXFxuMi4gVW5pbml0aWFsaXplZCB2YXJpYWJsZXMsIHN0cnVjdCBmaWVsZHMsIG9yIG1lbW9yeSBhbGxvY2F0aW9ucy5cXG4zLiBMZW5ndGhzIG9yIGJvdW5kcyBjaGVja3MgdGhhdCBjb3VsZCBleHBvc2UgdW5pbml0aWFsaXplZCBidWZmZXIgbWVtb3J5LlxcblxcbkJlY2F1c2UgdGhlcmUgYXJlIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzIG9yIGluZm8tbGVha3MsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3Qgd2FycmFudGVkLiBTdGFuZGFyZCBLQVNBTi9zYW5pdGl6ZXIgYnVpbGRzIGFyZSBzdWZmaWNpZW50LlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeVxuZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmRcbmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcilcbmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLlxuXG5DUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjpcbi0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZVxuICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU5cbiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUFxuICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLlxuLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCxcbiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLlxuXG5SdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLFxuTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy5cbkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFlcbnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzXG50aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLlxuXG5Mb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdFxudW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsXG5hIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXNcbnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nXG51bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2xcbmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSxcbmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6XG4xLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYlxuICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHNcbiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuXG4yLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzXG4gICBvciBzdHJ1Y3QgZmllbGRzLlxuMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkc1xuICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy5cbjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzXG4gICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuXG5cblNldCBOZWVkc0tNU0FOPWZhbHNlIElGOlxuLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlclxuICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHRcbiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLlxuLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZFxuICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuXG4tIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy5cblxuVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZVxuZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0XG5cbkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IGEzOGVlMDkxM2JmYTEyNDQ5Nzk4M2I4ZWNhNGE4NmI2MmM5NDY0ZDBcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgTW9uIFNlcCA3IDA3OjI1OjE5IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvbW0vdm1zY2FuLmMgYi9tbS92bXNjYW4uY1xuaW5kZXggNDBkM2YxYjQ4YTc0Yy4uNDJjMGEwOTkzOGFiMiAxMDA2NDRcbi0tLSBhL21tL3Ztc2Nhbi5jXG4rKysgYi9tbS92bXNjYW4uY1xuQEAgLTUwMjEsMTAgKzUwMjEsMTEgQEAgc3RhdGljIGludCBldmljdF9mb2xpb3ModW5zaWduZWQgbG9uZyBucl90b19zY2FuLCBzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsXG4gXHRcdH1cbiBcbiBcdFx0LyogZG9uJ3QgYWRkIHJlamVjdGVkIGZvbGlvcyB0byB0aGUgb2xkZXN0IGdlbmVyYXRpb24gKi9cbi1cdFx0aWYgKGxydV9nZW5fZm9saW9fc2VxKGxydXZlYywgZm9saW8sIGZhbHNlKSA9PSBtaW5fc2VxW3R5cGVdKSB7XG4tXHRcdFx0Zm9saW9fc2V0X2xydV9yZWZzKGZvbGlvLCAwKTtcbitcdFx0aWYgKGxydV9nZW5fZm9saW9fc2VxKGxydXZlYywgZm9saW8sIGZhbHNlKSA9PSBtaW5fc2VxW3R5cGVdKVxuIFx0XHRcdGZvbGlvX3NldF9hY3RpdmUoZm9saW8pO1xuLVx0XHR9XG4rXG4rXHRcdC8qIFNlZSB0aGUgY29tbWVudHMgb24gTFJVX1JFRlNfRkxBR1MgKi9cbitcdFx0Zm9saW9fc2V0X2xydV9yZWZzKGZvbGlvLCAwKTtcbiBcdH1cbiBcbiBcdG1vdmVfZm9saW9zX3RvX2xydShcdTAwMjZsaXN0KTtcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDA3OjI1OjU2Ljk3NTE2ODU0MloiLCJTZXEiOjI1LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjozOTAwNzg1NDIyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIG15IG93bjpcblxuKipBbmFseXppbmcgYSBQb3RlbnRpYWwgTWVtb3J5IE1hbmFnZW1lbnQgUGF0Y2gqKlxuXG5BbHJpZ2h0LCB0aW1lIHRvIGRpdmUgaW4uIEkgbmVlZCB0byBnZXQgYSBoYW5kbGUgb24gdGhpcyBwYXRjaCwgYW5kIHRoZSBjb250ZXh0IGl0J3Mgd29ya2luZyB3aXRoaW4uIEknbSB0aGlua2luZyB0aGUgbG9naWNhbCBwbGFjZSB0byBzdGFydCBpcyByaWdodCB0aGVyZSBpbiBgbW0vdm1zY2FuLmNgLiBMZXQgbWUgcXVpY2tseSBwdWxsIHVwIHRoYXQgZmlsZSDigJMgdGhlIHVzdWFsIGByZWFkLWZpbGVgIGNvbW1hbmQgc2hvdWxkIGRvIHRoZSB0cmljay4gTm93LCBsZXQncyB6ZXJvIGluIG9uIHJvdWdobHkgbGluZSA1MDIxLiBUaGF0J3MgdXN1YWxseSBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQgdG8gZ2V0IGEgZmVlbCBmb3Igd2hhdCdzIGhhcHBlbmluZyBpbiB0aGUgdmljaW5pdHkgb2YgdGhlIGNoYW5nZS4gVGhpcyBzaG91bGQgZ2l2ZSBtZSB0aGUgY29yZSBpZGVhIG9mIHdoYXQgaXMgaGFwcGVuaW5nLiBPbmNlIEkgaGF2ZSB0aGUgY29yZSBjb25jZXB0LCBJJ2xsIGJyYW5jaCBvdXQgYXMgcmVxdWlyZWQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIxNTksIk91dHB1dFRva2VucyI6MzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0NywiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDA3OjI2OjAwLjg3NTk1NjA2NFoiLCJTZXEiOjI2LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NTA3NDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibW0vdm1zY2FuLmNcIixcbiAgXCJGaXJzdExpbmVcIjogNTAwMCxcbiAgXCJMaW5lQ291bnRcIjogNDVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiNTAwMDpcXHRcXHRzYy1cXHUwMDNlbnJfcmVjbGFpbWVkICs9IHJlY2xhaW1lZDtcXG41MDAxOlxcdFxcdHRvdGFsX3JlY2xhaW1lZCArPSByZWNsYWltZWQ7XFxuNTAwMjpcXHRcXHQvKiBSZXRyeSBwYXNzIGlzIG9ubHkgbWVhbnQgZm9yIGNsZWFuIGZvbGlvcyB3aXRob3V0IG5ldyBpc29sYXRpb24gKi9cXG41MDAzOlxcdFxcdGlmIChpc29sYXRlZClcXG41MDA0OlxcdFxcdFxcdGhhbmRsZV9yZWNsYWltX3dyaXRlYmFjayhpc29sYXRlZCwgcGdkYXQsIHNjLCBcXHUwMDI2c3RhdCk7XFxuNTAwNTpcXHRcXHR0cmFjZV9tbV92bXNjYW5fbHJ1X3Nocmlua19pbmFjdGl2ZShwZ2RhdC1cXHUwMDNlbm9kZV9pZCxcXG41MDA2OlxcdFxcdFxcdFxcdHR5cGVfc2Nhbm5lZCwgcmVjbGFpbWVkLCBcXHUwMDI2c3RhdCwgc2MtXFx1MDAzZXByaW9yaXR5LFxcbjUwMDc6XFx0XFx0XFx0XFx0dHlwZSA/IExSVV9JTkFDVElWRV9GSUxFIDogTFJVX0lOQUNUSVZFX0FOT04pO1xcbjUwMDg6XFx0XFxuNTAwOTpcXHRcXHRsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmVfcmV2ZXJzZShmb2xpbywgbmV4dCwgXFx1MDAyNmxpc3QsIGxydSkge1xcbjUwMTA6XFx0XFx0XFx0REVGSU5FX01JTl9TRVEobHJ1dmVjKTtcXG41MDExOlxcdFxcbjUwMTI6XFx0XFx0XFx0LyogbW92ZV9mb2xpb3NfdG9fbHJ1KCkgY3VsbHMgdW5ldmljdGFibGUgZm9saW9zIHZpYSBmb2xpb19wdXRiYWNrX2xydSgpICovXFxuNTAxMzpcXHRcXHRcXHRpZiAoIWZvbGlvX2V2aWN0YWJsZShmb2xpbykpXFxuNTAxNDpcXHRcXHRcXHRcXHRjb250aW51ZTtcXG41MDE1OlxcdFxcbjUwMTY6XFx0XFx0XFx0LyogcmV0cnkgZm9saW9zIHRoYXQgbWF5IGhhdmUgbWlzc2VkIGZvbGlvX3JvdGF0ZV9yZWNsYWltYWJsZSgpICovXFxuNTAxNzpcXHRcXHRcXHRpZiAoIXNraXBfcmV0cnkgXFx1MDAyNlxcdTAwMjYgIWZvbGlvX3Rlc3RfYWN0aXZlKGZvbGlvKSBcXHUwMDI2XFx1MDAyNiAhZm9saW9fbWFwcGVkKGZvbGlvKSBcXHUwMDI2XFx1MDAyNlxcbjUwMTg6XFx0XFx0XFx0ICAgICFmb2xpb190ZXN0X2RpcnR5KGZvbGlvKSBcXHUwMDI2XFx1MDAyNiAhZm9saW9fdGVzdF93cml0ZWJhY2soZm9saW8pKSB7XFxuNTAxOTpcXHRcXHRcXHRcXHRsaXN0X21vdmUoXFx1MDAyNmZvbGlvLVxcdTAwM2VscnUsIFxcdTAwMjZjbGVhbik7XFxuNTAyMDpcXHRcXHRcXHRcXHRjb250aW51ZTtcXG41MDIxOlxcdFxcdFxcdH1cXG41MDIyOlxcdFxcbjUwMjM6XFx0XFx0XFx0LyogZG9uJ3QgYWRkIHJlamVjdGVkIGZvbGlvcyB0byB0aGUgb2xkZXN0IGdlbmVyYXRpb24gKi9cXG41MDI0OlxcdFxcdFxcdGlmIChscnVfZ2VuX2ZvbGlvX3NlcShscnV2ZWMsIGZvbGlvLCBmYWxzZSkgPT0gbWluX3NlcVt0eXBlXSlcXG41MDI1OlxcdFxcdFxcdFxcdGZvbGlvX3NldF9hY3RpdmUoZm9saW8pO1xcbjUwMjY6XFx0XFxuNTAyNzpcXHRcXHRcXHQvKiBTZWUgdGhlIGNvbW1lbnRzIG9uIExSVV9SRUZTX0ZMQUdTICovXFxuNTAyODpcXHRcXHRcXHRmb2xpb19zZXRfbHJ1X3JlZnMoZm9saW8sIDApO1xcbjUwMjk6XFx0XFx0fVxcbjUwMzA6XFx0XFxuNTAzMTpcXHRcXHRtb3ZlX2ZvbGlvc190b19scnUoXFx1MDAyNmxpc3QpO1xcbjUwMzI6XFx0XFxuNTAzMzpcXHRcXHR3YWxrID0gY3VycmVudC1cXHUwMDNlcmVjbGFpbV9zdGF0ZS1cXHUwMDNlbW1fd2FsaztcXG41MDM0OlxcdFxcdGlmICh3YWxrIFxcdTAwMjZcXHUwMDI2IHdhbGstXFx1MDAzZWJhdGNoZWQpIHtcXG41MDM1OlxcdFxcdFxcdHdhbGstXFx1MDAzZWxydXZlYyA9IGxydXZlYztcXG41MDM2OlxcdFxcdFxcdHJlc2V0X2JhdGNoX3NpemUod2Fsayk7XFxuNTAzNzpcXHRcXHR9XFxuNTAzODpcXHRcXG41MDM5OlxcdFxcdG1vZF9scnV2ZWNfc3RhdGUobHJ1dmVjLCBQR0RFTU9URV9LU1dBUEQgKyByZWNsYWltZXJfb2Zmc2V0KHNjKSxcXG41MDQwOlxcdFxcdFxcdFxcdFxcdFxcdHN0YXQubnJfZGVtb3RlZCk7XFxuNTA0MTpcXHRcXG41MDQyOlxcdFxcdGl0ZW0gPSBQR1NURUFMX0tTV0FQRCArIHJlY2xhaW1lcl9vZmZzZXQoc2MpO1xcbjUwNDM6XFx0XFx0bW9kX2xydXZlY19zdGF0ZShscnV2ZWMsIGl0ZW0sIHJlY2xhaW1lZCk7XFxuNTA0NDpcXHRcXHRtb2RfbHJ1dmVjX3N0YXRlKGxydXZlYywgUEdTVEVBTF9BTk9OICsgdHlwZSwgcmVjbGFpbWVkKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDdUMDc6MjY6MDAuODc2NDA4NTg0WiIsIlNlcSI6MjcsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjI3NTQ4MTcxNjcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBFdmljdCBGb2xpb3MgUGF0Y2gqKlxuXG5BbHJpZ2h0LCBsZXQncyBkaXZlIGludG8gdGhpcyBwYXRjaC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGNoYW5nZSBpbiBgZXZpY3RfZm9saW9zYC4gT2theSwgcHJldmlvdXNseSwgdGhlIGNvZGUgaW5jbHVkZWQgYSBjaGVjayB0byBwcmV2ZW50IHJlamVjdGVkIGZvbGlvcyBmcm9tIGJlaW5nIGFkZGVkIHRvIHRoZSBvbGRlc3QgZ2VuZXJhdGlvbi4gSWYgYSBmb2xpbydzIHNlcXVlbmNlIG1hdGNoZWQgdGhlIG1pbmltdW0gc2VxdWVuY2UsIGl0IHdhcyBiZWluZyB6ZXJvZWQgb3V0IHJlZ2FyZGluZyByZWZlcmVuY2VzICphbmQqIHNldCB0byBhY3RpdmUuIFRoZSBjaGFuZ2UgYXBwZWFycyB0byBoYXZlIHJlbW92ZWQgdGhlIGBmb2xpb19zZXRfbHJ1X3JlZnMoZm9saW8sIDApYCBjYWxsIGZyb20gd2l0aGluIHRoZSBgaWZgIGJsb2NrLCBpbnN0ZWFkIG1vdmluZyBpdCAqYWZ0ZXIqIHRoZSBgaWZgIHN0YXRlbWVudC4gQW5kIHRoZSBmb2xpbyBpcyBub3cgKm9ubHkqIHNldCB0byBhY3RpdmUgaW5zaWRlIHRoZSBgaWZgIHN0YXRlbWVudC5cblxuSSBuZWVkIHRvIHVuZGVyc3RhbmQgKndoeSogdGhpcyBjaGFuZ2Ugd2FzIG1hZGUuIEl0IHNlZW1zIGxpa2UgdGhlIGludGVudGlvbiBpcyB0byBtb2RpZnkgaG93IGxydSByZWZlcmVuY2VzIGFyZSBoYW5kbGVkIHNwZWNpZmljYWxseSBjb25jZXJuaW5nIHJlamVjdGVkIGZvbGlvcy4gVGhlIGNvbW1lbnQgb24gYExSVV9SRUZTX0ZMQUdTYCBpcyBhIGNsdWUuIEknbGwgbmVlZCB0byBjaGVjayB0aGUgZGVmaW5pdGlvbiBvZiBgZm9saW9fc2V0X2xydV9yZWZzYCBhbmQgdGhlIGBMUlVfUkVGU19GTEFHU2AgY29tbWVudC4gTGV0J3Mgc2VlLi4uIGEgcXVpY2sgZ3JlcCBmb3IgYGZvbGlvX3NldF9scnVfcmVmc2Agc2hvdWxkIGdpdmUgbWUgdGhlIHJlbGV2YW50IGluZm9ybWF0aW9uLiBJdCBzZWVtcyBsaWtlIHRoaXMgbW9kaWZpY2F0aW9uIGlzIGRlc2lnbmVkIHRvIHByZXZlbnQgYSByYWNlIGNvbmRpdGlvbiBvciBzb21lIHVuZXhwZWN0ZWQgYmVoYXZpb3IgcmVsYXRlZCB0byBob3cgdGhlIExSVSByZWZlcmVuY2VzIGFyZSBtYW5hZ2VkIGluIHRoaXMgc3BlY2lmaWMgc2NlbmFyaW8gd2l0aCByZWplY3RlZCBmb2xpb3MuIEkgbmVlZCB0byB0cmFjZSB0aGlzIGZ1cnRoZXIgdG8gYmUgY2VydGFpbiwgYnV0IHRoaXMgaW5pdGlhbCBhbmFseXNpcyBnaXZlcyBtZSBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjMyMDcsIk91dHB1dFRva2VucyI6MjIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMzMsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wN1QwNzoyNjowMy42MzEyMjk4NDFaIiwiU2VxIjoyOCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIwMzk5NjMwNjIsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZm9saW9fc2V0X2xydV9yZWZzXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImluY2x1ZGUvbGludXgvbW1faW5saW5lLmg9MjI1PXN0YXRpYyBpbmxpbmUgaW50IGZvbGlvX2xydV9yZWZzKGNvbnN0IHN0cnVjdCBmb2xpbyAqZm9saW8pXFxuLS1cXG5pbmNsdWRlL2xpbnV4L21tX2lubGluZS5oLTIyOS1cXG5pbmNsdWRlL2xpbnV4L21tX2lubGluZS5oOjIzMDpzdGF0aWMgaW5saW5lIHZvaWQgZm9saW9fc2V0X2xydV9yZWZzKHN0cnVjdCBmb2xpbyAqZm9saW8sIHVuc2lnbmVkIGludCByZWZzKVxcbmluY2x1ZGUvbGludXgvbW1faW5saW5lLmgtMjMxLXtcXG4tLVxcbmluY2x1ZGUvbGludXgvbW1faW5saW5lLmg9Mzk2PXN0YXRpYyBpbmxpbmUgdm9pZCBmb2xpb19taWdyYXRlX2xydV9yZWZzKHN0cnVjdCBmb2xpbyAqbmV3LCBjb25zdCBzdHJ1Y3QgZm9saW8gKm9sZClcXG4tLVxcbmluY2x1ZGUvbGludXgvbW1faW5saW5lLmgtMzk4LVxcdEJVSUxEX0JVR19PTihMUlVfUkVGU19NQVNLIFxcdTAwMjYgQklUKFBHX3JlZmVyZW5jZWQpKTtcXG5pbmNsdWRlL2xpbnV4L21tX2lubGluZS5oOjM5OTpcXHRmb2xpb19zZXRfbHJ1X3JlZnMobmV3LCBmb2xpb19scnVfcmVmcyhvbGQpKTtcXG5pbmNsdWRlL2xpbnV4L21tX2lubGluZS5oLTQwMC19XFxuLS1cXG5tbS9mb2xpby5jPTM1NT1zdGF0aWMgdm9pZCBscnVfZ2VuX2luY19yZWZzKHN0cnVjdCBmb2xpbyAqZm9saW8pXFxuLS1cXG5tbS9mb2xpby5jLTM2NC1cXHRpZiAoIWZvbGlvX2xydV9yZWZzKGZvbGlvKSkge1xcbm1tL2ZvbGlvLmM6MzY1OlxcdFxcdGZvbGlvX3NldF9scnVfcmVmcyhmb2xpbywgMSk7XFxubW0vZm9saW8uYy0zNjYtXFx0XFx0cmV0dXJuO1xcbi0tXFxubW0vZm9saW8uYz0zODE9c3RhdGljIGJvb2wgbHJ1X2dlbl9jbGVhcl9yZWZzKHN0cnVjdCBmb2xpbyAqZm9saW8pXFxuLS1cXG5tbS9mb2xpby5jLTM4OS1cXG5tbS9mb2xpby5jOjM5MDpcXHRmb2xpb19zZXRfbHJ1X3JlZnMoZm9saW8sIDApO1xcbm1tL2ZvbGlvLmMtMzkxLVxcdGZvbGlvX2NsZWFyX3dvcmtpbmdzZXQoZm9saW8pO1xcbi0tXFxubW0vdm1zY2FuLmM9ODYwPXN0YXRpYyBib29sIGxydV9nZW5fc2V0X3JlZnMoc3RydWN0IGZvbGlvICpmb2xpbywgY29uc3Qgdm1hX2ZsYWdzX3QgKnZtYV9mbGFncylcXG4tLVxcbm1tL3Ztc2Nhbi5jLTg2Ni1cXHRcXHRcXHRmb2xpb19zZXRfd29ya2luZ3NldChmb2xpbyk7XFxubW0vdm1zY2FuLmM6ODY3OlxcdFxcdFxcdGZvbGlvX3NldF9scnVfcmVmcyhmb2xpbywgMCk7XFxubW0vdm1zY2FuLmMtODY4LVxcdFxcdFxcdHJldHVybiB0cnVlO1xcbi0tXFxubW0vdm1zY2FuLmMtODcwLVxcbm1tL3Ztc2Nhbi5jOjg3MTpcXHRcXHRmb2xpb19zZXRfbHJ1X3JlZnMoZm9saW8sIDEpO1xcbm1tL3Ztc2Nhbi5jLTg3Mi1cXHRcXHRyZXR1cm4gZmFsc2U7XFxuLS1cXG5tbS92bXNjYW4uYy04NzctXFx0XFx0Zm9saW9fc2V0X3dvcmtpbmdzZXQoZm9saW8pO1xcbm1tL3Ztc2Nhbi5jOjg3ODpcXHRcXHRmb2xpb19zZXRfbHJ1X3JlZnMoZm9saW8sIDApO1xcbm1tL3Ztc2Nhbi5jLTg3OS1cXHR9IGVsc2Uge1xcbi0tXFxubW0vdm1zY2FuLmM9MzI5Nz1zdGF0aWMgaW50IGZvbGlvX3VwZGF0ZV9nZW4oc3RydWN0IGZvbGlvICpmb2xpbywgaW50IG5ld19nZW4sIGludCAqdHlwZSxcXG4tLVxcbm1tL3Ztc2Nhbi5jLTMzMDktXFx0ICAgICFpc19leGVjX2ZpbGVfZm9saW8oZm9saW8sIHZtYV9mbGFncykpIHtcXG5tbS92bXNjYW4uYzozMzEwOlxcdFxcdGZvbGlvX3NldF9scnVfcmVmcyhmb2xpbywgMSk7XFxubW0vdm1zY2FuLmMtMzMxMS1cXHRcXHRyZXR1cm4gLTE7XFxuLS1cXG5tbS92bXNjYW4uYz00Nzc0PXN0YXRpYyBib29sIGlzb2xhdGVfZm9saW8oc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYylcXG4tLVxcbm1tL3Ztc2Nhbi5jLTQ3ODktXFx0aWYgKCFmb2xpb190ZXN0X3JlZmVyZW5jZWQoZm9saW8pKVxcbm1tL3Ztc2Nhbi5jOjQ3OTA6XFx0XFx0Zm9saW9fc2V0X2xydV9yZWZzKGZvbGlvLCAwKTtcXG5tbS92bXNjYW4uYy00NzkxLVxcbi0tXFxubW0vdm1zY2FuLmM9NDk2ND1zdGF0aWMgaW50IGV2aWN0X2ZvbGlvcyh1bnNpZ25lZCBsb25nIG5yX3RvX3NjYW4sIHN0cnVjdCBscnV2ZWMgKmxydXZlYyxcXG4tLVxcbm1tL3Ztc2Nhbi5jLTUwMjctXFx0XFx0LyogU2VlIHRoZSBjb21tZW50cyBvbiBMUlVfUkVGU19GTEFHUyAqL1xcbm1tL3Ztc2Nhbi5jOjUwMjg6XFx0XFx0Zm9saW9fc2V0X2xydV9yZWZzKGZvbGlvLCAwKTtcXG5tbS92bXNjYW4uYy01MDI5LVxcdH1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDdUMDc6MjY6MDUuNjcxMTk3ODIzWiIsIlNlcSI6MjksIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjQ1NjgyMTc5NzQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqS01TQU4gQ2hlY2s6IEFsbCBDbGVhcioqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gTXkgZm9jdXMgaGVyZSBpcyBvbiBlbnN1cmluZyB0aGlzIGBmb2xpb19zZXRfbHJ1X3JlZnMoZm9saW8sIDApYCBjaGFuZ2UgaXMgS01TQU4tc2FmZSwgc3BlY2lmaWNhbGx5IGluIHRoZSBjb250ZXh0IG9mIG11bHRpLWdlbiBMUlUgZXZpY3Rpb24uIEl0J3MgZXNzZW50aWFsbHkgYWJvdXQgY2xlYXJpbmcgTFJVIHJlZmVyZW5jZSBiaXRzIHdpdGhpbiB0aGUgZm9saW8gZmxhZ3MgZm9yIGZvbGlvcyBvbiB0aGUgcmVjbGFpbSBsaXN0LCByaWdodD9cblxuRmlyc3QsIHRoZSBrZXkgcG9pbnQgaXMgdGhhdCBgZm9saW9gIGlzIGFscmVhZHkgYSB2YWxpZCBgc3RydWN0IGZvbGlvICpgIG9uIHRoZSByZWNsYWltIGxpc3QuIGBmb2xpb19zZXRfbHJ1X3JlZnNgIGlzIGp1c3QgbWFuaXB1bGF0aW5nICpleGlzdGluZyogYml0cyB3aXRoaW4gdGhlIGZvbGlvIGZsYWdzLiBObyBuZXcgbWVtb3J5IGlzIGJlaW5nIGFsbG9jYXRlZCwgbm8gZGF0YSBpcyBiZWluZyBjb3BpZWQgdG8gdXNlcnNwYWNlLCBhbmQgdGhlcmUncyBhYnNvbHV0ZWx5IG5vIHJpc2sgb2YgZW5jb3VudGVyaW5nIHVuaW5pdGlhbGl6ZWQgc3RhY2sgb3IgaGVhcCB2YXJpYWJsZXMsIHN0cnVjdCBmaWVsZHMsIG9yIHJlYWRzLlxuXG5Ob3csIGxldCdzIGNvbnNpZGVyIHdoYXQgS01TQU4gYW5kIEtBU0FOIHdvdWxkIG5vcm1hbGx5IGNhdGNoLiBLQVNBTiBpcyBhbGwgYWJvdXQgbWVtb3J5IHNhZmV0eSDigJMgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIHVzZS1hZnRlci1mcmVlLCBldGMuIEtNU0FOIGRlYWxzIHdpdGggdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMgdGhhdCBjb3VsZCBwb3RlbnRpYWxseSBsZWFrIGluZm9ybWF0aW9uIHRvIHVzZXJzcGFjZS4gU2luY2UgdGhpcyBpcyBwdXJlbHkgc3RhdGUgbWFuYWdlbWVudCBmb3IgTFJVIHBhZ2UgcmVjbGFpbSwganVzdCByZXNldHRpbmcgdGhvc2UgcmVmZXJlbmNlcyBvbiBmb2xpb3MgdW5jb25kaXRpb25hbGx5LCB0aGVyZSdzIHplcm8gY2hhbmNlIG9mIGludHJvZHVjaW5nIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGFjY2Vzcy5cblxuSSd2ZSBnb25lIHRocm91Z2ggdGhlIGNyaXRlcmlhLiBEb2VzIHRoaXMgcGF0Y2g6XG5cbjEuICBJbnRyb2R1Y2UvbW9kaWZ5IGtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlcnNwYWNlIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzIGNvdWxkIGJlIGV4cG9zZWQ/IE5vcGUuXG4yLiAgSGF2ZSBjb25kaXRpb25hbCBsb2dpYyBkZXBlbmRpbmcgb24gdW5pbml0aWFsaXplZCB2YXJpYWJsZXM/IEFic29sdXRlbHkgbm90LlxuMy4gIEFsbG9jYXRlIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzIGNvdWxkIGJlIHJlYWQ/IE5vIHdheS5cbjQuICBBZmZlY3QgYm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgdGhhdCBjb3VsZCBleHBvc2UgdW5pbml0aWFsaXplZCBkYXRhPyBOb3BlLlxuXG5BbmQgY29udmVyc2VseSwgaXQgZml0cyB0aGUgY3JpdGVyaWEgZm9yIGBOZWVkc0tNU0FOPWZhbHNlYDogaXQncyBwcmltYXJpbHkgYWJvdXQgcGFnZSByZWNsYWltIHN0YXRlIG1hbmFnZW1lbnQsIHdoaWNoIG1lYW5zIHdlIHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKGFsbCBvZiB3aGljaCBhcmUgS0FTQU4ncyBkb21haW4pLiBBbGwgc3RydWN0dXJlcyBhcmUgaW5pdGlhbGl6ZWQgYmVmb3JlIHVzZSBhbmQgdGhlcmUncyBubyByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlLiBUaGlzIGlzIGNvbXBsZXRlbHkgY2xlYXIsIGNvbmNpc2UsIGFuZCB1bmFtYmlndW91cy5cblxuT2theSwgSSdtIGNvbmZpZGVudC4gTGV0J3MgY2FsbCBgc2V0LXJlc3VsdHNgLlxuXG5cbiIsIklucHV0VG9rZW5zIjo0NzY1LCJPdXRwdXRUb2tlbnMiOjIwNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjU1NCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wN1QwNzoyNjoxMC4yMzk0MTc0ODdaIiwiU2VxIjozMCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMzg2MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHBhZ2UgcmVjbGFpbSBsb2dpYyBpbiB0aGUgTXVsdGktR2VuIExSVSAoTUdMUlUpIHN1YnN5c3RlbSAoYG1tL3Ztc2Nhbi5jYCksIHNwZWNpZmljYWxseSBpbiBgZXZpY3RfZm9saW9zKClgLiBJdCBtb3ZlcyBgZm9saW9fc2V0X2xydV9yZWZzKGZvbGlvLCAwKWAgb3V0c2lkZSBvZiBhIGNvbmRpdGlvbmFsIGNoZWNrIHNvIHRoYXQgTFJVIHJlZmVyZW5jZSBmbGFncyBhcmUgY2xlYXJlZCB1bmNvbmRpdGlvbmFsbHkgZm9yIGZvbGlvcyByZW1haW5pbmcgb24gdGhlIGxpc3QuXFxuXFxuVGhpcyBjaGFuZ2UgcHVyZWx5IGFmZmVjdHMgZm9saW8gbWV0YWRhdGEvZmxhZ3MgZHVyaW5nIExSVSBwYWdlIHJlY2xhaW0uIEl0IGRvZXMgbm90IGludHJvZHVjZSBvciBtb2RpZnk6XFxuMS4gRGF0YSBzdHJ1Y3R1cmVzIGNvcGllZCB0byB1c2VyIHNwYWNlIG9yIGtlcm5lbCBpbmZvLWxlYWtzLlxcbjIuIFVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzLCBzdHJ1Y3QgZmllbGRzLCBvciBtZW1vcnkgYWxsb2NhdGlvbnMuXFxuMy4gTGVuZ3RocyBvciBib3VuZHMgY2hlY2tzIHRoYXQgY291bGQgZXhwb3NlIHVuaW5pdGlhbGl6ZWQgYnVmZmVyIG1lbW9yeS5cXG5cXG5CZWNhdXNlIHRoZXJlIGFyZSBubyB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcyBvciBpbmZvLWxlYWtzLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZC4gU3RhbmRhcmQgS0FTQU4vc2FuaXRpemVyIGJ1aWxkcyBhcmUgc3VmZmljaWVudC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBwYWdlIHJlY2xhaW0gbG9naWMgaW4gdGhlIE11bHRpLUdlbiBMUlUgKE1HTFJVKSBzdWJzeXN0ZW0gKGBtbS92bXNjYW4uY2ApLCBzcGVjaWZpY2FsbHkgaW4gYGV2aWN0X2ZvbGlvcygpYC4gSXQgbW92ZXMgYGZvbGlvX3NldF9scnVfcmVmcyhmb2xpbywgMClgIG91dHNpZGUgb2YgYSBjb25kaXRpb25hbCBjaGVjayBzbyB0aGF0IExSVSByZWZlcmVuY2UgZmxhZ3MgYXJlIGNsZWFyZWQgdW5jb25kaXRpb25hbGx5IGZvciBmb2xpb3MgcmVtYWluaW5nIG9uIHRoZSBsaXN0LlxcblxcblRoaXMgY2hhbmdlIHB1cmVseSBhZmZlY3RzIGZvbGlvIG1ldGFkYXRhL2ZsYWdzIGR1cmluZyBMUlUgcGFnZSByZWNsYWltLiBJdCBkb2VzIG5vdCBpbnRyb2R1Y2Ugb3IgbW9kaWZ5OlxcbjEuIERhdGEgc3RydWN0dXJlcyBjb3BpZWQgdG8gdXNlciBzcGFjZSBvciBrZXJuZWwgaW5mby1sZWFrcy5cXG4yLiBVbmluaXRpYWxpemVkIHZhcmlhYmxlcywgc3RydWN0IGZpZWxkcywgb3IgbWVtb3J5IGFsbG9jYXRpb25zLlxcbjMuIExlbmd0aHMgb3IgYm91bmRzIGNoZWNrcyB0aGF0IGNvdWxkIGV4cG9zZSB1bmluaXRpYWxpemVkIGJ1ZmZlciBtZW1vcnkuXFxuXFxuQmVjYXVzZSB0aGVyZSBhcmUgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3Mgb3IgaW5mby1sZWFrcywgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCB3YXJyYW50ZWQuIFN0YW5kYXJkIEtBU0FOL3Nhbml0aXplciBidWlsZHMgYXJlIHN1ZmZpY2llbnQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLmR1cmF0aW9uIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnTGxtVG9rZW4gPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS50b2tlbnMgLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdUb29sRHVyID0gc3RhdHMudG9vbC5jb3VudCA+IDAgPyAoc3RhdHMudG9vbC5kdXJhdGlvbiAvIHN0YXRzLnRvb2wuY291bnQpLnRvRml4ZWQoMikgOiAwOwoKCQkJY29uc3QgbGxtU3VtYXJ5Q2VsbHMgPSBbc3RhdHMubGxtLmNvdW50LCBzdGF0cy5sbG0udG9rZW5zLCBhdmdMbG1Ub2tlbiwgc3RhdHMubGxtLmR1cmF0aW9uLCBhdmdMbG1EdXJdOwoJCQljb25zdCB0b29sU3VtbWFyeUNlbGxzID0gW3N0YXRzLnRvb2wuY291bnQsIHN0YXRzLnRvb2wuZHVyYXRpb24sIGF2Z1Rvb2xEdXJdOwoKCQkJY29uc3QgbGxtU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbGxtX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQlsbG1TdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgbGxtVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQlsbG1TdW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJbGxtVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJbGxtU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQobGxtVHIpOwoKCQkJY29uc3QgdG9vbFN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rvb2xfc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgdG9vbFRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJdG9vbFN1bW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJdG9vbFRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZCh0b29sVHIpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBmaWx0ZXJlZFN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBbImxsbSIsICJ0b29sIl0uaW5jbHVkZXMoZC5UeXBlKSk7CgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ0R1cmF0aW9uJyk7CgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7IAoKCQkJZmlsdGVyZWRTdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJCgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsKCQkJCWxldCB0b29sdGlwID0gcy5OYW1lOwoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIgJiYgcy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoJCQkJZGF0YS5hZGRSb3coW2Ake3MuU2VxfWAsIGR1ciwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1RpbWUgQ29uc3VtcHRpb24gb2YgTExNL1Rvb2wgQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTS9Ub29sIFN0ZXBzJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ1NlY29uZHMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2R1cmF0aW9uX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBsbG1TdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gZC5UeXBlID09PSAibGxtIik7CgkJCWlmIChsbG1TdGVwcy5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwkJCQoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ1Rva2VucycpOwkJCQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICdzdHlsZSd9KTsJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7CQoKCQkJY29uc3QgYWdlbnRDb2xvcnMgPSB7fTsKCQkJY29uc3QgcGFsZXR0ZSA9IFsnIzQyODVGNCcsICcjREI0NDM3JywgJyNGNEI0MDAnLCAnIzBGOUQ1OCcsICcjQUI0N0JDJywgJyMwMEFDQzEnXTsKCQkJbGV0IGNvbG9ySWR4ID0gMDsKCQkJY29uc3QgYWdlbnRMTE1Db3VudHMgPSB7fTsKCQkJbGxtU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCWlmICghYWdlbnRDb2xvcnNbcy5OYW1lXSkgewoJCQkJCWFnZW50Q29sb3JzW3MuTmFtZV0gPSBwYWxldHRlW2NvbG9ySWR4ICUgcGFsZXR0ZS5sZW5ndGhdOwoJCQkJCWNvbG9ySWR4Kys7CgkJCQl9CgoJCQkJYWdlbnRMTE1Db3VudHNbcy5OYW1lXSA9IChhZ2VudExMTUNvdW50c1tzLk5hbWVdIHx8IDApICsgMTsKCQkJCWNvbnN0IGxhYmVsID0gYCR7cy5OYW1lfS0ke2FnZW50TExNQ291bnRzW3MuTmFtZV19YDsKCQkJCWNvbnN0IHRvdGFsVG9rZW5zID0gcy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2VuczsKCQkJCWNvbnN0IHN0eWxlID0gYGNvbG9yOiAke2FnZW50Q29sb3JzW3MuTmFtZV19YDsKCQkJCWxldCB0b29sdGlwID0gYFRvdGFsIFRva2VuczogJHt0b3RhbFRva2Vuc31cbihJbjogJHtzLklucHV0VG9rZW5zfSwgT3V0OiAke3MuT3V0cHV0VG9rZW5zfSwgVGhvdWdodHM6ICR7cy5PdXRwdXRUaG91Z2h0c1Rva2Vuc30pYDsKCQkJCWlmIChzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgoJCQkJZGF0YS5hZGRSb3coW2xhYmVsLCB0b3RhbFRva2Vucywgc3R5bGUsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUb2tlbiBDb25zdW1wdGlvbiBieSBMTE0gQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTSBDYWxsIFNlcXVlbmNlJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ0NvbnN1bWVkIFRva2VucycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9rZW5fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCQlsZXQgYWxsRXhwYW5kZWQgPSBmYWxzZTsKCQlmdW5jdGlvbiB0b2dnbGVBbGxEZXRhaWxzKCkgewoJCQlhbGxFeHBhbmRlZCA9ICFhbGxFeHBhbmRlZDsKCQkJZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnZGV0YWlscycpLmZvckVhY2goZCA9PiB7CgkJCQlpZiAoYWxsRXhwYW5kZWQpIGQuc2V0QXR0cmlidXRlKCdvcGVuJywgJycpOwoJCQkJZWxzZSBkLnJlbW92ZUF0dHJpYnV0ZSgnb3BlbicpOwoJCQl9KTsKCQl9Cgk8L3NjcmlwdD4KCgo8L2JvZHk+CjwvaHRtbD4K" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowwmc2v[0].run-triage(0) Phase: Succeeded StartedAt: 2026-09-07 07:04:12 +0000 UTC FinishedAt: 2026-09-07 07:26:11 +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": "9d3243fc689fef444f87e0a703b4c99653137e1b", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "LRU_GEN", "LRU_GEN_ENABLED" ], "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": "9d3243fc689fef444f87e0a703b4c99653137e1b", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "LRU_GEN", "LRU_GEN_ENABLED" ], "series_id": "258108d5-6ce7-4cbd-9037-ac3e1f9c9bcd" }, "track": "KASAN", "fuzz": { "focus": null, "focus_symbols": [ "evict_folios", "try_to_shrink_lruvec", "run_eviction", "lru_gen_shrink_lruvec" ], "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+CgkJCTx0ZD4yMDI2LzA5LzA3IDA3OjI1PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0xSVV9HRU4mIzM0OywKICAgICYjMzQ7TFJVX0dFTl9FTkFCTEVEJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7ZXZpY3RfZm9saW9zJiMzNDssCiAgICAmIzM0O3RyeV90b19zaHJpbmtfbHJ1dmVjJiMzNDssCiAgICAmIzM0O3J1bl9ldmljdGlvbiYjMzQ7LAogICAgJiMzNDtscnVfZ2VuX3Nocmlua19scnV2ZWMmIzM0OwogIF0sCiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBwYWdlIHJlY2xhaW0gbG9naWMgaW4gdGhlIE11bHRpLUdlbiBMUlUgKE1HTFJVKSBzdWJzeXN0ZW0gKGBtbS92bXNjYW4uY2ApLCBzcGVjaWZpY2FsbHkgaW4gYGV2aWN0X2ZvbGlvcygpYC4gSXQgbW92ZXMgYGZvbGlvX3NldF9scnVfcmVmcyhmb2xpbywgMClgIG91dHNpZGUgb2YgYSBjb25kaXRpb25hbCBjaGVjayBzbyB0aGF0IExSVSByZWZlcmVuY2UgZmxhZ3MgYXJlIGNsZWFyZWQgdW5jb25kaXRpb25hbGx5IGZvciBmb2xpb3MgcmVtYWluaW5nIG9uIHRoZSBsaXN0LlxuXG5UaGlzIGNoYW5nZSBwdXJlbHkgYWZmZWN0cyBmb2xpbyBtZXRhZGF0YS9mbGFncyBkdXJpbmcgTFJVIHBhZ2UgcmVjbGFpbS4gSXQgZG9lcyBub3QgaW50cm9kdWNlIG9yIG1vZGlmeTpcbjEuIERhdGEgc3RydWN0dXJlcyBjb3BpZWQgdG8gdXNlciBzcGFjZSBvciBrZXJuZWwgaW5mby1sZWFrcy5cbjIuIFVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzLCBzdHJ1Y3QgZmllbGRzLCBvciBtZW1vcnkgYWxsb2NhdGlvbnMuXG4zLiBMZW5ndGhzIG9yIGJvdW5kcyBjaGVja3MgdGhhdCBjb3VsZCBleHBvc2UgdW5pbml0aWFsaXplZCBidWZmZXIgbWVtb3J5LlxuXG5CZWNhdXNlIHRoZXJlIGFyZSBubyB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcyBvciBpbmZvLWxlYWtzLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZC4gU3RhbmRhcmQgS0FTQU4vc2FuaXRpemVyIGJ1aWxkcyBhcmUgc3VmZmljaWVudC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgTXVsdGktR2VuIExSVSAoTUdMUlUpIHBhZ2UgcmVjbGFpbSBsb2dpYyBpbiBtbS92bXNjYW4uYywgZW5zdXJpbmcgZm9saW8gTFJVIHJlZmVyZW5jZXMgYXJlIHVuY29uZGl0aW9uYWxseSByZXNldCB3aGVuIGZvbGlvcyBhcmUgcHV0IGJhY2suIFRoaXMgdG91Y2hlcyBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IHBhZ2UgZXZpY3Rpb24gcGF0aHMgcmVhY2hhYmxlIGR1cmluZyBtZW1vcnkgcmVjbGFpbSB1bmRlciBNR0xSVS4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNyAwNzoyNTwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IGEzOGVlMDkxM2JmYTEyNDQ5Nzk4M2I4ZWNhNGE4NmI2MmM5NDY0ZDBcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgTW9uIFNlcCA3IDA3OjI1OjE5IDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL21tL3Ztc2Nhbi5jIGIvbW0vdm1zY2FuLmNcbmluZGV4IDQwZDNmMWI0OGE3NGMuLjQyYzBhMDk5MzhhYjIgMTAwNjQ0XG4tLS0gYS9tbS92bXNjYW4uY1xuJiM0MzsmIzQzOyYjNDM7IGIvbW0vdm1zY2FuLmNcbkBAIC01MDIxLDEwICYjNDM7NTAyMSwxMSBAQCBzdGF0aWMgaW50IGV2aWN0X2ZvbGlvcyh1bnNpZ25lZCBsb25nIG5yX3RvX3NjYW4sIHN0cnVjdCBscnV2ZWMgKmxydXZlYyxcbiBcdFx0fVxuIFxuIFx0XHQvKiBkb24mIzM5O3QgYWRkIHJlamVjdGVkIGZvbGlvcyB0byB0aGUgb2xkZXN0IGdlbmVyYXRpb24gKi9cbi1cdFx0aWYgKGxydV9nZW5fZm9saW9fc2VxKGxydXZlYywgZm9saW8sIGZhbHNlKSA9PSBtaW5fc2VxW3R5cGVdKSB7XG4tXHRcdFx0Zm9saW9fc2V0X2xydV9yZWZzKGZvbGlvLCAwKTtcbiYjNDM7XHRcdGlmIChscnVfZ2VuX2ZvbGlvX3NlcShscnV2ZWMsIGZvbGlvLCBmYWxzZSkgPT0gbWluX3NlcVt0eXBlXSlcbiBcdFx0XHRmb2xpb19zZXRfYWN0aXZlKGZvbGlvKTtcbi1cdFx0fVxuJiM0MztcbiYjNDM7XHRcdC8qIFNlZSB0aGUgY29tbWVudHMgb24gTFJVX1JFRlNfRkxBR1MgKi9cbiYjNDM7XHRcdGZvbGlvX3NldF9scnVfcmVmcyhmb2xpbywgMCk7XG4gXHR9XG4gXG4gXHRtb3ZlX2ZvbGlvc190b19scnUoXHUwMDI2bGlzdCk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDcgMDc6MjU8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Y29yZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7TFJVX0dFTiYjMzQ7LAogICAgJiMzNDtMUlVfR0VOX0VOQUJMRUQmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtldmljdF9mb2xpb3MmIzM0OywKICAgICYjMzQ7dHJ5X3RvX3Nocmlua19scnV2ZWMmIzM0OywKICAgICYjMzQ7cnVuX2V2aWN0aW9uJiMzNDssCiAgICAmIzM0O2xydV9nZW5fc2hyaW5rX2xydXZlYyYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBNdWx0aS1HZW4gTFJVIChNR0xSVSkgcGFnZSByZWNsYWltIGxvZ2ljIGluIG1tL3Ztc2Nhbi5jLCBlbnN1cmluZyBmb2xpbyBMUlUgcmVmZXJlbmNlcyBhcmUgdW5jb25kaXRpb25hbGx5IHJlc2V0IHdoZW4gZm9saW9zIGFyZSBwdXQgYmFjay4gVGhpcyB0b3VjaGVzIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgcGFnZSBldmljdGlvbiBwYXRocyByZWFjaGFibGUgZHVyaW5nIG1lbW9yeSByZWNsYWltIHVuZGVyIE1HTFJVLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lciBhbmQgc2VjdXJpdHkgZW5naW5lZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZXZhbHVhdGUgd2hldGhlciBpdCB3YXJyYW50cyBmdXp6aW5nIHdpdGggc3l6a2FsbGVyLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiBpbnRlcm5hbCBhc3N1bXB0aW9ucy4gWW91IG11c3QgYWN0aXZlbHkgdXNlIHlvdXIgY29kZSBhY2Nlc3MKdG9vbHMgdG8gaW5zcGVjdCB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlLCBjYWxsZXJzLCBhbmQgc3Vycm91bmRpbmcgY29udGV4dC4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjEuIENPUkUgVFJJQUdFIFBISUxPU09QSFkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KVGhlIGdvYWwgb2YgcGF0Y2ggZnV6emluZyBpcyB0byBkaXNjb3ZlciBjcmFzaGVzLCByZWdyZXNzaW9ucywgZXhwb3NlZCBsYXRlbnQgYnVncywKYW5kIG5ld2x5IHRyaWdnZXJlZCBhc3NlcnRpb25zIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIHNlcmllcy4KCi0gUkVBQ0hBQklMSVRZIElTIFRIRSBQUklNQVJZIEdBVEU6CiAgRnV6emluZyBjYW4gb25seSBkaXNjb3ZlciBidWdzIGluIGNvZGUgdGhhdCBjYW4gYWN0dWFsbHkgZXhlY3V0ZSBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZAogIGVudmlyb25tZW50cyAoR0NFIG9yIFFFTVUsIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBkZXZpY2VzIGxpa2UgVVNCIGdhZGdldHMsIG5ldGRldiwgdHVuL3RhcCkuCiAgSWYgdGhlIG1vZGlmaWVkIGNvZGUgaXMgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIChzZWUgU2VjdGlvbiAyKSwgaXQgTVVTVCBOT1QgYmUgZnV6emVkLAogIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciBpdCBhZGRzIGFzc2VydGlvbnMgb3IgY29tcGxleCBsb2dpYy4KCi0gRE8gTk9UIEJMSU5ETFkgVFJVU1QgJiMzNDtOTyBGVU5DVElPTkFMIENIQU5HRSYjMzQ7IChORkNJKSBPUiAmIzM0O1JFRkFDVE9SSU5HJiMzNDsgQ0xBSU1TOgogIFBhdGNoIGF1dGhvcnMgcm91dGluZWx5IGxhYmVsIGNoYW5nZXMgYXMgJiMzNDtjbGVhbnVwcyYjMzQ7LCAmIzM0O3JlZmFjdG9yaW5ncyYjMzQ7LCBvciBzdGF0ZQogICYjMzQ7Tm8gZnVuY3Rpb25hbCBjaGFuZ2UgaW50ZW5kZWQmIzM0Oy4gRG8gTk9UIHRha2UgdGhlc2UgY2xhaW1zIGF0IGZhY2UgdmFsdWUuCiAgQ29kZSByZWZhY3RvcmluZ3MgdGhhdCByZWFycmFuZ2UgbG9naWMsIGludHJvZHVjZSBoZWxwZXIgZnVuY3Rpb25zLCBvciBhbHRlciBzdGF0ZSBtYW5hZ2VtZW50CiAgaW4gY29yZSBzdWJzeXN0ZW1zIGZyZXF1ZW50bHkgaW50cm9kdWNlIHN1YnRsZSBzZW1hbnRpYyBzaGlmdHMgb3IgdW5jb3ZlciBsYXRlbnQga2VybmVsIGJ1Z3MuCiAgSWYgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSBpcyBtb2RpZmllZCBvciByZWZhY3RvcmVkLCBpdCBNVVNUIGJlIGZ1enplZC4KCi0gTkVXIE9SIE1PRElGSUVEIEFTU0VSVElPTlMgSU4gUkVBQ0hBQkxFIENPREUgTVVTVCBCRSBGVVpaRUQ6CiAgV2hlbiBhIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXMgcnVudGltZSBjaGVja3Mgb3IgYXNzZXJ0aW9ucyAoZS5nLiwgV0FSTl9PTiosIFZNX1dBUk5fT04qLAogIEJVR19PTiosIGxvY2tkZXBfYXNzZXJ0KikgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMsIGl0IGVuZm9yY2VzIG5ldyBvciBzdHJpY3RlciBpbnZhcmlhbnRzLgogIEV2ZW4gaWYgdGhlIGF1dGhvciBiZWxpZXZlcyB0aGUgaW52YXJpYW50IGFsd2F5cyBob2xkcywgZnV6emluZyBpcyBlc3NlbnRpYWwgdG8gdmVyaWZ5IHdoZXRoZXIKICBhbiB1bnVzdWFsIHNlcXVlbmNlIG9mIG9wZXJhdGlvbnMgY2FuIHZpb2xhdGUgaXQuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoyLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9ZmFsc2UgKE5FR0FUSVZFIENSSVRFUklBKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIE9OTFkgSUYgYWxsIG1vZGlmaWVkIGNvZGUgZmFsbHMgc3RyaWN0bHkgaW50byBvbmUgb3IgbW9yZSBvZiB0aGVzZSBjYXRlZ29yaWVzOgoKLSBOb24ta2VybmVsIGFuZCBub24tZXhlY3V0YWJsZSBjaGFuZ2VzOgogICogTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgY29tbWVudHMsIG9yIHNwZWxsaW5nIGZpeGVzLgogICogVXNlci1zcGFjZSBkaXJlY3Rvcmllcywgc2VsZi10ZXN0cywgc2FtcGxlcywgb3Igc2NyaXB0cyAoZS5nLiwgdG9vbHMvLCBzYW1wbGVzLywgc2NyaXB0cy8sIHVzci8pCiAgICB0aGF0IGRvIG5vdCBhZmZlY3QgdGhlIGNvbXBpbGVkIGtlcm5lbCBpbWFnZSAodm1saW51eCkgb3Iga2VybmVsIG1vZHVsZXMuCiAgKiBQdXJlbHkgZGVjb3JhdGl2ZSBsb2dnaW5nIChlLmcuLCBtZXNzYWdlIHN0cmluZ3MgaW4gcHJfZXJyLCBwcmludGssIGRldl9pbmZvKSBvciB0cmFjZXBvaW50cwogICAgdGhhdCBkbyBub3QgYWx0ZXIgY29udHJvbCBmbG93IG9yIGRhdGEgc3RydWN0dXJlcy4KICAqIEJ1aWxkIHN5c3RlbSBvciBLY29uZmlnIGNoYW5nZXMgdGhhdCBkbyBub3QgYWx0ZXIgY29tcGlsZWQgQyBsb2dpYy4KLSBTdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgaGFyZHdhcmU6CiAgKiBWZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2hlcywgU21hcnROSUNzLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgICBpb25pYywgYW1kZ3B1KSByZXF1aXJpbmcgcGh5c2ljYWwgQVNJQy9QQ0llIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIFVucmVhY2hhYmxlIGV4ZWN1dGlvbiBwYXRoczoKICAqIERyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKC5yZW1vdmUsIC5zaHV0ZG93biwgcGNpX3VucmVnaXN0ZXJfZHJpdmVyKSBleGVjdXRlZCBvbmx5IGR1cmluZwogICAgcGh5c2ljYWwgUENJIGhvdC11bnBsdWcgb3IgbWFudWFsIHN5c2ZzIGRyaXZlciB1bmJpbmRpbmcuCiAgKiBDb2RlIHBhdGhzIGV4Y2x1c2l2ZSB0byBhcmNoaXRlY3R1cmVzIG90aGVyIHRoYW4gdGhlIHRhcmdldCBhcmNoaXRlY3R1cmUuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQozLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9dHJ1ZSAoUE9TSVRJVkUgQ1JJVEVSSUEpCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZSB3aGVuZXZlciB0aGUgcGF0Y2ggdG91Y2hlcyByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlLCBpbmNsdWRpbmc6Ci0gQ29yZSBTdWJzeXN0ZW1zOgogICogQW55IGxvZ2ljIG1vZGlmaWNhdGlvbnMgaW4gbWVtb3J5IG1hbmFnZW1lbnQgKG1tLyksIHN5bmNocm9uaXphdGlvbi9sb2NraW5nIChrZXJuZWwvbG9ja2luZy8pLAogICAgQlBGLCBzY2hlZHVsZXIsIGNvcmUgbmV0d29ya2luZywgVkZTLCBvciBzeXNjYWxsIGhhbmRsaW5nLgotIFJlZmFjdG9yaW5ncyBhbmQgQ29kZSBDbGVhbnVwczoKICAqIEFueSByZXN0cnVjdHVyaW5nIG9mIHJlYWNoYWJsZSBkYXRhIHN0cnVjdHVyZXMsIGhlbHBlciBhYnN0cmFjdGlvbnMsIG9yIGFsZ29yaXRobSBmbG93cy4KLSBSdW50aW1lIEFzc2VydGlvbnMgYW5kIERlZmVuc2l2ZSBDaGVja3M6CiAgKiBBbnkgaW50cm9kdWN0aW9uIG9yIGFsdGVyYXRpb24gb2YgYXNzZXJ0aW9ucyAoV0FSTl9PTiosIFZNX1dBUk5fT04qLCBCVUdfT04qLCBldGMuKSBpbiByZWFjaGFibGUgcGF0aHMuCi0gUmVhY2hhYmxlIERyaXZlcnMgYW5kIFByb3RvY29sczoKICAqIERyaXZlcnMgYWNjZXNzaWJsZSB2aWEgdmlydHVhbCBidXNlcyAodmlydGlvLCBVU0IgZ2FkZ2V0LCBsb29wYmFjaywgbmV0bGluaywgYmluZGVyLCBzb2NrZXRzLCBldGMuKS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjQuIEVYVFJBQ1RJTkcgRm9jdXNTeW1ib2xzIChQUkVWRU5USU5HIERJTFVUSU9OKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpXaGVuIFdvcnRoRnV6emluZz10cnVlLCB5b3UgbXVzdCBleHRyYWN0IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgaW50byBGb2N1c1N5bWJvbHMgdG8gZ3VpZGUgdGhlIGZ1enplcjoKCi0gQVZPSUQgVUJJUVVJVE9VUyBMSUZFQ1lDTEUgSE9ULVBBVEhTOgogIERvIE5PVCBsaXN0IGdlbmVyaWMsIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhbGxlZCBieSBhbG1vc3QgZXZlcnkgcHJvZ3JhbSBpbiB0aGUgY29ycHVzCiAgKGluY2x1ZGluZywgYnV0IG5vdCBsaW1pdGVkIHRvOiBnZW5lcmFsIG1lbW9yeSBhbGxvY2F0b3JzIGFuZCBkZWFsbG9jYXRvcnMsIHBhZ2UgZmF1bHQKICBhbmQgdHJhcCBoYW5kbGVycywgb3IgY29yZSBzeW5jaHJvbml6YXRpb24gcHJpbWl0aXZlczsgdGhpcyBpcyBub3QgYW4gZXhoYXVzdGl2ZSBsaXN0KS4KICBMaXN0aW5nIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhdXNlcyB0aGUgZnV6emVyIHRvIGNsYXNzaWZ5IHRob3VzYW5kcyBvZiB1bnJlbGF0ZWQgdGVzdHMgYXMgJiMzNDtmb2N1c2VkJiMzNDssCiAgd2hpY2ggc2V2ZXJlbHkgZGlsdXRlcyBmdXp6aW5nIGVmZm9ydCBhd2F5IGZyb20gdGhlIGFjdHVhbCBjaGFuZ2VzLgoKLSBUQVJHRVQgU1BFQ0lGSUMgRkVBVFVSRSBMT0dJQyBBTkQgRU5UUllQT0lOVFM6CiAgTGlzdCBmdW5jdGlvbnMgdGhhdCBzcGVjaWZpY2FsbHkgaW1wbGVtZW50IHRoZSBsb2dpYyBiZWluZyBhZGRlZCBvciBhbHRlcmVkLCBvciBkaXJlY3QgQVBJIGVudHJ5cG9pbnRzCiAgZm9yIHRoZSBzdWJzeXN0ZW0gZmVhdHVyZSB1bmRlciByZXZpZXcuCgotIEhBTkRMSU5HIFNUQVRJQyBJTkxJTkUgRlVOQ1RJT05TIElOIEhFQURFUlMgKC5oKToKICBDb21waWxlci1pbmxpbmVkIHN0YXRpYyBmdW5jdGlvbnMgKHN1Y2ggYXMgc3RhdGljIGlubGluZXMgaW4gbW0vKi5oIG9yIGluY2x1ZGUvbGludXgvKi5oKSBsYWNrCiAgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcyBpbiB2bWxpbnV4IGFuZCBjYW5ub3QgYmUgdGFyZ2V0ZWQgZGlyZWN0bHkgYnkgc3ltYm9sIGNvdmVyYWdlIGZpbHRlcnMuCiAgSWYgdGhlIGNoYW5nZXMgYXJlIHByaW1hcmlseSBpbiBzdGF0aWMgaW5saW5lIGhlbHBlcnMsIGlkZW50aWZ5IG5vbi1zdGF0aWMsIGZlYXR1cmUtc3BlY2lmaWMgY2FsbGVyCiAgZnVuY3Rpb25zIGluIC5jIGZpbGVzIHRoYXQgZXhlcmNpc2UgdGhlbSAoYXZvaWRpbmcgdWJpcXVpdG91cyBsaWZlY3ljbGUgd3JhcHBlcnMpLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KNS4gSURFTlRJRllJTkcgRW5hYmxlQ29uZmlncwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IGNvbXBpbGUgYW5kIHJlYWNoIHRoZSBtb2RpZmllZCBjb2RlOgotIEluc3BlY3QgS2NvbmZpZyBmaWxlcyBhbmQgI2lmZGVmIGd1YXJkczsgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCi0gQ2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzIG5lZWRlZC4KLSBTdHJpcCBhbnkgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+VGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjQKCkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgYTM4ZWUwOTEzYmZhMTI0NDk3OTgzYjhlY2E0YTg2YjYyYzk0NjRkMApBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBNb24gU2VwIDcgMDc6MjU6MTkgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9tbS92bXNjYW4uYyBiL21tL3Ztc2Nhbi5jCmluZGV4IDQwZDNmMWI0OGE3NGMuLjQyYzBhMDk5MzhhYjIgMTAwNjQ0Ci0tLSBhL21tL3Ztc2Nhbi5jCiYjNDM7JiM0MzsmIzQzOyBiL21tL3Ztc2Nhbi5jCkBAIC01MDIxLDEwICYjNDM7NTAyMSwxMSBAQCBzdGF0aWMgaW50IGV2aWN0X2ZvbGlvcyh1bnNpZ25lZCBsb25nIG5yX3RvX3NjYW4sIHN0cnVjdCBscnV2ZWMgKmxydXZlYywKIAkJfQogCiAJCS8qIGRvbiYjMzk7dCBhZGQgcmVqZWN0ZWQgZm9saW9zIHRvIHRoZSBvbGRlc3QgZ2VuZXJhdGlvbiAqLwotCQlpZiAobHJ1X2dlbl9mb2xpb19zZXEobHJ1dmVjLCBmb2xpbywgZmFsc2UpID09IG1pbl9zZXFbdHlwZV0pIHsKLQkJCWZvbGlvX3NldF9scnVfcmVmcyhmb2xpbywgMCk7CiYjNDM7CQlpZiAobHJ1X2dlbl9mb2xpb19zZXEobHJ1dmVjLCBmb2xpbywgZmFsc2UpID09IG1pbl9zZXFbdHlwZV0pCiAJCQlmb2xpb19zZXRfYWN0aXZlKGZvbGlvKTsKLQkJfQomIzQzOwomIzQzOwkJLyogU2VlIHRoZSBjb21tZW50cyBvbiBMUlVfUkVGU19GTEFHUyAqLwomIzQzOwkJZm9saW9fc2V0X2xydV9yZWZzKGZvbGlvLCAwKTsKIAl9CiAKIAltb3ZlX2ZvbGlvc190b19scnUoJmFtcDtsaXN0KTsKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDcgMDc6MjU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjk0NwoJCQkJCQkJb3V0cHV0OiAzNQoJCQkJCQkJdGhvdWdodHM6IDU3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgVmlydHVhbCBNZW1vcnkgU2Nhbm5lciBQYXRjaCoqCgpPa2F5LCBzbyB0aGUgcGF0Y2ggaXMgc2l0dGluZyBpbiBgbW0vdm1zY2FuLmNgLiBNeSBmaXJzdCBtb3ZlIGlzIGFsd2F5cyB0byBkaXZlIHJpZ2h0IGluIGFuZCBnZXQgYSBmZWVsIGZvciB0aGUgc3BlY2lmaWMgY2hhbmdlIGFuZCBpdHMgY29udGV4dCB3aXRoaW4gdGhlIHN1cnJvdW5kaW5nIGNvZGUuIFRpbWUgdG8gZGlnIGludG8gdGhlIGRpZmYgaXRzZWxmLCByZWFsbHkgdW5kZXJzdGFuZCB3aGF0JiMzOTtzIGJlZW4gYWx0ZXJlZC4KCkdpdmVuIG15IGZhbWlsaWFyaXR5IHdpdGggdGhpcyBjb2RlYmFzZSwgSSYjMzk7bSB0aGlua2luZyBhIHRvb2wgbGlrZSBgcmVhZC1maWxlYCBvciBldmVuIGEgcXVpY2sgYGdyZXBwZXJgIGNhbGwgdG8gcGlucG9pbnQgYXJvdW5kIGxpbmUgNTAyMSBpbiBgbW0vdm1zY2FuLmNgIHdpbGwgZ2l2ZSBtZSB0aGUgaW1tZWRpYXRlIHZpZXcgb2YgdGhlIGFyZWEgdGhhdCB0aGUgcGF0Y2ggdG91Y2hlcy4gVGhpcyBpcyB3aGVyZSBJJiMzOTtsbCBiZWdpbiB0byBidWlsZCBteSBtZW50YWwgbW9kZWwgb2Ygd2hhdCB0aGUgZGV2ZWxvcGVyIGludGVuZGVkLiBJdCYjMzk7cyBhbGwgYWJvdXQgdGhhdCBpbml0aWFsIGluc3BlY3Rpb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDcgMDc6MjU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDttbS92bXNjYW4uYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDUwMDAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNTAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7NTAwMDpcdFx0c2MtXHUwMDNlbnJfcmVjbGFpbWVkICYjNDM7PSByZWNsYWltZWQ7XG41MDAxOlx0XHR0b3RhbF9yZWNsYWltZWQgJiM0Mzs9IHJlY2xhaW1lZDtcbjUwMDI6XHRcdC8qIFJldHJ5IHBhc3MgaXMgb25seSBtZWFudCBmb3IgY2xlYW4gZm9saW9zIHdpdGhvdXQgbmV3IGlzb2xhdGlvbiAqL1xuNTAwMzpcdFx0aWYgKGlzb2xhdGVkKVxuNTAwNDpcdFx0XHRoYW5kbGVfcmVjbGFpbV93cml0ZWJhY2soaXNvbGF0ZWQsIHBnZGF0LCBzYywgXHUwMDI2c3RhdCk7XG41MDA1Olx0XHR0cmFjZV9tbV92bXNjYW5fbHJ1X3Nocmlua19pbmFjdGl2ZShwZ2RhdC1cdTAwM2Vub2RlX2lkLFxuNTAwNjpcdFx0XHRcdHR5cGVfc2Nhbm5lZCwgcmVjbGFpbWVkLCBcdTAwMjZzdGF0LCBzYy1cdTAwM2Vwcmlvcml0eSxcbjUwMDc6XHRcdFx0XHR0eXBlID8gTFJVX0lOQUNUSVZFX0ZJTEUgOiBMUlVfSU5BQ1RJVkVfQU5PTik7XG41MDA4Olx0XG41MDA5Olx0XHRsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmVfcmV2ZXJzZShmb2xpbywgbmV4dCwgXHUwMDI2bGlzdCwgbHJ1KSB7XG41MDEwOlx0XHRcdERFRklORV9NSU5fU0VRKGxydXZlYyk7XG41MDExOlx0XG41MDEyOlx0XHRcdC8qIG1vdmVfZm9saW9zX3RvX2xydSgpIGN1bGxzIHVuZXZpY3RhYmxlIGZvbGlvcyB2aWEgZm9saW9fcHV0YmFja19scnUoKSAqL1xuNTAxMzpcdFx0XHRpZiAoIWZvbGlvX2V2aWN0YWJsZShmb2xpbykpXG41MDE0Olx0XHRcdFx0Y29udGludWU7XG41MDE1Olx0XG41MDE2Olx0XHRcdC8qIHJldHJ5IGZvbGlvcyB0aGF0IG1heSBoYXZlIG1pc3NlZCBmb2xpb19yb3RhdGVfcmVjbGFpbWFibGUoKSAqL1xuNTAxNzpcdFx0XHRpZiAoIXNraXBfcmV0cnkgXHUwMDI2XHUwMDI2ICFmb2xpb190ZXN0X2FjdGl2ZShmb2xpbykgXHUwMDI2XHUwMDI2ICFmb2xpb19tYXBwZWQoZm9saW8pIFx1MDAyNlx1MDAyNlxuNTAxODpcdFx0XHQgICAgIWZvbGlvX3Rlc3RfZGlydHkoZm9saW8pIFx1MDAyNlx1MDAyNiAhZm9saW9fdGVzdF93cml0ZWJhY2soZm9saW8pKSB7XG41MDE5Olx0XHRcdFx0bGlzdF9tb3ZlKFx1MDAyNmZvbGlvLVx1MDAzZWxydSwgXHUwMDI2Y2xlYW4pO1xuNTAyMDpcdFx0XHRcdGNvbnRpbnVlO1xuNTAyMTpcdFx0XHR9XG41MDIyOlx0XG41MDIzOlx0XHRcdC8qIGRvbiYjMzk7dCBhZGQgcmVqZWN0ZWQgZm9saW9zIHRvIHRoZSBvbGRlc3QgZ2VuZXJhdGlvbiAqL1xuNTAyNDpcdFx0XHRpZiAobHJ1X2dlbl9mb2xpb19zZXEobHJ1dmVjLCBmb2xpbywgZmFsc2UpID09IG1pbl9zZXFbdHlwZV0pXG41MDI1Olx0XHRcdFx0Zm9saW9fc2V0X2FjdGl2ZShmb2xpbyk7XG41MDI2Olx0XG41MDI3Olx0XHRcdC8qIFNlZSB0aGUgY29tbWVudHMgb24gTFJVX1JFRlNfRkxBR1MgKi9cbjUwMjg6XHRcdFx0Zm9saW9fc2V0X2xydV9yZWZzKGZvbGlvLCAwKTtcbjUwMjk6XHRcdH1cbjUwMzA6XHRcbjUwMzE6XHRcdG1vdmVfZm9saW9zX3RvX2xydShcdTAwMjZsaXN0KTtcbjUwMzI6XHRcbjUwMzM6XHRcdHdhbGsgPSBjdXJyZW50LVx1MDAzZXJlY2xhaW1fc3RhdGUtXHUwMDNlbW1fd2FsaztcbjUwMzQ6XHRcdGlmICh3YWxrIFx1MDAyNlx1MDAyNiB3YWxrLVx1MDAzZWJhdGNoZWQpIHtcbjUwMzU6XHRcdFx0d2Fsay1cdTAwM2VscnV2ZWMgPSBscnV2ZWM7XG41MDM2Olx0XHRcdHJlc2V0X2JhdGNoX3NpemUod2Fsayk7XG41MDM3Olx0XHR9XG41MDM4Olx0XG41MDM5Olx0XHRtb2RfbHJ1dmVjX3N0YXRlKGxydXZlYywgUEdERU1PVEVfS1NXQVBEICYjNDM7IHJlY2xhaW1lcl9vZmZzZXQoc2MpLFxuNTA0MDpcdFx0XHRcdFx0XHRzdGF0Lm5yX2RlbW90ZWQpO1xuNTA0MTpcdFxuNTA0MjpcdFx0aXRlbSA9IFBHU1RFQUxfS1NXQVBEICYjNDM7IHJlY2xhaW1lcl9vZmZzZXQoc2MpO1xuNTA0MzpcdFx0bW9kX2xydXZlY19zdGF0ZShscnV2ZWMsIGl0ZW0sIHJlY2xhaW1lZCk7XG41MDQ0Olx0XHRtb2RfbHJ1dmVjX3N0YXRlKGxydXZlYywgUEdTVEVBTF9BTk9OICYjNDM7IHR5cGUsIHJlY2xhaW1lZCk7XG41MDQ1Olx0XG41MDQ2Olx0XHRsaXN0X3NwbGljZV9pbml0KFx1MDAyNmNsZWFuLCBcdTAwMjZsaXN0KTtcbjUwNDc6XHRcbjUwNDg6XHRcdGlmICghbGlzdF9lbXB0eShcdTAwMjZsaXN0KSkge1xuNTA0OTpcdFx0XHRza2lwX3JldHJ5ID0gdHJ1ZTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNyAwNzoyNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0MDU5CgkJCQkJCQlvdXRwdXQ6IDM1CgkJCQkJCQl0aG91Z2h0czogMzEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIG15IG93bjoKCioqSW5pdGlhbCBBc3Nlc3NtZW50OiBEaXZpbmcgaW50byBgbW0vdm1zY2FuLmNgKioKCkFscmlnaHQsIGJlZm9yZSBJIGdldCB0b28gZGVlcCBpbnRvIHRoaXMgY29kZSBzbmlwcGV0LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpdHMgY29udGV4dC4gTGV0IG1lIHRyYWNlIGJhY2sgYW5kIGlkZW50aWZ5IHRoZSBmdW5jdGlvbiB0aGF0IGVuY2xvc2VzIHRoaXMgc2VjdGlvbi4gS25vd2luZyB0aGUgc3Vycm91bmRpbmcgZnVuY3Rpb24gaXMgY3J1Y2lhbCBmb3IgdW5kZXJzdGFuZGluZyB0aGUgaW50ZW50IGFuZCB0aGUgdmFyaWFibGVzIGF0IHBsYXkuIFRoZW4sIEkgc2hvdWxkIGltbWVkaWF0ZWx5IGNyb3NzLXJlZmVyZW5jZSB0aGUgcmVsZXZhbnQgS2NvbmZpZyBvcHRpb25zLiBXaGF0IGZlYXR1cmVzIGFyZSBlbmFibGVkIG9yIGRpc2FibGVkIHRoYXQgbWlnaHQgaW5mbHVlbmNlIHRoaXMgcGFydGljdWxhciBibG9jayBvZiBjb2RlPyBBbnkgcmVsZXZhbnQgcHJlcHJvY2Vzc29yIGRpcmVjdGl2ZXMgSSBzaG91bGQgYmUgYXdhcmUgb2Y/IFRoYXQgd2lsbCBnaXZlIG1lIHRoZSBicm9hZCBwaWN0dXJlIGFuZCB3aWxsIGhlbHAgbWUgdW5kZXJzdGFuZCB0aGUgcHVycG9zZSBvZiB0aGUgYmxvY2suCgpBZnRlciB0aGF0LCBJIHNob3VsZCBjYXN0IG15IGV5ZXMgdG8gdGhlIGVhcmxpZXIgbGluZXMgd2l0aGluIGBtbS92bXNjYW4uY2AuIENvbnRleHQgaXMgZXZlcnl0aGluZywgYW5kIHRoZSBwcmVjZWRpbmcgY29kZSBwcm9iYWJseSBzZXRzIHVwIHRoZSBjb25kaXRpb25zIG9yIGRhdGEgdGhhdCB0aGlzIHNlY3Rpb24gaXMgd29ya2luZyB3aXRoLiBVbmRlcnN0YW5kaW5nIHRoZSBwcmVjZWRpbmcgY29kZSBpcyBhbG1vc3QgYWx3YXlzIGtleSB0byB1bmRlcnN0YW5kaW5nIHRoZSBmb2xsb3dpbmcgY29kZS4gSXQgaXMgYWxsIHJlbGF0ZWQuIEkgd2lsbCBsb29rIGZvciBhbnkgaW5pdGlhbGl6YXRpb25zLCBjb25kaXRpb25hbCBjaGVja3MsIG9yIGRhdGEgc3RydWN0dXJlcyBiZWluZyBzZXQgdXAgdGhhdCBwcm92aWRlIGNsdWVzIGFib3V0IHRoZSBsb2dpYyBhbmQgcHVycG9zZSBvZiB0aGlzIHNwZWNpZmljIHBpZWNlIG9mIHRoZSBjb2RlLiBMZXQmIzM5O3Mgc2VlIHdoYXQmIzM5O3MgaGFwcGVuaW5nLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDA3OjI1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bW0vdm1zY2FuLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA0OTUwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDYwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzQ5NTA6XHRcdFx0Z290byByZXRyeTtcbjQ5NTE6XHRcdH1cbjQ5NTI6XHRcdC8qXG40OTUzOlx0XHQgKiBXZSBzY2FubmVkIHNvbWUgZm9saW9zIGJ1dCBmYWlsZWQgdG8gaXNvbGF0ZSBhbnkgZHVlIHRvIHByb21vdGlvbnMsXG40OTU0Olx0XHQgKiBwcm90ZWN0aW9ucywgb3IgcmFjZXMuIFJldHJ5IG9uY2UgdG8gYXZvaWQgYSBsYXJnZXIgbG9vcC5cbjQ5NTU6XHRcdCAqL1xuNDk1NjpcdFx0aWYgKHNjYW5uZWQgXHUwMDI2XHUwMDI2ICF0cmllZCkge1xuNDk1NzpcdFx0XHR0cmllZCA9IHRydWU7XG40OTU4Olx0XHRcdGdvdG8gcmV0cnk7XG40OTU5Olx0XHR9XG40OTYwOlx0XG40OTYxOlx0XHRyZXR1cm4gdG90YWxfc2Nhbm5lZDtcbjQ5NjI6XHR9XG40OTYzOlx0XG40OTY0Olx0c3RhdGljIGludCBldmljdF9mb2xpb3ModW5zaWduZWQgbG9uZyBucl90b19zY2FuLCBzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsXG40OTY1Olx0XHRcdFx0c3RydWN0IHNjYW5fY29udHJvbCAqc2MsIGludCBzd2FwcGluZXNzKVxuNDk2NjpcdHtcbjQ5Njc6XHRcdExJU1RfSEVBRChsaXN0KTtcbjQ5Njg6XHRcdExJU1RfSEVBRChjbGVhbik7XG40OTY5Olx0XHRzdHJ1Y3QgZm9saW8gKmZvbGlvO1xuNDk3MDpcdFx0c3RydWN0IGZvbGlvICpuZXh0O1xuNDk3MTpcdFx0ZW51bSBub2RlX3N0YXRfaXRlbSBpdGVtO1xuNDk3MjpcdFx0c3RydWN0IHJlY2xhaW1fc3RhdCBzdGF0O1xuNDk3MzpcdFx0c3RydWN0IGxydV9nZW5fbW1fd2FsayAqd2FsaztcbjQ5NzQ6XHRcdGludCBzY2FubmVkLCByZWNsYWltZWQ7XG40OTc1Olx0XHRpbnQgaXNvbGF0ZWQgPSAwLCBucl9pc29sYXRlZCA9IDAsIHR5cGUsIHR5cGVfc2Nhbm5lZDtcbjQ5NzY6XHRcdHVuc2lnbmVkIGxvbmcgdG90YWxfcmVjbGFpbWVkID0gMDtcbjQ5Nzc6XHRcdGJvb2wgc2tpcF9yZXRyeSA9IGZhbHNlO1xuNDk3ODpcdFx0c3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnID0gbHJ1dmVjX21lbWNnKGxydXZlYyk7XG40OTc5Olx0XHRzdHJ1Y3QgcGdsaXN0X2RhdGEgKnBnZGF0ID0gbHJ1dmVjX3BnZGF0KGxydXZlYyk7XG40OTgwOlx0XG40OTgxOlx0XHRscnV2ZWNfbG9ja19pcnEobHJ1dmVjKTtcbjQ5ODI6XHRcbjQ5ODM6XHRcdC8qIEluIGNhc2UgZm9saW8gZGVsZXRpb24gbGVmdCBlbXB0eSBvbGQgZ2VucywgZmx1c2ggdGhlbSAqL1xuNDk4NDpcdFx0dHJ5X3RvX2luY19taW5fc2VxKGxydXZlYywgc3dhcHBpbmVzcyk7XG40OTg1Olx0XG40OTg2Olx0XHRzY2FubmVkID0gaXNvbGF0ZV9mb2xpb3MobnJfdG9fc2NhbiwgbHJ1dmVjLCBzYywgc3dhcHBpbmVzcyxcbjQ5ODc6XHRcdFx0XHRcdCBcdTAwMjZsaXN0LCBcdTAwMjZpc29sYXRlZCwgXHUwMDI2dHlwZSwgXHUwMDI2dHlwZV9zY2FubmVkKTtcbjQ5ODg6XHRcdG5yX2lzb2xhdGVkID0gaXNvbGF0ZWQ7XG40OTg5Olx0XG40OTkwOlx0XHQvKiBTY2FubmluZyBtYXkgaGF2ZSBlbXB0aWVkIHRoZSBvbGRlc3QgZ2VuLCBmbHVzaCBpdCAqL1xuNDk5MTpcdFx0aWYgKHNjYW5uZWQpXG40OTkyOlx0XHRcdHRyeV90b19pbmNfbWluX3NlcShscnV2ZWMsIHN3YXBwaW5lc3MpO1xuNDk5MzpcdFxuNDk5NDpcdFx0bHJ1dmVjX3VubG9ja19pcnEobHJ1dmVjKTtcbjQ5OTU6XHRcbjQ5OTY6XHRcdGlmIChsaXN0X2VtcHR5KFx1MDAyNmxpc3QpKVxuNDk5NzpcdFx0XHRyZXR1cm4gc2Nhbm5lZDtcbjQ5OTg6XHRyZXRyeTpcbjQ5OTk6XHRcdHJlY2xhaW1lZCA9IHNocmlua19mb2xpb19saXN0KFx1MDAyNmxpc3QsIHBnZGF0LCBzYywgXHUwMDI2c3RhdCwgZmFsc2UsIG1lbWNnKTtcbjUwMDA6XHRcdHNjLVx1MDAzZW5yX3JlY2xhaW1lZCAmIzQzOz0gcmVjbGFpbWVkO1xuNTAwMTpcdFx0dG90YWxfcmVjbGFpbWVkICYjNDM7PSByZWNsYWltZWQ7XG41MDAyOlx0XHQvKiBSZXRyeSBwYXNzIGlzIG9ubHkgbWVhbnQgZm9yIGNsZWFuIGZvbGlvcyB3aXRob3V0IG5ldyBpc29sYXRpb24gKi9cbjUwMDM6XHRcdGlmIChpc29sYXRlZClcbjUwMDQ6XHRcdFx0aGFuZGxlX3JlY2xhaW1fd3JpdGViYWNrKGlzb2xhdGVkLCBwZ2RhdCwgc2MsIFx1MDAyNnN0YXQpO1xuNTAwNTpcdFx0dHJhY2VfbW1fdm1zY2FuX2xydV9zaHJpbmtfaW5hY3RpdmUocGdkYXQtXHUwMDNlbm9kZV9pZCxcbjUwMDY6XHRcdFx0XHR0eXBlX3NjYW5uZWQsIHJlY2xhaW1lZCwgXHUwMDI2c3RhdCwgc2MtXHUwMDNlcHJpb3JpdHksXG41MDA3Olx0XHRcdFx0dHlwZSA/IExSVV9JTkFDVElWRV9GSUxFIDogTFJVX0lOQUNUSVZFX0FOT04pO1xuNTAwODpcdFxuNTAwOTpcdFx0bGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlX3JldmVyc2UoZm9saW8sIG5leHQsIFx1MDAyNmxpc3QsIGxydSkge1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDA3OjI1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDUzMzIKCQkJCQkJCW91dHB1dDogMjgKCQkJCQkJCXRob3VnaHRzOiA0OAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipJbnZlc3RpZ2F0aW5nIEtjb25maWcgRGVwZW5kZW5jaWVzIGZvciBgZXZpY3RfZm9saW9zYCBhbmQgTUdMUlUqKgoKT2theSwgdGltZSB0byBkaWcgaW50byB0aGUga2VybmVsIGNvbmZpZ3VyYXRpb24uIEkgbmVlZCB0byBmaWd1cmUgb3V0IHdoaWNoIEtjb25maWcgb3B0aW9ucyBnb3Zlcm4gdGhlIGluY2x1c2lvbiBvZiBgZXZpY3RfZm9saW9zYCBhbmQgaXRzIHJlbGF0aW9uc2hpcCB3aXRoIHRoZSBNdWx0aS1HZW4gTFJVIChNR0xSVSkgaW1wbGVtZW50YXRpb24uIE15IGluaXRpYWwgYXBwcm9hY2ggaXMgdG8gbGV2ZXJhZ2UgYGdyZXBgIOKAkyB0aGF0JiMzOTtzIHVzdWFsbHkgdGhlIHF1aWNrZXN0IHdheSB0byB0cmFjayBkb3duIGRpcmVjdCByZWZlcmVuY2VzIHdpdGhpbiB0aGUgS2NvbmZpZyBmaWxlcy4gSSYjMzk7bGwgc2VhcmNoIGZvciBgZXZpY3RfZm9saW9zYCBzcGVjaWZpY2FsbHksIGFpbWluZyB0byBpZGVudGlmeSB0aGUgaW1tZWRpYXRlIG9wdGlvbnMgdGhhdCBlbmFibGUgb3IgZGlzYWJsZSBpdC4gQWx0ZXJuYXRpdmVseSwgSSYjMzk7bGwgZXhhbWluZSBgbW0vdm1zY2FuLmNgLiBJdCYjMzk7cyBhIGtleSBmaWxlLCBlc3BlY2lhbGx5IHJlZ2FyZGluZyBtZW1vcnkgbWFuYWdlbWVudCBhbmQgcGFnZSBzY2FubmluZzsgaXQmIzM5O3MgbGlrZWx5IHRvIGNvbnRhaW4gY2x1ZXMuIEkgZXhwZWN0IHRvIGZpbmQgc29tZSBjb25kaXRpb25hbCBzdGF0ZW1lbnRzLCBvciBwZXJoYXBzIGV2ZW4gY29tbWVudHMsIHRoYXQgc2hlZCBsaWdodCBvbiBob3cgdGhlc2UgdHdvIGZlYXR1cmVzIGludGVyYWN0IGFuZCB3aGF0IEtjb25maWcgb3B0aW9ucyBjb250cm9sIHRoZWlyIGJlaGF2aW9yLiBUaGlzIGludmVzdGlnYXRpb24gaXMgY3J1Y2lhbCBmb3IgdW5kZXJzdGFuZGluZyBob3cgdG8gcHJvcGVybHkgY29uZmlndXJlIHRoZXNlIGFzcGVjdHMgd2l0aGluIHZhcmlvdXMga2VybmVsIGJ1aWxkcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNyAwNzoyNTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtDT05GSUdfTFJVX0dFTiYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9mb2xpby5jPTMyMz1zdGF0aWMgdm9pZCBfX2xydV9jYWNoZV9hY3RpdmF0ZV9mb2xpbyhzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuLS1cbm1tL2ZvbGlvLmMtMzUyLVxubW0vZm9saW8uYzozNTM6I2lmZGVmIENPTkZJR19MUlVfR0VOXG5tbS9mb2xpby5jLTM1NC1cbi0tXG5tbS9mb2xpby5jPTM4MT1zdGF0aWMgYm9vbCBscnVfZ2VuX2NsZWFyX3JlZnMoc3RydWN0IGZvbGlvICpmb2xpbylcbi0tXG5tbS9mb2xpby5jLTM5OS1cbm1tL2ZvbGlvLmM6NDAwOiNlbHNlIC8qICFDT05GSUdfTFJVX0dFTiAqL1xubW0vZm9saW8uYy00MDEtXG4tLVxubW0vZm9saW8uYz00MDY9c3RhdGljIGJvb2wgbHJ1X2dlbl9jbGVhcl9yZWZzKHN0cnVjdCBmb2xpbyAqZm9saW8pXG4tLVxubW0vZm9saW8uYy00MTAtXG5tbS9mb2xpby5jOjQxMTojZW5kaWYgLyogQ09ORklHX0xSVV9HRU4gKi9cbm1tL2ZvbGlvLmMtNDEyLVxuLS1cbm1tL21lbWNvbnRyb2wuYz00NjgwPXN0YXRpYyB2b2lkIG1lbV9jZ3JvdXBfZXhpdChzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhc2spXG4tLVxubW0vbWVtY29udHJvbC5jLTQ2OTYtXG5tbS9tZW1jb250cm9sLmM6NDY5NzojaWZkZWYgQ09ORklHX0xSVV9HRU5cbm1tL21lbWNvbnRyb2wuYy00Njk4LXN0YXRpYyB2b2lkIG1lbV9jZ3JvdXBfbHJ1X2dlbl9hdHRhY2goc3RydWN0IGNncm91cF90YXNrc2V0ICp0c2V0KVxuLS1cbm1tL21lbWNvbnRyb2wuYz00NzE2PXN0YXRpYyB2b2lkIG1lbV9jZ3JvdXBfbHJ1X2dlbl9hdHRhY2goc3RydWN0IGNncm91cF90YXNrc2V0ICp0c2V0KSB7fVxubW0vbWVtY29udHJvbC5jOjQ3MTc6I2VuZGlmIC8qIENPTkZJR19MUlVfR0VOICovXG5tbS9tZW1jb250cm9sLmMtNDcxOC1cbi0tXG5tbS9tZW1jb250cm9sLmM9NTc0Nj1zdGF0aWMgdm9pZCBfX2luaXQgbWVtY2dfc3RydWN0X2NoZWNrKHZvaWQpXG4tLVxubW0vbWVtY29udHJvbC5jLTU3OTAtI2VuZGlmXG5tbS9tZW1jb250cm9sLmM6NTc5MTojaWZkZWYgQ09ORklHX0xSVV9HRU5fV0FMS1NfTU1VXG5tbS9tZW1jb250cm9sLmMtNTc5Mi1cdENBQ0hFTElORV9BU1NFUlRfR1JPVVBfTUVNQkVSKHN0cnVjdCBtZW1fY2dyb3VwLCBtZW1jZ19jb2xkLFxuLS1cbm1tL21lbW9yeS5jPTY2OTQ9c3RhdGljIGlubGluZSB2b2lkIG1tX2FjY291bnRfZmF1bHQoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHN0cnVjdCBwdF9yZWdzICpyZWdzLFxuLS1cbm1tL21lbW9yeS5jLTY3NDYtXG5tbS9tZW1vcnkuYzo2NzQ3OiNpZmRlZiBDT05GSUdfTFJVX0dFTlxubW0vbWVtb3J5LmMtNjc0OC1zdGF0aWMgdm9pZCBscnVfZ2VuX2VudGVyX2ZhdWx0KHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKVxuLS1cbm1tL21lbW9yeS5jPTY3NjM9c3RhdGljIHZvaWQgbHJ1X2dlbl9leGl0X2ZhdWx0KHZvaWQpXG4tLVxubW0vbWVtb3J5LmMtNjc2NS19XG5tbS9tZW1vcnkuYzo2NzY2OiNlbmRpZiAvKiBDT05GSUdfTFJVX0dFTiAqL1xubW0vbWVtb3J5LmMtNjc2Ny1cbi0tXG5tbS92bXNjYW4uYz04NDc9ZW51bSBmb2xpb19yZWZlcmVuY2VzIHtcbi0tXG5tbS92bXNjYW4uYy04NTItXG5tbS92bXNjYW4uYzo4NTM6I2lmZGVmIENPTkZJR19MUlVfR0VOXG5tbS92bXNjYW4uYy04NTQtLypcbi0tXG5tbS92bXNjYW4uYz04ODU9c3RhdGljIGJvb2wgbHJ1X2dlbl9zZXRfcmVmcyhzdHJ1Y3QgZm9saW8gKmZvbGlvLCBjb25zdCB2bWFfZmxhZ3NfdCAqdm1hX2ZsYWdzKVxuLS1cbm1tL3Ztc2Nhbi5jLTg4OC19XG5tbS92bXNjYW4uYzo4ODk6I2VuZGlmIC8qIENPTkZJR19MUlVfR0VOICovXG5tbS92bXNjYW4uYy04OTAtXG4tLVxubW0vdm1zY2FuLmM9MjcwOD1zdGF0aWMgYm9vbCBjYW5fYWdlX2Fub25fcGFnZXMoc3RydWN0IGxydXZlYyAqbHJ1dmVjLFxuLS1cbm1tL3Ztc2Nhbi5jLTI3MTktXG5tbS92bXNjYW4uYzoyNzIwOiNpZmRlZiBDT05GSUdfTFJVX0dFTlxubW0vdm1zY2FuLmMtMjcyMS1cbm1tL3Ztc2Nhbi5jPTI3MjI9REVGSU5FX1NUQVRJQ19LRVlfRkFMU0UobHJ1X3N3aXRjaCk7XG5tbS92bXNjYW4uYzoyNzIzOiNpZmRlZiBDT05GSUdfTFJVX0dFTl9FTkFCTEVEXG5tbS92bXNjYW4uYy0yNzI0LURFRklORV9TVEFUSUNfS0VZX0FSUkFZX1RSVUUobHJ1X2dlbl9jYXBzLCBOUl9MUlVfR0VOX0NBUFMpO1xuLS1cbm1tL3Ztc2Nhbi5jPTI5MDg9c3RhdGljIHZvaWQgcmVzZXRfYmxvb21fZmlsdGVyKHN0cnVjdCBscnVfZ2VuX21tX3N0YXRlICptbV9zdGF0ZSwgdW5zaWduZWQgbG9uZyBzZXEpXG4tLVxubW0vdm1zY2FuLmMtMjkyNy1cbm1tL3Ztc2Nhbi5jOjI5Mjg6I2lmZGVmIENPTkZJR19MUlVfR0VOX1dBTEtTX01NVVxubW0vdm1zY2FuLmMtMjkyOS1cbi0tXG5tbS92bXNjYW4uYz0zMDM3PXZvaWQgbHJ1X2dlbl9taWdyYXRlX21tKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tKVxuLS1cbm1tL3Ztc2Nhbi5jLTMwNjUtXG5tbS92bXNjYW4uYzozMDY2OiNlbHNlIC8qICFDT05GSUdfTFJVX0dFTl9XQUxLU19NTVUgKi9cbm1tL3Ztc2Nhbi5jLTMwNjctXG4tLVxubW0vdm1zY2FuLmM9NjA1ND1sYXRlX2luaXRjYWxsKGluaXRfbHJ1X2dlbik7XG5tbS92bXNjYW4uYy02MDU1LVxubW0vdm1zY2FuLmM6NjA1NjojZWxzZSAvKiAhQ09ORklHX0xSVV9HRU4gKi9cbm1tL3Ztc2Nhbi5jLTYwNTctXG4tLVxubW0vdm1zY2FuLmM9NjA2OD1zdGF0aWMgdm9pZCBscnVfZ2VuX3Nocmlua19ub2RlKHN0cnVjdCBwZ2xpc3RfZGF0YSAqcGdkYXQsIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjKVxuLS1cbm1tL3Ztc2Nhbi5jLTYwNzItXG5tbS92bXNjYW4uYzo2MDczOiNlbmRpZiAvKiBDT05GSUdfTFJVX0dFTiAqL1xubW0vdm1zY2FuLmMtNjA3NC1cbi0tXG5tbS93b3JraW5nc2V0LmM9MjEzPXN0YXRpYyB2b2lkIHVucGFja19zaGFkb3codm9pZCAqc2hhZG93LCBpbnQgKm1lbWNnaWRwLCBwZ19kYXRhX3QgKipwZ2RhdCxcbi0tXG5tbS93b3JraW5nc2V0LmMtMjMyLVxubW0vd29ya2luZ3NldC5jOjIzMzojaWZkZWYgQ09ORklHX0xSVV9HRU5cbm1tL3dvcmtpbmdzZXQuYy0yMzQtXG4tLVxubW0vd29ya2luZ3NldC5jPTI5Mj1zdGF0aWMgdm9pZCBscnVfZ2VuX3JlZmF1bHQoc3RydWN0IGZvbGlvICpmb2xpbywgdm9pZCAqc2hhZG93KVxuLS1cbm1tL3dvcmtpbmdzZXQuYy0zMzYtXG5tbS93b3JraW5nc2V0LmM6MzM3OiNlbHNlIC8qICFDT05GSUdfTFJVX0dFTiAqL1xubW0vd29ya2luZ3NldC5jLTMzOC1cbi0tXG5tbS93b3JraW5nc2V0LmM9MzUwPXN0YXRpYyB2b2lkIGxydV9nZW5fcmVmYXVsdChzdHJ1Y3QgZm9saW8gKmZvbGlvLCB2b2lkICpzaGFkb3cpXG4tLVxubW0vd29ya2luZ3NldC5jLTM1My1cbm1tL3dvcmtpbmdzZXQuYzozNTQ6I2VuZGlmIC8qIENPTkZJR19MUlVfR0VOICovXG5tbS93b3JraW5nc2V0LmMtMzU1LVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDA3OjI1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDcyMzcKCQkJCQkJCW91dHB1dDogMjcKCQkJCQkJCXRob3VnaHRzOiA0MgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipDaGVja2luZyBLY29uZmlnIGZvciBMUlUgR2VuZXJhdGlvbiBDb25maWd1cmF0aW9uKioKCk9rYXksIHNvIEkgbmVlZCB0byByZWZyZXNoIG15IG1lbW9yeSBvbiBob3cgdGhpcyBMUlUgZ2VuZXJhdGlvbiBmZWF0dXJlIGlzIGNvbmZpZ3VyZWQuIEZpcnN0LCBJJiMzOTttIGdvaW5nIHRvIHF1aWNrbHkgY2hlY2sgdGhlIEtjb25maWcgZmlsZXMgZm9yIHRoZSBvcHRpb25zIEkga25vdywgYExSVV9HRU5gIGFuZCBgTFJVX0dFTl9FTkFCTEVEYC4gVGhhdCYjMzk7cyB3aGVyZSBJIHdvdWxkIGV4cGVjdCB0byBmaW5kIHRoZSByZWxldmFudCBzZXR0aW5ncy4gVGhlbiwgdG8gbWFrZSBzdXJlIEkmIzM5O20gbG9va2luZyBhdCB0aGUgcmlnaHQgZmlsZXMsIEkgd2lsbCB1c2UgYGdyZXBgIHRvIHNlYXJjaCBmb3IgYGNvbmZpZyBMUlVfR0VOYCB3aXRoaW4gYG1tL0tjb25maWdgLiBUaGF0IHNob3VsZCBnaXZlIG1lIGEgcXVpY2sgaGl0LCB0ZWxsaW5nIG1lIHRoZSBjb25maWcgdmFyaWFibGUgbmFtZSBhbmQgcHJvYmFibHkgaXRzIGRlc2NyaXB0aW9uLCBhbmQgaGVscCBlbnN1cmUgSSYjMzk7bSBuYXZpZ2F0aW5nIHRoZSBjb3JyZWN0IEtjb25maWcgc3RydWN0dXJlLiBUaGlzIGlzIGp1c3QgYSBwcmVsaW1pbmFyeSBzY2FuIGJlZm9yZSBJIGRpdmUgZGVlcGVyIGludG8gdGhlIGNvZGUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDA3OjI1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBMUlVfR0VOJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL0tjb25maWc9MTM4Nz1jb25maWcgUFRFX01BUktFUl9VRkZEX1dQXG4tLVxubW0vS2NvbmZpZy0xMzk3LSMgbXVsdGktZ2VuIExSVSB7XG5tbS9LY29uZmlnOjEzOTg6Y29uZmlnIExSVV9HRU5cbm1tL0tjb25maWctMTM5OS1cdGJvb2wgXCYjMzQ7TXVsdGktR2VuIExSVVwmIzM0O1xuLS1cbm1tL0tjb25maWctMTQwNi1cbm1tL0tjb25maWc6MTQwNzpjb25maWcgTFJVX0dFTl9FTkFCTEVEXG5tbS9LY29uZmlnLTE0MDgtXHRib29sIFwmIzM0O0VuYWJsZSBieSBkZWZhdWx0XCYjMzQ7XG4tLVxubW0vS2NvbmZpZy0xNDEyLVxubW0vS2NvbmZpZzoxNDEzOmNvbmZpZyBMUlVfR0VOX1NUQVRTXG5tbS9LY29uZmlnLTE0MTQtXHRib29sIFwmIzM0O0Z1bGwgc3RhdHMgZm9yIGRlYnVnZ2luZ1wmIzM0O1xuLS1cbm1tL0tjb25maWctMTQyMS1cbm1tL0tjb25maWc6MTQyMjpjb25maWcgTFJVX0dFTl9XQUxLU19NTVVcbm1tL0tjb25maWctMTQyMy1cdGRlZl9ib29sIHlcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDcgMDc6MjU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNzcwNQoJCQkJCQkJb3V0cHV0OiAzMwoJCQkJCQkJdGhvdWdodHM6IDIyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIGEgc3VtbWFyeSBvZiBteSB0aG91Z2h0IHByb2Nlc3M6CgoqKkRpdmluZyBpbnRvIHRoZSBLZXJuZWwgQ29uZmlndXJhdGlvbiBMYW5kc2NhcGUqKgoKT2theSwgc28gSSBuZWVkIHRvIHVuZGVyc3RhbmQgYSBzcGVjaWZpYyBhc3BlY3Qgb2YgdGhpcyBjb25maWd1cmF0aW9uLiBNeSBpbW1lZGlhdGUgaW5zdGluY3QgaXMgdG8ganVtcCBpbnRvIHRoZSBgbW0vS2NvbmZpZ2AgZmlsZS4gSSYjMzk7bSB0aGlua2luZywgYmFzZWQgb24gZXhwZXJpZW5jZSwgdGhhdCBhcm91bmQgbGluZSAxMzk4LCBJJiMzOTttIGxpa2VseSB0byBmaW5kIHRoZSByZWxldmFudCBzZWN0aW9uIGNvbnRhaW5pbmcgdGhlIGRlcGVuZGVuY2llcywgZnVydGhlciBkZXRhaWxzLCBhbmQgcGVyaGFwcyBzb21lIGhlbHBmdWwgY29tbWVudHMgYWJvdXQgd2hhdGV2ZXIgaXQgaXMgSSYjMzk7bSBjdXJyZW50bHkgaW52ZXN0aWdhdGluZy4gVGltZSB0byBjaGVjayB0aGVyZSBkaXJlY3RseS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDcgMDc6MjU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDttbS9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTM5NSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA0MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsxMzk1Olx0XHQgIGZpbGUtYmFja2VkIG1lbW9yeSB0eXBlcyBsaWtlIHNobWVtIGFuZCBodWdldGxiZnMuXG4xMzk2Olx0XG4xMzk3Olx0IyBtdWx0aS1nZW4gTFJVIHtcbjEzOTg6XHRjb25maWcgTFJVX0dFTlxuMTM5OTpcdFx0Ym9vbCBcJiMzNDtNdWx0aS1HZW4gTFJVXCYjMzQ7XG4xNDAwOlx0XHRkZXBlbmRzIG9uIE1NVVxuMTQwMTpcdFx0IyBtYWtlIHN1cmUgZm9saW8tXHUwMDNlZmxhZ3MgaGFzIGVub3VnaCBzcGFyZSBiaXRzXG4xNDAyOlx0XHRkZXBlbmRzIG9uIDY0QklUIHx8ICFTUEFSU0VNRU0gfHwgU1BBUlNFTUVNX1ZNRU1NQVBcbjE0MDM6XHRcdGhlbHBcbjE0MDQ6XHRcdCAgQSBoaWdoIHBlcmZvcm1hbmNlIExSVSBpbXBsZW1lbnRhdGlvbiB0byBvdmVyY29tbWl0IG1lbW9yeS4gU2VlXG4xNDA1Olx0XHQgIERvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUvbW0vbXVsdGlnZW5fbHJ1LnJzdCBmb3IgZGV0YWlscy5cbjE0MDY6XHRcbjE0MDc6XHRjb25maWcgTFJVX0dFTl9FTkFCTEVEXG4xNDA4Olx0XHRib29sIFwmIzM0O0VuYWJsZSBieSBkZWZhdWx0XCYjMzQ7XG4xNDA5Olx0XHRkZXBlbmRzIG9uIExSVV9HRU5cbjE0MTA6XHRcdGhlbHBcbjE0MTE6XHRcdCAgVGhpcyBvcHRpb24gZW5hYmxlcyB0aGUgbXVsdGktZ2VuIExSVSBieSBkZWZhdWx0LlxuMTQxMjpcdFxuMTQxMzpcdGNvbmZpZyBMUlVfR0VOX1NUQVRTXG4xNDE0Olx0XHRib29sIFwmIzM0O0Z1bGwgc3RhdHMgZm9yIGRlYnVnZ2luZ1wmIzM0O1xuMTQxNTpcdFx0ZGVwZW5kcyBvbiBMUlVfR0VOXG4xNDE2Olx0XHRoZWxwXG4xNDE3Olx0XHQgIERvIG5vdCBlbmFibGUgdGhpcyBvcHRpb24gdW5sZXNzIHlvdSBwbGFuIHRvIGxvb2sgYXQgaGlzdG9yaWNhbCBzdGF0c1xuMTQxODpcdFx0ICBmcm9tIGV2aWN0ZWQgZ2VuZXJhdGlvbnMgZm9yIGRlYnVnZ2luZyBwdXJwb3NlLlxuMTQxOTpcdFxuMTQyMDpcdFx0ICBUaGlzIG9wdGlvbiBoYXMgYSBwZXItbWVtY2cgYW5kIHBlci1ub2RlIG1lbW9yeSBvdmVyaGVhZC5cbjE0MjE6XHRcbjE0MjI6XHRjb25maWcgTFJVX0dFTl9XQUxLU19NTVVcbjE0MjM6XHRcdGRlZl9ib29sIHlcbjE0MjQ6XHRcdGRlcGVuZHMgb24gTFJVX0dFTiBcdTAwMjZcdTAwMjYgQVJDSF9IQVNfSFdfUFRFX1lPVU5HXG4xNDI1Olx0IyB9XG4xNDI2Olx0XG4xNDI3Olx0Y29uZmlnIExPQ0tfTU1fQU5EX0ZJTkRfVk1BXG4xNDI4Olx0XHRib29sXG4xNDI5Olx0XHRkZXBlbmRzIG9uICFTVEFDS19HUk9XU1VQXG4xNDMwOlx0XG4xNDMxOlx0Y29uZmlnIElPTU1VX01NX0RBVEFcbjE0MzI6XHRcdGJvb2xcbjE0MzM6XHRcbjE0MzQ6XHRjb25maWcgRVhFQ01FTVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNyAwNzoyNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA4NDIxCgkJCQkJCQlvdXRwdXQ6IDI5CgkJCQkJCQl0aG91Z2h0czogMzE5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkRpdmluZyBpbnRvIGBtbS92bXNjYW4uY2AgYW5kIE1HTFJVIFBhZ2UgUmVjbGFpbSoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgYG1tL3Ztc2Nhbi5jYCwgd2hpY2gsIGFzIHdlIGtub3csIGlzIHRoZSBoZWFydCBvZiB0aGUga2VybmVsJiMzOTtzIG1lbW9yeSBtYW5hZ2VtZW50LCBhbmQgc3BlY2lmaWNhbGx5IGRlYWxpbmcgd2l0aCB0aGUgTXVsdGktR2VuIExSVSAoTUdMUlUpIGltcGxlbWVudGF0aW9uIGZvciBwYWdlIHJlY2xhaW0gYW5kIGFnaW5nLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0IHRoaXMgZGlmZiBpcyBkb2luZyBhbmQgdGhlIHJhdGlvbmFsZSBiZWhpbmQgaXQuCgpUaGUgZGlmZiBpdHNlbGYgaXMgcHJldHR5IGNvbmNpc2UuIEl0IHNlZW1zIHRvIGJlIG1vZGlmeWluZyBob3cgZm9saW9zIGFyZSBoYW5kbGVkIGR1cmluZyBldmljdGlvbi4gQmVmb3JlIHRoZSBjaGFuZ2UsIGlmIGEgZm9saW8mIzM5O3Mgc2VxdWVuY2UgbnVtYmVyIG1hdGNoZWQgdGhlIG1pbmltdW0gc2VxdWVuY2UgZm9yIGEgcGFydGljdWxhciB0eXBlLCBpdCB3YXMgKmltcGxpY2l0bHkqIG1hZGUgYWN0aXZlICphbmQqIGl0cyBMUlUgcmVmZXJlbmNlcyB3ZXJlIHNldCB0byB6ZXJvLiBOb3csIHRoZSBjb2RlIGV4cGxpY2l0bHkgc2V0cyB0aGUgZm9saW8gYXMgYWN0aXZlLCBhbmQgdGhlbiAqZXhwbGljaXRseSogc2V0cyB0aGUgTFJVIHJlZmVyZW5jZXMgdG8gemVybywgcmVnYXJkbGVzcyBvZiB0aGUgc2VxdWVuY2UgbnVtYmVyLiAKClRoZSBpbnRlcmVzdGluZyBwYXJ0IGlzIHRoZSBjb21tZW50OiAqJiMzNDtTZWUgdGhlIGNvbW1lbnRzIG9uIExSVV9SRUZTX0ZMQUdTJiMzNDsqLiBTbywgdGhlcmUmIzM5O3Mgb2J2aW91c2x5IGEgYml0IG9mIGJhY2tncm91bmQgb3IgY29udGV4dCBoZXJlIHRoYXQgSSBuZWVkIHRvIHVuZGVyc3RhbmQuIEkmIzM5O20gZ29pbmcgdG8gaGF2ZSB0byBkaWcgaW50byB0aGUgY29tbWVudHMgYXJvdW5kIGBMUlVfUkVGU19GTEFHU2AgaW4gYG1tL3Ztc2Nhbi5jYCBvciBlbHNld2hlcmUgaW4gdGhlIGNvZGViYXNlIHRvIHVuZGVyc3RhbmQgdGhlIGltcGxpY2F0aW9ucyBvZiB0aGlzIGNoYW5nZS4gSXQgc2VlbXMgdG8gYmUgYSBzdWJ0bGUgYnV0IHBvdGVudGlhbGx5IGltcG9ydGFudCBhbHRlcmF0aW9uIGluIGhvdyB0aGUgTUdMUlUgYWxnb3JpdGhtIGFnZXMgYW5kIHJlY2xhaW1zIHBhZ2VzLiBJJiMzOTtsbCBuZWVkIHRvIHNlZSBpZiBpdCBpcyByZWxhdGVkIHRvIGEgc3VidGxlIGJ1ZyBmaXgsIG9yIG1heWJlIGEgcGVyZm9ybWFuY2Ugb3B0aW1pemF0aW9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNyAwNzoyNTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtMUlVfUkVGU19GTEFHUyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9mb2xpby5jPTM1NT1zdGF0aWMgdm9pZCBscnVfZ2VuX2luY19yZWZzKHN0cnVjdCBmb2xpbyAqZm9saW8pXG4tLVxubW0vZm9saW8uYy0zNjItXG5tbS9mb2xpby5jOjM2MzpcdC8qIHNlZSB0aGUgY29tbWVudCBvbiBMUlVfUkVGU19GTEFHUyAqL1xubW0vZm9saW8uYy0zNjQtXHRpZiAoIWZvbGlvX2xydV9yZWZzKGZvbGlvKSkge1xuLS1cbm1tL3Ztc2Nhbi5jPTg2MD1zdGF0aWMgYm9vbCBscnVfZ2VuX3NldF9yZWZzKHN0cnVjdCBmb2xpbyAqZm9saW8sIGNvbnN0IHZtYV9mbGFnc190ICp2bWFfZmxhZ3MpXG5tbS92bXNjYW4uYy04NjEte1xubW0vdm1zY2FuLmM6ODYyOlx0Lyogc2VlIHRoZSBjb21tZW50IG9uIExSVV9SRUZTX0ZMQUdTICovXG5tbS92bXNjYW4uYy04NjMtXHRpZiAoIWZvbGlvX3Rlc3RfcmVmZXJlbmNlZChmb2xpbykgXHUwMDI2XHUwMDI2ICFmb2xpb190ZXN0X3dvcmtpbmdzZXQoZm9saW8pKSB7XG4tLVxubW0vdm1zY2FuLmM9MzI5Nz1zdGF0aWMgaW50IGZvbGlvX3VwZGF0ZV9nZW4oc3RydWN0IGZvbGlvICpmb2xpbywgaW50IG5ld19nZW4sIGludCAqdHlwZSxcbi0tXG5tbS92bXNjYW4uYy0zMzAzLVx0Lypcbm1tL3Ztc2Nhbi5jOjMzMDQ6XHQgKiBTZWUgdGhlIGNvbW1lbnQgb24gTFJVX1JFRlNfRkxBR1MsIGFuZCBhY3RpdmF0ZSBmaWxlLWJhY2tlZFxubW0vdm1zY2FuLmMtMzMwNS1cdCAqIGV4ZWN1dGFibGUgZm9saW9zIGFmdGVyIGZpcnN0IHVzYWdlIHRvIGF2b2lkIHR5cGljYWwgSU9cbi0tXG5tbS92bXNjYW4uYz00Nzc0PXN0YXRpYyBib29sIGlzb2xhdGVfZm9saW8oc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYylcbi0tXG5tbS92bXNjYW4uYy00Nzg3LVxubW0vdm1zY2FuLmM6NDc4ODpcdC8qIHNlZSB0aGUgY29tbWVudCBvbiBMUlVfUkVGU19GTEFHUyAqL1xubW0vdm1zY2FuLmMtNDc4OS1cdGlmICghZm9saW9fdGVzdF9yZWZlcmVuY2VkKGZvbGlvKSlcbi0tXG5tbS92bXNjYW4uYz00OTY0PXN0YXRpYyBpbnQgZXZpY3RfZm9saW9zKHVuc2lnbmVkIGxvbmcgbnJfdG9fc2Nhbiwgc3RydWN0IGxydXZlYyAqbHJ1dmVjLFxuLS1cbm1tL3Ztc2Nhbi5jLTUwMjYtXG5tbS92bXNjYW4uYzo1MDI3Olx0XHQvKiBTZWUgdGhlIGNvbW1lbnRzIG9uIExSVV9SRUZTX0ZMQUdTICovXG5tbS92bXNjYW4uYy01MDI4LVx0XHRmb2xpb19zZXRfbHJ1X3JlZnMoZm9saW8sIDApO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNyAwNzoyNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA5NjI4CgkJCQkJCQlvdXRwdXQ6IDI2CgkJCQkJCQl0aG91Z2h0czogMjM1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBNR0xSVSBFdmljdGlvbiBMb2dpYyBmb3IgRnV6emluZyBPcHBvcnR1bml0aWVzKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIEkmIzM5O20gbG9va2luZyBhdCBgZXZpY3RfZm9saW9zKClgIGluIGBtbS92bXNjYW4uY2AsIHdoaWNoLCBhcyBJIGtub3csIGlzIGEga2V5IGNvbXBvbmVudCBvZiB0aGUgTXVsdGlnZW5lcmF0aW9uYWwgTFJVIChNR0xSVSkgZXZpY3Rpb24gcHJvY2Vzcy4gU3BlY2lmaWNhbGx5LCBJJiMzOTttIG5vdGljaW5nIGEgY2hhbmdlOiBgZm9saW9fc2V0X2xydV9yZWZzKGZvbGlvLCAwKTtgIGlzIG5vdyB1bmNvbmRpdGlvbmFsbHkgY2FsbGVkIHdpdGhpbiB0aGlzIGxvb3AuIEJlZm9yZSwgaXQgd2FzIHRpZWQgdG8gYSBjb25kaXRpb25hbCBjaGVjayByZWxhdGVkIHRvIHRoZSBMUlUgc2VxdWVuY2UuCgpNeSBpbW1lZGlhdGUgdGhvdWdodCBpcywgJiMzNDtJcyB0aGlzIHJlYWNoYWJsZT8mIzM0OyBhbmQgaWYgc28sICYjMzQ7SXMgaXQgd29ydGggYSBjbG9zZXIgbG9vayBmb3IgZnV6emluZyBwb3RlbnRpYWw/JiMzNDsgVGhlIGFuc3dlciB0byB0aGUgcmVhY2hhYmlsaXR5IHF1ZXN0aW9uIGFwcGVhcnMgdG8gYmUgeWVzOyB0aGlzIGlzIGNvcmUgTU0gcGFnZSByZWNsYWltIGFuZCBNR0xSVSBldmljdGlvbiwgdHJpZ2dlcmVkIGJ5IG1lbW9yeSBwcmVzc3VyZSBvciBkdXJpbmcgbm9ybWFsIHBhZ2UgcmVjbGFpbSBvcGVyYXRpb25zLiBTbywgaXQmIzM5O3MgZGVmaW5pdGVseSBpbiB0aGUgaG90IHBhdGguCgpOb3csIHRoYXQgYnJpbmdzIHVzIHRvICYjMzQ7V29ydGhGdXp6aW5nPXRydWUuJiMzNDsgR2l2ZW4gdGhhdCB0aGlzIGlzIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQsIHNwZWNpZmljYWxseSB3aXRoaW4gYSByZWNsYWltIHBhdGgsIHRoZSBwb3RlbnRpYWwgaW1wYWN0IG9mIGlzc3VlcyBoZXJlIGlzIGhpZ2guIEl0JiMzOTtzIGRlZmluaXRlbHkgaW4gYSBzdWJzeXN0ZW0sIGBtbS9gLCB0aGF0JiMzOTtzIGtub3duIHRvIGhhdmUgaGFkIHBhc3QgaXNzdWVzIHNvIHRoaXMgZGVmaW5pdGVseSB3YXJyYW50cyBjbG9zZXIgaW5zcGVjdGlvbi4KClNvLCBsZXQmIzM5O3MgaWRlbnRpZnkgcmVsZXZhbnQgZnVuY3Rpb25zIHRoYXQgY2FsbCBgZXZpY3RfZm9saW9zYCB0byB1bmRlcnN0YW5kIHdoZXJlIHRoaXMgaXMgYmVpbmcgZXhlY3V0ZWQuIFdoYXQgZnVuY3Rpb25zIHdpdGhpbiBgbW0vdm1zY2FuLmNgIGFyZSBjYWxsaW5nIGBldmljdF9mb2xpb3NgIGFuZCB3aGF0IHN1YnN5c3RlbXMgd291bGQgYmUgaW1wYWN0ZWQgaWYgdGhlcmUgYXJlIGlzc3Vlcz8KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDcgMDc6MjU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7ZXZpY3RfZm9saW9zJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL3Ztc2Nhbi5jPTQ5MjA9c3RhdGljIGludCBpc29sYXRlX2ZvbGlvcyh1bnNpZ25lZCBsb25nIG5yX3RvX3NjYW4sIHN0cnVjdCBscnV2ZWMgKmxydXZlYyxcbi0tXG5tbS92bXNjYW4uYy00OTYzLVxubW0vdm1zY2FuLmM6NDk2NDpzdGF0aWMgaW50IGV2aWN0X2ZvbGlvcyh1bnNpZ25lZCBsb25nIG5yX3RvX3NjYW4sIHN0cnVjdCBscnV2ZWMgKmxydXZlYyxcbm1tL3Ztc2Nhbi5jLTQ5NjUtXHRcdFx0c3RydWN0IHNjYW5fY29udHJvbCAqc2MsIGludCBzd2FwcGluZXNzKVxuLS1cbm1tL3Ztc2Nhbi5jPTUxNDQ9c3RhdGljIGJvb2wgdHJ5X3RvX3Nocmlua19scnV2ZWMoc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYylcbi0tXG5tbS92bXNjYW4uYy01MTY3LVx0XHRucl9iYXRjaCA9IG1pbihucl90b19zY2FuLCBNSU5fTFJVX0JBVENIKTtcbm1tL3Ztc2Nhbi5jOjUxNjg6XHRcdGRlbHRhID0gZXZpY3RfZm9saW9zKG5yX2JhdGNoLCBscnV2ZWMsIHNjLCBzd2FwcGluZXNzKTtcbm1tL3Ztc2Nhbi5jLTUxNjktXHRcdGlmICghZGVsdGEpXG4tLVxubW0vdm1zY2FuLmM9NTc4NT1zdGF0aWMgaW50IHJ1bl9ldmljdGlvbihzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIHVuc2lnbmVkIGxvbmcgc2VxLCBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYyxcbi0tXG5tbS92bXNjYW4uYy01ODA1LVx0XHRucl9iYXRjaCA9IG1pbihucl90b19yZWNsYWltIC0gc2MtXHUwMDNlbnJfcmVjbGFpbWVkLCBNQVhfTFJVX0JBVENIKTtcbm1tL3Ztc2Nhbi5jOjU4MDY6XHRcdGlmICghZXZpY3RfZm9saW9zKG5yX2JhdGNoLCBscnV2ZWMsIHNjLCBzd2FwcGluZXNzKSlcbm1tL3Ztc2Nhbi5jLTU4MDctXHRcdFx0cmV0dXJuIDA7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDA3OjI1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEwNTk4CgkJCQkJCQlvdXRwdXQ6IDQ5CgkJCQkJCQl0aG91Z2h0czogMTU1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgYGV2aWN0X2ZvbGlvc2AgRnVuY3Rpb24qKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gSSYjMzk7bSBsb29raW5nIGF0IGBldmljdF9mb2xpb3NgLCBhbmQgaW1tZWRpYXRlbHkgSSBub3RlIGl0JiMzOTtzIGEgc3RhdGljIGZ1bmN0aW9uIHJlc2lkaW5nIGluIGBtbS92bXNjYW4uY2AuIEl0JiMzOTtzIHByZXR0eSBzdWJzdGFudGlhbCwgcm91Z2hseSBhIGh1bmRyZWQgbGluZXMsIGludm9sdmluZyBsb29wcyBhbmQgY2FsbHMgdG8gYHNocmlua19mb2xpb19saXN0YC4gR2l2ZW4gaXRzIHNpemUgYW5kIHN0YXRpYyBuYXR1cmUsIGl0JiMzOTtzIGhpZ2hseSB1bmxpa2VseSB0byBiZSBpbmxpbmVkLCBhbHRob3VnaCBpZiB0aGUgc3ltYm9sIGlzIHJldGFpbmVkIGl0IGNhbiBiZSB0YXJnZXRlZC4gU28sIG15IG5leHQgdGhvdWdodCBpcywgd2hvJiMzOTtzICpjYWxsaW5nKiB0aGlzIHRoaW5nPwoKTGV0JiMzOTtzIHNlZTogYHRyeV90b19zaHJpbmtfbHJ1dmVjYCwgYHJ1bl9ldmljdGlvbmAsIGFuZCBgbHJ1X2dlbl9zaHJpbmtfbHJ1dmVjYCBhbmQgYGxydV9nZW5fc2hyaW5rX25vZGVgLiBOb3cgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGJyb2FkZXIgY29udGV4dC4gSSYjMzk7bSBnb2luZyB0byBsb29rIGF0IHRoZSBjYWxsZXJzIG9mIGBydW5fZXZpY3Rpb25gIGFuZCBgdHJ5X3RvX3Nocmlua19scnV2ZWNgIHRvIGdldCBhIGJldHRlciBzZW5zZSBvZiB0aGUgb3ZlcmFsbCBtZW1vcnkgbWFuYWdlbWVudCBmbG93IGFuZCBob3cgYGV2aWN0X2ZvbGlvc2AgZml0cyB3aXRoaW4gaXQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDA3OjI1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0OyhydW5fZXZpY3Rpb258dHJ5X3RvX3Nocmlua19scnV2ZWN8bHJ1X2dlbl9zaHJpbmspJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vdm1zY2FuLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vdm1zY2FuLmM9NTEwOT1zdGF0aWMgYm9vbCBzaG91bGRfYWJvcnRfc2NhbihzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjKVxuLS1cbm1tL3Ztc2Nhbi5jLTUxNDMtICovXG5tbS92bXNjYW4uYzo1MTQ0OnN0YXRpYyBib29sIHRyeV90b19zaHJpbmtfbHJ1dmVjKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgc3RydWN0IHNjYW5fY29udHJvbCAqc2MpXG5tbS92bXNjYW4uYy01MTQ1LXtcbi0tXG5tbS92bXNjYW4uYz01MTg5PXN0YXRpYyBpbnQgc2hyaW5rX29uZShzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjKVxuLS1cbm1tL3Ztc2Nhbi5jLTUyMDgtXG5tbS92bXNjYW4uYzo1MjA5Olx0bmVlZF9yb3RhdGUgPSB0cnlfdG9fc2hyaW5rX2xydXZlYyhscnV2ZWMsIHNjKTtcbm1tL3Ztc2Nhbi5jLTUyMTAtXG4tLVxubW0vdm1zY2FuLmM9NTIzMD1zdGF0aWMgdm9pZCBzaHJpbmtfbWFueShzdHJ1Y3QgcGdsaXN0X2RhdGEgKnBnZGF0LCBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYylcbi0tXG5tbS92bXNjYW4uYy01Mjk5LVxubW0vdm1zY2FuLmM6NTMwMDpzdGF0aWMgdm9pZCBscnVfZ2VuX3Nocmlua19scnV2ZWMoc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYylcbm1tL3Ztc2Nhbi5jLTUzMDEte1xuLS1cbm1tL3Ztc2Nhbi5jLTUzMTItXG5tbS92bXNjYW4uYzo1MzEzOlx0aWYgKHRyeV90b19zaHJpbmtfbHJ1dmVjKGxydXZlYywgc2MpKVxubW0vdm1zY2FuLmMtNTMxNC1cdFx0bHJ1X2dlbl9yb3RhdGVfbWVtY2cobHJ1dmVjLCBNRU1DR19MUlVfWU9VTkcpO1xuLS1cbm1tL3Ztc2Nhbi5jLTUzMjAtXG5tbS92bXNjYW4uYzo1MzIxOnN0YXRpYyB2b2lkIGxydV9nZW5fc2hyaW5rX25vZGUoc3RydWN0IHBnbGlzdF9kYXRhICpwZ2RhdCwgc3RydWN0IHNjYW5fY29udHJvbCAqc2MpXG5tbS92bXNjYW4uYy01MzIyLXtcbi0tXG5tbS92bXNjYW4uYz01Nzc0PXN0YXRpYyBpbnQgcnVuX2FnaW5nKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgdW5zaWduZWQgbG9uZyBzZXEsXG4tLVxubW0vdm1zY2FuLmMtNTc4NC1cbm1tL3Ztc2Nhbi5jOjU3ODU6c3RhdGljIGludCBydW5fZXZpY3Rpb24oc3RydWN0IGxydXZlYyAqbHJ1dmVjLCB1bnNpZ25lZCBsb25nIHNlcSwgc3RydWN0IHNjYW5fY29udHJvbCAqc2MsXG5tbS92bXNjYW4uYy01Nzg2LVx0XHRcdGludCBzd2FwcGluZXNzLCB1bnNpZ25lZCBsb25nIG5yX3RvX3JlY2xhaW0pXG4tLVxubW0vdm1zY2FuLmM9NTgxNT1zdGF0aWMgaW50IHJ1bl9jbWQoY2hhciBjbWQsIHU2NCBtZW1jZ19pZCwgaW50IG5pZCwgdW5zaWduZWQgbG9uZyBzZXEsXG4tLVxubW0vdm1zY2FuLmMtNTg0Ni1cdGNhc2UgJiMzOTstJiMzOTs6XG5tbS92bXNjYW4uYzo1ODQ3Olx0XHRlcnIgPSBydW5fZXZpY3Rpb24obHJ1dmVjLCBzZXEsIHNjLCBzd2FwcGluZXNzLCBvcHQpO1xubW0vdm1zY2FuLmMtNTg0OC1cdFx0YnJlYWs7XG4tLVxubW0vdm1zY2FuLmM9NjA1OD1zdGF0aWMgdm9pZCBscnVfZ2VuX2FnZV9ub2RlKHN0cnVjdCBwZ2xpc3RfZGF0YSAqcGdkYXQsIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjKVxuLS1cbm1tL3Ztc2Nhbi5jLTYwNjItXG5tbS92bXNjYW4uYzo2MDYzOnN0YXRpYyB2b2lkIGxydV9nZW5fc2hyaW5rX2xydXZlYyhzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjKVxubW0vdm1zY2FuLmMtNjA2NC17XG4tLVxubW0vdm1zY2FuLmMtNjA2Ny1cbm1tL3Ztc2Nhbi5jOjYwNjg6c3RhdGljIHZvaWQgbHJ1X2dlbl9zaHJpbmtfbm9kZShzdHJ1Y3QgcGdsaXN0X2RhdGEgKnBnZGF0LCBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYylcbm1tL3Ztc2Nhbi5jLTYwNjkte1xuLS1cbm1tL3Ztc2Nhbi5jPTYwNzU9c3RhdGljIHZvaWQgc2hyaW5rX2xydXZlYyhzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjKVxuLS1cbm1tL3Ztc2Nhbi5jLTYwODYtXHRpZiAoKGxydV9nZW5fZW5hYmxlZCgpIHx8IGxydV9nZW5fc3dpdGNoaW5nKCkpIFx1MDAyNlx1MDAyNiAhcm9vdF9yZWNsYWltKHNjKSkge1xubW0vdm1zY2FuLmM6NjA4NzpcdFx0bHJ1X2dlbl9zaHJpbmtfbHJ1dmVjKGxydXZlYywgc2MpO1xubW0vdm1zY2FuLmMtNjA4OC1cbi0tXG5tbS92bXNjYW4uYz02MzQ1PXN0YXRpYyB2b2lkIHNocmlua19ub2RlKHBnX2RhdGFfdCAqcGdkYXQsIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjKVxuLS1cbm1tL3Ztc2Nhbi5jLTYzNTItXHRcdG1lbXNldChcdTAwMjZzYy1cdTAwM2VuciwgMCwgc2l6ZW9mKHNjLVx1MDAzZW5yKSk7XG5tbS92bXNjYW4uYzo2MzUzOlx0XHRscnVfZ2VuX3Nocmlua19ub2RlKHBnZGF0LCBzYyk7XG5tbS92bXNjYW4uYy02MzU0LVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNyAwNzoyNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMjE0NgoJCQkJCQkJb3V0cHV0OiAyOAoJCQkJCQkJdGhvdWdodHM6IDI2OAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBbmFseXNpcyBvZiBNR0xSVSBSZWNsYWltIEZ1bmN0aW9ucyoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBJJiMzOTttIGxvb2tpbmcgYXQgYSBzZXQgb2YgZnVuY3Rpb25zIHRoYXQgc2VlbSByZWxhdGVkIHRvIG1lbW9yeSByZWNsYWltLCBhbmQgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlaXIgcm9sZXMgd2l0aGluIHRoZSBNR0xSVSBmcmFtZXdvcmsuIFRoZSBgRm9jdXNTeW1ib2xzYCBoZXJlIGFyZSBxdWl0ZSBzcGVjaWZpYy4gSSBzZWU6CgoqICAgYGV2aWN0X2ZvbGlvc2A6IFRoaXMgb25lIGltbWVkaWF0ZWx5IGp1bXBzIG91dCBhcyBpdCYjMzk7cyB0aGUgc3BlY2lmaWMgZnVuY3Rpb24gdGhhdCYjMzk7cyBiZWVuIG1vZGlmaWVkLgoqICAgYHRyeV90b19zaHJpbmtfbHJ1dmVjYDogVGhpcyBpcyBhIGtleSBwbGF5ZXIgaW4gdGhlIHBhZ2UgcmVjbGFpbSBwYXRoLCBjYWxsaW5nIHVwb24gdGhlIGBldmljdF9mb2xpb3NgIGZ1bmN0aW9uLgoqICAgYHJ1bl9ldmljdGlvbmA6IFRoaXMgaXMgYWxzbyBhIGNhbGxlciwgYnV0IGl0IGFwcGVhcnMgdG8gYmUgcGFydCBvZiB0aGUgZGVidWcgaW50ZXJmYWNlIG9yIGFkbWluIGZ1bmN0aW9uYWxpdHksIGxpa2VseSBhY2Nlc3NlZCB0aHJvdWdoIHNvbWV0aGluZyBsaWtlIGAvc3lzL2tlcm5lbC9kZWJ1Zy9scnVfZ2VuYC4KKiAgIGBscnVfZ2VuX3Nocmlua19scnV2ZWNgOiBUaGlzIGFuZCBgbHJ1X2dlbl9zaHJpbmtfbm9kZWAgc2VlbXMgc3BlY2lhbGl6ZWQgdG8gdGhlIE11bHRpLUdlbiBMUlUgbG9naWMuCgpOb3csIHdoaWxlIGBzaHJpbmtfbm9kZWAgc2VlbXMgbGlrZSBhIG1vcmUgZ2VuZXJpYyByZWNsYWltZXIsIHRoZSBvdGhlcnMgKGBscnVfZ2VuX3Nocmlua19scnV2ZWNgLCBgdHJ5X3RvX3Nocmlua19scnV2ZWNgLCBgcnVuX2V2aWN0aW9uYCwgYW5kIGBldmljdF9mb2xpb3NgKSBhcmUgYWxsIGNsZWFybHkgTUdMUlUtc3BlY2lmaWMgcmVjbGFpbSBmdW5jdGlvbnMuIEtub3dpbmcgdGhhdCBgZXZpY3RfZm9saW9zYCBpcyB0aGUgZnVuY3Rpb24gdGhhdCYjMzk7cyBiZWVuIG1vZGlmaWVkIGlzIHBhcnRpY3VsYXJseSBpbXBvcnRhbnQuCgpUaGUgbmV4dCB0aGluZyBJIHdhbnQgdG8gdW5kZXJzdGFuZCBhcmUgdGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucy4gSXQgbG9va3MgbGlrZSBgQ09ORklHX0xSVV9HRU5gIGlzIHRoZSBtYWluIG9uZSB0aGF0IGVuYWJsZXMgTXVsdGktR2VuIExSVS4gVGhlIHF1ZXN0aW9uIEkgaGF2ZSBpcyB3aGV0aGVyIHRoZSBgQ09ORklHX0xSVV9HRU5fRU5BQkxFRGAgaXMgbmVlZGVkLCBvciBpZiBgQ09ORklHX0xSVV9HRU5gIGlzIGVub3VnaCB0byBlbmFibGUgTUdMUlUuIEkgbmVlZCB0byBkaXZlIGludG8gdGhlIGltcGxlbWVudGF0aW9uIG9mIGBscnVfZ2VuX2VuYWJsZWQoKWAgdG8gY2xhcmlmeSB0aGlzIHBvaW50LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNyAwNzoyNTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtscnVfZ2VuX2VuYWJsZWQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vZm9saW8uYz00MjY9dm9pZCBmb2xpb19tYXJrX2FjY2Vzc2VkKHN0cnVjdCBmb2xpbyAqZm9saW8pXG4tLVxubW0vZm9saW8uYy00MjktXHRcdHJldHVybjtcbm1tL2ZvbGlvLmM6NDMwOlx0aWYgKGxydV9nZW5fZW5hYmxlZCgpKSB7XG5tbS9mb2xpby5jLTQzMS1cdFx0bHJ1X2dlbl9pbmNfcmVmcyhmb2xpbyk7XG4tLVxubW0vZm9saW8uYz00NzE9dm9pZCBmb2xpb19hZGRfbHJ1KHN0cnVjdCBmb2xpbyAqZm9saW8pXG4tLVxubW0vZm9saW8uYy00ODMtXHQgKi9cbm1tL2ZvbGlvLmM6NDg0Olx0aWYgKGxydV9nZW5fZW5hYmxlZCgpIFx1MDAyNlx1MDAyNiAhZm9saW9fdGVzdF91bmV2aWN0YWJsZShmb2xpbykgXHUwMDI2XHUwMDI2XG5tbS9mb2xpby5jLTQ4NS1cdCAgICBscnVfZ2VuX2luX2ZhdWx0KCkgXHUwMDI2XHUwMDI2ICEoY3VycmVudC1cdTAwM2VmbGFncyBcdTAwMjYgUEZfTUVNQUxMT0MpKSB7XG4tLVxubW0vZm9saW8uYz01MzU9c3RhdGljIHZvaWQgbHJ1X2RlYWN0aXZhdGVfZmlsZShzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIHN0cnVjdCBmb2xpbyAqZm9saW8pXG5tbS9mb2xpby5jLTUzNi17XG5tbS9mb2xpby5jOjUzNzpcdGJvb2wgYWN0aXZlID0gZm9saW9fdGVzdF9hY3RpdmUoZm9saW8pIHx8IGxydV9nZW5fZW5hYmxlZCgpO1xubW0vZm9saW8uYy01MzgtXHRsb25nIG5yX3BhZ2VzID0gZm9saW9fbnJfcGFnZXMoZm9saW8pO1xuLS1cbm1tL2ZvbGlvLmM9NTc2PXN0YXRpYyB2b2lkIGxydV9kZWFjdGl2YXRlKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgc3RydWN0IGZvbGlvICpmb2xpbylcbi0tXG5tbS9mb2xpby5jLTU3OS1cbm1tL2ZvbGlvLmM6NTgwOlx0aWYgKGZvbGlvX3Rlc3RfdW5ldmljdGFibGUoZm9saW8pIHx8ICEoZm9saW9fdGVzdF9hY3RpdmUoZm9saW8pIHx8IGxydV9nZW5fZW5hYmxlZCgpKSlcbm1tL2ZvbGlvLmMtNTgxLVx0XHRyZXR1cm47XG4tLVxubW0vZm9saW8uYz01OTI9c3RhdGljIHZvaWQgbHJ1X2xhenlmcmVlKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgc3RydWN0IGZvbGlvICpmb2xpbylcbi0tXG5tbS9mb2xpby5jLTYwMS1cdGZvbGlvX2NsZWFyX2FjdGl2ZShmb2xpbyk7XG5tbS9mb2xpby5jOjYwMjpcdGlmIChscnVfZ2VuX2VuYWJsZWQoKSlcbm1tL2ZvbGlvLmMtNjAzLVx0XHRscnVfZ2VuX2NsZWFyX3JlZnMoZm9saW8pO1xuLS1cbm1tL2ZvbGlvLmM9NjcwPXZvaWQgZGVhY3RpdmF0ZV9maWxlX2ZvbGlvKHN0cnVjdCBmb2xpbyAqZm9saW8pXG4tLVxubW0vZm9saW8uYy02NzUtXG5tbS9mb2xpby5jOjY3NjpcdGlmIChscnVfZ2VuX2VuYWJsZWQoKSBcdTAwMjZcdTAwMjYgbHJ1X2dlbl9jbGVhcl9yZWZzKGZvbGlvKSlcbm1tL2ZvbGlvLmMtNjc3LVx0XHRyZXR1cm47XG4tLVxubW0vZm9saW8uYz02OTA9dm9pZCBmb2xpb19kZWFjdGl2YXRlKHN0cnVjdCBmb2xpbyAqZm9saW8pXG4tLVxubW0vZm9saW8uYy02OTQtXG5tbS9mb2xpby5jOjY5NTpcdGlmIChscnVfZ2VuX2VuYWJsZWQoKSA/IGxydV9nZW5fY2xlYXJfcmVmcyhmb2xpbykgOiAhZm9saW9fdGVzdF9hY3RpdmUoZm9saW8pKVxubW0vZm9saW8uYy02OTYtXHRcdHJldHVybjtcbi0tXG5tbS9tZW1jb250cm9sLmM9Mjc4PXN0YXRpYyB2b2lkIG1lbWNnX3JlcGFyZW50X29iamNncyhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpXG4tLVxubW0vbWVtY29udHJvbC5jLTI4NS1yZXRyeTpcbm1tL21lbWNvbnRyb2wuYzoyODY6XHRcdGlmIChscnVfZ2VuX2VuYWJsZWQoKSlcbm1tL21lbWNvbnRyb2wuYy0yODctXHRcdFx0bWF4X2xydV9nZW5fbWVtY2cocGFyZW50LCBuaWQpO1xuLS1cbm1tL21lbWNvbnRyb2wuYy0yOTAtXG5tbS9tZW1jb250cm9sLmM6MjkxOlx0XHRpZiAobHJ1X2dlbl9lbmFibGVkKCkpIHtcbm1tL21lbWNvbnRyb2wuYy0yOTItXHRcdFx0aWYgKCFyZWNoZWNrX2xydV9nZW5fbWF4X21lbWNnKHBhcmVudCwgbmlkKSkge1xuLS1cbm1tL3JtYXAuYz05MjA9c3RhdGljIGJvb2wgZm9saW9fcmVmZXJlbmNlZF9vbmUoc3RydWN0IGZvbGlvICpmb2xpbyxcbi0tXG5tbS9ybWFwLmMtOTgzLVx0XHQgKi9cbm1tL3JtYXAuYzo5ODQ6XHRcdGlmIChscnVfZ2VuX2VuYWJsZWQoKSBcdTAwMjZcdTAwMjYgIWxydV9nZW5fc3dpdGNoaW5nKCkgXHUwMDI2XHUwMDI2IHB2bXcucHRlKSB7XG5tbS9ybWFwLmMtOTg1LVx0XHRcdGlmIChscnVfZ2VuX2xvb2tfYXJvdW5kKFx1MDAyNnB2bXcsIG5yKSlcbi0tXG5tbS92bXNjYW4uYz04OTE9c3RhdGljIGVudW0gZm9saW9fcmVmZXJlbmNlcyBmb2xpb19jaGVja19yZWZlcmVuY2VzKHN0cnVjdCBmb2xpbyAqZm9saW8sXG4tLVxubW0vdm1zY2FuLmMtOTE1LVxubW0vdm1zY2FuLmM6OTE2Olx0aWYgKGxydV9nZW5fZW5hYmxlZCgpIFx1MDAyNlx1MDAyNiAhbHJ1X2dlbl9zd2l0Y2hpbmcoKSkge1xubW0vdm1zY2FuLmMtOTE3LVx0XHRpZiAoIXJlZmVyZW5jZWRfcHRlcylcbi0tXG5tbS92bXNjYW4uYz0yMzA4PXN0YXRpYyB2b2lkIHByZXBhcmVfc2Nhbl9jb250cm9sKHBnX2RhdGFfdCAqcGdkYXQsIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjKVxuLS1cbm1tL3Ztc2Nhbi5jLTIzMTQtXG5tbS92bXNjYW4uYzoyMzE1Olx0aWYgKGxydV9nZW5fZW5hYmxlZCgpIFx1MDAyNlx1MDAyNiAhbHJ1X2dlbl9zd2l0Y2hpbmcoKSlcbm1tL3Ztc2Nhbi5jLTIzMTYtXHRcdHJldHVybjtcbi0tXG5tbS92bXNjYW4uYz01NDY0PXN0YXRpYyB2b2lkIGxydV9nZW5fY2hhbmdlX3N0YXRlKGJvb2wgZW5hYmxlZClcbi0tXG5tbS92bXNjYW4uYy01NDc0LVxubW0vdm1zY2FuLmM6NTQ3NTpcdGlmIChlbmFibGVkID09IGxydV9nZW5fZW5hYmxlZCgpKVxubW0vdm1zY2FuLmMtNTQ3Ni1cdFx0Z290byB1bmxvY2s7XG4tLVxubW0vdm1zY2FuLmM9NTU2Mj1zdGF0aWMgc3NpemVfdCBlbmFibGVkX3N0b3JlKHN0cnVjdCBrb2JqZWN0ICprb2JqLCBzdHJ1Y3Qga29ial9hdHRyaWJ1dGUgKmF0dHIsXG4tLVxubW0vdm1zY2FuLmMtNTU4OC1cbm1tL3Ztc2Nhbi5jOjU1ODk6c3RhdGljIHN0cnVjdCBrb2JqX2F0dHJpYnV0ZSBscnVfZ2VuX2VuYWJsZWRfYXR0ciA9IF9fQVRUUl9SVyhlbmFibGVkKTtcbm1tL3Ztc2Nhbi5jLTU1OTAtXG5tbS92bXNjYW4uYz01NTkxPXN0YXRpYyBzdHJ1Y3QgYXR0cmlidXRlICpscnVfZ2VuX2F0dHJzW10gPSB7XG5tbS92bXNjYW4uYy01NTkyLVx0XHUwMDI2bHJ1X2dlbl9taW5fdHRsX2F0dHIuYXR0cixcbm1tL3Ztc2Nhbi5jOjU1OTM6XHRcdTAwMjZscnVfZ2VuX2VuYWJsZWRfYXR0ci5hdHRyLFxubW0vdm1zY2FuLmMtNTU5NC1cdE5VTExcbi0tXG5tbS92bXNjYW4uYz01OTc3PXZvaWQgbHJ1X2dlbl9pbml0X2xydXZlYyhzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMpXG4tLVxubW0vdm1zY2FuLmMtNTk4NC1cdGxydWdlbi1cdTAwM2VtYXhfc2VxID0gTUlOX05SX0dFTlMgJiM0MzsgMTtcbm1tL3Ztc2Nhbi5jOjU5ODU6XHRscnVnZW4tXHUwMDNlZW5hYmxlZCA9IGxydV9nZW5fZW5hYmxlZCgpO1xubW0vdm1zY2FuLmMtNTk4Ni1cbi0tXG5tbS92bXNjYW4uYz02MDc1PXN0YXRpYyB2b2lkIHNocmlua19scnV2ZWMoc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYylcbi0tXG5tbS92bXNjYW4uYy02MDg1LVxubW0vdm1zY2FuLmM6NjA4NjpcdGlmICgobHJ1X2dlbl9lbmFibGVkKCkgfHwgbHJ1X2dlbl9zd2l0Y2hpbmcoKSkgXHUwMDI2XHUwMDI2ICFyb290X3JlY2xhaW0oc2MpKSB7XG5tbS92bXNjYW4uYy02MDg3LVx0XHRscnVfZ2VuX3Nocmlua19scnV2ZWMobHJ1dmVjLCBzYyk7XG4tLVxubW0vdm1zY2FuLmM9NjM0NT1zdGF0aWMgdm9pZCBzaHJpbmtfbm9kZShwZ19kYXRhX3QgKnBnZGF0LCBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYylcbi0tXG5tbS92bXNjYW4uYy02MzUwLVxubW0vdm1zY2FuLmM6NjM1MTpcdGlmICgobHJ1X2dlbl9lbmFibGVkKCkgfHwgbHJ1X2dlbl9zd2l0Y2hpbmcoKSkgXHUwMDI2XHUwMDI2IHJvb3RfcmVjbGFpbShzYykpIHtcbm1tL3Ztc2Nhbi5jLTYzNTItXHRcdG1lbXNldChcdTAwMjZzYy1cdTAwM2VuciwgMCwgc2l6ZW9mKHNjLVx1MDAzZW5yKSk7XG4tLVxubW0vdm1zY2FuLmM9NjYwMj1zdGF0aWMgdm9pZCBzbmFwc2hvdF9yZWZhdWx0cyhzdHJ1Y3QgbWVtX2Nncm91cCAqdGFyZ2V0X21lbWNnLCBwZ19kYXRhX3QgKnBnZGF0KVxuLS1cbm1tL3Ztc2Nhbi5jLTY2MDYtXG5tbS92bXNjYW4uYzo2NjA3Olx0aWYgKGxydV9nZW5fZW5hYmxlZCgpIFx1MDAyNlx1MDAyNiAhbHJ1X2dlbl9zd2l0Y2hpbmcoKSlcbm1tL3Ztc2Nhbi5jLTY2MDgtXHRcdHJldHVybjtcbi0tXG5tbS92bXNjYW4uYz02OTUxPXN0YXRpYyB2b2lkIGtzd2FwZF9hZ2Vfbm9kZShzdHJ1Y3QgcGdsaXN0X2RhdGEgKnBnZGF0LCBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYylcbi0tXG5tbS92bXNjYW4uYy02OTU1LVxubW0vdm1zY2FuLmM6Njk1NjpcdGlmIChscnVfZ2VuX2VuYWJsZWQoKSB8fCBscnVfZ2VuX3N3aXRjaGluZygpKSB7XG5tbS92bXNjYW4uYy02OTU3LVx0XHRscnVfZ2VuX2FnZV9ub2RlKHBnZGF0LCBzYyk7XG4tLVxubW0vd29ya2luZ3NldC5jPTM5Mj12b2lkICp3b3JraW5nc2V0X2V2aWN0aW9uKHN0cnVjdCBmb2xpbyAqZm9saW8sIHN0cnVjdCBtZW1fY2dyb3VwICp0YXJnZXRfbWVtY2cpXG4tLVxubW0vd29ya2luZ3NldC5jLTQwNC1cbm1tL3dvcmtpbmdzZXQuYzo0MDU6XHRpZiAobHJ1X2dlbl9lbmFibGVkKCkpXG5tbS93b3JraW5nc2V0LmMtNDA2LVx0XHRyZXR1cm4gbHJ1X2dlbl9ldmljdGlvbihmb2xpbyk7XG4tLVxubW0vd29ya2luZ3NldC5jPTQzMD1ib29sIHdvcmtpbmdzZXRfdGVzdF9yZWNlbnQodm9pZCAqc2hhZG93LCBib29sIGZpbGUsIGJvb2wgKndvcmtpbmdzZXQsXG4tLVxubW0vd29ya2luZ3NldC5jLTQ0MS1cbm1tL3dvcmtpbmdzZXQuYzo0NDI6XHRpZiAobHJ1X2dlbl9lbmFibGVkKCkpIHtcbm1tL3dvcmtpbmdzZXQuYy00NDMtXHRcdGJvb2wgcmVjZW50O1xuLS1cbm1tL3dvcmtpbmdzZXQuYz01NDg9dm9pZCB3b3JraW5nc2V0X3JlZmF1bHQoc3RydWN0IGZvbGlvICpmb2xpbywgdm9pZCAqc2hhZG93KVxuLS1cbm1tL3dvcmtpbmdzZXQuYy01NTctXG5tbS93b3JraW5nc2V0LmM6NTU4Olx0aWYgKGxydV9nZW5fZW5hYmxlZCgpKSB7XG5tbS93b3JraW5nc2V0LmMtNTU5LVx0XHRscnVfZ2VuX3JlZmF1bHQoZm9saW8sIHNoYWRvdyk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDA3OjI1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE1MTU1CgkJCQkJCQlvdXRwdXQ6IDE0MAoJCQkJCQkJdGhvdWdodHM6IDI0MwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBbmFseXNpcyBvZiBNR0xSVSBDb25maWd1cmF0aW9uIGFuZCBGdXp6aW5nIFJlcXVpcmVtZW50cyoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBNR0xSVSBzZXR1cCBhbmQgbXkgaW5pdGlhbCBhc3Nlc3NtZW50IGNvbmZpcm1zIHRoYXQgYENPTkZJR19MUlVfR0VOYCBhbmQgYENPTkZJR19MUlVfR0VOX0VOQUJMRURgIGFyZSB0aGUga2V5IGNvbmZpZ3VyYXRpb25zIGhlcmUuIGBMUlVfR0VOX0VOQUJMRURgIGlzIHBhcnRpY3VsYXJseSBpbnRlcmVzdGluZyBiZWNhdXNlIGl0IHNlZW1zIHRvIGFjdGl2YXRlIE1HTFJVIGJ5IGRlZmF1bHQsIGJ5cGFzc2luZyB0aGUgbmVlZCBmb3Igc3lzZnMgaW50ZXJhY3Rpb24sIHdoaWNoIGlzIHNvbWV0aGluZyBJIG5lZWQgdG8ga2VlcCBpbiBtaW5kLgoKTm93LCBsZXQmIzM5O3MgbWFrZSBzdXJlIGV2ZXJ5dGhpbmcgY2hlY2tzIG91dCBmb3IgdGhlIGZ1enppbmcgcnVuLiBMb29rcyBsaWtlIGl0JiMzOTtzIGZsYWdnZWQgYXMgYFdvcnRoRnV6emluZzogdHJ1ZWAsIGFuZCB0aGUgcHJvdmlkZWQgcmVhc29uaW5nIHNlZW1zIHBlcmZlY3RseSBjb25jaXNlIGFuZCBsb2dpY2FsLiBUaGUgYEZvY3VzU3ltYm9sc2AgYXJlIHNwb3Qgb24g4oCTIGBldmljdF9mb2xpb3NgLCBgdHJ5X3RvX3Nocmlua19scnV2ZWNgLCBgcnVuX2V2aWN0aW9uYCwgYW5kIGBscnVfZ2VuX3Nocmlua19scnV2ZWNgLiBUaG9zZSBhcmUgdGhlIGNvcmUgZnVuY3Rpb25zIGRpcmVjdGx5IGludm9sdmVkIGluIG9yIGNvbnRhaW5pbmcgdGhlIG1vZGlmaWVkIGxvZ2ljIHdpdGhpbiBNR0xSVSYjMzk7cyBldmljdGlvbiBhbmQgcmVjbGFpbSBwYXRocywgc28gZnV6emluZyB0aGVtIGlzIGRlZmluaXRlbHkgdGhlIHJpZ2h0IGFwcHJvYWNoLgoKSSYjMzk7bGwgcXVpY2tseSBkbyBhIHNhbml0eSBjaGVjayBvbiB0aGUgY29uZmlncyBhZ2FpbiwganVzdCB0byBiZSBhYnNvbHV0ZWx5IGNlcnRhaW46ICYjMzQ7TFJVX0dFTiYjMzQ7LCAmIzM0O0xSVV9HRU5fRU5BQkxFRCYjMzQ7IOKAkyB5ZXAsIGFsbCBwcmVzZW50IGFuZCBhY2NvdW50ZWQgZm9yLiBBbmQgYSBmaW5hbCBzYW5pdHkgY2hlY2sgb24gdGhvc2UgZm9jdXMgc3ltYm9sczogJiMzNDtldmljdF9mb2xpb3MmIzM0OywgJiMzNDt0cnlfdG9fc2hyaW5rX2xydXZlYyYjMzQ7LCAmIzM0O3J1bl9ldmljdGlvbiYjMzQ7LCAmIzM0O2xydV9nZW5fc2hyaW5rX2xydXZlYyYjMzQ7IC0tIFllcCwgYWxsIG9mIHRoZW0uCgpHaXZlbiBhbGwgb2YgdGhpcywgSSYjMzk7bSBjb25maWRlbnQgaW4gdGhlIHNldHVwLiBUaW1lIHRvIHByb2NlZWQgYW5kIGNhbGwgYHNldC1yZXN1bHRzYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDcgMDc6MjU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0xSVV9HRU4mIzM0OywKICAgICYjMzQ7TFJVX0dFTl9FTkFCTEVEJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7ZXZpY3RfZm9saW9zJiMzNDssCiAgICAmIzM0O3RyeV90b19zaHJpbmtfbHJ1dmVjJiMzNDssCiAgICAmIzM0O3J1bl9ldmljdGlvbiYjMzQ7LAogICAgJiMzNDtscnVfZ2VuX3Nocmlua19scnV2ZWMmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgTXVsdGktR2VuIExSVSAoTUdMUlUpIHBhZ2UgcmVjbGFpbSBsb2dpYyBpbiBtbS92bXNjYW4uYywgZW5zdXJpbmcgZm9saW8gTFJVIHJlZmVyZW5jZXMgYXJlIHVuY29uZGl0aW9uYWxseSByZXNldCB3aGVuIGZvbGlvcyBhcmUgcHV0IGJhY2suIFRoaXMgdG91Y2hlcyBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IHBhZ2UgZXZpY3Rpb24gcGF0aHMgcmVhY2hhYmxlIGR1cmluZyBtZW1vcnkgcmVjbGFpbSB1bmRlciBNR0xSVS4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7TFJVX0dFTiYjMzQ7LAogICAgJiMzNDtMUlVfR0VOX0VOQUJMRUQmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtldmljdF9mb2xpb3MmIzM0OywKICAgICYjMzQ7dHJ5X3RvX3Nocmlua19scnV2ZWMmIzM0OywKICAgICYjMzQ7cnVuX2V2aWN0aW9uJiMzNDssCiAgICAmIzM0O2xydV9nZW5fc2hyaW5rX2xydXZlYyYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBNdWx0aS1HZW4gTFJVIChNR0xSVSkgcGFnZSByZWNsYWltIGxvZ2ljIGluIG1tL3Ztc2Nhbi5jLCBlbnN1cmluZyBmb2xpbyBMUlUgcmVmZXJlbmNlcyBhcmUgdW5jb25kaXRpb25hbGx5IHJlc2V0IHdoZW4gZm9saW9zIGFyZSBwdXQgYmFjay4gVGhpcyB0b3VjaGVzIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgcGFnZSBldmljdGlvbiBwYXRocyByZWFjaGFibGUgZHVyaW5nIG1lbW9yeSByZWNsYWltIHVuZGVyIE1HTFJVLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIzLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNyAwNzoyNTwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+SWY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDA3OjI1PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmNvcmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgcGFnZSByZWNsYWltIGxvZ2ljIGluIHRoZSBNdWx0aS1HZW4gTFJVIChNR0xSVSkgc3Vic3lzdGVtIChgbW0vdm1zY2FuLmNgKSwgc3BlY2lmaWNhbGx5IGluIGBldmljdF9mb2xpb3MoKWAuIEl0IG1vdmVzIGBmb2xpb19zZXRfbHJ1X3JlZnMoZm9saW8sIDApYCBvdXRzaWRlIG9mIGEgY29uZGl0aW9uYWwgY2hlY2sgc28gdGhhdCBMUlUgcmVmZXJlbmNlIGZsYWdzIGFyZSBjbGVhcmVkIHVuY29uZGl0aW9uYWxseSBmb3IgZm9saW9zIHJlbWFpbmluZyBvbiB0aGUgbGlzdC5cblxuVGhpcyBjaGFuZ2UgcHVyZWx5IGFmZmVjdHMgZm9saW8gbWV0YWRhdGEvZmxhZ3MgZHVyaW5nIExSVSBwYWdlIHJlY2xhaW0uIEl0IGRvZXMgbm90IGludHJvZHVjZSBvciBtb2RpZnk6XG4xLiBEYXRhIHN0cnVjdHVyZXMgY29waWVkIHRvIHVzZXIgc3BhY2Ugb3Iga2VybmVsIGluZm8tbGVha3MuXG4yLiBVbmluaXRpYWxpemVkIHZhcmlhYmxlcywgc3RydWN0IGZpZWxkcywgb3IgbWVtb3J5IGFsbG9jYXRpb25zLlxuMy4gTGVuZ3RocyBvciBib3VuZHMgY2hlY2tzIHRoYXQgY291bGQgZXhwb3NlIHVuaW5pdGlhbGl6ZWQgYnVmZmVyIG1lbW9yeS5cblxuQmVjYXVzZSB0aGVyZSBhcmUgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3Mgb3IgaW5mby1sZWFrcywgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCB3YXJyYW50ZWQuIFN0YW5kYXJkIEtBU0FOL3Nhbml0aXplciBidWlsZHMgYXJlIHN1ZmZpY2llbnQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5CmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kCmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikKZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuCgpDUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjoKLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlCiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOCiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUAogIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuCi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsCiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLgoKUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTiwKTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy4KQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWQpzZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrcwp0aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLgoKTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3QKdW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsCmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5cwp0aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZwp1bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2wKZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLApjYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy4KClNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczoKMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2IKICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHMKICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC4KMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlcwogICBvciBzdHJ1Y3QgZmllbGRzLgozLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzCiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuCjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzCiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy4KClNldCBOZWVkc0tNU0FOPWZhbHNlIElGOgotIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyCiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0CiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLgotIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkCiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLgotIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy4KClVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGUKZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5UYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NAoKRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCBhMzhlZTA5MTNiZmExMjQ0OTc5ODNiOGVjYTRhODZiNjJjOTQ2NGQwCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIE1vbiBTZXAgNyAwNzoyNToxOSAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL21tL3Ztc2Nhbi5jIGIvbW0vdm1zY2FuLmMKaW5kZXggNDBkM2YxYjQ4YTc0Yy4uNDJjMGEwOTkzOGFiMiAxMDA2NDQKLS0tIGEvbW0vdm1zY2FuLmMKJiM0MzsmIzQzOyYjNDM7IGIvbW0vdm1zY2FuLmMKQEAgLTUwMjEsMTAgJiM0Mzs1MDIxLDExIEBAIHN0YXRpYyBpbnQgZXZpY3RfZm9saW9zKHVuc2lnbmVkIGxvbmcgbnJfdG9fc2Nhbiwgc3RydWN0IGxydXZlYyAqbHJ1dmVjLAogCQl9CiAKIAkJLyogZG9uJiMzOTt0IGFkZCByZWplY3RlZCBmb2xpb3MgdG8gdGhlIG9sZGVzdCBnZW5lcmF0aW9uICovCi0JCWlmIChscnVfZ2VuX2ZvbGlvX3NlcShscnV2ZWMsIGZvbGlvLCBmYWxzZSkgPT0gbWluX3NlcVt0eXBlXSkgewotCQkJZm9saW9fc2V0X2xydV9yZWZzKGZvbGlvLCAwKTsKJiM0MzsJCWlmIChscnVfZ2VuX2ZvbGlvX3NlcShscnV2ZWMsIGZvbGlvLCBmYWxzZSkgPT0gbWluX3NlcVt0eXBlXSkKIAkJCWZvbGlvX3NldF9hY3RpdmUoZm9saW8pOwotCQl9CiYjNDM7CiYjNDM7CQkvKiBTZWUgdGhlIGNvbW1lbnRzIG9uIExSVV9SRUZTX0ZMQUdTICovCiYjNDM7CQlmb2xpb19zZXRfbHJ1X3JlZnMoZm9saW8sIDApOwogCX0KIAogCW1vdmVfZm9saW9zX3RvX2xydSgmYW1wO2xpc3QpOwo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNS8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDcgMDc6MjU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjE1OQoJCQkJCQkJb3V0cHV0OiAzNQoJCQkJCQkJdGhvdWdodHM6IDQ3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBteSBvd246CgoqKkFuYWx5emluZyBhIFBvdGVudGlhbCBNZW1vcnkgTWFuYWdlbWVudCBQYXRjaCoqCgpBbHJpZ2h0LCB0aW1lIHRvIGRpdmUgaW4uIEkgbmVlZCB0byBnZXQgYSBoYW5kbGUgb24gdGhpcyBwYXRjaCwgYW5kIHRoZSBjb250ZXh0IGl0JiMzOTtzIHdvcmtpbmcgd2l0aGluLiBJJiMzOTttIHRoaW5raW5nIHRoZSBsb2dpY2FsIHBsYWNlIHRvIHN0YXJ0IGlzIHJpZ2h0IHRoZXJlIGluIGBtbS92bXNjYW4uY2AuIExldCBtZSBxdWlja2x5IHB1bGwgdXAgdGhhdCBmaWxlIOKAkyB0aGUgdXN1YWwgYHJlYWQtZmlsZWAgY29tbWFuZCBzaG91bGQgZG8gdGhlIHRyaWNrLiBOb3csIGxldCYjMzk7cyB6ZXJvIGluIG9uIHJvdWdobHkgbGluZSA1MDIxLiBUaGF0JiMzOTtzIHVzdWFsbHkgYSBnb29kIHN0YXJ0aW5nIHBvaW50IHRvIGdldCBhIGZlZWwgZm9yIHdoYXQmIzM5O3MgaGFwcGVuaW5nIGluIHRoZSB2aWNpbml0eSBvZiB0aGUgY2hhbmdlLiBUaGlzIHNob3VsZCBnaXZlIG1lIHRoZSBjb3JlIGlkZWEgb2Ygd2hhdCBpcyBoYXBwZW5pbmcuIE9uY2UgSSBoYXZlIHRoZSBjb3JlIGNvbmNlcHQsIEkmIzM5O2xsIGJyYW5jaCBvdXQgYXMgcmVxdWlyZWQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjYvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDA3OjI2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bW0vdm1zY2FuLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA1MDAwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDQ1Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzUwMDA6XHRcdHNjLVx1MDAzZW5yX3JlY2xhaW1lZCAmIzQzOz0gcmVjbGFpbWVkO1xuNTAwMTpcdFx0dG90YWxfcmVjbGFpbWVkICYjNDM7PSByZWNsYWltZWQ7XG41MDAyOlx0XHQvKiBSZXRyeSBwYXNzIGlzIG9ubHkgbWVhbnQgZm9yIGNsZWFuIGZvbGlvcyB3aXRob3V0IG5ldyBpc29sYXRpb24gKi9cbjUwMDM6XHRcdGlmIChpc29sYXRlZClcbjUwMDQ6XHRcdFx0aGFuZGxlX3JlY2xhaW1fd3JpdGViYWNrKGlzb2xhdGVkLCBwZ2RhdCwgc2MsIFx1MDAyNnN0YXQpO1xuNTAwNTpcdFx0dHJhY2VfbW1fdm1zY2FuX2xydV9zaHJpbmtfaW5hY3RpdmUocGdkYXQtXHUwMDNlbm9kZV9pZCxcbjUwMDY6XHRcdFx0XHR0eXBlX3NjYW5uZWQsIHJlY2xhaW1lZCwgXHUwMDI2c3RhdCwgc2MtXHUwMDNlcHJpb3JpdHksXG41MDA3Olx0XHRcdFx0dHlwZSA/IExSVV9JTkFDVElWRV9GSUxFIDogTFJVX0lOQUNUSVZFX0FOT04pO1xuNTAwODpcdFxuNTAwOTpcdFx0bGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlX3JldmVyc2UoZm9saW8sIG5leHQsIFx1MDAyNmxpc3QsIGxydSkge1xuNTAxMDpcdFx0XHRERUZJTkVfTUlOX1NFUShscnV2ZWMpO1xuNTAxMTpcdFxuNTAxMjpcdFx0XHQvKiBtb3ZlX2ZvbGlvc190b19scnUoKSBjdWxscyB1bmV2aWN0YWJsZSBmb2xpb3MgdmlhIGZvbGlvX3B1dGJhY2tfbHJ1KCkgKi9cbjUwMTM6XHRcdFx0aWYgKCFmb2xpb19ldmljdGFibGUoZm9saW8pKVxuNTAxNDpcdFx0XHRcdGNvbnRpbnVlO1xuNTAxNTpcdFxuNTAxNjpcdFx0XHQvKiByZXRyeSBmb2xpb3MgdGhhdCBtYXkgaGF2ZSBtaXNzZWQgZm9saW9fcm90YXRlX3JlY2xhaW1hYmxlKCkgKi9cbjUwMTc6XHRcdFx0aWYgKCFza2lwX3JldHJ5IFx1MDAyNlx1MDAyNiAhZm9saW9fdGVzdF9hY3RpdmUoZm9saW8pIFx1MDAyNlx1MDAyNiAhZm9saW9fbWFwcGVkKGZvbGlvKSBcdTAwMjZcdTAwMjZcbjUwMTg6XHRcdFx0ICAgICFmb2xpb190ZXN0X2RpcnR5KGZvbGlvKSBcdTAwMjZcdTAwMjYgIWZvbGlvX3Rlc3Rfd3JpdGViYWNrKGZvbGlvKSkge1xuNTAxOTpcdFx0XHRcdGxpc3RfbW92ZShcdTAwMjZmb2xpby1cdTAwM2VscnUsIFx1MDAyNmNsZWFuKTtcbjUwMjA6XHRcdFx0XHRjb250aW51ZTtcbjUwMjE6XHRcdFx0fVxuNTAyMjpcdFxuNTAyMzpcdFx0XHQvKiBkb24mIzM5O3QgYWRkIHJlamVjdGVkIGZvbGlvcyB0byB0aGUgb2xkZXN0IGdlbmVyYXRpb24gKi9cbjUwMjQ6XHRcdFx0aWYgKGxydV9nZW5fZm9saW9fc2VxKGxydXZlYywgZm9saW8sIGZhbHNlKSA9PSBtaW5fc2VxW3R5cGVdKVxuNTAyNTpcdFx0XHRcdGZvbGlvX3NldF9hY3RpdmUoZm9saW8pO1xuNTAyNjpcdFxuNTAyNzpcdFx0XHQvKiBTZWUgdGhlIGNvbW1lbnRzIG9uIExSVV9SRUZTX0ZMQUdTICovXG41MDI4Olx0XHRcdGZvbGlvX3NldF9scnVfcmVmcyhmb2xpbywgMCk7XG41MDI5Olx0XHR9XG41MDMwOlx0XG41MDMxOlx0XHRtb3ZlX2ZvbGlvc190b19scnUoXHUwMDI2bGlzdCk7XG41MDMyOlx0XG41MDMzOlx0XHR3YWxrID0gY3VycmVudC1cdTAwM2VyZWNsYWltX3N0YXRlLVx1MDAzZW1tX3dhbGs7XG41MDM0Olx0XHRpZiAod2FsayBcdTAwMjZcdTAwMjYgd2Fsay1cdTAwM2ViYXRjaGVkKSB7XG41MDM1Olx0XHRcdHdhbGstXHUwMDNlbHJ1dmVjID0gbHJ1dmVjO1xuNTAzNjpcdFx0XHRyZXNldF9iYXRjaF9zaXplKHdhbGspO1xuNTAzNzpcdFx0fVxuNTAzODpcdFxuNTAzOTpcdFx0bW9kX2xydXZlY19zdGF0ZShscnV2ZWMsIFBHREVNT1RFX0tTV0FQRCAmIzQzOyByZWNsYWltZXJfb2Zmc2V0KHNjKSxcbjUwNDA6XHRcdFx0XHRcdFx0c3RhdC5ucl9kZW1vdGVkKTtcbjUwNDE6XHRcbjUwNDI6XHRcdGl0ZW0gPSBQR1NURUFMX0tTV0FQRCAmIzQzOyByZWNsYWltZXJfb2Zmc2V0KHNjKTtcbjUwNDM6XHRcdG1vZF9scnV2ZWNfc3RhdGUobHJ1dmVjLCBpdGVtLCByZWNsYWltZWQpO1xuNTA0NDpcdFx0bW9kX2xydXZlY19zdGF0ZShscnV2ZWMsIFBHU1RFQUxfQU5PTiAmIzQzOyB0eXBlLCByZWNsYWltZWQpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI3LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNyAwNzoyNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzMjA3CgkJCQkJCQlvdXRwdXQ6IDIyCgkJCQkJCQl0aG91Z2h0czogMjMzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgRXZpY3QgRm9saW9zIFBhdGNoKioKCkFscmlnaHQsIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcyBwYXRjaC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGNoYW5nZSBpbiBgZXZpY3RfZm9saW9zYC4gT2theSwgcHJldmlvdXNseSwgdGhlIGNvZGUgaW5jbHVkZWQgYSBjaGVjayB0byBwcmV2ZW50IHJlamVjdGVkIGZvbGlvcyBmcm9tIGJlaW5nIGFkZGVkIHRvIHRoZSBvbGRlc3QgZ2VuZXJhdGlvbi4gSWYgYSBmb2xpbyYjMzk7cyBzZXF1ZW5jZSBtYXRjaGVkIHRoZSBtaW5pbXVtIHNlcXVlbmNlLCBpdCB3YXMgYmVpbmcgemVyb2VkIG91dCByZWdhcmRpbmcgcmVmZXJlbmNlcyAqYW5kKiBzZXQgdG8gYWN0aXZlLiBUaGUgY2hhbmdlIGFwcGVhcnMgdG8gaGF2ZSByZW1vdmVkIHRoZSBgZm9saW9fc2V0X2xydV9yZWZzKGZvbGlvLCAwKWAgY2FsbCBmcm9tIHdpdGhpbiB0aGUgYGlmYCBibG9jaywgaW5zdGVhZCBtb3ZpbmcgaXQgKmFmdGVyKiB0aGUgYGlmYCBzdGF0ZW1lbnQuIEFuZCB0aGUgZm9saW8gaXMgbm93ICpvbmx5KiBzZXQgdG8gYWN0aXZlIGluc2lkZSB0aGUgYGlmYCBzdGF0ZW1lbnQuCgpJIG5lZWQgdG8gdW5kZXJzdGFuZCAqd2h5KiB0aGlzIGNoYW5nZSB3YXMgbWFkZS4gSXQgc2VlbXMgbGlrZSB0aGUgaW50ZW50aW9uIGlzIHRvIG1vZGlmeSBob3cgbHJ1IHJlZmVyZW5jZXMgYXJlIGhhbmRsZWQgc3BlY2lmaWNhbGx5IGNvbmNlcm5pbmcgcmVqZWN0ZWQgZm9saW9zLiBUaGUgY29tbWVudCBvbiBgTFJVX1JFRlNfRkxBR1NgIGlzIGEgY2x1ZS4gSSYjMzk7bGwgbmVlZCB0byBjaGVjayB0aGUgZGVmaW5pdGlvbiBvZiBgZm9saW9fc2V0X2xydV9yZWZzYCBhbmQgdGhlIGBMUlVfUkVGU19GTEFHU2AgY29tbWVudC4gTGV0JiMzOTtzIHNlZS4uLiBhIHF1aWNrIGdyZXAgZm9yIGBmb2xpb19zZXRfbHJ1X3JlZnNgIHNob3VsZCBnaXZlIG1lIHRoZSByZWxldmFudCBpbmZvcm1hdGlvbi4gSXQgc2VlbXMgbGlrZSB0aGlzIG1vZGlmaWNhdGlvbiBpcyBkZXNpZ25lZCB0byBwcmV2ZW50IGEgcmFjZSBjb25kaXRpb24gb3Igc29tZSB1bmV4cGVjdGVkIGJlaGF2aW9yIHJlbGF0ZWQgdG8gaG93IHRoZSBMUlUgcmVmZXJlbmNlcyBhcmUgbWFuYWdlZCBpbiB0aGlzIHNwZWNpZmljIHNjZW5hcmlvIHdpdGggcmVqZWN0ZWQgZm9saW9zLiBJIG5lZWQgdG8gdHJhY2UgdGhpcyBmdXJ0aGVyIHRvIGJlIGNlcnRhaW4sIGJ1dCB0aGlzIGluaXRpYWwgYW5hbHlzaXMgZ2l2ZXMgbWUgYSBnb29kIHN0YXJ0aW5nIHBvaW50LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI4LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNyAwNzoyNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtmb2xpb19zZXRfbHJ1X3JlZnMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7aW5jbHVkZS9saW51eC9tbV9pbmxpbmUuaD0yMjU9c3RhdGljIGlubGluZSBpbnQgZm9saW9fbHJ1X3JlZnMoY29uc3Qgc3RydWN0IGZvbGlvICpmb2xpbylcbi0tXG5pbmNsdWRlL2xpbnV4L21tX2lubGluZS5oLTIyOS1cbmluY2x1ZGUvbGludXgvbW1faW5saW5lLmg6MjMwOnN0YXRpYyBpbmxpbmUgdm9pZCBmb2xpb19zZXRfbHJ1X3JlZnMoc3RydWN0IGZvbGlvICpmb2xpbywgdW5zaWduZWQgaW50IHJlZnMpXG5pbmNsdWRlL2xpbnV4L21tX2lubGluZS5oLTIzMS17XG4tLVxuaW5jbHVkZS9saW51eC9tbV9pbmxpbmUuaD0zOTY9c3RhdGljIGlubGluZSB2b2lkIGZvbGlvX21pZ3JhdGVfbHJ1X3JlZnMoc3RydWN0IGZvbGlvICpuZXcsIGNvbnN0IHN0cnVjdCBmb2xpbyAqb2xkKVxuLS1cbmluY2x1ZGUvbGludXgvbW1faW5saW5lLmgtMzk4LVx0QlVJTERfQlVHX09OKExSVV9SRUZTX01BU0sgXHUwMDI2IEJJVChQR19yZWZlcmVuY2VkKSk7XG5pbmNsdWRlL2xpbnV4L21tX2lubGluZS5oOjM5OTpcdGZvbGlvX3NldF9scnVfcmVmcyhuZXcsIGZvbGlvX2xydV9yZWZzKG9sZCkpO1xuaW5jbHVkZS9saW51eC9tbV9pbmxpbmUuaC00MDAtfVxuLS1cbm1tL2ZvbGlvLmM9MzU1PXN0YXRpYyB2b2lkIGxydV9nZW5faW5jX3JlZnMoc3RydWN0IGZvbGlvICpmb2xpbylcbi0tXG5tbS9mb2xpby5jLTM2NC1cdGlmICghZm9saW9fbHJ1X3JlZnMoZm9saW8pKSB7XG5tbS9mb2xpby5jOjM2NTpcdFx0Zm9saW9fc2V0X2xydV9yZWZzKGZvbGlvLCAxKTtcbm1tL2ZvbGlvLmMtMzY2LVx0XHRyZXR1cm47XG4tLVxubW0vZm9saW8uYz0zODE9c3RhdGljIGJvb2wgbHJ1X2dlbl9jbGVhcl9yZWZzKHN0cnVjdCBmb2xpbyAqZm9saW8pXG4tLVxubW0vZm9saW8uYy0zODktXG5tbS9mb2xpby5jOjM5MDpcdGZvbGlvX3NldF9scnVfcmVmcyhmb2xpbywgMCk7XG5tbS9mb2xpby5jLTM5MS1cdGZvbGlvX2NsZWFyX3dvcmtpbmdzZXQoZm9saW8pO1xuLS1cbm1tL3Ztc2Nhbi5jPTg2MD1zdGF0aWMgYm9vbCBscnVfZ2VuX3NldF9yZWZzKHN0cnVjdCBmb2xpbyAqZm9saW8sIGNvbnN0IHZtYV9mbGFnc190ICp2bWFfZmxhZ3MpXG4tLVxubW0vdm1zY2FuLmMtODY2LVx0XHRcdGZvbGlvX3NldF93b3JraW5nc2V0KGZvbGlvKTtcbm1tL3Ztc2Nhbi5jOjg2NzpcdFx0XHRmb2xpb19zZXRfbHJ1X3JlZnMoZm9saW8sIDApO1xubW0vdm1zY2FuLmMtODY4LVx0XHRcdHJldHVybiB0cnVlO1xuLS1cbm1tL3Ztc2Nhbi5jLTg3MC1cbm1tL3Ztc2Nhbi5jOjg3MTpcdFx0Zm9saW9fc2V0X2xydV9yZWZzKGZvbGlvLCAxKTtcbm1tL3Ztc2Nhbi5jLTg3Mi1cdFx0cmV0dXJuIGZhbHNlO1xuLS1cbm1tL3Ztc2Nhbi5jLTg3Ny1cdFx0Zm9saW9fc2V0X3dvcmtpbmdzZXQoZm9saW8pO1xubW0vdm1zY2FuLmM6ODc4Olx0XHRmb2xpb19zZXRfbHJ1X3JlZnMoZm9saW8sIDApO1xubW0vdm1zY2FuLmMtODc5LVx0fSBlbHNlIHtcbi0tXG5tbS92bXNjYW4uYz0zMjk3PXN0YXRpYyBpbnQgZm9saW9fdXBkYXRlX2dlbihzdHJ1Y3QgZm9saW8gKmZvbGlvLCBpbnQgbmV3X2dlbiwgaW50ICp0eXBlLFxuLS1cbm1tL3Ztc2Nhbi5jLTMzMDktXHQgICAgIWlzX2V4ZWNfZmlsZV9mb2xpbyhmb2xpbywgdm1hX2ZsYWdzKSkge1xubW0vdm1zY2FuLmM6MzMxMDpcdFx0Zm9saW9fc2V0X2xydV9yZWZzKGZvbGlvLCAxKTtcbm1tL3Ztc2Nhbi5jLTMzMTEtXHRcdHJldHVybiAtMTtcbi0tXG5tbS92bXNjYW4uYz00Nzc0PXN0YXRpYyBib29sIGlzb2xhdGVfZm9saW8oc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYylcbi0tXG5tbS92bXNjYW4uYy00Nzg5LVx0aWYgKCFmb2xpb190ZXN0X3JlZmVyZW5jZWQoZm9saW8pKVxubW0vdm1zY2FuLmM6NDc5MDpcdFx0Zm9saW9fc2V0X2xydV9yZWZzKGZvbGlvLCAwKTtcbm1tL3Ztc2Nhbi5jLTQ3OTEtXG4tLVxubW0vdm1zY2FuLmM9NDk2ND1zdGF0aWMgaW50IGV2aWN0X2ZvbGlvcyh1bnNpZ25lZCBsb25nIG5yX3RvX3NjYW4sIHN0cnVjdCBscnV2ZWMgKmxydXZlYyxcbi0tXG5tbS92bXNjYW4uYy01MDI3LVx0XHQvKiBTZWUgdGhlIGNvbW1lbnRzIG9uIExSVV9SRUZTX0ZMQUdTICovXG5tbS92bXNjYW4uYzo1MDI4Olx0XHRmb2xpb19zZXRfbHJ1X3JlZnMoZm9saW8sIDApO1xubW0vdm1zY2FuLmMtNTAyOS1cdH1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOS8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDcgMDc6MjY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDc2NQoJCQkJCQkJb3V0cHV0OiAyMDcKCQkJCQkJCXRob3VnaHRzOiA1NTQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqS01TQU4gQ2hlY2s6IEFsbCBDbGVhcioqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBNeSBmb2N1cyBoZXJlIGlzIG9uIGVuc3VyaW5nIHRoaXMgYGZvbGlvX3NldF9scnVfcmVmcyhmb2xpbywgMClgIGNoYW5nZSBpcyBLTVNBTi1zYWZlLCBzcGVjaWZpY2FsbHkgaW4gdGhlIGNvbnRleHQgb2YgbXVsdGktZ2VuIExSVSBldmljdGlvbi4gSXQmIzM5O3MgZXNzZW50aWFsbHkgYWJvdXQgY2xlYXJpbmcgTFJVIHJlZmVyZW5jZSBiaXRzIHdpdGhpbiB0aGUgZm9saW8gZmxhZ3MgZm9yIGZvbGlvcyBvbiB0aGUgcmVjbGFpbSBsaXN0LCByaWdodD8KCkZpcnN0LCB0aGUga2V5IHBvaW50IGlzIHRoYXQgYGZvbGlvYCBpcyBhbHJlYWR5IGEgdmFsaWQgYHN0cnVjdCBmb2xpbyAqYCBvbiB0aGUgcmVjbGFpbSBsaXN0LiBgZm9saW9fc2V0X2xydV9yZWZzYCBpcyBqdXN0IG1hbmlwdWxhdGluZyAqZXhpc3RpbmcqIGJpdHMgd2l0aGluIHRoZSBmb2xpbyBmbGFncy4gTm8gbmV3IG1lbW9yeSBpcyBiZWluZyBhbGxvY2F0ZWQsIG5vIGRhdGEgaXMgYmVpbmcgY29waWVkIHRvIHVzZXJzcGFjZSwgYW5kIHRoZXJlJiMzOTtzIGFic29sdXRlbHkgbm8gcmlzayBvZiBlbmNvdW50ZXJpbmcgdW5pbml0aWFsaXplZCBzdGFjayBvciBoZWFwIHZhcmlhYmxlcywgc3RydWN0IGZpZWxkcywgb3IgcmVhZHMuCgpOb3csIGxldCYjMzk7cyBjb25zaWRlciB3aGF0IEtNU0FOIGFuZCBLQVNBTiB3b3VsZCBub3JtYWxseSBjYXRjaC4gS0FTQU4gaXMgYWxsIGFib3V0IG1lbW9yeSBzYWZldHkg4oCTIG91dC1vZi1ib3VuZHMgYWNjZXNzLCB1c2UtYWZ0ZXItZnJlZSwgZXRjLiBLTVNBTiBkZWFscyB3aXRoIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzIHRoYXQgY291bGQgcG90ZW50aWFsbHkgbGVhayBpbmZvcm1hdGlvbiB0byB1c2Vyc3BhY2UuIFNpbmNlIHRoaXMgaXMgcHVyZWx5IHN0YXRlIG1hbmFnZW1lbnQgZm9yIExSVSBwYWdlIHJlY2xhaW0sIGp1c3QgcmVzZXR0aW5nIHRob3NlIHJlZmVyZW5jZXMgb24gZm9saW9zIHVuY29uZGl0aW9uYWxseSwgdGhlcmUmIzM5O3MgemVybyBjaGFuY2Ugb2YgaW50cm9kdWNpbmcgdW5pbml0aWFsaXplZCBtZW1vcnkgYWNjZXNzLgoKSSYjMzk7dmUgZ29uZSB0aHJvdWdoIHRoZSBjcml0ZXJpYS4gRG9lcyB0aGlzIHBhdGNoOgoKMS4gIEludHJvZHVjZS9tb2RpZnkga2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2Vyc3BhY2Ugd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHMgY291bGQgYmUgZXhwb3NlZD8gTm9wZS4KMi4gIEhhdmUgY29uZGl0aW9uYWwgbG9naWMgZGVwZW5kaW5nIG9uIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzPyBBYnNvbHV0ZWx5IG5vdC4KMy4gIEFsbG9jYXRlIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzIGNvdWxkIGJlIHJlYWQ/IE5vIHdheS4KNC4gIEFmZmVjdCBib3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyB0aGF0IGNvdWxkIGV4cG9zZSB1bmluaXRpYWxpemVkIGRhdGE/IE5vcGUuCgpBbmQgY29udmVyc2VseSwgaXQgZml0cyB0aGUgY3JpdGVyaWEgZm9yIGBOZWVkc0tNU0FOPWZhbHNlYDogaXQmIzM5O3MgcHJpbWFyaWx5IGFib3V0IHBhZ2UgcmVjbGFpbSBzdGF0ZSBtYW5hZ2VtZW50LCB3aGljaCBtZWFucyB3ZSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzIChhbGwgb2Ygd2hpY2ggYXJlIEtBU0FOJiMzOTtzIGRvbWFpbikuIEFsbCBzdHJ1Y3R1cmVzIGFyZSBpbml0aWFsaXplZCBiZWZvcmUgdXNlIGFuZCB0aGVyZSYjMzk7cyBubyByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlLiBUaGlzIGlzIGNvbXBsZXRlbHkgY2xlYXIsIGNvbmNpc2UsIGFuZCB1bmFtYmlndW91cy4KCk9rYXksIEkmIzM5O20gY29uZmlkZW50LiBMZXQmIzM5O3MgY2FsbCBgc2V0LXJlc3VsdHNgLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMwLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNyAwNzoyNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBwYWdlIHJlY2xhaW0gbG9naWMgaW4gdGhlIE11bHRpLUdlbiBMUlUgKE1HTFJVKSBzdWJzeXN0ZW0gKGBtbS92bXNjYW4uY2ApLCBzcGVjaWZpY2FsbHkgaW4gYGV2aWN0X2ZvbGlvcygpYC4gSXQgbW92ZXMgYGZvbGlvX3NldF9scnVfcmVmcyhmb2xpbywgMClgIG91dHNpZGUgb2YgYSBjb25kaXRpb25hbCBjaGVjayBzbyB0aGF0IExSVSByZWZlcmVuY2UgZmxhZ3MgYXJlIGNsZWFyZWQgdW5jb25kaXRpb25hbGx5IGZvciBmb2xpb3MgcmVtYWluaW5nIG9uIHRoZSBsaXN0LlxuXG5UaGlzIGNoYW5nZSBwdXJlbHkgYWZmZWN0cyBmb2xpbyBtZXRhZGF0YS9mbGFncyBkdXJpbmcgTFJVIHBhZ2UgcmVjbGFpbS4gSXQgZG9lcyBub3QgaW50cm9kdWNlIG9yIG1vZGlmeTpcbjEuIERhdGEgc3RydWN0dXJlcyBjb3BpZWQgdG8gdXNlciBzcGFjZSBvciBrZXJuZWwgaW5mby1sZWFrcy5cbjIuIFVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzLCBzdHJ1Y3QgZmllbGRzLCBvciBtZW1vcnkgYWxsb2NhdGlvbnMuXG4zLiBMZW5ndGhzIG9yIGJvdW5kcyBjaGVja3MgdGhhdCBjb3VsZCBleHBvc2UgdW5pbml0aWFsaXplZCBidWZmZXIgbWVtb3J5LlxuXG5CZWNhdXNlIHRoZXJlIGFyZSBubyB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcyBvciBpbmZvLWxlYWtzLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZC4gU3RhbmRhcmQgS0FTQU4vc2FuaXRpemVyIGJ1aWxkcyBhcmUgc3VmZmljaWVudC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHBhZ2UgcmVjbGFpbSBsb2dpYyBpbiB0aGUgTXVsdGktR2VuIExSVSAoTUdMUlUpIHN1YnN5c3RlbSAoYG1tL3Ztc2Nhbi5jYCksIHNwZWNpZmljYWxseSBpbiBgZXZpY3RfZm9saW9zKClgLiBJdCBtb3ZlcyBgZm9saW9fc2V0X2xydV9yZWZzKGZvbGlvLCAwKWAgb3V0c2lkZSBvZiBhIGNvbmRpdGlvbmFsIGNoZWNrIHNvIHRoYXQgTFJVIHJlZmVyZW5jZSBmbGFncyBhcmUgY2xlYXJlZCB1bmNvbmRpdGlvbmFsbHkgZm9yIGZvbGlvcyByZW1haW5pbmcgb24gdGhlIGxpc3QuXG5cblRoaXMgY2hhbmdlIHB1cmVseSBhZmZlY3RzIGZvbGlvIG1ldGFkYXRhL2ZsYWdzIGR1cmluZyBMUlUgcGFnZSByZWNsYWltLiBJdCBkb2VzIG5vdCBpbnRyb2R1Y2Ugb3IgbW9kaWZ5OlxuMS4gRGF0YSBzdHJ1Y3R1cmVzIGNvcGllZCB0byB1c2VyIHNwYWNlIG9yIGtlcm5lbCBpbmZvLWxlYWtzLlxuMi4gVW5pbml0aWFsaXplZCB2YXJpYWJsZXMsIHN0cnVjdCBmaWVsZHMsIG9yIG1lbW9yeSBhbGxvY2F0aW9ucy5cbjMuIExlbmd0aHMgb3IgYm91bmRzIGNoZWNrcyB0aGF0IGNvdWxkIGV4cG9zZSB1bmluaXRpYWxpemVkIGJ1ZmZlciBtZW1vcnkuXG5cbkJlY2F1c2UgdGhlcmUgYXJlIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzIG9yIGluZm8tbGVha3MsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3Qgd2FycmFudGVkLiBTdGFuZGFyZCBLQVNBTi9zYW5pdGl6ZXIgYnVpbGRzIGFyZSBzdWZmaWNpZW50LiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wOS0wN1QwNzoyNToyMS4yNTc0NTI4OFoiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ4OTgxOTk0MTQ3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkxSVV9HRU5cIixcbiAgICBcIkxSVV9HRU5fRU5BQkxFRFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImV2aWN0X2ZvbGlvc1wiLFxuICAgIFwidHJ5X3RvX3Nocmlua19scnV2ZWNcIixcbiAgICBcInJ1bl9ldmljdGlvblwiLFxuICAgIFwibHJ1X2dlbl9zaHJpbmtfbHJ1dmVjXCJcbiAgXSxcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBwYWdlIHJlY2xhaW0gbG9naWMgaW4gdGhlIE11bHRpLUdlbiBMUlUgKE1HTFJVKSBzdWJzeXN0ZW0gKGBtbS92bXNjYW4uY2ApLCBzcGVjaWZpY2FsbHkgaW4gYGV2aWN0X2ZvbGlvcygpYC4gSXQgbW92ZXMgYGZvbGlvX3NldF9scnVfcmVmcyhmb2xpbywgMClgIG91dHNpZGUgb2YgYSBjb25kaXRpb25hbCBjaGVjayBzbyB0aGF0IExSVSByZWZlcmVuY2UgZmxhZ3MgYXJlIGNsZWFyZWQgdW5jb25kaXRpb25hbGx5IGZvciBmb2xpb3MgcmVtYWluaW5nIG9uIHRoZSBsaXN0LlxcblxcblRoaXMgY2hhbmdlIHB1cmVseSBhZmZlY3RzIGZvbGlvIG1ldGFkYXRhL2ZsYWdzIGR1cmluZyBMUlUgcGFnZSByZWNsYWltLiBJdCBkb2VzIG5vdCBpbnRyb2R1Y2Ugb3IgbW9kaWZ5OlxcbjEuIERhdGEgc3RydWN0dXJlcyBjb3BpZWQgdG8gdXNlciBzcGFjZSBvciBrZXJuZWwgaW5mby1sZWFrcy5cXG4yLiBVbmluaXRpYWxpemVkIHZhcmlhYmxlcywgc3RydWN0IGZpZWxkcywgb3IgbWVtb3J5IGFsbG9jYXRpb25zLlxcbjMuIExlbmd0aHMgb3IgYm91bmRzIGNoZWNrcyB0aGF0IGNvdWxkIGV4cG9zZSB1bmluaXRpYWxpemVkIGJ1ZmZlciBtZW1vcnkuXFxuXFxuQmVjYXVzZSB0aGVyZSBhcmUgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3Mgb3IgaW5mby1sZWFrcywgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCB3YXJyYW50ZWQuIFN0YW5kYXJkIEtBU0FOL3Nhbml0aXplciBidWlsZHMgYXJlIHN1ZmZpY2llbnQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgTXVsdGktR2VuIExSVSAoTUdMUlUpIHBhZ2UgcmVjbGFpbSBsb2dpYyBpbiBtbS92bXNjYW4uYywgZW5zdXJpbmcgZm9saW8gTFJVIHJlZmVyZW5jZXMgYXJlIHVuY29uZGl0aW9uYWxseSByZXNldCB3aGVuIGZvbGlvcyBhcmUgcHV0IGJhY2suIFRoaXMgdG91Y2hlcyBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IHBhZ2UgZXZpY3Rpb24gcGF0aHMgcmVhY2hhYmxlIGR1cmluZyBtZW1vcnkgcmVjbGFpbSB1bmRlciBNR0xSVS5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDdUMDc6MjU6MjEuMjU3NDU4NjVaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE1NjEzNTE4NjksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCBhMzhlZTA5MTNiZmExMjQ0OTc5ODNiOGVjYTRhODZiNjJjOTQ2NGQwXFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBNb24gU2VwIDcgMDc6MjU6MTkgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvbW0vdm1zY2FuLmMgYi9tbS92bXNjYW4uY1xcbmluZGV4IDQwZDNmMWI0OGE3NGMuLjQyYzBhMDk5MzhhYjIgMTAwNjQ0XFxuLS0tIGEvbW0vdm1zY2FuLmNcXG4rKysgYi9tbS92bXNjYW4uY1xcbkBAIC01MDIxLDEwICs1MDIxLDExIEBAIHN0YXRpYyBpbnQgZXZpY3RfZm9saW9zKHVuc2lnbmVkIGxvbmcgbnJfdG9fc2Nhbiwgc3RydWN0IGxydXZlYyAqbHJ1dmVjLFxcbiBcXHRcXHR9XFxuIFxcbiBcXHRcXHQvKiBkb24ndCBhZGQgcmVqZWN0ZWQgZm9saW9zIHRvIHRoZSBvbGRlc3QgZ2VuZXJhdGlvbiAqL1xcbi1cXHRcXHRpZiAobHJ1X2dlbl9mb2xpb19zZXEobHJ1dmVjLCBmb2xpbywgZmFsc2UpID09IG1pbl9zZXFbdHlwZV0pIHtcXG4tXFx0XFx0XFx0Zm9saW9fc2V0X2xydV9yZWZzKGZvbGlvLCAwKTtcXG4rXFx0XFx0aWYgKGxydV9nZW5fZm9saW9fc2VxKGxydXZlYywgZm9saW8sIGZhbHNlKSA9PSBtaW5fc2VxW3R5cGVdKVxcbiBcXHRcXHRcXHRmb2xpb19zZXRfYWN0aXZlKGZvbGlvKTtcXG4tXFx0XFx0fVxcbitcXG4rXFx0XFx0LyogU2VlIHRoZSBjb21tZW50cyBvbiBMUlVfUkVGU19GTEFHUyAqL1xcbitcXHRcXHRmb2xpb19zZXRfbHJ1X3JlZnMoZm9saW8sIDApO1xcbiBcXHR9XFxuIFxcbiBcXHRtb3ZlX2ZvbGlvc190b19scnUoXFx1MDAyNmxpc3QpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wN1QwNzoyNToyMi44MTk3MzkxMDlaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJjb3JlIiwiRHVyYXRpb24iOjM0MTU0ODgzODAzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkxSVV9HRU5cIixcbiAgICBcIkxSVV9HRU5fRU5BQkxFRFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImV2aWN0X2ZvbGlvc1wiLFxuICAgIFwidHJ5X3RvX3Nocmlua19scnV2ZWNcIixcbiAgICBcInJ1bl9ldmljdGlvblwiLFxuICAgIFwibHJ1X2dlbl9zaHJpbmtfbHJ1dmVjXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgTXVsdGktR2VuIExSVSAoTUdMUlUpIHBhZ2UgcmVjbGFpbSBsb2dpYyBpbiBtbS92bXNjYW4uYywgZW5zdXJpbmcgZm9saW8gTFJVIHJlZmVyZW5jZXMgYXJlIHVuY29uZGl0aW9uYWxseSByZXNldCB3aGVuIGZvbGlvcyBhcmUgcHV0IGJhY2suIFRoaXMgdG91Y2hlcyBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IHBhZ2UgZXZpY3Rpb24gcGF0aHMgcmVhY2hhYmxlIGR1cmluZyBtZW1vcnkgcmVjbGFpbSB1bmRlciBNR0xSVS5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIgYW5kIHNlY3VyaXR5IGVuZ2luZWVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBldmFsdWF0ZSB3aGV0aGVyIGl0IHdhcnJhbnRzIGZ1enppbmcgd2l0aCBzeXprYWxsZXIuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIGludGVybmFsIGFzc3VtcHRpb25zLiBZb3UgbXVzdCBhY3RpdmVseSB1c2UgeW91ciBjb2RlIGFjY2Vzc1xudG9vbHMgdG8gaW5zcGVjdCB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlLCBjYWxsZXJzLCBhbmQgc3Vycm91bmRpbmcgY29udGV4dC5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjEuIENPUkUgVFJJQUdFIFBISUxPU09QSFlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5UaGUgZ29hbCBvZiBwYXRjaCBmdXp6aW5nIGlzIHRvIGRpc2NvdmVyIGNyYXNoZXMsIHJlZ3Jlc3Npb25zLCBleHBvc2VkIGxhdGVudCBidWdzLFxuYW5kIG5ld2x5IHRyaWdnZXJlZCBhc3NlcnRpb25zIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIHNlcmllcy5cblxuLSBSRUFDSEFCSUxJVFkgSVMgVEhFIFBSSU1BUlkgR0FURTpcbiAgRnV6emluZyBjYW4gb25seSBkaXNjb3ZlciBidWdzIGluIGNvZGUgdGhhdCBjYW4gYWN0dWFsbHkgZXhlY3V0ZSBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZFxuICBlbnZpcm9ubWVudHMgKEdDRSBvciBRRU1VLCB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgZGV2aWNlcyBsaWtlIFVTQiBnYWRnZXRzLCBuZXRkZXYsIHR1bi90YXApLlxuICBJZiB0aGUgbW9kaWZpZWQgY29kZSBpcyBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgKHNlZSBTZWN0aW9uIDIpLCBpdCBNVVNUIE5PVCBiZSBmdXp6ZWQsXG4gIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciBpdCBhZGRzIGFzc2VydGlvbnMgb3IgY29tcGxleCBsb2dpYy5cblxuLSBETyBOT1QgQkxJTkRMWSBUUlVTVCBcIk5PIEZVTkNUSU9OQUwgQ0hBTkdFXCIgKE5GQ0kpIE9SIFwiUkVGQUNUT1JJTkdcIiBDTEFJTVM6XG4gIFBhdGNoIGF1dGhvcnMgcm91dGluZWx5IGxhYmVsIGNoYW5nZXMgYXMgXCJjbGVhbnVwc1wiLCBcInJlZmFjdG9yaW5nc1wiLCBvciBzdGF0ZVxuICBcIk5vIGZ1bmN0aW9uYWwgY2hhbmdlIGludGVuZGVkXCIuIERvIE5PVCB0YWtlIHRoZXNlIGNsYWltcyBhdCBmYWNlIHZhbHVlLlxuICBDb2RlIHJlZmFjdG9yaW5ncyB0aGF0IHJlYXJyYW5nZSBsb2dpYywgaW50cm9kdWNlIGhlbHBlciBmdW5jdGlvbnMsIG9yIGFsdGVyIHN0YXRlIG1hbmFnZW1lbnRcbiAgaW4gY29yZSBzdWJzeXN0ZW1zIGZyZXF1ZW50bHkgaW50cm9kdWNlIHN1YnRsZSBzZW1hbnRpYyBzaGlmdHMgb3IgdW5jb3ZlciBsYXRlbnQga2VybmVsIGJ1Z3MuXG4gIElmIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUgaXMgbW9kaWZpZWQgb3IgcmVmYWN0b3JlZCwgaXQgTVVTVCBiZSBmdXp6ZWQuXG5cbi0gTkVXIE9SIE1PRElGSUVEIEFTU0VSVElPTlMgSU4gUkVBQ0hBQkxFIENPREUgTVVTVCBCRSBGVVpaRUQ6XG4gIFdoZW4gYSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzIHJ1bnRpbWUgY2hlY2tzIG9yIGFzc2VydGlvbnMgKGUuZy4sIFdBUk5fT04qLCBWTV9XQVJOX09OKixcbiAgQlVHX09OKiwgbG9ja2RlcF9hc3NlcnQqKSBpbiByZWFjaGFibGUgY29kZSBwYXRocywgaXQgZW5mb3JjZXMgbmV3IG9yIHN0cmljdGVyIGludmFyaWFudHMuXG4gIEV2ZW4gaWYgdGhlIGF1dGhvciBiZWxpZXZlcyB0aGUgaW52YXJpYW50IGFsd2F5cyBob2xkcywgZnV6emluZyBpcyBlc3NlbnRpYWwgdG8gdmVyaWZ5IHdoZXRoZXJcbiAgYW4gdW51c3VhbCBzZXF1ZW5jZSBvZiBvcGVyYXRpb25zIGNhbiB2aW9sYXRlIGl0LlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuMi4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPWZhbHNlIChORUdBVElWRSBDUklURVJJQSlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIE9OTFkgSUYgYWxsIG1vZGlmaWVkIGNvZGUgZmFsbHMgc3RyaWN0bHkgaW50byBvbmUgb3IgbW9yZSBvZiB0aGVzZSBjYXRlZ29yaWVzOlxuXG4tIE5vbi1rZXJuZWwgYW5kIG5vbi1leGVjdXRhYmxlIGNoYW5nZXM6XG4gICogTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgY29tbWVudHMsIG9yIHNwZWxsaW5nIGZpeGVzLlxuICAqIFVzZXItc3BhY2UgZGlyZWN0b3JpZXMsIHNlbGYtdGVzdHMsIHNhbXBsZXMsIG9yIHNjcmlwdHMgKGUuZy4sIHRvb2xzLywgc2FtcGxlcy8sIHNjcmlwdHMvLCB1c3IvKVxuICAgIHRoYXQgZG8gbm90IGFmZmVjdCB0aGUgY29tcGlsZWQga2VybmVsIGltYWdlICh2bWxpbnV4KSBvciBrZXJuZWwgbW9kdWxlcy5cbiAgKiBQdXJlbHkgZGVjb3JhdGl2ZSBsb2dnaW5nIChlLmcuLCBtZXNzYWdlIHN0cmluZ3MgaW4gcHJfZXJyLCBwcmludGssIGRldl9pbmZvKSBvciB0cmFjZXBvaW50c1xuICAgIHRoYXQgZG8gbm90IGFsdGVyIGNvbnRyb2wgZmxvdyBvciBkYXRhIHN0cnVjdHVyZXMuXG4gICogQnVpbGQgc3lzdGVtIG9yIEtjb25maWcgY2hhbmdlcyB0aGF0IGRvIG5vdCBhbHRlciBjb21waWxlZCBDIGxvZ2ljLlxuLSBTdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgaGFyZHdhcmU6XG4gICogVmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoZXMsIFNtYXJ0TklDcywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICAgIGlvbmljLCBhbWRncHUpIHJlcXVpcmluZyBwaHlzaWNhbCBBU0lDL1BDSWUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG4tIFVucmVhY2hhYmxlIGV4ZWN1dGlvbiBwYXRoczpcbiAgKiBEcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzICgucmVtb3ZlLCAuc2h1dGRvd24sIHBjaV91bnJlZ2lzdGVyX2RyaXZlcikgZXhlY3V0ZWQgb25seSBkdXJpbmdcbiAgICBwaHlzaWNhbCBQQ0kgaG90LXVucGx1ZyBvciBtYW51YWwgc3lzZnMgZHJpdmVyIHVuYmluZGluZy5cbiAgKiBDb2RlIHBhdGhzIGV4Y2x1c2l2ZSB0byBhcmNoaXRlY3R1cmVzIG90aGVyIHRoYW4gdGhlIHRhcmdldCBhcmNoaXRlY3R1cmUuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4zLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9dHJ1ZSAoUE9TSVRJVkUgQ1JJVEVSSUEpXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuUmV0dXJuIFdvcnRoRnV6emluZz10cnVlIHdoZW5ldmVyIHRoZSBwYXRjaCB0b3VjaGVzIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUsIGluY2x1ZGluZzpcbi0gQ29yZSBTdWJzeXN0ZW1zOlxuICAqIEFueSBsb2dpYyBtb2RpZmljYXRpb25zIGluIG1lbW9yeSBtYW5hZ2VtZW50IChtbS8pLCBzeW5jaHJvbml6YXRpb24vbG9ja2luZyAoa2VybmVsL2xvY2tpbmcvKSxcbiAgICBCUEYsIHNjaGVkdWxlciwgY29yZSBuZXR3b3JraW5nLCBWRlMsIG9yIHN5c2NhbGwgaGFuZGxpbmcuXG4tIFJlZmFjdG9yaW5ncyBhbmQgQ29kZSBDbGVhbnVwczpcbiAgKiBBbnkgcmVzdHJ1Y3R1cmluZyBvZiByZWFjaGFibGUgZGF0YSBzdHJ1Y3R1cmVzLCBoZWxwZXIgYWJzdHJhY3Rpb25zLCBvciBhbGdvcml0aG0gZmxvd3MuXG4tIFJ1bnRpbWUgQXNzZXJ0aW9ucyBhbmQgRGVmZW5zaXZlIENoZWNrczpcbiAgKiBBbnkgaW50cm9kdWN0aW9uIG9yIGFsdGVyYXRpb24gb2YgYXNzZXJ0aW9ucyAoV0FSTl9PTiosIFZNX1dBUk5fT04qLCBCVUdfT04qLCBldGMuKSBpbiByZWFjaGFibGUgcGF0aHMuXG4tIFJlYWNoYWJsZSBEcml2ZXJzIGFuZCBQcm90b2NvbHM6XG4gICogRHJpdmVycyBhY2Nlc3NpYmxlIHZpYSB2aXJ0dWFsIGJ1c2VzICh2aXJ0aW8sIFVTQiBnYWRnZXQsIGxvb3BiYWNrLCBuZXRsaW5rLCBiaW5kZXIsIHNvY2tldHMsIGV0Yy4pLlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuNC4gRVhUUkFDVElORyBGb2N1c1N5bWJvbHMgKFBSRVZFTlRJTkcgRElMVVRJT04pXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuV2hlbiBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IG11c3QgZXh0cmFjdCBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIGludG8gRm9jdXNTeW1ib2xzIHRvIGd1aWRlIHRoZSBmdXp6ZXI6XG5cbi0gQVZPSUQgVUJJUVVJVE9VUyBMSUZFQ1lDTEUgSE9ULVBBVEhTOlxuICBEbyBOT1QgbGlzdCBnZW5lcmljLCB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYWxsZWQgYnkgYWxtb3N0IGV2ZXJ5IHByb2dyYW0gaW4gdGhlIGNvcnB1c1xuICAoaW5jbHVkaW5nLCBidXQgbm90IGxpbWl0ZWQgdG86IGdlbmVyYWwgbWVtb3J5IGFsbG9jYXRvcnMgYW5kIGRlYWxsb2NhdG9ycywgcGFnZSBmYXVsdFxuICBhbmQgdHJhcCBoYW5kbGVycywgb3IgY29yZSBzeW5jaHJvbml6YXRpb24gcHJpbWl0aXZlczsgdGhpcyBpcyBub3QgYW4gZXhoYXVzdGl2ZSBsaXN0KS5cbiAgTGlzdGluZyB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYXVzZXMgdGhlIGZ1enplciB0byBjbGFzc2lmeSB0aG91c2FuZHMgb2YgdW5yZWxhdGVkIHRlc3RzIGFzIFwiZm9jdXNlZFwiLFxuICB3aGljaCBzZXZlcmVseSBkaWx1dGVzIGZ1enppbmcgZWZmb3J0IGF3YXkgZnJvbSB0aGUgYWN0dWFsIGNoYW5nZXMuXG5cbi0gVEFSR0VUIFNQRUNJRklDIEZFQVRVUkUgTE9HSUMgQU5EIEVOVFJZUE9JTlRTOlxuICBMaXN0IGZ1bmN0aW9ucyB0aGF0IHNwZWNpZmljYWxseSBpbXBsZW1lbnQgdGhlIGxvZ2ljIGJlaW5nIGFkZGVkIG9yIGFsdGVyZWQsIG9yIGRpcmVjdCBBUEkgZW50cnlwb2ludHNcbiAgZm9yIHRoZSBzdWJzeXN0ZW0gZmVhdHVyZSB1bmRlciByZXZpZXcuXG5cbi0gSEFORExJTkcgU1RBVElDIElOTElORSBGVU5DVElPTlMgSU4gSEVBREVSUyAoLmgpOlxuICBDb21waWxlci1pbmxpbmVkIHN0YXRpYyBmdW5jdGlvbnMgKHN1Y2ggYXMgc3RhdGljIGlubGluZXMgaW4gbW0vKi5oIG9yIGluY2x1ZGUvbGludXgvKi5oKSBsYWNrXG4gIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMgaW4gdm1saW51eCBhbmQgY2Fubm90IGJlIHRhcmdldGVkIGRpcmVjdGx5IGJ5IHN5bWJvbCBjb3ZlcmFnZSBmaWx0ZXJzLlxuICBJZiB0aGUgY2hhbmdlcyBhcmUgcHJpbWFyaWx5IGluIHN0YXRpYyBpbmxpbmUgaGVscGVycywgaWRlbnRpZnkgbm9uLXN0YXRpYywgZmVhdHVyZS1zcGVjaWZpYyBjYWxsZXJcbiAgZnVuY3Rpb25zIGluIC5jIGZpbGVzIHRoYXQgZXhlcmNpc2UgdGhlbSAoYXZvaWRpbmcgdWJpcXVpdG91cyBsaWZlY3ljbGUgd3JhcHBlcnMpLlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuNS4gSURFTlRJRllJTkcgRW5hYmxlQ29uZmlnc1xuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbklkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgY29tcGlsZSBhbmQgcmVhY2ggdGhlIG1vZGlmaWVkIGNvZGU6XG4tIEluc3BlY3QgS2NvbmZpZyBmaWxlcyBhbmQgI2lmZGVmIGd1YXJkczsgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4tIENoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncyBuZWVkZWQuXG4tIFN0cmlwIGFueSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJUYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NFxuXG5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCBhMzhlZTA5MTNiZmExMjQ0OTc5ODNiOGVjYTRhODZiNjJjOTQ2NGQwXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIE1vbiBTZXAgNyAwNzoyNToxOSAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL21tL3Ztc2Nhbi5jIGIvbW0vdm1zY2FuLmNcbmluZGV4IDQwZDNmMWI0OGE3NGMuLjQyYzBhMDk5MzhhYjIgMTAwNjQ0XG4tLS0gYS9tbS92bXNjYW4uY1xuKysrIGIvbW0vdm1zY2FuLmNcbkBAIC01MDIxLDEwICs1MDIxLDExIEBAIHN0YXRpYyBpbnQgZXZpY3RfZm9saW9zKHVuc2lnbmVkIGxvbmcgbnJfdG9fc2Nhbiwgc3RydWN0IGxydXZlYyAqbHJ1dmVjLFxuIFx0XHR9XG4gXG4gXHRcdC8qIGRvbid0IGFkZCByZWplY3RlZCBmb2xpb3MgdG8gdGhlIG9sZGVzdCBnZW5lcmF0aW9uICovXG4tXHRcdGlmIChscnVfZ2VuX2ZvbGlvX3NlcShscnV2ZWMsIGZvbGlvLCBmYWxzZSkgPT0gbWluX3NlcVt0eXBlXSkge1xuLVx0XHRcdGZvbGlvX3NldF9scnVfcmVmcyhmb2xpbywgMCk7XG4rXHRcdGlmIChscnVfZ2VuX2ZvbGlvX3NlcShscnV2ZWMsIGZvbGlvLCBmYWxzZSkgPT0gbWluX3NlcVt0eXBlXSlcbiBcdFx0XHRmb2xpb19zZXRfYWN0aXZlKGZvbGlvKTtcbi1cdFx0fVxuK1xuK1x0XHQvKiBTZWUgdGhlIGNvbW1lbnRzIG9uIExSVV9SRUZTX0ZMQUdTICovXG4rXHRcdGZvbGlvX3NldF9scnVfcmVmcyhmb2xpbywgMCk7XG4gXHR9XG4gXG4gXHRtb3ZlX2ZvbGlvc190b19scnUoXHUwMDI2bGlzdCk7XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wN1QwNzoyNToyMi44MTk3NDEzNTlaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjozNTMxNDc0MzExLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgVmlydHVhbCBNZW1vcnkgU2Nhbm5lciBQYXRjaCoqXG5cbk9rYXksIHNvIHRoZSBwYXRjaCBpcyBzaXR0aW5nIGluIGBtbS92bXNjYW4uY2AuIE15IGZpcnN0IG1vdmUgaXMgYWx3YXlzIHRvIGRpdmUgcmlnaHQgaW4gYW5kIGdldCBhIGZlZWwgZm9yIHRoZSBzcGVjaWZpYyBjaGFuZ2UgYW5kIGl0cyBjb250ZXh0IHdpdGhpbiB0aGUgc3Vycm91bmRpbmcgY29kZS4gVGltZSB0byBkaWcgaW50byB0aGUgZGlmZiBpdHNlbGYsIHJlYWxseSB1bmRlcnN0YW5kIHdoYXQncyBiZWVuIGFsdGVyZWQuXG5cbkdpdmVuIG15IGZhbWlsaWFyaXR5IHdpdGggdGhpcyBjb2RlYmFzZSwgSSdtIHRoaW5raW5nIGEgdG9vbCBsaWtlIGByZWFkLWZpbGVgIG9yIGV2ZW4gYSBxdWljayBgZ3JlcHBlcmAgY2FsbCB0byBwaW5wb2ludCBhcm91bmQgbGluZSA1MDIxIGluIGBtbS92bXNjYW4uY2Agd2lsbCBnaXZlIG1lIHRoZSBpbW1lZGlhdGUgdmlldyBvZiB0aGUgYXJlYSB0aGF0IHRoZSBwYXRjaCB0b3VjaGVzLiBUaGlzIGlzIHdoZXJlIEknbGwgYmVnaW4gdG8gYnVpbGQgbXkgbWVudGFsIG1vZGVsIG9mIHdoYXQgdGhlIGRldmVsb3BlciBpbnRlbmRlZC4gSXQncyBhbGwgYWJvdXQgdGhhdCBpbml0aWFsIGluc3BlY3Rpb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI5NDcsIk91dHB1dFRva2VucyI6MzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1NywiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDA3OjI1OjI2LjM1MTIxODgxMVoiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQxNDc0MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJtbS92bXNjYW4uY1wiLFxuICBcIkZpcnN0TGluZVwiOiA1MDAwLFxuICBcIkxpbmVDb3VudFwiOiA1MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCI1MDAwOlxcdFxcdHNjLVxcdTAwM2Vucl9yZWNsYWltZWQgKz0gcmVjbGFpbWVkO1xcbjUwMDE6XFx0XFx0dG90YWxfcmVjbGFpbWVkICs9IHJlY2xhaW1lZDtcXG41MDAyOlxcdFxcdC8qIFJldHJ5IHBhc3MgaXMgb25seSBtZWFudCBmb3IgY2xlYW4gZm9saW9zIHdpdGhvdXQgbmV3IGlzb2xhdGlvbiAqL1xcbjUwMDM6XFx0XFx0aWYgKGlzb2xhdGVkKVxcbjUwMDQ6XFx0XFx0XFx0aGFuZGxlX3JlY2xhaW1fd3JpdGViYWNrKGlzb2xhdGVkLCBwZ2RhdCwgc2MsIFxcdTAwMjZzdGF0KTtcXG41MDA1OlxcdFxcdHRyYWNlX21tX3Ztc2Nhbl9scnVfc2hyaW5rX2luYWN0aXZlKHBnZGF0LVxcdTAwM2Vub2RlX2lkLFxcbjUwMDY6XFx0XFx0XFx0XFx0dHlwZV9zY2FubmVkLCByZWNsYWltZWQsIFxcdTAwMjZzdGF0LCBzYy1cXHUwMDNlcHJpb3JpdHksXFxuNTAwNzpcXHRcXHRcXHRcXHR0eXBlID8gTFJVX0lOQUNUSVZFX0ZJTEUgOiBMUlVfSU5BQ1RJVkVfQU5PTik7XFxuNTAwODpcXHRcXG41MDA5OlxcdFxcdGxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZV9yZXZlcnNlKGZvbGlvLCBuZXh0LCBcXHUwMDI2bGlzdCwgbHJ1KSB7XFxuNTAxMDpcXHRcXHRcXHRERUZJTkVfTUlOX1NFUShscnV2ZWMpO1xcbjUwMTE6XFx0XFxuNTAxMjpcXHRcXHRcXHQvKiBtb3ZlX2ZvbGlvc190b19scnUoKSBjdWxscyB1bmV2aWN0YWJsZSBmb2xpb3MgdmlhIGZvbGlvX3B1dGJhY2tfbHJ1KCkgKi9cXG41MDEzOlxcdFxcdFxcdGlmICghZm9saW9fZXZpY3RhYmxlKGZvbGlvKSlcXG41MDE0OlxcdFxcdFxcdFxcdGNvbnRpbnVlO1xcbjUwMTU6XFx0XFxuNTAxNjpcXHRcXHRcXHQvKiByZXRyeSBmb2xpb3MgdGhhdCBtYXkgaGF2ZSBtaXNzZWQgZm9saW9fcm90YXRlX3JlY2xhaW1hYmxlKCkgKi9cXG41MDE3OlxcdFxcdFxcdGlmICghc2tpcF9yZXRyeSBcXHUwMDI2XFx1MDAyNiAhZm9saW9fdGVzdF9hY3RpdmUoZm9saW8pIFxcdTAwMjZcXHUwMDI2ICFmb2xpb19tYXBwZWQoZm9saW8pIFxcdTAwMjZcXHUwMDI2XFxuNTAxODpcXHRcXHRcXHQgICAgIWZvbGlvX3Rlc3RfZGlydHkoZm9saW8pIFxcdTAwMjZcXHUwMDI2ICFmb2xpb190ZXN0X3dyaXRlYmFjayhmb2xpbykpIHtcXG41MDE5OlxcdFxcdFxcdFxcdGxpc3RfbW92ZShcXHUwMDI2Zm9saW8tXFx1MDAzZWxydSwgXFx1MDAyNmNsZWFuKTtcXG41MDIwOlxcdFxcdFxcdFxcdGNvbnRpbnVlO1xcbjUwMjE6XFx0XFx0XFx0fVxcbjUwMjI6XFx0XFxuNTAyMzpcXHRcXHRcXHQvKiBkb24ndCBhZGQgcmVqZWN0ZWQgZm9saW9zIHRvIHRoZSBvbGRlc3QgZ2VuZXJhdGlvbiAqL1xcbjUwMjQ6XFx0XFx0XFx0aWYgKGxydV9nZW5fZm9saW9fc2VxKGxydXZlYywgZm9saW8sIGZhbHNlKSA9PSBtaW5fc2VxW3R5cGVdKVxcbjUwMjU6XFx0XFx0XFx0XFx0Zm9saW9fc2V0X2FjdGl2ZShmb2xpbyk7XFxuNTAyNjpcXHRcXG41MDI3OlxcdFxcdFxcdC8qIFNlZSB0aGUgY29tbWVudHMgb24gTFJVX1JFRlNfRkxBR1MgKi9cXG41MDI4OlxcdFxcdFxcdGZvbGlvX3NldF9scnVfcmVmcyhmb2xpbywgMCk7XFxuNTAyOTpcXHRcXHR9XFxuNTAzMDpcXHRcXG41MDMxOlxcdFxcdG1vdmVfZm9saW9zX3RvX2xydShcXHUwMDI2bGlzdCk7XFxuNTAzMjpcXHRcXG41MDMzOlxcdFxcdHdhbGsgPSBjdXJyZW50LVxcdTAwM2VyZWNsYWltX3N0YXRlLVxcdTAwM2VtbV93YWxrO1xcbjUwMzQ6XFx0XFx0aWYgKHdhbGsgXFx1MDAyNlxcdTAwMjYgd2Fsay1cXHUwMDNlYmF0Y2hlZCkge1xcbjUwMzU6XFx0XFx0XFx0d2Fsay1cXHUwMDNlbHJ1dmVjID0gbHJ1dmVjO1xcbjUwMzY6XFx0XFx0XFx0cmVzZXRfYmF0Y2hfc2l6ZSh3YWxrKTtcXG41MDM3OlxcdFxcdH1cXG41MDM4OlxcdFxcbjUwMzk6XFx0XFx0bW9kX2xydXZlY19zdGF0ZShscnV2ZWMsIFBHREVNT1RFX0tTV0FQRCArIHJlY2xhaW1lcl9vZmZzZXQoc2MpLFxcbjUwNDA6XFx0XFx0XFx0XFx0XFx0XFx0c3RhdC5ucl9kZW1vdGVkKTtcXG41MDQxOlxcdFxcbjUwNDI6XFx0XFx0aXRlbSA9IFBHU1RFQUxfS1NXQVBEICsgcmVjbGFpbWVyX29mZnNldChzYyk7XFxuNTA0MzpcXHRcXHRtb2RfbHJ1dmVjX3N0YXRlKGxydXZlYywgaXRlbSwgcmVjbGFpbWVkKTtcXG41MDQ0OlxcdFxcdG1vZF9scnV2ZWNfc3RhdGUobHJ1dmVjLCBQR1NURUFMX0FOT04gKyB0eXBlLCByZWNsYWltZWQpO1xcbjUwNDU6XFx0XFxuNTA0NjpcXHRcXHRsaXN0X3NwbGljZV9pbml0KFxcdTAwMjZjbGVhbiwgXFx1MDAyNmxpc3QpO1xcbjUwNDc6XFx0XFxuNTA0ODpcXHRcXHRpZiAoIWxpc3RfZW1wdHkoXFx1MDAyNmxpc3QpKSB7XFxuNTA0OTpcXHRcXHRcXHRza2lwX3JldHJ5ID0gdHJ1ZTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDdUMDc6MjU6MjYuMzUxNjM1NzRaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjozODUxMjk0MzYwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIG15IG93bjpcblxuKipJbml0aWFsIEFzc2Vzc21lbnQ6IERpdmluZyBpbnRvIGBtbS92bXNjYW4uY2AqKlxuXG5BbHJpZ2h0LCBiZWZvcmUgSSBnZXQgdG9vIGRlZXAgaW50byB0aGlzIGNvZGUgc25pcHBldCwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXRzIGNvbnRleHQuIExldCBtZSB0cmFjZSBiYWNrIGFuZCBpZGVudGlmeSB0aGUgZnVuY3Rpb24gdGhhdCBlbmNsb3NlcyB0aGlzIHNlY3Rpb24uIEtub3dpbmcgdGhlIHN1cnJvdW5kaW5nIGZ1bmN0aW9uIGlzIGNydWNpYWwgZm9yIHVuZGVyc3RhbmRpbmcgdGhlIGludGVudCBhbmQgdGhlIHZhcmlhYmxlcyBhdCBwbGF5LiBUaGVuLCBJIHNob3VsZCBpbW1lZGlhdGVseSBjcm9zcy1yZWZlcmVuY2UgdGhlIHJlbGV2YW50IEtjb25maWcgb3B0aW9ucy4gV2hhdCBmZWF0dXJlcyBhcmUgZW5hYmxlZCBvciBkaXNhYmxlZCB0aGF0IG1pZ2h0IGluZmx1ZW5jZSB0aGlzIHBhcnRpY3VsYXIgYmxvY2sgb2YgY29kZT8gQW55IHJlbGV2YW50IHByZXByb2Nlc3NvciBkaXJlY3RpdmVzIEkgc2hvdWxkIGJlIGF3YXJlIG9mPyBUaGF0IHdpbGwgZ2l2ZSBtZSB0aGUgYnJvYWQgcGljdHVyZSBhbmQgd2lsbCBoZWxwIG1lIHVuZGVyc3RhbmQgdGhlIHB1cnBvc2Ugb2YgdGhlIGJsb2NrLlxuXG5BZnRlciB0aGF0LCBJIHNob3VsZCBjYXN0IG15IGV5ZXMgdG8gdGhlIGVhcmxpZXIgbGluZXMgd2l0aGluIGBtbS92bXNjYW4uY2AuIENvbnRleHQgaXMgZXZlcnl0aGluZywgYW5kIHRoZSBwcmVjZWRpbmcgY29kZSBwcm9iYWJseSBzZXRzIHVwIHRoZSBjb25kaXRpb25zIG9yIGRhdGEgdGhhdCB0aGlzIHNlY3Rpb24gaXMgd29ya2luZyB3aXRoLiBVbmRlcnN0YW5kaW5nIHRoZSBwcmVjZWRpbmcgY29kZSBpcyBhbG1vc3QgYWx3YXlzIGtleSB0byB1bmRlcnN0YW5kaW5nIHRoZSBmb2xsb3dpbmcgY29kZS4gSXQgaXMgYWxsIHJlbGF0ZWQuIEkgd2lsbCBsb29rIGZvciBhbnkgaW5pdGlhbGl6YXRpb25zLCBjb25kaXRpb25hbCBjaGVja3MsIG9yIGRhdGEgc3RydWN0dXJlcyBiZWluZyBzZXQgdXAgdGhhdCBwcm92aWRlIGNsdWVzIGFib3V0IHRoZSBsb2dpYyBhbmQgcHVycG9zZSBvZiB0aGlzIHNwZWNpZmljIHBpZWNlIG9mIHRoZSBjb2RlLiBMZXQncyBzZWUgd2hhdCdzIGhhcHBlbmluZy5cblxuXG4iLCJJbnB1dFRva2VucyI6NDA1OSwiT3V0cHV0VG9rZW5zIjozNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMxLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDdUMDc6MjU6MzAuMjAyOTMyMDMxWiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjkzMDAwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm1tL3Ztc2Nhbi5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDQ5NTAsXG4gIFwiTGluZUNvdW50XCI6IDYwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjQ5NTA6XFx0XFx0XFx0Z290byByZXRyeTtcXG40OTUxOlxcdFxcdH1cXG40OTUyOlxcdFxcdC8qXFxuNDk1MzpcXHRcXHQgKiBXZSBzY2FubmVkIHNvbWUgZm9saW9zIGJ1dCBmYWlsZWQgdG8gaXNvbGF0ZSBhbnkgZHVlIHRvIHByb21vdGlvbnMsXFxuNDk1NDpcXHRcXHQgKiBwcm90ZWN0aW9ucywgb3IgcmFjZXMuIFJldHJ5IG9uY2UgdG8gYXZvaWQgYSBsYXJnZXIgbG9vcC5cXG40OTU1OlxcdFxcdCAqL1xcbjQ5NTY6XFx0XFx0aWYgKHNjYW5uZWQgXFx1MDAyNlxcdTAwMjYgIXRyaWVkKSB7XFxuNDk1NzpcXHRcXHRcXHR0cmllZCA9IHRydWU7XFxuNDk1ODpcXHRcXHRcXHRnb3RvIHJldHJ5O1xcbjQ5NTk6XFx0XFx0fVxcbjQ5NjA6XFx0XFxuNDk2MTpcXHRcXHRyZXR1cm4gdG90YWxfc2Nhbm5lZDtcXG40OTYyOlxcdH1cXG40OTYzOlxcdFxcbjQ5NjQ6XFx0c3RhdGljIGludCBldmljdF9mb2xpb3ModW5zaWduZWQgbG9uZyBucl90b19zY2FuLCBzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsXFxuNDk2NTpcXHRcXHRcXHRcXHRzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYywgaW50IHN3YXBwaW5lc3MpXFxuNDk2NjpcXHR7XFxuNDk2NzpcXHRcXHRMSVNUX0hFQUQobGlzdCk7XFxuNDk2ODpcXHRcXHRMSVNUX0hFQUQoY2xlYW4pO1xcbjQ5Njk6XFx0XFx0c3RydWN0IGZvbGlvICpmb2xpbztcXG40OTcwOlxcdFxcdHN0cnVjdCBmb2xpbyAqbmV4dDtcXG40OTcxOlxcdFxcdGVudW0gbm9kZV9zdGF0X2l0ZW0gaXRlbTtcXG40OTcyOlxcdFxcdHN0cnVjdCByZWNsYWltX3N0YXQgc3RhdDtcXG40OTczOlxcdFxcdHN0cnVjdCBscnVfZ2VuX21tX3dhbGsgKndhbGs7XFxuNDk3NDpcXHRcXHRpbnQgc2Nhbm5lZCwgcmVjbGFpbWVkO1xcbjQ5NzU6XFx0XFx0aW50IGlzb2xhdGVkID0gMCwgbnJfaXNvbGF0ZWQgPSAwLCB0eXBlLCB0eXBlX3NjYW5uZWQ7XFxuNDk3NjpcXHRcXHR1bnNpZ25lZCBsb25nIHRvdGFsX3JlY2xhaW1lZCA9IDA7XFxuNDk3NzpcXHRcXHRib29sIHNraXBfcmV0cnkgPSBmYWxzZTtcXG40OTc4OlxcdFxcdHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZyA9IGxydXZlY19tZW1jZyhscnV2ZWMpO1xcbjQ5Nzk6XFx0XFx0c3RydWN0IHBnbGlzdF9kYXRhICpwZ2RhdCA9IGxydXZlY19wZ2RhdChscnV2ZWMpO1xcbjQ5ODA6XFx0XFxuNDk4MTpcXHRcXHRscnV2ZWNfbG9ja19pcnEobHJ1dmVjKTtcXG40OTgyOlxcdFxcbjQ5ODM6XFx0XFx0LyogSW4gY2FzZSBmb2xpbyBkZWxldGlvbiBsZWZ0IGVtcHR5IG9sZCBnZW5zLCBmbHVzaCB0aGVtICovXFxuNDk4NDpcXHRcXHR0cnlfdG9faW5jX21pbl9zZXEobHJ1dmVjLCBzd2FwcGluZXNzKTtcXG40OTg1OlxcdFxcbjQ5ODY6XFx0XFx0c2Nhbm5lZCA9IGlzb2xhdGVfZm9saW9zKG5yX3RvX3NjYW4sIGxydXZlYywgc2MsIHN3YXBwaW5lc3MsXFxuNDk4NzpcXHRcXHRcXHRcXHRcXHQgXFx1MDAyNmxpc3QsIFxcdTAwMjZpc29sYXRlZCwgXFx1MDAyNnR5cGUsIFxcdTAwMjZ0eXBlX3NjYW5uZWQpO1xcbjQ5ODg6XFx0XFx0bnJfaXNvbGF0ZWQgPSBpc29sYXRlZDtcXG40OTg5OlxcdFxcbjQ5OTA6XFx0XFx0LyogU2Nhbm5pbmcgbWF5IGhhdmUgZW1wdGllZCB0aGUgb2xkZXN0IGdlbiwgZmx1c2ggaXQgKi9cXG40OTkxOlxcdFxcdGlmIChzY2FubmVkKVxcbjQ5OTI6XFx0XFx0XFx0dHJ5X3RvX2luY19taW5fc2VxKGxydXZlYywgc3dhcHBpbmVzcyk7XFxuNDk5MzpcXHRcXG40OTk0OlxcdFxcdGxydXZlY191bmxvY2tfaXJxKGxydXZlYyk7XFxuNDk5NTpcXHRcXG40OTk2OlxcdFxcdGlmIChsaXN0X2VtcHR5KFxcdTAwMjZsaXN0KSlcXG40OTk3OlxcdFxcdFxcdHJldHVybiBzY2FubmVkO1xcbjQ5OTg6XFx0cmV0cnk6XFxuNDk5OTpcXHRcXHRyZWNsYWltZWQgPSBzaHJpbmtfZm9saW9fbGlzdChcXHUwMDI2bGlzdCwgcGdkYXQsIHNjLCBcXHUwMDI2c3RhdCwgZmFsc2UsIG1lbWNnKTtcXG41MDAwOlxcdFxcdHNjLVxcdTAwM2Vucl9yZWNsYWltZWQgKz0gcmVjbGFpbWVkO1xcbjUwMDE6XFx0XFx0dG90YWxfcmVjbGFpbWVkICs9IHJlY2xhaW1lZDtcXG41MDAyOlxcdFxcdC8qIFJldHJ5IHBhc3MgaXMgb25seSBtZWFudCBmb3IgY2xlYW4gZm9saW9zIHdpdGhvdXQgbmV3IGlzb2xhdGlvbiAqL1xcbjUwMDM6XFx0XFx0aWYgKGlzb2xhdGVkKVxcbjUwMDQ6XFx0XFx0XFx0aGFuZGxlX3JlY2xhaW1fd3JpdGViYWNrKGlzb2xhdGVkLCBwZ2RhdCwgc2MsIFxcdTAwMjZzdGF0KTtcXG41MDA1OlxcdFxcdHRyYWNlX21tX3Ztc2Nhbl9scnVfc2hyaW5rX2luYWN0aXZlKHBnZGF0LVxcdTAwM2Vub2RlX2lkLFxcbjUwMDY6XFx0XFx0XFx0XFx0dHlwZV9zY2FubmVkLCByZWNsYWltZWQsIFxcdTAwMjZzdGF0LCBzYy1cXHUwMDNlcHJpb3JpdHksXFxuNTAwNzpcXHRcXHRcXHRcXHR0eXBlID8gTFJVX0lOQUNUSVZFX0ZJTEUgOiBMUlVfSU5BQ1RJVkVfQU5PTik7XFxuNTAwODpcXHRcXG41MDA5OlxcdFxcdGxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZV9yZXZlcnNlKGZvbGlvLCBuZXh0LCBcXHUwMDI2bGlzdCwgbHJ1KSB7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDA3OjI1OjMwLjIwMzIyNzQzMVoiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjI4MjA1MTM1MjcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqSW52ZXN0aWdhdGluZyBLY29uZmlnIERlcGVuZGVuY2llcyBmb3IgYGV2aWN0X2ZvbGlvc2AgYW5kIE1HTFJVKipcblxuT2theSwgdGltZSB0byBkaWcgaW50byB0aGUga2VybmVsIGNvbmZpZ3VyYXRpb24uIEkgbmVlZCB0byBmaWd1cmUgb3V0IHdoaWNoIEtjb25maWcgb3B0aW9ucyBnb3Zlcm4gdGhlIGluY2x1c2lvbiBvZiBgZXZpY3RfZm9saW9zYCBhbmQgaXRzIHJlbGF0aW9uc2hpcCB3aXRoIHRoZSBNdWx0aS1HZW4gTFJVIChNR0xSVSkgaW1wbGVtZW50YXRpb24uIE15IGluaXRpYWwgYXBwcm9hY2ggaXMgdG8gbGV2ZXJhZ2UgYGdyZXBgIOKAkyB0aGF0J3MgdXN1YWxseSB0aGUgcXVpY2tlc3Qgd2F5IHRvIHRyYWNrIGRvd24gZGlyZWN0IHJlZmVyZW5jZXMgd2l0aGluIHRoZSBLY29uZmlnIGZpbGVzLiBJJ2xsIHNlYXJjaCBmb3IgYGV2aWN0X2ZvbGlvc2Agc3BlY2lmaWNhbGx5LCBhaW1pbmcgdG8gaWRlbnRpZnkgdGhlIGltbWVkaWF0ZSBvcHRpb25zIHRoYXQgZW5hYmxlIG9yIGRpc2FibGUgaXQuIEFsdGVybmF0aXZlbHksIEknbGwgZXhhbWluZSBgbW0vdm1zY2FuLmNgLiBJdCdzIGEga2V5IGZpbGUsIGVzcGVjaWFsbHkgcmVnYXJkaW5nIG1lbW9yeSBtYW5hZ2VtZW50IGFuZCBwYWdlIHNjYW5uaW5nOyBpdCdzIGxpa2VseSB0byBjb250YWluIGNsdWVzLiBJIGV4cGVjdCB0byBmaW5kIHNvbWUgY29uZGl0aW9uYWwgc3RhdGVtZW50cywgb3IgcGVyaGFwcyBldmVuIGNvbW1lbnRzLCB0aGF0IHNoZWQgbGlnaHQgb24gaG93IHRoZXNlIHR3byBmZWF0dXJlcyBpbnRlcmFjdCBhbmQgd2hhdCBLY29uZmlnIG9wdGlvbnMgY29udHJvbCB0aGVpciBiZWhhdmlvci4gVGhpcyBpbnZlc3RpZ2F0aW9uIGlzIGNydWNpYWwgZm9yIHVuZGVyc3RhbmRpbmcgaG93IHRvIHByb3Blcmx5IGNvbmZpZ3VyZSB0aGVzZSBhc3BlY3RzIHdpdGhpbiB2YXJpb3VzIGtlcm5lbCBidWlsZHMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjUzMzIsIk91dHB1dFRva2VucyI6MjgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0OCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDA3OjI1OjMzLjAyMzc0MzE1N1oiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0OTQ0MzI5MiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJDT05GSUdfTFJVX0dFTlwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vZm9saW8uYz0zMjM9c3RhdGljIHZvaWQgX19scnVfY2FjaGVfYWN0aXZhdGVfZm9saW8oc3RydWN0IGZvbGlvICpmb2xpbylcXG4tLVxcbm1tL2ZvbGlvLmMtMzUyLVxcbm1tL2ZvbGlvLmM6MzUzOiNpZmRlZiBDT05GSUdfTFJVX0dFTlxcbm1tL2ZvbGlvLmMtMzU0LVxcbi0tXFxubW0vZm9saW8uYz0zODE9c3RhdGljIGJvb2wgbHJ1X2dlbl9jbGVhcl9yZWZzKHN0cnVjdCBmb2xpbyAqZm9saW8pXFxuLS1cXG5tbS9mb2xpby5jLTM5OS1cXG5tbS9mb2xpby5jOjQwMDojZWxzZSAvKiAhQ09ORklHX0xSVV9HRU4gKi9cXG5tbS9mb2xpby5jLTQwMS1cXG4tLVxcbm1tL2ZvbGlvLmM9NDA2PXN0YXRpYyBib29sIGxydV9nZW5fY2xlYXJfcmVmcyhzdHJ1Y3QgZm9saW8gKmZvbGlvKVxcbi0tXFxubW0vZm9saW8uYy00MTAtXFxubW0vZm9saW8uYzo0MTE6I2VuZGlmIC8qIENPTkZJR19MUlVfR0VOICovXFxubW0vZm9saW8uYy00MTItXFxuLS1cXG5tbS9tZW1jb250cm9sLmM9NDY4MD1zdGF0aWMgdm9pZCBtZW1fY2dyb3VwX2V4aXQoc3RydWN0IHRhc2tfc3RydWN0ICp0YXNrKVxcbi0tXFxubW0vbWVtY29udHJvbC5jLTQ2OTYtXFxubW0vbWVtY29udHJvbC5jOjQ2OTc6I2lmZGVmIENPTkZJR19MUlVfR0VOXFxubW0vbWVtY29udHJvbC5jLTQ2OTgtc3RhdGljIHZvaWQgbWVtX2Nncm91cF9scnVfZ2VuX2F0dGFjaChzdHJ1Y3QgY2dyb3VwX3Rhc2tzZXQgKnRzZXQpXFxuLS1cXG5tbS9tZW1jb250cm9sLmM9NDcxNj1zdGF0aWMgdm9pZCBtZW1fY2dyb3VwX2xydV9nZW5fYXR0YWNoKHN0cnVjdCBjZ3JvdXBfdGFza3NldCAqdHNldCkge31cXG5tbS9tZW1jb250cm9sLmM6NDcxNzojZW5kaWYgLyogQ09ORklHX0xSVV9HRU4gKi9cXG5tbS9tZW1jb250cm9sLmMtNDcxOC1cXG4tLVxcbm1tL21lbWNvbnRyb2wuYz01NzQ2PXN0YXRpYyB2b2lkIF9faW5pdCBtZW1jZ19zdHJ1Y3RfY2hlY2sodm9pZClcXG4tLVxcbm1tL21lbWNvbnRyb2wuYy01NzkwLSNlbmRpZlxcbm1tL21lbWNvbnRyb2wuYzo1NzkxOiNpZmRlZiBDT05GSUdfTFJVX0dFTl9XQUxLU19NTVVcXG5tbS9tZW1jb250cm9sLmMtNTc5Mi1cXHRDQUNIRUxJTkVfQVNTRVJUX0dST1VQX01FTUJFUihzdHJ1Y3QgbWVtX2Nncm91cCwgbWVtY2dfY29sZCxcXG4tLVxcbm1tL21lbW9yeS5jPTY2OTQ9c3RhdGljIGlubGluZSB2b2lkIG1tX2FjY291bnRfZmF1bHQoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHN0cnVjdCBwdF9yZWdzICpyZWdzLFxcbi0tXFxubW0vbWVtb3J5LmMtNjc0Ni1cXG5tbS9tZW1vcnkuYzo2NzQ3OiNpZmRlZiBDT05GSUdfTFJVX0dFTlxcbm1tL21lbW9yeS5jLTY3NDgtc3RhdGljIHZvaWQgbHJ1X2dlbl9lbnRlcl9mYXVsdChzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSlcXG4tLVxcbm1tL21lbW9yeS5jPTY3NjM9c3RhdGljIHZvaWQgbHJ1X2dlbl9leGl0X2ZhdWx0KHZvaWQpXFxuLS1cXG5tbS9tZW1vcnkuYy02NzY1LX1cXG5tbS9tZW1vcnkuYzo2NzY2OiNlbmRpZiAvKiBDT05GSUdfTFJVX0dFTiAqL1xcbm1tL21lbW9yeS5jLTY3NjctXFxuLS1cXG5tbS92bXNjYW4uYz04NDc9ZW51bSBmb2xpb19yZWZlcmVuY2VzIHtcXG4tLVxcbm1tL3Ztc2Nhbi5jLTg1Mi1cXG5tbS92bXNjYW4uYzo4NTM6I2lmZGVmIENPTkZJR19MUlVfR0VOXFxubW0vdm1zY2FuLmMtODU0LS8qXFxuLS1cXG5tbS92bXNjYW4uYz04ODU9c3RhdGljIGJvb2wgbHJ1X2dlbl9zZXRfcmVmcyhzdHJ1Y3QgZm9saW8gKmZvbGlvLCBjb25zdCB2bWFfZmxhZ3NfdCAqdm1hX2ZsYWdzKVxcbi0tXFxubW0vdm1zY2FuLmMtODg4LX1cXG5tbS92bXNjYW4uYzo4ODk6I2VuZGlmIC8qIENPTkZJR19MUlVfR0VOICovXFxubW0vdm1zY2FuLmMtODkwLVxcbi0tXFxubW0vdm1zY2FuLmM9MjcwOD1zdGF0aWMgYm9vbCBjYW5fYWdlX2Fub25fcGFnZXMoc3RydWN0IGxydXZlYyAqbHJ1dmVjLFxcbi0tXFxubW0vdm1zY2FuLmMtMjcxOS1cXG5tbS92bXNjYW4uYzoyNzIwOiNpZmRlZiBDT05GSUdfTFJVX0dFTlxcbm1tL3Ztc2Nhbi5jLTI3MjEtXFxubW0vdm1zY2FuLmM9MjcyMj1ERUZJTkVfU1RBVElDX0tFWV9GQUxTRShscnVfc3dpdGNoKTtcXG5tbS92bXNjYW4uYzoyNzIzOiNpZmRlZiBDT05GSUdfTFJVX0dFTl9FTkFCTEVEXFxubW0vdm1zY2FuLmMtMjcyNC1ERUZJTkVfU1RBVElDX0tFWV9BUlJBWV9UUlVFKGxydV9nZW5fY2FwcywgTlJfTFJVX0dFTl9DQVBTKTtcXG4tLVxcbm1tL3Ztc2Nhbi5jPTI5MDg9c3RhdGljIHZvaWQgcmVzZXRfYmxvb21fZmlsdGVyKHN0cnVjdCBscnVfZ2VuX21tX3N0YXRlICptbV9zdGF0ZSwgdW5zaWduZWQgbG9uZyBzZXEpXFxuLS1cXG5tbS92bXNjYW4uYy0yOTI3LVxcbm1tL3Ztc2Nhbi5jOjI5Mjg6I2lmZGVmIENPTkZJR19MUlVfR0VOX1dBTEtTX01NVVxcbm1tL3Ztc2Nhbi5jLTI5MjktXFxuLS1cXG5tbS92bXNjYW4uYz0zMDM3PXZvaWQgbHJ1X2dlbl9taWdyYXRlX21tKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tKVxcbi0tXFxubW0vdm1zY2FuLmMtMzA2NS1cXG5tbS92bXNjYW4uYzozMDY2OiNlbHNlIC8qICFDT05GSUdfTFJVX0dFTl9XQUxLU19NTVUgKi9cXG5tbS92bXNjYW4uYy0zMDY3LVxcbi0tXFxubW0vdm1zY2FuLmM9NjA1ND1sYXRlX2luaXRjYWxsKGluaXRfbHJ1X2dlbik7XFxubW0vdm1zY2FuLmMtNjA1NS1cXG5tbS92bXNjYW4uYzo2MDU2OiNlbHNlIC8qICFDT05GSUdfTFJVX0dFTiAqL1xcbm1tL3Ztc2Nhbi5jLTYwNTctXFxuLS1cXG5tbS92bXNjYW4uYz02MDY4PXN0YXRpYyB2b2lkIGxydV9nZW5fc2hyaW5rX25vZGUoc3RydWN0IHBnbGlzdF9kYXRhICpwZ2RhdCwgc3RydWN0IHNjYW5fY29udHJvbCAqc2MpXFxuLS1cXG5tbS92bXNjYW4uYy02MDcyLVxcbm1tL3Ztc2Nhbi5jOjYwNzM6I2VuZGlmIC8qIENPTkZJR19MUlVfR0VOICovXFxubW0vdm1zY2FuLmMtNjA3NC1cXG4tLVxcbm1tL3dvcmtpbmdzZXQuYz0yMTM9c3RhdGljIHZvaWQgdW5wYWNrX3NoYWRvdyh2b2lkICpzaGFkb3csIGludCAqbWVtY2dpZHAsIHBnX2RhdGFfdCAqKnBnZGF0LFxcbi0tXFxubW0vd29ya2luZ3NldC5jLTIzMi1cXG5tbS93b3JraW5nc2V0LmM6MjMzOiNpZmRlZiBDT05GSUdfTFJVX0dFTlxcbm1tL3dvcmtpbmdzZXQuYy0yMzQtXFxuLS1cXG5tbS93b3JraW5nc2V0LmM9MjkyPXN0YXRpYyB2b2lkIGxydV9nZW5fcmVmYXVsdChzdHJ1Y3QgZm9saW8gKmZvbGlvLCB2b2lkICpzaGFkb3cpXFxuLS1cXG5tbS93b3JraW5nc2V0LmMtMzM2LVxcbm1tL3dvcmtpbmdzZXQuYzozMzc6I2Vsc2UgLyogIUNPTkZJR19MUlVfR0VOICovXFxubW0vd29ya2luZ3NldC5jLTMzOC1cXG4tLVxcbm1tL3dvcmtpbmdzZXQuYz0zNTA9c3RhdGljIHZvaWQgbHJ1X2dlbl9yZWZhdWx0KHN0cnVjdCBmb2xpbyAqZm9saW8sIHZvaWQgKnNoYWRvdylcXG4tLVxcbm1tL3dvcmtpbmdzZXQuYy0zNTMtXFxubW0vd29ya2luZ3NldC5jOjM1NDojZW5kaWYgLyogQ09ORklHX0xSVV9HRU4gKi9cXG5tbS93b3JraW5nc2V0LmMtMzU1LVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wN1QwNzoyNTozMy4wNzMxOTA5ODlaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyODEzMzIyOTU3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkNoZWNraW5nIEtjb25maWcgZm9yIExSVSBHZW5lcmF0aW9uIENvbmZpZ3VyYXRpb24qKlxuXG5Pa2F5LCBzbyBJIG5lZWQgdG8gcmVmcmVzaCBteSBtZW1vcnkgb24gaG93IHRoaXMgTFJVIGdlbmVyYXRpb24gZmVhdHVyZSBpcyBjb25maWd1cmVkLiBGaXJzdCwgSSdtIGdvaW5nIHRvIHF1aWNrbHkgY2hlY2sgdGhlIEtjb25maWcgZmlsZXMgZm9yIHRoZSBvcHRpb25zIEkga25vdywgYExSVV9HRU5gIGFuZCBgTFJVX0dFTl9FTkFCTEVEYC4gVGhhdCdzIHdoZXJlIEkgd291bGQgZXhwZWN0IHRvIGZpbmQgdGhlIHJlbGV2YW50IHNldHRpbmdzLiBUaGVuLCB0byBtYWtlIHN1cmUgSSdtIGxvb2tpbmcgYXQgdGhlIHJpZ2h0IGZpbGVzLCBJIHdpbGwgdXNlIGBncmVwYCB0byBzZWFyY2ggZm9yIGBjb25maWcgTFJVX0dFTmAgd2l0aGluIGBtbS9LY29uZmlnYC4gVGhhdCBzaG91bGQgZ2l2ZSBtZSBhIHF1aWNrIGhpdCwgdGVsbGluZyBtZSB0aGUgY29uZmlnIHZhcmlhYmxlIG5hbWUgYW5kIHByb2JhYmx5IGl0cyBkZXNjcmlwdGlvbiwgYW5kIGhlbHAgZW5zdXJlIEknbSBuYXZpZ2F0aW5nIHRoZSBjb3JyZWN0IEtjb25maWcgc3RydWN0dXJlLiBUaGlzIGlzIGp1c3QgYSBwcmVsaW1pbmFyeSBzY2FuIGJlZm9yZSBJIGRpdmUgZGVlcGVyIGludG8gdGhlIGNvZGUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjcyMzcsIk91dHB1dFRva2VucyI6MjcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0MiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wN1QwNzoyNTozNS44ODY1MTYzMTZaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ5OTEyNDUyLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBMUlVfR0VOXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9LY29uZmlnPTEzODc9Y29uZmlnIFBURV9NQVJLRVJfVUZGRF9XUFxcbi0tXFxubW0vS2NvbmZpZy0xMzk3LSMgbXVsdGktZ2VuIExSVSB7XFxubW0vS2NvbmZpZzoxMzk4OmNvbmZpZyBMUlVfR0VOXFxubW0vS2NvbmZpZy0xMzk5LVxcdGJvb2wgXFxcIk11bHRpLUdlbiBMUlVcXFwiXFxuLS1cXG5tbS9LY29uZmlnLTE0MDYtXFxubW0vS2NvbmZpZzoxNDA3OmNvbmZpZyBMUlVfR0VOX0VOQUJMRURcXG5tbS9LY29uZmlnLTE0MDgtXFx0Ym9vbCBcXFwiRW5hYmxlIGJ5IGRlZmF1bHRcXFwiXFxuLS1cXG5tbS9LY29uZmlnLTE0MTItXFxubW0vS2NvbmZpZzoxNDEzOmNvbmZpZyBMUlVfR0VOX1NUQVRTXFxubW0vS2NvbmZpZy0xNDE0LVxcdGJvb2wgXFxcIkZ1bGwgc3RhdHMgZm9yIGRlYnVnZ2luZ1xcXCJcXG4tLVxcbm1tL0tjb25maWctMTQyMS1cXG5tbS9LY29uZmlnOjE0MjI6Y29uZmlnIExSVV9HRU5fV0FMS1NfTU1VXFxubW0vS2NvbmZpZy0xNDIzLVxcdGRlZl9ib29sIHlcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDdUMDc6MjU6MzUuOTM2NDM3ODI4WiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjE2NzYyNDMxNzAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBhIHN1bW1hcnkgb2YgbXkgdGhvdWdodCBwcm9jZXNzOlxuXG4qKkRpdmluZyBpbnRvIHRoZSBLZXJuZWwgQ29uZmlndXJhdGlvbiBMYW5kc2NhcGUqKlxuXG5Pa2F5LCBzbyBJIG5lZWQgdG8gdW5kZXJzdGFuZCBhIHNwZWNpZmljIGFzcGVjdCBvZiB0aGlzIGNvbmZpZ3VyYXRpb24uIE15IGltbWVkaWF0ZSBpbnN0aW5jdCBpcyB0byBqdW1wIGludG8gdGhlIGBtbS9LY29uZmlnYCBmaWxlLiBJJ20gdGhpbmtpbmcsIGJhc2VkIG9uIGV4cGVyaWVuY2UsIHRoYXQgYXJvdW5kIGxpbmUgMTM5OCwgSSdtIGxpa2VseSB0byBmaW5kIHRoZSByZWxldmFudCBzZWN0aW9uIGNvbnRhaW5pbmcgdGhlIGRlcGVuZGVuY2llcywgZnVydGhlciBkZXRhaWxzLCBhbmQgcGVyaGFwcyBzb21lIGhlbHBmdWwgY29tbWVudHMgYWJvdXQgd2hhdGV2ZXIgaXQgaXMgSSdtIGN1cnJlbnRseSBpbnZlc3RpZ2F0aW5nLiBUaW1lIHRvIGNoZWNrIHRoZXJlIGRpcmVjdGx5LlxuXG5cbiIsIklucHV0VG9rZW5zIjo3NzA1LCJPdXRwdXRUb2tlbnMiOjMzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDdUMDc6MjU6MzcuNjEyNjgyOTY4WiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEzNDMxMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJtbS9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEzOTUsXG4gIFwiTGluZUNvdW50XCI6IDQwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjEzOTU6XFx0XFx0ICBmaWxlLWJhY2tlZCBtZW1vcnkgdHlwZXMgbGlrZSBzaG1lbSBhbmQgaHVnZXRsYmZzLlxcbjEzOTY6XFx0XFxuMTM5NzpcXHQjIG11bHRpLWdlbiBMUlUge1xcbjEzOTg6XFx0Y29uZmlnIExSVV9HRU5cXG4xMzk5OlxcdFxcdGJvb2wgXFxcIk11bHRpLUdlbiBMUlVcXFwiXFxuMTQwMDpcXHRcXHRkZXBlbmRzIG9uIE1NVVxcbjE0MDE6XFx0XFx0IyBtYWtlIHN1cmUgZm9saW8tXFx1MDAzZWZsYWdzIGhhcyBlbm91Z2ggc3BhcmUgYml0c1xcbjE0MDI6XFx0XFx0ZGVwZW5kcyBvbiA2NEJJVCB8fCAhU1BBUlNFTUVNIHx8IFNQQVJTRU1FTV9WTUVNTUFQXFxuMTQwMzpcXHRcXHRoZWxwXFxuMTQwNDpcXHRcXHQgIEEgaGlnaCBwZXJmb3JtYW5jZSBMUlUgaW1wbGVtZW50YXRpb24gdG8gb3ZlcmNvbW1pdCBtZW1vcnkuIFNlZVxcbjE0MDU6XFx0XFx0ICBEb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL21tL211bHRpZ2VuX2xydS5yc3QgZm9yIGRldGFpbHMuXFxuMTQwNjpcXHRcXG4xNDA3OlxcdGNvbmZpZyBMUlVfR0VOX0VOQUJMRURcXG4xNDA4OlxcdFxcdGJvb2wgXFxcIkVuYWJsZSBieSBkZWZhdWx0XFxcIlxcbjE0MDk6XFx0XFx0ZGVwZW5kcyBvbiBMUlVfR0VOXFxuMTQxMDpcXHRcXHRoZWxwXFxuMTQxMTpcXHRcXHQgIFRoaXMgb3B0aW9uIGVuYWJsZXMgdGhlIG11bHRpLWdlbiBMUlUgYnkgZGVmYXVsdC5cXG4xNDEyOlxcdFxcbjE0MTM6XFx0Y29uZmlnIExSVV9HRU5fU1RBVFNcXG4xNDE0OlxcdFxcdGJvb2wgXFxcIkZ1bGwgc3RhdHMgZm9yIGRlYnVnZ2luZ1xcXCJcXG4xNDE1OlxcdFxcdGRlcGVuZHMgb24gTFJVX0dFTlxcbjE0MTY6XFx0XFx0aGVscFxcbjE0MTc6XFx0XFx0ICBEbyBub3QgZW5hYmxlIHRoaXMgb3B0aW9uIHVubGVzcyB5b3UgcGxhbiB0byBsb29rIGF0IGhpc3RvcmljYWwgc3RhdHNcXG4xNDE4OlxcdFxcdCAgZnJvbSBldmljdGVkIGdlbmVyYXRpb25zIGZvciBkZWJ1Z2dpbmcgcHVycG9zZS5cXG4xNDE5OlxcdFxcbjE0MjA6XFx0XFx0ICBUaGlzIG9wdGlvbiBoYXMgYSBwZXItbWVtY2cgYW5kIHBlci1ub2RlIG1lbW9yeSBvdmVyaGVhZC5cXG4xNDIxOlxcdFxcbjE0MjI6XFx0Y29uZmlnIExSVV9HRU5fV0FMS1NfTU1VXFxuMTQyMzpcXHRcXHRkZWZfYm9vbCB5XFxuMTQyNDpcXHRcXHRkZXBlbmRzIG9uIExSVV9HRU4gXFx1MDAyNlxcdTAwMjYgQVJDSF9IQVNfSFdfUFRFX1lPVU5HXFxuMTQyNTpcXHQjIH1cXG4xNDI2OlxcdFxcbjE0Mjc6XFx0Y29uZmlnIExPQ0tfTU1fQU5EX0ZJTkRfVk1BXFxuMTQyODpcXHRcXHRib29sXFxuMTQyOTpcXHRcXHRkZXBlbmRzIG9uICFTVEFDS19HUk9XU1VQXFxuMTQzMDpcXHRcXG4xNDMxOlxcdGNvbmZpZyBJT01NVV9NTV9EQVRBXFxuMTQzMjpcXHRcXHRib29sXFxuMTQzMzpcXHRcXG4xNDM0OlxcdGNvbmZpZyBFWEVDTUVNXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDA3OjI1OjM3LjYxMjgxODYwOFoiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjozODc0NDMzMzM3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkRpdmluZyBpbnRvIGBtbS92bXNjYW4uY2AgYW5kIE1HTFJVIFBhZ2UgUmVjbGFpbSoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IGBtbS92bXNjYW4uY2AsIHdoaWNoLCBhcyB3ZSBrbm93LCBpcyB0aGUgaGVhcnQgb2YgdGhlIGtlcm5lbCdzIG1lbW9yeSBtYW5hZ2VtZW50LCBhbmQgc3BlY2lmaWNhbGx5IGRlYWxpbmcgd2l0aCB0aGUgTXVsdGktR2VuIExSVSAoTUdMUlUpIGltcGxlbWVudGF0aW9uIGZvciBwYWdlIHJlY2xhaW0gYW5kIGFnaW5nLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0IHRoaXMgZGlmZiBpcyBkb2luZyBhbmQgdGhlIHJhdGlvbmFsZSBiZWhpbmQgaXQuXG5cblRoZSBkaWZmIGl0c2VsZiBpcyBwcmV0dHkgY29uY2lzZS4gSXQgc2VlbXMgdG8gYmUgbW9kaWZ5aW5nIGhvdyBmb2xpb3MgYXJlIGhhbmRsZWQgZHVyaW5nIGV2aWN0aW9uLiBCZWZvcmUgdGhlIGNoYW5nZSwgaWYgYSBmb2xpbydzIHNlcXVlbmNlIG51bWJlciBtYXRjaGVkIHRoZSBtaW5pbXVtIHNlcXVlbmNlIGZvciBhIHBhcnRpY3VsYXIgdHlwZSwgaXQgd2FzICppbXBsaWNpdGx5KiBtYWRlIGFjdGl2ZSAqYW5kKiBpdHMgTFJVIHJlZmVyZW5jZXMgd2VyZSBzZXQgdG8gemVyby4gTm93LCB0aGUgY29kZSBleHBsaWNpdGx5IHNldHMgdGhlIGZvbGlvIGFzIGFjdGl2ZSwgYW5kIHRoZW4gKmV4cGxpY2l0bHkqIHNldHMgdGhlIExSVSByZWZlcmVuY2VzIHRvIHplcm8sIHJlZ2FyZGxlc3Mgb2YgdGhlIHNlcXVlbmNlIG51bWJlci4gXG5cblRoZSBpbnRlcmVzdGluZyBwYXJ0IGlzIHRoZSBjb21tZW50OiAqXCJTZWUgdGhlIGNvbW1lbnRzIG9uIExSVV9SRUZTX0ZMQUdTXCIqLiBTbywgdGhlcmUncyBvYnZpb3VzbHkgYSBiaXQgb2YgYmFja2dyb3VuZCBvciBjb250ZXh0IGhlcmUgdGhhdCBJIG5lZWQgdG8gdW5kZXJzdGFuZC4gSSdtIGdvaW5nIHRvIGhhdmUgdG8gZGlnIGludG8gdGhlIGNvbW1lbnRzIGFyb3VuZCBgTFJVX1JFRlNfRkxBR1NgIGluIGBtbS92bXNjYW4uY2Agb3IgZWxzZXdoZXJlIGluIHRoZSBjb2RlYmFzZSB0byB1bmRlcnN0YW5kIHRoZSBpbXBsaWNhdGlvbnMgb2YgdGhpcyBjaGFuZ2UuIEl0IHNlZW1zIHRvIGJlIGEgc3VidGxlIGJ1dCBwb3RlbnRpYWxseSBpbXBvcnRhbnQgYWx0ZXJhdGlvbiBpbiBob3cgdGhlIE1HTFJVIGFsZ29yaXRobSBhZ2VzIGFuZCByZWNsYWltcyBwYWdlcy4gSSdsbCBuZWVkIHRvIHNlZSBpZiBpdCBpcyByZWxhdGVkIHRvIGEgc3VidGxlIGJ1ZyBmaXgsIG9yIG1heWJlIGEgcGVyZm9ybWFuY2Ugb3B0aW1pemF0aW9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjo4NDIxLCJPdXRwdXRUb2tlbnMiOjI5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzE5LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDdUMDc6MjU6NDEuNDg3MjU5ODI0WiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0OTg4OTYxMiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJMUlVfUkVGU19GTEFHU1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vZm9saW8uYz0zNTU9c3RhdGljIHZvaWQgbHJ1X2dlbl9pbmNfcmVmcyhzdHJ1Y3QgZm9saW8gKmZvbGlvKVxcbi0tXFxubW0vZm9saW8uYy0zNjItXFxubW0vZm9saW8uYzozNjM6XFx0Lyogc2VlIHRoZSBjb21tZW50IG9uIExSVV9SRUZTX0ZMQUdTICovXFxubW0vZm9saW8uYy0zNjQtXFx0aWYgKCFmb2xpb19scnVfcmVmcyhmb2xpbykpIHtcXG4tLVxcbm1tL3Ztc2Nhbi5jPTg2MD1zdGF0aWMgYm9vbCBscnVfZ2VuX3NldF9yZWZzKHN0cnVjdCBmb2xpbyAqZm9saW8sIGNvbnN0IHZtYV9mbGFnc190ICp2bWFfZmxhZ3MpXFxubW0vdm1zY2FuLmMtODYxLXtcXG5tbS92bXNjYW4uYzo4NjI6XFx0Lyogc2VlIHRoZSBjb21tZW50IG9uIExSVV9SRUZTX0ZMQUdTICovXFxubW0vdm1zY2FuLmMtODYzLVxcdGlmICghZm9saW9fdGVzdF9yZWZlcmVuY2VkKGZvbGlvKSBcXHUwMDI2XFx1MDAyNiAhZm9saW9fdGVzdF93b3JraW5nc2V0KGZvbGlvKSkge1xcbi0tXFxubW0vdm1zY2FuLmM9MzI5Nz1zdGF0aWMgaW50IGZvbGlvX3VwZGF0ZV9nZW4oc3RydWN0IGZvbGlvICpmb2xpbywgaW50IG5ld19nZW4sIGludCAqdHlwZSxcXG4tLVxcbm1tL3Ztc2Nhbi5jLTMzMDMtXFx0LypcXG5tbS92bXNjYW4uYzozMzA0OlxcdCAqIFNlZSB0aGUgY29tbWVudCBvbiBMUlVfUkVGU19GTEFHUywgYW5kIGFjdGl2YXRlIGZpbGUtYmFja2VkXFxubW0vdm1zY2FuLmMtMzMwNS1cXHQgKiBleGVjdXRhYmxlIGZvbGlvcyBhZnRlciBmaXJzdCB1c2FnZSB0byBhdm9pZCB0eXBpY2FsIElPXFxuLS1cXG5tbS92bXNjYW4uYz00Nzc0PXN0YXRpYyBib29sIGlzb2xhdGVfZm9saW8oc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYylcXG4tLVxcbm1tL3Ztc2Nhbi5jLTQ3ODctXFxubW0vdm1zY2FuLmM6NDc4ODpcXHQvKiBzZWUgdGhlIGNvbW1lbnQgb24gTFJVX1JFRlNfRkxBR1MgKi9cXG5tbS92bXNjYW4uYy00Nzg5LVxcdGlmICghZm9saW9fdGVzdF9yZWZlcmVuY2VkKGZvbGlvKSlcXG4tLVxcbm1tL3Ztc2Nhbi5jPTQ5NjQ9c3RhdGljIGludCBldmljdF9mb2xpb3ModW5zaWduZWQgbG9uZyBucl90b19zY2FuLCBzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsXFxuLS1cXG5tbS92bXNjYW4uYy01MDI2LVxcbm1tL3Ztc2Nhbi5jOjUwMjc6XFx0XFx0LyogU2VlIHRoZSBjb21tZW50cyBvbiBMUlVfUkVGU19GTEFHUyAqL1xcbm1tL3Ztc2Nhbi5jLTUwMjgtXFx0XFx0Zm9saW9fc2V0X2xydV9yZWZzKGZvbGlvLCAwKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDdUMDc6MjU6NDEuNTM3MTUzOTc2WiIsIlNlcSI6MTUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjM3NTkyMzcxMjYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIE1HTFJVIEV2aWN0aW9uIExvZ2ljIGZvciBGdXp6aW5nIE9wcG9ydHVuaXRpZXMqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIEknbSBsb29raW5nIGF0IGBldmljdF9mb2xpb3MoKWAgaW4gYG1tL3Ztc2Nhbi5jYCwgd2hpY2gsIGFzIEkga25vdywgaXMgYSBrZXkgY29tcG9uZW50IG9mIHRoZSBNdWx0aWdlbmVyYXRpb25hbCBMUlUgKE1HTFJVKSBldmljdGlvbiBwcm9jZXNzLiBTcGVjaWZpY2FsbHksIEknbSBub3RpY2luZyBhIGNoYW5nZTogYGZvbGlvX3NldF9scnVfcmVmcyhmb2xpbywgMCk7YCBpcyBub3cgdW5jb25kaXRpb25hbGx5IGNhbGxlZCB3aXRoaW4gdGhpcyBsb29wLiBCZWZvcmUsIGl0IHdhcyB0aWVkIHRvIGEgY29uZGl0aW9uYWwgY2hlY2sgcmVsYXRlZCB0byB0aGUgTFJVIHNlcXVlbmNlLlxuXG5NeSBpbW1lZGlhdGUgdGhvdWdodCBpcywgXCJJcyB0aGlzIHJlYWNoYWJsZT9cIiBhbmQgaWYgc28sIFwiSXMgaXQgd29ydGggYSBjbG9zZXIgbG9vayBmb3IgZnV6emluZyBwb3RlbnRpYWw/XCIgVGhlIGFuc3dlciB0byB0aGUgcmVhY2hhYmlsaXR5IHF1ZXN0aW9uIGFwcGVhcnMgdG8gYmUgeWVzOyB0aGlzIGlzIGNvcmUgTU0gcGFnZSByZWNsYWltIGFuZCBNR0xSVSBldmljdGlvbiwgdHJpZ2dlcmVkIGJ5IG1lbW9yeSBwcmVzc3VyZSBvciBkdXJpbmcgbm9ybWFsIHBhZ2UgcmVjbGFpbSBvcGVyYXRpb25zLiBTbywgaXQncyBkZWZpbml0ZWx5IGluIHRoZSBob3QgcGF0aC5cblxuTm93LCB0aGF0IGJyaW5ncyB1cyB0byBcIldvcnRoRnV6emluZz10cnVlLlwiIEdpdmVuIHRoYXQgdGhpcyBpcyBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50LCBzcGVjaWZpY2FsbHkgd2l0aGluIGEgcmVjbGFpbSBwYXRoLCB0aGUgcG90ZW50aWFsIGltcGFjdCBvZiBpc3N1ZXMgaGVyZSBpcyBoaWdoLiBJdCdzIGRlZmluaXRlbHkgaW4gYSBzdWJzeXN0ZW0sIGBtbS9gLCB0aGF0J3Mga25vd24gdG8gaGF2ZSBoYWQgcGFzdCBpc3N1ZXMgc28gdGhpcyBkZWZpbml0ZWx5IHdhcnJhbnRzIGNsb3NlciBpbnNwZWN0aW9uLlxuXG5TbywgbGV0J3MgaWRlbnRpZnkgcmVsZXZhbnQgZnVuY3Rpb25zIHRoYXQgY2FsbCBgZXZpY3RfZm9saW9zYCB0byB1bmRlcnN0YW5kIHdoZXJlIHRoaXMgaXMgYmVpbmcgZXhlY3V0ZWQuIFdoYXQgZnVuY3Rpb25zIHdpdGhpbiBgbW0vdm1zY2FuLmNgIGFyZSBjYWxsaW5nIGBldmljdF9mb2xpb3NgIGFuZCB3aGF0IHN1YnN5c3RlbXMgd291bGQgYmUgaW1wYWN0ZWQgaWYgdGhlcmUgYXJlIGlzc3Vlcz9cblxuXG4iLCJJbnB1dFRva2VucyI6OTYyOCwiT3V0cHV0VG9rZW5zIjoyNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIzNSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wN1QwNzoyNTo0NS4yOTYzOTg5MzFaIiwiU2VxIjoxNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjUwMTA3MTYzLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImV2aWN0X2ZvbGlvc1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vdm1zY2FuLmM9NDkyMD1zdGF0aWMgaW50IGlzb2xhdGVfZm9saW9zKHVuc2lnbmVkIGxvbmcgbnJfdG9fc2Nhbiwgc3RydWN0IGxydXZlYyAqbHJ1dmVjLFxcbi0tXFxubW0vdm1zY2FuLmMtNDk2My1cXG5tbS92bXNjYW4uYzo0OTY0OnN0YXRpYyBpbnQgZXZpY3RfZm9saW9zKHVuc2lnbmVkIGxvbmcgbnJfdG9fc2Nhbiwgc3RydWN0IGxydXZlYyAqbHJ1dmVjLFxcbm1tL3Ztc2Nhbi5jLTQ5NjUtXFx0XFx0XFx0c3RydWN0IHNjYW5fY29udHJvbCAqc2MsIGludCBzd2FwcGluZXNzKVxcbi0tXFxubW0vdm1zY2FuLmM9NTE0ND1zdGF0aWMgYm9vbCB0cnlfdG9fc2hyaW5rX2xydXZlYyhzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjKVxcbi0tXFxubW0vdm1zY2FuLmMtNTE2Ny1cXHRcXHRucl9iYXRjaCA9IG1pbihucl90b19zY2FuLCBNSU5fTFJVX0JBVENIKTtcXG5tbS92bXNjYW4uYzo1MTY4OlxcdFxcdGRlbHRhID0gZXZpY3RfZm9saW9zKG5yX2JhdGNoLCBscnV2ZWMsIHNjLCBzd2FwcGluZXNzKTtcXG5tbS92bXNjYW4uYy01MTY5LVxcdFxcdGlmICghZGVsdGEpXFxuLS1cXG5tbS92bXNjYW4uYz01Nzg1PXN0YXRpYyBpbnQgcnVuX2V2aWN0aW9uKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgdW5zaWduZWQgbG9uZyBzZXEsIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjLFxcbi0tXFxubW0vdm1zY2FuLmMtNTgwNS1cXHRcXHRucl9iYXRjaCA9IG1pbihucl90b19yZWNsYWltIC0gc2MtXFx1MDAzZW5yX3JlY2xhaW1lZCwgTUFYX0xSVV9CQVRDSCk7XFxubW0vdm1zY2FuLmM6NTgwNjpcXHRcXHRpZiAoIWV2aWN0X2ZvbGlvcyhucl9iYXRjaCwgbHJ1dmVjLCBzYywgc3dhcHBpbmVzcykpXFxubW0vdm1zY2FuLmMtNTgwNy1cXHRcXHRcXHRyZXR1cm4gMDtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDdUMDc6MjU6NDUuMzQ2NTEzMDQzWiIsIlNlcSI6MTcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjM1MDE3OTY0MDYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBgZXZpY3RfZm9saW9zYCBGdW5jdGlvbioqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gSSdtIGxvb2tpbmcgYXQgYGV2aWN0X2ZvbGlvc2AsIGFuZCBpbW1lZGlhdGVseSBJIG5vdGUgaXQncyBhIHN0YXRpYyBmdW5jdGlvbiByZXNpZGluZyBpbiBgbW0vdm1zY2FuLmNgLiBJdCdzIHByZXR0eSBzdWJzdGFudGlhbCwgcm91Z2hseSBhIGh1bmRyZWQgbGluZXMsIGludm9sdmluZyBsb29wcyBhbmQgY2FsbHMgdG8gYHNocmlua19mb2xpb19saXN0YC4gR2l2ZW4gaXRzIHNpemUgYW5kIHN0YXRpYyBuYXR1cmUsIGl0J3MgaGlnaGx5IHVubGlrZWx5IHRvIGJlIGlubGluZWQsIGFsdGhvdWdoIGlmIHRoZSBzeW1ib2wgaXMgcmV0YWluZWQgaXQgY2FuIGJlIHRhcmdldGVkLiBTbywgbXkgbmV4dCB0aG91Z2h0IGlzLCB3aG8ncyAqY2FsbGluZyogdGhpcyB0aGluZz9cblxuTGV0J3Mgc2VlOiBgdHJ5X3RvX3Nocmlua19scnV2ZWNgLCBgcnVuX2V2aWN0aW9uYCwgYW5kIGBscnVfZ2VuX3Nocmlua19scnV2ZWNgIGFuZCBgbHJ1X2dlbl9zaHJpbmtfbm9kZWAuIE5vdyBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgYnJvYWRlciBjb250ZXh0LiBJJ20gZ29pbmcgdG8gbG9vayBhdCB0aGUgY2FsbGVycyBvZiBgcnVuX2V2aWN0aW9uYCBhbmQgYHRyeV90b19zaHJpbmtfbHJ1dmVjYCB0byBnZXQgYSBiZXR0ZXIgc2Vuc2Ugb2YgdGhlIG92ZXJhbGwgbWVtb3J5IG1hbmFnZW1lbnQgZmxvdyBhbmQgaG93IGBldmljdF9mb2xpb3NgIGZpdHMgd2l0aGluIGl0LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMDU5OCwiT3V0cHV0VG9rZW5zIjo0OSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE1NSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wN1QwNzoyNTo0OC44NDgzMTIxMVoiLCJTZXEiOjE4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTEyMjk1MTIsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiKHJ1bl9ldmljdGlvbnx0cnlfdG9fc2hyaW5rX2xydXZlY3xscnVfZ2VuX3NocmluaylcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vdm1zY2FuLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vdm1zY2FuLmM9NTEwOT1zdGF0aWMgYm9vbCBzaG91bGRfYWJvcnRfc2NhbihzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjKVxcbi0tXFxubW0vdm1zY2FuLmMtNTE0My0gKi9cXG5tbS92bXNjYW4uYzo1MTQ0OnN0YXRpYyBib29sIHRyeV90b19zaHJpbmtfbHJ1dmVjKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgc3RydWN0IHNjYW5fY29udHJvbCAqc2MpXFxubW0vdm1zY2FuLmMtNTE0NS17XFxuLS1cXG5tbS92bXNjYW4uYz01MTg5PXN0YXRpYyBpbnQgc2hyaW5rX29uZShzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjKVxcbi0tXFxubW0vdm1zY2FuLmMtNTIwOC1cXG5tbS92bXNjYW4uYzo1MjA5OlxcdG5lZWRfcm90YXRlID0gdHJ5X3RvX3Nocmlua19scnV2ZWMobHJ1dmVjLCBzYyk7XFxubW0vdm1zY2FuLmMtNTIxMC1cXG4tLVxcbm1tL3Ztc2Nhbi5jPTUyMzA9c3RhdGljIHZvaWQgc2hyaW5rX21hbnkoc3RydWN0IHBnbGlzdF9kYXRhICpwZ2RhdCwgc3RydWN0IHNjYW5fY29udHJvbCAqc2MpXFxuLS1cXG5tbS92bXNjYW4uYy01Mjk5LVxcbm1tL3Ztc2Nhbi5jOjUzMDA6c3RhdGljIHZvaWQgbHJ1X2dlbl9zaHJpbmtfbHJ1dmVjKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgc3RydWN0IHNjYW5fY29udHJvbCAqc2MpXFxubW0vdm1zY2FuLmMtNTMwMS17XFxuLS1cXG5tbS92bXNjYW4uYy01MzEyLVxcbm1tL3Ztc2Nhbi5jOjUzMTM6XFx0aWYgKHRyeV90b19zaHJpbmtfbHJ1dmVjKGxydXZlYywgc2MpKVxcbm1tL3Ztc2Nhbi5jLTUzMTQtXFx0XFx0bHJ1X2dlbl9yb3RhdGVfbWVtY2cobHJ1dmVjLCBNRU1DR19MUlVfWU9VTkcpO1xcbi0tXFxubW0vdm1zY2FuLmMtNTMyMC1cXG5tbS92bXNjYW4uYzo1MzIxOnN0YXRpYyB2b2lkIGxydV9nZW5fc2hyaW5rX25vZGUoc3RydWN0IHBnbGlzdF9kYXRhICpwZ2RhdCwgc3RydWN0IHNjYW5fY29udHJvbCAqc2MpXFxubW0vdm1zY2FuLmMtNTMyMi17XFxuLS1cXG5tbS92bXNjYW4uYz01Nzc0PXN0YXRpYyBpbnQgcnVuX2FnaW5nKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgdW5zaWduZWQgbG9uZyBzZXEsXFxuLS1cXG5tbS92bXNjYW4uYy01Nzg0LVxcbm1tL3Ztc2Nhbi5jOjU3ODU6c3RhdGljIGludCBydW5fZXZpY3Rpb24oc3RydWN0IGxydXZlYyAqbHJ1dmVjLCB1bnNpZ25lZCBsb25nIHNlcSwgc3RydWN0IHNjYW5fY29udHJvbCAqc2MsXFxubW0vdm1zY2FuLmMtNTc4Ni1cXHRcXHRcXHRpbnQgc3dhcHBpbmVzcywgdW5zaWduZWQgbG9uZyBucl90b19yZWNsYWltKVxcbi0tXFxubW0vdm1zY2FuLmM9NTgxNT1zdGF0aWMgaW50IHJ1bl9jbWQoY2hhciBjbWQsIHU2NCBtZW1jZ19pZCwgaW50IG5pZCwgdW5zaWduZWQgbG9uZyBzZXEsXFxuLS1cXG5tbS92bXNjYW4uYy01ODQ2LVxcdGNhc2UgJy0nOlxcbm1tL3Ztc2Nhbi5jOjU4NDc6XFx0XFx0ZXJyID0gcnVuX2V2aWN0aW9uKGxydXZlYywgc2VxLCBzYywgc3dhcHBpbmVzcywgb3B0KTtcXG5tbS92bXNjYW4uYy01ODQ4LVxcdFxcdGJyZWFrO1xcbi0tXFxubW0vdm1zY2FuLmM9NjA1OD1zdGF0aWMgdm9pZCBscnVfZ2VuX2FnZV9ub2RlKHN0cnVjdCBwZ2xpc3RfZGF0YSAqcGdkYXQsIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjKVxcbi0tXFxubW0vdm1zY2FuLmMtNjA2Mi1cXG5tbS92bXNjYW4uYzo2MDYzOnN0YXRpYyB2b2lkIGxydV9nZW5fc2hyaW5rX2xydXZlYyhzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjKVxcbm1tL3Ztc2Nhbi5jLTYwNjQte1xcbi0tXFxubW0vdm1zY2FuLmMtNjA2Ny1cXG5tbS92bXNjYW4uYzo2MDY4OnN0YXRpYyB2b2lkIGxydV9nZW5fc2hyaW5rX25vZGUoc3RydWN0IHBnbGlzdF9kYXRhICpwZ2RhdCwgc3RydWN0IHNjYW5fY29udHJvbCAqc2MpXFxubW0vdm1zY2FuLmMtNjA2OS17XFxuLS1cXG5tbS92bXNjYW4uYz02MDc1PXN0YXRpYyB2b2lkIHNocmlua19scnV2ZWMoc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYylcXG4tLVxcbm1tL3Ztc2Nhbi5jLTYwODYtXFx0aWYgKChscnVfZ2VuX2VuYWJsZWQoKSB8fCBscnVfZ2VuX3N3aXRjaGluZygpKSBcXHUwMDI2XFx1MDAyNiAhcm9vdF9yZWNsYWltKHNjKSkge1xcbm1tL3Ztc2Nhbi5jOjYwODc6XFx0XFx0bHJ1X2dlbl9zaHJpbmtfbHJ1dmVjKGxydXZlYywgc2MpO1xcbm1tL3Ztc2Nhbi5jLTYwODgtXFxuLS1cXG5tbS92bXNjYW4uYz02MzQ1PXN0YXRpYyB2b2lkIHNocmlua19ub2RlKHBnX2RhdGFfdCAqcGdkYXQsIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjKVxcbi0tXFxubW0vdm1zY2FuLmMtNjM1Mi1cXHRcXHRtZW1zZXQoXFx1MDAyNnNjLVxcdTAwM2VuciwgMCwgc2l6ZW9mKHNjLVxcdTAwM2VucikpO1xcbm1tL3Ztc2Nhbi5jOjYzNTM6XFx0XFx0bHJ1X2dlbl9zaHJpbmtfbm9kZShwZ2RhdCwgc2MpO1xcbm1tL3Ztc2Nhbi5jLTYzNTQtXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDA3OjI1OjQ4Ljg5OTU0Njg2MloiLCJTZXEiOjE5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjozMzY0MDA4MzY4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFuYWx5c2lzIG9mIE1HTFJVIFJlY2xhaW0gRnVuY3Rpb25zKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBJJ20gbG9va2luZyBhdCBhIHNldCBvZiBmdW5jdGlvbnMgdGhhdCBzZWVtIHJlbGF0ZWQgdG8gbWVtb3J5IHJlY2xhaW0sIGFuZCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGVpciByb2xlcyB3aXRoaW4gdGhlIE1HTFJVIGZyYW1ld29yay4gVGhlIGBGb2N1c1N5bWJvbHNgIGhlcmUgYXJlIHF1aXRlIHNwZWNpZmljLiBJIHNlZTpcblxuKiAgIGBldmljdF9mb2xpb3NgOiBUaGlzIG9uZSBpbW1lZGlhdGVseSBqdW1wcyBvdXQgYXMgaXQncyB0aGUgc3BlY2lmaWMgZnVuY3Rpb24gdGhhdCdzIGJlZW4gbW9kaWZpZWQuXG4qICAgYHRyeV90b19zaHJpbmtfbHJ1dmVjYDogVGhpcyBpcyBhIGtleSBwbGF5ZXIgaW4gdGhlIHBhZ2UgcmVjbGFpbSBwYXRoLCBjYWxsaW5nIHVwb24gdGhlIGBldmljdF9mb2xpb3NgIGZ1bmN0aW9uLlxuKiAgIGBydW5fZXZpY3Rpb25gOiBUaGlzIGlzIGFsc28gYSBjYWxsZXIsIGJ1dCBpdCBhcHBlYXJzIHRvIGJlIHBhcnQgb2YgdGhlIGRlYnVnIGludGVyZmFjZSBvciBhZG1pbiBmdW5jdGlvbmFsaXR5LCBsaWtlbHkgYWNjZXNzZWQgdGhyb3VnaCBzb21ldGhpbmcgbGlrZSBgL3N5cy9rZXJuZWwvZGVidWcvbHJ1X2dlbmAuXG4qICAgYGxydV9nZW5fc2hyaW5rX2xydXZlY2A6IFRoaXMgYW5kIGBscnVfZ2VuX3Nocmlua19ub2RlYCBzZWVtcyBzcGVjaWFsaXplZCB0byB0aGUgTXVsdGktR2VuIExSVSBsb2dpYy5cblxuTm93LCB3aGlsZSBgc2hyaW5rX25vZGVgIHNlZW1zIGxpa2UgYSBtb3JlIGdlbmVyaWMgcmVjbGFpbWVyLCB0aGUgb3RoZXJzIChgbHJ1X2dlbl9zaHJpbmtfbHJ1dmVjYCwgYHRyeV90b19zaHJpbmtfbHJ1dmVjYCwgYHJ1bl9ldmljdGlvbmAsIGFuZCBgZXZpY3RfZm9saW9zYCkgYXJlIGFsbCBjbGVhcmx5IE1HTFJVLXNwZWNpZmljIHJlY2xhaW0gZnVuY3Rpb25zLiBLbm93aW5nIHRoYXQgYGV2aWN0X2ZvbGlvc2AgaXMgdGhlIGZ1bmN0aW9uIHRoYXQncyBiZWVuIG1vZGlmaWVkIGlzIHBhcnRpY3VsYXJseSBpbXBvcnRhbnQuXG5cblRoZSBuZXh0IHRoaW5nIEkgd2FudCB0byB1bmRlcnN0YW5kIGFyZSB0aGUgY29uZmlndXJhdGlvbiBvcHRpb25zLiBJdCBsb29rcyBsaWtlIGBDT05GSUdfTFJVX0dFTmAgaXMgdGhlIG1haW4gb25lIHRoYXQgZW5hYmxlcyBNdWx0aS1HZW4gTFJVLiBUaGUgcXVlc3Rpb24gSSBoYXZlIGlzIHdoZXRoZXIgdGhlIGBDT05GSUdfTFJVX0dFTl9FTkFCTEVEYCBpcyBuZWVkZWQsIG9yIGlmIGBDT05GSUdfTFJVX0dFTmAgaXMgZW5vdWdoIHRvIGVuYWJsZSBNR0xSVS4gSSBuZWVkIHRvIGRpdmUgaW50byB0aGUgaW1wbGVtZW50YXRpb24gb2YgYGxydV9nZW5fZW5hYmxlZCgpYCB0byBjbGFyaWZ5IHRoaXMgcG9pbnQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEyMTQ2LCJPdXRwdXRUb2tlbnMiOjI4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjY4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDA3OjI1OjUyLjI2MzU1NzU1WiIsIlNlcSI6MjAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1MzY0Njk3MiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJscnVfZ2VuX2VuYWJsZWRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL2ZvbGlvLmM9NDI2PXZvaWQgZm9saW9fbWFya19hY2Nlc3NlZChzdHJ1Y3QgZm9saW8gKmZvbGlvKVxcbi0tXFxubW0vZm9saW8uYy00MjktXFx0XFx0cmV0dXJuO1xcbm1tL2ZvbGlvLmM6NDMwOlxcdGlmIChscnVfZ2VuX2VuYWJsZWQoKSkge1xcbm1tL2ZvbGlvLmMtNDMxLVxcdFxcdGxydV9nZW5faW5jX3JlZnMoZm9saW8pO1xcbi0tXFxubW0vZm9saW8uYz00NzE9dm9pZCBmb2xpb19hZGRfbHJ1KHN0cnVjdCBmb2xpbyAqZm9saW8pXFxuLS1cXG5tbS9mb2xpby5jLTQ4My1cXHQgKi9cXG5tbS9mb2xpby5jOjQ4NDpcXHRpZiAobHJ1X2dlbl9lbmFibGVkKCkgXFx1MDAyNlxcdTAwMjYgIWZvbGlvX3Rlc3RfdW5ldmljdGFibGUoZm9saW8pIFxcdTAwMjZcXHUwMDI2XFxubW0vZm9saW8uYy00ODUtXFx0ICAgIGxydV9nZW5faW5fZmF1bHQoKSBcXHUwMDI2XFx1MDAyNiAhKGN1cnJlbnQtXFx1MDAzZWZsYWdzIFxcdTAwMjYgUEZfTUVNQUxMT0MpKSB7XFxuLS1cXG5tbS9mb2xpby5jPTUzNT1zdGF0aWMgdm9pZCBscnVfZGVhY3RpdmF0ZV9maWxlKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgc3RydWN0IGZvbGlvICpmb2xpbylcXG5tbS9mb2xpby5jLTUzNi17XFxubW0vZm9saW8uYzo1Mzc6XFx0Ym9vbCBhY3RpdmUgPSBmb2xpb190ZXN0X2FjdGl2ZShmb2xpbykgfHwgbHJ1X2dlbl9lbmFibGVkKCk7XFxubW0vZm9saW8uYy01MzgtXFx0bG9uZyBucl9wYWdlcyA9IGZvbGlvX25yX3BhZ2VzKGZvbGlvKTtcXG4tLVxcbm1tL2ZvbGlvLmM9NTc2PXN0YXRpYyB2b2lkIGxydV9kZWFjdGl2YXRlKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgc3RydWN0IGZvbGlvICpmb2xpbylcXG4tLVxcbm1tL2ZvbGlvLmMtNTc5LVxcbm1tL2ZvbGlvLmM6NTgwOlxcdGlmIChmb2xpb190ZXN0X3VuZXZpY3RhYmxlKGZvbGlvKSB8fCAhKGZvbGlvX3Rlc3RfYWN0aXZlKGZvbGlvKSB8fCBscnVfZ2VuX2VuYWJsZWQoKSkpXFxubW0vZm9saW8uYy01ODEtXFx0XFx0cmV0dXJuO1xcbi0tXFxubW0vZm9saW8uYz01OTI9c3RhdGljIHZvaWQgbHJ1X2xhenlmcmVlKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgc3RydWN0IGZvbGlvICpmb2xpbylcXG4tLVxcbm1tL2ZvbGlvLmMtNjAxLVxcdGZvbGlvX2NsZWFyX2FjdGl2ZShmb2xpbyk7XFxubW0vZm9saW8uYzo2MDI6XFx0aWYgKGxydV9nZW5fZW5hYmxlZCgpKVxcbm1tL2ZvbGlvLmMtNjAzLVxcdFxcdGxydV9nZW5fY2xlYXJfcmVmcyhmb2xpbyk7XFxuLS1cXG5tbS9mb2xpby5jPTY3MD12b2lkIGRlYWN0aXZhdGVfZmlsZV9mb2xpbyhzdHJ1Y3QgZm9saW8gKmZvbGlvKVxcbi0tXFxubW0vZm9saW8uYy02NzUtXFxubW0vZm9saW8uYzo2NzY6XFx0aWYgKGxydV9nZW5fZW5hYmxlZCgpIFxcdTAwMjZcXHUwMDI2IGxydV9nZW5fY2xlYXJfcmVmcyhmb2xpbykpXFxubW0vZm9saW8uYy02NzctXFx0XFx0cmV0dXJuO1xcbi0tXFxubW0vZm9saW8uYz02OTA9dm9pZCBmb2xpb19kZWFjdGl2YXRlKHN0cnVjdCBmb2xpbyAqZm9saW8pXFxuLS1cXG5tbS9mb2xpby5jLTY5NC1cXG5tbS9mb2xpby5jOjY5NTpcXHRpZiAobHJ1X2dlbl9lbmFibGVkKCkgPyBscnVfZ2VuX2NsZWFyX3JlZnMoZm9saW8pIDogIWZvbGlvX3Rlc3RfYWN0aXZlKGZvbGlvKSlcXG5tbS9mb2xpby5jLTY5Ni1cXHRcXHRyZXR1cm47XFxuLS1cXG5tbS9tZW1jb250cm9sLmM9Mjc4PXN0YXRpYyB2b2lkIG1lbWNnX3JlcGFyZW50X29iamNncyhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpXFxuLS1cXG5tbS9tZW1jb250cm9sLmMtMjg1LXJldHJ5Olxcbm1tL21lbWNvbnRyb2wuYzoyODY6XFx0XFx0aWYgKGxydV9nZW5fZW5hYmxlZCgpKVxcbm1tL21lbWNvbnRyb2wuYy0yODctXFx0XFx0XFx0bWF4X2xydV9nZW5fbWVtY2cocGFyZW50LCBuaWQpO1xcbi0tXFxubW0vbWVtY29udHJvbC5jLTI5MC1cXG5tbS9tZW1jb250cm9sLmM6MjkxOlxcdFxcdGlmIChscnVfZ2VuX2VuYWJsZWQoKSkge1xcbm1tL21lbWNvbnRyb2wuYy0yOTItXFx0XFx0XFx0aWYgKCFyZWNoZWNrX2xydV9nZW5fbWF4X21lbWNnKHBhcmVudCwgbmlkKSkge1xcbi0tXFxubW0vcm1hcC5jPTkyMD1zdGF0aWMgYm9vbCBmb2xpb19yZWZlcmVuY2VkX29uZShzdHJ1Y3QgZm9saW8gKmZvbGlvLFxcbi0tXFxubW0vcm1hcC5jLTk4My1cXHRcXHQgKi9cXG5tbS9ybWFwLmM6OTg0OlxcdFxcdGlmIChscnVfZ2VuX2VuYWJsZWQoKSBcXHUwMDI2XFx1MDAyNiAhbHJ1X2dlbl9zd2l0Y2hpbmcoKSBcXHUwMDI2XFx1MDAyNiBwdm13LnB0ZSkge1xcbm1tL3JtYXAuYy05ODUtXFx0XFx0XFx0aWYgKGxydV9nZW5fbG9va19hcm91bmQoXFx1MDAyNnB2bXcsIG5yKSlcXG4tLVxcbm1tL3Ztc2Nhbi5jPTg5MT1zdGF0aWMgZW51bSBmb2xpb19yZWZlcmVuY2VzIGZvbGlvX2NoZWNrX3JlZmVyZW5jZXMoc3RydWN0IGZvbGlvICpmb2xpbyxcXG4tLVxcbm1tL3Ztc2Nhbi5jLTkxNS1cXG5tbS92bXNjYW4uYzo5MTY6XFx0aWYgKGxydV9nZW5fZW5hYmxlZCgpIFxcdTAwMjZcXHUwMDI2ICFscnVfZ2VuX3N3aXRjaGluZygpKSB7XFxubW0vdm1zY2FuLmMtOTE3LVxcdFxcdGlmICghcmVmZXJlbmNlZF9wdGVzKVxcbi0tXFxubW0vdm1zY2FuLmM9MjMwOD1zdGF0aWMgdm9pZCBwcmVwYXJlX3NjYW5fY29udHJvbChwZ19kYXRhX3QgKnBnZGF0LCBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYylcXG4tLVxcbm1tL3Ztc2Nhbi5jLTIzMTQtXFxubW0vdm1zY2FuLmM6MjMxNTpcXHRpZiAobHJ1X2dlbl9lbmFibGVkKCkgXFx1MDAyNlxcdTAwMjYgIWxydV9nZW5fc3dpdGNoaW5nKCkpXFxubW0vdm1zY2FuLmMtMjMxNi1cXHRcXHRyZXR1cm47XFxuLS1cXG5tbS92bXNjYW4uYz01NDY0PXN0YXRpYyB2b2lkIGxydV9nZW5fY2hhbmdlX3N0YXRlKGJvb2wgZW5hYmxlZClcXG4tLVxcbm1tL3Ztc2Nhbi5jLTU0NzQtXFxubW0vdm1zY2FuLmM6NTQ3NTpcXHRpZiAoZW5hYmxlZCA9PSBscnVfZ2VuX2VuYWJsZWQoKSlcXG5tbS92bXNjYW4uYy01NDc2LVxcdFxcdGdvdG8gdW5sb2NrO1xcbi0tXFxubW0vdm1zY2FuLmM9NTU2Mj1zdGF0aWMgc3NpemVfdCBlbmFibGVkX3N0b3JlKHN0cnVjdCBrb2JqZWN0ICprb2JqLCBzdHJ1Y3Qga29ial9hdHRyaWJ1dGUgKmF0dHIsXFxuLS1cXG5tbS92bXNjYW4uYy01NTg4LVxcbm1tL3Ztc2Nhbi5jOjU1ODk6c3RhdGljIHN0cnVjdCBrb2JqX2F0dHJpYnV0ZSBscnVfZ2VuX2VuYWJsZWRfYXR0ciA9IF9fQVRUUl9SVyhlbmFibGVkKTtcXG5tbS92bXNjYW4uYy01NTkwLVxcbm1tL3Ztc2Nhbi5jPTU1OTE9c3RhdGljIHN0cnVjdCBhdHRyaWJ1dGUgKmxydV9nZW5fYXR0cnNbXSA9IHtcXG5tbS92bXNjYW4uYy01NTkyLVxcdFxcdTAwMjZscnVfZ2VuX21pbl90dGxfYXR0ci5hdHRyLFxcbm1tL3Ztc2Nhbi5jOjU1OTM6XFx0XFx1MDAyNmxydV9nZW5fZW5hYmxlZF9hdHRyLmF0dHIsXFxubW0vdm1zY2FuLmMtNTU5NC1cXHROVUxMXFxuLS1cXG5tbS92bXNjYW4uYz01OTc3PXZvaWQgbHJ1X2dlbl9pbml0X2xydXZlYyhzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMpXFxuLS1cXG5tbS92bXNjYW4uYy01OTg0LVxcdGxydWdlbi1cXHUwMDNlbWF4X3NlcSA9IE1JTl9OUl9HRU5TICsgMTtcXG5tbS92bXNjYW4uYzo1OTg1OlxcdGxydWdlbi1cXHUwMDNlZW5hYmxlZCA9IGxydV9nZW5fZW5hYmxlZCgpO1xcbm1tL3Ztc2Nhbi5jLTU5ODYtXFxuLS1cXG5tbS92bXNjYW4uYz02MDc1PXN0YXRpYyB2b2lkIHNocmlua19scnV2ZWMoc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYylcXG4tLVxcbm1tL3Ztc2Nhbi5jLTYwODUtXFxubW0vdm1zY2FuLmM6NjA4NjpcXHRpZiAoKGxydV9nZW5fZW5hYmxlZCgpIHx8IGxydV9nZW5fc3dpdGNoaW5nKCkpIFxcdTAwMjZcXHUwMDI2ICFyb290X3JlY2xhaW0oc2MpKSB7XFxubW0vdm1zY2FuLmMtNjA4Ny1cXHRcXHRscnVfZ2VuX3Nocmlua19scnV2ZWMobHJ1dmVjLCBzYyk7XFxuLS1cXG5tbS92bXNjYW4uYz02MzQ1PXN0YXRpYyB2b2lkIHNocmlua19ub2RlKHBnX2RhdGFfdCAqcGdkYXQsIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjKVxcbi0tXFxubW0vdm1zY2FuLmMtNjM1MC1cXG5tbS92bXNjYW4uYzo2MzUxOlxcdGlmICgobHJ1X2dlbl9lbmFibGVkKCkgfHwgbHJ1X2dlbl9zd2l0Y2hpbmcoKSkgXFx1MDAyNlxcdTAwMjYgcm9vdF9yZWNsYWltKHNjKSkge1xcbm1tL3Ztc2Nhbi5jLTYzNTItXFx0XFx0bWVtc2V0KFxcdTAwMjZzYy1cXHUwMDNlbnIsIDAsIHNpemVvZihzYy1cXHUwMDNlbnIpKTtcXG4tLVxcbm1tL3Ztc2Nhbi5jPTY2MDI9c3RhdGljIHZvaWQgc25hcHNob3RfcmVmYXVsdHMoc3RydWN0IG1lbV9jZ3JvdXAgKnRhcmdldF9tZW1jZywgcGdfZGF0YV90ICpwZ2RhdClcXG4tLVxcbm1tL3Ztc2Nhbi5jLTY2MDYtXFxubW0vdm1zY2FuLmM6NjYwNzpcXHRpZiAobHJ1X2dlbl9lbmFibGVkKCkgXFx1MDAyNlxcdTAwMjYgIWxydV9nZW5fc3dpdGNoaW5nKCkpXFxubW0vdm1zY2FuLmMtNjYwOC1cXHRcXHRyZXR1cm47XFxuLS1cXG5tbS92bXNjYW4uYz02OTUxPXN0YXRpYyB2b2lkIGtzd2FwZF9hZ2Vfbm9kZShzdHJ1Y3QgcGdsaXN0X2RhdGEgKnBnZGF0LCBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYylcXG4tLVxcbm1tL3Ztc2Nhbi5jLTY5NTUtXFxubW0vdm1zY2FuLmM6Njk1NjpcXHRpZiAobHJ1X2dlbl9lbmFibGVkKCkgfHwgbHJ1X2dlbl9zd2l0Y2hpbmcoKSkge1xcbm1tL3Ztc2Nhbi5jLTY5NTctXFx0XFx0bHJ1X2dlbl9hZ2Vfbm9kZShwZ2RhdCwgc2MpO1xcbi0tXFxubW0vd29ya2luZ3NldC5jPTM5Mj12b2lkICp3b3JraW5nc2V0X2V2aWN0aW9uKHN0cnVjdCBmb2xpbyAqZm9saW8sIHN0cnVjdCBtZW1fY2dyb3VwICp0YXJnZXRfbWVtY2cpXFxuLS1cXG5tbS93b3JraW5nc2V0LmMtNDA0LVxcbm1tL3dvcmtpbmdzZXQuYzo0MDU6XFx0aWYgKGxydV9nZW5fZW5hYmxlZCgpKVxcbm1tL3dvcmtpbmdzZXQuYy00MDYtXFx0XFx0cmV0dXJuIGxydV9nZW5fZXZpY3Rpb24oZm9saW8pO1xcbi0tXFxubW0vd29ya2luZ3NldC5jPTQzMD1ib29sIHdvcmtpbmdzZXRfdGVzdF9yZWNlbnQodm9pZCAqc2hhZG93LCBib29sIGZpbGUsIGJvb2wgKndvcmtpbmdzZXQsXFxuLS1cXG5tbS93b3JraW5nc2V0LmMtNDQxLVxcbm1tL3dvcmtpbmdzZXQuYzo0NDI6XFx0aWYgKGxydV9nZW5fZW5hYmxlZCgpKSB7XFxubW0vd29ya2luZ3NldC5jLTQ0My1cXHRcXHRib29sIHJlY2VudDtcXG4tLVxcbm1tL3dvcmtpbmdzZXQuYz01NDg9dm9pZCB3b3JraW5nc2V0X3JlZmF1bHQoc3RydWN0IGZvbGlvICpmb2xpbywgdm9pZCAqc2hhZG93KVxcbi0tXFxubW0vd29ya2luZ3NldC5jLTU1Ny1cXG5tbS93b3JraW5nc2V0LmM6NTU4OlxcdGlmIChscnVfZ2VuX2VuYWJsZWQoKSkge1xcbm1tL3dvcmtpbmdzZXQuYy01NTktXFx0XFx0bHJ1X2dlbl9yZWZhdWx0KGZvbGlvLCBzaGFkb3cpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wN1QwNzoyNTo1Mi4zMTcyMDk3MzJaIiwiU2VxIjoyMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NDU3MDAwMzY3NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBbmFseXNpcyBvZiBNR0xSVSBDb25maWd1cmF0aW9uIGFuZCBGdXp6aW5nIFJlcXVpcmVtZW50cyoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgTUdMUlUgc2V0dXAgYW5kIG15IGluaXRpYWwgYXNzZXNzbWVudCBjb25maXJtcyB0aGF0IGBDT05GSUdfTFJVX0dFTmAgYW5kIGBDT05GSUdfTFJVX0dFTl9FTkFCTEVEYCBhcmUgdGhlIGtleSBjb25maWd1cmF0aW9ucyBoZXJlLiBgTFJVX0dFTl9FTkFCTEVEYCBpcyBwYXJ0aWN1bGFybHkgaW50ZXJlc3RpbmcgYmVjYXVzZSBpdCBzZWVtcyB0byBhY3RpdmF0ZSBNR0xSVSBieSBkZWZhdWx0LCBieXBhc3NpbmcgdGhlIG5lZWQgZm9yIHN5c2ZzIGludGVyYWN0aW9uLCB3aGljaCBpcyBzb21ldGhpbmcgSSBuZWVkIHRvIGtlZXAgaW4gbWluZC5cblxuTm93LCBsZXQncyBtYWtlIHN1cmUgZXZlcnl0aGluZyBjaGVja3Mgb3V0IGZvciB0aGUgZnV6emluZyBydW4uIExvb2tzIGxpa2UgaXQncyBmbGFnZ2VkIGFzIGBXb3J0aEZ1enppbmc6IHRydWVgLCBhbmQgdGhlIHByb3ZpZGVkIHJlYXNvbmluZyBzZWVtcyBwZXJmZWN0bHkgY29uY2lzZSBhbmQgbG9naWNhbC4gVGhlIGBGb2N1c1N5bWJvbHNgIGFyZSBzcG90IG9uIOKAkyBgZXZpY3RfZm9saW9zYCwgYHRyeV90b19zaHJpbmtfbHJ1dmVjYCwgYHJ1bl9ldmljdGlvbmAsIGFuZCBgbHJ1X2dlbl9zaHJpbmtfbHJ1dmVjYC4gVGhvc2UgYXJlIHRoZSBjb3JlIGZ1bmN0aW9ucyBkaXJlY3RseSBpbnZvbHZlZCBpbiBvciBjb250YWluaW5nIHRoZSBtb2RpZmllZCBsb2dpYyB3aXRoaW4gTUdMUlUncyBldmljdGlvbiBhbmQgcmVjbGFpbSBwYXRocywgc28gZnV6emluZyB0aGVtIGlzIGRlZmluaXRlbHkgdGhlIHJpZ2h0IGFwcHJvYWNoLlxuXG5JJ2xsIHF1aWNrbHkgZG8gYSBzYW5pdHkgY2hlY2sgb24gdGhlIGNvbmZpZ3MgYWdhaW4sIGp1c3QgdG8gYmUgYWJzb2x1dGVseSBjZXJ0YWluOiBcIkxSVV9HRU5cIiwgXCJMUlVfR0VOX0VOQUJMRURcIiDigJMgeWVwLCBhbGwgcHJlc2VudCBhbmQgYWNjb3VudGVkIGZvci4gQW5kIGEgZmluYWwgc2FuaXR5IGNoZWNrIG9uIHRob3NlIGZvY3VzIHN5bWJvbHM6IFwiZXZpY3RfZm9saW9zXCIsIFwidHJ5X3RvX3Nocmlua19scnV2ZWNcIiwgXCJydW5fZXZpY3Rpb25cIiwgXCJscnVfZ2VuX3Nocmlua19scnV2ZWNcIiAtLSBZZXAsIGFsbCBvZiB0aGVtLlxuXG5HaXZlbiBhbGwgb2YgdGhpcywgSSdtIGNvbmZpZGVudCBpbiB0aGUgc2V0dXAuIFRpbWUgdG8gcHJvY2VlZCBhbmQgY2FsbCBgc2V0LXJlc3VsdHNgLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNTE1NSwiT3V0cHV0VG9rZW5zIjoxNDAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNDMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDdUMDc6MjU6NTYuODg3MjE1Nzc2WiIsIlNlcSI6MjIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODc0MDQ4MzYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkxSVV9HRU5cIixcbiAgICBcIkxSVV9HRU5fRU5BQkxFRFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImV2aWN0X2ZvbGlvc1wiLFxuICAgIFwidHJ5X3RvX3Nocmlua19scnV2ZWNcIixcbiAgICBcInJ1bl9ldmljdGlvblwiLFxuICAgIFwibHJ1X2dlbl9zaHJpbmtfbHJ1dmVjXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgTXVsdGktR2VuIExSVSAoTUdMUlUpIHBhZ2UgcmVjbGFpbSBsb2dpYyBpbiBtbS92bXNjYW4uYywgZW5zdXJpbmcgZm9saW8gTFJVIHJlZmVyZW5jZXMgYXJlIHVuY29uZGl0aW9uYWxseSByZXNldCB3aGVuIGZvbGlvcyBhcmUgcHV0IGJhY2suIFRoaXMgdG91Y2hlcyBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IHBhZ2UgZXZpY3Rpb24gcGF0aHMgcmVhY2hhYmxlIGR1cmluZyBtZW1vcnkgcmVjbGFpbSB1bmRlciBNR0xSVS5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJMUlVfR0VOXCIsXG4gICAgXCJMUlVfR0VOX0VOQUJMRURcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJldmljdF9mb2xpb3NcIixcbiAgICBcInRyeV90b19zaHJpbmtfbHJ1dmVjXCIsXG4gICAgXCJydW5fZXZpY3Rpb25cIixcbiAgICBcImxydV9nZW5fc2hyaW5rX2xydXZlY1wiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIE11bHRpLUdlbiBMUlUgKE1HTFJVKSBwYWdlIHJlY2xhaW0gbG9naWMgaW4gbW0vdm1zY2FuLmMsIGVuc3VyaW5nIGZvbGlvIExSVSByZWZlcmVuY2VzIGFyZSB1bmNvbmRpdGlvbmFsbHkgcmVzZXQgd2hlbiBmb2xpb3MgYXJlIHB1dCBiYWNrLiBUaGlzIHRvdWNoZXMgY29yZSBtZW1vcnkgbWFuYWdlbWVudCBwYWdlIGV2aWN0aW9uIHBhdGhzIHJlYWNoYWJsZSBkdXJpbmcgbWVtb3J5IHJlY2xhaW0gdW5kZXIgTUdMUlUuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDA3OjI1OjU2Ljk3NDYyNjI4MloiLCJTZXEiOjIzLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6IklmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTMyNjQ4MDk5MjUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wN1QwNzoyNTo1Ni45NzUxNjc0NDJaIiwiU2VxIjoyNCwiTmVzdGluZyI6MiwiVHlwZSI6ImFnZW50IiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiY29yZSIsIkR1cmF0aW9uIjoxMzI2NDI2NDg5NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgcGFnZSByZWNsYWltIGxvZ2ljIGluIHRoZSBNdWx0aS1HZW4gTFJVIChNR0xSVSkgc3Vic3lzdGVtIChgbW0vdm1zY2FuLmNgKSwgc3BlY2lmaWNhbGx5IGluIGBldmljdF9mb2xpb3MoKWAuIEl0IG1vdmVzIGBmb2xpb19zZXRfbHJ1X3JlZnMoZm9saW8sIDApYCBvdXRzaWRlIG9mIGEgY29uZGl0aW9uYWwgY2hlY2sgc28gdGhhdCBMUlUgcmVmZXJlbmNlIGZsYWdzIGFyZSBjbGVhcmVkIHVuY29uZGl0aW9uYWxseSBmb3IgZm9saW9zIHJlbWFpbmluZyBvbiB0aGUgbGlzdC5cXG5cXG5UaGlzIGNoYW5nZSBwdXJlbHkgYWZmZWN0cyBmb2xpbyBtZXRhZGF0YS9mbGFncyBkdXJpbmcgTFJVIHBhZ2UgcmVjbGFpbS4gSXQgZG9lcyBub3QgaW50cm9kdWNlIG9yIG1vZGlmeTpcXG4xLiBEYXRhIHN0cnVjdHVyZXMgY29waWVkIHRvIHVzZXIgc3BhY2Ugb3Iga2VybmVsIGluZm8tbGVha3MuXFxuMi4gVW5pbml0aWFsaXplZCB2YXJpYWJsZXMsIHN0cnVjdCBmaWVsZHMsIG9yIG1lbW9yeSBhbGxvY2F0aW9ucy5cXG4zLiBMZW5ndGhzIG9yIGJvdW5kcyBjaGVja3MgdGhhdCBjb3VsZCBleHBvc2UgdW5pbml0aWFsaXplZCBidWZmZXIgbWVtb3J5LlxcblxcbkJlY2F1c2UgdGhlcmUgYXJlIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzIG9yIGluZm8tbGVha3MsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3Qgd2FycmFudGVkLiBTdGFuZGFyZCBLQVNBTi9zYW5pdGl6ZXIgYnVpbGRzIGFyZSBzdWZmaWNpZW50LlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeVxuZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmRcbmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcilcbmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLlxuXG5DUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjpcbi0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZVxuICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU5cbiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUFxuICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLlxuLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCxcbiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLlxuXG5SdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLFxuTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy5cbkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFlcbnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzXG50aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLlxuXG5Mb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdFxudW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsXG5hIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXNcbnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nXG51bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2xcbmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSxcbmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6XG4xLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYlxuICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHNcbiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuXG4yLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzXG4gICBvciBzdHJ1Y3QgZmllbGRzLlxuMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkc1xuICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy5cbjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzXG4gICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuXG5cblNldCBOZWVkc0tNU0FOPWZhbHNlIElGOlxuLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlclxuICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHRcbiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLlxuLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZFxuICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuXG4tIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy5cblxuVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZVxuZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0XG5cbkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IGEzOGVlMDkxM2JmYTEyNDQ5Nzk4M2I4ZWNhNGE4NmI2MmM5NDY0ZDBcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgTW9uIFNlcCA3IDA3OjI1OjE5IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvbW0vdm1zY2FuLmMgYi9tbS92bXNjYW4uY1xuaW5kZXggNDBkM2YxYjQ4YTc0Yy4uNDJjMGEwOTkzOGFiMiAxMDA2NDRcbi0tLSBhL21tL3Ztc2Nhbi5jXG4rKysgYi9tbS92bXNjYW4uY1xuQEAgLTUwMjEsMTAgKzUwMjEsMTEgQEAgc3RhdGljIGludCBldmljdF9mb2xpb3ModW5zaWduZWQgbG9uZyBucl90b19zY2FuLCBzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsXG4gXHRcdH1cbiBcbiBcdFx0LyogZG9uJ3QgYWRkIHJlamVjdGVkIGZvbGlvcyB0byB0aGUgb2xkZXN0IGdlbmVyYXRpb24gKi9cbi1cdFx0aWYgKGxydV9nZW5fZm9saW9fc2VxKGxydXZlYywgZm9saW8sIGZhbHNlKSA9PSBtaW5fc2VxW3R5cGVdKSB7XG4tXHRcdFx0Zm9saW9fc2V0X2xydV9yZWZzKGZvbGlvLCAwKTtcbitcdFx0aWYgKGxydV9nZW5fZm9saW9fc2VxKGxydXZlYywgZm9saW8sIGZhbHNlKSA9PSBtaW5fc2VxW3R5cGVdKVxuIFx0XHRcdGZvbGlvX3NldF9hY3RpdmUoZm9saW8pO1xuLVx0XHR9XG4rXG4rXHRcdC8qIFNlZSB0aGUgY29tbWVudHMgb24gTFJVX1JFRlNfRkxBR1MgKi9cbitcdFx0Zm9saW9fc2V0X2xydV9yZWZzKGZvbGlvLCAwKTtcbiBcdH1cbiBcbiBcdG1vdmVfZm9saW9zX3RvX2xydShcdTAwMjZsaXN0KTtcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDA3OjI1OjU2Ljk3NTE2ODU0MloiLCJTZXEiOjI1LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjozOTAwNzg1NDIyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIG15IG93bjpcblxuKipBbmFseXppbmcgYSBQb3RlbnRpYWwgTWVtb3J5IE1hbmFnZW1lbnQgUGF0Y2gqKlxuXG5BbHJpZ2h0LCB0aW1lIHRvIGRpdmUgaW4uIEkgbmVlZCB0byBnZXQgYSBoYW5kbGUgb24gdGhpcyBwYXRjaCwgYW5kIHRoZSBjb250ZXh0IGl0J3Mgd29ya2luZyB3aXRoaW4uIEknbSB0aGlua2luZyB0aGUgbG9naWNhbCBwbGFjZSB0byBzdGFydCBpcyByaWdodCB0aGVyZSBpbiBgbW0vdm1zY2FuLmNgLiBMZXQgbWUgcXVpY2tseSBwdWxsIHVwIHRoYXQgZmlsZSDigJMgdGhlIHVzdWFsIGByZWFkLWZpbGVgIGNvbW1hbmQgc2hvdWxkIGRvIHRoZSB0cmljay4gTm93LCBsZXQncyB6ZXJvIGluIG9uIHJvdWdobHkgbGluZSA1MDIxLiBUaGF0J3MgdXN1YWxseSBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQgdG8gZ2V0IGEgZmVlbCBmb3Igd2hhdCdzIGhhcHBlbmluZyBpbiB0aGUgdmljaW5pdHkgb2YgdGhlIGNoYW5nZS4gVGhpcyBzaG91bGQgZ2l2ZSBtZSB0aGUgY29yZSBpZGVhIG9mIHdoYXQgaXMgaGFwcGVuaW5nLiBPbmNlIEkgaGF2ZSB0aGUgY29yZSBjb25jZXB0LCBJJ2xsIGJyYW5jaCBvdXQgYXMgcmVxdWlyZWQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIxNTksIk91dHB1dFRva2VucyI6MzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0NywiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDA3OjI2OjAwLjg3NTk1NjA2NFoiLCJTZXEiOjI2LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NTA3NDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibW0vdm1zY2FuLmNcIixcbiAgXCJGaXJzdExpbmVcIjogNTAwMCxcbiAgXCJMaW5lQ291bnRcIjogNDVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiNTAwMDpcXHRcXHRzYy1cXHUwMDNlbnJfcmVjbGFpbWVkICs9IHJlY2xhaW1lZDtcXG41MDAxOlxcdFxcdHRvdGFsX3JlY2xhaW1lZCArPSByZWNsYWltZWQ7XFxuNTAwMjpcXHRcXHQvKiBSZXRyeSBwYXNzIGlzIG9ubHkgbWVhbnQgZm9yIGNsZWFuIGZvbGlvcyB3aXRob3V0IG5ldyBpc29sYXRpb24gKi9cXG41MDAzOlxcdFxcdGlmIChpc29sYXRlZClcXG41MDA0OlxcdFxcdFxcdGhhbmRsZV9yZWNsYWltX3dyaXRlYmFjayhpc29sYXRlZCwgcGdkYXQsIHNjLCBcXHUwMDI2c3RhdCk7XFxuNTAwNTpcXHRcXHR0cmFjZV9tbV92bXNjYW5fbHJ1X3Nocmlua19pbmFjdGl2ZShwZ2RhdC1cXHUwMDNlbm9kZV9pZCxcXG41MDA2OlxcdFxcdFxcdFxcdHR5cGVfc2Nhbm5lZCwgcmVjbGFpbWVkLCBcXHUwMDI2c3RhdCwgc2MtXFx1MDAzZXByaW9yaXR5LFxcbjUwMDc6XFx0XFx0XFx0XFx0dHlwZSA/IExSVV9JTkFDVElWRV9GSUxFIDogTFJVX0lOQUNUSVZFX0FOT04pO1xcbjUwMDg6XFx0XFxuNTAwOTpcXHRcXHRsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmVfcmV2ZXJzZShmb2xpbywgbmV4dCwgXFx1MDAyNmxpc3QsIGxydSkge1xcbjUwMTA6XFx0XFx0XFx0REVGSU5FX01JTl9TRVEobHJ1dmVjKTtcXG41MDExOlxcdFxcbjUwMTI6XFx0XFx0XFx0LyogbW92ZV9mb2xpb3NfdG9fbHJ1KCkgY3VsbHMgdW5ldmljdGFibGUgZm9saW9zIHZpYSBmb2xpb19wdXRiYWNrX2xydSgpICovXFxuNTAxMzpcXHRcXHRcXHRpZiAoIWZvbGlvX2V2aWN0YWJsZShmb2xpbykpXFxuNTAxNDpcXHRcXHRcXHRcXHRjb250aW51ZTtcXG41MDE1OlxcdFxcbjUwMTY6XFx0XFx0XFx0LyogcmV0cnkgZm9saW9zIHRoYXQgbWF5IGhhdmUgbWlzc2VkIGZvbGlvX3JvdGF0ZV9yZWNsYWltYWJsZSgpICovXFxuNTAxNzpcXHRcXHRcXHRpZiAoIXNraXBfcmV0cnkgXFx1MDAyNlxcdTAwMjYgIWZvbGlvX3Rlc3RfYWN0aXZlKGZvbGlvKSBcXHUwMDI2XFx1MDAyNiAhZm9saW9fbWFwcGVkKGZvbGlvKSBcXHUwMDI2XFx1MDAyNlxcbjUwMTg6XFx0XFx0XFx0ICAgICFmb2xpb190ZXN0X2RpcnR5KGZvbGlvKSBcXHUwMDI2XFx1MDAyNiAhZm9saW9fdGVzdF93cml0ZWJhY2soZm9saW8pKSB7XFxuNTAxOTpcXHRcXHRcXHRcXHRsaXN0X21vdmUoXFx1MDAyNmZvbGlvLVxcdTAwM2VscnUsIFxcdTAwMjZjbGVhbik7XFxuNTAyMDpcXHRcXHRcXHRcXHRjb250aW51ZTtcXG41MDIxOlxcdFxcdFxcdH1cXG41MDIyOlxcdFxcbjUwMjM6XFx0XFx0XFx0LyogZG9uJ3QgYWRkIHJlamVjdGVkIGZvbGlvcyB0byB0aGUgb2xkZXN0IGdlbmVyYXRpb24gKi9cXG41MDI0OlxcdFxcdFxcdGlmIChscnVfZ2VuX2ZvbGlvX3NlcShscnV2ZWMsIGZvbGlvLCBmYWxzZSkgPT0gbWluX3NlcVt0eXBlXSlcXG41MDI1OlxcdFxcdFxcdFxcdGZvbGlvX3NldF9hY3RpdmUoZm9saW8pO1xcbjUwMjY6XFx0XFxuNTAyNzpcXHRcXHRcXHQvKiBTZWUgdGhlIGNvbW1lbnRzIG9uIExSVV9SRUZTX0ZMQUdTICovXFxuNTAyODpcXHRcXHRcXHRmb2xpb19zZXRfbHJ1X3JlZnMoZm9saW8sIDApO1xcbjUwMjk6XFx0XFx0fVxcbjUwMzA6XFx0XFxuNTAzMTpcXHRcXHRtb3ZlX2ZvbGlvc190b19scnUoXFx1MDAyNmxpc3QpO1xcbjUwMzI6XFx0XFxuNTAzMzpcXHRcXHR3YWxrID0gY3VycmVudC1cXHUwMDNlcmVjbGFpbV9zdGF0ZS1cXHUwMDNlbW1fd2FsaztcXG41MDM0OlxcdFxcdGlmICh3YWxrIFxcdTAwMjZcXHUwMDI2IHdhbGstXFx1MDAzZWJhdGNoZWQpIHtcXG41MDM1OlxcdFxcdFxcdHdhbGstXFx1MDAzZWxydXZlYyA9IGxydXZlYztcXG41MDM2OlxcdFxcdFxcdHJlc2V0X2JhdGNoX3NpemUod2Fsayk7XFxuNTAzNzpcXHRcXHR9XFxuNTAzODpcXHRcXG41MDM5OlxcdFxcdG1vZF9scnV2ZWNfc3RhdGUobHJ1dmVjLCBQR0RFTU9URV9LU1dBUEQgKyByZWNsYWltZXJfb2Zmc2V0KHNjKSxcXG41MDQwOlxcdFxcdFxcdFxcdFxcdFxcdHN0YXQubnJfZGVtb3RlZCk7XFxuNTA0MTpcXHRcXG41MDQyOlxcdFxcdGl0ZW0gPSBQR1NURUFMX0tTV0FQRCArIHJlY2xhaW1lcl9vZmZzZXQoc2MpO1xcbjUwNDM6XFx0XFx0bW9kX2xydXZlY19zdGF0ZShscnV2ZWMsIGl0ZW0sIHJlY2xhaW1lZCk7XFxuNTA0NDpcXHRcXHRtb2RfbHJ1dmVjX3N0YXRlKGxydXZlYywgUEdTVEVBTF9BTk9OICsgdHlwZSwgcmVjbGFpbWVkKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDdUMDc6MjY6MDAuODc2NDA4NTg0WiIsIlNlcSI6MjcsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjI3NTQ4MTcxNjcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBFdmljdCBGb2xpb3MgUGF0Y2gqKlxuXG5BbHJpZ2h0LCBsZXQncyBkaXZlIGludG8gdGhpcyBwYXRjaC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGNoYW5nZSBpbiBgZXZpY3RfZm9saW9zYC4gT2theSwgcHJldmlvdXNseSwgdGhlIGNvZGUgaW5jbHVkZWQgYSBjaGVjayB0byBwcmV2ZW50IHJlamVjdGVkIGZvbGlvcyBmcm9tIGJlaW5nIGFkZGVkIHRvIHRoZSBvbGRlc3QgZ2VuZXJhdGlvbi4gSWYgYSBmb2xpbydzIHNlcXVlbmNlIG1hdGNoZWQgdGhlIG1pbmltdW0gc2VxdWVuY2UsIGl0IHdhcyBiZWluZyB6ZXJvZWQgb3V0IHJlZ2FyZGluZyByZWZlcmVuY2VzICphbmQqIHNldCB0byBhY3RpdmUuIFRoZSBjaGFuZ2UgYXBwZWFycyB0byBoYXZlIHJlbW92ZWQgdGhlIGBmb2xpb19zZXRfbHJ1X3JlZnMoZm9saW8sIDApYCBjYWxsIGZyb20gd2l0aGluIHRoZSBgaWZgIGJsb2NrLCBpbnN0ZWFkIG1vdmluZyBpdCAqYWZ0ZXIqIHRoZSBgaWZgIHN0YXRlbWVudC4gQW5kIHRoZSBmb2xpbyBpcyBub3cgKm9ubHkqIHNldCB0byBhY3RpdmUgaW5zaWRlIHRoZSBgaWZgIHN0YXRlbWVudC5cblxuSSBuZWVkIHRvIHVuZGVyc3RhbmQgKndoeSogdGhpcyBjaGFuZ2Ugd2FzIG1hZGUuIEl0IHNlZW1zIGxpa2UgdGhlIGludGVudGlvbiBpcyB0byBtb2RpZnkgaG93IGxydSByZWZlcmVuY2VzIGFyZSBoYW5kbGVkIHNwZWNpZmljYWxseSBjb25jZXJuaW5nIHJlamVjdGVkIGZvbGlvcy4gVGhlIGNvbW1lbnQgb24gYExSVV9SRUZTX0ZMQUdTYCBpcyBhIGNsdWUuIEknbGwgbmVlZCB0byBjaGVjayB0aGUgZGVmaW5pdGlvbiBvZiBgZm9saW9fc2V0X2xydV9yZWZzYCBhbmQgdGhlIGBMUlVfUkVGU19GTEFHU2AgY29tbWVudC4gTGV0J3Mgc2VlLi4uIGEgcXVpY2sgZ3JlcCBmb3IgYGZvbGlvX3NldF9scnVfcmVmc2Agc2hvdWxkIGdpdmUgbWUgdGhlIHJlbGV2YW50IGluZm9ybWF0aW9uLiBJdCBzZWVtcyBsaWtlIHRoaXMgbW9kaWZpY2F0aW9uIGlzIGRlc2lnbmVkIHRvIHByZXZlbnQgYSByYWNlIGNvbmRpdGlvbiBvciBzb21lIHVuZXhwZWN0ZWQgYmVoYXZpb3IgcmVsYXRlZCB0byBob3cgdGhlIExSVSByZWZlcmVuY2VzIGFyZSBtYW5hZ2VkIGluIHRoaXMgc3BlY2lmaWMgc2NlbmFyaW8gd2l0aCByZWplY3RlZCBmb2xpb3MuIEkgbmVlZCB0byB0cmFjZSB0aGlzIGZ1cnRoZXIgdG8gYmUgY2VydGFpbiwgYnV0IHRoaXMgaW5pdGlhbCBhbmFseXNpcyBnaXZlcyBtZSBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjMyMDcsIk91dHB1dFRva2VucyI6MjIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMzMsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wN1QwNzoyNjowMy42MzEyMjk4NDFaIiwiU2VxIjoyOCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIwMzk5NjMwNjIsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZm9saW9fc2V0X2xydV9yZWZzXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImluY2x1ZGUvbGludXgvbW1faW5saW5lLmg9MjI1PXN0YXRpYyBpbmxpbmUgaW50IGZvbGlvX2xydV9yZWZzKGNvbnN0IHN0cnVjdCBmb2xpbyAqZm9saW8pXFxuLS1cXG5pbmNsdWRlL2xpbnV4L21tX2lubGluZS5oLTIyOS1cXG5pbmNsdWRlL2xpbnV4L21tX2lubGluZS5oOjIzMDpzdGF0aWMgaW5saW5lIHZvaWQgZm9saW9fc2V0X2xydV9yZWZzKHN0cnVjdCBmb2xpbyAqZm9saW8sIHVuc2lnbmVkIGludCByZWZzKVxcbmluY2x1ZGUvbGludXgvbW1faW5saW5lLmgtMjMxLXtcXG4tLVxcbmluY2x1ZGUvbGludXgvbW1faW5saW5lLmg9Mzk2PXN0YXRpYyBpbmxpbmUgdm9pZCBmb2xpb19taWdyYXRlX2xydV9yZWZzKHN0cnVjdCBmb2xpbyAqbmV3LCBjb25zdCBzdHJ1Y3QgZm9saW8gKm9sZClcXG4tLVxcbmluY2x1ZGUvbGludXgvbW1faW5saW5lLmgtMzk4LVxcdEJVSUxEX0JVR19PTihMUlVfUkVGU19NQVNLIFxcdTAwMjYgQklUKFBHX3JlZmVyZW5jZWQpKTtcXG5pbmNsdWRlL2xpbnV4L21tX2lubGluZS5oOjM5OTpcXHRmb2xpb19zZXRfbHJ1X3JlZnMobmV3LCBmb2xpb19scnVfcmVmcyhvbGQpKTtcXG5pbmNsdWRlL2xpbnV4L21tX2lubGluZS5oLTQwMC19XFxuLS1cXG5tbS9mb2xpby5jPTM1NT1zdGF0aWMgdm9pZCBscnVfZ2VuX2luY19yZWZzKHN0cnVjdCBmb2xpbyAqZm9saW8pXFxuLS1cXG5tbS9mb2xpby5jLTM2NC1cXHRpZiAoIWZvbGlvX2xydV9yZWZzKGZvbGlvKSkge1xcbm1tL2ZvbGlvLmM6MzY1OlxcdFxcdGZvbGlvX3NldF9scnVfcmVmcyhmb2xpbywgMSk7XFxubW0vZm9saW8uYy0zNjYtXFx0XFx0cmV0dXJuO1xcbi0tXFxubW0vZm9saW8uYz0zODE9c3RhdGljIGJvb2wgbHJ1X2dlbl9jbGVhcl9yZWZzKHN0cnVjdCBmb2xpbyAqZm9saW8pXFxuLS1cXG5tbS9mb2xpby5jLTM4OS1cXG5tbS9mb2xpby5jOjM5MDpcXHRmb2xpb19zZXRfbHJ1X3JlZnMoZm9saW8sIDApO1xcbm1tL2ZvbGlvLmMtMzkxLVxcdGZvbGlvX2NsZWFyX3dvcmtpbmdzZXQoZm9saW8pO1xcbi0tXFxubW0vdm1zY2FuLmM9ODYwPXN0YXRpYyBib29sIGxydV9nZW5fc2V0X3JlZnMoc3RydWN0IGZvbGlvICpmb2xpbywgY29uc3Qgdm1hX2ZsYWdzX3QgKnZtYV9mbGFncylcXG4tLVxcbm1tL3Ztc2Nhbi5jLTg2Ni1cXHRcXHRcXHRmb2xpb19zZXRfd29ya2luZ3NldChmb2xpbyk7XFxubW0vdm1zY2FuLmM6ODY3OlxcdFxcdFxcdGZvbGlvX3NldF9scnVfcmVmcyhmb2xpbywgMCk7XFxubW0vdm1zY2FuLmMtODY4LVxcdFxcdFxcdHJldHVybiB0cnVlO1xcbi0tXFxubW0vdm1zY2FuLmMtODcwLVxcbm1tL3Ztc2Nhbi5jOjg3MTpcXHRcXHRmb2xpb19zZXRfbHJ1X3JlZnMoZm9saW8sIDEpO1xcbm1tL3Ztc2Nhbi5jLTg3Mi1cXHRcXHRyZXR1cm4gZmFsc2U7XFxuLS1cXG5tbS92bXNjYW4uYy04NzctXFx0XFx0Zm9saW9fc2V0X3dvcmtpbmdzZXQoZm9saW8pO1xcbm1tL3Ztc2Nhbi5jOjg3ODpcXHRcXHRmb2xpb19zZXRfbHJ1X3JlZnMoZm9saW8sIDApO1xcbm1tL3Ztc2Nhbi5jLTg3OS1cXHR9IGVsc2Uge1xcbi0tXFxubW0vdm1zY2FuLmM9MzI5Nz1zdGF0aWMgaW50IGZvbGlvX3VwZGF0ZV9nZW4oc3RydWN0IGZvbGlvICpmb2xpbywgaW50IG5ld19nZW4sIGludCAqdHlwZSxcXG4tLVxcbm1tL3Ztc2Nhbi5jLTMzMDktXFx0ICAgICFpc19leGVjX2ZpbGVfZm9saW8oZm9saW8sIHZtYV9mbGFncykpIHtcXG5tbS92bXNjYW4uYzozMzEwOlxcdFxcdGZvbGlvX3NldF9scnVfcmVmcyhmb2xpbywgMSk7XFxubW0vdm1zY2FuLmMtMzMxMS1cXHRcXHRyZXR1cm4gLTE7XFxuLS1cXG5tbS92bXNjYW4uYz00Nzc0PXN0YXRpYyBib29sIGlzb2xhdGVfZm9saW8oc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYylcXG4tLVxcbm1tL3Ztc2Nhbi5jLTQ3ODktXFx0aWYgKCFmb2xpb190ZXN0X3JlZmVyZW5jZWQoZm9saW8pKVxcbm1tL3Ztc2Nhbi5jOjQ3OTA6XFx0XFx0Zm9saW9fc2V0X2xydV9yZWZzKGZvbGlvLCAwKTtcXG5tbS92bXNjYW4uYy00NzkxLVxcbi0tXFxubW0vdm1zY2FuLmM9NDk2ND1zdGF0aWMgaW50IGV2aWN0X2ZvbGlvcyh1bnNpZ25lZCBsb25nIG5yX3RvX3NjYW4sIHN0cnVjdCBscnV2ZWMgKmxydXZlYyxcXG4tLVxcbm1tL3Ztc2Nhbi5jLTUwMjctXFx0XFx0LyogU2VlIHRoZSBjb21tZW50cyBvbiBMUlVfUkVGU19GTEFHUyAqL1xcbm1tL3Ztc2Nhbi5jOjUwMjg6XFx0XFx0Zm9saW9fc2V0X2xydV9yZWZzKGZvbGlvLCAwKTtcXG5tbS92bXNjYW4uYy01MDI5LVxcdH1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDdUMDc6MjY6MDUuNjcxMTk3ODIzWiIsIlNlcSI6MjksIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjQ1NjgyMTc5NzQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqS01TQU4gQ2hlY2s6IEFsbCBDbGVhcioqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gTXkgZm9jdXMgaGVyZSBpcyBvbiBlbnN1cmluZyB0aGlzIGBmb2xpb19zZXRfbHJ1X3JlZnMoZm9saW8sIDApYCBjaGFuZ2UgaXMgS01TQU4tc2FmZSwgc3BlY2lmaWNhbGx5IGluIHRoZSBjb250ZXh0IG9mIG11bHRpLWdlbiBMUlUgZXZpY3Rpb24uIEl0J3MgZXNzZW50aWFsbHkgYWJvdXQgY2xlYXJpbmcgTFJVIHJlZmVyZW5jZSBiaXRzIHdpdGhpbiB0aGUgZm9saW8gZmxhZ3MgZm9yIGZvbGlvcyBvbiB0aGUgcmVjbGFpbSBsaXN0LCByaWdodD9cblxuRmlyc3QsIHRoZSBrZXkgcG9pbnQgaXMgdGhhdCBgZm9saW9gIGlzIGFscmVhZHkgYSB2YWxpZCBgc3RydWN0IGZvbGlvICpgIG9uIHRoZSByZWNsYWltIGxpc3QuIGBmb2xpb19zZXRfbHJ1X3JlZnNgIGlzIGp1c3QgbWFuaXB1bGF0aW5nICpleGlzdGluZyogYml0cyB3aXRoaW4gdGhlIGZvbGlvIGZsYWdzLiBObyBuZXcgbWVtb3J5IGlzIGJlaW5nIGFsbG9jYXRlZCwgbm8gZGF0YSBpcyBiZWluZyBjb3BpZWQgdG8gdXNlcnNwYWNlLCBhbmQgdGhlcmUncyBhYnNvbHV0ZWx5IG5vIHJpc2sgb2YgZW5jb3VudGVyaW5nIHVuaW5pdGlhbGl6ZWQgc3RhY2sgb3IgaGVhcCB2YXJpYWJsZXMsIHN0cnVjdCBmaWVsZHMsIG9yIHJlYWRzLlxuXG5Ob3csIGxldCdzIGNvbnNpZGVyIHdoYXQgS01TQU4gYW5kIEtBU0FOIHdvdWxkIG5vcm1hbGx5IGNhdGNoLiBLQVNBTiBpcyBhbGwgYWJvdXQgbWVtb3J5IHNhZmV0eSDigJMgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIHVzZS1hZnRlci1mcmVlLCBldGMuIEtNU0FOIGRlYWxzIHdpdGggdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMgdGhhdCBjb3VsZCBwb3RlbnRpYWxseSBsZWFrIGluZm9ybWF0aW9uIHRvIHVzZXJzcGFjZS4gU2luY2UgdGhpcyBpcyBwdXJlbHkgc3RhdGUgbWFuYWdlbWVudCBmb3IgTFJVIHBhZ2UgcmVjbGFpbSwganVzdCByZXNldHRpbmcgdGhvc2UgcmVmZXJlbmNlcyBvbiBmb2xpb3MgdW5jb25kaXRpb25hbGx5LCB0aGVyZSdzIHplcm8gY2hhbmNlIG9mIGludHJvZHVjaW5nIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGFjY2Vzcy5cblxuSSd2ZSBnb25lIHRocm91Z2ggdGhlIGNyaXRlcmlhLiBEb2VzIHRoaXMgcGF0Y2g6XG5cbjEuICBJbnRyb2R1Y2UvbW9kaWZ5IGtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlcnNwYWNlIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzIGNvdWxkIGJlIGV4cG9zZWQ/IE5vcGUuXG4yLiAgSGF2ZSBjb25kaXRpb25hbCBsb2dpYyBkZXBlbmRpbmcgb24gdW5pbml0aWFsaXplZCB2YXJpYWJsZXM/IEFic29sdXRlbHkgbm90LlxuMy4gIEFsbG9jYXRlIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzIGNvdWxkIGJlIHJlYWQ/IE5vIHdheS5cbjQuICBBZmZlY3QgYm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgdGhhdCBjb3VsZCBleHBvc2UgdW5pbml0aWFsaXplZCBkYXRhPyBOb3BlLlxuXG5BbmQgY29udmVyc2VseSwgaXQgZml0cyB0aGUgY3JpdGVyaWEgZm9yIGBOZWVkc0tNU0FOPWZhbHNlYDogaXQncyBwcmltYXJpbHkgYWJvdXQgcGFnZSByZWNsYWltIHN0YXRlIG1hbmFnZW1lbnQsIHdoaWNoIG1lYW5zIHdlIHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKGFsbCBvZiB3aGljaCBhcmUgS0FTQU4ncyBkb21haW4pLiBBbGwgc3RydWN0dXJlcyBhcmUgaW5pdGlhbGl6ZWQgYmVmb3JlIHVzZSBhbmQgdGhlcmUncyBubyByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlLiBUaGlzIGlzIGNvbXBsZXRlbHkgY2xlYXIsIGNvbmNpc2UsIGFuZCB1bmFtYmlndW91cy5cblxuT2theSwgSSdtIGNvbmZpZGVudC4gTGV0J3MgY2FsbCBgc2V0LXJlc3VsdHNgLlxuXG5cbiIsIklucHV0VG9rZW5zIjo0NzY1LCJPdXRwdXRUb2tlbnMiOjIwNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjU1NCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wN1QwNzoyNjoxMC4yMzk0MTc0ODdaIiwiU2VxIjozMCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMzg2MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHBhZ2UgcmVjbGFpbSBsb2dpYyBpbiB0aGUgTXVsdGktR2VuIExSVSAoTUdMUlUpIHN1YnN5c3RlbSAoYG1tL3Ztc2Nhbi5jYCksIHNwZWNpZmljYWxseSBpbiBgZXZpY3RfZm9saW9zKClgLiBJdCBtb3ZlcyBgZm9saW9fc2V0X2xydV9yZWZzKGZvbGlvLCAwKWAgb3V0c2lkZSBvZiBhIGNvbmRpdGlvbmFsIGNoZWNrIHNvIHRoYXQgTFJVIHJlZmVyZW5jZSBmbGFncyBhcmUgY2xlYXJlZCB1bmNvbmRpdGlvbmFsbHkgZm9yIGZvbGlvcyByZW1haW5pbmcgb24gdGhlIGxpc3QuXFxuXFxuVGhpcyBjaGFuZ2UgcHVyZWx5IGFmZmVjdHMgZm9saW8gbWV0YWRhdGEvZmxhZ3MgZHVyaW5nIExSVSBwYWdlIHJlY2xhaW0uIEl0IGRvZXMgbm90IGludHJvZHVjZSBvciBtb2RpZnk6XFxuMS4gRGF0YSBzdHJ1Y3R1cmVzIGNvcGllZCB0byB1c2VyIHNwYWNlIG9yIGtlcm5lbCBpbmZvLWxlYWtzLlxcbjIuIFVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzLCBzdHJ1Y3QgZmllbGRzLCBvciBtZW1vcnkgYWxsb2NhdGlvbnMuXFxuMy4gTGVuZ3RocyBvciBib3VuZHMgY2hlY2tzIHRoYXQgY291bGQgZXhwb3NlIHVuaW5pdGlhbGl6ZWQgYnVmZmVyIG1lbW9yeS5cXG5cXG5CZWNhdXNlIHRoZXJlIGFyZSBubyB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcyBvciBpbmZvLWxlYWtzLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZC4gU3RhbmRhcmQgS0FTQU4vc2FuaXRpemVyIGJ1aWxkcyBhcmUgc3VmZmljaWVudC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBwYWdlIHJlY2xhaW0gbG9naWMgaW4gdGhlIE11bHRpLUdlbiBMUlUgKE1HTFJVKSBzdWJzeXN0ZW0gKGBtbS92bXNjYW4uY2ApLCBzcGVjaWZpY2FsbHkgaW4gYGV2aWN0X2ZvbGlvcygpYC4gSXQgbW92ZXMgYGZvbGlvX3NldF9scnVfcmVmcyhmb2xpbywgMClgIG91dHNpZGUgb2YgYSBjb25kaXRpb25hbCBjaGVjayBzbyB0aGF0IExSVSByZWZlcmVuY2UgZmxhZ3MgYXJlIGNsZWFyZWQgdW5jb25kaXRpb25hbGx5IGZvciBmb2xpb3MgcmVtYWluaW5nIG9uIHRoZSBsaXN0LlxcblxcblRoaXMgY2hhbmdlIHB1cmVseSBhZmZlY3RzIGZvbGlvIG1ldGFkYXRhL2ZsYWdzIGR1cmluZyBMUlUgcGFnZSByZWNsYWltLiBJdCBkb2VzIG5vdCBpbnRyb2R1Y2Ugb3IgbW9kaWZ5OlxcbjEuIERhdGEgc3RydWN0dXJlcyBjb3BpZWQgdG8gdXNlciBzcGFjZSBvciBrZXJuZWwgaW5mby1sZWFrcy5cXG4yLiBVbmluaXRpYWxpemVkIHZhcmlhYmxlcywgc3RydWN0IGZpZWxkcywgb3IgbWVtb3J5IGFsbG9jYXRpb25zLlxcbjMuIExlbmd0aHMgb3IgYm91bmRzIGNoZWNrcyB0aGF0IGNvdWxkIGV4cG9zZSB1bmluaXRpYWxpemVkIGJ1ZmZlciBtZW1vcnkuXFxuXFxuQmVjYXVzZSB0aGVyZSBhcmUgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3Mgb3IgaW5mby1sZWFrcywgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCB3YXJyYW50ZWQuIFN0YW5kYXJkIEtBU0FOL3Nhbml0aXplciBidWlsZHMgYXJlIHN1ZmZpY2llbnQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLmR1cmF0aW9uIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnTGxtVG9rZW4gPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS50b2tlbnMgLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdUb29sRHVyID0gc3RhdHMudG9vbC5jb3VudCA+IDAgPyAoc3RhdHMudG9vbC5kdXJhdGlvbiAvIHN0YXRzLnRvb2wuY291bnQpLnRvRml4ZWQoMikgOiAwOwoKCQkJY29uc3QgbGxtU3VtYXJ5Q2VsbHMgPSBbc3RhdHMubGxtLmNvdW50LCBzdGF0cy5sbG0udG9rZW5zLCBhdmdMbG1Ub2tlbiwgc3RhdHMubGxtLmR1cmF0aW9uLCBhdmdMbG1EdXJdOwoJCQljb25zdCB0b29sU3VtbWFyeUNlbGxzID0gW3N0YXRzLnRvb2wuY291bnQsIHN0YXRzLnRvb2wuZHVyYXRpb24sIGF2Z1Rvb2xEdXJdOwoKCQkJY29uc3QgbGxtU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbGxtX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQlsbG1TdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgbGxtVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQlsbG1TdW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJbGxtVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJbGxtU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQobGxtVHIpOwoKCQkJY29uc3QgdG9vbFN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rvb2xfc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgdG9vbFRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJdG9vbFN1bW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJdG9vbFRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZCh0b29sVHIpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBmaWx0ZXJlZFN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBbImxsbSIsICJ0b29sIl0uaW5jbHVkZXMoZC5UeXBlKSk7CgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ0R1cmF0aW9uJyk7CgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7IAoKCQkJZmlsdGVyZWRTdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJCgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsKCQkJCWxldCB0b29sdGlwID0gcy5OYW1lOwoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIgJiYgcy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoJCQkJZGF0YS5hZGRSb3coW2Ake3MuU2VxfWAsIGR1ciwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1RpbWUgQ29uc3VtcHRpb24gb2YgTExNL1Rvb2wgQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTS9Ub29sIFN0ZXBzJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ1NlY29uZHMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2R1cmF0aW9uX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBsbG1TdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gZC5UeXBlID09PSAibGxtIik7CgkJCWlmIChsbG1TdGVwcy5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwkJCQoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ1Rva2VucycpOwkJCQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICdzdHlsZSd9KTsJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7CQoKCQkJY29uc3QgYWdlbnRDb2xvcnMgPSB7fTsKCQkJY29uc3QgcGFsZXR0ZSA9IFsnIzQyODVGNCcsICcjREI0NDM3JywgJyNGNEI0MDAnLCAnIzBGOUQ1OCcsICcjQUI0N0JDJywgJyMwMEFDQzEnXTsKCQkJbGV0IGNvbG9ySWR4ID0gMDsKCQkJY29uc3QgYWdlbnRMTE1Db3VudHMgPSB7fTsKCQkJbGxtU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCWlmICghYWdlbnRDb2xvcnNbcy5OYW1lXSkgewoJCQkJCWFnZW50Q29sb3JzW3MuTmFtZV0gPSBwYWxldHRlW2NvbG9ySWR4ICUgcGFsZXR0ZS5sZW5ndGhdOwoJCQkJCWNvbG9ySWR4Kys7CgkJCQl9CgoJCQkJYWdlbnRMTE1Db3VudHNbcy5OYW1lXSA9IChhZ2VudExMTUNvdW50c1tzLk5hbWVdIHx8IDApICsgMTsKCQkJCWNvbnN0IGxhYmVsID0gYCR7cy5OYW1lfS0ke2FnZW50TExNQ291bnRzW3MuTmFtZV19YDsKCQkJCWNvbnN0IHRvdGFsVG9rZW5zID0gcy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2VuczsKCQkJCWNvbnN0IHN0eWxlID0gYGNvbG9yOiAke2FnZW50Q29sb3JzW3MuTmFtZV19YDsKCQkJCWxldCB0b29sdGlwID0gYFRvdGFsIFRva2VuczogJHt0b3RhbFRva2Vuc31cbihJbjogJHtzLklucHV0VG9rZW5zfSwgT3V0OiAke3MuT3V0cHV0VG9rZW5zfSwgVGhvdWdodHM6ICR7cy5PdXRwdXRUaG91Z2h0c1Rva2Vuc30pYDsKCQkJCWlmIChzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgoJCQkJZGF0YS5hZGRSb3coW2xhYmVsLCB0b3RhbFRva2Vucywgc3R5bGUsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUb2tlbiBDb25zdW1wdGlvbiBieSBMTE0gQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTSBDYWxsIFNlcXVlbmNlJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ0NvbnN1bWVkIFRva2VucycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9rZW5fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCQlsZXQgYWxsRXhwYW5kZWQgPSBmYWxzZTsKCQlmdW5jdGlvbiB0b2dnbGVBbGxEZXRhaWxzKCkgewoJCQlhbGxFeHBhbmRlZCA9ICFhbGxFeHBhbmRlZDsKCQkJZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnZGV0YWlscycpLmZvckVhY2goZCA9PiB7CgkJCQlpZiAoYWxsRXhwYW5kZWQpIGQuc2V0QXR0cmlidXRlKCdvcGVuJywgJycpOwoJCQkJZWxzZSBkLnJlbW92ZUF0dHJpYnV0ZSgnb3BlbicpOwoJCQl9KTsKCQl9Cgk8L3NjcmlwdD4KCgo8L2JvZHk+CjwvaHRtbD4K" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowwmc2v[1] Phase: Succeeded StartedAt: 2026-09-07 07:26:21 +0000 UTC FinishedAt: 2026-09-07 07:26:21 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwmc2v[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-09-07 07:26:21 +0000 UTC FinishedAt: 2026-09-07 07:26:21 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwmc2v[2] Phase: Succeeded StartedAt: 2026-09-07 07:26:21 +0000 UTC FinishedAt: 2026-09-07 11:12:14 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwmc2v[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"9d3243fc689fef444f87e0a703b4c99653137e1b","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED"],"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":["evict_folios","try_to_shrink_lruvec","run_eviction","lru_gen_shrink_lruvec"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"9d3243fc689fef444f87e0a703b4c99653137e1b","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED"],"series_id":"258108d5-6ce7-4cbd-9037-ac3e1f9c9bcd","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-09-07 07:26:21 +0000 UTC FinishedAt: 2026-09-07 11:12:14 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"9d3243fc689fef444f87e0a703b4c99653137e1b","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED"],"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":["evict_folios","try_to_shrink_lruvec","run_eviction","lru_gen_shrink_lruvec"],"skip_cover_check":true},"patched":{"arch":"amd64","commit_hash":"9d3243fc689fef444f87e0a703b4c99653137e1b","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED"],"series_id":"258108d5-6ce7-4cbd-9037-ac3e1f9c9bcd","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-workflowwmc2v[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"9d3243fc689fef444f87e0a703b4c99653137e1b","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED"],"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":["evict_folios","try_to_shrink_lruvec","run_eviction","lru_gen_shrink_lruvec"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"9d3243fc689fef444f87e0a703b4c99653137e1b","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED"],"series_id":"258108d5-6ce7-4cbd-9037-ac3e1f9c9bcd","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-09-07 07:26:21 +0000 UTC FinishedAt: 2026-09-07 07:26:48 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwmc2v[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"9d3243fc689fef444f87e0a703b4c99653137e1b","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED"],"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":["evict_folios","try_to_shrink_lruvec","run_eviction","lru_gen_shrink_lruvec"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"9d3243fc689fef444f87e0a703b4c99653137e1b","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED"],"series_id":"258108d5-6ce7-4cbd-9037-ac3e1f9c9bcd","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-09-07 07:26:21 +0000 UTC FinishedAt: 2026-09-07 07:26:42 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"9d3243fc689fef444f87e0a703b4c99653137e1b","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED"],"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-workflowwmc2v/series-workflowwmc2v-convert-artifact-3008563985/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowwmc2v[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"9d3243fc689fef444f87e0a703b4c99653137e1b","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED"],"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":["evict_folios","try_to_shrink_lruvec","run_eviction","lru_gen_shrink_lruvec"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"9d3243fc689fef444f87e0a703b4c99653137e1b","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED"],"series_id":"258108d5-6ce7-4cbd-9037-ac3e1f9c9bcd","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-09-07 07:26:48 +0000 UTC FinishedAt: 2026-09-07 07:43:41 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwmc2v[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"9d3243fc689fef444f87e0a703b4c99653137e1b","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED"],"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":["evict_folios","try_to_shrink_lruvec","run_eviction","lru_gen_shrink_lruvec"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"9d3243fc689fef444f87e0a703b4c99653137e1b","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED"],"series_id":"258108d5-6ce7-4cbd-9037-ac3e1f9c9bcd","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-09-07 07:26:48 +0000 UTC FinishedAt: 2026-09-07 07:43:41 +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:*edebe49c-174b-4e74-9c9e-da4be6867e29,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-workflowwmc2v/series-workflowwmc2v-convert-artifact-3008563985/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": "d9cb5685-3ab6-48d1-a347-ea18d246c051", "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-workflowwmc2v/series-workflowwmc2v-build-action-3229936831/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowwmc2v[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"9d3243fc689fef444f87e0a703b4c99653137e1b","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED"],"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":["evict_folios","try_to_shrink_lruvec","run_eviction","lru_gen_shrink_lruvec"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"9d3243fc689fef444f87e0a703b4c99653137e1b","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED"],"series_id":"258108d5-6ce7-4cbd-9037-ac3e1f9c9bcd","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-09-07 07:26:48 +0000 UTC FinishedAt: 2026-09-07 07:43:31 +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:*edebe49c-174b-4e74-9c9e-da4be6867e29,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-workflowwmc2v/series-workflowwmc2v-convert-artifact-3008563985/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": "d9cb5685-3ab6-48d1-a347-ea18d246c051", "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-workflowwmc2v/series-workflowwmc2v-build-action-3229936831/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowwmc2v[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"9d3243fc689fef444f87e0a703b4c99653137e1b","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED"],"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":["evict_folios","try_to_shrink_lruvec","run_eviction","lru_gen_shrink_lruvec"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"9d3243fc689fef444f87e0a703b4c99653137e1b","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED"],"series_id":"258108d5-6ce7-4cbd-9037-ac3e1f9c9bcd","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-09-07 07:43:41 +0000 UTC FinishedAt: 2026-09-07 07:43:41 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwmc2v[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"9d3243fc689fef444f87e0a703b4c99653137e1b","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED"],"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":["evict_folios","try_to_shrink_lruvec","run_eviction","lru_gen_shrink_lruvec"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"9d3243fc689fef444f87e0a703b4c99653137e1b","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED"],"series_id":"258108d5-6ce7-4cbd-9037-ac3e1f9c9bcd","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-09-07 07:43:41 +0000 UTC FinishedAt: 2026-09-07 07:43:41 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwmc2v[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"9d3243fc689fef444f87e0a703b4c99653137e1b","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED"],"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":["evict_folios","try_to_shrink_lruvec","run_eviction","lru_gen_shrink_lruvec"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"9d3243fc689fef444f87e0a703b4c99653137e1b","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED"],"series_id":"258108d5-6ce7-4cbd-9037-ac3e1f9c9bcd","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-09-07 07:43:41 +0000 UTC FinishedAt: 2026-09-07 07:43:51 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwmc2v[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"9d3243fc689fef444f87e0a703b4c99653137e1b","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED"],"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":["evict_folios","try_to_shrink_lruvec","run_eviction","lru_gen_shrink_lruvec"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"9d3243fc689fef444f87e0a703b4c99653137e1b","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED"],"series_id":"258108d5-6ce7-4cbd-9037-ac3e1f9c9bcd","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-09-07 07:43:41 +0000 UTC FinishedAt: 2026-09-07 07:43:46 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"9d3243fc689fef444f87e0a703b4c99653137e1b","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED"],"series_id":"258108d5-6ce7-4cbd-9037-ac3e1f9c9bcd","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-workflowwmc2v/series-workflowwmc2v-convert-artifact-1319357924/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowwmc2v[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"9d3243fc689fef444f87e0a703b4c99653137e1b","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED"],"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":["evict_folios","try_to_shrink_lruvec","run_eviction","lru_gen_shrink_lruvec"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"9d3243fc689fef444f87e0a703b4c99653137e1b","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED"],"series_id":"258108d5-6ce7-4cbd-9037-ac3e1f9c9bcd","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-09-07 07:43:51 +0000 UTC FinishedAt: 2026-09-07 07:46:08 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwmc2v[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"9d3243fc689fef444f87e0a703b4c99653137e1b","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED"],"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":["evict_folios","try_to_shrink_lruvec","run_eviction","lru_gen_shrink_lruvec"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"9d3243fc689fef444f87e0a703b4c99653137e1b","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED"],"series_id":"258108d5-6ce7-4cbd-9037-ac3e1f9c9bcd","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-09-07 07:43:51 +0000 UTC FinishedAt: 2026-09-07 07:45:58 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*d9cb5685-3ab6-48d1-a347-ea18d246c051,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-workflowwmc2v/series-workflowwmc2v-build-action-3229936831/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-workflowwmc2v[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"9d3243fc689fef444f87e0a703b4c99653137e1b","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED"],"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":["evict_folios","try_to_shrink_lruvec","run_eviction","lru_gen_shrink_lruvec"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"9d3243fc689fef444f87e0a703b4c99653137e1b","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED"],"series_id":"258108d5-6ce7-4cbd-9037-ac3e1f9c9bcd","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-09-07 07:46:08 +0000 UTC FinishedAt: 2026-09-07 07:46:08 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwmc2v[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"9d3243fc689fef444f87e0a703b4c99653137e1b","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED"],"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":["evict_folios","try_to_shrink_lruvec","run_eviction","lru_gen_shrink_lruvec"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"9d3243fc689fef444f87e0a703b4c99653137e1b","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED"],"series_id":"258108d5-6ce7-4cbd-9037-ac3e1f9c9bcd","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-09-07 07:46:08 +0000 UTC FinishedAt: 2026-09-07 07:46:08 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwmc2v[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"9d3243fc689fef444f87e0a703b4c99653137e1b","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED"],"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":["evict_folios","try_to_shrink_lruvec","run_eviction","lru_gen_shrink_lruvec"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"9d3243fc689fef444f87e0a703b4c99653137e1b","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED"],"series_id":"258108d5-6ce7-4cbd-9037-ac3e1f9c9bcd","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-09-07 07:46:08 +0000 UTC FinishedAt: 2026-09-07 08:07:57 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwmc2v[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"9d3243fc689fef444f87e0a703b4c99653137e1b","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED"],"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":["evict_folios","try_to_shrink_lruvec","run_eviction","lru_gen_shrink_lruvec"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"9d3243fc689fef444f87e0a703b4c99653137e1b","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED"],"series_id":"258108d5-6ce7-4cbd-9037-ac3e1f9c9bcd","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-09-07 07:46:08 +0000 UTC FinishedAt: 2026-09-07 08:07:57 +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:*edebe49c-174b-4e74-9c9e-da4be6867e29,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-workflowwmc2v/series-workflowwmc2v-convert-artifact-1319357924/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": "cff5b343-abc0-4c41-8f17-7250488ac373", "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-workflowwmc2v/series-workflowwmc2v-build-action-765581168/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowwmc2v[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"9d3243fc689fef444f87e0a703b4c99653137e1b","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED"],"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":["evict_folios","try_to_shrink_lruvec","run_eviction","lru_gen_shrink_lruvec"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"9d3243fc689fef444f87e0a703b4c99653137e1b","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED"],"series_id":"258108d5-6ce7-4cbd-9037-ac3e1f9c9bcd","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-09-07 07:46:08 +0000 UTC FinishedAt: 2026-09-07 08:07:47 +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:*edebe49c-174b-4e74-9c9e-da4be6867e29,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-workflowwmc2v/series-workflowwmc2v-convert-artifact-1319357924/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": "cff5b343-abc0-4c41-8f17-7250488ac373", "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-workflowwmc2v/series-workflowwmc2v-build-action-765581168/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowwmc2v[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"9d3243fc689fef444f87e0a703b4c99653137e1b","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED"],"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":["evict_folios","try_to_shrink_lruvec","run_eviction","lru_gen_shrink_lruvec"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"9d3243fc689fef444f87e0a703b4c99653137e1b","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED"],"series_id":"258108d5-6ce7-4cbd-9037-ac3e1f9c9bcd","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-09-07 08:07:57 +0000 UTC FinishedAt: 2026-09-07 08:07:57 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwmc2v[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"9d3243fc689fef444f87e0a703b4c99653137e1b","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED"],"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":["evict_folios","try_to_shrink_lruvec","run_eviction","lru_gen_shrink_lruvec"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"9d3243fc689fef444f87e0a703b4c99653137e1b","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED"],"series_id":"258108d5-6ce7-4cbd-9037-ac3e1f9c9bcd","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-09-07 08:07:57 +0000 UTC FinishedAt: 2026-09-07 08:07:57 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwmc2v[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"9d3243fc689fef444f87e0a703b4c99653137e1b","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED"],"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":["evict_folios","try_to_shrink_lruvec","run_eviction","lru_gen_shrink_lruvec"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"9d3243fc689fef444f87e0a703b4c99653137e1b","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED"],"series_id":"258108d5-6ce7-4cbd-9037-ac3e1f9c9bcd","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-09-07 08:07:57 +0000 UTC FinishedAt: 2026-09-07 08:09:52 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwmc2v[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"9d3243fc689fef444f87e0a703b4c99653137e1b","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED"],"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":["evict_folios","try_to_shrink_lruvec","run_eviction","lru_gen_shrink_lruvec"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"9d3243fc689fef444f87e0a703b4c99653137e1b","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED"],"series_id":"258108d5-6ce7-4cbd-9037-ac3e1f9c9bcd","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-09-07 08:07:57 +0000 UTC FinishedAt: 2026-09-07 08:09:42 +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:*cff5b343-abc0-4c41-8f17-7250488ac373,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-workflowwmc2v/series-workflowwmc2v-build-action-765581168/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-workflowwmc2v[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"9d3243fc689fef444f87e0a703b4c99653137e1b","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED"],"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":["evict_folios","try_to_shrink_lruvec","run_eviction","lru_gen_shrink_lruvec"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"9d3243fc689fef444f87e0a703b4c99653137e1b","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED"],"series_id":"258108d5-6ce7-4cbd-9037-ac3e1f9c9bcd","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-09-07 08:09:52 +0000 UTC FinishedAt: 2026-09-07 11:12:14 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwmc2v[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"9d3243fc689fef444f87e0a703b4c99653137e1b","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED"],"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":["evict_folios","try_to_shrink_lruvec","run_eviction","lru_gen_shrink_lruvec"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"9d3243fc689fef444f87e0a703b4c99653137e1b","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED"],"series_id":"258108d5-6ce7-4cbd-9037-ac3e1f9c9bcd","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-09-07 08:09:52 +0000 UTC FinishedAt: 2026-09-07 11:12:14 +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":["evict_folios","try_to_shrink_lruvec","run_eviction","lru_gen_shrink_lruvec"],"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:*d9cb5685-3ab6-48d1-a347-ea18d246c051,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*cff5b343-abc0-4c41-8f17-7250488ac373,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-workflowwmc2v/series-workflowwmc2v-build-action-3229936831/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-workflowwmc2v/series-workflowwmc2v-build-action-765581168/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowwmc2v[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"9d3243fc689fef444f87e0a703b4c99653137e1b","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED"],"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":["evict_folios","try_to_shrink_lruvec","run_eviction","lru_gen_shrink_lruvec"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"9d3243fc689fef444f87e0a703b4c99653137e1b","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED"],"series_id":"258108d5-6ce7-4cbd-9037-ac3e1f9c9bcd","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-09-07 08:09:52 +0000 UTC FinishedAt: 2026-09-07 08:10:02 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwmc2v[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"9d3243fc689fef444f87e0a703b4c99653137e1b","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED"],"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":["evict_folios","try_to_shrink_lruvec","run_eviction","lru_gen_shrink_lruvec"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"9d3243fc689fef444f87e0a703b4c99653137e1b","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED"],"series_id":"258108d5-6ce7-4cbd-9037-ac3e1f9c9bcd","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-09-07 08:09:52 +0000 UTC FinishedAt: 2026-09-07 08:09:57 +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":["evict_folios","try_to_shrink_lruvec","run_eviction","lru_gen_shrink_lruvec"],"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-workflowwmc2v/series-workflowwmc2v-convert-artifact-639672941/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowwmc2v[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"9d3243fc689fef444f87e0a703b4c99653137e1b","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED"],"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":["evict_folios","try_to_shrink_lruvec","run_eviction","lru_gen_shrink_lruvec"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"9d3243fc689fef444f87e0a703b4c99653137e1b","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED"],"series_id":"258108d5-6ce7-4cbd-9037-ac3e1f9c9bcd","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-09-07 08:09:52 +0000 UTC FinishedAt: 2026-09-07 08:09:52 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwmc2v[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"9d3243fc689fef444f87e0a703b4c99653137e1b","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED"],"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":["evict_folios","try_to_shrink_lruvec","run_eviction","lru_gen_shrink_lruvec"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"9d3243fc689fef444f87e0a703b4c99653137e1b","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED"],"series_id":"258108d5-6ce7-4cbd-9037-ac3e1f9c9bcd","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-09-07 08:09:52 +0000 UTC FinishedAt: 2026-09-07 08:09:52 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwmc2v[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"9d3243fc689fef444f87e0a703b4c99653137e1b","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED"],"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":["evict_folios","try_to_shrink_lruvec","run_eviction","lru_gen_shrink_lruvec"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"9d3243fc689fef444f87e0a703b4c99653137e1b","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED"],"series_id":"258108d5-6ce7-4cbd-9037-ac3e1f9c9bcd","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-09-07 08:09:52 +0000 UTC FinishedAt: 2026-09-07 08:09:52 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwmc2v[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"9d3243fc689fef444f87e0a703b4c99653137e1b","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED"],"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":["evict_folios","try_to_shrink_lruvec","run_eviction","lru_gen_shrink_lruvec"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"9d3243fc689fef444f87e0a703b4c99653137e1b","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED"],"series_id":"258108d5-6ce7-4cbd-9037-ac3e1f9c9bcd","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-09-07 08:10:02 +0000 UTC FinishedAt: 2026-09-07 11:12:14 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwmc2v[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"9d3243fc689fef444f87e0a703b4c99653137e1b","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED"],"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":["evict_folios","try_to_shrink_lruvec","run_eviction","lru_gen_shrink_lruvec"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"9d3243fc689fef444f87e0a703b4c99653137e1b","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED"],"series_id":"258108d5-6ce7-4cbd-9037-ac3e1f9c9bcd","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-09-07 08:10:02 +0000 UTC FinishedAt: 2026-09-07 11:12:04 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*d9cb5685-3ab6-48d1-a347-ea18d246c051,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*cff5b343-abc0-4c41-8f17-7250488ac373,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-workflowwmc2v/series-workflowwmc2v-build-action-3229936831/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-workflowwmc2v/series-workflowwmc2v-build-action-765581168/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-workflowwmc2v/series-workflowwmc2v-convert-artifact-639672941/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,}