Name: series-workflowxqs88 Phase: Succeeded StartedAt: 2026-07-30 09:42:24 +0000 UTC FinishedAt: 2026-07-30 13:44:06 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxqs88[0] Phase: Succeeded StartedAt: 2026-07-30 09:42:24 +0000 UTC FinishedAt: 2026-07-30 10:01:52 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxqs88[0].run-triage Phase: Succeeded StartedAt: 2026-07-30 09:42:24 +0000 UTC FinishedAt: 2026-07-30 10:01:52 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "mm-new", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git", "commit_hash": "2e0c36e540a15bb6f5ffa2409001fb42219791c6", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "ZRAM", "ZRAM_BACKEND_DEFLATE" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "mm-new", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git", "commit_hash": "2e0c36e540a15bb6f5ffa2409001fb42219791c6", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "ZRAM", "ZRAM_BACKEND_DEFLATE" ], "series_id": "56f8bfe6-a91a-4309-b001-373ab865e793" }, "track": "KASAN", "fuzz": { "focus": null, "focus_symbols": [ "zcomp_create", "disksize_store", "algorithm_params_store", "reset_store", "zram_destroy_comps", "deflate_setup_params" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db" ], "skip_cover_check": true, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMwIDEwOjAwPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1pSQU0mIzM0OywKICAgICYjMzQ7WlJBTV9CQUNLRU5EX0RFRkxBVEUmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDt6Y29tcF9jcmVhdGUmIzM0OywKICAgICYjMzQ7ZGlza3NpemVfc3RvcmUmIzM0OywKICAgICYjMzQ7YWxnb3JpdGhtX3BhcmFtc19zdG9yZSYjMzQ7LAogICAgJiMzNDtyZXNldF9zdG9yZSYjMzQ7LAogICAgJiMzNDt6cmFtX2Rlc3Ryb3lfY29tcHMmIzM0OywKICAgICYjMzQ7ZGVmbGF0ZV9zZXR1cF9wYXJhbXMmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcyB2YWxpZGF0aW9uIGZvciB0aGUgZGVmbGF0ZSB3aW5iaXRzIHBhcmFtZXRlciBhbmQgY2hhbmdlcyB0aGUgYmVoYXZpb3Igb2YgenJhbV9kZXN0cm95X2NvbXBzIHRvIHJlc2V0IHRoZSBjb21wcmVzc2lvbiBhbGdvcml0aG0uIFRoZXNlIGFyZSBmdW5jdGlvbmFsIGNoYW5nZXMgaW4gdGhlIHpyYW0gZHJpdmVyIHRoYXQgYXJlIHJlYWNoYWJsZSB2aWEgc3lzZnMgYXR0cmlidXRlcyAoZS5nLiwgZGlza3NpemUsIGFsZ29yaXRobV9wYXJhbXMsIHJlc2V0KSBhbmQgc2hvdWxkIGJlIGZ1enplZC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMCAxMDowMDwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IDUxNGVkOGVhMzNhNjRlOTU0ZDllZTExNDIzYTYzYmM0OWY0YTAzMjZcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVGh1IEp1bCAzMCAxMDowMDoyNyAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9kcml2ZXJzL2Jsb2NrL3pyYW0vYmFja2VuZF9kZWZsYXRlLmMgYi9kcml2ZXJzL2Jsb2NrL3pyYW0vYmFja2VuZF9kZWZsYXRlLmNcbmluZGV4IGY5MmE1MmE3MjBkMWUuLjcyOWFjNzM0ZGQ2YzEgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL2Jsb2NrL3pyYW0vYmFja2VuZF9kZWZsYXRlLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvYmxvY2svenJhbS9iYWNrZW5kX2RlZmxhdGUuY1xuQEAgLTI0LDggJiM0MzsyNCwxNCBAQCBzdGF0aWMgaW50IGRlZmxhdGVfc2V0dXBfcGFyYW1zKHN0cnVjdCB6Y29tcF9wYXJhbXMgKnBhcmFtcylcbiB7XG4gXHRpZiAocGFyYW1zLVx1MDAzZWxldmVsID09IFpDT01QX1BBUkFNX05PVF9TRVQpXG4gXHRcdHBhcmFtcy1cdTAwM2VsZXZlbCA9IFpfREVGQVVMVF9DT01QUkVTU0lPTjtcbi1cdGlmIChwYXJhbXMtXHUwMDNlZGVmbGF0ZS53aW5iaXRzID09IFpDT01QX1BBUkFNX05PVF9TRVQpXG4mIzQzO1x0aWYgKHBhcmFtcy1cdTAwM2VkZWZsYXRlLndpbmJpdHMgPT0gWkNPTVBfUEFSQU1fTk9UX1NFVCkge1xuIFx0XHRwYXJhbXMtXHUwMDNlZGVmbGF0ZS53aW5iaXRzID0gREVGTEFURV9ERUZfV0lOQklUUztcbiYjNDM7XHR9IGVsc2Uge1xuJiM0MztcdFx0czMyIHdiID0gcGFyYW1zLVx1MDAzZWRlZmxhdGUud2luYml0cztcbiYjNDM7XG4mIzQzO1x0XHRpZiAoKHdiIFx1MDAzYyAtMTUgfHwgd2IgXHUwMDNlIC05KSBcdTAwMjZcdTAwMjYgKHdiIFx1MDAzYyA5IHx8IHdiIFx1MDAzZSAxNSkpXG4mIzQzO1x0XHRcdHJldHVybiAtRUlOVkFMO1xuJiM0MztcdH1cbiBcbiBcdHJldHVybiAwO1xuIH1cbmRpZmYgLS1naXQgYS9kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYyBiL2RyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jXG5pbmRleCBhY2U2NWM1ODYwNzJiLi5lYmUyZGE5NTUxODJmIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmNcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jXG5AQCAtMjgzNiw2ICYjNDM7MjgzNiw3IEBAIHN0YXRpYyB2b2lkIHpyYW1fZGVzdHJveV9jb21wcyhzdHJ1Y3QgenJhbSAqenJhbSlcbiBcdFx0enJhbS1cdTAwM2Vjb21wX2FsZ3NbcHJpb10gPSBOVUxMO1xuIFxuIFx0enJhbV9jb21wX3BhcmFtc19yZXNldCh6cmFtKTtcbiYjNDM7XHRjb21wX2FsZ29yaXRobV9zZXQoenJhbSwgWlJBTV9QUklNQVJZX0NPTVAsIGRlZmF1bHRfY29tcHJlc3Nvcik7XG4gfVxuIFxuIHN0YXRpYyB2b2lkIHpyYW1fcmVzZXRfZGV2aWNlKHN0cnVjdCB6cmFtICp6cmFtKVxuQEAgLTI4NTMsOCAmIzQzOzI4NTQsNiBAQCBzdGF0aWMgdm9pZCB6cmFtX3Jlc2V0X2RldmljZShzdHJ1Y3QgenJhbSAqenJhbSlcbiBcdHpyYW1fZGVzdHJveV9jb21wcyh6cmFtKTtcbiBcdG1lbXNldChcdTAwMjZ6cmFtLVx1MDAzZXN0YXRzLCAwLCBzaXplb2YoenJhbS1cdTAwM2VzdGF0cykpO1xuIFx0cmVzZXRfYmRldih6cmFtKTtcbi1cbi1cdGNvbXBfYWxnb3JpdGhtX3NldCh6cmFtLCBaUkFNX1BSSU1BUllfQ09NUCwgZGVmYXVsdF9jb21wcmVzc29yKTtcbiB9XG4gXG4gc3RhdGljIHNzaXplX3QgZGlza3NpemVfc3RvcmUoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0cixcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMCAxMDowMDwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4xbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5iZXN0LWV4cGVuc2l2ZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7WlJBTSYjMzQ7LAogICAgJiMzNDtaUkFNX0JBQ0tFTkRfREVGTEFURSYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3pjb21wX2NyZWF0ZSYjMzQ7LAogICAgJiMzNDtkaXNrc2l6ZV9zdG9yZSYjMzQ7LAogICAgJiMzNDthbGdvcml0aG1fcGFyYW1zX3N0b3JlJiMzNDssCiAgICAmIzM0O3Jlc2V0X3N0b3JlJiMzNDssCiAgICAmIzM0O3pyYW1fZGVzdHJveV9jb21wcyYjMzQ7LAogICAgJiMzNDtkZWZsYXRlX3NldHVwX3BhcmFtcyYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRzIHZhbGlkYXRpb24gZm9yIHRoZSBkZWZsYXRlIHdpbmJpdHMgcGFyYW1ldGVyIGFuZCBjaGFuZ2VzIHRoZSBiZWhhdmlvciBvZiB6cmFtX2Rlc3Ryb3lfY29tcHMgdG8gcmVzZXQgdGhlIGNvbXByZXNzaW9uIGFsZ29yaXRobS4gVGhlc2UgYXJlIGZ1bmN0aW9uYWwgY2hhbmdlcyBpbiB0aGUgenJhbSBkcml2ZXIgdGhhdCBhcmUgcmVhY2hhYmxlIHZpYSBzeXNmcyBhdHRyaWJ1dGVzIChlLmcuLCBkaXNrc2l6ZSwgYWxnb3JpdGhtX3BhcmFtcywgcmVzZXQpIGFuZCBzaG91bGQgYmUgZnV6emVkLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmUKaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseQp1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLgoKUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczoKLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLgotIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLgotIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy4KLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsCiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLgotIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLAogIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpCiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLgoKSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaAp0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4KCldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOgoxLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLgogICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4KICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zCiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLgoyLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS4KICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgogICBBbHNvIGNoZWNrICYjMzQ7ZGVwZW5kcyBvbiYjMzQ7IGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncwogICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3MKICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgNTE0ZWQ4ZWEzM2E2NGU5NTRkOWVlMTE0MjNhNjNiYzQ5ZjRhMDMyNgpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBUaHUgSnVsIDMwIDEwOjAwOjI3IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ibG9jay96cmFtL2JhY2tlbmRfZGVmbGF0ZS5jIGIvZHJpdmVycy9ibG9jay96cmFtL2JhY2tlbmRfZGVmbGF0ZS5jCmluZGV4IGY5MmE1MmE3MjBkMWUuLjcyOWFjNzM0ZGQ2YzEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYmxvY2svenJhbS9iYWNrZW5kX2RlZmxhdGUuYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL2Jsb2NrL3pyYW0vYmFja2VuZF9kZWZsYXRlLmMKQEAgLTI0LDggJiM0MzsyNCwxNCBAQCBzdGF0aWMgaW50IGRlZmxhdGVfc2V0dXBfcGFyYW1zKHN0cnVjdCB6Y29tcF9wYXJhbXMgKnBhcmFtcykKIHsKIAlpZiAocGFyYW1zLSZndDtsZXZlbCA9PSBaQ09NUF9QQVJBTV9OT1RfU0VUKQogCQlwYXJhbXMtJmd0O2xldmVsID0gWl9ERUZBVUxUX0NPTVBSRVNTSU9OOwotCWlmIChwYXJhbXMtJmd0O2RlZmxhdGUud2luYml0cyA9PSBaQ09NUF9QQVJBTV9OT1RfU0VUKQomIzQzOwlpZiAocGFyYW1zLSZndDtkZWZsYXRlLndpbmJpdHMgPT0gWkNPTVBfUEFSQU1fTk9UX1NFVCkgewogCQlwYXJhbXMtJmd0O2RlZmxhdGUud2luYml0cyA9IERFRkxBVEVfREVGX1dJTkJJVFM7CiYjNDM7CX0gZWxzZSB7CiYjNDM7CQlzMzIgd2IgPSBwYXJhbXMtJmd0O2RlZmxhdGUud2luYml0czsKJiM0MzsKJiM0MzsJCWlmICgod2IgJmx0OyAtMTUgfHwgd2IgJmd0OyAtOSkgJmFtcDsmYW1wOyAod2IgJmx0OyA5IHx8IHdiICZndDsgMTUpKQomIzQzOwkJCXJldHVybiAtRUlOVkFMOwomIzQzOwl9CiAKIAlyZXR1cm4gMDsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jIGIvZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmMKaW5kZXggYWNlNjVjNTg2MDcyYi4uZWJlMmRhOTU1MTgyZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmMKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmMKQEAgLTI4MzYsNiAmIzQzOzI4MzYsNyBAQCBzdGF0aWMgdm9pZCB6cmFtX2Rlc3Ryb3lfY29tcHMoc3RydWN0IHpyYW0gKnpyYW0pCiAJCXpyYW0tJmd0O2NvbXBfYWxnc1twcmlvXSA9IE5VTEw7CiAKIAl6cmFtX2NvbXBfcGFyYW1zX3Jlc2V0KHpyYW0pOwomIzQzOwljb21wX2FsZ29yaXRobV9zZXQoenJhbSwgWlJBTV9QUklNQVJZX0NPTVAsIGRlZmF1bHRfY29tcHJlc3Nvcik7CiB9CiAKIHN0YXRpYyB2b2lkIHpyYW1fcmVzZXRfZGV2aWNlKHN0cnVjdCB6cmFtICp6cmFtKQpAQCAtMjg1Myw4ICYjNDM7Mjg1NCw2IEBAIHN0YXRpYyB2b2lkIHpyYW1fcmVzZXRfZGV2aWNlKHN0cnVjdCB6cmFtICp6cmFtKQogCXpyYW1fZGVzdHJveV9jb21wcyh6cmFtKTsKIAltZW1zZXQoJmFtcDt6cmFtLSZndDtzdGF0cywgMCwgc2l6ZW9mKHpyYW0tJmd0O3N0YXRzKSk7CiAJcmVzZXRfYmRldih6cmFtKTsKLQotCWNvbXBfYWxnb3JpdGhtX3NldCh6cmFtLCBaUkFNX1BSSU1BUllfQ09NUCwgZGVmYXVsdF9jb21wcmVzc29yKTsKIH0KIAogc3RhdGljIHNzaXplX3QgZGlza3NpemVfc3RvcmUoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzAgMTA6MDA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjQ4NwoJCQkJCQkJb3V0cHV0OiAzMwoJCQkJCQkJdGhvdWdodHM6IDE4MwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIFpSQU0gUGF0Y2gqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggdGhhdCB0b3VjaGVzIGBkcml2ZXJzL2Jsb2NrL3pyYW0vYmFja2VuZF9kZWZsYXRlLmNgIGFuZCBgZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmNgLiBGcm9tIHdoYXQgSSBnYXRoZXIsIHRoZSBmaXJzdCBwYXJ0IGlzIGFkZGluZyBzb21lIHZhbGlkYXRpb24gZm9yIGBwYXJhbXMtJmd0O2RlZmxhdGUud2luYml0c2AgaW4gdGhlIGRlZmxhdGUgYmFja2VuZC4gU2VlbXMgc3RyYWlnaHRmb3J3YXJkIGVub3VnaDsgbWFraW5nIHN1cmUgdGhlIHdpbmRvdyBzaXplIGlzIHJlYXNvbmFibGUgaXMgYSBnb29kIHByYWN0aWNlLgoKTm93LCB0aGUgbW9yZSBpbnRlcmVzdGluZyBiaXQgaXMgdGhlIGNoYW5nZSBpbiBgenJhbV9kcnYuY2AuIEl0IGxvb2tzIGxpa2UgdGhleSYjMzk7cmUgbW92aW5nIGBjb21wX2FsZ29yaXRobV9zZXQoenJhbSwgWlJBTV9QUklNQVJZX0NPTVAsIGRlZmF1bHRfY29tcHJlc3Nvcik7YCBmcm9tIGB6cmFtX3Jlc2V0X2RldmljZWAgdG8gYHpyYW1fZGVzdHJveV9jb21wc2AuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoeS4gSXQgc2VlbXMgbGlrZSBhIGNoYW5nZSBpbiBpbml0aWFsaXphdGlvbiBvciBjbGVhbnVwLiBMZXQmIzM5O3MgZGlnIGludG8gdGhhdC4uLgoKRmlyc3QgdGhpbmdzIGZpcnN0LCBJJiMzOTtsbCByZWZyZXNoIG15IG1lbW9yeSBvZiB0aGUgY29udHJvbCBmbG93IGhlcmUuIExldCYjMzk7cyBzZWUsIGB6cmFtX2Rlc3Ryb3lfY29tcHNgIGlzIGNhbGxlZCBmcm9tIGB6cmFtX3Jlc2V0X2RldmljZWAsIHdoaWNoIGlzIGEga2V5IHBhcnQgb2YgdGhlIFpSQU0gbGlmZWN5Y2xlLiBXYWl0IGEgc2Vjb25kLCB3YXNuJiMzOTt0IGB6cmFtX2Rlc3Ryb3lfY29tcHNgIGNhbGxlZCBmcm9tIHNvbWV3aGVyZSBlbHNlIHRvbz8gSSB0aGluayBpdCB3YXMgYWxzbyBjYWxsZWQgZnJvbSBgenJhbV9yZW1vdmVgLiBJIHNob3VsZCBxdWlja2x5IHZlcmlmeSB0aGF0LCBqdXN0IHRvIG1ha2Ugc3VyZSBteSB1bmRlcnN0YW5kaW5nIGlzIHNvbGlkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMwIDEwOjAwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3pyYW1fZGVzdHJveV9jb21wcyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvYmxvY2svenJhbS8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmM9MjgxMz1zdGF0aWMgdm9pZCB6cmFtX2NvbXBfcGFyYW1zX3Jlc2V0KHN0cnVjdCB6cmFtICp6cmFtKVxuLS1cbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jLTI4MjEtXG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYzoyODIyOnN0YXRpYyB2b2lkIHpyYW1fZGVzdHJveV9jb21wcyhzdHJ1Y3QgenJhbSAqenJhbSlcbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jLTI4MjMte1xuLS1cbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jPTI4NDI9c3RhdGljIHZvaWQgenJhbV9yZXNldF9kZXZpY2Uoc3RydWN0IHpyYW0gKnpyYW0pXG4tLVxuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmMtMjg1My1cdHpyYW0tXHUwMDNlZGlza3NpemUgPSAwO1xuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmM6Mjg1NDpcdHpyYW1fZGVzdHJveV9jb21wcyh6cmFtKTtcbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jLTI4NTUtXHRtZW1zZXQoXHUwMDI2enJhbS1cdTAwM2VzdGF0cywgMCwgc2l6ZW9mKHpyYW0tXHUwMDNlc3RhdHMpKTtcbi0tXG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYz0yODU5PXN0YXRpYyBzc2l6ZV90IGRpc2tzaXplX3N0b3JlKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsXG4tLVxuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmMtMjkwMi1vdXRfZnJlZV9jb21wczpcbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jOjI5MDM6XHR6cmFtX2Rlc3Ryb3lfY29tcHMoenJhbSk7XG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYy0yOTA0LVx0enJhbV9tZXRhX2ZyZWUoenJhbSwgZGlza3NpemUpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMwIDEwOjAwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDMzOTIKCQkJCQkJCW91dHB1dDogMzMKCQkJCQkJCXRob3VnaHRzOiA3NgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4KCioqQW5hbHl6aW5nIEVycm9yIEhhbmRsaW5nIGluIHpyYW0gRGlzayBTaXplIENvbmZpZ3VyYXRpb24qKgoKUmlnaHQsIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGUgYHpyYW1gIGNvZGUsIHNwZWNpZmljYWxseSBob3cgaXQgaGFuZGxlcyBlcnJvcnMgd2hlbiBzZXR0aW5nIHRoZSBkaXNrIHNpemUuIEkgc2VlIHRoYXQgYHpyYW1fZGVzdHJveV9jb21wc2AgaXMgdHJpZ2dlcmVkIGZyb20gYGRpc2tzaXplX3N0b3JlYCBpbiB0aGUgZXZlbnQgb2YgYW4gZXJyb3IsIHNwZWNpZmljYWxseSBhdCB0aGF0IGBvdXRfZnJlZV9jb21wc2AgcG9pbnQuIEN1cnJlbnRseSwgdGhpcyBtZWFucyBpZiB0aGVyZSYjMzk7cyBhbiBpc3N1ZSBkdXJpbmcgYSBkaXNrIHNpemUgb3BlcmF0aW9uLCB3ZSBjbGVhbiB1cCBjb21wcmVzc2lvbiBjb21wb25lbnRzLgoKVGhlIGludGVyZXN0aW5nIGJpdCBpcyB0aGlzIHByb3Bvc2VkIGNoYW5nZS4gTW92aW5nIGBjb21wX2FsZ29yaXRobV9zZXRgIGludG8gYHpyYW1fZGVzdHJveV9jb21wc2AgbWVhbnMgdGhhdCB0aGUgY29tcHJlc3Npb24gYWxnb3JpdGhtIHNldHVwIHdpbGwgKmFsc28qIGJlIGNsZWFuZWQgdXAgb24gdGhlIGVycm9yIHBhdGggd2l0aGluIGBkaXNrc2l6ZV9zdG9yZWAuIFRoYXTigJlzIHNpZ25pZmljYW50LCBiZWNhdXNlIGl0IGVuc3VyZXMgYSBjb25zaXN0ZW50IGNsZWFudXAsIG5vIG1hdHRlciB3aGF0IHdlbnQgd3Jvbmcgd2hlbiBzZXR0aW5nIHRoZSBkaXNrIHNpemUuIE1ha2VzIHNlbnNlLCBpdCBrZWVwcyBldmVyeXRoaW5nIGluIHN5bmMuIFRoaXMgaXMgaW1wb3J0YW50IHRvIGNvbnNpZGVyIGFzIGl0IGNvdWxkIHByb3ZpZGUgY29uc2lzdGVudCBmYWlsdXJlIHN0YXRlcy4KCk5vdywgSSBzaG91bGQgcXVpY2tseSBjaGVjayBgZGVmbGF0ZV9zZXR1cF9wYXJhbXNgIHRvIG1ha2Ugc3VyZSB0aGlzIGNoYW5nZSBkb2VzbiYjMzk7dCBpbmFkdmVydGVudGx5IGltcGFjdCBob3cgd2UgY29uZmlndXJlIHRoZSBkZWZsYXRlIGNvbXByZXNzaW9uLiBJdOKAmXMgYWx3YXlzIGdvb2QgdG8gYmUgdGhvcm91Z2ghCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzAgMTA6MDA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7ZGVmbGF0ZV9zZXR1cF9wYXJhbXMmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL2Jsb2NrL3pyYW0vJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvYmxvY2svenJhbS9iYWNrZW5kX2RlZmxhdGUuYz0xOT1zdGF0aWMgdm9pZCBkZWZsYXRlX3JlbGVhc2VfcGFyYW1zKHN0cnVjdCB6Y29tcF9wYXJhbXMgKnBhcmFtcylcbi0tXG5kcml2ZXJzL2Jsb2NrL3pyYW0vYmFja2VuZF9kZWZsYXRlLmMtMjItXG5kcml2ZXJzL2Jsb2NrL3pyYW0vYmFja2VuZF9kZWZsYXRlLmM6MjM6c3RhdGljIGludCBkZWZsYXRlX3NldHVwX3BhcmFtcyhzdHJ1Y3QgemNvbXBfcGFyYW1zICpwYXJhbXMpXG5kcml2ZXJzL2Jsb2NrL3pyYW0vYmFja2VuZF9kZWZsYXRlLmMtMjQte1xuLS1cbmRyaXZlcnMvYmxvY2svenJhbS9iYWNrZW5kX2RlZmxhdGUuYz0xNDY9Y29uc3Qgc3RydWN0IHpjb21wX29wcyBiYWNrZW5kX2RlZmxhdGUgPSB7XG4tLVxuZHJpdmVycy9ibG9jay96cmFtL2JhY2tlbmRfZGVmbGF0ZS5jLTE1MC1cdC5kZXN0cm95X2N0eFx0PSBkZWZsYXRlX2Rlc3Ryb3ksXG5kcml2ZXJzL2Jsb2NrL3pyYW0vYmFja2VuZF9kZWZsYXRlLmM6MTUxOlx0LnNldHVwX3BhcmFtc1x0PSBkZWZsYXRlX3NldHVwX3BhcmFtcyxcbmRyaXZlcnMvYmxvY2svenJhbS9iYWNrZW5kX2RlZmxhdGUuYy0xNTItXHQucmVsZWFzZV9wYXJhbXNcdD0gZGVmbGF0ZV9yZWxlYXNlX3BhcmFtcyxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMCAxMDowMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzOTk0CgkJCQkJCQlvdXRwdXQ6IDMwCgkJCQkJCQl0aG91Z2h0czogMTYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIGFuIGV4cGVydCYjMzk7cyBpbnRlcm5hbCBtb25vbG9ndWU6CgoqKkNoZWNraW5nIGB6Y29tcF9vcHNgIGFuZCBgc2V0dXBfcGFyYW1zYCoqCgpBbHJpZ2h0LCBiZWZvcmUgZGl2aW5nIGludG8gYW55dGhpbmcgZGVlcGVyLCBJIG5lZWQgdG8gZ3JvdW5kIG15c2VsZi4gTGV0JiMzOTtzIHN0YXJ0IHdpdGggYSBxdWljayBhdWRpdCBvZiBgemNvbXBfb3BzYCBhbmQgYHNldHVwX3BhcmFtc2AuIEkgbmVlZCB0byBlbnN1cmUgdGhlIGNvcmUgb3BlcmF0aW9uYWwgY29tcG9uZW50IG9mIGB6Y29tcF9vcHNgIGlzIGNvcnJlY3RseSBpbml0aWFsaXplZCwgZ2l2ZW4gaXRzIGZ1bmRhbWVudGFsIHJvbGUuIFVuZGVyc3RhbmRpbmcgdGhlIGN1cnJlbnQgY29uZmlndXJhdGlvbiBvZiBgc2V0dXBfcGFyYW1zYCB3aWxsIGdpdmUgbWUgY3JpdGljYWwgaW5zaWdodCBpbnRvIHRoZSBzeXN0ZW0mIzM5O3MgYmFzZWxpbmUuIEl0JiMzOTtzIHRvbyBlYXN5IHRvIG1pc3Mgc29tZXRoaW5nIHdoZW4geW91JiMzOTtyZSBkZWVwbHkgaW5ncmFpbmVkLCBzbyBhIGJyaWVmIHJldmlldyBzaG91bGQgcHJvdmlkZSBjbGFyaXR5LiBGcm9tIHRoZXJlLCBJIGNhbiBkZXRlcm1pbmUgd2hlcmUgSSBuZWVkIHRvIGZvY3VzIG15IGF0dGVudGlvbi4gSXQmIzM5O3Mgb2Z0ZW4gYmVzdCB0byBhZGRyZXNzIHBvdGVudGlhbCBwcm9ibGVtcyBhdCB0aGUgc291cmNlLCBwcmV2ZW50aW5nIG1vcmUgY29tcGxleCBpc3N1ZXMgZG93biB0aGUgbGluZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMCAxMDowMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtzZXR1cF9wYXJhbXMmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL2Jsb2NrL3pyYW0vJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvYmxvY2svenJhbS9iYWNrZW5kXzg0Mi5jPTEwPXN0YXRpYyB2b2lkIHJlbGVhc2VfcGFyYW1zXzg0MihzdHJ1Y3QgemNvbXBfcGFyYW1zICpwYXJhbXMpXG4tLVxuZHJpdmVycy9ibG9jay96cmFtL2JhY2tlbmRfODQyLmMtMTMtXG5kcml2ZXJzL2Jsb2NrL3pyYW0vYmFja2VuZF84NDIuYzoxNDpzdGF0aWMgaW50IHNldHVwX3BhcmFtc184NDIoc3RydWN0IHpjb21wX3BhcmFtcyAqcGFyYW1zKVxuZHJpdmVycy9ibG9jay96cmFtL2JhY2tlbmRfODQyLmMtMTUte1xuLS1cbmRyaXZlcnMvYmxvY2svenJhbS9iYWNrZW5kXzg0Mi5jPTUzPWNvbnN0IHN0cnVjdCB6Y29tcF9vcHMgYmFja2VuZF84NDIgPSB7XG4tLVxuZHJpdmVycy9ibG9jay96cmFtL2JhY2tlbmRfODQyLmMtNTctXHQuZGVzdHJveV9jdHhcdD0gZGVzdHJveV84NDIsXG5kcml2ZXJzL2Jsb2NrL3pyYW0vYmFja2VuZF84NDIuYzo1ODpcdC5zZXR1cF9wYXJhbXNcdD0gc2V0dXBfcGFyYW1zXzg0MixcbmRyaXZlcnMvYmxvY2svenJhbS9iYWNrZW5kXzg0Mi5jLTU5LVx0LnJlbGVhc2VfcGFyYW1zXHQ9IHJlbGVhc2VfcGFyYW1zXzg0Mixcbi0tXG5kcml2ZXJzL2Jsb2NrL3pyYW0vYmFja2VuZF9kZWZsYXRlLmM9MTk9c3RhdGljIHZvaWQgZGVmbGF0ZV9yZWxlYXNlX3BhcmFtcyhzdHJ1Y3QgemNvbXBfcGFyYW1zICpwYXJhbXMpXG4tLVxuZHJpdmVycy9ibG9jay96cmFtL2JhY2tlbmRfZGVmbGF0ZS5jLTIyLVxuZHJpdmVycy9ibG9jay96cmFtL2JhY2tlbmRfZGVmbGF0ZS5jOjIzOnN0YXRpYyBpbnQgZGVmbGF0ZV9zZXR1cF9wYXJhbXMoc3RydWN0IHpjb21wX3BhcmFtcyAqcGFyYW1zKVxuZHJpdmVycy9ibG9jay96cmFtL2JhY2tlbmRfZGVmbGF0ZS5jLTI0LXtcbi0tXG5kcml2ZXJzL2Jsb2NrL3pyYW0vYmFja2VuZF9kZWZsYXRlLmM9MTQ2PWNvbnN0IHN0cnVjdCB6Y29tcF9vcHMgYmFja2VuZF9kZWZsYXRlID0ge1xuLS1cbmRyaXZlcnMvYmxvY2svenJhbS9iYWNrZW5kX2RlZmxhdGUuYy0xNTAtXHQuZGVzdHJveV9jdHhcdD0gZGVmbGF0ZV9kZXN0cm95LFxuZHJpdmVycy9ibG9jay96cmFtL2JhY2tlbmRfZGVmbGF0ZS5jOjE1MTpcdC5zZXR1cF9wYXJhbXNcdD0gZGVmbGF0ZV9zZXR1cF9wYXJhbXMsXG5kcml2ZXJzL2Jsb2NrL3pyYW0vYmFja2VuZF9kZWZsYXRlLmMtMTUyLVx0LnJlbGVhc2VfcGFyYW1zXHQ9IGRlZmxhdGVfcmVsZWFzZV9wYXJhbXMsXG4tLVxuZHJpdmVycy9ibG9jay96cmFtL2JhY2tlbmRfbHo0LmM9MTU9c3RhdGljIHZvaWQgbHo0X3JlbGVhc2VfcGFyYW1zKHN0cnVjdCB6Y29tcF9wYXJhbXMgKnBhcmFtcylcbi0tXG5kcml2ZXJzL2Jsb2NrL3pyYW0vYmFja2VuZF9sejQuYy0yNS1cbmRyaXZlcnMvYmxvY2svenJhbS9iYWNrZW5kX2x6NC5jOjI2OnN0YXRpYyBpbnQgbHo0X3NldHVwX3BhcmFtcyhzdHJ1Y3QgemNvbXBfcGFyYW1zICpwYXJhbXMpXG5kcml2ZXJzL2Jsb2NrL3pyYW0vYmFja2VuZF9sejQuYy0yNy17XG4tLVxuZHJpdmVycy9ibG9jay96cmFtL2JhY2tlbmRfbHo0LmM9MTQyPWNvbnN0IHN0cnVjdCB6Y29tcF9vcHMgYmFja2VuZF9sejQgPSB7XG4tLVxuZHJpdmVycy9ibG9jay96cmFtL2JhY2tlbmRfbHo0LmMtMTQ2LVx0LmRlc3Ryb3lfY3R4XHQ9IGx6NF9kZXN0cm95LFxuZHJpdmVycy9ibG9jay96cmFtL2JhY2tlbmRfbHo0LmM6MTQ3Olx0LnNldHVwX3BhcmFtc1x0PSBsejRfc2V0dXBfcGFyYW1zLFxuZHJpdmVycy9ibG9jay96cmFtL2JhY2tlbmRfbHo0LmMtMTQ4LVx0LnJlbGVhc2VfcGFyYW1zXHQ9IGx6NF9yZWxlYXNlX3BhcmFtcyxcbi0tXG5kcml2ZXJzL2Jsb2NrL3pyYW0vYmFja2VuZF9sejRoYy5jPTE1PXN0YXRpYyB2b2lkIGx6NGhjX3JlbGVhc2VfcGFyYW1zKHN0cnVjdCB6Y29tcF9wYXJhbXMgKnBhcmFtcylcbi0tXG5kcml2ZXJzL2Jsb2NrL3pyYW0vYmFja2VuZF9sejRoYy5jLTE4LVxuZHJpdmVycy9ibG9jay96cmFtL2JhY2tlbmRfbHo0aGMuYzoxOTpzdGF0aWMgaW50IGx6NGhjX3NldHVwX3BhcmFtcyhzdHJ1Y3QgemNvbXBfcGFyYW1zICpwYXJhbXMpXG5kcml2ZXJzL2Jsb2NrL3pyYW0vYmFja2VuZF9sejRoYy5jLTIwLXtcbi0tXG5kcml2ZXJzL2Jsb2NrL3pyYW0vYmFja2VuZF9sejRoYy5jPTEyMD1jb25zdCBzdHJ1Y3QgemNvbXBfb3BzIGJhY2tlbmRfbHo0aGMgPSB7XG4tLVxuZHJpdmVycy9ibG9jay96cmFtL2JhY2tlbmRfbHo0aGMuYy0xMjQtXHQuZGVzdHJveV9jdHhcdD0gbHo0aGNfZGVzdHJveSxcbmRyaXZlcnMvYmxvY2svenJhbS9iYWNrZW5kX2x6NGhjLmM6MTI1Olx0LnNldHVwX3BhcmFtc1x0PSBsejRoY19zZXR1cF9wYXJhbXMsXG5kcml2ZXJzL2Jsb2NrL3pyYW0vYmFja2VuZF9sejRoYy5jLTEyNi1cdC5yZWxlYXNlX3BhcmFtc1x0PSBsejRoY19yZWxlYXNlX3BhcmFtcyxcbi0tXG5kcml2ZXJzL2Jsb2NrL3pyYW0vYmFja2VuZF9sem8uYz05PXN0YXRpYyB2b2lkIGx6b19yZWxlYXNlX3BhcmFtcyhzdHJ1Y3QgemNvbXBfcGFyYW1zICpwYXJhbXMpXG4tLVxuZHJpdmVycy9ibG9jay96cmFtL2JhY2tlbmRfbHpvLmMtMTItXG5kcml2ZXJzL2Jsb2NrL3pyYW0vYmFja2VuZF9sem8uYzoxMzpzdGF0aWMgaW50IGx6b19zZXR1cF9wYXJhbXMoc3RydWN0IHpjb21wX3BhcmFtcyAqcGFyYW1zKVxuZHJpdmVycy9ibG9jay96cmFtL2JhY2tlbmRfbHpvLmMtMTQte1xuLS1cbmRyaXZlcnMvYmxvY2svenJhbS9iYWNrZW5kX2x6by5jPTUxPWNvbnN0IHN0cnVjdCB6Y29tcF9vcHMgYmFja2VuZF9sem8gPSB7XG4tLVxuZHJpdmVycy9ibG9jay96cmFtL2JhY2tlbmRfbHpvLmMtNTUtXHQuZGVzdHJveV9jdHhcdD0gbHpvX2Rlc3Ryb3ksXG5kcml2ZXJzL2Jsb2NrL3pyYW0vYmFja2VuZF9sem8uYzo1NjpcdC5zZXR1cF9wYXJhbXNcdD0gbHpvX3NldHVwX3BhcmFtcyxcbmRyaXZlcnMvYmxvY2svenJhbS9iYWNrZW5kX2x6by5jLTU3LVx0LnJlbGVhc2VfcGFyYW1zXHQ9IGx6b19yZWxlYXNlX3BhcmFtcyxcbi0tXG5kcml2ZXJzL2Jsb2NrL3pyYW0vYmFja2VuZF9sem9ybGUuYz05PXN0YXRpYyB2b2lkIGx6b3JsZV9yZWxlYXNlX3BhcmFtcyhzdHJ1Y3QgemNvbXBfcGFyYW1zICpwYXJhbXMpXG4tLVxuZHJpdmVycy9ibG9jay96cmFtL2JhY2tlbmRfbHpvcmxlLmMtMTItXG5kcml2ZXJzL2Jsb2NrL3pyYW0vYmFja2VuZF9sem9ybGUuYzoxMzpzdGF0aWMgaW50IGx6b3JsZV9zZXR1cF9wYXJhbXMoc3RydWN0IHpjb21wX3BhcmFtcyAqcGFyYW1zKVxuZHJpdmVycy9ibG9jay96cmFtL2JhY2tlbmRfbHpvcmxlLmMtMTQte1xuLS1cbmRyaXZlcnMvYmxvY2svenJhbS9iYWNrZW5kX2x6b3JsZS5jPTUxPWNvbnN0IHN0cnVjdCB6Y29tcF9vcHMgYmFja2VuZF9sem9ybGUgPSB7XG4tLVxuZHJpdmVycy9ibG9jay96cmFtL2JhY2tlbmRfbHpvcmxlLmMtNTUtXHQuZGVzdHJveV9jdHhcdD0gbHpvcmxlX2Rlc3Ryb3ksXG5kcml2ZXJzL2Jsb2NrL3pyYW0vYmFja2VuZF9sem9ybGUuYzo1NjpcdC5zZXR1cF9wYXJhbXNcdD0gbHpvcmxlX3NldHVwX3BhcmFtcyxcbmRyaXZlcnMvYmxvY2svenJhbS9iYWNrZW5kX2x6b3JsZS5jLTU3LVx0LnJlbGVhc2VfcGFyYW1zXHQ9IGx6b3JsZV9yZWxlYXNlX3BhcmFtcyxcbi0tXG5kcml2ZXJzL2Jsb2NrL3pyYW0vYmFja2VuZF96c3RkLmM9Mzg9c3RhdGljIHZvaWQgenN0ZF9yZWxlYXNlX3BhcmFtcyhzdHJ1Y3QgemNvbXBfcGFyYW1zICpwYXJhbXMpXG4tLVxuZHJpdmVycy9ibG9jay96cmFtL2JhY2tlbmRfenN0ZC5jLTUwLVxuZHJpdmVycy9ibG9jay96cmFtL2JhY2tlbmRfenN0ZC5jOjUxOnN0YXRpYyBpbnQgenN0ZF9zZXR1cF9wYXJhbXMoc3RydWN0IHpjb21wX3BhcmFtcyAqcGFyYW1zKVxuZHJpdmVycy9ibG9jay96cmFtL2JhY2tlbmRfenN0ZC5jLTUyLXtcbi0tXG5kcml2ZXJzL2Jsb2NrL3pyYW0vYmFja2VuZF96c3RkLmM9MjA5PWNvbnN0IHN0cnVjdCB6Y29tcF9vcHMgYmFja2VuZF96c3RkID0ge1xuLS1cbmRyaXZlcnMvYmxvY2svenJhbS9iYWNrZW5kX3pzdGQuYy0yMTMtXHQuZGVzdHJveV9jdHhcdD0genN0ZF9kZXN0cm95LFxuZHJpdmVycy9ibG9jay96cmFtL2JhY2tlbmRfenN0ZC5jOjIxNDpcdC5zZXR1cF9wYXJhbXNcdD0genN0ZF9zZXR1cF9wYXJhbXMsXG5kcml2ZXJzL2Jsb2NrL3pyYW0vYmFja2VuZF96c3RkLmMtMjE1LVx0LnJlbGVhc2VfcGFyYW1zXHQ9IHpzdGRfcmVsZWFzZV9wYXJhbXMsXG4tLVxuZHJpdmVycy9ibG9jay96cmFtL3pjb21wLmM9MTk3PXN0YXRpYyBpbnQgemNvbXBfaW5pdChzdHJ1Y3QgemNvbXAgKmNvbXAsIHN0cnVjdCB6Y29tcF9wYXJhbXMgKnBhcmFtcylcbi0tXG5kcml2ZXJzL2Jsb2NrL3pyYW0vemNvbXAuYy0yMDUtXHRjb21wLVx1MDAzZXBhcmFtcyA9IHBhcmFtcztcbmRyaXZlcnMvYmxvY2svenJhbS96Y29tcC5jOjIwNjpcdHJldCA9IGNvbXAtXHUwMDNlb3BzLVx1MDAzZXNldHVwX3BhcmFtcyhjb21wLVx1MDAzZXBhcmFtcyk7XG5kcml2ZXJzL2Jsb2NrL3pyYW0vemNvbXAuYy0yMDctXHRpZiAocmV0KVxuLS1cbmRyaXZlcnMvYmxvY2svenJhbS96Y29tcC5oPTU3PXN0cnVjdCB6Y29tcF9vcHMge1xuLS1cbmRyaXZlcnMvYmxvY2svenJhbS96Y29tcC5oLTY1LVxuZHJpdmVycy9ibG9jay96cmFtL3pjb21wLmg6NjY6XHRpbnQgKCpzZXR1cF9wYXJhbXMpKHN0cnVjdCB6Y29tcF9wYXJhbXMgKnBhcmFtcyk7XG5kcml2ZXJzL2Jsb2NrL3pyYW0vemNvbXAuaC02Ny1cdHZvaWQgKCpyZWxlYXNlX3BhcmFtcykoc3RydWN0IHpjb21wX3BhcmFtcyAqcGFyYW1zKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMCAxMDowMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA2MTc4CgkJCQkJCQlvdXRwdXQ6IDMxCgkJCQkJCQl0aG91Z2h0czogMzEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBJIHdlcmUgYW5hbHl6aW5nIHRoaXMgY29kZToKCioqRGl2aW5nIGludG8gdGhlIEluaXRpYWxpemF0aW9uKioKCk9rYXksIHNvIGB6Y29tcF9pbml0YCBpcyB0aGUgZW50cnkgcG9pbnQsIG5hdHVyYWxseS4gSXQgY2FsbHMgYGNvbXAtJmd0O29wcy0mZ3Q7c2V0dXBfcGFyYW1zYCwgd2hpY2ggaXMgd2hlcmUgdGhlIHJlYWwgY29uZmlndXJhdGlvbiBwcm9iYWJseSBoYXBwZW5zLiBNeSBmaXJzdCB0aG91Z2h0IGlzOiBJIG5lZWQgdG8gdHJhY2UgYmFjayBmcm9tIHRoaXMgZnVuY3Rpb24gY2FsbC4gVW5kZXJzdGFuZGluZyB0aGUgaW5pdGlhbGl6YXRpb24gc2VxdWVuY2UgaXMgY3J1Y2lhbCB0byB1bmRlcnN0YW5kaW5nIHRoZSBzeXN0ZW0mIzM5O3Mgb3ZlcmFsbCBiZWhhdmlvci4gU28sIG15IG5leHQgbG9naWNhbCBzdGVwIGlzIHRvIHNlZSBleGFjdGx5ICp3aGVyZSogYHpjb21wX2luaXRgIGdldHMgY2FsbGVkLiBUaGF0IHdpbGwgcHJvdmlkZSBjcml0aWNhbCBjb250ZXh0OiBXaGF0IHRyaWdnZXJzIHRoZSBpbml0aWFsaXphdGlvbiwgYW5kIGhvdyB0aGUgc3Vycm91bmRpbmcgZW52aXJvbm1lbnQgaXMgc2V0IHVwLiBLbm93aW5nIHRoZSBjYWxsZXIgZnVuY3Rpb24ocykgZ2l2ZXMgbWUgYSBjcml0aWNhbCB1bmRlcnN0YW5kaW5nIG9mIHRoZSBpbml0aWFsaXphdGlvbiBmbG93LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMCAxMDowMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt6Y29tcF9pbml0JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9ibG9jay96cmFtLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL2Jsb2NrL3pyYW0vemNvbXAuYz0xODY9aW50IHpjb21wX2NwdV9kZWFkKHVuc2lnbmVkIGludCBjcHUsIHN0cnVjdCBobGlzdF9ub2RlICpub2RlKVxuLS1cbmRyaXZlcnMvYmxvY2svenJhbS96Y29tcC5jLTE5Ni1cbmRyaXZlcnMvYmxvY2svenJhbS96Y29tcC5jOjE5NzpzdGF0aWMgaW50IHpjb21wX2luaXQoc3RydWN0IHpjb21wICpjb21wLCBzdHJ1Y3QgemNvbXBfcGFyYW1zICpwYXJhbXMpXG5kcml2ZXJzL2Jsb2NrL3pyYW0vemNvbXAuYy0xOTgte1xuLS1cbmRyaXZlcnMvYmxvY2svenJhbS96Y29tcC5jPTIzMz1zdHJ1Y3QgemNvbXAgKnpjb21wX2NyZWF0ZShjb25zdCBjaGFyICphbGcsIHN0cnVjdCB6Y29tcF9wYXJhbXMgKnBhcmFtcylcbi0tXG5kcml2ZXJzL2Jsb2NrL3pyYW0vemNvbXAuYy0yNTUtXG5kcml2ZXJzL2Jsb2NrL3pyYW0vemNvbXAuYzoyNTY6XHRlcnJvciA9IHpjb21wX2luaXQoY29tcCwgcGFyYW1zKTtcbmRyaXZlcnMvYmxvY2svenJhbS96Y29tcC5jLTI1Ny1cdGlmIChlcnJvcikge1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMCAxMDowMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA2NjI1CgkJCQkJCQlvdXRwdXQ6IDMxCgkJCQkJCQl0aG91Z2h0czogMjgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIGFzc3VtaW5nIEkmIzM5O20gYW4gZXhwZXJ0IGluIHRoaXMgZmllbGQsIHByZXNlbnRlZCBhcyBhIGZpcnN0LXBlcnNvbiBzdW1tYXJ5OgoKKipEaWdnaW5nIGludG8gdGhlIGB6Y29tcF9jcmVhdGVgIEZ1bmN0aW9uKioKClJpZ2h0LCBgemNvbXBfY3JlYXRlYCBraWNrcyBvZmYgYnkgY2FsbGluZyBgemNvbXBfaW5pdGAuIE1ha2VzIHNlbnNlIOKAkyBpbml0aWFsaXphdGlvbiB1c3VhbGx5IGNvbWVzIGZpcnN0LiBOb3csIHRoZSByZWFsIHF1ZXN0aW9uIGlzLCB3aG8gKnVzZXMqIGB6Y29tcF9jcmVhdGVgPyBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgY29udGV4dCBvZiBpdHMgY2FsbHMgdG8gZnVsbHkgZ3Jhc3AgaXRzIHJvbGUgYW5kIHBvdGVudGlhbCBpbXBhY3QuIFNvLCB0aW1lIHRvIHRyYWNlIHRob3NlIGNhbGxzIGFuZCBzZWUgd2hlcmUgdGhpcyB0aGluZyBpcyBhY3R1YWxseSBiZWluZyBpbnZva2VkLiBMZXQmIzM5O3Mgc2VlIHdoYXQgdGhlIGNhbGwgc3RhY2sgcmV2ZWFscy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzAgMTA6MDA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7emNvbXBfY3JlYXRlJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9ibG9jay96cmFtLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL2Jsb2NrL3pyYW0vemNvbXAuYz0yMjU9dm9pZCB6Y29tcF9kZXN0cm95KHN0cnVjdCB6Y29tcCAqY29tcClcbi0tXG5kcml2ZXJzL2Jsb2NrL3pyYW0vemNvbXAuYy0yMzItXG5kcml2ZXJzL2Jsb2NrL3pyYW0vemNvbXAuYzoyMzM6c3RydWN0IHpjb21wICp6Y29tcF9jcmVhdGUoY29uc3QgY2hhciAqYWxnLCBzdHJ1Y3QgemNvbXBfcGFyYW1zICpwYXJhbXMpXG5kcml2ZXJzL2Jsb2NrL3pyYW0vemNvbXAuYy0yMzQte1xuLS1cbmRyaXZlcnMvYmxvY2svenJhbS96Y29tcC5oPTgzPWNvbnN0IGNoYXIgKnpjb21wX2xvb2t1cF9iYWNrZW5kX25hbWUoY29uc3QgY2hhciAqY29tcCk7XG5kcml2ZXJzL2Jsb2NrL3pyYW0vemNvbXAuaC04NC1cbmRyaXZlcnMvYmxvY2svenJhbS96Y29tcC5oOjg1OnN0cnVjdCB6Y29tcCAqemNvbXBfY3JlYXRlKGNvbnN0IGNoYXIgKmFsZywgc3RydWN0IHpjb21wX3BhcmFtcyAqcGFyYW1zKTtcbmRyaXZlcnMvYmxvY2svenJhbS96Y29tcC5oLTg2LXZvaWQgemNvbXBfZGVzdHJveShzdHJ1Y3QgemNvbXAgKmNvbXApO1xuLS1cbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jPTI4NTk9c3RhdGljIHNzaXplX3QgZGlza3NpemVfc3RvcmUoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0cixcbi0tXG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYy0yODg1LVxuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmM6Mjg4NjpcdFx0Y29tcCA9IHpjb21wX2NyZWF0ZSh6cmFtLVx1MDAzZWNvbXBfYWxnc1twcmlvXSxcbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jLTI4ODctXHRcdFx0XHQgICAgXHUwMDI2enJhbS1cdTAwM2VwYXJhbXNbcHJpb10pO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMCAxMDowMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA3MTg3CgkJCQkJCQlvdXRwdXQ6IDMwCgkJCQkJCQl0aG91Z2h0czogMjAwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFuYWx5c2lzIG9mIHRoZSB6cmFtIERyaXZlciYjMzk7cyBDb21wcmVzc2lvbiBMb2dpYyoqCgpPa2F5LCBzbyBoZXJlJiMzOTtzIHdoYXQgSSYjMzk7dmUgZ290IGluIG15IGhlYWQ6IGB6Y29tcF9jcmVhdGVgIGlzIGJlaW5nIGNhbGxlZCB3aXRoaW4gdGhlIGBkaXNrc2l6ZV9zdG9yZWAgZnVuY3Rpb24uIFRoYXQmIzM5O3MgdGhlIGVudHJ5IHBvaW50LCByaWdodD8gU28gYGRpc2tzaXplX3N0b3JlYCBraWNrcyBvZmYgYHpjb21wX2NyZWF0ZWAsIHdoaWNoIHRoZW4gY2FsbHMgYHpjb21wX2luaXRgLCB3aGljaCBpbiB0dXJuIGxlYWRzIHRvIGBzZXR1cF9wYXJhbXNgLCBhbmQgZmluYWxseSB0byBgZGVmbGF0ZV9zZXR1cF9wYXJhbXNgIGlmIHRoZSBjb21wcmVzc2lvbiBhbGdvcml0aG0gaXMsIHdlbGwsIGRlZmxhdGUuIEFuZCwganVzdCB0byBiZSBjbGVhciwgYGRpc2tzaXplX3N0b3JlYCBpcyBhIHN5c2ZzIHN0b3JlIGZ1bmN0aW9uLiAKCk5vdywgY2FuIHRoaXMgd2hvbGUgY2hhaW4gb2YgZXZlbnRzIGFjdHVhbGx5IGhhcHBlbiBpbiBhIHZpcnR1YWxpemVkIGVudmlyb25tZW50PyBBYnNvbHV0ZWx5LiBacmFtIGlzIGEgYmxvY2sgZGV2aWNlIGFuZCBpdHMgc3lzZnMgYXR0cmlidXRlcyBhcmUgYWNjZXNzaWJsZSwgc28gdGhhdCYjMzk7cyBhIGRlZmluaXRlICYjMzQ7eWVzLiYjMzQ7CgpUaGUgY3JpdGljYWwgcXVlc3Rpb24gbm93IGlzLCBpcyB0aGlzIHNvbWV0aGluZyB3b3J0aCBkZWRpY2F0aW5nIHRpbWUgdG8gZnV6emluZz8gQWJzb2x1dGVseSwgd2l0aG91dCBhIGRvdWJ0LiBXZSYjMzk7cmUgdGFsa2luZyBhYm91dCBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSB6cmFtIGRyaXZlci4gVGhlcmUmIzM5O3MgdmFsaWRhdGlvbiBiZWluZyBhZGRlZCBmb3IgdGhlIGB3aW5iaXRzYCBwYXJhbWV0ZXIsIGFuZCBzb21lIGNvZGUgaXMgYmVpbmcgbW92ZWQgYXJvdW5kIGNvbmNlcm5pbmcgYGNvbXBfYWxnb3JpdGhtX3NldGAuIFRoYXQmIzM5O3MgYSB0YXJnZXQtcmljaCBlbnZpcm9ubWVudC4KClNwZWNpZmljYWxseSwgdGhlIGBkZWZsYXRlX3NldHVwX3BhcmFtc2AgZnVuY3Rpb24gaXMgcmVhY2hlZCB3aGVuIHdlIGFyZSBzZXR0aW5nIHVwIGRlZmxhdGUgY29tcHJlc3Npb24gZm9yIHRoZSB6cmFtIGRldmljZS4gQWxzbywgdGhlIGB6cmFtX2Rlc3Ryb3lfY29tcHNgIGlzIHJlYWNoYWJsZSB3aGVuIHJlc2V0dGluZyB0aGUgZGV2aWNlIG9yIGVuY291bnRlcmluZyBhbiBlcnJvciBpbiB0aGUgYGRpc2tzaXplX3N0b3JlYCBmdW5jdGlvbi4KCk5vdywgSSBzaG91bGQgcXVpY2tseSBjaGVjayB0aGUgcmVxdWlyZWQgY29uZmlndXJhdGlvbnMgZm9yIHpyYW0uIExldCYjMzk7cyBzZWUgd2hhdCYjMzk7cyBuZWVkZWQgZm9yIHRoZSBmdWxsIHBpY3R1cmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMwIDEwOjAwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBaUkFNJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9ibG9jay96cmFtLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL2Jsb2NrL3pyYW0vS2NvbmZpZy0xLSMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjBcbmRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnOjI6Y29uZmlnIFpSQU1cbmRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnLTMtXHR0cmlzdGF0ZSBcJiMzNDtDb21wcmVzc2VkIFJBTSBibG9jayBkZXZpY2Ugc3VwcG9ydFwmIzM0O1xuLS1cbmRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnLTE2LVxuZHJpdmVycy9ibG9jay96cmFtL0tjb25maWc6MTc6Y29uZmlnIFpSQU1fQkFDS0VORF9MWjRcbmRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnLTE4LVx0Ym9vbCBcJiMzNDtsejQgY29tcHJlc3Npb24gc3VwcG9ydFwmIzM0O1xuLS1cbmRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnLTIyLVxuZHJpdmVycy9ibG9jay96cmFtL0tjb25maWc6MjM6Y29uZmlnIFpSQU1fQkFDS0VORF9MWjRIQ1xuZHJpdmVycy9ibG9jay96cmFtL0tjb25maWctMjQtXHRib29sIFwmIzM0O2x6NGhjIGNvbXByZXNzaW9uIHN1cHBvcnRcJiMzNDtcbi0tXG5kcml2ZXJzL2Jsb2NrL3pyYW0vS2NvbmZpZy0yOC1cbmRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnOjI5OmNvbmZpZyBaUkFNX0JBQ0tFTkRfWlNURFxuZHJpdmVycy9ibG9jay96cmFtL0tjb25maWctMzAtXHRib29sIFwmIzM0O3pzdGQgY29tcHJlc3Npb24gc3VwcG9ydFwmIzM0O1xuLS1cbmRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnLTM0LVxuZHJpdmVycy9ibG9jay96cmFtL0tjb25maWc6MzU6Y29uZmlnIFpSQU1fQkFDS0VORF9ERUZMQVRFXG5kcml2ZXJzL2Jsb2NrL3pyYW0vS2NvbmZpZy0zNi1cdGJvb2wgXCYjMzQ7ZGVmbGF0ZSBjb21wcmVzc2lvbiBzdXBwb3J0XCYjMzQ7XG4tLVxuZHJpdmVycy9ibG9jay96cmFtL0tjb25maWctNDAtXG5kcml2ZXJzL2Jsb2NrL3pyYW0vS2NvbmZpZzo0MTpjb25maWcgWlJBTV9CQUNLRU5EXzg0MlxuZHJpdmVycy9ibG9jay96cmFtL0tjb25maWctNDItXHRib29sIFwmIzM0Ozg0MiBjb21wcmVzc2lvbiBzdXBwb3J0XCYjMzQ7XG4tLVxuZHJpdmVycy9ibG9jay96cmFtL0tjb25maWctNDYtXG5kcml2ZXJzL2Jsb2NrL3pyYW0vS2NvbmZpZzo0Nzpjb25maWcgWlJBTV9CQUNLRU5EX0ZPUkNFX0xaT1xuZHJpdmVycy9ibG9jay96cmFtL0tjb25maWctNDgtXHRkZXBlbmRzIG9uIFpSQU1cbi0tXG5kcml2ZXJzL2Jsb2NrL3pyYW0vS2NvbmZpZy01Mi1cbmRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnOjUzOmNvbmZpZyBaUkFNX0JBQ0tFTkRfTFpPXG5kcml2ZXJzL2Jsb2NrL3pyYW0vS2NvbmZpZy01NC1cdGJvb2wgXCYjMzQ7bHpvIGFuZCBsem8tcmxlIGNvbXByZXNzaW9uIHN1cHBvcnRcJiMzNDsgaWYgIVpSQU1fQkFDS0VORF9GT1JDRV9MWk9cbi0tXG5kcml2ZXJzL2Jsb2NrL3pyYW0vS2NvbmZpZz02MD1jaG9pY2Vcbi0tXG5kcml2ZXJzL2Jsb2NrL3pyYW0vS2NvbmZpZy02NC1cbmRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnOjY1OmNvbmZpZyBaUkFNX0RFRl9DT01QX0xaT1JMRVxuZHJpdmVycy9ibG9jay96cmFtL0tjb25maWctNjYtXHRib29sIFwmIzM0O2x6by1ybGVcJiMzNDtcbi0tXG5kcml2ZXJzL2Jsb2NrL3pyYW0vS2NvbmZpZy02OC1cbmRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnOjY5OmNvbmZpZyBaUkFNX0RFRl9DT01QX0xaT1xuZHJpdmVycy9ibG9jay96cmFtL0tjb25maWctNzAtXHRib29sIFwmIzM0O2x6b1wmIzM0O1xuLS1cbmRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnLTcyLVxuZHJpdmVycy9ibG9jay96cmFtL0tjb25maWc6NzM6Y29uZmlnIFpSQU1fREVGX0NPTVBfTFo0XG5kcml2ZXJzL2Jsb2NrL3pyYW0vS2NvbmZpZy03NC1cdGJvb2wgXCYjMzQ7bHo0XCYjMzQ7XG4tLVxuZHJpdmVycy9ibG9jay96cmFtL0tjb25maWctNzYtXG5kcml2ZXJzL2Jsb2NrL3pyYW0vS2NvbmZpZzo3Nzpjb25maWcgWlJBTV9ERUZfQ09NUF9MWjRIQ1xuZHJpdmVycy9ibG9jay96cmFtL0tjb25maWctNzgtXHRib29sIFwmIzM0O2x6NGhjXCYjMzQ7XG4tLVxuZHJpdmVycy9ibG9jay96cmFtL0tjb25maWctODAtXG5kcml2ZXJzL2Jsb2NrL3pyYW0vS2NvbmZpZzo4MTpjb25maWcgWlJBTV9ERUZfQ09NUF9aU1REXG5kcml2ZXJzL2Jsb2NrL3pyYW0vS2NvbmZpZy04Mi1cdGJvb2wgXCYjMzQ7enN0ZFwmIzM0O1xuLS1cbmRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnLTg0LVxuZHJpdmVycy9ibG9jay96cmFtL0tjb25maWc6ODU6Y29uZmlnIFpSQU1fREVGX0NPTVBfREVGTEFURVxuZHJpdmVycy9ibG9jay96cmFtL0tjb25maWctODYtXHRib29sIFwmIzM0O2RlZmxhdGVcJiMzNDtcbi0tXG5kcml2ZXJzL2Jsb2NrL3pyYW0vS2NvbmZpZy04OC1cbmRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnOjg5OmNvbmZpZyBaUkFNX0RFRl9DT01QXzg0MlxuZHJpdmVycy9ibG9jay96cmFtL0tjb25maWctOTAtXHRib29sIFwmIzM0Ozg0MlwmIzM0O1xuLS1cbmRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnPTkzPWVuZGNob2ljZVxuZHJpdmVycy9ibG9jay96cmFtL0tjb25maWctOTQtXG5kcml2ZXJzL2Jsb2NrL3pyYW0vS2NvbmZpZzo5NTpjb25maWcgWlJBTV9ERUZfQ09NUFxuZHJpdmVycy9ibG9jay96cmFtL0tjb25maWctOTYtXHRzdHJpbmdcbi0tXG5kcml2ZXJzL2Jsb2NrL3pyYW0vS2NvbmZpZy0xMDYtXG5kcml2ZXJzL2Jsb2NrL3pyYW0vS2NvbmZpZzoxMDc6Y29uZmlnIFpSQU1fV1JJVEVCQUNLXG5kcml2ZXJzL2Jsb2NrL3pyYW0vS2NvbmZpZy0xMDgtICAgICAgIGJvb2wgXCYjMzQ7V3JpdGUgYmFjayBpbmNvbXByZXNzaWJsZSBvciBpZGxlIHBhZ2UgdG8gYmFja2luZyBkZXZpY2VcJiMzNDtcbi0tXG5kcml2ZXJzL2Jsb2NrL3pyYW0vS2NvbmZpZy0xMjAtXG5kcml2ZXJzL2Jsb2NrL3pyYW0vS2NvbmZpZzoxMjE6Y29uZmlnIFpSQU1fVFJBQ0tfRU5UUllfQUNUSU1FXG5kcml2ZXJzL2Jsb2NrL3pyYW0vS2NvbmZpZy0xMjItXHRib29sIFwmIzM0O1RyYWNrIGFjY2VzcyB0aW1lIG9mIHpyYW0gZW50cmllc1wmIzM0O1xuLS1cbmRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnLTEyOC1cbmRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnOjEyOTpjb25maWcgWlJBTV9NRU1PUllfVFJBQ0tJTkdcbmRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnLTEzMC1cdGJvb2wgXCYjMzQ7VHJhY2sgelJhbSBibG9jayBzdGF0dXNcJiMzNDtcbi0tXG5kcml2ZXJzL2Jsb2NrL3pyYW0vS2NvbmZpZy0xMzktXG5kcml2ZXJzL2Jsb2NrL3pyYW0vS2NvbmZpZzoxNDA6Y29uZmlnIFpSQU1fTVVMVElfQ09NUFxuZHJpdmVycy9ibG9jay96cmFtL0tjb25maWctMTQxLVx0Ym9vbCBcJiMzNDtFbmFibGUgbXVsdGlwbGUgY29tcHJlc3Npb24gc3RyZWFtc1wmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMCAxMDowMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA5MDU0CgkJCQkJCQlvdXRwdXQ6IDMxCgkJCQkJCQl0aG91Z2h0czogMjkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIGFuIGV4cGVydCYjMzk7cyBpbnRlcm5hbCBtb25vbG9ndWU6CgoqKlpSQU0gJmFtcDsgRGVmbGF0ZTogSW5pdGlhbCBBc3Nlc3NtZW50KioKCkFscmlnaHQsIHRoZSBjb3JlIHJlcXVpcmVtZW50IGhlcmUgaXMgY2xlYXI6IGBaUkFNYCBhbmQgdGhlIGBaUkFNX0JBQ0tFTkRfREVGTEFURWAgYmFja2VuZCBhcmUgdGhlIGZvY3VzLiBNeSBtaW5kIGltbWVkaWF0ZWx5IGp1bXBzIHRvIGEgbWVudGFsIGNoZWNrbGlzdC4gV2UmIzM5O3JlIGdvaW5nIHRvIHVzZSB6cmFtIGFzIGEgYmxvY2sgZGV2aWNlLiBJIG5lZWQgdG8gbWFrZSBzdXJlIHRoaXMgaXMgaW5zdGFsbGVkIGFuZCBjb25maWd1cmVkIGNvcnJlY3RseS4gCgpNeSBpbW1lZGlhdGUgYWN0aW9uIGlzIHRvIGRlbHZlIGludG8gdGhlIGRlcGVuZGVuY2llcyBvZiBgWlJBTWAuIFdoYXQgb3RoZXIga2VybmVsIG1vZHVsZXMgb3IgdXNlci1zcGFjZSB1dGlsaXRpZXMgZG9lcyBpdCByZWx5IG9uPyBBcmUgdGhlcmUgYW55IHNwZWNpZmljIHZlcnNpb25zIEkgbmVlZCB0byBiZSBhd2FyZSBvZiB0byBlbnN1cmUgY29tcGF0aWJpbGl0eSwgZXNwZWNpYWxseSB3aXRoIHRoZSBgREVGTEFURWAgYmFja2VuZD8gVGhlIGNob2ljZSBvZiBjb21wcmVzc2lvbiBhbGdvcml0aG0gaXMgaW1wb3J0YW50IGZvciBiYWxhbmNlIGJldHdlZW4gQ1BVIGxvYWQgYW5kIGRpc2sgSU8uIEFyZSB0aGVyZSBhbnkga25vd24gaXNzdWVzIHdpdGggdGhhdCBzcGVjaWZpYyBiYWNrZW5kPyBXZSBzaG91bGQgbG9vayBhdCBhbnkgcG90ZW50aWFsIGltcGFjdHMgb24gc3lzdGVtIHBlcmZvcm1hbmNlIHVuZGVyIGxvYWQuIFdlIG11c3QgbG9vayBhdCB0aGUgb3ZlcmFsbCBzeXN0ZW0gbWVtb3J5IGNvbmZpZ3VyYXRpb24gdG8gZW5zdXJlIGl0cyBvcHRpbWFsIHBlcmZvcm1hbmNlLiBUaGlzIGlzIGFsbCBzdGFuZGFyZCBpbml0aWFsIGR1ZSBkaWxpZ2VuY2UsIGJ1dCBjcnVjaWFsIHRvIGF2b2lkIGxhdGVyIGhlYWRhY2hlcy4gVGhpcyBzZWVtcyBsaWtlIGEgcmVhc29uYWJsZSBzdGFydGluZyBwb2ludC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzAgMTA6MDA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7ZGVwZW5kcyBvbiYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnPTI9Y29uZmlnIFpSQU1cbmRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnLTMtXHR0cmlzdGF0ZSBcJiMzNDtDb21wcmVzc2VkIFJBTSBibG9jayBkZXZpY2Ugc3VwcG9ydFwmIzM0O1xuZHJpdmVycy9ibG9jay96cmFtL0tjb25maWc6NDpcdGRlcGVuZHMgb24gQkxPQ0sgXHUwMDI2XHUwMDI2IFNZU0ZTIFx1MDAyNlx1MDAyNiBNTVVcbmRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnLTUtXHRzZWxlY3QgWlNNQUxMT0Ncbi0tXG5kcml2ZXJzL2Jsb2NrL3pyYW0vS2NvbmZpZz0xNz1jb25maWcgWlJBTV9CQUNLRU5EX0xaNFxuZHJpdmVycy9ibG9jay96cmFtL0tjb25maWctMTgtXHRib29sIFwmIzM0O2x6NCBjb21wcmVzc2lvbiBzdXBwb3J0XCYjMzQ7XG5kcml2ZXJzL2Jsb2NrL3pyYW0vS2NvbmZpZzoxOTpcdGRlcGVuZHMgb24gWlJBTVxuZHJpdmVycy9ibG9jay96cmFtL0tjb25maWctMjAtXHRzZWxlY3QgTFo0X0NPTVBSRVNTXG4tLVxuZHJpdmVycy9ibG9jay96cmFtL0tjb25maWc9MjM9Y29uZmlnIFpSQU1fQkFDS0VORF9MWjRIQ1xuZHJpdmVycy9ibG9jay96cmFtL0tjb25maWctMjQtXHRib29sIFwmIzM0O2x6NGhjIGNvbXByZXNzaW9uIHN1cHBvcnRcJiMzNDtcbmRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnOjI1Olx0ZGVwZW5kcyBvbiBaUkFNXG5kcml2ZXJzL2Jsb2NrL3pyYW0vS2NvbmZpZy0yNi1cdHNlbGVjdCBMWjRIQ19DT01QUkVTU1xuLS1cbmRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnPTI5PWNvbmZpZyBaUkFNX0JBQ0tFTkRfWlNURFxuZHJpdmVycy9ibG9jay96cmFtL0tjb25maWctMzAtXHRib29sIFwmIzM0O3pzdGQgY29tcHJlc3Npb24gc3VwcG9ydFwmIzM0O1xuZHJpdmVycy9ibG9jay96cmFtL0tjb25maWc6MzE6XHRkZXBlbmRzIG9uIFpSQU1cbmRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnLTMyLVx0c2VsZWN0IFpTVERfQ09NUFJFU1Ncbi0tXG5kcml2ZXJzL2Jsb2NrL3pyYW0vS2NvbmZpZz0zNT1jb25maWcgWlJBTV9CQUNLRU5EX0RFRkxBVEVcbmRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnLTM2LVx0Ym9vbCBcJiMzNDtkZWZsYXRlIGNvbXByZXNzaW9uIHN1cHBvcnRcJiMzNDtcbmRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnOjM3Olx0ZGVwZW5kcyBvbiBaUkFNXG5kcml2ZXJzL2Jsb2NrL3pyYW0vS2NvbmZpZy0zOC1cdHNlbGVjdCBaTElCX0RFRkxBVEVcbi0tXG5kcml2ZXJzL2Jsb2NrL3pyYW0vS2NvbmZpZz00MT1jb25maWcgWlJBTV9CQUNLRU5EXzg0MlxuZHJpdmVycy9ibG9jay96cmFtL0tjb25maWctNDItXHRib29sIFwmIzM0Ozg0MiBjb21wcmVzc2lvbiBzdXBwb3J0XCYjMzQ7XG5kcml2ZXJzL2Jsb2NrL3pyYW0vS2NvbmZpZzo0MzpcdGRlcGVuZHMgb24gWlJBTVxuZHJpdmVycy9ibG9jay96cmFtL0tjb25maWctNDQtXHRzZWxlY3QgODQyX0NPTVBSRVNTXG4tLVxuZHJpdmVycy9ibG9jay96cmFtL0tjb25maWc9NDc9Y29uZmlnIFpSQU1fQkFDS0VORF9GT1JDRV9MWk9cbmRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnOjQ4Olx0ZGVwZW5kcyBvbiBaUkFNXG5kcml2ZXJzL2Jsb2NrL3pyYW0vS2NvbmZpZy00OS1cdGRlZl9ib29sICFaUkFNX0JBQ0tFTkRfTFo0IFx1MDAyNlx1MDAyNiAhWlJBTV9CQUNLRU5EX0xaNEhDIFx1MDAyNlx1MDAyNiBcXFxuLS1cbmRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnPTUzPWNvbmZpZyBaUkFNX0JBQ0tFTkRfTFpPXG5kcml2ZXJzL2Jsb2NrL3pyYW0vS2NvbmZpZy01NC1cdGJvb2wgXCYjMzQ7bHpvIGFuZCBsem8tcmxlIGNvbXByZXNzaW9uIHN1cHBvcnRcJiMzNDsgaWYgIVpSQU1fQkFDS0VORF9GT1JDRV9MWk9cbmRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnOjU1Olx0ZGVwZW5kcyBvbiBaUkFNXG5kcml2ZXJzL2Jsb2NrL3pyYW0vS2NvbmZpZy01Ni1cdGRlZmF1bHQgWlJBTV9CQUNLRU5EX0ZPUkNFX0xaT1xuLS1cbmRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnPTYwPWNob2ljZVxuLS1cbmRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnLTYyLVx0ZGVmYXVsdCBaUkFNX0RFRl9DT01QX0xaT1JMRVxuZHJpdmVycy9ibG9jay96cmFtL0tjb25maWc6NjM6XHRkZXBlbmRzIG9uIFpSQU1cbmRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnLTY0LVxuZHJpdmVycy9ibG9jay96cmFtL0tjb25maWc9NjU9Y29uZmlnIFpSQU1fREVGX0NPTVBfTFpPUkxFXG5kcml2ZXJzL2Jsb2NrL3pyYW0vS2NvbmZpZy02Ni1cdGJvb2wgXCYjMzQ7bHpvLXJsZVwmIzM0O1xuZHJpdmVycy9ibG9jay96cmFtL0tjb25maWc6Njc6XHRkZXBlbmRzIG9uIFpSQU1fQkFDS0VORF9MWk9cbmRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnLTY4LVxuZHJpdmVycy9ibG9jay96cmFtL0tjb25maWc9Njk9Y29uZmlnIFpSQU1fREVGX0NPTVBfTFpPXG5kcml2ZXJzL2Jsb2NrL3pyYW0vS2NvbmZpZy03MC1cdGJvb2wgXCYjMzQ7bHpvXCYjMzQ7XG5kcml2ZXJzL2Jsb2NrL3pyYW0vS2NvbmZpZzo3MTpcdGRlcGVuZHMgb24gWlJBTV9CQUNLRU5EX0xaT1xuZHJpdmVycy9ibG9jay96cmFtL0tjb25maWctNzItXG5kcml2ZXJzL2Jsb2NrL3pyYW0vS2NvbmZpZz03Mz1jb25maWcgWlJBTV9ERUZfQ09NUF9MWjRcbmRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnLTc0LVx0Ym9vbCBcJiMzNDtsejRcJiMzNDtcbmRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnOjc1Olx0ZGVwZW5kcyBvbiBaUkFNX0JBQ0tFTkRfTFo0XG5kcml2ZXJzL2Jsb2NrL3pyYW0vS2NvbmZpZy03Ni1cbmRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnPTc3PWNvbmZpZyBaUkFNX0RFRl9DT01QX0xaNEhDXG5kcml2ZXJzL2Jsb2NrL3pyYW0vS2NvbmZpZy03OC1cdGJvb2wgXCYjMzQ7bHo0aGNcJiMzNDtcbmRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnOjc5Olx0ZGVwZW5kcyBvbiBaUkFNX0JBQ0tFTkRfTFo0SENcbmRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnLTgwLVxuZHJpdmVycy9ibG9jay96cmFtL0tjb25maWc9ODE9Y29uZmlnIFpSQU1fREVGX0NPTVBfWlNURFxuZHJpdmVycy9ibG9jay96cmFtL0tjb25maWctODItXHRib29sIFwmIzM0O3pzdGRcJiMzNDtcbmRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnOjgzOlx0ZGVwZW5kcyBvbiBaUkFNX0JBQ0tFTkRfWlNURFxuZHJpdmVycy9ibG9jay96cmFtL0tjb25maWctODQtXG5kcml2ZXJzL2Jsb2NrL3pyYW0vS2NvbmZpZz04NT1jb25maWcgWlJBTV9ERUZfQ09NUF9ERUZMQVRFXG5kcml2ZXJzL2Jsb2NrL3pyYW0vS2NvbmZpZy04Ni1cdGJvb2wgXCYjMzQ7ZGVmbGF0ZVwmIzM0O1xuZHJpdmVycy9ibG9jay96cmFtL0tjb25maWc6ODc6XHRkZXBlbmRzIG9uIFpSQU1fQkFDS0VORF9ERUZMQVRFXG5kcml2ZXJzL2Jsb2NrL3pyYW0vS2NvbmZpZy04OC1cbmRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnPTg5PWNvbmZpZyBaUkFNX0RFRl9DT01QXzg0MlxuZHJpdmVycy9ibG9jay96cmFtL0tjb25maWctOTAtXHRib29sIFwmIzM0Ozg0MlwmIzM0O1xuZHJpdmVycy9ibG9jay96cmFtL0tjb25maWc6OTE6XHRkZXBlbmRzIG9uIFpSQU1fQkFDS0VORF84NDJcbmRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnLTkyLVxuLS1cbmRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnPTk1PWNvbmZpZyBaUkFNX0RFRl9DT01QXG5kcml2ZXJzL2Jsb2NrL3pyYW0vS2NvbmZpZy05Ni1cdHN0cmluZ1xuZHJpdmVycy9ibG9jay96cmFtL0tjb25maWc6OTc6XHRkZXBlbmRzIG9uIFpSQU1cbmRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnLTk4LVx0ZGVmYXVsdCBcJiMzNDtsem8tcmxlXCYjMzQ7IGlmIFpSQU1fREVGX0NPTVBfTFpPUkxFXG4tLVxuZHJpdmVycy9ibG9jay96cmFtL0tjb25maWc9MTA3PWNvbmZpZyBaUkFNX1dSSVRFQkFDS1xuZHJpdmVycy9ibG9jay96cmFtL0tjb25maWctMTA4LSAgICAgICBib29sIFwmIzM0O1dyaXRlIGJhY2sgaW5jb21wcmVzc2libGUgb3IgaWRsZSBwYWdlIHRvIGJhY2tpbmcgZGV2aWNlXCYjMzQ7XG5kcml2ZXJzL2Jsb2NrL3pyYW0vS2NvbmZpZzoxMDk6ICAgICAgIGRlcGVuZHMgb24gWlJBTVxuZHJpdmVycy9ibG9jay96cmFtL0tjb25maWctMTEwLSAgICAgICBoZWxwXG4tLVxuZHJpdmVycy9ibG9jay96cmFtL0tjb25maWc9MTIxPWNvbmZpZyBaUkFNX1RSQUNLX0VOVFJZX0FDVElNRVxuZHJpdmVycy9ibG9jay96cmFtL0tjb25maWctMTIyLVx0Ym9vbCBcJiMzNDtUcmFjayBhY2Nlc3MgdGltZSBvZiB6cmFtIGVudHJpZXNcJiMzNDtcbmRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnOjEyMzpcdGRlcGVuZHMgb24gWlJBTVxuZHJpdmVycy9ibG9jay96cmFtL0tjb25maWctMTI0LVx0aGVscFxuLS1cbmRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnPTEyOT1jb25maWcgWlJBTV9NRU1PUllfVFJBQ0tJTkdcbmRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnLTEzMC1cdGJvb2wgXCYjMzQ7VHJhY2sgelJhbSBibG9jayBzdGF0dXNcJiMzNDtcbmRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnOjEzMTpcdGRlcGVuZHMgb24gWlJBTSBcdTAwMjZcdTAwMjYgREVCVUdfRlNcbmRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnLTEzMi1cdHNlbGVjdCBaUkFNX1RSQUNLX0VOVFJZX0FDVElNRVxuLS1cbmRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnPTE0MD1jb25maWcgWlJBTV9NVUxUSV9DT01QXG5kcml2ZXJzL2Jsb2NrL3pyYW0vS2NvbmZpZy0xNDEtXHRib29sIFwmIzM0O0VuYWJsZSBtdWx0aXBsZSBjb21wcmVzc2lvbiBzdHJlYW1zXCYjMzQ7XG5kcml2ZXJzL2Jsb2NrL3pyYW0vS2NvbmZpZzoxNDI6XHRkZXBlbmRzIG9uIFpSQU1cbmRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnLTE0My1cdGhlbHBcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzAgMTA6MDA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTEyMDEKCQkJCQkJCW91dHB1dDogMzIKCQkJCQkJCXRob3VnaHRzOiAxMjYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBaUkFNIEltcGxlbWVudGF0aW9uKioKCk9rYXksIHNvIHdlJiMzOTtyZSBsb29raW5nIGF0IGludGVncmF0aW5nIGBaUkFNYCBhbmQgc3BlY2lmaWNhbGx5LCB0aGUgYFpSQU1fQkFDS0VORF9ERUZMQVRFYCBiYWNrZW5kLiBNeSBpbW1lZGlhdGUgY29uY2VybiBpcyBob3cgdGhlIGNvcmUgZnVuY3Rpb25zIGFyZSBiZWluZyBtb2RpZmllZCBhbmQgdXRpbGl6ZWQuIFNwZWNpZmljYWxseSwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIG1vZGlmaWNhdGlvbnMgdG8gYGRlZmxhdGVfc2V0dXBfcGFyYW1zYCBhbmQgYHpyYW1fZGVzdHJveV9jb21wc2AuIEkgc2VlIGBkZWZsYXRlX3NldHVwX3BhcmFtc2AgaXMgZGVjbGFyZWQgYXMgc3RhdGljLCBidXQgaXQmIzM5O3MgYXNzaWduZWQgdG8gYGJhY2tlbmRfZGVmbGF0ZS5zZXR1cF9wYXJhbXNgIOKAkyBJJiMzOTtsbCBuZWVkIHRvIGRvdWJsZS1jaGVjayB0aGF0IHRoaXMgaXMgc2FmZSBhbmQgbWFrZXMgc2Vuc2Ugd2l0aGluIHRoZSBvdmVyYWxsIGFyY2hpdGVjdHVyZS4KCk15IGZvY3VzIG5vdyBpcyBvbiBob3cgdGhlc2UgY2hhbmdlcyBhcmUgKnRyaWdnZXJlZCouIEkgc3VzcGVjdCBgZGlza3NpemVfc3RvcmVgIGlzIHRoZSBrZXkuIE15IGludHVpdGlvbiBpcyB0ZWxsaW5nIG1lIHRoYXQgaXQmIzM5O3MgdGhlIG9uZSB0aGF0IGNhbGxzIGB6Y29tcF9jcmVhdGVgIGFuZCwgYnkgYXNzb2NpYXRpb24sIHBvdGVudGlhbGx5IGB6cmFtX2Rlc3Ryb3lfY29tcHNgLiBJIHNob3VsZCB2ZXJpZnkgdGhhdC4gQWxzbywgYmFzZWQgb24gdGhlIGZ1bmN0aW9uIG5hbWVzLCBgY29tcF9hbGdvcml0aG1fc3RvcmVgICpjb3VsZCogYWxzbyB0cmlnZ2VyIGB6Y29tcF9jcmVhdGVgLiBUaGF0IG9uZSBJJiMzOTtsbCBuZWVkIHRvIGNoZWNrIGNhcmVmdWxseS4gTGV0JiMzOTtzIHN0YXJ0IGJ5IGxvb2tpbmcgY2xvc2VseSBhdCBgY29tcF9hbGdvcml0aG1fc3RvcmVgLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMCAxMDowMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb21wX2FsZ29yaXRobV9zdG9yZSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvYmxvY2svenJhbS8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmM9MTY1OT1zdGF0aWMgdm9pZCBjb21wX2FsZ29yaXRobV9zZXQoc3RydWN0IHpyYW0gKnpyYW0sIHUzMiBwcmlvLCBjb25zdCBjaGFyICphbGcpXG4tLVxuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmMtMTY2My1cbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jOjE2NjQ6c3RhdGljIGludCBfX2NvbXBfYWxnb3JpdGhtX3N0b3JlKHN0cnVjdCB6cmFtICp6cmFtLCB1MzIgcHJpbywgY29uc3QgY2hhciAqYnVmKVxuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmMtMTY2NS17XG4tLVxuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmM9MTgwMT1zdGF0aWMgc3NpemVfdCBjb21wX2FsZ29yaXRobV9zaG93KHN0cnVjdCBkZXZpY2UgKmRldixcbi0tXG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYy0xODEyLVxuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmM6MTgxMzpzdGF0aWMgc3NpemVfdCBjb21wX2FsZ29yaXRobV9zdG9yZShzdHJ1Y3QgZGV2aWNlICpkZXYsXG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYy0xODE0LVx0XHRcdFx0ICAgIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLFxuLS1cbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jLTE4MjAtXG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYzoxODIxOlx0cmV0ID0gX19jb21wX2FsZ29yaXRobV9zdG9yZSh6cmFtLCBaUkFNX1BSSU1BUllfQ09NUCwgYnVmKTtcbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jLTE4MjItXHRyZXR1cm4gcmV0ID8gcmV0IDogbGVuO1xuLS1cbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jPTE4MjY9c3RhdGljIHNzaXplX3QgcmVjb21wX2FsZ29yaXRobV9zaG93KHN0cnVjdCBkZXZpY2UgKmRldixcbi0tXG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYy0xODQ0LVxuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmM6MTg0NTpzdGF0aWMgc3NpemVfdCByZWNvbXBfYWxnb3JpdGhtX3N0b3JlKHN0cnVjdCBkZXZpY2UgKmRldixcbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jLTE4NDYtXHRcdFx0XHQgICAgICBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0cixcbi0tXG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYy0xODgxLVxuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmM6MTg4MjpcdHJldCA9IF9fY29tcF9hbGdvcml0aG1fc3RvcmUoenJhbSwgcHJpbywgYWxnKTtcbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jLTE4ODMtXHRyZXR1cm4gcmV0ID8gcmV0IDogbGVuO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMCAxMDowMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMjE3NwoJCQkJCQkJb3V0cHV0OiAzMwoJCQkJCQkJdGhvdWdodHM6IDEyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgbGlrZSB5b3Vyc2VsZjoKCioqQW5hbHl6aW5nIHRoZSBBbGdvcml0aG0gU3RvcmUqKgoKQWxyaWdodCwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gaW1tZWRpYXRlbHkgZXhhbWluZSB0aGUgYF9fY29tcF9hbGdvcml0aG1fc3RvcmVgLiBUaGF0JiMzOTtzIHdoZXJlIEkgd291bGQgZXhwZWN0IHRoZSBjb3JlIG9mIHRoaXMgd2hvbGUgdGhpbmcgdG8gbGl2ZSwgd291bGRuJiMzOTt0IHlvdT8gVGhpcyBpcyB0aGUgY2VudHJhbCByZXBvc2l0b3J5LCB0aGUgb3BlcmF0aW9uYWwgaGVhcnQgb2YgdGhlIHN5c3RlbSB3aGVuIGl0IGNvbWVzIHRvIGNvbXB1dGF0aW9uLiBNeSBpbW1lZGlhdGUgaW5zdGluY3QgaXMgdG8gbG9vayBhdCBob3cgaXQmIzM5O3Mgc3RydWN0dXJlZCwgaXRzIGFjY2VzcyBtZXRob2RzLCBhbmQsIG9mIGNvdXJzZSwgdGhlIGFsZ29yaXRobXMgdGhlbXNlbHZlcy4gV2hhdCBraW5kIG9mIG1ldGFkYXRhIGRvZXMgaXQgaGF2ZT8gVmVyc2lvbmluZz8gRGVwZW5kZW5jeSBtYW5hZ2VtZW50PyBBcmUgdGhlIGFsZ29yaXRobXMgZHluYW1pY2FsbHkgbG9hZGVkIG9yIHN0YXRpY2FsbHkgbGlua2VkPyBBcmUgdGhlcmUgYW55IG9idmlvdXMgcGVyZm9ybWFuY2UgYm90dGxlbmVja3MgaW4gdGhlIHN0b3JlIGl0c2VsZj8gV2hhdCBhcmUgdGhlIGltcGxpY2F0aW9ucyBvZiB0aGUgc3RvcmUmIzM5O3MgZGVzaWduIG9uIHN5c3RlbSBzY2FsYWJpbGl0eSBhbmQgbWFpbnRhaW5hYmlsaXR5PyBJJiMzOTttIGFscmVhZHkgYW50aWNpcGF0aW5nIHF1ZXN0aW9ucyBhYm91dCBwb3RlbnRpYWwgY29uY3VycmVuY3kgaXNzdWVzIGFuZCBzZWN1cml0eSBpbXBsaWNhdGlvbnMgaWYgdGhpcyBpcyBub3QgaGFuZGxlZCBjb3JyZWN0bHkuIFRoZSBkZXNpZ24gb2YgdGhpcyBzdG9yZSBpcyBwYXJhbW91bnQgdG8gdGhlIGVudGlyZSBvcGVyYXRpb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMwIDEwOjAxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O19fY29tcF9hbGdvcml0aG1fc3RvcmUmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL2Jsb2NrL3pyYW0vJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jPTE2NTk9c3RhdGljIHZvaWQgY29tcF9hbGdvcml0aG1fc2V0KHN0cnVjdCB6cmFtICp6cmFtLCB1MzIgcHJpbywgY29uc3QgY2hhciAqYWxnKVxuLS1cbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jLTE2NjMtXG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYzoxNjY0OnN0YXRpYyBpbnQgX19jb21wX2FsZ29yaXRobV9zdG9yZShzdHJ1Y3QgenJhbSAqenJhbSwgdTMyIHByaW8sIGNvbnN0IGNoYXIgKmJ1ZilcbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jLTE2NjUte1xuLS1cbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jPTE4MTM9c3RhdGljIHNzaXplX3QgY29tcF9hbGdvcml0aG1fc3RvcmUoc3RydWN0IGRldmljZSAqZGV2LFxuLS1cbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jLTE4MjAtXG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYzoxODIxOlx0cmV0ID0gX19jb21wX2FsZ29yaXRobV9zdG9yZSh6cmFtLCBaUkFNX1BSSU1BUllfQ09NUCwgYnVmKTtcbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jLTE4MjItXHRyZXR1cm4gcmV0ID8gcmV0IDogbGVuO1xuLS1cbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jPTE4NDU9c3RhdGljIHNzaXplX3QgcmVjb21wX2FsZ29yaXRobV9zdG9yZShzdHJ1Y3QgZGV2aWNlICpkZXYsXG4tLVxuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmMtMTg4MS1cbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jOjE4ODI6XHRyZXQgPSBfX2NvbXBfYWxnb3JpdGhtX3N0b3JlKHpyYW0sIHByaW8sIGFsZyk7XG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYy0xODgzLVx0cmV0dXJuIHJldCA/IHJldCA6IGxlbjtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzAgMTA6MDE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTI4MjEKCQkJCQkJCW91dHB1dDogNDIKCQkJCQkJCXRob3VnaHRzOiAxNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzLiBIZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGFzIGlmIHRoZXkmIzM5O3JlIG15IG93bjoKCioqSW52ZXN0aWdhdGluZyB0aGUgQ29yZSBGdW5jdGlvbmFsaXR5KioKCkFscmlnaHQsIHRpbWUgdG8gZ2V0IHRvIHRoZSBoZWFydCBvZiB0aGlzLiBNeSBmb2N1cyBpcyBpbW1lZGlhdGVseSBkcmF3biB0byB0aGF0IGBfX2NvbXBfYWxnb3JpdGhtX3N0b3JlYCDigJMgdGhhdCBzb3VuZHMgbGlrZSBhIGtleSBjb21wb25lbnQsIHByb2JhYmx5IGhvbGRpbmcgdGhlIGNvcmUgbG9naWMgZm9yIHRoZSBjb21wYXJhdGl2ZSBhbGdvcml0aG0uIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQgaXRzIGZ1bmN0aW9uIGlzLCB3aGF0IGl0JiMzOTtzIHJlc3BvbnNpYmxlIGZvciwgYW5kIGhvdyBpdCYjMzk7cyBzdHJ1Y3R1cmVkLiBLbm93aW5nIHRoaXMgd2lsbCBnaXZlIG1lIGEgc29saWQgZm91bmRhdGlvbiBmb3IgZXZhbHVhdGluZyBpdHMgb3ZlcmFsbCBkZXNpZ24gYW5kIGhvdyBpdCYjMzk7cyBpbnRlZ3JhdGVkIHdpdGhpbiB0aGUgbGFyZ2VyIHN5c3RlbS4gTGV0JiMzOTtzIHNlZSB3aGF0JiMzOTtzIHdoYXQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMwIDEwOjAxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxNjY0LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDMwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzE2NjQ6XHRzdGF0aWMgaW50IF9fY29tcF9hbGdvcml0aG1fc3RvcmUoc3RydWN0IHpyYW0gKnpyYW0sIHUzMiBwcmlvLCBjb25zdCBjaGFyICpidWYpXG4xNjY1Olx0e1xuMTY2NjpcdFx0Y29uc3QgY2hhciAqYWxnO1xuMTY2NzpcdFx0c2l6ZV90IHN6O1xuMTY2ODpcdFxuMTY2OTpcdFx0c3ogPSBzdHJsZW4oYnVmKTtcbjE2NzA6XHRcdGlmIChzeiBcdTAwM2U9IFpSQU1fTUFYX0FMR09fTkFNRV9TWilcbjE2NzE6XHRcdFx0cmV0dXJuIC1FMkJJRztcbjE2NzI6XHRcbjE2NzM6XHRcdGFsZyA9IHpjb21wX2xvb2t1cF9iYWNrZW5kX25hbWUoYnVmKTtcbjE2NzQ6XHRcdGlmICghYWxnKVxuMTY3NTpcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbjE2NzY6XHRcbjE2Nzc6XHRcdGd1YXJkKHJ3c2VtX3dyaXRlKShcdTAwMjZ6cmFtLVx1MDAzZWRldl9sb2NrKTtcbjE2Nzg6XHRcdGlmIChpbml0X2RvbmUoenJhbSkpIHtcbjE2Nzk6XHRcdFx0cHJfaW5mbyhcJiMzNDtDYW4mIzM5O3QgY2hhbmdlIGFsZ29yaXRobSBmb3IgaW5pdGlhbGl6ZWQgZGV2aWNlXFxuXCYjMzQ7KTtcbjE2ODA6XHRcdFx0cmV0dXJuIC1FQlVTWTtcbjE2ODE6XHRcdH1cbjE2ODI6XHRcbjE2ODM6XHRcdGNvbXBfYWxnb3JpdGhtX3NldCh6cmFtLCBwcmlvLCBhbGcpO1xuMTY4NDpcdFx0cmV0dXJuIDA7XG4xNjg1Olx0fVxuMTY4NjpcdFxuMTY4NzpcdHN0YXRpYyB2b2lkIGNvbXBfcGFyYW1zX3Jlc2V0KHN0cnVjdCB6cmFtICp6cmFtLCB1MzIgcHJpbylcbjE2ODg6XHR7XG4xNjg5Olx0XHRzdHJ1Y3QgemNvbXBfcGFyYW1zICpwYXJhbXMgPSBcdTAwMjZ6cmFtLVx1MDAzZXBhcmFtc1twcmlvXTtcbjE2OTA6XHRcbjE2OTE6XHRcdHZmcmVlKHBhcmFtcy1cdTAwM2VkaWN0KTtcbjE2OTI6XHRcdHBhcmFtcy1cdTAwM2VsZXZlbCA9IFpDT01QX1BBUkFNX05PVF9TRVQ7XG4xNjkzOlx0XHRwYXJhbXMtXHUwMDNlZGVmbGF0ZS53aW5iaXRzID0gWkNPTVBfUEFSQU1fTk9UX1NFVDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzAgMTA6MDE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTM0NjcKCQkJCQkJCW91dHB1dDogNDIKCQkJCQkJCXRob3VnaHRzOiAzMAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgcHJlc2VudGVkIGFzIG15IG93biBtZW50YWwgcHJvY2VzcywgZ2l2ZW4gbXkgZXhwZXJ0aXNlOgoKKipBbGdvcml0aG0gTmFtaW5nIGFuZCBJbml0aWFsaXphdGlvbioqCgpBbHJpZ2h0LCBzbyB0aGlzIGxpbmUgb2YgY29kZSwgb3IgdGhpcyBzZWN0aW9uIG9mIHRoZSBwcm9jZXNzLCBpcyBwcmV0dHkgc3RyYWlnaHRmb3J3YXJkLiBJdCBsb29rcyBsaWtlIGl0cyBzb2xlIHB1cnBvc2UgaXMgdG8gYXNzaWduIHRoZSBuYW1lIG9mIHRoZSBhbGdvcml0aG0uIE5vdGhpbmcgZmFuY3ksIGp1c3Qgc2V0dGluZyBhIHN0cmluZyB2YWx1ZS4gVGhlIHJlYWwgbWVhdCBvZiB0aGUgb3BlcmF0aW9uLCB0aGUgYWN0dWFsIGluc3RhbnRpYXRpb24gYW5kIHNldHVwIG9mIHRoZSBhbGdvcml0aG0sIGhhcHBlbnMgZWxzZXdoZXJlLiBUaGUgY29tbWVudCBleHBsaWNpdGx5IGRpcmVjdHMgbXkgYXR0ZW50aW9uIHRvIGBkaXNrc2l6ZV9zdG9yZWAuIFRoYXQmIzM5O3Mgd2hlcmUgSSBuZWVkIHRvIGZvY3VzIG15IGVmZm9ydHMuIEkmIzM5O2xsIG5lZWQgdG8gZXhhbWluZSBgZGlza3NpemVfc3RvcmVgIGNsb3NlbHkgdG8gdW5kZXJzdGFuZCBob3cgdGhpcyBhbGdvcml0aG0gaXMgYWN0dWFsbHkgYnJvdWdodCB0byBsaWZlLiBMZXQmIzM5O3MgZ2V0IHJpZ2h0IHRvIGl0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMCAxMDowMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMjg1OSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA1MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsyODU5Olx0c3RhdGljIHNzaXplX3QgZGlza3NpemVfc3RvcmUoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0cixcbjI4NjA6XHRcdFx0XHQgICAgICBjb25zdCBjaGFyICpidWYsIHNpemVfdCBsZW4pXG4yODYxOlx0e1xuMjg2MjpcdFx0dTY0IGRpc2tzaXplO1xuMjg2MzpcdFx0c3RydWN0IHpjb21wICpjb21wO1xuMjg2NDpcdFx0c3RydWN0IHpyYW0gKnpyYW0gPSBkZXZfdG9fenJhbShkZXYpO1xuMjg2NTpcdFx0aW50IGVycjtcbjI4NjY6XHRcdHUzMiBwcmlvO1xuMjg2NzpcdFxuMjg2ODpcdFx0ZGlza3NpemUgPSBtZW1wYXJzZShidWYsIE5VTEwpO1xuMjg2OTpcdFx0aWYgKCFkaXNrc2l6ZSlcbjI4NzA6XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4yODcxOlx0XG4yODcyOlx0XHRndWFyZChyd3NlbV93cml0ZSkoXHUwMDI2enJhbS1cdTAwM2VkZXZfbG9jayk7XG4yODczOlx0XHRpZiAoaW5pdF9kb25lKHpyYW0pKSB7XG4yODc0Olx0XHRcdHByX2luZm8oXCYjMzQ7Q2Fubm90IGNoYW5nZSBkaXNrc2l6ZSBmb3IgaW5pdGlhbGl6ZWQgZGV2aWNlXFxuXCYjMzQ7KTtcbjI4NzU6XHRcdFx0cmV0dXJuIC1FQlVTWTtcbjI4NzY6XHRcdH1cbjI4Nzc6XHRcbjI4Nzg6XHRcdGRpc2tzaXplID0gUEFHRV9BTElHTihkaXNrc2l6ZSk7XG4yODc5Olx0XHRpZiAoIXpyYW1fbWV0YV9hbGxvYyh6cmFtLCBkaXNrc2l6ZSkpXG4yODgwOlx0XHRcdHJldHVybiAtRU5PTUVNO1xuMjg4MTpcdFxuMjg4MjpcdFx0Zm9yIChwcmlvID0gWlJBTV9QUklNQVJZX0NPTVA7IHByaW8gXHUwMDNjIFpSQU1fTUFYX0NPTVBTOyBwcmlvJiM0MzsmIzQzOykge1xuMjg4MzpcdFx0XHRpZiAoIXpyYW0tXHUwMDNlY29tcF9hbGdzW3ByaW9dKVxuMjg4NDpcdFx0XHRcdGNvbnRpbnVlO1xuMjg4NTpcdFxuMjg4NjpcdFx0XHRjb21wID0gemNvbXBfY3JlYXRlKHpyYW0tXHUwMDNlY29tcF9hbGdzW3ByaW9dLFxuMjg4NzpcdFx0XHRcdFx0ICAgIFx1MDAyNnpyYW0tXHUwMDNlcGFyYW1zW3ByaW9dKTtcbjI4ODg6XHRcdFx0aWYgKElTX0VSUihjb21wKSkge1xuMjg4OTpcdFx0XHRcdHByX2VycihcJiMzNDtDYW5ub3QgaW5pdGlhbGlzZSAlcyBjb21wcmVzc2luZyBiYWNrZW5kXFxuXCYjMzQ7LFxuMjg5MDpcdFx0XHRcdCAgICAgICB6cmFtLVx1MDAzZWNvbXBfYWxnc1twcmlvXSk7XG4yODkxOlx0XHRcdFx0ZXJyID0gUFRSX0VSUihjb21wKTtcbjI4OTI6XHRcdFx0XHRnb3RvIG91dF9mcmVlX2NvbXBzO1xuMjg5MzpcdFx0XHR9XG4yODk0Olx0XG4yODk1Olx0XHRcdHpyYW0tXHUwMDNlY29tcHNbcHJpb10gPSBjb21wO1xuMjg5NjpcdFx0fVxuMjg5NzpcdFx0enJhbS1cdTAwM2VkaXNrc2l6ZSA9IGRpc2tzaXplO1xuMjg5ODpcdFx0c2V0X2NhcGFjaXR5X2FuZF9ub3RpZnkoenJhbS1cdTAwM2VkaXNrLCB6cmFtLVx1MDAzZWRpc2tzaXplIFx1MDAzZVx1MDAzZSBTRUNUT1JfU0hJRlQpO1xuMjg5OTpcdFxuMjkwMDpcdFx0cmV0dXJuIGxlbjtcbjI5MDE6XHRcbjI5MDI6XHRvdXRfZnJlZV9jb21wczpcbjI5MDM6XHRcdHpyYW1fZGVzdHJveV9jb21wcyh6cmFtKTtcbjI5MDQ6XHRcdHpyYW1fbWV0YV9mcmVlKHpyYW0sIGRpc2tzaXplKTtcbjI5MDU6XHRcdHJldHVybiBlcnI7XG4yOTA2Olx0fVxuMjkwNzpcdFxuMjkwODpcdHN0YXRpYyBzc2l6ZV90IHJlc2V0X3N0b3JlKHN0cnVjdCBkZXZpY2UgKmRldixcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzAgMTA6MDE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTQ0MzIKCQkJCQkJCW91dHB1dDogMjkKCQkJCQkJCXRob3VnaHRzOiA2MwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4KCioqSW52ZXN0aWdhdGluZyB0aGUgWlJBTSBDb21wcmVzc2lvbiBGbG93KioKClJpZ2h0LCBzbyBgZGlza3NpemVfc3RvcmVgIGlzIHRoZSBrZXkgZnVuY3Rpb24gaGVyZTsgaXQmIzM5O3MgdGhlIG9uZSB0aGF0IGtpY2tzIG9mZiBib3RoIGB6Y29tcF9jcmVhdGVgIGFuZCBgenJhbV9kZXN0cm95X2NvbXBzYC4gVGhhdCBtYWtlcyBzZW5zZSBpbiB0ZXJtcyBvZiB0aGUgbGlmZWN5Y2xlLCBJIHN1cHBvc2UuIEFuZCBpdCBzZWVtcyB0aGF0IGBkZWZsYXRlX3NldHVwX3BhcmFtc2AgZ2V0cyBjYWxsZWQgd2l0aGluIGB6Y29tcF9jcmVhdGVgLiBJbnRlcmVzdGluZy4KCk5vdywgSSYjMzk7bSBnZXR0aW5nIGN1cmlvdXMgYWJvdXQgdGhlIGNvbXByZXNzaW9uIHBhcmFtZXRlcnMuIFNwZWNpZmljYWxseSwgY2FuIHdlIGRpcmVjdGx5IGNvbnRyb2wgYHdpbmJpdHNgPyBLbm93aW5nIHRoYXQgd291bGQgZ2l2ZSBtZSBhIGRlZXBlciBsZXZlbCBvZiBjb250cm9sIGFuZCBwb3RlbnRpYWxseSBvcHRpbWl6ZSB0aGUgY29tcHJlc3Npb24gYmVoYXZpb3IuIFRpbWUgdG8gZ28gZGlnZ2luZyB0aHJvdWdoIHRoZSBjb2RlIGFuZCBzZWUgaWYgdGhlcmUmIzM5O3MgYSBtZWNoYW5pc20gdG8gc2V0IHRoYXQgcGFyYW1ldGVyLiBJIHNob3VsZCBiZSBhYmxlIHRvIGZpZ3VyZSBpdCBvdXQgd2l0aCBhIGxpdHRsZSBiaXQgb2Ygc2VhcmNoaW5nLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMCAxMDowMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt3aW5iaXRzJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9ibG9jay96cmFtLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL2Jsb2NrL3pyYW0vYmFja2VuZF9kZWZsYXRlLmM9MjM9c3RhdGljIGludCBkZWZsYXRlX3NldHVwX3BhcmFtcyhzdHJ1Y3QgemNvbXBfcGFyYW1zICpwYXJhbXMpXG4tLVxuZHJpdmVycy9ibG9jay96cmFtL2JhY2tlbmRfZGVmbGF0ZS5jLTI2LVx0XHRwYXJhbXMtXHUwMDNlbGV2ZWwgPSBaX0RFRkFVTFRfQ09NUFJFU1NJT047XG5kcml2ZXJzL2Jsb2NrL3pyYW0vYmFja2VuZF9kZWZsYXRlLmM6Mjc6XHRpZiAocGFyYW1zLVx1MDAzZWRlZmxhdGUud2luYml0cyA9PSBaQ09NUF9QQVJBTV9OT1RfU0VUKSB7XG5kcml2ZXJzL2Jsb2NrL3pyYW0vYmFja2VuZF9kZWZsYXRlLmM6Mjg6XHRcdHBhcmFtcy1cdTAwM2VkZWZsYXRlLndpbmJpdHMgPSBERUZMQVRFX0RFRl9XSU5CSVRTO1xuZHJpdmVycy9ibG9jay96cmFtL2JhY2tlbmRfZGVmbGF0ZS5jLTI5LVx0fSBlbHNlIHtcbmRyaXZlcnMvYmxvY2svenJhbS9iYWNrZW5kX2RlZmxhdGUuYzozMDpcdFx0czMyIHdiID0gcGFyYW1zLVx1MDAzZWRlZmxhdGUud2luYml0cztcbmRyaXZlcnMvYmxvY2svenJhbS9iYWNrZW5kX2RlZmxhdGUuYy0zMS1cbi0tXG5kcml2ZXJzL2Jsb2NrL3pyYW0vYmFja2VuZF9kZWZsYXRlLmM9NTc9c3RhdGljIGludCBkZWZsYXRlX2NyZWF0ZShzdHJ1Y3QgemNvbXBfcGFyYW1zICpwYXJhbXMsIHN0cnVjdCB6Y29tcF9jdHggKmN0eClcbi0tXG5kcml2ZXJzL2Jsb2NrL3pyYW0vYmFja2VuZF9kZWZsYXRlLmMtNjctXHRjdHgtXHUwMDNlY29udGV4dCA9IHpjdHg7XG5kcml2ZXJzL2Jsb2NrL3pyYW0vYmFja2VuZF9kZWZsYXRlLmM6Njg6XHRzeiA9IHpsaWJfZGVmbGF0ZV93b3Jrc3BhY2VzaXplKHBhcmFtcy1cdTAwM2VkZWZsYXRlLndpbmJpdHMsIE1BWF9NRU1fTEVWRUwpO1xuZHJpdmVycy9ibG9jay96cmFtL2JhY2tlbmRfZGVmbGF0ZS5jLTY5LVx0emN0eC1cdTAwM2VjY3R4LndvcmtzcGFjZSA9IHZ6YWxsb2Moc3opO1xuLS1cbmRyaXZlcnMvYmxvY2svenJhbS9iYWNrZW5kX2RlZmxhdGUuYy03My1cdHJldCA9IHpsaWJfZGVmbGF0ZUluaXQyKFx1MDAyNnpjdHgtXHUwMDNlY2N0eCwgcGFyYW1zLVx1MDAzZWxldmVsLCBaX0RFRkxBVEVELFxuZHJpdmVycy9ibG9jay96cmFtL2JhY2tlbmRfZGVmbGF0ZS5jOjc0Olx0XHRcdFx0cGFyYW1zLVx1MDAzZWRlZmxhdGUud2luYml0cywgREVGTEFURV9ERUZfTUVNTEVWRUwsXG5kcml2ZXJzL2Jsb2NrL3pyYW0vYmFja2VuZF9kZWZsYXRlLmMtNzUtXHRcdFx0XHRaX0RFRkFVTFRfU1RSQVRFR1kpO1xuLS1cbmRyaXZlcnMvYmxvY2svenJhbS9iYWNrZW5kX2RlZmxhdGUuYy04My1cbmRyaXZlcnMvYmxvY2svenJhbS9iYWNrZW5kX2RlZmxhdGUuYzo4NDpcdHJldCA9IHpsaWJfaW5mbGF0ZUluaXQyKFx1MDAyNnpjdHgtXHUwMDNlZGN0eCwgcGFyYW1zLVx1MDAzZWRlZmxhdGUud2luYml0cyk7XG5kcml2ZXJzL2Jsb2NrL3pyYW0vYmFja2VuZF9kZWZsYXRlLmMtODUtXHRpZiAocmV0ICE9IFpfT0spXG4tLVxuZHJpdmVycy9ibG9jay96cmFtL3pjb21wLmg9MTA9c3RydWN0IGRlZmxhdGVfcGFyYW1zIHtcbmRyaXZlcnMvYmxvY2svenJhbS96Y29tcC5oOjExOlx0czMyIHdpbmJpdHM7XG5kcml2ZXJzL2Jsb2NrL3pyYW0vemNvbXAuaC0xMi19O1xuLS1cbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jPTE2ODc9c3RhdGljIHZvaWQgY29tcF9wYXJhbXNfcmVzZXQoc3RydWN0IHpyYW0gKnpyYW0sIHUzMiBwcmlvKVxuLS1cbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jLTE2OTItXHRwYXJhbXMtXHUwMDNlbGV2ZWwgPSBaQ09NUF9QQVJBTV9OT1RfU0VUO1xuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmM6MTY5MzpcdHBhcmFtcy1cdTAwM2VkZWZsYXRlLndpbmJpdHMgPSBaQ09NUF9QQVJBTV9OT1RfU0VUO1xuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmMtMTY5NC1cdHBhcmFtcy1cdTAwM2VkaWN0X3N6ID0gMDtcbi0tXG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYz0xNjk4PXN0YXRpYyBpbnQgY29tcF9wYXJhbXNfc3RvcmUoc3RydWN0IHpyYW0gKnpyYW0sIHUzMiBwcmlvLCBzMzIgbGV2ZWwsXG4tLVxuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmMtMTcxNy1cdHpyYW0tXHUwMDNlcGFyYW1zW3ByaW9dLmxldmVsID0gbGV2ZWw7XG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYzoxNzE4Olx0enJhbS1cdTAwM2VwYXJhbXNbcHJpb10uZGVmbGF0ZS53aW5iaXRzID0gZGVmbGF0ZV9wYXJhbXMtXHUwMDNld2luYml0cztcbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jLTE3MTktXHRyZXR1cm4gMDtcbi0tXG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYz0xNzIyPXN0YXRpYyBzc2l6ZV90IGFsZ29yaXRobV9wYXJhbXNfc3RvcmUoc3RydWN0IGRldmljZSAqZGV2LFxuLS1cbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jLTE3MzMtXG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYzoxNzM0Olx0ZGVmbGF0ZV9wYXJhbXMud2luYml0cyA9IFpDT01QX1BBUkFNX05PVF9TRVQ7XG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYy0xNzM1LVxuLS1cbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jLTE3NjctXG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYzoxNzY4Olx0XHRpZiAoIXN0cmNtcChwYXJhbSwgXCYjMzQ7ZGVmbGF0ZS53aW5iaXRzXCYjMzQ7KSkge1xuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmM6MTc2OTpcdFx0XHRyZXQgPSBrc3RydG9pbnQodmFsLCAxMCwgXHUwMDI2ZGVmbGF0ZV9wYXJhbXMud2luYml0cyk7XG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYy0xNzcwLVx0XHRcdGlmIChyZXQpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMwIDEwOjAxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE1ODY4CgkJCQkJCQlvdXRwdXQ6IDMxCgkJCQkJCQl0aG91Z2h0czogNDE4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEZ1enppbmcgU3RyYXRlZ3kgZm9yIFpSQU0gUGFyYW1ldGVycyoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgaG93IGBhbGdvcml0aG1fcGFyYW1zX3N0b3JlYCBpcyB1c2VkIHRvIGluZmx1ZW5jZSBgd2luYml0c2AuICBUaGlzIGNsZWFybHkgbWFrZXMgaXQgYSBwcmltZSB0YXJnZXQgZm9yIGZ1enppbmcuICBJIG5lZWQgdG8gaWRlbnRpZnkgdGhlIGtleSBmdW5jdGlvbnMgdG8gZm9jdXMgb24sIGtlZXBpbmcgdGhlIGd1aWRlbGluZXMgaW4gbWluZC4KCkluaXRpYWxseSwgSSBpZGVudGlmaWVkIGBkZWZsYXRlX3NldHVwX3BhcmFtc2AgYXMgcmVsZXZhbnQsIGJ1dCBpdCYjMzk7cyBhIGBzdGF0aWNgIGZ1bmN0aW9uLCBzbyBJIG5lZWQgdG8gdGhpbmsgY2FyZWZ1bGx5LiBJdCYjMzk7cyBhc3NpZ25lZCB0byBgc2V0dXBfcGFyYW1zYCB3aGljaCBpcyBhIGZ1bmN0aW9uIHBvaW50ZXIgaW4gYHpjb21wX29wc2Agc28gdGhlIGNvbXBpbGVyIHdvbiYjMzk7dCBuZWNlc3NhcmlseSBpbmxpbmUgaXQsIHdoaWNoIHdvdWxkIG1ha2UgaXQgYW4gaW1wb3J0YW50IHRhcmdldC4gSXQmIzM5O3MgYmVzdCBwcmFjdGljZSwgYW5kIHRoZSBwcm9tcHQgc2F5cywgdG8gZm9jdXMgb24gbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIHJhdGhlciB0aGFuIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zLiBJIGNhbiBsb29rIGludG8gYHpjb21wX2NyZWF0ZWAgYW5kIGBkaXNrc2l6ZV9zdG9yZWAsIGBhbGdvcml0aG1fcGFyYW1zX3N0b3JlYCwgYW5kIGBjb21wX2FsZ29yaXRobV9zdG9yZWAuIEkgYWxzbyBpZGVudGlmaWVkIGB6cmFtX2Rlc3Ryb3lfY29tcHNgLCBgZGlza3NpemVfc3RvcmVgLCBhbmQgYHpyYW1fcmVzZXRfZGV2aWNlYCwgYW5kIGB6cmFtX3JlbW92ZWAuCgpOb3csIHJlZ2FyZGluZyBgZGVmbGF0ZV9zZXR1cF9wYXJhbXNgLCBJJiMzOTttIHBhdXNpbmcuIEl0IGlzIHN0YXRpYywgYW5kIGl0IGlzIGFzc2lnbmVkIHRvIGEgZnVuY3Rpb24gcG9pbnRlciwgYW5kIHRoZSBwcm9tcHQgc3RhdGVzIHRoYXQgSSBzaG91bGQgZm9jdXMgb24gbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJcyByYXRoZXIgdGhhbiBpbmxpbmVkIGludGVybmFsIGZ1bmN0aW9ucy4gU2luY2UgdGhlIHByb21wdCBpbmRpY2F0ZXMgdGhhdCBJIHNob3VsZCBmb2N1cyBvbiB0aGUgc3lzZnMgc3RvcmUgZW50cnkgcG9pbnRzLCBoZXJlJiMzOTtzIG15IHVwZGF0ZWQgbGlzdDoKCiogICBgZGlza3NpemVfc3RvcmVgCiogICBgYWxnb3JpdGhtX3BhcmFtc19zdG9yZWAKKiAgIGByZXNldF9zdG9yZWAKKiAgIGBjb21wX2FsZ29yaXRobV9zdG9yZWAKKiAgIGByZWNvbXBfYWxnb3JpdGhtX3N0b3JlYAoKSSYjMzk7bGwgZG91YmxlLWNoZWNrIHRoYXQgdGhlc2Ugc3lzZnMgc3RvcmUgZnVuY3Rpb25zIGFyZSBzdGF0aWMuIFRoZXkgYXJlLCBidXQgdGhleSYjMzk7cmUgdGhlIEFQSSBlbnRyeSBwb2ludHMgZm9yIHRoaXMgWlJBTSBkcml2ZXIsIHNvIGV2ZW4gdGhvdWdoIHRoZXkmIzM5O3JlIHN0YXRpYywgdGhleSBhcmUgdGhlIG9uZXMgSSB3YW50IHRvIHRhcmdldC4gSSBzaG91bGQgYWxzbyBjaGVjayBpZiB0aGVyZSBhcmUgYW55IG5vbi1zdGF0aWMgZnVuY3Rpb25zIGF2YWlsYWJsZSwganVzdCBpbiBjYXNlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMCAxMDowMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtkaXNrc2l6ZV9zdG9yZSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvYmxvY2svenJhbS8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmM9Mjg0Mj1zdGF0aWMgdm9pZCB6cmFtX3Jlc2V0X2RldmljZShzdHJ1Y3QgenJhbSAqenJhbSlcbi0tXG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYy0yODU4LVxuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmM6Mjg1OTpzdGF0aWMgc3NpemVfdCBkaXNrc2l6ZV9zdG9yZShzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLFxuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmMtMjg2MC1cdFx0XHQgICAgICBjb25zdCBjaGFyICpidWYsIHNpemVfdCBsZW4pXG4tLVxuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmM9MzExMD1zdGF0aWMgaW50IHpyYW1fcmVtb3ZlKHN0cnVjdCB6cmFtICp6cmFtKVxuLS1cbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jLTMxNDYtXHQvKlxuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmM6MzE0NzpcdCAqIGRpc2tzaXplX3N0b3JlKCkgbWF5IGJlIGNhbGxlZCBpbiBiZXR3ZWVuIHpyYW1fcmVzZXRfZGV2aWNlKClcbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jLTMxNDgtXHQgKiBhbmQgZGVsX2dlbmRpc2soKSwgc28gcnVuIHRoZSBsYXN0IHJlc2V0IHRvIGF2b2lkIGxlYWtpbmdcbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jOjMxNDk6XHQgKiBhbnl0aGluZyBhbGxvY2F0ZWQgd2l0aCBkaXNrc2l6ZV9zdG9yZSgpXG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYy0zMTUwLVx0ICovXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMwIDEwOjAxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE3MDc5CgkJCQkJCQlvdXRwdXQ6IDMxCgkJCQkJCQl0aG91Z2h0czogMjIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgc3VtbWFyeSwgYXMgdGhvdWdoIEkmIzM5O20gdGhpbmtpbmcgdGhyb3VnaCB0aGlzIHByb2Nlc3M6CgoqKlN0YXRpYyB2cy4gTm9uLVN0YXRpYyDigJMgVGltZSB0byBJbnZlc3RpZ2F0ZSoqCgpPa2F5LCBzbyBJJiMzOTttIG5vdGljaW5nIHNvbWV0aGluZyBoZXJlLiBJJiMzOTttIHNlZWluZyBhIGxvdCBvZiB0aGVzZSBlbGVtZW50cywgYW5kIHRoZXkgYXBwZWFyIHRvIGJlICpzdGF0aWMqLiBIbW0sIHRoYXQmIzM5O3Mgbm90IHdoYXQgSSYjMzk7ZCBleHBlY3QgZ2l2ZW4gdGhlIGNvbnRleHQuIExldCYjMzk7cyBkaWcgaW4gYSBiaXQuIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzIHRvIGNoZWNrIGB6Y29tcF9jcmVhdGVgLiBJIHJlY2FsbCB0aGF0IG9uZSBiZWluZyAqbm9uLXN0YXRpYyosIGFuZCB0aGF0JiMzOTtzIGV4YWN0bHkgdGhlIGtpbmQgb2YgdGhpbmcgSSYjMzk7bSBsb29raW5nIGF0IHRvIHNlZSBpZiBpdCBpcyB0aGUgb3V0bGllci4gTm93IGxldCYjMzk7cyBzZWUgd2h5LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMCAxMDowMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt6Y29tcF9jcmVhdGUmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL2Jsb2NrL3pyYW0vJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvYmxvY2svenJhbS96Y29tcC5jPTIyNT12b2lkIHpjb21wX2Rlc3Ryb3koc3RydWN0IHpjb21wICpjb21wKVxuLS1cbmRyaXZlcnMvYmxvY2svenJhbS96Y29tcC5jLTIzMi1cbmRyaXZlcnMvYmxvY2svenJhbS96Y29tcC5jOjIzMzpzdHJ1Y3QgemNvbXAgKnpjb21wX2NyZWF0ZShjb25zdCBjaGFyICphbGcsIHN0cnVjdCB6Y29tcF9wYXJhbXMgKnBhcmFtcylcbmRyaXZlcnMvYmxvY2svenJhbS96Y29tcC5jLTIzNC17XG4tLVxuZHJpdmVycy9ibG9jay96cmFtL3pjb21wLmg9ODM9Y29uc3QgY2hhciAqemNvbXBfbG9va3VwX2JhY2tlbmRfbmFtZShjb25zdCBjaGFyICpjb21wKTtcbmRyaXZlcnMvYmxvY2svenJhbS96Y29tcC5oLTg0LVxuZHJpdmVycy9ibG9jay96cmFtL3pjb21wLmg6ODU6c3RydWN0IHpjb21wICp6Y29tcF9jcmVhdGUoY29uc3QgY2hhciAqYWxnLCBzdHJ1Y3QgemNvbXBfcGFyYW1zICpwYXJhbXMpO1xuZHJpdmVycy9ibG9jay96cmFtL3pjb21wLmgtODYtdm9pZCB6Y29tcF9kZXN0cm95KHN0cnVjdCB6Y29tcCAqY29tcCk7XG4tLVxuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmM9Mjg1OT1zdGF0aWMgc3NpemVfdCBkaXNrc2l6ZV9zdG9yZShzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLFxuLS1cbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jLTI4ODUtXG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYzoyODg2Olx0XHRjb21wID0gemNvbXBfY3JlYXRlKHpyYW0tXHUwMDNlY29tcF9hbGdzW3ByaW9dLFxuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmMtMjg4Ny1cdFx0XHRcdCAgICBcdTAwMjZ6cmFtLVx1MDAzZXBhcmFtc1twcmlvXSk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMwIDEwOjAxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE3NjM0CgkJCQkJCQlvdXRwdXQ6IDE1NgoJCQkJCQkJdGhvdWdodHM6IDkwMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipGdXp6aW5nIFRhcmdldCBJZGVudGlmaWNhdGlvbjogWlJBTSBEZWZsYXRlIEJhY2tlbmQqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gTXkgZ29hbCBpcyB0byBkZXRlcm1pbmUgdGhlIGJlc3QgYXBwcm9hY2ggZm9yIGZ1enppbmcgdGhlIFpSQU0gZGVmbGF0ZSBiYWNrZW5kLgoKRmlyc3QsIEkmIzM5O20gbm90aW5nIHRoYXQgYHpjb21wX2NyZWF0ZWAgaXMgbm9uLXN0YXRpYywgd2hpbGUgYHpyYW1fcmVzZXRfZGV2aWNlYCwgYHpjb21wX2luaXRgLCBhbmQgYGRlZmxhdGVfc2V0dXBfcGFyYW1zYCBhcmUgc3RhdGljLiBUaGlzIGltbWVkaWF0ZWx5IHBvaW50cyBtZSB0b3dhcmRzIGZ1bmN0aW9ucyB0aGF0IG1pZ2h0IGJlIG1vcmUgcmVhZGlseSBhY2Nlc3NpYmxlIHZpYSBleHRlcm5hbCBpbnRlcmZhY2VzLgoKSSYjMzk7bSBtYWtpbmcgYSBsaXN0OiBJIG5lZWQgdG8gY29uc2lkZXIgYHpjb21wX2NyZWF0ZWAgYW5kIGl0cyBjb3VudGVycGFydCBgemNvbXBfZGVzdHJveWAuIFRoZW4sIHRoaW5raW5nIGFib3V0IGhvdyBzeXprYWxsZXIgb3BlcmF0ZXPigJRpbnRlcmFjdGluZyB3aXRoIHN5c2ZzLCBuYW1lbHkgYnkgb3BlbmluZyBhbmQgd3JpdGluZyB0byBmaWxlc+KAlEkgcmVhbGl6ZSB0aGF0IGV2ZW4gaWYgZnVuY3Rpb25zIGxpa2UgYGRpc2tzaXplX3N0b3JlYCwgYGFsZ29yaXRobV9wYXJhbXNfc3RvcmVgLCBhbmQgYHJlc2V0X3N0b3JlYCBhcmUgKnN0YXRpYyosIHRoZXkgYXJlIHRoZSBlbnRyeSBwb2ludHMgdGhhdCBoYW5kbGUgaW5wdXQgZGF0YS4gVGhleSYjMzk7cmUgY3JpdGljYWwuCgpTbywgaGVyZSYjMzk7cyBteSB1cGRhdGVkIGxpc3Qgb2YgZnVuY3Rpb25zIHRvIHRhcmdldDoKCiogICBgemNvbXBfY3JlYXRlYAoqICAgYGRpc2tzaXplX3N0b3JlYAoqICAgYGFsZ29yaXRobV9wYXJhbXNfc3RvcmVgCiogICBgcmVzZXRfc3RvcmVgCiogICBgenJhbV9yZXNldF9kZXZpY2VgCiogICBgenJhbV9kZXN0cm95X2NvbXBzYAoqICAgYGRlZmxhdGVfc2V0dXBfcGFyYW1zYAoKSSYjMzk7bSBkb3VibGUtY2hlY2tpbmcgdGhlIHN0YXRpYyBuYXR1cmUgb2YgYHpyYW1fZGVzdHJveV9jb21wc2AgYW5kIGBkZWZsYXRlX3NldHVwX3BhcmFtc2AgZm9yIGNvbmZpcm1hdGlvbiwganVzdCB0byBiZSBzdXJlLgoKTm93LCBsZXQmIzM5O3MgaWRlbnRpZnkgdGhlIHJlcXVpcmVkIGtlcm5lbCBjb25maWdzLiBXZSBkZWZpbml0ZWx5IG5lZWQgYFpSQU1gIGFuZCBgWlJBTV9CQUNLRU5EX0RFRkxBVEVgLiBJJiMzOTttIGNvbmZpcm1pbmcgdGhhdCB0aGVyZSBhcmVuJiMzOTt0IGFueSBvdGhlciBkZXBlbmRlbmNpZXMgdGhhdCBtaWdodCBiZSByZWxldmFudDsgYFpSQU1gIGRlcGVuZHMgb24gYEJMT0NLICZhbXA7JmFtcDsgU1lTRlMgJmFtcDsmYW1wOyBNTVVgIGFuZCBgWlJBTV9CQUNLRU5EX0RFRkxBVEVgIGRlcGVuZHMgb24gYFpSQU1gLiBUaGF0IHNlZW1zIHN0cmFpZ2h0Zm9yd2FyZC4gVGhlbiBjb25maXJtaW5nIHRoYXQgYFpSQU1fQkFDS0VORF9ERUZMQVRFYCBlbmFibGVzIHRoZSBkZWZsYXRlIGJhY2tlbmQsIHdoaWNoIGlzIGV4YWN0bHkgd2hhdCBJIGV4cGVjdC4KCk9rYXksIGxldCYjMzk7cyBhbmFseXplIHRoZSByZWxldmFudCBjb2RlIGNoYW5nZXMgaW4gYHpyYW1fZHJ2LmNgLiBUaGUgZGlmZiBzaG93cyB0aGF0IGBjb21wX2FsZ29yaXRobV9zZXRgIGhhcyBiZWVuIG1vdmVkIGZyb20gYHpyYW1fcmVzZXRfZGV2aWNlYCB0byBgenJhbV9kZXN0cm95X2NvbXBzYC4gVGhhdCYjMzk7cyBpbXBvcnRhbnQuIGB6cmFtX2Rlc3Ryb3lfY29tcHNgIGlzIGNhbGxlZCBmcm9tIGB6cmFtX3Jlc2V0X2RldmljZWAgYW5kIGFsc28sIGltcG9ydGFudGx5LCBmcm9tIGBkaXNrc2l6ZV9zdG9yZWAgaW4gY2FzZSBvZiBhbiBlcnJvci4gVGhpcyBtZWFucyB0aGF0LCBhZnRlciBhbiBlcnJvciBpbiBgZGlza3NpemVfc3RvcmVgLCB0aGUgYWxnb3JpdGhtIHdpbGwgYmUgcmVzZXQgdG8gYGRlZmF1bHRfY29tcHJlc3NvcmAuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSwgYW5kIGZ1bmN0aW9uYWwgY2hhbmdlcyBvZnRlbiBpbnRyb2R1Y2UgbmV3IGJ1Z3MuCgpUaGUgY29kZSBjaGFuZ2VzIGluZGljYXRlIHRoYXQgdGhlc2UgYXJlIGRlZmluaXRlbHkgd29ydGggZnV6emluZy4KCk15IHN0cmF0ZWd5IGlzIHRvIHNldDoKYFdvcnRoRnV6emluZzogdHJ1ZWAKYEZvY3VzU3ltYm9sc2A6IHdoaWNoIHdpbGwgYmUgdGhlIGxpc3QgYWJvdmUuCmBFbmFibGVDb25maWdzYDogd2hpY2ggYXJlIGBaUkFNYCBhbmQgYFpSQU1fQkFDS0VORF9ERUZMQVRFYAoKRmluYWxseSwgYSBxdWljayB2ZXJpZmljYXRpb24gb2YgdGhlIGZ1bmN0aW9uIG5hbWVzIHRvIGVuc3VyZSB0aGV5JiMzOTtyZSBleGFjdGx5IGFzIGV4cGVjdGVkOiBjb25maXJtaW5nIGBkZWZsYXRlX3NldHVwX3BhcmFtc2AsIGB6cmFtX2Rlc3Ryb3lfY29tcHNgLCBgZGlza3NpemVfc3RvcmVgLCBgYWxnb3JpdGhtX3BhcmFtc19zdG9yZWAsIGFuZCBgcmVzZXRfc3RvcmVgLiBBbGwgY29uZmlybWVkLgpUaW1lIHRvIGNhbGwgYHNldC1yZXN1bHRzYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzAgMTA6MDE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1pSQU0mIzM0OywKICAgICYjMzQ7WlJBTV9CQUNLRU5EX0RFRkxBVEUmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDt6Y29tcF9jcmVhdGUmIzM0OywKICAgICYjMzQ7ZGlza3NpemVfc3RvcmUmIzM0OywKICAgICYjMzQ7YWxnb3JpdGhtX3BhcmFtc19zdG9yZSYjMzQ7LAogICAgJiMzNDtyZXNldF9zdG9yZSYjMzQ7LAogICAgJiMzNDt6cmFtX2Rlc3Ryb3lfY29tcHMmIzM0OywKICAgICYjMzQ7ZGVmbGF0ZV9zZXR1cF9wYXJhbXMmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcyB2YWxpZGF0aW9uIGZvciB0aGUgZGVmbGF0ZSB3aW5iaXRzIHBhcmFtZXRlciBhbmQgY2hhbmdlcyB0aGUgYmVoYXZpb3Igb2YgenJhbV9kZXN0cm95X2NvbXBzIHRvIHJlc2V0IHRoZSBjb21wcmVzc2lvbiBhbGdvcml0aG0uIFRoZXNlIGFyZSBmdW5jdGlvbmFsIGNoYW5nZXMgaW4gdGhlIHpyYW0gZHJpdmVyIHRoYXQgYXJlIHJlYWNoYWJsZSB2aWEgc3lzZnMgYXR0cmlidXRlcyAoZS5nLiwgZGlza3NpemUsIGFsZ29yaXRobV9wYXJhbXMsIHJlc2V0KSBhbmQgc2hvdWxkIGJlIGZ1enplZC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7WlJBTSYjMzQ7LAogICAgJiMzNDtaUkFNX0JBQ0tFTkRfREVGTEFURSYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3pjb21wX2NyZWF0ZSYjMzQ7LAogICAgJiMzNDtkaXNrc2l6ZV9zdG9yZSYjMzQ7LAogICAgJiMzNDthbGdvcml0aG1fcGFyYW1zX3N0b3JlJiMzNDssCiAgICAmIzM0O3Jlc2V0X3N0b3JlJiMzNDssCiAgICAmIzM0O3pyYW1fZGVzdHJveV9jb21wcyYjMzQ7LAogICAgJiMzNDtkZWZsYXRlX3NldHVwX3BhcmFtcyYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRzIHZhbGlkYXRpb24gZm9yIHRoZSBkZWZsYXRlIHdpbmJpdHMgcGFyYW1ldGVyIGFuZCBjaGFuZ2VzIHRoZSBiZWhhdmlvciBvZiB6cmFtX2Rlc3Ryb3lfY29tcHMgdG8gcmVzZXQgdGhlIGNvbXByZXNzaW9uIGFsZ29yaXRobS4gVGhlc2UgYXJlIGZ1bmN0aW9uYWwgY2hhbmdlcyBpbiB0aGUgenJhbSBkcml2ZXIgdGhhdCBhcmUgcmVhY2hhYmxlIHZpYSBzeXNmcyBhdHRyaWJ1dGVzIChlLmcuLCBkaXNrc2l6ZSwgYWxnb3JpdGhtX3BhcmFtcywgcmVzZXQpIGFuZCBzaG91bGQgYmUgZnV6emVkLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDctMzBUMTA6MDA6MjcuNzUzNzA1OTI5WiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzMzMDkzMzIyODYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiWlJBTVwiLFxuICAgIFwiWlJBTV9CQUNLRU5EX0RFRkxBVEVcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJ6Y29tcF9jcmVhdGVcIixcbiAgICBcImRpc2tzaXplX3N0b3JlXCIsXG4gICAgXCJhbGdvcml0aG1fcGFyYW1zX3N0b3JlXCIsXG4gICAgXCJyZXNldF9zdG9yZVwiLFxuICAgIFwienJhbV9kZXN0cm95X2NvbXBzXCIsXG4gICAgXCJkZWZsYXRlX3NldHVwX3BhcmFtc1wiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHMgdmFsaWRhdGlvbiBmb3IgdGhlIGRlZmxhdGUgd2luYml0cyBwYXJhbWV0ZXIgYW5kIGNoYW5nZXMgdGhlIGJlaGF2aW9yIG9mIHpyYW1fZGVzdHJveV9jb21wcyB0byByZXNldCB0aGUgY29tcHJlc3Npb24gYWxnb3JpdGhtLiBUaGVzZSBhcmUgZnVuY3Rpb25hbCBjaGFuZ2VzIGluIHRoZSB6cmFtIGRyaXZlciB0aGF0IGFyZSByZWFjaGFibGUgdmlhIHN5c2ZzIGF0dHJpYnV0ZXMgKGUuZy4sIGRpc2tzaXplLCBhbGdvcml0aG1fcGFyYW1zLCByZXNldCkgYW5kIHNob3VsZCBiZSBmdXp6ZWQuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMwVDEwOjAwOjI3Ljc1MzcxMDAwOVoiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MzA3MzAzNTczLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgNTE0ZWQ4ZWEzM2E2NGU5NTRkOWVlMTE0MjNhNjNiYzQ5ZjRhMDMyNlxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgVGh1IEp1bCAzMCAxMDowMDoyNyAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL2Jsb2NrL3pyYW0vYmFja2VuZF9kZWZsYXRlLmMgYi9kcml2ZXJzL2Jsb2NrL3pyYW0vYmFja2VuZF9kZWZsYXRlLmNcXG5pbmRleCBmOTJhNTJhNzIwZDFlLi43MjlhYzczNGRkNmMxIDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvYmxvY2svenJhbS9iYWNrZW5kX2RlZmxhdGUuY1xcbisrKyBiL2RyaXZlcnMvYmxvY2svenJhbS9iYWNrZW5kX2RlZmxhdGUuY1xcbkBAIC0yNCw4ICsyNCwxNCBAQCBzdGF0aWMgaW50IGRlZmxhdGVfc2V0dXBfcGFyYW1zKHN0cnVjdCB6Y29tcF9wYXJhbXMgKnBhcmFtcylcXG4ge1xcbiBcXHRpZiAocGFyYW1zLVxcdTAwM2VsZXZlbCA9PSBaQ09NUF9QQVJBTV9OT1RfU0VUKVxcbiBcXHRcXHRwYXJhbXMtXFx1MDAzZWxldmVsID0gWl9ERUZBVUxUX0NPTVBSRVNTSU9OO1xcbi1cXHRpZiAocGFyYW1zLVxcdTAwM2VkZWZsYXRlLndpbmJpdHMgPT0gWkNPTVBfUEFSQU1fTk9UX1NFVClcXG4rXFx0aWYgKHBhcmFtcy1cXHUwMDNlZGVmbGF0ZS53aW5iaXRzID09IFpDT01QX1BBUkFNX05PVF9TRVQpIHtcXG4gXFx0XFx0cGFyYW1zLVxcdTAwM2VkZWZsYXRlLndpbmJpdHMgPSBERUZMQVRFX0RFRl9XSU5CSVRTO1xcbitcXHR9IGVsc2Uge1xcbitcXHRcXHRzMzIgd2IgPSBwYXJhbXMtXFx1MDAzZWRlZmxhdGUud2luYml0cztcXG4rXFxuK1xcdFxcdGlmICgod2IgXFx1MDAzYyAtMTUgfHwgd2IgXFx1MDAzZSAtOSkgXFx1MDAyNlxcdTAwMjYgKHdiIFxcdTAwM2MgOSB8fCB3YiBcXHUwMDNlIDE1KSlcXG4rXFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuK1xcdH1cXG4gXFxuIFxcdHJldHVybiAwO1xcbiB9XFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jIGIvZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmNcXG5pbmRleCBhY2U2NWM1ODYwNzJiLi5lYmUyZGE5NTUxODJmIDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jXFxuKysrIGIvZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmNcXG5AQCAtMjgzNiw2ICsyODM2LDcgQEAgc3RhdGljIHZvaWQgenJhbV9kZXN0cm95X2NvbXBzKHN0cnVjdCB6cmFtICp6cmFtKVxcbiBcXHRcXHR6cmFtLVxcdTAwM2Vjb21wX2FsZ3NbcHJpb10gPSBOVUxMO1xcbiBcXG4gXFx0enJhbV9jb21wX3BhcmFtc19yZXNldCh6cmFtKTtcXG4rXFx0Y29tcF9hbGdvcml0aG1fc2V0KHpyYW0sIFpSQU1fUFJJTUFSWV9DT01QLCBkZWZhdWx0X2NvbXByZXNzb3IpO1xcbiB9XFxuIFxcbiBzdGF0aWMgdm9pZCB6cmFtX3Jlc2V0X2RldmljZShzdHJ1Y3QgenJhbSAqenJhbSlcXG5AQCAtMjg1Myw4ICsyODU0LDYgQEAgc3RhdGljIHZvaWQgenJhbV9yZXNldF9kZXZpY2Uoc3RydWN0IHpyYW0gKnpyYW0pXFxuIFxcdHpyYW1fZGVzdHJveV9jb21wcyh6cmFtKTtcXG4gXFx0bWVtc2V0KFxcdTAwMjZ6cmFtLVxcdTAwM2VzdGF0cywgMCwgc2l6ZW9mKHpyYW0tXFx1MDAzZXN0YXRzKSk7XFxuIFxcdHJlc2V0X2JkZXYoenJhbSk7XFxuLVxcbi1cXHRjb21wX2FsZ29yaXRobV9zZXQoenJhbSwgWlJBTV9QUklNQVJZX0NPTVAsIGRlZmF1bHRfY29tcHJlc3Nvcik7XFxuIH1cXG4gXFxuIHN0YXRpYyBzc2l6ZV90IGRpc2tzaXplX3N0b3JlKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMwVDEwOjAwOjI4LjA2MTY3ODE1MloiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImJlc3QtZXhwZW5zaXZlIiwiRHVyYXRpb24iOjczMDAxMzUxOTAzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIlpSQU1cIixcbiAgICBcIlpSQU1fQkFDS0VORF9ERUZMQVRFXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiemNvbXBfY3JlYXRlXCIsXG4gICAgXCJkaXNrc2l6ZV9zdG9yZVwiLFxuICAgIFwiYWxnb3JpdGhtX3BhcmFtc19zdG9yZVwiLFxuICAgIFwicmVzZXRfc3RvcmVcIixcbiAgICBcInpyYW1fZGVzdHJveV9jb21wc1wiLFxuICAgIFwiZGVmbGF0ZV9zZXR1cF9wYXJhbXNcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRzIHZhbGlkYXRpb24gZm9yIHRoZSBkZWZsYXRlIHdpbmJpdHMgcGFyYW1ldGVyIGFuZCBjaGFuZ2VzIHRoZSBiZWhhdmlvciBvZiB6cmFtX2Rlc3Ryb3lfY29tcHMgdG8gcmVzZXQgdGhlIGNvbXByZXNzaW9uIGFsZ29yaXRobS4gVGhlc2UgYXJlIGZ1bmN0aW9uYWwgY2hhbmdlcyBpbiB0aGUgenJhbSBkcml2ZXIgdGhhdCBhcmUgcmVhY2hhYmxlIHZpYSBzeXNmcyBhdHRyaWJ1dGVzIChlLmcuLCBkaXNrc2l6ZSwgYWxnb3JpdGhtX3BhcmFtcywgcmVzZXQpIGFuZCBzaG91bGQgYmUgZnV6emVkLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lXG5pZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5XG51c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLlxuXG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOlxuLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLlxuLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy5cbi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LlxuLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsXG4gIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cbi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsXG4gIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLlxuLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKVxuICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuXG5cbklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2hcbnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlxuXG5XaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzpcbjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuXG4gICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy5cbiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9uc1xuICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuXG4yLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS5cbiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbiAgIEFsc28gY2hlY2sgXCJkZXBlbmRzIG9uXCIgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzXG4gICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3NcbiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCA1MTRlZDhlYTMzYTY0ZTk1NGQ5ZWUxMTQyM2E2M2JjNDlmNGEwMzI2XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFRodSBKdWwgMzAgMTA6MDA6MjcgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9kcml2ZXJzL2Jsb2NrL3pyYW0vYmFja2VuZF9kZWZsYXRlLmMgYi9kcml2ZXJzL2Jsb2NrL3pyYW0vYmFja2VuZF9kZWZsYXRlLmNcbmluZGV4IGY5MmE1MmE3MjBkMWUuLjcyOWFjNzM0ZGQ2YzEgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL2Jsb2NrL3pyYW0vYmFja2VuZF9kZWZsYXRlLmNcbisrKyBiL2RyaXZlcnMvYmxvY2svenJhbS9iYWNrZW5kX2RlZmxhdGUuY1xuQEAgLTI0LDggKzI0LDE0IEBAIHN0YXRpYyBpbnQgZGVmbGF0ZV9zZXR1cF9wYXJhbXMoc3RydWN0IHpjb21wX3BhcmFtcyAqcGFyYW1zKVxuIHtcbiBcdGlmIChwYXJhbXMtXHUwMDNlbGV2ZWwgPT0gWkNPTVBfUEFSQU1fTk9UX1NFVClcbiBcdFx0cGFyYW1zLVx1MDAzZWxldmVsID0gWl9ERUZBVUxUX0NPTVBSRVNTSU9OO1xuLVx0aWYgKHBhcmFtcy1cdTAwM2VkZWZsYXRlLndpbmJpdHMgPT0gWkNPTVBfUEFSQU1fTk9UX1NFVClcbitcdGlmIChwYXJhbXMtXHUwMDNlZGVmbGF0ZS53aW5iaXRzID09IFpDT01QX1BBUkFNX05PVF9TRVQpIHtcbiBcdFx0cGFyYW1zLVx1MDAzZWRlZmxhdGUud2luYml0cyA9IERFRkxBVEVfREVGX1dJTkJJVFM7XG4rXHR9IGVsc2Uge1xuK1x0XHRzMzIgd2IgPSBwYXJhbXMtXHUwMDNlZGVmbGF0ZS53aW5iaXRzO1xuK1xuK1x0XHRpZiAoKHdiIFx1MDAzYyAtMTUgfHwgd2IgXHUwMDNlIC05KSBcdTAwMjZcdTAwMjYgKHdiIFx1MDAzYyA5IHx8IHdiIFx1MDAzZSAxNSkpXG4rXHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4rXHR9XG4gXG4gXHRyZXR1cm4gMDtcbiB9XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmMgYi9kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuY1xuaW5kZXggYWNlNjVjNTg2MDcyYi4uZWJlMmRhOTU1MTgyZiAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jXG4rKysgYi9kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuY1xuQEAgLTI4MzYsNiArMjgzNiw3IEBAIHN0YXRpYyB2b2lkIHpyYW1fZGVzdHJveV9jb21wcyhzdHJ1Y3QgenJhbSAqenJhbSlcbiBcdFx0enJhbS1cdTAwM2Vjb21wX2FsZ3NbcHJpb10gPSBOVUxMO1xuIFxuIFx0enJhbV9jb21wX3BhcmFtc19yZXNldCh6cmFtKTtcbitcdGNvbXBfYWxnb3JpdGhtX3NldCh6cmFtLCBaUkFNX1BSSU1BUllfQ09NUCwgZGVmYXVsdF9jb21wcmVzc29yKTtcbiB9XG4gXG4gc3RhdGljIHZvaWQgenJhbV9yZXNldF9kZXZpY2Uoc3RydWN0IHpyYW0gKnpyYW0pXG5AQCAtMjg1Myw4ICsyODU0LDYgQEAgc3RhdGljIHZvaWQgenJhbV9yZXNldF9kZXZpY2Uoc3RydWN0IHpyYW0gKnpyYW0pXG4gXHR6cmFtX2Rlc3Ryb3lfY29tcHMoenJhbSk7XG4gXHRtZW1zZXQoXHUwMDI2enJhbS1cdTAwM2VzdGF0cywgMCwgc2l6ZW9mKHpyYW0tXHUwMDNlc3RhdHMpKTtcbiBcdHJlc2V0X2JkZXYoenJhbSk7XG4tXG4tXHRjb21wX2FsZ29yaXRobV9zZXQoenJhbSwgWlJBTV9QUklNQVJZX0NPTVAsIGRlZmF1bHRfY29tcHJlc3Nvcik7XG4gfVxuIFxuIHN0YXRpYyBzc2l6ZV90IGRpc2tzaXplX3N0b3JlKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsXG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0zMFQxMDowMDoyOC4wNjE2NzkyODJaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1MDA5OTEzNTA0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgWlJBTSBQYXRjaCoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggdGhhdCB0b3VjaGVzIGBkcml2ZXJzL2Jsb2NrL3pyYW0vYmFja2VuZF9kZWZsYXRlLmNgIGFuZCBgZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmNgLiBGcm9tIHdoYXQgSSBnYXRoZXIsIHRoZSBmaXJzdCBwYXJ0IGlzIGFkZGluZyBzb21lIHZhbGlkYXRpb24gZm9yIGBwYXJhbXMtXHUwMDNlZGVmbGF0ZS53aW5iaXRzYCBpbiB0aGUgZGVmbGF0ZSBiYWNrZW5kLiBTZWVtcyBzdHJhaWdodGZvcndhcmQgZW5vdWdoOyBtYWtpbmcgc3VyZSB0aGUgd2luZG93IHNpemUgaXMgcmVhc29uYWJsZSBpcyBhIGdvb2QgcHJhY3RpY2UuXG5cbk5vdywgdGhlIG1vcmUgaW50ZXJlc3RpbmcgYml0IGlzIHRoZSBjaGFuZ2UgaW4gYHpyYW1fZHJ2LmNgLiBJdCBsb29rcyBsaWtlIHRoZXkncmUgbW92aW5nIGBjb21wX2FsZ29yaXRobV9zZXQoenJhbSwgWlJBTV9QUklNQVJZX0NPTVAsIGRlZmF1bHRfY29tcHJlc3Nvcik7YCBmcm9tIGB6cmFtX3Jlc2V0X2RldmljZWAgdG8gYHpyYW1fZGVzdHJveV9jb21wc2AuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoeS4gSXQgc2VlbXMgbGlrZSBhIGNoYW5nZSBpbiBpbml0aWFsaXphdGlvbiBvciBjbGVhbnVwLiBMZXQncyBkaWcgaW50byB0aGF0Li4uXG5cbkZpcnN0IHRoaW5ncyBmaXJzdCwgSSdsbCByZWZyZXNoIG15IG1lbW9yeSBvZiB0aGUgY29udHJvbCBmbG93IGhlcmUuIExldCdzIHNlZSwgYHpyYW1fZGVzdHJveV9jb21wc2AgaXMgY2FsbGVkIGZyb20gYHpyYW1fcmVzZXRfZGV2aWNlYCwgd2hpY2ggaXMgYSBrZXkgcGFydCBvZiB0aGUgWlJBTSBsaWZlY3ljbGUuIFdhaXQgYSBzZWNvbmQsIHdhc24ndCBgenJhbV9kZXN0cm95X2NvbXBzYCBjYWxsZWQgZnJvbSBzb21ld2hlcmUgZWxzZSB0b28/IEkgdGhpbmsgaXQgd2FzIGFsc28gY2FsbGVkIGZyb20gYHpyYW1fcmVtb3ZlYC4gSSBzaG91bGQgcXVpY2tseSB2ZXJpZnkgdGhhdCwganVzdCB0byBtYWtlIHN1cmUgbXkgdW5kZXJzdGFuZGluZyBpcyBzb2xpZC5cblxuXG4iLCJJbnB1dFRva2VucyI6MjQ4NywiT3V0cHV0VG9rZW5zIjozMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE4MywiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMwVDEwOjAwOjMzLjA3MTU5NDc2NloiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMDI5ODAyMjgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwienJhbV9kZXN0cm95X2NvbXBzXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvYmxvY2svenJhbS9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmM9MjgxMz1zdGF0aWMgdm9pZCB6cmFtX2NvbXBfcGFyYW1zX3Jlc2V0KHN0cnVjdCB6cmFtICp6cmFtKVxcbi0tXFxuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmMtMjgyMS1cXG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYzoyODIyOnN0YXRpYyB2b2lkIHpyYW1fZGVzdHJveV9jb21wcyhzdHJ1Y3QgenJhbSAqenJhbSlcXG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYy0yODIzLXtcXG4tLVxcbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jPTI4NDI9c3RhdGljIHZvaWQgenJhbV9yZXNldF9kZXZpY2Uoc3RydWN0IHpyYW0gKnpyYW0pXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYy0yODUzLVxcdHpyYW0tXFx1MDAzZWRpc2tzaXplID0gMDtcXG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYzoyODU0OlxcdHpyYW1fZGVzdHJveV9jb21wcyh6cmFtKTtcXG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYy0yODU1LVxcdG1lbXNldChcXHUwMDI2enJhbS1cXHUwMDNlc3RhdHMsIDAsIHNpemVvZih6cmFtLVxcdTAwM2VzdGF0cykpO1xcbi0tXFxuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmM9Mjg1OT1zdGF0aWMgc3NpemVfdCBkaXNrc2l6ZV9zdG9yZShzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLFxcbi0tXFxuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmMtMjkwMi1vdXRfZnJlZV9jb21wczpcXG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYzoyOTAzOlxcdHpyYW1fZGVzdHJveV9jb21wcyh6cmFtKTtcXG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYy0yOTA0LVxcdHpyYW1fbWV0YV9mcmVlKHpyYW0sIGRpc2tzaXplKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMzBUMTA6MDA6MzMuMTc0NTc5NDg0WiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDE5NDkzNDM2NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLlxuXG4qKkFuYWx5emluZyBFcnJvciBIYW5kbGluZyBpbiB6cmFtIERpc2sgU2l6ZSBDb25maWd1cmF0aW9uKipcblxuUmlnaHQsIHNvIEknbSBsb29raW5nIGF0IHRoZSBgenJhbWAgY29kZSwgc3BlY2lmaWNhbGx5IGhvdyBpdCBoYW5kbGVzIGVycm9ycyB3aGVuIHNldHRpbmcgdGhlIGRpc2sgc2l6ZS4gSSBzZWUgdGhhdCBgenJhbV9kZXN0cm95X2NvbXBzYCBpcyB0cmlnZ2VyZWQgZnJvbSBgZGlza3NpemVfc3RvcmVgIGluIHRoZSBldmVudCBvZiBhbiBlcnJvciwgc3BlY2lmaWNhbGx5IGF0IHRoYXQgYG91dF9mcmVlX2NvbXBzYCBwb2ludC4gQ3VycmVudGx5LCB0aGlzIG1lYW5zIGlmIHRoZXJlJ3MgYW4gaXNzdWUgZHVyaW5nIGEgZGlzayBzaXplIG9wZXJhdGlvbiwgd2UgY2xlYW4gdXAgY29tcHJlc3Npb24gY29tcG9uZW50cy5cblxuVGhlIGludGVyZXN0aW5nIGJpdCBpcyB0aGlzIHByb3Bvc2VkIGNoYW5nZS4gTW92aW5nIGBjb21wX2FsZ29yaXRobV9zZXRgIGludG8gYHpyYW1fZGVzdHJveV9jb21wc2AgbWVhbnMgdGhhdCB0aGUgY29tcHJlc3Npb24gYWxnb3JpdGhtIHNldHVwIHdpbGwgKmFsc28qIGJlIGNsZWFuZWQgdXAgb24gdGhlIGVycm9yIHBhdGggd2l0aGluIGBkaXNrc2l6ZV9zdG9yZWAuIFRoYXTigJlzIHNpZ25pZmljYW50LCBiZWNhdXNlIGl0IGVuc3VyZXMgYSBjb25zaXN0ZW50IGNsZWFudXAsIG5vIG1hdHRlciB3aGF0IHdlbnQgd3Jvbmcgd2hlbiBzZXR0aW5nIHRoZSBkaXNrIHNpemUuIE1ha2VzIHNlbnNlLCBpdCBrZWVwcyBldmVyeXRoaW5nIGluIHN5bmMuIFRoaXMgaXMgaW1wb3J0YW50IHRvIGNvbnNpZGVyIGFzIGl0IGNvdWxkIHByb3ZpZGUgY29uc2lzdGVudCBmYWlsdXJlIHN0YXRlcy5cblxuTm93LCBJIHNob3VsZCBxdWlja2x5IGNoZWNrIGBkZWZsYXRlX3NldHVwX3BhcmFtc2AgdG8gbWFrZSBzdXJlIHRoaXMgY2hhbmdlIGRvZXNuJ3QgaW5hZHZlcnRlbnRseSBpbXBhY3QgaG93IHdlIGNvbmZpZ3VyZSB0aGUgZGVmbGF0ZSBjb21wcmVzc2lvbi4gSXTigJlzIGFsd2F5cyBnb29kIHRvIGJlIHRob3JvdWdoIVxuXG5cbiIsIklucHV0VG9rZW5zIjozMzkyLCJPdXRwdXRUb2tlbnMiOjMzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NzYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMzBUMTA6MDA6MzcuMzY5NTE2NjE4WiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjY5MjMwNTM1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImRlZmxhdGVfc2V0dXBfcGFyYW1zXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvYmxvY2svenJhbS9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9ibG9jay96cmFtL2JhY2tlbmRfZGVmbGF0ZS5jPTE5PXN0YXRpYyB2b2lkIGRlZmxhdGVfcmVsZWFzZV9wYXJhbXMoc3RydWN0IHpjb21wX3BhcmFtcyAqcGFyYW1zKVxcbi0tXFxuZHJpdmVycy9ibG9jay96cmFtL2JhY2tlbmRfZGVmbGF0ZS5jLTIyLVxcbmRyaXZlcnMvYmxvY2svenJhbS9iYWNrZW5kX2RlZmxhdGUuYzoyMzpzdGF0aWMgaW50IGRlZmxhdGVfc2V0dXBfcGFyYW1zKHN0cnVjdCB6Y29tcF9wYXJhbXMgKnBhcmFtcylcXG5kcml2ZXJzL2Jsb2NrL3pyYW0vYmFja2VuZF9kZWZsYXRlLmMtMjQte1xcbi0tXFxuZHJpdmVycy9ibG9jay96cmFtL2JhY2tlbmRfZGVmbGF0ZS5jPTE0Nj1jb25zdCBzdHJ1Y3QgemNvbXBfb3BzIGJhY2tlbmRfZGVmbGF0ZSA9IHtcXG4tLVxcbmRyaXZlcnMvYmxvY2svenJhbS9iYWNrZW5kX2RlZmxhdGUuYy0xNTAtXFx0LmRlc3Ryb3lfY3R4XFx0PSBkZWZsYXRlX2Rlc3Ryb3ksXFxuZHJpdmVycy9ibG9jay96cmFtL2JhY2tlbmRfZGVmbGF0ZS5jOjE1MTpcXHQuc2V0dXBfcGFyYW1zXFx0PSBkZWZsYXRlX3NldHVwX3BhcmFtcyxcXG5kcml2ZXJzL2Jsb2NrL3pyYW0vYmFja2VuZF9kZWZsYXRlLmMtMTUyLVxcdC5yZWxlYXNlX3BhcmFtc1xcdD0gZGVmbGF0ZV9yZWxlYXNlX3BhcmFtcyxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMzBUMTA6MDA6MzcuNDM4NzYwODgzWiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Mjk4NjA2ODExNSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBhbiBleHBlcnQncyBpbnRlcm5hbCBtb25vbG9ndWU6XG5cbioqQ2hlY2tpbmcgYHpjb21wX29wc2AgYW5kIGBzZXR1cF9wYXJhbXNgKipcblxuQWxyaWdodCwgYmVmb3JlIGRpdmluZyBpbnRvIGFueXRoaW5nIGRlZXBlciwgSSBuZWVkIHRvIGdyb3VuZCBteXNlbGYuIExldCdzIHN0YXJ0IHdpdGggYSBxdWljayBhdWRpdCBvZiBgemNvbXBfb3BzYCBhbmQgYHNldHVwX3BhcmFtc2AuIEkgbmVlZCB0byBlbnN1cmUgdGhlIGNvcmUgb3BlcmF0aW9uYWwgY29tcG9uZW50IG9mIGB6Y29tcF9vcHNgIGlzIGNvcnJlY3RseSBpbml0aWFsaXplZCwgZ2l2ZW4gaXRzIGZ1bmRhbWVudGFsIHJvbGUuIFVuZGVyc3RhbmRpbmcgdGhlIGN1cnJlbnQgY29uZmlndXJhdGlvbiBvZiBgc2V0dXBfcGFyYW1zYCB3aWxsIGdpdmUgbWUgY3JpdGljYWwgaW5zaWdodCBpbnRvIHRoZSBzeXN0ZW0ncyBiYXNlbGluZS4gSXQncyB0b28gZWFzeSB0byBtaXNzIHNvbWV0aGluZyB3aGVuIHlvdSdyZSBkZWVwbHkgaW5ncmFpbmVkLCBzbyBhIGJyaWVmIHJldmlldyBzaG91bGQgcHJvdmlkZSBjbGFyaXR5LiBGcm9tIHRoZXJlLCBJIGNhbiBkZXRlcm1pbmUgd2hlcmUgSSBuZWVkIHRvIGZvY3VzIG15IGF0dGVudGlvbi4gSXQncyBvZnRlbiBiZXN0IHRvIGFkZHJlc3MgcG90ZW50aWFsIHByb2JsZW1zIGF0IHRoZSBzb3VyY2UsIHByZXZlbnRpbmcgbW9yZSBjb21wbGV4IGlzc3VlcyBkb3duIHRoZSBsaW5lLlxuXG5cbiIsIklucHV0VG9rZW5zIjozOTk0LCJPdXRwdXRUb2tlbnMiOjMwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMzBUMTA6MDA6NDAuNDI0ODMwODg4WiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEzNDY1NzU2MSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJzZXR1cF9wYXJhbXNcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9ibG9jay96cmFtL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL2Jsb2NrL3pyYW0vYmFja2VuZF84NDIuYz0xMD1zdGF0aWMgdm9pZCByZWxlYXNlX3BhcmFtc184NDIoc3RydWN0IHpjb21wX3BhcmFtcyAqcGFyYW1zKVxcbi0tXFxuZHJpdmVycy9ibG9jay96cmFtL2JhY2tlbmRfODQyLmMtMTMtXFxuZHJpdmVycy9ibG9jay96cmFtL2JhY2tlbmRfODQyLmM6MTQ6c3RhdGljIGludCBzZXR1cF9wYXJhbXNfODQyKHN0cnVjdCB6Y29tcF9wYXJhbXMgKnBhcmFtcylcXG5kcml2ZXJzL2Jsb2NrL3pyYW0vYmFja2VuZF84NDIuYy0xNS17XFxuLS1cXG5kcml2ZXJzL2Jsb2NrL3pyYW0vYmFja2VuZF84NDIuYz01Mz1jb25zdCBzdHJ1Y3QgemNvbXBfb3BzIGJhY2tlbmRfODQyID0ge1xcbi0tXFxuZHJpdmVycy9ibG9jay96cmFtL2JhY2tlbmRfODQyLmMtNTctXFx0LmRlc3Ryb3lfY3R4XFx0PSBkZXN0cm95Xzg0MixcXG5kcml2ZXJzL2Jsb2NrL3pyYW0vYmFja2VuZF84NDIuYzo1ODpcXHQuc2V0dXBfcGFyYW1zXFx0PSBzZXR1cF9wYXJhbXNfODQyLFxcbmRyaXZlcnMvYmxvY2svenJhbS9iYWNrZW5kXzg0Mi5jLTU5LVxcdC5yZWxlYXNlX3BhcmFtc1xcdD0gcmVsZWFzZV9wYXJhbXNfODQyLFxcbi0tXFxuZHJpdmVycy9ibG9jay96cmFtL2JhY2tlbmRfZGVmbGF0ZS5jPTE5PXN0YXRpYyB2b2lkIGRlZmxhdGVfcmVsZWFzZV9wYXJhbXMoc3RydWN0IHpjb21wX3BhcmFtcyAqcGFyYW1zKVxcbi0tXFxuZHJpdmVycy9ibG9jay96cmFtL2JhY2tlbmRfZGVmbGF0ZS5jLTIyLVxcbmRyaXZlcnMvYmxvY2svenJhbS9iYWNrZW5kX2RlZmxhdGUuYzoyMzpzdGF0aWMgaW50IGRlZmxhdGVfc2V0dXBfcGFyYW1zKHN0cnVjdCB6Y29tcF9wYXJhbXMgKnBhcmFtcylcXG5kcml2ZXJzL2Jsb2NrL3pyYW0vYmFja2VuZF9kZWZsYXRlLmMtMjQte1xcbi0tXFxuZHJpdmVycy9ibG9jay96cmFtL2JhY2tlbmRfZGVmbGF0ZS5jPTE0Nj1jb25zdCBzdHJ1Y3QgemNvbXBfb3BzIGJhY2tlbmRfZGVmbGF0ZSA9IHtcXG4tLVxcbmRyaXZlcnMvYmxvY2svenJhbS9iYWNrZW5kX2RlZmxhdGUuYy0xNTAtXFx0LmRlc3Ryb3lfY3R4XFx0PSBkZWZsYXRlX2Rlc3Ryb3ksXFxuZHJpdmVycy9ibG9jay96cmFtL2JhY2tlbmRfZGVmbGF0ZS5jOjE1MTpcXHQuc2V0dXBfcGFyYW1zXFx0PSBkZWZsYXRlX3NldHVwX3BhcmFtcyxcXG5kcml2ZXJzL2Jsb2NrL3pyYW0vYmFja2VuZF9kZWZsYXRlLmMtMTUyLVxcdC5yZWxlYXNlX3BhcmFtc1xcdD0gZGVmbGF0ZV9yZWxlYXNlX3BhcmFtcyxcXG4tLVxcbmRyaXZlcnMvYmxvY2svenJhbS9iYWNrZW5kX2x6NC5jPTE1PXN0YXRpYyB2b2lkIGx6NF9yZWxlYXNlX3BhcmFtcyhzdHJ1Y3QgemNvbXBfcGFyYW1zICpwYXJhbXMpXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL3pyYW0vYmFja2VuZF9sejQuYy0yNS1cXG5kcml2ZXJzL2Jsb2NrL3pyYW0vYmFja2VuZF9sejQuYzoyNjpzdGF0aWMgaW50IGx6NF9zZXR1cF9wYXJhbXMoc3RydWN0IHpjb21wX3BhcmFtcyAqcGFyYW1zKVxcbmRyaXZlcnMvYmxvY2svenJhbS9iYWNrZW5kX2x6NC5jLTI3LXtcXG4tLVxcbmRyaXZlcnMvYmxvY2svenJhbS9iYWNrZW5kX2x6NC5jPTE0Mj1jb25zdCBzdHJ1Y3QgemNvbXBfb3BzIGJhY2tlbmRfbHo0ID0ge1xcbi0tXFxuZHJpdmVycy9ibG9jay96cmFtL2JhY2tlbmRfbHo0LmMtMTQ2LVxcdC5kZXN0cm95X2N0eFxcdD0gbHo0X2Rlc3Ryb3ksXFxuZHJpdmVycy9ibG9jay96cmFtL2JhY2tlbmRfbHo0LmM6MTQ3OlxcdC5zZXR1cF9wYXJhbXNcXHQ9IGx6NF9zZXR1cF9wYXJhbXMsXFxuZHJpdmVycy9ibG9jay96cmFtL2JhY2tlbmRfbHo0LmMtMTQ4LVxcdC5yZWxlYXNlX3BhcmFtc1xcdD0gbHo0X3JlbGVhc2VfcGFyYW1zLFxcbi0tXFxuZHJpdmVycy9ibG9jay96cmFtL2JhY2tlbmRfbHo0aGMuYz0xNT1zdGF0aWMgdm9pZCBsejRoY19yZWxlYXNlX3BhcmFtcyhzdHJ1Y3QgemNvbXBfcGFyYW1zICpwYXJhbXMpXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL3pyYW0vYmFja2VuZF9sejRoYy5jLTE4LVxcbmRyaXZlcnMvYmxvY2svenJhbS9iYWNrZW5kX2x6NGhjLmM6MTk6c3RhdGljIGludCBsejRoY19zZXR1cF9wYXJhbXMoc3RydWN0IHpjb21wX3BhcmFtcyAqcGFyYW1zKVxcbmRyaXZlcnMvYmxvY2svenJhbS9iYWNrZW5kX2x6NGhjLmMtMjAte1xcbi0tXFxuZHJpdmVycy9ibG9jay96cmFtL2JhY2tlbmRfbHo0aGMuYz0xMjA9Y29uc3Qgc3RydWN0IHpjb21wX29wcyBiYWNrZW5kX2x6NGhjID0ge1xcbi0tXFxuZHJpdmVycy9ibG9jay96cmFtL2JhY2tlbmRfbHo0aGMuYy0xMjQtXFx0LmRlc3Ryb3lfY3R4XFx0PSBsejRoY19kZXN0cm95LFxcbmRyaXZlcnMvYmxvY2svenJhbS9iYWNrZW5kX2x6NGhjLmM6MTI1OlxcdC5zZXR1cF9wYXJhbXNcXHQ9IGx6NGhjX3NldHVwX3BhcmFtcyxcXG5kcml2ZXJzL2Jsb2NrL3pyYW0vYmFja2VuZF9sejRoYy5jLTEyNi1cXHQucmVsZWFzZV9wYXJhbXNcXHQ9IGx6NGhjX3JlbGVhc2VfcGFyYW1zLFxcbi0tXFxuZHJpdmVycy9ibG9jay96cmFtL2JhY2tlbmRfbHpvLmM9OT1zdGF0aWMgdm9pZCBsem9fcmVsZWFzZV9wYXJhbXMoc3RydWN0IHpjb21wX3BhcmFtcyAqcGFyYW1zKVxcbi0tXFxuZHJpdmVycy9ibG9jay96cmFtL2JhY2tlbmRfbHpvLmMtMTItXFxuZHJpdmVycy9ibG9jay96cmFtL2JhY2tlbmRfbHpvLmM6MTM6c3RhdGljIGludCBsem9fc2V0dXBfcGFyYW1zKHN0cnVjdCB6Y29tcF9wYXJhbXMgKnBhcmFtcylcXG5kcml2ZXJzL2Jsb2NrL3pyYW0vYmFja2VuZF9sem8uYy0xNC17XFxuLS1cXG5kcml2ZXJzL2Jsb2NrL3pyYW0vYmFja2VuZF9sem8uYz01MT1jb25zdCBzdHJ1Y3QgemNvbXBfb3BzIGJhY2tlbmRfbHpvID0ge1xcbi0tXFxuZHJpdmVycy9ibG9jay96cmFtL2JhY2tlbmRfbHpvLmMtNTUtXFx0LmRlc3Ryb3lfY3R4XFx0PSBsem9fZGVzdHJveSxcXG5kcml2ZXJzL2Jsb2NrL3pyYW0vYmFja2VuZF9sem8uYzo1NjpcXHQuc2V0dXBfcGFyYW1zXFx0PSBsem9fc2V0dXBfcGFyYW1zLFxcbmRyaXZlcnMvYmxvY2svenJhbS9iYWNrZW5kX2x6by5jLTU3LVxcdC5yZWxlYXNlX3BhcmFtc1xcdD0gbHpvX3JlbGVhc2VfcGFyYW1zLFxcbi0tXFxuZHJpdmVycy9ibG9jay96cmFtL2JhY2tlbmRfbHpvcmxlLmM9OT1zdGF0aWMgdm9pZCBsem9ybGVfcmVsZWFzZV9wYXJhbXMoc3RydWN0IHpjb21wX3BhcmFtcyAqcGFyYW1zKVxcbi0tXFxuZHJpdmVycy9ibG9jay96cmFtL2JhY2tlbmRfbHpvcmxlLmMtMTItXFxuZHJpdmVycy9ibG9jay96cmFtL2JhY2tlbmRfbHpvcmxlLmM6MTM6c3RhdGljIGludCBsem9ybGVfc2V0dXBfcGFyYW1zKHN0cnVjdCB6Y29tcF9wYXJhbXMgKnBhcmFtcylcXG5kcml2ZXJzL2Jsb2NrL3pyYW0vYmFja2VuZF9sem9ybGUuYy0xNC17XFxuLS1cXG5kcml2ZXJzL2Jsb2NrL3pyYW0vYmFja2VuZF9sem9ybGUuYz01MT1jb25zdCBzdHJ1Y3QgemNvbXBfb3BzIGJhY2tlbmRfbHpvcmxlID0ge1xcbi0tXFxuZHJpdmVycy9ibG9jay96cmFtL2JhY2tlbmRfbHpvcmxlLmMtNTUtXFx0LmRlc3Ryb3lfY3R4XFx0PSBsem9ybGVfZGVzdHJveSxcXG5kcml2ZXJzL2Jsb2NrL3pyYW0vYmFja2VuZF9sem9ybGUuYzo1NjpcXHQuc2V0dXBfcGFyYW1zXFx0PSBsem9ybGVfc2V0dXBfcGFyYW1zLFxcbmRyaXZlcnMvYmxvY2svenJhbS9iYWNrZW5kX2x6b3JsZS5jLTU3LVxcdC5yZWxlYXNlX3BhcmFtc1xcdD0gbHpvcmxlX3JlbGVhc2VfcGFyYW1zLFxcbi0tXFxuZHJpdmVycy9ibG9jay96cmFtL2JhY2tlbmRfenN0ZC5jPTM4PXN0YXRpYyB2b2lkIHpzdGRfcmVsZWFzZV9wYXJhbXMoc3RydWN0IHpjb21wX3BhcmFtcyAqcGFyYW1zKVxcbi0tXFxuZHJpdmVycy9ibG9jay96cmFtL2JhY2tlbmRfenN0ZC5jLTUwLVxcbmRyaXZlcnMvYmxvY2svenJhbS9iYWNrZW5kX3pzdGQuYzo1MTpzdGF0aWMgaW50IHpzdGRfc2V0dXBfcGFyYW1zKHN0cnVjdCB6Y29tcF9wYXJhbXMgKnBhcmFtcylcXG5kcml2ZXJzL2Jsb2NrL3pyYW0vYmFja2VuZF96c3RkLmMtNTIte1xcbi0tXFxuZHJpdmVycy9ibG9jay96cmFtL2JhY2tlbmRfenN0ZC5jPTIwOT1jb25zdCBzdHJ1Y3QgemNvbXBfb3BzIGJhY2tlbmRfenN0ZCA9IHtcXG4tLVxcbmRyaXZlcnMvYmxvY2svenJhbS9iYWNrZW5kX3pzdGQuYy0yMTMtXFx0LmRlc3Ryb3lfY3R4XFx0PSB6c3RkX2Rlc3Ryb3ksXFxuZHJpdmVycy9ibG9jay96cmFtL2JhY2tlbmRfenN0ZC5jOjIxNDpcXHQuc2V0dXBfcGFyYW1zXFx0PSB6c3RkX3NldHVwX3BhcmFtcyxcXG5kcml2ZXJzL2Jsb2NrL3pyYW0vYmFja2VuZF96c3RkLmMtMjE1LVxcdC5yZWxlYXNlX3BhcmFtc1xcdD0genN0ZF9yZWxlYXNlX3BhcmFtcyxcXG4tLVxcbmRyaXZlcnMvYmxvY2svenJhbS96Y29tcC5jPTE5Nz1zdGF0aWMgaW50IHpjb21wX2luaXQoc3RydWN0IHpjb21wICpjb21wLCBzdHJ1Y3QgemNvbXBfcGFyYW1zICpwYXJhbXMpXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL3pyYW0vemNvbXAuYy0yMDUtXFx0Y29tcC1cXHUwMDNlcGFyYW1zID0gcGFyYW1zO1xcbmRyaXZlcnMvYmxvY2svenJhbS96Y29tcC5jOjIwNjpcXHRyZXQgPSBjb21wLVxcdTAwM2VvcHMtXFx1MDAzZXNldHVwX3BhcmFtcyhjb21wLVxcdTAwM2VwYXJhbXMpO1xcbmRyaXZlcnMvYmxvY2svenJhbS96Y29tcC5jLTIwNy1cXHRpZiAocmV0KVxcbi0tXFxuZHJpdmVycy9ibG9jay96cmFtL3pjb21wLmg9NTc9c3RydWN0IHpjb21wX29wcyB7XFxuLS1cXG5kcml2ZXJzL2Jsb2NrL3pyYW0vemNvbXAuaC02NS1cXG5kcml2ZXJzL2Jsb2NrL3pyYW0vemNvbXAuaDo2NjpcXHRpbnQgKCpzZXR1cF9wYXJhbXMpKHN0cnVjdCB6Y29tcF9wYXJhbXMgKnBhcmFtcyk7XFxuZHJpdmVycy9ibG9jay96cmFtL3pjb21wLmgtNjctXFx0dm9pZCAoKnJlbGVhc2VfcGFyYW1zKShzdHJ1Y3QgemNvbXBfcGFyYW1zICpwYXJhbXMpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0zMFQxMDowMDo0MC41NTk0OTIwNDlaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMTE3MDIxMTI2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBJIHdlcmUgYW5hbHl6aW5nIHRoaXMgY29kZTpcblxuKipEaXZpbmcgaW50byB0aGUgSW5pdGlhbGl6YXRpb24qKlxuXG5Pa2F5LCBzbyBgemNvbXBfaW5pdGAgaXMgdGhlIGVudHJ5IHBvaW50LCBuYXR1cmFsbHkuIEl0IGNhbGxzIGBjb21wLVx1MDAzZW9wcy1cdTAwM2VzZXR1cF9wYXJhbXNgLCB3aGljaCBpcyB3aGVyZSB0aGUgcmVhbCBjb25maWd1cmF0aW9uIHByb2JhYmx5IGhhcHBlbnMuIE15IGZpcnN0IHRob3VnaHQgaXM6IEkgbmVlZCB0byB0cmFjZSBiYWNrIGZyb20gdGhpcyBmdW5jdGlvbiBjYWxsLiBVbmRlcnN0YW5kaW5nIHRoZSBpbml0aWFsaXphdGlvbiBzZXF1ZW5jZSBpcyBjcnVjaWFsIHRvIHVuZGVyc3RhbmRpbmcgdGhlIHN5c3RlbSdzIG92ZXJhbGwgYmVoYXZpb3IuIFNvLCBteSBuZXh0IGxvZ2ljYWwgc3RlcCBpcyB0byBzZWUgZXhhY3RseSAqd2hlcmUqIGB6Y29tcF9pbml0YCBnZXRzIGNhbGxlZC4gVGhhdCB3aWxsIHByb3ZpZGUgY3JpdGljYWwgY29udGV4dDogV2hhdCB0cmlnZ2VycyB0aGUgaW5pdGlhbGl6YXRpb24sIGFuZCBob3cgdGhlIHN1cnJvdW5kaW5nIGVudmlyb25tZW50IGlzIHNldCB1cC4gS25vd2luZyB0aGUgY2FsbGVyIGZ1bmN0aW9uKHMpIGdpdmVzIG1lIGEgY3JpdGljYWwgdW5kZXJzdGFuZGluZyBvZiB0aGUgaW5pdGlhbGl6YXRpb24gZmxvdy5cblxuXG4iLCJJbnB1dFRva2VucyI6NjE3OCwiT3V0cHV0VG9rZW5zIjozMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMxLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMwVDEwOjAwOjQzLjY3NjUxNDk4NVoiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTM1NTkwNzgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiemNvbXBfaW5pdFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL2Jsb2NrL3pyYW0vXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvYmxvY2svenJhbS96Y29tcC5jPTE4Nj1pbnQgemNvbXBfY3B1X2RlYWQodW5zaWduZWQgaW50IGNwdSwgc3RydWN0IGhsaXN0X25vZGUgKm5vZGUpXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL3pyYW0vemNvbXAuYy0xOTYtXFxuZHJpdmVycy9ibG9jay96cmFtL3pjb21wLmM6MTk3OnN0YXRpYyBpbnQgemNvbXBfaW5pdChzdHJ1Y3QgemNvbXAgKmNvbXAsIHN0cnVjdCB6Y29tcF9wYXJhbXMgKnBhcmFtcylcXG5kcml2ZXJzL2Jsb2NrL3pyYW0vemNvbXAuYy0xOTgte1xcbi0tXFxuZHJpdmVycy9ibG9jay96cmFtL3pjb21wLmM9MjMzPXN0cnVjdCB6Y29tcCAqemNvbXBfY3JlYXRlKGNvbnN0IGNoYXIgKmFsZywgc3RydWN0IHpjb21wX3BhcmFtcyAqcGFyYW1zKVxcbi0tXFxuZHJpdmVycy9ibG9jay96cmFtL3pjb21wLmMtMjU1LVxcbmRyaXZlcnMvYmxvY2svenJhbS96Y29tcC5jOjI1NjpcXHRlcnJvciA9IHpjb21wX2luaXQoY29tcCwgcGFyYW1zKTtcXG5kcml2ZXJzL2Jsb2NrL3pyYW0vemNvbXAuYy0yNTctXFx0aWYgKGVycm9yKSB7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMwVDEwOjAwOjQzLjczMDA3ODE0M1oiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNTQwNTY2OTIyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIGFzc3VtaW5nIEknbSBhbiBleHBlcnQgaW4gdGhpcyBmaWVsZCwgcHJlc2VudGVkIGFzIGEgZmlyc3QtcGVyc29uIHN1bW1hcnk6XG5cbioqRGlnZ2luZyBpbnRvIHRoZSBgemNvbXBfY3JlYXRlYCBGdW5jdGlvbioqXG5cblJpZ2h0LCBgemNvbXBfY3JlYXRlYCBraWNrcyBvZmYgYnkgY2FsbGluZyBgemNvbXBfaW5pdGAuIE1ha2VzIHNlbnNlIOKAkyBpbml0aWFsaXphdGlvbiB1c3VhbGx5IGNvbWVzIGZpcnN0LiBOb3csIHRoZSByZWFsIHF1ZXN0aW9uIGlzLCB3aG8gKnVzZXMqIGB6Y29tcF9jcmVhdGVgPyBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgY29udGV4dCBvZiBpdHMgY2FsbHMgdG8gZnVsbHkgZ3Jhc3AgaXRzIHJvbGUgYW5kIHBvdGVudGlhbCBpbXBhY3QuIFNvLCB0aW1lIHRvIHRyYWNlIHRob3NlIGNhbGxzIGFuZCBzZWUgd2hlcmUgdGhpcyB0aGluZyBpcyBhY3R1YWxseSBiZWluZyBpbnZva2VkLiBMZXQncyBzZWUgd2hhdCB0aGUgY2FsbCBzdGFjayByZXZlYWxzLlxuXG5cbiIsIklucHV0VG9rZW5zIjo2NjI1LCJPdXRwdXRUb2tlbnMiOjMxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMzBUMTA6MDA6NDcuMjcwNjQ3MzY1WiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0MjQyNTQ2MSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ6Y29tcF9jcmVhdGVcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9ibG9jay96cmFtL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL2Jsb2NrL3pyYW0vemNvbXAuYz0yMjU9dm9pZCB6Y29tcF9kZXN0cm95KHN0cnVjdCB6Y29tcCAqY29tcClcXG4tLVxcbmRyaXZlcnMvYmxvY2svenJhbS96Y29tcC5jLTIzMi1cXG5kcml2ZXJzL2Jsb2NrL3pyYW0vemNvbXAuYzoyMzM6c3RydWN0IHpjb21wICp6Y29tcF9jcmVhdGUoY29uc3QgY2hhciAqYWxnLCBzdHJ1Y3QgemNvbXBfcGFyYW1zICpwYXJhbXMpXFxuZHJpdmVycy9ibG9jay96cmFtL3pjb21wLmMtMjM0LXtcXG4tLVxcbmRyaXZlcnMvYmxvY2svenJhbS96Y29tcC5oPTgzPWNvbnN0IGNoYXIgKnpjb21wX2xvb2t1cF9iYWNrZW5kX25hbWUoY29uc3QgY2hhciAqY29tcCk7XFxuZHJpdmVycy9ibG9jay96cmFtL3pjb21wLmgtODQtXFxuZHJpdmVycy9ibG9jay96cmFtL3pjb21wLmg6ODU6c3RydWN0IHpjb21wICp6Y29tcF9jcmVhdGUoY29uc3QgY2hhciAqYWxnLCBzdHJ1Y3QgemNvbXBfcGFyYW1zICpwYXJhbXMpO1xcbmRyaXZlcnMvYmxvY2svenJhbS96Y29tcC5oLTg2LXZvaWQgemNvbXBfZGVzdHJveShzdHJ1Y3QgemNvbXAgKmNvbXApO1xcbi0tXFxuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmM9Mjg1OT1zdGF0aWMgc3NpemVfdCBkaXNrc2l6ZV9zdG9yZShzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLFxcbi0tXFxuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmMtMjg4NS1cXG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYzoyODg2OlxcdFxcdGNvbXAgPSB6Y29tcF9jcmVhdGUoenJhbS1cXHUwMDNlY29tcF9hbGdzW3ByaW9dLFxcbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jLTI4ODctXFx0XFx0XFx0XFx0ICAgIFxcdTAwMjZ6cmFtLVxcdTAwM2VwYXJhbXNbcHJpb10pO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0zMFQxMDowMDo0Ny4zMTMwNzcyMTZaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDgyMTY5MDMwNCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBbmFseXNpcyBvZiB0aGUgenJhbSBEcml2ZXIncyBDb21wcmVzc2lvbiBMb2dpYyoqXG5cbk9rYXksIHNvIGhlcmUncyB3aGF0IEkndmUgZ290IGluIG15IGhlYWQ6IGB6Y29tcF9jcmVhdGVgIGlzIGJlaW5nIGNhbGxlZCB3aXRoaW4gdGhlIGBkaXNrc2l6ZV9zdG9yZWAgZnVuY3Rpb24uIFRoYXQncyB0aGUgZW50cnkgcG9pbnQsIHJpZ2h0PyBTbyBgZGlza3NpemVfc3RvcmVgIGtpY2tzIG9mZiBgemNvbXBfY3JlYXRlYCwgd2hpY2ggdGhlbiBjYWxscyBgemNvbXBfaW5pdGAsIHdoaWNoIGluIHR1cm4gbGVhZHMgdG8gYHNldHVwX3BhcmFtc2AsIGFuZCBmaW5hbGx5IHRvIGBkZWZsYXRlX3NldHVwX3BhcmFtc2AgaWYgdGhlIGNvbXByZXNzaW9uIGFsZ29yaXRobSBpcywgd2VsbCwgZGVmbGF0ZS4gQW5kLCBqdXN0IHRvIGJlIGNsZWFyLCBgZGlza3NpemVfc3RvcmVgIGlzIGEgc3lzZnMgc3RvcmUgZnVuY3Rpb24uIFxuXG5Ob3csIGNhbiB0aGlzIHdob2xlIGNoYWluIG9mIGV2ZW50cyBhY3R1YWxseSBoYXBwZW4gaW4gYSB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudD8gQWJzb2x1dGVseS4gWnJhbSBpcyBhIGJsb2NrIGRldmljZSBhbmQgaXRzIHN5c2ZzIGF0dHJpYnV0ZXMgYXJlIGFjY2Vzc2libGUsIHNvIHRoYXQncyBhIGRlZmluaXRlIFwieWVzLlwiXG5cblRoZSBjcml0aWNhbCBxdWVzdGlvbiBub3cgaXMsIGlzIHRoaXMgc29tZXRoaW5nIHdvcnRoIGRlZGljYXRpbmcgdGltZSB0byBmdXp6aW5nPyBBYnNvbHV0ZWx5LCB3aXRob3V0IGEgZG91YnQuIFdlJ3JlIHRhbGtpbmcgYWJvdXQgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgenJhbSBkcml2ZXIuIFRoZXJlJ3MgdmFsaWRhdGlvbiBiZWluZyBhZGRlZCBmb3IgdGhlIGB3aW5iaXRzYCBwYXJhbWV0ZXIsIGFuZCBzb21lIGNvZGUgaXMgYmVpbmcgbW92ZWQgYXJvdW5kIGNvbmNlcm5pbmcgYGNvbXBfYWxnb3JpdGhtX3NldGAuIFRoYXQncyBhIHRhcmdldC1yaWNoIGVudmlyb25tZW50LlxuXG5TcGVjaWZpY2FsbHksIHRoZSBgZGVmbGF0ZV9zZXR1cF9wYXJhbXNgIGZ1bmN0aW9uIGlzIHJlYWNoZWQgd2hlbiB3ZSBhcmUgc2V0dGluZyB1cCBkZWZsYXRlIGNvbXByZXNzaW9uIGZvciB0aGUgenJhbSBkZXZpY2UuIEFsc28sIHRoZSBgenJhbV9kZXN0cm95X2NvbXBzYCBpcyByZWFjaGFibGUgd2hlbiByZXNldHRpbmcgdGhlIGRldmljZSBvciBlbmNvdW50ZXJpbmcgYW4gZXJyb3IgaW4gdGhlIGBkaXNrc2l6ZV9zdG9yZWAgZnVuY3Rpb24uXG5cbk5vdywgSSBzaG91bGQgcXVpY2tseSBjaGVjayB0aGUgcmVxdWlyZWQgY29uZmlndXJhdGlvbnMgZm9yIHpyYW0uIExldCdzIHNlZSB3aGF0J3MgbmVlZGVkIGZvciB0aGUgZnVsbCBwaWN0dXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjo3MTg3LCJPdXRwdXRUb2tlbnMiOjMwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjAwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMwVDEwOjAwOjUyLjEzNDc2OTk0WiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NTIwMjMxMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgWlJBTVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL2Jsb2NrL3pyYW0vXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnLTEtIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxcbmRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnOjI6Y29uZmlnIFpSQU1cXG5kcml2ZXJzL2Jsb2NrL3pyYW0vS2NvbmZpZy0zLVxcdHRyaXN0YXRlIFxcXCJDb21wcmVzc2VkIFJBTSBibG9jayBkZXZpY2Ugc3VwcG9ydFxcXCJcXG4tLVxcbmRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnLTE2LVxcbmRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnOjE3OmNvbmZpZyBaUkFNX0JBQ0tFTkRfTFo0XFxuZHJpdmVycy9ibG9jay96cmFtL0tjb25maWctMTgtXFx0Ym9vbCBcXFwibHo0IGNvbXByZXNzaW9uIHN1cHBvcnRcXFwiXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL3pyYW0vS2NvbmZpZy0yMi1cXG5kcml2ZXJzL2Jsb2NrL3pyYW0vS2NvbmZpZzoyMzpjb25maWcgWlJBTV9CQUNLRU5EX0xaNEhDXFxuZHJpdmVycy9ibG9jay96cmFtL0tjb25maWctMjQtXFx0Ym9vbCBcXFwibHo0aGMgY29tcHJlc3Npb24gc3VwcG9ydFxcXCJcXG4tLVxcbmRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnLTI4LVxcbmRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnOjI5OmNvbmZpZyBaUkFNX0JBQ0tFTkRfWlNURFxcbmRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnLTMwLVxcdGJvb2wgXFxcInpzdGQgY29tcHJlc3Npb24gc3VwcG9ydFxcXCJcXG4tLVxcbmRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnLTM0LVxcbmRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnOjM1OmNvbmZpZyBaUkFNX0JBQ0tFTkRfREVGTEFURVxcbmRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnLTM2LVxcdGJvb2wgXFxcImRlZmxhdGUgY29tcHJlc3Npb24gc3VwcG9ydFxcXCJcXG4tLVxcbmRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnLTQwLVxcbmRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnOjQxOmNvbmZpZyBaUkFNX0JBQ0tFTkRfODQyXFxuZHJpdmVycy9ibG9jay96cmFtL0tjb25maWctNDItXFx0Ym9vbCBcXFwiODQyIGNvbXByZXNzaW9uIHN1cHBvcnRcXFwiXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL3pyYW0vS2NvbmZpZy00Ni1cXG5kcml2ZXJzL2Jsb2NrL3pyYW0vS2NvbmZpZzo0Nzpjb25maWcgWlJBTV9CQUNLRU5EX0ZPUkNFX0xaT1xcbmRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnLTQ4LVxcdGRlcGVuZHMgb24gWlJBTVxcbi0tXFxuZHJpdmVycy9ibG9jay96cmFtL0tjb25maWctNTItXFxuZHJpdmVycy9ibG9jay96cmFtL0tjb25maWc6NTM6Y29uZmlnIFpSQU1fQkFDS0VORF9MWk9cXG5kcml2ZXJzL2Jsb2NrL3pyYW0vS2NvbmZpZy01NC1cXHRib29sIFxcXCJsem8gYW5kIGx6by1ybGUgY29tcHJlc3Npb24gc3VwcG9ydFxcXCIgaWYgIVpSQU1fQkFDS0VORF9GT1JDRV9MWk9cXG4tLVxcbmRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnPTYwPWNob2ljZVxcbi0tXFxuZHJpdmVycy9ibG9jay96cmFtL0tjb25maWctNjQtXFxuZHJpdmVycy9ibG9jay96cmFtL0tjb25maWc6NjU6Y29uZmlnIFpSQU1fREVGX0NPTVBfTFpPUkxFXFxuZHJpdmVycy9ibG9jay96cmFtL0tjb25maWctNjYtXFx0Ym9vbCBcXFwibHpvLXJsZVxcXCJcXG4tLVxcbmRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnLTY4LVxcbmRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnOjY5OmNvbmZpZyBaUkFNX0RFRl9DT01QX0xaT1xcbmRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnLTcwLVxcdGJvb2wgXFxcImx6b1xcXCJcXG4tLVxcbmRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnLTcyLVxcbmRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnOjczOmNvbmZpZyBaUkFNX0RFRl9DT01QX0xaNFxcbmRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnLTc0LVxcdGJvb2wgXFxcImx6NFxcXCJcXG4tLVxcbmRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnLTc2LVxcbmRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnOjc3OmNvbmZpZyBaUkFNX0RFRl9DT01QX0xaNEhDXFxuZHJpdmVycy9ibG9jay96cmFtL0tjb25maWctNzgtXFx0Ym9vbCBcXFwibHo0aGNcXFwiXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL3pyYW0vS2NvbmZpZy04MC1cXG5kcml2ZXJzL2Jsb2NrL3pyYW0vS2NvbmZpZzo4MTpjb25maWcgWlJBTV9ERUZfQ09NUF9aU1REXFxuZHJpdmVycy9ibG9jay96cmFtL0tjb25maWctODItXFx0Ym9vbCBcXFwienN0ZFxcXCJcXG4tLVxcbmRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnLTg0LVxcbmRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnOjg1OmNvbmZpZyBaUkFNX0RFRl9DT01QX0RFRkxBVEVcXG5kcml2ZXJzL2Jsb2NrL3pyYW0vS2NvbmZpZy04Ni1cXHRib29sIFxcXCJkZWZsYXRlXFxcIlxcbi0tXFxuZHJpdmVycy9ibG9jay96cmFtL0tjb25maWctODgtXFxuZHJpdmVycy9ibG9jay96cmFtL0tjb25maWc6ODk6Y29uZmlnIFpSQU1fREVGX0NPTVBfODQyXFxuZHJpdmVycy9ibG9jay96cmFtL0tjb25maWctOTAtXFx0Ym9vbCBcXFwiODQyXFxcIlxcbi0tXFxuZHJpdmVycy9ibG9jay96cmFtL0tjb25maWc9OTM9ZW5kY2hvaWNlXFxuZHJpdmVycy9ibG9jay96cmFtL0tjb25maWctOTQtXFxuZHJpdmVycy9ibG9jay96cmFtL0tjb25maWc6OTU6Y29uZmlnIFpSQU1fREVGX0NPTVBcXG5kcml2ZXJzL2Jsb2NrL3pyYW0vS2NvbmZpZy05Ni1cXHRzdHJpbmdcXG4tLVxcbmRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnLTEwNi1cXG5kcml2ZXJzL2Jsb2NrL3pyYW0vS2NvbmZpZzoxMDc6Y29uZmlnIFpSQU1fV1JJVEVCQUNLXFxuZHJpdmVycy9ibG9jay96cmFtL0tjb25maWctMTA4LSAgICAgICBib29sIFxcXCJXcml0ZSBiYWNrIGluY29tcHJlc3NpYmxlIG9yIGlkbGUgcGFnZSB0byBiYWNraW5nIGRldmljZVxcXCJcXG4tLVxcbmRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnLTEyMC1cXG5kcml2ZXJzL2Jsb2NrL3pyYW0vS2NvbmZpZzoxMjE6Y29uZmlnIFpSQU1fVFJBQ0tfRU5UUllfQUNUSU1FXFxuZHJpdmVycy9ibG9jay96cmFtL0tjb25maWctMTIyLVxcdGJvb2wgXFxcIlRyYWNrIGFjY2VzcyB0aW1lIG9mIHpyYW0gZW50cmllc1xcXCJcXG4tLVxcbmRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnLTEyOC1cXG5kcml2ZXJzL2Jsb2NrL3pyYW0vS2NvbmZpZzoxMjk6Y29uZmlnIFpSQU1fTUVNT1JZX1RSQUNLSU5HXFxuZHJpdmVycy9ibG9jay96cmFtL0tjb25maWctMTMwLVxcdGJvb2wgXFxcIlRyYWNrIHpSYW0gYmxvY2sgc3RhdHVzXFxcIlxcbi0tXFxuZHJpdmVycy9ibG9jay96cmFtL0tjb25maWctMTM5LVxcbmRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnOjE0MDpjb25maWcgWlJBTV9NVUxUSV9DT01QXFxuZHJpdmVycy9ibG9jay96cmFtL0tjb25maWctMTQxLVxcdGJvb2wgXFxcIkVuYWJsZSBtdWx0aXBsZSBjb21wcmVzc2lvbiBzdHJlYW1zXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0zMFQxMDowMDo1Mi4xNzk5NzQ0NFoiLCJTZXEiOjE1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0MjIzNjgzNzI1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIGFuIGV4cGVydCdzIGludGVybmFsIG1vbm9sb2d1ZTpcblxuKipaUkFNIFx1MDAyNiBEZWZsYXRlOiBJbml0aWFsIEFzc2Vzc21lbnQqKlxuXG5BbHJpZ2h0LCB0aGUgY29yZSByZXF1aXJlbWVudCBoZXJlIGlzIGNsZWFyOiBgWlJBTWAgYW5kIHRoZSBgWlJBTV9CQUNLRU5EX0RFRkxBVEVgIGJhY2tlbmQgYXJlIHRoZSBmb2N1cy4gTXkgbWluZCBpbW1lZGlhdGVseSBqdW1wcyB0byBhIG1lbnRhbCBjaGVja2xpc3QuIFdlJ3JlIGdvaW5nIHRvIHVzZSB6cmFtIGFzIGEgYmxvY2sgZGV2aWNlLiBJIG5lZWQgdG8gbWFrZSBzdXJlIHRoaXMgaXMgaW5zdGFsbGVkIGFuZCBjb25maWd1cmVkIGNvcnJlY3RseS4gXG5cbk15IGltbWVkaWF0ZSBhY3Rpb24gaXMgdG8gZGVsdmUgaW50byB0aGUgZGVwZW5kZW5jaWVzIG9mIGBaUkFNYC4gV2hhdCBvdGhlciBrZXJuZWwgbW9kdWxlcyBvciB1c2VyLXNwYWNlIHV0aWxpdGllcyBkb2VzIGl0IHJlbHkgb24/IEFyZSB0aGVyZSBhbnkgc3BlY2lmaWMgdmVyc2lvbnMgSSBuZWVkIHRvIGJlIGF3YXJlIG9mIHRvIGVuc3VyZSBjb21wYXRpYmlsaXR5LCBlc3BlY2lhbGx5IHdpdGggdGhlIGBERUZMQVRFYCBiYWNrZW5kPyBUaGUgY2hvaWNlIG9mIGNvbXByZXNzaW9uIGFsZ29yaXRobSBpcyBpbXBvcnRhbnQgZm9yIGJhbGFuY2UgYmV0d2VlbiBDUFUgbG9hZCBhbmQgZGlzayBJTy4gQXJlIHRoZXJlIGFueSBrbm93biBpc3N1ZXMgd2l0aCB0aGF0IHNwZWNpZmljIGJhY2tlbmQ/IFdlIHNob3VsZCBsb29rIGF0IGFueSBwb3RlbnRpYWwgaW1wYWN0cyBvbiBzeXN0ZW0gcGVyZm9ybWFuY2UgdW5kZXIgbG9hZC4gV2UgbXVzdCBsb29rIGF0IHRoZSBvdmVyYWxsIHN5c3RlbSBtZW1vcnkgY29uZmlndXJhdGlvbiB0byBlbnN1cmUgaXRzIG9wdGltYWwgcGVyZm9ybWFuY2UuIFRoaXMgaXMgYWxsIHN0YW5kYXJkIGluaXRpYWwgZHVlIGRpbGlnZW5jZSwgYnV0IGNydWNpYWwgdG8gYXZvaWQgbGF0ZXIgaGVhZGFjaGVzLiBUaGlzIHNlZW1zIGxpa2UgYSByZWFzb25hYmxlIHN0YXJ0aW5nIHBvaW50LlxuXG5cbiIsIklucHV0VG9rZW5zIjo5MDU0LCJPdXRwdXRUb2tlbnMiOjMxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMzBUMTA6MDA6NTYuNDAzNjYwNDg1WiIsIlNlcSI6MTYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1ODA3OTc0NywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJkZXBlbmRzIG9uXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnPTI9Y29uZmlnIFpSQU1cXG5kcml2ZXJzL2Jsb2NrL3pyYW0vS2NvbmZpZy0zLVxcdHRyaXN0YXRlIFxcXCJDb21wcmVzc2VkIFJBTSBibG9jayBkZXZpY2Ugc3VwcG9ydFxcXCJcXG5kcml2ZXJzL2Jsb2NrL3pyYW0vS2NvbmZpZzo0OlxcdGRlcGVuZHMgb24gQkxPQ0sgXFx1MDAyNlxcdTAwMjYgU1lTRlMgXFx1MDAyNlxcdTAwMjYgTU1VXFxuZHJpdmVycy9ibG9jay96cmFtL0tjb25maWctNS1cXHRzZWxlY3QgWlNNQUxMT0NcXG4tLVxcbmRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnPTE3PWNvbmZpZyBaUkFNX0JBQ0tFTkRfTFo0XFxuZHJpdmVycy9ibG9jay96cmFtL0tjb25maWctMTgtXFx0Ym9vbCBcXFwibHo0IGNvbXByZXNzaW9uIHN1cHBvcnRcXFwiXFxuZHJpdmVycy9ibG9jay96cmFtL0tjb25maWc6MTk6XFx0ZGVwZW5kcyBvbiBaUkFNXFxuZHJpdmVycy9ibG9jay96cmFtL0tjb25maWctMjAtXFx0c2VsZWN0IExaNF9DT01QUkVTU1xcbi0tXFxuZHJpdmVycy9ibG9jay96cmFtL0tjb25maWc9MjM9Y29uZmlnIFpSQU1fQkFDS0VORF9MWjRIQ1xcbmRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnLTI0LVxcdGJvb2wgXFxcImx6NGhjIGNvbXByZXNzaW9uIHN1cHBvcnRcXFwiXFxuZHJpdmVycy9ibG9jay96cmFtL0tjb25maWc6MjU6XFx0ZGVwZW5kcyBvbiBaUkFNXFxuZHJpdmVycy9ibG9jay96cmFtL0tjb25maWctMjYtXFx0c2VsZWN0IExaNEhDX0NPTVBSRVNTXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL3pyYW0vS2NvbmZpZz0yOT1jb25maWcgWlJBTV9CQUNLRU5EX1pTVERcXG5kcml2ZXJzL2Jsb2NrL3pyYW0vS2NvbmZpZy0zMC1cXHRib29sIFxcXCJ6c3RkIGNvbXByZXNzaW9uIHN1cHBvcnRcXFwiXFxuZHJpdmVycy9ibG9jay96cmFtL0tjb25maWc6MzE6XFx0ZGVwZW5kcyBvbiBaUkFNXFxuZHJpdmVycy9ibG9jay96cmFtL0tjb25maWctMzItXFx0c2VsZWN0IFpTVERfQ09NUFJFU1NcXG4tLVxcbmRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnPTM1PWNvbmZpZyBaUkFNX0JBQ0tFTkRfREVGTEFURVxcbmRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnLTM2LVxcdGJvb2wgXFxcImRlZmxhdGUgY29tcHJlc3Npb24gc3VwcG9ydFxcXCJcXG5kcml2ZXJzL2Jsb2NrL3pyYW0vS2NvbmZpZzozNzpcXHRkZXBlbmRzIG9uIFpSQU1cXG5kcml2ZXJzL2Jsb2NrL3pyYW0vS2NvbmZpZy0zOC1cXHRzZWxlY3QgWkxJQl9ERUZMQVRFXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL3pyYW0vS2NvbmZpZz00MT1jb25maWcgWlJBTV9CQUNLRU5EXzg0MlxcbmRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnLTQyLVxcdGJvb2wgXFxcIjg0MiBjb21wcmVzc2lvbiBzdXBwb3J0XFxcIlxcbmRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnOjQzOlxcdGRlcGVuZHMgb24gWlJBTVxcbmRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnLTQ0LVxcdHNlbGVjdCA4NDJfQ09NUFJFU1NcXG4tLVxcbmRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnPTQ3PWNvbmZpZyBaUkFNX0JBQ0tFTkRfRk9SQ0VfTFpPXFxuZHJpdmVycy9ibG9jay96cmFtL0tjb25maWc6NDg6XFx0ZGVwZW5kcyBvbiBaUkFNXFxuZHJpdmVycy9ibG9jay96cmFtL0tjb25maWctNDktXFx0ZGVmX2Jvb2wgIVpSQU1fQkFDS0VORF9MWjQgXFx1MDAyNlxcdTAwMjYgIVpSQU1fQkFDS0VORF9MWjRIQyBcXHUwMDI2XFx1MDAyNiBcXFxcXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL3pyYW0vS2NvbmZpZz01Mz1jb25maWcgWlJBTV9CQUNLRU5EX0xaT1xcbmRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnLTU0LVxcdGJvb2wgXFxcImx6byBhbmQgbHpvLXJsZSBjb21wcmVzc2lvbiBzdXBwb3J0XFxcIiBpZiAhWlJBTV9CQUNLRU5EX0ZPUkNFX0xaT1xcbmRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnOjU1OlxcdGRlcGVuZHMgb24gWlJBTVxcbmRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnLTU2LVxcdGRlZmF1bHQgWlJBTV9CQUNLRU5EX0ZPUkNFX0xaT1xcbi0tXFxuZHJpdmVycy9ibG9jay96cmFtL0tjb25maWc9NjA9Y2hvaWNlXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL3pyYW0vS2NvbmZpZy02Mi1cXHRkZWZhdWx0IFpSQU1fREVGX0NPTVBfTFpPUkxFXFxuZHJpdmVycy9ibG9jay96cmFtL0tjb25maWc6NjM6XFx0ZGVwZW5kcyBvbiBaUkFNXFxuZHJpdmVycy9ibG9jay96cmFtL0tjb25maWctNjQtXFxuZHJpdmVycy9ibG9jay96cmFtL0tjb25maWc9NjU9Y29uZmlnIFpSQU1fREVGX0NPTVBfTFpPUkxFXFxuZHJpdmVycy9ibG9jay96cmFtL0tjb25maWctNjYtXFx0Ym9vbCBcXFwibHpvLXJsZVxcXCJcXG5kcml2ZXJzL2Jsb2NrL3pyYW0vS2NvbmZpZzo2NzpcXHRkZXBlbmRzIG9uIFpSQU1fQkFDS0VORF9MWk9cXG5kcml2ZXJzL2Jsb2NrL3pyYW0vS2NvbmZpZy02OC1cXG5kcml2ZXJzL2Jsb2NrL3pyYW0vS2NvbmZpZz02OT1jb25maWcgWlJBTV9ERUZfQ09NUF9MWk9cXG5kcml2ZXJzL2Jsb2NrL3pyYW0vS2NvbmZpZy03MC1cXHRib29sIFxcXCJsem9cXFwiXFxuZHJpdmVycy9ibG9jay96cmFtL0tjb25maWc6NzE6XFx0ZGVwZW5kcyBvbiBaUkFNX0JBQ0tFTkRfTFpPXFxuZHJpdmVycy9ibG9jay96cmFtL0tjb25maWctNzItXFxuZHJpdmVycy9ibG9jay96cmFtL0tjb25maWc9NzM9Y29uZmlnIFpSQU1fREVGX0NPTVBfTFo0XFxuZHJpdmVycy9ibG9jay96cmFtL0tjb25maWctNzQtXFx0Ym9vbCBcXFwibHo0XFxcIlxcbmRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnOjc1OlxcdGRlcGVuZHMgb24gWlJBTV9CQUNLRU5EX0xaNFxcbmRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnLTc2LVxcbmRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnPTc3PWNvbmZpZyBaUkFNX0RFRl9DT01QX0xaNEhDXFxuZHJpdmVycy9ibG9jay96cmFtL0tjb25maWctNzgtXFx0Ym9vbCBcXFwibHo0aGNcXFwiXFxuZHJpdmVycy9ibG9jay96cmFtL0tjb25maWc6Nzk6XFx0ZGVwZW5kcyBvbiBaUkFNX0JBQ0tFTkRfTFo0SENcXG5kcml2ZXJzL2Jsb2NrL3pyYW0vS2NvbmZpZy04MC1cXG5kcml2ZXJzL2Jsb2NrL3pyYW0vS2NvbmZpZz04MT1jb25maWcgWlJBTV9ERUZfQ09NUF9aU1REXFxuZHJpdmVycy9ibG9jay96cmFtL0tjb25maWctODItXFx0Ym9vbCBcXFwienN0ZFxcXCJcXG5kcml2ZXJzL2Jsb2NrL3pyYW0vS2NvbmZpZzo4MzpcXHRkZXBlbmRzIG9uIFpSQU1fQkFDS0VORF9aU1REXFxuZHJpdmVycy9ibG9jay96cmFtL0tjb25maWctODQtXFxuZHJpdmVycy9ibG9jay96cmFtL0tjb25maWc9ODU9Y29uZmlnIFpSQU1fREVGX0NPTVBfREVGTEFURVxcbmRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnLTg2LVxcdGJvb2wgXFxcImRlZmxhdGVcXFwiXFxuZHJpdmVycy9ibG9jay96cmFtL0tjb25maWc6ODc6XFx0ZGVwZW5kcyBvbiBaUkFNX0JBQ0tFTkRfREVGTEFURVxcbmRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnLTg4LVxcbmRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnPTg5PWNvbmZpZyBaUkFNX0RFRl9DT01QXzg0MlxcbmRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnLTkwLVxcdGJvb2wgXFxcIjg0MlxcXCJcXG5kcml2ZXJzL2Jsb2NrL3pyYW0vS2NvbmZpZzo5MTpcXHRkZXBlbmRzIG9uIFpSQU1fQkFDS0VORF84NDJcXG5kcml2ZXJzL2Jsb2NrL3pyYW0vS2NvbmZpZy05Mi1cXG4tLVxcbmRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnPTk1PWNvbmZpZyBaUkFNX0RFRl9DT01QXFxuZHJpdmVycy9ibG9jay96cmFtL0tjb25maWctOTYtXFx0c3RyaW5nXFxuZHJpdmVycy9ibG9jay96cmFtL0tjb25maWc6OTc6XFx0ZGVwZW5kcyBvbiBaUkFNXFxuZHJpdmVycy9ibG9jay96cmFtL0tjb25maWctOTgtXFx0ZGVmYXVsdCBcXFwibHpvLXJsZVxcXCIgaWYgWlJBTV9ERUZfQ09NUF9MWk9STEVcXG4tLVxcbmRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnPTEwNz1jb25maWcgWlJBTV9XUklURUJBQ0tcXG5kcml2ZXJzL2Jsb2NrL3pyYW0vS2NvbmZpZy0xMDgtICAgICAgIGJvb2wgXFxcIldyaXRlIGJhY2sgaW5jb21wcmVzc2libGUgb3IgaWRsZSBwYWdlIHRvIGJhY2tpbmcgZGV2aWNlXFxcIlxcbmRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnOjEwOTogICAgICAgZGVwZW5kcyBvbiBaUkFNXFxuZHJpdmVycy9ibG9jay96cmFtL0tjb25maWctMTEwLSAgICAgICBoZWxwXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL3pyYW0vS2NvbmZpZz0xMjE9Y29uZmlnIFpSQU1fVFJBQ0tfRU5UUllfQUNUSU1FXFxuZHJpdmVycy9ibG9jay96cmFtL0tjb25maWctMTIyLVxcdGJvb2wgXFxcIlRyYWNrIGFjY2VzcyB0aW1lIG9mIHpyYW0gZW50cmllc1xcXCJcXG5kcml2ZXJzL2Jsb2NrL3pyYW0vS2NvbmZpZzoxMjM6XFx0ZGVwZW5kcyBvbiBaUkFNXFxuZHJpdmVycy9ibG9jay96cmFtL0tjb25maWctMTI0LVxcdGhlbHBcXG4tLVxcbmRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnPTEyOT1jb25maWcgWlJBTV9NRU1PUllfVFJBQ0tJTkdcXG5kcml2ZXJzL2Jsb2NrL3pyYW0vS2NvbmZpZy0xMzAtXFx0Ym9vbCBcXFwiVHJhY2sgelJhbSBibG9jayBzdGF0dXNcXFwiXFxuZHJpdmVycy9ibG9jay96cmFtL0tjb25maWc6MTMxOlxcdGRlcGVuZHMgb24gWlJBTSBcXHUwMDI2XFx1MDAyNiBERUJVR19GU1xcbmRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnLTEzMi1cXHRzZWxlY3QgWlJBTV9UUkFDS19FTlRSWV9BQ1RJTUVcXG4tLVxcbmRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnPTE0MD1jb25maWcgWlJBTV9NVUxUSV9DT01QXFxuZHJpdmVycy9ibG9jay96cmFtL0tjb25maWctMTQxLVxcdGJvb2wgXFxcIkVuYWJsZSBtdWx0aXBsZSBjb21wcmVzc2lvbiBzdHJlYW1zXFxcIlxcbmRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnOjE0MjpcXHRkZXBlbmRzIG9uIFpSQU1cXG5kcml2ZXJzL2Jsb2NrL3pyYW0vS2NvbmZpZy0xNDMtXFx0aGVscFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0zMFQxMDowMDo1Ni40NjE3NDM2OTJaIiwiU2VxIjoxNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDQ4Mjk0ODUwOSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIFpSQU0gSW1wbGVtZW50YXRpb24qKlxuXG5Pa2F5LCBzbyB3ZSdyZSBsb29raW5nIGF0IGludGVncmF0aW5nIGBaUkFNYCBhbmQgc3BlY2lmaWNhbGx5LCB0aGUgYFpSQU1fQkFDS0VORF9ERUZMQVRFYCBiYWNrZW5kLiBNeSBpbW1lZGlhdGUgY29uY2VybiBpcyBob3cgdGhlIGNvcmUgZnVuY3Rpb25zIGFyZSBiZWluZyBtb2RpZmllZCBhbmQgdXRpbGl6ZWQuIFNwZWNpZmljYWxseSwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIG1vZGlmaWNhdGlvbnMgdG8gYGRlZmxhdGVfc2V0dXBfcGFyYW1zYCBhbmQgYHpyYW1fZGVzdHJveV9jb21wc2AuIEkgc2VlIGBkZWZsYXRlX3NldHVwX3BhcmFtc2AgaXMgZGVjbGFyZWQgYXMgc3RhdGljLCBidXQgaXQncyBhc3NpZ25lZCB0byBgYmFja2VuZF9kZWZsYXRlLnNldHVwX3BhcmFtc2Ag4oCTIEknbGwgbmVlZCB0byBkb3VibGUtY2hlY2sgdGhhdCB0aGlzIGlzIHNhZmUgYW5kIG1ha2VzIHNlbnNlIHdpdGhpbiB0aGUgb3ZlcmFsbCBhcmNoaXRlY3R1cmUuXG5cbk15IGZvY3VzIG5vdyBpcyBvbiBob3cgdGhlc2UgY2hhbmdlcyBhcmUgKnRyaWdnZXJlZCouIEkgc3VzcGVjdCBgZGlza3NpemVfc3RvcmVgIGlzIHRoZSBrZXkuIE15IGludHVpdGlvbiBpcyB0ZWxsaW5nIG1lIHRoYXQgaXQncyB0aGUgb25lIHRoYXQgY2FsbHMgYHpjb21wX2NyZWF0ZWAgYW5kLCBieSBhc3NvY2lhdGlvbiwgcG90ZW50aWFsbHkgYHpyYW1fZGVzdHJveV9jb21wc2AuIEkgc2hvdWxkIHZlcmlmeSB0aGF0LiBBbHNvLCBiYXNlZCBvbiB0aGUgZnVuY3Rpb24gbmFtZXMsIGBjb21wX2FsZ29yaXRobV9zdG9yZWAgKmNvdWxkKiBhbHNvIHRyaWdnZXIgYHpjb21wX2NyZWF0ZWAuIFRoYXQgb25lIEknbGwgbmVlZCB0byBjaGVjayBjYXJlZnVsbHkuIExldCdzIHN0YXJ0IGJ5IGxvb2tpbmcgY2xvc2VseSBhdCBgY29tcF9hbGdvcml0aG1fc3RvcmVgLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMTIwMSwiT3V0cHV0VG9rZW5zIjozMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEyNiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0zMFQxMDowMTowMC45NDQ2OTQ0MDFaIiwiU2VxIjoxOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjUzMDg1NDc5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbXBfYWxnb3JpdGhtX3N0b3JlXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvYmxvY2svenJhbS9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmM9MTY1OT1zdGF0aWMgdm9pZCBjb21wX2FsZ29yaXRobV9zZXQoc3RydWN0IHpyYW0gKnpyYW0sIHUzMiBwcmlvLCBjb25zdCBjaGFyICphbGcpXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYy0xNjYzLVxcbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jOjE2NjQ6c3RhdGljIGludCBfX2NvbXBfYWxnb3JpdGhtX3N0b3JlKHN0cnVjdCB6cmFtICp6cmFtLCB1MzIgcHJpbywgY29uc3QgY2hhciAqYnVmKVxcbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jLTE2NjUte1xcbi0tXFxuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmM9MTgwMT1zdGF0aWMgc3NpemVfdCBjb21wX2FsZ29yaXRobV9zaG93KHN0cnVjdCBkZXZpY2UgKmRldixcXG4tLVxcbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jLTE4MTItXFxuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmM6MTgxMzpzdGF0aWMgc3NpemVfdCBjb21wX2FsZ29yaXRobV9zdG9yZShzdHJ1Y3QgZGV2aWNlICpkZXYsXFxuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmMtMTgxNC1cXHRcXHRcXHRcXHQgICAgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYy0xODIwLVxcbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jOjE4MjE6XFx0cmV0ID0gX19jb21wX2FsZ29yaXRobV9zdG9yZSh6cmFtLCBaUkFNX1BSSU1BUllfQ09NUCwgYnVmKTtcXG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYy0xODIyLVxcdHJldHVybiByZXQgPyByZXQgOiBsZW47XFxuLS1cXG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYz0xODI2PXN0YXRpYyBzc2l6ZV90IHJlY29tcF9hbGdvcml0aG1fc2hvdyhzdHJ1Y3QgZGV2aWNlICpkZXYsXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYy0xODQ0LVxcbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jOjE4NDU6c3RhdGljIHNzaXplX3QgcmVjb21wX2FsZ29yaXRobV9zdG9yZShzdHJ1Y3QgZGV2aWNlICpkZXYsXFxuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmMtMTg0Ni1cXHRcXHRcXHRcXHQgICAgICBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0cixcXG4tLVxcbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jLTE4ODEtXFxuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmM6MTg4MjpcXHRyZXQgPSBfX2NvbXBfYWxnb3JpdGhtX3N0b3JlKHpyYW0sIHByaW8sIGFsZyk7XFxuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmMtMTg4My1cXHRyZXR1cm4gcmV0ID8gcmV0IDogbGVuO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0zMFQxMDowMTowMC45OTc3ODYzOTlaIiwiU2VxIjoxOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzI5NTY4NjE0OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgbGlrZSB5b3Vyc2VsZjpcblxuKipBbmFseXppbmcgdGhlIEFsZ29yaXRobSBTdG9yZSoqXG5cbkFscmlnaHQsIGxldCdzIGRpdmUgaW50byB0aGlzLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gaW1tZWRpYXRlbHkgZXhhbWluZSB0aGUgYF9fY29tcF9hbGdvcml0aG1fc3RvcmVgLiBUaGF0J3Mgd2hlcmUgSSB3b3VsZCBleHBlY3QgdGhlIGNvcmUgb2YgdGhpcyB3aG9sZSB0aGluZyB0byBsaXZlLCB3b3VsZG4ndCB5b3U/IFRoaXMgaXMgdGhlIGNlbnRyYWwgcmVwb3NpdG9yeSwgdGhlIG9wZXJhdGlvbmFsIGhlYXJ0IG9mIHRoZSBzeXN0ZW0gd2hlbiBpdCBjb21lcyB0byBjb21wdXRhdGlvbi4gTXkgaW1tZWRpYXRlIGluc3RpbmN0IGlzIHRvIGxvb2sgYXQgaG93IGl0J3Mgc3RydWN0dXJlZCwgaXRzIGFjY2VzcyBtZXRob2RzLCBhbmQsIG9mIGNvdXJzZSwgdGhlIGFsZ29yaXRobXMgdGhlbXNlbHZlcy4gV2hhdCBraW5kIG9mIG1ldGFkYXRhIGRvZXMgaXQgaGF2ZT8gVmVyc2lvbmluZz8gRGVwZW5kZW5jeSBtYW5hZ2VtZW50PyBBcmUgdGhlIGFsZ29yaXRobXMgZHluYW1pY2FsbHkgbG9hZGVkIG9yIHN0YXRpY2FsbHkgbGlua2VkPyBBcmUgdGhlcmUgYW55IG9idmlvdXMgcGVyZm9ybWFuY2UgYm90dGxlbmVja3MgaW4gdGhlIHN0b3JlIGl0c2VsZj8gV2hhdCBhcmUgdGhlIGltcGxpY2F0aW9ucyBvZiB0aGUgc3RvcmUncyBkZXNpZ24gb24gc3lzdGVtIHNjYWxhYmlsaXR5IGFuZCBtYWludGFpbmFiaWxpdHk/IEknbSBhbHJlYWR5IGFudGljaXBhdGluZyBxdWVzdGlvbnMgYWJvdXQgcG90ZW50aWFsIGNvbmN1cnJlbmN5IGlzc3VlcyBhbmQgc2VjdXJpdHkgaW1wbGljYXRpb25zIGlmIHRoaXMgaXMgbm90IGhhbmRsZWQgY29ycmVjdGx5LiBUaGUgZGVzaWduIG9mIHRoaXMgc3RvcmUgaXMgcGFyYW1vdW50IHRvIHRoZSBlbnRpcmUgb3BlcmF0aW9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMjE3NywiT3V0cHV0VG9rZW5zIjozMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMwVDEwOjAxOjA0LjI5MzQ3NTc4OFoiLCJTZXEiOjIwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDgxMjQxMTksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiX19jb21wX2FsZ29yaXRobV9zdG9yZVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL2Jsb2NrL3pyYW0vXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jPTE2NTk9c3RhdGljIHZvaWQgY29tcF9hbGdvcml0aG1fc2V0KHN0cnVjdCB6cmFtICp6cmFtLCB1MzIgcHJpbywgY29uc3QgY2hhciAqYWxnKVxcbi0tXFxuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmMtMTY2My1cXG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYzoxNjY0OnN0YXRpYyBpbnQgX19jb21wX2FsZ29yaXRobV9zdG9yZShzdHJ1Y3QgenJhbSAqenJhbSwgdTMyIHByaW8sIGNvbnN0IGNoYXIgKmJ1ZilcXG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYy0xNjY1LXtcXG4tLVxcbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jPTE4MTM9c3RhdGljIHNzaXplX3QgY29tcF9hbGdvcml0aG1fc3RvcmUoc3RydWN0IGRldmljZSAqZGV2LFxcbi0tXFxuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmMtMTgyMC1cXG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYzoxODIxOlxcdHJldCA9IF9fY29tcF9hbGdvcml0aG1fc3RvcmUoenJhbSwgWlJBTV9QUklNQVJZX0NPTVAsIGJ1Zik7XFxuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmMtMTgyMi1cXHRyZXR1cm4gcmV0ID8gcmV0IDogbGVuO1xcbi0tXFxuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmM9MTg0NT1zdGF0aWMgc3NpemVfdCByZWNvbXBfYWxnb3JpdGhtX3N0b3JlKHN0cnVjdCBkZXZpY2UgKmRldixcXG4tLVxcbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jLTE4ODEtXFxuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmM6MTg4MjpcXHRyZXQgPSBfX2NvbXBfYWxnb3JpdGhtX3N0b3JlKHpyYW0sIHByaW8sIGFsZyk7XFxuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmMtMTg4My1cXHRyZXR1cm4gcmV0ID8gcmV0IDogbGVuO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0zMFQxMDowMTowNC4zNDE2MDcxNTdaIiwiU2VxIjoyMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MjczMjU1NjQzMSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMuIEhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBhcyBpZiB0aGV5J3JlIG15IG93bjpcblxuKipJbnZlc3RpZ2F0aW5nIHRoZSBDb3JlIEZ1bmN0aW9uYWxpdHkqKlxuXG5BbHJpZ2h0LCB0aW1lIHRvIGdldCB0byB0aGUgaGVhcnQgb2YgdGhpcy4gTXkgZm9jdXMgaXMgaW1tZWRpYXRlbHkgZHJhd24gdG8gdGhhdCBgX19jb21wX2FsZ29yaXRobV9zdG9yZWAg4oCTIHRoYXQgc291bmRzIGxpa2UgYSBrZXkgY29tcG9uZW50LCBwcm9iYWJseSBob2xkaW5nIHRoZSBjb3JlIGxvZ2ljIGZvciB0aGUgY29tcGFyYXRpdmUgYWxnb3JpdGhtLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0IGl0cyBmdW5jdGlvbiBpcywgd2hhdCBpdCdzIHJlc3BvbnNpYmxlIGZvciwgYW5kIGhvdyBpdCdzIHN0cnVjdHVyZWQuIEtub3dpbmcgdGhpcyB3aWxsIGdpdmUgbWUgYSBzb2xpZCBmb3VuZGF0aW9uIGZvciBldmFsdWF0aW5nIGl0cyBvdmVyYWxsIGRlc2lnbiBhbmQgaG93IGl0J3MgaW50ZWdyYXRlZCB3aXRoaW4gdGhlIGxhcmdlciBzeXN0ZW0uIExldCdzIHNlZSB3aGF0J3Mgd2hhdC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTI4MjEsIk91dHB1dFRva2VucyI6NDIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0zMFQxMDowMTowNy4wNzQxNjY3MzhaIiwiU2VxIjoyMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTI3NjgwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDE2NjQsXG4gIFwiTGluZUNvdW50XCI6IDMwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjE2NjQ6XFx0c3RhdGljIGludCBfX2NvbXBfYWxnb3JpdGhtX3N0b3JlKHN0cnVjdCB6cmFtICp6cmFtLCB1MzIgcHJpbywgY29uc3QgY2hhciAqYnVmKVxcbjE2NjU6XFx0e1xcbjE2NjY6XFx0XFx0Y29uc3QgY2hhciAqYWxnO1xcbjE2Njc6XFx0XFx0c2l6ZV90IHN6O1xcbjE2Njg6XFx0XFxuMTY2OTpcXHRcXHRzeiA9IHN0cmxlbihidWYpO1xcbjE2NzA6XFx0XFx0aWYgKHN6IFxcdTAwM2U9IFpSQU1fTUFYX0FMR09fTkFNRV9TWilcXG4xNjcxOlxcdFxcdFxcdHJldHVybiAtRTJCSUc7XFxuMTY3MjpcXHRcXG4xNjczOlxcdFxcdGFsZyA9IHpjb21wX2xvb2t1cF9iYWNrZW5kX25hbWUoYnVmKTtcXG4xNjc0OlxcdFxcdGlmICghYWxnKVxcbjE2NzU6XFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuMTY3NjpcXHRcXG4xNjc3OlxcdFxcdGd1YXJkKHJ3c2VtX3dyaXRlKShcXHUwMDI2enJhbS1cXHUwMDNlZGV2X2xvY2spO1xcbjE2Nzg6XFx0XFx0aWYgKGluaXRfZG9uZSh6cmFtKSkge1xcbjE2Nzk6XFx0XFx0XFx0cHJfaW5mbyhcXFwiQ2FuJ3QgY2hhbmdlIGFsZ29yaXRobSBmb3IgaW5pdGlhbGl6ZWQgZGV2aWNlXFxcXG5cXFwiKTtcXG4xNjgwOlxcdFxcdFxcdHJldHVybiAtRUJVU1k7XFxuMTY4MTpcXHRcXHR9XFxuMTY4MjpcXHRcXG4xNjgzOlxcdFxcdGNvbXBfYWxnb3JpdGhtX3NldCh6cmFtLCBwcmlvLCBhbGcpO1xcbjE2ODQ6XFx0XFx0cmV0dXJuIDA7XFxuMTY4NTpcXHR9XFxuMTY4NjpcXHRcXG4xNjg3OlxcdHN0YXRpYyB2b2lkIGNvbXBfcGFyYW1zX3Jlc2V0KHN0cnVjdCB6cmFtICp6cmFtLCB1MzIgcHJpbylcXG4xNjg4OlxcdHtcXG4xNjg5OlxcdFxcdHN0cnVjdCB6Y29tcF9wYXJhbXMgKnBhcmFtcyA9IFxcdTAwMjZ6cmFtLVxcdTAwM2VwYXJhbXNbcHJpb107XFxuMTY5MDpcXHRcXG4xNjkxOlxcdFxcdHZmcmVlKHBhcmFtcy1cXHUwMDNlZGljdCk7XFxuMTY5MjpcXHRcXHRwYXJhbXMtXFx1MDAzZWxldmVsID0gWkNPTVBfUEFSQU1fTk9UX1NFVDtcXG4xNjkzOlxcdFxcdHBhcmFtcy1cXHUwMDNlZGVmbGF0ZS53aW5iaXRzID0gWkNPTVBfUEFSQU1fTk9UX1NFVDtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMzBUMTA6MDE6MDcuMDc0Mjk1NTY4WiIsIlNlcSI6MjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ2ODgxNDUyNTMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgcHJlc2VudGVkIGFzIG15IG93biBtZW50YWwgcHJvY2VzcywgZ2l2ZW4gbXkgZXhwZXJ0aXNlOlxuXG4qKkFsZ29yaXRobSBOYW1pbmcgYW5kIEluaXRpYWxpemF0aW9uKipcblxuQWxyaWdodCwgc28gdGhpcyBsaW5lIG9mIGNvZGUsIG9yIHRoaXMgc2VjdGlvbiBvZiB0aGUgcHJvY2VzcywgaXMgcHJldHR5IHN0cmFpZ2h0Zm9yd2FyZC4gSXQgbG9va3MgbGlrZSBpdHMgc29sZSBwdXJwb3NlIGlzIHRvIGFzc2lnbiB0aGUgbmFtZSBvZiB0aGUgYWxnb3JpdGhtLiBOb3RoaW5nIGZhbmN5LCBqdXN0IHNldHRpbmcgYSBzdHJpbmcgdmFsdWUuIFRoZSByZWFsIG1lYXQgb2YgdGhlIG9wZXJhdGlvbiwgdGhlIGFjdHVhbCBpbnN0YW50aWF0aW9uIGFuZCBzZXR1cCBvZiB0aGUgYWxnb3JpdGhtLCBoYXBwZW5zIGVsc2V3aGVyZS4gVGhlIGNvbW1lbnQgZXhwbGljaXRseSBkaXJlY3RzIG15IGF0dGVudGlvbiB0byBgZGlza3NpemVfc3RvcmVgLiBUaGF0J3Mgd2hlcmUgSSBuZWVkIHRvIGZvY3VzIG15IGVmZm9ydHMuIEknbGwgbmVlZCB0byBleGFtaW5lIGBkaXNrc2l6ZV9zdG9yZWAgY2xvc2VseSB0byB1bmRlcnN0YW5kIGhvdyB0aGlzIGFsZ29yaXRobSBpcyBhY3R1YWxseSBicm91Z2h0IHRvIGxpZmUuIExldCdzIGdldCByaWdodCB0byBpdC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTM0NjcsIk91dHB1dFRva2VucyI6NDIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMwVDEwOjAxOjExLjc2MjQ0MzEwMVoiLCJTZXEiOjI0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMzEwNzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmNcIixcbiAgXCJGaXJzdExpbmVcIjogMjg1OSxcbiAgXCJMaW5lQ291bnRcIjogNTBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMjg1OTpcXHRzdGF0aWMgc3NpemVfdCBkaXNrc2l6ZV9zdG9yZShzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLFxcbjI4NjA6XFx0XFx0XFx0XFx0ICAgICAgY29uc3QgY2hhciAqYnVmLCBzaXplX3QgbGVuKVxcbjI4NjE6XFx0e1xcbjI4NjI6XFx0XFx0dTY0IGRpc2tzaXplO1xcbjI4NjM6XFx0XFx0c3RydWN0IHpjb21wICpjb21wO1xcbjI4NjQ6XFx0XFx0c3RydWN0IHpyYW0gKnpyYW0gPSBkZXZfdG9fenJhbShkZXYpO1xcbjI4NjU6XFx0XFx0aW50IGVycjtcXG4yODY2OlxcdFxcdHUzMiBwcmlvO1xcbjI4Njc6XFx0XFxuMjg2ODpcXHRcXHRkaXNrc2l6ZSA9IG1lbXBhcnNlKGJ1ZiwgTlVMTCk7XFxuMjg2OTpcXHRcXHRpZiAoIWRpc2tzaXplKVxcbjI4NzA6XFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuMjg3MTpcXHRcXG4yODcyOlxcdFxcdGd1YXJkKHJ3c2VtX3dyaXRlKShcXHUwMDI2enJhbS1cXHUwMDNlZGV2X2xvY2spO1xcbjI4NzM6XFx0XFx0aWYgKGluaXRfZG9uZSh6cmFtKSkge1xcbjI4NzQ6XFx0XFx0XFx0cHJfaW5mbyhcXFwiQ2Fubm90IGNoYW5nZSBkaXNrc2l6ZSBmb3IgaW5pdGlhbGl6ZWQgZGV2aWNlXFxcXG5cXFwiKTtcXG4yODc1OlxcdFxcdFxcdHJldHVybiAtRUJVU1k7XFxuMjg3NjpcXHRcXHR9XFxuMjg3NzpcXHRcXG4yODc4OlxcdFxcdGRpc2tzaXplID0gUEFHRV9BTElHTihkaXNrc2l6ZSk7XFxuMjg3OTpcXHRcXHRpZiAoIXpyYW1fbWV0YV9hbGxvYyh6cmFtLCBkaXNrc2l6ZSkpXFxuMjg4MDpcXHRcXHRcXHRyZXR1cm4gLUVOT01FTTtcXG4yODgxOlxcdFxcbjI4ODI6XFx0XFx0Zm9yIChwcmlvID0gWlJBTV9QUklNQVJZX0NPTVA7IHByaW8gXFx1MDAzYyBaUkFNX01BWF9DT01QUzsgcHJpbysrKSB7XFxuMjg4MzpcXHRcXHRcXHRpZiAoIXpyYW0tXFx1MDAzZWNvbXBfYWxnc1twcmlvXSlcXG4yODg0OlxcdFxcdFxcdFxcdGNvbnRpbnVlO1xcbjI4ODU6XFx0XFxuMjg4NjpcXHRcXHRcXHRjb21wID0gemNvbXBfY3JlYXRlKHpyYW0tXFx1MDAzZWNvbXBfYWxnc1twcmlvXSxcXG4yODg3OlxcdFxcdFxcdFxcdFxcdCAgICBcXHUwMDI2enJhbS1cXHUwMDNlcGFyYW1zW3ByaW9dKTtcXG4yODg4OlxcdFxcdFxcdGlmIChJU19FUlIoY29tcCkpIHtcXG4yODg5OlxcdFxcdFxcdFxcdHByX2VycihcXFwiQ2Fubm90IGluaXRpYWxpc2UgJXMgY29tcHJlc3NpbmcgYmFja2VuZFxcXFxuXFxcIixcXG4yODkwOlxcdFxcdFxcdFxcdCAgICAgICB6cmFtLVxcdTAwM2Vjb21wX2FsZ3NbcHJpb10pO1xcbjI4OTE6XFx0XFx0XFx0XFx0ZXJyID0gUFRSX0VSUihjb21wKTtcXG4yODkyOlxcdFxcdFxcdFxcdGdvdG8gb3V0X2ZyZWVfY29tcHM7XFxuMjg5MzpcXHRcXHRcXHR9XFxuMjg5NDpcXHRcXG4yODk1OlxcdFxcdFxcdHpyYW0tXFx1MDAzZWNvbXBzW3ByaW9dID0gY29tcDtcXG4yODk2OlxcdFxcdH1cXG4yODk3OlxcdFxcdHpyYW0tXFx1MDAzZWRpc2tzaXplID0gZGlza3NpemU7XFxuMjg5ODpcXHRcXHRzZXRfY2FwYWNpdHlfYW5kX25vdGlmeSh6cmFtLVxcdTAwM2VkaXNrLCB6cmFtLVxcdTAwM2VkaXNrc2l6ZSBcXHUwMDNlXFx1MDAzZSBTRUNUT1JfU0hJRlQpO1xcbjI4OTk6XFx0XFxuMjkwMDpcXHRcXHRyZXR1cm4gbGVuO1xcbjI5MDE6XFx0XFxuMjkwMjpcXHRvdXRfZnJlZV9jb21wczpcXG4yOTAzOlxcdFxcdHpyYW1fZGVzdHJveV9jb21wcyh6cmFtKTtcXG4yOTA0OlxcdFxcdHpyYW1fbWV0YV9mcmVlKHpyYW0sIGRpc2tzaXplKTtcXG4yOTA1OlxcdFxcdHJldHVybiBlcnI7XFxuMjkwNjpcXHR9XFxuMjkwNzpcXHRcXG4yOTA4OlxcdHN0YXRpYyBzc2l6ZV90IHJlc2V0X3N0b3JlKHN0cnVjdCBkZXZpY2UgKmRldixcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMzBUMTA6MDE6MTEuNzYyNTc1NDQxWiIsIlNlcSI6MjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM2MTk0MzMzMjgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi5cblxuKipJbnZlc3RpZ2F0aW5nIHRoZSBaUkFNIENvbXByZXNzaW9uIEZsb3cqKlxuXG5SaWdodCwgc28gYGRpc2tzaXplX3N0b3JlYCBpcyB0aGUga2V5IGZ1bmN0aW9uIGhlcmU7IGl0J3MgdGhlIG9uZSB0aGF0IGtpY2tzIG9mZiBib3RoIGB6Y29tcF9jcmVhdGVgIGFuZCBgenJhbV9kZXN0cm95X2NvbXBzYC4gVGhhdCBtYWtlcyBzZW5zZSBpbiB0ZXJtcyBvZiB0aGUgbGlmZWN5Y2xlLCBJIHN1cHBvc2UuIEFuZCBpdCBzZWVtcyB0aGF0IGBkZWZsYXRlX3NldHVwX3BhcmFtc2AgZ2V0cyBjYWxsZWQgd2l0aGluIGB6Y29tcF9jcmVhdGVgLiBJbnRlcmVzdGluZy5cblxuTm93LCBJJ20gZ2V0dGluZyBjdXJpb3VzIGFib3V0IHRoZSBjb21wcmVzc2lvbiBwYXJhbWV0ZXJzLiBTcGVjaWZpY2FsbHksIGNhbiB3ZSBkaXJlY3RseSBjb250cm9sIGB3aW5iaXRzYD8gS25vd2luZyB0aGF0IHdvdWxkIGdpdmUgbWUgYSBkZWVwZXIgbGV2ZWwgb2YgY29udHJvbCBhbmQgcG90ZW50aWFsbHkgb3B0aW1pemUgdGhlIGNvbXByZXNzaW9uIGJlaGF2aW9yLiBUaW1lIHRvIGdvIGRpZ2dpbmcgdGhyb3VnaCB0aGUgY29kZSBhbmQgc2VlIGlmIHRoZXJlJ3MgYSBtZWNoYW5pc20gdG8gc2V0IHRoYXQgcGFyYW1ldGVyLiBJIHNob3VsZCBiZSBhYmxlIHRvIGZpZ3VyZSBpdCBvdXQgd2l0aCBhIGxpdHRsZSBiaXQgb2Ygc2VhcmNoaW5nLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNDQzMiwiT3V0cHV0VG9rZW5zIjoyOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjYzLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMzBUMTA6MDE6MTUuMzgyMDExMzc5WiIsIlNlcSI6MjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1NTIzOTc0OCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ3aW5iaXRzXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvYmxvY2svenJhbS9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9ibG9jay96cmFtL2JhY2tlbmRfZGVmbGF0ZS5jPTIzPXN0YXRpYyBpbnQgZGVmbGF0ZV9zZXR1cF9wYXJhbXMoc3RydWN0IHpjb21wX3BhcmFtcyAqcGFyYW1zKVxcbi0tXFxuZHJpdmVycy9ibG9jay96cmFtL2JhY2tlbmRfZGVmbGF0ZS5jLTI2LVxcdFxcdHBhcmFtcy1cXHUwMDNlbGV2ZWwgPSBaX0RFRkFVTFRfQ09NUFJFU1NJT047XFxuZHJpdmVycy9ibG9jay96cmFtL2JhY2tlbmRfZGVmbGF0ZS5jOjI3OlxcdGlmIChwYXJhbXMtXFx1MDAzZWRlZmxhdGUud2luYml0cyA9PSBaQ09NUF9QQVJBTV9OT1RfU0VUKSB7XFxuZHJpdmVycy9ibG9jay96cmFtL2JhY2tlbmRfZGVmbGF0ZS5jOjI4OlxcdFxcdHBhcmFtcy1cXHUwMDNlZGVmbGF0ZS53aW5iaXRzID0gREVGTEFURV9ERUZfV0lOQklUUztcXG5kcml2ZXJzL2Jsb2NrL3pyYW0vYmFja2VuZF9kZWZsYXRlLmMtMjktXFx0fSBlbHNlIHtcXG5kcml2ZXJzL2Jsb2NrL3pyYW0vYmFja2VuZF9kZWZsYXRlLmM6MzA6XFx0XFx0czMyIHdiID0gcGFyYW1zLVxcdTAwM2VkZWZsYXRlLndpbmJpdHM7XFxuZHJpdmVycy9ibG9jay96cmFtL2JhY2tlbmRfZGVmbGF0ZS5jLTMxLVxcbi0tXFxuZHJpdmVycy9ibG9jay96cmFtL2JhY2tlbmRfZGVmbGF0ZS5jPTU3PXN0YXRpYyBpbnQgZGVmbGF0ZV9jcmVhdGUoc3RydWN0IHpjb21wX3BhcmFtcyAqcGFyYW1zLCBzdHJ1Y3QgemNvbXBfY3R4ICpjdHgpXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL3pyYW0vYmFja2VuZF9kZWZsYXRlLmMtNjctXFx0Y3R4LVxcdTAwM2Vjb250ZXh0ID0gemN0eDtcXG5kcml2ZXJzL2Jsb2NrL3pyYW0vYmFja2VuZF9kZWZsYXRlLmM6Njg6XFx0c3ogPSB6bGliX2RlZmxhdGVfd29ya3NwYWNlc2l6ZShwYXJhbXMtXFx1MDAzZWRlZmxhdGUud2luYml0cywgTUFYX01FTV9MRVZFTCk7XFxuZHJpdmVycy9ibG9jay96cmFtL2JhY2tlbmRfZGVmbGF0ZS5jLTY5LVxcdHpjdHgtXFx1MDAzZWNjdHgud29ya3NwYWNlID0gdnphbGxvYyhzeik7XFxuLS1cXG5kcml2ZXJzL2Jsb2NrL3pyYW0vYmFja2VuZF9kZWZsYXRlLmMtNzMtXFx0cmV0ID0gemxpYl9kZWZsYXRlSW5pdDIoXFx1MDAyNnpjdHgtXFx1MDAzZWNjdHgsIHBhcmFtcy1cXHUwMDNlbGV2ZWwsIFpfREVGTEFURUQsXFxuZHJpdmVycy9ibG9jay96cmFtL2JhY2tlbmRfZGVmbGF0ZS5jOjc0OlxcdFxcdFxcdFxcdHBhcmFtcy1cXHUwMDNlZGVmbGF0ZS53aW5iaXRzLCBERUZMQVRFX0RFRl9NRU1MRVZFTCxcXG5kcml2ZXJzL2Jsb2NrL3pyYW0vYmFja2VuZF9kZWZsYXRlLmMtNzUtXFx0XFx0XFx0XFx0Wl9ERUZBVUxUX1NUUkFURUdZKTtcXG4tLVxcbmRyaXZlcnMvYmxvY2svenJhbS9iYWNrZW5kX2RlZmxhdGUuYy04My1cXG5kcml2ZXJzL2Jsb2NrL3pyYW0vYmFja2VuZF9kZWZsYXRlLmM6ODQ6XFx0cmV0ID0gemxpYl9pbmZsYXRlSW5pdDIoXFx1MDAyNnpjdHgtXFx1MDAzZWRjdHgsIHBhcmFtcy1cXHUwMDNlZGVmbGF0ZS53aW5iaXRzKTtcXG5kcml2ZXJzL2Jsb2NrL3pyYW0vYmFja2VuZF9kZWZsYXRlLmMtODUtXFx0aWYgKHJldCAhPSBaX09LKVxcbi0tXFxuZHJpdmVycy9ibG9jay96cmFtL3pjb21wLmg9MTA9c3RydWN0IGRlZmxhdGVfcGFyYW1zIHtcXG5kcml2ZXJzL2Jsb2NrL3pyYW0vemNvbXAuaDoxMTpcXHRzMzIgd2luYml0cztcXG5kcml2ZXJzL2Jsb2NrL3pyYW0vemNvbXAuaC0xMi19O1xcbi0tXFxuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmM9MTY4Nz1zdGF0aWMgdm9pZCBjb21wX3BhcmFtc19yZXNldChzdHJ1Y3QgenJhbSAqenJhbSwgdTMyIHByaW8pXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYy0xNjkyLVxcdHBhcmFtcy1cXHUwMDNlbGV2ZWwgPSBaQ09NUF9QQVJBTV9OT1RfU0VUO1xcbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jOjE2OTM6XFx0cGFyYW1zLVxcdTAwM2VkZWZsYXRlLndpbmJpdHMgPSBaQ09NUF9QQVJBTV9OT1RfU0VUO1xcbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jLTE2OTQtXFx0cGFyYW1zLVxcdTAwM2VkaWN0X3N6ID0gMDtcXG4tLVxcbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jPTE2OTg9c3RhdGljIGludCBjb21wX3BhcmFtc19zdG9yZShzdHJ1Y3QgenJhbSAqenJhbSwgdTMyIHByaW8sIHMzMiBsZXZlbCxcXG4tLVxcbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jLTE3MTctXFx0enJhbS1cXHUwMDNlcGFyYW1zW3ByaW9dLmxldmVsID0gbGV2ZWw7XFxuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmM6MTcxODpcXHR6cmFtLVxcdTAwM2VwYXJhbXNbcHJpb10uZGVmbGF0ZS53aW5iaXRzID0gZGVmbGF0ZV9wYXJhbXMtXFx1MDAzZXdpbmJpdHM7XFxuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmMtMTcxOS1cXHRyZXR1cm4gMDtcXG4tLVxcbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jPTE3MjI9c3RhdGljIHNzaXplX3QgYWxnb3JpdGhtX3BhcmFtc19zdG9yZShzdHJ1Y3QgZGV2aWNlICpkZXYsXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYy0xNzMzLVxcbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jOjE3MzQ6XFx0ZGVmbGF0ZV9wYXJhbXMud2luYml0cyA9IFpDT01QX1BBUkFNX05PVF9TRVQ7XFxuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmMtMTczNS1cXG4tLVxcbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jLTE3NjctXFxuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmM6MTc2ODpcXHRcXHRpZiAoIXN0cmNtcChwYXJhbSwgXFxcImRlZmxhdGUud2luYml0c1xcXCIpKSB7XFxuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmM6MTc2OTpcXHRcXHRcXHRyZXQgPSBrc3RydG9pbnQodmFsLCAxMCwgXFx1MDAyNmRlZmxhdGVfcGFyYW1zLndpbmJpdHMpO1xcbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jLTE3NzAtXFx0XFx0XFx0aWYgKHJldClcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMzBUMTA6MDE6MTUuNDM3MjUyOTc3WiIsIlNlcSI6MjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjc1MDgzMzM4OTQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgRnV6emluZyBTdHJhdGVneSBmb3IgWlJBTSBQYXJhbWV0ZXJzKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgaG93IGBhbGdvcml0aG1fcGFyYW1zX3N0b3JlYCBpcyB1c2VkIHRvIGluZmx1ZW5jZSBgd2luYml0c2AuICBUaGlzIGNsZWFybHkgbWFrZXMgaXQgYSBwcmltZSB0YXJnZXQgZm9yIGZ1enppbmcuICBJIG5lZWQgdG8gaWRlbnRpZnkgdGhlIGtleSBmdW5jdGlvbnMgdG8gZm9jdXMgb24sIGtlZXBpbmcgdGhlIGd1aWRlbGluZXMgaW4gbWluZC5cblxuSW5pdGlhbGx5LCBJIGlkZW50aWZpZWQgYGRlZmxhdGVfc2V0dXBfcGFyYW1zYCBhcyByZWxldmFudCwgYnV0IGl0J3MgYSBgc3RhdGljYCBmdW5jdGlvbiwgc28gSSBuZWVkIHRvIHRoaW5rIGNhcmVmdWxseS4gSXQncyBhc3NpZ25lZCB0byBgc2V0dXBfcGFyYW1zYCB3aGljaCBpcyBhIGZ1bmN0aW9uIHBvaW50ZXIgaW4gYHpjb21wX29wc2Agc28gdGhlIGNvbXBpbGVyIHdvbid0IG5lY2Vzc2FyaWx5IGlubGluZSBpdCwgd2hpY2ggd291bGQgbWFrZSBpdCBhbiBpbXBvcnRhbnQgdGFyZ2V0LiBJdCdzIGJlc3QgcHJhY3RpY2UsIGFuZCB0aGUgcHJvbXB0IHNheXMsIHRvIGZvY3VzIG9uIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyByYXRoZXIgdGhhbiBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9ucy4gSSBjYW4gbG9vayBpbnRvIGB6Y29tcF9jcmVhdGVgIGFuZCBgZGlza3NpemVfc3RvcmVgLCBgYWxnb3JpdGhtX3BhcmFtc19zdG9yZWAsIGFuZCBgY29tcF9hbGdvcml0aG1fc3RvcmVgLiBJIGFsc28gaWRlbnRpZmllZCBgenJhbV9kZXN0cm95X2NvbXBzYCwgYGRpc2tzaXplX3N0b3JlYCwgYW5kIGB6cmFtX3Jlc2V0X2RldmljZWAsIGFuZCBgenJhbV9yZW1vdmVgLlxuXG5Ob3csIHJlZ2FyZGluZyBgZGVmbGF0ZV9zZXR1cF9wYXJhbXNgLCBJJ20gcGF1c2luZy4gSXQgaXMgc3RhdGljLCBhbmQgaXQgaXMgYXNzaWduZWQgdG8gYSBmdW5jdGlvbiBwb2ludGVyLCBhbmQgdGhlIHByb21wdCBzdGF0ZXMgdGhhdCBJIHNob3VsZCBmb2N1cyBvbiBub24tc3RhdGljLCBub24taW5saW5lZCBBUElzIHJhdGhlciB0aGFuIGlubGluZWQgaW50ZXJuYWwgZnVuY3Rpb25zLiBTaW5jZSB0aGUgcHJvbXB0IGluZGljYXRlcyB0aGF0IEkgc2hvdWxkIGZvY3VzIG9uIHRoZSBzeXNmcyBzdG9yZSBlbnRyeSBwb2ludHMsIGhlcmUncyBteSB1cGRhdGVkIGxpc3Q6XG5cbiogICBgZGlza3NpemVfc3RvcmVgXG4qICAgYGFsZ29yaXRobV9wYXJhbXNfc3RvcmVgXG4qICAgYHJlc2V0X3N0b3JlYFxuKiAgIGBjb21wX2FsZ29yaXRobV9zdG9yZWBcbiogICBgcmVjb21wX2FsZ29yaXRobV9zdG9yZWBcblxuSSdsbCBkb3VibGUtY2hlY2sgdGhhdCB0aGVzZSBzeXNmcyBzdG9yZSBmdW5jdGlvbnMgYXJlIHN0YXRpYy4gVGhleSBhcmUsIGJ1dCB0aGV5J3JlIHRoZSBBUEkgZW50cnkgcG9pbnRzIGZvciB0aGlzIFpSQU0gZHJpdmVyLCBzbyBldmVuIHRob3VnaCB0aGV5J3JlIHN0YXRpYywgdGhleSBhcmUgdGhlIG9uZXMgSSB3YW50IHRvIHRhcmdldC4gSSBzaG91bGQgYWxzbyBjaGVjayBpZiB0aGVyZSBhcmUgYW55IG5vbi1zdGF0aWMgZnVuY3Rpb25zIGF2YWlsYWJsZSwganVzdCBpbiBjYXNlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNTg2OCwiT3V0cHV0VG9rZW5zIjozMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQxOCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0zMFQxMDowMToyMi45NDU1ODk3MDFaIiwiU2VxIjoyOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEwNjI1NTEzNTksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZGlza3NpemVfc3RvcmVcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9ibG9jay96cmFtL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYz0yODQyPXN0YXRpYyB2b2lkIHpyYW1fcmVzZXRfZGV2aWNlKHN0cnVjdCB6cmFtICp6cmFtKVxcbi0tXFxuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmMtMjg1OC1cXG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYzoyODU5OnN0YXRpYyBzc2l6ZV90IGRpc2tzaXplX3N0b3JlKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsXFxuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmMtMjg2MC1cXHRcXHRcXHQgICAgICBjb25zdCBjaGFyICpidWYsIHNpemVfdCBsZW4pXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYz0zMTEwPXN0YXRpYyBpbnQgenJhbV9yZW1vdmUoc3RydWN0IHpyYW0gKnpyYW0pXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYy0zMTQ2LVxcdC8qXFxuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmM6MzE0NzpcXHQgKiBkaXNrc2l6ZV9zdG9yZSgpIG1heSBiZSBjYWxsZWQgaW4gYmV0d2VlbiB6cmFtX3Jlc2V0X2RldmljZSgpXFxuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmMtMzE0OC1cXHQgKiBhbmQgZGVsX2dlbmRpc2soKSwgc28gcnVuIHRoZSBsYXN0IHJlc2V0IHRvIGF2b2lkIGxlYWtpbmdcXG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYzozMTQ5OlxcdCAqIGFueXRoaW5nIGFsbG9jYXRlZCB3aXRoIGRpc2tzaXplX3N0b3JlKClcXG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYy0zMTUwLVxcdCAqL1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0zMFQxMDowMToyNC4wMDgxNDU4OVoiLCJTZXEiOjI5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozOTMxMzk1MjgwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgc3VtbWFyeSwgYXMgdGhvdWdoIEknbSB0aGlua2luZyB0aHJvdWdoIHRoaXMgcHJvY2VzczpcblxuKipTdGF0aWMgdnMuIE5vbi1TdGF0aWMg4oCTIFRpbWUgdG8gSW52ZXN0aWdhdGUqKlxuXG5Pa2F5LCBzbyBJJ20gbm90aWNpbmcgc29tZXRoaW5nIGhlcmUuIEknbSBzZWVpbmcgYSBsb3Qgb2YgdGhlc2UgZWxlbWVudHMsIGFuZCB0aGV5IGFwcGVhciB0byBiZSAqc3RhdGljKi4gSG1tLCB0aGF0J3Mgbm90IHdoYXQgSSdkIGV4cGVjdCBnaXZlbiB0aGUgY29udGV4dC4gTGV0J3MgZGlnIGluIGEgYml0LiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcyB0byBjaGVjayBgemNvbXBfY3JlYXRlYC4gSSByZWNhbGwgdGhhdCBvbmUgYmVpbmcgKm5vbi1zdGF0aWMqLCBhbmQgdGhhdCdzIGV4YWN0bHkgdGhlIGtpbmQgb2YgdGhpbmcgSSdtIGxvb2tpbmcgYXQgdG8gc2VlIGlmIGl0IGlzIHRoZSBvdXRsaWVyLiBOb3cgbGV0J3Mgc2VlIHdoeS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTcwNzksIk91dHB1dFRva2VucyI6MzEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0zMFQxMDowMToyNy45Mzk1NDM0OFoiLCJTZXEiOjMwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6Mjc5NzM0MjE5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInpjb21wX2NyZWF0ZVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL2Jsb2NrL3pyYW0vXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvYmxvY2svenJhbS96Y29tcC5jPTIyNT12b2lkIHpjb21wX2Rlc3Ryb3koc3RydWN0IHpjb21wICpjb21wKVxcbi0tXFxuZHJpdmVycy9ibG9jay96cmFtL3pjb21wLmMtMjMyLVxcbmRyaXZlcnMvYmxvY2svenJhbS96Y29tcC5jOjIzMzpzdHJ1Y3QgemNvbXAgKnpjb21wX2NyZWF0ZShjb25zdCBjaGFyICphbGcsIHN0cnVjdCB6Y29tcF9wYXJhbXMgKnBhcmFtcylcXG5kcml2ZXJzL2Jsb2NrL3pyYW0vemNvbXAuYy0yMzQte1xcbi0tXFxuZHJpdmVycy9ibG9jay96cmFtL3pjb21wLmg9ODM9Y29uc3QgY2hhciAqemNvbXBfbG9va3VwX2JhY2tlbmRfbmFtZShjb25zdCBjaGFyICpjb21wKTtcXG5kcml2ZXJzL2Jsb2NrL3pyYW0vemNvbXAuaC04NC1cXG5kcml2ZXJzL2Jsb2NrL3pyYW0vemNvbXAuaDo4NTpzdHJ1Y3QgemNvbXAgKnpjb21wX2NyZWF0ZShjb25zdCBjaGFyICphbGcsIHN0cnVjdCB6Y29tcF9wYXJhbXMgKnBhcmFtcyk7XFxuZHJpdmVycy9ibG9jay96cmFtL3pjb21wLmgtODYtdm9pZCB6Y29tcF9kZXN0cm95KHN0cnVjdCB6Y29tcCAqY29tcCk7XFxuLS1cXG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYz0yODU5PXN0YXRpYyBzc2l6ZV90IGRpc2tzaXplX3N0b3JlKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYy0yODg1LVxcbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jOjI4ODY6XFx0XFx0Y29tcCA9IHpjb21wX2NyZWF0ZSh6cmFtLVxcdTAwM2Vjb21wX2FsZ3NbcHJpb10sXFxuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmMtMjg4Ny1cXHRcXHRcXHRcXHQgICAgXFx1MDAyNnpyYW0tXFx1MDAzZXBhcmFtc1twcmlvXSk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMwVDEwOjAxOjI4LjIxOTI4MjE2OFoiLCJTZXEiOjMxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxMjc2NDU0NDk4MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipGdXp6aW5nIFRhcmdldCBJZGVudGlmaWNhdGlvbjogWlJBTSBEZWZsYXRlIEJhY2tlbmQqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIE15IGdvYWwgaXMgdG8gZGV0ZXJtaW5lIHRoZSBiZXN0IGFwcHJvYWNoIGZvciBmdXp6aW5nIHRoZSBaUkFNIGRlZmxhdGUgYmFja2VuZC5cblxuRmlyc3QsIEknbSBub3RpbmcgdGhhdCBgemNvbXBfY3JlYXRlYCBpcyBub24tc3RhdGljLCB3aGlsZSBgenJhbV9yZXNldF9kZXZpY2VgLCBgemNvbXBfaW5pdGAsIGFuZCBgZGVmbGF0ZV9zZXR1cF9wYXJhbXNgIGFyZSBzdGF0aWMuIFRoaXMgaW1tZWRpYXRlbHkgcG9pbnRzIG1lIHRvd2FyZHMgZnVuY3Rpb25zIHRoYXQgbWlnaHQgYmUgbW9yZSByZWFkaWx5IGFjY2Vzc2libGUgdmlhIGV4dGVybmFsIGludGVyZmFjZXMuXG5cbkknbSBtYWtpbmcgYSBsaXN0OiBJIG5lZWQgdG8gY29uc2lkZXIgYHpjb21wX2NyZWF0ZWAgYW5kIGl0cyBjb3VudGVycGFydCBgemNvbXBfZGVzdHJveWAuIFRoZW4sIHRoaW5raW5nIGFib3V0IGhvdyBzeXprYWxsZXIgb3BlcmF0ZXPigJRpbnRlcmFjdGluZyB3aXRoIHN5c2ZzLCBuYW1lbHkgYnkgb3BlbmluZyBhbmQgd3JpdGluZyB0byBmaWxlc+KAlEkgcmVhbGl6ZSB0aGF0IGV2ZW4gaWYgZnVuY3Rpb25zIGxpa2UgYGRpc2tzaXplX3N0b3JlYCwgYGFsZ29yaXRobV9wYXJhbXNfc3RvcmVgLCBhbmQgYHJlc2V0X3N0b3JlYCBhcmUgKnN0YXRpYyosIHRoZXkgYXJlIHRoZSBlbnRyeSBwb2ludHMgdGhhdCBoYW5kbGUgaW5wdXQgZGF0YS4gVGhleSdyZSBjcml0aWNhbC5cblxuU28sIGhlcmUncyBteSB1cGRhdGVkIGxpc3Qgb2YgZnVuY3Rpb25zIHRvIHRhcmdldDpcblxuKiAgIGB6Y29tcF9jcmVhdGVgXG4qICAgYGRpc2tzaXplX3N0b3JlYFxuKiAgIGBhbGdvcml0aG1fcGFyYW1zX3N0b3JlYFxuKiAgIGByZXNldF9zdG9yZWBcbiogICBgenJhbV9yZXNldF9kZXZpY2VgXG4qICAgYHpyYW1fZGVzdHJveV9jb21wc2BcbiogICBgZGVmbGF0ZV9zZXR1cF9wYXJhbXNgXG5cbkknbSBkb3VibGUtY2hlY2tpbmcgdGhlIHN0YXRpYyBuYXR1cmUgb2YgYHpyYW1fZGVzdHJveV9jb21wc2AgYW5kIGBkZWZsYXRlX3NldHVwX3BhcmFtc2AgZm9yIGNvbmZpcm1hdGlvbiwganVzdCB0byBiZSBzdXJlLlxuXG5Ob3csIGxldCdzIGlkZW50aWZ5IHRoZSByZXF1aXJlZCBrZXJuZWwgY29uZmlncy4gV2UgZGVmaW5pdGVseSBuZWVkIGBaUkFNYCBhbmQgYFpSQU1fQkFDS0VORF9ERUZMQVRFYC4gSSdtIGNvbmZpcm1pbmcgdGhhdCB0aGVyZSBhcmVuJ3QgYW55IG90aGVyIGRlcGVuZGVuY2llcyB0aGF0IG1pZ2h0IGJlIHJlbGV2YW50OyBgWlJBTWAgZGVwZW5kcyBvbiBgQkxPQ0sgXHUwMDI2XHUwMDI2IFNZU0ZTIFx1MDAyNlx1MDAyNiBNTVVgIGFuZCBgWlJBTV9CQUNLRU5EX0RFRkxBVEVgIGRlcGVuZHMgb24gYFpSQU1gLiBUaGF0IHNlZW1zIHN0cmFpZ2h0Zm9yd2FyZC4gVGhlbiBjb25maXJtaW5nIHRoYXQgYFpSQU1fQkFDS0VORF9ERUZMQVRFYCBlbmFibGVzIHRoZSBkZWZsYXRlIGJhY2tlbmQsIHdoaWNoIGlzIGV4YWN0bHkgd2hhdCBJIGV4cGVjdC5cblxuT2theSwgbGV0J3MgYW5hbHl6ZSB0aGUgcmVsZXZhbnQgY29kZSBjaGFuZ2VzIGluIGB6cmFtX2Rydi5jYC4gVGhlIGRpZmYgc2hvd3MgdGhhdCBgY29tcF9hbGdvcml0aG1fc2V0YCBoYXMgYmVlbiBtb3ZlZCBmcm9tIGB6cmFtX3Jlc2V0X2RldmljZWAgdG8gYHpyYW1fZGVzdHJveV9jb21wc2AuIFRoYXQncyBpbXBvcnRhbnQuIGB6cmFtX2Rlc3Ryb3lfY29tcHNgIGlzIGNhbGxlZCBmcm9tIGB6cmFtX3Jlc2V0X2RldmljZWAgYW5kIGFsc28sIGltcG9ydGFudGx5LCBmcm9tIGBkaXNrc2l6ZV9zdG9yZWAgaW4gY2FzZSBvZiBhbiBlcnJvci4gVGhpcyBtZWFucyB0aGF0LCBhZnRlciBhbiBlcnJvciBpbiBgZGlza3NpemVfc3RvcmVgLCB0aGUgYWxnb3JpdGhtIHdpbGwgYmUgcmVzZXQgdG8gYGRlZmF1bHRfY29tcHJlc3NvcmAuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSwgYW5kIGZ1bmN0aW9uYWwgY2hhbmdlcyBvZnRlbiBpbnRyb2R1Y2UgbmV3IGJ1Z3MuXG5cblRoZSBjb2RlIGNoYW5nZXMgaW5kaWNhdGUgdGhhdCB0aGVzZSBhcmUgZGVmaW5pdGVseSB3b3J0aCBmdXp6aW5nLlxuXG5NeSBzdHJhdGVneSBpcyB0byBzZXQ6XG5gV29ydGhGdXp6aW5nOiB0cnVlYFxuYEZvY3VzU3ltYm9sc2A6IHdoaWNoIHdpbGwgYmUgdGhlIGxpc3QgYWJvdmUuXG5gRW5hYmxlQ29uZmlnc2A6IHdoaWNoIGFyZSBgWlJBTWAgYW5kIGBaUkFNX0JBQ0tFTkRfREVGTEFURWBcblxuRmluYWxseSwgYSBxdWljayB2ZXJpZmljYXRpb24gb2YgdGhlIGZ1bmN0aW9uIG5hbWVzIHRvIGVuc3VyZSB0aGV5J3JlIGV4YWN0bHkgYXMgZXhwZWN0ZWQ6IGNvbmZpcm1pbmcgYGRlZmxhdGVfc2V0dXBfcGFyYW1zYCwgYHpyYW1fZGVzdHJveV9jb21wc2AsIGBkaXNrc2l6ZV9zdG9yZWAsIGBhbGdvcml0aG1fcGFyYW1zX3N0b3JlYCwgYW5kIGByZXNldF9zdG9yZWAuIEFsbCBjb25maXJtZWQuXG5UaW1lIHRvIGNhbGwgYHNldC1yZXN1bHRzYC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTc2MzQsIk91dHB1dFRva2VucyI6MTU2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6OTAzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMwVDEwOjAxOjQwLjk4MzgyOTE1MloiLCJTZXEiOjMyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjc5MTk4NjczLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJaUkFNXCIsXG4gICAgXCJaUkFNX0JBQ0tFTkRfREVGTEFURVwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInpjb21wX2NyZWF0ZVwiLFxuICAgIFwiZGlza3NpemVfc3RvcmVcIixcbiAgICBcImFsZ29yaXRobV9wYXJhbXNfc3RvcmVcIixcbiAgICBcInJlc2V0X3N0b3JlXCIsXG4gICAgXCJ6cmFtX2Rlc3Ryb3lfY29tcHNcIixcbiAgICBcImRlZmxhdGVfc2V0dXBfcGFyYW1zXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcyB2YWxpZGF0aW9uIGZvciB0aGUgZGVmbGF0ZSB3aW5iaXRzIHBhcmFtZXRlciBhbmQgY2hhbmdlcyB0aGUgYmVoYXZpb3Igb2YgenJhbV9kZXN0cm95X2NvbXBzIHRvIHJlc2V0IHRoZSBjb21wcmVzc2lvbiBhbGdvcml0aG0uIFRoZXNlIGFyZSBmdW5jdGlvbmFsIGNoYW5nZXMgaW4gdGhlIHpyYW0gZHJpdmVyIHRoYXQgYXJlIHJlYWNoYWJsZSB2aWEgc3lzZnMgYXR0cmlidXRlcyAoZS5nLiwgZGlza3NpemUsIGFsZ29yaXRobV9wYXJhbXMsIHJlc2V0KSBhbmQgc2hvdWxkIGJlIGZ1enplZC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJaUkFNXCIsXG4gICAgXCJaUkFNX0JBQ0tFTkRfREVGTEFURVwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInpjb21wX2NyZWF0ZVwiLFxuICAgIFwiZGlza3NpemVfc3RvcmVcIixcbiAgICBcImFsZ29yaXRobV9wYXJhbXNfc3RvcmVcIixcbiAgICBcInJlc2V0X3N0b3JlXCIsXG4gICAgXCJ6cmFtX2Rlc3Ryb3lfY29tcHNcIixcbiAgICBcImRlZmxhdGVfc2V0dXBfcGFyYW1zXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcyB2YWxpZGF0aW9uIGZvciB0aGUgZGVmbGF0ZSB3aW5iaXRzIHBhcmFtZXRlciBhbmQgY2hhbmdlcyB0aGUgYmVoYXZpb3Igb2YgenJhbV9kZXN0cm95X2NvbXBzIHRvIHJlc2V0IHRoZSBjb21wcmVzc2lvbiBhbGdvcml0aG0uIFRoZXNlIGFyZSBmdW5jdGlvbmFsIGNoYW5nZXMgaW4gdGhlIHpyYW0gZHJpdmVyIHRoYXQgYXJlIHJlYWNoYWJsZSB2aWEgc3lzZnMgYXR0cmlidXRlcyAoZS5nLiwgZGlza3NpemUsIGFsZ29yaXRobV9wYXJhbXMsIHJlc2V0KSBhbmQgc2hvdWxkIGJlIGZ1enplZC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLmR1cmF0aW9uIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnTGxtVG9rZW4gPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS50b2tlbnMgLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdUb29sRHVyID0gc3RhdHMudG9vbC5jb3VudCA+IDAgPyAoc3RhdHMudG9vbC5kdXJhdGlvbiAvIHN0YXRzLnRvb2wuY291bnQpLnRvRml4ZWQoMikgOiAwOwoKCQkJY29uc3QgbGxtU3VtYXJ5Q2VsbHMgPSBbc3RhdHMubGxtLmNvdW50LCBzdGF0cy5sbG0udG9rZW5zLCBhdmdMbG1Ub2tlbiwgc3RhdHMubGxtLmR1cmF0aW9uLCBhdmdMbG1EdXJdOwoJCQljb25zdCB0b29sU3VtbWFyeUNlbGxzID0gW3N0YXRzLnRvb2wuY291bnQsIHN0YXRzLnRvb2wuZHVyYXRpb24sIGF2Z1Rvb2xEdXJdOwoKCQkJY29uc3QgbGxtU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbGxtX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQlsbG1TdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgbGxtVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQlsbG1TdW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJbGxtVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJbGxtU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQobGxtVHIpOwoKCQkJY29uc3QgdG9vbFN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rvb2xfc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgdG9vbFRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJdG9vbFN1bW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJdG9vbFRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZCh0b29sVHIpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBmaWx0ZXJlZFN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBbImxsbSIsICJ0b29sIl0uaW5jbHVkZXMoZC5UeXBlKSk7CgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ0R1cmF0aW9uJyk7CgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7IAoKCQkJZmlsdGVyZWRTdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJCgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsKCQkJCWxldCB0b29sdGlwID0gcy5OYW1lOwoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIgJiYgcy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoJCQkJZGF0YS5hZGRSb3coW2Ake3MuU2VxfWAsIGR1ciwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1RpbWUgQ29uc3VtcHRpb24gb2YgTExNL1Rvb2wgQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTS9Ub29sIFN0ZXBzJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ1NlY29uZHMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2R1cmF0aW9uX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBsbG1TdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gZC5UeXBlID09PSAibGxtIik7CgkJCWlmIChsbG1TdGVwcy5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwkJCQoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ1Rva2VucycpOwkJCQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICdzdHlsZSd9KTsJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7CQoKCQkJY29uc3QgYWdlbnRDb2xvcnMgPSB7fTsKCQkJY29uc3QgcGFsZXR0ZSA9IFsnIzQyODVGNCcsICcjREI0NDM3JywgJyNGNEI0MDAnLCAnIzBGOUQ1OCcsICcjQUI0N0JDJywgJyMwMEFDQzEnXTsKCQkJbGV0IGNvbG9ySWR4ID0gMDsKCQkJY29uc3QgYWdlbnRMTE1Db3VudHMgPSB7fTsKCQkJbGxtU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCWlmICghYWdlbnRDb2xvcnNbcy5OYW1lXSkgewoJCQkJCWFnZW50Q29sb3JzW3MuTmFtZV0gPSBwYWxldHRlW2NvbG9ySWR4ICUgcGFsZXR0ZS5sZW5ndGhdOwoJCQkJCWNvbG9ySWR4Kys7CgkJCQl9CgoJCQkJYWdlbnRMTE1Db3VudHNbcy5OYW1lXSA9IChhZ2VudExMTUNvdW50c1tzLk5hbWVdIHx8IDApICsgMTsKCQkJCWNvbnN0IGxhYmVsID0gYCR7cy5OYW1lfS0ke2FnZW50TExNQ291bnRzW3MuTmFtZV19YDsKCQkJCWNvbnN0IHRvdGFsVG9rZW5zID0gcy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2VuczsKCQkJCWNvbnN0IHN0eWxlID0gYGNvbG9yOiAke2FnZW50Q29sb3JzW3MuTmFtZV19YDsKCQkJCWxldCB0b29sdGlwID0gYFRvdGFsIFRva2VuczogJHt0b3RhbFRva2Vuc31cbihJbjogJHtzLklucHV0VG9rZW5zfSwgT3V0OiAke3MuT3V0cHV0VG9rZW5zfSwgVGhvdWdodHM6ICR7cy5PdXRwdXRUaG91Z2h0c1Rva2Vuc30pYDsKCQkJCWlmIChzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgoJCQkJZGF0YS5hZGRSb3coW2xhYmVsLCB0b3RhbFRva2Vucywgc3R5bGUsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUb2tlbiBDb25zdW1wdGlvbiBieSBMTE0gQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTSBDYWxsIFNlcXVlbmNlJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ0NvbnN1bWVkIFRva2VucycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9rZW5fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCQlsZXQgYWxsRXhwYW5kZWQgPSBmYWxzZTsKCQlmdW5jdGlvbiB0b2dnbGVBbGxEZXRhaWxzKCkgewoJCQlhbGxFeHBhbmRlZCA9ICFhbGxFeHBhbmRlZDsKCQkJZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnZGV0YWlscycpLmZvckVhY2goZCA9PiB7CgkJCQlpZiAoYWxsRXhwYW5kZWQpIGQuc2V0QXR0cmlidXRlKCdvcGVuJywgJycpOwoJCQkJZWxzZSBkLnJlbW92ZUF0dHJpYnV0ZSgnb3BlbicpOwoJCQl9KTsKCQl9Cgk8L3NjcmlwdD4KCgo8L2JvZHk+CjwvaHRtbD4K" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowxqs88[0].run-triage(0) Phase: Succeeded StartedAt: 2026-07-30 09:42:24 +0000 UTC FinishedAt: 2026-07-30 10:01:42 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "mm-new", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git", "commit_hash": "2e0c36e540a15bb6f5ffa2409001fb42219791c6", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "ZRAM", "ZRAM_BACKEND_DEFLATE" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "mm-new", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git", "commit_hash": "2e0c36e540a15bb6f5ffa2409001fb42219791c6", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "ZRAM", "ZRAM_BACKEND_DEFLATE" ], "series_id": "56f8bfe6-a91a-4309-b001-373ab865e793" }, "track": "KASAN", "fuzz": { "focus": null, "focus_symbols": [ "zcomp_create", "disksize_store", "algorithm_params_store", "reset_store", "zram_destroy_comps", "deflate_setup_params" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db" ], "skip_cover_check": true, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMwIDEwOjAwPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1pSQU0mIzM0OywKICAgICYjMzQ7WlJBTV9CQUNLRU5EX0RFRkxBVEUmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDt6Y29tcF9jcmVhdGUmIzM0OywKICAgICYjMzQ7ZGlza3NpemVfc3RvcmUmIzM0OywKICAgICYjMzQ7YWxnb3JpdGhtX3BhcmFtc19zdG9yZSYjMzQ7LAogICAgJiMzNDtyZXNldF9zdG9yZSYjMzQ7LAogICAgJiMzNDt6cmFtX2Rlc3Ryb3lfY29tcHMmIzM0OywKICAgICYjMzQ7ZGVmbGF0ZV9zZXR1cF9wYXJhbXMmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcyB2YWxpZGF0aW9uIGZvciB0aGUgZGVmbGF0ZSB3aW5iaXRzIHBhcmFtZXRlciBhbmQgY2hhbmdlcyB0aGUgYmVoYXZpb3Igb2YgenJhbV9kZXN0cm95X2NvbXBzIHRvIHJlc2V0IHRoZSBjb21wcmVzc2lvbiBhbGdvcml0aG0uIFRoZXNlIGFyZSBmdW5jdGlvbmFsIGNoYW5nZXMgaW4gdGhlIHpyYW0gZHJpdmVyIHRoYXQgYXJlIHJlYWNoYWJsZSB2aWEgc3lzZnMgYXR0cmlidXRlcyAoZS5nLiwgZGlza3NpemUsIGFsZ29yaXRobV9wYXJhbXMsIHJlc2V0KSBhbmQgc2hvdWxkIGJlIGZ1enplZC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMCAxMDowMDwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IDUxNGVkOGVhMzNhNjRlOTU0ZDllZTExNDIzYTYzYmM0OWY0YTAzMjZcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVGh1IEp1bCAzMCAxMDowMDoyNyAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9kcml2ZXJzL2Jsb2NrL3pyYW0vYmFja2VuZF9kZWZsYXRlLmMgYi9kcml2ZXJzL2Jsb2NrL3pyYW0vYmFja2VuZF9kZWZsYXRlLmNcbmluZGV4IGY5MmE1MmE3MjBkMWUuLjcyOWFjNzM0ZGQ2YzEgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL2Jsb2NrL3pyYW0vYmFja2VuZF9kZWZsYXRlLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvYmxvY2svenJhbS9iYWNrZW5kX2RlZmxhdGUuY1xuQEAgLTI0LDggJiM0MzsyNCwxNCBAQCBzdGF0aWMgaW50IGRlZmxhdGVfc2V0dXBfcGFyYW1zKHN0cnVjdCB6Y29tcF9wYXJhbXMgKnBhcmFtcylcbiB7XG4gXHRpZiAocGFyYW1zLVx1MDAzZWxldmVsID09IFpDT01QX1BBUkFNX05PVF9TRVQpXG4gXHRcdHBhcmFtcy1cdTAwM2VsZXZlbCA9IFpfREVGQVVMVF9DT01QUkVTU0lPTjtcbi1cdGlmIChwYXJhbXMtXHUwMDNlZGVmbGF0ZS53aW5iaXRzID09IFpDT01QX1BBUkFNX05PVF9TRVQpXG4mIzQzO1x0aWYgKHBhcmFtcy1cdTAwM2VkZWZsYXRlLndpbmJpdHMgPT0gWkNPTVBfUEFSQU1fTk9UX1NFVCkge1xuIFx0XHRwYXJhbXMtXHUwMDNlZGVmbGF0ZS53aW5iaXRzID0gREVGTEFURV9ERUZfV0lOQklUUztcbiYjNDM7XHR9IGVsc2Uge1xuJiM0MztcdFx0czMyIHdiID0gcGFyYW1zLVx1MDAzZWRlZmxhdGUud2luYml0cztcbiYjNDM7XG4mIzQzO1x0XHRpZiAoKHdiIFx1MDAzYyAtMTUgfHwgd2IgXHUwMDNlIC05KSBcdTAwMjZcdTAwMjYgKHdiIFx1MDAzYyA5IHx8IHdiIFx1MDAzZSAxNSkpXG4mIzQzO1x0XHRcdHJldHVybiAtRUlOVkFMO1xuJiM0MztcdH1cbiBcbiBcdHJldHVybiAwO1xuIH1cbmRpZmYgLS1naXQgYS9kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYyBiL2RyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jXG5pbmRleCBhY2U2NWM1ODYwNzJiLi5lYmUyZGE5NTUxODJmIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmNcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jXG5AQCAtMjgzNiw2ICYjNDM7MjgzNiw3IEBAIHN0YXRpYyB2b2lkIHpyYW1fZGVzdHJveV9jb21wcyhzdHJ1Y3QgenJhbSAqenJhbSlcbiBcdFx0enJhbS1cdTAwM2Vjb21wX2FsZ3NbcHJpb10gPSBOVUxMO1xuIFxuIFx0enJhbV9jb21wX3BhcmFtc19yZXNldCh6cmFtKTtcbiYjNDM7XHRjb21wX2FsZ29yaXRobV9zZXQoenJhbSwgWlJBTV9QUklNQVJZX0NPTVAsIGRlZmF1bHRfY29tcHJlc3Nvcik7XG4gfVxuIFxuIHN0YXRpYyB2b2lkIHpyYW1fcmVzZXRfZGV2aWNlKHN0cnVjdCB6cmFtICp6cmFtKVxuQEAgLTI4NTMsOCAmIzQzOzI4NTQsNiBAQCBzdGF0aWMgdm9pZCB6cmFtX3Jlc2V0X2RldmljZShzdHJ1Y3QgenJhbSAqenJhbSlcbiBcdHpyYW1fZGVzdHJveV9jb21wcyh6cmFtKTtcbiBcdG1lbXNldChcdTAwMjZ6cmFtLVx1MDAzZXN0YXRzLCAwLCBzaXplb2YoenJhbS1cdTAwM2VzdGF0cykpO1xuIFx0cmVzZXRfYmRldih6cmFtKTtcbi1cbi1cdGNvbXBfYWxnb3JpdGhtX3NldCh6cmFtLCBaUkFNX1BSSU1BUllfQ09NUCwgZGVmYXVsdF9jb21wcmVzc29yKTtcbiB9XG4gXG4gc3RhdGljIHNzaXplX3QgZGlza3NpemVfc3RvcmUoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0cixcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMCAxMDowMDwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4xbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5iZXN0LWV4cGVuc2l2ZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7WlJBTSYjMzQ7LAogICAgJiMzNDtaUkFNX0JBQ0tFTkRfREVGTEFURSYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3pjb21wX2NyZWF0ZSYjMzQ7LAogICAgJiMzNDtkaXNrc2l6ZV9zdG9yZSYjMzQ7LAogICAgJiMzNDthbGdvcml0aG1fcGFyYW1zX3N0b3JlJiMzNDssCiAgICAmIzM0O3Jlc2V0X3N0b3JlJiMzNDssCiAgICAmIzM0O3pyYW1fZGVzdHJveV9jb21wcyYjMzQ7LAogICAgJiMzNDtkZWZsYXRlX3NldHVwX3BhcmFtcyYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRzIHZhbGlkYXRpb24gZm9yIHRoZSBkZWZsYXRlIHdpbmJpdHMgcGFyYW1ldGVyIGFuZCBjaGFuZ2VzIHRoZSBiZWhhdmlvciBvZiB6cmFtX2Rlc3Ryb3lfY29tcHMgdG8gcmVzZXQgdGhlIGNvbXByZXNzaW9uIGFsZ29yaXRobS4gVGhlc2UgYXJlIGZ1bmN0aW9uYWwgY2hhbmdlcyBpbiB0aGUgenJhbSBkcml2ZXIgdGhhdCBhcmUgcmVhY2hhYmxlIHZpYSBzeXNmcyBhdHRyaWJ1dGVzIChlLmcuLCBkaXNrc2l6ZSwgYWxnb3JpdGhtX3BhcmFtcywgcmVzZXQpIGFuZCBzaG91bGQgYmUgZnV6emVkLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmUKaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseQp1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLgoKUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczoKLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLgotIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLgotIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy4KLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsCiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLgotIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLAogIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpCiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLgoKSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaAp0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4KCldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOgoxLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLgogICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4KICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zCiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLgoyLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS4KICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgogICBBbHNvIGNoZWNrICYjMzQ7ZGVwZW5kcyBvbiYjMzQ7IGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncwogICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3MKICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgNTE0ZWQ4ZWEzM2E2NGU5NTRkOWVlMTE0MjNhNjNiYzQ5ZjRhMDMyNgpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBUaHUgSnVsIDMwIDEwOjAwOjI3IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ibG9jay96cmFtL2JhY2tlbmRfZGVmbGF0ZS5jIGIvZHJpdmVycy9ibG9jay96cmFtL2JhY2tlbmRfZGVmbGF0ZS5jCmluZGV4IGY5MmE1MmE3MjBkMWUuLjcyOWFjNzM0ZGQ2YzEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYmxvY2svenJhbS9iYWNrZW5kX2RlZmxhdGUuYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL2Jsb2NrL3pyYW0vYmFja2VuZF9kZWZsYXRlLmMKQEAgLTI0LDggJiM0MzsyNCwxNCBAQCBzdGF0aWMgaW50IGRlZmxhdGVfc2V0dXBfcGFyYW1zKHN0cnVjdCB6Y29tcF9wYXJhbXMgKnBhcmFtcykKIHsKIAlpZiAocGFyYW1zLSZndDtsZXZlbCA9PSBaQ09NUF9QQVJBTV9OT1RfU0VUKQogCQlwYXJhbXMtJmd0O2xldmVsID0gWl9ERUZBVUxUX0NPTVBSRVNTSU9OOwotCWlmIChwYXJhbXMtJmd0O2RlZmxhdGUud2luYml0cyA9PSBaQ09NUF9QQVJBTV9OT1RfU0VUKQomIzQzOwlpZiAocGFyYW1zLSZndDtkZWZsYXRlLndpbmJpdHMgPT0gWkNPTVBfUEFSQU1fTk9UX1NFVCkgewogCQlwYXJhbXMtJmd0O2RlZmxhdGUud2luYml0cyA9IERFRkxBVEVfREVGX1dJTkJJVFM7CiYjNDM7CX0gZWxzZSB7CiYjNDM7CQlzMzIgd2IgPSBwYXJhbXMtJmd0O2RlZmxhdGUud2luYml0czsKJiM0MzsKJiM0MzsJCWlmICgod2IgJmx0OyAtMTUgfHwgd2IgJmd0OyAtOSkgJmFtcDsmYW1wOyAod2IgJmx0OyA5IHx8IHdiICZndDsgMTUpKQomIzQzOwkJCXJldHVybiAtRUlOVkFMOwomIzQzOwl9CiAKIAlyZXR1cm4gMDsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jIGIvZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmMKaW5kZXggYWNlNjVjNTg2MDcyYi4uZWJlMmRhOTU1MTgyZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmMKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmMKQEAgLTI4MzYsNiAmIzQzOzI4MzYsNyBAQCBzdGF0aWMgdm9pZCB6cmFtX2Rlc3Ryb3lfY29tcHMoc3RydWN0IHpyYW0gKnpyYW0pCiAJCXpyYW0tJmd0O2NvbXBfYWxnc1twcmlvXSA9IE5VTEw7CiAKIAl6cmFtX2NvbXBfcGFyYW1zX3Jlc2V0KHpyYW0pOwomIzQzOwljb21wX2FsZ29yaXRobV9zZXQoenJhbSwgWlJBTV9QUklNQVJZX0NPTVAsIGRlZmF1bHRfY29tcHJlc3Nvcik7CiB9CiAKIHN0YXRpYyB2b2lkIHpyYW1fcmVzZXRfZGV2aWNlKHN0cnVjdCB6cmFtICp6cmFtKQpAQCAtMjg1Myw4ICYjNDM7Mjg1NCw2IEBAIHN0YXRpYyB2b2lkIHpyYW1fcmVzZXRfZGV2aWNlKHN0cnVjdCB6cmFtICp6cmFtKQogCXpyYW1fZGVzdHJveV9jb21wcyh6cmFtKTsKIAltZW1zZXQoJmFtcDt6cmFtLSZndDtzdGF0cywgMCwgc2l6ZW9mKHpyYW0tJmd0O3N0YXRzKSk7CiAJcmVzZXRfYmRldih6cmFtKTsKLQotCWNvbXBfYWxnb3JpdGhtX3NldCh6cmFtLCBaUkFNX1BSSU1BUllfQ09NUCwgZGVmYXVsdF9jb21wcmVzc29yKTsKIH0KIAogc3RhdGljIHNzaXplX3QgZGlza3NpemVfc3RvcmUoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzAgMTA6MDA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjQ4NwoJCQkJCQkJb3V0cHV0OiAzMwoJCQkJCQkJdGhvdWdodHM6IDE4MwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIFpSQU0gUGF0Y2gqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggdGhhdCB0b3VjaGVzIGBkcml2ZXJzL2Jsb2NrL3pyYW0vYmFja2VuZF9kZWZsYXRlLmNgIGFuZCBgZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmNgLiBGcm9tIHdoYXQgSSBnYXRoZXIsIHRoZSBmaXJzdCBwYXJ0IGlzIGFkZGluZyBzb21lIHZhbGlkYXRpb24gZm9yIGBwYXJhbXMtJmd0O2RlZmxhdGUud2luYml0c2AgaW4gdGhlIGRlZmxhdGUgYmFja2VuZC4gU2VlbXMgc3RyYWlnaHRmb3J3YXJkIGVub3VnaDsgbWFraW5nIHN1cmUgdGhlIHdpbmRvdyBzaXplIGlzIHJlYXNvbmFibGUgaXMgYSBnb29kIHByYWN0aWNlLgoKTm93LCB0aGUgbW9yZSBpbnRlcmVzdGluZyBiaXQgaXMgdGhlIGNoYW5nZSBpbiBgenJhbV9kcnYuY2AuIEl0IGxvb2tzIGxpa2UgdGhleSYjMzk7cmUgbW92aW5nIGBjb21wX2FsZ29yaXRobV9zZXQoenJhbSwgWlJBTV9QUklNQVJZX0NPTVAsIGRlZmF1bHRfY29tcHJlc3Nvcik7YCBmcm9tIGB6cmFtX3Jlc2V0X2RldmljZWAgdG8gYHpyYW1fZGVzdHJveV9jb21wc2AuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoeS4gSXQgc2VlbXMgbGlrZSBhIGNoYW5nZSBpbiBpbml0aWFsaXphdGlvbiBvciBjbGVhbnVwLiBMZXQmIzM5O3MgZGlnIGludG8gdGhhdC4uLgoKRmlyc3QgdGhpbmdzIGZpcnN0LCBJJiMzOTtsbCByZWZyZXNoIG15IG1lbW9yeSBvZiB0aGUgY29udHJvbCBmbG93IGhlcmUuIExldCYjMzk7cyBzZWUsIGB6cmFtX2Rlc3Ryb3lfY29tcHNgIGlzIGNhbGxlZCBmcm9tIGB6cmFtX3Jlc2V0X2RldmljZWAsIHdoaWNoIGlzIGEga2V5IHBhcnQgb2YgdGhlIFpSQU0gbGlmZWN5Y2xlLiBXYWl0IGEgc2Vjb25kLCB3YXNuJiMzOTt0IGB6cmFtX2Rlc3Ryb3lfY29tcHNgIGNhbGxlZCBmcm9tIHNvbWV3aGVyZSBlbHNlIHRvbz8gSSB0aGluayBpdCB3YXMgYWxzbyBjYWxsZWQgZnJvbSBgenJhbV9yZW1vdmVgLiBJIHNob3VsZCBxdWlja2x5IHZlcmlmeSB0aGF0LCBqdXN0IHRvIG1ha2Ugc3VyZSBteSB1bmRlcnN0YW5kaW5nIGlzIHNvbGlkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMwIDEwOjAwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3pyYW1fZGVzdHJveV9jb21wcyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvYmxvY2svenJhbS8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmM9MjgxMz1zdGF0aWMgdm9pZCB6cmFtX2NvbXBfcGFyYW1zX3Jlc2V0KHN0cnVjdCB6cmFtICp6cmFtKVxuLS1cbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jLTI4MjEtXG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYzoyODIyOnN0YXRpYyB2b2lkIHpyYW1fZGVzdHJveV9jb21wcyhzdHJ1Y3QgenJhbSAqenJhbSlcbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jLTI4MjMte1xuLS1cbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jPTI4NDI9c3RhdGljIHZvaWQgenJhbV9yZXNldF9kZXZpY2Uoc3RydWN0IHpyYW0gKnpyYW0pXG4tLVxuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmMtMjg1My1cdHpyYW0tXHUwMDNlZGlza3NpemUgPSAwO1xuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmM6Mjg1NDpcdHpyYW1fZGVzdHJveV9jb21wcyh6cmFtKTtcbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jLTI4NTUtXHRtZW1zZXQoXHUwMDI2enJhbS1cdTAwM2VzdGF0cywgMCwgc2l6ZW9mKHpyYW0tXHUwMDNlc3RhdHMpKTtcbi0tXG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYz0yODU5PXN0YXRpYyBzc2l6ZV90IGRpc2tzaXplX3N0b3JlKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsXG4tLVxuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmMtMjkwMi1vdXRfZnJlZV9jb21wczpcbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jOjI5MDM6XHR6cmFtX2Rlc3Ryb3lfY29tcHMoenJhbSk7XG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYy0yOTA0LVx0enJhbV9tZXRhX2ZyZWUoenJhbSwgZGlza3NpemUpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMwIDEwOjAwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDMzOTIKCQkJCQkJCW91dHB1dDogMzMKCQkJCQkJCXRob3VnaHRzOiA3NgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4KCioqQW5hbHl6aW5nIEVycm9yIEhhbmRsaW5nIGluIHpyYW0gRGlzayBTaXplIENvbmZpZ3VyYXRpb24qKgoKUmlnaHQsIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGUgYHpyYW1gIGNvZGUsIHNwZWNpZmljYWxseSBob3cgaXQgaGFuZGxlcyBlcnJvcnMgd2hlbiBzZXR0aW5nIHRoZSBkaXNrIHNpemUuIEkgc2VlIHRoYXQgYHpyYW1fZGVzdHJveV9jb21wc2AgaXMgdHJpZ2dlcmVkIGZyb20gYGRpc2tzaXplX3N0b3JlYCBpbiB0aGUgZXZlbnQgb2YgYW4gZXJyb3IsIHNwZWNpZmljYWxseSBhdCB0aGF0IGBvdXRfZnJlZV9jb21wc2AgcG9pbnQuIEN1cnJlbnRseSwgdGhpcyBtZWFucyBpZiB0aGVyZSYjMzk7cyBhbiBpc3N1ZSBkdXJpbmcgYSBkaXNrIHNpemUgb3BlcmF0aW9uLCB3ZSBjbGVhbiB1cCBjb21wcmVzc2lvbiBjb21wb25lbnRzLgoKVGhlIGludGVyZXN0aW5nIGJpdCBpcyB0aGlzIHByb3Bvc2VkIGNoYW5nZS4gTW92aW5nIGBjb21wX2FsZ29yaXRobV9zZXRgIGludG8gYHpyYW1fZGVzdHJveV9jb21wc2AgbWVhbnMgdGhhdCB0aGUgY29tcHJlc3Npb24gYWxnb3JpdGhtIHNldHVwIHdpbGwgKmFsc28qIGJlIGNsZWFuZWQgdXAgb24gdGhlIGVycm9yIHBhdGggd2l0aGluIGBkaXNrc2l6ZV9zdG9yZWAuIFRoYXTigJlzIHNpZ25pZmljYW50LCBiZWNhdXNlIGl0IGVuc3VyZXMgYSBjb25zaXN0ZW50IGNsZWFudXAsIG5vIG1hdHRlciB3aGF0IHdlbnQgd3Jvbmcgd2hlbiBzZXR0aW5nIHRoZSBkaXNrIHNpemUuIE1ha2VzIHNlbnNlLCBpdCBrZWVwcyBldmVyeXRoaW5nIGluIHN5bmMuIFRoaXMgaXMgaW1wb3J0YW50IHRvIGNvbnNpZGVyIGFzIGl0IGNvdWxkIHByb3ZpZGUgY29uc2lzdGVudCBmYWlsdXJlIHN0YXRlcy4KCk5vdywgSSBzaG91bGQgcXVpY2tseSBjaGVjayBgZGVmbGF0ZV9zZXR1cF9wYXJhbXNgIHRvIG1ha2Ugc3VyZSB0aGlzIGNoYW5nZSBkb2VzbiYjMzk7dCBpbmFkdmVydGVudGx5IGltcGFjdCBob3cgd2UgY29uZmlndXJlIHRoZSBkZWZsYXRlIGNvbXByZXNzaW9uLiBJdOKAmXMgYWx3YXlzIGdvb2QgdG8gYmUgdGhvcm91Z2ghCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzAgMTA6MDA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7ZGVmbGF0ZV9zZXR1cF9wYXJhbXMmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL2Jsb2NrL3pyYW0vJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvYmxvY2svenJhbS9iYWNrZW5kX2RlZmxhdGUuYz0xOT1zdGF0aWMgdm9pZCBkZWZsYXRlX3JlbGVhc2VfcGFyYW1zKHN0cnVjdCB6Y29tcF9wYXJhbXMgKnBhcmFtcylcbi0tXG5kcml2ZXJzL2Jsb2NrL3pyYW0vYmFja2VuZF9kZWZsYXRlLmMtMjItXG5kcml2ZXJzL2Jsb2NrL3pyYW0vYmFja2VuZF9kZWZsYXRlLmM6MjM6c3RhdGljIGludCBkZWZsYXRlX3NldHVwX3BhcmFtcyhzdHJ1Y3QgemNvbXBfcGFyYW1zICpwYXJhbXMpXG5kcml2ZXJzL2Jsb2NrL3pyYW0vYmFja2VuZF9kZWZsYXRlLmMtMjQte1xuLS1cbmRyaXZlcnMvYmxvY2svenJhbS9iYWNrZW5kX2RlZmxhdGUuYz0xNDY9Y29uc3Qgc3RydWN0IHpjb21wX29wcyBiYWNrZW5kX2RlZmxhdGUgPSB7XG4tLVxuZHJpdmVycy9ibG9jay96cmFtL2JhY2tlbmRfZGVmbGF0ZS5jLTE1MC1cdC5kZXN0cm95X2N0eFx0PSBkZWZsYXRlX2Rlc3Ryb3ksXG5kcml2ZXJzL2Jsb2NrL3pyYW0vYmFja2VuZF9kZWZsYXRlLmM6MTUxOlx0LnNldHVwX3BhcmFtc1x0PSBkZWZsYXRlX3NldHVwX3BhcmFtcyxcbmRyaXZlcnMvYmxvY2svenJhbS9iYWNrZW5kX2RlZmxhdGUuYy0xNTItXHQucmVsZWFzZV9wYXJhbXNcdD0gZGVmbGF0ZV9yZWxlYXNlX3BhcmFtcyxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMCAxMDowMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzOTk0CgkJCQkJCQlvdXRwdXQ6IDMwCgkJCQkJCQl0aG91Z2h0czogMTYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIGFuIGV4cGVydCYjMzk7cyBpbnRlcm5hbCBtb25vbG9ndWU6CgoqKkNoZWNraW5nIGB6Y29tcF9vcHNgIGFuZCBgc2V0dXBfcGFyYW1zYCoqCgpBbHJpZ2h0LCBiZWZvcmUgZGl2aW5nIGludG8gYW55dGhpbmcgZGVlcGVyLCBJIG5lZWQgdG8gZ3JvdW5kIG15c2VsZi4gTGV0JiMzOTtzIHN0YXJ0IHdpdGggYSBxdWljayBhdWRpdCBvZiBgemNvbXBfb3BzYCBhbmQgYHNldHVwX3BhcmFtc2AuIEkgbmVlZCB0byBlbnN1cmUgdGhlIGNvcmUgb3BlcmF0aW9uYWwgY29tcG9uZW50IG9mIGB6Y29tcF9vcHNgIGlzIGNvcnJlY3RseSBpbml0aWFsaXplZCwgZ2l2ZW4gaXRzIGZ1bmRhbWVudGFsIHJvbGUuIFVuZGVyc3RhbmRpbmcgdGhlIGN1cnJlbnQgY29uZmlndXJhdGlvbiBvZiBgc2V0dXBfcGFyYW1zYCB3aWxsIGdpdmUgbWUgY3JpdGljYWwgaW5zaWdodCBpbnRvIHRoZSBzeXN0ZW0mIzM5O3MgYmFzZWxpbmUuIEl0JiMzOTtzIHRvbyBlYXN5IHRvIG1pc3Mgc29tZXRoaW5nIHdoZW4geW91JiMzOTtyZSBkZWVwbHkgaW5ncmFpbmVkLCBzbyBhIGJyaWVmIHJldmlldyBzaG91bGQgcHJvdmlkZSBjbGFyaXR5LiBGcm9tIHRoZXJlLCBJIGNhbiBkZXRlcm1pbmUgd2hlcmUgSSBuZWVkIHRvIGZvY3VzIG15IGF0dGVudGlvbi4gSXQmIzM5O3Mgb2Z0ZW4gYmVzdCB0byBhZGRyZXNzIHBvdGVudGlhbCBwcm9ibGVtcyBhdCB0aGUgc291cmNlLCBwcmV2ZW50aW5nIG1vcmUgY29tcGxleCBpc3N1ZXMgZG93biB0aGUgbGluZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMCAxMDowMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtzZXR1cF9wYXJhbXMmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL2Jsb2NrL3pyYW0vJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvYmxvY2svenJhbS9iYWNrZW5kXzg0Mi5jPTEwPXN0YXRpYyB2b2lkIHJlbGVhc2VfcGFyYW1zXzg0MihzdHJ1Y3QgemNvbXBfcGFyYW1zICpwYXJhbXMpXG4tLVxuZHJpdmVycy9ibG9jay96cmFtL2JhY2tlbmRfODQyLmMtMTMtXG5kcml2ZXJzL2Jsb2NrL3pyYW0vYmFja2VuZF84NDIuYzoxNDpzdGF0aWMgaW50IHNldHVwX3BhcmFtc184NDIoc3RydWN0IHpjb21wX3BhcmFtcyAqcGFyYW1zKVxuZHJpdmVycy9ibG9jay96cmFtL2JhY2tlbmRfODQyLmMtMTUte1xuLS1cbmRyaXZlcnMvYmxvY2svenJhbS9iYWNrZW5kXzg0Mi5jPTUzPWNvbnN0IHN0cnVjdCB6Y29tcF9vcHMgYmFja2VuZF84NDIgPSB7XG4tLVxuZHJpdmVycy9ibG9jay96cmFtL2JhY2tlbmRfODQyLmMtNTctXHQuZGVzdHJveV9jdHhcdD0gZGVzdHJveV84NDIsXG5kcml2ZXJzL2Jsb2NrL3pyYW0vYmFja2VuZF84NDIuYzo1ODpcdC5zZXR1cF9wYXJhbXNcdD0gc2V0dXBfcGFyYW1zXzg0MixcbmRyaXZlcnMvYmxvY2svenJhbS9iYWNrZW5kXzg0Mi5jLTU5LVx0LnJlbGVhc2VfcGFyYW1zXHQ9IHJlbGVhc2VfcGFyYW1zXzg0Mixcbi0tXG5kcml2ZXJzL2Jsb2NrL3pyYW0vYmFja2VuZF9kZWZsYXRlLmM9MTk9c3RhdGljIHZvaWQgZGVmbGF0ZV9yZWxlYXNlX3BhcmFtcyhzdHJ1Y3QgemNvbXBfcGFyYW1zICpwYXJhbXMpXG4tLVxuZHJpdmVycy9ibG9jay96cmFtL2JhY2tlbmRfZGVmbGF0ZS5jLTIyLVxuZHJpdmVycy9ibG9jay96cmFtL2JhY2tlbmRfZGVmbGF0ZS5jOjIzOnN0YXRpYyBpbnQgZGVmbGF0ZV9zZXR1cF9wYXJhbXMoc3RydWN0IHpjb21wX3BhcmFtcyAqcGFyYW1zKVxuZHJpdmVycy9ibG9jay96cmFtL2JhY2tlbmRfZGVmbGF0ZS5jLTI0LXtcbi0tXG5kcml2ZXJzL2Jsb2NrL3pyYW0vYmFja2VuZF9kZWZsYXRlLmM9MTQ2PWNvbnN0IHN0cnVjdCB6Y29tcF9vcHMgYmFja2VuZF9kZWZsYXRlID0ge1xuLS1cbmRyaXZlcnMvYmxvY2svenJhbS9iYWNrZW5kX2RlZmxhdGUuYy0xNTAtXHQuZGVzdHJveV9jdHhcdD0gZGVmbGF0ZV9kZXN0cm95LFxuZHJpdmVycy9ibG9jay96cmFtL2JhY2tlbmRfZGVmbGF0ZS5jOjE1MTpcdC5zZXR1cF9wYXJhbXNcdD0gZGVmbGF0ZV9zZXR1cF9wYXJhbXMsXG5kcml2ZXJzL2Jsb2NrL3pyYW0vYmFja2VuZF9kZWZsYXRlLmMtMTUyLVx0LnJlbGVhc2VfcGFyYW1zXHQ9IGRlZmxhdGVfcmVsZWFzZV9wYXJhbXMsXG4tLVxuZHJpdmVycy9ibG9jay96cmFtL2JhY2tlbmRfbHo0LmM9MTU9c3RhdGljIHZvaWQgbHo0X3JlbGVhc2VfcGFyYW1zKHN0cnVjdCB6Y29tcF9wYXJhbXMgKnBhcmFtcylcbi0tXG5kcml2ZXJzL2Jsb2NrL3pyYW0vYmFja2VuZF9sejQuYy0yNS1cbmRyaXZlcnMvYmxvY2svenJhbS9iYWNrZW5kX2x6NC5jOjI2OnN0YXRpYyBpbnQgbHo0X3NldHVwX3BhcmFtcyhzdHJ1Y3QgemNvbXBfcGFyYW1zICpwYXJhbXMpXG5kcml2ZXJzL2Jsb2NrL3pyYW0vYmFja2VuZF9sejQuYy0yNy17XG4tLVxuZHJpdmVycy9ibG9jay96cmFtL2JhY2tlbmRfbHo0LmM9MTQyPWNvbnN0IHN0cnVjdCB6Y29tcF9vcHMgYmFja2VuZF9sejQgPSB7XG4tLVxuZHJpdmVycy9ibG9jay96cmFtL2JhY2tlbmRfbHo0LmMtMTQ2LVx0LmRlc3Ryb3lfY3R4XHQ9IGx6NF9kZXN0cm95LFxuZHJpdmVycy9ibG9jay96cmFtL2JhY2tlbmRfbHo0LmM6MTQ3Olx0LnNldHVwX3BhcmFtc1x0PSBsejRfc2V0dXBfcGFyYW1zLFxuZHJpdmVycy9ibG9jay96cmFtL2JhY2tlbmRfbHo0LmMtMTQ4LVx0LnJlbGVhc2VfcGFyYW1zXHQ9IGx6NF9yZWxlYXNlX3BhcmFtcyxcbi0tXG5kcml2ZXJzL2Jsb2NrL3pyYW0vYmFja2VuZF9sejRoYy5jPTE1PXN0YXRpYyB2b2lkIGx6NGhjX3JlbGVhc2VfcGFyYW1zKHN0cnVjdCB6Y29tcF9wYXJhbXMgKnBhcmFtcylcbi0tXG5kcml2ZXJzL2Jsb2NrL3pyYW0vYmFja2VuZF9sejRoYy5jLTE4LVxuZHJpdmVycy9ibG9jay96cmFtL2JhY2tlbmRfbHo0aGMuYzoxOTpzdGF0aWMgaW50IGx6NGhjX3NldHVwX3BhcmFtcyhzdHJ1Y3QgemNvbXBfcGFyYW1zICpwYXJhbXMpXG5kcml2ZXJzL2Jsb2NrL3pyYW0vYmFja2VuZF9sejRoYy5jLTIwLXtcbi0tXG5kcml2ZXJzL2Jsb2NrL3pyYW0vYmFja2VuZF9sejRoYy5jPTEyMD1jb25zdCBzdHJ1Y3QgemNvbXBfb3BzIGJhY2tlbmRfbHo0aGMgPSB7XG4tLVxuZHJpdmVycy9ibG9jay96cmFtL2JhY2tlbmRfbHo0aGMuYy0xMjQtXHQuZGVzdHJveV9jdHhcdD0gbHo0aGNfZGVzdHJveSxcbmRyaXZlcnMvYmxvY2svenJhbS9iYWNrZW5kX2x6NGhjLmM6MTI1Olx0LnNldHVwX3BhcmFtc1x0PSBsejRoY19zZXR1cF9wYXJhbXMsXG5kcml2ZXJzL2Jsb2NrL3pyYW0vYmFja2VuZF9sejRoYy5jLTEyNi1cdC5yZWxlYXNlX3BhcmFtc1x0PSBsejRoY19yZWxlYXNlX3BhcmFtcyxcbi0tXG5kcml2ZXJzL2Jsb2NrL3pyYW0vYmFja2VuZF9sem8uYz05PXN0YXRpYyB2b2lkIGx6b19yZWxlYXNlX3BhcmFtcyhzdHJ1Y3QgemNvbXBfcGFyYW1zICpwYXJhbXMpXG4tLVxuZHJpdmVycy9ibG9jay96cmFtL2JhY2tlbmRfbHpvLmMtMTItXG5kcml2ZXJzL2Jsb2NrL3pyYW0vYmFja2VuZF9sem8uYzoxMzpzdGF0aWMgaW50IGx6b19zZXR1cF9wYXJhbXMoc3RydWN0IHpjb21wX3BhcmFtcyAqcGFyYW1zKVxuZHJpdmVycy9ibG9jay96cmFtL2JhY2tlbmRfbHpvLmMtMTQte1xuLS1cbmRyaXZlcnMvYmxvY2svenJhbS9iYWNrZW5kX2x6by5jPTUxPWNvbnN0IHN0cnVjdCB6Y29tcF9vcHMgYmFja2VuZF9sem8gPSB7XG4tLVxuZHJpdmVycy9ibG9jay96cmFtL2JhY2tlbmRfbHpvLmMtNTUtXHQuZGVzdHJveV9jdHhcdD0gbHpvX2Rlc3Ryb3ksXG5kcml2ZXJzL2Jsb2NrL3pyYW0vYmFja2VuZF9sem8uYzo1NjpcdC5zZXR1cF9wYXJhbXNcdD0gbHpvX3NldHVwX3BhcmFtcyxcbmRyaXZlcnMvYmxvY2svenJhbS9iYWNrZW5kX2x6by5jLTU3LVx0LnJlbGVhc2VfcGFyYW1zXHQ9IGx6b19yZWxlYXNlX3BhcmFtcyxcbi0tXG5kcml2ZXJzL2Jsb2NrL3pyYW0vYmFja2VuZF9sem9ybGUuYz05PXN0YXRpYyB2b2lkIGx6b3JsZV9yZWxlYXNlX3BhcmFtcyhzdHJ1Y3QgemNvbXBfcGFyYW1zICpwYXJhbXMpXG4tLVxuZHJpdmVycy9ibG9jay96cmFtL2JhY2tlbmRfbHpvcmxlLmMtMTItXG5kcml2ZXJzL2Jsb2NrL3pyYW0vYmFja2VuZF9sem9ybGUuYzoxMzpzdGF0aWMgaW50IGx6b3JsZV9zZXR1cF9wYXJhbXMoc3RydWN0IHpjb21wX3BhcmFtcyAqcGFyYW1zKVxuZHJpdmVycy9ibG9jay96cmFtL2JhY2tlbmRfbHpvcmxlLmMtMTQte1xuLS1cbmRyaXZlcnMvYmxvY2svenJhbS9iYWNrZW5kX2x6b3JsZS5jPTUxPWNvbnN0IHN0cnVjdCB6Y29tcF9vcHMgYmFja2VuZF9sem9ybGUgPSB7XG4tLVxuZHJpdmVycy9ibG9jay96cmFtL2JhY2tlbmRfbHpvcmxlLmMtNTUtXHQuZGVzdHJveV9jdHhcdD0gbHpvcmxlX2Rlc3Ryb3ksXG5kcml2ZXJzL2Jsb2NrL3pyYW0vYmFja2VuZF9sem9ybGUuYzo1NjpcdC5zZXR1cF9wYXJhbXNcdD0gbHpvcmxlX3NldHVwX3BhcmFtcyxcbmRyaXZlcnMvYmxvY2svenJhbS9iYWNrZW5kX2x6b3JsZS5jLTU3LVx0LnJlbGVhc2VfcGFyYW1zXHQ9IGx6b3JsZV9yZWxlYXNlX3BhcmFtcyxcbi0tXG5kcml2ZXJzL2Jsb2NrL3pyYW0vYmFja2VuZF96c3RkLmM9Mzg9c3RhdGljIHZvaWQgenN0ZF9yZWxlYXNlX3BhcmFtcyhzdHJ1Y3QgemNvbXBfcGFyYW1zICpwYXJhbXMpXG4tLVxuZHJpdmVycy9ibG9jay96cmFtL2JhY2tlbmRfenN0ZC5jLTUwLVxuZHJpdmVycy9ibG9jay96cmFtL2JhY2tlbmRfenN0ZC5jOjUxOnN0YXRpYyBpbnQgenN0ZF9zZXR1cF9wYXJhbXMoc3RydWN0IHpjb21wX3BhcmFtcyAqcGFyYW1zKVxuZHJpdmVycy9ibG9jay96cmFtL2JhY2tlbmRfenN0ZC5jLTUyLXtcbi0tXG5kcml2ZXJzL2Jsb2NrL3pyYW0vYmFja2VuZF96c3RkLmM9MjA5PWNvbnN0IHN0cnVjdCB6Y29tcF9vcHMgYmFja2VuZF96c3RkID0ge1xuLS1cbmRyaXZlcnMvYmxvY2svenJhbS9iYWNrZW5kX3pzdGQuYy0yMTMtXHQuZGVzdHJveV9jdHhcdD0genN0ZF9kZXN0cm95LFxuZHJpdmVycy9ibG9jay96cmFtL2JhY2tlbmRfenN0ZC5jOjIxNDpcdC5zZXR1cF9wYXJhbXNcdD0genN0ZF9zZXR1cF9wYXJhbXMsXG5kcml2ZXJzL2Jsb2NrL3pyYW0vYmFja2VuZF96c3RkLmMtMjE1LVx0LnJlbGVhc2VfcGFyYW1zXHQ9IHpzdGRfcmVsZWFzZV9wYXJhbXMsXG4tLVxuZHJpdmVycy9ibG9jay96cmFtL3pjb21wLmM9MTk3PXN0YXRpYyBpbnQgemNvbXBfaW5pdChzdHJ1Y3QgemNvbXAgKmNvbXAsIHN0cnVjdCB6Y29tcF9wYXJhbXMgKnBhcmFtcylcbi0tXG5kcml2ZXJzL2Jsb2NrL3pyYW0vemNvbXAuYy0yMDUtXHRjb21wLVx1MDAzZXBhcmFtcyA9IHBhcmFtcztcbmRyaXZlcnMvYmxvY2svenJhbS96Y29tcC5jOjIwNjpcdHJldCA9IGNvbXAtXHUwMDNlb3BzLVx1MDAzZXNldHVwX3BhcmFtcyhjb21wLVx1MDAzZXBhcmFtcyk7XG5kcml2ZXJzL2Jsb2NrL3pyYW0vemNvbXAuYy0yMDctXHRpZiAocmV0KVxuLS1cbmRyaXZlcnMvYmxvY2svenJhbS96Y29tcC5oPTU3PXN0cnVjdCB6Y29tcF9vcHMge1xuLS1cbmRyaXZlcnMvYmxvY2svenJhbS96Y29tcC5oLTY1LVxuZHJpdmVycy9ibG9jay96cmFtL3pjb21wLmg6NjY6XHRpbnQgKCpzZXR1cF9wYXJhbXMpKHN0cnVjdCB6Y29tcF9wYXJhbXMgKnBhcmFtcyk7XG5kcml2ZXJzL2Jsb2NrL3pyYW0vemNvbXAuaC02Ny1cdHZvaWQgKCpyZWxlYXNlX3BhcmFtcykoc3RydWN0IHpjb21wX3BhcmFtcyAqcGFyYW1zKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMCAxMDowMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA2MTc4CgkJCQkJCQlvdXRwdXQ6IDMxCgkJCQkJCQl0aG91Z2h0czogMzEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBJIHdlcmUgYW5hbHl6aW5nIHRoaXMgY29kZToKCioqRGl2aW5nIGludG8gdGhlIEluaXRpYWxpemF0aW9uKioKCk9rYXksIHNvIGB6Y29tcF9pbml0YCBpcyB0aGUgZW50cnkgcG9pbnQsIG5hdHVyYWxseS4gSXQgY2FsbHMgYGNvbXAtJmd0O29wcy0mZ3Q7c2V0dXBfcGFyYW1zYCwgd2hpY2ggaXMgd2hlcmUgdGhlIHJlYWwgY29uZmlndXJhdGlvbiBwcm9iYWJseSBoYXBwZW5zLiBNeSBmaXJzdCB0aG91Z2h0IGlzOiBJIG5lZWQgdG8gdHJhY2UgYmFjayBmcm9tIHRoaXMgZnVuY3Rpb24gY2FsbC4gVW5kZXJzdGFuZGluZyB0aGUgaW5pdGlhbGl6YXRpb24gc2VxdWVuY2UgaXMgY3J1Y2lhbCB0byB1bmRlcnN0YW5kaW5nIHRoZSBzeXN0ZW0mIzM5O3Mgb3ZlcmFsbCBiZWhhdmlvci4gU28sIG15IG5leHQgbG9naWNhbCBzdGVwIGlzIHRvIHNlZSBleGFjdGx5ICp3aGVyZSogYHpjb21wX2luaXRgIGdldHMgY2FsbGVkLiBUaGF0IHdpbGwgcHJvdmlkZSBjcml0aWNhbCBjb250ZXh0OiBXaGF0IHRyaWdnZXJzIHRoZSBpbml0aWFsaXphdGlvbiwgYW5kIGhvdyB0aGUgc3Vycm91bmRpbmcgZW52aXJvbm1lbnQgaXMgc2V0IHVwLiBLbm93aW5nIHRoZSBjYWxsZXIgZnVuY3Rpb24ocykgZ2l2ZXMgbWUgYSBjcml0aWNhbCB1bmRlcnN0YW5kaW5nIG9mIHRoZSBpbml0aWFsaXphdGlvbiBmbG93LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMCAxMDowMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt6Y29tcF9pbml0JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9ibG9jay96cmFtLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL2Jsb2NrL3pyYW0vemNvbXAuYz0xODY9aW50IHpjb21wX2NwdV9kZWFkKHVuc2lnbmVkIGludCBjcHUsIHN0cnVjdCBobGlzdF9ub2RlICpub2RlKVxuLS1cbmRyaXZlcnMvYmxvY2svenJhbS96Y29tcC5jLTE5Ni1cbmRyaXZlcnMvYmxvY2svenJhbS96Y29tcC5jOjE5NzpzdGF0aWMgaW50IHpjb21wX2luaXQoc3RydWN0IHpjb21wICpjb21wLCBzdHJ1Y3QgemNvbXBfcGFyYW1zICpwYXJhbXMpXG5kcml2ZXJzL2Jsb2NrL3pyYW0vemNvbXAuYy0xOTgte1xuLS1cbmRyaXZlcnMvYmxvY2svenJhbS96Y29tcC5jPTIzMz1zdHJ1Y3QgemNvbXAgKnpjb21wX2NyZWF0ZShjb25zdCBjaGFyICphbGcsIHN0cnVjdCB6Y29tcF9wYXJhbXMgKnBhcmFtcylcbi0tXG5kcml2ZXJzL2Jsb2NrL3pyYW0vemNvbXAuYy0yNTUtXG5kcml2ZXJzL2Jsb2NrL3pyYW0vemNvbXAuYzoyNTY6XHRlcnJvciA9IHpjb21wX2luaXQoY29tcCwgcGFyYW1zKTtcbmRyaXZlcnMvYmxvY2svenJhbS96Y29tcC5jLTI1Ny1cdGlmIChlcnJvcikge1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMCAxMDowMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA2NjI1CgkJCQkJCQlvdXRwdXQ6IDMxCgkJCQkJCQl0aG91Z2h0czogMjgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIGFzc3VtaW5nIEkmIzM5O20gYW4gZXhwZXJ0IGluIHRoaXMgZmllbGQsIHByZXNlbnRlZCBhcyBhIGZpcnN0LXBlcnNvbiBzdW1tYXJ5OgoKKipEaWdnaW5nIGludG8gdGhlIGB6Y29tcF9jcmVhdGVgIEZ1bmN0aW9uKioKClJpZ2h0LCBgemNvbXBfY3JlYXRlYCBraWNrcyBvZmYgYnkgY2FsbGluZyBgemNvbXBfaW5pdGAuIE1ha2VzIHNlbnNlIOKAkyBpbml0aWFsaXphdGlvbiB1c3VhbGx5IGNvbWVzIGZpcnN0LiBOb3csIHRoZSByZWFsIHF1ZXN0aW9uIGlzLCB3aG8gKnVzZXMqIGB6Y29tcF9jcmVhdGVgPyBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgY29udGV4dCBvZiBpdHMgY2FsbHMgdG8gZnVsbHkgZ3Jhc3AgaXRzIHJvbGUgYW5kIHBvdGVudGlhbCBpbXBhY3QuIFNvLCB0aW1lIHRvIHRyYWNlIHRob3NlIGNhbGxzIGFuZCBzZWUgd2hlcmUgdGhpcyB0aGluZyBpcyBhY3R1YWxseSBiZWluZyBpbnZva2VkLiBMZXQmIzM5O3Mgc2VlIHdoYXQgdGhlIGNhbGwgc3RhY2sgcmV2ZWFscy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzAgMTA6MDA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7emNvbXBfY3JlYXRlJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9ibG9jay96cmFtLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL2Jsb2NrL3pyYW0vemNvbXAuYz0yMjU9dm9pZCB6Y29tcF9kZXN0cm95KHN0cnVjdCB6Y29tcCAqY29tcClcbi0tXG5kcml2ZXJzL2Jsb2NrL3pyYW0vemNvbXAuYy0yMzItXG5kcml2ZXJzL2Jsb2NrL3pyYW0vemNvbXAuYzoyMzM6c3RydWN0IHpjb21wICp6Y29tcF9jcmVhdGUoY29uc3QgY2hhciAqYWxnLCBzdHJ1Y3QgemNvbXBfcGFyYW1zICpwYXJhbXMpXG5kcml2ZXJzL2Jsb2NrL3pyYW0vemNvbXAuYy0yMzQte1xuLS1cbmRyaXZlcnMvYmxvY2svenJhbS96Y29tcC5oPTgzPWNvbnN0IGNoYXIgKnpjb21wX2xvb2t1cF9iYWNrZW5kX25hbWUoY29uc3QgY2hhciAqY29tcCk7XG5kcml2ZXJzL2Jsb2NrL3pyYW0vemNvbXAuaC04NC1cbmRyaXZlcnMvYmxvY2svenJhbS96Y29tcC5oOjg1OnN0cnVjdCB6Y29tcCAqemNvbXBfY3JlYXRlKGNvbnN0IGNoYXIgKmFsZywgc3RydWN0IHpjb21wX3BhcmFtcyAqcGFyYW1zKTtcbmRyaXZlcnMvYmxvY2svenJhbS96Y29tcC5oLTg2LXZvaWQgemNvbXBfZGVzdHJveShzdHJ1Y3QgemNvbXAgKmNvbXApO1xuLS1cbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jPTI4NTk9c3RhdGljIHNzaXplX3QgZGlza3NpemVfc3RvcmUoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0cixcbi0tXG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYy0yODg1LVxuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmM6Mjg4NjpcdFx0Y29tcCA9IHpjb21wX2NyZWF0ZSh6cmFtLVx1MDAzZWNvbXBfYWxnc1twcmlvXSxcbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jLTI4ODctXHRcdFx0XHQgICAgXHUwMDI2enJhbS1cdTAwM2VwYXJhbXNbcHJpb10pO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMCAxMDowMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA3MTg3CgkJCQkJCQlvdXRwdXQ6IDMwCgkJCQkJCQl0aG91Z2h0czogMjAwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFuYWx5c2lzIG9mIHRoZSB6cmFtIERyaXZlciYjMzk7cyBDb21wcmVzc2lvbiBMb2dpYyoqCgpPa2F5LCBzbyBoZXJlJiMzOTtzIHdoYXQgSSYjMzk7dmUgZ290IGluIG15IGhlYWQ6IGB6Y29tcF9jcmVhdGVgIGlzIGJlaW5nIGNhbGxlZCB3aXRoaW4gdGhlIGBkaXNrc2l6ZV9zdG9yZWAgZnVuY3Rpb24uIFRoYXQmIzM5O3MgdGhlIGVudHJ5IHBvaW50LCByaWdodD8gU28gYGRpc2tzaXplX3N0b3JlYCBraWNrcyBvZmYgYHpjb21wX2NyZWF0ZWAsIHdoaWNoIHRoZW4gY2FsbHMgYHpjb21wX2luaXRgLCB3aGljaCBpbiB0dXJuIGxlYWRzIHRvIGBzZXR1cF9wYXJhbXNgLCBhbmQgZmluYWxseSB0byBgZGVmbGF0ZV9zZXR1cF9wYXJhbXNgIGlmIHRoZSBjb21wcmVzc2lvbiBhbGdvcml0aG0gaXMsIHdlbGwsIGRlZmxhdGUuIEFuZCwganVzdCB0byBiZSBjbGVhciwgYGRpc2tzaXplX3N0b3JlYCBpcyBhIHN5c2ZzIHN0b3JlIGZ1bmN0aW9uLiAKCk5vdywgY2FuIHRoaXMgd2hvbGUgY2hhaW4gb2YgZXZlbnRzIGFjdHVhbGx5IGhhcHBlbiBpbiBhIHZpcnR1YWxpemVkIGVudmlyb25tZW50PyBBYnNvbHV0ZWx5LiBacmFtIGlzIGEgYmxvY2sgZGV2aWNlIGFuZCBpdHMgc3lzZnMgYXR0cmlidXRlcyBhcmUgYWNjZXNzaWJsZSwgc28gdGhhdCYjMzk7cyBhIGRlZmluaXRlICYjMzQ7eWVzLiYjMzQ7CgpUaGUgY3JpdGljYWwgcXVlc3Rpb24gbm93IGlzLCBpcyB0aGlzIHNvbWV0aGluZyB3b3J0aCBkZWRpY2F0aW5nIHRpbWUgdG8gZnV6emluZz8gQWJzb2x1dGVseSwgd2l0aG91dCBhIGRvdWJ0LiBXZSYjMzk7cmUgdGFsa2luZyBhYm91dCBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSB6cmFtIGRyaXZlci4gVGhlcmUmIzM5O3MgdmFsaWRhdGlvbiBiZWluZyBhZGRlZCBmb3IgdGhlIGB3aW5iaXRzYCBwYXJhbWV0ZXIsIGFuZCBzb21lIGNvZGUgaXMgYmVpbmcgbW92ZWQgYXJvdW5kIGNvbmNlcm5pbmcgYGNvbXBfYWxnb3JpdGhtX3NldGAuIFRoYXQmIzM5O3MgYSB0YXJnZXQtcmljaCBlbnZpcm9ubWVudC4KClNwZWNpZmljYWxseSwgdGhlIGBkZWZsYXRlX3NldHVwX3BhcmFtc2AgZnVuY3Rpb24gaXMgcmVhY2hlZCB3aGVuIHdlIGFyZSBzZXR0aW5nIHVwIGRlZmxhdGUgY29tcHJlc3Npb24gZm9yIHRoZSB6cmFtIGRldmljZS4gQWxzbywgdGhlIGB6cmFtX2Rlc3Ryb3lfY29tcHNgIGlzIHJlYWNoYWJsZSB3aGVuIHJlc2V0dGluZyB0aGUgZGV2aWNlIG9yIGVuY291bnRlcmluZyBhbiBlcnJvciBpbiB0aGUgYGRpc2tzaXplX3N0b3JlYCBmdW5jdGlvbi4KCk5vdywgSSBzaG91bGQgcXVpY2tseSBjaGVjayB0aGUgcmVxdWlyZWQgY29uZmlndXJhdGlvbnMgZm9yIHpyYW0uIExldCYjMzk7cyBzZWUgd2hhdCYjMzk7cyBuZWVkZWQgZm9yIHRoZSBmdWxsIHBpY3R1cmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMwIDEwOjAwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBaUkFNJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9ibG9jay96cmFtLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL2Jsb2NrL3pyYW0vS2NvbmZpZy0xLSMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjBcbmRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnOjI6Y29uZmlnIFpSQU1cbmRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnLTMtXHR0cmlzdGF0ZSBcJiMzNDtDb21wcmVzc2VkIFJBTSBibG9jayBkZXZpY2Ugc3VwcG9ydFwmIzM0O1xuLS1cbmRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnLTE2LVxuZHJpdmVycy9ibG9jay96cmFtL0tjb25maWc6MTc6Y29uZmlnIFpSQU1fQkFDS0VORF9MWjRcbmRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnLTE4LVx0Ym9vbCBcJiMzNDtsejQgY29tcHJlc3Npb24gc3VwcG9ydFwmIzM0O1xuLS1cbmRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnLTIyLVxuZHJpdmVycy9ibG9jay96cmFtL0tjb25maWc6MjM6Y29uZmlnIFpSQU1fQkFDS0VORF9MWjRIQ1xuZHJpdmVycy9ibG9jay96cmFtL0tjb25maWctMjQtXHRib29sIFwmIzM0O2x6NGhjIGNvbXByZXNzaW9uIHN1cHBvcnRcJiMzNDtcbi0tXG5kcml2ZXJzL2Jsb2NrL3pyYW0vS2NvbmZpZy0yOC1cbmRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnOjI5OmNvbmZpZyBaUkFNX0JBQ0tFTkRfWlNURFxuZHJpdmVycy9ibG9jay96cmFtL0tjb25maWctMzAtXHRib29sIFwmIzM0O3pzdGQgY29tcHJlc3Npb24gc3VwcG9ydFwmIzM0O1xuLS1cbmRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnLTM0LVxuZHJpdmVycy9ibG9jay96cmFtL0tjb25maWc6MzU6Y29uZmlnIFpSQU1fQkFDS0VORF9ERUZMQVRFXG5kcml2ZXJzL2Jsb2NrL3pyYW0vS2NvbmZpZy0zNi1cdGJvb2wgXCYjMzQ7ZGVmbGF0ZSBjb21wcmVzc2lvbiBzdXBwb3J0XCYjMzQ7XG4tLVxuZHJpdmVycy9ibG9jay96cmFtL0tjb25maWctNDAtXG5kcml2ZXJzL2Jsb2NrL3pyYW0vS2NvbmZpZzo0MTpjb25maWcgWlJBTV9CQUNLRU5EXzg0MlxuZHJpdmVycy9ibG9jay96cmFtL0tjb25maWctNDItXHRib29sIFwmIzM0Ozg0MiBjb21wcmVzc2lvbiBzdXBwb3J0XCYjMzQ7XG4tLVxuZHJpdmVycy9ibG9jay96cmFtL0tjb25maWctNDYtXG5kcml2ZXJzL2Jsb2NrL3pyYW0vS2NvbmZpZzo0Nzpjb25maWcgWlJBTV9CQUNLRU5EX0ZPUkNFX0xaT1xuZHJpdmVycy9ibG9jay96cmFtL0tjb25maWctNDgtXHRkZXBlbmRzIG9uIFpSQU1cbi0tXG5kcml2ZXJzL2Jsb2NrL3pyYW0vS2NvbmZpZy01Mi1cbmRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnOjUzOmNvbmZpZyBaUkFNX0JBQ0tFTkRfTFpPXG5kcml2ZXJzL2Jsb2NrL3pyYW0vS2NvbmZpZy01NC1cdGJvb2wgXCYjMzQ7bHpvIGFuZCBsem8tcmxlIGNvbXByZXNzaW9uIHN1cHBvcnRcJiMzNDsgaWYgIVpSQU1fQkFDS0VORF9GT1JDRV9MWk9cbi0tXG5kcml2ZXJzL2Jsb2NrL3pyYW0vS2NvbmZpZz02MD1jaG9pY2Vcbi0tXG5kcml2ZXJzL2Jsb2NrL3pyYW0vS2NvbmZpZy02NC1cbmRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnOjY1OmNvbmZpZyBaUkFNX0RFRl9DT01QX0xaT1JMRVxuZHJpdmVycy9ibG9jay96cmFtL0tjb25maWctNjYtXHRib29sIFwmIzM0O2x6by1ybGVcJiMzNDtcbi0tXG5kcml2ZXJzL2Jsb2NrL3pyYW0vS2NvbmZpZy02OC1cbmRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnOjY5OmNvbmZpZyBaUkFNX0RFRl9DT01QX0xaT1xuZHJpdmVycy9ibG9jay96cmFtL0tjb25maWctNzAtXHRib29sIFwmIzM0O2x6b1wmIzM0O1xuLS1cbmRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnLTcyLVxuZHJpdmVycy9ibG9jay96cmFtL0tjb25maWc6NzM6Y29uZmlnIFpSQU1fREVGX0NPTVBfTFo0XG5kcml2ZXJzL2Jsb2NrL3pyYW0vS2NvbmZpZy03NC1cdGJvb2wgXCYjMzQ7bHo0XCYjMzQ7XG4tLVxuZHJpdmVycy9ibG9jay96cmFtL0tjb25maWctNzYtXG5kcml2ZXJzL2Jsb2NrL3pyYW0vS2NvbmZpZzo3Nzpjb25maWcgWlJBTV9ERUZfQ09NUF9MWjRIQ1xuZHJpdmVycy9ibG9jay96cmFtL0tjb25maWctNzgtXHRib29sIFwmIzM0O2x6NGhjXCYjMzQ7XG4tLVxuZHJpdmVycy9ibG9jay96cmFtL0tjb25maWctODAtXG5kcml2ZXJzL2Jsb2NrL3pyYW0vS2NvbmZpZzo4MTpjb25maWcgWlJBTV9ERUZfQ09NUF9aU1REXG5kcml2ZXJzL2Jsb2NrL3pyYW0vS2NvbmZpZy04Mi1cdGJvb2wgXCYjMzQ7enN0ZFwmIzM0O1xuLS1cbmRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnLTg0LVxuZHJpdmVycy9ibG9jay96cmFtL0tjb25maWc6ODU6Y29uZmlnIFpSQU1fREVGX0NPTVBfREVGTEFURVxuZHJpdmVycy9ibG9jay96cmFtL0tjb25maWctODYtXHRib29sIFwmIzM0O2RlZmxhdGVcJiMzNDtcbi0tXG5kcml2ZXJzL2Jsb2NrL3pyYW0vS2NvbmZpZy04OC1cbmRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnOjg5OmNvbmZpZyBaUkFNX0RFRl9DT01QXzg0MlxuZHJpdmVycy9ibG9jay96cmFtL0tjb25maWctOTAtXHRib29sIFwmIzM0Ozg0MlwmIzM0O1xuLS1cbmRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnPTkzPWVuZGNob2ljZVxuZHJpdmVycy9ibG9jay96cmFtL0tjb25maWctOTQtXG5kcml2ZXJzL2Jsb2NrL3pyYW0vS2NvbmZpZzo5NTpjb25maWcgWlJBTV9ERUZfQ09NUFxuZHJpdmVycy9ibG9jay96cmFtL0tjb25maWctOTYtXHRzdHJpbmdcbi0tXG5kcml2ZXJzL2Jsb2NrL3pyYW0vS2NvbmZpZy0xMDYtXG5kcml2ZXJzL2Jsb2NrL3pyYW0vS2NvbmZpZzoxMDc6Y29uZmlnIFpSQU1fV1JJVEVCQUNLXG5kcml2ZXJzL2Jsb2NrL3pyYW0vS2NvbmZpZy0xMDgtICAgICAgIGJvb2wgXCYjMzQ7V3JpdGUgYmFjayBpbmNvbXByZXNzaWJsZSBvciBpZGxlIHBhZ2UgdG8gYmFja2luZyBkZXZpY2VcJiMzNDtcbi0tXG5kcml2ZXJzL2Jsb2NrL3pyYW0vS2NvbmZpZy0xMjAtXG5kcml2ZXJzL2Jsb2NrL3pyYW0vS2NvbmZpZzoxMjE6Y29uZmlnIFpSQU1fVFJBQ0tfRU5UUllfQUNUSU1FXG5kcml2ZXJzL2Jsb2NrL3pyYW0vS2NvbmZpZy0xMjItXHRib29sIFwmIzM0O1RyYWNrIGFjY2VzcyB0aW1lIG9mIHpyYW0gZW50cmllc1wmIzM0O1xuLS1cbmRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnLTEyOC1cbmRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnOjEyOTpjb25maWcgWlJBTV9NRU1PUllfVFJBQ0tJTkdcbmRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnLTEzMC1cdGJvb2wgXCYjMzQ7VHJhY2sgelJhbSBibG9jayBzdGF0dXNcJiMzNDtcbi0tXG5kcml2ZXJzL2Jsb2NrL3pyYW0vS2NvbmZpZy0xMzktXG5kcml2ZXJzL2Jsb2NrL3pyYW0vS2NvbmZpZzoxNDA6Y29uZmlnIFpSQU1fTVVMVElfQ09NUFxuZHJpdmVycy9ibG9jay96cmFtL0tjb25maWctMTQxLVx0Ym9vbCBcJiMzNDtFbmFibGUgbXVsdGlwbGUgY29tcHJlc3Npb24gc3RyZWFtc1wmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMCAxMDowMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA5MDU0CgkJCQkJCQlvdXRwdXQ6IDMxCgkJCQkJCQl0aG91Z2h0czogMjkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIGFuIGV4cGVydCYjMzk7cyBpbnRlcm5hbCBtb25vbG9ndWU6CgoqKlpSQU0gJmFtcDsgRGVmbGF0ZTogSW5pdGlhbCBBc3Nlc3NtZW50KioKCkFscmlnaHQsIHRoZSBjb3JlIHJlcXVpcmVtZW50IGhlcmUgaXMgY2xlYXI6IGBaUkFNYCBhbmQgdGhlIGBaUkFNX0JBQ0tFTkRfREVGTEFURWAgYmFja2VuZCBhcmUgdGhlIGZvY3VzLiBNeSBtaW5kIGltbWVkaWF0ZWx5IGp1bXBzIHRvIGEgbWVudGFsIGNoZWNrbGlzdC4gV2UmIzM5O3JlIGdvaW5nIHRvIHVzZSB6cmFtIGFzIGEgYmxvY2sgZGV2aWNlLiBJIG5lZWQgdG8gbWFrZSBzdXJlIHRoaXMgaXMgaW5zdGFsbGVkIGFuZCBjb25maWd1cmVkIGNvcnJlY3RseS4gCgpNeSBpbW1lZGlhdGUgYWN0aW9uIGlzIHRvIGRlbHZlIGludG8gdGhlIGRlcGVuZGVuY2llcyBvZiBgWlJBTWAuIFdoYXQgb3RoZXIga2VybmVsIG1vZHVsZXMgb3IgdXNlci1zcGFjZSB1dGlsaXRpZXMgZG9lcyBpdCByZWx5IG9uPyBBcmUgdGhlcmUgYW55IHNwZWNpZmljIHZlcnNpb25zIEkgbmVlZCB0byBiZSBhd2FyZSBvZiB0byBlbnN1cmUgY29tcGF0aWJpbGl0eSwgZXNwZWNpYWxseSB3aXRoIHRoZSBgREVGTEFURWAgYmFja2VuZD8gVGhlIGNob2ljZSBvZiBjb21wcmVzc2lvbiBhbGdvcml0aG0gaXMgaW1wb3J0YW50IGZvciBiYWxhbmNlIGJldHdlZW4gQ1BVIGxvYWQgYW5kIGRpc2sgSU8uIEFyZSB0aGVyZSBhbnkga25vd24gaXNzdWVzIHdpdGggdGhhdCBzcGVjaWZpYyBiYWNrZW5kPyBXZSBzaG91bGQgbG9vayBhdCBhbnkgcG90ZW50aWFsIGltcGFjdHMgb24gc3lzdGVtIHBlcmZvcm1hbmNlIHVuZGVyIGxvYWQuIFdlIG11c3QgbG9vayBhdCB0aGUgb3ZlcmFsbCBzeXN0ZW0gbWVtb3J5IGNvbmZpZ3VyYXRpb24gdG8gZW5zdXJlIGl0cyBvcHRpbWFsIHBlcmZvcm1hbmNlLiBUaGlzIGlzIGFsbCBzdGFuZGFyZCBpbml0aWFsIGR1ZSBkaWxpZ2VuY2UsIGJ1dCBjcnVjaWFsIHRvIGF2b2lkIGxhdGVyIGhlYWRhY2hlcy4gVGhpcyBzZWVtcyBsaWtlIGEgcmVhc29uYWJsZSBzdGFydGluZyBwb2ludC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzAgMTA6MDA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7ZGVwZW5kcyBvbiYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnPTI9Y29uZmlnIFpSQU1cbmRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnLTMtXHR0cmlzdGF0ZSBcJiMzNDtDb21wcmVzc2VkIFJBTSBibG9jayBkZXZpY2Ugc3VwcG9ydFwmIzM0O1xuZHJpdmVycy9ibG9jay96cmFtL0tjb25maWc6NDpcdGRlcGVuZHMgb24gQkxPQ0sgXHUwMDI2XHUwMDI2IFNZU0ZTIFx1MDAyNlx1MDAyNiBNTVVcbmRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnLTUtXHRzZWxlY3QgWlNNQUxMT0Ncbi0tXG5kcml2ZXJzL2Jsb2NrL3pyYW0vS2NvbmZpZz0xNz1jb25maWcgWlJBTV9CQUNLRU5EX0xaNFxuZHJpdmVycy9ibG9jay96cmFtL0tjb25maWctMTgtXHRib29sIFwmIzM0O2x6NCBjb21wcmVzc2lvbiBzdXBwb3J0XCYjMzQ7XG5kcml2ZXJzL2Jsb2NrL3pyYW0vS2NvbmZpZzoxOTpcdGRlcGVuZHMgb24gWlJBTVxuZHJpdmVycy9ibG9jay96cmFtL0tjb25maWctMjAtXHRzZWxlY3QgTFo0X0NPTVBSRVNTXG4tLVxuZHJpdmVycy9ibG9jay96cmFtL0tjb25maWc9MjM9Y29uZmlnIFpSQU1fQkFDS0VORF9MWjRIQ1xuZHJpdmVycy9ibG9jay96cmFtL0tjb25maWctMjQtXHRib29sIFwmIzM0O2x6NGhjIGNvbXByZXNzaW9uIHN1cHBvcnRcJiMzNDtcbmRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnOjI1Olx0ZGVwZW5kcyBvbiBaUkFNXG5kcml2ZXJzL2Jsb2NrL3pyYW0vS2NvbmZpZy0yNi1cdHNlbGVjdCBMWjRIQ19DT01QUkVTU1xuLS1cbmRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnPTI5PWNvbmZpZyBaUkFNX0JBQ0tFTkRfWlNURFxuZHJpdmVycy9ibG9jay96cmFtL0tjb25maWctMzAtXHRib29sIFwmIzM0O3pzdGQgY29tcHJlc3Npb24gc3VwcG9ydFwmIzM0O1xuZHJpdmVycy9ibG9jay96cmFtL0tjb25maWc6MzE6XHRkZXBlbmRzIG9uIFpSQU1cbmRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnLTMyLVx0c2VsZWN0IFpTVERfQ09NUFJFU1Ncbi0tXG5kcml2ZXJzL2Jsb2NrL3pyYW0vS2NvbmZpZz0zNT1jb25maWcgWlJBTV9CQUNLRU5EX0RFRkxBVEVcbmRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnLTM2LVx0Ym9vbCBcJiMzNDtkZWZsYXRlIGNvbXByZXNzaW9uIHN1cHBvcnRcJiMzNDtcbmRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnOjM3Olx0ZGVwZW5kcyBvbiBaUkFNXG5kcml2ZXJzL2Jsb2NrL3pyYW0vS2NvbmZpZy0zOC1cdHNlbGVjdCBaTElCX0RFRkxBVEVcbi0tXG5kcml2ZXJzL2Jsb2NrL3pyYW0vS2NvbmZpZz00MT1jb25maWcgWlJBTV9CQUNLRU5EXzg0MlxuZHJpdmVycy9ibG9jay96cmFtL0tjb25maWctNDItXHRib29sIFwmIzM0Ozg0MiBjb21wcmVzc2lvbiBzdXBwb3J0XCYjMzQ7XG5kcml2ZXJzL2Jsb2NrL3pyYW0vS2NvbmZpZzo0MzpcdGRlcGVuZHMgb24gWlJBTVxuZHJpdmVycy9ibG9jay96cmFtL0tjb25maWctNDQtXHRzZWxlY3QgODQyX0NPTVBSRVNTXG4tLVxuZHJpdmVycy9ibG9jay96cmFtL0tjb25maWc9NDc9Y29uZmlnIFpSQU1fQkFDS0VORF9GT1JDRV9MWk9cbmRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnOjQ4Olx0ZGVwZW5kcyBvbiBaUkFNXG5kcml2ZXJzL2Jsb2NrL3pyYW0vS2NvbmZpZy00OS1cdGRlZl9ib29sICFaUkFNX0JBQ0tFTkRfTFo0IFx1MDAyNlx1MDAyNiAhWlJBTV9CQUNLRU5EX0xaNEhDIFx1MDAyNlx1MDAyNiBcXFxuLS1cbmRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnPTUzPWNvbmZpZyBaUkFNX0JBQ0tFTkRfTFpPXG5kcml2ZXJzL2Jsb2NrL3pyYW0vS2NvbmZpZy01NC1cdGJvb2wgXCYjMzQ7bHpvIGFuZCBsem8tcmxlIGNvbXByZXNzaW9uIHN1cHBvcnRcJiMzNDsgaWYgIVpSQU1fQkFDS0VORF9GT1JDRV9MWk9cbmRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnOjU1Olx0ZGVwZW5kcyBvbiBaUkFNXG5kcml2ZXJzL2Jsb2NrL3pyYW0vS2NvbmZpZy01Ni1cdGRlZmF1bHQgWlJBTV9CQUNLRU5EX0ZPUkNFX0xaT1xuLS1cbmRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnPTYwPWNob2ljZVxuLS1cbmRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnLTYyLVx0ZGVmYXVsdCBaUkFNX0RFRl9DT01QX0xaT1JMRVxuZHJpdmVycy9ibG9jay96cmFtL0tjb25maWc6NjM6XHRkZXBlbmRzIG9uIFpSQU1cbmRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnLTY0LVxuZHJpdmVycy9ibG9jay96cmFtL0tjb25maWc9NjU9Y29uZmlnIFpSQU1fREVGX0NPTVBfTFpPUkxFXG5kcml2ZXJzL2Jsb2NrL3pyYW0vS2NvbmZpZy02Ni1cdGJvb2wgXCYjMzQ7bHpvLXJsZVwmIzM0O1xuZHJpdmVycy9ibG9jay96cmFtL0tjb25maWc6Njc6XHRkZXBlbmRzIG9uIFpSQU1fQkFDS0VORF9MWk9cbmRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnLTY4LVxuZHJpdmVycy9ibG9jay96cmFtL0tjb25maWc9Njk9Y29uZmlnIFpSQU1fREVGX0NPTVBfTFpPXG5kcml2ZXJzL2Jsb2NrL3pyYW0vS2NvbmZpZy03MC1cdGJvb2wgXCYjMzQ7bHpvXCYjMzQ7XG5kcml2ZXJzL2Jsb2NrL3pyYW0vS2NvbmZpZzo3MTpcdGRlcGVuZHMgb24gWlJBTV9CQUNLRU5EX0xaT1xuZHJpdmVycy9ibG9jay96cmFtL0tjb25maWctNzItXG5kcml2ZXJzL2Jsb2NrL3pyYW0vS2NvbmZpZz03Mz1jb25maWcgWlJBTV9ERUZfQ09NUF9MWjRcbmRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnLTc0LVx0Ym9vbCBcJiMzNDtsejRcJiMzNDtcbmRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnOjc1Olx0ZGVwZW5kcyBvbiBaUkFNX0JBQ0tFTkRfTFo0XG5kcml2ZXJzL2Jsb2NrL3pyYW0vS2NvbmZpZy03Ni1cbmRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnPTc3PWNvbmZpZyBaUkFNX0RFRl9DT01QX0xaNEhDXG5kcml2ZXJzL2Jsb2NrL3pyYW0vS2NvbmZpZy03OC1cdGJvb2wgXCYjMzQ7bHo0aGNcJiMzNDtcbmRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnOjc5Olx0ZGVwZW5kcyBvbiBaUkFNX0JBQ0tFTkRfTFo0SENcbmRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnLTgwLVxuZHJpdmVycy9ibG9jay96cmFtL0tjb25maWc9ODE9Y29uZmlnIFpSQU1fREVGX0NPTVBfWlNURFxuZHJpdmVycy9ibG9jay96cmFtL0tjb25maWctODItXHRib29sIFwmIzM0O3pzdGRcJiMzNDtcbmRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnOjgzOlx0ZGVwZW5kcyBvbiBaUkFNX0JBQ0tFTkRfWlNURFxuZHJpdmVycy9ibG9jay96cmFtL0tjb25maWctODQtXG5kcml2ZXJzL2Jsb2NrL3pyYW0vS2NvbmZpZz04NT1jb25maWcgWlJBTV9ERUZfQ09NUF9ERUZMQVRFXG5kcml2ZXJzL2Jsb2NrL3pyYW0vS2NvbmZpZy04Ni1cdGJvb2wgXCYjMzQ7ZGVmbGF0ZVwmIzM0O1xuZHJpdmVycy9ibG9jay96cmFtL0tjb25maWc6ODc6XHRkZXBlbmRzIG9uIFpSQU1fQkFDS0VORF9ERUZMQVRFXG5kcml2ZXJzL2Jsb2NrL3pyYW0vS2NvbmZpZy04OC1cbmRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnPTg5PWNvbmZpZyBaUkFNX0RFRl9DT01QXzg0MlxuZHJpdmVycy9ibG9jay96cmFtL0tjb25maWctOTAtXHRib29sIFwmIzM0Ozg0MlwmIzM0O1xuZHJpdmVycy9ibG9jay96cmFtL0tjb25maWc6OTE6XHRkZXBlbmRzIG9uIFpSQU1fQkFDS0VORF84NDJcbmRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnLTkyLVxuLS1cbmRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnPTk1PWNvbmZpZyBaUkFNX0RFRl9DT01QXG5kcml2ZXJzL2Jsb2NrL3pyYW0vS2NvbmZpZy05Ni1cdHN0cmluZ1xuZHJpdmVycy9ibG9jay96cmFtL0tjb25maWc6OTc6XHRkZXBlbmRzIG9uIFpSQU1cbmRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnLTk4LVx0ZGVmYXVsdCBcJiMzNDtsem8tcmxlXCYjMzQ7IGlmIFpSQU1fREVGX0NPTVBfTFpPUkxFXG4tLVxuZHJpdmVycy9ibG9jay96cmFtL0tjb25maWc9MTA3PWNvbmZpZyBaUkFNX1dSSVRFQkFDS1xuZHJpdmVycy9ibG9jay96cmFtL0tjb25maWctMTA4LSAgICAgICBib29sIFwmIzM0O1dyaXRlIGJhY2sgaW5jb21wcmVzc2libGUgb3IgaWRsZSBwYWdlIHRvIGJhY2tpbmcgZGV2aWNlXCYjMzQ7XG5kcml2ZXJzL2Jsb2NrL3pyYW0vS2NvbmZpZzoxMDk6ICAgICAgIGRlcGVuZHMgb24gWlJBTVxuZHJpdmVycy9ibG9jay96cmFtL0tjb25maWctMTEwLSAgICAgICBoZWxwXG4tLVxuZHJpdmVycy9ibG9jay96cmFtL0tjb25maWc9MTIxPWNvbmZpZyBaUkFNX1RSQUNLX0VOVFJZX0FDVElNRVxuZHJpdmVycy9ibG9jay96cmFtL0tjb25maWctMTIyLVx0Ym9vbCBcJiMzNDtUcmFjayBhY2Nlc3MgdGltZSBvZiB6cmFtIGVudHJpZXNcJiMzNDtcbmRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnOjEyMzpcdGRlcGVuZHMgb24gWlJBTVxuZHJpdmVycy9ibG9jay96cmFtL0tjb25maWctMTI0LVx0aGVscFxuLS1cbmRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnPTEyOT1jb25maWcgWlJBTV9NRU1PUllfVFJBQ0tJTkdcbmRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnLTEzMC1cdGJvb2wgXCYjMzQ7VHJhY2sgelJhbSBibG9jayBzdGF0dXNcJiMzNDtcbmRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnOjEzMTpcdGRlcGVuZHMgb24gWlJBTSBcdTAwMjZcdTAwMjYgREVCVUdfRlNcbmRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnLTEzMi1cdHNlbGVjdCBaUkFNX1RSQUNLX0VOVFJZX0FDVElNRVxuLS1cbmRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnPTE0MD1jb25maWcgWlJBTV9NVUxUSV9DT01QXG5kcml2ZXJzL2Jsb2NrL3pyYW0vS2NvbmZpZy0xNDEtXHRib29sIFwmIzM0O0VuYWJsZSBtdWx0aXBsZSBjb21wcmVzc2lvbiBzdHJlYW1zXCYjMzQ7XG5kcml2ZXJzL2Jsb2NrL3pyYW0vS2NvbmZpZzoxNDI6XHRkZXBlbmRzIG9uIFpSQU1cbmRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnLTE0My1cdGhlbHBcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzAgMTA6MDA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTEyMDEKCQkJCQkJCW91dHB1dDogMzIKCQkJCQkJCXRob3VnaHRzOiAxMjYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBaUkFNIEltcGxlbWVudGF0aW9uKioKCk9rYXksIHNvIHdlJiMzOTtyZSBsb29raW5nIGF0IGludGVncmF0aW5nIGBaUkFNYCBhbmQgc3BlY2lmaWNhbGx5LCB0aGUgYFpSQU1fQkFDS0VORF9ERUZMQVRFYCBiYWNrZW5kLiBNeSBpbW1lZGlhdGUgY29uY2VybiBpcyBob3cgdGhlIGNvcmUgZnVuY3Rpb25zIGFyZSBiZWluZyBtb2RpZmllZCBhbmQgdXRpbGl6ZWQuIFNwZWNpZmljYWxseSwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIG1vZGlmaWNhdGlvbnMgdG8gYGRlZmxhdGVfc2V0dXBfcGFyYW1zYCBhbmQgYHpyYW1fZGVzdHJveV9jb21wc2AuIEkgc2VlIGBkZWZsYXRlX3NldHVwX3BhcmFtc2AgaXMgZGVjbGFyZWQgYXMgc3RhdGljLCBidXQgaXQmIzM5O3MgYXNzaWduZWQgdG8gYGJhY2tlbmRfZGVmbGF0ZS5zZXR1cF9wYXJhbXNgIOKAkyBJJiMzOTtsbCBuZWVkIHRvIGRvdWJsZS1jaGVjayB0aGF0IHRoaXMgaXMgc2FmZSBhbmQgbWFrZXMgc2Vuc2Ugd2l0aGluIHRoZSBvdmVyYWxsIGFyY2hpdGVjdHVyZS4KCk15IGZvY3VzIG5vdyBpcyBvbiBob3cgdGhlc2UgY2hhbmdlcyBhcmUgKnRyaWdnZXJlZCouIEkgc3VzcGVjdCBgZGlza3NpemVfc3RvcmVgIGlzIHRoZSBrZXkuIE15IGludHVpdGlvbiBpcyB0ZWxsaW5nIG1lIHRoYXQgaXQmIzM5O3MgdGhlIG9uZSB0aGF0IGNhbGxzIGB6Y29tcF9jcmVhdGVgIGFuZCwgYnkgYXNzb2NpYXRpb24sIHBvdGVudGlhbGx5IGB6cmFtX2Rlc3Ryb3lfY29tcHNgLiBJIHNob3VsZCB2ZXJpZnkgdGhhdC4gQWxzbywgYmFzZWQgb24gdGhlIGZ1bmN0aW9uIG5hbWVzLCBgY29tcF9hbGdvcml0aG1fc3RvcmVgICpjb3VsZCogYWxzbyB0cmlnZ2VyIGB6Y29tcF9jcmVhdGVgLiBUaGF0IG9uZSBJJiMzOTtsbCBuZWVkIHRvIGNoZWNrIGNhcmVmdWxseS4gTGV0JiMzOTtzIHN0YXJ0IGJ5IGxvb2tpbmcgY2xvc2VseSBhdCBgY29tcF9hbGdvcml0aG1fc3RvcmVgLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMCAxMDowMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb21wX2FsZ29yaXRobV9zdG9yZSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvYmxvY2svenJhbS8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmM9MTY1OT1zdGF0aWMgdm9pZCBjb21wX2FsZ29yaXRobV9zZXQoc3RydWN0IHpyYW0gKnpyYW0sIHUzMiBwcmlvLCBjb25zdCBjaGFyICphbGcpXG4tLVxuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmMtMTY2My1cbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jOjE2NjQ6c3RhdGljIGludCBfX2NvbXBfYWxnb3JpdGhtX3N0b3JlKHN0cnVjdCB6cmFtICp6cmFtLCB1MzIgcHJpbywgY29uc3QgY2hhciAqYnVmKVxuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmMtMTY2NS17XG4tLVxuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmM9MTgwMT1zdGF0aWMgc3NpemVfdCBjb21wX2FsZ29yaXRobV9zaG93KHN0cnVjdCBkZXZpY2UgKmRldixcbi0tXG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYy0xODEyLVxuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmM6MTgxMzpzdGF0aWMgc3NpemVfdCBjb21wX2FsZ29yaXRobV9zdG9yZShzdHJ1Y3QgZGV2aWNlICpkZXYsXG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYy0xODE0LVx0XHRcdFx0ICAgIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLFxuLS1cbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jLTE4MjAtXG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYzoxODIxOlx0cmV0ID0gX19jb21wX2FsZ29yaXRobV9zdG9yZSh6cmFtLCBaUkFNX1BSSU1BUllfQ09NUCwgYnVmKTtcbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jLTE4MjItXHRyZXR1cm4gcmV0ID8gcmV0IDogbGVuO1xuLS1cbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jPTE4MjY9c3RhdGljIHNzaXplX3QgcmVjb21wX2FsZ29yaXRobV9zaG93KHN0cnVjdCBkZXZpY2UgKmRldixcbi0tXG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYy0xODQ0LVxuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmM6MTg0NTpzdGF0aWMgc3NpemVfdCByZWNvbXBfYWxnb3JpdGhtX3N0b3JlKHN0cnVjdCBkZXZpY2UgKmRldixcbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jLTE4NDYtXHRcdFx0XHQgICAgICBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0cixcbi0tXG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYy0xODgxLVxuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmM6MTg4MjpcdHJldCA9IF9fY29tcF9hbGdvcml0aG1fc3RvcmUoenJhbSwgcHJpbywgYWxnKTtcbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jLTE4ODMtXHRyZXR1cm4gcmV0ID8gcmV0IDogbGVuO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMCAxMDowMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMjE3NwoJCQkJCQkJb3V0cHV0OiAzMwoJCQkJCQkJdGhvdWdodHM6IDEyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgbGlrZSB5b3Vyc2VsZjoKCioqQW5hbHl6aW5nIHRoZSBBbGdvcml0aG0gU3RvcmUqKgoKQWxyaWdodCwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gaW1tZWRpYXRlbHkgZXhhbWluZSB0aGUgYF9fY29tcF9hbGdvcml0aG1fc3RvcmVgLiBUaGF0JiMzOTtzIHdoZXJlIEkgd291bGQgZXhwZWN0IHRoZSBjb3JlIG9mIHRoaXMgd2hvbGUgdGhpbmcgdG8gbGl2ZSwgd291bGRuJiMzOTt0IHlvdT8gVGhpcyBpcyB0aGUgY2VudHJhbCByZXBvc2l0b3J5LCB0aGUgb3BlcmF0aW9uYWwgaGVhcnQgb2YgdGhlIHN5c3RlbSB3aGVuIGl0IGNvbWVzIHRvIGNvbXB1dGF0aW9uLiBNeSBpbW1lZGlhdGUgaW5zdGluY3QgaXMgdG8gbG9vayBhdCBob3cgaXQmIzM5O3Mgc3RydWN0dXJlZCwgaXRzIGFjY2VzcyBtZXRob2RzLCBhbmQsIG9mIGNvdXJzZSwgdGhlIGFsZ29yaXRobXMgdGhlbXNlbHZlcy4gV2hhdCBraW5kIG9mIG1ldGFkYXRhIGRvZXMgaXQgaGF2ZT8gVmVyc2lvbmluZz8gRGVwZW5kZW5jeSBtYW5hZ2VtZW50PyBBcmUgdGhlIGFsZ29yaXRobXMgZHluYW1pY2FsbHkgbG9hZGVkIG9yIHN0YXRpY2FsbHkgbGlua2VkPyBBcmUgdGhlcmUgYW55IG9idmlvdXMgcGVyZm9ybWFuY2UgYm90dGxlbmVja3MgaW4gdGhlIHN0b3JlIGl0c2VsZj8gV2hhdCBhcmUgdGhlIGltcGxpY2F0aW9ucyBvZiB0aGUgc3RvcmUmIzM5O3MgZGVzaWduIG9uIHN5c3RlbSBzY2FsYWJpbGl0eSBhbmQgbWFpbnRhaW5hYmlsaXR5PyBJJiMzOTttIGFscmVhZHkgYW50aWNpcGF0aW5nIHF1ZXN0aW9ucyBhYm91dCBwb3RlbnRpYWwgY29uY3VycmVuY3kgaXNzdWVzIGFuZCBzZWN1cml0eSBpbXBsaWNhdGlvbnMgaWYgdGhpcyBpcyBub3QgaGFuZGxlZCBjb3JyZWN0bHkuIFRoZSBkZXNpZ24gb2YgdGhpcyBzdG9yZSBpcyBwYXJhbW91bnQgdG8gdGhlIGVudGlyZSBvcGVyYXRpb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMwIDEwOjAxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O19fY29tcF9hbGdvcml0aG1fc3RvcmUmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL2Jsb2NrL3pyYW0vJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jPTE2NTk9c3RhdGljIHZvaWQgY29tcF9hbGdvcml0aG1fc2V0KHN0cnVjdCB6cmFtICp6cmFtLCB1MzIgcHJpbywgY29uc3QgY2hhciAqYWxnKVxuLS1cbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jLTE2NjMtXG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYzoxNjY0OnN0YXRpYyBpbnQgX19jb21wX2FsZ29yaXRobV9zdG9yZShzdHJ1Y3QgenJhbSAqenJhbSwgdTMyIHByaW8sIGNvbnN0IGNoYXIgKmJ1ZilcbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jLTE2NjUte1xuLS1cbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jPTE4MTM9c3RhdGljIHNzaXplX3QgY29tcF9hbGdvcml0aG1fc3RvcmUoc3RydWN0IGRldmljZSAqZGV2LFxuLS1cbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jLTE4MjAtXG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYzoxODIxOlx0cmV0ID0gX19jb21wX2FsZ29yaXRobV9zdG9yZSh6cmFtLCBaUkFNX1BSSU1BUllfQ09NUCwgYnVmKTtcbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jLTE4MjItXHRyZXR1cm4gcmV0ID8gcmV0IDogbGVuO1xuLS1cbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jPTE4NDU9c3RhdGljIHNzaXplX3QgcmVjb21wX2FsZ29yaXRobV9zdG9yZShzdHJ1Y3QgZGV2aWNlICpkZXYsXG4tLVxuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmMtMTg4MS1cbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jOjE4ODI6XHRyZXQgPSBfX2NvbXBfYWxnb3JpdGhtX3N0b3JlKHpyYW0sIHByaW8sIGFsZyk7XG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYy0xODgzLVx0cmV0dXJuIHJldCA/IHJldCA6IGxlbjtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzAgMTA6MDE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTI4MjEKCQkJCQkJCW91dHB1dDogNDIKCQkJCQkJCXRob3VnaHRzOiAxNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzLiBIZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGFzIGlmIHRoZXkmIzM5O3JlIG15IG93bjoKCioqSW52ZXN0aWdhdGluZyB0aGUgQ29yZSBGdW5jdGlvbmFsaXR5KioKCkFscmlnaHQsIHRpbWUgdG8gZ2V0IHRvIHRoZSBoZWFydCBvZiB0aGlzLiBNeSBmb2N1cyBpcyBpbW1lZGlhdGVseSBkcmF3biB0byB0aGF0IGBfX2NvbXBfYWxnb3JpdGhtX3N0b3JlYCDigJMgdGhhdCBzb3VuZHMgbGlrZSBhIGtleSBjb21wb25lbnQsIHByb2JhYmx5IGhvbGRpbmcgdGhlIGNvcmUgbG9naWMgZm9yIHRoZSBjb21wYXJhdGl2ZSBhbGdvcml0aG0uIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQgaXRzIGZ1bmN0aW9uIGlzLCB3aGF0IGl0JiMzOTtzIHJlc3BvbnNpYmxlIGZvciwgYW5kIGhvdyBpdCYjMzk7cyBzdHJ1Y3R1cmVkLiBLbm93aW5nIHRoaXMgd2lsbCBnaXZlIG1lIGEgc29saWQgZm91bmRhdGlvbiBmb3IgZXZhbHVhdGluZyBpdHMgb3ZlcmFsbCBkZXNpZ24gYW5kIGhvdyBpdCYjMzk7cyBpbnRlZ3JhdGVkIHdpdGhpbiB0aGUgbGFyZ2VyIHN5c3RlbS4gTGV0JiMzOTtzIHNlZSB3aGF0JiMzOTtzIHdoYXQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMwIDEwOjAxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxNjY0LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDMwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzE2NjQ6XHRzdGF0aWMgaW50IF9fY29tcF9hbGdvcml0aG1fc3RvcmUoc3RydWN0IHpyYW0gKnpyYW0sIHUzMiBwcmlvLCBjb25zdCBjaGFyICpidWYpXG4xNjY1Olx0e1xuMTY2NjpcdFx0Y29uc3QgY2hhciAqYWxnO1xuMTY2NzpcdFx0c2l6ZV90IHN6O1xuMTY2ODpcdFxuMTY2OTpcdFx0c3ogPSBzdHJsZW4oYnVmKTtcbjE2NzA6XHRcdGlmIChzeiBcdTAwM2U9IFpSQU1fTUFYX0FMR09fTkFNRV9TWilcbjE2NzE6XHRcdFx0cmV0dXJuIC1FMkJJRztcbjE2NzI6XHRcbjE2NzM6XHRcdGFsZyA9IHpjb21wX2xvb2t1cF9iYWNrZW5kX25hbWUoYnVmKTtcbjE2NzQ6XHRcdGlmICghYWxnKVxuMTY3NTpcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbjE2NzY6XHRcbjE2Nzc6XHRcdGd1YXJkKHJ3c2VtX3dyaXRlKShcdTAwMjZ6cmFtLVx1MDAzZWRldl9sb2NrKTtcbjE2Nzg6XHRcdGlmIChpbml0X2RvbmUoenJhbSkpIHtcbjE2Nzk6XHRcdFx0cHJfaW5mbyhcJiMzNDtDYW4mIzM5O3QgY2hhbmdlIGFsZ29yaXRobSBmb3IgaW5pdGlhbGl6ZWQgZGV2aWNlXFxuXCYjMzQ7KTtcbjE2ODA6XHRcdFx0cmV0dXJuIC1FQlVTWTtcbjE2ODE6XHRcdH1cbjE2ODI6XHRcbjE2ODM6XHRcdGNvbXBfYWxnb3JpdGhtX3NldCh6cmFtLCBwcmlvLCBhbGcpO1xuMTY4NDpcdFx0cmV0dXJuIDA7XG4xNjg1Olx0fVxuMTY4NjpcdFxuMTY4NzpcdHN0YXRpYyB2b2lkIGNvbXBfcGFyYW1zX3Jlc2V0KHN0cnVjdCB6cmFtICp6cmFtLCB1MzIgcHJpbylcbjE2ODg6XHR7XG4xNjg5Olx0XHRzdHJ1Y3QgemNvbXBfcGFyYW1zICpwYXJhbXMgPSBcdTAwMjZ6cmFtLVx1MDAzZXBhcmFtc1twcmlvXTtcbjE2OTA6XHRcbjE2OTE6XHRcdHZmcmVlKHBhcmFtcy1cdTAwM2VkaWN0KTtcbjE2OTI6XHRcdHBhcmFtcy1cdTAwM2VsZXZlbCA9IFpDT01QX1BBUkFNX05PVF9TRVQ7XG4xNjkzOlx0XHRwYXJhbXMtXHUwMDNlZGVmbGF0ZS53aW5iaXRzID0gWkNPTVBfUEFSQU1fTk9UX1NFVDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzAgMTA6MDE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTM0NjcKCQkJCQkJCW91dHB1dDogNDIKCQkJCQkJCXRob3VnaHRzOiAzMAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgcHJlc2VudGVkIGFzIG15IG93biBtZW50YWwgcHJvY2VzcywgZ2l2ZW4gbXkgZXhwZXJ0aXNlOgoKKipBbGdvcml0aG0gTmFtaW5nIGFuZCBJbml0aWFsaXphdGlvbioqCgpBbHJpZ2h0LCBzbyB0aGlzIGxpbmUgb2YgY29kZSwgb3IgdGhpcyBzZWN0aW9uIG9mIHRoZSBwcm9jZXNzLCBpcyBwcmV0dHkgc3RyYWlnaHRmb3J3YXJkLiBJdCBsb29rcyBsaWtlIGl0cyBzb2xlIHB1cnBvc2UgaXMgdG8gYXNzaWduIHRoZSBuYW1lIG9mIHRoZSBhbGdvcml0aG0uIE5vdGhpbmcgZmFuY3ksIGp1c3Qgc2V0dGluZyBhIHN0cmluZyB2YWx1ZS4gVGhlIHJlYWwgbWVhdCBvZiB0aGUgb3BlcmF0aW9uLCB0aGUgYWN0dWFsIGluc3RhbnRpYXRpb24gYW5kIHNldHVwIG9mIHRoZSBhbGdvcml0aG0sIGhhcHBlbnMgZWxzZXdoZXJlLiBUaGUgY29tbWVudCBleHBsaWNpdGx5IGRpcmVjdHMgbXkgYXR0ZW50aW9uIHRvIGBkaXNrc2l6ZV9zdG9yZWAuIFRoYXQmIzM5O3Mgd2hlcmUgSSBuZWVkIHRvIGZvY3VzIG15IGVmZm9ydHMuIEkmIzM5O2xsIG5lZWQgdG8gZXhhbWluZSBgZGlza3NpemVfc3RvcmVgIGNsb3NlbHkgdG8gdW5kZXJzdGFuZCBob3cgdGhpcyBhbGdvcml0aG0gaXMgYWN0dWFsbHkgYnJvdWdodCB0byBsaWZlLiBMZXQmIzM5O3MgZ2V0IHJpZ2h0IHRvIGl0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMCAxMDowMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMjg1OSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA1MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsyODU5Olx0c3RhdGljIHNzaXplX3QgZGlza3NpemVfc3RvcmUoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0cixcbjI4NjA6XHRcdFx0XHQgICAgICBjb25zdCBjaGFyICpidWYsIHNpemVfdCBsZW4pXG4yODYxOlx0e1xuMjg2MjpcdFx0dTY0IGRpc2tzaXplO1xuMjg2MzpcdFx0c3RydWN0IHpjb21wICpjb21wO1xuMjg2NDpcdFx0c3RydWN0IHpyYW0gKnpyYW0gPSBkZXZfdG9fenJhbShkZXYpO1xuMjg2NTpcdFx0aW50IGVycjtcbjI4NjY6XHRcdHUzMiBwcmlvO1xuMjg2NzpcdFxuMjg2ODpcdFx0ZGlza3NpemUgPSBtZW1wYXJzZShidWYsIE5VTEwpO1xuMjg2OTpcdFx0aWYgKCFkaXNrc2l6ZSlcbjI4NzA6XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4yODcxOlx0XG4yODcyOlx0XHRndWFyZChyd3NlbV93cml0ZSkoXHUwMDI2enJhbS1cdTAwM2VkZXZfbG9jayk7XG4yODczOlx0XHRpZiAoaW5pdF9kb25lKHpyYW0pKSB7XG4yODc0Olx0XHRcdHByX2luZm8oXCYjMzQ7Q2Fubm90IGNoYW5nZSBkaXNrc2l6ZSBmb3IgaW5pdGlhbGl6ZWQgZGV2aWNlXFxuXCYjMzQ7KTtcbjI4NzU6XHRcdFx0cmV0dXJuIC1FQlVTWTtcbjI4NzY6XHRcdH1cbjI4Nzc6XHRcbjI4Nzg6XHRcdGRpc2tzaXplID0gUEFHRV9BTElHTihkaXNrc2l6ZSk7XG4yODc5Olx0XHRpZiAoIXpyYW1fbWV0YV9hbGxvYyh6cmFtLCBkaXNrc2l6ZSkpXG4yODgwOlx0XHRcdHJldHVybiAtRU5PTUVNO1xuMjg4MTpcdFxuMjg4MjpcdFx0Zm9yIChwcmlvID0gWlJBTV9QUklNQVJZX0NPTVA7IHByaW8gXHUwMDNjIFpSQU1fTUFYX0NPTVBTOyBwcmlvJiM0MzsmIzQzOykge1xuMjg4MzpcdFx0XHRpZiAoIXpyYW0tXHUwMDNlY29tcF9hbGdzW3ByaW9dKVxuMjg4NDpcdFx0XHRcdGNvbnRpbnVlO1xuMjg4NTpcdFxuMjg4NjpcdFx0XHRjb21wID0gemNvbXBfY3JlYXRlKHpyYW0tXHUwMDNlY29tcF9hbGdzW3ByaW9dLFxuMjg4NzpcdFx0XHRcdFx0ICAgIFx1MDAyNnpyYW0tXHUwMDNlcGFyYW1zW3ByaW9dKTtcbjI4ODg6XHRcdFx0aWYgKElTX0VSUihjb21wKSkge1xuMjg4OTpcdFx0XHRcdHByX2VycihcJiMzNDtDYW5ub3QgaW5pdGlhbGlzZSAlcyBjb21wcmVzc2luZyBiYWNrZW5kXFxuXCYjMzQ7LFxuMjg5MDpcdFx0XHRcdCAgICAgICB6cmFtLVx1MDAzZWNvbXBfYWxnc1twcmlvXSk7XG4yODkxOlx0XHRcdFx0ZXJyID0gUFRSX0VSUihjb21wKTtcbjI4OTI6XHRcdFx0XHRnb3RvIG91dF9mcmVlX2NvbXBzO1xuMjg5MzpcdFx0XHR9XG4yODk0Olx0XG4yODk1Olx0XHRcdHpyYW0tXHUwMDNlY29tcHNbcHJpb10gPSBjb21wO1xuMjg5NjpcdFx0fVxuMjg5NzpcdFx0enJhbS1cdTAwM2VkaXNrc2l6ZSA9IGRpc2tzaXplO1xuMjg5ODpcdFx0c2V0X2NhcGFjaXR5X2FuZF9ub3RpZnkoenJhbS1cdTAwM2VkaXNrLCB6cmFtLVx1MDAzZWRpc2tzaXplIFx1MDAzZVx1MDAzZSBTRUNUT1JfU0hJRlQpO1xuMjg5OTpcdFxuMjkwMDpcdFx0cmV0dXJuIGxlbjtcbjI5MDE6XHRcbjI5MDI6XHRvdXRfZnJlZV9jb21wczpcbjI5MDM6XHRcdHpyYW1fZGVzdHJveV9jb21wcyh6cmFtKTtcbjI5MDQ6XHRcdHpyYW1fbWV0YV9mcmVlKHpyYW0sIGRpc2tzaXplKTtcbjI5MDU6XHRcdHJldHVybiBlcnI7XG4yOTA2Olx0fVxuMjkwNzpcdFxuMjkwODpcdHN0YXRpYyBzc2l6ZV90IHJlc2V0X3N0b3JlKHN0cnVjdCBkZXZpY2UgKmRldixcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzAgMTA6MDE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTQ0MzIKCQkJCQkJCW91dHB1dDogMjkKCQkJCQkJCXRob3VnaHRzOiA2MwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4KCioqSW52ZXN0aWdhdGluZyB0aGUgWlJBTSBDb21wcmVzc2lvbiBGbG93KioKClJpZ2h0LCBzbyBgZGlza3NpemVfc3RvcmVgIGlzIHRoZSBrZXkgZnVuY3Rpb24gaGVyZTsgaXQmIzM5O3MgdGhlIG9uZSB0aGF0IGtpY2tzIG9mZiBib3RoIGB6Y29tcF9jcmVhdGVgIGFuZCBgenJhbV9kZXN0cm95X2NvbXBzYC4gVGhhdCBtYWtlcyBzZW5zZSBpbiB0ZXJtcyBvZiB0aGUgbGlmZWN5Y2xlLCBJIHN1cHBvc2UuIEFuZCBpdCBzZWVtcyB0aGF0IGBkZWZsYXRlX3NldHVwX3BhcmFtc2AgZ2V0cyBjYWxsZWQgd2l0aGluIGB6Y29tcF9jcmVhdGVgLiBJbnRlcmVzdGluZy4KCk5vdywgSSYjMzk7bSBnZXR0aW5nIGN1cmlvdXMgYWJvdXQgdGhlIGNvbXByZXNzaW9uIHBhcmFtZXRlcnMuIFNwZWNpZmljYWxseSwgY2FuIHdlIGRpcmVjdGx5IGNvbnRyb2wgYHdpbmJpdHNgPyBLbm93aW5nIHRoYXQgd291bGQgZ2l2ZSBtZSBhIGRlZXBlciBsZXZlbCBvZiBjb250cm9sIGFuZCBwb3RlbnRpYWxseSBvcHRpbWl6ZSB0aGUgY29tcHJlc3Npb24gYmVoYXZpb3IuIFRpbWUgdG8gZ28gZGlnZ2luZyB0aHJvdWdoIHRoZSBjb2RlIGFuZCBzZWUgaWYgdGhlcmUmIzM5O3MgYSBtZWNoYW5pc20gdG8gc2V0IHRoYXQgcGFyYW1ldGVyLiBJIHNob3VsZCBiZSBhYmxlIHRvIGZpZ3VyZSBpdCBvdXQgd2l0aCBhIGxpdHRsZSBiaXQgb2Ygc2VhcmNoaW5nLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMCAxMDowMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt3aW5iaXRzJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9ibG9jay96cmFtLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL2Jsb2NrL3pyYW0vYmFja2VuZF9kZWZsYXRlLmM9MjM9c3RhdGljIGludCBkZWZsYXRlX3NldHVwX3BhcmFtcyhzdHJ1Y3QgemNvbXBfcGFyYW1zICpwYXJhbXMpXG4tLVxuZHJpdmVycy9ibG9jay96cmFtL2JhY2tlbmRfZGVmbGF0ZS5jLTI2LVx0XHRwYXJhbXMtXHUwMDNlbGV2ZWwgPSBaX0RFRkFVTFRfQ09NUFJFU1NJT047XG5kcml2ZXJzL2Jsb2NrL3pyYW0vYmFja2VuZF9kZWZsYXRlLmM6Mjc6XHRpZiAocGFyYW1zLVx1MDAzZWRlZmxhdGUud2luYml0cyA9PSBaQ09NUF9QQVJBTV9OT1RfU0VUKSB7XG5kcml2ZXJzL2Jsb2NrL3pyYW0vYmFja2VuZF9kZWZsYXRlLmM6Mjg6XHRcdHBhcmFtcy1cdTAwM2VkZWZsYXRlLndpbmJpdHMgPSBERUZMQVRFX0RFRl9XSU5CSVRTO1xuZHJpdmVycy9ibG9jay96cmFtL2JhY2tlbmRfZGVmbGF0ZS5jLTI5LVx0fSBlbHNlIHtcbmRyaXZlcnMvYmxvY2svenJhbS9iYWNrZW5kX2RlZmxhdGUuYzozMDpcdFx0czMyIHdiID0gcGFyYW1zLVx1MDAzZWRlZmxhdGUud2luYml0cztcbmRyaXZlcnMvYmxvY2svenJhbS9iYWNrZW5kX2RlZmxhdGUuYy0zMS1cbi0tXG5kcml2ZXJzL2Jsb2NrL3pyYW0vYmFja2VuZF9kZWZsYXRlLmM9NTc9c3RhdGljIGludCBkZWZsYXRlX2NyZWF0ZShzdHJ1Y3QgemNvbXBfcGFyYW1zICpwYXJhbXMsIHN0cnVjdCB6Y29tcF9jdHggKmN0eClcbi0tXG5kcml2ZXJzL2Jsb2NrL3pyYW0vYmFja2VuZF9kZWZsYXRlLmMtNjctXHRjdHgtXHUwMDNlY29udGV4dCA9IHpjdHg7XG5kcml2ZXJzL2Jsb2NrL3pyYW0vYmFja2VuZF9kZWZsYXRlLmM6Njg6XHRzeiA9IHpsaWJfZGVmbGF0ZV93b3Jrc3BhY2VzaXplKHBhcmFtcy1cdTAwM2VkZWZsYXRlLndpbmJpdHMsIE1BWF9NRU1fTEVWRUwpO1xuZHJpdmVycy9ibG9jay96cmFtL2JhY2tlbmRfZGVmbGF0ZS5jLTY5LVx0emN0eC1cdTAwM2VjY3R4LndvcmtzcGFjZSA9IHZ6YWxsb2Moc3opO1xuLS1cbmRyaXZlcnMvYmxvY2svenJhbS9iYWNrZW5kX2RlZmxhdGUuYy03My1cdHJldCA9IHpsaWJfZGVmbGF0ZUluaXQyKFx1MDAyNnpjdHgtXHUwMDNlY2N0eCwgcGFyYW1zLVx1MDAzZWxldmVsLCBaX0RFRkxBVEVELFxuZHJpdmVycy9ibG9jay96cmFtL2JhY2tlbmRfZGVmbGF0ZS5jOjc0Olx0XHRcdFx0cGFyYW1zLVx1MDAzZWRlZmxhdGUud2luYml0cywgREVGTEFURV9ERUZfTUVNTEVWRUwsXG5kcml2ZXJzL2Jsb2NrL3pyYW0vYmFja2VuZF9kZWZsYXRlLmMtNzUtXHRcdFx0XHRaX0RFRkFVTFRfU1RSQVRFR1kpO1xuLS1cbmRyaXZlcnMvYmxvY2svenJhbS9iYWNrZW5kX2RlZmxhdGUuYy04My1cbmRyaXZlcnMvYmxvY2svenJhbS9iYWNrZW5kX2RlZmxhdGUuYzo4NDpcdHJldCA9IHpsaWJfaW5mbGF0ZUluaXQyKFx1MDAyNnpjdHgtXHUwMDNlZGN0eCwgcGFyYW1zLVx1MDAzZWRlZmxhdGUud2luYml0cyk7XG5kcml2ZXJzL2Jsb2NrL3pyYW0vYmFja2VuZF9kZWZsYXRlLmMtODUtXHRpZiAocmV0ICE9IFpfT0spXG4tLVxuZHJpdmVycy9ibG9jay96cmFtL3pjb21wLmg9MTA9c3RydWN0IGRlZmxhdGVfcGFyYW1zIHtcbmRyaXZlcnMvYmxvY2svenJhbS96Y29tcC5oOjExOlx0czMyIHdpbmJpdHM7XG5kcml2ZXJzL2Jsb2NrL3pyYW0vemNvbXAuaC0xMi19O1xuLS1cbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jPTE2ODc9c3RhdGljIHZvaWQgY29tcF9wYXJhbXNfcmVzZXQoc3RydWN0IHpyYW0gKnpyYW0sIHUzMiBwcmlvKVxuLS1cbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jLTE2OTItXHRwYXJhbXMtXHUwMDNlbGV2ZWwgPSBaQ09NUF9QQVJBTV9OT1RfU0VUO1xuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmM6MTY5MzpcdHBhcmFtcy1cdTAwM2VkZWZsYXRlLndpbmJpdHMgPSBaQ09NUF9QQVJBTV9OT1RfU0VUO1xuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmMtMTY5NC1cdHBhcmFtcy1cdTAwM2VkaWN0X3N6ID0gMDtcbi0tXG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYz0xNjk4PXN0YXRpYyBpbnQgY29tcF9wYXJhbXNfc3RvcmUoc3RydWN0IHpyYW0gKnpyYW0sIHUzMiBwcmlvLCBzMzIgbGV2ZWwsXG4tLVxuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmMtMTcxNy1cdHpyYW0tXHUwMDNlcGFyYW1zW3ByaW9dLmxldmVsID0gbGV2ZWw7XG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYzoxNzE4Olx0enJhbS1cdTAwM2VwYXJhbXNbcHJpb10uZGVmbGF0ZS53aW5iaXRzID0gZGVmbGF0ZV9wYXJhbXMtXHUwMDNld2luYml0cztcbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jLTE3MTktXHRyZXR1cm4gMDtcbi0tXG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYz0xNzIyPXN0YXRpYyBzc2l6ZV90IGFsZ29yaXRobV9wYXJhbXNfc3RvcmUoc3RydWN0IGRldmljZSAqZGV2LFxuLS1cbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jLTE3MzMtXG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYzoxNzM0Olx0ZGVmbGF0ZV9wYXJhbXMud2luYml0cyA9IFpDT01QX1BBUkFNX05PVF9TRVQ7XG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYy0xNzM1LVxuLS1cbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jLTE3NjctXG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYzoxNzY4Olx0XHRpZiAoIXN0cmNtcChwYXJhbSwgXCYjMzQ7ZGVmbGF0ZS53aW5iaXRzXCYjMzQ7KSkge1xuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmM6MTc2OTpcdFx0XHRyZXQgPSBrc3RydG9pbnQodmFsLCAxMCwgXHUwMDI2ZGVmbGF0ZV9wYXJhbXMud2luYml0cyk7XG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYy0xNzcwLVx0XHRcdGlmIChyZXQpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMwIDEwOjAxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE1ODY4CgkJCQkJCQlvdXRwdXQ6IDMxCgkJCQkJCQl0aG91Z2h0czogNDE4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEZ1enppbmcgU3RyYXRlZ3kgZm9yIFpSQU0gUGFyYW1ldGVycyoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgaG93IGBhbGdvcml0aG1fcGFyYW1zX3N0b3JlYCBpcyB1c2VkIHRvIGluZmx1ZW5jZSBgd2luYml0c2AuICBUaGlzIGNsZWFybHkgbWFrZXMgaXQgYSBwcmltZSB0YXJnZXQgZm9yIGZ1enppbmcuICBJIG5lZWQgdG8gaWRlbnRpZnkgdGhlIGtleSBmdW5jdGlvbnMgdG8gZm9jdXMgb24sIGtlZXBpbmcgdGhlIGd1aWRlbGluZXMgaW4gbWluZC4KCkluaXRpYWxseSwgSSBpZGVudGlmaWVkIGBkZWZsYXRlX3NldHVwX3BhcmFtc2AgYXMgcmVsZXZhbnQsIGJ1dCBpdCYjMzk7cyBhIGBzdGF0aWNgIGZ1bmN0aW9uLCBzbyBJIG5lZWQgdG8gdGhpbmsgY2FyZWZ1bGx5LiBJdCYjMzk7cyBhc3NpZ25lZCB0byBgc2V0dXBfcGFyYW1zYCB3aGljaCBpcyBhIGZ1bmN0aW9uIHBvaW50ZXIgaW4gYHpjb21wX29wc2Agc28gdGhlIGNvbXBpbGVyIHdvbiYjMzk7dCBuZWNlc3NhcmlseSBpbmxpbmUgaXQsIHdoaWNoIHdvdWxkIG1ha2UgaXQgYW4gaW1wb3J0YW50IHRhcmdldC4gSXQmIzM5O3MgYmVzdCBwcmFjdGljZSwgYW5kIHRoZSBwcm9tcHQgc2F5cywgdG8gZm9jdXMgb24gbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIHJhdGhlciB0aGFuIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zLiBJIGNhbiBsb29rIGludG8gYHpjb21wX2NyZWF0ZWAgYW5kIGBkaXNrc2l6ZV9zdG9yZWAsIGBhbGdvcml0aG1fcGFyYW1zX3N0b3JlYCwgYW5kIGBjb21wX2FsZ29yaXRobV9zdG9yZWAuIEkgYWxzbyBpZGVudGlmaWVkIGB6cmFtX2Rlc3Ryb3lfY29tcHNgLCBgZGlza3NpemVfc3RvcmVgLCBhbmQgYHpyYW1fcmVzZXRfZGV2aWNlYCwgYW5kIGB6cmFtX3JlbW92ZWAuCgpOb3csIHJlZ2FyZGluZyBgZGVmbGF0ZV9zZXR1cF9wYXJhbXNgLCBJJiMzOTttIHBhdXNpbmcuIEl0IGlzIHN0YXRpYywgYW5kIGl0IGlzIGFzc2lnbmVkIHRvIGEgZnVuY3Rpb24gcG9pbnRlciwgYW5kIHRoZSBwcm9tcHQgc3RhdGVzIHRoYXQgSSBzaG91bGQgZm9jdXMgb24gbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJcyByYXRoZXIgdGhhbiBpbmxpbmVkIGludGVybmFsIGZ1bmN0aW9ucy4gU2luY2UgdGhlIHByb21wdCBpbmRpY2F0ZXMgdGhhdCBJIHNob3VsZCBmb2N1cyBvbiB0aGUgc3lzZnMgc3RvcmUgZW50cnkgcG9pbnRzLCBoZXJlJiMzOTtzIG15IHVwZGF0ZWQgbGlzdDoKCiogICBgZGlza3NpemVfc3RvcmVgCiogICBgYWxnb3JpdGhtX3BhcmFtc19zdG9yZWAKKiAgIGByZXNldF9zdG9yZWAKKiAgIGBjb21wX2FsZ29yaXRobV9zdG9yZWAKKiAgIGByZWNvbXBfYWxnb3JpdGhtX3N0b3JlYAoKSSYjMzk7bGwgZG91YmxlLWNoZWNrIHRoYXQgdGhlc2Ugc3lzZnMgc3RvcmUgZnVuY3Rpb25zIGFyZSBzdGF0aWMuIFRoZXkgYXJlLCBidXQgdGhleSYjMzk7cmUgdGhlIEFQSSBlbnRyeSBwb2ludHMgZm9yIHRoaXMgWlJBTSBkcml2ZXIsIHNvIGV2ZW4gdGhvdWdoIHRoZXkmIzM5O3JlIHN0YXRpYywgdGhleSBhcmUgdGhlIG9uZXMgSSB3YW50IHRvIHRhcmdldC4gSSBzaG91bGQgYWxzbyBjaGVjayBpZiB0aGVyZSBhcmUgYW55IG5vbi1zdGF0aWMgZnVuY3Rpb25zIGF2YWlsYWJsZSwganVzdCBpbiBjYXNlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMCAxMDowMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtkaXNrc2l6ZV9zdG9yZSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvYmxvY2svenJhbS8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmM9Mjg0Mj1zdGF0aWMgdm9pZCB6cmFtX3Jlc2V0X2RldmljZShzdHJ1Y3QgenJhbSAqenJhbSlcbi0tXG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYy0yODU4LVxuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmM6Mjg1OTpzdGF0aWMgc3NpemVfdCBkaXNrc2l6ZV9zdG9yZShzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLFxuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmMtMjg2MC1cdFx0XHQgICAgICBjb25zdCBjaGFyICpidWYsIHNpemVfdCBsZW4pXG4tLVxuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmM9MzExMD1zdGF0aWMgaW50IHpyYW1fcmVtb3ZlKHN0cnVjdCB6cmFtICp6cmFtKVxuLS1cbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jLTMxNDYtXHQvKlxuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmM6MzE0NzpcdCAqIGRpc2tzaXplX3N0b3JlKCkgbWF5IGJlIGNhbGxlZCBpbiBiZXR3ZWVuIHpyYW1fcmVzZXRfZGV2aWNlKClcbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jLTMxNDgtXHQgKiBhbmQgZGVsX2dlbmRpc2soKSwgc28gcnVuIHRoZSBsYXN0IHJlc2V0IHRvIGF2b2lkIGxlYWtpbmdcbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jOjMxNDk6XHQgKiBhbnl0aGluZyBhbGxvY2F0ZWQgd2l0aCBkaXNrc2l6ZV9zdG9yZSgpXG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYy0zMTUwLVx0ICovXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMwIDEwOjAxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE3MDc5CgkJCQkJCQlvdXRwdXQ6IDMxCgkJCQkJCQl0aG91Z2h0czogMjIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgc3VtbWFyeSwgYXMgdGhvdWdoIEkmIzM5O20gdGhpbmtpbmcgdGhyb3VnaCB0aGlzIHByb2Nlc3M6CgoqKlN0YXRpYyB2cy4gTm9uLVN0YXRpYyDigJMgVGltZSB0byBJbnZlc3RpZ2F0ZSoqCgpPa2F5LCBzbyBJJiMzOTttIG5vdGljaW5nIHNvbWV0aGluZyBoZXJlLiBJJiMzOTttIHNlZWluZyBhIGxvdCBvZiB0aGVzZSBlbGVtZW50cywgYW5kIHRoZXkgYXBwZWFyIHRvIGJlICpzdGF0aWMqLiBIbW0sIHRoYXQmIzM5O3Mgbm90IHdoYXQgSSYjMzk7ZCBleHBlY3QgZ2l2ZW4gdGhlIGNvbnRleHQuIExldCYjMzk7cyBkaWcgaW4gYSBiaXQuIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzIHRvIGNoZWNrIGB6Y29tcF9jcmVhdGVgLiBJIHJlY2FsbCB0aGF0IG9uZSBiZWluZyAqbm9uLXN0YXRpYyosIGFuZCB0aGF0JiMzOTtzIGV4YWN0bHkgdGhlIGtpbmQgb2YgdGhpbmcgSSYjMzk7bSBsb29raW5nIGF0IHRvIHNlZSBpZiBpdCBpcyB0aGUgb3V0bGllci4gTm93IGxldCYjMzk7cyBzZWUgd2h5LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMCAxMDowMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt6Y29tcF9jcmVhdGUmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL2Jsb2NrL3pyYW0vJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvYmxvY2svenJhbS96Y29tcC5jPTIyNT12b2lkIHpjb21wX2Rlc3Ryb3koc3RydWN0IHpjb21wICpjb21wKVxuLS1cbmRyaXZlcnMvYmxvY2svenJhbS96Y29tcC5jLTIzMi1cbmRyaXZlcnMvYmxvY2svenJhbS96Y29tcC5jOjIzMzpzdHJ1Y3QgemNvbXAgKnpjb21wX2NyZWF0ZShjb25zdCBjaGFyICphbGcsIHN0cnVjdCB6Y29tcF9wYXJhbXMgKnBhcmFtcylcbmRyaXZlcnMvYmxvY2svenJhbS96Y29tcC5jLTIzNC17XG4tLVxuZHJpdmVycy9ibG9jay96cmFtL3pjb21wLmg9ODM9Y29uc3QgY2hhciAqemNvbXBfbG9va3VwX2JhY2tlbmRfbmFtZShjb25zdCBjaGFyICpjb21wKTtcbmRyaXZlcnMvYmxvY2svenJhbS96Y29tcC5oLTg0LVxuZHJpdmVycy9ibG9jay96cmFtL3pjb21wLmg6ODU6c3RydWN0IHpjb21wICp6Y29tcF9jcmVhdGUoY29uc3QgY2hhciAqYWxnLCBzdHJ1Y3QgemNvbXBfcGFyYW1zICpwYXJhbXMpO1xuZHJpdmVycy9ibG9jay96cmFtL3pjb21wLmgtODYtdm9pZCB6Y29tcF9kZXN0cm95KHN0cnVjdCB6Y29tcCAqY29tcCk7XG4tLVxuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmM9Mjg1OT1zdGF0aWMgc3NpemVfdCBkaXNrc2l6ZV9zdG9yZShzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLFxuLS1cbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jLTI4ODUtXG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYzoyODg2Olx0XHRjb21wID0gemNvbXBfY3JlYXRlKHpyYW0tXHUwMDNlY29tcF9hbGdzW3ByaW9dLFxuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmMtMjg4Ny1cdFx0XHRcdCAgICBcdTAwMjZ6cmFtLVx1MDAzZXBhcmFtc1twcmlvXSk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMwIDEwOjAxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE3NjM0CgkJCQkJCQlvdXRwdXQ6IDE1NgoJCQkJCQkJdGhvdWdodHM6IDkwMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipGdXp6aW5nIFRhcmdldCBJZGVudGlmaWNhdGlvbjogWlJBTSBEZWZsYXRlIEJhY2tlbmQqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gTXkgZ29hbCBpcyB0byBkZXRlcm1pbmUgdGhlIGJlc3QgYXBwcm9hY2ggZm9yIGZ1enppbmcgdGhlIFpSQU0gZGVmbGF0ZSBiYWNrZW5kLgoKRmlyc3QsIEkmIzM5O20gbm90aW5nIHRoYXQgYHpjb21wX2NyZWF0ZWAgaXMgbm9uLXN0YXRpYywgd2hpbGUgYHpyYW1fcmVzZXRfZGV2aWNlYCwgYHpjb21wX2luaXRgLCBhbmQgYGRlZmxhdGVfc2V0dXBfcGFyYW1zYCBhcmUgc3RhdGljLiBUaGlzIGltbWVkaWF0ZWx5IHBvaW50cyBtZSB0b3dhcmRzIGZ1bmN0aW9ucyB0aGF0IG1pZ2h0IGJlIG1vcmUgcmVhZGlseSBhY2Nlc3NpYmxlIHZpYSBleHRlcm5hbCBpbnRlcmZhY2VzLgoKSSYjMzk7bSBtYWtpbmcgYSBsaXN0OiBJIG5lZWQgdG8gY29uc2lkZXIgYHpjb21wX2NyZWF0ZWAgYW5kIGl0cyBjb3VudGVycGFydCBgemNvbXBfZGVzdHJveWAuIFRoZW4sIHRoaW5raW5nIGFib3V0IGhvdyBzeXprYWxsZXIgb3BlcmF0ZXPigJRpbnRlcmFjdGluZyB3aXRoIHN5c2ZzLCBuYW1lbHkgYnkgb3BlbmluZyBhbmQgd3JpdGluZyB0byBmaWxlc+KAlEkgcmVhbGl6ZSB0aGF0IGV2ZW4gaWYgZnVuY3Rpb25zIGxpa2UgYGRpc2tzaXplX3N0b3JlYCwgYGFsZ29yaXRobV9wYXJhbXNfc3RvcmVgLCBhbmQgYHJlc2V0X3N0b3JlYCBhcmUgKnN0YXRpYyosIHRoZXkgYXJlIHRoZSBlbnRyeSBwb2ludHMgdGhhdCBoYW5kbGUgaW5wdXQgZGF0YS4gVGhleSYjMzk7cmUgY3JpdGljYWwuCgpTbywgaGVyZSYjMzk7cyBteSB1cGRhdGVkIGxpc3Qgb2YgZnVuY3Rpb25zIHRvIHRhcmdldDoKCiogICBgemNvbXBfY3JlYXRlYAoqICAgYGRpc2tzaXplX3N0b3JlYAoqICAgYGFsZ29yaXRobV9wYXJhbXNfc3RvcmVgCiogICBgcmVzZXRfc3RvcmVgCiogICBgenJhbV9yZXNldF9kZXZpY2VgCiogICBgenJhbV9kZXN0cm95X2NvbXBzYAoqICAgYGRlZmxhdGVfc2V0dXBfcGFyYW1zYAoKSSYjMzk7bSBkb3VibGUtY2hlY2tpbmcgdGhlIHN0YXRpYyBuYXR1cmUgb2YgYHpyYW1fZGVzdHJveV9jb21wc2AgYW5kIGBkZWZsYXRlX3NldHVwX3BhcmFtc2AgZm9yIGNvbmZpcm1hdGlvbiwganVzdCB0byBiZSBzdXJlLgoKTm93LCBsZXQmIzM5O3MgaWRlbnRpZnkgdGhlIHJlcXVpcmVkIGtlcm5lbCBjb25maWdzLiBXZSBkZWZpbml0ZWx5IG5lZWQgYFpSQU1gIGFuZCBgWlJBTV9CQUNLRU5EX0RFRkxBVEVgLiBJJiMzOTttIGNvbmZpcm1pbmcgdGhhdCB0aGVyZSBhcmVuJiMzOTt0IGFueSBvdGhlciBkZXBlbmRlbmNpZXMgdGhhdCBtaWdodCBiZSByZWxldmFudDsgYFpSQU1gIGRlcGVuZHMgb24gYEJMT0NLICZhbXA7JmFtcDsgU1lTRlMgJmFtcDsmYW1wOyBNTVVgIGFuZCBgWlJBTV9CQUNLRU5EX0RFRkxBVEVgIGRlcGVuZHMgb24gYFpSQU1gLiBUaGF0IHNlZW1zIHN0cmFpZ2h0Zm9yd2FyZC4gVGhlbiBjb25maXJtaW5nIHRoYXQgYFpSQU1fQkFDS0VORF9ERUZMQVRFYCBlbmFibGVzIHRoZSBkZWZsYXRlIGJhY2tlbmQsIHdoaWNoIGlzIGV4YWN0bHkgd2hhdCBJIGV4cGVjdC4KCk9rYXksIGxldCYjMzk7cyBhbmFseXplIHRoZSByZWxldmFudCBjb2RlIGNoYW5nZXMgaW4gYHpyYW1fZHJ2LmNgLiBUaGUgZGlmZiBzaG93cyB0aGF0IGBjb21wX2FsZ29yaXRobV9zZXRgIGhhcyBiZWVuIG1vdmVkIGZyb20gYHpyYW1fcmVzZXRfZGV2aWNlYCB0byBgenJhbV9kZXN0cm95X2NvbXBzYC4gVGhhdCYjMzk7cyBpbXBvcnRhbnQuIGB6cmFtX2Rlc3Ryb3lfY29tcHNgIGlzIGNhbGxlZCBmcm9tIGB6cmFtX3Jlc2V0X2RldmljZWAgYW5kIGFsc28sIGltcG9ydGFudGx5LCBmcm9tIGBkaXNrc2l6ZV9zdG9yZWAgaW4gY2FzZSBvZiBhbiBlcnJvci4gVGhpcyBtZWFucyB0aGF0LCBhZnRlciBhbiBlcnJvciBpbiBgZGlza3NpemVfc3RvcmVgLCB0aGUgYWxnb3JpdGhtIHdpbGwgYmUgcmVzZXQgdG8gYGRlZmF1bHRfY29tcHJlc3NvcmAuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSwgYW5kIGZ1bmN0aW9uYWwgY2hhbmdlcyBvZnRlbiBpbnRyb2R1Y2UgbmV3IGJ1Z3MuCgpUaGUgY29kZSBjaGFuZ2VzIGluZGljYXRlIHRoYXQgdGhlc2UgYXJlIGRlZmluaXRlbHkgd29ydGggZnV6emluZy4KCk15IHN0cmF0ZWd5IGlzIHRvIHNldDoKYFdvcnRoRnV6emluZzogdHJ1ZWAKYEZvY3VzU3ltYm9sc2A6IHdoaWNoIHdpbGwgYmUgdGhlIGxpc3QgYWJvdmUuCmBFbmFibGVDb25maWdzYDogd2hpY2ggYXJlIGBaUkFNYCBhbmQgYFpSQU1fQkFDS0VORF9ERUZMQVRFYAoKRmluYWxseSwgYSBxdWljayB2ZXJpZmljYXRpb24gb2YgdGhlIGZ1bmN0aW9uIG5hbWVzIHRvIGVuc3VyZSB0aGV5JiMzOTtyZSBleGFjdGx5IGFzIGV4cGVjdGVkOiBjb25maXJtaW5nIGBkZWZsYXRlX3NldHVwX3BhcmFtc2AsIGB6cmFtX2Rlc3Ryb3lfY29tcHNgLCBgZGlza3NpemVfc3RvcmVgLCBgYWxnb3JpdGhtX3BhcmFtc19zdG9yZWAsIGFuZCBgcmVzZXRfc3RvcmVgLiBBbGwgY29uZmlybWVkLgpUaW1lIHRvIGNhbGwgYHNldC1yZXN1bHRzYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzAgMTA6MDE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1pSQU0mIzM0OywKICAgICYjMzQ7WlJBTV9CQUNLRU5EX0RFRkxBVEUmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDt6Y29tcF9jcmVhdGUmIzM0OywKICAgICYjMzQ7ZGlza3NpemVfc3RvcmUmIzM0OywKICAgICYjMzQ7YWxnb3JpdGhtX3BhcmFtc19zdG9yZSYjMzQ7LAogICAgJiMzNDtyZXNldF9zdG9yZSYjMzQ7LAogICAgJiMzNDt6cmFtX2Rlc3Ryb3lfY29tcHMmIzM0OywKICAgICYjMzQ7ZGVmbGF0ZV9zZXR1cF9wYXJhbXMmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcyB2YWxpZGF0aW9uIGZvciB0aGUgZGVmbGF0ZSB3aW5iaXRzIHBhcmFtZXRlciBhbmQgY2hhbmdlcyB0aGUgYmVoYXZpb3Igb2YgenJhbV9kZXN0cm95X2NvbXBzIHRvIHJlc2V0IHRoZSBjb21wcmVzc2lvbiBhbGdvcml0aG0uIFRoZXNlIGFyZSBmdW5jdGlvbmFsIGNoYW5nZXMgaW4gdGhlIHpyYW0gZHJpdmVyIHRoYXQgYXJlIHJlYWNoYWJsZSB2aWEgc3lzZnMgYXR0cmlidXRlcyAoZS5nLiwgZGlza3NpemUsIGFsZ29yaXRobV9wYXJhbXMsIHJlc2V0KSBhbmQgc2hvdWxkIGJlIGZ1enplZC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7WlJBTSYjMzQ7LAogICAgJiMzNDtaUkFNX0JBQ0tFTkRfREVGTEFURSYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3pjb21wX2NyZWF0ZSYjMzQ7LAogICAgJiMzNDtkaXNrc2l6ZV9zdG9yZSYjMzQ7LAogICAgJiMzNDthbGdvcml0aG1fcGFyYW1zX3N0b3JlJiMzNDssCiAgICAmIzM0O3Jlc2V0X3N0b3JlJiMzNDssCiAgICAmIzM0O3pyYW1fZGVzdHJveV9jb21wcyYjMzQ7LAogICAgJiMzNDtkZWZsYXRlX3NldHVwX3BhcmFtcyYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRzIHZhbGlkYXRpb24gZm9yIHRoZSBkZWZsYXRlIHdpbmJpdHMgcGFyYW1ldGVyIGFuZCBjaGFuZ2VzIHRoZSBiZWhhdmlvciBvZiB6cmFtX2Rlc3Ryb3lfY29tcHMgdG8gcmVzZXQgdGhlIGNvbXByZXNzaW9uIGFsZ29yaXRobS4gVGhlc2UgYXJlIGZ1bmN0aW9uYWwgY2hhbmdlcyBpbiB0aGUgenJhbSBkcml2ZXIgdGhhdCBhcmUgcmVhY2hhYmxlIHZpYSBzeXNmcyBhdHRyaWJ1dGVzIChlLmcuLCBkaXNrc2l6ZSwgYWxnb3JpdGhtX3BhcmFtcywgcmVzZXQpIGFuZCBzaG91bGQgYmUgZnV6emVkLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDctMzBUMTA6MDA6MjcuNzUzNzA1OTI5WiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzMzMDkzMzIyODYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiWlJBTVwiLFxuICAgIFwiWlJBTV9CQUNLRU5EX0RFRkxBVEVcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJ6Y29tcF9jcmVhdGVcIixcbiAgICBcImRpc2tzaXplX3N0b3JlXCIsXG4gICAgXCJhbGdvcml0aG1fcGFyYW1zX3N0b3JlXCIsXG4gICAgXCJyZXNldF9zdG9yZVwiLFxuICAgIFwienJhbV9kZXN0cm95X2NvbXBzXCIsXG4gICAgXCJkZWZsYXRlX3NldHVwX3BhcmFtc1wiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHMgdmFsaWRhdGlvbiBmb3IgdGhlIGRlZmxhdGUgd2luYml0cyBwYXJhbWV0ZXIgYW5kIGNoYW5nZXMgdGhlIGJlaGF2aW9yIG9mIHpyYW1fZGVzdHJveV9jb21wcyB0byByZXNldCB0aGUgY29tcHJlc3Npb24gYWxnb3JpdGhtLiBUaGVzZSBhcmUgZnVuY3Rpb25hbCBjaGFuZ2VzIGluIHRoZSB6cmFtIGRyaXZlciB0aGF0IGFyZSByZWFjaGFibGUgdmlhIHN5c2ZzIGF0dHJpYnV0ZXMgKGUuZy4sIGRpc2tzaXplLCBhbGdvcml0aG1fcGFyYW1zLCByZXNldCkgYW5kIHNob3VsZCBiZSBmdXp6ZWQuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMwVDEwOjAwOjI3Ljc1MzcxMDAwOVoiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MzA3MzAzNTczLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgNTE0ZWQ4ZWEzM2E2NGU5NTRkOWVlMTE0MjNhNjNiYzQ5ZjRhMDMyNlxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgVGh1IEp1bCAzMCAxMDowMDoyNyAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL2Jsb2NrL3pyYW0vYmFja2VuZF9kZWZsYXRlLmMgYi9kcml2ZXJzL2Jsb2NrL3pyYW0vYmFja2VuZF9kZWZsYXRlLmNcXG5pbmRleCBmOTJhNTJhNzIwZDFlLi43MjlhYzczNGRkNmMxIDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvYmxvY2svenJhbS9iYWNrZW5kX2RlZmxhdGUuY1xcbisrKyBiL2RyaXZlcnMvYmxvY2svenJhbS9iYWNrZW5kX2RlZmxhdGUuY1xcbkBAIC0yNCw4ICsyNCwxNCBAQCBzdGF0aWMgaW50IGRlZmxhdGVfc2V0dXBfcGFyYW1zKHN0cnVjdCB6Y29tcF9wYXJhbXMgKnBhcmFtcylcXG4ge1xcbiBcXHRpZiAocGFyYW1zLVxcdTAwM2VsZXZlbCA9PSBaQ09NUF9QQVJBTV9OT1RfU0VUKVxcbiBcXHRcXHRwYXJhbXMtXFx1MDAzZWxldmVsID0gWl9ERUZBVUxUX0NPTVBSRVNTSU9OO1xcbi1cXHRpZiAocGFyYW1zLVxcdTAwM2VkZWZsYXRlLndpbmJpdHMgPT0gWkNPTVBfUEFSQU1fTk9UX1NFVClcXG4rXFx0aWYgKHBhcmFtcy1cXHUwMDNlZGVmbGF0ZS53aW5iaXRzID09IFpDT01QX1BBUkFNX05PVF9TRVQpIHtcXG4gXFx0XFx0cGFyYW1zLVxcdTAwM2VkZWZsYXRlLndpbmJpdHMgPSBERUZMQVRFX0RFRl9XSU5CSVRTO1xcbitcXHR9IGVsc2Uge1xcbitcXHRcXHRzMzIgd2IgPSBwYXJhbXMtXFx1MDAzZWRlZmxhdGUud2luYml0cztcXG4rXFxuK1xcdFxcdGlmICgod2IgXFx1MDAzYyAtMTUgfHwgd2IgXFx1MDAzZSAtOSkgXFx1MDAyNlxcdTAwMjYgKHdiIFxcdTAwM2MgOSB8fCB3YiBcXHUwMDNlIDE1KSlcXG4rXFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuK1xcdH1cXG4gXFxuIFxcdHJldHVybiAwO1xcbiB9XFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jIGIvZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmNcXG5pbmRleCBhY2U2NWM1ODYwNzJiLi5lYmUyZGE5NTUxODJmIDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jXFxuKysrIGIvZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmNcXG5AQCAtMjgzNiw2ICsyODM2LDcgQEAgc3RhdGljIHZvaWQgenJhbV9kZXN0cm95X2NvbXBzKHN0cnVjdCB6cmFtICp6cmFtKVxcbiBcXHRcXHR6cmFtLVxcdTAwM2Vjb21wX2FsZ3NbcHJpb10gPSBOVUxMO1xcbiBcXG4gXFx0enJhbV9jb21wX3BhcmFtc19yZXNldCh6cmFtKTtcXG4rXFx0Y29tcF9hbGdvcml0aG1fc2V0KHpyYW0sIFpSQU1fUFJJTUFSWV9DT01QLCBkZWZhdWx0X2NvbXByZXNzb3IpO1xcbiB9XFxuIFxcbiBzdGF0aWMgdm9pZCB6cmFtX3Jlc2V0X2RldmljZShzdHJ1Y3QgenJhbSAqenJhbSlcXG5AQCAtMjg1Myw4ICsyODU0LDYgQEAgc3RhdGljIHZvaWQgenJhbV9yZXNldF9kZXZpY2Uoc3RydWN0IHpyYW0gKnpyYW0pXFxuIFxcdHpyYW1fZGVzdHJveV9jb21wcyh6cmFtKTtcXG4gXFx0bWVtc2V0KFxcdTAwMjZ6cmFtLVxcdTAwM2VzdGF0cywgMCwgc2l6ZW9mKHpyYW0tXFx1MDAzZXN0YXRzKSk7XFxuIFxcdHJlc2V0X2JkZXYoenJhbSk7XFxuLVxcbi1cXHRjb21wX2FsZ29yaXRobV9zZXQoenJhbSwgWlJBTV9QUklNQVJZX0NPTVAsIGRlZmF1bHRfY29tcHJlc3Nvcik7XFxuIH1cXG4gXFxuIHN0YXRpYyBzc2l6ZV90IGRpc2tzaXplX3N0b3JlKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMwVDEwOjAwOjI4LjA2MTY3ODE1MloiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImJlc3QtZXhwZW5zaXZlIiwiRHVyYXRpb24iOjczMDAxMzUxOTAzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIlpSQU1cIixcbiAgICBcIlpSQU1fQkFDS0VORF9ERUZMQVRFXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiemNvbXBfY3JlYXRlXCIsXG4gICAgXCJkaXNrc2l6ZV9zdG9yZVwiLFxuICAgIFwiYWxnb3JpdGhtX3BhcmFtc19zdG9yZVwiLFxuICAgIFwicmVzZXRfc3RvcmVcIixcbiAgICBcInpyYW1fZGVzdHJveV9jb21wc1wiLFxuICAgIFwiZGVmbGF0ZV9zZXR1cF9wYXJhbXNcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRzIHZhbGlkYXRpb24gZm9yIHRoZSBkZWZsYXRlIHdpbmJpdHMgcGFyYW1ldGVyIGFuZCBjaGFuZ2VzIHRoZSBiZWhhdmlvciBvZiB6cmFtX2Rlc3Ryb3lfY29tcHMgdG8gcmVzZXQgdGhlIGNvbXByZXNzaW9uIGFsZ29yaXRobS4gVGhlc2UgYXJlIGZ1bmN0aW9uYWwgY2hhbmdlcyBpbiB0aGUgenJhbSBkcml2ZXIgdGhhdCBhcmUgcmVhY2hhYmxlIHZpYSBzeXNmcyBhdHRyaWJ1dGVzIChlLmcuLCBkaXNrc2l6ZSwgYWxnb3JpdGhtX3BhcmFtcywgcmVzZXQpIGFuZCBzaG91bGQgYmUgZnV6emVkLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lXG5pZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5XG51c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLlxuXG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOlxuLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLlxuLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy5cbi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LlxuLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsXG4gIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cbi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsXG4gIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLlxuLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKVxuICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuXG5cbklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2hcbnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlxuXG5XaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzpcbjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuXG4gICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy5cbiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9uc1xuICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuXG4yLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS5cbiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbiAgIEFsc28gY2hlY2sgXCJkZXBlbmRzIG9uXCIgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzXG4gICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3NcbiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCA1MTRlZDhlYTMzYTY0ZTk1NGQ5ZWUxMTQyM2E2M2JjNDlmNGEwMzI2XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFRodSBKdWwgMzAgMTA6MDA6MjcgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9kcml2ZXJzL2Jsb2NrL3pyYW0vYmFja2VuZF9kZWZsYXRlLmMgYi9kcml2ZXJzL2Jsb2NrL3pyYW0vYmFja2VuZF9kZWZsYXRlLmNcbmluZGV4IGY5MmE1MmE3MjBkMWUuLjcyOWFjNzM0ZGQ2YzEgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL2Jsb2NrL3pyYW0vYmFja2VuZF9kZWZsYXRlLmNcbisrKyBiL2RyaXZlcnMvYmxvY2svenJhbS9iYWNrZW5kX2RlZmxhdGUuY1xuQEAgLTI0LDggKzI0LDE0IEBAIHN0YXRpYyBpbnQgZGVmbGF0ZV9zZXR1cF9wYXJhbXMoc3RydWN0IHpjb21wX3BhcmFtcyAqcGFyYW1zKVxuIHtcbiBcdGlmIChwYXJhbXMtXHUwMDNlbGV2ZWwgPT0gWkNPTVBfUEFSQU1fTk9UX1NFVClcbiBcdFx0cGFyYW1zLVx1MDAzZWxldmVsID0gWl9ERUZBVUxUX0NPTVBSRVNTSU9OO1xuLVx0aWYgKHBhcmFtcy1cdTAwM2VkZWZsYXRlLndpbmJpdHMgPT0gWkNPTVBfUEFSQU1fTk9UX1NFVClcbitcdGlmIChwYXJhbXMtXHUwMDNlZGVmbGF0ZS53aW5iaXRzID09IFpDT01QX1BBUkFNX05PVF9TRVQpIHtcbiBcdFx0cGFyYW1zLVx1MDAzZWRlZmxhdGUud2luYml0cyA9IERFRkxBVEVfREVGX1dJTkJJVFM7XG4rXHR9IGVsc2Uge1xuK1x0XHRzMzIgd2IgPSBwYXJhbXMtXHUwMDNlZGVmbGF0ZS53aW5iaXRzO1xuK1xuK1x0XHRpZiAoKHdiIFx1MDAzYyAtMTUgfHwgd2IgXHUwMDNlIC05KSBcdTAwMjZcdTAwMjYgKHdiIFx1MDAzYyA5IHx8IHdiIFx1MDAzZSAxNSkpXG4rXHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4rXHR9XG4gXG4gXHRyZXR1cm4gMDtcbiB9XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmMgYi9kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuY1xuaW5kZXggYWNlNjVjNTg2MDcyYi4uZWJlMmRhOTU1MTgyZiAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jXG4rKysgYi9kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuY1xuQEAgLTI4MzYsNiArMjgzNiw3IEBAIHN0YXRpYyB2b2lkIHpyYW1fZGVzdHJveV9jb21wcyhzdHJ1Y3QgenJhbSAqenJhbSlcbiBcdFx0enJhbS1cdTAwM2Vjb21wX2FsZ3NbcHJpb10gPSBOVUxMO1xuIFxuIFx0enJhbV9jb21wX3BhcmFtc19yZXNldCh6cmFtKTtcbitcdGNvbXBfYWxnb3JpdGhtX3NldCh6cmFtLCBaUkFNX1BSSU1BUllfQ09NUCwgZGVmYXVsdF9jb21wcmVzc29yKTtcbiB9XG4gXG4gc3RhdGljIHZvaWQgenJhbV9yZXNldF9kZXZpY2Uoc3RydWN0IHpyYW0gKnpyYW0pXG5AQCAtMjg1Myw4ICsyODU0LDYgQEAgc3RhdGljIHZvaWQgenJhbV9yZXNldF9kZXZpY2Uoc3RydWN0IHpyYW0gKnpyYW0pXG4gXHR6cmFtX2Rlc3Ryb3lfY29tcHMoenJhbSk7XG4gXHRtZW1zZXQoXHUwMDI2enJhbS1cdTAwM2VzdGF0cywgMCwgc2l6ZW9mKHpyYW0tXHUwMDNlc3RhdHMpKTtcbiBcdHJlc2V0X2JkZXYoenJhbSk7XG4tXG4tXHRjb21wX2FsZ29yaXRobV9zZXQoenJhbSwgWlJBTV9QUklNQVJZX0NPTVAsIGRlZmF1bHRfY29tcHJlc3Nvcik7XG4gfVxuIFxuIHN0YXRpYyBzc2l6ZV90IGRpc2tzaXplX3N0b3JlKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsXG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0zMFQxMDowMDoyOC4wNjE2NzkyODJaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1MDA5OTEzNTA0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgWlJBTSBQYXRjaCoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggdGhhdCB0b3VjaGVzIGBkcml2ZXJzL2Jsb2NrL3pyYW0vYmFja2VuZF9kZWZsYXRlLmNgIGFuZCBgZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmNgLiBGcm9tIHdoYXQgSSBnYXRoZXIsIHRoZSBmaXJzdCBwYXJ0IGlzIGFkZGluZyBzb21lIHZhbGlkYXRpb24gZm9yIGBwYXJhbXMtXHUwMDNlZGVmbGF0ZS53aW5iaXRzYCBpbiB0aGUgZGVmbGF0ZSBiYWNrZW5kLiBTZWVtcyBzdHJhaWdodGZvcndhcmQgZW5vdWdoOyBtYWtpbmcgc3VyZSB0aGUgd2luZG93IHNpemUgaXMgcmVhc29uYWJsZSBpcyBhIGdvb2QgcHJhY3RpY2UuXG5cbk5vdywgdGhlIG1vcmUgaW50ZXJlc3RpbmcgYml0IGlzIHRoZSBjaGFuZ2UgaW4gYHpyYW1fZHJ2LmNgLiBJdCBsb29rcyBsaWtlIHRoZXkncmUgbW92aW5nIGBjb21wX2FsZ29yaXRobV9zZXQoenJhbSwgWlJBTV9QUklNQVJZX0NPTVAsIGRlZmF1bHRfY29tcHJlc3Nvcik7YCBmcm9tIGB6cmFtX3Jlc2V0X2RldmljZWAgdG8gYHpyYW1fZGVzdHJveV9jb21wc2AuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoeS4gSXQgc2VlbXMgbGlrZSBhIGNoYW5nZSBpbiBpbml0aWFsaXphdGlvbiBvciBjbGVhbnVwLiBMZXQncyBkaWcgaW50byB0aGF0Li4uXG5cbkZpcnN0IHRoaW5ncyBmaXJzdCwgSSdsbCByZWZyZXNoIG15IG1lbW9yeSBvZiB0aGUgY29udHJvbCBmbG93IGhlcmUuIExldCdzIHNlZSwgYHpyYW1fZGVzdHJveV9jb21wc2AgaXMgY2FsbGVkIGZyb20gYHpyYW1fcmVzZXRfZGV2aWNlYCwgd2hpY2ggaXMgYSBrZXkgcGFydCBvZiB0aGUgWlJBTSBsaWZlY3ljbGUuIFdhaXQgYSBzZWNvbmQsIHdhc24ndCBgenJhbV9kZXN0cm95X2NvbXBzYCBjYWxsZWQgZnJvbSBzb21ld2hlcmUgZWxzZSB0b28/IEkgdGhpbmsgaXQgd2FzIGFsc28gY2FsbGVkIGZyb20gYHpyYW1fcmVtb3ZlYC4gSSBzaG91bGQgcXVpY2tseSB2ZXJpZnkgdGhhdCwganVzdCB0byBtYWtlIHN1cmUgbXkgdW5kZXJzdGFuZGluZyBpcyBzb2xpZC5cblxuXG4iLCJJbnB1dFRva2VucyI6MjQ4NywiT3V0cHV0VG9rZW5zIjozMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE4MywiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMwVDEwOjAwOjMzLjA3MTU5NDc2NloiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMDI5ODAyMjgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwienJhbV9kZXN0cm95X2NvbXBzXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvYmxvY2svenJhbS9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmM9MjgxMz1zdGF0aWMgdm9pZCB6cmFtX2NvbXBfcGFyYW1zX3Jlc2V0KHN0cnVjdCB6cmFtICp6cmFtKVxcbi0tXFxuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmMtMjgyMS1cXG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYzoyODIyOnN0YXRpYyB2b2lkIHpyYW1fZGVzdHJveV9jb21wcyhzdHJ1Y3QgenJhbSAqenJhbSlcXG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYy0yODIzLXtcXG4tLVxcbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jPTI4NDI9c3RhdGljIHZvaWQgenJhbV9yZXNldF9kZXZpY2Uoc3RydWN0IHpyYW0gKnpyYW0pXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYy0yODUzLVxcdHpyYW0tXFx1MDAzZWRpc2tzaXplID0gMDtcXG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYzoyODU0OlxcdHpyYW1fZGVzdHJveV9jb21wcyh6cmFtKTtcXG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYy0yODU1LVxcdG1lbXNldChcXHUwMDI2enJhbS1cXHUwMDNlc3RhdHMsIDAsIHNpemVvZih6cmFtLVxcdTAwM2VzdGF0cykpO1xcbi0tXFxuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmM9Mjg1OT1zdGF0aWMgc3NpemVfdCBkaXNrc2l6ZV9zdG9yZShzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLFxcbi0tXFxuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmMtMjkwMi1vdXRfZnJlZV9jb21wczpcXG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYzoyOTAzOlxcdHpyYW1fZGVzdHJveV9jb21wcyh6cmFtKTtcXG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYy0yOTA0LVxcdHpyYW1fbWV0YV9mcmVlKHpyYW0sIGRpc2tzaXplKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMzBUMTA6MDA6MzMuMTc0NTc5NDg0WiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDE5NDkzNDM2NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLlxuXG4qKkFuYWx5emluZyBFcnJvciBIYW5kbGluZyBpbiB6cmFtIERpc2sgU2l6ZSBDb25maWd1cmF0aW9uKipcblxuUmlnaHQsIHNvIEknbSBsb29raW5nIGF0IHRoZSBgenJhbWAgY29kZSwgc3BlY2lmaWNhbGx5IGhvdyBpdCBoYW5kbGVzIGVycm9ycyB3aGVuIHNldHRpbmcgdGhlIGRpc2sgc2l6ZS4gSSBzZWUgdGhhdCBgenJhbV9kZXN0cm95X2NvbXBzYCBpcyB0cmlnZ2VyZWQgZnJvbSBgZGlza3NpemVfc3RvcmVgIGluIHRoZSBldmVudCBvZiBhbiBlcnJvciwgc3BlY2lmaWNhbGx5IGF0IHRoYXQgYG91dF9mcmVlX2NvbXBzYCBwb2ludC4gQ3VycmVudGx5LCB0aGlzIG1lYW5zIGlmIHRoZXJlJ3MgYW4gaXNzdWUgZHVyaW5nIGEgZGlzayBzaXplIG9wZXJhdGlvbiwgd2UgY2xlYW4gdXAgY29tcHJlc3Npb24gY29tcG9uZW50cy5cblxuVGhlIGludGVyZXN0aW5nIGJpdCBpcyB0aGlzIHByb3Bvc2VkIGNoYW5nZS4gTW92aW5nIGBjb21wX2FsZ29yaXRobV9zZXRgIGludG8gYHpyYW1fZGVzdHJveV9jb21wc2AgbWVhbnMgdGhhdCB0aGUgY29tcHJlc3Npb24gYWxnb3JpdGhtIHNldHVwIHdpbGwgKmFsc28qIGJlIGNsZWFuZWQgdXAgb24gdGhlIGVycm9yIHBhdGggd2l0aGluIGBkaXNrc2l6ZV9zdG9yZWAuIFRoYXTigJlzIHNpZ25pZmljYW50LCBiZWNhdXNlIGl0IGVuc3VyZXMgYSBjb25zaXN0ZW50IGNsZWFudXAsIG5vIG1hdHRlciB3aGF0IHdlbnQgd3Jvbmcgd2hlbiBzZXR0aW5nIHRoZSBkaXNrIHNpemUuIE1ha2VzIHNlbnNlLCBpdCBrZWVwcyBldmVyeXRoaW5nIGluIHN5bmMuIFRoaXMgaXMgaW1wb3J0YW50IHRvIGNvbnNpZGVyIGFzIGl0IGNvdWxkIHByb3ZpZGUgY29uc2lzdGVudCBmYWlsdXJlIHN0YXRlcy5cblxuTm93LCBJIHNob3VsZCBxdWlja2x5IGNoZWNrIGBkZWZsYXRlX3NldHVwX3BhcmFtc2AgdG8gbWFrZSBzdXJlIHRoaXMgY2hhbmdlIGRvZXNuJ3QgaW5hZHZlcnRlbnRseSBpbXBhY3QgaG93IHdlIGNvbmZpZ3VyZSB0aGUgZGVmbGF0ZSBjb21wcmVzc2lvbi4gSXTigJlzIGFsd2F5cyBnb29kIHRvIGJlIHRob3JvdWdoIVxuXG5cbiIsIklucHV0VG9rZW5zIjozMzkyLCJPdXRwdXRUb2tlbnMiOjMzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NzYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMzBUMTA6MDA6MzcuMzY5NTE2NjE4WiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjY5MjMwNTM1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImRlZmxhdGVfc2V0dXBfcGFyYW1zXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvYmxvY2svenJhbS9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9ibG9jay96cmFtL2JhY2tlbmRfZGVmbGF0ZS5jPTE5PXN0YXRpYyB2b2lkIGRlZmxhdGVfcmVsZWFzZV9wYXJhbXMoc3RydWN0IHpjb21wX3BhcmFtcyAqcGFyYW1zKVxcbi0tXFxuZHJpdmVycy9ibG9jay96cmFtL2JhY2tlbmRfZGVmbGF0ZS5jLTIyLVxcbmRyaXZlcnMvYmxvY2svenJhbS9iYWNrZW5kX2RlZmxhdGUuYzoyMzpzdGF0aWMgaW50IGRlZmxhdGVfc2V0dXBfcGFyYW1zKHN0cnVjdCB6Y29tcF9wYXJhbXMgKnBhcmFtcylcXG5kcml2ZXJzL2Jsb2NrL3pyYW0vYmFja2VuZF9kZWZsYXRlLmMtMjQte1xcbi0tXFxuZHJpdmVycy9ibG9jay96cmFtL2JhY2tlbmRfZGVmbGF0ZS5jPTE0Nj1jb25zdCBzdHJ1Y3QgemNvbXBfb3BzIGJhY2tlbmRfZGVmbGF0ZSA9IHtcXG4tLVxcbmRyaXZlcnMvYmxvY2svenJhbS9iYWNrZW5kX2RlZmxhdGUuYy0xNTAtXFx0LmRlc3Ryb3lfY3R4XFx0PSBkZWZsYXRlX2Rlc3Ryb3ksXFxuZHJpdmVycy9ibG9jay96cmFtL2JhY2tlbmRfZGVmbGF0ZS5jOjE1MTpcXHQuc2V0dXBfcGFyYW1zXFx0PSBkZWZsYXRlX3NldHVwX3BhcmFtcyxcXG5kcml2ZXJzL2Jsb2NrL3pyYW0vYmFja2VuZF9kZWZsYXRlLmMtMTUyLVxcdC5yZWxlYXNlX3BhcmFtc1xcdD0gZGVmbGF0ZV9yZWxlYXNlX3BhcmFtcyxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMzBUMTA6MDA6MzcuNDM4NzYwODgzWiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Mjk4NjA2ODExNSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBhbiBleHBlcnQncyBpbnRlcm5hbCBtb25vbG9ndWU6XG5cbioqQ2hlY2tpbmcgYHpjb21wX29wc2AgYW5kIGBzZXR1cF9wYXJhbXNgKipcblxuQWxyaWdodCwgYmVmb3JlIGRpdmluZyBpbnRvIGFueXRoaW5nIGRlZXBlciwgSSBuZWVkIHRvIGdyb3VuZCBteXNlbGYuIExldCdzIHN0YXJ0IHdpdGggYSBxdWljayBhdWRpdCBvZiBgemNvbXBfb3BzYCBhbmQgYHNldHVwX3BhcmFtc2AuIEkgbmVlZCB0byBlbnN1cmUgdGhlIGNvcmUgb3BlcmF0aW9uYWwgY29tcG9uZW50IG9mIGB6Y29tcF9vcHNgIGlzIGNvcnJlY3RseSBpbml0aWFsaXplZCwgZ2l2ZW4gaXRzIGZ1bmRhbWVudGFsIHJvbGUuIFVuZGVyc3RhbmRpbmcgdGhlIGN1cnJlbnQgY29uZmlndXJhdGlvbiBvZiBgc2V0dXBfcGFyYW1zYCB3aWxsIGdpdmUgbWUgY3JpdGljYWwgaW5zaWdodCBpbnRvIHRoZSBzeXN0ZW0ncyBiYXNlbGluZS4gSXQncyB0b28gZWFzeSB0byBtaXNzIHNvbWV0aGluZyB3aGVuIHlvdSdyZSBkZWVwbHkgaW5ncmFpbmVkLCBzbyBhIGJyaWVmIHJldmlldyBzaG91bGQgcHJvdmlkZSBjbGFyaXR5LiBGcm9tIHRoZXJlLCBJIGNhbiBkZXRlcm1pbmUgd2hlcmUgSSBuZWVkIHRvIGZvY3VzIG15IGF0dGVudGlvbi4gSXQncyBvZnRlbiBiZXN0IHRvIGFkZHJlc3MgcG90ZW50aWFsIHByb2JsZW1zIGF0IHRoZSBzb3VyY2UsIHByZXZlbnRpbmcgbW9yZSBjb21wbGV4IGlzc3VlcyBkb3duIHRoZSBsaW5lLlxuXG5cbiIsIklucHV0VG9rZW5zIjozOTk0LCJPdXRwdXRUb2tlbnMiOjMwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMzBUMTA6MDA6NDAuNDI0ODMwODg4WiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEzNDY1NzU2MSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJzZXR1cF9wYXJhbXNcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9ibG9jay96cmFtL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL2Jsb2NrL3pyYW0vYmFja2VuZF84NDIuYz0xMD1zdGF0aWMgdm9pZCByZWxlYXNlX3BhcmFtc184NDIoc3RydWN0IHpjb21wX3BhcmFtcyAqcGFyYW1zKVxcbi0tXFxuZHJpdmVycy9ibG9jay96cmFtL2JhY2tlbmRfODQyLmMtMTMtXFxuZHJpdmVycy9ibG9jay96cmFtL2JhY2tlbmRfODQyLmM6MTQ6c3RhdGljIGludCBzZXR1cF9wYXJhbXNfODQyKHN0cnVjdCB6Y29tcF9wYXJhbXMgKnBhcmFtcylcXG5kcml2ZXJzL2Jsb2NrL3pyYW0vYmFja2VuZF84NDIuYy0xNS17XFxuLS1cXG5kcml2ZXJzL2Jsb2NrL3pyYW0vYmFja2VuZF84NDIuYz01Mz1jb25zdCBzdHJ1Y3QgemNvbXBfb3BzIGJhY2tlbmRfODQyID0ge1xcbi0tXFxuZHJpdmVycy9ibG9jay96cmFtL2JhY2tlbmRfODQyLmMtNTctXFx0LmRlc3Ryb3lfY3R4XFx0PSBkZXN0cm95Xzg0MixcXG5kcml2ZXJzL2Jsb2NrL3pyYW0vYmFja2VuZF84NDIuYzo1ODpcXHQuc2V0dXBfcGFyYW1zXFx0PSBzZXR1cF9wYXJhbXNfODQyLFxcbmRyaXZlcnMvYmxvY2svenJhbS9iYWNrZW5kXzg0Mi5jLTU5LVxcdC5yZWxlYXNlX3BhcmFtc1xcdD0gcmVsZWFzZV9wYXJhbXNfODQyLFxcbi0tXFxuZHJpdmVycy9ibG9jay96cmFtL2JhY2tlbmRfZGVmbGF0ZS5jPTE5PXN0YXRpYyB2b2lkIGRlZmxhdGVfcmVsZWFzZV9wYXJhbXMoc3RydWN0IHpjb21wX3BhcmFtcyAqcGFyYW1zKVxcbi0tXFxuZHJpdmVycy9ibG9jay96cmFtL2JhY2tlbmRfZGVmbGF0ZS5jLTIyLVxcbmRyaXZlcnMvYmxvY2svenJhbS9iYWNrZW5kX2RlZmxhdGUuYzoyMzpzdGF0aWMgaW50IGRlZmxhdGVfc2V0dXBfcGFyYW1zKHN0cnVjdCB6Y29tcF9wYXJhbXMgKnBhcmFtcylcXG5kcml2ZXJzL2Jsb2NrL3pyYW0vYmFja2VuZF9kZWZsYXRlLmMtMjQte1xcbi0tXFxuZHJpdmVycy9ibG9jay96cmFtL2JhY2tlbmRfZGVmbGF0ZS5jPTE0Nj1jb25zdCBzdHJ1Y3QgemNvbXBfb3BzIGJhY2tlbmRfZGVmbGF0ZSA9IHtcXG4tLVxcbmRyaXZlcnMvYmxvY2svenJhbS9iYWNrZW5kX2RlZmxhdGUuYy0xNTAtXFx0LmRlc3Ryb3lfY3R4XFx0PSBkZWZsYXRlX2Rlc3Ryb3ksXFxuZHJpdmVycy9ibG9jay96cmFtL2JhY2tlbmRfZGVmbGF0ZS5jOjE1MTpcXHQuc2V0dXBfcGFyYW1zXFx0PSBkZWZsYXRlX3NldHVwX3BhcmFtcyxcXG5kcml2ZXJzL2Jsb2NrL3pyYW0vYmFja2VuZF9kZWZsYXRlLmMtMTUyLVxcdC5yZWxlYXNlX3BhcmFtc1xcdD0gZGVmbGF0ZV9yZWxlYXNlX3BhcmFtcyxcXG4tLVxcbmRyaXZlcnMvYmxvY2svenJhbS9iYWNrZW5kX2x6NC5jPTE1PXN0YXRpYyB2b2lkIGx6NF9yZWxlYXNlX3BhcmFtcyhzdHJ1Y3QgemNvbXBfcGFyYW1zICpwYXJhbXMpXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL3pyYW0vYmFja2VuZF9sejQuYy0yNS1cXG5kcml2ZXJzL2Jsb2NrL3pyYW0vYmFja2VuZF9sejQuYzoyNjpzdGF0aWMgaW50IGx6NF9zZXR1cF9wYXJhbXMoc3RydWN0IHpjb21wX3BhcmFtcyAqcGFyYW1zKVxcbmRyaXZlcnMvYmxvY2svenJhbS9iYWNrZW5kX2x6NC5jLTI3LXtcXG4tLVxcbmRyaXZlcnMvYmxvY2svenJhbS9iYWNrZW5kX2x6NC5jPTE0Mj1jb25zdCBzdHJ1Y3QgemNvbXBfb3BzIGJhY2tlbmRfbHo0ID0ge1xcbi0tXFxuZHJpdmVycy9ibG9jay96cmFtL2JhY2tlbmRfbHo0LmMtMTQ2LVxcdC5kZXN0cm95X2N0eFxcdD0gbHo0X2Rlc3Ryb3ksXFxuZHJpdmVycy9ibG9jay96cmFtL2JhY2tlbmRfbHo0LmM6MTQ3OlxcdC5zZXR1cF9wYXJhbXNcXHQ9IGx6NF9zZXR1cF9wYXJhbXMsXFxuZHJpdmVycy9ibG9jay96cmFtL2JhY2tlbmRfbHo0LmMtMTQ4LVxcdC5yZWxlYXNlX3BhcmFtc1xcdD0gbHo0X3JlbGVhc2VfcGFyYW1zLFxcbi0tXFxuZHJpdmVycy9ibG9jay96cmFtL2JhY2tlbmRfbHo0aGMuYz0xNT1zdGF0aWMgdm9pZCBsejRoY19yZWxlYXNlX3BhcmFtcyhzdHJ1Y3QgemNvbXBfcGFyYW1zICpwYXJhbXMpXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL3pyYW0vYmFja2VuZF9sejRoYy5jLTE4LVxcbmRyaXZlcnMvYmxvY2svenJhbS9iYWNrZW5kX2x6NGhjLmM6MTk6c3RhdGljIGludCBsejRoY19zZXR1cF9wYXJhbXMoc3RydWN0IHpjb21wX3BhcmFtcyAqcGFyYW1zKVxcbmRyaXZlcnMvYmxvY2svenJhbS9iYWNrZW5kX2x6NGhjLmMtMjAte1xcbi0tXFxuZHJpdmVycy9ibG9jay96cmFtL2JhY2tlbmRfbHo0aGMuYz0xMjA9Y29uc3Qgc3RydWN0IHpjb21wX29wcyBiYWNrZW5kX2x6NGhjID0ge1xcbi0tXFxuZHJpdmVycy9ibG9jay96cmFtL2JhY2tlbmRfbHo0aGMuYy0xMjQtXFx0LmRlc3Ryb3lfY3R4XFx0PSBsejRoY19kZXN0cm95LFxcbmRyaXZlcnMvYmxvY2svenJhbS9iYWNrZW5kX2x6NGhjLmM6MTI1OlxcdC5zZXR1cF9wYXJhbXNcXHQ9IGx6NGhjX3NldHVwX3BhcmFtcyxcXG5kcml2ZXJzL2Jsb2NrL3pyYW0vYmFja2VuZF9sejRoYy5jLTEyNi1cXHQucmVsZWFzZV9wYXJhbXNcXHQ9IGx6NGhjX3JlbGVhc2VfcGFyYW1zLFxcbi0tXFxuZHJpdmVycy9ibG9jay96cmFtL2JhY2tlbmRfbHpvLmM9OT1zdGF0aWMgdm9pZCBsem9fcmVsZWFzZV9wYXJhbXMoc3RydWN0IHpjb21wX3BhcmFtcyAqcGFyYW1zKVxcbi0tXFxuZHJpdmVycy9ibG9jay96cmFtL2JhY2tlbmRfbHpvLmMtMTItXFxuZHJpdmVycy9ibG9jay96cmFtL2JhY2tlbmRfbHpvLmM6MTM6c3RhdGljIGludCBsem9fc2V0dXBfcGFyYW1zKHN0cnVjdCB6Y29tcF9wYXJhbXMgKnBhcmFtcylcXG5kcml2ZXJzL2Jsb2NrL3pyYW0vYmFja2VuZF9sem8uYy0xNC17XFxuLS1cXG5kcml2ZXJzL2Jsb2NrL3pyYW0vYmFja2VuZF9sem8uYz01MT1jb25zdCBzdHJ1Y3QgemNvbXBfb3BzIGJhY2tlbmRfbHpvID0ge1xcbi0tXFxuZHJpdmVycy9ibG9jay96cmFtL2JhY2tlbmRfbHpvLmMtNTUtXFx0LmRlc3Ryb3lfY3R4XFx0PSBsem9fZGVzdHJveSxcXG5kcml2ZXJzL2Jsb2NrL3pyYW0vYmFja2VuZF9sem8uYzo1NjpcXHQuc2V0dXBfcGFyYW1zXFx0PSBsem9fc2V0dXBfcGFyYW1zLFxcbmRyaXZlcnMvYmxvY2svenJhbS9iYWNrZW5kX2x6by5jLTU3LVxcdC5yZWxlYXNlX3BhcmFtc1xcdD0gbHpvX3JlbGVhc2VfcGFyYW1zLFxcbi0tXFxuZHJpdmVycy9ibG9jay96cmFtL2JhY2tlbmRfbHpvcmxlLmM9OT1zdGF0aWMgdm9pZCBsem9ybGVfcmVsZWFzZV9wYXJhbXMoc3RydWN0IHpjb21wX3BhcmFtcyAqcGFyYW1zKVxcbi0tXFxuZHJpdmVycy9ibG9jay96cmFtL2JhY2tlbmRfbHpvcmxlLmMtMTItXFxuZHJpdmVycy9ibG9jay96cmFtL2JhY2tlbmRfbHpvcmxlLmM6MTM6c3RhdGljIGludCBsem9ybGVfc2V0dXBfcGFyYW1zKHN0cnVjdCB6Y29tcF9wYXJhbXMgKnBhcmFtcylcXG5kcml2ZXJzL2Jsb2NrL3pyYW0vYmFja2VuZF9sem9ybGUuYy0xNC17XFxuLS1cXG5kcml2ZXJzL2Jsb2NrL3pyYW0vYmFja2VuZF9sem9ybGUuYz01MT1jb25zdCBzdHJ1Y3QgemNvbXBfb3BzIGJhY2tlbmRfbHpvcmxlID0ge1xcbi0tXFxuZHJpdmVycy9ibG9jay96cmFtL2JhY2tlbmRfbHpvcmxlLmMtNTUtXFx0LmRlc3Ryb3lfY3R4XFx0PSBsem9ybGVfZGVzdHJveSxcXG5kcml2ZXJzL2Jsb2NrL3pyYW0vYmFja2VuZF9sem9ybGUuYzo1NjpcXHQuc2V0dXBfcGFyYW1zXFx0PSBsem9ybGVfc2V0dXBfcGFyYW1zLFxcbmRyaXZlcnMvYmxvY2svenJhbS9iYWNrZW5kX2x6b3JsZS5jLTU3LVxcdC5yZWxlYXNlX3BhcmFtc1xcdD0gbHpvcmxlX3JlbGVhc2VfcGFyYW1zLFxcbi0tXFxuZHJpdmVycy9ibG9jay96cmFtL2JhY2tlbmRfenN0ZC5jPTM4PXN0YXRpYyB2b2lkIHpzdGRfcmVsZWFzZV9wYXJhbXMoc3RydWN0IHpjb21wX3BhcmFtcyAqcGFyYW1zKVxcbi0tXFxuZHJpdmVycy9ibG9jay96cmFtL2JhY2tlbmRfenN0ZC5jLTUwLVxcbmRyaXZlcnMvYmxvY2svenJhbS9iYWNrZW5kX3pzdGQuYzo1MTpzdGF0aWMgaW50IHpzdGRfc2V0dXBfcGFyYW1zKHN0cnVjdCB6Y29tcF9wYXJhbXMgKnBhcmFtcylcXG5kcml2ZXJzL2Jsb2NrL3pyYW0vYmFja2VuZF96c3RkLmMtNTIte1xcbi0tXFxuZHJpdmVycy9ibG9jay96cmFtL2JhY2tlbmRfenN0ZC5jPTIwOT1jb25zdCBzdHJ1Y3QgemNvbXBfb3BzIGJhY2tlbmRfenN0ZCA9IHtcXG4tLVxcbmRyaXZlcnMvYmxvY2svenJhbS9iYWNrZW5kX3pzdGQuYy0yMTMtXFx0LmRlc3Ryb3lfY3R4XFx0PSB6c3RkX2Rlc3Ryb3ksXFxuZHJpdmVycy9ibG9jay96cmFtL2JhY2tlbmRfenN0ZC5jOjIxNDpcXHQuc2V0dXBfcGFyYW1zXFx0PSB6c3RkX3NldHVwX3BhcmFtcyxcXG5kcml2ZXJzL2Jsb2NrL3pyYW0vYmFja2VuZF96c3RkLmMtMjE1LVxcdC5yZWxlYXNlX3BhcmFtc1xcdD0genN0ZF9yZWxlYXNlX3BhcmFtcyxcXG4tLVxcbmRyaXZlcnMvYmxvY2svenJhbS96Y29tcC5jPTE5Nz1zdGF0aWMgaW50IHpjb21wX2luaXQoc3RydWN0IHpjb21wICpjb21wLCBzdHJ1Y3QgemNvbXBfcGFyYW1zICpwYXJhbXMpXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL3pyYW0vemNvbXAuYy0yMDUtXFx0Y29tcC1cXHUwMDNlcGFyYW1zID0gcGFyYW1zO1xcbmRyaXZlcnMvYmxvY2svenJhbS96Y29tcC5jOjIwNjpcXHRyZXQgPSBjb21wLVxcdTAwM2VvcHMtXFx1MDAzZXNldHVwX3BhcmFtcyhjb21wLVxcdTAwM2VwYXJhbXMpO1xcbmRyaXZlcnMvYmxvY2svenJhbS96Y29tcC5jLTIwNy1cXHRpZiAocmV0KVxcbi0tXFxuZHJpdmVycy9ibG9jay96cmFtL3pjb21wLmg9NTc9c3RydWN0IHpjb21wX29wcyB7XFxuLS1cXG5kcml2ZXJzL2Jsb2NrL3pyYW0vemNvbXAuaC02NS1cXG5kcml2ZXJzL2Jsb2NrL3pyYW0vemNvbXAuaDo2NjpcXHRpbnQgKCpzZXR1cF9wYXJhbXMpKHN0cnVjdCB6Y29tcF9wYXJhbXMgKnBhcmFtcyk7XFxuZHJpdmVycy9ibG9jay96cmFtL3pjb21wLmgtNjctXFx0dm9pZCAoKnJlbGVhc2VfcGFyYW1zKShzdHJ1Y3QgemNvbXBfcGFyYW1zICpwYXJhbXMpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0zMFQxMDowMDo0MC41NTk0OTIwNDlaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMTE3MDIxMTI2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBJIHdlcmUgYW5hbHl6aW5nIHRoaXMgY29kZTpcblxuKipEaXZpbmcgaW50byB0aGUgSW5pdGlhbGl6YXRpb24qKlxuXG5Pa2F5LCBzbyBgemNvbXBfaW5pdGAgaXMgdGhlIGVudHJ5IHBvaW50LCBuYXR1cmFsbHkuIEl0IGNhbGxzIGBjb21wLVx1MDAzZW9wcy1cdTAwM2VzZXR1cF9wYXJhbXNgLCB3aGljaCBpcyB3aGVyZSB0aGUgcmVhbCBjb25maWd1cmF0aW9uIHByb2JhYmx5IGhhcHBlbnMuIE15IGZpcnN0IHRob3VnaHQgaXM6IEkgbmVlZCB0byB0cmFjZSBiYWNrIGZyb20gdGhpcyBmdW5jdGlvbiBjYWxsLiBVbmRlcnN0YW5kaW5nIHRoZSBpbml0aWFsaXphdGlvbiBzZXF1ZW5jZSBpcyBjcnVjaWFsIHRvIHVuZGVyc3RhbmRpbmcgdGhlIHN5c3RlbSdzIG92ZXJhbGwgYmVoYXZpb3IuIFNvLCBteSBuZXh0IGxvZ2ljYWwgc3RlcCBpcyB0byBzZWUgZXhhY3RseSAqd2hlcmUqIGB6Y29tcF9pbml0YCBnZXRzIGNhbGxlZC4gVGhhdCB3aWxsIHByb3ZpZGUgY3JpdGljYWwgY29udGV4dDogV2hhdCB0cmlnZ2VycyB0aGUgaW5pdGlhbGl6YXRpb24sIGFuZCBob3cgdGhlIHN1cnJvdW5kaW5nIGVudmlyb25tZW50IGlzIHNldCB1cC4gS25vd2luZyB0aGUgY2FsbGVyIGZ1bmN0aW9uKHMpIGdpdmVzIG1lIGEgY3JpdGljYWwgdW5kZXJzdGFuZGluZyBvZiB0aGUgaW5pdGlhbGl6YXRpb24gZmxvdy5cblxuXG4iLCJJbnB1dFRva2VucyI6NjE3OCwiT3V0cHV0VG9rZW5zIjozMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMxLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMwVDEwOjAwOjQzLjY3NjUxNDk4NVoiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTM1NTkwNzgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiemNvbXBfaW5pdFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL2Jsb2NrL3pyYW0vXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvYmxvY2svenJhbS96Y29tcC5jPTE4Nj1pbnQgemNvbXBfY3B1X2RlYWQodW5zaWduZWQgaW50IGNwdSwgc3RydWN0IGhsaXN0X25vZGUgKm5vZGUpXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL3pyYW0vemNvbXAuYy0xOTYtXFxuZHJpdmVycy9ibG9jay96cmFtL3pjb21wLmM6MTk3OnN0YXRpYyBpbnQgemNvbXBfaW5pdChzdHJ1Y3QgemNvbXAgKmNvbXAsIHN0cnVjdCB6Y29tcF9wYXJhbXMgKnBhcmFtcylcXG5kcml2ZXJzL2Jsb2NrL3pyYW0vemNvbXAuYy0xOTgte1xcbi0tXFxuZHJpdmVycy9ibG9jay96cmFtL3pjb21wLmM9MjMzPXN0cnVjdCB6Y29tcCAqemNvbXBfY3JlYXRlKGNvbnN0IGNoYXIgKmFsZywgc3RydWN0IHpjb21wX3BhcmFtcyAqcGFyYW1zKVxcbi0tXFxuZHJpdmVycy9ibG9jay96cmFtL3pjb21wLmMtMjU1LVxcbmRyaXZlcnMvYmxvY2svenJhbS96Y29tcC5jOjI1NjpcXHRlcnJvciA9IHpjb21wX2luaXQoY29tcCwgcGFyYW1zKTtcXG5kcml2ZXJzL2Jsb2NrL3pyYW0vemNvbXAuYy0yNTctXFx0aWYgKGVycm9yKSB7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMwVDEwOjAwOjQzLjczMDA3ODE0M1oiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNTQwNTY2OTIyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIGFzc3VtaW5nIEknbSBhbiBleHBlcnQgaW4gdGhpcyBmaWVsZCwgcHJlc2VudGVkIGFzIGEgZmlyc3QtcGVyc29uIHN1bW1hcnk6XG5cbioqRGlnZ2luZyBpbnRvIHRoZSBgemNvbXBfY3JlYXRlYCBGdW5jdGlvbioqXG5cblJpZ2h0LCBgemNvbXBfY3JlYXRlYCBraWNrcyBvZmYgYnkgY2FsbGluZyBgemNvbXBfaW5pdGAuIE1ha2VzIHNlbnNlIOKAkyBpbml0aWFsaXphdGlvbiB1c3VhbGx5IGNvbWVzIGZpcnN0LiBOb3csIHRoZSByZWFsIHF1ZXN0aW9uIGlzLCB3aG8gKnVzZXMqIGB6Y29tcF9jcmVhdGVgPyBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgY29udGV4dCBvZiBpdHMgY2FsbHMgdG8gZnVsbHkgZ3Jhc3AgaXRzIHJvbGUgYW5kIHBvdGVudGlhbCBpbXBhY3QuIFNvLCB0aW1lIHRvIHRyYWNlIHRob3NlIGNhbGxzIGFuZCBzZWUgd2hlcmUgdGhpcyB0aGluZyBpcyBhY3R1YWxseSBiZWluZyBpbnZva2VkLiBMZXQncyBzZWUgd2hhdCB0aGUgY2FsbCBzdGFjayByZXZlYWxzLlxuXG5cbiIsIklucHV0VG9rZW5zIjo2NjI1LCJPdXRwdXRUb2tlbnMiOjMxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMzBUMTA6MDA6NDcuMjcwNjQ3MzY1WiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0MjQyNTQ2MSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ6Y29tcF9jcmVhdGVcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9ibG9jay96cmFtL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL2Jsb2NrL3pyYW0vemNvbXAuYz0yMjU9dm9pZCB6Y29tcF9kZXN0cm95KHN0cnVjdCB6Y29tcCAqY29tcClcXG4tLVxcbmRyaXZlcnMvYmxvY2svenJhbS96Y29tcC5jLTIzMi1cXG5kcml2ZXJzL2Jsb2NrL3pyYW0vemNvbXAuYzoyMzM6c3RydWN0IHpjb21wICp6Y29tcF9jcmVhdGUoY29uc3QgY2hhciAqYWxnLCBzdHJ1Y3QgemNvbXBfcGFyYW1zICpwYXJhbXMpXFxuZHJpdmVycy9ibG9jay96cmFtL3pjb21wLmMtMjM0LXtcXG4tLVxcbmRyaXZlcnMvYmxvY2svenJhbS96Y29tcC5oPTgzPWNvbnN0IGNoYXIgKnpjb21wX2xvb2t1cF9iYWNrZW5kX25hbWUoY29uc3QgY2hhciAqY29tcCk7XFxuZHJpdmVycy9ibG9jay96cmFtL3pjb21wLmgtODQtXFxuZHJpdmVycy9ibG9jay96cmFtL3pjb21wLmg6ODU6c3RydWN0IHpjb21wICp6Y29tcF9jcmVhdGUoY29uc3QgY2hhciAqYWxnLCBzdHJ1Y3QgemNvbXBfcGFyYW1zICpwYXJhbXMpO1xcbmRyaXZlcnMvYmxvY2svenJhbS96Y29tcC5oLTg2LXZvaWQgemNvbXBfZGVzdHJveShzdHJ1Y3QgemNvbXAgKmNvbXApO1xcbi0tXFxuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmM9Mjg1OT1zdGF0aWMgc3NpemVfdCBkaXNrc2l6ZV9zdG9yZShzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLFxcbi0tXFxuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmMtMjg4NS1cXG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYzoyODg2OlxcdFxcdGNvbXAgPSB6Y29tcF9jcmVhdGUoenJhbS1cXHUwMDNlY29tcF9hbGdzW3ByaW9dLFxcbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jLTI4ODctXFx0XFx0XFx0XFx0ICAgIFxcdTAwMjZ6cmFtLVxcdTAwM2VwYXJhbXNbcHJpb10pO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0zMFQxMDowMDo0Ny4zMTMwNzcyMTZaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDgyMTY5MDMwNCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBbmFseXNpcyBvZiB0aGUgenJhbSBEcml2ZXIncyBDb21wcmVzc2lvbiBMb2dpYyoqXG5cbk9rYXksIHNvIGhlcmUncyB3aGF0IEkndmUgZ290IGluIG15IGhlYWQ6IGB6Y29tcF9jcmVhdGVgIGlzIGJlaW5nIGNhbGxlZCB3aXRoaW4gdGhlIGBkaXNrc2l6ZV9zdG9yZWAgZnVuY3Rpb24uIFRoYXQncyB0aGUgZW50cnkgcG9pbnQsIHJpZ2h0PyBTbyBgZGlza3NpemVfc3RvcmVgIGtpY2tzIG9mZiBgemNvbXBfY3JlYXRlYCwgd2hpY2ggdGhlbiBjYWxscyBgemNvbXBfaW5pdGAsIHdoaWNoIGluIHR1cm4gbGVhZHMgdG8gYHNldHVwX3BhcmFtc2AsIGFuZCBmaW5hbGx5IHRvIGBkZWZsYXRlX3NldHVwX3BhcmFtc2AgaWYgdGhlIGNvbXByZXNzaW9uIGFsZ29yaXRobSBpcywgd2VsbCwgZGVmbGF0ZS4gQW5kLCBqdXN0IHRvIGJlIGNsZWFyLCBgZGlza3NpemVfc3RvcmVgIGlzIGEgc3lzZnMgc3RvcmUgZnVuY3Rpb24uIFxuXG5Ob3csIGNhbiB0aGlzIHdob2xlIGNoYWluIG9mIGV2ZW50cyBhY3R1YWxseSBoYXBwZW4gaW4gYSB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudD8gQWJzb2x1dGVseS4gWnJhbSBpcyBhIGJsb2NrIGRldmljZSBhbmQgaXRzIHN5c2ZzIGF0dHJpYnV0ZXMgYXJlIGFjY2Vzc2libGUsIHNvIHRoYXQncyBhIGRlZmluaXRlIFwieWVzLlwiXG5cblRoZSBjcml0aWNhbCBxdWVzdGlvbiBub3cgaXMsIGlzIHRoaXMgc29tZXRoaW5nIHdvcnRoIGRlZGljYXRpbmcgdGltZSB0byBmdXp6aW5nPyBBYnNvbHV0ZWx5LCB3aXRob3V0IGEgZG91YnQuIFdlJ3JlIHRhbGtpbmcgYWJvdXQgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgenJhbSBkcml2ZXIuIFRoZXJlJ3MgdmFsaWRhdGlvbiBiZWluZyBhZGRlZCBmb3IgdGhlIGB3aW5iaXRzYCBwYXJhbWV0ZXIsIGFuZCBzb21lIGNvZGUgaXMgYmVpbmcgbW92ZWQgYXJvdW5kIGNvbmNlcm5pbmcgYGNvbXBfYWxnb3JpdGhtX3NldGAuIFRoYXQncyBhIHRhcmdldC1yaWNoIGVudmlyb25tZW50LlxuXG5TcGVjaWZpY2FsbHksIHRoZSBgZGVmbGF0ZV9zZXR1cF9wYXJhbXNgIGZ1bmN0aW9uIGlzIHJlYWNoZWQgd2hlbiB3ZSBhcmUgc2V0dGluZyB1cCBkZWZsYXRlIGNvbXByZXNzaW9uIGZvciB0aGUgenJhbSBkZXZpY2UuIEFsc28sIHRoZSBgenJhbV9kZXN0cm95X2NvbXBzYCBpcyByZWFjaGFibGUgd2hlbiByZXNldHRpbmcgdGhlIGRldmljZSBvciBlbmNvdW50ZXJpbmcgYW4gZXJyb3IgaW4gdGhlIGBkaXNrc2l6ZV9zdG9yZWAgZnVuY3Rpb24uXG5cbk5vdywgSSBzaG91bGQgcXVpY2tseSBjaGVjayB0aGUgcmVxdWlyZWQgY29uZmlndXJhdGlvbnMgZm9yIHpyYW0uIExldCdzIHNlZSB3aGF0J3MgbmVlZGVkIGZvciB0aGUgZnVsbCBwaWN0dXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjo3MTg3LCJPdXRwdXRUb2tlbnMiOjMwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjAwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMwVDEwOjAwOjUyLjEzNDc2OTk0WiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NTIwMjMxMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgWlJBTVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL2Jsb2NrL3pyYW0vXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnLTEtIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxcbmRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnOjI6Y29uZmlnIFpSQU1cXG5kcml2ZXJzL2Jsb2NrL3pyYW0vS2NvbmZpZy0zLVxcdHRyaXN0YXRlIFxcXCJDb21wcmVzc2VkIFJBTSBibG9jayBkZXZpY2Ugc3VwcG9ydFxcXCJcXG4tLVxcbmRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnLTE2LVxcbmRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnOjE3OmNvbmZpZyBaUkFNX0JBQ0tFTkRfTFo0XFxuZHJpdmVycy9ibG9jay96cmFtL0tjb25maWctMTgtXFx0Ym9vbCBcXFwibHo0IGNvbXByZXNzaW9uIHN1cHBvcnRcXFwiXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL3pyYW0vS2NvbmZpZy0yMi1cXG5kcml2ZXJzL2Jsb2NrL3pyYW0vS2NvbmZpZzoyMzpjb25maWcgWlJBTV9CQUNLRU5EX0xaNEhDXFxuZHJpdmVycy9ibG9jay96cmFtL0tjb25maWctMjQtXFx0Ym9vbCBcXFwibHo0aGMgY29tcHJlc3Npb24gc3VwcG9ydFxcXCJcXG4tLVxcbmRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnLTI4LVxcbmRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnOjI5OmNvbmZpZyBaUkFNX0JBQ0tFTkRfWlNURFxcbmRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnLTMwLVxcdGJvb2wgXFxcInpzdGQgY29tcHJlc3Npb24gc3VwcG9ydFxcXCJcXG4tLVxcbmRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnLTM0LVxcbmRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnOjM1OmNvbmZpZyBaUkFNX0JBQ0tFTkRfREVGTEFURVxcbmRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnLTM2LVxcdGJvb2wgXFxcImRlZmxhdGUgY29tcHJlc3Npb24gc3VwcG9ydFxcXCJcXG4tLVxcbmRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnLTQwLVxcbmRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnOjQxOmNvbmZpZyBaUkFNX0JBQ0tFTkRfODQyXFxuZHJpdmVycy9ibG9jay96cmFtL0tjb25maWctNDItXFx0Ym9vbCBcXFwiODQyIGNvbXByZXNzaW9uIHN1cHBvcnRcXFwiXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL3pyYW0vS2NvbmZpZy00Ni1cXG5kcml2ZXJzL2Jsb2NrL3pyYW0vS2NvbmZpZzo0Nzpjb25maWcgWlJBTV9CQUNLRU5EX0ZPUkNFX0xaT1xcbmRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnLTQ4LVxcdGRlcGVuZHMgb24gWlJBTVxcbi0tXFxuZHJpdmVycy9ibG9jay96cmFtL0tjb25maWctNTItXFxuZHJpdmVycy9ibG9jay96cmFtL0tjb25maWc6NTM6Y29uZmlnIFpSQU1fQkFDS0VORF9MWk9cXG5kcml2ZXJzL2Jsb2NrL3pyYW0vS2NvbmZpZy01NC1cXHRib29sIFxcXCJsem8gYW5kIGx6by1ybGUgY29tcHJlc3Npb24gc3VwcG9ydFxcXCIgaWYgIVpSQU1fQkFDS0VORF9GT1JDRV9MWk9cXG4tLVxcbmRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnPTYwPWNob2ljZVxcbi0tXFxuZHJpdmVycy9ibG9jay96cmFtL0tjb25maWctNjQtXFxuZHJpdmVycy9ibG9jay96cmFtL0tjb25maWc6NjU6Y29uZmlnIFpSQU1fREVGX0NPTVBfTFpPUkxFXFxuZHJpdmVycy9ibG9jay96cmFtL0tjb25maWctNjYtXFx0Ym9vbCBcXFwibHpvLXJsZVxcXCJcXG4tLVxcbmRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnLTY4LVxcbmRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnOjY5OmNvbmZpZyBaUkFNX0RFRl9DT01QX0xaT1xcbmRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnLTcwLVxcdGJvb2wgXFxcImx6b1xcXCJcXG4tLVxcbmRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnLTcyLVxcbmRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnOjczOmNvbmZpZyBaUkFNX0RFRl9DT01QX0xaNFxcbmRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnLTc0LVxcdGJvb2wgXFxcImx6NFxcXCJcXG4tLVxcbmRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnLTc2LVxcbmRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnOjc3OmNvbmZpZyBaUkFNX0RFRl9DT01QX0xaNEhDXFxuZHJpdmVycy9ibG9jay96cmFtL0tjb25maWctNzgtXFx0Ym9vbCBcXFwibHo0aGNcXFwiXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL3pyYW0vS2NvbmZpZy04MC1cXG5kcml2ZXJzL2Jsb2NrL3pyYW0vS2NvbmZpZzo4MTpjb25maWcgWlJBTV9ERUZfQ09NUF9aU1REXFxuZHJpdmVycy9ibG9jay96cmFtL0tjb25maWctODItXFx0Ym9vbCBcXFwienN0ZFxcXCJcXG4tLVxcbmRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnLTg0LVxcbmRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnOjg1OmNvbmZpZyBaUkFNX0RFRl9DT01QX0RFRkxBVEVcXG5kcml2ZXJzL2Jsb2NrL3pyYW0vS2NvbmZpZy04Ni1cXHRib29sIFxcXCJkZWZsYXRlXFxcIlxcbi0tXFxuZHJpdmVycy9ibG9jay96cmFtL0tjb25maWctODgtXFxuZHJpdmVycy9ibG9jay96cmFtL0tjb25maWc6ODk6Y29uZmlnIFpSQU1fREVGX0NPTVBfODQyXFxuZHJpdmVycy9ibG9jay96cmFtL0tjb25maWctOTAtXFx0Ym9vbCBcXFwiODQyXFxcIlxcbi0tXFxuZHJpdmVycy9ibG9jay96cmFtL0tjb25maWc9OTM9ZW5kY2hvaWNlXFxuZHJpdmVycy9ibG9jay96cmFtL0tjb25maWctOTQtXFxuZHJpdmVycy9ibG9jay96cmFtL0tjb25maWc6OTU6Y29uZmlnIFpSQU1fREVGX0NPTVBcXG5kcml2ZXJzL2Jsb2NrL3pyYW0vS2NvbmZpZy05Ni1cXHRzdHJpbmdcXG4tLVxcbmRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnLTEwNi1cXG5kcml2ZXJzL2Jsb2NrL3pyYW0vS2NvbmZpZzoxMDc6Y29uZmlnIFpSQU1fV1JJVEVCQUNLXFxuZHJpdmVycy9ibG9jay96cmFtL0tjb25maWctMTA4LSAgICAgICBib29sIFxcXCJXcml0ZSBiYWNrIGluY29tcHJlc3NpYmxlIG9yIGlkbGUgcGFnZSB0byBiYWNraW5nIGRldmljZVxcXCJcXG4tLVxcbmRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnLTEyMC1cXG5kcml2ZXJzL2Jsb2NrL3pyYW0vS2NvbmZpZzoxMjE6Y29uZmlnIFpSQU1fVFJBQ0tfRU5UUllfQUNUSU1FXFxuZHJpdmVycy9ibG9jay96cmFtL0tjb25maWctMTIyLVxcdGJvb2wgXFxcIlRyYWNrIGFjY2VzcyB0aW1lIG9mIHpyYW0gZW50cmllc1xcXCJcXG4tLVxcbmRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnLTEyOC1cXG5kcml2ZXJzL2Jsb2NrL3pyYW0vS2NvbmZpZzoxMjk6Y29uZmlnIFpSQU1fTUVNT1JZX1RSQUNLSU5HXFxuZHJpdmVycy9ibG9jay96cmFtL0tjb25maWctMTMwLVxcdGJvb2wgXFxcIlRyYWNrIHpSYW0gYmxvY2sgc3RhdHVzXFxcIlxcbi0tXFxuZHJpdmVycy9ibG9jay96cmFtL0tjb25maWctMTM5LVxcbmRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnOjE0MDpjb25maWcgWlJBTV9NVUxUSV9DT01QXFxuZHJpdmVycy9ibG9jay96cmFtL0tjb25maWctMTQxLVxcdGJvb2wgXFxcIkVuYWJsZSBtdWx0aXBsZSBjb21wcmVzc2lvbiBzdHJlYW1zXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0zMFQxMDowMDo1Mi4xNzk5NzQ0NFoiLCJTZXEiOjE1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0MjIzNjgzNzI1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIGFuIGV4cGVydCdzIGludGVybmFsIG1vbm9sb2d1ZTpcblxuKipaUkFNIFx1MDAyNiBEZWZsYXRlOiBJbml0aWFsIEFzc2Vzc21lbnQqKlxuXG5BbHJpZ2h0LCB0aGUgY29yZSByZXF1aXJlbWVudCBoZXJlIGlzIGNsZWFyOiBgWlJBTWAgYW5kIHRoZSBgWlJBTV9CQUNLRU5EX0RFRkxBVEVgIGJhY2tlbmQgYXJlIHRoZSBmb2N1cy4gTXkgbWluZCBpbW1lZGlhdGVseSBqdW1wcyB0byBhIG1lbnRhbCBjaGVja2xpc3QuIFdlJ3JlIGdvaW5nIHRvIHVzZSB6cmFtIGFzIGEgYmxvY2sgZGV2aWNlLiBJIG5lZWQgdG8gbWFrZSBzdXJlIHRoaXMgaXMgaW5zdGFsbGVkIGFuZCBjb25maWd1cmVkIGNvcnJlY3RseS4gXG5cbk15IGltbWVkaWF0ZSBhY3Rpb24gaXMgdG8gZGVsdmUgaW50byB0aGUgZGVwZW5kZW5jaWVzIG9mIGBaUkFNYC4gV2hhdCBvdGhlciBrZXJuZWwgbW9kdWxlcyBvciB1c2VyLXNwYWNlIHV0aWxpdGllcyBkb2VzIGl0IHJlbHkgb24/IEFyZSB0aGVyZSBhbnkgc3BlY2lmaWMgdmVyc2lvbnMgSSBuZWVkIHRvIGJlIGF3YXJlIG9mIHRvIGVuc3VyZSBjb21wYXRpYmlsaXR5LCBlc3BlY2lhbGx5IHdpdGggdGhlIGBERUZMQVRFYCBiYWNrZW5kPyBUaGUgY2hvaWNlIG9mIGNvbXByZXNzaW9uIGFsZ29yaXRobSBpcyBpbXBvcnRhbnQgZm9yIGJhbGFuY2UgYmV0d2VlbiBDUFUgbG9hZCBhbmQgZGlzayBJTy4gQXJlIHRoZXJlIGFueSBrbm93biBpc3N1ZXMgd2l0aCB0aGF0IHNwZWNpZmljIGJhY2tlbmQ/IFdlIHNob3VsZCBsb29rIGF0IGFueSBwb3RlbnRpYWwgaW1wYWN0cyBvbiBzeXN0ZW0gcGVyZm9ybWFuY2UgdW5kZXIgbG9hZC4gV2UgbXVzdCBsb29rIGF0IHRoZSBvdmVyYWxsIHN5c3RlbSBtZW1vcnkgY29uZmlndXJhdGlvbiB0byBlbnN1cmUgaXRzIG9wdGltYWwgcGVyZm9ybWFuY2UuIFRoaXMgaXMgYWxsIHN0YW5kYXJkIGluaXRpYWwgZHVlIGRpbGlnZW5jZSwgYnV0IGNydWNpYWwgdG8gYXZvaWQgbGF0ZXIgaGVhZGFjaGVzLiBUaGlzIHNlZW1zIGxpa2UgYSByZWFzb25hYmxlIHN0YXJ0aW5nIHBvaW50LlxuXG5cbiIsIklucHV0VG9rZW5zIjo5MDU0LCJPdXRwdXRUb2tlbnMiOjMxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMzBUMTA6MDA6NTYuNDAzNjYwNDg1WiIsIlNlcSI6MTYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1ODA3OTc0NywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJkZXBlbmRzIG9uXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnPTI9Y29uZmlnIFpSQU1cXG5kcml2ZXJzL2Jsb2NrL3pyYW0vS2NvbmZpZy0zLVxcdHRyaXN0YXRlIFxcXCJDb21wcmVzc2VkIFJBTSBibG9jayBkZXZpY2Ugc3VwcG9ydFxcXCJcXG5kcml2ZXJzL2Jsb2NrL3pyYW0vS2NvbmZpZzo0OlxcdGRlcGVuZHMgb24gQkxPQ0sgXFx1MDAyNlxcdTAwMjYgU1lTRlMgXFx1MDAyNlxcdTAwMjYgTU1VXFxuZHJpdmVycy9ibG9jay96cmFtL0tjb25maWctNS1cXHRzZWxlY3QgWlNNQUxMT0NcXG4tLVxcbmRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnPTE3PWNvbmZpZyBaUkFNX0JBQ0tFTkRfTFo0XFxuZHJpdmVycy9ibG9jay96cmFtL0tjb25maWctMTgtXFx0Ym9vbCBcXFwibHo0IGNvbXByZXNzaW9uIHN1cHBvcnRcXFwiXFxuZHJpdmVycy9ibG9jay96cmFtL0tjb25maWc6MTk6XFx0ZGVwZW5kcyBvbiBaUkFNXFxuZHJpdmVycy9ibG9jay96cmFtL0tjb25maWctMjAtXFx0c2VsZWN0IExaNF9DT01QUkVTU1xcbi0tXFxuZHJpdmVycy9ibG9jay96cmFtL0tjb25maWc9MjM9Y29uZmlnIFpSQU1fQkFDS0VORF9MWjRIQ1xcbmRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnLTI0LVxcdGJvb2wgXFxcImx6NGhjIGNvbXByZXNzaW9uIHN1cHBvcnRcXFwiXFxuZHJpdmVycy9ibG9jay96cmFtL0tjb25maWc6MjU6XFx0ZGVwZW5kcyBvbiBaUkFNXFxuZHJpdmVycy9ibG9jay96cmFtL0tjb25maWctMjYtXFx0c2VsZWN0IExaNEhDX0NPTVBSRVNTXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL3pyYW0vS2NvbmZpZz0yOT1jb25maWcgWlJBTV9CQUNLRU5EX1pTVERcXG5kcml2ZXJzL2Jsb2NrL3pyYW0vS2NvbmZpZy0zMC1cXHRib29sIFxcXCJ6c3RkIGNvbXByZXNzaW9uIHN1cHBvcnRcXFwiXFxuZHJpdmVycy9ibG9jay96cmFtL0tjb25maWc6MzE6XFx0ZGVwZW5kcyBvbiBaUkFNXFxuZHJpdmVycy9ibG9jay96cmFtL0tjb25maWctMzItXFx0c2VsZWN0IFpTVERfQ09NUFJFU1NcXG4tLVxcbmRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnPTM1PWNvbmZpZyBaUkFNX0JBQ0tFTkRfREVGTEFURVxcbmRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnLTM2LVxcdGJvb2wgXFxcImRlZmxhdGUgY29tcHJlc3Npb24gc3VwcG9ydFxcXCJcXG5kcml2ZXJzL2Jsb2NrL3pyYW0vS2NvbmZpZzozNzpcXHRkZXBlbmRzIG9uIFpSQU1cXG5kcml2ZXJzL2Jsb2NrL3pyYW0vS2NvbmZpZy0zOC1cXHRzZWxlY3QgWkxJQl9ERUZMQVRFXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL3pyYW0vS2NvbmZpZz00MT1jb25maWcgWlJBTV9CQUNLRU5EXzg0MlxcbmRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnLTQyLVxcdGJvb2wgXFxcIjg0MiBjb21wcmVzc2lvbiBzdXBwb3J0XFxcIlxcbmRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnOjQzOlxcdGRlcGVuZHMgb24gWlJBTVxcbmRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnLTQ0LVxcdHNlbGVjdCA4NDJfQ09NUFJFU1NcXG4tLVxcbmRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnPTQ3PWNvbmZpZyBaUkFNX0JBQ0tFTkRfRk9SQ0VfTFpPXFxuZHJpdmVycy9ibG9jay96cmFtL0tjb25maWc6NDg6XFx0ZGVwZW5kcyBvbiBaUkFNXFxuZHJpdmVycy9ibG9jay96cmFtL0tjb25maWctNDktXFx0ZGVmX2Jvb2wgIVpSQU1fQkFDS0VORF9MWjQgXFx1MDAyNlxcdTAwMjYgIVpSQU1fQkFDS0VORF9MWjRIQyBcXHUwMDI2XFx1MDAyNiBcXFxcXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL3pyYW0vS2NvbmZpZz01Mz1jb25maWcgWlJBTV9CQUNLRU5EX0xaT1xcbmRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnLTU0LVxcdGJvb2wgXFxcImx6byBhbmQgbHpvLXJsZSBjb21wcmVzc2lvbiBzdXBwb3J0XFxcIiBpZiAhWlJBTV9CQUNLRU5EX0ZPUkNFX0xaT1xcbmRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnOjU1OlxcdGRlcGVuZHMgb24gWlJBTVxcbmRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnLTU2LVxcdGRlZmF1bHQgWlJBTV9CQUNLRU5EX0ZPUkNFX0xaT1xcbi0tXFxuZHJpdmVycy9ibG9jay96cmFtL0tjb25maWc9NjA9Y2hvaWNlXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL3pyYW0vS2NvbmZpZy02Mi1cXHRkZWZhdWx0IFpSQU1fREVGX0NPTVBfTFpPUkxFXFxuZHJpdmVycy9ibG9jay96cmFtL0tjb25maWc6NjM6XFx0ZGVwZW5kcyBvbiBaUkFNXFxuZHJpdmVycy9ibG9jay96cmFtL0tjb25maWctNjQtXFxuZHJpdmVycy9ibG9jay96cmFtL0tjb25maWc9NjU9Y29uZmlnIFpSQU1fREVGX0NPTVBfTFpPUkxFXFxuZHJpdmVycy9ibG9jay96cmFtL0tjb25maWctNjYtXFx0Ym9vbCBcXFwibHpvLXJsZVxcXCJcXG5kcml2ZXJzL2Jsb2NrL3pyYW0vS2NvbmZpZzo2NzpcXHRkZXBlbmRzIG9uIFpSQU1fQkFDS0VORF9MWk9cXG5kcml2ZXJzL2Jsb2NrL3pyYW0vS2NvbmZpZy02OC1cXG5kcml2ZXJzL2Jsb2NrL3pyYW0vS2NvbmZpZz02OT1jb25maWcgWlJBTV9ERUZfQ09NUF9MWk9cXG5kcml2ZXJzL2Jsb2NrL3pyYW0vS2NvbmZpZy03MC1cXHRib29sIFxcXCJsem9cXFwiXFxuZHJpdmVycy9ibG9jay96cmFtL0tjb25maWc6NzE6XFx0ZGVwZW5kcyBvbiBaUkFNX0JBQ0tFTkRfTFpPXFxuZHJpdmVycy9ibG9jay96cmFtL0tjb25maWctNzItXFxuZHJpdmVycy9ibG9jay96cmFtL0tjb25maWc9NzM9Y29uZmlnIFpSQU1fREVGX0NPTVBfTFo0XFxuZHJpdmVycy9ibG9jay96cmFtL0tjb25maWctNzQtXFx0Ym9vbCBcXFwibHo0XFxcIlxcbmRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnOjc1OlxcdGRlcGVuZHMgb24gWlJBTV9CQUNLRU5EX0xaNFxcbmRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnLTc2LVxcbmRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnPTc3PWNvbmZpZyBaUkFNX0RFRl9DT01QX0xaNEhDXFxuZHJpdmVycy9ibG9jay96cmFtL0tjb25maWctNzgtXFx0Ym9vbCBcXFwibHo0aGNcXFwiXFxuZHJpdmVycy9ibG9jay96cmFtL0tjb25maWc6Nzk6XFx0ZGVwZW5kcyBvbiBaUkFNX0JBQ0tFTkRfTFo0SENcXG5kcml2ZXJzL2Jsb2NrL3pyYW0vS2NvbmZpZy04MC1cXG5kcml2ZXJzL2Jsb2NrL3pyYW0vS2NvbmZpZz04MT1jb25maWcgWlJBTV9ERUZfQ09NUF9aU1REXFxuZHJpdmVycy9ibG9jay96cmFtL0tjb25maWctODItXFx0Ym9vbCBcXFwienN0ZFxcXCJcXG5kcml2ZXJzL2Jsb2NrL3pyYW0vS2NvbmZpZzo4MzpcXHRkZXBlbmRzIG9uIFpSQU1fQkFDS0VORF9aU1REXFxuZHJpdmVycy9ibG9jay96cmFtL0tjb25maWctODQtXFxuZHJpdmVycy9ibG9jay96cmFtL0tjb25maWc9ODU9Y29uZmlnIFpSQU1fREVGX0NPTVBfREVGTEFURVxcbmRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnLTg2LVxcdGJvb2wgXFxcImRlZmxhdGVcXFwiXFxuZHJpdmVycy9ibG9jay96cmFtL0tjb25maWc6ODc6XFx0ZGVwZW5kcyBvbiBaUkFNX0JBQ0tFTkRfREVGTEFURVxcbmRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnLTg4LVxcbmRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnPTg5PWNvbmZpZyBaUkFNX0RFRl9DT01QXzg0MlxcbmRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnLTkwLVxcdGJvb2wgXFxcIjg0MlxcXCJcXG5kcml2ZXJzL2Jsb2NrL3pyYW0vS2NvbmZpZzo5MTpcXHRkZXBlbmRzIG9uIFpSQU1fQkFDS0VORF84NDJcXG5kcml2ZXJzL2Jsb2NrL3pyYW0vS2NvbmZpZy05Mi1cXG4tLVxcbmRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnPTk1PWNvbmZpZyBaUkFNX0RFRl9DT01QXFxuZHJpdmVycy9ibG9jay96cmFtL0tjb25maWctOTYtXFx0c3RyaW5nXFxuZHJpdmVycy9ibG9jay96cmFtL0tjb25maWc6OTc6XFx0ZGVwZW5kcyBvbiBaUkFNXFxuZHJpdmVycy9ibG9jay96cmFtL0tjb25maWctOTgtXFx0ZGVmYXVsdCBcXFwibHpvLXJsZVxcXCIgaWYgWlJBTV9ERUZfQ09NUF9MWk9STEVcXG4tLVxcbmRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnPTEwNz1jb25maWcgWlJBTV9XUklURUJBQ0tcXG5kcml2ZXJzL2Jsb2NrL3pyYW0vS2NvbmZpZy0xMDgtICAgICAgIGJvb2wgXFxcIldyaXRlIGJhY2sgaW5jb21wcmVzc2libGUgb3IgaWRsZSBwYWdlIHRvIGJhY2tpbmcgZGV2aWNlXFxcIlxcbmRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnOjEwOTogICAgICAgZGVwZW5kcyBvbiBaUkFNXFxuZHJpdmVycy9ibG9jay96cmFtL0tjb25maWctMTEwLSAgICAgICBoZWxwXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL3pyYW0vS2NvbmZpZz0xMjE9Y29uZmlnIFpSQU1fVFJBQ0tfRU5UUllfQUNUSU1FXFxuZHJpdmVycy9ibG9jay96cmFtL0tjb25maWctMTIyLVxcdGJvb2wgXFxcIlRyYWNrIGFjY2VzcyB0aW1lIG9mIHpyYW0gZW50cmllc1xcXCJcXG5kcml2ZXJzL2Jsb2NrL3pyYW0vS2NvbmZpZzoxMjM6XFx0ZGVwZW5kcyBvbiBaUkFNXFxuZHJpdmVycy9ibG9jay96cmFtL0tjb25maWctMTI0LVxcdGhlbHBcXG4tLVxcbmRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnPTEyOT1jb25maWcgWlJBTV9NRU1PUllfVFJBQ0tJTkdcXG5kcml2ZXJzL2Jsb2NrL3pyYW0vS2NvbmZpZy0xMzAtXFx0Ym9vbCBcXFwiVHJhY2sgelJhbSBibG9jayBzdGF0dXNcXFwiXFxuZHJpdmVycy9ibG9jay96cmFtL0tjb25maWc6MTMxOlxcdGRlcGVuZHMgb24gWlJBTSBcXHUwMDI2XFx1MDAyNiBERUJVR19GU1xcbmRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnLTEzMi1cXHRzZWxlY3QgWlJBTV9UUkFDS19FTlRSWV9BQ1RJTUVcXG4tLVxcbmRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnPTE0MD1jb25maWcgWlJBTV9NVUxUSV9DT01QXFxuZHJpdmVycy9ibG9jay96cmFtL0tjb25maWctMTQxLVxcdGJvb2wgXFxcIkVuYWJsZSBtdWx0aXBsZSBjb21wcmVzc2lvbiBzdHJlYW1zXFxcIlxcbmRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnOjE0MjpcXHRkZXBlbmRzIG9uIFpSQU1cXG5kcml2ZXJzL2Jsb2NrL3pyYW0vS2NvbmZpZy0xNDMtXFx0aGVscFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0zMFQxMDowMDo1Ni40NjE3NDM2OTJaIiwiU2VxIjoxNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDQ4Mjk0ODUwOSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIFpSQU0gSW1wbGVtZW50YXRpb24qKlxuXG5Pa2F5LCBzbyB3ZSdyZSBsb29raW5nIGF0IGludGVncmF0aW5nIGBaUkFNYCBhbmQgc3BlY2lmaWNhbGx5LCB0aGUgYFpSQU1fQkFDS0VORF9ERUZMQVRFYCBiYWNrZW5kLiBNeSBpbW1lZGlhdGUgY29uY2VybiBpcyBob3cgdGhlIGNvcmUgZnVuY3Rpb25zIGFyZSBiZWluZyBtb2RpZmllZCBhbmQgdXRpbGl6ZWQuIFNwZWNpZmljYWxseSwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIG1vZGlmaWNhdGlvbnMgdG8gYGRlZmxhdGVfc2V0dXBfcGFyYW1zYCBhbmQgYHpyYW1fZGVzdHJveV9jb21wc2AuIEkgc2VlIGBkZWZsYXRlX3NldHVwX3BhcmFtc2AgaXMgZGVjbGFyZWQgYXMgc3RhdGljLCBidXQgaXQncyBhc3NpZ25lZCB0byBgYmFja2VuZF9kZWZsYXRlLnNldHVwX3BhcmFtc2Ag4oCTIEknbGwgbmVlZCB0byBkb3VibGUtY2hlY2sgdGhhdCB0aGlzIGlzIHNhZmUgYW5kIG1ha2VzIHNlbnNlIHdpdGhpbiB0aGUgb3ZlcmFsbCBhcmNoaXRlY3R1cmUuXG5cbk15IGZvY3VzIG5vdyBpcyBvbiBob3cgdGhlc2UgY2hhbmdlcyBhcmUgKnRyaWdnZXJlZCouIEkgc3VzcGVjdCBgZGlza3NpemVfc3RvcmVgIGlzIHRoZSBrZXkuIE15IGludHVpdGlvbiBpcyB0ZWxsaW5nIG1lIHRoYXQgaXQncyB0aGUgb25lIHRoYXQgY2FsbHMgYHpjb21wX2NyZWF0ZWAgYW5kLCBieSBhc3NvY2lhdGlvbiwgcG90ZW50aWFsbHkgYHpyYW1fZGVzdHJveV9jb21wc2AuIEkgc2hvdWxkIHZlcmlmeSB0aGF0LiBBbHNvLCBiYXNlZCBvbiB0aGUgZnVuY3Rpb24gbmFtZXMsIGBjb21wX2FsZ29yaXRobV9zdG9yZWAgKmNvdWxkKiBhbHNvIHRyaWdnZXIgYHpjb21wX2NyZWF0ZWAuIFRoYXQgb25lIEknbGwgbmVlZCB0byBjaGVjayBjYXJlZnVsbHkuIExldCdzIHN0YXJ0IGJ5IGxvb2tpbmcgY2xvc2VseSBhdCBgY29tcF9hbGdvcml0aG1fc3RvcmVgLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMTIwMSwiT3V0cHV0VG9rZW5zIjozMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEyNiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0zMFQxMDowMTowMC45NDQ2OTQ0MDFaIiwiU2VxIjoxOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjUzMDg1NDc5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbXBfYWxnb3JpdGhtX3N0b3JlXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvYmxvY2svenJhbS9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmM9MTY1OT1zdGF0aWMgdm9pZCBjb21wX2FsZ29yaXRobV9zZXQoc3RydWN0IHpyYW0gKnpyYW0sIHUzMiBwcmlvLCBjb25zdCBjaGFyICphbGcpXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYy0xNjYzLVxcbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jOjE2NjQ6c3RhdGljIGludCBfX2NvbXBfYWxnb3JpdGhtX3N0b3JlKHN0cnVjdCB6cmFtICp6cmFtLCB1MzIgcHJpbywgY29uc3QgY2hhciAqYnVmKVxcbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jLTE2NjUte1xcbi0tXFxuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmM9MTgwMT1zdGF0aWMgc3NpemVfdCBjb21wX2FsZ29yaXRobV9zaG93KHN0cnVjdCBkZXZpY2UgKmRldixcXG4tLVxcbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jLTE4MTItXFxuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmM6MTgxMzpzdGF0aWMgc3NpemVfdCBjb21wX2FsZ29yaXRobV9zdG9yZShzdHJ1Y3QgZGV2aWNlICpkZXYsXFxuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmMtMTgxNC1cXHRcXHRcXHRcXHQgICAgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYy0xODIwLVxcbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jOjE4MjE6XFx0cmV0ID0gX19jb21wX2FsZ29yaXRobV9zdG9yZSh6cmFtLCBaUkFNX1BSSU1BUllfQ09NUCwgYnVmKTtcXG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYy0xODIyLVxcdHJldHVybiByZXQgPyByZXQgOiBsZW47XFxuLS1cXG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYz0xODI2PXN0YXRpYyBzc2l6ZV90IHJlY29tcF9hbGdvcml0aG1fc2hvdyhzdHJ1Y3QgZGV2aWNlICpkZXYsXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYy0xODQ0LVxcbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jOjE4NDU6c3RhdGljIHNzaXplX3QgcmVjb21wX2FsZ29yaXRobV9zdG9yZShzdHJ1Y3QgZGV2aWNlICpkZXYsXFxuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmMtMTg0Ni1cXHRcXHRcXHRcXHQgICAgICBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0cixcXG4tLVxcbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jLTE4ODEtXFxuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmM6MTg4MjpcXHRyZXQgPSBfX2NvbXBfYWxnb3JpdGhtX3N0b3JlKHpyYW0sIHByaW8sIGFsZyk7XFxuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmMtMTg4My1cXHRyZXR1cm4gcmV0ID8gcmV0IDogbGVuO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0zMFQxMDowMTowMC45OTc3ODYzOTlaIiwiU2VxIjoxOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzI5NTY4NjE0OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgbGlrZSB5b3Vyc2VsZjpcblxuKipBbmFseXppbmcgdGhlIEFsZ29yaXRobSBTdG9yZSoqXG5cbkFscmlnaHQsIGxldCdzIGRpdmUgaW50byB0aGlzLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gaW1tZWRpYXRlbHkgZXhhbWluZSB0aGUgYF9fY29tcF9hbGdvcml0aG1fc3RvcmVgLiBUaGF0J3Mgd2hlcmUgSSB3b3VsZCBleHBlY3QgdGhlIGNvcmUgb2YgdGhpcyB3aG9sZSB0aGluZyB0byBsaXZlLCB3b3VsZG4ndCB5b3U/IFRoaXMgaXMgdGhlIGNlbnRyYWwgcmVwb3NpdG9yeSwgdGhlIG9wZXJhdGlvbmFsIGhlYXJ0IG9mIHRoZSBzeXN0ZW0gd2hlbiBpdCBjb21lcyB0byBjb21wdXRhdGlvbi4gTXkgaW1tZWRpYXRlIGluc3RpbmN0IGlzIHRvIGxvb2sgYXQgaG93IGl0J3Mgc3RydWN0dXJlZCwgaXRzIGFjY2VzcyBtZXRob2RzLCBhbmQsIG9mIGNvdXJzZSwgdGhlIGFsZ29yaXRobXMgdGhlbXNlbHZlcy4gV2hhdCBraW5kIG9mIG1ldGFkYXRhIGRvZXMgaXQgaGF2ZT8gVmVyc2lvbmluZz8gRGVwZW5kZW5jeSBtYW5hZ2VtZW50PyBBcmUgdGhlIGFsZ29yaXRobXMgZHluYW1pY2FsbHkgbG9hZGVkIG9yIHN0YXRpY2FsbHkgbGlua2VkPyBBcmUgdGhlcmUgYW55IG9idmlvdXMgcGVyZm9ybWFuY2UgYm90dGxlbmVja3MgaW4gdGhlIHN0b3JlIGl0c2VsZj8gV2hhdCBhcmUgdGhlIGltcGxpY2F0aW9ucyBvZiB0aGUgc3RvcmUncyBkZXNpZ24gb24gc3lzdGVtIHNjYWxhYmlsaXR5IGFuZCBtYWludGFpbmFiaWxpdHk/IEknbSBhbHJlYWR5IGFudGljaXBhdGluZyBxdWVzdGlvbnMgYWJvdXQgcG90ZW50aWFsIGNvbmN1cnJlbmN5IGlzc3VlcyBhbmQgc2VjdXJpdHkgaW1wbGljYXRpb25zIGlmIHRoaXMgaXMgbm90IGhhbmRsZWQgY29ycmVjdGx5LiBUaGUgZGVzaWduIG9mIHRoaXMgc3RvcmUgaXMgcGFyYW1vdW50IHRvIHRoZSBlbnRpcmUgb3BlcmF0aW9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMjE3NywiT3V0cHV0VG9rZW5zIjozMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMwVDEwOjAxOjA0LjI5MzQ3NTc4OFoiLCJTZXEiOjIwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDgxMjQxMTksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiX19jb21wX2FsZ29yaXRobV9zdG9yZVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL2Jsb2NrL3pyYW0vXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jPTE2NTk9c3RhdGljIHZvaWQgY29tcF9hbGdvcml0aG1fc2V0KHN0cnVjdCB6cmFtICp6cmFtLCB1MzIgcHJpbywgY29uc3QgY2hhciAqYWxnKVxcbi0tXFxuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmMtMTY2My1cXG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYzoxNjY0OnN0YXRpYyBpbnQgX19jb21wX2FsZ29yaXRobV9zdG9yZShzdHJ1Y3QgenJhbSAqenJhbSwgdTMyIHByaW8sIGNvbnN0IGNoYXIgKmJ1ZilcXG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYy0xNjY1LXtcXG4tLVxcbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jPTE4MTM9c3RhdGljIHNzaXplX3QgY29tcF9hbGdvcml0aG1fc3RvcmUoc3RydWN0IGRldmljZSAqZGV2LFxcbi0tXFxuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmMtMTgyMC1cXG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYzoxODIxOlxcdHJldCA9IF9fY29tcF9hbGdvcml0aG1fc3RvcmUoenJhbSwgWlJBTV9QUklNQVJZX0NPTVAsIGJ1Zik7XFxuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmMtMTgyMi1cXHRyZXR1cm4gcmV0ID8gcmV0IDogbGVuO1xcbi0tXFxuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmM9MTg0NT1zdGF0aWMgc3NpemVfdCByZWNvbXBfYWxnb3JpdGhtX3N0b3JlKHN0cnVjdCBkZXZpY2UgKmRldixcXG4tLVxcbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jLTE4ODEtXFxuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmM6MTg4MjpcXHRyZXQgPSBfX2NvbXBfYWxnb3JpdGhtX3N0b3JlKHpyYW0sIHByaW8sIGFsZyk7XFxuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmMtMTg4My1cXHRyZXR1cm4gcmV0ID8gcmV0IDogbGVuO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0zMFQxMDowMTowNC4zNDE2MDcxNTdaIiwiU2VxIjoyMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MjczMjU1NjQzMSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMuIEhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBhcyBpZiB0aGV5J3JlIG15IG93bjpcblxuKipJbnZlc3RpZ2F0aW5nIHRoZSBDb3JlIEZ1bmN0aW9uYWxpdHkqKlxuXG5BbHJpZ2h0LCB0aW1lIHRvIGdldCB0byB0aGUgaGVhcnQgb2YgdGhpcy4gTXkgZm9jdXMgaXMgaW1tZWRpYXRlbHkgZHJhd24gdG8gdGhhdCBgX19jb21wX2FsZ29yaXRobV9zdG9yZWAg4oCTIHRoYXQgc291bmRzIGxpa2UgYSBrZXkgY29tcG9uZW50LCBwcm9iYWJseSBob2xkaW5nIHRoZSBjb3JlIGxvZ2ljIGZvciB0aGUgY29tcGFyYXRpdmUgYWxnb3JpdGhtLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0IGl0cyBmdW5jdGlvbiBpcywgd2hhdCBpdCdzIHJlc3BvbnNpYmxlIGZvciwgYW5kIGhvdyBpdCdzIHN0cnVjdHVyZWQuIEtub3dpbmcgdGhpcyB3aWxsIGdpdmUgbWUgYSBzb2xpZCBmb3VuZGF0aW9uIGZvciBldmFsdWF0aW5nIGl0cyBvdmVyYWxsIGRlc2lnbiBhbmQgaG93IGl0J3MgaW50ZWdyYXRlZCB3aXRoaW4gdGhlIGxhcmdlciBzeXN0ZW0uIExldCdzIHNlZSB3aGF0J3Mgd2hhdC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTI4MjEsIk91dHB1dFRva2VucyI6NDIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0zMFQxMDowMTowNy4wNzQxNjY3MzhaIiwiU2VxIjoyMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTI3NjgwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDE2NjQsXG4gIFwiTGluZUNvdW50XCI6IDMwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjE2NjQ6XFx0c3RhdGljIGludCBfX2NvbXBfYWxnb3JpdGhtX3N0b3JlKHN0cnVjdCB6cmFtICp6cmFtLCB1MzIgcHJpbywgY29uc3QgY2hhciAqYnVmKVxcbjE2NjU6XFx0e1xcbjE2NjY6XFx0XFx0Y29uc3QgY2hhciAqYWxnO1xcbjE2Njc6XFx0XFx0c2l6ZV90IHN6O1xcbjE2Njg6XFx0XFxuMTY2OTpcXHRcXHRzeiA9IHN0cmxlbihidWYpO1xcbjE2NzA6XFx0XFx0aWYgKHN6IFxcdTAwM2U9IFpSQU1fTUFYX0FMR09fTkFNRV9TWilcXG4xNjcxOlxcdFxcdFxcdHJldHVybiAtRTJCSUc7XFxuMTY3MjpcXHRcXG4xNjczOlxcdFxcdGFsZyA9IHpjb21wX2xvb2t1cF9iYWNrZW5kX25hbWUoYnVmKTtcXG4xNjc0OlxcdFxcdGlmICghYWxnKVxcbjE2NzU6XFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuMTY3NjpcXHRcXG4xNjc3OlxcdFxcdGd1YXJkKHJ3c2VtX3dyaXRlKShcXHUwMDI2enJhbS1cXHUwMDNlZGV2X2xvY2spO1xcbjE2Nzg6XFx0XFx0aWYgKGluaXRfZG9uZSh6cmFtKSkge1xcbjE2Nzk6XFx0XFx0XFx0cHJfaW5mbyhcXFwiQ2FuJ3QgY2hhbmdlIGFsZ29yaXRobSBmb3IgaW5pdGlhbGl6ZWQgZGV2aWNlXFxcXG5cXFwiKTtcXG4xNjgwOlxcdFxcdFxcdHJldHVybiAtRUJVU1k7XFxuMTY4MTpcXHRcXHR9XFxuMTY4MjpcXHRcXG4xNjgzOlxcdFxcdGNvbXBfYWxnb3JpdGhtX3NldCh6cmFtLCBwcmlvLCBhbGcpO1xcbjE2ODQ6XFx0XFx0cmV0dXJuIDA7XFxuMTY4NTpcXHR9XFxuMTY4NjpcXHRcXG4xNjg3OlxcdHN0YXRpYyB2b2lkIGNvbXBfcGFyYW1zX3Jlc2V0KHN0cnVjdCB6cmFtICp6cmFtLCB1MzIgcHJpbylcXG4xNjg4OlxcdHtcXG4xNjg5OlxcdFxcdHN0cnVjdCB6Y29tcF9wYXJhbXMgKnBhcmFtcyA9IFxcdTAwMjZ6cmFtLVxcdTAwM2VwYXJhbXNbcHJpb107XFxuMTY5MDpcXHRcXG4xNjkxOlxcdFxcdHZmcmVlKHBhcmFtcy1cXHUwMDNlZGljdCk7XFxuMTY5MjpcXHRcXHRwYXJhbXMtXFx1MDAzZWxldmVsID0gWkNPTVBfUEFSQU1fTk9UX1NFVDtcXG4xNjkzOlxcdFxcdHBhcmFtcy1cXHUwMDNlZGVmbGF0ZS53aW5iaXRzID0gWkNPTVBfUEFSQU1fTk9UX1NFVDtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMzBUMTA6MDE6MDcuMDc0Mjk1NTY4WiIsIlNlcSI6MjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ2ODgxNDUyNTMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgcHJlc2VudGVkIGFzIG15IG93biBtZW50YWwgcHJvY2VzcywgZ2l2ZW4gbXkgZXhwZXJ0aXNlOlxuXG4qKkFsZ29yaXRobSBOYW1pbmcgYW5kIEluaXRpYWxpemF0aW9uKipcblxuQWxyaWdodCwgc28gdGhpcyBsaW5lIG9mIGNvZGUsIG9yIHRoaXMgc2VjdGlvbiBvZiB0aGUgcHJvY2VzcywgaXMgcHJldHR5IHN0cmFpZ2h0Zm9yd2FyZC4gSXQgbG9va3MgbGlrZSBpdHMgc29sZSBwdXJwb3NlIGlzIHRvIGFzc2lnbiB0aGUgbmFtZSBvZiB0aGUgYWxnb3JpdGhtLiBOb3RoaW5nIGZhbmN5LCBqdXN0IHNldHRpbmcgYSBzdHJpbmcgdmFsdWUuIFRoZSByZWFsIG1lYXQgb2YgdGhlIG9wZXJhdGlvbiwgdGhlIGFjdHVhbCBpbnN0YW50aWF0aW9uIGFuZCBzZXR1cCBvZiB0aGUgYWxnb3JpdGhtLCBoYXBwZW5zIGVsc2V3aGVyZS4gVGhlIGNvbW1lbnQgZXhwbGljaXRseSBkaXJlY3RzIG15IGF0dGVudGlvbiB0byBgZGlza3NpemVfc3RvcmVgLiBUaGF0J3Mgd2hlcmUgSSBuZWVkIHRvIGZvY3VzIG15IGVmZm9ydHMuIEknbGwgbmVlZCB0byBleGFtaW5lIGBkaXNrc2l6ZV9zdG9yZWAgY2xvc2VseSB0byB1bmRlcnN0YW5kIGhvdyB0aGlzIGFsZ29yaXRobSBpcyBhY3R1YWxseSBicm91Z2h0IHRvIGxpZmUuIExldCdzIGdldCByaWdodCB0byBpdC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTM0NjcsIk91dHB1dFRva2VucyI6NDIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMwVDEwOjAxOjExLjc2MjQ0MzEwMVoiLCJTZXEiOjI0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMzEwNzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmNcIixcbiAgXCJGaXJzdExpbmVcIjogMjg1OSxcbiAgXCJMaW5lQ291bnRcIjogNTBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMjg1OTpcXHRzdGF0aWMgc3NpemVfdCBkaXNrc2l6ZV9zdG9yZShzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLFxcbjI4NjA6XFx0XFx0XFx0XFx0ICAgICAgY29uc3QgY2hhciAqYnVmLCBzaXplX3QgbGVuKVxcbjI4NjE6XFx0e1xcbjI4NjI6XFx0XFx0dTY0IGRpc2tzaXplO1xcbjI4NjM6XFx0XFx0c3RydWN0IHpjb21wICpjb21wO1xcbjI4NjQ6XFx0XFx0c3RydWN0IHpyYW0gKnpyYW0gPSBkZXZfdG9fenJhbShkZXYpO1xcbjI4NjU6XFx0XFx0aW50IGVycjtcXG4yODY2OlxcdFxcdHUzMiBwcmlvO1xcbjI4Njc6XFx0XFxuMjg2ODpcXHRcXHRkaXNrc2l6ZSA9IG1lbXBhcnNlKGJ1ZiwgTlVMTCk7XFxuMjg2OTpcXHRcXHRpZiAoIWRpc2tzaXplKVxcbjI4NzA6XFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuMjg3MTpcXHRcXG4yODcyOlxcdFxcdGd1YXJkKHJ3c2VtX3dyaXRlKShcXHUwMDI2enJhbS1cXHUwMDNlZGV2X2xvY2spO1xcbjI4NzM6XFx0XFx0aWYgKGluaXRfZG9uZSh6cmFtKSkge1xcbjI4NzQ6XFx0XFx0XFx0cHJfaW5mbyhcXFwiQ2Fubm90IGNoYW5nZSBkaXNrc2l6ZSBmb3IgaW5pdGlhbGl6ZWQgZGV2aWNlXFxcXG5cXFwiKTtcXG4yODc1OlxcdFxcdFxcdHJldHVybiAtRUJVU1k7XFxuMjg3NjpcXHRcXHR9XFxuMjg3NzpcXHRcXG4yODc4OlxcdFxcdGRpc2tzaXplID0gUEFHRV9BTElHTihkaXNrc2l6ZSk7XFxuMjg3OTpcXHRcXHRpZiAoIXpyYW1fbWV0YV9hbGxvYyh6cmFtLCBkaXNrc2l6ZSkpXFxuMjg4MDpcXHRcXHRcXHRyZXR1cm4gLUVOT01FTTtcXG4yODgxOlxcdFxcbjI4ODI6XFx0XFx0Zm9yIChwcmlvID0gWlJBTV9QUklNQVJZX0NPTVA7IHByaW8gXFx1MDAzYyBaUkFNX01BWF9DT01QUzsgcHJpbysrKSB7XFxuMjg4MzpcXHRcXHRcXHRpZiAoIXpyYW0tXFx1MDAzZWNvbXBfYWxnc1twcmlvXSlcXG4yODg0OlxcdFxcdFxcdFxcdGNvbnRpbnVlO1xcbjI4ODU6XFx0XFxuMjg4NjpcXHRcXHRcXHRjb21wID0gemNvbXBfY3JlYXRlKHpyYW0tXFx1MDAzZWNvbXBfYWxnc1twcmlvXSxcXG4yODg3OlxcdFxcdFxcdFxcdFxcdCAgICBcXHUwMDI2enJhbS1cXHUwMDNlcGFyYW1zW3ByaW9dKTtcXG4yODg4OlxcdFxcdFxcdGlmIChJU19FUlIoY29tcCkpIHtcXG4yODg5OlxcdFxcdFxcdFxcdHByX2VycihcXFwiQ2Fubm90IGluaXRpYWxpc2UgJXMgY29tcHJlc3NpbmcgYmFja2VuZFxcXFxuXFxcIixcXG4yODkwOlxcdFxcdFxcdFxcdCAgICAgICB6cmFtLVxcdTAwM2Vjb21wX2FsZ3NbcHJpb10pO1xcbjI4OTE6XFx0XFx0XFx0XFx0ZXJyID0gUFRSX0VSUihjb21wKTtcXG4yODkyOlxcdFxcdFxcdFxcdGdvdG8gb3V0X2ZyZWVfY29tcHM7XFxuMjg5MzpcXHRcXHRcXHR9XFxuMjg5NDpcXHRcXG4yODk1OlxcdFxcdFxcdHpyYW0tXFx1MDAzZWNvbXBzW3ByaW9dID0gY29tcDtcXG4yODk2OlxcdFxcdH1cXG4yODk3OlxcdFxcdHpyYW0tXFx1MDAzZWRpc2tzaXplID0gZGlza3NpemU7XFxuMjg5ODpcXHRcXHRzZXRfY2FwYWNpdHlfYW5kX25vdGlmeSh6cmFtLVxcdTAwM2VkaXNrLCB6cmFtLVxcdTAwM2VkaXNrc2l6ZSBcXHUwMDNlXFx1MDAzZSBTRUNUT1JfU0hJRlQpO1xcbjI4OTk6XFx0XFxuMjkwMDpcXHRcXHRyZXR1cm4gbGVuO1xcbjI5MDE6XFx0XFxuMjkwMjpcXHRvdXRfZnJlZV9jb21wczpcXG4yOTAzOlxcdFxcdHpyYW1fZGVzdHJveV9jb21wcyh6cmFtKTtcXG4yOTA0OlxcdFxcdHpyYW1fbWV0YV9mcmVlKHpyYW0sIGRpc2tzaXplKTtcXG4yOTA1OlxcdFxcdHJldHVybiBlcnI7XFxuMjkwNjpcXHR9XFxuMjkwNzpcXHRcXG4yOTA4OlxcdHN0YXRpYyBzc2l6ZV90IHJlc2V0X3N0b3JlKHN0cnVjdCBkZXZpY2UgKmRldixcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMzBUMTA6MDE6MTEuNzYyNTc1NDQxWiIsIlNlcSI6MjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM2MTk0MzMzMjgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi5cblxuKipJbnZlc3RpZ2F0aW5nIHRoZSBaUkFNIENvbXByZXNzaW9uIEZsb3cqKlxuXG5SaWdodCwgc28gYGRpc2tzaXplX3N0b3JlYCBpcyB0aGUga2V5IGZ1bmN0aW9uIGhlcmU7IGl0J3MgdGhlIG9uZSB0aGF0IGtpY2tzIG9mZiBib3RoIGB6Y29tcF9jcmVhdGVgIGFuZCBgenJhbV9kZXN0cm95X2NvbXBzYC4gVGhhdCBtYWtlcyBzZW5zZSBpbiB0ZXJtcyBvZiB0aGUgbGlmZWN5Y2xlLCBJIHN1cHBvc2UuIEFuZCBpdCBzZWVtcyB0aGF0IGBkZWZsYXRlX3NldHVwX3BhcmFtc2AgZ2V0cyBjYWxsZWQgd2l0aGluIGB6Y29tcF9jcmVhdGVgLiBJbnRlcmVzdGluZy5cblxuTm93LCBJJ20gZ2V0dGluZyBjdXJpb3VzIGFib3V0IHRoZSBjb21wcmVzc2lvbiBwYXJhbWV0ZXJzLiBTcGVjaWZpY2FsbHksIGNhbiB3ZSBkaXJlY3RseSBjb250cm9sIGB3aW5iaXRzYD8gS25vd2luZyB0aGF0IHdvdWxkIGdpdmUgbWUgYSBkZWVwZXIgbGV2ZWwgb2YgY29udHJvbCBhbmQgcG90ZW50aWFsbHkgb3B0aW1pemUgdGhlIGNvbXByZXNzaW9uIGJlaGF2aW9yLiBUaW1lIHRvIGdvIGRpZ2dpbmcgdGhyb3VnaCB0aGUgY29kZSBhbmQgc2VlIGlmIHRoZXJlJ3MgYSBtZWNoYW5pc20gdG8gc2V0IHRoYXQgcGFyYW1ldGVyLiBJIHNob3VsZCBiZSBhYmxlIHRvIGZpZ3VyZSBpdCBvdXQgd2l0aCBhIGxpdHRsZSBiaXQgb2Ygc2VhcmNoaW5nLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNDQzMiwiT3V0cHV0VG9rZW5zIjoyOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjYzLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMzBUMTA6MDE6MTUuMzgyMDExMzc5WiIsIlNlcSI6MjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1NTIzOTc0OCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ3aW5iaXRzXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvYmxvY2svenJhbS9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9ibG9jay96cmFtL2JhY2tlbmRfZGVmbGF0ZS5jPTIzPXN0YXRpYyBpbnQgZGVmbGF0ZV9zZXR1cF9wYXJhbXMoc3RydWN0IHpjb21wX3BhcmFtcyAqcGFyYW1zKVxcbi0tXFxuZHJpdmVycy9ibG9jay96cmFtL2JhY2tlbmRfZGVmbGF0ZS5jLTI2LVxcdFxcdHBhcmFtcy1cXHUwMDNlbGV2ZWwgPSBaX0RFRkFVTFRfQ09NUFJFU1NJT047XFxuZHJpdmVycy9ibG9jay96cmFtL2JhY2tlbmRfZGVmbGF0ZS5jOjI3OlxcdGlmIChwYXJhbXMtXFx1MDAzZWRlZmxhdGUud2luYml0cyA9PSBaQ09NUF9QQVJBTV9OT1RfU0VUKSB7XFxuZHJpdmVycy9ibG9jay96cmFtL2JhY2tlbmRfZGVmbGF0ZS5jOjI4OlxcdFxcdHBhcmFtcy1cXHUwMDNlZGVmbGF0ZS53aW5iaXRzID0gREVGTEFURV9ERUZfV0lOQklUUztcXG5kcml2ZXJzL2Jsb2NrL3pyYW0vYmFja2VuZF9kZWZsYXRlLmMtMjktXFx0fSBlbHNlIHtcXG5kcml2ZXJzL2Jsb2NrL3pyYW0vYmFja2VuZF9kZWZsYXRlLmM6MzA6XFx0XFx0czMyIHdiID0gcGFyYW1zLVxcdTAwM2VkZWZsYXRlLndpbmJpdHM7XFxuZHJpdmVycy9ibG9jay96cmFtL2JhY2tlbmRfZGVmbGF0ZS5jLTMxLVxcbi0tXFxuZHJpdmVycy9ibG9jay96cmFtL2JhY2tlbmRfZGVmbGF0ZS5jPTU3PXN0YXRpYyBpbnQgZGVmbGF0ZV9jcmVhdGUoc3RydWN0IHpjb21wX3BhcmFtcyAqcGFyYW1zLCBzdHJ1Y3QgemNvbXBfY3R4ICpjdHgpXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL3pyYW0vYmFja2VuZF9kZWZsYXRlLmMtNjctXFx0Y3R4LVxcdTAwM2Vjb250ZXh0ID0gemN0eDtcXG5kcml2ZXJzL2Jsb2NrL3pyYW0vYmFja2VuZF9kZWZsYXRlLmM6Njg6XFx0c3ogPSB6bGliX2RlZmxhdGVfd29ya3NwYWNlc2l6ZShwYXJhbXMtXFx1MDAzZWRlZmxhdGUud2luYml0cywgTUFYX01FTV9MRVZFTCk7XFxuZHJpdmVycy9ibG9jay96cmFtL2JhY2tlbmRfZGVmbGF0ZS5jLTY5LVxcdHpjdHgtXFx1MDAzZWNjdHgud29ya3NwYWNlID0gdnphbGxvYyhzeik7XFxuLS1cXG5kcml2ZXJzL2Jsb2NrL3pyYW0vYmFja2VuZF9kZWZsYXRlLmMtNzMtXFx0cmV0ID0gemxpYl9kZWZsYXRlSW5pdDIoXFx1MDAyNnpjdHgtXFx1MDAzZWNjdHgsIHBhcmFtcy1cXHUwMDNlbGV2ZWwsIFpfREVGTEFURUQsXFxuZHJpdmVycy9ibG9jay96cmFtL2JhY2tlbmRfZGVmbGF0ZS5jOjc0OlxcdFxcdFxcdFxcdHBhcmFtcy1cXHUwMDNlZGVmbGF0ZS53aW5iaXRzLCBERUZMQVRFX0RFRl9NRU1MRVZFTCxcXG5kcml2ZXJzL2Jsb2NrL3pyYW0vYmFja2VuZF9kZWZsYXRlLmMtNzUtXFx0XFx0XFx0XFx0Wl9ERUZBVUxUX1NUUkFURUdZKTtcXG4tLVxcbmRyaXZlcnMvYmxvY2svenJhbS9iYWNrZW5kX2RlZmxhdGUuYy04My1cXG5kcml2ZXJzL2Jsb2NrL3pyYW0vYmFja2VuZF9kZWZsYXRlLmM6ODQ6XFx0cmV0ID0gemxpYl9pbmZsYXRlSW5pdDIoXFx1MDAyNnpjdHgtXFx1MDAzZWRjdHgsIHBhcmFtcy1cXHUwMDNlZGVmbGF0ZS53aW5iaXRzKTtcXG5kcml2ZXJzL2Jsb2NrL3pyYW0vYmFja2VuZF9kZWZsYXRlLmMtODUtXFx0aWYgKHJldCAhPSBaX09LKVxcbi0tXFxuZHJpdmVycy9ibG9jay96cmFtL3pjb21wLmg9MTA9c3RydWN0IGRlZmxhdGVfcGFyYW1zIHtcXG5kcml2ZXJzL2Jsb2NrL3pyYW0vemNvbXAuaDoxMTpcXHRzMzIgd2luYml0cztcXG5kcml2ZXJzL2Jsb2NrL3pyYW0vemNvbXAuaC0xMi19O1xcbi0tXFxuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmM9MTY4Nz1zdGF0aWMgdm9pZCBjb21wX3BhcmFtc19yZXNldChzdHJ1Y3QgenJhbSAqenJhbSwgdTMyIHByaW8pXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYy0xNjkyLVxcdHBhcmFtcy1cXHUwMDNlbGV2ZWwgPSBaQ09NUF9QQVJBTV9OT1RfU0VUO1xcbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jOjE2OTM6XFx0cGFyYW1zLVxcdTAwM2VkZWZsYXRlLndpbmJpdHMgPSBaQ09NUF9QQVJBTV9OT1RfU0VUO1xcbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jLTE2OTQtXFx0cGFyYW1zLVxcdTAwM2VkaWN0X3N6ID0gMDtcXG4tLVxcbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jPTE2OTg9c3RhdGljIGludCBjb21wX3BhcmFtc19zdG9yZShzdHJ1Y3QgenJhbSAqenJhbSwgdTMyIHByaW8sIHMzMiBsZXZlbCxcXG4tLVxcbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jLTE3MTctXFx0enJhbS1cXHUwMDNlcGFyYW1zW3ByaW9dLmxldmVsID0gbGV2ZWw7XFxuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmM6MTcxODpcXHR6cmFtLVxcdTAwM2VwYXJhbXNbcHJpb10uZGVmbGF0ZS53aW5iaXRzID0gZGVmbGF0ZV9wYXJhbXMtXFx1MDAzZXdpbmJpdHM7XFxuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmMtMTcxOS1cXHRyZXR1cm4gMDtcXG4tLVxcbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jPTE3MjI9c3RhdGljIHNzaXplX3QgYWxnb3JpdGhtX3BhcmFtc19zdG9yZShzdHJ1Y3QgZGV2aWNlICpkZXYsXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYy0xNzMzLVxcbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jOjE3MzQ6XFx0ZGVmbGF0ZV9wYXJhbXMud2luYml0cyA9IFpDT01QX1BBUkFNX05PVF9TRVQ7XFxuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmMtMTczNS1cXG4tLVxcbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jLTE3NjctXFxuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmM6MTc2ODpcXHRcXHRpZiAoIXN0cmNtcChwYXJhbSwgXFxcImRlZmxhdGUud2luYml0c1xcXCIpKSB7XFxuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmM6MTc2OTpcXHRcXHRcXHRyZXQgPSBrc3RydG9pbnQodmFsLCAxMCwgXFx1MDAyNmRlZmxhdGVfcGFyYW1zLndpbmJpdHMpO1xcbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jLTE3NzAtXFx0XFx0XFx0aWYgKHJldClcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMzBUMTA6MDE6MTUuNDM3MjUyOTc3WiIsIlNlcSI6MjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjc1MDgzMzM4OTQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgRnV6emluZyBTdHJhdGVneSBmb3IgWlJBTSBQYXJhbWV0ZXJzKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgaG93IGBhbGdvcml0aG1fcGFyYW1zX3N0b3JlYCBpcyB1c2VkIHRvIGluZmx1ZW5jZSBgd2luYml0c2AuICBUaGlzIGNsZWFybHkgbWFrZXMgaXQgYSBwcmltZSB0YXJnZXQgZm9yIGZ1enppbmcuICBJIG5lZWQgdG8gaWRlbnRpZnkgdGhlIGtleSBmdW5jdGlvbnMgdG8gZm9jdXMgb24sIGtlZXBpbmcgdGhlIGd1aWRlbGluZXMgaW4gbWluZC5cblxuSW5pdGlhbGx5LCBJIGlkZW50aWZpZWQgYGRlZmxhdGVfc2V0dXBfcGFyYW1zYCBhcyByZWxldmFudCwgYnV0IGl0J3MgYSBgc3RhdGljYCBmdW5jdGlvbiwgc28gSSBuZWVkIHRvIHRoaW5rIGNhcmVmdWxseS4gSXQncyBhc3NpZ25lZCB0byBgc2V0dXBfcGFyYW1zYCB3aGljaCBpcyBhIGZ1bmN0aW9uIHBvaW50ZXIgaW4gYHpjb21wX29wc2Agc28gdGhlIGNvbXBpbGVyIHdvbid0IG5lY2Vzc2FyaWx5IGlubGluZSBpdCwgd2hpY2ggd291bGQgbWFrZSBpdCBhbiBpbXBvcnRhbnQgdGFyZ2V0LiBJdCdzIGJlc3QgcHJhY3RpY2UsIGFuZCB0aGUgcHJvbXB0IHNheXMsIHRvIGZvY3VzIG9uIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyByYXRoZXIgdGhhbiBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9ucy4gSSBjYW4gbG9vayBpbnRvIGB6Y29tcF9jcmVhdGVgIGFuZCBgZGlza3NpemVfc3RvcmVgLCBgYWxnb3JpdGhtX3BhcmFtc19zdG9yZWAsIGFuZCBgY29tcF9hbGdvcml0aG1fc3RvcmVgLiBJIGFsc28gaWRlbnRpZmllZCBgenJhbV9kZXN0cm95X2NvbXBzYCwgYGRpc2tzaXplX3N0b3JlYCwgYW5kIGB6cmFtX3Jlc2V0X2RldmljZWAsIGFuZCBgenJhbV9yZW1vdmVgLlxuXG5Ob3csIHJlZ2FyZGluZyBgZGVmbGF0ZV9zZXR1cF9wYXJhbXNgLCBJJ20gcGF1c2luZy4gSXQgaXMgc3RhdGljLCBhbmQgaXQgaXMgYXNzaWduZWQgdG8gYSBmdW5jdGlvbiBwb2ludGVyLCBhbmQgdGhlIHByb21wdCBzdGF0ZXMgdGhhdCBJIHNob3VsZCBmb2N1cyBvbiBub24tc3RhdGljLCBub24taW5saW5lZCBBUElzIHJhdGhlciB0aGFuIGlubGluZWQgaW50ZXJuYWwgZnVuY3Rpb25zLiBTaW5jZSB0aGUgcHJvbXB0IGluZGljYXRlcyB0aGF0IEkgc2hvdWxkIGZvY3VzIG9uIHRoZSBzeXNmcyBzdG9yZSBlbnRyeSBwb2ludHMsIGhlcmUncyBteSB1cGRhdGVkIGxpc3Q6XG5cbiogICBgZGlza3NpemVfc3RvcmVgXG4qICAgYGFsZ29yaXRobV9wYXJhbXNfc3RvcmVgXG4qICAgYHJlc2V0X3N0b3JlYFxuKiAgIGBjb21wX2FsZ29yaXRobV9zdG9yZWBcbiogICBgcmVjb21wX2FsZ29yaXRobV9zdG9yZWBcblxuSSdsbCBkb3VibGUtY2hlY2sgdGhhdCB0aGVzZSBzeXNmcyBzdG9yZSBmdW5jdGlvbnMgYXJlIHN0YXRpYy4gVGhleSBhcmUsIGJ1dCB0aGV5J3JlIHRoZSBBUEkgZW50cnkgcG9pbnRzIGZvciB0aGlzIFpSQU0gZHJpdmVyLCBzbyBldmVuIHRob3VnaCB0aGV5J3JlIHN0YXRpYywgdGhleSBhcmUgdGhlIG9uZXMgSSB3YW50IHRvIHRhcmdldC4gSSBzaG91bGQgYWxzbyBjaGVjayBpZiB0aGVyZSBhcmUgYW55IG5vbi1zdGF0aWMgZnVuY3Rpb25zIGF2YWlsYWJsZSwganVzdCBpbiBjYXNlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNTg2OCwiT3V0cHV0VG9rZW5zIjozMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQxOCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0zMFQxMDowMToyMi45NDU1ODk3MDFaIiwiU2VxIjoyOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEwNjI1NTEzNTksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZGlza3NpemVfc3RvcmVcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9ibG9jay96cmFtL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYz0yODQyPXN0YXRpYyB2b2lkIHpyYW1fcmVzZXRfZGV2aWNlKHN0cnVjdCB6cmFtICp6cmFtKVxcbi0tXFxuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmMtMjg1OC1cXG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYzoyODU5OnN0YXRpYyBzc2l6ZV90IGRpc2tzaXplX3N0b3JlKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsXFxuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmMtMjg2MC1cXHRcXHRcXHQgICAgICBjb25zdCBjaGFyICpidWYsIHNpemVfdCBsZW4pXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYz0zMTEwPXN0YXRpYyBpbnQgenJhbV9yZW1vdmUoc3RydWN0IHpyYW0gKnpyYW0pXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYy0zMTQ2LVxcdC8qXFxuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmM6MzE0NzpcXHQgKiBkaXNrc2l6ZV9zdG9yZSgpIG1heSBiZSBjYWxsZWQgaW4gYmV0d2VlbiB6cmFtX3Jlc2V0X2RldmljZSgpXFxuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmMtMzE0OC1cXHQgKiBhbmQgZGVsX2dlbmRpc2soKSwgc28gcnVuIHRoZSBsYXN0IHJlc2V0IHRvIGF2b2lkIGxlYWtpbmdcXG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYzozMTQ5OlxcdCAqIGFueXRoaW5nIGFsbG9jYXRlZCB3aXRoIGRpc2tzaXplX3N0b3JlKClcXG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYy0zMTUwLVxcdCAqL1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0zMFQxMDowMToyNC4wMDgxNDU4OVoiLCJTZXEiOjI5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozOTMxMzk1MjgwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgc3VtbWFyeSwgYXMgdGhvdWdoIEknbSB0aGlua2luZyB0aHJvdWdoIHRoaXMgcHJvY2VzczpcblxuKipTdGF0aWMgdnMuIE5vbi1TdGF0aWMg4oCTIFRpbWUgdG8gSW52ZXN0aWdhdGUqKlxuXG5Pa2F5LCBzbyBJJ20gbm90aWNpbmcgc29tZXRoaW5nIGhlcmUuIEknbSBzZWVpbmcgYSBsb3Qgb2YgdGhlc2UgZWxlbWVudHMsIGFuZCB0aGV5IGFwcGVhciB0byBiZSAqc3RhdGljKi4gSG1tLCB0aGF0J3Mgbm90IHdoYXQgSSdkIGV4cGVjdCBnaXZlbiB0aGUgY29udGV4dC4gTGV0J3MgZGlnIGluIGEgYml0LiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcyB0byBjaGVjayBgemNvbXBfY3JlYXRlYC4gSSByZWNhbGwgdGhhdCBvbmUgYmVpbmcgKm5vbi1zdGF0aWMqLCBhbmQgdGhhdCdzIGV4YWN0bHkgdGhlIGtpbmQgb2YgdGhpbmcgSSdtIGxvb2tpbmcgYXQgdG8gc2VlIGlmIGl0IGlzIHRoZSBvdXRsaWVyLiBOb3cgbGV0J3Mgc2VlIHdoeS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTcwNzksIk91dHB1dFRva2VucyI6MzEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0zMFQxMDowMToyNy45Mzk1NDM0OFoiLCJTZXEiOjMwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6Mjc5NzM0MjE5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInpjb21wX2NyZWF0ZVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL2Jsb2NrL3pyYW0vXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvYmxvY2svenJhbS96Y29tcC5jPTIyNT12b2lkIHpjb21wX2Rlc3Ryb3koc3RydWN0IHpjb21wICpjb21wKVxcbi0tXFxuZHJpdmVycy9ibG9jay96cmFtL3pjb21wLmMtMjMyLVxcbmRyaXZlcnMvYmxvY2svenJhbS96Y29tcC5jOjIzMzpzdHJ1Y3QgemNvbXAgKnpjb21wX2NyZWF0ZShjb25zdCBjaGFyICphbGcsIHN0cnVjdCB6Y29tcF9wYXJhbXMgKnBhcmFtcylcXG5kcml2ZXJzL2Jsb2NrL3pyYW0vemNvbXAuYy0yMzQte1xcbi0tXFxuZHJpdmVycy9ibG9jay96cmFtL3pjb21wLmg9ODM9Y29uc3QgY2hhciAqemNvbXBfbG9va3VwX2JhY2tlbmRfbmFtZShjb25zdCBjaGFyICpjb21wKTtcXG5kcml2ZXJzL2Jsb2NrL3pyYW0vemNvbXAuaC04NC1cXG5kcml2ZXJzL2Jsb2NrL3pyYW0vemNvbXAuaDo4NTpzdHJ1Y3QgemNvbXAgKnpjb21wX2NyZWF0ZShjb25zdCBjaGFyICphbGcsIHN0cnVjdCB6Y29tcF9wYXJhbXMgKnBhcmFtcyk7XFxuZHJpdmVycy9ibG9jay96cmFtL3pjb21wLmgtODYtdm9pZCB6Y29tcF9kZXN0cm95KHN0cnVjdCB6Y29tcCAqY29tcCk7XFxuLS1cXG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYz0yODU5PXN0YXRpYyBzc2l6ZV90IGRpc2tzaXplX3N0b3JlKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYy0yODg1LVxcbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jOjI4ODY6XFx0XFx0Y29tcCA9IHpjb21wX2NyZWF0ZSh6cmFtLVxcdTAwM2Vjb21wX2FsZ3NbcHJpb10sXFxuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmMtMjg4Ny1cXHRcXHRcXHRcXHQgICAgXFx1MDAyNnpyYW0tXFx1MDAzZXBhcmFtc1twcmlvXSk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMwVDEwOjAxOjI4LjIxOTI4MjE2OFoiLCJTZXEiOjMxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxMjc2NDU0NDk4MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipGdXp6aW5nIFRhcmdldCBJZGVudGlmaWNhdGlvbjogWlJBTSBEZWZsYXRlIEJhY2tlbmQqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIE15IGdvYWwgaXMgdG8gZGV0ZXJtaW5lIHRoZSBiZXN0IGFwcHJvYWNoIGZvciBmdXp6aW5nIHRoZSBaUkFNIGRlZmxhdGUgYmFja2VuZC5cblxuRmlyc3QsIEknbSBub3RpbmcgdGhhdCBgemNvbXBfY3JlYXRlYCBpcyBub24tc3RhdGljLCB3aGlsZSBgenJhbV9yZXNldF9kZXZpY2VgLCBgemNvbXBfaW5pdGAsIGFuZCBgZGVmbGF0ZV9zZXR1cF9wYXJhbXNgIGFyZSBzdGF0aWMuIFRoaXMgaW1tZWRpYXRlbHkgcG9pbnRzIG1lIHRvd2FyZHMgZnVuY3Rpb25zIHRoYXQgbWlnaHQgYmUgbW9yZSByZWFkaWx5IGFjY2Vzc2libGUgdmlhIGV4dGVybmFsIGludGVyZmFjZXMuXG5cbkknbSBtYWtpbmcgYSBsaXN0OiBJIG5lZWQgdG8gY29uc2lkZXIgYHpjb21wX2NyZWF0ZWAgYW5kIGl0cyBjb3VudGVycGFydCBgemNvbXBfZGVzdHJveWAuIFRoZW4sIHRoaW5raW5nIGFib3V0IGhvdyBzeXprYWxsZXIgb3BlcmF0ZXPigJRpbnRlcmFjdGluZyB3aXRoIHN5c2ZzLCBuYW1lbHkgYnkgb3BlbmluZyBhbmQgd3JpdGluZyB0byBmaWxlc+KAlEkgcmVhbGl6ZSB0aGF0IGV2ZW4gaWYgZnVuY3Rpb25zIGxpa2UgYGRpc2tzaXplX3N0b3JlYCwgYGFsZ29yaXRobV9wYXJhbXNfc3RvcmVgLCBhbmQgYHJlc2V0X3N0b3JlYCBhcmUgKnN0YXRpYyosIHRoZXkgYXJlIHRoZSBlbnRyeSBwb2ludHMgdGhhdCBoYW5kbGUgaW5wdXQgZGF0YS4gVGhleSdyZSBjcml0aWNhbC5cblxuU28sIGhlcmUncyBteSB1cGRhdGVkIGxpc3Qgb2YgZnVuY3Rpb25zIHRvIHRhcmdldDpcblxuKiAgIGB6Y29tcF9jcmVhdGVgXG4qICAgYGRpc2tzaXplX3N0b3JlYFxuKiAgIGBhbGdvcml0aG1fcGFyYW1zX3N0b3JlYFxuKiAgIGByZXNldF9zdG9yZWBcbiogICBgenJhbV9yZXNldF9kZXZpY2VgXG4qICAgYHpyYW1fZGVzdHJveV9jb21wc2BcbiogICBgZGVmbGF0ZV9zZXR1cF9wYXJhbXNgXG5cbkknbSBkb3VibGUtY2hlY2tpbmcgdGhlIHN0YXRpYyBuYXR1cmUgb2YgYHpyYW1fZGVzdHJveV9jb21wc2AgYW5kIGBkZWZsYXRlX3NldHVwX3BhcmFtc2AgZm9yIGNvbmZpcm1hdGlvbiwganVzdCB0byBiZSBzdXJlLlxuXG5Ob3csIGxldCdzIGlkZW50aWZ5IHRoZSByZXF1aXJlZCBrZXJuZWwgY29uZmlncy4gV2UgZGVmaW5pdGVseSBuZWVkIGBaUkFNYCBhbmQgYFpSQU1fQkFDS0VORF9ERUZMQVRFYC4gSSdtIGNvbmZpcm1pbmcgdGhhdCB0aGVyZSBhcmVuJ3QgYW55IG90aGVyIGRlcGVuZGVuY2llcyB0aGF0IG1pZ2h0IGJlIHJlbGV2YW50OyBgWlJBTWAgZGVwZW5kcyBvbiBgQkxPQ0sgXHUwMDI2XHUwMDI2IFNZU0ZTIFx1MDAyNlx1MDAyNiBNTVVgIGFuZCBgWlJBTV9CQUNLRU5EX0RFRkxBVEVgIGRlcGVuZHMgb24gYFpSQU1gLiBUaGF0IHNlZW1zIHN0cmFpZ2h0Zm9yd2FyZC4gVGhlbiBjb25maXJtaW5nIHRoYXQgYFpSQU1fQkFDS0VORF9ERUZMQVRFYCBlbmFibGVzIHRoZSBkZWZsYXRlIGJhY2tlbmQsIHdoaWNoIGlzIGV4YWN0bHkgd2hhdCBJIGV4cGVjdC5cblxuT2theSwgbGV0J3MgYW5hbHl6ZSB0aGUgcmVsZXZhbnQgY29kZSBjaGFuZ2VzIGluIGB6cmFtX2Rydi5jYC4gVGhlIGRpZmYgc2hvd3MgdGhhdCBgY29tcF9hbGdvcml0aG1fc2V0YCBoYXMgYmVlbiBtb3ZlZCBmcm9tIGB6cmFtX3Jlc2V0X2RldmljZWAgdG8gYHpyYW1fZGVzdHJveV9jb21wc2AuIFRoYXQncyBpbXBvcnRhbnQuIGB6cmFtX2Rlc3Ryb3lfY29tcHNgIGlzIGNhbGxlZCBmcm9tIGB6cmFtX3Jlc2V0X2RldmljZWAgYW5kIGFsc28sIGltcG9ydGFudGx5LCBmcm9tIGBkaXNrc2l6ZV9zdG9yZWAgaW4gY2FzZSBvZiBhbiBlcnJvci4gVGhpcyBtZWFucyB0aGF0LCBhZnRlciBhbiBlcnJvciBpbiBgZGlza3NpemVfc3RvcmVgLCB0aGUgYWxnb3JpdGhtIHdpbGwgYmUgcmVzZXQgdG8gYGRlZmF1bHRfY29tcHJlc3NvcmAuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSwgYW5kIGZ1bmN0aW9uYWwgY2hhbmdlcyBvZnRlbiBpbnRyb2R1Y2UgbmV3IGJ1Z3MuXG5cblRoZSBjb2RlIGNoYW5nZXMgaW5kaWNhdGUgdGhhdCB0aGVzZSBhcmUgZGVmaW5pdGVseSB3b3J0aCBmdXp6aW5nLlxuXG5NeSBzdHJhdGVneSBpcyB0byBzZXQ6XG5gV29ydGhGdXp6aW5nOiB0cnVlYFxuYEZvY3VzU3ltYm9sc2A6IHdoaWNoIHdpbGwgYmUgdGhlIGxpc3QgYWJvdmUuXG5gRW5hYmxlQ29uZmlnc2A6IHdoaWNoIGFyZSBgWlJBTWAgYW5kIGBaUkFNX0JBQ0tFTkRfREVGTEFURWBcblxuRmluYWxseSwgYSBxdWljayB2ZXJpZmljYXRpb24gb2YgdGhlIGZ1bmN0aW9uIG5hbWVzIHRvIGVuc3VyZSB0aGV5J3JlIGV4YWN0bHkgYXMgZXhwZWN0ZWQ6IGNvbmZpcm1pbmcgYGRlZmxhdGVfc2V0dXBfcGFyYW1zYCwgYHpyYW1fZGVzdHJveV9jb21wc2AsIGBkaXNrc2l6ZV9zdG9yZWAsIGBhbGdvcml0aG1fcGFyYW1zX3N0b3JlYCwgYW5kIGByZXNldF9zdG9yZWAuIEFsbCBjb25maXJtZWQuXG5UaW1lIHRvIGNhbGwgYHNldC1yZXN1bHRzYC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTc2MzQsIk91dHB1dFRva2VucyI6MTU2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6OTAzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMwVDEwOjAxOjQwLjk4MzgyOTE1MloiLCJTZXEiOjMyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjc5MTk4NjczLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJaUkFNXCIsXG4gICAgXCJaUkFNX0JBQ0tFTkRfREVGTEFURVwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInpjb21wX2NyZWF0ZVwiLFxuICAgIFwiZGlza3NpemVfc3RvcmVcIixcbiAgICBcImFsZ29yaXRobV9wYXJhbXNfc3RvcmVcIixcbiAgICBcInJlc2V0X3N0b3JlXCIsXG4gICAgXCJ6cmFtX2Rlc3Ryb3lfY29tcHNcIixcbiAgICBcImRlZmxhdGVfc2V0dXBfcGFyYW1zXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcyB2YWxpZGF0aW9uIGZvciB0aGUgZGVmbGF0ZSB3aW5iaXRzIHBhcmFtZXRlciBhbmQgY2hhbmdlcyB0aGUgYmVoYXZpb3Igb2YgenJhbV9kZXN0cm95X2NvbXBzIHRvIHJlc2V0IHRoZSBjb21wcmVzc2lvbiBhbGdvcml0aG0uIFRoZXNlIGFyZSBmdW5jdGlvbmFsIGNoYW5nZXMgaW4gdGhlIHpyYW0gZHJpdmVyIHRoYXQgYXJlIHJlYWNoYWJsZSB2aWEgc3lzZnMgYXR0cmlidXRlcyAoZS5nLiwgZGlza3NpemUsIGFsZ29yaXRobV9wYXJhbXMsIHJlc2V0KSBhbmQgc2hvdWxkIGJlIGZ1enplZC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJaUkFNXCIsXG4gICAgXCJaUkFNX0JBQ0tFTkRfREVGTEFURVwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInpjb21wX2NyZWF0ZVwiLFxuICAgIFwiZGlza3NpemVfc3RvcmVcIixcbiAgICBcImFsZ29yaXRobV9wYXJhbXNfc3RvcmVcIixcbiAgICBcInJlc2V0X3N0b3JlXCIsXG4gICAgXCJ6cmFtX2Rlc3Ryb3lfY29tcHNcIixcbiAgICBcImRlZmxhdGVfc2V0dXBfcGFyYW1zXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcyB2YWxpZGF0aW9uIGZvciB0aGUgZGVmbGF0ZSB3aW5iaXRzIHBhcmFtZXRlciBhbmQgY2hhbmdlcyB0aGUgYmVoYXZpb3Igb2YgenJhbV9kZXN0cm95X2NvbXBzIHRvIHJlc2V0IHRoZSBjb21wcmVzc2lvbiBhbGdvcml0aG0uIFRoZXNlIGFyZSBmdW5jdGlvbmFsIGNoYW5nZXMgaW4gdGhlIHpyYW0gZHJpdmVyIHRoYXQgYXJlIHJlYWNoYWJsZSB2aWEgc3lzZnMgYXR0cmlidXRlcyAoZS5nLiwgZGlza3NpemUsIGFsZ29yaXRobV9wYXJhbXMsIHJlc2V0KSBhbmQgc2hvdWxkIGJlIGZ1enplZC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLmR1cmF0aW9uIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnTGxtVG9rZW4gPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS50b2tlbnMgLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdUb29sRHVyID0gc3RhdHMudG9vbC5jb3VudCA+IDAgPyAoc3RhdHMudG9vbC5kdXJhdGlvbiAvIHN0YXRzLnRvb2wuY291bnQpLnRvRml4ZWQoMikgOiAwOwoKCQkJY29uc3QgbGxtU3VtYXJ5Q2VsbHMgPSBbc3RhdHMubGxtLmNvdW50LCBzdGF0cy5sbG0udG9rZW5zLCBhdmdMbG1Ub2tlbiwgc3RhdHMubGxtLmR1cmF0aW9uLCBhdmdMbG1EdXJdOwoJCQljb25zdCB0b29sU3VtbWFyeUNlbGxzID0gW3N0YXRzLnRvb2wuY291bnQsIHN0YXRzLnRvb2wuZHVyYXRpb24sIGF2Z1Rvb2xEdXJdOwoKCQkJY29uc3QgbGxtU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbGxtX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQlsbG1TdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgbGxtVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQlsbG1TdW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJbGxtVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJbGxtU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQobGxtVHIpOwoKCQkJY29uc3QgdG9vbFN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rvb2xfc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgdG9vbFRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJdG9vbFN1bW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJdG9vbFRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZCh0b29sVHIpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBmaWx0ZXJlZFN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBbImxsbSIsICJ0b29sIl0uaW5jbHVkZXMoZC5UeXBlKSk7CgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ0R1cmF0aW9uJyk7CgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7IAoKCQkJZmlsdGVyZWRTdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJCgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsKCQkJCWxldCB0b29sdGlwID0gcy5OYW1lOwoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIgJiYgcy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoJCQkJZGF0YS5hZGRSb3coW2Ake3MuU2VxfWAsIGR1ciwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1RpbWUgQ29uc3VtcHRpb24gb2YgTExNL1Rvb2wgQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTS9Ub29sIFN0ZXBzJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ1NlY29uZHMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2R1cmF0aW9uX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBsbG1TdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gZC5UeXBlID09PSAibGxtIik7CgkJCWlmIChsbG1TdGVwcy5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwkJCQoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ1Rva2VucycpOwkJCQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICdzdHlsZSd9KTsJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7CQoKCQkJY29uc3QgYWdlbnRDb2xvcnMgPSB7fTsKCQkJY29uc3QgcGFsZXR0ZSA9IFsnIzQyODVGNCcsICcjREI0NDM3JywgJyNGNEI0MDAnLCAnIzBGOUQ1OCcsICcjQUI0N0JDJywgJyMwMEFDQzEnXTsKCQkJbGV0IGNvbG9ySWR4ID0gMDsKCQkJY29uc3QgYWdlbnRMTE1Db3VudHMgPSB7fTsKCQkJbGxtU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCWlmICghYWdlbnRDb2xvcnNbcy5OYW1lXSkgewoJCQkJCWFnZW50Q29sb3JzW3MuTmFtZV0gPSBwYWxldHRlW2NvbG9ySWR4ICUgcGFsZXR0ZS5sZW5ndGhdOwoJCQkJCWNvbG9ySWR4Kys7CgkJCQl9CgoJCQkJYWdlbnRMTE1Db3VudHNbcy5OYW1lXSA9IChhZ2VudExMTUNvdW50c1tzLk5hbWVdIHx8IDApICsgMTsKCQkJCWNvbnN0IGxhYmVsID0gYCR7cy5OYW1lfS0ke2FnZW50TExNQ291bnRzW3MuTmFtZV19YDsKCQkJCWNvbnN0IHRvdGFsVG9rZW5zID0gcy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2VuczsKCQkJCWNvbnN0IHN0eWxlID0gYGNvbG9yOiAke2FnZW50Q29sb3JzW3MuTmFtZV19YDsKCQkJCWxldCB0b29sdGlwID0gYFRvdGFsIFRva2VuczogJHt0b3RhbFRva2Vuc31cbihJbjogJHtzLklucHV0VG9rZW5zfSwgT3V0OiAke3MuT3V0cHV0VG9rZW5zfSwgVGhvdWdodHM6ICR7cy5PdXRwdXRUaG91Z2h0c1Rva2Vuc30pYDsKCQkJCWlmIChzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgoJCQkJZGF0YS5hZGRSb3coW2xhYmVsLCB0b3RhbFRva2Vucywgc3R5bGUsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUb2tlbiBDb25zdW1wdGlvbiBieSBMTE0gQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTSBDYWxsIFNlcXVlbmNlJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ0NvbnN1bWVkIFRva2VucycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9rZW5fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCQlsZXQgYWxsRXhwYW5kZWQgPSBmYWxzZTsKCQlmdW5jdGlvbiB0b2dnbGVBbGxEZXRhaWxzKCkgewoJCQlhbGxFeHBhbmRlZCA9ICFhbGxFeHBhbmRlZDsKCQkJZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnZGV0YWlscycpLmZvckVhY2goZCA9PiB7CgkJCQlpZiAoYWxsRXhwYW5kZWQpIGQuc2V0QXR0cmlidXRlKCdvcGVuJywgJycpOwoJCQkJZWxzZSBkLnJlbW92ZUF0dHJpYnV0ZSgnb3BlbicpOwoJCQl9KTsKCQl9Cgk8L3NjcmlwdD4KCgo8L2JvZHk+CjwvaHRtbD4K" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowxqs88[1] Phase: Succeeded StartedAt: 2026-07-30 10:01:52 +0000 UTC FinishedAt: 2026-07-30 10:01:52 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxqs88[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-07-30 10:01:52 +0000 UTC FinishedAt: 2026-07-30 10:01:52 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxqs88[2] Phase: Succeeded StartedAt: 2026-07-30 10:01:52 +0000 UTC FinishedAt: 2026-07-30 13:44:06 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxqs88[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2e0c36e540a15bb6f5ffa2409001fb42219791c6","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZRAM","ZRAM_BACKEND_DEFLATE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["zcomp_create","disksize_store","algorithm_params_store","reset_store","zram_destroy_comps","deflate_setup_params"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"2e0c36e540a15bb6f5ffa2409001fb42219791c6","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZRAM","ZRAM_BACKEND_DEFLATE"],"series_id":"56f8bfe6-a91a-4309-b001-373ab865e793","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-07-30 10:01:52 +0000 UTC FinishedAt: 2026-07-30 13:44:06 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"2e0c36e540a15bb6f5ffa2409001fb42219791c6","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZRAM","ZRAM_BACKEND_DEFLATE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["zcomp_create","disksize_store","algorithm_params_store","reset_store","zram_destroy_comps","deflate_setup_params"],"skip_cover_check":true},"patched":{"arch":"amd64","commit_hash":"2e0c36e540a15bb6f5ffa2409001fb42219791c6","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZRAM","ZRAM_BACKEND_DEFLATE"],"series_id":"56f8bfe6-a91a-4309-b001-373ab865e793","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflowxqs88[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2e0c36e540a15bb6f5ffa2409001fb42219791c6","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZRAM","ZRAM_BACKEND_DEFLATE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["zcomp_create","disksize_store","algorithm_params_store","reset_store","zram_destroy_comps","deflate_setup_params"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"2e0c36e540a15bb6f5ffa2409001fb42219791c6","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZRAM","ZRAM_BACKEND_DEFLATE"],"series_id":"56f8bfe6-a91a-4309-b001-373ab865e793","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-07-30 10:01:52 +0000 UTC FinishedAt: 2026-07-30 10:02:02 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxqs88[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2e0c36e540a15bb6f5ffa2409001fb42219791c6","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZRAM","ZRAM_BACKEND_DEFLATE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["zcomp_create","disksize_store","algorithm_params_store","reset_store","zram_destroy_comps","deflate_setup_params"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"2e0c36e540a15bb6f5ffa2409001fb42219791c6","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZRAM","ZRAM_BACKEND_DEFLATE"],"series_id":"56f8bfe6-a91a-4309-b001-373ab865e793","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-07-30 10:01:52 +0000 UTC FinishedAt: 2026-07-30 10:01:57 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"2e0c36e540a15bb6f5ffa2409001fb42219791c6","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZRAM","ZRAM_BACKEND_DEFLATE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowxqs88/series-workflowxqs88-convert-artifact-2591987248/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowxqs88[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2e0c36e540a15bb6f5ffa2409001fb42219791c6","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZRAM","ZRAM_BACKEND_DEFLATE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["zcomp_create","disksize_store","algorithm_params_store","reset_store","zram_destroy_comps","deflate_setup_params"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"2e0c36e540a15bb6f5ffa2409001fb42219791c6","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZRAM","ZRAM_BACKEND_DEFLATE"],"series_id":"56f8bfe6-a91a-4309-b001-373ab865e793","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-07-30 10:02:02 +0000 UTC FinishedAt: 2026-07-30 10:20:11 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxqs88[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2e0c36e540a15bb6f5ffa2409001fb42219791c6","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZRAM","ZRAM_BACKEND_DEFLATE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["zcomp_create","disksize_store","algorithm_params_store","reset_store","zram_destroy_comps","deflate_setup_params"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"2e0c36e540a15bb6f5ffa2409001fb42219791c6","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZRAM","ZRAM_BACKEND_DEFLATE"],"series_id":"56f8bfe6-a91a-4309-b001-373ab865e793","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-07-30 10:02:02 +0000 UTC FinishedAt: 2026-07-30 10:20:11 +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:*b43d4bfb-b450-4d80-b6ab-993559073e92,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-workflowxqs88/series-workflowxqs88-convert-artifact-2591987248/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": "54bb4b6c-2201-4f3f-b52f-dfcea84ecefc", "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-workflowxqs88/series-workflowxqs88-build-action-721322806/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowxqs88[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2e0c36e540a15bb6f5ffa2409001fb42219791c6","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZRAM","ZRAM_BACKEND_DEFLATE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["zcomp_create","disksize_store","algorithm_params_store","reset_store","zram_destroy_comps","deflate_setup_params"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"2e0c36e540a15bb6f5ffa2409001fb42219791c6","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZRAM","ZRAM_BACKEND_DEFLATE"],"series_id":"56f8bfe6-a91a-4309-b001-373ab865e793","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-07-30 10:02:02 +0000 UTC FinishedAt: 2026-07-30 10:20:01 +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:*b43d4bfb-b450-4d80-b6ab-993559073e92,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-workflowxqs88/series-workflowxqs88-convert-artifact-2591987248/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": "54bb4b6c-2201-4f3f-b52f-dfcea84ecefc", "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-workflowxqs88/series-workflowxqs88-build-action-721322806/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowxqs88[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2e0c36e540a15bb6f5ffa2409001fb42219791c6","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZRAM","ZRAM_BACKEND_DEFLATE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["zcomp_create","disksize_store","algorithm_params_store","reset_store","zram_destroy_comps","deflate_setup_params"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"2e0c36e540a15bb6f5ffa2409001fb42219791c6","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZRAM","ZRAM_BACKEND_DEFLATE"],"series_id":"56f8bfe6-a91a-4309-b001-373ab865e793","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-07-30 10:20:11 +0000 UTC FinishedAt: 2026-07-30 10:20:11 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxqs88[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2e0c36e540a15bb6f5ffa2409001fb42219791c6","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZRAM","ZRAM_BACKEND_DEFLATE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["zcomp_create","disksize_store","algorithm_params_store","reset_store","zram_destroy_comps","deflate_setup_params"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"2e0c36e540a15bb6f5ffa2409001fb42219791c6","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZRAM","ZRAM_BACKEND_DEFLATE"],"series_id":"56f8bfe6-a91a-4309-b001-373ab865e793","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-07-30 10:20:11 +0000 UTC FinishedAt: 2026-07-30 10:20:11 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxqs88[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2e0c36e540a15bb6f5ffa2409001fb42219791c6","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZRAM","ZRAM_BACKEND_DEFLATE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["zcomp_create","disksize_store","algorithm_params_store","reset_store","zram_destroy_comps","deflate_setup_params"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"2e0c36e540a15bb6f5ffa2409001fb42219791c6","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZRAM","ZRAM_BACKEND_DEFLATE"],"series_id":"56f8bfe6-a91a-4309-b001-373ab865e793","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-07-30 10:20:11 +0000 UTC FinishedAt: 2026-07-30 10:20:22 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxqs88[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2e0c36e540a15bb6f5ffa2409001fb42219791c6","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZRAM","ZRAM_BACKEND_DEFLATE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["zcomp_create","disksize_store","algorithm_params_store","reset_store","zram_destroy_comps","deflate_setup_params"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"2e0c36e540a15bb6f5ffa2409001fb42219791c6","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZRAM","ZRAM_BACKEND_DEFLATE"],"series_id":"56f8bfe6-a91a-4309-b001-373ab865e793","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-07-30 10:20:11 +0000 UTC FinishedAt: 2026-07-30 10:20:16 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"2e0c36e540a15bb6f5ffa2409001fb42219791c6","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZRAM","ZRAM_BACKEND_DEFLATE"],"series_id":"56f8bfe6-a91a-4309-b001-373ab865e793","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowxqs88/series-workflowxqs88-convert-artifact-1252526359/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowxqs88[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2e0c36e540a15bb6f5ffa2409001fb42219791c6","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZRAM","ZRAM_BACKEND_DEFLATE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["zcomp_create","disksize_store","algorithm_params_store","reset_store","zram_destroy_comps","deflate_setup_params"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"2e0c36e540a15bb6f5ffa2409001fb42219791c6","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZRAM","ZRAM_BACKEND_DEFLATE"],"series_id":"56f8bfe6-a91a-4309-b001-373ab865e793","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-07-30 10:20:22 +0000 UTC FinishedAt: 2026-07-30 10:22:29 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxqs88[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2e0c36e540a15bb6f5ffa2409001fb42219791c6","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZRAM","ZRAM_BACKEND_DEFLATE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["zcomp_create","disksize_store","algorithm_params_store","reset_store","zram_destroy_comps","deflate_setup_params"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"2e0c36e540a15bb6f5ffa2409001fb42219791c6","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZRAM","ZRAM_BACKEND_DEFLATE"],"series_id":"56f8bfe6-a91a-4309-b001-373ab865e793","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-07-30 10:20:22 +0000 UTC FinishedAt: 2026-07-30 10:22:20 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*54bb4b6c-2201-4f3f-b52f-dfcea84ecefc,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-workflowxqs88/series-workflowxqs88-build-action-721322806/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-workflowxqs88[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2e0c36e540a15bb6f5ffa2409001fb42219791c6","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZRAM","ZRAM_BACKEND_DEFLATE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["zcomp_create","disksize_store","algorithm_params_store","reset_store","zram_destroy_comps","deflate_setup_params"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"2e0c36e540a15bb6f5ffa2409001fb42219791c6","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZRAM","ZRAM_BACKEND_DEFLATE"],"series_id":"56f8bfe6-a91a-4309-b001-373ab865e793","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-07-30 10:22:29 +0000 UTC FinishedAt: 2026-07-30 10:22:29 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxqs88[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2e0c36e540a15bb6f5ffa2409001fb42219791c6","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZRAM","ZRAM_BACKEND_DEFLATE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["zcomp_create","disksize_store","algorithm_params_store","reset_store","zram_destroy_comps","deflate_setup_params"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"2e0c36e540a15bb6f5ffa2409001fb42219791c6","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZRAM","ZRAM_BACKEND_DEFLATE"],"series_id":"56f8bfe6-a91a-4309-b001-373ab865e793","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-07-30 10:22:29 +0000 UTC FinishedAt: 2026-07-30 10:22:29 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxqs88[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2e0c36e540a15bb6f5ffa2409001fb42219791c6","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZRAM","ZRAM_BACKEND_DEFLATE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["zcomp_create","disksize_store","algorithm_params_store","reset_store","zram_destroy_comps","deflate_setup_params"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"2e0c36e540a15bb6f5ffa2409001fb42219791c6","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZRAM","ZRAM_BACKEND_DEFLATE"],"series_id":"56f8bfe6-a91a-4309-b001-373ab865e793","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-07-30 10:22:29 +0000 UTC FinishedAt: 2026-07-30 10:40:24 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxqs88[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2e0c36e540a15bb6f5ffa2409001fb42219791c6","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZRAM","ZRAM_BACKEND_DEFLATE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["zcomp_create","disksize_store","algorithm_params_store","reset_store","zram_destroy_comps","deflate_setup_params"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"2e0c36e540a15bb6f5ffa2409001fb42219791c6","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZRAM","ZRAM_BACKEND_DEFLATE"],"series_id":"56f8bfe6-a91a-4309-b001-373ab865e793","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-07-30 10:22:29 +0000 UTC FinishedAt: 2026-07-30 10:40:24 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:findings,Default:nil,Value:*true,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Build Patched,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:smoke-build,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:session-id,Default:nil,Value:*b43d4bfb-b450-4d80-b6ab-993559073e92,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-workflowxqs88/series-workflowxqs88-convert-artifact-1252526359/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": "1397c167-3731-48ef-b3df-e972c50403a6", "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-workflowxqs88/series-workflowxqs88-build-action-2593341275/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowxqs88[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2e0c36e540a15bb6f5ffa2409001fb42219791c6","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZRAM","ZRAM_BACKEND_DEFLATE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["zcomp_create","disksize_store","algorithm_params_store","reset_store","zram_destroy_comps","deflate_setup_params"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"2e0c36e540a15bb6f5ffa2409001fb42219791c6","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZRAM","ZRAM_BACKEND_DEFLATE"],"series_id":"56f8bfe6-a91a-4309-b001-373ab865e793","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-07-30 10:22:29 +0000 UTC FinishedAt: 2026-07-30 10:40:14 +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:*b43d4bfb-b450-4d80-b6ab-993559073e92,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-workflowxqs88/series-workflowxqs88-convert-artifact-1252526359/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": "1397c167-3731-48ef-b3df-e972c50403a6", "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-workflowxqs88/series-workflowxqs88-build-action-2593341275/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowxqs88[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2e0c36e540a15bb6f5ffa2409001fb42219791c6","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZRAM","ZRAM_BACKEND_DEFLATE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["zcomp_create","disksize_store","algorithm_params_store","reset_store","zram_destroy_comps","deflate_setup_params"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"2e0c36e540a15bb6f5ffa2409001fb42219791c6","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZRAM","ZRAM_BACKEND_DEFLATE"],"series_id":"56f8bfe6-a91a-4309-b001-373ab865e793","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-07-30 10:40:24 +0000 UTC FinishedAt: 2026-07-30 10:40:24 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxqs88[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2e0c36e540a15bb6f5ffa2409001fb42219791c6","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZRAM","ZRAM_BACKEND_DEFLATE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["zcomp_create","disksize_store","algorithm_params_store","reset_store","zram_destroy_comps","deflate_setup_params"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"2e0c36e540a15bb6f5ffa2409001fb42219791c6","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZRAM","ZRAM_BACKEND_DEFLATE"],"series_id":"56f8bfe6-a91a-4309-b001-373ab865e793","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-07-30 10:40:24 +0000 UTC FinishedAt: 2026-07-30 10:40:24 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxqs88[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2e0c36e540a15bb6f5ffa2409001fb42219791c6","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZRAM","ZRAM_BACKEND_DEFLATE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["zcomp_create","disksize_store","algorithm_params_store","reset_store","zram_destroy_comps","deflate_setup_params"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"2e0c36e540a15bb6f5ffa2409001fb42219791c6","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZRAM","ZRAM_BACKEND_DEFLATE"],"series_id":"56f8bfe6-a91a-4309-b001-373ab865e793","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-07-30 10:40:24 +0000 UTC FinishedAt: 2026-07-30 10:42:30 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxqs88[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2e0c36e540a15bb6f5ffa2409001fb42219791c6","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZRAM","ZRAM_BACKEND_DEFLATE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["zcomp_create","disksize_store","algorithm_params_store","reset_store","zram_destroy_comps","deflate_setup_params"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"2e0c36e540a15bb6f5ffa2409001fb42219791c6","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZRAM","ZRAM_BACKEND_DEFLATE"],"series_id":"56f8bfe6-a91a-4309-b001-373ab865e793","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-07-30 10:40:24 +0000 UTC FinishedAt: 2026-07-30 10:42:20 +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:*1397c167-3731-48ef-b3df-e972c50403a6,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-workflowxqs88/series-workflowxqs88-build-action-2593341275/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-workflowxqs88[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2e0c36e540a15bb6f5ffa2409001fb42219791c6","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZRAM","ZRAM_BACKEND_DEFLATE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["zcomp_create","disksize_store","algorithm_params_store","reset_store","zram_destroy_comps","deflate_setup_params"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"2e0c36e540a15bb6f5ffa2409001fb42219791c6","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZRAM","ZRAM_BACKEND_DEFLATE"],"series_id":"56f8bfe6-a91a-4309-b001-373ab865e793","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-07-30 10:42:30 +0000 UTC FinishedAt: 2026-07-30 13:44:06 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxqs88[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2e0c36e540a15bb6f5ffa2409001fb42219791c6","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZRAM","ZRAM_BACKEND_DEFLATE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["zcomp_create","disksize_store","algorithm_params_store","reset_store","zram_destroy_comps","deflate_setup_params"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"2e0c36e540a15bb6f5ffa2409001fb42219791c6","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZRAM","ZRAM_BACKEND_DEFLATE"],"series_id":"56f8bfe6-a91a-4309-b001-373ab865e793","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-07-30 10:42:30 +0000 UTC FinishedAt: 2026-07-30 13:44:06 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:config,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["zcomp_create","disksize_store","algorithm_params_store","reset_store","zram_destroy_comps","deflate_setup_params"],"skip_cover_check":true},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:track,Default:nil,Value:*KASAN,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:base-build-id,Default:nil,Value:*54bb4b6c-2201-4f3f-b52f-dfcea84ecefc,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*1397c167-3731-48ef-b3df-e972c50403a6,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-workflowxqs88/series-workflowxqs88-build-action-721322806/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-workflowxqs88/series-workflowxqs88-build-action-2593341275/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowxqs88[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2e0c36e540a15bb6f5ffa2409001fb42219791c6","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZRAM","ZRAM_BACKEND_DEFLATE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["zcomp_create","disksize_store","algorithm_params_store","reset_store","zram_destroy_comps","deflate_setup_params"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"2e0c36e540a15bb6f5ffa2409001fb42219791c6","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZRAM","ZRAM_BACKEND_DEFLATE"],"series_id":"56f8bfe6-a91a-4309-b001-373ab865e793","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-07-30 10:42:30 +0000 UTC FinishedAt: 2026-07-30 10:42:40 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxqs88[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2e0c36e540a15bb6f5ffa2409001fb42219791c6","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZRAM","ZRAM_BACKEND_DEFLATE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["zcomp_create","disksize_store","algorithm_params_store","reset_store","zram_destroy_comps","deflate_setup_params"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"2e0c36e540a15bb6f5ffa2409001fb42219791c6","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZRAM","ZRAM_BACKEND_DEFLATE"],"series_id":"56f8bfe6-a91a-4309-b001-373ab865e793","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-07-30 10:42:30 +0000 UTC FinishedAt: 2026-07-30 10:42:34 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["zcomp_create","disksize_store","algorithm_params_store","reset_store","zram_destroy_comps","deflate_setup_params"],"skip_cover_check":true},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowxqs88/series-workflowxqs88-convert-artifact-2028145104/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowxqs88[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2e0c36e540a15bb6f5ffa2409001fb42219791c6","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZRAM","ZRAM_BACKEND_DEFLATE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["zcomp_create","disksize_store","algorithm_params_store","reset_store","zram_destroy_comps","deflate_setup_params"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"2e0c36e540a15bb6f5ffa2409001fb42219791c6","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZRAM","ZRAM_BACKEND_DEFLATE"],"series_id":"56f8bfe6-a91a-4309-b001-373ab865e793","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-07-30 10:42:30 +0000 UTC FinishedAt: 2026-07-30 10:42:30 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxqs88[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2e0c36e540a15bb6f5ffa2409001fb42219791c6","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZRAM","ZRAM_BACKEND_DEFLATE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["zcomp_create","disksize_store","algorithm_params_store","reset_store","zram_destroy_comps","deflate_setup_params"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"2e0c36e540a15bb6f5ffa2409001fb42219791c6","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZRAM","ZRAM_BACKEND_DEFLATE"],"series_id":"56f8bfe6-a91a-4309-b001-373ab865e793","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-07-30 10:42:30 +0000 UTC FinishedAt: 2026-07-30 10:42:30 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxqs88[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2e0c36e540a15bb6f5ffa2409001fb42219791c6","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZRAM","ZRAM_BACKEND_DEFLATE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["zcomp_create","disksize_store","algorithm_params_store","reset_store","zram_destroy_comps","deflate_setup_params"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"2e0c36e540a15bb6f5ffa2409001fb42219791c6","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZRAM","ZRAM_BACKEND_DEFLATE"],"series_id":"56f8bfe6-a91a-4309-b001-373ab865e793","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-07-30 10:42:30 +0000 UTC FinishedAt: 2026-07-30 10:42:30 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxqs88[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2e0c36e540a15bb6f5ffa2409001fb42219791c6","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZRAM","ZRAM_BACKEND_DEFLATE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["zcomp_create","disksize_store","algorithm_params_store","reset_store","zram_destroy_comps","deflate_setup_params"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"2e0c36e540a15bb6f5ffa2409001fb42219791c6","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZRAM","ZRAM_BACKEND_DEFLATE"],"series_id":"56f8bfe6-a91a-4309-b001-373ab865e793","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-07-30 10:42:40 +0000 UTC FinishedAt: 2026-07-30 13:44:06 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxqs88[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2e0c36e540a15bb6f5ffa2409001fb42219791c6","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZRAM","ZRAM_BACKEND_DEFLATE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["zcomp_create","disksize_store","algorithm_params_store","reset_store","zram_destroy_comps","deflate_setup_params"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"2e0c36e540a15bb6f5ffa2409001fb42219791c6","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZRAM","ZRAM_BACKEND_DEFLATE"],"series_id":"56f8bfe6-a91a-4309-b001-373ab865e793","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-07-30 10:42:40 +0000 UTC FinishedAt: 2026-07-30 13:43:56 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*54bb4b6c-2201-4f3f-b52f-dfcea84ecefc,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*1397c167-3731-48ef-b3df-e972c50403a6,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-workflowxqs88/series-workflowxqs88-build-action-721322806/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-workflowxqs88/series-workflowxqs88-build-action-2593341275/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-workflowxqs88/series-workflowxqs88-convert-artifact-2028145104/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,}