Name: series-workflowhtgb8 Phase: Succeeded StartedAt: 2026-09-05 00:17:54 +0000 UTC FinishedAt: 2026-09-05 04:58:23 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhtgb8[0] Phase: Succeeded StartedAt: 2026-09-05 00:17:54 +0000 UTC FinishedAt: 2026-09-05 01:04:56 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhtgb8[0].run-triage Phase: Succeeded StartedAt: 2026-09-05 00:17:54 +0000 UTC FinishedAt: 2026-09-05 01:04:56 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "net-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git", "commit_hash": "761ae184f850f33d1bbf6c4530c7f237be780d21", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "CFG80211" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "net-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git", "commit_hash": "761ae184f850f33d1bbf6c4530c7f237be780d21", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "CFG80211" ], "series_id": "a6415cc5-2d2a-4e6e-8f3c-f90a5a6fc0ca" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "reg_check_chans_work", "reg_check_channels", "reg_leave_invalid_chans" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA1IDAxOjAzPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0NGRzgwMjExJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7cmVnX2NoZWNrX2NoYW5zX3dvcmsmIzM0OywKICAgICYjMzQ7cmVnX2NoZWNrX2NoYW5uZWxzJiMzNDssCiAgICAmIzM0O3JlZ19sZWF2ZV9pbnZhbGlkX2NoYW5zJiMzNDsKICBdLAogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGxvY2tpbmcgYW5kIFJDVSBsaXN0IHRyYXZlcnNhbCBzdHJhdGVneSBpbiByZWdfY2hlY2tfY2hhbnNfd29yaygpIChuZXQvd2lyZWxlc3MvcmVnLmMpIGJ5IGRyb3BwaW5nIGFuZCByZS1hY3F1aXJpbmcgcmN1X3JlYWRfbG9jaygpIGFuZCBydG5sX2xvY2soKSBhcm91bmQgZWFjaCBpdGVyYXRpb24gb2YgY2ZnODAyMTFfcmRldl9saXN0LlxuXG5UaGlzIGNoYW5nZSBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IG1lbW9yeSBhbGxvY2F0aW9ucywgZG9lcyBub3QgcmVhZCBvciB3cml0ZSB1bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgZmllbGRzLCBkb2VzIG5vdCBhbHRlciBidWZmZXIgbGVuZ3RoL2JvdW5kcyBjYWxjdWxhdGlvbnMsIGFuZCBkb2VzIG5vdCBwYXNzIGtlcm5lbCBkYXRhIHRvIHVzZXJzcGFjZS4gQW55IGNvbmN1cnJlbmN5LCB1c2UtYWZ0ZXItZnJlZSwgb3IgbGlzdCBjb3JydXB0aW9uIGlzc3VlcyBzdGVtbWluZyBmcm9tIGRyb3BwaW5nIFJDVSBkdXJpbmcgbGlzdCB0cmF2ZXJzYWwgYXJlIGRldGVjdGFibGUgYnkgc3RhbmRhcmQgZGVidWdnaW5nIHRvb2xzIChLQVNBTiwgTE9DS0RFUCwgYW5kIENPTkZJR19QUk9WRV9SQ1UpLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3Qgd2FycmFudGVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBjaGFuZ2VzIGxvY2tpbmcgYW5kIFJDVSBpdGVyYXRpb24gaW4gcmVnX2NoZWNrX2NoYW5zX3dvcmsoKSB3aXRoaW4gY2ZnODAyMTEgKG5ldC93aXJlbGVzcy9yZWcuYyksIHJlbGVhc2luZyBhbmQgcmUtYWNxdWlyaW5nIHJjdV9yZWFkX2xvY2sgYW5kIHJ0bmxfbG9jayBpbnNpZGUgbGlzdF9mb3JfZWFjaF9lbnRyeV9yY3UuIFRoaXMgcmVhY2hhYmxlIGNvZGUgcGF0aCBoYW5kbGVzIHJlZ3VsYXRvcnkgZG9tYWluIGNoYW5uZWwgdmFsaWRhdGlvbiBhbmQgaW50ZXJmYWNlIGRpc2Nvbm5lY3Rpb24sIHdoaWNoIGNhbiBiZSB0cmlnZ2VyZWQgdmlhIG5sODAyMTEgcmVndWxhdG9yeSBjb21tYW5kcy4gRnV6emluZyBpcyB3YXJyYW50ZWQgdG8gdGVzdCBmb3IgY29uY3VycmVuY3kgYnVncywgbGlzdCB0cmF2ZXJzYWwgaXNzdWVzLCBhbmQgUkNVL2xvY2tkZXAgd2FybmluZ3MuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDUgMDE6MDM8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCA5MDliYWU2M2U0Y2I4ZGJiOGMyYWVhMTAzZWRkZDBjYWJhOWFkYzc1XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFNhdCBTZXAgNSAwMTowMzo0NyAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9uZXQvd2lyZWxlc3MvcmVnLmMgYi9uZXQvd2lyZWxlc3MvcmVnLmNcbmluZGV4IGE4MzM2YmFmODVkYzYuLmEyZTBkMWNmODMxN2MgMTAwNjQ0XG4tLS0gYS9uZXQvd2lyZWxlc3MvcmVnLmNcbiYjNDM7JiM0MzsmIzQzOyBiL25ldC93aXJlbGVzcy9yZWcuY1xuQEAgLTI0NjYsMTIgJiM0MzsyNDY2LDIxIEBAIHN0YXRpYyB2b2lkIHJlZ19jaGVja19jaGFuc193b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcbiBcdHN0cnVjdCBjZmc4MDIxMV9yZWdpc3RlcmVkX2RldmljZSAqcmRldjtcbiBcbiBcdHByX2RlYnVnKFwmIzM0O1ZlcmlmeWluZyBhY3RpdmUgaW50ZXJmYWNlcyBhZnRlciByZWcgY2hhbmdlXFxuXCYjMzQ7KTtcbi1cdHJ0bmxfbG9jaygpO1xuLVxuLVx0Zm9yX2VhY2hfcmRldihyZGV2KVxuJiM0MztcdC8qXG4mIzQzO1x0ICogQWNxdWlyZSBydG5sIHBlci1kZXZpY2UgaW5zdGVhZCBvZiBob2xkaW5nIGl0IGZvciB0aGUgZW50aXJlIGxvb3A7XG4mIzQzO1x0ICogY2ZnODAyMTFfbGVhdmUoKSBjYW4gYmUgc2xvdyBhbmQgc3RhcnZlIG90aGVyIHJ0bmwgd2FpdGVycyBvdGhlcndpc2UuXG4mIzQzO1x0ICogd2lwaHlfdW5yZWdpc3RlcigpIGhvbGRzIHJ0bmwgYWNyb3NzIGxpc3RfZGVsX3JjdSgpICYjNDM7IHN5bmNocm9uaXplX3JjdSgpLFxuJiM0MztcdCAqIHNvIHJkZXYgY2Fubm90IGJlIGZyZWVkIHdoaWxlIHdlIGhvbGQgcnRubF9sb2NrKCkgYmVsb3cuXG4mIzQzO1x0ICovXG4mIzQzO1x0cmN1X3JlYWRfbG9jaygpO1xuJiM0MztcdGxpc3RfZm9yX2VhY2hfZW50cnlfcmN1KHJkZXYsIFx1MDAyNmNmZzgwMjExX3JkZXZfbGlzdCwgbGlzdCkge1xuJiM0MztcdFx0cmN1X3JlYWRfdW5sb2NrKCk7XG4mIzQzO1x0XHRydG5sX2xvY2soKTtcbiBcdFx0cmVnX2xlYXZlX2ludmFsaWRfY2hhbnMoXHUwMDI2cmRldi1cdTAwM2V3aXBoeSk7XG4tXG4tXHRydG5sX3VubG9jaygpO1xuJiM0MztcdFx0cnRubF91bmxvY2soKTtcbiYjNDM7XHRcdHJjdV9yZWFkX2xvY2soKTtcbiYjNDM7XHR9XG4mIzQzO1x0cmN1X3JlYWRfdW5sb2NrKCk7XG4gfVxuIFxuIHZvaWQgcmVnX2NoZWNrX2NoYW5uZWxzKHZvaWQpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDUgMDE6MDM8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Y29yZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7Q0ZHODAyMTEmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtyZWdfY2hlY2tfY2hhbnNfd29yayYjMzQ7LAogICAgJiMzNDtyZWdfY2hlY2tfY2hhbm5lbHMmIzM0OywKICAgICYjMzQ7cmVnX2xlYXZlX2ludmFsaWRfY2hhbnMmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggY2hhbmdlcyBsb2NraW5nIGFuZCBSQ1UgaXRlcmF0aW9uIGluIHJlZ19jaGVja19jaGFuc193b3JrKCkgd2l0aGluIGNmZzgwMjExIChuZXQvd2lyZWxlc3MvcmVnLmMpLCByZWxlYXNpbmcgYW5kIHJlLWFjcXVpcmluZyByY3VfcmVhZF9sb2NrIGFuZCBydG5sX2xvY2sgaW5zaWRlIGxpc3RfZm9yX2VhY2hfZW50cnlfcmN1LiBUaGlzIHJlYWNoYWJsZSBjb2RlIHBhdGggaGFuZGxlcyByZWd1bGF0b3J5IGRvbWFpbiBjaGFubmVsIHZhbGlkYXRpb24gYW5kIGludGVyZmFjZSBkaXNjb25uZWN0aW9uLCB3aGljaCBjYW4gYmUgdHJpZ2dlcmVkIHZpYSBubDgwMjExIHJlZ3VsYXRvcnkgY29tbWFuZHMuIEZ1enppbmcgaXMgd2FycmFudGVkIHRvIHRlc3QgZm9yIGNvbmN1cnJlbmN5IGJ1Z3MsIGxpc3QgdHJhdmVyc2FsIGlzc3VlcywgYW5kIFJDVS9sb2NrZGVwIHdhcm5pbmdzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lciBhbmQgc2VjdXJpdHkgZW5naW5lZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZXZhbHVhdGUgd2hldGhlciBpdCB3YXJyYW50cyBmdXp6aW5nIHdpdGggc3l6a2FsbGVyLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiBpbnRlcm5hbCBhc3N1bXB0aW9ucy4gWW91IG11c3QgYWN0aXZlbHkgdXNlIHlvdXIgY29kZSBhY2Nlc3MKdG9vbHMgdG8gaW5zcGVjdCB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlLCBjYWxsZXJzLCBhbmQgc3Vycm91bmRpbmcgY29udGV4dC4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjEuIENPUkUgVFJJQUdFIFBISUxPU09QSFkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KVGhlIGdvYWwgb2YgcGF0Y2ggZnV6emluZyBpcyB0byBkaXNjb3ZlciBjcmFzaGVzLCByZWdyZXNzaW9ucywgZXhwb3NlZCBsYXRlbnQgYnVncywKYW5kIG5ld2x5IHRyaWdnZXJlZCBhc3NlcnRpb25zIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIHNlcmllcy4KCi0gUkVBQ0hBQklMSVRZIElTIFRIRSBQUklNQVJZIEdBVEU6CiAgRnV6emluZyBjYW4gb25seSBkaXNjb3ZlciBidWdzIGluIGNvZGUgdGhhdCBjYW4gYWN0dWFsbHkgZXhlY3V0ZSBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZAogIGVudmlyb25tZW50cyAoR0NFIG9yIFFFTVUsIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBkZXZpY2VzIGxpa2UgVVNCIGdhZGdldHMsIG5ldGRldiwgdHVuL3RhcCkuCiAgSWYgdGhlIG1vZGlmaWVkIGNvZGUgaXMgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIChzZWUgU2VjdGlvbiAyKSwgaXQgTVVTVCBOT1QgYmUgZnV6emVkLAogIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciBpdCBhZGRzIGFzc2VydGlvbnMgb3IgY29tcGxleCBsb2dpYy4KCi0gRE8gTk9UIEJMSU5ETFkgVFJVU1QgJiMzNDtOTyBGVU5DVElPTkFMIENIQU5HRSYjMzQ7IChORkNJKSBPUiAmIzM0O1JFRkFDVE9SSU5HJiMzNDsgQ0xBSU1TOgogIFBhdGNoIGF1dGhvcnMgcm91dGluZWx5IGxhYmVsIGNoYW5nZXMgYXMgJiMzNDtjbGVhbnVwcyYjMzQ7LCAmIzM0O3JlZmFjdG9yaW5ncyYjMzQ7LCBvciBzdGF0ZQogICYjMzQ7Tm8gZnVuY3Rpb25hbCBjaGFuZ2UgaW50ZW5kZWQmIzM0Oy4gRG8gTk9UIHRha2UgdGhlc2UgY2xhaW1zIGF0IGZhY2UgdmFsdWUuCiAgQ29kZSByZWZhY3RvcmluZ3MgdGhhdCByZWFycmFuZ2UgbG9naWMsIGludHJvZHVjZSBoZWxwZXIgZnVuY3Rpb25zLCBvciBhbHRlciBzdGF0ZSBtYW5hZ2VtZW50CiAgaW4gY29yZSBzdWJzeXN0ZW1zIGZyZXF1ZW50bHkgaW50cm9kdWNlIHN1YnRsZSBzZW1hbnRpYyBzaGlmdHMgb3IgdW5jb3ZlciBsYXRlbnQga2VybmVsIGJ1Z3MuCiAgSWYgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSBpcyBtb2RpZmllZCBvciByZWZhY3RvcmVkLCBpdCBNVVNUIGJlIGZ1enplZC4KCi0gTkVXIE9SIE1PRElGSUVEIEFTU0VSVElPTlMgSU4gUkVBQ0hBQkxFIENPREUgTVVTVCBCRSBGVVpaRUQ6CiAgV2hlbiBhIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXMgcnVudGltZSBjaGVja3Mgb3IgYXNzZXJ0aW9ucyAoZS5nLiwgV0FSTl9PTiosIFZNX1dBUk5fT04qLAogIEJVR19PTiosIGxvY2tkZXBfYXNzZXJ0KikgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMsIGl0IGVuZm9yY2VzIG5ldyBvciBzdHJpY3RlciBpbnZhcmlhbnRzLgogIEV2ZW4gaWYgdGhlIGF1dGhvciBiZWxpZXZlcyB0aGUgaW52YXJpYW50IGFsd2F5cyBob2xkcywgZnV6emluZyBpcyBlc3NlbnRpYWwgdG8gdmVyaWZ5IHdoZXRoZXIKICBhbiB1bnVzdWFsIHNlcXVlbmNlIG9mIG9wZXJhdGlvbnMgY2FuIHZpb2xhdGUgaXQuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoyLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9ZmFsc2UgKE5FR0FUSVZFIENSSVRFUklBKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIE9OTFkgSUYgYWxsIG1vZGlmaWVkIGNvZGUgZmFsbHMgc3RyaWN0bHkgaW50byBvbmUgb3IgbW9yZSBvZiB0aGVzZSBjYXRlZ29yaWVzOgoKLSBOb24ta2VybmVsIGFuZCBub24tZXhlY3V0YWJsZSBjaGFuZ2VzOgogICogTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgY29tbWVudHMsIG9yIHNwZWxsaW5nIGZpeGVzLgogICogVXNlci1zcGFjZSBkaXJlY3Rvcmllcywgc2VsZi10ZXN0cywgc2FtcGxlcywgb3Igc2NyaXB0cyAoZS5nLiwgdG9vbHMvLCBzYW1wbGVzLywgc2NyaXB0cy8sIHVzci8pCiAgICB0aGF0IGRvIG5vdCBhZmZlY3QgdGhlIGNvbXBpbGVkIGtlcm5lbCBpbWFnZSAodm1saW51eCkgb3Iga2VybmVsIG1vZHVsZXMuCiAgKiBQdXJlbHkgZGVjb3JhdGl2ZSBsb2dnaW5nIChlLmcuLCBtZXNzYWdlIHN0cmluZ3MgaW4gcHJfZXJyLCBwcmludGssIGRldl9pbmZvKSBvciB0cmFjZXBvaW50cwogICAgdGhhdCBkbyBub3QgYWx0ZXIgY29udHJvbCBmbG93IG9yIGRhdGEgc3RydWN0dXJlcy4KICAqIEJ1aWxkIHN5c3RlbSBvciBLY29uZmlnIGNoYW5nZXMgdGhhdCBkbyBub3QgYWx0ZXIgY29tcGlsZWQgQyBsb2dpYy4KLSBTdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgaGFyZHdhcmU6CiAgKiBWZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2hlcywgU21hcnROSUNzLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgICBpb25pYywgYW1kZ3B1KSByZXF1aXJpbmcgcGh5c2ljYWwgQVNJQy9QQ0llIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIFVucmVhY2hhYmxlIGV4ZWN1dGlvbiBwYXRoczoKICAqIERyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKC5yZW1vdmUsIC5zaHV0ZG93biwgcGNpX3VucmVnaXN0ZXJfZHJpdmVyKSBleGVjdXRlZCBvbmx5IGR1cmluZwogICAgcGh5c2ljYWwgUENJIGhvdC11bnBsdWcgb3IgbWFudWFsIHN5c2ZzIGRyaXZlciB1bmJpbmRpbmcuCiAgKiBDb2RlIHBhdGhzIGV4Y2x1c2l2ZSB0byBhcmNoaXRlY3R1cmVzIG90aGVyIHRoYW4gdGhlIHRhcmdldCBhcmNoaXRlY3R1cmUuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQozLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9dHJ1ZSAoUE9TSVRJVkUgQ1JJVEVSSUEpCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZSB3aGVuZXZlciB0aGUgcGF0Y2ggdG91Y2hlcyByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlLCBpbmNsdWRpbmc6Ci0gQ29yZSBTdWJzeXN0ZW1zOgogICogQW55IGxvZ2ljIG1vZGlmaWNhdGlvbnMgaW4gbWVtb3J5IG1hbmFnZW1lbnQgKG1tLyksIHN5bmNocm9uaXphdGlvbi9sb2NraW5nIChrZXJuZWwvbG9ja2luZy8pLAogICAgQlBGLCBzY2hlZHVsZXIsIGNvcmUgbmV0d29ya2luZywgVkZTLCBvciBzeXNjYWxsIGhhbmRsaW5nLgotIFJlZmFjdG9yaW5ncyBhbmQgQ29kZSBDbGVhbnVwczoKICAqIEFueSByZXN0cnVjdHVyaW5nIG9mIHJlYWNoYWJsZSBkYXRhIHN0cnVjdHVyZXMsIGhlbHBlciBhYnN0cmFjdGlvbnMsIG9yIGFsZ29yaXRobSBmbG93cy4KLSBSdW50aW1lIEFzc2VydGlvbnMgYW5kIERlZmVuc2l2ZSBDaGVja3M6CiAgKiBBbnkgaW50cm9kdWN0aW9uIG9yIGFsdGVyYXRpb24gb2YgYXNzZXJ0aW9ucyAoV0FSTl9PTiosIFZNX1dBUk5fT04qLCBCVUdfT04qLCBldGMuKSBpbiByZWFjaGFibGUgcGF0aHMuCi0gUmVhY2hhYmxlIERyaXZlcnMgYW5kIFByb3RvY29sczoKICAqIERyaXZlcnMgYWNjZXNzaWJsZSB2aWEgdmlydHVhbCBidXNlcyAodmlydGlvLCBVU0IgZ2FkZ2V0LCBsb29wYmFjaywgbmV0bGluaywgYmluZGVyLCBzb2NrZXRzLCBldGMuKS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjQuIEVYVFJBQ1RJTkcgRm9jdXNTeW1ib2xzIChQUkVWRU5USU5HIERJTFVUSU9OKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpXaGVuIFdvcnRoRnV6emluZz10cnVlLCB5b3UgbXVzdCBleHRyYWN0IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgaW50byBGb2N1c1N5bWJvbHMgdG8gZ3VpZGUgdGhlIGZ1enplcjoKCi0gQVZPSUQgVUJJUVVJVE9VUyBMSUZFQ1lDTEUgSE9ULVBBVEhTOgogIERvIE5PVCBsaXN0IGdlbmVyaWMsIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhbGxlZCBieSBhbG1vc3QgZXZlcnkgcHJvZ3JhbSBpbiB0aGUgY29ycHVzCiAgKGluY2x1ZGluZywgYnV0IG5vdCBsaW1pdGVkIHRvOiBnZW5lcmFsIG1lbW9yeSBhbGxvY2F0b3JzIGFuZCBkZWFsbG9jYXRvcnMsIHBhZ2UgZmF1bHQKICBhbmQgdHJhcCBoYW5kbGVycywgb3IgY29yZSBzeW5jaHJvbml6YXRpb24gcHJpbWl0aXZlczsgdGhpcyBpcyBub3QgYW4gZXhoYXVzdGl2ZSBsaXN0KS4KICBMaXN0aW5nIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhdXNlcyB0aGUgZnV6emVyIHRvIGNsYXNzaWZ5IHRob3VzYW5kcyBvZiB1bnJlbGF0ZWQgdGVzdHMgYXMgJiMzNDtmb2N1c2VkJiMzNDssCiAgd2hpY2ggc2V2ZXJlbHkgZGlsdXRlcyBmdXp6aW5nIGVmZm9ydCBhd2F5IGZyb20gdGhlIGFjdHVhbCBjaGFuZ2VzLgoKLSBUQVJHRVQgU1BFQ0lGSUMgRkVBVFVSRSBMT0dJQyBBTkQgRU5UUllQT0lOVFM6CiAgTGlzdCBmdW5jdGlvbnMgdGhhdCBzcGVjaWZpY2FsbHkgaW1wbGVtZW50IHRoZSBsb2dpYyBiZWluZyBhZGRlZCBvciBhbHRlcmVkLCBvciBkaXJlY3QgQVBJIGVudHJ5cG9pbnRzCiAgZm9yIHRoZSBzdWJzeXN0ZW0gZmVhdHVyZSB1bmRlciByZXZpZXcuCgotIEhBTkRMSU5HIFNUQVRJQyBJTkxJTkUgRlVOQ1RJT05TIElOIEhFQURFUlMgKC5oKToKICBDb21waWxlci1pbmxpbmVkIHN0YXRpYyBmdW5jdGlvbnMgKHN1Y2ggYXMgc3RhdGljIGlubGluZXMgaW4gbW0vKi5oIG9yIGluY2x1ZGUvbGludXgvKi5oKSBsYWNrCiAgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcyBpbiB2bWxpbnV4IGFuZCBjYW5ub3QgYmUgdGFyZ2V0ZWQgZGlyZWN0bHkgYnkgc3ltYm9sIGNvdmVyYWdlIGZpbHRlcnMuCiAgSWYgdGhlIGNoYW5nZXMgYXJlIHByaW1hcmlseSBpbiBzdGF0aWMgaW5saW5lIGhlbHBlcnMsIGlkZW50aWZ5IG5vbi1zdGF0aWMsIGZlYXR1cmUtc3BlY2lmaWMgY2FsbGVyCiAgZnVuY3Rpb25zIGluIC5jIGZpbGVzIHRoYXQgZXhlcmNpc2UgdGhlbSAoYXZvaWRpbmcgdWJpcXVpdG91cyBsaWZlY3ljbGUgd3JhcHBlcnMpLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KNS4gSURFTlRJRllJTkcgRW5hYmxlQ29uZmlncwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IGNvbXBpbGUgYW5kIHJlYWNoIHRoZSBtb2RpZmllZCBjb2RlOgotIEluc3BlY3QgS2NvbmZpZyBmaWxlcyBhbmQgI2lmZGVmIGd1YXJkczsgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCi0gQ2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzIG5lZWRlZC4KLSBTdHJpcCBhbnkgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+VGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjQKCkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgOTA5YmFlNjNlNGNiOGRiYjhjMmFlYTEwM2VkZGQwY2FiYTlhZGM3NQpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBTYXQgU2VwIDUgMDE6MDM6NDcgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9uZXQvd2lyZWxlc3MvcmVnLmMgYi9uZXQvd2lyZWxlc3MvcmVnLmMKaW5kZXggYTgzMzZiYWY4NWRjNi4uYTJlMGQxY2Y4MzE3YyAxMDA2NDQKLS0tIGEvbmV0L3dpcmVsZXNzL3JlZy5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC93aXJlbGVzcy9yZWcuYwpAQCAtMjQ2NiwxMiAmIzQzOzI0NjYsMjEgQEAgc3RhdGljIHZvaWQgcmVnX2NoZWNrX2NoYW5zX3dvcmsoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKQogCXN0cnVjdCBjZmc4MDIxMV9yZWdpc3RlcmVkX2RldmljZSAqcmRldjsKIAogCXByX2RlYnVnKCYjMzQ7VmVyaWZ5aW5nIGFjdGl2ZSBpbnRlcmZhY2VzIGFmdGVyIHJlZyBjaGFuZ2VcbiYjMzQ7KTsKLQlydG5sX2xvY2soKTsKLQotCWZvcl9lYWNoX3JkZXYocmRldikKJiM0MzsJLyoKJiM0MzsJICogQWNxdWlyZSBydG5sIHBlci1kZXZpY2UgaW5zdGVhZCBvZiBob2xkaW5nIGl0IGZvciB0aGUgZW50aXJlIGxvb3A7CiYjNDM7CSAqIGNmZzgwMjExX2xlYXZlKCkgY2FuIGJlIHNsb3cgYW5kIHN0YXJ2ZSBvdGhlciBydG5sIHdhaXRlcnMgb3RoZXJ3aXNlLgomIzQzOwkgKiB3aXBoeV91bnJlZ2lzdGVyKCkgaG9sZHMgcnRubCBhY3Jvc3MgbGlzdF9kZWxfcmN1KCkgJiM0Mzsgc3luY2hyb25pemVfcmN1KCksCiYjNDM7CSAqIHNvIHJkZXYgY2Fubm90IGJlIGZyZWVkIHdoaWxlIHdlIGhvbGQgcnRubF9sb2NrKCkgYmVsb3cuCiYjNDM7CSAqLwomIzQzOwlyY3VfcmVhZF9sb2NrKCk7CiYjNDM7CWxpc3RfZm9yX2VhY2hfZW50cnlfcmN1KHJkZXYsICZhbXA7Y2ZnODAyMTFfcmRldl9saXN0LCBsaXN0KSB7CiYjNDM7CQlyY3VfcmVhZF91bmxvY2soKTsKJiM0MzsJCXJ0bmxfbG9jaygpOwogCQlyZWdfbGVhdmVfaW52YWxpZF9jaGFucygmYW1wO3JkZXYtJmd0O3dpcGh5KTsKLQotCXJ0bmxfdW5sb2NrKCk7CiYjNDM7CQlydG5sX3VubG9jaygpOwomIzQzOwkJcmN1X3JlYWRfbG9jaygpOwomIzQzOwl9CiYjNDM7CXJjdV9yZWFkX3VubG9jaygpOwogfQogCiB2b2lkIHJlZ19jaGVja19jaGFubmVscyh2b2lkKQo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNSAwMTowMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzMDU5CgkJCQkJCQlvdXRwdXQ6IDM2CgkJCQkJCQl0aG91Z2h0czogNTIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIG15IG93biBtZW50YWwgcHJvY2VzczoKCioqRGl2aW5nIGludG8gdGhlIFJlZ3VsYXRvcnkgRG9tYWluIENvZGUqKgoKQWxyaWdodCwgdGhlIGhpbnQgcG9pbnRzIG1lIHN0cmFpZ2h0IHRvIGBuZXQvd2lyZWxlc3MvcmVnLmNgLiBHb29kLCB0aGF0JiMzOTtzIHdoZXJlIEkmIzM5O2QgZXhwZWN0IHRvIGZpbmQgdGhlIHJlZ3VsYXRvcnktcmVsYXRlZCBjb2RlLiBNeSBmaXJzdCBzdGVwIGlzIHRvIGdldCBhIGhhbmRsZSBvbiB0aGUgY2hhbmdlcy4gVGltZSB0byBwdWxsIHVwIHRoZSBkaWZmIGFuZCByZWFsbHkgZ2V0IGludG8gdGhlIG5pdHR5LWdyaXR0eS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgKmV4YWN0bHkqIHdoYXQmIzM5O3MgYmVlbiBtb2RpZmllZCBhbmQgd2h5LiBJJiMzOTtsbCBuZWVkIHRvIGV4YW1pbmUgdGhlIGNvbnRleHQgYXJvdW5kIHRob3NlIGNoYW5nZXMg4oCTIHdoYXQmIzM5O3MgdGhlIHN1cnJvdW5kaW5nIGNvZGUgZG9pbmcsIGhvdyBkb2VzIHRoaXMgZml0IGludG8gdGhlIGJyb2FkZXIgcmVndWxhdG9yeSBkb21haW4gbG9naWMsIGFuZCB3aGF0JiMzOTtzIHRoZSBpbnRlbmRlZCBpbXBhY3Q/CgpOb3csIHRvIGxvY2F0ZSB0aGUgYXJlYSBpbiBxdWVzdGlvbiwgSSYjMzk7bGwgbGV2ZXJhZ2UgdGhlIGxpbmUgbnVtYmVyIOKAkyBhcm91bmQgbGluZSAyNDY2IOKAkyBpdCYjMzk7cyBhbHdheXMgYSBnb29kIHN0YXJ0aW5nIHBvaW50LiBJJiMzOTtsbCB1c2UgYSBgcmVhZC1maWxlYCBjb21tYW5kLCBvciBzaW1pbGFyLCB0byBxdWlja2x5IGp1bXAgdG8gdGhhdCBzcGVjaWZpYyByZWdpb24gb2YgdGhlIGByZWcuY2AgZmlsZSBhbmQgc3RhcnQgbXkgYW5hbHlzaXMuIFRoaXMgZ2l2ZXMgbWUgYSBxdWljayB3YXkgdG8gZXhhbWluZSB0aGUgY29kZSYjMzk7cyBpbW1lZGlhdGUgY29udGV4dC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNSAwMTowMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC93aXJlbGVzcy9yZWcuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDI0NTUsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNTAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MjQ1NTpcdFx0XHRib29sIHZhbGlkO1xuMjQ1NjpcdFxuMjQ1NzpcdFx0XHRzY29wZWRfZ3VhcmQod2lwaHksIHdpcGh5KVxuMjQ1ODpcdFx0XHRcdHZhbGlkID0gcmVnX3dkZXZfY2hhbl92YWxpZCh3aXBoeSwgd2Rldik7XG4yNDU5Olx0XHRcdGlmICghdmFsaWQpXG4yNDYwOlx0XHRcdFx0Y2ZnODAyMTFfbGVhdmUocmRldiwgd2RldiwgLTEpO1xuMjQ2MTpcdFx0fVxuMjQ2MjpcdH1cbjI0NjM6XHRcbjI0NjQ6XHRzdGF0aWMgdm9pZCByZWdfY2hlY2tfY2hhbnNfd29yayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXG4yNDY1Olx0e1xuMjQ2NjpcdFx0c3RydWN0IGNmZzgwMjExX3JlZ2lzdGVyZWRfZGV2aWNlICpyZGV2O1xuMjQ2NzpcdFxuMjQ2ODpcdFx0cHJfZGVidWcoXCYjMzQ7VmVyaWZ5aW5nIGFjdGl2ZSBpbnRlcmZhY2VzIGFmdGVyIHJlZyBjaGFuZ2VcXG5cJiMzNDspO1xuMjQ2OTpcdFx0LypcbjI0NzA6XHRcdCAqIEFjcXVpcmUgcnRubCBwZXItZGV2aWNlIGluc3RlYWQgb2YgaG9sZGluZyBpdCBmb3IgdGhlIGVudGlyZSBsb29wO1xuMjQ3MTpcdFx0ICogY2ZnODAyMTFfbGVhdmUoKSBjYW4gYmUgc2xvdyBhbmQgc3RhcnZlIG90aGVyIHJ0bmwgd2FpdGVycyBvdGhlcndpc2UuXG4yNDcyOlx0XHQgKiB3aXBoeV91bnJlZ2lzdGVyKCkgaG9sZHMgcnRubCBhY3Jvc3MgbGlzdF9kZWxfcmN1KCkgJiM0Mzsgc3luY2hyb25pemVfcmN1KCksXG4yNDczOlx0XHQgKiBzbyByZGV2IGNhbm5vdCBiZSBmcmVlZCB3aGlsZSB3ZSBob2xkIHJ0bmxfbG9jaygpIGJlbG93LlxuMjQ3NDpcdFx0ICovXG4yNDc1Olx0XHRyY3VfcmVhZF9sb2NrKCk7XG4yNDc2Olx0XHRsaXN0X2Zvcl9lYWNoX2VudHJ5X3JjdShyZGV2LCBcdTAwMjZjZmc4MDIxMV9yZGV2X2xpc3QsIGxpc3QpIHtcbjI0Nzc6XHRcdFx0cmN1X3JlYWRfdW5sb2NrKCk7XG4yNDc4Olx0XHRcdHJ0bmxfbG9jaygpO1xuMjQ3OTpcdFx0XHRyZWdfbGVhdmVfaW52YWxpZF9jaGFucyhcdTAwMjZyZGV2LVx1MDAzZXdpcGh5KTtcbjI0ODA6XHRcdFx0cnRubF91bmxvY2soKTtcbjI0ODE6XHRcdFx0cmN1X3JlYWRfbG9jaygpO1xuMjQ4MjpcdFx0fVxuMjQ4MzpcdFx0cmN1X3JlYWRfdW5sb2NrKCk7XG4yNDg0Olx0fVxuMjQ4NTpcdFxuMjQ4NjpcdHZvaWQgcmVnX2NoZWNrX2NoYW5uZWxzKHZvaWQpXG4yNDg3Olx0e1xuMjQ4ODpcdFx0LypcbjI0ODk6XHRcdCAqIEdpdmUgdXNlcm1vZGUgYSBjaGFuY2UgdG8gZG8gc29tZXRoaW5nIG5pY2VyIChtb3ZlIHRvIGFub3RoZXJcbjI0OTA6XHRcdCAqIGNoYW5uZWwsIG9yZGVybHkgZGlzY29ubmVjdGlvbiksIGJlZm9yZSBmb3JjaW5nIGEgZGlzY29ubmVjdGlvbi5cbjI0OTE6XHRcdCAqL1xuMjQ5MjpcdFx0bW9kX2RlbGF5ZWRfd29yayhzeXN0ZW1fcG93ZXJfZWZmaWNpZW50X3dxLFxuMjQ5MzpcdFx0XHRcdCBcdTAwMjZyZWdfY2hlY2tfY2hhbnMsXG4yNDk0Olx0XHRcdFx0IG1zZWNzX3RvX2ppZmZpZXMoUkVHX0VORk9SQ0VfR1JBQ0VfTVMpKTtcbjI0OTU6XHR9XG4yNDk2Olx0XG4yNDk3Olx0c3RhdGljIHZvaWQgd2lwaHlfdXBkYXRlX3JlZ3VsYXRvcnkoc3RydWN0IHdpcGh5ICp3aXBoeSxcbjI0OTg6XHRcdFx0XHRcdCAgICBlbnVtIG5sODAyMTFfcmVnX2luaXRpYXRvciBpbml0aWF0b3IpXG4yNDk5Olx0e1xuMjUwMDpcdFx0ZW51bSBubDgwMjExX2JhbmQgYmFuZDtcbjI1MDE6XHRcdHN0cnVjdCByZWd1bGF0b3J5X3JlcXVlc3QgKmxyID0gZ2V0X2xhc3RfcmVxdWVzdCgpO1xuMjUwMjpcdFxuMjUwMzpcdFx0aWYgKGlnbm9yZV9yZWdfdXBkYXRlKHdpcGh5LCBpbml0aWF0b3IpKSB7XG4yNTA0Olx0XHRcdC8qXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDUgMDE6MDM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDE2MAoJCQkJCQkJb3V0cHV0OiAzMQoJCQkJCQkJdGhvdWdodHM6IDM0NwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgVGhpcyBQYXRjaDogQSBQb3RlbnRpYWwgUkNVIFZpb2xhdGlvbioqCgpPa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMgcGF0Y2ggY29uY2VybmluZyBgcmVnX2NoZWNrX2NoYW5zX3dvcmtgIHdpdGhpbiBgbmV0L3dpcmVsZXNzL3JlZy5jYC4gVGhlIGZpcnN0IHRoaW5nIHRoYXQganVtcHMgb3V0IGlzIHRoZSB1c2Ugb2YgYGxpc3RfZm9yX2VhY2hfZW50cnlfcmN1YC4gV2FpdCBhIHNlY29uZCEgSSBzZWUgaXQmIzM5O3MgaXRlcmF0aW5nIG92ZXIgYGNmZzgwMjExX3JkZXZfbGlzdGAgdXNpbmcgYHJkZXYtJmd0O2xpc3QubmV4dGAuIFRoZW4gSSBzZWUgdGhlIGNyaXRpY2FsIHBvaW50OiB0aGUgY29kZSAqZHJvcHMqIGByY3VfcmVhZF91bmxvY2soKWAgYW5kIHRoZW4gcmUtYWNxdWlyZXMgYHJjdV9yZWFkX2xvY2soKWAgKndpdGhpbiogdGhlIGxvb3AgYm9keS4gQWxhcm0gYmVsbHMhCgpUaGlzIGlzIGEgdGV4dGJvb2sgZXhhbXBsZSBvZiBwb3RlbnRpYWxseSBicmVha2luZyBSQ1UgaW52YXJpYW50cy4gV2hlbiB5b3UmIzM5O3JlIGRlYWxpbmcgd2l0aCBgbGlzdF9mb3JfZWFjaF9lbnRyeV9yY3VgLCB5b3UmIzM5O3JlIHN1cHBvc2VkIHRvIGhvbGQgdGhlIHJlYWQgbG9jayBhY3Jvc3MgdGhlICplbnRpcmUqIGl0ZXJhdGlvbi4gSWYgd2UgZHJvcCB0aGUgbG9jayBhbmQgcmUtYWNxdWlyZSBpdCBpbnNpZGUgdGhlIGxvb3AsIHdlIGNyZWF0ZSBhIHdpbmRvdyB3aGVyZSBgcmRldmAgY291bGQgYmUgdW5saW5rZWQsIGZyZWVkLCBvciBpdHMgYGxpc3QubmV4dGAgcG9pbnRlciBjb3VsZCBiZWNvbWUgaW52YWxpZCBkdWUgdG8gdGhlIFJDVSBncmFjZSBwZXJpb2QgYWZ0ZXIgYGxpc3RfZGVsX3JjdWAuIEVzc2VudGlhbGx5LCB3ZSYjMzk7cmUgdmlvbGF0aW5nIHRoZSBjb3JlIGFzc3VtcHRpb24gb2YgUkNVIHRyYXZlcnNhbC4gVGhpcyBpcyBhIHZlcnkgdW5zYWZlIG1hbmV1dmVyLgoKVGhlIGZ1bmRhbWVudGFsIGlzc3VlIGlzIHRoYXQgYnkgZHJvcHBpbmcgdGhlIFJDVSByZWFkIGxvY2ssIGByZGV2YCBtaWdodCBoYXZlIGJlZW4gZnJlZWQgZHVyaW5nIGBzeW5jaHJvbml6ZV9yY3VgIG9yIGFmdGVyIHRoZSBgbGlzdF9kZWxfcmN1YCBhbmQgZHVyaW5nIHRoZSBncmFjZSBwZXJpb2QuIE9yIGV2ZW4ganVzdCBhY2Nlc3NpbmcgYHJkZXYtJmd0O2xpc3QubmV4dGAgbWlnaHQgYmUgcHJvYmxlbWF0aWMgZHVyaW5nIHRoYXQgcGVyaW9kLiBUaGUgdHJhdmVyc2FsIGNvdWxkIGJlY29tZSBlaXRoZXIgc2FmZSBvciB1bnNhZmUsIGFuZCBpdCYjMzk7cyBoYXJkIHRvIHByZWRpY3QuCgpOb3cgdGhlIG1pbGxpb24tZG9sbGFyIHF1ZXN0aW9uOiBpcyB0aGlzIHJlYWNoYWJsZT8gSXMgdGhpcyBzb21ldGhpbmcgd2UgY2FuIHRyaWdnZXI/IEdpdmVuIHRoYXQgYG5ldC93aXJlbGVzc2Ag4oCTIHdoaWNoIGluY2x1ZGVzIGBjZmc4MDIxMWAsIGBtYWM4MDIxMV9od3NpbWAsIGBubDgwMjExYCwgYW5kIHNvIG9uIOKAkyBpcyBhIHN0YW5kYXJkIHRhcmdldCBmb3Igc3l6a2FsbGVyIGZ1enppbmcsIHRoZXJlJiMzOTtzIGEgKnZlcnkqIGdvb2QgY2hhbmNlIHRoaXMgaXMgaW5kZWVkIHJlYWNoYWJsZSBhbmQgZnV6emVyLXRyaWdnZXJhYmxlLiBUaGlzIG1ha2VzIG1lIHZlcnkgbmVydm91czsgdGhpcyBpcyB0aGUga2luZCBvZiBzdWJ0bGUgUkNVIGJ1ZyB0aGF0IGNhbiBsZWFkIHRvIGNyYXNoZXMgb3IsIHdvcnNlLCBoYXJkLXRvLWRlYnVnIG1lbW9yeSBjb3JydXB0aW9uLgoKTmV4dCwgSSBuZWVkIHRvIGNoZWNrIHRoZSBLY29uZmlnIHJlcXVpcmVtZW50cyBmb3IgYG5ldC93aXJlbGVzcy9yZWcuY2AgdG8gc2VlIGlmIHRoZXJlIGFyZSBhbnkgc3BlY2lmaWMgZGVwZW5kZW5jaWVzIHRoYXQgbWlnaHQgbGltaXQgb3IgZW5hYmxlIHRoaXMgdnVsbmVyYWJpbGl0eS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNSAwMTowNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtDRkc4MDIxMSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC93aXJlbGVzcy8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7XG5GdWxsIG91dHB1dCBpcyB0b28gbG9uZywgc2hvd2luZyA1MDAgb3V0IG9mIDg1NyBsaW5lcy5cblVzZSBtb3JlIHByZWNpc2UgZXhwcmVzc2lvbiBpZiBwb3NzaWJsZS5cblxubmV0L3dpcmVsZXNzL0tjb25maWc9NT1jb25maWcgV0VYVF9DT1JFXG5uZXQvd2lyZWxlc3MvS2NvbmZpZy02LVx0ZGVmX2Jvb2wgeVxubmV0L3dpcmVsZXNzL0tjb25maWc6NzpcdGRlcGVuZHMgb24gQ0ZHODAyMTFfV0VYVCB8fCBXSVJFTEVTU19FWFRcbm5ldC93aXJlbGVzcy9LY29uZmlnLTgtXG4tLVxubmV0L3dpcmVsZXNzL0tjb25maWc9MTQ9Y29uZmlnIFdFWFRfUFJJVlxuLS1cbm5ldC93aXJlbGVzcy9LY29uZmlnLTE2LVxubmV0L3dpcmVsZXNzL0tjb25maWc6MTc6Y29uZmlnIENGRzgwMjExXG5uZXQvd2lyZWxlc3MvS2NvbmZpZy0xOC1cdHRyaXN0YXRlIFwmIzM0O2NmZzgwMjExIC0gd2lyZWxlc3MgY29uZmlndXJhdGlvbiBBUElcJiMzNDtcbi0tXG5uZXQvd2lyZWxlc3MvS2NvbmZpZy0yNC1cdCMgKHRoaXMgaXMgaGVyZSByYXRoZXIgdGhhbiBiZWxvdyB0byBhbGxvdyBpdCB0byBiZSBhIG1vZHVsZSlcbm5ldC93aXJlbGVzcy9LY29uZmlnOjI1Olx0c2VsZWN0IENSWVBUT19TSEEyNTYgaWYgQ0ZHODAyMTFfVVNFX0tFUk5FTF9SRUdEQl9LRVlTXG5uZXQvd2lyZWxlc3MvS2NvbmZpZy0yNi1cdGhlbHBcbi0tXG5uZXQvd2lyZWxlc3MvS2NvbmZpZy0zNS1cbm5ldC93aXJlbGVzcy9LY29uZmlnOjM2OmlmIENGRzgwMjExXG5uZXQvd2lyZWxlc3MvS2NvbmZpZy0zNy1cbm5ldC93aXJlbGVzcy9LY29uZmlnPTM4PWNvbmZpZyBOTDgwMjExX1RFU1RNT0RFXG4tLVxubmV0L3dpcmVsZXNzL0tjb25maWctNTEtXG5uZXQvd2lyZWxlc3MvS2NvbmZpZzo1Mjpjb25maWcgQ0ZHODAyMTFfREVWRUxPUEVSX1dBUk5JTkdTXG5uZXQvd2lyZWxlc3MvS2NvbmZpZy01My1cdGJvb2wgXCYjMzQ7ZW5hYmxlIGRldmVsb3BlciB3YXJuaW5nc1wmIzM0O1xuLS1cbm5ldC93aXJlbGVzcy9LY29uZmlnLTY3LVxubmV0L3dpcmVsZXNzL0tjb25maWc6Njg6Y29uZmlnIENGRzgwMjExX0NFUlRJRklDQVRJT05fT05VU1xubmV0L3dpcmVsZXNzL0tjb25maWctNjktXHRib29sIFwmIzM0O2NmZzgwMjExIGNlcnRpZmljYXRpb24gb251c1wmIzM0O1xuLS1cbm5ldC93aXJlbGVzcy9LY29uZmlnLTg4LVxubmV0L3dpcmVsZXNzL0tjb25maWc6ODk6Y29uZmlnIENGRzgwMjExX1JFUVVJUkVfU0lHTkVEX1JFR0RCXG5uZXQvd2lyZWxlc3MvS2NvbmZpZzo5MDpcdGJvb2wgXCYjMzQ7cmVxdWlyZSByZWdkYiBzaWduYXR1cmVcJiMzNDsgaWYgQ0ZHODAyMTFfQ0VSVElGSUNBVElPTl9PTlVTXG5uZXQvd2lyZWxlc3MvS2NvbmZpZy05MS1cdGRlZmF1bHQgeVxuLS1cbm5ldC93aXJlbGVzcy9LY29uZmlnLTk4LVxubmV0L3dpcmVsZXNzL0tjb25maWc6OTk6Y29uZmlnIENGRzgwMjExX1VTRV9LRVJORUxfUkVHREJfS0VZU1xubmV0L3dpcmVsZXNzL0tjb25maWc6MTAwOlx0Ym9vbCBcJiMzNDthbGxvdyByZWdkYiBrZXlzIHNoaXBwZWQgd2l0aCB0aGUga2VybmVsXCYjMzQ7IGlmIENGRzgwMjExX0NFUlRJRklDQVRJT05fT05VU1xubmV0L3dpcmVsZXNzL0tjb25maWctMTAxLVx0ZGVmYXVsdCB5XG5uZXQvd2lyZWxlc3MvS2NvbmZpZzoxMDI6XHRkZXBlbmRzIG9uIENGRzgwMjExX1JFUVVJUkVfU0lHTkVEX1JFR0RCXG5uZXQvd2lyZWxlc3MvS2NvbmZpZy0xMDMtXHRoZWxwXG4tLVxubmV0L3dpcmVsZXNzL0tjb25maWctMTEwLVxubmV0L3dpcmVsZXNzL0tjb25maWc6MTExOmNvbmZpZyBDRkc4MDIxMV9FWFRSQV9SRUdEQl9LRVlESVJcbm5ldC93aXJlbGVzcy9LY29uZmlnOjExMjpcdHN0cmluZyBcJiMzNDthZGRpdGlvbmFsIHJlZ2RiIGtleSBkaXJlY3RvcnlcJiMzNDsgaWYgQ0ZHODAyMTFfQ0VSVElGSUNBVElPTl9PTlVTXG5uZXQvd2lyZWxlc3MvS2NvbmZpZzoxMTM6XHRkZXBlbmRzIG9uIENGRzgwMjExX1JFUVVJUkVfU0lHTkVEX1JFR0RCXG5uZXQvd2lyZWxlc3MvS2NvbmZpZy0xMTQtXHRoZWxwXG4tLVxubmV0L3dpcmVsZXNzL0tjb25maWctMTIxLVxubmV0L3dpcmVsZXNzL0tjb25maWc6MTIyOmNvbmZpZyBDRkc4MDIxMV9SRUdfQ0VMTFVMQVJfSElOVFNcbm5ldC93aXJlbGVzcy9LY29uZmlnLTEyMy1cdGJvb2wgXCYjMzQ7Y2ZnODAyMTEgcmVndWxhdG9yeSBzdXBwb3J0IGZvciBjZWxsdWxhciBiYXNlIHN0YXRpb24gaGludHNcJiMzNDtcbm5ldC93aXJlbGVzcy9LY29uZmlnOjEyNDpcdGRlcGVuZHMgb24gQ0ZHODAyMTFfQ0VSVElGSUNBVElPTl9PTlVTXG5uZXQvd2lyZWxlc3MvS2NvbmZpZy0xMjUtXHRoZWxwXG4tLVxubmV0L3dpcmVsZXNzL0tjb25maWctMTM0LVxubmV0L3dpcmVsZXNzL0tjb25maWc6MTM1OmNvbmZpZyBDRkc4MDIxMV9SRUdfUkVMQVhfTk9fSVJcbm5ldC93aXJlbGVzcy9LY29uZmlnLTEzNi1cdGJvb2wgXCYjMzQ7Y2ZnODAyMTEgc3VwcG9ydCBmb3IgTk9fSVIgcmVsYXhhdGlvblwmIzM0O1xubmV0L3dpcmVsZXNzL0tjb25maWc6MTM3Olx0ZGVwZW5kcyBvbiBDRkc4MDIxMV9DRVJUSUZJQ0FUSU9OX09OVVNcbm5ldC93aXJlbGVzcy9LY29uZmlnLTEzOC1cdGhlbHBcbi0tXG5uZXQvd2lyZWxlc3MvS2NvbmZpZy0xNTgtXG5uZXQvd2lyZWxlc3MvS2NvbmZpZzoxNTk6Y29uZmlnIENGRzgwMjExX0RFRkFVTFRfUFNcbm5ldC93aXJlbGVzcy9LY29uZmlnLTE2MC1cdGJvb2wgXCYjMzQ7ZW5hYmxlIHBvd2Vyc2F2ZSBieSBkZWZhdWx0XCYjMzQ7XG4tLVxubmV0L3dpcmVsZXNzL0tjb25maWctMTY4LVxubmV0L3dpcmVsZXNzL0tjb25maWc6MTY5OmNvbmZpZyBDRkc4MDIxMV9ERUJVR0ZTXG5uZXQvd2lyZWxlc3MvS2NvbmZpZy0xNzAtXHRib29sIFwmIzM0O2NmZzgwMjExIERlYnVnRlMgZW50cmllc1wmIzM0O1xuLS1cbm5ldC93aXJlbGVzcy9LY29uZmlnLTE3Ni1cbm5ldC93aXJlbGVzcy9LY29uZmlnOjE3Nzpjb25maWcgQ0ZHODAyMTFfQ1JEQV9TVVBQT1JUXG5uZXQvd2lyZWxlc3MvS2NvbmZpZy0xNzgtXHRib29sIFwmIzM0O3N1cHBvcnQgQ1JEQVwmIzM0OyBpZiBFWFBFUlRcbi0tXG5uZXQvd2lyZWxlc3MvS2NvbmZpZy0xODYtXG5uZXQvd2lyZWxlc3MvS2NvbmZpZzoxODc6Y29uZmlnIENGRzgwMjExX1dFWFRcbm5ldC93aXJlbGVzcy9LY29uZmlnLTE4OC1cdGJvb2wgXCYjMzQ7Y2ZnODAyMTEgd2lyZWxlc3MgZXh0ZW5zaW9ucyBjb21wYXRpYmlsaXR5XCYjMzQ7XG4tLVxubmV0L3dpcmVsZXNzL0tjb25maWctMTkzLVxubmV0L3dpcmVsZXNzL0tjb25maWc6MTk0OmNvbmZpZyBDRkc4MDIxMV9LVU5JVF9URVNUXG5uZXQvd2lyZWxlc3MvS2NvbmZpZy0xOTUtXHR0cmlzdGF0ZSBcJiMzNDtLVW5pdCB0ZXN0cyBmb3IgY2ZnODAyMTFcJiMzNDsgaWYgIUtVTklUX0FMTF9URVNUU1xubmV0L3dpcmVsZXNzL0tjb25maWctMTk2LVx0ZGVwZW5kcyBvbiBLVU5JVFxubmV0L3dpcmVsZXNzL0tjb25maWc6MTk3Olx0ZGVwZW5kcyBvbiBDRkc4MDIxMVxubmV0L3dpcmVsZXNzL0tjb25maWctMTk4LVx0ZGVmYXVsdCBLVU5JVF9BTExfVEVTVFNcbi0tXG5uZXQvd2lyZWxlc3MvS2NvbmZpZy0yMDMtXG5uZXQvd2lyZWxlc3MvS2NvbmZpZzoyMDQ6ZW5kaWYgIyBDRkc4MDIxMVxuLS1cbm5ldC93aXJlbGVzcy9NYWtlZmlsZS0xLSMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjBcbm5ldC93aXJlbGVzcy9NYWtlZmlsZToyOm9iai0kKENPTkZJR19DRkc4MDIxMSkgJiM0Mzs9IGNmZzgwMjExLm9cbm5ldC93aXJlbGVzcy9NYWtlZmlsZS0zLW9iai15ICYjNDM7PSB0ZXN0cy9cbi0tXG5uZXQvd2lyZWxlc3MvTWFrZWZpbGU9MTI9Y2ZnODAyMTEtJChDT05GSUdfT0YpICYjNDM7PSBvZi5vXG5uZXQvd2lyZWxlc3MvTWFrZWZpbGU6MTM6Y2ZnODAyMTEtJChDT05GSUdfQ0ZHODAyMTFfREVCVUdGUykgJiM0Mzs9IGRlYnVnZnMub1xubmV0L3dpcmVsZXNzL01ha2VmaWxlOjE0OmNmZzgwMjExLSQoQ09ORklHX0NGRzgwMjExX1dFWFQpICYjNDM7PSB3ZXh0LWNvbXBhdC5vIHdleHQtc21lLm9cbm5ldC93aXJlbGVzcy9NYWtlZmlsZS0xNS1cbm5ldC93aXJlbGVzcy9NYWtlZmlsZT0xNj1DRkxBR1NfdHJhY2UubyA6PSAtSSQoc3JjKVxubmV0L3dpcmVsZXNzL01ha2VmaWxlLTE3LVxubmV0L3dpcmVsZXNzL01ha2VmaWxlOjE4OmNmZzgwMjExLSQoQ09ORklHX0NGRzgwMjExX1VTRV9LRVJORUxfUkVHREJfS0VZUykgJiM0Mzs9IHNoaXBwZWQtY2VydHMub1xubmV0L3dpcmVsZXNzL01ha2VmaWxlOjE5OmlmbmVxICgkKENPTkZJR19DRkc4MDIxMV9FWFRSQV9SRUdEQl9LRVlESVIpLClcbm5ldC93aXJlbGVzcy9NYWtlZmlsZS0yMC1jZmc4MDIxMS15ICYjNDM7PSBleHRyYS1jZXJ0cy5vXG4tLVxubmV0L3dpcmVsZXNzL01ha2VmaWxlPTIzPSQob2JqKS9zaGlwcGVkLWNlcnRzLmM6ICQoc29ydCAkKHdpbGRjYXJkICQoc3JjKS9jZXJ0cy8qLmhleCkpXG4tLVxubmV0L3dpcmVsZXNzL01ha2VmaWxlLTMxLVxubmV0L3dpcmVsZXNzL01ha2VmaWxlOjMyOiQob2JqKS9leHRyYS1jZXJ0cy5jOiAkKENPTkZJR19DRkc4MDIxMV9FWFRSQV9SRUdEQl9LRVlESVIpIFxcXG5uZXQvd2lyZWxlc3MvTWFrZWZpbGU6MzM6XHRcdCAgICAgICQoc29ydCAkKHdpbGRjYXJkICQoQ09ORklHX0NGRzgwMjExX0VYVFJBX1JFR0RCX0tFWURJUikvKi54NTA5KSlcbm5ldC93aXJlbGVzcy9NYWtlZmlsZS0zNC1cdEAkKGtlY2hvKSBcJiMzNDsgIEdFTiAgICAgJEBcJiMzNDtcbi0tXG5uZXQvd2lyZWxlc3MvY2hhbi5jPTEyMz1zdGF0aWMgY29uc3QgdTE2IHB1bmN0dXJpbmdfdmFsdWVzXzMyMG1oeltdID0ge1xuLS1cbm5ldC93aXJlbGVzcy9jaGFuLmMtMTI4LVxubmV0L3dpcmVsZXNzL2NoYW4uYzoxMjk6I2RlZmluZSBDRkc4MDIxMV9QRVJfQldfVkFMSURfUFVOQ1RVUklOR19WQUxVRVMoX2J3KSBcXFxubmV0L3dpcmVsZXNzL2NoYW4uYy0xMzAtXHR7IFxcXG4tLVxubmV0L3dpcmVsZXNzL2NoYW4uYz0xMzU9c3RhdGljIGNvbnN0IHN0cnVjdCBjZmc4MDIxMV9wZXJfYndfcHVuY3R1cmluZ192YWx1ZXMgcGVyX2J3X3B1bmN0dXJpbmdbXSA9IHtcbm5ldC93aXJlbGVzcy9jaGFuLmM6MTM2Olx0Q0ZHODAyMTFfUEVSX0JXX1ZBTElEX1BVTkNUVVJJTkdfVkFMVUVTKDgwKSxcbm5ldC93aXJlbGVzcy9jaGFuLmM6MTM3Olx0Q0ZHODAyMTFfUEVSX0JXX1ZBTElEX1BVTkNUVVJJTkdfVkFMVUVTKDE2MCksXG5uZXQvd2lyZWxlc3MvY2hhbi5jOjEzODpcdENGRzgwMjExX1BFUl9CV19WQUxJRF9QVU5DVFVSSU5HX1ZBTFVFUygzMjApXG5uZXQvd2lyZWxlc3MvY2hhbi5jLTEzOS19O1xuLS1cbm5ldC93aXJlbGVzcy9jaGFuLmM9MTY5NT1zdGF0aWMgYm9vbCBjZmc4MDIxMV9pcl9wZXJtaXNzaXZlX2NoYW4oc3RydWN0IHdpcGh5ICp3aXBoeSxcbi0tXG5uZXQvd2lyZWxlc3MvY2hhbi5jLTE3MDMtXG5uZXQvd2lyZWxlc3MvY2hhbi5jOjE3MDQ6XHRpZiAoIUlTX0VOQUJMRUQoQ09ORklHX0NGRzgwMjExX1JFR19SRUxBWF9OT19JUikgfHxcbm5ldC93aXJlbGVzcy9jaGFuLmMtMTcwNS1cdCAgICAhKHdpcGh5LVx1MDAzZXJlZ3VsYXRvcnlfZmxhZ3MgXHUwMDI2IFJFR1VMQVRPUllfRU5BQkxFX1JFTEFYX05PX0lSKSlcbi0tXG5uZXQvd2lyZWxlc3MvY29yZS5jPTU0OT1zdHJ1Y3Qgd2lwaHkgKndpcGh5X25ld19ubShjb25zdCBzdHJ1Y3QgY2ZnODAyMTFfb3BzICpvcHMsIGludCBzaXplb2ZfcHJpdixcbi0tXG5uZXQvd2lyZWxlc3MvY29yZS5jLTYzNi1cdFx0XHQgIGNmZzgwMjExX2Rmc19jaGFubmVsc191cGRhdGVfd29yayk7XG5uZXQvd2lyZWxlc3MvY29yZS5jOjYzNzojaWZkZWYgQ09ORklHX0NGRzgwMjExX1dFWFRcbm5ldC93aXJlbGVzcy9jb3JlLmMtNjM4LVx0cmRldi1cdTAwM2V3aXBoeS53ZXh0ID0gXHUwMDI2Y2ZnODAyMTFfd2V4dF9oYW5kbGVyO1xuLS1cbm5ldC93aXJlbGVzcy9jb3JlLmMtNjU4LVxubmV0L3dpcmVsZXNzL2NvcmUuYzo2NTk6I2lmZGVmIENPTkZJR19DRkc4MDIxMV9ERUZBVUxUX1BTXG5uZXQvd2lyZWxlc3MvY29yZS5jLTY2MC1cdHJkZXYtXHUwMDNld2lwaHkuZmxhZ3MgfD0gV0lQSFlfRkxBR19QU19PTl9CWV9ERUZBVUxUO1xuLS1cbm5ldC93aXJlbGVzcy9jb3JlLmM9ODUzPWludCB3aXBoeV9yZWdpc3RlcihzdHJ1Y3Qgd2lwaHkgKndpcGh5KVxuLS1cbm5ldC93aXJlbGVzcy9jb3JlLmMtMTEyMi1cdGVsc2UgaWYgKHdpcGh5LVx1MDAzZW1heF9udW1fYWttX3N1aXRlcyBcdTAwM2MgTkw4MDIxMV9NQVhfTlJfQUtNX1NVSVRFUyB8fFxubmV0L3dpcmVsZXNzL2NvcmUuYzoxMTIzOlx0XHQgd2lwaHktXHUwMDNlbWF4X251bV9ha21fc3VpdGVzIFx1MDAzZSBDRkc4MDIxMV9NQVhfTlVNX0FLTV9TVUlURVMpXG5uZXQvd2lyZWxlc3MvY29yZS5jLTExMjQtXHRcdHJldHVybiAtRUlOVkFMO1xuLS1cbm5ldC93aXJlbGVzcy9jb3JlLmM9MTQwOD1zdGF0aWMgdm9pZCBfY2ZnODAyMTFfdW5yZWdpc3Rlcl93ZGV2KHN0cnVjdCB3aXJlbGVzc19kZXYgKndkZXYsXG4tLVxubmV0L3dpcmVsZXNzL2NvcmUuYy0xNDQ4LVxubmV0L3dpcmVsZXNzL2NvcmUuYzoxNDQ5OiNpZmRlZiBDT05GSUdfQ0ZHODAyMTFfV0VYVFxubmV0L3dpcmVsZXNzL2NvcmUuYy0xNDUwLVx0a2ZyZWVfc2Vuc2l0aXZlKHdkZXYtXHUwMDNld2V4dC5rZXlzKTtcbi0tXG5uZXQvd2lyZWxlc3MvY29yZS5jPTE1MDM9dm9pZCBjZmc4MDIxMV9sZWF2ZV9sb2NrZWQoc3RydWN0IGNmZzgwMjExX3JlZ2lzdGVyZWRfZGV2aWNlICpyZGV2LFxuLS1cbm5ldC93aXJlbGVzcy9jb3JlLmMtMTUyNy1cbm5ldC93aXJlbGVzcy9jb3JlLmM6MTUyODojaWZkZWYgQ09ORklHX0NGRzgwMjExX1dFWFRcbm5ldC93aXJlbGVzcy9jb3JlLmMtMTUyOS1cdFx0a2ZyZWUod2Rldi1cdTAwM2V3ZXh0LmllKTtcbi0tXG5uZXQvd2lyZWxlc3MvY29yZS5jPTE2MTQ9dm9pZCBjZmc4MDIxMV9pbml0X3dkZXYoc3RydWN0IHdpcmVsZXNzX2RldiAqd2Rldilcbi0tXG5uZXQvd2lyZWxlc3MvY29yZS5jLTE2MjItXG5uZXQvd2lyZWxlc3MvY29yZS5jOjE2MjM6I2lmZGVmIENPTkZJR19DRkc4MDIxMV9XRVhUXG5uZXQvd2lyZWxlc3MvY29yZS5jLTE2MjQtXHR3ZGV2LVx1MDAzZXdleHQuZGVmYXVsdF9rZXkgPSAtMTtcbi0tXG5uZXQvd2lyZWxlc3MvY29yZS5jPTE3MDc9c3RhdGljIGludCBjZmc4MDIxMV9uZXRkZXZfbm90aWZpZXJfY2FsbChzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgKm5iLFxuLS1cbm5ldC93aXJlbGVzcy9jb3JlLmMtMTc4MS1cdFx0c3dpdGNoICh3ZGV2LVx1MDAzZWlmdHlwZSkge1xubmV0L3dpcmVsZXNzL2NvcmUuYzoxNzgyOiNpZmRlZiBDT05GSUdfQ0ZHODAyMTFfV0VYVFxubmV0L3dpcmVsZXNzL2NvcmUuYy0xNzgzLVx0XHRjYXNlIE5MODAyMTFfSUZUWVBFX0FESE9DOlxuLS1cbm5ldC93aXJlbGVzcy9jb3JlLmg9NTc0PWNmZzgwMjExX2dldF82Z2h6X3Bvd2VyX3R5cGUoY29uc3QgdTggKmVsZW1zLCBzaXplX3QgZWxlbXNfbGVuLFxuLS1cbm5ldC93aXJlbGVzcy9jb3JlLmgtNTc2LVxubmV0L3dpcmVsZXNzL2NvcmUuaDo1Nzc6I2lmZGVmIENPTkZJR19DRkc4MDIxMV9ERVZFTE9QRVJfV0FSTklOR1Ncbm5ldC93aXJlbGVzcy9jb3JlLmg6NTc4OiNkZWZpbmUgQ0ZHODAyMTFfREVWX1dBUk5fT04oY29uZClcdFdBUk5fT04oY29uZClcbm5ldC93aXJlbGVzcy9jb3JlLmgtNTc5LSNlbHNlXG4tLVxubmV0L3dpcmVsZXNzL2NvcmUuaC01ODQtICovXG5uZXQvd2lyZWxlc3MvY29yZS5oOjU4NTojZGVmaW5lIENGRzgwMjExX0RFVl9XQVJOX09OKGNvbmQpXHQoe2Jvb2wgX19yID0gKGNvbmQpOyBfX3I7IH0pXG5uZXQvd2lyZWxlc3MvY29yZS5oLTU4Ni0jZW5kaWZcbi0tXG5uZXQvd2lyZWxlc3MvY29yZS5oPTYyND1zdHJ1Y3QgY2ZnODAyMTFfY29sb2NhdGVkX2FwIHtcbi0tXG5uZXQvd2lyZWxlc3MvY29yZS5oLTY0MC1cbm5ldC93aXJlbGVzcy9jb3JlLmg6NjQxOiNpZiBJU19FTkFCTEVEKENPTkZJR19DRkc4MDIxMV9LVU5JVF9URVNUKVxubmV0L3dpcmVsZXNzL2NvcmUuaDo2NDI6I2RlZmluZSBFWFBPUlRfU1lNQk9MX0lGX0NGRzgwMjExX0tVTklUKHN5bSkgRVhQT1JUX1NZTUJPTF9JRl9LVU5JVChzeW0pXG5uZXQvd2lyZWxlc3MvY29yZS5oOjY0MzojZGVmaW5lIFZJU0lCTEVfSUZfQ0ZHODAyMTFfS1VOSVRcbm5ldC93aXJlbGVzcy9jb3JlLmgtNjQ0LXZvaWQgY2ZnODAyMTFfZnJlZV9jb2xvY19hcF9saXN0KHN0cnVjdCBsaXN0X2hlYWQgKmNvbG9jX2FwX2xpc3QpO1xuLS1cbm5ldC93aXJlbGVzcy9jb3JlLmg9NjQ5PXNpemVfdCBjZmc4MDIxMV9nZW5fbmV3X2llKGNvbnN0IHU4ICppZSwgc2l6ZV90IGllbGVuLFxuLS1cbm5ldC93aXJlbGVzcy9jb3JlLmgtNjUyLSNlbHNlXG5uZXQvd2lyZWxlc3MvY29yZS5oOjY1MzojZGVmaW5lIEVYUE9SVF9TWU1CT0xfSUZfQ0ZHODAyMTFfS1VOSVQoc3ltKVxubmV0L3dpcmVsZXNzL2NvcmUuaDo2NTQ6I2RlZmluZSBWSVNJQkxFX0lGX0NGRzgwMjExX0tVTklUIHN0YXRpY1xubmV0L3dpcmVsZXNzL2NvcmUuaDo2NTU6I2VuZGlmIC8qIElTX0VOQUJMRUQoQ09ORklHX0NGRzgwMjExX0tVTklUX1RFU1QpICovXG5uZXQvd2lyZWxlc3MvY29yZS5oLTY1Ni1cbi0tXG5uZXQvd2lyZWxlc3MvZGVidWdmcy5oLTEtLyogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAgKi9cbm5ldC93aXJlbGVzcy9kZWJ1Z2ZzLmg6MjojaWZuZGVmIF9fQ0ZHODAyMTFfREVCVUdGU19IXG5uZXQvd2lyZWxlc3MvZGVidWdmcy5oOjM6I2RlZmluZSBfX0NGRzgwMjExX0RFQlVHRlNfSFxubmV0L3dpcmVsZXNzL2RlYnVnZnMuaC00LVxubmV0L3dpcmVsZXNzL2RlYnVnZnMuaDo1OiNpZmRlZiBDT05GSUdfQ0ZHODAyMTFfREVCVUdGU1xubmV0L3dpcmVsZXNzL2RlYnVnZnMuaC02LXZvaWQgY2ZnODAyMTFfZGVidWdmc19yZGV2X2FkZChzdHJ1Y3QgY2ZnODAyMTFfcmVnaXN0ZXJlZF9kZXZpY2UgKnJkZXYpO1xuLS1cbm5ldC93aXJlbGVzcy9kZWJ1Z2ZzLmg9OT12b2lkIGNmZzgwMjExX2RlYnVnZnNfcmRldl9hZGQoc3RydWN0IGNmZzgwMjExX3JlZ2lzdGVyZWRfZGV2aWNlICpyZGV2KSB7fVxuLS1cbm5ldC93aXJlbGVzcy9kZWJ1Z2ZzLmgtMTEtXG5uZXQvd2lyZWxlc3MvZGVidWdmcy5oOjEyOiNlbmRpZiAvKiBfX0NGRzgwMjExX0RFQlVHRlNfSCAqL1xuLS1cbm5ldC93aXJlbGVzcy9pYnNzLmM9MTk9dm9pZCBfX2NmZzgwMjExX2lic3Nfam9pbmVkKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGNvbnN0IHU4ICpic3NpZCxcbi0tXG5uZXQvd2lyZWxlc3MvaWJzcy5jLTIzLVx0c3RydWN0IGNmZzgwMjExX2JzcyAqYnNzO1xubmV0L3dpcmVsZXNzL2lic3MuYzoyNDojaWZkZWYgQ09ORklHX0NGRzgwMjExX1dFWFRcbm5ldC93aXJlbGVzcy9pYnNzLmMtMjUtXHR1bmlvbiBpd3JlcV9kYXRhIHdycXU7XG4tLVxubmV0L3dpcmVsZXNzL2lic3MuYy01MS1cdFx0XHRcdEdGUF9LRVJORUwpO1xubmV0L3dpcmVsZXNzL2lic3MuYzo1MjojaWZkZWYgQ09ORklHX0NGRzgwMjExX1dFWFRcbm5ldC93aXJlbGVzcy9pYnNzLmMtNTMtXHRtZW1zZXQoXHUwMDI2d3JxdSwgMCwgc2l6ZW9mKHdycXUpKTtcbi0tXG5uZXQvd2lyZWxlc3MvaWJzcy5jPTg3PWludCBfX2NmZzgwMjExX2pvaW5faWJzcyhzdHJ1Y3QgY2ZnODAyMTFfcmVnaXN0ZXJlZF9kZXZpY2UgKnJkZXYsXG4tLVxubmV0L3dpcmVsZXNzL2lic3MuYy0xNDAtXG5uZXQvd2lyZWxlc3MvaWJzcy5jOjE0MTojaWZkZWYgQ09ORklHX0NGRzgwMjExX1dFWFRcbm5ldC93aXJlbGVzcy9pYnNzLmMtMTQyLVx0d2Rldi1cdTAwM2V3ZXh0Lmlic3MuY2hhbmRlZiA9IHBhcmFtcy1cdTAwM2VjaGFuZGVmO1xuLS1cbm5ldC93aXJlbGVzcy9pYnNzLmM9MTU2PXZvaWQgY2ZnODAyMTFfY2xlYXJfaWJzcyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBib29sIG5vd2V4dClcbi0tXG5uZXQvd2lyZWxlc3MvaWJzcy5jLTE4NC1cdG1lbXNldChcdTAwMjZ3ZGV2LVx1MDAzZXUuaWJzcy5jaGFuZGVmLCAwLCBzaXplb2Yod2Rldi1cdTAwM2V1Lmlic3MuY2hhbmRlZikpO1xubmV0L3dpcmVsZXNzL2lic3MuYzoxODU6I2lmZGVmIENPTkZJR19DRkc4MDIxMV9XRVhUXG5uZXQvd2lyZWxlc3MvaWJzcy5jLTE4Ni1cdGlmICghbm93ZXh0KVxuLS1cbm5ldC93aXJlbGVzcy9pYnNzLmM9MTkyPWludCBjZmc4MDIxMV9sZWF2ZV9pYnNzKHN0cnVjdCBjZmc4MDIxMV9yZWdpc3RlcmVkX2RldmljZSAqcmRldixcbi0tXG5uZXQvd2lyZWxlc3MvaWJzcy5jLTIxMy1cbm5ldC93aXJlbGVzcy9pYnNzLmM6MjE0OiNpZmRlZiBDT05GSUdfQ0ZHODAyMTFfV0VYVFxubmV0L3dpcmVsZXNzL2lic3MuYy0yMTUtaW50IGNmZzgwMjExX2lic3Nfd2V4dF9qb2luKHN0cnVjdCBjZmc4MDIxMV9yZWdpc3RlcmVkX2RldmljZSAqcmRldixcbi0tXG5uZXQvd2lyZWxlc3MvbWxtZS5jPTI3Nz12b2lkIGNmZzgwMjExX21pY2hhZWxfbWljX2ZhaWx1cmUoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgY29uc3QgdTggKmFkZHIsXG4tLVxubmV0L3dpcmVsZXNzL21sbWUuYy0yODItXHRzdHJ1Y3QgY2ZnODAyMTFfcmVnaXN0ZXJlZF9kZXZpY2UgKnJkZXYgPSB3aXBoeV90b19yZGV2KHdpcGh5KTtcbm5ldC93aXJlbGVzcy9tbG1lLmM6MjgzOiNpZmRlZiBDT05GSUdfQ0ZHODAyMTFfV0VYVFxubmV0L3dpcmVsZXNzL21sbWUuYy0yODQtXHR1bmlvbiBpd3JlcV9kYXRhIHdycXU7XG4tLVxubmV0L3dpcmVsZXNzL25sODAyMTEuYz02NjY9bmw4MDIxMV9uYW5fcGVlcl9tYXBfcG9saWN5W05MODAyMTFfTkFOX1BFRVJfTUFQX0FUVFJfTUFYICYjNDM7IDFdID0ge1xuLS1cbm5ldC93aXJlbGVzcy9ubDgwMjExLmMtNjY4LVx0W05MODAyMTFfTkFOX1BFRVJfTUFQX0FUVFJfVElNRV9TTE9UU10gPVxubmV0L3dpcmVsZXNzL25sODAyMTEuYzo2Njk6XHRcdE5MQV9QT0xJQ1lfRVhBQ1RfTEVOKENGRzgwMjExX05BTl9TQ0hFRF9OVU1fVElNRV9TTE9UUyksXG5uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jLTY3MC19O1xuLS1cbm5ldC93aXJlbGVzcy9ubDgwMjExLmM9NzAwPXN0YXRpYyBjb25zdCBzdHJ1Y3QgbmxhX3BvbGljeSBubDgwMjExX3BvbGljeVtOVU1fTkw4MDIxMV9BVFRSXSA9IHtcbi0tXG5uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jLTEwODItXHRbTkw4MDIxMV9BVFRSX05BTl9USU1FX1NMT1RTXSA9XG5uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jOjEwODM6XHRcdE5MQV9QT0xJQ1lfRVhBQ1RfTEVOKENGRzgwMjExX05BTl9TQ0hFRF9OVU1fVElNRV9TTE9UUyksXG5uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jLTEwODQtXHRbTkw4MDIxMV9BVFRSX05BTl9BVkFJTF9CTE9CXSA9XG4tLVxubmV0L3dpcmVsZXNzL25sODAyMTEuYz01NDY2PXN0YXRpYyBpbnQgbmw4MDIxMV9zZXRfa2V5KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pXG4tLVxubmV0L3dpcmVsZXNzL25sODAyMTEuYy01NTA4LVxubmV0L3dpcmVsZXNzL25sODAyMTEuYzo1NTA5OiNpZmRlZiBDT05GSUdfQ0ZHODAyMTFfV0VYVFxubmV0L3dpcmVsZXNzL25sODAyMTEuYy01NTEwLVx0XHR3ZGV2LVx1MDAzZXdleHQuZGVmYXVsdF9rZXkgPSBrZXkuaWR4O1xuLS1cbm5ldC93aXJlbGVzcy9ubDgwMjExLmMtNTUzMS1cbm5ldC93aXJlbGVzcy9ubDgwMjExLmM6NTUzMjojaWZkZWYgQ09ORklHX0NGRzgwMjExX1dFWFRcbm5ldC93aXJlbGVzcy9ubDgwMjExLmMtNTUzMy1cdFx0d2Rldi1cdTAwM2V3ZXh0LmRlZmF1bHRfbWdtdF9rZXkgPSBrZXkuaWR4O1xuLS1cbm5ldC93aXJlbGVzcy9ubDgwMjExLmM9NTY0ND1zdGF0aWMgaW50IG5sODAyMTFfZGVsX2tleShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKVxuLS1cbm5ldC93aXJlbGVzcy9ubDgwMjExLmMtNTY5MC1cbm5ldC93aXJlbGVzcy9ubDgwMjExLmM6NTY5MTojaWZkZWYgQ09ORklHX0NGRzgwMjExX1dFWFRcbm5ldC93aXJlbGVzcy9ubDgwMjExLmMtNTY5Mi1cdGlmICghZXJyKSB7XG4tLVxubmV0L3dpcmVsZXNzL25sODAyMTEuYz03ODY3PXN0YXRpYyBpbnQgbmw4MDIxMV9maWxsX2xpbmtfc3RhdGlvbihzdHJ1Y3Qgc2tfYnVmZiAqbXNnLFxuLS1cbm5ldC93aXJlbGVzcy9ubDgwMjExLmMtNzkxNC1cdHN3aXRjaCAocmRldi1cdTAwM2V3aXBoeS5zaWduYWxfdHlwZSkge1xubmV0L3dpcmVsZXNzL25sODAyMTEuYzo3OTE1Olx0Y2FzZSBDRkc4MDIxMV9TSUdOQUxfVFlQRV9NQk06XG5uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jLTc5MTYtXHRcdFBVVF9MSU5LX1NJTkZPKFNJR05BTCwgc2lnbmFsLCB1OCk7XG4tLVxubmV0L3dpcmVsZXNzL25sODAyMTEuYz04MDQ1PXN0YXRpYyBpbnQgbmw4MDIxMV9wdXRfc3RhX2luZm9fY29tbW9uKHN0cnVjdCBza19idWZmICptc2csXG4tLVxubmV0L3dpcmVsZXNzL25sODAyMTEuYy04MDk0LVx0c3dpdGNoIChyZGV2LVx1MDAzZXdpcGh5LnNpZ25hbF90eXBlKSB7XG5uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jOjgwOTU6XHRjYXNlIENGRzgwMjExX1NJR05BTF9UWVBFX01CTTpcbm5ldC93aXJlbGVzcy9ubDgwMjExLmMtODA5Ni1cdFx0UFVUX1NJTkZPKFNJR05BTCwgc2lnbmFsLCB1OCk7XG4tLVxubmV0L3dpcmVsZXNzL25sODAyMTEuYz04NzkwPWludCBjZmc4MDIxMV9jaGVja19zdGF0aW9uX2NoYW5nZShzdHJ1Y3Qgd2lwaHkgKndpcGh5LFxuLS1cbm5ldC93aXJlbGVzcy9ubDgwMjExLmMtODc5NC1cdGlmIChwYXJhbXMtXHUwMDNlbGlzdGVuX2ludGVydmFsICE9IC0xIFx1MDAyNlx1MDAyNlxubmV0L3dpcmVsZXNzL25sODAyMTEuYzo4Nzk1Olx0ICAgIHN0YXR5cGUgIT0gQ0ZHODAyMTFfU1RBX0FQX0NMSUVOVF9VTkFTU09DKVxubmV0L3dpcmVsZXNzL25sODAyMTEuYy04Nzk2LVx0XHRyZXR1cm4gLUVJTlZBTDtcbi0tXG5uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jLTg3OTgtXHRpZiAocGFyYW1zLVx1MDAzZXN1cHBvcnRfcDJwX3BzICE9IC0xIFx1MDAyNlx1MDAyNlxubmV0L3dpcmVsZXNzL25sODAyMTEuYzo4Nzk5Olx0ICAgIHN0YXR5cGUgIT0gQ0ZHODAyMTFfU1RBX0FQX0NMSUVOVF9VTkFTU09DKVxubmV0L3dpcmVsZXNzL25sODAyMTEuYy04ODAwLVx0XHRyZXR1cm4gLUVJTlZBTDtcbi0tXG5uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jLTg4MDMtXHQgICAgIShwYXJhbXMtXHUwMDNlc3RhX2ZsYWdzX3NldCBcdTAwMjYgQklUKE5MODAyMTFfU1RBX0ZMQUdfVERMU19QRUVSKSkgXHUwMDI2XHUwMDI2XG5uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jOjg4MDQ6XHQgICAgc3RhdHlwZSAhPSBDRkc4MDIxMV9TVEFfQVBfQ0xJRU5UX1VOQVNTT0MpXG5uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jLTg4MDUtXHRcdHJldHVybiAtRUlOVkFMO1xuLS1cbm5ldC93aXJlbGVzcy9ubDgwMjExLmMtODgxMC1cdHN3aXRjaCAoc3RhdHlwZSkge1xubmV0L3dpcmVsZXNzL25sODAyMTEuYzo4ODExOlx0Y2FzZSBDRkc4MDIxMV9TVEFfTUVTSF9QRUVSX0tFUk5FTDpcbm5ldC93aXJlbGVzcy9ubDgwMjExLmM6ODgxMjpcdGNhc2UgQ0ZHODAyMTFfU1RBX01FU0hfUEVFUl9VU0VSOlxubmV0L3dpcmVsZXNzL25sODAyMTEuYy04ODEzLVx0XHQvKlxuLS1cbm5ldC93aXJlbGVzcy9ubDgwMjExLmMtODgyMy1cdFx0YnJlYWs7XG5uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jOjg4MjQ6XHRjYXNlIENGRzgwMjExX1NUQV9URExTX1BFRVJfU0VUVVA6XG5uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jOjg4MjU6XHRjYXNlIENGRzgwMjExX1NUQV9URExTX1BFRVJfQUNUSVZFOlxubmV0L3dpcmVsZXNzL25sODAyMTEuYy04ODI2LVx0XHRpZiAoIShwYXJhbXMtXHUwMDNlc3RhX2ZsYWdzX3NldCBcdTAwMjYgQklUKE5MODAyMTFfU1RBX0ZMQUdfVERMU19QRUVSKSkpXG4tLVxubmV0L3dpcmVsZXNzL25sODAyMTEuYy04ODQwLVxubmV0L3dpcmVsZXNzL25sODAyMTEuYzo4ODQxOlx0aWYgKHN0YXR5cGUgIT0gQ0ZHODAyMTFfU1RBX1RETFNfUEVFUl9TRVRVUCBcdTAwMjZcdTAwMjZcbm5ldC93aXJlbGVzcy9ubDgwMjExLmM6ODg0MjpcdCAgICBzdGF0eXBlICE9IENGRzgwMjExX1NUQV9URExTX1BFRVJfQUNUSVZFKSB7XG5uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jLTg4NDMtXHRcdC8qIFRETFMgY2FuJiMzOTt0IGJlIHNldCwgLi4uICovXG4tLVxubmV0L3dpcmVsZXNzL25sODAyMTEuYy04ODUzLVxubmV0L3dpcmVsZXNzL25sODAyMTEuYzo4ODU0Olx0aWYgKHN0YXR5cGUgIT0gQ0ZHODAyMTFfU1RBX1RETFNfUEVFUl9TRVRVUCBcdTAwMjZcdTAwMjZcbm5ldC93aXJlbGVzcy9ubDgwMjExLmM6ODg1NTpcdCAgICBzdGF0eXBlICE9IENGRzgwMjExX1NUQV9BUF9DTElFTlRfVU5BU1NPQykge1xubmV0L3dpcmVsZXNzL25sODAyMTEuYy04ODU2LVx0XHQvKiByZWplY3Qgb3RoZXIgdGhpbmdzIHRoYXQgY2FuJiMzOTt0IGNoYW5nZSAqL1xuLS1cbm5ldC93aXJlbGVzcy9ubDgwMjExLmMtODg2Mi1cdFx0XHRyZXR1cm4gLUVJTlZBTDtcbm5ldC93aXJlbGVzcy9ubDgwMjExLmM6ODg2MzpcdFx0aWYgKHN0YXR5cGUgIT0gQ0ZHODAyMTFfU1RBX05BTl9NR01UIFx1MDAyNlx1MDAyNlxubmV0L3dpcmVsZXNzL25sODAyMTEuYy04ODY0LVx0XHQgICAgKHBhcmFtcy1cdTAwM2VsaW5rX3N0YV9wYXJhbXMuaHRfY2FwYSB8fFxuLS1cbm5ldC93aXJlbGVzcy9ubDgwMjExLmMtODg3NC1cbm5ldC93aXJlbGVzcy9ubDgwMjExLmM6ODg3NTpcdGlmIChzdGF0eXBlICE9IENGRzgwMjExX1NUQV9BUF9DTElFTlQgXHUwMDI2XHUwMDI2XG5uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jOjg4NzY6XHQgICAgc3RhdHlwZSAhPSBDRkc4MDIxMV9TVEFfQVBfQ0xJRU5UX1VOQVNTT0MpIHtcbm5ldC93aXJlbGVzcy9ubDgwMjExLmMtODg3Ny1cdFx0aWYgKHBhcmFtcy1cdTAwM2V2bGFuKVxuLS1cbm5ldC93aXJlbGVzcy9ubDgwMjExLmMtODg4MS1cdC8qIEFjY2VwdCBFTUxTUiBjYXBhYmlsaXRpZXMgb25seSBmb3IgQVAgY2xpZW50IGJlZm9yZSBhc3NvY2lhdGlvbiAqL1xubmV0L3dpcmVsZXNzL25sODAyMTEuYzo4ODgyOlx0aWYgKHN0YXR5cGUgIT0gQ0ZHODAyMTFfU1RBX0FQX0NMSUVOVF9VTkFTU09DIFx1MDAyNlx1MDAyNlxubmV0L3dpcmVsZXNzL25sODAyMTEuYy04ODgzLVx0ICAgIHBhcmFtcy1cdTAwM2VlbWxfY2FwX3ByZXNlbnQpXG4tLVxubmV0L3dpcmVsZXNzL25sODAyMTEuYy04ODg2LVx0c3dpdGNoIChzdGF0eXBlKSB7XG5uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jOjg4ODc6XHRjYXNlIENGRzgwMjExX1NUQV9BUF9NTE1FX0NMSUVOVDpcbm5ldC93aXJlbGVzcy9ubDgwMjExLmMtODg4OC1cdFx0LyogVXNlIHRoaXMgb25seSBmb3IgYXV0aG9yaXppbmcvdW5hdXRob3JpemluZyBhIHN0YXRpb24gKi9cbi0tXG5uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jLTg4OTEtXHRcdGJyZWFrO1xubmV0L3dpcmVsZXNzL25sODAyMTEuYzo4ODkyOlx0Y2FzZSBDRkc4MDIxMV9TVEFfQVBfQ0xJRU5UOlxubmV0L3dpcmVsZXNzL25sODAyMTEuYzo4ODkzOlx0Y2FzZSBDRkc4MDIxMV9TVEFfQVBfQ0xJRU5UX1VOQVNTT0M6XG5uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jLTg4OTQtXHRcdC8qIGFjY2VwdCBvbmx5IHRoZSBsaXN0ZWQgYml0cyAqL1xuLS1cbm5ldC93aXJlbGVzcy9ubDgwMjExLmMtODkxMS1cdFx0YnJlYWs7XG5uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jOjg5MTI6XHRjYXNlIENGRzgwMjExX1NUQV9JQlNTOlxubmV0L3dpcmVsZXNzL25sODAyMTEuYzo4OTEzOlx0Y2FzZSBDRkc4MDIxMV9TVEFfQVBfU1RBOlxubmV0L3dpcmVsZXNzL25sODAyMTEuYy04OTE0LVx0XHQvKiByZWplY3QgYW55IGNoYW5nZXMgb3RoZXIgdGhhbiBBVVRIT1JJWkVEICovXG4tLVxubmV0L3dpcmVsZXNzL25sODAyMTEuYy04OTE3LVx0XHRicmVhaztcbm5ldC93aXJlbGVzcy9ubDgwMjExLmM6ODkxODpcdGNhc2UgQ0ZHODAyMTFfU1RBX1RETFNfUEVFUl9TRVRVUDpcbm5ldC93aXJlbGVzcy9ubDgwMjExLmMtODkxOS1cdFx0LyogcmVqZWN0IGFueSBjaGFuZ2VzIG90aGVyIHRoYW4gQVVUSE9SSVpFRCBvciBXTUUgKi9cbi0tXG5uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jLTg5MjctXHRcdGJyZWFrO1xubmV0L3dpcmVsZXNzL25sODAyMTEuYzo4OTI4Olx0Y2FzZSBDRkc4MDIxMV9TVEFfVERMU19QRUVSX0FDVElWRTpcbm5ldC93aXJlbGVzcy9ubDgwMjExLmMtODkyOS1cdFx0LyogcmVqZWN0IGFueSBjaGFuZ2VzICovXG5uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jLTg5MzAtXHRcdHJldHVybiAtRUlOVkFMO1xubmV0L3dpcmVsZXNzL25sODAyMTEuYzo4OTMxOlx0Y2FzZSBDRkc4MDIxMV9TVEFfTUVTSF9QRUVSX0tFUk5FTDpcbm5ldC93aXJlbGVzcy9ubDgwMjExLmMtODkzMi1cdFx0aWYgKHBhcmFtcy1cdTAwM2VzdGFfbW9kaWZ5X21hc2sgXHUwMDI2IFNUQVRJT05fUEFSQU1fQVBQTFlfUExJTktfU1RBVEUpXG4tLVxubmV0L3dpcmVsZXNzL25sODAyMTEuYy04OTM0LVx0XHRicmVhaztcbm5ldC93aXJlbGVzcy9ubDgwMjExLmM6ODkzNTpcdGNhc2UgQ0ZHODAyMTFfU1RBX01FU0hfUEVFUl9VU0VSOlxubmV0L3dpcmVsZXNzL25sODAyMTEuYy04OTM2LVx0XHRpZiAocGFyYW1zLVx1MDAzZXBsaW5rX2FjdGlvbiAhPSBOTDgwMjExX1BMSU5LX0FDVElPTl9OT19BQ1RJT04gXHUwMDI2XHUwMDI2XG4tLVxubmV0L3dpcmVsZXNzL25sODAyMTEuYy04OTM5LVx0XHRicmVhaztcbm5ldC93aXJlbGVzcy9ubDgwMjExLmM6ODk0MDpcdGNhc2UgQ0ZHODAyMTFfU1RBX05BTl9NR01UOlxubmV0L3dpcmVsZXNzL25sODAyMTEuYy04OTQxLVx0XHRpZiAocGFyYW1zLVx1MDAzZXN0YV9mbGFnc19tYXNrIFx1MDAyNlxuLS1cbm5ldC93aXJlbGVzcy9ubDgwMjExLmMtODk0NS1cdFx0YnJlYWs7XG5uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jOjg5NDY6XHRjYXNlIENGRzgwMjExX1NUQV9OQU5fREFUQTpcbm5ldC93aXJlbGVzcy9ubDgwMjExLmMtODk0Ny1cdFx0aWYgKHBhcmFtcy1cdTAwM2VzdGFfZmxhZ3NfbWFzayBcdTAwMjZcbi0tXG5uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jLTg5NTktXHQgKi9cbm5ldC93aXJlbGVzcy9ubDgwMjExLmM6ODk2MDpcdGlmIChzdGF0eXBlICE9IENGRzgwMjExX1NUQV9BUF9DTElFTlRfVU5BU1NPQyBcdTAwMjZcdTAwMjZcbm5ldC93aXJlbGVzcy9ubDgwMjExLmM6ODk2MTpcdCAgICBzdGF0eXBlICE9IENGRzgwMjExX1NUQV9URExTX1BFRVJfU0VUVVApXG5uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jLTg5NjItXHRcdHBhcmFtcy1cdTAwM2VsaW5rX3N0YV9wYXJhbXMub3Btb2RlX25vdGlmX3VzZWQgPSBmYWxzZTtcbi0tXG5uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jPTEwODA0PXN0YXRpYyBpbnQgbmw4MDIxMV9nZXRfcmVnX2R1bXAoc3RydWN0IHNrX2J1ZmYgKnNrYixcbi0tXG5uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jLTEwODQ1LVxubmV0L3dpcmVsZXNzL25sODAyMTEuYzoxMDg0NjojaWZkZWYgQ09ORklHX0NGRzgwMjExX0NSREFfU1VQUE9SVFxubmV0L3dpcmVsZXNzL25sODAyMTEuYy0xMDg0Ny1zdGF0aWMgY29uc3Qgc3RydWN0IG5sYV9wb2xpY3kgcmVnX3J1bGVfcG9saWN5W05MODAyMTFfUkVHX1JVTEVfQVRUUl9NQVggJiM0MzsgMV0gPSB7XG4tLVxubmV0L3dpcmVsZXNzL25sODAyMTEuYz0xMDg5Nz1zdGF0aWMgaW50IG5sODAyMTFfc2V0X3JlZyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKVxuLS1cbm5ldC93aXJlbGVzcy9ubDgwMjExLmMtMTA5NzUtfVxubmV0L3dpcmVsZXNzL25sODAyMTEuYzoxMDk3NjojZW5kaWYgLyogQ09ORklHX0NGRzgwMjExX0NSREFfU1VQUE9SVCAqL1xubmV0L3dpcmVsZXNzL25sODAyMTEuYy0xMDk3Ny1cbi0tXG5uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jPTEyMzk5PXN0YXRpYyBpbnQgbmw4MDIxMV9zZW5kX2JzcyhzdHJ1Y3Qgc2tfYnVmZiAqbXNnLCBzdHJ1Y3QgbmV0bGlua19jYWxsYmFjayAqY2IsXG4tLVxubmV0L3dpcmVsZXNzL25sODAyMTEuYy0xMjQ5Ni1cdFx0c3dpdGNoIChyZGV2LVx1MDAzZXdpcGh5LnNpZ25hbF90eXBlKSB7XG5uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jOjEyNDk3Olx0XHRjYXNlIENGRzgwMjExX1NJR05BTF9UWVBFX01CTTpcbm5ldC93aXJlbGVzcy9ubDgwMjExLmMtMTI0OTgtXHRcdFx0aWYgKG5sYV9wdXRfdTMyKG1zZywgTkw4MDIxMV9CU1NfU0lHTkFMX01CTSxcbi0tXG5uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jLTEyNTAxLVx0XHRcdGJyZWFrO1xubmV0L3dpcmVsZXNzL25sODAyMTEuYzoxMjUwMjpcdFx0Y2FzZSBDRkc4MDIxMV9TSUdOQUxfVFlQRV9VTlNQRUM6XG5uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jLTEyNTAzLVx0XHRcdGlmIChubGFfcHV0X3U4KG1zZywgTkw4MDIxMV9CU1NfU0lHTkFMX1VOU1BFQyxcbi0tXG5uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jPTE2NTQzPXN0YXRpYyBpbnQgbmw4MDIxMV9wYXJzZV9uYW5fY29uZihzdHJ1Y3Qgd2lwaHkgKndpcGh5LFxuLS1cbm5ldC93aXJlbGVzcy9ubDgwMjExLmMtMTY1NTctXG5uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jOjE2NTU4Olx0XHRjaGFuZ2VkIHw9IENGRzgwMjExX05BTl9DT05GX0NIQU5HRURfUFJFRjtcbm5ldC93aXJlbGVzcy9ubDgwMjExLmMtMTY1NTktXHR9XG4tLVxubmV0L3dpcmVsZXNzL25sODAyMTEuYy0xNjU3MC1cdFx0Y29uZi1cdTAwM2ViYW5kcyA9IGJhbmRzO1xubmV0L3dpcmVsZXNzL25sODAyMTEuYzoxNjU3MTpcdFx0Y2hhbmdlZCB8PSBDRkc4MDIxMV9OQU5fQ09ORl9DSEFOR0VEX0JBTkRTO1xubmV0L3dpcmVsZXNzL25sODAyMTEuYy0xNjU3Mi1cdH1cbi0tXG5uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jLTE2NTkyLVxubmV0L3dpcmVsZXNzL25sODAyMTEuYzoxNjU5MzpcdGNoYW5nZWQgfD0gQ0ZHODAyMTFfTkFOX0NPTkZfQ0hBTkdFRF9DT05GSUc7XG5uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jLTE2NTk0LVx0aWYgKGF0dHJzW05MODAyMTFfTkFOX0NPTkZfQ0xVU1RFUl9JRF0gXHUwMDI2XHUwMDI2IHN0YXJ0KSB7XG4tLVxubmV0L3dpcmVsZXNzL25sODAyMTEuYz0xNzQwND1ubDgwMjExX3BhcnNlX25hbl9zY2hlZHVsZShzdHJ1Y3QgZ2VubF9pbmZvICppbmZvLCBzdHJ1Y3QgbmxhdHRyICpzbG90c19hdHRyLFxubmV0L3dpcmVsZXNzL25sODAyMTEuYzoxNzQwNTpcdFx0XHQgICB1OCBzY2hlZHVsZVtDRkc4MDIxMV9OQU5fU0NIRURfTlVNX1RJTUVfU0xPVFNdLFxubmV0L3dpcmVsZXNzL25sODAyMTEuYy0xNzQwNi1cdFx0XHQgICB1OCBuX2NoYW5uZWxzKVxubmV0L3dpcmVsZXNzL25sODAyMTEuYy0xNzQwNy17XG5uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jOjE3NDA4Olx0aWYgKFdBUk5fT04obmxhX2xlbihzbG90c19hdHRyKSAhPSBDRkc4MDIxMV9OQU5fU0NIRURfTlVNX1RJTUVfU0xPVFMpKVxubmV0L3dpcmVsZXNzL25sODAyMTEuYy0xNzQwOS1cdFx0cmV0dXJuIC1FSU5WQUw7XG4tLVxubmV0L3dpcmVsZXNzL25sODAyMTEuYy0xNzQxMi1cbm5ldC93aXJlbGVzcy9ubDgwMjExLmM6MTc0MTM6XHRmb3IgKGludCBzbG90ID0gMDsgc2xvdCBcdTAwM2MgQ0ZHODAyMTFfTkFOX1NDSEVEX05VTV9USU1FX1NMT1RTOyBzbG90JiM0MzsmIzQzOykge1xubmV0L3dpcmVsZXNzL25sODAyMTEuYy0xNzQxNC1cdFx0aWYgKHNjaGVkdWxlW3Nsb3RdICE9IE5MODAyMTFfTkFOX1NDSEVEX05PVF9BVkFJTF9TTE9UIFx1MDAyNlx1MDAyNlxuLS1cbm5ldC93aXJlbGVzcy9ubDgwMjExLmM9MTc1MTA9c3RhdGljIGludCBubDgwMjExX25hbl9zZXRfcGVlcl9zY2hlZChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuLS1cbm5ldC93aXJlbGVzcy9ubDgwMjExLmMtMTc2MDQtXHRmb3IgKGludCBqID0gMDsgaiBcdTAwM2MgQVJSQVlfU0laRShzY2hlZC5tYXBzKTsgaiYjNDM7JiM0MzspXG5uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jOjE3NjA1Olx0XHRzY2hlZC5tYXBzW2pdLm1hcF9pZCA9IENGRzgwMjExX05BTl9JTlZBTElEX01BUF9JRDtcbm5ldC93aXJlbGVzcy9ubDgwMjExLmMtMTc2MDYtXG4tLVxubmV0L3dpcmVsZXNzL25sODAyMTEuYz0xOTIzMD1zdGF0aWMgaW50IG5sODAyMTFfc2V0X2h3X3RpbWVzdGFtcChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuLS1cbm5ldC93aXJlbGVzcy9ubDgwMjExLmMtMTkyNDAtXHRpZiAoIWluZm8tXHUwMDNlYXR0cnNbTkw4MDIxMV9BVFRSX01BQ10gXHUwMDI2XHUwMDI2XG5uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jOjE5MjQxOlx0ICAgIHJkZXYtXHUwMDNld2lwaHkuaHdfdGltZXN0YW1wX21heF9wZWVycyAhPSBDRkc4MDIxMV9IV19USU1FU1RBTVBfQUxMX1BFRVJTKVxubmV0L3dpcmVsZXNzL25sODAyMTEuYy0xOTI0Mi1cdFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xuLS1cbm5ldC93aXJlbGVzcy9ubDgwMjExLmM9MTk3MzM9c3RhdGljIGNvbnN0IHN0cnVjdCBnZW5sX3NtYWxsX29wcyBubDgwMjExX3NtYWxsX29wc1tdID0ge1xuLS1cbm5ldC93aXJlbGVzcy9ubDgwMjExLmMtMTk5MDYtXHR9LFxubmV0L3dpcmVsZXNzL25sODAyMTEuYzoxOTkwNzojaWZkZWYgQ09ORklHX0NGRzgwMjExX0NSREFfU1VQUE9SVFxubmV0L3dpcmVsZXNzL25sODAyMTEuYy0xOTkwOC1cdHtcbi0tXG5uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jPTIzNDA3PXZvaWQgY2ZnODAyMTFfc2NoZWR1bGVfY2hhbm5lbHNfY2hlY2soc3RydWN0IHdpcmVsZXNzX2RldiAqd2Rldilcbi0tXG5uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jLTIzNDE0LVx0XHRcdFx0ICAgICBOTDgwMjExX0VYVF9GRUFUVVJFX0RGU19DT05DVVJSRU5UKSB8fFxubmV0L3dpcmVsZXNzL25sODAyMTEuYzoyMzQxNTpcdCAgICAoSVNfRU5BQkxFRChDT05GSUdfQ0ZHODAyMTFfUkVHX1JFTEFYX05PX0lSKSBcdTAwMjZcdTAwMjZcbm5ldC93aXJlbGVzcy9ubDgwMjExLmMtMjM0MTYtXHQgICAgIHdpcGh5LVx1MDAzZXJlZ3VsYXRvcnlfZmxhZ3MgXHUwMDI2IFJFR1VMQVRPUllfRU5BQkxFX1JFTEFYX05PX0lSKSkpXG4tLVxubmV0L3dpcmVsZXNzL3JkZXYtb3BzLmgtNi0gKi9cbm5ldC93aXJlbGVzcy9yZGV2LW9wcy5oOjc6I2lmbmRlZiBfX0NGRzgwMjExX1JERVZfT1BTXG5uZXQvd2lyZWxlc3MvcmRldi1vcHMuaDo4OiNkZWZpbmUgX19DRkc4MDIxMV9SREVWX09QU1xubmV0L3dpcmVsZXNzL3JkZXYtb3BzLmgtOS1cbi0tXG5uZXQvd2lyZWxlc3MvcmRldi1vcHMuaD0xNjI1PXJkZXZfc2V0X2VwY3Moc3RydWN0IGNmZzgwMjExX3JlZ2lzdGVyZWRfZGV2aWNlICpyZGV2LFxuLS1cbm5ldC93aXJlbGVzcy9yZGV2LW9wcy5oLTE2MzgtXG5uZXQvd2lyZWxlc3MvcmRldi1vcHMuaDoxNjM5OiNlbmRpZiAvKiBfX0NGRzgwMjExX1JERVZfT1BTICovXG4tLVxubmV0L3dpcmVsZXNzL3JlZy5jPTQ5Nz1zdGF0aWMgaW50IHJlZ19zY2hlZHVsZV9hcHBseShjb25zdCBzdHJ1Y3QgaWVlZTgwMjExX3JlZ2RvbWFpbiAqcmVnZG9tKVxuLS1cbm5ldC93aXJlbGVzcy9yZWcuYy01MTYtXG5uZXQvd2lyZWxlc3MvcmVnLmM6NTE3OiNpZmRlZiBDT05GSUdfQ0ZHODAyMTFfQ1JEQV9TVVBQT1JUXG5uZXQvd2lyZWxlc3MvcmVnLmMtNTE4LS8qIE1heCBudW1iZXIgb2YgY29uc2VjdXRpdmUgYXR0ZW1wdHMgdG8gY29tbXVuaWNhdGUgd2l0aCBDUkRBICAqL1xuLS1cbm5ldC93aXJlbGVzcy9yZWcuYz01ODY9c3RhdGljIGlubGluZSBpbnQgY2FsbF9jcmRhKGNvbnN0IGNoYXIgKmFscGhhMilcbi0tXG5uZXQvd2lyZWxlc3MvcmVnLmMtNTg5LX1cbm5ldC93aXJlbGVzcy9yZWcuYzo1OTA6I2VuZGlmIC8qIENPTkZJR19DRkc4MDIxMV9DUkRBX1NVUFBPUlQgKi9cbm5ldC93aXJlbGVzcy9yZWcuYy01OTEtXG4tLVxubmV0L3dpcmVsZXNzL3JlZy5jPTY5Nz1zdGF0aWMgYm9vbCB2YWxpZF9jb3VudHJ5KGNvbnN0IHU4ICpkYXRhLCB1bnNpZ25lZCBpbnQgc2l6ZSxcbi0tXG5uZXQvd2lyZWxlc3MvcmVnLmMtNzI5LVxubmV0L3dpcmVsZXNzL3JlZy5jOjczMDojaWZkZWYgQ09ORklHX0NGRzgwMjExX1JFUVVJUkVfU0lHTkVEX1JFR0RCXG5uZXQvd2lyZWxlc3MvcmVnLmMtNzMxLSNpbmNsdWRlIFx1MDAzY2tleXMvYXN5bW1ldHJpYy10eXBlLmhcdTAwM2Vcbi0tXG5uZXQvd2lyZWxlc3MvcmVnLmM9NzM1PXN0YXRpYyBpbnQgX19pbml0IGxvYWRfYnVpbHRpbl9yZWdkYl9rZXlzKHZvaWQpXG4tLVxubmV0L3dpcmVsZXNzL3JlZy5jLTc0Ny1cbm5ldC93aXJlbGVzcy9yZWcuYzo3NDg6I2lmZGVmIENPTkZJR19DRkc4MDIxMV9VU0VfS0VSTkVMX1JFR0RCX0tFWVNcbm5ldC93aXJlbGVzcy9yZWcuYy03NDktXHR4NTA5X2xvYWRfY2VydGlmaWNhdGVfbGlzdChzaGlwcGVkX3JlZ2RiX2NlcnRzLFxuLS1cbm5ldC93aXJlbGVzcy9yZWcuYy03NTItI2VuZGlmXG5uZXQvd2lyZWxlc3MvcmVnLmM6NzUzOiNpZmRlZiBDT05GSUdfQ0ZHODAyMTFfRVhUUkFfUkVHREJfS0VZRElSXG5uZXQvd2lyZWxlc3MvcmVnLmM6NzU0Olx0aWYgKENPTkZJR19DRkc4MDIxMV9FWFRSQV9SRUdEQl9LRVlESVJbMF0gIT0gJiMzOTtcXDAmIzM5Oylcbm5ldC93aXJlbGVzcy9yZWcuYy03NTUtXHRcdHg1MDlfbG9hZF9jZXJ0aWZpY2F0ZV9saXN0KGV4dHJhX3JlZ2RiX2NlcnRzLFxuLS1cbm5ldC93aXJlbGVzcy9yZWcuYz03OTg9c3RhdGljIHZvaWQgZnJlZV9yZWdkYl9rZXlyaW5nKHZvaWQpXG4tLVxubmV0L3dpcmVsZXNzL3JlZy5jLTgwMC19XG5uZXQvd2lyZWxlc3MvcmVnLmM6ODAxOiNlbmRpZiAvKiBDT05GSUdfQ0ZHODAyMTFfUkVRVUlSRV9TSUdORURfUkVHREIgKi9cbm5ldC93aXJlbGVzcy9yZWcuYy04MDItXG4tLVxubmV0L3dpcmVsZXNzL3JlZy5jPTIwMzg9Ym9vbCByZWdfbGFzdF9yZXF1ZXN0X2NlbGxfYmFzZSh2b2lkKVxuLS1cbm5ldC93aXJlbGVzcy9yZWcuYy0yMDQyLVxubmV0L3dpcmVsZXNzL3JlZy5jOjIwNDM6I2lmZGVmIENPTkZJR19DRkc4MDIxMV9SRUdfQ0VMTFVMQVJfSElOVFNcbm5ldC93aXJlbGVzcy9yZWcuYy0yMDQ0LS8qIENvcmUgc3BlY2lmaWMgY2hlY2sgKi9cbi0tXG5uZXQvd2lyZWxlc3Mvc2Nhbi5jPTIzMD1zdGF0aWMgc2l6ZV90IGNmZzgwMjExX2NvcHlfZWxlbV93aXRoX2ZyYWdzKGNvbnN0IHN0cnVjdCBlbGVtZW50ICplbGVtLFxuLS1cbm5ldC93aXJlbGVzcy9zY2FuLmMtMjY3LVxubmV0L3dpcmVsZXNzL3NjYW4uYzoyNjg6VklTSUJMRV9JRl9DRkc4MDIxMV9LVU5JVCBzaXplX3Rcbm5ldC93aXJlbGVzcy9zY2FuLmMtMjY5LWNmZzgwMjExX2dlbl9uZXdfaWUoY29uc3QgdTggKmllLCBzaXplX3QgaWVsZW4sXG4tLVxubmV0L3dpcmVsZXNzL3NjYW4uYy00MDYtfVxubmV0L3dpcmVsZXNzL3NjYW4uYzo0MDc6RVhQT1JUX1NZTUJPTF9JRl9DRkc4MDIxMV9LVU5JVChjZmc4MDIxMV9nZW5fbmV3X2llKTtcbm5ldC93aXJlbGVzcy9zY2FuLmMtNDA4LVxuLS1cbm5ldC93aXJlbGVzcy9zY2FuLmM9NTQ2PXN0YXRpYyBpbnQgY2ZnODAyMTFfY2FsY19zaG9ydF9zc2lkKGNvbnN0IHN0cnVjdCBjZmc4MDIxMV9ic3NfaWVzICppZXMsXG4tLVxubmV0L3dpcmVsZXNzL3NjYW4uYy01NTctXG5cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNSAwMTowNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNjAxNgoJCQkJCQkJb3V0cHV0OiAzNQoJCQkJCQkJdGhvdWdodHM6IDI4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRha2Ugb24gdGhlIHByb2Nlc3MsIGNvbnNpZGVyaW5nIG15IGV4cGVydGlzZToKCioqRGlzc2VjdGluZyB3aXBoeV91bnJlZ2lzdGVyKCkgYW5kIGNmZzgwMjExX3JkZXZfbGlzdCBNYW5pcHVsYXRpb24qKgoKT2theSwgc28gSSYjMzk7bSBkaWdnaW5nIGludG8gYHdpcGh5X3VucmVnaXN0ZXIoKWAgYW5kLCBhcyB1c3VhbCwgbXkgZmlyc3QgdGhvdWdodCBpcywgJiMzNDtXaGVyZSYjMzk7cyB0aGUgY3JpdGljYWwgc2VjdGlvbj8gSG93IGFyZSB3ZSBwcm90ZWN0aW5nIGBjZmc4MDIxMV9yZGV2X2xpc3RgPyYjMzQ7LiBJIGtub3cgdGhlIGxpc3QgaXMgbGlrZWx5IHByb3RlY3RlZCBieSBhIG11dGV4IG9yIHNwaW5sb2NrLCBhbmQgSSBuZWVkIHRvIGlkZW50aWZ5IHdoaWNoIG9uZSBhbmQgdW5kZXJzdGFuZCB0aGUgbG9ja2luZyBvcmRlciwgZXNwZWNpYWxseSBnaXZlbiB0aGF0IGl0IGlzIGEgZ2xvYmFsIHJlc291cmNlLiBJJiMzOTttIGxvb2tpbmcgZm9yIHRoZSBkYW5jZSBvZiBhY3F1aXJpbmcgYW5kIHJlbGVhc2luZyB0aGF0IGxvY2suIElzIGl0IGEgc2ltcGxlIGxvY2tpbmcgc2NoZW1lLCBvciBzb21ldGhpbmcgbW9yZSBjb21wbGV4IHdpdGggcmVhZGVyL3dyaXRlciBsb2Nrcz8gVGhpcyBpcyBjcml0aWNhbCBmb3IgcHJldmVudGluZyByYWNlIGNvbmRpdGlvbnMsIHBhcnRpY3VsYXJseSBkdXJpbmcgdGhlIHVucmVnaXN0cmF0aW9uIHByb2Nlc3Mgd2hlbiBkZXZpY2VzIGFyZSBsaWtlbHkgYmVpbmcgcmVtb3ZlZCBvciBkZWluaXRpYWxpemVkLiBJJiMzOTttIHdvbmRlcmluZyBpZiB0aGVyZSBhcmUgYW55IGNhbGxiYWNrcyBvciBoYW5kbGVycyB0aGF0IGFsc28gYWNjZXNzIHRoYXQgZ2xvYmFsIGxpc3QgYW5kIHRoYXQgbXVzdCBiZSBjb25zaWRlcmVkIHdpdGggdGhlIHN5bmNocm9uaXphdGlvbiBwcmltaXRpdmUuIEkgZXhwZWN0IHRvIHNlZSB0aGUgY29kZSBjYXJlZnVsbHkgaXRlcmF0aW5nIHRocm91Z2ggYGNmZzgwMjExX3JkZXZfbGlzdGAgYW5kLCBhdCBlYWNoIHN0YWdlLCBzYWZlbHkgaGFuZGxpbmcgdGhlIGRlYWxsb2NhdGlvbiBvZiB0aGUgYHdpcGh5YCBzdHJ1Y3R1cmUuIEkgbmVlZCB0byBzZWUgaG93IHRoZXkmIzM5O3JlIGhhbmRsaW5nIHJlZmVyZW5jZXMsIGlmIHRoZXJlJiMzOTtzIGFueSByZWZjb3VudGluZyBoYXBwZW5pbmcsIG9yIGlmIHNvbWUgb3RoZXIgbWVjaGFuaXNtIGV4aXN0cyB0byBwcmV2ZW50IHVzZS1hZnRlci1mcmVlIHNjZW5hcmlvcy4gSSYjMzk7bSBwYXJ0aWN1bGFybHkgaW50ZXJlc3RlZCBpbiB0aGUgaW50ZXJhY3Rpb24gd2l0aCB0aGUgcmVndWxhdG9yeSBkb21haW4gaGFuZGxpbmc7IGlzIHRoZXJlIGFueXRoaW5nIHNwZWNpZmljIGhhcHBlbmluZyB0aGVyZSB0aGF0IG5lZWRzIHRvIGJlIGNvbnNpZGVyZWQgaW4gdGhlIHVucmVnaXN0cmF0aW9uPyBUaGlzIGlzIHR5cGljYWxseSB3aGVyZSB0aGluZ3MgY2FuIGdldCB0cmlja3kuIEFsc28sIHdoYXQgaGFwcGVucyB3aXRoIGFueSBwZW5kaW5nIG9wZXJhdGlvbnMgb3Igd29ya3F1ZXVlcyBhc3NvY2lhdGVkIHdpdGggdGhlIGB3aXBoeWA/IFRoZXNlIG5lZWQgdG8gYmUgZmx1c2hlZCBvciBjYW5jZWxsZWQgZ3JhY2VmdWxseS4gSSBhbHNvIG11c3QgZXZhbHVhdGUgdGhlIHBvdGVudGlhbCBmb3IgZGVhZGxvY2tzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA1IDAxOjA0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NmZzgwMjExX3JkZXZfbGlzdCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC93aXJlbGVzcy8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L3dpcmVsZXNzL2NvcmUuYz00Mz1NT0RVTEVfQUxJQVNfR0VOTF9GQU1JTFkoTkw4MDIxMV9HRU5MX05BTUUpO1xuLS1cbm5ldC93aXJlbGVzcy9jb3JlLmMtNDUtLyogUkNVLXByb3RlY3RlZCAoYW5kIFJUTkwgZm9yIHdyaXRlcnMpICovXG5uZXQvd2lyZWxlc3MvY29yZS5jOjQ2OkxJU1RfSEVBRChjZmc4MDIxMV9yZGV2X2xpc3QpO1xubmV0L3dpcmVsZXNzL2NvcmUuYzo0NzppbnQgY2ZnODAyMTFfcmRldl9saXN0X2dlbmVyYXRpb247XG5uZXQvd2lyZWxlc3MvY29yZS5jLTQ4LVxuLS1cbm5ldC93aXJlbGVzcy9jb3JlLmM9ODUzPWludCB3aXBoeV9yZWdpc3RlcihzdHJ1Y3Qgd2lwaHkgKndpcGh5KVxuLS1cbm5ldC93aXJlbGVzcy9jb3JlLmMtMTE2NS1cbm5ldC93aXJlbGVzcy9jb3JlLmM6MTE2NjpcdGxpc3RfYWRkX3JjdShcdTAwMjZyZGV2LVx1MDAzZWxpc3QsIFx1MDAyNmNmZzgwMjExX3JkZXZfbGlzdCk7XG5uZXQvd2lyZWxlc3MvY29yZS5jOjExNjc6XHRjZmc4MDIxMV9yZGV2X2xpc3RfZ2VuZXJhdGlvbiYjNDM7JiM0Mzs7XG5uZXQvd2lyZWxlc3MvY29yZS5jLTExNjgtXG4tLVxubmV0L3dpcmVsZXNzL2NvcmUuYz0xMjkwPXZvaWQgd2lwaHlfdW5yZWdpc3RlcihzdHJ1Y3Qgd2lwaHkgKndpcGh5KVxuLS1cbm5ldC93aXJlbGVzcy9jb3JlLmMtMTMyNC1cbm5ldC93aXJlbGVzcy9jb3JlLmM6MTMyNTpcdGNmZzgwMjExX3JkZXZfbGlzdF9nZW5lcmF0aW9uJiM0MzsmIzQzOztcbm5ldC93aXJlbGVzcy9jb3JlLmMtMTMyNi1cdGRldmljZV9kZWwoXHUwMDI2cmRldi1cdTAwM2V3aXBoeS5kZXYpO1xuLS1cbm5ldC93aXJlbGVzcy9jb3JlLmg9MTY2PWV4dGVybiBzdHJ1Y3Qgd29ya3F1ZXVlX3N0cnVjdCAqY2ZnODAyMTFfd3E7XG5uZXQvd2lyZWxlc3MvY29yZS5oOjE2NzpleHRlcm4gc3RydWN0IGxpc3RfaGVhZCBjZmc4MDIxMV9yZGV2X2xpc3Q7XG5uZXQvd2lyZWxlc3MvY29yZS5oOjE2ODpleHRlcm4gaW50IGNmZzgwMjExX3JkZXZfbGlzdF9nZW5lcmF0aW9uO1xubmV0L3dpcmVsZXNzL2NvcmUuaC0xNjktXG4tLVxubmV0L3dpcmVsZXNzL2NvcmUuaD0xNzE9c3RhdGljIGlubGluZSBpbnQgZm9yX2VhY2hfcmRldl9jaGVja19ydG5sKHZvaWQpXG4tLVxubmV0L3dpcmVsZXNzL2NvcmUuaC0xNzctXHRpZiAoZm9yX2VhY2hfcmRldl9jaGVja19ydG5sKCkpIHt9IGVsc2VcdFx0XHRcdFxcXG5uZXQvd2lyZWxlc3MvY29yZS5oOjE3ODpcdFx0bGlzdF9mb3JfZWFjaF9lbnRyeShyZGV2LCBcdTAwMjZjZmc4MDIxMV9yZGV2X2xpc3QsIGxpc3QpXG5uZXQvd2lyZWxlc3MvY29yZS5oLTE3OS1cbi0tXG5uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jPTMwNTc9c3RhdGljIGludCBubDgwMjExX3NlbmRfd2lwaHkoc3RydWN0IGNmZzgwMjExX3JlZ2lzdGVyZWRfZGV2aWNlICpyZGV2LFxuLS1cbm5ldC93aXJlbGVzcy9ubDgwMjExLmMtMzA4My1cdCAgICBubGFfcHV0X3UzMihtc2csIE5MODAyMTFfQVRUUl9HRU5FUkFUSU9OLFxubmV0L3dpcmVsZXNzL25sODAyMTEuYzozMDg0Olx0XHRcdGNmZzgwMjExX3JkZXZfbGlzdF9nZW5lcmF0aW9uKSlcbm5ldC93aXJlbGVzcy9ubDgwMjExLmMtMzA4NS1cdFx0Z290byBubGFfcHV0X2ZhaWx1cmU7XG4tLVxubmV0L3dpcmVsZXNzL25sODAyMTEuYz00NjU5PXN0YXRpYyBpbnQgbmw4MDIxMV9zZW5kX2lmYWNlKHN0cnVjdCBza19idWZmICptc2csIHUzMiBwb3J0aWQsIHUzMiBzZXEsIGludCBmbGFncyxcbi0tXG5uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jLTQ2ODgtXHRcdFx0cmRldi1cdTAwM2VkZXZsaXN0X2dlbmVyYXRpb24gXlxubmV0L3dpcmVsZXNzL25sODAyMTEuYzo0Njg5Olx0XHRcdChjZmc4MDIxMV9yZGV2X2xpc3RfZ2VuZXJhdGlvbiBcdTAwM2NcdTAwM2MgMikpIHx8XG5uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jLTQ2OTAtXHQgICAgbmxhX3B1dF91OChtc2csIE5MODAyMTFfQVRUUl80QUREUiwgd2Rldi1cdTAwM2V1c2VfNGFkZHIpIHx8XG4tLVxubmV0L3dpcmVsZXNzL25sODAyMTEuYz0xMDgwND1zdGF0aWMgaW50IG5sODAyMTFfZ2V0X3JlZ19kdW1wKHN0cnVjdCBza19idWZmICpza2IsXG4tLVxubmV0L3dpcmVsZXNzL25sODAyMTEuYy0xMDgyMi1cdHJlZ19pZHggPSAxO1xubmV0L3dpcmVsZXNzL25sODAyMTEuYzoxMDgyMzpcdGxpc3RfZm9yX2VhY2hfZW50cnlfcmN1KHJkZXYsIFx1MDAyNmNmZzgwMjExX3JkZXZfbGlzdCwgbGlzdCkge1xubmV0L3dpcmVsZXNzL25sODAyMTEuYy0xMDgyNC1cdFx0cmVnZG9tID0gZ2V0X3dpcGh5X3JlZ2RvbShcdTAwMjZyZGV2LVx1MDAzZXdpcGh5KTtcbi0tXG5uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jPTIzMTE1PXN0YXRpYyBpbnQgbmw4MDIxMV9uZXRsaW5rX25vdGlmeShzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgKiBuYixcbi0tXG5uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jLTIzMTI4LVxubmV0L3dpcmVsZXNzL25sODAyMTEuYzoyMzEyOTpcdGxpc3RfZm9yX2VhY2hfZW50cnlfcmN1KHJkZXYsIFx1MDAyNmNmZzgwMjExX3JkZXZfbGlzdCwgbGlzdCkge1xubmV0L3dpcmVsZXNzL25sODAyMTEuYy0yMzEzMC1cdFx0c3RydWN0IGNmZzgwMjExX3NjaGVkX3NjYW5fcmVxdWVzdCAqc2NoZWRfc2Nhbl9yZXE7XG4tLVxubmV0L3dpcmVsZXNzL3JlZy5jPTI0NjQ9c3RhdGljIHZvaWQgcmVnX2NoZWNrX2NoYW5zX3dvcmsoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxuLS1cbm5ldC93aXJlbGVzcy9yZWcuYy0yNDc1LVx0cmN1X3JlYWRfbG9jaygpO1xubmV0L3dpcmVsZXNzL3JlZy5jOjI0NzY6XHRsaXN0X2Zvcl9lYWNoX2VudHJ5X3JjdShyZGV2LCBcdTAwMjZjZmc4MDIxMV9yZGV2X2xpc3QsIGxpc3QpIHtcbm5ldC93aXJlbGVzcy9yZWcuYy0yNDc3LVx0XHRyY3VfcmVhZF91bmxvY2soKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNSAwMTowNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNzgxMAoJCQkJCQkJb3V0cHV0OiAzMQoJCQkJCQkJdGhvdWdodHM6IDEwOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipFeGFtaW5pbmcgdGhlIFdpcmVsZXNzIFJlZ3VsYXRvcnkgRG9tYWluIENvbmZpZ3VyYXRpb24qKgoKQWxyaWdodCwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gTXkgaW5pdGlhbCBodW5jaCBpcyBjb25maXJtZWQ6IGBuZXQvd2lyZWxlc3MvcmVnLmNgIGlzIGRlZmluaXRlbHkgYnJvdWdodCBpbnRvIHRoZSBidWlsZCBwcm9jZXNzIHdoZW4gYENPTkZJR19DRkc4MDIxMWAgaXMgZW5hYmxlZC4gVGltZSB0byB2ZXJpZnkgdGhhdCBhc3N1bXB0aW9uLiBMZXQmIzM5O3MgZGlnIGludG8gYG5ldC93aXJlbGVzcy9NYWtlZmlsZWAuIFl1cCwganVzdCBhcyBleHBlY3RlZCwgdGhlIGBvYmotJChDT05GSUdfQ0ZHODAyMTEpICYjNDM7PSBjZmc4MDIxMS5vYCBsaW5lIGNsZWFybHkgc2hvd3MgdGhlIGNvbmRpdGlvbmFsIGluY2x1c2lvbi4gQW5kIHRoZXJlIGl0IGlzLCBpbnNpZGUgdGhlIGBjZmc4MDIxMS15YCB2YXJpYWJsZSBkZWZpbml0aW9uOiBgcmVnLm9gIGlzIGluZGVlZCBiZWluZyBjb21waWxlZCBhbG9uZyB3aXRoIHRoZSBvdGhlciBjb3JlIG1vZHVsZXMuIEFsd2F5cyBnb29kIHRvIGRvdWJsZSBjaGVjaywgc28gbGV0JiMzOTtzIG1ha2Ugc3VyZSB0aGF0JiMzOTtzIGNvcnJlY3QsIGdvaW5nIGJhY2sgdG8gdGhlIGBuZXQvd2lyZWxlc3MvTWFrZWZpbGVgIHRvIGNvbmZpcm0uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA1IDAxOjA0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L3dpcmVsZXNzL01ha2VmaWxlJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAzMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgICAxOlx0IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxuICAgMjpcdG9iai0kKENPTkZJR19DRkc4MDIxMSkgJiM0Mzs9IGNmZzgwMjExLm9cbiAgIDM6XHRvYmoteSAmIzQzOz0gdGVzdHMvXG4gICA0Olx0XG4gICA1Olx0b2JqLSQoQ09ORklHX1dFWFRfQ09SRSkgJiM0Mzs9IHdleHQtY29yZS5vXG4gICA2Olx0b2JqLSQoQ09ORklHX1dFWFRfUFJPQykgJiM0Mzs9IHdleHQtcHJvYy5vXG4gICA3Olx0b2JqLSQoQ09ORklHX1dFWFRfUFJJVikgJiM0Mzs9IHdleHQtcHJpdi5vXG4gICA4Olx0XG4gICA5Olx0Y2ZnODAyMTEteSAmIzQzOz0gY29yZS5vIHN5c2ZzLm8gcmFkaW90YXAubyB1dGlsLm8gcmVnLm8gc2Nhbi5vIG5sODAyMTEub1xuICAxMDpcdGNmZzgwMjExLXkgJiM0Mzs9IG1sbWUubyBpYnNzLm8gc21lLm8gY2hhbi5vIGV0aHRvb2wubyBtZXNoLm8gYXAubyB0cmFjZS5vIG9jYi5vXG4gIDExOlx0Y2ZnODAyMTEteSAmIzQzOz0gbWljaGFlbC1taWMubyBwbXNyLm9cbiAgMTI6XHRjZmc4MDIxMS0kKENPTkZJR19PRikgJiM0Mzs9IG9mLm9cbiAgMTM6XHRjZmc4MDIxMS0kKENPTkZJR19DRkc4MDIxMV9ERUJVR0ZTKSAmIzQzOz0gZGVidWdmcy5vXG4gIDE0Olx0Y2ZnODAyMTEtJChDT05GSUdfQ0ZHODAyMTFfV0VYVCkgJiM0Mzs9IHdleHQtY29tcGF0Lm8gd2V4dC1zbWUub1xuICAxNTpcdFxuICAxNjpcdENGTEFHU190cmFjZS5vIDo9IC1JJChzcmMpXG4gIDE3Olx0XG4gIDE4Olx0Y2ZnODAyMTEtJChDT05GSUdfQ0ZHODAyMTFfVVNFX0tFUk5FTF9SRUdEQl9LRVlTKSAmIzQzOz0gc2hpcHBlZC1jZXJ0cy5vXG4gIDE5Olx0aWZuZXEgKCQoQ09ORklHX0NGRzgwMjExX0VYVFJBX1JFR0RCX0tFWURJUiksKVxuICAyMDpcdGNmZzgwMjExLXkgJiM0Mzs9IGV4dHJhLWNlcnRzLm9cbiAgMjE6XHRlbmRpZlxuICAyMjpcdFxuICAyMzpcdCQob2JqKS9zaGlwcGVkLWNlcnRzLmM6ICQoc29ydCAkKHdpbGRjYXJkICQoc3JjKS9jZXJ0cy8qLmhleCkpXG4gIDI0Olx0XHRAJChrZWNobykgXCYjMzQ7ICBHRU4gICAgICRAXCYjMzQ7XG4gIDI1Olx0XHQkKFEpKGVjaG8gJiMzOTsjaW5jbHVkZSBcJiMzNDtyZWcuaFwmIzM0OyYjMzk7OyBcXFxuICAyNjpcdFx0ICBlY2hvICYjMzk7Y29uc3QgdTggc2hpcHBlZF9yZWdkYl9jZXJ0c1tdID0geyYjMzk7OyBcXFxuICAyNzpcdFx0ICBlY2hvIHwgY2F0IC0gJF4gOyBcXFxuICAyODpcdFx0ICBlY2hvICYjMzk7fTsmIzM5OzsgXFxcbiAgMjk6XHRcdCAgZWNobyAmIzM5O3Vuc2lnbmVkIGludCBzaGlwcGVkX3JlZ2RiX2NlcnRzX2xlbiA9IHNpemVvZihzaGlwcGVkX3JlZ2RiX2NlcnRzKTsmIzM5OzsgXFxcbiAgMzA6XHRcdCApIFx1MDAzZSAkQFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNSAwMTowNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxODc2NwoJCQkJCQkJb3V0cHV0OiAzMgoJCQkJCQkJdGhvdWdodHM6IDI0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIGEgc3VtbWFyeSBvZiBteSB0aG91Z2h0IHByb2Nlc3M6CgoqKkRpdmluZyBpbnRvIHRoZSBLZXJuZWwgV2lyZWxlc3MgQ29uZmlndXJhdGlvbioqCgpPa2F5LCBzbyBJIG5lZWQgdG8gZmlndXJlIG91dCB0aGUgZGVwZW5kZW5jaWVzIHJlbGF0ZWQgdG8gYENGRzgwMjExYC4gVGltZSB0byBoZWFkIHN0cmFpZ2h0IHRvIHRoZSBzb3VyY2Ug4oCTIGBuZXQvd2lyZWxlc3MvS2NvbmZpZ2AuIFRoYXQmIzM5O3Mgd2hlcmUgYWxsIHRoZSBrZXJuZWwgd2lyZWxlc3MgY29uZmlndXJhdGlvbiBvcHRpb25zIGFyZSBkZWZpbmVkLCBhbmQgYENGRzgwMjExYCBpcyBvYnZpb3VzbHkgYSBjb3JlIGNvbXBvbmVudCBvZiB0aGF0LiBJJiMzOTtsbCBuZWVkIHRvIGNhcmVmdWxseSBleGFtaW5lIHRoYXQgZmlsZSB0byB1bmRlcnN0YW5kIHdoaWNoIG90aGVyIG9wdGlvbnMsIGZlYXR1cmVzLCBvciBtb2R1bGVzIHJlbHkgb24gb3IgYXJlIGxpbmtlZCB0byBgQ0ZHODAyMTFgLiBVbmRlcnN0YW5kaW5nIHRob3NlIGRlcGVuZGVuY2llcyBpcyBjcnVjaWFsIGZvciBhbnkgbW9kaWZpY2F0aW9ucyBvciBkZWVwZXIgYW5hbHlzaXMgSSYjMzk7bSBwbGFubmluZy4gSSBuZWVkIHRvIGVuc3VyZSBub3RoaW5nIGJyZWFrcyB1bmV4cGVjdGVkbHkgbGF0ZXIgb24gZG93biB0aGUgbGluZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDUgMDE6MDQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvd2lyZWxlc3MvS2NvbmZpZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDEsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7ICAgMTpcdCMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxuICAgMjpcdGNvbmZpZyBXSVJFTEVTU19FWFRcbiAgIDM6XHRcdGJvb2xcbiAgIDQ6XHRcbiAgIDU6XHRjb25maWcgV0VYVF9DT1JFXG4gICA2Olx0XHRkZWZfYm9vbCB5XG4gICA3Olx0XHRkZXBlbmRzIG9uIENGRzgwMjExX1dFWFQgfHwgV0lSRUxFU1NfRVhUXG4gICA4Olx0XG4gICA5Olx0Y29uZmlnIFdFWFRfUFJPQ1xuICAxMDpcdFx0ZGVmX2Jvb2wgeVxuICAxMTpcdFx0ZGVwZW5kcyBvbiBQUk9DX0ZTXG4gIDEyOlx0XHRkZXBlbmRzIG9uIFdFWFRfQ09SRVxuICAxMzpcdFxuICAxNDpcdGNvbmZpZyBXRVhUX1BSSVZcbiAgMTU6XHRcdGJvb2xcbiAgMTY6XHRcbiAgMTc6XHRjb25maWcgQ0ZHODAyMTFcbiAgMTg6XHRcdHRyaXN0YXRlIFwmIzM0O2NmZzgwMjExIC0gd2lyZWxlc3MgY29uZmlndXJhdGlvbiBBUElcJiMzNDtcbiAgMTk6XHRcdGRlcGVuZHMgb24gUkZLSUxMIHx8ICFSRktJTExcbiAgMjA6XHRcdHNlbGVjdCBGV19MT0FERVJcbiAgMjE6XHRcdHNlbGVjdCBDUkMzMlxuICAyMjpcdFx0IyBtYXkgbmVlZCB0byB1cGRhdGUgdGhpcyB3aGVuIGNlcnRpZmljYXRlcyBhcmUgY2hhbmdlZCBhbmQgYXJlXG4gIDIzOlx0XHQjIHVzaW5nIGEgZGlmZmVyZW50IGFsZ29yaXRobSwgdGhvdWdoIHJpZ2h0IG5vdyB0aGV5IHNob3VsZG4mIzM5O3RcbiAgMjQ6XHRcdCMgKHRoaXMgaXMgaGVyZSByYXRoZXIgdGhhbiBiZWxvdyB0byBhbGxvdyBpdCB0byBiZSBhIG1vZHVsZSlcbiAgMjU6XHRcdHNlbGVjdCBDUllQVE9fU0hBMjU2IGlmIENGRzgwMjExX1VTRV9LRVJORUxfUkVHREJfS0VZU1xuICAyNjpcdFx0aGVscFxuICAyNzpcdFx0ICBjZmc4MDIxMSBpcyB0aGUgTGludXggd2lyZWxlc3MgTEFOICg4MDIuMTEpIGNvbmZpZ3VyYXRpb24gQVBJLlxuICAyODpcdFx0ICBFbmFibGUgdGhpcyBpZiB5b3UgaGF2ZSBhIHdpcmVsZXNzIGRldmljZS5cbiAgMjk6XHRcbiAgMzA6XHRcdCAgRm9yIG1vcmUgaW5mb3JtYXRpb24gcmVmZXIgdG8gZG9jdW1lbnRhdGlvbiBvbiB0aGUgd2lyZWxlc3Mgd2lraTpcbiAgMzE6XHRcbiAgMzI6XHRcdCAgaHR0cHM6Ly93aXJlbGVzcy53aWtpLmtlcm5lbC5vcmcvZW4vZGV2ZWxvcGVycy9Eb2N1bWVudGF0aW9uL2NmZzgwMjExXG4gIDMzOlx0XG4gIDM0Olx0XHQgIFdoZW4gYnVpbHQgYXMgYSBtb2R1bGUgaXQgd2lsbCBiZSBjYWxsZWQgY2ZnODAyMTEuXG4gIDM1Olx0XG4gIDM2Olx0aWYgQ0ZHODAyMTFcbiAgMzc6XHRcbiAgMzg6XHRjb25maWcgTkw4MDIxMV9URVNUTU9ERVxuICAzOTpcdFx0Ym9vbCBcJiMzNDtubDgwMjExIHRlc3Rtb2RlIGNvbW1hbmRcJiMzNDtcbiAgNDA6XHRcdGhlbHBcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDUgMDE6MDQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTk1MTUKCQkJCQkJCW91dHB1dDogMzAKCQkJCQkJCXRob3VnaHRzOiA1MTAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBSZWd1bGF0b3J5IERvbWFpbiBDaGFuZ2UgaW4gYG5ldC93aXJlbGVzcy9yZWcuY2AqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIGRvd24gdGhpcyBjb2RlIGNoYW5nZSBpbiBgbmV0L3dpcmVsZXNzL3JlZy5jYC4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIGlkZW50aWZ5IGV4YWN0bHkgKndoYXQqIGNoYW5nZWQgYW5kIHdoeS4gSSBzZWUgdGhlIG1vZGlmaWNhdGlvbiB3aXRoaW4gYHJlZ19jaGVja19jaGFuc193b3JrYCwgYSBjcml0aWNhbCBmdW5jdGlvbiBpbnZvbHZlZCBpbiB2ZXJpZnlpbmcgYWN0aXZlIHdpcmVsZXNzIGludGVyZmFjZXMgYWZ0ZXIgYSByZWd1bGF0b3J5IGNoYW5nZS4KCkJlZm9yZSwgaXQgd2FzIGEgc3RyYWlnaHRmb3J3YXJkIGxvb3AsIGhvbGRpbmcgdGhlIGBydG5sX2xvY2tgIHdoaWxlIGl0ZXJhdGluZyB0aHJvdWdoIHJlZ2lzdGVyZWQgZGV2aWNlcyBhbmQgY2FsbGluZyBgcmVnX2xlYXZlX2ludmFsaWRfY2hhbnNgLiAgTm93LCBpdCYjMzk7cyBiZWVuIHJlZmFjdG9yZWQuIFRoZSBrZXkgZGlmZmVyZW5jZSBpcyB0aGUgaW50cm9kdWN0aW9uIG9mIGByY3VfcmVhZF9sb2NrYCBhbmQgYHJjdV9yZWFkX3VubG9ja2Agc3Vycm91bmRpbmcgYSBgbGlzdF9mb3JfZWFjaF9lbnRyeV9yY3VgIGl0ZXJhdGlvbiwgd2l0aCBgcnRubF9sb2NrYCBhbmQgYHJ0bmxfdW5sb2NrYCBuZXN0ZWQgd2l0aGluLiBUaGUgY29tbWVudCBleHBsYWluaW5nIHRoaXMgY2hhbmdlIGlzIHRoZSBpbXBvcnRhbnQgY2x1ZTogdGhpcyB3YXMgZG9uZSB0byBhZGRyZXNzIHBvdGVudGlhbCBzdGFydmF0aW9uIG9mIG90aGVyIFJUTkwgd2FpdGVycyBiZWNhdXNlIGBjZmc4MDIxMV9sZWF2ZWAgY2FuIGJlIHNsb3csIGFuZCB0byBhdm9pZCBpc3N1ZXMgYXJvdW5kIHJkZXYgdW5yZWdpc3RyYXRpb24uIFNwZWNpZmljYWxseSwgYHdpcGh5X3VucmVnaXN0ZXJgIGhvbGRzIGBydG5sX2xvY2tgIGFjcm9zcyBgbGlzdF9kZWxfcmN1YCBhbmQgYHN5bmNocm9uaXplX3JjdWAsIHNvIHRoZSBgcmRldmAgY2FuJiMzOTt0IGJlIGZyZWVkIHdoaWxlIHRoZSBgcnRubF9sb2NrYCBpcyBoZWxkLiBTbywgdGhlIG9yaWdpbmFsIGxvY2sgaGVsZCB0aGUgUlROTCBsb2NrIHRvbyBsb25nLiBUaGUgY2hhbmdlIGVuc3VyZXMgUlROTCBpcyBoZWxkIG9uIGEgcGVyLWRldmljZSBiYXNpcy4KCk5vdywgdGhlIGltcG9ydGFudCBxdWVzdGlvbiBmb3IgbXkgd29yayBpczogSXMgdGhpcyBjb2RlIHBhdGggcmVhY2hhYmxlLCBwYXJ0aWN1bGFybHkgd2l0aGluIG15IHN0YW5kYXJkIHRlc3RpbmcgZW52aXJvbm1lbnRzLCBsaWtlIHN5emthbGxlciBvciB2aXJ0dWFsaXplZCBzZXR1cHM/IEFic29sdXRlbHkuIFRoZSBgY2ZnODAyMTFgIHN1YnN5c3RlbSwgY291cGxlZCB3aXRoIGBtYWM4MDIxMWAgYW5kIGBtYWM4MDIxMV9od3NpbWAsIHByb3ZpZGVzIG11bHRpcGxlIGF2ZW51ZXMuIFJlZ3VsYXRvcnkgZG9tYWluIGNoYW5nZXMgdmlhIE5MODAyMTEgY29tbWFuZHMsIGxpa2UgYE5MODAyMTFfQ01EX1JFUV9TRVRfUkVHYCwgdHJpZ2dlciBgcmVnX2NoZWNrX2NoYW5uZWxzKClgIG9yLCBhcyBJIHNlZSBoZXJlLCB0aGUgZGVsYXllZCB3b3JrIGZ1bmN0aW9uIHRoYXQgdWx0aW1hdGVseSBsZWFkcyB0byB0aGlzIGByZWdfY2hlY2tfY2hhbnNfd29ya2AgY2FsbC4KCk15IG5leHQgaW1tZWRpYXRlIHN0ZXAgaXMgdG8gdHJhY2UgdGhlIGNhbGwgcGF0aHMgdG8gY29uZmlybSwgaW4gZGV0YWlsLCB3aGVyZSBgcmVnX2NoZWNrX2NoYW5uZWxzYCBvciBgcmVnX2NoZWNrX2NoYW5zX3dvcmtgIGlzIGNhbGxlZCwgYW5kIGhvdyBpdCBpcyBzY2hlZHVsZWQuIFRoaXMgd2lsbCBoZWxwIGRldGVybWluZSB0aGUgcHJlY2lzZSBjb25kaXRpb25zIHVuZGVyIHdoaWNoIHRoaXMgbG9ja2luZyBjaGFuZ2UgYmVjb21lcyBhY3RpdmUgYW5kIGhvdyBsaWtlbHkgYSBwYXJ0aWN1bGFyIHRlc3QgY2FzZSB3aWxsIGV4ZXJjaXNlIHRoZSBjaGFuZ2VkIGNvZGUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA1IDAxOjA0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3JlZ19jaGVja19jaGFucyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC93aXJlbGVzcy8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L3dpcmVsZXNzL3JlZy5jPTIyMT1zdHJ1Y3QgcmVnX2JlYWNvbiB7XG4tLVxubmV0L3dpcmVsZXNzL3JlZy5jLTIyNS1cbm5ldC93aXJlbGVzcy9yZWcuYzoyMjY6c3RhdGljIHZvaWQgcmVnX2NoZWNrX2NoYW5zX3dvcmsoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKTtcbm5ldC93aXJlbGVzcy9yZWcuYzoyMjc6c3RhdGljIERFQ0xBUkVfREVMQVlFRF9XT1JLKHJlZ19jaGVja19jaGFucywgcmVnX2NoZWNrX2NoYW5zX3dvcmspO1xubmV0L3dpcmVsZXNzL3JlZy5jLTIyOC1cbi0tXG5uZXQvd2lyZWxlc3MvcmVnLmM9MjQ0OT1zdGF0aWMgdm9pZCByZWdfbGVhdmVfaW52YWxpZF9jaGFucyhzdHJ1Y3Qgd2lwaHkgKndpcGh5KVxuLS1cbm5ldC93aXJlbGVzcy9yZWcuYy0yNDYzLVxubmV0L3dpcmVsZXNzL3JlZy5jOjI0NjQ6c3RhdGljIHZvaWQgcmVnX2NoZWNrX2NoYW5zX3dvcmsoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxubmV0L3dpcmVsZXNzL3JlZy5jLTI0NjUte1xuLS1cbm5ldC93aXJlbGVzcy9yZWcuYz0yNDg2PXZvaWQgcmVnX2NoZWNrX2NoYW5uZWxzKHZvaWQpXG4tLVxubmV0L3dpcmVsZXNzL3JlZy5jLTI0OTItXHRtb2RfZGVsYXllZF93b3JrKHN5c3RlbV9wb3dlcl9lZmZpY2llbnRfd3EsXG5uZXQvd2lyZWxlc3MvcmVnLmM6MjQ5MzpcdFx0XHQgXHUwMDI2cmVnX2NoZWNrX2NoYW5zLFxubmV0L3dpcmVsZXNzL3JlZy5jLTI0OTQtXHRcdFx0IG1zZWNzX3RvX2ppZmZpZXMoUkVHX0VORk9SQ0VfR1JBQ0VfTVMpKTtcbi0tXG5uZXQvd2lyZWxlc3MvcmVnLmM9NDM1OT12b2lkIHJlZ3VsYXRvcnlfZXhpdCh2b2lkKVxuLS1cbm5ldC93aXJlbGVzcy9yZWcuYy00MzY1LVx0Y2FuY2VsX2NyZGFfdGltZW91dF9zeW5jKCk7XG5uZXQvd2lyZWxlc3MvcmVnLmM6NDM2NjpcdGNhbmNlbF9kZWxheWVkX3dvcmtfc3luYyhcdTAwMjZyZWdfY2hlY2tfY2hhbnMpO1xubmV0L3dpcmVsZXNzL3JlZy5jLTQzNjctXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA1IDAxOjA0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIxMDA1CgkJCQkJCQlvdXRwdXQ6IDI5CgkJCQkJCQl0aG91Z2h0czogMTUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0czoKCioqVHJhY2luZyB0aGUgQ2FsbCBQYXRoOiBgcmVnX2NoZWNrX2NoYW5uZWxzYCoqCgpPa2F5LCBzbyBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgZXhlY3V0aW9uIGZsb3cgdGhhdCBsZWFkcyB0byBgcmVnX2NoZWNrX2NoYW5uZWxzYC4gVGhhdCYjMzk7cyB0aGUga2V5LiBJIGNhbiYjMzk7dCBqdXN0IGxvb2sgYXQgdGhlIGZ1bmN0aW9uIGRlZmluaXRpb247IEkgbmVlZCB0byBzZWUgd2hlcmUgaXQmIzM5O3MgYmVpbmcgKnVzZWQqLiBJIG5lZWQgdG8gaWRlbnRpZnkgdGhlIGNhbGwgc2l0ZXMuIFRpbWUgdG8gZ2V0IG15IGJlYXJpbmdzIGFuZCB0cmFjZSB0aGUgY2FsbHMuIEkmIzM5O20gZ29pbmcgdG8gZm9sbG93IHRoZSBicmVhZGNydW1icyBhbmQgc2VlIHdoZXJlIHRoYXQgZnVuY3Rpb24gaXMgYmVpbmcgaW52b2tlZC4gVW5kZXJzdGFuZGluZyB0aGUgY29udGV4dCB3aWxsIGdpdmUgbWUgY2x1ZXMgYWJvdXQgaXRzIHB1cnBvc2UgYW5kIGhvdyBpdCBmaXRzIGludG8gdGhlIGxhcmdlciBhcmNoaXRlY3R1cmUuIExldCYjMzk7cyBkaWcgaW4gYW5kIGZpbmQgdGhvc2UgY2FsbCBsb2NhdGlvbnMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA1IDAxOjA0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3JlZ19jaGVja19jaGFubmVscyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC93aXJlbGVzcy8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L3dpcmVsZXNzL25sODAyMTEuYz0yMzQwNz12b2lkIGNmZzgwMjExX3NjaGVkdWxlX2NoYW5uZWxzX2NoZWNrKHN0cnVjdCB3aXJlbGVzc19kZXYgKndkZXYpXG4tLVxubmV0L3dpcmVsZXNzL25sODAyMTEuYy0yMzQxNi1cdCAgICAgd2lwaHktXHUwMDNlcmVndWxhdG9yeV9mbGFncyBcdTAwMjYgUkVHVUxBVE9SWV9FTkFCTEVfUkVMQVhfTk9fSVIpKSlcbm5ldC93aXJlbGVzcy9ubDgwMjExLmM6MjM0MTc6XHRcdHJlZ19jaGVja19jaGFubmVscygpO1xubmV0L3dpcmVsZXNzL25sODAyMTEuYy0yMzQxOC19XG4tLVxubmV0L3dpcmVsZXNzL3JlZy5jPTI0NjQ9c3RhdGljIHZvaWQgcmVnX2NoZWNrX2NoYW5zX3dvcmsoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxuLS1cbm5ldC93aXJlbGVzcy9yZWcuYy0yNDg1LVxubmV0L3dpcmVsZXNzL3JlZy5jOjI0ODY6dm9pZCByZWdfY2hlY2tfY2hhbm5lbHModm9pZClcbm5ldC93aXJlbGVzcy9yZWcuYy0yNDg3LXtcbi0tXG5uZXQvd2lyZWxlc3MvcmVnLmM9MjUyNz1zdGF0aWMgdm9pZCB1cGRhdGVfYWxsX3dpcGh5X3JlZ3VsYXRvcnkoZW51bSBubDgwMjExX3JlZ19pbml0aWF0b3IgaW5pdGlhdG9yKVxuLS1cbm5ldC93aXJlbGVzcy9yZWcuYy0yNTM4LVxubmV0L3dpcmVsZXNzL3JlZy5jOjI1Mzk6XHRyZWdfY2hlY2tfY2hhbm5lbHMoKTtcbm5ldC93aXJlbGVzcy9yZWcuYy0yNTQwLX1cbi0tXG5uZXQvd2lyZWxlc3MvcmVnLmM9MzAyNT1zdGF0aWMgdm9pZCByZWdfcHJvY2Vzc19oaW50KHN0cnVjdCByZWd1bGF0b3J5X3JlcXVlc3QgKnJlZ19yZXF1ZXN0KVxuLS1cbm5ldC93aXJlbGVzcy9yZWcuYy0zMDY4LVx0XHR3aXBoeV9hbGxfc2hhcmVfZGZzX2NoYW5fc3RhdGUod2lwaHkpO1xubmV0L3dpcmVsZXNzL3JlZy5jOjMwNjk6XHRcdHJlZ19jaGVja19jaGFubmVscygpO1xubmV0L3dpcmVsZXNzL3JlZy5jLTMwNzAtXHR9XG4tLVxubmV0L3dpcmVsZXNzL3JlZy5jPTMxOTc9c3RhdGljIHZvaWQgcmVnX3Byb2Nlc3Nfc2VsZl9tYW5hZ2VkX2hpbnRzKHZvaWQpXG4tLVxubmV0L3dpcmVsZXNzL3JlZy5jLTMyMDgtXG5uZXQvd2lyZWxlc3MvcmVnLmM6MzIwOTpcdHJlZ19jaGVja19jaGFubmVscygpO1xubmV0L3dpcmVsZXNzL3JlZy5jLTMyMTAtfVxuLS1cbm5ldC93aXJlbGVzcy9yZWcuYz0zMjg1PXZvaWQgcmVndWxhdG9yeV9oaW50X2luZG9vcihib29sIGlzX2luZG9vciwgdTMyIHBvcnRpZClcbi0tXG5uZXQvd2lyZWxlc3MvcmVnLmMtMzMwNi1cdGlmICghaXNfaW5kb29yKVxubmV0L3dpcmVsZXNzL3JlZy5jOjMzMDc6XHRcdHJlZ19jaGVja19jaGFubmVscygpO1xubmV0L3dpcmVsZXNzL3JlZy5jLTMzMDgtfVxuLS1cbm5ldC93aXJlbGVzcy9yZWcuYz0zMzEwPXZvaWQgcmVndWxhdG9yeV9uZXRsaW5rX25vdGlmeSh1MzIgcG9ydGlkKVxuLS1cbm5ldC93aXJlbGVzcy9yZWcuYy0zMzIzLVxubmV0L3dpcmVsZXNzL3JlZy5jOjMzMjQ6XHRyZWdfY2hlY2tfY2hhbm5lbHMoKTtcbm5ldC93aXJlbGVzcy9yZWcuYy0zMzI1LX1cbi0tXG5uZXQvd2lyZWxlc3MvcmVnLmM9MzQ4OT1zdGF0aWMgdm9pZCByZXN0b3JlX3JlZ3VsYXRvcnlfc2V0dGluZ3MoYm9vbCByZXNldF91c2VyLCBib29sIGNhY2hlZClcbi0tXG5uZXQvd2lyZWxlc3MvcmVnLmMtMzUwNi1cdFx0cmVnX2lzX2luZG9vciA9IGZhbHNlO1xubmV0L3dpcmVsZXNzL3JlZy5jOjM1MDc6XHRcdHJlZ19jaGVja19jaGFubmVscygpO1xubmV0L3dpcmVsZXNzL3JlZy5jLTM1MDgtXHR9XG4tLVxubmV0L3dpcmVsZXNzL3JlZy5jPTQwNzY9aW50IHJlZ3VsYXRvcnlfc2V0X3dpcGh5X3JlZ2Rfc3luYyhzdHJ1Y3Qgd2lwaHkgKndpcGh5LFxuLS1cbm5ldC93aXJlbGVzcy9yZWcuYy00MDg4LVx0cmVnX3Byb2Nlc3Nfc2VsZl9tYW5hZ2VkX2hpbnQod2lwaHkpO1xubmV0L3dpcmVsZXNzL3JlZy5jOjQwODk6XHRyZWdfY2hlY2tfY2hhbm5lbHMoKTtcbm5ldC93aXJlbGVzcy9yZWcuYy00MDkwLVx0cmV0dXJuIDA7XG4tLVxubmV0L3dpcmVsZXNzL3JlZy5oPTE3ND1pbnQgcmVnX3JlbG9hZF9yZWdkYih2b2lkKTtcbi0tXG5uZXQvd2lyZWxlc3MvcmVnLmgtMTc2LS8qKlxubmV0L3dpcmVsZXNzL3JlZy5oOjE3NzogKiByZWdfY2hlY2tfY2hhbm5lbHMgLSBzY2hlZHVsZSByZWd1bGF0b3J5IGVuZm9yY2VtZW50XG5uZXQvd2lyZWxlc3MvcmVnLmgtMTc4LSAqL1xubmV0L3dpcmVsZXNzL3JlZy5oOjE3OTp2b2lkIHJlZ19jaGVja19jaGFubmVscyh2b2lkKTtcbm5ldC93aXJlbGVzcy9yZWcuaC0xODAtXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA1IDAxOjA0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIyMTg0CgkJCQkJCQlvdXRwdXQ6IDE4MgoJCQkJCQkJdGhvdWdodHM6IDYyOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBbmFseXNpcyBvZiBhIENvbmN1cnJlbmN5IFZ1bG5lcmFiaWxpdHkgaW4gV2lyZWxlc3MgUmVndWxhdG9yeSBIYW5kbGluZyoqCgpPa2F5LCBzbyBJJiMzOTt2ZSBiZWVuIGRpZ2dpbmcgaW50byB0aGlzIHBvdGVudGlhbCBjb25jdXJyZW5jeSBpc3N1ZSBpbiB0aGUgd2lyZWxlc3Mgc3RhY2ssIHNwZWNpZmljYWxseSBhcm91bmQgcmVndWxhdG9yeSBkb21haW4gaGFuZGxpbmcuIEl0IHNlZW1zIHRoYXQgYHJlZ19jaGVja19jaGFuc193b3JrYCDigJMgd2hpY2ggaXMgY2FsbGVkIGR1cmluZyByZWd1bGF0b3J5IGRvbWFpbiBzZXR0aW5ncywgd2lmaSBjb25maWd1cmF0aW9uLCBqb2luLCBhbmQgc2NhbiBvcGVyYXRpb25zIHRocm91Z2ggbmw4MDIxMSDigJMgaXMgdGhlIGN1bHByaXQuIFRoZSB2dWxuZXJhYmlsaXR5IGFyaXNlcyBmcm9tIGhvdyBpdCBpbnRlcmFjdHMgd2l0aCB0aGUgUkNVIG1lY2hhbmlzbS4gVGhlcmUmIzM5O3MgdGhpcyBjb25jdXJyZW5jeSBidWcgd2hlcmUgdW5sb2NraW5nIHRoZSBSQ1UgcmVhZCBsb2NrIHdpdGhpbiB0aGUgYGxpc3RfZm9yX2VhY2hfZW50cnlfcmN1YCBsb29wIGNvdWxkIGxlYWQgdG8gbG9ja2RlcCB3YXJuaW5ncywgUkNVIHdhcm5pbmdzLCBvciBldmVuIHVzZS1hZnRlci1mcmVlIG9yIGxpc3QgY29ycnVwdGlvbiBpZiBhIHdpcGh5IGlzIHJlZ2lzdGVyZWQgb3IgdW5yZWdpc3RlcmVkIHNpbXVsdGFuZW91c2x5LiBUaGF0JiMzOTtzIGEgbmFzdHkgc2l0dWF0aW9uLCBlc3BlY2lhbGx5IGluIGEgcGFydCBvZiB0aGUga2VybmVsIGV4cG9zZWQgdG8gdXNlci1zcGFjZS4KClRoZSBmaXJzdCB0aGluZyBJIGRpZCB3YXMgbWFrZSBzdXJlIHRoZSBiYXNpY3MgYXJlIGluIHBsYWNlLiBUaGUgb2J2aW91cyBkZXBlbmRlbmN5IGhlcmUgaXMgYENGRzgwMjExYCwgYW5kIGl0IGxvb2tzIGxpa2UgYHJlZ19jaGVja19jaGFuc193b3JrYCBpcyB1bmNvbmRpdGlvbmFsbHkgY29tcGlsZWQgd2hlbiB0aGF0JiMzOTtzIGVuYWJsZWQuIEdvb2QuCgpOZXh0LCBJIGxvb2tlZCBhdCB0aGUgc3ltYm9scyBkaXJlY3RseSBpbnZvbHZlZC4gSSBmb3VuZCB0aGVzZSBrZXkgZnVuY3Rpb25zOiBgcmVnX2NoZWNrX2NoYW5zX3dvcmtgLCBgcmVnX2NoZWNrX2NoYW5uZWxzYCwgYHJlZ19sZWF2ZV9pbnZhbGlkX2NoYW5zYCwgYW5kIHRob3NlIHNjaGVkdWxpbmcgZnVuY3Rpb25zIGxpa2UgYGNmZzgwMjExX3NjaGVkdWxlX2NoYW5uZWxzX2NoZWNrYCwgYHJlZ3VsYXRvcnlfaGludF9pbmRvb3JgLCBhbmQgYHJlZ3VsYXRvcnlfc2V0X3dpcGh5X3JlZ2Rfc3luY2AuIEkgZG91YmxlLWNoZWNrZWQgdGhhdCBgcmVnX2NoZWNrX2NoYW5zX3dvcmtgIGNhbGxzIGByZWdfbGVhdmVfaW52YWxpZF9jaGFuc2AgYW5kIHRoYXQgYHJlZ19jaGVja19jaGFubmVsc2Agc2NoZWR1bGVzIHRoZSB3b3JrLiBBbHNvLCB3aGlsZSBgcmVnX2NoZWNrX2NoYW5zX3dvcmtgIGFuZCBgcmVnX2xlYXZlX2ludmFsaWRfY2hhbnNgIGFyZSBib3RoIHN0YXRpYywgYHJlZ19jaGVja19jaGFuc193b3JrYCB3aWxsIHN0aWxsIHNob3cgdXAgYXMgYSBkaXN0aW5jdCBzeW1ib2wgaW4gdm1saW51eCBhcyBhIHdvcmsgaXRlbSBjYWxsYmFjay4gYHJlZ19jaGVja19jaGFubmVsc2AgaXMgbm9uLXN0YXRpYy4KCkdpdmVuIGFsbCB0aGlzLCBJJiMzOTttIHByZXR0eSBjb25maWRlbnQgdGhhdCBmdXp6aW5nIHRoaXMgaXMgdGhlIHJpZ2h0IGFwcHJvYWNoLiBUaGUgcGF0Y2ggbW9kaWZpZXMgYHJlZ19jaGVja19jaGFuc193b3JrYCB3aXRoaW4gYGNmZzgwMjExYCwgYW5kIHNwZWNpZmljYWxseSBtb2RpZmllcyBsb2NraW5nIGFuZCBSQ1UgaXRlcmF0aW9ucyBvdmVyIGBjZmc4MDIxMV9yZGV2X2xpc3RgIGJ5IGRyb3BwaW5nIGFuZCByZWFjcXVpcmluZyBsb2NrcyBpbnNpZGUgdGhlIGxvb3AuIFRoaXMgY29kZSBpcyB0cmlnZ2VyZWQgZnJvbSB1c2Vyc3BhY2UsIHNvIGNvbmN1cnJlbmN5IHByb2JsZW1zIGFyZSBhIHJlYWwgcmlzay4gVGhlIGtleSBpcyB0byB0ZXN0IHRoZSBSQ1UgbGlzdCB0cmF2ZXJzYWwgYW5kIHRoZSBzYWZldHkgb2YgY29uY3VycmVudCByZWd1bGF0b3J5IGRvbWFpbiBvcGVyYXRpb25zLgoKU28sIHRoZSBjcml0ZXJpYSBhcmUgY2xlYXI6IGBXb3J0aEZ1enppbmc6IHRydWVgLCB0aGUgbmVjZXNzYXJ5IGNvbmZpZyBpcyBgQ0ZHODAyMTFgLCBhbmQgdGhlIGBGb2N1c1N5bWJvbHNgIGFyZSBgcmVnX2NoZWNrX2NoYW5zX3dvcmtgLCBgcmVnX2NoZWNrX2NoYW5uZWxzYCwgYW5kIGByZWdfbGVhdmVfaW52YWxpZF9jaGFuc2AuIFRpbWUgdG8gY2FsbCBgc2V0LXJlc3VsdHNgLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNSAwMTowNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7Q0ZHODAyMTEmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtyZWdfY2hlY2tfY2hhbnNfd29yayYjMzQ7LAogICAgJiMzNDtyZWdfY2hlY2tfY2hhbm5lbHMmIzM0OywKICAgICYjMzQ7cmVnX2xlYXZlX2ludmFsaWRfY2hhbnMmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggY2hhbmdlcyBsb2NraW5nIGFuZCBSQ1UgaXRlcmF0aW9uIGluIHJlZ19jaGVja19jaGFuc193b3JrKCkgd2l0aGluIGNmZzgwMjExIChuZXQvd2lyZWxlc3MvcmVnLmMpLCByZWxlYXNpbmcgYW5kIHJlLWFjcXVpcmluZyByY3VfcmVhZF9sb2NrIGFuZCBydG5sX2xvY2sgaW5zaWRlIGxpc3RfZm9yX2VhY2hfZW50cnlfcmN1LiBUaGlzIHJlYWNoYWJsZSBjb2RlIHBhdGggaGFuZGxlcyByZWd1bGF0b3J5IGRvbWFpbiBjaGFubmVsIHZhbGlkYXRpb24gYW5kIGludGVyZmFjZSBkaXNjb25uZWN0aW9uLCB3aGljaCBjYW4gYmUgdHJpZ2dlcmVkIHZpYSBubDgwMjExIHJlZ3VsYXRvcnkgY29tbWFuZHMuIEZ1enppbmcgaXMgd2FycmFudGVkIHRvIHRlc3QgZm9yIGNvbmN1cnJlbmN5IGJ1Z3MsIGxpc3QgdHJhdmVyc2FsIGlzc3VlcywgYW5kIFJDVS9sb2NrZGVwIHdhcm5pbmdzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtDRkc4MDIxMSYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3JlZ19jaGVja19jaGFuc193b3JrJiMzNDssCiAgICAmIzM0O3JlZ19jaGVja19jaGFubmVscyYjMzQ7LAogICAgJiMzNDtyZWdfbGVhdmVfaW52YWxpZF9jaGFucyYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBjaGFuZ2VzIGxvY2tpbmcgYW5kIFJDVSBpdGVyYXRpb24gaW4gcmVnX2NoZWNrX2NoYW5zX3dvcmsoKSB3aXRoaW4gY2ZnODAyMTEgKG5ldC93aXJlbGVzcy9yZWcuYyksIHJlbGVhc2luZyBhbmQgcmUtYWNxdWlyaW5nIHJjdV9yZWFkX2xvY2sgYW5kIHJ0bmxfbG9jayBpbnNpZGUgbGlzdF9mb3JfZWFjaF9lbnRyeV9yY3UuIFRoaXMgcmVhY2hhYmxlIGNvZGUgcGF0aCBoYW5kbGVzIHJlZ3VsYXRvcnkgZG9tYWluIGNoYW5uZWwgdmFsaWRhdGlvbiBhbmQgaW50ZXJmYWNlIGRpc2Nvbm5lY3Rpb24sIHdoaWNoIGNhbiBiZSB0cmlnZ2VyZWQgdmlhIG5sODAyMTEgcmVndWxhdG9yeSBjb21tYW5kcy4gRnV6emluZyBpcyB3YXJyYW50ZWQgdG8gdGVzdCBmb3IgY29uY3VycmVuY3kgYnVncywgbGlzdCB0cmF2ZXJzYWwgaXNzdWVzLCBhbmQgUkNVL2xvY2tkZXAgd2FybmluZ3MuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTkvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA1IDAxOjA0PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5JZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDUgMDE6MDQ8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Y29yZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgbG9ja2luZyBhbmQgUkNVIGxpc3QgdHJhdmVyc2FsIHN0cmF0ZWd5IGluIHJlZ19jaGVja19jaGFuc193b3JrKCkgKG5ldC93aXJlbGVzcy9yZWcuYykgYnkgZHJvcHBpbmcgYW5kIHJlLWFjcXVpcmluZyByY3VfcmVhZF9sb2NrKCkgYW5kIHJ0bmxfbG9jaygpIGFyb3VuZCBlYWNoIGl0ZXJhdGlvbiBvZiBjZmc4MDIxMV9yZGV2X2xpc3QuXG5cblRoaXMgY2hhbmdlIGRvZXMgbm90IGludHJvZHVjZSBhbnkgbWVtb3J5IGFsbG9jYXRpb25zLCBkb2VzIG5vdCByZWFkIG9yIHdyaXRlIHVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBmaWVsZHMsIGRvZXMgbm90IGFsdGVyIGJ1ZmZlciBsZW5ndGgvYm91bmRzIGNhbGN1bGF0aW9ucywgYW5kIGRvZXMgbm90IHBhc3Mga2VybmVsIGRhdGEgdG8gdXNlcnNwYWNlLiBBbnkgY29uY3VycmVuY3ksIHVzZS1hZnRlci1mcmVlLCBvciBsaXN0IGNvcnJ1cHRpb24gaXNzdWVzIHN0ZW1taW5nIGZyb20gZHJvcHBpbmcgUkNVIGR1cmluZyBsaXN0IHRyYXZlcnNhbCBhcmUgZGV0ZWN0YWJsZSBieSBzdGFuZGFyZCBkZWJ1Z2dpbmcgdG9vbHMgKEtBU0FOLCBMT0NLREVQLCBhbmQgQ09ORklHX1BST1ZFX1JDVSkuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCB3YXJyYW50ZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5CmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kCmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikKZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuCgpDUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjoKLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlCiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOCiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUAogIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuCi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsCiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLgoKUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTiwKTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy4KQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWQpzZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrcwp0aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLgoKTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3QKdW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsCmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5cwp0aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZwp1bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2wKZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLApjYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy4KClNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczoKMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2IKICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHMKICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC4KMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlcwogICBvciBzdHJ1Y3QgZmllbGRzLgozLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzCiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuCjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzCiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy4KClNldCBOZWVkc0tNU0FOPWZhbHNlIElGOgotIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyCiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0CiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLgotIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkCiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLgotIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy4KClVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGUKZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5UYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NAoKRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCA5MDliYWU2M2U0Y2I4ZGJiOGMyYWVhMTAzZWRkZDBjYWJhOWFkYzc1CkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFNhdCBTZXAgNSAwMTowMzo0NyAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL25ldC93aXJlbGVzcy9yZWcuYyBiL25ldC93aXJlbGVzcy9yZWcuYwppbmRleCBhODMzNmJhZjg1ZGM2Li5hMmUwZDFjZjgzMTdjIDEwMDY0NAotLS0gYS9uZXQvd2lyZWxlc3MvcmVnLmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L3dpcmVsZXNzL3JlZy5jCkBAIC0yNDY2LDEyICYjNDM7MjQ2NiwyMSBAQCBzdGF0aWMgdm9pZCByZWdfY2hlY2tfY2hhbnNfd29yayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspCiAJc3RydWN0IGNmZzgwMjExX3JlZ2lzdGVyZWRfZGV2aWNlICpyZGV2OwogCiAJcHJfZGVidWcoJiMzNDtWZXJpZnlpbmcgYWN0aXZlIGludGVyZmFjZXMgYWZ0ZXIgcmVnIGNoYW5nZVxuJiMzNDspOwotCXJ0bmxfbG9jaygpOwotCi0JZm9yX2VhY2hfcmRldihyZGV2KQomIzQzOwkvKgomIzQzOwkgKiBBY3F1aXJlIHJ0bmwgcGVyLWRldmljZSBpbnN0ZWFkIG9mIGhvbGRpbmcgaXQgZm9yIHRoZSBlbnRpcmUgbG9vcDsKJiM0MzsJICogY2ZnODAyMTFfbGVhdmUoKSBjYW4gYmUgc2xvdyBhbmQgc3RhcnZlIG90aGVyIHJ0bmwgd2FpdGVycyBvdGhlcndpc2UuCiYjNDM7CSAqIHdpcGh5X3VucmVnaXN0ZXIoKSBob2xkcyBydG5sIGFjcm9zcyBsaXN0X2RlbF9yY3UoKSAmIzQzOyBzeW5jaHJvbml6ZV9yY3UoKSwKJiM0MzsJICogc28gcmRldiBjYW5ub3QgYmUgZnJlZWQgd2hpbGUgd2UgaG9sZCBydG5sX2xvY2soKSBiZWxvdy4KJiM0MzsJICovCiYjNDM7CXJjdV9yZWFkX2xvY2soKTsKJiM0MzsJbGlzdF9mb3JfZWFjaF9lbnRyeV9yY3UocmRldiwgJmFtcDtjZmc4MDIxMV9yZGV2X2xpc3QsIGxpc3QpIHsKJiM0MzsJCXJjdV9yZWFkX3VubG9jaygpOwomIzQzOwkJcnRubF9sb2NrKCk7CiAJCXJlZ19sZWF2ZV9pbnZhbGlkX2NoYW5zKCZhbXA7cmRldi0mZ3Q7d2lwaHkpOwotCi0JcnRubF91bmxvY2soKTsKJiM0MzsJCXJ0bmxfdW5sb2NrKCk7CiYjNDM7CQlyY3VfcmVhZF9sb2NrKCk7CiYjNDM7CX0KJiM0MzsJcmN1X3JlYWRfdW5sb2NrKCk7CiB9CiAKIHZvaWQgcmVnX2NoZWNrX2NoYW5uZWxzKHZvaWQpCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIxLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNSAwMTowNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMjcxCgkJCQkJCQlvdXRwdXQ6IDMxCgkJCQkJCQl0aG91Z2h0czogOTk1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKktNU0FOIEV2YWx1YXRpb246IFBhdGNoIFJldmlldyoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBNeSB0YXNrIGlzIHRvIGRldGVybWluZSBpZiB0aGlzIHBhdGNoIG5lY2Vzc2l0YXRlcyBhIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiwgb3IgaWYgc3RhbmRhcmQgY2hlY2tzIGxpa2UgS0FTQU4gYW5kIExPQ0tERVAgYXJlIHN1ZmZpY2llbnQuIEl0JiMzOTtzIGEgc3RhbmRhcmQga2VybmVsIFFBIGRlY2lzaW9uLCBub3RoaW5nIHRvbyBvdXQgb2YgdGhlIG9yZGluYXJ5LgoKRmlyc3QsIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQgdGhpcyBwYXRjaCBhY3R1YWxseSAqZG9lcyouIEl0IGxvb2tzIGxpa2UgaXQmIzM5O3MgYSBjaGFuZ2Ugd2l0aGluIGBuZXQvd2lyZWxlc3MvcmVnLmNgLCBzcGVjaWZpY2FsbHkgaW4gYHJlZ19jaGVja19jaGFuc193b3JrYC4gVGhleSYjMzk7cmUgbW9kaWZ5aW5nIGhvdyB0aGUgY29kZSBpdGVyYXRlcyB0aHJvdWdoIGEgbGlzdCBvZiByZWdpc3RlcmVkIGRldmljZXMgKGBjZmc4MDIxMV9yZGV2X2xpc3RgKSBhbmQgY2FsbHMgYHJlZ19sZWF2ZV9pbnZhbGlkX2NoYW5zYC4gVGhlIG9yaWdpbmFsIGNvZGUgaGVsZCBgcnRubF9sb2NrKClgIGZvciB0aGUgZW50aXJlIGxvb3AsIGJ1dCB0aGlzIHBhdGNoIGludHJvZHVjZXMgUkNVIGxvY2tpbmcgYXJvdW5kIHRoZSBsaXN0IGl0ZXJhdGlvbiwgZHJvcHBpbmcgYW5kIHJlYWNxdWlyaW5nIHRoZSBsb2NrIGluIGVhY2ggbG9vcCBpdGVyYXRpb24sIGFuZCBkcm9wcGluZyBSVE5MIGFzIHdlbGwuCgpOb3csIHRoZSByZWQgZmxhZy4gVGhpcyBSQ1UgbGlzdCB0cmF2ZXJzYWwgd2l0aCBsb2NraW5nIG1hbmlwdWxhdGlvbiBwYXR0ZXJuLi4uIHRoYXQgd2FycmFudHMgY2xvc2Ugc2NydXRpbnkuIFRoZSB1c2Ugb2YgYGxpc3RfZm9yX2VhY2hfZW50cnlfcmN1YCBpbnNpZGUgdGhlIFJDVSByZWFkIGxvY2sgd2l0aCBkcm9wcGluZyBhbmQgcmUtYWNxdWlyaW5nIHRoZSBsb2NrIHdpdGhpbiB0aGUgbG9vcCBpcyBhIGNsYXNzaWMgc2V0dXAgZm9yIHBvdGVudGlhbCBjb25jdXJyZW5jeSBpc3N1ZXMuIFdpdGggdGhlIHJlLWVudHJhbnQgbG9ja2luZywgYW5kIHVubG9ja2VkIHdpbmRvdyBmb3Igb3RoZXIgb3BlcmF0aW9ucywgYSB1c2UtYWZ0ZXItZnJlZSBzY2VuYXJpbyBvciBsaXN0IGNvcnJ1cHRpb24gaXMgKmhpZ2hseSogcGxhdXNpYmxlLiBUaGUgY29tbWVudCBjbGFpbXMgYHdpcGh5X3VucmVnaXN0ZXIoKWAgaG9sZHMgcnRubCBhY3Jvc3MgYGxpc3RfZGVsX3JjdSgpYCBhbmQgYHN5bmNocm9uaXplX3JjdSgpYCwgYnV0IGV2ZW4gd2l0aCB0aGF0IGNsYWltLCB0aGUgcG90ZW50aWFsIGZvciBhIHJhY2Ugd2l0aCB0aGUgc3luY2hyb25pemVfcmN1L3VucmVnaXN0ZXIgYW5kIHRoZSB1bi1sb2NrZWQgc2VjdGlvbiBvZiB0aGUgbG9vcCBzdGlsbCBleGlzdHMuIFdlIGNvdWxkIGJlIGRlYWxpbmcgd2l0aCBhIGByZGV2YCB0aGF0JiMzOTtzIGJlZW4gZnJlZWQgb3IgaGFkIGl0cyBsaXN0IGVudHJpZXMgY29ycnVwdGVkIGJldHdlZW4gdGhlIGNhbGxzLgoKSG93ZXZlciwgSSBuZWVkIHRvIGNvbnNpZGVyIHdoZXRoZXIgaXQgKmludHJvZHVjZXMqIG5ldyBpc3N1ZXMuIERvZXMgdGhpcyBwYXRjaCBjaGFuZ2UgYW55dGhpbmcgdGhhdCBkaXJlY3RseSBpbnRlcmFjdHMgd2l0aCB1bmluaXRpYWxpemVkIG1lbW9yeT8gTm8uIFRoZSBjb2RlIG1vZGlmaWVzIGxvY2tpbmcgYW5kIGxpc3QgdHJhdmVyc2FsLCBidXQgZG9lc24mIzM5O3QgaW50cm9kdWNlIGFsbG9jYXRpb25zLCBjb3BpZXMgb2YgdW5pbml0aWFsaXplZCBkYXRhIHRvIHVzZXJzcGFjZSwgYWNjZXNzIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzLCBvciBzdHJ1Y3QgcGFkZGluZyBpc3N1ZXMuIEl0IGlzIHBvc3NpYmxlLCBidXQgc2VlbXMgdW5saWtlbHkgaW4gdGhpcyBjYXNlLCB0aGF0IGFuIGVudGlyZWx5IG5ldyBjb2RlLXBhdGggY291bGQgaW50cm9kdWNlIHN1Y2guIEkgd2lsbCBjaGVjay4KClRoZXJlZm9yZSwgc2luY2UgdGhlIHBvdGVudGlhbCB2dWxuZXJhYmlsaXRpZXMgbGllIHdpdGhpbiBjb25jdXJyZW5jeSBpc3N1ZXMsIEtBU0FOIGFuZCBMT0NLREVQIHdvdWxkIGNhdGNoIHVzZS1hZnRlci1mcmVlIGFuZCBsb2NraW5nIC8gY29uY3VycmVuY3kgaXNzdWVzLCBhcyB3ZWxsIGFzIEtDU0FOLiBLTVNBTiBpcyB1bm5lY2Vzc2FyeSBmb3IgdGhpcyBwYXRjaC4gSSYjMzk7bGwgZG91YmxlLWNoZWNrIHdpdGggYSBncmVwIG9yIGNvZGUgc2NhbiBqdXN0IHRvIGJlIGFic29sdXRlbHkgY2VydGFpbiBJJiMzOTttIG5vdCBtaXNzaW5nIGFueXRoaW5nIHRoYXQgd291bGQgaW52b2x2ZSByZWFkaW5nIGZyb20gdW5pbml0aWFsaXplZCBtZW1vcnkuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjIvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA1IDAxOjA0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3JlZ19jaGVja19jaGFuc193b3JrJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L3dpcmVsZXNzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC93aXJlbGVzcy9yZWcuYz0yMjE9c3RydWN0IHJlZ19iZWFjb24ge1xuLS1cbm5ldC93aXJlbGVzcy9yZWcuYy0yMjUtXG5uZXQvd2lyZWxlc3MvcmVnLmM6MjI2OnN0YXRpYyB2b2lkIHJlZ19jaGVja19jaGFuc193b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yayk7XG5uZXQvd2lyZWxlc3MvcmVnLmM6MjI3OnN0YXRpYyBERUNMQVJFX0RFTEFZRURfV09SSyhyZWdfY2hlY2tfY2hhbnMsIHJlZ19jaGVja19jaGFuc193b3JrKTtcbm5ldC93aXJlbGVzcy9yZWcuYy0yMjgtXG4tLVxubmV0L3dpcmVsZXNzL3JlZy5jPTI0NDk9c3RhdGljIHZvaWQgcmVnX2xlYXZlX2ludmFsaWRfY2hhbnMoc3RydWN0IHdpcGh5ICp3aXBoeSlcbi0tXG5uZXQvd2lyZWxlc3MvcmVnLmMtMjQ2My1cbm5ldC93aXJlbGVzcy9yZWcuYzoyNDY0OnN0YXRpYyB2b2lkIHJlZ19jaGVja19jaGFuc193b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcbm5ldC93aXJlbGVzcy9yZWcuYy0yNDY1LXtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMy8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDUgMDE6MDQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDA2NAoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDI0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRha2Ugb24gdGhlIHRob3VnaHQgcHJvY2VzcywgYXMgaWYgaXQgd2VyZSBteSBvd246CgoqKkRpdmluZyBpbnRvIHRoZSBDaGFubmVsIFJlZ3VsYXRpb24gQ29kZSoqCgpPa2F5LCB0aW1lIHRvIGdldCBteSBoYW5kcyBkaXJ0eS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZSBzeXN0ZW0gaGFuZGxlcyBpbnZhbGlkIGNoYW5uZWxzIGR1cmluZyByZWd1bGF0b3J5IGRvbWFpbiBjaGFuZ2VzLiBMZXQmIzM5O3Mgc3RhcnQgYnkgemVyb2luZyBpbiBvbiBgcmVnX2xlYXZlX2ludmFsaWRfY2hhbnNgIHdpdGhpbiBgbmV0L3dpcmVsZXNzL3JlZy5jYC4gVGhpcyBmdW5jdGlvbiBuYW1lIHNlZW1zIGxpa2UgYSBnb29kIHN0YXJ0aW5nIHBvaW50LiBJdCYjMzk7cyB0aGUgbG9naWNhbCBwbGFjZSB0byBzZWUgaG93IHRoZSBrZXJuZWwgZGVhbHMgd2l0aCBjaGFubmVscyB0aGF0IGFyZSBubyBsb25nZXIgYWxsb3dlZCBhZnRlciBhIHJlZ3VsYXRvcnkgZG9tYWluIHVwZGF0ZS4gSSBleHBlY3QgaXQmIzM5O2xsIGdpdmUgbWUgY2x1ZXMgYWJvdXQgaG93IHRoZSBkcml2ZXIgaXMgbm90aWZpZWQgYW5kIGhvdyB0aGUgc3lzdGVtIG1pZ2h0IGhhbmRsZSBvbmdvaW5nIHRyYW5zbWlzc2lvbnMgb24gdGhlc2UgY2hhbm5lbHMuIEhvcGVmdWxseSwgdGhpcyBmdW5jdGlvbiBwcm92aWRlcyB0aGUga2V5IHRvIHVuZGVyc3RhbmRpbmcgdGhlIHNwZWNpZmljIGxvZ2ljIG9mIGNoYW5uZWwgaW52YWxpZGF0aW9uLiBJJiMzOTttIGtlZW4gdG8gZGlzc2VjdCB0aGUgY29kZSBhbmQgc2VlIGhvdyByb2J1c3QgdGhlIGltcGxlbWVudGF0aW9uIGlzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI0LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNSAwMTowNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC93aXJlbGVzcy9yZWcuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDI0NDUsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNDUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MjQ0NTpcdFxuMjQ0NjpcdFx0cmV0dXJuIHRydWU7XG4yNDQ3Olx0fVxuMjQ0ODpcdFxuMjQ0OTpcdHN0YXRpYyB2b2lkIHJlZ19sZWF2ZV9pbnZhbGlkX2NoYW5zKHN0cnVjdCB3aXBoeSAqd2lwaHkpXG4yNDUwOlx0e1xuMjQ1MTpcdFx0c3RydWN0IHdpcmVsZXNzX2RldiAqd2RldjtcbjI0NTI6XHRcdHN0cnVjdCBjZmc4MDIxMV9yZWdpc3RlcmVkX2RldmljZSAqcmRldiA9IHdpcGh5X3RvX3JkZXYod2lwaHkpO1xuMjQ1MzpcdFxuMjQ1NDpcdFx0bGlzdF9mb3JfZWFjaF9lbnRyeSh3ZGV2LCBcdTAwMjZyZGV2LVx1MDAzZXdpcGh5LndkZXZfbGlzdCwgbGlzdCkge1xuMjQ1NTpcdFx0XHRib29sIHZhbGlkO1xuMjQ1NjpcdFxuMjQ1NzpcdFx0XHRzY29wZWRfZ3VhcmQod2lwaHksIHdpcGh5KVxuMjQ1ODpcdFx0XHRcdHZhbGlkID0gcmVnX3dkZXZfY2hhbl92YWxpZCh3aXBoeSwgd2Rldik7XG4yNDU5Olx0XHRcdGlmICghdmFsaWQpXG4yNDYwOlx0XHRcdFx0Y2ZnODAyMTFfbGVhdmUocmRldiwgd2RldiwgLTEpO1xuMjQ2MTpcdFx0fVxuMjQ2MjpcdH1cbjI0NjM6XHRcbjI0NjQ6XHRzdGF0aWMgdm9pZCByZWdfY2hlY2tfY2hhbnNfd29yayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXG4yNDY1Olx0e1xuMjQ2NjpcdFx0c3RydWN0IGNmZzgwMjExX3JlZ2lzdGVyZWRfZGV2aWNlICpyZGV2O1xuMjQ2NzpcdFxuMjQ2ODpcdFx0cHJfZGVidWcoXCYjMzQ7VmVyaWZ5aW5nIGFjdGl2ZSBpbnRlcmZhY2VzIGFmdGVyIHJlZyBjaGFuZ2VcXG5cJiMzNDspO1xuMjQ2OTpcdFx0LypcbjI0NzA6XHRcdCAqIEFjcXVpcmUgcnRubCBwZXItZGV2aWNlIGluc3RlYWQgb2YgaG9sZGluZyBpdCBmb3IgdGhlIGVudGlyZSBsb29wO1xuMjQ3MTpcdFx0ICogY2ZnODAyMTFfbGVhdmUoKSBjYW4gYmUgc2xvdyBhbmQgc3RhcnZlIG90aGVyIHJ0bmwgd2FpdGVycyBvdGhlcndpc2UuXG4yNDcyOlx0XHQgKiB3aXBoeV91bnJlZ2lzdGVyKCkgaG9sZHMgcnRubCBhY3Jvc3MgbGlzdF9kZWxfcmN1KCkgJiM0Mzsgc3luY2hyb25pemVfcmN1KCksXG4yNDczOlx0XHQgKiBzbyByZGV2IGNhbm5vdCBiZSBmcmVlZCB3aGlsZSB3ZSBob2xkIHJ0bmxfbG9jaygpIGJlbG93LlxuMjQ3NDpcdFx0ICovXG4yNDc1Olx0XHRyY3VfcmVhZF9sb2NrKCk7XG4yNDc2Olx0XHRsaXN0X2Zvcl9lYWNoX2VudHJ5X3JjdShyZGV2LCBcdTAwMjZjZmc4MDIxMV9yZGV2X2xpc3QsIGxpc3QpIHtcbjI0Nzc6XHRcdFx0cmN1X3JlYWRfdW5sb2NrKCk7XG4yNDc4Olx0XHRcdHJ0bmxfbG9jaygpO1xuMjQ3OTpcdFx0XHRyZWdfbGVhdmVfaW52YWxpZF9jaGFucyhcdTAwMjZyZGV2LVx1MDAzZXdpcGh5KTtcbjI0ODA6XHRcdFx0cnRubF91bmxvY2soKTtcbjI0ODE6XHRcdFx0cmN1X3JlYWRfbG9jaygpO1xuMjQ4MjpcdFx0fVxuMjQ4MzpcdFx0cmN1X3JlYWRfdW5sb2NrKCk7XG4yNDg0Olx0fVxuMjQ4NTpcdFxuMjQ4NjpcdHZvaWQgcmVnX2NoZWNrX2NoYW5uZWxzKHZvaWQpXG4yNDg3Olx0e1xuMjQ4ODpcdFx0LypcbjI0ODk6XHRcdCAqIEdpdmUgdXNlcm1vZGUgYSBjaGFuY2UgdG8gZG8gc29tZXRoaW5nIG5pY2VyIChtb3ZlIHRvIGFub3RoZXJcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNS8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDUgMDE6MDQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNTAwMwoJCQkJCQkJb3V0cHV0OiAxOTAKCQkJCQkJCXRob3VnaHRzOiA0NzMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqS01TQU4gQXNzZXNzbWVudCBvZiB0aGlzIFBhdGNoKioKCkFscmlnaHQsIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIE15IGluaXRpYWwgYXNzZXNzbWVudCBpcyB0aGF0IEtNU0FOIGlzbiYjMzk7dCBuZWVkZWQgaGVyZS4gSSYjMzk7dmUgd2Fsa2VkIHRocm91Z2ggdGhlIHN0YW5kYXJkIEtNU0FOIGNoZWNrcywgYW5kIG5vdGhpbmcgc2NyZWFtcyAmIzM0O3BvdGVudGlhbCB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkJiMzNDsgYXQgbWUuCgpTcGVjaWZpY2FsbHksIEkgbG9va2VkIGZvcjoKMS4gIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSB3aGVyZSBpbml0aWFsaXphdGlvbiBtaWdodCBiZSBzbG9wcHkuIE5vcGUuCjIuICBDb25kaXRpb25hbCBsb2dpYyBiYXNlZCBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIGRhdGEuIE5vdCBzZWVpbmcgaXQuCjMuICBDb21wbGV4IGRhdGEgc3RydWN0dXJlIGluaXRpYWxpemF0aW9uIHRoYXQgY291bGQgbGVhZCB0byB1bmluaXRpYWxpemVkIHJlYWRzIGxhdGVyLiBOZWdhdGl2ZS4KNC4gIEJvdW5kcyBjaGVjayBpc3N1ZXMgdGhhdCBjb3VsZCBleHBvc2UgdW5pbml0aWFsaXplZCBidWZmZXIgYnl0ZXMuIE5hZGEuCgpUaGUgcG90ZW50aWFsIGlzc3VlcyBJICpkbyogc2VlIGFyZSBhcm91bmQgY29uY3VycmVuY3ksIFJDVSBsaXN0IGl0ZXJhdGlvbiwgYW5kIGxvY2tpbmc6IHNwZWNpZmljYWxseSwgdGhpbmdzIGxpa2UgbGlzdCBpdGVyYXRpb24gdmFsaWRpdHkgYWNyb3NzIFJDVSB1bmxvY2svbG9jayBib3VuZGFyaWVzLCBzbGVlcGFibGUgbG9ja3MgaW5zaWRlIFJDVSAodGhvdWdoIGl0IHVubG9ja3MgUkNVIGJlZm9yZSBsb2NraW5nIFJUTkwpLCBhbmQgdXNlLWFmdGVyLWZyZWUgb3IgbGlzdCBjb3JydXB0aW9uIGlmIGVsZW1lbnRzIGFyZSByZW1vdmVkIGR1cmluZyB0aGUgaXRlcmF0aW9uLiBIb3dldmVyLCB0aG9zZSBhcmUgKmV4YWN0bHkqIHRoZSBraW5kcyBvZiBpc3N1ZXMgS0FTQU4sIExPQ0tERVAsIGFuZCB0aGUgc3RhbmRhcmQga2VybmVsIGRlYnVnZ2luZyB0b29scyAobGlrZSBDT05GSUdfUFJPVkVfUkNVIGFuZCBDT05GSUdfREVCVUdfTElTVCkgYXJlIGRlc2lnbmVkIHRvIGNhdGNoLiBUaGF0JiMzOTtzIHJlYXNzdXJpbmcuCgpTbywgdGhlIHBhdGNoIGlzIGNoYW5naW5nIGByZWdfY2hlY2tfY2hhbnNfd29yaygpYCBpbiBgbmV0L3dpcmVsZXNzL3JlZy5jYC4gSXQmIzM5O3Mgc3dpdGNoaW5nIGZyb20gaG9sZGluZyBgcnRubF9sb2NrKClgIGZvciB0aGUgZW50aXJlIGBjZmc4MDIxMV9yZGV2X2xpc3RgIHRyYXZlcnNhbCB0byBhY3F1aXJpbmcgaXQgcGVyIGRldmljZSwgdG9nZ2xpbmcgYHJjdV9yZWFkX2xvY2soKWAgLyBgcnRubF9sb2NrKClgIHdpdGhpbiB0aGUgbG9vcC4gVGhlIHBvdGVudGlhbCBidWdzIGludHJvZHVjZWQgaGVyZSBhcmUgcmVsYXRlZCB0byBSQ1UgbGlzdCB0cmF2ZXJzYWwgc2FmZXR5LCB1c2UtYWZ0ZXItZnJlZSwgb3IgY29uY3VycmVuY3kvbG9ja2luZyAtIHdoaWNoIGFyZSB3ZWxsLWNvdmVyZWQgYnkgdGhlIGV4aXN0aW5nIHRvb2xjaGFpbi4gTm8gbmV3IGFsbG9jYXRpb25zLCBzdGFjay9oZWFwIHZhcmlhYmxlcywgb3IgaW5mby1sZWFrcyB0byB1c2VyIHNwYWNlLiBObyBLTVNBTiByZXF1aXJlZC4KCkkmIzM5O20gY29uZmlkZW50IGluIGNhbGxpbmcgdGhpcy4gTGV0JiMzOTtzIHNldCB0aGUgcmVzdWx0cyBhbmQgbW92ZSBvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNi8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDUgMDE6MDQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGxvY2tpbmcgYW5kIFJDVSBsaXN0IHRyYXZlcnNhbCBzdHJhdGVneSBpbiByZWdfY2hlY2tfY2hhbnNfd29yaygpIChuZXQvd2lyZWxlc3MvcmVnLmMpIGJ5IGRyb3BwaW5nIGFuZCByZS1hY3F1aXJpbmcgcmN1X3JlYWRfbG9jaygpIGFuZCBydG5sX2xvY2soKSBhcm91bmQgZWFjaCBpdGVyYXRpb24gb2YgY2ZnODAyMTFfcmRldl9saXN0LlxuXG5UaGlzIGNoYW5nZSBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IG1lbW9yeSBhbGxvY2F0aW9ucywgZG9lcyBub3QgcmVhZCBvciB3cml0ZSB1bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgZmllbGRzLCBkb2VzIG5vdCBhbHRlciBidWZmZXIgbGVuZ3RoL2JvdW5kcyBjYWxjdWxhdGlvbnMsIGFuZCBkb2VzIG5vdCBwYXNzIGtlcm5lbCBkYXRhIHRvIHVzZXJzcGFjZS4gQW55IGNvbmN1cnJlbmN5LCB1c2UtYWZ0ZXItZnJlZSwgb3IgbGlzdCBjb3JydXB0aW9uIGlzc3VlcyBzdGVtbWluZyBmcm9tIGRyb3BwaW5nIFJDVSBkdXJpbmcgbGlzdCB0cmF2ZXJzYWwgYXJlIGRldGVjdGFibGUgYnkgc3RhbmRhcmQgZGVidWdnaW5nIHRvb2xzIChLQVNBTiwgTE9DS0RFUCwgYW5kIENPTkZJR19QUk9WRV9SQ1UpLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3Qgd2FycmFudGVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGxvY2tpbmcgYW5kIFJDVSBsaXN0IHRyYXZlcnNhbCBzdHJhdGVneSBpbiByZWdfY2hlY2tfY2hhbnNfd29yaygpIChuZXQvd2lyZWxlc3MvcmVnLmMpIGJ5IGRyb3BwaW5nIGFuZCByZS1hY3F1aXJpbmcgcmN1X3JlYWRfbG9jaygpIGFuZCBydG5sX2xvY2soKSBhcm91bmQgZWFjaCBpdGVyYXRpb24gb2YgY2ZnODAyMTFfcmRldl9saXN0LlxuXG5UaGlzIGNoYW5nZSBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IG1lbW9yeSBhbGxvY2F0aW9ucywgZG9lcyBub3QgcmVhZCBvciB3cml0ZSB1bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgZmllbGRzLCBkb2VzIG5vdCBhbHRlciBidWZmZXIgbGVuZ3RoL2JvdW5kcyBjYWxjdWxhdGlvbnMsIGFuZCBkb2VzIG5vdCBwYXNzIGtlcm5lbCBkYXRhIHRvIHVzZXJzcGFjZS4gQW55IGNvbmN1cnJlbmN5LCB1c2UtYWZ0ZXItZnJlZSwgb3IgbGlzdCBjb3JydXB0aW9uIGlzc3VlcyBzdGVtbWluZyBmcm9tIGRyb3BwaW5nIFJDVSBkdXJpbmcgbGlzdCB0cmF2ZXJzYWwgYXJlIGRldGVjdGFibGUgYnkgc3RhbmRhcmQgZGVidWdnaW5nIHRvb2xzIChLQVNBTiwgTE9DS0RFUCwgYW5kIENPTkZJR19QUk9WRV9SQ1UpLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3Qgd2FycmFudGVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wOS0wNVQwMTowMzo0OS42NzQ0NjQ0NTNaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1NDYxNzM4NzY2MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJDRkc4MDIxMVwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInJlZ19jaGVja19jaGFuc193b3JrXCIsXG4gICAgXCJyZWdfY2hlY2tfY2hhbm5lbHNcIixcbiAgICBcInJlZ19sZWF2ZV9pbnZhbGlkX2NoYW5zXCJcbiAgXSxcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgbG9ja2luZyBhbmQgUkNVIGxpc3QgdHJhdmVyc2FsIHN0cmF0ZWd5IGluIHJlZ19jaGVja19jaGFuc193b3JrKCkgKG5ldC93aXJlbGVzcy9yZWcuYykgYnkgZHJvcHBpbmcgYW5kIHJlLWFjcXVpcmluZyByY3VfcmVhZF9sb2NrKCkgYW5kIHJ0bmxfbG9jaygpIGFyb3VuZCBlYWNoIGl0ZXJhdGlvbiBvZiBjZmc4MDIxMV9yZGV2X2xpc3QuXFxuXFxuVGhpcyBjaGFuZ2UgZG9lcyBub3QgaW50cm9kdWNlIGFueSBtZW1vcnkgYWxsb2NhdGlvbnMsIGRvZXMgbm90IHJlYWQgb3Igd3JpdGUgdW5pbml0aWFsaXplZCBzdGFjay9oZWFwIGZpZWxkcywgZG9lcyBub3QgYWx0ZXIgYnVmZmVyIGxlbmd0aC9ib3VuZHMgY2FsY3VsYXRpb25zLCBhbmQgZG9lcyBub3QgcGFzcyBrZXJuZWwgZGF0YSB0byB1c2Vyc3BhY2UuIEFueSBjb25jdXJyZW5jeSwgdXNlLWFmdGVyLWZyZWUsIG9yIGxpc3QgY29ycnVwdGlvbiBpc3N1ZXMgc3RlbW1pbmcgZnJvbSBkcm9wcGluZyBSQ1UgZHVyaW5nIGxpc3QgdHJhdmVyc2FsIGFyZSBkZXRlY3RhYmxlIGJ5IHN0YW5kYXJkIGRlYnVnZ2luZyB0b29scyAoS0FTQU4sIExPQ0tERVAsIGFuZCBDT05GSUdfUFJPVkVfUkNVKS4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBjaGFuZ2VzIGxvY2tpbmcgYW5kIFJDVSBpdGVyYXRpb24gaW4gcmVnX2NoZWNrX2NoYW5zX3dvcmsoKSB3aXRoaW4gY2ZnODAyMTEgKG5ldC93aXJlbGVzcy9yZWcuYyksIHJlbGVhc2luZyBhbmQgcmUtYWNxdWlyaW5nIHJjdV9yZWFkX2xvY2sgYW5kIHJ0bmxfbG9jayBpbnNpZGUgbGlzdF9mb3JfZWFjaF9lbnRyeV9yY3UuIFRoaXMgcmVhY2hhYmxlIGNvZGUgcGF0aCBoYW5kbGVzIHJlZ3VsYXRvcnkgZG9tYWluIGNoYW5uZWwgdmFsaWRhdGlvbiBhbmQgaW50ZXJmYWNlIGRpc2Nvbm5lY3Rpb24sIHdoaWNoIGNhbiBiZSB0cmlnZ2VyZWQgdmlhIG5sODAyMTEgcmVndWxhdG9yeSBjb21tYW5kcy4gRnV6emluZyBpcyB3YXJyYW50ZWQgdG8gdGVzdCBmb3IgY29uY3VycmVuY3kgYnVncywgbGlzdCB0cmF2ZXJzYWwgaXNzdWVzLCBhbmQgUkNVL2xvY2tkZXAgd2FybmluZ3MuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA1VDAxOjAzOjQ5LjY3NDQ2OTE5M1oiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTczMjI1NDUyMSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IDkwOWJhZTYzZTRjYjhkYmI4YzJhZWExMDNlZGRkMGNhYmE5YWRjNzVcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIFNhdCBTZXAgNSAwMTowMzo0NyAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9uZXQvd2lyZWxlc3MvcmVnLmMgYi9uZXQvd2lyZWxlc3MvcmVnLmNcXG5pbmRleCBhODMzNmJhZjg1ZGM2Li5hMmUwZDFjZjgzMTdjIDEwMDY0NFxcbi0tLSBhL25ldC93aXJlbGVzcy9yZWcuY1xcbisrKyBiL25ldC93aXJlbGVzcy9yZWcuY1xcbkBAIC0yNDY2LDEyICsyNDY2LDIxIEBAIHN0YXRpYyB2b2lkIHJlZ19jaGVja19jaGFuc193b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcXG4gXFx0c3RydWN0IGNmZzgwMjExX3JlZ2lzdGVyZWRfZGV2aWNlICpyZGV2O1xcbiBcXG4gXFx0cHJfZGVidWcoXFxcIlZlcmlmeWluZyBhY3RpdmUgaW50ZXJmYWNlcyBhZnRlciByZWcgY2hhbmdlXFxcXG5cXFwiKTtcXG4tXFx0cnRubF9sb2NrKCk7XFxuLVxcbi1cXHRmb3JfZWFjaF9yZGV2KHJkZXYpXFxuK1xcdC8qXFxuK1xcdCAqIEFjcXVpcmUgcnRubCBwZXItZGV2aWNlIGluc3RlYWQgb2YgaG9sZGluZyBpdCBmb3IgdGhlIGVudGlyZSBsb29wO1xcbitcXHQgKiBjZmc4MDIxMV9sZWF2ZSgpIGNhbiBiZSBzbG93IGFuZCBzdGFydmUgb3RoZXIgcnRubCB3YWl0ZXJzIG90aGVyd2lzZS5cXG4rXFx0ICogd2lwaHlfdW5yZWdpc3RlcigpIGhvbGRzIHJ0bmwgYWNyb3NzIGxpc3RfZGVsX3JjdSgpICsgc3luY2hyb25pemVfcmN1KCksXFxuK1xcdCAqIHNvIHJkZXYgY2Fubm90IGJlIGZyZWVkIHdoaWxlIHdlIGhvbGQgcnRubF9sb2NrKCkgYmVsb3cuXFxuK1xcdCAqL1xcbitcXHRyY3VfcmVhZF9sb2NrKCk7XFxuK1xcdGxpc3RfZm9yX2VhY2hfZW50cnlfcmN1KHJkZXYsIFxcdTAwMjZjZmc4MDIxMV9yZGV2X2xpc3QsIGxpc3QpIHtcXG4rXFx0XFx0cmN1X3JlYWRfdW5sb2NrKCk7XFxuK1xcdFxcdHJ0bmxfbG9jaygpO1xcbiBcXHRcXHRyZWdfbGVhdmVfaW52YWxpZF9jaGFucyhcXHUwMDI2cmRldi1cXHUwMDNld2lwaHkpO1xcbi1cXG4tXFx0cnRubF91bmxvY2soKTtcXG4rXFx0XFx0cnRubF91bmxvY2soKTtcXG4rXFx0XFx0cmN1X3JlYWRfbG9jaygpO1xcbitcXHR9XFxuK1xcdHJjdV9yZWFkX3VubG9jaygpO1xcbiB9XFxuIFxcbiB2b2lkIHJlZ19jaGVja19jaGFubmVscyh2b2lkKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNVQwMTowMzo1MS40MDc4NjY1NDVaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJjb3JlIiwiRHVyYXRpb24iOjI4NTczMjMwODY1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkNGRzgwMjExXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwicmVnX2NoZWNrX2NoYW5zX3dvcmtcIixcbiAgICBcInJlZ19jaGVja19jaGFubmVsc1wiLFxuICAgIFwicmVnX2xlYXZlX2ludmFsaWRfY2hhbnNcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBjaGFuZ2VzIGxvY2tpbmcgYW5kIFJDVSBpdGVyYXRpb24gaW4gcmVnX2NoZWNrX2NoYW5zX3dvcmsoKSB3aXRoaW4gY2ZnODAyMTEgKG5ldC93aXJlbGVzcy9yZWcuYyksIHJlbGVhc2luZyBhbmQgcmUtYWNxdWlyaW5nIHJjdV9yZWFkX2xvY2sgYW5kIHJ0bmxfbG9jayBpbnNpZGUgbGlzdF9mb3JfZWFjaF9lbnRyeV9yY3UuIFRoaXMgcmVhY2hhYmxlIGNvZGUgcGF0aCBoYW5kbGVzIHJlZ3VsYXRvcnkgZG9tYWluIGNoYW5uZWwgdmFsaWRhdGlvbiBhbmQgaW50ZXJmYWNlIGRpc2Nvbm5lY3Rpb24sIHdoaWNoIGNhbiBiZSB0cmlnZ2VyZWQgdmlhIG5sODAyMTEgcmVndWxhdG9yeSBjb21tYW5kcy4gRnV6emluZyBpcyB3YXJyYW50ZWQgdG8gdGVzdCBmb3IgY29uY3VycmVuY3kgYnVncywgbGlzdCB0cmF2ZXJzYWwgaXNzdWVzLCBhbmQgUkNVL2xvY2tkZXAgd2FybmluZ3MuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyIGFuZCBzZWN1cml0eSBlbmdpbmVlci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZXZhbHVhdGUgd2hldGhlciBpdCB3YXJyYW50cyBmdXp6aW5nIHdpdGggc3l6a2FsbGVyLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiBpbnRlcm5hbCBhc3N1bXB0aW9ucy4gWW91IG11c3QgYWN0aXZlbHkgdXNlIHlvdXIgY29kZSBhY2Nlc3NcbnRvb2xzIHRvIGluc3BlY3QgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSwgY2FsbGVycywgYW5kIHN1cnJvdW5kaW5nIGNvbnRleHQuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4xLiBDT1JFIFRSSUFHRSBQSElMT1NPUEhZXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuVGhlIGdvYWwgb2YgcGF0Y2ggZnV6emluZyBpcyB0byBkaXNjb3ZlciBjcmFzaGVzLCByZWdyZXNzaW9ucywgZXhwb3NlZCBsYXRlbnQgYnVncyxcbmFuZCBuZXdseSB0cmlnZ2VyZWQgYXNzZXJ0aW9ucyBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBzZXJpZXMuXG5cbi0gUkVBQ0hBQklMSVRZIElTIFRIRSBQUklNQVJZIEdBVEU6XG4gIEZ1enppbmcgY2FuIG9ubHkgZGlzY292ZXIgYnVncyBpbiBjb2RlIHRoYXQgY2FuIGFjdHVhbGx5IGV4ZWN1dGUgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWRcbiAgZW52aXJvbm1lbnRzIChHQ0Ugb3IgUUVNVSwgdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGRldmljZXMgbGlrZSBVU0IgZ2FkZ2V0cywgbmV0ZGV2LCB0dW4vdGFwKS5cbiAgSWYgdGhlIG1vZGlmaWVkIGNvZGUgaXMgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIChzZWUgU2VjdGlvbiAyKSwgaXQgTVVTVCBOT1QgYmUgZnV6emVkLFxuICByZWdhcmRsZXNzIG9mIHdoZXRoZXIgaXQgYWRkcyBhc3NlcnRpb25zIG9yIGNvbXBsZXggbG9naWMuXG5cbi0gRE8gTk9UIEJMSU5ETFkgVFJVU1QgXCJOTyBGVU5DVElPTkFMIENIQU5HRVwiIChORkNJKSBPUiBcIlJFRkFDVE9SSU5HXCIgQ0xBSU1TOlxuICBQYXRjaCBhdXRob3JzIHJvdXRpbmVseSBsYWJlbCBjaGFuZ2VzIGFzIFwiY2xlYW51cHNcIiwgXCJyZWZhY3RvcmluZ3NcIiwgb3Igc3RhdGVcbiAgXCJObyBmdW5jdGlvbmFsIGNoYW5nZSBpbnRlbmRlZFwiLiBEbyBOT1QgdGFrZSB0aGVzZSBjbGFpbXMgYXQgZmFjZSB2YWx1ZS5cbiAgQ29kZSByZWZhY3RvcmluZ3MgdGhhdCByZWFycmFuZ2UgbG9naWMsIGludHJvZHVjZSBoZWxwZXIgZnVuY3Rpb25zLCBvciBhbHRlciBzdGF0ZSBtYW5hZ2VtZW50XG4gIGluIGNvcmUgc3Vic3lzdGVtcyBmcmVxdWVudGx5IGludHJvZHVjZSBzdWJ0bGUgc2VtYW50aWMgc2hpZnRzIG9yIHVuY292ZXIgbGF0ZW50IGtlcm5lbCBidWdzLlxuICBJZiByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlIGlzIG1vZGlmaWVkIG9yIHJlZmFjdG9yZWQsIGl0IE1VU1QgYmUgZnV6emVkLlxuXG4tIE5FVyBPUiBNT0RJRklFRCBBU1NFUlRJT05TIElOIFJFQUNIQUJMRSBDT0RFIE1VU1QgQkUgRlVaWkVEOlxuICBXaGVuIGEgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllcyBydW50aW1lIGNoZWNrcyBvciBhc3NlcnRpb25zIChlLmcuLCBXQVJOX09OKiwgVk1fV0FSTl9PTiosXG4gIEJVR19PTiosIGxvY2tkZXBfYXNzZXJ0KikgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMsIGl0IGVuZm9yY2VzIG5ldyBvciBzdHJpY3RlciBpbnZhcmlhbnRzLlxuICBFdmVuIGlmIHRoZSBhdXRob3IgYmVsaWV2ZXMgdGhlIGludmFyaWFudCBhbHdheXMgaG9sZHMsIGZ1enppbmcgaXMgZXNzZW50aWFsIHRvIHZlcmlmeSB3aGV0aGVyXG4gIGFuIHVudXN1YWwgc2VxdWVuY2Ugb2Ygb3BlcmF0aW9ucyBjYW4gdmlvbGF0ZSBpdC5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjIuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz1mYWxzZSAoTkVHQVRJVkUgQ1JJVEVSSUEpXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBPTkxZIElGIGFsbCBtb2RpZmllZCBjb2RlIGZhbGxzIHN0cmljdGx5IGludG8gb25lIG9yIG1vcmUgb2YgdGhlc2UgY2F0ZWdvcmllczpcblxuLSBOb24ta2VybmVsIGFuZCBub24tZXhlY3V0YWJsZSBjaGFuZ2VzOlxuICAqIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIGNvbW1lbnRzLCBvciBzcGVsbGluZyBmaXhlcy5cbiAgKiBVc2VyLXNwYWNlIGRpcmVjdG9yaWVzLCBzZWxmLXRlc3RzLCBzYW1wbGVzLCBvciBzY3JpcHRzIChlLmcuLCB0b29scy8sIHNhbXBsZXMvLCBzY3JpcHRzLywgdXNyLylcbiAgICB0aGF0IGRvIG5vdCBhZmZlY3QgdGhlIGNvbXBpbGVkIGtlcm5lbCBpbWFnZSAodm1saW51eCkgb3Iga2VybmVsIG1vZHVsZXMuXG4gICogUHVyZWx5IGRlY29yYXRpdmUgbG9nZ2luZyAoZS5nLiwgbWVzc2FnZSBzdHJpbmdzIGluIHByX2VyciwgcHJpbnRrLCBkZXZfaW5mbykgb3IgdHJhY2Vwb2ludHNcbiAgICB0aGF0IGRvIG5vdCBhbHRlciBjb250cm9sIGZsb3cgb3IgZGF0YSBzdHJ1Y3R1cmVzLlxuICAqIEJ1aWxkIHN5c3RlbSBvciBLY29uZmlnIGNoYW5nZXMgdGhhdCBkbyBub3QgYWx0ZXIgY29tcGlsZWQgQyBsb2dpYy5cbi0gU3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIGhhcmR3YXJlOlxuICAqIFZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaGVzLCBTbWFydE5JQ3MsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCxcbiAgICBpb25pYywgYW1kZ3B1KSByZXF1aXJpbmcgcGh5c2ljYWwgQVNJQy9QQ0llIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLlxuLSBVbnJlYWNoYWJsZSBleGVjdXRpb24gcGF0aHM6XG4gICogRHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoLnJlbW92ZSwgLnNodXRkb3duLCBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIpIGV4ZWN1dGVkIG9ubHkgZHVyaW5nXG4gICAgcGh5c2ljYWwgUENJIGhvdC11bnBsdWcgb3IgbWFudWFsIHN5c2ZzIGRyaXZlciB1bmJpbmRpbmcuXG4gICogQ29kZSBwYXRocyBleGNsdXNpdmUgdG8gYXJjaGl0ZWN0dXJlcyBvdGhlciB0aGFuIHRoZSB0YXJnZXQgYXJjaGl0ZWN0dXJlLlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuMy4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPXRydWUgKFBPU0lUSVZFIENSSVRFUklBKVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZSB3aGVuZXZlciB0aGUgcGF0Y2ggdG91Y2hlcyByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlLCBpbmNsdWRpbmc6XG4tIENvcmUgU3Vic3lzdGVtczpcbiAgKiBBbnkgbG9naWMgbW9kaWZpY2F0aW9ucyBpbiBtZW1vcnkgbWFuYWdlbWVudCAobW0vKSwgc3luY2hyb25pemF0aW9uL2xvY2tpbmcgKGtlcm5lbC9sb2NraW5nLyksXG4gICAgQlBGLCBzY2hlZHVsZXIsIGNvcmUgbmV0d29ya2luZywgVkZTLCBvciBzeXNjYWxsIGhhbmRsaW5nLlxuLSBSZWZhY3RvcmluZ3MgYW5kIENvZGUgQ2xlYW51cHM6XG4gICogQW55IHJlc3RydWN0dXJpbmcgb2YgcmVhY2hhYmxlIGRhdGEgc3RydWN0dXJlcywgaGVscGVyIGFic3RyYWN0aW9ucywgb3IgYWxnb3JpdGhtIGZsb3dzLlxuLSBSdW50aW1lIEFzc2VydGlvbnMgYW5kIERlZmVuc2l2ZSBDaGVja3M6XG4gICogQW55IGludHJvZHVjdGlvbiBvciBhbHRlcmF0aW9uIG9mIGFzc2VydGlvbnMgKFdBUk5fT04qLCBWTV9XQVJOX09OKiwgQlVHX09OKiwgZXRjLikgaW4gcmVhY2hhYmxlIHBhdGhzLlxuLSBSZWFjaGFibGUgRHJpdmVycyBhbmQgUHJvdG9jb2xzOlxuICAqIERyaXZlcnMgYWNjZXNzaWJsZSB2aWEgdmlydHVhbCBidXNlcyAodmlydGlvLCBVU0IgZ2FkZ2V0LCBsb29wYmFjaywgbmV0bGluaywgYmluZGVyLCBzb2NrZXRzLCBldGMuKS5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjQuIEVYVFJBQ1RJTkcgRm9jdXNTeW1ib2xzIChQUkVWRU5USU5HIERJTFVUSU9OKVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbldoZW4gV29ydGhGdXp6aW5nPXRydWUsIHlvdSBtdXN0IGV4dHJhY3Qgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyBpbnRvIEZvY3VzU3ltYm9scyB0byBndWlkZSB0aGUgZnV6emVyOlxuXG4tIEFWT0lEIFVCSVFVSVRPVVMgTElGRUNZQ0xFIEhPVC1QQVRIUzpcbiAgRG8gTk9UIGxpc3QgZ2VuZXJpYywgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2FsbGVkIGJ5IGFsbW9zdCBldmVyeSBwcm9ncmFtIGluIHRoZSBjb3JwdXNcbiAgKGluY2x1ZGluZywgYnV0IG5vdCBsaW1pdGVkIHRvOiBnZW5lcmFsIG1lbW9yeSBhbGxvY2F0b3JzIGFuZCBkZWFsbG9jYXRvcnMsIHBhZ2UgZmF1bHRcbiAgYW5kIHRyYXAgaGFuZGxlcnMsIG9yIGNvcmUgc3luY2hyb25pemF0aW9uIHByaW1pdGl2ZXM7IHRoaXMgaXMgbm90IGFuIGV4aGF1c3RpdmUgbGlzdCkuXG4gIExpc3RpbmcgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2F1c2VzIHRoZSBmdXp6ZXIgdG8gY2xhc3NpZnkgdGhvdXNhbmRzIG9mIHVucmVsYXRlZCB0ZXN0cyBhcyBcImZvY3VzZWRcIixcbiAgd2hpY2ggc2V2ZXJlbHkgZGlsdXRlcyBmdXp6aW5nIGVmZm9ydCBhd2F5IGZyb20gdGhlIGFjdHVhbCBjaGFuZ2VzLlxuXG4tIFRBUkdFVCBTUEVDSUZJQyBGRUFUVVJFIExPR0lDIEFORCBFTlRSWVBPSU5UUzpcbiAgTGlzdCBmdW5jdGlvbnMgdGhhdCBzcGVjaWZpY2FsbHkgaW1wbGVtZW50IHRoZSBsb2dpYyBiZWluZyBhZGRlZCBvciBhbHRlcmVkLCBvciBkaXJlY3QgQVBJIGVudHJ5cG9pbnRzXG4gIGZvciB0aGUgc3Vic3lzdGVtIGZlYXR1cmUgdW5kZXIgcmV2aWV3LlxuXG4tIEhBTkRMSU5HIFNUQVRJQyBJTkxJTkUgRlVOQ1RJT05TIElOIEhFQURFUlMgKC5oKTpcbiAgQ29tcGlsZXItaW5saW5lZCBzdGF0aWMgZnVuY3Rpb25zIChzdWNoIGFzIHN0YXRpYyBpbmxpbmVzIGluIG1tLyouaCBvciBpbmNsdWRlL2xpbnV4LyouaCkgbGFja1xuICBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzIGluIHZtbGludXggYW5kIGNhbm5vdCBiZSB0YXJnZXRlZCBkaXJlY3RseSBieSBzeW1ib2wgY292ZXJhZ2UgZmlsdGVycy5cbiAgSWYgdGhlIGNoYW5nZXMgYXJlIHByaW1hcmlseSBpbiBzdGF0aWMgaW5saW5lIGhlbHBlcnMsIGlkZW50aWZ5IG5vbi1zdGF0aWMsIGZlYXR1cmUtc3BlY2lmaWMgY2FsbGVyXG4gIGZ1bmN0aW9ucyBpbiAuYyBmaWxlcyB0aGF0IGV4ZXJjaXNlIHRoZW0gKGF2b2lkaW5nIHViaXF1aXRvdXMgbGlmZWN5Y2xlIHdyYXBwZXJzKS5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjUuIElERU5USUZZSU5HIEVuYWJsZUNvbmZpZ3Ncbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5JZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IGNvbXBpbGUgYW5kIHJlYWNoIHRoZSBtb2RpZmllZCBjb2RlOlxuLSBJbnNwZWN0IEtjb25maWcgZmlsZXMgYW5kICNpZmRlZiBndWFyZHM7IGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuLSBDaGVjayBcImRlcGVuZHMgb25cIiBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MgbmVlZGVkLlxuLSBTdHJpcCBhbnkgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiVGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjRcblxuRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgOTA5YmFlNjNlNGNiOGRiYjhjMmFlYTEwM2VkZGQwY2FiYTlhZGM3NVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBTYXQgU2VwIDUgMDE6MDM6NDcgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9uZXQvd2lyZWxlc3MvcmVnLmMgYi9uZXQvd2lyZWxlc3MvcmVnLmNcbmluZGV4IGE4MzM2YmFmODVkYzYuLmEyZTBkMWNmODMxN2MgMTAwNjQ0XG4tLS0gYS9uZXQvd2lyZWxlc3MvcmVnLmNcbisrKyBiL25ldC93aXJlbGVzcy9yZWcuY1xuQEAgLTI0NjYsMTIgKzI0NjYsMjEgQEAgc3RhdGljIHZvaWQgcmVnX2NoZWNrX2NoYW5zX3dvcmsoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxuIFx0c3RydWN0IGNmZzgwMjExX3JlZ2lzdGVyZWRfZGV2aWNlICpyZGV2O1xuIFxuIFx0cHJfZGVidWcoXCJWZXJpZnlpbmcgYWN0aXZlIGludGVyZmFjZXMgYWZ0ZXIgcmVnIGNoYW5nZVxcblwiKTtcbi1cdHJ0bmxfbG9jaygpO1xuLVxuLVx0Zm9yX2VhY2hfcmRldihyZGV2KVxuK1x0LypcbitcdCAqIEFjcXVpcmUgcnRubCBwZXItZGV2aWNlIGluc3RlYWQgb2YgaG9sZGluZyBpdCBmb3IgdGhlIGVudGlyZSBsb29wO1xuK1x0ICogY2ZnODAyMTFfbGVhdmUoKSBjYW4gYmUgc2xvdyBhbmQgc3RhcnZlIG90aGVyIHJ0bmwgd2FpdGVycyBvdGhlcndpc2UuXG4rXHQgKiB3aXBoeV91bnJlZ2lzdGVyKCkgaG9sZHMgcnRubCBhY3Jvc3MgbGlzdF9kZWxfcmN1KCkgKyBzeW5jaHJvbml6ZV9yY3UoKSxcbitcdCAqIHNvIHJkZXYgY2Fubm90IGJlIGZyZWVkIHdoaWxlIHdlIGhvbGQgcnRubF9sb2NrKCkgYmVsb3cuXG4rXHQgKi9cbitcdHJjdV9yZWFkX2xvY2soKTtcbitcdGxpc3RfZm9yX2VhY2hfZW50cnlfcmN1KHJkZXYsIFx1MDAyNmNmZzgwMjExX3JkZXZfbGlzdCwgbGlzdCkge1xuK1x0XHRyY3VfcmVhZF91bmxvY2soKTtcbitcdFx0cnRubF9sb2NrKCk7XG4gXHRcdHJlZ19sZWF2ZV9pbnZhbGlkX2NoYW5zKFx1MDAyNnJkZXYtXHUwMDNld2lwaHkpO1xuLVxuLVx0cnRubF91bmxvY2soKTtcbitcdFx0cnRubF91bmxvY2soKTtcbitcdFx0cmN1X3JlYWRfbG9jaygpO1xuK1x0fVxuK1x0cmN1X3JlYWRfdW5sb2NrKCk7XG4gfVxuIFxuIHZvaWQgcmVnX2NoZWNrX2NoYW5uZWxzKHZvaWQpXG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNVQwMTowMzo1MS40MDc4NjkzMDVaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo1MDg0MDYyMjk3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIG15IG93biBtZW50YWwgcHJvY2VzczpcblxuKipEaXZpbmcgaW50byB0aGUgUmVndWxhdG9yeSBEb21haW4gQ29kZSoqXG5cbkFscmlnaHQsIHRoZSBoaW50IHBvaW50cyBtZSBzdHJhaWdodCB0byBgbmV0L3dpcmVsZXNzL3JlZy5jYC4gR29vZCwgdGhhdCdzIHdoZXJlIEknZCBleHBlY3QgdG8gZmluZCB0aGUgcmVndWxhdG9yeS1yZWxhdGVkIGNvZGUuIE15IGZpcnN0IHN0ZXAgaXMgdG8gZ2V0IGEgaGFuZGxlIG9uIHRoZSBjaGFuZ2VzLiBUaW1lIHRvIHB1bGwgdXAgdGhlIGRpZmYgYW5kIHJlYWxseSBnZXQgaW50byB0aGUgbml0dHktZ3JpdHR5LiBJIG5lZWQgdG8gdW5kZXJzdGFuZCAqZXhhY3RseSogd2hhdCdzIGJlZW4gbW9kaWZpZWQgYW5kIHdoeS4gSSdsbCBuZWVkIHRvIGV4YW1pbmUgdGhlIGNvbnRleHQgYXJvdW5kIHRob3NlIGNoYW5nZXMg4oCTIHdoYXQncyB0aGUgc3Vycm91bmRpbmcgY29kZSBkb2luZywgaG93IGRvZXMgdGhpcyBmaXQgaW50byB0aGUgYnJvYWRlciByZWd1bGF0b3J5IGRvbWFpbiBsb2dpYywgYW5kIHdoYXQncyB0aGUgaW50ZW5kZWQgaW1wYWN0P1xuXG5Ob3csIHRvIGxvY2F0ZSB0aGUgYXJlYSBpbiBxdWVzdGlvbiwgSSdsbCBsZXZlcmFnZSB0aGUgbGluZSBudW1iZXIg4oCTIGFyb3VuZCBsaW5lIDI0NjYg4oCTIGl0J3MgYWx3YXlzIGEgZ29vZCBzdGFydGluZyBwb2ludC4gSSdsbCB1c2UgYSBgcmVhZC1maWxlYCBjb21tYW5kLCBvciBzaW1pbGFyLCB0byBxdWlja2x5IGp1bXAgdG8gdGhhdCBzcGVjaWZpYyByZWdpb24gb2YgdGhlIGByZWcuY2AgZmlsZSBhbmQgc3RhcnQgbXkgYW5hbHlzaXMuIFRoaXMgZ2l2ZXMgbWUgYSBxdWljayB3YXkgdG8gZXhhbWluZSB0aGUgY29kZSdzIGltbWVkaWF0ZSBjb250ZXh0LlxuXG5cbiIsIklucHV0VG9rZW5zIjozMDU5LCJPdXRwdXRUb2tlbnMiOjM2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTIsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNVQwMTowMzo1Ni40OTE5MzM1NzJaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNTQ0MzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L3dpcmVsZXNzL3JlZy5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDI0NTUsXG4gIFwiTGluZUNvdW50XCI6IDUwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjI0NTU6XFx0XFx0XFx0Ym9vbCB2YWxpZDtcXG4yNDU2OlxcdFxcbjI0NTc6XFx0XFx0XFx0c2NvcGVkX2d1YXJkKHdpcGh5LCB3aXBoeSlcXG4yNDU4OlxcdFxcdFxcdFxcdHZhbGlkID0gcmVnX3dkZXZfY2hhbl92YWxpZCh3aXBoeSwgd2Rldik7XFxuMjQ1OTpcXHRcXHRcXHRpZiAoIXZhbGlkKVxcbjI0NjA6XFx0XFx0XFx0XFx0Y2ZnODAyMTFfbGVhdmUocmRldiwgd2RldiwgLTEpO1xcbjI0NjE6XFx0XFx0fVxcbjI0NjI6XFx0fVxcbjI0NjM6XFx0XFxuMjQ2NDpcXHRzdGF0aWMgdm9pZCByZWdfY2hlY2tfY2hhbnNfd29yayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXFxuMjQ2NTpcXHR7XFxuMjQ2NjpcXHRcXHRzdHJ1Y3QgY2ZnODAyMTFfcmVnaXN0ZXJlZF9kZXZpY2UgKnJkZXY7XFxuMjQ2NzpcXHRcXG4yNDY4OlxcdFxcdHByX2RlYnVnKFxcXCJWZXJpZnlpbmcgYWN0aXZlIGludGVyZmFjZXMgYWZ0ZXIgcmVnIGNoYW5nZVxcXFxuXFxcIik7XFxuMjQ2OTpcXHRcXHQvKlxcbjI0NzA6XFx0XFx0ICogQWNxdWlyZSBydG5sIHBlci1kZXZpY2UgaW5zdGVhZCBvZiBob2xkaW5nIGl0IGZvciB0aGUgZW50aXJlIGxvb3A7XFxuMjQ3MTpcXHRcXHQgKiBjZmc4MDIxMV9sZWF2ZSgpIGNhbiBiZSBzbG93IGFuZCBzdGFydmUgb3RoZXIgcnRubCB3YWl0ZXJzIG90aGVyd2lzZS5cXG4yNDcyOlxcdFxcdCAqIHdpcGh5X3VucmVnaXN0ZXIoKSBob2xkcyBydG5sIGFjcm9zcyBsaXN0X2RlbF9yY3UoKSArIHN5bmNocm9uaXplX3JjdSgpLFxcbjI0NzM6XFx0XFx0ICogc28gcmRldiBjYW5ub3QgYmUgZnJlZWQgd2hpbGUgd2UgaG9sZCBydG5sX2xvY2soKSBiZWxvdy5cXG4yNDc0OlxcdFxcdCAqL1xcbjI0NzU6XFx0XFx0cmN1X3JlYWRfbG9jaygpO1xcbjI0NzY6XFx0XFx0bGlzdF9mb3JfZWFjaF9lbnRyeV9yY3UocmRldiwgXFx1MDAyNmNmZzgwMjExX3JkZXZfbGlzdCwgbGlzdCkge1xcbjI0Nzc6XFx0XFx0XFx0cmN1X3JlYWRfdW5sb2NrKCk7XFxuMjQ3ODpcXHRcXHRcXHRydG5sX2xvY2soKTtcXG4yNDc5OlxcdFxcdFxcdHJlZ19sZWF2ZV9pbnZhbGlkX2NoYW5zKFxcdTAwMjZyZGV2LVxcdTAwM2V3aXBoeSk7XFxuMjQ4MDpcXHRcXHRcXHRydG5sX3VubG9jaygpO1xcbjI0ODE6XFx0XFx0XFx0cmN1X3JlYWRfbG9jaygpO1xcbjI0ODI6XFx0XFx0fVxcbjI0ODM6XFx0XFx0cmN1X3JlYWRfdW5sb2NrKCk7XFxuMjQ4NDpcXHR9XFxuMjQ4NTpcXHRcXG4yNDg2OlxcdHZvaWQgcmVnX2NoZWNrX2NoYW5uZWxzKHZvaWQpXFxuMjQ4NzpcXHR7XFxuMjQ4ODpcXHRcXHQvKlxcbjI0ODk6XFx0XFx0ICogR2l2ZSB1c2VybW9kZSBhIGNoYW5jZSB0byBkbyBzb21ldGhpbmcgbmljZXIgKG1vdmUgdG8gYW5vdGhlclxcbjI0OTA6XFx0XFx0ICogY2hhbm5lbCwgb3JkZXJseSBkaXNjb25uZWN0aW9uKSwgYmVmb3JlIGZvcmNpbmcgYSBkaXNjb25uZWN0aW9uLlxcbjI0OTE6XFx0XFx0ICovXFxuMjQ5MjpcXHRcXHRtb2RfZGVsYXllZF93b3JrKHN5c3RlbV9wb3dlcl9lZmZpY2llbnRfd3EsXFxuMjQ5MzpcXHRcXHRcXHRcXHQgXFx1MDAyNnJlZ19jaGVja19jaGFucyxcXG4yNDk0OlxcdFxcdFxcdFxcdCBtc2Vjc190b19qaWZmaWVzKFJFR19FTkZPUkNFX0dSQUNFX01TKSk7XFxuMjQ5NTpcXHR9XFxuMjQ5NjpcXHRcXG4yNDk3OlxcdHN0YXRpYyB2b2lkIHdpcGh5X3VwZGF0ZV9yZWd1bGF0b3J5KHN0cnVjdCB3aXBoeSAqd2lwaHksXFxuMjQ5ODpcXHRcXHRcXHRcXHRcXHQgICAgZW51bSBubDgwMjExX3JlZ19pbml0aWF0b3IgaW5pdGlhdG9yKVxcbjI0OTk6XFx0e1xcbjI1MDA6XFx0XFx0ZW51bSBubDgwMjExX2JhbmQgYmFuZDtcXG4yNTAxOlxcdFxcdHN0cnVjdCByZWd1bGF0b3J5X3JlcXVlc3QgKmxyID0gZ2V0X2xhc3RfcmVxdWVzdCgpO1xcbjI1MDI6XFx0XFxuMjUwMzpcXHRcXHRpZiAoaWdub3JlX3JlZ191cGRhdGUod2lwaHksIGluaXRpYXRvcikpIHtcXG4yNTA0OlxcdFxcdFxcdC8qXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA1VDAxOjAzOjU2LjQ5MjE4OTg4MloiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjM4MzgzNzI0OTgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIFRoaXMgUGF0Y2g6IEEgUG90ZW50aWFsIFJDVSBWaW9sYXRpb24qKlxuXG5Pa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcyBwYXRjaCBjb25jZXJuaW5nIGByZWdfY2hlY2tfY2hhbnNfd29ya2Agd2l0aGluIGBuZXQvd2lyZWxlc3MvcmVnLmNgLiBUaGUgZmlyc3QgdGhpbmcgdGhhdCBqdW1wcyBvdXQgaXMgdGhlIHVzZSBvZiBgbGlzdF9mb3JfZWFjaF9lbnRyeV9yY3VgLiBXYWl0IGEgc2Vjb25kISBJIHNlZSBpdCdzIGl0ZXJhdGluZyBvdmVyIGBjZmc4MDIxMV9yZGV2X2xpc3RgIHVzaW5nIGByZGV2LVx1MDAzZWxpc3QubmV4dGAuIFRoZW4gSSBzZWUgdGhlIGNyaXRpY2FsIHBvaW50OiB0aGUgY29kZSAqZHJvcHMqIGByY3VfcmVhZF91bmxvY2soKWAgYW5kIHRoZW4gcmUtYWNxdWlyZXMgYHJjdV9yZWFkX2xvY2soKWAgKndpdGhpbiogdGhlIGxvb3AgYm9keS4gQWxhcm0gYmVsbHMhXG5cblRoaXMgaXMgYSB0ZXh0Ym9vayBleGFtcGxlIG9mIHBvdGVudGlhbGx5IGJyZWFraW5nIFJDVSBpbnZhcmlhbnRzLiBXaGVuIHlvdSdyZSBkZWFsaW5nIHdpdGggYGxpc3RfZm9yX2VhY2hfZW50cnlfcmN1YCwgeW91J3JlIHN1cHBvc2VkIHRvIGhvbGQgdGhlIHJlYWQgbG9jayBhY3Jvc3MgdGhlICplbnRpcmUqIGl0ZXJhdGlvbi4gSWYgd2UgZHJvcCB0aGUgbG9jayBhbmQgcmUtYWNxdWlyZSBpdCBpbnNpZGUgdGhlIGxvb3AsIHdlIGNyZWF0ZSBhIHdpbmRvdyB3aGVyZSBgcmRldmAgY291bGQgYmUgdW5saW5rZWQsIGZyZWVkLCBvciBpdHMgYGxpc3QubmV4dGAgcG9pbnRlciBjb3VsZCBiZWNvbWUgaW52YWxpZCBkdWUgdG8gdGhlIFJDVSBncmFjZSBwZXJpb2QgYWZ0ZXIgYGxpc3RfZGVsX3JjdWAuIEVzc2VudGlhbGx5LCB3ZSdyZSB2aW9sYXRpbmcgdGhlIGNvcmUgYXNzdW1wdGlvbiBvZiBSQ1UgdHJhdmVyc2FsLiBUaGlzIGlzIGEgdmVyeSB1bnNhZmUgbWFuZXV2ZXIuXG5cblRoZSBmdW5kYW1lbnRhbCBpc3N1ZSBpcyB0aGF0IGJ5IGRyb3BwaW5nIHRoZSBSQ1UgcmVhZCBsb2NrLCBgcmRldmAgbWlnaHQgaGF2ZSBiZWVuIGZyZWVkIGR1cmluZyBgc3luY2hyb25pemVfcmN1YCBvciBhZnRlciB0aGUgYGxpc3RfZGVsX3JjdWAgYW5kIGR1cmluZyB0aGUgZ3JhY2UgcGVyaW9kLiBPciBldmVuIGp1c3QgYWNjZXNzaW5nIGByZGV2LVx1MDAzZWxpc3QubmV4dGAgbWlnaHQgYmUgcHJvYmxlbWF0aWMgZHVyaW5nIHRoYXQgcGVyaW9kLiBUaGUgdHJhdmVyc2FsIGNvdWxkIGJlY29tZSBlaXRoZXIgc2FmZSBvciB1bnNhZmUsIGFuZCBpdCdzIGhhcmQgdG8gcHJlZGljdC5cblxuTm93IHRoZSBtaWxsaW9uLWRvbGxhciBxdWVzdGlvbjogaXMgdGhpcyByZWFjaGFibGU/IElzIHRoaXMgc29tZXRoaW5nIHdlIGNhbiB0cmlnZ2VyPyBHaXZlbiB0aGF0IGBuZXQvd2lyZWxlc3NgIOKAkyB3aGljaCBpbmNsdWRlcyBgY2ZnODAyMTFgLCBgbWFjODAyMTFfaHdzaW1gLCBgbmw4MDIxMWAsIGFuZCBzbyBvbiDigJMgaXMgYSBzdGFuZGFyZCB0YXJnZXQgZm9yIHN5emthbGxlciBmdXp6aW5nLCB0aGVyZSdzIGEgKnZlcnkqIGdvb2QgY2hhbmNlIHRoaXMgaXMgaW5kZWVkIHJlYWNoYWJsZSBhbmQgZnV6emVyLXRyaWdnZXJhYmxlLiBUaGlzIG1ha2VzIG1lIHZlcnkgbmVydm91czsgdGhpcyBpcyB0aGUga2luZCBvZiBzdWJ0bGUgUkNVIGJ1ZyB0aGF0IGNhbiBsZWFkIHRvIGNyYXNoZXMgb3IsIHdvcnNlLCBoYXJkLXRvLWRlYnVnIG1lbW9yeSBjb3JydXB0aW9uLlxuXG5OZXh0LCBJIG5lZWQgdG8gY2hlY2sgdGhlIEtjb25maWcgcmVxdWlyZW1lbnRzIGZvciBgbmV0L3dpcmVsZXNzL3JlZy5jYCB0byBzZWUgaWYgdGhlcmUgYXJlIGFueSBzcGVjaWZpYyBkZXBlbmRlbmNpZXMgdGhhdCBtaWdodCBsaW1pdCBvciBlbmFibGUgdGhpcyB2dWxuZXJhYmlsaXR5LlxuXG5cbiIsIklucHV0VG9rZW5zIjo0MTYwLCJPdXRwdXRUb2tlbnMiOjMxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzQ3LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDVUMDE6MDQ6MDAuMzMwNTY2NDZaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MzcwMjAxMzY0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIkNGRzgwMjExXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC93aXJlbGVzcy9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiXFxuRnVsbCBvdXRwdXQgaXMgdG9vIGxvbmcsIHNob3dpbmcgNTAwIG91dCBvZiA4NTcgbGluZXMuXFxuVXNlIG1vcmUgcHJlY2lzZSBleHByZXNzaW9uIGlmIHBvc3NpYmxlLlxcblxcbm5ldC93aXJlbGVzcy9LY29uZmlnPTU9Y29uZmlnIFdFWFRfQ09SRVxcbm5ldC93aXJlbGVzcy9LY29uZmlnLTYtXFx0ZGVmX2Jvb2wgeVxcbm5ldC93aXJlbGVzcy9LY29uZmlnOjc6XFx0ZGVwZW5kcyBvbiBDRkc4MDIxMV9XRVhUIHx8IFdJUkVMRVNTX0VYVFxcbm5ldC93aXJlbGVzcy9LY29uZmlnLTgtXFxuLS1cXG5uZXQvd2lyZWxlc3MvS2NvbmZpZz0xND1jb25maWcgV0VYVF9QUklWXFxuLS1cXG5uZXQvd2lyZWxlc3MvS2NvbmZpZy0xNi1cXG5uZXQvd2lyZWxlc3MvS2NvbmZpZzoxNzpjb25maWcgQ0ZHODAyMTFcXG5uZXQvd2lyZWxlc3MvS2NvbmZpZy0xOC1cXHR0cmlzdGF0ZSBcXFwiY2ZnODAyMTEgLSB3aXJlbGVzcyBjb25maWd1cmF0aW9uIEFQSVxcXCJcXG4tLVxcbm5ldC93aXJlbGVzcy9LY29uZmlnLTI0LVxcdCMgKHRoaXMgaXMgaGVyZSByYXRoZXIgdGhhbiBiZWxvdyB0byBhbGxvdyBpdCB0byBiZSBhIG1vZHVsZSlcXG5uZXQvd2lyZWxlc3MvS2NvbmZpZzoyNTpcXHRzZWxlY3QgQ1JZUFRPX1NIQTI1NiBpZiBDRkc4MDIxMV9VU0VfS0VSTkVMX1JFR0RCX0tFWVNcXG5uZXQvd2lyZWxlc3MvS2NvbmZpZy0yNi1cXHRoZWxwXFxuLS1cXG5uZXQvd2lyZWxlc3MvS2NvbmZpZy0zNS1cXG5uZXQvd2lyZWxlc3MvS2NvbmZpZzozNjppZiBDRkc4MDIxMVxcbm5ldC93aXJlbGVzcy9LY29uZmlnLTM3LVxcbm5ldC93aXJlbGVzcy9LY29uZmlnPTM4PWNvbmZpZyBOTDgwMjExX1RFU1RNT0RFXFxuLS1cXG5uZXQvd2lyZWxlc3MvS2NvbmZpZy01MS1cXG5uZXQvd2lyZWxlc3MvS2NvbmZpZzo1Mjpjb25maWcgQ0ZHODAyMTFfREVWRUxPUEVSX1dBUk5JTkdTXFxubmV0L3dpcmVsZXNzL0tjb25maWctNTMtXFx0Ym9vbCBcXFwiZW5hYmxlIGRldmVsb3BlciB3YXJuaW5nc1xcXCJcXG4tLVxcbm5ldC93aXJlbGVzcy9LY29uZmlnLTY3LVxcbm5ldC93aXJlbGVzcy9LY29uZmlnOjY4OmNvbmZpZyBDRkc4MDIxMV9DRVJUSUZJQ0FUSU9OX09OVVNcXG5uZXQvd2lyZWxlc3MvS2NvbmZpZy02OS1cXHRib29sIFxcXCJjZmc4MDIxMSBjZXJ0aWZpY2F0aW9uIG9udXNcXFwiXFxuLS1cXG5uZXQvd2lyZWxlc3MvS2NvbmZpZy04OC1cXG5uZXQvd2lyZWxlc3MvS2NvbmZpZzo4OTpjb25maWcgQ0ZHODAyMTFfUkVRVUlSRV9TSUdORURfUkVHREJcXG5uZXQvd2lyZWxlc3MvS2NvbmZpZzo5MDpcXHRib29sIFxcXCJyZXF1aXJlIHJlZ2RiIHNpZ25hdHVyZVxcXCIgaWYgQ0ZHODAyMTFfQ0VSVElGSUNBVElPTl9PTlVTXFxubmV0L3dpcmVsZXNzL0tjb25maWctOTEtXFx0ZGVmYXVsdCB5XFxuLS1cXG5uZXQvd2lyZWxlc3MvS2NvbmZpZy05OC1cXG5uZXQvd2lyZWxlc3MvS2NvbmZpZzo5OTpjb25maWcgQ0ZHODAyMTFfVVNFX0tFUk5FTF9SRUdEQl9LRVlTXFxubmV0L3dpcmVsZXNzL0tjb25maWc6MTAwOlxcdGJvb2wgXFxcImFsbG93IHJlZ2RiIGtleXMgc2hpcHBlZCB3aXRoIHRoZSBrZXJuZWxcXFwiIGlmIENGRzgwMjExX0NFUlRJRklDQVRJT05fT05VU1xcbm5ldC93aXJlbGVzcy9LY29uZmlnLTEwMS1cXHRkZWZhdWx0IHlcXG5uZXQvd2lyZWxlc3MvS2NvbmZpZzoxMDI6XFx0ZGVwZW5kcyBvbiBDRkc4MDIxMV9SRVFVSVJFX1NJR05FRF9SRUdEQlxcbm5ldC93aXJlbGVzcy9LY29uZmlnLTEwMy1cXHRoZWxwXFxuLS1cXG5uZXQvd2lyZWxlc3MvS2NvbmZpZy0xMTAtXFxubmV0L3dpcmVsZXNzL0tjb25maWc6MTExOmNvbmZpZyBDRkc4MDIxMV9FWFRSQV9SRUdEQl9LRVlESVJcXG5uZXQvd2lyZWxlc3MvS2NvbmZpZzoxMTI6XFx0c3RyaW5nIFxcXCJhZGRpdGlvbmFsIHJlZ2RiIGtleSBkaXJlY3RvcnlcXFwiIGlmIENGRzgwMjExX0NFUlRJRklDQVRJT05fT05VU1xcbm5ldC93aXJlbGVzcy9LY29uZmlnOjExMzpcXHRkZXBlbmRzIG9uIENGRzgwMjExX1JFUVVJUkVfU0lHTkVEX1JFR0RCXFxubmV0L3dpcmVsZXNzL0tjb25maWctMTE0LVxcdGhlbHBcXG4tLVxcbm5ldC93aXJlbGVzcy9LY29uZmlnLTEyMS1cXG5uZXQvd2lyZWxlc3MvS2NvbmZpZzoxMjI6Y29uZmlnIENGRzgwMjExX1JFR19DRUxMVUxBUl9ISU5UU1xcbm5ldC93aXJlbGVzcy9LY29uZmlnLTEyMy1cXHRib29sIFxcXCJjZmc4MDIxMSByZWd1bGF0b3J5IHN1cHBvcnQgZm9yIGNlbGx1bGFyIGJhc2Ugc3RhdGlvbiBoaW50c1xcXCJcXG5uZXQvd2lyZWxlc3MvS2NvbmZpZzoxMjQ6XFx0ZGVwZW5kcyBvbiBDRkc4MDIxMV9DRVJUSUZJQ0FUSU9OX09OVVNcXG5uZXQvd2lyZWxlc3MvS2NvbmZpZy0xMjUtXFx0aGVscFxcbi0tXFxubmV0L3dpcmVsZXNzL0tjb25maWctMTM0LVxcbm5ldC93aXJlbGVzcy9LY29uZmlnOjEzNTpjb25maWcgQ0ZHODAyMTFfUkVHX1JFTEFYX05PX0lSXFxubmV0L3dpcmVsZXNzL0tjb25maWctMTM2LVxcdGJvb2wgXFxcImNmZzgwMjExIHN1cHBvcnQgZm9yIE5PX0lSIHJlbGF4YXRpb25cXFwiXFxubmV0L3dpcmVsZXNzL0tjb25maWc6MTM3OlxcdGRlcGVuZHMgb24gQ0ZHODAyMTFfQ0VSVElGSUNBVElPTl9PTlVTXFxubmV0L3dpcmVsZXNzL0tjb25maWctMTM4LVxcdGhlbHBcXG4tLVxcbm5ldC93aXJlbGVzcy9LY29uZmlnLTE1OC1cXG5uZXQvd2lyZWxlc3MvS2NvbmZpZzoxNTk6Y29uZmlnIENGRzgwMjExX0RFRkFVTFRfUFNcXG5uZXQvd2lyZWxlc3MvS2NvbmZpZy0xNjAtXFx0Ym9vbCBcXFwiZW5hYmxlIHBvd2Vyc2F2ZSBieSBkZWZhdWx0XFxcIlxcbi0tXFxubmV0L3dpcmVsZXNzL0tjb25maWctMTY4LVxcbm5ldC93aXJlbGVzcy9LY29uZmlnOjE2OTpjb25maWcgQ0ZHODAyMTFfREVCVUdGU1xcbm5ldC93aXJlbGVzcy9LY29uZmlnLTE3MC1cXHRib29sIFxcXCJjZmc4MDIxMSBEZWJ1Z0ZTIGVudHJpZXNcXFwiXFxuLS1cXG5uZXQvd2lyZWxlc3MvS2NvbmZpZy0xNzYtXFxubmV0L3dpcmVsZXNzL0tjb25maWc6MTc3OmNvbmZpZyBDRkc4MDIxMV9DUkRBX1NVUFBPUlRcXG5uZXQvd2lyZWxlc3MvS2NvbmZpZy0xNzgtXFx0Ym9vbCBcXFwic3VwcG9ydCBDUkRBXFxcIiBpZiBFWFBFUlRcXG4tLVxcbm5ldC93aXJlbGVzcy9LY29uZmlnLTE4Ni1cXG5uZXQvd2lyZWxlc3MvS2NvbmZpZzoxODc6Y29uZmlnIENGRzgwMjExX1dFWFRcXG5uZXQvd2lyZWxlc3MvS2NvbmZpZy0xODgtXFx0Ym9vbCBcXFwiY2ZnODAyMTEgd2lyZWxlc3MgZXh0ZW5zaW9ucyBjb21wYXRpYmlsaXR5XFxcIlxcbi0tXFxubmV0L3dpcmVsZXNzL0tjb25maWctMTkzLVxcbm5ldC93aXJlbGVzcy9LY29uZmlnOjE5NDpjb25maWcgQ0ZHODAyMTFfS1VOSVRfVEVTVFxcbm5ldC93aXJlbGVzcy9LY29uZmlnLTE5NS1cXHR0cmlzdGF0ZSBcXFwiS1VuaXQgdGVzdHMgZm9yIGNmZzgwMjExXFxcIiBpZiAhS1VOSVRfQUxMX1RFU1RTXFxubmV0L3dpcmVsZXNzL0tjb25maWctMTk2LVxcdGRlcGVuZHMgb24gS1VOSVRcXG5uZXQvd2lyZWxlc3MvS2NvbmZpZzoxOTc6XFx0ZGVwZW5kcyBvbiBDRkc4MDIxMVxcbm5ldC93aXJlbGVzcy9LY29uZmlnLTE5OC1cXHRkZWZhdWx0IEtVTklUX0FMTF9URVNUU1xcbi0tXFxubmV0L3dpcmVsZXNzL0tjb25maWctMjAzLVxcbm5ldC93aXJlbGVzcy9LY29uZmlnOjIwNDplbmRpZiAjIENGRzgwMjExXFxuLS1cXG5uZXQvd2lyZWxlc3MvTWFrZWZpbGUtMS0jIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXFxubmV0L3dpcmVsZXNzL01ha2VmaWxlOjI6b2JqLSQoQ09ORklHX0NGRzgwMjExKSArPSBjZmc4MDIxMS5vXFxubmV0L3dpcmVsZXNzL01ha2VmaWxlLTMtb2JqLXkgKz0gdGVzdHMvXFxuLS1cXG5uZXQvd2lyZWxlc3MvTWFrZWZpbGU9MTI9Y2ZnODAyMTEtJChDT05GSUdfT0YpICs9IG9mLm9cXG5uZXQvd2lyZWxlc3MvTWFrZWZpbGU6MTM6Y2ZnODAyMTEtJChDT05GSUdfQ0ZHODAyMTFfREVCVUdGUykgKz0gZGVidWdmcy5vXFxubmV0L3dpcmVsZXNzL01ha2VmaWxlOjE0OmNmZzgwMjExLSQoQ09ORklHX0NGRzgwMjExX1dFWFQpICs9IHdleHQtY29tcGF0Lm8gd2V4dC1zbWUub1xcbm5ldC93aXJlbGVzcy9NYWtlZmlsZS0xNS1cXG5uZXQvd2lyZWxlc3MvTWFrZWZpbGU9MTY9Q0ZMQUdTX3RyYWNlLm8gOj0gLUkkKHNyYylcXG5uZXQvd2lyZWxlc3MvTWFrZWZpbGUtMTctXFxubmV0L3dpcmVsZXNzL01ha2VmaWxlOjE4OmNmZzgwMjExLSQoQ09ORklHX0NGRzgwMjExX1VTRV9LRVJORUxfUkVHREJfS0VZUykgKz0gc2hpcHBlZC1jZXJ0cy5vXFxubmV0L3dpcmVsZXNzL01ha2VmaWxlOjE5OmlmbmVxICgkKENPTkZJR19DRkc4MDIxMV9FWFRSQV9SRUdEQl9LRVlESVIpLClcXG5uZXQvd2lyZWxlc3MvTWFrZWZpbGUtMjAtY2ZnODAyMTEteSArPSBleHRyYS1jZXJ0cy5vXFxuLS1cXG5uZXQvd2lyZWxlc3MvTWFrZWZpbGU9MjM9JChvYmopL3NoaXBwZWQtY2VydHMuYzogJChzb3J0ICQod2lsZGNhcmQgJChzcmMpL2NlcnRzLyouaGV4KSlcXG4tLVxcbm5ldC93aXJlbGVzcy9NYWtlZmlsZS0zMS1cXG5uZXQvd2lyZWxlc3MvTWFrZWZpbGU6MzI6JChvYmopL2V4dHJhLWNlcnRzLmM6ICQoQ09ORklHX0NGRzgwMjExX0VYVFJBX1JFR0RCX0tFWURJUikgXFxcXFxcbm5ldC93aXJlbGVzcy9NYWtlZmlsZTozMzpcXHRcXHQgICAgICAkKHNvcnQgJCh3aWxkY2FyZCAkKENPTkZJR19DRkc4MDIxMV9FWFRSQV9SRUdEQl9LRVlESVIpLyoueDUwOSkpXFxubmV0L3dpcmVsZXNzL01ha2VmaWxlLTM0LVxcdEAkKGtlY2hvKSBcXFwiICBHRU4gICAgICRAXFxcIlxcbi0tXFxubmV0L3dpcmVsZXNzL2NoYW4uYz0xMjM9c3RhdGljIGNvbnN0IHUxNiBwdW5jdHVyaW5nX3ZhbHVlc18zMjBtaHpbXSA9IHtcXG4tLVxcbm5ldC93aXJlbGVzcy9jaGFuLmMtMTI4LVxcbm5ldC93aXJlbGVzcy9jaGFuLmM6MTI5OiNkZWZpbmUgQ0ZHODAyMTFfUEVSX0JXX1ZBTElEX1BVTkNUVVJJTkdfVkFMVUVTKF9idykgXFxcXFxcbm5ldC93aXJlbGVzcy9jaGFuLmMtMTMwLVxcdHsgXFxcXFxcbi0tXFxubmV0L3dpcmVsZXNzL2NoYW4uYz0xMzU9c3RhdGljIGNvbnN0IHN0cnVjdCBjZmc4MDIxMV9wZXJfYndfcHVuY3R1cmluZ192YWx1ZXMgcGVyX2J3X3B1bmN0dXJpbmdbXSA9IHtcXG5uZXQvd2lyZWxlc3MvY2hhbi5jOjEzNjpcXHRDRkc4MDIxMV9QRVJfQldfVkFMSURfUFVOQ1RVUklOR19WQUxVRVMoODApLFxcbm5ldC93aXJlbGVzcy9jaGFuLmM6MTM3OlxcdENGRzgwMjExX1BFUl9CV19WQUxJRF9QVU5DVFVSSU5HX1ZBTFVFUygxNjApLFxcbm5ldC93aXJlbGVzcy9jaGFuLmM6MTM4OlxcdENGRzgwMjExX1BFUl9CV19WQUxJRF9QVU5DVFVSSU5HX1ZBTFVFUygzMjApXFxubmV0L3dpcmVsZXNzL2NoYW4uYy0xMzktfTtcXG4tLVxcbm5ldC93aXJlbGVzcy9jaGFuLmM9MTY5NT1zdGF0aWMgYm9vbCBjZmc4MDIxMV9pcl9wZXJtaXNzaXZlX2NoYW4oc3RydWN0IHdpcGh5ICp3aXBoeSxcXG4tLVxcbm5ldC93aXJlbGVzcy9jaGFuLmMtMTcwMy1cXG5uZXQvd2lyZWxlc3MvY2hhbi5jOjE3MDQ6XFx0aWYgKCFJU19FTkFCTEVEKENPTkZJR19DRkc4MDIxMV9SRUdfUkVMQVhfTk9fSVIpIHx8XFxubmV0L3dpcmVsZXNzL2NoYW4uYy0xNzA1LVxcdCAgICAhKHdpcGh5LVxcdTAwM2VyZWd1bGF0b3J5X2ZsYWdzIFxcdTAwMjYgUkVHVUxBVE9SWV9FTkFCTEVfUkVMQVhfTk9fSVIpKVxcbi0tXFxubmV0L3dpcmVsZXNzL2NvcmUuYz01NDk9c3RydWN0IHdpcGh5ICp3aXBoeV9uZXdfbm0oY29uc3Qgc3RydWN0IGNmZzgwMjExX29wcyAqb3BzLCBpbnQgc2l6ZW9mX3ByaXYsXFxuLS1cXG5uZXQvd2lyZWxlc3MvY29yZS5jLTYzNi1cXHRcXHRcXHQgIGNmZzgwMjExX2Rmc19jaGFubmVsc191cGRhdGVfd29yayk7XFxubmV0L3dpcmVsZXNzL2NvcmUuYzo2Mzc6I2lmZGVmIENPTkZJR19DRkc4MDIxMV9XRVhUXFxubmV0L3dpcmVsZXNzL2NvcmUuYy02MzgtXFx0cmRldi1cXHUwMDNld2lwaHkud2V4dCA9IFxcdTAwMjZjZmc4MDIxMV93ZXh0X2hhbmRsZXI7XFxuLS1cXG5uZXQvd2lyZWxlc3MvY29yZS5jLTY1OC1cXG5uZXQvd2lyZWxlc3MvY29yZS5jOjY1OTojaWZkZWYgQ09ORklHX0NGRzgwMjExX0RFRkFVTFRfUFNcXG5uZXQvd2lyZWxlc3MvY29yZS5jLTY2MC1cXHRyZGV2LVxcdTAwM2V3aXBoeS5mbGFncyB8PSBXSVBIWV9GTEFHX1BTX09OX0JZX0RFRkFVTFQ7XFxuLS1cXG5uZXQvd2lyZWxlc3MvY29yZS5jPTg1Mz1pbnQgd2lwaHlfcmVnaXN0ZXIoc3RydWN0IHdpcGh5ICp3aXBoeSlcXG4tLVxcbm5ldC93aXJlbGVzcy9jb3JlLmMtMTEyMi1cXHRlbHNlIGlmICh3aXBoeS1cXHUwMDNlbWF4X251bV9ha21fc3VpdGVzIFxcdTAwM2MgTkw4MDIxMV9NQVhfTlJfQUtNX1NVSVRFUyB8fFxcbm5ldC93aXJlbGVzcy9jb3JlLmM6MTEyMzpcXHRcXHQgd2lwaHktXFx1MDAzZW1heF9udW1fYWttX3N1aXRlcyBcXHUwMDNlIENGRzgwMjExX01BWF9OVU1fQUtNX1NVSVRFUylcXG5uZXQvd2lyZWxlc3MvY29yZS5jLTExMjQtXFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuLS1cXG5uZXQvd2lyZWxlc3MvY29yZS5jPTE0MDg9c3RhdGljIHZvaWQgX2NmZzgwMjExX3VucmVnaXN0ZXJfd2RldihzdHJ1Y3Qgd2lyZWxlc3NfZGV2ICp3ZGV2LFxcbi0tXFxubmV0L3dpcmVsZXNzL2NvcmUuYy0xNDQ4LVxcbm5ldC93aXJlbGVzcy9jb3JlLmM6MTQ0OTojaWZkZWYgQ09ORklHX0NGRzgwMjExX1dFWFRcXG5uZXQvd2lyZWxlc3MvY29yZS5jLTE0NTAtXFx0a2ZyZWVfc2Vuc2l0aXZlKHdkZXYtXFx1MDAzZXdleHQua2V5cyk7XFxuLS1cXG5uZXQvd2lyZWxlc3MvY29yZS5jPTE1MDM9dm9pZCBjZmc4MDIxMV9sZWF2ZV9sb2NrZWQoc3RydWN0IGNmZzgwMjExX3JlZ2lzdGVyZWRfZGV2aWNlICpyZGV2LFxcbi0tXFxubmV0L3dpcmVsZXNzL2NvcmUuYy0xNTI3LVxcbm5ldC93aXJlbGVzcy9jb3JlLmM6MTUyODojaWZkZWYgQ09ORklHX0NGRzgwMjExX1dFWFRcXG5uZXQvd2lyZWxlc3MvY29yZS5jLTE1MjktXFx0XFx0a2ZyZWUod2Rldi1cXHUwMDNld2V4dC5pZSk7XFxuLS1cXG5uZXQvd2lyZWxlc3MvY29yZS5jPTE2MTQ9dm9pZCBjZmc4MDIxMV9pbml0X3dkZXYoc3RydWN0IHdpcmVsZXNzX2RldiAqd2RldilcXG4tLVxcbm5ldC93aXJlbGVzcy9jb3JlLmMtMTYyMi1cXG5uZXQvd2lyZWxlc3MvY29yZS5jOjE2MjM6I2lmZGVmIENPTkZJR19DRkc4MDIxMV9XRVhUXFxubmV0L3dpcmVsZXNzL2NvcmUuYy0xNjI0LVxcdHdkZXYtXFx1MDAzZXdleHQuZGVmYXVsdF9rZXkgPSAtMTtcXG4tLVxcbm5ldC93aXJlbGVzcy9jb3JlLmM9MTcwNz1zdGF0aWMgaW50IGNmZzgwMjExX25ldGRldl9ub3RpZmllcl9jYWxsKHN0cnVjdCBub3RpZmllcl9ibG9jayAqbmIsXFxuLS1cXG5uZXQvd2lyZWxlc3MvY29yZS5jLTE3ODEtXFx0XFx0c3dpdGNoICh3ZGV2LVxcdTAwM2VpZnR5cGUpIHtcXG5uZXQvd2lyZWxlc3MvY29yZS5jOjE3ODI6I2lmZGVmIENPTkZJR19DRkc4MDIxMV9XRVhUXFxubmV0L3dpcmVsZXNzL2NvcmUuYy0xNzgzLVxcdFxcdGNhc2UgTkw4MDIxMV9JRlRZUEVfQURIT0M6XFxuLS1cXG5uZXQvd2lyZWxlc3MvY29yZS5oPTU3ND1jZmc4MDIxMV9nZXRfNmdoel9wb3dlcl90eXBlKGNvbnN0IHU4ICplbGVtcywgc2l6ZV90IGVsZW1zX2xlbixcXG4tLVxcbm5ldC93aXJlbGVzcy9jb3JlLmgtNTc2LVxcbm5ldC93aXJlbGVzcy9jb3JlLmg6NTc3OiNpZmRlZiBDT05GSUdfQ0ZHODAyMTFfREVWRUxPUEVSX1dBUk5JTkdTXFxubmV0L3dpcmVsZXNzL2NvcmUuaDo1Nzg6I2RlZmluZSBDRkc4MDIxMV9ERVZfV0FSTl9PTihjb25kKVxcdFdBUk5fT04oY29uZClcXG5uZXQvd2lyZWxlc3MvY29yZS5oLTU3OS0jZWxzZVxcbi0tXFxubmV0L3dpcmVsZXNzL2NvcmUuaC01ODQtICovXFxubmV0L3dpcmVsZXNzL2NvcmUuaDo1ODU6I2RlZmluZSBDRkc4MDIxMV9ERVZfV0FSTl9PTihjb25kKVxcdCh7Ym9vbCBfX3IgPSAoY29uZCk7IF9fcjsgfSlcXG5uZXQvd2lyZWxlc3MvY29yZS5oLTU4Ni0jZW5kaWZcXG4tLVxcbm5ldC93aXJlbGVzcy9jb3JlLmg9NjI0PXN0cnVjdCBjZmc4MDIxMV9jb2xvY2F0ZWRfYXAge1xcbi0tXFxubmV0L3dpcmVsZXNzL2NvcmUuaC02NDAtXFxubmV0L3dpcmVsZXNzL2NvcmUuaDo2NDE6I2lmIElTX0VOQUJMRUQoQ09ORklHX0NGRzgwMjExX0tVTklUX1RFU1QpXFxubmV0L3dpcmVsZXNzL2NvcmUuaDo2NDI6I2RlZmluZSBFWFBPUlRfU1lNQk9MX0lGX0NGRzgwMjExX0tVTklUKHN5bSkgRVhQT1JUX1NZTUJPTF9JRl9LVU5JVChzeW0pXFxubmV0L3dpcmVsZXNzL2NvcmUuaDo2NDM6I2RlZmluZSBWSVNJQkxFX0lGX0NGRzgwMjExX0tVTklUXFxubmV0L3dpcmVsZXNzL2NvcmUuaC02NDQtdm9pZCBjZmc4MDIxMV9mcmVlX2NvbG9jX2FwX2xpc3Qoc3RydWN0IGxpc3RfaGVhZCAqY29sb2NfYXBfbGlzdCk7XFxuLS1cXG5uZXQvd2lyZWxlc3MvY29yZS5oPTY0OT1zaXplX3QgY2ZnODAyMTFfZ2VuX25ld19pZShjb25zdCB1OCAqaWUsIHNpemVfdCBpZWxlbixcXG4tLVxcbm5ldC93aXJlbGVzcy9jb3JlLmgtNjUyLSNlbHNlXFxubmV0L3dpcmVsZXNzL2NvcmUuaDo2NTM6I2RlZmluZSBFWFBPUlRfU1lNQk9MX0lGX0NGRzgwMjExX0tVTklUKHN5bSlcXG5uZXQvd2lyZWxlc3MvY29yZS5oOjY1NDojZGVmaW5lIFZJU0lCTEVfSUZfQ0ZHODAyMTFfS1VOSVQgc3RhdGljXFxubmV0L3dpcmVsZXNzL2NvcmUuaDo2NTU6I2VuZGlmIC8qIElTX0VOQUJMRUQoQ09ORklHX0NGRzgwMjExX0tVTklUX1RFU1QpICovXFxubmV0L3dpcmVsZXNzL2NvcmUuaC02NTYtXFxuLS1cXG5uZXQvd2lyZWxlc3MvZGVidWdmcy5oLTEtLyogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAgKi9cXG5uZXQvd2lyZWxlc3MvZGVidWdmcy5oOjI6I2lmbmRlZiBfX0NGRzgwMjExX0RFQlVHRlNfSFxcbm5ldC93aXJlbGVzcy9kZWJ1Z2ZzLmg6MzojZGVmaW5lIF9fQ0ZHODAyMTFfREVCVUdGU19IXFxubmV0L3dpcmVsZXNzL2RlYnVnZnMuaC00LVxcbm5ldC93aXJlbGVzcy9kZWJ1Z2ZzLmg6NTojaWZkZWYgQ09ORklHX0NGRzgwMjExX0RFQlVHRlNcXG5uZXQvd2lyZWxlc3MvZGVidWdmcy5oLTYtdm9pZCBjZmc4MDIxMV9kZWJ1Z2ZzX3JkZXZfYWRkKHN0cnVjdCBjZmc4MDIxMV9yZWdpc3RlcmVkX2RldmljZSAqcmRldik7XFxuLS1cXG5uZXQvd2lyZWxlc3MvZGVidWdmcy5oPTk9dm9pZCBjZmc4MDIxMV9kZWJ1Z2ZzX3JkZXZfYWRkKHN0cnVjdCBjZmc4MDIxMV9yZWdpc3RlcmVkX2RldmljZSAqcmRldikge31cXG4tLVxcbm5ldC93aXJlbGVzcy9kZWJ1Z2ZzLmgtMTEtXFxubmV0L3dpcmVsZXNzL2RlYnVnZnMuaDoxMjojZW5kaWYgLyogX19DRkc4MDIxMV9ERUJVR0ZTX0ggKi9cXG4tLVxcbm5ldC93aXJlbGVzcy9pYnNzLmM9MTk9dm9pZCBfX2NmZzgwMjExX2lic3Nfam9pbmVkKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGNvbnN0IHU4ICpic3NpZCxcXG4tLVxcbm5ldC93aXJlbGVzcy9pYnNzLmMtMjMtXFx0c3RydWN0IGNmZzgwMjExX2JzcyAqYnNzO1xcbm5ldC93aXJlbGVzcy9pYnNzLmM6MjQ6I2lmZGVmIENPTkZJR19DRkc4MDIxMV9XRVhUXFxubmV0L3dpcmVsZXNzL2lic3MuYy0yNS1cXHR1bmlvbiBpd3JlcV9kYXRhIHdycXU7XFxuLS1cXG5uZXQvd2lyZWxlc3MvaWJzcy5jLTUxLVxcdFxcdFxcdFxcdEdGUF9LRVJORUwpO1xcbm5ldC93aXJlbGVzcy9pYnNzLmM6NTI6I2lmZGVmIENPTkZJR19DRkc4MDIxMV9XRVhUXFxubmV0L3dpcmVsZXNzL2lic3MuYy01My1cXHRtZW1zZXQoXFx1MDAyNndycXUsIDAsIHNpemVvZih3cnF1KSk7XFxuLS1cXG5uZXQvd2lyZWxlc3MvaWJzcy5jPTg3PWludCBfX2NmZzgwMjExX2pvaW5faWJzcyhzdHJ1Y3QgY2ZnODAyMTFfcmVnaXN0ZXJlZF9kZXZpY2UgKnJkZXYsXFxuLS1cXG5uZXQvd2lyZWxlc3MvaWJzcy5jLTE0MC1cXG5uZXQvd2lyZWxlc3MvaWJzcy5jOjE0MTojaWZkZWYgQ09ORklHX0NGRzgwMjExX1dFWFRcXG5uZXQvd2lyZWxlc3MvaWJzcy5jLTE0Mi1cXHR3ZGV2LVxcdTAwM2V3ZXh0Lmlic3MuY2hhbmRlZiA9IHBhcmFtcy1cXHUwMDNlY2hhbmRlZjtcXG4tLVxcbm5ldC93aXJlbGVzcy9pYnNzLmM9MTU2PXZvaWQgY2ZnODAyMTFfY2xlYXJfaWJzcyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBib29sIG5vd2V4dClcXG4tLVxcbm5ldC93aXJlbGVzcy9pYnNzLmMtMTg0LVxcdG1lbXNldChcXHUwMDI2d2Rldi1cXHUwMDNldS5pYnNzLmNoYW5kZWYsIDAsIHNpemVvZih3ZGV2LVxcdTAwM2V1Lmlic3MuY2hhbmRlZikpO1xcbm5ldC93aXJlbGVzcy9pYnNzLmM6MTg1OiNpZmRlZiBDT05GSUdfQ0ZHODAyMTFfV0VYVFxcbm5ldC93aXJlbGVzcy9pYnNzLmMtMTg2LVxcdGlmICghbm93ZXh0KVxcbi0tXFxubmV0L3dpcmVsZXNzL2lic3MuYz0xOTI9aW50IGNmZzgwMjExX2xlYXZlX2lic3Moc3RydWN0IGNmZzgwMjExX3JlZ2lzdGVyZWRfZGV2aWNlICpyZGV2LFxcbi0tXFxubmV0L3dpcmVsZXNzL2lic3MuYy0yMTMtXFxubmV0L3dpcmVsZXNzL2lic3MuYzoyMTQ6I2lmZGVmIENPTkZJR19DRkc4MDIxMV9XRVhUXFxubmV0L3dpcmVsZXNzL2lic3MuYy0yMTUtaW50IGNmZzgwMjExX2lic3Nfd2V4dF9qb2luKHN0cnVjdCBjZmc4MDIxMV9yZWdpc3RlcmVkX2RldmljZSAqcmRldixcXG4tLVxcbm5ldC93aXJlbGVzcy9tbG1lLmM9Mjc3PXZvaWQgY2ZnODAyMTFfbWljaGFlbF9taWNfZmFpbHVyZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBjb25zdCB1OCAqYWRkcixcXG4tLVxcbm5ldC93aXJlbGVzcy9tbG1lLmMtMjgyLVxcdHN0cnVjdCBjZmc4MDIxMV9yZWdpc3RlcmVkX2RldmljZSAqcmRldiA9IHdpcGh5X3RvX3JkZXYod2lwaHkpO1xcbm5ldC93aXJlbGVzcy9tbG1lLmM6MjgzOiNpZmRlZiBDT05GSUdfQ0ZHODAyMTFfV0VYVFxcbm5ldC93aXJlbGVzcy9tbG1lLmMtMjg0LVxcdHVuaW9uIGl3cmVxX2RhdGEgd3JxdTtcXG4tLVxcbm5ldC93aXJlbGVzcy9ubDgwMjExLmM9NjY2PW5sODAyMTFfbmFuX3BlZXJfbWFwX3BvbGljeVtOTDgwMjExX05BTl9QRUVSX01BUF9BVFRSX01BWCArIDFdID0ge1xcbi0tXFxubmV0L3dpcmVsZXNzL25sODAyMTEuYy02NjgtXFx0W05MODAyMTFfTkFOX1BFRVJfTUFQX0FUVFJfVElNRV9TTE9UU10gPVxcbm5ldC93aXJlbGVzcy9ubDgwMjExLmM6NjY5OlxcdFxcdE5MQV9QT0xJQ1lfRVhBQ1RfTEVOKENGRzgwMjExX05BTl9TQ0hFRF9OVU1fVElNRV9TTE9UUyksXFxubmV0L3dpcmVsZXNzL25sODAyMTEuYy02NzAtfTtcXG4tLVxcbm5ldC93aXJlbGVzcy9ubDgwMjExLmM9NzAwPXN0YXRpYyBjb25zdCBzdHJ1Y3QgbmxhX3BvbGljeSBubDgwMjExX3BvbGljeVtOVU1fTkw4MDIxMV9BVFRSXSA9IHtcXG4tLVxcbm5ldC93aXJlbGVzcy9ubDgwMjExLmMtMTA4Mi1cXHRbTkw4MDIxMV9BVFRSX05BTl9USU1FX1NMT1RTXSA9XFxubmV0L3dpcmVsZXNzL25sODAyMTEuYzoxMDgzOlxcdFxcdE5MQV9QT0xJQ1lfRVhBQ1RfTEVOKENGRzgwMjExX05BTl9TQ0hFRF9OVU1fVElNRV9TTE9UUyksXFxubmV0L3dpcmVsZXNzL25sODAyMTEuYy0xMDg0LVxcdFtOTDgwMjExX0FUVFJfTkFOX0FWQUlMX0JMT0JdID1cXG4tLVxcbm5ldC93aXJlbGVzcy9ubDgwMjExLmM9NTQ2Nj1zdGF0aWMgaW50IG5sODAyMTFfc2V0X2tleShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKVxcbi0tXFxubmV0L3dpcmVsZXNzL25sODAyMTEuYy01NTA4LVxcbm5ldC93aXJlbGVzcy9ubDgwMjExLmM6NTUwOTojaWZkZWYgQ09ORklHX0NGRzgwMjExX1dFWFRcXG5uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jLTU1MTAtXFx0XFx0d2Rldi1cXHUwMDNld2V4dC5kZWZhdWx0X2tleSA9IGtleS5pZHg7XFxuLS1cXG5uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jLTU1MzEtXFxubmV0L3dpcmVsZXNzL25sODAyMTEuYzo1NTMyOiNpZmRlZiBDT05GSUdfQ0ZHODAyMTFfV0VYVFxcbm5ldC93aXJlbGVzcy9ubDgwMjExLmMtNTUzMy1cXHRcXHR3ZGV2LVxcdTAwM2V3ZXh0LmRlZmF1bHRfbWdtdF9rZXkgPSBrZXkuaWR4O1xcbi0tXFxubmV0L3dpcmVsZXNzL25sODAyMTEuYz01NjQ0PXN0YXRpYyBpbnQgbmw4MDIxMV9kZWxfa2V5KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pXFxuLS1cXG5uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jLTU2OTAtXFxubmV0L3dpcmVsZXNzL25sODAyMTEuYzo1NjkxOiNpZmRlZiBDT05GSUdfQ0ZHODAyMTFfV0VYVFxcbm5ldC93aXJlbGVzcy9ubDgwMjExLmMtNTY5Mi1cXHRpZiAoIWVycikge1xcbi0tXFxubmV0L3dpcmVsZXNzL25sODAyMTEuYz03ODY3PXN0YXRpYyBpbnQgbmw4MDIxMV9maWxsX2xpbmtfc3RhdGlvbihzdHJ1Y3Qgc2tfYnVmZiAqbXNnLFxcbi0tXFxubmV0L3dpcmVsZXNzL25sODAyMTEuYy03OTE0LVxcdHN3aXRjaCAocmRldi1cXHUwMDNld2lwaHkuc2lnbmFsX3R5cGUpIHtcXG5uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jOjc5MTU6XFx0Y2FzZSBDRkc4MDIxMV9TSUdOQUxfVFlQRV9NQk06XFxubmV0L3dpcmVsZXNzL25sODAyMTEuYy03OTE2LVxcdFxcdFBVVF9MSU5LX1NJTkZPKFNJR05BTCwgc2lnbmFsLCB1OCk7XFxuLS1cXG5uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jPTgwNDU9c3RhdGljIGludCBubDgwMjExX3B1dF9zdGFfaW5mb19jb21tb24oc3RydWN0IHNrX2J1ZmYgKm1zZyxcXG4tLVxcbm5ldC93aXJlbGVzcy9ubDgwMjExLmMtODA5NC1cXHRzd2l0Y2ggKHJkZXYtXFx1MDAzZXdpcGh5LnNpZ25hbF90eXBlKSB7XFxubmV0L3dpcmVsZXNzL25sODAyMTEuYzo4MDk1OlxcdGNhc2UgQ0ZHODAyMTFfU0lHTkFMX1RZUEVfTUJNOlxcbm5ldC93aXJlbGVzcy9ubDgwMjExLmMtODA5Ni1cXHRcXHRQVVRfU0lORk8oU0lHTkFMLCBzaWduYWwsIHU4KTtcXG4tLVxcbm5ldC93aXJlbGVzcy9ubDgwMjExLmM9ODc5MD1pbnQgY2ZnODAyMTFfY2hlY2tfc3RhdGlvbl9jaGFuZ2Uoc3RydWN0IHdpcGh5ICp3aXBoeSxcXG4tLVxcbm5ldC93aXJlbGVzcy9ubDgwMjExLmMtODc5NC1cXHRpZiAocGFyYW1zLVxcdTAwM2VsaXN0ZW5faW50ZXJ2YWwgIT0gLTEgXFx1MDAyNlxcdTAwMjZcXG5uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jOjg3OTU6XFx0ICAgIHN0YXR5cGUgIT0gQ0ZHODAyMTFfU1RBX0FQX0NMSUVOVF9VTkFTU09DKVxcbm5ldC93aXJlbGVzcy9ubDgwMjExLmMtODc5Ni1cXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4tLVxcbm5ldC93aXJlbGVzcy9ubDgwMjExLmMtODc5OC1cXHRpZiAocGFyYW1zLVxcdTAwM2VzdXBwb3J0X3AycF9wcyAhPSAtMSBcXHUwMDI2XFx1MDAyNlxcbm5ldC93aXJlbGVzcy9ubDgwMjExLmM6ODc5OTpcXHQgICAgc3RhdHlwZSAhPSBDRkc4MDIxMV9TVEFfQVBfQ0xJRU5UX1VOQVNTT0MpXFxubmV0L3dpcmVsZXNzL25sODAyMTEuYy04ODAwLVxcdFxcdHJldHVybiAtRUlOVkFMO1xcbi0tXFxubmV0L3dpcmVsZXNzL25sODAyMTEuYy04ODAzLVxcdCAgICAhKHBhcmFtcy1cXHUwMDNlc3RhX2ZsYWdzX3NldCBcXHUwMDI2IEJJVChOTDgwMjExX1NUQV9GTEFHX1RETFNfUEVFUikpIFxcdTAwMjZcXHUwMDI2XFxubmV0L3dpcmVsZXNzL25sODAyMTEuYzo4ODA0OlxcdCAgICBzdGF0eXBlICE9IENGRzgwMjExX1NUQV9BUF9DTElFTlRfVU5BU1NPQylcXG5uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jLTg4MDUtXFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuLS1cXG5uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jLTg4MTAtXFx0c3dpdGNoIChzdGF0eXBlKSB7XFxubmV0L3dpcmVsZXNzL25sODAyMTEuYzo4ODExOlxcdGNhc2UgQ0ZHODAyMTFfU1RBX01FU0hfUEVFUl9LRVJORUw6XFxubmV0L3dpcmVsZXNzL25sODAyMTEuYzo4ODEyOlxcdGNhc2UgQ0ZHODAyMTFfU1RBX01FU0hfUEVFUl9VU0VSOlxcbm5ldC93aXJlbGVzcy9ubDgwMjExLmMtODgxMy1cXHRcXHQvKlxcbi0tXFxubmV0L3dpcmVsZXNzL25sODAyMTEuYy04ODIzLVxcdFxcdGJyZWFrO1xcbm5ldC93aXJlbGVzcy9ubDgwMjExLmM6ODgyNDpcXHRjYXNlIENGRzgwMjExX1NUQV9URExTX1BFRVJfU0VUVVA6XFxubmV0L3dpcmVsZXNzL25sODAyMTEuYzo4ODI1OlxcdGNhc2UgQ0ZHODAyMTFfU1RBX1RETFNfUEVFUl9BQ1RJVkU6XFxubmV0L3dpcmVsZXNzL25sODAyMTEuYy04ODI2LVxcdFxcdGlmICghKHBhcmFtcy1cXHUwMDNlc3RhX2ZsYWdzX3NldCBcXHUwMDI2IEJJVChOTDgwMjExX1NUQV9GTEFHX1RETFNfUEVFUikpKVxcbi0tXFxubmV0L3dpcmVsZXNzL25sODAyMTEuYy04ODQwLVxcbm5ldC93aXJlbGVzcy9ubDgwMjExLmM6ODg0MTpcXHRpZiAoc3RhdHlwZSAhPSBDRkc4MDIxMV9TVEFfVERMU19QRUVSX1NFVFVQIFxcdTAwMjZcXHUwMDI2XFxubmV0L3dpcmVsZXNzL25sODAyMTEuYzo4ODQyOlxcdCAgICBzdGF0eXBlICE9IENGRzgwMjExX1NUQV9URExTX1BFRVJfQUNUSVZFKSB7XFxubmV0L3dpcmVsZXNzL25sODAyMTEuYy04ODQzLVxcdFxcdC8qIFRETFMgY2FuJ3QgYmUgc2V0LCAuLi4gKi9cXG4tLVxcbm5ldC93aXJlbGVzcy9ubDgwMjExLmMtODg1My1cXG5uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jOjg4NTQ6XFx0aWYgKHN0YXR5cGUgIT0gQ0ZHODAyMTFfU1RBX1RETFNfUEVFUl9TRVRVUCBcXHUwMDI2XFx1MDAyNlxcbm5ldC93aXJlbGVzcy9ubDgwMjExLmM6ODg1NTpcXHQgICAgc3RhdHlwZSAhPSBDRkc4MDIxMV9TVEFfQVBfQ0xJRU5UX1VOQVNTT0MpIHtcXG5uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jLTg4NTYtXFx0XFx0LyogcmVqZWN0IG90aGVyIHRoaW5ncyB0aGF0IGNhbid0IGNoYW5nZSAqL1xcbi0tXFxubmV0L3dpcmVsZXNzL25sODAyMTEuYy04ODYyLVxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbm5ldC93aXJlbGVzcy9ubDgwMjExLmM6ODg2MzpcXHRcXHRpZiAoc3RhdHlwZSAhPSBDRkc4MDIxMV9TVEFfTkFOX01HTVQgXFx1MDAyNlxcdTAwMjZcXG5uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jLTg4NjQtXFx0XFx0ICAgIChwYXJhbXMtXFx1MDAzZWxpbmtfc3RhX3BhcmFtcy5odF9jYXBhIHx8XFxuLS1cXG5uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jLTg4NzQtXFxubmV0L3dpcmVsZXNzL25sODAyMTEuYzo4ODc1OlxcdGlmIChzdGF0eXBlICE9IENGRzgwMjExX1NUQV9BUF9DTElFTlQgXFx1MDAyNlxcdTAwMjZcXG5uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jOjg4NzY6XFx0ICAgIHN0YXR5cGUgIT0gQ0ZHODAyMTFfU1RBX0FQX0NMSUVOVF9VTkFTU09DKSB7XFxubmV0L3dpcmVsZXNzL25sODAyMTEuYy04ODc3LVxcdFxcdGlmIChwYXJhbXMtXFx1MDAzZXZsYW4pXFxuLS1cXG5uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jLTg4ODEtXFx0LyogQWNjZXB0IEVNTFNSIGNhcGFiaWxpdGllcyBvbmx5IGZvciBBUCBjbGllbnQgYmVmb3JlIGFzc29jaWF0aW9uICovXFxubmV0L3dpcmVsZXNzL25sODAyMTEuYzo4ODgyOlxcdGlmIChzdGF0eXBlICE9IENGRzgwMjExX1NUQV9BUF9DTElFTlRfVU5BU1NPQyBcXHUwMDI2XFx1MDAyNlxcbm5ldC93aXJlbGVzcy9ubDgwMjExLmMtODg4My1cXHQgICAgcGFyYW1zLVxcdTAwM2VlbWxfY2FwX3ByZXNlbnQpXFxuLS1cXG5uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jLTg4ODYtXFx0c3dpdGNoIChzdGF0eXBlKSB7XFxubmV0L3dpcmVsZXNzL25sODAyMTEuYzo4ODg3OlxcdGNhc2UgQ0ZHODAyMTFfU1RBX0FQX01MTUVfQ0xJRU5UOlxcbm5ldC93aXJlbGVzcy9ubDgwMjExLmMtODg4OC1cXHRcXHQvKiBVc2UgdGhpcyBvbmx5IGZvciBhdXRob3JpemluZy91bmF1dGhvcml6aW5nIGEgc3RhdGlvbiAqL1xcbi0tXFxubmV0L3dpcmVsZXNzL25sODAyMTEuYy04ODkxLVxcdFxcdGJyZWFrO1xcbm5ldC93aXJlbGVzcy9ubDgwMjExLmM6ODg5MjpcXHRjYXNlIENGRzgwMjExX1NUQV9BUF9DTElFTlQ6XFxubmV0L3dpcmVsZXNzL25sODAyMTEuYzo4ODkzOlxcdGNhc2UgQ0ZHODAyMTFfU1RBX0FQX0NMSUVOVF9VTkFTU09DOlxcbm5ldC93aXJlbGVzcy9ubDgwMjExLmMtODg5NC1cXHRcXHQvKiBhY2NlcHQgb25seSB0aGUgbGlzdGVkIGJpdHMgKi9cXG4tLVxcbm5ldC93aXJlbGVzcy9ubDgwMjExLmMtODkxMS1cXHRcXHRicmVhaztcXG5uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jOjg5MTI6XFx0Y2FzZSBDRkc4MDIxMV9TVEFfSUJTUzpcXG5uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jOjg5MTM6XFx0Y2FzZSBDRkc4MDIxMV9TVEFfQVBfU1RBOlxcbm5ldC93aXJlbGVzcy9ubDgwMjExLmMtODkxNC1cXHRcXHQvKiByZWplY3QgYW55IGNoYW5nZXMgb3RoZXIgdGhhbiBBVVRIT1JJWkVEICovXFxuLS1cXG5uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jLTg5MTctXFx0XFx0YnJlYWs7XFxubmV0L3dpcmVsZXNzL25sODAyMTEuYzo4OTE4OlxcdGNhc2UgQ0ZHODAyMTFfU1RBX1RETFNfUEVFUl9TRVRVUDpcXG5uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jLTg5MTktXFx0XFx0LyogcmVqZWN0IGFueSBjaGFuZ2VzIG90aGVyIHRoYW4gQVVUSE9SSVpFRCBvciBXTUUgKi9cXG4tLVxcbm5ldC93aXJlbGVzcy9ubDgwMjExLmMtODkyNy1cXHRcXHRicmVhaztcXG5uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jOjg5Mjg6XFx0Y2FzZSBDRkc4MDIxMV9TVEFfVERMU19QRUVSX0FDVElWRTpcXG5uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jLTg5MjktXFx0XFx0LyogcmVqZWN0IGFueSBjaGFuZ2VzICovXFxubmV0L3dpcmVsZXNzL25sODAyMTEuYy04OTMwLVxcdFxcdHJldHVybiAtRUlOVkFMO1xcbm5ldC93aXJlbGVzcy9ubDgwMjExLmM6ODkzMTpcXHRjYXNlIENGRzgwMjExX1NUQV9NRVNIX1BFRVJfS0VSTkVMOlxcbm5ldC93aXJlbGVzcy9ubDgwMjExLmMtODkzMi1cXHRcXHRpZiAocGFyYW1zLVxcdTAwM2VzdGFfbW9kaWZ5X21hc2sgXFx1MDAyNiBTVEFUSU9OX1BBUkFNX0FQUExZX1BMSU5LX1NUQVRFKVxcbi0tXFxubmV0L3dpcmVsZXNzL25sODAyMTEuYy04OTM0LVxcdFxcdGJyZWFrO1xcbm5ldC93aXJlbGVzcy9ubDgwMjExLmM6ODkzNTpcXHRjYXNlIENGRzgwMjExX1NUQV9NRVNIX1BFRVJfVVNFUjpcXG5uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jLTg5MzYtXFx0XFx0aWYgKHBhcmFtcy1cXHUwMDNlcGxpbmtfYWN0aW9uICE9IE5MODAyMTFfUExJTktfQUNUSU9OX05PX0FDVElPTiBcXHUwMDI2XFx1MDAyNlxcbi0tXFxubmV0L3dpcmVsZXNzL25sODAyMTEuYy04OTM5LVxcdFxcdGJyZWFrO1xcbm5ldC93aXJlbGVzcy9ubDgwMjExLmM6ODk0MDpcXHRjYXNlIENGRzgwMjExX1NUQV9OQU5fTUdNVDpcXG5uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jLTg5NDEtXFx0XFx0aWYgKHBhcmFtcy1cXHUwMDNlc3RhX2ZsYWdzX21hc2sgXFx1MDAyNlxcbi0tXFxubmV0L3dpcmVsZXNzL25sODAyMTEuYy04OTQ1LVxcdFxcdGJyZWFrO1xcbm5ldC93aXJlbGVzcy9ubDgwMjExLmM6ODk0NjpcXHRjYXNlIENGRzgwMjExX1NUQV9OQU5fREFUQTpcXG5uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jLTg5NDctXFx0XFx0aWYgKHBhcmFtcy1cXHUwMDNlc3RhX2ZsYWdzX21hc2sgXFx1MDAyNlxcbi0tXFxubmV0L3dpcmVsZXNzL25sODAyMTEuYy04OTU5LVxcdCAqL1xcbm5ldC93aXJlbGVzcy9ubDgwMjExLmM6ODk2MDpcXHRpZiAoc3RhdHlwZSAhPSBDRkc4MDIxMV9TVEFfQVBfQ0xJRU5UX1VOQVNTT0MgXFx1MDAyNlxcdTAwMjZcXG5uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jOjg5NjE6XFx0ICAgIHN0YXR5cGUgIT0gQ0ZHODAyMTFfU1RBX1RETFNfUEVFUl9TRVRVUClcXG5uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jLTg5NjItXFx0XFx0cGFyYW1zLVxcdTAwM2VsaW5rX3N0YV9wYXJhbXMub3Btb2RlX25vdGlmX3VzZWQgPSBmYWxzZTtcXG4tLVxcbm5ldC93aXJlbGVzcy9ubDgwMjExLmM9MTA4MDQ9c3RhdGljIGludCBubDgwMjExX2dldF9yZWdfZHVtcChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbi0tXFxubmV0L3dpcmVsZXNzL25sODAyMTEuYy0xMDg0NS1cXG5uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jOjEwODQ2OiNpZmRlZiBDT05GSUdfQ0ZHODAyMTFfQ1JEQV9TVVBQT1JUXFxubmV0L3dpcmVsZXNzL25sODAyMTEuYy0xMDg0Ny1zdGF0aWMgY29uc3Qgc3RydWN0IG5sYV9wb2xpY3kgcmVnX3J1bGVfcG9saWN5W05MODAyMTFfUkVHX1JVTEVfQVRUUl9NQVggKyAxXSA9IHtcXG4tLVxcbm5ldC93aXJlbGVzcy9ubDgwMjExLmM9MTA4OTc9c3RhdGljIGludCBubDgwMjExX3NldF9yZWcoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGdlbmxfaW5mbyAqaW5mbylcXG4tLVxcbm5ldC93aXJlbGVzcy9ubDgwMjExLmMtMTA5NzUtfVxcbm5ldC93aXJlbGVzcy9ubDgwMjExLmM6MTA5NzY6I2VuZGlmIC8qIENPTkZJR19DRkc4MDIxMV9DUkRBX1NVUFBPUlQgKi9cXG5uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jLTEwOTc3LVxcbi0tXFxubmV0L3dpcmVsZXNzL25sODAyMTEuYz0xMjM5OT1zdGF0aWMgaW50IG5sODAyMTFfc2VuZF9ic3Moc3RydWN0IHNrX2J1ZmYgKm1zZywgc3RydWN0IG5ldGxpbmtfY2FsbGJhY2sgKmNiLFxcbi0tXFxubmV0L3dpcmVsZXNzL25sODAyMTEuYy0xMjQ5Ni1cXHRcXHRzd2l0Y2ggKHJkZXYtXFx1MDAzZXdpcGh5LnNpZ25hbF90eXBlKSB7XFxubmV0L3dpcmVsZXNzL25sODAyMTEuYzoxMjQ5NzpcXHRcXHRjYXNlIENGRzgwMjExX1NJR05BTF9UWVBFX01CTTpcXG5uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jLTEyNDk4LVxcdFxcdFxcdGlmIChubGFfcHV0X3UzMihtc2csIE5MODAyMTFfQlNTX1NJR05BTF9NQk0sXFxuLS1cXG5uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jLTEyNTAxLVxcdFxcdFxcdGJyZWFrO1xcbm5ldC93aXJlbGVzcy9ubDgwMjExLmM6MTI1MDI6XFx0XFx0Y2FzZSBDRkc4MDIxMV9TSUdOQUxfVFlQRV9VTlNQRUM6XFxubmV0L3dpcmVsZXNzL25sODAyMTEuYy0xMjUwMy1cXHRcXHRcXHRpZiAobmxhX3B1dF91OChtc2csIE5MODAyMTFfQlNTX1NJR05BTF9VTlNQRUMsXFxuLS1cXG5uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jPTE2NTQzPXN0YXRpYyBpbnQgbmw4MDIxMV9wYXJzZV9uYW5fY29uZihzdHJ1Y3Qgd2lwaHkgKndpcGh5LFxcbi0tXFxubmV0L3dpcmVsZXNzL25sODAyMTEuYy0xNjU1Ny1cXG5uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jOjE2NTU4OlxcdFxcdGNoYW5nZWQgfD0gQ0ZHODAyMTFfTkFOX0NPTkZfQ0hBTkdFRF9QUkVGO1xcbm5ldC93aXJlbGVzcy9ubDgwMjExLmMtMTY1NTktXFx0fVxcbi0tXFxubmV0L3dpcmVsZXNzL25sODAyMTEuYy0xNjU3MC1cXHRcXHRjb25mLVxcdTAwM2ViYW5kcyA9IGJhbmRzO1xcbm5ldC93aXJlbGVzcy9ubDgwMjExLmM6MTY1NzE6XFx0XFx0Y2hhbmdlZCB8PSBDRkc4MDIxMV9OQU5fQ09ORl9DSEFOR0VEX0JBTkRTO1xcbm5ldC93aXJlbGVzcy9ubDgwMjExLmMtMTY1NzItXFx0fVxcbi0tXFxubmV0L3dpcmVsZXNzL25sODAyMTEuYy0xNjU5Mi1cXG5uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jOjE2NTkzOlxcdGNoYW5nZWQgfD0gQ0ZHODAyMTFfTkFOX0NPTkZfQ0hBTkdFRF9DT05GSUc7XFxubmV0L3dpcmVsZXNzL25sODAyMTEuYy0xNjU5NC1cXHRpZiAoYXR0cnNbTkw4MDIxMV9OQU5fQ09ORl9DTFVTVEVSX0lEXSBcXHUwMDI2XFx1MDAyNiBzdGFydCkge1xcbi0tXFxubmV0L3dpcmVsZXNzL25sODAyMTEuYz0xNzQwND1ubDgwMjExX3BhcnNlX25hbl9zY2hlZHVsZShzdHJ1Y3QgZ2VubF9pbmZvICppbmZvLCBzdHJ1Y3QgbmxhdHRyICpzbG90c19hdHRyLFxcbm5ldC93aXJlbGVzcy9ubDgwMjExLmM6MTc0MDU6XFx0XFx0XFx0ICAgdTggc2NoZWR1bGVbQ0ZHODAyMTFfTkFOX1NDSEVEX05VTV9USU1FX1NMT1RTXSxcXG5uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jLTE3NDA2LVxcdFxcdFxcdCAgIHU4IG5fY2hhbm5lbHMpXFxubmV0L3dpcmVsZXNzL25sODAyMTEuYy0xNzQwNy17XFxubmV0L3dpcmVsZXNzL25sODAyMTEuYzoxNzQwODpcXHRpZiAoV0FSTl9PTihubGFfbGVuKHNsb3RzX2F0dHIpICE9IENGRzgwMjExX05BTl9TQ0hFRF9OVU1fVElNRV9TTE9UUykpXFxubmV0L3dpcmVsZXNzL25sODAyMTEuYy0xNzQwOS1cXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4tLVxcbm5ldC93aXJlbGVzcy9ubDgwMjExLmMtMTc0MTItXFxubmV0L3dpcmVsZXNzL25sODAyMTEuYzoxNzQxMzpcXHRmb3IgKGludCBzbG90ID0gMDsgc2xvdCBcXHUwMDNjIENGRzgwMjExX05BTl9TQ0hFRF9OVU1fVElNRV9TTE9UUzsgc2xvdCsrKSB7XFxubmV0L3dpcmVsZXNzL25sODAyMTEuYy0xNzQxNC1cXHRcXHRpZiAoc2NoZWR1bGVbc2xvdF0gIT0gTkw4MDIxMV9OQU5fU0NIRURfTk9UX0FWQUlMX1NMT1QgXFx1MDAyNlxcdTAwMjZcXG4tLVxcbm5ldC93aXJlbGVzcy9ubDgwMjExLmM9MTc1MTA9c3RhdGljIGludCBubDgwMjExX25hbl9zZXRfcGVlcl9zY2hlZChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbi0tXFxubmV0L3dpcmVsZXNzL25sODAyMTEuYy0xNzYwNC1cXHRmb3IgKGludCBqID0gMDsgaiBcXHUwMDNjIEFSUkFZX1NJWkUoc2NoZWQubWFwcyk7IGorKylcXG5uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jOjE3NjA1OlxcdFxcdHNjaGVkLm1hcHNbal0ubWFwX2lkID0gQ0ZHODAyMTFfTkFOX0lOVkFMSURfTUFQX0lEO1xcbm5ldC93aXJlbGVzcy9ubDgwMjExLmMtMTc2MDYtXFxuLS1cXG5uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jPTE5MjMwPXN0YXRpYyBpbnQgbmw4MDIxMV9zZXRfaHdfdGltZXN0YW1wKHN0cnVjdCBza19idWZmICpza2IsXFxuLS1cXG5uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jLTE5MjQwLVxcdGlmICghaW5mby1cXHUwMDNlYXR0cnNbTkw4MDIxMV9BVFRSX01BQ10gXFx1MDAyNlxcdTAwMjZcXG5uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jOjE5MjQxOlxcdCAgICByZGV2LVxcdTAwM2V3aXBoeS5od190aW1lc3RhbXBfbWF4X3BlZXJzICE9IENGRzgwMjExX0hXX1RJTUVTVEFNUF9BTExfUEVFUlMpXFxubmV0L3dpcmVsZXNzL25sODAyMTEuYy0xOTI0Mi1cXHRcXHRyZXR1cm4gLUVPUE5PVFNVUFA7XFxuLS1cXG5uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jPTE5NzMzPXN0YXRpYyBjb25zdCBzdHJ1Y3QgZ2VubF9zbWFsbF9vcHMgbmw4MDIxMV9zbWFsbF9vcHNbXSA9IHtcXG4tLVxcbm5ldC93aXJlbGVzcy9ubDgwMjExLmMtMTk5MDYtXFx0fSxcXG5uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jOjE5OTA3OiNpZmRlZiBDT05GSUdfQ0ZHODAyMTFfQ1JEQV9TVVBQT1JUXFxubmV0L3dpcmVsZXNzL25sODAyMTEuYy0xOTkwOC1cXHR7XFxuLS1cXG5uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jPTIzNDA3PXZvaWQgY2ZnODAyMTFfc2NoZWR1bGVfY2hhbm5lbHNfY2hlY2soc3RydWN0IHdpcmVsZXNzX2RldiAqd2RldilcXG4tLVxcbm5ldC93aXJlbGVzcy9ubDgwMjExLmMtMjM0MTQtXFx0XFx0XFx0XFx0ICAgICBOTDgwMjExX0VYVF9GRUFUVVJFX0RGU19DT05DVVJSRU5UKSB8fFxcbm5ldC93aXJlbGVzcy9ubDgwMjExLmM6MjM0MTU6XFx0ICAgIChJU19FTkFCTEVEKENPTkZJR19DRkc4MDIxMV9SRUdfUkVMQVhfTk9fSVIpIFxcdTAwMjZcXHUwMDI2XFxubmV0L3dpcmVsZXNzL25sODAyMTEuYy0yMzQxNi1cXHQgICAgIHdpcGh5LVxcdTAwM2VyZWd1bGF0b3J5X2ZsYWdzIFxcdTAwMjYgUkVHVUxBVE9SWV9FTkFCTEVfUkVMQVhfTk9fSVIpKSlcXG4tLVxcbm5ldC93aXJlbGVzcy9yZGV2LW9wcy5oLTYtICovXFxubmV0L3dpcmVsZXNzL3JkZXYtb3BzLmg6NzojaWZuZGVmIF9fQ0ZHODAyMTFfUkRFVl9PUFNcXG5uZXQvd2lyZWxlc3MvcmRldi1vcHMuaDo4OiNkZWZpbmUgX19DRkc4MDIxMV9SREVWX09QU1xcbm5ldC93aXJlbGVzcy9yZGV2LW9wcy5oLTktXFxuLS1cXG5uZXQvd2lyZWxlc3MvcmRldi1vcHMuaD0xNjI1PXJkZXZfc2V0X2VwY3Moc3RydWN0IGNmZzgwMjExX3JlZ2lzdGVyZWRfZGV2aWNlICpyZGV2LFxcbi0tXFxubmV0L3dpcmVsZXNzL3JkZXYtb3BzLmgtMTYzOC1cXG5uZXQvd2lyZWxlc3MvcmRldi1vcHMuaDoxNjM5OiNlbmRpZiAvKiBfX0NGRzgwMjExX1JERVZfT1BTICovXFxuLS1cXG5uZXQvd2lyZWxlc3MvcmVnLmM9NDk3PXN0YXRpYyBpbnQgcmVnX3NjaGVkdWxlX2FwcGx5KGNvbnN0IHN0cnVjdCBpZWVlODAyMTFfcmVnZG9tYWluICpyZWdkb20pXFxuLS1cXG5uZXQvd2lyZWxlc3MvcmVnLmMtNTE2LVxcbm5ldC93aXJlbGVzcy9yZWcuYzo1MTc6I2lmZGVmIENPTkZJR19DRkc4MDIxMV9DUkRBX1NVUFBPUlRcXG5uZXQvd2lyZWxlc3MvcmVnLmMtNTE4LS8qIE1heCBudW1iZXIgb2YgY29uc2VjdXRpdmUgYXR0ZW1wdHMgdG8gY29tbXVuaWNhdGUgd2l0aCBDUkRBICAqL1xcbi0tXFxubmV0L3dpcmVsZXNzL3JlZy5jPTU4Nj1zdGF0aWMgaW5saW5lIGludCBjYWxsX2NyZGEoY29uc3QgY2hhciAqYWxwaGEyKVxcbi0tXFxubmV0L3dpcmVsZXNzL3JlZy5jLTU4OS19XFxubmV0L3dpcmVsZXNzL3JlZy5jOjU5MDojZW5kaWYgLyogQ09ORklHX0NGRzgwMjExX0NSREFfU1VQUE9SVCAqL1xcbm5ldC93aXJlbGVzcy9yZWcuYy01OTEtXFxuLS1cXG5uZXQvd2lyZWxlc3MvcmVnLmM9Njk3PXN0YXRpYyBib29sIHZhbGlkX2NvdW50cnkoY29uc3QgdTggKmRhdGEsIHVuc2lnbmVkIGludCBzaXplLFxcbi0tXFxubmV0L3dpcmVsZXNzL3JlZy5jLTcyOS1cXG5uZXQvd2lyZWxlc3MvcmVnLmM6NzMwOiNpZmRlZiBDT05GSUdfQ0ZHODAyMTFfUkVRVUlSRV9TSUdORURfUkVHREJcXG5uZXQvd2lyZWxlc3MvcmVnLmMtNzMxLSNpbmNsdWRlIFxcdTAwM2NrZXlzL2FzeW1tZXRyaWMtdHlwZS5oXFx1MDAzZVxcbi0tXFxubmV0L3dpcmVsZXNzL3JlZy5jPTczNT1zdGF0aWMgaW50IF9faW5pdCBsb2FkX2J1aWx0aW5fcmVnZGJfa2V5cyh2b2lkKVxcbi0tXFxubmV0L3dpcmVsZXNzL3JlZy5jLTc0Ny1cXG5uZXQvd2lyZWxlc3MvcmVnLmM6NzQ4OiNpZmRlZiBDT05GSUdfQ0ZHODAyMTFfVVNFX0tFUk5FTF9SRUdEQl9LRVlTXFxubmV0L3dpcmVsZXNzL3JlZy5jLTc0OS1cXHR4NTA5X2xvYWRfY2VydGlmaWNhdGVfbGlzdChzaGlwcGVkX3JlZ2RiX2NlcnRzLFxcbi0tXFxubmV0L3dpcmVsZXNzL3JlZy5jLTc1Mi0jZW5kaWZcXG5uZXQvd2lyZWxlc3MvcmVnLmM6NzUzOiNpZmRlZiBDT05GSUdfQ0ZHODAyMTFfRVhUUkFfUkVHREJfS0VZRElSXFxubmV0L3dpcmVsZXNzL3JlZy5jOjc1NDpcXHRpZiAoQ09ORklHX0NGRzgwMjExX0VYVFJBX1JFR0RCX0tFWURJUlswXSAhPSAnXFxcXDAnKVxcbm5ldC93aXJlbGVzcy9yZWcuYy03NTUtXFx0XFx0eDUwOV9sb2FkX2NlcnRpZmljYXRlX2xpc3QoZXh0cmFfcmVnZGJfY2VydHMsXFxuLS1cXG5uZXQvd2lyZWxlc3MvcmVnLmM9Nzk4PXN0YXRpYyB2b2lkIGZyZWVfcmVnZGJfa2V5cmluZyh2b2lkKVxcbi0tXFxubmV0L3dpcmVsZXNzL3JlZy5jLTgwMC19XFxubmV0L3dpcmVsZXNzL3JlZy5jOjgwMTojZW5kaWYgLyogQ09ORklHX0NGRzgwMjExX1JFUVVJUkVfU0lHTkVEX1JFR0RCICovXFxubmV0L3dpcmVsZXNzL3JlZy5jLTgwMi1cXG4tLVxcbm5ldC93aXJlbGVzcy9yZWcuYz0yMDM4PWJvb2wgcmVnX2xhc3RfcmVxdWVzdF9jZWxsX2Jhc2Uodm9pZClcXG4tLVxcbm5ldC93aXJlbGVzcy9yZWcuYy0yMDQyLVxcbm5ldC93aXJlbGVzcy9yZWcuYzoyMDQzOiNpZmRlZiBDT05GSUdfQ0ZHODAyMTFfUkVHX0NFTExVTEFSX0hJTlRTXFxubmV0L3dpcmVsZXNzL3JlZy5jLTIwNDQtLyogQ29yZSBzcGVjaWZpYyBjaGVjayAqL1xcbi0tXFxubmV0L3dpcmVsZXNzL3NjYW4uYz0yMzA9c3RhdGljIHNpemVfdCBjZmc4MDIxMV9jb3B5X2VsZW1fd2l0aF9mcmFncyhjb25zdCBzdHJ1Y3QgZWxlbWVudCAqZWxlbSxcXG4tLVxcbm5ldC93aXJlbGVzcy9zY2FuLmMtMjY3LVxcbm5ldC93aXJlbGVzcy9zY2FuLmM6MjY4OlZJU0lCTEVfSUZfQ0ZHODAyMTFfS1VOSVQgc2l6ZV90XFxubmV0L3dpcmVsZXNzL3NjYW4uYy0yNjktY2ZnODAyMTFfZ2VuX25ld19pZShjb25zdCB1OCAqaWUsIHNpemVfdCBpZWxlbixcXG4tLVxcbm5ldC93aXJlbGVzcy9zY2FuLmMtNDA2LX1cXG5uZXQvd2lyZWxlc3Mvc2Nhbi5jOjQwNzpFWFBPUlRfU1lNQk9MX0lGX0NGRzgwMjExX0tVTklUKGNmZzgwMjExX2dlbl9uZXdfaWUpO1xcbm5ldC93aXJlbGVzcy9zY2FuLmMtNDA4LVxcbi0tXFxubmV0L3dpcmVsZXNzL3NjYW4uYz01NDY9c3RhdGljIGludCBjZmc4MDIxMV9jYWxjX3Nob3J0X3NzaWQoY29uc3Qgc3RydWN0IGNmZzgwMjExX2Jzc19pZXMgKmllcyxcXG4tLVxcbm5ldC93aXJlbGVzcy9zY2FuLmMtNTU3LVxcblxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNVQwMTowNDowMC43MDA3OTQ4NTRaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyODUyMDcyNzYzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aGUgcHJvY2VzcywgY29uc2lkZXJpbmcgbXkgZXhwZXJ0aXNlOlxuXG4qKkRpc3NlY3Rpbmcgd2lwaHlfdW5yZWdpc3RlcigpIGFuZCBjZmc4MDIxMV9yZGV2X2xpc3QgTWFuaXB1bGF0aW9uKipcblxuT2theSwgc28gSSdtIGRpZ2dpbmcgaW50byBgd2lwaHlfdW5yZWdpc3RlcigpYCBhbmQsIGFzIHVzdWFsLCBteSBmaXJzdCB0aG91Z2h0IGlzLCBcIldoZXJlJ3MgdGhlIGNyaXRpY2FsIHNlY3Rpb24/IEhvdyBhcmUgd2UgcHJvdGVjdGluZyBgY2ZnODAyMTFfcmRldl9saXN0YD9cIi4gSSBrbm93IHRoZSBsaXN0IGlzIGxpa2VseSBwcm90ZWN0ZWQgYnkgYSBtdXRleCBvciBzcGlubG9jaywgYW5kIEkgbmVlZCB0byBpZGVudGlmeSB3aGljaCBvbmUgYW5kIHVuZGVyc3RhbmQgdGhlIGxvY2tpbmcgb3JkZXIsIGVzcGVjaWFsbHkgZ2l2ZW4gdGhhdCBpdCBpcyBhIGdsb2JhbCByZXNvdXJjZS4gSSdtIGxvb2tpbmcgZm9yIHRoZSBkYW5jZSBvZiBhY3F1aXJpbmcgYW5kIHJlbGVhc2luZyB0aGF0IGxvY2suIElzIGl0IGEgc2ltcGxlIGxvY2tpbmcgc2NoZW1lLCBvciBzb21ldGhpbmcgbW9yZSBjb21wbGV4IHdpdGggcmVhZGVyL3dyaXRlciBsb2Nrcz8gVGhpcyBpcyBjcml0aWNhbCBmb3IgcHJldmVudGluZyByYWNlIGNvbmRpdGlvbnMsIHBhcnRpY3VsYXJseSBkdXJpbmcgdGhlIHVucmVnaXN0cmF0aW9uIHByb2Nlc3Mgd2hlbiBkZXZpY2VzIGFyZSBsaWtlbHkgYmVpbmcgcmVtb3ZlZCBvciBkZWluaXRpYWxpemVkLiBJJ20gd29uZGVyaW5nIGlmIHRoZXJlIGFyZSBhbnkgY2FsbGJhY2tzIG9yIGhhbmRsZXJzIHRoYXQgYWxzbyBhY2Nlc3MgdGhhdCBnbG9iYWwgbGlzdCBhbmQgdGhhdCBtdXN0IGJlIGNvbnNpZGVyZWQgd2l0aCB0aGUgc3luY2hyb25pemF0aW9uIHByaW1pdGl2ZS4gSSBleHBlY3QgdG8gc2VlIHRoZSBjb2RlIGNhcmVmdWxseSBpdGVyYXRpbmcgdGhyb3VnaCBgY2ZnODAyMTFfcmRldl9saXN0YCBhbmQsIGF0IGVhY2ggc3RhZ2UsIHNhZmVseSBoYW5kbGluZyB0aGUgZGVhbGxvY2F0aW9uIG9mIHRoZSBgd2lwaHlgIHN0cnVjdHVyZS4gSSBuZWVkIHRvIHNlZSBob3cgdGhleSdyZSBoYW5kbGluZyByZWZlcmVuY2VzLCBpZiB0aGVyZSdzIGFueSByZWZjb3VudGluZyBoYXBwZW5pbmcsIG9yIGlmIHNvbWUgb3RoZXIgbWVjaGFuaXNtIGV4aXN0cyB0byBwcmV2ZW50IHVzZS1hZnRlci1mcmVlIHNjZW5hcmlvcy4gSSdtIHBhcnRpY3VsYXJseSBpbnRlcmVzdGVkIGluIHRoZSBpbnRlcmFjdGlvbiB3aXRoIHRoZSByZWd1bGF0b3J5IGRvbWFpbiBoYW5kbGluZzsgaXMgdGhlcmUgYW55dGhpbmcgc3BlY2lmaWMgaGFwcGVuaW5nIHRoZXJlIHRoYXQgbmVlZHMgdG8gYmUgY29uc2lkZXJlZCBpbiB0aGUgdW5yZWdpc3RyYXRpb24/IFRoaXMgaXMgdHlwaWNhbGx5IHdoZXJlIHRoaW5ncyBjYW4gZ2V0IHRyaWNreS4gQWxzbywgd2hhdCBoYXBwZW5zIHdpdGggYW55IHBlbmRpbmcgb3BlcmF0aW9ucyBvciB3b3JrcXVldWVzIGFzc29jaWF0ZWQgd2l0aCB0aGUgYHdpcGh5YD8gVGhlc2UgbmVlZCB0byBiZSBmbHVzaGVkIG9yIGNhbmNlbGxlZCBncmFjZWZ1bGx5LiBJIGFsc28gbXVzdCBldmFsdWF0ZSB0aGUgcG90ZW50aWFsIGZvciBkZWFkbG9ja3MuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE2MDE2LCJPdXRwdXRUb2tlbnMiOjM1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDVUMDE6MDQ6MDMuNTUyODcxNDQ3WiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjkzMzQwMTU5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNmZzgwMjExX3JkZXZfbGlzdFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvd2lyZWxlc3MvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC93aXJlbGVzcy9jb3JlLmM9NDM9TU9EVUxFX0FMSUFTX0dFTkxfRkFNSUxZKE5MODAyMTFfR0VOTF9OQU1FKTtcXG4tLVxcbm5ldC93aXJlbGVzcy9jb3JlLmMtNDUtLyogUkNVLXByb3RlY3RlZCAoYW5kIFJUTkwgZm9yIHdyaXRlcnMpICovXFxubmV0L3dpcmVsZXNzL2NvcmUuYzo0NjpMSVNUX0hFQUQoY2ZnODAyMTFfcmRldl9saXN0KTtcXG5uZXQvd2lyZWxlc3MvY29yZS5jOjQ3OmludCBjZmc4MDIxMV9yZGV2X2xpc3RfZ2VuZXJhdGlvbjtcXG5uZXQvd2lyZWxlc3MvY29yZS5jLTQ4LVxcbi0tXFxubmV0L3dpcmVsZXNzL2NvcmUuYz04NTM9aW50IHdpcGh5X3JlZ2lzdGVyKHN0cnVjdCB3aXBoeSAqd2lwaHkpXFxuLS1cXG5uZXQvd2lyZWxlc3MvY29yZS5jLTExNjUtXFxubmV0L3dpcmVsZXNzL2NvcmUuYzoxMTY2OlxcdGxpc3RfYWRkX3JjdShcXHUwMDI2cmRldi1cXHUwMDNlbGlzdCwgXFx1MDAyNmNmZzgwMjExX3JkZXZfbGlzdCk7XFxubmV0L3dpcmVsZXNzL2NvcmUuYzoxMTY3OlxcdGNmZzgwMjExX3JkZXZfbGlzdF9nZW5lcmF0aW9uKys7XFxubmV0L3dpcmVsZXNzL2NvcmUuYy0xMTY4LVxcbi0tXFxubmV0L3dpcmVsZXNzL2NvcmUuYz0xMjkwPXZvaWQgd2lwaHlfdW5yZWdpc3RlcihzdHJ1Y3Qgd2lwaHkgKndpcGh5KVxcbi0tXFxubmV0L3dpcmVsZXNzL2NvcmUuYy0xMzI0LVxcbm5ldC93aXJlbGVzcy9jb3JlLmM6MTMyNTpcXHRjZmc4MDIxMV9yZGV2X2xpc3RfZ2VuZXJhdGlvbisrO1xcbm5ldC93aXJlbGVzcy9jb3JlLmMtMTMyNi1cXHRkZXZpY2VfZGVsKFxcdTAwMjZyZGV2LVxcdTAwM2V3aXBoeS5kZXYpO1xcbi0tXFxubmV0L3dpcmVsZXNzL2NvcmUuaD0xNjY9ZXh0ZXJuIHN0cnVjdCB3b3JrcXVldWVfc3RydWN0ICpjZmc4MDIxMV93cTtcXG5uZXQvd2lyZWxlc3MvY29yZS5oOjE2NzpleHRlcm4gc3RydWN0IGxpc3RfaGVhZCBjZmc4MDIxMV9yZGV2X2xpc3Q7XFxubmV0L3dpcmVsZXNzL2NvcmUuaDoxNjg6ZXh0ZXJuIGludCBjZmc4MDIxMV9yZGV2X2xpc3RfZ2VuZXJhdGlvbjtcXG5uZXQvd2lyZWxlc3MvY29yZS5oLTE2OS1cXG4tLVxcbm5ldC93aXJlbGVzcy9jb3JlLmg9MTcxPXN0YXRpYyBpbmxpbmUgaW50IGZvcl9lYWNoX3JkZXZfY2hlY2tfcnRubCh2b2lkKVxcbi0tXFxubmV0L3dpcmVsZXNzL2NvcmUuaC0xNzctXFx0aWYgKGZvcl9lYWNoX3JkZXZfY2hlY2tfcnRubCgpKSB7fSBlbHNlXFx0XFx0XFx0XFx0XFxcXFxcbm5ldC93aXJlbGVzcy9jb3JlLmg6MTc4OlxcdFxcdGxpc3RfZm9yX2VhY2hfZW50cnkocmRldiwgXFx1MDAyNmNmZzgwMjExX3JkZXZfbGlzdCwgbGlzdClcXG5uZXQvd2lyZWxlc3MvY29yZS5oLTE3OS1cXG4tLVxcbm5ldC93aXJlbGVzcy9ubDgwMjExLmM9MzA1Nz1zdGF0aWMgaW50IG5sODAyMTFfc2VuZF93aXBoeShzdHJ1Y3QgY2ZnODAyMTFfcmVnaXN0ZXJlZF9kZXZpY2UgKnJkZXYsXFxuLS1cXG5uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jLTMwODMtXFx0ICAgIG5sYV9wdXRfdTMyKG1zZywgTkw4MDIxMV9BVFRSX0dFTkVSQVRJT04sXFxubmV0L3dpcmVsZXNzL25sODAyMTEuYzozMDg0OlxcdFxcdFxcdGNmZzgwMjExX3JkZXZfbGlzdF9nZW5lcmF0aW9uKSlcXG5uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jLTMwODUtXFx0XFx0Z290byBubGFfcHV0X2ZhaWx1cmU7XFxuLS1cXG5uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jPTQ2NTk9c3RhdGljIGludCBubDgwMjExX3NlbmRfaWZhY2Uoc3RydWN0IHNrX2J1ZmYgKm1zZywgdTMyIHBvcnRpZCwgdTMyIHNlcSwgaW50IGZsYWdzLFxcbi0tXFxubmV0L3dpcmVsZXNzL25sODAyMTEuYy00Njg4LVxcdFxcdFxcdHJkZXYtXFx1MDAzZWRldmxpc3RfZ2VuZXJhdGlvbiBeXFxubmV0L3dpcmVsZXNzL25sODAyMTEuYzo0Njg5OlxcdFxcdFxcdChjZmc4MDIxMV9yZGV2X2xpc3RfZ2VuZXJhdGlvbiBcXHUwMDNjXFx1MDAzYyAyKSkgfHxcXG5uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jLTQ2OTAtXFx0ICAgIG5sYV9wdXRfdTgobXNnLCBOTDgwMjExX0FUVFJfNEFERFIsIHdkZXYtXFx1MDAzZXVzZV80YWRkcikgfHxcXG4tLVxcbm5ldC93aXJlbGVzcy9ubDgwMjExLmM9MTA4MDQ9c3RhdGljIGludCBubDgwMjExX2dldF9yZWdfZHVtcChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbi0tXFxubmV0L3dpcmVsZXNzL25sODAyMTEuYy0xMDgyMi1cXHRyZWdfaWR4ID0gMTtcXG5uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jOjEwODIzOlxcdGxpc3RfZm9yX2VhY2hfZW50cnlfcmN1KHJkZXYsIFxcdTAwMjZjZmc4MDIxMV9yZGV2X2xpc3QsIGxpc3QpIHtcXG5uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jLTEwODI0LVxcdFxcdHJlZ2RvbSA9IGdldF93aXBoeV9yZWdkb20oXFx1MDAyNnJkZXYtXFx1MDAzZXdpcGh5KTtcXG4tLVxcbm5ldC93aXJlbGVzcy9ubDgwMjExLmM9MjMxMTU9c3RhdGljIGludCBubDgwMjExX25ldGxpbmtfbm90aWZ5KHN0cnVjdCBub3RpZmllcl9ibG9jayAqIG5iLFxcbi0tXFxubmV0L3dpcmVsZXNzL25sODAyMTEuYy0yMzEyOC1cXG5uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jOjIzMTI5OlxcdGxpc3RfZm9yX2VhY2hfZW50cnlfcmN1KHJkZXYsIFxcdTAwMjZjZmc4MDIxMV9yZGV2X2xpc3QsIGxpc3QpIHtcXG5uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jLTIzMTMwLVxcdFxcdHN0cnVjdCBjZmc4MDIxMV9zY2hlZF9zY2FuX3JlcXVlc3QgKnNjaGVkX3NjYW5fcmVxO1xcbi0tXFxubmV0L3dpcmVsZXNzL3JlZy5jPTI0NjQ9c3RhdGljIHZvaWQgcmVnX2NoZWNrX2NoYW5zX3dvcmsoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxcbi0tXFxubmV0L3dpcmVsZXNzL3JlZy5jLTI0NzUtXFx0cmN1X3JlYWRfbG9jaygpO1xcbm5ldC93aXJlbGVzcy9yZWcuYzoyNDc2OlxcdGxpc3RfZm9yX2VhY2hfZW50cnlfcmN1KHJkZXYsIFxcdTAwMjZjZmc4MDIxMV9yZGV2X2xpc3QsIGxpc3QpIHtcXG5uZXQvd2lyZWxlc3MvcmVnLmMtMjQ3Ny1cXHRcXHRyY3VfcmVhZF91bmxvY2soKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDVUMDE6MDQ6MDMuNjQ2MjE3MTU2WiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjEzMDIyOTE4NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipFeGFtaW5pbmcgdGhlIFdpcmVsZXNzIFJlZ3VsYXRvcnkgRG9tYWluIENvbmZpZ3VyYXRpb24qKlxuXG5BbHJpZ2h0LCBsZXQncyBicmVhayB0aGlzIGRvd24uIE15IGluaXRpYWwgaHVuY2ggaXMgY29uZmlybWVkOiBgbmV0L3dpcmVsZXNzL3JlZy5jYCBpcyBkZWZpbml0ZWx5IGJyb3VnaHQgaW50byB0aGUgYnVpbGQgcHJvY2VzcyB3aGVuIGBDT05GSUdfQ0ZHODAyMTFgIGlzIGVuYWJsZWQuIFRpbWUgdG8gdmVyaWZ5IHRoYXQgYXNzdW1wdGlvbi4gTGV0J3MgZGlnIGludG8gYG5ldC93aXJlbGVzcy9NYWtlZmlsZWAuIFl1cCwganVzdCBhcyBleHBlY3RlZCwgdGhlIGBvYmotJChDT05GSUdfQ0ZHODAyMTEpICs9IGNmZzgwMjExLm9gIGxpbmUgY2xlYXJseSBzaG93cyB0aGUgY29uZGl0aW9uYWwgaW5jbHVzaW9uLiBBbmQgdGhlcmUgaXQgaXMsIGluc2lkZSB0aGUgYGNmZzgwMjExLXlgIHZhcmlhYmxlIGRlZmluaXRpb246IGByZWcub2AgaXMgaW5kZWVkIGJlaW5nIGNvbXBpbGVkIGFsb25nIHdpdGggdGhlIG90aGVyIGNvcmUgbW9kdWxlcy4gQWx3YXlzIGdvb2QgdG8gZG91YmxlIGNoZWNrLCBzbyBsZXQncyBtYWtlIHN1cmUgdGhhdCdzIGNvcnJlY3QsIGdvaW5nIGJhY2sgdG8gdGhlIGBuZXQvd2lyZWxlc3MvTWFrZWZpbGVgIHRvIGNvbmZpcm0uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE3ODEwLCJPdXRwdXRUb2tlbnMiOjMxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTA5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA1VDAxOjA0OjA1Ljc3NjQ0OTQwMVoiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1OTQyMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvd2lyZWxlc3MvTWFrZWZpbGVcIixcbiAgXCJGaXJzdExpbmVcIjogMSxcbiAgXCJMaW5lQ291bnRcIjogMzBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiICAgMTpcXHQjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXFxuICAgMjpcXHRvYmotJChDT05GSUdfQ0ZHODAyMTEpICs9IGNmZzgwMjExLm9cXG4gICAzOlxcdG9iai15ICs9IHRlc3RzL1xcbiAgIDQ6XFx0XFxuICAgNTpcXHRvYmotJChDT05GSUdfV0VYVF9DT1JFKSArPSB3ZXh0LWNvcmUub1xcbiAgIDY6XFx0b2JqLSQoQ09ORklHX1dFWFRfUFJPQykgKz0gd2V4dC1wcm9jLm9cXG4gICA3OlxcdG9iai0kKENPTkZJR19XRVhUX1BSSVYpICs9IHdleHQtcHJpdi5vXFxuICAgODpcXHRcXG4gICA5OlxcdGNmZzgwMjExLXkgKz0gY29yZS5vIHN5c2ZzLm8gcmFkaW90YXAubyB1dGlsLm8gcmVnLm8gc2Nhbi5vIG5sODAyMTEub1xcbiAgMTA6XFx0Y2ZnODAyMTEteSArPSBtbG1lLm8gaWJzcy5vIHNtZS5vIGNoYW4ubyBldGh0b29sLm8gbWVzaC5vIGFwLm8gdHJhY2UubyBvY2Iub1xcbiAgMTE6XFx0Y2ZnODAyMTEteSArPSBtaWNoYWVsLW1pYy5vIHBtc3Iub1xcbiAgMTI6XFx0Y2ZnODAyMTEtJChDT05GSUdfT0YpICs9IG9mLm9cXG4gIDEzOlxcdGNmZzgwMjExLSQoQ09ORklHX0NGRzgwMjExX0RFQlVHRlMpICs9IGRlYnVnZnMub1xcbiAgMTQ6XFx0Y2ZnODAyMTEtJChDT05GSUdfQ0ZHODAyMTFfV0VYVCkgKz0gd2V4dC1jb21wYXQubyB3ZXh0LXNtZS5vXFxuICAxNTpcXHRcXG4gIDE2OlxcdENGTEFHU190cmFjZS5vIDo9IC1JJChzcmMpXFxuICAxNzpcXHRcXG4gIDE4OlxcdGNmZzgwMjExLSQoQ09ORklHX0NGRzgwMjExX1VTRV9LRVJORUxfUkVHREJfS0VZUykgKz0gc2hpcHBlZC1jZXJ0cy5vXFxuICAxOTpcXHRpZm5lcSAoJChDT05GSUdfQ0ZHODAyMTFfRVhUUkFfUkVHREJfS0VZRElSKSwpXFxuICAyMDpcXHRjZmc4MDIxMS15ICs9IGV4dHJhLWNlcnRzLm9cXG4gIDIxOlxcdGVuZGlmXFxuICAyMjpcXHRcXG4gIDIzOlxcdCQob2JqKS9zaGlwcGVkLWNlcnRzLmM6ICQoc29ydCAkKHdpbGRjYXJkICQoc3JjKS9jZXJ0cy8qLmhleCkpXFxuICAyNDpcXHRcXHRAJChrZWNobykgXFxcIiAgR0VOICAgICAkQFxcXCJcXG4gIDI1OlxcdFxcdCQoUSkoZWNobyAnI2luY2x1ZGUgXFxcInJlZy5oXFxcIic7IFxcXFxcXG4gIDI2OlxcdFxcdCAgZWNobyAnY29uc3QgdTggc2hpcHBlZF9yZWdkYl9jZXJ0c1tdID0geyc7IFxcXFxcXG4gIDI3OlxcdFxcdCAgZWNobyB8IGNhdCAtICReIDsgXFxcXFxcbiAgMjg6XFx0XFx0ICBlY2hvICd9Oyc7IFxcXFxcXG4gIDI5OlxcdFxcdCAgZWNobyAndW5zaWduZWQgaW50IHNoaXBwZWRfcmVnZGJfY2VydHNfbGVuID0gc2l6ZW9mKHNoaXBwZWRfcmVnZGJfY2VydHMpOyc7IFxcXFxcXG4gIDMwOlxcdFxcdCApIFxcdTAwM2UgJEBcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDVUMDE6MDQ6MDUuNzc2NTExMzIxWiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjIwMzcxNzU0NTcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBhIHN1bW1hcnkgb2YgbXkgdGhvdWdodCBwcm9jZXNzOlxuXG4qKkRpdmluZyBpbnRvIHRoZSBLZXJuZWwgV2lyZWxlc3MgQ29uZmlndXJhdGlvbioqXG5cbk9rYXksIHNvIEkgbmVlZCB0byBmaWd1cmUgb3V0IHRoZSBkZXBlbmRlbmNpZXMgcmVsYXRlZCB0byBgQ0ZHODAyMTFgLiBUaW1lIHRvIGhlYWQgc3RyYWlnaHQgdG8gdGhlIHNvdXJjZSDigJMgYG5ldC93aXJlbGVzcy9LY29uZmlnYC4gVGhhdCdzIHdoZXJlIGFsbCB0aGUga2VybmVsIHdpcmVsZXNzIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBhcmUgZGVmaW5lZCwgYW5kIGBDRkc4MDIxMWAgaXMgb2J2aW91c2x5IGEgY29yZSBjb21wb25lbnQgb2YgdGhhdC4gSSdsbCBuZWVkIHRvIGNhcmVmdWxseSBleGFtaW5lIHRoYXQgZmlsZSB0byB1bmRlcnN0YW5kIHdoaWNoIG90aGVyIG9wdGlvbnMsIGZlYXR1cmVzLCBvciBtb2R1bGVzIHJlbHkgb24gb3IgYXJlIGxpbmtlZCB0byBgQ0ZHODAyMTFgLiBVbmRlcnN0YW5kaW5nIHRob3NlIGRlcGVuZGVuY2llcyBpcyBjcnVjaWFsIGZvciBhbnkgbW9kaWZpY2F0aW9ucyBvciBkZWVwZXIgYW5hbHlzaXMgSSdtIHBsYW5uaW5nLiBJIG5lZWQgdG8gZW5zdXJlIG5vdGhpbmcgYnJlYWtzIHVuZXhwZWN0ZWRseSBsYXRlciBvbiBkb3duIHRoZSBsaW5lLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxODc2NywiT3V0cHV0VG9rZW5zIjozMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI0LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDVUMDE6MDQ6MDcuODEzNjg5Njk4WiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEwOTk3MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvd2lyZWxlc3MvS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiAxLFxuICBcIkxpbmVDb3VudFwiOiA0MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgICAxOlxcdCMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxcbiAgIDI6XFx0Y29uZmlnIFdJUkVMRVNTX0VYVFxcbiAgIDM6XFx0XFx0Ym9vbFxcbiAgIDQ6XFx0XFxuICAgNTpcXHRjb25maWcgV0VYVF9DT1JFXFxuICAgNjpcXHRcXHRkZWZfYm9vbCB5XFxuICAgNzpcXHRcXHRkZXBlbmRzIG9uIENGRzgwMjExX1dFWFQgfHwgV0lSRUxFU1NfRVhUXFxuICAgODpcXHRcXG4gICA5OlxcdGNvbmZpZyBXRVhUX1BST0NcXG4gIDEwOlxcdFxcdGRlZl9ib29sIHlcXG4gIDExOlxcdFxcdGRlcGVuZHMgb24gUFJPQ19GU1xcbiAgMTI6XFx0XFx0ZGVwZW5kcyBvbiBXRVhUX0NPUkVcXG4gIDEzOlxcdFxcbiAgMTQ6XFx0Y29uZmlnIFdFWFRfUFJJVlxcbiAgMTU6XFx0XFx0Ym9vbFxcbiAgMTY6XFx0XFxuICAxNzpcXHRjb25maWcgQ0ZHODAyMTFcXG4gIDE4OlxcdFxcdHRyaXN0YXRlIFxcXCJjZmc4MDIxMSAtIHdpcmVsZXNzIGNvbmZpZ3VyYXRpb24gQVBJXFxcIlxcbiAgMTk6XFx0XFx0ZGVwZW5kcyBvbiBSRktJTEwgfHwgIVJGS0lMTFxcbiAgMjA6XFx0XFx0c2VsZWN0IEZXX0xPQURFUlxcbiAgMjE6XFx0XFx0c2VsZWN0IENSQzMyXFxuICAyMjpcXHRcXHQjIG1heSBuZWVkIHRvIHVwZGF0ZSB0aGlzIHdoZW4gY2VydGlmaWNhdGVzIGFyZSBjaGFuZ2VkIGFuZCBhcmVcXG4gIDIzOlxcdFxcdCMgdXNpbmcgYSBkaWZmZXJlbnQgYWxnb3JpdGhtLCB0aG91Z2ggcmlnaHQgbm93IHRoZXkgc2hvdWxkbid0XFxuICAyNDpcXHRcXHQjICh0aGlzIGlzIGhlcmUgcmF0aGVyIHRoYW4gYmVsb3cgdG8gYWxsb3cgaXQgdG8gYmUgYSBtb2R1bGUpXFxuICAyNTpcXHRcXHRzZWxlY3QgQ1JZUFRPX1NIQTI1NiBpZiBDRkc4MDIxMV9VU0VfS0VSTkVMX1JFR0RCX0tFWVNcXG4gIDI2OlxcdFxcdGhlbHBcXG4gIDI3OlxcdFxcdCAgY2ZnODAyMTEgaXMgdGhlIExpbnV4IHdpcmVsZXNzIExBTiAoODAyLjExKSBjb25maWd1cmF0aW9uIEFQSS5cXG4gIDI4OlxcdFxcdCAgRW5hYmxlIHRoaXMgaWYgeW91IGhhdmUgYSB3aXJlbGVzcyBkZXZpY2UuXFxuICAyOTpcXHRcXG4gIDMwOlxcdFxcdCAgRm9yIG1vcmUgaW5mb3JtYXRpb24gcmVmZXIgdG8gZG9jdW1lbnRhdGlvbiBvbiB0aGUgd2lyZWxlc3Mgd2lraTpcXG4gIDMxOlxcdFxcbiAgMzI6XFx0XFx0ICBodHRwczovL3dpcmVsZXNzLndpa2kua2VybmVsLm9yZy9lbi9kZXZlbG9wZXJzL0RvY3VtZW50YXRpb24vY2ZnODAyMTFcXG4gIDMzOlxcdFxcbiAgMzQ6XFx0XFx0ICBXaGVuIGJ1aWx0IGFzIGEgbW9kdWxlIGl0IHdpbGwgYmUgY2FsbGVkIGNmZzgwMjExLlxcbiAgMzU6XFx0XFxuICAzNjpcXHRpZiBDRkc4MDIxMVxcbiAgMzc6XFx0XFxuICAzODpcXHRjb25maWcgTkw4MDIxMV9URVNUTU9ERVxcbiAgMzk6XFx0XFx0Ym9vbCBcXFwibmw4MDIxMSB0ZXN0bW9kZSBjb21tYW5kXFxcIlxcbiAgNDA6XFx0XFx0aGVscFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNVQwMTowNDowNy44MTM4MDIxMzhaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NDM2ODM3MTk3OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIFJlZ3VsYXRvcnkgRG9tYWluIENoYW5nZSBpbiBgbmV0L3dpcmVsZXNzL3JlZy5jYCoqXG5cbk9rYXksIGxldCdzIGJyZWFrIGRvd24gdGhpcyBjb2RlIGNoYW5nZSBpbiBgbmV0L3dpcmVsZXNzL3JlZy5jYC4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIGlkZW50aWZ5IGV4YWN0bHkgKndoYXQqIGNoYW5nZWQgYW5kIHdoeS4gSSBzZWUgdGhlIG1vZGlmaWNhdGlvbiB3aXRoaW4gYHJlZ19jaGVja19jaGFuc193b3JrYCwgYSBjcml0aWNhbCBmdW5jdGlvbiBpbnZvbHZlZCBpbiB2ZXJpZnlpbmcgYWN0aXZlIHdpcmVsZXNzIGludGVyZmFjZXMgYWZ0ZXIgYSByZWd1bGF0b3J5IGNoYW5nZS5cblxuQmVmb3JlLCBpdCB3YXMgYSBzdHJhaWdodGZvcndhcmQgbG9vcCwgaG9sZGluZyB0aGUgYHJ0bmxfbG9ja2Agd2hpbGUgaXRlcmF0aW5nIHRocm91Z2ggcmVnaXN0ZXJlZCBkZXZpY2VzIGFuZCBjYWxsaW5nIGByZWdfbGVhdmVfaW52YWxpZF9jaGFuc2AuICBOb3csIGl0J3MgYmVlbiByZWZhY3RvcmVkLiBUaGUga2V5IGRpZmZlcmVuY2UgaXMgdGhlIGludHJvZHVjdGlvbiBvZiBgcmN1X3JlYWRfbG9ja2AgYW5kIGByY3VfcmVhZF91bmxvY2tgIHN1cnJvdW5kaW5nIGEgYGxpc3RfZm9yX2VhY2hfZW50cnlfcmN1YCBpdGVyYXRpb24sIHdpdGggYHJ0bmxfbG9ja2AgYW5kIGBydG5sX3VubG9ja2AgbmVzdGVkIHdpdGhpbi4gVGhlIGNvbW1lbnQgZXhwbGFpbmluZyB0aGlzIGNoYW5nZSBpcyB0aGUgaW1wb3J0YW50IGNsdWU6IHRoaXMgd2FzIGRvbmUgdG8gYWRkcmVzcyBwb3RlbnRpYWwgc3RhcnZhdGlvbiBvZiBvdGhlciBSVE5MIHdhaXRlcnMgYmVjYXVzZSBgY2ZnODAyMTFfbGVhdmVgIGNhbiBiZSBzbG93LCBhbmQgdG8gYXZvaWQgaXNzdWVzIGFyb3VuZCByZGV2IHVucmVnaXN0cmF0aW9uLiBTcGVjaWZpY2FsbHksIGB3aXBoeV91bnJlZ2lzdGVyYCBob2xkcyBgcnRubF9sb2NrYCBhY3Jvc3MgYGxpc3RfZGVsX3JjdWAgYW5kIGBzeW5jaHJvbml6ZV9yY3VgLCBzbyB0aGUgYHJkZXZgIGNhbid0IGJlIGZyZWVkIHdoaWxlIHRoZSBgcnRubF9sb2NrYCBpcyBoZWxkLiBTbywgdGhlIG9yaWdpbmFsIGxvY2sgaGVsZCB0aGUgUlROTCBsb2NrIHRvbyBsb25nLiBUaGUgY2hhbmdlIGVuc3VyZXMgUlROTCBpcyBoZWxkIG9uIGEgcGVyLWRldmljZSBiYXNpcy5cblxuTm93LCB0aGUgaW1wb3J0YW50IHF1ZXN0aW9uIGZvciBteSB3b3JrIGlzOiBJcyB0aGlzIGNvZGUgcGF0aCByZWFjaGFibGUsIHBhcnRpY3VsYXJseSB3aXRoaW4gbXkgc3RhbmRhcmQgdGVzdGluZyBlbnZpcm9ubWVudHMsIGxpa2Ugc3l6a2FsbGVyIG9yIHZpcnR1YWxpemVkIHNldHVwcz8gQWJzb2x1dGVseS4gVGhlIGBjZmc4MDIxMWAgc3Vic3lzdGVtLCBjb3VwbGVkIHdpdGggYG1hYzgwMjExYCBhbmQgYG1hYzgwMjExX2h3c2ltYCwgcHJvdmlkZXMgbXVsdGlwbGUgYXZlbnVlcy4gUmVndWxhdG9yeSBkb21haW4gY2hhbmdlcyB2aWEgTkw4MDIxMSBjb21tYW5kcywgbGlrZSBgTkw4MDIxMV9DTURfUkVRX1NFVF9SRUdgLCB0cmlnZ2VyIGByZWdfY2hlY2tfY2hhbm5lbHMoKWAgb3IsIGFzIEkgc2VlIGhlcmUsIHRoZSBkZWxheWVkIHdvcmsgZnVuY3Rpb24gdGhhdCB1bHRpbWF0ZWx5IGxlYWRzIHRvIHRoaXMgYHJlZ19jaGVja19jaGFuc193b3JrYCBjYWxsLlxuXG5NeSBuZXh0IGltbWVkaWF0ZSBzdGVwIGlzIHRvIHRyYWNlIHRoZSBjYWxsIHBhdGhzIHRvIGNvbmZpcm0sIGluIGRldGFpbCwgd2hlcmUgYHJlZ19jaGVja19jaGFubmVsc2Agb3IgYHJlZ19jaGVja19jaGFuc193b3JrYCBpcyBjYWxsZWQsIGFuZCBob3cgaXQgaXMgc2NoZWR1bGVkLiBUaGlzIHdpbGwgaGVscCBkZXRlcm1pbmUgdGhlIHByZWNpc2UgY29uZGl0aW9ucyB1bmRlciB3aGljaCB0aGlzIGxvY2tpbmcgY2hhbmdlIGJlY29tZXMgYWN0aXZlIGFuZCBob3cgbGlrZWx5IGEgcGFydGljdWxhciB0ZXN0IGNhc2Ugd2lsbCBleGVyY2lzZSB0aGUgY2hhbmdlZCBjb2RlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxOTUxNSwiT3V0cHV0VG9rZW5zIjozMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjUxMCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA1VDAxOjA0OjEyLjE4MjE3NjQ3N1oiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTA5MzU0MDQ4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInJlZ19jaGVja19jaGFuc1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvd2lyZWxlc3MvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC93aXJlbGVzcy9yZWcuYz0yMjE9c3RydWN0IHJlZ19iZWFjb24ge1xcbi0tXFxubmV0L3dpcmVsZXNzL3JlZy5jLTIyNS1cXG5uZXQvd2lyZWxlc3MvcmVnLmM6MjI2OnN0YXRpYyB2b2lkIHJlZ19jaGVja19jaGFuc193b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yayk7XFxubmV0L3dpcmVsZXNzL3JlZy5jOjIyNzpzdGF0aWMgREVDTEFSRV9ERUxBWUVEX1dPUksocmVnX2NoZWNrX2NoYW5zLCByZWdfY2hlY2tfY2hhbnNfd29yayk7XFxubmV0L3dpcmVsZXNzL3JlZy5jLTIyOC1cXG4tLVxcbm5ldC93aXJlbGVzcy9yZWcuYz0yNDQ5PXN0YXRpYyB2b2lkIHJlZ19sZWF2ZV9pbnZhbGlkX2NoYW5zKHN0cnVjdCB3aXBoeSAqd2lwaHkpXFxuLS1cXG5uZXQvd2lyZWxlc3MvcmVnLmMtMjQ2My1cXG5uZXQvd2lyZWxlc3MvcmVnLmM6MjQ2NDpzdGF0aWMgdm9pZCByZWdfY2hlY2tfY2hhbnNfd29yayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXFxubmV0L3dpcmVsZXNzL3JlZy5jLTI0NjUte1xcbi0tXFxubmV0L3dpcmVsZXNzL3JlZy5jPTI0ODY9dm9pZCByZWdfY2hlY2tfY2hhbm5lbHModm9pZClcXG4tLVxcbm5ldC93aXJlbGVzcy9yZWcuYy0yNDkyLVxcdG1vZF9kZWxheWVkX3dvcmsoc3lzdGVtX3Bvd2VyX2VmZmljaWVudF93cSxcXG5uZXQvd2lyZWxlc3MvcmVnLmM6MjQ5MzpcXHRcXHRcXHQgXFx1MDAyNnJlZ19jaGVja19jaGFucyxcXG5uZXQvd2lyZWxlc3MvcmVnLmMtMjQ5NC1cXHRcXHRcXHQgbXNlY3NfdG9famlmZmllcyhSRUdfRU5GT1JDRV9HUkFDRV9NUykpO1xcbi0tXFxubmV0L3dpcmVsZXNzL3JlZy5jPTQzNTk9dm9pZCByZWd1bGF0b3J5X2V4aXQodm9pZClcXG4tLVxcbm5ldC93aXJlbGVzcy9yZWcuYy00MzY1LVxcdGNhbmNlbF9jcmRhX3RpbWVvdXRfc3luYygpO1xcbm5ldC93aXJlbGVzcy9yZWcuYzo0MzY2OlxcdGNhbmNlbF9kZWxheWVkX3dvcmtfc3luYyhcXHUwMDI2cmVnX2NoZWNrX2NoYW5zKTtcXG5uZXQvd2lyZWxlc3MvcmVnLmMtNDM2Ny1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDVUMDE6MDQ6MTIuMjkxNTM0Njg1WiIsIlNlcSI6MTUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjIwNTM5MTM5NzcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzOlxuXG4qKlRyYWNpbmcgdGhlIENhbGwgUGF0aDogYHJlZ19jaGVja19jaGFubmVsc2AqKlxuXG5Pa2F5LCBzbyBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgZXhlY3V0aW9uIGZsb3cgdGhhdCBsZWFkcyB0byBgcmVnX2NoZWNrX2NoYW5uZWxzYC4gVGhhdCdzIHRoZSBrZXkuIEkgY2FuJ3QganVzdCBsb29rIGF0IHRoZSBmdW5jdGlvbiBkZWZpbml0aW9uOyBJIG5lZWQgdG8gc2VlIHdoZXJlIGl0J3MgYmVpbmcgKnVzZWQqLiBJIG5lZWQgdG8gaWRlbnRpZnkgdGhlIGNhbGwgc2l0ZXMuIFRpbWUgdG8gZ2V0IG15IGJlYXJpbmdzIGFuZCB0cmFjZSB0aGUgY2FsbHMuIEknbSBnb2luZyB0byBmb2xsb3cgdGhlIGJyZWFkY3J1bWJzIGFuZCBzZWUgd2hlcmUgdGhhdCBmdW5jdGlvbiBpcyBiZWluZyBpbnZva2VkLiBVbmRlcnN0YW5kaW5nIHRoZSBjb250ZXh0IHdpbGwgZ2l2ZSBtZSBjbHVlcyBhYm91dCBpdHMgcHVycG9zZSBhbmQgaG93IGl0IGZpdHMgaW50byB0aGUgbGFyZ2VyIGFyY2hpdGVjdHVyZS4gTGV0J3MgZGlnIGluIGFuZCBmaW5kIHRob3NlIGNhbGwgbG9jYXRpb25zLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMTAwNSwiT3V0cHV0VG9rZW5zIjoyOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA1VDAxOjA0OjE0LjM0NTQ1MjE1MVoiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjQ3NDI4MjgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwicmVnX2NoZWNrX2NoYW5uZWxzXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC93aXJlbGVzcy9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L3dpcmVsZXNzL25sODAyMTEuYz0yMzQwNz12b2lkIGNmZzgwMjExX3NjaGVkdWxlX2NoYW5uZWxzX2NoZWNrKHN0cnVjdCB3aXJlbGVzc19kZXYgKndkZXYpXFxuLS1cXG5uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jLTIzNDE2LVxcdCAgICAgd2lwaHktXFx1MDAzZXJlZ3VsYXRvcnlfZmxhZ3MgXFx1MDAyNiBSRUdVTEFUT1JZX0VOQUJMRV9SRUxBWF9OT19JUikpKVxcbm5ldC93aXJlbGVzcy9ubDgwMjExLmM6MjM0MTc6XFx0XFx0cmVnX2NoZWNrX2NoYW5uZWxzKCk7XFxubmV0L3dpcmVsZXNzL25sODAyMTEuYy0yMzQxOC19XFxuLS1cXG5uZXQvd2lyZWxlc3MvcmVnLmM9MjQ2ND1zdGF0aWMgdm9pZCByZWdfY2hlY2tfY2hhbnNfd29yayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXFxuLS1cXG5uZXQvd2lyZWxlc3MvcmVnLmMtMjQ4NS1cXG5uZXQvd2lyZWxlc3MvcmVnLmM6MjQ4Njp2b2lkIHJlZ19jaGVja19jaGFubmVscyh2b2lkKVxcbm5ldC93aXJlbGVzcy9yZWcuYy0yNDg3LXtcXG4tLVxcbm5ldC93aXJlbGVzcy9yZWcuYz0yNTI3PXN0YXRpYyB2b2lkIHVwZGF0ZV9hbGxfd2lwaHlfcmVndWxhdG9yeShlbnVtIG5sODAyMTFfcmVnX2luaXRpYXRvciBpbml0aWF0b3IpXFxuLS1cXG5uZXQvd2lyZWxlc3MvcmVnLmMtMjUzOC1cXG5uZXQvd2lyZWxlc3MvcmVnLmM6MjUzOTpcXHRyZWdfY2hlY2tfY2hhbm5lbHMoKTtcXG5uZXQvd2lyZWxlc3MvcmVnLmMtMjU0MC19XFxuLS1cXG5uZXQvd2lyZWxlc3MvcmVnLmM9MzAyNT1zdGF0aWMgdm9pZCByZWdfcHJvY2Vzc19oaW50KHN0cnVjdCByZWd1bGF0b3J5X3JlcXVlc3QgKnJlZ19yZXF1ZXN0KVxcbi0tXFxubmV0L3dpcmVsZXNzL3JlZy5jLTMwNjgtXFx0XFx0d2lwaHlfYWxsX3NoYXJlX2Rmc19jaGFuX3N0YXRlKHdpcGh5KTtcXG5uZXQvd2lyZWxlc3MvcmVnLmM6MzA2OTpcXHRcXHRyZWdfY2hlY2tfY2hhbm5lbHMoKTtcXG5uZXQvd2lyZWxlc3MvcmVnLmMtMzA3MC1cXHR9XFxuLS1cXG5uZXQvd2lyZWxlc3MvcmVnLmM9MzE5Nz1zdGF0aWMgdm9pZCByZWdfcHJvY2Vzc19zZWxmX21hbmFnZWRfaGludHModm9pZClcXG4tLVxcbm5ldC93aXJlbGVzcy9yZWcuYy0zMjA4LVxcbm5ldC93aXJlbGVzcy9yZWcuYzozMjA5OlxcdHJlZ19jaGVja19jaGFubmVscygpO1xcbm5ldC93aXJlbGVzcy9yZWcuYy0zMjEwLX1cXG4tLVxcbm5ldC93aXJlbGVzcy9yZWcuYz0zMjg1PXZvaWQgcmVndWxhdG9yeV9oaW50X2luZG9vcihib29sIGlzX2luZG9vciwgdTMyIHBvcnRpZClcXG4tLVxcbm5ldC93aXJlbGVzcy9yZWcuYy0zMzA2LVxcdGlmICghaXNfaW5kb29yKVxcbm5ldC93aXJlbGVzcy9yZWcuYzozMzA3OlxcdFxcdHJlZ19jaGVja19jaGFubmVscygpO1xcbm5ldC93aXJlbGVzcy9yZWcuYy0zMzA4LX1cXG4tLVxcbm5ldC93aXJlbGVzcy9yZWcuYz0zMzEwPXZvaWQgcmVndWxhdG9yeV9uZXRsaW5rX25vdGlmeSh1MzIgcG9ydGlkKVxcbi0tXFxubmV0L3dpcmVsZXNzL3JlZy5jLTMzMjMtXFxubmV0L3dpcmVsZXNzL3JlZy5jOjMzMjQ6XFx0cmVnX2NoZWNrX2NoYW5uZWxzKCk7XFxubmV0L3dpcmVsZXNzL3JlZy5jLTMzMjUtfVxcbi0tXFxubmV0L3dpcmVsZXNzL3JlZy5jPTM0ODk9c3RhdGljIHZvaWQgcmVzdG9yZV9yZWd1bGF0b3J5X3NldHRpbmdzKGJvb2wgcmVzZXRfdXNlciwgYm9vbCBjYWNoZWQpXFxuLS1cXG5uZXQvd2lyZWxlc3MvcmVnLmMtMzUwNi1cXHRcXHRyZWdfaXNfaW5kb29yID0gZmFsc2U7XFxubmV0L3dpcmVsZXNzL3JlZy5jOjM1MDc6XFx0XFx0cmVnX2NoZWNrX2NoYW5uZWxzKCk7XFxubmV0L3dpcmVsZXNzL3JlZy5jLTM1MDgtXFx0fVxcbi0tXFxubmV0L3dpcmVsZXNzL3JlZy5jPTQwNzY9aW50IHJlZ3VsYXRvcnlfc2V0X3dpcGh5X3JlZ2Rfc3luYyhzdHJ1Y3Qgd2lwaHkgKndpcGh5LFxcbi0tXFxubmV0L3dpcmVsZXNzL3JlZy5jLTQwODgtXFx0cmVnX3Byb2Nlc3Nfc2VsZl9tYW5hZ2VkX2hpbnQod2lwaHkpO1xcbm5ldC93aXJlbGVzcy9yZWcuYzo0MDg5OlxcdHJlZ19jaGVja19jaGFubmVscygpO1xcbm5ldC93aXJlbGVzcy9yZWcuYy00MDkwLVxcdHJldHVybiAwO1xcbi0tXFxubmV0L3dpcmVsZXNzL3JlZy5oPTE3ND1pbnQgcmVnX3JlbG9hZF9yZWdkYih2b2lkKTtcXG4tLVxcbm5ldC93aXJlbGVzcy9yZWcuaC0xNzYtLyoqXFxubmV0L3dpcmVsZXNzL3JlZy5oOjE3NzogKiByZWdfY2hlY2tfY2hhbm5lbHMgLSBzY2hlZHVsZSByZWd1bGF0b3J5IGVuZm9yY2VtZW50XFxubmV0L3dpcmVsZXNzL3JlZy5oLTE3OC0gKi9cXG5uZXQvd2lyZWxlc3MvcmVnLmg6MTc5OnZvaWQgcmVnX2NoZWNrX2NoYW5uZWxzKHZvaWQpO1xcbm5ldC93aXJlbGVzcy9yZWcuaC0xODAtXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA1VDAxOjA0OjE0LjQxMDIwMDY4MVoiLCJTZXEiOjE3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo1NDIwMDAwMzIxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFuYWx5c2lzIG9mIGEgQ29uY3VycmVuY3kgVnVsbmVyYWJpbGl0eSBpbiBXaXJlbGVzcyBSZWd1bGF0b3J5IEhhbmRsaW5nKipcblxuT2theSwgc28gSSd2ZSBiZWVuIGRpZ2dpbmcgaW50byB0aGlzIHBvdGVudGlhbCBjb25jdXJyZW5jeSBpc3N1ZSBpbiB0aGUgd2lyZWxlc3Mgc3RhY2ssIHNwZWNpZmljYWxseSBhcm91bmQgcmVndWxhdG9yeSBkb21haW4gaGFuZGxpbmcuIEl0IHNlZW1zIHRoYXQgYHJlZ19jaGVja19jaGFuc193b3JrYCDigJMgd2hpY2ggaXMgY2FsbGVkIGR1cmluZyByZWd1bGF0b3J5IGRvbWFpbiBzZXR0aW5ncywgd2lmaSBjb25maWd1cmF0aW9uLCBqb2luLCBhbmQgc2NhbiBvcGVyYXRpb25zIHRocm91Z2ggbmw4MDIxMSDigJMgaXMgdGhlIGN1bHByaXQuIFRoZSB2dWxuZXJhYmlsaXR5IGFyaXNlcyBmcm9tIGhvdyBpdCBpbnRlcmFjdHMgd2l0aCB0aGUgUkNVIG1lY2hhbmlzbS4gVGhlcmUncyB0aGlzIGNvbmN1cnJlbmN5IGJ1ZyB3aGVyZSB1bmxvY2tpbmcgdGhlIFJDVSByZWFkIGxvY2sgd2l0aGluIHRoZSBgbGlzdF9mb3JfZWFjaF9lbnRyeV9yY3VgIGxvb3AgY291bGQgbGVhZCB0byBsb2NrZGVwIHdhcm5pbmdzLCBSQ1Ugd2FybmluZ3MsIG9yIGV2ZW4gdXNlLWFmdGVyLWZyZWUgb3IgbGlzdCBjb3JydXB0aW9uIGlmIGEgd2lwaHkgaXMgcmVnaXN0ZXJlZCBvciB1bnJlZ2lzdGVyZWQgc2ltdWx0YW5lb3VzbHkuIFRoYXQncyBhIG5hc3R5IHNpdHVhdGlvbiwgZXNwZWNpYWxseSBpbiBhIHBhcnQgb2YgdGhlIGtlcm5lbCBleHBvc2VkIHRvIHVzZXItc3BhY2UuXG5cblRoZSBmaXJzdCB0aGluZyBJIGRpZCB3YXMgbWFrZSBzdXJlIHRoZSBiYXNpY3MgYXJlIGluIHBsYWNlLiBUaGUgb2J2aW91cyBkZXBlbmRlbmN5IGhlcmUgaXMgYENGRzgwMjExYCwgYW5kIGl0IGxvb2tzIGxpa2UgYHJlZ19jaGVja19jaGFuc193b3JrYCBpcyB1bmNvbmRpdGlvbmFsbHkgY29tcGlsZWQgd2hlbiB0aGF0J3MgZW5hYmxlZC4gR29vZC5cblxuTmV4dCwgSSBsb29rZWQgYXQgdGhlIHN5bWJvbHMgZGlyZWN0bHkgaW52b2x2ZWQuIEkgZm91bmQgdGhlc2Uga2V5IGZ1bmN0aW9uczogYHJlZ19jaGVja19jaGFuc193b3JrYCwgYHJlZ19jaGVja19jaGFubmVsc2AsIGByZWdfbGVhdmVfaW52YWxpZF9jaGFuc2AsIGFuZCB0aG9zZSBzY2hlZHVsaW5nIGZ1bmN0aW9ucyBsaWtlIGBjZmc4MDIxMV9zY2hlZHVsZV9jaGFubmVsc19jaGVja2AsIGByZWd1bGF0b3J5X2hpbnRfaW5kb29yYCwgYW5kIGByZWd1bGF0b3J5X3NldF93aXBoeV9yZWdkX3N5bmNgLiBJIGRvdWJsZS1jaGVja2VkIHRoYXQgYHJlZ19jaGVja19jaGFuc193b3JrYCBjYWxscyBgcmVnX2xlYXZlX2ludmFsaWRfY2hhbnNgIGFuZCB0aGF0IGByZWdfY2hlY2tfY2hhbm5lbHNgIHNjaGVkdWxlcyB0aGUgd29yay4gQWxzbywgd2hpbGUgYHJlZ19jaGVja19jaGFuc193b3JrYCBhbmQgYHJlZ19sZWF2ZV9pbnZhbGlkX2NoYW5zYCBhcmUgYm90aCBzdGF0aWMsIGByZWdfY2hlY2tfY2hhbnNfd29ya2Agd2lsbCBzdGlsbCBzaG93IHVwIGFzIGEgZGlzdGluY3Qgc3ltYm9sIGluIHZtbGludXggYXMgYSB3b3JrIGl0ZW0gY2FsbGJhY2suIGByZWdfY2hlY2tfY2hhbm5lbHNgIGlzIG5vbi1zdGF0aWMuXG5cbkdpdmVuIGFsbCB0aGlzLCBJJ20gcHJldHR5IGNvbmZpZGVudCB0aGF0IGZ1enppbmcgdGhpcyBpcyB0aGUgcmlnaHQgYXBwcm9hY2guIFRoZSBwYXRjaCBtb2RpZmllcyBgcmVnX2NoZWNrX2NoYW5zX3dvcmtgIHdpdGhpbiBgY2ZnODAyMTFgLCBhbmQgc3BlY2lmaWNhbGx5IG1vZGlmaWVzIGxvY2tpbmcgYW5kIFJDVSBpdGVyYXRpb25zIG92ZXIgYGNmZzgwMjExX3JkZXZfbGlzdGAgYnkgZHJvcHBpbmcgYW5kIHJlYWNxdWlyaW5nIGxvY2tzIGluc2lkZSB0aGUgbG9vcC4gVGhpcyBjb2RlIGlzIHRyaWdnZXJlZCBmcm9tIHVzZXJzcGFjZSwgc28gY29uY3VycmVuY3kgcHJvYmxlbXMgYXJlIGEgcmVhbCByaXNrLiBUaGUga2V5IGlzIHRvIHRlc3QgdGhlIFJDVSBsaXN0IHRyYXZlcnNhbCBhbmQgdGhlIHNhZmV0eSBvZiBjb25jdXJyZW50IHJlZ3VsYXRvcnkgZG9tYWluIG9wZXJhdGlvbnMuXG5cblNvLCB0aGUgY3JpdGVyaWEgYXJlIGNsZWFyOiBgV29ydGhGdXp6aW5nOiB0cnVlYCwgdGhlIG5lY2Vzc2FyeSBjb25maWcgaXMgYENGRzgwMjExYCwgYW5kIHRoZSBgRm9jdXNTeW1ib2xzYCBhcmUgYHJlZ19jaGVja19jaGFuc193b3JrYCwgYHJlZ19jaGVja19jaGFubmVsc2AsIGFuZCBgcmVnX2xlYXZlX2ludmFsaWRfY2hhbnNgLiBUaW1lIHRvIGNhbGwgYHNldC1yZXN1bHRzYC5cblxuXG4iLCJJbnB1dFRva2VucyI6MjIxODQsIk91dHB1dFRva2VucyI6MTgyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NjI5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA1VDAxOjA0OjE5LjgzMDIwMzc1MloiLCJTZXEiOjE4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE1MDg4OTU3OCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiQ0ZHODAyMTFcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJyZWdfY2hlY2tfY2hhbnNfd29ya1wiLFxuICAgIFwicmVnX2NoZWNrX2NoYW5uZWxzXCIsXG4gICAgXCJyZWdfbGVhdmVfaW52YWxpZF9jaGFuc1wiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGNoYW5nZXMgbG9ja2luZyBhbmQgUkNVIGl0ZXJhdGlvbiBpbiByZWdfY2hlY2tfY2hhbnNfd29yaygpIHdpdGhpbiBjZmc4MDIxMSAobmV0L3dpcmVsZXNzL3JlZy5jKSwgcmVsZWFzaW5nIGFuZCByZS1hY3F1aXJpbmcgcmN1X3JlYWRfbG9jayBhbmQgcnRubF9sb2NrIGluc2lkZSBsaXN0X2Zvcl9lYWNoX2VudHJ5X3JjdS4gVGhpcyByZWFjaGFibGUgY29kZSBwYXRoIGhhbmRsZXMgcmVndWxhdG9yeSBkb21haW4gY2hhbm5lbCB2YWxpZGF0aW9uIGFuZCBpbnRlcmZhY2UgZGlzY29ubmVjdGlvbiwgd2hpY2ggY2FuIGJlIHRyaWdnZXJlZCB2aWEgbmw4MDIxMSByZWd1bGF0b3J5IGNvbW1hbmRzLiBGdXp6aW5nIGlzIHdhcnJhbnRlZCB0byB0ZXN0IGZvciBjb25jdXJyZW5jeSBidWdzLCBsaXN0IHRyYXZlcnNhbCBpc3N1ZXMsIGFuZCBSQ1UvbG9ja2RlcCB3YXJuaW5ncy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJDRkc4MDIxMVwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInJlZ19jaGVja19jaGFuc193b3JrXCIsXG4gICAgXCJyZWdfY2hlY2tfY2hhbm5lbHNcIixcbiAgICBcInJlZ19sZWF2ZV9pbnZhbGlkX2NoYW5zXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggY2hhbmdlcyBsb2NraW5nIGFuZCBSQ1UgaXRlcmF0aW9uIGluIHJlZ19jaGVja19jaGFuc193b3JrKCkgd2l0aGluIGNmZzgwMjExIChuZXQvd2lyZWxlc3MvcmVnLmMpLCByZWxlYXNpbmcgYW5kIHJlLWFjcXVpcmluZyByY3VfcmVhZF9sb2NrIGFuZCBydG5sX2xvY2sgaW5zaWRlIGxpc3RfZm9yX2VhY2hfZW50cnlfcmN1LiBUaGlzIHJlYWNoYWJsZSBjb2RlIHBhdGggaGFuZGxlcyByZWd1bGF0b3J5IGRvbWFpbiBjaGFubmVsIHZhbGlkYXRpb24gYW5kIGludGVyZmFjZSBkaXNjb25uZWN0aW9uLCB3aGljaCBjYW4gYmUgdHJpZ2dlcmVkIHZpYSBubDgwMjExIHJlZ3VsYXRvcnkgY29tbWFuZHMuIEZ1enppbmcgaXMgd2FycmFudGVkIHRvIHRlc3QgZm9yIGNvbmN1cnJlbmN5IGJ1Z3MsIGxpc3QgdHJhdmVyc2FsIGlzc3VlcywgYW5kIFJDVS9sb2NrZGVwIHdhcm5pbmdzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNVQwMTowNDoxOS45ODExMDEwNloiLCJTZXEiOjE5LCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6IklmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjQzMTA3NDE5MzQsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNVQwMTowNDoxOS45ODE1NzkzMVoiLCJTZXEiOjIwLCJOZXN0aW5nIjoyLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJjb3JlIiwiRHVyYXRpb24iOjI0MzEwMjU5ODY0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgbG9ja2luZyBhbmQgUkNVIGxpc3QgdHJhdmVyc2FsIHN0cmF0ZWd5IGluIHJlZ19jaGVja19jaGFuc193b3JrKCkgKG5ldC93aXJlbGVzcy9yZWcuYykgYnkgZHJvcHBpbmcgYW5kIHJlLWFjcXVpcmluZyByY3VfcmVhZF9sb2NrKCkgYW5kIHJ0bmxfbG9jaygpIGFyb3VuZCBlYWNoIGl0ZXJhdGlvbiBvZiBjZmc4MDIxMV9yZGV2X2xpc3QuXFxuXFxuVGhpcyBjaGFuZ2UgZG9lcyBub3QgaW50cm9kdWNlIGFueSBtZW1vcnkgYWxsb2NhdGlvbnMsIGRvZXMgbm90IHJlYWQgb3Igd3JpdGUgdW5pbml0aWFsaXplZCBzdGFjay9oZWFwIGZpZWxkcywgZG9lcyBub3QgYWx0ZXIgYnVmZmVyIGxlbmd0aC9ib3VuZHMgY2FsY3VsYXRpb25zLCBhbmQgZG9lcyBub3QgcGFzcyBrZXJuZWwgZGF0YSB0byB1c2Vyc3BhY2UuIEFueSBjb25jdXJyZW5jeSwgdXNlLWFmdGVyLWZyZWUsIG9yIGxpc3QgY29ycnVwdGlvbiBpc3N1ZXMgc3RlbW1pbmcgZnJvbSBkcm9wcGluZyBSQ1UgZHVyaW5nIGxpc3QgdHJhdmVyc2FsIGFyZSBkZXRlY3RhYmxlIGJ5IHN0YW5kYXJkIGRlYnVnZ2luZyB0b29scyAoS0FTQU4sIExPQ0tERVAsIGFuZCBDT05GSUdfUFJPVkVfUkNVKS4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnlcbmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kXG5kZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpXG5mdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy5cblxuQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46XG4tIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGVcbiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOXG4gIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVBcbiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy5cbi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsXG4gIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy5cblxuUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTixcbkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuXG5BIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZXG5zZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrc1xudGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi5cblxuTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3RcbnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLFxuYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzXG50aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZ1xudW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sXG5mbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsXG5jYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy5cblxuU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOlxuMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2JcbiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzXG4gICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLlxuMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlc1xuICAgb3Igc3RydWN0IGZpZWxkcy5cbjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHNcbiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuXG40LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2Vzc1xuICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjpcbi0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXJcbiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0XG4gIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS5cbi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWRcbiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLlxuLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuXG5cblVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGVcbmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJUYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NFxuXG5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCA5MDliYWU2M2U0Y2I4ZGJiOGMyYWVhMTAzZWRkZDBjYWJhOWFkYzc1XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFNhdCBTZXAgNSAwMTowMzo0NyAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL25ldC93aXJlbGVzcy9yZWcuYyBiL25ldC93aXJlbGVzcy9yZWcuY1xuaW5kZXggYTgzMzZiYWY4NWRjNi4uYTJlMGQxY2Y4MzE3YyAxMDA2NDRcbi0tLSBhL25ldC93aXJlbGVzcy9yZWcuY1xuKysrIGIvbmV0L3dpcmVsZXNzL3JlZy5jXG5AQCAtMjQ2NiwxMiArMjQ2NiwyMSBAQCBzdGF0aWMgdm9pZCByZWdfY2hlY2tfY2hhbnNfd29yayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXG4gXHRzdHJ1Y3QgY2ZnODAyMTFfcmVnaXN0ZXJlZF9kZXZpY2UgKnJkZXY7XG4gXG4gXHRwcl9kZWJ1ZyhcIlZlcmlmeWluZyBhY3RpdmUgaW50ZXJmYWNlcyBhZnRlciByZWcgY2hhbmdlXFxuXCIpO1xuLVx0cnRubF9sb2NrKCk7XG4tXG4tXHRmb3JfZWFjaF9yZGV2KHJkZXYpXG4rXHQvKlxuK1x0ICogQWNxdWlyZSBydG5sIHBlci1kZXZpY2UgaW5zdGVhZCBvZiBob2xkaW5nIGl0IGZvciB0aGUgZW50aXJlIGxvb3A7XG4rXHQgKiBjZmc4MDIxMV9sZWF2ZSgpIGNhbiBiZSBzbG93IGFuZCBzdGFydmUgb3RoZXIgcnRubCB3YWl0ZXJzIG90aGVyd2lzZS5cbitcdCAqIHdpcGh5X3VucmVnaXN0ZXIoKSBob2xkcyBydG5sIGFjcm9zcyBsaXN0X2RlbF9yY3UoKSArIHN5bmNocm9uaXplX3JjdSgpLFxuK1x0ICogc28gcmRldiBjYW5ub3QgYmUgZnJlZWQgd2hpbGUgd2UgaG9sZCBydG5sX2xvY2soKSBiZWxvdy5cbitcdCAqL1xuK1x0cmN1X3JlYWRfbG9jaygpO1xuK1x0bGlzdF9mb3JfZWFjaF9lbnRyeV9yY3UocmRldiwgXHUwMDI2Y2ZnODAyMTFfcmRldl9saXN0LCBsaXN0KSB7XG4rXHRcdHJjdV9yZWFkX3VubG9jaygpO1xuK1x0XHRydG5sX2xvY2soKTtcbiBcdFx0cmVnX2xlYXZlX2ludmFsaWRfY2hhbnMoXHUwMDI2cmRldi1cdTAwM2V3aXBoeSk7XG4tXG4tXHRydG5sX3VubG9jaygpO1xuK1x0XHRydG5sX3VubG9jaygpO1xuK1x0XHRyY3VfcmVhZF9sb2NrKCk7XG4rXHR9XG4rXHRyY3VfcmVhZF91bmxvY2soKTtcbiB9XG4gXG4gdm9pZCByZWdfY2hlY2tfY2hhbm5lbHModm9pZClcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA1VDAxOjA0OjE5Ljk4MTU4MDIxWiIsIlNlcSI6MjEsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjE0MDY1Mjg4MjcxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKktNU0FOIEV2YWx1YXRpb246IFBhdGNoIFJldmlldyoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gTXkgdGFzayBpcyB0byBkZXRlcm1pbmUgaWYgdGhpcyBwYXRjaCBuZWNlc3NpdGF0ZXMgYSBLTVNBTiBmdXp6aW5nIHNlc3Npb24sIG9yIGlmIHN0YW5kYXJkIGNoZWNrcyBsaWtlIEtBU0FOIGFuZCBMT0NLREVQIGFyZSBzdWZmaWNpZW50LiBJdCdzIGEgc3RhbmRhcmQga2VybmVsIFFBIGRlY2lzaW9uLCBub3RoaW5nIHRvbyBvdXQgb2YgdGhlIG9yZGluYXJ5LlxuXG5GaXJzdCwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCB0aGlzIHBhdGNoIGFjdHVhbGx5ICpkb2VzKi4gSXQgbG9va3MgbGlrZSBpdCdzIGEgY2hhbmdlIHdpdGhpbiBgbmV0L3dpcmVsZXNzL3JlZy5jYCwgc3BlY2lmaWNhbGx5IGluIGByZWdfY2hlY2tfY2hhbnNfd29ya2AuIFRoZXkncmUgbW9kaWZ5aW5nIGhvdyB0aGUgY29kZSBpdGVyYXRlcyB0aHJvdWdoIGEgbGlzdCBvZiByZWdpc3RlcmVkIGRldmljZXMgKGBjZmc4MDIxMV9yZGV2X2xpc3RgKSBhbmQgY2FsbHMgYHJlZ19sZWF2ZV9pbnZhbGlkX2NoYW5zYC4gVGhlIG9yaWdpbmFsIGNvZGUgaGVsZCBgcnRubF9sb2NrKClgIGZvciB0aGUgZW50aXJlIGxvb3AsIGJ1dCB0aGlzIHBhdGNoIGludHJvZHVjZXMgUkNVIGxvY2tpbmcgYXJvdW5kIHRoZSBsaXN0IGl0ZXJhdGlvbiwgZHJvcHBpbmcgYW5kIHJlYWNxdWlyaW5nIHRoZSBsb2NrIGluIGVhY2ggbG9vcCBpdGVyYXRpb24sIGFuZCBkcm9wcGluZyBSVE5MIGFzIHdlbGwuXG5cbk5vdywgdGhlIHJlZCBmbGFnLiBUaGlzIFJDVSBsaXN0IHRyYXZlcnNhbCB3aXRoIGxvY2tpbmcgbWFuaXB1bGF0aW9uIHBhdHRlcm4uLi4gdGhhdCB3YXJyYW50cyBjbG9zZSBzY3J1dGlueS4gVGhlIHVzZSBvZiBgbGlzdF9mb3JfZWFjaF9lbnRyeV9yY3VgIGluc2lkZSB0aGUgUkNVIHJlYWQgbG9jayB3aXRoIGRyb3BwaW5nIGFuZCByZS1hY3F1aXJpbmcgdGhlIGxvY2sgd2l0aGluIHRoZSBsb29wIGlzIGEgY2xhc3NpYyBzZXR1cCBmb3IgcG90ZW50aWFsIGNvbmN1cnJlbmN5IGlzc3Vlcy4gV2l0aCB0aGUgcmUtZW50cmFudCBsb2NraW5nLCBhbmQgdW5sb2NrZWQgd2luZG93IGZvciBvdGhlciBvcGVyYXRpb25zLCBhIHVzZS1hZnRlci1mcmVlIHNjZW5hcmlvIG9yIGxpc3QgY29ycnVwdGlvbiBpcyAqaGlnaGx5KiBwbGF1c2libGUuIFRoZSBjb21tZW50IGNsYWltcyBgd2lwaHlfdW5yZWdpc3RlcigpYCBob2xkcyBydG5sIGFjcm9zcyBgbGlzdF9kZWxfcmN1KClgIGFuZCBgc3luY2hyb25pemVfcmN1KClgLCBidXQgZXZlbiB3aXRoIHRoYXQgY2xhaW0sIHRoZSBwb3RlbnRpYWwgZm9yIGEgcmFjZSB3aXRoIHRoZSBzeW5jaHJvbml6ZV9yY3UvdW5yZWdpc3RlciBhbmQgdGhlIHVuLWxvY2tlZCBzZWN0aW9uIG9mIHRoZSBsb29wIHN0aWxsIGV4aXN0cy4gV2UgY291bGQgYmUgZGVhbGluZyB3aXRoIGEgYHJkZXZgIHRoYXQncyBiZWVuIGZyZWVkIG9yIGhhZCBpdHMgbGlzdCBlbnRyaWVzIGNvcnJ1cHRlZCBiZXR3ZWVuIHRoZSBjYWxscy5cblxuSG93ZXZlciwgSSBuZWVkIHRvIGNvbnNpZGVyIHdoZXRoZXIgaXQgKmludHJvZHVjZXMqIG5ldyBpc3N1ZXMuIERvZXMgdGhpcyBwYXRjaCBjaGFuZ2UgYW55dGhpbmcgdGhhdCBkaXJlY3RseSBpbnRlcmFjdHMgd2l0aCB1bmluaXRpYWxpemVkIG1lbW9yeT8gTm8uIFRoZSBjb2RlIG1vZGlmaWVzIGxvY2tpbmcgYW5kIGxpc3QgdHJhdmVyc2FsLCBidXQgZG9lc24ndCBpbnRyb2R1Y2UgYWxsb2NhdGlvbnMsIGNvcGllcyBvZiB1bmluaXRpYWxpemVkIGRhdGEgdG8gdXNlcnNwYWNlLCBhY2Nlc3MgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMsIG9yIHN0cnVjdCBwYWRkaW5nIGlzc3Vlcy4gSXQgaXMgcG9zc2libGUsIGJ1dCBzZWVtcyB1bmxpa2VseSBpbiB0aGlzIGNhc2UsIHRoYXQgYW4gZW50aXJlbHkgbmV3IGNvZGUtcGF0aCBjb3VsZCBpbnRyb2R1Y2Ugc3VjaC4gSSB3aWxsIGNoZWNrLlxuXG5UaGVyZWZvcmUsIHNpbmNlIHRoZSBwb3RlbnRpYWwgdnVsbmVyYWJpbGl0aWVzIGxpZSB3aXRoaW4gY29uY3VycmVuY3kgaXNzdWVzLCBLQVNBTiBhbmQgTE9DS0RFUCB3b3VsZCBjYXRjaCB1c2UtYWZ0ZXItZnJlZSBhbmQgbG9ja2luZyAvIGNvbmN1cnJlbmN5IGlzc3VlcywgYXMgd2VsbCBhcyBLQ1NBTi4gS01TQU4gaXMgdW5uZWNlc3NhcnkgZm9yIHRoaXMgcGF0Y2guIEknbGwgZG91YmxlLWNoZWNrIHdpdGggYSBncmVwIG9yIGNvZGUgc2NhbiBqdXN0IHRvIGJlIGFic29sdXRlbHkgY2VydGFpbiBJJ20gbm90IG1pc3NpbmcgYW55dGhpbmcgdGhhdCB3b3VsZCBpbnZvbHZlIHJlYWRpbmcgZnJvbSB1bmluaXRpYWxpemVkIG1lbW9yeS5cblxuXG4iLCJJbnB1dFRva2VucyI6MjI3MSwiT3V0cHV0VG9rZW5zIjozMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjk5NSwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA1VDAxOjA0OjM0LjA0Njg3Mjg4MVoiLCJTZXEiOjIyLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjMzMDkxMzksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwicmVnX2NoZWNrX2NoYW5zX3dvcmtcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L3dpcmVsZXNzXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC93aXJlbGVzcy9yZWcuYz0yMjE9c3RydWN0IHJlZ19iZWFjb24ge1xcbi0tXFxubmV0L3dpcmVsZXNzL3JlZy5jLTIyNS1cXG5uZXQvd2lyZWxlc3MvcmVnLmM6MjI2OnN0YXRpYyB2b2lkIHJlZ19jaGVja19jaGFuc193b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yayk7XFxubmV0L3dpcmVsZXNzL3JlZy5jOjIyNzpzdGF0aWMgREVDTEFSRV9ERUxBWUVEX1dPUksocmVnX2NoZWNrX2NoYW5zLCByZWdfY2hlY2tfY2hhbnNfd29yayk7XFxubmV0L3dpcmVsZXNzL3JlZy5jLTIyOC1cXG4tLVxcbm5ldC93aXJlbGVzcy9yZWcuYz0yNDQ5PXN0YXRpYyB2b2lkIHJlZ19sZWF2ZV9pbnZhbGlkX2NoYW5zKHN0cnVjdCB3aXBoeSAqd2lwaHkpXFxuLS1cXG5uZXQvd2lyZWxlc3MvcmVnLmMtMjQ2My1cXG5uZXQvd2lyZWxlc3MvcmVnLmM6MjQ2NDpzdGF0aWMgdm9pZCByZWdfY2hlY2tfY2hhbnNfd29yayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXFxubmV0L3dpcmVsZXNzL3JlZy5jLTI0NjUte1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNVQwMTowNDozNC4xMTAxOTE0MVoiLCJTZXEiOjIzLCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo1NzMxMzMxNTM2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aGUgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBpdCB3ZXJlIG15IG93bjpcblxuKipEaXZpbmcgaW50byB0aGUgQ2hhbm5lbCBSZWd1bGF0aW9uIENvZGUqKlxuXG5Pa2F5LCB0aW1lIHRvIGdldCBteSBoYW5kcyBkaXJ0eS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZSBzeXN0ZW0gaGFuZGxlcyBpbnZhbGlkIGNoYW5uZWxzIGR1cmluZyByZWd1bGF0b3J5IGRvbWFpbiBjaGFuZ2VzLiBMZXQncyBzdGFydCBieSB6ZXJvaW5nIGluIG9uIGByZWdfbGVhdmVfaW52YWxpZF9jaGFuc2Agd2l0aGluIGBuZXQvd2lyZWxlc3MvcmVnLmNgLiBUaGlzIGZ1bmN0aW9uIG5hbWUgc2VlbXMgbGlrZSBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQuIEl0J3MgdGhlIGxvZ2ljYWwgcGxhY2UgdG8gc2VlIGhvdyB0aGUga2VybmVsIGRlYWxzIHdpdGggY2hhbm5lbHMgdGhhdCBhcmUgbm8gbG9uZ2VyIGFsbG93ZWQgYWZ0ZXIgYSByZWd1bGF0b3J5IGRvbWFpbiB1cGRhdGUuIEkgZXhwZWN0IGl0J2xsIGdpdmUgbWUgY2x1ZXMgYWJvdXQgaG93IHRoZSBkcml2ZXIgaXMgbm90aWZpZWQgYW5kIGhvdyB0aGUgc3lzdGVtIG1pZ2h0IGhhbmRsZSBvbmdvaW5nIHRyYW5zbWlzc2lvbnMgb24gdGhlc2UgY2hhbm5lbHMuIEhvcGVmdWxseSwgdGhpcyBmdW5jdGlvbiBwcm92aWRlcyB0aGUga2V5IHRvIHVuZGVyc3RhbmRpbmcgdGhlIHNwZWNpZmljIGxvZ2ljIG9mIGNoYW5uZWwgaW52YWxpZGF0aW9uLiBJJ20ga2VlbiB0byBkaXNzZWN0IHRoZSBjb2RlIGFuZCBzZWUgaG93IHJvYnVzdCB0aGUgaW1wbGVtZW50YXRpb24gaXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQwNjQsIk91dHB1dFRva2VucyI6MzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wNVQwMTowNDozOS44NDE1MjY3MzZaIiwiU2VxIjoyNCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjE1NTAwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC93aXJlbGVzcy9yZWcuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAyNDQ1LFxuICBcIkxpbmVDb3VudFwiOiA0NVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIyNDQ1OlxcdFxcbjI0NDY6XFx0XFx0cmV0dXJuIHRydWU7XFxuMjQ0NzpcXHR9XFxuMjQ0ODpcXHRcXG4yNDQ5OlxcdHN0YXRpYyB2b2lkIHJlZ19sZWF2ZV9pbnZhbGlkX2NoYW5zKHN0cnVjdCB3aXBoeSAqd2lwaHkpXFxuMjQ1MDpcXHR7XFxuMjQ1MTpcXHRcXHRzdHJ1Y3Qgd2lyZWxlc3NfZGV2ICp3ZGV2O1xcbjI0NTI6XFx0XFx0c3RydWN0IGNmZzgwMjExX3JlZ2lzdGVyZWRfZGV2aWNlICpyZGV2ID0gd2lwaHlfdG9fcmRldih3aXBoeSk7XFxuMjQ1MzpcXHRcXG4yNDU0OlxcdFxcdGxpc3RfZm9yX2VhY2hfZW50cnkod2RldiwgXFx1MDAyNnJkZXYtXFx1MDAzZXdpcGh5LndkZXZfbGlzdCwgbGlzdCkge1xcbjI0NTU6XFx0XFx0XFx0Ym9vbCB2YWxpZDtcXG4yNDU2OlxcdFxcbjI0NTc6XFx0XFx0XFx0c2NvcGVkX2d1YXJkKHdpcGh5LCB3aXBoeSlcXG4yNDU4OlxcdFxcdFxcdFxcdHZhbGlkID0gcmVnX3dkZXZfY2hhbl92YWxpZCh3aXBoeSwgd2Rldik7XFxuMjQ1OTpcXHRcXHRcXHRpZiAoIXZhbGlkKVxcbjI0NjA6XFx0XFx0XFx0XFx0Y2ZnODAyMTFfbGVhdmUocmRldiwgd2RldiwgLTEpO1xcbjI0NjE6XFx0XFx0fVxcbjI0NjI6XFx0fVxcbjI0NjM6XFx0XFxuMjQ2NDpcXHRzdGF0aWMgdm9pZCByZWdfY2hlY2tfY2hhbnNfd29yayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXFxuMjQ2NTpcXHR7XFxuMjQ2NjpcXHRcXHRzdHJ1Y3QgY2ZnODAyMTFfcmVnaXN0ZXJlZF9kZXZpY2UgKnJkZXY7XFxuMjQ2NzpcXHRcXG4yNDY4OlxcdFxcdHByX2RlYnVnKFxcXCJWZXJpZnlpbmcgYWN0aXZlIGludGVyZmFjZXMgYWZ0ZXIgcmVnIGNoYW5nZVxcXFxuXFxcIik7XFxuMjQ2OTpcXHRcXHQvKlxcbjI0NzA6XFx0XFx0ICogQWNxdWlyZSBydG5sIHBlci1kZXZpY2UgaW5zdGVhZCBvZiBob2xkaW5nIGl0IGZvciB0aGUgZW50aXJlIGxvb3A7XFxuMjQ3MTpcXHRcXHQgKiBjZmc4MDIxMV9sZWF2ZSgpIGNhbiBiZSBzbG93IGFuZCBzdGFydmUgb3RoZXIgcnRubCB3YWl0ZXJzIG90aGVyd2lzZS5cXG4yNDcyOlxcdFxcdCAqIHdpcGh5X3VucmVnaXN0ZXIoKSBob2xkcyBydG5sIGFjcm9zcyBsaXN0X2RlbF9yY3UoKSArIHN5bmNocm9uaXplX3JjdSgpLFxcbjI0NzM6XFx0XFx0ICogc28gcmRldiBjYW5ub3QgYmUgZnJlZWQgd2hpbGUgd2UgaG9sZCBydG5sX2xvY2soKSBiZWxvdy5cXG4yNDc0OlxcdFxcdCAqL1xcbjI0NzU6XFx0XFx0cmN1X3JlYWRfbG9jaygpO1xcbjI0NzY6XFx0XFx0bGlzdF9mb3JfZWFjaF9lbnRyeV9yY3UocmRldiwgXFx1MDAyNmNmZzgwMjExX3JkZXZfbGlzdCwgbGlzdCkge1xcbjI0Nzc6XFx0XFx0XFx0cmN1X3JlYWRfdW5sb2NrKCk7XFxuMjQ3ODpcXHRcXHRcXHRydG5sX2xvY2soKTtcXG4yNDc5OlxcdFxcdFxcdHJlZ19sZWF2ZV9pbnZhbGlkX2NoYW5zKFxcdTAwMjZyZGV2LVxcdTAwM2V3aXBoeSk7XFxuMjQ4MDpcXHRcXHRcXHRydG5sX3VubG9jaygpO1xcbjI0ODE6XFx0XFx0XFx0cmN1X3JlYWRfbG9jaygpO1xcbjI0ODI6XFx0XFx0fVxcbjI0ODM6XFx0XFx0cmN1X3JlYWRfdW5sb2NrKCk7XFxuMjQ4NDpcXHR9XFxuMjQ4NTpcXHRcXG4yNDg2OlxcdHZvaWQgcmVnX2NoZWNrX2NoYW5uZWxzKHZvaWQpXFxuMjQ4NzpcXHR7XFxuMjQ4ODpcXHRcXHQvKlxcbjI0ODk6XFx0XFx0ICogR2l2ZSB1c2VybW9kZSBhIGNoYW5jZSB0byBkbyBzb21ldGhpbmcgbmljZXIgKG1vdmUgdG8gYW5vdGhlclxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNVQwMTowNDozOS44NDE3NTM1NzZaIiwiU2VxIjoyNSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NDQ1MDA2MzgxOCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipLTVNBTiBBc3Nlc3NtZW50IG9mIHRoaXMgUGF0Y2gqKlxuXG5BbHJpZ2h0LCBsZXQncyBicmVhayB0aGlzIGRvd24uIE15IGluaXRpYWwgYXNzZXNzbWVudCBpcyB0aGF0IEtNU0FOIGlzbid0IG5lZWRlZCBoZXJlLiBJJ3ZlIHdhbGtlZCB0aHJvdWdoIHRoZSBzdGFuZGFyZCBLTVNBTiBjaGVja3MsIGFuZCBub3RoaW5nIHNjcmVhbXMgXCJwb3RlbnRpYWwgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZFwiIGF0IG1lLlxuXG5TcGVjaWZpY2FsbHksIEkgbG9va2VkIGZvcjpcbjEuICBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2Ugd2hlcmUgaW5pdGlhbGl6YXRpb24gbWlnaHQgYmUgc2xvcHB5LiBOb3BlLlxuMi4gIENvbmRpdGlvbmFsIGxvZ2ljIGJhc2VkIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgZGF0YS4gTm90IHNlZWluZyBpdC5cbjMuICBDb21wbGV4IGRhdGEgc3RydWN0dXJlIGluaXRpYWxpemF0aW9uIHRoYXQgY291bGQgbGVhZCB0byB1bmluaXRpYWxpemVkIHJlYWRzIGxhdGVyLiBOZWdhdGl2ZS5cbjQuICBCb3VuZHMgY2hlY2sgaXNzdWVzIHRoYXQgY291bGQgZXhwb3NlIHVuaW5pdGlhbGl6ZWQgYnVmZmVyIGJ5dGVzLiBOYWRhLlxuXG5UaGUgcG90ZW50aWFsIGlzc3VlcyBJICpkbyogc2VlIGFyZSBhcm91bmQgY29uY3VycmVuY3ksIFJDVSBsaXN0IGl0ZXJhdGlvbiwgYW5kIGxvY2tpbmc6IHNwZWNpZmljYWxseSwgdGhpbmdzIGxpa2UgbGlzdCBpdGVyYXRpb24gdmFsaWRpdHkgYWNyb3NzIFJDVSB1bmxvY2svbG9jayBib3VuZGFyaWVzLCBzbGVlcGFibGUgbG9ja3MgaW5zaWRlIFJDVSAodGhvdWdoIGl0IHVubG9ja3MgUkNVIGJlZm9yZSBsb2NraW5nIFJUTkwpLCBhbmQgdXNlLWFmdGVyLWZyZWUgb3IgbGlzdCBjb3JydXB0aW9uIGlmIGVsZW1lbnRzIGFyZSByZW1vdmVkIGR1cmluZyB0aGUgaXRlcmF0aW9uLiBIb3dldmVyLCB0aG9zZSBhcmUgKmV4YWN0bHkqIHRoZSBraW5kcyBvZiBpc3N1ZXMgS0FTQU4sIExPQ0tERVAsIGFuZCB0aGUgc3RhbmRhcmQga2VybmVsIGRlYnVnZ2luZyB0b29scyAobGlrZSBDT05GSUdfUFJPVkVfUkNVIGFuZCBDT05GSUdfREVCVUdfTElTVCkgYXJlIGRlc2lnbmVkIHRvIGNhdGNoLiBUaGF0J3MgcmVhc3N1cmluZy5cblxuU28sIHRoZSBwYXRjaCBpcyBjaGFuZ2luZyBgcmVnX2NoZWNrX2NoYW5zX3dvcmsoKWAgaW4gYG5ldC93aXJlbGVzcy9yZWcuY2AuIEl0J3Mgc3dpdGNoaW5nIGZyb20gaG9sZGluZyBgcnRubF9sb2NrKClgIGZvciB0aGUgZW50aXJlIGBjZmc4MDIxMV9yZGV2X2xpc3RgIHRyYXZlcnNhbCB0byBhY3F1aXJpbmcgaXQgcGVyIGRldmljZSwgdG9nZ2xpbmcgYHJjdV9yZWFkX2xvY2soKWAgLyBgcnRubF9sb2NrKClgIHdpdGhpbiB0aGUgbG9vcC4gVGhlIHBvdGVudGlhbCBidWdzIGludHJvZHVjZWQgaGVyZSBhcmUgcmVsYXRlZCB0byBSQ1UgbGlzdCB0cmF2ZXJzYWwgc2FmZXR5LCB1c2UtYWZ0ZXItZnJlZSwgb3IgY29uY3VycmVuY3kvbG9ja2luZyAtIHdoaWNoIGFyZSB3ZWxsLWNvdmVyZWQgYnkgdGhlIGV4aXN0aW5nIHRvb2xjaGFpbi4gTm8gbmV3IGFsbG9jYXRpb25zLCBzdGFjay9oZWFwIHZhcmlhYmxlcywgb3IgaW5mby1sZWFrcyB0byB1c2VyIHNwYWNlLiBObyBLTVNBTiByZXF1aXJlZC5cblxuSSdtIGNvbmZpZGVudCBpbiBjYWxsaW5nIHRoaXMuIExldCdzIHNldCB0aGUgcmVzdWx0cyBhbmQgbW92ZSBvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6NTAwMywiT3V0cHV0VG9rZW5zIjoxOTAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0NzMsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wNVQwMTowNDo0NC4yOTE4MjA1NzRaIiwiU2VxIjoyNiwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNzA1MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBsb2NraW5nIGFuZCBSQ1UgbGlzdCB0cmF2ZXJzYWwgc3RyYXRlZ3kgaW4gcmVnX2NoZWNrX2NoYW5zX3dvcmsoKSAobmV0L3dpcmVsZXNzL3JlZy5jKSBieSBkcm9wcGluZyBhbmQgcmUtYWNxdWlyaW5nIHJjdV9yZWFkX2xvY2soKSBhbmQgcnRubF9sb2NrKCkgYXJvdW5kIGVhY2ggaXRlcmF0aW9uIG9mIGNmZzgwMjExX3JkZXZfbGlzdC5cXG5cXG5UaGlzIGNoYW5nZSBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IG1lbW9yeSBhbGxvY2F0aW9ucywgZG9lcyBub3QgcmVhZCBvciB3cml0ZSB1bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgZmllbGRzLCBkb2VzIG5vdCBhbHRlciBidWZmZXIgbGVuZ3RoL2JvdW5kcyBjYWxjdWxhdGlvbnMsIGFuZCBkb2VzIG5vdCBwYXNzIGtlcm5lbCBkYXRhIHRvIHVzZXJzcGFjZS4gQW55IGNvbmN1cnJlbmN5LCB1c2UtYWZ0ZXItZnJlZSwgb3IgbGlzdCBjb3JydXB0aW9uIGlzc3VlcyBzdGVtbWluZyBmcm9tIGRyb3BwaW5nIFJDVSBkdXJpbmcgbGlzdCB0cmF2ZXJzYWwgYXJlIGRldGVjdGFibGUgYnkgc3RhbmRhcmQgZGVidWdnaW5nIHRvb2xzIChLQVNBTiwgTE9DS0RFUCwgYW5kIENPTkZJR19QUk9WRV9SQ1UpLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3Qgd2FycmFudGVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBsb2NraW5nIGFuZCBSQ1UgbGlzdCB0cmF2ZXJzYWwgc3RyYXRlZ3kgaW4gcmVnX2NoZWNrX2NoYW5zX3dvcmsoKSAobmV0L3dpcmVsZXNzL3JlZy5jKSBieSBkcm9wcGluZyBhbmQgcmUtYWNxdWlyaW5nIHJjdV9yZWFkX2xvY2soKSBhbmQgcnRubF9sb2NrKCkgYXJvdW5kIGVhY2ggaXRlcmF0aW9uIG9mIGNmZzgwMjExX3JkZXZfbGlzdC5cXG5cXG5UaGlzIGNoYW5nZSBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IG1lbW9yeSBhbGxvY2F0aW9ucywgZG9lcyBub3QgcmVhZCBvciB3cml0ZSB1bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgZmllbGRzLCBkb2VzIG5vdCBhbHRlciBidWZmZXIgbGVuZ3RoL2JvdW5kcyBjYWxjdWxhdGlvbnMsIGFuZCBkb2VzIG5vdCBwYXNzIGtlcm5lbCBkYXRhIHRvIHVzZXJzcGFjZS4gQW55IGNvbmN1cnJlbmN5LCB1c2UtYWZ0ZXItZnJlZSwgb3IgbGlzdCBjb3JydXB0aW9uIGlzc3VlcyBzdGVtbWluZyBmcm9tIGRyb3BwaW5nIFJDVSBkdXJpbmcgbGlzdCB0cmF2ZXJzYWwgYXJlIGRldGVjdGFibGUgYnkgc3RhbmRhcmQgZGVidWdnaW5nIHRvb2xzIChLQVNBTiwgTE9DS0RFUCwgYW5kIENPTkZJR19QUk9WRV9SQ1UpLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3Qgd2FycmFudGVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/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-workflowhtgb8[0].run-triage(0) Phase: Succeeded StartedAt: 2026-09-05 00:17:54 +0000 UTC FinishedAt: 2026-09-05 01:04:45 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "net-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git", "commit_hash": "761ae184f850f33d1bbf6c4530c7f237be780d21", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "CFG80211" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "net-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git", "commit_hash": "761ae184f850f33d1bbf6c4530c7f237be780d21", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "CFG80211" ], "series_id": "a6415cc5-2d2a-4e6e-8f3c-f90a5a6fc0ca" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "reg_check_chans_work", "reg_check_channels", "reg_leave_invalid_chans" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA1IDAxOjAzPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0NGRzgwMjExJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7cmVnX2NoZWNrX2NoYW5zX3dvcmsmIzM0OywKICAgICYjMzQ7cmVnX2NoZWNrX2NoYW5uZWxzJiMzNDssCiAgICAmIzM0O3JlZ19sZWF2ZV9pbnZhbGlkX2NoYW5zJiMzNDsKICBdLAogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGxvY2tpbmcgYW5kIFJDVSBsaXN0IHRyYXZlcnNhbCBzdHJhdGVneSBpbiByZWdfY2hlY2tfY2hhbnNfd29yaygpIChuZXQvd2lyZWxlc3MvcmVnLmMpIGJ5IGRyb3BwaW5nIGFuZCByZS1hY3F1aXJpbmcgcmN1X3JlYWRfbG9jaygpIGFuZCBydG5sX2xvY2soKSBhcm91bmQgZWFjaCBpdGVyYXRpb24gb2YgY2ZnODAyMTFfcmRldl9saXN0LlxuXG5UaGlzIGNoYW5nZSBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IG1lbW9yeSBhbGxvY2F0aW9ucywgZG9lcyBub3QgcmVhZCBvciB3cml0ZSB1bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgZmllbGRzLCBkb2VzIG5vdCBhbHRlciBidWZmZXIgbGVuZ3RoL2JvdW5kcyBjYWxjdWxhdGlvbnMsIGFuZCBkb2VzIG5vdCBwYXNzIGtlcm5lbCBkYXRhIHRvIHVzZXJzcGFjZS4gQW55IGNvbmN1cnJlbmN5LCB1c2UtYWZ0ZXItZnJlZSwgb3IgbGlzdCBjb3JydXB0aW9uIGlzc3VlcyBzdGVtbWluZyBmcm9tIGRyb3BwaW5nIFJDVSBkdXJpbmcgbGlzdCB0cmF2ZXJzYWwgYXJlIGRldGVjdGFibGUgYnkgc3RhbmRhcmQgZGVidWdnaW5nIHRvb2xzIChLQVNBTiwgTE9DS0RFUCwgYW5kIENPTkZJR19QUk9WRV9SQ1UpLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3Qgd2FycmFudGVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBjaGFuZ2VzIGxvY2tpbmcgYW5kIFJDVSBpdGVyYXRpb24gaW4gcmVnX2NoZWNrX2NoYW5zX3dvcmsoKSB3aXRoaW4gY2ZnODAyMTEgKG5ldC93aXJlbGVzcy9yZWcuYyksIHJlbGVhc2luZyBhbmQgcmUtYWNxdWlyaW5nIHJjdV9yZWFkX2xvY2sgYW5kIHJ0bmxfbG9jayBpbnNpZGUgbGlzdF9mb3JfZWFjaF9lbnRyeV9yY3UuIFRoaXMgcmVhY2hhYmxlIGNvZGUgcGF0aCBoYW5kbGVzIHJlZ3VsYXRvcnkgZG9tYWluIGNoYW5uZWwgdmFsaWRhdGlvbiBhbmQgaW50ZXJmYWNlIGRpc2Nvbm5lY3Rpb24sIHdoaWNoIGNhbiBiZSB0cmlnZ2VyZWQgdmlhIG5sODAyMTEgcmVndWxhdG9yeSBjb21tYW5kcy4gRnV6emluZyBpcyB3YXJyYW50ZWQgdG8gdGVzdCBmb3IgY29uY3VycmVuY3kgYnVncywgbGlzdCB0cmF2ZXJzYWwgaXNzdWVzLCBhbmQgUkNVL2xvY2tkZXAgd2FybmluZ3MuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDUgMDE6MDM8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCA5MDliYWU2M2U0Y2I4ZGJiOGMyYWVhMTAzZWRkZDBjYWJhOWFkYzc1XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFNhdCBTZXAgNSAwMTowMzo0NyAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9uZXQvd2lyZWxlc3MvcmVnLmMgYi9uZXQvd2lyZWxlc3MvcmVnLmNcbmluZGV4IGE4MzM2YmFmODVkYzYuLmEyZTBkMWNmODMxN2MgMTAwNjQ0XG4tLS0gYS9uZXQvd2lyZWxlc3MvcmVnLmNcbiYjNDM7JiM0MzsmIzQzOyBiL25ldC93aXJlbGVzcy9yZWcuY1xuQEAgLTI0NjYsMTIgJiM0MzsyNDY2LDIxIEBAIHN0YXRpYyB2b2lkIHJlZ19jaGVja19jaGFuc193b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcbiBcdHN0cnVjdCBjZmc4MDIxMV9yZWdpc3RlcmVkX2RldmljZSAqcmRldjtcbiBcbiBcdHByX2RlYnVnKFwmIzM0O1ZlcmlmeWluZyBhY3RpdmUgaW50ZXJmYWNlcyBhZnRlciByZWcgY2hhbmdlXFxuXCYjMzQ7KTtcbi1cdHJ0bmxfbG9jaygpO1xuLVxuLVx0Zm9yX2VhY2hfcmRldihyZGV2KVxuJiM0MztcdC8qXG4mIzQzO1x0ICogQWNxdWlyZSBydG5sIHBlci1kZXZpY2UgaW5zdGVhZCBvZiBob2xkaW5nIGl0IGZvciB0aGUgZW50aXJlIGxvb3A7XG4mIzQzO1x0ICogY2ZnODAyMTFfbGVhdmUoKSBjYW4gYmUgc2xvdyBhbmQgc3RhcnZlIG90aGVyIHJ0bmwgd2FpdGVycyBvdGhlcndpc2UuXG4mIzQzO1x0ICogd2lwaHlfdW5yZWdpc3RlcigpIGhvbGRzIHJ0bmwgYWNyb3NzIGxpc3RfZGVsX3JjdSgpICYjNDM7IHN5bmNocm9uaXplX3JjdSgpLFxuJiM0MztcdCAqIHNvIHJkZXYgY2Fubm90IGJlIGZyZWVkIHdoaWxlIHdlIGhvbGQgcnRubF9sb2NrKCkgYmVsb3cuXG4mIzQzO1x0ICovXG4mIzQzO1x0cmN1X3JlYWRfbG9jaygpO1xuJiM0MztcdGxpc3RfZm9yX2VhY2hfZW50cnlfcmN1KHJkZXYsIFx1MDAyNmNmZzgwMjExX3JkZXZfbGlzdCwgbGlzdCkge1xuJiM0MztcdFx0cmN1X3JlYWRfdW5sb2NrKCk7XG4mIzQzO1x0XHRydG5sX2xvY2soKTtcbiBcdFx0cmVnX2xlYXZlX2ludmFsaWRfY2hhbnMoXHUwMDI2cmRldi1cdTAwM2V3aXBoeSk7XG4tXG4tXHRydG5sX3VubG9jaygpO1xuJiM0MztcdFx0cnRubF91bmxvY2soKTtcbiYjNDM7XHRcdHJjdV9yZWFkX2xvY2soKTtcbiYjNDM7XHR9XG4mIzQzO1x0cmN1X3JlYWRfdW5sb2NrKCk7XG4gfVxuIFxuIHZvaWQgcmVnX2NoZWNrX2NoYW5uZWxzKHZvaWQpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDUgMDE6MDM8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Y29yZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7Q0ZHODAyMTEmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtyZWdfY2hlY2tfY2hhbnNfd29yayYjMzQ7LAogICAgJiMzNDtyZWdfY2hlY2tfY2hhbm5lbHMmIzM0OywKICAgICYjMzQ7cmVnX2xlYXZlX2ludmFsaWRfY2hhbnMmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggY2hhbmdlcyBsb2NraW5nIGFuZCBSQ1UgaXRlcmF0aW9uIGluIHJlZ19jaGVja19jaGFuc193b3JrKCkgd2l0aGluIGNmZzgwMjExIChuZXQvd2lyZWxlc3MvcmVnLmMpLCByZWxlYXNpbmcgYW5kIHJlLWFjcXVpcmluZyByY3VfcmVhZF9sb2NrIGFuZCBydG5sX2xvY2sgaW5zaWRlIGxpc3RfZm9yX2VhY2hfZW50cnlfcmN1LiBUaGlzIHJlYWNoYWJsZSBjb2RlIHBhdGggaGFuZGxlcyByZWd1bGF0b3J5IGRvbWFpbiBjaGFubmVsIHZhbGlkYXRpb24gYW5kIGludGVyZmFjZSBkaXNjb25uZWN0aW9uLCB3aGljaCBjYW4gYmUgdHJpZ2dlcmVkIHZpYSBubDgwMjExIHJlZ3VsYXRvcnkgY29tbWFuZHMuIEZ1enppbmcgaXMgd2FycmFudGVkIHRvIHRlc3QgZm9yIGNvbmN1cnJlbmN5IGJ1Z3MsIGxpc3QgdHJhdmVyc2FsIGlzc3VlcywgYW5kIFJDVS9sb2NrZGVwIHdhcm5pbmdzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lciBhbmQgc2VjdXJpdHkgZW5naW5lZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZXZhbHVhdGUgd2hldGhlciBpdCB3YXJyYW50cyBmdXp6aW5nIHdpdGggc3l6a2FsbGVyLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiBpbnRlcm5hbCBhc3N1bXB0aW9ucy4gWW91IG11c3QgYWN0aXZlbHkgdXNlIHlvdXIgY29kZSBhY2Nlc3MKdG9vbHMgdG8gaW5zcGVjdCB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlLCBjYWxsZXJzLCBhbmQgc3Vycm91bmRpbmcgY29udGV4dC4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjEuIENPUkUgVFJJQUdFIFBISUxPU09QSFkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KVGhlIGdvYWwgb2YgcGF0Y2ggZnV6emluZyBpcyB0byBkaXNjb3ZlciBjcmFzaGVzLCByZWdyZXNzaW9ucywgZXhwb3NlZCBsYXRlbnQgYnVncywKYW5kIG5ld2x5IHRyaWdnZXJlZCBhc3NlcnRpb25zIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIHNlcmllcy4KCi0gUkVBQ0hBQklMSVRZIElTIFRIRSBQUklNQVJZIEdBVEU6CiAgRnV6emluZyBjYW4gb25seSBkaXNjb3ZlciBidWdzIGluIGNvZGUgdGhhdCBjYW4gYWN0dWFsbHkgZXhlY3V0ZSBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZAogIGVudmlyb25tZW50cyAoR0NFIG9yIFFFTVUsIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBkZXZpY2VzIGxpa2UgVVNCIGdhZGdldHMsIG5ldGRldiwgdHVuL3RhcCkuCiAgSWYgdGhlIG1vZGlmaWVkIGNvZGUgaXMgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIChzZWUgU2VjdGlvbiAyKSwgaXQgTVVTVCBOT1QgYmUgZnV6emVkLAogIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciBpdCBhZGRzIGFzc2VydGlvbnMgb3IgY29tcGxleCBsb2dpYy4KCi0gRE8gTk9UIEJMSU5ETFkgVFJVU1QgJiMzNDtOTyBGVU5DVElPTkFMIENIQU5HRSYjMzQ7IChORkNJKSBPUiAmIzM0O1JFRkFDVE9SSU5HJiMzNDsgQ0xBSU1TOgogIFBhdGNoIGF1dGhvcnMgcm91dGluZWx5IGxhYmVsIGNoYW5nZXMgYXMgJiMzNDtjbGVhbnVwcyYjMzQ7LCAmIzM0O3JlZmFjdG9yaW5ncyYjMzQ7LCBvciBzdGF0ZQogICYjMzQ7Tm8gZnVuY3Rpb25hbCBjaGFuZ2UgaW50ZW5kZWQmIzM0Oy4gRG8gTk9UIHRha2UgdGhlc2UgY2xhaW1zIGF0IGZhY2UgdmFsdWUuCiAgQ29kZSByZWZhY3RvcmluZ3MgdGhhdCByZWFycmFuZ2UgbG9naWMsIGludHJvZHVjZSBoZWxwZXIgZnVuY3Rpb25zLCBvciBhbHRlciBzdGF0ZSBtYW5hZ2VtZW50CiAgaW4gY29yZSBzdWJzeXN0ZW1zIGZyZXF1ZW50bHkgaW50cm9kdWNlIHN1YnRsZSBzZW1hbnRpYyBzaGlmdHMgb3IgdW5jb3ZlciBsYXRlbnQga2VybmVsIGJ1Z3MuCiAgSWYgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSBpcyBtb2RpZmllZCBvciByZWZhY3RvcmVkLCBpdCBNVVNUIGJlIGZ1enplZC4KCi0gTkVXIE9SIE1PRElGSUVEIEFTU0VSVElPTlMgSU4gUkVBQ0hBQkxFIENPREUgTVVTVCBCRSBGVVpaRUQ6CiAgV2hlbiBhIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXMgcnVudGltZSBjaGVja3Mgb3IgYXNzZXJ0aW9ucyAoZS5nLiwgV0FSTl9PTiosIFZNX1dBUk5fT04qLAogIEJVR19PTiosIGxvY2tkZXBfYXNzZXJ0KikgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMsIGl0IGVuZm9yY2VzIG5ldyBvciBzdHJpY3RlciBpbnZhcmlhbnRzLgogIEV2ZW4gaWYgdGhlIGF1dGhvciBiZWxpZXZlcyB0aGUgaW52YXJpYW50IGFsd2F5cyBob2xkcywgZnV6emluZyBpcyBlc3NlbnRpYWwgdG8gdmVyaWZ5IHdoZXRoZXIKICBhbiB1bnVzdWFsIHNlcXVlbmNlIG9mIG9wZXJhdGlvbnMgY2FuIHZpb2xhdGUgaXQuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoyLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9ZmFsc2UgKE5FR0FUSVZFIENSSVRFUklBKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIE9OTFkgSUYgYWxsIG1vZGlmaWVkIGNvZGUgZmFsbHMgc3RyaWN0bHkgaW50byBvbmUgb3IgbW9yZSBvZiB0aGVzZSBjYXRlZ29yaWVzOgoKLSBOb24ta2VybmVsIGFuZCBub24tZXhlY3V0YWJsZSBjaGFuZ2VzOgogICogTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgY29tbWVudHMsIG9yIHNwZWxsaW5nIGZpeGVzLgogICogVXNlci1zcGFjZSBkaXJlY3Rvcmllcywgc2VsZi10ZXN0cywgc2FtcGxlcywgb3Igc2NyaXB0cyAoZS5nLiwgdG9vbHMvLCBzYW1wbGVzLywgc2NyaXB0cy8sIHVzci8pCiAgICB0aGF0IGRvIG5vdCBhZmZlY3QgdGhlIGNvbXBpbGVkIGtlcm5lbCBpbWFnZSAodm1saW51eCkgb3Iga2VybmVsIG1vZHVsZXMuCiAgKiBQdXJlbHkgZGVjb3JhdGl2ZSBsb2dnaW5nIChlLmcuLCBtZXNzYWdlIHN0cmluZ3MgaW4gcHJfZXJyLCBwcmludGssIGRldl9pbmZvKSBvciB0cmFjZXBvaW50cwogICAgdGhhdCBkbyBub3QgYWx0ZXIgY29udHJvbCBmbG93IG9yIGRhdGEgc3RydWN0dXJlcy4KICAqIEJ1aWxkIHN5c3RlbSBvciBLY29uZmlnIGNoYW5nZXMgdGhhdCBkbyBub3QgYWx0ZXIgY29tcGlsZWQgQyBsb2dpYy4KLSBTdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgaGFyZHdhcmU6CiAgKiBWZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2hlcywgU21hcnROSUNzLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgICBpb25pYywgYW1kZ3B1KSByZXF1aXJpbmcgcGh5c2ljYWwgQVNJQy9QQ0llIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIFVucmVhY2hhYmxlIGV4ZWN1dGlvbiBwYXRoczoKICAqIERyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKC5yZW1vdmUsIC5zaHV0ZG93biwgcGNpX3VucmVnaXN0ZXJfZHJpdmVyKSBleGVjdXRlZCBvbmx5IGR1cmluZwogICAgcGh5c2ljYWwgUENJIGhvdC11bnBsdWcgb3IgbWFudWFsIHN5c2ZzIGRyaXZlciB1bmJpbmRpbmcuCiAgKiBDb2RlIHBhdGhzIGV4Y2x1c2l2ZSB0byBhcmNoaXRlY3R1cmVzIG90aGVyIHRoYW4gdGhlIHRhcmdldCBhcmNoaXRlY3R1cmUuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQozLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9dHJ1ZSAoUE9TSVRJVkUgQ1JJVEVSSUEpCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZSB3aGVuZXZlciB0aGUgcGF0Y2ggdG91Y2hlcyByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlLCBpbmNsdWRpbmc6Ci0gQ29yZSBTdWJzeXN0ZW1zOgogICogQW55IGxvZ2ljIG1vZGlmaWNhdGlvbnMgaW4gbWVtb3J5IG1hbmFnZW1lbnQgKG1tLyksIHN5bmNocm9uaXphdGlvbi9sb2NraW5nIChrZXJuZWwvbG9ja2luZy8pLAogICAgQlBGLCBzY2hlZHVsZXIsIGNvcmUgbmV0d29ya2luZywgVkZTLCBvciBzeXNjYWxsIGhhbmRsaW5nLgotIFJlZmFjdG9yaW5ncyBhbmQgQ29kZSBDbGVhbnVwczoKICAqIEFueSByZXN0cnVjdHVyaW5nIG9mIHJlYWNoYWJsZSBkYXRhIHN0cnVjdHVyZXMsIGhlbHBlciBhYnN0cmFjdGlvbnMsIG9yIGFsZ29yaXRobSBmbG93cy4KLSBSdW50aW1lIEFzc2VydGlvbnMgYW5kIERlZmVuc2l2ZSBDaGVja3M6CiAgKiBBbnkgaW50cm9kdWN0aW9uIG9yIGFsdGVyYXRpb24gb2YgYXNzZXJ0aW9ucyAoV0FSTl9PTiosIFZNX1dBUk5fT04qLCBCVUdfT04qLCBldGMuKSBpbiByZWFjaGFibGUgcGF0aHMuCi0gUmVhY2hhYmxlIERyaXZlcnMgYW5kIFByb3RvY29sczoKICAqIERyaXZlcnMgYWNjZXNzaWJsZSB2aWEgdmlydHVhbCBidXNlcyAodmlydGlvLCBVU0IgZ2FkZ2V0LCBsb29wYmFjaywgbmV0bGluaywgYmluZGVyLCBzb2NrZXRzLCBldGMuKS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjQuIEVYVFJBQ1RJTkcgRm9jdXNTeW1ib2xzIChQUkVWRU5USU5HIERJTFVUSU9OKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpXaGVuIFdvcnRoRnV6emluZz10cnVlLCB5b3UgbXVzdCBleHRyYWN0IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgaW50byBGb2N1c1N5bWJvbHMgdG8gZ3VpZGUgdGhlIGZ1enplcjoKCi0gQVZPSUQgVUJJUVVJVE9VUyBMSUZFQ1lDTEUgSE9ULVBBVEhTOgogIERvIE5PVCBsaXN0IGdlbmVyaWMsIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhbGxlZCBieSBhbG1vc3QgZXZlcnkgcHJvZ3JhbSBpbiB0aGUgY29ycHVzCiAgKGluY2x1ZGluZywgYnV0IG5vdCBsaW1pdGVkIHRvOiBnZW5lcmFsIG1lbW9yeSBhbGxvY2F0b3JzIGFuZCBkZWFsbG9jYXRvcnMsIHBhZ2UgZmF1bHQKICBhbmQgdHJhcCBoYW5kbGVycywgb3IgY29yZSBzeW5jaHJvbml6YXRpb24gcHJpbWl0aXZlczsgdGhpcyBpcyBub3QgYW4gZXhoYXVzdGl2ZSBsaXN0KS4KICBMaXN0aW5nIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhdXNlcyB0aGUgZnV6emVyIHRvIGNsYXNzaWZ5IHRob3VzYW5kcyBvZiB1bnJlbGF0ZWQgdGVzdHMgYXMgJiMzNDtmb2N1c2VkJiMzNDssCiAgd2hpY2ggc2V2ZXJlbHkgZGlsdXRlcyBmdXp6aW5nIGVmZm9ydCBhd2F5IGZyb20gdGhlIGFjdHVhbCBjaGFuZ2VzLgoKLSBUQVJHRVQgU1BFQ0lGSUMgRkVBVFVSRSBMT0dJQyBBTkQgRU5UUllQT0lOVFM6CiAgTGlzdCBmdW5jdGlvbnMgdGhhdCBzcGVjaWZpY2FsbHkgaW1wbGVtZW50IHRoZSBsb2dpYyBiZWluZyBhZGRlZCBvciBhbHRlcmVkLCBvciBkaXJlY3QgQVBJIGVudHJ5cG9pbnRzCiAgZm9yIHRoZSBzdWJzeXN0ZW0gZmVhdHVyZSB1bmRlciByZXZpZXcuCgotIEhBTkRMSU5HIFNUQVRJQyBJTkxJTkUgRlVOQ1RJT05TIElOIEhFQURFUlMgKC5oKToKICBDb21waWxlci1pbmxpbmVkIHN0YXRpYyBmdW5jdGlvbnMgKHN1Y2ggYXMgc3RhdGljIGlubGluZXMgaW4gbW0vKi5oIG9yIGluY2x1ZGUvbGludXgvKi5oKSBsYWNrCiAgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcyBpbiB2bWxpbnV4IGFuZCBjYW5ub3QgYmUgdGFyZ2V0ZWQgZGlyZWN0bHkgYnkgc3ltYm9sIGNvdmVyYWdlIGZpbHRlcnMuCiAgSWYgdGhlIGNoYW5nZXMgYXJlIHByaW1hcmlseSBpbiBzdGF0aWMgaW5saW5lIGhlbHBlcnMsIGlkZW50aWZ5IG5vbi1zdGF0aWMsIGZlYXR1cmUtc3BlY2lmaWMgY2FsbGVyCiAgZnVuY3Rpb25zIGluIC5jIGZpbGVzIHRoYXQgZXhlcmNpc2UgdGhlbSAoYXZvaWRpbmcgdWJpcXVpdG91cyBsaWZlY3ljbGUgd3JhcHBlcnMpLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KNS4gSURFTlRJRllJTkcgRW5hYmxlQ29uZmlncwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IGNvbXBpbGUgYW5kIHJlYWNoIHRoZSBtb2RpZmllZCBjb2RlOgotIEluc3BlY3QgS2NvbmZpZyBmaWxlcyBhbmQgI2lmZGVmIGd1YXJkczsgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCi0gQ2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzIG5lZWRlZC4KLSBTdHJpcCBhbnkgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+VGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjQKCkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgOTA5YmFlNjNlNGNiOGRiYjhjMmFlYTEwM2VkZGQwY2FiYTlhZGM3NQpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBTYXQgU2VwIDUgMDE6MDM6NDcgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9uZXQvd2lyZWxlc3MvcmVnLmMgYi9uZXQvd2lyZWxlc3MvcmVnLmMKaW5kZXggYTgzMzZiYWY4NWRjNi4uYTJlMGQxY2Y4MzE3YyAxMDA2NDQKLS0tIGEvbmV0L3dpcmVsZXNzL3JlZy5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC93aXJlbGVzcy9yZWcuYwpAQCAtMjQ2NiwxMiAmIzQzOzI0NjYsMjEgQEAgc3RhdGljIHZvaWQgcmVnX2NoZWNrX2NoYW5zX3dvcmsoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKQogCXN0cnVjdCBjZmc4MDIxMV9yZWdpc3RlcmVkX2RldmljZSAqcmRldjsKIAogCXByX2RlYnVnKCYjMzQ7VmVyaWZ5aW5nIGFjdGl2ZSBpbnRlcmZhY2VzIGFmdGVyIHJlZyBjaGFuZ2VcbiYjMzQ7KTsKLQlydG5sX2xvY2soKTsKLQotCWZvcl9lYWNoX3JkZXYocmRldikKJiM0MzsJLyoKJiM0MzsJICogQWNxdWlyZSBydG5sIHBlci1kZXZpY2UgaW5zdGVhZCBvZiBob2xkaW5nIGl0IGZvciB0aGUgZW50aXJlIGxvb3A7CiYjNDM7CSAqIGNmZzgwMjExX2xlYXZlKCkgY2FuIGJlIHNsb3cgYW5kIHN0YXJ2ZSBvdGhlciBydG5sIHdhaXRlcnMgb3RoZXJ3aXNlLgomIzQzOwkgKiB3aXBoeV91bnJlZ2lzdGVyKCkgaG9sZHMgcnRubCBhY3Jvc3MgbGlzdF9kZWxfcmN1KCkgJiM0Mzsgc3luY2hyb25pemVfcmN1KCksCiYjNDM7CSAqIHNvIHJkZXYgY2Fubm90IGJlIGZyZWVkIHdoaWxlIHdlIGhvbGQgcnRubF9sb2NrKCkgYmVsb3cuCiYjNDM7CSAqLwomIzQzOwlyY3VfcmVhZF9sb2NrKCk7CiYjNDM7CWxpc3RfZm9yX2VhY2hfZW50cnlfcmN1KHJkZXYsICZhbXA7Y2ZnODAyMTFfcmRldl9saXN0LCBsaXN0KSB7CiYjNDM7CQlyY3VfcmVhZF91bmxvY2soKTsKJiM0MzsJCXJ0bmxfbG9jaygpOwogCQlyZWdfbGVhdmVfaW52YWxpZF9jaGFucygmYW1wO3JkZXYtJmd0O3dpcGh5KTsKLQotCXJ0bmxfdW5sb2NrKCk7CiYjNDM7CQlydG5sX3VubG9jaygpOwomIzQzOwkJcmN1X3JlYWRfbG9jaygpOwomIzQzOwl9CiYjNDM7CXJjdV9yZWFkX3VubG9jaygpOwogfQogCiB2b2lkIHJlZ19jaGVja19jaGFubmVscyh2b2lkKQo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNSAwMTowMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzMDU5CgkJCQkJCQlvdXRwdXQ6IDM2CgkJCQkJCQl0aG91Z2h0czogNTIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIG15IG93biBtZW50YWwgcHJvY2VzczoKCioqRGl2aW5nIGludG8gdGhlIFJlZ3VsYXRvcnkgRG9tYWluIENvZGUqKgoKQWxyaWdodCwgdGhlIGhpbnQgcG9pbnRzIG1lIHN0cmFpZ2h0IHRvIGBuZXQvd2lyZWxlc3MvcmVnLmNgLiBHb29kLCB0aGF0JiMzOTtzIHdoZXJlIEkmIzM5O2QgZXhwZWN0IHRvIGZpbmQgdGhlIHJlZ3VsYXRvcnktcmVsYXRlZCBjb2RlLiBNeSBmaXJzdCBzdGVwIGlzIHRvIGdldCBhIGhhbmRsZSBvbiB0aGUgY2hhbmdlcy4gVGltZSB0byBwdWxsIHVwIHRoZSBkaWZmIGFuZCByZWFsbHkgZ2V0IGludG8gdGhlIG5pdHR5LWdyaXR0eS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgKmV4YWN0bHkqIHdoYXQmIzM5O3MgYmVlbiBtb2RpZmllZCBhbmQgd2h5LiBJJiMzOTtsbCBuZWVkIHRvIGV4YW1pbmUgdGhlIGNvbnRleHQgYXJvdW5kIHRob3NlIGNoYW5nZXMg4oCTIHdoYXQmIzM5O3MgdGhlIHN1cnJvdW5kaW5nIGNvZGUgZG9pbmcsIGhvdyBkb2VzIHRoaXMgZml0IGludG8gdGhlIGJyb2FkZXIgcmVndWxhdG9yeSBkb21haW4gbG9naWMsIGFuZCB3aGF0JiMzOTtzIHRoZSBpbnRlbmRlZCBpbXBhY3Q/CgpOb3csIHRvIGxvY2F0ZSB0aGUgYXJlYSBpbiBxdWVzdGlvbiwgSSYjMzk7bGwgbGV2ZXJhZ2UgdGhlIGxpbmUgbnVtYmVyIOKAkyBhcm91bmQgbGluZSAyNDY2IOKAkyBpdCYjMzk7cyBhbHdheXMgYSBnb29kIHN0YXJ0aW5nIHBvaW50LiBJJiMzOTtsbCB1c2UgYSBgcmVhZC1maWxlYCBjb21tYW5kLCBvciBzaW1pbGFyLCB0byBxdWlja2x5IGp1bXAgdG8gdGhhdCBzcGVjaWZpYyByZWdpb24gb2YgdGhlIGByZWcuY2AgZmlsZSBhbmQgc3RhcnQgbXkgYW5hbHlzaXMuIFRoaXMgZ2l2ZXMgbWUgYSBxdWljayB3YXkgdG8gZXhhbWluZSB0aGUgY29kZSYjMzk7cyBpbW1lZGlhdGUgY29udGV4dC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNSAwMTowMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC93aXJlbGVzcy9yZWcuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDI0NTUsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNTAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MjQ1NTpcdFx0XHRib29sIHZhbGlkO1xuMjQ1NjpcdFxuMjQ1NzpcdFx0XHRzY29wZWRfZ3VhcmQod2lwaHksIHdpcGh5KVxuMjQ1ODpcdFx0XHRcdHZhbGlkID0gcmVnX3dkZXZfY2hhbl92YWxpZCh3aXBoeSwgd2Rldik7XG4yNDU5Olx0XHRcdGlmICghdmFsaWQpXG4yNDYwOlx0XHRcdFx0Y2ZnODAyMTFfbGVhdmUocmRldiwgd2RldiwgLTEpO1xuMjQ2MTpcdFx0fVxuMjQ2MjpcdH1cbjI0NjM6XHRcbjI0NjQ6XHRzdGF0aWMgdm9pZCByZWdfY2hlY2tfY2hhbnNfd29yayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXG4yNDY1Olx0e1xuMjQ2NjpcdFx0c3RydWN0IGNmZzgwMjExX3JlZ2lzdGVyZWRfZGV2aWNlICpyZGV2O1xuMjQ2NzpcdFxuMjQ2ODpcdFx0cHJfZGVidWcoXCYjMzQ7VmVyaWZ5aW5nIGFjdGl2ZSBpbnRlcmZhY2VzIGFmdGVyIHJlZyBjaGFuZ2VcXG5cJiMzNDspO1xuMjQ2OTpcdFx0LypcbjI0NzA6XHRcdCAqIEFjcXVpcmUgcnRubCBwZXItZGV2aWNlIGluc3RlYWQgb2YgaG9sZGluZyBpdCBmb3IgdGhlIGVudGlyZSBsb29wO1xuMjQ3MTpcdFx0ICogY2ZnODAyMTFfbGVhdmUoKSBjYW4gYmUgc2xvdyBhbmQgc3RhcnZlIG90aGVyIHJ0bmwgd2FpdGVycyBvdGhlcndpc2UuXG4yNDcyOlx0XHQgKiB3aXBoeV91bnJlZ2lzdGVyKCkgaG9sZHMgcnRubCBhY3Jvc3MgbGlzdF9kZWxfcmN1KCkgJiM0Mzsgc3luY2hyb25pemVfcmN1KCksXG4yNDczOlx0XHQgKiBzbyByZGV2IGNhbm5vdCBiZSBmcmVlZCB3aGlsZSB3ZSBob2xkIHJ0bmxfbG9jaygpIGJlbG93LlxuMjQ3NDpcdFx0ICovXG4yNDc1Olx0XHRyY3VfcmVhZF9sb2NrKCk7XG4yNDc2Olx0XHRsaXN0X2Zvcl9lYWNoX2VudHJ5X3JjdShyZGV2LCBcdTAwMjZjZmc4MDIxMV9yZGV2X2xpc3QsIGxpc3QpIHtcbjI0Nzc6XHRcdFx0cmN1X3JlYWRfdW5sb2NrKCk7XG4yNDc4Olx0XHRcdHJ0bmxfbG9jaygpO1xuMjQ3OTpcdFx0XHRyZWdfbGVhdmVfaW52YWxpZF9jaGFucyhcdTAwMjZyZGV2LVx1MDAzZXdpcGh5KTtcbjI0ODA6XHRcdFx0cnRubF91bmxvY2soKTtcbjI0ODE6XHRcdFx0cmN1X3JlYWRfbG9jaygpO1xuMjQ4MjpcdFx0fVxuMjQ4MzpcdFx0cmN1X3JlYWRfdW5sb2NrKCk7XG4yNDg0Olx0fVxuMjQ4NTpcdFxuMjQ4NjpcdHZvaWQgcmVnX2NoZWNrX2NoYW5uZWxzKHZvaWQpXG4yNDg3Olx0e1xuMjQ4ODpcdFx0LypcbjI0ODk6XHRcdCAqIEdpdmUgdXNlcm1vZGUgYSBjaGFuY2UgdG8gZG8gc29tZXRoaW5nIG5pY2VyIChtb3ZlIHRvIGFub3RoZXJcbjI0OTA6XHRcdCAqIGNoYW5uZWwsIG9yZGVybHkgZGlzY29ubmVjdGlvbiksIGJlZm9yZSBmb3JjaW5nIGEgZGlzY29ubmVjdGlvbi5cbjI0OTE6XHRcdCAqL1xuMjQ5MjpcdFx0bW9kX2RlbGF5ZWRfd29yayhzeXN0ZW1fcG93ZXJfZWZmaWNpZW50X3dxLFxuMjQ5MzpcdFx0XHRcdCBcdTAwMjZyZWdfY2hlY2tfY2hhbnMsXG4yNDk0Olx0XHRcdFx0IG1zZWNzX3RvX2ppZmZpZXMoUkVHX0VORk9SQ0VfR1JBQ0VfTVMpKTtcbjI0OTU6XHR9XG4yNDk2Olx0XG4yNDk3Olx0c3RhdGljIHZvaWQgd2lwaHlfdXBkYXRlX3JlZ3VsYXRvcnkoc3RydWN0IHdpcGh5ICp3aXBoeSxcbjI0OTg6XHRcdFx0XHRcdCAgICBlbnVtIG5sODAyMTFfcmVnX2luaXRpYXRvciBpbml0aWF0b3IpXG4yNDk5Olx0e1xuMjUwMDpcdFx0ZW51bSBubDgwMjExX2JhbmQgYmFuZDtcbjI1MDE6XHRcdHN0cnVjdCByZWd1bGF0b3J5X3JlcXVlc3QgKmxyID0gZ2V0X2xhc3RfcmVxdWVzdCgpO1xuMjUwMjpcdFxuMjUwMzpcdFx0aWYgKGlnbm9yZV9yZWdfdXBkYXRlKHdpcGh5LCBpbml0aWF0b3IpKSB7XG4yNTA0Olx0XHRcdC8qXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDUgMDE6MDM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDE2MAoJCQkJCQkJb3V0cHV0OiAzMQoJCQkJCQkJdGhvdWdodHM6IDM0NwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgVGhpcyBQYXRjaDogQSBQb3RlbnRpYWwgUkNVIFZpb2xhdGlvbioqCgpPa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMgcGF0Y2ggY29uY2VybmluZyBgcmVnX2NoZWNrX2NoYW5zX3dvcmtgIHdpdGhpbiBgbmV0L3dpcmVsZXNzL3JlZy5jYC4gVGhlIGZpcnN0IHRoaW5nIHRoYXQganVtcHMgb3V0IGlzIHRoZSB1c2Ugb2YgYGxpc3RfZm9yX2VhY2hfZW50cnlfcmN1YC4gV2FpdCBhIHNlY29uZCEgSSBzZWUgaXQmIzM5O3MgaXRlcmF0aW5nIG92ZXIgYGNmZzgwMjExX3JkZXZfbGlzdGAgdXNpbmcgYHJkZXYtJmd0O2xpc3QubmV4dGAuIFRoZW4gSSBzZWUgdGhlIGNyaXRpY2FsIHBvaW50OiB0aGUgY29kZSAqZHJvcHMqIGByY3VfcmVhZF91bmxvY2soKWAgYW5kIHRoZW4gcmUtYWNxdWlyZXMgYHJjdV9yZWFkX2xvY2soKWAgKndpdGhpbiogdGhlIGxvb3AgYm9keS4gQWxhcm0gYmVsbHMhCgpUaGlzIGlzIGEgdGV4dGJvb2sgZXhhbXBsZSBvZiBwb3RlbnRpYWxseSBicmVha2luZyBSQ1UgaW52YXJpYW50cy4gV2hlbiB5b3UmIzM5O3JlIGRlYWxpbmcgd2l0aCBgbGlzdF9mb3JfZWFjaF9lbnRyeV9yY3VgLCB5b3UmIzM5O3JlIHN1cHBvc2VkIHRvIGhvbGQgdGhlIHJlYWQgbG9jayBhY3Jvc3MgdGhlICplbnRpcmUqIGl0ZXJhdGlvbi4gSWYgd2UgZHJvcCB0aGUgbG9jayBhbmQgcmUtYWNxdWlyZSBpdCBpbnNpZGUgdGhlIGxvb3AsIHdlIGNyZWF0ZSBhIHdpbmRvdyB3aGVyZSBgcmRldmAgY291bGQgYmUgdW5saW5rZWQsIGZyZWVkLCBvciBpdHMgYGxpc3QubmV4dGAgcG9pbnRlciBjb3VsZCBiZWNvbWUgaW52YWxpZCBkdWUgdG8gdGhlIFJDVSBncmFjZSBwZXJpb2QgYWZ0ZXIgYGxpc3RfZGVsX3JjdWAuIEVzc2VudGlhbGx5LCB3ZSYjMzk7cmUgdmlvbGF0aW5nIHRoZSBjb3JlIGFzc3VtcHRpb24gb2YgUkNVIHRyYXZlcnNhbC4gVGhpcyBpcyBhIHZlcnkgdW5zYWZlIG1hbmV1dmVyLgoKVGhlIGZ1bmRhbWVudGFsIGlzc3VlIGlzIHRoYXQgYnkgZHJvcHBpbmcgdGhlIFJDVSByZWFkIGxvY2ssIGByZGV2YCBtaWdodCBoYXZlIGJlZW4gZnJlZWQgZHVyaW5nIGBzeW5jaHJvbml6ZV9yY3VgIG9yIGFmdGVyIHRoZSBgbGlzdF9kZWxfcmN1YCBhbmQgZHVyaW5nIHRoZSBncmFjZSBwZXJpb2QuIE9yIGV2ZW4ganVzdCBhY2Nlc3NpbmcgYHJkZXYtJmd0O2xpc3QubmV4dGAgbWlnaHQgYmUgcHJvYmxlbWF0aWMgZHVyaW5nIHRoYXQgcGVyaW9kLiBUaGUgdHJhdmVyc2FsIGNvdWxkIGJlY29tZSBlaXRoZXIgc2FmZSBvciB1bnNhZmUsIGFuZCBpdCYjMzk7cyBoYXJkIHRvIHByZWRpY3QuCgpOb3cgdGhlIG1pbGxpb24tZG9sbGFyIHF1ZXN0aW9uOiBpcyB0aGlzIHJlYWNoYWJsZT8gSXMgdGhpcyBzb21ldGhpbmcgd2UgY2FuIHRyaWdnZXI/IEdpdmVuIHRoYXQgYG5ldC93aXJlbGVzc2Ag4oCTIHdoaWNoIGluY2x1ZGVzIGBjZmc4MDIxMWAsIGBtYWM4MDIxMV9od3NpbWAsIGBubDgwMjExYCwgYW5kIHNvIG9uIOKAkyBpcyBhIHN0YW5kYXJkIHRhcmdldCBmb3Igc3l6a2FsbGVyIGZ1enppbmcsIHRoZXJlJiMzOTtzIGEgKnZlcnkqIGdvb2QgY2hhbmNlIHRoaXMgaXMgaW5kZWVkIHJlYWNoYWJsZSBhbmQgZnV6emVyLXRyaWdnZXJhYmxlLiBUaGlzIG1ha2VzIG1lIHZlcnkgbmVydm91czsgdGhpcyBpcyB0aGUga2luZCBvZiBzdWJ0bGUgUkNVIGJ1ZyB0aGF0IGNhbiBsZWFkIHRvIGNyYXNoZXMgb3IsIHdvcnNlLCBoYXJkLXRvLWRlYnVnIG1lbW9yeSBjb3JydXB0aW9uLgoKTmV4dCwgSSBuZWVkIHRvIGNoZWNrIHRoZSBLY29uZmlnIHJlcXVpcmVtZW50cyBmb3IgYG5ldC93aXJlbGVzcy9yZWcuY2AgdG8gc2VlIGlmIHRoZXJlIGFyZSBhbnkgc3BlY2lmaWMgZGVwZW5kZW5jaWVzIHRoYXQgbWlnaHQgbGltaXQgb3IgZW5hYmxlIHRoaXMgdnVsbmVyYWJpbGl0eS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNSAwMTowNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtDRkc4MDIxMSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC93aXJlbGVzcy8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7XG5GdWxsIG91dHB1dCBpcyB0b28gbG9uZywgc2hvd2luZyA1MDAgb3V0IG9mIDg1NyBsaW5lcy5cblVzZSBtb3JlIHByZWNpc2UgZXhwcmVzc2lvbiBpZiBwb3NzaWJsZS5cblxubmV0L3dpcmVsZXNzL0tjb25maWc9NT1jb25maWcgV0VYVF9DT1JFXG5uZXQvd2lyZWxlc3MvS2NvbmZpZy02LVx0ZGVmX2Jvb2wgeVxubmV0L3dpcmVsZXNzL0tjb25maWc6NzpcdGRlcGVuZHMgb24gQ0ZHODAyMTFfV0VYVCB8fCBXSVJFTEVTU19FWFRcbm5ldC93aXJlbGVzcy9LY29uZmlnLTgtXG4tLVxubmV0L3dpcmVsZXNzL0tjb25maWc9MTQ9Y29uZmlnIFdFWFRfUFJJVlxuLS1cbm5ldC93aXJlbGVzcy9LY29uZmlnLTE2LVxubmV0L3dpcmVsZXNzL0tjb25maWc6MTc6Y29uZmlnIENGRzgwMjExXG5uZXQvd2lyZWxlc3MvS2NvbmZpZy0xOC1cdHRyaXN0YXRlIFwmIzM0O2NmZzgwMjExIC0gd2lyZWxlc3MgY29uZmlndXJhdGlvbiBBUElcJiMzNDtcbi0tXG5uZXQvd2lyZWxlc3MvS2NvbmZpZy0yNC1cdCMgKHRoaXMgaXMgaGVyZSByYXRoZXIgdGhhbiBiZWxvdyB0byBhbGxvdyBpdCB0byBiZSBhIG1vZHVsZSlcbm5ldC93aXJlbGVzcy9LY29uZmlnOjI1Olx0c2VsZWN0IENSWVBUT19TSEEyNTYgaWYgQ0ZHODAyMTFfVVNFX0tFUk5FTF9SRUdEQl9LRVlTXG5uZXQvd2lyZWxlc3MvS2NvbmZpZy0yNi1cdGhlbHBcbi0tXG5uZXQvd2lyZWxlc3MvS2NvbmZpZy0zNS1cbm5ldC93aXJlbGVzcy9LY29uZmlnOjM2OmlmIENGRzgwMjExXG5uZXQvd2lyZWxlc3MvS2NvbmZpZy0zNy1cbm5ldC93aXJlbGVzcy9LY29uZmlnPTM4PWNvbmZpZyBOTDgwMjExX1RFU1RNT0RFXG4tLVxubmV0L3dpcmVsZXNzL0tjb25maWctNTEtXG5uZXQvd2lyZWxlc3MvS2NvbmZpZzo1Mjpjb25maWcgQ0ZHODAyMTFfREVWRUxPUEVSX1dBUk5JTkdTXG5uZXQvd2lyZWxlc3MvS2NvbmZpZy01My1cdGJvb2wgXCYjMzQ7ZW5hYmxlIGRldmVsb3BlciB3YXJuaW5nc1wmIzM0O1xuLS1cbm5ldC93aXJlbGVzcy9LY29uZmlnLTY3LVxubmV0L3dpcmVsZXNzL0tjb25maWc6Njg6Y29uZmlnIENGRzgwMjExX0NFUlRJRklDQVRJT05fT05VU1xubmV0L3dpcmVsZXNzL0tjb25maWctNjktXHRib29sIFwmIzM0O2NmZzgwMjExIGNlcnRpZmljYXRpb24gb251c1wmIzM0O1xuLS1cbm5ldC93aXJlbGVzcy9LY29uZmlnLTg4LVxubmV0L3dpcmVsZXNzL0tjb25maWc6ODk6Y29uZmlnIENGRzgwMjExX1JFUVVJUkVfU0lHTkVEX1JFR0RCXG5uZXQvd2lyZWxlc3MvS2NvbmZpZzo5MDpcdGJvb2wgXCYjMzQ7cmVxdWlyZSByZWdkYiBzaWduYXR1cmVcJiMzNDsgaWYgQ0ZHODAyMTFfQ0VSVElGSUNBVElPTl9PTlVTXG5uZXQvd2lyZWxlc3MvS2NvbmZpZy05MS1cdGRlZmF1bHQgeVxuLS1cbm5ldC93aXJlbGVzcy9LY29uZmlnLTk4LVxubmV0L3dpcmVsZXNzL0tjb25maWc6OTk6Y29uZmlnIENGRzgwMjExX1VTRV9LRVJORUxfUkVHREJfS0VZU1xubmV0L3dpcmVsZXNzL0tjb25maWc6MTAwOlx0Ym9vbCBcJiMzNDthbGxvdyByZWdkYiBrZXlzIHNoaXBwZWQgd2l0aCB0aGUga2VybmVsXCYjMzQ7IGlmIENGRzgwMjExX0NFUlRJRklDQVRJT05fT05VU1xubmV0L3dpcmVsZXNzL0tjb25maWctMTAxLVx0ZGVmYXVsdCB5XG5uZXQvd2lyZWxlc3MvS2NvbmZpZzoxMDI6XHRkZXBlbmRzIG9uIENGRzgwMjExX1JFUVVJUkVfU0lHTkVEX1JFR0RCXG5uZXQvd2lyZWxlc3MvS2NvbmZpZy0xMDMtXHRoZWxwXG4tLVxubmV0L3dpcmVsZXNzL0tjb25maWctMTEwLVxubmV0L3dpcmVsZXNzL0tjb25maWc6MTExOmNvbmZpZyBDRkc4MDIxMV9FWFRSQV9SRUdEQl9LRVlESVJcbm5ldC93aXJlbGVzcy9LY29uZmlnOjExMjpcdHN0cmluZyBcJiMzNDthZGRpdGlvbmFsIHJlZ2RiIGtleSBkaXJlY3RvcnlcJiMzNDsgaWYgQ0ZHODAyMTFfQ0VSVElGSUNBVElPTl9PTlVTXG5uZXQvd2lyZWxlc3MvS2NvbmZpZzoxMTM6XHRkZXBlbmRzIG9uIENGRzgwMjExX1JFUVVJUkVfU0lHTkVEX1JFR0RCXG5uZXQvd2lyZWxlc3MvS2NvbmZpZy0xMTQtXHRoZWxwXG4tLVxubmV0L3dpcmVsZXNzL0tjb25maWctMTIxLVxubmV0L3dpcmVsZXNzL0tjb25maWc6MTIyOmNvbmZpZyBDRkc4MDIxMV9SRUdfQ0VMTFVMQVJfSElOVFNcbm5ldC93aXJlbGVzcy9LY29uZmlnLTEyMy1cdGJvb2wgXCYjMzQ7Y2ZnODAyMTEgcmVndWxhdG9yeSBzdXBwb3J0IGZvciBjZWxsdWxhciBiYXNlIHN0YXRpb24gaGludHNcJiMzNDtcbm5ldC93aXJlbGVzcy9LY29uZmlnOjEyNDpcdGRlcGVuZHMgb24gQ0ZHODAyMTFfQ0VSVElGSUNBVElPTl9PTlVTXG5uZXQvd2lyZWxlc3MvS2NvbmZpZy0xMjUtXHRoZWxwXG4tLVxubmV0L3dpcmVsZXNzL0tjb25maWctMTM0LVxubmV0L3dpcmVsZXNzL0tjb25maWc6MTM1OmNvbmZpZyBDRkc4MDIxMV9SRUdfUkVMQVhfTk9fSVJcbm5ldC93aXJlbGVzcy9LY29uZmlnLTEzNi1cdGJvb2wgXCYjMzQ7Y2ZnODAyMTEgc3VwcG9ydCBmb3IgTk9fSVIgcmVsYXhhdGlvblwmIzM0O1xubmV0L3dpcmVsZXNzL0tjb25maWc6MTM3Olx0ZGVwZW5kcyBvbiBDRkc4MDIxMV9DRVJUSUZJQ0FUSU9OX09OVVNcbm5ldC93aXJlbGVzcy9LY29uZmlnLTEzOC1cdGhlbHBcbi0tXG5uZXQvd2lyZWxlc3MvS2NvbmZpZy0xNTgtXG5uZXQvd2lyZWxlc3MvS2NvbmZpZzoxNTk6Y29uZmlnIENGRzgwMjExX0RFRkFVTFRfUFNcbm5ldC93aXJlbGVzcy9LY29uZmlnLTE2MC1cdGJvb2wgXCYjMzQ7ZW5hYmxlIHBvd2Vyc2F2ZSBieSBkZWZhdWx0XCYjMzQ7XG4tLVxubmV0L3dpcmVsZXNzL0tjb25maWctMTY4LVxubmV0L3dpcmVsZXNzL0tjb25maWc6MTY5OmNvbmZpZyBDRkc4MDIxMV9ERUJVR0ZTXG5uZXQvd2lyZWxlc3MvS2NvbmZpZy0xNzAtXHRib29sIFwmIzM0O2NmZzgwMjExIERlYnVnRlMgZW50cmllc1wmIzM0O1xuLS1cbm5ldC93aXJlbGVzcy9LY29uZmlnLTE3Ni1cbm5ldC93aXJlbGVzcy9LY29uZmlnOjE3Nzpjb25maWcgQ0ZHODAyMTFfQ1JEQV9TVVBQT1JUXG5uZXQvd2lyZWxlc3MvS2NvbmZpZy0xNzgtXHRib29sIFwmIzM0O3N1cHBvcnQgQ1JEQVwmIzM0OyBpZiBFWFBFUlRcbi0tXG5uZXQvd2lyZWxlc3MvS2NvbmZpZy0xODYtXG5uZXQvd2lyZWxlc3MvS2NvbmZpZzoxODc6Y29uZmlnIENGRzgwMjExX1dFWFRcbm5ldC93aXJlbGVzcy9LY29uZmlnLTE4OC1cdGJvb2wgXCYjMzQ7Y2ZnODAyMTEgd2lyZWxlc3MgZXh0ZW5zaW9ucyBjb21wYXRpYmlsaXR5XCYjMzQ7XG4tLVxubmV0L3dpcmVsZXNzL0tjb25maWctMTkzLVxubmV0L3dpcmVsZXNzL0tjb25maWc6MTk0OmNvbmZpZyBDRkc4MDIxMV9LVU5JVF9URVNUXG5uZXQvd2lyZWxlc3MvS2NvbmZpZy0xOTUtXHR0cmlzdGF0ZSBcJiMzNDtLVW5pdCB0ZXN0cyBmb3IgY2ZnODAyMTFcJiMzNDsgaWYgIUtVTklUX0FMTF9URVNUU1xubmV0L3dpcmVsZXNzL0tjb25maWctMTk2LVx0ZGVwZW5kcyBvbiBLVU5JVFxubmV0L3dpcmVsZXNzL0tjb25maWc6MTk3Olx0ZGVwZW5kcyBvbiBDRkc4MDIxMVxubmV0L3dpcmVsZXNzL0tjb25maWctMTk4LVx0ZGVmYXVsdCBLVU5JVF9BTExfVEVTVFNcbi0tXG5uZXQvd2lyZWxlc3MvS2NvbmZpZy0yMDMtXG5uZXQvd2lyZWxlc3MvS2NvbmZpZzoyMDQ6ZW5kaWYgIyBDRkc4MDIxMVxuLS1cbm5ldC93aXJlbGVzcy9NYWtlZmlsZS0xLSMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjBcbm5ldC93aXJlbGVzcy9NYWtlZmlsZToyOm9iai0kKENPTkZJR19DRkc4MDIxMSkgJiM0Mzs9IGNmZzgwMjExLm9cbm5ldC93aXJlbGVzcy9NYWtlZmlsZS0zLW9iai15ICYjNDM7PSB0ZXN0cy9cbi0tXG5uZXQvd2lyZWxlc3MvTWFrZWZpbGU9MTI9Y2ZnODAyMTEtJChDT05GSUdfT0YpICYjNDM7PSBvZi5vXG5uZXQvd2lyZWxlc3MvTWFrZWZpbGU6MTM6Y2ZnODAyMTEtJChDT05GSUdfQ0ZHODAyMTFfREVCVUdGUykgJiM0Mzs9IGRlYnVnZnMub1xubmV0L3dpcmVsZXNzL01ha2VmaWxlOjE0OmNmZzgwMjExLSQoQ09ORklHX0NGRzgwMjExX1dFWFQpICYjNDM7PSB3ZXh0LWNvbXBhdC5vIHdleHQtc21lLm9cbm5ldC93aXJlbGVzcy9NYWtlZmlsZS0xNS1cbm5ldC93aXJlbGVzcy9NYWtlZmlsZT0xNj1DRkxBR1NfdHJhY2UubyA6PSAtSSQoc3JjKVxubmV0L3dpcmVsZXNzL01ha2VmaWxlLTE3LVxubmV0L3dpcmVsZXNzL01ha2VmaWxlOjE4OmNmZzgwMjExLSQoQ09ORklHX0NGRzgwMjExX1VTRV9LRVJORUxfUkVHREJfS0VZUykgJiM0Mzs9IHNoaXBwZWQtY2VydHMub1xubmV0L3dpcmVsZXNzL01ha2VmaWxlOjE5OmlmbmVxICgkKENPTkZJR19DRkc4MDIxMV9FWFRSQV9SRUdEQl9LRVlESVIpLClcbm5ldC93aXJlbGVzcy9NYWtlZmlsZS0yMC1jZmc4MDIxMS15ICYjNDM7PSBleHRyYS1jZXJ0cy5vXG4tLVxubmV0L3dpcmVsZXNzL01ha2VmaWxlPTIzPSQob2JqKS9zaGlwcGVkLWNlcnRzLmM6ICQoc29ydCAkKHdpbGRjYXJkICQoc3JjKS9jZXJ0cy8qLmhleCkpXG4tLVxubmV0L3dpcmVsZXNzL01ha2VmaWxlLTMxLVxubmV0L3dpcmVsZXNzL01ha2VmaWxlOjMyOiQob2JqKS9leHRyYS1jZXJ0cy5jOiAkKENPTkZJR19DRkc4MDIxMV9FWFRSQV9SRUdEQl9LRVlESVIpIFxcXG5uZXQvd2lyZWxlc3MvTWFrZWZpbGU6MzM6XHRcdCAgICAgICQoc29ydCAkKHdpbGRjYXJkICQoQ09ORklHX0NGRzgwMjExX0VYVFJBX1JFR0RCX0tFWURJUikvKi54NTA5KSlcbm5ldC93aXJlbGVzcy9NYWtlZmlsZS0zNC1cdEAkKGtlY2hvKSBcJiMzNDsgIEdFTiAgICAgJEBcJiMzNDtcbi0tXG5uZXQvd2lyZWxlc3MvY2hhbi5jPTEyMz1zdGF0aWMgY29uc3QgdTE2IHB1bmN0dXJpbmdfdmFsdWVzXzMyMG1oeltdID0ge1xuLS1cbm5ldC93aXJlbGVzcy9jaGFuLmMtMTI4LVxubmV0L3dpcmVsZXNzL2NoYW4uYzoxMjk6I2RlZmluZSBDRkc4MDIxMV9QRVJfQldfVkFMSURfUFVOQ1RVUklOR19WQUxVRVMoX2J3KSBcXFxubmV0L3dpcmVsZXNzL2NoYW4uYy0xMzAtXHR7IFxcXG4tLVxubmV0L3dpcmVsZXNzL2NoYW4uYz0xMzU9c3RhdGljIGNvbnN0IHN0cnVjdCBjZmc4MDIxMV9wZXJfYndfcHVuY3R1cmluZ192YWx1ZXMgcGVyX2J3X3B1bmN0dXJpbmdbXSA9IHtcbm5ldC93aXJlbGVzcy9jaGFuLmM6MTM2Olx0Q0ZHODAyMTFfUEVSX0JXX1ZBTElEX1BVTkNUVVJJTkdfVkFMVUVTKDgwKSxcbm5ldC93aXJlbGVzcy9jaGFuLmM6MTM3Olx0Q0ZHODAyMTFfUEVSX0JXX1ZBTElEX1BVTkNUVVJJTkdfVkFMVUVTKDE2MCksXG5uZXQvd2lyZWxlc3MvY2hhbi5jOjEzODpcdENGRzgwMjExX1BFUl9CV19WQUxJRF9QVU5DVFVSSU5HX1ZBTFVFUygzMjApXG5uZXQvd2lyZWxlc3MvY2hhbi5jLTEzOS19O1xuLS1cbm5ldC93aXJlbGVzcy9jaGFuLmM9MTY5NT1zdGF0aWMgYm9vbCBjZmc4MDIxMV9pcl9wZXJtaXNzaXZlX2NoYW4oc3RydWN0IHdpcGh5ICp3aXBoeSxcbi0tXG5uZXQvd2lyZWxlc3MvY2hhbi5jLTE3MDMtXG5uZXQvd2lyZWxlc3MvY2hhbi5jOjE3MDQ6XHRpZiAoIUlTX0VOQUJMRUQoQ09ORklHX0NGRzgwMjExX1JFR19SRUxBWF9OT19JUikgfHxcbm5ldC93aXJlbGVzcy9jaGFuLmMtMTcwNS1cdCAgICAhKHdpcGh5LVx1MDAzZXJlZ3VsYXRvcnlfZmxhZ3MgXHUwMDI2IFJFR1VMQVRPUllfRU5BQkxFX1JFTEFYX05PX0lSKSlcbi0tXG5uZXQvd2lyZWxlc3MvY29yZS5jPTU0OT1zdHJ1Y3Qgd2lwaHkgKndpcGh5X25ld19ubShjb25zdCBzdHJ1Y3QgY2ZnODAyMTFfb3BzICpvcHMsIGludCBzaXplb2ZfcHJpdixcbi0tXG5uZXQvd2lyZWxlc3MvY29yZS5jLTYzNi1cdFx0XHQgIGNmZzgwMjExX2Rmc19jaGFubmVsc191cGRhdGVfd29yayk7XG5uZXQvd2lyZWxlc3MvY29yZS5jOjYzNzojaWZkZWYgQ09ORklHX0NGRzgwMjExX1dFWFRcbm5ldC93aXJlbGVzcy9jb3JlLmMtNjM4LVx0cmRldi1cdTAwM2V3aXBoeS53ZXh0ID0gXHUwMDI2Y2ZnODAyMTFfd2V4dF9oYW5kbGVyO1xuLS1cbm5ldC93aXJlbGVzcy9jb3JlLmMtNjU4LVxubmV0L3dpcmVsZXNzL2NvcmUuYzo2NTk6I2lmZGVmIENPTkZJR19DRkc4MDIxMV9ERUZBVUxUX1BTXG5uZXQvd2lyZWxlc3MvY29yZS5jLTY2MC1cdHJkZXYtXHUwMDNld2lwaHkuZmxhZ3MgfD0gV0lQSFlfRkxBR19QU19PTl9CWV9ERUZBVUxUO1xuLS1cbm5ldC93aXJlbGVzcy9jb3JlLmM9ODUzPWludCB3aXBoeV9yZWdpc3RlcihzdHJ1Y3Qgd2lwaHkgKndpcGh5KVxuLS1cbm5ldC93aXJlbGVzcy9jb3JlLmMtMTEyMi1cdGVsc2UgaWYgKHdpcGh5LVx1MDAzZW1heF9udW1fYWttX3N1aXRlcyBcdTAwM2MgTkw4MDIxMV9NQVhfTlJfQUtNX1NVSVRFUyB8fFxubmV0L3dpcmVsZXNzL2NvcmUuYzoxMTIzOlx0XHQgd2lwaHktXHUwMDNlbWF4X251bV9ha21fc3VpdGVzIFx1MDAzZSBDRkc4MDIxMV9NQVhfTlVNX0FLTV9TVUlURVMpXG5uZXQvd2lyZWxlc3MvY29yZS5jLTExMjQtXHRcdHJldHVybiAtRUlOVkFMO1xuLS1cbm5ldC93aXJlbGVzcy9jb3JlLmM9MTQwOD1zdGF0aWMgdm9pZCBfY2ZnODAyMTFfdW5yZWdpc3Rlcl93ZGV2KHN0cnVjdCB3aXJlbGVzc19kZXYgKndkZXYsXG4tLVxubmV0L3dpcmVsZXNzL2NvcmUuYy0xNDQ4LVxubmV0L3dpcmVsZXNzL2NvcmUuYzoxNDQ5OiNpZmRlZiBDT05GSUdfQ0ZHODAyMTFfV0VYVFxubmV0L3dpcmVsZXNzL2NvcmUuYy0xNDUwLVx0a2ZyZWVfc2Vuc2l0aXZlKHdkZXYtXHUwMDNld2V4dC5rZXlzKTtcbi0tXG5uZXQvd2lyZWxlc3MvY29yZS5jPTE1MDM9dm9pZCBjZmc4MDIxMV9sZWF2ZV9sb2NrZWQoc3RydWN0IGNmZzgwMjExX3JlZ2lzdGVyZWRfZGV2aWNlICpyZGV2LFxuLS1cbm5ldC93aXJlbGVzcy9jb3JlLmMtMTUyNy1cbm5ldC93aXJlbGVzcy9jb3JlLmM6MTUyODojaWZkZWYgQ09ORklHX0NGRzgwMjExX1dFWFRcbm5ldC93aXJlbGVzcy9jb3JlLmMtMTUyOS1cdFx0a2ZyZWUod2Rldi1cdTAwM2V3ZXh0LmllKTtcbi0tXG5uZXQvd2lyZWxlc3MvY29yZS5jPTE2MTQ9dm9pZCBjZmc4MDIxMV9pbml0X3dkZXYoc3RydWN0IHdpcmVsZXNzX2RldiAqd2Rldilcbi0tXG5uZXQvd2lyZWxlc3MvY29yZS5jLTE2MjItXG5uZXQvd2lyZWxlc3MvY29yZS5jOjE2MjM6I2lmZGVmIENPTkZJR19DRkc4MDIxMV9XRVhUXG5uZXQvd2lyZWxlc3MvY29yZS5jLTE2MjQtXHR3ZGV2LVx1MDAzZXdleHQuZGVmYXVsdF9rZXkgPSAtMTtcbi0tXG5uZXQvd2lyZWxlc3MvY29yZS5jPTE3MDc9c3RhdGljIGludCBjZmc4MDIxMV9uZXRkZXZfbm90aWZpZXJfY2FsbChzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgKm5iLFxuLS1cbm5ldC93aXJlbGVzcy9jb3JlLmMtMTc4MS1cdFx0c3dpdGNoICh3ZGV2LVx1MDAzZWlmdHlwZSkge1xubmV0L3dpcmVsZXNzL2NvcmUuYzoxNzgyOiNpZmRlZiBDT05GSUdfQ0ZHODAyMTFfV0VYVFxubmV0L3dpcmVsZXNzL2NvcmUuYy0xNzgzLVx0XHRjYXNlIE5MODAyMTFfSUZUWVBFX0FESE9DOlxuLS1cbm5ldC93aXJlbGVzcy9jb3JlLmg9NTc0PWNmZzgwMjExX2dldF82Z2h6X3Bvd2VyX3R5cGUoY29uc3QgdTggKmVsZW1zLCBzaXplX3QgZWxlbXNfbGVuLFxuLS1cbm5ldC93aXJlbGVzcy9jb3JlLmgtNTc2LVxubmV0L3dpcmVsZXNzL2NvcmUuaDo1Nzc6I2lmZGVmIENPTkZJR19DRkc4MDIxMV9ERVZFTE9QRVJfV0FSTklOR1Ncbm5ldC93aXJlbGVzcy9jb3JlLmg6NTc4OiNkZWZpbmUgQ0ZHODAyMTFfREVWX1dBUk5fT04oY29uZClcdFdBUk5fT04oY29uZClcbm5ldC93aXJlbGVzcy9jb3JlLmgtNTc5LSNlbHNlXG4tLVxubmV0L3dpcmVsZXNzL2NvcmUuaC01ODQtICovXG5uZXQvd2lyZWxlc3MvY29yZS5oOjU4NTojZGVmaW5lIENGRzgwMjExX0RFVl9XQVJOX09OKGNvbmQpXHQoe2Jvb2wgX19yID0gKGNvbmQpOyBfX3I7IH0pXG5uZXQvd2lyZWxlc3MvY29yZS5oLTU4Ni0jZW5kaWZcbi0tXG5uZXQvd2lyZWxlc3MvY29yZS5oPTYyND1zdHJ1Y3QgY2ZnODAyMTFfY29sb2NhdGVkX2FwIHtcbi0tXG5uZXQvd2lyZWxlc3MvY29yZS5oLTY0MC1cbm5ldC93aXJlbGVzcy9jb3JlLmg6NjQxOiNpZiBJU19FTkFCTEVEKENPTkZJR19DRkc4MDIxMV9LVU5JVF9URVNUKVxubmV0L3dpcmVsZXNzL2NvcmUuaDo2NDI6I2RlZmluZSBFWFBPUlRfU1lNQk9MX0lGX0NGRzgwMjExX0tVTklUKHN5bSkgRVhQT1JUX1NZTUJPTF9JRl9LVU5JVChzeW0pXG5uZXQvd2lyZWxlc3MvY29yZS5oOjY0MzojZGVmaW5lIFZJU0lCTEVfSUZfQ0ZHODAyMTFfS1VOSVRcbm5ldC93aXJlbGVzcy9jb3JlLmgtNjQ0LXZvaWQgY2ZnODAyMTFfZnJlZV9jb2xvY19hcF9saXN0KHN0cnVjdCBsaXN0X2hlYWQgKmNvbG9jX2FwX2xpc3QpO1xuLS1cbm5ldC93aXJlbGVzcy9jb3JlLmg9NjQ5PXNpemVfdCBjZmc4MDIxMV9nZW5fbmV3X2llKGNvbnN0IHU4ICppZSwgc2l6ZV90IGllbGVuLFxuLS1cbm5ldC93aXJlbGVzcy9jb3JlLmgtNjUyLSNlbHNlXG5uZXQvd2lyZWxlc3MvY29yZS5oOjY1MzojZGVmaW5lIEVYUE9SVF9TWU1CT0xfSUZfQ0ZHODAyMTFfS1VOSVQoc3ltKVxubmV0L3dpcmVsZXNzL2NvcmUuaDo2NTQ6I2RlZmluZSBWSVNJQkxFX0lGX0NGRzgwMjExX0tVTklUIHN0YXRpY1xubmV0L3dpcmVsZXNzL2NvcmUuaDo2NTU6I2VuZGlmIC8qIElTX0VOQUJMRUQoQ09ORklHX0NGRzgwMjExX0tVTklUX1RFU1QpICovXG5uZXQvd2lyZWxlc3MvY29yZS5oLTY1Ni1cbi0tXG5uZXQvd2lyZWxlc3MvZGVidWdmcy5oLTEtLyogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAgKi9cbm5ldC93aXJlbGVzcy9kZWJ1Z2ZzLmg6MjojaWZuZGVmIF9fQ0ZHODAyMTFfREVCVUdGU19IXG5uZXQvd2lyZWxlc3MvZGVidWdmcy5oOjM6I2RlZmluZSBfX0NGRzgwMjExX0RFQlVHRlNfSFxubmV0L3dpcmVsZXNzL2RlYnVnZnMuaC00LVxubmV0L3dpcmVsZXNzL2RlYnVnZnMuaDo1OiNpZmRlZiBDT05GSUdfQ0ZHODAyMTFfREVCVUdGU1xubmV0L3dpcmVsZXNzL2RlYnVnZnMuaC02LXZvaWQgY2ZnODAyMTFfZGVidWdmc19yZGV2X2FkZChzdHJ1Y3QgY2ZnODAyMTFfcmVnaXN0ZXJlZF9kZXZpY2UgKnJkZXYpO1xuLS1cbm5ldC93aXJlbGVzcy9kZWJ1Z2ZzLmg9OT12b2lkIGNmZzgwMjExX2RlYnVnZnNfcmRldl9hZGQoc3RydWN0IGNmZzgwMjExX3JlZ2lzdGVyZWRfZGV2aWNlICpyZGV2KSB7fVxuLS1cbm5ldC93aXJlbGVzcy9kZWJ1Z2ZzLmgtMTEtXG5uZXQvd2lyZWxlc3MvZGVidWdmcy5oOjEyOiNlbmRpZiAvKiBfX0NGRzgwMjExX0RFQlVHRlNfSCAqL1xuLS1cbm5ldC93aXJlbGVzcy9pYnNzLmM9MTk9dm9pZCBfX2NmZzgwMjExX2lic3Nfam9pbmVkKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGNvbnN0IHU4ICpic3NpZCxcbi0tXG5uZXQvd2lyZWxlc3MvaWJzcy5jLTIzLVx0c3RydWN0IGNmZzgwMjExX2JzcyAqYnNzO1xubmV0L3dpcmVsZXNzL2lic3MuYzoyNDojaWZkZWYgQ09ORklHX0NGRzgwMjExX1dFWFRcbm5ldC93aXJlbGVzcy9pYnNzLmMtMjUtXHR1bmlvbiBpd3JlcV9kYXRhIHdycXU7XG4tLVxubmV0L3dpcmVsZXNzL2lic3MuYy01MS1cdFx0XHRcdEdGUF9LRVJORUwpO1xubmV0L3dpcmVsZXNzL2lic3MuYzo1MjojaWZkZWYgQ09ORklHX0NGRzgwMjExX1dFWFRcbm5ldC93aXJlbGVzcy9pYnNzLmMtNTMtXHRtZW1zZXQoXHUwMDI2d3JxdSwgMCwgc2l6ZW9mKHdycXUpKTtcbi0tXG5uZXQvd2lyZWxlc3MvaWJzcy5jPTg3PWludCBfX2NmZzgwMjExX2pvaW5faWJzcyhzdHJ1Y3QgY2ZnODAyMTFfcmVnaXN0ZXJlZF9kZXZpY2UgKnJkZXYsXG4tLVxubmV0L3dpcmVsZXNzL2lic3MuYy0xNDAtXG5uZXQvd2lyZWxlc3MvaWJzcy5jOjE0MTojaWZkZWYgQ09ORklHX0NGRzgwMjExX1dFWFRcbm5ldC93aXJlbGVzcy9pYnNzLmMtMTQyLVx0d2Rldi1cdTAwM2V3ZXh0Lmlic3MuY2hhbmRlZiA9IHBhcmFtcy1cdTAwM2VjaGFuZGVmO1xuLS1cbm5ldC93aXJlbGVzcy9pYnNzLmM9MTU2PXZvaWQgY2ZnODAyMTFfY2xlYXJfaWJzcyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBib29sIG5vd2V4dClcbi0tXG5uZXQvd2lyZWxlc3MvaWJzcy5jLTE4NC1cdG1lbXNldChcdTAwMjZ3ZGV2LVx1MDAzZXUuaWJzcy5jaGFuZGVmLCAwLCBzaXplb2Yod2Rldi1cdTAwM2V1Lmlic3MuY2hhbmRlZikpO1xubmV0L3dpcmVsZXNzL2lic3MuYzoxODU6I2lmZGVmIENPTkZJR19DRkc4MDIxMV9XRVhUXG5uZXQvd2lyZWxlc3MvaWJzcy5jLTE4Ni1cdGlmICghbm93ZXh0KVxuLS1cbm5ldC93aXJlbGVzcy9pYnNzLmM9MTkyPWludCBjZmc4MDIxMV9sZWF2ZV9pYnNzKHN0cnVjdCBjZmc4MDIxMV9yZWdpc3RlcmVkX2RldmljZSAqcmRldixcbi0tXG5uZXQvd2lyZWxlc3MvaWJzcy5jLTIxMy1cbm5ldC93aXJlbGVzcy9pYnNzLmM6MjE0OiNpZmRlZiBDT05GSUdfQ0ZHODAyMTFfV0VYVFxubmV0L3dpcmVsZXNzL2lic3MuYy0yMTUtaW50IGNmZzgwMjExX2lic3Nfd2V4dF9qb2luKHN0cnVjdCBjZmc4MDIxMV9yZWdpc3RlcmVkX2RldmljZSAqcmRldixcbi0tXG5uZXQvd2lyZWxlc3MvbWxtZS5jPTI3Nz12b2lkIGNmZzgwMjExX21pY2hhZWxfbWljX2ZhaWx1cmUoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgY29uc3QgdTggKmFkZHIsXG4tLVxubmV0L3dpcmVsZXNzL21sbWUuYy0yODItXHRzdHJ1Y3QgY2ZnODAyMTFfcmVnaXN0ZXJlZF9kZXZpY2UgKnJkZXYgPSB3aXBoeV90b19yZGV2KHdpcGh5KTtcbm5ldC93aXJlbGVzcy9tbG1lLmM6MjgzOiNpZmRlZiBDT05GSUdfQ0ZHODAyMTFfV0VYVFxubmV0L3dpcmVsZXNzL21sbWUuYy0yODQtXHR1bmlvbiBpd3JlcV9kYXRhIHdycXU7XG4tLVxubmV0L3dpcmVsZXNzL25sODAyMTEuYz02NjY9bmw4MDIxMV9uYW5fcGVlcl9tYXBfcG9saWN5W05MODAyMTFfTkFOX1BFRVJfTUFQX0FUVFJfTUFYICYjNDM7IDFdID0ge1xuLS1cbm5ldC93aXJlbGVzcy9ubDgwMjExLmMtNjY4LVx0W05MODAyMTFfTkFOX1BFRVJfTUFQX0FUVFJfVElNRV9TTE9UU10gPVxubmV0L3dpcmVsZXNzL25sODAyMTEuYzo2Njk6XHRcdE5MQV9QT0xJQ1lfRVhBQ1RfTEVOKENGRzgwMjExX05BTl9TQ0hFRF9OVU1fVElNRV9TTE9UUyksXG5uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jLTY3MC19O1xuLS1cbm5ldC93aXJlbGVzcy9ubDgwMjExLmM9NzAwPXN0YXRpYyBjb25zdCBzdHJ1Y3QgbmxhX3BvbGljeSBubDgwMjExX3BvbGljeVtOVU1fTkw4MDIxMV9BVFRSXSA9IHtcbi0tXG5uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jLTEwODItXHRbTkw4MDIxMV9BVFRSX05BTl9USU1FX1NMT1RTXSA9XG5uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jOjEwODM6XHRcdE5MQV9QT0xJQ1lfRVhBQ1RfTEVOKENGRzgwMjExX05BTl9TQ0hFRF9OVU1fVElNRV9TTE9UUyksXG5uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jLTEwODQtXHRbTkw4MDIxMV9BVFRSX05BTl9BVkFJTF9CTE9CXSA9XG4tLVxubmV0L3dpcmVsZXNzL25sODAyMTEuYz01NDY2PXN0YXRpYyBpbnQgbmw4MDIxMV9zZXRfa2V5KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pXG4tLVxubmV0L3dpcmVsZXNzL25sODAyMTEuYy01NTA4LVxubmV0L3dpcmVsZXNzL25sODAyMTEuYzo1NTA5OiNpZmRlZiBDT05GSUdfQ0ZHODAyMTFfV0VYVFxubmV0L3dpcmVsZXNzL25sODAyMTEuYy01NTEwLVx0XHR3ZGV2LVx1MDAzZXdleHQuZGVmYXVsdF9rZXkgPSBrZXkuaWR4O1xuLS1cbm5ldC93aXJlbGVzcy9ubDgwMjExLmMtNTUzMS1cbm5ldC93aXJlbGVzcy9ubDgwMjExLmM6NTUzMjojaWZkZWYgQ09ORklHX0NGRzgwMjExX1dFWFRcbm5ldC93aXJlbGVzcy9ubDgwMjExLmMtNTUzMy1cdFx0d2Rldi1cdTAwM2V3ZXh0LmRlZmF1bHRfbWdtdF9rZXkgPSBrZXkuaWR4O1xuLS1cbm5ldC93aXJlbGVzcy9ubDgwMjExLmM9NTY0ND1zdGF0aWMgaW50IG5sODAyMTFfZGVsX2tleShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKVxuLS1cbm5ldC93aXJlbGVzcy9ubDgwMjExLmMtNTY5MC1cbm5ldC93aXJlbGVzcy9ubDgwMjExLmM6NTY5MTojaWZkZWYgQ09ORklHX0NGRzgwMjExX1dFWFRcbm5ldC93aXJlbGVzcy9ubDgwMjExLmMtNTY5Mi1cdGlmICghZXJyKSB7XG4tLVxubmV0L3dpcmVsZXNzL25sODAyMTEuYz03ODY3PXN0YXRpYyBpbnQgbmw4MDIxMV9maWxsX2xpbmtfc3RhdGlvbihzdHJ1Y3Qgc2tfYnVmZiAqbXNnLFxuLS1cbm5ldC93aXJlbGVzcy9ubDgwMjExLmMtNzkxNC1cdHN3aXRjaCAocmRldi1cdTAwM2V3aXBoeS5zaWduYWxfdHlwZSkge1xubmV0L3dpcmVsZXNzL25sODAyMTEuYzo3OTE1Olx0Y2FzZSBDRkc4MDIxMV9TSUdOQUxfVFlQRV9NQk06XG5uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jLTc5MTYtXHRcdFBVVF9MSU5LX1NJTkZPKFNJR05BTCwgc2lnbmFsLCB1OCk7XG4tLVxubmV0L3dpcmVsZXNzL25sODAyMTEuYz04MDQ1PXN0YXRpYyBpbnQgbmw4MDIxMV9wdXRfc3RhX2luZm9fY29tbW9uKHN0cnVjdCBza19idWZmICptc2csXG4tLVxubmV0L3dpcmVsZXNzL25sODAyMTEuYy04MDk0LVx0c3dpdGNoIChyZGV2LVx1MDAzZXdpcGh5LnNpZ25hbF90eXBlKSB7XG5uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jOjgwOTU6XHRjYXNlIENGRzgwMjExX1NJR05BTF9UWVBFX01CTTpcbm5ldC93aXJlbGVzcy9ubDgwMjExLmMtODA5Ni1cdFx0UFVUX1NJTkZPKFNJR05BTCwgc2lnbmFsLCB1OCk7XG4tLVxubmV0L3dpcmVsZXNzL25sODAyMTEuYz04NzkwPWludCBjZmc4MDIxMV9jaGVja19zdGF0aW9uX2NoYW5nZShzdHJ1Y3Qgd2lwaHkgKndpcGh5LFxuLS1cbm5ldC93aXJlbGVzcy9ubDgwMjExLmMtODc5NC1cdGlmIChwYXJhbXMtXHUwMDNlbGlzdGVuX2ludGVydmFsICE9IC0xIFx1MDAyNlx1MDAyNlxubmV0L3dpcmVsZXNzL25sODAyMTEuYzo4Nzk1Olx0ICAgIHN0YXR5cGUgIT0gQ0ZHODAyMTFfU1RBX0FQX0NMSUVOVF9VTkFTU09DKVxubmV0L3dpcmVsZXNzL25sODAyMTEuYy04Nzk2LVx0XHRyZXR1cm4gLUVJTlZBTDtcbi0tXG5uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jLTg3OTgtXHRpZiAocGFyYW1zLVx1MDAzZXN1cHBvcnRfcDJwX3BzICE9IC0xIFx1MDAyNlx1MDAyNlxubmV0L3dpcmVsZXNzL25sODAyMTEuYzo4Nzk5Olx0ICAgIHN0YXR5cGUgIT0gQ0ZHODAyMTFfU1RBX0FQX0NMSUVOVF9VTkFTU09DKVxubmV0L3dpcmVsZXNzL25sODAyMTEuYy04ODAwLVx0XHRyZXR1cm4gLUVJTlZBTDtcbi0tXG5uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jLTg4MDMtXHQgICAgIShwYXJhbXMtXHUwMDNlc3RhX2ZsYWdzX3NldCBcdTAwMjYgQklUKE5MODAyMTFfU1RBX0ZMQUdfVERMU19QRUVSKSkgXHUwMDI2XHUwMDI2XG5uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jOjg4MDQ6XHQgICAgc3RhdHlwZSAhPSBDRkc4MDIxMV9TVEFfQVBfQ0xJRU5UX1VOQVNTT0MpXG5uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jLTg4MDUtXHRcdHJldHVybiAtRUlOVkFMO1xuLS1cbm5ldC93aXJlbGVzcy9ubDgwMjExLmMtODgxMC1cdHN3aXRjaCAoc3RhdHlwZSkge1xubmV0L3dpcmVsZXNzL25sODAyMTEuYzo4ODExOlx0Y2FzZSBDRkc4MDIxMV9TVEFfTUVTSF9QRUVSX0tFUk5FTDpcbm5ldC93aXJlbGVzcy9ubDgwMjExLmM6ODgxMjpcdGNhc2UgQ0ZHODAyMTFfU1RBX01FU0hfUEVFUl9VU0VSOlxubmV0L3dpcmVsZXNzL25sODAyMTEuYy04ODEzLVx0XHQvKlxuLS1cbm5ldC93aXJlbGVzcy9ubDgwMjExLmMtODgyMy1cdFx0YnJlYWs7XG5uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jOjg4MjQ6XHRjYXNlIENGRzgwMjExX1NUQV9URExTX1BFRVJfU0VUVVA6XG5uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jOjg4MjU6XHRjYXNlIENGRzgwMjExX1NUQV9URExTX1BFRVJfQUNUSVZFOlxubmV0L3dpcmVsZXNzL25sODAyMTEuYy04ODI2LVx0XHRpZiAoIShwYXJhbXMtXHUwMDNlc3RhX2ZsYWdzX3NldCBcdTAwMjYgQklUKE5MODAyMTFfU1RBX0ZMQUdfVERMU19QRUVSKSkpXG4tLVxubmV0L3dpcmVsZXNzL25sODAyMTEuYy04ODQwLVxubmV0L3dpcmVsZXNzL25sODAyMTEuYzo4ODQxOlx0aWYgKHN0YXR5cGUgIT0gQ0ZHODAyMTFfU1RBX1RETFNfUEVFUl9TRVRVUCBcdTAwMjZcdTAwMjZcbm5ldC93aXJlbGVzcy9ubDgwMjExLmM6ODg0MjpcdCAgICBzdGF0eXBlICE9IENGRzgwMjExX1NUQV9URExTX1BFRVJfQUNUSVZFKSB7XG5uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jLTg4NDMtXHRcdC8qIFRETFMgY2FuJiMzOTt0IGJlIHNldCwgLi4uICovXG4tLVxubmV0L3dpcmVsZXNzL25sODAyMTEuYy04ODUzLVxubmV0L3dpcmVsZXNzL25sODAyMTEuYzo4ODU0Olx0aWYgKHN0YXR5cGUgIT0gQ0ZHODAyMTFfU1RBX1RETFNfUEVFUl9TRVRVUCBcdTAwMjZcdTAwMjZcbm5ldC93aXJlbGVzcy9ubDgwMjExLmM6ODg1NTpcdCAgICBzdGF0eXBlICE9IENGRzgwMjExX1NUQV9BUF9DTElFTlRfVU5BU1NPQykge1xubmV0L3dpcmVsZXNzL25sODAyMTEuYy04ODU2LVx0XHQvKiByZWplY3Qgb3RoZXIgdGhpbmdzIHRoYXQgY2FuJiMzOTt0IGNoYW5nZSAqL1xuLS1cbm5ldC93aXJlbGVzcy9ubDgwMjExLmMtODg2Mi1cdFx0XHRyZXR1cm4gLUVJTlZBTDtcbm5ldC93aXJlbGVzcy9ubDgwMjExLmM6ODg2MzpcdFx0aWYgKHN0YXR5cGUgIT0gQ0ZHODAyMTFfU1RBX05BTl9NR01UIFx1MDAyNlx1MDAyNlxubmV0L3dpcmVsZXNzL25sODAyMTEuYy04ODY0LVx0XHQgICAgKHBhcmFtcy1cdTAwM2VsaW5rX3N0YV9wYXJhbXMuaHRfY2FwYSB8fFxuLS1cbm5ldC93aXJlbGVzcy9ubDgwMjExLmMtODg3NC1cbm5ldC93aXJlbGVzcy9ubDgwMjExLmM6ODg3NTpcdGlmIChzdGF0eXBlICE9IENGRzgwMjExX1NUQV9BUF9DTElFTlQgXHUwMDI2XHUwMDI2XG5uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jOjg4NzY6XHQgICAgc3RhdHlwZSAhPSBDRkc4MDIxMV9TVEFfQVBfQ0xJRU5UX1VOQVNTT0MpIHtcbm5ldC93aXJlbGVzcy9ubDgwMjExLmMtODg3Ny1cdFx0aWYgKHBhcmFtcy1cdTAwM2V2bGFuKVxuLS1cbm5ldC93aXJlbGVzcy9ubDgwMjExLmMtODg4MS1cdC8qIEFjY2VwdCBFTUxTUiBjYXBhYmlsaXRpZXMgb25seSBmb3IgQVAgY2xpZW50IGJlZm9yZSBhc3NvY2lhdGlvbiAqL1xubmV0L3dpcmVsZXNzL25sODAyMTEuYzo4ODgyOlx0aWYgKHN0YXR5cGUgIT0gQ0ZHODAyMTFfU1RBX0FQX0NMSUVOVF9VTkFTU09DIFx1MDAyNlx1MDAyNlxubmV0L3dpcmVsZXNzL25sODAyMTEuYy04ODgzLVx0ICAgIHBhcmFtcy1cdTAwM2VlbWxfY2FwX3ByZXNlbnQpXG4tLVxubmV0L3dpcmVsZXNzL25sODAyMTEuYy04ODg2LVx0c3dpdGNoIChzdGF0eXBlKSB7XG5uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jOjg4ODc6XHRjYXNlIENGRzgwMjExX1NUQV9BUF9NTE1FX0NMSUVOVDpcbm5ldC93aXJlbGVzcy9ubDgwMjExLmMtODg4OC1cdFx0LyogVXNlIHRoaXMgb25seSBmb3IgYXV0aG9yaXppbmcvdW5hdXRob3JpemluZyBhIHN0YXRpb24gKi9cbi0tXG5uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jLTg4OTEtXHRcdGJyZWFrO1xubmV0L3dpcmVsZXNzL25sODAyMTEuYzo4ODkyOlx0Y2FzZSBDRkc4MDIxMV9TVEFfQVBfQ0xJRU5UOlxubmV0L3dpcmVsZXNzL25sODAyMTEuYzo4ODkzOlx0Y2FzZSBDRkc4MDIxMV9TVEFfQVBfQ0xJRU5UX1VOQVNTT0M6XG5uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jLTg4OTQtXHRcdC8qIGFjY2VwdCBvbmx5IHRoZSBsaXN0ZWQgYml0cyAqL1xuLS1cbm5ldC93aXJlbGVzcy9ubDgwMjExLmMtODkxMS1cdFx0YnJlYWs7XG5uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jOjg5MTI6XHRjYXNlIENGRzgwMjExX1NUQV9JQlNTOlxubmV0L3dpcmVsZXNzL25sODAyMTEuYzo4OTEzOlx0Y2FzZSBDRkc4MDIxMV9TVEFfQVBfU1RBOlxubmV0L3dpcmVsZXNzL25sODAyMTEuYy04OTE0LVx0XHQvKiByZWplY3QgYW55IGNoYW5nZXMgb3RoZXIgdGhhbiBBVVRIT1JJWkVEICovXG4tLVxubmV0L3dpcmVsZXNzL25sODAyMTEuYy04OTE3LVx0XHRicmVhaztcbm5ldC93aXJlbGVzcy9ubDgwMjExLmM6ODkxODpcdGNhc2UgQ0ZHODAyMTFfU1RBX1RETFNfUEVFUl9TRVRVUDpcbm5ldC93aXJlbGVzcy9ubDgwMjExLmMtODkxOS1cdFx0LyogcmVqZWN0IGFueSBjaGFuZ2VzIG90aGVyIHRoYW4gQVVUSE9SSVpFRCBvciBXTUUgKi9cbi0tXG5uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jLTg5MjctXHRcdGJyZWFrO1xubmV0L3dpcmVsZXNzL25sODAyMTEuYzo4OTI4Olx0Y2FzZSBDRkc4MDIxMV9TVEFfVERMU19QRUVSX0FDVElWRTpcbm5ldC93aXJlbGVzcy9ubDgwMjExLmMtODkyOS1cdFx0LyogcmVqZWN0IGFueSBjaGFuZ2VzICovXG5uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jLTg5MzAtXHRcdHJldHVybiAtRUlOVkFMO1xubmV0L3dpcmVsZXNzL25sODAyMTEuYzo4OTMxOlx0Y2FzZSBDRkc4MDIxMV9TVEFfTUVTSF9QRUVSX0tFUk5FTDpcbm5ldC93aXJlbGVzcy9ubDgwMjExLmMtODkzMi1cdFx0aWYgKHBhcmFtcy1cdTAwM2VzdGFfbW9kaWZ5X21hc2sgXHUwMDI2IFNUQVRJT05fUEFSQU1fQVBQTFlfUExJTktfU1RBVEUpXG4tLVxubmV0L3dpcmVsZXNzL25sODAyMTEuYy04OTM0LVx0XHRicmVhaztcbm5ldC93aXJlbGVzcy9ubDgwMjExLmM6ODkzNTpcdGNhc2UgQ0ZHODAyMTFfU1RBX01FU0hfUEVFUl9VU0VSOlxubmV0L3dpcmVsZXNzL25sODAyMTEuYy04OTM2LVx0XHRpZiAocGFyYW1zLVx1MDAzZXBsaW5rX2FjdGlvbiAhPSBOTDgwMjExX1BMSU5LX0FDVElPTl9OT19BQ1RJT04gXHUwMDI2XHUwMDI2XG4tLVxubmV0L3dpcmVsZXNzL25sODAyMTEuYy04OTM5LVx0XHRicmVhaztcbm5ldC93aXJlbGVzcy9ubDgwMjExLmM6ODk0MDpcdGNhc2UgQ0ZHODAyMTFfU1RBX05BTl9NR01UOlxubmV0L3dpcmVsZXNzL25sODAyMTEuYy04OTQxLVx0XHRpZiAocGFyYW1zLVx1MDAzZXN0YV9mbGFnc19tYXNrIFx1MDAyNlxuLS1cbm5ldC93aXJlbGVzcy9ubDgwMjExLmMtODk0NS1cdFx0YnJlYWs7XG5uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jOjg5NDY6XHRjYXNlIENGRzgwMjExX1NUQV9OQU5fREFUQTpcbm5ldC93aXJlbGVzcy9ubDgwMjExLmMtODk0Ny1cdFx0aWYgKHBhcmFtcy1cdTAwM2VzdGFfZmxhZ3NfbWFzayBcdTAwMjZcbi0tXG5uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jLTg5NTktXHQgKi9cbm5ldC93aXJlbGVzcy9ubDgwMjExLmM6ODk2MDpcdGlmIChzdGF0eXBlICE9IENGRzgwMjExX1NUQV9BUF9DTElFTlRfVU5BU1NPQyBcdTAwMjZcdTAwMjZcbm5ldC93aXJlbGVzcy9ubDgwMjExLmM6ODk2MTpcdCAgICBzdGF0eXBlICE9IENGRzgwMjExX1NUQV9URExTX1BFRVJfU0VUVVApXG5uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jLTg5NjItXHRcdHBhcmFtcy1cdTAwM2VsaW5rX3N0YV9wYXJhbXMub3Btb2RlX25vdGlmX3VzZWQgPSBmYWxzZTtcbi0tXG5uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jPTEwODA0PXN0YXRpYyBpbnQgbmw4MDIxMV9nZXRfcmVnX2R1bXAoc3RydWN0IHNrX2J1ZmYgKnNrYixcbi0tXG5uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jLTEwODQ1LVxubmV0L3dpcmVsZXNzL25sODAyMTEuYzoxMDg0NjojaWZkZWYgQ09ORklHX0NGRzgwMjExX0NSREFfU1VQUE9SVFxubmV0L3dpcmVsZXNzL25sODAyMTEuYy0xMDg0Ny1zdGF0aWMgY29uc3Qgc3RydWN0IG5sYV9wb2xpY3kgcmVnX3J1bGVfcG9saWN5W05MODAyMTFfUkVHX1JVTEVfQVRUUl9NQVggJiM0MzsgMV0gPSB7XG4tLVxubmV0L3dpcmVsZXNzL25sODAyMTEuYz0xMDg5Nz1zdGF0aWMgaW50IG5sODAyMTFfc2V0X3JlZyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKVxuLS1cbm5ldC93aXJlbGVzcy9ubDgwMjExLmMtMTA5NzUtfVxubmV0L3dpcmVsZXNzL25sODAyMTEuYzoxMDk3NjojZW5kaWYgLyogQ09ORklHX0NGRzgwMjExX0NSREFfU1VQUE9SVCAqL1xubmV0L3dpcmVsZXNzL25sODAyMTEuYy0xMDk3Ny1cbi0tXG5uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jPTEyMzk5PXN0YXRpYyBpbnQgbmw4MDIxMV9zZW5kX2JzcyhzdHJ1Y3Qgc2tfYnVmZiAqbXNnLCBzdHJ1Y3QgbmV0bGlua19jYWxsYmFjayAqY2IsXG4tLVxubmV0L3dpcmVsZXNzL25sODAyMTEuYy0xMjQ5Ni1cdFx0c3dpdGNoIChyZGV2LVx1MDAzZXdpcGh5LnNpZ25hbF90eXBlKSB7XG5uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jOjEyNDk3Olx0XHRjYXNlIENGRzgwMjExX1NJR05BTF9UWVBFX01CTTpcbm5ldC93aXJlbGVzcy9ubDgwMjExLmMtMTI0OTgtXHRcdFx0aWYgKG5sYV9wdXRfdTMyKG1zZywgTkw4MDIxMV9CU1NfU0lHTkFMX01CTSxcbi0tXG5uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jLTEyNTAxLVx0XHRcdGJyZWFrO1xubmV0L3dpcmVsZXNzL25sODAyMTEuYzoxMjUwMjpcdFx0Y2FzZSBDRkc4MDIxMV9TSUdOQUxfVFlQRV9VTlNQRUM6XG5uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jLTEyNTAzLVx0XHRcdGlmIChubGFfcHV0X3U4KG1zZywgTkw4MDIxMV9CU1NfU0lHTkFMX1VOU1BFQyxcbi0tXG5uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jPTE2NTQzPXN0YXRpYyBpbnQgbmw4MDIxMV9wYXJzZV9uYW5fY29uZihzdHJ1Y3Qgd2lwaHkgKndpcGh5LFxuLS1cbm5ldC93aXJlbGVzcy9ubDgwMjExLmMtMTY1NTctXG5uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jOjE2NTU4Olx0XHRjaGFuZ2VkIHw9IENGRzgwMjExX05BTl9DT05GX0NIQU5HRURfUFJFRjtcbm5ldC93aXJlbGVzcy9ubDgwMjExLmMtMTY1NTktXHR9XG4tLVxubmV0L3dpcmVsZXNzL25sODAyMTEuYy0xNjU3MC1cdFx0Y29uZi1cdTAwM2ViYW5kcyA9IGJhbmRzO1xubmV0L3dpcmVsZXNzL25sODAyMTEuYzoxNjU3MTpcdFx0Y2hhbmdlZCB8PSBDRkc4MDIxMV9OQU5fQ09ORl9DSEFOR0VEX0JBTkRTO1xubmV0L3dpcmVsZXNzL25sODAyMTEuYy0xNjU3Mi1cdH1cbi0tXG5uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jLTE2NTkyLVxubmV0L3dpcmVsZXNzL25sODAyMTEuYzoxNjU5MzpcdGNoYW5nZWQgfD0gQ0ZHODAyMTFfTkFOX0NPTkZfQ0hBTkdFRF9DT05GSUc7XG5uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jLTE2NTk0LVx0aWYgKGF0dHJzW05MODAyMTFfTkFOX0NPTkZfQ0xVU1RFUl9JRF0gXHUwMDI2XHUwMDI2IHN0YXJ0KSB7XG4tLVxubmV0L3dpcmVsZXNzL25sODAyMTEuYz0xNzQwND1ubDgwMjExX3BhcnNlX25hbl9zY2hlZHVsZShzdHJ1Y3QgZ2VubF9pbmZvICppbmZvLCBzdHJ1Y3QgbmxhdHRyICpzbG90c19hdHRyLFxubmV0L3dpcmVsZXNzL25sODAyMTEuYzoxNzQwNTpcdFx0XHQgICB1OCBzY2hlZHVsZVtDRkc4MDIxMV9OQU5fU0NIRURfTlVNX1RJTUVfU0xPVFNdLFxubmV0L3dpcmVsZXNzL25sODAyMTEuYy0xNzQwNi1cdFx0XHQgICB1OCBuX2NoYW5uZWxzKVxubmV0L3dpcmVsZXNzL25sODAyMTEuYy0xNzQwNy17XG5uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jOjE3NDA4Olx0aWYgKFdBUk5fT04obmxhX2xlbihzbG90c19hdHRyKSAhPSBDRkc4MDIxMV9OQU5fU0NIRURfTlVNX1RJTUVfU0xPVFMpKVxubmV0L3dpcmVsZXNzL25sODAyMTEuYy0xNzQwOS1cdFx0cmV0dXJuIC1FSU5WQUw7XG4tLVxubmV0L3dpcmVsZXNzL25sODAyMTEuYy0xNzQxMi1cbm5ldC93aXJlbGVzcy9ubDgwMjExLmM6MTc0MTM6XHRmb3IgKGludCBzbG90ID0gMDsgc2xvdCBcdTAwM2MgQ0ZHODAyMTFfTkFOX1NDSEVEX05VTV9USU1FX1NMT1RTOyBzbG90JiM0MzsmIzQzOykge1xubmV0L3dpcmVsZXNzL25sODAyMTEuYy0xNzQxNC1cdFx0aWYgKHNjaGVkdWxlW3Nsb3RdICE9IE5MODAyMTFfTkFOX1NDSEVEX05PVF9BVkFJTF9TTE9UIFx1MDAyNlx1MDAyNlxuLS1cbm5ldC93aXJlbGVzcy9ubDgwMjExLmM9MTc1MTA9c3RhdGljIGludCBubDgwMjExX25hbl9zZXRfcGVlcl9zY2hlZChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuLS1cbm5ldC93aXJlbGVzcy9ubDgwMjExLmMtMTc2MDQtXHRmb3IgKGludCBqID0gMDsgaiBcdTAwM2MgQVJSQVlfU0laRShzY2hlZC5tYXBzKTsgaiYjNDM7JiM0MzspXG5uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jOjE3NjA1Olx0XHRzY2hlZC5tYXBzW2pdLm1hcF9pZCA9IENGRzgwMjExX05BTl9JTlZBTElEX01BUF9JRDtcbm5ldC93aXJlbGVzcy9ubDgwMjExLmMtMTc2MDYtXG4tLVxubmV0L3dpcmVsZXNzL25sODAyMTEuYz0xOTIzMD1zdGF0aWMgaW50IG5sODAyMTFfc2V0X2h3X3RpbWVzdGFtcChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuLS1cbm5ldC93aXJlbGVzcy9ubDgwMjExLmMtMTkyNDAtXHRpZiAoIWluZm8tXHUwMDNlYXR0cnNbTkw4MDIxMV9BVFRSX01BQ10gXHUwMDI2XHUwMDI2XG5uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jOjE5MjQxOlx0ICAgIHJkZXYtXHUwMDNld2lwaHkuaHdfdGltZXN0YW1wX21heF9wZWVycyAhPSBDRkc4MDIxMV9IV19USU1FU1RBTVBfQUxMX1BFRVJTKVxubmV0L3dpcmVsZXNzL25sODAyMTEuYy0xOTI0Mi1cdFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xuLS1cbm5ldC93aXJlbGVzcy9ubDgwMjExLmM9MTk3MzM9c3RhdGljIGNvbnN0IHN0cnVjdCBnZW5sX3NtYWxsX29wcyBubDgwMjExX3NtYWxsX29wc1tdID0ge1xuLS1cbm5ldC93aXJlbGVzcy9ubDgwMjExLmMtMTk5MDYtXHR9LFxubmV0L3dpcmVsZXNzL25sODAyMTEuYzoxOTkwNzojaWZkZWYgQ09ORklHX0NGRzgwMjExX0NSREFfU1VQUE9SVFxubmV0L3dpcmVsZXNzL25sODAyMTEuYy0xOTkwOC1cdHtcbi0tXG5uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jPTIzNDA3PXZvaWQgY2ZnODAyMTFfc2NoZWR1bGVfY2hhbm5lbHNfY2hlY2soc3RydWN0IHdpcmVsZXNzX2RldiAqd2Rldilcbi0tXG5uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jLTIzNDE0LVx0XHRcdFx0ICAgICBOTDgwMjExX0VYVF9GRUFUVVJFX0RGU19DT05DVVJSRU5UKSB8fFxubmV0L3dpcmVsZXNzL25sODAyMTEuYzoyMzQxNTpcdCAgICAoSVNfRU5BQkxFRChDT05GSUdfQ0ZHODAyMTFfUkVHX1JFTEFYX05PX0lSKSBcdTAwMjZcdTAwMjZcbm5ldC93aXJlbGVzcy9ubDgwMjExLmMtMjM0MTYtXHQgICAgIHdpcGh5LVx1MDAzZXJlZ3VsYXRvcnlfZmxhZ3MgXHUwMDI2IFJFR1VMQVRPUllfRU5BQkxFX1JFTEFYX05PX0lSKSkpXG4tLVxubmV0L3dpcmVsZXNzL3JkZXYtb3BzLmgtNi0gKi9cbm5ldC93aXJlbGVzcy9yZGV2LW9wcy5oOjc6I2lmbmRlZiBfX0NGRzgwMjExX1JERVZfT1BTXG5uZXQvd2lyZWxlc3MvcmRldi1vcHMuaDo4OiNkZWZpbmUgX19DRkc4MDIxMV9SREVWX09QU1xubmV0L3dpcmVsZXNzL3JkZXYtb3BzLmgtOS1cbi0tXG5uZXQvd2lyZWxlc3MvcmRldi1vcHMuaD0xNjI1PXJkZXZfc2V0X2VwY3Moc3RydWN0IGNmZzgwMjExX3JlZ2lzdGVyZWRfZGV2aWNlICpyZGV2LFxuLS1cbm5ldC93aXJlbGVzcy9yZGV2LW9wcy5oLTE2MzgtXG5uZXQvd2lyZWxlc3MvcmRldi1vcHMuaDoxNjM5OiNlbmRpZiAvKiBfX0NGRzgwMjExX1JERVZfT1BTICovXG4tLVxubmV0L3dpcmVsZXNzL3JlZy5jPTQ5Nz1zdGF0aWMgaW50IHJlZ19zY2hlZHVsZV9hcHBseShjb25zdCBzdHJ1Y3QgaWVlZTgwMjExX3JlZ2RvbWFpbiAqcmVnZG9tKVxuLS1cbm5ldC93aXJlbGVzcy9yZWcuYy01MTYtXG5uZXQvd2lyZWxlc3MvcmVnLmM6NTE3OiNpZmRlZiBDT05GSUdfQ0ZHODAyMTFfQ1JEQV9TVVBQT1JUXG5uZXQvd2lyZWxlc3MvcmVnLmMtNTE4LS8qIE1heCBudW1iZXIgb2YgY29uc2VjdXRpdmUgYXR0ZW1wdHMgdG8gY29tbXVuaWNhdGUgd2l0aCBDUkRBICAqL1xuLS1cbm5ldC93aXJlbGVzcy9yZWcuYz01ODY9c3RhdGljIGlubGluZSBpbnQgY2FsbF9jcmRhKGNvbnN0IGNoYXIgKmFscGhhMilcbi0tXG5uZXQvd2lyZWxlc3MvcmVnLmMtNTg5LX1cbm5ldC93aXJlbGVzcy9yZWcuYzo1OTA6I2VuZGlmIC8qIENPTkZJR19DRkc4MDIxMV9DUkRBX1NVUFBPUlQgKi9cbm5ldC93aXJlbGVzcy9yZWcuYy01OTEtXG4tLVxubmV0L3dpcmVsZXNzL3JlZy5jPTY5Nz1zdGF0aWMgYm9vbCB2YWxpZF9jb3VudHJ5KGNvbnN0IHU4ICpkYXRhLCB1bnNpZ25lZCBpbnQgc2l6ZSxcbi0tXG5uZXQvd2lyZWxlc3MvcmVnLmMtNzI5LVxubmV0L3dpcmVsZXNzL3JlZy5jOjczMDojaWZkZWYgQ09ORklHX0NGRzgwMjExX1JFUVVJUkVfU0lHTkVEX1JFR0RCXG5uZXQvd2lyZWxlc3MvcmVnLmMtNzMxLSNpbmNsdWRlIFx1MDAzY2tleXMvYXN5bW1ldHJpYy10eXBlLmhcdTAwM2Vcbi0tXG5uZXQvd2lyZWxlc3MvcmVnLmM9NzM1PXN0YXRpYyBpbnQgX19pbml0IGxvYWRfYnVpbHRpbl9yZWdkYl9rZXlzKHZvaWQpXG4tLVxubmV0L3dpcmVsZXNzL3JlZy5jLTc0Ny1cbm5ldC93aXJlbGVzcy9yZWcuYzo3NDg6I2lmZGVmIENPTkZJR19DRkc4MDIxMV9VU0VfS0VSTkVMX1JFR0RCX0tFWVNcbm5ldC93aXJlbGVzcy9yZWcuYy03NDktXHR4NTA5X2xvYWRfY2VydGlmaWNhdGVfbGlzdChzaGlwcGVkX3JlZ2RiX2NlcnRzLFxuLS1cbm5ldC93aXJlbGVzcy9yZWcuYy03NTItI2VuZGlmXG5uZXQvd2lyZWxlc3MvcmVnLmM6NzUzOiNpZmRlZiBDT05GSUdfQ0ZHODAyMTFfRVhUUkFfUkVHREJfS0VZRElSXG5uZXQvd2lyZWxlc3MvcmVnLmM6NzU0Olx0aWYgKENPTkZJR19DRkc4MDIxMV9FWFRSQV9SRUdEQl9LRVlESVJbMF0gIT0gJiMzOTtcXDAmIzM5Oylcbm5ldC93aXJlbGVzcy9yZWcuYy03NTUtXHRcdHg1MDlfbG9hZF9jZXJ0aWZpY2F0ZV9saXN0KGV4dHJhX3JlZ2RiX2NlcnRzLFxuLS1cbm5ldC93aXJlbGVzcy9yZWcuYz03OTg9c3RhdGljIHZvaWQgZnJlZV9yZWdkYl9rZXlyaW5nKHZvaWQpXG4tLVxubmV0L3dpcmVsZXNzL3JlZy5jLTgwMC19XG5uZXQvd2lyZWxlc3MvcmVnLmM6ODAxOiNlbmRpZiAvKiBDT05GSUdfQ0ZHODAyMTFfUkVRVUlSRV9TSUdORURfUkVHREIgKi9cbm5ldC93aXJlbGVzcy9yZWcuYy04MDItXG4tLVxubmV0L3dpcmVsZXNzL3JlZy5jPTIwMzg9Ym9vbCByZWdfbGFzdF9yZXF1ZXN0X2NlbGxfYmFzZSh2b2lkKVxuLS1cbm5ldC93aXJlbGVzcy9yZWcuYy0yMDQyLVxubmV0L3dpcmVsZXNzL3JlZy5jOjIwNDM6I2lmZGVmIENPTkZJR19DRkc4MDIxMV9SRUdfQ0VMTFVMQVJfSElOVFNcbm5ldC93aXJlbGVzcy9yZWcuYy0yMDQ0LS8qIENvcmUgc3BlY2lmaWMgY2hlY2sgKi9cbi0tXG5uZXQvd2lyZWxlc3Mvc2Nhbi5jPTIzMD1zdGF0aWMgc2l6ZV90IGNmZzgwMjExX2NvcHlfZWxlbV93aXRoX2ZyYWdzKGNvbnN0IHN0cnVjdCBlbGVtZW50ICplbGVtLFxuLS1cbm5ldC93aXJlbGVzcy9zY2FuLmMtMjY3LVxubmV0L3dpcmVsZXNzL3NjYW4uYzoyNjg6VklTSUJMRV9JRl9DRkc4MDIxMV9LVU5JVCBzaXplX3Rcbm5ldC93aXJlbGVzcy9zY2FuLmMtMjY5LWNmZzgwMjExX2dlbl9uZXdfaWUoY29uc3QgdTggKmllLCBzaXplX3QgaWVsZW4sXG4tLVxubmV0L3dpcmVsZXNzL3NjYW4uYy00MDYtfVxubmV0L3dpcmVsZXNzL3NjYW4uYzo0MDc6RVhQT1JUX1NZTUJPTF9JRl9DRkc4MDIxMV9LVU5JVChjZmc4MDIxMV9nZW5fbmV3X2llKTtcbm5ldC93aXJlbGVzcy9zY2FuLmMtNDA4LVxuLS1cbm5ldC93aXJlbGVzcy9zY2FuLmM9NTQ2PXN0YXRpYyBpbnQgY2ZnODAyMTFfY2FsY19zaG9ydF9zc2lkKGNvbnN0IHN0cnVjdCBjZmc4MDIxMV9ic3NfaWVzICppZXMsXG4tLVxubmV0L3dpcmVsZXNzL3NjYW4uYy01NTctXG5cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNSAwMTowNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNjAxNgoJCQkJCQkJb3V0cHV0OiAzNQoJCQkJCQkJdGhvdWdodHM6IDI4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRha2Ugb24gdGhlIHByb2Nlc3MsIGNvbnNpZGVyaW5nIG15IGV4cGVydGlzZToKCioqRGlzc2VjdGluZyB3aXBoeV91bnJlZ2lzdGVyKCkgYW5kIGNmZzgwMjExX3JkZXZfbGlzdCBNYW5pcHVsYXRpb24qKgoKT2theSwgc28gSSYjMzk7bSBkaWdnaW5nIGludG8gYHdpcGh5X3VucmVnaXN0ZXIoKWAgYW5kLCBhcyB1c3VhbCwgbXkgZmlyc3QgdGhvdWdodCBpcywgJiMzNDtXaGVyZSYjMzk7cyB0aGUgY3JpdGljYWwgc2VjdGlvbj8gSG93IGFyZSB3ZSBwcm90ZWN0aW5nIGBjZmc4MDIxMV9yZGV2X2xpc3RgPyYjMzQ7LiBJIGtub3cgdGhlIGxpc3QgaXMgbGlrZWx5IHByb3RlY3RlZCBieSBhIG11dGV4IG9yIHNwaW5sb2NrLCBhbmQgSSBuZWVkIHRvIGlkZW50aWZ5IHdoaWNoIG9uZSBhbmQgdW5kZXJzdGFuZCB0aGUgbG9ja2luZyBvcmRlciwgZXNwZWNpYWxseSBnaXZlbiB0aGF0IGl0IGlzIGEgZ2xvYmFsIHJlc291cmNlLiBJJiMzOTttIGxvb2tpbmcgZm9yIHRoZSBkYW5jZSBvZiBhY3F1aXJpbmcgYW5kIHJlbGVhc2luZyB0aGF0IGxvY2suIElzIGl0IGEgc2ltcGxlIGxvY2tpbmcgc2NoZW1lLCBvciBzb21ldGhpbmcgbW9yZSBjb21wbGV4IHdpdGggcmVhZGVyL3dyaXRlciBsb2Nrcz8gVGhpcyBpcyBjcml0aWNhbCBmb3IgcHJldmVudGluZyByYWNlIGNvbmRpdGlvbnMsIHBhcnRpY3VsYXJseSBkdXJpbmcgdGhlIHVucmVnaXN0cmF0aW9uIHByb2Nlc3Mgd2hlbiBkZXZpY2VzIGFyZSBsaWtlbHkgYmVpbmcgcmVtb3ZlZCBvciBkZWluaXRpYWxpemVkLiBJJiMzOTttIHdvbmRlcmluZyBpZiB0aGVyZSBhcmUgYW55IGNhbGxiYWNrcyBvciBoYW5kbGVycyB0aGF0IGFsc28gYWNjZXNzIHRoYXQgZ2xvYmFsIGxpc3QgYW5kIHRoYXQgbXVzdCBiZSBjb25zaWRlcmVkIHdpdGggdGhlIHN5bmNocm9uaXphdGlvbiBwcmltaXRpdmUuIEkgZXhwZWN0IHRvIHNlZSB0aGUgY29kZSBjYXJlZnVsbHkgaXRlcmF0aW5nIHRocm91Z2ggYGNmZzgwMjExX3JkZXZfbGlzdGAgYW5kLCBhdCBlYWNoIHN0YWdlLCBzYWZlbHkgaGFuZGxpbmcgdGhlIGRlYWxsb2NhdGlvbiBvZiB0aGUgYHdpcGh5YCBzdHJ1Y3R1cmUuIEkgbmVlZCB0byBzZWUgaG93IHRoZXkmIzM5O3JlIGhhbmRsaW5nIHJlZmVyZW5jZXMsIGlmIHRoZXJlJiMzOTtzIGFueSByZWZjb3VudGluZyBoYXBwZW5pbmcsIG9yIGlmIHNvbWUgb3RoZXIgbWVjaGFuaXNtIGV4aXN0cyB0byBwcmV2ZW50IHVzZS1hZnRlci1mcmVlIHNjZW5hcmlvcy4gSSYjMzk7bSBwYXJ0aWN1bGFybHkgaW50ZXJlc3RlZCBpbiB0aGUgaW50ZXJhY3Rpb24gd2l0aCB0aGUgcmVndWxhdG9yeSBkb21haW4gaGFuZGxpbmc7IGlzIHRoZXJlIGFueXRoaW5nIHNwZWNpZmljIGhhcHBlbmluZyB0aGVyZSB0aGF0IG5lZWRzIHRvIGJlIGNvbnNpZGVyZWQgaW4gdGhlIHVucmVnaXN0cmF0aW9uPyBUaGlzIGlzIHR5cGljYWxseSB3aGVyZSB0aGluZ3MgY2FuIGdldCB0cmlja3kuIEFsc28sIHdoYXQgaGFwcGVucyB3aXRoIGFueSBwZW5kaW5nIG9wZXJhdGlvbnMgb3Igd29ya3F1ZXVlcyBhc3NvY2lhdGVkIHdpdGggdGhlIGB3aXBoeWA/IFRoZXNlIG5lZWQgdG8gYmUgZmx1c2hlZCBvciBjYW5jZWxsZWQgZ3JhY2VmdWxseS4gSSBhbHNvIG11c3QgZXZhbHVhdGUgdGhlIHBvdGVudGlhbCBmb3IgZGVhZGxvY2tzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA1IDAxOjA0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NmZzgwMjExX3JkZXZfbGlzdCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC93aXJlbGVzcy8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L3dpcmVsZXNzL2NvcmUuYz00Mz1NT0RVTEVfQUxJQVNfR0VOTF9GQU1JTFkoTkw4MDIxMV9HRU5MX05BTUUpO1xuLS1cbm5ldC93aXJlbGVzcy9jb3JlLmMtNDUtLyogUkNVLXByb3RlY3RlZCAoYW5kIFJUTkwgZm9yIHdyaXRlcnMpICovXG5uZXQvd2lyZWxlc3MvY29yZS5jOjQ2OkxJU1RfSEVBRChjZmc4MDIxMV9yZGV2X2xpc3QpO1xubmV0L3dpcmVsZXNzL2NvcmUuYzo0NzppbnQgY2ZnODAyMTFfcmRldl9saXN0X2dlbmVyYXRpb247XG5uZXQvd2lyZWxlc3MvY29yZS5jLTQ4LVxuLS1cbm5ldC93aXJlbGVzcy9jb3JlLmM9ODUzPWludCB3aXBoeV9yZWdpc3RlcihzdHJ1Y3Qgd2lwaHkgKndpcGh5KVxuLS1cbm5ldC93aXJlbGVzcy9jb3JlLmMtMTE2NS1cbm5ldC93aXJlbGVzcy9jb3JlLmM6MTE2NjpcdGxpc3RfYWRkX3JjdShcdTAwMjZyZGV2LVx1MDAzZWxpc3QsIFx1MDAyNmNmZzgwMjExX3JkZXZfbGlzdCk7XG5uZXQvd2lyZWxlc3MvY29yZS5jOjExNjc6XHRjZmc4MDIxMV9yZGV2X2xpc3RfZ2VuZXJhdGlvbiYjNDM7JiM0Mzs7XG5uZXQvd2lyZWxlc3MvY29yZS5jLTExNjgtXG4tLVxubmV0L3dpcmVsZXNzL2NvcmUuYz0xMjkwPXZvaWQgd2lwaHlfdW5yZWdpc3RlcihzdHJ1Y3Qgd2lwaHkgKndpcGh5KVxuLS1cbm5ldC93aXJlbGVzcy9jb3JlLmMtMTMyNC1cbm5ldC93aXJlbGVzcy9jb3JlLmM6MTMyNTpcdGNmZzgwMjExX3JkZXZfbGlzdF9nZW5lcmF0aW9uJiM0MzsmIzQzOztcbm5ldC93aXJlbGVzcy9jb3JlLmMtMTMyNi1cdGRldmljZV9kZWwoXHUwMDI2cmRldi1cdTAwM2V3aXBoeS5kZXYpO1xuLS1cbm5ldC93aXJlbGVzcy9jb3JlLmg9MTY2PWV4dGVybiBzdHJ1Y3Qgd29ya3F1ZXVlX3N0cnVjdCAqY2ZnODAyMTFfd3E7XG5uZXQvd2lyZWxlc3MvY29yZS5oOjE2NzpleHRlcm4gc3RydWN0IGxpc3RfaGVhZCBjZmc4MDIxMV9yZGV2X2xpc3Q7XG5uZXQvd2lyZWxlc3MvY29yZS5oOjE2ODpleHRlcm4gaW50IGNmZzgwMjExX3JkZXZfbGlzdF9nZW5lcmF0aW9uO1xubmV0L3dpcmVsZXNzL2NvcmUuaC0xNjktXG4tLVxubmV0L3dpcmVsZXNzL2NvcmUuaD0xNzE9c3RhdGljIGlubGluZSBpbnQgZm9yX2VhY2hfcmRldl9jaGVja19ydG5sKHZvaWQpXG4tLVxubmV0L3dpcmVsZXNzL2NvcmUuaC0xNzctXHRpZiAoZm9yX2VhY2hfcmRldl9jaGVja19ydG5sKCkpIHt9IGVsc2VcdFx0XHRcdFxcXG5uZXQvd2lyZWxlc3MvY29yZS5oOjE3ODpcdFx0bGlzdF9mb3JfZWFjaF9lbnRyeShyZGV2LCBcdTAwMjZjZmc4MDIxMV9yZGV2X2xpc3QsIGxpc3QpXG5uZXQvd2lyZWxlc3MvY29yZS5oLTE3OS1cbi0tXG5uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jPTMwNTc9c3RhdGljIGludCBubDgwMjExX3NlbmRfd2lwaHkoc3RydWN0IGNmZzgwMjExX3JlZ2lzdGVyZWRfZGV2aWNlICpyZGV2LFxuLS1cbm5ldC93aXJlbGVzcy9ubDgwMjExLmMtMzA4My1cdCAgICBubGFfcHV0X3UzMihtc2csIE5MODAyMTFfQVRUUl9HRU5FUkFUSU9OLFxubmV0L3dpcmVsZXNzL25sODAyMTEuYzozMDg0Olx0XHRcdGNmZzgwMjExX3JkZXZfbGlzdF9nZW5lcmF0aW9uKSlcbm5ldC93aXJlbGVzcy9ubDgwMjExLmMtMzA4NS1cdFx0Z290byBubGFfcHV0X2ZhaWx1cmU7XG4tLVxubmV0L3dpcmVsZXNzL25sODAyMTEuYz00NjU5PXN0YXRpYyBpbnQgbmw4MDIxMV9zZW5kX2lmYWNlKHN0cnVjdCBza19idWZmICptc2csIHUzMiBwb3J0aWQsIHUzMiBzZXEsIGludCBmbGFncyxcbi0tXG5uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jLTQ2ODgtXHRcdFx0cmRldi1cdTAwM2VkZXZsaXN0X2dlbmVyYXRpb24gXlxubmV0L3dpcmVsZXNzL25sODAyMTEuYzo0Njg5Olx0XHRcdChjZmc4MDIxMV9yZGV2X2xpc3RfZ2VuZXJhdGlvbiBcdTAwM2NcdTAwM2MgMikpIHx8XG5uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jLTQ2OTAtXHQgICAgbmxhX3B1dF91OChtc2csIE5MODAyMTFfQVRUUl80QUREUiwgd2Rldi1cdTAwM2V1c2VfNGFkZHIpIHx8XG4tLVxubmV0L3dpcmVsZXNzL25sODAyMTEuYz0xMDgwND1zdGF0aWMgaW50IG5sODAyMTFfZ2V0X3JlZ19kdW1wKHN0cnVjdCBza19idWZmICpza2IsXG4tLVxubmV0L3dpcmVsZXNzL25sODAyMTEuYy0xMDgyMi1cdHJlZ19pZHggPSAxO1xubmV0L3dpcmVsZXNzL25sODAyMTEuYzoxMDgyMzpcdGxpc3RfZm9yX2VhY2hfZW50cnlfcmN1KHJkZXYsIFx1MDAyNmNmZzgwMjExX3JkZXZfbGlzdCwgbGlzdCkge1xubmV0L3dpcmVsZXNzL25sODAyMTEuYy0xMDgyNC1cdFx0cmVnZG9tID0gZ2V0X3dpcGh5X3JlZ2RvbShcdTAwMjZyZGV2LVx1MDAzZXdpcGh5KTtcbi0tXG5uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jPTIzMTE1PXN0YXRpYyBpbnQgbmw4MDIxMV9uZXRsaW5rX25vdGlmeShzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgKiBuYixcbi0tXG5uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jLTIzMTI4LVxubmV0L3dpcmVsZXNzL25sODAyMTEuYzoyMzEyOTpcdGxpc3RfZm9yX2VhY2hfZW50cnlfcmN1KHJkZXYsIFx1MDAyNmNmZzgwMjExX3JkZXZfbGlzdCwgbGlzdCkge1xubmV0L3dpcmVsZXNzL25sODAyMTEuYy0yMzEzMC1cdFx0c3RydWN0IGNmZzgwMjExX3NjaGVkX3NjYW5fcmVxdWVzdCAqc2NoZWRfc2Nhbl9yZXE7XG4tLVxubmV0L3dpcmVsZXNzL3JlZy5jPTI0NjQ9c3RhdGljIHZvaWQgcmVnX2NoZWNrX2NoYW5zX3dvcmsoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxuLS1cbm5ldC93aXJlbGVzcy9yZWcuYy0yNDc1LVx0cmN1X3JlYWRfbG9jaygpO1xubmV0L3dpcmVsZXNzL3JlZy5jOjI0NzY6XHRsaXN0X2Zvcl9lYWNoX2VudHJ5X3JjdShyZGV2LCBcdTAwMjZjZmc4MDIxMV9yZGV2X2xpc3QsIGxpc3QpIHtcbm5ldC93aXJlbGVzcy9yZWcuYy0yNDc3LVx0XHRyY3VfcmVhZF91bmxvY2soKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNSAwMTowNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNzgxMAoJCQkJCQkJb3V0cHV0OiAzMQoJCQkJCQkJdGhvdWdodHM6IDEwOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipFeGFtaW5pbmcgdGhlIFdpcmVsZXNzIFJlZ3VsYXRvcnkgRG9tYWluIENvbmZpZ3VyYXRpb24qKgoKQWxyaWdodCwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gTXkgaW5pdGlhbCBodW5jaCBpcyBjb25maXJtZWQ6IGBuZXQvd2lyZWxlc3MvcmVnLmNgIGlzIGRlZmluaXRlbHkgYnJvdWdodCBpbnRvIHRoZSBidWlsZCBwcm9jZXNzIHdoZW4gYENPTkZJR19DRkc4MDIxMWAgaXMgZW5hYmxlZC4gVGltZSB0byB2ZXJpZnkgdGhhdCBhc3N1bXB0aW9uLiBMZXQmIzM5O3MgZGlnIGludG8gYG5ldC93aXJlbGVzcy9NYWtlZmlsZWAuIFl1cCwganVzdCBhcyBleHBlY3RlZCwgdGhlIGBvYmotJChDT05GSUdfQ0ZHODAyMTEpICYjNDM7PSBjZmc4MDIxMS5vYCBsaW5lIGNsZWFybHkgc2hvd3MgdGhlIGNvbmRpdGlvbmFsIGluY2x1c2lvbi4gQW5kIHRoZXJlIGl0IGlzLCBpbnNpZGUgdGhlIGBjZmc4MDIxMS15YCB2YXJpYWJsZSBkZWZpbml0aW9uOiBgcmVnLm9gIGlzIGluZGVlZCBiZWluZyBjb21waWxlZCBhbG9uZyB3aXRoIHRoZSBvdGhlciBjb3JlIG1vZHVsZXMuIEFsd2F5cyBnb29kIHRvIGRvdWJsZSBjaGVjaywgc28gbGV0JiMzOTtzIG1ha2Ugc3VyZSB0aGF0JiMzOTtzIGNvcnJlY3QsIGdvaW5nIGJhY2sgdG8gdGhlIGBuZXQvd2lyZWxlc3MvTWFrZWZpbGVgIHRvIGNvbmZpcm0uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA1IDAxOjA0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L3dpcmVsZXNzL01ha2VmaWxlJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAzMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgICAxOlx0IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxuICAgMjpcdG9iai0kKENPTkZJR19DRkc4MDIxMSkgJiM0Mzs9IGNmZzgwMjExLm9cbiAgIDM6XHRvYmoteSAmIzQzOz0gdGVzdHMvXG4gICA0Olx0XG4gICA1Olx0b2JqLSQoQ09ORklHX1dFWFRfQ09SRSkgJiM0Mzs9IHdleHQtY29yZS5vXG4gICA2Olx0b2JqLSQoQ09ORklHX1dFWFRfUFJPQykgJiM0Mzs9IHdleHQtcHJvYy5vXG4gICA3Olx0b2JqLSQoQ09ORklHX1dFWFRfUFJJVikgJiM0Mzs9IHdleHQtcHJpdi5vXG4gICA4Olx0XG4gICA5Olx0Y2ZnODAyMTEteSAmIzQzOz0gY29yZS5vIHN5c2ZzLm8gcmFkaW90YXAubyB1dGlsLm8gcmVnLm8gc2Nhbi5vIG5sODAyMTEub1xuICAxMDpcdGNmZzgwMjExLXkgJiM0Mzs9IG1sbWUubyBpYnNzLm8gc21lLm8gY2hhbi5vIGV0aHRvb2wubyBtZXNoLm8gYXAubyB0cmFjZS5vIG9jYi5vXG4gIDExOlx0Y2ZnODAyMTEteSAmIzQzOz0gbWljaGFlbC1taWMubyBwbXNyLm9cbiAgMTI6XHRjZmc4MDIxMS0kKENPTkZJR19PRikgJiM0Mzs9IG9mLm9cbiAgMTM6XHRjZmc4MDIxMS0kKENPTkZJR19DRkc4MDIxMV9ERUJVR0ZTKSAmIzQzOz0gZGVidWdmcy5vXG4gIDE0Olx0Y2ZnODAyMTEtJChDT05GSUdfQ0ZHODAyMTFfV0VYVCkgJiM0Mzs9IHdleHQtY29tcGF0Lm8gd2V4dC1zbWUub1xuICAxNTpcdFxuICAxNjpcdENGTEFHU190cmFjZS5vIDo9IC1JJChzcmMpXG4gIDE3Olx0XG4gIDE4Olx0Y2ZnODAyMTEtJChDT05GSUdfQ0ZHODAyMTFfVVNFX0tFUk5FTF9SRUdEQl9LRVlTKSAmIzQzOz0gc2hpcHBlZC1jZXJ0cy5vXG4gIDE5Olx0aWZuZXEgKCQoQ09ORklHX0NGRzgwMjExX0VYVFJBX1JFR0RCX0tFWURJUiksKVxuICAyMDpcdGNmZzgwMjExLXkgJiM0Mzs9IGV4dHJhLWNlcnRzLm9cbiAgMjE6XHRlbmRpZlxuICAyMjpcdFxuICAyMzpcdCQob2JqKS9zaGlwcGVkLWNlcnRzLmM6ICQoc29ydCAkKHdpbGRjYXJkICQoc3JjKS9jZXJ0cy8qLmhleCkpXG4gIDI0Olx0XHRAJChrZWNobykgXCYjMzQ7ICBHRU4gICAgICRAXCYjMzQ7XG4gIDI1Olx0XHQkKFEpKGVjaG8gJiMzOTsjaW5jbHVkZSBcJiMzNDtyZWcuaFwmIzM0OyYjMzk7OyBcXFxuICAyNjpcdFx0ICBlY2hvICYjMzk7Y29uc3QgdTggc2hpcHBlZF9yZWdkYl9jZXJ0c1tdID0geyYjMzk7OyBcXFxuICAyNzpcdFx0ICBlY2hvIHwgY2F0IC0gJF4gOyBcXFxuICAyODpcdFx0ICBlY2hvICYjMzk7fTsmIzM5OzsgXFxcbiAgMjk6XHRcdCAgZWNobyAmIzM5O3Vuc2lnbmVkIGludCBzaGlwcGVkX3JlZ2RiX2NlcnRzX2xlbiA9IHNpemVvZihzaGlwcGVkX3JlZ2RiX2NlcnRzKTsmIzM5OzsgXFxcbiAgMzA6XHRcdCApIFx1MDAzZSAkQFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNSAwMTowNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxODc2NwoJCQkJCQkJb3V0cHV0OiAzMgoJCQkJCQkJdGhvdWdodHM6IDI0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIGEgc3VtbWFyeSBvZiBteSB0aG91Z2h0IHByb2Nlc3M6CgoqKkRpdmluZyBpbnRvIHRoZSBLZXJuZWwgV2lyZWxlc3MgQ29uZmlndXJhdGlvbioqCgpPa2F5LCBzbyBJIG5lZWQgdG8gZmlndXJlIG91dCB0aGUgZGVwZW5kZW5jaWVzIHJlbGF0ZWQgdG8gYENGRzgwMjExYC4gVGltZSB0byBoZWFkIHN0cmFpZ2h0IHRvIHRoZSBzb3VyY2Ug4oCTIGBuZXQvd2lyZWxlc3MvS2NvbmZpZ2AuIFRoYXQmIzM5O3Mgd2hlcmUgYWxsIHRoZSBrZXJuZWwgd2lyZWxlc3MgY29uZmlndXJhdGlvbiBvcHRpb25zIGFyZSBkZWZpbmVkLCBhbmQgYENGRzgwMjExYCBpcyBvYnZpb3VzbHkgYSBjb3JlIGNvbXBvbmVudCBvZiB0aGF0LiBJJiMzOTtsbCBuZWVkIHRvIGNhcmVmdWxseSBleGFtaW5lIHRoYXQgZmlsZSB0byB1bmRlcnN0YW5kIHdoaWNoIG90aGVyIG9wdGlvbnMsIGZlYXR1cmVzLCBvciBtb2R1bGVzIHJlbHkgb24gb3IgYXJlIGxpbmtlZCB0byBgQ0ZHODAyMTFgLiBVbmRlcnN0YW5kaW5nIHRob3NlIGRlcGVuZGVuY2llcyBpcyBjcnVjaWFsIGZvciBhbnkgbW9kaWZpY2F0aW9ucyBvciBkZWVwZXIgYW5hbHlzaXMgSSYjMzk7bSBwbGFubmluZy4gSSBuZWVkIHRvIGVuc3VyZSBub3RoaW5nIGJyZWFrcyB1bmV4cGVjdGVkbHkgbGF0ZXIgb24gZG93biB0aGUgbGluZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDUgMDE6MDQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvd2lyZWxlc3MvS2NvbmZpZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDEsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7ICAgMTpcdCMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxuICAgMjpcdGNvbmZpZyBXSVJFTEVTU19FWFRcbiAgIDM6XHRcdGJvb2xcbiAgIDQ6XHRcbiAgIDU6XHRjb25maWcgV0VYVF9DT1JFXG4gICA2Olx0XHRkZWZfYm9vbCB5XG4gICA3Olx0XHRkZXBlbmRzIG9uIENGRzgwMjExX1dFWFQgfHwgV0lSRUxFU1NfRVhUXG4gICA4Olx0XG4gICA5Olx0Y29uZmlnIFdFWFRfUFJPQ1xuICAxMDpcdFx0ZGVmX2Jvb2wgeVxuICAxMTpcdFx0ZGVwZW5kcyBvbiBQUk9DX0ZTXG4gIDEyOlx0XHRkZXBlbmRzIG9uIFdFWFRfQ09SRVxuICAxMzpcdFxuICAxNDpcdGNvbmZpZyBXRVhUX1BSSVZcbiAgMTU6XHRcdGJvb2xcbiAgMTY6XHRcbiAgMTc6XHRjb25maWcgQ0ZHODAyMTFcbiAgMTg6XHRcdHRyaXN0YXRlIFwmIzM0O2NmZzgwMjExIC0gd2lyZWxlc3MgY29uZmlndXJhdGlvbiBBUElcJiMzNDtcbiAgMTk6XHRcdGRlcGVuZHMgb24gUkZLSUxMIHx8ICFSRktJTExcbiAgMjA6XHRcdHNlbGVjdCBGV19MT0FERVJcbiAgMjE6XHRcdHNlbGVjdCBDUkMzMlxuICAyMjpcdFx0IyBtYXkgbmVlZCB0byB1cGRhdGUgdGhpcyB3aGVuIGNlcnRpZmljYXRlcyBhcmUgY2hhbmdlZCBhbmQgYXJlXG4gIDIzOlx0XHQjIHVzaW5nIGEgZGlmZmVyZW50IGFsZ29yaXRobSwgdGhvdWdoIHJpZ2h0IG5vdyB0aGV5IHNob3VsZG4mIzM5O3RcbiAgMjQ6XHRcdCMgKHRoaXMgaXMgaGVyZSByYXRoZXIgdGhhbiBiZWxvdyB0byBhbGxvdyBpdCB0byBiZSBhIG1vZHVsZSlcbiAgMjU6XHRcdHNlbGVjdCBDUllQVE9fU0hBMjU2IGlmIENGRzgwMjExX1VTRV9LRVJORUxfUkVHREJfS0VZU1xuICAyNjpcdFx0aGVscFxuICAyNzpcdFx0ICBjZmc4MDIxMSBpcyB0aGUgTGludXggd2lyZWxlc3MgTEFOICg4MDIuMTEpIGNvbmZpZ3VyYXRpb24gQVBJLlxuICAyODpcdFx0ICBFbmFibGUgdGhpcyBpZiB5b3UgaGF2ZSBhIHdpcmVsZXNzIGRldmljZS5cbiAgMjk6XHRcbiAgMzA6XHRcdCAgRm9yIG1vcmUgaW5mb3JtYXRpb24gcmVmZXIgdG8gZG9jdW1lbnRhdGlvbiBvbiB0aGUgd2lyZWxlc3Mgd2lraTpcbiAgMzE6XHRcbiAgMzI6XHRcdCAgaHR0cHM6Ly93aXJlbGVzcy53aWtpLmtlcm5lbC5vcmcvZW4vZGV2ZWxvcGVycy9Eb2N1bWVudGF0aW9uL2NmZzgwMjExXG4gIDMzOlx0XG4gIDM0Olx0XHQgIFdoZW4gYnVpbHQgYXMgYSBtb2R1bGUgaXQgd2lsbCBiZSBjYWxsZWQgY2ZnODAyMTEuXG4gIDM1Olx0XG4gIDM2Olx0aWYgQ0ZHODAyMTFcbiAgMzc6XHRcbiAgMzg6XHRjb25maWcgTkw4MDIxMV9URVNUTU9ERVxuICAzOTpcdFx0Ym9vbCBcJiMzNDtubDgwMjExIHRlc3Rtb2RlIGNvbW1hbmRcJiMzNDtcbiAgNDA6XHRcdGhlbHBcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDUgMDE6MDQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTk1MTUKCQkJCQkJCW91dHB1dDogMzAKCQkJCQkJCXRob3VnaHRzOiA1MTAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBSZWd1bGF0b3J5IERvbWFpbiBDaGFuZ2UgaW4gYG5ldC93aXJlbGVzcy9yZWcuY2AqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIGRvd24gdGhpcyBjb2RlIGNoYW5nZSBpbiBgbmV0L3dpcmVsZXNzL3JlZy5jYC4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIGlkZW50aWZ5IGV4YWN0bHkgKndoYXQqIGNoYW5nZWQgYW5kIHdoeS4gSSBzZWUgdGhlIG1vZGlmaWNhdGlvbiB3aXRoaW4gYHJlZ19jaGVja19jaGFuc193b3JrYCwgYSBjcml0aWNhbCBmdW5jdGlvbiBpbnZvbHZlZCBpbiB2ZXJpZnlpbmcgYWN0aXZlIHdpcmVsZXNzIGludGVyZmFjZXMgYWZ0ZXIgYSByZWd1bGF0b3J5IGNoYW5nZS4KCkJlZm9yZSwgaXQgd2FzIGEgc3RyYWlnaHRmb3J3YXJkIGxvb3AsIGhvbGRpbmcgdGhlIGBydG5sX2xvY2tgIHdoaWxlIGl0ZXJhdGluZyB0aHJvdWdoIHJlZ2lzdGVyZWQgZGV2aWNlcyBhbmQgY2FsbGluZyBgcmVnX2xlYXZlX2ludmFsaWRfY2hhbnNgLiAgTm93LCBpdCYjMzk7cyBiZWVuIHJlZmFjdG9yZWQuIFRoZSBrZXkgZGlmZmVyZW5jZSBpcyB0aGUgaW50cm9kdWN0aW9uIG9mIGByY3VfcmVhZF9sb2NrYCBhbmQgYHJjdV9yZWFkX3VubG9ja2Agc3Vycm91bmRpbmcgYSBgbGlzdF9mb3JfZWFjaF9lbnRyeV9yY3VgIGl0ZXJhdGlvbiwgd2l0aCBgcnRubF9sb2NrYCBhbmQgYHJ0bmxfdW5sb2NrYCBuZXN0ZWQgd2l0aGluLiBUaGUgY29tbWVudCBleHBsYWluaW5nIHRoaXMgY2hhbmdlIGlzIHRoZSBpbXBvcnRhbnQgY2x1ZTogdGhpcyB3YXMgZG9uZSB0byBhZGRyZXNzIHBvdGVudGlhbCBzdGFydmF0aW9uIG9mIG90aGVyIFJUTkwgd2FpdGVycyBiZWNhdXNlIGBjZmc4MDIxMV9sZWF2ZWAgY2FuIGJlIHNsb3csIGFuZCB0byBhdm9pZCBpc3N1ZXMgYXJvdW5kIHJkZXYgdW5yZWdpc3RyYXRpb24uIFNwZWNpZmljYWxseSwgYHdpcGh5X3VucmVnaXN0ZXJgIGhvbGRzIGBydG5sX2xvY2tgIGFjcm9zcyBgbGlzdF9kZWxfcmN1YCBhbmQgYHN5bmNocm9uaXplX3JjdWAsIHNvIHRoZSBgcmRldmAgY2FuJiMzOTt0IGJlIGZyZWVkIHdoaWxlIHRoZSBgcnRubF9sb2NrYCBpcyBoZWxkLiBTbywgdGhlIG9yaWdpbmFsIGxvY2sgaGVsZCB0aGUgUlROTCBsb2NrIHRvbyBsb25nLiBUaGUgY2hhbmdlIGVuc3VyZXMgUlROTCBpcyBoZWxkIG9uIGEgcGVyLWRldmljZSBiYXNpcy4KCk5vdywgdGhlIGltcG9ydGFudCBxdWVzdGlvbiBmb3IgbXkgd29yayBpczogSXMgdGhpcyBjb2RlIHBhdGggcmVhY2hhYmxlLCBwYXJ0aWN1bGFybHkgd2l0aGluIG15IHN0YW5kYXJkIHRlc3RpbmcgZW52aXJvbm1lbnRzLCBsaWtlIHN5emthbGxlciBvciB2aXJ0dWFsaXplZCBzZXR1cHM/IEFic29sdXRlbHkuIFRoZSBgY2ZnODAyMTFgIHN1YnN5c3RlbSwgY291cGxlZCB3aXRoIGBtYWM4MDIxMWAgYW5kIGBtYWM4MDIxMV9od3NpbWAsIHByb3ZpZGVzIG11bHRpcGxlIGF2ZW51ZXMuIFJlZ3VsYXRvcnkgZG9tYWluIGNoYW5nZXMgdmlhIE5MODAyMTEgY29tbWFuZHMsIGxpa2UgYE5MODAyMTFfQ01EX1JFUV9TRVRfUkVHYCwgdHJpZ2dlciBgcmVnX2NoZWNrX2NoYW5uZWxzKClgIG9yLCBhcyBJIHNlZSBoZXJlLCB0aGUgZGVsYXllZCB3b3JrIGZ1bmN0aW9uIHRoYXQgdWx0aW1hdGVseSBsZWFkcyB0byB0aGlzIGByZWdfY2hlY2tfY2hhbnNfd29ya2AgY2FsbC4KCk15IG5leHQgaW1tZWRpYXRlIHN0ZXAgaXMgdG8gdHJhY2UgdGhlIGNhbGwgcGF0aHMgdG8gY29uZmlybSwgaW4gZGV0YWlsLCB3aGVyZSBgcmVnX2NoZWNrX2NoYW5uZWxzYCBvciBgcmVnX2NoZWNrX2NoYW5zX3dvcmtgIGlzIGNhbGxlZCwgYW5kIGhvdyBpdCBpcyBzY2hlZHVsZWQuIFRoaXMgd2lsbCBoZWxwIGRldGVybWluZSB0aGUgcHJlY2lzZSBjb25kaXRpb25zIHVuZGVyIHdoaWNoIHRoaXMgbG9ja2luZyBjaGFuZ2UgYmVjb21lcyBhY3RpdmUgYW5kIGhvdyBsaWtlbHkgYSBwYXJ0aWN1bGFyIHRlc3QgY2FzZSB3aWxsIGV4ZXJjaXNlIHRoZSBjaGFuZ2VkIGNvZGUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA1IDAxOjA0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3JlZ19jaGVja19jaGFucyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC93aXJlbGVzcy8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L3dpcmVsZXNzL3JlZy5jPTIyMT1zdHJ1Y3QgcmVnX2JlYWNvbiB7XG4tLVxubmV0L3dpcmVsZXNzL3JlZy5jLTIyNS1cbm5ldC93aXJlbGVzcy9yZWcuYzoyMjY6c3RhdGljIHZvaWQgcmVnX2NoZWNrX2NoYW5zX3dvcmsoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKTtcbm5ldC93aXJlbGVzcy9yZWcuYzoyMjc6c3RhdGljIERFQ0xBUkVfREVMQVlFRF9XT1JLKHJlZ19jaGVja19jaGFucywgcmVnX2NoZWNrX2NoYW5zX3dvcmspO1xubmV0L3dpcmVsZXNzL3JlZy5jLTIyOC1cbi0tXG5uZXQvd2lyZWxlc3MvcmVnLmM9MjQ0OT1zdGF0aWMgdm9pZCByZWdfbGVhdmVfaW52YWxpZF9jaGFucyhzdHJ1Y3Qgd2lwaHkgKndpcGh5KVxuLS1cbm5ldC93aXJlbGVzcy9yZWcuYy0yNDYzLVxubmV0L3dpcmVsZXNzL3JlZy5jOjI0NjQ6c3RhdGljIHZvaWQgcmVnX2NoZWNrX2NoYW5zX3dvcmsoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxubmV0L3dpcmVsZXNzL3JlZy5jLTI0NjUte1xuLS1cbm5ldC93aXJlbGVzcy9yZWcuYz0yNDg2PXZvaWQgcmVnX2NoZWNrX2NoYW5uZWxzKHZvaWQpXG4tLVxubmV0L3dpcmVsZXNzL3JlZy5jLTI0OTItXHRtb2RfZGVsYXllZF93b3JrKHN5c3RlbV9wb3dlcl9lZmZpY2llbnRfd3EsXG5uZXQvd2lyZWxlc3MvcmVnLmM6MjQ5MzpcdFx0XHQgXHUwMDI2cmVnX2NoZWNrX2NoYW5zLFxubmV0L3dpcmVsZXNzL3JlZy5jLTI0OTQtXHRcdFx0IG1zZWNzX3RvX2ppZmZpZXMoUkVHX0VORk9SQ0VfR1JBQ0VfTVMpKTtcbi0tXG5uZXQvd2lyZWxlc3MvcmVnLmM9NDM1OT12b2lkIHJlZ3VsYXRvcnlfZXhpdCh2b2lkKVxuLS1cbm5ldC93aXJlbGVzcy9yZWcuYy00MzY1LVx0Y2FuY2VsX2NyZGFfdGltZW91dF9zeW5jKCk7XG5uZXQvd2lyZWxlc3MvcmVnLmM6NDM2NjpcdGNhbmNlbF9kZWxheWVkX3dvcmtfc3luYyhcdTAwMjZyZWdfY2hlY2tfY2hhbnMpO1xubmV0L3dpcmVsZXNzL3JlZy5jLTQzNjctXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA1IDAxOjA0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIxMDA1CgkJCQkJCQlvdXRwdXQ6IDI5CgkJCQkJCQl0aG91Z2h0czogMTUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0czoKCioqVHJhY2luZyB0aGUgQ2FsbCBQYXRoOiBgcmVnX2NoZWNrX2NoYW5uZWxzYCoqCgpPa2F5LCBzbyBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgZXhlY3V0aW9uIGZsb3cgdGhhdCBsZWFkcyB0byBgcmVnX2NoZWNrX2NoYW5uZWxzYC4gVGhhdCYjMzk7cyB0aGUga2V5LiBJIGNhbiYjMzk7dCBqdXN0IGxvb2sgYXQgdGhlIGZ1bmN0aW9uIGRlZmluaXRpb247IEkgbmVlZCB0byBzZWUgd2hlcmUgaXQmIzM5O3MgYmVpbmcgKnVzZWQqLiBJIG5lZWQgdG8gaWRlbnRpZnkgdGhlIGNhbGwgc2l0ZXMuIFRpbWUgdG8gZ2V0IG15IGJlYXJpbmdzIGFuZCB0cmFjZSB0aGUgY2FsbHMuIEkmIzM5O20gZ29pbmcgdG8gZm9sbG93IHRoZSBicmVhZGNydW1icyBhbmQgc2VlIHdoZXJlIHRoYXQgZnVuY3Rpb24gaXMgYmVpbmcgaW52b2tlZC4gVW5kZXJzdGFuZGluZyB0aGUgY29udGV4dCB3aWxsIGdpdmUgbWUgY2x1ZXMgYWJvdXQgaXRzIHB1cnBvc2UgYW5kIGhvdyBpdCBmaXRzIGludG8gdGhlIGxhcmdlciBhcmNoaXRlY3R1cmUuIExldCYjMzk7cyBkaWcgaW4gYW5kIGZpbmQgdGhvc2UgY2FsbCBsb2NhdGlvbnMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA1IDAxOjA0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3JlZ19jaGVja19jaGFubmVscyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC93aXJlbGVzcy8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L3dpcmVsZXNzL25sODAyMTEuYz0yMzQwNz12b2lkIGNmZzgwMjExX3NjaGVkdWxlX2NoYW5uZWxzX2NoZWNrKHN0cnVjdCB3aXJlbGVzc19kZXYgKndkZXYpXG4tLVxubmV0L3dpcmVsZXNzL25sODAyMTEuYy0yMzQxNi1cdCAgICAgd2lwaHktXHUwMDNlcmVndWxhdG9yeV9mbGFncyBcdTAwMjYgUkVHVUxBVE9SWV9FTkFCTEVfUkVMQVhfTk9fSVIpKSlcbm5ldC93aXJlbGVzcy9ubDgwMjExLmM6MjM0MTc6XHRcdHJlZ19jaGVja19jaGFubmVscygpO1xubmV0L3dpcmVsZXNzL25sODAyMTEuYy0yMzQxOC19XG4tLVxubmV0L3dpcmVsZXNzL3JlZy5jPTI0NjQ9c3RhdGljIHZvaWQgcmVnX2NoZWNrX2NoYW5zX3dvcmsoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxuLS1cbm5ldC93aXJlbGVzcy9yZWcuYy0yNDg1LVxubmV0L3dpcmVsZXNzL3JlZy5jOjI0ODY6dm9pZCByZWdfY2hlY2tfY2hhbm5lbHModm9pZClcbm5ldC93aXJlbGVzcy9yZWcuYy0yNDg3LXtcbi0tXG5uZXQvd2lyZWxlc3MvcmVnLmM9MjUyNz1zdGF0aWMgdm9pZCB1cGRhdGVfYWxsX3dpcGh5X3JlZ3VsYXRvcnkoZW51bSBubDgwMjExX3JlZ19pbml0aWF0b3IgaW5pdGlhdG9yKVxuLS1cbm5ldC93aXJlbGVzcy9yZWcuYy0yNTM4LVxubmV0L3dpcmVsZXNzL3JlZy5jOjI1Mzk6XHRyZWdfY2hlY2tfY2hhbm5lbHMoKTtcbm5ldC93aXJlbGVzcy9yZWcuYy0yNTQwLX1cbi0tXG5uZXQvd2lyZWxlc3MvcmVnLmM9MzAyNT1zdGF0aWMgdm9pZCByZWdfcHJvY2Vzc19oaW50KHN0cnVjdCByZWd1bGF0b3J5X3JlcXVlc3QgKnJlZ19yZXF1ZXN0KVxuLS1cbm5ldC93aXJlbGVzcy9yZWcuYy0zMDY4LVx0XHR3aXBoeV9hbGxfc2hhcmVfZGZzX2NoYW5fc3RhdGUod2lwaHkpO1xubmV0L3dpcmVsZXNzL3JlZy5jOjMwNjk6XHRcdHJlZ19jaGVja19jaGFubmVscygpO1xubmV0L3dpcmVsZXNzL3JlZy5jLTMwNzAtXHR9XG4tLVxubmV0L3dpcmVsZXNzL3JlZy5jPTMxOTc9c3RhdGljIHZvaWQgcmVnX3Byb2Nlc3Nfc2VsZl9tYW5hZ2VkX2hpbnRzKHZvaWQpXG4tLVxubmV0L3dpcmVsZXNzL3JlZy5jLTMyMDgtXG5uZXQvd2lyZWxlc3MvcmVnLmM6MzIwOTpcdHJlZ19jaGVja19jaGFubmVscygpO1xubmV0L3dpcmVsZXNzL3JlZy5jLTMyMTAtfVxuLS1cbm5ldC93aXJlbGVzcy9yZWcuYz0zMjg1PXZvaWQgcmVndWxhdG9yeV9oaW50X2luZG9vcihib29sIGlzX2luZG9vciwgdTMyIHBvcnRpZClcbi0tXG5uZXQvd2lyZWxlc3MvcmVnLmMtMzMwNi1cdGlmICghaXNfaW5kb29yKVxubmV0L3dpcmVsZXNzL3JlZy5jOjMzMDc6XHRcdHJlZ19jaGVja19jaGFubmVscygpO1xubmV0L3dpcmVsZXNzL3JlZy5jLTMzMDgtfVxuLS1cbm5ldC93aXJlbGVzcy9yZWcuYz0zMzEwPXZvaWQgcmVndWxhdG9yeV9uZXRsaW5rX25vdGlmeSh1MzIgcG9ydGlkKVxuLS1cbm5ldC93aXJlbGVzcy9yZWcuYy0zMzIzLVxubmV0L3dpcmVsZXNzL3JlZy5jOjMzMjQ6XHRyZWdfY2hlY2tfY2hhbm5lbHMoKTtcbm5ldC93aXJlbGVzcy9yZWcuYy0zMzI1LX1cbi0tXG5uZXQvd2lyZWxlc3MvcmVnLmM9MzQ4OT1zdGF0aWMgdm9pZCByZXN0b3JlX3JlZ3VsYXRvcnlfc2V0dGluZ3MoYm9vbCByZXNldF91c2VyLCBib29sIGNhY2hlZClcbi0tXG5uZXQvd2lyZWxlc3MvcmVnLmMtMzUwNi1cdFx0cmVnX2lzX2luZG9vciA9IGZhbHNlO1xubmV0L3dpcmVsZXNzL3JlZy5jOjM1MDc6XHRcdHJlZ19jaGVja19jaGFubmVscygpO1xubmV0L3dpcmVsZXNzL3JlZy5jLTM1MDgtXHR9XG4tLVxubmV0L3dpcmVsZXNzL3JlZy5jPTQwNzY9aW50IHJlZ3VsYXRvcnlfc2V0X3dpcGh5X3JlZ2Rfc3luYyhzdHJ1Y3Qgd2lwaHkgKndpcGh5LFxuLS1cbm5ldC93aXJlbGVzcy9yZWcuYy00MDg4LVx0cmVnX3Byb2Nlc3Nfc2VsZl9tYW5hZ2VkX2hpbnQod2lwaHkpO1xubmV0L3dpcmVsZXNzL3JlZy5jOjQwODk6XHRyZWdfY2hlY2tfY2hhbm5lbHMoKTtcbm5ldC93aXJlbGVzcy9yZWcuYy00MDkwLVx0cmV0dXJuIDA7XG4tLVxubmV0L3dpcmVsZXNzL3JlZy5oPTE3ND1pbnQgcmVnX3JlbG9hZF9yZWdkYih2b2lkKTtcbi0tXG5uZXQvd2lyZWxlc3MvcmVnLmgtMTc2LS8qKlxubmV0L3dpcmVsZXNzL3JlZy5oOjE3NzogKiByZWdfY2hlY2tfY2hhbm5lbHMgLSBzY2hlZHVsZSByZWd1bGF0b3J5IGVuZm9yY2VtZW50XG5uZXQvd2lyZWxlc3MvcmVnLmgtMTc4LSAqL1xubmV0L3dpcmVsZXNzL3JlZy5oOjE3OTp2b2lkIHJlZ19jaGVja19jaGFubmVscyh2b2lkKTtcbm5ldC93aXJlbGVzcy9yZWcuaC0xODAtXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA1IDAxOjA0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIyMTg0CgkJCQkJCQlvdXRwdXQ6IDE4MgoJCQkJCQkJdGhvdWdodHM6IDYyOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBbmFseXNpcyBvZiBhIENvbmN1cnJlbmN5IFZ1bG5lcmFiaWxpdHkgaW4gV2lyZWxlc3MgUmVndWxhdG9yeSBIYW5kbGluZyoqCgpPa2F5LCBzbyBJJiMzOTt2ZSBiZWVuIGRpZ2dpbmcgaW50byB0aGlzIHBvdGVudGlhbCBjb25jdXJyZW5jeSBpc3N1ZSBpbiB0aGUgd2lyZWxlc3Mgc3RhY2ssIHNwZWNpZmljYWxseSBhcm91bmQgcmVndWxhdG9yeSBkb21haW4gaGFuZGxpbmcuIEl0IHNlZW1zIHRoYXQgYHJlZ19jaGVja19jaGFuc193b3JrYCDigJMgd2hpY2ggaXMgY2FsbGVkIGR1cmluZyByZWd1bGF0b3J5IGRvbWFpbiBzZXR0aW5ncywgd2lmaSBjb25maWd1cmF0aW9uLCBqb2luLCBhbmQgc2NhbiBvcGVyYXRpb25zIHRocm91Z2ggbmw4MDIxMSDigJMgaXMgdGhlIGN1bHByaXQuIFRoZSB2dWxuZXJhYmlsaXR5IGFyaXNlcyBmcm9tIGhvdyBpdCBpbnRlcmFjdHMgd2l0aCB0aGUgUkNVIG1lY2hhbmlzbS4gVGhlcmUmIzM5O3MgdGhpcyBjb25jdXJyZW5jeSBidWcgd2hlcmUgdW5sb2NraW5nIHRoZSBSQ1UgcmVhZCBsb2NrIHdpdGhpbiB0aGUgYGxpc3RfZm9yX2VhY2hfZW50cnlfcmN1YCBsb29wIGNvdWxkIGxlYWQgdG8gbG9ja2RlcCB3YXJuaW5ncywgUkNVIHdhcm5pbmdzLCBvciBldmVuIHVzZS1hZnRlci1mcmVlIG9yIGxpc3QgY29ycnVwdGlvbiBpZiBhIHdpcGh5IGlzIHJlZ2lzdGVyZWQgb3IgdW5yZWdpc3RlcmVkIHNpbXVsdGFuZW91c2x5LiBUaGF0JiMzOTtzIGEgbmFzdHkgc2l0dWF0aW9uLCBlc3BlY2lhbGx5IGluIGEgcGFydCBvZiB0aGUga2VybmVsIGV4cG9zZWQgdG8gdXNlci1zcGFjZS4KClRoZSBmaXJzdCB0aGluZyBJIGRpZCB3YXMgbWFrZSBzdXJlIHRoZSBiYXNpY3MgYXJlIGluIHBsYWNlLiBUaGUgb2J2aW91cyBkZXBlbmRlbmN5IGhlcmUgaXMgYENGRzgwMjExYCwgYW5kIGl0IGxvb2tzIGxpa2UgYHJlZ19jaGVja19jaGFuc193b3JrYCBpcyB1bmNvbmRpdGlvbmFsbHkgY29tcGlsZWQgd2hlbiB0aGF0JiMzOTtzIGVuYWJsZWQuIEdvb2QuCgpOZXh0LCBJIGxvb2tlZCBhdCB0aGUgc3ltYm9scyBkaXJlY3RseSBpbnZvbHZlZC4gSSBmb3VuZCB0aGVzZSBrZXkgZnVuY3Rpb25zOiBgcmVnX2NoZWNrX2NoYW5zX3dvcmtgLCBgcmVnX2NoZWNrX2NoYW5uZWxzYCwgYHJlZ19sZWF2ZV9pbnZhbGlkX2NoYW5zYCwgYW5kIHRob3NlIHNjaGVkdWxpbmcgZnVuY3Rpb25zIGxpa2UgYGNmZzgwMjExX3NjaGVkdWxlX2NoYW5uZWxzX2NoZWNrYCwgYHJlZ3VsYXRvcnlfaGludF9pbmRvb3JgLCBhbmQgYHJlZ3VsYXRvcnlfc2V0X3dpcGh5X3JlZ2Rfc3luY2AuIEkgZG91YmxlLWNoZWNrZWQgdGhhdCBgcmVnX2NoZWNrX2NoYW5zX3dvcmtgIGNhbGxzIGByZWdfbGVhdmVfaW52YWxpZF9jaGFuc2AgYW5kIHRoYXQgYHJlZ19jaGVja19jaGFubmVsc2Agc2NoZWR1bGVzIHRoZSB3b3JrLiBBbHNvLCB3aGlsZSBgcmVnX2NoZWNrX2NoYW5zX3dvcmtgIGFuZCBgcmVnX2xlYXZlX2ludmFsaWRfY2hhbnNgIGFyZSBib3RoIHN0YXRpYywgYHJlZ19jaGVja19jaGFuc193b3JrYCB3aWxsIHN0aWxsIHNob3cgdXAgYXMgYSBkaXN0aW5jdCBzeW1ib2wgaW4gdm1saW51eCBhcyBhIHdvcmsgaXRlbSBjYWxsYmFjay4gYHJlZ19jaGVja19jaGFubmVsc2AgaXMgbm9uLXN0YXRpYy4KCkdpdmVuIGFsbCB0aGlzLCBJJiMzOTttIHByZXR0eSBjb25maWRlbnQgdGhhdCBmdXp6aW5nIHRoaXMgaXMgdGhlIHJpZ2h0IGFwcHJvYWNoLiBUaGUgcGF0Y2ggbW9kaWZpZXMgYHJlZ19jaGVja19jaGFuc193b3JrYCB3aXRoaW4gYGNmZzgwMjExYCwgYW5kIHNwZWNpZmljYWxseSBtb2RpZmllcyBsb2NraW5nIGFuZCBSQ1UgaXRlcmF0aW9ucyBvdmVyIGBjZmc4MDIxMV9yZGV2X2xpc3RgIGJ5IGRyb3BwaW5nIGFuZCByZWFjcXVpcmluZyBsb2NrcyBpbnNpZGUgdGhlIGxvb3AuIFRoaXMgY29kZSBpcyB0cmlnZ2VyZWQgZnJvbSB1c2Vyc3BhY2UsIHNvIGNvbmN1cnJlbmN5IHByb2JsZW1zIGFyZSBhIHJlYWwgcmlzay4gVGhlIGtleSBpcyB0byB0ZXN0IHRoZSBSQ1UgbGlzdCB0cmF2ZXJzYWwgYW5kIHRoZSBzYWZldHkgb2YgY29uY3VycmVudCByZWd1bGF0b3J5IGRvbWFpbiBvcGVyYXRpb25zLgoKU28sIHRoZSBjcml0ZXJpYSBhcmUgY2xlYXI6IGBXb3J0aEZ1enppbmc6IHRydWVgLCB0aGUgbmVjZXNzYXJ5IGNvbmZpZyBpcyBgQ0ZHODAyMTFgLCBhbmQgdGhlIGBGb2N1c1N5bWJvbHNgIGFyZSBgcmVnX2NoZWNrX2NoYW5zX3dvcmtgLCBgcmVnX2NoZWNrX2NoYW5uZWxzYCwgYW5kIGByZWdfbGVhdmVfaW52YWxpZF9jaGFuc2AuIFRpbWUgdG8gY2FsbCBgc2V0LXJlc3VsdHNgLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNSAwMTowNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7Q0ZHODAyMTEmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtyZWdfY2hlY2tfY2hhbnNfd29yayYjMzQ7LAogICAgJiMzNDtyZWdfY2hlY2tfY2hhbm5lbHMmIzM0OywKICAgICYjMzQ7cmVnX2xlYXZlX2ludmFsaWRfY2hhbnMmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggY2hhbmdlcyBsb2NraW5nIGFuZCBSQ1UgaXRlcmF0aW9uIGluIHJlZ19jaGVja19jaGFuc193b3JrKCkgd2l0aGluIGNmZzgwMjExIChuZXQvd2lyZWxlc3MvcmVnLmMpLCByZWxlYXNpbmcgYW5kIHJlLWFjcXVpcmluZyByY3VfcmVhZF9sb2NrIGFuZCBydG5sX2xvY2sgaW5zaWRlIGxpc3RfZm9yX2VhY2hfZW50cnlfcmN1LiBUaGlzIHJlYWNoYWJsZSBjb2RlIHBhdGggaGFuZGxlcyByZWd1bGF0b3J5IGRvbWFpbiBjaGFubmVsIHZhbGlkYXRpb24gYW5kIGludGVyZmFjZSBkaXNjb25uZWN0aW9uLCB3aGljaCBjYW4gYmUgdHJpZ2dlcmVkIHZpYSBubDgwMjExIHJlZ3VsYXRvcnkgY29tbWFuZHMuIEZ1enppbmcgaXMgd2FycmFudGVkIHRvIHRlc3QgZm9yIGNvbmN1cnJlbmN5IGJ1Z3MsIGxpc3QgdHJhdmVyc2FsIGlzc3VlcywgYW5kIFJDVS9sb2NrZGVwIHdhcm5pbmdzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtDRkc4MDIxMSYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3JlZ19jaGVja19jaGFuc193b3JrJiMzNDssCiAgICAmIzM0O3JlZ19jaGVja19jaGFubmVscyYjMzQ7LAogICAgJiMzNDtyZWdfbGVhdmVfaW52YWxpZF9jaGFucyYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBjaGFuZ2VzIGxvY2tpbmcgYW5kIFJDVSBpdGVyYXRpb24gaW4gcmVnX2NoZWNrX2NoYW5zX3dvcmsoKSB3aXRoaW4gY2ZnODAyMTEgKG5ldC93aXJlbGVzcy9yZWcuYyksIHJlbGVhc2luZyBhbmQgcmUtYWNxdWlyaW5nIHJjdV9yZWFkX2xvY2sgYW5kIHJ0bmxfbG9jayBpbnNpZGUgbGlzdF9mb3JfZWFjaF9lbnRyeV9yY3UuIFRoaXMgcmVhY2hhYmxlIGNvZGUgcGF0aCBoYW5kbGVzIHJlZ3VsYXRvcnkgZG9tYWluIGNoYW5uZWwgdmFsaWRhdGlvbiBhbmQgaW50ZXJmYWNlIGRpc2Nvbm5lY3Rpb24sIHdoaWNoIGNhbiBiZSB0cmlnZ2VyZWQgdmlhIG5sODAyMTEgcmVndWxhdG9yeSBjb21tYW5kcy4gRnV6emluZyBpcyB3YXJyYW50ZWQgdG8gdGVzdCBmb3IgY29uY3VycmVuY3kgYnVncywgbGlzdCB0cmF2ZXJzYWwgaXNzdWVzLCBhbmQgUkNVL2xvY2tkZXAgd2FybmluZ3MuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTkvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA1IDAxOjA0PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5JZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDUgMDE6MDQ8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Y29yZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgbG9ja2luZyBhbmQgUkNVIGxpc3QgdHJhdmVyc2FsIHN0cmF0ZWd5IGluIHJlZ19jaGVja19jaGFuc193b3JrKCkgKG5ldC93aXJlbGVzcy9yZWcuYykgYnkgZHJvcHBpbmcgYW5kIHJlLWFjcXVpcmluZyByY3VfcmVhZF9sb2NrKCkgYW5kIHJ0bmxfbG9jaygpIGFyb3VuZCBlYWNoIGl0ZXJhdGlvbiBvZiBjZmc4MDIxMV9yZGV2X2xpc3QuXG5cblRoaXMgY2hhbmdlIGRvZXMgbm90IGludHJvZHVjZSBhbnkgbWVtb3J5IGFsbG9jYXRpb25zLCBkb2VzIG5vdCByZWFkIG9yIHdyaXRlIHVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBmaWVsZHMsIGRvZXMgbm90IGFsdGVyIGJ1ZmZlciBsZW5ndGgvYm91bmRzIGNhbGN1bGF0aW9ucywgYW5kIGRvZXMgbm90IHBhc3Mga2VybmVsIGRhdGEgdG8gdXNlcnNwYWNlLiBBbnkgY29uY3VycmVuY3ksIHVzZS1hZnRlci1mcmVlLCBvciBsaXN0IGNvcnJ1cHRpb24gaXNzdWVzIHN0ZW1taW5nIGZyb20gZHJvcHBpbmcgUkNVIGR1cmluZyBsaXN0IHRyYXZlcnNhbCBhcmUgZGV0ZWN0YWJsZSBieSBzdGFuZGFyZCBkZWJ1Z2dpbmcgdG9vbHMgKEtBU0FOLCBMT0NLREVQLCBhbmQgQ09ORklHX1BST1ZFX1JDVSkuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCB3YXJyYW50ZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5CmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kCmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikKZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuCgpDUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjoKLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlCiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOCiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUAogIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuCi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsCiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLgoKUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTiwKTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy4KQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWQpzZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrcwp0aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLgoKTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3QKdW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsCmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5cwp0aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZwp1bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2wKZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLApjYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy4KClNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczoKMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2IKICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHMKICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC4KMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlcwogICBvciBzdHJ1Y3QgZmllbGRzLgozLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzCiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuCjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzCiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy4KClNldCBOZWVkc0tNU0FOPWZhbHNlIElGOgotIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyCiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0CiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLgotIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkCiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLgotIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy4KClVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGUKZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5UYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NAoKRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCA5MDliYWU2M2U0Y2I4ZGJiOGMyYWVhMTAzZWRkZDBjYWJhOWFkYzc1CkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFNhdCBTZXAgNSAwMTowMzo0NyAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL25ldC93aXJlbGVzcy9yZWcuYyBiL25ldC93aXJlbGVzcy9yZWcuYwppbmRleCBhODMzNmJhZjg1ZGM2Li5hMmUwZDFjZjgzMTdjIDEwMDY0NAotLS0gYS9uZXQvd2lyZWxlc3MvcmVnLmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L3dpcmVsZXNzL3JlZy5jCkBAIC0yNDY2LDEyICYjNDM7MjQ2NiwyMSBAQCBzdGF0aWMgdm9pZCByZWdfY2hlY2tfY2hhbnNfd29yayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspCiAJc3RydWN0IGNmZzgwMjExX3JlZ2lzdGVyZWRfZGV2aWNlICpyZGV2OwogCiAJcHJfZGVidWcoJiMzNDtWZXJpZnlpbmcgYWN0aXZlIGludGVyZmFjZXMgYWZ0ZXIgcmVnIGNoYW5nZVxuJiMzNDspOwotCXJ0bmxfbG9jaygpOwotCi0JZm9yX2VhY2hfcmRldihyZGV2KQomIzQzOwkvKgomIzQzOwkgKiBBY3F1aXJlIHJ0bmwgcGVyLWRldmljZSBpbnN0ZWFkIG9mIGhvbGRpbmcgaXQgZm9yIHRoZSBlbnRpcmUgbG9vcDsKJiM0MzsJICogY2ZnODAyMTFfbGVhdmUoKSBjYW4gYmUgc2xvdyBhbmQgc3RhcnZlIG90aGVyIHJ0bmwgd2FpdGVycyBvdGhlcndpc2UuCiYjNDM7CSAqIHdpcGh5X3VucmVnaXN0ZXIoKSBob2xkcyBydG5sIGFjcm9zcyBsaXN0X2RlbF9yY3UoKSAmIzQzOyBzeW5jaHJvbml6ZV9yY3UoKSwKJiM0MzsJICogc28gcmRldiBjYW5ub3QgYmUgZnJlZWQgd2hpbGUgd2UgaG9sZCBydG5sX2xvY2soKSBiZWxvdy4KJiM0MzsJICovCiYjNDM7CXJjdV9yZWFkX2xvY2soKTsKJiM0MzsJbGlzdF9mb3JfZWFjaF9lbnRyeV9yY3UocmRldiwgJmFtcDtjZmc4MDIxMV9yZGV2X2xpc3QsIGxpc3QpIHsKJiM0MzsJCXJjdV9yZWFkX3VubG9jaygpOwomIzQzOwkJcnRubF9sb2NrKCk7CiAJCXJlZ19sZWF2ZV9pbnZhbGlkX2NoYW5zKCZhbXA7cmRldi0mZ3Q7d2lwaHkpOwotCi0JcnRubF91bmxvY2soKTsKJiM0MzsJCXJ0bmxfdW5sb2NrKCk7CiYjNDM7CQlyY3VfcmVhZF9sb2NrKCk7CiYjNDM7CX0KJiM0MzsJcmN1X3JlYWRfdW5sb2NrKCk7CiB9CiAKIHZvaWQgcmVnX2NoZWNrX2NoYW5uZWxzKHZvaWQpCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIxLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNSAwMTowNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMjcxCgkJCQkJCQlvdXRwdXQ6IDMxCgkJCQkJCQl0aG91Z2h0czogOTk1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKktNU0FOIEV2YWx1YXRpb246IFBhdGNoIFJldmlldyoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBNeSB0YXNrIGlzIHRvIGRldGVybWluZSBpZiB0aGlzIHBhdGNoIG5lY2Vzc2l0YXRlcyBhIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiwgb3IgaWYgc3RhbmRhcmQgY2hlY2tzIGxpa2UgS0FTQU4gYW5kIExPQ0tERVAgYXJlIHN1ZmZpY2llbnQuIEl0JiMzOTtzIGEgc3RhbmRhcmQga2VybmVsIFFBIGRlY2lzaW9uLCBub3RoaW5nIHRvbyBvdXQgb2YgdGhlIG9yZGluYXJ5LgoKRmlyc3QsIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQgdGhpcyBwYXRjaCBhY3R1YWxseSAqZG9lcyouIEl0IGxvb2tzIGxpa2UgaXQmIzM5O3MgYSBjaGFuZ2Ugd2l0aGluIGBuZXQvd2lyZWxlc3MvcmVnLmNgLCBzcGVjaWZpY2FsbHkgaW4gYHJlZ19jaGVja19jaGFuc193b3JrYC4gVGhleSYjMzk7cmUgbW9kaWZ5aW5nIGhvdyB0aGUgY29kZSBpdGVyYXRlcyB0aHJvdWdoIGEgbGlzdCBvZiByZWdpc3RlcmVkIGRldmljZXMgKGBjZmc4MDIxMV9yZGV2X2xpc3RgKSBhbmQgY2FsbHMgYHJlZ19sZWF2ZV9pbnZhbGlkX2NoYW5zYC4gVGhlIG9yaWdpbmFsIGNvZGUgaGVsZCBgcnRubF9sb2NrKClgIGZvciB0aGUgZW50aXJlIGxvb3AsIGJ1dCB0aGlzIHBhdGNoIGludHJvZHVjZXMgUkNVIGxvY2tpbmcgYXJvdW5kIHRoZSBsaXN0IGl0ZXJhdGlvbiwgZHJvcHBpbmcgYW5kIHJlYWNxdWlyaW5nIHRoZSBsb2NrIGluIGVhY2ggbG9vcCBpdGVyYXRpb24sIGFuZCBkcm9wcGluZyBSVE5MIGFzIHdlbGwuCgpOb3csIHRoZSByZWQgZmxhZy4gVGhpcyBSQ1UgbGlzdCB0cmF2ZXJzYWwgd2l0aCBsb2NraW5nIG1hbmlwdWxhdGlvbiBwYXR0ZXJuLi4uIHRoYXQgd2FycmFudHMgY2xvc2Ugc2NydXRpbnkuIFRoZSB1c2Ugb2YgYGxpc3RfZm9yX2VhY2hfZW50cnlfcmN1YCBpbnNpZGUgdGhlIFJDVSByZWFkIGxvY2sgd2l0aCBkcm9wcGluZyBhbmQgcmUtYWNxdWlyaW5nIHRoZSBsb2NrIHdpdGhpbiB0aGUgbG9vcCBpcyBhIGNsYXNzaWMgc2V0dXAgZm9yIHBvdGVudGlhbCBjb25jdXJyZW5jeSBpc3N1ZXMuIFdpdGggdGhlIHJlLWVudHJhbnQgbG9ja2luZywgYW5kIHVubG9ja2VkIHdpbmRvdyBmb3Igb3RoZXIgb3BlcmF0aW9ucywgYSB1c2UtYWZ0ZXItZnJlZSBzY2VuYXJpbyBvciBsaXN0IGNvcnJ1cHRpb24gaXMgKmhpZ2hseSogcGxhdXNpYmxlLiBUaGUgY29tbWVudCBjbGFpbXMgYHdpcGh5X3VucmVnaXN0ZXIoKWAgaG9sZHMgcnRubCBhY3Jvc3MgYGxpc3RfZGVsX3JjdSgpYCBhbmQgYHN5bmNocm9uaXplX3JjdSgpYCwgYnV0IGV2ZW4gd2l0aCB0aGF0IGNsYWltLCB0aGUgcG90ZW50aWFsIGZvciBhIHJhY2Ugd2l0aCB0aGUgc3luY2hyb25pemVfcmN1L3VucmVnaXN0ZXIgYW5kIHRoZSB1bi1sb2NrZWQgc2VjdGlvbiBvZiB0aGUgbG9vcCBzdGlsbCBleGlzdHMuIFdlIGNvdWxkIGJlIGRlYWxpbmcgd2l0aCBhIGByZGV2YCB0aGF0JiMzOTtzIGJlZW4gZnJlZWQgb3IgaGFkIGl0cyBsaXN0IGVudHJpZXMgY29ycnVwdGVkIGJldHdlZW4gdGhlIGNhbGxzLgoKSG93ZXZlciwgSSBuZWVkIHRvIGNvbnNpZGVyIHdoZXRoZXIgaXQgKmludHJvZHVjZXMqIG5ldyBpc3N1ZXMuIERvZXMgdGhpcyBwYXRjaCBjaGFuZ2UgYW55dGhpbmcgdGhhdCBkaXJlY3RseSBpbnRlcmFjdHMgd2l0aCB1bmluaXRpYWxpemVkIG1lbW9yeT8gTm8uIFRoZSBjb2RlIG1vZGlmaWVzIGxvY2tpbmcgYW5kIGxpc3QgdHJhdmVyc2FsLCBidXQgZG9lc24mIzM5O3QgaW50cm9kdWNlIGFsbG9jYXRpb25zLCBjb3BpZXMgb2YgdW5pbml0aWFsaXplZCBkYXRhIHRvIHVzZXJzcGFjZSwgYWNjZXNzIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzLCBvciBzdHJ1Y3QgcGFkZGluZyBpc3N1ZXMuIEl0IGlzIHBvc3NpYmxlLCBidXQgc2VlbXMgdW5saWtlbHkgaW4gdGhpcyBjYXNlLCB0aGF0IGFuIGVudGlyZWx5IG5ldyBjb2RlLXBhdGggY291bGQgaW50cm9kdWNlIHN1Y2guIEkgd2lsbCBjaGVjay4KClRoZXJlZm9yZSwgc2luY2UgdGhlIHBvdGVudGlhbCB2dWxuZXJhYmlsaXRpZXMgbGllIHdpdGhpbiBjb25jdXJyZW5jeSBpc3N1ZXMsIEtBU0FOIGFuZCBMT0NLREVQIHdvdWxkIGNhdGNoIHVzZS1hZnRlci1mcmVlIGFuZCBsb2NraW5nIC8gY29uY3VycmVuY3kgaXNzdWVzLCBhcyB3ZWxsIGFzIEtDU0FOLiBLTVNBTiBpcyB1bm5lY2Vzc2FyeSBmb3IgdGhpcyBwYXRjaC4gSSYjMzk7bGwgZG91YmxlLWNoZWNrIHdpdGggYSBncmVwIG9yIGNvZGUgc2NhbiBqdXN0IHRvIGJlIGFic29sdXRlbHkgY2VydGFpbiBJJiMzOTttIG5vdCBtaXNzaW5nIGFueXRoaW5nIHRoYXQgd291bGQgaW52b2x2ZSByZWFkaW5nIGZyb20gdW5pbml0aWFsaXplZCBtZW1vcnkuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjIvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA1IDAxOjA0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3JlZ19jaGVja19jaGFuc193b3JrJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L3dpcmVsZXNzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC93aXJlbGVzcy9yZWcuYz0yMjE9c3RydWN0IHJlZ19iZWFjb24ge1xuLS1cbm5ldC93aXJlbGVzcy9yZWcuYy0yMjUtXG5uZXQvd2lyZWxlc3MvcmVnLmM6MjI2OnN0YXRpYyB2b2lkIHJlZ19jaGVja19jaGFuc193b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yayk7XG5uZXQvd2lyZWxlc3MvcmVnLmM6MjI3OnN0YXRpYyBERUNMQVJFX0RFTEFZRURfV09SSyhyZWdfY2hlY2tfY2hhbnMsIHJlZ19jaGVja19jaGFuc193b3JrKTtcbm5ldC93aXJlbGVzcy9yZWcuYy0yMjgtXG4tLVxubmV0L3dpcmVsZXNzL3JlZy5jPTI0NDk9c3RhdGljIHZvaWQgcmVnX2xlYXZlX2ludmFsaWRfY2hhbnMoc3RydWN0IHdpcGh5ICp3aXBoeSlcbi0tXG5uZXQvd2lyZWxlc3MvcmVnLmMtMjQ2My1cbm5ldC93aXJlbGVzcy9yZWcuYzoyNDY0OnN0YXRpYyB2b2lkIHJlZ19jaGVja19jaGFuc193b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcbm5ldC93aXJlbGVzcy9yZWcuYy0yNDY1LXtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMy8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDUgMDE6MDQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDA2NAoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDI0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRha2Ugb24gdGhlIHRob3VnaHQgcHJvY2VzcywgYXMgaWYgaXQgd2VyZSBteSBvd246CgoqKkRpdmluZyBpbnRvIHRoZSBDaGFubmVsIFJlZ3VsYXRpb24gQ29kZSoqCgpPa2F5LCB0aW1lIHRvIGdldCBteSBoYW5kcyBkaXJ0eS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZSBzeXN0ZW0gaGFuZGxlcyBpbnZhbGlkIGNoYW5uZWxzIGR1cmluZyByZWd1bGF0b3J5IGRvbWFpbiBjaGFuZ2VzLiBMZXQmIzM5O3Mgc3RhcnQgYnkgemVyb2luZyBpbiBvbiBgcmVnX2xlYXZlX2ludmFsaWRfY2hhbnNgIHdpdGhpbiBgbmV0L3dpcmVsZXNzL3JlZy5jYC4gVGhpcyBmdW5jdGlvbiBuYW1lIHNlZW1zIGxpa2UgYSBnb29kIHN0YXJ0aW5nIHBvaW50LiBJdCYjMzk7cyB0aGUgbG9naWNhbCBwbGFjZSB0byBzZWUgaG93IHRoZSBrZXJuZWwgZGVhbHMgd2l0aCBjaGFubmVscyB0aGF0IGFyZSBubyBsb25nZXIgYWxsb3dlZCBhZnRlciBhIHJlZ3VsYXRvcnkgZG9tYWluIHVwZGF0ZS4gSSBleHBlY3QgaXQmIzM5O2xsIGdpdmUgbWUgY2x1ZXMgYWJvdXQgaG93IHRoZSBkcml2ZXIgaXMgbm90aWZpZWQgYW5kIGhvdyB0aGUgc3lzdGVtIG1pZ2h0IGhhbmRsZSBvbmdvaW5nIHRyYW5zbWlzc2lvbnMgb24gdGhlc2UgY2hhbm5lbHMuIEhvcGVmdWxseSwgdGhpcyBmdW5jdGlvbiBwcm92aWRlcyB0aGUga2V5IHRvIHVuZGVyc3RhbmRpbmcgdGhlIHNwZWNpZmljIGxvZ2ljIG9mIGNoYW5uZWwgaW52YWxpZGF0aW9uLiBJJiMzOTttIGtlZW4gdG8gZGlzc2VjdCB0aGUgY29kZSBhbmQgc2VlIGhvdyByb2J1c3QgdGhlIGltcGxlbWVudGF0aW9uIGlzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI0LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNSAwMTowNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC93aXJlbGVzcy9yZWcuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDI0NDUsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNDUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MjQ0NTpcdFxuMjQ0NjpcdFx0cmV0dXJuIHRydWU7XG4yNDQ3Olx0fVxuMjQ0ODpcdFxuMjQ0OTpcdHN0YXRpYyB2b2lkIHJlZ19sZWF2ZV9pbnZhbGlkX2NoYW5zKHN0cnVjdCB3aXBoeSAqd2lwaHkpXG4yNDUwOlx0e1xuMjQ1MTpcdFx0c3RydWN0IHdpcmVsZXNzX2RldiAqd2RldjtcbjI0NTI6XHRcdHN0cnVjdCBjZmc4MDIxMV9yZWdpc3RlcmVkX2RldmljZSAqcmRldiA9IHdpcGh5X3RvX3JkZXYod2lwaHkpO1xuMjQ1MzpcdFxuMjQ1NDpcdFx0bGlzdF9mb3JfZWFjaF9lbnRyeSh3ZGV2LCBcdTAwMjZyZGV2LVx1MDAzZXdpcGh5LndkZXZfbGlzdCwgbGlzdCkge1xuMjQ1NTpcdFx0XHRib29sIHZhbGlkO1xuMjQ1NjpcdFxuMjQ1NzpcdFx0XHRzY29wZWRfZ3VhcmQod2lwaHksIHdpcGh5KVxuMjQ1ODpcdFx0XHRcdHZhbGlkID0gcmVnX3dkZXZfY2hhbl92YWxpZCh3aXBoeSwgd2Rldik7XG4yNDU5Olx0XHRcdGlmICghdmFsaWQpXG4yNDYwOlx0XHRcdFx0Y2ZnODAyMTFfbGVhdmUocmRldiwgd2RldiwgLTEpO1xuMjQ2MTpcdFx0fVxuMjQ2MjpcdH1cbjI0NjM6XHRcbjI0NjQ6XHRzdGF0aWMgdm9pZCByZWdfY2hlY2tfY2hhbnNfd29yayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXG4yNDY1Olx0e1xuMjQ2NjpcdFx0c3RydWN0IGNmZzgwMjExX3JlZ2lzdGVyZWRfZGV2aWNlICpyZGV2O1xuMjQ2NzpcdFxuMjQ2ODpcdFx0cHJfZGVidWcoXCYjMzQ7VmVyaWZ5aW5nIGFjdGl2ZSBpbnRlcmZhY2VzIGFmdGVyIHJlZyBjaGFuZ2VcXG5cJiMzNDspO1xuMjQ2OTpcdFx0LypcbjI0NzA6XHRcdCAqIEFjcXVpcmUgcnRubCBwZXItZGV2aWNlIGluc3RlYWQgb2YgaG9sZGluZyBpdCBmb3IgdGhlIGVudGlyZSBsb29wO1xuMjQ3MTpcdFx0ICogY2ZnODAyMTFfbGVhdmUoKSBjYW4gYmUgc2xvdyBhbmQgc3RhcnZlIG90aGVyIHJ0bmwgd2FpdGVycyBvdGhlcndpc2UuXG4yNDcyOlx0XHQgKiB3aXBoeV91bnJlZ2lzdGVyKCkgaG9sZHMgcnRubCBhY3Jvc3MgbGlzdF9kZWxfcmN1KCkgJiM0Mzsgc3luY2hyb25pemVfcmN1KCksXG4yNDczOlx0XHQgKiBzbyByZGV2IGNhbm5vdCBiZSBmcmVlZCB3aGlsZSB3ZSBob2xkIHJ0bmxfbG9jaygpIGJlbG93LlxuMjQ3NDpcdFx0ICovXG4yNDc1Olx0XHRyY3VfcmVhZF9sb2NrKCk7XG4yNDc2Olx0XHRsaXN0X2Zvcl9lYWNoX2VudHJ5X3JjdShyZGV2LCBcdTAwMjZjZmc4MDIxMV9yZGV2X2xpc3QsIGxpc3QpIHtcbjI0Nzc6XHRcdFx0cmN1X3JlYWRfdW5sb2NrKCk7XG4yNDc4Olx0XHRcdHJ0bmxfbG9jaygpO1xuMjQ3OTpcdFx0XHRyZWdfbGVhdmVfaW52YWxpZF9jaGFucyhcdTAwMjZyZGV2LVx1MDAzZXdpcGh5KTtcbjI0ODA6XHRcdFx0cnRubF91bmxvY2soKTtcbjI0ODE6XHRcdFx0cmN1X3JlYWRfbG9jaygpO1xuMjQ4MjpcdFx0fVxuMjQ4MzpcdFx0cmN1X3JlYWRfdW5sb2NrKCk7XG4yNDg0Olx0fVxuMjQ4NTpcdFxuMjQ4NjpcdHZvaWQgcmVnX2NoZWNrX2NoYW5uZWxzKHZvaWQpXG4yNDg3Olx0e1xuMjQ4ODpcdFx0LypcbjI0ODk6XHRcdCAqIEdpdmUgdXNlcm1vZGUgYSBjaGFuY2UgdG8gZG8gc29tZXRoaW5nIG5pY2VyIChtb3ZlIHRvIGFub3RoZXJcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNS8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDUgMDE6MDQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNTAwMwoJCQkJCQkJb3V0cHV0OiAxOTAKCQkJCQkJCXRob3VnaHRzOiA0NzMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqS01TQU4gQXNzZXNzbWVudCBvZiB0aGlzIFBhdGNoKioKCkFscmlnaHQsIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIE15IGluaXRpYWwgYXNzZXNzbWVudCBpcyB0aGF0IEtNU0FOIGlzbiYjMzk7dCBuZWVkZWQgaGVyZS4gSSYjMzk7dmUgd2Fsa2VkIHRocm91Z2ggdGhlIHN0YW5kYXJkIEtNU0FOIGNoZWNrcywgYW5kIG5vdGhpbmcgc2NyZWFtcyAmIzM0O3BvdGVudGlhbCB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkJiMzNDsgYXQgbWUuCgpTcGVjaWZpY2FsbHksIEkgbG9va2VkIGZvcjoKMS4gIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSB3aGVyZSBpbml0aWFsaXphdGlvbiBtaWdodCBiZSBzbG9wcHkuIE5vcGUuCjIuICBDb25kaXRpb25hbCBsb2dpYyBiYXNlZCBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIGRhdGEuIE5vdCBzZWVpbmcgaXQuCjMuICBDb21wbGV4IGRhdGEgc3RydWN0dXJlIGluaXRpYWxpemF0aW9uIHRoYXQgY291bGQgbGVhZCB0byB1bmluaXRpYWxpemVkIHJlYWRzIGxhdGVyLiBOZWdhdGl2ZS4KNC4gIEJvdW5kcyBjaGVjayBpc3N1ZXMgdGhhdCBjb3VsZCBleHBvc2UgdW5pbml0aWFsaXplZCBidWZmZXIgYnl0ZXMuIE5hZGEuCgpUaGUgcG90ZW50aWFsIGlzc3VlcyBJICpkbyogc2VlIGFyZSBhcm91bmQgY29uY3VycmVuY3ksIFJDVSBsaXN0IGl0ZXJhdGlvbiwgYW5kIGxvY2tpbmc6IHNwZWNpZmljYWxseSwgdGhpbmdzIGxpa2UgbGlzdCBpdGVyYXRpb24gdmFsaWRpdHkgYWNyb3NzIFJDVSB1bmxvY2svbG9jayBib3VuZGFyaWVzLCBzbGVlcGFibGUgbG9ja3MgaW5zaWRlIFJDVSAodGhvdWdoIGl0IHVubG9ja3MgUkNVIGJlZm9yZSBsb2NraW5nIFJUTkwpLCBhbmQgdXNlLWFmdGVyLWZyZWUgb3IgbGlzdCBjb3JydXB0aW9uIGlmIGVsZW1lbnRzIGFyZSByZW1vdmVkIGR1cmluZyB0aGUgaXRlcmF0aW9uLiBIb3dldmVyLCB0aG9zZSBhcmUgKmV4YWN0bHkqIHRoZSBraW5kcyBvZiBpc3N1ZXMgS0FTQU4sIExPQ0tERVAsIGFuZCB0aGUgc3RhbmRhcmQga2VybmVsIGRlYnVnZ2luZyB0b29scyAobGlrZSBDT05GSUdfUFJPVkVfUkNVIGFuZCBDT05GSUdfREVCVUdfTElTVCkgYXJlIGRlc2lnbmVkIHRvIGNhdGNoLiBUaGF0JiMzOTtzIHJlYXNzdXJpbmcuCgpTbywgdGhlIHBhdGNoIGlzIGNoYW5naW5nIGByZWdfY2hlY2tfY2hhbnNfd29yaygpYCBpbiBgbmV0L3dpcmVsZXNzL3JlZy5jYC4gSXQmIzM5O3Mgc3dpdGNoaW5nIGZyb20gaG9sZGluZyBgcnRubF9sb2NrKClgIGZvciB0aGUgZW50aXJlIGBjZmc4MDIxMV9yZGV2X2xpc3RgIHRyYXZlcnNhbCB0byBhY3F1aXJpbmcgaXQgcGVyIGRldmljZSwgdG9nZ2xpbmcgYHJjdV9yZWFkX2xvY2soKWAgLyBgcnRubF9sb2NrKClgIHdpdGhpbiB0aGUgbG9vcC4gVGhlIHBvdGVudGlhbCBidWdzIGludHJvZHVjZWQgaGVyZSBhcmUgcmVsYXRlZCB0byBSQ1UgbGlzdCB0cmF2ZXJzYWwgc2FmZXR5LCB1c2UtYWZ0ZXItZnJlZSwgb3IgY29uY3VycmVuY3kvbG9ja2luZyAtIHdoaWNoIGFyZSB3ZWxsLWNvdmVyZWQgYnkgdGhlIGV4aXN0aW5nIHRvb2xjaGFpbi4gTm8gbmV3IGFsbG9jYXRpb25zLCBzdGFjay9oZWFwIHZhcmlhYmxlcywgb3IgaW5mby1sZWFrcyB0byB1c2VyIHNwYWNlLiBObyBLTVNBTiByZXF1aXJlZC4KCkkmIzM5O20gY29uZmlkZW50IGluIGNhbGxpbmcgdGhpcy4gTGV0JiMzOTtzIHNldCB0aGUgcmVzdWx0cyBhbmQgbW92ZSBvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNi8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDUgMDE6MDQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGxvY2tpbmcgYW5kIFJDVSBsaXN0IHRyYXZlcnNhbCBzdHJhdGVneSBpbiByZWdfY2hlY2tfY2hhbnNfd29yaygpIChuZXQvd2lyZWxlc3MvcmVnLmMpIGJ5IGRyb3BwaW5nIGFuZCByZS1hY3F1aXJpbmcgcmN1X3JlYWRfbG9jaygpIGFuZCBydG5sX2xvY2soKSBhcm91bmQgZWFjaCBpdGVyYXRpb24gb2YgY2ZnODAyMTFfcmRldl9saXN0LlxuXG5UaGlzIGNoYW5nZSBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IG1lbW9yeSBhbGxvY2F0aW9ucywgZG9lcyBub3QgcmVhZCBvciB3cml0ZSB1bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgZmllbGRzLCBkb2VzIG5vdCBhbHRlciBidWZmZXIgbGVuZ3RoL2JvdW5kcyBjYWxjdWxhdGlvbnMsIGFuZCBkb2VzIG5vdCBwYXNzIGtlcm5lbCBkYXRhIHRvIHVzZXJzcGFjZS4gQW55IGNvbmN1cnJlbmN5LCB1c2UtYWZ0ZXItZnJlZSwgb3IgbGlzdCBjb3JydXB0aW9uIGlzc3VlcyBzdGVtbWluZyBmcm9tIGRyb3BwaW5nIFJDVSBkdXJpbmcgbGlzdCB0cmF2ZXJzYWwgYXJlIGRldGVjdGFibGUgYnkgc3RhbmRhcmQgZGVidWdnaW5nIHRvb2xzIChLQVNBTiwgTE9DS0RFUCwgYW5kIENPTkZJR19QUk9WRV9SQ1UpLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3Qgd2FycmFudGVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGxvY2tpbmcgYW5kIFJDVSBsaXN0IHRyYXZlcnNhbCBzdHJhdGVneSBpbiByZWdfY2hlY2tfY2hhbnNfd29yaygpIChuZXQvd2lyZWxlc3MvcmVnLmMpIGJ5IGRyb3BwaW5nIGFuZCByZS1hY3F1aXJpbmcgcmN1X3JlYWRfbG9jaygpIGFuZCBydG5sX2xvY2soKSBhcm91bmQgZWFjaCBpdGVyYXRpb24gb2YgY2ZnODAyMTFfcmRldl9saXN0LlxuXG5UaGlzIGNoYW5nZSBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IG1lbW9yeSBhbGxvY2F0aW9ucywgZG9lcyBub3QgcmVhZCBvciB3cml0ZSB1bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgZmllbGRzLCBkb2VzIG5vdCBhbHRlciBidWZmZXIgbGVuZ3RoL2JvdW5kcyBjYWxjdWxhdGlvbnMsIGFuZCBkb2VzIG5vdCBwYXNzIGtlcm5lbCBkYXRhIHRvIHVzZXJzcGFjZS4gQW55IGNvbmN1cnJlbmN5LCB1c2UtYWZ0ZXItZnJlZSwgb3IgbGlzdCBjb3JydXB0aW9uIGlzc3VlcyBzdGVtbWluZyBmcm9tIGRyb3BwaW5nIFJDVSBkdXJpbmcgbGlzdCB0cmF2ZXJzYWwgYXJlIGRldGVjdGFibGUgYnkgc3RhbmRhcmQgZGVidWdnaW5nIHRvb2xzIChLQVNBTiwgTE9DS0RFUCwgYW5kIENPTkZJR19QUk9WRV9SQ1UpLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3Qgd2FycmFudGVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wOS0wNVQwMTowMzo0OS42NzQ0NjQ0NTNaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1NDYxNzM4NzY2MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJDRkc4MDIxMVwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInJlZ19jaGVja19jaGFuc193b3JrXCIsXG4gICAgXCJyZWdfY2hlY2tfY2hhbm5lbHNcIixcbiAgICBcInJlZ19sZWF2ZV9pbnZhbGlkX2NoYW5zXCJcbiAgXSxcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgbG9ja2luZyBhbmQgUkNVIGxpc3QgdHJhdmVyc2FsIHN0cmF0ZWd5IGluIHJlZ19jaGVja19jaGFuc193b3JrKCkgKG5ldC93aXJlbGVzcy9yZWcuYykgYnkgZHJvcHBpbmcgYW5kIHJlLWFjcXVpcmluZyByY3VfcmVhZF9sb2NrKCkgYW5kIHJ0bmxfbG9jaygpIGFyb3VuZCBlYWNoIGl0ZXJhdGlvbiBvZiBjZmc4MDIxMV9yZGV2X2xpc3QuXFxuXFxuVGhpcyBjaGFuZ2UgZG9lcyBub3QgaW50cm9kdWNlIGFueSBtZW1vcnkgYWxsb2NhdGlvbnMsIGRvZXMgbm90IHJlYWQgb3Igd3JpdGUgdW5pbml0aWFsaXplZCBzdGFjay9oZWFwIGZpZWxkcywgZG9lcyBub3QgYWx0ZXIgYnVmZmVyIGxlbmd0aC9ib3VuZHMgY2FsY3VsYXRpb25zLCBhbmQgZG9lcyBub3QgcGFzcyBrZXJuZWwgZGF0YSB0byB1c2Vyc3BhY2UuIEFueSBjb25jdXJyZW5jeSwgdXNlLWFmdGVyLWZyZWUsIG9yIGxpc3QgY29ycnVwdGlvbiBpc3N1ZXMgc3RlbW1pbmcgZnJvbSBkcm9wcGluZyBSQ1UgZHVyaW5nIGxpc3QgdHJhdmVyc2FsIGFyZSBkZXRlY3RhYmxlIGJ5IHN0YW5kYXJkIGRlYnVnZ2luZyB0b29scyAoS0FTQU4sIExPQ0tERVAsIGFuZCBDT05GSUdfUFJPVkVfUkNVKS4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBjaGFuZ2VzIGxvY2tpbmcgYW5kIFJDVSBpdGVyYXRpb24gaW4gcmVnX2NoZWNrX2NoYW5zX3dvcmsoKSB3aXRoaW4gY2ZnODAyMTEgKG5ldC93aXJlbGVzcy9yZWcuYyksIHJlbGVhc2luZyBhbmQgcmUtYWNxdWlyaW5nIHJjdV9yZWFkX2xvY2sgYW5kIHJ0bmxfbG9jayBpbnNpZGUgbGlzdF9mb3JfZWFjaF9lbnRyeV9yY3UuIFRoaXMgcmVhY2hhYmxlIGNvZGUgcGF0aCBoYW5kbGVzIHJlZ3VsYXRvcnkgZG9tYWluIGNoYW5uZWwgdmFsaWRhdGlvbiBhbmQgaW50ZXJmYWNlIGRpc2Nvbm5lY3Rpb24sIHdoaWNoIGNhbiBiZSB0cmlnZ2VyZWQgdmlhIG5sODAyMTEgcmVndWxhdG9yeSBjb21tYW5kcy4gRnV6emluZyBpcyB3YXJyYW50ZWQgdG8gdGVzdCBmb3IgY29uY3VycmVuY3kgYnVncywgbGlzdCB0cmF2ZXJzYWwgaXNzdWVzLCBhbmQgUkNVL2xvY2tkZXAgd2FybmluZ3MuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA1VDAxOjAzOjQ5LjY3NDQ2OTE5M1oiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTczMjI1NDUyMSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IDkwOWJhZTYzZTRjYjhkYmI4YzJhZWExMDNlZGRkMGNhYmE5YWRjNzVcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIFNhdCBTZXAgNSAwMTowMzo0NyAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9uZXQvd2lyZWxlc3MvcmVnLmMgYi9uZXQvd2lyZWxlc3MvcmVnLmNcXG5pbmRleCBhODMzNmJhZjg1ZGM2Li5hMmUwZDFjZjgzMTdjIDEwMDY0NFxcbi0tLSBhL25ldC93aXJlbGVzcy9yZWcuY1xcbisrKyBiL25ldC93aXJlbGVzcy9yZWcuY1xcbkBAIC0yNDY2LDEyICsyNDY2LDIxIEBAIHN0YXRpYyB2b2lkIHJlZ19jaGVja19jaGFuc193b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcXG4gXFx0c3RydWN0IGNmZzgwMjExX3JlZ2lzdGVyZWRfZGV2aWNlICpyZGV2O1xcbiBcXG4gXFx0cHJfZGVidWcoXFxcIlZlcmlmeWluZyBhY3RpdmUgaW50ZXJmYWNlcyBhZnRlciByZWcgY2hhbmdlXFxcXG5cXFwiKTtcXG4tXFx0cnRubF9sb2NrKCk7XFxuLVxcbi1cXHRmb3JfZWFjaF9yZGV2KHJkZXYpXFxuK1xcdC8qXFxuK1xcdCAqIEFjcXVpcmUgcnRubCBwZXItZGV2aWNlIGluc3RlYWQgb2YgaG9sZGluZyBpdCBmb3IgdGhlIGVudGlyZSBsb29wO1xcbitcXHQgKiBjZmc4MDIxMV9sZWF2ZSgpIGNhbiBiZSBzbG93IGFuZCBzdGFydmUgb3RoZXIgcnRubCB3YWl0ZXJzIG90aGVyd2lzZS5cXG4rXFx0ICogd2lwaHlfdW5yZWdpc3RlcigpIGhvbGRzIHJ0bmwgYWNyb3NzIGxpc3RfZGVsX3JjdSgpICsgc3luY2hyb25pemVfcmN1KCksXFxuK1xcdCAqIHNvIHJkZXYgY2Fubm90IGJlIGZyZWVkIHdoaWxlIHdlIGhvbGQgcnRubF9sb2NrKCkgYmVsb3cuXFxuK1xcdCAqL1xcbitcXHRyY3VfcmVhZF9sb2NrKCk7XFxuK1xcdGxpc3RfZm9yX2VhY2hfZW50cnlfcmN1KHJkZXYsIFxcdTAwMjZjZmc4MDIxMV9yZGV2X2xpc3QsIGxpc3QpIHtcXG4rXFx0XFx0cmN1X3JlYWRfdW5sb2NrKCk7XFxuK1xcdFxcdHJ0bmxfbG9jaygpO1xcbiBcXHRcXHRyZWdfbGVhdmVfaW52YWxpZF9jaGFucyhcXHUwMDI2cmRldi1cXHUwMDNld2lwaHkpO1xcbi1cXG4tXFx0cnRubF91bmxvY2soKTtcXG4rXFx0XFx0cnRubF91bmxvY2soKTtcXG4rXFx0XFx0cmN1X3JlYWRfbG9jaygpO1xcbitcXHR9XFxuK1xcdHJjdV9yZWFkX3VubG9jaygpO1xcbiB9XFxuIFxcbiB2b2lkIHJlZ19jaGVja19jaGFubmVscyh2b2lkKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNVQwMTowMzo1MS40MDc4NjY1NDVaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJjb3JlIiwiRHVyYXRpb24iOjI4NTczMjMwODY1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkNGRzgwMjExXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwicmVnX2NoZWNrX2NoYW5zX3dvcmtcIixcbiAgICBcInJlZ19jaGVja19jaGFubmVsc1wiLFxuICAgIFwicmVnX2xlYXZlX2ludmFsaWRfY2hhbnNcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBjaGFuZ2VzIGxvY2tpbmcgYW5kIFJDVSBpdGVyYXRpb24gaW4gcmVnX2NoZWNrX2NoYW5zX3dvcmsoKSB3aXRoaW4gY2ZnODAyMTEgKG5ldC93aXJlbGVzcy9yZWcuYyksIHJlbGVhc2luZyBhbmQgcmUtYWNxdWlyaW5nIHJjdV9yZWFkX2xvY2sgYW5kIHJ0bmxfbG9jayBpbnNpZGUgbGlzdF9mb3JfZWFjaF9lbnRyeV9yY3UuIFRoaXMgcmVhY2hhYmxlIGNvZGUgcGF0aCBoYW5kbGVzIHJlZ3VsYXRvcnkgZG9tYWluIGNoYW5uZWwgdmFsaWRhdGlvbiBhbmQgaW50ZXJmYWNlIGRpc2Nvbm5lY3Rpb24sIHdoaWNoIGNhbiBiZSB0cmlnZ2VyZWQgdmlhIG5sODAyMTEgcmVndWxhdG9yeSBjb21tYW5kcy4gRnV6emluZyBpcyB3YXJyYW50ZWQgdG8gdGVzdCBmb3IgY29uY3VycmVuY3kgYnVncywgbGlzdCB0cmF2ZXJzYWwgaXNzdWVzLCBhbmQgUkNVL2xvY2tkZXAgd2FybmluZ3MuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyIGFuZCBzZWN1cml0eSBlbmdpbmVlci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZXZhbHVhdGUgd2hldGhlciBpdCB3YXJyYW50cyBmdXp6aW5nIHdpdGggc3l6a2FsbGVyLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiBpbnRlcm5hbCBhc3N1bXB0aW9ucy4gWW91IG11c3QgYWN0aXZlbHkgdXNlIHlvdXIgY29kZSBhY2Nlc3NcbnRvb2xzIHRvIGluc3BlY3QgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSwgY2FsbGVycywgYW5kIHN1cnJvdW5kaW5nIGNvbnRleHQuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4xLiBDT1JFIFRSSUFHRSBQSElMT1NPUEhZXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuVGhlIGdvYWwgb2YgcGF0Y2ggZnV6emluZyBpcyB0byBkaXNjb3ZlciBjcmFzaGVzLCByZWdyZXNzaW9ucywgZXhwb3NlZCBsYXRlbnQgYnVncyxcbmFuZCBuZXdseSB0cmlnZ2VyZWQgYXNzZXJ0aW9ucyBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBzZXJpZXMuXG5cbi0gUkVBQ0hBQklMSVRZIElTIFRIRSBQUklNQVJZIEdBVEU6XG4gIEZ1enppbmcgY2FuIG9ubHkgZGlzY292ZXIgYnVncyBpbiBjb2RlIHRoYXQgY2FuIGFjdHVhbGx5IGV4ZWN1dGUgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWRcbiAgZW52aXJvbm1lbnRzIChHQ0Ugb3IgUUVNVSwgdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGRldmljZXMgbGlrZSBVU0IgZ2FkZ2V0cywgbmV0ZGV2LCB0dW4vdGFwKS5cbiAgSWYgdGhlIG1vZGlmaWVkIGNvZGUgaXMgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIChzZWUgU2VjdGlvbiAyKSwgaXQgTVVTVCBOT1QgYmUgZnV6emVkLFxuICByZWdhcmRsZXNzIG9mIHdoZXRoZXIgaXQgYWRkcyBhc3NlcnRpb25zIG9yIGNvbXBsZXggbG9naWMuXG5cbi0gRE8gTk9UIEJMSU5ETFkgVFJVU1QgXCJOTyBGVU5DVElPTkFMIENIQU5HRVwiIChORkNJKSBPUiBcIlJFRkFDVE9SSU5HXCIgQ0xBSU1TOlxuICBQYXRjaCBhdXRob3JzIHJvdXRpbmVseSBsYWJlbCBjaGFuZ2VzIGFzIFwiY2xlYW51cHNcIiwgXCJyZWZhY3RvcmluZ3NcIiwgb3Igc3RhdGVcbiAgXCJObyBmdW5jdGlvbmFsIGNoYW5nZSBpbnRlbmRlZFwiLiBEbyBOT1QgdGFrZSB0aGVzZSBjbGFpbXMgYXQgZmFjZSB2YWx1ZS5cbiAgQ29kZSByZWZhY3RvcmluZ3MgdGhhdCByZWFycmFuZ2UgbG9naWMsIGludHJvZHVjZSBoZWxwZXIgZnVuY3Rpb25zLCBvciBhbHRlciBzdGF0ZSBtYW5hZ2VtZW50XG4gIGluIGNvcmUgc3Vic3lzdGVtcyBmcmVxdWVudGx5IGludHJvZHVjZSBzdWJ0bGUgc2VtYW50aWMgc2hpZnRzIG9yIHVuY292ZXIgbGF0ZW50IGtlcm5lbCBidWdzLlxuICBJZiByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlIGlzIG1vZGlmaWVkIG9yIHJlZmFjdG9yZWQsIGl0IE1VU1QgYmUgZnV6emVkLlxuXG4tIE5FVyBPUiBNT0RJRklFRCBBU1NFUlRJT05TIElOIFJFQUNIQUJMRSBDT0RFIE1VU1QgQkUgRlVaWkVEOlxuICBXaGVuIGEgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllcyBydW50aW1lIGNoZWNrcyBvciBhc3NlcnRpb25zIChlLmcuLCBXQVJOX09OKiwgVk1fV0FSTl9PTiosXG4gIEJVR19PTiosIGxvY2tkZXBfYXNzZXJ0KikgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMsIGl0IGVuZm9yY2VzIG5ldyBvciBzdHJpY3RlciBpbnZhcmlhbnRzLlxuICBFdmVuIGlmIHRoZSBhdXRob3IgYmVsaWV2ZXMgdGhlIGludmFyaWFudCBhbHdheXMgaG9sZHMsIGZ1enppbmcgaXMgZXNzZW50aWFsIHRvIHZlcmlmeSB3aGV0aGVyXG4gIGFuIHVudXN1YWwgc2VxdWVuY2Ugb2Ygb3BlcmF0aW9ucyBjYW4gdmlvbGF0ZSBpdC5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjIuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz1mYWxzZSAoTkVHQVRJVkUgQ1JJVEVSSUEpXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBPTkxZIElGIGFsbCBtb2RpZmllZCBjb2RlIGZhbGxzIHN0cmljdGx5IGludG8gb25lIG9yIG1vcmUgb2YgdGhlc2UgY2F0ZWdvcmllczpcblxuLSBOb24ta2VybmVsIGFuZCBub24tZXhlY3V0YWJsZSBjaGFuZ2VzOlxuICAqIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIGNvbW1lbnRzLCBvciBzcGVsbGluZyBmaXhlcy5cbiAgKiBVc2VyLXNwYWNlIGRpcmVjdG9yaWVzLCBzZWxmLXRlc3RzLCBzYW1wbGVzLCBvciBzY3JpcHRzIChlLmcuLCB0b29scy8sIHNhbXBsZXMvLCBzY3JpcHRzLywgdXNyLylcbiAgICB0aGF0IGRvIG5vdCBhZmZlY3QgdGhlIGNvbXBpbGVkIGtlcm5lbCBpbWFnZSAodm1saW51eCkgb3Iga2VybmVsIG1vZHVsZXMuXG4gICogUHVyZWx5IGRlY29yYXRpdmUgbG9nZ2luZyAoZS5nLiwgbWVzc2FnZSBzdHJpbmdzIGluIHByX2VyciwgcHJpbnRrLCBkZXZfaW5mbykgb3IgdHJhY2Vwb2ludHNcbiAgICB0aGF0IGRvIG5vdCBhbHRlciBjb250cm9sIGZsb3cgb3IgZGF0YSBzdHJ1Y3R1cmVzLlxuICAqIEJ1aWxkIHN5c3RlbSBvciBLY29uZmlnIGNoYW5nZXMgdGhhdCBkbyBub3QgYWx0ZXIgY29tcGlsZWQgQyBsb2dpYy5cbi0gU3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIGhhcmR3YXJlOlxuICAqIFZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaGVzLCBTbWFydE5JQ3MsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCxcbiAgICBpb25pYywgYW1kZ3B1KSByZXF1aXJpbmcgcGh5c2ljYWwgQVNJQy9QQ0llIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLlxuLSBVbnJlYWNoYWJsZSBleGVjdXRpb24gcGF0aHM6XG4gICogRHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoLnJlbW92ZSwgLnNodXRkb3duLCBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIpIGV4ZWN1dGVkIG9ubHkgZHVyaW5nXG4gICAgcGh5c2ljYWwgUENJIGhvdC11bnBsdWcgb3IgbWFudWFsIHN5c2ZzIGRyaXZlciB1bmJpbmRpbmcuXG4gICogQ29kZSBwYXRocyBleGNsdXNpdmUgdG8gYXJjaGl0ZWN0dXJlcyBvdGhlciB0aGFuIHRoZSB0YXJnZXQgYXJjaGl0ZWN0dXJlLlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuMy4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPXRydWUgKFBPU0lUSVZFIENSSVRFUklBKVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZSB3aGVuZXZlciB0aGUgcGF0Y2ggdG91Y2hlcyByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlLCBpbmNsdWRpbmc6XG4tIENvcmUgU3Vic3lzdGVtczpcbiAgKiBBbnkgbG9naWMgbW9kaWZpY2F0aW9ucyBpbiBtZW1vcnkgbWFuYWdlbWVudCAobW0vKSwgc3luY2hyb25pemF0aW9uL2xvY2tpbmcgKGtlcm5lbC9sb2NraW5nLyksXG4gICAgQlBGLCBzY2hlZHVsZXIsIGNvcmUgbmV0d29ya2luZywgVkZTLCBvciBzeXNjYWxsIGhhbmRsaW5nLlxuLSBSZWZhY3RvcmluZ3MgYW5kIENvZGUgQ2xlYW51cHM6XG4gICogQW55IHJlc3RydWN0dXJpbmcgb2YgcmVhY2hhYmxlIGRhdGEgc3RydWN0dXJlcywgaGVscGVyIGFic3RyYWN0aW9ucywgb3IgYWxnb3JpdGhtIGZsb3dzLlxuLSBSdW50aW1lIEFzc2VydGlvbnMgYW5kIERlZmVuc2l2ZSBDaGVja3M6XG4gICogQW55IGludHJvZHVjdGlvbiBvciBhbHRlcmF0aW9uIG9mIGFzc2VydGlvbnMgKFdBUk5fT04qLCBWTV9XQVJOX09OKiwgQlVHX09OKiwgZXRjLikgaW4gcmVhY2hhYmxlIHBhdGhzLlxuLSBSZWFjaGFibGUgRHJpdmVycyBhbmQgUHJvdG9jb2xzOlxuICAqIERyaXZlcnMgYWNjZXNzaWJsZSB2aWEgdmlydHVhbCBidXNlcyAodmlydGlvLCBVU0IgZ2FkZ2V0LCBsb29wYmFjaywgbmV0bGluaywgYmluZGVyLCBzb2NrZXRzLCBldGMuKS5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjQuIEVYVFJBQ1RJTkcgRm9jdXNTeW1ib2xzIChQUkVWRU5USU5HIERJTFVUSU9OKVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbldoZW4gV29ydGhGdXp6aW5nPXRydWUsIHlvdSBtdXN0IGV4dHJhY3Qgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyBpbnRvIEZvY3VzU3ltYm9scyB0byBndWlkZSB0aGUgZnV6emVyOlxuXG4tIEFWT0lEIFVCSVFVSVRPVVMgTElGRUNZQ0xFIEhPVC1QQVRIUzpcbiAgRG8gTk9UIGxpc3QgZ2VuZXJpYywgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2FsbGVkIGJ5IGFsbW9zdCBldmVyeSBwcm9ncmFtIGluIHRoZSBjb3JwdXNcbiAgKGluY2x1ZGluZywgYnV0IG5vdCBsaW1pdGVkIHRvOiBnZW5lcmFsIG1lbW9yeSBhbGxvY2F0b3JzIGFuZCBkZWFsbG9jYXRvcnMsIHBhZ2UgZmF1bHRcbiAgYW5kIHRyYXAgaGFuZGxlcnMsIG9yIGNvcmUgc3luY2hyb25pemF0aW9uIHByaW1pdGl2ZXM7IHRoaXMgaXMgbm90IGFuIGV4aGF1c3RpdmUgbGlzdCkuXG4gIExpc3RpbmcgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2F1c2VzIHRoZSBmdXp6ZXIgdG8gY2xhc3NpZnkgdGhvdXNhbmRzIG9mIHVucmVsYXRlZCB0ZXN0cyBhcyBcImZvY3VzZWRcIixcbiAgd2hpY2ggc2V2ZXJlbHkgZGlsdXRlcyBmdXp6aW5nIGVmZm9ydCBhd2F5IGZyb20gdGhlIGFjdHVhbCBjaGFuZ2VzLlxuXG4tIFRBUkdFVCBTUEVDSUZJQyBGRUFUVVJFIExPR0lDIEFORCBFTlRSWVBPSU5UUzpcbiAgTGlzdCBmdW5jdGlvbnMgdGhhdCBzcGVjaWZpY2FsbHkgaW1wbGVtZW50IHRoZSBsb2dpYyBiZWluZyBhZGRlZCBvciBhbHRlcmVkLCBvciBkaXJlY3QgQVBJIGVudHJ5cG9pbnRzXG4gIGZvciB0aGUgc3Vic3lzdGVtIGZlYXR1cmUgdW5kZXIgcmV2aWV3LlxuXG4tIEhBTkRMSU5HIFNUQVRJQyBJTkxJTkUgRlVOQ1RJT05TIElOIEhFQURFUlMgKC5oKTpcbiAgQ29tcGlsZXItaW5saW5lZCBzdGF0aWMgZnVuY3Rpb25zIChzdWNoIGFzIHN0YXRpYyBpbmxpbmVzIGluIG1tLyouaCBvciBpbmNsdWRlL2xpbnV4LyouaCkgbGFja1xuICBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzIGluIHZtbGludXggYW5kIGNhbm5vdCBiZSB0YXJnZXRlZCBkaXJlY3RseSBieSBzeW1ib2wgY292ZXJhZ2UgZmlsdGVycy5cbiAgSWYgdGhlIGNoYW5nZXMgYXJlIHByaW1hcmlseSBpbiBzdGF0aWMgaW5saW5lIGhlbHBlcnMsIGlkZW50aWZ5IG5vbi1zdGF0aWMsIGZlYXR1cmUtc3BlY2lmaWMgY2FsbGVyXG4gIGZ1bmN0aW9ucyBpbiAuYyBmaWxlcyB0aGF0IGV4ZXJjaXNlIHRoZW0gKGF2b2lkaW5nIHViaXF1aXRvdXMgbGlmZWN5Y2xlIHdyYXBwZXJzKS5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjUuIElERU5USUZZSU5HIEVuYWJsZUNvbmZpZ3Ncbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5JZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IGNvbXBpbGUgYW5kIHJlYWNoIHRoZSBtb2RpZmllZCBjb2RlOlxuLSBJbnNwZWN0IEtjb25maWcgZmlsZXMgYW5kICNpZmRlZiBndWFyZHM7IGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuLSBDaGVjayBcImRlcGVuZHMgb25cIiBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MgbmVlZGVkLlxuLSBTdHJpcCBhbnkgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiVGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjRcblxuRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgOTA5YmFlNjNlNGNiOGRiYjhjMmFlYTEwM2VkZGQwY2FiYTlhZGM3NVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBTYXQgU2VwIDUgMDE6MDM6NDcgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9uZXQvd2lyZWxlc3MvcmVnLmMgYi9uZXQvd2lyZWxlc3MvcmVnLmNcbmluZGV4IGE4MzM2YmFmODVkYzYuLmEyZTBkMWNmODMxN2MgMTAwNjQ0XG4tLS0gYS9uZXQvd2lyZWxlc3MvcmVnLmNcbisrKyBiL25ldC93aXJlbGVzcy9yZWcuY1xuQEAgLTI0NjYsMTIgKzI0NjYsMjEgQEAgc3RhdGljIHZvaWQgcmVnX2NoZWNrX2NoYW5zX3dvcmsoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxuIFx0c3RydWN0IGNmZzgwMjExX3JlZ2lzdGVyZWRfZGV2aWNlICpyZGV2O1xuIFxuIFx0cHJfZGVidWcoXCJWZXJpZnlpbmcgYWN0aXZlIGludGVyZmFjZXMgYWZ0ZXIgcmVnIGNoYW5nZVxcblwiKTtcbi1cdHJ0bmxfbG9jaygpO1xuLVxuLVx0Zm9yX2VhY2hfcmRldihyZGV2KVxuK1x0LypcbitcdCAqIEFjcXVpcmUgcnRubCBwZXItZGV2aWNlIGluc3RlYWQgb2YgaG9sZGluZyBpdCBmb3IgdGhlIGVudGlyZSBsb29wO1xuK1x0ICogY2ZnODAyMTFfbGVhdmUoKSBjYW4gYmUgc2xvdyBhbmQgc3RhcnZlIG90aGVyIHJ0bmwgd2FpdGVycyBvdGhlcndpc2UuXG4rXHQgKiB3aXBoeV91bnJlZ2lzdGVyKCkgaG9sZHMgcnRubCBhY3Jvc3MgbGlzdF9kZWxfcmN1KCkgKyBzeW5jaHJvbml6ZV9yY3UoKSxcbitcdCAqIHNvIHJkZXYgY2Fubm90IGJlIGZyZWVkIHdoaWxlIHdlIGhvbGQgcnRubF9sb2NrKCkgYmVsb3cuXG4rXHQgKi9cbitcdHJjdV9yZWFkX2xvY2soKTtcbitcdGxpc3RfZm9yX2VhY2hfZW50cnlfcmN1KHJkZXYsIFx1MDAyNmNmZzgwMjExX3JkZXZfbGlzdCwgbGlzdCkge1xuK1x0XHRyY3VfcmVhZF91bmxvY2soKTtcbitcdFx0cnRubF9sb2NrKCk7XG4gXHRcdHJlZ19sZWF2ZV9pbnZhbGlkX2NoYW5zKFx1MDAyNnJkZXYtXHUwMDNld2lwaHkpO1xuLVxuLVx0cnRubF91bmxvY2soKTtcbitcdFx0cnRubF91bmxvY2soKTtcbitcdFx0cmN1X3JlYWRfbG9jaygpO1xuK1x0fVxuK1x0cmN1X3JlYWRfdW5sb2NrKCk7XG4gfVxuIFxuIHZvaWQgcmVnX2NoZWNrX2NoYW5uZWxzKHZvaWQpXG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNVQwMTowMzo1MS40MDc4NjkzMDVaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo1MDg0MDYyMjk3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIG15IG93biBtZW50YWwgcHJvY2VzczpcblxuKipEaXZpbmcgaW50byB0aGUgUmVndWxhdG9yeSBEb21haW4gQ29kZSoqXG5cbkFscmlnaHQsIHRoZSBoaW50IHBvaW50cyBtZSBzdHJhaWdodCB0byBgbmV0L3dpcmVsZXNzL3JlZy5jYC4gR29vZCwgdGhhdCdzIHdoZXJlIEknZCBleHBlY3QgdG8gZmluZCB0aGUgcmVndWxhdG9yeS1yZWxhdGVkIGNvZGUuIE15IGZpcnN0IHN0ZXAgaXMgdG8gZ2V0IGEgaGFuZGxlIG9uIHRoZSBjaGFuZ2VzLiBUaW1lIHRvIHB1bGwgdXAgdGhlIGRpZmYgYW5kIHJlYWxseSBnZXQgaW50byB0aGUgbml0dHktZ3JpdHR5LiBJIG5lZWQgdG8gdW5kZXJzdGFuZCAqZXhhY3RseSogd2hhdCdzIGJlZW4gbW9kaWZpZWQgYW5kIHdoeS4gSSdsbCBuZWVkIHRvIGV4YW1pbmUgdGhlIGNvbnRleHQgYXJvdW5kIHRob3NlIGNoYW5nZXMg4oCTIHdoYXQncyB0aGUgc3Vycm91bmRpbmcgY29kZSBkb2luZywgaG93IGRvZXMgdGhpcyBmaXQgaW50byB0aGUgYnJvYWRlciByZWd1bGF0b3J5IGRvbWFpbiBsb2dpYywgYW5kIHdoYXQncyB0aGUgaW50ZW5kZWQgaW1wYWN0P1xuXG5Ob3csIHRvIGxvY2F0ZSB0aGUgYXJlYSBpbiBxdWVzdGlvbiwgSSdsbCBsZXZlcmFnZSB0aGUgbGluZSBudW1iZXIg4oCTIGFyb3VuZCBsaW5lIDI0NjYg4oCTIGl0J3MgYWx3YXlzIGEgZ29vZCBzdGFydGluZyBwb2ludC4gSSdsbCB1c2UgYSBgcmVhZC1maWxlYCBjb21tYW5kLCBvciBzaW1pbGFyLCB0byBxdWlja2x5IGp1bXAgdG8gdGhhdCBzcGVjaWZpYyByZWdpb24gb2YgdGhlIGByZWcuY2AgZmlsZSBhbmQgc3RhcnQgbXkgYW5hbHlzaXMuIFRoaXMgZ2l2ZXMgbWUgYSBxdWljayB3YXkgdG8gZXhhbWluZSB0aGUgY29kZSdzIGltbWVkaWF0ZSBjb250ZXh0LlxuXG5cbiIsIklucHV0VG9rZW5zIjozMDU5LCJPdXRwdXRUb2tlbnMiOjM2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTIsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNVQwMTowMzo1Ni40OTE5MzM1NzJaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNTQ0MzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L3dpcmVsZXNzL3JlZy5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDI0NTUsXG4gIFwiTGluZUNvdW50XCI6IDUwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjI0NTU6XFx0XFx0XFx0Ym9vbCB2YWxpZDtcXG4yNDU2OlxcdFxcbjI0NTc6XFx0XFx0XFx0c2NvcGVkX2d1YXJkKHdpcGh5LCB3aXBoeSlcXG4yNDU4OlxcdFxcdFxcdFxcdHZhbGlkID0gcmVnX3dkZXZfY2hhbl92YWxpZCh3aXBoeSwgd2Rldik7XFxuMjQ1OTpcXHRcXHRcXHRpZiAoIXZhbGlkKVxcbjI0NjA6XFx0XFx0XFx0XFx0Y2ZnODAyMTFfbGVhdmUocmRldiwgd2RldiwgLTEpO1xcbjI0NjE6XFx0XFx0fVxcbjI0NjI6XFx0fVxcbjI0NjM6XFx0XFxuMjQ2NDpcXHRzdGF0aWMgdm9pZCByZWdfY2hlY2tfY2hhbnNfd29yayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXFxuMjQ2NTpcXHR7XFxuMjQ2NjpcXHRcXHRzdHJ1Y3QgY2ZnODAyMTFfcmVnaXN0ZXJlZF9kZXZpY2UgKnJkZXY7XFxuMjQ2NzpcXHRcXG4yNDY4OlxcdFxcdHByX2RlYnVnKFxcXCJWZXJpZnlpbmcgYWN0aXZlIGludGVyZmFjZXMgYWZ0ZXIgcmVnIGNoYW5nZVxcXFxuXFxcIik7XFxuMjQ2OTpcXHRcXHQvKlxcbjI0NzA6XFx0XFx0ICogQWNxdWlyZSBydG5sIHBlci1kZXZpY2UgaW5zdGVhZCBvZiBob2xkaW5nIGl0IGZvciB0aGUgZW50aXJlIGxvb3A7XFxuMjQ3MTpcXHRcXHQgKiBjZmc4MDIxMV9sZWF2ZSgpIGNhbiBiZSBzbG93IGFuZCBzdGFydmUgb3RoZXIgcnRubCB3YWl0ZXJzIG90aGVyd2lzZS5cXG4yNDcyOlxcdFxcdCAqIHdpcGh5X3VucmVnaXN0ZXIoKSBob2xkcyBydG5sIGFjcm9zcyBsaXN0X2RlbF9yY3UoKSArIHN5bmNocm9uaXplX3JjdSgpLFxcbjI0NzM6XFx0XFx0ICogc28gcmRldiBjYW5ub3QgYmUgZnJlZWQgd2hpbGUgd2UgaG9sZCBydG5sX2xvY2soKSBiZWxvdy5cXG4yNDc0OlxcdFxcdCAqL1xcbjI0NzU6XFx0XFx0cmN1X3JlYWRfbG9jaygpO1xcbjI0NzY6XFx0XFx0bGlzdF9mb3JfZWFjaF9lbnRyeV9yY3UocmRldiwgXFx1MDAyNmNmZzgwMjExX3JkZXZfbGlzdCwgbGlzdCkge1xcbjI0Nzc6XFx0XFx0XFx0cmN1X3JlYWRfdW5sb2NrKCk7XFxuMjQ3ODpcXHRcXHRcXHRydG5sX2xvY2soKTtcXG4yNDc5OlxcdFxcdFxcdHJlZ19sZWF2ZV9pbnZhbGlkX2NoYW5zKFxcdTAwMjZyZGV2LVxcdTAwM2V3aXBoeSk7XFxuMjQ4MDpcXHRcXHRcXHRydG5sX3VubG9jaygpO1xcbjI0ODE6XFx0XFx0XFx0cmN1X3JlYWRfbG9jaygpO1xcbjI0ODI6XFx0XFx0fVxcbjI0ODM6XFx0XFx0cmN1X3JlYWRfdW5sb2NrKCk7XFxuMjQ4NDpcXHR9XFxuMjQ4NTpcXHRcXG4yNDg2OlxcdHZvaWQgcmVnX2NoZWNrX2NoYW5uZWxzKHZvaWQpXFxuMjQ4NzpcXHR7XFxuMjQ4ODpcXHRcXHQvKlxcbjI0ODk6XFx0XFx0ICogR2l2ZSB1c2VybW9kZSBhIGNoYW5jZSB0byBkbyBzb21ldGhpbmcgbmljZXIgKG1vdmUgdG8gYW5vdGhlclxcbjI0OTA6XFx0XFx0ICogY2hhbm5lbCwgb3JkZXJseSBkaXNjb25uZWN0aW9uKSwgYmVmb3JlIGZvcmNpbmcgYSBkaXNjb25uZWN0aW9uLlxcbjI0OTE6XFx0XFx0ICovXFxuMjQ5MjpcXHRcXHRtb2RfZGVsYXllZF93b3JrKHN5c3RlbV9wb3dlcl9lZmZpY2llbnRfd3EsXFxuMjQ5MzpcXHRcXHRcXHRcXHQgXFx1MDAyNnJlZ19jaGVja19jaGFucyxcXG4yNDk0OlxcdFxcdFxcdFxcdCBtc2Vjc190b19qaWZmaWVzKFJFR19FTkZPUkNFX0dSQUNFX01TKSk7XFxuMjQ5NTpcXHR9XFxuMjQ5NjpcXHRcXG4yNDk3OlxcdHN0YXRpYyB2b2lkIHdpcGh5X3VwZGF0ZV9yZWd1bGF0b3J5KHN0cnVjdCB3aXBoeSAqd2lwaHksXFxuMjQ5ODpcXHRcXHRcXHRcXHRcXHQgICAgZW51bSBubDgwMjExX3JlZ19pbml0aWF0b3IgaW5pdGlhdG9yKVxcbjI0OTk6XFx0e1xcbjI1MDA6XFx0XFx0ZW51bSBubDgwMjExX2JhbmQgYmFuZDtcXG4yNTAxOlxcdFxcdHN0cnVjdCByZWd1bGF0b3J5X3JlcXVlc3QgKmxyID0gZ2V0X2xhc3RfcmVxdWVzdCgpO1xcbjI1MDI6XFx0XFxuMjUwMzpcXHRcXHRpZiAoaWdub3JlX3JlZ191cGRhdGUod2lwaHksIGluaXRpYXRvcikpIHtcXG4yNTA0OlxcdFxcdFxcdC8qXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA1VDAxOjAzOjU2LjQ5MjE4OTg4MloiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjM4MzgzNzI0OTgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIFRoaXMgUGF0Y2g6IEEgUG90ZW50aWFsIFJDVSBWaW9sYXRpb24qKlxuXG5Pa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcyBwYXRjaCBjb25jZXJuaW5nIGByZWdfY2hlY2tfY2hhbnNfd29ya2Agd2l0aGluIGBuZXQvd2lyZWxlc3MvcmVnLmNgLiBUaGUgZmlyc3QgdGhpbmcgdGhhdCBqdW1wcyBvdXQgaXMgdGhlIHVzZSBvZiBgbGlzdF9mb3JfZWFjaF9lbnRyeV9yY3VgLiBXYWl0IGEgc2Vjb25kISBJIHNlZSBpdCdzIGl0ZXJhdGluZyBvdmVyIGBjZmc4MDIxMV9yZGV2X2xpc3RgIHVzaW5nIGByZGV2LVx1MDAzZWxpc3QubmV4dGAuIFRoZW4gSSBzZWUgdGhlIGNyaXRpY2FsIHBvaW50OiB0aGUgY29kZSAqZHJvcHMqIGByY3VfcmVhZF91bmxvY2soKWAgYW5kIHRoZW4gcmUtYWNxdWlyZXMgYHJjdV9yZWFkX2xvY2soKWAgKndpdGhpbiogdGhlIGxvb3AgYm9keS4gQWxhcm0gYmVsbHMhXG5cblRoaXMgaXMgYSB0ZXh0Ym9vayBleGFtcGxlIG9mIHBvdGVudGlhbGx5IGJyZWFraW5nIFJDVSBpbnZhcmlhbnRzLiBXaGVuIHlvdSdyZSBkZWFsaW5nIHdpdGggYGxpc3RfZm9yX2VhY2hfZW50cnlfcmN1YCwgeW91J3JlIHN1cHBvc2VkIHRvIGhvbGQgdGhlIHJlYWQgbG9jayBhY3Jvc3MgdGhlICplbnRpcmUqIGl0ZXJhdGlvbi4gSWYgd2UgZHJvcCB0aGUgbG9jayBhbmQgcmUtYWNxdWlyZSBpdCBpbnNpZGUgdGhlIGxvb3AsIHdlIGNyZWF0ZSBhIHdpbmRvdyB3aGVyZSBgcmRldmAgY291bGQgYmUgdW5saW5rZWQsIGZyZWVkLCBvciBpdHMgYGxpc3QubmV4dGAgcG9pbnRlciBjb3VsZCBiZWNvbWUgaW52YWxpZCBkdWUgdG8gdGhlIFJDVSBncmFjZSBwZXJpb2QgYWZ0ZXIgYGxpc3RfZGVsX3JjdWAuIEVzc2VudGlhbGx5LCB3ZSdyZSB2aW9sYXRpbmcgdGhlIGNvcmUgYXNzdW1wdGlvbiBvZiBSQ1UgdHJhdmVyc2FsLiBUaGlzIGlzIGEgdmVyeSB1bnNhZmUgbWFuZXV2ZXIuXG5cblRoZSBmdW5kYW1lbnRhbCBpc3N1ZSBpcyB0aGF0IGJ5IGRyb3BwaW5nIHRoZSBSQ1UgcmVhZCBsb2NrLCBgcmRldmAgbWlnaHQgaGF2ZSBiZWVuIGZyZWVkIGR1cmluZyBgc3luY2hyb25pemVfcmN1YCBvciBhZnRlciB0aGUgYGxpc3RfZGVsX3JjdWAgYW5kIGR1cmluZyB0aGUgZ3JhY2UgcGVyaW9kLiBPciBldmVuIGp1c3QgYWNjZXNzaW5nIGByZGV2LVx1MDAzZWxpc3QubmV4dGAgbWlnaHQgYmUgcHJvYmxlbWF0aWMgZHVyaW5nIHRoYXQgcGVyaW9kLiBUaGUgdHJhdmVyc2FsIGNvdWxkIGJlY29tZSBlaXRoZXIgc2FmZSBvciB1bnNhZmUsIGFuZCBpdCdzIGhhcmQgdG8gcHJlZGljdC5cblxuTm93IHRoZSBtaWxsaW9uLWRvbGxhciBxdWVzdGlvbjogaXMgdGhpcyByZWFjaGFibGU/IElzIHRoaXMgc29tZXRoaW5nIHdlIGNhbiB0cmlnZ2VyPyBHaXZlbiB0aGF0IGBuZXQvd2lyZWxlc3NgIOKAkyB3aGljaCBpbmNsdWRlcyBgY2ZnODAyMTFgLCBgbWFjODAyMTFfaHdzaW1gLCBgbmw4MDIxMWAsIGFuZCBzbyBvbiDigJMgaXMgYSBzdGFuZGFyZCB0YXJnZXQgZm9yIHN5emthbGxlciBmdXp6aW5nLCB0aGVyZSdzIGEgKnZlcnkqIGdvb2QgY2hhbmNlIHRoaXMgaXMgaW5kZWVkIHJlYWNoYWJsZSBhbmQgZnV6emVyLXRyaWdnZXJhYmxlLiBUaGlzIG1ha2VzIG1lIHZlcnkgbmVydm91czsgdGhpcyBpcyB0aGUga2luZCBvZiBzdWJ0bGUgUkNVIGJ1ZyB0aGF0IGNhbiBsZWFkIHRvIGNyYXNoZXMgb3IsIHdvcnNlLCBoYXJkLXRvLWRlYnVnIG1lbW9yeSBjb3JydXB0aW9uLlxuXG5OZXh0LCBJIG5lZWQgdG8gY2hlY2sgdGhlIEtjb25maWcgcmVxdWlyZW1lbnRzIGZvciBgbmV0L3dpcmVsZXNzL3JlZy5jYCB0byBzZWUgaWYgdGhlcmUgYXJlIGFueSBzcGVjaWZpYyBkZXBlbmRlbmNpZXMgdGhhdCBtaWdodCBsaW1pdCBvciBlbmFibGUgdGhpcyB2dWxuZXJhYmlsaXR5LlxuXG5cbiIsIklucHV0VG9rZW5zIjo0MTYwLCJPdXRwdXRUb2tlbnMiOjMxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzQ3LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDVUMDE6MDQ6MDAuMzMwNTY2NDZaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MzcwMjAxMzY0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIkNGRzgwMjExXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC93aXJlbGVzcy9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiXFxuRnVsbCBvdXRwdXQgaXMgdG9vIGxvbmcsIHNob3dpbmcgNTAwIG91dCBvZiA4NTcgbGluZXMuXFxuVXNlIG1vcmUgcHJlY2lzZSBleHByZXNzaW9uIGlmIHBvc3NpYmxlLlxcblxcbm5ldC93aXJlbGVzcy9LY29uZmlnPTU9Y29uZmlnIFdFWFRfQ09SRVxcbm5ldC93aXJlbGVzcy9LY29uZmlnLTYtXFx0ZGVmX2Jvb2wgeVxcbm5ldC93aXJlbGVzcy9LY29uZmlnOjc6XFx0ZGVwZW5kcyBvbiBDRkc4MDIxMV9XRVhUIHx8IFdJUkVMRVNTX0VYVFxcbm5ldC93aXJlbGVzcy9LY29uZmlnLTgtXFxuLS1cXG5uZXQvd2lyZWxlc3MvS2NvbmZpZz0xND1jb25maWcgV0VYVF9QUklWXFxuLS1cXG5uZXQvd2lyZWxlc3MvS2NvbmZpZy0xNi1cXG5uZXQvd2lyZWxlc3MvS2NvbmZpZzoxNzpjb25maWcgQ0ZHODAyMTFcXG5uZXQvd2lyZWxlc3MvS2NvbmZpZy0xOC1cXHR0cmlzdGF0ZSBcXFwiY2ZnODAyMTEgLSB3aXJlbGVzcyBjb25maWd1cmF0aW9uIEFQSVxcXCJcXG4tLVxcbm5ldC93aXJlbGVzcy9LY29uZmlnLTI0LVxcdCMgKHRoaXMgaXMgaGVyZSByYXRoZXIgdGhhbiBiZWxvdyB0byBhbGxvdyBpdCB0byBiZSBhIG1vZHVsZSlcXG5uZXQvd2lyZWxlc3MvS2NvbmZpZzoyNTpcXHRzZWxlY3QgQ1JZUFRPX1NIQTI1NiBpZiBDRkc4MDIxMV9VU0VfS0VSTkVMX1JFR0RCX0tFWVNcXG5uZXQvd2lyZWxlc3MvS2NvbmZpZy0yNi1cXHRoZWxwXFxuLS1cXG5uZXQvd2lyZWxlc3MvS2NvbmZpZy0zNS1cXG5uZXQvd2lyZWxlc3MvS2NvbmZpZzozNjppZiBDRkc4MDIxMVxcbm5ldC93aXJlbGVzcy9LY29uZmlnLTM3LVxcbm5ldC93aXJlbGVzcy9LY29uZmlnPTM4PWNvbmZpZyBOTDgwMjExX1RFU1RNT0RFXFxuLS1cXG5uZXQvd2lyZWxlc3MvS2NvbmZpZy01MS1cXG5uZXQvd2lyZWxlc3MvS2NvbmZpZzo1Mjpjb25maWcgQ0ZHODAyMTFfREVWRUxPUEVSX1dBUk5JTkdTXFxubmV0L3dpcmVsZXNzL0tjb25maWctNTMtXFx0Ym9vbCBcXFwiZW5hYmxlIGRldmVsb3BlciB3YXJuaW5nc1xcXCJcXG4tLVxcbm5ldC93aXJlbGVzcy9LY29uZmlnLTY3LVxcbm5ldC93aXJlbGVzcy9LY29uZmlnOjY4OmNvbmZpZyBDRkc4MDIxMV9DRVJUSUZJQ0FUSU9OX09OVVNcXG5uZXQvd2lyZWxlc3MvS2NvbmZpZy02OS1cXHRib29sIFxcXCJjZmc4MDIxMSBjZXJ0aWZpY2F0aW9uIG9udXNcXFwiXFxuLS1cXG5uZXQvd2lyZWxlc3MvS2NvbmZpZy04OC1cXG5uZXQvd2lyZWxlc3MvS2NvbmZpZzo4OTpjb25maWcgQ0ZHODAyMTFfUkVRVUlSRV9TSUdORURfUkVHREJcXG5uZXQvd2lyZWxlc3MvS2NvbmZpZzo5MDpcXHRib29sIFxcXCJyZXF1aXJlIHJlZ2RiIHNpZ25hdHVyZVxcXCIgaWYgQ0ZHODAyMTFfQ0VSVElGSUNBVElPTl9PTlVTXFxubmV0L3dpcmVsZXNzL0tjb25maWctOTEtXFx0ZGVmYXVsdCB5XFxuLS1cXG5uZXQvd2lyZWxlc3MvS2NvbmZpZy05OC1cXG5uZXQvd2lyZWxlc3MvS2NvbmZpZzo5OTpjb25maWcgQ0ZHODAyMTFfVVNFX0tFUk5FTF9SRUdEQl9LRVlTXFxubmV0L3dpcmVsZXNzL0tjb25maWc6MTAwOlxcdGJvb2wgXFxcImFsbG93IHJlZ2RiIGtleXMgc2hpcHBlZCB3aXRoIHRoZSBrZXJuZWxcXFwiIGlmIENGRzgwMjExX0NFUlRJRklDQVRJT05fT05VU1xcbm5ldC93aXJlbGVzcy9LY29uZmlnLTEwMS1cXHRkZWZhdWx0IHlcXG5uZXQvd2lyZWxlc3MvS2NvbmZpZzoxMDI6XFx0ZGVwZW5kcyBvbiBDRkc4MDIxMV9SRVFVSVJFX1NJR05FRF9SRUdEQlxcbm5ldC93aXJlbGVzcy9LY29uZmlnLTEwMy1cXHRoZWxwXFxuLS1cXG5uZXQvd2lyZWxlc3MvS2NvbmZpZy0xMTAtXFxubmV0L3dpcmVsZXNzL0tjb25maWc6MTExOmNvbmZpZyBDRkc4MDIxMV9FWFRSQV9SRUdEQl9LRVlESVJcXG5uZXQvd2lyZWxlc3MvS2NvbmZpZzoxMTI6XFx0c3RyaW5nIFxcXCJhZGRpdGlvbmFsIHJlZ2RiIGtleSBkaXJlY3RvcnlcXFwiIGlmIENGRzgwMjExX0NFUlRJRklDQVRJT05fT05VU1xcbm5ldC93aXJlbGVzcy9LY29uZmlnOjExMzpcXHRkZXBlbmRzIG9uIENGRzgwMjExX1JFUVVJUkVfU0lHTkVEX1JFR0RCXFxubmV0L3dpcmVsZXNzL0tjb25maWctMTE0LVxcdGhlbHBcXG4tLVxcbm5ldC93aXJlbGVzcy9LY29uZmlnLTEyMS1cXG5uZXQvd2lyZWxlc3MvS2NvbmZpZzoxMjI6Y29uZmlnIENGRzgwMjExX1JFR19DRUxMVUxBUl9ISU5UU1xcbm5ldC93aXJlbGVzcy9LY29uZmlnLTEyMy1cXHRib29sIFxcXCJjZmc4MDIxMSByZWd1bGF0b3J5IHN1cHBvcnQgZm9yIGNlbGx1bGFyIGJhc2Ugc3RhdGlvbiBoaW50c1xcXCJcXG5uZXQvd2lyZWxlc3MvS2NvbmZpZzoxMjQ6XFx0ZGVwZW5kcyBvbiBDRkc4MDIxMV9DRVJUSUZJQ0FUSU9OX09OVVNcXG5uZXQvd2lyZWxlc3MvS2NvbmZpZy0xMjUtXFx0aGVscFxcbi0tXFxubmV0L3dpcmVsZXNzL0tjb25maWctMTM0LVxcbm5ldC93aXJlbGVzcy9LY29uZmlnOjEzNTpjb25maWcgQ0ZHODAyMTFfUkVHX1JFTEFYX05PX0lSXFxubmV0L3dpcmVsZXNzL0tjb25maWctMTM2LVxcdGJvb2wgXFxcImNmZzgwMjExIHN1cHBvcnQgZm9yIE5PX0lSIHJlbGF4YXRpb25cXFwiXFxubmV0L3dpcmVsZXNzL0tjb25maWc6MTM3OlxcdGRlcGVuZHMgb24gQ0ZHODAyMTFfQ0VSVElGSUNBVElPTl9PTlVTXFxubmV0L3dpcmVsZXNzL0tjb25maWctMTM4LVxcdGhlbHBcXG4tLVxcbm5ldC93aXJlbGVzcy9LY29uZmlnLTE1OC1cXG5uZXQvd2lyZWxlc3MvS2NvbmZpZzoxNTk6Y29uZmlnIENGRzgwMjExX0RFRkFVTFRfUFNcXG5uZXQvd2lyZWxlc3MvS2NvbmZpZy0xNjAtXFx0Ym9vbCBcXFwiZW5hYmxlIHBvd2Vyc2F2ZSBieSBkZWZhdWx0XFxcIlxcbi0tXFxubmV0L3dpcmVsZXNzL0tjb25maWctMTY4LVxcbm5ldC93aXJlbGVzcy9LY29uZmlnOjE2OTpjb25maWcgQ0ZHODAyMTFfREVCVUdGU1xcbm5ldC93aXJlbGVzcy9LY29uZmlnLTE3MC1cXHRib29sIFxcXCJjZmc4MDIxMSBEZWJ1Z0ZTIGVudHJpZXNcXFwiXFxuLS1cXG5uZXQvd2lyZWxlc3MvS2NvbmZpZy0xNzYtXFxubmV0L3dpcmVsZXNzL0tjb25maWc6MTc3OmNvbmZpZyBDRkc4MDIxMV9DUkRBX1NVUFBPUlRcXG5uZXQvd2lyZWxlc3MvS2NvbmZpZy0xNzgtXFx0Ym9vbCBcXFwic3VwcG9ydCBDUkRBXFxcIiBpZiBFWFBFUlRcXG4tLVxcbm5ldC93aXJlbGVzcy9LY29uZmlnLTE4Ni1cXG5uZXQvd2lyZWxlc3MvS2NvbmZpZzoxODc6Y29uZmlnIENGRzgwMjExX1dFWFRcXG5uZXQvd2lyZWxlc3MvS2NvbmZpZy0xODgtXFx0Ym9vbCBcXFwiY2ZnODAyMTEgd2lyZWxlc3MgZXh0ZW5zaW9ucyBjb21wYXRpYmlsaXR5XFxcIlxcbi0tXFxubmV0L3dpcmVsZXNzL0tjb25maWctMTkzLVxcbm5ldC93aXJlbGVzcy9LY29uZmlnOjE5NDpjb25maWcgQ0ZHODAyMTFfS1VOSVRfVEVTVFxcbm5ldC93aXJlbGVzcy9LY29uZmlnLTE5NS1cXHR0cmlzdGF0ZSBcXFwiS1VuaXQgdGVzdHMgZm9yIGNmZzgwMjExXFxcIiBpZiAhS1VOSVRfQUxMX1RFU1RTXFxubmV0L3dpcmVsZXNzL0tjb25maWctMTk2LVxcdGRlcGVuZHMgb24gS1VOSVRcXG5uZXQvd2lyZWxlc3MvS2NvbmZpZzoxOTc6XFx0ZGVwZW5kcyBvbiBDRkc4MDIxMVxcbm5ldC93aXJlbGVzcy9LY29uZmlnLTE5OC1cXHRkZWZhdWx0IEtVTklUX0FMTF9URVNUU1xcbi0tXFxubmV0L3dpcmVsZXNzL0tjb25maWctMjAzLVxcbm5ldC93aXJlbGVzcy9LY29uZmlnOjIwNDplbmRpZiAjIENGRzgwMjExXFxuLS1cXG5uZXQvd2lyZWxlc3MvTWFrZWZpbGUtMS0jIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXFxubmV0L3dpcmVsZXNzL01ha2VmaWxlOjI6b2JqLSQoQ09ORklHX0NGRzgwMjExKSArPSBjZmc4MDIxMS5vXFxubmV0L3dpcmVsZXNzL01ha2VmaWxlLTMtb2JqLXkgKz0gdGVzdHMvXFxuLS1cXG5uZXQvd2lyZWxlc3MvTWFrZWZpbGU9MTI9Y2ZnODAyMTEtJChDT05GSUdfT0YpICs9IG9mLm9cXG5uZXQvd2lyZWxlc3MvTWFrZWZpbGU6MTM6Y2ZnODAyMTEtJChDT05GSUdfQ0ZHODAyMTFfREVCVUdGUykgKz0gZGVidWdmcy5vXFxubmV0L3dpcmVsZXNzL01ha2VmaWxlOjE0OmNmZzgwMjExLSQoQ09ORklHX0NGRzgwMjExX1dFWFQpICs9IHdleHQtY29tcGF0Lm8gd2V4dC1zbWUub1xcbm5ldC93aXJlbGVzcy9NYWtlZmlsZS0xNS1cXG5uZXQvd2lyZWxlc3MvTWFrZWZpbGU9MTY9Q0ZMQUdTX3RyYWNlLm8gOj0gLUkkKHNyYylcXG5uZXQvd2lyZWxlc3MvTWFrZWZpbGUtMTctXFxubmV0L3dpcmVsZXNzL01ha2VmaWxlOjE4OmNmZzgwMjExLSQoQ09ORklHX0NGRzgwMjExX1VTRV9LRVJORUxfUkVHREJfS0VZUykgKz0gc2hpcHBlZC1jZXJ0cy5vXFxubmV0L3dpcmVsZXNzL01ha2VmaWxlOjE5OmlmbmVxICgkKENPTkZJR19DRkc4MDIxMV9FWFRSQV9SRUdEQl9LRVlESVIpLClcXG5uZXQvd2lyZWxlc3MvTWFrZWZpbGUtMjAtY2ZnODAyMTEteSArPSBleHRyYS1jZXJ0cy5vXFxuLS1cXG5uZXQvd2lyZWxlc3MvTWFrZWZpbGU9MjM9JChvYmopL3NoaXBwZWQtY2VydHMuYzogJChzb3J0ICQod2lsZGNhcmQgJChzcmMpL2NlcnRzLyouaGV4KSlcXG4tLVxcbm5ldC93aXJlbGVzcy9NYWtlZmlsZS0zMS1cXG5uZXQvd2lyZWxlc3MvTWFrZWZpbGU6MzI6JChvYmopL2V4dHJhLWNlcnRzLmM6ICQoQ09ORklHX0NGRzgwMjExX0VYVFJBX1JFR0RCX0tFWURJUikgXFxcXFxcbm5ldC93aXJlbGVzcy9NYWtlZmlsZTozMzpcXHRcXHQgICAgICAkKHNvcnQgJCh3aWxkY2FyZCAkKENPTkZJR19DRkc4MDIxMV9FWFRSQV9SRUdEQl9LRVlESVIpLyoueDUwOSkpXFxubmV0L3dpcmVsZXNzL01ha2VmaWxlLTM0LVxcdEAkKGtlY2hvKSBcXFwiICBHRU4gICAgICRAXFxcIlxcbi0tXFxubmV0L3dpcmVsZXNzL2NoYW4uYz0xMjM9c3RhdGljIGNvbnN0IHUxNiBwdW5jdHVyaW5nX3ZhbHVlc18zMjBtaHpbXSA9IHtcXG4tLVxcbm5ldC93aXJlbGVzcy9jaGFuLmMtMTI4LVxcbm5ldC93aXJlbGVzcy9jaGFuLmM6MTI5OiNkZWZpbmUgQ0ZHODAyMTFfUEVSX0JXX1ZBTElEX1BVTkNUVVJJTkdfVkFMVUVTKF9idykgXFxcXFxcbm5ldC93aXJlbGVzcy9jaGFuLmMtMTMwLVxcdHsgXFxcXFxcbi0tXFxubmV0L3dpcmVsZXNzL2NoYW4uYz0xMzU9c3RhdGljIGNvbnN0IHN0cnVjdCBjZmc4MDIxMV9wZXJfYndfcHVuY3R1cmluZ192YWx1ZXMgcGVyX2J3X3B1bmN0dXJpbmdbXSA9IHtcXG5uZXQvd2lyZWxlc3MvY2hhbi5jOjEzNjpcXHRDRkc4MDIxMV9QRVJfQldfVkFMSURfUFVOQ1RVUklOR19WQUxVRVMoODApLFxcbm5ldC93aXJlbGVzcy9jaGFuLmM6MTM3OlxcdENGRzgwMjExX1BFUl9CV19WQUxJRF9QVU5DVFVSSU5HX1ZBTFVFUygxNjApLFxcbm5ldC93aXJlbGVzcy9jaGFuLmM6MTM4OlxcdENGRzgwMjExX1BFUl9CV19WQUxJRF9QVU5DVFVSSU5HX1ZBTFVFUygzMjApXFxubmV0L3dpcmVsZXNzL2NoYW4uYy0xMzktfTtcXG4tLVxcbm5ldC93aXJlbGVzcy9jaGFuLmM9MTY5NT1zdGF0aWMgYm9vbCBjZmc4MDIxMV9pcl9wZXJtaXNzaXZlX2NoYW4oc3RydWN0IHdpcGh5ICp3aXBoeSxcXG4tLVxcbm5ldC93aXJlbGVzcy9jaGFuLmMtMTcwMy1cXG5uZXQvd2lyZWxlc3MvY2hhbi5jOjE3MDQ6XFx0aWYgKCFJU19FTkFCTEVEKENPTkZJR19DRkc4MDIxMV9SRUdfUkVMQVhfTk9fSVIpIHx8XFxubmV0L3dpcmVsZXNzL2NoYW4uYy0xNzA1LVxcdCAgICAhKHdpcGh5LVxcdTAwM2VyZWd1bGF0b3J5X2ZsYWdzIFxcdTAwMjYgUkVHVUxBVE9SWV9FTkFCTEVfUkVMQVhfTk9fSVIpKVxcbi0tXFxubmV0L3dpcmVsZXNzL2NvcmUuYz01NDk9c3RydWN0IHdpcGh5ICp3aXBoeV9uZXdfbm0oY29uc3Qgc3RydWN0IGNmZzgwMjExX29wcyAqb3BzLCBpbnQgc2l6ZW9mX3ByaXYsXFxuLS1cXG5uZXQvd2lyZWxlc3MvY29yZS5jLTYzNi1cXHRcXHRcXHQgIGNmZzgwMjExX2Rmc19jaGFubmVsc191cGRhdGVfd29yayk7XFxubmV0L3dpcmVsZXNzL2NvcmUuYzo2Mzc6I2lmZGVmIENPTkZJR19DRkc4MDIxMV9XRVhUXFxubmV0L3dpcmVsZXNzL2NvcmUuYy02MzgtXFx0cmRldi1cXHUwMDNld2lwaHkud2V4dCA9IFxcdTAwMjZjZmc4MDIxMV93ZXh0X2hhbmRsZXI7XFxuLS1cXG5uZXQvd2lyZWxlc3MvY29yZS5jLTY1OC1cXG5uZXQvd2lyZWxlc3MvY29yZS5jOjY1OTojaWZkZWYgQ09ORklHX0NGRzgwMjExX0RFRkFVTFRfUFNcXG5uZXQvd2lyZWxlc3MvY29yZS5jLTY2MC1cXHRyZGV2LVxcdTAwM2V3aXBoeS5mbGFncyB8PSBXSVBIWV9GTEFHX1BTX09OX0JZX0RFRkFVTFQ7XFxuLS1cXG5uZXQvd2lyZWxlc3MvY29yZS5jPTg1Mz1pbnQgd2lwaHlfcmVnaXN0ZXIoc3RydWN0IHdpcGh5ICp3aXBoeSlcXG4tLVxcbm5ldC93aXJlbGVzcy9jb3JlLmMtMTEyMi1cXHRlbHNlIGlmICh3aXBoeS1cXHUwMDNlbWF4X251bV9ha21fc3VpdGVzIFxcdTAwM2MgTkw4MDIxMV9NQVhfTlJfQUtNX1NVSVRFUyB8fFxcbm5ldC93aXJlbGVzcy9jb3JlLmM6MTEyMzpcXHRcXHQgd2lwaHktXFx1MDAzZW1heF9udW1fYWttX3N1aXRlcyBcXHUwMDNlIENGRzgwMjExX01BWF9OVU1fQUtNX1NVSVRFUylcXG5uZXQvd2lyZWxlc3MvY29yZS5jLTExMjQtXFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuLS1cXG5uZXQvd2lyZWxlc3MvY29yZS5jPTE0MDg9c3RhdGljIHZvaWQgX2NmZzgwMjExX3VucmVnaXN0ZXJfd2RldihzdHJ1Y3Qgd2lyZWxlc3NfZGV2ICp3ZGV2LFxcbi0tXFxubmV0L3dpcmVsZXNzL2NvcmUuYy0xNDQ4LVxcbm5ldC93aXJlbGVzcy9jb3JlLmM6MTQ0OTojaWZkZWYgQ09ORklHX0NGRzgwMjExX1dFWFRcXG5uZXQvd2lyZWxlc3MvY29yZS5jLTE0NTAtXFx0a2ZyZWVfc2Vuc2l0aXZlKHdkZXYtXFx1MDAzZXdleHQua2V5cyk7XFxuLS1cXG5uZXQvd2lyZWxlc3MvY29yZS5jPTE1MDM9dm9pZCBjZmc4MDIxMV9sZWF2ZV9sb2NrZWQoc3RydWN0IGNmZzgwMjExX3JlZ2lzdGVyZWRfZGV2aWNlICpyZGV2LFxcbi0tXFxubmV0L3dpcmVsZXNzL2NvcmUuYy0xNTI3LVxcbm5ldC93aXJlbGVzcy9jb3JlLmM6MTUyODojaWZkZWYgQ09ORklHX0NGRzgwMjExX1dFWFRcXG5uZXQvd2lyZWxlc3MvY29yZS5jLTE1MjktXFx0XFx0a2ZyZWUod2Rldi1cXHUwMDNld2V4dC5pZSk7XFxuLS1cXG5uZXQvd2lyZWxlc3MvY29yZS5jPTE2MTQ9dm9pZCBjZmc4MDIxMV9pbml0X3dkZXYoc3RydWN0IHdpcmVsZXNzX2RldiAqd2RldilcXG4tLVxcbm5ldC93aXJlbGVzcy9jb3JlLmMtMTYyMi1cXG5uZXQvd2lyZWxlc3MvY29yZS5jOjE2MjM6I2lmZGVmIENPTkZJR19DRkc4MDIxMV9XRVhUXFxubmV0L3dpcmVsZXNzL2NvcmUuYy0xNjI0LVxcdHdkZXYtXFx1MDAzZXdleHQuZGVmYXVsdF9rZXkgPSAtMTtcXG4tLVxcbm5ldC93aXJlbGVzcy9jb3JlLmM9MTcwNz1zdGF0aWMgaW50IGNmZzgwMjExX25ldGRldl9ub3RpZmllcl9jYWxsKHN0cnVjdCBub3RpZmllcl9ibG9jayAqbmIsXFxuLS1cXG5uZXQvd2lyZWxlc3MvY29yZS5jLTE3ODEtXFx0XFx0c3dpdGNoICh3ZGV2LVxcdTAwM2VpZnR5cGUpIHtcXG5uZXQvd2lyZWxlc3MvY29yZS5jOjE3ODI6I2lmZGVmIENPTkZJR19DRkc4MDIxMV9XRVhUXFxubmV0L3dpcmVsZXNzL2NvcmUuYy0xNzgzLVxcdFxcdGNhc2UgTkw4MDIxMV9JRlRZUEVfQURIT0M6XFxuLS1cXG5uZXQvd2lyZWxlc3MvY29yZS5oPTU3ND1jZmc4MDIxMV9nZXRfNmdoel9wb3dlcl90eXBlKGNvbnN0IHU4ICplbGVtcywgc2l6ZV90IGVsZW1zX2xlbixcXG4tLVxcbm5ldC93aXJlbGVzcy9jb3JlLmgtNTc2LVxcbm5ldC93aXJlbGVzcy9jb3JlLmg6NTc3OiNpZmRlZiBDT05GSUdfQ0ZHODAyMTFfREVWRUxPUEVSX1dBUk5JTkdTXFxubmV0L3dpcmVsZXNzL2NvcmUuaDo1Nzg6I2RlZmluZSBDRkc4MDIxMV9ERVZfV0FSTl9PTihjb25kKVxcdFdBUk5fT04oY29uZClcXG5uZXQvd2lyZWxlc3MvY29yZS5oLTU3OS0jZWxzZVxcbi0tXFxubmV0L3dpcmVsZXNzL2NvcmUuaC01ODQtICovXFxubmV0L3dpcmVsZXNzL2NvcmUuaDo1ODU6I2RlZmluZSBDRkc4MDIxMV9ERVZfV0FSTl9PTihjb25kKVxcdCh7Ym9vbCBfX3IgPSAoY29uZCk7IF9fcjsgfSlcXG5uZXQvd2lyZWxlc3MvY29yZS5oLTU4Ni0jZW5kaWZcXG4tLVxcbm5ldC93aXJlbGVzcy9jb3JlLmg9NjI0PXN0cnVjdCBjZmc4MDIxMV9jb2xvY2F0ZWRfYXAge1xcbi0tXFxubmV0L3dpcmVsZXNzL2NvcmUuaC02NDAtXFxubmV0L3dpcmVsZXNzL2NvcmUuaDo2NDE6I2lmIElTX0VOQUJMRUQoQ09ORklHX0NGRzgwMjExX0tVTklUX1RFU1QpXFxubmV0L3dpcmVsZXNzL2NvcmUuaDo2NDI6I2RlZmluZSBFWFBPUlRfU1lNQk9MX0lGX0NGRzgwMjExX0tVTklUKHN5bSkgRVhQT1JUX1NZTUJPTF9JRl9LVU5JVChzeW0pXFxubmV0L3dpcmVsZXNzL2NvcmUuaDo2NDM6I2RlZmluZSBWSVNJQkxFX0lGX0NGRzgwMjExX0tVTklUXFxubmV0L3dpcmVsZXNzL2NvcmUuaC02NDQtdm9pZCBjZmc4MDIxMV9mcmVlX2NvbG9jX2FwX2xpc3Qoc3RydWN0IGxpc3RfaGVhZCAqY29sb2NfYXBfbGlzdCk7XFxuLS1cXG5uZXQvd2lyZWxlc3MvY29yZS5oPTY0OT1zaXplX3QgY2ZnODAyMTFfZ2VuX25ld19pZShjb25zdCB1OCAqaWUsIHNpemVfdCBpZWxlbixcXG4tLVxcbm5ldC93aXJlbGVzcy9jb3JlLmgtNjUyLSNlbHNlXFxubmV0L3dpcmVsZXNzL2NvcmUuaDo2NTM6I2RlZmluZSBFWFBPUlRfU1lNQk9MX0lGX0NGRzgwMjExX0tVTklUKHN5bSlcXG5uZXQvd2lyZWxlc3MvY29yZS5oOjY1NDojZGVmaW5lIFZJU0lCTEVfSUZfQ0ZHODAyMTFfS1VOSVQgc3RhdGljXFxubmV0L3dpcmVsZXNzL2NvcmUuaDo2NTU6I2VuZGlmIC8qIElTX0VOQUJMRUQoQ09ORklHX0NGRzgwMjExX0tVTklUX1RFU1QpICovXFxubmV0L3dpcmVsZXNzL2NvcmUuaC02NTYtXFxuLS1cXG5uZXQvd2lyZWxlc3MvZGVidWdmcy5oLTEtLyogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAgKi9cXG5uZXQvd2lyZWxlc3MvZGVidWdmcy5oOjI6I2lmbmRlZiBfX0NGRzgwMjExX0RFQlVHRlNfSFxcbm5ldC93aXJlbGVzcy9kZWJ1Z2ZzLmg6MzojZGVmaW5lIF9fQ0ZHODAyMTFfREVCVUdGU19IXFxubmV0L3dpcmVsZXNzL2RlYnVnZnMuaC00LVxcbm5ldC93aXJlbGVzcy9kZWJ1Z2ZzLmg6NTojaWZkZWYgQ09ORklHX0NGRzgwMjExX0RFQlVHRlNcXG5uZXQvd2lyZWxlc3MvZGVidWdmcy5oLTYtdm9pZCBjZmc4MDIxMV9kZWJ1Z2ZzX3JkZXZfYWRkKHN0cnVjdCBjZmc4MDIxMV9yZWdpc3RlcmVkX2RldmljZSAqcmRldik7XFxuLS1cXG5uZXQvd2lyZWxlc3MvZGVidWdmcy5oPTk9dm9pZCBjZmc4MDIxMV9kZWJ1Z2ZzX3JkZXZfYWRkKHN0cnVjdCBjZmc4MDIxMV9yZWdpc3RlcmVkX2RldmljZSAqcmRldikge31cXG4tLVxcbm5ldC93aXJlbGVzcy9kZWJ1Z2ZzLmgtMTEtXFxubmV0L3dpcmVsZXNzL2RlYnVnZnMuaDoxMjojZW5kaWYgLyogX19DRkc4MDIxMV9ERUJVR0ZTX0ggKi9cXG4tLVxcbm5ldC93aXJlbGVzcy9pYnNzLmM9MTk9dm9pZCBfX2NmZzgwMjExX2lic3Nfam9pbmVkKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGNvbnN0IHU4ICpic3NpZCxcXG4tLVxcbm5ldC93aXJlbGVzcy9pYnNzLmMtMjMtXFx0c3RydWN0IGNmZzgwMjExX2JzcyAqYnNzO1xcbm5ldC93aXJlbGVzcy9pYnNzLmM6MjQ6I2lmZGVmIENPTkZJR19DRkc4MDIxMV9XRVhUXFxubmV0L3dpcmVsZXNzL2lic3MuYy0yNS1cXHR1bmlvbiBpd3JlcV9kYXRhIHdycXU7XFxuLS1cXG5uZXQvd2lyZWxlc3MvaWJzcy5jLTUxLVxcdFxcdFxcdFxcdEdGUF9LRVJORUwpO1xcbm5ldC93aXJlbGVzcy9pYnNzLmM6NTI6I2lmZGVmIENPTkZJR19DRkc4MDIxMV9XRVhUXFxubmV0L3dpcmVsZXNzL2lic3MuYy01My1cXHRtZW1zZXQoXFx1MDAyNndycXUsIDAsIHNpemVvZih3cnF1KSk7XFxuLS1cXG5uZXQvd2lyZWxlc3MvaWJzcy5jPTg3PWludCBfX2NmZzgwMjExX2pvaW5faWJzcyhzdHJ1Y3QgY2ZnODAyMTFfcmVnaXN0ZXJlZF9kZXZpY2UgKnJkZXYsXFxuLS1cXG5uZXQvd2lyZWxlc3MvaWJzcy5jLTE0MC1cXG5uZXQvd2lyZWxlc3MvaWJzcy5jOjE0MTojaWZkZWYgQ09ORklHX0NGRzgwMjExX1dFWFRcXG5uZXQvd2lyZWxlc3MvaWJzcy5jLTE0Mi1cXHR3ZGV2LVxcdTAwM2V3ZXh0Lmlic3MuY2hhbmRlZiA9IHBhcmFtcy1cXHUwMDNlY2hhbmRlZjtcXG4tLVxcbm5ldC93aXJlbGVzcy9pYnNzLmM9MTU2PXZvaWQgY2ZnODAyMTFfY2xlYXJfaWJzcyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBib29sIG5vd2V4dClcXG4tLVxcbm5ldC93aXJlbGVzcy9pYnNzLmMtMTg0LVxcdG1lbXNldChcXHUwMDI2d2Rldi1cXHUwMDNldS5pYnNzLmNoYW5kZWYsIDAsIHNpemVvZih3ZGV2LVxcdTAwM2V1Lmlic3MuY2hhbmRlZikpO1xcbm5ldC93aXJlbGVzcy9pYnNzLmM6MTg1OiNpZmRlZiBDT05GSUdfQ0ZHODAyMTFfV0VYVFxcbm5ldC93aXJlbGVzcy9pYnNzLmMtMTg2LVxcdGlmICghbm93ZXh0KVxcbi0tXFxubmV0L3dpcmVsZXNzL2lic3MuYz0xOTI9aW50IGNmZzgwMjExX2xlYXZlX2lic3Moc3RydWN0IGNmZzgwMjExX3JlZ2lzdGVyZWRfZGV2aWNlICpyZGV2LFxcbi0tXFxubmV0L3dpcmVsZXNzL2lic3MuYy0yMTMtXFxubmV0L3dpcmVsZXNzL2lic3MuYzoyMTQ6I2lmZGVmIENPTkZJR19DRkc4MDIxMV9XRVhUXFxubmV0L3dpcmVsZXNzL2lic3MuYy0yMTUtaW50IGNmZzgwMjExX2lic3Nfd2V4dF9qb2luKHN0cnVjdCBjZmc4MDIxMV9yZWdpc3RlcmVkX2RldmljZSAqcmRldixcXG4tLVxcbm5ldC93aXJlbGVzcy9tbG1lLmM9Mjc3PXZvaWQgY2ZnODAyMTFfbWljaGFlbF9taWNfZmFpbHVyZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBjb25zdCB1OCAqYWRkcixcXG4tLVxcbm5ldC93aXJlbGVzcy9tbG1lLmMtMjgyLVxcdHN0cnVjdCBjZmc4MDIxMV9yZWdpc3RlcmVkX2RldmljZSAqcmRldiA9IHdpcGh5X3RvX3JkZXYod2lwaHkpO1xcbm5ldC93aXJlbGVzcy9tbG1lLmM6MjgzOiNpZmRlZiBDT05GSUdfQ0ZHODAyMTFfV0VYVFxcbm5ldC93aXJlbGVzcy9tbG1lLmMtMjg0LVxcdHVuaW9uIGl3cmVxX2RhdGEgd3JxdTtcXG4tLVxcbm5ldC93aXJlbGVzcy9ubDgwMjExLmM9NjY2PW5sODAyMTFfbmFuX3BlZXJfbWFwX3BvbGljeVtOTDgwMjExX05BTl9QRUVSX01BUF9BVFRSX01BWCArIDFdID0ge1xcbi0tXFxubmV0L3dpcmVsZXNzL25sODAyMTEuYy02NjgtXFx0W05MODAyMTFfTkFOX1BFRVJfTUFQX0FUVFJfVElNRV9TTE9UU10gPVxcbm5ldC93aXJlbGVzcy9ubDgwMjExLmM6NjY5OlxcdFxcdE5MQV9QT0xJQ1lfRVhBQ1RfTEVOKENGRzgwMjExX05BTl9TQ0hFRF9OVU1fVElNRV9TTE9UUyksXFxubmV0L3dpcmVsZXNzL25sODAyMTEuYy02NzAtfTtcXG4tLVxcbm5ldC93aXJlbGVzcy9ubDgwMjExLmM9NzAwPXN0YXRpYyBjb25zdCBzdHJ1Y3QgbmxhX3BvbGljeSBubDgwMjExX3BvbGljeVtOVU1fTkw4MDIxMV9BVFRSXSA9IHtcXG4tLVxcbm5ldC93aXJlbGVzcy9ubDgwMjExLmMtMTA4Mi1cXHRbTkw4MDIxMV9BVFRSX05BTl9USU1FX1NMT1RTXSA9XFxubmV0L3dpcmVsZXNzL25sODAyMTEuYzoxMDgzOlxcdFxcdE5MQV9QT0xJQ1lfRVhBQ1RfTEVOKENGRzgwMjExX05BTl9TQ0hFRF9OVU1fVElNRV9TTE9UUyksXFxubmV0L3dpcmVsZXNzL25sODAyMTEuYy0xMDg0LVxcdFtOTDgwMjExX0FUVFJfTkFOX0FWQUlMX0JMT0JdID1cXG4tLVxcbm5ldC93aXJlbGVzcy9ubDgwMjExLmM9NTQ2Nj1zdGF0aWMgaW50IG5sODAyMTFfc2V0X2tleShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKVxcbi0tXFxubmV0L3dpcmVsZXNzL25sODAyMTEuYy01NTA4LVxcbm5ldC93aXJlbGVzcy9ubDgwMjExLmM6NTUwOTojaWZkZWYgQ09ORklHX0NGRzgwMjExX1dFWFRcXG5uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jLTU1MTAtXFx0XFx0d2Rldi1cXHUwMDNld2V4dC5kZWZhdWx0X2tleSA9IGtleS5pZHg7XFxuLS1cXG5uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jLTU1MzEtXFxubmV0L3dpcmVsZXNzL25sODAyMTEuYzo1NTMyOiNpZmRlZiBDT05GSUdfQ0ZHODAyMTFfV0VYVFxcbm5ldC93aXJlbGVzcy9ubDgwMjExLmMtNTUzMy1cXHRcXHR3ZGV2LVxcdTAwM2V3ZXh0LmRlZmF1bHRfbWdtdF9rZXkgPSBrZXkuaWR4O1xcbi0tXFxubmV0L3dpcmVsZXNzL25sODAyMTEuYz01NjQ0PXN0YXRpYyBpbnQgbmw4MDIxMV9kZWxfa2V5KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pXFxuLS1cXG5uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jLTU2OTAtXFxubmV0L3dpcmVsZXNzL25sODAyMTEuYzo1NjkxOiNpZmRlZiBDT05GSUdfQ0ZHODAyMTFfV0VYVFxcbm5ldC93aXJlbGVzcy9ubDgwMjExLmMtNTY5Mi1cXHRpZiAoIWVycikge1xcbi0tXFxubmV0L3dpcmVsZXNzL25sODAyMTEuYz03ODY3PXN0YXRpYyBpbnQgbmw4MDIxMV9maWxsX2xpbmtfc3RhdGlvbihzdHJ1Y3Qgc2tfYnVmZiAqbXNnLFxcbi0tXFxubmV0L3dpcmVsZXNzL25sODAyMTEuYy03OTE0LVxcdHN3aXRjaCAocmRldi1cXHUwMDNld2lwaHkuc2lnbmFsX3R5cGUpIHtcXG5uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jOjc5MTU6XFx0Y2FzZSBDRkc4MDIxMV9TSUdOQUxfVFlQRV9NQk06XFxubmV0L3dpcmVsZXNzL25sODAyMTEuYy03OTE2LVxcdFxcdFBVVF9MSU5LX1NJTkZPKFNJR05BTCwgc2lnbmFsLCB1OCk7XFxuLS1cXG5uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jPTgwNDU9c3RhdGljIGludCBubDgwMjExX3B1dF9zdGFfaW5mb19jb21tb24oc3RydWN0IHNrX2J1ZmYgKm1zZyxcXG4tLVxcbm5ldC93aXJlbGVzcy9ubDgwMjExLmMtODA5NC1cXHRzd2l0Y2ggKHJkZXYtXFx1MDAzZXdpcGh5LnNpZ25hbF90eXBlKSB7XFxubmV0L3dpcmVsZXNzL25sODAyMTEuYzo4MDk1OlxcdGNhc2UgQ0ZHODAyMTFfU0lHTkFMX1RZUEVfTUJNOlxcbm5ldC93aXJlbGVzcy9ubDgwMjExLmMtODA5Ni1cXHRcXHRQVVRfU0lORk8oU0lHTkFMLCBzaWduYWwsIHU4KTtcXG4tLVxcbm5ldC93aXJlbGVzcy9ubDgwMjExLmM9ODc5MD1pbnQgY2ZnODAyMTFfY2hlY2tfc3RhdGlvbl9jaGFuZ2Uoc3RydWN0IHdpcGh5ICp3aXBoeSxcXG4tLVxcbm5ldC93aXJlbGVzcy9ubDgwMjExLmMtODc5NC1cXHRpZiAocGFyYW1zLVxcdTAwM2VsaXN0ZW5faW50ZXJ2YWwgIT0gLTEgXFx1MDAyNlxcdTAwMjZcXG5uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jOjg3OTU6XFx0ICAgIHN0YXR5cGUgIT0gQ0ZHODAyMTFfU1RBX0FQX0NMSUVOVF9VTkFTU09DKVxcbm5ldC93aXJlbGVzcy9ubDgwMjExLmMtODc5Ni1cXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4tLVxcbm5ldC93aXJlbGVzcy9ubDgwMjExLmMtODc5OC1cXHRpZiAocGFyYW1zLVxcdTAwM2VzdXBwb3J0X3AycF9wcyAhPSAtMSBcXHUwMDI2XFx1MDAyNlxcbm5ldC93aXJlbGVzcy9ubDgwMjExLmM6ODc5OTpcXHQgICAgc3RhdHlwZSAhPSBDRkc4MDIxMV9TVEFfQVBfQ0xJRU5UX1VOQVNTT0MpXFxubmV0L3dpcmVsZXNzL25sODAyMTEuYy04ODAwLVxcdFxcdHJldHVybiAtRUlOVkFMO1xcbi0tXFxubmV0L3dpcmVsZXNzL25sODAyMTEuYy04ODAzLVxcdCAgICAhKHBhcmFtcy1cXHUwMDNlc3RhX2ZsYWdzX3NldCBcXHUwMDI2IEJJVChOTDgwMjExX1NUQV9GTEFHX1RETFNfUEVFUikpIFxcdTAwMjZcXHUwMDI2XFxubmV0L3dpcmVsZXNzL25sODAyMTEuYzo4ODA0OlxcdCAgICBzdGF0eXBlICE9IENGRzgwMjExX1NUQV9BUF9DTElFTlRfVU5BU1NPQylcXG5uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jLTg4MDUtXFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuLS1cXG5uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jLTg4MTAtXFx0c3dpdGNoIChzdGF0eXBlKSB7XFxubmV0L3dpcmVsZXNzL25sODAyMTEuYzo4ODExOlxcdGNhc2UgQ0ZHODAyMTFfU1RBX01FU0hfUEVFUl9LRVJORUw6XFxubmV0L3dpcmVsZXNzL25sODAyMTEuYzo4ODEyOlxcdGNhc2UgQ0ZHODAyMTFfU1RBX01FU0hfUEVFUl9VU0VSOlxcbm5ldC93aXJlbGVzcy9ubDgwMjExLmMtODgxMy1cXHRcXHQvKlxcbi0tXFxubmV0L3dpcmVsZXNzL25sODAyMTEuYy04ODIzLVxcdFxcdGJyZWFrO1xcbm5ldC93aXJlbGVzcy9ubDgwMjExLmM6ODgyNDpcXHRjYXNlIENGRzgwMjExX1NUQV9URExTX1BFRVJfU0VUVVA6XFxubmV0L3dpcmVsZXNzL25sODAyMTEuYzo4ODI1OlxcdGNhc2UgQ0ZHODAyMTFfU1RBX1RETFNfUEVFUl9BQ1RJVkU6XFxubmV0L3dpcmVsZXNzL25sODAyMTEuYy04ODI2LVxcdFxcdGlmICghKHBhcmFtcy1cXHUwMDNlc3RhX2ZsYWdzX3NldCBcXHUwMDI2IEJJVChOTDgwMjExX1NUQV9GTEFHX1RETFNfUEVFUikpKVxcbi0tXFxubmV0L3dpcmVsZXNzL25sODAyMTEuYy04ODQwLVxcbm5ldC93aXJlbGVzcy9ubDgwMjExLmM6ODg0MTpcXHRpZiAoc3RhdHlwZSAhPSBDRkc4MDIxMV9TVEFfVERMU19QRUVSX1NFVFVQIFxcdTAwMjZcXHUwMDI2XFxubmV0L3dpcmVsZXNzL25sODAyMTEuYzo4ODQyOlxcdCAgICBzdGF0eXBlICE9IENGRzgwMjExX1NUQV9URExTX1BFRVJfQUNUSVZFKSB7XFxubmV0L3dpcmVsZXNzL25sODAyMTEuYy04ODQzLVxcdFxcdC8qIFRETFMgY2FuJ3QgYmUgc2V0LCAuLi4gKi9cXG4tLVxcbm5ldC93aXJlbGVzcy9ubDgwMjExLmMtODg1My1cXG5uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jOjg4NTQ6XFx0aWYgKHN0YXR5cGUgIT0gQ0ZHODAyMTFfU1RBX1RETFNfUEVFUl9TRVRVUCBcXHUwMDI2XFx1MDAyNlxcbm5ldC93aXJlbGVzcy9ubDgwMjExLmM6ODg1NTpcXHQgICAgc3RhdHlwZSAhPSBDRkc4MDIxMV9TVEFfQVBfQ0xJRU5UX1VOQVNTT0MpIHtcXG5uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jLTg4NTYtXFx0XFx0LyogcmVqZWN0IG90aGVyIHRoaW5ncyB0aGF0IGNhbid0IGNoYW5nZSAqL1xcbi0tXFxubmV0L3dpcmVsZXNzL25sODAyMTEuYy04ODYyLVxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbm5ldC93aXJlbGVzcy9ubDgwMjExLmM6ODg2MzpcXHRcXHRpZiAoc3RhdHlwZSAhPSBDRkc4MDIxMV9TVEFfTkFOX01HTVQgXFx1MDAyNlxcdTAwMjZcXG5uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jLTg4NjQtXFx0XFx0ICAgIChwYXJhbXMtXFx1MDAzZWxpbmtfc3RhX3BhcmFtcy5odF9jYXBhIHx8XFxuLS1cXG5uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jLTg4NzQtXFxubmV0L3dpcmVsZXNzL25sODAyMTEuYzo4ODc1OlxcdGlmIChzdGF0eXBlICE9IENGRzgwMjExX1NUQV9BUF9DTElFTlQgXFx1MDAyNlxcdTAwMjZcXG5uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jOjg4NzY6XFx0ICAgIHN0YXR5cGUgIT0gQ0ZHODAyMTFfU1RBX0FQX0NMSUVOVF9VTkFTU09DKSB7XFxubmV0L3dpcmVsZXNzL25sODAyMTEuYy04ODc3LVxcdFxcdGlmIChwYXJhbXMtXFx1MDAzZXZsYW4pXFxuLS1cXG5uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jLTg4ODEtXFx0LyogQWNjZXB0IEVNTFNSIGNhcGFiaWxpdGllcyBvbmx5IGZvciBBUCBjbGllbnQgYmVmb3JlIGFzc29jaWF0aW9uICovXFxubmV0L3dpcmVsZXNzL25sODAyMTEuYzo4ODgyOlxcdGlmIChzdGF0eXBlICE9IENGRzgwMjExX1NUQV9BUF9DTElFTlRfVU5BU1NPQyBcXHUwMDI2XFx1MDAyNlxcbm5ldC93aXJlbGVzcy9ubDgwMjExLmMtODg4My1cXHQgICAgcGFyYW1zLVxcdTAwM2VlbWxfY2FwX3ByZXNlbnQpXFxuLS1cXG5uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jLTg4ODYtXFx0c3dpdGNoIChzdGF0eXBlKSB7XFxubmV0L3dpcmVsZXNzL25sODAyMTEuYzo4ODg3OlxcdGNhc2UgQ0ZHODAyMTFfU1RBX0FQX01MTUVfQ0xJRU5UOlxcbm5ldC93aXJlbGVzcy9ubDgwMjExLmMtODg4OC1cXHRcXHQvKiBVc2UgdGhpcyBvbmx5IGZvciBhdXRob3JpemluZy91bmF1dGhvcml6aW5nIGEgc3RhdGlvbiAqL1xcbi0tXFxubmV0L3dpcmVsZXNzL25sODAyMTEuYy04ODkxLVxcdFxcdGJyZWFrO1xcbm5ldC93aXJlbGVzcy9ubDgwMjExLmM6ODg5MjpcXHRjYXNlIENGRzgwMjExX1NUQV9BUF9DTElFTlQ6XFxubmV0L3dpcmVsZXNzL25sODAyMTEuYzo4ODkzOlxcdGNhc2UgQ0ZHODAyMTFfU1RBX0FQX0NMSUVOVF9VTkFTU09DOlxcbm5ldC93aXJlbGVzcy9ubDgwMjExLmMtODg5NC1cXHRcXHQvKiBhY2NlcHQgb25seSB0aGUgbGlzdGVkIGJpdHMgKi9cXG4tLVxcbm5ldC93aXJlbGVzcy9ubDgwMjExLmMtODkxMS1cXHRcXHRicmVhaztcXG5uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jOjg5MTI6XFx0Y2FzZSBDRkc4MDIxMV9TVEFfSUJTUzpcXG5uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jOjg5MTM6XFx0Y2FzZSBDRkc4MDIxMV9TVEFfQVBfU1RBOlxcbm5ldC93aXJlbGVzcy9ubDgwMjExLmMtODkxNC1cXHRcXHQvKiByZWplY3QgYW55IGNoYW5nZXMgb3RoZXIgdGhhbiBBVVRIT1JJWkVEICovXFxuLS1cXG5uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jLTg5MTctXFx0XFx0YnJlYWs7XFxubmV0L3dpcmVsZXNzL25sODAyMTEuYzo4OTE4OlxcdGNhc2UgQ0ZHODAyMTFfU1RBX1RETFNfUEVFUl9TRVRVUDpcXG5uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jLTg5MTktXFx0XFx0LyogcmVqZWN0IGFueSBjaGFuZ2VzIG90aGVyIHRoYW4gQVVUSE9SSVpFRCBvciBXTUUgKi9cXG4tLVxcbm5ldC93aXJlbGVzcy9ubDgwMjExLmMtODkyNy1cXHRcXHRicmVhaztcXG5uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jOjg5Mjg6XFx0Y2FzZSBDRkc4MDIxMV9TVEFfVERMU19QRUVSX0FDVElWRTpcXG5uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jLTg5MjktXFx0XFx0LyogcmVqZWN0IGFueSBjaGFuZ2VzICovXFxubmV0L3dpcmVsZXNzL25sODAyMTEuYy04OTMwLVxcdFxcdHJldHVybiAtRUlOVkFMO1xcbm5ldC93aXJlbGVzcy9ubDgwMjExLmM6ODkzMTpcXHRjYXNlIENGRzgwMjExX1NUQV9NRVNIX1BFRVJfS0VSTkVMOlxcbm5ldC93aXJlbGVzcy9ubDgwMjExLmMtODkzMi1cXHRcXHRpZiAocGFyYW1zLVxcdTAwM2VzdGFfbW9kaWZ5X21hc2sgXFx1MDAyNiBTVEFUSU9OX1BBUkFNX0FQUExZX1BMSU5LX1NUQVRFKVxcbi0tXFxubmV0L3dpcmVsZXNzL25sODAyMTEuYy04OTM0LVxcdFxcdGJyZWFrO1xcbm5ldC93aXJlbGVzcy9ubDgwMjExLmM6ODkzNTpcXHRjYXNlIENGRzgwMjExX1NUQV9NRVNIX1BFRVJfVVNFUjpcXG5uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jLTg5MzYtXFx0XFx0aWYgKHBhcmFtcy1cXHUwMDNlcGxpbmtfYWN0aW9uICE9IE5MODAyMTFfUExJTktfQUNUSU9OX05PX0FDVElPTiBcXHUwMDI2XFx1MDAyNlxcbi0tXFxubmV0L3dpcmVsZXNzL25sODAyMTEuYy04OTM5LVxcdFxcdGJyZWFrO1xcbm5ldC93aXJlbGVzcy9ubDgwMjExLmM6ODk0MDpcXHRjYXNlIENGRzgwMjExX1NUQV9OQU5fTUdNVDpcXG5uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jLTg5NDEtXFx0XFx0aWYgKHBhcmFtcy1cXHUwMDNlc3RhX2ZsYWdzX21hc2sgXFx1MDAyNlxcbi0tXFxubmV0L3dpcmVsZXNzL25sODAyMTEuYy04OTQ1LVxcdFxcdGJyZWFrO1xcbm5ldC93aXJlbGVzcy9ubDgwMjExLmM6ODk0NjpcXHRjYXNlIENGRzgwMjExX1NUQV9OQU5fREFUQTpcXG5uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jLTg5NDctXFx0XFx0aWYgKHBhcmFtcy1cXHUwMDNlc3RhX2ZsYWdzX21hc2sgXFx1MDAyNlxcbi0tXFxubmV0L3dpcmVsZXNzL25sODAyMTEuYy04OTU5LVxcdCAqL1xcbm5ldC93aXJlbGVzcy9ubDgwMjExLmM6ODk2MDpcXHRpZiAoc3RhdHlwZSAhPSBDRkc4MDIxMV9TVEFfQVBfQ0xJRU5UX1VOQVNTT0MgXFx1MDAyNlxcdTAwMjZcXG5uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jOjg5NjE6XFx0ICAgIHN0YXR5cGUgIT0gQ0ZHODAyMTFfU1RBX1RETFNfUEVFUl9TRVRVUClcXG5uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jLTg5NjItXFx0XFx0cGFyYW1zLVxcdTAwM2VsaW5rX3N0YV9wYXJhbXMub3Btb2RlX25vdGlmX3VzZWQgPSBmYWxzZTtcXG4tLVxcbm5ldC93aXJlbGVzcy9ubDgwMjExLmM9MTA4MDQ9c3RhdGljIGludCBubDgwMjExX2dldF9yZWdfZHVtcChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbi0tXFxubmV0L3dpcmVsZXNzL25sODAyMTEuYy0xMDg0NS1cXG5uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jOjEwODQ2OiNpZmRlZiBDT05GSUdfQ0ZHODAyMTFfQ1JEQV9TVVBQT1JUXFxubmV0L3dpcmVsZXNzL25sODAyMTEuYy0xMDg0Ny1zdGF0aWMgY29uc3Qgc3RydWN0IG5sYV9wb2xpY3kgcmVnX3J1bGVfcG9saWN5W05MODAyMTFfUkVHX1JVTEVfQVRUUl9NQVggKyAxXSA9IHtcXG4tLVxcbm5ldC93aXJlbGVzcy9ubDgwMjExLmM9MTA4OTc9c3RhdGljIGludCBubDgwMjExX3NldF9yZWcoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGdlbmxfaW5mbyAqaW5mbylcXG4tLVxcbm5ldC93aXJlbGVzcy9ubDgwMjExLmMtMTA5NzUtfVxcbm5ldC93aXJlbGVzcy9ubDgwMjExLmM6MTA5NzY6I2VuZGlmIC8qIENPTkZJR19DRkc4MDIxMV9DUkRBX1NVUFBPUlQgKi9cXG5uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jLTEwOTc3LVxcbi0tXFxubmV0L3dpcmVsZXNzL25sODAyMTEuYz0xMjM5OT1zdGF0aWMgaW50IG5sODAyMTFfc2VuZF9ic3Moc3RydWN0IHNrX2J1ZmYgKm1zZywgc3RydWN0IG5ldGxpbmtfY2FsbGJhY2sgKmNiLFxcbi0tXFxubmV0L3dpcmVsZXNzL25sODAyMTEuYy0xMjQ5Ni1cXHRcXHRzd2l0Y2ggKHJkZXYtXFx1MDAzZXdpcGh5LnNpZ25hbF90eXBlKSB7XFxubmV0L3dpcmVsZXNzL25sODAyMTEuYzoxMjQ5NzpcXHRcXHRjYXNlIENGRzgwMjExX1NJR05BTF9UWVBFX01CTTpcXG5uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jLTEyNDk4LVxcdFxcdFxcdGlmIChubGFfcHV0X3UzMihtc2csIE5MODAyMTFfQlNTX1NJR05BTF9NQk0sXFxuLS1cXG5uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jLTEyNTAxLVxcdFxcdFxcdGJyZWFrO1xcbm5ldC93aXJlbGVzcy9ubDgwMjExLmM6MTI1MDI6XFx0XFx0Y2FzZSBDRkc4MDIxMV9TSUdOQUxfVFlQRV9VTlNQRUM6XFxubmV0L3dpcmVsZXNzL25sODAyMTEuYy0xMjUwMy1cXHRcXHRcXHRpZiAobmxhX3B1dF91OChtc2csIE5MODAyMTFfQlNTX1NJR05BTF9VTlNQRUMsXFxuLS1cXG5uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jPTE2NTQzPXN0YXRpYyBpbnQgbmw4MDIxMV9wYXJzZV9uYW5fY29uZihzdHJ1Y3Qgd2lwaHkgKndpcGh5LFxcbi0tXFxubmV0L3dpcmVsZXNzL25sODAyMTEuYy0xNjU1Ny1cXG5uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jOjE2NTU4OlxcdFxcdGNoYW5nZWQgfD0gQ0ZHODAyMTFfTkFOX0NPTkZfQ0hBTkdFRF9QUkVGO1xcbm5ldC93aXJlbGVzcy9ubDgwMjExLmMtMTY1NTktXFx0fVxcbi0tXFxubmV0L3dpcmVsZXNzL25sODAyMTEuYy0xNjU3MC1cXHRcXHRjb25mLVxcdTAwM2ViYW5kcyA9IGJhbmRzO1xcbm5ldC93aXJlbGVzcy9ubDgwMjExLmM6MTY1NzE6XFx0XFx0Y2hhbmdlZCB8PSBDRkc4MDIxMV9OQU5fQ09ORl9DSEFOR0VEX0JBTkRTO1xcbm5ldC93aXJlbGVzcy9ubDgwMjExLmMtMTY1NzItXFx0fVxcbi0tXFxubmV0L3dpcmVsZXNzL25sODAyMTEuYy0xNjU5Mi1cXG5uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jOjE2NTkzOlxcdGNoYW5nZWQgfD0gQ0ZHODAyMTFfTkFOX0NPTkZfQ0hBTkdFRF9DT05GSUc7XFxubmV0L3dpcmVsZXNzL25sODAyMTEuYy0xNjU5NC1cXHRpZiAoYXR0cnNbTkw4MDIxMV9OQU5fQ09ORl9DTFVTVEVSX0lEXSBcXHUwMDI2XFx1MDAyNiBzdGFydCkge1xcbi0tXFxubmV0L3dpcmVsZXNzL25sODAyMTEuYz0xNzQwND1ubDgwMjExX3BhcnNlX25hbl9zY2hlZHVsZShzdHJ1Y3QgZ2VubF9pbmZvICppbmZvLCBzdHJ1Y3QgbmxhdHRyICpzbG90c19hdHRyLFxcbm5ldC93aXJlbGVzcy9ubDgwMjExLmM6MTc0MDU6XFx0XFx0XFx0ICAgdTggc2NoZWR1bGVbQ0ZHODAyMTFfTkFOX1NDSEVEX05VTV9USU1FX1NMT1RTXSxcXG5uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jLTE3NDA2LVxcdFxcdFxcdCAgIHU4IG5fY2hhbm5lbHMpXFxubmV0L3dpcmVsZXNzL25sODAyMTEuYy0xNzQwNy17XFxubmV0L3dpcmVsZXNzL25sODAyMTEuYzoxNzQwODpcXHRpZiAoV0FSTl9PTihubGFfbGVuKHNsb3RzX2F0dHIpICE9IENGRzgwMjExX05BTl9TQ0hFRF9OVU1fVElNRV9TTE9UUykpXFxubmV0L3dpcmVsZXNzL25sODAyMTEuYy0xNzQwOS1cXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4tLVxcbm5ldC93aXJlbGVzcy9ubDgwMjExLmMtMTc0MTItXFxubmV0L3dpcmVsZXNzL25sODAyMTEuYzoxNzQxMzpcXHRmb3IgKGludCBzbG90ID0gMDsgc2xvdCBcXHUwMDNjIENGRzgwMjExX05BTl9TQ0hFRF9OVU1fVElNRV9TTE9UUzsgc2xvdCsrKSB7XFxubmV0L3dpcmVsZXNzL25sODAyMTEuYy0xNzQxNC1cXHRcXHRpZiAoc2NoZWR1bGVbc2xvdF0gIT0gTkw4MDIxMV9OQU5fU0NIRURfTk9UX0FWQUlMX1NMT1QgXFx1MDAyNlxcdTAwMjZcXG4tLVxcbm5ldC93aXJlbGVzcy9ubDgwMjExLmM9MTc1MTA9c3RhdGljIGludCBubDgwMjExX25hbl9zZXRfcGVlcl9zY2hlZChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbi0tXFxubmV0L3dpcmVsZXNzL25sODAyMTEuYy0xNzYwNC1cXHRmb3IgKGludCBqID0gMDsgaiBcXHUwMDNjIEFSUkFZX1NJWkUoc2NoZWQubWFwcyk7IGorKylcXG5uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jOjE3NjA1OlxcdFxcdHNjaGVkLm1hcHNbal0ubWFwX2lkID0gQ0ZHODAyMTFfTkFOX0lOVkFMSURfTUFQX0lEO1xcbm5ldC93aXJlbGVzcy9ubDgwMjExLmMtMTc2MDYtXFxuLS1cXG5uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jPTE5MjMwPXN0YXRpYyBpbnQgbmw4MDIxMV9zZXRfaHdfdGltZXN0YW1wKHN0cnVjdCBza19idWZmICpza2IsXFxuLS1cXG5uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jLTE5MjQwLVxcdGlmICghaW5mby1cXHUwMDNlYXR0cnNbTkw4MDIxMV9BVFRSX01BQ10gXFx1MDAyNlxcdTAwMjZcXG5uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jOjE5MjQxOlxcdCAgICByZGV2LVxcdTAwM2V3aXBoeS5od190aW1lc3RhbXBfbWF4X3BlZXJzICE9IENGRzgwMjExX0hXX1RJTUVTVEFNUF9BTExfUEVFUlMpXFxubmV0L3dpcmVsZXNzL25sODAyMTEuYy0xOTI0Mi1cXHRcXHRyZXR1cm4gLUVPUE5PVFNVUFA7XFxuLS1cXG5uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jPTE5NzMzPXN0YXRpYyBjb25zdCBzdHJ1Y3QgZ2VubF9zbWFsbF9vcHMgbmw4MDIxMV9zbWFsbF9vcHNbXSA9IHtcXG4tLVxcbm5ldC93aXJlbGVzcy9ubDgwMjExLmMtMTk5MDYtXFx0fSxcXG5uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jOjE5OTA3OiNpZmRlZiBDT05GSUdfQ0ZHODAyMTFfQ1JEQV9TVVBQT1JUXFxubmV0L3dpcmVsZXNzL25sODAyMTEuYy0xOTkwOC1cXHR7XFxuLS1cXG5uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jPTIzNDA3PXZvaWQgY2ZnODAyMTFfc2NoZWR1bGVfY2hhbm5lbHNfY2hlY2soc3RydWN0IHdpcmVsZXNzX2RldiAqd2RldilcXG4tLVxcbm5ldC93aXJlbGVzcy9ubDgwMjExLmMtMjM0MTQtXFx0XFx0XFx0XFx0ICAgICBOTDgwMjExX0VYVF9GRUFUVVJFX0RGU19DT05DVVJSRU5UKSB8fFxcbm5ldC93aXJlbGVzcy9ubDgwMjExLmM6MjM0MTU6XFx0ICAgIChJU19FTkFCTEVEKENPTkZJR19DRkc4MDIxMV9SRUdfUkVMQVhfTk9fSVIpIFxcdTAwMjZcXHUwMDI2XFxubmV0L3dpcmVsZXNzL25sODAyMTEuYy0yMzQxNi1cXHQgICAgIHdpcGh5LVxcdTAwM2VyZWd1bGF0b3J5X2ZsYWdzIFxcdTAwMjYgUkVHVUxBVE9SWV9FTkFCTEVfUkVMQVhfTk9fSVIpKSlcXG4tLVxcbm5ldC93aXJlbGVzcy9yZGV2LW9wcy5oLTYtICovXFxubmV0L3dpcmVsZXNzL3JkZXYtb3BzLmg6NzojaWZuZGVmIF9fQ0ZHODAyMTFfUkRFVl9PUFNcXG5uZXQvd2lyZWxlc3MvcmRldi1vcHMuaDo4OiNkZWZpbmUgX19DRkc4MDIxMV9SREVWX09QU1xcbm5ldC93aXJlbGVzcy9yZGV2LW9wcy5oLTktXFxuLS1cXG5uZXQvd2lyZWxlc3MvcmRldi1vcHMuaD0xNjI1PXJkZXZfc2V0X2VwY3Moc3RydWN0IGNmZzgwMjExX3JlZ2lzdGVyZWRfZGV2aWNlICpyZGV2LFxcbi0tXFxubmV0L3dpcmVsZXNzL3JkZXYtb3BzLmgtMTYzOC1cXG5uZXQvd2lyZWxlc3MvcmRldi1vcHMuaDoxNjM5OiNlbmRpZiAvKiBfX0NGRzgwMjExX1JERVZfT1BTICovXFxuLS1cXG5uZXQvd2lyZWxlc3MvcmVnLmM9NDk3PXN0YXRpYyBpbnQgcmVnX3NjaGVkdWxlX2FwcGx5KGNvbnN0IHN0cnVjdCBpZWVlODAyMTFfcmVnZG9tYWluICpyZWdkb20pXFxuLS1cXG5uZXQvd2lyZWxlc3MvcmVnLmMtNTE2LVxcbm5ldC93aXJlbGVzcy9yZWcuYzo1MTc6I2lmZGVmIENPTkZJR19DRkc4MDIxMV9DUkRBX1NVUFBPUlRcXG5uZXQvd2lyZWxlc3MvcmVnLmMtNTE4LS8qIE1heCBudW1iZXIgb2YgY29uc2VjdXRpdmUgYXR0ZW1wdHMgdG8gY29tbXVuaWNhdGUgd2l0aCBDUkRBICAqL1xcbi0tXFxubmV0L3dpcmVsZXNzL3JlZy5jPTU4Nj1zdGF0aWMgaW5saW5lIGludCBjYWxsX2NyZGEoY29uc3QgY2hhciAqYWxwaGEyKVxcbi0tXFxubmV0L3dpcmVsZXNzL3JlZy5jLTU4OS19XFxubmV0L3dpcmVsZXNzL3JlZy5jOjU5MDojZW5kaWYgLyogQ09ORklHX0NGRzgwMjExX0NSREFfU1VQUE9SVCAqL1xcbm5ldC93aXJlbGVzcy9yZWcuYy01OTEtXFxuLS1cXG5uZXQvd2lyZWxlc3MvcmVnLmM9Njk3PXN0YXRpYyBib29sIHZhbGlkX2NvdW50cnkoY29uc3QgdTggKmRhdGEsIHVuc2lnbmVkIGludCBzaXplLFxcbi0tXFxubmV0L3dpcmVsZXNzL3JlZy5jLTcyOS1cXG5uZXQvd2lyZWxlc3MvcmVnLmM6NzMwOiNpZmRlZiBDT05GSUdfQ0ZHODAyMTFfUkVRVUlSRV9TSUdORURfUkVHREJcXG5uZXQvd2lyZWxlc3MvcmVnLmMtNzMxLSNpbmNsdWRlIFxcdTAwM2NrZXlzL2FzeW1tZXRyaWMtdHlwZS5oXFx1MDAzZVxcbi0tXFxubmV0L3dpcmVsZXNzL3JlZy5jPTczNT1zdGF0aWMgaW50IF9faW5pdCBsb2FkX2J1aWx0aW5fcmVnZGJfa2V5cyh2b2lkKVxcbi0tXFxubmV0L3dpcmVsZXNzL3JlZy5jLTc0Ny1cXG5uZXQvd2lyZWxlc3MvcmVnLmM6NzQ4OiNpZmRlZiBDT05GSUdfQ0ZHODAyMTFfVVNFX0tFUk5FTF9SRUdEQl9LRVlTXFxubmV0L3dpcmVsZXNzL3JlZy5jLTc0OS1cXHR4NTA5X2xvYWRfY2VydGlmaWNhdGVfbGlzdChzaGlwcGVkX3JlZ2RiX2NlcnRzLFxcbi0tXFxubmV0L3dpcmVsZXNzL3JlZy5jLTc1Mi0jZW5kaWZcXG5uZXQvd2lyZWxlc3MvcmVnLmM6NzUzOiNpZmRlZiBDT05GSUdfQ0ZHODAyMTFfRVhUUkFfUkVHREJfS0VZRElSXFxubmV0L3dpcmVsZXNzL3JlZy5jOjc1NDpcXHRpZiAoQ09ORklHX0NGRzgwMjExX0VYVFJBX1JFR0RCX0tFWURJUlswXSAhPSAnXFxcXDAnKVxcbm5ldC93aXJlbGVzcy9yZWcuYy03NTUtXFx0XFx0eDUwOV9sb2FkX2NlcnRpZmljYXRlX2xpc3QoZXh0cmFfcmVnZGJfY2VydHMsXFxuLS1cXG5uZXQvd2lyZWxlc3MvcmVnLmM9Nzk4PXN0YXRpYyB2b2lkIGZyZWVfcmVnZGJfa2V5cmluZyh2b2lkKVxcbi0tXFxubmV0L3dpcmVsZXNzL3JlZy5jLTgwMC19XFxubmV0L3dpcmVsZXNzL3JlZy5jOjgwMTojZW5kaWYgLyogQ09ORklHX0NGRzgwMjExX1JFUVVJUkVfU0lHTkVEX1JFR0RCICovXFxubmV0L3dpcmVsZXNzL3JlZy5jLTgwMi1cXG4tLVxcbm5ldC93aXJlbGVzcy9yZWcuYz0yMDM4PWJvb2wgcmVnX2xhc3RfcmVxdWVzdF9jZWxsX2Jhc2Uodm9pZClcXG4tLVxcbm5ldC93aXJlbGVzcy9yZWcuYy0yMDQyLVxcbm5ldC93aXJlbGVzcy9yZWcuYzoyMDQzOiNpZmRlZiBDT05GSUdfQ0ZHODAyMTFfUkVHX0NFTExVTEFSX0hJTlRTXFxubmV0L3dpcmVsZXNzL3JlZy5jLTIwNDQtLyogQ29yZSBzcGVjaWZpYyBjaGVjayAqL1xcbi0tXFxubmV0L3dpcmVsZXNzL3NjYW4uYz0yMzA9c3RhdGljIHNpemVfdCBjZmc4MDIxMV9jb3B5X2VsZW1fd2l0aF9mcmFncyhjb25zdCBzdHJ1Y3QgZWxlbWVudCAqZWxlbSxcXG4tLVxcbm5ldC93aXJlbGVzcy9zY2FuLmMtMjY3LVxcbm5ldC93aXJlbGVzcy9zY2FuLmM6MjY4OlZJU0lCTEVfSUZfQ0ZHODAyMTFfS1VOSVQgc2l6ZV90XFxubmV0L3dpcmVsZXNzL3NjYW4uYy0yNjktY2ZnODAyMTFfZ2VuX25ld19pZShjb25zdCB1OCAqaWUsIHNpemVfdCBpZWxlbixcXG4tLVxcbm5ldC93aXJlbGVzcy9zY2FuLmMtNDA2LX1cXG5uZXQvd2lyZWxlc3Mvc2Nhbi5jOjQwNzpFWFBPUlRfU1lNQk9MX0lGX0NGRzgwMjExX0tVTklUKGNmZzgwMjExX2dlbl9uZXdfaWUpO1xcbm5ldC93aXJlbGVzcy9zY2FuLmMtNDA4LVxcbi0tXFxubmV0L3dpcmVsZXNzL3NjYW4uYz01NDY9c3RhdGljIGludCBjZmc4MDIxMV9jYWxjX3Nob3J0X3NzaWQoY29uc3Qgc3RydWN0IGNmZzgwMjExX2Jzc19pZXMgKmllcyxcXG4tLVxcbm5ldC93aXJlbGVzcy9zY2FuLmMtNTU3LVxcblxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNVQwMTowNDowMC43MDA3OTQ4NTRaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyODUyMDcyNzYzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aGUgcHJvY2VzcywgY29uc2lkZXJpbmcgbXkgZXhwZXJ0aXNlOlxuXG4qKkRpc3NlY3Rpbmcgd2lwaHlfdW5yZWdpc3RlcigpIGFuZCBjZmc4MDIxMV9yZGV2X2xpc3QgTWFuaXB1bGF0aW9uKipcblxuT2theSwgc28gSSdtIGRpZ2dpbmcgaW50byBgd2lwaHlfdW5yZWdpc3RlcigpYCBhbmQsIGFzIHVzdWFsLCBteSBmaXJzdCB0aG91Z2h0IGlzLCBcIldoZXJlJ3MgdGhlIGNyaXRpY2FsIHNlY3Rpb24/IEhvdyBhcmUgd2UgcHJvdGVjdGluZyBgY2ZnODAyMTFfcmRldl9saXN0YD9cIi4gSSBrbm93IHRoZSBsaXN0IGlzIGxpa2VseSBwcm90ZWN0ZWQgYnkgYSBtdXRleCBvciBzcGlubG9jaywgYW5kIEkgbmVlZCB0byBpZGVudGlmeSB3aGljaCBvbmUgYW5kIHVuZGVyc3RhbmQgdGhlIGxvY2tpbmcgb3JkZXIsIGVzcGVjaWFsbHkgZ2l2ZW4gdGhhdCBpdCBpcyBhIGdsb2JhbCByZXNvdXJjZS4gSSdtIGxvb2tpbmcgZm9yIHRoZSBkYW5jZSBvZiBhY3F1aXJpbmcgYW5kIHJlbGVhc2luZyB0aGF0IGxvY2suIElzIGl0IGEgc2ltcGxlIGxvY2tpbmcgc2NoZW1lLCBvciBzb21ldGhpbmcgbW9yZSBjb21wbGV4IHdpdGggcmVhZGVyL3dyaXRlciBsb2Nrcz8gVGhpcyBpcyBjcml0aWNhbCBmb3IgcHJldmVudGluZyByYWNlIGNvbmRpdGlvbnMsIHBhcnRpY3VsYXJseSBkdXJpbmcgdGhlIHVucmVnaXN0cmF0aW9uIHByb2Nlc3Mgd2hlbiBkZXZpY2VzIGFyZSBsaWtlbHkgYmVpbmcgcmVtb3ZlZCBvciBkZWluaXRpYWxpemVkLiBJJ20gd29uZGVyaW5nIGlmIHRoZXJlIGFyZSBhbnkgY2FsbGJhY2tzIG9yIGhhbmRsZXJzIHRoYXQgYWxzbyBhY2Nlc3MgdGhhdCBnbG9iYWwgbGlzdCBhbmQgdGhhdCBtdXN0IGJlIGNvbnNpZGVyZWQgd2l0aCB0aGUgc3luY2hyb25pemF0aW9uIHByaW1pdGl2ZS4gSSBleHBlY3QgdG8gc2VlIHRoZSBjb2RlIGNhcmVmdWxseSBpdGVyYXRpbmcgdGhyb3VnaCBgY2ZnODAyMTFfcmRldl9saXN0YCBhbmQsIGF0IGVhY2ggc3RhZ2UsIHNhZmVseSBoYW5kbGluZyB0aGUgZGVhbGxvY2F0aW9uIG9mIHRoZSBgd2lwaHlgIHN0cnVjdHVyZS4gSSBuZWVkIHRvIHNlZSBob3cgdGhleSdyZSBoYW5kbGluZyByZWZlcmVuY2VzLCBpZiB0aGVyZSdzIGFueSByZWZjb3VudGluZyBoYXBwZW5pbmcsIG9yIGlmIHNvbWUgb3RoZXIgbWVjaGFuaXNtIGV4aXN0cyB0byBwcmV2ZW50IHVzZS1hZnRlci1mcmVlIHNjZW5hcmlvcy4gSSdtIHBhcnRpY3VsYXJseSBpbnRlcmVzdGVkIGluIHRoZSBpbnRlcmFjdGlvbiB3aXRoIHRoZSByZWd1bGF0b3J5IGRvbWFpbiBoYW5kbGluZzsgaXMgdGhlcmUgYW55dGhpbmcgc3BlY2lmaWMgaGFwcGVuaW5nIHRoZXJlIHRoYXQgbmVlZHMgdG8gYmUgY29uc2lkZXJlZCBpbiB0aGUgdW5yZWdpc3RyYXRpb24/IFRoaXMgaXMgdHlwaWNhbGx5IHdoZXJlIHRoaW5ncyBjYW4gZ2V0IHRyaWNreS4gQWxzbywgd2hhdCBoYXBwZW5zIHdpdGggYW55IHBlbmRpbmcgb3BlcmF0aW9ucyBvciB3b3JrcXVldWVzIGFzc29jaWF0ZWQgd2l0aCB0aGUgYHdpcGh5YD8gVGhlc2UgbmVlZCB0byBiZSBmbHVzaGVkIG9yIGNhbmNlbGxlZCBncmFjZWZ1bGx5LiBJIGFsc28gbXVzdCBldmFsdWF0ZSB0aGUgcG90ZW50aWFsIGZvciBkZWFkbG9ja3MuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE2MDE2LCJPdXRwdXRUb2tlbnMiOjM1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDVUMDE6MDQ6MDMuNTUyODcxNDQ3WiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjkzMzQwMTU5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNmZzgwMjExX3JkZXZfbGlzdFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvd2lyZWxlc3MvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC93aXJlbGVzcy9jb3JlLmM9NDM9TU9EVUxFX0FMSUFTX0dFTkxfRkFNSUxZKE5MODAyMTFfR0VOTF9OQU1FKTtcXG4tLVxcbm5ldC93aXJlbGVzcy9jb3JlLmMtNDUtLyogUkNVLXByb3RlY3RlZCAoYW5kIFJUTkwgZm9yIHdyaXRlcnMpICovXFxubmV0L3dpcmVsZXNzL2NvcmUuYzo0NjpMSVNUX0hFQUQoY2ZnODAyMTFfcmRldl9saXN0KTtcXG5uZXQvd2lyZWxlc3MvY29yZS5jOjQ3OmludCBjZmc4MDIxMV9yZGV2X2xpc3RfZ2VuZXJhdGlvbjtcXG5uZXQvd2lyZWxlc3MvY29yZS5jLTQ4LVxcbi0tXFxubmV0L3dpcmVsZXNzL2NvcmUuYz04NTM9aW50IHdpcGh5X3JlZ2lzdGVyKHN0cnVjdCB3aXBoeSAqd2lwaHkpXFxuLS1cXG5uZXQvd2lyZWxlc3MvY29yZS5jLTExNjUtXFxubmV0L3dpcmVsZXNzL2NvcmUuYzoxMTY2OlxcdGxpc3RfYWRkX3JjdShcXHUwMDI2cmRldi1cXHUwMDNlbGlzdCwgXFx1MDAyNmNmZzgwMjExX3JkZXZfbGlzdCk7XFxubmV0L3dpcmVsZXNzL2NvcmUuYzoxMTY3OlxcdGNmZzgwMjExX3JkZXZfbGlzdF9nZW5lcmF0aW9uKys7XFxubmV0L3dpcmVsZXNzL2NvcmUuYy0xMTY4LVxcbi0tXFxubmV0L3dpcmVsZXNzL2NvcmUuYz0xMjkwPXZvaWQgd2lwaHlfdW5yZWdpc3RlcihzdHJ1Y3Qgd2lwaHkgKndpcGh5KVxcbi0tXFxubmV0L3dpcmVsZXNzL2NvcmUuYy0xMzI0LVxcbm5ldC93aXJlbGVzcy9jb3JlLmM6MTMyNTpcXHRjZmc4MDIxMV9yZGV2X2xpc3RfZ2VuZXJhdGlvbisrO1xcbm5ldC93aXJlbGVzcy9jb3JlLmMtMTMyNi1cXHRkZXZpY2VfZGVsKFxcdTAwMjZyZGV2LVxcdTAwM2V3aXBoeS5kZXYpO1xcbi0tXFxubmV0L3dpcmVsZXNzL2NvcmUuaD0xNjY9ZXh0ZXJuIHN0cnVjdCB3b3JrcXVldWVfc3RydWN0ICpjZmc4MDIxMV93cTtcXG5uZXQvd2lyZWxlc3MvY29yZS5oOjE2NzpleHRlcm4gc3RydWN0IGxpc3RfaGVhZCBjZmc4MDIxMV9yZGV2X2xpc3Q7XFxubmV0L3dpcmVsZXNzL2NvcmUuaDoxNjg6ZXh0ZXJuIGludCBjZmc4MDIxMV9yZGV2X2xpc3RfZ2VuZXJhdGlvbjtcXG5uZXQvd2lyZWxlc3MvY29yZS5oLTE2OS1cXG4tLVxcbm5ldC93aXJlbGVzcy9jb3JlLmg9MTcxPXN0YXRpYyBpbmxpbmUgaW50IGZvcl9lYWNoX3JkZXZfY2hlY2tfcnRubCh2b2lkKVxcbi0tXFxubmV0L3dpcmVsZXNzL2NvcmUuaC0xNzctXFx0aWYgKGZvcl9lYWNoX3JkZXZfY2hlY2tfcnRubCgpKSB7fSBlbHNlXFx0XFx0XFx0XFx0XFxcXFxcbm5ldC93aXJlbGVzcy9jb3JlLmg6MTc4OlxcdFxcdGxpc3RfZm9yX2VhY2hfZW50cnkocmRldiwgXFx1MDAyNmNmZzgwMjExX3JkZXZfbGlzdCwgbGlzdClcXG5uZXQvd2lyZWxlc3MvY29yZS5oLTE3OS1cXG4tLVxcbm5ldC93aXJlbGVzcy9ubDgwMjExLmM9MzA1Nz1zdGF0aWMgaW50IG5sODAyMTFfc2VuZF93aXBoeShzdHJ1Y3QgY2ZnODAyMTFfcmVnaXN0ZXJlZF9kZXZpY2UgKnJkZXYsXFxuLS1cXG5uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jLTMwODMtXFx0ICAgIG5sYV9wdXRfdTMyKG1zZywgTkw4MDIxMV9BVFRSX0dFTkVSQVRJT04sXFxubmV0L3dpcmVsZXNzL25sODAyMTEuYzozMDg0OlxcdFxcdFxcdGNmZzgwMjExX3JkZXZfbGlzdF9nZW5lcmF0aW9uKSlcXG5uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jLTMwODUtXFx0XFx0Z290byBubGFfcHV0X2ZhaWx1cmU7XFxuLS1cXG5uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jPTQ2NTk9c3RhdGljIGludCBubDgwMjExX3NlbmRfaWZhY2Uoc3RydWN0IHNrX2J1ZmYgKm1zZywgdTMyIHBvcnRpZCwgdTMyIHNlcSwgaW50IGZsYWdzLFxcbi0tXFxubmV0L3dpcmVsZXNzL25sODAyMTEuYy00Njg4LVxcdFxcdFxcdHJkZXYtXFx1MDAzZWRldmxpc3RfZ2VuZXJhdGlvbiBeXFxubmV0L3dpcmVsZXNzL25sODAyMTEuYzo0Njg5OlxcdFxcdFxcdChjZmc4MDIxMV9yZGV2X2xpc3RfZ2VuZXJhdGlvbiBcXHUwMDNjXFx1MDAzYyAyKSkgfHxcXG5uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jLTQ2OTAtXFx0ICAgIG5sYV9wdXRfdTgobXNnLCBOTDgwMjExX0FUVFJfNEFERFIsIHdkZXYtXFx1MDAzZXVzZV80YWRkcikgfHxcXG4tLVxcbm5ldC93aXJlbGVzcy9ubDgwMjExLmM9MTA4MDQ9c3RhdGljIGludCBubDgwMjExX2dldF9yZWdfZHVtcChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbi0tXFxubmV0L3dpcmVsZXNzL25sODAyMTEuYy0xMDgyMi1cXHRyZWdfaWR4ID0gMTtcXG5uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jOjEwODIzOlxcdGxpc3RfZm9yX2VhY2hfZW50cnlfcmN1KHJkZXYsIFxcdTAwMjZjZmc4MDIxMV9yZGV2X2xpc3QsIGxpc3QpIHtcXG5uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jLTEwODI0LVxcdFxcdHJlZ2RvbSA9IGdldF93aXBoeV9yZWdkb20oXFx1MDAyNnJkZXYtXFx1MDAzZXdpcGh5KTtcXG4tLVxcbm5ldC93aXJlbGVzcy9ubDgwMjExLmM9MjMxMTU9c3RhdGljIGludCBubDgwMjExX25ldGxpbmtfbm90aWZ5KHN0cnVjdCBub3RpZmllcl9ibG9jayAqIG5iLFxcbi0tXFxubmV0L3dpcmVsZXNzL25sODAyMTEuYy0yMzEyOC1cXG5uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jOjIzMTI5OlxcdGxpc3RfZm9yX2VhY2hfZW50cnlfcmN1KHJkZXYsIFxcdTAwMjZjZmc4MDIxMV9yZGV2X2xpc3QsIGxpc3QpIHtcXG5uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jLTIzMTMwLVxcdFxcdHN0cnVjdCBjZmc4MDIxMV9zY2hlZF9zY2FuX3JlcXVlc3QgKnNjaGVkX3NjYW5fcmVxO1xcbi0tXFxubmV0L3dpcmVsZXNzL3JlZy5jPTI0NjQ9c3RhdGljIHZvaWQgcmVnX2NoZWNrX2NoYW5zX3dvcmsoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxcbi0tXFxubmV0L3dpcmVsZXNzL3JlZy5jLTI0NzUtXFx0cmN1X3JlYWRfbG9jaygpO1xcbm5ldC93aXJlbGVzcy9yZWcuYzoyNDc2OlxcdGxpc3RfZm9yX2VhY2hfZW50cnlfcmN1KHJkZXYsIFxcdTAwMjZjZmc4MDIxMV9yZGV2X2xpc3QsIGxpc3QpIHtcXG5uZXQvd2lyZWxlc3MvcmVnLmMtMjQ3Ny1cXHRcXHRyY3VfcmVhZF91bmxvY2soKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDVUMDE6MDQ6MDMuNjQ2MjE3MTU2WiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjEzMDIyOTE4NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipFeGFtaW5pbmcgdGhlIFdpcmVsZXNzIFJlZ3VsYXRvcnkgRG9tYWluIENvbmZpZ3VyYXRpb24qKlxuXG5BbHJpZ2h0LCBsZXQncyBicmVhayB0aGlzIGRvd24uIE15IGluaXRpYWwgaHVuY2ggaXMgY29uZmlybWVkOiBgbmV0L3dpcmVsZXNzL3JlZy5jYCBpcyBkZWZpbml0ZWx5IGJyb3VnaHQgaW50byB0aGUgYnVpbGQgcHJvY2VzcyB3aGVuIGBDT05GSUdfQ0ZHODAyMTFgIGlzIGVuYWJsZWQuIFRpbWUgdG8gdmVyaWZ5IHRoYXQgYXNzdW1wdGlvbi4gTGV0J3MgZGlnIGludG8gYG5ldC93aXJlbGVzcy9NYWtlZmlsZWAuIFl1cCwganVzdCBhcyBleHBlY3RlZCwgdGhlIGBvYmotJChDT05GSUdfQ0ZHODAyMTEpICs9IGNmZzgwMjExLm9gIGxpbmUgY2xlYXJseSBzaG93cyB0aGUgY29uZGl0aW9uYWwgaW5jbHVzaW9uLiBBbmQgdGhlcmUgaXQgaXMsIGluc2lkZSB0aGUgYGNmZzgwMjExLXlgIHZhcmlhYmxlIGRlZmluaXRpb246IGByZWcub2AgaXMgaW5kZWVkIGJlaW5nIGNvbXBpbGVkIGFsb25nIHdpdGggdGhlIG90aGVyIGNvcmUgbW9kdWxlcy4gQWx3YXlzIGdvb2QgdG8gZG91YmxlIGNoZWNrLCBzbyBsZXQncyBtYWtlIHN1cmUgdGhhdCdzIGNvcnJlY3QsIGdvaW5nIGJhY2sgdG8gdGhlIGBuZXQvd2lyZWxlc3MvTWFrZWZpbGVgIHRvIGNvbmZpcm0uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE3ODEwLCJPdXRwdXRUb2tlbnMiOjMxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTA5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA1VDAxOjA0OjA1Ljc3NjQ0OTQwMVoiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1OTQyMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvd2lyZWxlc3MvTWFrZWZpbGVcIixcbiAgXCJGaXJzdExpbmVcIjogMSxcbiAgXCJMaW5lQ291bnRcIjogMzBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiICAgMTpcXHQjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXFxuICAgMjpcXHRvYmotJChDT05GSUdfQ0ZHODAyMTEpICs9IGNmZzgwMjExLm9cXG4gICAzOlxcdG9iai15ICs9IHRlc3RzL1xcbiAgIDQ6XFx0XFxuICAgNTpcXHRvYmotJChDT05GSUdfV0VYVF9DT1JFKSArPSB3ZXh0LWNvcmUub1xcbiAgIDY6XFx0b2JqLSQoQ09ORklHX1dFWFRfUFJPQykgKz0gd2V4dC1wcm9jLm9cXG4gICA3OlxcdG9iai0kKENPTkZJR19XRVhUX1BSSVYpICs9IHdleHQtcHJpdi5vXFxuICAgODpcXHRcXG4gICA5OlxcdGNmZzgwMjExLXkgKz0gY29yZS5vIHN5c2ZzLm8gcmFkaW90YXAubyB1dGlsLm8gcmVnLm8gc2Nhbi5vIG5sODAyMTEub1xcbiAgMTA6XFx0Y2ZnODAyMTEteSArPSBtbG1lLm8gaWJzcy5vIHNtZS5vIGNoYW4ubyBldGh0b29sLm8gbWVzaC5vIGFwLm8gdHJhY2UubyBvY2Iub1xcbiAgMTE6XFx0Y2ZnODAyMTEteSArPSBtaWNoYWVsLW1pYy5vIHBtc3Iub1xcbiAgMTI6XFx0Y2ZnODAyMTEtJChDT05GSUdfT0YpICs9IG9mLm9cXG4gIDEzOlxcdGNmZzgwMjExLSQoQ09ORklHX0NGRzgwMjExX0RFQlVHRlMpICs9IGRlYnVnZnMub1xcbiAgMTQ6XFx0Y2ZnODAyMTEtJChDT05GSUdfQ0ZHODAyMTFfV0VYVCkgKz0gd2V4dC1jb21wYXQubyB3ZXh0LXNtZS5vXFxuICAxNTpcXHRcXG4gIDE2OlxcdENGTEFHU190cmFjZS5vIDo9IC1JJChzcmMpXFxuICAxNzpcXHRcXG4gIDE4OlxcdGNmZzgwMjExLSQoQ09ORklHX0NGRzgwMjExX1VTRV9LRVJORUxfUkVHREJfS0VZUykgKz0gc2hpcHBlZC1jZXJ0cy5vXFxuICAxOTpcXHRpZm5lcSAoJChDT05GSUdfQ0ZHODAyMTFfRVhUUkFfUkVHREJfS0VZRElSKSwpXFxuICAyMDpcXHRjZmc4MDIxMS15ICs9IGV4dHJhLWNlcnRzLm9cXG4gIDIxOlxcdGVuZGlmXFxuICAyMjpcXHRcXG4gIDIzOlxcdCQob2JqKS9zaGlwcGVkLWNlcnRzLmM6ICQoc29ydCAkKHdpbGRjYXJkICQoc3JjKS9jZXJ0cy8qLmhleCkpXFxuICAyNDpcXHRcXHRAJChrZWNobykgXFxcIiAgR0VOICAgICAkQFxcXCJcXG4gIDI1OlxcdFxcdCQoUSkoZWNobyAnI2luY2x1ZGUgXFxcInJlZy5oXFxcIic7IFxcXFxcXG4gIDI2OlxcdFxcdCAgZWNobyAnY29uc3QgdTggc2hpcHBlZF9yZWdkYl9jZXJ0c1tdID0geyc7IFxcXFxcXG4gIDI3OlxcdFxcdCAgZWNobyB8IGNhdCAtICReIDsgXFxcXFxcbiAgMjg6XFx0XFx0ICBlY2hvICd9Oyc7IFxcXFxcXG4gIDI5OlxcdFxcdCAgZWNobyAndW5zaWduZWQgaW50IHNoaXBwZWRfcmVnZGJfY2VydHNfbGVuID0gc2l6ZW9mKHNoaXBwZWRfcmVnZGJfY2VydHMpOyc7IFxcXFxcXG4gIDMwOlxcdFxcdCApIFxcdTAwM2UgJEBcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDVUMDE6MDQ6MDUuNzc2NTExMzIxWiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjIwMzcxNzU0NTcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBhIHN1bW1hcnkgb2YgbXkgdGhvdWdodCBwcm9jZXNzOlxuXG4qKkRpdmluZyBpbnRvIHRoZSBLZXJuZWwgV2lyZWxlc3MgQ29uZmlndXJhdGlvbioqXG5cbk9rYXksIHNvIEkgbmVlZCB0byBmaWd1cmUgb3V0IHRoZSBkZXBlbmRlbmNpZXMgcmVsYXRlZCB0byBgQ0ZHODAyMTFgLiBUaW1lIHRvIGhlYWQgc3RyYWlnaHQgdG8gdGhlIHNvdXJjZSDigJMgYG5ldC93aXJlbGVzcy9LY29uZmlnYC4gVGhhdCdzIHdoZXJlIGFsbCB0aGUga2VybmVsIHdpcmVsZXNzIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBhcmUgZGVmaW5lZCwgYW5kIGBDRkc4MDIxMWAgaXMgb2J2aW91c2x5IGEgY29yZSBjb21wb25lbnQgb2YgdGhhdC4gSSdsbCBuZWVkIHRvIGNhcmVmdWxseSBleGFtaW5lIHRoYXQgZmlsZSB0byB1bmRlcnN0YW5kIHdoaWNoIG90aGVyIG9wdGlvbnMsIGZlYXR1cmVzLCBvciBtb2R1bGVzIHJlbHkgb24gb3IgYXJlIGxpbmtlZCB0byBgQ0ZHODAyMTFgLiBVbmRlcnN0YW5kaW5nIHRob3NlIGRlcGVuZGVuY2llcyBpcyBjcnVjaWFsIGZvciBhbnkgbW9kaWZpY2F0aW9ucyBvciBkZWVwZXIgYW5hbHlzaXMgSSdtIHBsYW5uaW5nLiBJIG5lZWQgdG8gZW5zdXJlIG5vdGhpbmcgYnJlYWtzIHVuZXhwZWN0ZWRseSBsYXRlciBvbiBkb3duIHRoZSBsaW5lLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxODc2NywiT3V0cHV0VG9rZW5zIjozMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI0LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDVUMDE6MDQ6MDcuODEzNjg5Njk4WiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEwOTk3MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvd2lyZWxlc3MvS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiAxLFxuICBcIkxpbmVDb3VudFwiOiA0MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgICAxOlxcdCMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxcbiAgIDI6XFx0Y29uZmlnIFdJUkVMRVNTX0VYVFxcbiAgIDM6XFx0XFx0Ym9vbFxcbiAgIDQ6XFx0XFxuICAgNTpcXHRjb25maWcgV0VYVF9DT1JFXFxuICAgNjpcXHRcXHRkZWZfYm9vbCB5XFxuICAgNzpcXHRcXHRkZXBlbmRzIG9uIENGRzgwMjExX1dFWFQgfHwgV0lSRUxFU1NfRVhUXFxuICAgODpcXHRcXG4gICA5OlxcdGNvbmZpZyBXRVhUX1BST0NcXG4gIDEwOlxcdFxcdGRlZl9ib29sIHlcXG4gIDExOlxcdFxcdGRlcGVuZHMgb24gUFJPQ19GU1xcbiAgMTI6XFx0XFx0ZGVwZW5kcyBvbiBXRVhUX0NPUkVcXG4gIDEzOlxcdFxcbiAgMTQ6XFx0Y29uZmlnIFdFWFRfUFJJVlxcbiAgMTU6XFx0XFx0Ym9vbFxcbiAgMTY6XFx0XFxuICAxNzpcXHRjb25maWcgQ0ZHODAyMTFcXG4gIDE4OlxcdFxcdHRyaXN0YXRlIFxcXCJjZmc4MDIxMSAtIHdpcmVsZXNzIGNvbmZpZ3VyYXRpb24gQVBJXFxcIlxcbiAgMTk6XFx0XFx0ZGVwZW5kcyBvbiBSRktJTEwgfHwgIVJGS0lMTFxcbiAgMjA6XFx0XFx0c2VsZWN0IEZXX0xPQURFUlxcbiAgMjE6XFx0XFx0c2VsZWN0IENSQzMyXFxuICAyMjpcXHRcXHQjIG1heSBuZWVkIHRvIHVwZGF0ZSB0aGlzIHdoZW4gY2VydGlmaWNhdGVzIGFyZSBjaGFuZ2VkIGFuZCBhcmVcXG4gIDIzOlxcdFxcdCMgdXNpbmcgYSBkaWZmZXJlbnQgYWxnb3JpdGhtLCB0aG91Z2ggcmlnaHQgbm93IHRoZXkgc2hvdWxkbid0XFxuICAyNDpcXHRcXHQjICh0aGlzIGlzIGhlcmUgcmF0aGVyIHRoYW4gYmVsb3cgdG8gYWxsb3cgaXQgdG8gYmUgYSBtb2R1bGUpXFxuICAyNTpcXHRcXHRzZWxlY3QgQ1JZUFRPX1NIQTI1NiBpZiBDRkc4MDIxMV9VU0VfS0VSTkVMX1JFR0RCX0tFWVNcXG4gIDI2OlxcdFxcdGhlbHBcXG4gIDI3OlxcdFxcdCAgY2ZnODAyMTEgaXMgdGhlIExpbnV4IHdpcmVsZXNzIExBTiAoODAyLjExKSBjb25maWd1cmF0aW9uIEFQSS5cXG4gIDI4OlxcdFxcdCAgRW5hYmxlIHRoaXMgaWYgeW91IGhhdmUgYSB3aXJlbGVzcyBkZXZpY2UuXFxuICAyOTpcXHRcXG4gIDMwOlxcdFxcdCAgRm9yIG1vcmUgaW5mb3JtYXRpb24gcmVmZXIgdG8gZG9jdW1lbnRhdGlvbiBvbiB0aGUgd2lyZWxlc3Mgd2lraTpcXG4gIDMxOlxcdFxcbiAgMzI6XFx0XFx0ICBodHRwczovL3dpcmVsZXNzLndpa2kua2VybmVsLm9yZy9lbi9kZXZlbG9wZXJzL0RvY3VtZW50YXRpb24vY2ZnODAyMTFcXG4gIDMzOlxcdFxcbiAgMzQ6XFx0XFx0ICBXaGVuIGJ1aWx0IGFzIGEgbW9kdWxlIGl0IHdpbGwgYmUgY2FsbGVkIGNmZzgwMjExLlxcbiAgMzU6XFx0XFxuICAzNjpcXHRpZiBDRkc4MDIxMVxcbiAgMzc6XFx0XFxuICAzODpcXHRjb25maWcgTkw4MDIxMV9URVNUTU9ERVxcbiAgMzk6XFx0XFx0Ym9vbCBcXFwibmw4MDIxMSB0ZXN0bW9kZSBjb21tYW5kXFxcIlxcbiAgNDA6XFx0XFx0aGVscFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNVQwMTowNDowNy44MTM4MDIxMzhaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NDM2ODM3MTk3OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIFJlZ3VsYXRvcnkgRG9tYWluIENoYW5nZSBpbiBgbmV0L3dpcmVsZXNzL3JlZy5jYCoqXG5cbk9rYXksIGxldCdzIGJyZWFrIGRvd24gdGhpcyBjb2RlIGNoYW5nZSBpbiBgbmV0L3dpcmVsZXNzL3JlZy5jYC4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIGlkZW50aWZ5IGV4YWN0bHkgKndoYXQqIGNoYW5nZWQgYW5kIHdoeS4gSSBzZWUgdGhlIG1vZGlmaWNhdGlvbiB3aXRoaW4gYHJlZ19jaGVja19jaGFuc193b3JrYCwgYSBjcml0aWNhbCBmdW5jdGlvbiBpbnZvbHZlZCBpbiB2ZXJpZnlpbmcgYWN0aXZlIHdpcmVsZXNzIGludGVyZmFjZXMgYWZ0ZXIgYSByZWd1bGF0b3J5IGNoYW5nZS5cblxuQmVmb3JlLCBpdCB3YXMgYSBzdHJhaWdodGZvcndhcmQgbG9vcCwgaG9sZGluZyB0aGUgYHJ0bmxfbG9ja2Agd2hpbGUgaXRlcmF0aW5nIHRocm91Z2ggcmVnaXN0ZXJlZCBkZXZpY2VzIGFuZCBjYWxsaW5nIGByZWdfbGVhdmVfaW52YWxpZF9jaGFuc2AuICBOb3csIGl0J3MgYmVlbiByZWZhY3RvcmVkLiBUaGUga2V5IGRpZmZlcmVuY2UgaXMgdGhlIGludHJvZHVjdGlvbiBvZiBgcmN1X3JlYWRfbG9ja2AgYW5kIGByY3VfcmVhZF91bmxvY2tgIHN1cnJvdW5kaW5nIGEgYGxpc3RfZm9yX2VhY2hfZW50cnlfcmN1YCBpdGVyYXRpb24sIHdpdGggYHJ0bmxfbG9ja2AgYW5kIGBydG5sX3VubG9ja2AgbmVzdGVkIHdpdGhpbi4gVGhlIGNvbW1lbnQgZXhwbGFpbmluZyB0aGlzIGNoYW5nZSBpcyB0aGUgaW1wb3J0YW50IGNsdWU6IHRoaXMgd2FzIGRvbmUgdG8gYWRkcmVzcyBwb3RlbnRpYWwgc3RhcnZhdGlvbiBvZiBvdGhlciBSVE5MIHdhaXRlcnMgYmVjYXVzZSBgY2ZnODAyMTFfbGVhdmVgIGNhbiBiZSBzbG93LCBhbmQgdG8gYXZvaWQgaXNzdWVzIGFyb3VuZCByZGV2IHVucmVnaXN0cmF0aW9uLiBTcGVjaWZpY2FsbHksIGB3aXBoeV91bnJlZ2lzdGVyYCBob2xkcyBgcnRubF9sb2NrYCBhY3Jvc3MgYGxpc3RfZGVsX3JjdWAgYW5kIGBzeW5jaHJvbml6ZV9yY3VgLCBzbyB0aGUgYHJkZXZgIGNhbid0IGJlIGZyZWVkIHdoaWxlIHRoZSBgcnRubF9sb2NrYCBpcyBoZWxkLiBTbywgdGhlIG9yaWdpbmFsIGxvY2sgaGVsZCB0aGUgUlROTCBsb2NrIHRvbyBsb25nLiBUaGUgY2hhbmdlIGVuc3VyZXMgUlROTCBpcyBoZWxkIG9uIGEgcGVyLWRldmljZSBiYXNpcy5cblxuTm93LCB0aGUgaW1wb3J0YW50IHF1ZXN0aW9uIGZvciBteSB3b3JrIGlzOiBJcyB0aGlzIGNvZGUgcGF0aCByZWFjaGFibGUsIHBhcnRpY3VsYXJseSB3aXRoaW4gbXkgc3RhbmRhcmQgdGVzdGluZyBlbnZpcm9ubWVudHMsIGxpa2Ugc3l6a2FsbGVyIG9yIHZpcnR1YWxpemVkIHNldHVwcz8gQWJzb2x1dGVseS4gVGhlIGBjZmc4MDIxMWAgc3Vic3lzdGVtLCBjb3VwbGVkIHdpdGggYG1hYzgwMjExYCBhbmQgYG1hYzgwMjExX2h3c2ltYCwgcHJvdmlkZXMgbXVsdGlwbGUgYXZlbnVlcy4gUmVndWxhdG9yeSBkb21haW4gY2hhbmdlcyB2aWEgTkw4MDIxMSBjb21tYW5kcywgbGlrZSBgTkw4MDIxMV9DTURfUkVRX1NFVF9SRUdgLCB0cmlnZ2VyIGByZWdfY2hlY2tfY2hhbm5lbHMoKWAgb3IsIGFzIEkgc2VlIGhlcmUsIHRoZSBkZWxheWVkIHdvcmsgZnVuY3Rpb24gdGhhdCB1bHRpbWF0ZWx5IGxlYWRzIHRvIHRoaXMgYHJlZ19jaGVja19jaGFuc193b3JrYCBjYWxsLlxuXG5NeSBuZXh0IGltbWVkaWF0ZSBzdGVwIGlzIHRvIHRyYWNlIHRoZSBjYWxsIHBhdGhzIHRvIGNvbmZpcm0sIGluIGRldGFpbCwgd2hlcmUgYHJlZ19jaGVja19jaGFubmVsc2Agb3IgYHJlZ19jaGVja19jaGFuc193b3JrYCBpcyBjYWxsZWQsIGFuZCBob3cgaXQgaXMgc2NoZWR1bGVkLiBUaGlzIHdpbGwgaGVscCBkZXRlcm1pbmUgdGhlIHByZWNpc2UgY29uZGl0aW9ucyB1bmRlciB3aGljaCB0aGlzIGxvY2tpbmcgY2hhbmdlIGJlY29tZXMgYWN0aXZlIGFuZCBob3cgbGlrZWx5IGEgcGFydGljdWxhciB0ZXN0IGNhc2Ugd2lsbCBleGVyY2lzZSB0aGUgY2hhbmdlZCBjb2RlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxOTUxNSwiT3V0cHV0VG9rZW5zIjozMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjUxMCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA1VDAxOjA0OjEyLjE4MjE3NjQ3N1oiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTA5MzU0MDQ4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInJlZ19jaGVja19jaGFuc1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvd2lyZWxlc3MvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC93aXJlbGVzcy9yZWcuYz0yMjE9c3RydWN0IHJlZ19iZWFjb24ge1xcbi0tXFxubmV0L3dpcmVsZXNzL3JlZy5jLTIyNS1cXG5uZXQvd2lyZWxlc3MvcmVnLmM6MjI2OnN0YXRpYyB2b2lkIHJlZ19jaGVja19jaGFuc193b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yayk7XFxubmV0L3dpcmVsZXNzL3JlZy5jOjIyNzpzdGF0aWMgREVDTEFSRV9ERUxBWUVEX1dPUksocmVnX2NoZWNrX2NoYW5zLCByZWdfY2hlY2tfY2hhbnNfd29yayk7XFxubmV0L3dpcmVsZXNzL3JlZy5jLTIyOC1cXG4tLVxcbm5ldC93aXJlbGVzcy9yZWcuYz0yNDQ5PXN0YXRpYyB2b2lkIHJlZ19sZWF2ZV9pbnZhbGlkX2NoYW5zKHN0cnVjdCB3aXBoeSAqd2lwaHkpXFxuLS1cXG5uZXQvd2lyZWxlc3MvcmVnLmMtMjQ2My1cXG5uZXQvd2lyZWxlc3MvcmVnLmM6MjQ2NDpzdGF0aWMgdm9pZCByZWdfY2hlY2tfY2hhbnNfd29yayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXFxubmV0L3dpcmVsZXNzL3JlZy5jLTI0NjUte1xcbi0tXFxubmV0L3dpcmVsZXNzL3JlZy5jPTI0ODY9dm9pZCByZWdfY2hlY2tfY2hhbm5lbHModm9pZClcXG4tLVxcbm5ldC93aXJlbGVzcy9yZWcuYy0yNDkyLVxcdG1vZF9kZWxheWVkX3dvcmsoc3lzdGVtX3Bvd2VyX2VmZmljaWVudF93cSxcXG5uZXQvd2lyZWxlc3MvcmVnLmM6MjQ5MzpcXHRcXHRcXHQgXFx1MDAyNnJlZ19jaGVja19jaGFucyxcXG5uZXQvd2lyZWxlc3MvcmVnLmMtMjQ5NC1cXHRcXHRcXHQgbXNlY3NfdG9famlmZmllcyhSRUdfRU5GT1JDRV9HUkFDRV9NUykpO1xcbi0tXFxubmV0L3dpcmVsZXNzL3JlZy5jPTQzNTk9dm9pZCByZWd1bGF0b3J5X2V4aXQodm9pZClcXG4tLVxcbm5ldC93aXJlbGVzcy9yZWcuYy00MzY1LVxcdGNhbmNlbF9jcmRhX3RpbWVvdXRfc3luYygpO1xcbm5ldC93aXJlbGVzcy9yZWcuYzo0MzY2OlxcdGNhbmNlbF9kZWxheWVkX3dvcmtfc3luYyhcXHUwMDI2cmVnX2NoZWNrX2NoYW5zKTtcXG5uZXQvd2lyZWxlc3MvcmVnLmMtNDM2Ny1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDVUMDE6MDQ6MTIuMjkxNTM0Njg1WiIsIlNlcSI6MTUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjIwNTM5MTM5NzcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzOlxuXG4qKlRyYWNpbmcgdGhlIENhbGwgUGF0aDogYHJlZ19jaGVja19jaGFubmVsc2AqKlxuXG5Pa2F5LCBzbyBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgZXhlY3V0aW9uIGZsb3cgdGhhdCBsZWFkcyB0byBgcmVnX2NoZWNrX2NoYW5uZWxzYC4gVGhhdCdzIHRoZSBrZXkuIEkgY2FuJ3QganVzdCBsb29rIGF0IHRoZSBmdW5jdGlvbiBkZWZpbml0aW9uOyBJIG5lZWQgdG8gc2VlIHdoZXJlIGl0J3MgYmVpbmcgKnVzZWQqLiBJIG5lZWQgdG8gaWRlbnRpZnkgdGhlIGNhbGwgc2l0ZXMuIFRpbWUgdG8gZ2V0IG15IGJlYXJpbmdzIGFuZCB0cmFjZSB0aGUgY2FsbHMuIEknbSBnb2luZyB0byBmb2xsb3cgdGhlIGJyZWFkY3J1bWJzIGFuZCBzZWUgd2hlcmUgdGhhdCBmdW5jdGlvbiBpcyBiZWluZyBpbnZva2VkLiBVbmRlcnN0YW5kaW5nIHRoZSBjb250ZXh0IHdpbGwgZ2l2ZSBtZSBjbHVlcyBhYm91dCBpdHMgcHVycG9zZSBhbmQgaG93IGl0IGZpdHMgaW50byB0aGUgbGFyZ2VyIGFyY2hpdGVjdHVyZS4gTGV0J3MgZGlnIGluIGFuZCBmaW5kIHRob3NlIGNhbGwgbG9jYXRpb25zLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMTAwNSwiT3V0cHV0VG9rZW5zIjoyOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA1VDAxOjA0OjE0LjM0NTQ1MjE1MVoiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjQ3NDI4MjgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwicmVnX2NoZWNrX2NoYW5uZWxzXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC93aXJlbGVzcy9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L3dpcmVsZXNzL25sODAyMTEuYz0yMzQwNz12b2lkIGNmZzgwMjExX3NjaGVkdWxlX2NoYW5uZWxzX2NoZWNrKHN0cnVjdCB3aXJlbGVzc19kZXYgKndkZXYpXFxuLS1cXG5uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jLTIzNDE2LVxcdCAgICAgd2lwaHktXFx1MDAzZXJlZ3VsYXRvcnlfZmxhZ3MgXFx1MDAyNiBSRUdVTEFUT1JZX0VOQUJMRV9SRUxBWF9OT19JUikpKVxcbm5ldC93aXJlbGVzcy9ubDgwMjExLmM6MjM0MTc6XFx0XFx0cmVnX2NoZWNrX2NoYW5uZWxzKCk7XFxubmV0L3dpcmVsZXNzL25sODAyMTEuYy0yMzQxOC19XFxuLS1cXG5uZXQvd2lyZWxlc3MvcmVnLmM9MjQ2ND1zdGF0aWMgdm9pZCByZWdfY2hlY2tfY2hhbnNfd29yayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXFxuLS1cXG5uZXQvd2lyZWxlc3MvcmVnLmMtMjQ4NS1cXG5uZXQvd2lyZWxlc3MvcmVnLmM6MjQ4Njp2b2lkIHJlZ19jaGVja19jaGFubmVscyh2b2lkKVxcbm5ldC93aXJlbGVzcy9yZWcuYy0yNDg3LXtcXG4tLVxcbm5ldC93aXJlbGVzcy9yZWcuYz0yNTI3PXN0YXRpYyB2b2lkIHVwZGF0ZV9hbGxfd2lwaHlfcmVndWxhdG9yeShlbnVtIG5sODAyMTFfcmVnX2luaXRpYXRvciBpbml0aWF0b3IpXFxuLS1cXG5uZXQvd2lyZWxlc3MvcmVnLmMtMjUzOC1cXG5uZXQvd2lyZWxlc3MvcmVnLmM6MjUzOTpcXHRyZWdfY2hlY2tfY2hhbm5lbHMoKTtcXG5uZXQvd2lyZWxlc3MvcmVnLmMtMjU0MC19XFxuLS1cXG5uZXQvd2lyZWxlc3MvcmVnLmM9MzAyNT1zdGF0aWMgdm9pZCByZWdfcHJvY2Vzc19oaW50KHN0cnVjdCByZWd1bGF0b3J5X3JlcXVlc3QgKnJlZ19yZXF1ZXN0KVxcbi0tXFxubmV0L3dpcmVsZXNzL3JlZy5jLTMwNjgtXFx0XFx0d2lwaHlfYWxsX3NoYXJlX2Rmc19jaGFuX3N0YXRlKHdpcGh5KTtcXG5uZXQvd2lyZWxlc3MvcmVnLmM6MzA2OTpcXHRcXHRyZWdfY2hlY2tfY2hhbm5lbHMoKTtcXG5uZXQvd2lyZWxlc3MvcmVnLmMtMzA3MC1cXHR9XFxuLS1cXG5uZXQvd2lyZWxlc3MvcmVnLmM9MzE5Nz1zdGF0aWMgdm9pZCByZWdfcHJvY2Vzc19zZWxmX21hbmFnZWRfaGludHModm9pZClcXG4tLVxcbm5ldC93aXJlbGVzcy9yZWcuYy0zMjA4LVxcbm5ldC93aXJlbGVzcy9yZWcuYzozMjA5OlxcdHJlZ19jaGVja19jaGFubmVscygpO1xcbm5ldC93aXJlbGVzcy9yZWcuYy0zMjEwLX1cXG4tLVxcbm5ldC93aXJlbGVzcy9yZWcuYz0zMjg1PXZvaWQgcmVndWxhdG9yeV9oaW50X2luZG9vcihib29sIGlzX2luZG9vciwgdTMyIHBvcnRpZClcXG4tLVxcbm5ldC93aXJlbGVzcy9yZWcuYy0zMzA2LVxcdGlmICghaXNfaW5kb29yKVxcbm5ldC93aXJlbGVzcy9yZWcuYzozMzA3OlxcdFxcdHJlZ19jaGVja19jaGFubmVscygpO1xcbm5ldC93aXJlbGVzcy9yZWcuYy0zMzA4LX1cXG4tLVxcbm5ldC93aXJlbGVzcy9yZWcuYz0zMzEwPXZvaWQgcmVndWxhdG9yeV9uZXRsaW5rX25vdGlmeSh1MzIgcG9ydGlkKVxcbi0tXFxubmV0L3dpcmVsZXNzL3JlZy5jLTMzMjMtXFxubmV0L3dpcmVsZXNzL3JlZy5jOjMzMjQ6XFx0cmVnX2NoZWNrX2NoYW5uZWxzKCk7XFxubmV0L3dpcmVsZXNzL3JlZy5jLTMzMjUtfVxcbi0tXFxubmV0L3dpcmVsZXNzL3JlZy5jPTM0ODk9c3RhdGljIHZvaWQgcmVzdG9yZV9yZWd1bGF0b3J5X3NldHRpbmdzKGJvb2wgcmVzZXRfdXNlciwgYm9vbCBjYWNoZWQpXFxuLS1cXG5uZXQvd2lyZWxlc3MvcmVnLmMtMzUwNi1cXHRcXHRyZWdfaXNfaW5kb29yID0gZmFsc2U7XFxubmV0L3dpcmVsZXNzL3JlZy5jOjM1MDc6XFx0XFx0cmVnX2NoZWNrX2NoYW5uZWxzKCk7XFxubmV0L3dpcmVsZXNzL3JlZy5jLTM1MDgtXFx0fVxcbi0tXFxubmV0L3dpcmVsZXNzL3JlZy5jPTQwNzY9aW50IHJlZ3VsYXRvcnlfc2V0X3dpcGh5X3JlZ2Rfc3luYyhzdHJ1Y3Qgd2lwaHkgKndpcGh5LFxcbi0tXFxubmV0L3dpcmVsZXNzL3JlZy5jLTQwODgtXFx0cmVnX3Byb2Nlc3Nfc2VsZl9tYW5hZ2VkX2hpbnQod2lwaHkpO1xcbm5ldC93aXJlbGVzcy9yZWcuYzo0MDg5OlxcdHJlZ19jaGVja19jaGFubmVscygpO1xcbm5ldC93aXJlbGVzcy9yZWcuYy00MDkwLVxcdHJldHVybiAwO1xcbi0tXFxubmV0L3dpcmVsZXNzL3JlZy5oPTE3ND1pbnQgcmVnX3JlbG9hZF9yZWdkYih2b2lkKTtcXG4tLVxcbm5ldC93aXJlbGVzcy9yZWcuaC0xNzYtLyoqXFxubmV0L3dpcmVsZXNzL3JlZy5oOjE3NzogKiByZWdfY2hlY2tfY2hhbm5lbHMgLSBzY2hlZHVsZSByZWd1bGF0b3J5IGVuZm9yY2VtZW50XFxubmV0L3dpcmVsZXNzL3JlZy5oLTE3OC0gKi9cXG5uZXQvd2lyZWxlc3MvcmVnLmg6MTc5OnZvaWQgcmVnX2NoZWNrX2NoYW5uZWxzKHZvaWQpO1xcbm5ldC93aXJlbGVzcy9yZWcuaC0xODAtXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA1VDAxOjA0OjE0LjQxMDIwMDY4MVoiLCJTZXEiOjE3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo1NDIwMDAwMzIxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFuYWx5c2lzIG9mIGEgQ29uY3VycmVuY3kgVnVsbmVyYWJpbGl0eSBpbiBXaXJlbGVzcyBSZWd1bGF0b3J5IEhhbmRsaW5nKipcblxuT2theSwgc28gSSd2ZSBiZWVuIGRpZ2dpbmcgaW50byB0aGlzIHBvdGVudGlhbCBjb25jdXJyZW5jeSBpc3N1ZSBpbiB0aGUgd2lyZWxlc3Mgc3RhY2ssIHNwZWNpZmljYWxseSBhcm91bmQgcmVndWxhdG9yeSBkb21haW4gaGFuZGxpbmcuIEl0IHNlZW1zIHRoYXQgYHJlZ19jaGVja19jaGFuc193b3JrYCDigJMgd2hpY2ggaXMgY2FsbGVkIGR1cmluZyByZWd1bGF0b3J5IGRvbWFpbiBzZXR0aW5ncywgd2lmaSBjb25maWd1cmF0aW9uLCBqb2luLCBhbmQgc2NhbiBvcGVyYXRpb25zIHRocm91Z2ggbmw4MDIxMSDigJMgaXMgdGhlIGN1bHByaXQuIFRoZSB2dWxuZXJhYmlsaXR5IGFyaXNlcyBmcm9tIGhvdyBpdCBpbnRlcmFjdHMgd2l0aCB0aGUgUkNVIG1lY2hhbmlzbS4gVGhlcmUncyB0aGlzIGNvbmN1cnJlbmN5IGJ1ZyB3aGVyZSB1bmxvY2tpbmcgdGhlIFJDVSByZWFkIGxvY2sgd2l0aGluIHRoZSBgbGlzdF9mb3JfZWFjaF9lbnRyeV9yY3VgIGxvb3AgY291bGQgbGVhZCB0byBsb2NrZGVwIHdhcm5pbmdzLCBSQ1Ugd2FybmluZ3MsIG9yIGV2ZW4gdXNlLWFmdGVyLWZyZWUgb3IgbGlzdCBjb3JydXB0aW9uIGlmIGEgd2lwaHkgaXMgcmVnaXN0ZXJlZCBvciB1bnJlZ2lzdGVyZWQgc2ltdWx0YW5lb3VzbHkuIFRoYXQncyBhIG5hc3R5IHNpdHVhdGlvbiwgZXNwZWNpYWxseSBpbiBhIHBhcnQgb2YgdGhlIGtlcm5lbCBleHBvc2VkIHRvIHVzZXItc3BhY2UuXG5cblRoZSBmaXJzdCB0aGluZyBJIGRpZCB3YXMgbWFrZSBzdXJlIHRoZSBiYXNpY3MgYXJlIGluIHBsYWNlLiBUaGUgb2J2aW91cyBkZXBlbmRlbmN5IGhlcmUgaXMgYENGRzgwMjExYCwgYW5kIGl0IGxvb2tzIGxpa2UgYHJlZ19jaGVja19jaGFuc193b3JrYCBpcyB1bmNvbmRpdGlvbmFsbHkgY29tcGlsZWQgd2hlbiB0aGF0J3MgZW5hYmxlZC4gR29vZC5cblxuTmV4dCwgSSBsb29rZWQgYXQgdGhlIHN5bWJvbHMgZGlyZWN0bHkgaW52b2x2ZWQuIEkgZm91bmQgdGhlc2Uga2V5IGZ1bmN0aW9uczogYHJlZ19jaGVja19jaGFuc193b3JrYCwgYHJlZ19jaGVja19jaGFubmVsc2AsIGByZWdfbGVhdmVfaW52YWxpZF9jaGFuc2AsIGFuZCB0aG9zZSBzY2hlZHVsaW5nIGZ1bmN0aW9ucyBsaWtlIGBjZmc4MDIxMV9zY2hlZHVsZV9jaGFubmVsc19jaGVja2AsIGByZWd1bGF0b3J5X2hpbnRfaW5kb29yYCwgYW5kIGByZWd1bGF0b3J5X3NldF93aXBoeV9yZWdkX3N5bmNgLiBJIGRvdWJsZS1jaGVja2VkIHRoYXQgYHJlZ19jaGVja19jaGFuc193b3JrYCBjYWxscyBgcmVnX2xlYXZlX2ludmFsaWRfY2hhbnNgIGFuZCB0aGF0IGByZWdfY2hlY2tfY2hhbm5lbHNgIHNjaGVkdWxlcyB0aGUgd29yay4gQWxzbywgd2hpbGUgYHJlZ19jaGVja19jaGFuc193b3JrYCBhbmQgYHJlZ19sZWF2ZV9pbnZhbGlkX2NoYW5zYCBhcmUgYm90aCBzdGF0aWMsIGByZWdfY2hlY2tfY2hhbnNfd29ya2Agd2lsbCBzdGlsbCBzaG93IHVwIGFzIGEgZGlzdGluY3Qgc3ltYm9sIGluIHZtbGludXggYXMgYSB3b3JrIGl0ZW0gY2FsbGJhY2suIGByZWdfY2hlY2tfY2hhbm5lbHNgIGlzIG5vbi1zdGF0aWMuXG5cbkdpdmVuIGFsbCB0aGlzLCBJJ20gcHJldHR5IGNvbmZpZGVudCB0aGF0IGZ1enppbmcgdGhpcyBpcyB0aGUgcmlnaHQgYXBwcm9hY2guIFRoZSBwYXRjaCBtb2RpZmllcyBgcmVnX2NoZWNrX2NoYW5zX3dvcmtgIHdpdGhpbiBgY2ZnODAyMTFgLCBhbmQgc3BlY2lmaWNhbGx5IG1vZGlmaWVzIGxvY2tpbmcgYW5kIFJDVSBpdGVyYXRpb25zIG92ZXIgYGNmZzgwMjExX3JkZXZfbGlzdGAgYnkgZHJvcHBpbmcgYW5kIHJlYWNxdWlyaW5nIGxvY2tzIGluc2lkZSB0aGUgbG9vcC4gVGhpcyBjb2RlIGlzIHRyaWdnZXJlZCBmcm9tIHVzZXJzcGFjZSwgc28gY29uY3VycmVuY3kgcHJvYmxlbXMgYXJlIGEgcmVhbCByaXNrLiBUaGUga2V5IGlzIHRvIHRlc3QgdGhlIFJDVSBsaXN0IHRyYXZlcnNhbCBhbmQgdGhlIHNhZmV0eSBvZiBjb25jdXJyZW50IHJlZ3VsYXRvcnkgZG9tYWluIG9wZXJhdGlvbnMuXG5cblNvLCB0aGUgY3JpdGVyaWEgYXJlIGNsZWFyOiBgV29ydGhGdXp6aW5nOiB0cnVlYCwgdGhlIG5lY2Vzc2FyeSBjb25maWcgaXMgYENGRzgwMjExYCwgYW5kIHRoZSBgRm9jdXNTeW1ib2xzYCBhcmUgYHJlZ19jaGVja19jaGFuc193b3JrYCwgYHJlZ19jaGVja19jaGFubmVsc2AsIGFuZCBgcmVnX2xlYXZlX2ludmFsaWRfY2hhbnNgLiBUaW1lIHRvIGNhbGwgYHNldC1yZXN1bHRzYC5cblxuXG4iLCJJbnB1dFRva2VucyI6MjIxODQsIk91dHB1dFRva2VucyI6MTgyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NjI5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA1VDAxOjA0OjE5LjgzMDIwMzc1MloiLCJTZXEiOjE4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE1MDg4OTU3OCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiQ0ZHODAyMTFcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJyZWdfY2hlY2tfY2hhbnNfd29ya1wiLFxuICAgIFwicmVnX2NoZWNrX2NoYW5uZWxzXCIsXG4gICAgXCJyZWdfbGVhdmVfaW52YWxpZF9jaGFuc1wiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGNoYW5nZXMgbG9ja2luZyBhbmQgUkNVIGl0ZXJhdGlvbiBpbiByZWdfY2hlY2tfY2hhbnNfd29yaygpIHdpdGhpbiBjZmc4MDIxMSAobmV0L3dpcmVsZXNzL3JlZy5jKSwgcmVsZWFzaW5nIGFuZCByZS1hY3F1aXJpbmcgcmN1X3JlYWRfbG9jayBhbmQgcnRubF9sb2NrIGluc2lkZSBsaXN0X2Zvcl9lYWNoX2VudHJ5X3JjdS4gVGhpcyByZWFjaGFibGUgY29kZSBwYXRoIGhhbmRsZXMgcmVndWxhdG9yeSBkb21haW4gY2hhbm5lbCB2YWxpZGF0aW9uIGFuZCBpbnRlcmZhY2UgZGlzY29ubmVjdGlvbiwgd2hpY2ggY2FuIGJlIHRyaWdnZXJlZCB2aWEgbmw4MDIxMSByZWd1bGF0b3J5IGNvbW1hbmRzLiBGdXp6aW5nIGlzIHdhcnJhbnRlZCB0byB0ZXN0IGZvciBjb25jdXJyZW5jeSBidWdzLCBsaXN0IHRyYXZlcnNhbCBpc3N1ZXMsIGFuZCBSQ1UvbG9ja2RlcCB3YXJuaW5ncy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJDRkc4MDIxMVwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInJlZ19jaGVja19jaGFuc193b3JrXCIsXG4gICAgXCJyZWdfY2hlY2tfY2hhbm5lbHNcIixcbiAgICBcInJlZ19sZWF2ZV9pbnZhbGlkX2NoYW5zXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggY2hhbmdlcyBsb2NraW5nIGFuZCBSQ1UgaXRlcmF0aW9uIGluIHJlZ19jaGVja19jaGFuc193b3JrKCkgd2l0aGluIGNmZzgwMjExIChuZXQvd2lyZWxlc3MvcmVnLmMpLCByZWxlYXNpbmcgYW5kIHJlLWFjcXVpcmluZyByY3VfcmVhZF9sb2NrIGFuZCBydG5sX2xvY2sgaW5zaWRlIGxpc3RfZm9yX2VhY2hfZW50cnlfcmN1LiBUaGlzIHJlYWNoYWJsZSBjb2RlIHBhdGggaGFuZGxlcyByZWd1bGF0b3J5IGRvbWFpbiBjaGFubmVsIHZhbGlkYXRpb24gYW5kIGludGVyZmFjZSBkaXNjb25uZWN0aW9uLCB3aGljaCBjYW4gYmUgdHJpZ2dlcmVkIHZpYSBubDgwMjExIHJlZ3VsYXRvcnkgY29tbWFuZHMuIEZ1enppbmcgaXMgd2FycmFudGVkIHRvIHRlc3QgZm9yIGNvbmN1cnJlbmN5IGJ1Z3MsIGxpc3QgdHJhdmVyc2FsIGlzc3VlcywgYW5kIFJDVS9sb2NrZGVwIHdhcm5pbmdzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNVQwMTowNDoxOS45ODExMDEwNloiLCJTZXEiOjE5LCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6IklmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjQzMTA3NDE5MzQsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNVQwMTowNDoxOS45ODE1NzkzMVoiLCJTZXEiOjIwLCJOZXN0aW5nIjoyLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJjb3JlIiwiRHVyYXRpb24iOjI0MzEwMjU5ODY0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgbG9ja2luZyBhbmQgUkNVIGxpc3QgdHJhdmVyc2FsIHN0cmF0ZWd5IGluIHJlZ19jaGVja19jaGFuc193b3JrKCkgKG5ldC93aXJlbGVzcy9yZWcuYykgYnkgZHJvcHBpbmcgYW5kIHJlLWFjcXVpcmluZyByY3VfcmVhZF9sb2NrKCkgYW5kIHJ0bmxfbG9jaygpIGFyb3VuZCBlYWNoIGl0ZXJhdGlvbiBvZiBjZmc4MDIxMV9yZGV2X2xpc3QuXFxuXFxuVGhpcyBjaGFuZ2UgZG9lcyBub3QgaW50cm9kdWNlIGFueSBtZW1vcnkgYWxsb2NhdGlvbnMsIGRvZXMgbm90IHJlYWQgb3Igd3JpdGUgdW5pbml0aWFsaXplZCBzdGFjay9oZWFwIGZpZWxkcywgZG9lcyBub3QgYWx0ZXIgYnVmZmVyIGxlbmd0aC9ib3VuZHMgY2FsY3VsYXRpb25zLCBhbmQgZG9lcyBub3QgcGFzcyBrZXJuZWwgZGF0YSB0byB1c2Vyc3BhY2UuIEFueSBjb25jdXJyZW5jeSwgdXNlLWFmdGVyLWZyZWUsIG9yIGxpc3QgY29ycnVwdGlvbiBpc3N1ZXMgc3RlbW1pbmcgZnJvbSBkcm9wcGluZyBSQ1UgZHVyaW5nIGxpc3QgdHJhdmVyc2FsIGFyZSBkZXRlY3RhYmxlIGJ5IHN0YW5kYXJkIGRlYnVnZ2luZyB0b29scyAoS0FTQU4sIExPQ0tERVAsIGFuZCBDT05GSUdfUFJPVkVfUkNVKS4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnlcbmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kXG5kZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpXG5mdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy5cblxuQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46XG4tIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGVcbiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOXG4gIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVBcbiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy5cbi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsXG4gIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy5cblxuUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTixcbkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuXG5BIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZXG5zZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrc1xudGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi5cblxuTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3RcbnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLFxuYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzXG50aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZ1xudW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sXG5mbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsXG5jYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy5cblxuU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOlxuMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2JcbiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzXG4gICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLlxuMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlc1xuICAgb3Igc3RydWN0IGZpZWxkcy5cbjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHNcbiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuXG40LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2Vzc1xuICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjpcbi0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXJcbiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0XG4gIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS5cbi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWRcbiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLlxuLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuXG5cblVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGVcbmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJUYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NFxuXG5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCA5MDliYWU2M2U0Y2I4ZGJiOGMyYWVhMTAzZWRkZDBjYWJhOWFkYzc1XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFNhdCBTZXAgNSAwMTowMzo0NyAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL25ldC93aXJlbGVzcy9yZWcuYyBiL25ldC93aXJlbGVzcy9yZWcuY1xuaW5kZXggYTgzMzZiYWY4NWRjNi4uYTJlMGQxY2Y4MzE3YyAxMDA2NDRcbi0tLSBhL25ldC93aXJlbGVzcy9yZWcuY1xuKysrIGIvbmV0L3dpcmVsZXNzL3JlZy5jXG5AQCAtMjQ2NiwxMiArMjQ2NiwyMSBAQCBzdGF0aWMgdm9pZCByZWdfY2hlY2tfY2hhbnNfd29yayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXG4gXHRzdHJ1Y3QgY2ZnODAyMTFfcmVnaXN0ZXJlZF9kZXZpY2UgKnJkZXY7XG4gXG4gXHRwcl9kZWJ1ZyhcIlZlcmlmeWluZyBhY3RpdmUgaW50ZXJmYWNlcyBhZnRlciByZWcgY2hhbmdlXFxuXCIpO1xuLVx0cnRubF9sb2NrKCk7XG4tXG4tXHRmb3JfZWFjaF9yZGV2KHJkZXYpXG4rXHQvKlxuK1x0ICogQWNxdWlyZSBydG5sIHBlci1kZXZpY2UgaW5zdGVhZCBvZiBob2xkaW5nIGl0IGZvciB0aGUgZW50aXJlIGxvb3A7XG4rXHQgKiBjZmc4MDIxMV9sZWF2ZSgpIGNhbiBiZSBzbG93IGFuZCBzdGFydmUgb3RoZXIgcnRubCB3YWl0ZXJzIG90aGVyd2lzZS5cbitcdCAqIHdpcGh5X3VucmVnaXN0ZXIoKSBob2xkcyBydG5sIGFjcm9zcyBsaXN0X2RlbF9yY3UoKSArIHN5bmNocm9uaXplX3JjdSgpLFxuK1x0ICogc28gcmRldiBjYW5ub3QgYmUgZnJlZWQgd2hpbGUgd2UgaG9sZCBydG5sX2xvY2soKSBiZWxvdy5cbitcdCAqL1xuK1x0cmN1X3JlYWRfbG9jaygpO1xuK1x0bGlzdF9mb3JfZWFjaF9lbnRyeV9yY3UocmRldiwgXHUwMDI2Y2ZnODAyMTFfcmRldl9saXN0LCBsaXN0KSB7XG4rXHRcdHJjdV9yZWFkX3VubG9jaygpO1xuK1x0XHRydG5sX2xvY2soKTtcbiBcdFx0cmVnX2xlYXZlX2ludmFsaWRfY2hhbnMoXHUwMDI2cmRldi1cdTAwM2V3aXBoeSk7XG4tXG4tXHRydG5sX3VubG9jaygpO1xuK1x0XHRydG5sX3VubG9jaygpO1xuK1x0XHRyY3VfcmVhZF9sb2NrKCk7XG4rXHR9XG4rXHRyY3VfcmVhZF91bmxvY2soKTtcbiB9XG4gXG4gdm9pZCByZWdfY2hlY2tfY2hhbm5lbHModm9pZClcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA1VDAxOjA0OjE5Ljk4MTU4MDIxWiIsIlNlcSI6MjEsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjE0MDY1Mjg4MjcxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKktNU0FOIEV2YWx1YXRpb246IFBhdGNoIFJldmlldyoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gTXkgdGFzayBpcyB0byBkZXRlcm1pbmUgaWYgdGhpcyBwYXRjaCBuZWNlc3NpdGF0ZXMgYSBLTVNBTiBmdXp6aW5nIHNlc3Npb24sIG9yIGlmIHN0YW5kYXJkIGNoZWNrcyBsaWtlIEtBU0FOIGFuZCBMT0NLREVQIGFyZSBzdWZmaWNpZW50LiBJdCdzIGEgc3RhbmRhcmQga2VybmVsIFFBIGRlY2lzaW9uLCBub3RoaW5nIHRvbyBvdXQgb2YgdGhlIG9yZGluYXJ5LlxuXG5GaXJzdCwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCB0aGlzIHBhdGNoIGFjdHVhbGx5ICpkb2VzKi4gSXQgbG9va3MgbGlrZSBpdCdzIGEgY2hhbmdlIHdpdGhpbiBgbmV0L3dpcmVsZXNzL3JlZy5jYCwgc3BlY2lmaWNhbGx5IGluIGByZWdfY2hlY2tfY2hhbnNfd29ya2AuIFRoZXkncmUgbW9kaWZ5aW5nIGhvdyB0aGUgY29kZSBpdGVyYXRlcyB0aHJvdWdoIGEgbGlzdCBvZiByZWdpc3RlcmVkIGRldmljZXMgKGBjZmc4MDIxMV9yZGV2X2xpc3RgKSBhbmQgY2FsbHMgYHJlZ19sZWF2ZV9pbnZhbGlkX2NoYW5zYC4gVGhlIG9yaWdpbmFsIGNvZGUgaGVsZCBgcnRubF9sb2NrKClgIGZvciB0aGUgZW50aXJlIGxvb3AsIGJ1dCB0aGlzIHBhdGNoIGludHJvZHVjZXMgUkNVIGxvY2tpbmcgYXJvdW5kIHRoZSBsaXN0IGl0ZXJhdGlvbiwgZHJvcHBpbmcgYW5kIHJlYWNxdWlyaW5nIHRoZSBsb2NrIGluIGVhY2ggbG9vcCBpdGVyYXRpb24sIGFuZCBkcm9wcGluZyBSVE5MIGFzIHdlbGwuXG5cbk5vdywgdGhlIHJlZCBmbGFnLiBUaGlzIFJDVSBsaXN0IHRyYXZlcnNhbCB3aXRoIGxvY2tpbmcgbWFuaXB1bGF0aW9uIHBhdHRlcm4uLi4gdGhhdCB3YXJyYW50cyBjbG9zZSBzY3J1dGlueS4gVGhlIHVzZSBvZiBgbGlzdF9mb3JfZWFjaF9lbnRyeV9yY3VgIGluc2lkZSB0aGUgUkNVIHJlYWQgbG9jayB3aXRoIGRyb3BwaW5nIGFuZCByZS1hY3F1aXJpbmcgdGhlIGxvY2sgd2l0aGluIHRoZSBsb29wIGlzIGEgY2xhc3NpYyBzZXR1cCBmb3IgcG90ZW50aWFsIGNvbmN1cnJlbmN5IGlzc3Vlcy4gV2l0aCB0aGUgcmUtZW50cmFudCBsb2NraW5nLCBhbmQgdW5sb2NrZWQgd2luZG93IGZvciBvdGhlciBvcGVyYXRpb25zLCBhIHVzZS1hZnRlci1mcmVlIHNjZW5hcmlvIG9yIGxpc3QgY29ycnVwdGlvbiBpcyAqaGlnaGx5KiBwbGF1c2libGUuIFRoZSBjb21tZW50IGNsYWltcyBgd2lwaHlfdW5yZWdpc3RlcigpYCBob2xkcyBydG5sIGFjcm9zcyBgbGlzdF9kZWxfcmN1KClgIGFuZCBgc3luY2hyb25pemVfcmN1KClgLCBidXQgZXZlbiB3aXRoIHRoYXQgY2xhaW0sIHRoZSBwb3RlbnRpYWwgZm9yIGEgcmFjZSB3aXRoIHRoZSBzeW5jaHJvbml6ZV9yY3UvdW5yZWdpc3RlciBhbmQgdGhlIHVuLWxvY2tlZCBzZWN0aW9uIG9mIHRoZSBsb29wIHN0aWxsIGV4aXN0cy4gV2UgY291bGQgYmUgZGVhbGluZyB3aXRoIGEgYHJkZXZgIHRoYXQncyBiZWVuIGZyZWVkIG9yIGhhZCBpdHMgbGlzdCBlbnRyaWVzIGNvcnJ1cHRlZCBiZXR3ZWVuIHRoZSBjYWxscy5cblxuSG93ZXZlciwgSSBuZWVkIHRvIGNvbnNpZGVyIHdoZXRoZXIgaXQgKmludHJvZHVjZXMqIG5ldyBpc3N1ZXMuIERvZXMgdGhpcyBwYXRjaCBjaGFuZ2UgYW55dGhpbmcgdGhhdCBkaXJlY3RseSBpbnRlcmFjdHMgd2l0aCB1bmluaXRpYWxpemVkIG1lbW9yeT8gTm8uIFRoZSBjb2RlIG1vZGlmaWVzIGxvY2tpbmcgYW5kIGxpc3QgdHJhdmVyc2FsLCBidXQgZG9lc24ndCBpbnRyb2R1Y2UgYWxsb2NhdGlvbnMsIGNvcGllcyBvZiB1bmluaXRpYWxpemVkIGRhdGEgdG8gdXNlcnNwYWNlLCBhY2Nlc3MgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMsIG9yIHN0cnVjdCBwYWRkaW5nIGlzc3Vlcy4gSXQgaXMgcG9zc2libGUsIGJ1dCBzZWVtcyB1bmxpa2VseSBpbiB0aGlzIGNhc2UsIHRoYXQgYW4gZW50aXJlbHkgbmV3IGNvZGUtcGF0aCBjb3VsZCBpbnRyb2R1Y2Ugc3VjaC4gSSB3aWxsIGNoZWNrLlxuXG5UaGVyZWZvcmUsIHNpbmNlIHRoZSBwb3RlbnRpYWwgdnVsbmVyYWJpbGl0aWVzIGxpZSB3aXRoaW4gY29uY3VycmVuY3kgaXNzdWVzLCBLQVNBTiBhbmQgTE9DS0RFUCB3b3VsZCBjYXRjaCB1c2UtYWZ0ZXItZnJlZSBhbmQgbG9ja2luZyAvIGNvbmN1cnJlbmN5IGlzc3VlcywgYXMgd2VsbCBhcyBLQ1NBTi4gS01TQU4gaXMgdW5uZWNlc3NhcnkgZm9yIHRoaXMgcGF0Y2guIEknbGwgZG91YmxlLWNoZWNrIHdpdGggYSBncmVwIG9yIGNvZGUgc2NhbiBqdXN0IHRvIGJlIGFic29sdXRlbHkgY2VydGFpbiBJJ20gbm90IG1pc3NpbmcgYW55dGhpbmcgdGhhdCB3b3VsZCBpbnZvbHZlIHJlYWRpbmcgZnJvbSB1bmluaXRpYWxpemVkIG1lbW9yeS5cblxuXG4iLCJJbnB1dFRva2VucyI6MjI3MSwiT3V0cHV0VG9rZW5zIjozMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjk5NSwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA1VDAxOjA0OjM0LjA0Njg3Mjg4MVoiLCJTZXEiOjIyLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjMzMDkxMzksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwicmVnX2NoZWNrX2NoYW5zX3dvcmtcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L3dpcmVsZXNzXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC93aXJlbGVzcy9yZWcuYz0yMjE9c3RydWN0IHJlZ19iZWFjb24ge1xcbi0tXFxubmV0L3dpcmVsZXNzL3JlZy5jLTIyNS1cXG5uZXQvd2lyZWxlc3MvcmVnLmM6MjI2OnN0YXRpYyB2b2lkIHJlZ19jaGVja19jaGFuc193b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yayk7XFxubmV0L3dpcmVsZXNzL3JlZy5jOjIyNzpzdGF0aWMgREVDTEFSRV9ERUxBWUVEX1dPUksocmVnX2NoZWNrX2NoYW5zLCByZWdfY2hlY2tfY2hhbnNfd29yayk7XFxubmV0L3dpcmVsZXNzL3JlZy5jLTIyOC1cXG4tLVxcbm5ldC93aXJlbGVzcy9yZWcuYz0yNDQ5PXN0YXRpYyB2b2lkIHJlZ19sZWF2ZV9pbnZhbGlkX2NoYW5zKHN0cnVjdCB3aXBoeSAqd2lwaHkpXFxuLS1cXG5uZXQvd2lyZWxlc3MvcmVnLmMtMjQ2My1cXG5uZXQvd2lyZWxlc3MvcmVnLmM6MjQ2NDpzdGF0aWMgdm9pZCByZWdfY2hlY2tfY2hhbnNfd29yayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXFxubmV0L3dpcmVsZXNzL3JlZy5jLTI0NjUte1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNVQwMTowNDozNC4xMTAxOTE0MVoiLCJTZXEiOjIzLCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo1NzMxMzMxNTM2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aGUgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBpdCB3ZXJlIG15IG93bjpcblxuKipEaXZpbmcgaW50byB0aGUgQ2hhbm5lbCBSZWd1bGF0aW9uIENvZGUqKlxuXG5Pa2F5LCB0aW1lIHRvIGdldCBteSBoYW5kcyBkaXJ0eS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZSBzeXN0ZW0gaGFuZGxlcyBpbnZhbGlkIGNoYW5uZWxzIGR1cmluZyByZWd1bGF0b3J5IGRvbWFpbiBjaGFuZ2VzLiBMZXQncyBzdGFydCBieSB6ZXJvaW5nIGluIG9uIGByZWdfbGVhdmVfaW52YWxpZF9jaGFuc2Agd2l0aGluIGBuZXQvd2lyZWxlc3MvcmVnLmNgLiBUaGlzIGZ1bmN0aW9uIG5hbWUgc2VlbXMgbGlrZSBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQuIEl0J3MgdGhlIGxvZ2ljYWwgcGxhY2UgdG8gc2VlIGhvdyB0aGUga2VybmVsIGRlYWxzIHdpdGggY2hhbm5lbHMgdGhhdCBhcmUgbm8gbG9uZ2VyIGFsbG93ZWQgYWZ0ZXIgYSByZWd1bGF0b3J5IGRvbWFpbiB1cGRhdGUuIEkgZXhwZWN0IGl0J2xsIGdpdmUgbWUgY2x1ZXMgYWJvdXQgaG93IHRoZSBkcml2ZXIgaXMgbm90aWZpZWQgYW5kIGhvdyB0aGUgc3lzdGVtIG1pZ2h0IGhhbmRsZSBvbmdvaW5nIHRyYW5zbWlzc2lvbnMgb24gdGhlc2UgY2hhbm5lbHMuIEhvcGVmdWxseSwgdGhpcyBmdW5jdGlvbiBwcm92aWRlcyB0aGUga2V5IHRvIHVuZGVyc3RhbmRpbmcgdGhlIHNwZWNpZmljIGxvZ2ljIG9mIGNoYW5uZWwgaW52YWxpZGF0aW9uLiBJJ20ga2VlbiB0byBkaXNzZWN0IHRoZSBjb2RlIGFuZCBzZWUgaG93IHJvYnVzdCB0aGUgaW1wbGVtZW50YXRpb24gaXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQwNjQsIk91dHB1dFRva2VucyI6MzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wNVQwMTowNDozOS44NDE1MjY3MzZaIiwiU2VxIjoyNCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjE1NTAwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC93aXJlbGVzcy9yZWcuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAyNDQ1LFxuICBcIkxpbmVDb3VudFwiOiA0NVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIyNDQ1OlxcdFxcbjI0NDY6XFx0XFx0cmV0dXJuIHRydWU7XFxuMjQ0NzpcXHR9XFxuMjQ0ODpcXHRcXG4yNDQ5OlxcdHN0YXRpYyB2b2lkIHJlZ19sZWF2ZV9pbnZhbGlkX2NoYW5zKHN0cnVjdCB3aXBoeSAqd2lwaHkpXFxuMjQ1MDpcXHR7XFxuMjQ1MTpcXHRcXHRzdHJ1Y3Qgd2lyZWxlc3NfZGV2ICp3ZGV2O1xcbjI0NTI6XFx0XFx0c3RydWN0IGNmZzgwMjExX3JlZ2lzdGVyZWRfZGV2aWNlICpyZGV2ID0gd2lwaHlfdG9fcmRldih3aXBoeSk7XFxuMjQ1MzpcXHRcXG4yNDU0OlxcdFxcdGxpc3RfZm9yX2VhY2hfZW50cnkod2RldiwgXFx1MDAyNnJkZXYtXFx1MDAzZXdpcGh5LndkZXZfbGlzdCwgbGlzdCkge1xcbjI0NTU6XFx0XFx0XFx0Ym9vbCB2YWxpZDtcXG4yNDU2OlxcdFxcbjI0NTc6XFx0XFx0XFx0c2NvcGVkX2d1YXJkKHdpcGh5LCB3aXBoeSlcXG4yNDU4OlxcdFxcdFxcdFxcdHZhbGlkID0gcmVnX3dkZXZfY2hhbl92YWxpZCh3aXBoeSwgd2Rldik7XFxuMjQ1OTpcXHRcXHRcXHRpZiAoIXZhbGlkKVxcbjI0NjA6XFx0XFx0XFx0XFx0Y2ZnODAyMTFfbGVhdmUocmRldiwgd2RldiwgLTEpO1xcbjI0NjE6XFx0XFx0fVxcbjI0NjI6XFx0fVxcbjI0NjM6XFx0XFxuMjQ2NDpcXHRzdGF0aWMgdm9pZCByZWdfY2hlY2tfY2hhbnNfd29yayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXFxuMjQ2NTpcXHR7XFxuMjQ2NjpcXHRcXHRzdHJ1Y3QgY2ZnODAyMTFfcmVnaXN0ZXJlZF9kZXZpY2UgKnJkZXY7XFxuMjQ2NzpcXHRcXG4yNDY4OlxcdFxcdHByX2RlYnVnKFxcXCJWZXJpZnlpbmcgYWN0aXZlIGludGVyZmFjZXMgYWZ0ZXIgcmVnIGNoYW5nZVxcXFxuXFxcIik7XFxuMjQ2OTpcXHRcXHQvKlxcbjI0NzA6XFx0XFx0ICogQWNxdWlyZSBydG5sIHBlci1kZXZpY2UgaW5zdGVhZCBvZiBob2xkaW5nIGl0IGZvciB0aGUgZW50aXJlIGxvb3A7XFxuMjQ3MTpcXHRcXHQgKiBjZmc4MDIxMV9sZWF2ZSgpIGNhbiBiZSBzbG93IGFuZCBzdGFydmUgb3RoZXIgcnRubCB3YWl0ZXJzIG90aGVyd2lzZS5cXG4yNDcyOlxcdFxcdCAqIHdpcGh5X3VucmVnaXN0ZXIoKSBob2xkcyBydG5sIGFjcm9zcyBsaXN0X2RlbF9yY3UoKSArIHN5bmNocm9uaXplX3JjdSgpLFxcbjI0NzM6XFx0XFx0ICogc28gcmRldiBjYW5ub3QgYmUgZnJlZWQgd2hpbGUgd2UgaG9sZCBydG5sX2xvY2soKSBiZWxvdy5cXG4yNDc0OlxcdFxcdCAqL1xcbjI0NzU6XFx0XFx0cmN1X3JlYWRfbG9jaygpO1xcbjI0NzY6XFx0XFx0bGlzdF9mb3JfZWFjaF9lbnRyeV9yY3UocmRldiwgXFx1MDAyNmNmZzgwMjExX3JkZXZfbGlzdCwgbGlzdCkge1xcbjI0Nzc6XFx0XFx0XFx0cmN1X3JlYWRfdW5sb2NrKCk7XFxuMjQ3ODpcXHRcXHRcXHRydG5sX2xvY2soKTtcXG4yNDc5OlxcdFxcdFxcdHJlZ19sZWF2ZV9pbnZhbGlkX2NoYW5zKFxcdTAwMjZyZGV2LVxcdTAwM2V3aXBoeSk7XFxuMjQ4MDpcXHRcXHRcXHRydG5sX3VubG9jaygpO1xcbjI0ODE6XFx0XFx0XFx0cmN1X3JlYWRfbG9jaygpO1xcbjI0ODI6XFx0XFx0fVxcbjI0ODM6XFx0XFx0cmN1X3JlYWRfdW5sb2NrKCk7XFxuMjQ4NDpcXHR9XFxuMjQ4NTpcXHRcXG4yNDg2OlxcdHZvaWQgcmVnX2NoZWNrX2NoYW5uZWxzKHZvaWQpXFxuMjQ4NzpcXHR7XFxuMjQ4ODpcXHRcXHQvKlxcbjI0ODk6XFx0XFx0ICogR2l2ZSB1c2VybW9kZSBhIGNoYW5jZSB0byBkbyBzb21ldGhpbmcgbmljZXIgKG1vdmUgdG8gYW5vdGhlclxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNVQwMTowNDozOS44NDE3NTM1NzZaIiwiU2VxIjoyNSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NDQ1MDA2MzgxOCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipLTVNBTiBBc3Nlc3NtZW50IG9mIHRoaXMgUGF0Y2gqKlxuXG5BbHJpZ2h0LCBsZXQncyBicmVhayB0aGlzIGRvd24uIE15IGluaXRpYWwgYXNzZXNzbWVudCBpcyB0aGF0IEtNU0FOIGlzbid0IG5lZWRlZCBoZXJlLiBJJ3ZlIHdhbGtlZCB0aHJvdWdoIHRoZSBzdGFuZGFyZCBLTVNBTiBjaGVja3MsIGFuZCBub3RoaW5nIHNjcmVhbXMgXCJwb3RlbnRpYWwgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZFwiIGF0IG1lLlxuXG5TcGVjaWZpY2FsbHksIEkgbG9va2VkIGZvcjpcbjEuICBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2Ugd2hlcmUgaW5pdGlhbGl6YXRpb24gbWlnaHQgYmUgc2xvcHB5LiBOb3BlLlxuMi4gIENvbmRpdGlvbmFsIGxvZ2ljIGJhc2VkIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgZGF0YS4gTm90IHNlZWluZyBpdC5cbjMuICBDb21wbGV4IGRhdGEgc3RydWN0dXJlIGluaXRpYWxpemF0aW9uIHRoYXQgY291bGQgbGVhZCB0byB1bmluaXRpYWxpemVkIHJlYWRzIGxhdGVyLiBOZWdhdGl2ZS5cbjQuICBCb3VuZHMgY2hlY2sgaXNzdWVzIHRoYXQgY291bGQgZXhwb3NlIHVuaW5pdGlhbGl6ZWQgYnVmZmVyIGJ5dGVzLiBOYWRhLlxuXG5UaGUgcG90ZW50aWFsIGlzc3VlcyBJICpkbyogc2VlIGFyZSBhcm91bmQgY29uY3VycmVuY3ksIFJDVSBsaXN0IGl0ZXJhdGlvbiwgYW5kIGxvY2tpbmc6IHNwZWNpZmljYWxseSwgdGhpbmdzIGxpa2UgbGlzdCBpdGVyYXRpb24gdmFsaWRpdHkgYWNyb3NzIFJDVSB1bmxvY2svbG9jayBib3VuZGFyaWVzLCBzbGVlcGFibGUgbG9ja3MgaW5zaWRlIFJDVSAodGhvdWdoIGl0IHVubG9ja3MgUkNVIGJlZm9yZSBsb2NraW5nIFJUTkwpLCBhbmQgdXNlLWFmdGVyLWZyZWUgb3IgbGlzdCBjb3JydXB0aW9uIGlmIGVsZW1lbnRzIGFyZSByZW1vdmVkIGR1cmluZyB0aGUgaXRlcmF0aW9uLiBIb3dldmVyLCB0aG9zZSBhcmUgKmV4YWN0bHkqIHRoZSBraW5kcyBvZiBpc3N1ZXMgS0FTQU4sIExPQ0tERVAsIGFuZCB0aGUgc3RhbmRhcmQga2VybmVsIGRlYnVnZ2luZyB0b29scyAobGlrZSBDT05GSUdfUFJPVkVfUkNVIGFuZCBDT05GSUdfREVCVUdfTElTVCkgYXJlIGRlc2lnbmVkIHRvIGNhdGNoLiBUaGF0J3MgcmVhc3N1cmluZy5cblxuU28sIHRoZSBwYXRjaCBpcyBjaGFuZ2luZyBgcmVnX2NoZWNrX2NoYW5zX3dvcmsoKWAgaW4gYG5ldC93aXJlbGVzcy9yZWcuY2AuIEl0J3Mgc3dpdGNoaW5nIGZyb20gaG9sZGluZyBgcnRubF9sb2NrKClgIGZvciB0aGUgZW50aXJlIGBjZmc4MDIxMV9yZGV2X2xpc3RgIHRyYXZlcnNhbCB0byBhY3F1aXJpbmcgaXQgcGVyIGRldmljZSwgdG9nZ2xpbmcgYHJjdV9yZWFkX2xvY2soKWAgLyBgcnRubF9sb2NrKClgIHdpdGhpbiB0aGUgbG9vcC4gVGhlIHBvdGVudGlhbCBidWdzIGludHJvZHVjZWQgaGVyZSBhcmUgcmVsYXRlZCB0byBSQ1UgbGlzdCB0cmF2ZXJzYWwgc2FmZXR5LCB1c2UtYWZ0ZXItZnJlZSwgb3IgY29uY3VycmVuY3kvbG9ja2luZyAtIHdoaWNoIGFyZSB3ZWxsLWNvdmVyZWQgYnkgdGhlIGV4aXN0aW5nIHRvb2xjaGFpbi4gTm8gbmV3IGFsbG9jYXRpb25zLCBzdGFjay9oZWFwIHZhcmlhYmxlcywgb3IgaW5mby1sZWFrcyB0byB1c2VyIHNwYWNlLiBObyBLTVNBTiByZXF1aXJlZC5cblxuSSdtIGNvbmZpZGVudCBpbiBjYWxsaW5nIHRoaXMuIExldCdzIHNldCB0aGUgcmVzdWx0cyBhbmQgbW92ZSBvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6NTAwMywiT3V0cHV0VG9rZW5zIjoxOTAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0NzMsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wNVQwMTowNDo0NC4yOTE4MjA1NzRaIiwiU2VxIjoyNiwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNzA1MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBsb2NraW5nIGFuZCBSQ1UgbGlzdCB0cmF2ZXJzYWwgc3RyYXRlZ3kgaW4gcmVnX2NoZWNrX2NoYW5zX3dvcmsoKSAobmV0L3dpcmVsZXNzL3JlZy5jKSBieSBkcm9wcGluZyBhbmQgcmUtYWNxdWlyaW5nIHJjdV9yZWFkX2xvY2soKSBhbmQgcnRubF9sb2NrKCkgYXJvdW5kIGVhY2ggaXRlcmF0aW9uIG9mIGNmZzgwMjExX3JkZXZfbGlzdC5cXG5cXG5UaGlzIGNoYW5nZSBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IG1lbW9yeSBhbGxvY2F0aW9ucywgZG9lcyBub3QgcmVhZCBvciB3cml0ZSB1bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgZmllbGRzLCBkb2VzIG5vdCBhbHRlciBidWZmZXIgbGVuZ3RoL2JvdW5kcyBjYWxjdWxhdGlvbnMsIGFuZCBkb2VzIG5vdCBwYXNzIGtlcm5lbCBkYXRhIHRvIHVzZXJzcGFjZS4gQW55IGNvbmN1cnJlbmN5LCB1c2UtYWZ0ZXItZnJlZSwgb3IgbGlzdCBjb3JydXB0aW9uIGlzc3VlcyBzdGVtbWluZyBmcm9tIGRyb3BwaW5nIFJDVSBkdXJpbmcgbGlzdCB0cmF2ZXJzYWwgYXJlIGRldGVjdGFibGUgYnkgc3RhbmRhcmQgZGVidWdnaW5nIHRvb2xzIChLQVNBTiwgTE9DS0RFUCwgYW5kIENPTkZJR19QUk9WRV9SQ1UpLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3Qgd2FycmFudGVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBsb2NraW5nIGFuZCBSQ1UgbGlzdCB0cmF2ZXJzYWwgc3RyYXRlZ3kgaW4gcmVnX2NoZWNrX2NoYW5zX3dvcmsoKSAobmV0L3dpcmVsZXNzL3JlZy5jKSBieSBkcm9wcGluZyBhbmQgcmUtYWNxdWlyaW5nIHJjdV9yZWFkX2xvY2soKSBhbmQgcnRubF9sb2NrKCkgYXJvdW5kIGVhY2ggaXRlcmF0aW9uIG9mIGNmZzgwMjExX3JkZXZfbGlzdC5cXG5cXG5UaGlzIGNoYW5nZSBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IG1lbW9yeSBhbGxvY2F0aW9ucywgZG9lcyBub3QgcmVhZCBvciB3cml0ZSB1bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgZmllbGRzLCBkb2VzIG5vdCBhbHRlciBidWZmZXIgbGVuZ3RoL2JvdW5kcyBjYWxjdWxhdGlvbnMsIGFuZCBkb2VzIG5vdCBwYXNzIGtlcm5lbCBkYXRhIHRvIHVzZXJzcGFjZS4gQW55IGNvbmN1cnJlbmN5LCB1c2UtYWZ0ZXItZnJlZSwgb3IgbGlzdCBjb3JydXB0aW9uIGlzc3VlcyBzdGVtbWluZyBmcm9tIGRyb3BwaW5nIFJDVSBkdXJpbmcgbGlzdCB0cmF2ZXJzYWwgYXJlIGRldGVjdGFibGUgYnkgc3RhbmRhcmQgZGVidWdnaW5nIHRvb2xzIChLQVNBTiwgTE9DS0RFUCwgYW5kIENPTkZJR19QUk9WRV9SQ1UpLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3Qgd2FycmFudGVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/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-workflowhtgb8[1] Phase: Succeeded StartedAt: 2026-09-05 01:04:56 +0000 UTC FinishedAt: 2026-09-05 01:04:57 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhtgb8[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-09-05 01:04:57 +0000 UTC FinishedAt: 2026-09-05 01:04:57 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhtgb8[2] Phase: Succeeded StartedAt: 2026-09-05 01:04:57 +0000 UTC FinishedAt: 2026-09-05 04:58:23 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhtgb8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"761ae184f850f33d1bbf6c4530c7f237be780d21","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFG80211"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["reg_check_chans_work","reg_check_channels","reg_leave_invalid_chans"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"761ae184f850f33d1bbf6c4530c7f237be780d21","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFG80211"],"series_id":"a6415cc5-2d2a-4e6e-8f3c-f90a5a6fc0ca","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-09-05 01:04:58 +0000 UTC FinishedAt: 2026-09-05 04:58:23 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"761ae184f850f33d1bbf6c4530c7f237be780d21","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFG80211"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["reg_check_chans_work","reg_check_channels","reg_leave_invalid_chans"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"761ae184f850f33d1bbf6c4530c7f237be780d21","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFG80211"],"series_id":"a6415cc5-2d2a-4e6e-8f3c-f90a5a6fc0ca","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflowhtgb8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"761ae184f850f33d1bbf6c4530c7f237be780d21","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFG80211"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["reg_check_chans_work","reg_check_channels","reg_leave_invalid_chans"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"761ae184f850f33d1bbf6c4530c7f237be780d21","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFG80211"],"series_id":"a6415cc5-2d2a-4e6e-8f3c-f90a5a6fc0ca","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-09-05 01:04:58 +0000 UTC FinishedAt: 2026-09-05 01:05:09 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhtgb8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"761ae184f850f33d1bbf6c4530c7f237be780d21","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFG80211"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["reg_check_chans_work","reg_check_channels","reg_leave_invalid_chans"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"761ae184f850f33d1bbf6c4530c7f237be780d21","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFG80211"],"series_id":"a6415cc5-2d2a-4e6e-8f3c-f90a5a6fc0ca","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-09-05 01:04:58 +0000 UTC FinishedAt: 2026-09-05 01:05:05 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"761ae184f850f33d1bbf6c4530c7f237be780d21","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFG80211"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowhtgb8/series-workflowhtgb8-convert-artifact-3986054293/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowhtgb8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"761ae184f850f33d1bbf6c4530c7f237be780d21","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFG80211"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["reg_check_chans_work","reg_check_channels","reg_leave_invalid_chans"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"761ae184f850f33d1bbf6c4530c7f237be780d21","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFG80211"],"series_id":"a6415cc5-2d2a-4e6e-8f3c-f90a5a6fc0ca","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-09-05 01:05:09 +0000 UTC FinishedAt: 2026-09-05 01:23:29 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhtgb8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"761ae184f850f33d1bbf6c4530c7f237be780d21","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFG80211"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["reg_check_chans_work","reg_check_channels","reg_leave_invalid_chans"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"761ae184f850f33d1bbf6c4530c7f237be780d21","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFG80211"],"series_id":"a6415cc5-2d2a-4e6e-8f3c-f90a5a6fc0ca","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-09-05 01:05:09 +0000 UTC FinishedAt: 2026-09-05 01:23:29 +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:*4ffaf6eb-a8a1-4551-94b8-d4c6ecd36020,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-workflowhtgb8/series-workflowhtgb8-convert-artifact-3986054293/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": "050687c8-89b7-4938-9b14-b993d489c6bd", "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-workflowhtgb8/series-workflowhtgb8-build-action-643216635/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowhtgb8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"761ae184f850f33d1bbf6c4530c7f237be780d21","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFG80211"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["reg_check_chans_work","reg_check_channels","reg_leave_invalid_chans"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"761ae184f850f33d1bbf6c4530c7f237be780d21","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFG80211"],"series_id":"a6415cc5-2d2a-4e6e-8f3c-f90a5a6fc0ca","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-09-05 01:05:09 +0000 UTC FinishedAt: 2026-09-05 01:23:19 +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:*4ffaf6eb-a8a1-4551-94b8-d4c6ecd36020,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-workflowhtgb8/series-workflowhtgb8-convert-artifact-3986054293/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": "050687c8-89b7-4938-9b14-b993d489c6bd", "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-workflowhtgb8/series-workflowhtgb8-build-action-643216635/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowhtgb8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"761ae184f850f33d1bbf6c4530c7f237be780d21","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFG80211"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["reg_check_chans_work","reg_check_channels","reg_leave_invalid_chans"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"761ae184f850f33d1bbf6c4530c7f237be780d21","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFG80211"],"series_id":"a6415cc5-2d2a-4e6e-8f3c-f90a5a6fc0ca","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-09-05 01:23:29 +0000 UTC FinishedAt: 2026-09-05 01:23:29 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhtgb8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"761ae184f850f33d1bbf6c4530c7f237be780d21","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFG80211"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["reg_check_chans_work","reg_check_channels","reg_leave_invalid_chans"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"761ae184f850f33d1bbf6c4530c7f237be780d21","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFG80211"],"series_id":"a6415cc5-2d2a-4e6e-8f3c-f90a5a6fc0ca","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-09-05 01:23:29 +0000 UTC FinishedAt: 2026-09-05 01:23:29 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhtgb8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"761ae184f850f33d1bbf6c4530c7f237be780d21","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFG80211"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["reg_check_chans_work","reg_check_channels","reg_leave_invalid_chans"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"761ae184f850f33d1bbf6c4530c7f237be780d21","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFG80211"],"series_id":"a6415cc5-2d2a-4e6e-8f3c-f90a5a6fc0ca","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-09-05 01:23:29 +0000 UTC FinishedAt: 2026-09-05 01:23:39 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhtgb8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"761ae184f850f33d1bbf6c4530c7f237be780d21","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFG80211"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["reg_check_chans_work","reg_check_channels","reg_leave_invalid_chans"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"761ae184f850f33d1bbf6c4530c7f237be780d21","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFG80211"],"series_id":"a6415cc5-2d2a-4e6e-8f3c-f90a5a6fc0ca","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-09-05 01:23:29 +0000 UTC FinishedAt: 2026-09-05 01:23:35 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"761ae184f850f33d1bbf6c4530c7f237be780d21","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFG80211"],"series_id":"a6415cc5-2d2a-4e6e-8f3c-f90a5a6fc0ca","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowhtgb8/series-workflowhtgb8-convert-artifact-491514480/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowhtgb8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"761ae184f850f33d1bbf6c4530c7f237be780d21","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFG80211"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["reg_check_chans_work","reg_check_channels","reg_leave_invalid_chans"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"761ae184f850f33d1bbf6c4530c7f237be780d21","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFG80211"],"series_id":"a6415cc5-2d2a-4e6e-8f3c-f90a5a6fc0ca","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-09-05 01:23:39 +0000 UTC FinishedAt: 2026-09-05 01:25:46 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhtgb8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"761ae184f850f33d1bbf6c4530c7f237be780d21","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFG80211"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["reg_check_chans_work","reg_check_channels","reg_leave_invalid_chans"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"761ae184f850f33d1bbf6c4530c7f237be780d21","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFG80211"],"series_id":"a6415cc5-2d2a-4e6e-8f3c-f90a5a6fc0ca","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-09-05 01:23:39 +0000 UTC FinishedAt: 2026-09-05 01:25:36 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*050687c8-89b7-4938-9b14-b993d489c6bd,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-workflowhtgb8/series-workflowhtgb8-build-action-643216635/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-workflowhtgb8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"761ae184f850f33d1bbf6c4530c7f237be780d21","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFG80211"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["reg_check_chans_work","reg_check_channels","reg_leave_invalid_chans"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"761ae184f850f33d1bbf6c4530c7f237be780d21","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFG80211"],"series_id":"a6415cc5-2d2a-4e6e-8f3c-f90a5a6fc0ca","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-09-05 01:25:46 +0000 UTC FinishedAt: 2026-09-05 01:25:46 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhtgb8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"761ae184f850f33d1bbf6c4530c7f237be780d21","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFG80211"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["reg_check_chans_work","reg_check_channels","reg_leave_invalid_chans"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"761ae184f850f33d1bbf6c4530c7f237be780d21","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFG80211"],"series_id":"a6415cc5-2d2a-4e6e-8f3c-f90a5a6fc0ca","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-09-05 01:25:46 +0000 UTC FinishedAt: 2026-09-05 01:25:46 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhtgb8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"761ae184f850f33d1bbf6c4530c7f237be780d21","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFG80211"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["reg_check_chans_work","reg_check_channels","reg_leave_invalid_chans"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"761ae184f850f33d1bbf6c4530c7f237be780d21","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFG80211"],"series_id":"a6415cc5-2d2a-4e6e-8f3c-f90a5a6fc0ca","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-09-05 01:25:46 +0000 UTC FinishedAt: 2026-09-05 01:50:02 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhtgb8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"761ae184f850f33d1bbf6c4530c7f237be780d21","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFG80211"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["reg_check_chans_work","reg_check_channels","reg_leave_invalid_chans"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"761ae184f850f33d1bbf6c4530c7f237be780d21","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFG80211"],"series_id":"a6415cc5-2d2a-4e6e-8f3c-f90a5a6fc0ca","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-09-05 01:25:46 +0000 UTC FinishedAt: 2026-09-05 01:50:02 +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:*4ffaf6eb-a8a1-4551-94b8-d4c6ecd36020,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-workflowhtgb8/series-workflowhtgb8-convert-artifact-491514480/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": "aae78e6d-4d1c-46cd-8cf1-0a890a587119", "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-workflowhtgb8/series-workflowhtgb8-build-action-2916502380/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowhtgb8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"761ae184f850f33d1bbf6c4530c7f237be780d21","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFG80211"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["reg_check_chans_work","reg_check_channels","reg_leave_invalid_chans"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"761ae184f850f33d1bbf6c4530c7f237be780d21","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFG80211"],"series_id":"a6415cc5-2d2a-4e6e-8f3c-f90a5a6fc0ca","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-09-05 01:25:46 +0000 UTC FinishedAt: 2026-09-05 01:49:52 +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:*4ffaf6eb-a8a1-4551-94b8-d4c6ecd36020,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-workflowhtgb8/series-workflowhtgb8-convert-artifact-491514480/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": "aae78e6d-4d1c-46cd-8cf1-0a890a587119", "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-workflowhtgb8/series-workflowhtgb8-build-action-2916502380/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowhtgb8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"761ae184f850f33d1bbf6c4530c7f237be780d21","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFG80211"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["reg_check_chans_work","reg_check_channels","reg_leave_invalid_chans"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"761ae184f850f33d1bbf6c4530c7f237be780d21","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFG80211"],"series_id":"a6415cc5-2d2a-4e6e-8f3c-f90a5a6fc0ca","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-09-05 01:50:02 +0000 UTC FinishedAt: 2026-09-05 01:50:02 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhtgb8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"761ae184f850f33d1bbf6c4530c7f237be780d21","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFG80211"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["reg_check_chans_work","reg_check_channels","reg_leave_invalid_chans"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"761ae184f850f33d1bbf6c4530c7f237be780d21","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFG80211"],"series_id":"a6415cc5-2d2a-4e6e-8f3c-f90a5a6fc0ca","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-09-05 01:50:02 +0000 UTC FinishedAt: 2026-09-05 01:50:02 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhtgb8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"761ae184f850f33d1bbf6c4530c7f237be780d21","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFG80211"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["reg_check_chans_work","reg_check_channels","reg_leave_invalid_chans"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"761ae184f850f33d1bbf6c4530c7f237be780d21","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFG80211"],"series_id":"a6415cc5-2d2a-4e6e-8f3c-f90a5a6fc0ca","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-09-05 01:50:02 +0000 UTC FinishedAt: 2026-09-05 01:51:55 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhtgb8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"761ae184f850f33d1bbf6c4530c7f237be780d21","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFG80211"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["reg_check_chans_work","reg_check_channels","reg_leave_invalid_chans"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"761ae184f850f33d1bbf6c4530c7f237be780d21","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFG80211"],"series_id":"a6415cc5-2d2a-4e6e-8f3c-f90a5a6fc0ca","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-09-05 01:50:02 +0000 UTC FinishedAt: 2026-09-05 01:51:45 +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:*aae78e6d-4d1c-46cd-8cf1-0a890a587119,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-workflowhtgb8/series-workflowhtgb8-build-action-2916502380/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-workflowhtgb8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"761ae184f850f33d1bbf6c4530c7f237be780d21","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFG80211"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["reg_check_chans_work","reg_check_channels","reg_leave_invalid_chans"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"761ae184f850f33d1bbf6c4530c7f237be780d21","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFG80211"],"series_id":"a6415cc5-2d2a-4e6e-8f3c-f90a5a6fc0ca","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-09-05 01:51:55 +0000 UTC FinishedAt: 2026-09-05 04:58:23 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhtgb8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"761ae184f850f33d1bbf6c4530c7f237be780d21","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFG80211"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["reg_check_chans_work","reg_check_channels","reg_leave_invalid_chans"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"761ae184f850f33d1bbf6c4530c7f237be780d21","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFG80211"],"series_id":"a6415cc5-2d2a-4e6e-8f3c-f90a5a6fc0ca","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-09-05 01:51:55 +0000 UTC FinishedAt: 2026-09-05 04:58:23 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:config,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["reg_check_chans_work","reg_check_channels","reg_leave_invalid_chans"],"skip_cover_check":false},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:track,Default:nil,Value:*KASAN,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:base-build-id,Default:nil,Value:*050687c8-89b7-4938-9b14-b993d489c6bd,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*aae78e6d-4d1c-46cd-8cf1-0a890a587119,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-workflowhtgb8/series-workflowhtgb8-build-action-643216635/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-workflowhtgb8/series-workflowhtgb8-build-action-2916502380/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowhtgb8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"761ae184f850f33d1bbf6c4530c7f237be780d21","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFG80211"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["reg_check_chans_work","reg_check_channels","reg_leave_invalid_chans"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"761ae184f850f33d1bbf6c4530c7f237be780d21","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFG80211"],"series_id":"a6415cc5-2d2a-4e6e-8f3c-f90a5a6fc0ca","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-09-05 01:51:55 +0000 UTC FinishedAt: 2026-09-05 01:52:06 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhtgb8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"761ae184f850f33d1bbf6c4530c7f237be780d21","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFG80211"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["reg_check_chans_work","reg_check_channels","reg_leave_invalid_chans"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"761ae184f850f33d1bbf6c4530c7f237be780d21","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFG80211"],"series_id":"a6415cc5-2d2a-4e6e-8f3c-f90a5a6fc0ca","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-09-05 01:51:55 +0000 UTC FinishedAt: 2026-09-05 01:52:00 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["reg_check_chans_work","reg_check_channels","reg_leave_invalid_chans"],"skip_cover_check":false},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowhtgb8/series-workflowhtgb8-convert-artifact-3052153321/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowhtgb8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"761ae184f850f33d1bbf6c4530c7f237be780d21","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFG80211"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["reg_check_chans_work","reg_check_channels","reg_leave_invalid_chans"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"761ae184f850f33d1bbf6c4530c7f237be780d21","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFG80211"],"series_id":"a6415cc5-2d2a-4e6e-8f3c-f90a5a6fc0ca","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-09-05 01:51:55 +0000 UTC FinishedAt: 2026-09-05 01:51:55 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhtgb8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"761ae184f850f33d1bbf6c4530c7f237be780d21","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFG80211"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["reg_check_chans_work","reg_check_channels","reg_leave_invalid_chans"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"761ae184f850f33d1bbf6c4530c7f237be780d21","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFG80211"],"series_id":"a6415cc5-2d2a-4e6e-8f3c-f90a5a6fc0ca","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-09-05 01:51:55 +0000 UTC FinishedAt: 2026-09-05 01:51:55 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhtgb8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"761ae184f850f33d1bbf6c4530c7f237be780d21","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFG80211"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["reg_check_chans_work","reg_check_channels","reg_leave_invalid_chans"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"761ae184f850f33d1bbf6c4530c7f237be780d21","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFG80211"],"series_id":"a6415cc5-2d2a-4e6e-8f3c-f90a5a6fc0ca","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-09-05 01:51:56 +0000 UTC FinishedAt: 2026-09-05 01:51:56 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhtgb8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"761ae184f850f33d1bbf6c4530c7f237be780d21","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFG80211"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["reg_check_chans_work","reg_check_channels","reg_leave_invalid_chans"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"761ae184f850f33d1bbf6c4530c7f237be780d21","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFG80211"],"series_id":"a6415cc5-2d2a-4e6e-8f3c-f90a5a6fc0ca","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-09-05 01:52:06 +0000 UTC FinishedAt: 2026-09-05 04:58:23 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhtgb8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"761ae184f850f33d1bbf6c4530c7f237be780d21","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFG80211"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["reg_check_chans_work","reg_check_channels","reg_leave_invalid_chans"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"761ae184f850f33d1bbf6c4530c7f237be780d21","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFG80211"],"series_id":"a6415cc5-2d2a-4e6e-8f3c-f90a5a6fc0ca","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-09-05 01:52:06 +0000 UTC FinishedAt: 2026-09-05 04:58:13 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*050687c8-89b7-4938-9b14-b993d489c6bd,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*aae78e6d-4d1c-46cd-8cf1-0a890a587119,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-workflowhtgb8/series-workflowhtgb8-build-action-643216635/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-workflowhtgb8/series-workflowhtgb8-build-action-2916502380/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-workflowhtgb8/series-workflowhtgb8-convert-artifact-3052153321/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,}