Name: series-workflow98hk5 Phase: Succeeded StartedAt: 2026-09-15 12:26:58 +0000 UTC FinishedAt: 2026-09-15 16:58:17 +0000 UTC Input: nil Output: nil --------- Name: series-workflow98hk5[0] Phase: Succeeded StartedAt: 2026-09-15 12:26:58 +0000 UTC FinishedAt: 2026-09-15 13:07:56 +0000 UTC Input: nil Output: nil --------- Name: series-workflow98hk5[0].run-triage Phase: Succeeded StartedAt: 2026-09-15 12:26:58 +0000 UTC FinishedAt: 2026-09-15 13:07:56 +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": "eece25a11d34ba79b89c88b830e285a616286bce", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "LRU_GEN", "DEBUG_FS" ], "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": "eece25a11d34ba79b89c88b830e285a616286bce", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "LRU_GEN", "DEBUG_FS" ], "series_id": "02e604a7-1f28-4daf-ac41-cc921fdf87bd" }, "track": "KASAN", "fuzz": { "focus": null, "focus_symbols": [ "run_aging", "lru_gen_seq_write", "run_cmd" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db" ], "skip_cover_check": true, "bug_title_re": "", "base_commit": "eece25a11d34ba79b89c88b830e285a616286bce", "base_tree": "mm-new" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE1IDEyOjU5PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+OG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0xSVV9HRU4mIzM0OywKICAgICYjMzQ7REVCVUdfRlMmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtydW5fYWdpbmcmIzM0OywKICAgICYjMzQ7bHJ1X2dlbl9zZXFfd3JpdGUmIzM0OywKICAgICYjMzQ7cnVuX2NtZCYjMzQ7CiAgXSwKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHMgYW4gZWFybHkgcmV0dXJuIGNoZWNrIChgaWYgKHNlcSBcdTAwM2MgbWF4X3NlcSkgcmV0dXJuIDA7YCkgaW4gYHJ1bl9hZ2luZygpYCB3aXRoaW4gYG1tL3Ztc2Nhbi5jYC4gSXQgb3BlcmF0ZXMgZXhjbHVzaXZlbHkgb24gc2NhbGFyIGludGVnZXIgdmFsdWVzIChgc2VxYCBhbmQgYG1heF9zZXFgKSBhbmQgYWx0ZXJzIGNvbnRyb2wgZmxvdyBpbiB0aGUgbXVsdGktZ2VuIExSVSBhZ2luZyB0cmlnZ2VyLiBUaGUgY2hhbmdlIGRvZXMgbm90IGludHJvZHVjZSBvciBtb2RpZnkgYW55IG1lbW9yeSBhbGxvY2F0aW9ucywgZG9lcyBub3QgdG91Y2ggdW5pbml0aWFsaXplZCBzdGFjayBvciBoZWFwIGJ1ZmZlcnMsIGFuZCBkb2VzIG5vdCBwYXNzIGFueSBrZXJuZWwgc3RydWN0dXJlcyB0byB1c2VyIHNwYWNlLiBCZWNhdXNlIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGNhbiBiZSByZWFkLCBicmFuY2hlZCB1cG9uLCBvciBsZWFrZWQgdG8gdXNlcnNwYWNlIGFzIGEgcmVzdWx0IG9mIHRoaXMgY2hhbmdlLCBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBpcyBub3Qgd2FycmFudGVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgYWdpbmcgbG9naWMgaW4gdGhlIE11bHRpLUdlbiBMUlUgKE1HTFJVKSBzdWJzeXN0ZW0gaW4gbW0vdm1zY2FuLmMuIEl0IGFkZHMgYSBjaGVjayBpbiBydW5fYWdpbmcoKSB0byBpbW1lZGlhdGVseSByZXR1cm4gc3VjY2VzcyBpZiB0aGUgcmVxdWVzdGVkIHNlcXVlbmNlIG51bWJlciBpcyBvbGRlciB0aGFuIHRoZSBjdXJyZW50IG1heF9zZXEgaW5zdGVhZCBvZiBhdHRlbXB0aW5nIGFuIGluY3JlbWVudC4gVGhpcyBsb2dpYyBpcyByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2UgYnkgd3JpdGluZyB0byAvc3lzL2tlcm5lbC9kZWJ1Zy9scnVfZ2VuLCBtYWtpbmcgaXQgYW4gZXhlY3V0YWJsZSBhbmQgdGVzdGFibGUgcGF0aCB3aXRoaW4gY29yZSBtZW1vcnkgbWFuYWdlbWVudC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNSAxMjo1OTwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IDU1YjVlZDYxNjhiOGUyOWJhNjc4MDkyODI1ZDY2NjkwZmNhMjA3MmJcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVHVlIFNlcCAxNSAxMjo1OToyNiAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9tbS92bXNjYW4uYyBiL21tL3Ztc2Nhbi5jXG5pbmRleCA1MzU0ZWI4ZDNhMDdiLi4xOGM0ZDM1OTU3NDk3IDEwMDY0NFxuLS0tIGEvbW0vdm1zY2FuLmNcbiYjNDM7JiM0MzsmIzQzOyBiL21tL3Ztc2Nhbi5jXG5AQCAtNTgyNyw2ICYjNDM7NTgyNyw5IEBAIHN0YXRpYyBpbnQgcnVuX2FnaW5nKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgdW5zaWduZWQgbG9uZyBzZXEsXG4ge1xuIFx0REVGSU5FX01BWF9TRVEobHJ1dmVjKTtcbiBcbiYjNDM7XHRpZiAoc2VxIFx1MDAzYyBtYXhfc2VxKVxuJiM0MztcdFx0cmV0dXJuIDA7XG4mIzQzO1xuIFx0aWYgKHNlcSBcdTAwM2UgbWF4X3NlcSlcbiBcdFx0cmV0dXJuIC1FSU5WQUw7XG4gXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTUgMTI6NTk8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+N208L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Y29yZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7TFJVX0dFTiYjMzQ7LAogICAgJiMzNDtERUJVR19GUyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3J1bl9hZ2luZyYjMzQ7LAogICAgJiMzNDtscnVfZ2VuX3NlcV93cml0ZSYjMzQ7LAogICAgJiMzNDtydW5fY21kJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBhZ2luZyBsb2dpYyBpbiB0aGUgTXVsdGktR2VuIExSVSAoTUdMUlUpIHN1YnN5c3RlbSBpbiBtbS92bXNjYW4uYy4gSXQgYWRkcyBhIGNoZWNrIGluIHJ1bl9hZ2luZygpIHRvIGltbWVkaWF0ZWx5IHJldHVybiBzdWNjZXNzIGlmIHRoZSByZXF1ZXN0ZWQgc2VxdWVuY2UgbnVtYmVyIGlzIG9sZGVyIHRoYW4gdGhlIGN1cnJlbnQgbWF4X3NlcSBpbnN0ZWFkIG9mIGF0dGVtcHRpbmcgYW4gaW5jcmVtZW50LiBUaGlzIGxvZ2ljIGlzIHJlYWNoYWJsZSBmcm9tIHVzZXJzcGFjZSBieSB3cml0aW5nIHRvIC9zeXMva2VybmVsL2RlYnVnL2xydV9nZW4sIG1ha2luZyBpdCBhbiBleGVjdXRhYmxlIGFuZCB0ZXN0YWJsZSBwYXRoIHdpdGhpbiBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50LiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lciBhbmQgc2VjdXJpdHkgZW5naW5lZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZXZhbHVhdGUgd2hldGhlciBpdCB3YXJyYW50cyBmdXp6aW5nIHdpdGggc3l6a2FsbGVyLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiBpbnRlcm5hbCBhc3N1bXB0aW9ucy4gWW91IG11c3QgYWN0aXZlbHkgdXNlIHlvdXIgY29kZSBhY2Nlc3MKdG9vbHMgdG8gaW5zcGVjdCB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlLCBjYWxsZXJzLCBhbmQgc3Vycm91bmRpbmcgY29udGV4dC4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjEuIENPUkUgVFJJQUdFIFBISUxPU09QSFkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KVGhlIGdvYWwgb2YgcGF0Y2ggZnV6emluZyBpcyB0byBkaXNjb3ZlciBjcmFzaGVzLCByZWdyZXNzaW9ucywgZXhwb3NlZCBsYXRlbnQgYnVncywKYW5kIG5ld2x5IHRyaWdnZXJlZCBhc3NlcnRpb25zIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIHNlcmllcy4KCi0gUkVBQ0hBQklMSVRZIElTIFRIRSBQUklNQVJZIEdBVEU6CiAgRnV6emluZyBjYW4gb25seSBkaXNjb3ZlciBidWdzIGluIGNvZGUgdGhhdCBjYW4gYWN0dWFsbHkgZXhlY3V0ZSBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZAogIGVudmlyb25tZW50cyAoR0NFIG9yIFFFTVUsIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBkZXZpY2VzIGxpa2UgVVNCIGdhZGdldHMsIG5ldGRldiwgdHVuL3RhcCkuCiAgSWYgdGhlIG1vZGlmaWVkIGNvZGUgaXMgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIChzZWUgU2VjdGlvbiAyKSwgaXQgTVVTVCBOT1QgYmUgZnV6emVkLAogIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciBpdCBhZGRzIGFzc2VydGlvbnMgb3IgY29tcGxleCBsb2dpYy4KCi0gRE8gTk9UIEJMSU5ETFkgVFJVU1QgJiMzNDtOTyBGVU5DVElPTkFMIENIQU5HRSYjMzQ7IChORkNJKSBPUiAmIzM0O1JFRkFDVE9SSU5HJiMzNDsgQ0xBSU1TOgogIFBhdGNoIGF1dGhvcnMgcm91dGluZWx5IGxhYmVsIGNoYW5nZXMgYXMgJiMzNDtjbGVhbnVwcyYjMzQ7LCAmIzM0O3JlZmFjdG9yaW5ncyYjMzQ7LCBvciBzdGF0ZQogICYjMzQ7Tm8gZnVuY3Rpb25hbCBjaGFuZ2UgaW50ZW5kZWQmIzM0Oy4gRG8gTk9UIHRha2UgdGhlc2UgY2xhaW1zIGF0IGZhY2UgdmFsdWUuCiAgQ29kZSByZWZhY3RvcmluZ3MgdGhhdCByZWFycmFuZ2UgbG9naWMsIGludHJvZHVjZSBoZWxwZXIgZnVuY3Rpb25zLCBvciBhbHRlciBzdGF0ZSBtYW5hZ2VtZW50CiAgaW4gY29yZSBzdWJzeXN0ZW1zIGZyZXF1ZW50bHkgaW50cm9kdWNlIHN1YnRsZSBzZW1hbnRpYyBzaGlmdHMgb3IgdW5jb3ZlciBsYXRlbnQga2VybmVsIGJ1Z3MuCiAgSWYgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSBpcyBtb2RpZmllZCBvciByZWZhY3RvcmVkLCBpdCBNVVNUIGJlIGZ1enplZC4KCi0gTkVXIE9SIE1PRElGSUVEIEFTU0VSVElPTlMgSU4gUkVBQ0hBQkxFIENPREUgTVVTVCBCRSBGVVpaRUQ6CiAgV2hlbiBhIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXMgcnVudGltZSBjaGVja3Mgb3IgYXNzZXJ0aW9ucyAoZS5nLiwgV0FSTl9PTiosIFZNX1dBUk5fT04qLAogIEJVR19PTiosIGxvY2tkZXBfYXNzZXJ0KikgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMsIGl0IGVuZm9yY2VzIG5ldyBvciBzdHJpY3RlciBpbnZhcmlhbnRzLgogIEV2ZW4gaWYgdGhlIGF1dGhvciBiZWxpZXZlcyB0aGUgaW52YXJpYW50IGFsd2F5cyBob2xkcywgZnV6emluZyBpcyBlc3NlbnRpYWwgdG8gdmVyaWZ5IHdoZXRoZXIKICBhbiB1bnVzdWFsIHNlcXVlbmNlIG9mIG9wZXJhdGlvbnMgY2FuIHZpb2xhdGUgaXQuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoyLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9ZmFsc2UgKE5FR0FUSVZFIENSSVRFUklBKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIE9OTFkgSUYgYWxsIG1vZGlmaWVkIGNvZGUgZmFsbHMgc3RyaWN0bHkgaW50byBvbmUgb3IgbW9yZSBvZiB0aGVzZSBjYXRlZ29yaWVzOgoKLSBOb24ta2VybmVsIGFuZCBub24tZXhlY3V0YWJsZSBjaGFuZ2VzOgogICogTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgY29tbWVudHMsIG9yIHNwZWxsaW5nIGZpeGVzLgogICogVXNlci1zcGFjZSBkaXJlY3Rvcmllcywgc2VsZi10ZXN0cywgc2FtcGxlcywgb3Igc2NyaXB0cyAoZS5nLiwgdG9vbHMvLCBzYW1wbGVzLywgc2NyaXB0cy8sIHVzci8pCiAgICB0aGF0IGRvIG5vdCBhZmZlY3QgdGhlIGNvbXBpbGVkIGtlcm5lbCBpbWFnZSAodm1saW51eCkgb3Iga2VybmVsIG1vZHVsZXMuCiAgKiBQdXJlbHkgZGVjb3JhdGl2ZSBsb2dnaW5nIChlLmcuLCBtZXNzYWdlIHN0cmluZ3MgaW4gcHJfZXJyLCBwcmludGssIGRldl9pbmZvKSBvciB0cmFjZXBvaW50cwogICAgdGhhdCBkbyBub3QgYWx0ZXIgY29udHJvbCBmbG93IG9yIGRhdGEgc3RydWN0dXJlcy4KICAqIEJ1aWxkIHN5c3RlbSBvciBLY29uZmlnIGNoYW5nZXMgdGhhdCBkbyBub3QgYWx0ZXIgY29tcGlsZWQgQyBsb2dpYy4KLSBTdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgaGFyZHdhcmU6CiAgKiBWZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2hlcywgU21hcnROSUNzLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgICBpb25pYywgYW1kZ3B1KSByZXF1aXJpbmcgcGh5c2ljYWwgQVNJQy9QQ0llIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIFVucmVhY2hhYmxlIGV4ZWN1dGlvbiBwYXRoczoKICAqIERyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKC5yZW1vdmUsIC5zaHV0ZG93biwgcGNpX3VucmVnaXN0ZXJfZHJpdmVyKSBleGVjdXRlZCBvbmx5IGR1cmluZwogICAgcGh5c2ljYWwgUENJIGhvdC11bnBsdWcgb3IgbWFudWFsIHN5c2ZzIGRyaXZlciB1bmJpbmRpbmcuCiAgKiBDb2RlIHBhdGhzIGV4Y2x1c2l2ZSB0byBhcmNoaXRlY3R1cmVzIG90aGVyIHRoYW4gdGhlIHRhcmdldCBhcmNoaXRlY3R1cmUuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQozLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9dHJ1ZSAoUE9TSVRJVkUgQ1JJVEVSSUEpCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZSB3aGVuZXZlciB0aGUgcGF0Y2ggdG91Y2hlcyByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlLCBpbmNsdWRpbmc6Ci0gQ29yZSBTdWJzeXN0ZW1zOgogICogQW55IGxvZ2ljIG1vZGlmaWNhdGlvbnMgaW4gbWVtb3J5IG1hbmFnZW1lbnQgKG1tLyksIHN5bmNocm9uaXphdGlvbi9sb2NraW5nIChrZXJuZWwvbG9ja2luZy8pLAogICAgQlBGLCBzY2hlZHVsZXIsIGNvcmUgbmV0d29ya2luZywgVkZTLCBvciBzeXNjYWxsIGhhbmRsaW5nLgotIFJlZmFjdG9yaW5ncyBhbmQgQ29kZSBDbGVhbnVwczoKICAqIEFueSByZXN0cnVjdHVyaW5nIG9mIHJlYWNoYWJsZSBkYXRhIHN0cnVjdHVyZXMsIGhlbHBlciBhYnN0cmFjdGlvbnMsIG9yIGFsZ29yaXRobSBmbG93cy4KLSBSdW50aW1lIEFzc2VydGlvbnMgYW5kIERlZmVuc2l2ZSBDaGVja3M6CiAgKiBBbnkgaW50cm9kdWN0aW9uIG9yIGFsdGVyYXRpb24gb2YgYXNzZXJ0aW9ucyAoV0FSTl9PTiosIFZNX1dBUk5fT04qLCBCVUdfT04qLCBldGMuKSBpbiByZWFjaGFibGUgcGF0aHMuCi0gUmVhY2hhYmxlIERyaXZlcnMgYW5kIFByb3RvY29sczoKICAqIERyaXZlcnMgYWNjZXNzaWJsZSB2aWEgdmlydHVhbCBidXNlcyAodmlydGlvLCBVU0IgZ2FkZ2V0LCBsb29wYmFjaywgbmV0bGluaywgYmluZGVyLCBzb2NrZXRzLCBldGMuKS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjQuIEVYVFJBQ1RJTkcgRm9jdXNTeW1ib2xzIChQUkVWRU5USU5HIERJTFVUSU9OKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpXaGVuIFdvcnRoRnV6emluZz10cnVlLCB5b3UgbXVzdCBleHRyYWN0IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgaW50byBGb2N1c1N5bWJvbHMgdG8gZ3VpZGUgdGhlIGZ1enplcjoKCi0gQVZPSUQgVUJJUVVJVE9VUyBMSUZFQ1lDTEUgSE9ULVBBVEhTOgogIERvIE5PVCBsaXN0IGdlbmVyaWMsIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhbGxlZCBieSBhbG1vc3QgZXZlcnkgcHJvZ3JhbSBpbiB0aGUgY29ycHVzCiAgKGluY2x1ZGluZywgYnV0IG5vdCBsaW1pdGVkIHRvOiBnZW5lcmFsIG1lbW9yeSBhbGxvY2F0b3JzIGFuZCBkZWFsbG9jYXRvcnMsIHBhZ2UgZmF1bHQKICBhbmQgdHJhcCBoYW5kbGVycywgb3IgY29yZSBzeW5jaHJvbml6YXRpb24gcHJpbWl0aXZlczsgdGhpcyBpcyBub3QgYW4gZXhoYXVzdGl2ZSBsaXN0KS4KICBMaXN0aW5nIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhdXNlcyB0aGUgZnV6emVyIHRvIGNsYXNzaWZ5IHRob3VzYW5kcyBvZiB1bnJlbGF0ZWQgdGVzdHMgYXMgJiMzNDtmb2N1c2VkJiMzNDssCiAgd2hpY2ggc2V2ZXJlbHkgZGlsdXRlcyBmdXp6aW5nIGVmZm9ydCBhd2F5IGZyb20gdGhlIGFjdHVhbCBjaGFuZ2VzLgoKLSBUQVJHRVQgU1BFQ0lGSUMgRkVBVFVSRSBMT0dJQyBBTkQgRU5UUllQT0lOVFM6CiAgTGlzdCBmdW5jdGlvbnMgdGhhdCBzcGVjaWZpY2FsbHkgaW1wbGVtZW50IHRoZSBsb2dpYyBiZWluZyBhZGRlZCBvciBhbHRlcmVkLCBvciBkaXJlY3QgQVBJIGVudHJ5cG9pbnRzCiAgZm9yIHRoZSBzdWJzeXN0ZW0gZmVhdHVyZSB1bmRlciByZXZpZXcuCgotIEhBTkRMSU5HIFNUQVRJQyBJTkxJTkUgRlVOQ1RJT05TIElOIEhFQURFUlMgKC5oKToKICBDb21waWxlci1pbmxpbmVkIHN0YXRpYyBmdW5jdGlvbnMgKHN1Y2ggYXMgc3RhdGljIGlubGluZXMgaW4gbW0vKi5oIG9yIGluY2x1ZGUvbGludXgvKi5oKSBsYWNrCiAgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcyBpbiB2bWxpbnV4IGFuZCBjYW5ub3QgYmUgdGFyZ2V0ZWQgZGlyZWN0bHkgYnkgc3ltYm9sIGNvdmVyYWdlIGZpbHRlcnMuCiAgSWYgdGhlIGNoYW5nZXMgYXJlIHByaW1hcmlseSBpbiBzdGF0aWMgaW5saW5lIGhlbHBlcnMsIGlkZW50aWZ5IG5vbi1zdGF0aWMsIGZlYXR1cmUtc3BlY2lmaWMgY2FsbGVyCiAgZnVuY3Rpb25zIGluIC5jIGZpbGVzIHRoYXQgZXhlcmNpc2UgdGhlbSAoYXZvaWRpbmcgdWJpcXVpdG91cyBsaWZlY3ljbGUgd3JhcHBlcnMpLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KNS4gSURFTlRJRllJTkcgRW5hYmxlQ29uZmlncwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IGNvbXBpbGUgYW5kIHJlYWNoIHRoZSBtb2RpZmllZCBjb2RlOgotIEluc3BlY3QgS2NvbmZpZyBmaWxlcyBhbmQgI2lmZGVmIGd1YXJkczsgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCi0gQ2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzIG5lZWRlZC4KLSBTdHJpcCBhbnkgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+VGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjQKCkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgNTViNWVkNjE2OGI4ZTI5YmE2NzgwOTI4MjVkNjY2OTBmY2EyMDcyYgpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBUdWUgU2VwIDE1IDEyOjU5OjI2IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvbW0vdm1zY2FuLmMgYi9tbS92bXNjYW4uYwppbmRleCA1MzU0ZWI4ZDNhMDdiLi4xOGM0ZDM1OTU3NDk3IDEwMDY0NAotLS0gYS9tbS92bXNjYW4uYwomIzQzOyYjNDM7JiM0MzsgYi9tbS92bXNjYW4uYwpAQCAtNTgyNyw2ICYjNDM7NTgyNyw5IEBAIHN0YXRpYyBpbnQgcnVuX2FnaW5nKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgdW5zaWduZWQgbG9uZyBzZXEsCiB7CiAJREVGSU5FX01BWF9TRVEobHJ1dmVjKTsKIAomIzQzOwlpZiAoc2VxICZsdDsgbWF4X3NlcSkKJiM0MzsJCXJldHVybiAwOwomIzQzOwogCWlmIChzZXEgJmd0OyBtYXhfc2VxKQogCQlyZXR1cm4gLUVJTlZBTDsKIAo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNSAxMjo1OTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+Mm08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyODMzCgkJCQkJCQlvdXRwdXQ6IDM1CgkJCQkJCQl0aG91Z2h0czogODEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSB2bXNjYW4uYyBQYXRjaCoqCgpPa2F5LCBzbyB0aGlzIHBhdGNoIGlzIHRvdWNoaW5nIGBtbS92bXNjYW4uY2AuIEltbWVkaWF0ZWx5LCBteSBleHBlcnQgYnJhaW4gZ29lcyBpbnRvICYjMzQ7aW5zcGVjdGlvbiBtb2RlLiYjMzQ7IExldCYjMzk7cyBzdGFydCB3aXRoIGEgcXVpY2sgb3ZlcnZpZXcgb2YgdGhlIGNoYW5nZS4gSSBuZWVkIHRvIGdldCBhIGZlZWwgZm9yIHdoYXQmIzM5O3MgYmVpbmcgYWx0ZXJlZCBpbiB0aGlzIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgZmlsZS4gSSYjMzk7bSB0aGlua2luZyBzcGVjaWZpY2FsbHkgYXJvdW5kIGxpbmUgNTgyNyDigJMgdGhhdCYjMzk7cyBvZnRlbiBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQgZm9yIHVuZGVyc3RhbmRpbmcgYSB0YXJnZXRlZCBjaGFuZ2UsIGFuZCB1c3VhbGx5IGEgaGVscGZ1bCBsaW5lIG51bWJlciBnaXZlbi4KCkZvcnR1bmF0ZWx5LCBJIGhhdmUgbXkgYXJzZW5hbCBvZiB0b29scyBhdCB0aGUgcmVhZHkuIEkmIzM5O2xsIHJlYWNoIGZvciBgcmVhZC1maWxlYCB0byBncmFiIHRoYXQgc3BlY2lmaWMgc2VjdGlvbiBvZiBgbW0vdm1zY2FuLmNgLiBJdCYjMzk7cyBtdWNoIGZhc3RlciB0aGFuIG1hbnVhbGx5IHNpZnRpbmcgdGhyb3VnaCB0aGUgZmlsZSwgYW5kIGVhc2llciB0byBhYnNvcmIgdGhlIGNvbnRleHQgdGhhdCB3YXkuIEkmIzM5O2xsIGFsc28gd2FudCB0byBzdGFydCB0aGlua2luZyBob3cgYGdyZXBwZXJgIG1pZ2h0IGJlIHVzZWZ1bCBpZiBJIHN0YXJ0IGdldHRpbmcgc3R1Y2suIEkmIzM5O2xsIGtlZXAgdGhhdCBpbiBteSBiYWNrIHBvY2tldC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNSAxMzowMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O21tL3Ztc2Nhbi5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNTgxMCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA1MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDs1ODEwOlx0XG41ODExOlx0XHRcdGlmIChmdWxsKVxuNTgxMjpcdFx0XHRcdGxydV9nZW5fc2VxX3Nob3dfZnVsbChtLCBscnV2ZWMsIG1heF9zZXEsIG1pbl9zZXEsIHNlcSk7XG41ODEzOlx0XHR9XG41ODE0Olx0XG41ODE1Olx0XHRyZXR1cm4gMDtcbjU4MTY6XHR9XG41ODE3Olx0XG41ODE4Olx0c3RhdGljIGNvbnN0IHN0cnVjdCBzZXFfb3BlcmF0aW9ucyBscnVfZ2VuX3NlcV9vcHMgPSB7XG41ODE5Olx0XHQuc3RhcnQgPSBscnVfZ2VuX3NlcV9zdGFydCxcbjU4MjA6XHRcdC5zdG9wID0gbHJ1X2dlbl9zZXFfc3RvcCxcbjU4MjE6XHRcdC5uZXh0ID0gbHJ1X2dlbl9zZXFfbmV4dCxcbjU4MjI6XHRcdC5zaG93ID0gbHJ1X2dlbl9zZXFfc2hvdyxcbjU4MjM6XHR9O1xuNTgyNDpcdFxuNTgyNTpcdHN0YXRpYyBpbnQgcnVuX2FnaW5nKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgdW5zaWduZWQgbG9uZyBzZXEsXG41ODI2Olx0XHRcdCAgICAgaW50IHN3YXBwaW5lc3MsIGJvb2wgZm9yY2Vfc2NhbilcbjU4Mjc6XHR7XG41ODI4Olx0XHRERUZJTkVfTUFYX1NFUShscnV2ZWMpO1xuNTgyOTpcdFxuNTgzMDpcdFx0aWYgKHNlcSBcdTAwM2MgbWF4X3NlcSlcbjU4MzE6XHRcdFx0cmV0dXJuIDA7XG41ODMyOlx0XG41ODMzOlx0XHRpZiAoc2VxIFx1MDAzZSBtYXhfc2VxKVxuNTgzNDpcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbjU4MzU6XHRcbjU4MzY6XHRcdHJldHVybiB0cnlfdG9faW5jX21heF9zZXEobHJ1dmVjLCBtYXhfc2VxLCBzd2FwcGluZXNzLCBmb3JjZV9zY2FuKSA/IDAgOiAtRUVYSVNUO1xuNTgzNzpcdH1cbjU4Mzg6XHRcbjU4Mzk6XHRzdGF0aWMgaW50IHJ1bl9ldmljdGlvbihzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIHVuc2lnbmVkIGxvbmcgc2VxLCBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYyxcbjU4NDA6XHRcdFx0XHRpbnQgc3dhcHBpbmVzcywgdW5zaWduZWQgbG9uZyBucl90b19yZWNsYWltKVxuNTg0MTpcdHtcbjU4NDI6XHRcdGludCBucl9iYXRjaDtcbjU4NDM6XHRcdERFRklORV9NQVhfU0VRKGxydXZlYyk7XG41ODQ0Olx0XG41ODQ1Olx0XHRpZiAoc2VxICYjNDM7IE1JTl9OUl9HRU5TIFx1MDAzZSBtYXhfc2VxKVxuNTg0NjpcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbjU4NDc6XHRcbjU4NDg6XHRcdHNjLVx1MDAzZW5yX3JlY2xhaW1lZCA9IDA7XG41ODQ5Olx0XG41ODUwOlx0XHR3aGlsZSAoIXNpZ25hbF9wZW5kaW5nKGN1cnJlbnQpKSB7XG41ODUxOlx0XHRcdERFRklORV9NSU5fU0VRKGxydXZlYyk7XG41ODUyOlx0XG41ODUzOlx0XHRcdGlmIChzZXEgXHUwMDNjIGV2aWN0YWJsZV9taW5fc2VxKG1pbl9zZXEsIHN3YXBwaW5lc3MpKVxuNTg1NDpcdFx0XHRcdHJldHVybiAwO1xuNTg1NTpcdFxuNTg1NjpcdFx0XHRpZiAoc2MtXHUwMDNlbnJfcmVjbGFpbWVkIFx1MDAzZT0gbnJfdG9fcmVjbGFpbSlcbjU4NTc6XHRcdFx0XHRyZXR1cm4gMDtcbjU4NTg6XHRcbjU4NTk6XHRcdFx0bnJfYmF0Y2ggPSBtaW4obnJfdG9fcmVjbGFpbSAtIHNjLVx1MDAzZW5yX3JlY2xhaW1lZCwgTUFYX0xSVV9CQVRDSCk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTUgMTM6MDE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzg4NwoJCQkJCQkJb3V0cHV0OiAyOQoJCQkJCQkJdGhvdWdodHM6IDM3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkludmVzdGlnYXRpbmcgdGhlIGBydW5fYWdpbmdgIEZ1bmN0aW9uKioKCkFscmlnaHQsIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcyBgcnVuX2FnaW5nYCBmdW5jdGlvbi4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXRzIGNhbGwgc2l0ZXMgYW5kIGludGVybmFsIHdvcmtpbmdzLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gdHJhY2UgaXRzIGV4ZWN1dGlvbiBwYXRoLiBJJiMzOTtsbCBzdGFydCB3aXRoIGEgc3RyYWlnaHRmb3J3YXJkIGFwcHJvYWNoOiBJJiMzOTtsbCB1c2UgYGdyZXBgIHdpdGhpbiB0aGUgYG1tL3Ztc2Nhbi5jYCBmaWxlIHRvIGlkZW50aWZ5IGV2ZXJ5IGluc3RhbmNlIHdoZXJlIGBydW5fYWdpbmdgIGlzIGludm9rZWQuIFRoaXMgd2lsbCBnaXZlIG1lIGEgY2xlYXIgcGljdHVyZSBvZiBob3cgdGhpcyBmdW5jdGlvbiBmaXRzIGludG8gdGhlIG92ZXJhbGwgbWVtb3J5IG1hbmFnZW1lbnQgc2NoZW1lLiBGcm9tIHRoZXJlLCBJIGNhbiBiZWdpbiBhbmFseXppbmcgaXRzIGZ1bmN0aW9uYWxpdHkgaW4gZ3JlYXRlciBkZXRhaWwsIGJhc2VkIG9uIGl0cyBjb250ZXh0IHdpdGhpbiB0aGUgY2FsbGluZyBjb2RlLiBUaGlzIGlzIGEgc3RhbmRhcmQgaW5pdGlhbCBkaWFnbm9zdGljIHN0ZXAgZm9yIGFueSBrZXJuZWwtbGV2ZWwgaW52ZXN0aWdhdGlvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNSAxMzowMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtydW5fYWdpbmcmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS92bXNjYW4uYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS92bXNjYW4uYz01MDE2PXN0YXRpYyBpbnQgZXZpY3RfZm9saW9zKHVuc2lnbmVkIGxvbmcgbnJfdG9fc2Nhbiwgc3RydWN0IGxydXZlYyAqbHJ1dmVjLFxuLS1cbm1tL3Ztc2Nhbi5jLTUxMTEtXG5tbS92bXNjYW4uYzo1MTEyOnN0YXRpYyBib29sIHNob3VsZF9ydW5fYWdpbmcoc3RydWN0IGxydXZlYyAqbHJ1dmVjLCB1bnNpZ25lZCBsb25nIG1heF9zZXEsXG5tbS92bXNjYW4uYy01MTEzLVx0XHRcdCAgICAgc3RydWN0IHNjYW5fY29udHJvbCAqc2MsIGludCBzd2FwcGluZXNzKVxuLS1cbm1tL3Ztc2Nhbi5jPTUxOTU9c3RhdGljIGJvb2wgdHJ5X3RvX3Nocmlua19scnV2ZWMoc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYylcbi0tXG5tbS92bXNjYW4uYy01MjExLVxubW0vdm1zY2FuLmM6NTIxMjpcdFx0aWYgKHNob3VsZF9ydW5fYWdpbmcobHJ1dmVjLCBtYXhfc2VxLCBzYywgc3dhcHBpbmVzcykpIHtcbm1tL3Ztc2Nhbi5jLTUyMTMtXHRcdFx0aWYgKHRyeV90b19pbmNfbWF4X3NlcShscnV2ZWMsIG1heF9zZXEsIHN3YXBwaW5lc3MsIGZhbHNlKSlcbi0tXG5tbS92bXNjYW4uYz01ODE4PXN0YXRpYyBjb25zdCBzdHJ1Y3Qgc2VxX29wZXJhdGlvbnMgbHJ1X2dlbl9zZXFfb3BzID0ge1xuLS1cbm1tL3Ztc2Nhbi5jLTU4MjQtXG5tbS92bXNjYW4uYzo1ODI1OnN0YXRpYyBpbnQgcnVuX2FnaW5nKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgdW5zaWduZWQgbG9uZyBzZXEsXG5tbS92bXNjYW4uYy01ODI2LVx0XHQgICAgIGludCBzd2FwcGluZXNzLCBib29sIGZvcmNlX3NjYW4pXG4tLVxubW0vdm1zY2FuLmM9NTg2OT1zdGF0aWMgaW50IHJ1bl9jbWQoY2hhciBjbWQsIHU2NCBtZW1jZ19pZCwgaW50IG5pZCwgdW5zaWduZWQgbG9uZyBzZXEsXG4tLVxubW0vdm1zY2FuLmMtNTg5Ny1cdGNhc2UgJiMzOTsmIzQzOyYjMzk7OlxubW0vdm1zY2FuLmM6NTg5ODpcdFx0ZXJyID0gcnVuX2FnaW5nKGxydXZlYywgc2VxLCBzd2FwcGluZXNzLCBvcHQpO1xubW0vdm1zY2FuLmMtNTg5OS1cdFx0YnJlYWs7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTUgMTM6MDE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDU2NwoJCQkJCQkJb3V0cHV0OiAzNQoJCQkJCQkJdGhvdWdodHM6IDQxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgcmVxdWVzdCwgZm9ybWF0dGVkIGFzIHJlcXVlc3RlZDoKCioqTmF2aWdhdGluZyB0aGUgQ29kZWJhc2UqKgoKQWxyaWdodCwgbGV0JiMzOTtzIGRpdmUgaW4uIEl0IGxvb2tzIGxpa2Ugd2UgbmVlZCB0byBleGFtaW5lIHRoZSBgcnVuX2NtZGAgZnVuY3Rpb24sIHNwZWNpZmljYWxseSBmb2N1c2luZyBvbiBhIHNlY3Rpb24gb2YgdGhlIGNvZGUgYmV0d2VlbiBsaW5lcyA1ODY5IGFuZCA1OTUwLiBUbyBnZXQgYSBiZXR0ZXIgZ3Jhc3Agb2YgdGhlIGNvbnRleHQsIEkgdGhpbmsgaXQmIzM5O3Mgd2lzZSB0byBleHBhbmQgdGhlIHNjb3BlIGEgYml0LiBJJiMzOTtsbCByZWFkIGZyb20gcm91Z2hseSBsaW5lIDU4NjAgdG8gNTk2MC4gVGhhdCBzaG91bGQgZ2l2ZSB1cyBhIGdvb2QgdmlldyBvZiB0aGUgc3Vycm91bmRpbmcgbG9naWMgYW5kIGhvdyBgcnVuX2NtZGAgaXMgYmVpbmcgdXNlZCBpbiB0aGF0IHNwZWNpZmljIHBhcnQgb2YgdGhlIHByb2dyYW0uIEkmIzM5O20gaG9waW5nIHRvIHVuZGVyc3RhbmQgdGhlIGZsb3csIHRoZSBpbnB1dHMsIGFuZCB0aGUgb3V0cHV0cyBpbiBkZXRhaWwsIHNvIEkgY2FuIGFjY3VyYXRlbHkgYXNzZXNzIHRoZSBmdW5jdGlvbmFsaXR5IGFuZCBhbnkgcG90ZW50aWFsIGlzc3VlcyBvciBpbXByb3ZlbWVudHMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTUgMTM6MDI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDttbS92bXNjYW4uYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDU4NjAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogODAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7NTg2MDpcdFx0XHRpZiAoIWV2aWN0X2ZvbGlvcyhucl9iYXRjaCwgbHJ1dmVjLCBzYywgc3dhcHBpbmVzcykpXG41ODYxOlx0XHRcdFx0cmV0dXJuIDA7XG41ODYyOlx0XG41ODYzOlx0XHRcdGNvbmRfcmVzY2hlZCgpO1xuNTg2NDpcdFx0fVxuNTg2NTpcdFxuNTg2NjpcdFx0cmV0dXJuIC1FSU5UUjtcbjU4Njc6XHR9XG41ODY4Olx0XG41ODY5Olx0c3RhdGljIGludCBydW5fY21kKGNoYXIgY21kLCB1NjQgbWVtY2dfaWQsIGludCBuaWQsIHVuc2lnbmVkIGxvbmcgc2VxLFxuNTg3MDpcdFx0XHQgICBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYywgaW50IHN3YXBwaW5lc3MsIHVuc2lnbmVkIGxvbmcgb3B0KVxuNTg3MTpcdHtcbjU4NzI6XHRcdHN0cnVjdCBscnV2ZWMgKmxydXZlYztcbjU4NzM6XHRcdGludCBlcnIgPSAtRUlOVkFMO1xuNTg3NDpcdFx0c3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnID0gTlVMTDtcbjU4NzU6XHRcbjU4NzY6XHRcdGlmIChuaWQgXHUwMDNjIDAgfHwgbmlkIFx1MDAzZT0gTUFYX05VTU5PREVTIHx8ICFub2RlX3N0YXRlKG5pZCwgTl9NRU1PUlkpKVxuNTg3NzpcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbjU4Nzg6XHRcbjU4Nzk6XHRcdGlmICghbWVtX2Nncm91cF9kaXNhYmxlZCgpKSB7XG41ODgwOlx0XHRcdG1lbWNnID0gbWVtX2Nncm91cF9nZXRfZnJvbV9pZChtZW1jZ19pZCk7XG41ODgxOlx0XHRcdGlmICghbWVtY2cpXG41ODgyOlx0XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG41ODgzOlx0XHR9XG41ODg0Olx0XG41ODg1Olx0XHRpZiAobWVtY2dfaWQgIT0gbWVtX2Nncm91cF9pZChtZW1jZykpXG41ODg2Olx0XHRcdGdvdG8gZG9uZTtcbjU4ODc6XHRcbjU4ODg6XHRcdHNjLVx1MDAzZXRhcmdldF9tZW1fY2dyb3VwID0gbWVtY2c7XG41ODg5Olx0XHRscnV2ZWMgPSBnZXRfbHJ1dmVjKG1lbWNnLCBuaWQpO1xuNTg5MDpcdFxuNTg5MTpcdFx0aWYgKHN3YXBwaW5lc3MgXHUwMDNjIE1JTl9TV0FQUElORVNTKVxuNTg5MjpcdFx0XHRzd2FwcGluZXNzID0gZ2V0X3N3YXBwaW5lc3MobHJ1dmVjLCBzYyk7XG41ODkzOlx0XHRlbHNlIGlmIChzd2FwcGluZXNzIFx1MDAzZSBTV0FQUElORVNTX0FOT05fT05MWSlcbjU4OTQ6XHRcdFx0Z290byBkb25lO1xuNTg5NTpcdFxuNTg5NjpcdFx0c3dpdGNoIChjbWQpIHtcbjU4OTc6XHRcdGNhc2UgJiMzOTsmIzQzOyYjMzk7OlxuNTg5ODpcdFx0XHRlcnIgPSBydW5fYWdpbmcobHJ1dmVjLCBzZXEsIHN3YXBwaW5lc3MsIG9wdCk7XG41ODk5Olx0XHRcdGJyZWFrO1xuNTkwMDpcdFx0Y2FzZSAmIzM5Oy0mIzM5OzpcbjU5MDE6XHRcdFx0ZXJyID0gcnVuX2V2aWN0aW9uKGxydXZlYywgc2VxLCBzYywgc3dhcHBpbmVzcywgb3B0KTtcbjU5MDI6XHRcdFx0YnJlYWs7XG41OTAzOlx0XHR9XG41OTA0Olx0ZG9uZTpcbjU5MDU6XHRcdG1lbV9jZ3JvdXBfcHV0KG1lbWNnKTtcbjU5MDY6XHRcbjU5MDc6XHRcdHJldHVybiBlcnI7XG41OTA4Olx0fVxuNTkwOTpcdFxuNTkxMDpcdC8qIHNlZSBEb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL21tL211bHRpZ2VuX2xydS5yc3QgZm9yIGRldGFpbHMgKi9cbjU5MTE6XHRzdGF0aWMgc3NpemVfdCBscnVfZ2VuX3NlcV93cml0ZShzdHJ1Y3QgZmlsZSAqZmlsZSwgY29uc3QgY2hhciBfX3VzZXIgKnNyYyxcbjU5MTI6XHRcdFx0XHRcdCBzaXplX3QgbGVuLCBsb2ZmX3QgKnBvcylcbjU5MTM6XHR7XG41OTE0Olx0XHR2b2lkICpidWY7XG41OTE1Olx0XHRjaGFyICpjdXIsICpuZXh0O1xuNTkxNjpcdFx0dW5zaWduZWQgaW50IGZsYWdzO1xuNTkxNzpcdFx0c3RydWN0IGJsa19wbHVnIHBsdWc7XG41OTE4Olx0XHRpbnQgZXJyID0gLUVJTlZBTDtcbjU5MTk6XHRcdHN0cnVjdCBzY2FuX2NvbnRyb2wgc2MgPSB7XG41OTIwOlx0XHRcdC5tYXlfd3JpdGVwYWdlID0gdHJ1ZSxcbjU5MjE6XHRcdFx0Lm1heV91bm1hcCA9IHRydWUsXG41OTIyOlx0XHRcdC5tYXlfc3dhcCA9IHRydWUsXG41OTIzOlx0XHRcdC5yZWNsYWltX2lkeCA9IE1BWF9OUl9aT05FUyAtIDEsXG41OTI0Olx0XHRcdC5nZnBfbWFzayA9IEdGUF9LRVJORUwsXG41OTI1Olx0XHRcdC5wcm9hY3RpdmUgPSB0cnVlLFxuNTkyNjpcdFx0fTtcbjU5Mjc6XHRcbjU5Mjg6XHRcdGJ1ZiA9IGt2bWFsbG9jKGxlbiAmIzQzOyAxLCBHRlBfS0VSTkVMKTtcbjU5Mjk6XHRcdGlmICghYnVmKVxuNTkzMDpcdFx0XHRyZXR1cm4gLUVOT01FTTtcbjU5MzE6XHRcbjU5MzI6XHRcdGlmIChjb3B5X2Zyb21fdXNlcihidWYsIHNyYywgbGVuKSkge1xuNTkzMzpcdFx0XHRrdmZyZWUoYnVmKTtcbjU5MzQ6XHRcdFx0cmV0dXJuIC1FRkFVTFQ7XG41OTM1Olx0XHR9XG41OTM2Olx0XG41OTM3Olx0XHRzZXRfdGFza19yZWNsYWltX3N0YXRlKGN1cnJlbnQsIFx1MDAyNnNjLnJlY2xhaW1fc3RhdGUpO1xuNTkzODpcdFx0ZmxhZ3MgPSBtZW1hbGxvY19ub3JlY2xhaW1fc2F2ZSgpO1xuNTkzOTpcdFx0YmxrX3N0YXJ0X3BsdWcoXHUwMDI2cGx1Zyk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTUgMTM6MDI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNTk2NQoJCQkJCQkJb3V0cHV0OiAzNQoJCQkJCQkJdGhvdWdodHM6IDY2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkludmVzdGlnYXRpbmcgdGhlIGBscnVfZ2VuX3NlcV93cml0ZWAgV3JpdGUgSGFuZGxlcioqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgYGxydV9nZW5fc2VxX3dyaXRlYC4gTXkgaW5pdGlhbCBodW5jaCBpcyB0aGF0IGl0JiMzOTtzIGEgd3JpdGUgaGFuZGxlciBhc3NvY2lhdGVkIHdpdGggb25lIG9mIHRoZSBkZWJ1ZywgcHJvYywgb3Igc3lzZnMgZmlsZSBzeXN0ZW1zLiBUaGF0IHNvdW5kcyByaWdodCwgZ2l2ZW4gdGhlIG5hbWluZyBjb252ZW50aW9uLiBOb3csIHRvIGJlIHN1cmUsIGFuZCB0byB1bmRlcnN0YW5kICpob3cqIGl0JiMzOTtzIGJlaW5nIHVzZWQsIEkgbmVlZCB0byBzZWUgd2hlcmUgaXQmIzM5O3MgZGVmaW5lZCBhbmQsIGNyaXRpY2FsbHksIHdoZXJlIGl0JiMzOTtzIHVzZWQuIEkmIzM5O2xsIG5lZWQgdG8gdHJhY2UgaXRzIHJlZmVyZW5jZXMuIEkmIzM5O2xsIHNraXAgdGhlIGRlZmluaXRpb25zLCBJJiMzOTttIGFscmVhZHkgYXdhcmUgb2YgdGhvc2UgZnJvbSBvdGhlciBwYXJ0cyBvZiB0aGUgY29kZWJhc2UsIGFuZCBnbyBzdHJhaWdodCB0byB0aGUgdXNhZ2VzLiBMZXQmIzM5O3Mgc3RhcnQgYnkgbG9va2luZyBhdCBsaW5lcyA1OTQwIHRocm91Z2ggNjAwMC4gVGhhdCBzaG91bGQgZ2l2ZSBtZSB0aGUgY29udGV4dCBJIG5lZWQgdG8gZmlndXJlIG91dCBpdHMgcHVycG9zZSBhbmQgaG93IGl0IGZpdHMgaW50byB0aGUgb3ZlcmFsbCBzY2hlbWUgb2YgdGhpbmdzLiBIb3BlZnVsbHksIHRob3NlIGxpbmVzIHdpbGwgc2hvdyBtZSBleGFjdGx5IHdoYXQmIzM5O3MgYmVpbmcgd3JpdHRlbiB0byB0aGF0IGhhbmRsZXIgYW5kICp3aHkqLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNSAxMzowMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O21tL3Ztc2Nhbi5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNTk0MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA2MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDs1OTQwOlx0XHRpZiAoIXNldF9tbV93YWxrKE5VTEwsIHRydWUpKSB7XG41OTQxOlx0XHRcdGVyciA9IC1FTk9NRU07XG41OTQyOlx0XHRcdGdvdG8gZG9uZTtcbjU5NDM6XHRcdH1cbjU5NDQ6XHRcbjU5NDU6XHRcdG5leHQgPSBidWY7XG41OTQ2Olx0XHRuZXh0W2xlbl0gPSAmIzM5O1xcMCYjMzk7O1xuNTk0NzpcdFxuNTk0ODpcdFx0d2hpbGUgKChjdXIgPSBzdHJzZXAoXHUwMDI2bmV4dCwgXCYjMzQ7LDtcXG5cJiMzNDspKSkge1xuNTk0OTpcdFx0XHRpbnQgbjtcbjU5NTA6XHRcdFx0aW50IGVuZDtcbjU5NTE6XHRcdFx0Y2hhciBjbWQsIHN3YXBfc3RyaW5nWzVdO1xuNTk1MjpcdFx0XHR1NjQgbWVtY2dfaWQ7XG41OTUzOlx0XHRcdHVuc2lnbmVkIGludCBuaWQ7XG41OTU0Olx0XHRcdHVuc2lnbmVkIGxvbmcgc2VxO1xuNTk1NTpcdFx0XHR1bnNpZ25lZCBpbnQgc3dhcHBpbmVzcztcbjU5NTY6XHRcdFx0dW5zaWduZWQgbG9uZyBvcHQgPSAtMTtcbjU5NTc6XHRcbjU5NTg6XHRcdFx0Y3VyID0gc2tpcF9zcGFjZXMoY3VyKTtcbjU5NTk6XHRcdFx0aWYgKCEqY3VyKVxuNTk2MDpcdFx0XHRcdGNvbnRpbnVlO1xuNTk2MTpcdFxuNTk2MjpcdFx0XHRuID0gc3NjYW5mKGN1ciwgXCYjMzQ7JWMgJWxsdSAldSAlbHUgJW4gJTRzICVuICVsdSAlblwmIzM0OywgXHUwMDI2Y21kLCBcdTAwMjZtZW1jZ19pZCwgXHUwMDI2bmlkLFxuNTk2MzpcdFx0XHRcdCAgIFx1MDAyNnNlcSwgXHUwMDI2ZW5kLCBzd2FwX3N0cmluZywgXHUwMDI2ZW5kLCBcdTAwMjZvcHQsIFx1MDAyNmVuZCk7XG41OTY0Olx0XHRcdGlmIChuIFx1MDAzYyA0IHx8IGN1cltlbmRdKSB7XG41OTY1Olx0XHRcdFx0ZXJyID0gLUVJTlZBTDtcbjU5NjY6XHRcdFx0XHRicmVhaztcbjU5Njc6XHRcdFx0fVxuNTk2ODpcdFxuNTk2OTpcdFx0XHRpZiAobiA9PSA0KSB7XG41OTcwOlx0XHRcdFx0c3dhcHBpbmVzcyA9IC0xO1xuNTk3MTpcdFx0XHR9IGVsc2UgaWYgKCFzdHJjbXAoXCYjMzQ7bWF4XCYjMzQ7LCBzd2FwX3N0cmluZykpIHtcbjU5NzI6XHRcdFx0XHQvKiBzZXQgYnkgdXNlcnNwYWNlIGZvciBhbm9ueW1vdXMgbWVtb3J5IG9ubHkgKi9cbjU5NzM6XHRcdFx0XHRzd2FwcGluZXNzID0gU1dBUFBJTkVTU19BTk9OX09OTFk7XG41OTc0Olx0XHRcdH0gZWxzZSB7XG41OTc1Olx0XHRcdFx0ZXJyID0ga3N0cnRvdWludChzd2FwX3N0cmluZywgMCwgXHUwMDI2c3dhcHBpbmVzcyk7XG41OTc2Olx0XHRcdFx0aWYgKGVycilcbjU5Nzc6XHRcdFx0XHRcdGJyZWFrO1xuNTk3ODpcdFx0XHR9XG41OTc5Olx0XG41OTgwOlx0XHRcdGVyciA9IHJ1bl9jbWQoY21kLCBtZW1jZ19pZCwgbmlkLCBzZXEsIFx1MDAyNnNjLCBzd2FwcGluZXNzLCBvcHQpO1xuNTk4MTpcdFx0XHRpZiAoZXJyKVxuNTk4MjpcdFx0XHRcdGJyZWFrO1xuNTk4MzpcdFx0fVxuNTk4NDpcdGRvbmU6XG41OTg1Olx0XHRjbGVhcl9tbV93YWxrKCk7XG41OTg2Olx0XHRibGtfZmluaXNoX3BsdWcoXHUwMDI2cGx1Zyk7XG41OTg3Olx0XHRtZW1hbGxvY19ub3JlY2xhaW1fcmVzdG9yZShmbGFncyk7XG41OTg4Olx0XHRzZXRfdGFza19yZWNsYWltX3N0YXRlKGN1cnJlbnQsIE5VTEwpO1xuNTk4OTpcdFxuNTk5MDpcdFx0a3ZmcmVlKGJ1Zik7XG41OTkxOlx0XG41OTkyOlx0XHRyZXR1cm4gZXJyID8gOiBsZW47XG41OTkzOlx0fVxuNTk5NDpcdFxuNTk5NTpcdHN0YXRpYyBpbnQgbHJ1X2dlbl9zZXFfb3BlbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSlcbjU5OTY6XHR7XG41OTk3Olx0XHRyZXR1cm4gc2VxX29wZW4oZmlsZSwgXHUwMDI2bHJ1X2dlbl9zZXFfb3BzKTtcbjU5OTg6XHR9XG41OTk5Olx0XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE1IDEzOjAyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDcxMDMKCQkJCQkJCW91dHB1dDogMzUKCQkJCQkJCXRob3VnaHRzOiA0NgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBzdW1tYXJ5LCBhcyBpZiBJIHdlcmUgdGhpbmtpbmcgdGhlc2UgdGhvdWdodHM6CgoqKkFuYWx5emluZyBgbHJ1X2dlbl9zZXFfb3BlbmAgYW5kIGBscnVfZ2VuX3NlcV93cml0ZWAgUmVnaXN0cmF0aW9ucyoqCgpPa2F5LCB0aW1lIHRvIGRpZyBpbi4gTXkgb2JqZWN0aXZlIGlzIHRvIHVuZGVyc3RhbmQgaG93IHRoZSBgbHJ1X2dlbl9zZXFfb3BlbmAgYW5kIGBscnVfZ2VuX3NlcV93cml0ZWAgZnVuY3Rpb25zIGFyZSBpbnRlZ3JhdGVkIGludG8gdGhlIHN5c3RlbS4gTGV0JiMzOTtzIHN0YXJ0IGJ5IGZpZ3VyaW5nIG91dCAqd2hlcmUqIHRoZXkmIzM5O3JlIGFjdHVhbGx5IHJlZ2lzdGVyZWQuIEkgbmVlZCB0byB0cmFjZSBiYWNrIHRoZWlyIHVzYWdlLiBJJiMzOTtsbCBuZWVkIHRvIGxvY2F0ZSB3aGVyZSB0aGVzZSBmdW5jdGlvbiBwb2ludGVycyBhcmUgYXNzaWduZWQgb3IgcmVmZXJlbmNlZC4gSSYjMzk7bSBnb2luZyB0byBzY2FuIHRoZSBzb3VyY2UgY29kZSBhcm91bmQgbGluZSBudW1iZXJzIDYwMDAgdG8gNjA1MC4gVGhpcyBpcyBwcm9iYWJseSBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQsIGdpdmVuIHRoZSBjb250ZXh0LiBUaGF0IHJhbmdlIHNob3VsZCBnaXZlIG1lIGEgZ29vZCBpbml0aWFsIGxvb2sgYXQgdGhlIHN1cnJvdW5kaW5nIGNvZGUgYW5kIG1heWJlIHNvbWUgY2x1ZXMgYWJvdXQgdGhlIHJlZ2lzdHJhdGlvbiBwcm9jZXNzLiBIb3BlZnVsbHksIHRoaXMgc2VjdGlvbiB3aWxsIGNvbnRhaW4gdGhlIGZ1bmN0aW9uIGNhbGxzIHdoZXJlIHRoZXNlIGhvb2tzIGFyZSBzZXQuIExldCYjMzk7cyBnZXQgdG8gd29yayEKCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTUgMTM6MDI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDttbS92bXNjYW4uYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDYwMDAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNTAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7NjAwMDpcdHN0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGxydV9nZW5fcndfZm9wcyA9IHtcbjYwMDE6XHRcdC5vcGVuID0gbHJ1X2dlbl9zZXFfb3BlbixcbjYwMDI6XHRcdC5yZWFkID0gc2VxX3JlYWQsXG42MDAzOlx0XHQud3JpdGUgPSBscnVfZ2VuX3NlcV93cml0ZSxcbjYwMDQ6XHRcdC5sbHNlZWsgPSBzZXFfbHNlZWssXG42MDA1Olx0XHQucmVsZWFzZSA9IHNlcV9yZWxlYXNlLFxuNjAwNjpcdH07XG42MDA3Olx0XG42MDA4Olx0c3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgbHJ1X2dlbl9yb19mb3BzID0ge1xuNjAwOTpcdFx0Lm9wZW4gPSBscnVfZ2VuX3NlcV9vcGVuLFxuNjAxMDpcdFx0LnJlYWQgPSBzZXFfcmVhZCxcbjYwMTE6XHRcdC5sbHNlZWsgPSBzZXFfbHNlZWssXG42MDEyOlx0XHQucmVsZWFzZSA9IHNlcV9yZWxlYXNlLFxuNjAxMzpcdH07XG42MDE0Olx0XG42MDE1Olx0LyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxuNjAxNjpcdCAqICAgICAgICAgICAgICAgICAgICAgICAgICBpbml0aWFsaXphdGlvblxuNjAxNzpcdCAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXG42MDE4Olx0XG42MDE5Olx0dm9pZCBscnVfZ2VuX2luaXRfcGdkYXQoc3RydWN0IHBnbGlzdF9kYXRhICpwZ2RhdClcbjYwMjA6XHR7XG42MDIxOlx0XHRpbnQgaSwgajtcbjYwMjI6XHRcbjYwMjM6XHRcdHNwaW5fbG9ja19pbml0KFx1MDAyNnBnZGF0LVx1MDAzZW1lbWNnX2xydS5sb2NrKTtcbjYwMjQ6XHRcbjYwMjU6XHRcdGZvciAoaSA9IDA7IGkgXHUwMDNjIE1FTUNHX05SX0dFTlM7IGkmIzQzOyYjNDM7KSB7XG42MDI2Olx0XHRcdGZvciAoaiA9IDA7IGogXHUwMDNjIE1FTUNHX05SX0JJTlM7IGomIzQzOyYjNDM7KVxuNjAyNzpcdFx0XHRcdElOSVRfSExJU1RfTlVMTFNfSEVBRChcdTAwMjZwZ2RhdC1cdTAwM2VtZW1jZ19scnUuZmlmb1tpXVtqXSwgaSk7XG42MDI4Olx0XHR9XG42MDI5Olx0fVxuNjAzMDpcdFxuNjAzMTpcdHZvaWQgbHJ1X2dlbl9pbml0X2xydXZlYyhzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMpXG42MDMyOlx0e1xuNjAzMzpcdFx0aW50IGk7XG42MDM0Olx0XHRpbnQgZ2VuLCB0eXBlLCB6b25lO1xuNjAzNTpcdFx0c3RydWN0IGxydV9nZW5fZm9saW8gKmxydWdlbiA9IFx1MDAyNmxydXZlYy1cdTAwM2VscnVnZW47XG42MDM2Olx0XHRzdHJ1Y3QgbHJ1X2dlbl9tbV9zdGF0ZSAqbW1fc3RhdGUgPSBnZXRfbW1fc3RhdGUobHJ1dmVjKTtcbjYwMzc6XHRcbjYwMzg6XHRcdGxydWdlbi1cdTAwM2VtYXhfc2VxID0gTUlOX05SX0dFTlMgJiM0MzsgMTtcbjYwMzk6XHRcdGxydWdlbi1cdTAwM2VlbmFibGVkID0gbHJ1X2dlbl9lbmFibGVkKCk7XG42MDQwOlx0XG42MDQxOlx0XHRmb3IgKGkgPSAwOyBpIFx1MDAzYz0gTUlOX05SX0dFTlMgJiM0MzsgMTsgaSYjNDM7JiM0MzspXG42MDQyOlx0XHRcdGxydWdlbi1cdTAwM2V0aW1lc3RhbXBzW2ldID0gamlmZmllcztcbjYwNDM6XHRcbjYwNDQ6XHRcdGZvcl9lYWNoX2dlbl90eXBlX3pvbmUoZ2VuLCB0eXBlLCB6b25lKVxuNjA0NTpcdFx0XHRJTklUX0xJU1RfSEVBRChcdTAwMjZscnVnZW4tXHUwMDNlZm9saW9zW2dlbl1bdHlwZV1bem9uZV0pO1xuNjA0NjpcdFxuNjA0NzpcdFx0aWYgKG1tX3N0YXRlKVxuNjA0ODpcdFx0XHRtbV9zdGF0ZS1cdTAwM2VzZXEgPSBNSU5fTlJfR0VOUztcbjYwNDk6XHR9XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE1IDEzOjAyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDgxOTIKCQkJCQkJCW91dHB1dDogMzEKCQkJCQkJCXRob3VnaHRzOiAyMAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIEkgd2VyZSBjb25zaWRlcmluZyB0aGlzIHF1ZXN0aW9uOgoKKipGaW5kaW5nIHRoZSBVc2FnZSBvZiBgbHJ1X2dlbl9yd19mb3BzYCoqCgpPa2F5LCBzbyBJIG5lZWQgdG8gdHJhY2sgZG93biB3aGVyZSB0aGUgYGxydV9nZW5fcndfZm9wc2AgdmFyaWFibGUsIG9yIHN0cnVjdHVyZSwgaXMgYWN0dWFsbHkgYmVpbmcgKnVzZWQqIGluIHRoZSBjb2RlLiBNeSBpbml0aWFsIHRob3VnaHQgaXMsIGxldCYjMzk7cyBqdXN0IGdvIGFoZWFkIGFuZCBkbyBpdCwgSSYjMzk7bGwgbmVlZCB0byBkbyBzb21lIGNvZGUgYXJjaGFlb2xvZ3kuIFRoaXMgbWVhbnMgdXNpbmcgYSB0b29sIHRvIHNlYXJjaCBmb3IgYWxsIGluc3RhbmNlcyB3aGVyZSB0aGlzIHNwZWNpZmljIGlkZW50aWZpZXIgYXBwZWFycy4gSSYjMzk7bGwgbmVlZCB0byBiZSBwcmVjaXNlIGFib3V0IGhvdyBJIHBocmFzZSB0aGUgc2VhcmNoIHRvIGF2b2lkIGZhbHNlIHBvc2l0aXZlcy4gVGhlbiwgb25jZSBJIGhhdmUgbXkgbGlzdCBvZiBpbnN0YW5jZXMgSSYjMzk7bGwga25vdyB3aGVyZSB0byBzdGFydCBteSBpbnNwZWN0aW9uLiBGcm9tIHRoZXJlLCBpdCYjMzk7bGwgYmUgYSBtYXR0ZXIgb2YgdW5kZXJzdGFuZGluZyB0aGUgY29udGV4dCBhbmQgcHVycG9zZSBvZiBpdHMgdXNhZ2UgdG8gaWRlbnRpZnkgdGhlIGFyZWFzIG9mIGNvZGUgdGhhdCByZWx5IG9uIGl0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNSAxMzowMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtscnVfZ2VuX3J3X2ZvcHMmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vdm1zY2FuLmM9NTk5NT1zdGF0aWMgaW50IGxydV9nZW5fc2VxX29wZW4oc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpXG4tLVxubW0vdm1zY2FuLmMtNTk5OS1cbm1tL3Ztc2Nhbi5jOjYwMDA6c3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgbHJ1X2dlbl9yd19mb3BzID0ge1xubW0vdm1zY2FuLmMtNjAwMS1cdC5vcGVuID0gbHJ1X2dlbl9zZXFfb3Blbixcbi0tXG5tbS92bXNjYW4uYz02MDkzPXN0YXRpYyBpbnQgX19pbml0IGluaXRfbHJ1X2dlbih2b2lkKVxuLS1cbm1tL3Ztc2Nhbi5jLTYxMDEtXHRkZWJ1Z2ZzX2NyZWF0ZV9maWxlX2F1eF9udW0oXCYjMzQ7bHJ1X2dlblwmIzM0OywgMDY0NCwgTlVMTCwgTlVMTCwgZmFsc2UsXG5tbS92bXNjYW4uYzo2MTAyOlx0XHRcdFx0ICAgIFx1MDAyNmxydV9nZW5fcndfZm9wcyk7XG5tbS92bXNjYW4uYy02MTAzLVx0ZGVidWdmc19jcmVhdGVfZmlsZV9hdXhfbnVtKFwmIzM0O2xydV9nZW5fZnVsbFwmIzM0OywgMDQ0NCwgTlVMTCwgTlVMTCwgdHJ1ZSxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTUgMTM6MDI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogODY4MAoJCQkJCQkJb3V0cHV0OiAzNQoJCQkJCQkJdGhvdWdodHM6IDEzNwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBJbml0aWFsIFRob3VnaHRzIG9uIHRoaXMgRGVidWdmcyBDcmVhdGlvbioqCgpPa2F5LCBzbyBJIHNlZSBgZGVidWdmc19jcmVhdGVfZmlsZV9hdXhfbnVtYCBiZWluZyB1c2VkIHRvIGNyZWF0ZSBzb21ldGhpbmcgY2FsbGVkICYjMzQ7bHJ1X2dlbiYjMzQ7LiBNeSBmaXJzdCB0aG91Z2h0IGlzOiBkZWJ1Z2ZzISBJIG5lZWQgdG8gcXVpY2tseSBhc3Nlc3MgaWYgdGhpcyBpcyBzb21ldGhpbmcgdGhhdCYjMzk7cyByZWFjaGFibGUgb3IgZXZlbiB3b3JzZSwgZnV6emVkIGJ5IHN5emthbGxlci4gVGhhdCB3b3VsZCBiZSBhbiBpbW1lZGlhdGUgcmVkIGZsYWcuIEkgbmVlZCB0byBmaWd1cmUgb3V0IHdoZXJlIHRoaXMgdGhpbmcgbGl2ZXMsIHRoZSBkZWJ1Z2ZzIHBhdGguIEFoLCBpdCBhcHBlYXJzIHRvIGJlIHVuZGVyIHRoZSBkZWJ1Z2ZzIHJvb3QsIHNwZWNpZmljYWxseSBgL3N5cy9rZXJuZWwvZGVidWcvbHJ1X2dlbmAuCgpOb3csIGxldCYjMzk7cyB0YWtlIGEgc3RlcCBiYWNrIGFuZCB1bmRlcnN0YW5kIHRoZSBjb250ZXh0LiBTaW5jZSB0aGlzIGNvbmNlcm5zIExSVSwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCYjMzk7cyB0cmlnZ2VyaW5nIHRoaXMgZGVidWdmcyBub2RlLiBJIHNob3VsZCBwcm9iYWJseSBjaGVjayB0aGUgS2NvbmZpZyBvcHRpb25zIHRoYXQgZW5hYmxlIE11bHRpLUdlbiBMUlUgKE1HTFJVKS4gTGV0IG1lIGRpZyBpbnRvIHRob3NlIG9wdGlvbnMgYW5kIHNlZSB3aGF0JiMzOTtzIGdvaW5nIG9uLiBUaGVuLCBJIG5lZWQgdG8gY2hlY2sgaG93IGBpbml0X2xydV9nZW5gIGlzIGJlaW5nIGNhbGxlZCBhbmQgaXRzIHN1cnJvdW5kaW5ncywgc3BlY2lmaWNhbGx5IGNoZWNraW5nIHRoZSBgI2lmZGVmYCBkaXJlY3RpdmVzIGluIGBtbS92bXNjYW4uY2AuIFRoYXQgd2lsbCBoZWxwIGRldGVybWluZSB0aGUgY29tcGlsYXRpb24gcGF0aCBhbmQgd2hlcmUgdGhpcyBkZWJ1Z2ZzIG5vZGUgY29tZXMgZnJvbS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTUgMTM6MDI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDttbS92bXNjYW4uYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDYwOTAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7NjA5MDpcdFxuNjA5MTpcdCNlbmRpZiAvKiBDT05GSUdfTUVNQ0cgKi9cbjYwOTI6XHRcbjYwOTM6XHRzdGF0aWMgaW50IF9faW5pdCBpbml0X2xydV9nZW4odm9pZClcbjYwOTQ6XHR7XG42MDk1Olx0XHRCVUlMRF9CVUdfT04oTUlOX05SX0dFTlMgJiM0MzsgMSBcdTAwM2U9IE1BWF9OUl9HRU5TKTtcbjYwOTY6XHRcdEJVSUxEX0JVR19PTihCSVQoTFJVX0dFTl9XSURUSCkgXHUwMDNjPSBNQVhfTlJfR0VOUyk7XG42MDk3Olx0XG42MDk4Olx0XHRpZiAoc3lzZnNfY3JlYXRlX2dyb3VwKG1tX2tvYmosIFx1MDAyNmxydV9nZW5fYXR0cl9ncm91cCkpXG42MDk5Olx0XHRcdHByX2VycihcJiMzNDtscnVfZ2VuOiBmYWlsZWQgdG8gY3JlYXRlIHN5c2ZzIGdyb3VwXFxuXCYjMzQ7KTtcbjYxMDA6XHRcbjYxMDE6XHRcdGRlYnVnZnNfY3JlYXRlX2ZpbGVfYXV4X251bShcJiMzNDtscnVfZ2VuXCYjMzQ7LCAwNjQ0LCBOVUxMLCBOVUxMLCBmYWxzZSxcbjYxMDI6XHRcdFx0XHRcdCAgICBcdTAwMjZscnVfZ2VuX3J3X2ZvcHMpO1xuNjEwMzpcdFx0ZGVidWdmc19jcmVhdGVfZmlsZV9hdXhfbnVtKFwmIzM0O2xydV9nZW5fZnVsbFwmIzM0OywgMDQ0NCwgTlVMTCwgTlVMTCwgdHJ1ZSxcbjYxMDQ6XHRcdFx0XHRcdCAgICBcdTAwMjZscnVfZ2VuX3JvX2ZvcHMpO1xuNjEwNTpcdFxuNjEwNjpcdFx0cmV0dXJuIDA7XG42MTA3Olx0fTtcbjYxMDg6XHRsYXRlX2luaXRjYWxsKGluaXRfbHJ1X2dlbik7XG42MTA5Olx0XG42MTEwOlx0I2Vsc2UgLyogIUNPTkZJR19MUlVfR0VOICovXG42MTExOlx0XG42MTEyOlx0c3RhdGljIHZvaWQgbHJ1X2dlbl9hZ2Vfbm9kZShzdHJ1Y3QgcGdsaXN0X2RhdGEgKnBnZGF0LCBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYylcbjYxMTM6XHR7XG42MTE0Olx0XHRCVUlMRF9CVUcoKTtcbjYxMTU6XHR9XG42MTE2Olx0XG42MTE3Olx0c3RhdGljIHZvaWQgbHJ1X2dlbl9zaHJpbmtfbHJ1dmVjKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgc3RydWN0IHNjYW5fY29udHJvbCAqc2MpXG42MTE4Olx0e1xuNjExOTpcdFx0QlVJTERfQlVHKCk7XG42MTIwOlx0fVxuNjEyMTpcdFxuNjEyMjpcdHN0YXRpYyB2b2lkIGxydV9nZW5fc2hyaW5rX25vZGUoc3RydWN0IHBnbGlzdF9kYXRhICpwZ2RhdCwgc3RydWN0IHNjYW5fY29udHJvbCAqc2MpXG42MTIzOlx0e1xuNjEyNDpcdFx0QlVJTERfQlVHKCk7XG42MTI1Olx0fVxuNjEyNjpcdFxuNjEyNzpcdCNlbmRpZiAvKiBDT05GSUdfTFJVX0dFTiAqL1xuNjEyODpcdFxuNjEyOTpcdHN0YXRpYyB2b2lkIHNocmlua19scnV2ZWMoc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYylcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTUgMTM6MDI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjFtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogOTc0NAoJCQkJCQkJb3V0cHV0OiAyOQoJCQkJCQkJdGhvdWdodHM6IDcxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgTFJVIEdlbmVyYXRpb24gQ29uZmlndXJhdGlvbioqCgpPa2F5LCBmaXJzdCB0aGluZyYjMzk7cyBmaXJzdDogaXQgbG9va3MgbGlrZSBgQ09ORklHX0xSVV9HRU5gIGlzIHRoZSBrZXkgY29uZmlnIG9wdGlvbiBoZXJlLCB0aGUgZ2F0ZWtlZXBlciBmb3IgdGhpcyBlbnRpcmUgc2VjdGlvbiBvZiBjb2RlLiBCZWZvcmUgSSBkaWcgYW55IGRlZXBlciwgSSBzaG91bGQgdmVyaWZ5IHdoYXQgb3RoZXIgY29uZmlndXJhdGlvbnMgbWlnaHQgYmUgaW52b2x2ZWQuIExldCYjMzk7cyBzZWUgaWYgZWl0aGVyIGBDT05GSUdfTFJVX0dFTl9FTkFCTEVEYCBvciwgcmVhbGx5LCBqdXN0IGBDT05GSUdfTFJVX0dFTmAgcmVxdWlyZXMgb3RoZXIgY29uZmlnIG9wdGlvbnMsIG90aGVyIGRlcGVuZGVuY2llcywgb3IgaGFzIGFueSBpbXBsaWNhdGlvbnMgb2Ygd2hpY2ggSSBtdXN0IGJlIG1pbmRmdWwuCgpSaWdodCwgc28gdG8gbWFrZSBzdXJlIEkgZ2V0IGEgZ29vZCwgaG9saXN0aWMgdW5kZXJzdGFuZGluZywgSSBuZWVkIHRvIGRvIGEgcXVpY2sgc2VhcmNoLiBMZXQmIzM5O3MgZmlyZSB1cCBhIHNlYXJjaCBmb3IgYGNvbmZpZyBMUlVfR0VOYCBkaXJlY3RseSBpbiB0aGUgYG1tL0tjb25maWdgIGZpbGUuIFRoYXQgc2hvdWxkIGdpdmUgbWUgdGhlIGF1dGhvcml0YXRpdmUgZGVmaW5pdGlvbiBhbmQgYW55IHJlbGF0ZWQgZGVwZW5kZW5jaWVzLiBUaGlzIHNob3VsZCBnZXQgbWUgc3RhcnRlZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTUgMTM6MDQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIExSVV9HRU4mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL0tjb25maWc9MTM4OD1jb25maWcgUFRFX01BUktFUl9VRkZEX1dQXG4tLVxubW0vS2NvbmZpZy0xMzk4LSMgbXVsdGktZ2VuIExSVSB7XG5tbS9LY29uZmlnOjEzOTk6Y29uZmlnIExSVV9HRU5cbm1tL0tjb25maWctMTQwMC1cdGJvb2wgXCYjMzQ7TXVsdGktR2VuIExSVVwmIzM0O1xuLS1cbm1tL0tjb25maWctMTQwNy1cbm1tL0tjb25maWc6MTQwODpjb25maWcgTFJVX0dFTl9FTkFCTEVEXG5tbS9LY29uZmlnLTE0MDktXHRib29sIFwmIzM0O0VuYWJsZSBieSBkZWZhdWx0XCYjMzQ7XG4tLVxubW0vS2NvbmZpZy0xNDEzLVxubW0vS2NvbmZpZzoxNDE0OmNvbmZpZyBMUlVfR0VOX1NUQVRTXG5tbS9LY29uZmlnLTE0MTUtXHRib29sIFwmIzM0O0Z1bGwgc3RhdHMgZm9yIGRlYnVnZ2luZ1wmIzM0O1xuLS1cbm1tL0tjb25maWctMTQyMi1cbm1tL0tjb25maWc6MTQyMzpjb25maWcgTFJVX0dFTl9XQUxLU19NTVVcbm1tL0tjb25maWctMTQyNC1cdGRlZl9ib29sIHlcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTUgMTM6MDQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTAyNTkKCQkJCQkJCW91dHB1dDogMzMKCQkJCQkJCXRob3VnaHRzOiAyNwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRoZSB0aG91Z2h0IHByb2Nlc3M6CgoqKkRpdmluZyBpbnRvIHRoZSBLZXJuZWwgQ29uZmlndXJhdGlvbiBMYW5kc2NhcGUqKgoKT2theSwgc28gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGRlcGVuZGVuY2llcyBvZiBgTFJVX0dFTmAuIEtub3dpbmcga2VybmVsIGNvbmZpZ3VyYXRpb24sIHRoZSBsb2dpY2FsIHBsYWNlIHRvIHN0YXJ0IGlzIHRoZSBgS2NvbmZpZ2AgZmlsZS4gSSYjMzk7bGwgbmVlZCB0byBnbyB0byBgbW0vS2NvbmZpZ2AsIEkmIzM5O20gZ3Vlc3NpbmcgYXJvdW5kIGxpbmUgMTM5OCwgZ2l2ZSBvciB0YWtlLCBzaG91bGQgYmUgaW4gdGhlIGJhbGxwYXJrLiBMZXQmIzM5O3Mgc2VlIHdoYXQmIzM5O3MgZGVmaW5lZCB0aGVyZSBhbmQgd2hhdCBpdHMgcmVsYXRpb25zaGlwcyBhcmUgd2l0aCBvdGhlciBvcHRpb25zLiBGcm9tIHRoZXJlIEkmIzM5O2xsIHN0YXJ0IG1hcHBpbmcgb3V0IHRoZSBpbXBsaWNhdGlvbnMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE1IDEzOjA0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bW0vS2NvbmZpZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDEzOTUsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MTM5NTpcdFx0ICBwdXJwb3Nlcy4gIEl0IGlzIHJlcXVpcmVkIHRvIGVuYWJsZSB1c2VyZmF1bHRmZCB3cml0ZSBwcm90ZWN0aW9uIG9uXG4xMzk2Olx0XHQgIGZpbGUtYmFja2VkIG1lbW9yeSB0eXBlcyBsaWtlIHNobWVtIGFuZCBodWdldGxiZnMuXG4xMzk3Olx0XG4xMzk4Olx0IyBtdWx0aS1nZW4gTFJVIHtcbjEzOTk6XHRjb25maWcgTFJVX0dFTlxuMTQwMDpcdFx0Ym9vbCBcJiMzNDtNdWx0aS1HZW4gTFJVXCYjMzQ7XG4xNDAxOlx0XHRkZXBlbmRzIG9uIE1NVVxuMTQwMjpcdFx0IyBtYWtlIHN1cmUgZm9saW8tXHUwMDNlZmxhZ3MgaGFzIGVub3VnaCBzcGFyZSBiaXRzXG4xNDAzOlx0XHRkZXBlbmRzIG9uIDY0QklUIHx8ICFTUEFSU0VNRU0gfHwgU1BBUlNFTUVNX1ZNRU1NQVBcbjE0MDQ6XHRcdGhlbHBcbjE0MDU6XHRcdCAgQSBoaWdoIHBlcmZvcm1hbmNlIExSVSBpbXBsZW1lbnRhdGlvbiB0byBvdmVyY29tbWl0IG1lbW9yeS4gU2VlXG4xNDA2Olx0XHQgIERvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUvbW0vbXVsdGlnZW5fbHJ1LnJzdCBmb3IgZGV0YWlscy5cbjE0MDc6XHRcbjE0MDg6XHRjb25maWcgTFJVX0dFTl9FTkFCTEVEXG4xNDA5Olx0XHRib29sIFwmIzM0O0VuYWJsZSBieSBkZWZhdWx0XCYjMzQ7XG4xNDEwOlx0XHRkZXBlbmRzIG9uIExSVV9HRU5cbjE0MTE6XHRcdGhlbHBcbjE0MTI6XHRcdCAgVGhpcyBvcHRpb24gZW5hYmxlcyB0aGUgbXVsdGktZ2VuIExSVSBieSBkZWZhdWx0LlxuMTQxMzpcdFxuMTQxNDpcdGNvbmZpZyBMUlVfR0VOX1NUQVRTXG4xNDE1Olx0XHRib29sIFwmIzM0O0Z1bGwgc3RhdHMgZm9yIGRlYnVnZ2luZ1wmIzM0O1xuMTQxNjpcdFx0ZGVwZW5kcyBvbiBMUlVfR0VOXG4xNDE3Olx0XHRoZWxwXG4xNDE4Olx0XHQgIERvIG5vdCBlbmFibGUgdGhpcyBvcHRpb24gdW5sZXNzIHlvdSBwbGFuIHRvIGxvb2sgYXQgaGlzdG9yaWNhbCBzdGF0c1xuMTQxOTpcdFx0ICBmcm9tIGV2aWN0ZWQgZ2VuZXJhdGlvbnMgZm9yIGRlYnVnZ2luZyBwdXJwb3NlLlxuMTQyMDpcdFxuMTQyMTpcdFx0ICBUaGlzIG9wdGlvbiBoYXMgYSBwZXItbWVtY2cgYW5kIHBlci1ub2RlIG1lbW9yeSBvdmVyaGVhZC5cbjE0MjI6XHRcbjE0MjM6XHRjb25maWcgTFJVX0dFTl9XQUxLU19NTVVcbjE0MjQ6XHRcdGRlZl9ib29sIHlcbjE0MjU6XHRcdGRlcGVuZHMgb24gTFJVX0dFTiBcdTAwMjZcdTAwMjYgQVJDSF9IQVNfSFdfUFRFX1lPVU5HXG4xNDI2Olx0IyB9XG4xNDI3Olx0XG4xNDI4Olx0Y29uZmlnIExPQ0tfTU1fQU5EX0ZJTkRfVk1BXG4xNDI5Olx0XHRib29sXG4xNDMwOlx0XHRkZXBlbmRzIG9uICFTVEFDS19HUk9XU1VQXG4xNDMxOlx0XG4xNDMyOlx0Y29uZmlnIElPTU1VX01NX0RBVEFcbjE0MzM6XHRcdGJvb2xcbjE0MzQ6XHRcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTUgMTM6MDQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTEwMDUKCQkJCQkJCW91dHB1dDogMjQKCQkJCQkJCXRob3VnaHRzOiA4OQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipOYXZpZ2F0aW5nIHRoZSBEZXBlbmRlbmNpZXMqKgoKT2theSwgaGVyZSYjMzk7cyB3aGF0IEkmIzM5O20gdGhpbmtpbmcuIEkgbmVlZCB0byBmaWd1cmUgb3V0IHRoZSBkZXBlbmRlbmNpZXMgZm9yIGBDT05GSUdfTFJVX0dFTmAsIHN0YXJ0aW5nIHdpdGggdGhlIG9idmlvdXMgb25lOiBpdCYjMzk7cyBsaW5rZWQgdG8gYE1NVWAuIE1ha2VzIHNlbnNlLiBOb3csIGxldCYjMzk7cyBub3QgZ2V0IGFoZWFkIG9mIG91cnNlbHZlcy4gSSBzaG91bGQgYWxzbyBzZWUgaWYgYENPTkZJR19ERUJVR19GU2AgaXMgYSByZXF1aXJlbWVudC4gSSBuZWVkIHRvIGJlIHRob3JvdWdoIHdpdGggdGhlc2UgZGVwZW5kZW5jaWVzLCBzbyBsZXQmIzM5O3MgY2hlY2sgZm9yIGl0LiBIbW0sIGhvbGQgb24gYSBzZWNvbmQuIEkgbmVlZCB0byB2ZXJpZnkgd2hldGhlciBgZGVidWdmc19jcmVhdGVfZmlsZV9hdXhfbnVtYCBpcyBjb25kaXRpb25hbCBvbiBgQ09ORklHX0RFQlVHX0ZTYC4gVGhpcyBzb3J0IG9mIGRldGFpbCBpcyBjcnVjaWFsIGZvciBjb25maWd1cmluZyBteSBzeXN0ZW0gcHJvcGVybHkuIE9rYXksIGxvb2tzIGxpa2UgSSBuZWVkIHRvIHRyYWNlIGJhY2sgYW5kIGZpbmQgdGhlIGRlZmluaXRpdmUgZGVmaW5pdGlvbiBvZiBgZGVidWdmc19jcmVhdGVfZmlsZV9hdXhfbnVtYC4gVGhpcyBpcyBnb2luZyB0byBiZSBhIGZ1biBsaXR0bGUgZGlnLCBidXQgbmVjZXNzYXJ5LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNSAxMzowNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtkZWJ1Z2ZzX2NyZWF0ZV9maWxlX2F1eF9udW0mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9jcnlwdG8vaW50ZWwvcWF0L3FhdF9jb21tb24vYWRmX3RsX2RlYnVnZnMuYz02OTg9dm9pZCBhZGZfdGxfZGJnZnNfYWRkKHN0cnVjdCBhZGZfYWNjZWxfZGV2ICphY2NlbF9kZXYpXG4tLVxuZHJpdmVycy9jcnlwdG8vaW50ZWwvcWF0L3FhdF9jb21tb24vYWRmX3RsX2RlYnVnZnMuYy03MTctXHRcdFx0IEFERl9UTF9EQkdfUlBfQUxQSEFfSU5ERVgoaSkpO1xuZHJpdmVycy9jcnlwdG8vaW50ZWwvcWF0L3FhdF9jb21tb24vYWRmX3RsX2RlYnVnZnMuYzo3MTg6XHRcdGRlYnVnZnNfY3JlYXRlX2ZpbGVfYXV4X251bShuYW1lLCAwNjQ0LCBkaXIsIGFjY2VsX2RldiwgaSxcbmRyaXZlcnMvY3J5cHRvL2ludGVsL3FhdC9xYXRfY29tbW9uL2FkZl90bF9kZWJ1Z2ZzLmMtNzE5LVx0XHRcdFx0XHQgICAgXHUwMDI2dGxfcnBfZGF0YV9mb3BzKTtcbi0tXG5kcml2ZXJzL2Zpcm13YXJlL2FybV9zY21pL3Jhd19tb2RlLmM9MTIxMz12b2lkICpzY21pX3Jhd19tb2RlX2luaXQoY29uc3Qgc3RydWN0IHNjbWlfaGFuZGxlICpoYW5kbGUsXG4tLVxuZHJpdmVycy9maXJtd2FyZS9hcm1fc2NtaS9yYXdfbW9kZS5jLTEyODEtXG5kcml2ZXJzL2Zpcm13YXJlL2FybV9zY21pL3Jhd19tb2RlLmM6MTI4MjpcdFx0XHRkZWJ1Z2ZzX2NyZWF0ZV9maWxlX2F1eF9udW0oXCYjMzQ7bWVzc2FnZVwmIzM0OywgMDYwMCwgY2hkLFxuZHJpdmVycy9maXJtd2FyZS9hcm1fc2NtaS9yYXdfbW9kZS5jLTEyODMtXHRcdFx0XHRcdCAgICByYXcsIGNoYW5uZWxzW2ldLFxuLS1cbmRyaXZlcnMvZmlybXdhcmUvYXJtX3NjbWkvcmF3X21vZGUuYy0xMjg1LVxuZHJpdmVycy9maXJtd2FyZS9hcm1fc2NtaS9yYXdfbW9kZS5jOjEyODY6XHRcdFx0ZGVidWdmc19jcmVhdGVfZmlsZV9hdXhfbnVtKFwmIzM0O21lc3NhZ2VfYXN5bmNcJiMzNDssIDA2MDAsIGNoZCxcbmRyaXZlcnMvZmlybXdhcmUvYXJtX3NjbWkvcmF3X21vZGUuYy0xMjg3LVx0XHRcdFx0XHQgICAgcmF3LCBjaGFubmVsc1tpXSxcbi0tXG5kcml2ZXJzL2Zpcm13YXJlL2FybV9zY21pL3Jhd19tb2RlLmMtMTI4OS1cbmRyaXZlcnMvZmlybXdhcmUvYXJtX3NjbWkvcmF3X21vZGUuYzoxMjkwOlx0XHRcdGRlYnVnZnNfY3JlYXRlX2ZpbGVfYXV4X251bShcJiMzNDttZXNzYWdlX3BvbGxcJiMzNDssIDA2MDAsIGNoZCxcbmRyaXZlcnMvZmlybXdhcmUvYXJtX3NjbWkvcmF3X21vZGUuYy0xMjkxLVx0XHRcdFx0XHRcdCAgICByYXcsIGNoYW5uZWxzW2ldLFxuLS1cbmRyaXZlcnMvZmlybXdhcmUvYXJtX3NjbWkvcmF3X21vZGUuYy0xMjkzLVxuZHJpdmVycy9maXJtd2FyZS9hcm1fc2NtaS9yYXdfbW9kZS5jOjEyOTQ6XHRcdFx0ZGVidWdmc19jcmVhdGVfZmlsZV9hdXhfbnVtKFwmIzM0O21lc3NhZ2VfcG9sbF9hc3luY1wmIzM0OywgMDYwMCxcbmRyaXZlcnMvZmlybXdhcmUvYXJtX3NjbWkvcmF3X21vZGUuYy0xMjk1LVx0XHRcdFx0XHRcdCAgICBjaGQsIHJhdywgY2hhbm5lbHNbaV0sXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvYWYvcnZ1X2RlYnVnZnMuYz0yNzU4PXN0YXRpYyB2b2lkIHJ2dV9kYmdfbml4X2luaXQoc3RydWN0IHJ2dSAqcnZ1LCBpbnQgYmxrYWRkcilcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9hZi9ydnVfZGVidWdmcy5jLTI3OTEtXHRcdFx0ICAgIFx1MDAyNnJ2dV9kYmdfbml4X25kY19yeF9oaXRzX21pc3NfZm9wcyk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9hZi9ydnVfZGVidWdmcy5jOjI3OTI6XHRkZWJ1Z2ZzX2NyZWF0ZV9maWxlX2F1eF9udW0oXCYjMzQ7cXNpemVcJiMzNDssIDA2MDAsIHJ2dS1cdTAwM2VydnVfZGJnLm5peCwgcnZ1LFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvYWYvcnZ1X2RlYnVnZnMuYy0yNzkzLVx0XHRcdCAgICBibGthZGRyLCBcdTAwMjZydnVfZGJnX25peF9xc2l6ZV9mb3BzKTtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9hZi9ydnVfZGVidWdmcy5jPTMxMDQ9c3RhdGljIHZvaWQgcnZ1X2RiZ19jZ3hfaW5pdChzdHJ1Y3QgcnZ1ICpydnUpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvYWYvcnZ1X2RlYnVnZnMuYy0zMTQ1LVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvYWYvcnZ1X2RlYnVnZnMuYzozMTQ2Olx0XHRcdGRlYnVnZnNfY3JlYXRlX2ZpbGVfYXV4X251bShcJiMzNDtzdGF0c1wmIzM0OywgMDYwMCwgcnZ1LVx1MDAzZXJ2dV9kYmcubG1hYyxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL2FmL3J2dV9kZWJ1Z2ZzLmMtMzE0Ny1cdFx0XHRcdFx0XHQgICAgY3R4LCBsbWFjX2lkLCBcdTAwMjZydnVfZGJnX2NneF9zdGF0X2ZvcHMpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvYWYvcnZ1X2RlYnVnZnMuYzozMTQ4Olx0XHRcdGRlYnVnZnNfY3JlYXRlX2ZpbGVfYXV4X251bShcJiMzNDttYWNfZmlsdGVyXCYjMzQ7LCAwNjAwLFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvYWYvcnZ1X2RlYnVnZnMuYy0zMTQ5LVx0XHRcdFx0XHQgICAgcnZ1LVx1MDAzZXJ2dV9kYmcubG1hYywgY3R4LCBsbWFjX2lkLFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvYWYvcnZ1X2RlYnVnZnMuYy0zMTUwLVx0XHRcdFx0XHQgICAgXHUwMDI2cnZ1X2RiZ19jZ3hfZG1hY19mbHRfZm9wcyk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9hZi9ydnVfZGVidWdmcy5jOjMxNTE6XHRcdFx0ZGVidWdmc19jcmVhdGVfZmlsZV9hdXhfbnVtKFwmIzM0O2Z3ZGF0YVwmIzM0OywgMDYwMCxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL2FmL3J2dV9kZWJ1Z2ZzLmMtMzE1Mi1cdFx0XHRcdFx0XHQgICAgcnZ1LVx1MDAzZXJ2dV9kYmcubG1hYywgY3R4LFxuLS1cbmRyaXZlcnMvcGh5L21lZGlhdGVrL3BoeS1tdGstdHBoeS5jPTUwNT1zdGF0aWMgdm9pZCB1Ml9waHlfZGJnZnNfZmlsZXNfY3JlYXRlKHN0cnVjdCBtdGtfcGh5X2luc3RhbmNlICppbnN0KVxuLS1cbmRyaXZlcnMvcGh5L21lZGlhdGVrL3BoeS1tdGstdHBoeS5jLTUxMC1cdGZvciAoaSA9IDA7IGkgXHUwMDNjIGNvdW50OyBpJiM0MzsmIzQzOylcbmRyaXZlcnMvcGh5L21lZGlhdGVrL3BoeS1tdGstdHBoeS5jOjUxMTpcdFx0ZGVidWdmc19jcmVhdGVfZmlsZV9hdXhfbnVtKHUyX3BoeV9maWxlc1tpXSwgMDY0NCwgaW5zdC1cdTAwM2VwaHktXHUwMDNlZGVidWdmcyxcbmRyaXZlcnMvcGh5L21lZGlhdGVrL3BoeS1tdGstdHBoeS5jLTUxMi1cdFx0XHRcdCAgICBpbnN0LCBpLCAgXHUwMDI2dTJfcGh5X2ZvcHMpO1xuLS1cbmRyaXZlcnMvcGh5L21lZGlhdGVrL3BoeS1tdGstdHBoeS5jPTYxNT1zdGF0aWMgdm9pZCB1M19waHlfZGJnZnNfZmlsZXNfY3JlYXRlKHN0cnVjdCBtdGtfcGh5X2luc3RhbmNlICppbnN0KVxuLS1cbmRyaXZlcnMvcGh5L21lZGlhdGVrL3BoeS1tdGstdHBoeS5jLTYyMC1cdGZvciAoaSA9IDA7IGkgXHUwMDNjIGNvdW50OyBpJiM0MzsmIzQzOylcbmRyaXZlcnMvcGh5L21lZGlhdGVrL3BoeS1tdGstdHBoeS5jOjYyMTpcdFx0ZGVidWdmc19jcmVhdGVfZmlsZV9hdXhfbnVtKHUzX3BoeV9maWxlc1tpXSwgMDY0NCwgaW5zdC1cdTAwM2VwaHktXHUwMDNlZGVidWdmcyxcbmRyaXZlcnMvcGh5L21lZGlhdGVrL3BoeS1tdGstdHBoeS5jLTYyMi1cdFx0XHRcdCAgICBpbnN0LCBpLCBcdTAwMjZ1M19waHlfZm9wcyk7XG4tLVxuZHJpdmVycy9wbGF0Zm9ybS94ODYvZGVsbC9hbGllbndhcmUtd21pLXdtYXguYz0xNDc4PXN0YXRpYyB2b2lkIGF3Y2NfZGVidWdmc19pbml0KHN0cnVjdCB3bWlfZGV2aWNlICp3ZGV2KVxuLS1cbmRyaXZlcnMvcGxhdGZvcm0veDg2L2RlbGwvYWxpZW53YXJlLXdtaS13bWF4LmMtMTUxNS1cdFx0c2NucHJpbnRmKG5hbWUsIHNpemVvZihuYW1lKSwgXCYjMzQ7cGluJXVcJiMzNDssIGkpO1xuZHJpdmVycy9wbGF0Zm9ybS94ODYvZGVsbC9hbGllbndhcmUtd21pLXdtYXguYzoxNTE2Olx0XHRkZWJ1Z2ZzX2NyZWF0ZV9maWxlX2F1eF9udW0obmFtZSwgMDY0NCwgZ3Bpb19jdGwsIHdkZXYsIGksXG5kcml2ZXJzL3BsYXRmb3JtL3g4Ni9kZWxsL2FsaWVud2FyZS13bWktd21heC5jLTE1MTctXHRcdFx0XHRcdCAgICBcdTAwMjZhd2NjX2dwaW9fcGluX2ZvcHMpO1xuLS1cbmRyaXZlcnMvc2NzaS9scGZjL2xwZmNfZGVidWdmcy5jPTYwNDI9bHBmY19kZWJ1Z2ZzX2luaXRpYWxpemUoc3RydWN0IGxwZmNfdnBvcnQgKnZwb3J0KVxuLS1cbmRyaXZlcnMvc2NzaS9scGZjL2xwZmNfZGVidWdmcy5jLTYxMjAtXHRcdC8qIFNldHVwIERJRiBFcnJvciBJbmplY3Rpb25zICovXG5kcml2ZXJzL3Njc2kvbHBmYy9scGZjX2RlYnVnZnMuYzo2MTIxOlx0XHRkZWJ1Z2ZzX2NyZWF0ZV9maWxlX2F1eF9udW0oXCYjMzQ7SW5qRXJyTEJBXCYjMzQ7LCAwNjQ0LFxuZHJpdmVycy9zY3NpL2xwZmMvbHBmY19kZWJ1Z2ZzLmMtNjEyMi1cdFx0XHRcdFx0ICAgIHBoYmEtXHUwMDNlaGJhX2RlYnVnZnNfcm9vdCwgcGhiYSxcbi0tXG5kcml2ZXJzL3Njc2kvbHBmYy9scGZjX2RlYnVnZnMuYy02MTI2LVxuZHJpdmVycy9zY3NpL2xwZmMvbHBmY19kZWJ1Z2ZzLmM6NjEyNzpcdFx0ZGVidWdmc19jcmVhdGVfZmlsZV9hdXhfbnVtKFwmIzM0O0luakVyck5Qb3J0SURcJiMzNDssIDA2NDQsXG5kcml2ZXJzL3Njc2kvbHBmYy9scGZjX2RlYnVnZnMuYy02MTI4LVx0XHRcdFx0XHQgICAgcGhiYS1cdTAwM2VoYmFfZGVidWdmc19yb290LCBwaGJhLFxuLS1cbmRyaXZlcnMvc2NzaS9scGZjL2xwZmNfZGVidWdmcy5jLTYxMzEtXG5kcml2ZXJzL3Njc2kvbHBmYy9scGZjX2RlYnVnZnMuYzo2MTMyOlx0XHRkZWJ1Z2ZzX2NyZWF0ZV9maWxlX2F1eF9udW0oXCYjMzQ7SW5qRXJyV1dQTlwmIzM0OywgMDY0NCxcbmRyaXZlcnMvc2NzaS9scGZjL2xwZmNfZGVidWdmcy5jLTYxMzMtXHRcdFx0XHRcdCAgICBwaGJhLVx1MDAzZWhiYV9kZWJ1Z2ZzX3Jvb3QsIHBoYmEsXG4tLVxuZHJpdmVycy9zY3NpL2xwZmMvbHBmY19kZWJ1Z2ZzLmMtNjEzNi1cbmRyaXZlcnMvc2NzaS9scGZjL2xwZmNfZGVidWdmcy5jOjYxMzc6XHRcdGRlYnVnZnNfY3JlYXRlX2ZpbGVfYXV4X251bShcJiMzNDt3cml0ZUd1YXJkSW5qRXJyXCYjMzQ7LCAwNjQ0LFxuZHJpdmVycy9zY3NpL2xwZmMvbHBmY19kZWJ1Z2ZzLmMtNjEzOC1cdFx0XHRcdFx0ICAgIHBoYmEtXHUwMDNlaGJhX2RlYnVnZnNfcm9vdCwgcGhiYSxcbi0tXG5kcml2ZXJzL3Njc2kvbHBmYy9scGZjX2RlYnVnZnMuYy02MTQxLVxuZHJpdmVycy9zY3NpL2xwZmMvbHBmY19kZWJ1Z2ZzLmM6NjE0MjpcdFx0ZGVidWdmc19jcmVhdGVfZmlsZV9hdXhfbnVtKFwmIzM0O3dyaXRlQXBwSW5qRXJyXCYjMzQ7LCAwNjQ0LFxuZHJpdmVycy9zY3NpL2xwZmMvbHBmY19kZWJ1Z2ZzLmMtNjE0My1cdFx0XHRcdFx0ICAgIHBoYmEtXHUwMDNlaGJhX2RlYnVnZnNfcm9vdCwgcGhiYSxcbi0tXG5kcml2ZXJzL3Njc2kvbHBmYy9scGZjX2RlYnVnZnMuYy02MTQ1LVxuZHJpdmVycy9zY3NpL2xwZmMvbHBmY19kZWJ1Z2ZzLmM6NjE0NjpcdFx0ZGVidWdmc19jcmVhdGVfZmlsZV9hdXhfbnVtKFwmIzM0O3dyaXRlUmVmSW5qRXJyXCYjMzQ7LCAwNjQ0LFxuZHJpdmVycy9zY3NpL2xwZmMvbHBmY19kZWJ1Z2ZzLmMtNjE0Ny1cdFx0XHRcdFx0ICAgIHBoYmEtXHUwMDNlaGJhX2RlYnVnZnNfcm9vdCwgcGhiYSxcbi0tXG5kcml2ZXJzL3Njc2kvbHBmYy9scGZjX2RlYnVnZnMuYy02MTQ5LVxuZHJpdmVycy9zY3NpL2xwZmMvbHBmY19kZWJ1Z2ZzLmM6NjE1MDpcdFx0ZGVidWdmc19jcmVhdGVfZmlsZV9hdXhfbnVtKFwmIzM0O3JlYWRHdWFyZEluakVyclwmIzM0OywgMDY0NCxcbmRyaXZlcnMvc2NzaS9scGZjL2xwZmNfZGVidWdmcy5jLTYxNTEtXHRcdFx0XHRcdCAgICBwaGJhLVx1MDAzZWhiYV9kZWJ1Z2ZzX3Jvb3QsIHBoYmEsXG4tLVxuZHJpdmVycy9zY3NpL2xwZmMvbHBmY19kZWJ1Z2ZzLmMtNjE1NC1cbmRyaXZlcnMvc2NzaS9scGZjL2xwZmNfZGVidWdmcy5jOjYxNTU6XHRcdGRlYnVnZnNfY3JlYXRlX2ZpbGVfYXV4X251bShcJiMzNDtyZWFkQXBwSW5qRXJyXCYjMzQ7LCAwNjQ0LFxuZHJpdmVycy9zY3NpL2xwZmMvbHBmY19kZWJ1Z2ZzLmMtNjE1Ni1cdFx0XHRcdFx0ICAgIHBoYmEtXHUwMDNlaGJhX2RlYnVnZnNfcm9vdCwgcGhiYSxcbi0tXG5kcml2ZXJzL3Njc2kvbHBmYy9scGZjX2RlYnVnZnMuYy02MTU4LVxuZHJpdmVycy9zY3NpL2xwZmMvbHBmY19kZWJ1Z2ZzLmM6NjE1OTpcdFx0ZGVidWdmc19jcmVhdGVfZmlsZV9hdXhfbnVtKFwmIzM0O3JlYWRSZWZJbmpFcnJcJiMzNDssIDA2NDQsXG5kcml2ZXJzL3Njc2kvbHBmYy9scGZjX2RlYnVnZnMuYy02MTYwLVx0XHRcdFx0XHQgICAgcGhiYS1cdTAwM2VoYmFfZGVidWdmc19yb290LCBwaGJhLFxuLS1cbmZzL29yYW5nZWZzL29yYW5nZWZzLWRlYnVnZnMuYz0yMzg9c3RhdGljIHZvaWQgb3JhbmdlZnNfa2VybmVsX2RlYnVnX2luaXQodm9pZClcbi0tXG5mcy9vcmFuZ2Vmcy9vcmFuZ2Vmcy1kZWJ1Z2ZzLmMtMjUxLVxuZnMvb3JhbmdlZnMvb3JhbmdlZnMtZGVidWdmcy5jOjI1MjpcdGRlYnVnZnNfY3JlYXRlX2ZpbGVfYXV4X251bShPUkFOR0VGU19LTU9EX0RFQlVHX0ZJTEUsIDA0NDQsIGRlYnVnX2Rpciwga19idWZmZXIsXG5mcy9vcmFuZ2Vmcy9vcmFuZ2Vmcy1kZWJ1Z2ZzLmMtMjUzLVx0XHRcdCAgICAwLCBcdTAwMjZrZXJuZWxfZGVidWdfZm9wcyk7XG4tLVxuZnMvb3JhbmdlZnMvb3JhbmdlZnMtZGVidWdmcy5jPTMzNz1zdGF0aWMgdm9pZCBvcmFuZ2Vmc19jbGllbnRfZGVidWdfaW5pdCh2b2lkKVxuLS1cbmZzL29yYW5nZWZzL29yYW5nZWZzLWRlYnVnZnMuYy0zNTAtXG5mcy9vcmFuZ2Vmcy9vcmFuZ2Vmcy1kZWJ1Z2ZzLmM6MzUxOlx0Y2xpZW50X2RlYnVnX2RlbnRyeSA9IGRlYnVnZnNfY3JlYXRlX2ZpbGVfYXV4X251bShcbmZzL29yYW5nZWZzL29yYW5nZWZzLWRlYnVnZnMuYy0zNTItXHRcdFx0XHRcdCAgT1JBTkdFRlNfQ0xJRU5UX0RFQlVHX0ZJTEUsXG4tLVxuaW5jbHVkZS9saW51eC9kZWJ1Z2ZzLmg9NDYxPXN0YXRpYyBpbmxpbmUgc3NpemVfdCBkZWJ1Z2ZzX3JlYWRfZmlsZV9zdHIoc3RydWN0IGZpbGUgKmZpbGUsXG4tLVxuaW5jbHVkZS9saW51eC9kZWJ1Z2ZzLmgtNDY5LVxuaW5jbHVkZS9saW51eC9kZWJ1Z2ZzLmg6NDcwOiNkZWZpbmUgZGVidWdmc19jcmVhdGVfZmlsZV9hdXhfbnVtKG5hbWUsIG1vZGUsIHBhcmVudCwgZGF0YSwgbiwgZm9wcykgXFxcbmluY2x1ZGUvbGludXgvZGVidWdmcy5oLTQ3MS1cdGRlYnVnZnNfY3JlYXRlX2ZpbGVfYXV4KG5hbWUsIG1vZGUsIHBhcmVudCwgZGF0YSwgXFxcbi0tXG5tbS9zbHViLmM9MTAwNzU9c3RhdGljIHZvaWQgZGVidWdmc19zbGFiX2FkZChzdHJ1Y3Qga21lbV9jYWNoZSAqcylcbi0tXG5tbS9zbHViLmMtMTAwODMtXG5tbS9zbHViLmM6MTAwODQ6XHRkZWJ1Z2ZzX2NyZWF0ZV9maWxlX2F1eF9udW0oXCYjMzQ7YWxsb2NfdHJhY2VzXCYjMzQ7LCAwNDAwLCBzbGFiX2NhY2hlX2Rpciwgcyxcbm1tL3NsdWIuYy0xMDA4NS1cdFx0XHRcdFx0VFJBQ0tfQUxMT0MsIFx1MDAyNnNsYWJfZGVidWdmc19mb3BzKTtcbm1tL3NsdWIuYy0xMDA4Ni1cbm1tL3NsdWIuYzoxMDA4NzpcdGRlYnVnZnNfY3JlYXRlX2ZpbGVfYXV4X251bShcJiMzNDtmcmVlX3RyYWNlc1wmIzM0OywgMDQwMCwgc2xhYl9jYWNoZV9kaXIsIHMsXG5tbS9zbHViLmMtMTAwODgtXHRcdFx0XHRcdFRSQUNLX0ZSRUUsIFx1MDAyNnNsYWJfZGVidWdmc19mb3BzKTtcbi0tXG5tbS92bXNjYW4uYz02MDkzPXN0YXRpYyBpbnQgX19pbml0IGluaXRfbHJ1X2dlbih2b2lkKVxuLS1cbm1tL3Ztc2Nhbi5jLTYxMDAtXG5tbS92bXNjYW4uYzo2MTAxOlx0ZGVidWdmc19jcmVhdGVfZmlsZV9hdXhfbnVtKFwmIzM0O2xydV9nZW5cJiMzNDssIDA2NDQsIE5VTEwsIE5VTEwsIGZhbHNlLFxubW0vdm1zY2FuLmMtNjEwMi1cdFx0XHRcdCAgICBcdTAwMjZscnVfZ2VuX3J3X2ZvcHMpO1xubW0vdm1zY2FuLmM6NjEwMzpcdGRlYnVnZnNfY3JlYXRlX2ZpbGVfYXV4X251bShcJiMzNDtscnVfZ2VuX2Z1bGxcJiMzNDssIDA0NDQsIE5VTEwsIE5VTEwsIHRydWUsXG5tbS92bXNjYW4uYy02MTA0LVx0XHRcdFx0ICAgIFx1MDAyNmxydV9nZW5fcm9fZm9wcyk7XG4tLVxuc291bmQvc29jL3NvZi9zb2YtY2xpZW50LWlwYy1mbG9vZC10ZXN0LmM9Mjg0PXN0YXRpYyBpbnQgc29mX2lwY19mbG9vZF9wcm9iZShzdHJ1Y3QgYXV4aWxpYXJ5X2RldmljZSAqYXV4ZGV2LFxuLS1cbnNvdW5kL3NvYy9zb2Yvc29mLWNsaWVudC1pcGMtZmxvb2QtdGVzdC5jLTMwNi1cdFx0LyogY3JlYXRlIHJlYWQtd3JpdGUgaXBjX2Zsb29kX2NvdW50IGRlYnVnZnMgZW50cnkgKi9cbnNvdW5kL3NvYy9zb2Yvc29mLWNsaWVudC1pcGMtZmxvb2QtdGVzdC5jOjMwNzpcdFx0ZGVidWdmc19jcmVhdGVfZmlsZV9hdXhfbnVtKERFQlVHRlNfSVBDX0ZMT09EX0NPVU5ULCAwNjQ0LFxuc291bmQvc29jL3NvZi9zb2YtY2xpZW50LWlwYy1mbG9vZC10ZXN0LmMtMzA4LVx0XHRcdFx0ICAgIHByaXYtXHUwMDNlZGZzX3Jvb3QsIGNkZXYsIDAsIFx1MDAyNnNvZl9pcGNfZmxvb2RfZm9wcyk7XG4tLVxuc291bmQvc29jL3NvZi9zb2YtY2xpZW50LWlwYy1mbG9vZC10ZXN0LmMtMzEwLVx0XHQvKiBjcmVhdGUgcmVhZC13cml0ZSBpcGNfZmxvb2RfZHVyYXRpb25fbXMgZGVidWdmcyBlbnRyeSAqL1xuc291bmQvc29jL3NvZi9zb2YtY2xpZW50LWlwYy1mbG9vZC10ZXN0LmM6MzExOlx0XHRkZWJ1Z2ZzX2NyZWF0ZV9maWxlX2F1eF9udW0oREVCVUdGU19JUENfRkxPT0RfRFVSQVRJT04sIDA2NDQsXG5zb3VuZC9zb2Mvc29mL3NvZi1jbGllbnQtaXBjLWZsb29kLXRlc3QuYy0zMTItXHRcdFx0XHQgICAgcHJpdi1cdTAwM2VkZnNfcm9vdCwgY2RldiwgMSwgXHUwMDI2c29mX2lwY19mbG9vZF9mb3BzKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTUgMTM6MDQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjFtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTUyOTYKCQkJCQkJCW91dHB1dDogMjUKCQkJCQkJCXRob3VnaHRzOiAxNDIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqSW52ZXN0aWdhdGluZyB0aGUgbHJ1X2dlbiBEZWJ1Z2ZzIEludGVyZmFjZSoqCgpPa2F5LCBzbyBJJiMzOTttIGRpZ2dpbmcgaW50byB0aGUgbXVsdGlnZW4gTFJVIGltcGxlbWVudGF0aW9uLCBhbmQgdGhlIGZpcnN0IHRoaW5nIHRoYXQgY2F0Y2hlcyBteSBleWUgaXMgdGhpcyBgbW0vdm1zY2FuLmNgIGZpbGUuIFNwZWNpZmljYWxseSwgSSYjMzk7bSBsb29raW5nIGF0IGhvdyBgZGVidWdmc19jcmVhdGVfZmlsZV9hdXhfbnVtYCBpcyB1c2VkIHRvIGNyZWF0ZSB0aGUgYC9zeXMva2VybmVsL2RlYnVnL2xydV9nZW5gIGVudHJ5LiBJbnRlcmVzdGluZy4uLiB0aGUgZmlsZSBtb2RlIGlzIHNldCB0byAwNjQ0LiBUaGF0JiMzOTtzIHByZXR0eSBzdGFuZGFyZCwgcmVhZCBmb3IgZXZlcnlvbmUsIHdyaXRlIGZvciByb290LCBtYWtlcyBzZW5zZS4gQnV0IGl0IGFsc28gbWVhbnMgYW55b25lICpjb3VsZCogcG90ZW50aWFsbHkgdHJ5IHRvIHdyaXRlIHRvIHRoaXMsIHNvIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQgd3JpdGVzIHRvIHRoaXMgZmlsZSAqZG8qLgoKTGV0JiMzOTtzIHNlZeKApiB3cml0aW5nIHRvIHRoYXQgZGVidWdmcyBlbnRyeSBjYWxscyBgbHJ1X2dlbl9zZXFfd3JpdGUoKWAuIEFscmlnaHQsIG5vdyBJIG5lZWQgdG8gZmlndXJlIG91dCB3aGF0IHRoYXQgZG9lcywgYW5kIHRoZSBiZXN0IHBsYWNlIHRvIHN0YXJ0IGlzIHRoZSBkb2N1bWVudGF0aW9uLiBMZXQgbWUgY2hlY2sgdGhlIGBEb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL21tL211bHRpZ2VuX2xydS5yc3RgIGZpbGUuIEkmIzM5O2xsIGVpdGhlciBncmVwIGZvciBpdHMgY29udGVudHMgb3IganVzdCByZWFkIGl0LiBVbmRlcnN0YW5kaW5nIHdoYXQgdGhpcyBlbnRyeSBjb250cm9scyBpcyBrZXkgdG8gdW5kZXJzdGFuZGluZyB0aGUgbXVsdGlnZW4gTFJVIGluIGdlbmVyYWwuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE1IDEzOjA1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5FcnJvcjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm5vIG1hdGNoZXM8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7cnVuX2FnaW5nJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7RG9jdW1lbnRhdGlvbi8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7ZXJyb3ImIzM0OzogJiMzNDtubyBtYXRjaGVzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNSAxMzowNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNTcyMwoJCQkJCQkJb3V0cHV0OiAzOQoJCQkJCQkJdGhvdWdodHM6IDI5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBteSBvd24gbWVudGFsIHByb2Nlc3MsIGdpdmVuIG15IGV4cGVydGlzZToKCioqQ2hlY2tpbmcgTXVsdGlnZW4gTFJVIERvY3VtZW50YXRpb24qKgoKUmlnaHQsIHRpbWUgdG8gZGlnIGludG8gdGhpcyBtdWx0aWdlbiBMUlUgYnVzaW5lc3MuIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byBnbyBzdHJhaWdodCB0byB0aGUgc291cmNlIOKAkyB0aGUgZG9jdW1lbnRhdGlvbi4gU3BlY2lmaWNhbGx5LCBJJiMzOTttIHRoaW5raW5nIEkmIzM5O2xsIHN0YXJ0IGJ5IGdyZXBwaW5nIHRoZSBkb2N1bWVudGF0aW9uIGZvciBgbHJ1X2dlbmAgd2l0aGluIGBEb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL21tL211bHRpZ2VuX2xydS5yc3RgLiBUaGlzIGlzIHRoZSBtb3N0IGxvZ2ljYWwgZmlyc3Qgc3RlcC4gSSBzdXNwZWN0IHRoYXQgdmFyaWFibGUgaXMga2V5IHRvIHRoZSBpbXBsZW1lbnRhdGlvbiBkZXRhaWxzIEkmIzM5O20gYWZ0ZXIsIGFuZCB0aGF0IGRvY3VtZW50IHNob3VsZCBiZSB0aGUgcGxhY2Ugd2hlcmUgdGhlIGNvbmNlcHQgaXMgdGhvcm91Z2hseSBkaXNjdXNzZWQuIEdyZXBwaW5nIGlzIGp1c3QgdGhlIGZhc3Rlc3Qgd2F5IHRvIGdldCB0byB0aGF0IGluZm9ybWF0aW9uIHdpdGhvdXQgcmVhZGluZyB0aGUgd2hvbGUgZG9jdW1lbnQuIFRoaXMgd2lsbCBob3BlZnVsbHkgZ2l2ZSBtZSBxdWljayBoaXRzIG9uIHdoZXJlIHRvIGZvY3VzIG15IGF0dGVudGlvbiBhbmQgc2F2ZSBtZSBzb21lIHRpbWUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE1IDEzOjA1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2xydV9nZW4mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtEb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL21tL211bHRpZ2VuX2xydS5yc3QmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7RG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9tbS9tdWx0aWdlbl9scnUucnN0PTIwPVJ1bnRpbWUgb3B0aW9uc1xuRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9tbS9tdWx0aWdlbl9scnUucnN0LTIxLT09PT09PT09PT09PT09PVxuRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9tbS9tdWx0aWdlbl9scnUucnN0OjIyOmBgL3N5cy9rZXJuZWwvbW0vbHJ1X2dlbi9gYCBjb250YWlucyBzdGFibGUgQUJJcyBkZXNjcmliZWQgaW4gdGhlXG5Eb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL21tL211bHRpZ2VuX2xydS5yc3QtMjMtZm9sbG93aW5nIHN1YnNlY3Rpb25zLlxuLS1cbkRvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUvbW0vbXVsdGlnZW5fbHJ1LnJzdD01ND1FLmcuLFxuLS1cbkRvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUvbW0vbXVsdGlnZW5fbHJ1LnJzdC01Ni1cbkRvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUvbW0vbXVsdGlnZW5fbHJ1LnJzdDo1NzogICAgZWNobyB5IFx1MDAzZS9zeXMva2VybmVsL21tL2xydV9nZW4vZW5hYmxlZFxuRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9tbS9tdWx0aWdlbl9scnUucnN0OjU4OiAgICBjYXQgL3N5cy9rZXJuZWwvbW0vbHJ1X2dlbi9lbmFibGVkXG5Eb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL21tL211bHRpZ2VuX2xydS5yc3QtNTktICAgIDB4MDAwN1xuRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9tbS9tdWx0aWdlbl9scnUucnN0OjYwOiAgICBlY2hvIDUgXHUwMDNlL3N5cy9rZXJuZWwvbW0vbHJ1X2dlbi9lbmFibGVkXG5Eb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL21tL211bHRpZ2VuX2xydS5yc3Q6NjE6ICAgIGNhdCAvc3lzL2tlcm5lbC9tbS9scnVfZ2VuL2VuYWJsZWRcbkRvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUvbW0vbXVsdGlnZW5fbHJ1LnJzdC02Mi0gICAgMHgwMDA1XG4tLVxuRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9tbS9tdWx0aWdlbl9scnUucnN0PTg0PUV4cGVyaW1lbnRhbCBmZWF0dXJlc1xuRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9tbS9tdWx0aWdlbl9scnUucnN0LTg1LT09PT09PT09PT09PT09PT09PT09PVxuRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9tbS9tdWx0aWdlbl9scnUucnN0Ojg2OmBgL3N5cy9rZXJuZWwvZGVidWcvbHJ1X2dlbmBgIGFjY2VwdHMgY29tbWFuZHMgZGVzY3JpYmVkIGluIHRoZVxuRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9tbS9tdWx0aWdlbl9scnUucnN0LTg3LWZvbGxvd2luZyBzdWJzZWN0aW9ucy4gTXVsdGlwbGUgY29tbWFuZCBsaW5lcyBhcmUgc3VwcG9ydGVkLCBzbyBkb2VzXG5Eb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL21tL211bHRpZ2VuX2xydS5yc3Q9ODg9Y29uY2F0ZW5hdGlvbiB3aXRoIGRlbGltaXRlcnMgYGAsYGAgYW5kIGBgO2BgLlxuRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9tbS9tdWx0aWdlbl9scnUucnN0LTg5LVxuRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9tbS9tdWx0aWdlbl9scnUucnN0OjkwOmBgL3N5cy9rZXJuZWwvZGVidWcvbHJ1X2dlbl9mdWxsYGAgcHJvdmlkZXMgYWRkaXRpb25hbCBzdGF0cyBmb3JcbkRvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUvbW0vbXVsdGlnZW5fbHJ1LnJzdC05MS1kZWJ1Z2dpbmcuIGBgQ09ORklHX0xSVV9HRU5fU1RBVFM9eWBgIGtlZXBzIGhpc3RvcmljYWwgc3RhdHMgZnJvbVxuLS1cbkRvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUvbW0vbXVsdGlnZW5fbHJ1LnJzdD0xMDM9c2NoZWR1bGVyIG5lZWRzIHRvIGVzdGltYXRlIHRoZSB3b3JraW5nIHNldHMgb2YgdGhlIGV4aXN0aW5nIGpvYnMuXG5Eb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL21tL211bHRpZ2VuX2xydS5yc3QtMTA0LVxuRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9tbS9tdWx0aWdlbl9scnUucnN0OjEwNTpXaGVuIGl0IGlzIHJlYWQsIGBgbHJ1X2dlbmBgIHJldHVybnMgYSBoaXN0b2dyYW0gb2YgbnVtYmVycyBvZiBwYWdlc1xuRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9tbS9tdWx0aWdlbl9scnUucnN0LTEwNi1hY2Nlc3NlZCBvdmVyIGRpZmZlcmVudCB0aW1lIGludGVydmFscyBmb3IgZWFjaCBtZW1jZyBhbmQgbm9kZS5cbi0tXG5Eb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL21tL211bHRpZ2VuX2xydS5yc3Q9MTIwPXRoZSBmb3JtZXIgaXMgdGhlIGxhcmdlc3QgYW5kIHRoYXQgb2YgdGhlIGxhdHRlciBpcyB0aGUgc21hbGxlc3QuXG5Eb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL21tL211bHRpZ2VuX2xydS5yc3QtMTIxLVxuRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9tbS9tdWx0aWdlbl9scnUucnN0OjEyMjpVc2VycyBjYW4gd3JpdGUgdGhlIGZvbGxvd2luZyBjb21tYW5kIHRvIGBgbHJ1X2dlbmBgIHRvIGNyZWF0ZSBhIG5ld1xuRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9tbS9tdWx0aWdlbl9scnUucnN0LTEyMy1nZW5lcmF0aW9uIGBgbWF4X2dlbl9uciYjNDM7MWBgOlxuLS1cbkRvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUvbW0vbXVsdGlnZW5fbHJ1LnJzdD0xNDQ9dGhpcyBuZXcgam9iLlxuRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9tbS9tdWx0aWdlbl9scnUucnN0LTE0NS1cbkRvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUvbW0vbXVsdGlnZW5fbHJ1LnJzdDoxNDY6VXNlcnMgY2FuIHdyaXRlIHRoZSBmb2xsb3dpbmcgY29tbWFuZCB0byBgYGxydV9nZW5gYCB0byBldmljdFxuRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9tbS9tdWx0aWdlbl9scnUucnN0LTE0Ny1nZW5lcmF0aW9ucyBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gYGBtaW5fZ2VuX25yYGAuXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE1IDEzOjA1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE2OTUxCgkJCQkJCQlvdXRwdXQ6IDM1CgkJCQkJCQl0aG91Z2h0czogNDU4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgTXVsdGlnZW5lcmF0aW9uYWwgTFJVIFBhdGNoKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIGRvY3VtZW50YXRpb24sIGBEb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL21tL211bHRpZ2VuX2xydS5yc3RgLCBhbmQgaXQgbWVudGlvbnMgYSBjb21tYW5kIHRvIGNyZWF0ZSBhIG5ldyBnZW5lcmF0aW9uLCBzcGVjaWZpY2FsbHkgdGhlIGBscnVfZ2VuYCBjb21tYW5kLiBJdCBzZWVtcyBJIGNhbiBpbmNyZW1lbnQgdGhlIGdlbmVyYXRpb24gY291bnRlciB3aXRoIGAmIzQzOyAmbHQ7bWVtY2dfaWQmZ3Q7ICZsdDtub2RlX2lkJmd0OyAmbHQ7bWF4X2dlbl9uciZndDsgW3N3YXBwaW5lc3NdYC4gSW50ZXJlc3RpbmcuIE5vdywgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzIHBhdGNoIGFuZCBzZWUgd2hhdCYjMzk7cyBiZWluZyBjaGFuZ2VkLgoKQWgsIHRoZSBgbW0vdm1zY2FuLmNgIGZpbGUuIEkgc2VlIHRoZSBkaWZmLiBUaGV5JiMzOTt2ZSBhZGRlZCBhIGNoZWNrIHdpdGhpbiB0aGUgYHJ1bl9hZ2luZ2AgZnVuY3Rpb246IGBpZiAoc2VxICZsdDsgbWF4X3NlcSkgcmV0dXJuIDA7YC4gUmlnaHQsIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoeSB0aGlzIGFkZGl0aW9uLiBMZXQmIzM5O3MgbG9vayBhdCB0aGUgb3JpZ2luYWwgY29kZS4KCkJlZm9yZSB0aGUgcGF0Y2gsIGluIGBydW5fYWdpbmdgLCBpZiBgc2VxYCB3YXMgKm5vdCogZ3JlYXRlciB0aGFuIGBtYXhfc2VxYCBpdCB3b3VsZCBwcm9jZWVkIHRvIGNhbGwgYHRyeV90b19pbmNfbWF4X3NlcWAuIEJ1dCB3aGF0JiMzOTtzIGhhcHBlbmluZyBpZiBgc2VxYCBpcyAqbGVzcyogdGhhbiBgbWF4X3NlcWA/IEJlZm9yZSB0aGUgcGF0Y2gsIGl0IHdvdWxkIHNpbXBseSBleGVjdXRlIGB0cnlfdG9faW5jX21heF9zZXFgLiBOb3cgdGhlcmUmIzM5O3MgdGhpcyBleHRyYSBlYXJseS1vdXQuIFRoaXMgaXMgYSBwb3RlbnRpYWwgYnVnISBUaGlzIG1lYW5zIHRoYXQgaWYgYHNlcWAgaXMgbGVzcyB0aGFuIGBtYXhfc2VxYCwgdGhlIGZ1bmN0aW9uIHdpbGwgcmV0dXJuIGAwYCwgYnlwYXNzaW5nIHRoZSBwb3RlbnRpYWxseSBwcm9ibGVtYXRpYyBjYWxsIHRvIGB0cnlfdG9faW5jX21heF9zZXFgLiBJIG5lZWQgdG8gZmlndXJlIG91dCB3aGF0IGB0cnlfdG9faW5jX21heF9zZXFgIGRvZXMgd2l0aCBgbWF4X3NlcWAgdG8gZnVsbHkgdW5kZXJzdGFuZCB0aGlzIGxvZ2ljLiBJIG5lZWQgdG8gZ28gaW52ZXN0aWdhdGUgdGhhdCBmdW5jdGlvbiBub3chCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE1IDEzOjA1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3RyeV90b19pbmNfbWF4X3NlcSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tL3Ztc2Nhbi5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL3Ztc2Nhbi5jPTQxNDM9c3RhdGljIGJvb2wgaW5jX21heF9zZXEoc3RydWN0IGxydXZlYyAqbHJ1dmVjLCB1bnNpZ25lZCBsb25nIHNlcSwgaW50IHN3YXBwaW5lc3MpXG4tLVxubW0vdm1zY2FuLmMtNDIwNy1cbm1tL3Ztc2Nhbi5jOjQyMDg6c3RhdGljIGJvb2wgdHJ5X3RvX2luY19tYXhfc2VxKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgdW5zaWduZWQgbG9uZyBzZXEsXG5tbS92bXNjYW4uYy00MjA5LVx0XHRcdCAgICAgICBpbnQgc3dhcHBpbmVzcywgYm9vbCBmb3JjZV9zY2FuKVxuLS1cbm1tL3Ztc2Nhbi5jPTQ2MjQ9Ym9vbCByZWNoZWNrX2xydV9nZW5fbWF4X21lbWNnKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgaW50IG5pZClcbi0tXG5tbS92bXNjYW4uYy00NjM2LVxubW0vdm1zY2FuLmM6NDYzNzpzdGF0aWMgdm9pZCB0cnlfdG9faW5jX21heF9zZXFfbm93YWxrKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZyxcbm1tL3Ztc2Nhbi5jLTQ2MzgtXHRcdFx0XHQgICAgICBzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMpXG4tLVxubW0vdm1zY2FuLmM9NDY3MT12b2lkIG1heF9scnVfZ2VuX21lbWNnKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgaW50IG5pZClcbi0tXG5tbS92bXNjYW4uYy00Njc3LVx0XHR3aGlsZSAoZ2V0X25yX2dlbnMobHJ1dmVjLCB0eXBlKSBcdTAwM2MgTUFYX05SX0dFTlMpIHtcbm1tL3Ztc2Nhbi5jOjQ2Nzg6XHRcdFx0dHJ5X3RvX2luY19tYXhfc2VxX25vd2FsayhtZW1jZywgbHJ1dmVjKTtcbm1tL3Ztc2Nhbi5jLTQ2NzktXHRcdFx0Y29uZF9yZXNjaGVkKCk7XG4tLVxubW0vdm1zY2FuLmM9NTE2MD1zdGF0aWMgYm9vbCBzaG91bGRfYWJvcnRfc2NhbihzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjKVxuLS1cbm1tL3Ztc2Nhbi5jLTUxOTEtICogRm9yIGZ1dHVyZSBvcHRpbWl6YXRpb25zOlxubW0vdm1zY2FuLmM6NTE5MjogKiAxLiBEZWZlciB0cnlfdG9faW5jX21heF9zZXEoKSB0byB3b3JrcXVldWVzIHRvIHJlZHVjZSBsYXRlbmN5IGZvciBtZW1jZ1xubW0vdm1zY2FuLmMtNTE5My0gKiAgICByZWNsYWltLlxuLS1cbm1tL3Ztc2Nhbi5jPTUxOTU9c3RhdGljIGJvb2wgdHJ5X3RvX3Nocmlua19scnV2ZWMoc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYylcbi0tXG5tbS92bXNjYW4uYy01MjEyLVx0XHRpZiAoc2hvdWxkX3J1bl9hZ2luZyhscnV2ZWMsIG1heF9zZXEsIHNjLCBzd2FwcGluZXNzKSkge1xubW0vdm1zY2FuLmM6NTIxMzpcdFx0XHRpZiAodHJ5X3RvX2luY19tYXhfc2VxKGxydXZlYywgbWF4X3NlcSwgc3dhcHBpbmVzcywgZmFsc2UpKVxubW0vdm1zY2FuLmMtNTIxNC1cdFx0XHRcdG5lZWRfcm90YXRlID0gdHJ1ZTtcbi0tXG5tbS92bXNjYW4uYz01ODI1PXN0YXRpYyBpbnQgcnVuX2FnaW5nKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgdW5zaWduZWQgbG9uZyBzZXEsXG4tLVxubW0vdm1zY2FuLmMtNTgzNS1cbm1tL3Ztc2Nhbi5jOjU4MzY6XHRyZXR1cm4gdHJ5X3RvX2luY19tYXhfc2VxKGxydXZlYywgbWF4X3NlcSwgc3dhcHBpbmVzcywgZm9yY2Vfc2NhbikgPyAwIDogLUVFWElTVDtcbm1tL3Ztc2Nhbi5jLTU4MzctfVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNSAxMzowNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxODU0NwoJCQkJCQkJb3V0cHV0OiAzNQoJCQkJCQkJdGhvdWdodHM6IDMxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHN1bW1hcnksIGFzIHRob3VnaCBJJiMzOTttIHRoaW5raW5nIHRocm91Z2ggdGhpczoKCioqQW5hbHl6aW5nIGB0cnlfdG9faW5jX21heF9zZXFgIGluIGBtbS92bXNjYW4uY2AqKgoKT2theSwgc28gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCYjMzk7cyBoYXBwZW5pbmcgd2l0aCBgdHJ5X3RvX2luY19tYXhfc2VxYC4gUmlnaHQsIGxpbmUgNDIwOCBpbiBgbW0vdm1zY2FuLmNgLiBMZXQmIzM5O3MganVtcCBvdmVyIHRoZXJlIGFuZCB0YWtlIGEgbG9vay4gSSYjMzk7bSBnb2luZyB0byB3YW50IHRvIHVuZGVyc3RhbmQgaXRzIHJvbGUgd2l0aGluIHRoZSBsYXJnZXIgZnJhbWV3b3JrIG9mIG1lbW9yeSBtYW5hZ2VtZW50IGFuZCB0aGUgdmlydHVhbCBtZW1vcnkgc2Nhbm5pbmcgcHJvY2Vzcy4gU3BlY2lmaWNhbGx5LCBJJiMzOTtsbCBuZWVkIHRvIGdyYXNwIGhvdyB0aGlzIGZ1bmN0aW9uIGNvbnRyaWJ1dGVzIHRvIGluY3JlYXNpbmcgdGhlIG1heGltdW0gc2VxdWVuY2UgbnVtYmVyLiBJJiMzOTtsbCBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCB0cmlnZ2VycyBpdHMgY2FsbCwgd2hhdCBpdHMgaW5wdXRzIGFyZSwgd2hhdCBpdCBkb2VzIHdpdGggdGhvc2UgaW5wdXRzLCBhbmQgd2hhdCB0aGUgdWx0aW1hdGUgcHVycG9zZSBvZiB0aGlzIHNlcXVlbmNlIGluY3JlbWVudCBpcyBpbiB0aGUgY29udGV4dCBvZiB0aGUgcGFnZSByZWNsYWltIHByb2Nlc3MuIExpa2VseSwgaXQgcGxheXMgYSByb2xlIGluIHRyYWNraW5nIG9yIG1hbmFnaW5nIHNvbWUgYXNwZWN0IG9mIG1lbW9yeSBwcmVzc3VyZSBvciBwYWdlIGFnaW5nLCBvdGhlcndpc2UsIHRoZSBmdW5jdGlvbiB3b3VsZCBiZSBwb2ludGxlc3MuIEkgc2hvdWxkIGxvb2sgZm9yIHRoZSBzdXJyb3VuZGluZyBjb2RlIGluIHRoZSBmdW5jdGlvbiB0byBwcm92aWRlIGNvbnRleHQsIGxvb2sgZm9yIGNvbW1lbnRzIGlmIHRoZXkgZXhpc3QsIGFuZCB0aGVuIGdvIGluIGZvciBhIGRlZXAgZGl2ZSB0byB3b3JrIG91dCBwcmVjaXNlbHkgd2hhdCB3ZSBhcmUgdHJ5aW5nIHRvIGFjaGlldmUgd2l0aCB0aGUgc2VxdWVuY2UgaW5jcmVtZW50LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNSAxMzowNTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O21tL3Ztc2Nhbi5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNDIwOCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA0MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDs0MjA4Olx0c3RhdGljIGJvb2wgdHJ5X3RvX2luY19tYXhfc2VxKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgdW5zaWduZWQgbG9uZyBzZXEsXG40MjA5Olx0XHRcdFx0ICAgICAgIGludCBzd2FwcGluZXNzLCBib29sIGZvcmNlX3NjYW4pXG40MjEwOlx0e1xuNDIxMTpcdFx0Ym9vbCBzdWNjZXNzO1xuNDIxMjpcdFx0c3RydWN0IGxydV9nZW5fbW1fd2FsayAqd2FsaztcbjQyMTM6XHRcdHN0cnVjdCBtbV9zdHJ1Y3QgKm1tID0gTlVMTDtcbjQyMTQ6XHRcdHN0cnVjdCBscnVfZ2VuX2ZvbGlvICpscnVnZW4gPSBcdTAwMjZscnV2ZWMtXHUwMDNlbHJ1Z2VuO1xuNDIxNTpcdFx0c3RydWN0IGxydV9nZW5fbW1fc3RhdGUgKm1tX3N0YXRlID0gZ2V0X21tX3N0YXRlKGxydXZlYyk7XG40MjE2Olx0XG40MjE3Olx0XHRWTV9XQVJOX09OX09OQ0Uoc2VxIFx1MDAzZSBSRUFEX09OQ0UobHJ1Z2VuLVx1MDAzZW1heF9zZXEpKTtcbjQyMTg6XHRcbjQyMTk6XHRcdGlmICghbW1fc3RhdGUpXG40MjIwOlx0XHRcdHJldHVybiBpbmNfbWF4X3NlcShscnV2ZWMsIHNlcSwgc3dhcHBpbmVzcyk7XG40MjIxOlx0XG40MjIyOlx0XHQvKiBzZWUgdGhlIGNvbW1lbnQgaW4gaXRlcmF0ZV9tbV9saXN0KCkgKi9cbjQyMjM6XHRcdGlmIChzZXEgXHUwMDNjPSBSRUFEX09OQ0UobW1fc3RhdGUtXHUwMDNlc2VxKSlcbjQyMjQ6XHRcdFx0cmV0dXJuIGZhbHNlO1xuNDIyNTpcdFxuNDIyNjpcdFx0LypcbjQyMjc6XHRcdCAqIElmIHRoZSBoYXJkd2FyZSBkb2VzbiYjMzk7dCBhdXRvbWF0aWNhbGx5IHNldCB0aGUgYWNjZXNzZWQgYml0LCBmYWxsYmFja1xuNDIyODpcdFx0ICogdG8gbHJ1X2dlbl9sb29rX2Fyb3VuZCgpLCB3aGljaCBvbmx5IGNsZWFycyB0aGUgYWNjZXNzZWQgYml0IGluIGFcbjQyMjk6XHRcdCAqIGhhbmRmdWwgb2YgUFRFcy4gU3ByZWFkaW5nIHRoZSB3b3JrIG91dCBvdmVyIGEgcGVyaW9kIG9mIHRpbWUgdXN1YWxseVxuNDIzMDpcdFx0ICogaXMgbGVzcyBlZmZpY2llbnQsIGJ1dCBpdCBhdm9pZHMgYnVyc3R5IHBhZ2UgZmF1bHRzLlxuNDIzMTpcdFx0ICovXG40MjMyOlx0XHRpZiAoIXNob3VsZF93YWxrX21tdSgpKSB7XG40MjMzOlx0XHRcdHN1Y2Nlc3MgPSBpdGVyYXRlX21tX2xpc3Rfbm93YWxrKGxydXZlYywgc2VxKTtcbjQyMzQ6XHRcdFx0Z290byBkb25lO1xuNDIzNTpcdFx0fVxuNDIzNjpcdFxuNDIzNzpcdFx0d2FsayA9IHNldF9tbV93YWxrKE5VTEwsIHRydWUpO1xuNDIzODpcdFx0aWYgKCF3YWxrKSB7XG40MjM5Olx0XHRcdHN1Y2Nlc3MgPSBpdGVyYXRlX21tX2xpc3Rfbm93YWxrKGxydXZlYywgc2VxKTtcbjQyNDA6XHRcdFx0Z290byBkb25lO1xuNDI0MTpcdFx0fVxuNDI0MjpcdFxuNDI0MzpcdFx0d2Fsay1cdTAwM2VscnV2ZWMgPSBscnV2ZWM7XG40MjQ0Olx0XHR3YWxrLVx1MDAzZXNlcSA9IHNlcTtcbjQyNDU6XHRcdHdhbGstXHUwMDNlc3dhcHBpbmVzcyA9IHN3YXBwaW5lc3M7XG40MjQ2Olx0XHR3YWxrLVx1MDAzZWZvcmNlX3NjYW4gPSBmb3JjZV9zY2FuO1xuNDI0NzpcdFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNSAxMzowNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxOTUwNwoJCQkJCQkJb3V0cHV0OiAzMgoJCQkJCQkJdGhvdWdodHM6IDE0OTMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHlzaXMgb2YgTXVsdGktR2VuIExSVSBQYXRjaCBpbiBNZW1vcnkgTWFuYWdlbWVudCoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdGhhdCB0aGlzIHBhdGNoIGluIGBtbS92bXNjYW4uY2AsIHJlbGF0ZWQgdG8gdGhlIE11bHRpLUdlbiBMUlUgc3Vic3lzdGVtLCBpcyBpbnRlcmVzdGluZy4gSXQgc2VlbXMgdG8gY29ycmVjdCBhIHN1YnRsZSBsb2dpYyBlcnJvciB3aXRoaW4gdGhlIGBydW5fYWdpbmdgIGZ1bmN0aW9uIGFuZCBob3cgaXQgaW50ZXJhY3RzIHdpdGggdGhlIGBzZXFgIHBhcmFtZXRlciBwcm92aWRlZCBieSB1c2Vyc3BhY2UuIFNwZWNpZmljYWxseSwgdGhlIHBhdGNoIGFkZHJlc3NlcyBhIHNjZW5hcmlvIHdoZXJlIHRoZSBrZXJuZWwgd291bGQgYXR0ZW1wdCB0byBpbmNyZW1lbnQgYG1heF9zZXFgIGV2ZW4gd2hlbiB0aGUgdGFyZ2V0IGBzZXFgIHdhcyBhbHJlYWR5IGxlc3MgdGhhbiB0aGUgY3VycmVudCBgbWF4X3NlcWAuIFRoaXMgaW5kaWNhdGVkIHRoYXQgdXNlcnNwYWNlIHdhcyB0cnlpbmcgdG8gYWdlIHRvIGEgcG9pbnQgKmJlaGluZCogd2hlcmUgdGhlIGFnaW5nIGhhZCBhbHJlYWR5IG9jY3VycmVkLCB3aGljaCBpcyBpbGxvZ2ljYWwuIFRoZSBvcmlnaW5hbCBjb2RlJiMzOTtzIGluY3JlbWVudCBsb2dpYyBhcHBlYXJlZCBmbGF3ZWQgaW4gdGhpcyBjb25kaXRpb24uCgpMb29raW5nIGF0IHRoZSBjb2RlLCBpdCBsb29rcyBsaWtlOiBpbiBgcnVuX2FnaW5nYCwgYG1heF9zZXFgIGlzIGRlZmluZWQuIFRoZSB1c2VyIHByb3ZpZGVzIGBzZXFgLiBJZiBgc2VxICZsdDsgbWF4X3NlcWAgdGhlbiB0aGUgdXNlciBpcyBhc2tpbmcgdG8gY3JlYXRlIGdlbmVyYXRpb24gdXAgdG8gYHNlcWAsIGJ1dCBgbWF4X3NlcWAgaXMgYWxyZWFkeSBncmVhdGVyIHRoYW4gYHNlcWAhIFRoZSBwYXRjaCBub3cgcHJldmVudHMgdGhlIGlsbG9naWNhbCBpbmNyZW1lbnQgb2YgYG1heF9zZXFgIGluIHRoYXQgY2FzZSwgd2hpY2ggc2ltcGxpZmllcyB0aGluZ3MuIEluIGBydW5fZXZpY3Rpb25gLCBpZiBgc2VxICZsdDsgZXZpY3RhYmxlX21pbl9zZXFgIGl0IHJldHVybnMgMC4gSWYgYHNlcSAmZ3Q7IG1heF9zZXFgIGl0IHJldHVybnMgYC1FSU5WQUxgLiBJdCBjYWxscyBgdHJ5X3RvX2luY19tYXhfc2VxKGxydXZlYywgbWF4X3NlcSwgc3dhcHBpbmVzcywgZm9yY2Vfc2NhbilgIHdoZW4gdGhlIGxvZ2ljIGlzIGNoYW5nZWQuCgpOb3csIGFzIGFuIGV4cGVydCwgSSYjMzk7bSBldmFsdWF0aW5nIHdoZXRoZXIgdGhpcyBjaGFuZ2Ugd2FycmFudHMgZnVydGhlciBpbnZlc3RpZ2F0aW9uIG9yIGZ1enppbmcuIFRoZSBrZXkgY3JpdGVyaWEsIGJhc2VkIG9uIHRoZSBwcm92aWRlZCBpbnN0cnVjdGlvbnMsIHJldm9sdmVzIGFyb3VuZCByZWFjaGFiaWxpdHkgYW5kIHRoZSBuYXR1cmUgb2YgdGhlIG1vZGlmaWNhdGlvbnMuCgpGaXJzdCwgKipyZWFjaGFiaWxpdHkqKiBpcyBrZXkuIFRoZSBjb2RlIHJlc2lkZXMgaW4gYC9zeXMva2VybmVsL2RlYnVnL2xydV9nZW5gIGEgZGVidWdmcyBmaWxlLCB3aGljaCBtZWFucyB0aGF0IGl0IGNhbiBiZSBleGVjdXRlZCBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMuIFRoaXMgaXMgZ29vZC4gSXQmIzM5O3MgbWVtb3J5IG1hbmFnZW1lbnQgY29kZS4gQW55b25lIGNhbiBhY2Nlc3MgdGhpcy4gU28gdGhhdCBtZWFucyBpdCBjYW4gYmUgcmVhY2hlZCEKClNlY29uZCwgSSBuZWVkIHRvIGV2YWx1YXRlICp3aGVuIHRvIHJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UqLgotICAgVGhpcyBpc24mIzM5O3Qgbm9uLWtlcm5lbCBvciBub24tZXhlY3V0YWJsZSBjaGFuZ2VzLCBpdCYjMzk7cyBjb2RlIGluIGBtbS92bXNjYW4uY2AuCi0gICBUaGlzIGlzIG5vdCBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUsIGFzIGl0IGlzIG1lbW9yeSBtYW5hZ2VtZW50IGNvZGUuCi0gICBUaGlzIGlzbiYjMzk7dCBhbiB1bnJlYWNoYWJsZSBleGVjdXRpb24gcGF0aCwgYXMgaXQgY2FuIGJlIHJlYWNoZWQgdmlhIGRlYnVnZnMgYC9zeXMva2VybmVsL2RlYnVnL2xydV9nZW5gLgoKVGhpcmQsIEkgbmVlZCB0byBldmFsdWF0ZSAqd2hlbiB0byByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUqLgotICAgVGhpcyBpcyBhICoqY29yZSBzdWJzeXN0ZW0qKiBjaGFuZ2UgKG1lbW9yeSBtYW5hZ2VtZW50LCBpbiBgbW0vYCkuCi0gICBUaGlzIGNvbnN0aXR1dGVzIGEgcmVmYWN0b3Jpbmcgb2YgdGhlIGFsZ29yaXRobSBmbG93LCBzcGVjaWZpY2FsbHkgaW4gaG93IHRoZSAmIzM0O3NlcSYjMzQ7IHZhbHVlIGludGVyYWN0cyB3aXRoIGFnaW5nIG9wZXJhdGlvbnMuIFRoaXMgbWVhbnMgaXQgaXMgd29ydGggZnV6emluZyEKClRoaXMgYWxzbyBicmluZ3MgaW4gdGhlIHF1ZXN0aW9uIG9mIHN5emthbGxlci4KCkNhbiBzeXprYWxsZXIgZnV6eiBkZWJ1Z2ZzIGZpbGVzIG9yIHRoaXMgaW50ZXJmYWNlPyAqKlllcyEqKiBzeXprYWxsZXIgb3BlbnMgZmlsZXMgaW4gYC9zeXMva2VybmVsL2RlYnVnLy4uLmAgKHN5emthbGxlciBoYXMgYHN5el9vcGVuX2RldmAsIGBvcGVuYXRgLCBldGMuIGFuZCBjYW4gd3JpdGUgdG8gZGVidWdmcyBmaWxlcyBpZiByb290KS4KQW5kIGV2ZW4gaWYgc3l6a2FsbGVyIGRvZXNuJiMzOTt0IGhhdmUgYW4gZXhwbGljaXQgdGVtcGxhdGUgZm9yIGBscnVfZ2VuYCwgc3l6a2FsbGVyIGZ1enplcyBmaWxlIHN5c3RlbXMgYW5kIGRlYnVnZnMgcGF0aHMsIG9yIHN5emthbGxlciBjYW4gdGFyZ2V0IGl0LgoKRmluYWxseSwgdGhlIGNvbmZpZyBvcHRpb25zOiBgQ09ORklHX0xSVV9HRU5gIGlzIG9idmlvdXNseSByZXF1aXJlZCAoTXVsdGktR2VuIExSVSksIGFuZCBjcml0aWNhbGx5LCBgQ09ORklHX0RFQlVHX0ZTYCBpcyAqYWxzbyogYSByZXF1aXJlbWVudCBzaW5jZSB0aGUgZGVidWdmcyBmaWxlIGAvc3lzL2tlcm5lbC9kZWJ1Zy9scnVfZ2VuYCBpcyBjcmVhdGVkIGJ5IGBkZWJ1Z2ZzX2NyZWF0ZV9maWxlX2F1eF9udW1gLiBUaGlzIGlzIGluIGBpbml0X2xydV9nZW5gLgoKQW5kIGZpbmFsbHksIGBydW5fY21kYCBkb2VzICpub3QqIHJlcXVpcmUgYENPTkZJR19NRU1DR2AuIEluIGBtbS92bXNjYW4uY2AsIGxpbmUgNjA5MSBoYXMgYCNlbmRpZiAvKiBDT05GSUdfTUVNQ0cgKi9gIHdoaWNoIG1lYW5zIHRoZSBmdW5jdGlvbiBpcyAqbm90KiBpbnNpZGUgdGhlIGAjaWZkZWYgQ09ORklHX01FTUNHYCBibG9jaywgc28gaXQgaXMgaW5kZXBlbmRlbnQuCgpCYXNlZCBvbiB0aGlzIGFuYWx5c2lzLCBJJiMzOTttIGNvbmZpZGVudCB0aGF0IHRoaXMgcGF0Y2ggaW4gdGhlIE11bHRpLUdlbiBMUlUgc3Vic3lzdGVtIHdhcnJhbnRzIGZ1cnRoZXIgaW52ZXN0aWdhdGlvbiBhbmQgZnV6emluZywgZ2l2ZW4gdGhlIHBvdGVudGlhbCBmb3Igc3VidGxlIG1lbW9yeSBtYW5hZ2VtZW50IGlzc3VlcyBhbmQgaXRzIGFjY2Vzc2liaWxpdHkgdmlhIGRlYnVnZnMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE1IDEzOjA1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0OyNpZmRlZiBDT05GSUdfTUVNQ0cmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS92bXNjYW4uYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS92bXNjYW4uYz0yMjM9c3RhdGljIGludCBzY19zd2FwcGluZXNzKHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjLCBzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpXG4tLVxubW0vdm1zY2FuLmMtMjI5LVxubW0vdm1zY2FuLmM6MjMwOiNpZmRlZiBDT05GSUdfTUVNQ0dcbm1tL3Ztc2Nhbi5jLTIzMS1cbi0tXG5tbS92bXNjYW4uYz0yODI0PXN0YXRpYyBzdHJ1Y3QgbHJ1dmVjICpnZXRfbHJ1dmVjKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgaW50IG5pZClcbi0tXG5tbS92bXNjYW4uYy0yODI3LVxubW0vdm1zY2FuLmM6MjgyODojaWZkZWYgQ09ORklHX01FTUNHXG5tbS92bXNjYW4uYy0yODI5LVx0aWYgKG1lbWNnKSB7XG4tLVxubW0vdm1zY2FuLmM9Mjk4Mj1zdGF0aWMgc3RydWN0IGxydV9nZW5fbW1fbGlzdCAqZ2V0X21tX2xpc3Qoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKVxuLS1cbm1tL3Ztc2Nhbi5jLTI5ODgtXG5tbS92bXNjYW4uYzoyOTg5OiNpZmRlZiBDT05GSUdfTUVNQ0dcbm1tL3Ztc2Nhbi5jLTI5OTAtXHRpZiAobWVtY2cpXG4tLVxubW0vdm1zY2FuLmM9MzAyMj12b2lkIGxydV9nZW5fYWRkX21tKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tKVxuLS1cbm1tL3Ztc2Nhbi5jLTMwMjgtXHRWTV9XQVJOX09OX09OQ0UoIWxpc3RfZW1wdHkoXHUwMDI2bW0tXHUwMDNlbHJ1X2dlbi5saXN0KSk7XG5tbS92bXNjYW4uYzozMDI5OiNpZmRlZiBDT05GSUdfTUVNQ0dcbm1tL3Ztc2Nhbi5jLTMwMzAtXHRWTV9XQVJOX09OX09OQ0UobW0tXHUwMDNlbHJ1X2dlbi5tZW1jZyk7XG4tLVxubW0vdm1zY2FuLmM9MzA0OT12b2lkIGxydV9nZW5fZGVsX21tKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tKVxuLS1cbm1tL3Ztc2Nhbi5jLTMwNTctXG5tbS92bXNjYW4uYzozMDU4OiNpZmRlZiBDT05GSUdfTUVNQ0dcbm1tL3Ztc2Nhbi5jLTMwNTktXHRtZW1jZyA9IG1tLVx1MDAzZWxydV9nZW4ubWVtY2c7XG4tLVxubW0vdm1zY2FuLmMtMzA4MS1cbm1tL3Ztc2Nhbi5jOjMwODI6I2lmZGVmIENPTkZJR19NRU1DR1xubW0vdm1zY2FuLmMtMzA4My1cdG1lbV9jZ3JvdXBfcHV0KG1tLVx1MDAzZWxydV9nZW4ubWVtY2cpO1xuLS1cbm1tL3Ztc2Nhbi5jLTMwODctXG5tbS92bXNjYW4uYzozMDg4OiNpZmRlZiBDT05GSUdfTUVNQ0dcbm1tL3Ztc2Nhbi5jLTMwODktdm9pZCBscnVfZ2VuX21pZ3JhdGVfbW0oc3RydWN0IG1tX3N0cnVjdCAqbW0pXG4tLVxubW0vdm1zY2FuLmM9NDUxNj1zdGF0aWMgdm9pZCBscnVfZ2VuX3JvdGF0ZV9tZW1jZyhzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIGludCBvcClcbi0tXG5tbS92bXNjYW4uYy00NTU5LVxubW0vdm1zY2FuLmM6NDU2MDojaWZkZWYgQ09ORklHX01FTUNHXG5tbS92bXNjYW4uYy00NTYxLVxuLS1cbm1tL3Ztc2Nhbi5jPTU3NjI9c3RhdGljIGludCBscnVfZ2VuX3NlcV9zaG93KHN0cnVjdCBzZXFfZmlsZSAqbSwgdm9pZCAqdilcbi0tXG5tbS92bXNjYW4uYy01Nzc1LVxubW0vdm1zY2FuLmM6NTc3NjojaWZkZWYgQ09ORklHX01FTUNHXG5tbS92bXNjYW4uYy01Nzc3LVx0XHRpZiAobWVtY2cpXG4tLVxubW0vdm1zY2FuLmM9NjAzMT12b2lkIGxydV9nZW5faW5pdF9scnV2ZWMoc3RydWN0IGxydXZlYyAqbHJ1dmVjKVxuLS1cbm1tL3Ztc2Nhbi5jLTYwNTAtXG5tbS92bXNjYW4uYzo2MDUxOiNpZmRlZiBDT05GSUdfTUVNQ0dcbm1tL3Ztc2Nhbi5jLTYwNTItXG4tLVxubW0vdm1zY2FuLmM9NjkwOT11bnNpZ25lZCBsb25nIHRyeV90b19mcmVlX3BhZ2VzKHN0cnVjdCB6b25lbGlzdCAqem9uZWxpc3QsIGludCBvcmRlcixcbi0tXG5tbS92bXNjYW4uYy02OTUxLVxubW0vdm1zY2FuLmM6Njk1MjojaWZkZWYgQ09ORklHX01FTUNHXG5tbS92bXNjYW4uYy02OTUzLVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNSAxMzowNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMjg5MAoJCQkJCQkJb3V0cHV0OiAzNQoJCQkJCQkJdGhvdWdodHM6IDQyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMgY29kZS4KCioqSW52ZXN0aWdhdGluZyBhIENvbmRpdGlvbmFsIENvbXBpbGF0aW9uIEJsb2NrKioKCkFscmlnaHQsIEkgc2VlIHRoaXMgYCNlbmRpZiAvKiBDT05GSUdfTUVNQ0cgKi9gIG9uIGxpbmUgNjA5MS4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMsICYjMzQ7T2theSwgd2hhdCYjMzk7cyAqdGhpcyogcmVmZXJyaW5nIHRvPyYjMzQ7IEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBzY29wZSBvZiB0aGlzIGNvbmRpdGlvbmFsIGNvbXBpbGF0aW9uLiBJdCYjMzk7cyBhIGtleSBwaWVjZSBvZiB0aGUgcHV6emxlIGJlY2F1c2UgaXQgbWVhbnMgY29kZSB3aXRoaW4gdGhhdCBibG9jayBpcyBwb3RlbnRpYWxseSBhY3RpdmUgb3IgaW5hY3RpdmUgZGVwZW5kaW5nIG9uIGEgY29tcGlsZS10aW1lIGNvbmZpZ3VyYXRpb24gc2V0dGluZyDigJMgc3BlY2lmaWNhbGx5LCB3aGV0aGVyIGBDT05GSUdfTUVNQ0dgIGlzIGRlZmluZWQuIFRvIGdyYXNwIHdoYXQmIzM5O3MgZ29pbmcgb24sIEkgbmVlZCB0aGUgY29udGV4dC4gU28sIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQgdGhpcyBibG9jayBpcyBpbnRlbmRlZCB0byBhY2hpZXZlLiBUaGVyZWZvcmUsIGxldCYjMzk7cyBxdWlja2x5IGV4YW1pbmUgdGhlIGxpbmVzIGZyb20gNjA0OCB0byA2MDk1LiBUaGF0IHNob3VsZCBiZSBlbm91Z2ggdG8gcmV2ZWFsIHdoYXQmIzM5O3MgYmVpbmcgY29uZGl0aW9uYWxseSBpbmNsdWRlZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTUgMTM6MDY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDttbS92bXNjYW4uYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDYwNDgsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNDgKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7NjA0ODpcdFx0XHRtbV9zdGF0ZS1cdTAwM2VzZXEgPSBNSU5fTlJfR0VOUztcbjYwNDk6XHR9XG42MDUwOlx0XG42MDUxOlx0I2lmZGVmIENPTkZJR19NRU1DR1xuNjA1MjpcdFxuNjA1MzpcdHZvaWQgbHJ1X2dlbl9pbml0X21lbWNnKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZylcbjYwNTQ6XHR7XG42MDU1Olx0XHRzdHJ1Y3QgbHJ1X2dlbl9tbV9saXN0ICptbV9saXN0ID0gZ2V0X21tX2xpc3QobWVtY2cpO1xuNjA1NjpcdFxuNjA1NzpcdFx0aWYgKCFtbV9saXN0KVxuNjA1ODpcdFx0XHRyZXR1cm47XG42MDU5Olx0XG42MDYwOlx0XHRJTklUX0xJU1RfSEVBRChcdTAwMjZtbV9saXN0LVx1MDAzZWZpZm8pO1xuNjA2MTpcdFx0c3Bpbl9sb2NrX2luaXQoXHUwMDI2bW1fbGlzdC1cdTAwM2Vsb2NrKTtcbjYwNjI6XHR9XG42MDYzOlx0XG42MDY0Olx0dm9pZCBscnVfZ2VuX2V4aXRfbWVtY2coc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKVxuNjA2NTpcdHtcbjYwNjY6XHRcdGludCBpO1xuNjA2NzpcdFx0aW50IG5pZDtcbjYwNjg6XHRcdHN0cnVjdCBscnVfZ2VuX21tX2xpc3QgKm1tX2xpc3QgPSBnZXRfbW1fbGlzdChtZW1jZyk7XG42MDY5Olx0XG42MDcwOlx0XHRWTV9XQVJOX09OX09OQ0UobW1fbGlzdCBcdTAwMjZcdTAwMjYgIWxpc3RfZW1wdHkoXHUwMDI2bW1fbGlzdC1cdTAwM2VmaWZvKSk7XG42MDcxOlx0XG42MDcyOlx0XHRmb3JfZWFjaF9ub2RlKG5pZCkge1xuNjA3MzpcdFx0XHRzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMgPSBnZXRfbHJ1dmVjKG1lbWNnLCBuaWQpO1xuNjA3NDpcdFx0XHRzdHJ1Y3QgbHJ1X2dlbl9tbV9zdGF0ZSAqbW1fc3RhdGUgPSBnZXRfbW1fc3RhdGUobHJ1dmVjKTtcbjYwNzU6XHRcbjYwNzY6XHRcdFx0Vk1fV0FSTl9PTl9PTkNFKG1lbWNocl9pbnYobHJ1dmVjLVx1MDAzZWxydWdlbi5ucl9wYWdlcywgMCxcbjYwNzc6XHRcdFx0XHRcdFx0ICAgc2l6ZW9mKGxydXZlYy1cdTAwM2VscnVnZW4ubnJfcGFnZXMpKSk7XG42MDc4Olx0XG42MDc5Olx0XHRcdGxydXZlYy1cdTAwM2VscnVnZW4ubGlzdC5uZXh0ID0gTElTVF9QT0lTT04xO1xuNjA4MDpcdFxuNjA4MTpcdFx0XHRpZiAoIW1tX3N0YXRlKVxuNjA4MjpcdFx0XHRcdGNvbnRpbnVlO1xuNjA4MzpcdFxuNjA4NDpcdFx0XHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBOUl9CTE9PTV9GSUxURVJTOyBpJiM0MzsmIzQzOykge1xuNjA4NTpcdFx0XHRcdGJpdG1hcF9mcmVlKG1tX3N0YXRlLVx1MDAzZWZpbHRlcnNbaV0pO1xuNjA4NjpcdFx0XHRcdG1tX3N0YXRlLVx1MDAzZWZpbHRlcnNbaV0gPSBOVUxMO1xuNjA4NzpcdFx0XHR9XG42MDg4Olx0XHR9XG42MDg5Olx0fVxuNjA5MDpcdFxuNjA5MTpcdCNlbmRpZiAvKiBDT05GSUdfTUVNQ0cgKi9cbjYwOTI6XHRcbjYwOTM6XHRzdGF0aWMgaW50IF9faW5pdCBpbml0X2xydV9nZW4odm9pZClcbjYwOTQ6XHR7XG42MDk1Olx0XHRCVUlMRF9CVUdfT04oTUlOX05SX0dFTlMgJiM0MzsgMSBcdTAwM2U9IE1BWF9OUl9HRU5TKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTUgMTM6MDY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjM4NzYKCQkJCQkJCW91dHB1dDogMjkKCQkJCQkJCXRob3VnaHRzOiA2NgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIENvZGUmIzM5O3MgQ29uZGl0aW9uYWwgQ29tcGlsYXRpb24qKgoKQWxyaWdodCwgc28gYENPTkZJR19NRU1DR2AgZmluaXNoZWQgdXAgYXJvdW5kIGxpbmUgNjA5MSwgYnV0IHRoaXMgYHJ1bl9hZ2luZ2AgZnVuY3Rpb24sIGl0JiMzOTtzIHNpdHRpbmcgYXQgcm91Z2hseSBsaW5lIDU4MjcuIEkgbmVlZCB0byBmaWd1cmUgb3V0IHRoZSBjb25kaXRpb25hbCBjb21waWxhdGlvbiB0aGF0IGNvbnRyb2xzIGl0LiBNeSBndXQgdGVsbHMgbWUgaXQmIzM5O3MgbGlrZWx5IHdyYXBwZWQgaW4gYW4gYCNpZmRlZmAgb3IgYCNpZmAgc3RhdGVtZW50LiBObyBuZWVkIHRvIGdvIGxpbmUgYnkgbGluZSBoZXJlLCBsZXQmIzM5O3MganVzdCBtYWtlIHVzZSBvZiB0aGUgZWRpdG9yIGFuZCBxdWlja2x5IHNlYXJjaCBiYWNrd2FyZHMgZnJvbSBsaW5lIDU4MjcgZm9yIHRoZSBzdGFydCBvZiB0aGUgcmVsZXZhbnQgYCNpZmAgYmxvY2sgYW5kIHNlZSB3aGF0JiMzOTtzIHdoYXQuIFRoaXMgc2hvdWxkbiYjMzk7dCB0YWtlIGxvbmcuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE1IDEzOjA2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O14jaWYmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS92bXNjYW4uYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS92bXNjYW4uYz03Nj1zdHJ1Y3Qgc2Nhbl9jb250cm9sIHtcbi0tXG5tbS92bXNjYW4uYy0xODMtXG5tbS92bXNjYW4uYzoxODQ6I2lmZGVmIEFSQ0hfSEFTX1BSRUZFVENIV1xubW0vdm1zY2FuLmMtMTg1LXN0YXRpYyBpbmxpbmUgdm9pZCBwcmVmZXRjaHdfcHJldl9scnVfZm9saW8oc3RydWN0IGZvbGlvICpmb2xpbyxcbi0tXG5tbS92bXNjYW4uYz0yMjM9c3RhdGljIGludCBzY19zd2FwcGluZXNzKHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjLCBzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpXG4tLVxubW0vdm1zY2FuLmMtMjI5LVxubW0vdm1zY2FuLmM6MjMwOiNpZmRlZiBDT05GSUdfTUVNQ0dcbm1tL3Ztc2Nhbi5jLTIzMS1cbi0tXG5tbS92bXNjYW4uYz0yNjA9c3RhdGljIGJvb2wgd3JpdGViYWNrX3Rocm90dGxpbmdfc2FuZShzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYylcbi0tXG5tbS92bXNjYW4uYy0yNjMtXHRcdHJldHVybiB0cnVlO1xubW0vdm1zY2FuLmM6MjY0OiNpZmRlZiBDT05GSUdfQ0dST1VQX1dSSVRFQkFDS1xubW0vdm1zY2FuLmMtMjY1LVx0aWYgKGNncm91cF9zdWJzeXNfb25fZGZsKG1lbW9yeV9jZ3JwX3N1YnN5cykpXG4tLVxubW0vdm1zY2FuLmM9MzQ1PXN0YXRpYyBib29sIGNhbl9kZW1vdGUoaW50IG5pZCwgc3RydWN0IHNjYW5fY29udHJvbCAqc2MsXG4tLVxubW0vdm1zY2FuLmMtMzY0LVxubW0vdm1zY2FuLmM6MzY1OiNpZmRlZiBDT05GSUdfU1dBUFxubW0vdm1zY2FuLmMtMzY2LXN0YXRpYyBpbmxpbmUgYm9vbCByZWNsYWltYWJsZV9hbm9uX2lzX2xvdyhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csXG4tLVxubW0vdm1zY2FuLmM9ODk5PWVudW0gZm9saW9fcmVmZXJlbmNlcyB7XG4tLVxubW0vdm1zY2FuLmMtOTA0LVxubW0vdm1zY2FuLmM6OTA1OiNpZmRlZiBDT05GSUdfTFJVX0dFTlxubW0vdm1zY2FuLmMtOTA2LS8qXG4tLVxubW0vdm1zY2FuLmM9MTEzMz1zdGF0aWMgdW5zaWduZWQgaW50IHNocmlua19mb2xpb19saXN0KHN0cnVjdCBsaXN0X2hlYWQgKmZvbGlvX2xpc3QsXG4tLVxubW0vdm1zY2FuLmMtMTM2Ny1cdFx0XHRcdFx0Z290byBhY3RpdmF0ZV9sb2NrZWQ7XG5tbS92bXNjYW4uYzoxMzY4OiNpZmRlZiBDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0Vcbm1tL3Ztc2Nhbi5jLTEzNjktXHRcdFx0XHRpZiAobnJfcGFnZXMgXHUwMDNlPSBIUEFHRV9QTURfTlIpIHtcbi0tXG5tbS92bXNjYW4uYz0yNzYwPXN0YXRpYyBib29sIGNhbl9hZ2VfYW5vbl9wYWdlcyhzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsXG4tLVxubW0vdm1zY2FuLmMtMjc3MS1cbm1tL3Ztc2Nhbi5jOjI3NzI6I2lmZGVmIENPTkZJR19MUlVfR0VOXG5tbS92bXNjYW4uYy0yNzczLVxubW0vdm1zY2FuLmM9Mjc3ND1ERUZJTkVfU1RBVElDX0tFWV9GQUxTRShscnVfc3dpdGNoKTtcbm1tL3Ztc2Nhbi5jOjI3NzU6I2lmZGVmIENPTkZJR19MUlVfR0VOX0VOQUJMRURcbm1tL3Ztc2Nhbi5jLTI3NzYtREVGSU5FX1NUQVRJQ19LRVlfQVJSQVlfVFJVRShscnVfZ2VuX2NhcHMsIE5SX0xSVV9HRU5fQ0FQUyk7XG4tLVxubW0vdm1zY2FuLmM9MjgyND1zdGF0aWMgc3RydWN0IGxydXZlYyAqZ2V0X2xydXZlYyhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIGludCBuaWQpXG4tLVxubW0vdm1zY2FuLmMtMjgyNy1cbm1tL3Ztc2Nhbi5jOjI4Mjg6I2lmZGVmIENPTkZJR19NRU1DR1xubW0vdm1zY2FuLmMtMjgyOS1cdGlmIChtZW1jZykge1xuLS1cbm1tL3Ztc2Nhbi5jPTI5NjA9c3RhdGljIHZvaWQgcmVzZXRfYmxvb21fZmlsdGVyKHN0cnVjdCBscnVfZ2VuX21tX3N0YXRlICptbV9zdGF0ZSwgdW5zaWduZWQgbG9uZyBzZXEpXG4tLVxubW0vdm1zY2FuLmMtMjk3OS1cbm1tL3Ztc2Nhbi5jOjI5ODA6I2lmZGVmIENPTkZJR19MUlVfR0VOX1dBTEtTX01NVVxubW0vdm1zY2FuLmMtMjk4MS1cbm1tL3Ztc2Nhbi5jPTI5ODI9c3RhdGljIHN0cnVjdCBscnVfZ2VuX21tX2xpc3QgKmdldF9tbV9saXN0KHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZylcbi0tXG5tbS92bXNjYW4uYy0yOTg4LVxubW0vdm1zY2FuLmM6Mjk4OTojaWZkZWYgQ09ORklHX01FTUNHXG5tbS92bXNjYW4uYy0yOTkwLVx0aWYgKG1lbWNnKVxuLS1cbm1tL3Ztc2Nhbi5jPTMwMjI9dm9pZCBscnVfZ2VuX2FkZF9tbShzdHJ1Y3QgbW1fc3RydWN0ICptbSlcbi0tXG5tbS92bXNjYW4uYy0zMDI4LVx0Vk1fV0FSTl9PTl9PTkNFKCFsaXN0X2VtcHR5KFx1MDAyNm1tLVx1MDAzZWxydV9nZW4ubGlzdCkpO1xubW0vdm1zY2FuLmM6MzAyOTojaWZkZWYgQ09ORklHX01FTUNHXG5tbS92bXNjYW4uYy0zMDMwLVx0Vk1fV0FSTl9PTl9PTkNFKG1tLVx1MDAzZWxydV9nZW4ubWVtY2cpO1xuLS1cbm1tL3Ztc2Nhbi5jPTMwNDk9dm9pZCBscnVfZ2VuX2RlbF9tbShzdHJ1Y3QgbW1fc3RydWN0ICptbSlcbi0tXG5tbS92bXNjYW4uYy0zMDU3LVxubW0vdm1zY2FuLmM6MzA1ODojaWZkZWYgQ09ORklHX01FTUNHXG5tbS92bXNjYW4uYy0zMDU5LVx0bWVtY2cgPSBtbS1cdTAwM2VscnVfZ2VuLm1lbWNnO1xuLS1cbm1tL3Ztc2Nhbi5jLTMwODEtXG5tbS92bXNjYW4uYzozMDgyOiNpZmRlZiBDT05GSUdfTUVNQ0dcbm1tL3Ztc2Nhbi5jLTMwODMtXHRtZW1fY2dyb3VwX3B1dChtbS1cdTAwM2VscnVfZ2VuLm1lbWNnKTtcbi0tXG5tbS92bXNjYW4uYy0zMDg3LVxubW0vdm1zY2FuLmM6MzA4ODojaWZkZWYgQ09ORklHX01FTUNHXG5tbS92bXNjYW4uYy0zMDg5LXZvaWQgbHJ1X2dlbl9taWdyYXRlX21tKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tKVxuLS1cbm1tL3Ztc2Nhbi5jPTQ1MTY9c3RhdGljIHZvaWQgbHJ1X2dlbl9yb3RhdGVfbWVtY2coc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBpbnQgb3ApXG4tLVxubW0vdm1zY2FuLmMtNDU1OS1cbm1tL3Ztc2Nhbi5jOjQ1NjA6I2lmZGVmIENPTkZJR19NRU1DR1xubW0vdm1zY2FuLmMtNDU2MS1cbi0tXG5tbS92bXNjYW4uYz01NzYyPXN0YXRpYyBpbnQgbHJ1X2dlbl9zZXFfc2hvdyhzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHZvaWQgKnYpXG4tLVxubW0vdm1zY2FuLmMtNTc3NS1cbm1tL3Ztc2Nhbi5jOjU3NzY6I2lmZGVmIENPTkZJR19NRU1DR1xubW0vdm1zY2FuLmMtNTc3Ny1cdFx0aWYgKG1lbWNnKVxuLS1cbm1tL3Ztc2Nhbi5jPTYwMzE9dm9pZCBscnVfZ2VuX2luaXRfbHJ1dmVjKHN0cnVjdCBscnV2ZWMgKmxydXZlYylcbi0tXG5tbS92bXNjYW4uYy02MDUwLVxubW0vdm1zY2FuLmM6NjA1MTojaWZkZWYgQ09ORklHX01FTUNHXG5tbS92bXNjYW4uYy02MDUyLVxuLS1cbm1tL3Ztc2Nhbi5jPTY5MDk9dW5zaWduZWQgbG9uZyB0cnlfdG9fZnJlZV9wYWdlcyhzdHJ1Y3Qgem9uZWxpc3QgKnpvbmVsaXN0LCBpbnQgb3JkZXIsXG4tLVxubW0vdm1zY2FuLmMtNjk1MS1cbm1tL3Ztc2Nhbi5jOjY5NTI6I2lmZGVmIENPTkZJR19NRU1DR1xubW0vdm1zY2FuLmMtNjk1My1cbi0tXG5tbS92bXNjYW4uYz03NzM3PWJvb2wga3N3YXBkX3Rlc3RfaG9wZWxlc3MocGdfZGF0YV90ICpwZ2RhdClcbi0tXG5tbS92bXNjYW4uYy03NzQxLVxubW0vdm1zY2FuLmM6Nzc0MjojaWZkZWYgQ09ORklHX0hJQkVSTkFUSU9OXG5tbS92bXNjYW4uYy03NzQzLS8qXG4tLVxubW0vdm1zY2FuLmM9NzgyMj1zdGF0aWMgY29uc3Qgc3RydWN0IGN0bF90YWJsZSB2bXNjYW5fc3lzY3RsX3RhYmxlW10gPSB7XG4tLVxubW0vdm1zY2FuLmMtNzgzMS1cdH0sXG5tbS92bXNjYW4uYzo3ODMyOiNpZmRlZiBDT05GSUdfTlVNQVxubW0vdm1zY2FuLmMtNzgzMy1cdHtcbi0tXG5tbS92bXNjYW4uYz03ODU0PW1vZHVsZV9pbml0KGtzd2FwZF9pbml0KVxubW0vdm1zY2FuLmMtNzg1NS1cbm1tL3Ztc2Nhbi5jOjc4NTY6I2lmZGVmIENPTkZJR19OVU1BXG5tbS92bXNjYW4uYy03ODU3LS8qXG4tLVxubW0vdm1zY2FuLmM9ODE5OT1FWFBPUlRfU1lNQk9MX0dQTChjaGVja19tb3ZlX3VuZXZpY3RhYmxlX2ZvbGlvcyk7XG5tbS92bXNjYW4uYy04MjAwLVxubW0vdm1zY2FuLmM6ODIwMTojaWYgZGVmaW5lZChDT05GSUdfU1lTRlMpIFx1MDAyNlx1MDAyNiBkZWZpbmVkKENPTkZJR19OVU1BKVxubW0vdm1zY2FuLmMtODIwMi1zdGF0aWMgc3NpemVfdCByZWNsYWltX3N0b3JlKHN0cnVjdCBkZXZpY2UgKmRldixcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTUgMTM6MDY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjYxMTQKCQkJCQkJCW91dHB1dDogMzIKCQkJCQkJCXRob3VnaHRzOiAxMjQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBMUlUgR2VuZXJhdGlvbiBDb25maWd1cmF0aW9uKioKCk9rYXksIHNvIEkmIzM5O20gZGl2aW5nIGludG8gdGhpcyBjb2RlIGFuZCBpbW1lZGlhdGVseSBzZWUgYSBjcnVjaWFsIGNvbmRpdGlvbmFsIGJsb2NrLiBMaW5lIDI3NzIga2lja3MgdGhpbmdzIG9mZiB3aXRoIGAjaWZkZWYgQ09ORklHX0xSVV9HRU5gLCB3aGljaCB0aGVuIHNwYW5zIGFsbCB0aGUgd2F5IHRvIGxpbmUgNjExMCwgZW5kaW5nIHdpdGggYCNlbHNlIC8qICFDT05GSUdfTFJVX0dFTiAqL2AuIFRoYXQmIzM5O3MgYSBodWdlIGNsdWUgdGhhdCBgQ09ORklHX0xSVV9HRU5gIGlzIGEgc2lnbmlmaWNhbnQgY29uZmlndXJhdGlvbiBvcHRpb24uIFRoZW4sIGxvb2tpbmcgaW5zaWRlIHRoaXMgYmxvY2ssIGxpbmUgNjEwMSBqdW1wcyBvdXQgYXQgbWU6IGBkZWJ1Z2ZzX2NyZWF0ZV9maWxlX2F1eF9udW0oJiMzNDtscnVfZ2VuJiMzNDssIC4uLilgLiBBaCwgc28gYExSVV9HRU5gIGlzIHRpZWQgdG8gZGVidWdmcyEgVGhhdCBwb2ludHMgdG8gdGhlIHVzZSBvZiBgREVCVUdfRlNgIGJlaW5nIGEgc2lnbmlmaWNhbnQgY29uZmlndXJhdGlvbiBhcyB3ZWxsLCBvciBhdCBsZWFzdCBob3cgdGhlIGRlYnVnZ2luZyBpbmZvcm1hdGlvbiBpcyBjb25maWd1cmVkLiBTbywgbXkgaW5pdGlhbCBoeXBvdGhlc2lzOiBgTFJVX0dFTmAgYW5kIGBERUJVR19GU2AgYXJlIHRoZSBrZXkgY29uZmlncyB0byB3YXRjaC4gV2FpdCBhIG1pbnV0ZeKApkkganVzdCB0aG91Z2h0IG9mIHNvbWV0aGluZywgd2hhdCBhYm91dCBgTFJVX0dFTl9FTkFCTEVEYD8gSSYjMzk7ZCBiZXR0ZXIgZG91YmxlIGNoZWNrIHdoYXQgYGxydV9nZW5fZW5hYmxlZCgpYCBkb2VzLCBqdXN0IHRvIGJlIHN1cmUuIEkmIzM5O20gZ29pbmcgdG8gZm9sbG93IHRoZSBsb2dpYyBhbmQgbG9vayBhdCB0aGUgaW1wbGVtZW50YXRpb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE1IDEzOjA2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2xydV9nZW5fZW5hYmxlZCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tL3Ztc2Nhbi5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL3Ztc2Nhbi5jPTM2Nj1zdGF0aWMgaW5saW5lIGJvb2wgcmVjbGFpbWFibGVfYW5vbl9pc19sb3coc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLFxuLS1cbm1tL3Ztc2Nhbi5jLTM4NS1cdCAqL1xubW0vdm1zY2FuLmM6Mzg2Olx0aWYgKGxydV9nZW5fZW5hYmxlZCgpKVxubW0vdm1zY2FuLmMtMzg3LVx0XHRyZXR1cm4gZmFsc2U7XG4tLVxubW0vdm1zY2FuLmM9OTQzPXN0YXRpYyBlbnVtIGZvbGlvX3JlZmVyZW5jZXMgZm9saW9fY2hlY2tfcmVmZXJlbmNlcyhzdHJ1Y3QgZm9saW8gKmZvbGlvLFxuLS1cbm1tL3Ztc2Nhbi5jLTk2Ny1cbm1tL3Ztc2Nhbi5jOjk2ODpcdGlmIChscnVfZ2VuX2VuYWJsZWQoKSBcdTAwMjZcdTAwMjYgIWxydV9nZW5fc3dpdGNoaW5nKCkpIHtcbm1tL3Ztc2Nhbi5jLTk2OS1cdFx0aWYgKCFyZWZlcmVuY2VkX3B0ZXMpXG4tLVxubW0vdm1zY2FuLmM9MjM2MD1zdGF0aWMgdm9pZCBwcmVwYXJlX3NjYW5fY29udHJvbChwZ19kYXRhX3QgKnBnZGF0LCBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYylcbi0tXG5tbS92bXNjYW4uYy0yMzY2LVxubW0vdm1zY2FuLmM6MjM2NzpcdGlmIChscnVfZ2VuX2VuYWJsZWQoKSBcdTAwMjZcdTAwMjYgIWxydV9nZW5fc3dpdGNoaW5nKCkpXG5tbS92bXNjYW4uYy0yMzY4LVx0XHRyZXR1cm47XG4tLVxubW0vdm1zY2FuLmM9NTUxNT1zdGF0aWMgdm9pZCBscnVfZ2VuX2NoYW5nZV9zdGF0ZShib29sIGVuYWJsZWQpXG4tLVxubW0vdm1zY2FuLmMtNTUyNS1cbm1tL3Ztc2Nhbi5jOjU1MjY6XHRpZiAoZW5hYmxlZCA9PSBscnVfZ2VuX2VuYWJsZWQoKSlcbm1tL3Ztc2Nhbi5jLTU1MjctXHRcdGdvdG8gdW5sb2NrO1xuLS1cbm1tL3Ztc2Nhbi5jPTU2MTM9c3RhdGljIHNzaXplX3QgZW5hYmxlZF9zdG9yZShzdHJ1Y3Qga29iamVjdCAqa29iaiwgc3RydWN0IGtvYmpfYXR0cmlidXRlICphdHRyLFxuLS1cbm1tL3Ztc2Nhbi5jLTU2MzktXG5tbS92bXNjYW4uYzo1NjQwOnN0YXRpYyBzdHJ1Y3Qga29ial9hdHRyaWJ1dGUgbHJ1X2dlbl9lbmFibGVkX2F0dHIgPSBfX0FUVFJfUlcoZW5hYmxlZCk7XG5tbS92bXNjYW4uYy01NjQxLVxubW0vdm1zY2FuLmM9NTY0Mj1zdGF0aWMgc3RydWN0IGF0dHJpYnV0ZSAqbHJ1X2dlbl9hdHRyc1tdID0ge1xubW0vdm1zY2FuLmMtNTY0My1cdFx1MDAyNmxydV9nZW5fbWluX3R0bF9hdHRyLmF0dHIsXG5tbS92bXNjYW4uYzo1NjQ0Olx0XHUwMDI2bHJ1X2dlbl9lbmFibGVkX2F0dHIuYXR0cixcbm1tL3Ztc2Nhbi5jLTU2NDUtXHROVUxMXG4tLVxubW0vdm1zY2FuLmM9NjAzMT12b2lkIGxydV9nZW5faW5pdF9scnV2ZWMoc3RydWN0IGxydXZlYyAqbHJ1dmVjKVxuLS1cbm1tL3Ztc2Nhbi5jLTYwMzgtXHRscnVnZW4tXHUwMDNlbWF4X3NlcSA9IE1JTl9OUl9HRU5TICYjNDM7IDE7XG5tbS92bXNjYW4uYzo2MDM5Olx0bHJ1Z2VuLVx1MDAzZWVuYWJsZWQgPSBscnVfZ2VuX2VuYWJsZWQoKTtcbm1tL3Ztc2Nhbi5jLTYwNDAtXG4tLVxubW0vdm1zY2FuLmM9NjEyOT1zdGF0aWMgdm9pZCBzaHJpbmtfbHJ1dmVjKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgc3RydWN0IHNjYW5fY29udHJvbCAqc2MpXG4tLVxubW0vdm1zY2FuLmMtNjEzOS1cbm1tL3Ztc2Nhbi5jOjYxNDA6XHRpZiAoKGxydV9nZW5fZW5hYmxlZCgpIHx8IGxydV9nZW5fc3dpdGNoaW5nKCkpIFx1MDAyNlx1MDAyNiAhcm9vdF9yZWNsYWltKHNjKSkge1xubW0vdm1zY2FuLmMtNjE0MS1cdFx0bHJ1X2dlbl9zaHJpbmtfbHJ1dmVjKGxydXZlYywgc2MpO1xuLS1cbm1tL3Ztc2Nhbi5jPTYzOTk9c3RhdGljIHZvaWQgc2hyaW5rX25vZGUocGdfZGF0YV90ICpwZ2RhdCwgc3RydWN0IHNjYW5fY29udHJvbCAqc2MpXG4tLVxubW0vdm1zY2FuLmMtNjQwNC1cbm1tL3Ztc2Nhbi5jOjY0MDU6XHRpZiAoKGxydV9nZW5fZW5hYmxlZCgpIHx8IGxydV9nZW5fc3dpdGNoaW5nKCkpIFx1MDAyNlx1MDAyNiByb290X3JlY2xhaW0oc2MpKSB7XG5tbS92bXNjYW4uYy02NDA2LVx0XHRtZW1zZXQoXHUwMDI2c2MtXHUwMDNlbnIsIDAsIHNpemVvZihzYy1cdTAwM2VucikpO1xuLS1cbm1tL3Ztc2Nhbi5jPTY2NTY9c3RhdGljIHZvaWQgc25hcHNob3RfcmVmYXVsdHMoc3RydWN0IG1lbV9jZ3JvdXAgKnRhcmdldF9tZW1jZywgcGdfZGF0YV90ICpwZ2RhdClcbi0tXG5tbS92bXNjYW4uYy02NjYwLVxubW0vdm1zY2FuLmM6NjY2MTpcdGlmIChscnVfZ2VuX2VuYWJsZWQoKSBcdTAwMjZcdTAwMjYgIWxydV9nZW5fc3dpdGNoaW5nKCkpXG5tbS92bXNjYW4uYy02NjYyLVx0XHRyZXR1cm47XG4tLVxubW0vdm1zY2FuLmM9NzAwNT1zdGF0aWMgdm9pZCBrc3dhcGRfYWdlX25vZGUoc3RydWN0IHBnbGlzdF9kYXRhICpwZ2RhdCwgc3RydWN0IHNjYW5fY29udHJvbCAqc2MpXG4tLVxubW0vdm1zY2FuLmMtNzAwOS1cbm1tL3Ztc2Nhbi5jOjcwMTA6XHRpZiAobHJ1X2dlbl9lbmFibGVkKCkgfHwgbHJ1X2dlbl9zd2l0Y2hpbmcoKSkge1xubW0vdm1zY2FuLmMtNzAxMS1cdFx0bHJ1X2dlbl9hZ2Vfbm9kZShwZ2RhdCwgc2MpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNSAxMzowNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNzY4NgoJCQkJCQkJb3V0cHV0OiAxNTkKCQkJCQkJCXRob3VnaHRzOiAxMzc5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5c2lzIG9mIE1HTFJVIFBhdGNoIEZ1enppbmcgUmVhZGluZXNzKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24gZm9yIGZ1enppbmcgcmVhZGluZXNzLiBGaXJzdCwgSSBub3RpY2VkIHRoYXQgYGxydV9nZW5fc2VxX3dyaXRlYCBkb2VzbiYjMzk7dCBldmVuIGJvdGhlciBjaGVja2luZyBgbHJ1X2dlbl9lbmFibGVkKClgLCB3aGljaCBpcyBhIGxpdHRsZSBvZGQsIGJ1dCBgTFJVX0dFTl9FTkFCTEVEYCBlbmFibGVzIE1HTFJVIGJ5IGRlZmF1bHQgYW55d2F5LiBUaGUgcHJpbWFyeSBjb25jZXJuIGlzLCB3aGF0IGNvbmZpZ3VyYXRpb25zIGFyZSAqcmVxdWlyZWQqIHRvIGNvbXBpbGUgYW5kIGFjdHVhbGx5IGV4ZWN1dGUgdGhlICptb2RpZmllZCogY29kZT8KCjEuICBgTFJVX0dFTmAgaXMgZXNzZW50aWFsOyB0aGUgcmVsZXZhbnQgY29kZSBpcyBndWFyZGVkIGJ5IGAjaWZkZWYgQ09ORklHX0xSVV9HRU5gLgoyLiAgYERFQlVHX0ZTYCBpcyBub24tbmVnb3RpYWJsZSwgc2luY2UgYGxydV9nZW5fc2VxX3dyaXRlYCBpcyBhIGRlYnVnZnMgZmlsZSBoYW5kbGVyLiBXaXRob3V0IGBDT05GSUdfREVCVUdfRlNgLCB0aGF0IGRlYnVnIGludGVyZmFjZSBhdCBgL3N5cy9rZXJuZWwvZGVidWcvbHJ1X2dlbmAgc2ltcGx5IGlzbiYjMzk7dCBwcmVzZW50LCBhbmQgd2UgY2FuJiMzOTt0IHRyaWdnZXIgYW55IG9mIHRoaXMuCgpOb3csIGxldCYjMzk7cyBkZXRlcm1pbmUgdGhlIGBGb2N1c1N5bWJvbHNgLiBUaGUgZnVuY3Rpb24gdGhhdCBnb3QgdGhlIG1vZGlmaWNhdGlvbiBpcyBgcnVuX2FnaW5nYC4gQnV0IGlzIGBydW5fYWdpbmdgIGEgc3RhdGljIGZ1bmN0aW9uPyBZZXMsIGl0IGlzISBHaXZlbiB0aGF0IGBydW5fYWdpbmdgIGlzIGEgc3RhdGljIGZ1bmN0aW9uIGluIGBtbS92bXNjYW4uY2AsIGJ1dCBpdCYjMzk7cyBub3QgY29tcGlsZXItaW5saW5lZCBiZWNhdXNlIGl0IGV4aXN0cyBpbiB0aGUgc3ltYm9sIHRhYmxlLCBpdCBjYW4gYmUgYSBgRm9jdXNTeW1ib2xgLiBJdCYjMzk7cyBjYWxsZWQgZnJvbSBgcnVuX2NtZGAsIHdoaWNoIGlzIGNhbGxlZCBieSBgbHJ1X2dlbl9zZXFfd3JpdGVgLCB0aGUgZmlsZVxfb3BlcmF0aW9ucyAud3JpdGUgbWV0aG9kLgoKYHJ1bl9hZ2luZ2Agc2VlbXMgcHJldHR5IHNwZWNpZmljLiBDaGVja2luZyBzZWN0aW9uIDQgb2YgdGhlIGd1aWRlbGluZXMsIGl0JiMzOTtzOgoqICAgQSB0YXJnZXQtc3BlY2lmaWMgZmVhdHVyZSBsb2dpYy4KKiAgIEl0JiMzOTtzIGEgLmMgZmlsZSwgbm9uLXN0YXRpYy4KCmBydW5fYWdpbmdgIGlzICpub3QqIHViaXF1aXRvdXMuIEl0JiMzOTtzIG9ubHkgY2FsbGVkIHdoZW4gd3JpdGluZyAmIzM5OyYjNDM7JiMzOTsgdG8gYC9zeXMva2VybmVsL2RlYnVnL2xydV9nZW5gLCBhcyBpcyB0aGUgZW50cnlwb2ludC4gYHJ1bl9jbWRgIGFsc28gaXNuJiMzOTt0IHViaXF1aXRvdXM7IGl0JiMzOTtzIG9ubHkgY2FsbGVkIGZyb20gd2l0aGluIGBscnVfZ2VuX3NlcV93cml0ZWAsIGFuZCBgdHJ5X3RvX2luY19tYXhfc2VxYCBpcyBvbmx5IGNhbGxlZCBieSBgcnVuX2FnaW5nYC4gU28gd2UgaGF2ZSB0aHJlZSBjbGVhciBzeW1ib2xzIHRvIGZvY3VzIG9uOiBgcnVuX2FnaW5nYCwgYHJ1bl9jbWRgLCBhbmQgYGxydV9nZW5fc2VxX3dyaXRlYC4KCkRvdWJsZS1jaGVja2luZywgYHJ1bl9hZ2luZ2AgaXMgb25seSBkZWZpbmVkIGFuZCBjYWxsZWQgd2l0aGluIGBtbS92bXNjYW4uY2AuIEl0JiMzOTtzIG5vdCB1c2VkIGFueXdoZXJlIGVsc2UuIFNvIGl0JiMzOTtzIHZlcnkgdGFyZ2V0ZWQuCgpJcyB0aGlzIHBhdGNoIGBXb3J0aEZ1enppbmdgPyBBYnNvbHV0ZWx5LgoqICAgSXQmIzM5O3MgYSBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IHN1YnN5c3RlbSBjaGFuZ2UgKGBtbS92bXNjYW4uY2ApLgoqICAgRXhlY3V0YWJsZSBjb2RlIG1vZGlmaWVzIGxvZ2ljOiBpdCBhZGRzIGEgc2VxdWVuY2UgY2hlY2sgaW4gYHJ1bl9hZ2luZygpYCB0aGF0IHByZXZlbnRzIGB0cnlfdG9faW5jX21heF9zZXEoKWAgZnJvbSBiZWluZyBjYWxsZWQgd2l0aCBvYnNvbGV0ZSB2YWx1ZXMuCiogICBSZWFjaGFibGUgdmlhIGEgZGVidWdmcyBpbnRlcmZhY2UgYXQgYC9zeXMva2VybmVsL2RlYnVnL2xydV9nZW5gLgoqICAgVGVzdGFibGUgaW4gYSB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudC4KCkZvciBgRW5hYmxlQ29uZmlnc2A6IFdlIG5lZWQgYExSVV9HRU5gIChmb3IgdGhlIE1HTFJVIGNvZGUpIGFuZCBgREVCVUdfRlNgICh0byBleHBvc2UgdGhlIGludGVyZmFjZSkuCgpPdXIgZmluYWwgYEZvY3VzU3ltYm9sc2AgYXJlOiBgcnVuX2FnaW5nYCwgYHJ1bl9jbWRgLCBhbmQgYGxydV9nZW5fc2VxX3dyaXRlYC4gVGhleSBhcmUgc3BlY2lmaWMgdG8gdGhlIGZlYXR1cmUgYW5kIGFyZSBub24tdWJpcXVpdG91cy4KCkxldCYjMzk7cyBkbyBhIHNhbml0eSBjaGVjayB0byBjb3ZlciBhbGwgdGhlIGJhc2VzOiBUaGUgZ29hbCBvZiB0aGlzIGZ1enppbmcgaXMgdG8gZGlzY292ZXIgbmV3IGNyYXNoZXMsIGxhdGVudCBidWdzLCBldGMuIGFuZCB0aGlzIGNvZGUgaXMgcmVhY2hhYmxlIGJ5IHdheSBvZiBhIGRlYnVnZnMgaW50ZXJmYWNlLiBUaGlzIGNvZGUgaXMgaW4gdGhlIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgc3Vic3lzdGVtIGFuZCBhdm9pZHMgdWJpcXVpdG91cyBsaWZlY3ljbGUgaG90LXBhdGhzLiBXZSBoYXZlIGlkZW50aWZpZWQgYWxsIHRoZSBuZWNlc3NhcnkgQ09ORklHIG9wdGlvbnMsIGFuZCBzdHJpcHBlZCB0aGUgQ09ORklHXF8gcHJlZml4LgoKRXZlcnl0aGluZyBsb29rcyBnb29kLiBUaW1lIHRvIGNhbGwgYHNldC1yZXN1bHRzYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40MC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTUgMTM6MDY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0xSVV9HRU4mIzM0OywKICAgICYjMzQ7REVCVUdfRlMmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtydW5fYWdpbmcmIzM0OywKICAgICYjMzQ7bHJ1X2dlbl9zZXFfd3JpdGUmIzM0OywKICAgICYjMzQ7cnVuX2NtZCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgYWdpbmcgbG9naWMgaW4gdGhlIE11bHRpLUdlbiBMUlUgKE1HTFJVKSBzdWJzeXN0ZW0gaW4gbW0vdm1zY2FuLmMuIEl0IGFkZHMgYSBjaGVjayBpbiBydW5fYWdpbmcoKSB0byBpbW1lZGlhdGVseSByZXR1cm4gc3VjY2VzcyBpZiB0aGUgcmVxdWVzdGVkIHNlcXVlbmNlIG51bWJlciBpcyBvbGRlciB0aGFuIHRoZSBjdXJyZW50IG1heF9zZXEgaW5zdGVhZCBvZiBhdHRlbXB0aW5nIGFuIGluY3JlbWVudC4gVGhpcyBsb2dpYyBpcyByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2UgYnkgd3JpdGluZyB0byAvc3lzL2tlcm5lbC9kZWJ1Zy9scnVfZ2VuLCBtYWtpbmcgaXQgYW4gZXhlY3V0YWJsZSBhbmQgdGVzdGFibGUgcGF0aCB3aXRoaW4gY29yZSBtZW1vcnkgbWFuYWdlbWVudC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7TFJVX0dFTiYjMzQ7LAogICAgJiMzNDtERUJVR19GUyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3J1bl9hZ2luZyYjMzQ7LAogICAgJiMzNDtscnVfZ2VuX3NlcV93cml0ZSYjMzQ7LAogICAgJiMzNDtydW5fY21kJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBhZ2luZyBsb2dpYyBpbiB0aGUgTXVsdGktR2VuIExSVSAoTUdMUlUpIHN1YnN5c3RlbSBpbiBtbS92bXNjYW4uYy4gSXQgYWRkcyBhIGNoZWNrIGluIHJ1bl9hZ2luZygpIHRvIGltbWVkaWF0ZWx5IHJldHVybiBzdWNjZXNzIGlmIHRoZSByZXF1ZXN0ZWQgc2VxdWVuY2UgbnVtYmVyIGlzIG9sZGVyIHRoYW4gdGhlIGN1cnJlbnQgbWF4X3NlcSBpbnN0ZWFkIG9mIGF0dGVtcHRpbmcgYW4gaW5jcmVtZW50LiBUaGlzIGxvZ2ljIGlzIHJlYWNoYWJsZSBmcm9tIHVzZXJzcGFjZSBieSB3cml0aW5nIHRvIC9zeXMva2VybmVsL2RlYnVnL2xydV9nZW4sIG1ha2luZyBpdCBhbiBleGVjdXRhYmxlIGFuZCB0ZXN0YWJsZSBwYXRoIHdpdGhpbiBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50LiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQxLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNSAxMzowNjwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+SWY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4xbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE1IDEzOjA2PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjFtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmNvcmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcyBhbiBlYXJseSByZXR1cm4gY2hlY2sgKGBpZiAoc2VxIFx1MDAzYyBtYXhfc2VxKSByZXR1cm4gMDtgKSBpbiBgcnVuX2FnaW5nKClgIHdpdGhpbiBgbW0vdm1zY2FuLmNgLiBJdCBvcGVyYXRlcyBleGNsdXNpdmVseSBvbiBzY2FsYXIgaW50ZWdlciB2YWx1ZXMgKGBzZXFgIGFuZCBgbWF4X3NlcWApIGFuZCBhbHRlcnMgY29udHJvbCBmbG93IGluIHRoZSBtdWx0aS1nZW4gTFJVIGFnaW5nIHRyaWdnZXIuIFRoZSBjaGFuZ2UgZG9lcyBub3QgaW50cm9kdWNlIG9yIG1vZGlmeSBhbnkgbWVtb3J5IGFsbG9jYXRpb25zLCBkb2VzIG5vdCB0b3VjaCB1bmluaXRpYWxpemVkIHN0YWNrIG9yIGhlYXAgYnVmZmVycywgYW5kIGRvZXMgbm90IHBhc3MgYW55IGtlcm5lbCBzdHJ1Y3R1cmVzIHRvIHVzZXIgc3BhY2UuIEJlY2F1c2Ugbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgY2FuIGJlIHJlYWQsIGJyYW5jaGVkIHVwb24sIG9yIGxlYWtlZCB0byB1c2Vyc3BhY2UgYXMgYSByZXN1bHQgb2YgdGhpcyBjaGFuZ2UsIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIGlzIG5vdCB3YXJyYW50ZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5CmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kCmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikKZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuCgpDUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjoKLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlCiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOCiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUAogIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuCi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsCiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLgoKUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTiwKTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy4KQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWQpzZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrcwp0aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLgoKTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3QKdW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsCmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5cwp0aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZwp1bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2wKZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLApjYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy4KClNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczoKMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2IKICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHMKICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC4KMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlcwogICBvciBzdHJ1Y3QgZmllbGRzLgozLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzCiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuCjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzCiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy4KClNldCBOZWVkc0tNU0FOPWZhbHNlIElGOgotIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyCiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0CiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLgotIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkCiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLgotIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy4KClVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGUKZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5UYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NAoKRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCA1NWI1ZWQ2MTY4YjhlMjliYTY3ODA5MjgyNWQ2NjY5MGZjYTIwNzJiCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFR1ZSBTZXAgMTUgMTI6NTk6MjYgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9tbS92bXNjYW4uYyBiL21tL3Ztc2Nhbi5jCmluZGV4IDUzNTRlYjhkM2EwN2IuLjE4YzRkMzU5NTc0OTcgMTAwNjQ0Ci0tLSBhL21tL3Ztc2Nhbi5jCiYjNDM7JiM0MzsmIzQzOyBiL21tL3Ztc2Nhbi5jCkBAIC01ODI3LDYgJiM0Mzs1ODI3LDkgQEAgc3RhdGljIGludCBydW5fYWdpbmcoc3RydWN0IGxydXZlYyAqbHJ1dmVjLCB1bnNpZ25lZCBsb25nIHNlcSwKIHsKIAlERUZJTkVfTUFYX1NFUShscnV2ZWMpOwogCiYjNDM7CWlmIChzZXEgJmx0OyBtYXhfc2VxKQomIzQzOwkJcmV0dXJuIDA7CiYjNDM7CiAJaWYgKHNlcSAmZ3Q7IG1heF9zZXEpCiAJCXJldHVybiAtRUlOVkFMOwogCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQzLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNSAxMzowNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMDQ1CgkJCQkJCQlvdXRwdXQ6IDM1CgkJCQkJCQl0aG91Z2h0czogMzQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGhpbmtpbmcgcHJvY2VzczoKCioqRGl2aW5nIGludG8gdm1zY2FuLmMqKgoKT2theSwgc28gdGhlIHBhdGNoIEkmIzM5O20gaW50ZXJlc3RlZCBpbiBpcyBidXJpZWQgd2l0aGluIGBtbS92bXNjYW4uY2AuIFRoYXQmIzM5O3MgYSBwcmV0dHkgc3RhbmRhcmQgbG9jYXRpb24gZm9yIG1lbW9yeSBtYW5hZ2VtZW50IG1vZGlmaWNhdGlvbnMsIGJ1dCBJIHN0aWxsIG5lZWQgdG8gcGlucG9pbnQgdGhlIGV4YWN0IGxvY2F0aW9uLiBMaW5lIDU4MjfigKYgcmlnaHQuIFRpbWUgdG8gZmlyZSB1cCBteSB0b29scy4gSeKAmWxsIGxpa2VseSB1c2Ugc29tZXRoaW5nIGxpa2UgYHJlYWQtZmlsZWAgb3IgYGdyZXBwZXJgIOKAkyBzb21ldGhpbmcgdGhhdCBsZXRzIG1lIHF1aWNrbHkgbmF2aWdhdGUgdGhlIGZpbGUgYW5kIHNlZSB0aGUgc3Vycm91bmRpbmcgY29kZSBjb250ZXh0IGFyb3VuZCB0aGF0IGxpbmUgbnVtYmVyLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgaW1tZWRpYXRlIHZpY2luaXR5IG9mIHRoYXQgbGluZS4gVGhpcyBpbml0aWFsIGluc3BlY3Rpb24gc2hvdWxkIHJldmVhbCB0aGUgc3BlY2lmaWMgZnVuY3Rpb24gYW5kIHN1cnJvdW5kaW5nIGxvZ2ljIHRoZSBwYXRjaCB0b3VjaGVzLCBhbmQgZ2l2ZSBtZSBhIGZlZWwgZm9yIGl0cyBvdmVyYWxsIHB1cnBvc2Ugd2l0aGluIHRoZSB2bXNjYW4gZnJhbWV3b3JrLiBMZXQmIzM5O3Mgc2VlIHdoYXQgd2UmIzM5O3JlIHdvcmtpbmcgd2l0aC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40NC8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTUgMTM6MDc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDttbS92bXNjYW4uYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDU4MTUsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7NTgxNTpcdFx0cmV0dXJuIDA7XG41ODE2Olx0fVxuNTgxNzpcdFxuNTgxODpcdHN0YXRpYyBjb25zdCBzdHJ1Y3Qgc2VxX29wZXJhdGlvbnMgbHJ1X2dlbl9zZXFfb3BzID0ge1xuNTgxOTpcdFx0LnN0YXJ0ID0gbHJ1X2dlbl9zZXFfc3RhcnQsXG41ODIwOlx0XHQuc3RvcCA9IGxydV9nZW5fc2VxX3N0b3AsXG41ODIxOlx0XHQubmV4dCA9IGxydV9nZW5fc2VxX25leHQsXG41ODIyOlx0XHQuc2hvdyA9IGxydV9nZW5fc2VxX3Nob3csXG41ODIzOlx0fTtcbjU4MjQ6XHRcbjU4MjU6XHRzdGF0aWMgaW50IHJ1bl9hZ2luZyhzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIHVuc2lnbmVkIGxvbmcgc2VxLFxuNTgyNjpcdFx0XHQgICAgIGludCBzd2FwcGluZXNzLCBib29sIGZvcmNlX3NjYW4pXG41ODI3Olx0e1xuNTgyODpcdFx0REVGSU5FX01BWF9TRVEobHJ1dmVjKTtcbjU4Mjk6XHRcbjU4MzA6XHRcdGlmIChzZXEgXHUwMDNjIG1heF9zZXEpXG41ODMxOlx0XHRcdHJldHVybiAwO1xuNTgzMjpcdFxuNTgzMzpcdFx0aWYgKHNlcSBcdTAwM2UgbWF4X3NlcSlcbjU4MzQ6XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG41ODM1Olx0XG41ODM2Olx0XHRyZXR1cm4gdHJ5X3RvX2luY19tYXhfc2VxKGxydXZlYywgbWF4X3NlcSwgc3dhcHBpbmVzcywgZm9yY2Vfc2NhbikgPyAwIDogLUVFWElTVDtcbjU4Mzc6XHR9XG41ODM4Olx0XG41ODM5Olx0c3RhdGljIGludCBydW5fZXZpY3Rpb24oc3RydWN0IGxydXZlYyAqbHJ1dmVjLCB1bnNpZ25lZCBsb25nIHNlcSwgc3RydWN0IHNjYW5fY29udHJvbCAqc2MsXG41ODQwOlx0XHRcdFx0aW50IHN3YXBwaW5lc3MsIHVuc2lnbmVkIGxvbmcgbnJfdG9fcmVjbGFpbSlcbjU4NDE6XHR7XG41ODQyOlx0XHRpbnQgbnJfYmF0Y2g7XG41ODQzOlx0XHRERUZJTkVfTUFYX1NFUShscnV2ZWMpO1xuNTg0NDpcdFxuNTg0NTpcdFx0aWYgKHNlcSAmIzQzOyBNSU5fTlJfR0VOUyBcdTAwM2UgbWF4X3NlcSlcbjU4NDY6XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG41ODQ3Olx0XG41ODQ4Olx0XHRzYy1cdTAwM2Vucl9yZWNsYWltZWQgPSAwO1xuNTg0OTpcdFxuNTg1MDpcdFx0d2hpbGUgKCFzaWduYWxfcGVuZGluZyhjdXJyZW50KSkge1xuNTg1MTpcdFx0XHRERUZJTkVfTUlOX1NFUShscnV2ZWMpO1xuNTg1MjpcdFxuNTg1MzpcdFx0XHRpZiAoc2VxIFx1MDAzYyBldmljdGFibGVfbWluX3NlcShtaW5fc2VxLCBzd2FwcGluZXNzKSlcbjU4NTQ6XHRcdFx0XHRyZXR1cm4gMDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40NS8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTUgMTM6MDc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjg3NgoJCQkJCQkJb3V0cHV0OiAzNQoJCQkJCQkJdGhvdWdodHM6IDE5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqQW5hbHl6aW5nIHRoZSBgcnVuX2FnaW5nYCBGdW5jdGlvbiBDYWxsKioKCkFscmlnaHQsIGxldCYjMzk7cyBkaXZlIGluLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcyB0byB0cmFjZSB0aGUgZXhlY3V0aW9uIG9mIGBydW5fYWdpbmdgLiBUaGUgZ29hbCBpcyB0byBmdWxseSB1bmRlcnN0YW5kIGl0cyBjb250ZXh0IGFuZCBpbXBhY3QuIEkgbmVlZCB0byBwaW5wb2ludCBldmVyeSBpbnN0YW5jZSB3aGVyZSBgcnVuX2FnaW5nYCBpcyBpbnZva2VkLiBUaGlzIG1lYW5zIGdvaW5nIGJleW9uZCBhIHNpbXBsZSBncmVwOyBJJiMzOTttIGxvb2tpbmcgZm9yIGluZGlyZWN0IGNhbGxzLCBwb3RlbnRpYWwgd3JhcHBlciBmdW5jdGlvbnMsIG9yIGV2ZW4gZHluYW1pYyBpbXBvcnRzIHRoYXQgbWlnaHQgYmUgaW52b2x2ZWQuCgpPbmNlIEkmIzM5O3ZlIGdvdCB0aGUgY2FsbCBzaXRlcyBpZGVudGlmaWVkLCBJJiMzOTtsbCBuZWVkIHRvIGV4YW1pbmUgdGhlIHBhcmFtZXRlcnMgYmVpbmcgcGFzc2VkIHRvIGBydW5fYWdpbmdgIGF0IGVhY2ggbG9jYXRpb24uIFdoYXQgZGF0YSBpcyBpdCBvcGVyYXRpbmcgb24/IFdoYXQgY29uZmlndXJhdGlvbnMgYXJlIGJlaW5nIGFwcGxpZWQ/IEFyZSB0aGVyZSBkaWZmZXJlbnQgY29udHJvbCBmbG93cyBiYXNlZCBvbiB0aG9zZSBhcmd1bWVudHM/IFRoaXMgbGV2ZWwgb2YgZGV0YWlsIGlzIGNydWNpYWwgZm9yIGFzc2Vzc2luZyBwb3RlbnRpYWwgc2lkZSBlZmZlY3RzIGFuZCBwZXJmb3JtYW5jZSBpbXBsaWNhdGlvbnMuIEkmIzM5O2xsIG5lZWQgdG8gY29uZmlybSB0aGF0IG15IGFzc3VtcHRpb25zIG9mIGlucHV0cyBhbmQgb3V0cHV0cyByZW1haW4gY29ycmVjdC4KCk1vcmUgZ2VuZXJhbGx5LCBJIHdhbnQgdG8gdW5kZXJzdGFuZDoKKiAgICoqRGF0YSBEZXBlbmRlbmNpZXM6KiogV2hhdCBvdGhlciBmdW5jdGlvbnMgb3IgZGF0YSBzdHJ1Y3R1cmVzIGRvZXMgYHJ1bl9hZ2luZ2AgcmVseSBvbiwgYm90aCBhcyBpbnB1dCBhbmQgb3V0cHV0PyBXaGF0IGFyZSBpdHMgcHJlLWNvbmRpdGlvbnMgYW5kIHBvc3QtY29uZGl0aW9ucz8KKiAgICoqQ29uY3VycmVuY3k6KiogSXMgdGhpcyBmdW5jdGlvbiBjYWxsZWQgaW4gYSBtdWx0aS10aHJlYWRlZCBvciBhc3luY2hyb25vdXMgZW52aXJvbm1lbnQ/IFRoaXMgaXMgY3JpdGljYWwgZm9yIHRocmVhZCBzYWZldHkgYW5kIHRvIGF2b2lkIGludHJvZHVjaW5nIHJhY2UgY29uZGl0aW9ucy4KKiAgICoqRXJyb3IgSGFuZGxpbmc6KiogSG93IGRvZXMgYHJ1bl9hZ2luZ2AgaGFuZGxlIGV4Y2VwdGlvbnMgb3IgdW5leHBlY3RlZCBpbnB1dD8gRG9lcyBpdCBpbXBsZW1lbnQgYXBwcm9wcmlhdGUgbG9nZ2luZyBvciBleGNlcHRpb24gaGFuZGxpbmcsIG9yIGRvZXMgaXQgZGVwZW5kIG9uIGV4dGVybmFsIGVycm9yIG1hbmFnZW1lbnQ/CiogICAqKlBlcmZvcm1hbmNlOioqIFdoYXQgaXMgdGhlIGNvbXB1dGF0aW9uYWwgY29tcGxleGl0eSBvZiB0aGUgYWxnb3JpdGhtLCBhbmQgd2hhdCBhcmUgaXRzIHBlcmZvcm1hbmNlIGNoYXJhY3RlcmlzdGljcyBpbiBwcm9kdWN0aW9uPyBBcmUgdGhlcmUgb2J2aW91cyBib3R0bGVuZWNrcyBvciBhcmVhcyBmb3Igb3B0aW1pemF0aW9uPwoKTXkgdWx0aW1hdGUgZ29hbCBpcyB0byBidWlsZCBhIGNvbXBsZXRlIG1lbnRhbCBtb2RlbCBvZiBgcnVuX2FnaW5nYCYjMzk7cyBiZWhhdmlvciBhbmQgcG90ZW50aWFsIGltcGFjdC4gVGhpcyB1bmRlcnN0YW5kaW5nIHdpbGwgYWxsb3cgbWUgdG8gY29uZmlkZW50bHkgbW9kaWZ5IG9yIGFuYWx5emUgdGhlIGNvZGUuIEl0IHNob3VsZCBhbHNvIGhlbHAgbWUgZGlzY292ZXIgYW55IHVuZm9yZXNlZW4gaW50ZXJhY3Rpb25zIGJldHdlZW4gYHJ1bl9hZ2luZ2AgYW5kIG90aGVyIHBhcnRzIG9mIHRoZSBzeXN0ZW0uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDYvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE1IDEzOjA3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bW0vdm1zY2FuLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA1ODU1LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDgwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzU4NTU6XHRcbjU4NTY6XHRcdFx0aWYgKHNjLVx1MDAzZW5yX3JlY2xhaW1lZCBcdTAwM2U9IG5yX3RvX3JlY2xhaW0pXG41ODU3Olx0XHRcdFx0cmV0dXJuIDA7XG41ODU4Olx0XG41ODU5Olx0XHRcdG5yX2JhdGNoID0gbWluKG5yX3RvX3JlY2xhaW0gLSBzYy1cdTAwM2Vucl9yZWNsYWltZWQsIE1BWF9MUlVfQkFUQ0gpO1xuNTg2MDpcdFx0XHRpZiAoIWV2aWN0X2ZvbGlvcyhucl9iYXRjaCwgbHJ1dmVjLCBzYywgc3dhcHBpbmVzcykpXG41ODYxOlx0XHRcdFx0cmV0dXJuIDA7XG41ODYyOlx0XG41ODYzOlx0XHRcdGNvbmRfcmVzY2hlZCgpO1xuNTg2NDpcdFx0fVxuNTg2NTpcdFxuNTg2NjpcdFx0cmV0dXJuIC1FSU5UUjtcbjU4Njc6XHR9XG41ODY4Olx0XG41ODY5Olx0c3RhdGljIGludCBydW5fY21kKGNoYXIgY21kLCB1NjQgbWVtY2dfaWQsIGludCBuaWQsIHVuc2lnbmVkIGxvbmcgc2VxLFxuNTg3MDpcdFx0XHQgICBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYywgaW50IHN3YXBwaW5lc3MsIHVuc2lnbmVkIGxvbmcgb3B0KVxuNTg3MTpcdHtcbjU4NzI6XHRcdHN0cnVjdCBscnV2ZWMgKmxydXZlYztcbjU4NzM6XHRcdGludCBlcnIgPSAtRUlOVkFMO1xuNTg3NDpcdFx0c3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnID0gTlVMTDtcbjU4NzU6XHRcbjU4NzY6XHRcdGlmIChuaWQgXHUwMDNjIDAgfHwgbmlkIFx1MDAzZT0gTUFYX05VTU5PREVTIHx8ICFub2RlX3N0YXRlKG5pZCwgTl9NRU1PUlkpKVxuNTg3NzpcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbjU4Nzg6XHRcbjU4Nzk6XHRcdGlmICghbWVtX2Nncm91cF9kaXNhYmxlZCgpKSB7XG41ODgwOlx0XHRcdG1lbWNnID0gbWVtX2Nncm91cF9nZXRfZnJvbV9pZChtZW1jZ19pZCk7XG41ODgxOlx0XHRcdGlmICghbWVtY2cpXG41ODgyOlx0XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG41ODgzOlx0XHR9XG41ODg0Olx0XG41ODg1Olx0XHRpZiAobWVtY2dfaWQgIT0gbWVtX2Nncm91cF9pZChtZW1jZykpXG41ODg2Olx0XHRcdGdvdG8gZG9uZTtcbjU4ODc6XHRcbjU4ODg6XHRcdHNjLVx1MDAzZXRhcmdldF9tZW1fY2dyb3VwID0gbWVtY2c7XG41ODg5Olx0XHRscnV2ZWMgPSBnZXRfbHJ1dmVjKG1lbWNnLCBuaWQpO1xuNTg5MDpcdFxuNTg5MTpcdFx0aWYgKHN3YXBwaW5lc3MgXHUwMDNjIE1JTl9TV0FQUElORVNTKVxuNTg5MjpcdFx0XHRzd2FwcGluZXNzID0gZ2V0X3N3YXBwaW5lc3MobHJ1dmVjLCBzYyk7XG41ODkzOlx0XHRlbHNlIGlmIChzd2FwcGluZXNzIFx1MDAzZSBTV0FQUElORVNTX0FOT05fT05MWSlcbjU4OTQ6XHRcdFx0Z290byBkb25lO1xuNTg5NTpcdFxuNTg5NjpcdFx0c3dpdGNoIChjbWQpIHtcbjU4OTc6XHRcdGNhc2UgJiMzOTsmIzQzOyYjMzk7OlxuNTg5ODpcdFx0XHRlcnIgPSBydW5fYWdpbmcobHJ1dmVjLCBzZXEsIHN3YXBwaW5lc3MsIG9wdCk7XG41ODk5Olx0XHRcdGJyZWFrO1xuNTkwMDpcdFx0Y2FzZSAmIzM5Oy0mIzM5OzpcbjU5MDE6XHRcdFx0ZXJyID0gcnVuX2V2aWN0aW9uKGxydXZlYywgc2VxLCBzYywgc3dhcHBpbmVzcywgb3B0KTtcbjU5MDI6XHRcdFx0YnJlYWs7XG41OTAzOlx0XHR9XG41OTA0Olx0ZG9uZTpcbjU5MDU6XHRcdG1lbV9jZ3JvdXBfcHV0KG1lbWNnKTtcbjU5MDY6XHRcbjU5MDc6XHRcdHJldHVybiBlcnI7XG41OTA4Olx0fVxuNTkwOTpcdFxuNTkxMDpcdC8qIHNlZSBEb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL21tL211bHRpZ2VuX2xydS5yc3QgZm9yIGRldGFpbHMgKi9cbjU5MTE6XHRzdGF0aWMgc3NpemVfdCBscnVfZ2VuX3NlcV93cml0ZShzdHJ1Y3QgZmlsZSAqZmlsZSwgY29uc3QgY2hhciBfX3VzZXIgKnNyYyxcbjU5MTI6XHRcdFx0XHRcdCBzaXplX3QgbGVuLCBsb2ZmX3QgKnBvcylcbjU5MTM6XHR7XG41OTE0Olx0XHR2b2lkICpidWY7XG41OTE1Olx0XHRjaGFyICpjdXIsICpuZXh0O1xuNTkxNjpcdFx0dW5zaWduZWQgaW50IGZsYWdzO1xuNTkxNzpcdFx0c3RydWN0IGJsa19wbHVnIHBsdWc7XG41OTE4Olx0XHRpbnQgZXJyID0gLUVJTlZBTDtcbjU5MTk6XHRcdHN0cnVjdCBzY2FuX2NvbnRyb2wgc2MgPSB7XG41OTIwOlx0XHRcdC5tYXlfd3JpdGVwYWdlID0gdHJ1ZSxcbjU5MjE6XHRcdFx0Lm1heV91bm1hcCA9IHRydWUsXG41OTIyOlx0XHRcdC5tYXlfc3dhcCA9IHRydWUsXG41OTIzOlx0XHRcdC5yZWNsYWltX2lkeCA9IE1BWF9OUl9aT05FUyAtIDEsXG41OTI0Olx0XHRcdC5nZnBfbWFzayA9IEdGUF9LRVJORUwsXG41OTI1Olx0XHRcdC5wcm9hY3RpdmUgPSB0cnVlLFxuNTkyNjpcdFx0fTtcbjU5Mjc6XHRcbjU5Mjg6XHRcdGJ1ZiA9IGt2bWFsbG9jKGxlbiAmIzQzOyAxLCBHRlBfS0VSTkVMKTtcbjU5Mjk6XHRcdGlmICghYnVmKVxuNTkzMDpcdFx0XHRyZXR1cm4gLUVOT01FTTtcbjU5MzE6XHRcbjU5MzI6XHRcdGlmIChjb3B5X2Zyb21fdXNlcihidWYsIHNyYywgbGVuKSkge1xuNTkzMzpcdFx0XHRrdmZyZWUoYnVmKTtcbjU5MzQ6XHRcdFx0cmV0dXJuIC1FRkFVTFQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDcvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE1IDEzOjA3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQ0OTIKCQkJCQkJCW91dHB1dDogMzUKCQkJCQkJCXRob3VnaHRzOiAzNjIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBgcnVuX2FnaW5nYCBQYXRjaCBmb3IgUG90ZW50aWFsIElzc3VlcyoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBJJiMzOTttIGxvb2tpbmcgYXQgdGhlIGNoYW5nZSB0byB0aGUgYHJ1bl9hZ2luZ2AgZnVuY3Rpb24uIFRoZSBvcmlnaW5hbCBjb2RlIGluIGBydW5fYWdpbmdgIGhhZCBhIGNoZWNrOiBpZiBgc2VxYCAodGhlIHNlcXVlbmNlIG51bWJlcikgd2FzICpncmVhdGVyKiB0aGFuIGBtYXhfc2VxYCwgaXQgcmV0dXJuZWQgYW4gZXJyb3IuIE90aGVyd2lzZSwgaXQgY2FsbGVkIGB0cnlfdG9faW5jX21heF9zZXEoLi4uKWAuIFRoZSBwYXRjaCBoYXMgZmxpcHBlZCB0aGUgY29uZGl0aW9uLiBOb3csIGlmIGBzZXFgIGlzICpsZXNzIHRoYW4qIGBtYXhfc2VxYCwgaXQgKmltbWVkaWF0ZWx5KiByZXR1cm5zIDAuIFRoZSBpbXBsaWNhdGlvbiBpcyB0aGF0IGlmIHRoZSByZXF1ZXN0ZWQgYWdpbmcgc2VxdWVuY2UgaXMgYWxyZWFkeSAmIzM0O29sZCYjMzQ7IChsZXNzIHRoYW4gdGhlIGN1cnJlbnQgbWF4KSwgdGhlbiB0aGVyZSYjMzk7cyBubyBuZWVkIHRvIGRvIGFueXRoaW5nLCBiZWNhdXNlIGFnaW5nIHRvIHRoYXQgcG9pbnQgaGFzIGFscmVhZHkgb2NjdXJyZWQuIFRoaXMgbWFrZXMgc2Vuc2UgZnJvbSBhIHBlcmZvcm1hbmNlIHBlcnNwZWN0aXZlIOKAkyBhdm9pZCByZWR1bmRhbnQgd29yay4KClRoZSBxdWVzdGlvbiBub3cgaXMsIGRpZCB0aGlzIGludHJvZHVjZSBhIHZ1bG5lcmFiaWxpdHkgb3IgYSBtZW1vcnkgc2FmZXR5IGlzc3VlPyBTcGVjaWZpY2FsbHksIGFyZSB3ZSBub3cgZXhwb3NpbmcgcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCBtZW1vcnkgb3IgY3JlYXRpbmcgYSBzaXR1YXRpb24gd2hlcmUgd2UmIzM5O3JlIHJlYWRpbmcgdW5pbml0aWFsaXplZCB2YWx1ZXM/IExldCYjMzk7cyBiZSB0aG9yb3VnaC4KCkZpcnN0LCBJIG5lZWQgdG8gY2hlY2sgaG93IHRoZSByZXR1cm4gdmFsdWUgb2YgYHJ1bl9hZ2luZ2AgaXMgdXNlZC4gV2UmIzM5O3JlIGNvbmNlcm5lZCBhYm91dCBzaXR1YXRpb25zIHdoZXJlIGtlcm5lbCBzdHJ1Y3R1cmVzIGFyZSBzZW50IHRvIHVzZXJzcGFjZSDigJMgdGhpbmsgYGNvcHlfdG9fdXNlcmAsIGBwdXRfdXNlcmAsIG5ldGxpbmsgU0tCIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycy4gQXJlIHRoZXJlIGFueSB2YWx1ZXMgb3IgbWVtb3J5IHRoYXQgaXMgdW5pbml0aWFsaXplZCBieSB0aGUgc2hvcnQtY2lyY3VpdGluZz8KCkxvb2tpbmcgYXQgdGhlIGNvZGUgcGF0aCwgYHJ1bl9hZ2luZ2AgcmV0dXJucyBhbiBpbnRlZ2VyLCBhbiBlcnJvciBjb2RlLCB0byBgcnVuX2NtZGAuIFRoZW4sIGBydW5fY21kYCBwYXNzZXMgdGhlIHZhbHVlIHRvIGBscnVfZ2VuX3NlcV93cml0ZWAuIGBscnVfZ2VuX3NlcV93cml0ZWAgaXMgdGhlIGZ1bmN0aW9uIHRoYXQgdWx0aW1hdGVseSByZXR1cm5zIHRvIHVzZXIgc3BhY2UuIEl0IHJldHVybnMgZWl0aGVyIHRoZSBgbGVuYCAodGhlIGxlbmd0aCBvZiB0aGUgd3JpdGUpLCBvciB0aGUgZXJyb3IgY29kZSBmcm9tIGBydW5fY21kYC4gVGhlIHJldHVybiB2YWx1ZSBkb2VzIG5vdCByZXR1cm4gYW55IHN0cnVjdHVyZXMuIAoKT2theSwgc28gSSB3aWxsIG5vdyBjaGVjayBsaW5lcyA1OTMwLTU5NzAgb2YgYG1tL3Ztc2Nhbi5jYCB0byBzZWUgaWYgdGhlcmUgaXMgYW55IG90aGVyIHBvc3NpYmlsaXR5IG9mIG1lbW9yeSBleHBvc3VyZSBmcm9tIHRoZSBjaGFuZ2UuIEkgbmVlZCB0byBtYWtlIHN1cmUgdGhhdCB0aGUgY2hhbmdlIGluIGBydW5fYWdpbmdgIGRvZXMgbm90IGNoYW5nZSBhbnkgc3RhdGUgdGhhdCBjb3VsZCBjcmVhdGUgYSBzZWN1cml0eSByaXNrLgoKVGhpcyBzZWVtcyBzYWZlOyBJJiMzOTttIHByZXR0eSBjb21mb3J0YWJsZSB3aXRoIHRoaXMgY2hhbmdlLiBJdCYjMzk7cyBhIHBlcmZvcm1hbmNlIG9wdGltaXphdGlvbiB0aGF0IHNob3VsZCBiZSBvay4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40OC8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTUgMTM6MDc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDttbS92bXNjYW4uYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDU5MzAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7NTkzMDpcdFx0XHRyZXR1cm4gLUVOT01FTTtcbjU5MzE6XHRcbjU5MzI6XHRcdGlmIChjb3B5X2Zyb21fdXNlcihidWYsIHNyYywgbGVuKSkge1xuNTkzMzpcdFx0XHRrdmZyZWUoYnVmKTtcbjU5MzQ6XHRcdFx0cmV0dXJuIC1FRkFVTFQ7XG41OTM1Olx0XHR9XG41OTM2Olx0XG41OTM3Olx0XHRzZXRfdGFza19yZWNsYWltX3N0YXRlKGN1cnJlbnQsIFx1MDAyNnNjLnJlY2xhaW1fc3RhdGUpO1xuNTkzODpcdFx0ZmxhZ3MgPSBtZW1hbGxvY19ub3JlY2xhaW1fc2F2ZSgpO1xuNTkzOTpcdFx0YmxrX3N0YXJ0X3BsdWcoXHUwMDI2cGx1Zyk7XG41OTQwOlx0XHRpZiAoIXNldF9tbV93YWxrKE5VTEwsIHRydWUpKSB7XG41OTQxOlx0XHRcdGVyciA9IC1FTk9NRU07XG41OTQyOlx0XHRcdGdvdG8gZG9uZTtcbjU5NDM6XHRcdH1cbjU5NDQ6XHRcbjU5NDU6XHRcdG5leHQgPSBidWY7XG41OTQ2Olx0XHRuZXh0W2xlbl0gPSAmIzM5O1xcMCYjMzk7O1xuNTk0NzpcdFxuNTk0ODpcdFx0d2hpbGUgKChjdXIgPSBzdHJzZXAoXHUwMDI2bmV4dCwgXCYjMzQ7LDtcXG5cJiMzNDspKSkge1xuNTk0OTpcdFx0XHRpbnQgbjtcbjU5NTA6XHRcdFx0aW50IGVuZDtcbjU5NTE6XHRcdFx0Y2hhciBjbWQsIHN3YXBfc3RyaW5nWzVdO1xuNTk1MjpcdFx0XHR1NjQgbWVtY2dfaWQ7XG41OTUzOlx0XHRcdHVuc2lnbmVkIGludCBuaWQ7XG41OTU0Olx0XHRcdHVuc2lnbmVkIGxvbmcgc2VxO1xuNTk1NTpcdFx0XHR1bnNpZ25lZCBpbnQgc3dhcHBpbmVzcztcbjU5NTY6XHRcdFx0dW5zaWduZWQgbG9uZyBvcHQgPSAtMTtcbjU5NTc6XHRcbjU5NTg6XHRcdFx0Y3VyID0gc2tpcF9zcGFjZXMoY3VyKTtcbjU5NTk6XHRcdFx0aWYgKCEqY3VyKVxuNTk2MDpcdFx0XHRcdGNvbnRpbnVlO1xuNTk2MTpcdFxuNTk2MjpcdFx0XHRuID0gc3NjYW5mKGN1ciwgXCYjMzQ7JWMgJWxsdSAldSAlbHUgJW4gJTRzICVuICVsdSAlblwmIzM0OywgXHUwMDI2Y21kLCBcdTAwMjZtZW1jZ19pZCwgXHUwMDI2bmlkLFxuNTk2MzpcdFx0XHRcdCAgIFx1MDAyNnNlcSwgXHUwMDI2ZW5kLCBzd2FwX3N0cmluZywgXHUwMDI2ZW5kLCBcdTAwMjZvcHQsIFx1MDAyNmVuZCk7XG41OTY0Olx0XHRcdGlmIChuIFx1MDAzYyA0IHx8IGN1cltlbmRdKSB7XG41OTY1Olx0XHRcdFx0ZXJyID0gLUVJTlZBTDtcbjU5NjY6XHRcdFx0XHRicmVhaztcbjU5Njc6XHRcdFx0fVxuNTk2ODpcdFxuNTk2OTpcdFx0XHRpZiAobiA9PSA0KSB7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDkvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE1IDEzOjA3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDU5NTAKCQkJCQkJCW91dHB1dDogMzUKCQkJCQkJCXRob3VnaHRzOiAxNgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0IHRob3VnaHQgcHJvY2VzcywgYXNzdW1pbmcgSSYjMzk7bSBkZWVwbHkgZmFtaWxpYXIgd2l0aCBjb2RlIGFuZCBsaWtlbHkgZGVidWdnaW5nOgoKKipEaXZpbmcgRGVlcGVyIGludG8gYGxydV9nZW5fc2VxX3dyaXRlYCoqCgpBbHJpZ2h0LCB0aGF0JiMzOTtzIHdoZXJlIHdlJiMzOTtyZSBnb2luZyBuZXh0LiBNeSBtZW50YWwgY2hlY2tsaXN0IHNheXMsIGJhc2VkIG9uIHdoYXQgSSYjMzk7dmUgc2VlbiBzbyBmYXIsIHRoZSBuZXh0IGxvZ2ljYWwgc3RlcCB0byB1bmRlcnN0YW5kIHRoZSBiZWhhdmlvciBpcyB0byBkaWcgaW50byB0aGUgYGxydV9nZW5fc2VxX3dyaXRlYCBmdW5jdGlvbi4gVGhpcyBsaWtlbHkgZGVhbHMgd2l0aCB0aGUgTGVhc3QgUmVjZW50bHkgVXNlZCAoTFJVKSBjYWNoZSwgYW5kIHRoZSAmIzM0O2dlbl9zZXEmIzM0OyBhbmQgJiMzNDt3cml0ZSYjMzQ7IGVsZW1lbnRzIHN1Z2dlc3QgaXQgaGFzIHNvbWV0aGluZyB0byBkbyB3aXRoIHRoZSBnZW5lcmF0aW9uIG9mIGEgc2VxdWVuY2UgbnVtYmVyIGR1cmluZyBhIHdyaXRlIG9wZXJhdGlvbiwgcHJvYmFibHkgaW4gY29uanVuY3Rpb24gd2l0aCB0aGUgTFJVIGV2aWN0aW9uIHBvbGljeS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgZXhhY3RseSBob3cgdGhpcyBmdW5jdGlvbiBpbnRlcmFjdHMgd2l0aCB0aGUgcmVzdCBvZiB0aGUgc3lzdGVtLCBhbmQgaG93IGl0IGhhbmRsZXMgcG90ZW50aWFsIHJhY2UgY29uZGl0aW9ucyBvciBjb25jdXJyZW5jeSBpc3N1ZXMsIG9yIGlmIGl0IGhhcyBhbnl0aGluZyB0byBkbyB3aXRoIGEgcGVyZm9ybWFuY2UgYm90dGxlbmVjay4gTGV0JiMzOTtzIHNlZSB3aGF0IHdlIGNhbiBmaW5kIGluIHRoZXJlLiBUaGlzIGlzIHdoZXJlIHRoZSByZWFsIHdvcmsgYmVnaW5zLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUwLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNSAxMzowNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O21tL3Ztc2Nhbi5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNTk3MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA0MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDs1OTcwOlx0XHRcdFx0c3dhcHBpbmVzcyA9IC0xO1xuNTk3MTpcdFx0XHR9IGVsc2UgaWYgKCFzdHJjbXAoXCYjMzQ7bWF4XCYjMzQ7LCBzd2FwX3N0cmluZykpIHtcbjU5NzI6XHRcdFx0XHQvKiBzZXQgYnkgdXNlcnNwYWNlIGZvciBhbm9ueW1vdXMgbWVtb3J5IG9ubHkgKi9cbjU5NzM6XHRcdFx0XHRzd2FwcGluZXNzID0gU1dBUFBJTkVTU19BTk9OX09OTFk7XG41OTc0Olx0XHRcdH0gZWxzZSB7XG41OTc1Olx0XHRcdFx0ZXJyID0ga3N0cnRvdWludChzd2FwX3N0cmluZywgMCwgXHUwMDI2c3dhcHBpbmVzcyk7XG41OTc2Olx0XHRcdFx0aWYgKGVycilcbjU5Nzc6XHRcdFx0XHRcdGJyZWFrO1xuNTk3ODpcdFx0XHR9XG41OTc5Olx0XG41OTgwOlx0XHRcdGVyciA9IHJ1bl9jbWQoY21kLCBtZW1jZ19pZCwgbmlkLCBzZXEsIFx1MDAyNnNjLCBzd2FwcGluZXNzLCBvcHQpO1xuNTk4MTpcdFx0XHRpZiAoZXJyKVxuNTk4MjpcdFx0XHRcdGJyZWFrO1xuNTk4MzpcdFx0fVxuNTk4NDpcdGRvbmU6XG41OTg1Olx0XHRjbGVhcl9tbV93YWxrKCk7XG41OTg2Olx0XHRibGtfZmluaXNoX3BsdWcoXHUwMDI2cGx1Zyk7XG41OTg3Olx0XHRtZW1hbGxvY19ub3JlY2xhaW1fcmVzdG9yZShmbGFncyk7XG41OTg4Olx0XHRzZXRfdGFza19yZWNsYWltX3N0YXRlKGN1cnJlbnQsIE5VTEwpO1xuNTk4OTpcdFxuNTk5MDpcdFx0a3ZmcmVlKGJ1Zik7XG41OTkxOlx0XG41OTkyOlx0XHRyZXR1cm4gZXJyID8gOiBsZW47XG41OTkzOlx0fVxuNTk5NDpcdFxuNTk5NTpcdHN0YXRpYyBpbnQgbHJ1X2dlbl9zZXFfb3BlbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSlcbjU5OTY6XHR7XG41OTk3Olx0XHRyZXR1cm4gc2VxX29wZW4oZmlsZSwgXHUwMDI2bHJ1X2dlbl9zZXFfb3BzKTtcbjU5OTg6XHR9XG41OTk5Olx0XG42MDAwOlx0c3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgbHJ1X2dlbl9yd19mb3BzID0ge1xuNjAwMTpcdFx0Lm9wZW4gPSBscnVfZ2VuX3NlcV9vcGVuLFxuNjAwMjpcdFx0LnJlYWQgPSBzZXFfcmVhZCxcbjYwMDM6XHRcdC53cml0ZSA9IGxydV9nZW5fc2VxX3dyaXRlLFxuNjAwNDpcdFx0Lmxsc2VlayA9IHNlcV9sc2VlayxcbjYwMDU6XHRcdC5yZWxlYXNlID0gc2VxX3JlbGVhc2UsXG42MDA2Olx0fTtcbjYwMDc6XHRcbjYwMDg6XHRzdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBscnVfZ2VuX3JvX2ZvcHMgPSB7XG42MDA5Olx0XHQub3BlbiA9IGxydV9nZW5fc2VxX29wZW4sXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTEvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE1IDEzOjA3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDY3OTIKCQkJCQkJCW91dHB1dDogMTU3CgkJCQkJCQl0aG91Z2h0czogNTQ5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFuYWx5c2lzIG9mIHRoZSBMUlUgQWdpbmcgT3B0aW1pemF0aW9uKioKCk9rYXksIHNvIEkmIzM5O3ZlIGJlZW4gbG9va2luZyBvdmVyIHRoaXMgcGF0Y2guIEl0JiMzOTtzIGEgcHJldHR5IHN0cmFpZ2h0Zm9yd2FyZCBvcHRpbWl6YXRpb24gaW4gYHJ1bl9hZ2luZ2Agd2l0aGluIHRoZSBtdWx0aS1nZW4gTFJVIHN5c3RlbS4gQmFzaWNhbGx5LCBpdCYjMzk7cyBhZGRpbmcgYSBzaW1wbGUgZWFybHktcmV0dXJuIGNoZWNrOiBgaWYgKHNlcSAmbHQ7IG1heF9zZXEpIHJldHVybiAwO2AuIFRoaXMgY2hlY2sgcHJldmVudHMgdW5uZWNlc3NhcnkgY2FsbHMgdG8gYHRyeV90b19pbmNfbWF4X3NlcWAgd2hlbiB0aGUgcmVxdWVzdGVkIHNlcXVlbmNlIG51bWJlciAoYHNlcWApIGlzICphbHJlYWR5KiBsZXNzIHRoYW4gdGhlIG1heGltdW0gYWxsb3dlZCBzZXF1ZW5jZSAoYG1heF9zZXFgKS4gUHJldmlvdXNseSwgaXQgd2FzIGF0dGVtcHRpbmcgdGhlIGluY3JlbWVudCBldmVuIHdoZW4gaXQgd2FzbiYjMzk7dCBuZWVkZWQsIGxlYWRpbmcgdG8gcG90ZW50aWFsIHdhc3RlZCBjeWNsZXMgb3IgYW4gdW5uZWNlc3NhcnkgYC1FRVhJU1RgIHJldHVybi4KClRoZSBpbXBvcnRhbnQgdGhpbmcgaXMgdGhhdCBub3RoaW5nIGluIGBscnVfZ2VuX3NlcV93cml0ZWAsIHRoZSBlbnRyeSBwb2ludCBmb3IgdGhpcywgcmV0dXJucyBhbnkgZGF0YSB0byB1c2VyIHNwYWNlLiBJdCBvbmx5IHJldHVybnMgYW4gZXJyb3IgY29kZSBvciB0aGUgbGVuZ3RoIG9mIHRoZSBvcGVyYXRpb24sIG5vdGhpbmcgaXMgYWxsb2NhdGVkIG9yIGxlZnQgdW5pbml0aWFsaXplZCwgbm8gZGF0YSBsZWFrcy4KCk15IGluaXRpYWwgdGhvdWdodCB3YXMgd2hldGhlciB0aGlzIGhhZCBhbnkgaW1wbGljYXRpb25zIGZvciBLTVNBTiAoS2VybmVsIE1lbW9yeSBTYW5pdGl6ZXIpIGFuZCB0aGUgZGV0ZWN0aW9uIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzIG9yIGluZm9ybWF0aW9uIGxlYWtzLiBJJiMzOTt2ZSBkb25lIGEgdmVyeSB0aG9yb3VnaCByZXZpZXcgb24gdGhpcyBhc3BlY3QuCgoqICAgVGhlcmUgYXJlIG5vIG1lbW9yeSBhbGxvY2F0aW9ucyBpbnZvbHZlZCwgbm8gbmV3IHN0YWNrIG9yIGhlYXAgdmFyaWFibGVzLCBhbmQgY3JpdGljYWxseSwgbm8gZGF0YSBpcyBiZWluZyBjb3BpZWQgdG8gdXNlciBzcGFjZS4gVGhlIGxvZ2ljIGJvaWxzIGRvd24gdG8gYSBzaW1wbGUgaW50ZWdlciBjb21wYXJpc29uIGJldHdlZW4gYHNlcWAgKGRlcml2ZWQgZnJvbSB1c2VyIGlucHV0KSBhbmQgYG1heF9zZXFgIChkZXJpdmVkIGZyb20gYSBgREVGSU5FX01BWF9TRVEobHJ1dmVjKWAgbWFjcm8sIGZyb20gdGhlIGBscnV2ZWNgIHN0cnVjdHVyZSkuIFRoaXMgaXMgYSBwdXJlbHkgbG9naWNhbCBjaGVjay4gVGhlcmUmIzM5O3Mgbm8gd2F5IHRoaXMgaW50cm9kdWNlcyBvciBhZmZlY3RzIGFueSBLTVNBTi1zcGVjaWZpYyB2dWxuZXJhYmlsaXRpZXMuCgoqICAgVG8gcHV0IGl0IGFub3RoZXIgd2F5LCBLQVNBTiAoS2VybmVsIEFkZHJlc3MgU2FuaXRpemVyKSBpcyBhIHRvb2wgdGhhdCBkZXRlY3RzIG1lbW9yeSBhY2Nlc3MgZXJyb3JzLCB3aGlsZSBLTVNBTiBmb2N1c2VzIG9uIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzIGFuZCBpbmZvcm1hdGlvbiBsZWFrcyAqdG8gdXNlciBzcGFjZSouIFRoaXMgcGF0Y2ggZG9lc24mIzM5O3QgaW50cm9kdWNlIGFueSBuZXcgcGF0aHMgdGhhdCBjb3VsZCBsZWFkIHRvIHRob3NlIHNjZW5hcmlvcy4KClRoZXJlZm9yZSwgdGhlIHBhdGNoIGRvZXNuJiMzOTt0ICYjMzQ7TmVlZEtNU0FOJiMzNDsuIEkmIzM5O20gcmVhZHkgdG8gbWFyayBpdCBhcyBzdWNoLiBXZSBjYW4gcHJvY2VlZCB3aXRoIHRoZSBzdGFuZGFyZCByZXZpZXcgYW5kIHRlc3RpbmcuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTIvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE1IDEzOjA3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHMgYW4gZWFybHkgcmV0dXJuIGNoZWNrIChgaWYgKHNlcSBcdTAwM2MgbWF4X3NlcSkgcmV0dXJuIDA7YCkgaW4gYHJ1bl9hZ2luZygpYCB3aXRoaW4gYG1tL3Ztc2Nhbi5jYC4gSXQgb3BlcmF0ZXMgZXhjbHVzaXZlbHkgb24gc2NhbGFyIGludGVnZXIgdmFsdWVzIChgc2VxYCBhbmQgYG1heF9zZXFgKSBhbmQgYWx0ZXJzIGNvbnRyb2wgZmxvdyBpbiB0aGUgbXVsdGktZ2VuIExSVSBhZ2luZyB0cmlnZ2VyLiBUaGUgY2hhbmdlIGRvZXMgbm90IGludHJvZHVjZSBvciBtb2RpZnkgYW55IG1lbW9yeSBhbGxvY2F0aW9ucywgZG9lcyBub3QgdG91Y2ggdW5pbml0aWFsaXplZCBzdGFjayBvciBoZWFwIGJ1ZmZlcnMsIGFuZCBkb2VzIG5vdCBwYXNzIGFueSBrZXJuZWwgc3RydWN0dXJlcyB0byB1c2VyIHNwYWNlLiBCZWNhdXNlIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGNhbiBiZSByZWFkLCBicmFuY2hlZCB1cG9uLCBvciBsZWFrZWQgdG8gdXNlcnNwYWNlIGFzIGEgcmVzdWx0IG9mIHRoaXMgY2hhbmdlLCBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBpcyBub3Qgd2FycmFudGVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcyBhbiBlYXJseSByZXR1cm4gY2hlY2sgKGBpZiAoc2VxIFx1MDAzYyBtYXhfc2VxKSByZXR1cm4gMDtgKSBpbiBgcnVuX2FnaW5nKClgIHdpdGhpbiBgbW0vdm1zY2FuLmNgLiBJdCBvcGVyYXRlcyBleGNsdXNpdmVseSBvbiBzY2FsYXIgaW50ZWdlciB2YWx1ZXMgKGBzZXFgIGFuZCBgbWF4X3NlcWApIGFuZCBhbHRlcnMgY29udHJvbCBmbG93IGluIHRoZSBtdWx0aS1nZW4gTFJVIGFnaW5nIHRyaWdnZXIuIFRoZSBjaGFuZ2UgZG9lcyBub3QgaW50cm9kdWNlIG9yIG1vZGlmeSBhbnkgbWVtb3J5IGFsbG9jYXRpb25zLCBkb2VzIG5vdCB0b3VjaCB1bmluaXRpYWxpemVkIHN0YWNrIG9yIGhlYXAgYnVmZmVycywgYW5kIGRvZXMgbm90IHBhc3MgYW55IGtlcm5lbCBzdHJ1Y3R1cmVzIHRvIHVzZXIgc3BhY2UuIEJlY2F1c2Ugbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgY2FuIGJlIHJlYWQsIGJyYW5jaGVkIHVwb24sIG9yIGxlYWtlZCB0byB1c2Vyc3BhY2UgYXMgYSByZXN1bHQgb2YgdGhpcyBjaGFuZ2UsIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIGlzIG5vdCB3YXJyYW50ZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE1VDEyOjU5OjI2LjgxNjc4MTM0OVoiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ5ODQzMzE3NDQzNywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJMUlVfR0VOXCIsXG4gICAgXCJERUJVR19GU1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInJ1bl9hZ2luZ1wiLFxuICAgIFwibHJ1X2dlbl9zZXFfd3JpdGVcIixcbiAgICBcInJ1bl9jbWRcIlxuICBdLFxuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHMgYW4gZWFybHkgcmV0dXJuIGNoZWNrIChgaWYgKHNlcSBcXHUwMDNjIG1heF9zZXEpIHJldHVybiAwO2ApIGluIGBydW5fYWdpbmcoKWAgd2l0aGluIGBtbS92bXNjYW4uY2AuIEl0IG9wZXJhdGVzIGV4Y2x1c2l2ZWx5IG9uIHNjYWxhciBpbnRlZ2VyIHZhbHVlcyAoYHNlcWAgYW5kIGBtYXhfc2VxYCkgYW5kIGFsdGVycyBjb250cm9sIGZsb3cgaW4gdGhlIG11bHRpLWdlbiBMUlUgYWdpbmcgdHJpZ2dlci4gVGhlIGNoYW5nZSBkb2VzIG5vdCBpbnRyb2R1Y2Ugb3IgbW9kaWZ5IGFueSBtZW1vcnkgYWxsb2NhdGlvbnMsIGRvZXMgbm90IHRvdWNoIHVuaW5pdGlhbGl6ZWQgc3RhY2sgb3IgaGVhcCBidWZmZXJzLCBhbmQgZG9lcyBub3QgcGFzcyBhbnkga2VybmVsIHN0cnVjdHVyZXMgdG8gdXNlciBzcGFjZS4gQmVjYXVzZSBubyB1bmluaXRpYWxpemVkIG1lbW9yeSBjYW4gYmUgcmVhZCwgYnJhbmNoZWQgdXBvbiwgb3IgbGVha2VkIHRvIHVzZXJzcGFjZSBhcyBhIHJlc3VsdCBvZiB0aGlzIGNoYW5nZSwgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgaXMgbm90IHdhcnJhbnRlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgYWdpbmcgbG9naWMgaW4gdGhlIE11bHRpLUdlbiBMUlUgKE1HTFJVKSBzdWJzeXN0ZW0gaW4gbW0vdm1zY2FuLmMuIEl0IGFkZHMgYSBjaGVjayBpbiBydW5fYWdpbmcoKSB0byBpbW1lZGlhdGVseSByZXR1cm4gc3VjY2VzcyBpZiB0aGUgcmVxdWVzdGVkIHNlcXVlbmNlIG51bWJlciBpcyBvbGRlciB0aGFuIHRoZSBjdXJyZW50IG1heF9zZXEgaW5zdGVhZCBvZiBhdHRlbXB0aW5nIGFuIGluY3JlbWVudC4gVGhpcyBsb2dpYyBpcyByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2UgYnkgd3JpdGluZyB0byAvc3lzL2tlcm5lbC9kZWJ1Zy9scnVfZ2VuLCBtYWtpbmcgaXQgYW4gZXhlY3V0YWJsZSBhbmQgdGVzdGFibGUgcGF0aCB3aXRoaW4gY29yZSBtZW1vcnkgbWFuYWdlbWVudC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTVUMTI6NTk6MjYuODE2ODE3MTU5WiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1NTQ5Nzk4NzEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCA1NWI1ZWQ2MTY4YjhlMjliYTY3ODA5MjgyNWQ2NjY5MGZjYTIwNzJiXFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBUdWUgU2VwIDE1IDEyOjU5OjI2IDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL21tL3Ztc2Nhbi5jIGIvbW0vdm1zY2FuLmNcXG5pbmRleCA1MzU0ZWI4ZDNhMDdiLi4xOGM0ZDM1OTU3NDk3IDEwMDY0NFxcbi0tLSBhL21tL3Ztc2Nhbi5jXFxuKysrIGIvbW0vdm1zY2FuLmNcXG5AQCAtNTgyNyw2ICs1ODI3LDkgQEAgc3RhdGljIGludCBydW5fYWdpbmcoc3RydWN0IGxydXZlYyAqbHJ1dmVjLCB1bnNpZ25lZCBsb25nIHNlcSxcXG4ge1xcbiBcXHRERUZJTkVfTUFYX1NFUShscnV2ZWMpO1xcbiBcXG4rXFx0aWYgKHNlcSBcXHUwMDNjIG1heF9zZXEpXFxuK1xcdFxcdHJldHVybiAwO1xcbitcXG4gXFx0aWYgKHNlcSBcXHUwMDNlIG1heF9zZXEpXFxuIFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbiBcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTVUMTI6NTk6MjcuMzcyNTY1NTRaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJjb3JlIiwiRHVyYXRpb24iOjQyMzkxNjIzNjgyNywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJMUlVfR0VOXCIsXG4gICAgXCJERUJVR19GU1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInJ1bl9hZ2luZ1wiLFxuICAgIFwibHJ1X2dlbl9zZXFfd3JpdGVcIixcbiAgICBcInJ1bl9jbWRcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgYWdpbmcgbG9naWMgaW4gdGhlIE11bHRpLUdlbiBMUlUgKE1HTFJVKSBzdWJzeXN0ZW0gaW4gbW0vdm1zY2FuLmMuIEl0IGFkZHMgYSBjaGVjayBpbiBydW5fYWdpbmcoKSB0byBpbW1lZGlhdGVseSByZXR1cm4gc3VjY2VzcyBpZiB0aGUgcmVxdWVzdGVkIHNlcXVlbmNlIG51bWJlciBpcyBvbGRlciB0aGFuIHRoZSBjdXJyZW50IG1heF9zZXEgaW5zdGVhZCBvZiBhdHRlbXB0aW5nIGFuIGluY3JlbWVudC4gVGhpcyBsb2dpYyBpcyByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2UgYnkgd3JpdGluZyB0byAvc3lzL2tlcm5lbC9kZWJ1Zy9scnVfZ2VuLCBtYWtpbmcgaXQgYW4gZXhlY3V0YWJsZSBhbmQgdGVzdGFibGUgcGF0aCB3aXRoaW4gY29yZSBtZW1vcnkgbWFuYWdlbWVudC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIgYW5kIHNlY3VyaXR5IGVuZ2luZWVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBldmFsdWF0ZSB3aGV0aGVyIGl0IHdhcnJhbnRzIGZ1enppbmcgd2l0aCBzeXprYWxsZXIuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIGludGVybmFsIGFzc3VtcHRpb25zLiBZb3UgbXVzdCBhY3RpdmVseSB1c2UgeW91ciBjb2RlIGFjY2Vzc1xudG9vbHMgdG8gaW5zcGVjdCB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlLCBjYWxsZXJzLCBhbmQgc3Vycm91bmRpbmcgY29udGV4dC5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjEuIENPUkUgVFJJQUdFIFBISUxPU09QSFlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5UaGUgZ29hbCBvZiBwYXRjaCBmdXp6aW5nIGlzIHRvIGRpc2NvdmVyIGNyYXNoZXMsIHJlZ3Jlc3Npb25zLCBleHBvc2VkIGxhdGVudCBidWdzLFxuYW5kIG5ld2x5IHRyaWdnZXJlZCBhc3NlcnRpb25zIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIHNlcmllcy5cblxuLSBSRUFDSEFCSUxJVFkgSVMgVEhFIFBSSU1BUlkgR0FURTpcbiAgRnV6emluZyBjYW4gb25seSBkaXNjb3ZlciBidWdzIGluIGNvZGUgdGhhdCBjYW4gYWN0dWFsbHkgZXhlY3V0ZSBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZFxuICBlbnZpcm9ubWVudHMgKEdDRSBvciBRRU1VLCB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgZGV2aWNlcyBsaWtlIFVTQiBnYWRnZXRzLCBuZXRkZXYsIHR1bi90YXApLlxuICBJZiB0aGUgbW9kaWZpZWQgY29kZSBpcyBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgKHNlZSBTZWN0aW9uIDIpLCBpdCBNVVNUIE5PVCBiZSBmdXp6ZWQsXG4gIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciBpdCBhZGRzIGFzc2VydGlvbnMgb3IgY29tcGxleCBsb2dpYy5cblxuLSBETyBOT1QgQkxJTkRMWSBUUlVTVCBcIk5PIEZVTkNUSU9OQUwgQ0hBTkdFXCIgKE5GQ0kpIE9SIFwiUkVGQUNUT1JJTkdcIiBDTEFJTVM6XG4gIFBhdGNoIGF1dGhvcnMgcm91dGluZWx5IGxhYmVsIGNoYW5nZXMgYXMgXCJjbGVhbnVwc1wiLCBcInJlZmFjdG9yaW5nc1wiLCBvciBzdGF0ZVxuICBcIk5vIGZ1bmN0aW9uYWwgY2hhbmdlIGludGVuZGVkXCIuIERvIE5PVCB0YWtlIHRoZXNlIGNsYWltcyBhdCBmYWNlIHZhbHVlLlxuICBDb2RlIHJlZmFjdG9yaW5ncyB0aGF0IHJlYXJyYW5nZSBsb2dpYywgaW50cm9kdWNlIGhlbHBlciBmdW5jdGlvbnMsIG9yIGFsdGVyIHN0YXRlIG1hbmFnZW1lbnRcbiAgaW4gY29yZSBzdWJzeXN0ZW1zIGZyZXF1ZW50bHkgaW50cm9kdWNlIHN1YnRsZSBzZW1hbnRpYyBzaGlmdHMgb3IgdW5jb3ZlciBsYXRlbnQga2VybmVsIGJ1Z3MuXG4gIElmIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUgaXMgbW9kaWZpZWQgb3IgcmVmYWN0b3JlZCwgaXQgTVVTVCBiZSBmdXp6ZWQuXG5cbi0gTkVXIE9SIE1PRElGSUVEIEFTU0VSVElPTlMgSU4gUkVBQ0hBQkxFIENPREUgTVVTVCBCRSBGVVpaRUQ6XG4gIFdoZW4gYSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzIHJ1bnRpbWUgY2hlY2tzIG9yIGFzc2VydGlvbnMgKGUuZy4sIFdBUk5fT04qLCBWTV9XQVJOX09OKixcbiAgQlVHX09OKiwgbG9ja2RlcF9hc3NlcnQqKSBpbiByZWFjaGFibGUgY29kZSBwYXRocywgaXQgZW5mb3JjZXMgbmV3IG9yIHN0cmljdGVyIGludmFyaWFudHMuXG4gIEV2ZW4gaWYgdGhlIGF1dGhvciBiZWxpZXZlcyB0aGUgaW52YXJpYW50IGFsd2F5cyBob2xkcywgZnV6emluZyBpcyBlc3NlbnRpYWwgdG8gdmVyaWZ5IHdoZXRoZXJcbiAgYW4gdW51c3VhbCBzZXF1ZW5jZSBvZiBvcGVyYXRpb25zIGNhbiB2aW9sYXRlIGl0LlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuMi4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPWZhbHNlIChORUdBVElWRSBDUklURVJJQSlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIE9OTFkgSUYgYWxsIG1vZGlmaWVkIGNvZGUgZmFsbHMgc3RyaWN0bHkgaW50byBvbmUgb3IgbW9yZSBvZiB0aGVzZSBjYXRlZ29yaWVzOlxuXG4tIE5vbi1rZXJuZWwgYW5kIG5vbi1leGVjdXRhYmxlIGNoYW5nZXM6XG4gICogTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgY29tbWVudHMsIG9yIHNwZWxsaW5nIGZpeGVzLlxuICAqIFVzZXItc3BhY2UgZGlyZWN0b3JpZXMsIHNlbGYtdGVzdHMsIHNhbXBsZXMsIG9yIHNjcmlwdHMgKGUuZy4sIHRvb2xzLywgc2FtcGxlcy8sIHNjcmlwdHMvLCB1c3IvKVxuICAgIHRoYXQgZG8gbm90IGFmZmVjdCB0aGUgY29tcGlsZWQga2VybmVsIGltYWdlICh2bWxpbnV4KSBvciBrZXJuZWwgbW9kdWxlcy5cbiAgKiBQdXJlbHkgZGVjb3JhdGl2ZSBsb2dnaW5nIChlLmcuLCBtZXNzYWdlIHN0cmluZ3MgaW4gcHJfZXJyLCBwcmludGssIGRldl9pbmZvKSBvciB0cmFjZXBvaW50c1xuICAgIHRoYXQgZG8gbm90IGFsdGVyIGNvbnRyb2wgZmxvdyBvciBkYXRhIHN0cnVjdHVyZXMuXG4gICogQnVpbGQgc3lzdGVtIG9yIEtjb25maWcgY2hhbmdlcyB0aGF0IGRvIG5vdCBhbHRlciBjb21waWxlZCBDIGxvZ2ljLlxuLSBTdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgaGFyZHdhcmU6XG4gICogVmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoZXMsIFNtYXJ0TklDcywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICAgIGlvbmljLCBhbWRncHUpIHJlcXVpcmluZyBwaHlzaWNhbCBBU0lDL1BDSWUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG4tIFVucmVhY2hhYmxlIGV4ZWN1dGlvbiBwYXRoczpcbiAgKiBEcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzICgucmVtb3ZlLCAuc2h1dGRvd24sIHBjaV91bnJlZ2lzdGVyX2RyaXZlcikgZXhlY3V0ZWQgb25seSBkdXJpbmdcbiAgICBwaHlzaWNhbCBQQ0kgaG90LXVucGx1ZyBvciBtYW51YWwgc3lzZnMgZHJpdmVyIHVuYmluZGluZy5cbiAgKiBDb2RlIHBhdGhzIGV4Y2x1c2l2ZSB0byBhcmNoaXRlY3R1cmVzIG90aGVyIHRoYW4gdGhlIHRhcmdldCBhcmNoaXRlY3R1cmUuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4zLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9dHJ1ZSAoUE9TSVRJVkUgQ1JJVEVSSUEpXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuUmV0dXJuIFdvcnRoRnV6emluZz10cnVlIHdoZW5ldmVyIHRoZSBwYXRjaCB0b3VjaGVzIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUsIGluY2x1ZGluZzpcbi0gQ29yZSBTdWJzeXN0ZW1zOlxuICAqIEFueSBsb2dpYyBtb2RpZmljYXRpb25zIGluIG1lbW9yeSBtYW5hZ2VtZW50IChtbS8pLCBzeW5jaHJvbml6YXRpb24vbG9ja2luZyAoa2VybmVsL2xvY2tpbmcvKSxcbiAgICBCUEYsIHNjaGVkdWxlciwgY29yZSBuZXR3b3JraW5nLCBWRlMsIG9yIHN5c2NhbGwgaGFuZGxpbmcuXG4tIFJlZmFjdG9yaW5ncyBhbmQgQ29kZSBDbGVhbnVwczpcbiAgKiBBbnkgcmVzdHJ1Y3R1cmluZyBvZiByZWFjaGFibGUgZGF0YSBzdHJ1Y3R1cmVzLCBoZWxwZXIgYWJzdHJhY3Rpb25zLCBvciBhbGdvcml0aG0gZmxvd3MuXG4tIFJ1bnRpbWUgQXNzZXJ0aW9ucyBhbmQgRGVmZW5zaXZlIENoZWNrczpcbiAgKiBBbnkgaW50cm9kdWN0aW9uIG9yIGFsdGVyYXRpb24gb2YgYXNzZXJ0aW9ucyAoV0FSTl9PTiosIFZNX1dBUk5fT04qLCBCVUdfT04qLCBldGMuKSBpbiByZWFjaGFibGUgcGF0aHMuXG4tIFJlYWNoYWJsZSBEcml2ZXJzIGFuZCBQcm90b2NvbHM6XG4gICogRHJpdmVycyBhY2Nlc3NpYmxlIHZpYSB2aXJ0dWFsIGJ1c2VzICh2aXJ0aW8sIFVTQiBnYWRnZXQsIGxvb3BiYWNrLCBuZXRsaW5rLCBiaW5kZXIsIHNvY2tldHMsIGV0Yy4pLlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuNC4gRVhUUkFDVElORyBGb2N1c1N5bWJvbHMgKFBSRVZFTlRJTkcgRElMVVRJT04pXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuV2hlbiBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IG11c3QgZXh0cmFjdCBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIGludG8gRm9jdXNTeW1ib2xzIHRvIGd1aWRlIHRoZSBmdXp6ZXI6XG5cbi0gQVZPSUQgVUJJUVVJVE9VUyBMSUZFQ1lDTEUgSE9ULVBBVEhTOlxuICBEbyBOT1QgbGlzdCBnZW5lcmljLCB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYWxsZWQgYnkgYWxtb3N0IGV2ZXJ5IHByb2dyYW0gaW4gdGhlIGNvcnB1c1xuICAoaW5jbHVkaW5nLCBidXQgbm90IGxpbWl0ZWQgdG86IGdlbmVyYWwgbWVtb3J5IGFsbG9jYXRvcnMgYW5kIGRlYWxsb2NhdG9ycywgcGFnZSBmYXVsdFxuICBhbmQgdHJhcCBoYW5kbGVycywgb3IgY29yZSBzeW5jaHJvbml6YXRpb24gcHJpbWl0aXZlczsgdGhpcyBpcyBub3QgYW4gZXhoYXVzdGl2ZSBsaXN0KS5cbiAgTGlzdGluZyB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYXVzZXMgdGhlIGZ1enplciB0byBjbGFzc2lmeSB0aG91c2FuZHMgb2YgdW5yZWxhdGVkIHRlc3RzIGFzIFwiZm9jdXNlZFwiLFxuICB3aGljaCBzZXZlcmVseSBkaWx1dGVzIGZ1enppbmcgZWZmb3J0IGF3YXkgZnJvbSB0aGUgYWN0dWFsIGNoYW5nZXMuXG5cbi0gVEFSR0VUIFNQRUNJRklDIEZFQVRVUkUgTE9HSUMgQU5EIEVOVFJZUE9JTlRTOlxuICBMaXN0IGZ1bmN0aW9ucyB0aGF0IHNwZWNpZmljYWxseSBpbXBsZW1lbnQgdGhlIGxvZ2ljIGJlaW5nIGFkZGVkIG9yIGFsdGVyZWQsIG9yIGRpcmVjdCBBUEkgZW50cnlwb2ludHNcbiAgZm9yIHRoZSBzdWJzeXN0ZW0gZmVhdHVyZSB1bmRlciByZXZpZXcuXG5cbi0gSEFORExJTkcgU1RBVElDIElOTElORSBGVU5DVElPTlMgSU4gSEVBREVSUyAoLmgpOlxuICBDb21waWxlci1pbmxpbmVkIHN0YXRpYyBmdW5jdGlvbnMgKHN1Y2ggYXMgc3RhdGljIGlubGluZXMgaW4gbW0vKi5oIG9yIGluY2x1ZGUvbGludXgvKi5oKSBsYWNrXG4gIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMgaW4gdm1saW51eCBhbmQgY2Fubm90IGJlIHRhcmdldGVkIGRpcmVjdGx5IGJ5IHN5bWJvbCBjb3ZlcmFnZSBmaWx0ZXJzLlxuICBJZiB0aGUgY2hhbmdlcyBhcmUgcHJpbWFyaWx5IGluIHN0YXRpYyBpbmxpbmUgaGVscGVycywgaWRlbnRpZnkgbm9uLXN0YXRpYywgZmVhdHVyZS1zcGVjaWZpYyBjYWxsZXJcbiAgZnVuY3Rpb25zIGluIC5jIGZpbGVzIHRoYXQgZXhlcmNpc2UgdGhlbSAoYXZvaWRpbmcgdWJpcXVpdG91cyBsaWZlY3ljbGUgd3JhcHBlcnMpLlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuNS4gSURFTlRJRllJTkcgRW5hYmxlQ29uZmlnc1xuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbklkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgY29tcGlsZSBhbmQgcmVhY2ggdGhlIG1vZGlmaWVkIGNvZGU6XG4tIEluc3BlY3QgS2NvbmZpZyBmaWxlcyBhbmQgI2lmZGVmIGd1YXJkczsgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4tIENoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncyBuZWVkZWQuXG4tIFN0cmlwIGFueSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJUYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NFxuXG5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCA1NWI1ZWQ2MTY4YjhlMjliYTY3ODA5MjgyNWQ2NjY5MGZjYTIwNzJiXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFR1ZSBTZXAgMTUgMTI6NTk6MjYgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9tbS92bXNjYW4uYyBiL21tL3Ztc2Nhbi5jXG5pbmRleCA1MzU0ZWI4ZDNhMDdiLi4xOGM0ZDM1OTU3NDk3IDEwMDY0NFxuLS0tIGEvbW0vdm1zY2FuLmNcbisrKyBiL21tL3Ztc2Nhbi5jXG5AQCAtNTgyNyw2ICs1ODI3LDkgQEAgc3RhdGljIGludCBydW5fYWdpbmcoc3RydWN0IGxydXZlYyAqbHJ1dmVjLCB1bnNpZ25lZCBsb25nIHNlcSxcbiB7XG4gXHRERUZJTkVfTUFYX1NFUShscnV2ZWMpO1xuIFxuK1x0aWYgKHNlcSBcdTAwM2MgbWF4X3NlcSlcbitcdFx0cmV0dXJuIDA7XG4rXG4gXHRpZiAoc2VxIFx1MDAzZSBtYXhfc2VxKVxuIFx0XHRyZXR1cm4gLUVJTlZBTDtcbiBcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE1VDEyOjU5OjI3LjM3MjU2NzgzWiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6MTM3MDE2NTA1NDQ1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgdm1zY2FuLmMgUGF0Y2gqKlxuXG5Pa2F5LCBzbyB0aGlzIHBhdGNoIGlzIHRvdWNoaW5nIGBtbS92bXNjYW4uY2AuIEltbWVkaWF0ZWx5LCBteSBleHBlcnQgYnJhaW4gZ29lcyBpbnRvIFwiaW5zcGVjdGlvbiBtb2RlLlwiIExldCdzIHN0YXJ0IHdpdGggYSBxdWljayBvdmVydmlldyBvZiB0aGUgY2hhbmdlLiBJIG5lZWQgdG8gZ2V0IGEgZmVlbCBmb3Igd2hhdCdzIGJlaW5nIGFsdGVyZWQgaW4gdGhpcyBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IGZpbGUuIEknbSB0aGlua2luZyBzcGVjaWZpY2FsbHkgYXJvdW5kIGxpbmUgNTgyNyDigJMgdGhhdCdzIG9mdGVuIGEgZ29vZCBzdGFydGluZyBwb2ludCBmb3IgdW5kZXJzdGFuZGluZyBhIHRhcmdldGVkIGNoYW5nZSwgYW5kIHVzdWFsbHkgYSBoZWxwZnVsIGxpbmUgbnVtYmVyIGdpdmVuLlxuXG5Gb3J0dW5hdGVseSwgSSBoYXZlIG15IGFyc2VuYWwgb2YgdG9vbHMgYXQgdGhlIHJlYWR5LiBJJ2xsIHJlYWNoIGZvciBgcmVhZC1maWxlYCB0byBncmFiIHRoYXQgc3BlY2lmaWMgc2VjdGlvbiBvZiBgbW0vdm1zY2FuLmNgLiBJdCdzIG11Y2ggZmFzdGVyIHRoYW4gbWFudWFsbHkgc2lmdGluZyB0aHJvdWdoIHRoZSBmaWxlLCBhbmQgZWFzaWVyIHRvIGFic29yYiB0aGUgY29udGV4dCB0aGF0IHdheS4gSSdsbCBhbHNvIHdhbnQgdG8gc3RhcnQgdGhpbmtpbmcgaG93IGBncmVwcGVyYCBtaWdodCBiZSB1c2VmdWwgaWYgSSBzdGFydCBnZXR0aW5nIHN0dWNrLiBJJ2xsIGtlZXAgdGhhdCBpbiBteSBiYWNrIHBvY2tldC5cblxuXG4iLCJJbnB1dFRva2VucyI6MjgzMywiT3V0cHV0VG9rZW5zIjozNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjgxLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTVUMTM6MDE6NDQuMzg5MDc2MzE1WiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDI2OTQwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm1tL3Ztc2Nhbi5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDU4MTAsXG4gIFwiTGluZUNvdW50XCI6IDUwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjU4MTA6XFx0XFxuNTgxMTpcXHRcXHRcXHRpZiAoZnVsbClcXG41ODEyOlxcdFxcdFxcdFxcdGxydV9nZW5fc2VxX3Nob3dfZnVsbChtLCBscnV2ZWMsIG1heF9zZXEsIG1pbl9zZXEsIHNlcSk7XFxuNTgxMzpcXHRcXHR9XFxuNTgxNDpcXHRcXG41ODE1OlxcdFxcdHJldHVybiAwO1xcbjU4MTY6XFx0fVxcbjU4MTc6XFx0XFxuNTgxODpcXHRzdGF0aWMgY29uc3Qgc3RydWN0IHNlcV9vcGVyYXRpb25zIGxydV9nZW5fc2VxX29wcyA9IHtcXG41ODE5OlxcdFxcdC5zdGFydCA9IGxydV9nZW5fc2VxX3N0YXJ0LFxcbjU4MjA6XFx0XFx0LnN0b3AgPSBscnVfZ2VuX3NlcV9zdG9wLFxcbjU4MjE6XFx0XFx0Lm5leHQgPSBscnVfZ2VuX3NlcV9uZXh0LFxcbjU4MjI6XFx0XFx0LnNob3cgPSBscnVfZ2VuX3NlcV9zaG93LFxcbjU4MjM6XFx0fTtcXG41ODI0OlxcdFxcbjU4MjU6XFx0c3RhdGljIGludCBydW5fYWdpbmcoc3RydWN0IGxydXZlYyAqbHJ1dmVjLCB1bnNpZ25lZCBsb25nIHNlcSxcXG41ODI2OlxcdFxcdFxcdCAgICAgaW50IHN3YXBwaW5lc3MsIGJvb2wgZm9yY2Vfc2NhbilcXG41ODI3OlxcdHtcXG41ODI4OlxcdFxcdERFRklORV9NQVhfU0VRKGxydXZlYyk7XFxuNTgyOTpcXHRcXG41ODMwOlxcdFxcdGlmIChzZXEgXFx1MDAzYyBtYXhfc2VxKVxcbjU4MzE6XFx0XFx0XFx0cmV0dXJuIDA7XFxuNTgzMjpcXHRcXG41ODMzOlxcdFxcdGlmIChzZXEgXFx1MDAzZSBtYXhfc2VxKVxcbjU4MzQ6XFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuNTgzNTpcXHRcXG41ODM2OlxcdFxcdHJldHVybiB0cnlfdG9faW5jX21heF9zZXEobHJ1dmVjLCBtYXhfc2VxLCBzd2FwcGluZXNzLCBmb3JjZV9zY2FuKSA/IDAgOiAtRUVYSVNUO1xcbjU4Mzc6XFx0fVxcbjU4Mzg6XFx0XFxuNTgzOTpcXHRzdGF0aWMgaW50IHJ1bl9ldmljdGlvbihzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIHVuc2lnbmVkIGxvbmcgc2VxLCBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYyxcXG41ODQwOlxcdFxcdFxcdFxcdGludCBzd2FwcGluZXNzLCB1bnNpZ25lZCBsb25nIG5yX3RvX3JlY2xhaW0pXFxuNTg0MTpcXHR7XFxuNTg0MjpcXHRcXHRpbnQgbnJfYmF0Y2g7XFxuNTg0MzpcXHRcXHRERUZJTkVfTUFYX1NFUShscnV2ZWMpO1xcbjU4NDQ6XFx0XFxuNTg0NTpcXHRcXHRpZiAoc2VxICsgTUlOX05SX0dFTlMgXFx1MDAzZSBtYXhfc2VxKVxcbjU4NDY6XFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuNTg0NzpcXHRcXG41ODQ4OlxcdFxcdHNjLVxcdTAwM2Vucl9yZWNsYWltZWQgPSAwO1xcbjU4NDk6XFx0XFxuNTg1MDpcXHRcXHR3aGlsZSAoIXNpZ25hbF9wZW5kaW5nKGN1cnJlbnQpKSB7XFxuNTg1MTpcXHRcXHRcXHRERUZJTkVfTUlOX1NFUShscnV2ZWMpO1xcbjU4NTI6XFx0XFxuNTg1MzpcXHRcXHRcXHRpZiAoc2VxIFxcdTAwM2MgZXZpY3RhYmxlX21pbl9zZXEobWluX3NlcSwgc3dhcHBpbmVzcykpXFxuNTg1NDpcXHRcXHRcXHRcXHRyZXR1cm4gMDtcXG41ODU1OlxcdFxcbjU4NTY6XFx0XFx0XFx0aWYgKHNjLVxcdTAwM2Vucl9yZWNsYWltZWQgXFx1MDAzZT0gbnJfdG9fcmVjbGFpbSlcXG41ODU3OlxcdFxcdFxcdFxcdHJldHVybiAwO1xcbjU4NTg6XFx0XFxuNTg1OTpcXHRcXHRcXHRucl9iYXRjaCA9IG1pbihucl90b19yZWNsYWltIC0gc2MtXFx1MDAzZW5yX3JlY2xhaW1lZCwgTUFYX0xSVV9CQVRDSCk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE1VDEzOjAxOjQ0LjM4OTUwNDk2NVoiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjkyNzcxNDg4OTEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqSW52ZXN0aWdhdGluZyB0aGUgYHJ1bl9hZ2luZ2AgRnVuY3Rpb24qKlxuXG5BbHJpZ2h0LCBsZXQncyBkaXZlIGludG8gdGhpcyBgcnVuX2FnaW5nYCBmdW5jdGlvbi4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXRzIGNhbGwgc2l0ZXMgYW5kIGludGVybmFsIHdvcmtpbmdzLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gdHJhY2UgaXRzIGV4ZWN1dGlvbiBwYXRoLiBJJ2xsIHN0YXJ0IHdpdGggYSBzdHJhaWdodGZvcndhcmQgYXBwcm9hY2g6IEknbGwgdXNlIGBncmVwYCB3aXRoaW4gdGhlIGBtbS92bXNjYW4uY2AgZmlsZSB0byBpZGVudGlmeSBldmVyeSBpbnN0YW5jZSB3aGVyZSBgcnVuX2FnaW5nYCBpcyBpbnZva2VkLiBUaGlzIHdpbGwgZ2l2ZSBtZSBhIGNsZWFyIHBpY3R1cmUgb2YgaG93IHRoaXMgZnVuY3Rpb24gZml0cyBpbnRvIHRoZSBvdmVyYWxsIG1lbW9yeSBtYW5hZ2VtZW50IHNjaGVtZS4gRnJvbSB0aGVyZSwgSSBjYW4gYmVnaW4gYW5hbHl6aW5nIGl0cyBmdW5jdGlvbmFsaXR5IGluIGdyZWF0ZXIgZGV0YWlsLCBiYXNlZCBvbiBpdHMgY29udGV4dCB3aXRoaW4gdGhlIGNhbGxpbmcgY29kZS4gVGhpcyBpcyBhIHN0YW5kYXJkIGluaXRpYWwgZGlhZ25vc3RpYyBzdGVwIGZvciBhbnkga2VybmVsLWxldmVsIGludmVzdGlnYXRpb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjM4ODcsIk91dHB1dFRva2VucyI6MjksIk91dHB1dFRob3VnaHRzVG9rZW5zIjozNywiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE1VDEzOjAxOjUzLjY2NjY1Njg1NloiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1MDUxODY0OTIsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwicnVuX2FnaW5nXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL3Ztc2Nhbi5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL3Ztc2Nhbi5jPTUwMTY9c3RhdGljIGludCBldmljdF9mb2xpb3ModW5zaWduZWQgbG9uZyBucl90b19zY2FuLCBzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsXFxuLS1cXG5tbS92bXNjYW4uYy01MTExLVxcbm1tL3Ztc2Nhbi5jOjUxMTI6c3RhdGljIGJvb2wgc2hvdWxkX3J1bl9hZ2luZyhzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIHVuc2lnbmVkIGxvbmcgbWF4X3NlcSxcXG5tbS92bXNjYW4uYy01MTEzLVxcdFxcdFxcdCAgICAgc3RydWN0IHNjYW5fY29udHJvbCAqc2MsIGludCBzd2FwcGluZXNzKVxcbi0tXFxubW0vdm1zY2FuLmM9NTE5NT1zdGF0aWMgYm9vbCB0cnlfdG9fc2hyaW5rX2xydXZlYyhzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjKVxcbi0tXFxubW0vdm1zY2FuLmMtNTIxMS1cXG5tbS92bXNjYW4uYzo1MjEyOlxcdFxcdGlmIChzaG91bGRfcnVuX2FnaW5nKGxydXZlYywgbWF4X3NlcSwgc2MsIHN3YXBwaW5lc3MpKSB7XFxubW0vdm1zY2FuLmMtNTIxMy1cXHRcXHRcXHRpZiAodHJ5X3RvX2luY19tYXhfc2VxKGxydXZlYywgbWF4X3NlcSwgc3dhcHBpbmVzcywgZmFsc2UpKVxcbi0tXFxubW0vdm1zY2FuLmM9NTgxOD1zdGF0aWMgY29uc3Qgc3RydWN0IHNlcV9vcGVyYXRpb25zIGxydV9nZW5fc2VxX29wcyA9IHtcXG4tLVxcbm1tL3Ztc2Nhbi5jLTU4MjQtXFxubW0vdm1zY2FuLmM6NTgyNTpzdGF0aWMgaW50IHJ1bl9hZ2luZyhzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIHVuc2lnbmVkIGxvbmcgc2VxLFxcbm1tL3Ztc2Nhbi5jLTU4MjYtXFx0XFx0ICAgICBpbnQgc3dhcHBpbmVzcywgYm9vbCBmb3JjZV9zY2FuKVxcbi0tXFxubW0vdm1zY2FuLmM9NTg2OT1zdGF0aWMgaW50IHJ1bl9jbWQoY2hhciBjbWQsIHU2NCBtZW1jZ19pZCwgaW50IG5pZCwgdW5zaWduZWQgbG9uZyBzZXEsXFxuLS1cXG5tbS92bXNjYW4uYy01ODk3LVxcdGNhc2UgJysnOlxcbm1tL3Ztc2Nhbi5jOjU4OTg6XFx0XFx0ZXJyID0gcnVuX2FnaW5nKGxydXZlYywgc2VxLCBzd2FwcGluZXNzLCBvcHQpO1xcbm1tL3Ztc2Nhbi5jLTU4OTktXFx0XFx0YnJlYWs7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE1VDEzOjAxOjU0LjE3MTg1MzIyOFoiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjI0NDE2MTE5MDA3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdCByZXF1ZXN0LCBmb3JtYXR0ZWQgYXMgcmVxdWVzdGVkOlxuXG4qKk5hdmlnYXRpbmcgdGhlIENvZGViYXNlKipcblxuQWxyaWdodCwgbGV0J3MgZGl2ZSBpbi4gSXQgbG9va3MgbGlrZSB3ZSBuZWVkIHRvIGV4YW1pbmUgdGhlIGBydW5fY21kYCBmdW5jdGlvbiwgc3BlY2lmaWNhbGx5IGZvY3VzaW5nIG9uIGEgc2VjdGlvbiBvZiB0aGUgY29kZSBiZXR3ZWVuIGxpbmVzIDU4NjkgYW5kIDU5NTAuIFRvIGdldCBhIGJldHRlciBncmFzcCBvZiB0aGUgY29udGV4dCwgSSB0aGluayBpdCdzIHdpc2UgdG8gZXhwYW5kIHRoZSBzY29wZSBhIGJpdC4gSSdsbCByZWFkIGZyb20gcm91Z2hseSBsaW5lIDU4NjAgdG8gNTk2MC4gVGhhdCBzaG91bGQgZ2l2ZSB1cyBhIGdvb2QgdmlldyBvZiB0aGUgc3Vycm91bmRpbmcgbG9naWMgYW5kIGhvdyBgcnVuX2NtZGAgaXMgYmVpbmcgdXNlZCBpbiB0aGF0IHNwZWNpZmljIHBhcnQgb2YgdGhlIHByb2dyYW0uIEknbSBob3BpbmcgdG8gdW5kZXJzdGFuZCB0aGUgZmxvdywgdGhlIGlucHV0cywgYW5kIHRoZSBvdXRwdXRzIGluIGRldGFpbCwgc28gSSBjYW4gYWNjdXJhdGVseSBhc3Nlc3MgdGhlIGZ1bmN0aW9uYWxpdHkgYW5kIGFueSBwb3RlbnRpYWwgaXNzdWVzIG9yIGltcHJvdmVtZW50cy5cblxuXG4iLCJJbnB1dFRva2VucyI6NDU2NywiT3V0cHV0VG9rZW5zIjozNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQxLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE1VDEzOjAyOjE4LjU4Nzk3NTA1NVoiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI4NjE4MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJtbS92bXNjYW4uY1wiLFxuICBcIkZpcnN0TGluZVwiOiA1ODYwLFxuICBcIkxpbmVDb3VudFwiOiA4MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCI1ODYwOlxcdFxcdFxcdGlmICghZXZpY3RfZm9saW9zKG5yX2JhdGNoLCBscnV2ZWMsIHNjLCBzd2FwcGluZXNzKSlcXG41ODYxOlxcdFxcdFxcdFxcdHJldHVybiAwO1xcbjU4NjI6XFx0XFxuNTg2MzpcXHRcXHRcXHRjb25kX3Jlc2NoZWQoKTtcXG41ODY0OlxcdFxcdH1cXG41ODY1OlxcdFxcbjU4NjY6XFx0XFx0cmV0dXJuIC1FSU5UUjtcXG41ODY3OlxcdH1cXG41ODY4OlxcdFxcbjU4Njk6XFx0c3RhdGljIGludCBydW5fY21kKGNoYXIgY21kLCB1NjQgbWVtY2dfaWQsIGludCBuaWQsIHVuc2lnbmVkIGxvbmcgc2VxLFxcbjU4NzA6XFx0XFx0XFx0ICAgc3RydWN0IHNjYW5fY29udHJvbCAqc2MsIGludCBzd2FwcGluZXNzLCB1bnNpZ25lZCBsb25nIG9wdClcXG41ODcxOlxcdHtcXG41ODcyOlxcdFxcdHN0cnVjdCBscnV2ZWMgKmxydXZlYztcXG41ODczOlxcdFxcdGludCBlcnIgPSAtRUlOVkFMO1xcbjU4NzQ6XFx0XFx0c3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnID0gTlVMTDtcXG41ODc1OlxcdFxcbjU4NzY6XFx0XFx0aWYgKG5pZCBcXHUwMDNjIDAgfHwgbmlkIFxcdTAwM2U9IE1BWF9OVU1OT0RFUyB8fCAhbm9kZV9zdGF0ZShuaWQsIE5fTUVNT1JZKSlcXG41ODc3OlxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbjU4Nzg6XFx0XFxuNTg3OTpcXHRcXHRpZiAoIW1lbV9jZ3JvdXBfZGlzYWJsZWQoKSkge1xcbjU4ODA6XFx0XFx0XFx0bWVtY2cgPSBtZW1fY2dyb3VwX2dldF9mcm9tX2lkKG1lbWNnX2lkKTtcXG41ODgxOlxcdFxcdFxcdGlmICghbWVtY2cpXFxuNTg4MjpcXHRcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG41ODgzOlxcdFxcdH1cXG41ODg0OlxcdFxcbjU4ODU6XFx0XFx0aWYgKG1lbWNnX2lkICE9IG1lbV9jZ3JvdXBfaWQobWVtY2cpKVxcbjU4ODY6XFx0XFx0XFx0Z290byBkb25lO1xcbjU4ODc6XFx0XFxuNTg4ODpcXHRcXHRzYy1cXHUwMDNldGFyZ2V0X21lbV9jZ3JvdXAgPSBtZW1jZztcXG41ODg5OlxcdFxcdGxydXZlYyA9IGdldF9scnV2ZWMobWVtY2csIG5pZCk7XFxuNTg5MDpcXHRcXG41ODkxOlxcdFxcdGlmIChzd2FwcGluZXNzIFxcdTAwM2MgTUlOX1NXQVBQSU5FU1MpXFxuNTg5MjpcXHRcXHRcXHRzd2FwcGluZXNzID0gZ2V0X3N3YXBwaW5lc3MobHJ1dmVjLCBzYyk7XFxuNTg5MzpcXHRcXHRlbHNlIGlmIChzd2FwcGluZXNzIFxcdTAwM2UgU1dBUFBJTkVTU19BTk9OX09OTFkpXFxuNTg5NDpcXHRcXHRcXHRnb3RvIGRvbmU7XFxuNTg5NTpcXHRcXG41ODk2OlxcdFxcdHN3aXRjaCAoY21kKSB7XFxuNTg5NzpcXHRcXHRjYXNlICcrJzpcXG41ODk4OlxcdFxcdFxcdGVyciA9IHJ1bl9hZ2luZyhscnV2ZWMsIHNlcSwgc3dhcHBpbmVzcywgb3B0KTtcXG41ODk5OlxcdFxcdFxcdGJyZWFrO1xcbjU5MDA6XFx0XFx0Y2FzZSAnLSc6XFxuNTkwMTpcXHRcXHRcXHRlcnIgPSBydW5fZXZpY3Rpb24obHJ1dmVjLCBzZXEsIHNjLCBzd2FwcGluZXNzLCBvcHQpO1xcbjU5MDI6XFx0XFx0XFx0YnJlYWs7XFxuNTkwMzpcXHRcXHR9XFxuNTkwNDpcXHRkb25lOlxcbjU5MDU6XFx0XFx0bWVtX2Nncm91cF9wdXQobWVtY2cpO1xcbjU5MDY6XFx0XFxuNTkwNzpcXHRcXHRyZXR1cm4gZXJyO1xcbjU5MDg6XFx0fVxcbjU5MDk6XFx0XFxuNTkxMDpcXHQvKiBzZWUgRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9tbS9tdWx0aWdlbl9scnUucnN0IGZvciBkZXRhaWxzICovXFxuNTkxMTpcXHRzdGF0aWMgc3NpemVfdCBscnVfZ2VuX3NlcV93cml0ZShzdHJ1Y3QgZmlsZSAqZmlsZSwgY29uc3QgY2hhciBfX3VzZXIgKnNyYyxcXG41OTEyOlxcdFxcdFxcdFxcdFxcdCBzaXplX3QgbGVuLCBsb2ZmX3QgKnBvcylcXG41OTEzOlxcdHtcXG41OTE0OlxcdFxcdHZvaWQgKmJ1ZjtcXG41OTE1OlxcdFxcdGNoYXIgKmN1ciwgKm5leHQ7XFxuNTkxNjpcXHRcXHR1bnNpZ25lZCBpbnQgZmxhZ3M7XFxuNTkxNzpcXHRcXHRzdHJ1Y3QgYmxrX3BsdWcgcGx1ZztcXG41OTE4OlxcdFxcdGludCBlcnIgPSAtRUlOVkFMO1xcbjU5MTk6XFx0XFx0c3RydWN0IHNjYW5fY29udHJvbCBzYyA9IHtcXG41OTIwOlxcdFxcdFxcdC5tYXlfd3JpdGVwYWdlID0gdHJ1ZSxcXG41OTIxOlxcdFxcdFxcdC5tYXlfdW5tYXAgPSB0cnVlLFxcbjU5MjI6XFx0XFx0XFx0Lm1heV9zd2FwID0gdHJ1ZSxcXG41OTIzOlxcdFxcdFxcdC5yZWNsYWltX2lkeCA9IE1BWF9OUl9aT05FUyAtIDEsXFxuNTkyNDpcXHRcXHRcXHQuZ2ZwX21hc2sgPSBHRlBfS0VSTkVMLFxcbjU5MjU6XFx0XFx0XFx0LnByb2FjdGl2ZSA9IHRydWUsXFxuNTkyNjpcXHRcXHR9O1xcbjU5Mjc6XFx0XFxuNTkyODpcXHRcXHRidWYgPSBrdm1hbGxvYyhsZW4gKyAxLCBHRlBfS0VSTkVMKTtcXG41OTI5OlxcdFxcdGlmICghYnVmKVxcbjU5MzA6XFx0XFx0XFx0cmV0dXJuIC1FTk9NRU07XFxuNTkzMTpcXHRcXG41OTMyOlxcdFxcdGlmIChjb3B5X2Zyb21fdXNlcihidWYsIHNyYywgbGVuKSkge1xcbjU5MzM6XFx0XFx0XFx0a3ZmcmVlKGJ1Zik7XFxuNTkzNDpcXHRcXHRcXHRyZXR1cm4gLUVGQVVMVDtcXG41OTM1OlxcdFxcdH1cXG41OTM2OlxcdFxcbjU5Mzc6XFx0XFx0c2V0X3Rhc2tfcmVjbGFpbV9zdGF0ZShjdXJyZW50LCBcXHUwMDI2c2MucmVjbGFpbV9zdGF0ZSk7XFxuNTkzODpcXHRcXHRmbGFncyA9IG1lbWFsbG9jX25vcmVjbGFpbV9zYXZlKCk7XFxuNTkzOTpcXHRcXHRibGtfc3RhcnRfcGx1ZyhcXHUwMDI2cGx1Zyk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE1VDEzOjAyOjE4LjU4ODI2MzA1NVoiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjEyNTAwMzgxMzI4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkludmVzdGlnYXRpbmcgdGhlIGBscnVfZ2VuX3NlcV93cml0ZWAgV3JpdGUgSGFuZGxlcioqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IGBscnVfZ2VuX3NlcV93cml0ZWAuIE15IGluaXRpYWwgaHVuY2ggaXMgdGhhdCBpdCdzIGEgd3JpdGUgaGFuZGxlciBhc3NvY2lhdGVkIHdpdGggb25lIG9mIHRoZSBkZWJ1ZywgcHJvYywgb3Igc3lzZnMgZmlsZSBzeXN0ZW1zLiBUaGF0IHNvdW5kcyByaWdodCwgZ2l2ZW4gdGhlIG5hbWluZyBjb252ZW50aW9uLiBOb3csIHRvIGJlIHN1cmUsIGFuZCB0byB1bmRlcnN0YW5kICpob3cqIGl0J3MgYmVpbmcgdXNlZCwgSSBuZWVkIHRvIHNlZSB3aGVyZSBpdCdzIGRlZmluZWQgYW5kLCBjcml0aWNhbGx5LCB3aGVyZSBpdCdzIHVzZWQuIEknbGwgbmVlZCB0byB0cmFjZSBpdHMgcmVmZXJlbmNlcy4gSSdsbCBza2lwIHRoZSBkZWZpbml0aW9ucywgSSdtIGFscmVhZHkgYXdhcmUgb2YgdGhvc2UgZnJvbSBvdGhlciBwYXJ0cyBvZiB0aGUgY29kZWJhc2UsIGFuZCBnbyBzdHJhaWdodCB0byB0aGUgdXNhZ2VzLiBMZXQncyBzdGFydCBieSBsb29raW5nIGF0IGxpbmVzIDU5NDAgdGhyb3VnaCA2MDAwLiBUaGF0IHNob3VsZCBnaXZlIG1lIHRoZSBjb250ZXh0IEkgbmVlZCB0byBmaWd1cmUgb3V0IGl0cyBwdXJwb3NlIGFuZCBob3cgaXQgZml0cyBpbnRvIHRoZSBvdmVyYWxsIHNjaGVtZSBvZiB0aGluZ3MuIEhvcGVmdWxseSwgdGhvc2UgbGluZXMgd2lsbCBzaG93IG1lIGV4YWN0bHkgd2hhdCdzIGJlaW5nIHdyaXR0ZW4gdG8gdGhhdCBoYW5kbGVyIGFuZCAqd2h5Ki5cblxuXG4iLCJJbnB1dFRva2VucyI6NTk2NSwiT3V0cHV0VG9rZW5zIjozNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjY2LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTVUMTM6MDI6MzEuMDg4NjQ3MjgzWiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ1Njk5MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJtbS92bXNjYW4uY1wiLFxuICBcIkZpcnN0TGluZVwiOiA1OTQwLFxuICBcIkxpbmVDb3VudFwiOiA2MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCI1OTQwOlxcdFxcdGlmICghc2V0X21tX3dhbGsoTlVMTCwgdHJ1ZSkpIHtcXG41OTQxOlxcdFxcdFxcdGVyciA9IC1FTk9NRU07XFxuNTk0MjpcXHRcXHRcXHRnb3RvIGRvbmU7XFxuNTk0MzpcXHRcXHR9XFxuNTk0NDpcXHRcXG41OTQ1OlxcdFxcdG5leHQgPSBidWY7XFxuNTk0NjpcXHRcXHRuZXh0W2xlbl0gPSAnXFxcXDAnO1xcbjU5NDc6XFx0XFxuNTk0ODpcXHRcXHR3aGlsZSAoKGN1ciA9IHN0cnNlcChcXHUwMDI2bmV4dCwgXFxcIiw7XFxcXG5cXFwiKSkpIHtcXG41OTQ5OlxcdFxcdFxcdGludCBuO1xcbjU5NTA6XFx0XFx0XFx0aW50IGVuZDtcXG41OTUxOlxcdFxcdFxcdGNoYXIgY21kLCBzd2FwX3N0cmluZ1s1XTtcXG41OTUyOlxcdFxcdFxcdHU2NCBtZW1jZ19pZDtcXG41OTUzOlxcdFxcdFxcdHVuc2lnbmVkIGludCBuaWQ7XFxuNTk1NDpcXHRcXHRcXHR1bnNpZ25lZCBsb25nIHNlcTtcXG41OTU1OlxcdFxcdFxcdHVuc2lnbmVkIGludCBzd2FwcGluZXNzO1xcbjU5NTY6XFx0XFx0XFx0dW5zaWduZWQgbG9uZyBvcHQgPSAtMTtcXG41OTU3OlxcdFxcbjU5NTg6XFx0XFx0XFx0Y3VyID0gc2tpcF9zcGFjZXMoY3VyKTtcXG41OTU5OlxcdFxcdFxcdGlmICghKmN1cilcXG41OTYwOlxcdFxcdFxcdFxcdGNvbnRpbnVlO1xcbjU5NjE6XFx0XFxuNTk2MjpcXHRcXHRcXHRuID0gc3NjYW5mKGN1ciwgXFxcIiVjICVsbHUgJXUgJWx1ICVuICU0cyAlbiAlbHUgJW5cXFwiLCBcXHUwMDI2Y21kLCBcXHUwMDI2bWVtY2dfaWQsIFxcdTAwMjZuaWQsXFxuNTk2MzpcXHRcXHRcXHRcXHQgICBcXHUwMDI2c2VxLCBcXHUwMDI2ZW5kLCBzd2FwX3N0cmluZywgXFx1MDAyNmVuZCwgXFx1MDAyNm9wdCwgXFx1MDAyNmVuZCk7XFxuNTk2NDpcXHRcXHRcXHRpZiAobiBcXHUwMDNjIDQgfHwgY3VyW2VuZF0pIHtcXG41OTY1OlxcdFxcdFxcdFxcdGVyciA9IC1FSU5WQUw7XFxuNTk2NjpcXHRcXHRcXHRcXHRicmVhaztcXG41OTY3OlxcdFxcdFxcdH1cXG41OTY4OlxcdFxcbjU5Njk6XFx0XFx0XFx0aWYgKG4gPT0gNCkge1xcbjU5NzA6XFx0XFx0XFx0XFx0c3dhcHBpbmVzcyA9IC0xO1xcbjU5NzE6XFx0XFx0XFx0fSBlbHNlIGlmICghc3RyY21wKFxcXCJtYXhcXFwiLCBzd2FwX3N0cmluZykpIHtcXG41OTcyOlxcdFxcdFxcdFxcdC8qIHNldCBieSB1c2Vyc3BhY2UgZm9yIGFub255bW91cyBtZW1vcnkgb25seSAqL1xcbjU5NzM6XFx0XFx0XFx0XFx0c3dhcHBpbmVzcyA9IFNXQVBQSU5FU1NfQU5PTl9PTkxZO1xcbjU5NzQ6XFx0XFx0XFx0fSBlbHNlIHtcXG41OTc1OlxcdFxcdFxcdFxcdGVyciA9IGtzdHJ0b3VpbnQoc3dhcF9zdHJpbmcsIDAsIFxcdTAwMjZzd2FwcGluZXNzKTtcXG41OTc2OlxcdFxcdFxcdFxcdGlmIChlcnIpXFxuNTk3NzpcXHRcXHRcXHRcXHRcXHRicmVhaztcXG41OTc4OlxcdFxcdFxcdH1cXG41OTc5OlxcdFxcbjU5ODA6XFx0XFx0XFx0ZXJyID0gcnVuX2NtZChjbWQsIG1lbWNnX2lkLCBuaWQsIHNlcSwgXFx1MDAyNnNjLCBzd2FwcGluZXNzLCBvcHQpO1xcbjU5ODE6XFx0XFx0XFx0aWYgKGVycilcXG41OTgyOlxcdFxcdFxcdFxcdGJyZWFrO1xcbjU5ODM6XFx0XFx0fVxcbjU5ODQ6XFx0ZG9uZTpcXG41OTg1OlxcdFxcdGNsZWFyX21tX3dhbGsoKTtcXG41OTg2OlxcdFxcdGJsa19maW5pc2hfcGx1ZyhcXHUwMDI2cGx1Zyk7XFxuNTk4NzpcXHRcXHRtZW1hbGxvY19ub3JlY2xhaW1fcmVzdG9yZShmbGFncyk7XFxuNTk4ODpcXHRcXHRzZXRfdGFza19yZWNsYWltX3N0YXRlKGN1cnJlbnQsIE5VTEwpO1xcbjU5ODk6XFx0XFxuNTk5MDpcXHRcXHRrdmZyZWUoYnVmKTtcXG41OTkxOlxcdFxcbjU5OTI6XFx0XFx0cmV0dXJuIGVyciA/IDogbGVuO1xcbjU5OTM6XFx0fVxcbjU5OTQ6XFx0XFxuNTk5NTpcXHRzdGF0aWMgaW50IGxydV9nZW5fc2VxX29wZW4oc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpXFxuNTk5NjpcXHR7XFxuNTk5NzpcXHRcXHRyZXR1cm4gc2VxX29wZW4oZmlsZSwgXFx1MDAyNmxydV9nZW5fc2VxX29wcyk7XFxuNTk5ODpcXHR9XFxuNTk5OTpcXHRcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTVUMTM6MDI6MzEuMDg5MTA3NTEzWiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjUxNDM0Nzk5MTMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBzdW1tYXJ5LCBhcyBpZiBJIHdlcmUgdGhpbmtpbmcgdGhlc2UgdGhvdWdodHM6XG5cbioqQW5hbHl6aW5nIGBscnVfZ2VuX3NlcV9vcGVuYCBhbmQgYGxydV9nZW5fc2VxX3dyaXRlYCBSZWdpc3RyYXRpb25zKipcblxuT2theSwgdGltZSB0byBkaWcgaW4uIE15IG9iamVjdGl2ZSBpcyB0byB1bmRlcnN0YW5kIGhvdyB0aGUgYGxydV9nZW5fc2VxX29wZW5gIGFuZCBgbHJ1X2dlbl9zZXFfd3JpdGVgIGZ1bmN0aW9ucyBhcmUgaW50ZWdyYXRlZCBpbnRvIHRoZSBzeXN0ZW0uIExldCdzIHN0YXJ0IGJ5IGZpZ3VyaW5nIG91dCAqd2hlcmUqIHRoZXkncmUgYWN0dWFsbHkgcmVnaXN0ZXJlZC4gSSBuZWVkIHRvIHRyYWNlIGJhY2sgdGhlaXIgdXNhZ2UuIEknbGwgbmVlZCB0byBsb2NhdGUgd2hlcmUgdGhlc2UgZnVuY3Rpb24gcG9pbnRlcnMgYXJlIGFzc2lnbmVkIG9yIHJlZmVyZW5jZWQuIEknbSBnb2luZyB0byBzY2FuIHRoZSBzb3VyY2UgY29kZSBhcm91bmQgbGluZSBudW1iZXJzIDYwMDAgdG8gNjA1MC4gVGhpcyBpcyBwcm9iYWJseSBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQsIGdpdmVuIHRoZSBjb250ZXh0LiBUaGF0IHJhbmdlIHNob3VsZCBnaXZlIG1lIGEgZ29vZCBpbml0aWFsIGxvb2sgYXQgdGhlIHN1cnJvdW5kaW5nIGNvZGUgYW5kIG1heWJlIHNvbWUgY2x1ZXMgYWJvdXQgdGhlIHJlZ2lzdHJhdGlvbiBwcm9jZXNzLiBIb3BlZnVsbHksIHRoaXMgc2VjdGlvbiB3aWxsIGNvbnRhaW4gdGhlIGZ1bmN0aW9uIGNhbGxzIHdoZXJlIHRoZXNlIGhvb2tzIGFyZSBzZXQuIExldCdzIGdldCB0byB3b3JrIVxuXG5cbiIsIklucHV0VG9rZW5zIjo3MTAzLCJPdXRwdXRUb2tlbnMiOjM1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDYsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xNVQxMzowMjozNi4yMzI1OTA2NTZaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDQ5MTAwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm1tL3Ztc2Nhbi5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDYwMDAsXG4gIFwiTGluZUNvdW50XCI6IDUwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjYwMDA6XFx0c3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgbHJ1X2dlbl9yd19mb3BzID0ge1xcbjYwMDE6XFx0XFx0Lm9wZW4gPSBscnVfZ2VuX3NlcV9vcGVuLFxcbjYwMDI6XFx0XFx0LnJlYWQgPSBzZXFfcmVhZCxcXG42MDAzOlxcdFxcdC53cml0ZSA9IGxydV9nZW5fc2VxX3dyaXRlLFxcbjYwMDQ6XFx0XFx0Lmxsc2VlayA9IHNlcV9sc2VlayxcXG42MDA1OlxcdFxcdC5yZWxlYXNlID0gc2VxX3JlbGVhc2UsXFxuNjAwNjpcXHR9O1xcbjYwMDc6XFx0XFxuNjAwODpcXHRzdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBscnVfZ2VuX3JvX2ZvcHMgPSB7XFxuNjAwOTpcXHRcXHQub3BlbiA9IGxydV9nZW5fc2VxX29wZW4sXFxuNjAxMDpcXHRcXHQucmVhZCA9IHNlcV9yZWFkLFxcbjYwMTE6XFx0XFx0Lmxsc2VlayA9IHNlcV9sc2VlayxcXG42MDEyOlxcdFxcdC5yZWxlYXNlID0gc2VxX3JlbGVhc2UsXFxuNjAxMzpcXHR9O1xcbjYwMTQ6XFx0XFxuNjAxNTpcXHQvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXFxuNjAxNjpcXHQgKiAgICAgICAgICAgICAgICAgICAgICAgICAgaW5pdGlhbGl6YXRpb25cXG42MDE3OlxcdCAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXFxuNjAxODpcXHRcXG42MDE5OlxcdHZvaWQgbHJ1X2dlbl9pbml0X3BnZGF0KHN0cnVjdCBwZ2xpc3RfZGF0YSAqcGdkYXQpXFxuNjAyMDpcXHR7XFxuNjAyMTpcXHRcXHRpbnQgaSwgajtcXG42MDIyOlxcdFxcbjYwMjM6XFx0XFx0c3Bpbl9sb2NrX2luaXQoXFx1MDAyNnBnZGF0LVxcdTAwM2VtZW1jZ19scnUubG9jayk7XFxuNjAyNDpcXHRcXG42MDI1OlxcdFxcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBNRU1DR19OUl9HRU5TOyBpKyspIHtcXG42MDI2OlxcdFxcdFxcdGZvciAoaiA9IDA7IGogXFx1MDAzYyBNRU1DR19OUl9CSU5TOyBqKyspXFxuNjAyNzpcXHRcXHRcXHRcXHRJTklUX0hMSVNUX05VTExTX0hFQUQoXFx1MDAyNnBnZGF0LVxcdTAwM2VtZW1jZ19scnUuZmlmb1tpXVtqXSwgaSk7XFxuNjAyODpcXHRcXHR9XFxuNjAyOTpcXHR9XFxuNjAzMDpcXHRcXG42MDMxOlxcdHZvaWQgbHJ1X2dlbl9pbml0X2xydXZlYyhzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMpXFxuNjAzMjpcXHR7XFxuNjAzMzpcXHRcXHRpbnQgaTtcXG42MDM0OlxcdFxcdGludCBnZW4sIHR5cGUsIHpvbmU7XFxuNjAzNTpcXHRcXHRzdHJ1Y3QgbHJ1X2dlbl9mb2xpbyAqbHJ1Z2VuID0gXFx1MDAyNmxydXZlYy1cXHUwMDNlbHJ1Z2VuO1xcbjYwMzY6XFx0XFx0c3RydWN0IGxydV9nZW5fbW1fc3RhdGUgKm1tX3N0YXRlID0gZ2V0X21tX3N0YXRlKGxydXZlYyk7XFxuNjAzNzpcXHRcXG42MDM4OlxcdFxcdGxydWdlbi1cXHUwMDNlbWF4X3NlcSA9IE1JTl9OUl9HRU5TICsgMTtcXG42MDM5OlxcdFxcdGxydWdlbi1cXHUwMDNlZW5hYmxlZCA9IGxydV9nZW5fZW5hYmxlZCgpO1xcbjYwNDA6XFx0XFxuNjA0MTpcXHRcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2M9IE1JTl9OUl9HRU5TICsgMTsgaSsrKVxcbjYwNDI6XFx0XFx0XFx0bHJ1Z2VuLVxcdTAwM2V0aW1lc3RhbXBzW2ldID0gamlmZmllcztcXG42MDQzOlxcdFxcbjYwNDQ6XFx0XFx0Zm9yX2VhY2hfZ2VuX3R5cGVfem9uZShnZW4sIHR5cGUsIHpvbmUpXFxuNjA0NTpcXHRcXHRcXHRJTklUX0xJU1RfSEVBRChcXHUwMDI2bHJ1Z2VuLVxcdTAwM2Vmb2xpb3NbZ2VuXVt0eXBlXVt6b25lXSk7XFxuNjA0NjpcXHRcXG42MDQ3OlxcdFxcdGlmIChtbV9zdGF0ZSlcXG42MDQ4OlxcdFxcdFxcdG1tX3N0YXRlLVxcdTAwM2VzZXEgPSBNSU5fTlJfR0VOUztcXG42MDQ5OlxcdH1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTVUMTM6MDI6MzYuMjMzMDQyNjA2WiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjEyMzM4NjM0NDEyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBJIHdlcmUgY29uc2lkZXJpbmcgdGhpcyBxdWVzdGlvbjpcblxuKipGaW5kaW5nIHRoZSBVc2FnZSBvZiBgbHJ1X2dlbl9yd19mb3BzYCoqXG5cbk9rYXksIHNvIEkgbmVlZCB0byB0cmFjayBkb3duIHdoZXJlIHRoZSBgbHJ1X2dlbl9yd19mb3BzYCB2YXJpYWJsZSwgb3Igc3RydWN0dXJlLCBpcyBhY3R1YWxseSBiZWluZyAqdXNlZCogaW4gdGhlIGNvZGUuIE15IGluaXRpYWwgdGhvdWdodCBpcywgbGV0J3MganVzdCBnbyBhaGVhZCBhbmQgZG8gaXQsIEknbGwgbmVlZCB0byBkbyBzb21lIGNvZGUgYXJjaGFlb2xvZ3kuIFRoaXMgbWVhbnMgdXNpbmcgYSB0b29sIHRvIHNlYXJjaCBmb3IgYWxsIGluc3RhbmNlcyB3aGVyZSB0aGlzIHNwZWNpZmljIGlkZW50aWZpZXIgYXBwZWFycy4gSSdsbCBuZWVkIHRvIGJlIHByZWNpc2UgYWJvdXQgaG93IEkgcGhyYXNlIHRoZSBzZWFyY2ggdG8gYXZvaWQgZmFsc2UgcG9zaXRpdmVzLiBUaGVuLCBvbmNlIEkgaGF2ZSBteSBsaXN0IG9mIGluc3RhbmNlcyBJJ2xsIGtub3cgd2hlcmUgdG8gc3RhcnQgbXkgaW5zcGVjdGlvbi4gRnJvbSB0aGVyZSwgaXQnbGwgYmUgYSBtYXR0ZXIgb2YgdW5kZXJzdGFuZGluZyB0aGUgY29udGV4dCBhbmQgcHVycG9zZSBvZiBpdHMgdXNhZ2UgdG8gaWRlbnRpZnkgdGhlIGFyZWFzIG9mIGNvZGUgdGhhdCByZWx5IG9uIGl0LlxuXG5cbiIsIklucHV0VG9rZW5zIjo4MTkyLCJPdXRwdXRUb2tlbnMiOjMxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjAsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xNVQxMzowMjo0OC41NzE2Nzk1MDhaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjUyMzk3MjU5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImxydV9nZW5fcndfZm9wc1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vdm1zY2FuLmM9NTk5NT1zdGF0aWMgaW50IGxydV9nZW5fc2VxX29wZW4oc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpXFxuLS1cXG5tbS92bXNjYW4uYy01OTk5LVxcbm1tL3Ztc2Nhbi5jOjYwMDA6c3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgbHJ1X2dlbl9yd19mb3BzID0ge1xcbm1tL3Ztc2Nhbi5jLTYwMDEtXFx0Lm9wZW4gPSBscnVfZ2VuX3NlcV9vcGVuLFxcbi0tXFxubW0vdm1zY2FuLmM9NjA5Mz1zdGF0aWMgaW50IF9faW5pdCBpbml0X2xydV9nZW4odm9pZClcXG4tLVxcbm1tL3Ztc2Nhbi5jLTYxMDEtXFx0ZGVidWdmc19jcmVhdGVfZmlsZV9hdXhfbnVtKFxcXCJscnVfZ2VuXFxcIiwgMDY0NCwgTlVMTCwgTlVMTCwgZmFsc2UsXFxubW0vdm1zY2FuLmM6NjEwMjpcXHRcXHRcXHRcXHQgICAgXFx1MDAyNmxydV9nZW5fcndfZm9wcyk7XFxubW0vdm1zY2FuLmMtNjEwMy1cXHRkZWJ1Z2ZzX2NyZWF0ZV9maWxlX2F1eF9udW0oXFxcImxydV9nZW5fZnVsbFxcXCIsIDA0NDQsIE5VTEwsIE5VTEwsIHRydWUsXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE1VDEzOjAyOjQ4LjYyNDA4MzQ3N1oiLCJTZXEiOjE1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjo3MDEyNTE2MjcxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEluaXRpYWwgVGhvdWdodHMgb24gdGhpcyBEZWJ1Z2ZzIENyZWF0aW9uKipcblxuT2theSwgc28gSSBzZWUgYGRlYnVnZnNfY3JlYXRlX2ZpbGVfYXV4X251bWAgYmVpbmcgdXNlZCB0byBjcmVhdGUgc29tZXRoaW5nIGNhbGxlZCBcImxydV9nZW5cIi4gTXkgZmlyc3QgdGhvdWdodCBpczogZGVidWdmcyEgSSBuZWVkIHRvIHF1aWNrbHkgYXNzZXNzIGlmIHRoaXMgaXMgc29tZXRoaW5nIHRoYXQncyByZWFjaGFibGUgb3IgZXZlbiB3b3JzZSwgZnV6emVkIGJ5IHN5emthbGxlci4gVGhhdCB3b3VsZCBiZSBhbiBpbW1lZGlhdGUgcmVkIGZsYWcuIEkgbmVlZCB0byBmaWd1cmUgb3V0IHdoZXJlIHRoaXMgdGhpbmcgbGl2ZXMsIHRoZSBkZWJ1Z2ZzIHBhdGguIEFoLCBpdCBhcHBlYXJzIHRvIGJlIHVuZGVyIHRoZSBkZWJ1Z2ZzIHJvb3QsIHNwZWNpZmljYWxseSBgL3N5cy9rZXJuZWwvZGVidWcvbHJ1X2dlbmAuXG5cbk5vdywgbGV0J3MgdGFrZSBhIHN0ZXAgYmFjayBhbmQgdW5kZXJzdGFuZCB0aGUgY29udGV4dC4gU2luY2UgdGhpcyBjb25jZXJucyBMUlUsIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQncyB0cmlnZ2VyaW5nIHRoaXMgZGVidWdmcyBub2RlLiBJIHNob3VsZCBwcm9iYWJseSBjaGVjayB0aGUgS2NvbmZpZyBvcHRpb25zIHRoYXQgZW5hYmxlIE11bHRpLUdlbiBMUlUgKE1HTFJVKS4gTGV0IG1lIGRpZyBpbnRvIHRob3NlIG9wdGlvbnMgYW5kIHNlZSB3aGF0J3MgZ29pbmcgb24uIFRoZW4sIEkgbmVlZCB0byBjaGVjayBob3cgYGluaXRfbHJ1X2dlbmAgaXMgYmVpbmcgY2FsbGVkIGFuZCBpdHMgc3Vycm91bmRpbmdzLCBzcGVjaWZpY2FsbHkgY2hlY2tpbmcgdGhlIGAjaWZkZWZgIGRpcmVjdGl2ZXMgaW4gYG1tL3Ztc2Nhbi5jYC4gVGhhdCB3aWxsIGhlbHAgZGV0ZXJtaW5lIHRoZSBjb21waWxhdGlvbiBwYXRoIGFuZCB3aGVyZSB0aGlzIGRlYnVnZnMgbm9kZSBjb21lcyBmcm9tLlxuXG5cbiIsIklucHV0VG9rZW5zIjo4NjgwLCJPdXRwdXRUb2tlbnMiOjM1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTM3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE1VDEzOjAyOjU1LjYzNjYwMjA4OFoiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0MzMzNTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibW0vdm1zY2FuLmNcIixcbiAgXCJGaXJzdExpbmVcIjogNjA5MCxcbiAgXCJMaW5lQ291bnRcIjogNDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiNjA5MDpcXHRcXG42MDkxOlxcdCNlbmRpZiAvKiBDT05GSUdfTUVNQ0cgKi9cXG42MDkyOlxcdFxcbjYwOTM6XFx0c3RhdGljIGludCBfX2luaXQgaW5pdF9scnVfZ2VuKHZvaWQpXFxuNjA5NDpcXHR7XFxuNjA5NTpcXHRcXHRCVUlMRF9CVUdfT04oTUlOX05SX0dFTlMgKyAxIFxcdTAwM2U9IE1BWF9OUl9HRU5TKTtcXG42MDk2OlxcdFxcdEJVSUxEX0JVR19PTihCSVQoTFJVX0dFTl9XSURUSCkgXFx1MDAzYz0gTUFYX05SX0dFTlMpO1xcbjYwOTc6XFx0XFxuNjA5ODpcXHRcXHRpZiAoc3lzZnNfY3JlYXRlX2dyb3VwKG1tX2tvYmosIFxcdTAwMjZscnVfZ2VuX2F0dHJfZ3JvdXApKVxcbjYwOTk6XFx0XFx0XFx0cHJfZXJyKFxcXCJscnVfZ2VuOiBmYWlsZWQgdG8gY3JlYXRlIHN5c2ZzIGdyb3VwXFxcXG5cXFwiKTtcXG42MTAwOlxcdFxcbjYxMDE6XFx0XFx0ZGVidWdmc19jcmVhdGVfZmlsZV9hdXhfbnVtKFxcXCJscnVfZ2VuXFxcIiwgMDY0NCwgTlVMTCwgTlVMTCwgZmFsc2UsXFxuNjEwMjpcXHRcXHRcXHRcXHRcXHQgICAgXFx1MDAyNmxydV9nZW5fcndfZm9wcyk7XFxuNjEwMzpcXHRcXHRkZWJ1Z2ZzX2NyZWF0ZV9maWxlX2F1eF9udW0oXFxcImxydV9nZW5fZnVsbFxcXCIsIDA0NDQsIE5VTEwsIE5VTEwsIHRydWUsXFxuNjEwNDpcXHRcXHRcXHRcXHRcXHQgICAgXFx1MDAyNmxydV9nZW5fcm9fZm9wcyk7XFxuNjEwNTpcXHRcXG42MTA2OlxcdFxcdHJldHVybiAwO1xcbjYxMDc6XFx0fTtcXG42MTA4OlxcdGxhdGVfaW5pdGNhbGwoaW5pdF9scnVfZ2VuKTtcXG42MTA5OlxcdFxcbjYxMTA6XFx0I2Vsc2UgLyogIUNPTkZJR19MUlVfR0VOICovXFxuNjExMTpcXHRcXG42MTEyOlxcdHN0YXRpYyB2b2lkIGxydV9nZW5fYWdlX25vZGUoc3RydWN0IHBnbGlzdF9kYXRhICpwZ2RhdCwgc3RydWN0IHNjYW5fY29udHJvbCAqc2MpXFxuNjExMzpcXHR7XFxuNjExNDpcXHRcXHRCVUlMRF9CVUcoKTtcXG42MTE1OlxcdH1cXG42MTE2OlxcdFxcbjYxMTc6XFx0c3RhdGljIHZvaWQgbHJ1X2dlbl9zaHJpbmtfbHJ1dmVjKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgc3RydWN0IHNjYW5fY29udHJvbCAqc2MpXFxuNjExODpcXHR7XFxuNjExOTpcXHRcXHRCVUlMRF9CVUcoKTtcXG42MTIwOlxcdH1cXG42MTIxOlxcdFxcbjYxMjI6XFx0c3RhdGljIHZvaWQgbHJ1X2dlbl9zaHJpbmtfbm9kZShzdHJ1Y3QgcGdsaXN0X2RhdGEgKnBnZGF0LCBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYylcXG42MTIzOlxcdHtcXG42MTI0OlxcdFxcdEJVSUxEX0JVRygpO1xcbjYxMjU6XFx0fVxcbjYxMjY6XFx0XFxuNjEyNzpcXHQjZW5kaWYgLyogQ09ORklHX0xSVV9HRU4gKi9cXG42MTI4OlxcdFxcbjYxMjk6XFx0c3RhdGljIHZvaWQgc2hyaW5rX2xydXZlYyhzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xNVQxMzowMjo1NS42MzcwMzc1NThaIiwiU2VxIjoxNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6NjQ4OTE2MTg5MTgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBMUlUgR2VuZXJhdGlvbiBDb25maWd1cmF0aW9uKipcblxuT2theSwgZmlyc3QgdGhpbmcncyBmaXJzdDogaXQgbG9va3MgbGlrZSBgQ09ORklHX0xSVV9HRU5gIGlzIHRoZSBrZXkgY29uZmlnIG9wdGlvbiBoZXJlLCB0aGUgZ2F0ZWtlZXBlciBmb3IgdGhpcyBlbnRpcmUgc2VjdGlvbiBvZiBjb2RlLiBCZWZvcmUgSSBkaWcgYW55IGRlZXBlciwgSSBzaG91bGQgdmVyaWZ5IHdoYXQgb3RoZXIgY29uZmlndXJhdGlvbnMgbWlnaHQgYmUgaW52b2x2ZWQuIExldCdzIHNlZSBpZiBlaXRoZXIgYENPTkZJR19MUlVfR0VOX0VOQUJMRURgIG9yLCByZWFsbHksIGp1c3QgYENPTkZJR19MUlVfR0VOYCByZXF1aXJlcyBvdGhlciBjb25maWcgb3B0aW9ucywgb3RoZXIgZGVwZW5kZW5jaWVzLCBvciBoYXMgYW55IGltcGxpY2F0aW9ucyBvZiB3aGljaCBJIG11c3QgYmUgbWluZGZ1bC5cblxuUmlnaHQsIHNvIHRvIG1ha2Ugc3VyZSBJIGdldCBhIGdvb2QsIGhvbGlzdGljIHVuZGVyc3RhbmRpbmcsIEkgbmVlZCB0byBkbyBhIHF1aWNrIHNlYXJjaC4gTGV0J3MgZmlyZSB1cCBhIHNlYXJjaCBmb3IgYGNvbmZpZyBMUlVfR0VOYCBkaXJlY3RseSBpbiB0aGUgYG1tL0tjb25maWdgIGZpbGUuIFRoYXQgc2hvdWxkIGdpdmUgbWUgdGhlIGF1dGhvcml0YXRpdmUgZGVmaW5pdGlvbiBhbmQgYW55IHJlbGF0ZWQgZGVwZW5kZW5jaWVzLiBUaGlzIHNob3VsZCBnZXQgbWUgc3RhcnRlZC5cblxuXG4iLCJJbnB1dFRva2VucyI6OTc0NCwiT3V0cHV0VG9rZW5zIjoyOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjcxLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTVUMTM6MDQ6MDAuNTI4NjU5NDY2WiIsIlNlcSI6MTgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3MzExMjY0OCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgTFJVX0dFTlwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL0tjb25maWc9MTM4OD1jb25maWcgUFRFX01BUktFUl9VRkZEX1dQXFxuLS1cXG5tbS9LY29uZmlnLTEzOTgtIyBtdWx0aS1nZW4gTFJVIHtcXG5tbS9LY29uZmlnOjEzOTk6Y29uZmlnIExSVV9HRU5cXG5tbS9LY29uZmlnLTE0MDAtXFx0Ym9vbCBcXFwiTXVsdGktR2VuIExSVVxcXCJcXG4tLVxcbm1tL0tjb25maWctMTQwNy1cXG5tbS9LY29uZmlnOjE0MDg6Y29uZmlnIExSVV9HRU5fRU5BQkxFRFxcbm1tL0tjb25maWctMTQwOS1cXHRib29sIFxcXCJFbmFibGUgYnkgZGVmYXVsdFxcXCJcXG4tLVxcbm1tL0tjb25maWctMTQxMy1cXG5tbS9LY29uZmlnOjE0MTQ6Y29uZmlnIExSVV9HRU5fU1RBVFNcXG5tbS9LY29uZmlnLTE0MTUtXFx0Ym9vbCBcXFwiRnVsbCBzdGF0cyBmb3IgZGVidWdnaW5nXFxcIlxcbi0tXFxubW0vS2NvbmZpZy0xNDIyLVxcbm1tL0tjb25maWc6MTQyMzpjb25maWcgTFJVX0dFTl9XQUxLU19NTVVcXG5tbS9LY29uZmlnLTE0MjQtXFx0ZGVmX2Jvb2wgeVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xNVQxMzowNDowMC42MDE3Nzg3NzVaIiwiU2VxIjoxOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6MTg1NTc5ODYxMCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRha2Ugb24gdGhlIHRob3VnaHQgcHJvY2VzczpcblxuKipEaXZpbmcgaW50byB0aGUgS2VybmVsIENvbmZpZ3VyYXRpb24gTGFuZHNjYXBlKipcblxuT2theSwgc28gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGRlcGVuZGVuY2llcyBvZiBgTFJVX0dFTmAuIEtub3dpbmcga2VybmVsIGNvbmZpZ3VyYXRpb24sIHRoZSBsb2dpY2FsIHBsYWNlIHRvIHN0YXJ0IGlzIHRoZSBgS2NvbmZpZ2AgZmlsZS4gSSdsbCBuZWVkIHRvIGdvIHRvIGBtbS9LY29uZmlnYCwgSSdtIGd1ZXNzaW5nIGFyb3VuZCBsaW5lIDEzOTgsIGdpdmUgb3IgdGFrZSwgc2hvdWxkIGJlIGluIHRoZSBiYWxscGFyay4gTGV0J3Mgc2VlIHdoYXQncyBkZWZpbmVkIHRoZXJlIGFuZCB3aGF0IGl0cyByZWxhdGlvbnNoaXBzIGFyZSB3aXRoIG90aGVyIG9wdGlvbnMuIEZyb20gdGhlcmUgSSdsbCBzdGFydCBtYXBwaW5nIG91dCB0aGUgaW1wbGljYXRpb25zLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMDI1OSwiT3V0cHV0VG9rZW5zIjozMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE1VDEzOjA0OjAyLjQ1NzU4MDMwNVoiLCJTZXEiOjIwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMTAyNjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibW0vS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiAxMzk1LFxuICBcIkxpbmVDb3VudFwiOiA0MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIxMzk1OlxcdFxcdCAgcHVycG9zZXMuICBJdCBpcyByZXF1aXJlZCB0byBlbmFibGUgdXNlcmZhdWx0ZmQgd3JpdGUgcHJvdGVjdGlvbiBvblxcbjEzOTY6XFx0XFx0ICBmaWxlLWJhY2tlZCBtZW1vcnkgdHlwZXMgbGlrZSBzaG1lbSBhbmQgaHVnZXRsYmZzLlxcbjEzOTc6XFx0XFxuMTM5ODpcXHQjIG11bHRpLWdlbiBMUlUge1xcbjEzOTk6XFx0Y29uZmlnIExSVV9HRU5cXG4xNDAwOlxcdFxcdGJvb2wgXFxcIk11bHRpLUdlbiBMUlVcXFwiXFxuMTQwMTpcXHRcXHRkZXBlbmRzIG9uIE1NVVxcbjE0MDI6XFx0XFx0IyBtYWtlIHN1cmUgZm9saW8tXFx1MDAzZWZsYWdzIGhhcyBlbm91Z2ggc3BhcmUgYml0c1xcbjE0MDM6XFx0XFx0ZGVwZW5kcyBvbiA2NEJJVCB8fCAhU1BBUlNFTUVNIHx8IFNQQVJTRU1FTV9WTUVNTUFQXFxuMTQwNDpcXHRcXHRoZWxwXFxuMTQwNTpcXHRcXHQgIEEgaGlnaCBwZXJmb3JtYW5jZSBMUlUgaW1wbGVtZW50YXRpb24gdG8gb3ZlcmNvbW1pdCBtZW1vcnkuIFNlZVxcbjE0MDY6XFx0XFx0ICBEb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL21tL211bHRpZ2VuX2xydS5yc3QgZm9yIGRldGFpbHMuXFxuMTQwNzpcXHRcXG4xNDA4OlxcdGNvbmZpZyBMUlVfR0VOX0VOQUJMRURcXG4xNDA5OlxcdFxcdGJvb2wgXFxcIkVuYWJsZSBieSBkZWZhdWx0XFxcIlxcbjE0MTA6XFx0XFx0ZGVwZW5kcyBvbiBMUlVfR0VOXFxuMTQxMTpcXHRcXHRoZWxwXFxuMTQxMjpcXHRcXHQgIFRoaXMgb3B0aW9uIGVuYWJsZXMgdGhlIG11bHRpLWdlbiBMUlUgYnkgZGVmYXVsdC5cXG4xNDEzOlxcdFxcbjE0MTQ6XFx0Y29uZmlnIExSVV9HRU5fU1RBVFNcXG4xNDE1OlxcdFxcdGJvb2wgXFxcIkZ1bGwgc3RhdHMgZm9yIGRlYnVnZ2luZ1xcXCJcXG4xNDE2OlxcdFxcdGRlcGVuZHMgb24gTFJVX0dFTlxcbjE0MTc6XFx0XFx0aGVscFxcbjE0MTg6XFx0XFx0ICBEbyBub3QgZW5hYmxlIHRoaXMgb3B0aW9uIHVubGVzcyB5b3UgcGxhbiB0byBsb29rIGF0IGhpc3RvcmljYWwgc3RhdHNcXG4xNDE5OlxcdFxcdCAgZnJvbSBldmljdGVkIGdlbmVyYXRpb25zIGZvciBkZWJ1Z2dpbmcgcHVycG9zZS5cXG4xNDIwOlxcdFxcbjE0MjE6XFx0XFx0ICBUaGlzIG9wdGlvbiBoYXMgYSBwZXItbWVtY2cgYW5kIHBlci1ub2RlIG1lbW9yeSBvdmVyaGVhZC5cXG4xNDIyOlxcdFxcbjE0MjM6XFx0Y29uZmlnIExSVV9HRU5fV0FMS1NfTU1VXFxuMTQyNDpcXHRcXHRkZWZfYm9vbCB5XFxuMTQyNTpcXHRcXHRkZXBlbmRzIG9uIExSVV9HRU4gXFx1MDAyNlxcdTAwMjYgQVJDSF9IQVNfSFdfUFRFX1lPVU5HXFxuMTQyNjpcXHQjIH1cXG4xNDI3OlxcdFxcbjE0Mjg6XFx0Y29uZmlnIExPQ0tfTU1fQU5EX0ZJTkRfVk1BXFxuMTQyOTpcXHRcXHRib29sXFxuMTQzMDpcXHRcXHRkZXBlbmRzIG9uICFTVEFDS19HUk9XU1VQXFxuMTQzMTpcXHRcXG4xNDMyOlxcdGNvbmZpZyBJT01NVV9NTV9EQVRBXFxuMTQzMzpcXHRcXHRib29sXFxuMTQzNDpcXHRcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTVUMTM6MDQ6MDIuNDU3NjkyNjM1WiIsIlNlcSI6MjEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjQxMDI4Nzc4MzMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTmF2aWdhdGluZyB0aGUgRGVwZW5kZW5jaWVzKipcblxuT2theSwgaGVyZSdzIHdoYXQgSSdtIHRoaW5raW5nLiBJIG5lZWQgdG8gZmlndXJlIG91dCB0aGUgZGVwZW5kZW5jaWVzIGZvciBgQ09ORklHX0xSVV9HRU5gLCBzdGFydGluZyB3aXRoIHRoZSBvYnZpb3VzIG9uZTogaXQncyBsaW5rZWQgdG8gYE1NVWAuIE1ha2VzIHNlbnNlLiBOb3csIGxldCdzIG5vdCBnZXQgYWhlYWQgb2Ygb3Vyc2VsdmVzLiBJIHNob3VsZCBhbHNvIHNlZSBpZiBgQ09ORklHX0RFQlVHX0ZTYCBpcyBhIHJlcXVpcmVtZW50LiBJIG5lZWQgdG8gYmUgdGhvcm91Z2ggd2l0aCB0aGVzZSBkZXBlbmRlbmNpZXMsIHNvIGxldCdzIGNoZWNrIGZvciBpdC4gSG1tLCBob2xkIG9uIGEgc2Vjb25kLiBJIG5lZWQgdG8gdmVyaWZ5IHdoZXRoZXIgYGRlYnVnZnNfY3JlYXRlX2ZpbGVfYXV4X251bWAgaXMgY29uZGl0aW9uYWwgb24gYENPTkZJR19ERUJVR19GU2AuIFRoaXMgc29ydCBvZiBkZXRhaWwgaXMgY3J1Y2lhbCBmb3IgY29uZmlndXJpbmcgbXkgc3lzdGVtIHByb3Blcmx5LiBPa2F5LCBsb29rcyBsaWtlIEkgbmVlZCB0byB0cmFjZSBiYWNrIGFuZCBmaW5kIHRoZSBkZWZpbml0aXZlIGRlZmluaXRpb24gb2YgYGRlYnVnZnNfY3JlYXRlX2ZpbGVfYXV4X251bWAuIFRoaXMgaXMgZ29pbmcgdG8gYmUgYSBmdW4gbGl0dGxlIGRpZywgYnV0IG5lY2Vzc2FyeS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTEwMDUsIk91dHB1dFRva2VucyI6MjQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo4OSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE1VDEzOjA0OjA2LjU2MDU3MjU5OFoiLCJTZXEiOjIyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjM0MzUwMzYxMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJkZWJ1Z2ZzX2NyZWF0ZV9maWxlX2F1eF9udW1cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9jcnlwdG8vaW50ZWwvcWF0L3FhdF9jb21tb24vYWRmX3RsX2RlYnVnZnMuYz02OTg9dm9pZCBhZGZfdGxfZGJnZnNfYWRkKHN0cnVjdCBhZGZfYWNjZWxfZGV2ICphY2NlbF9kZXYpXFxuLS1cXG5kcml2ZXJzL2NyeXB0by9pbnRlbC9xYXQvcWF0X2NvbW1vbi9hZGZfdGxfZGVidWdmcy5jLTcxNy1cXHRcXHRcXHQgQURGX1RMX0RCR19SUF9BTFBIQV9JTkRFWChpKSk7XFxuZHJpdmVycy9jcnlwdG8vaW50ZWwvcWF0L3FhdF9jb21tb24vYWRmX3RsX2RlYnVnZnMuYzo3MTg6XFx0XFx0ZGVidWdmc19jcmVhdGVfZmlsZV9hdXhfbnVtKG5hbWUsIDA2NDQsIGRpciwgYWNjZWxfZGV2LCBpLFxcbmRyaXZlcnMvY3J5cHRvL2ludGVsL3FhdC9xYXRfY29tbW9uL2FkZl90bF9kZWJ1Z2ZzLmMtNzE5LVxcdFxcdFxcdFxcdFxcdCAgICBcXHUwMDI2dGxfcnBfZGF0YV9mb3BzKTtcXG4tLVxcbmRyaXZlcnMvZmlybXdhcmUvYXJtX3NjbWkvcmF3X21vZGUuYz0xMjEzPXZvaWQgKnNjbWlfcmF3X21vZGVfaW5pdChjb25zdCBzdHJ1Y3Qgc2NtaV9oYW5kbGUgKmhhbmRsZSxcXG4tLVxcbmRyaXZlcnMvZmlybXdhcmUvYXJtX3NjbWkvcmF3X21vZGUuYy0xMjgxLVxcbmRyaXZlcnMvZmlybXdhcmUvYXJtX3NjbWkvcmF3X21vZGUuYzoxMjgyOlxcdFxcdFxcdGRlYnVnZnNfY3JlYXRlX2ZpbGVfYXV4X251bShcXFwibWVzc2FnZVxcXCIsIDA2MDAsIGNoZCxcXG5kcml2ZXJzL2Zpcm13YXJlL2FybV9zY21pL3Jhd19tb2RlLmMtMTI4My1cXHRcXHRcXHRcXHRcXHQgICAgcmF3LCBjaGFubmVsc1tpXSxcXG4tLVxcbmRyaXZlcnMvZmlybXdhcmUvYXJtX3NjbWkvcmF3X21vZGUuYy0xMjg1LVxcbmRyaXZlcnMvZmlybXdhcmUvYXJtX3NjbWkvcmF3X21vZGUuYzoxMjg2OlxcdFxcdFxcdGRlYnVnZnNfY3JlYXRlX2ZpbGVfYXV4X251bShcXFwibWVzc2FnZV9hc3luY1xcXCIsIDA2MDAsIGNoZCxcXG5kcml2ZXJzL2Zpcm13YXJlL2FybV9zY21pL3Jhd19tb2RlLmMtMTI4Ny1cXHRcXHRcXHRcXHRcXHQgICAgcmF3LCBjaGFubmVsc1tpXSxcXG4tLVxcbmRyaXZlcnMvZmlybXdhcmUvYXJtX3NjbWkvcmF3X21vZGUuYy0xMjg5LVxcbmRyaXZlcnMvZmlybXdhcmUvYXJtX3NjbWkvcmF3X21vZGUuYzoxMjkwOlxcdFxcdFxcdGRlYnVnZnNfY3JlYXRlX2ZpbGVfYXV4X251bShcXFwibWVzc2FnZV9wb2xsXFxcIiwgMDYwMCwgY2hkLFxcbmRyaXZlcnMvZmlybXdhcmUvYXJtX3NjbWkvcmF3X21vZGUuYy0xMjkxLVxcdFxcdFxcdFxcdFxcdFxcdCAgICByYXcsIGNoYW5uZWxzW2ldLFxcbi0tXFxuZHJpdmVycy9maXJtd2FyZS9hcm1fc2NtaS9yYXdfbW9kZS5jLTEyOTMtXFxuZHJpdmVycy9maXJtd2FyZS9hcm1fc2NtaS9yYXdfbW9kZS5jOjEyOTQ6XFx0XFx0XFx0ZGVidWdmc19jcmVhdGVfZmlsZV9hdXhfbnVtKFxcXCJtZXNzYWdlX3BvbGxfYXN5bmNcXFwiLCAwNjAwLFxcbmRyaXZlcnMvZmlybXdhcmUvYXJtX3NjbWkvcmF3X21vZGUuYy0xMjk1LVxcdFxcdFxcdFxcdFxcdFxcdCAgICBjaGQsIHJhdywgY2hhbm5lbHNbaV0sXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9hZi9ydnVfZGVidWdmcy5jPTI3NTg9c3RhdGljIHZvaWQgcnZ1X2RiZ19uaXhfaW5pdChzdHJ1Y3QgcnZ1ICpydnUsIGludCBibGthZGRyKVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvYWYvcnZ1X2RlYnVnZnMuYy0yNzkxLVxcdFxcdFxcdCAgICBcXHUwMDI2cnZ1X2RiZ19uaXhfbmRjX3J4X2hpdHNfbWlzc19mb3BzKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9hZi9ydnVfZGVidWdmcy5jOjI3OTI6XFx0ZGVidWdmc19jcmVhdGVfZmlsZV9hdXhfbnVtKFxcXCJxc2l6ZVxcXCIsIDA2MDAsIHJ2dS1cXHUwMDNlcnZ1X2RiZy5uaXgsIHJ2dSxcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9hZi9ydnVfZGVidWdmcy5jLTI3OTMtXFx0XFx0XFx0ICAgIGJsa2FkZHIsIFxcdTAwMjZydnVfZGJnX25peF9xc2l6ZV9mb3BzKTtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL2FmL3J2dV9kZWJ1Z2ZzLmM9MzEwND1zdGF0aWMgdm9pZCBydnVfZGJnX2NneF9pbml0KHN0cnVjdCBydnUgKnJ2dSlcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL2FmL3J2dV9kZWJ1Z2ZzLmMtMzE0NS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9hZi9ydnVfZGVidWdmcy5jOjMxNDY6XFx0XFx0XFx0ZGVidWdmc19jcmVhdGVfZmlsZV9hdXhfbnVtKFxcXCJzdGF0c1xcXCIsIDA2MDAsIHJ2dS1cXHUwMDNlcnZ1X2RiZy5sbWFjLFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL2FmL3J2dV9kZWJ1Z2ZzLmMtMzE0Ny1cXHRcXHRcXHRcXHRcXHRcXHQgICAgY3R4LCBsbWFjX2lkLCBcXHUwMDI2cnZ1X2RiZ19jZ3hfc3RhdF9mb3BzKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9hZi9ydnVfZGVidWdmcy5jOjMxNDg6XFx0XFx0XFx0ZGVidWdmc19jcmVhdGVfZmlsZV9hdXhfbnVtKFxcXCJtYWNfZmlsdGVyXFxcIiwgMDYwMCxcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9hZi9ydnVfZGVidWdmcy5jLTMxNDktXFx0XFx0XFx0XFx0XFx0ICAgIHJ2dS1cXHUwMDNlcnZ1X2RiZy5sbWFjLCBjdHgsIGxtYWNfaWQsXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvYWYvcnZ1X2RlYnVnZnMuYy0zMTUwLVxcdFxcdFxcdFxcdFxcdCAgICBcXHUwMDI2cnZ1X2RiZ19jZ3hfZG1hY19mbHRfZm9wcyk7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvYWYvcnZ1X2RlYnVnZnMuYzozMTUxOlxcdFxcdFxcdGRlYnVnZnNfY3JlYXRlX2ZpbGVfYXV4X251bShcXFwiZndkYXRhXFxcIiwgMDYwMCxcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9hZi9ydnVfZGVidWdmcy5jLTMxNTItXFx0XFx0XFx0XFx0XFx0XFx0ICAgIHJ2dS1cXHUwMDNlcnZ1X2RiZy5sbWFjLCBjdHgsXFxuLS1cXG5kcml2ZXJzL3BoeS9tZWRpYXRlay9waHktbXRrLXRwaHkuYz01MDU9c3RhdGljIHZvaWQgdTJfcGh5X2RiZ2ZzX2ZpbGVzX2NyZWF0ZShzdHJ1Y3QgbXRrX3BoeV9pbnN0YW5jZSAqaW5zdClcXG4tLVxcbmRyaXZlcnMvcGh5L21lZGlhdGVrL3BoeS1tdGstdHBoeS5jLTUxMC1cXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgY291bnQ7IGkrKylcXG5kcml2ZXJzL3BoeS9tZWRpYXRlay9waHktbXRrLXRwaHkuYzo1MTE6XFx0XFx0ZGVidWdmc19jcmVhdGVfZmlsZV9hdXhfbnVtKHUyX3BoeV9maWxlc1tpXSwgMDY0NCwgaW5zdC1cXHUwMDNlcGh5LVxcdTAwM2VkZWJ1Z2ZzLFxcbmRyaXZlcnMvcGh5L21lZGlhdGVrL3BoeS1tdGstdHBoeS5jLTUxMi1cXHRcXHRcXHRcXHQgICAgaW5zdCwgaSwgIFxcdTAwMjZ1Ml9waHlfZm9wcyk7XFxuLS1cXG5kcml2ZXJzL3BoeS9tZWRpYXRlay9waHktbXRrLXRwaHkuYz02MTU9c3RhdGljIHZvaWQgdTNfcGh5X2RiZ2ZzX2ZpbGVzX2NyZWF0ZShzdHJ1Y3QgbXRrX3BoeV9pbnN0YW5jZSAqaW5zdClcXG4tLVxcbmRyaXZlcnMvcGh5L21lZGlhdGVrL3BoeS1tdGstdHBoeS5jLTYyMC1cXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgY291bnQ7IGkrKylcXG5kcml2ZXJzL3BoeS9tZWRpYXRlay9waHktbXRrLXRwaHkuYzo2MjE6XFx0XFx0ZGVidWdmc19jcmVhdGVfZmlsZV9hdXhfbnVtKHUzX3BoeV9maWxlc1tpXSwgMDY0NCwgaW5zdC1cXHUwMDNlcGh5LVxcdTAwM2VkZWJ1Z2ZzLFxcbmRyaXZlcnMvcGh5L21lZGlhdGVrL3BoeS1tdGstdHBoeS5jLTYyMi1cXHRcXHRcXHRcXHQgICAgaW5zdCwgaSwgXFx1MDAyNnUzX3BoeV9mb3BzKTtcXG4tLVxcbmRyaXZlcnMvcGxhdGZvcm0veDg2L2RlbGwvYWxpZW53YXJlLXdtaS13bWF4LmM9MTQ3OD1zdGF0aWMgdm9pZCBhd2NjX2RlYnVnZnNfaW5pdChzdHJ1Y3Qgd21pX2RldmljZSAqd2RldilcXG4tLVxcbmRyaXZlcnMvcGxhdGZvcm0veDg2L2RlbGwvYWxpZW53YXJlLXdtaS13bWF4LmMtMTUxNS1cXHRcXHRzY25wcmludGYobmFtZSwgc2l6ZW9mKG5hbWUpLCBcXFwicGluJXVcXFwiLCBpKTtcXG5kcml2ZXJzL3BsYXRmb3JtL3g4Ni9kZWxsL2FsaWVud2FyZS13bWktd21heC5jOjE1MTY6XFx0XFx0ZGVidWdmc19jcmVhdGVfZmlsZV9hdXhfbnVtKG5hbWUsIDA2NDQsIGdwaW9fY3RsLCB3ZGV2LCBpLFxcbmRyaXZlcnMvcGxhdGZvcm0veDg2L2RlbGwvYWxpZW53YXJlLXdtaS13bWF4LmMtMTUxNy1cXHRcXHRcXHRcXHRcXHQgICAgXFx1MDAyNmF3Y2NfZ3Bpb19waW5fZm9wcyk7XFxuLS1cXG5kcml2ZXJzL3Njc2kvbHBmYy9scGZjX2RlYnVnZnMuYz02MDQyPWxwZmNfZGVidWdmc19pbml0aWFsaXplKHN0cnVjdCBscGZjX3Zwb3J0ICp2cG9ydClcXG4tLVxcbmRyaXZlcnMvc2NzaS9scGZjL2xwZmNfZGVidWdmcy5jLTYxMjAtXFx0XFx0LyogU2V0dXAgRElGIEVycm9yIEluamVjdGlvbnMgKi9cXG5kcml2ZXJzL3Njc2kvbHBmYy9scGZjX2RlYnVnZnMuYzo2MTIxOlxcdFxcdGRlYnVnZnNfY3JlYXRlX2ZpbGVfYXV4X251bShcXFwiSW5qRXJyTEJBXFxcIiwgMDY0NCxcXG5kcml2ZXJzL3Njc2kvbHBmYy9scGZjX2RlYnVnZnMuYy02MTIyLVxcdFxcdFxcdFxcdFxcdCAgICBwaGJhLVxcdTAwM2VoYmFfZGVidWdmc19yb290LCBwaGJhLFxcbi0tXFxuZHJpdmVycy9zY3NpL2xwZmMvbHBmY19kZWJ1Z2ZzLmMtNjEyNi1cXG5kcml2ZXJzL3Njc2kvbHBmYy9scGZjX2RlYnVnZnMuYzo2MTI3OlxcdFxcdGRlYnVnZnNfY3JlYXRlX2ZpbGVfYXV4X251bShcXFwiSW5qRXJyTlBvcnRJRFxcXCIsIDA2NDQsXFxuZHJpdmVycy9zY3NpL2xwZmMvbHBmY19kZWJ1Z2ZzLmMtNjEyOC1cXHRcXHRcXHRcXHRcXHQgICAgcGhiYS1cXHUwMDNlaGJhX2RlYnVnZnNfcm9vdCwgcGhiYSxcXG4tLVxcbmRyaXZlcnMvc2NzaS9scGZjL2xwZmNfZGVidWdmcy5jLTYxMzEtXFxuZHJpdmVycy9zY3NpL2xwZmMvbHBmY19kZWJ1Z2ZzLmM6NjEzMjpcXHRcXHRkZWJ1Z2ZzX2NyZWF0ZV9maWxlX2F1eF9udW0oXFxcIkluakVycldXUE5cXFwiLCAwNjQ0LFxcbmRyaXZlcnMvc2NzaS9scGZjL2xwZmNfZGVidWdmcy5jLTYxMzMtXFx0XFx0XFx0XFx0XFx0ICAgIHBoYmEtXFx1MDAzZWhiYV9kZWJ1Z2ZzX3Jvb3QsIHBoYmEsXFxuLS1cXG5kcml2ZXJzL3Njc2kvbHBmYy9scGZjX2RlYnVnZnMuYy02MTM2LVxcbmRyaXZlcnMvc2NzaS9scGZjL2xwZmNfZGVidWdmcy5jOjYxMzc6XFx0XFx0ZGVidWdmc19jcmVhdGVfZmlsZV9hdXhfbnVtKFxcXCJ3cml0ZUd1YXJkSW5qRXJyXFxcIiwgMDY0NCxcXG5kcml2ZXJzL3Njc2kvbHBmYy9scGZjX2RlYnVnZnMuYy02MTM4LVxcdFxcdFxcdFxcdFxcdCAgICBwaGJhLVxcdTAwM2VoYmFfZGVidWdmc19yb290LCBwaGJhLFxcbi0tXFxuZHJpdmVycy9zY3NpL2xwZmMvbHBmY19kZWJ1Z2ZzLmMtNjE0MS1cXG5kcml2ZXJzL3Njc2kvbHBmYy9scGZjX2RlYnVnZnMuYzo2MTQyOlxcdFxcdGRlYnVnZnNfY3JlYXRlX2ZpbGVfYXV4X251bShcXFwid3JpdGVBcHBJbmpFcnJcXFwiLCAwNjQ0LFxcbmRyaXZlcnMvc2NzaS9scGZjL2xwZmNfZGVidWdmcy5jLTYxNDMtXFx0XFx0XFx0XFx0XFx0ICAgIHBoYmEtXFx1MDAzZWhiYV9kZWJ1Z2ZzX3Jvb3QsIHBoYmEsXFxuLS1cXG5kcml2ZXJzL3Njc2kvbHBmYy9scGZjX2RlYnVnZnMuYy02MTQ1LVxcbmRyaXZlcnMvc2NzaS9scGZjL2xwZmNfZGVidWdmcy5jOjYxNDY6XFx0XFx0ZGVidWdmc19jcmVhdGVfZmlsZV9hdXhfbnVtKFxcXCJ3cml0ZVJlZkluakVyclxcXCIsIDA2NDQsXFxuZHJpdmVycy9zY3NpL2xwZmMvbHBmY19kZWJ1Z2ZzLmMtNjE0Ny1cXHRcXHRcXHRcXHRcXHQgICAgcGhiYS1cXHUwMDNlaGJhX2RlYnVnZnNfcm9vdCwgcGhiYSxcXG4tLVxcbmRyaXZlcnMvc2NzaS9scGZjL2xwZmNfZGVidWdmcy5jLTYxNDktXFxuZHJpdmVycy9zY3NpL2xwZmMvbHBmY19kZWJ1Z2ZzLmM6NjE1MDpcXHRcXHRkZWJ1Z2ZzX2NyZWF0ZV9maWxlX2F1eF9udW0oXFxcInJlYWRHdWFyZEluakVyclxcXCIsIDA2NDQsXFxuZHJpdmVycy9zY3NpL2xwZmMvbHBmY19kZWJ1Z2ZzLmMtNjE1MS1cXHRcXHRcXHRcXHRcXHQgICAgcGhiYS1cXHUwMDNlaGJhX2RlYnVnZnNfcm9vdCwgcGhiYSxcXG4tLVxcbmRyaXZlcnMvc2NzaS9scGZjL2xwZmNfZGVidWdmcy5jLTYxNTQtXFxuZHJpdmVycy9zY3NpL2xwZmMvbHBmY19kZWJ1Z2ZzLmM6NjE1NTpcXHRcXHRkZWJ1Z2ZzX2NyZWF0ZV9maWxlX2F1eF9udW0oXFxcInJlYWRBcHBJbmpFcnJcXFwiLCAwNjQ0LFxcbmRyaXZlcnMvc2NzaS9scGZjL2xwZmNfZGVidWdmcy5jLTYxNTYtXFx0XFx0XFx0XFx0XFx0ICAgIHBoYmEtXFx1MDAzZWhiYV9kZWJ1Z2ZzX3Jvb3QsIHBoYmEsXFxuLS1cXG5kcml2ZXJzL3Njc2kvbHBmYy9scGZjX2RlYnVnZnMuYy02MTU4LVxcbmRyaXZlcnMvc2NzaS9scGZjL2xwZmNfZGVidWdmcy5jOjYxNTk6XFx0XFx0ZGVidWdmc19jcmVhdGVfZmlsZV9hdXhfbnVtKFxcXCJyZWFkUmVmSW5qRXJyXFxcIiwgMDY0NCxcXG5kcml2ZXJzL3Njc2kvbHBmYy9scGZjX2RlYnVnZnMuYy02MTYwLVxcdFxcdFxcdFxcdFxcdCAgICBwaGJhLVxcdTAwM2VoYmFfZGVidWdmc19yb290LCBwaGJhLFxcbi0tXFxuZnMvb3JhbmdlZnMvb3JhbmdlZnMtZGVidWdmcy5jPTIzOD1zdGF0aWMgdm9pZCBvcmFuZ2Vmc19rZXJuZWxfZGVidWdfaW5pdCh2b2lkKVxcbi0tXFxuZnMvb3JhbmdlZnMvb3JhbmdlZnMtZGVidWdmcy5jLTI1MS1cXG5mcy9vcmFuZ2Vmcy9vcmFuZ2Vmcy1kZWJ1Z2ZzLmM6MjUyOlxcdGRlYnVnZnNfY3JlYXRlX2ZpbGVfYXV4X251bShPUkFOR0VGU19LTU9EX0RFQlVHX0ZJTEUsIDA0NDQsIGRlYnVnX2Rpciwga19idWZmZXIsXFxuZnMvb3JhbmdlZnMvb3JhbmdlZnMtZGVidWdmcy5jLTI1My1cXHRcXHRcXHQgICAgMCwgXFx1MDAyNmtlcm5lbF9kZWJ1Z19mb3BzKTtcXG4tLVxcbmZzL29yYW5nZWZzL29yYW5nZWZzLWRlYnVnZnMuYz0zMzc9c3RhdGljIHZvaWQgb3JhbmdlZnNfY2xpZW50X2RlYnVnX2luaXQodm9pZClcXG4tLVxcbmZzL29yYW5nZWZzL29yYW5nZWZzLWRlYnVnZnMuYy0zNTAtXFxuZnMvb3JhbmdlZnMvb3JhbmdlZnMtZGVidWdmcy5jOjM1MTpcXHRjbGllbnRfZGVidWdfZGVudHJ5ID0gZGVidWdmc19jcmVhdGVfZmlsZV9hdXhfbnVtKFxcbmZzL29yYW5nZWZzL29yYW5nZWZzLWRlYnVnZnMuYy0zNTItXFx0XFx0XFx0XFx0XFx0ICBPUkFOR0VGU19DTElFTlRfREVCVUdfRklMRSxcXG4tLVxcbmluY2x1ZGUvbGludXgvZGVidWdmcy5oPTQ2MT1zdGF0aWMgaW5saW5lIHNzaXplX3QgZGVidWdmc19yZWFkX2ZpbGVfc3RyKHN0cnVjdCBmaWxlICpmaWxlLFxcbi0tXFxuaW5jbHVkZS9saW51eC9kZWJ1Z2ZzLmgtNDY5LVxcbmluY2x1ZGUvbGludXgvZGVidWdmcy5oOjQ3MDojZGVmaW5lIGRlYnVnZnNfY3JlYXRlX2ZpbGVfYXV4X251bShuYW1lLCBtb2RlLCBwYXJlbnQsIGRhdGEsIG4sIGZvcHMpIFxcXFxcXG5pbmNsdWRlL2xpbnV4L2RlYnVnZnMuaC00NzEtXFx0ZGVidWdmc19jcmVhdGVfZmlsZV9hdXgobmFtZSwgbW9kZSwgcGFyZW50LCBkYXRhLCBcXFxcXFxuLS1cXG5tbS9zbHViLmM9MTAwNzU9c3RhdGljIHZvaWQgZGVidWdmc19zbGFiX2FkZChzdHJ1Y3Qga21lbV9jYWNoZSAqcylcXG4tLVxcbm1tL3NsdWIuYy0xMDA4My1cXG5tbS9zbHViLmM6MTAwODQ6XFx0ZGVidWdmc19jcmVhdGVfZmlsZV9hdXhfbnVtKFxcXCJhbGxvY190cmFjZXNcXFwiLCAwNDAwLCBzbGFiX2NhY2hlX2RpciwgcyxcXG5tbS9zbHViLmMtMTAwODUtXFx0XFx0XFx0XFx0XFx0VFJBQ0tfQUxMT0MsIFxcdTAwMjZzbGFiX2RlYnVnZnNfZm9wcyk7XFxubW0vc2x1Yi5jLTEwMDg2LVxcbm1tL3NsdWIuYzoxMDA4NzpcXHRkZWJ1Z2ZzX2NyZWF0ZV9maWxlX2F1eF9udW0oXFxcImZyZWVfdHJhY2VzXFxcIiwgMDQwMCwgc2xhYl9jYWNoZV9kaXIsIHMsXFxubW0vc2x1Yi5jLTEwMDg4LVxcdFxcdFxcdFxcdFxcdFRSQUNLX0ZSRUUsIFxcdTAwMjZzbGFiX2RlYnVnZnNfZm9wcyk7XFxuLS1cXG5tbS92bXNjYW4uYz02MDkzPXN0YXRpYyBpbnQgX19pbml0IGluaXRfbHJ1X2dlbih2b2lkKVxcbi0tXFxubW0vdm1zY2FuLmMtNjEwMC1cXG5tbS92bXNjYW4uYzo2MTAxOlxcdGRlYnVnZnNfY3JlYXRlX2ZpbGVfYXV4X251bShcXFwibHJ1X2dlblxcXCIsIDA2NDQsIE5VTEwsIE5VTEwsIGZhbHNlLFxcbm1tL3Ztc2Nhbi5jLTYxMDItXFx0XFx0XFx0XFx0ICAgIFxcdTAwMjZscnVfZ2VuX3J3X2ZvcHMpO1xcbm1tL3Ztc2Nhbi5jOjYxMDM6XFx0ZGVidWdmc19jcmVhdGVfZmlsZV9hdXhfbnVtKFxcXCJscnVfZ2VuX2Z1bGxcXFwiLCAwNDQ0LCBOVUxMLCBOVUxMLCB0cnVlLFxcbm1tL3Ztc2Nhbi5jLTYxMDQtXFx0XFx0XFx0XFx0ICAgIFxcdTAwMjZscnVfZ2VuX3JvX2ZvcHMpO1xcbi0tXFxuc291bmQvc29jL3NvZi9zb2YtY2xpZW50LWlwYy1mbG9vZC10ZXN0LmM9Mjg0PXN0YXRpYyBpbnQgc29mX2lwY19mbG9vZF9wcm9iZShzdHJ1Y3QgYXV4aWxpYXJ5X2RldmljZSAqYXV4ZGV2LFxcbi0tXFxuc291bmQvc29jL3NvZi9zb2YtY2xpZW50LWlwYy1mbG9vZC10ZXN0LmMtMzA2LVxcdFxcdC8qIGNyZWF0ZSByZWFkLXdyaXRlIGlwY19mbG9vZF9jb3VudCBkZWJ1Z2ZzIGVudHJ5ICovXFxuc291bmQvc29jL3NvZi9zb2YtY2xpZW50LWlwYy1mbG9vZC10ZXN0LmM6MzA3OlxcdFxcdGRlYnVnZnNfY3JlYXRlX2ZpbGVfYXV4X251bShERUJVR0ZTX0lQQ19GTE9PRF9DT1VOVCwgMDY0NCxcXG5zb3VuZC9zb2Mvc29mL3NvZi1jbGllbnQtaXBjLWZsb29kLXRlc3QuYy0zMDgtXFx0XFx0XFx0XFx0ICAgIHByaXYtXFx1MDAzZWRmc19yb290LCBjZGV2LCAwLCBcXHUwMDI2c29mX2lwY19mbG9vZF9mb3BzKTtcXG4tLVxcbnNvdW5kL3NvYy9zb2Yvc29mLWNsaWVudC1pcGMtZmxvb2QtdGVzdC5jLTMxMC1cXHRcXHQvKiBjcmVhdGUgcmVhZC13cml0ZSBpcGNfZmxvb2RfZHVyYXRpb25fbXMgZGVidWdmcyBlbnRyeSAqL1xcbnNvdW5kL3NvYy9zb2Yvc29mLWNsaWVudC1pcGMtZmxvb2QtdGVzdC5jOjMxMTpcXHRcXHRkZWJ1Z2ZzX2NyZWF0ZV9maWxlX2F1eF9udW0oREVCVUdGU19JUENfRkxPT0RfRFVSQVRJT04sIDA2NDQsXFxuc291bmQvc29jL3NvZi9zb2YtY2xpZW50LWlwYy1mbG9vZC10ZXN0LmMtMzEyLVxcdFxcdFxcdFxcdCAgICBwcml2LVxcdTAwM2VkZnNfcm9vdCwgY2RldiwgMSwgXFx1MDAyNnNvZl9pcGNfZmxvb2RfZm9wcyk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE1VDEzOjA0OjA4LjkwNDA4NDQ1OFoiLCJTZXEiOjIzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjo3NzkxODM4ODYzNCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipJbnZlc3RpZ2F0aW5nIHRoZSBscnVfZ2VuIERlYnVnZnMgSW50ZXJmYWNlKipcblxuT2theSwgc28gSSdtIGRpZ2dpbmcgaW50byB0aGUgbXVsdGlnZW4gTFJVIGltcGxlbWVudGF0aW9uLCBhbmQgdGhlIGZpcnN0IHRoaW5nIHRoYXQgY2F0Y2hlcyBteSBleWUgaXMgdGhpcyBgbW0vdm1zY2FuLmNgIGZpbGUuIFNwZWNpZmljYWxseSwgSSdtIGxvb2tpbmcgYXQgaG93IGBkZWJ1Z2ZzX2NyZWF0ZV9maWxlX2F1eF9udW1gIGlzIHVzZWQgdG8gY3JlYXRlIHRoZSBgL3N5cy9rZXJuZWwvZGVidWcvbHJ1X2dlbmAgZW50cnkuIEludGVyZXN0aW5nLi4uIHRoZSBmaWxlIG1vZGUgaXMgc2V0IHRvIDA2NDQuIFRoYXQncyBwcmV0dHkgc3RhbmRhcmQsIHJlYWQgZm9yIGV2ZXJ5b25lLCB3cml0ZSBmb3Igcm9vdCwgbWFrZXMgc2Vuc2UuIEJ1dCBpdCBhbHNvIG1lYW5zIGFueW9uZSAqY291bGQqIHBvdGVudGlhbGx5IHRyeSB0byB3cml0ZSB0byB0aGlzLCBzbyBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0IHdyaXRlcyB0byB0aGlzIGZpbGUgKmRvKi5cblxuTGV0J3Mgc2Vl4oCmIHdyaXRpbmcgdG8gdGhhdCBkZWJ1Z2ZzIGVudHJ5IGNhbGxzIGBscnVfZ2VuX3NlcV93cml0ZSgpYC4gQWxyaWdodCwgbm93IEkgbmVlZCB0byBmaWd1cmUgb3V0IHdoYXQgdGhhdCBkb2VzLCBhbmQgdGhlIGJlc3QgcGxhY2UgdG8gc3RhcnQgaXMgdGhlIGRvY3VtZW50YXRpb24uIExldCBtZSBjaGVjayB0aGUgYERvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUvbW0vbXVsdGlnZW5fbHJ1LnJzdGAgZmlsZS4gSSdsbCBlaXRoZXIgZ3JlcCBmb3IgaXRzIGNvbnRlbnRzIG9yIGp1c3QgcmVhZCBpdC4gVW5kZXJzdGFuZGluZyB3aGF0IHRoaXMgZW50cnkgY29udHJvbHMgaXMga2V5IHRvIHVuZGVyc3RhbmRpbmcgdGhlIG11bHRpZ2VuIExSVSBpbiBnZW5lcmFsLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNTI5NiwiT3V0cHV0VG9rZW5zIjoyNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE0MiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xNVQxMzowNToyNi44MjI0NzY2NjJaIiwiU2VxIjoyNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIxMDU0MjMwNiwiRXJyb3IiOiJubyBtYXRjaGVzIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwicnVuX2FnaW5nXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIkRvY3VtZW50YXRpb24vXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcImVycm9yXCI6IFwibm8gbWF0Y2hlc1wiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xNVQxMzowNToyNy4wMzMwNTIzNThaIiwiU2VxIjoyNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6NDk4ODkzOTMxMCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBteSBvd24gbWVudGFsIHByb2Nlc3MsIGdpdmVuIG15IGV4cGVydGlzZTpcblxuKipDaGVja2luZyBNdWx0aWdlbiBMUlUgRG9jdW1lbnRhdGlvbioqXG5cblJpZ2h0LCB0aW1lIHRvIGRpZyBpbnRvIHRoaXMgbXVsdGlnZW4gTFJVIGJ1c2luZXNzLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gZ28gc3RyYWlnaHQgdG8gdGhlIHNvdXJjZSDigJMgdGhlIGRvY3VtZW50YXRpb24uIFNwZWNpZmljYWxseSwgSSdtIHRoaW5raW5nIEknbGwgc3RhcnQgYnkgZ3JlcHBpbmcgdGhlIGRvY3VtZW50YXRpb24gZm9yIGBscnVfZ2VuYCB3aXRoaW4gYERvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUvbW0vbXVsdGlnZW5fbHJ1LnJzdGAuIFRoaXMgaXMgdGhlIG1vc3QgbG9naWNhbCBmaXJzdCBzdGVwLiBJIHN1c3BlY3QgdGhhdCB2YXJpYWJsZSBpcyBrZXkgdG8gdGhlIGltcGxlbWVudGF0aW9uIGRldGFpbHMgSSdtIGFmdGVyLCBhbmQgdGhhdCBkb2N1bWVudCBzaG91bGQgYmUgdGhlIHBsYWNlIHdoZXJlIHRoZSBjb25jZXB0IGlzIHRob3JvdWdobHkgZGlzY3Vzc2VkLiBHcmVwcGluZyBpcyBqdXN0IHRoZSBmYXN0ZXN0IHdheSB0byBnZXQgdG8gdGhhdCBpbmZvcm1hdGlvbiB3aXRob3V0IHJlYWRpbmcgdGhlIHdob2xlIGRvY3VtZW50LiBUaGlzIHdpbGwgaG9wZWZ1bGx5IGdpdmUgbWUgcXVpY2sgaGl0cyBvbiB3aGVyZSB0byBmb2N1cyBteSBhdHRlbnRpb24gYW5kIHNhdmUgbWUgc29tZSB0aW1lLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNTcyMywiT3V0cHV0VG9rZW5zIjozOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE1VDEzOjA1OjMyLjAyMTk5NTY3OFoiLCJTZXEiOjI2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDgxMzMyNTksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibHJ1X2dlblwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJEb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL21tL211bHRpZ2VuX2xydS5yc3RcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9tbS9tdWx0aWdlbl9scnUucnN0PTIwPVJ1bnRpbWUgb3B0aW9uc1xcbkRvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUvbW0vbXVsdGlnZW5fbHJ1LnJzdC0yMS09PT09PT09PT09PT09PT1cXG5Eb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL21tL211bHRpZ2VuX2xydS5yc3Q6MjI6YGAvc3lzL2tlcm5lbC9tbS9scnVfZ2VuL2BgIGNvbnRhaW5zIHN0YWJsZSBBQklzIGRlc2NyaWJlZCBpbiB0aGVcXG5Eb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL21tL211bHRpZ2VuX2xydS5yc3QtMjMtZm9sbG93aW5nIHN1YnNlY3Rpb25zLlxcbi0tXFxuRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9tbS9tdWx0aWdlbl9scnUucnN0PTU0PUUuZy4sXFxuLS1cXG5Eb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL21tL211bHRpZ2VuX2xydS5yc3QtNTYtXFxuRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9tbS9tdWx0aWdlbl9scnUucnN0OjU3OiAgICBlY2hvIHkgXFx1MDAzZS9zeXMva2VybmVsL21tL2xydV9nZW4vZW5hYmxlZFxcbkRvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUvbW0vbXVsdGlnZW5fbHJ1LnJzdDo1ODogICAgY2F0IC9zeXMva2VybmVsL21tL2xydV9nZW4vZW5hYmxlZFxcbkRvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUvbW0vbXVsdGlnZW5fbHJ1LnJzdC01OS0gICAgMHgwMDA3XFxuRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9tbS9tdWx0aWdlbl9scnUucnN0OjYwOiAgICBlY2hvIDUgXFx1MDAzZS9zeXMva2VybmVsL21tL2xydV9nZW4vZW5hYmxlZFxcbkRvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUvbW0vbXVsdGlnZW5fbHJ1LnJzdDo2MTogICAgY2F0IC9zeXMva2VybmVsL21tL2xydV9nZW4vZW5hYmxlZFxcbkRvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUvbW0vbXVsdGlnZW5fbHJ1LnJzdC02Mi0gICAgMHgwMDA1XFxuLS1cXG5Eb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL21tL211bHRpZ2VuX2xydS5yc3Q9ODQ9RXhwZXJpbWVudGFsIGZlYXR1cmVzXFxuRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9tbS9tdWx0aWdlbl9scnUucnN0LTg1LT09PT09PT09PT09PT09PT09PT09PVxcbkRvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUvbW0vbXVsdGlnZW5fbHJ1LnJzdDo4NjpgYC9zeXMva2VybmVsL2RlYnVnL2xydV9nZW5gYCBhY2NlcHRzIGNvbW1hbmRzIGRlc2NyaWJlZCBpbiB0aGVcXG5Eb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL21tL211bHRpZ2VuX2xydS5yc3QtODctZm9sbG93aW5nIHN1YnNlY3Rpb25zLiBNdWx0aXBsZSBjb21tYW5kIGxpbmVzIGFyZSBzdXBwb3J0ZWQsIHNvIGRvZXNcXG5Eb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL21tL211bHRpZ2VuX2xydS5yc3Q9ODg9Y29uY2F0ZW5hdGlvbiB3aXRoIGRlbGltaXRlcnMgYGAsYGAgYW5kIGBgO2BgLlxcbkRvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUvbW0vbXVsdGlnZW5fbHJ1LnJzdC04OS1cXG5Eb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL21tL211bHRpZ2VuX2xydS5yc3Q6OTA6YGAvc3lzL2tlcm5lbC9kZWJ1Zy9scnVfZ2VuX2Z1bGxgYCBwcm92aWRlcyBhZGRpdGlvbmFsIHN0YXRzIGZvclxcbkRvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUvbW0vbXVsdGlnZW5fbHJ1LnJzdC05MS1kZWJ1Z2dpbmcuIGBgQ09ORklHX0xSVV9HRU5fU1RBVFM9eWBgIGtlZXBzIGhpc3RvcmljYWwgc3RhdHMgZnJvbVxcbi0tXFxuRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9tbS9tdWx0aWdlbl9scnUucnN0PTEwMz1zY2hlZHVsZXIgbmVlZHMgdG8gZXN0aW1hdGUgdGhlIHdvcmtpbmcgc2V0cyBvZiB0aGUgZXhpc3Rpbmcgam9icy5cXG5Eb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL21tL211bHRpZ2VuX2xydS5yc3QtMTA0LVxcbkRvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUvbW0vbXVsdGlnZW5fbHJ1LnJzdDoxMDU6V2hlbiBpdCBpcyByZWFkLCBgYGxydV9nZW5gYCByZXR1cm5zIGEgaGlzdG9ncmFtIG9mIG51bWJlcnMgb2YgcGFnZXNcXG5Eb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL21tL211bHRpZ2VuX2xydS5yc3QtMTA2LWFjY2Vzc2VkIG92ZXIgZGlmZmVyZW50IHRpbWUgaW50ZXJ2YWxzIGZvciBlYWNoIG1lbWNnIGFuZCBub2RlLlxcbi0tXFxuRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9tbS9tdWx0aWdlbl9scnUucnN0PTEyMD10aGUgZm9ybWVyIGlzIHRoZSBsYXJnZXN0IGFuZCB0aGF0IG9mIHRoZSBsYXR0ZXIgaXMgdGhlIHNtYWxsZXN0LlxcbkRvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUvbW0vbXVsdGlnZW5fbHJ1LnJzdC0xMjEtXFxuRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9tbS9tdWx0aWdlbl9scnUucnN0OjEyMjpVc2VycyBjYW4gd3JpdGUgdGhlIGZvbGxvd2luZyBjb21tYW5kIHRvIGBgbHJ1X2dlbmBgIHRvIGNyZWF0ZSBhIG5ld1xcbkRvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUvbW0vbXVsdGlnZW5fbHJ1LnJzdC0xMjMtZ2VuZXJhdGlvbiBgYG1heF9nZW5fbnIrMWBgOlxcbi0tXFxuRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9tbS9tdWx0aWdlbl9scnUucnN0PTE0ND10aGlzIG5ldyBqb2IuXFxuRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9tbS9tdWx0aWdlbl9scnUucnN0LTE0NS1cXG5Eb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL21tL211bHRpZ2VuX2xydS5yc3Q6MTQ2OlVzZXJzIGNhbiB3cml0ZSB0aGUgZm9sbG93aW5nIGNvbW1hbmQgdG8gYGBscnVfZ2VuYGAgdG8gZXZpY3RcXG5Eb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL21tL211bHRpZ2VuX2xydS5yc3QtMTQ3LWdlbmVyYXRpb25zIGxlc3MgdGhhbiBvciBlcXVhbCB0byBgYG1pbl9nZW5fbnJgYC5cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTVUMTM6MDU6MzIuMDcwMTM1MDU3WiIsIlNlcSI6MjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjQzNzQ2MTI5OTcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBNdWx0aWdlbmVyYXRpb25hbCBMUlUgUGF0Y2gqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIGRvY3VtZW50YXRpb24sIGBEb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL21tL211bHRpZ2VuX2xydS5yc3RgLCBhbmQgaXQgbWVudGlvbnMgYSBjb21tYW5kIHRvIGNyZWF0ZSBhIG5ldyBnZW5lcmF0aW9uLCBzcGVjaWZpY2FsbHkgdGhlIGBscnVfZ2VuYCBjb21tYW5kLiBJdCBzZWVtcyBJIGNhbiBpbmNyZW1lbnQgdGhlIGdlbmVyYXRpb24gY291bnRlciB3aXRoIGArIFx1MDAzY21lbWNnX2lkXHUwMDNlIFx1MDAzY25vZGVfaWRcdTAwM2UgXHUwMDNjbWF4X2dlbl9uclx1MDAzZSBbc3dhcHBpbmVzc11gLiBJbnRlcmVzdGluZy4gTm93LCBsZXQncyBkaXZlIGludG8gdGhpcyBwYXRjaCBhbmQgc2VlIHdoYXQncyBiZWluZyBjaGFuZ2VkLlxuXG5BaCwgdGhlIGBtbS92bXNjYW4uY2AgZmlsZS4gSSBzZWUgdGhlIGRpZmYuIFRoZXkndmUgYWRkZWQgYSBjaGVjayB3aXRoaW4gdGhlIGBydW5fYWdpbmdgIGZ1bmN0aW9uOiBgaWYgKHNlcSBcdTAwM2MgbWF4X3NlcSkgcmV0dXJuIDA7YC4gUmlnaHQsIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoeSB0aGlzIGFkZGl0aW9uLiBMZXQncyBsb29rIGF0IHRoZSBvcmlnaW5hbCBjb2RlLlxuXG5CZWZvcmUgdGhlIHBhdGNoLCBpbiBgcnVuX2FnaW5nYCwgaWYgYHNlcWAgd2FzICpub3QqIGdyZWF0ZXIgdGhhbiBgbWF4X3NlcWAgaXQgd291bGQgcHJvY2VlZCB0byBjYWxsIGB0cnlfdG9faW5jX21heF9zZXFgLiBCdXQgd2hhdCdzIGhhcHBlbmluZyBpZiBgc2VxYCBpcyAqbGVzcyogdGhhbiBgbWF4X3NlcWA/IEJlZm9yZSB0aGUgcGF0Y2gsIGl0IHdvdWxkIHNpbXBseSBleGVjdXRlIGB0cnlfdG9faW5jX21heF9zZXFgLiBOb3cgdGhlcmUncyB0aGlzIGV4dHJhIGVhcmx5LW91dC4gVGhpcyBpcyBhIHBvdGVudGlhbCBidWchIFRoaXMgbWVhbnMgdGhhdCBpZiBgc2VxYCBpcyBsZXNzIHRoYW4gYG1heF9zZXFgLCB0aGUgZnVuY3Rpb24gd2lsbCByZXR1cm4gYDBgLCBieXBhc3NpbmcgdGhlIHBvdGVudGlhbGx5IHByb2JsZW1hdGljIGNhbGwgdG8gYHRyeV90b19pbmNfbWF4X3NlcWAuIEkgbmVlZCB0byBmaWd1cmUgb3V0IHdoYXQgYHRyeV90b19pbmNfbWF4X3NlcWAgZG9lcyB3aXRoIGBtYXhfc2VxYCB0byBmdWxseSB1bmRlcnN0YW5kIHRoaXMgbG9naWMuIEkgbmVlZCB0byBnbyBpbnZlc3RpZ2F0ZSB0aGF0IGZ1bmN0aW9uIG5vdyFcblxuXG4iLCJJbnB1dFRva2VucyI6MTY5NTEsIk91dHB1dFRva2VucyI6MzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0NTgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTVUMTM6MDU6MzYuNDQ0NzUwMzI0WiIsIlNlcSI6MjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NjU4OTQzOSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ0cnlfdG9faW5jX21heF9zZXFcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vdm1zY2FuLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vdm1zY2FuLmM9NDE0Mz1zdGF0aWMgYm9vbCBpbmNfbWF4X3NlcShzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIHVuc2lnbmVkIGxvbmcgc2VxLCBpbnQgc3dhcHBpbmVzcylcXG4tLVxcbm1tL3Ztc2Nhbi5jLTQyMDctXFxubW0vdm1zY2FuLmM6NDIwODpzdGF0aWMgYm9vbCB0cnlfdG9faW5jX21heF9zZXEoc3RydWN0IGxydXZlYyAqbHJ1dmVjLCB1bnNpZ25lZCBsb25nIHNlcSxcXG5tbS92bXNjYW4uYy00MjA5LVxcdFxcdFxcdCAgICAgICBpbnQgc3dhcHBpbmVzcywgYm9vbCBmb3JjZV9zY2FuKVxcbi0tXFxubW0vdm1zY2FuLmM9NDYyND1ib29sIHJlY2hlY2tfbHJ1X2dlbl9tYXhfbWVtY2coc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCBpbnQgbmlkKVxcbi0tXFxubW0vdm1zY2FuLmMtNDYzNi1cXG5tbS92bXNjYW4uYzo0NjM3OnN0YXRpYyB2b2lkIHRyeV90b19pbmNfbWF4X3NlcV9ub3dhbGsoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLFxcbm1tL3Ztc2Nhbi5jLTQ2MzgtXFx0XFx0XFx0XFx0ICAgICAgc3RydWN0IGxydXZlYyAqbHJ1dmVjKVxcbi0tXFxubW0vdm1zY2FuLmM9NDY3MT12b2lkIG1heF9scnVfZ2VuX21lbWNnKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgaW50IG5pZClcXG4tLVxcbm1tL3Ztc2Nhbi5jLTQ2NzctXFx0XFx0d2hpbGUgKGdldF9ucl9nZW5zKGxydXZlYywgdHlwZSkgXFx1MDAzYyBNQVhfTlJfR0VOUykge1xcbm1tL3Ztc2Nhbi5jOjQ2Nzg6XFx0XFx0XFx0dHJ5X3RvX2luY19tYXhfc2VxX25vd2FsayhtZW1jZywgbHJ1dmVjKTtcXG5tbS92bXNjYW4uYy00Njc5LVxcdFxcdFxcdGNvbmRfcmVzY2hlZCgpO1xcbi0tXFxubW0vdm1zY2FuLmM9NTE2MD1zdGF0aWMgYm9vbCBzaG91bGRfYWJvcnRfc2NhbihzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjKVxcbi0tXFxubW0vdm1zY2FuLmMtNTE5MS0gKiBGb3IgZnV0dXJlIG9wdGltaXphdGlvbnM6XFxubW0vdm1zY2FuLmM6NTE5MjogKiAxLiBEZWZlciB0cnlfdG9faW5jX21heF9zZXEoKSB0byB3b3JrcXVldWVzIHRvIHJlZHVjZSBsYXRlbmN5IGZvciBtZW1jZ1xcbm1tL3Ztc2Nhbi5jLTUxOTMtICogICAgcmVjbGFpbS5cXG4tLVxcbm1tL3Ztc2Nhbi5jPTUxOTU9c3RhdGljIGJvb2wgdHJ5X3RvX3Nocmlua19scnV2ZWMoc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYylcXG4tLVxcbm1tL3Ztc2Nhbi5jLTUyMTItXFx0XFx0aWYgKHNob3VsZF9ydW5fYWdpbmcobHJ1dmVjLCBtYXhfc2VxLCBzYywgc3dhcHBpbmVzcykpIHtcXG5tbS92bXNjYW4uYzo1MjEzOlxcdFxcdFxcdGlmICh0cnlfdG9faW5jX21heF9zZXEobHJ1dmVjLCBtYXhfc2VxLCBzd2FwcGluZXNzLCBmYWxzZSkpXFxubW0vdm1zY2FuLmMtNTIxNC1cXHRcXHRcXHRcXHRuZWVkX3JvdGF0ZSA9IHRydWU7XFxuLS1cXG5tbS92bXNjYW4uYz01ODI1PXN0YXRpYyBpbnQgcnVuX2FnaW5nKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgdW5zaWduZWQgbG9uZyBzZXEsXFxuLS1cXG5tbS92bXNjYW4uYy01ODM1LVxcbm1tL3Ztc2Nhbi5jOjU4MzY6XFx0cmV0dXJuIHRyeV90b19pbmNfbWF4X3NlcShscnV2ZWMsIG1heF9zZXEsIHN3YXBwaW5lc3MsIGZvcmNlX3NjYW4pID8gMCA6IC1FRVhJU1Q7XFxubW0vdm1zY2FuLmMtNTgzNy19XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE1VDEzOjA1OjM2LjQ5MTM0MzA0M1oiLCJTZXEiOjI5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjozNzEzMDQyMzE5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgc3VtbWFyeSwgYXMgdGhvdWdoIEknbSB0aGlua2luZyB0aHJvdWdoIHRoaXM6XG5cbioqQW5hbHl6aW5nIGB0cnlfdG9faW5jX21heF9zZXFgIGluIGBtbS92bXNjYW4uY2AqKlxuXG5Pa2F5LCBzbyBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0J3MgaGFwcGVuaW5nIHdpdGggYHRyeV90b19pbmNfbWF4X3NlcWAuIFJpZ2h0LCBsaW5lIDQyMDggaW4gYG1tL3Ztc2Nhbi5jYC4gTGV0J3MganVtcCBvdmVyIHRoZXJlIGFuZCB0YWtlIGEgbG9vay4gSSdtIGdvaW5nIHRvIHdhbnQgdG8gdW5kZXJzdGFuZCBpdHMgcm9sZSB3aXRoaW4gdGhlIGxhcmdlciBmcmFtZXdvcmsgb2YgbWVtb3J5IG1hbmFnZW1lbnQgYW5kIHRoZSB2aXJ0dWFsIG1lbW9yeSBzY2FubmluZyBwcm9jZXNzLiBTcGVjaWZpY2FsbHksIEknbGwgbmVlZCB0byBncmFzcCBob3cgdGhpcyBmdW5jdGlvbiBjb250cmlidXRlcyB0byBpbmNyZWFzaW5nIHRoZSBtYXhpbXVtIHNlcXVlbmNlIG51bWJlci4gSSdsbCBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCB0cmlnZ2VycyBpdHMgY2FsbCwgd2hhdCBpdHMgaW5wdXRzIGFyZSwgd2hhdCBpdCBkb2VzIHdpdGggdGhvc2UgaW5wdXRzLCBhbmQgd2hhdCB0aGUgdWx0aW1hdGUgcHVycG9zZSBvZiB0aGlzIHNlcXVlbmNlIGluY3JlbWVudCBpcyBpbiB0aGUgY29udGV4dCBvZiB0aGUgcGFnZSByZWNsYWltIHByb2Nlc3MuIExpa2VseSwgaXQgcGxheXMgYSByb2xlIGluIHRyYWNraW5nIG9yIG1hbmFnaW5nIHNvbWUgYXNwZWN0IG9mIG1lbW9yeSBwcmVzc3VyZSBvciBwYWdlIGFnaW5nLCBvdGhlcndpc2UsIHRoZSBmdW5jdGlvbiB3b3VsZCBiZSBwb2ludGxlc3MuIEkgc2hvdWxkIGxvb2sgZm9yIHRoZSBzdXJyb3VuZGluZyBjb2RlIGluIHRoZSBmdW5jdGlvbiB0byBwcm92aWRlIGNvbnRleHQsIGxvb2sgZm9yIGNvbW1lbnRzIGlmIHRoZXkgZXhpc3QsIGFuZCB0aGVuIGdvIGluIGZvciBhIGRlZXAgZGl2ZSB0byB3b3JrIG91dCBwcmVjaXNlbHkgd2hhdCB3ZSBhcmUgdHJ5aW5nIHRvIGFjaGlldmUgd2l0aCB0aGUgc2VxdWVuY2UgaW5jcmVtZW50LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxODU0NywiT3V0cHV0VG9rZW5zIjozNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMxLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE1VDEzOjA1OjQwLjIwNDM4ODYzMloiLCJTZXEiOjMwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NTY4MTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibW0vdm1zY2FuLmNcIixcbiAgXCJGaXJzdExpbmVcIjogNDIwOCxcbiAgXCJMaW5lQ291bnRcIjogNDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiNDIwODpcXHRzdGF0aWMgYm9vbCB0cnlfdG9faW5jX21heF9zZXEoc3RydWN0IGxydXZlYyAqbHJ1dmVjLCB1bnNpZ25lZCBsb25nIHNlcSxcXG40MjA5OlxcdFxcdFxcdFxcdCAgICAgICBpbnQgc3dhcHBpbmVzcywgYm9vbCBmb3JjZV9zY2FuKVxcbjQyMTA6XFx0e1xcbjQyMTE6XFx0XFx0Ym9vbCBzdWNjZXNzO1xcbjQyMTI6XFx0XFx0c3RydWN0IGxydV9nZW5fbW1fd2FsayAqd2FsaztcXG40MjEzOlxcdFxcdHN0cnVjdCBtbV9zdHJ1Y3QgKm1tID0gTlVMTDtcXG40MjE0OlxcdFxcdHN0cnVjdCBscnVfZ2VuX2ZvbGlvICpscnVnZW4gPSBcXHUwMDI2bHJ1dmVjLVxcdTAwM2VscnVnZW47XFxuNDIxNTpcXHRcXHRzdHJ1Y3QgbHJ1X2dlbl9tbV9zdGF0ZSAqbW1fc3RhdGUgPSBnZXRfbW1fc3RhdGUobHJ1dmVjKTtcXG40MjE2OlxcdFxcbjQyMTc6XFx0XFx0Vk1fV0FSTl9PTl9PTkNFKHNlcSBcXHUwMDNlIFJFQURfT05DRShscnVnZW4tXFx1MDAzZW1heF9zZXEpKTtcXG40MjE4OlxcdFxcbjQyMTk6XFx0XFx0aWYgKCFtbV9zdGF0ZSlcXG40MjIwOlxcdFxcdFxcdHJldHVybiBpbmNfbWF4X3NlcShscnV2ZWMsIHNlcSwgc3dhcHBpbmVzcyk7XFxuNDIyMTpcXHRcXG40MjIyOlxcdFxcdC8qIHNlZSB0aGUgY29tbWVudCBpbiBpdGVyYXRlX21tX2xpc3QoKSAqL1xcbjQyMjM6XFx0XFx0aWYgKHNlcSBcXHUwMDNjPSBSRUFEX09OQ0UobW1fc3RhdGUtXFx1MDAzZXNlcSkpXFxuNDIyNDpcXHRcXHRcXHRyZXR1cm4gZmFsc2U7XFxuNDIyNTpcXHRcXG40MjI2OlxcdFxcdC8qXFxuNDIyNzpcXHRcXHQgKiBJZiB0aGUgaGFyZHdhcmUgZG9lc24ndCBhdXRvbWF0aWNhbGx5IHNldCB0aGUgYWNjZXNzZWQgYml0LCBmYWxsYmFja1xcbjQyMjg6XFx0XFx0ICogdG8gbHJ1X2dlbl9sb29rX2Fyb3VuZCgpLCB3aGljaCBvbmx5IGNsZWFycyB0aGUgYWNjZXNzZWQgYml0IGluIGFcXG40MjI5OlxcdFxcdCAqIGhhbmRmdWwgb2YgUFRFcy4gU3ByZWFkaW5nIHRoZSB3b3JrIG91dCBvdmVyIGEgcGVyaW9kIG9mIHRpbWUgdXN1YWxseVxcbjQyMzA6XFx0XFx0ICogaXMgbGVzcyBlZmZpY2llbnQsIGJ1dCBpdCBhdm9pZHMgYnVyc3R5IHBhZ2UgZmF1bHRzLlxcbjQyMzE6XFx0XFx0ICovXFxuNDIzMjpcXHRcXHRpZiAoIXNob3VsZF93YWxrX21tdSgpKSB7XFxuNDIzMzpcXHRcXHRcXHRzdWNjZXNzID0gaXRlcmF0ZV9tbV9saXN0X25vd2FsayhscnV2ZWMsIHNlcSk7XFxuNDIzNDpcXHRcXHRcXHRnb3RvIGRvbmU7XFxuNDIzNTpcXHRcXHR9XFxuNDIzNjpcXHRcXG40MjM3OlxcdFxcdHdhbGsgPSBzZXRfbW1fd2FsayhOVUxMLCB0cnVlKTtcXG40MjM4OlxcdFxcdGlmICghd2Fsaykge1xcbjQyMzk6XFx0XFx0XFx0c3VjY2VzcyA9IGl0ZXJhdGVfbW1fbGlzdF9ub3dhbGsobHJ1dmVjLCBzZXEpO1xcbjQyNDA6XFx0XFx0XFx0Z290byBkb25lO1xcbjQyNDE6XFx0XFx0fVxcbjQyNDI6XFx0XFxuNDI0MzpcXHRcXHR3YWxrLVxcdTAwM2VscnV2ZWMgPSBscnV2ZWM7XFxuNDI0NDpcXHRcXHR3YWxrLVxcdTAwM2VzZXEgPSBzZXE7XFxuNDI0NTpcXHRcXHR3YWxrLVxcdTAwM2Vzd2FwcGluZXNzID0gc3dhcHBpbmVzcztcXG40MjQ2OlxcdFxcdHdhbGstXFx1MDAzZWZvcmNlX3NjYW4gPSBmb3JjZV9zY2FuO1xcbjQyNDc6XFx0XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE1VDEzOjA1OjQwLjIwNDg0Nzk1MloiLCJTZXEiOjMxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjo5NTM2NDk1ODQ3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5c2lzIG9mIE11bHRpLUdlbiBMUlUgUGF0Y2ggaW4gTWVtb3J5IE1hbmFnZW1lbnQqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIE15IGluaXRpYWwgdGhvdWdodCBpcyB0aGF0IHRoaXMgcGF0Y2ggaW4gYG1tL3Ztc2Nhbi5jYCwgcmVsYXRlZCB0byB0aGUgTXVsdGktR2VuIExSVSBzdWJzeXN0ZW0sIGlzIGludGVyZXN0aW5nLiBJdCBzZWVtcyB0byBjb3JyZWN0IGEgc3VidGxlIGxvZ2ljIGVycm9yIHdpdGhpbiB0aGUgYHJ1bl9hZ2luZ2AgZnVuY3Rpb24gYW5kIGhvdyBpdCBpbnRlcmFjdHMgd2l0aCB0aGUgYHNlcWAgcGFyYW1ldGVyIHByb3ZpZGVkIGJ5IHVzZXJzcGFjZS4gU3BlY2lmaWNhbGx5LCB0aGUgcGF0Y2ggYWRkcmVzc2VzIGEgc2NlbmFyaW8gd2hlcmUgdGhlIGtlcm5lbCB3b3VsZCBhdHRlbXB0IHRvIGluY3JlbWVudCBgbWF4X3NlcWAgZXZlbiB3aGVuIHRoZSB0YXJnZXQgYHNlcWAgd2FzIGFscmVhZHkgbGVzcyB0aGFuIHRoZSBjdXJyZW50IGBtYXhfc2VxYC4gVGhpcyBpbmRpY2F0ZWQgdGhhdCB1c2Vyc3BhY2Ugd2FzIHRyeWluZyB0byBhZ2UgdG8gYSBwb2ludCAqYmVoaW5kKiB3aGVyZSB0aGUgYWdpbmcgaGFkIGFscmVhZHkgb2NjdXJyZWQsIHdoaWNoIGlzIGlsbG9naWNhbC4gVGhlIG9yaWdpbmFsIGNvZGUncyBpbmNyZW1lbnQgbG9naWMgYXBwZWFyZWQgZmxhd2VkIGluIHRoaXMgY29uZGl0aW9uLlxuXG5Mb29raW5nIGF0IHRoZSBjb2RlLCBpdCBsb29rcyBsaWtlOiBpbiBgcnVuX2FnaW5nYCwgYG1heF9zZXFgIGlzIGRlZmluZWQuIFRoZSB1c2VyIHByb3ZpZGVzIGBzZXFgLiBJZiBgc2VxIFx1MDAzYyBtYXhfc2VxYCB0aGVuIHRoZSB1c2VyIGlzIGFza2luZyB0byBjcmVhdGUgZ2VuZXJhdGlvbiB1cCB0byBgc2VxYCwgYnV0IGBtYXhfc2VxYCBpcyBhbHJlYWR5IGdyZWF0ZXIgdGhhbiBgc2VxYCEgVGhlIHBhdGNoIG5vdyBwcmV2ZW50cyB0aGUgaWxsb2dpY2FsIGluY3JlbWVudCBvZiBgbWF4X3NlcWAgaW4gdGhhdCBjYXNlLCB3aGljaCBzaW1wbGlmaWVzIHRoaW5ncy4gSW4gYHJ1bl9ldmljdGlvbmAsIGlmIGBzZXEgXHUwMDNjIGV2aWN0YWJsZV9taW5fc2VxYCBpdCByZXR1cm5zIDAuIElmIGBzZXEgXHUwMDNlIG1heF9zZXFgIGl0IHJldHVybnMgYC1FSU5WQUxgLiBJdCBjYWxscyBgdHJ5X3RvX2luY19tYXhfc2VxKGxydXZlYywgbWF4X3NlcSwgc3dhcHBpbmVzcywgZm9yY2Vfc2NhbilgIHdoZW4gdGhlIGxvZ2ljIGlzIGNoYW5nZWQuXG5cbk5vdywgYXMgYW4gZXhwZXJ0LCBJJ20gZXZhbHVhdGluZyB3aGV0aGVyIHRoaXMgY2hhbmdlIHdhcnJhbnRzIGZ1cnRoZXIgaW52ZXN0aWdhdGlvbiBvciBmdXp6aW5nLiBUaGUga2V5IGNyaXRlcmlhLCBiYXNlZCBvbiB0aGUgcHJvdmlkZWQgaW5zdHJ1Y3Rpb25zLCByZXZvbHZlcyBhcm91bmQgcmVhY2hhYmlsaXR5IGFuZCB0aGUgbmF0dXJlIG9mIHRoZSBtb2RpZmljYXRpb25zLlxuXG5GaXJzdCwgKipyZWFjaGFiaWxpdHkqKiBpcyBrZXkuIFRoZSBjb2RlIHJlc2lkZXMgaW4gYC9zeXMva2VybmVsL2RlYnVnL2xydV9nZW5gIGEgZGVidWdmcyBmaWxlLCB3aGljaCBtZWFucyB0aGF0IGl0IGNhbiBiZSBleGVjdXRlZCBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMuIFRoaXMgaXMgZ29vZC4gSXQncyBtZW1vcnkgbWFuYWdlbWVudCBjb2RlLiBBbnlvbmUgY2FuIGFjY2VzcyB0aGlzLiBTbyB0aGF0IG1lYW5zIGl0IGNhbiBiZSByZWFjaGVkIVxuXG5TZWNvbmQsIEkgbmVlZCB0byBldmFsdWF0ZSAqd2hlbiB0byByZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlKi5cbi0gICBUaGlzIGlzbid0IG5vbi1rZXJuZWwgb3Igbm9uLWV4ZWN1dGFibGUgY2hhbmdlcywgaXQncyBjb2RlIGluIGBtbS92bXNjYW4uY2AuXG4tICAgVGhpcyBpcyBub3Qgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlLCBhcyBpdCBpcyBtZW1vcnkgbWFuYWdlbWVudCBjb2RlLlxuLSAgIFRoaXMgaXNuJ3QgYW4gdW5yZWFjaGFibGUgZXhlY3V0aW9uIHBhdGgsIGFzIGl0IGNhbiBiZSByZWFjaGVkIHZpYSBkZWJ1Z2ZzIGAvc3lzL2tlcm5lbC9kZWJ1Zy9scnVfZ2VuYC5cblxuVGhpcmQsIEkgbmVlZCB0byBldmFsdWF0ZSAqd2hlbiB0byByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUqLlxuLSAgIFRoaXMgaXMgYSAqKmNvcmUgc3Vic3lzdGVtKiogY2hhbmdlIChtZW1vcnkgbWFuYWdlbWVudCwgaW4gYG1tL2ApLlxuLSAgIFRoaXMgY29uc3RpdHV0ZXMgYSByZWZhY3RvcmluZyBvZiB0aGUgYWxnb3JpdGhtIGZsb3csIHNwZWNpZmljYWxseSBpbiBob3cgdGhlIFwic2VxXCIgdmFsdWUgaW50ZXJhY3RzIHdpdGggYWdpbmcgb3BlcmF0aW9ucy4gVGhpcyBtZWFucyBpdCBpcyB3b3J0aCBmdXp6aW5nIVxuXG5UaGlzIGFsc28gYnJpbmdzIGluIHRoZSBxdWVzdGlvbiBvZiBzeXprYWxsZXIuXG5cbkNhbiBzeXprYWxsZXIgZnV6eiBkZWJ1Z2ZzIGZpbGVzIG9yIHRoaXMgaW50ZXJmYWNlPyAqKlllcyEqKiBzeXprYWxsZXIgb3BlbnMgZmlsZXMgaW4gYC9zeXMva2VybmVsL2RlYnVnLy4uLmAgKHN5emthbGxlciBoYXMgYHN5el9vcGVuX2RldmAsIGBvcGVuYXRgLCBldGMuIGFuZCBjYW4gd3JpdGUgdG8gZGVidWdmcyBmaWxlcyBpZiByb290KS5cbkFuZCBldmVuIGlmIHN5emthbGxlciBkb2Vzbid0IGhhdmUgYW4gZXhwbGljaXQgdGVtcGxhdGUgZm9yIGBscnVfZ2VuYCwgc3l6a2FsbGVyIGZ1enplcyBmaWxlIHN5c3RlbXMgYW5kIGRlYnVnZnMgcGF0aHMsIG9yIHN5emthbGxlciBjYW4gdGFyZ2V0IGl0LlxuXG5GaW5hbGx5LCB0aGUgY29uZmlnIG9wdGlvbnM6IGBDT05GSUdfTFJVX0dFTmAgaXMgb2J2aW91c2x5IHJlcXVpcmVkIChNdWx0aS1HZW4gTFJVKSwgYW5kIGNyaXRpY2FsbHksIGBDT05GSUdfREVCVUdfRlNgIGlzICphbHNvKiBhIHJlcXVpcmVtZW50IHNpbmNlIHRoZSBkZWJ1Z2ZzIGZpbGUgYC9zeXMva2VybmVsL2RlYnVnL2xydV9nZW5gIGlzIGNyZWF0ZWQgYnkgYGRlYnVnZnNfY3JlYXRlX2ZpbGVfYXV4X251bWAuIFRoaXMgaXMgaW4gYGluaXRfbHJ1X2dlbmAuXG5cbkFuZCBmaW5hbGx5LCBgcnVuX2NtZGAgZG9lcyAqbm90KiByZXF1aXJlIGBDT05GSUdfTUVNQ0dgLiBJbiBgbW0vdm1zY2FuLmNgLCBsaW5lIDYwOTEgaGFzIGAjZW5kaWYgLyogQ09ORklHX01FTUNHICovYCB3aGljaCBtZWFucyB0aGUgZnVuY3Rpb24gaXMgKm5vdCogaW5zaWRlIHRoZSBgI2lmZGVmIENPTkZJR19NRU1DR2AgYmxvY2ssIHNvIGl0IGlzIGluZGVwZW5kZW50LlxuXG5CYXNlZCBvbiB0aGlzIGFuYWx5c2lzLCBJJ20gY29uZmlkZW50IHRoYXQgdGhpcyBwYXRjaCBpbiB0aGUgTXVsdGktR2VuIExSVSBzdWJzeXN0ZW0gd2FycmFudHMgZnVydGhlciBpbnZlc3RpZ2F0aW9uIGFuZCBmdXp6aW5nLCBnaXZlbiB0aGUgcG90ZW50aWFsIGZvciBzdWJ0bGUgbWVtb3J5IG1hbmFnZW1lbnQgaXNzdWVzIGFuZCBpdHMgYWNjZXNzaWJpbGl0eSB2aWEgZGVidWdmcy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTk1MDcsIk91dHB1dFRva2VucyI6MzIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNDkzLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTVUMTM6MDU6NDkuNzQxMzQ2NTQ5WiIsIlNlcSI6MzIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0ODk2NDA2OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCIjaWZkZWYgQ09ORklHX01FTUNHXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL3Ztc2Nhbi5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL3Ztc2Nhbi5jPTIyMz1zdGF0aWMgaW50IHNjX3N3YXBwaW5lc3Moc3RydWN0IHNjYW5fY29udHJvbCAqc2MsIHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZylcXG4tLVxcbm1tL3Ztc2Nhbi5jLTIyOS1cXG5tbS92bXNjYW4uYzoyMzA6I2lmZGVmIENPTkZJR19NRU1DR1xcbm1tL3Ztc2Nhbi5jLTIzMS1cXG4tLVxcbm1tL3Ztc2Nhbi5jPTI4MjQ9c3RhdGljIHN0cnVjdCBscnV2ZWMgKmdldF9scnV2ZWMoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCBpbnQgbmlkKVxcbi0tXFxubW0vdm1zY2FuLmMtMjgyNy1cXG5tbS92bXNjYW4uYzoyODI4OiNpZmRlZiBDT05GSUdfTUVNQ0dcXG5tbS92bXNjYW4uYy0yODI5LVxcdGlmIChtZW1jZykge1xcbi0tXFxubW0vdm1zY2FuLmM9Mjk4Mj1zdGF0aWMgc3RydWN0IGxydV9nZW5fbW1fbGlzdCAqZ2V0X21tX2xpc3Qoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKVxcbi0tXFxubW0vdm1zY2FuLmMtMjk4OC1cXG5tbS92bXNjYW4uYzoyOTg5OiNpZmRlZiBDT05GSUdfTUVNQ0dcXG5tbS92bXNjYW4uYy0yOTkwLVxcdGlmIChtZW1jZylcXG4tLVxcbm1tL3Ztc2Nhbi5jPTMwMjI9dm9pZCBscnVfZ2VuX2FkZF9tbShzdHJ1Y3QgbW1fc3RydWN0ICptbSlcXG4tLVxcbm1tL3Ztc2Nhbi5jLTMwMjgtXFx0Vk1fV0FSTl9PTl9PTkNFKCFsaXN0X2VtcHR5KFxcdTAwMjZtbS1cXHUwMDNlbHJ1X2dlbi5saXN0KSk7XFxubW0vdm1zY2FuLmM6MzAyOTojaWZkZWYgQ09ORklHX01FTUNHXFxubW0vdm1zY2FuLmMtMzAzMC1cXHRWTV9XQVJOX09OX09OQ0UobW0tXFx1MDAzZWxydV9nZW4ubWVtY2cpO1xcbi0tXFxubW0vdm1zY2FuLmM9MzA0OT12b2lkIGxydV9nZW5fZGVsX21tKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tKVxcbi0tXFxubW0vdm1zY2FuLmMtMzA1Ny1cXG5tbS92bXNjYW4uYzozMDU4OiNpZmRlZiBDT05GSUdfTUVNQ0dcXG5tbS92bXNjYW4uYy0zMDU5LVxcdG1lbWNnID0gbW0tXFx1MDAzZWxydV9nZW4ubWVtY2c7XFxuLS1cXG5tbS92bXNjYW4uYy0zMDgxLVxcbm1tL3Ztc2Nhbi5jOjMwODI6I2lmZGVmIENPTkZJR19NRU1DR1xcbm1tL3Ztc2Nhbi5jLTMwODMtXFx0bWVtX2Nncm91cF9wdXQobW0tXFx1MDAzZWxydV9nZW4ubWVtY2cpO1xcbi0tXFxubW0vdm1zY2FuLmMtMzA4Ny1cXG5tbS92bXNjYW4uYzozMDg4OiNpZmRlZiBDT05GSUdfTUVNQ0dcXG5tbS92bXNjYW4uYy0zMDg5LXZvaWQgbHJ1X2dlbl9taWdyYXRlX21tKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tKVxcbi0tXFxubW0vdm1zY2FuLmM9NDUxNj1zdGF0aWMgdm9pZCBscnVfZ2VuX3JvdGF0ZV9tZW1jZyhzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIGludCBvcClcXG4tLVxcbm1tL3Ztc2Nhbi5jLTQ1NTktXFxubW0vdm1zY2FuLmM6NDU2MDojaWZkZWYgQ09ORklHX01FTUNHXFxubW0vdm1zY2FuLmMtNDU2MS1cXG4tLVxcbm1tL3Ztc2Nhbi5jPTU3NjI9c3RhdGljIGludCBscnVfZ2VuX3NlcV9zaG93KHN0cnVjdCBzZXFfZmlsZSAqbSwgdm9pZCAqdilcXG4tLVxcbm1tL3Ztc2Nhbi5jLTU3NzUtXFxubW0vdm1zY2FuLmM6NTc3NjojaWZkZWYgQ09ORklHX01FTUNHXFxubW0vdm1zY2FuLmMtNTc3Ny1cXHRcXHRpZiAobWVtY2cpXFxuLS1cXG5tbS92bXNjYW4uYz02MDMxPXZvaWQgbHJ1X2dlbl9pbml0X2xydXZlYyhzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMpXFxuLS1cXG5tbS92bXNjYW4uYy02MDUwLVxcbm1tL3Ztc2Nhbi5jOjYwNTE6I2lmZGVmIENPTkZJR19NRU1DR1xcbm1tL3Ztc2Nhbi5jLTYwNTItXFxuLS1cXG5tbS92bXNjYW4uYz02OTA5PXVuc2lnbmVkIGxvbmcgdHJ5X3RvX2ZyZWVfcGFnZXMoc3RydWN0IHpvbmVsaXN0ICp6b25lbGlzdCwgaW50IG9yZGVyLFxcbi0tXFxubW0vdm1zY2FuLmMtNjk1MS1cXG5tbS92bXNjYW4uYzo2OTUyOiNpZmRlZiBDT05GSUdfTUVNQ0dcXG5tbS92bXNjYW4uYy02OTUzLVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xNVQxMzowNTo0OS43OTAzMTYzNjhaIiwiU2VxIjozMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6MTY1MTk1NjIyNjQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCdzIGRpdmUgaW50byB0aGlzIGNvZGUuXG5cbioqSW52ZXN0aWdhdGluZyBhIENvbmRpdGlvbmFsIENvbXBpbGF0aW9uIEJsb2NrKipcblxuQWxyaWdodCwgSSBzZWUgdGhpcyBgI2VuZGlmIC8qIENPTkZJR19NRU1DRyAqL2Agb24gbGluZSA2MDkxLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcywgXCJPa2F5LCB3aGF0J3MgKnRoaXMqIHJlZmVycmluZyB0bz9cIiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgc2NvcGUgb2YgdGhpcyBjb25kaXRpb25hbCBjb21waWxhdGlvbi4gSXQncyBhIGtleSBwaWVjZSBvZiB0aGUgcHV6emxlIGJlY2F1c2UgaXQgbWVhbnMgY29kZSB3aXRoaW4gdGhhdCBibG9jayBpcyBwb3RlbnRpYWxseSBhY3RpdmUgb3IgaW5hY3RpdmUgZGVwZW5kaW5nIG9uIGEgY29tcGlsZS10aW1lIGNvbmZpZ3VyYXRpb24gc2V0dGluZyDigJMgc3BlY2lmaWNhbGx5LCB3aGV0aGVyIGBDT05GSUdfTUVNQ0dgIGlzIGRlZmluZWQuIFRvIGdyYXNwIHdoYXQncyBnb2luZyBvbiwgSSBuZWVkIHRoZSBjb250ZXh0LiBTbywgSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCB0aGlzIGJsb2NrIGlzIGludGVuZGVkIHRvIGFjaGlldmUuIFRoZXJlZm9yZSwgbGV0J3MgcXVpY2tseSBleGFtaW5lIHRoZSBsaW5lcyBmcm9tIDYwNDggdG8gNjA5NS4gVGhhdCBzaG91bGQgYmUgZW5vdWdoIHRvIHJldmVhbCB3aGF0J3MgYmVpbmcgY29uZGl0aW9uYWxseSBpbmNsdWRlZC5cblxuXG4iLCJJbnB1dFRva2VucyI6MjI4OTAsIk91dHB1dFRva2VucyI6MzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0MiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xNVQxMzowNjowNi4zMDk4ODExMzNaIiwiU2VxIjozNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MzAxODYwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm1tL3Ztc2Nhbi5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDYwNDgsXG4gIFwiTGluZUNvdW50XCI6IDQ4XG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjYwNDg6XFx0XFx0XFx0bW1fc3RhdGUtXFx1MDAzZXNlcSA9IE1JTl9OUl9HRU5TO1xcbjYwNDk6XFx0fVxcbjYwNTA6XFx0XFxuNjA1MTpcXHQjaWZkZWYgQ09ORklHX01FTUNHXFxuNjA1MjpcXHRcXG42MDUzOlxcdHZvaWQgbHJ1X2dlbl9pbml0X21lbWNnKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZylcXG42MDU0OlxcdHtcXG42MDU1OlxcdFxcdHN0cnVjdCBscnVfZ2VuX21tX2xpc3QgKm1tX2xpc3QgPSBnZXRfbW1fbGlzdChtZW1jZyk7XFxuNjA1NjpcXHRcXG42MDU3OlxcdFxcdGlmICghbW1fbGlzdClcXG42MDU4OlxcdFxcdFxcdHJldHVybjtcXG42MDU5OlxcdFxcbjYwNjA6XFx0XFx0SU5JVF9MSVNUX0hFQUQoXFx1MDAyNm1tX2xpc3QtXFx1MDAzZWZpZm8pO1xcbjYwNjE6XFx0XFx0c3Bpbl9sb2NrX2luaXQoXFx1MDAyNm1tX2xpc3QtXFx1MDAzZWxvY2spO1xcbjYwNjI6XFx0fVxcbjYwNjM6XFx0XFxuNjA2NDpcXHR2b2lkIGxydV9nZW5fZXhpdF9tZW1jZyhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpXFxuNjA2NTpcXHR7XFxuNjA2NjpcXHRcXHRpbnQgaTtcXG42MDY3OlxcdFxcdGludCBuaWQ7XFxuNjA2ODpcXHRcXHRzdHJ1Y3QgbHJ1X2dlbl9tbV9saXN0ICptbV9saXN0ID0gZ2V0X21tX2xpc3QobWVtY2cpO1xcbjYwNjk6XFx0XFxuNjA3MDpcXHRcXHRWTV9XQVJOX09OX09OQ0UobW1fbGlzdCBcXHUwMDI2XFx1MDAyNiAhbGlzdF9lbXB0eShcXHUwMDI2bW1fbGlzdC1cXHUwMDNlZmlmbykpO1xcbjYwNzE6XFx0XFxuNjA3MjpcXHRcXHRmb3JfZWFjaF9ub2RlKG5pZCkge1xcbjYwNzM6XFx0XFx0XFx0c3RydWN0IGxydXZlYyAqbHJ1dmVjID0gZ2V0X2xydXZlYyhtZW1jZywgbmlkKTtcXG42MDc0OlxcdFxcdFxcdHN0cnVjdCBscnVfZ2VuX21tX3N0YXRlICptbV9zdGF0ZSA9IGdldF9tbV9zdGF0ZShscnV2ZWMpO1xcbjYwNzU6XFx0XFxuNjA3NjpcXHRcXHRcXHRWTV9XQVJOX09OX09OQ0UobWVtY2hyX2ludihscnV2ZWMtXFx1MDAzZWxydWdlbi5ucl9wYWdlcywgMCxcXG42MDc3OlxcdFxcdFxcdFxcdFxcdFxcdCAgIHNpemVvZihscnV2ZWMtXFx1MDAzZWxydWdlbi5ucl9wYWdlcykpKTtcXG42MDc4OlxcdFxcbjYwNzk6XFx0XFx0XFx0bHJ1dmVjLVxcdTAwM2VscnVnZW4ubGlzdC5uZXh0ID0gTElTVF9QT0lTT04xO1xcbjYwODA6XFx0XFxuNjA4MTpcXHRcXHRcXHRpZiAoIW1tX3N0YXRlKVxcbjYwODI6XFx0XFx0XFx0XFx0Y29udGludWU7XFxuNjA4MzpcXHRcXG42MDg0OlxcdFxcdFxcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBOUl9CTE9PTV9GSUxURVJTOyBpKyspIHtcXG42MDg1OlxcdFxcdFxcdFxcdGJpdG1hcF9mcmVlKG1tX3N0YXRlLVxcdTAwM2VmaWx0ZXJzW2ldKTtcXG42MDg2OlxcdFxcdFxcdFxcdG1tX3N0YXRlLVxcdTAwM2VmaWx0ZXJzW2ldID0gTlVMTDtcXG42MDg3OlxcdFxcdFxcdH1cXG42MDg4OlxcdFxcdH1cXG42MDg5OlxcdH1cXG42MDkwOlxcdFxcbjYwOTE6XFx0I2VuZGlmIC8qIENPTkZJR19NRU1DRyAqL1xcbjYwOTI6XFx0XFxuNjA5MzpcXHRzdGF0aWMgaW50IF9faW5pdCBpbml0X2xydV9nZW4odm9pZClcXG42MDk0OlxcdHtcXG42MDk1OlxcdFxcdEJVSUxEX0JVR19PTihNSU5fTlJfR0VOUyArIDEgXFx1MDAzZT0gTUFYX05SX0dFTlMpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xNVQxMzowNjowNi4zMTAxODU0NTNaIiwiU2VxIjozNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6MjQyMDk2MzI4MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIENvZGUncyBDb25kaXRpb25hbCBDb21waWxhdGlvbioqXG5cbkFscmlnaHQsIHNvIGBDT05GSUdfTUVNQ0dgIGZpbmlzaGVkIHVwIGFyb3VuZCBsaW5lIDYwOTEsIGJ1dCB0aGlzIGBydW5fYWdpbmdgIGZ1bmN0aW9uLCBpdCdzIHNpdHRpbmcgYXQgcm91Z2hseSBsaW5lIDU4MjcuIEkgbmVlZCB0byBmaWd1cmUgb3V0IHRoZSBjb25kaXRpb25hbCBjb21waWxhdGlvbiB0aGF0IGNvbnRyb2xzIGl0LiBNeSBndXQgdGVsbHMgbWUgaXQncyBsaWtlbHkgd3JhcHBlZCBpbiBhbiBgI2lmZGVmYCBvciBgI2lmYCBzdGF0ZW1lbnQuIE5vIG5lZWQgdG8gZ28gbGluZSBieSBsaW5lIGhlcmUsIGxldCdzIGp1c3QgbWFrZSB1c2Ugb2YgdGhlIGVkaXRvciBhbmQgcXVpY2tseSBzZWFyY2ggYmFja3dhcmRzIGZyb20gbGluZSA1ODI3IGZvciB0aGUgc3RhcnQgb2YgdGhlIHJlbGV2YW50IGAjaWZgIGJsb2NrIGFuZCBzZWUgd2hhdCdzIHdoYXQuIFRoaXMgc2hvdWxkbid0IHRha2UgbG9uZy5cblxuXG4iLCJJbnB1dFRva2VucyI6MjM4NzYsIk91dHB1dFRva2VucyI6MjksIk91dHB1dFRob3VnaHRzVG9rZW5zIjo2NiwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE1VDEzOjA2OjA4LjczMTE1MjgyNFoiLCJTZXEiOjM2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzQ5NzU3NjgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiXiNpZlwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS92bXNjYW4uY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS92bXNjYW4uYz03Nj1zdHJ1Y3Qgc2Nhbl9jb250cm9sIHtcXG4tLVxcbm1tL3Ztc2Nhbi5jLTE4My1cXG5tbS92bXNjYW4uYzoxODQ6I2lmZGVmIEFSQ0hfSEFTX1BSRUZFVENIV1xcbm1tL3Ztc2Nhbi5jLTE4NS1zdGF0aWMgaW5saW5lIHZvaWQgcHJlZmV0Y2h3X3ByZXZfbHJ1X2ZvbGlvKHN0cnVjdCBmb2xpbyAqZm9saW8sXFxuLS1cXG5tbS92bXNjYW4uYz0yMjM9c3RhdGljIGludCBzY19zd2FwcGluZXNzKHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjLCBzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpXFxuLS1cXG5tbS92bXNjYW4uYy0yMjktXFxubW0vdm1zY2FuLmM6MjMwOiNpZmRlZiBDT05GSUdfTUVNQ0dcXG5tbS92bXNjYW4uYy0yMzEtXFxuLS1cXG5tbS92bXNjYW4uYz0yNjA9c3RhdGljIGJvb2wgd3JpdGViYWNrX3Rocm90dGxpbmdfc2FuZShzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYylcXG4tLVxcbm1tL3Ztc2Nhbi5jLTI2My1cXHRcXHRyZXR1cm4gdHJ1ZTtcXG5tbS92bXNjYW4uYzoyNjQ6I2lmZGVmIENPTkZJR19DR1JPVVBfV1JJVEVCQUNLXFxubW0vdm1zY2FuLmMtMjY1LVxcdGlmIChjZ3JvdXBfc3Vic3lzX29uX2RmbChtZW1vcnlfY2dycF9zdWJzeXMpKVxcbi0tXFxubW0vdm1zY2FuLmM9MzQ1PXN0YXRpYyBib29sIGNhbl9kZW1vdGUoaW50IG5pZCwgc3RydWN0IHNjYW5fY29udHJvbCAqc2MsXFxuLS1cXG5tbS92bXNjYW4uYy0zNjQtXFxubW0vdm1zY2FuLmM6MzY1OiNpZmRlZiBDT05GSUdfU1dBUFxcbm1tL3Ztc2Nhbi5jLTM2Ni1zdGF0aWMgaW5saW5lIGJvb2wgcmVjbGFpbWFibGVfYW5vbl9pc19sb3coc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLFxcbi0tXFxubW0vdm1zY2FuLmM9ODk5PWVudW0gZm9saW9fcmVmZXJlbmNlcyB7XFxuLS1cXG5tbS92bXNjYW4uYy05MDQtXFxubW0vdm1zY2FuLmM6OTA1OiNpZmRlZiBDT05GSUdfTFJVX0dFTlxcbm1tL3Ztc2Nhbi5jLTkwNi0vKlxcbi0tXFxubW0vdm1zY2FuLmM9MTEzMz1zdGF0aWMgdW5zaWduZWQgaW50IHNocmlua19mb2xpb19saXN0KHN0cnVjdCBsaXN0X2hlYWQgKmZvbGlvX2xpc3QsXFxuLS1cXG5tbS92bXNjYW4uYy0xMzY3LVxcdFxcdFxcdFxcdFxcdGdvdG8gYWN0aXZhdGVfbG9ja2VkO1xcbm1tL3Ztc2Nhbi5jOjEzNjg6I2lmZGVmIENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRVxcbm1tL3Ztc2Nhbi5jLTEzNjktXFx0XFx0XFx0XFx0aWYgKG5yX3BhZ2VzIFxcdTAwM2U9IEhQQUdFX1BNRF9OUikge1xcbi0tXFxubW0vdm1zY2FuLmM9Mjc2MD1zdGF0aWMgYm9vbCBjYW5fYWdlX2Fub25fcGFnZXMoc3RydWN0IGxydXZlYyAqbHJ1dmVjLFxcbi0tXFxubW0vdm1zY2FuLmMtMjc3MS1cXG5tbS92bXNjYW4uYzoyNzcyOiNpZmRlZiBDT05GSUdfTFJVX0dFTlxcbm1tL3Ztc2Nhbi5jLTI3NzMtXFxubW0vdm1zY2FuLmM9Mjc3ND1ERUZJTkVfU1RBVElDX0tFWV9GQUxTRShscnVfc3dpdGNoKTtcXG5tbS92bXNjYW4uYzoyNzc1OiNpZmRlZiBDT05GSUdfTFJVX0dFTl9FTkFCTEVEXFxubW0vdm1zY2FuLmMtMjc3Ni1ERUZJTkVfU1RBVElDX0tFWV9BUlJBWV9UUlVFKGxydV9nZW5fY2FwcywgTlJfTFJVX0dFTl9DQVBTKTtcXG4tLVxcbm1tL3Ztc2Nhbi5jPTI4MjQ9c3RhdGljIHN0cnVjdCBscnV2ZWMgKmdldF9scnV2ZWMoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCBpbnQgbmlkKVxcbi0tXFxubW0vdm1zY2FuLmMtMjgyNy1cXG5tbS92bXNjYW4uYzoyODI4OiNpZmRlZiBDT05GSUdfTUVNQ0dcXG5tbS92bXNjYW4uYy0yODI5LVxcdGlmIChtZW1jZykge1xcbi0tXFxubW0vdm1zY2FuLmM9Mjk2MD1zdGF0aWMgdm9pZCByZXNldF9ibG9vbV9maWx0ZXIoc3RydWN0IGxydV9nZW5fbW1fc3RhdGUgKm1tX3N0YXRlLCB1bnNpZ25lZCBsb25nIHNlcSlcXG4tLVxcbm1tL3Ztc2Nhbi5jLTI5NzktXFxubW0vdm1zY2FuLmM6Mjk4MDojaWZkZWYgQ09ORklHX0xSVV9HRU5fV0FMS1NfTU1VXFxubW0vdm1zY2FuLmMtMjk4MS1cXG5tbS92bXNjYW4uYz0yOTgyPXN0YXRpYyBzdHJ1Y3QgbHJ1X2dlbl9tbV9saXN0ICpnZXRfbW1fbGlzdChzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpXFxuLS1cXG5tbS92bXNjYW4uYy0yOTg4LVxcbm1tL3Ztc2Nhbi5jOjI5ODk6I2lmZGVmIENPTkZJR19NRU1DR1xcbm1tL3Ztc2Nhbi5jLTI5OTAtXFx0aWYgKG1lbWNnKVxcbi0tXFxubW0vdm1zY2FuLmM9MzAyMj12b2lkIGxydV9nZW5fYWRkX21tKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tKVxcbi0tXFxubW0vdm1zY2FuLmMtMzAyOC1cXHRWTV9XQVJOX09OX09OQ0UoIWxpc3RfZW1wdHkoXFx1MDAyNm1tLVxcdTAwM2VscnVfZ2VuLmxpc3QpKTtcXG5tbS92bXNjYW4uYzozMDI5OiNpZmRlZiBDT05GSUdfTUVNQ0dcXG5tbS92bXNjYW4uYy0zMDMwLVxcdFZNX1dBUk5fT05fT05DRShtbS1cXHUwMDNlbHJ1X2dlbi5tZW1jZyk7XFxuLS1cXG5tbS92bXNjYW4uYz0zMDQ5PXZvaWQgbHJ1X2dlbl9kZWxfbW0oc3RydWN0IG1tX3N0cnVjdCAqbW0pXFxuLS1cXG5tbS92bXNjYW4uYy0zMDU3LVxcbm1tL3Ztc2Nhbi5jOjMwNTg6I2lmZGVmIENPTkZJR19NRU1DR1xcbm1tL3Ztc2Nhbi5jLTMwNTktXFx0bWVtY2cgPSBtbS1cXHUwMDNlbHJ1X2dlbi5tZW1jZztcXG4tLVxcbm1tL3Ztc2Nhbi5jLTMwODEtXFxubW0vdm1zY2FuLmM6MzA4MjojaWZkZWYgQ09ORklHX01FTUNHXFxubW0vdm1zY2FuLmMtMzA4My1cXHRtZW1fY2dyb3VwX3B1dChtbS1cXHUwMDNlbHJ1X2dlbi5tZW1jZyk7XFxuLS1cXG5tbS92bXNjYW4uYy0zMDg3LVxcbm1tL3Ztc2Nhbi5jOjMwODg6I2lmZGVmIENPTkZJR19NRU1DR1xcbm1tL3Ztc2Nhbi5jLTMwODktdm9pZCBscnVfZ2VuX21pZ3JhdGVfbW0oc3RydWN0IG1tX3N0cnVjdCAqbW0pXFxuLS1cXG5tbS92bXNjYW4uYz00NTE2PXN0YXRpYyB2b2lkIGxydV9nZW5fcm90YXRlX21lbWNnKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgaW50IG9wKVxcbi0tXFxubW0vdm1zY2FuLmMtNDU1OS1cXG5tbS92bXNjYW4uYzo0NTYwOiNpZmRlZiBDT05GSUdfTUVNQ0dcXG5tbS92bXNjYW4uYy00NTYxLVxcbi0tXFxubW0vdm1zY2FuLmM9NTc2Mj1zdGF0aWMgaW50IGxydV9nZW5fc2VxX3Nob3coc3RydWN0IHNlcV9maWxlICptLCB2b2lkICp2KVxcbi0tXFxubW0vdm1zY2FuLmMtNTc3NS1cXG5tbS92bXNjYW4uYzo1Nzc2OiNpZmRlZiBDT05GSUdfTUVNQ0dcXG5tbS92bXNjYW4uYy01Nzc3LVxcdFxcdGlmIChtZW1jZylcXG4tLVxcbm1tL3Ztc2Nhbi5jPTYwMzE9dm9pZCBscnVfZ2VuX2luaXRfbHJ1dmVjKHN0cnVjdCBscnV2ZWMgKmxydXZlYylcXG4tLVxcbm1tL3Ztc2Nhbi5jLTYwNTAtXFxubW0vdm1zY2FuLmM6NjA1MTojaWZkZWYgQ09ORklHX01FTUNHXFxubW0vdm1zY2FuLmMtNjA1Mi1cXG4tLVxcbm1tL3Ztc2Nhbi5jPTY5MDk9dW5zaWduZWQgbG9uZyB0cnlfdG9fZnJlZV9wYWdlcyhzdHJ1Y3Qgem9uZWxpc3QgKnpvbmVsaXN0LCBpbnQgb3JkZXIsXFxuLS1cXG5tbS92bXNjYW4uYy02OTUxLVxcbm1tL3Ztc2Nhbi5jOjY5NTI6I2lmZGVmIENPTkZJR19NRU1DR1xcbm1tL3Ztc2Nhbi5jLTY5NTMtXFxuLS1cXG5tbS92bXNjYW4uYz03NzM3PWJvb2wga3N3YXBkX3Rlc3RfaG9wZWxlc3MocGdfZGF0YV90ICpwZ2RhdClcXG4tLVxcbm1tL3Ztc2Nhbi5jLTc3NDEtXFxubW0vdm1zY2FuLmM6Nzc0MjojaWZkZWYgQ09ORklHX0hJQkVSTkFUSU9OXFxubW0vdm1zY2FuLmMtNzc0My0vKlxcbi0tXFxubW0vdm1zY2FuLmM9NzgyMj1zdGF0aWMgY29uc3Qgc3RydWN0IGN0bF90YWJsZSB2bXNjYW5fc3lzY3RsX3RhYmxlW10gPSB7XFxuLS1cXG5tbS92bXNjYW4uYy03ODMxLVxcdH0sXFxubW0vdm1zY2FuLmM6NzgzMjojaWZkZWYgQ09ORklHX05VTUFcXG5tbS92bXNjYW4uYy03ODMzLVxcdHtcXG4tLVxcbm1tL3Ztc2Nhbi5jPTc4NTQ9bW9kdWxlX2luaXQoa3N3YXBkX2luaXQpXFxubW0vdm1zY2FuLmMtNzg1NS1cXG5tbS92bXNjYW4uYzo3ODU2OiNpZmRlZiBDT05GSUdfTlVNQVxcbm1tL3Ztc2Nhbi5jLTc4NTctLypcXG4tLVxcbm1tL3Ztc2Nhbi5jPTgxOTk9RVhQT1JUX1NZTUJPTF9HUEwoY2hlY2tfbW92ZV91bmV2aWN0YWJsZV9mb2xpb3MpO1xcbm1tL3Ztc2Nhbi5jLTgyMDAtXFxubW0vdm1zY2FuLmM6ODIwMTojaWYgZGVmaW5lZChDT05GSUdfU1lTRlMpIFxcdTAwMjZcXHUwMDI2IGRlZmluZWQoQ09ORklHX05VTUEpXFxubW0vdm1zY2FuLmMtODIwMi1zdGF0aWMgc3NpemVfdCByZWNsYWltX3N0b3JlKHN0cnVjdCBkZXZpY2UgKmRldixcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTVUMTM6MDY6MDguODA2MTMzNDYyWiIsIlNlcSI6MzcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjYwNzE1MTA3NjEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBMUlUgR2VuZXJhdGlvbiBDb25maWd1cmF0aW9uKipcblxuT2theSwgc28gSSdtIGRpdmluZyBpbnRvIHRoaXMgY29kZSBhbmQgaW1tZWRpYXRlbHkgc2VlIGEgY3J1Y2lhbCBjb25kaXRpb25hbCBibG9jay4gTGluZSAyNzcyIGtpY2tzIHRoaW5ncyBvZmYgd2l0aCBgI2lmZGVmIENPTkZJR19MUlVfR0VOYCwgd2hpY2ggdGhlbiBzcGFucyBhbGwgdGhlIHdheSB0byBsaW5lIDYxMTAsIGVuZGluZyB3aXRoIGAjZWxzZSAvKiAhQ09ORklHX0xSVV9HRU4gKi9gLiBUaGF0J3MgYSBodWdlIGNsdWUgdGhhdCBgQ09ORklHX0xSVV9HRU5gIGlzIGEgc2lnbmlmaWNhbnQgY29uZmlndXJhdGlvbiBvcHRpb24uIFRoZW4sIGxvb2tpbmcgaW5zaWRlIHRoaXMgYmxvY2ssIGxpbmUgNjEwMSBqdW1wcyBvdXQgYXQgbWU6IGBkZWJ1Z2ZzX2NyZWF0ZV9maWxlX2F1eF9udW0oXCJscnVfZ2VuXCIsIC4uLilgLiBBaCwgc28gYExSVV9HRU5gIGlzIHRpZWQgdG8gZGVidWdmcyEgVGhhdCBwb2ludHMgdG8gdGhlIHVzZSBvZiBgREVCVUdfRlNgIGJlaW5nIGEgc2lnbmlmaWNhbnQgY29uZmlndXJhdGlvbiBhcyB3ZWxsLCBvciBhdCBsZWFzdCBob3cgdGhlIGRlYnVnZ2luZyBpbmZvcm1hdGlvbiBpcyBjb25maWd1cmVkLiBTbywgbXkgaW5pdGlhbCBoeXBvdGhlc2lzOiBgTFJVX0dFTmAgYW5kIGBERUJVR19GU2AgYXJlIHRoZSBrZXkgY29uZmlncyB0byB3YXRjaC4gV2FpdCBhIG1pbnV0ZeKApkkganVzdCB0aG91Z2h0IG9mIHNvbWV0aGluZywgd2hhdCBhYm91dCBgTFJVX0dFTl9FTkFCTEVEYD8gSSdkIGJldHRlciBkb3VibGUgY2hlY2sgd2hhdCBgbHJ1X2dlbl9lbmFibGVkKClgIGRvZXMsIGp1c3QgdG8gYmUgc3VyZS4gSSdtIGdvaW5nIHRvIGZvbGxvdyB0aGUgbG9naWMgYW5kIGxvb2sgYXQgdGhlIGltcGxlbWVudGF0aW9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNjExNCwiT3V0cHV0VG9rZW5zIjozMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEyNCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xNVQxMzowNjoxNC44Nzc2NDc3OTNaIiwiU2VxIjozOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjU1MTA0OTQ0MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJscnVfZ2VuX2VuYWJsZWRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vdm1zY2FuLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vdm1zY2FuLmM9MzY2PXN0YXRpYyBpbmxpbmUgYm9vbCByZWNsYWltYWJsZV9hbm9uX2lzX2xvdyhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csXFxuLS1cXG5tbS92bXNjYW4uYy0zODUtXFx0ICovXFxubW0vdm1zY2FuLmM6Mzg2OlxcdGlmIChscnVfZ2VuX2VuYWJsZWQoKSlcXG5tbS92bXNjYW4uYy0zODctXFx0XFx0cmV0dXJuIGZhbHNlO1xcbi0tXFxubW0vdm1zY2FuLmM9OTQzPXN0YXRpYyBlbnVtIGZvbGlvX3JlZmVyZW5jZXMgZm9saW9fY2hlY2tfcmVmZXJlbmNlcyhzdHJ1Y3QgZm9saW8gKmZvbGlvLFxcbi0tXFxubW0vdm1zY2FuLmMtOTY3LVxcbm1tL3Ztc2Nhbi5jOjk2ODpcXHRpZiAobHJ1X2dlbl9lbmFibGVkKCkgXFx1MDAyNlxcdTAwMjYgIWxydV9nZW5fc3dpdGNoaW5nKCkpIHtcXG5tbS92bXNjYW4uYy05NjktXFx0XFx0aWYgKCFyZWZlcmVuY2VkX3B0ZXMpXFxuLS1cXG5tbS92bXNjYW4uYz0yMzYwPXN0YXRpYyB2b2lkIHByZXBhcmVfc2Nhbl9jb250cm9sKHBnX2RhdGFfdCAqcGdkYXQsIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjKVxcbi0tXFxubW0vdm1zY2FuLmMtMjM2Ni1cXG5tbS92bXNjYW4uYzoyMzY3OlxcdGlmIChscnVfZ2VuX2VuYWJsZWQoKSBcXHUwMDI2XFx1MDAyNiAhbHJ1X2dlbl9zd2l0Y2hpbmcoKSlcXG5tbS92bXNjYW4uYy0yMzY4LVxcdFxcdHJldHVybjtcXG4tLVxcbm1tL3Ztc2Nhbi5jPTU1MTU9c3RhdGljIHZvaWQgbHJ1X2dlbl9jaGFuZ2Vfc3RhdGUoYm9vbCBlbmFibGVkKVxcbi0tXFxubW0vdm1zY2FuLmMtNTUyNS1cXG5tbS92bXNjYW4uYzo1NTI2OlxcdGlmIChlbmFibGVkID09IGxydV9nZW5fZW5hYmxlZCgpKVxcbm1tL3Ztc2Nhbi5jLTU1MjctXFx0XFx0Z290byB1bmxvY2s7XFxuLS1cXG5tbS92bXNjYW4uYz01NjEzPXN0YXRpYyBzc2l6ZV90IGVuYWJsZWRfc3RvcmUoc3RydWN0IGtvYmplY3QgKmtvYmosIHN0cnVjdCBrb2JqX2F0dHJpYnV0ZSAqYXR0cixcXG4tLVxcbm1tL3Ztc2Nhbi5jLTU2MzktXFxubW0vdm1zY2FuLmM6NTY0MDpzdGF0aWMgc3RydWN0IGtvYmpfYXR0cmlidXRlIGxydV9nZW5fZW5hYmxlZF9hdHRyID0gX19BVFRSX1JXKGVuYWJsZWQpO1xcbm1tL3Ztc2Nhbi5jLTU2NDEtXFxubW0vdm1zY2FuLmM9NTY0Mj1zdGF0aWMgc3RydWN0IGF0dHJpYnV0ZSAqbHJ1X2dlbl9hdHRyc1tdID0ge1xcbm1tL3Ztc2Nhbi5jLTU2NDMtXFx0XFx1MDAyNmxydV9nZW5fbWluX3R0bF9hdHRyLmF0dHIsXFxubW0vdm1zY2FuLmM6NTY0NDpcXHRcXHUwMDI2bHJ1X2dlbl9lbmFibGVkX2F0dHIuYXR0cixcXG5tbS92bXNjYW4uYy01NjQ1LVxcdE5VTExcXG4tLVxcbm1tL3Ztc2Nhbi5jPTYwMzE9dm9pZCBscnVfZ2VuX2luaXRfbHJ1dmVjKHN0cnVjdCBscnV2ZWMgKmxydXZlYylcXG4tLVxcbm1tL3Ztc2Nhbi5jLTYwMzgtXFx0bHJ1Z2VuLVxcdTAwM2VtYXhfc2VxID0gTUlOX05SX0dFTlMgKyAxO1xcbm1tL3Ztc2Nhbi5jOjYwMzk6XFx0bHJ1Z2VuLVxcdTAwM2VlbmFibGVkID0gbHJ1X2dlbl9lbmFibGVkKCk7XFxubW0vdm1zY2FuLmMtNjA0MC1cXG4tLVxcbm1tL3Ztc2Nhbi5jPTYxMjk9c3RhdGljIHZvaWQgc2hyaW5rX2xydXZlYyhzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjKVxcbi0tXFxubW0vdm1zY2FuLmMtNjEzOS1cXG5tbS92bXNjYW4uYzo2MTQwOlxcdGlmICgobHJ1X2dlbl9lbmFibGVkKCkgfHwgbHJ1X2dlbl9zd2l0Y2hpbmcoKSkgXFx1MDAyNlxcdTAwMjYgIXJvb3RfcmVjbGFpbShzYykpIHtcXG5tbS92bXNjYW4uYy02MTQxLVxcdFxcdGxydV9nZW5fc2hyaW5rX2xydXZlYyhscnV2ZWMsIHNjKTtcXG4tLVxcbm1tL3Ztc2Nhbi5jPTYzOTk9c3RhdGljIHZvaWQgc2hyaW5rX25vZGUocGdfZGF0YV90ICpwZ2RhdCwgc3RydWN0IHNjYW5fY29udHJvbCAqc2MpXFxuLS1cXG5tbS92bXNjYW4uYy02NDA0LVxcbm1tL3Ztc2Nhbi5jOjY0MDU6XFx0aWYgKChscnVfZ2VuX2VuYWJsZWQoKSB8fCBscnVfZ2VuX3N3aXRjaGluZygpKSBcXHUwMDI2XFx1MDAyNiByb290X3JlY2xhaW0oc2MpKSB7XFxubW0vdm1zY2FuLmMtNjQwNi1cXHRcXHRtZW1zZXQoXFx1MDAyNnNjLVxcdTAwM2VuciwgMCwgc2l6ZW9mKHNjLVxcdTAwM2VucikpO1xcbi0tXFxubW0vdm1zY2FuLmM9NjY1Nj1zdGF0aWMgdm9pZCBzbmFwc2hvdF9yZWZhdWx0cyhzdHJ1Y3QgbWVtX2Nncm91cCAqdGFyZ2V0X21lbWNnLCBwZ19kYXRhX3QgKnBnZGF0KVxcbi0tXFxubW0vdm1zY2FuLmMtNjY2MC1cXG5tbS92bXNjYW4uYzo2NjYxOlxcdGlmIChscnVfZ2VuX2VuYWJsZWQoKSBcXHUwMDI2XFx1MDAyNiAhbHJ1X2dlbl9zd2l0Y2hpbmcoKSlcXG5tbS92bXNjYW4uYy02NjYyLVxcdFxcdHJldHVybjtcXG4tLVxcbm1tL3Ztc2Nhbi5jPTcwMDU9c3RhdGljIHZvaWQga3N3YXBkX2FnZV9ub2RlKHN0cnVjdCBwZ2xpc3RfZGF0YSAqcGdkYXQsIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjKVxcbi0tXFxubW0vdm1zY2FuLmMtNzAwOS1cXG5tbS92bXNjYW4uYzo3MDEwOlxcdGlmIChscnVfZ2VuX2VuYWJsZWQoKSB8fCBscnVfZ2VuX3N3aXRjaGluZygpKSB7XFxubW0vdm1zY2FuLmMtNzAxMS1cXHRcXHRscnVfZ2VuX2FnZV9ub2RlKHBnZGF0LCBzYyk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE1VDEzOjA2OjE1LjQyODcwNDg4M1oiLCJTZXEiOjM5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjoxNTc4MzM5MTA4NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXNpcyBvZiBNR0xSVSBQYXRjaCBGdXp6aW5nIFJlYWRpbmVzcyoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93biBmb3IgZnV6emluZyByZWFkaW5lc3MuIEZpcnN0LCBJIG5vdGljZWQgdGhhdCBgbHJ1X2dlbl9zZXFfd3JpdGVgIGRvZXNuJ3QgZXZlbiBib3RoZXIgY2hlY2tpbmcgYGxydV9nZW5fZW5hYmxlZCgpYCwgd2hpY2ggaXMgYSBsaXR0bGUgb2RkLCBidXQgYExSVV9HRU5fRU5BQkxFRGAgZW5hYmxlcyBNR0xSVSBieSBkZWZhdWx0IGFueXdheS4gVGhlIHByaW1hcnkgY29uY2VybiBpcywgd2hhdCBjb25maWd1cmF0aW9ucyBhcmUgKnJlcXVpcmVkKiB0byBjb21waWxlIGFuZCBhY3R1YWxseSBleGVjdXRlIHRoZSAqbW9kaWZpZWQqIGNvZGU/XG5cbjEuICBgTFJVX0dFTmAgaXMgZXNzZW50aWFsOyB0aGUgcmVsZXZhbnQgY29kZSBpcyBndWFyZGVkIGJ5IGAjaWZkZWYgQ09ORklHX0xSVV9HRU5gLlxuMi4gIGBERUJVR19GU2AgaXMgbm9uLW5lZ290aWFibGUsIHNpbmNlIGBscnVfZ2VuX3NlcV93cml0ZWAgaXMgYSBkZWJ1Z2ZzIGZpbGUgaGFuZGxlci4gV2l0aG91dCBgQ09ORklHX0RFQlVHX0ZTYCwgdGhhdCBkZWJ1ZyBpbnRlcmZhY2UgYXQgYC9zeXMva2VybmVsL2RlYnVnL2xydV9nZW5gIHNpbXBseSBpc24ndCBwcmVzZW50LCBhbmQgd2UgY2FuJ3QgdHJpZ2dlciBhbnkgb2YgdGhpcy5cblxuTm93LCBsZXQncyBkZXRlcm1pbmUgdGhlIGBGb2N1c1N5bWJvbHNgLiBUaGUgZnVuY3Rpb24gdGhhdCBnb3QgdGhlIG1vZGlmaWNhdGlvbiBpcyBgcnVuX2FnaW5nYC4gQnV0IGlzIGBydW5fYWdpbmdgIGEgc3RhdGljIGZ1bmN0aW9uPyBZZXMsIGl0IGlzISBHaXZlbiB0aGF0IGBydW5fYWdpbmdgIGlzIGEgc3RhdGljIGZ1bmN0aW9uIGluIGBtbS92bXNjYW4uY2AsIGJ1dCBpdCdzIG5vdCBjb21waWxlci1pbmxpbmVkIGJlY2F1c2UgaXQgZXhpc3RzIGluIHRoZSBzeW1ib2wgdGFibGUsIGl0IGNhbiBiZSBhIGBGb2N1c1N5bWJvbGAuIEl0J3MgY2FsbGVkIGZyb20gYHJ1bl9jbWRgLCB3aGljaCBpcyBjYWxsZWQgYnkgYGxydV9nZW5fc2VxX3dyaXRlYCwgdGhlIGZpbGVcXF9vcGVyYXRpb25zIC53cml0ZSBtZXRob2QuXG5cbmBydW5fYWdpbmdgIHNlZW1zIHByZXR0eSBzcGVjaWZpYy4gQ2hlY2tpbmcgc2VjdGlvbiA0IG9mIHRoZSBndWlkZWxpbmVzLCBpdCdzOlxuKiAgIEEgdGFyZ2V0LXNwZWNpZmljIGZlYXR1cmUgbG9naWMuXG4qICAgSXQncyBhIC5jIGZpbGUsIG5vbi1zdGF0aWMuXG5cbmBydW5fYWdpbmdgIGlzICpub3QqIHViaXF1aXRvdXMuIEl0J3Mgb25seSBjYWxsZWQgd2hlbiB3cml0aW5nICcrJyB0byBgL3N5cy9rZXJuZWwvZGVidWcvbHJ1X2dlbmAsIGFzIGlzIHRoZSBlbnRyeXBvaW50LiBgcnVuX2NtZGAgYWxzbyBpc24ndCB1YmlxdWl0b3VzOyBpdCdzIG9ubHkgY2FsbGVkIGZyb20gd2l0aGluIGBscnVfZ2VuX3NlcV93cml0ZWAsIGFuZCBgdHJ5X3RvX2luY19tYXhfc2VxYCBpcyBvbmx5IGNhbGxlZCBieSBgcnVuX2FnaW5nYC4gU28gd2UgaGF2ZSB0aHJlZSBjbGVhciBzeW1ib2xzIHRvIGZvY3VzIG9uOiBgcnVuX2FnaW5nYCwgYHJ1bl9jbWRgLCBhbmQgYGxydV9nZW5fc2VxX3dyaXRlYC5cblxuRG91YmxlLWNoZWNraW5nLCBgcnVuX2FnaW5nYCBpcyBvbmx5IGRlZmluZWQgYW5kIGNhbGxlZCB3aXRoaW4gYG1tL3Ztc2Nhbi5jYC4gSXQncyBub3QgdXNlZCBhbnl3aGVyZSBlbHNlLiBTbyBpdCdzIHZlcnkgdGFyZ2V0ZWQuXG5cbklzIHRoaXMgcGF0Y2ggYFdvcnRoRnV6emluZ2A/IEFic29sdXRlbHkuXG4qICAgSXQncyBhIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgc3Vic3lzdGVtIGNoYW5nZSAoYG1tL3Ztc2Nhbi5jYCkuXG4qICAgRXhlY3V0YWJsZSBjb2RlIG1vZGlmaWVzIGxvZ2ljOiBpdCBhZGRzIGEgc2VxdWVuY2UgY2hlY2sgaW4gYHJ1bl9hZ2luZygpYCB0aGF0IHByZXZlbnRzIGB0cnlfdG9faW5jX21heF9zZXEoKWAgZnJvbSBiZWluZyBjYWxsZWQgd2l0aCBvYnNvbGV0ZSB2YWx1ZXMuXG4qICAgUmVhY2hhYmxlIHZpYSBhIGRlYnVnZnMgaW50ZXJmYWNlIGF0IGAvc3lzL2tlcm5lbC9kZWJ1Zy9scnVfZ2VuYC5cbiogICBUZXN0YWJsZSBpbiBhIHZpcnR1YWxpemVkIGVudmlyb25tZW50LlxuXG5Gb3IgYEVuYWJsZUNvbmZpZ3NgOiBXZSBuZWVkIGBMUlVfR0VOYCAoZm9yIHRoZSBNR0xSVSBjb2RlKSBhbmQgYERFQlVHX0ZTYCAodG8gZXhwb3NlIHRoZSBpbnRlcmZhY2UpLlxuXG5PdXIgZmluYWwgYEZvY3VzU3ltYm9sc2AgYXJlOiBgcnVuX2FnaW5nYCwgYHJ1bl9jbWRgLCBhbmQgYGxydV9nZW5fc2VxX3dyaXRlYC4gVGhleSBhcmUgc3BlY2lmaWMgdG8gdGhlIGZlYXR1cmUgYW5kIGFyZSBub24tdWJpcXVpdG91cy5cblxuTGV0J3MgZG8gYSBzYW5pdHkgY2hlY2sgdG8gY292ZXIgYWxsIHRoZSBiYXNlczogVGhlIGdvYWwgb2YgdGhpcyBmdXp6aW5nIGlzIHRvIGRpc2NvdmVyIG5ldyBjcmFzaGVzLCBsYXRlbnQgYnVncywgZXRjLiBhbmQgdGhpcyBjb2RlIGlzIHJlYWNoYWJsZSBieSB3YXkgb2YgYSBkZWJ1Z2ZzIGludGVyZmFjZS4gVGhpcyBjb2RlIGlzIGluIHRoZSBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IHN1YnN5c3RlbSBhbmQgYXZvaWRzIHViaXF1aXRvdXMgbGlmZWN5Y2xlIGhvdC1wYXRocy4gV2UgaGF2ZSBpZGVudGlmaWVkIGFsbCB0aGUgbmVjZXNzYXJ5IENPTkZJRyBvcHRpb25zLCBhbmQgc3RyaXBwZWQgdGhlIENPTkZJR1xcXyBwcmVmaXguXG5cbkV2ZXJ5dGhpbmcgbG9va3MgZ29vZC4gVGltZSB0byBjYWxsIGBzZXQtcmVzdWx0c2AuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI3Njg2LCJPdXRwdXRUb2tlbnMiOjE1OSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEzNzksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTVUMTM6MDY6MzEuMjEyMDk4NDQ4WiIsIlNlcSI6NDAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzY2OTg1ODksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkxSVV9HRU5cIixcbiAgICBcIkRFQlVHX0ZTXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwicnVuX2FnaW5nXCIsXG4gICAgXCJscnVfZ2VuX3NlcV93cml0ZVwiLFxuICAgIFwicnVuX2NtZFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBhZ2luZyBsb2dpYyBpbiB0aGUgTXVsdGktR2VuIExSVSAoTUdMUlUpIHN1YnN5c3RlbSBpbiBtbS92bXNjYW4uYy4gSXQgYWRkcyBhIGNoZWNrIGluIHJ1bl9hZ2luZygpIHRvIGltbWVkaWF0ZWx5IHJldHVybiBzdWNjZXNzIGlmIHRoZSByZXF1ZXN0ZWQgc2VxdWVuY2UgbnVtYmVyIGlzIG9sZGVyIHRoYW4gdGhlIGN1cnJlbnQgbWF4X3NlcSBpbnN0ZWFkIG9mIGF0dGVtcHRpbmcgYW4gaW5jcmVtZW50LiBUaGlzIGxvZ2ljIGlzIHJlYWNoYWJsZSBmcm9tIHVzZXJzcGFjZSBieSB3cml0aW5nIHRvIC9zeXMva2VybmVsL2RlYnVnL2xydV9nZW4sIG1ha2luZyBpdCBhbiBleGVjdXRhYmxlIGFuZCB0ZXN0YWJsZSBwYXRoIHdpdGhpbiBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50LlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkxSVV9HRU5cIixcbiAgICBcIkRFQlVHX0ZTXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwicnVuX2FnaW5nXCIsXG4gICAgXCJscnVfZ2VuX3NlcV93cml0ZVwiLFxuICAgIFwicnVuX2NtZFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBhZ2luZyBsb2dpYyBpbiB0aGUgTXVsdGktR2VuIExSVSAoTUdMUlUpIHN1YnN5c3RlbSBpbiBtbS92bXNjYW4uYy4gSXQgYWRkcyBhIGNoZWNrIGluIHJ1bl9hZ2luZygpIHRvIGltbWVkaWF0ZWx5IHJldHVybiBzdWNjZXNzIGlmIHRoZSByZXF1ZXN0ZWQgc2VxdWVuY2UgbnVtYmVyIGlzIG9sZGVyIHRoYW4gdGhlIGN1cnJlbnQgbWF4X3NlcSBpbnN0ZWFkIG9mIGF0dGVtcHRpbmcgYW4gaW5jcmVtZW50LiBUaGlzIGxvZ2ljIGlzIHJlYWNoYWJsZSBmcm9tIHVzZXJzcGFjZSBieSB3cml0aW5nIHRvIC9zeXMva2VybmVsL2RlYnVnL2xydV9nZW4sIG1ha2luZyBpdCBhbiBleGVjdXRhYmxlIGFuZCB0ZXN0YWJsZSBwYXRoIHdpdGhpbiBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50LlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xNVQxMzowNjozMS4yODg4MDY1ODdaIiwiU2VxIjo0MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJJZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjczOTYxMTM5NDQ5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTVUMTM6MDY6MzEuMjg5MzM4MjM3WiIsIlNlcSI6NDIsIk5lc3RpbmciOjIsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImNvcmUiLCJEdXJhdGlvbiI6NzM5NjA2MDMxMzksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHMgYW4gZWFybHkgcmV0dXJuIGNoZWNrIChgaWYgKHNlcSBcXHUwMDNjIG1heF9zZXEpIHJldHVybiAwO2ApIGluIGBydW5fYWdpbmcoKWAgd2l0aGluIGBtbS92bXNjYW4uY2AuIEl0IG9wZXJhdGVzIGV4Y2x1c2l2ZWx5IG9uIHNjYWxhciBpbnRlZ2VyIHZhbHVlcyAoYHNlcWAgYW5kIGBtYXhfc2VxYCkgYW5kIGFsdGVycyBjb250cm9sIGZsb3cgaW4gdGhlIG11bHRpLWdlbiBMUlUgYWdpbmcgdHJpZ2dlci4gVGhlIGNoYW5nZSBkb2VzIG5vdCBpbnRyb2R1Y2Ugb3IgbW9kaWZ5IGFueSBtZW1vcnkgYWxsb2NhdGlvbnMsIGRvZXMgbm90IHRvdWNoIHVuaW5pdGlhbGl6ZWQgc3RhY2sgb3IgaGVhcCBidWZmZXJzLCBhbmQgZG9lcyBub3QgcGFzcyBhbnkga2VybmVsIHN0cnVjdHVyZXMgdG8gdXNlciBzcGFjZS4gQmVjYXVzZSBubyB1bmluaXRpYWxpemVkIG1lbW9yeSBjYW4gYmUgcmVhZCwgYnJhbmNoZWQgdXBvbiwgb3IgbGVha2VkIHRvIHVzZXJzcGFjZSBhcyBhIHJlc3VsdCBvZiB0aGlzIGNoYW5nZSwgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgaXMgbm90IHdhcnJhbnRlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnlcbmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kXG5kZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpXG5mdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy5cblxuQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46XG4tIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGVcbiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOXG4gIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVBcbiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy5cbi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsXG4gIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy5cblxuUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTixcbkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuXG5BIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZXG5zZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrc1xudGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi5cblxuTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3RcbnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLFxuYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzXG50aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZ1xudW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sXG5mbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsXG5jYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy5cblxuU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOlxuMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2JcbiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzXG4gICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLlxuMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlc1xuICAgb3Igc3RydWN0IGZpZWxkcy5cbjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHNcbiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuXG40LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2Vzc1xuICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjpcbi0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXJcbiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0XG4gIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS5cbi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWRcbiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLlxuLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuXG5cblVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGVcbmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJUYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NFxuXG5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCA1NWI1ZWQ2MTY4YjhlMjliYTY3ODA5MjgyNWQ2NjY5MGZjYTIwNzJiXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFR1ZSBTZXAgMTUgMTI6NTk6MjYgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9tbS92bXNjYW4uYyBiL21tL3Ztc2Nhbi5jXG5pbmRleCA1MzU0ZWI4ZDNhMDdiLi4xOGM0ZDM1OTU3NDk3IDEwMDY0NFxuLS0tIGEvbW0vdm1zY2FuLmNcbisrKyBiL21tL3Ztc2Nhbi5jXG5AQCAtNTgyNyw2ICs1ODI3LDkgQEAgc3RhdGljIGludCBydW5fYWdpbmcoc3RydWN0IGxydXZlYyAqbHJ1dmVjLCB1bnNpZ25lZCBsb25nIHNlcSxcbiB7XG4gXHRERUZJTkVfTUFYX1NFUShscnV2ZWMpO1xuIFxuK1x0aWYgKHNlcSBcdTAwM2MgbWF4X3NlcSlcbitcdFx0cmV0dXJuIDA7XG4rXG4gXHRpZiAoc2VxIFx1MDAzZSBtYXhfc2VxKVxuIFx0XHRyZXR1cm4gLUVJTlZBTDtcbiBcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE1VDEzOjA2OjMxLjI4OTMzOTY5N1oiLCJTZXEiOjQzLCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjozNDMzMTM0NjU3NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRoaW5raW5nIHByb2Nlc3M6XG5cbioqRGl2aW5nIGludG8gdm1zY2FuLmMqKlxuXG5Pa2F5LCBzbyB0aGUgcGF0Y2ggSSdtIGludGVyZXN0ZWQgaW4gaXMgYnVyaWVkIHdpdGhpbiBgbW0vdm1zY2FuLmNgLiBUaGF0J3MgYSBwcmV0dHkgc3RhbmRhcmQgbG9jYXRpb24gZm9yIG1lbW9yeSBtYW5hZ2VtZW50IG1vZGlmaWNhdGlvbnMsIGJ1dCBJIHN0aWxsIG5lZWQgdG8gcGlucG9pbnQgdGhlIGV4YWN0IGxvY2F0aW9uLiBMaW5lIDU4MjfigKYgcmlnaHQuIFRpbWUgdG8gZmlyZSB1cCBteSB0b29scy4gSeKAmWxsIGxpa2VseSB1c2Ugc29tZXRoaW5nIGxpa2UgYHJlYWQtZmlsZWAgb3IgYGdyZXBwZXJgIOKAkyBzb21ldGhpbmcgdGhhdCBsZXRzIG1lIHF1aWNrbHkgbmF2aWdhdGUgdGhlIGZpbGUgYW5kIHNlZSB0aGUgc3Vycm91bmRpbmcgY29kZSBjb250ZXh0IGFyb3VuZCB0aGF0IGxpbmUgbnVtYmVyLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgaW1tZWRpYXRlIHZpY2luaXR5IG9mIHRoYXQgbGluZS4gVGhpcyBpbml0aWFsIGluc3BlY3Rpb24gc2hvdWxkIHJldmVhbCB0aGUgc3BlY2lmaWMgZnVuY3Rpb24gYW5kIHN1cnJvdW5kaW5nIGxvZ2ljIHRoZSBwYXRjaCB0b3VjaGVzLCBhbmQgZ2l2ZSBtZSBhIGZlZWwgZm9yIGl0cyBvdmVyYWxsIHB1cnBvc2Ugd2l0aGluIHRoZSB2bXNjYW4gZnJhbWV3b3JrLiBMZXQncyBzZWUgd2hhdCB3ZSdyZSB3b3JraW5nIHdpdGguXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIwNDUsIk91dHB1dFRva2VucyI6MzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozNCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE1VDEzOjA3OjA1LjYyMDY4OTg3NFoiLCJTZXEiOjQ0LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0Mjk2NjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibW0vdm1zY2FuLmNcIixcbiAgXCJGaXJzdExpbmVcIjogNTgxNSxcbiAgXCJMaW5lQ291bnRcIjogNDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiNTgxNTpcXHRcXHRyZXR1cm4gMDtcXG41ODE2OlxcdH1cXG41ODE3OlxcdFxcbjU4MTg6XFx0c3RhdGljIGNvbnN0IHN0cnVjdCBzZXFfb3BlcmF0aW9ucyBscnVfZ2VuX3NlcV9vcHMgPSB7XFxuNTgxOTpcXHRcXHQuc3RhcnQgPSBscnVfZ2VuX3NlcV9zdGFydCxcXG41ODIwOlxcdFxcdC5zdG9wID0gbHJ1X2dlbl9zZXFfc3RvcCxcXG41ODIxOlxcdFxcdC5uZXh0ID0gbHJ1X2dlbl9zZXFfbmV4dCxcXG41ODIyOlxcdFxcdC5zaG93ID0gbHJ1X2dlbl9zZXFfc2hvdyxcXG41ODIzOlxcdH07XFxuNTgyNDpcXHRcXG41ODI1OlxcdHN0YXRpYyBpbnQgcnVuX2FnaW5nKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgdW5zaWduZWQgbG9uZyBzZXEsXFxuNTgyNjpcXHRcXHRcXHQgICAgIGludCBzd2FwcGluZXNzLCBib29sIGZvcmNlX3NjYW4pXFxuNTgyNzpcXHR7XFxuNTgyODpcXHRcXHRERUZJTkVfTUFYX1NFUShscnV2ZWMpO1xcbjU4Mjk6XFx0XFxuNTgzMDpcXHRcXHRpZiAoc2VxIFxcdTAwM2MgbWF4X3NlcSlcXG41ODMxOlxcdFxcdFxcdHJldHVybiAwO1xcbjU4MzI6XFx0XFxuNTgzMzpcXHRcXHRpZiAoc2VxIFxcdTAwM2UgbWF4X3NlcSlcXG41ODM0OlxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbjU4MzU6XFx0XFxuNTgzNjpcXHRcXHRyZXR1cm4gdHJ5X3RvX2luY19tYXhfc2VxKGxydXZlYywgbWF4X3NlcSwgc3dhcHBpbmVzcywgZm9yY2Vfc2NhbikgPyAwIDogLUVFWElTVDtcXG41ODM3OlxcdH1cXG41ODM4OlxcdFxcbjU4Mzk6XFx0c3RhdGljIGludCBydW5fZXZpY3Rpb24oc3RydWN0IGxydXZlYyAqbHJ1dmVjLCB1bnNpZ25lZCBsb25nIHNlcSwgc3RydWN0IHNjYW5fY29udHJvbCAqc2MsXFxuNTg0MDpcXHRcXHRcXHRcXHRpbnQgc3dhcHBpbmVzcywgdW5zaWduZWQgbG9uZyBucl90b19yZWNsYWltKVxcbjU4NDE6XFx0e1xcbjU4NDI6XFx0XFx0aW50IG5yX2JhdGNoO1xcbjU4NDM6XFx0XFx0REVGSU5FX01BWF9TRVEobHJ1dmVjKTtcXG41ODQ0OlxcdFxcbjU4NDU6XFx0XFx0aWYgKHNlcSArIE1JTl9OUl9HRU5TIFxcdTAwM2UgbWF4X3NlcSlcXG41ODQ2OlxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbjU4NDc6XFx0XFxuNTg0ODpcXHRcXHRzYy1cXHUwMDNlbnJfcmVjbGFpbWVkID0gMDtcXG41ODQ5OlxcdFxcbjU4NTA6XFx0XFx0d2hpbGUgKCFzaWduYWxfcGVuZGluZyhjdXJyZW50KSkge1xcbjU4NTE6XFx0XFx0XFx0REVGSU5FX01JTl9TRVEobHJ1dmVjKTtcXG41ODUyOlxcdFxcbjU4NTM6XFx0XFx0XFx0aWYgKHNlcSBcXHUwMDNjIGV2aWN0YWJsZV9taW5fc2VxKG1pbl9zZXEsIHN3YXBwaW5lc3MpKVxcbjU4NTQ6XFx0XFx0XFx0XFx0cmV0dXJuIDA7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE1VDEzOjA3OjA1LjYyMTEyMTg5NFoiLCJTZXEiOjQ1LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjozNTgzMDUxMzU5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkFuYWx5emluZyB0aGUgYHJ1bl9hZ2luZ2AgRnVuY3Rpb24gQ2FsbCoqXG5cbkFscmlnaHQsIGxldCdzIGRpdmUgaW4uIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzIHRvIHRyYWNlIHRoZSBleGVjdXRpb24gb2YgYHJ1bl9hZ2luZ2AuIFRoZSBnb2FsIGlzIHRvIGZ1bGx5IHVuZGVyc3RhbmQgaXRzIGNvbnRleHQgYW5kIGltcGFjdC4gSSBuZWVkIHRvIHBpbnBvaW50IGV2ZXJ5IGluc3RhbmNlIHdoZXJlIGBydW5fYWdpbmdgIGlzIGludm9rZWQuIFRoaXMgbWVhbnMgZ29pbmcgYmV5b25kIGEgc2ltcGxlIGdyZXA7IEknbSBsb29raW5nIGZvciBpbmRpcmVjdCBjYWxscywgcG90ZW50aWFsIHdyYXBwZXIgZnVuY3Rpb25zLCBvciBldmVuIGR5bmFtaWMgaW1wb3J0cyB0aGF0IG1pZ2h0IGJlIGludm9sdmVkLlxuXG5PbmNlIEkndmUgZ290IHRoZSBjYWxsIHNpdGVzIGlkZW50aWZpZWQsIEknbGwgbmVlZCB0byBleGFtaW5lIHRoZSBwYXJhbWV0ZXJzIGJlaW5nIHBhc3NlZCB0byBgcnVuX2FnaW5nYCBhdCBlYWNoIGxvY2F0aW9uLiBXaGF0IGRhdGEgaXMgaXQgb3BlcmF0aW5nIG9uPyBXaGF0IGNvbmZpZ3VyYXRpb25zIGFyZSBiZWluZyBhcHBsaWVkPyBBcmUgdGhlcmUgZGlmZmVyZW50IGNvbnRyb2wgZmxvd3MgYmFzZWQgb24gdGhvc2UgYXJndW1lbnRzPyBUaGlzIGxldmVsIG9mIGRldGFpbCBpcyBjcnVjaWFsIGZvciBhc3Nlc3NpbmcgcG90ZW50aWFsIHNpZGUgZWZmZWN0cyBhbmQgcGVyZm9ybWFuY2UgaW1wbGljYXRpb25zLiBJJ2xsIG5lZWQgdG8gY29uZmlybSB0aGF0IG15IGFzc3VtcHRpb25zIG9mIGlucHV0cyBhbmQgb3V0cHV0cyByZW1haW4gY29ycmVjdC5cblxuTW9yZSBnZW5lcmFsbHksIEkgd2FudCB0byB1bmRlcnN0YW5kOlxuKiAgICoqRGF0YSBEZXBlbmRlbmNpZXM6KiogV2hhdCBvdGhlciBmdW5jdGlvbnMgb3IgZGF0YSBzdHJ1Y3R1cmVzIGRvZXMgYHJ1bl9hZ2luZ2AgcmVseSBvbiwgYm90aCBhcyBpbnB1dCBhbmQgb3V0cHV0PyBXaGF0IGFyZSBpdHMgcHJlLWNvbmRpdGlvbnMgYW5kIHBvc3QtY29uZGl0aW9ucz9cbiogICAqKkNvbmN1cnJlbmN5OioqIElzIHRoaXMgZnVuY3Rpb24gY2FsbGVkIGluIGEgbXVsdGktdGhyZWFkZWQgb3IgYXN5bmNocm9ub3VzIGVudmlyb25tZW50PyBUaGlzIGlzIGNyaXRpY2FsIGZvciB0aHJlYWQgc2FmZXR5IGFuZCB0byBhdm9pZCBpbnRyb2R1Y2luZyByYWNlIGNvbmRpdGlvbnMuXG4qICAgKipFcnJvciBIYW5kbGluZzoqKiBIb3cgZG9lcyBgcnVuX2FnaW5nYCBoYW5kbGUgZXhjZXB0aW9ucyBvciB1bmV4cGVjdGVkIGlucHV0PyBEb2VzIGl0IGltcGxlbWVudCBhcHByb3ByaWF0ZSBsb2dnaW5nIG9yIGV4Y2VwdGlvbiBoYW5kbGluZywgb3IgZG9lcyBpdCBkZXBlbmQgb24gZXh0ZXJuYWwgZXJyb3IgbWFuYWdlbWVudD9cbiogICAqKlBlcmZvcm1hbmNlOioqIFdoYXQgaXMgdGhlIGNvbXB1dGF0aW9uYWwgY29tcGxleGl0eSBvZiB0aGUgYWxnb3JpdGhtLCBhbmQgd2hhdCBhcmUgaXRzIHBlcmZvcm1hbmNlIGNoYXJhY3RlcmlzdGljcyBpbiBwcm9kdWN0aW9uPyBBcmUgdGhlcmUgb2J2aW91cyBib3R0bGVuZWNrcyBvciBhcmVhcyBmb3Igb3B0aW1pemF0aW9uP1xuXG5NeSB1bHRpbWF0ZSBnb2FsIGlzIHRvIGJ1aWxkIGEgY29tcGxldGUgbWVudGFsIG1vZGVsIG9mIGBydW5fYWdpbmdgJ3MgYmVoYXZpb3IgYW5kIHBvdGVudGlhbCBpbXBhY3QuIFRoaXMgdW5kZXJzdGFuZGluZyB3aWxsIGFsbG93IG1lIHRvIGNvbmZpZGVudGx5IG1vZGlmeSBvciBhbmFseXplIHRoZSBjb2RlLiBJdCBzaG91bGQgYWxzbyBoZWxwIG1lIGRpc2NvdmVyIGFueSB1bmZvcmVzZWVuIGludGVyYWN0aW9ucyBiZXR3ZWVuIGBydW5fYWdpbmdgIGFuZCBvdGhlciBwYXJ0cyBvZiB0aGUgc3lzdGVtLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyODc2LCJPdXRwdXRUb2tlbnMiOjM1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTksIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xNVQxMzowNzowOS4yMDQxNzU4MzJaIiwiU2VxIjo0NiwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDQ1MjA5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm1tL3Ztc2Nhbi5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDU4NTUsXG4gIFwiTGluZUNvdW50XCI6IDgwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjU4NTU6XFx0XFxuNTg1NjpcXHRcXHRcXHRpZiAoc2MtXFx1MDAzZW5yX3JlY2xhaW1lZCBcXHUwMDNlPSBucl90b19yZWNsYWltKVxcbjU4NTc6XFx0XFx0XFx0XFx0cmV0dXJuIDA7XFxuNTg1ODpcXHRcXG41ODU5OlxcdFxcdFxcdG5yX2JhdGNoID0gbWluKG5yX3RvX3JlY2xhaW0gLSBzYy1cXHUwMDNlbnJfcmVjbGFpbWVkLCBNQVhfTFJVX0JBVENIKTtcXG41ODYwOlxcdFxcdFxcdGlmICghZXZpY3RfZm9saW9zKG5yX2JhdGNoLCBscnV2ZWMsIHNjLCBzd2FwcGluZXNzKSlcXG41ODYxOlxcdFxcdFxcdFxcdHJldHVybiAwO1xcbjU4NjI6XFx0XFxuNTg2MzpcXHRcXHRcXHRjb25kX3Jlc2NoZWQoKTtcXG41ODY0OlxcdFxcdH1cXG41ODY1OlxcdFxcbjU4NjY6XFx0XFx0cmV0dXJuIC1FSU5UUjtcXG41ODY3OlxcdH1cXG41ODY4OlxcdFxcbjU4Njk6XFx0c3RhdGljIGludCBydW5fY21kKGNoYXIgY21kLCB1NjQgbWVtY2dfaWQsIGludCBuaWQsIHVuc2lnbmVkIGxvbmcgc2VxLFxcbjU4NzA6XFx0XFx0XFx0ICAgc3RydWN0IHNjYW5fY29udHJvbCAqc2MsIGludCBzd2FwcGluZXNzLCB1bnNpZ25lZCBsb25nIG9wdClcXG41ODcxOlxcdHtcXG41ODcyOlxcdFxcdHN0cnVjdCBscnV2ZWMgKmxydXZlYztcXG41ODczOlxcdFxcdGludCBlcnIgPSAtRUlOVkFMO1xcbjU4NzQ6XFx0XFx0c3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnID0gTlVMTDtcXG41ODc1OlxcdFxcbjU4NzY6XFx0XFx0aWYgKG5pZCBcXHUwMDNjIDAgfHwgbmlkIFxcdTAwM2U9IE1BWF9OVU1OT0RFUyB8fCAhbm9kZV9zdGF0ZShuaWQsIE5fTUVNT1JZKSlcXG41ODc3OlxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbjU4Nzg6XFx0XFxuNTg3OTpcXHRcXHRpZiAoIW1lbV9jZ3JvdXBfZGlzYWJsZWQoKSkge1xcbjU4ODA6XFx0XFx0XFx0bWVtY2cgPSBtZW1fY2dyb3VwX2dldF9mcm9tX2lkKG1lbWNnX2lkKTtcXG41ODgxOlxcdFxcdFxcdGlmICghbWVtY2cpXFxuNTg4MjpcXHRcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG41ODgzOlxcdFxcdH1cXG41ODg0OlxcdFxcbjU4ODU6XFx0XFx0aWYgKG1lbWNnX2lkICE9IG1lbV9jZ3JvdXBfaWQobWVtY2cpKVxcbjU4ODY6XFx0XFx0XFx0Z290byBkb25lO1xcbjU4ODc6XFx0XFxuNTg4ODpcXHRcXHRzYy1cXHUwMDNldGFyZ2V0X21lbV9jZ3JvdXAgPSBtZW1jZztcXG41ODg5OlxcdFxcdGxydXZlYyA9IGdldF9scnV2ZWMobWVtY2csIG5pZCk7XFxuNTg5MDpcXHRcXG41ODkxOlxcdFxcdGlmIChzd2FwcGluZXNzIFxcdTAwM2MgTUlOX1NXQVBQSU5FU1MpXFxuNTg5MjpcXHRcXHRcXHRzd2FwcGluZXNzID0gZ2V0X3N3YXBwaW5lc3MobHJ1dmVjLCBzYyk7XFxuNTg5MzpcXHRcXHRlbHNlIGlmIChzd2FwcGluZXNzIFxcdTAwM2UgU1dBUFBJTkVTU19BTk9OX09OTFkpXFxuNTg5NDpcXHRcXHRcXHRnb3RvIGRvbmU7XFxuNTg5NTpcXHRcXG41ODk2OlxcdFxcdHN3aXRjaCAoY21kKSB7XFxuNTg5NzpcXHRcXHRjYXNlICcrJzpcXG41ODk4OlxcdFxcdFxcdGVyciA9IHJ1bl9hZ2luZyhscnV2ZWMsIHNlcSwgc3dhcHBpbmVzcywgb3B0KTtcXG41ODk5OlxcdFxcdFxcdGJyZWFrO1xcbjU5MDA6XFx0XFx0Y2FzZSAnLSc6XFxuNTkwMTpcXHRcXHRcXHRlcnIgPSBydW5fZXZpY3Rpb24obHJ1dmVjLCBzZXEsIHNjLCBzd2FwcGluZXNzLCBvcHQpO1xcbjU5MDI6XFx0XFx0XFx0YnJlYWs7XFxuNTkwMzpcXHRcXHR9XFxuNTkwNDpcXHRkb25lOlxcbjU5MDU6XFx0XFx0bWVtX2Nncm91cF9wdXQobWVtY2cpO1xcbjU5MDY6XFx0XFxuNTkwNzpcXHRcXHRyZXR1cm4gZXJyO1xcbjU5MDg6XFx0fVxcbjU5MDk6XFx0XFxuNTkxMDpcXHQvKiBzZWUgRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9tbS9tdWx0aWdlbl9scnUucnN0IGZvciBkZXRhaWxzICovXFxuNTkxMTpcXHRzdGF0aWMgc3NpemVfdCBscnVfZ2VuX3NlcV93cml0ZShzdHJ1Y3QgZmlsZSAqZmlsZSwgY29uc3QgY2hhciBfX3VzZXIgKnNyYyxcXG41OTEyOlxcdFxcdFxcdFxcdFxcdCBzaXplX3QgbGVuLCBsb2ZmX3QgKnBvcylcXG41OTEzOlxcdHtcXG41OTE0OlxcdFxcdHZvaWQgKmJ1ZjtcXG41OTE1OlxcdFxcdGNoYXIgKmN1ciwgKm5leHQ7XFxuNTkxNjpcXHRcXHR1bnNpZ25lZCBpbnQgZmxhZ3M7XFxuNTkxNzpcXHRcXHRzdHJ1Y3QgYmxrX3BsdWcgcGx1ZztcXG41OTE4OlxcdFxcdGludCBlcnIgPSAtRUlOVkFMO1xcbjU5MTk6XFx0XFx0c3RydWN0IHNjYW5fY29udHJvbCBzYyA9IHtcXG41OTIwOlxcdFxcdFxcdC5tYXlfd3JpdGVwYWdlID0gdHJ1ZSxcXG41OTIxOlxcdFxcdFxcdC5tYXlfdW5tYXAgPSB0cnVlLFxcbjU5MjI6XFx0XFx0XFx0Lm1heV9zd2FwID0gdHJ1ZSxcXG41OTIzOlxcdFxcdFxcdC5yZWNsYWltX2lkeCA9IE1BWF9OUl9aT05FUyAtIDEsXFxuNTkyNDpcXHRcXHRcXHQuZ2ZwX21hc2sgPSBHRlBfS0VSTkVMLFxcbjU5MjU6XFx0XFx0XFx0LnByb2FjdGl2ZSA9IHRydWUsXFxuNTkyNjpcXHRcXHR9O1xcbjU5Mjc6XFx0XFxuNTkyODpcXHRcXHRidWYgPSBrdm1hbGxvYyhsZW4gKyAxLCBHRlBfS0VSTkVMKTtcXG41OTI5OlxcdFxcdGlmICghYnVmKVxcbjU5MzA6XFx0XFx0XFx0cmV0dXJuIC1FTk9NRU07XFxuNTkzMTpcXHRcXG41OTMyOlxcdFxcdGlmIChjb3B5X2Zyb21fdXNlcihidWYsIHNyYywgbGVuKSkge1xcbjU5MzM6XFx0XFx0XFx0a3ZmcmVlKGJ1Zik7XFxuNTkzNDpcXHRcXHRcXHRyZXR1cm4gLUVGQVVMVDtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTVUMTM6MDc6MDkuMjA0NjI0NDYzWiIsIlNlcSI6NDcsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjkyNzQ0OTg2NjUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBgcnVuX2FnaW5nYCBQYXRjaCBmb3IgUG90ZW50aWFsIElzc3VlcyoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gSSdtIGxvb2tpbmcgYXQgdGhlIGNoYW5nZSB0byB0aGUgYHJ1bl9hZ2luZ2AgZnVuY3Rpb24uIFRoZSBvcmlnaW5hbCBjb2RlIGluIGBydW5fYWdpbmdgIGhhZCBhIGNoZWNrOiBpZiBgc2VxYCAodGhlIHNlcXVlbmNlIG51bWJlcikgd2FzICpncmVhdGVyKiB0aGFuIGBtYXhfc2VxYCwgaXQgcmV0dXJuZWQgYW4gZXJyb3IuIE90aGVyd2lzZSwgaXQgY2FsbGVkIGB0cnlfdG9faW5jX21heF9zZXEoLi4uKWAuIFRoZSBwYXRjaCBoYXMgZmxpcHBlZCB0aGUgY29uZGl0aW9uLiBOb3csIGlmIGBzZXFgIGlzICpsZXNzIHRoYW4qIGBtYXhfc2VxYCwgaXQgKmltbWVkaWF0ZWx5KiByZXR1cm5zIDAuIFRoZSBpbXBsaWNhdGlvbiBpcyB0aGF0IGlmIHRoZSByZXF1ZXN0ZWQgYWdpbmcgc2VxdWVuY2UgaXMgYWxyZWFkeSBcIm9sZFwiIChsZXNzIHRoYW4gdGhlIGN1cnJlbnQgbWF4KSwgdGhlbiB0aGVyZSdzIG5vIG5lZWQgdG8gZG8gYW55dGhpbmcsIGJlY2F1c2UgYWdpbmcgdG8gdGhhdCBwb2ludCBoYXMgYWxyZWFkeSBvY2N1cnJlZC4gVGhpcyBtYWtlcyBzZW5zZSBmcm9tIGEgcGVyZm9ybWFuY2UgcGVyc3BlY3RpdmUg4oCTIGF2b2lkIHJlZHVuZGFudCB3b3JrLlxuXG5UaGUgcXVlc3Rpb24gbm93IGlzLCBkaWQgdGhpcyBpbnRyb2R1Y2UgYSB2dWxuZXJhYmlsaXR5IG9yIGEgbWVtb3J5IHNhZmV0eSBpc3N1ZT8gU3BlY2lmaWNhbGx5LCBhcmUgd2Ugbm93IGV4cG9zaW5nIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IG9yIGNyZWF0aW5nIGEgc2l0dWF0aW9uIHdoZXJlIHdlJ3JlIHJlYWRpbmcgdW5pbml0aWFsaXplZCB2YWx1ZXM/IExldCdzIGJlIHRob3JvdWdoLlxuXG5GaXJzdCwgSSBuZWVkIHRvIGNoZWNrIGhvdyB0aGUgcmV0dXJuIHZhbHVlIG9mIGBydW5fYWdpbmdgIGlzIHVzZWQuIFdlJ3JlIGNvbmNlcm5lZCBhYm91dCBzaXR1YXRpb25zIHdoZXJlIGtlcm5lbCBzdHJ1Y3R1cmVzIGFyZSBzZW50IHRvIHVzZXJzcGFjZSDigJMgdGhpbmsgYGNvcHlfdG9fdXNlcmAsIGBwdXRfdXNlcmAsIG5ldGxpbmsgU0tCIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycy4gQXJlIHRoZXJlIGFueSB2YWx1ZXMgb3IgbWVtb3J5IHRoYXQgaXMgdW5pbml0aWFsaXplZCBieSB0aGUgc2hvcnQtY2lyY3VpdGluZz9cblxuTG9va2luZyBhdCB0aGUgY29kZSBwYXRoLCBgcnVuX2FnaW5nYCByZXR1cm5zIGFuIGludGVnZXIsIGFuIGVycm9yIGNvZGUsIHRvIGBydW5fY21kYC4gVGhlbiwgYHJ1bl9jbWRgIHBhc3NlcyB0aGUgdmFsdWUgdG8gYGxydV9nZW5fc2VxX3dyaXRlYC4gYGxydV9nZW5fc2VxX3dyaXRlYCBpcyB0aGUgZnVuY3Rpb24gdGhhdCB1bHRpbWF0ZWx5IHJldHVybnMgdG8gdXNlciBzcGFjZS4gSXQgcmV0dXJucyBlaXRoZXIgdGhlIGBsZW5gICh0aGUgbGVuZ3RoIG9mIHRoZSB3cml0ZSksIG9yIHRoZSBlcnJvciBjb2RlIGZyb20gYHJ1bl9jbWRgLiBUaGUgcmV0dXJuIHZhbHVlIGRvZXMgbm90IHJldHVybiBhbnkgc3RydWN0dXJlcy4gXG5cbk9rYXksIHNvIEkgd2lsbCBub3cgY2hlY2sgbGluZXMgNTkzMC01OTcwIG9mIGBtbS92bXNjYW4uY2AgdG8gc2VlIGlmIHRoZXJlIGlzIGFueSBvdGhlciBwb3NzaWJpbGl0eSBvZiBtZW1vcnkgZXhwb3N1cmUgZnJvbSB0aGUgY2hhbmdlLiBJIG5lZWQgdG8gbWFrZSBzdXJlIHRoYXQgdGhlIGNoYW5nZSBpbiBgcnVuX2FnaW5nYCBkb2VzIG5vdCBjaGFuZ2UgYW55IHN0YXRlIHRoYXQgY291bGQgY3JlYXRlIGEgc2VjdXJpdHkgcmlzay5cblxuVGhpcyBzZWVtcyBzYWZlOyBJJ20gcHJldHR5IGNvbWZvcnRhYmxlIHdpdGggdGhpcyBjaGFuZ2UuIEl0J3MgYSBwZXJmb3JtYW5jZSBvcHRpbWl6YXRpb24gdGhhdCBzaG91bGQgYmUgb2suXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQ0OTIsIk91dHB1dFRva2VucyI6MzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozNjIsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xNVQxMzowNzoxOC40NzkxMjcxMzdaIiwiU2VxIjo0OCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDY5NzAwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm1tL3Ztc2Nhbi5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDU5MzAsXG4gIFwiTGluZUNvdW50XCI6IDQwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjU5MzA6XFx0XFx0XFx0cmV0dXJuIC1FTk9NRU07XFxuNTkzMTpcXHRcXG41OTMyOlxcdFxcdGlmIChjb3B5X2Zyb21fdXNlcihidWYsIHNyYywgbGVuKSkge1xcbjU5MzM6XFx0XFx0XFx0a3ZmcmVlKGJ1Zik7XFxuNTkzNDpcXHRcXHRcXHRyZXR1cm4gLUVGQVVMVDtcXG41OTM1OlxcdFxcdH1cXG41OTM2OlxcdFxcbjU5Mzc6XFx0XFx0c2V0X3Rhc2tfcmVjbGFpbV9zdGF0ZShjdXJyZW50LCBcXHUwMDI2c2MucmVjbGFpbV9zdGF0ZSk7XFxuNTkzODpcXHRcXHRmbGFncyA9IG1lbWFsbG9jX25vcmVjbGFpbV9zYXZlKCk7XFxuNTkzOTpcXHRcXHRibGtfc3RhcnRfcGx1ZyhcXHUwMDI2cGx1Zyk7XFxuNTk0MDpcXHRcXHRpZiAoIXNldF9tbV93YWxrKE5VTEwsIHRydWUpKSB7XFxuNTk0MTpcXHRcXHRcXHRlcnIgPSAtRU5PTUVNO1xcbjU5NDI6XFx0XFx0XFx0Z290byBkb25lO1xcbjU5NDM6XFx0XFx0fVxcbjU5NDQ6XFx0XFxuNTk0NTpcXHRcXHRuZXh0ID0gYnVmO1xcbjU5NDY6XFx0XFx0bmV4dFtsZW5dID0gJ1xcXFwwJztcXG41OTQ3OlxcdFxcbjU5NDg6XFx0XFx0d2hpbGUgKChjdXIgPSBzdHJzZXAoXFx1MDAyNm5leHQsIFxcXCIsO1xcXFxuXFxcIikpKSB7XFxuNTk0OTpcXHRcXHRcXHRpbnQgbjtcXG41OTUwOlxcdFxcdFxcdGludCBlbmQ7XFxuNTk1MTpcXHRcXHRcXHRjaGFyIGNtZCwgc3dhcF9zdHJpbmdbNV07XFxuNTk1MjpcXHRcXHRcXHR1NjQgbWVtY2dfaWQ7XFxuNTk1MzpcXHRcXHRcXHR1bnNpZ25lZCBpbnQgbmlkO1xcbjU5NTQ6XFx0XFx0XFx0dW5zaWduZWQgbG9uZyBzZXE7XFxuNTk1NTpcXHRcXHRcXHR1bnNpZ25lZCBpbnQgc3dhcHBpbmVzcztcXG41OTU2OlxcdFxcdFxcdHVuc2lnbmVkIGxvbmcgb3B0ID0gLTE7XFxuNTk1NzpcXHRcXG41OTU4OlxcdFxcdFxcdGN1ciA9IHNraXBfc3BhY2VzKGN1cik7XFxuNTk1OTpcXHRcXHRcXHRpZiAoISpjdXIpXFxuNTk2MDpcXHRcXHRcXHRcXHRjb250aW51ZTtcXG41OTYxOlxcdFxcbjU5NjI6XFx0XFx0XFx0biA9IHNzY2FuZihjdXIsIFxcXCIlYyAlbGx1ICV1ICVsdSAlbiAlNHMgJW4gJWx1ICVuXFxcIiwgXFx1MDAyNmNtZCwgXFx1MDAyNm1lbWNnX2lkLCBcXHUwMDI2bmlkLFxcbjU5NjM6XFx0XFx0XFx0XFx0ICAgXFx1MDAyNnNlcSwgXFx1MDAyNmVuZCwgc3dhcF9zdHJpbmcsIFxcdTAwMjZlbmQsIFxcdTAwMjZvcHQsIFxcdTAwMjZlbmQpO1xcbjU5NjQ6XFx0XFx0XFx0aWYgKG4gXFx1MDAzYyA0IHx8IGN1cltlbmRdKSB7XFxuNTk2NTpcXHRcXHRcXHRcXHRlcnIgPSAtRUlOVkFMO1xcbjU5NjY6XFx0XFx0XFx0XFx0YnJlYWs7XFxuNTk2NzpcXHRcXHRcXHR9XFxuNTk2ODpcXHRcXG41OTY5OlxcdFxcdFxcdGlmIChuID09IDQpIHtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTVUMTM6MDc6MTguNDc5NTk5Mzg3WiIsIlNlcSI6NDksIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjM3MjUwNzU1NjUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0IHRob3VnaHQgcHJvY2VzcywgYXNzdW1pbmcgSSdtIGRlZXBseSBmYW1pbGlhciB3aXRoIGNvZGUgYW5kIGxpa2VseSBkZWJ1Z2dpbmc6XG5cbioqRGl2aW5nIERlZXBlciBpbnRvIGBscnVfZ2VuX3NlcV93cml0ZWAqKlxuXG5BbHJpZ2h0LCB0aGF0J3Mgd2hlcmUgd2UncmUgZ29pbmcgbmV4dC4gTXkgbWVudGFsIGNoZWNrbGlzdCBzYXlzLCBiYXNlZCBvbiB3aGF0IEkndmUgc2VlbiBzbyBmYXIsIHRoZSBuZXh0IGxvZ2ljYWwgc3RlcCB0byB1bmRlcnN0YW5kIHRoZSBiZWhhdmlvciBpcyB0byBkaWcgaW50byB0aGUgYGxydV9nZW5fc2VxX3dyaXRlYCBmdW5jdGlvbi4gVGhpcyBsaWtlbHkgZGVhbHMgd2l0aCB0aGUgTGVhc3QgUmVjZW50bHkgVXNlZCAoTFJVKSBjYWNoZSwgYW5kIHRoZSBcImdlbl9zZXFcIiBhbmQgXCJ3cml0ZVwiIGVsZW1lbnRzIHN1Z2dlc3QgaXQgaGFzIHNvbWV0aGluZyB0byBkbyB3aXRoIHRoZSBnZW5lcmF0aW9uIG9mIGEgc2VxdWVuY2UgbnVtYmVyIGR1cmluZyBhIHdyaXRlIG9wZXJhdGlvbiwgcHJvYmFibHkgaW4gY29uanVuY3Rpb24gd2l0aCB0aGUgTFJVIGV2aWN0aW9uIHBvbGljeS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgZXhhY3RseSBob3cgdGhpcyBmdW5jdGlvbiBpbnRlcmFjdHMgd2l0aCB0aGUgcmVzdCBvZiB0aGUgc3lzdGVtLCBhbmQgaG93IGl0IGhhbmRsZXMgcG90ZW50aWFsIHJhY2UgY29uZGl0aW9ucyBvciBjb25jdXJyZW5jeSBpc3N1ZXMsIG9yIGlmIGl0IGhhcyBhbnl0aGluZyB0byBkbyB3aXRoIGEgcGVyZm9ybWFuY2UgYm90dGxlbmVjay4gTGV0J3Mgc2VlIHdoYXQgd2UgY2FuIGZpbmQgaW4gdGhlcmUuIFRoaXMgaXMgd2hlcmUgdGhlIHJlYWwgd29yayBiZWdpbnMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjU5NTAsIk91dHB1dFRva2VucyI6MzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNiwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE1VDEzOjA3OjIyLjIwNDY3ODU1MloiLCJTZXEiOjUwLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NDg1ODAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibW0vdm1zY2FuLmNcIixcbiAgXCJGaXJzdExpbmVcIjogNTk3MCxcbiAgXCJMaW5lQ291bnRcIjogNDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiNTk3MDpcXHRcXHRcXHRcXHRzd2FwcGluZXNzID0gLTE7XFxuNTk3MTpcXHRcXHRcXHR9IGVsc2UgaWYgKCFzdHJjbXAoXFxcIm1heFxcXCIsIHN3YXBfc3RyaW5nKSkge1xcbjU5NzI6XFx0XFx0XFx0XFx0Lyogc2V0IGJ5IHVzZXJzcGFjZSBmb3IgYW5vbnltb3VzIG1lbW9yeSBvbmx5ICovXFxuNTk3MzpcXHRcXHRcXHRcXHRzd2FwcGluZXNzID0gU1dBUFBJTkVTU19BTk9OX09OTFk7XFxuNTk3NDpcXHRcXHRcXHR9IGVsc2Uge1xcbjU5NzU6XFx0XFx0XFx0XFx0ZXJyID0ga3N0cnRvdWludChzd2FwX3N0cmluZywgMCwgXFx1MDAyNnN3YXBwaW5lc3MpO1xcbjU5NzY6XFx0XFx0XFx0XFx0aWYgKGVycilcXG41OTc3OlxcdFxcdFxcdFxcdFxcdGJyZWFrO1xcbjU5Nzg6XFx0XFx0XFx0fVxcbjU5Nzk6XFx0XFxuNTk4MDpcXHRcXHRcXHRlcnIgPSBydW5fY21kKGNtZCwgbWVtY2dfaWQsIG5pZCwgc2VxLCBcXHUwMDI2c2MsIHN3YXBwaW5lc3MsIG9wdCk7XFxuNTk4MTpcXHRcXHRcXHRpZiAoZXJyKVxcbjU5ODI6XFx0XFx0XFx0XFx0YnJlYWs7XFxuNTk4MzpcXHRcXHR9XFxuNTk4NDpcXHRkb25lOlxcbjU5ODU6XFx0XFx0Y2xlYXJfbW1fd2FsaygpO1xcbjU5ODY6XFx0XFx0YmxrX2ZpbmlzaF9wbHVnKFxcdTAwMjZwbHVnKTtcXG41OTg3OlxcdFxcdG1lbWFsbG9jX25vcmVjbGFpbV9yZXN0b3JlKGZsYWdzKTtcXG41OTg4OlxcdFxcdHNldF90YXNrX3JlY2xhaW1fc3RhdGUoY3VycmVudCwgTlVMTCk7XFxuNTk4OTpcXHRcXG41OTkwOlxcdFxcdGt2ZnJlZShidWYpO1xcbjU5OTE6XFx0XFxuNTk5MjpcXHRcXHRyZXR1cm4gZXJyID8gOiBsZW47XFxuNTk5MzpcXHR9XFxuNTk5NDpcXHRcXG41OTk1OlxcdHN0YXRpYyBpbnQgbHJ1X2dlbl9zZXFfb3BlbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSlcXG41OTk2OlxcdHtcXG41OTk3OlxcdFxcdHJldHVybiBzZXFfb3BlbihmaWxlLCBcXHUwMDI2bHJ1X2dlbl9zZXFfb3BzKTtcXG41OTk4OlxcdH1cXG41OTk5OlxcdFxcbjYwMDA6XFx0c3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgbHJ1X2dlbl9yd19mb3BzID0ge1xcbjYwMDE6XFx0XFx0Lm9wZW4gPSBscnVfZ2VuX3NlcV9vcGVuLFxcbjYwMDI6XFx0XFx0LnJlYWQgPSBzZXFfcmVhZCxcXG42MDAzOlxcdFxcdC53cml0ZSA9IGxydV9nZW5fc2VxX3dyaXRlLFxcbjYwMDQ6XFx0XFx0Lmxsc2VlayA9IHNlcV9sc2VlayxcXG42MDA1OlxcdFxcdC5yZWxlYXNlID0gc2VxX3JlbGVhc2UsXFxuNjAwNjpcXHR9O1xcbjYwMDc6XFx0XFxuNjAwODpcXHRzdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBscnVfZ2VuX3JvX2ZvcHMgPSB7XFxuNjAwOTpcXHRcXHQub3BlbiA9IGxydV9nZW5fc2VxX29wZW4sXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE1VDEzOjA3OjIyLjIwNTEzMzgwMloiLCJTZXEiOjUxLCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjoyMzA0NDc4NDU1NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBbmFseXNpcyBvZiB0aGUgTFJVIEFnaW5nIE9wdGltaXphdGlvbioqXG5cbk9rYXksIHNvIEkndmUgYmVlbiBsb29raW5nIG92ZXIgdGhpcyBwYXRjaC4gSXQncyBhIHByZXR0eSBzdHJhaWdodGZvcndhcmQgb3B0aW1pemF0aW9uIGluIGBydW5fYWdpbmdgIHdpdGhpbiB0aGUgbXVsdGktZ2VuIExSVSBzeXN0ZW0uIEJhc2ljYWxseSwgaXQncyBhZGRpbmcgYSBzaW1wbGUgZWFybHktcmV0dXJuIGNoZWNrOiBgaWYgKHNlcSBcdTAwM2MgbWF4X3NlcSkgcmV0dXJuIDA7YC4gVGhpcyBjaGVjayBwcmV2ZW50cyB1bm5lY2Vzc2FyeSBjYWxscyB0byBgdHJ5X3RvX2luY19tYXhfc2VxYCB3aGVuIHRoZSByZXF1ZXN0ZWQgc2VxdWVuY2UgbnVtYmVyIChgc2VxYCkgaXMgKmFscmVhZHkqIGxlc3MgdGhhbiB0aGUgbWF4aW11bSBhbGxvd2VkIHNlcXVlbmNlIChgbWF4X3NlcWApLiBQcmV2aW91c2x5LCBpdCB3YXMgYXR0ZW1wdGluZyB0aGUgaW5jcmVtZW50IGV2ZW4gd2hlbiBpdCB3YXNuJ3QgbmVlZGVkLCBsZWFkaW5nIHRvIHBvdGVudGlhbCB3YXN0ZWQgY3ljbGVzIG9yIGFuIHVubmVjZXNzYXJ5IGAtRUVYSVNUYCByZXR1cm4uXG5cblRoZSBpbXBvcnRhbnQgdGhpbmcgaXMgdGhhdCBub3RoaW5nIGluIGBscnVfZ2VuX3NlcV93cml0ZWAsIHRoZSBlbnRyeSBwb2ludCBmb3IgdGhpcywgcmV0dXJucyBhbnkgZGF0YSB0byB1c2VyIHNwYWNlLiBJdCBvbmx5IHJldHVybnMgYW4gZXJyb3IgY29kZSBvciB0aGUgbGVuZ3RoIG9mIHRoZSBvcGVyYXRpb24sIG5vdGhpbmcgaXMgYWxsb2NhdGVkIG9yIGxlZnQgdW5pbml0aWFsaXplZCwgbm8gZGF0YSBsZWFrcy5cblxuTXkgaW5pdGlhbCB0aG91Z2h0IHdhcyB3aGV0aGVyIHRoaXMgaGFkIGFueSBpbXBsaWNhdGlvbnMgZm9yIEtNU0FOIChLZXJuZWwgTWVtb3J5IFNhbml0aXplcikgYW5kIHRoZSBkZXRlY3Rpb24gb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMgb3IgaW5mb3JtYXRpb24gbGVha3MuIEkndmUgZG9uZSBhIHZlcnkgdGhvcm91Z2ggcmV2aWV3IG9uIHRoaXMgYXNwZWN0LlxuXG4qICAgVGhlcmUgYXJlIG5vIG1lbW9yeSBhbGxvY2F0aW9ucyBpbnZvbHZlZCwgbm8gbmV3IHN0YWNrIG9yIGhlYXAgdmFyaWFibGVzLCBhbmQgY3JpdGljYWxseSwgbm8gZGF0YSBpcyBiZWluZyBjb3BpZWQgdG8gdXNlciBzcGFjZS4gVGhlIGxvZ2ljIGJvaWxzIGRvd24gdG8gYSBzaW1wbGUgaW50ZWdlciBjb21wYXJpc29uIGJldHdlZW4gYHNlcWAgKGRlcml2ZWQgZnJvbSB1c2VyIGlucHV0KSBhbmQgYG1heF9zZXFgIChkZXJpdmVkIGZyb20gYSBgREVGSU5FX01BWF9TRVEobHJ1dmVjKWAgbWFjcm8sIGZyb20gdGhlIGBscnV2ZWNgIHN0cnVjdHVyZSkuIFRoaXMgaXMgYSBwdXJlbHkgbG9naWNhbCBjaGVjay4gVGhlcmUncyBubyB3YXkgdGhpcyBpbnRyb2R1Y2VzIG9yIGFmZmVjdHMgYW55IEtNU0FOLXNwZWNpZmljIHZ1bG5lcmFiaWxpdGllcy5cblxuKiAgIFRvIHB1dCBpdCBhbm90aGVyIHdheSwgS0FTQU4gKEtlcm5lbCBBZGRyZXNzIFNhbml0aXplcikgaXMgYSB0b29sIHRoYXQgZGV0ZWN0cyBtZW1vcnkgYWNjZXNzIGVycm9ycywgd2hpbGUgS01TQU4gZm9jdXNlcyBvbiB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcyBhbmQgaW5mb3JtYXRpb24gbGVha3MgKnRvIHVzZXIgc3BhY2UqLiBUaGlzIHBhdGNoIGRvZXNuJ3QgaW50cm9kdWNlIGFueSBuZXcgcGF0aHMgdGhhdCBjb3VsZCBsZWFkIHRvIHRob3NlIHNjZW5hcmlvcy5cblxuVGhlcmVmb3JlLCB0aGUgcGF0Y2ggZG9lc24ndCBcIk5lZWRLTVNBTlwiLiBJJ20gcmVhZHkgdG8gbWFyayBpdCBhcyBzdWNoLiBXZSBjYW4gcHJvY2VlZCB3aXRoIHRoZSBzdGFuZGFyZCByZXZpZXcgYW5kIHRlc3RpbmcuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjY3OTIsIk91dHB1dFRva2VucyI6MTU3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTQ5LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTVUMTM6MDc6NDUuMjQ5OTIxNzc2WiIsIlNlcSI6NTIsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTc1MTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRzIGFuIGVhcmx5IHJldHVybiBjaGVjayAoYGlmIChzZXEgXFx1MDAzYyBtYXhfc2VxKSByZXR1cm4gMDtgKSBpbiBgcnVuX2FnaW5nKClgIHdpdGhpbiBgbW0vdm1zY2FuLmNgLiBJdCBvcGVyYXRlcyBleGNsdXNpdmVseSBvbiBzY2FsYXIgaW50ZWdlciB2YWx1ZXMgKGBzZXFgIGFuZCBgbWF4X3NlcWApIGFuZCBhbHRlcnMgY29udHJvbCBmbG93IGluIHRoZSBtdWx0aS1nZW4gTFJVIGFnaW5nIHRyaWdnZXIuIFRoZSBjaGFuZ2UgZG9lcyBub3QgaW50cm9kdWNlIG9yIG1vZGlmeSBhbnkgbWVtb3J5IGFsbG9jYXRpb25zLCBkb2VzIG5vdCB0b3VjaCB1bmluaXRpYWxpemVkIHN0YWNrIG9yIGhlYXAgYnVmZmVycywgYW5kIGRvZXMgbm90IHBhc3MgYW55IGtlcm5lbCBzdHJ1Y3R1cmVzIHRvIHVzZXIgc3BhY2UuIEJlY2F1c2Ugbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgY2FuIGJlIHJlYWQsIGJyYW5jaGVkIHVwb24sIG9yIGxlYWtlZCB0byB1c2Vyc3BhY2UgYXMgYSByZXN1bHQgb2YgdGhpcyBjaGFuZ2UsIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIGlzIG5vdCB3YXJyYW50ZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcyBhbiBlYXJseSByZXR1cm4gY2hlY2sgKGBpZiAoc2VxIFxcdTAwM2MgbWF4X3NlcSkgcmV0dXJuIDA7YCkgaW4gYHJ1bl9hZ2luZygpYCB3aXRoaW4gYG1tL3Ztc2Nhbi5jYC4gSXQgb3BlcmF0ZXMgZXhjbHVzaXZlbHkgb24gc2NhbGFyIGludGVnZXIgdmFsdWVzIChgc2VxYCBhbmQgYG1heF9zZXFgKSBhbmQgYWx0ZXJzIGNvbnRyb2wgZmxvdyBpbiB0aGUgbXVsdGktZ2VuIExSVSBhZ2luZyB0cmlnZ2VyLiBUaGUgY2hhbmdlIGRvZXMgbm90IGludHJvZHVjZSBvciBtb2RpZnkgYW55IG1lbW9yeSBhbGxvY2F0aW9ucywgZG9lcyBub3QgdG91Y2ggdW5pbml0aWFsaXplZCBzdGFjayBvciBoZWFwIGJ1ZmZlcnMsIGFuZCBkb2VzIG5vdCBwYXNzIGFueSBrZXJuZWwgc3RydWN0dXJlcyB0byB1c2VyIHNwYWNlLiBCZWNhdXNlIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGNhbiBiZSByZWFkLCBicmFuY2hlZCB1cG9uLCBvciBsZWFrZWQgdG8gdXNlcnNwYWNlIGFzIGEgcmVzdWx0IG9mIHRoaXMgY2hhbmdlLCBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBpcyBub3Qgd2FycmFudGVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0udG9rZW5zIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnVG9vbER1ciA9IHN0YXRzLnRvb2wuY291bnQgPiAwID8gKHN0YXRzLnRvb2wuZHVyYXRpb24gLyBzdGF0cy50b29sLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCgkJCWNvbnN0IGxsbVN1bWFyeUNlbGxzID0gW3N0YXRzLmxsbS5jb3VudCwgc3RhdHMubGxtLnRva2VucywgYXZnTGxtVG9rZW4sIHN0YXRzLmxsbS5kdXJhdGlvbiwgYXZnTGxtRHVyXTsKCQkJY29uc3QgdG9vbFN1bW1hcnlDZWxscyA9IFtzdGF0cy50b29sLmNvdW50LCBzdGF0cy50b29sLmR1cmF0aW9uLCBhdmdUb29sRHVyXTsKCgkJCWNvbnN0IGxsbVN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xsbV9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJbGxtU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IGxsbVRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJbGxtU3VtYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCWxsbVRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCWxsbVN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKGxsbVRyKTsKCgkJCWNvbnN0IHRvb2xTdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b29sX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQl0b29sU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IHRvb2xUciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCXRvb2xTdW1tYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCXRvb2xUci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQl0b29sU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQodG9vbFRyKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgZmlsdGVyZWRTdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gWyJsbG0iLCAidG9vbCJdLmluY2x1ZGVzKGQuVHlwZSkpOwoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdEdXJhdGlvbicpOwoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOyAKCgkJCWZpbHRlcmVkU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCQoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7CgkJCQlsZXQgdG9vbHRpcCA9IHMuTmFtZTsKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iICYmIHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCQkJCWRhdGEuYWRkUm93KFtgJHtzLlNlcX1gLCBkdXIsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUaW1lIENvbnN1bXB0aW9uIG9mIExMTS9Ub29sIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0vVG9vbCBTdGVwcycsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdTZWNvbmRzJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkdXJhdGlvbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgbGxtU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IGQuVHlwZSA9PT0gImxsbSIpOwoJCQlpZiAobGxtU3RlcHMubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdUb2tlbnMnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAnc3R5bGUnfSk7CQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOwkKCgkJCWNvbnN0IGFnZW50Q29sb3JzID0ge307CgkJCWNvbnN0IHBhbGV0dGUgPSBbJyM0Mjg1RjQnLCAnI0RCNDQzNycsICcjRjRCNDAwJywgJyMwRjlENTgnLCAnI0FCNDdCQycsICcjMDBBQ0MxJ107CgkJCWxldCBjb2xvcklkeCA9IDA7CgkJCWNvbnN0IGFnZW50TExNQ291bnRzID0ge307CgkJCWxsbVN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQlpZiAoIWFnZW50Q29sb3JzW3MuTmFtZV0pIHsKCQkJCQlhZ2VudENvbG9yc1tzLk5hbWVdID0gcGFsZXR0ZVtjb2xvcklkeCAlIHBhbGV0dGUubGVuZ3RoXTsKCQkJCQljb2xvcklkeCsrOwoJCQkJfQoKCQkJCWFnZW50TExNQ291bnRzW3MuTmFtZV0gPSAoYWdlbnRMTE1Db3VudHNbcy5OYW1lXSB8fCAwKSArIDE7CgkJCQljb25zdCBsYWJlbCA9IGAke3MuTmFtZX0tJHthZ2VudExMTUNvdW50c1tzLk5hbWVdfWA7CgkJCQljb25zdCB0b3RhbFRva2VucyA9IHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnM7CgkJCQljb25zdCBzdHlsZSA9IGBjb2xvcjogJHthZ2VudENvbG9yc1tzLk5hbWVdfWA7CgkJCQlsZXQgdG9vbHRpcCA9IGBUb3RhbCBUb2tlbnM6ICR7dG90YWxUb2tlbnN9XG4oSW46ICR7cy5JbnB1dFRva2Vuc30sIE91dDogJHtzLk91dHB1dFRva2Vuc30sIFRob3VnaHRzOiAke3MuT3V0cHV0VGhvdWdodHNUb2tlbnN9KWA7CgkJCQlpZiAocy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoKCQkJCWRhdGEuYWRkUm93KFtsYWJlbCwgdG90YWxUb2tlbnMsIHN0eWxlLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVG9rZW4gQ29uc3VtcHRpb24gYnkgTExNIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0gQ2FsbCBTZXF1ZW5jZScsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdDb25zdW1lZCBUb2tlbnMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rva2VuX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgkJbGV0IGFsbEV4cGFuZGVkID0gZmFsc2U7CgkJZnVuY3Rpb24gdG9nZ2xlQWxsRGV0YWlscygpIHsKCQkJYWxsRXhwYW5kZWQgPSAhYWxsRXhwYW5kZWQ7CgkJCWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2RldGFpbHMnKS5mb3JFYWNoKGQgPT4gewoJCQkJaWYgKGFsbEV4cGFuZGVkKSBkLnNldEF0dHJpYnV0ZSgnb3BlbicsICcnKTsKCQkJCWVsc2UgZC5yZW1vdmVBdHRyaWJ1dGUoJ29wZW4nKTsKCQkJfSk7CgkJfQoJPC9zY3JpcHQ+CgoKPC9ib2R5Pgo8L2h0bWw+Cg==" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflow98hk5[0].run-triage(0) Phase: Succeeded StartedAt: 2026-09-15 12:26:58 +0000 UTC FinishedAt: 2026-09-15 13:07:46 +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": "eece25a11d34ba79b89c88b830e285a616286bce", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "LRU_GEN", "DEBUG_FS" ], "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": "eece25a11d34ba79b89c88b830e285a616286bce", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "LRU_GEN", "DEBUG_FS" ], "series_id": "02e604a7-1f28-4daf-ac41-cc921fdf87bd" }, "track": "KASAN", "fuzz": { "focus": null, "focus_symbols": [ "run_aging", "lru_gen_seq_write", "run_cmd" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db" ], "skip_cover_check": true, "bug_title_re": "", "base_commit": "eece25a11d34ba79b89c88b830e285a616286bce", "base_tree": "mm-new" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE1IDEyOjU5PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+OG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0xSVV9HRU4mIzM0OywKICAgICYjMzQ7REVCVUdfRlMmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtydW5fYWdpbmcmIzM0OywKICAgICYjMzQ7bHJ1X2dlbl9zZXFfd3JpdGUmIzM0OywKICAgICYjMzQ7cnVuX2NtZCYjMzQ7CiAgXSwKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHMgYW4gZWFybHkgcmV0dXJuIGNoZWNrIChgaWYgKHNlcSBcdTAwM2MgbWF4X3NlcSkgcmV0dXJuIDA7YCkgaW4gYHJ1bl9hZ2luZygpYCB3aXRoaW4gYG1tL3Ztc2Nhbi5jYC4gSXQgb3BlcmF0ZXMgZXhjbHVzaXZlbHkgb24gc2NhbGFyIGludGVnZXIgdmFsdWVzIChgc2VxYCBhbmQgYG1heF9zZXFgKSBhbmQgYWx0ZXJzIGNvbnRyb2wgZmxvdyBpbiB0aGUgbXVsdGktZ2VuIExSVSBhZ2luZyB0cmlnZ2VyLiBUaGUgY2hhbmdlIGRvZXMgbm90IGludHJvZHVjZSBvciBtb2RpZnkgYW55IG1lbW9yeSBhbGxvY2F0aW9ucywgZG9lcyBub3QgdG91Y2ggdW5pbml0aWFsaXplZCBzdGFjayBvciBoZWFwIGJ1ZmZlcnMsIGFuZCBkb2VzIG5vdCBwYXNzIGFueSBrZXJuZWwgc3RydWN0dXJlcyB0byB1c2VyIHNwYWNlLiBCZWNhdXNlIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGNhbiBiZSByZWFkLCBicmFuY2hlZCB1cG9uLCBvciBsZWFrZWQgdG8gdXNlcnNwYWNlIGFzIGEgcmVzdWx0IG9mIHRoaXMgY2hhbmdlLCBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBpcyBub3Qgd2FycmFudGVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgYWdpbmcgbG9naWMgaW4gdGhlIE11bHRpLUdlbiBMUlUgKE1HTFJVKSBzdWJzeXN0ZW0gaW4gbW0vdm1zY2FuLmMuIEl0IGFkZHMgYSBjaGVjayBpbiBydW5fYWdpbmcoKSB0byBpbW1lZGlhdGVseSByZXR1cm4gc3VjY2VzcyBpZiB0aGUgcmVxdWVzdGVkIHNlcXVlbmNlIG51bWJlciBpcyBvbGRlciB0aGFuIHRoZSBjdXJyZW50IG1heF9zZXEgaW5zdGVhZCBvZiBhdHRlbXB0aW5nIGFuIGluY3JlbWVudC4gVGhpcyBsb2dpYyBpcyByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2UgYnkgd3JpdGluZyB0byAvc3lzL2tlcm5lbC9kZWJ1Zy9scnVfZ2VuLCBtYWtpbmcgaXQgYW4gZXhlY3V0YWJsZSBhbmQgdGVzdGFibGUgcGF0aCB3aXRoaW4gY29yZSBtZW1vcnkgbWFuYWdlbWVudC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNSAxMjo1OTwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IDU1YjVlZDYxNjhiOGUyOWJhNjc4MDkyODI1ZDY2NjkwZmNhMjA3MmJcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVHVlIFNlcCAxNSAxMjo1OToyNiAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9tbS92bXNjYW4uYyBiL21tL3Ztc2Nhbi5jXG5pbmRleCA1MzU0ZWI4ZDNhMDdiLi4xOGM0ZDM1OTU3NDk3IDEwMDY0NFxuLS0tIGEvbW0vdm1zY2FuLmNcbiYjNDM7JiM0MzsmIzQzOyBiL21tL3Ztc2Nhbi5jXG5AQCAtNTgyNyw2ICYjNDM7NTgyNyw5IEBAIHN0YXRpYyBpbnQgcnVuX2FnaW5nKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgdW5zaWduZWQgbG9uZyBzZXEsXG4ge1xuIFx0REVGSU5FX01BWF9TRVEobHJ1dmVjKTtcbiBcbiYjNDM7XHRpZiAoc2VxIFx1MDAzYyBtYXhfc2VxKVxuJiM0MztcdFx0cmV0dXJuIDA7XG4mIzQzO1xuIFx0aWYgKHNlcSBcdTAwM2UgbWF4X3NlcSlcbiBcdFx0cmV0dXJuIC1FSU5WQUw7XG4gXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTUgMTI6NTk8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+N208L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Y29yZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7TFJVX0dFTiYjMzQ7LAogICAgJiMzNDtERUJVR19GUyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3J1bl9hZ2luZyYjMzQ7LAogICAgJiMzNDtscnVfZ2VuX3NlcV93cml0ZSYjMzQ7LAogICAgJiMzNDtydW5fY21kJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBhZ2luZyBsb2dpYyBpbiB0aGUgTXVsdGktR2VuIExSVSAoTUdMUlUpIHN1YnN5c3RlbSBpbiBtbS92bXNjYW4uYy4gSXQgYWRkcyBhIGNoZWNrIGluIHJ1bl9hZ2luZygpIHRvIGltbWVkaWF0ZWx5IHJldHVybiBzdWNjZXNzIGlmIHRoZSByZXF1ZXN0ZWQgc2VxdWVuY2UgbnVtYmVyIGlzIG9sZGVyIHRoYW4gdGhlIGN1cnJlbnQgbWF4X3NlcSBpbnN0ZWFkIG9mIGF0dGVtcHRpbmcgYW4gaW5jcmVtZW50LiBUaGlzIGxvZ2ljIGlzIHJlYWNoYWJsZSBmcm9tIHVzZXJzcGFjZSBieSB3cml0aW5nIHRvIC9zeXMva2VybmVsL2RlYnVnL2xydV9nZW4sIG1ha2luZyBpdCBhbiBleGVjdXRhYmxlIGFuZCB0ZXN0YWJsZSBwYXRoIHdpdGhpbiBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50LiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lciBhbmQgc2VjdXJpdHkgZW5naW5lZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZXZhbHVhdGUgd2hldGhlciBpdCB3YXJyYW50cyBmdXp6aW5nIHdpdGggc3l6a2FsbGVyLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiBpbnRlcm5hbCBhc3N1bXB0aW9ucy4gWW91IG11c3QgYWN0aXZlbHkgdXNlIHlvdXIgY29kZSBhY2Nlc3MKdG9vbHMgdG8gaW5zcGVjdCB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlLCBjYWxsZXJzLCBhbmQgc3Vycm91bmRpbmcgY29udGV4dC4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjEuIENPUkUgVFJJQUdFIFBISUxPU09QSFkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KVGhlIGdvYWwgb2YgcGF0Y2ggZnV6emluZyBpcyB0byBkaXNjb3ZlciBjcmFzaGVzLCByZWdyZXNzaW9ucywgZXhwb3NlZCBsYXRlbnQgYnVncywKYW5kIG5ld2x5IHRyaWdnZXJlZCBhc3NlcnRpb25zIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIHNlcmllcy4KCi0gUkVBQ0hBQklMSVRZIElTIFRIRSBQUklNQVJZIEdBVEU6CiAgRnV6emluZyBjYW4gb25seSBkaXNjb3ZlciBidWdzIGluIGNvZGUgdGhhdCBjYW4gYWN0dWFsbHkgZXhlY3V0ZSBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZAogIGVudmlyb25tZW50cyAoR0NFIG9yIFFFTVUsIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBkZXZpY2VzIGxpa2UgVVNCIGdhZGdldHMsIG5ldGRldiwgdHVuL3RhcCkuCiAgSWYgdGhlIG1vZGlmaWVkIGNvZGUgaXMgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIChzZWUgU2VjdGlvbiAyKSwgaXQgTVVTVCBOT1QgYmUgZnV6emVkLAogIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciBpdCBhZGRzIGFzc2VydGlvbnMgb3IgY29tcGxleCBsb2dpYy4KCi0gRE8gTk9UIEJMSU5ETFkgVFJVU1QgJiMzNDtOTyBGVU5DVElPTkFMIENIQU5HRSYjMzQ7IChORkNJKSBPUiAmIzM0O1JFRkFDVE9SSU5HJiMzNDsgQ0xBSU1TOgogIFBhdGNoIGF1dGhvcnMgcm91dGluZWx5IGxhYmVsIGNoYW5nZXMgYXMgJiMzNDtjbGVhbnVwcyYjMzQ7LCAmIzM0O3JlZmFjdG9yaW5ncyYjMzQ7LCBvciBzdGF0ZQogICYjMzQ7Tm8gZnVuY3Rpb25hbCBjaGFuZ2UgaW50ZW5kZWQmIzM0Oy4gRG8gTk9UIHRha2UgdGhlc2UgY2xhaW1zIGF0IGZhY2UgdmFsdWUuCiAgQ29kZSByZWZhY3RvcmluZ3MgdGhhdCByZWFycmFuZ2UgbG9naWMsIGludHJvZHVjZSBoZWxwZXIgZnVuY3Rpb25zLCBvciBhbHRlciBzdGF0ZSBtYW5hZ2VtZW50CiAgaW4gY29yZSBzdWJzeXN0ZW1zIGZyZXF1ZW50bHkgaW50cm9kdWNlIHN1YnRsZSBzZW1hbnRpYyBzaGlmdHMgb3IgdW5jb3ZlciBsYXRlbnQga2VybmVsIGJ1Z3MuCiAgSWYgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSBpcyBtb2RpZmllZCBvciByZWZhY3RvcmVkLCBpdCBNVVNUIGJlIGZ1enplZC4KCi0gTkVXIE9SIE1PRElGSUVEIEFTU0VSVElPTlMgSU4gUkVBQ0hBQkxFIENPREUgTVVTVCBCRSBGVVpaRUQ6CiAgV2hlbiBhIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXMgcnVudGltZSBjaGVja3Mgb3IgYXNzZXJ0aW9ucyAoZS5nLiwgV0FSTl9PTiosIFZNX1dBUk5fT04qLAogIEJVR19PTiosIGxvY2tkZXBfYXNzZXJ0KikgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMsIGl0IGVuZm9yY2VzIG5ldyBvciBzdHJpY3RlciBpbnZhcmlhbnRzLgogIEV2ZW4gaWYgdGhlIGF1dGhvciBiZWxpZXZlcyB0aGUgaW52YXJpYW50IGFsd2F5cyBob2xkcywgZnV6emluZyBpcyBlc3NlbnRpYWwgdG8gdmVyaWZ5IHdoZXRoZXIKICBhbiB1bnVzdWFsIHNlcXVlbmNlIG9mIG9wZXJhdGlvbnMgY2FuIHZpb2xhdGUgaXQuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoyLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9ZmFsc2UgKE5FR0FUSVZFIENSSVRFUklBKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIE9OTFkgSUYgYWxsIG1vZGlmaWVkIGNvZGUgZmFsbHMgc3RyaWN0bHkgaW50byBvbmUgb3IgbW9yZSBvZiB0aGVzZSBjYXRlZ29yaWVzOgoKLSBOb24ta2VybmVsIGFuZCBub24tZXhlY3V0YWJsZSBjaGFuZ2VzOgogICogTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgY29tbWVudHMsIG9yIHNwZWxsaW5nIGZpeGVzLgogICogVXNlci1zcGFjZSBkaXJlY3Rvcmllcywgc2VsZi10ZXN0cywgc2FtcGxlcywgb3Igc2NyaXB0cyAoZS5nLiwgdG9vbHMvLCBzYW1wbGVzLywgc2NyaXB0cy8sIHVzci8pCiAgICB0aGF0IGRvIG5vdCBhZmZlY3QgdGhlIGNvbXBpbGVkIGtlcm5lbCBpbWFnZSAodm1saW51eCkgb3Iga2VybmVsIG1vZHVsZXMuCiAgKiBQdXJlbHkgZGVjb3JhdGl2ZSBsb2dnaW5nIChlLmcuLCBtZXNzYWdlIHN0cmluZ3MgaW4gcHJfZXJyLCBwcmludGssIGRldl9pbmZvKSBvciB0cmFjZXBvaW50cwogICAgdGhhdCBkbyBub3QgYWx0ZXIgY29udHJvbCBmbG93IG9yIGRhdGEgc3RydWN0dXJlcy4KICAqIEJ1aWxkIHN5c3RlbSBvciBLY29uZmlnIGNoYW5nZXMgdGhhdCBkbyBub3QgYWx0ZXIgY29tcGlsZWQgQyBsb2dpYy4KLSBTdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgaGFyZHdhcmU6CiAgKiBWZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2hlcywgU21hcnROSUNzLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgICBpb25pYywgYW1kZ3B1KSByZXF1aXJpbmcgcGh5c2ljYWwgQVNJQy9QQ0llIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIFVucmVhY2hhYmxlIGV4ZWN1dGlvbiBwYXRoczoKICAqIERyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKC5yZW1vdmUsIC5zaHV0ZG93biwgcGNpX3VucmVnaXN0ZXJfZHJpdmVyKSBleGVjdXRlZCBvbmx5IGR1cmluZwogICAgcGh5c2ljYWwgUENJIGhvdC11bnBsdWcgb3IgbWFudWFsIHN5c2ZzIGRyaXZlciB1bmJpbmRpbmcuCiAgKiBDb2RlIHBhdGhzIGV4Y2x1c2l2ZSB0byBhcmNoaXRlY3R1cmVzIG90aGVyIHRoYW4gdGhlIHRhcmdldCBhcmNoaXRlY3R1cmUuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQozLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9dHJ1ZSAoUE9TSVRJVkUgQ1JJVEVSSUEpCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZSB3aGVuZXZlciB0aGUgcGF0Y2ggdG91Y2hlcyByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlLCBpbmNsdWRpbmc6Ci0gQ29yZSBTdWJzeXN0ZW1zOgogICogQW55IGxvZ2ljIG1vZGlmaWNhdGlvbnMgaW4gbWVtb3J5IG1hbmFnZW1lbnQgKG1tLyksIHN5bmNocm9uaXphdGlvbi9sb2NraW5nIChrZXJuZWwvbG9ja2luZy8pLAogICAgQlBGLCBzY2hlZHVsZXIsIGNvcmUgbmV0d29ya2luZywgVkZTLCBvciBzeXNjYWxsIGhhbmRsaW5nLgotIFJlZmFjdG9yaW5ncyBhbmQgQ29kZSBDbGVhbnVwczoKICAqIEFueSByZXN0cnVjdHVyaW5nIG9mIHJlYWNoYWJsZSBkYXRhIHN0cnVjdHVyZXMsIGhlbHBlciBhYnN0cmFjdGlvbnMsIG9yIGFsZ29yaXRobSBmbG93cy4KLSBSdW50aW1lIEFzc2VydGlvbnMgYW5kIERlZmVuc2l2ZSBDaGVja3M6CiAgKiBBbnkgaW50cm9kdWN0aW9uIG9yIGFsdGVyYXRpb24gb2YgYXNzZXJ0aW9ucyAoV0FSTl9PTiosIFZNX1dBUk5fT04qLCBCVUdfT04qLCBldGMuKSBpbiByZWFjaGFibGUgcGF0aHMuCi0gUmVhY2hhYmxlIERyaXZlcnMgYW5kIFByb3RvY29sczoKICAqIERyaXZlcnMgYWNjZXNzaWJsZSB2aWEgdmlydHVhbCBidXNlcyAodmlydGlvLCBVU0IgZ2FkZ2V0LCBsb29wYmFjaywgbmV0bGluaywgYmluZGVyLCBzb2NrZXRzLCBldGMuKS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjQuIEVYVFJBQ1RJTkcgRm9jdXNTeW1ib2xzIChQUkVWRU5USU5HIERJTFVUSU9OKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpXaGVuIFdvcnRoRnV6emluZz10cnVlLCB5b3UgbXVzdCBleHRyYWN0IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgaW50byBGb2N1c1N5bWJvbHMgdG8gZ3VpZGUgdGhlIGZ1enplcjoKCi0gQVZPSUQgVUJJUVVJVE9VUyBMSUZFQ1lDTEUgSE9ULVBBVEhTOgogIERvIE5PVCBsaXN0IGdlbmVyaWMsIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhbGxlZCBieSBhbG1vc3QgZXZlcnkgcHJvZ3JhbSBpbiB0aGUgY29ycHVzCiAgKGluY2x1ZGluZywgYnV0IG5vdCBsaW1pdGVkIHRvOiBnZW5lcmFsIG1lbW9yeSBhbGxvY2F0b3JzIGFuZCBkZWFsbG9jYXRvcnMsIHBhZ2UgZmF1bHQKICBhbmQgdHJhcCBoYW5kbGVycywgb3IgY29yZSBzeW5jaHJvbml6YXRpb24gcHJpbWl0aXZlczsgdGhpcyBpcyBub3QgYW4gZXhoYXVzdGl2ZSBsaXN0KS4KICBMaXN0aW5nIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhdXNlcyB0aGUgZnV6emVyIHRvIGNsYXNzaWZ5IHRob3VzYW5kcyBvZiB1bnJlbGF0ZWQgdGVzdHMgYXMgJiMzNDtmb2N1c2VkJiMzNDssCiAgd2hpY2ggc2V2ZXJlbHkgZGlsdXRlcyBmdXp6aW5nIGVmZm9ydCBhd2F5IGZyb20gdGhlIGFjdHVhbCBjaGFuZ2VzLgoKLSBUQVJHRVQgU1BFQ0lGSUMgRkVBVFVSRSBMT0dJQyBBTkQgRU5UUllQT0lOVFM6CiAgTGlzdCBmdW5jdGlvbnMgdGhhdCBzcGVjaWZpY2FsbHkgaW1wbGVtZW50IHRoZSBsb2dpYyBiZWluZyBhZGRlZCBvciBhbHRlcmVkLCBvciBkaXJlY3QgQVBJIGVudHJ5cG9pbnRzCiAgZm9yIHRoZSBzdWJzeXN0ZW0gZmVhdHVyZSB1bmRlciByZXZpZXcuCgotIEhBTkRMSU5HIFNUQVRJQyBJTkxJTkUgRlVOQ1RJT05TIElOIEhFQURFUlMgKC5oKToKICBDb21waWxlci1pbmxpbmVkIHN0YXRpYyBmdW5jdGlvbnMgKHN1Y2ggYXMgc3RhdGljIGlubGluZXMgaW4gbW0vKi5oIG9yIGluY2x1ZGUvbGludXgvKi5oKSBsYWNrCiAgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcyBpbiB2bWxpbnV4IGFuZCBjYW5ub3QgYmUgdGFyZ2V0ZWQgZGlyZWN0bHkgYnkgc3ltYm9sIGNvdmVyYWdlIGZpbHRlcnMuCiAgSWYgdGhlIGNoYW5nZXMgYXJlIHByaW1hcmlseSBpbiBzdGF0aWMgaW5saW5lIGhlbHBlcnMsIGlkZW50aWZ5IG5vbi1zdGF0aWMsIGZlYXR1cmUtc3BlY2lmaWMgY2FsbGVyCiAgZnVuY3Rpb25zIGluIC5jIGZpbGVzIHRoYXQgZXhlcmNpc2UgdGhlbSAoYXZvaWRpbmcgdWJpcXVpdG91cyBsaWZlY3ljbGUgd3JhcHBlcnMpLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KNS4gSURFTlRJRllJTkcgRW5hYmxlQ29uZmlncwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IGNvbXBpbGUgYW5kIHJlYWNoIHRoZSBtb2RpZmllZCBjb2RlOgotIEluc3BlY3QgS2NvbmZpZyBmaWxlcyBhbmQgI2lmZGVmIGd1YXJkczsgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCi0gQ2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzIG5lZWRlZC4KLSBTdHJpcCBhbnkgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+VGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjQKCkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgNTViNWVkNjE2OGI4ZTI5YmE2NzgwOTI4MjVkNjY2OTBmY2EyMDcyYgpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBUdWUgU2VwIDE1IDEyOjU5OjI2IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvbW0vdm1zY2FuLmMgYi9tbS92bXNjYW4uYwppbmRleCA1MzU0ZWI4ZDNhMDdiLi4xOGM0ZDM1OTU3NDk3IDEwMDY0NAotLS0gYS9tbS92bXNjYW4uYwomIzQzOyYjNDM7JiM0MzsgYi9tbS92bXNjYW4uYwpAQCAtNTgyNyw2ICYjNDM7NTgyNyw5IEBAIHN0YXRpYyBpbnQgcnVuX2FnaW5nKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgdW5zaWduZWQgbG9uZyBzZXEsCiB7CiAJREVGSU5FX01BWF9TRVEobHJ1dmVjKTsKIAomIzQzOwlpZiAoc2VxICZsdDsgbWF4X3NlcSkKJiM0MzsJCXJldHVybiAwOwomIzQzOwogCWlmIChzZXEgJmd0OyBtYXhfc2VxKQogCQlyZXR1cm4gLUVJTlZBTDsKIAo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNSAxMjo1OTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+Mm08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyODMzCgkJCQkJCQlvdXRwdXQ6IDM1CgkJCQkJCQl0aG91Z2h0czogODEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSB2bXNjYW4uYyBQYXRjaCoqCgpPa2F5LCBzbyB0aGlzIHBhdGNoIGlzIHRvdWNoaW5nIGBtbS92bXNjYW4uY2AuIEltbWVkaWF0ZWx5LCBteSBleHBlcnQgYnJhaW4gZ29lcyBpbnRvICYjMzQ7aW5zcGVjdGlvbiBtb2RlLiYjMzQ7IExldCYjMzk7cyBzdGFydCB3aXRoIGEgcXVpY2sgb3ZlcnZpZXcgb2YgdGhlIGNoYW5nZS4gSSBuZWVkIHRvIGdldCBhIGZlZWwgZm9yIHdoYXQmIzM5O3MgYmVpbmcgYWx0ZXJlZCBpbiB0aGlzIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgZmlsZS4gSSYjMzk7bSB0aGlua2luZyBzcGVjaWZpY2FsbHkgYXJvdW5kIGxpbmUgNTgyNyDigJMgdGhhdCYjMzk7cyBvZnRlbiBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQgZm9yIHVuZGVyc3RhbmRpbmcgYSB0YXJnZXRlZCBjaGFuZ2UsIGFuZCB1c3VhbGx5IGEgaGVscGZ1bCBsaW5lIG51bWJlciBnaXZlbi4KCkZvcnR1bmF0ZWx5LCBJIGhhdmUgbXkgYXJzZW5hbCBvZiB0b29scyBhdCB0aGUgcmVhZHkuIEkmIzM5O2xsIHJlYWNoIGZvciBgcmVhZC1maWxlYCB0byBncmFiIHRoYXQgc3BlY2lmaWMgc2VjdGlvbiBvZiBgbW0vdm1zY2FuLmNgLiBJdCYjMzk7cyBtdWNoIGZhc3RlciB0aGFuIG1hbnVhbGx5IHNpZnRpbmcgdGhyb3VnaCB0aGUgZmlsZSwgYW5kIGVhc2llciB0byBhYnNvcmIgdGhlIGNvbnRleHQgdGhhdCB3YXkuIEkmIzM5O2xsIGFsc28gd2FudCB0byBzdGFydCB0aGlua2luZyBob3cgYGdyZXBwZXJgIG1pZ2h0IGJlIHVzZWZ1bCBpZiBJIHN0YXJ0IGdldHRpbmcgc3R1Y2suIEkmIzM5O2xsIGtlZXAgdGhhdCBpbiBteSBiYWNrIHBvY2tldC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNSAxMzowMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O21tL3Ztc2Nhbi5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNTgxMCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA1MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDs1ODEwOlx0XG41ODExOlx0XHRcdGlmIChmdWxsKVxuNTgxMjpcdFx0XHRcdGxydV9nZW5fc2VxX3Nob3dfZnVsbChtLCBscnV2ZWMsIG1heF9zZXEsIG1pbl9zZXEsIHNlcSk7XG41ODEzOlx0XHR9XG41ODE0Olx0XG41ODE1Olx0XHRyZXR1cm4gMDtcbjU4MTY6XHR9XG41ODE3Olx0XG41ODE4Olx0c3RhdGljIGNvbnN0IHN0cnVjdCBzZXFfb3BlcmF0aW9ucyBscnVfZ2VuX3NlcV9vcHMgPSB7XG41ODE5Olx0XHQuc3RhcnQgPSBscnVfZ2VuX3NlcV9zdGFydCxcbjU4MjA6XHRcdC5zdG9wID0gbHJ1X2dlbl9zZXFfc3RvcCxcbjU4MjE6XHRcdC5uZXh0ID0gbHJ1X2dlbl9zZXFfbmV4dCxcbjU4MjI6XHRcdC5zaG93ID0gbHJ1X2dlbl9zZXFfc2hvdyxcbjU4MjM6XHR9O1xuNTgyNDpcdFxuNTgyNTpcdHN0YXRpYyBpbnQgcnVuX2FnaW5nKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgdW5zaWduZWQgbG9uZyBzZXEsXG41ODI2Olx0XHRcdCAgICAgaW50IHN3YXBwaW5lc3MsIGJvb2wgZm9yY2Vfc2NhbilcbjU4Mjc6XHR7XG41ODI4Olx0XHRERUZJTkVfTUFYX1NFUShscnV2ZWMpO1xuNTgyOTpcdFxuNTgzMDpcdFx0aWYgKHNlcSBcdTAwM2MgbWF4X3NlcSlcbjU4MzE6XHRcdFx0cmV0dXJuIDA7XG41ODMyOlx0XG41ODMzOlx0XHRpZiAoc2VxIFx1MDAzZSBtYXhfc2VxKVxuNTgzNDpcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbjU4MzU6XHRcbjU4MzY6XHRcdHJldHVybiB0cnlfdG9faW5jX21heF9zZXEobHJ1dmVjLCBtYXhfc2VxLCBzd2FwcGluZXNzLCBmb3JjZV9zY2FuKSA/IDAgOiAtRUVYSVNUO1xuNTgzNzpcdH1cbjU4Mzg6XHRcbjU4Mzk6XHRzdGF0aWMgaW50IHJ1bl9ldmljdGlvbihzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIHVuc2lnbmVkIGxvbmcgc2VxLCBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYyxcbjU4NDA6XHRcdFx0XHRpbnQgc3dhcHBpbmVzcywgdW5zaWduZWQgbG9uZyBucl90b19yZWNsYWltKVxuNTg0MTpcdHtcbjU4NDI6XHRcdGludCBucl9iYXRjaDtcbjU4NDM6XHRcdERFRklORV9NQVhfU0VRKGxydXZlYyk7XG41ODQ0Olx0XG41ODQ1Olx0XHRpZiAoc2VxICYjNDM7IE1JTl9OUl9HRU5TIFx1MDAzZSBtYXhfc2VxKVxuNTg0NjpcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbjU4NDc6XHRcbjU4NDg6XHRcdHNjLVx1MDAzZW5yX3JlY2xhaW1lZCA9IDA7XG41ODQ5Olx0XG41ODUwOlx0XHR3aGlsZSAoIXNpZ25hbF9wZW5kaW5nKGN1cnJlbnQpKSB7XG41ODUxOlx0XHRcdERFRklORV9NSU5fU0VRKGxydXZlYyk7XG41ODUyOlx0XG41ODUzOlx0XHRcdGlmIChzZXEgXHUwMDNjIGV2aWN0YWJsZV9taW5fc2VxKG1pbl9zZXEsIHN3YXBwaW5lc3MpKVxuNTg1NDpcdFx0XHRcdHJldHVybiAwO1xuNTg1NTpcdFxuNTg1NjpcdFx0XHRpZiAoc2MtXHUwMDNlbnJfcmVjbGFpbWVkIFx1MDAzZT0gbnJfdG9fcmVjbGFpbSlcbjU4NTc6XHRcdFx0XHRyZXR1cm4gMDtcbjU4NTg6XHRcbjU4NTk6XHRcdFx0bnJfYmF0Y2ggPSBtaW4obnJfdG9fcmVjbGFpbSAtIHNjLVx1MDAzZW5yX3JlY2xhaW1lZCwgTUFYX0xSVV9CQVRDSCk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTUgMTM6MDE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzg4NwoJCQkJCQkJb3V0cHV0OiAyOQoJCQkJCQkJdGhvdWdodHM6IDM3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkludmVzdGlnYXRpbmcgdGhlIGBydW5fYWdpbmdgIEZ1bmN0aW9uKioKCkFscmlnaHQsIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcyBgcnVuX2FnaW5nYCBmdW5jdGlvbi4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXRzIGNhbGwgc2l0ZXMgYW5kIGludGVybmFsIHdvcmtpbmdzLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gdHJhY2UgaXRzIGV4ZWN1dGlvbiBwYXRoLiBJJiMzOTtsbCBzdGFydCB3aXRoIGEgc3RyYWlnaHRmb3J3YXJkIGFwcHJvYWNoOiBJJiMzOTtsbCB1c2UgYGdyZXBgIHdpdGhpbiB0aGUgYG1tL3Ztc2Nhbi5jYCBmaWxlIHRvIGlkZW50aWZ5IGV2ZXJ5IGluc3RhbmNlIHdoZXJlIGBydW5fYWdpbmdgIGlzIGludm9rZWQuIFRoaXMgd2lsbCBnaXZlIG1lIGEgY2xlYXIgcGljdHVyZSBvZiBob3cgdGhpcyBmdW5jdGlvbiBmaXRzIGludG8gdGhlIG92ZXJhbGwgbWVtb3J5IG1hbmFnZW1lbnQgc2NoZW1lLiBGcm9tIHRoZXJlLCBJIGNhbiBiZWdpbiBhbmFseXppbmcgaXRzIGZ1bmN0aW9uYWxpdHkgaW4gZ3JlYXRlciBkZXRhaWwsIGJhc2VkIG9uIGl0cyBjb250ZXh0IHdpdGhpbiB0aGUgY2FsbGluZyBjb2RlLiBUaGlzIGlzIGEgc3RhbmRhcmQgaW5pdGlhbCBkaWFnbm9zdGljIHN0ZXAgZm9yIGFueSBrZXJuZWwtbGV2ZWwgaW52ZXN0aWdhdGlvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNSAxMzowMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtydW5fYWdpbmcmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS92bXNjYW4uYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS92bXNjYW4uYz01MDE2PXN0YXRpYyBpbnQgZXZpY3RfZm9saW9zKHVuc2lnbmVkIGxvbmcgbnJfdG9fc2Nhbiwgc3RydWN0IGxydXZlYyAqbHJ1dmVjLFxuLS1cbm1tL3Ztc2Nhbi5jLTUxMTEtXG5tbS92bXNjYW4uYzo1MTEyOnN0YXRpYyBib29sIHNob3VsZF9ydW5fYWdpbmcoc3RydWN0IGxydXZlYyAqbHJ1dmVjLCB1bnNpZ25lZCBsb25nIG1heF9zZXEsXG5tbS92bXNjYW4uYy01MTEzLVx0XHRcdCAgICAgc3RydWN0IHNjYW5fY29udHJvbCAqc2MsIGludCBzd2FwcGluZXNzKVxuLS1cbm1tL3Ztc2Nhbi5jPTUxOTU9c3RhdGljIGJvb2wgdHJ5X3RvX3Nocmlua19scnV2ZWMoc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYylcbi0tXG5tbS92bXNjYW4uYy01MjExLVxubW0vdm1zY2FuLmM6NTIxMjpcdFx0aWYgKHNob3VsZF9ydW5fYWdpbmcobHJ1dmVjLCBtYXhfc2VxLCBzYywgc3dhcHBpbmVzcykpIHtcbm1tL3Ztc2Nhbi5jLTUyMTMtXHRcdFx0aWYgKHRyeV90b19pbmNfbWF4X3NlcShscnV2ZWMsIG1heF9zZXEsIHN3YXBwaW5lc3MsIGZhbHNlKSlcbi0tXG5tbS92bXNjYW4uYz01ODE4PXN0YXRpYyBjb25zdCBzdHJ1Y3Qgc2VxX29wZXJhdGlvbnMgbHJ1X2dlbl9zZXFfb3BzID0ge1xuLS1cbm1tL3Ztc2Nhbi5jLTU4MjQtXG5tbS92bXNjYW4uYzo1ODI1OnN0YXRpYyBpbnQgcnVuX2FnaW5nKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgdW5zaWduZWQgbG9uZyBzZXEsXG5tbS92bXNjYW4uYy01ODI2LVx0XHQgICAgIGludCBzd2FwcGluZXNzLCBib29sIGZvcmNlX3NjYW4pXG4tLVxubW0vdm1zY2FuLmM9NTg2OT1zdGF0aWMgaW50IHJ1bl9jbWQoY2hhciBjbWQsIHU2NCBtZW1jZ19pZCwgaW50IG5pZCwgdW5zaWduZWQgbG9uZyBzZXEsXG4tLVxubW0vdm1zY2FuLmMtNTg5Ny1cdGNhc2UgJiMzOTsmIzQzOyYjMzk7OlxubW0vdm1zY2FuLmM6NTg5ODpcdFx0ZXJyID0gcnVuX2FnaW5nKGxydXZlYywgc2VxLCBzd2FwcGluZXNzLCBvcHQpO1xubW0vdm1zY2FuLmMtNTg5OS1cdFx0YnJlYWs7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTUgMTM6MDE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDU2NwoJCQkJCQkJb3V0cHV0OiAzNQoJCQkJCQkJdGhvdWdodHM6IDQxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgcmVxdWVzdCwgZm9ybWF0dGVkIGFzIHJlcXVlc3RlZDoKCioqTmF2aWdhdGluZyB0aGUgQ29kZWJhc2UqKgoKQWxyaWdodCwgbGV0JiMzOTtzIGRpdmUgaW4uIEl0IGxvb2tzIGxpa2Ugd2UgbmVlZCB0byBleGFtaW5lIHRoZSBgcnVuX2NtZGAgZnVuY3Rpb24sIHNwZWNpZmljYWxseSBmb2N1c2luZyBvbiBhIHNlY3Rpb24gb2YgdGhlIGNvZGUgYmV0d2VlbiBsaW5lcyA1ODY5IGFuZCA1OTUwLiBUbyBnZXQgYSBiZXR0ZXIgZ3Jhc3Agb2YgdGhlIGNvbnRleHQsIEkgdGhpbmsgaXQmIzM5O3Mgd2lzZSB0byBleHBhbmQgdGhlIHNjb3BlIGEgYml0LiBJJiMzOTtsbCByZWFkIGZyb20gcm91Z2hseSBsaW5lIDU4NjAgdG8gNTk2MC4gVGhhdCBzaG91bGQgZ2l2ZSB1cyBhIGdvb2QgdmlldyBvZiB0aGUgc3Vycm91bmRpbmcgbG9naWMgYW5kIGhvdyBgcnVuX2NtZGAgaXMgYmVpbmcgdXNlZCBpbiB0aGF0IHNwZWNpZmljIHBhcnQgb2YgdGhlIHByb2dyYW0uIEkmIzM5O20gaG9waW5nIHRvIHVuZGVyc3RhbmQgdGhlIGZsb3csIHRoZSBpbnB1dHMsIGFuZCB0aGUgb3V0cHV0cyBpbiBkZXRhaWwsIHNvIEkgY2FuIGFjY3VyYXRlbHkgYXNzZXNzIHRoZSBmdW5jdGlvbmFsaXR5IGFuZCBhbnkgcG90ZW50aWFsIGlzc3VlcyBvciBpbXByb3ZlbWVudHMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTUgMTM6MDI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDttbS92bXNjYW4uYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDU4NjAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogODAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7NTg2MDpcdFx0XHRpZiAoIWV2aWN0X2ZvbGlvcyhucl9iYXRjaCwgbHJ1dmVjLCBzYywgc3dhcHBpbmVzcykpXG41ODYxOlx0XHRcdFx0cmV0dXJuIDA7XG41ODYyOlx0XG41ODYzOlx0XHRcdGNvbmRfcmVzY2hlZCgpO1xuNTg2NDpcdFx0fVxuNTg2NTpcdFxuNTg2NjpcdFx0cmV0dXJuIC1FSU5UUjtcbjU4Njc6XHR9XG41ODY4Olx0XG41ODY5Olx0c3RhdGljIGludCBydW5fY21kKGNoYXIgY21kLCB1NjQgbWVtY2dfaWQsIGludCBuaWQsIHVuc2lnbmVkIGxvbmcgc2VxLFxuNTg3MDpcdFx0XHQgICBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYywgaW50IHN3YXBwaW5lc3MsIHVuc2lnbmVkIGxvbmcgb3B0KVxuNTg3MTpcdHtcbjU4NzI6XHRcdHN0cnVjdCBscnV2ZWMgKmxydXZlYztcbjU4NzM6XHRcdGludCBlcnIgPSAtRUlOVkFMO1xuNTg3NDpcdFx0c3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnID0gTlVMTDtcbjU4NzU6XHRcbjU4NzY6XHRcdGlmIChuaWQgXHUwMDNjIDAgfHwgbmlkIFx1MDAzZT0gTUFYX05VTU5PREVTIHx8ICFub2RlX3N0YXRlKG5pZCwgTl9NRU1PUlkpKVxuNTg3NzpcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbjU4Nzg6XHRcbjU4Nzk6XHRcdGlmICghbWVtX2Nncm91cF9kaXNhYmxlZCgpKSB7XG41ODgwOlx0XHRcdG1lbWNnID0gbWVtX2Nncm91cF9nZXRfZnJvbV9pZChtZW1jZ19pZCk7XG41ODgxOlx0XHRcdGlmICghbWVtY2cpXG41ODgyOlx0XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG41ODgzOlx0XHR9XG41ODg0Olx0XG41ODg1Olx0XHRpZiAobWVtY2dfaWQgIT0gbWVtX2Nncm91cF9pZChtZW1jZykpXG41ODg2Olx0XHRcdGdvdG8gZG9uZTtcbjU4ODc6XHRcbjU4ODg6XHRcdHNjLVx1MDAzZXRhcmdldF9tZW1fY2dyb3VwID0gbWVtY2c7XG41ODg5Olx0XHRscnV2ZWMgPSBnZXRfbHJ1dmVjKG1lbWNnLCBuaWQpO1xuNTg5MDpcdFxuNTg5MTpcdFx0aWYgKHN3YXBwaW5lc3MgXHUwMDNjIE1JTl9TV0FQUElORVNTKVxuNTg5MjpcdFx0XHRzd2FwcGluZXNzID0gZ2V0X3N3YXBwaW5lc3MobHJ1dmVjLCBzYyk7XG41ODkzOlx0XHRlbHNlIGlmIChzd2FwcGluZXNzIFx1MDAzZSBTV0FQUElORVNTX0FOT05fT05MWSlcbjU4OTQ6XHRcdFx0Z290byBkb25lO1xuNTg5NTpcdFxuNTg5NjpcdFx0c3dpdGNoIChjbWQpIHtcbjU4OTc6XHRcdGNhc2UgJiMzOTsmIzQzOyYjMzk7OlxuNTg5ODpcdFx0XHRlcnIgPSBydW5fYWdpbmcobHJ1dmVjLCBzZXEsIHN3YXBwaW5lc3MsIG9wdCk7XG41ODk5Olx0XHRcdGJyZWFrO1xuNTkwMDpcdFx0Y2FzZSAmIzM5Oy0mIzM5OzpcbjU5MDE6XHRcdFx0ZXJyID0gcnVuX2V2aWN0aW9uKGxydXZlYywgc2VxLCBzYywgc3dhcHBpbmVzcywgb3B0KTtcbjU5MDI6XHRcdFx0YnJlYWs7XG41OTAzOlx0XHR9XG41OTA0Olx0ZG9uZTpcbjU5MDU6XHRcdG1lbV9jZ3JvdXBfcHV0KG1lbWNnKTtcbjU5MDY6XHRcbjU5MDc6XHRcdHJldHVybiBlcnI7XG41OTA4Olx0fVxuNTkwOTpcdFxuNTkxMDpcdC8qIHNlZSBEb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL21tL211bHRpZ2VuX2xydS5yc3QgZm9yIGRldGFpbHMgKi9cbjU5MTE6XHRzdGF0aWMgc3NpemVfdCBscnVfZ2VuX3NlcV93cml0ZShzdHJ1Y3QgZmlsZSAqZmlsZSwgY29uc3QgY2hhciBfX3VzZXIgKnNyYyxcbjU5MTI6XHRcdFx0XHRcdCBzaXplX3QgbGVuLCBsb2ZmX3QgKnBvcylcbjU5MTM6XHR7XG41OTE0Olx0XHR2b2lkICpidWY7XG41OTE1Olx0XHRjaGFyICpjdXIsICpuZXh0O1xuNTkxNjpcdFx0dW5zaWduZWQgaW50IGZsYWdzO1xuNTkxNzpcdFx0c3RydWN0IGJsa19wbHVnIHBsdWc7XG41OTE4Olx0XHRpbnQgZXJyID0gLUVJTlZBTDtcbjU5MTk6XHRcdHN0cnVjdCBzY2FuX2NvbnRyb2wgc2MgPSB7XG41OTIwOlx0XHRcdC5tYXlfd3JpdGVwYWdlID0gdHJ1ZSxcbjU5MjE6XHRcdFx0Lm1heV91bm1hcCA9IHRydWUsXG41OTIyOlx0XHRcdC5tYXlfc3dhcCA9IHRydWUsXG41OTIzOlx0XHRcdC5yZWNsYWltX2lkeCA9IE1BWF9OUl9aT05FUyAtIDEsXG41OTI0Olx0XHRcdC5nZnBfbWFzayA9IEdGUF9LRVJORUwsXG41OTI1Olx0XHRcdC5wcm9hY3RpdmUgPSB0cnVlLFxuNTkyNjpcdFx0fTtcbjU5Mjc6XHRcbjU5Mjg6XHRcdGJ1ZiA9IGt2bWFsbG9jKGxlbiAmIzQzOyAxLCBHRlBfS0VSTkVMKTtcbjU5Mjk6XHRcdGlmICghYnVmKVxuNTkzMDpcdFx0XHRyZXR1cm4gLUVOT01FTTtcbjU5MzE6XHRcbjU5MzI6XHRcdGlmIChjb3B5X2Zyb21fdXNlcihidWYsIHNyYywgbGVuKSkge1xuNTkzMzpcdFx0XHRrdmZyZWUoYnVmKTtcbjU5MzQ6XHRcdFx0cmV0dXJuIC1FRkFVTFQ7XG41OTM1Olx0XHR9XG41OTM2Olx0XG41OTM3Olx0XHRzZXRfdGFza19yZWNsYWltX3N0YXRlKGN1cnJlbnQsIFx1MDAyNnNjLnJlY2xhaW1fc3RhdGUpO1xuNTkzODpcdFx0ZmxhZ3MgPSBtZW1hbGxvY19ub3JlY2xhaW1fc2F2ZSgpO1xuNTkzOTpcdFx0YmxrX3N0YXJ0X3BsdWcoXHUwMDI2cGx1Zyk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTUgMTM6MDI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNTk2NQoJCQkJCQkJb3V0cHV0OiAzNQoJCQkJCQkJdGhvdWdodHM6IDY2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkludmVzdGlnYXRpbmcgdGhlIGBscnVfZ2VuX3NlcV93cml0ZWAgV3JpdGUgSGFuZGxlcioqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgYGxydV9nZW5fc2VxX3dyaXRlYC4gTXkgaW5pdGlhbCBodW5jaCBpcyB0aGF0IGl0JiMzOTtzIGEgd3JpdGUgaGFuZGxlciBhc3NvY2lhdGVkIHdpdGggb25lIG9mIHRoZSBkZWJ1ZywgcHJvYywgb3Igc3lzZnMgZmlsZSBzeXN0ZW1zLiBUaGF0IHNvdW5kcyByaWdodCwgZ2l2ZW4gdGhlIG5hbWluZyBjb252ZW50aW9uLiBOb3csIHRvIGJlIHN1cmUsIGFuZCB0byB1bmRlcnN0YW5kICpob3cqIGl0JiMzOTtzIGJlaW5nIHVzZWQsIEkgbmVlZCB0byBzZWUgd2hlcmUgaXQmIzM5O3MgZGVmaW5lZCBhbmQsIGNyaXRpY2FsbHksIHdoZXJlIGl0JiMzOTtzIHVzZWQuIEkmIzM5O2xsIG5lZWQgdG8gdHJhY2UgaXRzIHJlZmVyZW5jZXMuIEkmIzM5O2xsIHNraXAgdGhlIGRlZmluaXRpb25zLCBJJiMzOTttIGFscmVhZHkgYXdhcmUgb2YgdGhvc2UgZnJvbSBvdGhlciBwYXJ0cyBvZiB0aGUgY29kZWJhc2UsIGFuZCBnbyBzdHJhaWdodCB0byB0aGUgdXNhZ2VzLiBMZXQmIzM5O3Mgc3RhcnQgYnkgbG9va2luZyBhdCBsaW5lcyA1OTQwIHRocm91Z2ggNjAwMC4gVGhhdCBzaG91bGQgZ2l2ZSBtZSB0aGUgY29udGV4dCBJIG5lZWQgdG8gZmlndXJlIG91dCBpdHMgcHVycG9zZSBhbmQgaG93IGl0IGZpdHMgaW50byB0aGUgb3ZlcmFsbCBzY2hlbWUgb2YgdGhpbmdzLiBIb3BlZnVsbHksIHRob3NlIGxpbmVzIHdpbGwgc2hvdyBtZSBleGFjdGx5IHdoYXQmIzM5O3MgYmVpbmcgd3JpdHRlbiB0byB0aGF0IGhhbmRsZXIgYW5kICp3aHkqLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNSAxMzowMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O21tL3Ztc2Nhbi5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNTk0MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA2MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDs1OTQwOlx0XHRpZiAoIXNldF9tbV93YWxrKE5VTEwsIHRydWUpKSB7XG41OTQxOlx0XHRcdGVyciA9IC1FTk9NRU07XG41OTQyOlx0XHRcdGdvdG8gZG9uZTtcbjU5NDM6XHRcdH1cbjU5NDQ6XHRcbjU5NDU6XHRcdG5leHQgPSBidWY7XG41OTQ2Olx0XHRuZXh0W2xlbl0gPSAmIzM5O1xcMCYjMzk7O1xuNTk0NzpcdFxuNTk0ODpcdFx0d2hpbGUgKChjdXIgPSBzdHJzZXAoXHUwMDI2bmV4dCwgXCYjMzQ7LDtcXG5cJiMzNDspKSkge1xuNTk0OTpcdFx0XHRpbnQgbjtcbjU5NTA6XHRcdFx0aW50IGVuZDtcbjU5NTE6XHRcdFx0Y2hhciBjbWQsIHN3YXBfc3RyaW5nWzVdO1xuNTk1MjpcdFx0XHR1NjQgbWVtY2dfaWQ7XG41OTUzOlx0XHRcdHVuc2lnbmVkIGludCBuaWQ7XG41OTU0Olx0XHRcdHVuc2lnbmVkIGxvbmcgc2VxO1xuNTk1NTpcdFx0XHR1bnNpZ25lZCBpbnQgc3dhcHBpbmVzcztcbjU5NTY6XHRcdFx0dW5zaWduZWQgbG9uZyBvcHQgPSAtMTtcbjU5NTc6XHRcbjU5NTg6XHRcdFx0Y3VyID0gc2tpcF9zcGFjZXMoY3VyKTtcbjU5NTk6XHRcdFx0aWYgKCEqY3VyKVxuNTk2MDpcdFx0XHRcdGNvbnRpbnVlO1xuNTk2MTpcdFxuNTk2MjpcdFx0XHRuID0gc3NjYW5mKGN1ciwgXCYjMzQ7JWMgJWxsdSAldSAlbHUgJW4gJTRzICVuICVsdSAlblwmIzM0OywgXHUwMDI2Y21kLCBcdTAwMjZtZW1jZ19pZCwgXHUwMDI2bmlkLFxuNTk2MzpcdFx0XHRcdCAgIFx1MDAyNnNlcSwgXHUwMDI2ZW5kLCBzd2FwX3N0cmluZywgXHUwMDI2ZW5kLCBcdTAwMjZvcHQsIFx1MDAyNmVuZCk7XG41OTY0Olx0XHRcdGlmIChuIFx1MDAzYyA0IHx8IGN1cltlbmRdKSB7XG41OTY1Olx0XHRcdFx0ZXJyID0gLUVJTlZBTDtcbjU5NjY6XHRcdFx0XHRicmVhaztcbjU5Njc6XHRcdFx0fVxuNTk2ODpcdFxuNTk2OTpcdFx0XHRpZiAobiA9PSA0KSB7XG41OTcwOlx0XHRcdFx0c3dhcHBpbmVzcyA9IC0xO1xuNTk3MTpcdFx0XHR9IGVsc2UgaWYgKCFzdHJjbXAoXCYjMzQ7bWF4XCYjMzQ7LCBzd2FwX3N0cmluZykpIHtcbjU5NzI6XHRcdFx0XHQvKiBzZXQgYnkgdXNlcnNwYWNlIGZvciBhbm9ueW1vdXMgbWVtb3J5IG9ubHkgKi9cbjU5NzM6XHRcdFx0XHRzd2FwcGluZXNzID0gU1dBUFBJTkVTU19BTk9OX09OTFk7XG41OTc0Olx0XHRcdH0gZWxzZSB7XG41OTc1Olx0XHRcdFx0ZXJyID0ga3N0cnRvdWludChzd2FwX3N0cmluZywgMCwgXHUwMDI2c3dhcHBpbmVzcyk7XG41OTc2Olx0XHRcdFx0aWYgKGVycilcbjU5Nzc6XHRcdFx0XHRcdGJyZWFrO1xuNTk3ODpcdFx0XHR9XG41OTc5Olx0XG41OTgwOlx0XHRcdGVyciA9IHJ1bl9jbWQoY21kLCBtZW1jZ19pZCwgbmlkLCBzZXEsIFx1MDAyNnNjLCBzd2FwcGluZXNzLCBvcHQpO1xuNTk4MTpcdFx0XHRpZiAoZXJyKVxuNTk4MjpcdFx0XHRcdGJyZWFrO1xuNTk4MzpcdFx0fVxuNTk4NDpcdGRvbmU6XG41OTg1Olx0XHRjbGVhcl9tbV93YWxrKCk7XG41OTg2Olx0XHRibGtfZmluaXNoX3BsdWcoXHUwMDI2cGx1Zyk7XG41OTg3Olx0XHRtZW1hbGxvY19ub3JlY2xhaW1fcmVzdG9yZShmbGFncyk7XG41OTg4Olx0XHRzZXRfdGFza19yZWNsYWltX3N0YXRlKGN1cnJlbnQsIE5VTEwpO1xuNTk4OTpcdFxuNTk5MDpcdFx0a3ZmcmVlKGJ1Zik7XG41OTkxOlx0XG41OTkyOlx0XHRyZXR1cm4gZXJyID8gOiBsZW47XG41OTkzOlx0fVxuNTk5NDpcdFxuNTk5NTpcdHN0YXRpYyBpbnQgbHJ1X2dlbl9zZXFfb3BlbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSlcbjU5OTY6XHR7XG41OTk3Olx0XHRyZXR1cm4gc2VxX29wZW4oZmlsZSwgXHUwMDI2bHJ1X2dlbl9zZXFfb3BzKTtcbjU5OTg6XHR9XG41OTk5Olx0XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE1IDEzOjAyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDcxMDMKCQkJCQkJCW91dHB1dDogMzUKCQkJCQkJCXRob3VnaHRzOiA0NgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBzdW1tYXJ5LCBhcyBpZiBJIHdlcmUgdGhpbmtpbmcgdGhlc2UgdGhvdWdodHM6CgoqKkFuYWx5emluZyBgbHJ1X2dlbl9zZXFfb3BlbmAgYW5kIGBscnVfZ2VuX3NlcV93cml0ZWAgUmVnaXN0cmF0aW9ucyoqCgpPa2F5LCB0aW1lIHRvIGRpZyBpbi4gTXkgb2JqZWN0aXZlIGlzIHRvIHVuZGVyc3RhbmQgaG93IHRoZSBgbHJ1X2dlbl9zZXFfb3BlbmAgYW5kIGBscnVfZ2VuX3NlcV93cml0ZWAgZnVuY3Rpb25zIGFyZSBpbnRlZ3JhdGVkIGludG8gdGhlIHN5c3RlbS4gTGV0JiMzOTtzIHN0YXJ0IGJ5IGZpZ3VyaW5nIG91dCAqd2hlcmUqIHRoZXkmIzM5O3JlIGFjdHVhbGx5IHJlZ2lzdGVyZWQuIEkgbmVlZCB0byB0cmFjZSBiYWNrIHRoZWlyIHVzYWdlLiBJJiMzOTtsbCBuZWVkIHRvIGxvY2F0ZSB3aGVyZSB0aGVzZSBmdW5jdGlvbiBwb2ludGVycyBhcmUgYXNzaWduZWQgb3IgcmVmZXJlbmNlZC4gSSYjMzk7bSBnb2luZyB0byBzY2FuIHRoZSBzb3VyY2UgY29kZSBhcm91bmQgbGluZSBudW1iZXJzIDYwMDAgdG8gNjA1MC4gVGhpcyBpcyBwcm9iYWJseSBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQsIGdpdmVuIHRoZSBjb250ZXh0LiBUaGF0IHJhbmdlIHNob3VsZCBnaXZlIG1lIGEgZ29vZCBpbml0aWFsIGxvb2sgYXQgdGhlIHN1cnJvdW5kaW5nIGNvZGUgYW5kIG1heWJlIHNvbWUgY2x1ZXMgYWJvdXQgdGhlIHJlZ2lzdHJhdGlvbiBwcm9jZXNzLiBIb3BlZnVsbHksIHRoaXMgc2VjdGlvbiB3aWxsIGNvbnRhaW4gdGhlIGZ1bmN0aW9uIGNhbGxzIHdoZXJlIHRoZXNlIGhvb2tzIGFyZSBzZXQuIExldCYjMzk7cyBnZXQgdG8gd29yayEKCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTUgMTM6MDI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDttbS92bXNjYW4uYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDYwMDAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNTAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7NjAwMDpcdHN0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGxydV9nZW5fcndfZm9wcyA9IHtcbjYwMDE6XHRcdC5vcGVuID0gbHJ1X2dlbl9zZXFfb3BlbixcbjYwMDI6XHRcdC5yZWFkID0gc2VxX3JlYWQsXG42MDAzOlx0XHQud3JpdGUgPSBscnVfZ2VuX3NlcV93cml0ZSxcbjYwMDQ6XHRcdC5sbHNlZWsgPSBzZXFfbHNlZWssXG42MDA1Olx0XHQucmVsZWFzZSA9IHNlcV9yZWxlYXNlLFxuNjAwNjpcdH07XG42MDA3Olx0XG42MDA4Olx0c3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgbHJ1X2dlbl9yb19mb3BzID0ge1xuNjAwOTpcdFx0Lm9wZW4gPSBscnVfZ2VuX3NlcV9vcGVuLFxuNjAxMDpcdFx0LnJlYWQgPSBzZXFfcmVhZCxcbjYwMTE6XHRcdC5sbHNlZWsgPSBzZXFfbHNlZWssXG42MDEyOlx0XHQucmVsZWFzZSA9IHNlcV9yZWxlYXNlLFxuNjAxMzpcdH07XG42MDE0Olx0XG42MDE1Olx0LyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxuNjAxNjpcdCAqICAgICAgICAgICAgICAgICAgICAgICAgICBpbml0aWFsaXphdGlvblxuNjAxNzpcdCAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXG42MDE4Olx0XG42MDE5Olx0dm9pZCBscnVfZ2VuX2luaXRfcGdkYXQoc3RydWN0IHBnbGlzdF9kYXRhICpwZ2RhdClcbjYwMjA6XHR7XG42MDIxOlx0XHRpbnQgaSwgajtcbjYwMjI6XHRcbjYwMjM6XHRcdHNwaW5fbG9ja19pbml0KFx1MDAyNnBnZGF0LVx1MDAzZW1lbWNnX2xydS5sb2NrKTtcbjYwMjQ6XHRcbjYwMjU6XHRcdGZvciAoaSA9IDA7IGkgXHUwMDNjIE1FTUNHX05SX0dFTlM7IGkmIzQzOyYjNDM7KSB7XG42MDI2Olx0XHRcdGZvciAoaiA9IDA7IGogXHUwMDNjIE1FTUNHX05SX0JJTlM7IGomIzQzOyYjNDM7KVxuNjAyNzpcdFx0XHRcdElOSVRfSExJU1RfTlVMTFNfSEVBRChcdTAwMjZwZ2RhdC1cdTAwM2VtZW1jZ19scnUuZmlmb1tpXVtqXSwgaSk7XG42MDI4Olx0XHR9XG42MDI5Olx0fVxuNjAzMDpcdFxuNjAzMTpcdHZvaWQgbHJ1X2dlbl9pbml0X2xydXZlYyhzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMpXG42MDMyOlx0e1xuNjAzMzpcdFx0aW50IGk7XG42MDM0Olx0XHRpbnQgZ2VuLCB0eXBlLCB6b25lO1xuNjAzNTpcdFx0c3RydWN0IGxydV9nZW5fZm9saW8gKmxydWdlbiA9IFx1MDAyNmxydXZlYy1cdTAwM2VscnVnZW47XG42MDM2Olx0XHRzdHJ1Y3QgbHJ1X2dlbl9tbV9zdGF0ZSAqbW1fc3RhdGUgPSBnZXRfbW1fc3RhdGUobHJ1dmVjKTtcbjYwMzc6XHRcbjYwMzg6XHRcdGxydWdlbi1cdTAwM2VtYXhfc2VxID0gTUlOX05SX0dFTlMgJiM0MzsgMTtcbjYwMzk6XHRcdGxydWdlbi1cdTAwM2VlbmFibGVkID0gbHJ1X2dlbl9lbmFibGVkKCk7XG42MDQwOlx0XG42MDQxOlx0XHRmb3IgKGkgPSAwOyBpIFx1MDAzYz0gTUlOX05SX0dFTlMgJiM0MzsgMTsgaSYjNDM7JiM0MzspXG42MDQyOlx0XHRcdGxydWdlbi1cdTAwM2V0aW1lc3RhbXBzW2ldID0gamlmZmllcztcbjYwNDM6XHRcbjYwNDQ6XHRcdGZvcl9lYWNoX2dlbl90eXBlX3pvbmUoZ2VuLCB0eXBlLCB6b25lKVxuNjA0NTpcdFx0XHRJTklUX0xJU1RfSEVBRChcdTAwMjZscnVnZW4tXHUwMDNlZm9saW9zW2dlbl1bdHlwZV1bem9uZV0pO1xuNjA0NjpcdFxuNjA0NzpcdFx0aWYgKG1tX3N0YXRlKVxuNjA0ODpcdFx0XHRtbV9zdGF0ZS1cdTAwM2VzZXEgPSBNSU5fTlJfR0VOUztcbjYwNDk6XHR9XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE1IDEzOjAyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDgxOTIKCQkJCQkJCW91dHB1dDogMzEKCQkJCQkJCXRob3VnaHRzOiAyMAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIEkgd2VyZSBjb25zaWRlcmluZyB0aGlzIHF1ZXN0aW9uOgoKKipGaW5kaW5nIHRoZSBVc2FnZSBvZiBgbHJ1X2dlbl9yd19mb3BzYCoqCgpPa2F5LCBzbyBJIG5lZWQgdG8gdHJhY2sgZG93biB3aGVyZSB0aGUgYGxydV9nZW5fcndfZm9wc2AgdmFyaWFibGUsIG9yIHN0cnVjdHVyZSwgaXMgYWN0dWFsbHkgYmVpbmcgKnVzZWQqIGluIHRoZSBjb2RlLiBNeSBpbml0aWFsIHRob3VnaHQgaXMsIGxldCYjMzk7cyBqdXN0IGdvIGFoZWFkIGFuZCBkbyBpdCwgSSYjMzk7bGwgbmVlZCB0byBkbyBzb21lIGNvZGUgYXJjaGFlb2xvZ3kuIFRoaXMgbWVhbnMgdXNpbmcgYSB0b29sIHRvIHNlYXJjaCBmb3IgYWxsIGluc3RhbmNlcyB3aGVyZSB0aGlzIHNwZWNpZmljIGlkZW50aWZpZXIgYXBwZWFycy4gSSYjMzk7bGwgbmVlZCB0byBiZSBwcmVjaXNlIGFib3V0IGhvdyBJIHBocmFzZSB0aGUgc2VhcmNoIHRvIGF2b2lkIGZhbHNlIHBvc2l0aXZlcy4gVGhlbiwgb25jZSBJIGhhdmUgbXkgbGlzdCBvZiBpbnN0YW5jZXMgSSYjMzk7bGwga25vdyB3aGVyZSB0byBzdGFydCBteSBpbnNwZWN0aW9uLiBGcm9tIHRoZXJlLCBpdCYjMzk7bGwgYmUgYSBtYXR0ZXIgb2YgdW5kZXJzdGFuZGluZyB0aGUgY29udGV4dCBhbmQgcHVycG9zZSBvZiBpdHMgdXNhZ2UgdG8gaWRlbnRpZnkgdGhlIGFyZWFzIG9mIGNvZGUgdGhhdCByZWx5IG9uIGl0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNSAxMzowMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtscnVfZ2VuX3J3X2ZvcHMmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vdm1zY2FuLmM9NTk5NT1zdGF0aWMgaW50IGxydV9nZW5fc2VxX29wZW4oc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpXG4tLVxubW0vdm1zY2FuLmMtNTk5OS1cbm1tL3Ztc2Nhbi5jOjYwMDA6c3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgbHJ1X2dlbl9yd19mb3BzID0ge1xubW0vdm1zY2FuLmMtNjAwMS1cdC5vcGVuID0gbHJ1X2dlbl9zZXFfb3Blbixcbi0tXG5tbS92bXNjYW4uYz02MDkzPXN0YXRpYyBpbnQgX19pbml0IGluaXRfbHJ1X2dlbih2b2lkKVxuLS1cbm1tL3Ztc2Nhbi5jLTYxMDEtXHRkZWJ1Z2ZzX2NyZWF0ZV9maWxlX2F1eF9udW0oXCYjMzQ7bHJ1X2dlblwmIzM0OywgMDY0NCwgTlVMTCwgTlVMTCwgZmFsc2UsXG5tbS92bXNjYW4uYzo2MTAyOlx0XHRcdFx0ICAgIFx1MDAyNmxydV9nZW5fcndfZm9wcyk7XG5tbS92bXNjYW4uYy02MTAzLVx0ZGVidWdmc19jcmVhdGVfZmlsZV9hdXhfbnVtKFwmIzM0O2xydV9nZW5fZnVsbFwmIzM0OywgMDQ0NCwgTlVMTCwgTlVMTCwgdHJ1ZSxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTUgMTM6MDI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogODY4MAoJCQkJCQkJb3V0cHV0OiAzNQoJCQkJCQkJdGhvdWdodHM6IDEzNwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBJbml0aWFsIFRob3VnaHRzIG9uIHRoaXMgRGVidWdmcyBDcmVhdGlvbioqCgpPa2F5LCBzbyBJIHNlZSBgZGVidWdmc19jcmVhdGVfZmlsZV9hdXhfbnVtYCBiZWluZyB1c2VkIHRvIGNyZWF0ZSBzb21ldGhpbmcgY2FsbGVkICYjMzQ7bHJ1X2dlbiYjMzQ7LiBNeSBmaXJzdCB0aG91Z2h0IGlzOiBkZWJ1Z2ZzISBJIG5lZWQgdG8gcXVpY2tseSBhc3Nlc3MgaWYgdGhpcyBpcyBzb21ldGhpbmcgdGhhdCYjMzk7cyByZWFjaGFibGUgb3IgZXZlbiB3b3JzZSwgZnV6emVkIGJ5IHN5emthbGxlci4gVGhhdCB3b3VsZCBiZSBhbiBpbW1lZGlhdGUgcmVkIGZsYWcuIEkgbmVlZCB0byBmaWd1cmUgb3V0IHdoZXJlIHRoaXMgdGhpbmcgbGl2ZXMsIHRoZSBkZWJ1Z2ZzIHBhdGguIEFoLCBpdCBhcHBlYXJzIHRvIGJlIHVuZGVyIHRoZSBkZWJ1Z2ZzIHJvb3QsIHNwZWNpZmljYWxseSBgL3N5cy9rZXJuZWwvZGVidWcvbHJ1X2dlbmAuCgpOb3csIGxldCYjMzk7cyB0YWtlIGEgc3RlcCBiYWNrIGFuZCB1bmRlcnN0YW5kIHRoZSBjb250ZXh0LiBTaW5jZSB0aGlzIGNvbmNlcm5zIExSVSwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCYjMzk7cyB0cmlnZ2VyaW5nIHRoaXMgZGVidWdmcyBub2RlLiBJIHNob3VsZCBwcm9iYWJseSBjaGVjayB0aGUgS2NvbmZpZyBvcHRpb25zIHRoYXQgZW5hYmxlIE11bHRpLUdlbiBMUlUgKE1HTFJVKS4gTGV0IG1lIGRpZyBpbnRvIHRob3NlIG9wdGlvbnMgYW5kIHNlZSB3aGF0JiMzOTtzIGdvaW5nIG9uLiBUaGVuLCBJIG5lZWQgdG8gY2hlY2sgaG93IGBpbml0X2xydV9nZW5gIGlzIGJlaW5nIGNhbGxlZCBhbmQgaXRzIHN1cnJvdW5kaW5ncywgc3BlY2lmaWNhbGx5IGNoZWNraW5nIHRoZSBgI2lmZGVmYCBkaXJlY3RpdmVzIGluIGBtbS92bXNjYW4uY2AuIFRoYXQgd2lsbCBoZWxwIGRldGVybWluZSB0aGUgY29tcGlsYXRpb24gcGF0aCBhbmQgd2hlcmUgdGhpcyBkZWJ1Z2ZzIG5vZGUgY29tZXMgZnJvbS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTUgMTM6MDI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDttbS92bXNjYW4uYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDYwOTAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7NjA5MDpcdFxuNjA5MTpcdCNlbmRpZiAvKiBDT05GSUdfTUVNQ0cgKi9cbjYwOTI6XHRcbjYwOTM6XHRzdGF0aWMgaW50IF9faW5pdCBpbml0X2xydV9nZW4odm9pZClcbjYwOTQ6XHR7XG42MDk1Olx0XHRCVUlMRF9CVUdfT04oTUlOX05SX0dFTlMgJiM0MzsgMSBcdTAwM2U9IE1BWF9OUl9HRU5TKTtcbjYwOTY6XHRcdEJVSUxEX0JVR19PTihCSVQoTFJVX0dFTl9XSURUSCkgXHUwMDNjPSBNQVhfTlJfR0VOUyk7XG42MDk3Olx0XG42MDk4Olx0XHRpZiAoc3lzZnNfY3JlYXRlX2dyb3VwKG1tX2tvYmosIFx1MDAyNmxydV9nZW5fYXR0cl9ncm91cCkpXG42MDk5Olx0XHRcdHByX2VycihcJiMzNDtscnVfZ2VuOiBmYWlsZWQgdG8gY3JlYXRlIHN5c2ZzIGdyb3VwXFxuXCYjMzQ7KTtcbjYxMDA6XHRcbjYxMDE6XHRcdGRlYnVnZnNfY3JlYXRlX2ZpbGVfYXV4X251bShcJiMzNDtscnVfZ2VuXCYjMzQ7LCAwNjQ0LCBOVUxMLCBOVUxMLCBmYWxzZSxcbjYxMDI6XHRcdFx0XHRcdCAgICBcdTAwMjZscnVfZ2VuX3J3X2ZvcHMpO1xuNjEwMzpcdFx0ZGVidWdmc19jcmVhdGVfZmlsZV9hdXhfbnVtKFwmIzM0O2xydV9nZW5fZnVsbFwmIzM0OywgMDQ0NCwgTlVMTCwgTlVMTCwgdHJ1ZSxcbjYxMDQ6XHRcdFx0XHRcdCAgICBcdTAwMjZscnVfZ2VuX3JvX2ZvcHMpO1xuNjEwNTpcdFxuNjEwNjpcdFx0cmV0dXJuIDA7XG42MTA3Olx0fTtcbjYxMDg6XHRsYXRlX2luaXRjYWxsKGluaXRfbHJ1X2dlbik7XG42MTA5Olx0XG42MTEwOlx0I2Vsc2UgLyogIUNPTkZJR19MUlVfR0VOICovXG42MTExOlx0XG42MTEyOlx0c3RhdGljIHZvaWQgbHJ1X2dlbl9hZ2Vfbm9kZShzdHJ1Y3QgcGdsaXN0X2RhdGEgKnBnZGF0LCBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYylcbjYxMTM6XHR7XG42MTE0Olx0XHRCVUlMRF9CVUcoKTtcbjYxMTU6XHR9XG42MTE2Olx0XG42MTE3Olx0c3RhdGljIHZvaWQgbHJ1X2dlbl9zaHJpbmtfbHJ1dmVjKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgc3RydWN0IHNjYW5fY29udHJvbCAqc2MpXG42MTE4Olx0e1xuNjExOTpcdFx0QlVJTERfQlVHKCk7XG42MTIwOlx0fVxuNjEyMTpcdFxuNjEyMjpcdHN0YXRpYyB2b2lkIGxydV9nZW5fc2hyaW5rX25vZGUoc3RydWN0IHBnbGlzdF9kYXRhICpwZ2RhdCwgc3RydWN0IHNjYW5fY29udHJvbCAqc2MpXG42MTIzOlx0e1xuNjEyNDpcdFx0QlVJTERfQlVHKCk7XG42MTI1Olx0fVxuNjEyNjpcdFxuNjEyNzpcdCNlbmRpZiAvKiBDT05GSUdfTFJVX0dFTiAqL1xuNjEyODpcdFxuNjEyOTpcdHN0YXRpYyB2b2lkIHNocmlua19scnV2ZWMoc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYylcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTUgMTM6MDI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjFtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogOTc0NAoJCQkJCQkJb3V0cHV0OiAyOQoJCQkJCQkJdGhvdWdodHM6IDcxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgTFJVIEdlbmVyYXRpb24gQ29uZmlndXJhdGlvbioqCgpPa2F5LCBmaXJzdCB0aGluZyYjMzk7cyBmaXJzdDogaXQgbG9va3MgbGlrZSBgQ09ORklHX0xSVV9HRU5gIGlzIHRoZSBrZXkgY29uZmlnIG9wdGlvbiBoZXJlLCB0aGUgZ2F0ZWtlZXBlciBmb3IgdGhpcyBlbnRpcmUgc2VjdGlvbiBvZiBjb2RlLiBCZWZvcmUgSSBkaWcgYW55IGRlZXBlciwgSSBzaG91bGQgdmVyaWZ5IHdoYXQgb3RoZXIgY29uZmlndXJhdGlvbnMgbWlnaHQgYmUgaW52b2x2ZWQuIExldCYjMzk7cyBzZWUgaWYgZWl0aGVyIGBDT05GSUdfTFJVX0dFTl9FTkFCTEVEYCBvciwgcmVhbGx5LCBqdXN0IGBDT05GSUdfTFJVX0dFTmAgcmVxdWlyZXMgb3RoZXIgY29uZmlnIG9wdGlvbnMsIG90aGVyIGRlcGVuZGVuY2llcywgb3IgaGFzIGFueSBpbXBsaWNhdGlvbnMgb2Ygd2hpY2ggSSBtdXN0IGJlIG1pbmRmdWwuCgpSaWdodCwgc28gdG8gbWFrZSBzdXJlIEkgZ2V0IGEgZ29vZCwgaG9saXN0aWMgdW5kZXJzdGFuZGluZywgSSBuZWVkIHRvIGRvIGEgcXVpY2sgc2VhcmNoLiBMZXQmIzM5O3MgZmlyZSB1cCBhIHNlYXJjaCBmb3IgYGNvbmZpZyBMUlVfR0VOYCBkaXJlY3RseSBpbiB0aGUgYG1tL0tjb25maWdgIGZpbGUuIFRoYXQgc2hvdWxkIGdpdmUgbWUgdGhlIGF1dGhvcml0YXRpdmUgZGVmaW5pdGlvbiBhbmQgYW55IHJlbGF0ZWQgZGVwZW5kZW5jaWVzLiBUaGlzIHNob3VsZCBnZXQgbWUgc3RhcnRlZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTUgMTM6MDQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIExSVV9HRU4mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL0tjb25maWc9MTM4OD1jb25maWcgUFRFX01BUktFUl9VRkZEX1dQXG4tLVxubW0vS2NvbmZpZy0xMzk4LSMgbXVsdGktZ2VuIExSVSB7XG5tbS9LY29uZmlnOjEzOTk6Y29uZmlnIExSVV9HRU5cbm1tL0tjb25maWctMTQwMC1cdGJvb2wgXCYjMzQ7TXVsdGktR2VuIExSVVwmIzM0O1xuLS1cbm1tL0tjb25maWctMTQwNy1cbm1tL0tjb25maWc6MTQwODpjb25maWcgTFJVX0dFTl9FTkFCTEVEXG5tbS9LY29uZmlnLTE0MDktXHRib29sIFwmIzM0O0VuYWJsZSBieSBkZWZhdWx0XCYjMzQ7XG4tLVxubW0vS2NvbmZpZy0xNDEzLVxubW0vS2NvbmZpZzoxNDE0OmNvbmZpZyBMUlVfR0VOX1NUQVRTXG5tbS9LY29uZmlnLTE0MTUtXHRib29sIFwmIzM0O0Z1bGwgc3RhdHMgZm9yIGRlYnVnZ2luZ1wmIzM0O1xuLS1cbm1tL0tjb25maWctMTQyMi1cbm1tL0tjb25maWc6MTQyMzpjb25maWcgTFJVX0dFTl9XQUxLU19NTVVcbm1tL0tjb25maWctMTQyNC1cdGRlZl9ib29sIHlcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTUgMTM6MDQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTAyNTkKCQkJCQkJCW91dHB1dDogMzMKCQkJCQkJCXRob3VnaHRzOiAyNwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRoZSB0aG91Z2h0IHByb2Nlc3M6CgoqKkRpdmluZyBpbnRvIHRoZSBLZXJuZWwgQ29uZmlndXJhdGlvbiBMYW5kc2NhcGUqKgoKT2theSwgc28gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGRlcGVuZGVuY2llcyBvZiBgTFJVX0dFTmAuIEtub3dpbmcga2VybmVsIGNvbmZpZ3VyYXRpb24sIHRoZSBsb2dpY2FsIHBsYWNlIHRvIHN0YXJ0IGlzIHRoZSBgS2NvbmZpZ2AgZmlsZS4gSSYjMzk7bGwgbmVlZCB0byBnbyB0byBgbW0vS2NvbmZpZ2AsIEkmIzM5O20gZ3Vlc3NpbmcgYXJvdW5kIGxpbmUgMTM5OCwgZ2l2ZSBvciB0YWtlLCBzaG91bGQgYmUgaW4gdGhlIGJhbGxwYXJrLiBMZXQmIzM5O3Mgc2VlIHdoYXQmIzM5O3MgZGVmaW5lZCB0aGVyZSBhbmQgd2hhdCBpdHMgcmVsYXRpb25zaGlwcyBhcmUgd2l0aCBvdGhlciBvcHRpb25zLiBGcm9tIHRoZXJlIEkmIzM5O2xsIHN0YXJ0IG1hcHBpbmcgb3V0IHRoZSBpbXBsaWNhdGlvbnMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE1IDEzOjA0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bW0vS2NvbmZpZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDEzOTUsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MTM5NTpcdFx0ICBwdXJwb3Nlcy4gIEl0IGlzIHJlcXVpcmVkIHRvIGVuYWJsZSB1c2VyZmF1bHRmZCB3cml0ZSBwcm90ZWN0aW9uIG9uXG4xMzk2Olx0XHQgIGZpbGUtYmFja2VkIG1lbW9yeSB0eXBlcyBsaWtlIHNobWVtIGFuZCBodWdldGxiZnMuXG4xMzk3Olx0XG4xMzk4Olx0IyBtdWx0aS1nZW4gTFJVIHtcbjEzOTk6XHRjb25maWcgTFJVX0dFTlxuMTQwMDpcdFx0Ym9vbCBcJiMzNDtNdWx0aS1HZW4gTFJVXCYjMzQ7XG4xNDAxOlx0XHRkZXBlbmRzIG9uIE1NVVxuMTQwMjpcdFx0IyBtYWtlIHN1cmUgZm9saW8tXHUwMDNlZmxhZ3MgaGFzIGVub3VnaCBzcGFyZSBiaXRzXG4xNDAzOlx0XHRkZXBlbmRzIG9uIDY0QklUIHx8ICFTUEFSU0VNRU0gfHwgU1BBUlNFTUVNX1ZNRU1NQVBcbjE0MDQ6XHRcdGhlbHBcbjE0MDU6XHRcdCAgQSBoaWdoIHBlcmZvcm1hbmNlIExSVSBpbXBsZW1lbnRhdGlvbiB0byBvdmVyY29tbWl0IG1lbW9yeS4gU2VlXG4xNDA2Olx0XHQgIERvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUvbW0vbXVsdGlnZW5fbHJ1LnJzdCBmb3IgZGV0YWlscy5cbjE0MDc6XHRcbjE0MDg6XHRjb25maWcgTFJVX0dFTl9FTkFCTEVEXG4xNDA5Olx0XHRib29sIFwmIzM0O0VuYWJsZSBieSBkZWZhdWx0XCYjMzQ7XG4xNDEwOlx0XHRkZXBlbmRzIG9uIExSVV9HRU5cbjE0MTE6XHRcdGhlbHBcbjE0MTI6XHRcdCAgVGhpcyBvcHRpb24gZW5hYmxlcyB0aGUgbXVsdGktZ2VuIExSVSBieSBkZWZhdWx0LlxuMTQxMzpcdFxuMTQxNDpcdGNvbmZpZyBMUlVfR0VOX1NUQVRTXG4xNDE1Olx0XHRib29sIFwmIzM0O0Z1bGwgc3RhdHMgZm9yIGRlYnVnZ2luZ1wmIzM0O1xuMTQxNjpcdFx0ZGVwZW5kcyBvbiBMUlVfR0VOXG4xNDE3Olx0XHRoZWxwXG4xNDE4Olx0XHQgIERvIG5vdCBlbmFibGUgdGhpcyBvcHRpb24gdW5sZXNzIHlvdSBwbGFuIHRvIGxvb2sgYXQgaGlzdG9yaWNhbCBzdGF0c1xuMTQxOTpcdFx0ICBmcm9tIGV2aWN0ZWQgZ2VuZXJhdGlvbnMgZm9yIGRlYnVnZ2luZyBwdXJwb3NlLlxuMTQyMDpcdFxuMTQyMTpcdFx0ICBUaGlzIG9wdGlvbiBoYXMgYSBwZXItbWVtY2cgYW5kIHBlci1ub2RlIG1lbW9yeSBvdmVyaGVhZC5cbjE0MjI6XHRcbjE0MjM6XHRjb25maWcgTFJVX0dFTl9XQUxLU19NTVVcbjE0MjQ6XHRcdGRlZl9ib29sIHlcbjE0MjU6XHRcdGRlcGVuZHMgb24gTFJVX0dFTiBcdTAwMjZcdTAwMjYgQVJDSF9IQVNfSFdfUFRFX1lPVU5HXG4xNDI2Olx0IyB9XG4xNDI3Olx0XG4xNDI4Olx0Y29uZmlnIExPQ0tfTU1fQU5EX0ZJTkRfVk1BXG4xNDI5Olx0XHRib29sXG4xNDMwOlx0XHRkZXBlbmRzIG9uICFTVEFDS19HUk9XU1VQXG4xNDMxOlx0XG4xNDMyOlx0Y29uZmlnIElPTU1VX01NX0RBVEFcbjE0MzM6XHRcdGJvb2xcbjE0MzQ6XHRcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTUgMTM6MDQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTEwMDUKCQkJCQkJCW91dHB1dDogMjQKCQkJCQkJCXRob3VnaHRzOiA4OQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipOYXZpZ2F0aW5nIHRoZSBEZXBlbmRlbmNpZXMqKgoKT2theSwgaGVyZSYjMzk7cyB3aGF0IEkmIzM5O20gdGhpbmtpbmcuIEkgbmVlZCB0byBmaWd1cmUgb3V0IHRoZSBkZXBlbmRlbmNpZXMgZm9yIGBDT05GSUdfTFJVX0dFTmAsIHN0YXJ0aW5nIHdpdGggdGhlIG9idmlvdXMgb25lOiBpdCYjMzk7cyBsaW5rZWQgdG8gYE1NVWAuIE1ha2VzIHNlbnNlLiBOb3csIGxldCYjMzk7cyBub3QgZ2V0IGFoZWFkIG9mIG91cnNlbHZlcy4gSSBzaG91bGQgYWxzbyBzZWUgaWYgYENPTkZJR19ERUJVR19GU2AgaXMgYSByZXF1aXJlbWVudC4gSSBuZWVkIHRvIGJlIHRob3JvdWdoIHdpdGggdGhlc2UgZGVwZW5kZW5jaWVzLCBzbyBsZXQmIzM5O3MgY2hlY2sgZm9yIGl0LiBIbW0sIGhvbGQgb24gYSBzZWNvbmQuIEkgbmVlZCB0byB2ZXJpZnkgd2hldGhlciBgZGVidWdmc19jcmVhdGVfZmlsZV9hdXhfbnVtYCBpcyBjb25kaXRpb25hbCBvbiBgQ09ORklHX0RFQlVHX0ZTYC4gVGhpcyBzb3J0IG9mIGRldGFpbCBpcyBjcnVjaWFsIGZvciBjb25maWd1cmluZyBteSBzeXN0ZW0gcHJvcGVybHkuIE9rYXksIGxvb2tzIGxpa2UgSSBuZWVkIHRvIHRyYWNlIGJhY2sgYW5kIGZpbmQgdGhlIGRlZmluaXRpdmUgZGVmaW5pdGlvbiBvZiBgZGVidWdmc19jcmVhdGVfZmlsZV9hdXhfbnVtYC4gVGhpcyBpcyBnb2luZyB0byBiZSBhIGZ1biBsaXR0bGUgZGlnLCBidXQgbmVjZXNzYXJ5LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNSAxMzowNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtkZWJ1Z2ZzX2NyZWF0ZV9maWxlX2F1eF9udW0mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9jcnlwdG8vaW50ZWwvcWF0L3FhdF9jb21tb24vYWRmX3RsX2RlYnVnZnMuYz02OTg9dm9pZCBhZGZfdGxfZGJnZnNfYWRkKHN0cnVjdCBhZGZfYWNjZWxfZGV2ICphY2NlbF9kZXYpXG4tLVxuZHJpdmVycy9jcnlwdG8vaW50ZWwvcWF0L3FhdF9jb21tb24vYWRmX3RsX2RlYnVnZnMuYy03MTctXHRcdFx0IEFERl9UTF9EQkdfUlBfQUxQSEFfSU5ERVgoaSkpO1xuZHJpdmVycy9jcnlwdG8vaW50ZWwvcWF0L3FhdF9jb21tb24vYWRmX3RsX2RlYnVnZnMuYzo3MTg6XHRcdGRlYnVnZnNfY3JlYXRlX2ZpbGVfYXV4X251bShuYW1lLCAwNjQ0LCBkaXIsIGFjY2VsX2RldiwgaSxcbmRyaXZlcnMvY3J5cHRvL2ludGVsL3FhdC9xYXRfY29tbW9uL2FkZl90bF9kZWJ1Z2ZzLmMtNzE5LVx0XHRcdFx0XHQgICAgXHUwMDI2dGxfcnBfZGF0YV9mb3BzKTtcbi0tXG5kcml2ZXJzL2Zpcm13YXJlL2FybV9zY21pL3Jhd19tb2RlLmM9MTIxMz12b2lkICpzY21pX3Jhd19tb2RlX2luaXQoY29uc3Qgc3RydWN0IHNjbWlfaGFuZGxlICpoYW5kbGUsXG4tLVxuZHJpdmVycy9maXJtd2FyZS9hcm1fc2NtaS9yYXdfbW9kZS5jLTEyODEtXG5kcml2ZXJzL2Zpcm13YXJlL2FybV9zY21pL3Jhd19tb2RlLmM6MTI4MjpcdFx0XHRkZWJ1Z2ZzX2NyZWF0ZV9maWxlX2F1eF9udW0oXCYjMzQ7bWVzc2FnZVwmIzM0OywgMDYwMCwgY2hkLFxuZHJpdmVycy9maXJtd2FyZS9hcm1fc2NtaS9yYXdfbW9kZS5jLTEyODMtXHRcdFx0XHRcdCAgICByYXcsIGNoYW5uZWxzW2ldLFxuLS1cbmRyaXZlcnMvZmlybXdhcmUvYXJtX3NjbWkvcmF3X21vZGUuYy0xMjg1LVxuZHJpdmVycy9maXJtd2FyZS9hcm1fc2NtaS9yYXdfbW9kZS5jOjEyODY6XHRcdFx0ZGVidWdmc19jcmVhdGVfZmlsZV9hdXhfbnVtKFwmIzM0O21lc3NhZ2VfYXN5bmNcJiMzNDssIDA2MDAsIGNoZCxcbmRyaXZlcnMvZmlybXdhcmUvYXJtX3NjbWkvcmF3X21vZGUuYy0xMjg3LVx0XHRcdFx0XHQgICAgcmF3LCBjaGFubmVsc1tpXSxcbi0tXG5kcml2ZXJzL2Zpcm13YXJlL2FybV9zY21pL3Jhd19tb2RlLmMtMTI4OS1cbmRyaXZlcnMvZmlybXdhcmUvYXJtX3NjbWkvcmF3X21vZGUuYzoxMjkwOlx0XHRcdGRlYnVnZnNfY3JlYXRlX2ZpbGVfYXV4X251bShcJiMzNDttZXNzYWdlX3BvbGxcJiMzNDssIDA2MDAsIGNoZCxcbmRyaXZlcnMvZmlybXdhcmUvYXJtX3NjbWkvcmF3X21vZGUuYy0xMjkxLVx0XHRcdFx0XHRcdCAgICByYXcsIGNoYW5uZWxzW2ldLFxuLS1cbmRyaXZlcnMvZmlybXdhcmUvYXJtX3NjbWkvcmF3X21vZGUuYy0xMjkzLVxuZHJpdmVycy9maXJtd2FyZS9hcm1fc2NtaS9yYXdfbW9kZS5jOjEyOTQ6XHRcdFx0ZGVidWdmc19jcmVhdGVfZmlsZV9hdXhfbnVtKFwmIzM0O21lc3NhZ2VfcG9sbF9hc3luY1wmIzM0OywgMDYwMCxcbmRyaXZlcnMvZmlybXdhcmUvYXJtX3NjbWkvcmF3X21vZGUuYy0xMjk1LVx0XHRcdFx0XHRcdCAgICBjaGQsIHJhdywgY2hhbm5lbHNbaV0sXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvYWYvcnZ1X2RlYnVnZnMuYz0yNzU4PXN0YXRpYyB2b2lkIHJ2dV9kYmdfbml4X2luaXQoc3RydWN0IHJ2dSAqcnZ1LCBpbnQgYmxrYWRkcilcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9hZi9ydnVfZGVidWdmcy5jLTI3OTEtXHRcdFx0ICAgIFx1MDAyNnJ2dV9kYmdfbml4X25kY19yeF9oaXRzX21pc3NfZm9wcyk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9hZi9ydnVfZGVidWdmcy5jOjI3OTI6XHRkZWJ1Z2ZzX2NyZWF0ZV9maWxlX2F1eF9udW0oXCYjMzQ7cXNpemVcJiMzNDssIDA2MDAsIHJ2dS1cdTAwM2VydnVfZGJnLm5peCwgcnZ1LFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvYWYvcnZ1X2RlYnVnZnMuYy0yNzkzLVx0XHRcdCAgICBibGthZGRyLCBcdTAwMjZydnVfZGJnX25peF9xc2l6ZV9mb3BzKTtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9hZi9ydnVfZGVidWdmcy5jPTMxMDQ9c3RhdGljIHZvaWQgcnZ1X2RiZ19jZ3hfaW5pdChzdHJ1Y3QgcnZ1ICpydnUpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvYWYvcnZ1X2RlYnVnZnMuYy0zMTQ1LVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvYWYvcnZ1X2RlYnVnZnMuYzozMTQ2Olx0XHRcdGRlYnVnZnNfY3JlYXRlX2ZpbGVfYXV4X251bShcJiMzNDtzdGF0c1wmIzM0OywgMDYwMCwgcnZ1LVx1MDAzZXJ2dV9kYmcubG1hYyxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL2FmL3J2dV9kZWJ1Z2ZzLmMtMzE0Ny1cdFx0XHRcdFx0XHQgICAgY3R4LCBsbWFjX2lkLCBcdTAwMjZydnVfZGJnX2NneF9zdGF0X2ZvcHMpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvYWYvcnZ1X2RlYnVnZnMuYzozMTQ4Olx0XHRcdGRlYnVnZnNfY3JlYXRlX2ZpbGVfYXV4X251bShcJiMzNDttYWNfZmlsdGVyXCYjMzQ7LCAwNjAwLFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvYWYvcnZ1X2RlYnVnZnMuYy0zMTQ5LVx0XHRcdFx0XHQgICAgcnZ1LVx1MDAzZXJ2dV9kYmcubG1hYywgY3R4LCBsbWFjX2lkLFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvYWYvcnZ1X2RlYnVnZnMuYy0zMTUwLVx0XHRcdFx0XHQgICAgXHUwMDI2cnZ1X2RiZ19jZ3hfZG1hY19mbHRfZm9wcyk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9hZi9ydnVfZGVidWdmcy5jOjMxNTE6XHRcdFx0ZGVidWdmc19jcmVhdGVfZmlsZV9hdXhfbnVtKFwmIzM0O2Z3ZGF0YVwmIzM0OywgMDYwMCxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL2FmL3J2dV9kZWJ1Z2ZzLmMtMzE1Mi1cdFx0XHRcdFx0XHQgICAgcnZ1LVx1MDAzZXJ2dV9kYmcubG1hYywgY3R4LFxuLS1cbmRyaXZlcnMvcGh5L21lZGlhdGVrL3BoeS1tdGstdHBoeS5jPTUwNT1zdGF0aWMgdm9pZCB1Ml9waHlfZGJnZnNfZmlsZXNfY3JlYXRlKHN0cnVjdCBtdGtfcGh5X2luc3RhbmNlICppbnN0KVxuLS1cbmRyaXZlcnMvcGh5L21lZGlhdGVrL3BoeS1tdGstdHBoeS5jLTUxMC1cdGZvciAoaSA9IDA7IGkgXHUwMDNjIGNvdW50OyBpJiM0MzsmIzQzOylcbmRyaXZlcnMvcGh5L21lZGlhdGVrL3BoeS1tdGstdHBoeS5jOjUxMTpcdFx0ZGVidWdmc19jcmVhdGVfZmlsZV9hdXhfbnVtKHUyX3BoeV9maWxlc1tpXSwgMDY0NCwgaW5zdC1cdTAwM2VwaHktXHUwMDNlZGVidWdmcyxcbmRyaXZlcnMvcGh5L21lZGlhdGVrL3BoeS1tdGstdHBoeS5jLTUxMi1cdFx0XHRcdCAgICBpbnN0LCBpLCAgXHUwMDI2dTJfcGh5X2ZvcHMpO1xuLS1cbmRyaXZlcnMvcGh5L21lZGlhdGVrL3BoeS1tdGstdHBoeS5jPTYxNT1zdGF0aWMgdm9pZCB1M19waHlfZGJnZnNfZmlsZXNfY3JlYXRlKHN0cnVjdCBtdGtfcGh5X2luc3RhbmNlICppbnN0KVxuLS1cbmRyaXZlcnMvcGh5L21lZGlhdGVrL3BoeS1tdGstdHBoeS5jLTYyMC1cdGZvciAoaSA9IDA7IGkgXHUwMDNjIGNvdW50OyBpJiM0MzsmIzQzOylcbmRyaXZlcnMvcGh5L21lZGlhdGVrL3BoeS1tdGstdHBoeS5jOjYyMTpcdFx0ZGVidWdmc19jcmVhdGVfZmlsZV9hdXhfbnVtKHUzX3BoeV9maWxlc1tpXSwgMDY0NCwgaW5zdC1cdTAwM2VwaHktXHUwMDNlZGVidWdmcyxcbmRyaXZlcnMvcGh5L21lZGlhdGVrL3BoeS1tdGstdHBoeS5jLTYyMi1cdFx0XHRcdCAgICBpbnN0LCBpLCBcdTAwMjZ1M19waHlfZm9wcyk7XG4tLVxuZHJpdmVycy9wbGF0Zm9ybS94ODYvZGVsbC9hbGllbndhcmUtd21pLXdtYXguYz0xNDc4PXN0YXRpYyB2b2lkIGF3Y2NfZGVidWdmc19pbml0KHN0cnVjdCB3bWlfZGV2aWNlICp3ZGV2KVxuLS1cbmRyaXZlcnMvcGxhdGZvcm0veDg2L2RlbGwvYWxpZW53YXJlLXdtaS13bWF4LmMtMTUxNS1cdFx0c2NucHJpbnRmKG5hbWUsIHNpemVvZihuYW1lKSwgXCYjMzQ7cGluJXVcJiMzNDssIGkpO1xuZHJpdmVycy9wbGF0Zm9ybS94ODYvZGVsbC9hbGllbndhcmUtd21pLXdtYXguYzoxNTE2Olx0XHRkZWJ1Z2ZzX2NyZWF0ZV9maWxlX2F1eF9udW0obmFtZSwgMDY0NCwgZ3Bpb19jdGwsIHdkZXYsIGksXG5kcml2ZXJzL3BsYXRmb3JtL3g4Ni9kZWxsL2FsaWVud2FyZS13bWktd21heC5jLTE1MTctXHRcdFx0XHRcdCAgICBcdTAwMjZhd2NjX2dwaW9fcGluX2ZvcHMpO1xuLS1cbmRyaXZlcnMvc2NzaS9scGZjL2xwZmNfZGVidWdmcy5jPTYwNDI9bHBmY19kZWJ1Z2ZzX2luaXRpYWxpemUoc3RydWN0IGxwZmNfdnBvcnQgKnZwb3J0KVxuLS1cbmRyaXZlcnMvc2NzaS9scGZjL2xwZmNfZGVidWdmcy5jLTYxMjAtXHRcdC8qIFNldHVwIERJRiBFcnJvciBJbmplY3Rpb25zICovXG5kcml2ZXJzL3Njc2kvbHBmYy9scGZjX2RlYnVnZnMuYzo2MTIxOlx0XHRkZWJ1Z2ZzX2NyZWF0ZV9maWxlX2F1eF9udW0oXCYjMzQ7SW5qRXJyTEJBXCYjMzQ7LCAwNjQ0LFxuZHJpdmVycy9zY3NpL2xwZmMvbHBmY19kZWJ1Z2ZzLmMtNjEyMi1cdFx0XHRcdFx0ICAgIHBoYmEtXHUwMDNlaGJhX2RlYnVnZnNfcm9vdCwgcGhiYSxcbi0tXG5kcml2ZXJzL3Njc2kvbHBmYy9scGZjX2RlYnVnZnMuYy02MTI2LVxuZHJpdmVycy9zY3NpL2xwZmMvbHBmY19kZWJ1Z2ZzLmM6NjEyNzpcdFx0ZGVidWdmc19jcmVhdGVfZmlsZV9hdXhfbnVtKFwmIzM0O0luakVyck5Qb3J0SURcJiMzNDssIDA2NDQsXG5kcml2ZXJzL3Njc2kvbHBmYy9scGZjX2RlYnVnZnMuYy02MTI4LVx0XHRcdFx0XHQgICAgcGhiYS1cdTAwM2VoYmFfZGVidWdmc19yb290LCBwaGJhLFxuLS1cbmRyaXZlcnMvc2NzaS9scGZjL2xwZmNfZGVidWdmcy5jLTYxMzEtXG5kcml2ZXJzL3Njc2kvbHBmYy9scGZjX2RlYnVnZnMuYzo2MTMyOlx0XHRkZWJ1Z2ZzX2NyZWF0ZV9maWxlX2F1eF9udW0oXCYjMzQ7SW5qRXJyV1dQTlwmIzM0OywgMDY0NCxcbmRyaXZlcnMvc2NzaS9scGZjL2xwZmNfZGVidWdmcy5jLTYxMzMtXHRcdFx0XHRcdCAgICBwaGJhLVx1MDAzZWhiYV9kZWJ1Z2ZzX3Jvb3QsIHBoYmEsXG4tLVxuZHJpdmVycy9zY3NpL2xwZmMvbHBmY19kZWJ1Z2ZzLmMtNjEzNi1cbmRyaXZlcnMvc2NzaS9scGZjL2xwZmNfZGVidWdmcy5jOjYxMzc6XHRcdGRlYnVnZnNfY3JlYXRlX2ZpbGVfYXV4X251bShcJiMzNDt3cml0ZUd1YXJkSW5qRXJyXCYjMzQ7LCAwNjQ0LFxuZHJpdmVycy9zY3NpL2xwZmMvbHBmY19kZWJ1Z2ZzLmMtNjEzOC1cdFx0XHRcdFx0ICAgIHBoYmEtXHUwMDNlaGJhX2RlYnVnZnNfcm9vdCwgcGhiYSxcbi0tXG5kcml2ZXJzL3Njc2kvbHBmYy9scGZjX2RlYnVnZnMuYy02MTQxLVxuZHJpdmVycy9zY3NpL2xwZmMvbHBmY19kZWJ1Z2ZzLmM6NjE0MjpcdFx0ZGVidWdmc19jcmVhdGVfZmlsZV9hdXhfbnVtKFwmIzM0O3dyaXRlQXBwSW5qRXJyXCYjMzQ7LCAwNjQ0LFxuZHJpdmVycy9zY3NpL2xwZmMvbHBmY19kZWJ1Z2ZzLmMtNjE0My1cdFx0XHRcdFx0ICAgIHBoYmEtXHUwMDNlaGJhX2RlYnVnZnNfcm9vdCwgcGhiYSxcbi0tXG5kcml2ZXJzL3Njc2kvbHBmYy9scGZjX2RlYnVnZnMuYy02MTQ1LVxuZHJpdmVycy9zY3NpL2xwZmMvbHBmY19kZWJ1Z2ZzLmM6NjE0NjpcdFx0ZGVidWdmc19jcmVhdGVfZmlsZV9hdXhfbnVtKFwmIzM0O3dyaXRlUmVmSW5qRXJyXCYjMzQ7LCAwNjQ0LFxuZHJpdmVycy9zY3NpL2xwZmMvbHBmY19kZWJ1Z2ZzLmMtNjE0Ny1cdFx0XHRcdFx0ICAgIHBoYmEtXHUwMDNlaGJhX2RlYnVnZnNfcm9vdCwgcGhiYSxcbi0tXG5kcml2ZXJzL3Njc2kvbHBmYy9scGZjX2RlYnVnZnMuYy02MTQ5LVxuZHJpdmVycy9zY3NpL2xwZmMvbHBmY19kZWJ1Z2ZzLmM6NjE1MDpcdFx0ZGVidWdmc19jcmVhdGVfZmlsZV9hdXhfbnVtKFwmIzM0O3JlYWRHdWFyZEluakVyclwmIzM0OywgMDY0NCxcbmRyaXZlcnMvc2NzaS9scGZjL2xwZmNfZGVidWdmcy5jLTYxNTEtXHRcdFx0XHRcdCAgICBwaGJhLVx1MDAzZWhiYV9kZWJ1Z2ZzX3Jvb3QsIHBoYmEsXG4tLVxuZHJpdmVycy9zY3NpL2xwZmMvbHBmY19kZWJ1Z2ZzLmMtNjE1NC1cbmRyaXZlcnMvc2NzaS9scGZjL2xwZmNfZGVidWdmcy5jOjYxNTU6XHRcdGRlYnVnZnNfY3JlYXRlX2ZpbGVfYXV4X251bShcJiMzNDtyZWFkQXBwSW5qRXJyXCYjMzQ7LCAwNjQ0LFxuZHJpdmVycy9zY3NpL2xwZmMvbHBmY19kZWJ1Z2ZzLmMtNjE1Ni1cdFx0XHRcdFx0ICAgIHBoYmEtXHUwMDNlaGJhX2RlYnVnZnNfcm9vdCwgcGhiYSxcbi0tXG5kcml2ZXJzL3Njc2kvbHBmYy9scGZjX2RlYnVnZnMuYy02MTU4LVxuZHJpdmVycy9zY3NpL2xwZmMvbHBmY19kZWJ1Z2ZzLmM6NjE1OTpcdFx0ZGVidWdmc19jcmVhdGVfZmlsZV9hdXhfbnVtKFwmIzM0O3JlYWRSZWZJbmpFcnJcJiMzNDssIDA2NDQsXG5kcml2ZXJzL3Njc2kvbHBmYy9scGZjX2RlYnVnZnMuYy02MTYwLVx0XHRcdFx0XHQgICAgcGhiYS1cdTAwM2VoYmFfZGVidWdmc19yb290LCBwaGJhLFxuLS1cbmZzL29yYW5nZWZzL29yYW5nZWZzLWRlYnVnZnMuYz0yMzg9c3RhdGljIHZvaWQgb3JhbmdlZnNfa2VybmVsX2RlYnVnX2luaXQodm9pZClcbi0tXG5mcy9vcmFuZ2Vmcy9vcmFuZ2Vmcy1kZWJ1Z2ZzLmMtMjUxLVxuZnMvb3JhbmdlZnMvb3JhbmdlZnMtZGVidWdmcy5jOjI1MjpcdGRlYnVnZnNfY3JlYXRlX2ZpbGVfYXV4X251bShPUkFOR0VGU19LTU9EX0RFQlVHX0ZJTEUsIDA0NDQsIGRlYnVnX2Rpciwga19idWZmZXIsXG5mcy9vcmFuZ2Vmcy9vcmFuZ2Vmcy1kZWJ1Z2ZzLmMtMjUzLVx0XHRcdCAgICAwLCBcdTAwMjZrZXJuZWxfZGVidWdfZm9wcyk7XG4tLVxuZnMvb3JhbmdlZnMvb3JhbmdlZnMtZGVidWdmcy5jPTMzNz1zdGF0aWMgdm9pZCBvcmFuZ2Vmc19jbGllbnRfZGVidWdfaW5pdCh2b2lkKVxuLS1cbmZzL29yYW5nZWZzL29yYW5nZWZzLWRlYnVnZnMuYy0zNTAtXG5mcy9vcmFuZ2Vmcy9vcmFuZ2Vmcy1kZWJ1Z2ZzLmM6MzUxOlx0Y2xpZW50X2RlYnVnX2RlbnRyeSA9IGRlYnVnZnNfY3JlYXRlX2ZpbGVfYXV4X251bShcbmZzL29yYW5nZWZzL29yYW5nZWZzLWRlYnVnZnMuYy0zNTItXHRcdFx0XHRcdCAgT1JBTkdFRlNfQ0xJRU5UX0RFQlVHX0ZJTEUsXG4tLVxuaW5jbHVkZS9saW51eC9kZWJ1Z2ZzLmg9NDYxPXN0YXRpYyBpbmxpbmUgc3NpemVfdCBkZWJ1Z2ZzX3JlYWRfZmlsZV9zdHIoc3RydWN0IGZpbGUgKmZpbGUsXG4tLVxuaW5jbHVkZS9saW51eC9kZWJ1Z2ZzLmgtNDY5LVxuaW5jbHVkZS9saW51eC9kZWJ1Z2ZzLmg6NDcwOiNkZWZpbmUgZGVidWdmc19jcmVhdGVfZmlsZV9hdXhfbnVtKG5hbWUsIG1vZGUsIHBhcmVudCwgZGF0YSwgbiwgZm9wcykgXFxcbmluY2x1ZGUvbGludXgvZGVidWdmcy5oLTQ3MS1cdGRlYnVnZnNfY3JlYXRlX2ZpbGVfYXV4KG5hbWUsIG1vZGUsIHBhcmVudCwgZGF0YSwgXFxcbi0tXG5tbS9zbHViLmM9MTAwNzU9c3RhdGljIHZvaWQgZGVidWdmc19zbGFiX2FkZChzdHJ1Y3Qga21lbV9jYWNoZSAqcylcbi0tXG5tbS9zbHViLmMtMTAwODMtXG5tbS9zbHViLmM6MTAwODQ6XHRkZWJ1Z2ZzX2NyZWF0ZV9maWxlX2F1eF9udW0oXCYjMzQ7YWxsb2NfdHJhY2VzXCYjMzQ7LCAwNDAwLCBzbGFiX2NhY2hlX2Rpciwgcyxcbm1tL3NsdWIuYy0xMDA4NS1cdFx0XHRcdFx0VFJBQ0tfQUxMT0MsIFx1MDAyNnNsYWJfZGVidWdmc19mb3BzKTtcbm1tL3NsdWIuYy0xMDA4Ni1cbm1tL3NsdWIuYzoxMDA4NzpcdGRlYnVnZnNfY3JlYXRlX2ZpbGVfYXV4X251bShcJiMzNDtmcmVlX3RyYWNlc1wmIzM0OywgMDQwMCwgc2xhYl9jYWNoZV9kaXIsIHMsXG5tbS9zbHViLmMtMTAwODgtXHRcdFx0XHRcdFRSQUNLX0ZSRUUsIFx1MDAyNnNsYWJfZGVidWdmc19mb3BzKTtcbi0tXG5tbS92bXNjYW4uYz02MDkzPXN0YXRpYyBpbnQgX19pbml0IGluaXRfbHJ1X2dlbih2b2lkKVxuLS1cbm1tL3Ztc2Nhbi5jLTYxMDAtXG5tbS92bXNjYW4uYzo2MTAxOlx0ZGVidWdmc19jcmVhdGVfZmlsZV9hdXhfbnVtKFwmIzM0O2xydV9nZW5cJiMzNDssIDA2NDQsIE5VTEwsIE5VTEwsIGZhbHNlLFxubW0vdm1zY2FuLmMtNjEwMi1cdFx0XHRcdCAgICBcdTAwMjZscnVfZ2VuX3J3X2ZvcHMpO1xubW0vdm1zY2FuLmM6NjEwMzpcdGRlYnVnZnNfY3JlYXRlX2ZpbGVfYXV4X251bShcJiMzNDtscnVfZ2VuX2Z1bGxcJiMzNDssIDA0NDQsIE5VTEwsIE5VTEwsIHRydWUsXG5tbS92bXNjYW4uYy02MTA0LVx0XHRcdFx0ICAgIFx1MDAyNmxydV9nZW5fcm9fZm9wcyk7XG4tLVxuc291bmQvc29jL3NvZi9zb2YtY2xpZW50LWlwYy1mbG9vZC10ZXN0LmM9Mjg0PXN0YXRpYyBpbnQgc29mX2lwY19mbG9vZF9wcm9iZShzdHJ1Y3QgYXV4aWxpYXJ5X2RldmljZSAqYXV4ZGV2LFxuLS1cbnNvdW5kL3NvYy9zb2Yvc29mLWNsaWVudC1pcGMtZmxvb2QtdGVzdC5jLTMwNi1cdFx0LyogY3JlYXRlIHJlYWQtd3JpdGUgaXBjX2Zsb29kX2NvdW50IGRlYnVnZnMgZW50cnkgKi9cbnNvdW5kL3NvYy9zb2Yvc29mLWNsaWVudC1pcGMtZmxvb2QtdGVzdC5jOjMwNzpcdFx0ZGVidWdmc19jcmVhdGVfZmlsZV9hdXhfbnVtKERFQlVHRlNfSVBDX0ZMT09EX0NPVU5ULCAwNjQ0LFxuc291bmQvc29jL3NvZi9zb2YtY2xpZW50LWlwYy1mbG9vZC10ZXN0LmMtMzA4LVx0XHRcdFx0ICAgIHByaXYtXHUwMDNlZGZzX3Jvb3QsIGNkZXYsIDAsIFx1MDAyNnNvZl9pcGNfZmxvb2RfZm9wcyk7XG4tLVxuc291bmQvc29jL3NvZi9zb2YtY2xpZW50LWlwYy1mbG9vZC10ZXN0LmMtMzEwLVx0XHQvKiBjcmVhdGUgcmVhZC13cml0ZSBpcGNfZmxvb2RfZHVyYXRpb25fbXMgZGVidWdmcyBlbnRyeSAqL1xuc291bmQvc29jL3NvZi9zb2YtY2xpZW50LWlwYy1mbG9vZC10ZXN0LmM6MzExOlx0XHRkZWJ1Z2ZzX2NyZWF0ZV9maWxlX2F1eF9udW0oREVCVUdGU19JUENfRkxPT0RfRFVSQVRJT04sIDA2NDQsXG5zb3VuZC9zb2Mvc29mL3NvZi1jbGllbnQtaXBjLWZsb29kLXRlc3QuYy0zMTItXHRcdFx0XHQgICAgcHJpdi1cdTAwM2VkZnNfcm9vdCwgY2RldiwgMSwgXHUwMDI2c29mX2lwY19mbG9vZF9mb3BzKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTUgMTM6MDQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjFtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTUyOTYKCQkJCQkJCW91dHB1dDogMjUKCQkJCQkJCXRob3VnaHRzOiAxNDIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqSW52ZXN0aWdhdGluZyB0aGUgbHJ1X2dlbiBEZWJ1Z2ZzIEludGVyZmFjZSoqCgpPa2F5LCBzbyBJJiMzOTttIGRpZ2dpbmcgaW50byB0aGUgbXVsdGlnZW4gTFJVIGltcGxlbWVudGF0aW9uLCBhbmQgdGhlIGZpcnN0IHRoaW5nIHRoYXQgY2F0Y2hlcyBteSBleWUgaXMgdGhpcyBgbW0vdm1zY2FuLmNgIGZpbGUuIFNwZWNpZmljYWxseSwgSSYjMzk7bSBsb29raW5nIGF0IGhvdyBgZGVidWdmc19jcmVhdGVfZmlsZV9hdXhfbnVtYCBpcyB1c2VkIHRvIGNyZWF0ZSB0aGUgYC9zeXMva2VybmVsL2RlYnVnL2xydV9nZW5gIGVudHJ5LiBJbnRlcmVzdGluZy4uLiB0aGUgZmlsZSBtb2RlIGlzIHNldCB0byAwNjQ0LiBUaGF0JiMzOTtzIHByZXR0eSBzdGFuZGFyZCwgcmVhZCBmb3IgZXZlcnlvbmUsIHdyaXRlIGZvciByb290LCBtYWtlcyBzZW5zZS4gQnV0IGl0IGFsc28gbWVhbnMgYW55b25lICpjb3VsZCogcG90ZW50aWFsbHkgdHJ5IHRvIHdyaXRlIHRvIHRoaXMsIHNvIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQgd3JpdGVzIHRvIHRoaXMgZmlsZSAqZG8qLgoKTGV0JiMzOTtzIHNlZeKApiB3cml0aW5nIHRvIHRoYXQgZGVidWdmcyBlbnRyeSBjYWxscyBgbHJ1X2dlbl9zZXFfd3JpdGUoKWAuIEFscmlnaHQsIG5vdyBJIG5lZWQgdG8gZmlndXJlIG91dCB3aGF0IHRoYXQgZG9lcywgYW5kIHRoZSBiZXN0IHBsYWNlIHRvIHN0YXJ0IGlzIHRoZSBkb2N1bWVudGF0aW9uLiBMZXQgbWUgY2hlY2sgdGhlIGBEb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL21tL211bHRpZ2VuX2xydS5yc3RgIGZpbGUuIEkmIzM5O2xsIGVpdGhlciBncmVwIGZvciBpdHMgY29udGVudHMgb3IganVzdCByZWFkIGl0LiBVbmRlcnN0YW5kaW5nIHdoYXQgdGhpcyBlbnRyeSBjb250cm9scyBpcyBrZXkgdG8gdW5kZXJzdGFuZGluZyB0aGUgbXVsdGlnZW4gTFJVIGluIGdlbmVyYWwuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE1IDEzOjA1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5FcnJvcjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm5vIG1hdGNoZXM8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7cnVuX2FnaW5nJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7RG9jdW1lbnRhdGlvbi8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7ZXJyb3ImIzM0OzogJiMzNDtubyBtYXRjaGVzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNSAxMzowNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNTcyMwoJCQkJCQkJb3V0cHV0OiAzOQoJCQkJCQkJdGhvdWdodHM6IDI5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBteSBvd24gbWVudGFsIHByb2Nlc3MsIGdpdmVuIG15IGV4cGVydGlzZToKCioqQ2hlY2tpbmcgTXVsdGlnZW4gTFJVIERvY3VtZW50YXRpb24qKgoKUmlnaHQsIHRpbWUgdG8gZGlnIGludG8gdGhpcyBtdWx0aWdlbiBMUlUgYnVzaW5lc3MuIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byBnbyBzdHJhaWdodCB0byB0aGUgc291cmNlIOKAkyB0aGUgZG9jdW1lbnRhdGlvbi4gU3BlY2lmaWNhbGx5LCBJJiMzOTttIHRoaW5raW5nIEkmIzM5O2xsIHN0YXJ0IGJ5IGdyZXBwaW5nIHRoZSBkb2N1bWVudGF0aW9uIGZvciBgbHJ1X2dlbmAgd2l0aGluIGBEb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL21tL211bHRpZ2VuX2xydS5yc3RgLiBUaGlzIGlzIHRoZSBtb3N0IGxvZ2ljYWwgZmlyc3Qgc3RlcC4gSSBzdXNwZWN0IHRoYXQgdmFyaWFibGUgaXMga2V5IHRvIHRoZSBpbXBsZW1lbnRhdGlvbiBkZXRhaWxzIEkmIzM5O20gYWZ0ZXIsIGFuZCB0aGF0IGRvY3VtZW50IHNob3VsZCBiZSB0aGUgcGxhY2Ugd2hlcmUgdGhlIGNvbmNlcHQgaXMgdGhvcm91Z2hseSBkaXNjdXNzZWQuIEdyZXBwaW5nIGlzIGp1c3QgdGhlIGZhc3Rlc3Qgd2F5IHRvIGdldCB0byB0aGF0IGluZm9ybWF0aW9uIHdpdGhvdXQgcmVhZGluZyB0aGUgd2hvbGUgZG9jdW1lbnQuIFRoaXMgd2lsbCBob3BlZnVsbHkgZ2l2ZSBtZSBxdWljayBoaXRzIG9uIHdoZXJlIHRvIGZvY3VzIG15IGF0dGVudGlvbiBhbmQgc2F2ZSBtZSBzb21lIHRpbWUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE1IDEzOjA1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2xydV9nZW4mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtEb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL21tL211bHRpZ2VuX2xydS5yc3QmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7RG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9tbS9tdWx0aWdlbl9scnUucnN0PTIwPVJ1bnRpbWUgb3B0aW9uc1xuRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9tbS9tdWx0aWdlbl9scnUucnN0LTIxLT09PT09PT09PT09PT09PVxuRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9tbS9tdWx0aWdlbl9scnUucnN0OjIyOmBgL3N5cy9rZXJuZWwvbW0vbHJ1X2dlbi9gYCBjb250YWlucyBzdGFibGUgQUJJcyBkZXNjcmliZWQgaW4gdGhlXG5Eb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL21tL211bHRpZ2VuX2xydS5yc3QtMjMtZm9sbG93aW5nIHN1YnNlY3Rpb25zLlxuLS1cbkRvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUvbW0vbXVsdGlnZW5fbHJ1LnJzdD01ND1FLmcuLFxuLS1cbkRvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUvbW0vbXVsdGlnZW5fbHJ1LnJzdC01Ni1cbkRvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUvbW0vbXVsdGlnZW5fbHJ1LnJzdDo1NzogICAgZWNobyB5IFx1MDAzZS9zeXMva2VybmVsL21tL2xydV9nZW4vZW5hYmxlZFxuRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9tbS9tdWx0aWdlbl9scnUucnN0OjU4OiAgICBjYXQgL3N5cy9rZXJuZWwvbW0vbHJ1X2dlbi9lbmFibGVkXG5Eb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL21tL211bHRpZ2VuX2xydS5yc3QtNTktICAgIDB4MDAwN1xuRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9tbS9tdWx0aWdlbl9scnUucnN0OjYwOiAgICBlY2hvIDUgXHUwMDNlL3N5cy9rZXJuZWwvbW0vbHJ1X2dlbi9lbmFibGVkXG5Eb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL21tL211bHRpZ2VuX2xydS5yc3Q6NjE6ICAgIGNhdCAvc3lzL2tlcm5lbC9tbS9scnVfZ2VuL2VuYWJsZWRcbkRvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUvbW0vbXVsdGlnZW5fbHJ1LnJzdC02Mi0gICAgMHgwMDA1XG4tLVxuRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9tbS9tdWx0aWdlbl9scnUucnN0PTg0PUV4cGVyaW1lbnRhbCBmZWF0dXJlc1xuRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9tbS9tdWx0aWdlbl9scnUucnN0LTg1LT09PT09PT09PT09PT09PT09PT09PVxuRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9tbS9tdWx0aWdlbl9scnUucnN0Ojg2OmBgL3N5cy9rZXJuZWwvZGVidWcvbHJ1X2dlbmBgIGFjY2VwdHMgY29tbWFuZHMgZGVzY3JpYmVkIGluIHRoZVxuRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9tbS9tdWx0aWdlbl9scnUucnN0LTg3LWZvbGxvd2luZyBzdWJzZWN0aW9ucy4gTXVsdGlwbGUgY29tbWFuZCBsaW5lcyBhcmUgc3VwcG9ydGVkLCBzbyBkb2VzXG5Eb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL21tL211bHRpZ2VuX2xydS5yc3Q9ODg9Y29uY2F0ZW5hdGlvbiB3aXRoIGRlbGltaXRlcnMgYGAsYGAgYW5kIGBgO2BgLlxuRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9tbS9tdWx0aWdlbl9scnUucnN0LTg5LVxuRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9tbS9tdWx0aWdlbl9scnUucnN0OjkwOmBgL3N5cy9rZXJuZWwvZGVidWcvbHJ1X2dlbl9mdWxsYGAgcHJvdmlkZXMgYWRkaXRpb25hbCBzdGF0cyBmb3JcbkRvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUvbW0vbXVsdGlnZW5fbHJ1LnJzdC05MS1kZWJ1Z2dpbmcuIGBgQ09ORklHX0xSVV9HRU5fU1RBVFM9eWBgIGtlZXBzIGhpc3RvcmljYWwgc3RhdHMgZnJvbVxuLS1cbkRvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUvbW0vbXVsdGlnZW5fbHJ1LnJzdD0xMDM9c2NoZWR1bGVyIG5lZWRzIHRvIGVzdGltYXRlIHRoZSB3b3JraW5nIHNldHMgb2YgdGhlIGV4aXN0aW5nIGpvYnMuXG5Eb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL21tL211bHRpZ2VuX2xydS5yc3QtMTA0LVxuRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9tbS9tdWx0aWdlbl9scnUucnN0OjEwNTpXaGVuIGl0IGlzIHJlYWQsIGBgbHJ1X2dlbmBgIHJldHVybnMgYSBoaXN0b2dyYW0gb2YgbnVtYmVycyBvZiBwYWdlc1xuRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9tbS9tdWx0aWdlbl9scnUucnN0LTEwNi1hY2Nlc3NlZCBvdmVyIGRpZmZlcmVudCB0aW1lIGludGVydmFscyBmb3IgZWFjaCBtZW1jZyBhbmQgbm9kZS5cbi0tXG5Eb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL21tL211bHRpZ2VuX2xydS5yc3Q9MTIwPXRoZSBmb3JtZXIgaXMgdGhlIGxhcmdlc3QgYW5kIHRoYXQgb2YgdGhlIGxhdHRlciBpcyB0aGUgc21hbGxlc3QuXG5Eb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL21tL211bHRpZ2VuX2xydS5yc3QtMTIxLVxuRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9tbS9tdWx0aWdlbl9scnUucnN0OjEyMjpVc2VycyBjYW4gd3JpdGUgdGhlIGZvbGxvd2luZyBjb21tYW5kIHRvIGBgbHJ1X2dlbmBgIHRvIGNyZWF0ZSBhIG5ld1xuRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9tbS9tdWx0aWdlbl9scnUucnN0LTEyMy1nZW5lcmF0aW9uIGBgbWF4X2dlbl9uciYjNDM7MWBgOlxuLS1cbkRvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUvbW0vbXVsdGlnZW5fbHJ1LnJzdD0xNDQ9dGhpcyBuZXcgam9iLlxuRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9tbS9tdWx0aWdlbl9scnUucnN0LTE0NS1cbkRvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUvbW0vbXVsdGlnZW5fbHJ1LnJzdDoxNDY6VXNlcnMgY2FuIHdyaXRlIHRoZSBmb2xsb3dpbmcgY29tbWFuZCB0byBgYGxydV9nZW5gYCB0byBldmljdFxuRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9tbS9tdWx0aWdlbl9scnUucnN0LTE0Ny1nZW5lcmF0aW9ucyBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gYGBtaW5fZ2VuX25yYGAuXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE1IDEzOjA1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE2OTUxCgkJCQkJCQlvdXRwdXQ6IDM1CgkJCQkJCQl0aG91Z2h0czogNDU4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgTXVsdGlnZW5lcmF0aW9uYWwgTFJVIFBhdGNoKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIGRvY3VtZW50YXRpb24sIGBEb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL21tL211bHRpZ2VuX2xydS5yc3RgLCBhbmQgaXQgbWVudGlvbnMgYSBjb21tYW5kIHRvIGNyZWF0ZSBhIG5ldyBnZW5lcmF0aW9uLCBzcGVjaWZpY2FsbHkgdGhlIGBscnVfZ2VuYCBjb21tYW5kLiBJdCBzZWVtcyBJIGNhbiBpbmNyZW1lbnQgdGhlIGdlbmVyYXRpb24gY291bnRlciB3aXRoIGAmIzQzOyAmbHQ7bWVtY2dfaWQmZ3Q7ICZsdDtub2RlX2lkJmd0OyAmbHQ7bWF4X2dlbl9uciZndDsgW3N3YXBwaW5lc3NdYC4gSW50ZXJlc3RpbmcuIE5vdywgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzIHBhdGNoIGFuZCBzZWUgd2hhdCYjMzk7cyBiZWluZyBjaGFuZ2VkLgoKQWgsIHRoZSBgbW0vdm1zY2FuLmNgIGZpbGUuIEkgc2VlIHRoZSBkaWZmLiBUaGV5JiMzOTt2ZSBhZGRlZCBhIGNoZWNrIHdpdGhpbiB0aGUgYHJ1bl9hZ2luZ2AgZnVuY3Rpb246IGBpZiAoc2VxICZsdDsgbWF4X3NlcSkgcmV0dXJuIDA7YC4gUmlnaHQsIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoeSB0aGlzIGFkZGl0aW9uLiBMZXQmIzM5O3MgbG9vayBhdCB0aGUgb3JpZ2luYWwgY29kZS4KCkJlZm9yZSB0aGUgcGF0Y2gsIGluIGBydW5fYWdpbmdgLCBpZiBgc2VxYCB3YXMgKm5vdCogZ3JlYXRlciB0aGFuIGBtYXhfc2VxYCBpdCB3b3VsZCBwcm9jZWVkIHRvIGNhbGwgYHRyeV90b19pbmNfbWF4X3NlcWAuIEJ1dCB3aGF0JiMzOTtzIGhhcHBlbmluZyBpZiBgc2VxYCBpcyAqbGVzcyogdGhhbiBgbWF4X3NlcWA/IEJlZm9yZSB0aGUgcGF0Y2gsIGl0IHdvdWxkIHNpbXBseSBleGVjdXRlIGB0cnlfdG9faW5jX21heF9zZXFgLiBOb3cgdGhlcmUmIzM5O3MgdGhpcyBleHRyYSBlYXJseS1vdXQuIFRoaXMgaXMgYSBwb3RlbnRpYWwgYnVnISBUaGlzIG1lYW5zIHRoYXQgaWYgYHNlcWAgaXMgbGVzcyB0aGFuIGBtYXhfc2VxYCwgdGhlIGZ1bmN0aW9uIHdpbGwgcmV0dXJuIGAwYCwgYnlwYXNzaW5nIHRoZSBwb3RlbnRpYWxseSBwcm9ibGVtYXRpYyBjYWxsIHRvIGB0cnlfdG9faW5jX21heF9zZXFgLiBJIG5lZWQgdG8gZmlndXJlIG91dCB3aGF0IGB0cnlfdG9faW5jX21heF9zZXFgIGRvZXMgd2l0aCBgbWF4X3NlcWAgdG8gZnVsbHkgdW5kZXJzdGFuZCB0aGlzIGxvZ2ljLiBJIG5lZWQgdG8gZ28gaW52ZXN0aWdhdGUgdGhhdCBmdW5jdGlvbiBub3chCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE1IDEzOjA1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3RyeV90b19pbmNfbWF4X3NlcSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tL3Ztc2Nhbi5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL3Ztc2Nhbi5jPTQxNDM9c3RhdGljIGJvb2wgaW5jX21heF9zZXEoc3RydWN0IGxydXZlYyAqbHJ1dmVjLCB1bnNpZ25lZCBsb25nIHNlcSwgaW50IHN3YXBwaW5lc3MpXG4tLVxubW0vdm1zY2FuLmMtNDIwNy1cbm1tL3Ztc2Nhbi5jOjQyMDg6c3RhdGljIGJvb2wgdHJ5X3RvX2luY19tYXhfc2VxKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgdW5zaWduZWQgbG9uZyBzZXEsXG5tbS92bXNjYW4uYy00MjA5LVx0XHRcdCAgICAgICBpbnQgc3dhcHBpbmVzcywgYm9vbCBmb3JjZV9zY2FuKVxuLS1cbm1tL3Ztc2Nhbi5jPTQ2MjQ9Ym9vbCByZWNoZWNrX2xydV9nZW5fbWF4X21lbWNnKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgaW50IG5pZClcbi0tXG5tbS92bXNjYW4uYy00NjM2LVxubW0vdm1zY2FuLmM6NDYzNzpzdGF0aWMgdm9pZCB0cnlfdG9faW5jX21heF9zZXFfbm93YWxrKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZyxcbm1tL3Ztc2Nhbi5jLTQ2MzgtXHRcdFx0XHQgICAgICBzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMpXG4tLVxubW0vdm1zY2FuLmM9NDY3MT12b2lkIG1heF9scnVfZ2VuX21lbWNnKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgaW50IG5pZClcbi0tXG5tbS92bXNjYW4uYy00Njc3LVx0XHR3aGlsZSAoZ2V0X25yX2dlbnMobHJ1dmVjLCB0eXBlKSBcdTAwM2MgTUFYX05SX0dFTlMpIHtcbm1tL3Ztc2Nhbi5jOjQ2Nzg6XHRcdFx0dHJ5X3RvX2luY19tYXhfc2VxX25vd2FsayhtZW1jZywgbHJ1dmVjKTtcbm1tL3Ztc2Nhbi5jLTQ2NzktXHRcdFx0Y29uZF9yZXNjaGVkKCk7XG4tLVxubW0vdm1zY2FuLmM9NTE2MD1zdGF0aWMgYm9vbCBzaG91bGRfYWJvcnRfc2NhbihzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjKVxuLS1cbm1tL3Ztc2Nhbi5jLTUxOTEtICogRm9yIGZ1dHVyZSBvcHRpbWl6YXRpb25zOlxubW0vdm1zY2FuLmM6NTE5MjogKiAxLiBEZWZlciB0cnlfdG9faW5jX21heF9zZXEoKSB0byB3b3JrcXVldWVzIHRvIHJlZHVjZSBsYXRlbmN5IGZvciBtZW1jZ1xubW0vdm1zY2FuLmMtNTE5My0gKiAgICByZWNsYWltLlxuLS1cbm1tL3Ztc2Nhbi5jPTUxOTU9c3RhdGljIGJvb2wgdHJ5X3RvX3Nocmlua19scnV2ZWMoc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYylcbi0tXG5tbS92bXNjYW4uYy01MjEyLVx0XHRpZiAoc2hvdWxkX3J1bl9hZ2luZyhscnV2ZWMsIG1heF9zZXEsIHNjLCBzd2FwcGluZXNzKSkge1xubW0vdm1zY2FuLmM6NTIxMzpcdFx0XHRpZiAodHJ5X3RvX2luY19tYXhfc2VxKGxydXZlYywgbWF4X3NlcSwgc3dhcHBpbmVzcywgZmFsc2UpKVxubW0vdm1zY2FuLmMtNTIxNC1cdFx0XHRcdG5lZWRfcm90YXRlID0gdHJ1ZTtcbi0tXG5tbS92bXNjYW4uYz01ODI1PXN0YXRpYyBpbnQgcnVuX2FnaW5nKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgdW5zaWduZWQgbG9uZyBzZXEsXG4tLVxubW0vdm1zY2FuLmMtNTgzNS1cbm1tL3Ztc2Nhbi5jOjU4MzY6XHRyZXR1cm4gdHJ5X3RvX2luY19tYXhfc2VxKGxydXZlYywgbWF4X3NlcSwgc3dhcHBpbmVzcywgZm9yY2Vfc2NhbikgPyAwIDogLUVFWElTVDtcbm1tL3Ztc2Nhbi5jLTU4MzctfVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNSAxMzowNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxODU0NwoJCQkJCQkJb3V0cHV0OiAzNQoJCQkJCQkJdGhvdWdodHM6IDMxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHN1bW1hcnksIGFzIHRob3VnaCBJJiMzOTttIHRoaW5raW5nIHRocm91Z2ggdGhpczoKCioqQW5hbHl6aW5nIGB0cnlfdG9faW5jX21heF9zZXFgIGluIGBtbS92bXNjYW4uY2AqKgoKT2theSwgc28gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCYjMzk7cyBoYXBwZW5pbmcgd2l0aCBgdHJ5X3RvX2luY19tYXhfc2VxYC4gUmlnaHQsIGxpbmUgNDIwOCBpbiBgbW0vdm1zY2FuLmNgLiBMZXQmIzM5O3MganVtcCBvdmVyIHRoZXJlIGFuZCB0YWtlIGEgbG9vay4gSSYjMzk7bSBnb2luZyB0byB3YW50IHRvIHVuZGVyc3RhbmQgaXRzIHJvbGUgd2l0aGluIHRoZSBsYXJnZXIgZnJhbWV3b3JrIG9mIG1lbW9yeSBtYW5hZ2VtZW50IGFuZCB0aGUgdmlydHVhbCBtZW1vcnkgc2Nhbm5pbmcgcHJvY2Vzcy4gU3BlY2lmaWNhbGx5LCBJJiMzOTtsbCBuZWVkIHRvIGdyYXNwIGhvdyB0aGlzIGZ1bmN0aW9uIGNvbnRyaWJ1dGVzIHRvIGluY3JlYXNpbmcgdGhlIG1heGltdW0gc2VxdWVuY2UgbnVtYmVyLiBJJiMzOTtsbCBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCB0cmlnZ2VycyBpdHMgY2FsbCwgd2hhdCBpdHMgaW5wdXRzIGFyZSwgd2hhdCBpdCBkb2VzIHdpdGggdGhvc2UgaW5wdXRzLCBhbmQgd2hhdCB0aGUgdWx0aW1hdGUgcHVycG9zZSBvZiB0aGlzIHNlcXVlbmNlIGluY3JlbWVudCBpcyBpbiB0aGUgY29udGV4dCBvZiB0aGUgcGFnZSByZWNsYWltIHByb2Nlc3MuIExpa2VseSwgaXQgcGxheXMgYSByb2xlIGluIHRyYWNraW5nIG9yIG1hbmFnaW5nIHNvbWUgYXNwZWN0IG9mIG1lbW9yeSBwcmVzc3VyZSBvciBwYWdlIGFnaW5nLCBvdGhlcndpc2UsIHRoZSBmdW5jdGlvbiB3b3VsZCBiZSBwb2ludGxlc3MuIEkgc2hvdWxkIGxvb2sgZm9yIHRoZSBzdXJyb3VuZGluZyBjb2RlIGluIHRoZSBmdW5jdGlvbiB0byBwcm92aWRlIGNvbnRleHQsIGxvb2sgZm9yIGNvbW1lbnRzIGlmIHRoZXkgZXhpc3QsIGFuZCB0aGVuIGdvIGluIGZvciBhIGRlZXAgZGl2ZSB0byB3b3JrIG91dCBwcmVjaXNlbHkgd2hhdCB3ZSBhcmUgdHJ5aW5nIHRvIGFjaGlldmUgd2l0aCB0aGUgc2VxdWVuY2UgaW5jcmVtZW50LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNSAxMzowNTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O21tL3Ztc2Nhbi5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNDIwOCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA0MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDs0MjA4Olx0c3RhdGljIGJvb2wgdHJ5X3RvX2luY19tYXhfc2VxKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgdW5zaWduZWQgbG9uZyBzZXEsXG40MjA5Olx0XHRcdFx0ICAgICAgIGludCBzd2FwcGluZXNzLCBib29sIGZvcmNlX3NjYW4pXG40MjEwOlx0e1xuNDIxMTpcdFx0Ym9vbCBzdWNjZXNzO1xuNDIxMjpcdFx0c3RydWN0IGxydV9nZW5fbW1fd2FsayAqd2FsaztcbjQyMTM6XHRcdHN0cnVjdCBtbV9zdHJ1Y3QgKm1tID0gTlVMTDtcbjQyMTQ6XHRcdHN0cnVjdCBscnVfZ2VuX2ZvbGlvICpscnVnZW4gPSBcdTAwMjZscnV2ZWMtXHUwMDNlbHJ1Z2VuO1xuNDIxNTpcdFx0c3RydWN0IGxydV9nZW5fbW1fc3RhdGUgKm1tX3N0YXRlID0gZ2V0X21tX3N0YXRlKGxydXZlYyk7XG40MjE2Olx0XG40MjE3Olx0XHRWTV9XQVJOX09OX09OQ0Uoc2VxIFx1MDAzZSBSRUFEX09OQ0UobHJ1Z2VuLVx1MDAzZW1heF9zZXEpKTtcbjQyMTg6XHRcbjQyMTk6XHRcdGlmICghbW1fc3RhdGUpXG40MjIwOlx0XHRcdHJldHVybiBpbmNfbWF4X3NlcShscnV2ZWMsIHNlcSwgc3dhcHBpbmVzcyk7XG40MjIxOlx0XG40MjIyOlx0XHQvKiBzZWUgdGhlIGNvbW1lbnQgaW4gaXRlcmF0ZV9tbV9saXN0KCkgKi9cbjQyMjM6XHRcdGlmIChzZXEgXHUwMDNjPSBSRUFEX09OQ0UobW1fc3RhdGUtXHUwMDNlc2VxKSlcbjQyMjQ6XHRcdFx0cmV0dXJuIGZhbHNlO1xuNDIyNTpcdFxuNDIyNjpcdFx0LypcbjQyMjc6XHRcdCAqIElmIHRoZSBoYXJkd2FyZSBkb2VzbiYjMzk7dCBhdXRvbWF0aWNhbGx5IHNldCB0aGUgYWNjZXNzZWQgYml0LCBmYWxsYmFja1xuNDIyODpcdFx0ICogdG8gbHJ1X2dlbl9sb29rX2Fyb3VuZCgpLCB3aGljaCBvbmx5IGNsZWFycyB0aGUgYWNjZXNzZWQgYml0IGluIGFcbjQyMjk6XHRcdCAqIGhhbmRmdWwgb2YgUFRFcy4gU3ByZWFkaW5nIHRoZSB3b3JrIG91dCBvdmVyIGEgcGVyaW9kIG9mIHRpbWUgdXN1YWxseVxuNDIzMDpcdFx0ICogaXMgbGVzcyBlZmZpY2llbnQsIGJ1dCBpdCBhdm9pZHMgYnVyc3R5IHBhZ2UgZmF1bHRzLlxuNDIzMTpcdFx0ICovXG40MjMyOlx0XHRpZiAoIXNob3VsZF93YWxrX21tdSgpKSB7XG40MjMzOlx0XHRcdHN1Y2Nlc3MgPSBpdGVyYXRlX21tX2xpc3Rfbm93YWxrKGxydXZlYywgc2VxKTtcbjQyMzQ6XHRcdFx0Z290byBkb25lO1xuNDIzNTpcdFx0fVxuNDIzNjpcdFxuNDIzNzpcdFx0d2FsayA9IHNldF9tbV93YWxrKE5VTEwsIHRydWUpO1xuNDIzODpcdFx0aWYgKCF3YWxrKSB7XG40MjM5Olx0XHRcdHN1Y2Nlc3MgPSBpdGVyYXRlX21tX2xpc3Rfbm93YWxrKGxydXZlYywgc2VxKTtcbjQyNDA6XHRcdFx0Z290byBkb25lO1xuNDI0MTpcdFx0fVxuNDI0MjpcdFxuNDI0MzpcdFx0d2Fsay1cdTAwM2VscnV2ZWMgPSBscnV2ZWM7XG40MjQ0Olx0XHR3YWxrLVx1MDAzZXNlcSA9IHNlcTtcbjQyNDU6XHRcdHdhbGstXHUwMDNlc3dhcHBpbmVzcyA9IHN3YXBwaW5lc3M7XG40MjQ2Olx0XHR3YWxrLVx1MDAzZWZvcmNlX3NjYW4gPSBmb3JjZV9zY2FuO1xuNDI0NzpcdFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNSAxMzowNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxOTUwNwoJCQkJCQkJb3V0cHV0OiAzMgoJCQkJCQkJdGhvdWdodHM6IDE0OTMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHlzaXMgb2YgTXVsdGktR2VuIExSVSBQYXRjaCBpbiBNZW1vcnkgTWFuYWdlbWVudCoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdGhhdCB0aGlzIHBhdGNoIGluIGBtbS92bXNjYW4uY2AsIHJlbGF0ZWQgdG8gdGhlIE11bHRpLUdlbiBMUlUgc3Vic3lzdGVtLCBpcyBpbnRlcmVzdGluZy4gSXQgc2VlbXMgdG8gY29ycmVjdCBhIHN1YnRsZSBsb2dpYyBlcnJvciB3aXRoaW4gdGhlIGBydW5fYWdpbmdgIGZ1bmN0aW9uIGFuZCBob3cgaXQgaW50ZXJhY3RzIHdpdGggdGhlIGBzZXFgIHBhcmFtZXRlciBwcm92aWRlZCBieSB1c2Vyc3BhY2UuIFNwZWNpZmljYWxseSwgdGhlIHBhdGNoIGFkZHJlc3NlcyBhIHNjZW5hcmlvIHdoZXJlIHRoZSBrZXJuZWwgd291bGQgYXR0ZW1wdCB0byBpbmNyZW1lbnQgYG1heF9zZXFgIGV2ZW4gd2hlbiB0aGUgdGFyZ2V0IGBzZXFgIHdhcyBhbHJlYWR5IGxlc3MgdGhhbiB0aGUgY3VycmVudCBgbWF4X3NlcWAuIFRoaXMgaW5kaWNhdGVkIHRoYXQgdXNlcnNwYWNlIHdhcyB0cnlpbmcgdG8gYWdlIHRvIGEgcG9pbnQgKmJlaGluZCogd2hlcmUgdGhlIGFnaW5nIGhhZCBhbHJlYWR5IG9jY3VycmVkLCB3aGljaCBpcyBpbGxvZ2ljYWwuIFRoZSBvcmlnaW5hbCBjb2RlJiMzOTtzIGluY3JlbWVudCBsb2dpYyBhcHBlYXJlZCBmbGF3ZWQgaW4gdGhpcyBjb25kaXRpb24uCgpMb29raW5nIGF0IHRoZSBjb2RlLCBpdCBsb29rcyBsaWtlOiBpbiBgcnVuX2FnaW5nYCwgYG1heF9zZXFgIGlzIGRlZmluZWQuIFRoZSB1c2VyIHByb3ZpZGVzIGBzZXFgLiBJZiBgc2VxICZsdDsgbWF4X3NlcWAgdGhlbiB0aGUgdXNlciBpcyBhc2tpbmcgdG8gY3JlYXRlIGdlbmVyYXRpb24gdXAgdG8gYHNlcWAsIGJ1dCBgbWF4X3NlcWAgaXMgYWxyZWFkeSBncmVhdGVyIHRoYW4gYHNlcWAhIFRoZSBwYXRjaCBub3cgcHJldmVudHMgdGhlIGlsbG9naWNhbCBpbmNyZW1lbnQgb2YgYG1heF9zZXFgIGluIHRoYXQgY2FzZSwgd2hpY2ggc2ltcGxpZmllcyB0aGluZ3MuIEluIGBydW5fZXZpY3Rpb25gLCBpZiBgc2VxICZsdDsgZXZpY3RhYmxlX21pbl9zZXFgIGl0IHJldHVybnMgMC4gSWYgYHNlcSAmZ3Q7IG1heF9zZXFgIGl0IHJldHVybnMgYC1FSU5WQUxgLiBJdCBjYWxscyBgdHJ5X3RvX2luY19tYXhfc2VxKGxydXZlYywgbWF4X3NlcSwgc3dhcHBpbmVzcywgZm9yY2Vfc2NhbilgIHdoZW4gdGhlIGxvZ2ljIGlzIGNoYW5nZWQuCgpOb3csIGFzIGFuIGV4cGVydCwgSSYjMzk7bSBldmFsdWF0aW5nIHdoZXRoZXIgdGhpcyBjaGFuZ2Ugd2FycmFudHMgZnVydGhlciBpbnZlc3RpZ2F0aW9uIG9yIGZ1enppbmcuIFRoZSBrZXkgY3JpdGVyaWEsIGJhc2VkIG9uIHRoZSBwcm92aWRlZCBpbnN0cnVjdGlvbnMsIHJldm9sdmVzIGFyb3VuZCByZWFjaGFiaWxpdHkgYW5kIHRoZSBuYXR1cmUgb2YgdGhlIG1vZGlmaWNhdGlvbnMuCgpGaXJzdCwgKipyZWFjaGFiaWxpdHkqKiBpcyBrZXkuIFRoZSBjb2RlIHJlc2lkZXMgaW4gYC9zeXMva2VybmVsL2RlYnVnL2xydV9nZW5gIGEgZGVidWdmcyBmaWxlLCB3aGljaCBtZWFucyB0aGF0IGl0IGNhbiBiZSBleGVjdXRlZCBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMuIFRoaXMgaXMgZ29vZC4gSXQmIzM5O3MgbWVtb3J5IG1hbmFnZW1lbnQgY29kZS4gQW55b25lIGNhbiBhY2Nlc3MgdGhpcy4gU28gdGhhdCBtZWFucyBpdCBjYW4gYmUgcmVhY2hlZCEKClNlY29uZCwgSSBuZWVkIHRvIGV2YWx1YXRlICp3aGVuIHRvIHJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UqLgotICAgVGhpcyBpc24mIzM5O3Qgbm9uLWtlcm5lbCBvciBub24tZXhlY3V0YWJsZSBjaGFuZ2VzLCBpdCYjMzk7cyBjb2RlIGluIGBtbS92bXNjYW4uY2AuCi0gICBUaGlzIGlzIG5vdCBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUsIGFzIGl0IGlzIG1lbW9yeSBtYW5hZ2VtZW50IGNvZGUuCi0gICBUaGlzIGlzbiYjMzk7dCBhbiB1bnJlYWNoYWJsZSBleGVjdXRpb24gcGF0aCwgYXMgaXQgY2FuIGJlIHJlYWNoZWQgdmlhIGRlYnVnZnMgYC9zeXMva2VybmVsL2RlYnVnL2xydV9nZW5gLgoKVGhpcmQsIEkgbmVlZCB0byBldmFsdWF0ZSAqd2hlbiB0byByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUqLgotICAgVGhpcyBpcyBhICoqY29yZSBzdWJzeXN0ZW0qKiBjaGFuZ2UgKG1lbW9yeSBtYW5hZ2VtZW50LCBpbiBgbW0vYCkuCi0gICBUaGlzIGNvbnN0aXR1dGVzIGEgcmVmYWN0b3Jpbmcgb2YgdGhlIGFsZ29yaXRobSBmbG93LCBzcGVjaWZpY2FsbHkgaW4gaG93IHRoZSAmIzM0O3NlcSYjMzQ7IHZhbHVlIGludGVyYWN0cyB3aXRoIGFnaW5nIG9wZXJhdGlvbnMuIFRoaXMgbWVhbnMgaXQgaXMgd29ydGggZnV6emluZyEKClRoaXMgYWxzbyBicmluZ3MgaW4gdGhlIHF1ZXN0aW9uIG9mIHN5emthbGxlci4KCkNhbiBzeXprYWxsZXIgZnV6eiBkZWJ1Z2ZzIGZpbGVzIG9yIHRoaXMgaW50ZXJmYWNlPyAqKlllcyEqKiBzeXprYWxsZXIgb3BlbnMgZmlsZXMgaW4gYC9zeXMva2VybmVsL2RlYnVnLy4uLmAgKHN5emthbGxlciBoYXMgYHN5el9vcGVuX2RldmAsIGBvcGVuYXRgLCBldGMuIGFuZCBjYW4gd3JpdGUgdG8gZGVidWdmcyBmaWxlcyBpZiByb290KS4KQW5kIGV2ZW4gaWYgc3l6a2FsbGVyIGRvZXNuJiMzOTt0IGhhdmUgYW4gZXhwbGljaXQgdGVtcGxhdGUgZm9yIGBscnVfZ2VuYCwgc3l6a2FsbGVyIGZ1enplcyBmaWxlIHN5c3RlbXMgYW5kIGRlYnVnZnMgcGF0aHMsIG9yIHN5emthbGxlciBjYW4gdGFyZ2V0IGl0LgoKRmluYWxseSwgdGhlIGNvbmZpZyBvcHRpb25zOiBgQ09ORklHX0xSVV9HRU5gIGlzIG9idmlvdXNseSByZXF1aXJlZCAoTXVsdGktR2VuIExSVSksIGFuZCBjcml0aWNhbGx5LCBgQ09ORklHX0RFQlVHX0ZTYCBpcyAqYWxzbyogYSByZXF1aXJlbWVudCBzaW5jZSB0aGUgZGVidWdmcyBmaWxlIGAvc3lzL2tlcm5lbC9kZWJ1Zy9scnVfZ2VuYCBpcyBjcmVhdGVkIGJ5IGBkZWJ1Z2ZzX2NyZWF0ZV9maWxlX2F1eF9udW1gLiBUaGlzIGlzIGluIGBpbml0X2xydV9nZW5gLgoKQW5kIGZpbmFsbHksIGBydW5fY21kYCBkb2VzICpub3QqIHJlcXVpcmUgYENPTkZJR19NRU1DR2AuIEluIGBtbS92bXNjYW4uY2AsIGxpbmUgNjA5MSBoYXMgYCNlbmRpZiAvKiBDT05GSUdfTUVNQ0cgKi9gIHdoaWNoIG1lYW5zIHRoZSBmdW5jdGlvbiBpcyAqbm90KiBpbnNpZGUgdGhlIGAjaWZkZWYgQ09ORklHX01FTUNHYCBibG9jaywgc28gaXQgaXMgaW5kZXBlbmRlbnQuCgpCYXNlZCBvbiB0aGlzIGFuYWx5c2lzLCBJJiMzOTttIGNvbmZpZGVudCB0aGF0IHRoaXMgcGF0Y2ggaW4gdGhlIE11bHRpLUdlbiBMUlUgc3Vic3lzdGVtIHdhcnJhbnRzIGZ1cnRoZXIgaW52ZXN0aWdhdGlvbiBhbmQgZnV6emluZywgZ2l2ZW4gdGhlIHBvdGVudGlhbCBmb3Igc3VidGxlIG1lbW9yeSBtYW5hZ2VtZW50IGlzc3VlcyBhbmQgaXRzIGFjY2Vzc2liaWxpdHkgdmlhIGRlYnVnZnMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE1IDEzOjA1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0OyNpZmRlZiBDT05GSUdfTUVNQ0cmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS92bXNjYW4uYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS92bXNjYW4uYz0yMjM9c3RhdGljIGludCBzY19zd2FwcGluZXNzKHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjLCBzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpXG4tLVxubW0vdm1zY2FuLmMtMjI5LVxubW0vdm1zY2FuLmM6MjMwOiNpZmRlZiBDT05GSUdfTUVNQ0dcbm1tL3Ztc2Nhbi5jLTIzMS1cbi0tXG5tbS92bXNjYW4uYz0yODI0PXN0YXRpYyBzdHJ1Y3QgbHJ1dmVjICpnZXRfbHJ1dmVjKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgaW50IG5pZClcbi0tXG5tbS92bXNjYW4uYy0yODI3LVxubW0vdm1zY2FuLmM6MjgyODojaWZkZWYgQ09ORklHX01FTUNHXG5tbS92bXNjYW4uYy0yODI5LVx0aWYgKG1lbWNnKSB7XG4tLVxubW0vdm1zY2FuLmM9Mjk4Mj1zdGF0aWMgc3RydWN0IGxydV9nZW5fbW1fbGlzdCAqZ2V0X21tX2xpc3Qoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKVxuLS1cbm1tL3Ztc2Nhbi5jLTI5ODgtXG5tbS92bXNjYW4uYzoyOTg5OiNpZmRlZiBDT05GSUdfTUVNQ0dcbm1tL3Ztc2Nhbi5jLTI5OTAtXHRpZiAobWVtY2cpXG4tLVxubW0vdm1zY2FuLmM9MzAyMj12b2lkIGxydV9nZW5fYWRkX21tKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tKVxuLS1cbm1tL3Ztc2Nhbi5jLTMwMjgtXHRWTV9XQVJOX09OX09OQ0UoIWxpc3RfZW1wdHkoXHUwMDI2bW0tXHUwMDNlbHJ1X2dlbi5saXN0KSk7XG5tbS92bXNjYW4uYzozMDI5OiNpZmRlZiBDT05GSUdfTUVNQ0dcbm1tL3Ztc2Nhbi5jLTMwMzAtXHRWTV9XQVJOX09OX09OQ0UobW0tXHUwMDNlbHJ1X2dlbi5tZW1jZyk7XG4tLVxubW0vdm1zY2FuLmM9MzA0OT12b2lkIGxydV9nZW5fZGVsX21tKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tKVxuLS1cbm1tL3Ztc2Nhbi5jLTMwNTctXG5tbS92bXNjYW4uYzozMDU4OiNpZmRlZiBDT05GSUdfTUVNQ0dcbm1tL3Ztc2Nhbi5jLTMwNTktXHRtZW1jZyA9IG1tLVx1MDAzZWxydV9nZW4ubWVtY2c7XG4tLVxubW0vdm1zY2FuLmMtMzA4MS1cbm1tL3Ztc2Nhbi5jOjMwODI6I2lmZGVmIENPTkZJR19NRU1DR1xubW0vdm1zY2FuLmMtMzA4My1cdG1lbV9jZ3JvdXBfcHV0KG1tLVx1MDAzZWxydV9nZW4ubWVtY2cpO1xuLS1cbm1tL3Ztc2Nhbi5jLTMwODctXG5tbS92bXNjYW4uYzozMDg4OiNpZmRlZiBDT05GSUdfTUVNQ0dcbm1tL3Ztc2Nhbi5jLTMwODktdm9pZCBscnVfZ2VuX21pZ3JhdGVfbW0oc3RydWN0IG1tX3N0cnVjdCAqbW0pXG4tLVxubW0vdm1zY2FuLmM9NDUxNj1zdGF0aWMgdm9pZCBscnVfZ2VuX3JvdGF0ZV9tZW1jZyhzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIGludCBvcClcbi0tXG5tbS92bXNjYW4uYy00NTU5LVxubW0vdm1zY2FuLmM6NDU2MDojaWZkZWYgQ09ORklHX01FTUNHXG5tbS92bXNjYW4uYy00NTYxLVxuLS1cbm1tL3Ztc2Nhbi5jPTU3NjI9c3RhdGljIGludCBscnVfZ2VuX3NlcV9zaG93KHN0cnVjdCBzZXFfZmlsZSAqbSwgdm9pZCAqdilcbi0tXG5tbS92bXNjYW4uYy01Nzc1LVxubW0vdm1zY2FuLmM6NTc3NjojaWZkZWYgQ09ORklHX01FTUNHXG5tbS92bXNjYW4uYy01Nzc3LVx0XHRpZiAobWVtY2cpXG4tLVxubW0vdm1zY2FuLmM9NjAzMT12b2lkIGxydV9nZW5faW5pdF9scnV2ZWMoc3RydWN0IGxydXZlYyAqbHJ1dmVjKVxuLS1cbm1tL3Ztc2Nhbi5jLTYwNTAtXG5tbS92bXNjYW4uYzo2MDUxOiNpZmRlZiBDT05GSUdfTUVNQ0dcbm1tL3Ztc2Nhbi5jLTYwNTItXG4tLVxubW0vdm1zY2FuLmM9NjkwOT11bnNpZ25lZCBsb25nIHRyeV90b19mcmVlX3BhZ2VzKHN0cnVjdCB6b25lbGlzdCAqem9uZWxpc3QsIGludCBvcmRlcixcbi0tXG5tbS92bXNjYW4uYy02OTUxLVxubW0vdm1zY2FuLmM6Njk1MjojaWZkZWYgQ09ORklHX01FTUNHXG5tbS92bXNjYW4uYy02OTUzLVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNSAxMzowNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMjg5MAoJCQkJCQkJb3V0cHV0OiAzNQoJCQkJCQkJdGhvdWdodHM6IDQyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMgY29kZS4KCioqSW52ZXN0aWdhdGluZyBhIENvbmRpdGlvbmFsIENvbXBpbGF0aW9uIEJsb2NrKioKCkFscmlnaHQsIEkgc2VlIHRoaXMgYCNlbmRpZiAvKiBDT05GSUdfTUVNQ0cgKi9gIG9uIGxpbmUgNjA5MS4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMsICYjMzQ7T2theSwgd2hhdCYjMzk7cyAqdGhpcyogcmVmZXJyaW5nIHRvPyYjMzQ7IEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBzY29wZSBvZiB0aGlzIGNvbmRpdGlvbmFsIGNvbXBpbGF0aW9uLiBJdCYjMzk7cyBhIGtleSBwaWVjZSBvZiB0aGUgcHV6emxlIGJlY2F1c2UgaXQgbWVhbnMgY29kZSB3aXRoaW4gdGhhdCBibG9jayBpcyBwb3RlbnRpYWxseSBhY3RpdmUgb3IgaW5hY3RpdmUgZGVwZW5kaW5nIG9uIGEgY29tcGlsZS10aW1lIGNvbmZpZ3VyYXRpb24gc2V0dGluZyDigJMgc3BlY2lmaWNhbGx5LCB3aGV0aGVyIGBDT05GSUdfTUVNQ0dgIGlzIGRlZmluZWQuIFRvIGdyYXNwIHdoYXQmIzM5O3MgZ29pbmcgb24sIEkgbmVlZCB0aGUgY29udGV4dC4gU28sIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQgdGhpcyBibG9jayBpcyBpbnRlbmRlZCB0byBhY2hpZXZlLiBUaGVyZWZvcmUsIGxldCYjMzk7cyBxdWlja2x5IGV4YW1pbmUgdGhlIGxpbmVzIGZyb20gNjA0OCB0byA2MDk1LiBUaGF0IHNob3VsZCBiZSBlbm91Z2ggdG8gcmV2ZWFsIHdoYXQmIzM5O3MgYmVpbmcgY29uZGl0aW9uYWxseSBpbmNsdWRlZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTUgMTM6MDY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDttbS92bXNjYW4uYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDYwNDgsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNDgKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7NjA0ODpcdFx0XHRtbV9zdGF0ZS1cdTAwM2VzZXEgPSBNSU5fTlJfR0VOUztcbjYwNDk6XHR9XG42MDUwOlx0XG42MDUxOlx0I2lmZGVmIENPTkZJR19NRU1DR1xuNjA1MjpcdFxuNjA1MzpcdHZvaWQgbHJ1X2dlbl9pbml0X21lbWNnKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZylcbjYwNTQ6XHR7XG42MDU1Olx0XHRzdHJ1Y3QgbHJ1X2dlbl9tbV9saXN0ICptbV9saXN0ID0gZ2V0X21tX2xpc3QobWVtY2cpO1xuNjA1NjpcdFxuNjA1NzpcdFx0aWYgKCFtbV9saXN0KVxuNjA1ODpcdFx0XHRyZXR1cm47XG42MDU5Olx0XG42MDYwOlx0XHRJTklUX0xJU1RfSEVBRChcdTAwMjZtbV9saXN0LVx1MDAzZWZpZm8pO1xuNjA2MTpcdFx0c3Bpbl9sb2NrX2luaXQoXHUwMDI2bW1fbGlzdC1cdTAwM2Vsb2NrKTtcbjYwNjI6XHR9XG42MDYzOlx0XG42MDY0Olx0dm9pZCBscnVfZ2VuX2V4aXRfbWVtY2coc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKVxuNjA2NTpcdHtcbjYwNjY6XHRcdGludCBpO1xuNjA2NzpcdFx0aW50IG5pZDtcbjYwNjg6XHRcdHN0cnVjdCBscnVfZ2VuX21tX2xpc3QgKm1tX2xpc3QgPSBnZXRfbW1fbGlzdChtZW1jZyk7XG42MDY5Olx0XG42MDcwOlx0XHRWTV9XQVJOX09OX09OQ0UobW1fbGlzdCBcdTAwMjZcdTAwMjYgIWxpc3RfZW1wdHkoXHUwMDI2bW1fbGlzdC1cdTAwM2VmaWZvKSk7XG42MDcxOlx0XG42MDcyOlx0XHRmb3JfZWFjaF9ub2RlKG5pZCkge1xuNjA3MzpcdFx0XHRzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMgPSBnZXRfbHJ1dmVjKG1lbWNnLCBuaWQpO1xuNjA3NDpcdFx0XHRzdHJ1Y3QgbHJ1X2dlbl9tbV9zdGF0ZSAqbW1fc3RhdGUgPSBnZXRfbW1fc3RhdGUobHJ1dmVjKTtcbjYwNzU6XHRcbjYwNzY6XHRcdFx0Vk1fV0FSTl9PTl9PTkNFKG1lbWNocl9pbnYobHJ1dmVjLVx1MDAzZWxydWdlbi5ucl9wYWdlcywgMCxcbjYwNzc6XHRcdFx0XHRcdFx0ICAgc2l6ZW9mKGxydXZlYy1cdTAwM2VscnVnZW4ubnJfcGFnZXMpKSk7XG42MDc4Olx0XG42MDc5Olx0XHRcdGxydXZlYy1cdTAwM2VscnVnZW4ubGlzdC5uZXh0ID0gTElTVF9QT0lTT04xO1xuNjA4MDpcdFxuNjA4MTpcdFx0XHRpZiAoIW1tX3N0YXRlKVxuNjA4MjpcdFx0XHRcdGNvbnRpbnVlO1xuNjA4MzpcdFxuNjA4NDpcdFx0XHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBOUl9CTE9PTV9GSUxURVJTOyBpJiM0MzsmIzQzOykge1xuNjA4NTpcdFx0XHRcdGJpdG1hcF9mcmVlKG1tX3N0YXRlLVx1MDAzZWZpbHRlcnNbaV0pO1xuNjA4NjpcdFx0XHRcdG1tX3N0YXRlLVx1MDAzZWZpbHRlcnNbaV0gPSBOVUxMO1xuNjA4NzpcdFx0XHR9XG42MDg4Olx0XHR9XG42MDg5Olx0fVxuNjA5MDpcdFxuNjA5MTpcdCNlbmRpZiAvKiBDT05GSUdfTUVNQ0cgKi9cbjYwOTI6XHRcbjYwOTM6XHRzdGF0aWMgaW50IF9faW5pdCBpbml0X2xydV9nZW4odm9pZClcbjYwOTQ6XHR7XG42MDk1Olx0XHRCVUlMRF9CVUdfT04oTUlOX05SX0dFTlMgJiM0MzsgMSBcdTAwM2U9IE1BWF9OUl9HRU5TKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTUgMTM6MDY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjM4NzYKCQkJCQkJCW91dHB1dDogMjkKCQkJCQkJCXRob3VnaHRzOiA2NgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIENvZGUmIzM5O3MgQ29uZGl0aW9uYWwgQ29tcGlsYXRpb24qKgoKQWxyaWdodCwgc28gYENPTkZJR19NRU1DR2AgZmluaXNoZWQgdXAgYXJvdW5kIGxpbmUgNjA5MSwgYnV0IHRoaXMgYHJ1bl9hZ2luZ2AgZnVuY3Rpb24sIGl0JiMzOTtzIHNpdHRpbmcgYXQgcm91Z2hseSBsaW5lIDU4MjcuIEkgbmVlZCB0byBmaWd1cmUgb3V0IHRoZSBjb25kaXRpb25hbCBjb21waWxhdGlvbiB0aGF0IGNvbnRyb2xzIGl0LiBNeSBndXQgdGVsbHMgbWUgaXQmIzM5O3MgbGlrZWx5IHdyYXBwZWQgaW4gYW4gYCNpZmRlZmAgb3IgYCNpZmAgc3RhdGVtZW50LiBObyBuZWVkIHRvIGdvIGxpbmUgYnkgbGluZSBoZXJlLCBsZXQmIzM5O3MganVzdCBtYWtlIHVzZSBvZiB0aGUgZWRpdG9yIGFuZCBxdWlja2x5IHNlYXJjaCBiYWNrd2FyZHMgZnJvbSBsaW5lIDU4MjcgZm9yIHRoZSBzdGFydCBvZiB0aGUgcmVsZXZhbnQgYCNpZmAgYmxvY2sgYW5kIHNlZSB3aGF0JiMzOTtzIHdoYXQuIFRoaXMgc2hvdWxkbiYjMzk7dCB0YWtlIGxvbmcuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE1IDEzOjA2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O14jaWYmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS92bXNjYW4uYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS92bXNjYW4uYz03Nj1zdHJ1Y3Qgc2Nhbl9jb250cm9sIHtcbi0tXG5tbS92bXNjYW4uYy0xODMtXG5tbS92bXNjYW4uYzoxODQ6I2lmZGVmIEFSQ0hfSEFTX1BSRUZFVENIV1xubW0vdm1zY2FuLmMtMTg1LXN0YXRpYyBpbmxpbmUgdm9pZCBwcmVmZXRjaHdfcHJldl9scnVfZm9saW8oc3RydWN0IGZvbGlvICpmb2xpbyxcbi0tXG5tbS92bXNjYW4uYz0yMjM9c3RhdGljIGludCBzY19zd2FwcGluZXNzKHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjLCBzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpXG4tLVxubW0vdm1zY2FuLmMtMjI5LVxubW0vdm1zY2FuLmM6MjMwOiNpZmRlZiBDT05GSUdfTUVNQ0dcbm1tL3Ztc2Nhbi5jLTIzMS1cbi0tXG5tbS92bXNjYW4uYz0yNjA9c3RhdGljIGJvb2wgd3JpdGViYWNrX3Rocm90dGxpbmdfc2FuZShzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYylcbi0tXG5tbS92bXNjYW4uYy0yNjMtXHRcdHJldHVybiB0cnVlO1xubW0vdm1zY2FuLmM6MjY0OiNpZmRlZiBDT05GSUdfQ0dST1VQX1dSSVRFQkFDS1xubW0vdm1zY2FuLmMtMjY1LVx0aWYgKGNncm91cF9zdWJzeXNfb25fZGZsKG1lbW9yeV9jZ3JwX3N1YnN5cykpXG4tLVxubW0vdm1zY2FuLmM9MzQ1PXN0YXRpYyBib29sIGNhbl9kZW1vdGUoaW50IG5pZCwgc3RydWN0IHNjYW5fY29udHJvbCAqc2MsXG4tLVxubW0vdm1zY2FuLmMtMzY0LVxubW0vdm1zY2FuLmM6MzY1OiNpZmRlZiBDT05GSUdfU1dBUFxubW0vdm1zY2FuLmMtMzY2LXN0YXRpYyBpbmxpbmUgYm9vbCByZWNsYWltYWJsZV9hbm9uX2lzX2xvdyhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csXG4tLVxubW0vdm1zY2FuLmM9ODk5PWVudW0gZm9saW9fcmVmZXJlbmNlcyB7XG4tLVxubW0vdm1zY2FuLmMtOTA0LVxubW0vdm1zY2FuLmM6OTA1OiNpZmRlZiBDT05GSUdfTFJVX0dFTlxubW0vdm1zY2FuLmMtOTA2LS8qXG4tLVxubW0vdm1zY2FuLmM9MTEzMz1zdGF0aWMgdW5zaWduZWQgaW50IHNocmlua19mb2xpb19saXN0KHN0cnVjdCBsaXN0X2hlYWQgKmZvbGlvX2xpc3QsXG4tLVxubW0vdm1zY2FuLmMtMTM2Ny1cdFx0XHRcdFx0Z290byBhY3RpdmF0ZV9sb2NrZWQ7XG5tbS92bXNjYW4uYzoxMzY4OiNpZmRlZiBDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0Vcbm1tL3Ztc2Nhbi5jLTEzNjktXHRcdFx0XHRpZiAobnJfcGFnZXMgXHUwMDNlPSBIUEFHRV9QTURfTlIpIHtcbi0tXG5tbS92bXNjYW4uYz0yNzYwPXN0YXRpYyBib29sIGNhbl9hZ2VfYW5vbl9wYWdlcyhzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsXG4tLVxubW0vdm1zY2FuLmMtMjc3MS1cbm1tL3Ztc2Nhbi5jOjI3NzI6I2lmZGVmIENPTkZJR19MUlVfR0VOXG5tbS92bXNjYW4uYy0yNzczLVxubW0vdm1zY2FuLmM9Mjc3ND1ERUZJTkVfU1RBVElDX0tFWV9GQUxTRShscnVfc3dpdGNoKTtcbm1tL3Ztc2Nhbi5jOjI3NzU6I2lmZGVmIENPTkZJR19MUlVfR0VOX0VOQUJMRURcbm1tL3Ztc2Nhbi5jLTI3NzYtREVGSU5FX1NUQVRJQ19LRVlfQVJSQVlfVFJVRShscnVfZ2VuX2NhcHMsIE5SX0xSVV9HRU5fQ0FQUyk7XG4tLVxubW0vdm1zY2FuLmM9MjgyND1zdGF0aWMgc3RydWN0IGxydXZlYyAqZ2V0X2xydXZlYyhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIGludCBuaWQpXG4tLVxubW0vdm1zY2FuLmMtMjgyNy1cbm1tL3Ztc2Nhbi5jOjI4Mjg6I2lmZGVmIENPTkZJR19NRU1DR1xubW0vdm1zY2FuLmMtMjgyOS1cdGlmIChtZW1jZykge1xuLS1cbm1tL3Ztc2Nhbi5jPTI5NjA9c3RhdGljIHZvaWQgcmVzZXRfYmxvb21fZmlsdGVyKHN0cnVjdCBscnVfZ2VuX21tX3N0YXRlICptbV9zdGF0ZSwgdW5zaWduZWQgbG9uZyBzZXEpXG4tLVxubW0vdm1zY2FuLmMtMjk3OS1cbm1tL3Ztc2Nhbi5jOjI5ODA6I2lmZGVmIENPTkZJR19MUlVfR0VOX1dBTEtTX01NVVxubW0vdm1zY2FuLmMtMjk4MS1cbm1tL3Ztc2Nhbi5jPTI5ODI9c3RhdGljIHN0cnVjdCBscnVfZ2VuX21tX2xpc3QgKmdldF9tbV9saXN0KHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZylcbi0tXG5tbS92bXNjYW4uYy0yOTg4LVxubW0vdm1zY2FuLmM6Mjk4OTojaWZkZWYgQ09ORklHX01FTUNHXG5tbS92bXNjYW4uYy0yOTkwLVx0aWYgKG1lbWNnKVxuLS1cbm1tL3Ztc2Nhbi5jPTMwMjI9dm9pZCBscnVfZ2VuX2FkZF9tbShzdHJ1Y3QgbW1fc3RydWN0ICptbSlcbi0tXG5tbS92bXNjYW4uYy0zMDI4LVx0Vk1fV0FSTl9PTl9PTkNFKCFsaXN0X2VtcHR5KFx1MDAyNm1tLVx1MDAzZWxydV9nZW4ubGlzdCkpO1xubW0vdm1zY2FuLmM6MzAyOTojaWZkZWYgQ09ORklHX01FTUNHXG5tbS92bXNjYW4uYy0zMDMwLVx0Vk1fV0FSTl9PTl9PTkNFKG1tLVx1MDAzZWxydV9nZW4ubWVtY2cpO1xuLS1cbm1tL3Ztc2Nhbi5jPTMwNDk9dm9pZCBscnVfZ2VuX2RlbF9tbShzdHJ1Y3QgbW1fc3RydWN0ICptbSlcbi0tXG5tbS92bXNjYW4uYy0zMDU3LVxubW0vdm1zY2FuLmM6MzA1ODojaWZkZWYgQ09ORklHX01FTUNHXG5tbS92bXNjYW4uYy0zMDU5LVx0bWVtY2cgPSBtbS1cdTAwM2VscnVfZ2VuLm1lbWNnO1xuLS1cbm1tL3Ztc2Nhbi5jLTMwODEtXG5tbS92bXNjYW4uYzozMDgyOiNpZmRlZiBDT05GSUdfTUVNQ0dcbm1tL3Ztc2Nhbi5jLTMwODMtXHRtZW1fY2dyb3VwX3B1dChtbS1cdTAwM2VscnVfZ2VuLm1lbWNnKTtcbi0tXG5tbS92bXNjYW4uYy0zMDg3LVxubW0vdm1zY2FuLmM6MzA4ODojaWZkZWYgQ09ORklHX01FTUNHXG5tbS92bXNjYW4uYy0zMDg5LXZvaWQgbHJ1X2dlbl9taWdyYXRlX21tKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tKVxuLS1cbm1tL3Ztc2Nhbi5jPTQ1MTY9c3RhdGljIHZvaWQgbHJ1X2dlbl9yb3RhdGVfbWVtY2coc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBpbnQgb3ApXG4tLVxubW0vdm1zY2FuLmMtNDU1OS1cbm1tL3Ztc2Nhbi5jOjQ1NjA6I2lmZGVmIENPTkZJR19NRU1DR1xubW0vdm1zY2FuLmMtNDU2MS1cbi0tXG5tbS92bXNjYW4uYz01NzYyPXN0YXRpYyBpbnQgbHJ1X2dlbl9zZXFfc2hvdyhzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHZvaWQgKnYpXG4tLVxubW0vdm1zY2FuLmMtNTc3NS1cbm1tL3Ztc2Nhbi5jOjU3NzY6I2lmZGVmIENPTkZJR19NRU1DR1xubW0vdm1zY2FuLmMtNTc3Ny1cdFx0aWYgKG1lbWNnKVxuLS1cbm1tL3Ztc2Nhbi5jPTYwMzE9dm9pZCBscnVfZ2VuX2luaXRfbHJ1dmVjKHN0cnVjdCBscnV2ZWMgKmxydXZlYylcbi0tXG5tbS92bXNjYW4uYy02MDUwLVxubW0vdm1zY2FuLmM6NjA1MTojaWZkZWYgQ09ORklHX01FTUNHXG5tbS92bXNjYW4uYy02MDUyLVxuLS1cbm1tL3Ztc2Nhbi5jPTY5MDk9dW5zaWduZWQgbG9uZyB0cnlfdG9fZnJlZV9wYWdlcyhzdHJ1Y3Qgem9uZWxpc3QgKnpvbmVsaXN0LCBpbnQgb3JkZXIsXG4tLVxubW0vdm1zY2FuLmMtNjk1MS1cbm1tL3Ztc2Nhbi5jOjY5NTI6I2lmZGVmIENPTkZJR19NRU1DR1xubW0vdm1zY2FuLmMtNjk1My1cbi0tXG5tbS92bXNjYW4uYz03NzM3PWJvb2wga3N3YXBkX3Rlc3RfaG9wZWxlc3MocGdfZGF0YV90ICpwZ2RhdClcbi0tXG5tbS92bXNjYW4uYy03NzQxLVxubW0vdm1zY2FuLmM6Nzc0MjojaWZkZWYgQ09ORklHX0hJQkVSTkFUSU9OXG5tbS92bXNjYW4uYy03NzQzLS8qXG4tLVxubW0vdm1zY2FuLmM9NzgyMj1zdGF0aWMgY29uc3Qgc3RydWN0IGN0bF90YWJsZSB2bXNjYW5fc3lzY3RsX3RhYmxlW10gPSB7XG4tLVxubW0vdm1zY2FuLmMtNzgzMS1cdH0sXG5tbS92bXNjYW4uYzo3ODMyOiNpZmRlZiBDT05GSUdfTlVNQVxubW0vdm1zY2FuLmMtNzgzMy1cdHtcbi0tXG5tbS92bXNjYW4uYz03ODU0PW1vZHVsZV9pbml0KGtzd2FwZF9pbml0KVxubW0vdm1zY2FuLmMtNzg1NS1cbm1tL3Ztc2Nhbi5jOjc4NTY6I2lmZGVmIENPTkZJR19OVU1BXG5tbS92bXNjYW4uYy03ODU3LS8qXG4tLVxubW0vdm1zY2FuLmM9ODE5OT1FWFBPUlRfU1lNQk9MX0dQTChjaGVja19tb3ZlX3VuZXZpY3RhYmxlX2ZvbGlvcyk7XG5tbS92bXNjYW4uYy04MjAwLVxubW0vdm1zY2FuLmM6ODIwMTojaWYgZGVmaW5lZChDT05GSUdfU1lTRlMpIFx1MDAyNlx1MDAyNiBkZWZpbmVkKENPTkZJR19OVU1BKVxubW0vdm1zY2FuLmMtODIwMi1zdGF0aWMgc3NpemVfdCByZWNsYWltX3N0b3JlKHN0cnVjdCBkZXZpY2UgKmRldixcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTUgMTM6MDY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjYxMTQKCQkJCQkJCW91dHB1dDogMzIKCQkJCQkJCXRob3VnaHRzOiAxMjQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBMUlUgR2VuZXJhdGlvbiBDb25maWd1cmF0aW9uKioKCk9rYXksIHNvIEkmIzM5O20gZGl2aW5nIGludG8gdGhpcyBjb2RlIGFuZCBpbW1lZGlhdGVseSBzZWUgYSBjcnVjaWFsIGNvbmRpdGlvbmFsIGJsb2NrLiBMaW5lIDI3NzIga2lja3MgdGhpbmdzIG9mZiB3aXRoIGAjaWZkZWYgQ09ORklHX0xSVV9HRU5gLCB3aGljaCB0aGVuIHNwYW5zIGFsbCB0aGUgd2F5IHRvIGxpbmUgNjExMCwgZW5kaW5nIHdpdGggYCNlbHNlIC8qICFDT05GSUdfTFJVX0dFTiAqL2AuIFRoYXQmIzM5O3MgYSBodWdlIGNsdWUgdGhhdCBgQ09ORklHX0xSVV9HRU5gIGlzIGEgc2lnbmlmaWNhbnQgY29uZmlndXJhdGlvbiBvcHRpb24uIFRoZW4sIGxvb2tpbmcgaW5zaWRlIHRoaXMgYmxvY2ssIGxpbmUgNjEwMSBqdW1wcyBvdXQgYXQgbWU6IGBkZWJ1Z2ZzX2NyZWF0ZV9maWxlX2F1eF9udW0oJiMzNDtscnVfZ2VuJiMzNDssIC4uLilgLiBBaCwgc28gYExSVV9HRU5gIGlzIHRpZWQgdG8gZGVidWdmcyEgVGhhdCBwb2ludHMgdG8gdGhlIHVzZSBvZiBgREVCVUdfRlNgIGJlaW5nIGEgc2lnbmlmaWNhbnQgY29uZmlndXJhdGlvbiBhcyB3ZWxsLCBvciBhdCBsZWFzdCBob3cgdGhlIGRlYnVnZ2luZyBpbmZvcm1hdGlvbiBpcyBjb25maWd1cmVkLiBTbywgbXkgaW5pdGlhbCBoeXBvdGhlc2lzOiBgTFJVX0dFTmAgYW5kIGBERUJVR19GU2AgYXJlIHRoZSBrZXkgY29uZmlncyB0byB3YXRjaC4gV2FpdCBhIG1pbnV0ZeKApkkganVzdCB0aG91Z2h0IG9mIHNvbWV0aGluZywgd2hhdCBhYm91dCBgTFJVX0dFTl9FTkFCTEVEYD8gSSYjMzk7ZCBiZXR0ZXIgZG91YmxlIGNoZWNrIHdoYXQgYGxydV9nZW5fZW5hYmxlZCgpYCBkb2VzLCBqdXN0IHRvIGJlIHN1cmUuIEkmIzM5O20gZ29pbmcgdG8gZm9sbG93IHRoZSBsb2dpYyBhbmQgbG9vayBhdCB0aGUgaW1wbGVtZW50YXRpb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE1IDEzOjA2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2xydV9nZW5fZW5hYmxlZCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tL3Ztc2Nhbi5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL3Ztc2Nhbi5jPTM2Nj1zdGF0aWMgaW5saW5lIGJvb2wgcmVjbGFpbWFibGVfYW5vbl9pc19sb3coc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLFxuLS1cbm1tL3Ztc2Nhbi5jLTM4NS1cdCAqL1xubW0vdm1zY2FuLmM6Mzg2Olx0aWYgKGxydV9nZW5fZW5hYmxlZCgpKVxubW0vdm1zY2FuLmMtMzg3LVx0XHRyZXR1cm4gZmFsc2U7XG4tLVxubW0vdm1zY2FuLmM9OTQzPXN0YXRpYyBlbnVtIGZvbGlvX3JlZmVyZW5jZXMgZm9saW9fY2hlY2tfcmVmZXJlbmNlcyhzdHJ1Y3QgZm9saW8gKmZvbGlvLFxuLS1cbm1tL3Ztc2Nhbi5jLTk2Ny1cbm1tL3Ztc2Nhbi5jOjk2ODpcdGlmIChscnVfZ2VuX2VuYWJsZWQoKSBcdTAwMjZcdTAwMjYgIWxydV9nZW5fc3dpdGNoaW5nKCkpIHtcbm1tL3Ztc2Nhbi5jLTk2OS1cdFx0aWYgKCFyZWZlcmVuY2VkX3B0ZXMpXG4tLVxubW0vdm1zY2FuLmM9MjM2MD1zdGF0aWMgdm9pZCBwcmVwYXJlX3NjYW5fY29udHJvbChwZ19kYXRhX3QgKnBnZGF0LCBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYylcbi0tXG5tbS92bXNjYW4uYy0yMzY2LVxubW0vdm1zY2FuLmM6MjM2NzpcdGlmIChscnVfZ2VuX2VuYWJsZWQoKSBcdTAwMjZcdTAwMjYgIWxydV9nZW5fc3dpdGNoaW5nKCkpXG5tbS92bXNjYW4uYy0yMzY4LVx0XHRyZXR1cm47XG4tLVxubW0vdm1zY2FuLmM9NTUxNT1zdGF0aWMgdm9pZCBscnVfZ2VuX2NoYW5nZV9zdGF0ZShib29sIGVuYWJsZWQpXG4tLVxubW0vdm1zY2FuLmMtNTUyNS1cbm1tL3Ztc2Nhbi5jOjU1MjY6XHRpZiAoZW5hYmxlZCA9PSBscnVfZ2VuX2VuYWJsZWQoKSlcbm1tL3Ztc2Nhbi5jLTU1MjctXHRcdGdvdG8gdW5sb2NrO1xuLS1cbm1tL3Ztc2Nhbi5jPTU2MTM9c3RhdGljIHNzaXplX3QgZW5hYmxlZF9zdG9yZShzdHJ1Y3Qga29iamVjdCAqa29iaiwgc3RydWN0IGtvYmpfYXR0cmlidXRlICphdHRyLFxuLS1cbm1tL3Ztc2Nhbi5jLTU2MzktXG5tbS92bXNjYW4uYzo1NjQwOnN0YXRpYyBzdHJ1Y3Qga29ial9hdHRyaWJ1dGUgbHJ1X2dlbl9lbmFibGVkX2F0dHIgPSBfX0FUVFJfUlcoZW5hYmxlZCk7XG5tbS92bXNjYW4uYy01NjQxLVxubW0vdm1zY2FuLmM9NTY0Mj1zdGF0aWMgc3RydWN0IGF0dHJpYnV0ZSAqbHJ1X2dlbl9hdHRyc1tdID0ge1xubW0vdm1zY2FuLmMtNTY0My1cdFx1MDAyNmxydV9nZW5fbWluX3R0bF9hdHRyLmF0dHIsXG5tbS92bXNjYW4uYzo1NjQ0Olx0XHUwMDI2bHJ1X2dlbl9lbmFibGVkX2F0dHIuYXR0cixcbm1tL3Ztc2Nhbi5jLTU2NDUtXHROVUxMXG4tLVxubW0vdm1zY2FuLmM9NjAzMT12b2lkIGxydV9nZW5faW5pdF9scnV2ZWMoc3RydWN0IGxydXZlYyAqbHJ1dmVjKVxuLS1cbm1tL3Ztc2Nhbi5jLTYwMzgtXHRscnVnZW4tXHUwMDNlbWF4X3NlcSA9IE1JTl9OUl9HRU5TICYjNDM7IDE7XG5tbS92bXNjYW4uYzo2MDM5Olx0bHJ1Z2VuLVx1MDAzZWVuYWJsZWQgPSBscnVfZ2VuX2VuYWJsZWQoKTtcbm1tL3Ztc2Nhbi5jLTYwNDAtXG4tLVxubW0vdm1zY2FuLmM9NjEyOT1zdGF0aWMgdm9pZCBzaHJpbmtfbHJ1dmVjKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgc3RydWN0IHNjYW5fY29udHJvbCAqc2MpXG4tLVxubW0vdm1zY2FuLmMtNjEzOS1cbm1tL3Ztc2Nhbi5jOjYxNDA6XHRpZiAoKGxydV9nZW5fZW5hYmxlZCgpIHx8IGxydV9nZW5fc3dpdGNoaW5nKCkpIFx1MDAyNlx1MDAyNiAhcm9vdF9yZWNsYWltKHNjKSkge1xubW0vdm1zY2FuLmMtNjE0MS1cdFx0bHJ1X2dlbl9zaHJpbmtfbHJ1dmVjKGxydXZlYywgc2MpO1xuLS1cbm1tL3Ztc2Nhbi5jPTYzOTk9c3RhdGljIHZvaWQgc2hyaW5rX25vZGUocGdfZGF0YV90ICpwZ2RhdCwgc3RydWN0IHNjYW5fY29udHJvbCAqc2MpXG4tLVxubW0vdm1zY2FuLmMtNjQwNC1cbm1tL3Ztc2Nhbi5jOjY0MDU6XHRpZiAoKGxydV9nZW5fZW5hYmxlZCgpIHx8IGxydV9nZW5fc3dpdGNoaW5nKCkpIFx1MDAyNlx1MDAyNiByb290X3JlY2xhaW0oc2MpKSB7XG5tbS92bXNjYW4uYy02NDA2LVx0XHRtZW1zZXQoXHUwMDI2c2MtXHUwMDNlbnIsIDAsIHNpemVvZihzYy1cdTAwM2VucikpO1xuLS1cbm1tL3Ztc2Nhbi5jPTY2NTY9c3RhdGljIHZvaWQgc25hcHNob3RfcmVmYXVsdHMoc3RydWN0IG1lbV9jZ3JvdXAgKnRhcmdldF9tZW1jZywgcGdfZGF0YV90ICpwZ2RhdClcbi0tXG5tbS92bXNjYW4uYy02NjYwLVxubW0vdm1zY2FuLmM6NjY2MTpcdGlmIChscnVfZ2VuX2VuYWJsZWQoKSBcdTAwMjZcdTAwMjYgIWxydV9nZW5fc3dpdGNoaW5nKCkpXG5tbS92bXNjYW4uYy02NjYyLVx0XHRyZXR1cm47XG4tLVxubW0vdm1zY2FuLmM9NzAwNT1zdGF0aWMgdm9pZCBrc3dhcGRfYWdlX25vZGUoc3RydWN0IHBnbGlzdF9kYXRhICpwZ2RhdCwgc3RydWN0IHNjYW5fY29udHJvbCAqc2MpXG4tLVxubW0vdm1zY2FuLmMtNzAwOS1cbm1tL3Ztc2Nhbi5jOjcwMTA6XHRpZiAobHJ1X2dlbl9lbmFibGVkKCkgfHwgbHJ1X2dlbl9zd2l0Y2hpbmcoKSkge1xubW0vdm1zY2FuLmMtNzAxMS1cdFx0bHJ1X2dlbl9hZ2Vfbm9kZShwZ2RhdCwgc2MpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNSAxMzowNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNzY4NgoJCQkJCQkJb3V0cHV0OiAxNTkKCQkJCQkJCXRob3VnaHRzOiAxMzc5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5c2lzIG9mIE1HTFJVIFBhdGNoIEZ1enppbmcgUmVhZGluZXNzKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24gZm9yIGZ1enppbmcgcmVhZGluZXNzLiBGaXJzdCwgSSBub3RpY2VkIHRoYXQgYGxydV9nZW5fc2VxX3dyaXRlYCBkb2VzbiYjMzk7dCBldmVuIGJvdGhlciBjaGVja2luZyBgbHJ1X2dlbl9lbmFibGVkKClgLCB3aGljaCBpcyBhIGxpdHRsZSBvZGQsIGJ1dCBgTFJVX0dFTl9FTkFCTEVEYCBlbmFibGVzIE1HTFJVIGJ5IGRlZmF1bHQgYW55d2F5LiBUaGUgcHJpbWFyeSBjb25jZXJuIGlzLCB3aGF0IGNvbmZpZ3VyYXRpb25zIGFyZSAqcmVxdWlyZWQqIHRvIGNvbXBpbGUgYW5kIGFjdHVhbGx5IGV4ZWN1dGUgdGhlICptb2RpZmllZCogY29kZT8KCjEuICBgTFJVX0dFTmAgaXMgZXNzZW50aWFsOyB0aGUgcmVsZXZhbnQgY29kZSBpcyBndWFyZGVkIGJ5IGAjaWZkZWYgQ09ORklHX0xSVV9HRU5gLgoyLiAgYERFQlVHX0ZTYCBpcyBub24tbmVnb3RpYWJsZSwgc2luY2UgYGxydV9nZW5fc2VxX3dyaXRlYCBpcyBhIGRlYnVnZnMgZmlsZSBoYW5kbGVyLiBXaXRob3V0IGBDT05GSUdfREVCVUdfRlNgLCB0aGF0IGRlYnVnIGludGVyZmFjZSBhdCBgL3N5cy9rZXJuZWwvZGVidWcvbHJ1X2dlbmAgc2ltcGx5IGlzbiYjMzk7dCBwcmVzZW50LCBhbmQgd2UgY2FuJiMzOTt0IHRyaWdnZXIgYW55IG9mIHRoaXMuCgpOb3csIGxldCYjMzk7cyBkZXRlcm1pbmUgdGhlIGBGb2N1c1N5bWJvbHNgLiBUaGUgZnVuY3Rpb24gdGhhdCBnb3QgdGhlIG1vZGlmaWNhdGlvbiBpcyBgcnVuX2FnaW5nYC4gQnV0IGlzIGBydW5fYWdpbmdgIGEgc3RhdGljIGZ1bmN0aW9uPyBZZXMsIGl0IGlzISBHaXZlbiB0aGF0IGBydW5fYWdpbmdgIGlzIGEgc3RhdGljIGZ1bmN0aW9uIGluIGBtbS92bXNjYW4uY2AsIGJ1dCBpdCYjMzk7cyBub3QgY29tcGlsZXItaW5saW5lZCBiZWNhdXNlIGl0IGV4aXN0cyBpbiB0aGUgc3ltYm9sIHRhYmxlLCBpdCBjYW4gYmUgYSBgRm9jdXNTeW1ib2xgLiBJdCYjMzk7cyBjYWxsZWQgZnJvbSBgcnVuX2NtZGAsIHdoaWNoIGlzIGNhbGxlZCBieSBgbHJ1X2dlbl9zZXFfd3JpdGVgLCB0aGUgZmlsZVxfb3BlcmF0aW9ucyAud3JpdGUgbWV0aG9kLgoKYHJ1bl9hZ2luZ2Agc2VlbXMgcHJldHR5IHNwZWNpZmljLiBDaGVja2luZyBzZWN0aW9uIDQgb2YgdGhlIGd1aWRlbGluZXMsIGl0JiMzOTtzOgoqICAgQSB0YXJnZXQtc3BlY2lmaWMgZmVhdHVyZSBsb2dpYy4KKiAgIEl0JiMzOTtzIGEgLmMgZmlsZSwgbm9uLXN0YXRpYy4KCmBydW5fYWdpbmdgIGlzICpub3QqIHViaXF1aXRvdXMuIEl0JiMzOTtzIG9ubHkgY2FsbGVkIHdoZW4gd3JpdGluZyAmIzM5OyYjNDM7JiMzOTsgdG8gYC9zeXMva2VybmVsL2RlYnVnL2xydV9nZW5gLCBhcyBpcyB0aGUgZW50cnlwb2ludC4gYHJ1bl9jbWRgIGFsc28gaXNuJiMzOTt0IHViaXF1aXRvdXM7IGl0JiMzOTtzIG9ubHkgY2FsbGVkIGZyb20gd2l0aGluIGBscnVfZ2VuX3NlcV93cml0ZWAsIGFuZCBgdHJ5X3RvX2luY19tYXhfc2VxYCBpcyBvbmx5IGNhbGxlZCBieSBgcnVuX2FnaW5nYC4gU28gd2UgaGF2ZSB0aHJlZSBjbGVhciBzeW1ib2xzIHRvIGZvY3VzIG9uOiBgcnVuX2FnaW5nYCwgYHJ1bl9jbWRgLCBhbmQgYGxydV9nZW5fc2VxX3dyaXRlYC4KCkRvdWJsZS1jaGVja2luZywgYHJ1bl9hZ2luZ2AgaXMgb25seSBkZWZpbmVkIGFuZCBjYWxsZWQgd2l0aGluIGBtbS92bXNjYW4uY2AuIEl0JiMzOTtzIG5vdCB1c2VkIGFueXdoZXJlIGVsc2UuIFNvIGl0JiMzOTtzIHZlcnkgdGFyZ2V0ZWQuCgpJcyB0aGlzIHBhdGNoIGBXb3J0aEZ1enppbmdgPyBBYnNvbHV0ZWx5LgoqICAgSXQmIzM5O3MgYSBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IHN1YnN5c3RlbSBjaGFuZ2UgKGBtbS92bXNjYW4uY2ApLgoqICAgRXhlY3V0YWJsZSBjb2RlIG1vZGlmaWVzIGxvZ2ljOiBpdCBhZGRzIGEgc2VxdWVuY2UgY2hlY2sgaW4gYHJ1bl9hZ2luZygpYCB0aGF0IHByZXZlbnRzIGB0cnlfdG9faW5jX21heF9zZXEoKWAgZnJvbSBiZWluZyBjYWxsZWQgd2l0aCBvYnNvbGV0ZSB2YWx1ZXMuCiogICBSZWFjaGFibGUgdmlhIGEgZGVidWdmcyBpbnRlcmZhY2UgYXQgYC9zeXMva2VybmVsL2RlYnVnL2xydV9nZW5gLgoqICAgVGVzdGFibGUgaW4gYSB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudC4KCkZvciBgRW5hYmxlQ29uZmlnc2A6IFdlIG5lZWQgYExSVV9HRU5gIChmb3IgdGhlIE1HTFJVIGNvZGUpIGFuZCBgREVCVUdfRlNgICh0byBleHBvc2UgdGhlIGludGVyZmFjZSkuCgpPdXIgZmluYWwgYEZvY3VzU3ltYm9sc2AgYXJlOiBgcnVuX2FnaW5nYCwgYHJ1bl9jbWRgLCBhbmQgYGxydV9nZW5fc2VxX3dyaXRlYC4gVGhleSBhcmUgc3BlY2lmaWMgdG8gdGhlIGZlYXR1cmUgYW5kIGFyZSBub24tdWJpcXVpdG91cy4KCkxldCYjMzk7cyBkbyBhIHNhbml0eSBjaGVjayB0byBjb3ZlciBhbGwgdGhlIGJhc2VzOiBUaGUgZ29hbCBvZiB0aGlzIGZ1enppbmcgaXMgdG8gZGlzY292ZXIgbmV3IGNyYXNoZXMsIGxhdGVudCBidWdzLCBldGMuIGFuZCB0aGlzIGNvZGUgaXMgcmVhY2hhYmxlIGJ5IHdheSBvZiBhIGRlYnVnZnMgaW50ZXJmYWNlLiBUaGlzIGNvZGUgaXMgaW4gdGhlIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgc3Vic3lzdGVtIGFuZCBhdm9pZHMgdWJpcXVpdG91cyBsaWZlY3ljbGUgaG90LXBhdGhzLiBXZSBoYXZlIGlkZW50aWZpZWQgYWxsIHRoZSBuZWNlc3NhcnkgQ09ORklHIG9wdGlvbnMsIGFuZCBzdHJpcHBlZCB0aGUgQ09ORklHXF8gcHJlZml4LgoKRXZlcnl0aGluZyBsb29rcyBnb29kLiBUaW1lIHRvIGNhbGwgYHNldC1yZXN1bHRzYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40MC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTUgMTM6MDY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0xSVV9HRU4mIzM0OywKICAgICYjMzQ7REVCVUdfRlMmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtydW5fYWdpbmcmIzM0OywKICAgICYjMzQ7bHJ1X2dlbl9zZXFfd3JpdGUmIzM0OywKICAgICYjMzQ7cnVuX2NtZCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgYWdpbmcgbG9naWMgaW4gdGhlIE11bHRpLUdlbiBMUlUgKE1HTFJVKSBzdWJzeXN0ZW0gaW4gbW0vdm1zY2FuLmMuIEl0IGFkZHMgYSBjaGVjayBpbiBydW5fYWdpbmcoKSB0byBpbW1lZGlhdGVseSByZXR1cm4gc3VjY2VzcyBpZiB0aGUgcmVxdWVzdGVkIHNlcXVlbmNlIG51bWJlciBpcyBvbGRlciB0aGFuIHRoZSBjdXJyZW50IG1heF9zZXEgaW5zdGVhZCBvZiBhdHRlbXB0aW5nIGFuIGluY3JlbWVudC4gVGhpcyBsb2dpYyBpcyByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2UgYnkgd3JpdGluZyB0byAvc3lzL2tlcm5lbC9kZWJ1Zy9scnVfZ2VuLCBtYWtpbmcgaXQgYW4gZXhlY3V0YWJsZSBhbmQgdGVzdGFibGUgcGF0aCB3aXRoaW4gY29yZSBtZW1vcnkgbWFuYWdlbWVudC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7TFJVX0dFTiYjMzQ7LAogICAgJiMzNDtERUJVR19GUyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3J1bl9hZ2luZyYjMzQ7LAogICAgJiMzNDtscnVfZ2VuX3NlcV93cml0ZSYjMzQ7LAogICAgJiMzNDtydW5fY21kJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBhZ2luZyBsb2dpYyBpbiB0aGUgTXVsdGktR2VuIExSVSAoTUdMUlUpIHN1YnN5c3RlbSBpbiBtbS92bXNjYW4uYy4gSXQgYWRkcyBhIGNoZWNrIGluIHJ1bl9hZ2luZygpIHRvIGltbWVkaWF0ZWx5IHJldHVybiBzdWNjZXNzIGlmIHRoZSByZXF1ZXN0ZWQgc2VxdWVuY2UgbnVtYmVyIGlzIG9sZGVyIHRoYW4gdGhlIGN1cnJlbnQgbWF4X3NlcSBpbnN0ZWFkIG9mIGF0dGVtcHRpbmcgYW4gaW5jcmVtZW50LiBUaGlzIGxvZ2ljIGlzIHJlYWNoYWJsZSBmcm9tIHVzZXJzcGFjZSBieSB3cml0aW5nIHRvIC9zeXMva2VybmVsL2RlYnVnL2xydV9nZW4sIG1ha2luZyBpdCBhbiBleGVjdXRhYmxlIGFuZCB0ZXN0YWJsZSBwYXRoIHdpdGhpbiBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50LiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQxLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNSAxMzowNjwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+SWY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4xbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE1IDEzOjA2PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjFtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmNvcmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcyBhbiBlYXJseSByZXR1cm4gY2hlY2sgKGBpZiAoc2VxIFx1MDAzYyBtYXhfc2VxKSByZXR1cm4gMDtgKSBpbiBgcnVuX2FnaW5nKClgIHdpdGhpbiBgbW0vdm1zY2FuLmNgLiBJdCBvcGVyYXRlcyBleGNsdXNpdmVseSBvbiBzY2FsYXIgaW50ZWdlciB2YWx1ZXMgKGBzZXFgIGFuZCBgbWF4X3NlcWApIGFuZCBhbHRlcnMgY29udHJvbCBmbG93IGluIHRoZSBtdWx0aS1nZW4gTFJVIGFnaW5nIHRyaWdnZXIuIFRoZSBjaGFuZ2UgZG9lcyBub3QgaW50cm9kdWNlIG9yIG1vZGlmeSBhbnkgbWVtb3J5IGFsbG9jYXRpb25zLCBkb2VzIG5vdCB0b3VjaCB1bmluaXRpYWxpemVkIHN0YWNrIG9yIGhlYXAgYnVmZmVycywgYW5kIGRvZXMgbm90IHBhc3MgYW55IGtlcm5lbCBzdHJ1Y3R1cmVzIHRvIHVzZXIgc3BhY2UuIEJlY2F1c2Ugbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgY2FuIGJlIHJlYWQsIGJyYW5jaGVkIHVwb24sIG9yIGxlYWtlZCB0byB1c2Vyc3BhY2UgYXMgYSByZXN1bHQgb2YgdGhpcyBjaGFuZ2UsIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIGlzIG5vdCB3YXJyYW50ZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5CmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kCmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikKZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuCgpDUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjoKLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlCiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOCiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUAogIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuCi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsCiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLgoKUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTiwKTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy4KQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWQpzZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrcwp0aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLgoKTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3QKdW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsCmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5cwp0aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZwp1bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2wKZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLApjYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy4KClNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczoKMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2IKICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHMKICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC4KMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlcwogICBvciBzdHJ1Y3QgZmllbGRzLgozLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzCiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuCjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzCiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy4KClNldCBOZWVkc0tNU0FOPWZhbHNlIElGOgotIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyCiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0CiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLgotIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkCiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLgotIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy4KClVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGUKZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5UYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NAoKRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCA1NWI1ZWQ2MTY4YjhlMjliYTY3ODA5MjgyNWQ2NjY5MGZjYTIwNzJiCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFR1ZSBTZXAgMTUgMTI6NTk6MjYgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9tbS92bXNjYW4uYyBiL21tL3Ztc2Nhbi5jCmluZGV4IDUzNTRlYjhkM2EwN2IuLjE4YzRkMzU5NTc0OTcgMTAwNjQ0Ci0tLSBhL21tL3Ztc2Nhbi5jCiYjNDM7JiM0MzsmIzQzOyBiL21tL3Ztc2Nhbi5jCkBAIC01ODI3LDYgJiM0Mzs1ODI3LDkgQEAgc3RhdGljIGludCBydW5fYWdpbmcoc3RydWN0IGxydXZlYyAqbHJ1dmVjLCB1bnNpZ25lZCBsb25nIHNlcSwKIHsKIAlERUZJTkVfTUFYX1NFUShscnV2ZWMpOwogCiYjNDM7CWlmIChzZXEgJmx0OyBtYXhfc2VxKQomIzQzOwkJcmV0dXJuIDA7CiYjNDM7CiAJaWYgKHNlcSAmZ3Q7IG1heF9zZXEpCiAJCXJldHVybiAtRUlOVkFMOwogCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQzLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNSAxMzowNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMDQ1CgkJCQkJCQlvdXRwdXQ6IDM1CgkJCQkJCQl0aG91Z2h0czogMzQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGhpbmtpbmcgcHJvY2VzczoKCioqRGl2aW5nIGludG8gdm1zY2FuLmMqKgoKT2theSwgc28gdGhlIHBhdGNoIEkmIzM5O20gaW50ZXJlc3RlZCBpbiBpcyBidXJpZWQgd2l0aGluIGBtbS92bXNjYW4uY2AuIFRoYXQmIzM5O3MgYSBwcmV0dHkgc3RhbmRhcmQgbG9jYXRpb24gZm9yIG1lbW9yeSBtYW5hZ2VtZW50IG1vZGlmaWNhdGlvbnMsIGJ1dCBJIHN0aWxsIG5lZWQgdG8gcGlucG9pbnQgdGhlIGV4YWN0IGxvY2F0aW9uLiBMaW5lIDU4MjfigKYgcmlnaHQuIFRpbWUgdG8gZmlyZSB1cCBteSB0b29scy4gSeKAmWxsIGxpa2VseSB1c2Ugc29tZXRoaW5nIGxpa2UgYHJlYWQtZmlsZWAgb3IgYGdyZXBwZXJgIOKAkyBzb21ldGhpbmcgdGhhdCBsZXRzIG1lIHF1aWNrbHkgbmF2aWdhdGUgdGhlIGZpbGUgYW5kIHNlZSB0aGUgc3Vycm91bmRpbmcgY29kZSBjb250ZXh0IGFyb3VuZCB0aGF0IGxpbmUgbnVtYmVyLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgaW1tZWRpYXRlIHZpY2luaXR5IG9mIHRoYXQgbGluZS4gVGhpcyBpbml0aWFsIGluc3BlY3Rpb24gc2hvdWxkIHJldmVhbCB0aGUgc3BlY2lmaWMgZnVuY3Rpb24gYW5kIHN1cnJvdW5kaW5nIGxvZ2ljIHRoZSBwYXRjaCB0b3VjaGVzLCBhbmQgZ2l2ZSBtZSBhIGZlZWwgZm9yIGl0cyBvdmVyYWxsIHB1cnBvc2Ugd2l0aGluIHRoZSB2bXNjYW4gZnJhbWV3b3JrLiBMZXQmIzM5O3Mgc2VlIHdoYXQgd2UmIzM5O3JlIHdvcmtpbmcgd2l0aC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40NC8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTUgMTM6MDc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDttbS92bXNjYW4uYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDU4MTUsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7NTgxNTpcdFx0cmV0dXJuIDA7XG41ODE2Olx0fVxuNTgxNzpcdFxuNTgxODpcdHN0YXRpYyBjb25zdCBzdHJ1Y3Qgc2VxX29wZXJhdGlvbnMgbHJ1X2dlbl9zZXFfb3BzID0ge1xuNTgxOTpcdFx0LnN0YXJ0ID0gbHJ1X2dlbl9zZXFfc3RhcnQsXG41ODIwOlx0XHQuc3RvcCA9IGxydV9nZW5fc2VxX3N0b3AsXG41ODIxOlx0XHQubmV4dCA9IGxydV9nZW5fc2VxX25leHQsXG41ODIyOlx0XHQuc2hvdyA9IGxydV9nZW5fc2VxX3Nob3csXG41ODIzOlx0fTtcbjU4MjQ6XHRcbjU4MjU6XHRzdGF0aWMgaW50IHJ1bl9hZ2luZyhzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIHVuc2lnbmVkIGxvbmcgc2VxLFxuNTgyNjpcdFx0XHQgICAgIGludCBzd2FwcGluZXNzLCBib29sIGZvcmNlX3NjYW4pXG41ODI3Olx0e1xuNTgyODpcdFx0REVGSU5FX01BWF9TRVEobHJ1dmVjKTtcbjU4Mjk6XHRcbjU4MzA6XHRcdGlmIChzZXEgXHUwMDNjIG1heF9zZXEpXG41ODMxOlx0XHRcdHJldHVybiAwO1xuNTgzMjpcdFxuNTgzMzpcdFx0aWYgKHNlcSBcdTAwM2UgbWF4X3NlcSlcbjU4MzQ6XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG41ODM1Olx0XG41ODM2Olx0XHRyZXR1cm4gdHJ5X3RvX2luY19tYXhfc2VxKGxydXZlYywgbWF4X3NlcSwgc3dhcHBpbmVzcywgZm9yY2Vfc2NhbikgPyAwIDogLUVFWElTVDtcbjU4Mzc6XHR9XG41ODM4Olx0XG41ODM5Olx0c3RhdGljIGludCBydW5fZXZpY3Rpb24oc3RydWN0IGxydXZlYyAqbHJ1dmVjLCB1bnNpZ25lZCBsb25nIHNlcSwgc3RydWN0IHNjYW5fY29udHJvbCAqc2MsXG41ODQwOlx0XHRcdFx0aW50IHN3YXBwaW5lc3MsIHVuc2lnbmVkIGxvbmcgbnJfdG9fcmVjbGFpbSlcbjU4NDE6XHR7XG41ODQyOlx0XHRpbnQgbnJfYmF0Y2g7XG41ODQzOlx0XHRERUZJTkVfTUFYX1NFUShscnV2ZWMpO1xuNTg0NDpcdFxuNTg0NTpcdFx0aWYgKHNlcSAmIzQzOyBNSU5fTlJfR0VOUyBcdTAwM2UgbWF4X3NlcSlcbjU4NDY6XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG41ODQ3Olx0XG41ODQ4Olx0XHRzYy1cdTAwM2Vucl9yZWNsYWltZWQgPSAwO1xuNTg0OTpcdFxuNTg1MDpcdFx0d2hpbGUgKCFzaWduYWxfcGVuZGluZyhjdXJyZW50KSkge1xuNTg1MTpcdFx0XHRERUZJTkVfTUlOX1NFUShscnV2ZWMpO1xuNTg1MjpcdFxuNTg1MzpcdFx0XHRpZiAoc2VxIFx1MDAzYyBldmljdGFibGVfbWluX3NlcShtaW5fc2VxLCBzd2FwcGluZXNzKSlcbjU4NTQ6XHRcdFx0XHRyZXR1cm4gMDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40NS8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTUgMTM6MDc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjg3NgoJCQkJCQkJb3V0cHV0OiAzNQoJCQkJCQkJdGhvdWdodHM6IDE5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqQW5hbHl6aW5nIHRoZSBgcnVuX2FnaW5nYCBGdW5jdGlvbiBDYWxsKioKCkFscmlnaHQsIGxldCYjMzk7cyBkaXZlIGluLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcyB0byB0cmFjZSB0aGUgZXhlY3V0aW9uIG9mIGBydW5fYWdpbmdgLiBUaGUgZ29hbCBpcyB0byBmdWxseSB1bmRlcnN0YW5kIGl0cyBjb250ZXh0IGFuZCBpbXBhY3QuIEkgbmVlZCB0byBwaW5wb2ludCBldmVyeSBpbnN0YW5jZSB3aGVyZSBgcnVuX2FnaW5nYCBpcyBpbnZva2VkLiBUaGlzIG1lYW5zIGdvaW5nIGJleW9uZCBhIHNpbXBsZSBncmVwOyBJJiMzOTttIGxvb2tpbmcgZm9yIGluZGlyZWN0IGNhbGxzLCBwb3RlbnRpYWwgd3JhcHBlciBmdW5jdGlvbnMsIG9yIGV2ZW4gZHluYW1pYyBpbXBvcnRzIHRoYXQgbWlnaHQgYmUgaW52b2x2ZWQuCgpPbmNlIEkmIzM5O3ZlIGdvdCB0aGUgY2FsbCBzaXRlcyBpZGVudGlmaWVkLCBJJiMzOTtsbCBuZWVkIHRvIGV4YW1pbmUgdGhlIHBhcmFtZXRlcnMgYmVpbmcgcGFzc2VkIHRvIGBydW5fYWdpbmdgIGF0IGVhY2ggbG9jYXRpb24uIFdoYXQgZGF0YSBpcyBpdCBvcGVyYXRpbmcgb24/IFdoYXQgY29uZmlndXJhdGlvbnMgYXJlIGJlaW5nIGFwcGxpZWQ/IEFyZSB0aGVyZSBkaWZmZXJlbnQgY29udHJvbCBmbG93cyBiYXNlZCBvbiB0aG9zZSBhcmd1bWVudHM/IFRoaXMgbGV2ZWwgb2YgZGV0YWlsIGlzIGNydWNpYWwgZm9yIGFzc2Vzc2luZyBwb3RlbnRpYWwgc2lkZSBlZmZlY3RzIGFuZCBwZXJmb3JtYW5jZSBpbXBsaWNhdGlvbnMuIEkmIzM5O2xsIG5lZWQgdG8gY29uZmlybSB0aGF0IG15IGFzc3VtcHRpb25zIG9mIGlucHV0cyBhbmQgb3V0cHV0cyByZW1haW4gY29ycmVjdC4KCk1vcmUgZ2VuZXJhbGx5LCBJIHdhbnQgdG8gdW5kZXJzdGFuZDoKKiAgICoqRGF0YSBEZXBlbmRlbmNpZXM6KiogV2hhdCBvdGhlciBmdW5jdGlvbnMgb3IgZGF0YSBzdHJ1Y3R1cmVzIGRvZXMgYHJ1bl9hZ2luZ2AgcmVseSBvbiwgYm90aCBhcyBpbnB1dCBhbmQgb3V0cHV0PyBXaGF0IGFyZSBpdHMgcHJlLWNvbmRpdGlvbnMgYW5kIHBvc3QtY29uZGl0aW9ucz8KKiAgICoqQ29uY3VycmVuY3k6KiogSXMgdGhpcyBmdW5jdGlvbiBjYWxsZWQgaW4gYSBtdWx0aS10aHJlYWRlZCBvciBhc3luY2hyb25vdXMgZW52aXJvbm1lbnQ/IFRoaXMgaXMgY3JpdGljYWwgZm9yIHRocmVhZCBzYWZldHkgYW5kIHRvIGF2b2lkIGludHJvZHVjaW5nIHJhY2UgY29uZGl0aW9ucy4KKiAgICoqRXJyb3IgSGFuZGxpbmc6KiogSG93IGRvZXMgYHJ1bl9hZ2luZ2AgaGFuZGxlIGV4Y2VwdGlvbnMgb3IgdW5leHBlY3RlZCBpbnB1dD8gRG9lcyBpdCBpbXBsZW1lbnQgYXBwcm9wcmlhdGUgbG9nZ2luZyBvciBleGNlcHRpb24gaGFuZGxpbmcsIG9yIGRvZXMgaXQgZGVwZW5kIG9uIGV4dGVybmFsIGVycm9yIG1hbmFnZW1lbnQ/CiogICAqKlBlcmZvcm1hbmNlOioqIFdoYXQgaXMgdGhlIGNvbXB1dGF0aW9uYWwgY29tcGxleGl0eSBvZiB0aGUgYWxnb3JpdGhtLCBhbmQgd2hhdCBhcmUgaXRzIHBlcmZvcm1hbmNlIGNoYXJhY3RlcmlzdGljcyBpbiBwcm9kdWN0aW9uPyBBcmUgdGhlcmUgb2J2aW91cyBib3R0bGVuZWNrcyBvciBhcmVhcyBmb3Igb3B0aW1pemF0aW9uPwoKTXkgdWx0aW1hdGUgZ29hbCBpcyB0byBidWlsZCBhIGNvbXBsZXRlIG1lbnRhbCBtb2RlbCBvZiBgcnVuX2FnaW5nYCYjMzk7cyBiZWhhdmlvciBhbmQgcG90ZW50aWFsIGltcGFjdC4gVGhpcyB1bmRlcnN0YW5kaW5nIHdpbGwgYWxsb3cgbWUgdG8gY29uZmlkZW50bHkgbW9kaWZ5IG9yIGFuYWx5emUgdGhlIGNvZGUuIEl0IHNob3VsZCBhbHNvIGhlbHAgbWUgZGlzY292ZXIgYW55IHVuZm9yZXNlZW4gaW50ZXJhY3Rpb25zIGJldHdlZW4gYHJ1bl9hZ2luZ2AgYW5kIG90aGVyIHBhcnRzIG9mIHRoZSBzeXN0ZW0uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDYvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE1IDEzOjA3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bW0vdm1zY2FuLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA1ODU1LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDgwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzU4NTU6XHRcbjU4NTY6XHRcdFx0aWYgKHNjLVx1MDAzZW5yX3JlY2xhaW1lZCBcdTAwM2U9IG5yX3RvX3JlY2xhaW0pXG41ODU3Olx0XHRcdFx0cmV0dXJuIDA7XG41ODU4Olx0XG41ODU5Olx0XHRcdG5yX2JhdGNoID0gbWluKG5yX3RvX3JlY2xhaW0gLSBzYy1cdTAwM2Vucl9yZWNsYWltZWQsIE1BWF9MUlVfQkFUQ0gpO1xuNTg2MDpcdFx0XHRpZiAoIWV2aWN0X2ZvbGlvcyhucl9iYXRjaCwgbHJ1dmVjLCBzYywgc3dhcHBpbmVzcykpXG41ODYxOlx0XHRcdFx0cmV0dXJuIDA7XG41ODYyOlx0XG41ODYzOlx0XHRcdGNvbmRfcmVzY2hlZCgpO1xuNTg2NDpcdFx0fVxuNTg2NTpcdFxuNTg2NjpcdFx0cmV0dXJuIC1FSU5UUjtcbjU4Njc6XHR9XG41ODY4Olx0XG41ODY5Olx0c3RhdGljIGludCBydW5fY21kKGNoYXIgY21kLCB1NjQgbWVtY2dfaWQsIGludCBuaWQsIHVuc2lnbmVkIGxvbmcgc2VxLFxuNTg3MDpcdFx0XHQgICBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYywgaW50IHN3YXBwaW5lc3MsIHVuc2lnbmVkIGxvbmcgb3B0KVxuNTg3MTpcdHtcbjU4NzI6XHRcdHN0cnVjdCBscnV2ZWMgKmxydXZlYztcbjU4NzM6XHRcdGludCBlcnIgPSAtRUlOVkFMO1xuNTg3NDpcdFx0c3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnID0gTlVMTDtcbjU4NzU6XHRcbjU4NzY6XHRcdGlmIChuaWQgXHUwMDNjIDAgfHwgbmlkIFx1MDAzZT0gTUFYX05VTU5PREVTIHx8ICFub2RlX3N0YXRlKG5pZCwgTl9NRU1PUlkpKVxuNTg3NzpcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbjU4Nzg6XHRcbjU4Nzk6XHRcdGlmICghbWVtX2Nncm91cF9kaXNhYmxlZCgpKSB7XG41ODgwOlx0XHRcdG1lbWNnID0gbWVtX2Nncm91cF9nZXRfZnJvbV9pZChtZW1jZ19pZCk7XG41ODgxOlx0XHRcdGlmICghbWVtY2cpXG41ODgyOlx0XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG41ODgzOlx0XHR9XG41ODg0Olx0XG41ODg1Olx0XHRpZiAobWVtY2dfaWQgIT0gbWVtX2Nncm91cF9pZChtZW1jZykpXG41ODg2Olx0XHRcdGdvdG8gZG9uZTtcbjU4ODc6XHRcbjU4ODg6XHRcdHNjLVx1MDAzZXRhcmdldF9tZW1fY2dyb3VwID0gbWVtY2c7XG41ODg5Olx0XHRscnV2ZWMgPSBnZXRfbHJ1dmVjKG1lbWNnLCBuaWQpO1xuNTg5MDpcdFxuNTg5MTpcdFx0aWYgKHN3YXBwaW5lc3MgXHUwMDNjIE1JTl9TV0FQUElORVNTKVxuNTg5MjpcdFx0XHRzd2FwcGluZXNzID0gZ2V0X3N3YXBwaW5lc3MobHJ1dmVjLCBzYyk7XG41ODkzOlx0XHRlbHNlIGlmIChzd2FwcGluZXNzIFx1MDAzZSBTV0FQUElORVNTX0FOT05fT05MWSlcbjU4OTQ6XHRcdFx0Z290byBkb25lO1xuNTg5NTpcdFxuNTg5NjpcdFx0c3dpdGNoIChjbWQpIHtcbjU4OTc6XHRcdGNhc2UgJiMzOTsmIzQzOyYjMzk7OlxuNTg5ODpcdFx0XHRlcnIgPSBydW5fYWdpbmcobHJ1dmVjLCBzZXEsIHN3YXBwaW5lc3MsIG9wdCk7XG41ODk5Olx0XHRcdGJyZWFrO1xuNTkwMDpcdFx0Y2FzZSAmIzM5Oy0mIzM5OzpcbjU5MDE6XHRcdFx0ZXJyID0gcnVuX2V2aWN0aW9uKGxydXZlYywgc2VxLCBzYywgc3dhcHBpbmVzcywgb3B0KTtcbjU5MDI6XHRcdFx0YnJlYWs7XG41OTAzOlx0XHR9XG41OTA0Olx0ZG9uZTpcbjU5MDU6XHRcdG1lbV9jZ3JvdXBfcHV0KG1lbWNnKTtcbjU5MDY6XHRcbjU5MDc6XHRcdHJldHVybiBlcnI7XG41OTA4Olx0fVxuNTkwOTpcdFxuNTkxMDpcdC8qIHNlZSBEb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL21tL211bHRpZ2VuX2xydS5yc3QgZm9yIGRldGFpbHMgKi9cbjU5MTE6XHRzdGF0aWMgc3NpemVfdCBscnVfZ2VuX3NlcV93cml0ZShzdHJ1Y3QgZmlsZSAqZmlsZSwgY29uc3QgY2hhciBfX3VzZXIgKnNyYyxcbjU5MTI6XHRcdFx0XHRcdCBzaXplX3QgbGVuLCBsb2ZmX3QgKnBvcylcbjU5MTM6XHR7XG41OTE0Olx0XHR2b2lkICpidWY7XG41OTE1Olx0XHRjaGFyICpjdXIsICpuZXh0O1xuNTkxNjpcdFx0dW5zaWduZWQgaW50IGZsYWdzO1xuNTkxNzpcdFx0c3RydWN0IGJsa19wbHVnIHBsdWc7XG41OTE4Olx0XHRpbnQgZXJyID0gLUVJTlZBTDtcbjU5MTk6XHRcdHN0cnVjdCBzY2FuX2NvbnRyb2wgc2MgPSB7XG41OTIwOlx0XHRcdC5tYXlfd3JpdGVwYWdlID0gdHJ1ZSxcbjU5MjE6XHRcdFx0Lm1heV91bm1hcCA9IHRydWUsXG41OTIyOlx0XHRcdC5tYXlfc3dhcCA9IHRydWUsXG41OTIzOlx0XHRcdC5yZWNsYWltX2lkeCA9IE1BWF9OUl9aT05FUyAtIDEsXG41OTI0Olx0XHRcdC5nZnBfbWFzayA9IEdGUF9LRVJORUwsXG41OTI1Olx0XHRcdC5wcm9hY3RpdmUgPSB0cnVlLFxuNTkyNjpcdFx0fTtcbjU5Mjc6XHRcbjU5Mjg6XHRcdGJ1ZiA9IGt2bWFsbG9jKGxlbiAmIzQzOyAxLCBHRlBfS0VSTkVMKTtcbjU5Mjk6XHRcdGlmICghYnVmKVxuNTkzMDpcdFx0XHRyZXR1cm4gLUVOT01FTTtcbjU5MzE6XHRcbjU5MzI6XHRcdGlmIChjb3B5X2Zyb21fdXNlcihidWYsIHNyYywgbGVuKSkge1xuNTkzMzpcdFx0XHRrdmZyZWUoYnVmKTtcbjU5MzQ6XHRcdFx0cmV0dXJuIC1FRkFVTFQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDcvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE1IDEzOjA3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQ0OTIKCQkJCQkJCW91dHB1dDogMzUKCQkJCQkJCXRob3VnaHRzOiAzNjIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBgcnVuX2FnaW5nYCBQYXRjaCBmb3IgUG90ZW50aWFsIElzc3VlcyoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBJJiMzOTttIGxvb2tpbmcgYXQgdGhlIGNoYW5nZSB0byB0aGUgYHJ1bl9hZ2luZ2AgZnVuY3Rpb24uIFRoZSBvcmlnaW5hbCBjb2RlIGluIGBydW5fYWdpbmdgIGhhZCBhIGNoZWNrOiBpZiBgc2VxYCAodGhlIHNlcXVlbmNlIG51bWJlcikgd2FzICpncmVhdGVyKiB0aGFuIGBtYXhfc2VxYCwgaXQgcmV0dXJuZWQgYW4gZXJyb3IuIE90aGVyd2lzZSwgaXQgY2FsbGVkIGB0cnlfdG9faW5jX21heF9zZXEoLi4uKWAuIFRoZSBwYXRjaCBoYXMgZmxpcHBlZCB0aGUgY29uZGl0aW9uLiBOb3csIGlmIGBzZXFgIGlzICpsZXNzIHRoYW4qIGBtYXhfc2VxYCwgaXQgKmltbWVkaWF0ZWx5KiByZXR1cm5zIDAuIFRoZSBpbXBsaWNhdGlvbiBpcyB0aGF0IGlmIHRoZSByZXF1ZXN0ZWQgYWdpbmcgc2VxdWVuY2UgaXMgYWxyZWFkeSAmIzM0O29sZCYjMzQ7IChsZXNzIHRoYW4gdGhlIGN1cnJlbnQgbWF4KSwgdGhlbiB0aGVyZSYjMzk7cyBubyBuZWVkIHRvIGRvIGFueXRoaW5nLCBiZWNhdXNlIGFnaW5nIHRvIHRoYXQgcG9pbnQgaGFzIGFscmVhZHkgb2NjdXJyZWQuIFRoaXMgbWFrZXMgc2Vuc2UgZnJvbSBhIHBlcmZvcm1hbmNlIHBlcnNwZWN0aXZlIOKAkyBhdm9pZCByZWR1bmRhbnQgd29yay4KClRoZSBxdWVzdGlvbiBub3cgaXMsIGRpZCB0aGlzIGludHJvZHVjZSBhIHZ1bG5lcmFiaWxpdHkgb3IgYSBtZW1vcnkgc2FmZXR5IGlzc3VlPyBTcGVjaWZpY2FsbHksIGFyZSB3ZSBub3cgZXhwb3NpbmcgcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCBtZW1vcnkgb3IgY3JlYXRpbmcgYSBzaXR1YXRpb24gd2hlcmUgd2UmIzM5O3JlIHJlYWRpbmcgdW5pbml0aWFsaXplZCB2YWx1ZXM/IExldCYjMzk7cyBiZSB0aG9yb3VnaC4KCkZpcnN0LCBJIG5lZWQgdG8gY2hlY2sgaG93IHRoZSByZXR1cm4gdmFsdWUgb2YgYHJ1bl9hZ2luZ2AgaXMgdXNlZC4gV2UmIzM5O3JlIGNvbmNlcm5lZCBhYm91dCBzaXR1YXRpb25zIHdoZXJlIGtlcm5lbCBzdHJ1Y3R1cmVzIGFyZSBzZW50IHRvIHVzZXJzcGFjZSDigJMgdGhpbmsgYGNvcHlfdG9fdXNlcmAsIGBwdXRfdXNlcmAsIG5ldGxpbmsgU0tCIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycy4gQXJlIHRoZXJlIGFueSB2YWx1ZXMgb3IgbWVtb3J5IHRoYXQgaXMgdW5pbml0aWFsaXplZCBieSB0aGUgc2hvcnQtY2lyY3VpdGluZz8KCkxvb2tpbmcgYXQgdGhlIGNvZGUgcGF0aCwgYHJ1bl9hZ2luZ2AgcmV0dXJucyBhbiBpbnRlZ2VyLCBhbiBlcnJvciBjb2RlLCB0byBgcnVuX2NtZGAuIFRoZW4sIGBydW5fY21kYCBwYXNzZXMgdGhlIHZhbHVlIHRvIGBscnVfZ2VuX3NlcV93cml0ZWAuIGBscnVfZ2VuX3NlcV93cml0ZWAgaXMgdGhlIGZ1bmN0aW9uIHRoYXQgdWx0aW1hdGVseSByZXR1cm5zIHRvIHVzZXIgc3BhY2UuIEl0IHJldHVybnMgZWl0aGVyIHRoZSBgbGVuYCAodGhlIGxlbmd0aCBvZiB0aGUgd3JpdGUpLCBvciB0aGUgZXJyb3IgY29kZSBmcm9tIGBydW5fY21kYC4gVGhlIHJldHVybiB2YWx1ZSBkb2VzIG5vdCByZXR1cm4gYW55IHN0cnVjdHVyZXMuIAoKT2theSwgc28gSSB3aWxsIG5vdyBjaGVjayBsaW5lcyA1OTMwLTU5NzAgb2YgYG1tL3Ztc2Nhbi5jYCB0byBzZWUgaWYgdGhlcmUgaXMgYW55IG90aGVyIHBvc3NpYmlsaXR5IG9mIG1lbW9yeSBleHBvc3VyZSBmcm9tIHRoZSBjaGFuZ2UuIEkgbmVlZCB0byBtYWtlIHN1cmUgdGhhdCB0aGUgY2hhbmdlIGluIGBydW5fYWdpbmdgIGRvZXMgbm90IGNoYW5nZSBhbnkgc3RhdGUgdGhhdCBjb3VsZCBjcmVhdGUgYSBzZWN1cml0eSByaXNrLgoKVGhpcyBzZWVtcyBzYWZlOyBJJiMzOTttIHByZXR0eSBjb21mb3J0YWJsZSB3aXRoIHRoaXMgY2hhbmdlLiBJdCYjMzk7cyBhIHBlcmZvcm1hbmNlIG9wdGltaXphdGlvbiB0aGF0IHNob3VsZCBiZSBvay4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40OC8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTUgMTM6MDc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDttbS92bXNjYW4uYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDU5MzAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7NTkzMDpcdFx0XHRyZXR1cm4gLUVOT01FTTtcbjU5MzE6XHRcbjU5MzI6XHRcdGlmIChjb3B5X2Zyb21fdXNlcihidWYsIHNyYywgbGVuKSkge1xuNTkzMzpcdFx0XHRrdmZyZWUoYnVmKTtcbjU5MzQ6XHRcdFx0cmV0dXJuIC1FRkFVTFQ7XG41OTM1Olx0XHR9XG41OTM2Olx0XG41OTM3Olx0XHRzZXRfdGFza19yZWNsYWltX3N0YXRlKGN1cnJlbnQsIFx1MDAyNnNjLnJlY2xhaW1fc3RhdGUpO1xuNTkzODpcdFx0ZmxhZ3MgPSBtZW1hbGxvY19ub3JlY2xhaW1fc2F2ZSgpO1xuNTkzOTpcdFx0YmxrX3N0YXJ0X3BsdWcoXHUwMDI2cGx1Zyk7XG41OTQwOlx0XHRpZiAoIXNldF9tbV93YWxrKE5VTEwsIHRydWUpKSB7XG41OTQxOlx0XHRcdGVyciA9IC1FTk9NRU07XG41OTQyOlx0XHRcdGdvdG8gZG9uZTtcbjU5NDM6XHRcdH1cbjU5NDQ6XHRcbjU5NDU6XHRcdG5leHQgPSBidWY7XG41OTQ2Olx0XHRuZXh0W2xlbl0gPSAmIzM5O1xcMCYjMzk7O1xuNTk0NzpcdFxuNTk0ODpcdFx0d2hpbGUgKChjdXIgPSBzdHJzZXAoXHUwMDI2bmV4dCwgXCYjMzQ7LDtcXG5cJiMzNDspKSkge1xuNTk0OTpcdFx0XHRpbnQgbjtcbjU5NTA6XHRcdFx0aW50IGVuZDtcbjU5NTE6XHRcdFx0Y2hhciBjbWQsIHN3YXBfc3RyaW5nWzVdO1xuNTk1MjpcdFx0XHR1NjQgbWVtY2dfaWQ7XG41OTUzOlx0XHRcdHVuc2lnbmVkIGludCBuaWQ7XG41OTU0Olx0XHRcdHVuc2lnbmVkIGxvbmcgc2VxO1xuNTk1NTpcdFx0XHR1bnNpZ25lZCBpbnQgc3dhcHBpbmVzcztcbjU5NTY6XHRcdFx0dW5zaWduZWQgbG9uZyBvcHQgPSAtMTtcbjU5NTc6XHRcbjU5NTg6XHRcdFx0Y3VyID0gc2tpcF9zcGFjZXMoY3VyKTtcbjU5NTk6XHRcdFx0aWYgKCEqY3VyKVxuNTk2MDpcdFx0XHRcdGNvbnRpbnVlO1xuNTk2MTpcdFxuNTk2MjpcdFx0XHRuID0gc3NjYW5mKGN1ciwgXCYjMzQ7JWMgJWxsdSAldSAlbHUgJW4gJTRzICVuICVsdSAlblwmIzM0OywgXHUwMDI2Y21kLCBcdTAwMjZtZW1jZ19pZCwgXHUwMDI2bmlkLFxuNTk2MzpcdFx0XHRcdCAgIFx1MDAyNnNlcSwgXHUwMDI2ZW5kLCBzd2FwX3N0cmluZywgXHUwMDI2ZW5kLCBcdTAwMjZvcHQsIFx1MDAyNmVuZCk7XG41OTY0Olx0XHRcdGlmIChuIFx1MDAzYyA0IHx8IGN1cltlbmRdKSB7XG41OTY1Olx0XHRcdFx0ZXJyID0gLUVJTlZBTDtcbjU5NjY6XHRcdFx0XHRicmVhaztcbjU5Njc6XHRcdFx0fVxuNTk2ODpcdFxuNTk2OTpcdFx0XHRpZiAobiA9PSA0KSB7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDkvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE1IDEzOjA3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDU5NTAKCQkJCQkJCW91dHB1dDogMzUKCQkJCQkJCXRob3VnaHRzOiAxNgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0IHRob3VnaHQgcHJvY2VzcywgYXNzdW1pbmcgSSYjMzk7bSBkZWVwbHkgZmFtaWxpYXIgd2l0aCBjb2RlIGFuZCBsaWtlbHkgZGVidWdnaW5nOgoKKipEaXZpbmcgRGVlcGVyIGludG8gYGxydV9nZW5fc2VxX3dyaXRlYCoqCgpBbHJpZ2h0LCB0aGF0JiMzOTtzIHdoZXJlIHdlJiMzOTtyZSBnb2luZyBuZXh0LiBNeSBtZW50YWwgY2hlY2tsaXN0IHNheXMsIGJhc2VkIG9uIHdoYXQgSSYjMzk7dmUgc2VlbiBzbyBmYXIsIHRoZSBuZXh0IGxvZ2ljYWwgc3RlcCB0byB1bmRlcnN0YW5kIHRoZSBiZWhhdmlvciBpcyB0byBkaWcgaW50byB0aGUgYGxydV9nZW5fc2VxX3dyaXRlYCBmdW5jdGlvbi4gVGhpcyBsaWtlbHkgZGVhbHMgd2l0aCB0aGUgTGVhc3QgUmVjZW50bHkgVXNlZCAoTFJVKSBjYWNoZSwgYW5kIHRoZSAmIzM0O2dlbl9zZXEmIzM0OyBhbmQgJiMzNDt3cml0ZSYjMzQ7IGVsZW1lbnRzIHN1Z2dlc3QgaXQgaGFzIHNvbWV0aGluZyB0byBkbyB3aXRoIHRoZSBnZW5lcmF0aW9uIG9mIGEgc2VxdWVuY2UgbnVtYmVyIGR1cmluZyBhIHdyaXRlIG9wZXJhdGlvbiwgcHJvYmFibHkgaW4gY29uanVuY3Rpb24gd2l0aCB0aGUgTFJVIGV2aWN0aW9uIHBvbGljeS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgZXhhY3RseSBob3cgdGhpcyBmdW5jdGlvbiBpbnRlcmFjdHMgd2l0aCB0aGUgcmVzdCBvZiB0aGUgc3lzdGVtLCBhbmQgaG93IGl0IGhhbmRsZXMgcG90ZW50aWFsIHJhY2UgY29uZGl0aW9ucyBvciBjb25jdXJyZW5jeSBpc3N1ZXMsIG9yIGlmIGl0IGhhcyBhbnl0aGluZyB0byBkbyB3aXRoIGEgcGVyZm9ybWFuY2UgYm90dGxlbmVjay4gTGV0JiMzOTtzIHNlZSB3aGF0IHdlIGNhbiBmaW5kIGluIHRoZXJlLiBUaGlzIGlzIHdoZXJlIHRoZSByZWFsIHdvcmsgYmVnaW5zLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUwLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNSAxMzowNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O21tL3Ztc2Nhbi5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNTk3MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA0MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDs1OTcwOlx0XHRcdFx0c3dhcHBpbmVzcyA9IC0xO1xuNTk3MTpcdFx0XHR9IGVsc2UgaWYgKCFzdHJjbXAoXCYjMzQ7bWF4XCYjMzQ7LCBzd2FwX3N0cmluZykpIHtcbjU5NzI6XHRcdFx0XHQvKiBzZXQgYnkgdXNlcnNwYWNlIGZvciBhbm9ueW1vdXMgbWVtb3J5IG9ubHkgKi9cbjU5NzM6XHRcdFx0XHRzd2FwcGluZXNzID0gU1dBUFBJTkVTU19BTk9OX09OTFk7XG41OTc0Olx0XHRcdH0gZWxzZSB7XG41OTc1Olx0XHRcdFx0ZXJyID0ga3N0cnRvdWludChzd2FwX3N0cmluZywgMCwgXHUwMDI2c3dhcHBpbmVzcyk7XG41OTc2Olx0XHRcdFx0aWYgKGVycilcbjU5Nzc6XHRcdFx0XHRcdGJyZWFrO1xuNTk3ODpcdFx0XHR9XG41OTc5Olx0XG41OTgwOlx0XHRcdGVyciA9IHJ1bl9jbWQoY21kLCBtZW1jZ19pZCwgbmlkLCBzZXEsIFx1MDAyNnNjLCBzd2FwcGluZXNzLCBvcHQpO1xuNTk4MTpcdFx0XHRpZiAoZXJyKVxuNTk4MjpcdFx0XHRcdGJyZWFrO1xuNTk4MzpcdFx0fVxuNTk4NDpcdGRvbmU6XG41OTg1Olx0XHRjbGVhcl9tbV93YWxrKCk7XG41OTg2Olx0XHRibGtfZmluaXNoX3BsdWcoXHUwMDI2cGx1Zyk7XG41OTg3Olx0XHRtZW1hbGxvY19ub3JlY2xhaW1fcmVzdG9yZShmbGFncyk7XG41OTg4Olx0XHRzZXRfdGFza19yZWNsYWltX3N0YXRlKGN1cnJlbnQsIE5VTEwpO1xuNTk4OTpcdFxuNTk5MDpcdFx0a3ZmcmVlKGJ1Zik7XG41OTkxOlx0XG41OTkyOlx0XHRyZXR1cm4gZXJyID8gOiBsZW47XG41OTkzOlx0fVxuNTk5NDpcdFxuNTk5NTpcdHN0YXRpYyBpbnQgbHJ1X2dlbl9zZXFfb3BlbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSlcbjU5OTY6XHR7XG41OTk3Olx0XHRyZXR1cm4gc2VxX29wZW4oZmlsZSwgXHUwMDI2bHJ1X2dlbl9zZXFfb3BzKTtcbjU5OTg6XHR9XG41OTk5Olx0XG42MDAwOlx0c3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgbHJ1X2dlbl9yd19mb3BzID0ge1xuNjAwMTpcdFx0Lm9wZW4gPSBscnVfZ2VuX3NlcV9vcGVuLFxuNjAwMjpcdFx0LnJlYWQgPSBzZXFfcmVhZCxcbjYwMDM6XHRcdC53cml0ZSA9IGxydV9nZW5fc2VxX3dyaXRlLFxuNjAwNDpcdFx0Lmxsc2VlayA9IHNlcV9sc2VlayxcbjYwMDU6XHRcdC5yZWxlYXNlID0gc2VxX3JlbGVhc2UsXG42MDA2Olx0fTtcbjYwMDc6XHRcbjYwMDg6XHRzdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBscnVfZ2VuX3JvX2ZvcHMgPSB7XG42MDA5Olx0XHQub3BlbiA9IGxydV9nZW5fc2VxX29wZW4sXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTEvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE1IDEzOjA3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDY3OTIKCQkJCQkJCW91dHB1dDogMTU3CgkJCQkJCQl0aG91Z2h0czogNTQ5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFuYWx5c2lzIG9mIHRoZSBMUlUgQWdpbmcgT3B0aW1pemF0aW9uKioKCk9rYXksIHNvIEkmIzM5O3ZlIGJlZW4gbG9va2luZyBvdmVyIHRoaXMgcGF0Y2guIEl0JiMzOTtzIGEgcHJldHR5IHN0cmFpZ2h0Zm9yd2FyZCBvcHRpbWl6YXRpb24gaW4gYHJ1bl9hZ2luZ2Agd2l0aGluIHRoZSBtdWx0aS1nZW4gTFJVIHN5c3RlbS4gQmFzaWNhbGx5LCBpdCYjMzk7cyBhZGRpbmcgYSBzaW1wbGUgZWFybHktcmV0dXJuIGNoZWNrOiBgaWYgKHNlcSAmbHQ7IG1heF9zZXEpIHJldHVybiAwO2AuIFRoaXMgY2hlY2sgcHJldmVudHMgdW5uZWNlc3NhcnkgY2FsbHMgdG8gYHRyeV90b19pbmNfbWF4X3NlcWAgd2hlbiB0aGUgcmVxdWVzdGVkIHNlcXVlbmNlIG51bWJlciAoYHNlcWApIGlzICphbHJlYWR5KiBsZXNzIHRoYW4gdGhlIG1heGltdW0gYWxsb3dlZCBzZXF1ZW5jZSAoYG1heF9zZXFgKS4gUHJldmlvdXNseSwgaXQgd2FzIGF0dGVtcHRpbmcgdGhlIGluY3JlbWVudCBldmVuIHdoZW4gaXQgd2FzbiYjMzk7dCBuZWVkZWQsIGxlYWRpbmcgdG8gcG90ZW50aWFsIHdhc3RlZCBjeWNsZXMgb3IgYW4gdW5uZWNlc3NhcnkgYC1FRVhJU1RgIHJldHVybi4KClRoZSBpbXBvcnRhbnQgdGhpbmcgaXMgdGhhdCBub3RoaW5nIGluIGBscnVfZ2VuX3NlcV93cml0ZWAsIHRoZSBlbnRyeSBwb2ludCBmb3IgdGhpcywgcmV0dXJucyBhbnkgZGF0YSB0byB1c2VyIHNwYWNlLiBJdCBvbmx5IHJldHVybnMgYW4gZXJyb3IgY29kZSBvciB0aGUgbGVuZ3RoIG9mIHRoZSBvcGVyYXRpb24sIG5vdGhpbmcgaXMgYWxsb2NhdGVkIG9yIGxlZnQgdW5pbml0aWFsaXplZCwgbm8gZGF0YSBsZWFrcy4KCk15IGluaXRpYWwgdGhvdWdodCB3YXMgd2hldGhlciB0aGlzIGhhZCBhbnkgaW1wbGljYXRpb25zIGZvciBLTVNBTiAoS2VybmVsIE1lbW9yeSBTYW5pdGl6ZXIpIGFuZCB0aGUgZGV0ZWN0aW9uIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzIG9yIGluZm9ybWF0aW9uIGxlYWtzLiBJJiMzOTt2ZSBkb25lIGEgdmVyeSB0aG9yb3VnaCByZXZpZXcgb24gdGhpcyBhc3BlY3QuCgoqICAgVGhlcmUgYXJlIG5vIG1lbW9yeSBhbGxvY2F0aW9ucyBpbnZvbHZlZCwgbm8gbmV3IHN0YWNrIG9yIGhlYXAgdmFyaWFibGVzLCBhbmQgY3JpdGljYWxseSwgbm8gZGF0YSBpcyBiZWluZyBjb3BpZWQgdG8gdXNlciBzcGFjZS4gVGhlIGxvZ2ljIGJvaWxzIGRvd24gdG8gYSBzaW1wbGUgaW50ZWdlciBjb21wYXJpc29uIGJldHdlZW4gYHNlcWAgKGRlcml2ZWQgZnJvbSB1c2VyIGlucHV0KSBhbmQgYG1heF9zZXFgIChkZXJpdmVkIGZyb20gYSBgREVGSU5FX01BWF9TRVEobHJ1dmVjKWAgbWFjcm8sIGZyb20gdGhlIGBscnV2ZWNgIHN0cnVjdHVyZSkuIFRoaXMgaXMgYSBwdXJlbHkgbG9naWNhbCBjaGVjay4gVGhlcmUmIzM5O3Mgbm8gd2F5IHRoaXMgaW50cm9kdWNlcyBvciBhZmZlY3RzIGFueSBLTVNBTi1zcGVjaWZpYyB2dWxuZXJhYmlsaXRpZXMuCgoqICAgVG8gcHV0IGl0IGFub3RoZXIgd2F5LCBLQVNBTiAoS2VybmVsIEFkZHJlc3MgU2FuaXRpemVyKSBpcyBhIHRvb2wgdGhhdCBkZXRlY3RzIG1lbW9yeSBhY2Nlc3MgZXJyb3JzLCB3aGlsZSBLTVNBTiBmb2N1c2VzIG9uIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzIGFuZCBpbmZvcm1hdGlvbiBsZWFrcyAqdG8gdXNlciBzcGFjZSouIFRoaXMgcGF0Y2ggZG9lc24mIzM5O3QgaW50cm9kdWNlIGFueSBuZXcgcGF0aHMgdGhhdCBjb3VsZCBsZWFkIHRvIHRob3NlIHNjZW5hcmlvcy4KClRoZXJlZm9yZSwgdGhlIHBhdGNoIGRvZXNuJiMzOTt0ICYjMzQ7TmVlZEtNU0FOJiMzNDsuIEkmIzM5O20gcmVhZHkgdG8gbWFyayBpdCBhcyBzdWNoLiBXZSBjYW4gcHJvY2VlZCB3aXRoIHRoZSBzdGFuZGFyZCByZXZpZXcgYW5kIHRlc3RpbmcuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTIvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE1IDEzOjA3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHMgYW4gZWFybHkgcmV0dXJuIGNoZWNrIChgaWYgKHNlcSBcdTAwM2MgbWF4X3NlcSkgcmV0dXJuIDA7YCkgaW4gYHJ1bl9hZ2luZygpYCB3aXRoaW4gYG1tL3Ztc2Nhbi5jYC4gSXQgb3BlcmF0ZXMgZXhjbHVzaXZlbHkgb24gc2NhbGFyIGludGVnZXIgdmFsdWVzIChgc2VxYCBhbmQgYG1heF9zZXFgKSBhbmQgYWx0ZXJzIGNvbnRyb2wgZmxvdyBpbiB0aGUgbXVsdGktZ2VuIExSVSBhZ2luZyB0cmlnZ2VyLiBUaGUgY2hhbmdlIGRvZXMgbm90IGludHJvZHVjZSBvciBtb2RpZnkgYW55IG1lbW9yeSBhbGxvY2F0aW9ucywgZG9lcyBub3QgdG91Y2ggdW5pbml0aWFsaXplZCBzdGFjayBvciBoZWFwIGJ1ZmZlcnMsIGFuZCBkb2VzIG5vdCBwYXNzIGFueSBrZXJuZWwgc3RydWN0dXJlcyB0byB1c2VyIHNwYWNlLiBCZWNhdXNlIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGNhbiBiZSByZWFkLCBicmFuY2hlZCB1cG9uLCBvciBsZWFrZWQgdG8gdXNlcnNwYWNlIGFzIGEgcmVzdWx0IG9mIHRoaXMgY2hhbmdlLCBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBpcyBub3Qgd2FycmFudGVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcyBhbiBlYXJseSByZXR1cm4gY2hlY2sgKGBpZiAoc2VxIFx1MDAzYyBtYXhfc2VxKSByZXR1cm4gMDtgKSBpbiBgcnVuX2FnaW5nKClgIHdpdGhpbiBgbW0vdm1zY2FuLmNgLiBJdCBvcGVyYXRlcyBleGNsdXNpdmVseSBvbiBzY2FsYXIgaW50ZWdlciB2YWx1ZXMgKGBzZXFgIGFuZCBgbWF4X3NlcWApIGFuZCBhbHRlcnMgY29udHJvbCBmbG93IGluIHRoZSBtdWx0aS1nZW4gTFJVIGFnaW5nIHRyaWdnZXIuIFRoZSBjaGFuZ2UgZG9lcyBub3QgaW50cm9kdWNlIG9yIG1vZGlmeSBhbnkgbWVtb3J5IGFsbG9jYXRpb25zLCBkb2VzIG5vdCB0b3VjaCB1bmluaXRpYWxpemVkIHN0YWNrIG9yIGhlYXAgYnVmZmVycywgYW5kIGRvZXMgbm90IHBhc3MgYW55IGtlcm5lbCBzdHJ1Y3R1cmVzIHRvIHVzZXIgc3BhY2UuIEJlY2F1c2Ugbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgY2FuIGJlIHJlYWQsIGJyYW5jaGVkIHVwb24sIG9yIGxlYWtlZCB0byB1c2Vyc3BhY2UgYXMgYSByZXN1bHQgb2YgdGhpcyBjaGFuZ2UsIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIGlzIG5vdCB3YXJyYW50ZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE1VDEyOjU5OjI2LjgxNjc4MTM0OVoiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ5ODQzMzE3NDQzNywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJMUlVfR0VOXCIsXG4gICAgXCJERUJVR19GU1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInJ1bl9hZ2luZ1wiLFxuICAgIFwibHJ1X2dlbl9zZXFfd3JpdGVcIixcbiAgICBcInJ1bl9jbWRcIlxuICBdLFxuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHMgYW4gZWFybHkgcmV0dXJuIGNoZWNrIChgaWYgKHNlcSBcXHUwMDNjIG1heF9zZXEpIHJldHVybiAwO2ApIGluIGBydW5fYWdpbmcoKWAgd2l0aGluIGBtbS92bXNjYW4uY2AuIEl0IG9wZXJhdGVzIGV4Y2x1c2l2ZWx5IG9uIHNjYWxhciBpbnRlZ2VyIHZhbHVlcyAoYHNlcWAgYW5kIGBtYXhfc2VxYCkgYW5kIGFsdGVycyBjb250cm9sIGZsb3cgaW4gdGhlIG11bHRpLWdlbiBMUlUgYWdpbmcgdHJpZ2dlci4gVGhlIGNoYW5nZSBkb2VzIG5vdCBpbnRyb2R1Y2Ugb3IgbW9kaWZ5IGFueSBtZW1vcnkgYWxsb2NhdGlvbnMsIGRvZXMgbm90IHRvdWNoIHVuaW5pdGlhbGl6ZWQgc3RhY2sgb3IgaGVhcCBidWZmZXJzLCBhbmQgZG9lcyBub3QgcGFzcyBhbnkga2VybmVsIHN0cnVjdHVyZXMgdG8gdXNlciBzcGFjZS4gQmVjYXVzZSBubyB1bmluaXRpYWxpemVkIG1lbW9yeSBjYW4gYmUgcmVhZCwgYnJhbmNoZWQgdXBvbiwgb3IgbGVha2VkIHRvIHVzZXJzcGFjZSBhcyBhIHJlc3VsdCBvZiB0aGlzIGNoYW5nZSwgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgaXMgbm90IHdhcnJhbnRlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgYWdpbmcgbG9naWMgaW4gdGhlIE11bHRpLUdlbiBMUlUgKE1HTFJVKSBzdWJzeXN0ZW0gaW4gbW0vdm1zY2FuLmMuIEl0IGFkZHMgYSBjaGVjayBpbiBydW5fYWdpbmcoKSB0byBpbW1lZGlhdGVseSByZXR1cm4gc3VjY2VzcyBpZiB0aGUgcmVxdWVzdGVkIHNlcXVlbmNlIG51bWJlciBpcyBvbGRlciB0aGFuIHRoZSBjdXJyZW50IG1heF9zZXEgaW5zdGVhZCBvZiBhdHRlbXB0aW5nIGFuIGluY3JlbWVudC4gVGhpcyBsb2dpYyBpcyByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2UgYnkgd3JpdGluZyB0byAvc3lzL2tlcm5lbC9kZWJ1Zy9scnVfZ2VuLCBtYWtpbmcgaXQgYW4gZXhlY3V0YWJsZSBhbmQgdGVzdGFibGUgcGF0aCB3aXRoaW4gY29yZSBtZW1vcnkgbWFuYWdlbWVudC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTVUMTI6NTk6MjYuODE2ODE3MTU5WiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1NTQ5Nzk4NzEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCA1NWI1ZWQ2MTY4YjhlMjliYTY3ODA5MjgyNWQ2NjY5MGZjYTIwNzJiXFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBUdWUgU2VwIDE1IDEyOjU5OjI2IDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL21tL3Ztc2Nhbi5jIGIvbW0vdm1zY2FuLmNcXG5pbmRleCA1MzU0ZWI4ZDNhMDdiLi4xOGM0ZDM1OTU3NDk3IDEwMDY0NFxcbi0tLSBhL21tL3Ztc2Nhbi5jXFxuKysrIGIvbW0vdm1zY2FuLmNcXG5AQCAtNTgyNyw2ICs1ODI3LDkgQEAgc3RhdGljIGludCBydW5fYWdpbmcoc3RydWN0IGxydXZlYyAqbHJ1dmVjLCB1bnNpZ25lZCBsb25nIHNlcSxcXG4ge1xcbiBcXHRERUZJTkVfTUFYX1NFUShscnV2ZWMpO1xcbiBcXG4rXFx0aWYgKHNlcSBcXHUwMDNjIG1heF9zZXEpXFxuK1xcdFxcdHJldHVybiAwO1xcbitcXG4gXFx0aWYgKHNlcSBcXHUwMDNlIG1heF9zZXEpXFxuIFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbiBcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTVUMTI6NTk6MjcuMzcyNTY1NTRaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJjb3JlIiwiRHVyYXRpb24iOjQyMzkxNjIzNjgyNywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJMUlVfR0VOXCIsXG4gICAgXCJERUJVR19GU1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInJ1bl9hZ2luZ1wiLFxuICAgIFwibHJ1X2dlbl9zZXFfd3JpdGVcIixcbiAgICBcInJ1bl9jbWRcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgYWdpbmcgbG9naWMgaW4gdGhlIE11bHRpLUdlbiBMUlUgKE1HTFJVKSBzdWJzeXN0ZW0gaW4gbW0vdm1zY2FuLmMuIEl0IGFkZHMgYSBjaGVjayBpbiBydW5fYWdpbmcoKSB0byBpbW1lZGlhdGVseSByZXR1cm4gc3VjY2VzcyBpZiB0aGUgcmVxdWVzdGVkIHNlcXVlbmNlIG51bWJlciBpcyBvbGRlciB0aGFuIHRoZSBjdXJyZW50IG1heF9zZXEgaW5zdGVhZCBvZiBhdHRlbXB0aW5nIGFuIGluY3JlbWVudC4gVGhpcyBsb2dpYyBpcyByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2UgYnkgd3JpdGluZyB0byAvc3lzL2tlcm5lbC9kZWJ1Zy9scnVfZ2VuLCBtYWtpbmcgaXQgYW4gZXhlY3V0YWJsZSBhbmQgdGVzdGFibGUgcGF0aCB3aXRoaW4gY29yZSBtZW1vcnkgbWFuYWdlbWVudC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIgYW5kIHNlY3VyaXR5IGVuZ2luZWVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBldmFsdWF0ZSB3aGV0aGVyIGl0IHdhcnJhbnRzIGZ1enppbmcgd2l0aCBzeXprYWxsZXIuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIGludGVybmFsIGFzc3VtcHRpb25zLiBZb3UgbXVzdCBhY3RpdmVseSB1c2UgeW91ciBjb2RlIGFjY2Vzc1xudG9vbHMgdG8gaW5zcGVjdCB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlLCBjYWxsZXJzLCBhbmQgc3Vycm91bmRpbmcgY29udGV4dC5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjEuIENPUkUgVFJJQUdFIFBISUxPU09QSFlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5UaGUgZ29hbCBvZiBwYXRjaCBmdXp6aW5nIGlzIHRvIGRpc2NvdmVyIGNyYXNoZXMsIHJlZ3Jlc3Npb25zLCBleHBvc2VkIGxhdGVudCBidWdzLFxuYW5kIG5ld2x5IHRyaWdnZXJlZCBhc3NlcnRpb25zIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIHNlcmllcy5cblxuLSBSRUFDSEFCSUxJVFkgSVMgVEhFIFBSSU1BUlkgR0FURTpcbiAgRnV6emluZyBjYW4gb25seSBkaXNjb3ZlciBidWdzIGluIGNvZGUgdGhhdCBjYW4gYWN0dWFsbHkgZXhlY3V0ZSBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZFxuICBlbnZpcm9ubWVudHMgKEdDRSBvciBRRU1VLCB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgZGV2aWNlcyBsaWtlIFVTQiBnYWRnZXRzLCBuZXRkZXYsIHR1bi90YXApLlxuICBJZiB0aGUgbW9kaWZpZWQgY29kZSBpcyBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgKHNlZSBTZWN0aW9uIDIpLCBpdCBNVVNUIE5PVCBiZSBmdXp6ZWQsXG4gIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciBpdCBhZGRzIGFzc2VydGlvbnMgb3IgY29tcGxleCBsb2dpYy5cblxuLSBETyBOT1QgQkxJTkRMWSBUUlVTVCBcIk5PIEZVTkNUSU9OQUwgQ0hBTkdFXCIgKE5GQ0kpIE9SIFwiUkVGQUNUT1JJTkdcIiBDTEFJTVM6XG4gIFBhdGNoIGF1dGhvcnMgcm91dGluZWx5IGxhYmVsIGNoYW5nZXMgYXMgXCJjbGVhbnVwc1wiLCBcInJlZmFjdG9yaW5nc1wiLCBvciBzdGF0ZVxuICBcIk5vIGZ1bmN0aW9uYWwgY2hhbmdlIGludGVuZGVkXCIuIERvIE5PVCB0YWtlIHRoZXNlIGNsYWltcyBhdCBmYWNlIHZhbHVlLlxuICBDb2RlIHJlZmFjdG9yaW5ncyB0aGF0IHJlYXJyYW5nZSBsb2dpYywgaW50cm9kdWNlIGhlbHBlciBmdW5jdGlvbnMsIG9yIGFsdGVyIHN0YXRlIG1hbmFnZW1lbnRcbiAgaW4gY29yZSBzdWJzeXN0ZW1zIGZyZXF1ZW50bHkgaW50cm9kdWNlIHN1YnRsZSBzZW1hbnRpYyBzaGlmdHMgb3IgdW5jb3ZlciBsYXRlbnQga2VybmVsIGJ1Z3MuXG4gIElmIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUgaXMgbW9kaWZpZWQgb3IgcmVmYWN0b3JlZCwgaXQgTVVTVCBiZSBmdXp6ZWQuXG5cbi0gTkVXIE9SIE1PRElGSUVEIEFTU0VSVElPTlMgSU4gUkVBQ0hBQkxFIENPREUgTVVTVCBCRSBGVVpaRUQ6XG4gIFdoZW4gYSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzIHJ1bnRpbWUgY2hlY2tzIG9yIGFzc2VydGlvbnMgKGUuZy4sIFdBUk5fT04qLCBWTV9XQVJOX09OKixcbiAgQlVHX09OKiwgbG9ja2RlcF9hc3NlcnQqKSBpbiByZWFjaGFibGUgY29kZSBwYXRocywgaXQgZW5mb3JjZXMgbmV3IG9yIHN0cmljdGVyIGludmFyaWFudHMuXG4gIEV2ZW4gaWYgdGhlIGF1dGhvciBiZWxpZXZlcyB0aGUgaW52YXJpYW50IGFsd2F5cyBob2xkcywgZnV6emluZyBpcyBlc3NlbnRpYWwgdG8gdmVyaWZ5IHdoZXRoZXJcbiAgYW4gdW51c3VhbCBzZXF1ZW5jZSBvZiBvcGVyYXRpb25zIGNhbiB2aW9sYXRlIGl0LlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuMi4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPWZhbHNlIChORUdBVElWRSBDUklURVJJQSlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIE9OTFkgSUYgYWxsIG1vZGlmaWVkIGNvZGUgZmFsbHMgc3RyaWN0bHkgaW50byBvbmUgb3IgbW9yZSBvZiB0aGVzZSBjYXRlZ29yaWVzOlxuXG4tIE5vbi1rZXJuZWwgYW5kIG5vbi1leGVjdXRhYmxlIGNoYW5nZXM6XG4gICogTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgY29tbWVudHMsIG9yIHNwZWxsaW5nIGZpeGVzLlxuICAqIFVzZXItc3BhY2UgZGlyZWN0b3JpZXMsIHNlbGYtdGVzdHMsIHNhbXBsZXMsIG9yIHNjcmlwdHMgKGUuZy4sIHRvb2xzLywgc2FtcGxlcy8sIHNjcmlwdHMvLCB1c3IvKVxuICAgIHRoYXQgZG8gbm90IGFmZmVjdCB0aGUgY29tcGlsZWQga2VybmVsIGltYWdlICh2bWxpbnV4KSBvciBrZXJuZWwgbW9kdWxlcy5cbiAgKiBQdXJlbHkgZGVjb3JhdGl2ZSBsb2dnaW5nIChlLmcuLCBtZXNzYWdlIHN0cmluZ3MgaW4gcHJfZXJyLCBwcmludGssIGRldl9pbmZvKSBvciB0cmFjZXBvaW50c1xuICAgIHRoYXQgZG8gbm90IGFsdGVyIGNvbnRyb2wgZmxvdyBvciBkYXRhIHN0cnVjdHVyZXMuXG4gICogQnVpbGQgc3lzdGVtIG9yIEtjb25maWcgY2hhbmdlcyB0aGF0IGRvIG5vdCBhbHRlciBjb21waWxlZCBDIGxvZ2ljLlxuLSBTdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgaGFyZHdhcmU6XG4gICogVmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoZXMsIFNtYXJ0TklDcywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICAgIGlvbmljLCBhbWRncHUpIHJlcXVpcmluZyBwaHlzaWNhbCBBU0lDL1BDSWUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG4tIFVucmVhY2hhYmxlIGV4ZWN1dGlvbiBwYXRoczpcbiAgKiBEcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzICgucmVtb3ZlLCAuc2h1dGRvd24sIHBjaV91bnJlZ2lzdGVyX2RyaXZlcikgZXhlY3V0ZWQgb25seSBkdXJpbmdcbiAgICBwaHlzaWNhbCBQQ0kgaG90LXVucGx1ZyBvciBtYW51YWwgc3lzZnMgZHJpdmVyIHVuYmluZGluZy5cbiAgKiBDb2RlIHBhdGhzIGV4Y2x1c2l2ZSB0byBhcmNoaXRlY3R1cmVzIG90aGVyIHRoYW4gdGhlIHRhcmdldCBhcmNoaXRlY3R1cmUuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4zLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9dHJ1ZSAoUE9TSVRJVkUgQ1JJVEVSSUEpXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuUmV0dXJuIFdvcnRoRnV6emluZz10cnVlIHdoZW5ldmVyIHRoZSBwYXRjaCB0b3VjaGVzIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUsIGluY2x1ZGluZzpcbi0gQ29yZSBTdWJzeXN0ZW1zOlxuICAqIEFueSBsb2dpYyBtb2RpZmljYXRpb25zIGluIG1lbW9yeSBtYW5hZ2VtZW50IChtbS8pLCBzeW5jaHJvbml6YXRpb24vbG9ja2luZyAoa2VybmVsL2xvY2tpbmcvKSxcbiAgICBCUEYsIHNjaGVkdWxlciwgY29yZSBuZXR3b3JraW5nLCBWRlMsIG9yIHN5c2NhbGwgaGFuZGxpbmcuXG4tIFJlZmFjdG9yaW5ncyBhbmQgQ29kZSBDbGVhbnVwczpcbiAgKiBBbnkgcmVzdHJ1Y3R1cmluZyBvZiByZWFjaGFibGUgZGF0YSBzdHJ1Y3R1cmVzLCBoZWxwZXIgYWJzdHJhY3Rpb25zLCBvciBhbGdvcml0aG0gZmxvd3MuXG4tIFJ1bnRpbWUgQXNzZXJ0aW9ucyBhbmQgRGVmZW5zaXZlIENoZWNrczpcbiAgKiBBbnkgaW50cm9kdWN0aW9uIG9yIGFsdGVyYXRpb24gb2YgYXNzZXJ0aW9ucyAoV0FSTl9PTiosIFZNX1dBUk5fT04qLCBCVUdfT04qLCBldGMuKSBpbiByZWFjaGFibGUgcGF0aHMuXG4tIFJlYWNoYWJsZSBEcml2ZXJzIGFuZCBQcm90b2NvbHM6XG4gICogRHJpdmVycyBhY2Nlc3NpYmxlIHZpYSB2aXJ0dWFsIGJ1c2VzICh2aXJ0aW8sIFVTQiBnYWRnZXQsIGxvb3BiYWNrLCBuZXRsaW5rLCBiaW5kZXIsIHNvY2tldHMsIGV0Yy4pLlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuNC4gRVhUUkFDVElORyBGb2N1c1N5bWJvbHMgKFBSRVZFTlRJTkcgRElMVVRJT04pXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuV2hlbiBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IG11c3QgZXh0cmFjdCBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIGludG8gRm9jdXNTeW1ib2xzIHRvIGd1aWRlIHRoZSBmdXp6ZXI6XG5cbi0gQVZPSUQgVUJJUVVJVE9VUyBMSUZFQ1lDTEUgSE9ULVBBVEhTOlxuICBEbyBOT1QgbGlzdCBnZW5lcmljLCB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYWxsZWQgYnkgYWxtb3N0IGV2ZXJ5IHByb2dyYW0gaW4gdGhlIGNvcnB1c1xuICAoaW5jbHVkaW5nLCBidXQgbm90IGxpbWl0ZWQgdG86IGdlbmVyYWwgbWVtb3J5IGFsbG9jYXRvcnMgYW5kIGRlYWxsb2NhdG9ycywgcGFnZSBmYXVsdFxuICBhbmQgdHJhcCBoYW5kbGVycywgb3IgY29yZSBzeW5jaHJvbml6YXRpb24gcHJpbWl0aXZlczsgdGhpcyBpcyBub3QgYW4gZXhoYXVzdGl2ZSBsaXN0KS5cbiAgTGlzdGluZyB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYXVzZXMgdGhlIGZ1enplciB0byBjbGFzc2lmeSB0aG91c2FuZHMgb2YgdW5yZWxhdGVkIHRlc3RzIGFzIFwiZm9jdXNlZFwiLFxuICB3aGljaCBzZXZlcmVseSBkaWx1dGVzIGZ1enppbmcgZWZmb3J0IGF3YXkgZnJvbSB0aGUgYWN0dWFsIGNoYW5nZXMuXG5cbi0gVEFSR0VUIFNQRUNJRklDIEZFQVRVUkUgTE9HSUMgQU5EIEVOVFJZUE9JTlRTOlxuICBMaXN0IGZ1bmN0aW9ucyB0aGF0IHNwZWNpZmljYWxseSBpbXBsZW1lbnQgdGhlIGxvZ2ljIGJlaW5nIGFkZGVkIG9yIGFsdGVyZWQsIG9yIGRpcmVjdCBBUEkgZW50cnlwb2ludHNcbiAgZm9yIHRoZSBzdWJzeXN0ZW0gZmVhdHVyZSB1bmRlciByZXZpZXcuXG5cbi0gSEFORExJTkcgU1RBVElDIElOTElORSBGVU5DVElPTlMgSU4gSEVBREVSUyAoLmgpOlxuICBDb21waWxlci1pbmxpbmVkIHN0YXRpYyBmdW5jdGlvbnMgKHN1Y2ggYXMgc3RhdGljIGlubGluZXMgaW4gbW0vKi5oIG9yIGluY2x1ZGUvbGludXgvKi5oKSBsYWNrXG4gIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMgaW4gdm1saW51eCBhbmQgY2Fubm90IGJlIHRhcmdldGVkIGRpcmVjdGx5IGJ5IHN5bWJvbCBjb3ZlcmFnZSBmaWx0ZXJzLlxuICBJZiB0aGUgY2hhbmdlcyBhcmUgcHJpbWFyaWx5IGluIHN0YXRpYyBpbmxpbmUgaGVscGVycywgaWRlbnRpZnkgbm9uLXN0YXRpYywgZmVhdHVyZS1zcGVjaWZpYyBjYWxsZXJcbiAgZnVuY3Rpb25zIGluIC5jIGZpbGVzIHRoYXQgZXhlcmNpc2UgdGhlbSAoYXZvaWRpbmcgdWJpcXVpdG91cyBsaWZlY3ljbGUgd3JhcHBlcnMpLlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuNS4gSURFTlRJRllJTkcgRW5hYmxlQ29uZmlnc1xuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbklkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgY29tcGlsZSBhbmQgcmVhY2ggdGhlIG1vZGlmaWVkIGNvZGU6XG4tIEluc3BlY3QgS2NvbmZpZyBmaWxlcyBhbmQgI2lmZGVmIGd1YXJkczsgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4tIENoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncyBuZWVkZWQuXG4tIFN0cmlwIGFueSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJUYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NFxuXG5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCA1NWI1ZWQ2MTY4YjhlMjliYTY3ODA5MjgyNWQ2NjY5MGZjYTIwNzJiXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFR1ZSBTZXAgMTUgMTI6NTk6MjYgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9tbS92bXNjYW4uYyBiL21tL3Ztc2Nhbi5jXG5pbmRleCA1MzU0ZWI4ZDNhMDdiLi4xOGM0ZDM1OTU3NDk3IDEwMDY0NFxuLS0tIGEvbW0vdm1zY2FuLmNcbisrKyBiL21tL3Ztc2Nhbi5jXG5AQCAtNTgyNyw2ICs1ODI3LDkgQEAgc3RhdGljIGludCBydW5fYWdpbmcoc3RydWN0IGxydXZlYyAqbHJ1dmVjLCB1bnNpZ25lZCBsb25nIHNlcSxcbiB7XG4gXHRERUZJTkVfTUFYX1NFUShscnV2ZWMpO1xuIFxuK1x0aWYgKHNlcSBcdTAwM2MgbWF4X3NlcSlcbitcdFx0cmV0dXJuIDA7XG4rXG4gXHRpZiAoc2VxIFx1MDAzZSBtYXhfc2VxKVxuIFx0XHRyZXR1cm4gLUVJTlZBTDtcbiBcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE1VDEyOjU5OjI3LjM3MjU2NzgzWiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6MTM3MDE2NTA1NDQ1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgdm1zY2FuLmMgUGF0Y2gqKlxuXG5Pa2F5LCBzbyB0aGlzIHBhdGNoIGlzIHRvdWNoaW5nIGBtbS92bXNjYW4uY2AuIEltbWVkaWF0ZWx5LCBteSBleHBlcnQgYnJhaW4gZ29lcyBpbnRvIFwiaW5zcGVjdGlvbiBtb2RlLlwiIExldCdzIHN0YXJ0IHdpdGggYSBxdWljayBvdmVydmlldyBvZiB0aGUgY2hhbmdlLiBJIG5lZWQgdG8gZ2V0IGEgZmVlbCBmb3Igd2hhdCdzIGJlaW5nIGFsdGVyZWQgaW4gdGhpcyBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IGZpbGUuIEknbSB0aGlua2luZyBzcGVjaWZpY2FsbHkgYXJvdW5kIGxpbmUgNTgyNyDigJMgdGhhdCdzIG9mdGVuIGEgZ29vZCBzdGFydGluZyBwb2ludCBmb3IgdW5kZXJzdGFuZGluZyBhIHRhcmdldGVkIGNoYW5nZSwgYW5kIHVzdWFsbHkgYSBoZWxwZnVsIGxpbmUgbnVtYmVyIGdpdmVuLlxuXG5Gb3J0dW5hdGVseSwgSSBoYXZlIG15IGFyc2VuYWwgb2YgdG9vbHMgYXQgdGhlIHJlYWR5LiBJJ2xsIHJlYWNoIGZvciBgcmVhZC1maWxlYCB0byBncmFiIHRoYXQgc3BlY2lmaWMgc2VjdGlvbiBvZiBgbW0vdm1zY2FuLmNgLiBJdCdzIG11Y2ggZmFzdGVyIHRoYW4gbWFudWFsbHkgc2lmdGluZyB0aHJvdWdoIHRoZSBmaWxlLCBhbmQgZWFzaWVyIHRvIGFic29yYiB0aGUgY29udGV4dCB0aGF0IHdheS4gSSdsbCBhbHNvIHdhbnQgdG8gc3RhcnQgdGhpbmtpbmcgaG93IGBncmVwcGVyYCBtaWdodCBiZSB1c2VmdWwgaWYgSSBzdGFydCBnZXR0aW5nIHN0dWNrLiBJJ2xsIGtlZXAgdGhhdCBpbiBteSBiYWNrIHBvY2tldC5cblxuXG4iLCJJbnB1dFRva2VucyI6MjgzMywiT3V0cHV0VG9rZW5zIjozNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjgxLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTVUMTM6MDE6NDQuMzg5MDc2MzE1WiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDI2OTQwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm1tL3Ztc2Nhbi5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDU4MTAsXG4gIFwiTGluZUNvdW50XCI6IDUwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjU4MTA6XFx0XFxuNTgxMTpcXHRcXHRcXHRpZiAoZnVsbClcXG41ODEyOlxcdFxcdFxcdFxcdGxydV9nZW5fc2VxX3Nob3dfZnVsbChtLCBscnV2ZWMsIG1heF9zZXEsIG1pbl9zZXEsIHNlcSk7XFxuNTgxMzpcXHRcXHR9XFxuNTgxNDpcXHRcXG41ODE1OlxcdFxcdHJldHVybiAwO1xcbjU4MTY6XFx0fVxcbjU4MTc6XFx0XFxuNTgxODpcXHRzdGF0aWMgY29uc3Qgc3RydWN0IHNlcV9vcGVyYXRpb25zIGxydV9nZW5fc2VxX29wcyA9IHtcXG41ODE5OlxcdFxcdC5zdGFydCA9IGxydV9nZW5fc2VxX3N0YXJ0LFxcbjU4MjA6XFx0XFx0LnN0b3AgPSBscnVfZ2VuX3NlcV9zdG9wLFxcbjU4MjE6XFx0XFx0Lm5leHQgPSBscnVfZ2VuX3NlcV9uZXh0LFxcbjU4MjI6XFx0XFx0LnNob3cgPSBscnVfZ2VuX3NlcV9zaG93LFxcbjU4MjM6XFx0fTtcXG41ODI0OlxcdFxcbjU4MjU6XFx0c3RhdGljIGludCBydW5fYWdpbmcoc3RydWN0IGxydXZlYyAqbHJ1dmVjLCB1bnNpZ25lZCBsb25nIHNlcSxcXG41ODI2OlxcdFxcdFxcdCAgICAgaW50IHN3YXBwaW5lc3MsIGJvb2wgZm9yY2Vfc2NhbilcXG41ODI3OlxcdHtcXG41ODI4OlxcdFxcdERFRklORV9NQVhfU0VRKGxydXZlYyk7XFxuNTgyOTpcXHRcXG41ODMwOlxcdFxcdGlmIChzZXEgXFx1MDAzYyBtYXhfc2VxKVxcbjU4MzE6XFx0XFx0XFx0cmV0dXJuIDA7XFxuNTgzMjpcXHRcXG41ODMzOlxcdFxcdGlmIChzZXEgXFx1MDAzZSBtYXhfc2VxKVxcbjU4MzQ6XFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuNTgzNTpcXHRcXG41ODM2OlxcdFxcdHJldHVybiB0cnlfdG9faW5jX21heF9zZXEobHJ1dmVjLCBtYXhfc2VxLCBzd2FwcGluZXNzLCBmb3JjZV9zY2FuKSA/IDAgOiAtRUVYSVNUO1xcbjU4Mzc6XFx0fVxcbjU4Mzg6XFx0XFxuNTgzOTpcXHRzdGF0aWMgaW50IHJ1bl9ldmljdGlvbihzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIHVuc2lnbmVkIGxvbmcgc2VxLCBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYyxcXG41ODQwOlxcdFxcdFxcdFxcdGludCBzd2FwcGluZXNzLCB1bnNpZ25lZCBsb25nIG5yX3RvX3JlY2xhaW0pXFxuNTg0MTpcXHR7XFxuNTg0MjpcXHRcXHRpbnQgbnJfYmF0Y2g7XFxuNTg0MzpcXHRcXHRERUZJTkVfTUFYX1NFUShscnV2ZWMpO1xcbjU4NDQ6XFx0XFxuNTg0NTpcXHRcXHRpZiAoc2VxICsgTUlOX05SX0dFTlMgXFx1MDAzZSBtYXhfc2VxKVxcbjU4NDY6XFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuNTg0NzpcXHRcXG41ODQ4OlxcdFxcdHNjLVxcdTAwM2Vucl9yZWNsYWltZWQgPSAwO1xcbjU4NDk6XFx0XFxuNTg1MDpcXHRcXHR3aGlsZSAoIXNpZ25hbF9wZW5kaW5nKGN1cnJlbnQpKSB7XFxuNTg1MTpcXHRcXHRcXHRERUZJTkVfTUlOX1NFUShscnV2ZWMpO1xcbjU4NTI6XFx0XFxuNTg1MzpcXHRcXHRcXHRpZiAoc2VxIFxcdTAwM2MgZXZpY3RhYmxlX21pbl9zZXEobWluX3NlcSwgc3dhcHBpbmVzcykpXFxuNTg1NDpcXHRcXHRcXHRcXHRyZXR1cm4gMDtcXG41ODU1OlxcdFxcbjU4NTY6XFx0XFx0XFx0aWYgKHNjLVxcdTAwM2Vucl9yZWNsYWltZWQgXFx1MDAzZT0gbnJfdG9fcmVjbGFpbSlcXG41ODU3OlxcdFxcdFxcdFxcdHJldHVybiAwO1xcbjU4NTg6XFx0XFxuNTg1OTpcXHRcXHRcXHRucl9iYXRjaCA9IG1pbihucl90b19yZWNsYWltIC0gc2MtXFx1MDAzZW5yX3JlY2xhaW1lZCwgTUFYX0xSVV9CQVRDSCk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE1VDEzOjAxOjQ0LjM4OTUwNDk2NVoiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjkyNzcxNDg4OTEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqSW52ZXN0aWdhdGluZyB0aGUgYHJ1bl9hZ2luZ2AgRnVuY3Rpb24qKlxuXG5BbHJpZ2h0LCBsZXQncyBkaXZlIGludG8gdGhpcyBgcnVuX2FnaW5nYCBmdW5jdGlvbi4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXRzIGNhbGwgc2l0ZXMgYW5kIGludGVybmFsIHdvcmtpbmdzLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gdHJhY2UgaXRzIGV4ZWN1dGlvbiBwYXRoLiBJJ2xsIHN0YXJ0IHdpdGggYSBzdHJhaWdodGZvcndhcmQgYXBwcm9hY2g6IEknbGwgdXNlIGBncmVwYCB3aXRoaW4gdGhlIGBtbS92bXNjYW4uY2AgZmlsZSB0byBpZGVudGlmeSBldmVyeSBpbnN0YW5jZSB3aGVyZSBgcnVuX2FnaW5nYCBpcyBpbnZva2VkLiBUaGlzIHdpbGwgZ2l2ZSBtZSBhIGNsZWFyIHBpY3R1cmUgb2YgaG93IHRoaXMgZnVuY3Rpb24gZml0cyBpbnRvIHRoZSBvdmVyYWxsIG1lbW9yeSBtYW5hZ2VtZW50IHNjaGVtZS4gRnJvbSB0aGVyZSwgSSBjYW4gYmVnaW4gYW5hbHl6aW5nIGl0cyBmdW5jdGlvbmFsaXR5IGluIGdyZWF0ZXIgZGV0YWlsLCBiYXNlZCBvbiBpdHMgY29udGV4dCB3aXRoaW4gdGhlIGNhbGxpbmcgY29kZS4gVGhpcyBpcyBhIHN0YW5kYXJkIGluaXRpYWwgZGlhZ25vc3RpYyBzdGVwIGZvciBhbnkga2VybmVsLWxldmVsIGludmVzdGlnYXRpb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjM4ODcsIk91dHB1dFRva2VucyI6MjksIk91dHB1dFRob3VnaHRzVG9rZW5zIjozNywiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE1VDEzOjAxOjUzLjY2NjY1Njg1NloiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1MDUxODY0OTIsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwicnVuX2FnaW5nXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL3Ztc2Nhbi5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL3Ztc2Nhbi5jPTUwMTY9c3RhdGljIGludCBldmljdF9mb2xpb3ModW5zaWduZWQgbG9uZyBucl90b19zY2FuLCBzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsXFxuLS1cXG5tbS92bXNjYW4uYy01MTExLVxcbm1tL3Ztc2Nhbi5jOjUxMTI6c3RhdGljIGJvb2wgc2hvdWxkX3J1bl9hZ2luZyhzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIHVuc2lnbmVkIGxvbmcgbWF4X3NlcSxcXG5tbS92bXNjYW4uYy01MTEzLVxcdFxcdFxcdCAgICAgc3RydWN0IHNjYW5fY29udHJvbCAqc2MsIGludCBzd2FwcGluZXNzKVxcbi0tXFxubW0vdm1zY2FuLmM9NTE5NT1zdGF0aWMgYm9vbCB0cnlfdG9fc2hyaW5rX2xydXZlYyhzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjKVxcbi0tXFxubW0vdm1zY2FuLmMtNTIxMS1cXG5tbS92bXNjYW4uYzo1MjEyOlxcdFxcdGlmIChzaG91bGRfcnVuX2FnaW5nKGxydXZlYywgbWF4X3NlcSwgc2MsIHN3YXBwaW5lc3MpKSB7XFxubW0vdm1zY2FuLmMtNTIxMy1cXHRcXHRcXHRpZiAodHJ5X3RvX2luY19tYXhfc2VxKGxydXZlYywgbWF4X3NlcSwgc3dhcHBpbmVzcywgZmFsc2UpKVxcbi0tXFxubW0vdm1zY2FuLmM9NTgxOD1zdGF0aWMgY29uc3Qgc3RydWN0IHNlcV9vcGVyYXRpb25zIGxydV9nZW5fc2VxX29wcyA9IHtcXG4tLVxcbm1tL3Ztc2Nhbi5jLTU4MjQtXFxubW0vdm1zY2FuLmM6NTgyNTpzdGF0aWMgaW50IHJ1bl9hZ2luZyhzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIHVuc2lnbmVkIGxvbmcgc2VxLFxcbm1tL3Ztc2Nhbi5jLTU4MjYtXFx0XFx0ICAgICBpbnQgc3dhcHBpbmVzcywgYm9vbCBmb3JjZV9zY2FuKVxcbi0tXFxubW0vdm1zY2FuLmM9NTg2OT1zdGF0aWMgaW50IHJ1bl9jbWQoY2hhciBjbWQsIHU2NCBtZW1jZ19pZCwgaW50IG5pZCwgdW5zaWduZWQgbG9uZyBzZXEsXFxuLS1cXG5tbS92bXNjYW4uYy01ODk3LVxcdGNhc2UgJysnOlxcbm1tL3Ztc2Nhbi5jOjU4OTg6XFx0XFx0ZXJyID0gcnVuX2FnaW5nKGxydXZlYywgc2VxLCBzd2FwcGluZXNzLCBvcHQpO1xcbm1tL3Ztc2Nhbi5jLTU4OTktXFx0XFx0YnJlYWs7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE1VDEzOjAxOjU0LjE3MTg1MzIyOFoiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjI0NDE2MTE5MDA3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdCByZXF1ZXN0LCBmb3JtYXR0ZWQgYXMgcmVxdWVzdGVkOlxuXG4qKk5hdmlnYXRpbmcgdGhlIENvZGViYXNlKipcblxuQWxyaWdodCwgbGV0J3MgZGl2ZSBpbi4gSXQgbG9va3MgbGlrZSB3ZSBuZWVkIHRvIGV4YW1pbmUgdGhlIGBydW5fY21kYCBmdW5jdGlvbiwgc3BlY2lmaWNhbGx5IGZvY3VzaW5nIG9uIGEgc2VjdGlvbiBvZiB0aGUgY29kZSBiZXR3ZWVuIGxpbmVzIDU4NjkgYW5kIDU5NTAuIFRvIGdldCBhIGJldHRlciBncmFzcCBvZiB0aGUgY29udGV4dCwgSSB0aGluayBpdCdzIHdpc2UgdG8gZXhwYW5kIHRoZSBzY29wZSBhIGJpdC4gSSdsbCByZWFkIGZyb20gcm91Z2hseSBsaW5lIDU4NjAgdG8gNTk2MC4gVGhhdCBzaG91bGQgZ2l2ZSB1cyBhIGdvb2QgdmlldyBvZiB0aGUgc3Vycm91bmRpbmcgbG9naWMgYW5kIGhvdyBgcnVuX2NtZGAgaXMgYmVpbmcgdXNlZCBpbiB0aGF0IHNwZWNpZmljIHBhcnQgb2YgdGhlIHByb2dyYW0uIEknbSBob3BpbmcgdG8gdW5kZXJzdGFuZCB0aGUgZmxvdywgdGhlIGlucHV0cywgYW5kIHRoZSBvdXRwdXRzIGluIGRldGFpbCwgc28gSSBjYW4gYWNjdXJhdGVseSBhc3Nlc3MgdGhlIGZ1bmN0aW9uYWxpdHkgYW5kIGFueSBwb3RlbnRpYWwgaXNzdWVzIG9yIGltcHJvdmVtZW50cy5cblxuXG4iLCJJbnB1dFRva2VucyI6NDU2NywiT3V0cHV0VG9rZW5zIjozNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQxLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE1VDEzOjAyOjE4LjU4Nzk3NTA1NVoiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI4NjE4MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJtbS92bXNjYW4uY1wiLFxuICBcIkZpcnN0TGluZVwiOiA1ODYwLFxuICBcIkxpbmVDb3VudFwiOiA4MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCI1ODYwOlxcdFxcdFxcdGlmICghZXZpY3RfZm9saW9zKG5yX2JhdGNoLCBscnV2ZWMsIHNjLCBzd2FwcGluZXNzKSlcXG41ODYxOlxcdFxcdFxcdFxcdHJldHVybiAwO1xcbjU4NjI6XFx0XFxuNTg2MzpcXHRcXHRcXHRjb25kX3Jlc2NoZWQoKTtcXG41ODY0OlxcdFxcdH1cXG41ODY1OlxcdFxcbjU4NjY6XFx0XFx0cmV0dXJuIC1FSU5UUjtcXG41ODY3OlxcdH1cXG41ODY4OlxcdFxcbjU4Njk6XFx0c3RhdGljIGludCBydW5fY21kKGNoYXIgY21kLCB1NjQgbWVtY2dfaWQsIGludCBuaWQsIHVuc2lnbmVkIGxvbmcgc2VxLFxcbjU4NzA6XFx0XFx0XFx0ICAgc3RydWN0IHNjYW5fY29udHJvbCAqc2MsIGludCBzd2FwcGluZXNzLCB1bnNpZ25lZCBsb25nIG9wdClcXG41ODcxOlxcdHtcXG41ODcyOlxcdFxcdHN0cnVjdCBscnV2ZWMgKmxydXZlYztcXG41ODczOlxcdFxcdGludCBlcnIgPSAtRUlOVkFMO1xcbjU4NzQ6XFx0XFx0c3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnID0gTlVMTDtcXG41ODc1OlxcdFxcbjU4NzY6XFx0XFx0aWYgKG5pZCBcXHUwMDNjIDAgfHwgbmlkIFxcdTAwM2U9IE1BWF9OVU1OT0RFUyB8fCAhbm9kZV9zdGF0ZShuaWQsIE5fTUVNT1JZKSlcXG41ODc3OlxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbjU4Nzg6XFx0XFxuNTg3OTpcXHRcXHRpZiAoIW1lbV9jZ3JvdXBfZGlzYWJsZWQoKSkge1xcbjU4ODA6XFx0XFx0XFx0bWVtY2cgPSBtZW1fY2dyb3VwX2dldF9mcm9tX2lkKG1lbWNnX2lkKTtcXG41ODgxOlxcdFxcdFxcdGlmICghbWVtY2cpXFxuNTg4MjpcXHRcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG41ODgzOlxcdFxcdH1cXG41ODg0OlxcdFxcbjU4ODU6XFx0XFx0aWYgKG1lbWNnX2lkICE9IG1lbV9jZ3JvdXBfaWQobWVtY2cpKVxcbjU4ODY6XFx0XFx0XFx0Z290byBkb25lO1xcbjU4ODc6XFx0XFxuNTg4ODpcXHRcXHRzYy1cXHUwMDNldGFyZ2V0X21lbV9jZ3JvdXAgPSBtZW1jZztcXG41ODg5OlxcdFxcdGxydXZlYyA9IGdldF9scnV2ZWMobWVtY2csIG5pZCk7XFxuNTg5MDpcXHRcXG41ODkxOlxcdFxcdGlmIChzd2FwcGluZXNzIFxcdTAwM2MgTUlOX1NXQVBQSU5FU1MpXFxuNTg5MjpcXHRcXHRcXHRzd2FwcGluZXNzID0gZ2V0X3N3YXBwaW5lc3MobHJ1dmVjLCBzYyk7XFxuNTg5MzpcXHRcXHRlbHNlIGlmIChzd2FwcGluZXNzIFxcdTAwM2UgU1dBUFBJTkVTU19BTk9OX09OTFkpXFxuNTg5NDpcXHRcXHRcXHRnb3RvIGRvbmU7XFxuNTg5NTpcXHRcXG41ODk2OlxcdFxcdHN3aXRjaCAoY21kKSB7XFxuNTg5NzpcXHRcXHRjYXNlICcrJzpcXG41ODk4OlxcdFxcdFxcdGVyciA9IHJ1bl9hZ2luZyhscnV2ZWMsIHNlcSwgc3dhcHBpbmVzcywgb3B0KTtcXG41ODk5OlxcdFxcdFxcdGJyZWFrO1xcbjU5MDA6XFx0XFx0Y2FzZSAnLSc6XFxuNTkwMTpcXHRcXHRcXHRlcnIgPSBydW5fZXZpY3Rpb24obHJ1dmVjLCBzZXEsIHNjLCBzd2FwcGluZXNzLCBvcHQpO1xcbjU5MDI6XFx0XFx0XFx0YnJlYWs7XFxuNTkwMzpcXHRcXHR9XFxuNTkwNDpcXHRkb25lOlxcbjU5MDU6XFx0XFx0bWVtX2Nncm91cF9wdXQobWVtY2cpO1xcbjU5MDY6XFx0XFxuNTkwNzpcXHRcXHRyZXR1cm4gZXJyO1xcbjU5MDg6XFx0fVxcbjU5MDk6XFx0XFxuNTkxMDpcXHQvKiBzZWUgRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9tbS9tdWx0aWdlbl9scnUucnN0IGZvciBkZXRhaWxzICovXFxuNTkxMTpcXHRzdGF0aWMgc3NpemVfdCBscnVfZ2VuX3NlcV93cml0ZShzdHJ1Y3QgZmlsZSAqZmlsZSwgY29uc3QgY2hhciBfX3VzZXIgKnNyYyxcXG41OTEyOlxcdFxcdFxcdFxcdFxcdCBzaXplX3QgbGVuLCBsb2ZmX3QgKnBvcylcXG41OTEzOlxcdHtcXG41OTE0OlxcdFxcdHZvaWQgKmJ1ZjtcXG41OTE1OlxcdFxcdGNoYXIgKmN1ciwgKm5leHQ7XFxuNTkxNjpcXHRcXHR1bnNpZ25lZCBpbnQgZmxhZ3M7XFxuNTkxNzpcXHRcXHRzdHJ1Y3QgYmxrX3BsdWcgcGx1ZztcXG41OTE4OlxcdFxcdGludCBlcnIgPSAtRUlOVkFMO1xcbjU5MTk6XFx0XFx0c3RydWN0IHNjYW5fY29udHJvbCBzYyA9IHtcXG41OTIwOlxcdFxcdFxcdC5tYXlfd3JpdGVwYWdlID0gdHJ1ZSxcXG41OTIxOlxcdFxcdFxcdC5tYXlfdW5tYXAgPSB0cnVlLFxcbjU5MjI6XFx0XFx0XFx0Lm1heV9zd2FwID0gdHJ1ZSxcXG41OTIzOlxcdFxcdFxcdC5yZWNsYWltX2lkeCA9IE1BWF9OUl9aT05FUyAtIDEsXFxuNTkyNDpcXHRcXHRcXHQuZ2ZwX21hc2sgPSBHRlBfS0VSTkVMLFxcbjU5MjU6XFx0XFx0XFx0LnByb2FjdGl2ZSA9IHRydWUsXFxuNTkyNjpcXHRcXHR9O1xcbjU5Mjc6XFx0XFxuNTkyODpcXHRcXHRidWYgPSBrdm1hbGxvYyhsZW4gKyAxLCBHRlBfS0VSTkVMKTtcXG41OTI5OlxcdFxcdGlmICghYnVmKVxcbjU5MzA6XFx0XFx0XFx0cmV0dXJuIC1FTk9NRU07XFxuNTkzMTpcXHRcXG41OTMyOlxcdFxcdGlmIChjb3B5X2Zyb21fdXNlcihidWYsIHNyYywgbGVuKSkge1xcbjU5MzM6XFx0XFx0XFx0a3ZmcmVlKGJ1Zik7XFxuNTkzNDpcXHRcXHRcXHRyZXR1cm4gLUVGQVVMVDtcXG41OTM1OlxcdFxcdH1cXG41OTM2OlxcdFxcbjU5Mzc6XFx0XFx0c2V0X3Rhc2tfcmVjbGFpbV9zdGF0ZShjdXJyZW50LCBcXHUwMDI2c2MucmVjbGFpbV9zdGF0ZSk7XFxuNTkzODpcXHRcXHRmbGFncyA9IG1lbWFsbG9jX25vcmVjbGFpbV9zYXZlKCk7XFxuNTkzOTpcXHRcXHRibGtfc3RhcnRfcGx1ZyhcXHUwMDI2cGx1Zyk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE1VDEzOjAyOjE4LjU4ODI2MzA1NVoiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjEyNTAwMzgxMzI4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkludmVzdGlnYXRpbmcgdGhlIGBscnVfZ2VuX3NlcV93cml0ZWAgV3JpdGUgSGFuZGxlcioqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IGBscnVfZ2VuX3NlcV93cml0ZWAuIE15IGluaXRpYWwgaHVuY2ggaXMgdGhhdCBpdCdzIGEgd3JpdGUgaGFuZGxlciBhc3NvY2lhdGVkIHdpdGggb25lIG9mIHRoZSBkZWJ1ZywgcHJvYywgb3Igc3lzZnMgZmlsZSBzeXN0ZW1zLiBUaGF0IHNvdW5kcyByaWdodCwgZ2l2ZW4gdGhlIG5hbWluZyBjb252ZW50aW9uLiBOb3csIHRvIGJlIHN1cmUsIGFuZCB0byB1bmRlcnN0YW5kICpob3cqIGl0J3MgYmVpbmcgdXNlZCwgSSBuZWVkIHRvIHNlZSB3aGVyZSBpdCdzIGRlZmluZWQgYW5kLCBjcml0aWNhbGx5LCB3aGVyZSBpdCdzIHVzZWQuIEknbGwgbmVlZCB0byB0cmFjZSBpdHMgcmVmZXJlbmNlcy4gSSdsbCBza2lwIHRoZSBkZWZpbml0aW9ucywgSSdtIGFscmVhZHkgYXdhcmUgb2YgdGhvc2UgZnJvbSBvdGhlciBwYXJ0cyBvZiB0aGUgY29kZWJhc2UsIGFuZCBnbyBzdHJhaWdodCB0byB0aGUgdXNhZ2VzLiBMZXQncyBzdGFydCBieSBsb29raW5nIGF0IGxpbmVzIDU5NDAgdGhyb3VnaCA2MDAwLiBUaGF0IHNob3VsZCBnaXZlIG1lIHRoZSBjb250ZXh0IEkgbmVlZCB0byBmaWd1cmUgb3V0IGl0cyBwdXJwb3NlIGFuZCBob3cgaXQgZml0cyBpbnRvIHRoZSBvdmVyYWxsIHNjaGVtZSBvZiB0aGluZ3MuIEhvcGVmdWxseSwgdGhvc2UgbGluZXMgd2lsbCBzaG93IG1lIGV4YWN0bHkgd2hhdCdzIGJlaW5nIHdyaXR0ZW4gdG8gdGhhdCBoYW5kbGVyIGFuZCAqd2h5Ki5cblxuXG4iLCJJbnB1dFRva2VucyI6NTk2NSwiT3V0cHV0VG9rZW5zIjozNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjY2LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTVUMTM6MDI6MzEuMDg4NjQ3MjgzWiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ1Njk5MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJtbS92bXNjYW4uY1wiLFxuICBcIkZpcnN0TGluZVwiOiA1OTQwLFxuICBcIkxpbmVDb3VudFwiOiA2MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCI1OTQwOlxcdFxcdGlmICghc2V0X21tX3dhbGsoTlVMTCwgdHJ1ZSkpIHtcXG41OTQxOlxcdFxcdFxcdGVyciA9IC1FTk9NRU07XFxuNTk0MjpcXHRcXHRcXHRnb3RvIGRvbmU7XFxuNTk0MzpcXHRcXHR9XFxuNTk0NDpcXHRcXG41OTQ1OlxcdFxcdG5leHQgPSBidWY7XFxuNTk0NjpcXHRcXHRuZXh0W2xlbl0gPSAnXFxcXDAnO1xcbjU5NDc6XFx0XFxuNTk0ODpcXHRcXHR3aGlsZSAoKGN1ciA9IHN0cnNlcChcXHUwMDI2bmV4dCwgXFxcIiw7XFxcXG5cXFwiKSkpIHtcXG41OTQ5OlxcdFxcdFxcdGludCBuO1xcbjU5NTA6XFx0XFx0XFx0aW50IGVuZDtcXG41OTUxOlxcdFxcdFxcdGNoYXIgY21kLCBzd2FwX3N0cmluZ1s1XTtcXG41OTUyOlxcdFxcdFxcdHU2NCBtZW1jZ19pZDtcXG41OTUzOlxcdFxcdFxcdHVuc2lnbmVkIGludCBuaWQ7XFxuNTk1NDpcXHRcXHRcXHR1bnNpZ25lZCBsb25nIHNlcTtcXG41OTU1OlxcdFxcdFxcdHVuc2lnbmVkIGludCBzd2FwcGluZXNzO1xcbjU5NTY6XFx0XFx0XFx0dW5zaWduZWQgbG9uZyBvcHQgPSAtMTtcXG41OTU3OlxcdFxcbjU5NTg6XFx0XFx0XFx0Y3VyID0gc2tpcF9zcGFjZXMoY3VyKTtcXG41OTU5OlxcdFxcdFxcdGlmICghKmN1cilcXG41OTYwOlxcdFxcdFxcdFxcdGNvbnRpbnVlO1xcbjU5NjE6XFx0XFxuNTk2MjpcXHRcXHRcXHRuID0gc3NjYW5mKGN1ciwgXFxcIiVjICVsbHUgJXUgJWx1ICVuICU0cyAlbiAlbHUgJW5cXFwiLCBcXHUwMDI2Y21kLCBcXHUwMDI2bWVtY2dfaWQsIFxcdTAwMjZuaWQsXFxuNTk2MzpcXHRcXHRcXHRcXHQgICBcXHUwMDI2c2VxLCBcXHUwMDI2ZW5kLCBzd2FwX3N0cmluZywgXFx1MDAyNmVuZCwgXFx1MDAyNm9wdCwgXFx1MDAyNmVuZCk7XFxuNTk2NDpcXHRcXHRcXHRpZiAobiBcXHUwMDNjIDQgfHwgY3VyW2VuZF0pIHtcXG41OTY1OlxcdFxcdFxcdFxcdGVyciA9IC1FSU5WQUw7XFxuNTk2NjpcXHRcXHRcXHRcXHRicmVhaztcXG41OTY3OlxcdFxcdFxcdH1cXG41OTY4OlxcdFxcbjU5Njk6XFx0XFx0XFx0aWYgKG4gPT0gNCkge1xcbjU5NzA6XFx0XFx0XFx0XFx0c3dhcHBpbmVzcyA9IC0xO1xcbjU5NzE6XFx0XFx0XFx0fSBlbHNlIGlmICghc3RyY21wKFxcXCJtYXhcXFwiLCBzd2FwX3N0cmluZykpIHtcXG41OTcyOlxcdFxcdFxcdFxcdC8qIHNldCBieSB1c2Vyc3BhY2UgZm9yIGFub255bW91cyBtZW1vcnkgb25seSAqL1xcbjU5NzM6XFx0XFx0XFx0XFx0c3dhcHBpbmVzcyA9IFNXQVBQSU5FU1NfQU5PTl9PTkxZO1xcbjU5NzQ6XFx0XFx0XFx0fSBlbHNlIHtcXG41OTc1OlxcdFxcdFxcdFxcdGVyciA9IGtzdHJ0b3VpbnQoc3dhcF9zdHJpbmcsIDAsIFxcdTAwMjZzd2FwcGluZXNzKTtcXG41OTc2OlxcdFxcdFxcdFxcdGlmIChlcnIpXFxuNTk3NzpcXHRcXHRcXHRcXHRcXHRicmVhaztcXG41OTc4OlxcdFxcdFxcdH1cXG41OTc5OlxcdFxcbjU5ODA6XFx0XFx0XFx0ZXJyID0gcnVuX2NtZChjbWQsIG1lbWNnX2lkLCBuaWQsIHNlcSwgXFx1MDAyNnNjLCBzd2FwcGluZXNzLCBvcHQpO1xcbjU5ODE6XFx0XFx0XFx0aWYgKGVycilcXG41OTgyOlxcdFxcdFxcdFxcdGJyZWFrO1xcbjU5ODM6XFx0XFx0fVxcbjU5ODQ6XFx0ZG9uZTpcXG41OTg1OlxcdFxcdGNsZWFyX21tX3dhbGsoKTtcXG41OTg2OlxcdFxcdGJsa19maW5pc2hfcGx1ZyhcXHUwMDI2cGx1Zyk7XFxuNTk4NzpcXHRcXHRtZW1hbGxvY19ub3JlY2xhaW1fcmVzdG9yZShmbGFncyk7XFxuNTk4ODpcXHRcXHRzZXRfdGFza19yZWNsYWltX3N0YXRlKGN1cnJlbnQsIE5VTEwpO1xcbjU5ODk6XFx0XFxuNTk5MDpcXHRcXHRrdmZyZWUoYnVmKTtcXG41OTkxOlxcdFxcbjU5OTI6XFx0XFx0cmV0dXJuIGVyciA/IDogbGVuO1xcbjU5OTM6XFx0fVxcbjU5OTQ6XFx0XFxuNTk5NTpcXHRzdGF0aWMgaW50IGxydV9nZW5fc2VxX29wZW4oc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpXFxuNTk5NjpcXHR7XFxuNTk5NzpcXHRcXHRyZXR1cm4gc2VxX29wZW4oZmlsZSwgXFx1MDAyNmxydV9nZW5fc2VxX29wcyk7XFxuNTk5ODpcXHR9XFxuNTk5OTpcXHRcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTVUMTM6MDI6MzEuMDg5MTA3NTEzWiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjUxNDM0Nzk5MTMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBzdW1tYXJ5LCBhcyBpZiBJIHdlcmUgdGhpbmtpbmcgdGhlc2UgdGhvdWdodHM6XG5cbioqQW5hbHl6aW5nIGBscnVfZ2VuX3NlcV9vcGVuYCBhbmQgYGxydV9nZW5fc2VxX3dyaXRlYCBSZWdpc3RyYXRpb25zKipcblxuT2theSwgdGltZSB0byBkaWcgaW4uIE15IG9iamVjdGl2ZSBpcyB0byB1bmRlcnN0YW5kIGhvdyB0aGUgYGxydV9nZW5fc2VxX29wZW5gIGFuZCBgbHJ1X2dlbl9zZXFfd3JpdGVgIGZ1bmN0aW9ucyBhcmUgaW50ZWdyYXRlZCBpbnRvIHRoZSBzeXN0ZW0uIExldCdzIHN0YXJ0IGJ5IGZpZ3VyaW5nIG91dCAqd2hlcmUqIHRoZXkncmUgYWN0dWFsbHkgcmVnaXN0ZXJlZC4gSSBuZWVkIHRvIHRyYWNlIGJhY2sgdGhlaXIgdXNhZ2UuIEknbGwgbmVlZCB0byBsb2NhdGUgd2hlcmUgdGhlc2UgZnVuY3Rpb24gcG9pbnRlcnMgYXJlIGFzc2lnbmVkIG9yIHJlZmVyZW5jZWQuIEknbSBnb2luZyB0byBzY2FuIHRoZSBzb3VyY2UgY29kZSBhcm91bmQgbGluZSBudW1iZXJzIDYwMDAgdG8gNjA1MC4gVGhpcyBpcyBwcm9iYWJseSBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQsIGdpdmVuIHRoZSBjb250ZXh0LiBUaGF0IHJhbmdlIHNob3VsZCBnaXZlIG1lIGEgZ29vZCBpbml0aWFsIGxvb2sgYXQgdGhlIHN1cnJvdW5kaW5nIGNvZGUgYW5kIG1heWJlIHNvbWUgY2x1ZXMgYWJvdXQgdGhlIHJlZ2lzdHJhdGlvbiBwcm9jZXNzLiBIb3BlZnVsbHksIHRoaXMgc2VjdGlvbiB3aWxsIGNvbnRhaW4gdGhlIGZ1bmN0aW9uIGNhbGxzIHdoZXJlIHRoZXNlIGhvb2tzIGFyZSBzZXQuIExldCdzIGdldCB0byB3b3JrIVxuXG5cbiIsIklucHV0VG9rZW5zIjo3MTAzLCJPdXRwdXRUb2tlbnMiOjM1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDYsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xNVQxMzowMjozNi4yMzI1OTA2NTZaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDQ5MTAwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm1tL3Ztc2Nhbi5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDYwMDAsXG4gIFwiTGluZUNvdW50XCI6IDUwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjYwMDA6XFx0c3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgbHJ1X2dlbl9yd19mb3BzID0ge1xcbjYwMDE6XFx0XFx0Lm9wZW4gPSBscnVfZ2VuX3NlcV9vcGVuLFxcbjYwMDI6XFx0XFx0LnJlYWQgPSBzZXFfcmVhZCxcXG42MDAzOlxcdFxcdC53cml0ZSA9IGxydV9nZW5fc2VxX3dyaXRlLFxcbjYwMDQ6XFx0XFx0Lmxsc2VlayA9IHNlcV9sc2VlayxcXG42MDA1OlxcdFxcdC5yZWxlYXNlID0gc2VxX3JlbGVhc2UsXFxuNjAwNjpcXHR9O1xcbjYwMDc6XFx0XFxuNjAwODpcXHRzdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBscnVfZ2VuX3JvX2ZvcHMgPSB7XFxuNjAwOTpcXHRcXHQub3BlbiA9IGxydV9nZW5fc2VxX29wZW4sXFxuNjAxMDpcXHRcXHQucmVhZCA9IHNlcV9yZWFkLFxcbjYwMTE6XFx0XFx0Lmxsc2VlayA9IHNlcV9sc2VlayxcXG42MDEyOlxcdFxcdC5yZWxlYXNlID0gc2VxX3JlbGVhc2UsXFxuNjAxMzpcXHR9O1xcbjYwMTQ6XFx0XFxuNjAxNTpcXHQvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXFxuNjAxNjpcXHQgKiAgICAgICAgICAgICAgICAgICAgICAgICAgaW5pdGlhbGl6YXRpb25cXG42MDE3OlxcdCAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXFxuNjAxODpcXHRcXG42MDE5OlxcdHZvaWQgbHJ1X2dlbl9pbml0X3BnZGF0KHN0cnVjdCBwZ2xpc3RfZGF0YSAqcGdkYXQpXFxuNjAyMDpcXHR7XFxuNjAyMTpcXHRcXHRpbnQgaSwgajtcXG42MDIyOlxcdFxcbjYwMjM6XFx0XFx0c3Bpbl9sb2NrX2luaXQoXFx1MDAyNnBnZGF0LVxcdTAwM2VtZW1jZ19scnUubG9jayk7XFxuNjAyNDpcXHRcXG42MDI1OlxcdFxcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBNRU1DR19OUl9HRU5TOyBpKyspIHtcXG42MDI2OlxcdFxcdFxcdGZvciAoaiA9IDA7IGogXFx1MDAzYyBNRU1DR19OUl9CSU5TOyBqKyspXFxuNjAyNzpcXHRcXHRcXHRcXHRJTklUX0hMSVNUX05VTExTX0hFQUQoXFx1MDAyNnBnZGF0LVxcdTAwM2VtZW1jZ19scnUuZmlmb1tpXVtqXSwgaSk7XFxuNjAyODpcXHRcXHR9XFxuNjAyOTpcXHR9XFxuNjAzMDpcXHRcXG42MDMxOlxcdHZvaWQgbHJ1X2dlbl9pbml0X2xydXZlYyhzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMpXFxuNjAzMjpcXHR7XFxuNjAzMzpcXHRcXHRpbnQgaTtcXG42MDM0OlxcdFxcdGludCBnZW4sIHR5cGUsIHpvbmU7XFxuNjAzNTpcXHRcXHRzdHJ1Y3QgbHJ1X2dlbl9mb2xpbyAqbHJ1Z2VuID0gXFx1MDAyNmxydXZlYy1cXHUwMDNlbHJ1Z2VuO1xcbjYwMzY6XFx0XFx0c3RydWN0IGxydV9nZW5fbW1fc3RhdGUgKm1tX3N0YXRlID0gZ2V0X21tX3N0YXRlKGxydXZlYyk7XFxuNjAzNzpcXHRcXG42MDM4OlxcdFxcdGxydWdlbi1cXHUwMDNlbWF4X3NlcSA9IE1JTl9OUl9HRU5TICsgMTtcXG42MDM5OlxcdFxcdGxydWdlbi1cXHUwMDNlZW5hYmxlZCA9IGxydV9nZW5fZW5hYmxlZCgpO1xcbjYwNDA6XFx0XFxuNjA0MTpcXHRcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2M9IE1JTl9OUl9HRU5TICsgMTsgaSsrKVxcbjYwNDI6XFx0XFx0XFx0bHJ1Z2VuLVxcdTAwM2V0aW1lc3RhbXBzW2ldID0gamlmZmllcztcXG42MDQzOlxcdFxcbjYwNDQ6XFx0XFx0Zm9yX2VhY2hfZ2VuX3R5cGVfem9uZShnZW4sIHR5cGUsIHpvbmUpXFxuNjA0NTpcXHRcXHRcXHRJTklUX0xJU1RfSEVBRChcXHUwMDI2bHJ1Z2VuLVxcdTAwM2Vmb2xpb3NbZ2VuXVt0eXBlXVt6b25lXSk7XFxuNjA0NjpcXHRcXG42MDQ3OlxcdFxcdGlmIChtbV9zdGF0ZSlcXG42MDQ4OlxcdFxcdFxcdG1tX3N0YXRlLVxcdTAwM2VzZXEgPSBNSU5fTlJfR0VOUztcXG42MDQ5OlxcdH1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTVUMTM6MDI6MzYuMjMzMDQyNjA2WiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjEyMzM4NjM0NDEyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBJIHdlcmUgY29uc2lkZXJpbmcgdGhpcyBxdWVzdGlvbjpcblxuKipGaW5kaW5nIHRoZSBVc2FnZSBvZiBgbHJ1X2dlbl9yd19mb3BzYCoqXG5cbk9rYXksIHNvIEkgbmVlZCB0byB0cmFjayBkb3duIHdoZXJlIHRoZSBgbHJ1X2dlbl9yd19mb3BzYCB2YXJpYWJsZSwgb3Igc3RydWN0dXJlLCBpcyBhY3R1YWxseSBiZWluZyAqdXNlZCogaW4gdGhlIGNvZGUuIE15IGluaXRpYWwgdGhvdWdodCBpcywgbGV0J3MganVzdCBnbyBhaGVhZCBhbmQgZG8gaXQsIEknbGwgbmVlZCB0byBkbyBzb21lIGNvZGUgYXJjaGFlb2xvZ3kuIFRoaXMgbWVhbnMgdXNpbmcgYSB0b29sIHRvIHNlYXJjaCBmb3IgYWxsIGluc3RhbmNlcyB3aGVyZSB0aGlzIHNwZWNpZmljIGlkZW50aWZpZXIgYXBwZWFycy4gSSdsbCBuZWVkIHRvIGJlIHByZWNpc2UgYWJvdXQgaG93IEkgcGhyYXNlIHRoZSBzZWFyY2ggdG8gYXZvaWQgZmFsc2UgcG9zaXRpdmVzLiBUaGVuLCBvbmNlIEkgaGF2ZSBteSBsaXN0IG9mIGluc3RhbmNlcyBJJ2xsIGtub3cgd2hlcmUgdG8gc3RhcnQgbXkgaW5zcGVjdGlvbi4gRnJvbSB0aGVyZSwgaXQnbGwgYmUgYSBtYXR0ZXIgb2YgdW5kZXJzdGFuZGluZyB0aGUgY29udGV4dCBhbmQgcHVycG9zZSBvZiBpdHMgdXNhZ2UgdG8gaWRlbnRpZnkgdGhlIGFyZWFzIG9mIGNvZGUgdGhhdCByZWx5IG9uIGl0LlxuXG5cbiIsIklucHV0VG9rZW5zIjo4MTkyLCJPdXRwdXRUb2tlbnMiOjMxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjAsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xNVQxMzowMjo0OC41NzE2Nzk1MDhaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjUyMzk3MjU5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImxydV9nZW5fcndfZm9wc1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vdm1zY2FuLmM9NTk5NT1zdGF0aWMgaW50IGxydV9nZW5fc2VxX29wZW4oc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpXFxuLS1cXG5tbS92bXNjYW4uYy01OTk5LVxcbm1tL3Ztc2Nhbi5jOjYwMDA6c3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgbHJ1X2dlbl9yd19mb3BzID0ge1xcbm1tL3Ztc2Nhbi5jLTYwMDEtXFx0Lm9wZW4gPSBscnVfZ2VuX3NlcV9vcGVuLFxcbi0tXFxubW0vdm1zY2FuLmM9NjA5Mz1zdGF0aWMgaW50IF9faW5pdCBpbml0X2xydV9nZW4odm9pZClcXG4tLVxcbm1tL3Ztc2Nhbi5jLTYxMDEtXFx0ZGVidWdmc19jcmVhdGVfZmlsZV9hdXhfbnVtKFxcXCJscnVfZ2VuXFxcIiwgMDY0NCwgTlVMTCwgTlVMTCwgZmFsc2UsXFxubW0vdm1zY2FuLmM6NjEwMjpcXHRcXHRcXHRcXHQgICAgXFx1MDAyNmxydV9nZW5fcndfZm9wcyk7XFxubW0vdm1zY2FuLmMtNjEwMy1cXHRkZWJ1Z2ZzX2NyZWF0ZV9maWxlX2F1eF9udW0oXFxcImxydV9nZW5fZnVsbFxcXCIsIDA0NDQsIE5VTEwsIE5VTEwsIHRydWUsXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE1VDEzOjAyOjQ4LjYyNDA4MzQ3N1oiLCJTZXEiOjE1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjo3MDEyNTE2MjcxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEluaXRpYWwgVGhvdWdodHMgb24gdGhpcyBEZWJ1Z2ZzIENyZWF0aW9uKipcblxuT2theSwgc28gSSBzZWUgYGRlYnVnZnNfY3JlYXRlX2ZpbGVfYXV4X251bWAgYmVpbmcgdXNlZCB0byBjcmVhdGUgc29tZXRoaW5nIGNhbGxlZCBcImxydV9nZW5cIi4gTXkgZmlyc3QgdGhvdWdodCBpczogZGVidWdmcyEgSSBuZWVkIHRvIHF1aWNrbHkgYXNzZXNzIGlmIHRoaXMgaXMgc29tZXRoaW5nIHRoYXQncyByZWFjaGFibGUgb3IgZXZlbiB3b3JzZSwgZnV6emVkIGJ5IHN5emthbGxlci4gVGhhdCB3b3VsZCBiZSBhbiBpbW1lZGlhdGUgcmVkIGZsYWcuIEkgbmVlZCB0byBmaWd1cmUgb3V0IHdoZXJlIHRoaXMgdGhpbmcgbGl2ZXMsIHRoZSBkZWJ1Z2ZzIHBhdGguIEFoLCBpdCBhcHBlYXJzIHRvIGJlIHVuZGVyIHRoZSBkZWJ1Z2ZzIHJvb3QsIHNwZWNpZmljYWxseSBgL3N5cy9rZXJuZWwvZGVidWcvbHJ1X2dlbmAuXG5cbk5vdywgbGV0J3MgdGFrZSBhIHN0ZXAgYmFjayBhbmQgdW5kZXJzdGFuZCB0aGUgY29udGV4dC4gU2luY2UgdGhpcyBjb25jZXJucyBMUlUsIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQncyB0cmlnZ2VyaW5nIHRoaXMgZGVidWdmcyBub2RlLiBJIHNob3VsZCBwcm9iYWJseSBjaGVjayB0aGUgS2NvbmZpZyBvcHRpb25zIHRoYXQgZW5hYmxlIE11bHRpLUdlbiBMUlUgKE1HTFJVKS4gTGV0IG1lIGRpZyBpbnRvIHRob3NlIG9wdGlvbnMgYW5kIHNlZSB3aGF0J3MgZ29pbmcgb24uIFRoZW4sIEkgbmVlZCB0byBjaGVjayBob3cgYGluaXRfbHJ1X2dlbmAgaXMgYmVpbmcgY2FsbGVkIGFuZCBpdHMgc3Vycm91bmRpbmdzLCBzcGVjaWZpY2FsbHkgY2hlY2tpbmcgdGhlIGAjaWZkZWZgIGRpcmVjdGl2ZXMgaW4gYG1tL3Ztc2Nhbi5jYC4gVGhhdCB3aWxsIGhlbHAgZGV0ZXJtaW5lIHRoZSBjb21waWxhdGlvbiBwYXRoIGFuZCB3aGVyZSB0aGlzIGRlYnVnZnMgbm9kZSBjb21lcyBmcm9tLlxuXG5cbiIsIklucHV0VG9rZW5zIjo4NjgwLCJPdXRwdXRUb2tlbnMiOjM1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTM3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE1VDEzOjAyOjU1LjYzNjYwMjA4OFoiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0MzMzNTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibW0vdm1zY2FuLmNcIixcbiAgXCJGaXJzdExpbmVcIjogNjA5MCxcbiAgXCJMaW5lQ291bnRcIjogNDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiNjA5MDpcXHRcXG42MDkxOlxcdCNlbmRpZiAvKiBDT05GSUdfTUVNQ0cgKi9cXG42MDkyOlxcdFxcbjYwOTM6XFx0c3RhdGljIGludCBfX2luaXQgaW5pdF9scnVfZ2VuKHZvaWQpXFxuNjA5NDpcXHR7XFxuNjA5NTpcXHRcXHRCVUlMRF9CVUdfT04oTUlOX05SX0dFTlMgKyAxIFxcdTAwM2U9IE1BWF9OUl9HRU5TKTtcXG42MDk2OlxcdFxcdEJVSUxEX0JVR19PTihCSVQoTFJVX0dFTl9XSURUSCkgXFx1MDAzYz0gTUFYX05SX0dFTlMpO1xcbjYwOTc6XFx0XFxuNjA5ODpcXHRcXHRpZiAoc3lzZnNfY3JlYXRlX2dyb3VwKG1tX2tvYmosIFxcdTAwMjZscnVfZ2VuX2F0dHJfZ3JvdXApKVxcbjYwOTk6XFx0XFx0XFx0cHJfZXJyKFxcXCJscnVfZ2VuOiBmYWlsZWQgdG8gY3JlYXRlIHN5c2ZzIGdyb3VwXFxcXG5cXFwiKTtcXG42MTAwOlxcdFxcbjYxMDE6XFx0XFx0ZGVidWdmc19jcmVhdGVfZmlsZV9hdXhfbnVtKFxcXCJscnVfZ2VuXFxcIiwgMDY0NCwgTlVMTCwgTlVMTCwgZmFsc2UsXFxuNjEwMjpcXHRcXHRcXHRcXHRcXHQgICAgXFx1MDAyNmxydV9nZW5fcndfZm9wcyk7XFxuNjEwMzpcXHRcXHRkZWJ1Z2ZzX2NyZWF0ZV9maWxlX2F1eF9udW0oXFxcImxydV9nZW5fZnVsbFxcXCIsIDA0NDQsIE5VTEwsIE5VTEwsIHRydWUsXFxuNjEwNDpcXHRcXHRcXHRcXHRcXHQgICAgXFx1MDAyNmxydV9nZW5fcm9fZm9wcyk7XFxuNjEwNTpcXHRcXG42MTA2OlxcdFxcdHJldHVybiAwO1xcbjYxMDc6XFx0fTtcXG42MTA4OlxcdGxhdGVfaW5pdGNhbGwoaW5pdF9scnVfZ2VuKTtcXG42MTA5OlxcdFxcbjYxMTA6XFx0I2Vsc2UgLyogIUNPTkZJR19MUlVfR0VOICovXFxuNjExMTpcXHRcXG42MTEyOlxcdHN0YXRpYyB2b2lkIGxydV9nZW5fYWdlX25vZGUoc3RydWN0IHBnbGlzdF9kYXRhICpwZ2RhdCwgc3RydWN0IHNjYW5fY29udHJvbCAqc2MpXFxuNjExMzpcXHR7XFxuNjExNDpcXHRcXHRCVUlMRF9CVUcoKTtcXG42MTE1OlxcdH1cXG42MTE2OlxcdFxcbjYxMTc6XFx0c3RhdGljIHZvaWQgbHJ1X2dlbl9zaHJpbmtfbHJ1dmVjKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgc3RydWN0IHNjYW5fY29udHJvbCAqc2MpXFxuNjExODpcXHR7XFxuNjExOTpcXHRcXHRCVUlMRF9CVUcoKTtcXG42MTIwOlxcdH1cXG42MTIxOlxcdFxcbjYxMjI6XFx0c3RhdGljIHZvaWQgbHJ1X2dlbl9zaHJpbmtfbm9kZShzdHJ1Y3QgcGdsaXN0X2RhdGEgKnBnZGF0LCBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYylcXG42MTIzOlxcdHtcXG42MTI0OlxcdFxcdEJVSUxEX0JVRygpO1xcbjYxMjU6XFx0fVxcbjYxMjY6XFx0XFxuNjEyNzpcXHQjZW5kaWYgLyogQ09ORklHX0xSVV9HRU4gKi9cXG42MTI4OlxcdFxcbjYxMjk6XFx0c3RhdGljIHZvaWQgc2hyaW5rX2xydXZlYyhzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xNVQxMzowMjo1NS42MzcwMzc1NThaIiwiU2VxIjoxNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6NjQ4OTE2MTg5MTgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBMUlUgR2VuZXJhdGlvbiBDb25maWd1cmF0aW9uKipcblxuT2theSwgZmlyc3QgdGhpbmcncyBmaXJzdDogaXQgbG9va3MgbGlrZSBgQ09ORklHX0xSVV9HRU5gIGlzIHRoZSBrZXkgY29uZmlnIG9wdGlvbiBoZXJlLCB0aGUgZ2F0ZWtlZXBlciBmb3IgdGhpcyBlbnRpcmUgc2VjdGlvbiBvZiBjb2RlLiBCZWZvcmUgSSBkaWcgYW55IGRlZXBlciwgSSBzaG91bGQgdmVyaWZ5IHdoYXQgb3RoZXIgY29uZmlndXJhdGlvbnMgbWlnaHQgYmUgaW52b2x2ZWQuIExldCdzIHNlZSBpZiBlaXRoZXIgYENPTkZJR19MUlVfR0VOX0VOQUJMRURgIG9yLCByZWFsbHksIGp1c3QgYENPTkZJR19MUlVfR0VOYCByZXF1aXJlcyBvdGhlciBjb25maWcgb3B0aW9ucywgb3RoZXIgZGVwZW5kZW5jaWVzLCBvciBoYXMgYW55IGltcGxpY2F0aW9ucyBvZiB3aGljaCBJIG11c3QgYmUgbWluZGZ1bC5cblxuUmlnaHQsIHNvIHRvIG1ha2Ugc3VyZSBJIGdldCBhIGdvb2QsIGhvbGlzdGljIHVuZGVyc3RhbmRpbmcsIEkgbmVlZCB0byBkbyBhIHF1aWNrIHNlYXJjaC4gTGV0J3MgZmlyZSB1cCBhIHNlYXJjaCBmb3IgYGNvbmZpZyBMUlVfR0VOYCBkaXJlY3RseSBpbiB0aGUgYG1tL0tjb25maWdgIGZpbGUuIFRoYXQgc2hvdWxkIGdpdmUgbWUgdGhlIGF1dGhvcml0YXRpdmUgZGVmaW5pdGlvbiBhbmQgYW55IHJlbGF0ZWQgZGVwZW5kZW5jaWVzLiBUaGlzIHNob3VsZCBnZXQgbWUgc3RhcnRlZC5cblxuXG4iLCJJbnB1dFRva2VucyI6OTc0NCwiT3V0cHV0VG9rZW5zIjoyOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjcxLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTVUMTM6MDQ6MDAuNTI4NjU5NDY2WiIsIlNlcSI6MTgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3MzExMjY0OCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgTFJVX0dFTlwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL0tjb25maWc9MTM4OD1jb25maWcgUFRFX01BUktFUl9VRkZEX1dQXFxuLS1cXG5tbS9LY29uZmlnLTEzOTgtIyBtdWx0aS1nZW4gTFJVIHtcXG5tbS9LY29uZmlnOjEzOTk6Y29uZmlnIExSVV9HRU5cXG5tbS9LY29uZmlnLTE0MDAtXFx0Ym9vbCBcXFwiTXVsdGktR2VuIExSVVxcXCJcXG4tLVxcbm1tL0tjb25maWctMTQwNy1cXG5tbS9LY29uZmlnOjE0MDg6Y29uZmlnIExSVV9HRU5fRU5BQkxFRFxcbm1tL0tjb25maWctMTQwOS1cXHRib29sIFxcXCJFbmFibGUgYnkgZGVmYXVsdFxcXCJcXG4tLVxcbm1tL0tjb25maWctMTQxMy1cXG5tbS9LY29uZmlnOjE0MTQ6Y29uZmlnIExSVV9HRU5fU1RBVFNcXG5tbS9LY29uZmlnLTE0MTUtXFx0Ym9vbCBcXFwiRnVsbCBzdGF0cyBmb3IgZGVidWdnaW5nXFxcIlxcbi0tXFxubW0vS2NvbmZpZy0xNDIyLVxcbm1tL0tjb25maWc6MTQyMzpjb25maWcgTFJVX0dFTl9XQUxLU19NTVVcXG5tbS9LY29uZmlnLTE0MjQtXFx0ZGVmX2Jvb2wgeVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xNVQxMzowNDowMC42MDE3Nzg3NzVaIiwiU2VxIjoxOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6MTg1NTc5ODYxMCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRha2Ugb24gdGhlIHRob3VnaHQgcHJvY2VzczpcblxuKipEaXZpbmcgaW50byB0aGUgS2VybmVsIENvbmZpZ3VyYXRpb24gTGFuZHNjYXBlKipcblxuT2theSwgc28gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGRlcGVuZGVuY2llcyBvZiBgTFJVX0dFTmAuIEtub3dpbmcga2VybmVsIGNvbmZpZ3VyYXRpb24sIHRoZSBsb2dpY2FsIHBsYWNlIHRvIHN0YXJ0IGlzIHRoZSBgS2NvbmZpZ2AgZmlsZS4gSSdsbCBuZWVkIHRvIGdvIHRvIGBtbS9LY29uZmlnYCwgSSdtIGd1ZXNzaW5nIGFyb3VuZCBsaW5lIDEzOTgsIGdpdmUgb3IgdGFrZSwgc2hvdWxkIGJlIGluIHRoZSBiYWxscGFyay4gTGV0J3Mgc2VlIHdoYXQncyBkZWZpbmVkIHRoZXJlIGFuZCB3aGF0IGl0cyByZWxhdGlvbnNoaXBzIGFyZSB3aXRoIG90aGVyIG9wdGlvbnMuIEZyb20gdGhlcmUgSSdsbCBzdGFydCBtYXBwaW5nIG91dCB0aGUgaW1wbGljYXRpb25zLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMDI1OSwiT3V0cHV0VG9rZW5zIjozMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE1VDEzOjA0OjAyLjQ1NzU4MDMwNVoiLCJTZXEiOjIwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMTAyNjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibW0vS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiAxMzk1LFxuICBcIkxpbmVDb3VudFwiOiA0MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIxMzk1OlxcdFxcdCAgcHVycG9zZXMuICBJdCBpcyByZXF1aXJlZCB0byBlbmFibGUgdXNlcmZhdWx0ZmQgd3JpdGUgcHJvdGVjdGlvbiBvblxcbjEzOTY6XFx0XFx0ICBmaWxlLWJhY2tlZCBtZW1vcnkgdHlwZXMgbGlrZSBzaG1lbSBhbmQgaHVnZXRsYmZzLlxcbjEzOTc6XFx0XFxuMTM5ODpcXHQjIG11bHRpLWdlbiBMUlUge1xcbjEzOTk6XFx0Y29uZmlnIExSVV9HRU5cXG4xNDAwOlxcdFxcdGJvb2wgXFxcIk11bHRpLUdlbiBMUlVcXFwiXFxuMTQwMTpcXHRcXHRkZXBlbmRzIG9uIE1NVVxcbjE0MDI6XFx0XFx0IyBtYWtlIHN1cmUgZm9saW8tXFx1MDAzZWZsYWdzIGhhcyBlbm91Z2ggc3BhcmUgYml0c1xcbjE0MDM6XFx0XFx0ZGVwZW5kcyBvbiA2NEJJVCB8fCAhU1BBUlNFTUVNIHx8IFNQQVJTRU1FTV9WTUVNTUFQXFxuMTQwNDpcXHRcXHRoZWxwXFxuMTQwNTpcXHRcXHQgIEEgaGlnaCBwZXJmb3JtYW5jZSBMUlUgaW1wbGVtZW50YXRpb24gdG8gb3ZlcmNvbW1pdCBtZW1vcnkuIFNlZVxcbjE0MDY6XFx0XFx0ICBEb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL21tL211bHRpZ2VuX2xydS5yc3QgZm9yIGRldGFpbHMuXFxuMTQwNzpcXHRcXG4xNDA4OlxcdGNvbmZpZyBMUlVfR0VOX0VOQUJMRURcXG4xNDA5OlxcdFxcdGJvb2wgXFxcIkVuYWJsZSBieSBkZWZhdWx0XFxcIlxcbjE0MTA6XFx0XFx0ZGVwZW5kcyBvbiBMUlVfR0VOXFxuMTQxMTpcXHRcXHRoZWxwXFxuMTQxMjpcXHRcXHQgIFRoaXMgb3B0aW9uIGVuYWJsZXMgdGhlIG11bHRpLWdlbiBMUlUgYnkgZGVmYXVsdC5cXG4xNDEzOlxcdFxcbjE0MTQ6XFx0Y29uZmlnIExSVV9HRU5fU1RBVFNcXG4xNDE1OlxcdFxcdGJvb2wgXFxcIkZ1bGwgc3RhdHMgZm9yIGRlYnVnZ2luZ1xcXCJcXG4xNDE2OlxcdFxcdGRlcGVuZHMgb24gTFJVX0dFTlxcbjE0MTc6XFx0XFx0aGVscFxcbjE0MTg6XFx0XFx0ICBEbyBub3QgZW5hYmxlIHRoaXMgb3B0aW9uIHVubGVzcyB5b3UgcGxhbiB0byBsb29rIGF0IGhpc3RvcmljYWwgc3RhdHNcXG4xNDE5OlxcdFxcdCAgZnJvbSBldmljdGVkIGdlbmVyYXRpb25zIGZvciBkZWJ1Z2dpbmcgcHVycG9zZS5cXG4xNDIwOlxcdFxcbjE0MjE6XFx0XFx0ICBUaGlzIG9wdGlvbiBoYXMgYSBwZXItbWVtY2cgYW5kIHBlci1ub2RlIG1lbW9yeSBvdmVyaGVhZC5cXG4xNDIyOlxcdFxcbjE0MjM6XFx0Y29uZmlnIExSVV9HRU5fV0FMS1NfTU1VXFxuMTQyNDpcXHRcXHRkZWZfYm9vbCB5XFxuMTQyNTpcXHRcXHRkZXBlbmRzIG9uIExSVV9HRU4gXFx1MDAyNlxcdTAwMjYgQVJDSF9IQVNfSFdfUFRFX1lPVU5HXFxuMTQyNjpcXHQjIH1cXG4xNDI3OlxcdFxcbjE0Mjg6XFx0Y29uZmlnIExPQ0tfTU1fQU5EX0ZJTkRfVk1BXFxuMTQyOTpcXHRcXHRib29sXFxuMTQzMDpcXHRcXHRkZXBlbmRzIG9uICFTVEFDS19HUk9XU1VQXFxuMTQzMTpcXHRcXG4xNDMyOlxcdGNvbmZpZyBJT01NVV9NTV9EQVRBXFxuMTQzMzpcXHRcXHRib29sXFxuMTQzNDpcXHRcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTVUMTM6MDQ6MDIuNDU3NjkyNjM1WiIsIlNlcSI6MjEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjQxMDI4Nzc4MzMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTmF2aWdhdGluZyB0aGUgRGVwZW5kZW5jaWVzKipcblxuT2theSwgaGVyZSdzIHdoYXQgSSdtIHRoaW5raW5nLiBJIG5lZWQgdG8gZmlndXJlIG91dCB0aGUgZGVwZW5kZW5jaWVzIGZvciBgQ09ORklHX0xSVV9HRU5gLCBzdGFydGluZyB3aXRoIHRoZSBvYnZpb3VzIG9uZTogaXQncyBsaW5rZWQgdG8gYE1NVWAuIE1ha2VzIHNlbnNlLiBOb3csIGxldCdzIG5vdCBnZXQgYWhlYWQgb2Ygb3Vyc2VsdmVzLiBJIHNob3VsZCBhbHNvIHNlZSBpZiBgQ09ORklHX0RFQlVHX0ZTYCBpcyBhIHJlcXVpcmVtZW50LiBJIG5lZWQgdG8gYmUgdGhvcm91Z2ggd2l0aCB0aGVzZSBkZXBlbmRlbmNpZXMsIHNvIGxldCdzIGNoZWNrIGZvciBpdC4gSG1tLCBob2xkIG9uIGEgc2Vjb25kLiBJIG5lZWQgdG8gdmVyaWZ5IHdoZXRoZXIgYGRlYnVnZnNfY3JlYXRlX2ZpbGVfYXV4X251bWAgaXMgY29uZGl0aW9uYWwgb24gYENPTkZJR19ERUJVR19GU2AuIFRoaXMgc29ydCBvZiBkZXRhaWwgaXMgY3J1Y2lhbCBmb3IgY29uZmlndXJpbmcgbXkgc3lzdGVtIHByb3Blcmx5LiBPa2F5LCBsb29rcyBsaWtlIEkgbmVlZCB0byB0cmFjZSBiYWNrIGFuZCBmaW5kIHRoZSBkZWZpbml0aXZlIGRlZmluaXRpb24gb2YgYGRlYnVnZnNfY3JlYXRlX2ZpbGVfYXV4X251bWAuIFRoaXMgaXMgZ29pbmcgdG8gYmUgYSBmdW4gbGl0dGxlIGRpZywgYnV0IG5lY2Vzc2FyeS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTEwMDUsIk91dHB1dFRva2VucyI6MjQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo4OSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE1VDEzOjA0OjA2LjU2MDU3MjU5OFoiLCJTZXEiOjIyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjM0MzUwMzYxMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJkZWJ1Z2ZzX2NyZWF0ZV9maWxlX2F1eF9udW1cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9jcnlwdG8vaW50ZWwvcWF0L3FhdF9jb21tb24vYWRmX3RsX2RlYnVnZnMuYz02OTg9dm9pZCBhZGZfdGxfZGJnZnNfYWRkKHN0cnVjdCBhZGZfYWNjZWxfZGV2ICphY2NlbF9kZXYpXFxuLS1cXG5kcml2ZXJzL2NyeXB0by9pbnRlbC9xYXQvcWF0X2NvbW1vbi9hZGZfdGxfZGVidWdmcy5jLTcxNy1cXHRcXHRcXHQgQURGX1RMX0RCR19SUF9BTFBIQV9JTkRFWChpKSk7XFxuZHJpdmVycy9jcnlwdG8vaW50ZWwvcWF0L3FhdF9jb21tb24vYWRmX3RsX2RlYnVnZnMuYzo3MTg6XFx0XFx0ZGVidWdmc19jcmVhdGVfZmlsZV9hdXhfbnVtKG5hbWUsIDA2NDQsIGRpciwgYWNjZWxfZGV2LCBpLFxcbmRyaXZlcnMvY3J5cHRvL2ludGVsL3FhdC9xYXRfY29tbW9uL2FkZl90bF9kZWJ1Z2ZzLmMtNzE5LVxcdFxcdFxcdFxcdFxcdCAgICBcXHUwMDI2dGxfcnBfZGF0YV9mb3BzKTtcXG4tLVxcbmRyaXZlcnMvZmlybXdhcmUvYXJtX3NjbWkvcmF3X21vZGUuYz0xMjEzPXZvaWQgKnNjbWlfcmF3X21vZGVfaW5pdChjb25zdCBzdHJ1Y3Qgc2NtaV9oYW5kbGUgKmhhbmRsZSxcXG4tLVxcbmRyaXZlcnMvZmlybXdhcmUvYXJtX3NjbWkvcmF3X21vZGUuYy0xMjgxLVxcbmRyaXZlcnMvZmlybXdhcmUvYXJtX3NjbWkvcmF3X21vZGUuYzoxMjgyOlxcdFxcdFxcdGRlYnVnZnNfY3JlYXRlX2ZpbGVfYXV4X251bShcXFwibWVzc2FnZVxcXCIsIDA2MDAsIGNoZCxcXG5kcml2ZXJzL2Zpcm13YXJlL2FybV9zY21pL3Jhd19tb2RlLmMtMTI4My1cXHRcXHRcXHRcXHRcXHQgICAgcmF3LCBjaGFubmVsc1tpXSxcXG4tLVxcbmRyaXZlcnMvZmlybXdhcmUvYXJtX3NjbWkvcmF3X21vZGUuYy0xMjg1LVxcbmRyaXZlcnMvZmlybXdhcmUvYXJtX3NjbWkvcmF3X21vZGUuYzoxMjg2OlxcdFxcdFxcdGRlYnVnZnNfY3JlYXRlX2ZpbGVfYXV4X251bShcXFwibWVzc2FnZV9hc3luY1xcXCIsIDA2MDAsIGNoZCxcXG5kcml2ZXJzL2Zpcm13YXJlL2FybV9zY21pL3Jhd19tb2RlLmMtMTI4Ny1cXHRcXHRcXHRcXHRcXHQgICAgcmF3LCBjaGFubmVsc1tpXSxcXG4tLVxcbmRyaXZlcnMvZmlybXdhcmUvYXJtX3NjbWkvcmF3X21vZGUuYy0xMjg5LVxcbmRyaXZlcnMvZmlybXdhcmUvYXJtX3NjbWkvcmF3X21vZGUuYzoxMjkwOlxcdFxcdFxcdGRlYnVnZnNfY3JlYXRlX2ZpbGVfYXV4X251bShcXFwibWVzc2FnZV9wb2xsXFxcIiwgMDYwMCwgY2hkLFxcbmRyaXZlcnMvZmlybXdhcmUvYXJtX3NjbWkvcmF3X21vZGUuYy0xMjkxLVxcdFxcdFxcdFxcdFxcdFxcdCAgICByYXcsIGNoYW5uZWxzW2ldLFxcbi0tXFxuZHJpdmVycy9maXJtd2FyZS9hcm1fc2NtaS9yYXdfbW9kZS5jLTEyOTMtXFxuZHJpdmVycy9maXJtd2FyZS9hcm1fc2NtaS9yYXdfbW9kZS5jOjEyOTQ6XFx0XFx0XFx0ZGVidWdmc19jcmVhdGVfZmlsZV9hdXhfbnVtKFxcXCJtZXNzYWdlX3BvbGxfYXN5bmNcXFwiLCAwNjAwLFxcbmRyaXZlcnMvZmlybXdhcmUvYXJtX3NjbWkvcmF3X21vZGUuYy0xMjk1LVxcdFxcdFxcdFxcdFxcdFxcdCAgICBjaGQsIHJhdywgY2hhbm5lbHNbaV0sXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9hZi9ydnVfZGVidWdmcy5jPTI3NTg9c3RhdGljIHZvaWQgcnZ1X2RiZ19uaXhfaW5pdChzdHJ1Y3QgcnZ1ICpydnUsIGludCBibGthZGRyKVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvYWYvcnZ1X2RlYnVnZnMuYy0yNzkxLVxcdFxcdFxcdCAgICBcXHUwMDI2cnZ1X2RiZ19uaXhfbmRjX3J4X2hpdHNfbWlzc19mb3BzKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9hZi9ydnVfZGVidWdmcy5jOjI3OTI6XFx0ZGVidWdmc19jcmVhdGVfZmlsZV9hdXhfbnVtKFxcXCJxc2l6ZVxcXCIsIDA2MDAsIHJ2dS1cXHUwMDNlcnZ1X2RiZy5uaXgsIHJ2dSxcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9hZi9ydnVfZGVidWdmcy5jLTI3OTMtXFx0XFx0XFx0ICAgIGJsa2FkZHIsIFxcdTAwMjZydnVfZGJnX25peF9xc2l6ZV9mb3BzKTtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL2FmL3J2dV9kZWJ1Z2ZzLmM9MzEwND1zdGF0aWMgdm9pZCBydnVfZGJnX2NneF9pbml0KHN0cnVjdCBydnUgKnJ2dSlcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL2FmL3J2dV9kZWJ1Z2ZzLmMtMzE0NS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9hZi9ydnVfZGVidWdmcy5jOjMxNDY6XFx0XFx0XFx0ZGVidWdmc19jcmVhdGVfZmlsZV9hdXhfbnVtKFxcXCJzdGF0c1xcXCIsIDA2MDAsIHJ2dS1cXHUwMDNlcnZ1X2RiZy5sbWFjLFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL2FmL3J2dV9kZWJ1Z2ZzLmMtMzE0Ny1cXHRcXHRcXHRcXHRcXHRcXHQgICAgY3R4LCBsbWFjX2lkLCBcXHUwMDI2cnZ1X2RiZ19jZ3hfc3RhdF9mb3BzKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9hZi9ydnVfZGVidWdmcy5jOjMxNDg6XFx0XFx0XFx0ZGVidWdmc19jcmVhdGVfZmlsZV9hdXhfbnVtKFxcXCJtYWNfZmlsdGVyXFxcIiwgMDYwMCxcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9hZi9ydnVfZGVidWdmcy5jLTMxNDktXFx0XFx0XFx0XFx0XFx0ICAgIHJ2dS1cXHUwMDNlcnZ1X2RiZy5sbWFjLCBjdHgsIGxtYWNfaWQsXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvYWYvcnZ1X2RlYnVnZnMuYy0zMTUwLVxcdFxcdFxcdFxcdFxcdCAgICBcXHUwMDI2cnZ1X2RiZ19jZ3hfZG1hY19mbHRfZm9wcyk7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvYWYvcnZ1X2RlYnVnZnMuYzozMTUxOlxcdFxcdFxcdGRlYnVnZnNfY3JlYXRlX2ZpbGVfYXV4X251bShcXFwiZndkYXRhXFxcIiwgMDYwMCxcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9hZi9ydnVfZGVidWdmcy5jLTMxNTItXFx0XFx0XFx0XFx0XFx0XFx0ICAgIHJ2dS1cXHUwMDNlcnZ1X2RiZy5sbWFjLCBjdHgsXFxuLS1cXG5kcml2ZXJzL3BoeS9tZWRpYXRlay9waHktbXRrLXRwaHkuYz01MDU9c3RhdGljIHZvaWQgdTJfcGh5X2RiZ2ZzX2ZpbGVzX2NyZWF0ZShzdHJ1Y3QgbXRrX3BoeV9pbnN0YW5jZSAqaW5zdClcXG4tLVxcbmRyaXZlcnMvcGh5L21lZGlhdGVrL3BoeS1tdGstdHBoeS5jLTUxMC1cXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgY291bnQ7IGkrKylcXG5kcml2ZXJzL3BoeS9tZWRpYXRlay9waHktbXRrLXRwaHkuYzo1MTE6XFx0XFx0ZGVidWdmc19jcmVhdGVfZmlsZV9hdXhfbnVtKHUyX3BoeV9maWxlc1tpXSwgMDY0NCwgaW5zdC1cXHUwMDNlcGh5LVxcdTAwM2VkZWJ1Z2ZzLFxcbmRyaXZlcnMvcGh5L21lZGlhdGVrL3BoeS1tdGstdHBoeS5jLTUxMi1cXHRcXHRcXHRcXHQgICAgaW5zdCwgaSwgIFxcdTAwMjZ1Ml9waHlfZm9wcyk7XFxuLS1cXG5kcml2ZXJzL3BoeS9tZWRpYXRlay9waHktbXRrLXRwaHkuYz02MTU9c3RhdGljIHZvaWQgdTNfcGh5X2RiZ2ZzX2ZpbGVzX2NyZWF0ZShzdHJ1Y3QgbXRrX3BoeV9pbnN0YW5jZSAqaW5zdClcXG4tLVxcbmRyaXZlcnMvcGh5L21lZGlhdGVrL3BoeS1tdGstdHBoeS5jLTYyMC1cXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgY291bnQ7IGkrKylcXG5kcml2ZXJzL3BoeS9tZWRpYXRlay9waHktbXRrLXRwaHkuYzo2MjE6XFx0XFx0ZGVidWdmc19jcmVhdGVfZmlsZV9hdXhfbnVtKHUzX3BoeV9maWxlc1tpXSwgMDY0NCwgaW5zdC1cXHUwMDNlcGh5LVxcdTAwM2VkZWJ1Z2ZzLFxcbmRyaXZlcnMvcGh5L21lZGlhdGVrL3BoeS1tdGstdHBoeS5jLTYyMi1cXHRcXHRcXHRcXHQgICAgaW5zdCwgaSwgXFx1MDAyNnUzX3BoeV9mb3BzKTtcXG4tLVxcbmRyaXZlcnMvcGxhdGZvcm0veDg2L2RlbGwvYWxpZW53YXJlLXdtaS13bWF4LmM9MTQ3OD1zdGF0aWMgdm9pZCBhd2NjX2RlYnVnZnNfaW5pdChzdHJ1Y3Qgd21pX2RldmljZSAqd2RldilcXG4tLVxcbmRyaXZlcnMvcGxhdGZvcm0veDg2L2RlbGwvYWxpZW53YXJlLXdtaS13bWF4LmMtMTUxNS1cXHRcXHRzY25wcmludGYobmFtZSwgc2l6ZW9mKG5hbWUpLCBcXFwicGluJXVcXFwiLCBpKTtcXG5kcml2ZXJzL3BsYXRmb3JtL3g4Ni9kZWxsL2FsaWVud2FyZS13bWktd21heC5jOjE1MTY6XFx0XFx0ZGVidWdmc19jcmVhdGVfZmlsZV9hdXhfbnVtKG5hbWUsIDA2NDQsIGdwaW9fY3RsLCB3ZGV2LCBpLFxcbmRyaXZlcnMvcGxhdGZvcm0veDg2L2RlbGwvYWxpZW53YXJlLXdtaS13bWF4LmMtMTUxNy1cXHRcXHRcXHRcXHRcXHQgICAgXFx1MDAyNmF3Y2NfZ3Bpb19waW5fZm9wcyk7XFxuLS1cXG5kcml2ZXJzL3Njc2kvbHBmYy9scGZjX2RlYnVnZnMuYz02MDQyPWxwZmNfZGVidWdmc19pbml0aWFsaXplKHN0cnVjdCBscGZjX3Zwb3J0ICp2cG9ydClcXG4tLVxcbmRyaXZlcnMvc2NzaS9scGZjL2xwZmNfZGVidWdmcy5jLTYxMjAtXFx0XFx0LyogU2V0dXAgRElGIEVycm9yIEluamVjdGlvbnMgKi9cXG5kcml2ZXJzL3Njc2kvbHBmYy9scGZjX2RlYnVnZnMuYzo2MTIxOlxcdFxcdGRlYnVnZnNfY3JlYXRlX2ZpbGVfYXV4X251bShcXFwiSW5qRXJyTEJBXFxcIiwgMDY0NCxcXG5kcml2ZXJzL3Njc2kvbHBmYy9scGZjX2RlYnVnZnMuYy02MTIyLVxcdFxcdFxcdFxcdFxcdCAgICBwaGJhLVxcdTAwM2VoYmFfZGVidWdmc19yb290LCBwaGJhLFxcbi0tXFxuZHJpdmVycy9zY3NpL2xwZmMvbHBmY19kZWJ1Z2ZzLmMtNjEyNi1cXG5kcml2ZXJzL3Njc2kvbHBmYy9scGZjX2RlYnVnZnMuYzo2MTI3OlxcdFxcdGRlYnVnZnNfY3JlYXRlX2ZpbGVfYXV4X251bShcXFwiSW5qRXJyTlBvcnRJRFxcXCIsIDA2NDQsXFxuZHJpdmVycy9zY3NpL2xwZmMvbHBmY19kZWJ1Z2ZzLmMtNjEyOC1cXHRcXHRcXHRcXHRcXHQgICAgcGhiYS1cXHUwMDNlaGJhX2RlYnVnZnNfcm9vdCwgcGhiYSxcXG4tLVxcbmRyaXZlcnMvc2NzaS9scGZjL2xwZmNfZGVidWdmcy5jLTYxMzEtXFxuZHJpdmVycy9zY3NpL2xwZmMvbHBmY19kZWJ1Z2ZzLmM6NjEzMjpcXHRcXHRkZWJ1Z2ZzX2NyZWF0ZV9maWxlX2F1eF9udW0oXFxcIkluakVycldXUE5cXFwiLCAwNjQ0LFxcbmRyaXZlcnMvc2NzaS9scGZjL2xwZmNfZGVidWdmcy5jLTYxMzMtXFx0XFx0XFx0XFx0XFx0ICAgIHBoYmEtXFx1MDAzZWhiYV9kZWJ1Z2ZzX3Jvb3QsIHBoYmEsXFxuLS1cXG5kcml2ZXJzL3Njc2kvbHBmYy9scGZjX2RlYnVnZnMuYy02MTM2LVxcbmRyaXZlcnMvc2NzaS9scGZjL2xwZmNfZGVidWdmcy5jOjYxMzc6XFx0XFx0ZGVidWdmc19jcmVhdGVfZmlsZV9hdXhfbnVtKFxcXCJ3cml0ZUd1YXJkSW5qRXJyXFxcIiwgMDY0NCxcXG5kcml2ZXJzL3Njc2kvbHBmYy9scGZjX2RlYnVnZnMuYy02MTM4LVxcdFxcdFxcdFxcdFxcdCAgICBwaGJhLVxcdTAwM2VoYmFfZGVidWdmc19yb290LCBwaGJhLFxcbi0tXFxuZHJpdmVycy9zY3NpL2xwZmMvbHBmY19kZWJ1Z2ZzLmMtNjE0MS1cXG5kcml2ZXJzL3Njc2kvbHBmYy9scGZjX2RlYnVnZnMuYzo2MTQyOlxcdFxcdGRlYnVnZnNfY3JlYXRlX2ZpbGVfYXV4X251bShcXFwid3JpdGVBcHBJbmpFcnJcXFwiLCAwNjQ0LFxcbmRyaXZlcnMvc2NzaS9scGZjL2xwZmNfZGVidWdmcy5jLTYxNDMtXFx0XFx0XFx0XFx0XFx0ICAgIHBoYmEtXFx1MDAzZWhiYV9kZWJ1Z2ZzX3Jvb3QsIHBoYmEsXFxuLS1cXG5kcml2ZXJzL3Njc2kvbHBmYy9scGZjX2RlYnVnZnMuYy02MTQ1LVxcbmRyaXZlcnMvc2NzaS9scGZjL2xwZmNfZGVidWdmcy5jOjYxNDY6XFx0XFx0ZGVidWdmc19jcmVhdGVfZmlsZV9hdXhfbnVtKFxcXCJ3cml0ZVJlZkluakVyclxcXCIsIDA2NDQsXFxuZHJpdmVycy9zY3NpL2xwZmMvbHBmY19kZWJ1Z2ZzLmMtNjE0Ny1cXHRcXHRcXHRcXHRcXHQgICAgcGhiYS1cXHUwMDNlaGJhX2RlYnVnZnNfcm9vdCwgcGhiYSxcXG4tLVxcbmRyaXZlcnMvc2NzaS9scGZjL2xwZmNfZGVidWdmcy5jLTYxNDktXFxuZHJpdmVycy9zY3NpL2xwZmMvbHBmY19kZWJ1Z2ZzLmM6NjE1MDpcXHRcXHRkZWJ1Z2ZzX2NyZWF0ZV9maWxlX2F1eF9udW0oXFxcInJlYWRHdWFyZEluakVyclxcXCIsIDA2NDQsXFxuZHJpdmVycy9zY3NpL2xwZmMvbHBmY19kZWJ1Z2ZzLmMtNjE1MS1cXHRcXHRcXHRcXHRcXHQgICAgcGhiYS1cXHUwMDNlaGJhX2RlYnVnZnNfcm9vdCwgcGhiYSxcXG4tLVxcbmRyaXZlcnMvc2NzaS9scGZjL2xwZmNfZGVidWdmcy5jLTYxNTQtXFxuZHJpdmVycy9zY3NpL2xwZmMvbHBmY19kZWJ1Z2ZzLmM6NjE1NTpcXHRcXHRkZWJ1Z2ZzX2NyZWF0ZV9maWxlX2F1eF9udW0oXFxcInJlYWRBcHBJbmpFcnJcXFwiLCAwNjQ0LFxcbmRyaXZlcnMvc2NzaS9scGZjL2xwZmNfZGVidWdmcy5jLTYxNTYtXFx0XFx0XFx0XFx0XFx0ICAgIHBoYmEtXFx1MDAzZWhiYV9kZWJ1Z2ZzX3Jvb3QsIHBoYmEsXFxuLS1cXG5kcml2ZXJzL3Njc2kvbHBmYy9scGZjX2RlYnVnZnMuYy02MTU4LVxcbmRyaXZlcnMvc2NzaS9scGZjL2xwZmNfZGVidWdmcy5jOjYxNTk6XFx0XFx0ZGVidWdmc19jcmVhdGVfZmlsZV9hdXhfbnVtKFxcXCJyZWFkUmVmSW5qRXJyXFxcIiwgMDY0NCxcXG5kcml2ZXJzL3Njc2kvbHBmYy9scGZjX2RlYnVnZnMuYy02MTYwLVxcdFxcdFxcdFxcdFxcdCAgICBwaGJhLVxcdTAwM2VoYmFfZGVidWdmc19yb290LCBwaGJhLFxcbi0tXFxuZnMvb3JhbmdlZnMvb3JhbmdlZnMtZGVidWdmcy5jPTIzOD1zdGF0aWMgdm9pZCBvcmFuZ2Vmc19rZXJuZWxfZGVidWdfaW5pdCh2b2lkKVxcbi0tXFxuZnMvb3JhbmdlZnMvb3JhbmdlZnMtZGVidWdmcy5jLTI1MS1cXG5mcy9vcmFuZ2Vmcy9vcmFuZ2Vmcy1kZWJ1Z2ZzLmM6MjUyOlxcdGRlYnVnZnNfY3JlYXRlX2ZpbGVfYXV4X251bShPUkFOR0VGU19LTU9EX0RFQlVHX0ZJTEUsIDA0NDQsIGRlYnVnX2Rpciwga19idWZmZXIsXFxuZnMvb3JhbmdlZnMvb3JhbmdlZnMtZGVidWdmcy5jLTI1My1cXHRcXHRcXHQgICAgMCwgXFx1MDAyNmtlcm5lbF9kZWJ1Z19mb3BzKTtcXG4tLVxcbmZzL29yYW5nZWZzL29yYW5nZWZzLWRlYnVnZnMuYz0zMzc9c3RhdGljIHZvaWQgb3JhbmdlZnNfY2xpZW50X2RlYnVnX2luaXQodm9pZClcXG4tLVxcbmZzL29yYW5nZWZzL29yYW5nZWZzLWRlYnVnZnMuYy0zNTAtXFxuZnMvb3JhbmdlZnMvb3JhbmdlZnMtZGVidWdmcy5jOjM1MTpcXHRjbGllbnRfZGVidWdfZGVudHJ5ID0gZGVidWdmc19jcmVhdGVfZmlsZV9hdXhfbnVtKFxcbmZzL29yYW5nZWZzL29yYW5nZWZzLWRlYnVnZnMuYy0zNTItXFx0XFx0XFx0XFx0XFx0ICBPUkFOR0VGU19DTElFTlRfREVCVUdfRklMRSxcXG4tLVxcbmluY2x1ZGUvbGludXgvZGVidWdmcy5oPTQ2MT1zdGF0aWMgaW5saW5lIHNzaXplX3QgZGVidWdmc19yZWFkX2ZpbGVfc3RyKHN0cnVjdCBmaWxlICpmaWxlLFxcbi0tXFxuaW5jbHVkZS9saW51eC9kZWJ1Z2ZzLmgtNDY5LVxcbmluY2x1ZGUvbGludXgvZGVidWdmcy5oOjQ3MDojZGVmaW5lIGRlYnVnZnNfY3JlYXRlX2ZpbGVfYXV4X251bShuYW1lLCBtb2RlLCBwYXJlbnQsIGRhdGEsIG4sIGZvcHMpIFxcXFxcXG5pbmNsdWRlL2xpbnV4L2RlYnVnZnMuaC00NzEtXFx0ZGVidWdmc19jcmVhdGVfZmlsZV9hdXgobmFtZSwgbW9kZSwgcGFyZW50LCBkYXRhLCBcXFxcXFxuLS1cXG5tbS9zbHViLmM9MTAwNzU9c3RhdGljIHZvaWQgZGVidWdmc19zbGFiX2FkZChzdHJ1Y3Qga21lbV9jYWNoZSAqcylcXG4tLVxcbm1tL3NsdWIuYy0xMDA4My1cXG5tbS9zbHViLmM6MTAwODQ6XFx0ZGVidWdmc19jcmVhdGVfZmlsZV9hdXhfbnVtKFxcXCJhbGxvY190cmFjZXNcXFwiLCAwNDAwLCBzbGFiX2NhY2hlX2RpciwgcyxcXG5tbS9zbHViLmMtMTAwODUtXFx0XFx0XFx0XFx0XFx0VFJBQ0tfQUxMT0MsIFxcdTAwMjZzbGFiX2RlYnVnZnNfZm9wcyk7XFxubW0vc2x1Yi5jLTEwMDg2LVxcbm1tL3NsdWIuYzoxMDA4NzpcXHRkZWJ1Z2ZzX2NyZWF0ZV9maWxlX2F1eF9udW0oXFxcImZyZWVfdHJhY2VzXFxcIiwgMDQwMCwgc2xhYl9jYWNoZV9kaXIsIHMsXFxubW0vc2x1Yi5jLTEwMDg4LVxcdFxcdFxcdFxcdFxcdFRSQUNLX0ZSRUUsIFxcdTAwMjZzbGFiX2RlYnVnZnNfZm9wcyk7XFxuLS1cXG5tbS92bXNjYW4uYz02MDkzPXN0YXRpYyBpbnQgX19pbml0IGluaXRfbHJ1X2dlbih2b2lkKVxcbi0tXFxubW0vdm1zY2FuLmMtNjEwMC1cXG5tbS92bXNjYW4uYzo2MTAxOlxcdGRlYnVnZnNfY3JlYXRlX2ZpbGVfYXV4X251bShcXFwibHJ1X2dlblxcXCIsIDA2NDQsIE5VTEwsIE5VTEwsIGZhbHNlLFxcbm1tL3Ztc2Nhbi5jLTYxMDItXFx0XFx0XFx0XFx0ICAgIFxcdTAwMjZscnVfZ2VuX3J3X2ZvcHMpO1xcbm1tL3Ztc2Nhbi5jOjYxMDM6XFx0ZGVidWdmc19jcmVhdGVfZmlsZV9hdXhfbnVtKFxcXCJscnVfZ2VuX2Z1bGxcXFwiLCAwNDQ0LCBOVUxMLCBOVUxMLCB0cnVlLFxcbm1tL3Ztc2Nhbi5jLTYxMDQtXFx0XFx0XFx0XFx0ICAgIFxcdTAwMjZscnVfZ2VuX3JvX2ZvcHMpO1xcbi0tXFxuc291bmQvc29jL3NvZi9zb2YtY2xpZW50LWlwYy1mbG9vZC10ZXN0LmM9Mjg0PXN0YXRpYyBpbnQgc29mX2lwY19mbG9vZF9wcm9iZShzdHJ1Y3QgYXV4aWxpYXJ5X2RldmljZSAqYXV4ZGV2LFxcbi0tXFxuc291bmQvc29jL3NvZi9zb2YtY2xpZW50LWlwYy1mbG9vZC10ZXN0LmMtMzA2LVxcdFxcdC8qIGNyZWF0ZSByZWFkLXdyaXRlIGlwY19mbG9vZF9jb3VudCBkZWJ1Z2ZzIGVudHJ5ICovXFxuc291bmQvc29jL3NvZi9zb2YtY2xpZW50LWlwYy1mbG9vZC10ZXN0LmM6MzA3OlxcdFxcdGRlYnVnZnNfY3JlYXRlX2ZpbGVfYXV4X251bShERUJVR0ZTX0lQQ19GTE9PRF9DT1VOVCwgMDY0NCxcXG5zb3VuZC9zb2Mvc29mL3NvZi1jbGllbnQtaXBjLWZsb29kLXRlc3QuYy0zMDgtXFx0XFx0XFx0XFx0ICAgIHByaXYtXFx1MDAzZWRmc19yb290LCBjZGV2LCAwLCBcXHUwMDI2c29mX2lwY19mbG9vZF9mb3BzKTtcXG4tLVxcbnNvdW5kL3NvYy9zb2Yvc29mLWNsaWVudC1pcGMtZmxvb2QtdGVzdC5jLTMxMC1cXHRcXHQvKiBjcmVhdGUgcmVhZC13cml0ZSBpcGNfZmxvb2RfZHVyYXRpb25fbXMgZGVidWdmcyBlbnRyeSAqL1xcbnNvdW5kL3NvYy9zb2Yvc29mLWNsaWVudC1pcGMtZmxvb2QtdGVzdC5jOjMxMTpcXHRcXHRkZWJ1Z2ZzX2NyZWF0ZV9maWxlX2F1eF9udW0oREVCVUdGU19JUENfRkxPT0RfRFVSQVRJT04sIDA2NDQsXFxuc291bmQvc29jL3NvZi9zb2YtY2xpZW50LWlwYy1mbG9vZC10ZXN0LmMtMzEyLVxcdFxcdFxcdFxcdCAgICBwcml2LVxcdTAwM2VkZnNfcm9vdCwgY2RldiwgMSwgXFx1MDAyNnNvZl9pcGNfZmxvb2RfZm9wcyk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE1VDEzOjA0OjA4LjkwNDA4NDQ1OFoiLCJTZXEiOjIzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjo3NzkxODM4ODYzNCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipJbnZlc3RpZ2F0aW5nIHRoZSBscnVfZ2VuIERlYnVnZnMgSW50ZXJmYWNlKipcblxuT2theSwgc28gSSdtIGRpZ2dpbmcgaW50byB0aGUgbXVsdGlnZW4gTFJVIGltcGxlbWVudGF0aW9uLCBhbmQgdGhlIGZpcnN0IHRoaW5nIHRoYXQgY2F0Y2hlcyBteSBleWUgaXMgdGhpcyBgbW0vdm1zY2FuLmNgIGZpbGUuIFNwZWNpZmljYWxseSwgSSdtIGxvb2tpbmcgYXQgaG93IGBkZWJ1Z2ZzX2NyZWF0ZV9maWxlX2F1eF9udW1gIGlzIHVzZWQgdG8gY3JlYXRlIHRoZSBgL3N5cy9rZXJuZWwvZGVidWcvbHJ1X2dlbmAgZW50cnkuIEludGVyZXN0aW5nLi4uIHRoZSBmaWxlIG1vZGUgaXMgc2V0IHRvIDA2NDQuIFRoYXQncyBwcmV0dHkgc3RhbmRhcmQsIHJlYWQgZm9yIGV2ZXJ5b25lLCB3cml0ZSBmb3Igcm9vdCwgbWFrZXMgc2Vuc2UuIEJ1dCBpdCBhbHNvIG1lYW5zIGFueW9uZSAqY291bGQqIHBvdGVudGlhbGx5IHRyeSB0byB3cml0ZSB0byB0aGlzLCBzbyBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0IHdyaXRlcyB0byB0aGlzIGZpbGUgKmRvKi5cblxuTGV0J3Mgc2Vl4oCmIHdyaXRpbmcgdG8gdGhhdCBkZWJ1Z2ZzIGVudHJ5IGNhbGxzIGBscnVfZ2VuX3NlcV93cml0ZSgpYC4gQWxyaWdodCwgbm93IEkgbmVlZCB0byBmaWd1cmUgb3V0IHdoYXQgdGhhdCBkb2VzLCBhbmQgdGhlIGJlc3QgcGxhY2UgdG8gc3RhcnQgaXMgdGhlIGRvY3VtZW50YXRpb24uIExldCBtZSBjaGVjayB0aGUgYERvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUvbW0vbXVsdGlnZW5fbHJ1LnJzdGAgZmlsZS4gSSdsbCBlaXRoZXIgZ3JlcCBmb3IgaXRzIGNvbnRlbnRzIG9yIGp1c3QgcmVhZCBpdC4gVW5kZXJzdGFuZGluZyB3aGF0IHRoaXMgZW50cnkgY29udHJvbHMgaXMga2V5IHRvIHVuZGVyc3RhbmRpbmcgdGhlIG11bHRpZ2VuIExSVSBpbiBnZW5lcmFsLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNTI5NiwiT3V0cHV0VG9rZW5zIjoyNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE0MiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xNVQxMzowNToyNi44MjI0NzY2NjJaIiwiU2VxIjoyNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIxMDU0MjMwNiwiRXJyb3IiOiJubyBtYXRjaGVzIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwicnVuX2FnaW5nXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIkRvY3VtZW50YXRpb24vXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcImVycm9yXCI6IFwibm8gbWF0Y2hlc1wiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xNVQxMzowNToyNy4wMzMwNTIzNThaIiwiU2VxIjoyNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6NDk4ODkzOTMxMCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBteSBvd24gbWVudGFsIHByb2Nlc3MsIGdpdmVuIG15IGV4cGVydGlzZTpcblxuKipDaGVja2luZyBNdWx0aWdlbiBMUlUgRG9jdW1lbnRhdGlvbioqXG5cblJpZ2h0LCB0aW1lIHRvIGRpZyBpbnRvIHRoaXMgbXVsdGlnZW4gTFJVIGJ1c2luZXNzLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gZ28gc3RyYWlnaHQgdG8gdGhlIHNvdXJjZSDigJMgdGhlIGRvY3VtZW50YXRpb24uIFNwZWNpZmljYWxseSwgSSdtIHRoaW5raW5nIEknbGwgc3RhcnQgYnkgZ3JlcHBpbmcgdGhlIGRvY3VtZW50YXRpb24gZm9yIGBscnVfZ2VuYCB3aXRoaW4gYERvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUvbW0vbXVsdGlnZW5fbHJ1LnJzdGAuIFRoaXMgaXMgdGhlIG1vc3QgbG9naWNhbCBmaXJzdCBzdGVwLiBJIHN1c3BlY3QgdGhhdCB2YXJpYWJsZSBpcyBrZXkgdG8gdGhlIGltcGxlbWVudGF0aW9uIGRldGFpbHMgSSdtIGFmdGVyLCBhbmQgdGhhdCBkb2N1bWVudCBzaG91bGQgYmUgdGhlIHBsYWNlIHdoZXJlIHRoZSBjb25jZXB0IGlzIHRob3JvdWdobHkgZGlzY3Vzc2VkLiBHcmVwcGluZyBpcyBqdXN0IHRoZSBmYXN0ZXN0IHdheSB0byBnZXQgdG8gdGhhdCBpbmZvcm1hdGlvbiB3aXRob3V0IHJlYWRpbmcgdGhlIHdob2xlIGRvY3VtZW50LiBUaGlzIHdpbGwgaG9wZWZ1bGx5IGdpdmUgbWUgcXVpY2sgaGl0cyBvbiB3aGVyZSB0byBmb2N1cyBteSBhdHRlbnRpb24gYW5kIHNhdmUgbWUgc29tZSB0aW1lLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNTcyMywiT3V0cHV0VG9rZW5zIjozOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE1VDEzOjA1OjMyLjAyMTk5NTY3OFoiLCJTZXEiOjI2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDgxMzMyNTksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibHJ1X2dlblwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJEb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL21tL211bHRpZ2VuX2xydS5yc3RcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9tbS9tdWx0aWdlbl9scnUucnN0PTIwPVJ1bnRpbWUgb3B0aW9uc1xcbkRvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUvbW0vbXVsdGlnZW5fbHJ1LnJzdC0yMS09PT09PT09PT09PT09PT1cXG5Eb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL21tL211bHRpZ2VuX2xydS5yc3Q6MjI6YGAvc3lzL2tlcm5lbC9tbS9scnVfZ2VuL2BgIGNvbnRhaW5zIHN0YWJsZSBBQklzIGRlc2NyaWJlZCBpbiB0aGVcXG5Eb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL21tL211bHRpZ2VuX2xydS5yc3QtMjMtZm9sbG93aW5nIHN1YnNlY3Rpb25zLlxcbi0tXFxuRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9tbS9tdWx0aWdlbl9scnUucnN0PTU0PUUuZy4sXFxuLS1cXG5Eb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL21tL211bHRpZ2VuX2xydS5yc3QtNTYtXFxuRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9tbS9tdWx0aWdlbl9scnUucnN0OjU3OiAgICBlY2hvIHkgXFx1MDAzZS9zeXMva2VybmVsL21tL2xydV9nZW4vZW5hYmxlZFxcbkRvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUvbW0vbXVsdGlnZW5fbHJ1LnJzdDo1ODogICAgY2F0IC9zeXMva2VybmVsL21tL2xydV9nZW4vZW5hYmxlZFxcbkRvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUvbW0vbXVsdGlnZW5fbHJ1LnJzdC01OS0gICAgMHgwMDA3XFxuRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9tbS9tdWx0aWdlbl9scnUucnN0OjYwOiAgICBlY2hvIDUgXFx1MDAzZS9zeXMva2VybmVsL21tL2xydV9nZW4vZW5hYmxlZFxcbkRvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUvbW0vbXVsdGlnZW5fbHJ1LnJzdDo2MTogICAgY2F0IC9zeXMva2VybmVsL21tL2xydV9nZW4vZW5hYmxlZFxcbkRvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUvbW0vbXVsdGlnZW5fbHJ1LnJzdC02Mi0gICAgMHgwMDA1XFxuLS1cXG5Eb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL21tL211bHRpZ2VuX2xydS5yc3Q9ODQ9RXhwZXJpbWVudGFsIGZlYXR1cmVzXFxuRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9tbS9tdWx0aWdlbl9scnUucnN0LTg1LT09PT09PT09PT09PT09PT09PT09PVxcbkRvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUvbW0vbXVsdGlnZW5fbHJ1LnJzdDo4NjpgYC9zeXMva2VybmVsL2RlYnVnL2xydV9nZW5gYCBhY2NlcHRzIGNvbW1hbmRzIGRlc2NyaWJlZCBpbiB0aGVcXG5Eb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL21tL211bHRpZ2VuX2xydS5yc3QtODctZm9sbG93aW5nIHN1YnNlY3Rpb25zLiBNdWx0aXBsZSBjb21tYW5kIGxpbmVzIGFyZSBzdXBwb3J0ZWQsIHNvIGRvZXNcXG5Eb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL21tL211bHRpZ2VuX2xydS5yc3Q9ODg9Y29uY2F0ZW5hdGlvbiB3aXRoIGRlbGltaXRlcnMgYGAsYGAgYW5kIGBgO2BgLlxcbkRvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUvbW0vbXVsdGlnZW5fbHJ1LnJzdC04OS1cXG5Eb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL21tL211bHRpZ2VuX2xydS5yc3Q6OTA6YGAvc3lzL2tlcm5lbC9kZWJ1Zy9scnVfZ2VuX2Z1bGxgYCBwcm92aWRlcyBhZGRpdGlvbmFsIHN0YXRzIGZvclxcbkRvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUvbW0vbXVsdGlnZW5fbHJ1LnJzdC05MS1kZWJ1Z2dpbmcuIGBgQ09ORklHX0xSVV9HRU5fU1RBVFM9eWBgIGtlZXBzIGhpc3RvcmljYWwgc3RhdHMgZnJvbVxcbi0tXFxuRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9tbS9tdWx0aWdlbl9scnUucnN0PTEwMz1zY2hlZHVsZXIgbmVlZHMgdG8gZXN0aW1hdGUgdGhlIHdvcmtpbmcgc2V0cyBvZiB0aGUgZXhpc3Rpbmcgam9icy5cXG5Eb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL21tL211bHRpZ2VuX2xydS5yc3QtMTA0LVxcbkRvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUvbW0vbXVsdGlnZW5fbHJ1LnJzdDoxMDU6V2hlbiBpdCBpcyByZWFkLCBgYGxydV9nZW5gYCByZXR1cm5zIGEgaGlzdG9ncmFtIG9mIG51bWJlcnMgb2YgcGFnZXNcXG5Eb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL21tL211bHRpZ2VuX2xydS5yc3QtMTA2LWFjY2Vzc2VkIG92ZXIgZGlmZmVyZW50IHRpbWUgaW50ZXJ2YWxzIGZvciBlYWNoIG1lbWNnIGFuZCBub2RlLlxcbi0tXFxuRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9tbS9tdWx0aWdlbl9scnUucnN0PTEyMD10aGUgZm9ybWVyIGlzIHRoZSBsYXJnZXN0IGFuZCB0aGF0IG9mIHRoZSBsYXR0ZXIgaXMgdGhlIHNtYWxsZXN0LlxcbkRvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUvbW0vbXVsdGlnZW5fbHJ1LnJzdC0xMjEtXFxuRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9tbS9tdWx0aWdlbl9scnUucnN0OjEyMjpVc2VycyBjYW4gd3JpdGUgdGhlIGZvbGxvd2luZyBjb21tYW5kIHRvIGBgbHJ1X2dlbmBgIHRvIGNyZWF0ZSBhIG5ld1xcbkRvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUvbW0vbXVsdGlnZW5fbHJ1LnJzdC0xMjMtZ2VuZXJhdGlvbiBgYG1heF9nZW5fbnIrMWBgOlxcbi0tXFxuRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9tbS9tdWx0aWdlbl9scnUucnN0PTE0ND10aGlzIG5ldyBqb2IuXFxuRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9tbS9tdWx0aWdlbl9scnUucnN0LTE0NS1cXG5Eb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL21tL211bHRpZ2VuX2xydS5yc3Q6MTQ2OlVzZXJzIGNhbiB3cml0ZSB0aGUgZm9sbG93aW5nIGNvbW1hbmQgdG8gYGBscnVfZ2VuYGAgdG8gZXZpY3RcXG5Eb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL21tL211bHRpZ2VuX2xydS5yc3QtMTQ3LWdlbmVyYXRpb25zIGxlc3MgdGhhbiBvciBlcXVhbCB0byBgYG1pbl9nZW5fbnJgYC5cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTVUMTM6MDU6MzIuMDcwMTM1MDU3WiIsIlNlcSI6MjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjQzNzQ2MTI5OTcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBNdWx0aWdlbmVyYXRpb25hbCBMUlUgUGF0Y2gqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIGRvY3VtZW50YXRpb24sIGBEb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL21tL211bHRpZ2VuX2xydS5yc3RgLCBhbmQgaXQgbWVudGlvbnMgYSBjb21tYW5kIHRvIGNyZWF0ZSBhIG5ldyBnZW5lcmF0aW9uLCBzcGVjaWZpY2FsbHkgdGhlIGBscnVfZ2VuYCBjb21tYW5kLiBJdCBzZWVtcyBJIGNhbiBpbmNyZW1lbnQgdGhlIGdlbmVyYXRpb24gY291bnRlciB3aXRoIGArIFx1MDAzY21lbWNnX2lkXHUwMDNlIFx1MDAzY25vZGVfaWRcdTAwM2UgXHUwMDNjbWF4X2dlbl9uclx1MDAzZSBbc3dhcHBpbmVzc11gLiBJbnRlcmVzdGluZy4gTm93LCBsZXQncyBkaXZlIGludG8gdGhpcyBwYXRjaCBhbmQgc2VlIHdoYXQncyBiZWluZyBjaGFuZ2VkLlxuXG5BaCwgdGhlIGBtbS92bXNjYW4uY2AgZmlsZS4gSSBzZWUgdGhlIGRpZmYuIFRoZXkndmUgYWRkZWQgYSBjaGVjayB3aXRoaW4gdGhlIGBydW5fYWdpbmdgIGZ1bmN0aW9uOiBgaWYgKHNlcSBcdTAwM2MgbWF4X3NlcSkgcmV0dXJuIDA7YC4gUmlnaHQsIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoeSB0aGlzIGFkZGl0aW9uLiBMZXQncyBsb29rIGF0IHRoZSBvcmlnaW5hbCBjb2RlLlxuXG5CZWZvcmUgdGhlIHBhdGNoLCBpbiBgcnVuX2FnaW5nYCwgaWYgYHNlcWAgd2FzICpub3QqIGdyZWF0ZXIgdGhhbiBgbWF4X3NlcWAgaXQgd291bGQgcHJvY2VlZCB0byBjYWxsIGB0cnlfdG9faW5jX21heF9zZXFgLiBCdXQgd2hhdCdzIGhhcHBlbmluZyBpZiBgc2VxYCBpcyAqbGVzcyogdGhhbiBgbWF4X3NlcWA/IEJlZm9yZSB0aGUgcGF0Y2gsIGl0IHdvdWxkIHNpbXBseSBleGVjdXRlIGB0cnlfdG9faW5jX21heF9zZXFgLiBOb3cgdGhlcmUncyB0aGlzIGV4dHJhIGVhcmx5LW91dC4gVGhpcyBpcyBhIHBvdGVudGlhbCBidWchIFRoaXMgbWVhbnMgdGhhdCBpZiBgc2VxYCBpcyBsZXNzIHRoYW4gYG1heF9zZXFgLCB0aGUgZnVuY3Rpb24gd2lsbCByZXR1cm4gYDBgLCBieXBhc3NpbmcgdGhlIHBvdGVudGlhbGx5IHByb2JsZW1hdGljIGNhbGwgdG8gYHRyeV90b19pbmNfbWF4X3NlcWAuIEkgbmVlZCB0byBmaWd1cmUgb3V0IHdoYXQgYHRyeV90b19pbmNfbWF4X3NlcWAgZG9lcyB3aXRoIGBtYXhfc2VxYCB0byBmdWxseSB1bmRlcnN0YW5kIHRoaXMgbG9naWMuIEkgbmVlZCB0byBnbyBpbnZlc3RpZ2F0ZSB0aGF0IGZ1bmN0aW9uIG5vdyFcblxuXG4iLCJJbnB1dFRva2VucyI6MTY5NTEsIk91dHB1dFRva2VucyI6MzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0NTgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTVUMTM6MDU6MzYuNDQ0NzUwMzI0WiIsIlNlcSI6MjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NjU4OTQzOSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ0cnlfdG9faW5jX21heF9zZXFcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vdm1zY2FuLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vdm1zY2FuLmM9NDE0Mz1zdGF0aWMgYm9vbCBpbmNfbWF4X3NlcShzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIHVuc2lnbmVkIGxvbmcgc2VxLCBpbnQgc3dhcHBpbmVzcylcXG4tLVxcbm1tL3Ztc2Nhbi5jLTQyMDctXFxubW0vdm1zY2FuLmM6NDIwODpzdGF0aWMgYm9vbCB0cnlfdG9faW5jX21heF9zZXEoc3RydWN0IGxydXZlYyAqbHJ1dmVjLCB1bnNpZ25lZCBsb25nIHNlcSxcXG5tbS92bXNjYW4uYy00MjA5LVxcdFxcdFxcdCAgICAgICBpbnQgc3dhcHBpbmVzcywgYm9vbCBmb3JjZV9zY2FuKVxcbi0tXFxubW0vdm1zY2FuLmM9NDYyND1ib29sIHJlY2hlY2tfbHJ1X2dlbl9tYXhfbWVtY2coc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCBpbnQgbmlkKVxcbi0tXFxubW0vdm1zY2FuLmMtNDYzNi1cXG5tbS92bXNjYW4uYzo0NjM3OnN0YXRpYyB2b2lkIHRyeV90b19pbmNfbWF4X3NlcV9ub3dhbGsoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLFxcbm1tL3Ztc2Nhbi5jLTQ2MzgtXFx0XFx0XFx0XFx0ICAgICAgc3RydWN0IGxydXZlYyAqbHJ1dmVjKVxcbi0tXFxubW0vdm1zY2FuLmM9NDY3MT12b2lkIG1heF9scnVfZ2VuX21lbWNnKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgaW50IG5pZClcXG4tLVxcbm1tL3Ztc2Nhbi5jLTQ2NzctXFx0XFx0d2hpbGUgKGdldF9ucl9nZW5zKGxydXZlYywgdHlwZSkgXFx1MDAzYyBNQVhfTlJfR0VOUykge1xcbm1tL3Ztc2Nhbi5jOjQ2Nzg6XFx0XFx0XFx0dHJ5X3RvX2luY19tYXhfc2VxX25vd2FsayhtZW1jZywgbHJ1dmVjKTtcXG5tbS92bXNjYW4uYy00Njc5LVxcdFxcdFxcdGNvbmRfcmVzY2hlZCgpO1xcbi0tXFxubW0vdm1zY2FuLmM9NTE2MD1zdGF0aWMgYm9vbCBzaG91bGRfYWJvcnRfc2NhbihzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjKVxcbi0tXFxubW0vdm1zY2FuLmMtNTE5MS0gKiBGb3IgZnV0dXJlIG9wdGltaXphdGlvbnM6XFxubW0vdm1zY2FuLmM6NTE5MjogKiAxLiBEZWZlciB0cnlfdG9faW5jX21heF9zZXEoKSB0byB3b3JrcXVldWVzIHRvIHJlZHVjZSBsYXRlbmN5IGZvciBtZW1jZ1xcbm1tL3Ztc2Nhbi5jLTUxOTMtICogICAgcmVjbGFpbS5cXG4tLVxcbm1tL3Ztc2Nhbi5jPTUxOTU9c3RhdGljIGJvb2wgdHJ5X3RvX3Nocmlua19scnV2ZWMoc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYylcXG4tLVxcbm1tL3Ztc2Nhbi5jLTUyMTItXFx0XFx0aWYgKHNob3VsZF9ydW5fYWdpbmcobHJ1dmVjLCBtYXhfc2VxLCBzYywgc3dhcHBpbmVzcykpIHtcXG5tbS92bXNjYW4uYzo1MjEzOlxcdFxcdFxcdGlmICh0cnlfdG9faW5jX21heF9zZXEobHJ1dmVjLCBtYXhfc2VxLCBzd2FwcGluZXNzLCBmYWxzZSkpXFxubW0vdm1zY2FuLmMtNTIxNC1cXHRcXHRcXHRcXHRuZWVkX3JvdGF0ZSA9IHRydWU7XFxuLS1cXG5tbS92bXNjYW4uYz01ODI1PXN0YXRpYyBpbnQgcnVuX2FnaW5nKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgdW5zaWduZWQgbG9uZyBzZXEsXFxuLS1cXG5tbS92bXNjYW4uYy01ODM1LVxcbm1tL3Ztc2Nhbi5jOjU4MzY6XFx0cmV0dXJuIHRyeV90b19pbmNfbWF4X3NlcShscnV2ZWMsIG1heF9zZXEsIHN3YXBwaW5lc3MsIGZvcmNlX3NjYW4pID8gMCA6IC1FRVhJU1Q7XFxubW0vdm1zY2FuLmMtNTgzNy19XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE1VDEzOjA1OjM2LjQ5MTM0MzA0M1oiLCJTZXEiOjI5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjozNzEzMDQyMzE5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgc3VtbWFyeSwgYXMgdGhvdWdoIEknbSB0aGlua2luZyB0aHJvdWdoIHRoaXM6XG5cbioqQW5hbHl6aW5nIGB0cnlfdG9faW5jX21heF9zZXFgIGluIGBtbS92bXNjYW4uY2AqKlxuXG5Pa2F5LCBzbyBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0J3MgaGFwcGVuaW5nIHdpdGggYHRyeV90b19pbmNfbWF4X3NlcWAuIFJpZ2h0LCBsaW5lIDQyMDggaW4gYG1tL3Ztc2Nhbi5jYC4gTGV0J3MganVtcCBvdmVyIHRoZXJlIGFuZCB0YWtlIGEgbG9vay4gSSdtIGdvaW5nIHRvIHdhbnQgdG8gdW5kZXJzdGFuZCBpdHMgcm9sZSB3aXRoaW4gdGhlIGxhcmdlciBmcmFtZXdvcmsgb2YgbWVtb3J5IG1hbmFnZW1lbnQgYW5kIHRoZSB2aXJ0dWFsIG1lbW9yeSBzY2FubmluZyBwcm9jZXNzLiBTcGVjaWZpY2FsbHksIEknbGwgbmVlZCB0byBncmFzcCBob3cgdGhpcyBmdW5jdGlvbiBjb250cmlidXRlcyB0byBpbmNyZWFzaW5nIHRoZSBtYXhpbXVtIHNlcXVlbmNlIG51bWJlci4gSSdsbCBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCB0cmlnZ2VycyBpdHMgY2FsbCwgd2hhdCBpdHMgaW5wdXRzIGFyZSwgd2hhdCBpdCBkb2VzIHdpdGggdGhvc2UgaW5wdXRzLCBhbmQgd2hhdCB0aGUgdWx0aW1hdGUgcHVycG9zZSBvZiB0aGlzIHNlcXVlbmNlIGluY3JlbWVudCBpcyBpbiB0aGUgY29udGV4dCBvZiB0aGUgcGFnZSByZWNsYWltIHByb2Nlc3MuIExpa2VseSwgaXQgcGxheXMgYSByb2xlIGluIHRyYWNraW5nIG9yIG1hbmFnaW5nIHNvbWUgYXNwZWN0IG9mIG1lbW9yeSBwcmVzc3VyZSBvciBwYWdlIGFnaW5nLCBvdGhlcndpc2UsIHRoZSBmdW5jdGlvbiB3b3VsZCBiZSBwb2ludGxlc3MuIEkgc2hvdWxkIGxvb2sgZm9yIHRoZSBzdXJyb3VuZGluZyBjb2RlIGluIHRoZSBmdW5jdGlvbiB0byBwcm92aWRlIGNvbnRleHQsIGxvb2sgZm9yIGNvbW1lbnRzIGlmIHRoZXkgZXhpc3QsIGFuZCB0aGVuIGdvIGluIGZvciBhIGRlZXAgZGl2ZSB0byB3b3JrIG91dCBwcmVjaXNlbHkgd2hhdCB3ZSBhcmUgdHJ5aW5nIHRvIGFjaGlldmUgd2l0aCB0aGUgc2VxdWVuY2UgaW5jcmVtZW50LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxODU0NywiT3V0cHV0VG9rZW5zIjozNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMxLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE1VDEzOjA1OjQwLjIwNDM4ODYzMloiLCJTZXEiOjMwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NTY4MTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibW0vdm1zY2FuLmNcIixcbiAgXCJGaXJzdExpbmVcIjogNDIwOCxcbiAgXCJMaW5lQ291bnRcIjogNDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiNDIwODpcXHRzdGF0aWMgYm9vbCB0cnlfdG9faW5jX21heF9zZXEoc3RydWN0IGxydXZlYyAqbHJ1dmVjLCB1bnNpZ25lZCBsb25nIHNlcSxcXG40MjA5OlxcdFxcdFxcdFxcdCAgICAgICBpbnQgc3dhcHBpbmVzcywgYm9vbCBmb3JjZV9zY2FuKVxcbjQyMTA6XFx0e1xcbjQyMTE6XFx0XFx0Ym9vbCBzdWNjZXNzO1xcbjQyMTI6XFx0XFx0c3RydWN0IGxydV9nZW5fbW1fd2FsayAqd2FsaztcXG40MjEzOlxcdFxcdHN0cnVjdCBtbV9zdHJ1Y3QgKm1tID0gTlVMTDtcXG40MjE0OlxcdFxcdHN0cnVjdCBscnVfZ2VuX2ZvbGlvICpscnVnZW4gPSBcXHUwMDI2bHJ1dmVjLVxcdTAwM2VscnVnZW47XFxuNDIxNTpcXHRcXHRzdHJ1Y3QgbHJ1X2dlbl9tbV9zdGF0ZSAqbW1fc3RhdGUgPSBnZXRfbW1fc3RhdGUobHJ1dmVjKTtcXG40MjE2OlxcdFxcbjQyMTc6XFx0XFx0Vk1fV0FSTl9PTl9PTkNFKHNlcSBcXHUwMDNlIFJFQURfT05DRShscnVnZW4tXFx1MDAzZW1heF9zZXEpKTtcXG40MjE4OlxcdFxcbjQyMTk6XFx0XFx0aWYgKCFtbV9zdGF0ZSlcXG40MjIwOlxcdFxcdFxcdHJldHVybiBpbmNfbWF4X3NlcShscnV2ZWMsIHNlcSwgc3dhcHBpbmVzcyk7XFxuNDIyMTpcXHRcXG40MjIyOlxcdFxcdC8qIHNlZSB0aGUgY29tbWVudCBpbiBpdGVyYXRlX21tX2xpc3QoKSAqL1xcbjQyMjM6XFx0XFx0aWYgKHNlcSBcXHUwMDNjPSBSRUFEX09OQ0UobW1fc3RhdGUtXFx1MDAzZXNlcSkpXFxuNDIyNDpcXHRcXHRcXHRyZXR1cm4gZmFsc2U7XFxuNDIyNTpcXHRcXG40MjI2OlxcdFxcdC8qXFxuNDIyNzpcXHRcXHQgKiBJZiB0aGUgaGFyZHdhcmUgZG9lc24ndCBhdXRvbWF0aWNhbGx5IHNldCB0aGUgYWNjZXNzZWQgYml0LCBmYWxsYmFja1xcbjQyMjg6XFx0XFx0ICogdG8gbHJ1X2dlbl9sb29rX2Fyb3VuZCgpLCB3aGljaCBvbmx5IGNsZWFycyB0aGUgYWNjZXNzZWQgYml0IGluIGFcXG40MjI5OlxcdFxcdCAqIGhhbmRmdWwgb2YgUFRFcy4gU3ByZWFkaW5nIHRoZSB3b3JrIG91dCBvdmVyIGEgcGVyaW9kIG9mIHRpbWUgdXN1YWxseVxcbjQyMzA6XFx0XFx0ICogaXMgbGVzcyBlZmZpY2llbnQsIGJ1dCBpdCBhdm9pZHMgYnVyc3R5IHBhZ2UgZmF1bHRzLlxcbjQyMzE6XFx0XFx0ICovXFxuNDIzMjpcXHRcXHRpZiAoIXNob3VsZF93YWxrX21tdSgpKSB7XFxuNDIzMzpcXHRcXHRcXHRzdWNjZXNzID0gaXRlcmF0ZV9tbV9saXN0X25vd2FsayhscnV2ZWMsIHNlcSk7XFxuNDIzNDpcXHRcXHRcXHRnb3RvIGRvbmU7XFxuNDIzNTpcXHRcXHR9XFxuNDIzNjpcXHRcXG40MjM3OlxcdFxcdHdhbGsgPSBzZXRfbW1fd2FsayhOVUxMLCB0cnVlKTtcXG40MjM4OlxcdFxcdGlmICghd2Fsaykge1xcbjQyMzk6XFx0XFx0XFx0c3VjY2VzcyA9IGl0ZXJhdGVfbW1fbGlzdF9ub3dhbGsobHJ1dmVjLCBzZXEpO1xcbjQyNDA6XFx0XFx0XFx0Z290byBkb25lO1xcbjQyNDE6XFx0XFx0fVxcbjQyNDI6XFx0XFxuNDI0MzpcXHRcXHR3YWxrLVxcdTAwM2VscnV2ZWMgPSBscnV2ZWM7XFxuNDI0NDpcXHRcXHR3YWxrLVxcdTAwM2VzZXEgPSBzZXE7XFxuNDI0NTpcXHRcXHR3YWxrLVxcdTAwM2Vzd2FwcGluZXNzID0gc3dhcHBpbmVzcztcXG40MjQ2OlxcdFxcdHdhbGstXFx1MDAzZWZvcmNlX3NjYW4gPSBmb3JjZV9zY2FuO1xcbjQyNDc6XFx0XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE1VDEzOjA1OjQwLjIwNDg0Nzk1MloiLCJTZXEiOjMxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjo5NTM2NDk1ODQ3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5c2lzIG9mIE11bHRpLUdlbiBMUlUgUGF0Y2ggaW4gTWVtb3J5IE1hbmFnZW1lbnQqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIE15IGluaXRpYWwgdGhvdWdodCBpcyB0aGF0IHRoaXMgcGF0Y2ggaW4gYG1tL3Ztc2Nhbi5jYCwgcmVsYXRlZCB0byB0aGUgTXVsdGktR2VuIExSVSBzdWJzeXN0ZW0sIGlzIGludGVyZXN0aW5nLiBJdCBzZWVtcyB0byBjb3JyZWN0IGEgc3VidGxlIGxvZ2ljIGVycm9yIHdpdGhpbiB0aGUgYHJ1bl9hZ2luZ2AgZnVuY3Rpb24gYW5kIGhvdyBpdCBpbnRlcmFjdHMgd2l0aCB0aGUgYHNlcWAgcGFyYW1ldGVyIHByb3ZpZGVkIGJ5IHVzZXJzcGFjZS4gU3BlY2lmaWNhbGx5LCB0aGUgcGF0Y2ggYWRkcmVzc2VzIGEgc2NlbmFyaW8gd2hlcmUgdGhlIGtlcm5lbCB3b3VsZCBhdHRlbXB0IHRvIGluY3JlbWVudCBgbWF4X3NlcWAgZXZlbiB3aGVuIHRoZSB0YXJnZXQgYHNlcWAgd2FzIGFscmVhZHkgbGVzcyB0aGFuIHRoZSBjdXJyZW50IGBtYXhfc2VxYC4gVGhpcyBpbmRpY2F0ZWQgdGhhdCB1c2Vyc3BhY2Ugd2FzIHRyeWluZyB0byBhZ2UgdG8gYSBwb2ludCAqYmVoaW5kKiB3aGVyZSB0aGUgYWdpbmcgaGFkIGFscmVhZHkgb2NjdXJyZWQsIHdoaWNoIGlzIGlsbG9naWNhbC4gVGhlIG9yaWdpbmFsIGNvZGUncyBpbmNyZW1lbnQgbG9naWMgYXBwZWFyZWQgZmxhd2VkIGluIHRoaXMgY29uZGl0aW9uLlxuXG5Mb29raW5nIGF0IHRoZSBjb2RlLCBpdCBsb29rcyBsaWtlOiBpbiBgcnVuX2FnaW5nYCwgYG1heF9zZXFgIGlzIGRlZmluZWQuIFRoZSB1c2VyIHByb3ZpZGVzIGBzZXFgLiBJZiBgc2VxIFx1MDAzYyBtYXhfc2VxYCB0aGVuIHRoZSB1c2VyIGlzIGFza2luZyB0byBjcmVhdGUgZ2VuZXJhdGlvbiB1cCB0byBgc2VxYCwgYnV0IGBtYXhfc2VxYCBpcyBhbHJlYWR5IGdyZWF0ZXIgdGhhbiBgc2VxYCEgVGhlIHBhdGNoIG5vdyBwcmV2ZW50cyB0aGUgaWxsb2dpY2FsIGluY3JlbWVudCBvZiBgbWF4X3NlcWAgaW4gdGhhdCBjYXNlLCB3aGljaCBzaW1wbGlmaWVzIHRoaW5ncy4gSW4gYHJ1bl9ldmljdGlvbmAsIGlmIGBzZXEgXHUwMDNjIGV2aWN0YWJsZV9taW5fc2VxYCBpdCByZXR1cm5zIDAuIElmIGBzZXEgXHUwMDNlIG1heF9zZXFgIGl0IHJldHVybnMgYC1FSU5WQUxgLiBJdCBjYWxscyBgdHJ5X3RvX2luY19tYXhfc2VxKGxydXZlYywgbWF4X3NlcSwgc3dhcHBpbmVzcywgZm9yY2Vfc2NhbilgIHdoZW4gdGhlIGxvZ2ljIGlzIGNoYW5nZWQuXG5cbk5vdywgYXMgYW4gZXhwZXJ0LCBJJ20gZXZhbHVhdGluZyB3aGV0aGVyIHRoaXMgY2hhbmdlIHdhcnJhbnRzIGZ1cnRoZXIgaW52ZXN0aWdhdGlvbiBvciBmdXp6aW5nLiBUaGUga2V5IGNyaXRlcmlhLCBiYXNlZCBvbiB0aGUgcHJvdmlkZWQgaW5zdHJ1Y3Rpb25zLCByZXZvbHZlcyBhcm91bmQgcmVhY2hhYmlsaXR5IGFuZCB0aGUgbmF0dXJlIG9mIHRoZSBtb2RpZmljYXRpb25zLlxuXG5GaXJzdCwgKipyZWFjaGFiaWxpdHkqKiBpcyBrZXkuIFRoZSBjb2RlIHJlc2lkZXMgaW4gYC9zeXMva2VybmVsL2RlYnVnL2xydV9nZW5gIGEgZGVidWdmcyBmaWxlLCB3aGljaCBtZWFucyB0aGF0IGl0IGNhbiBiZSBleGVjdXRlZCBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMuIFRoaXMgaXMgZ29vZC4gSXQncyBtZW1vcnkgbWFuYWdlbWVudCBjb2RlLiBBbnlvbmUgY2FuIGFjY2VzcyB0aGlzLiBTbyB0aGF0IG1lYW5zIGl0IGNhbiBiZSByZWFjaGVkIVxuXG5TZWNvbmQsIEkgbmVlZCB0byBldmFsdWF0ZSAqd2hlbiB0byByZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlKi5cbi0gICBUaGlzIGlzbid0IG5vbi1rZXJuZWwgb3Igbm9uLWV4ZWN1dGFibGUgY2hhbmdlcywgaXQncyBjb2RlIGluIGBtbS92bXNjYW4uY2AuXG4tICAgVGhpcyBpcyBub3Qgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlLCBhcyBpdCBpcyBtZW1vcnkgbWFuYWdlbWVudCBjb2RlLlxuLSAgIFRoaXMgaXNuJ3QgYW4gdW5yZWFjaGFibGUgZXhlY3V0aW9uIHBhdGgsIGFzIGl0IGNhbiBiZSByZWFjaGVkIHZpYSBkZWJ1Z2ZzIGAvc3lzL2tlcm5lbC9kZWJ1Zy9scnVfZ2VuYC5cblxuVGhpcmQsIEkgbmVlZCB0byBldmFsdWF0ZSAqd2hlbiB0byByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUqLlxuLSAgIFRoaXMgaXMgYSAqKmNvcmUgc3Vic3lzdGVtKiogY2hhbmdlIChtZW1vcnkgbWFuYWdlbWVudCwgaW4gYG1tL2ApLlxuLSAgIFRoaXMgY29uc3RpdHV0ZXMgYSByZWZhY3RvcmluZyBvZiB0aGUgYWxnb3JpdGhtIGZsb3csIHNwZWNpZmljYWxseSBpbiBob3cgdGhlIFwic2VxXCIgdmFsdWUgaW50ZXJhY3RzIHdpdGggYWdpbmcgb3BlcmF0aW9ucy4gVGhpcyBtZWFucyBpdCBpcyB3b3J0aCBmdXp6aW5nIVxuXG5UaGlzIGFsc28gYnJpbmdzIGluIHRoZSBxdWVzdGlvbiBvZiBzeXprYWxsZXIuXG5cbkNhbiBzeXprYWxsZXIgZnV6eiBkZWJ1Z2ZzIGZpbGVzIG9yIHRoaXMgaW50ZXJmYWNlPyAqKlllcyEqKiBzeXprYWxsZXIgb3BlbnMgZmlsZXMgaW4gYC9zeXMva2VybmVsL2RlYnVnLy4uLmAgKHN5emthbGxlciBoYXMgYHN5el9vcGVuX2RldmAsIGBvcGVuYXRgLCBldGMuIGFuZCBjYW4gd3JpdGUgdG8gZGVidWdmcyBmaWxlcyBpZiByb290KS5cbkFuZCBldmVuIGlmIHN5emthbGxlciBkb2Vzbid0IGhhdmUgYW4gZXhwbGljaXQgdGVtcGxhdGUgZm9yIGBscnVfZ2VuYCwgc3l6a2FsbGVyIGZ1enplcyBmaWxlIHN5c3RlbXMgYW5kIGRlYnVnZnMgcGF0aHMsIG9yIHN5emthbGxlciBjYW4gdGFyZ2V0IGl0LlxuXG5GaW5hbGx5LCB0aGUgY29uZmlnIG9wdGlvbnM6IGBDT05GSUdfTFJVX0dFTmAgaXMgb2J2aW91c2x5IHJlcXVpcmVkIChNdWx0aS1HZW4gTFJVKSwgYW5kIGNyaXRpY2FsbHksIGBDT05GSUdfREVCVUdfRlNgIGlzICphbHNvKiBhIHJlcXVpcmVtZW50IHNpbmNlIHRoZSBkZWJ1Z2ZzIGZpbGUgYC9zeXMva2VybmVsL2RlYnVnL2xydV9nZW5gIGlzIGNyZWF0ZWQgYnkgYGRlYnVnZnNfY3JlYXRlX2ZpbGVfYXV4X251bWAuIFRoaXMgaXMgaW4gYGluaXRfbHJ1X2dlbmAuXG5cbkFuZCBmaW5hbGx5LCBgcnVuX2NtZGAgZG9lcyAqbm90KiByZXF1aXJlIGBDT05GSUdfTUVNQ0dgLiBJbiBgbW0vdm1zY2FuLmNgLCBsaW5lIDYwOTEgaGFzIGAjZW5kaWYgLyogQ09ORklHX01FTUNHICovYCB3aGljaCBtZWFucyB0aGUgZnVuY3Rpb24gaXMgKm5vdCogaW5zaWRlIHRoZSBgI2lmZGVmIENPTkZJR19NRU1DR2AgYmxvY2ssIHNvIGl0IGlzIGluZGVwZW5kZW50LlxuXG5CYXNlZCBvbiB0aGlzIGFuYWx5c2lzLCBJJ20gY29uZmlkZW50IHRoYXQgdGhpcyBwYXRjaCBpbiB0aGUgTXVsdGktR2VuIExSVSBzdWJzeXN0ZW0gd2FycmFudHMgZnVydGhlciBpbnZlc3RpZ2F0aW9uIGFuZCBmdXp6aW5nLCBnaXZlbiB0aGUgcG90ZW50aWFsIGZvciBzdWJ0bGUgbWVtb3J5IG1hbmFnZW1lbnQgaXNzdWVzIGFuZCBpdHMgYWNjZXNzaWJpbGl0eSB2aWEgZGVidWdmcy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTk1MDcsIk91dHB1dFRva2VucyI6MzIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNDkzLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTVUMTM6MDU6NDkuNzQxMzQ2NTQ5WiIsIlNlcSI6MzIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0ODk2NDA2OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCIjaWZkZWYgQ09ORklHX01FTUNHXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL3Ztc2Nhbi5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL3Ztc2Nhbi5jPTIyMz1zdGF0aWMgaW50IHNjX3N3YXBwaW5lc3Moc3RydWN0IHNjYW5fY29udHJvbCAqc2MsIHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZylcXG4tLVxcbm1tL3Ztc2Nhbi5jLTIyOS1cXG5tbS92bXNjYW4uYzoyMzA6I2lmZGVmIENPTkZJR19NRU1DR1xcbm1tL3Ztc2Nhbi5jLTIzMS1cXG4tLVxcbm1tL3Ztc2Nhbi5jPTI4MjQ9c3RhdGljIHN0cnVjdCBscnV2ZWMgKmdldF9scnV2ZWMoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCBpbnQgbmlkKVxcbi0tXFxubW0vdm1zY2FuLmMtMjgyNy1cXG5tbS92bXNjYW4uYzoyODI4OiNpZmRlZiBDT05GSUdfTUVNQ0dcXG5tbS92bXNjYW4uYy0yODI5LVxcdGlmIChtZW1jZykge1xcbi0tXFxubW0vdm1zY2FuLmM9Mjk4Mj1zdGF0aWMgc3RydWN0IGxydV9nZW5fbW1fbGlzdCAqZ2V0X21tX2xpc3Qoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKVxcbi0tXFxubW0vdm1zY2FuLmMtMjk4OC1cXG5tbS92bXNjYW4uYzoyOTg5OiNpZmRlZiBDT05GSUdfTUVNQ0dcXG5tbS92bXNjYW4uYy0yOTkwLVxcdGlmIChtZW1jZylcXG4tLVxcbm1tL3Ztc2Nhbi5jPTMwMjI9dm9pZCBscnVfZ2VuX2FkZF9tbShzdHJ1Y3QgbW1fc3RydWN0ICptbSlcXG4tLVxcbm1tL3Ztc2Nhbi5jLTMwMjgtXFx0Vk1fV0FSTl9PTl9PTkNFKCFsaXN0X2VtcHR5KFxcdTAwMjZtbS1cXHUwMDNlbHJ1X2dlbi5saXN0KSk7XFxubW0vdm1zY2FuLmM6MzAyOTojaWZkZWYgQ09ORklHX01FTUNHXFxubW0vdm1zY2FuLmMtMzAzMC1cXHRWTV9XQVJOX09OX09OQ0UobW0tXFx1MDAzZWxydV9nZW4ubWVtY2cpO1xcbi0tXFxubW0vdm1zY2FuLmM9MzA0OT12b2lkIGxydV9nZW5fZGVsX21tKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tKVxcbi0tXFxubW0vdm1zY2FuLmMtMzA1Ny1cXG5tbS92bXNjYW4uYzozMDU4OiNpZmRlZiBDT05GSUdfTUVNQ0dcXG5tbS92bXNjYW4uYy0zMDU5LVxcdG1lbWNnID0gbW0tXFx1MDAzZWxydV9nZW4ubWVtY2c7XFxuLS1cXG5tbS92bXNjYW4uYy0zMDgxLVxcbm1tL3Ztc2Nhbi5jOjMwODI6I2lmZGVmIENPTkZJR19NRU1DR1xcbm1tL3Ztc2Nhbi5jLTMwODMtXFx0bWVtX2Nncm91cF9wdXQobW0tXFx1MDAzZWxydV9nZW4ubWVtY2cpO1xcbi0tXFxubW0vdm1zY2FuLmMtMzA4Ny1cXG5tbS92bXNjYW4uYzozMDg4OiNpZmRlZiBDT05GSUdfTUVNQ0dcXG5tbS92bXNjYW4uYy0zMDg5LXZvaWQgbHJ1X2dlbl9taWdyYXRlX21tKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tKVxcbi0tXFxubW0vdm1zY2FuLmM9NDUxNj1zdGF0aWMgdm9pZCBscnVfZ2VuX3JvdGF0ZV9tZW1jZyhzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIGludCBvcClcXG4tLVxcbm1tL3Ztc2Nhbi5jLTQ1NTktXFxubW0vdm1zY2FuLmM6NDU2MDojaWZkZWYgQ09ORklHX01FTUNHXFxubW0vdm1zY2FuLmMtNDU2MS1cXG4tLVxcbm1tL3Ztc2Nhbi5jPTU3NjI9c3RhdGljIGludCBscnVfZ2VuX3NlcV9zaG93KHN0cnVjdCBzZXFfZmlsZSAqbSwgdm9pZCAqdilcXG4tLVxcbm1tL3Ztc2Nhbi5jLTU3NzUtXFxubW0vdm1zY2FuLmM6NTc3NjojaWZkZWYgQ09ORklHX01FTUNHXFxubW0vdm1zY2FuLmMtNTc3Ny1cXHRcXHRpZiAobWVtY2cpXFxuLS1cXG5tbS92bXNjYW4uYz02MDMxPXZvaWQgbHJ1X2dlbl9pbml0X2xydXZlYyhzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMpXFxuLS1cXG5tbS92bXNjYW4uYy02MDUwLVxcbm1tL3Ztc2Nhbi5jOjYwNTE6I2lmZGVmIENPTkZJR19NRU1DR1xcbm1tL3Ztc2Nhbi5jLTYwNTItXFxuLS1cXG5tbS92bXNjYW4uYz02OTA5PXVuc2lnbmVkIGxvbmcgdHJ5X3RvX2ZyZWVfcGFnZXMoc3RydWN0IHpvbmVsaXN0ICp6b25lbGlzdCwgaW50IG9yZGVyLFxcbi0tXFxubW0vdm1zY2FuLmMtNjk1MS1cXG5tbS92bXNjYW4uYzo2OTUyOiNpZmRlZiBDT05GSUdfTUVNQ0dcXG5tbS92bXNjYW4uYy02OTUzLVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xNVQxMzowNTo0OS43OTAzMTYzNjhaIiwiU2VxIjozMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6MTY1MTk1NjIyNjQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCdzIGRpdmUgaW50byB0aGlzIGNvZGUuXG5cbioqSW52ZXN0aWdhdGluZyBhIENvbmRpdGlvbmFsIENvbXBpbGF0aW9uIEJsb2NrKipcblxuQWxyaWdodCwgSSBzZWUgdGhpcyBgI2VuZGlmIC8qIENPTkZJR19NRU1DRyAqL2Agb24gbGluZSA2MDkxLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcywgXCJPa2F5LCB3aGF0J3MgKnRoaXMqIHJlZmVycmluZyB0bz9cIiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgc2NvcGUgb2YgdGhpcyBjb25kaXRpb25hbCBjb21waWxhdGlvbi4gSXQncyBhIGtleSBwaWVjZSBvZiB0aGUgcHV6emxlIGJlY2F1c2UgaXQgbWVhbnMgY29kZSB3aXRoaW4gdGhhdCBibG9jayBpcyBwb3RlbnRpYWxseSBhY3RpdmUgb3IgaW5hY3RpdmUgZGVwZW5kaW5nIG9uIGEgY29tcGlsZS10aW1lIGNvbmZpZ3VyYXRpb24gc2V0dGluZyDigJMgc3BlY2lmaWNhbGx5LCB3aGV0aGVyIGBDT05GSUdfTUVNQ0dgIGlzIGRlZmluZWQuIFRvIGdyYXNwIHdoYXQncyBnb2luZyBvbiwgSSBuZWVkIHRoZSBjb250ZXh0LiBTbywgSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCB0aGlzIGJsb2NrIGlzIGludGVuZGVkIHRvIGFjaGlldmUuIFRoZXJlZm9yZSwgbGV0J3MgcXVpY2tseSBleGFtaW5lIHRoZSBsaW5lcyBmcm9tIDYwNDggdG8gNjA5NS4gVGhhdCBzaG91bGQgYmUgZW5vdWdoIHRvIHJldmVhbCB3aGF0J3MgYmVpbmcgY29uZGl0aW9uYWxseSBpbmNsdWRlZC5cblxuXG4iLCJJbnB1dFRva2VucyI6MjI4OTAsIk91dHB1dFRva2VucyI6MzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0MiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xNVQxMzowNjowNi4zMDk4ODExMzNaIiwiU2VxIjozNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MzAxODYwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm1tL3Ztc2Nhbi5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDYwNDgsXG4gIFwiTGluZUNvdW50XCI6IDQ4XG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjYwNDg6XFx0XFx0XFx0bW1fc3RhdGUtXFx1MDAzZXNlcSA9IE1JTl9OUl9HRU5TO1xcbjYwNDk6XFx0fVxcbjYwNTA6XFx0XFxuNjA1MTpcXHQjaWZkZWYgQ09ORklHX01FTUNHXFxuNjA1MjpcXHRcXG42MDUzOlxcdHZvaWQgbHJ1X2dlbl9pbml0X21lbWNnKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZylcXG42MDU0OlxcdHtcXG42MDU1OlxcdFxcdHN0cnVjdCBscnVfZ2VuX21tX2xpc3QgKm1tX2xpc3QgPSBnZXRfbW1fbGlzdChtZW1jZyk7XFxuNjA1NjpcXHRcXG42MDU3OlxcdFxcdGlmICghbW1fbGlzdClcXG42MDU4OlxcdFxcdFxcdHJldHVybjtcXG42MDU5OlxcdFxcbjYwNjA6XFx0XFx0SU5JVF9MSVNUX0hFQUQoXFx1MDAyNm1tX2xpc3QtXFx1MDAzZWZpZm8pO1xcbjYwNjE6XFx0XFx0c3Bpbl9sb2NrX2luaXQoXFx1MDAyNm1tX2xpc3QtXFx1MDAzZWxvY2spO1xcbjYwNjI6XFx0fVxcbjYwNjM6XFx0XFxuNjA2NDpcXHR2b2lkIGxydV9nZW5fZXhpdF9tZW1jZyhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpXFxuNjA2NTpcXHR7XFxuNjA2NjpcXHRcXHRpbnQgaTtcXG42MDY3OlxcdFxcdGludCBuaWQ7XFxuNjA2ODpcXHRcXHRzdHJ1Y3QgbHJ1X2dlbl9tbV9saXN0ICptbV9saXN0ID0gZ2V0X21tX2xpc3QobWVtY2cpO1xcbjYwNjk6XFx0XFxuNjA3MDpcXHRcXHRWTV9XQVJOX09OX09OQ0UobW1fbGlzdCBcXHUwMDI2XFx1MDAyNiAhbGlzdF9lbXB0eShcXHUwMDI2bW1fbGlzdC1cXHUwMDNlZmlmbykpO1xcbjYwNzE6XFx0XFxuNjA3MjpcXHRcXHRmb3JfZWFjaF9ub2RlKG5pZCkge1xcbjYwNzM6XFx0XFx0XFx0c3RydWN0IGxydXZlYyAqbHJ1dmVjID0gZ2V0X2xydXZlYyhtZW1jZywgbmlkKTtcXG42MDc0OlxcdFxcdFxcdHN0cnVjdCBscnVfZ2VuX21tX3N0YXRlICptbV9zdGF0ZSA9IGdldF9tbV9zdGF0ZShscnV2ZWMpO1xcbjYwNzU6XFx0XFxuNjA3NjpcXHRcXHRcXHRWTV9XQVJOX09OX09OQ0UobWVtY2hyX2ludihscnV2ZWMtXFx1MDAzZWxydWdlbi5ucl9wYWdlcywgMCxcXG42MDc3OlxcdFxcdFxcdFxcdFxcdFxcdCAgIHNpemVvZihscnV2ZWMtXFx1MDAzZWxydWdlbi5ucl9wYWdlcykpKTtcXG42MDc4OlxcdFxcbjYwNzk6XFx0XFx0XFx0bHJ1dmVjLVxcdTAwM2VscnVnZW4ubGlzdC5uZXh0ID0gTElTVF9QT0lTT04xO1xcbjYwODA6XFx0XFxuNjA4MTpcXHRcXHRcXHRpZiAoIW1tX3N0YXRlKVxcbjYwODI6XFx0XFx0XFx0XFx0Y29udGludWU7XFxuNjA4MzpcXHRcXG42MDg0OlxcdFxcdFxcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBOUl9CTE9PTV9GSUxURVJTOyBpKyspIHtcXG42MDg1OlxcdFxcdFxcdFxcdGJpdG1hcF9mcmVlKG1tX3N0YXRlLVxcdTAwM2VmaWx0ZXJzW2ldKTtcXG42MDg2OlxcdFxcdFxcdFxcdG1tX3N0YXRlLVxcdTAwM2VmaWx0ZXJzW2ldID0gTlVMTDtcXG42MDg3OlxcdFxcdFxcdH1cXG42MDg4OlxcdFxcdH1cXG42MDg5OlxcdH1cXG42MDkwOlxcdFxcbjYwOTE6XFx0I2VuZGlmIC8qIENPTkZJR19NRU1DRyAqL1xcbjYwOTI6XFx0XFxuNjA5MzpcXHRzdGF0aWMgaW50IF9faW5pdCBpbml0X2xydV9nZW4odm9pZClcXG42MDk0OlxcdHtcXG42MDk1OlxcdFxcdEJVSUxEX0JVR19PTihNSU5fTlJfR0VOUyArIDEgXFx1MDAzZT0gTUFYX05SX0dFTlMpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xNVQxMzowNjowNi4zMTAxODU0NTNaIiwiU2VxIjozNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6MjQyMDk2MzI4MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIENvZGUncyBDb25kaXRpb25hbCBDb21waWxhdGlvbioqXG5cbkFscmlnaHQsIHNvIGBDT05GSUdfTUVNQ0dgIGZpbmlzaGVkIHVwIGFyb3VuZCBsaW5lIDYwOTEsIGJ1dCB0aGlzIGBydW5fYWdpbmdgIGZ1bmN0aW9uLCBpdCdzIHNpdHRpbmcgYXQgcm91Z2hseSBsaW5lIDU4MjcuIEkgbmVlZCB0byBmaWd1cmUgb3V0IHRoZSBjb25kaXRpb25hbCBjb21waWxhdGlvbiB0aGF0IGNvbnRyb2xzIGl0LiBNeSBndXQgdGVsbHMgbWUgaXQncyBsaWtlbHkgd3JhcHBlZCBpbiBhbiBgI2lmZGVmYCBvciBgI2lmYCBzdGF0ZW1lbnQuIE5vIG5lZWQgdG8gZ28gbGluZSBieSBsaW5lIGhlcmUsIGxldCdzIGp1c3QgbWFrZSB1c2Ugb2YgdGhlIGVkaXRvciBhbmQgcXVpY2tseSBzZWFyY2ggYmFja3dhcmRzIGZyb20gbGluZSA1ODI3IGZvciB0aGUgc3RhcnQgb2YgdGhlIHJlbGV2YW50IGAjaWZgIGJsb2NrIGFuZCBzZWUgd2hhdCdzIHdoYXQuIFRoaXMgc2hvdWxkbid0IHRha2UgbG9uZy5cblxuXG4iLCJJbnB1dFRva2VucyI6MjM4NzYsIk91dHB1dFRva2VucyI6MjksIk91dHB1dFRob3VnaHRzVG9rZW5zIjo2NiwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE1VDEzOjA2OjA4LjczMTE1MjgyNFoiLCJTZXEiOjM2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzQ5NzU3NjgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiXiNpZlwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS92bXNjYW4uY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS92bXNjYW4uYz03Nj1zdHJ1Y3Qgc2Nhbl9jb250cm9sIHtcXG4tLVxcbm1tL3Ztc2Nhbi5jLTE4My1cXG5tbS92bXNjYW4uYzoxODQ6I2lmZGVmIEFSQ0hfSEFTX1BSRUZFVENIV1xcbm1tL3Ztc2Nhbi5jLTE4NS1zdGF0aWMgaW5saW5lIHZvaWQgcHJlZmV0Y2h3X3ByZXZfbHJ1X2ZvbGlvKHN0cnVjdCBmb2xpbyAqZm9saW8sXFxuLS1cXG5tbS92bXNjYW4uYz0yMjM9c3RhdGljIGludCBzY19zd2FwcGluZXNzKHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjLCBzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpXFxuLS1cXG5tbS92bXNjYW4uYy0yMjktXFxubW0vdm1zY2FuLmM6MjMwOiNpZmRlZiBDT05GSUdfTUVNQ0dcXG5tbS92bXNjYW4uYy0yMzEtXFxuLS1cXG5tbS92bXNjYW4uYz0yNjA9c3RhdGljIGJvb2wgd3JpdGViYWNrX3Rocm90dGxpbmdfc2FuZShzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYylcXG4tLVxcbm1tL3Ztc2Nhbi5jLTI2My1cXHRcXHRyZXR1cm4gdHJ1ZTtcXG5tbS92bXNjYW4uYzoyNjQ6I2lmZGVmIENPTkZJR19DR1JPVVBfV1JJVEVCQUNLXFxubW0vdm1zY2FuLmMtMjY1LVxcdGlmIChjZ3JvdXBfc3Vic3lzX29uX2RmbChtZW1vcnlfY2dycF9zdWJzeXMpKVxcbi0tXFxubW0vdm1zY2FuLmM9MzQ1PXN0YXRpYyBib29sIGNhbl9kZW1vdGUoaW50IG5pZCwgc3RydWN0IHNjYW5fY29udHJvbCAqc2MsXFxuLS1cXG5tbS92bXNjYW4uYy0zNjQtXFxubW0vdm1zY2FuLmM6MzY1OiNpZmRlZiBDT05GSUdfU1dBUFxcbm1tL3Ztc2Nhbi5jLTM2Ni1zdGF0aWMgaW5saW5lIGJvb2wgcmVjbGFpbWFibGVfYW5vbl9pc19sb3coc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLFxcbi0tXFxubW0vdm1zY2FuLmM9ODk5PWVudW0gZm9saW9fcmVmZXJlbmNlcyB7XFxuLS1cXG5tbS92bXNjYW4uYy05MDQtXFxubW0vdm1zY2FuLmM6OTA1OiNpZmRlZiBDT05GSUdfTFJVX0dFTlxcbm1tL3Ztc2Nhbi5jLTkwNi0vKlxcbi0tXFxubW0vdm1zY2FuLmM9MTEzMz1zdGF0aWMgdW5zaWduZWQgaW50IHNocmlua19mb2xpb19saXN0KHN0cnVjdCBsaXN0X2hlYWQgKmZvbGlvX2xpc3QsXFxuLS1cXG5tbS92bXNjYW4uYy0xMzY3LVxcdFxcdFxcdFxcdFxcdGdvdG8gYWN0aXZhdGVfbG9ja2VkO1xcbm1tL3Ztc2Nhbi5jOjEzNjg6I2lmZGVmIENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRVxcbm1tL3Ztc2Nhbi5jLTEzNjktXFx0XFx0XFx0XFx0aWYgKG5yX3BhZ2VzIFxcdTAwM2U9IEhQQUdFX1BNRF9OUikge1xcbi0tXFxubW0vdm1zY2FuLmM9Mjc2MD1zdGF0aWMgYm9vbCBjYW5fYWdlX2Fub25fcGFnZXMoc3RydWN0IGxydXZlYyAqbHJ1dmVjLFxcbi0tXFxubW0vdm1zY2FuLmMtMjc3MS1cXG5tbS92bXNjYW4uYzoyNzcyOiNpZmRlZiBDT05GSUdfTFJVX0dFTlxcbm1tL3Ztc2Nhbi5jLTI3NzMtXFxubW0vdm1zY2FuLmM9Mjc3ND1ERUZJTkVfU1RBVElDX0tFWV9GQUxTRShscnVfc3dpdGNoKTtcXG5tbS92bXNjYW4uYzoyNzc1OiNpZmRlZiBDT05GSUdfTFJVX0dFTl9FTkFCTEVEXFxubW0vdm1zY2FuLmMtMjc3Ni1ERUZJTkVfU1RBVElDX0tFWV9BUlJBWV9UUlVFKGxydV9nZW5fY2FwcywgTlJfTFJVX0dFTl9DQVBTKTtcXG4tLVxcbm1tL3Ztc2Nhbi5jPTI4MjQ9c3RhdGljIHN0cnVjdCBscnV2ZWMgKmdldF9scnV2ZWMoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCBpbnQgbmlkKVxcbi0tXFxubW0vdm1zY2FuLmMtMjgyNy1cXG5tbS92bXNjYW4uYzoyODI4OiNpZmRlZiBDT05GSUdfTUVNQ0dcXG5tbS92bXNjYW4uYy0yODI5LVxcdGlmIChtZW1jZykge1xcbi0tXFxubW0vdm1zY2FuLmM9Mjk2MD1zdGF0aWMgdm9pZCByZXNldF9ibG9vbV9maWx0ZXIoc3RydWN0IGxydV9nZW5fbW1fc3RhdGUgKm1tX3N0YXRlLCB1bnNpZ25lZCBsb25nIHNlcSlcXG4tLVxcbm1tL3Ztc2Nhbi5jLTI5NzktXFxubW0vdm1zY2FuLmM6Mjk4MDojaWZkZWYgQ09ORklHX0xSVV9HRU5fV0FMS1NfTU1VXFxubW0vdm1zY2FuLmMtMjk4MS1cXG5tbS92bXNjYW4uYz0yOTgyPXN0YXRpYyBzdHJ1Y3QgbHJ1X2dlbl9tbV9saXN0ICpnZXRfbW1fbGlzdChzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpXFxuLS1cXG5tbS92bXNjYW4uYy0yOTg4LVxcbm1tL3Ztc2Nhbi5jOjI5ODk6I2lmZGVmIENPTkZJR19NRU1DR1xcbm1tL3Ztc2Nhbi5jLTI5OTAtXFx0aWYgKG1lbWNnKVxcbi0tXFxubW0vdm1zY2FuLmM9MzAyMj12b2lkIGxydV9nZW5fYWRkX21tKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tKVxcbi0tXFxubW0vdm1zY2FuLmMtMzAyOC1cXHRWTV9XQVJOX09OX09OQ0UoIWxpc3RfZW1wdHkoXFx1MDAyNm1tLVxcdTAwM2VscnVfZ2VuLmxpc3QpKTtcXG5tbS92bXNjYW4uYzozMDI5OiNpZmRlZiBDT05GSUdfTUVNQ0dcXG5tbS92bXNjYW4uYy0zMDMwLVxcdFZNX1dBUk5fT05fT05DRShtbS1cXHUwMDNlbHJ1X2dlbi5tZW1jZyk7XFxuLS1cXG5tbS92bXNjYW4uYz0zMDQ5PXZvaWQgbHJ1X2dlbl9kZWxfbW0oc3RydWN0IG1tX3N0cnVjdCAqbW0pXFxuLS1cXG5tbS92bXNjYW4uYy0zMDU3LVxcbm1tL3Ztc2Nhbi5jOjMwNTg6I2lmZGVmIENPTkZJR19NRU1DR1xcbm1tL3Ztc2Nhbi5jLTMwNTktXFx0bWVtY2cgPSBtbS1cXHUwMDNlbHJ1X2dlbi5tZW1jZztcXG4tLVxcbm1tL3Ztc2Nhbi5jLTMwODEtXFxubW0vdm1zY2FuLmM6MzA4MjojaWZkZWYgQ09ORklHX01FTUNHXFxubW0vdm1zY2FuLmMtMzA4My1cXHRtZW1fY2dyb3VwX3B1dChtbS1cXHUwMDNlbHJ1X2dlbi5tZW1jZyk7XFxuLS1cXG5tbS92bXNjYW4uYy0zMDg3LVxcbm1tL3Ztc2Nhbi5jOjMwODg6I2lmZGVmIENPTkZJR19NRU1DR1xcbm1tL3Ztc2Nhbi5jLTMwODktdm9pZCBscnVfZ2VuX21pZ3JhdGVfbW0oc3RydWN0IG1tX3N0cnVjdCAqbW0pXFxuLS1cXG5tbS92bXNjYW4uYz00NTE2PXN0YXRpYyB2b2lkIGxydV9nZW5fcm90YXRlX21lbWNnKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgaW50IG9wKVxcbi0tXFxubW0vdm1zY2FuLmMtNDU1OS1cXG5tbS92bXNjYW4uYzo0NTYwOiNpZmRlZiBDT05GSUdfTUVNQ0dcXG5tbS92bXNjYW4uYy00NTYxLVxcbi0tXFxubW0vdm1zY2FuLmM9NTc2Mj1zdGF0aWMgaW50IGxydV9nZW5fc2VxX3Nob3coc3RydWN0IHNlcV9maWxlICptLCB2b2lkICp2KVxcbi0tXFxubW0vdm1zY2FuLmMtNTc3NS1cXG5tbS92bXNjYW4uYzo1Nzc2OiNpZmRlZiBDT05GSUdfTUVNQ0dcXG5tbS92bXNjYW4uYy01Nzc3LVxcdFxcdGlmIChtZW1jZylcXG4tLVxcbm1tL3Ztc2Nhbi5jPTYwMzE9dm9pZCBscnVfZ2VuX2luaXRfbHJ1dmVjKHN0cnVjdCBscnV2ZWMgKmxydXZlYylcXG4tLVxcbm1tL3Ztc2Nhbi5jLTYwNTAtXFxubW0vdm1zY2FuLmM6NjA1MTojaWZkZWYgQ09ORklHX01FTUNHXFxubW0vdm1zY2FuLmMtNjA1Mi1cXG4tLVxcbm1tL3Ztc2Nhbi5jPTY5MDk9dW5zaWduZWQgbG9uZyB0cnlfdG9fZnJlZV9wYWdlcyhzdHJ1Y3Qgem9uZWxpc3QgKnpvbmVsaXN0LCBpbnQgb3JkZXIsXFxuLS1cXG5tbS92bXNjYW4uYy02OTUxLVxcbm1tL3Ztc2Nhbi5jOjY5NTI6I2lmZGVmIENPTkZJR19NRU1DR1xcbm1tL3Ztc2Nhbi5jLTY5NTMtXFxuLS1cXG5tbS92bXNjYW4uYz03NzM3PWJvb2wga3N3YXBkX3Rlc3RfaG9wZWxlc3MocGdfZGF0YV90ICpwZ2RhdClcXG4tLVxcbm1tL3Ztc2Nhbi5jLTc3NDEtXFxubW0vdm1zY2FuLmM6Nzc0MjojaWZkZWYgQ09ORklHX0hJQkVSTkFUSU9OXFxubW0vdm1zY2FuLmMtNzc0My0vKlxcbi0tXFxubW0vdm1zY2FuLmM9NzgyMj1zdGF0aWMgY29uc3Qgc3RydWN0IGN0bF90YWJsZSB2bXNjYW5fc3lzY3RsX3RhYmxlW10gPSB7XFxuLS1cXG5tbS92bXNjYW4uYy03ODMxLVxcdH0sXFxubW0vdm1zY2FuLmM6NzgzMjojaWZkZWYgQ09ORklHX05VTUFcXG5tbS92bXNjYW4uYy03ODMzLVxcdHtcXG4tLVxcbm1tL3Ztc2Nhbi5jPTc4NTQ9bW9kdWxlX2luaXQoa3N3YXBkX2luaXQpXFxubW0vdm1zY2FuLmMtNzg1NS1cXG5tbS92bXNjYW4uYzo3ODU2OiNpZmRlZiBDT05GSUdfTlVNQVxcbm1tL3Ztc2Nhbi5jLTc4NTctLypcXG4tLVxcbm1tL3Ztc2Nhbi5jPTgxOTk9RVhQT1JUX1NZTUJPTF9HUEwoY2hlY2tfbW92ZV91bmV2aWN0YWJsZV9mb2xpb3MpO1xcbm1tL3Ztc2Nhbi5jLTgyMDAtXFxubW0vdm1zY2FuLmM6ODIwMTojaWYgZGVmaW5lZChDT05GSUdfU1lTRlMpIFxcdTAwMjZcXHUwMDI2IGRlZmluZWQoQ09ORklHX05VTUEpXFxubW0vdm1zY2FuLmMtODIwMi1zdGF0aWMgc3NpemVfdCByZWNsYWltX3N0b3JlKHN0cnVjdCBkZXZpY2UgKmRldixcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTVUMTM6MDY6MDguODA2MTMzNDYyWiIsIlNlcSI6MzcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjYwNzE1MTA3NjEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBMUlUgR2VuZXJhdGlvbiBDb25maWd1cmF0aW9uKipcblxuT2theSwgc28gSSdtIGRpdmluZyBpbnRvIHRoaXMgY29kZSBhbmQgaW1tZWRpYXRlbHkgc2VlIGEgY3J1Y2lhbCBjb25kaXRpb25hbCBibG9jay4gTGluZSAyNzcyIGtpY2tzIHRoaW5ncyBvZmYgd2l0aCBgI2lmZGVmIENPTkZJR19MUlVfR0VOYCwgd2hpY2ggdGhlbiBzcGFucyBhbGwgdGhlIHdheSB0byBsaW5lIDYxMTAsIGVuZGluZyB3aXRoIGAjZWxzZSAvKiAhQ09ORklHX0xSVV9HRU4gKi9gLiBUaGF0J3MgYSBodWdlIGNsdWUgdGhhdCBgQ09ORklHX0xSVV9HRU5gIGlzIGEgc2lnbmlmaWNhbnQgY29uZmlndXJhdGlvbiBvcHRpb24uIFRoZW4sIGxvb2tpbmcgaW5zaWRlIHRoaXMgYmxvY2ssIGxpbmUgNjEwMSBqdW1wcyBvdXQgYXQgbWU6IGBkZWJ1Z2ZzX2NyZWF0ZV9maWxlX2F1eF9udW0oXCJscnVfZ2VuXCIsIC4uLilgLiBBaCwgc28gYExSVV9HRU5gIGlzIHRpZWQgdG8gZGVidWdmcyEgVGhhdCBwb2ludHMgdG8gdGhlIHVzZSBvZiBgREVCVUdfRlNgIGJlaW5nIGEgc2lnbmlmaWNhbnQgY29uZmlndXJhdGlvbiBhcyB3ZWxsLCBvciBhdCBsZWFzdCBob3cgdGhlIGRlYnVnZ2luZyBpbmZvcm1hdGlvbiBpcyBjb25maWd1cmVkLiBTbywgbXkgaW5pdGlhbCBoeXBvdGhlc2lzOiBgTFJVX0dFTmAgYW5kIGBERUJVR19GU2AgYXJlIHRoZSBrZXkgY29uZmlncyB0byB3YXRjaC4gV2FpdCBhIG1pbnV0ZeKApkkganVzdCB0aG91Z2h0IG9mIHNvbWV0aGluZywgd2hhdCBhYm91dCBgTFJVX0dFTl9FTkFCTEVEYD8gSSdkIGJldHRlciBkb3VibGUgY2hlY2sgd2hhdCBgbHJ1X2dlbl9lbmFibGVkKClgIGRvZXMsIGp1c3QgdG8gYmUgc3VyZS4gSSdtIGdvaW5nIHRvIGZvbGxvdyB0aGUgbG9naWMgYW5kIGxvb2sgYXQgdGhlIGltcGxlbWVudGF0aW9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNjExNCwiT3V0cHV0VG9rZW5zIjozMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEyNCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xNVQxMzowNjoxNC44Nzc2NDc3OTNaIiwiU2VxIjozOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjU1MTA0OTQ0MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJscnVfZ2VuX2VuYWJsZWRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vdm1zY2FuLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vdm1zY2FuLmM9MzY2PXN0YXRpYyBpbmxpbmUgYm9vbCByZWNsYWltYWJsZV9hbm9uX2lzX2xvdyhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csXFxuLS1cXG5tbS92bXNjYW4uYy0zODUtXFx0ICovXFxubW0vdm1zY2FuLmM6Mzg2OlxcdGlmIChscnVfZ2VuX2VuYWJsZWQoKSlcXG5tbS92bXNjYW4uYy0zODctXFx0XFx0cmV0dXJuIGZhbHNlO1xcbi0tXFxubW0vdm1zY2FuLmM9OTQzPXN0YXRpYyBlbnVtIGZvbGlvX3JlZmVyZW5jZXMgZm9saW9fY2hlY2tfcmVmZXJlbmNlcyhzdHJ1Y3QgZm9saW8gKmZvbGlvLFxcbi0tXFxubW0vdm1zY2FuLmMtOTY3LVxcbm1tL3Ztc2Nhbi5jOjk2ODpcXHRpZiAobHJ1X2dlbl9lbmFibGVkKCkgXFx1MDAyNlxcdTAwMjYgIWxydV9nZW5fc3dpdGNoaW5nKCkpIHtcXG5tbS92bXNjYW4uYy05NjktXFx0XFx0aWYgKCFyZWZlcmVuY2VkX3B0ZXMpXFxuLS1cXG5tbS92bXNjYW4uYz0yMzYwPXN0YXRpYyB2b2lkIHByZXBhcmVfc2Nhbl9jb250cm9sKHBnX2RhdGFfdCAqcGdkYXQsIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjKVxcbi0tXFxubW0vdm1zY2FuLmMtMjM2Ni1cXG5tbS92bXNjYW4uYzoyMzY3OlxcdGlmIChscnVfZ2VuX2VuYWJsZWQoKSBcXHUwMDI2XFx1MDAyNiAhbHJ1X2dlbl9zd2l0Y2hpbmcoKSlcXG5tbS92bXNjYW4uYy0yMzY4LVxcdFxcdHJldHVybjtcXG4tLVxcbm1tL3Ztc2Nhbi5jPTU1MTU9c3RhdGljIHZvaWQgbHJ1X2dlbl9jaGFuZ2Vfc3RhdGUoYm9vbCBlbmFibGVkKVxcbi0tXFxubW0vdm1zY2FuLmMtNTUyNS1cXG5tbS92bXNjYW4uYzo1NTI2OlxcdGlmIChlbmFibGVkID09IGxydV9nZW5fZW5hYmxlZCgpKVxcbm1tL3Ztc2Nhbi5jLTU1MjctXFx0XFx0Z290byB1bmxvY2s7XFxuLS1cXG5tbS92bXNjYW4uYz01NjEzPXN0YXRpYyBzc2l6ZV90IGVuYWJsZWRfc3RvcmUoc3RydWN0IGtvYmplY3QgKmtvYmosIHN0cnVjdCBrb2JqX2F0dHJpYnV0ZSAqYXR0cixcXG4tLVxcbm1tL3Ztc2Nhbi5jLTU2MzktXFxubW0vdm1zY2FuLmM6NTY0MDpzdGF0aWMgc3RydWN0IGtvYmpfYXR0cmlidXRlIGxydV9nZW5fZW5hYmxlZF9hdHRyID0gX19BVFRSX1JXKGVuYWJsZWQpO1xcbm1tL3Ztc2Nhbi5jLTU2NDEtXFxubW0vdm1zY2FuLmM9NTY0Mj1zdGF0aWMgc3RydWN0IGF0dHJpYnV0ZSAqbHJ1X2dlbl9hdHRyc1tdID0ge1xcbm1tL3Ztc2Nhbi5jLTU2NDMtXFx0XFx1MDAyNmxydV9nZW5fbWluX3R0bF9hdHRyLmF0dHIsXFxubW0vdm1zY2FuLmM6NTY0NDpcXHRcXHUwMDI2bHJ1X2dlbl9lbmFibGVkX2F0dHIuYXR0cixcXG5tbS92bXNjYW4uYy01NjQ1LVxcdE5VTExcXG4tLVxcbm1tL3Ztc2Nhbi5jPTYwMzE9dm9pZCBscnVfZ2VuX2luaXRfbHJ1dmVjKHN0cnVjdCBscnV2ZWMgKmxydXZlYylcXG4tLVxcbm1tL3Ztc2Nhbi5jLTYwMzgtXFx0bHJ1Z2VuLVxcdTAwM2VtYXhfc2VxID0gTUlOX05SX0dFTlMgKyAxO1xcbm1tL3Ztc2Nhbi5jOjYwMzk6XFx0bHJ1Z2VuLVxcdTAwM2VlbmFibGVkID0gbHJ1X2dlbl9lbmFibGVkKCk7XFxubW0vdm1zY2FuLmMtNjA0MC1cXG4tLVxcbm1tL3Ztc2Nhbi5jPTYxMjk9c3RhdGljIHZvaWQgc2hyaW5rX2xydXZlYyhzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjKVxcbi0tXFxubW0vdm1zY2FuLmMtNjEzOS1cXG5tbS92bXNjYW4uYzo2MTQwOlxcdGlmICgobHJ1X2dlbl9lbmFibGVkKCkgfHwgbHJ1X2dlbl9zd2l0Y2hpbmcoKSkgXFx1MDAyNlxcdTAwMjYgIXJvb3RfcmVjbGFpbShzYykpIHtcXG5tbS92bXNjYW4uYy02MTQxLVxcdFxcdGxydV9nZW5fc2hyaW5rX2xydXZlYyhscnV2ZWMsIHNjKTtcXG4tLVxcbm1tL3Ztc2Nhbi5jPTYzOTk9c3RhdGljIHZvaWQgc2hyaW5rX25vZGUocGdfZGF0YV90ICpwZ2RhdCwgc3RydWN0IHNjYW5fY29udHJvbCAqc2MpXFxuLS1cXG5tbS92bXNjYW4uYy02NDA0LVxcbm1tL3Ztc2Nhbi5jOjY0MDU6XFx0aWYgKChscnVfZ2VuX2VuYWJsZWQoKSB8fCBscnVfZ2VuX3N3aXRjaGluZygpKSBcXHUwMDI2XFx1MDAyNiByb290X3JlY2xhaW0oc2MpKSB7XFxubW0vdm1zY2FuLmMtNjQwNi1cXHRcXHRtZW1zZXQoXFx1MDAyNnNjLVxcdTAwM2VuciwgMCwgc2l6ZW9mKHNjLVxcdTAwM2VucikpO1xcbi0tXFxubW0vdm1zY2FuLmM9NjY1Nj1zdGF0aWMgdm9pZCBzbmFwc2hvdF9yZWZhdWx0cyhzdHJ1Y3QgbWVtX2Nncm91cCAqdGFyZ2V0X21lbWNnLCBwZ19kYXRhX3QgKnBnZGF0KVxcbi0tXFxubW0vdm1zY2FuLmMtNjY2MC1cXG5tbS92bXNjYW4uYzo2NjYxOlxcdGlmIChscnVfZ2VuX2VuYWJsZWQoKSBcXHUwMDI2XFx1MDAyNiAhbHJ1X2dlbl9zd2l0Y2hpbmcoKSlcXG5tbS92bXNjYW4uYy02NjYyLVxcdFxcdHJldHVybjtcXG4tLVxcbm1tL3Ztc2Nhbi5jPTcwMDU9c3RhdGljIHZvaWQga3N3YXBkX2FnZV9ub2RlKHN0cnVjdCBwZ2xpc3RfZGF0YSAqcGdkYXQsIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjKVxcbi0tXFxubW0vdm1zY2FuLmMtNzAwOS1cXG5tbS92bXNjYW4uYzo3MDEwOlxcdGlmIChscnVfZ2VuX2VuYWJsZWQoKSB8fCBscnVfZ2VuX3N3aXRjaGluZygpKSB7XFxubW0vdm1zY2FuLmMtNzAxMS1cXHRcXHRscnVfZ2VuX2FnZV9ub2RlKHBnZGF0LCBzYyk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE1VDEzOjA2OjE1LjQyODcwNDg4M1oiLCJTZXEiOjM5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjoxNTc4MzM5MTA4NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXNpcyBvZiBNR0xSVSBQYXRjaCBGdXp6aW5nIFJlYWRpbmVzcyoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93biBmb3IgZnV6emluZyByZWFkaW5lc3MuIEZpcnN0LCBJIG5vdGljZWQgdGhhdCBgbHJ1X2dlbl9zZXFfd3JpdGVgIGRvZXNuJ3QgZXZlbiBib3RoZXIgY2hlY2tpbmcgYGxydV9nZW5fZW5hYmxlZCgpYCwgd2hpY2ggaXMgYSBsaXR0bGUgb2RkLCBidXQgYExSVV9HRU5fRU5BQkxFRGAgZW5hYmxlcyBNR0xSVSBieSBkZWZhdWx0IGFueXdheS4gVGhlIHByaW1hcnkgY29uY2VybiBpcywgd2hhdCBjb25maWd1cmF0aW9ucyBhcmUgKnJlcXVpcmVkKiB0byBjb21waWxlIGFuZCBhY3R1YWxseSBleGVjdXRlIHRoZSAqbW9kaWZpZWQqIGNvZGU/XG5cbjEuICBgTFJVX0dFTmAgaXMgZXNzZW50aWFsOyB0aGUgcmVsZXZhbnQgY29kZSBpcyBndWFyZGVkIGJ5IGAjaWZkZWYgQ09ORklHX0xSVV9HRU5gLlxuMi4gIGBERUJVR19GU2AgaXMgbm9uLW5lZ290aWFibGUsIHNpbmNlIGBscnVfZ2VuX3NlcV93cml0ZWAgaXMgYSBkZWJ1Z2ZzIGZpbGUgaGFuZGxlci4gV2l0aG91dCBgQ09ORklHX0RFQlVHX0ZTYCwgdGhhdCBkZWJ1ZyBpbnRlcmZhY2UgYXQgYC9zeXMva2VybmVsL2RlYnVnL2xydV9nZW5gIHNpbXBseSBpc24ndCBwcmVzZW50LCBhbmQgd2UgY2FuJ3QgdHJpZ2dlciBhbnkgb2YgdGhpcy5cblxuTm93LCBsZXQncyBkZXRlcm1pbmUgdGhlIGBGb2N1c1N5bWJvbHNgLiBUaGUgZnVuY3Rpb24gdGhhdCBnb3QgdGhlIG1vZGlmaWNhdGlvbiBpcyBgcnVuX2FnaW5nYC4gQnV0IGlzIGBydW5fYWdpbmdgIGEgc3RhdGljIGZ1bmN0aW9uPyBZZXMsIGl0IGlzISBHaXZlbiB0aGF0IGBydW5fYWdpbmdgIGlzIGEgc3RhdGljIGZ1bmN0aW9uIGluIGBtbS92bXNjYW4uY2AsIGJ1dCBpdCdzIG5vdCBjb21waWxlci1pbmxpbmVkIGJlY2F1c2UgaXQgZXhpc3RzIGluIHRoZSBzeW1ib2wgdGFibGUsIGl0IGNhbiBiZSBhIGBGb2N1c1N5bWJvbGAuIEl0J3MgY2FsbGVkIGZyb20gYHJ1bl9jbWRgLCB3aGljaCBpcyBjYWxsZWQgYnkgYGxydV9nZW5fc2VxX3dyaXRlYCwgdGhlIGZpbGVcXF9vcGVyYXRpb25zIC53cml0ZSBtZXRob2QuXG5cbmBydW5fYWdpbmdgIHNlZW1zIHByZXR0eSBzcGVjaWZpYy4gQ2hlY2tpbmcgc2VjdGlvbiA0IG9mIHRoZSBndWlkZWxpbmVzLCBpdCdzOlxuKiAgIEEgdGFyZ2V0LXNwZWNpZmljIGZlYXR1cmUgbG9naWMuXG4qICAgSXQncyBhIC5jIGZpbGUsIG5vbi1zdGF0aWMuXG5cbmBydW5fYWdpbmdgIGlzICpub3QqIHViaXF1aXRvdXMuIEl0J3Mgb25seSBjYWxsZWQgd2hlbiB3cml0aW5nICcrJyB0byBgL3N5cy9rZXJuZWwvZGVidWcvbHJ1X2dlbmAsIGFzIGlzIHRoZSBlbnRyeXBvaW50LiBgcnVuX2NtZGAgYWxzbyBpc24ndCB1YmlxdWl0b3VzOyBpdCdzIG9ubHkgY2FsbGVkIGZyb20gd2l0aGluIGBscnVfZ2VuX3NlcV93cml0ZWAsIGFuZCBgdHJ5X3RvX2luY19tYXhfc2VxYCBpcyBvbmx5IGNhbGxlZCBieSBgcnVuX2FnaW5nYC4gU28gd2UgaGF2ZSB0aHJlZSBjbGVhciBzeW1ib2xzIHRvIGZvY3VzIG9uOiBgcnVuX2FnaW5nYCwgYHJ1bl9jbWRgLCBhbmQgYGxydV9nZW5fc2VxX3dyaXRlYC5cblxuRG91YmxlLWNoZWNraW5nLCBgcnVuX2FnaW5nYCBpcyBvbmx5IGRlZmluZWQgYW5kIGNhbGxlZCB3aXRoaW4gYG1tL3Ztc2Nhbi5jYC4gSXQncyBub3QgdXNlZCBhbnl3aGVyZSBlbHNlLiBTbyBpdCdzIHZlcnkgdGFyZ2V0ZWQuXG5cbklzIHRoaXMgcGF0Y2ggYFdvcnRoRnV6emluZ2A/IEFic29sdXRlbHkuXG4qICAgSXQncyBhIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgc3Vic3lzdGVtIGNoYW5nZSAoYG1tL3Ztc2Nhbi5jYCkuXG4qICAgRXhlY3V0YWJsZSBjb2RlIG1vZGlmaWVzIGxvZ2ljOiBpdCBhZGRzIGEgc2VxdWVuY2UgY2hlY2sgaW4gYHJ1bl9hZ2luZygpYCB0aGF0IHByZXZlbnRzIGB0cnlfdG9faW5jX21heF9zZXEoKWAgZnJvbSBiZWluZyBjYWxsZWQgd2l0aCBvYnNvbGV0ZSB2YWx1ZXMuXG4qICAgUmVhY2hhYmxlIHZpYSBhIGRlYnVnZnMgaW50ZXJmYWNlIGF0IGAvc3lzL2tlcm5lbC9kZWJ1Zy9scnVfZ2VuYC5cbiogICBUZXN0YWJsZSBpbiBhIHZpcnR1YWxpemVkIGVudmlyb25tZW50LlxuXG5Gb3IgYEVuYWJsZUNvbmZpZ3NgOiBXZSBuZWVkIGBMUlVfR0VOYCAoZm9yIHRoZSBNR0xSVSBjb2RlKSBhbmQgYERFQlVHX0ZTYCAodG8gZXhwb3NlIHRoZSBpbnRlcmZhY2UpLlxuXG5PdXIgZmluYWwgYEZvY3VzU3ltYm9sc2AgYXJlOiBgcnVuX2FnaW5nYCwgYHJ1bl9jbWRgLCBhbmQgYGxydV9nZW5fc2VxX3dyaXRlYC4gVGhleSBhcmUgc3BlY2lmaWMgdG8gdGhlIGZlYXR1cmUgYW5kIGFyZSBub24tdWJpcXVpdG91cy5cblxuTGV0J3MgZG8gYSBzYW5pdHkgY2hlY2sgdG8gY292ZXIgYWxsIHRoZSBiYXNlczogVGhlIGdvYWwgb2YgdGhpcyBmdXp6aW5nIGlzIHRvIGRpc2NvdmVyIG5ldyBjcmFzaGVzLCBsYXRlbnQgYnVncywgZXRjLiBhbmQgdGhpcyBjb2RlIGlzIHJlYWNoYWJsZSBieSB3YXkgb2YgYSBkZWJ1Z2ZzIGludGVyZmFjZS4gVGhpcyBjb2RlIGlzIGluIHRoZSBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IHN1YnN5c3RlbSBhbmQgYXZvaWRzIHViaXF1aXRvdXMgbGlmZWN5Y2xlIGhvdC1wYXRocy4gV2UgaGF2ZSBpZGVudGlmaWVkIGFsbCB0aGUgbmVjZXNzYXJ5IENPTkZJRyBvcHRpb25zLCBhbmQgc3RyaXBwZWQgdGhlIENPTkZJR1xcXyBwcmVmaXguXG5cbkV2ZXJ5dGhpbmcgbG9va3MgZ29vZC4gVGltZSB0byBjYWxsIGBzZXQtcmVzdWx0c2AuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI3Njg2LCJPdXRwdXRUb2tlbnMiOjE1OSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEzNzksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTVUMTM6MDY6MzEuMjEyMDk4NDQ4WiIsIlNlcSI6NDAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzY2OTg1ODksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkxSVV9HRU5cIixcbiAgICBcIkRFQlVHX0ZTXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwicnVuX2FnaW5nXCIsXG4gICAgXCJscnVfZ2VuX3NlcV93cml0ZVwiLFxuICAgIFwicnVuX2NtZFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBhZ2luZyBsb2dpYyBpbiB0aGUgTXVsdGktR2VuIExSVSAoTUdMUlUpIHN1YnN5c3RlbSBpbiBtbS92bXNjYW4uYy4gSXQgYWRkcyBhIGNoZWNrIGluIHJ1bl9hZ2luZygpIHRvIGltbWVkaWF0ZWx5IHJldHVybiBzdWNjZXNzIGlmIHRoZSByZXF1ZXN0ZWQgc2VxdWVuY2UgbnVtYmVyIGlzIG9sZGVyIHRoYW4gdGhlIGN1cnJlbnQgbWF4X3NlcSBpbnN0ZWFkIG9mIGF0dGVtcHRpbmcgYW4gaW5jcmVtZW50LiBUaGlzIGxvZ2ljIGlzIHJlYWNoYWJsZSBmcm9tIHVzZXJzcGFjZSBieSB3cml0aW5nIHRvIC9zeXMva2VybmVsL2RlYnVnL2xydV9nZW4sIG1ha2luZyBpdCBhbiBleGVjdXRhYmxlIGFuZCB0ZXN0YWJsZSBwYXRoIHdpdGhpbiBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50LlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkxSVV9HRU5cIixcbiAgICBcIkRFQlVHX0ZTXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwicnVuX2FnaW5nXCIsXG4gICAgXCJscnVfZ2VuX3NlcV93cml0ZVwiLFxuICAgIFwicnVuX2NtZFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBhZ2luZyBsb2dpYyBpbiB0aGUgTXVsdGktR2VuIExSVSAoTUdMUlUpIHN1YnN5c3RlbSBpbiBtbS92bXNjYW4uYy4gSXQgYWRkcyBhIGNoZWNrIGluIHJ1bl9hZ2luZygpIHRvIGltbWVkaWF0ZWx5IHJldHVybiBzdWNjZXNzIGlmIHRoZSByZXF1ZXN0ZWQgc2VxdWVuY2UgbnVtYmVyIGlzIG9sZGVyIHRoYW4gdGhlIGN1cnJlbnQgbWF4X3NlcSBpbnN0ZWFkIG9mIGF0dGVtcHRpbmcgYW4gaW5jcmVtZW50LiBUaGlzIGxvZ2ljIGlzIHJlYWNoYWJsZSBmcm9tIHVzZXJzcGFjZSBieSB3cml0aW5nIHRvIC9zeXMva2VybmVsL2RlYnVnL2xydV9nZW4sIG1ha2luZyBpdCBhbiBleGVjdXRhYmxlIGFuZCB0ZXN0YWJsZSBwYXRoIHdpdGhpbiBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50LlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xNVQxMzowNjozMS4yODg4MDY1ODdaIiwiU2VxIjo0MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJJZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjczOTYxMTM5NDQ5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTVUMTM6MDY6MzEuMjg5MzM4MjM3WiIsIlNlcSI6NDIsIk5lc3RpbmciOjIsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImNvcmUiLCJEdXJhdGlvbiI6NzM5NjA2MDMxMzksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHMgYW4gZWFybHkgcmV0dXJuIGNoZWNrIChgaWYgKHNlcSBcXHUwMDNjIG1heF9zZXEpIHJldHVybiAwO2ApIGluIGBydW5fYWdpbmcoKWAgd2l0aGluIGBtbS92bXNjYW4uY2AuIEl0IG9wZXJhdGVzIGV4Y2x1c2l2ZWx5IG9uIHNjYWxhciBpbnRlZ2VyIHZhbHVlcyAoYHNlcWAgYW5kIGBtYXhfc2VxYCkgYW5kIGFsdGVycyBjb250cm9sIGZsb3cgaW4gdGhlIG11bHRpLWdlbiBMUlUgYWdpbmcgdHJpZ2dlci4gVGhlIGNoYW5nZSBkb2VzIG5vdCBpbnRyb2R1Y2Ugb3IgbW9kaWZ5IGFueSBtZW1vcnkgYWxsb2NhdGlvbnMsIGRvZXMgbm90IHRvdWNoIHVuaW5pdGlhbGl6ZWQgc3RhY2sgb3IgaGVhcCBidWZmZXJzLCBhbmQgZG9lcyBub3QgcGFzcyBhbnkga2VybmVsIHN0cnVjdHVyZXMgdG8gdXNlciBzcGFjZS4gQmVjYXVzZSBubyB1bmluaXRpYWxpemVkIG1lbW9yeSBjYW4gYmUgcmVhZCwgYnJhbmNoZWQgdXBvbiwgb3IgbGVha2VkIHRvIHVzZXJzcGFjZSBhcyBhIHJlc3VsdCBvZiB0aGlzIGNoYW5nZSwgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgaXMgbm90IHdhcnJhbnRlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnlcbmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kXG5kZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpXG5mdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy5cblxuQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46XG4tIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGVcbiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOXG4gIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVBcbiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy5cbi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsXG4gIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy5cblxuUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTixcbkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuXG5BIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZXG5zZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrc1xudGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi5cblxuTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3RcbnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLFxuYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzXG50aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZ1xudW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sXG5mbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsXG5jYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy5cblxuU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOlxuMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2JcbiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzXG4gICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLlxuMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlc1xuICAgb3Igc3RydWN0IGZpZWxkcy5cbjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHNcbiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuXG40LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2Vzc1xuICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjpcbi0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXJcbiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0XG4gIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS5cbi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWRcbiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLlxuLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuXG5cblVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGVcbmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJUYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NFxuXG5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCA1NWI1ZWQ2MTY4YjhlMjliYTY3ODA5MjgyNWQ2NjY5MGZjYTIwNzJiXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFR1ZSBTZXAgMTUgMTI6NTk6MjYgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9tbS92bXNjYW4uYyBiL21tL3Ztc2Nhbi5jXG5pbmRleCA1MzU0ZWI4ZDNhMDdiLi4xOGM0ZDM1OTU3NDk3IDEwMDY0NFxuLS0tIGEvbW0vdm1zY2FuLmNcbisrKyBiL21tL3Ztc2Nhbi5jXG5AQCAtNTgyNyw2ICs1ODI3LDkgQEAgc3RhdGljIGludCBydW5fYWdpbmcoc3RydWN0IGxydXZlYyAqbHJ1dmVjLCB1bnNpZ25lZCBsb25nIHNlcSxcbiB7XG4gXHRERUZJTkVfTUFYX1NFUShscnV2ZWMpO1xuIFxuK1x0aWYgKHNlcSBcdTAwM2MgbWF4X3NlcSlcbitcdFx0cmV0dXJuIDA7XG4rXG4gXHRpZiAoc2VxIFx1MDAzZSBtYXhfc2VxKVxuIFx0XHRyZXR1cm4gLUVJTlZBTDtcbiBcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE1VDEzOjA2OjMxLjI4OTMzOTY5N1oiLCJTZXEiOjQzLCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjozNDMzMTM0NjU3NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRoaW5raW5nIHByb2Nlc3M6XG5cbioqRGl2aW5nIGludG8gdm1zY2FuLmMqKlxuXG5Pa2F5LCBzbyB0aGUgcGF0Y2ggSSdtIGludGVyZXN0ZWQgaW4gaXMgYnVyaWVkIHdpdGhpbiBgbW0vdm1zY2FuLmNgLiBUaGF0J3MgYSBwcmV0dHkgc3RhbmRhcmQgbG9jYXRpb24gZm9yIG1lbW9yeSBtYW5hZ2VtZW50IG1vZGlmaWNhdGlvbnMsIGJ1dCBJIHN0aWxsIG5lZWQgdG8gcGlucG9pbnQgdGhlIGV4YWN0IGxvY2F0aW9uLiBMaW5lIDU4MjfigKYgcmlnaHQuIFRpbWUgdG8gZmlyZSB1cCBteSB0b29scy4gSeKAmWxsIGxpa2VseSB1c2Ugc29tZXRoaW5nIGxpa2UgYHJlYWQtZmlsZWAgb3IgYGdyZXBwZXJgIOKAkyBzb21ldGhpbmcgdGhhdCBsZXRzIG1lIHF1aWNrbHkgbmF2aWdhdGUgdGhlIGZpbGUgYW5kIHNlZSB0aGUgc3Vycm91bmRpbmcgY29kZSBjb250ZXh0IGFyb3VuZCB0aGF0IGxpbmUgbnVtYmVyLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgaW1tZWRpYXRlIHZpY2luaXR5IG9mIHRoYXQgbGluZS4gVGhpcyBpbml0aWFsIGluc3BlY3Rpb24gc2hvdWxkIHJldmVhbCB0aGUgc3BlY2lmaWMgZnVuY3Rpb24gYW5kIHN1cnJvdW5kaW5nIGxvZ2ljIHRoZSBwYXRjaCB0b3VjaGVzLCBhbmQgZ2l2ZSBtZSBhIGZlZWwgZm9yIGl0cyBvdmVyYWxsIHB1cnBvc2Ugd2l0aGluIHRoZSB2bXNjYW4gZnJhbWV3b3JrLiBMZXQncyBzZWUgd2hhdCB3ZSdyZSB3b3JraW5nIHdpdGguXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIwNDUsIk91dHB1dFRva2VucyI6MzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozNCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE1VDEzOjA3OjA1LjYyMDY4OTg3NFoiLCJTZXEiOjQ0LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0Mjk2NjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibW0vdm1zY2FuLmNcIixcbiAgXCJGaXJzdExpbmVcIjogNTgxNSxcbiAgXCJMaW5lQ291bnRcIjogNDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiNTgxNTpcXHRcXHRyZXR1cm4gMDtcXG41ODE2OlxcdH1cXG41ODE3OlxcdFxcbjU4MTg6XFx0c3RhdGljIGNvbnN0IHN0cnVjdCBzZXFfb3BlcmF0aW9ucyBscnVfZ2VuX3NlcV9vcHMgPSB7XFxuNTgxOTpcXHRcXHQuc3RhcnQgPSBscnVfZ2VuX3NlcV9zdGFydCxcXG41ODIwOlxcdFxcdC5zdG9wID0gbHJ1X2dlbl9zZXFfc3RvcCxcXG41ODIxOlxcdFxcdC5uZXh0ID0gbHJ1X2dlbl9zZXFfbmV4dCxcXG41ODIyOlxcdFxcdC5zaG93ID0gbHJ1X2dlbl9zZXFfc2hvdyxcXG41ODIzOlxcdH07XFxuNTgyNDpcXHRcXG41ODI1OlxcdHN0YXRpYyBpbnQgcnVuX2FnaW5nKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgdW5zaWduZWQgbG9uZyBzZXEsXFxuNTgyNjpcXHRcXHRcXHQgICAgIGludCBzd2FwcGluZXNzLCBib29sIGZvcmNlX3NjYW4pXFxuNTgyNzpcXHR7XFxuNTgyODpcXHRcXHRERUZJTkVfTUFYX1NFUShscnV2ZWMpO1xcbjU4Mjk6XFx0XFxuNTgzMDpcXHRcXHRpZiAoc2VxIFxcdTAwM2MgbWF4X3NlcSlcXG41ODMxOlxcdFxcdFxcdHJldHVybiAwO1xcbjU4MzI6XFx0XFxuNTgzMzpcXHRcXHRpZiAoc2VxIFxcdTAwM2UgbWF4X3NlcSlcXG41ODM0OlxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbjU4MzU6XFx0XFxuNTgzNjpcXHRcXHRyZXR1cm4gdHJ5X3RvX2luY19tYXhfc2VxKGxydXZlYywgbWF4X3NlcSwgc3dhcHBpbmVzcywgZm9yY2Vfc2NhbikgPyAwIDogLUVFWElTVDtcXG41ODM3OlxcdH1cXG41ODM4OlxcdFxcbjU4Mzk6XFx0c3RhdGljIGludCBydW5fZXZpY3Rpb24oc3RydWN0IGxydXZlYyAqbHJ1dmVjLCB1bnNpZ25lZCBsb25nIHNlcSwgc3RydWN0IHNjYW5fY29udHJvbCAqc2MsXFxuNTg0MDpcXHRcXHRcXHRcXHRpbnQgc3dhcHBpbmVzcywgdW5zaWduZWQgbG9uZyBucl90b19yZWNsYWltKVxcbjU4NDE6XFx0e1xcbjU4NDI6XFx0XFx0aW50IG5yX2JhdGNoO1xcbjU4NDM6XFx0XFx0REVGSU5FX01BWF9TRVEobHJ1dmVjKTtcXG41ODQ0OlxcdFxcbjU4NDU6XFx0XFx0aWYgKHNlcSArIE1JTl9OUl9HRU5TIFxcdTAwM2UgbWF4X3NlcSlcXG41ODQ2OlxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbjU4NDc6XFx0XFxuNTg0ODpcXHRcXHRzYy1cXHUwMDNlbnJfcmVjbGFpbWVkID0gMDtcXG41ODQ5OlxcdFxcbjU4NTA6XFx0XFx0d2hpbGUgKCFzaWduYWxfcGVuZGluZyhjdXJyZW50KSkge1xcbjU4NTE6XFx0XFx0XFx0REVGSU5FX01JTl9TRVEobHJ1dmVjKTtcXG41ODUyOlxcdFxcbjU4NTM6XFx0XFx0XFx0aWYgKHNlcSBcXHUwMDNjIGV2aWN0YWJsZV9taW5fc2VxKG1pbl9zZXEsIHN3YXBwaW5lc3MpKVxcbjU4NTQ6XFx0XFx0XFx0XFx0cmV0dXJuIDA7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE1VDEzOjA3OjA1LjYyMTEyMTg5NFoiLCJTZXEiOjQ1LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjozNTgzMDUxMzU5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkFuYWx5emluZyB0aGUgYHJ1bl9hZ2luZ2AgRnVuY3Rpb24gQ2FsbCoqXG5cbkFscmlnaHQsIGxldCdzIGRpdmUgaW4uIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzIHRvIHRyYWNlIHRoZSBleGVjdXRpb24gb2YgYHJ1bl9hZ2luZ2AuIFRoZSBnb2FsIGlzIHRvIGZ1bGx5IHVuZGVyc3RhbmQgaXRzIGNvbnRleHQgYW5kIGltcGFjdC4gSSBuZWVkIHRvIHBpbnBvaW50IGV2ZXJ5IGluc3RhbmNlIHdoZXJlIGBydW5fYWdpbmdgIGlzIGludm9rZWQuIFRoaXMgbWVhbnMgZ29pbmcgYmV5b25kIGEgc2ltcGxlIGdyZXA7IEknbSBsb29raW5nIGZvciBpbmRpcmVjdCBjYWxscywgcG90ZW50aWFsIHdyYXBwZXIgZnVuY3Rpb25zLCBvciBldmVuIGR5bmFtaWMgaW1wb3J0cyB0aGF0IG1pZ2h0IGJlIGludm9sdmVkLlxuXG5PbmNlIEkndmUgZ290IHRoZSBjYWxsIHNpdGVzIGlkZW50aWZpZWQsIEknbGwgbmVlZCB0byBleGFtaW5lIHRoZSBwYXJhbWV0ZXJzIGJlaW5nIHBhc3NlZCB0byBgcnVuX2FnaW5nYCBhdCBlYWNoIGxvY2F0aW9uLiBXaGF0IGRhdGEgaXMgaXQgb3BlcmF0aW5nIG9uPyBXaGF0IGNvbmZpZ3VyYXRpb25zIGFyZSBiZWluZyBhcHBsaWVkPyBBcmUgdGhlcmUgZGlmZmVyZW50IGNvbnRyb2wgZmxvd3MgYmFzZWQgb24gdGhvc2UgYXJndW1lbnRzPyBUaGlzIGxldmVsIG9mIGRldGFpbCBpcyBjcnVjaWFsIGZvciBhc3Nlc3NpbmcgcG90ZW50aWFsIHNpZGUgZWZmZWN0cyBhbmQgcGVyZm9ybWFuY2UgaW1wbGljYXRpb25zLiBJJ2xsIG5lZWQgdG8gY29uZmlybSB0aGF0IG15IGFzc3VtcHRpb25zIG9mIGlucHV0cyBhbmQgb3V0cHV0cyByZW1haW4gY29ycmVjdC5cblxuTW9yZSBnZW5lcmFsbHksIEkgd2FudCB0byB1bmRlcnN0YW5kOlxuKiAgICoqRGF0YSBEZXBlbmRlbmNpZXM6KiogV2hhdCBvdGhlciBmdW5jdGlvbnMgb3IgZGF0YSBzdHJ1Y3R1cmVzIGRvZXMgYHJ1bl9hZ2luZ2AgcmVseSBvbiwgYm90aCBhcyBpbnB1dCBhbmQgb3V0cHV0PyBXaGF0IGFyZSBpdHMgcHJlLWNvbmRpdGlvbnMgYW5kIHBvc3QtY29uZGl0aW9ucz9cbiogICAqKkNvbmN1cnJlbmN5OioqIElzIHRoaXMgZnVuY3Rpb24gY2FsbGVkIGluIGEgbXVsdGktdGhyZWFkZWQgb3IgYXN5bmNocm9ub3VzIGVudmlyb25tZW50PyBUaGlzIGlzIGNyaXRpY2FsIGZvciB0aHJlYWQgc2FmZXR5IGFuZCB0byBhdm9pZCBpbnRyb2R1Y2luZyByYWNlIGNvbmRpdGlvbnMuXG4qICAgKipFcnJvciBIYW5kbGluZzoqKiBIb3cgZG9lcyBgcnVuX2FnaW5nYCBoYW5kbGUgZXhjZXB0aW9ucyBvciB1bmV4cGVjdGVkIGlucHV0PyBEb2VzIGl0IGltcGxlbWVudCBhcHByb3ByaWF0ZSBsb2dnaW5nIG9yIGV4Y2VwdGlvbiBoYW5kbGluZywgb3IgZG9lcyBpdCBkZXBlbmQgb24gZXh0ZXJuYWwgZXJyb3IgbWFuYWdlbWVudD9cbiogICAqKlBlcmZvcm1hbmNlOioqIFdoYXQgaXMgdGhlIGNvbXB1dGF0aW9uYWwgY29tcGxleGl0eSBvZiB0aGUgYWxnb3JpdGhtLCBhbmQgd2hhdCBhcmUgaXRzIHBlcmZvcm1hbmNlIGNoYXJhY3RlcmlzdGljcyBpbiBwcm9kdWN0aW9uPyBBcmUgdGhlcmUgb2J2aW91cyBib3R0bGVuZWNrcyBvciBhcmVhcyBmb3Igb3B0aW1pemF0aW9uP1xuXG5NeSB1bHRpbWF0ZSBnb2FsIGlzIHRvIGJ1aWxkIGEgY29tcGxldGUgbWVudGFsIG1vZGVsIG9mIGBydW5fYWdpbmdgJ3MgYmVoYXZpb3IgYW5kIHBvdGVudGlhbCBpbXBhY3QuIFRoaXMgdW5kZXJzdGFuZGluZyB3aWxsIGFsbG93IG1lIHRvIGNvbmZpZGVudGx5IG1vZGlmeSBvciBhbmFseXplIHRoZSBjb2RlLiBJdCBzaG91bGQgYWxzbyBoZWxwIG1lIGRpc2NvdmVyIGFueSB1bmZvcmVzZWVuIGludGVyYWN0aW9ucyBiZXR3ZWVuIGBydW5fYWdpbmdgIGFuZCBvdGhlciBwYXJ0cyBvZiB0aGUgc3lzdGVtLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyODc2LCJPdXRwdXRUb2tlbnMiOjM1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTksIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xNVQxMzowNzowOS4yMDQxNzU4MzJaIiwiU2VxIjo0NiwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDQ1MjA5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm1tL3Ztc2Nhbi5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDU4NTUsXG4gIFwiTGluZUNvdW50XCI6IDgwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjU4NTU6XFx0XFxuNTg1NjpcXHRcXHRcXHRpZiAoc2MtXFx1MDAzZW5yX3JlY2xhaW1lZCBcXHUwMDNlPSBucl90b19yZWNsYWltKVxcbjU4NTc6XFx0XFx0XFx0XFx0cmV0dXJuIDA7XFxuNTg1ODpcXHRcXG41ODU5OlxcdFxcdFxcdG5yX2JhdGNoID0gbWluKG5yX3RvX3JlY2xhaW0gLSBzYy1cXHUwMDNlbnJfcmVjbGFpbWVkLCBNQVhfTFJVX0JBVENIKTtcXG41ODYwOlxcdFxcdFxcdGlmICghZXZpY3RfZm9saW9zKG5yX2JhdGNoLCBscnV2ZWMsIHNjLCBzd2FwcGluZXNzKSlcXG41ODYxOlxcdFxcdFxcdFxcdHJldHVybiAwO1xcbjU4NjI6XFx0XFxuNTg2MzpcXHRcXHRcXHRjb25kX3Jlc2NoZWQoKTtcXG41ODY0OlxcdFxcdH1cXG41ODY1OlxcdFxcbjU4NjY6XFx0XFx0cmV0dXJuIC1FSU5UUjtcXG41ODY3OlxcdH1cXG41ODY4OlxcdFxcbjU4Njk6XFx0c3RhdGljIGludCBydW5fY21kKGNoYXIgY21kLCB1NjQgbWVtY2dfaWQsIGludCBuaWQsIHVuc2lnbmVkIGxvbmcgc2VxLFxcbjU4NzA6XFx0XFx0XFx0ICAgc3RydWN0IHNjYW5fY29udHJvbCAqc2MsIGludCBzd2FwcGluZXNzLCB1bnNpZ25lZCBsb25nIG9wdClcXG41ODcxOlxcdHtcXG41ODcyOlxcdFxcdHN0cnVjdCBscnV2ZWMgKmxydXZlYztcXG41ODczOlxcdFxcdGludCBlcnIgPSAtRUlOVkFMO1xcbjU4NzQ6XFx0XFx0c3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnID0gTlVMTDtcXG41ODc1OlxcdFxcbjU4NzY6XFx0XFx0aWYgKG5pZCBcXHUwMDNjIDAgfHwgbmlkIFxcdTAwM2U9IE1BWF9OVU1OT0RFUyB8fCAhbm9kZV9zdGF0ZShuaWQsIE5fTUVNT1JZKSlcXG41ODc3OlxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbjU4Nzg6XFx0XFxuNTg3OTpcXHRcXHRpZiAoIW1lbV9jZ3JvdXBfZGlzYWJsZWQoKSkge1xcbjU4ODA6XFx0XFx0XFx0bWVtY2cgPSBtZW1fY2dyb3VwX2dldF9mcm9tX2lkKG1lbWNnX2lkKTtcXG41ODgxOlxcdFxcdFxcdGlmICghbWVtY2cpXFxuNTg4MjpcXHRcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG41ODgzOlxcdFxcdH1cXG41ODg0OlxcdFxcbjU4ODU6XFx0XFx0aWYgKG1lbWNnX2lkICE9IG1lbV9jZ3JvdXBfaWQobWVtY2cpKVxcbjU4ODY6XFx0XFx0XFx0Z290byBkb25lO1xcbjU4ODc6XFx0XFxuNTg4ODpcXHRcXHRzYy1cXHUwMDNldGFyZ2V0X21lbV9jZ3JvdXAgPSBtZW1jZztcXG41ODg5OlxcdFxcdGxydXZlYyA9IGdldF9scnV2ZWMobWVtY2csIG5pZCk7XFxuNTg5MDpcXHRcXG41ODkxOlxcdFxcdGlmIChzd2FwcGluZXNzIFxcdTAwM2MgTUlOX1NXQVBQSU5FU1MpXFxuNTg5MjpcXHRcXHRcXHRzd2FwcGluZXNzID0gZ2V0X3N3YXBwaW5lc3MobHJ1dmVjLCBzYyk7XFxuNTg5MzpcXHRcXHRlbHNlIGlmIChzd2FwcGluZXNzIFxcdTAwM2UgU1dBUFBJTkVTU19BTk9OX09OTFkpXFxuNTg5NDpcXHRcXHRcXHRnb3RvIGRvbmU7XFxuNTg5NTpcXHRcXG41ODk2OlxcdFxcdHN3aXRjaCAoY21kKSB7XFxuNTg5NzpcXHRcXHRjYXNlICcrJzpcXG41ODk4OlxcdFxcdFxcdGVyciA9IHJ1bl9hZ2luZyhscnV2ZWMsIHNlcSwgc3dhcHBpbmVzcywgb3B0KTtcXG41ODk5OlxcdFxcdFxcdGJyZWFrO1xcbjU5MDA6XFx0XFx0Y2FzZSAnLSc6XFxuNTkwMTpcXHRcXHRcXHRlcnIgPSBydW5fZXZpY3Rpb24obHJ1dmVjLCBzZXEsIHNjLCBzd2FwcGluZXNzLCBvcHQpO1xcbjU5MDI6XFx0XFx0XFx0YnJlYWs7XFxuNTkwMzpcXHRcXHR9XFxuNTkwNDpcXHRkb25lOlxcbjU5MDU6XFx0XFx0bWVtX2Nncm91cF9wdXQobWVtY2cpO1xcbjU5MDY6XFx0XFxuNTkwNzpcXHRcXHRyZXR1cm4gZXJyO1xcbjU5MDg6XFx0fVxcbjU5MDk6XFx0XFxuNTkxMDpcXHQvKiBzZWUgRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9tbS9tdWx0aWdlbl9scnUucnN0IGZvciBkZXRhaWxzICovXFxuNTkxMTpcXHRzdGF0aWMgc3NpemVfdCBscnVfZ2VuX3NlcV93cml0ZShzdHJ1Y3QgZmlsZSAqZmlsZSwgY29uc3QgY2hhciBfX3VzZXIgKnNyYyxcXG41OTEyOlxcdFxcdFxcdFxcdFxcdCBzaXplX3QgbGVuLCBsb2ZmX3QgKnBvcylcXG41OTEzOlxcdHtcXG41OTE0OlxcdFxcdHZvaWQgKmJ1ZjtcXG41OTE1OlxcdFxcdGNoYXIgKmN1ciwgKm5leHQ7XFxuNTkxNjpcXHRcXHR1bnNpZ25lZCBpbnQgZmxhZ3M7XFxuNTkxNzpcXHRcXHRzdHJ1Y3QgYmxrX3BsdWcgcGx1ZztcXG41OTE4OlxcdFxcdGludCBlcnIgPSAtRUlOVkFMO1xcbjU5MTk6XFx0XFx0c3RydWN0IHNjYW5fY29udHJvbCBzYyA9IHtcXG41OTIwOlxcdFxcdFxcdC5tYXlfd3JpdGVwYWdlID0gdHJ1ZSxcXG41OTIxOlxcdFxcdFxcdC5tYXlfdW5tYXAgPSB0cnVlLFxcbjU5MjI6XFx0XFx0XFx0Lm1heV9zd2FwID0gdHJ1ZSxcXG41OTIzOlxcdFxcdFxcdC5yZWNsYWltX2lkeCA9IE1BWF9OUl9aT05FUyAtIDEsXFxuNTkyNDpcXHRcXHRcXHQuZ2ZwX21hc2sgPSBHRlBfS0VSTkVMLFxcbjU5MjU6XFx0XFx0XFx0LnByb2FjdGl2ZSA9IHRydWUsXFxuNTkyNjpcXHRcXHR9O1xcbjU5Mjc6XFx0XFxuNTkyODpcXHRcXHRidWYgPSBrdm1hbGxvYyhsZW4gKyAxLCBHRlBfS0VSTkVMKTtcXG41OTI5OlxcdFxcdGlmICghYnVmKVxcbjU5MzA6XFx0XFx0XFx0cmV0dXJuIC1FTk9NRU07XFxuNTkzMTpcXHRcXG41OTMyOlxcdFxcdGlmIChjb3B5X2Zyb21fdXNlcihidWYsIHNyYywgbGVuKSkge1xcbjU5MzM6XFx0XFx0XFx0a3ZmcmVlKGJ1Zik7XFxuNTkzNDpcXHRcXHRcXHRyZXR1cm4gLUVGQVVMVDtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTVUMTM6MDc6MDkuMjA0NjI0NDYzWiIsIlNlcSI6NDcsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjkyNzQ0OTg2NjUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBgcnVuX2FnaW5nYCBQYXRjaCBmb3IgUG90ZW50aWFsIElzc3VlcyoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gSSdtIGxvb2tpbmcgYXQgdGhlIGNoYW5nZSB0byB0aGUgYHJ1bl9hZ2luZ2AgZnVuY3Rpb24uIFRoZSBvcmlnaW5hbCBjb2RlIGluIGBydW5fYWdpbmdgIGhhZCBhIGNoZWNrOiBpZiBgc2VxYCAodGhlIHNlcXVlbmNlIG51bWJlcikgd2FzICpncmVhdGVyKiB0aGFuIGBtYXhfc2VxYCwgaXQgcmV0dXJuZWQgYW4gZXJyb3IuIE90aGVyd2lzZSwgaXQgY2FsbGVkIGB0cnlfdG9faW5jX21heF9zZXEoLi4uKWAuIFRoZSBwYXRjaCBoYXMgZmxpcHBlZCB0aGUgY29uZGl0aW9uLiBOb3csIGlmIGBzZXFgIGlzICpsZXNzIHRoYW4qIGBtYXhfc2VxYCwgaXQgKmltbWVkaWF0ZWx5KiByZXR1cm5zIDAuIFRoZSBpbXBsaWNhdGlvbiBpcyB0aGF0IGlmIHRoZSByZXF1ZXN0ZWQgYWdpbmcgc2VxdWVuY2UgaXMgYWxyZWFkeSBcIm9sZFwiIChsZXNzIHRoYW4gdGhlIGN1cnJlbnQgbWF4KSwgdGhlbiB0aGVyZSdzIG5vIG5lZWQgdG8gZG8gYW55dGhpbmcsIGJlY2F1c2UgYWdpbmcgdG8gdGhhdCBwb2ludCBoYXMgYWxyZWFkeSBvY2N1cnJlZC4gVGhpcyBtYWtlcyBzZW5zZSBmcm9tIGEgcGVyZm9ybWFuY2UgcGVyc3BlY3RpdmUg4oCTIGF2b2lkIHJlZHVuZGFudCB3b3JrLlxuXG5UaGUgcXVlc3Rpb24gbm93IGlzLCBkaWQgdGhpcyBpbnRyb2R1Y2UgYSB2dWxuZXJhYmlsaXR5IG9yIGEgbWVtb3J5IHNhZmV0eSBpc3N1ZT8gU3BlY2lmaWNhbGx5LCBhcmUgd2Ugbm93IGV4cG9zaW5nIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IG9yIGNyZWF0aW5nIGEgc2l0dWF0aW9uIHdoZXJlIHdlJ3JlIHJlYWRpbmcgdW5pbml0aWFsaXplZCB2YWx1ZXM/IExldCdzIGJlIHRob3JvdWdoLlxuXG5GaXJzdCwgSSBuZWVkIHRvIGNoZWNrIGhvdyB0aGUgcmV0dXJuIHZhbHVlIG9mIGBydW5fYWdpbmdgIGlzIHVzZWQuIFdlJ3JlIGNvbmNlcm5lZCBhYm91dCBzaXR1YXRpb25zIHdoZXJlIGtlcm5lbCBzdHJ1Y3R1cmVzIGFyZSBzZW50IHRvIHVzZXJzcGFjZSDigJMgdGhpbmsgYGNvcHlfdG9fdXNlcmAsIGBwdXRfdXNlcmAsIG5ldGxpbmsgU0tCIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycy4gQXJlIHRoZXJlIGFueSB2YWx1ZXMgb3IgbWVtb3J5IHRoYXQgaXMgdW5pbml0aWFsaXplZCBieSB0aGUgc2hvcnQtY2lyY3VpdGluZz9cblxuTG9va2luZyBhdCB0aGUgY29kZSBwYXRoLCBgcnVuX2FnaW5nYCByZXR1cm5zIGFuIGludGVnZXIsIGFuIGVycm9yIGNvZGUsIHRvIGBydW5fY21kYC4gVGhlbiwgYHJ1bl9jbWRgIHBhc3NlcyB0aGUgdmFsdWUgdG8gYGxydV9nZW5fc2VxX3dyaXRlYC4gYGxydV9nZW5fc2VxX3dyaXRlYCBpcyB0aGUgZnVuY3Rpb24gdGhhdCB1bHRpbWF0ZWx5IHJldHVybnMgdG8gdXNlciBzcGFjZS4gSXQgcmV0dXJucyBlaXRoZXIgdGhlIGBsZW5gICh0aGUgbGVuZ3RoIG9mIHRoZSB3cml0ZSksIG9yIHRoZSBlcnJvciBjb2RlIGZyb20gYHJ1bl9jbWRgLiBUaGUgcmV0dXJuIHZhbHVlIGRvZXMgbm90IHJldHVybiBhbnkgc3RydWN0dXJlcy4gXG5cbk9rYXksIHNvIEkgd2lsbCBub3cgY2hlY2sgbGluZXMgNTkzMC01OTcwIG9mIGBtbS92bXNjYW4uY2AgdG8gc2VlIGlmIHRoZXJlIGlzIGFueSBvdGhlciBwb3NzaWJpbGl0eSBvZiBtZW1vcnkgZXhwb3N1cmUgZnJvbSB0aGUgY2hhbmdlLiBJIG5lZWQgdG8gbWFrZSBzdXJlIHRoYXQgdGhlIGNoYW5nZSBpbiBgcnVuX2FnaW5nYCBkb2VzIG5vdCBjaGFuZ2UgYW55IHN0YXRlIHRoYXQgY291bGQgY3JlYXRlIGEgc2VjdXJpdHkgcmlzay5cblxuVGhpcyBzZWVtcyBzYWZlOyBJJ20gcHJldHR5IGNvbWZvcnRhYmxlIHdpdGggdGhpcyBjaGFuZ2UuIEl0J3MgYSBwZXJmb3JtYW5jZSBvcHRpbWl6YXRpb24gdGhhdCBzaG91bGQgYmUgb2suXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQ0OTIsIk91dHB1dFRva2VucyI6MzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozNjIsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xNVQxMzowNzoxOC40NzkxMjcxMzdaIiwiU2VxIjo0OCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDY5NzAwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm1tL3Ztc2Nhbi5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDU5MzAsXG4gIFwiTGluZUNvdW50XCI6IDQwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjU5MzA6XFx0XFx0XFx0cmV0dXJuIC1FTk9NRU07XFxuNTkzMTpcXHRcXG41OTMyOlxcdFxcdGlmIChjb3B5X2Zyb21fdXNlcihidWYsIHNyYywgbGVuKSkge1xcbjU5MzM6XFx0XFx0XFx0a3ZmcmVlKGJ1Zik7XFxuNTkzNDpcXHRcXHRcXHRyZXR1cm4gLUVGQVVMVDtcXG41OTM1OlxcdFxcdH1cXG41OTM2OlxcdFxcbjU5Mzc6XFx0XFx0c2V0X3Rhc2tfcmVjbGFpbV9zdGF0ZShjdXJyZW50LCBcXHUwMDI2c2MucmVjbGFpbV9zdGF0ZSk7XFxuNTkzODpcXHRcXHRmbGFncyA9IG1lbWFsbG9jX25vcmVjbGFpbV9zYXZlKCk7XFxuNTkzOTpcXHRcXHRibGtfc3RhcnRfcGx1ZyhcXHUwMDI2cGx1Zyk7XFxuNTk0MDpcXHRcXHRpZiAoIXNldF9tbV93YWxrKE5VTEwsIHRydWUpKSB7XFxuNTk0MTpcXHRcXHRcXHRlcnIgPSAtRU5PTUVNO1xcbjU5NDI6XFx0XFx0XFx0Z290byBkb25lO1xcbjU5NDM6XFx0XFx0fVxcbjU5NDQ6XFx0XFxuNTk0NTpcXHRcXHRuZXh0ID0gYnVmO1xcbjU5NDY6XFx0XFx0bmV4dFtsZW5dID0gJ1xcXFwwJztcXG41OTQ3OlxcdFxcbjU5NDg6XFx0XFx0d2hpbGUgKChjdXIgPSBzdHJzZXAoXFx1MDAyNm5leHQsIFxcXCIsO1xcXFxuXFxcIikpKSB7XFxuNTk0OTpcXHRcXHRcXHRpbnQgbjtcXG41OTUwOlxcdFxcdFxcdGludCBlbmQ7XFxuNTk1MTpcXHRcXHRcXHRjaGFyIGNtZCwgc3dhcF9zdHJpbmdbNV07XFxuNTk1MjpcXHRcXHRcXHR1NjQgbWVtY2dfaWQ7XFxuNTk1MzpcXHRcXHRcXHR1bnNpZ25lZCBpbnQgbmlkO1xcbjU5NTQ6XFx0XFx0XFx0dW5zaWduZWQgbG9uZyBzZXE7XFxuNTk1NTpcXHRcXHRcXHR1bnNpZ25lZCBpbnQgc3dhcHBpbmVzcztcXG41OTU2OlxcdFxcdFxcdHVuc2lnbmVkIGxvbmcgb3B0ID0gLTE7XFxuNTk1NzpcXHRcXG41OTU4OlxcdFxcdFxcdGN1ciA9IHNraXBfc3BhY2VzKGN1cik7XFxuNTk1OTpcXHRcXHRcXHRpZiAoISpjdXIpXFxuNTk2MDpcXHRcXHRcXHRcXHRjb250aW51ZTtcXG41OTYxOlxcdFxcbjU5NjI6XFx0XFx0XFx0biA9IHNzY2FuZihjdXIsIFxcXCIlYyAlbGx1ICV1ICVsdSAlbiAlNHMgJW4gJWx1ICVuXFxcIiwgXFx1MDAyNmNtZCwgXFx1MDAyNm1lbWNnX2lkLCBcXHUwMDI2bmlkLFxcbjU5NjM6XFx0XFx0XFx0XFx0ICAgXFx1MDAyNnNlcSwgXFx1MDAyNmVuZCwgc3dhcF9zdHJpbmcsIFxcdTAwMjZlbmQsIFxcdTAwMjZvcHQsIFxcdTAwMjZlbmQpO1xcbjU5NjQ6XFx0XFx0XFx0aWYgKG4gXFx1MDAzYyA0IHx8IGN1cltlbmRdKSB7XFxuNTk2NTpcXHRcXHRcXHRcXHRlcnIgPSAtRUlOVkFMO1xcbjU5NjY6XFx0XFx0XFx0XFx0YnJlYWs7XFxuNTk2NzpcXHRcXHRcXHR9XFxuNTk2ODpcXHRcXG41OTY5OlxcdFxcdFxcdGlmIChuID09IDQpIHtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTVUMTM6MDc6MTguNDc5NTk5Mzg3WiIsIlNlcSI6NDksIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjM3MjUwNzU1NjUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0IHRob3VnaHQgcHJvY2VzcywgYXNzdW1pbmcgSSdtIGRlZXBseSBmYW1pbGlhciB3aXRoIGNvZGUgYW5kIGxpa2VseSBkZWJ1Z2dpbmc6XG5cbioqRGl2aW5nIERlZXBlciBpbnRvIGBscnVfZ2VuX3NlcV93cml0ZWAqKlxuXG5BbHJpZ2h0LCB0aGF0J3Mgd2hlcmUgd2UncmUgZ29pbmcgbmV4dC4gTXkgbWVudGFsIGNoZWNrbGlzdCBzYXlzLCBiYXNlZCBvbiB3aGF0IEkndmUgc2VlbiBzbyBmYXIsIHRoZSBuZXh0IGxvZ2ljYWwgc3RlcCB0byB1bmRlcnN0YW5kIHRoZSBiZWhhdmlvciBpcyB0byBkaWcgaW50byB0aGUgYGxydV9nZW5fc2VxX3dyaXRlYCBmdW5jdGlvbi4gVGhpcyBsaWtlbHkgZGVhbHMgd2l0aCB0aGUgTGVhc3QgUmVjZW50bHkgVXNlZCAoTFJVKSBjYWNoZSwgYW5kIHRoZSBcImdlbl9zZXFcIiBhbmQgXCJ3cml0ZVwiIGVsZW1lbnRzIHN1Z2dlc3QgaXQgaGFzIHNvbWV0aGluZyB0byBkbyB3aXRoIHRoZSBnZW5lcmF0aW9uIG9mIGEgc2VxdWVuY2UgbnVtYmVyIGR1cmluZyBhIHdyaXRlIG9wZXJhdGlvbiwgcHJvYmFibHkgaW4gY29uanVuY3Rpb24gd2l0aCB0aGUgTFJVIGV2aWN0aW9uIHBvbGljeS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgZXhhY3RseSBob3cgdGhpcyBmdW5jdGlvbiBpbnRlcmFjdHMgd2l0aCB0aGUgcmVzdCBvZiB0aGUgc3lzdGVtLCBhbmQgaG93IGl0IGhhbmRsZXMgcG90ZW50aWFsIHJhY2UgY29uZGl0aW9ucyBvciBjb25jdXJyZW5jeSBpc3N1ZXMsIG9yIGlmIGl0IGhhcyBhbnl0aGluZyB0byBkbyB3aXRoIGEgcGVyZm9ybWFuY2UgYm90dGxlbmVjay4gTGV0J3Mgc2VlIHdoYXQgd2UgY2FuIGZpbmQgaW4gdGhlcmUuIFRoaXMgaXMgd2hlcmUgdGhlIHJlYWwgd29yayBiZWdpbnMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjU5NTAsIk91dHB1dFRva2VucyI6MzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNiwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE1VDEzOjA3OjIyLjIwNDY3ODU1MloiLCJTZXEiOjUwLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NDg1ODAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibW0vdm1zY2FuLmNcIixcbiAgXCJGaXJzdExpbmVcIjogNTk3MCxcbiAgXCJMaW5lQ291bnRcIjogNDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiNTk3MDpcXHRcXHRcXHRcXHRzd2FwcGluZXNzID0gLTE7XFxuNTk3MTpcXHRcXHRcXHR9IGVsc2UgaWYgKCFzdHJjbXAoXFxcIm1heFxcXCIsIHN3YXBfc3RyaW5nKSkge1xcbjU5NzI6XFx0XFx0XFx0XFx0Lyogc2V0IGJ5IHVzZXJzcGFjZSBmb3IgYW5vbnltb3VzIG1lbW9yeSBvbmx5ICovXFxuNTk3MzpcXHRcXHRcXHRcXHRzd2FwcGluZXNzID0gU1dBUFBJTkVTU19BTk9OX09OTFk7XFxuNTk3NDpcXHRcXHRcXHR9IGVsc2Uge1xcbjU5NzU6XFx0XFx0XFx0XFx0ZXJyID0ga3N0cnRvdWludChzd2FwX3N0cmluZywgMCwgXFx1MDAyNnN3YXBwaW5lc3MpO1xcbjU5NzY6XFx0XFx0XFx0XFx0aWYgKGVycilcXG41OTc3OlxcdFxcdFxcdFxcdFxcdGJyZWFrO1xcbjU5Nzg6XFx0XFx0XFx0fVxcbjU5Nzk6XFx0XFxuNTk4MDpcXHRcXHRcXHRlcnIgPSBydW5fY21kKGNtZCwgbWVtY2dfaWQsIG5pZCwgc2VxLCBcXHUwMDI2c2MsIHN3YXBwaW5lc3MsIG9wdCk7XFxuNTk4MTpcXHRcXHRcXHRpZiAoZXJyKVxcbjU5ODI6XFx0XFx0XFx0XFx0YnJlYWs7XFxuNTk4MzpcXHRcXHR9XFxuNTk4NDpcXHRkb25lOlxcbjU5ODU6XFx0XFx0Y2xlYXJfbW1fd2FsaygpO1xcbjU5ODY6XFx0XFx0YmxrX2ZpbmlzaF9wbHVnKFxcdTAwMjZwbHVnKTtcXG41OTg3OlxcdFxcdG1lbWFsbG9jX25vcmVjbGFpbV9yZXN0b3JlKGZsYWdzKTtcXG41OTg4OlxcdFxcdHNldF90YXNrX3JlY2xhaW1fc3RhdGUoY3VycmVudCwgTlVMTCk7XFxuNTk4OTpcXHRcXG41OTkwOlxcdFxcdGt2ZnJlZShidWYpO1xcbjU5OTE6XFx0XFxuNTk5MjpcXHRcXHRyZXR1cm4gZXJyID8gOiBsZW47XFxuNTk5MzpcXHR9XFxuNTk5NDpcXHRcXG41OTk1OlxcdHN0YXRpYyBpbnQgbHJ1X2dlbl9zZXFfb3BlbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSlcXG41OTk2OlxcdHtcXG41OTk3OlxcdFxcdHJldHVybiBzZXFfb3BlbihmaWxlLCBcXHUwMDI2bHJ1X2dlbl9zZXFfb3BzKTtcXG41OTk4OlxcdH1cXG41OTk5OlxcdFxcbjYwMDA6XFx0c3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgbHJ1X2dlbl9yd19mb3BzID0ge1xcbjYwMDE6XFx0XFx0Lm9wZW4gPSBscnVfZ2VuX3NlcV9vcGVuLFxcbjYwMDI6XFx0XFx0LnJlYWQgPSBzZXFfcmVhZCxcXG42MDAzOlxcdFxcdC53cml0ZSA9IGxydV9nZW5fc2VxX3dyaXRlLFxcbjYwMDQ6XFx0XFx0Lmxsc2VlayA9IHNlcV9sc2VlayxcXG42MDA1OlxcdFxcdC5yZWxlYXNlID0gc2VxX3JlbGVhc2UsXFxuNjAwNjpcXHR9O1xcbjYwMDc6XFx0XFxuNjAwODpcXHRzdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBscnVfZ2VuX3JvX2ZvcHMgPSB7XFxuNjAwOTpcXHRcXHQub3BlbiA9IGxydV9nZW5fc2VxX29wZW4sXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE1VDEzOjA3OjIyLjIwNTEzMzgwMloiLCJTZXEiOjUxLCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjoyMzA0NDc4NDU1NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBbmFseXNpcyBvZiB0aGUgTFJVIEFnaW5nIE9wdGltaXphdGlvbioqXG5cbk9rYXksIHNvIEkndmUgYmVlbiBsb29raW5nIG92ZXIgdGhpcyBwYXRjaC4gSXQncyBhIHByZXR0eSBzdHJhaWdodGZvcndhcmQgb3B0aW1pemF0aW9uIGluIGBydW5fYWdpbmdgIHdpdGhpbiB0aGUgbXVsdGktZ2VuIExSVSBzeXN0ZW0uIEJhc2ljYWxseSwgaXQncyBhZGRpbmcgYSBzaW1wbGUgZWFybHktcmV0dXJuIGNoZWNrOiBgaWYgKHNlcSBcdTAwM2MgbWF4X3NlcSkgcmV0dXJuIDA7YC4gVGhpcyBjaGVjayBwcmV2ZW50cyB1bm5lY2Vzc2FyeSBjYWxscyB0byBgdHJ5X3RvX2luY19tYXhfc2VxYCB3aGVuIHRoZSByZXF1ZXN0ZWQgc2VxdWVuY2UgbnVtYmVyIChgc2VxYCkgaXMgKmFscmVhZHkqIGxlc3MgdGhhbiB0aGUgbWF4aW11bSBhbGxvd2VkIHNlcXVlbmNlIChgbWF4X3NlcWApLiBQcmV2aW91c2x5LCBpdCB3YXMgYXR0ZW1wdGluZyB0aGUgaW5jcmVtZW50IGV2ZW4gd2hlbiBpdCB3YXNuJ3QgbmVlZGVkLCBsZWFkaW5nIHRvIHBvdGVudGlhbCB3YXN0ZWQgY3ljbGVzIG9yIGFuIHVubmVjZXNzYXJ5IGAtRUVYSVNUYCByZXR1cm4uXG5cblRoZSBpbXBvcnRhbnQgdGhpbmcgaXMgdGhhdCBub3RoaW5nIGluIGBscnVfZ2VuX3NlcV93cml0ZWAsIHRoZSBlbnRyeSBwb2ludCBmb3IgdGhpcywgcmV0dXJucyBhbnkgZGF0YSB0byB1c2VyIHNwYWNlLiBJdCBvbmx5IHJldHVybnMgYW4gZXJyb3IgY29kZSBvciB0aGUgbGVuZ3RoIG9mIHRoZSBvcGVyYXRpb24sIG5vdGhpbmcgaXMgYWxsb2NhdGVkIG9yIGxlZnQgdW5pbml0aWFsaXplZCwgbm8gZGF0YSBsZWFrcy5cblxuTXkgaW5pdGlhbCB0aG91Z2h0IHdhcyB3aGV0aGVyIHRoaXMgaGFkIGFueSBpbXBsaWNhdGlvbnMgZm9yIEtNU0FOIChLZXJuZWwgTWVtb3J5IFNhbml0aXplcikgYW5kIHRoZSBkZXRlY3Rpb24gb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMgb3IgaW5mb3JtYXRpb24gbGVha3MuIEkndmUgZG9uZSBhIHZlcnkgdGhvcm91Z2ggcmV2aWV3IG9uIHRoaXMgYXNwZWN0LlxuXG4qICAgVGhlcmUgYXJlIG5vIG1lbW9yeSBhbGxvY2F0aW9ucyBpbnZvbHZlZCwgbm8gbmV3IHN0YWNrIG9yIGhlYXAgdmFyaWFibGVzLCBhbmQgY3JpdGljYWxseSwgbm8gZGF0YSBpcyBiZWluZyBjb3BpZWQgdG8gdXNlciBzcGFjZS4gVGhlIGxvZ2ljIGJvaWxzIGRvd24gdG8gYSBzaW1wbGUgaW50ZWdlciBjb21wYXJpc29uIGJldHdlZW4gYHNlcWAgKGRlcml2ZWQgZnJvbSB1c2VyIGlucHV0KSBhbmQgYG1heF9zZXFgIChkZXJpdmVkIGZyb20gYSBgREVGSU5FX01BWF9TRVEobHJ1dmVjKWAgbWFjcm8sIGZyb20gdGhlIGBscnV2ZWNgIHN0cnVjdHVyZSkuIFRoaXMgaXMgYSBwdXJlbHkgbG9naWNhbCBjaGVjay4gVGhlcmUncyBubyB3YXkgdGhpcyBpbnRyb2R1Y2VzIG9yIGFmZmVjdHMgYW55IEtNU0FOLXNwZWNpZmljIHZ1bG5lcmFiaWxpdGllcy5cblxuKiAgIFRvIHB1dCBpdCBhbm90aGVyIHdheSwgS0FTQU4gKEtlcm5lbCBBZGRyZXNzIFNhbml0aXplcikgaXMgYSB0b29sIHRoYXQgZGV0ZWN0cyBtZW1vcnkgYWNjZXNzIGVycm9ycywgd2hpbGUgS01TQU4gZm9jdXNlcyBvbiB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcyBhbmQgaW5mb3JtYXRpb24gbGVha3MgKnRvIHVzZXIgc3BhY2UqLiBUaGlzIHBhdGNoIGRvZXNuJ3QgaW50cm9kdWNlIGFueSBuZXcgcGF0aHMgdGhhdCBjb3VsZCBsZWFkIHRvIHRob3NlIHNjZW5hcmlvcy5cblxuVGhlcmVmb3JlLCB0aGUgcGF0Y2ggZG9lc24ndCBcIk5lZWRLTVNBTlwiLiBJJ20gcmVhZHkgdG8gbWFyayBpdCBhcyBzdWNoLiBXZSBjYW4gcHJvY2VlZCB3aXRoIHRoZSBzdGFuZGFyZCByZXZpZXcgYW5kIHRlc3RpbmcuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjY3OTIsIk91dHB1dFRva2VucyI6MTU3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTQ5LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTVUMTM6MDc6NDUuMjQ5OTIxNzc2WiIsIlNlcSI6NTIsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTc1MTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRzIGFuIGVhcmx5IHJldHVybiBjaGVjayAoYGlmIChzZXEgXFx1MDAzYyBtYXhfc2VxKSByZXR1cm4gMDtgKSBpbiBgcnVuX2FnaW5nKClgIHdpdGhpbiBgbW0vdm1zY2FuLmNgLiBJdCBvcGVyYXRlcyBleGNsdXNpdmVseSBvbiBzY2FsYXIgaW50ZWdlciB2YWx1ZXMgKGBzZXFgIGFuZCBgbWF4X3NlcWApIGFuZCBhbHRlcnMgY29udHJvbCBmbG93IGluIHRoZSBtdWx0aS1nZW4gTFJVIGFnaW5nIHRyaWdnZXIuIFRoZSBjaGFuZ2UgZG9lcyBub3QgaW50cm9kdWNlIG9yIG1vZGlmeSBhbnkgbWVtb3J5IGFsbG9jYXRpb25zLCBkb2VzIG5vdCB0b3VjaCB1bmluaXRpYWxpemVkIHN0YWNrIG9yIGhlYXAgYnVmZmVycywgYW5kIGRvZXMgbm90IHBhc3MgYW55IGtlcm5lbCBzdHJ1Y3R1cmVzIHRvIHVzZXIgc3BhY2UuIEJlY2F1c2Ugbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgY2FuIGJlIHJlYWQsIGJyYW5jaGVkIHVwb24sIG9yIGxlYWtlZCB0byB1c2Vyc3BhY2UgYXMgYSByZXN1bHQgb2YgdGhpcyBjaGFuZ2UsIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIGlzIG5vdCB3YXJyYW50ZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcyBhbiBlYXJseSByZXR1cm4gY2hlY2sgKGBpZiAoc2VxIFxcdTAwM2MgbWF4X3NlcSkgcmV0dXJuIDA7YCkgaW4gYHJ1bl9hZ2luZygpYCB3aXRoaW4gYG1tL3Ztc2Nhbi5jYC4gSXQgb3BlcmF0ZXMgZXhjbHVzaXZlbHkgb24gc2NhbGFyIGludGVnZXIgdmFsdWVzIChgc2VxYCBhbmQgYG1heF9zZXFgKSBhbmQgYWx0ZXJzIGNvbnRyb2wgZmxvdyBpbiB0aGUgbXVsdGktZ2VuIExSVSBhZ2luZyB0cmlnZ2VyLiBUaGUgY2hhbmdlIGRvZXMgbm90IGludHJvZHVjZSBvciBtb2RpZnkgYW55IG1lbW9yeSBhbGxvY2F0aW9ucywgZG9lcyBub3QgdG91Y2ggdW5pbml0aWFsaXplZCBzdGFjayBvciBoZWFwIGJ1ZmZlcnMsIGFuZCBkb2VzIG5vdCBwYXNzIGFueSBrZXJuZWwgc3RydWN0dXJlcyB0byB1c2VyIHNwYWNlLiBCZWNhdXNlIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGNhbiBiZSByZWFkLCBicmFuY2hlZCB1cG9uLCBvciBsZWFrZWQgdG8gdXNlcnNwYWNlIGFzIGEgcmVzdWx0IG9mIHRoaXMgY2hhbmdlLCBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBpcyBub3Qgd2FycmFudGVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0udG9rZW5zIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnVG9vbER1ciA9IHN0YXRzLnRvb2wuY291bnQgPiAwID8gKHN0YXRzLnRvb2wuZHVyYXRpb24gLyBzdGF0cy50b29sLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCgkJCWNvbnN0IGxsbVN1bWFyeUNlbGxzID0gW3N0YXRzLmxsbS5jb3VudCwgc3RhdHMubGxtLnRva2VucywgYXZnTGxtVG9rZW4sIHN0YXRzLmxsbS5kdXJhdGlvbiwgYXZnTGxtRHVyXTsKCQkJY29uc3QgdG9vbFN1bW1hcnlDZWxscyA9IFtzdGF0cy50b29sLmNvdW50LCBzdGF0cy50b29sLmR1cmF0aW9uLCBhdmdUb29sRHVyXTsKCgkJCWNvbnN0IGxsbVN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xsbV9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJbGxtU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IGxsbVRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJbGxtU3VtYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCWxsbVRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCWxsbVN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKGxsbVRyKTsKCgkJCWNvbnN0IHRvb2xTdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b29sX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQl0b29sU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IHRvb2xUciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCXRvb2xTdW1tYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCXRvb2xUci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQl0b29sU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQodG9vbFRyKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgZmlsdGVyZWRTdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gWyJsbG0iLCAidG9vbCJdLmluY2x1ZGVzKGQuVHlwZSkpOwoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdEdXJhdGlvbicpOwoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOyAKCgkJCWZpbHRlcmVkU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCQoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7CgkJCQlsZXQgdG9vbHRpcCA9IHMuTmFtZTsKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iICYmIHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCQkJCWRhdGEuYWRkUm93KFtgJHtzLlNlcX1gLCBkdXIsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUaW1lIENvbnN1bXB0aW9uIG9mIExMTS9Ub29sIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0vVG9vbCBTdGVwcycsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdTZWNvbmRzJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkdXJhdGlvbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgbGxtU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IGQuVHlwZSA9PT0gImxsbSIpOwoJCQlpZiAobGxtU3RlcHMubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdUb2tlbnMnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAnc3R5bGUnfSk7CQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOwkKCgkJCWNvbnN0IGFnZW50Q29sb3JzID0ge307CgkJCWNvbnN0IHBhbGV0dGUgPSBbJyM0Mjg1RjQnLCAnI0RCNDQzNycsICcjRjRCNDAwJywgJyMwRjlENTgnLCAnI0FCNDdCQycsICcjMDBBQ0MxJ107CgkJCWxldCBjb2xvcklkeCA9IDA7CgkJCWNvbnN0IGFnZW50TExNQ291bnRzID0ge307CgkJCWxsbVN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQlpZiAoIWFnZW50Q29sb3JzW3MuTmFtZV0pIHsKCQkJCQlhZ2VudENvbG9yc1tzLk5hbWVdID0gcGFsZXR0ZVtjb2xvcklkeCAlIHBhbGV0dGUubGVuZ3RoXTsKCQkJCQljb2xvcklkeCsrOwoJCQkJfQoKCQkJCWFnZW50TExNQ291bnRzW3MuTmFtZV0gPSAoYWdlbnRMTE1Db3VudHNbcy5OYW1lXSB8fCAwKSArIDE7CgkJCQljb25zdCBsYWJlbCA9IGAke3MuTmFtZX0tJHthZ2VudExMTUNvdW50c1tzLk5hbWVdfWA7CgkJCQljb25zdCB0b3RhbFRva2VucyA9IHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnM7CgkJCQljb25zdCBzdHlsZSA9IGBjb2xvcjogJHthZ2VudENvbG9yc1tzLk5hbWVdfWA7CgkJCQlsZXQgdG9vbHRpcCA9IGBUb3RhbCBUb2tlbnM6ICR7dG90YWxUb2tlbnN9XG4oSW46ICR7cy5JbnB1dFRva2Vuc30sIE91dDogJHtzLk91dHB1dFRva2Vuc30sIFRob3VnaHRzOiAke3MuT3V0cHV0VGhvdWdodHNUb2tlbnN9KWA7CgkJCQlpZiAocy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoKCQkJCWRhdGEuYWRkUm93KFtsYWJlbCwgdG90YWxUb2tlbnMsIHN0eWxlLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVG9rZW4gQ29uc3VtcHRpb24gYnkgTExNIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0gQ2FsbCBTZXF1ZW5jZScsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdDb25zdW1lZCBUb2tlbnMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rva2VuX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgkJbGV0IGFsbEV4cGFuZGVkID0gZmFsc2U7CgkJZnVuY3Rpb24gdG9nZ2xlQWxsRGV0YWlscygpIHsKCQkJYWxsRXhwYW5kZWQgPSAhYWxsRXhwYW5kZWQ7CgkJCWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2RldGFpbHMnKS5mb3JFYWNoKGQgPT4gewoJCQkJaWYgKGFsbEV4cGFuZGVkKSBkLnNldEF0dHJpYnV0ZSgnb3BlbicsICcnKTsKCQkJCWVsc2UgZC5yZW1vdmVBdHRyaWJ1dGUoJ29wZW4nKTsKCQkJfSk7CgkJfQoJPC9zY3JpcHQ+CgoKPC9ib2R5Pgo8L2h0bWw+Cg==" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflow98hk5[1] Phase: Succeeded StartedAt: 2026-09-15 13:07:56 +0000 UTC FinishedAt: 2026-09-15 13:07:56 +0000 UTC Input: nil Output: nil --------- Name: series-workflow98hk5[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-09-15 13:07:56 +0000 UTC FinishedAt: 2026-09-15 13:07:56 +0000 UTC Input: nil Output: nil --------- Name: series-workflow98hk5[2] Phase: Succeeded StartedAt: 2026-09-15 13:07:56 +0000 UTC FinishedAt: 2026-09-15 16:58:17 +0000 UTC Input: nil Output: nil --------- Name: series-workflow98hk5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"eece25a11d34ba79b89c88b830e285a616286bce","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","DEBUG_FS"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"base_commit":"eece25a11d34ba79b89c88b830e285a616286bce","base_tree":"mm-new","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["run_aging","lru_gen_seq_write","run_cmd"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"eece25a11d34ba79b89c88b830e285a616286bce","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","DEBUG_FS"],"series_id":"02e604a7-1f28-4daf-ac41-cc921fdf87bd","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-15 13:07:56 +0000 UTC FinishedAt: 2026-09-15 16:58:17 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"eece25a11d34ba79b89c88b830e285a616286bce","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","DEBUG_FS"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},"fuzz":{"base_commit":"eece25a11d34ba79b89c88b830e285a616286bce","base_tree":"mm-new","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["run_aging","lru_gen_seq_write","run_cmd"],"skip_cover_check":true},"patched":{"arch":"amd64","commit_hash":"eece25a11d34ba79b89c88b830e285a616286bce","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","DEBUG_FS"],"series_id":"02e604a7-1f28-4daf-ac41-cc921fdf87bd","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-workflow98hk5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"eece25a11d34ba79b89c88b830e285a616286bce","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","DEBUG_FS"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"base_commit":"eece25a11d34ba79b89c88b830e285a616286bce","base_tree":"mm-new","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["run_aging","lru_gen_seq_write","run_cmd"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"eece25a11d34ba79b89c88b830e285a616286bce","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","DEBUG_FS"],"series_id":"02e604a7-1f28-4daf-ac41-cc921fdf87bd","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-15 13:07:56 +0000 UTC FinishedAt: 2026-09-15 13:08:08 +0000 UTC Input: nil Output: nil --------- Name: series-workflow98hk5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"eece25a11d34ba79b89c88b830e285a616286bce","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","DEBUG_FS"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"base_commit":"eece25a11d34ba79b89c88b830e285a616286bce","base_tree":"mm-new","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["run_aging","lru_gen_seq_write","run_cmd"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"eece25a11d34ba79b89c88b830e285a616286bce","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","DEBUG_FS"],"series_id":"02e604a7-1f28-4daf-ac41-cc921fdf87bd","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-15 13:07:56 +0000 UTC FinishedAt: 2026-09-15 13:08:03 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"eece25a11d34ba79b89c88b830e285a616286bce","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","DEBUG_FS"],"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-workflow98hk5/series-workflow98hk5-convert-artifact-4162001884/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow98hk5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"eece25a11d34ba79b89c88b830e285a616286bce","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","DEBUG_FS"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"base_commit":"eece25a11d34ba79b89c88b830e285a616286bce","base_tree":"mm-new","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["run_aging","lru_gen_seq_write","run_cmd"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"eece25a11d34ba79b89c88b830e285a616286bce","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","DEBUG_FS"],"series_id":"02e604a7-1f28-4daf-ac41-cc921fdf87bd","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-15 13:08:08 +0000 UTC FinishedAt: 2026-09-15 13:24:06 +0000 UTC Input: nil Output: nil --------- Name: series-workflow98hk5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"eece25a11d34ba79b89c88b830e285a616286bce","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","DEBUG_FS"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"base_commit":"eece25a11d34ba79b89c88b830e285a616286bce","base_tree":"mm-new","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["run_aging","lru_gen_seq_write","run_cmd"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"eece25a11d34ba79b89c88b830e285a616286bce","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","DEBUG_FS"],"series_id":"02e604a7-1f28-4daf-ac41-cc921fdf87bd","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-15 13:08:08 +0000 UTC FinishedAt: 2026-09-15 13:24:06 +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:*8bc91983-efc8-410c-836d-292c5ad4a87f,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-workflow98hk5/series-workflow98hk5-convert-artifact-4162001884/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": "7ddb6564-d9b5-46ff-b50f-d25043af9b35", "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-workflow98hk5/series-workflow98hk5-build-action-1189433098/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow98hk5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"eece25a11d34ba79b89c88b830e285a616286bce","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","DEBUG_FS"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"base_commit":"eece25a11d34ba79b89c88b830e285a616286bce","base_tree":"mm-new","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["run_aging","lru_gen_seq_write","run_cmd"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"eece25a11d34ba79b89c88b830e285a616286bce","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","DEBUG_FS"],"series_id":"02e604a7-1f28-4daf-ac41-cc921fdf87bd","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-15 13:08:08 +0000 UTC FinishedAt: 2026-09-15 13:23:56 +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:*8bc91983-efc8-410c-836d-292c5ad4a87f,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-workflow98hk5/series-workflow98hk5-convert-artifact-4162001884/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": "7ddb6564-d9b5-46ff-b50f-d25043af9b35", "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-workflow98hk5/series-workflow98hk5-build-action-1189433098/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow98hk5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"eece25a11d34ba79b89c88b830e285a616286bce","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","DEBUG_FS"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"base_commit":"eece25a11d34ba79b89c88b830e285a616286bce","base_tree":"mm-new","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["run_aging","lru_gen_seq_write","run_cmd"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"eece25a11d34ba79b89c88b830e285a616286bce","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","DEBUG_FS"],"series_id":"02e604a7-1f28-4daf-ac41-cc921fdf87bd","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-15 13:24:06 +0000 UTC FinishedAt: 2026-09-15 13:24:06 +0000 UTC Input: nil Output: nil --------- Name: series-workflow98hk5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"eece25a11d34ba79b89c88b830e285a616286bce","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","DEBUG_FS"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"base_commit":"eece25a11d34ba79b89c88b830e285a616286bce","base_tree":"mm-new","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["run_aging","lru_gen_seq_write","run_cmd"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"eece25a11d34ba79b89c88b830e285a616286bce","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","DEBUG_FS"],"series_id":"02e604a7-1f28-4daf-ac41-cc921fdf87bd","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-15 13:24:06 +0000 UTC FinishedAt: 2026-09-15 13:24:06 +0000 UTC Input: nil Output: nil --------- Name: series-workflow98hk5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"eece25a11d34ba79b89c88b830e285a616286bce","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","DEBUG_FS"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"base_commit":"eece25a11d34ba79b89c88b830e285a616286bce","base_tree":"mm-new","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["run_aging","lru_gen_seq_write","run_cmd"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"eece25a11d34ba79b89c88b830e285a616286bce","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","DEBUG_FS"],"series_id":"02e604a7-1f28-4daf-ac41-cc921fdf87bd","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-15 13:24:06 +0000 UTC FinishedAt: 2026-09-15 13:24:17 +0000 UTC Input: nil Output: nil --------- Name: series-workflow98hk5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"eece25a11d34ba79b89c88b830e285a616286bce","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","DEBUG_FS"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"base_commit":"eece25a11d34ba79b89c88b830e285a616286bce","base_tree":"mm-new","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["run_aging","lru_gen_seq_write","run_cmd"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"eece25a11d34ba79b89c88b830e285a616286bce","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","DEBUG_FS"],"series_id":"02e604a7-1f28-4daf-ac41-cc921fdf87bd","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-15 13:24:06 +0000 UTC FinishedAt: 2026-09-15 13:24:11 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"eece25a11d34ba79b89c88b830e285a616286bce","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","DEBUG_FS"],"series_id":"02e604a7-1f28-4daf-ac41-cc921fdf87bd","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-workflow98hk5/series-workflow98hk5-convert-artifact-1779261979/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow98hk5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"eece25a11d34ba79b89c88b830e285a616286bce","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","DEBUG_FS"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"base_commit":"eece25a11d34ba79b89c88b830e285a616286bce","base_tree":"mm-new","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["run_aging","lru_gen_seq_write","run_cmd"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"eece25a11d34ba79b89c88b830e285a616286bce","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","DEBUG_FS"],"series_id":"02e604a7-1f28-4daf-ac41-cc921fdf87bd","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-15 13:24:17 +0000 UTC FinishedAt: 2026-09-15 13:26:25 +0000 UTC Input: nil Output: nil --------- Name: series-workflow98hk5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"eece25a11d34ba79b89c88b830e285a616286bce","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","DEBUG_FS"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"base_commit":"eece25a11d34ba79b89c88b830e285a616286bce","base_tree":"mm-new","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["run_aging","lru_gen_seq_write","run_cmd"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"eece25a11d34ba79b89c88b830e285a616286bce","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","DEBUG_FS"],"series_id":"02e604a7-1f28-4daf-ac41-cc921fdf87bd","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-15 13:24:17 +0000 UTC FinishedAt: 2026-09-15 13:26:15 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*7ddb6564-d9b5-46ff-b50f-d25043af9b35,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-workflow98hk5/series-workflow98hk5-build-action-1189433098/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-workflow98hk5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"eece25a11d34ba79b89c88b830e285a616286bce","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","DEBUG_FS"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"base_commit":"eece25a11d34ba79b89c88b830e285a616286bce","base_tree":"mm-new","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["run_aging","lru_gen_seq_write","run_cmd"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"eece25a11d34ba79b89c88b830e285a616286bce","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","DEBUG_FS"],"series_id":"02e604a7-1f28-4daf-ac41-cc921fdf87bd","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-15 13:26:25 +0000 UTC FinishedAt: 2026-09-15 13:26:25 +0000 UTC Input: nil Output: nil --------- Name: series-workflow98hk5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"eece25a11d34ba79b89c88b830e285a616286bce","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","DEBUG_FS"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"base_commit":"eece25a11d34ba79b89c88b830e285a616286bce","base_tree":"mm-new","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["run_aging","lru_gen_seq_write","run_cmd"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"eece25a11d34ba79b89c88b830e285a616286bce","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","DEBUG_FS"],"series_id":"02e604a7-1f28-4daf-ac41-cc921fdf87bd","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-15 13:26:25 +0000 UTC FinishedAt: 2026-09-15 13:26:25 +0000 UTC Input: nil Output: nil --------- Name: series-workflow98hk5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"eece25a11d34ba79b89c88b830e285a616286bce","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","DEBUG_FS"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"base_commit":"eece25a11d34ba79b89c88b830e285a616286bce","base_tree":"mm-new","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["run_aging","lru_gen_seq_write","run_cmd"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"eece25a11d34ba79b89c88b830e285a616286bce","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","DEBUG_FS"],"series_id":"02e604a7-1f28-4daf-ac41-cc921fdf87bd","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-15 13:26:25 +0000 UTC FinishedAt: 2026-09-15 13:43:34 +0000 UTC Input: nil Output: nil --------- Name: series-workflow98hk5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"eece25a11d34ba79b89c88b830e285a616286bce","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","DEBUG_FS"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"base_commit":"eece25a11d34ba79b89c88b830e285a616286bce","base_tree":"mm-new","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["run_aging","lru_gen_seq_write","run_cmd"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"eece25a11d34ba79b89c88b830e285a616286bce","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","DEBUG_FS"],"series_id":"02e604a7-1f28-4daf-ac41-cc921fdf87bd","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-15 13:26:25 +0000 UTC FinishedAt: 2026-09-15 13:43:34 +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:*8bc91983-efc8-410c-836d-292c5ad4a87f,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-workflow98hk5/series-workflow98hk5-convert-artifact-1779261979/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": "231b9825-a0fb-4576-99c4-78ed2c57774a", "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-workflow98hk5/series-workflow98hk5-build-action-3428634047/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow98hk5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"eece25a11d34ba79b89c88b830e285a616286bce","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","DEBUG_FS"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"base_commit":"eece25a11d34ba79b89c88b830e285a616286bce","base_tree":"mm-new","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["run_aging","lru_gen_seq_write","run_cmd"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"eece25a11d34ba79b89c88b830e285a616286bce","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","DEBUG_FS"],"series_id":"02e604a7-1f28-4daf-ac41-cc921fdf87bd","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-15 13:26:25 +0000 UTC FinishedAt: 2026-09-15 13:43:24 +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:*8bc91983-efc8-410c-836d-292c5ad4a87f,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-workflow98hk5/series-workflow98hk5-convert-artifact-1779261979/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": "231b9825-a0fb-4576-99c4-78ed2c57774a", "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-workflow98hk5/series-workflow98hk5-build-action-3428634047/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow98hk5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"eece25a11d34ba79b89c88b830e285a616286bce","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","DEBUG_FS"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"base_commit":"eece25a11d34ba79b89c88b830e285a616286bce","base_tree":"mm-new","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["run_aging","lru_gen_seq_write","run_cmd"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"eece25a11d34ba79b89c88b830e285a616286bce","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","DEBUG_FS"],"series_id":"02e604a7-1f28-4daf-ac41-cc921fdf87bd","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-15 13:43:34 +0000 UTC FinishedAt: 2026-09-15 13:43:34 +0000 UTC Input: nil Output: nil --------- Name: series-workflow98hk5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"eece25a11d34ba79b89c88b830e285a616286bce","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","DEBUG_FS"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"base_commit":"eece25a11d34ba79b89c88b830e285a616286bce","base_tree":"mm-new","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["run_aging","lru_gen_seq_write","run_cmd"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"eece25a11d34ba79b89c88b830e285a616286bce","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","DEBUG_FS"],"series_id":"02e604a7-1f28-4daf-ac41-cc921fdf87bd","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-15 13:43:34 +0000 UTC FinishedAt: 2026-09-15 13:43:34 +0000 UTC Input: nil Output: nil --------- Name: series-workflow98hk5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"eece25a11d34ba79b89c88b830e285a616286bce","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","DEBUG_FS"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"base_commit":"eece25a11d34ba79b89c88b830e285a616286bce","base_tree":"mm-new","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["run_aging","lru_gen_seq_write","run_cmd"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"eece25a11d34ba79b89c88b830e285a616286bce","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","DEBUG_FS"],"series_id":"02e604a7-1f28-4daf-ac41-cc921fdf87bd","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-15 13:43:34 +0000 UTC FinishedAt: 2026-09-15 13:45:28 +0000 UTC Input: nil Output: nil --------- Name: series-workflow98hk5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"eece25a11d34ba79b89c88b830e285a616286bce","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","DEBUG_FS"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"base_commit":"eece25a11d34ba79b89c88b830e285a616286bce","base_tree":"mm-new","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["run_aging","lru_gen_seq_write","run_cmd"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"eece25a11d34ba79b89c88b830e285a616286bce","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","DEBUG_FS"],"series_id":"02e604a7-1f28-4daf-ac41-cc921fdf87bd","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-15 13:43:34 +0000 UTC FinishedAt: 2026-09-15 13:45:18 +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:*231b9825-a0fb-4576-99c4-78ed2c57774a,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-workflow98hk5/series-workflow98hk5-build-action-3428634047/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-workflow98hk5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"eece25a11d34ba79b89c88b830e285a616286bce","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","DEBUG_FS"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"base_commit":"eece25a11d34ba79b89c88b830e285a616286bce","base_tree":"mm-new","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["run_aging","lru_gen_seq_write","run_cmd"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"eece25a11d34ba79b89c88b830e285a616286bce","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","DEBUG_FS"],"series_id":"02e604a7-1f28-4daf-ac41-cc921fdf87bd","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-15 13:45:28 +0000 UTC FinishedAt: 2026-09-15 16:58:17 +0000 UTC Input: nil Output: nil --------- Name: series-workflow98hk5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"eece25a11d34ba79b89c88b830e285a616286bce","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","DEBUG_FS"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"base_commit":"eece25a11d34ba79b89c88b830e285a616286bce","base_tree":"mm-new","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["run_aging","lru_gen_seq_write","run_cmd"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"eece25a11d34ba79b89c88b830e285a616286bce","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","DEBUG_FS"],"series_id":"02e604a7-1f28-4daf-ac41-cc921fdf87bd","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-15 13:45:28 +0000 UTC FinishedAt: 2026-09-15 16:58:17 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:config,Default:nil,Value:*{"base_commit":"eece25a11d34ba79b89c88b830e285a616286bce","base_tree":"mm-new","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["run_aging","lru_gen_seq_write","run_cmd"],"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:*7ddb6564-d9b5-46ff-b50f-d25043af9b35,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*231b9825-a0fb-4576-99c4-78ed2c57774a,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-workflow98hk5/series-workflow98hk5-build-action-1189433098/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-workflow98hk5/series-workflow98hk5-build-action-3428634047/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflow98hk5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"eece25a11d34ba79b89c88b830e285a616286bce","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","DEBUG_FS"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"base_commit":"eece25a11d34ba79b89c88b830e285a616286bce","base_tree":"mm-new","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["run_aging","lru_gen_seq_write","run_cmd"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"eece25a11d34ba79b89c88b830e285a616286bce","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","DEBUG_FS"],"series_id":"02e604a7-1f28-4daf-ac41-cc921fdf87bd","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-15 13:45:28 +0000 UTC FinishedAt: 2026-09-15 13:45:49 +0000 UTC Input: nil Output: nil --------- Name: series-workflow98hk5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"eece25a11d34ba79b89c88b830e285a616286bce","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","DEBUG_FS"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"base_commit":"eece25a11d34ba79b89c88b830e285a616286bce","base_tree":"mm-new","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["run_aging","lru_gen_seq_write","run_cmd"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"eece25a11d34ba79b89c88b830e285a616286bce","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","DEBUG_FS"],"series_id":"02e604a7-1f28-4daf-ac41-cc921fdf87bd","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-15 13:45:28 +0000 UTC FinishedAt: 2026-09-15 13:45:39 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"base_commit":"eece25a11d34ba79b89c88b830e285a616286bce","base_tree":"mm-new","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["run_aging","lru_gen_seq_write","run_cmd"],"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-workflow98hk5/series-workflow98hk5-convert-artifact-971334676/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow98hk5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"eece25a11d34ba79b89c88b830e285a616286bce","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","DEBUG_FS"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"base_commit":"eece25a11d34ba79b89c88b830e285a616286bce","base_tree":"mm-new","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["run_aging","lru_gen_seq_write","run_cmd"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"eece25a11d34ba79b89c88b830e285a616286bce","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","DEBUG_FS"],"series_id":"02e604a7-1f28-4daf-ac41-cc921fdf87bd","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-15 13:45:28 +0000 UTC FinishedAt: 2026-09-15 13:45:28 +0000 UTC Input: nil Output: nil --------- Name: series-workflow98hk5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"eece25a11d34ba79b89c88b830e285a616286bce","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","DEBUG_FS"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"base_commit":"eece25a11d34ba79b89c88b830e285a616286bce","base_tree":"mm-new","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["run_aging","lru_gen_seq_write","run_cmd"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"eece25a11d34ba79b89c88b830e285a616286bce","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","DEBUG_FS"],"series_id":"02e604a7-1f28-4daf-ac41-cc921fdf87bd","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-15 13:45:28 +0000 UTC FinishedAt: 2026-09-15 13:45:28 +0000 UTC Input: nil Output: nil --------- Name: series-workflow98hk5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"eece25a11d34ba79b89c88b830e285a616286bce","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","DEBUG_FS"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"base_commit":"eece25a11d34ba79b89c88b830e285a616286bce","base_tree":"mm-new","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["run_aging","lru_gen_seq_write","run_cmd"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"eece25a11d34ba79b89c88b830e285a616286bce","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","DEBUG_FS"],"series_id":"02e604a7-1f28-4daf-ac41-cc921fdf87bd","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-15 13:45:28 +0000 UTC FinishedAt: 2026-09-15 13:45:28 +0000 UTC Input: nil Output: nil --------- Name: series-workflow98hk5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"eece25a11d34ba79b89c88b830e285a616286bce","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","DEBUG_FS"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"base_commit":"eece25a11d34ba79b89c88b830e285a616286bce","base_tree":"mm-new","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["run_aging","lru_gen_seq_write","run_cmd"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"eece25a11d34ba79b89c88b830e285a616286bce","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","DEBUG_FS"],"series_id":"02e604a7-1f28-4daf-ac41-cc921fdf87bd","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-15 13:45:49 +0000 UTC FinishedAt: 2026-09-15 16:58:17 +0000 UTC Input: nil Output: nil --------- Name: series-workflow98hk5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"eece25a11d34ba79b89c88b830e285a616286bce","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","DEBUG_FS"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"base_commit":"eece25a11d34ba79b89c88b830e285a616286bce","base_tree":"mm-new","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["run_aging","lru_gen_seq_write","run_cmd"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"eece25a11d34ba79b89c88b830e285a616286bce","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","DEBUG_FS"],"series_id":"02e604a7-1f28-4daf-ac41-cc921fdf87bd","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-15 13:45:49 +0000 UTC FinishedAt: 2026-09-15 16:58:07 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*7ddb6564-d9b5-46ff-b50f-d25043af9b35,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*231b9825-a0fb-4576-99c4-78ed2c57774a,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-workflow98hk5/series-workflow98hk5-build-action-1189433098/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-workflow98hk5/series-workflow98hk5-build-action-3428634047/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-workflow98hk5/series-workflow98hk5-convert-artifact-971334676/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,}