Name: series-workflow74q9w Phase: Succeeded StartedAt: 2026-07-06 15:35:28 +0000 UTC FinishedAt: 2026-07-06 20:32:15 +0000 UTC Input: nil Output: nil --------- Name: series-workflow74q9w[0] Phase: Succeeded StartedAt: 2026-07-06 15:35:28 +0000 UTC FinishedAt: 2026-07-06 16:20:10 +0000 UTC Input: nil Output: nil --------- Name: series-workflow74q9w[0].run-triage Phase: Succeeded StartedAt: 2026-07-06 15:35:28 +0000 UTC FinishedAt: 2026-07-06 16:20:10 +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": "820d5dfede0cd55dcbc89ce96fcfbb11b7c457ba", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "TEST_HMM", "DEVICE_PRIVATE", "ZONE_DEVICE" ], "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": "820d5dfede0cd55dcbc89ce96fcfbb11b7c457ba", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "TEST_HMM", "DEVICE_PRIVATE", "ZONE_DEVICE" ], "series_id": "12e810ec-3ca6-4bf6-a554-28ab36d6011d" }, "track": "KASAN", "fuzz": { "focus": null, "focus_symbols": [ "migrate_vma_collect_pmd" ], "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+CgkJCTx0ZD4yMDI2LzA3LzA2IDE2OjE2PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+Mm08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1RFU1RfSE1NJiMzNDssCiAgICAmIzM0O0RFVklDRV9QUklWQVRFJiMzNDssCiAgICAmIzM0O1pPTkVfREVWSUNFJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7bWlncmF0ZV92bWFfY29sbGVjdF9wbWQmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcyBtaXNzaW5nIHB0ZV9wcmVzZW50KCkgY2hlY2tzIGluIG1pZ3JhdGVfdm1hX2NvbGxlY3RfcG1kKCkgYmVmb3JlIGNhbGxpbmcgcHRlX3BmbigpIGFuZCBwdGVfZGlydHkoKS4gVGhpcyBpcyBmdW5jdGlvbmFsIGNvcmUga2VybmVsL21tIGNvZGUgcmVhY2hhYmxlIHZpYSBkZXZpY2UgbWVtb3J5IG1pZ3JhdGlvbiBwYXRocywgd2hpY2ggY2FuIGJlIHRyaWdnZXJlZCBmcm9tIHVzZXJzcGFjZSB1c2luZyB0aGUgVEVTVF9ITU0gbW9kdWxlLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA2IDE2OjE2PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgYTJiODQ2YjgyNTM5ZDcyMmNhNTRlNDY3YjI4MjZkZTFiNTRjZDc1MlxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBNb24gSnVsIDYgMTY6MTY6NDAgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvbW0vbWlncmF0ZV9kZXZpY2UuYyBiL21tL21pZ3JhdGVfZGV2aWNlLmNcbmluZGV4IDA1MjE2N2Y5YWQ1NDc0Li42ZTcxMTM4MWYwOTI5NSAxMDA2NDRcbi0tLSBhL21tL21pZ3JhdGVfZGV2aWNlLmNcbiYjNDM7JiM0MzsmIzQzOyBiL21tL21pZ3JhdGVfZGV2aWNlLmNcbkBAIC00MTEsNyAmIzQzOzQxMSw4IEBAIHN0YXRpYyBpbnQgbWlncmF0ZV92bWFfY29sbGVjdF9wbWQocG1kX3QgKnBtZHAsXG4gXHRcdFx0Ym9vbCBhbm9uX2V4Y2x1c2l2ZTtcbiBcdFx0XHRwdGVfdCBzd3BfcHRlO1xuIFxuLVx0XHRcdGZsdXNoX2NhY2hlX3BhZ2Uodm1hLCBhZGRyLCBwdGVfcGZuKHB0ZSkpO1xuJiM0MztcdFx0XHRpZiAocHRlX3ByZXNlbnQocHRlKSlcbiYjNDM7XHRcdFx0XHRmbHVzaF9jYWNoZV9wYWdlKHZtYSwgYWRkciwgcHRlX3BmbihwdGUpKTtcbiBcdFx0XHRhbm9uX2V4Y2x1c2l2ZSA9IGZvbGlvX3Rlc3RfYW5vbihmb2xpbykgXHUwMDI2XHUwMDI2XG4gXHRcdFx0XHRcdCAgUGFnZUFub25FeGNsdXNpdmUocGFnZSk7XG4gXHRcdFx0aWYgKGFub25fZXhjbHVzaXZlKSB7XG5AQCAtNDMyLDcgJiM0Mzs0MzMsNyBAQCBzdGF0aWMgaW50IG1pZ3JhdGVfdm1hX2NvbGxlY3RfcG1kKHBtZF90ICpwbWRwLFxuIFx0XHRcdG1pZ3JhdGUtXHUwMDNlY3BhZ2VzJiM0MzsmIzQzOztcbiBcbiBcdFx0XHQvKiBTZXQgdGhlIGRpcnR5IGZsYWcgb24gdGhlIGZvbGlvIG5vdyB0aGUgcHRlIGlzIGdvbmUuICovXG4tXHRcdFx0aWYgKHB0ZV9kaXJ0eShwdGUpKVxuJiM0MztcdFx0XHRpZiAocHRlX3ByZXNlbnQocHRlKSBcdTAwMjZcdTAwMjYgcHRlX2RpcnR5KHB0ZSkpXG4gXHRcdFx0XHRmb2xpb19tYXJrX2RpcnR5KGZvbGlvKTtcbiBcbiBcdFx0XHQvKiBTZXR1cCBzcGVjaWFsIG1pZ3JhdGlvbiBwYWdlIHRhYmxlIGVudHJ5ICovXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDYgMTY6MTY8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+Mm08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7VEVTVF9ITU0mIzM0OywKICAgICYjMzQ7REVWSUNFX1BSSVZBVEUmIzM0OywKICAgICYjMzQ7Wk9ORV9ERVZJQ0UmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDttaWdyYXRlX3ZtYV9jb2xsZWN0X3BtZCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRzIG1pc3NpbmcgcHRlX3ByZXNlbnQoKSBjaGVja3MgaW4gbWlncmF0ZV92bWFfY29sbGVjdF9wbWQoKSBiZWZvcmUgY2FsbGluZyBwdGVfcGZuKCkgYW5kIHB0ZV9kaXJ0eSgpLiBUaGlzIGlzIGZ1bmN0aW9uYWwgY29yZSBrZXJuZWwvbW0gY29kZSByZWFjaGFibGUgdmlhIGRldmljZSBtZW1vcnkgbWlncmF0aW9uIHBhdGhzLCB3aGljaCBjYW4gYmUgdHJpZ2dlcmVkIGZyb20gdXNlcnNwYWNlIHVzaW5nIHRoZSBURVNUX0hNTSBtb2R1bGUuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLgoKSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaAp0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4KCldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOgoxLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLgogICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4KMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuCiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KICAgRG8gbm90IGxpc3QgdG9vIGdlbmVyaWMgY29uZmlncyAod2UgYWxyZWFkeSBoYXZlIHRoZW0gZW5hYmxlZCkuIE9ubHkgbGlzdCB0aG9zZSB0aGF0CiAgIHNwZWNpZmljYWxseSBjb3ZlciB0aGUgbW9kaWZpZWQgY29kZS4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzIG91dHB1dCBhcnJheSwKICAgYW5kIERPIE5PVCBhZGQgYSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IGEyYjg0NmI4MjUzOWQ3MjJjYTU0ZTQ2N2IyODI2ZGUxYjU0Y2Q3NTIKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgTW9uIEp1bCA2IDE2OjE2OjQwIDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvbW0vbWlncmF0ZV9kZXZpY2UuYyBiL21tL21pZ3JhdGVfZGV2aWNlLmMKaW5kZXggMDUyMTY3ZjlhZDU0NzQuLjZlNzExMzgxZjA5Mjk1IDEwMDY0NAotLS0gYS9tbS9taWdyYXRlX2RldmljZS5jCiYjNDM7JiM0MzsmIzQzOyBiL21tL21pZ3JhdGVfZGV2aWNlLmMKQEAgLTQxMSw3ICYjNDM7NDExLDggQEAgc3RhdGljIGludCBtaWdyYXRlX3ZtYV9jb2xsZWN0X3BtZChwbWRfdCAqcG1kcCwKIAkJCWJvb2wgYW5vbl9leGNsdXNpdmU7CiAJCQlwdGVfdCBzd3BfcHRlOwogCi0JCQlmbHVzaF9jYWNoZV9wYWdlKHZtYSwgYWRkciwgcHRlX3BmbihwdGUpKTsKJiM0MzsJCQlpZiAocHRlX3ByZXNlbnQocHRlKSkKJiM0MzsJCQkJZmx1c2hfY2FjaGVfcGFnZSh2bWEsIGFkZHIsIHB0ZV9wZm4ocHRlKSk7CiAJCQlhbm9uX2V4Y2x1c2l2ZSA9IGZvbGlvX3Rlc3RfYW5vbihmb2xpbykgJmFtcDsmYW1wOwogCQkJCQkgIFBhZ2VBbm9uRXhjbHVzaXZlKHBhZ2UpOwogCQkJaWYgKGFub25fZXhjbHVzaXZlKSB7CkBAIC00MzIsNyAmIzQzOzQzMyw3IEBAIHN0YXRpYyBpbnQgbWlncmF0ZV92bWFfY29sbGVjdF9wbWQocG1kX3QgKnBtZHAsCiAJCQltaWdyYXRlLSZndDtjcGFnZXMmIzQzOyYjNDM7OwogCiAJCQkvKiBTZXQgdGhlIGRpcnR5IGZsYWcgb24gdGhlIGZvbGlvIG5vdyB0aGUgcHRlIGlzIGdvbmUuICovCi0JCQlpZiAocHRlX2RpcnR5KHB0ZSkpCiYjNDM7CQkJaWYgKHB0ZV9wcmVzZW50KHB0ZSkgJmFtcDsmYW1wOyBwdGVfZGlydHkocHRlKSkKIAkJCQlmb2xpb19tYXJrX2RpcnR5KGZvbGlvKTsKIAogCQkJLyogU2V0dXAgc3BlY2lhbCBtaWdyYXRpb24gcGFnZSB0YWJsZSBlbnRyeSAqLwo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wNiAxNjoxNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxOTcwCgkJCQkJCQlvdXRwdXQ6IDM2CgkJCQkJCQl0aG91Z2h0czogOTkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBNaWdyYXRlIERldmljZSBQYXRjaCoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBmb3IgYG1tL21pZ3JhdGVfZGV2aWNlLmNgLiBTcGVjaWZpY2FsbHksIGl0IHNlZW1zIGxpa2Ugc29tZW9uZSYjMzk7cyBiZWVuIHR3ZWFraW5nIHRoZSBgbWlncmF0ZV92bWFfY29sbGVjdF9wbWRgIGZ1bmN0aW9uLiBUaGlzIGlzIHByZXR0eSBzdGFuZGFyZCBzdHVmZiBmb3IgbWVtb3J5IG1hbmFnZW1lbnQsIGFuZCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgaW1wYWN0IG9mIHRoZSBjaGFuZ2VzLgoKVGhlIGNvcmUgb2YgdGhlIGNoYW5nZSBzZWVtcyB0byBiZSB0aGUgaW5jbHVzaW9uIG9mIGBwdGVfcHJlc2VudChwdGUpYCBjaGVja3MgKmJlZm9yZSogdGhvc2UgYGZsdXNoX2NhY2hlX3BhZ2VgIGNhbGxzLCBhbmQgYWxzbyBiZWZvcmUgdGhlIGBwdGVfZGlydHkocHRlKWAgY2hlY2suIFRoYXQmIzM5O3MgaW1tZWRpYXRlbHkgaW50ZXJlc3RpbmcuIEl0JiMzOTtzIGFsbW9zdCBjZXJ0YWlubHkgdG8gcHJvdGVjdCBhZ2FpbnN0IHNvbWUga2luZCBvZiByYWNlIGNvbmRpdGlvbiBvciBwb3RlbnRpYWwgdXNlLWFmdGVyLWZyZWUgc2NlbmFyaW8gd2l0aGluIHRoZSBtaWdyYXRpb24gcHJvY2Vzcy4gTXkgaW5pdGlhbCBodW5jaCBpcyB0aGF0IGl0JiMzOTtzIHRyeWluZyB0byBlbnN1cmUgdGhhdCB0aGUgcGFnZSB0YWJsZSBlbnRyeSAoUFRFKSBpcyBhY3R1YWxseSB2YWxpZCBiZWZvcmUgZG9pbmcgYW55dGhpbmcgd2l0aCBpdCwgd2hpY2ggaXMgZ29vZCBwcmFjdGljZSwgZXNwZWNpYWxseSBpbiBhIGNvbmN1cnJlbnQgZW52aXJvbm1lbnQgbGlrZSB0aGUga2VybmVsLiBMZXQgbWUgZGlnIGludG8gdGhlIHN1cnJvdW5kaW5nIGNvZGUgYW5kIHNlZSAqd2h5KiB0aGlzIHdhc24mIzM5O3QgYWxyZWFkeSB0aGVyZS4gTXkgZXhwZXJ0aXNlIHRlbGxzIG1lIHRoZXNlIGd1YXJkcyBhcmUgdGhlcmUgZm9yIGEgcmVhc29uLCBsaWtlbHkgYSBidWcgaGFkIG9jY3VycmVkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA2IDE2OjE2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bW0vbWlncmF0ZV9kZXZpY2UuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDM5MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAxMDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDM5MDpcdFx0XHQgKlxuIDM5MTpcdFx0XHQgKiBXZSBkcm9wIHRoaXMgcmVmZXJlbmNlIGFmdGVyIGlzb2xhdGluZyB0aGUgZm9saW8gZnJvbSB0aGUgbHJ1XG4gMzkyOlx0XHRcdCAqIGZvciBub24gZGV2aWNlIGZvbGlvIChkZXZpY2UgZm9saW8gYXJlIG5vdCBvbiB0aGUgbHJ1IGFuZCB0aHVzXG4gMzkzOlx0XHRcdCAqIGNhbiYjMzk7dCBiZSBkcm9wcGVkIGZyb20gaXQpLlxuIDM5NDpcdFx0XHQgKi9cbiAzOTU6XHRcdFx0Zm9saW8gPSBwYWdlX2ZvbGlvKHBhZ2UpO1xuIDM5NjpcdFx0XHRmb2xpb19nZXQoZm9saW8pO1xuIDM5NzpcdFxuIDM5ODpcdFx0XHQvKlxuIDM5OTpcdFx0XHQgKiBXZSByZWx5IG9uIGZvbGlvX3RyeWxvY2soKSB0byBhdm9pZCBkZWFkbG9jayBiZXR3ZWVuXG4gNDAwOlx0XHRcdCAqIGNvbmN1cnJlbnQgbWlncmF0aW9ucyB3aGVyZSBlYWNoIGlzIHdhaXRpbmcgb24gdGhlIG90aGVyc1xuIDQwMTpcdFx0XHQgKiBmb2xpbyBsb2NrLiBJZiB3ZSBjYW4mIzM5O3QgaW1tZWRpYXRlbHkgbG9jayB0aGUgZm9saW8gd2UgZmFpbCB0aGlzXG4gNDAyOlx0XHRcdCAqIG1pZ3JhdGlvbiBhcyBpdCBpcyBvbmx5IGJlc3QgZWZmb3J0IGFueXdheS5cbiA0MDM6XHRcdFx0ICpcbiA0MDQ6XHRcdFx0ICogSWYgd2UgY2FuIGxvY2sgdGhlIGZvbGlvIGl0JiMzOTtzIHNhZmUgdG8gc2V0IHVwIGEgbWlncmF0aW9uIGVudHJ5XG4gNDA1Olx0XHRcdCAqIG5vdy4gSW4gdGhlIGNvbW1vbiBjYXNlIHdoZXJlIHRoZSBmb2xpbyBpcyBtYXBwZWQgb25jZSBpbiBhXG4gNDA2Olx0XHRcdCAqIHNpbmdsZSBwcm9jZXNzIHNldHRpbmcgdXAgdGhlIG1pZ3JhdGlvbiBlbnRyeSBub3cgaXMgYW5cbiA0MDc6XHRcdFx0ICogb3B0aW1pc2F0aW9uIHRvIGF2b2lkIHdhbGtpbmcgdGhlIHJtYXAgbGF0ZXIgd2l0aFxuIDQwODpcdFx0XHQgKiB0cnlfdG9fbWlncmF0ZSgpLlxuIDQwOTpcdFx0XHQgKi9cbiA0MTA6XHRcdFx0aWYgKGZhdWx0X2ZvbGlvID09IGZvbGlvIHx8IGZvbGlvX3RyeWxvY2soZm9saW8pKSB7XG4gNDExOlx0XHRcdFx0Ym9vbCBhbm9uX2V4Y2x1c2l2ZTtcbiA0MTI6XHRcdFx0XHRwdGVfdCBzd3BfcHRlO1xuIDQxMzpcdFxuIDQxNDpcdFx0XHRcdGlmIChwdGVfcHJlc2VudChwdGUpKVxuIDQxNTpcdFx0XHRcdFx0Zmx1c2hfY2FjaGVfcGFnZSh2bWEsIGFkZHIsIHB0ZV9wZm4ocHRlKSk7XG4gNDE2Olx0XHRcdFx0YW5vbl9leGNsdXNpdmUgPSBmb2xpb190ZXN0X2Fub24oZm9saW8pIFx1MDAyNlx1MDAyNlxuIDQxNzpcdFx0XHRcdFx0XHQgIFBhZ2VBbm9uRXhjbHVzaXZlKHBhZ2UpO1xuIDQxODpcdFx0XHRcdGlmIChhbm9uX2V4Y2x1c2l2ZSkge1xuIDQxOTpcdFx0XHRcdFx0cHRlID0gcHRlcF9jbGVhcl9mbHVzaCh2bWEsIGFkZHIsIHB0ZXApO1xuIDQyMDpcdFxuIDQyMTpcdFx0XHRcdFx0aWYgKGZvbGlvX3RyeV9zaGFyZV9hbm9uX3JtYXBfcHRlKGZvbGlvLCBwYWdlKSkge1xuIDQyMjpcdFx0XHRcdFx0XHRzZXRfcHRlX2F0KG1tLCBhZGRyLCBwdGVwLCBwdGUpO1xuIDQyMzpcdFx0XHRcdFx0XHRpZiAoZmF1bHRfZm9saW8gIT0gZm9saW8pXG4gNDI0Olx0XHRcdFx0XHRcdFx0Zm9saW9fdW5sb2NrKGZvbGlvKTtcbiA0MjU6XHRcdFx0XHRcdFx0Zm9saW9fcHV0KGZvbGlvKTtcbiA0MjY6XHRcdFx0XHRcdFx0bXBmbiA9IDA7XG4gNDI3Olx0XHRcdFx0XHRcdGdvdG8gbmV4dDtcbiA0Mjg6XHRcdFx0XHRcdH1cbiA0Mjk6XHRcdFx0XHR9IGVsc2Uge1xuIDQzMDpcdFx0XHRcdFx0cHRlID0gcHRlcF9nZXRfYW5kX2NsZWFyKG1tLCBhZGRyLCBwdGVwKTtcbiA0MzE6XHRcdFx0XHR9XG4gNDMyOlx0XG4gNDMzOlx0XHRcdFx0bWlncmF0ZS1cdTAwM2VjcGFnZXMmIzQzOyYjNDM7O1xuIDQzNDpcdFxuIDQzNTpcdFx0XHRcdC8qIFNldCB0aGUgZGlydHkgZmxhZyBvbiB0aGUgZm9saW8gbm93IHRoZSBwdGUgaXMgZ29uZS4gKi9cbiA0MzY6XHRcdFx0XHRpZiAocHRlX3ByZXNlbnQocHRlKSBcdTAwMjZcdTAwMjYgcHRlX2RpcnR5KHB0ZSkpXG4gNDM3Olx0XHRcdFx0XHRmb2xpb19tYXJrX2RpcnR5KGZvbGlvKTtcbiA0Mzg6XHRcbiA0Mzk6XHRcdFx0XHQvKiBTZXR1cCBzcGVjaWFsIG1pZ3JhdGlvbiBwYWdlIHRhYmxlIGVudHJ5ICovXG4gNDQwOlx0XHRcdFx0aWYgKG1wZm4gXHUwMDI2IE1JR1JBVEVfUEZOX1dSSVRFKVxuIDQ0MTpcdFx0XHRcdFx0ZW50cnkgPSBtYWtlX3dyaXRhYmxlX21pZ3JhdGlvbl9lbnRyeShcbiA0NDI6XHRcdFx0XHRcdFx0XHRcdHBhZ2VfdG9fcGZuKHBhZ2UpKTtcbiA0NDM6XHRcdFx0XHRlbHNlIGlmIChhbm9uX2V4Y2x1c2l2ZSlcbiA0NDQ6XHRcdFx0XHRcdGVudHJ5ID0gbWFrZV9yZWFkYWJsZV9leGNsdXNpdmVfbWlncmF0aW9uX2VudHJ5KFxuIDQ0NTpcdFx0XHRcdFx0XHRcdFx0cGFnZV90b19wZm4ocGFnZSkpO1xuIDQ0NjpcdFx0XHRcdGVsc2VcbiA0NDc6XHRcdFx0XHRcdGVudHJ5ID0gbWFrZV9yZWFkYWJsZV9taWdyYXRpb25fZW50cnkoXG4gNDQ4Olx0XHRcdFx0XHRcdFx0XHRwYWdlX3RvX3BmbihwYWdlKSk7XG4gNDQ5Olx0XHRcdFx0aWYgKHB0ZV9wcmVzZW50KHB0ZSkpIHtcbiA0NTA6XHRcdFx0XHRcdGlmIChwdGVfeW91bmcocHRlKSlcbiA0NTE6XHRcdFx0XHRcdFx0ZW50cnkgPSBtYWtlX21pZ3JhdGlvbl9lbnRyeV95b3VuZyhlbnRyeSk7XG4gNDUyOlx0XHRcdFx0XHRpZiAocHRlX2RpcnR5KHB0ZSkpXG4gNDUzOlx0XHRcdFx0XHRcdGVudHJ5ID0gbWFrZV9taWdyYXRpb25fZW50cnlfZGlydHkoZW50cnkpO1xuIDQ1NDpcdFx0XHRcdH1cbiA0NTU6XHRcdFx0XHRzd3BfcHRlID0gc3dwX2VudHJ5X3RvX3B0ZShlbnRyeSk7XG4gNDU2Olx0XHRcdFx0aWYgKHB0ZV9wcmVzZW50KHB0ZSkpIHtcbiA0NTc6XHRcdFx0XHRcdGlmIChwdGVfc29mdF9kaXJ0eShwdGUpKVxuIDQ1ODpcdFx0XHRcdFx0XHRzd3BfcHRlID0gcHRlX3N3cF9ta3NvZnRfZGlydHkoc3dwX3B0ZSk7XG4gNDU5Olx0XHRcdFx0XHRpZiAocHRlX3VmZmRfd3AocHRlKSlcbiA0NjA6XHRcdFx0XHRcdFx0c3dwX3B0ZSA9IHB0ZV9zd3BfbWt1ZmZkX3dwKHN3cF9wdGUpO1xuIDQ2MTpcdFx0XHRcdH0gZWxzZSB7XG4gNDYyOlx0XHRcdFx0XHRpZiAocHRlX3N3cF9zb2Z0X2RpcnR5KHB0ZSkpXG4gNDYzOlx0XHRcdFx0XHRcdHN3cF9wdGUgPSBwdGVfc3dwX21rc29mdF9kaXJ0eShzd3BfcHRlKTtcbiA0NjQ6XHRcdFx0XHRcdGlmIChwdGVfc3dwX3VmZmRfd3AocHRlKSlcbiA0NjU6XHRcdFx0XHRcdFx0c3dwX3B0ZSA9IHB0ZV9zd3BfbWt1ZmZkX3dwKHN3cF9wdGUpO1xuIDQ2NjpcdFx0XHRcdH1cbiA0Njc6XHRcdFx0XHRzZXRfcHRlX2F0KG1tLCBhZGRyLCBwdGVwLCBzd3BfcHRlKTtcbiA0Njg6XHRcbiA0Njk6XHRcdFx0XHQvKlxuIDQ3MDpcdFx0XHRcdCAqIFRoaXMgaXMgbGlrZSByZWd1bGFyIHVubWFwOiB3ZSByZW1vdmUgdGhlIHJtYXAgYW5kXG4gNDcxOlx0XHRcdFx0ICogZHJvcCB0aGUgZm9saW8gcmVmY291bnQuIFRoZSBmb2xpbyB3b24mIzM5O3QgYmUgZnJlZWQsIGFzXG4gNDcyOlx0XHRcdFx0ICogd2UgdG9vayBhIHJlZmVyZW5jZSBqdXN0IGFib3ZlLlxuIDQ3MzpcdFx0XHRcdCAqL1xuIDQ3NDpcdFx0XHRcdGZvbGlvX3JlbW92ZV9ybWFwX3B0ZShmb2xpbywgcGFnZSwgdm1hKTtcbiA0NzU6XHRcdFx0XHRmb2xpb19wdXQoZm9saW8pO1xuIDQ3NjpcdFxuIDQ3NzpcdFx0XHRcdGlmIChwdGVfcHJlc2VudChwdGUpKVxuIDQ3ODpcdFx0XHRcdFx0dW5tYXBwZWQmIzQzOyYjNDM7O1xuIDQ3OTpcdFx0XHR9IGVsc2Uge1xuIDQ4MDpcdFx0XHRcdGZvbGlvX3B1dChmb2xpbyk7XG4gNDgxOlx0XHRcdFx0bXBmbiA9IDA7XG4gNDgyOlx0XHRcdH1cbiA0ODM6XHRcbiA0ODQ6XHRuZXh0OlxuIDQ4NTpcdFx0XHRtaWdyYXRlLVx1MDAzZWRzdFttaWdyYXRlLVx1MDAzZW5wYWdlc10gPSAwO1xuIDQ4NjpcdFx0XHRtaWdyYXRlLVx1MDAzZXNyY1ttaWdyYXRlLVx1MDAzZW5wYWdlcyYjNDM7JiM0MztdID0gbXBmbjtcbiA0ODc6XHRcdH1cbiA0ODg6XHRcbiA0ODk6XHRcdC8qIE9ubHkgZmx1c2ggdGhlIFRMQiBpZiB3ZSBhY3R1YWxseSBtb2RpZmllZCBhbnkgZW50cmllcyAqL1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA2IDE2OjE2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDM5MDIKCQkJCQkJCW91dHB1dDogMjcKCQkJCQkJCXRob3VnaHRzOiA3MAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipGaXhpbmcgYSBOb24tUHJlc2VudCBQVEUgSXNzdWUgaW4gTWlncmF0ZSBEZXZpY2UqKgoKT2theSwgc28gdGhpcyBwYXRjaCBpcyBhZGRyZXNzaW5nIGEgcHJldHR5IHNwZWNpZmljIGJ1ZyDigJMgc29tZW9uZSYjMzk7cyBjYWxsaW5nIGBwdGVfcGZuKHB0ZSlgIG9yIGBwdGVfZGlydHkocHRlKWAgb24gYSBQVEUgdGhhdCBpc24mIzM5O3QgYWN0dWFsbHkgcHJlc2VudC4gVGhhdCYjMzk7cyBhIGNsYXNzaWMgbWVtb3J5IG1hbmFnZW1lbnQgcHJvYmxlbSwgYW5kIGl0JiMzOTtzIGdvb2QgdGhleSYjMzk7cmUgY2F0Y2hpbmcgaXQuIEZ1bmN0aW9uYWxseSwgdGhpcyBjb2RlJiMzOTtzIHJlbGF0ZWQgdG8gYG1pZ3JhdGVfdm1hX2NvbGxlY3RfcG1kYCwgc28gaXQmIzM5O3MgY2xlYXJseSBpbnZvbHZlZCBpbiBwYWdlIG1pZ3JhdGlvbiwgd2hpY2ggaXMgd2hlcmUgdGhpbmdzIGNhbiBnZXQgdHJpY2t5IHdpdGggcGFnZSB0YWJsZSBlbnRyaWVzLiBMZXQmIzM5O3Mgc2VlLi4uIEkgbmVlZCB0byBmaWd1cmUgb3V0IHdoYXQgY29uZmlndXJhdGlvbnMgYXJlIHJlbGV2YW50IHRvIHRoYXQgZmlsZSwgYG1tL21pZ3JhdGVfZGV2aWNlLmNgLCBiZWNhdXNlIHVuZGVyc3RhbmRpbmcgdGhlIGNvbnRleHQgb2YgdGhpcyBmaXggaXMgZ29pbmcgdG8gYmUgY3J1Y2lhbC4gSSYjMzk7bGwgbmVlZCB0byBrbm93ICp3aHkqIHRoaXMgc2NlbmFyaW8gaXMgZXZlbiBoYXBwZW5pbmcgaW4gdGhlIGZpcnN0IHBsYWNlIHRvIHVuZGVyc3RhbmQgdGhlIHJvb3QgY2F1c2UgYW5kIGVuc3VyZSB0aGUgZml4IGlzIHJvYnVzdC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wNiAxNjoxNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDttaWdyYXRlX2RldmljZS5vJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL01ha2VmaWxlPTk5PW9iai0kKENPTkZJR19OVU1BKSAmIzQzOz0gbWVtb3J5LXRpZXJzLm9cbm1tL01ha2VmaWxlOjEwMDpvYmotJChDT05GSUdfREVWSUNFX01JR1JBVElPTikgJiM0Mzs9IG1pZ3JhdGVfZGV2aWNlLm9cbm1tL01ha2VmaWxlLTEwMS1vYmotJChDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0UpICYjNDM7PSBodWdlX21lbW9yeS5vIGtodWdlcGFnZWQub1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA2IDE2OjE2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQyODMKCQkJCQkJCW91dHB1dDogMjgKCQkJCQkJCXRob3VnaHRzOiAyNAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgZm9yIGFuIGV4cGVydCBsaWtlIG15c2VsZjoKCioqSW5pdGlhbCBDb25maWd1cmF0aW9uIEFzc2Vzc21lbnQqKgoKQWxyaWdodCwgc28gdGhlIHRhc2sgYXQgaGFuZCBoaW5nZXMgb24gYENPTkZJR19ERVZJQ0VfTUlHUkFUSU9OYC4gVGhhdCYjMzk7cyB0aGUgY29yZSByZXF1aXJlbWVudCwgSSBnZXQgdGhhdC4gQnV0LCBuYXR1cmFsbHksIGJlZm9yZSBkaXZpbmcgaW4sIEkgbmVlZCB0byB0YWtlIGEgd2lkZXIgdmlldy4gVGhpcyBpc24mIzM5O3QgYW4gaXNvbGF0ZWQgc2V0dGluZzsgdGhlc2UgY29uZmlndXJhdGlvbnMgYXJlIG9mdGVuIGludGVydHdpbmVkLiBTbywgbGV0JiMzOTtzIHRha2UgYSBxdWljayBsb29rIGFyb3VuZC4gV2hhdCBvdGhlciByZWxhdGVkIGNvbmZpZ3VyYXRpb25zIG1pZ2h0IGJlIGx1cmtpbmcgdGhhdCB3b3VsZCBpbmZsdWVuY2UgdGhpcyBzZXR1cCwgb3IgdGhhdCBgQ09ORklHX0RFVklDRV9NSUdSQVRJT05gIG1pZ2h0IGFmZmVjdD8gR290dGEgYnVpbGQgdGhlIGZ1bGwgcGljdHVyZSBiZWZvcmUgSSBzdGFydCBtYWtpbmcgYW55IGNoYW5nZXMsIEkgZG9uJiMzOTt0IHdhbnQgdG8gbWFrZSB0aGluZ3Mgd29yc2Ugd2l0aCBhbiBpc29sYXRlZCBmaXghCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDYgMTY6MTY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIERFVklDRV9NSUdSQVRJT04mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vS2NvbmZpZz02OTY9Y29uZmlnIE1JR1JBVElPTlxuLS1cbm1tL0tjb25maWctNjk5LVxubW0vS2NvbmZpZzo3MDA6Y29uZmlnIERFVklDRV9NSUdSQVRJT05cbm1tL0tjb25maWctNzAxLVx0ZGVmX2Jvb2wgTUlHUkFUSU9OIFx1MDAyNlx1MDAyNiBaT05FX0RFVklDRVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA2IDE2OjE2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQ1NTkKCQkJCQkJCW91dHB1dDogMjYKCQkJCQkJCXRob3VnaHRzOiA0OQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGlzIGxvZ2ljLCBhcyB0aG91Z2ggaXQgd2VyZSBteSBvd24gdGhvdWdodCBwcm9jZXNzOgoKKipEaXZpbmcgaW50byBEZXZpY2UgTWlncmF0aW9uIFJlcXVpcmVtZW50cyoqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBUaGUgZGVmaW5pdGlvbiBvZiBgREVWSUNFX01JR1JBVElPTmAgaGluZ2VzIG9uIHR3byBvdGhlciBjb21wb25lbnRzOiBgTUlHUkFUSU9OYCBhbmQgYFpPTkVfREVWSUNFYC4gU3BlY2lmaWNhbGx5LCBgREVWSUNFX01JR1JBVElPTmAgaXMgdHJ1ZSBpZiBhbmQgb25seSBpZiBib3RoIGBNSUdSQVRJT05gICphbmQqIGBaT05FX0RFVklDRWAgYXJlIHRydWUgKGl0JiMzOTtzIGFuIEFORCBjb25kaXRpb24sIEkgc2VlKS4gIFRoZXJlZm9yZSwgdG8gZW5hYmxlIGRldmljZSBtaWdyYXRpb24sIHdlIGFic29sdXRlbHkgKm11c3QqIGhhdmUgYm90aCBgQ09ORklHX01JR1JBVElPTmAgYW5kIGBDT05GSUdfWk9ORV9ERVZJQ0VgIGVuYWJsZWQgaW4gdGhlIGNvbmZpZ3VyYXRpb24uIFRoYXQgbWFrZXMgcGVyZmVjdCBzZW5zZS4gTm93LCBsZXQgbWUganVzdCBkb3VibGUtY2hlY2sgdGhhdCBgWk9ORV9ERVZJQ0VgIGlzIHNldCBjb3JyZWN0bHkuIEkmIzM5O2xsIG5lZWQgdG8gZGlnIGludG8gdGhlIGRlZmluaXRpb24gb2YgYFpPTkVfREVWSUNFYCB0byB2ZXJpZnkuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA2IDE2OjE2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBaT05FX0RFVklDRSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9LY29uZmlnPTEyMzE9Y29uZmlnIFpPTkVfRE1BMzJcbi0tXG5tbS9LY29uZmlnLTEyMzUtXG5tbS9LY29uZmlnOjEyMzY6Y29uZmlnIFpPTkVfREVWSUNFXG5tbS9LY29uZmlnLTEyMzctXHRib29sIFwmIzM0O0RldmljZSBtZW1vcnkgKHBtZW0sIEhNTSwgZXRjLi4uKSBob3RwbHVnIHN1cHBvcnRcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDYgMTY6MTc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDkwNQoJCQkJCQkJb3V0cHV0OiAyNgoJCQkJCQkJdGhvdWdodHM6IDIwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRob3VnaHQgcHJvY2VzcywgYXMgaWYgSSB3ZXJlIGNvbnNpZGVyaW5nIHRoaXMgY29kZToKCioqQW5hbHl6aW5nIEJvb2xlYW4gU3RhdGVzKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIGNvZGUgYW5kIHRoZSBmaXJzdCB0aGluZyB0aGF0IGp1bXBzIG91dCBpcyBgWk9ORV9ERVZJQ0VgLiBSaWdodCwgdGhhdCYjMzk7cyBhIGJvb2xlYW4sIG1ha2VzIHNlbnNlLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcywgJiMzNDtXaGF0JiMzOTtzIHRoZSBjb250ZXh0PyBXaGF0IGlzIHRoaXMgYFpPTkVfREVWSUNFYCBmbGFnIHVzZWQgZm9yPyYjMzQ7IEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGF0IGJvb2xlYW4gc3RhdGUgaW5mbHVlbmNlcyB0aGUgb3ZlcmFsbCBzeXN0ZW0gYmVoYXZpb3IuCgpOb3csIHdoZXJlIHdhcyBJPyBSaWdodCwgYE1JR1JBVElPTmAuIExldCBtZSBkaXZlIGludG8gaG93IG1pZ3JhdGlvbiBpcyBoYW5kbGVkIGluIHRoaXMgY29kZS4gV2hhdCYjMzk7cyB0aGUgcmVsYXRpb25zaGlwIGJldHdlZW4gdGhlIGBaT05FX0RFVklDRWAgZmxhZyBhbmQgdGhlIG1pZ3JhdGlvbiBwcm9jZXNzPyBBcmUgdGhleSBpbmRlcGVuZGVudCBjb25jZXJucyBvciBpcyBgWk9ORV9ERVZJQ0VgIHVzZWQgdG8gdG9nZ2xlIHRoZSBlZmZlY3RzIG9mIGBNSUdSQVRJT05gPyBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgZGVwZW5kZW5jaWVzIGFuZCB0aGUgb3ZlcmFsbCBhcmNoaXRlY3R1cmUuIEkgc2hvdWxkIGludmVzdGlnYXRlIGhvdyB0aGVzZSB0d28gdmFyaWFibGVzIGludGVyYWN0IHdpdGhpbiB0aGUgbGFyZ2VyIHN5c3RlbS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDYgMTY6MTc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIE1JR1JBVElPTiYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9LY29uZmlnPTY4NT1jb25maWcgTlVNQV9NSUdSQVRJT05cbi0tXG5tbS9LY29uZmlnLTY5NS1cbm1tL0tjb25maWc6Njk2OmNvbmZpZyBNSUdSQVRJT05cbm1tL0tjb25maWctNjk3LVx0Ym9vbFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wNiAxNjoxNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1MjA0CgkJCQkJCQlvdXRwdXQ6IDMxCgkJCQkJCQl0aG91Z2h0czogMjgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIG15IG93bjoKCioqQW5hbHl6aW5nIE1pZ3JhdGlvbiBMb2dpYyoqCgpBbHJpZ2h0LCBzbyBgTUlHUkFUSU9OYCBpcyBkZWZpbmVkIGFzIGEgYm9vbGVhbiDigJMgbWFrZXMgc2Vuc2UuIE5vdyBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGVyZSB0aGlzIGlzIGJlaW5nIHVzZWQgYW5kIGhvdyBpdCBpbmZsdWVuY2VzIHRoZSBmbG93LiBUaW1lIHRvIGRpZyBpbnRvIHRoZSBjYWxsIHNpdGVzIG9mIGBtaWdyYXRlX3ZtYV9jb2xsZWN0X3BtZGAuIFRoaXMgd2lsbCBnaXZlIG1lIGEgY2xlYXIgcGljdHVyZSBvZiBob3cgdGhlIG1pZ3JhdGlvbiBmbGFnIGludGVyYWN0cyB3aXRoIHRoZSBwYWdlIHRhYmxlIG1hbmlwdWxhdGlvbnMgYW5kIHBoeXNpY2FsIG1lbW9yeSByZW1hcHBpbmcuIEkgZXhwZWN0IHRvIHNlZSBpdHMgdXNlIGRpcmVjdGx5IGluIHRoZSBjb3JlIG1pZ3JhdGlvbiByb3V0aW5lcywgYnV0IGtub3dpbmcgdGhlIGltbWVkaWF0ZSBjYWxsZXJzIHdpbGwgc2hlZCBsaWdodCBvbiB0aGUgY29udGV4dCBhbmQgYW55IGNvbmRpdGlvbmFsIGRlcGVuZGVuY2llcyB0aGF0IG5lZWQgdG8gYmUgY29uc2lkZXJlZC4gTGV0JiMzOTtzIHNlZSB3aGF0IHdlIHVuY292ZXIuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA2IDE2OjE3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O21pZ3JhdGVfdm1hX2NvbGxlY3RfcG1kJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL21pZ3JhdGVfZGV2aWNlLmM9MTM3PXN0YXRpYyBpbnQgbWlncmF0ZV92bWFfY29sbGVjdF9odWdlX3BtZChwbWRfdCAqcG1kcCwgdW5zaWduZWQgbG9uZyBzdGFydCxcbi0tXG5tbS9taWdyYXRlX2RldmljZS5jLTI0NC1cbm1tL21pZ3JhdGVfZGV2aWNlLmM6MjQ1OnN0YXRpYyBpbnQgbWlncmF0ZV92bWFfY29sbGVjdF9wbWQocG1kX3QgKnBtZHAsXG5tbS9taWdyYXRlX2RldmljZS5jLTI0Ni1cdFx0XHRcdCAgIHVuc2lnbmVkIGxvbmcgc3RhcnQsXG4tLVxubW0vbWlncmF0ZV9kZXZpY2UuYz00OTk9c3RhdGljIGNvbnN0IHN0cnVjdCBtbV93YWxrX29wcyBtaWdyYXRlX3ZtYV93YWxrX29wcyA9IHtcbm1tL21pZ3JhdGVfZGV2aWNlLmM6NTAwOlx0LnBtZF9lbnRyeVx0XHQ9IG1pZ3JhdGVfdm1hX2NvbGxlY3RfcG1kLFxubW0vbWlncmF0ZV9kZXZpY2UuYy01MDEtXHQucHRlX2hvbGVcdFx0PSBtaWdyYXRlX3ZtYV9jb2xsZWN0X2hvbGUsXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA2IDE2OjE3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDU2MTcKCQkJCQkJCW91dHB1dDogMzAKCQkJCQkJCXRob3VnaHRzOiAzNAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgZnJvbSBteSBwZXJzcGVjdGl2ZToKCioqSW52ZXN0aWdhdGluZyB0aGUgVXNhZ2Ugb2YgYG1pZ3JhdGVfdm1hX3dhbGtfb3BzYCoqCgpIbW0sIHNvIGBtaWdyYXRlX3ZtYV93YWxrX29wc2AgaXMgdGhlIGtleSBoZXJlLiBSaWdodC4gSXQmIzM5O3MgdXNlZCBpbiBzb21ldGhpbmcgY2FsbGVkIGBtaWdyYXRlX3ZtYV93YWxrX29wc2AuIFRoZSBxdWVzdGlvbiBub3cgYmVjb21lczogd2hlcmUgaXMgKnRoYXQqIHVzZWQ/IFRoYXQmIzM5O3MgdGhlIG5leHQgbG9naWNhbCBzdGVwIGluIHVuZGVyc3RhbmRpbmcgdGhlIGNvbnRleHQgYW5kIHB1cnBvc2Ugb2YgdGhpcyBwYXJ0aWN1bGFyIGNvbXBvbmVudC4gTmVlZCB0byB0cmFjZSBpdHMgaW52b2NhdGlvbnMgdG8gZ2V0IHRoZSBicm9hZGVyIHBpY3R1cmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA2IDE2OjE3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O21pZ3JhdGVfdm1hX3dhbGtfb3BzJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL21pZ3JhdGVfZGV2aWNlLmM9MjQ1PXN0YXRpYyBpbnQgbWlncmF0ZV92bWFfY29sbGVjdF9wbWQocG1kX3QgKnBtZHAsXG4tLVxubW0vbWlncmF0ZV9kZXZpY2UuYy00OTgtXG5tbS9taWdyYXRlX2RldmljZS5jOjQ5OTpzdGF0aWMgY29uc3Qgc3RydWN0IG1tX3dhbGtfb3BzIG1pZ3JhdGVfdm1hX3dhbGtfb3BzID0ge1xubW0vbWlncmF0ZV9kZXZpY2UuYy01MDAtXHQucG1kX2VudHJ5XHRcdD0gbWlncmF0ZV92bWFfY29sbGVjdF9wbWQsXG4tLVxubW0vbWlncmF0ZV9kZXZpY2UuYz01MTM9c3RhdGljIHZvaWQgbWlncmF0ZV92bWFfY29sbGVjdChzdHJ1Y3QgbWlncmF0ZV92bWEgKm1pZ3JhdGUpXG4tLVxubW0vbWlncmF0ZV9kZXZpY2UuYy01MjctXHR3YWxrX3BhZ2VfcmFuZ2Vfdm1hKG1pZ3JhdGUtXHUwMDNldm1hLCBtaWdyYXRlLVx1MDAzZXN0YXJ0LCBtaWdyYXRlLVx1MDAzZWVuZCxcbm1tL21pZ3JhdGVfZGV2aWNlLmM6NTI4Olx0XHRcdFx1MDAyNm1pZ3JhdGVfdm1hX3dhbGtfb3BzLCBtaWdyYXRlKTtcbm1tL21pZ3JhdGVfZGV2aWNlLmMtNTI5LVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wNiAxNjoxNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA2MDI3CgkJCQkJCQlvdXRwdXQ6IDI4CgkJCQkJCQl0aG91Z2h0czogMTkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIGFuZCB3cml0dGVuIGluIHRoZSBmaXJzdCBwZXJzb246CgoqKk15IE1pZ3JhdGlvbiBQbGFubmluZzogYG1pZ3JhdGVfdm1hX2NvbGxlY3RgJiMzOTtzIFJvbGUqKgoKQWxyaWdodCwgSSYjMzk7bSB0aGlua2luZyBhYm91dCB0aGUgbWlncmF0aW9uIHByb2Nlc3MsIHNwZWNpZmljYWxseSB3aXRoaW4gdGhlIHZpcnR1YWwgbWVtb3J5IGFyZWEgKFZNQSkgY29udGV4dC4gSSYjMzk7dmUgZ290IGBtaWdyYXRlX3ZtYV9zZXR1cGAga2lja2luZyB0aGluZ3Mgb2ZmLCB3aGljaCBpcyB0aGUgbG9naWNhbCBlbnRyeSBwb2ludCBmb3IgcHJlcGFyaW5nIGEgVk1BIGZvciBtaWdyYXRpb24uIE5vdywgSSYjMzk7bSB0cmFjaW5nIHRoZSBleGVjdXRpb24gcGF0aCwgYW5kIEkgc2VlIGBtaWdyYXRlX3ZtYV9jb2xsZWN0YCBnZXR0aW5nIGNhbGxlZCBmcm9tIHdpdGhpbiBgbWlncmF0ZV92bWFfc2V0dXBgLiBUaGF0IGltbWVkaWF0ZWx5IGZsYWdzIGEgcGFydGljdWxhciBmdW5jdGlvbiBmb3IgbWUuIEl0JiMzOTtzIGNvbGxlY3RpbmcgaW5mb3JtYXRpb246IGdhdGhlciB0aGUgcmVsZXZhbnQgZGF0YSBvciBnYXRoZXIgdGhpbmdzIHRoYXQgd2lsbCBiZSB1c2VkIGR1cmluZyB0aGUgbWVtb3J5IG1vdmUuIFRoaXMgc3Ryb25nbHkgc3VnZ2VzdHMgdGhhdCBpdCYjMzk7cyB0aGUgcGhhc2Ugd2hlcmUgd2UmIzM5O3JlIGdvaW5nIHRvIGV4YW1pbmUgYW5kIHBvdGVudGlhbGx5IGludmVudG9yeSB0aGUgVk1BJiMzOTtzIGNvbnRlbnRzIG9yIG1ldGFkYXRhLiBUaGluayBvZiBpdCBhcyBwcmVwYXJpbmcgdGhlICYjMzQ7bWFuaWZlc3QmIzM0OyBvciBhIGRpcmVjdG9yeSBsaXN0aW5nIG9mIHdoYXQgbmVlZHMgdG8gbW92ZS4gVGhpcyBjb3VsZCBpbnZvbHZlIGlkZW50aWZ5aW5nIGRpcnR5IHBhZ2VzLCBtYXBwaW5nIGluZm9ybWF0aW9uLCBhY2Nlc3MgcGVybWlzc2lvbnMsIG9yIGFueXRoaW5nIGVsc2UgZXNzZW50aWFsIGZvciBhIGNvbXBsZXRlIGFuZCBjb25zaXN0ZW50IG1pZ3JhdGlvbi4gS25vd2luZyB0aGlzIGlzIGNyaXRpY2FsIGJlY2F1c2UgaXQgdGVsbHMgbWUgd2hlcmUgSSBuZWVkIHRvIGxvb2sgZm9yIGVmZmljaWVuY3kgZ2FpbnMgb3IgcG90ZW50aWFsIGZhaWx1cmUgcG9pbnRzIGxhdGVyIGRvd24gdGhlIHByb2Nlc3MuIEkmIzM5O2xsIG5lZWQgdG8gZHJpbGwgZG93biBpbnRvIHRoZSBpbXBsZW1lbnRhdGlvbiBvZiBgbWlncmF0ZV92bWFfY29sbGVjdGAgdG8gdW5kZXJzdGFuZCBleGFjdGx5ICp3aGF0KiBpdCYjMzk7cyBjb2xsZWN0aW5nIGFuZCAqaG93KiBpdCYjMzk7cyBkb2luZyBpdC4gQW55IHBvdGVudGlhbCBib3R0bGVuZWNrcyB3aWxsIHNob3cgdXAgaGVyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDYgMTY6MTc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bWlncmF0ZV92bWFfY29sbGVjdCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9taWdyYXRlX2RldmljZS5jLTIwLVxubW0vbWlncmF0ZV9kZXZpY2UuYzoyMTpzdGF0aWMgaW50IG1pZ3JhdGVfdm1hX2NvbGxlY3Rfc2tpcCh1bnNpZ25lZCBsb25nIHN0YXJ0LFxubW0vbWlncmF0ZV9kZXZpY2UuYy0yMi1cdFx0XHRcdCAgICB1bnNpZ25lZCBsb25nIGVuZCxcbi0tXG5tbS9taWdyYXRlX2RldmljZS5jLTM1LVxubW0vbWlncmF0ZV9kZXZpY2UuYzozNjpzdGF0aWMgaW50IG1pZ3JhdGVfdm1hX2NvbGxlY3RfaG9sZSh1bnNpZ25lZCBsb25nIHN0YXJ0LFxubW0vbWlncmF0ZV9kZXZpY2UuYy0zNy1cdFx0XHRcdCAgICB1bnNpZ25lZCBsb25nIGVuZCxcbi0tXG5tbS9taWdyYXRlX2RldmljZS5jLTQ1LVx0aWYgKCF2bWFfaXNfYW5vbnltb3VzKHdhbGstXHUwMDNldm1hKSlcbm1tL21pZ3JhdGVfZGV2aWNlLmM6NDY6XHRcdHJldHVybiBtaWdyYXRlX3ZtYV9jb2xsZWN0X3NraXAoc3RhcnQsIGVuZCwgd2Fsayk7XG5tbS9taWdyYXRlX2RldmljZS5jLTQ3LVxuLS1cbm1tL21pZ3JhdGVfZGV2aWNlLmMtNjEtXHRcdCAqL1xubW0vbWlncmF0ZV9kZXZpY2UuYzo2MjpcdFx0cmV0dXJuIG1pZ3JhdGVfdm1hX2NvbGxlY3Rfc2tpcChzdGFydCAmIzQzOyBQQUdFX1NJWkUsIGVuZCwgd2Fsayk7XG5tbS9taWdyYXRlX2RldmljZS5jLTYzLVx0fVxuLS1cbm1tL21pZ3JhdGVfZGV2aWNlLmM9ODU9c3RhdGljIGludCBtaWdyYXRlX3ZtYV9zcGxpdF9mb2xpbyhzdHJ1Y3QgZm9saW8gKmZvbGlvLFxuLS1cbm1tL21pZ3JhdGVfZGV2aWNlLmMtMTI0LVxubW0vbWlncmF0ZV9kZXZpY2UuYzoxMjU6LyoqIG1pZ3JhdGVfdm1hX2NvbGxlY3RfaHVnZV9wbWQgLSBjb2xsZWN0IFRIUCBwYWdlcyB3aXRob3V0IHNwbGl0dGluZyB0aGVcbm1tL21pZ3JhdGVfZGV2aWNlLmMtMTI2LSAqIGZvbGlvIGZvciBkZXZpY2UgcHJpdmF0ZSBwYWdlcy5cbi0tXG5tbS9taWdyYXRlX2RldmljZS5jLTEzNi0gKi9cbm1tL21pZ3JhdGVfZGV2aWNlLmM6MTM3OnN0YXRpYyBpbnQgbWlncmF0ZV92bWFfY29sbGVjdF9odWdlX3BtZChwbWRfdCAqcG1kcCwgdW5zaWduZWQgbG9uZyBzdGFydCxcbm1tL21pZ3JhdGVfZGV2aWNlLmMtMTM4LVx0XHRcdFx0XHR1bnNpZ25lZCBsb25nIGVuZCwgc3RydWN0IG1tX3dhbGsgKndhbGssXG4tLVxubW0vbWlncmF0ZV9kZXZpY2UuYy0xNTAtXHRcdHNwaW5fdW5sb2NrKHB0bCk7XG5tbS9taWdyYXRlX2RldmljZS5jOjE1MTpcdFx0cmV0dXJuIG1pZ3JhdGVfdm1hX2NvbGxlY3RfaG9sZShzdGFydCwgZW5kLCAtMSwgd2Fsayk7XG5tbS9taWdyYXRlX2RldmljZS5jLTE1Mi1cdH1cbi0tXG5tbS9taWdyYXRlX2RldmljZS5jLTE1Ni1cdFx0XHRzcGluX3VubG9jayhwdGwpO1xubW0vbWlncmF0ZV9kZXZpY2UuYzoxNTc6XHRcdFx0cmV0dXJuIG1pZ3JhdGVfdm1hX2NvbGxlY3Rfc2tpcChzdGFydCwgZW5kLCB3YWxrKTtcbm1tL21pZ3JhdGVfZGV2aWNlLmMtMTU4LVx0XHR9XG4tLVxubW0vbWlncmF0ZV9kZXZpY2UuYy0xNjItXHRcdFx0c3Bpbl91bmxvY2socHRsKTtcbm1tL21pZ3JhdGVfZGV2aWNlLmM6MTYzOlx0XHRcdHJldHVybiBtaWdyYXRlX3ZtYV9jb2xsZWN0X2hvbGUoc3RhcnQsIGVuZCwgLTEsIHdhbGspO1xubW0vbWlncmF0ZV9kZXZpY2UuYy0xNjQtXHRcdH1cbi0tXG5tbS9taWdyYXRlX2RldmljZS5jLTE3Mi1cdFx0XHRzcGluX3VubG9jayhwdGwpO1xubW0vbWlncmF0ZV9kZXZpY2UuYzoxNzM6XHRcdFx0cmV0dXJuIG1pZ3JhdGVfdm1hX2NvbGxlY3Rfc2tpcChzdGFydCwgZW5kLCB3YWxrKTtcbm1tL21pZ3JhdGVfZGV2aWNlLmMtMTc0LVx0XHR9XG4tLVxubW0vbWlncmF0ZV9kZXZpY2UuYy0xNzgtXHRcdFx0c3Bpbl91bmxvY2socHRsKTtcbm1tL21pZ3JhdGVfZGV2aWNlLmM6MTc5Olx0XHRcdHJldHVybiBtaWdyYXRlX3ZtYV9jb2xsZWN0X3NraXAoc3RhcnQsIGVuZCwgd2Fsayk7XG5tbS9taWdyYXRlX2RldmljZS5jLTE4MC1cdFx0fVxuLS1cbm1tL21pZ3JhdGVfZGV2aWNlLmMtMTkyLVx0XHRmb2xpb19wdXQoZm9saW8pO1xubW0vbWlncmF0ZV9kZXZpY2UuYzoxOTM6XHRcdHJldHVybiBtaWdyYXRlX3ZtYV9jb2xsZWN0X3NraXAoc3RhcnQsIGVuZCwgd2Fsayk7XG5tbS9taWdyYXRlX2RldmljZS5jLTE5NC1cdH1cbi0tXG5tbS9taWdyYXRlX2RldmljZS5jLTIyMi1cdFx0fVxubW0vbWlncmF0ZV9kZXZpY2UuYzoyMjM6XHRcdG1pZ3JhdGVfdm1hX2NvbGxlY3Rfc2tpcChzdGFydCAmIzQzOyBQQUdFX1NJWkUsIGVuZCwgd2Fsayk7XG5tbS9taWdyYXRlX2RldmljZS5jLTIyNC1cdFx0c3Bpbl91bmxvY2socHRsKTtcbi0tXG5tbS9taWdyYXRlX2RldmljZS5jLTIzNi1cdGlmIChyZXQpXG5tbS9taWdyYXRlX2RldmljZS5jOjIzNzpcdFx0cmV0dXJuIG1pZ3JhdGVfdm1hX2NvbGxlY3Rfc2tpcChzdGFydCwgZW5kLCB3YWxrKTtcbm1tL21pZ3JhdGVfZGV2aWNlLmMtMjM4LVx0aWYgKHBtZF9ub25lKHBtZHBfZ2V0X2xvY2tsZXNzKHBtZHApKSlcbm1tL21pZ3JhdGVfZGV2aWNlLmM6MjM5Olx0XHRyZXR1cm4gbWlncmF0ZV92bWFfY29sbGVjdF9ob2xlKHN0YXJ0LCBlbmQsIC0xLCB3YWxrKTtcbm1tL21pZ3JhdGVfZGV2aWNlLmMtMjQwLVxuLS1cbm1tL21pZ3JhdGVfZGV2aWNlLmMtMjQ0LVxubW0vbWlncmF0ZV9kZXZpY2UuYzoyNDU6c3RhdGljIGludCBtaWdyYXRlX3ZtYV9jb2xsZWN0X3BtZChwbWRfdCAqcG1kcCxcbm1tL21pZ3JhdGVfZGV2aWNlLmMtMjQ2LVx0XHRcdFx0ICAgdW5zaWduZWQgbG9uZyBzdGFydCxcbi0tXG5tbS9taWdyYXRlX2RldmljZS5jLTI2MC1cdGlmIChwbWRfdHJhbnNfaHVnZSgqcG1kcCkgfHwgIXBtZF9wcmVzZW50KCpwbWRwKSkge1xubW0vbWlncmF0ZV9kZXZpY2UuYzoyNjE6XHRcdGludCByZXQgPSBtaWdyYXRlX3ZtYV9jb2xsZWN0X2h1Z2VfcG1kKHBtZHAsIHN0YXJ0LCBlbmQsIHdhbGssIGZhdWx0X2ZvbGlvKTtcbm1tL21pZ3JhdGVfZGV2aWNlLmMtMjYyLVxuLS1cbm1tL21pZ3JhdGVfZGV2aWNlLmMtMzI1LVxubW0vbWlncmF0ZV9kZXZpY2UuYzozMjY6XHRcdFx0XHRcdHJldHVybiBtaWdyYXRlX3ZtYV9jb2xsZWN0X3NraXAoYWRkciwgZW5kLCB3YWxrKTtcbm1tL21pZ3JhdGVfZGV2aWNlLmMtMzI3LVx0XHRcdFx0fVxuLS1cbm1tL21pZ3JhdGVfZGV2aWNlLmMtMzcxLVxubW0vbWlncmF0ZV9kZXZpY2UuYzozNzI6XHRcdFx0XHRcdHJldHVybiBtaWdyYXRlX3ZtYV9jb2xsZWN0X3NraXAoYWRkciwgZW5kLCB3YWxrKTtcbm1tL21pZ3JhdGVfZGV2aWNlLmMtMzczLVx0XHRcdFx0fVxuLS1cbm1tL21pZ3JhdGVfZGV2aWNlLmM9NDk5PXN0YXRpYyBjb25zdCBzdHJ1Y3QgbW1fd2Fsa19vcHMgbWlncmF0ZV92bWFfd2Fsa19vcHMgPSB7XG5tbS9taWdyYXRlX2RldmljZS5jOjUwMDpcdC5wbWRfZW50cnlcdFx0PSBtaWdyYXRlX3ZtYV9jb2xsZWN0X3BtZCxcbm1tL21pZ3JhdGVfZGV2aWNlLmM6NTAxOlx0LnB0ZV9ob2xlXHRcdD0gbWlncmF0ZV92bWFfY29sbGVjdF9ob2xlLFxubW0vbWlncmF0ZV9kZXZpY2UuYy01MDItXHQud2Fsa19sb2NrXHRcdD0gUEdXQUxLX1JETE9DSyxcbi0tXG5tbS9taWdyYXRlX2RldmljZS5jLTUwNS0vKlxubW0vbWlncmF0ZV9kZXZpY2UuYzo1MDY6ICogbWlncmF0ZV92bWFfY29sbGVjdCgpIC0gY29sbGVjdCBwYWdlcyBvdmVyIGEgcmFuZ2Ugb2YgdmlydHVhbCBhZGRyZXNzZXNcbm1tL21pZ3JhdGVfZGV2aWNlLmMtNTA3LSAqIEBtaWdyYXRlOiBtaWdyYXRlIHN0cnVjdCBjb250YWluaW5nIGFsbCBtaWdyYXRpb24gaW5mb3JtYXRpb25cbi0tXG5tbS9taWdyYXRlX2RldmljZS5jLTUxMi0gKi9cbm1tL21pZ3JhdGVfZGV2aWNlLmM6NTEzOnN0YXRpYyB2b2lkIG1pZ3JhdGVfdm1hX2NvbGxlY3Qoc3RydWN0IG1pZ3JhdGVfdm1hICptaWdyYXRlKVxubW0vbWlncmF0ZV9kZXZpY2UuYy01MTQte1xuLS1cbm1tL21pZ3JhdGVfZGV2aWNlLmM9NTQyPXN0YXRpYyBib29sIG1pZ3JhdGVfdm1hX2NoZWNrX3BhZ2Uoc3RydWN0IHBhZ2UgKnBhZ2UsIHN0cnVjdCBwYWdlICpmYXVsdF9wYWdlKVxuLS1cbm1tL21pZ3JhdGVfZGV2aWNlLmMtNTQ3LVx0ICogT25lIGV4dHJhIHJlZiBiZWNhdXNlIGNhbGxlciBob2xkcyBhbiBleHRyYSByZWZlcmVuY2UsIGVpdGhlciBmcm9tXG5tbS9taWdyYXRlX2RldmljZS5jOjU0ODpcdCAqIGZvbGlvX2lzb2xhdGVfbHJ1KCkgZm9yIGEgcmVndWxhciBmb2xpbywgb3IgbWlncmF0ZV92bWFfY29sbGVjdCgpIGZvclxubW0vbWlncmF0ZV9kZXZpY2UuYy01NDktXHQgKiBhIGRldmljZSBmb2xpby5cbi0tXG5tbS9taWdyYXRlX2RldmljZS5jPTc0MD1pbnQgbWlncmF0ZV92bWFfc2V0dXAoc3RydWN0IG1pZ3JhdGVfdm1hICphcmdzKVxuLS1cbm1tL21pZ3JhdGVfZGV2aWNlLmMtNzY2LVxubW0vbWlncmF0ZV9kZXZpY2UuYzo3Njc6XHRtaWdyYXRlX3ZtYV9jb2xsZWN0KGFyZ3MpO1xubW0vbWlncmF0ZV9kZXZpY2UuYy03NjgtXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA2IDE2OjE3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDgxNjQKCQkJCQkJCW91dHB1dDogMjYKCQkJCQkJCXRob3VnaHRzOiAxOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRoZSB0aG91Z2h0IHByb2Nlc3MsIGFzIHJlcXVlc3RlZDoKCioqRGVjb25zdHJ1Y3RpbmcgYG1pZ3JhdGVfdm1hX3NldHVwYCoqCgpPa2F5LCBzbyBgbWlncmF0ZV92bWFfc2V0dXBgIGlzIGV4cG9ydGVkLiBUaGF0JiMzOTtzIGludGVyZXN0aW5nOyBpdCYjMzk7cyBkZXNpZ25lZCB0byBiZSB1c2VkIGV4dGVybmFsbHksIG1lYW5pbmcgb3RoZXIgcGFydHMgb2YgdGhlIHN5c3RlbSBhcmUgcmVseWluZyBvbiBpdC4gTXkgZmlyc3QgaW5zdGluY3QsIGdpdmVuIG15IGV4cGVyaWVuY2Ugd2l0aCBtZW1vcnkgbWFuYWdlbWVudCwgaXMgdG8gZmlndXJlIG91dCB0aGUgdXNlIGNhc2VzLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgY29udGV4dHMgaW4gd2hpY2ggdGhpcyBmdW5jdGlvbiBpcyBpbnZva2VkLiBXaG8mIzM5O3MgY2FsbGluZyBpdD8gV2hhdCBhcmUgdGhleSB0cnlpbmcgdG8gYWNoaWV2ZT8gS25vd2luZyB0aGUgY2FsbGluZyBzaXRlcyBpcyBjcnVjaWFsIHRvIHVuZGVyc3RhbmRpbmcgdGhlIGludGVudCBhbmQgcG90ZW50aWFsIGltcGFjdCBvZiB0aGlzIHBpZWNlIG9mIGNvZGUuIFRpbWUgdG8gZGlnIGludG8gdGhlIGNhbGwgZ3JhcGggYW5kIHNlZSB3aG8mIzM5O3MgaW50ZXJlc3RlZCBpbiBzZXR0aW5nIHVwIHZpcnR1YWwgbWVtb3J5IGFyZWFzIGZvciBtaWdyYXRpb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA2IDE2OjE3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O21pZ3JhdGVfdm1hX3NldHVwJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O0RvY3VtZW50YXRpb24vbW0vaG1tLnJzdD0yNjQ9dXNlIGhhcmR3YXJlIERNQSBvciBkZXZpY2Ugc3BlY2lmaWMgbG9hZC9zdG9yZSBpbnN0cnVjdGlvbnMgdG8gbWlncmF0ZSBkYXRhLlxuRG9jdW1lbnRhdGlvbi9tbS9obW0ucnN0OjI2NTpUaGUgbWlncmF0ZV92bWFfc2V0dXAoKSwgbWlncmF0ZV92bWFfcGFnZXMoKSwgYW5kIG1pZ3JhdGVfdm1hX2ZpbmFsaXplKClcbkRvY3VtZW50YXRpb24vbW0vaG1tLnJzdC0yNjYtZnVuY3Rpb25zIGFyZSBkZXNpZ25lZCB0byBtYWtlIGRyaXZlcnMgZWFzaWVyIHRvIHdyaXRlIGFuZCB0byBjZW50cmFsaXplIGNvbW1vblxuLS1cbkRvY3VtZW50YXRpb24vbW0vaG1tLnJzdD0yOTc9YmV0d2VlbiBkZXZpY2UgZHJpdmVyIHNwZWNpZmljIGNvZGUgYW5kIHNoYXJlZCBjb21tb24gY29kZTpcbi0tXG5Eb2N1bWVudGF0aW9uL21tL2htbS5yc3QtMzAxLSAgIFRoZSBkZXZpY2UgZHJpdmVyIGhhcyB0byBwYXNzIGEgYGBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3RgYCB0b1xuRG9jdW1lbnRhdGlvbi9tbS9obW0ucnN0OjMwMjogICBtaWdyYXRlX3ZtYV9zZXR1cCgpIHNvIHRoZSBtbWFwX3JlYWRfbG9jaygpIG9yIG1tYXBfd3JpdGVfbG9jaygpIG5lZWRzIHRvXG5Eb2N1bWVudGF0aW9uL21tL2htbS5yc3QtMzAzLSAgIGJlIGhlbGQgZm9yIHRoZSBkdXJhdGlvbiBvZiB0aGUgbWlncmF0aW9uLlxuRG9jdW1lbnRhdGlvbi9tbS9obW0ucnN0LTMwNC1cbkRvY3VtZW50YXRpb24vbW0vaG1tLnJzdDozMDU6Mi4gYGBtaWdyYXRlX3ZtYV9zZXR1cChzdHJ1Y3QgbWlncmF0ZV92bWEgKmFyZ3MpYGBcbkRvY3VtZW50YXRpb24vbW0vaG1tLnJzdC0zMDYtXG5Eb2N1bWVudGF0aW9uL21tL2htbS5yc3QtMzA3LSAgIFRoZSBkZXZpY2UgZHJpdmVyIGluaXRpYWxpemVzIHRoZSBgYHN0cnVjdCBtaWdyYXRlX3ZtYWBgIGZpZWxkcyBhbmQgcGFzc2VzXG5Eb2N1bWVudGF0aW9uL21tL2htbS5yc3Q6MzA4OiAgIHRoZSBwb2ludGVyIHRvIG1pZ3JhdGVfdm1hX3NldHVwKCkuIFRoZSBgYGFyZ3MtXHUwMDNlZmxhZ3NgYCBmaWVsZCBpcyB1c2VkIHRvXG5Eb2N1bWVudGF0aW9uL21tL2htbS5yc3QtMzA5LSAgIGZpbHRlciB3aGljaCBzb3VyY2UgcGFnZXMgc2hvdWxkIGJlIG1pZ3JhdGVkLiBGb3IgZXhhbXBsZSwgc2V0dGluZ1xuLS1cbkRvY3VtZW50YXRpb24vbW0vaG1tLnJzdC0zMTctXG5Eb2N1bWVudGF0aW9uL21tL2htbS5yc3Q6MzE4OiAgIE9uZSBvZiB0aGUgZmlyc3Qgc3RlcHMgbWlncmF0ZV92bWFfc2V0dXAoKSBkb2VzIGlzIHRvIGludmFsaWRhdGUgb3RoZXJcbkRvY3VtZW50YXRpb24vbW0vaG1tLnJzdC0zMTktICAgZGV2aWNlJiMzOTtzIE1NVXMgd2l0aCB0aGUgYGBtbXVfbm90aWZpZXJfaW52YWxpZGF0ZV9yYW5nZV9zdGFydCgoKWBgIGFuZFxuLS1cbkRvY3VtZW50YXRpb24vbW0vaG1tLnJzdC0zMjQtICAgYGBNTVVfTk9USUZZX01JR1JBVEVgYCBhbmQgdGhlIGBgb3duZXJgYCBmaWVsZCBzZXQgdG9cbkRvY3VtZW50YXRpb24vbW0vaG1tLnJzdDozMjU6ICAgdGhlIGBgYXJncy1cdTAwM2VwZ21hcF9vd25lcmBgIGZpZWxkIHBhc3NlZCB0byBtaWdyYXRlX3ZtYV9zZXR1cCgpLiBUaGlzXG5Eb2N1bWVudGF0aW9uL21tL2htbS5yc3QtMzI2LSAgIGFsbG93cyB0aGUgZGV2aWNlIGRyaXZlciB0byBza2lwIHRoZSBpbnZhbGlkYXRpb24gY2FsbGJhY2sgYW5kIG9ubHlcbi0tXG5Eb2N1bWVudGF0aW9uL21tL2htbS5yc3QtMzM3LSAgIGluc2VydGVkIGluIHBsYWNlIG9mIHRoZSBvcmlnaW5hbCBQVEUuXG5Eb2N1bWVudGF0aW9uL21tL2htbS5yc3Q6MzM4OiAgIG1pZ3JhdGVfdm1hX3NldHVwKCkgYWxzbyBjbGVhcnMgdGhlIGBgYXJncy1cdTAwM2Vkc3RgYCBhcnJheS5cbkRvY3VtZW50YXRpb24vbW0vaG1tLnJzdC0zMzktXG4tLVxuRG9jdW1lbnRhdGlvbi90cmFuc2xhdGlvbnMvemhfQ04vbW0vaG1tLnJzdD0yMTI9SE1NIOWIh+aNouWIsOebtOaOpeS9v+eUqCBzdHJ1Y3QgcGFnZSDnlKjkuo7orr7lpIflhoXlrZjvvIzov5nkvb/lvpflpKflpJrmlbDlhoXmoLjku6PnoIHot6/lvoTkuI3nn6XpgZPlt67lvILjgIJcbi0tXG5Eb2N1bWVudGF0aW9uL3RyYW5zbGF0aW9ucy96aF9DTi9tbS9obW0ucnN0LTIxOC3nlLHkuo4gQ1BVIOaXoOazleebtOaOpeiuv+mXruiuvuWkh+WGheWtmO+8jOWboOatpOiuvuWkh+mpseWKqOeoi+W6j+W/hemhu+S9v+eUqOehrOS7tiBETUEg5oiW6K6+5aSH54m55a6a55qE5Yqg6L29L+WtmFxuRG9jdW1lbnRhdGlvbi90cmFuc2xhdGlvbnMvemhfQ04vbW0vaG1tLnJzdDoyMTk65YKo5oyH5Luk5p2l6L+B56e75pWw5o2u44CCbWlncmF0ZV92bWFfc2V0dXAoKeOAgW1pZ3JhdGVfdm1hX3BhZ2VzKCkg5ZKMXG5Eb2N1bWVudGF0aW9uL3RyYW5zbGF0aW9ucy96aF9DTi9tbS9obW0ucnN0LTIyMC1taWdyYXRlX3ZtYV9maW5hbGl6ZSgpIOWHveaVsOaXqOWcqOS9v+mpseWKqOeoi+W6j+abtOaYk+S6jue8luWGmeW5tumbhuS4rei3qOmpseWKqOeoi+W6j+eahOmAmueUqOS7o+eggeOAglxuLS1cbkRvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL3poX0NOL21tL2htbS5yc3Q9MjQzPWRldm1fbWVtdW5tYXBfcGFnZXMoKSDlkowgZGV2bV9yZWxlYXNlX21lbV9yZWdpb24oKSDlvZPotYTmupDlj6/ku6Xnu5HlrprliLAgYGBzdHJ1Y3QgZGV2aWNlYGAuXG4tLVxuRG9jdW1lbnRhdGlvbi90cmFuc2xhdGlvbnMvemhfQ04vbW0vaG1tLnJzdC0yNDktXG5Eb2N1bWVudGF0aW9uL3RyYW5zbGF0aW9ucy96aF9DTi9tbS9obW0ucnN0OjI1MDogICDorr7lpIfpqbHliqjnqIvluo/lv4XpobvlsIYgYGBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3RgYCDkvKDpgJLnu5ltaWdyYXRlX3ZtYV9zZXR1cCgp77yMXG5Eb2N1bWVudGF0aW9uL3RyYW5zbGF0aW9ucy96aF9DTi9tbS9obW0ucnN0LTI1MS0gICDlm6DmraTpnIDopoHlnKjov4Hnp7vmnJ/pl7Tkv53nlZkgbW1hcF9yZWFkX2xvY2soKSDmiJYgbW1hcF93cml0ZV9sb2NrKCnjgIJcbkRvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL3poX0NOL21tL2htbS5yc3QtMjUyLVxuRG9jdW1lbnRhdGlvbi90cmFuc2xhdGlvbnMvemhfQ04vbW0vaG1tLnJzdDoyNTM6Mi4gYGBtaWdyYXRlX3ZtYV9zZXR1cChzdHJ1Y3QgbWlncmF0ZV92bWEgKmFyZ3MpYGBcbkRvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL3poX0NOL21tL2htbS5yc3QtMjU0LVxuRG9jdW1lbnRhdGlvbi90cmFuc2xhdGlvbnMvemhfQ04vbW0vaG1tLnJzdC0yNTUtICAg6K6+5aSH6amx5Yqo5Yid5aeL5YyW5LqGIGBgc3RydWN0IG1pZ3JhdGVfdm1hYGAg55qE5a2X5q6177yM5bm25bCG6K+l5oyH6ZKI5Lyg6YCS57uZXG5Eb2N1bWVudGF0aW9uL3RyYW5zbGF0aW9ucy96aF9DTi9tbS9obW0ucnN0OjI1NjogICBtaWdyYXRlX3ZtYV9zZXR1cCgp44CCYGBhcmdzLVx1MDAzZWZsYWdzYGAg5a2X5q615piv55So5p2l6L+H5ruk5ZOq5Lqb5rqQ6aG16Z2i5bqU6K+l6KKr6L+B56e744CCXG5Eb2N1bWVudGF0aW9uL3RyYW5zbGF0aW9ucy96aF9DTi9tbS9obW0ucnN0LTI1Ny0gICDkvovlpoLvvIzorr7nva4gYGBNSUdSQVRFX1ZNQV9TRUxFQ1RfU1lTVEVNYGAg5bCG5Y+q6L+B56e757O757uf5YaF5a2Y77yM6K6+572uXG4tLVxuRG9jdW1lbnRhdGlvbi90cmFuc2xhdGlvbnMvemhfQ04vbW0vaG1tLnJzdC0yNjItXG5Eb2N1bWVudGF0aW9uL3RyYW5zbGF0aW9ucy96aF9DTi9tbS9obW0ucnN0OjI2MzogICBtaWdyYXRlX3ZtYV9zZXR1cCgp5omA5YGa55qE56ys5LiA5q2l5piv55SoIGBgbW11X25vdGlmaWVyX2ludmFsaWRhdGVfcmFuZ2Vfc3RhcnQoKWBgXG5Eb2N1bWVudGF0aW9uL3RyYW5zbGF0aW9ucy96aF9DTi9tbS9obW0ucnN0LTI2NC0gICDlkowgYGBtbXVfbm90aWZpZXJfaW52YWxpZGF0ZV9yYW5nZV9lbmQoKWBgIOiwg+eUqOadpemBjeWOhuiuvuWkh+WRqOWbtOeahOmhteihqO+8jOS9v1xuLS1cbkRvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL3poX0NOL21tL2htbS5yc3QtMjY3LSAgIOWFtiBgYGV2ZW50YGAg5a2X5q616K6+572u5Li6TU1VX05PVElGWV9NSUdSQVRF77yMIGBgb3duZXJgYCDlrZfmrrXorr7nva7kuLrkvKDpgJLnu5lcbkRvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL3poX0NOL21tL2htbS5yc3Q6MjY4OiAgIG1pZ3JhdGVfdm1hX3NldHVwKCnnmoQgYGBhcmdzLVx1MDAzZXBnbWFwX293bmVyYGAg5a2X5q6144CC6L+Z5YWB6K646K6+5aSH6amx5Yqo6Lez6L+H5pegXG5Eb2N1bWVudGF0aW9uL3RyYW5zbGF0aW9ucy96aF9DTi9tbS9obW0ucnN0LTI2OS0gICDmlYjljJblm57osIPvvIzlj6rml6DmlYjljJbpgqPkupvlrp7pmYXmraPlnKjov4Hnp7vnmoTorr7lpIfnp4HmnIlNTVXmmKDlsITjgILov5nkuIDngrnlsIblnKjkuIvkuIDoioLor6bnu4bop6Pph4rjgIJcbi0tXG5Eb2N1bWVudGF0aW9uL3RyYW5zbGF0aW9ucy96aF9DTi9tbS9obW0ucnN0LTI3NS0gICBgYGxvY2tfcGFnZSgpYGDplIHlrprvvIzkuI5MUlXpmpTnprvvvIjlpoLmnpzns7vnu5/lhoXlrZjlkozorr7lpIfnp4HmnInpobXkuI3lnKhMUlXkuIrvvInvvIzku47ov5tcbkRvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL3poX0NOL21tL2htbS5yc3Q6Mjc2OiAgIOeoi+S4reWPlua2iOaYoOWwhO+8jOW5tuaPkuWFpeS4gOS4queJueauiueahOi/geenu1BUReadpeS7o+abv+WOn+adpeeahFBUReOAgiBtaWdyYXRlX3ZtYV9zZXR1cCgpXG5Eb2N1bWVudGF0aW9uL3RyYW5zbGF0aW9ucy96aF9DTi9tbS9obW0ucnN0LTI3Ny0gICDov5jmuIXpmaTkuoYgYGBhcmdzLVx1MDAzZWRzdGBgIOaVsOe7hOOAglxuLS1cbmFyY2gvcG93ZXJwYy9rdm0vYm9vazNzX2h2X3V2bWVtLmM9NTEzPXN0YXRpYyBpbnQgX19rdm1wcGNfc3ZtX3BhZ2Vfb3V0KHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxuLS1cbmFyY2gvcG93ZXJwYy9rdm0vYm9vazNzX2h2X3V2bWVtLmMtNTM4LVxuYXJjaC9wb3dlcnBjL2t2bS9ib29rM3NfaHZfdXZtZW0uYzo1Mzk6XHRyZXQgPSBtaWdyYXRlX3ZtYV9zZXR1cChcdTAwMjZtaWcpO1xuYXJjaC9wb3dlcnBjL2t2bS9ib29rM3NfaHZfdXZtZW0uYy01NDAtXHRpZiAocmV0KVxuLS1cbmFyY2gvcG93ZXJwYy9rdm0vYm9vazNzX2h2X3V2bWVtLmM9NzQwPXN0YXRpYyBpbnQga3ZtcHBjX3N2bV9wYWdlX2luKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxuLS1cbmFyY2gvcG93ZXJwYy9rdm0vYm9vazNzX2h2X3V2bWVtLmMtNzYwLVxuYXJjaC9wb3dlcnBjL2t2bS9ib29rM3NfaHZfdXZtZW0uYzo3NjE6XHRyZXQgPSBtaWdyYXRlX3ZtYV9zZXR1cChcdTAwMjZtaWcpO1xuYXJjaC9wb3dlcnBjL2t2bS9ib29rM3NfaHZfdXZtZW0uYy03NjItXHRpZiAocmV0KVxuLS1cbmRyaXZlcnMvZ3B1L2RybS9hbWQvYW1ka2ZkL2tmZF9taWdyYXRlLmM9Mzk0PXN2bV9taWdyYXRlX3ZtYV90b192cmFtKHN0cnVjdCBrZmRfbm9kZSAqbm9kZSwgc3RydWN0IHN2bV9yYW5nZSAqcHJhbmdlLFxuLS1cbmRyaXZlcnMvZ3B1L2RybS9hbWQvYW1ka2ZkL2tmZF9taWdyYXRlLmMtNDMxLVxuZHJpdmVycy9ncHUvZHJtL2FtZC9hbWRrZmQva2ZkX21pZ3JhdGUuYzo0MzI6XHRyID0gbWlncmF0ZV92bWFfc2V0dXAoXHUwMDI2bWlncmF0ZSk7XG5kcml2ZXJzL2dwdS9kcm0vYW1kL2FtZGtmZC9rZmRfbWlncmF0ZS5jLTQzMy1cdGlmIChyKSB7XG4tLVxuZHJpdmVycy9ncHUvZHJtL2FtZC9hbWRrZmQva2ZkX21pZ3JhdGUuYz02OTM9c3ZtX21pZ3JhdGVfdm1hX3RvX3JhbShzdHJ1Y3Qga2ZkX25vZGUgKm5vZGUsIHN0cnVjdCBzdm1fcmFuZ2UgKnByYW5nZSxcbi0tXG5kcml2ZXJzL2dwdS9kcm0vYW1kL2FtZGtmZC9rZmRfbWlncmF0ZS5jLTczNC1cbmRyaXZlcnMvZ3B1L2RybS9hbWQvYW1ka2ZkL2tmZF9taWdyYXRlLmM6NzM1Olx0ciA9IG1pZ3JhdGVfdm1hX3NldHVwKFx1MDAyNm1pZ3JhdGUpO1xuZHJpdmVycy9ncHUvZHJtL2FtZC9hbWRrZmQva2ZkX21pZ3JhdGUuYy03MzYtXHRpZiAocikge1xuLS1cbmRyaXZlcnMvZ3B1L2RybS9hbWQvYW1ka2ZkL2tmZF9zdm0uYz0zNTE1PXN2bV9yYW5nZV9iZXN0X3ByZWZldGNoX2xvY2F0aW9uKHN0cnVjdCBzdm1fcmFuZ2UgKnByYW5nZSlcbi0tXG5kcml2ZXJzL2dwdS9kcm0vYW1kL2FtZGtmZC9rZmRfc3ZtLmMtMzU4Mi0gKiBhbmQgcmVzdG9yZSB3b3JrOlxuZHJpdmVycy9ncHUvZHJtL2FtZC9hbWRrZmQva2ZkX3N2bS5jOjM1ODM6ICogMS4gbWlncmF0ZV92bWFfc2V0dXAgaW52YWxpZGF0ZSBwYWdlcywgTU1VIG5vdGlmaWVyIGNhbGxiYWNrIHN2bV9yYW5nZV9ldmljdFxuZHJpdmVycy9ncHUvZHJtL2FtZC9hbWRrZmQva2ZkX3N2bS5jLTM1ODQtICogICAgc3RvcHMgYWxsIHF1ZXVlcywgc2NoZWR1bGUgcmVzdG9yZSB3b3JrXG4tLVxuZHJpdmVycy9ncHUvZHJtL2RybV9wYWdlbWFwLmM9NjE2PWludCBkcm1fcGFnZW1hcF9taWdyYXRlX3RvX2Rldm1lbShzdHJ1Y3QgZHJtX3BhZ2VtYXBfZGV2bWVtICpkZXZtZW1fYWxsb2NhdGlvbixcbi0tXG5kcml2ZXJzL2dwdS9kcm0vZHJtX3BhZ2VtYXAuYy02ODMtXG5kcml2ZXJzL2dwdS9kcm0vZHJtX3BhZ2VtYXAuYzo2ODQ6XHRlcnIgPSBtaWdyYXRlX3ZtYV9zZXR1cChcdTAwMjZtaWdyYXRlKTtcbmRyaXZlcnMvZ3B1L2RybS9kcm1fcGFnZW1hcC5jLTY4NS1cdGlmIChlcnIpXG4tLVxuZHJpdmVycy9ncHUvZHJtL2RybV9wYWdlbWFwLmM9MTIxMT1zdGF0aWMgaW50IF9fZHJtX3BhZ2VtYXBfbWlncmF0ZV90b19yYW0oc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2YXMsXG4tLVxuZHJpdmVycy9ncHUvZHJtL2RybV9wYWdlbWFwLmMtMTI2NC1cbmRyaXZlcnMvZ3B1L2RybS9kcm1fcGFnZW1hcC5jOjEyNjU6XHRlcnIgPSBtaWdyYXRlX3ZtYV9zZXR1cChcdTAwMjZtaWdyYXRlKTtcbmRyaXZlcnMvZ3B1L2RybS9kcm1fcGFnZW1hcC5jLTEyNjYtXHRpZiAoZXJyKVxuLS1cbmRyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L25vdXZlYXVfZG1lbS5jPTE4Mz1zdGF0aWMgdm1fZmF1bHRfdCBub3V2ZWF1X2RtZW1fbWlncmF0ZV90b19yYW0oc3RydWN0IHZtX2ZhdWx0ICp2bWYpXG4tLVxuZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbm91dmVhdV9kbWVtLmMtMjM1LVx0ICovXG5kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9ub3V2ZWF1X2RtZW0uYzoyMzY6XHRpZiAobWlncmF0ZV92bWFfc2V0dXAoXHUwMDI2YXJncykgXHUwMDNjIDApXG5kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9ub3V2ZWF1X2RtZW0uYy0yMzctXHRcdHJldHVybiBWTV9GQVVMVF9TSUdCVVM7XG4tLVxuZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbm91dmVhdV9kbWVtLmM9ODIyPW5vdXZlYXVfZG1lbV9taWdyYXRlX3ZtYShzdHJ1Y3Qgbm91dmVhdV9kcm0gKmRybSxcbi0tXG5kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9ub3V2ZWF1X2RtZW0uYy04NzEtXG5kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9ub3V2ZWF1X2RtZW0uYzo4NzI6XHRcdHJldCA9IG1pZ3JhdGVfdm1hX3NldHVwKFx1MDAyNmFyZ3MpO1xuZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbm91dmVhdV9kbWVtLmMtODczLVx0XHRpZiAocmV0KVxuLS1cbmluY2x1ZGUvbGludXgvbWlncmF0ZS5oPTE2MD1zdHJ1Y3QgbWlncmF0ZV92bWEge1xuLS1cbmluY2x1ZGUvbGludXgvbWlncmF0ZS5oLTE2Ni1cdCAqIFRoZSBzcmMgYXJyYXkgbXVzdCBub3QgYmUgbW9kaWZpZWQgYnkgdGhlIGNhbGxlciBhZnRlclxuaW5jbHVkZS9saW51eC9taWdyYXRlLmg6MTY3Olx0ICogbWlncmF0ZV92bWFfc2V0dXAoKSwgYW5kIG11c3Qgbm90IGNoYW5nZSB0aGUgZHN0IGFycmF5IGFmdGVyXG5pbmNsdWRlL2xpbnV4L21pZ3JhdGUuaC0xNjgtXHQgKiBtaWdyYXRlX3ZtYV9wYWdlcygpIHJldHVybnMuXG4tLVxuaW5jbHVkZS9saW51eC9taWdyYXRlLmgtMTk0LVxuaW5jbHVkZS9saW51eC9taWdyYXRlLmg6MTk1OmludCBtaWdyYXRlX3ZtYV9zZXR1cChzdHJ1Y3QgbWlncmF0ZV92bWEgKmFyZ3MpO1xuaW5jbHVkZS9saW51eC9taWdyYXRlLmgtMTk2LXZvaWQgbWlncmF0ZV92bWFfcGFnZXMoc3RydWN0IG1pZ3JhdGVfdm1hICptaWdyYXRlKTtcbi0tXG5saWIvdGVzdF9obW0uYz0xMTIwPXN0YXRpYyBpbnQgZG1pcnJvcl9taWdyYXRlX3RvX3N5c3RlbShzdHJ1Y3QgZG1pcnJvciAqZG1pcnJvcixcbi0tXG5saWIvdGVzdF9obW0uYy0xMTY0LVxubGliL3Rlc3RfaG1tLmM6MTE2NTpcdFx0cmV0ID0gbWlncmF0ZV92bWFfc2V0dXAoXHUwMDI2YXJncyk7XG5saWIvdGVzdF9obW0uYy0xMTY2LVx0XHRpZiAocmV0KVxuLS1cbmxpYi90ZXN0X2htbS5jPTExODk9c3RhdGljIGludCBkbWlycm9yX21pZ3JhdGVfdG9fZGV2aWNlKHN0cnVjdCBkbWlycm9yICpkbWlycm9yLFxuLS1cbmxpYi90ZXN0X2htbS5jLTEyNDItXHRcdFx0XHRNSUdSQVRFX1ZNQV9TRUxFQ1RfQ09NUE9VTkQ7XG5saWIvdGVzdF9obW0uYzoxMjQzOlx0XHRyZXQgPSBtaWdyYXRlX3ZtYV9zZXR1cChcdTAwMjZhcmdzKTtcbmxpYi90ZXN0X2htbS5jLTEyNDQtXHRcdGlmIChyZXQpXG4tLVxubGliL3Rlc3RfaG1tLmM9MTY1Mz1zdGF0aWMgdm1fZmF1bHRfdCBkbWlycm9yX2Rldm1lbV9mYXVsdChzdHJ1Y3Qgdm1fZmF1bHQgKnZtZilcbi0tXG5saWIvdGVzdF9obW0uYy0xNzA1LVx0LypcbmxpYi90ZXN0X2htbS5jOjE3MDY6XHQgKiBJbiBwcmFjdGljZSBtaWdyYXRlX3ZtYV9zZXR1cCgpIHNob3VsZCBuZXZlciBmYWlsIHVubGVzcyB0aGVcbmxpYi90ZXN0X2htbS5jLTE3MDctXHQgKiB0ZXN0IGlzIHdyb25nIGFzIGl0IGp1c3QgdGVzdHMgc29tZSBzdGF0aWMgVk1BIHByb3BlcnRpZXMuXG5saWIvdGVzdF9obW0uYy0xNzA4LVx0ICovXG5saWIvdGVzdF9obW0uYzoxNzA5Olx0aWYgKG1pZ3JhdGVfdm1hX3NldHVwKFx1MDAyNmFyZ3MpKSB7XG5saWIvdGVzdF9obW0uYy0xNzEwLVx0XHRyZXQgPSBWTV9GQVVMVF9TSUdCVVM7XG4tLVxubW0vbWlncmF0ZV9kZXZpY2UuYz02NzA9c3RhdGljIHZvaWQgbWlncmF0ZV92bWFfdW5tYXAoc3RydWN0IG1pZ3JhdGVfdm1hICptaWdyYXRlKVxuLS1cbm1tL21pZ3JhdGVfZGV2aWNlLmMtNjc2LS8qKlxubW0vbWlncmF0ZV9kZXZpY2UuYzo2Nzc6ICogbWlncmF0ZV92bWFfc2V0dXAoKSAtIHByZXBhcmUgdG8gbWlncmF0ZSBhIHJhbmdlIG9mIG1lbW9yeVxubW0vbWlncmF0ZV9kZXZpY2UuYy02NzgtICogQGFyZ3M6IGNvbnRhaW5zIHRoZSB2bWEsIHN0YXJ0LCBhbmQgcGZucyBhcnJheXMgZm9yIHRoZSBtaWdyYXRpb25cbi0tXG5tbS9taWdyYXRlX2RldmljZS5jLTczOS0gKi9cbm1tL21pZ3JhdGVfZGV2aWNlLmM6NzQwOmludCBtaWdyYXRlX3ZtYV9zZXR1cChzdHJ1Y3QgbWlncmF0ZV92bWEgKmFyZ3MpXG5tbS9taWdyYXRlX2RldmljZS5jLTc0MS17XG4tLVxubW0vbWlncmF0ZV9kZXZpY2UuYy03NzktfVxubW0vbWlncmF0ZV9kZXZpY2UuYzo3ODA6RVhQT1JUX1NZTUJPTChtaWdyYXRlX3ZtYV9zZXR1cCk7XG5tbS9taWdyYXRlX2RldmljZS5jLTc4MS1cbi0tXG5tbS9taWdyYXRlX2RldmljZS5jPTEzNjY9c3RhdGljIHVuc2lnbmVkIGxvbmcgbWlncmF0ZV9kZXZpY2VfcGZuX2xvY2sodW5zaWduZWQgbG9uZyBwZm4pXG4tLVxubW0vbWlncmF0ZV9kZXZpY2UuYy0xMzg3LSAqXG5tbS9taWdyYXRlX2RldmljZS5jOjEzODg6ICogbWlncmF0ZV92bWFfc2V0dXAoKSBpcyBzaW1pbGFyIGluIGNvbmNlcHQgdG8gbWlncmF0ZV92bWFfc2V0dXAoKSBleGNlcHQgdGhhdFxubW0vbWlncmF0ZV9kZXZpY2UuYy0xMzg5LSAqIGluc3RlYWQgb2YgbG9va2luZyB1cCBwYWdlcyBiYXNlZCBvbiB2aXJ0dWFsIGFkZHJlc3MgbWFwcGluZ3MgYSByYW5nZSBvZlxuLS1cbm1tL21pZ3JhdGVfZGV2aWNlLmMtMTM5NS0gKlxubW0vbWlncmF0ZV9kZXZpY2UuYzoxMzk2OiAqIExpa2UgbWlncmF0ZV92bWFfc2V0dXAoKSB0aGlzIGZ1bmN0aW9uIHdpbGwgdGFrZSBhIHJlZmVyZW5jZSBhbmQgbG9jayBhbnlcbm1tL21pZ3JhdGVfZGV2aWNlLmMtMTM5Ny0gKiBtaWdyYXRpbmcgcGFnZXMgdGhhdCBhcmVuJiMzOTt0IGZyZWUgYmVmb3JlIHVubWFwcGluZyB0aGVtLiBEcml2ZXJzIG1heSB0aGVuXG4tLVxubW0vbWlncmF0ZV9kZXZpY2UuYz0xNDY2PWludCBtaWdyYXRlX2RldmljZV9jb2hlcmVudF9mb2xpbyhzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuLS1cbm1tL21pZ3JhdGVfZGV2aWNlLmMtMTQ3OC1cdCAqIHRoZSBzb3VyY2UgZm9saW8uIFNvIGNhbGwgbWlncmF0ZV92bWFfdW5tYXAoKSBkaXJlY3RseSB0byB1bm1hcCB0aGVcbm1tL21pZ3JhdGVfZGV2aWNlLmM6MTQ3OTpcdCAqIGZvbGlvIGFzIG1pZ3JhdGVfdm1hX3NldHVwKCkgd2lsbCBmYWlsIGlmIGFyZ3Mudm1hID09IE5VTEwuXG5tbS9taWdyYXRlX2RldmljZS5jLTE0ODAtXHQgKi9cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDYgMTY6MTc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTIyMjMKCQkJCQkJCW91dHB1dDogMjcKCQkJCQkJCXRob3VnaHRzOiA0MQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgc3VtbWFyaXplZCBmcm9tIG15IHBlcnNwZWN0aXZlIGFzIGFuIGV4cGVydCBpbiBteSBmaWVsZDoKCioqQXNzZXNzaW5nIHRoZSBGdXp6aW5nIFBvdGVudGlhbCBvZiBhIFRlc3QgTW9kdWxlKioKClJpZ2h0LCBzbyB0aGlzIHRoaW5nIGlzIGJlaW5nIHVzZWQgd2l0aGluIGBsaWIvdGVzdF9obW0uY2AuIE9rYXksIHRoYXQmIzM5O3MgaW50ZXJlc3RpbmcuIFRoZSBmYWN0IHRoYXQgaXQmIzM5O3MgaW4gYSBgLmNgIGZpbGUgbmFtZWQgYHRlc3RfaG1tYCBzdWdnZXN0cyBpdCBtaWdodCBiZSBhIHRlc3RpbmcgbW9kdWxlIG9mIHNvbWUga2luZC4gTm93LCBhIHRlc3QgbW9kdWxlLi4uIHRoYXQgKmNvdWxkKiBiZSBhIGdyZWF0IGNhbmRpZGF0ZSBmb3IgZnV6emluZyEgSXQmIzM5O3Mgd29ydGggYSBxdWljayBsb29rIGF0IGBsaWIvdGVzdF9obW0uY2AgdG8gY29uZmlybSB0aGF0IHN1c3BpY2lvbi4gVGhlIHBvdGVudGlhbCBwYXlvZmYgaXMgaGlnaDsgaWYgaXQgKmlzKiBhIHRlc3QsIGl0JiMzOTtzIGRlc2lnbmVkIHRvIGV4cGxvcmUgdGhlIGJlaGF2aW9yIG9mIHRoZSBgaG1tYCBsaWJyYXJ5IGFuZCB0aGVyZWZvcmUsIG1heSBiZSBhbiBpZGVhbCBwbGFjZSB0byBmaW5kIHZ1bG5lcmFiaWxpdGllcyB2aWEgdW5leHBlY3RlZCBpbnB1dHMgYW5kIGNvbmZpZ3VyYXRpb25zLiBMZXQmIzM5O3MgZGlnIGluIGFuZCBzZWUgd2hhdCYjMzk7cyB3aGF0IQoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wNiAxNjoxNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgVEVTVF9ITU0mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtsaWIvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2xpYi9LY29uZmlnLmRlYnVnPTMzMTg9Y29uZmlnIFRFU1RfTUVNSU5JVFxuLS1cbmxpYi9LY29uZmlnLmRlYnVnLTMzMjUtXG5saWIvS2NvbmZpZy5kZWJ1ZzozMzI2OmNvbmZpZyBURVNUX0hNTVxubGliL0tjb25maWcuZGVidWctMzMyNy1cdHRyaXN0YXRlIFwmIzM0O1Rlc3QgSE1NIChIZXRlcm9nZW5lb3VzIE1lbW9yeSBNYW5hZ2VtZW50KVwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wNiAxNjoxNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMjU3MAoJCQkJCQkJb3V0cHV0OiAyNgoJCQkJCQkJdGhvdWdodHM6IDMyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCBwcmVzZW50ZWQgYXMgYSBmaXJzdC1wZXJzb24gZXhwZXJ0IHN1bW1hcnk6CgoqKkFuYWx5emluZyBDb25maWd1cmF0aW9uIERlcGVuZGVuY2llcyoqCgpBbHJpZ2h0LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBgVEVTVF9ITU1gIGNvbmZpZ3VyYXRpb24uIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byB0cmVhdCB0aGlzIGFzIGEgY29uZmlndXJhdGlvbiwgcHJvYmFibHkgZm9yIGEgc3BlY2lmaWMgcHJvY2Vzcy4gTm93LCB0aGUga2V5IHF1ZXN0aW9uIGlzLCBkb2VzIHRoaXMgYFRFU1RfSE1NYCBzZXR1cCBoYXZlIGFueSBkZXBlbmRlbmNpZXMgb24gdGhlIGBERVZJQ0VfTUlHUkFUSU9OYCBmdW5jdGlvbmFsaXR5PyBJIG5lZWQgdG8gcXVpY2tseSBkZXRlcm1pbmUgdGhlIHJlbGF0aW9uc2hpcCBiZXR3ZWVuIHRoZXNlIHR3bywgYXMgdGhpcyYjMzk7bGwgYWZmZWN0IGhvdyBJIG1hbmFnZSB0aGVtIGFuZCBhbnkgcG90ZW50aWFsIGlzc3VlcyBpZiBjaGFuZ2VzIGFyZSBtYWRlIHRvIGVpdGhlciBvbmUgb2YgdGhlbS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDYgMTY6MTc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7VEVTVF9ITU0mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtsaWIvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2xpYi9LY29uZmlnLmRlYnVnPTMzMTg9Y29uZmlnIFRFU1RfTUVNSU5JVFxuLS1cbmxpYi9LY29uZmlnLmRlYnVnLTMzMjUtXG5saWIvS2NvbmZpZy5kZWJ1ZzozMzI2OmNvbmZpZyBURVNUX0hNTVxubGliL0tjb25maWcuZGVidWctMzMyNy1cdHRyaXN0YXRlIFwmIzM0O1Rlc3QgSE1NIChIZXRlcm9nZW5lb3VzIE1lbW9yeSBNYW5hZ2VtZW50KVwmIzM0O1xuLS1cbmxpYi9NYWtlZmlsZT0xMDI9b2JqLSQoQ09ORklHX1RFU1RfTE9DS1VQKSAmIzQzOz0gdGVzdF9sb2NrdXAub1xubGliL01ha2VmaWxlOjEwMzpvYmotJChDT05GSUdfVEVTVF9ITU0pICYjNDM7PSB0ZXN0X2htbS5vXG5saWIvTWFrZWZpbGUtMTA0LW9iai0kKENPTkZJR19URVNUX0ZSRUVfUEFHRVMpICYjNDM7PSB0ZXN0X2ZyZWVfcGFnZXMub1xuLS1cbmxpYi90ZXN0X2htbV91YXBpLmgtNi0gKi9cbmxpYi90ZXN0X2htbV91YXBpLmg6NzojaWZuZGVmIF9MSUJfVEVTVF9ITU1fVUFQSV9IXG5saWIvdGVzdF9obW1fdWFwaS5oOjg6I2RlZmluZSBfTElCX1RFU1RfSE1NX1VBUElfSFxubGliL3Rlc3RfaG1tX3VhcGkuaC05LVxuLS1cbmxpYi90ZXN0X2htbV91YXBpLmg9NzQ9ZW51bSB7XG4tLVxubGliL3Rlc3RfaG1tX3VhcGkuaC03OS1cbmxpYi90ZXN0X2htbV91YXBpLmg6ODA6I2VuZGlmIC8qIF9MSUJfVEVTVF9ITU1fVUFQSV9IICovXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA2IDE2OjE3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEzMDc3CgkJCQkJCQlvdXRwdXQ6IDM1CgkJCQkJCQl0aG91Z2h0czogMTkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgYSBzdW1tYXJ5IG9mIG15IHRob3VnaHQgcHJvY2VzcywgYXMgcmVxdWVzdGVkOgoKKipEaXZpbmcgaW50byBgS2NvbmZpZy5kZWJ1Z2AgZm9yIGBURVNUX0hNTWAqKgoKT2theSwgc28gSSBuZWVkIHRvIHVuZGVyc3RhbmQgc29tZXRoaW5nIGFib3V0IHRoZSBjb25maWd1cmF0aW9uIHJlbGF0ZWQgdG8gYFRFU1RfSE1NYC4gTGV0JiMzOTtzIHplcm8gaW4gb24gYGxpYi9LY29uZmlnLmRlYnVnYC4gVGhhdCYjMzk7cyB3aGVyZSBJIGV4cGVjdCB0byBmaW5kIHRoZSBzZXR0aW5ncywgZGVwZW5kZW5jaWVzLCBhbmQgYW55IGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmb3IgdGhpcyBmZWF0dXJlLiBJJiMzOTttIGdvaW5nIHRvIGxvb2sgc3BlY2lmaWNhbGx5IGFyb3VuZCB0aGUgYFRFU1RfSE1NYCBkZWZpbml0aW9uIGl0c2VsZi4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQ6CgoqICAgV2hhdCBvcHRpb25zIGV4aXN0PwoqICAgV2hhdCBvdGhlciBjb25maWd1cmF0aW9ucyBkb2VzIGl0IGRlcGVuZCBvbj8KKiAgIEFyZSB0aGVyZSBhbnkgaW50ZXJlc3RpbmcgY29tbWVudHMgb3IgZXhwbGFuYXRpb25zIHRoYXQgd2lsbCBwcm92aWRlIGNvbnRleHQ/CgpCYXNpY2FsbHksIEkgd2FudCB0byBxdWlja2x5IGdyYXNwIHRoZSByZWxldmFudCBkZXRhaWxzIHNvIEkgY2FuIG1vdmUgZm9yd2FyZCB3aXRoIG15IG90aGVyIHRhc2tzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wNiAxNjoxNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2xpYi9LY29uZmlnLmRlYnVnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMzMyMCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDszMzIwOlx0XHRoZWxwXG4zMzIxOlx0XHQgIFRlc3QgaWYgdGhlIGtlcm5lbCBpcyB6ZXJvLWluaXRpYWxpemluZyBoZWFwIGFuZCBwYWdlIGFsbG9jYXRpb25zLlxuMzMyMjpcdFx0ICBUaGlzIGNhbiBiZSB1c2VmdWwgdG8gdGVzdCBpbml0X29uX2FsbG9jIGFuZCBpbml0X29uX2ZyZWUgZmVhdHVyZXMuXG4zMzIzOlx0XG4zMzI0Olx0XHQgIElmIHVuc3VyZSwgc2F5IE4uXG4zMzI1Olx0XG4zMzI2Olx0Y29uZmlnIFRFU1RfSE1NXG4zMzI3Olx0XHR0cmlzdGF0ZSBcJiMzNDtUZXN0IEhNTSAoSGV0ZXJvZ2VuZW91cyBNZW1vcnkgTWFuYWdlbWVudClcJiMzNDtcbjMzMjg6XHRcdGRlcGVuZHMgb24gVFJBTlNQQVJFTlRfSFVHRVBBR0VcbjMzMjk6XHRcdGRlcGVuZHMgb24gREVWSUNFX1BSSVZBVEVcbjMzMzA6XHRcdHNlbGVjdCBITU1fTUlSUk9SXG4zMzMxOlx0XHRzZWxlY3QgTU1VX05PVElGSUVSXG4zMzMyOlx0XHRoZWxwXG4zMzMzOlx0XHQgIFRoaXMgaXMgYSBwc2V1ZG8gZGV2aWNlIGRyaXZlciBzb2xlbHkgZm9yIHRlc3RpbmcgSE1NLlxuMzMzNDpcdFx0ICBTYXkgTSBoZXJlIGlmIHlvdSB3YW50IHRvIGJ1aWxkIHRoZSBITU0gdGVzdCBtb2R1bGUuXG4zMzM1Olx0XHQgIERvaW5nIHNvIHdpbGwgYWxsb3cgeW91IHRvIHJ1biB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0L3ZtL2htbS10ZXN0cy5cbjMzMzY6XHRcbjMzMzc6XHRcdCAgSWYgdW5zdXJlLCBzYXkgTi5cbjMzMzg6XHRcbjMzMzk6XHRjb25maWcgVEVTVF9GUkVFX1BBR0VTXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA2IDE2OjE3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEzNjAwCgkJCQkJCQlvdXRwdXQ6IDI2CgkJCQkJCQl0aG91Z2h0czogMTgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgc3VtbWFyeSwgcHJlc2VudGVkIGFzIGEgc3RyZWFtIG9mIHRob3VnaHQ6CgoqKkNoZWNraW5nIHRoZSBQcml2YXRlIERldmljZSBTdGF0dXMqKgoKUmlnaHQsIHRoaXMgaGluZ2VzIG9uIGBERVZJQ0VfUFJJVkFURWAuIEkgbmVlZCB0byBmaWd1cmUgb3V0IHRoZSBzdGF0dXMgb2YgdGhhdCB2YXJpYWJsZSBiZWZvcmUgSSBjYW4gcHJvY2VlZC4gTm8gcG9pbnQgZ29pbmcgZG93biBhbnkgcmFiYml0IGhvbGVzIHVudGlsIEkgdW5kZXJzdGFuZCBpZiBgREVWSUNFX1BSSVZBVEVgIGlzIHNldCBvciBub3QuIExldCYjMzk7cyBzdGFydCBieSB2ZXJpZnlpbmcgdGhlIGN1cnJlbnQgc3RhdGUgb2YgYERFVklDRV9QUklWQVRFYC4gSSBuZWVkIHRvIGlzb2xhdGUgdGhpcyB2YWx1ZSB0byBkZXRlcm1pbmUgdGhlIG5leHQgc3RlcDsgaXQgd2lsbCBiZSBjcml0aWNhbCBpbiBkZWNpZGluZyB0aGUgZXhlY3V0aW9uIHBhdGguCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA2IDE2OjE4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBERVZJQ0VfUFJJVkFURSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9LY29uZmlnPTEyNjQ9Y29uZmlnIEdFVF9GUkVFX1JFR0lPTlxuLS1cbm1tL0tjb25maWctMTI2Ni1cbm1tL0tjb25maWc6MTI2Nzpjb25maWcgREVWSUNFX1BSSVZBVEVcbm1tL0tjb25maWctMTI2OC1cdGJvb2wgXCYjMzQ7VW5hZGRyZXNzYWJsZSBkZXZpY2UgbWVtb3J5IChHUFUgbWVtb3J5LCAuLi4pXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA2IDE2OjE4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEzODM0CgkJCQkJCQlvdXRwdXQ6IDMzCgkJCQkJCQl0aG91Z2h0czogMTYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGhvdWdodCBwcm9jZXNzLCBzdW1tYXJpemVkIGFzIGlmIEkgd2VyZSBjb25zaWRlcmluZyB0aGUgZ2l2ZW4gaW5zdHJ1Y3Rpb25zOgoKKipBbmFseXppbmcgbW0vS2NvbmZpZyBhcm91bmQgREVWSUNFX1BSSVZBVEUqKgoKT2theSwgc28gdGhlIHByb21wdCB3YW50cyBtZSB0byBmb2N1cyBvbiBgbW0vS2NvbmZpZ2AsIHNwZWNpZmljYWxseSBhcm91bmQgdGhlIGBERVZJQ0VfUFJJVkFURWAgY29uZmlndXJhdGlvbiBvcHRpb24uIFJpZ2h0LCBzbyB0aGlzIGlzIGFib3V0IG1lbW9yeSBtYW5hZ2VtZW50IHdpdGhpbiB0aGUga2VybmVsJiMzOTtzIGNvbmZpZ3VyYXRpb24gc3lzdGVtLiBJIG5lZWQgdG8gZmlndXJlIG91dCB3aGF0IHJvbGUgYERFVklDRV9QUklWQVRFYCBwbGF5cyBpbiB0aGlzIGNvbnRleHQuIEkmIzM5O20gYXNzdW1pbmcgaXQgcmVsYXRlcyB0byB3aGV0aGVyIGNlcnRhaW4gbWVtb3J5IHJlZ2lvbnMgb3IgZGV2aWNlcyBzaG91bGQgYmUgY29uc2lkZXJlZCBwcml2YXRlIHRvIGEgc3BlY2lmaWMgZGV2aWNlIG9yLCBjb252ZXJzZWx5LCBzaGFyZWQgYW5kIG1hbmFnZWQgYXQgYSBtb3JlIGdsb2JhbCBsZXZlbC4gVGhlIGBLY29uZmlnYCBmaWxlcyBhcmUgd2hlcmUgdGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBhcmUgZGVmaW5lZCwgYWxvbmcgd2l0aCB0aGVpciBkZXBlbmRlbmNpZXMsIGRlc2NyaXB0aW9ucywgYW5kIGRlZmF1bHRzLCBzbyBJIG5lZWQgdG8gZ28gcmVhZCB0aGUgY29udGVudHMgb2YgdGhhdCBmaWxlLiBJIGV4cGVjdCB0byBzZWUgZGVmaW5pdGlvbnMgZm9yIGBERVZJQ0VfUFJJVkFURWAsIGFuZCBsaWtlbHkgYSBkZXNjcmlwdGlvbiBvZiBpdHMgbWVhbmluZywgcGVyaGFwcyBjb25kaXRpb25hbCBjb21waWxhdGlvbiBiYXNlZCBvbiB0aGlzIG9wdGlvbiBhbmQgcmVsYXRlZCBvcHRpb25zLiBJJiMzOTtsbCBiZSBsb29raW5nIGZvciB0aGluZ3MgbGlrZToKCiogICBXaGF0IGRldmljZXMgb3IgbWVtb3J5IHJlZ2lvbnMgYXJlIGltcGFjdGVkIGJ5IHRoaXMgb3B0aW9uLgoqICAgVGhlIGltcGxpY2F0aW9ucyBvZiBlbmFibGluZyBvciBkaXNhYmxpbmcgdGhpcyBvcHRpb24uCiogICBBbnkgZGVwZW5kZW5jaWVzIG9uIG90aGVyIGNvbmZpZ3VyYXRpb24gc2V0dGluZ3MuCiogICBIb3cgdGhlIGtlcm5lbCBtYW5hZ2VzIGFuZCB1dGlsaXplcyBtZW1vcnkgYmFzZWQgb24gdGhpcyBzZXR0aW5nLgoKTXkgZ29hbCBpcyB0byB1bmRlcnN0YW5kIGhvdyBgREVWSUNFX1BSSVZBVEVgIGFmZmVjdHMgdGhlIG1lbW9yeSBtYW5hZ2VtZW50IHNjaGVtZSB3aXRoaW4gdGhlIGtlcm5lbCBhbmQgaG93IGl0IGNhbiBiZSBjb250cm9sbGVkIHRocm91Z2ggdGhlIGNvbmZpZ3VyYXRpb24gcHJvY2Vzcy4gVWx0aW1hdGVseSwgSSYjMzk7bGwgc3ludGhlc2l6ZSB3aGF0IGBtbS9LY29uZmlnYCBpcyBleHByZXNzaW5nIGFyb3VuZCB0aGlzIG9wdGlvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDYgMTY6MTg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDttbS9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTI2MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsxMjYwOlx0Y29uZmlnIEhNTV9NSVJST1JcbjEyNjE6XHRcdGJvb2xcbjEyNjI6XHRcdGRlcGVuZHMgb24gTU1VXG4xMjYzOlx0XG4xMjY0Olx0Y29uZmlnIEdFVF9GUkVFX1JFR0lPTlxuMTI2NTpcdFx0Ym9vbFxuMTI2NjpcdFxuMTI2NzpcdGNvbmZpZyBERVZJQ0VfUFJJVkFURVxuMTI2ODpcdFx0Ym9vbCBcJiMzNDtVbmFkZHJlc3NhYmxlIGRldmljZSBtZW1vcnkgKEdQVSBtZW1vcnksIC4uLilcJiMzNDtcbjEyNjk6XHRcdGRlcGVuZHMgb24gWk9ORV9ERVZJQ0VcbjEyNzA6XHRcdHNlbGVjdCBHRVRfRlJFRV9SRUdJT05cbjEyNzE6XHRcbjEyNzI6XHRcdGhlbHBcbjEyNzM6XHRcdCAgQWxsb3dzIGNyZWF0aW9uIG9mIHN0cnVjdCBwYWdlcyB0byByZXByZXNlbnQgdW5hZGRyZXNzYWJsZSBkZXZpY2VcbjEyNzQ6XHRcdCAgbWVtb3J5OyBpLmUuLCBtZW1vcnkgdGhhdCBpcyBvbmx5IGFjY2Vzc2libGUgZnJvbSB0aGUgZGV2aWNlIChvclxuMTI3NTpcdFx0ICBncm91cCBvZiBkZXZpY2VzKS4gWW91IGxpa2VseSBhbHNvIHdhbnQgdG8gc2VsZWN0IEhNTV9NSVJST1IuXG4xMjc2Olx0XG4xMjc3Olx0Y29uZmlnIFZNQVBfUEZOXG4xMjc4Olx0XHRib29sXG4xMjc5Olx0XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA2IDE2OjE4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE0NDM3CgkJCQkJCQlvdXRwdXQ6IDMyCgkJCQkJCQl0aG91Z2h0czogMTE4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFuYWx5c2lzIG9mIEtlcm5lbCBDb25maWd1cmF0aW9uIERlcGVuZGVuY2llcyoqCgpPa2F5LCBsZXQgbWUgYnJlYWsgdGhpcyBkb3duLiBJdCBzZWVtcyBsaWtlIGBURVNUX0hNTWAgaXMgY29udGluZ2VudCBvbiBgREVWSUNFX1BSSVZBVEVgLCBhbmQgYERFVklDRV9QUklWQVRFYCBpdHNlbGYgaXMgZGVwZW5kZW50IG9uIGBaT05FX0RFVklDRWAuIFNvLCBhIHN0cmFpZ2h0Zm9yd2FyZCBkZXBlbmRlbmN5IGNoYWluLiBOb3csIGBERVZJQ0VfTUlHUkFUSU9OYCBpcyBkZWZpbmVkIGFzIGEgYm9vbGVhbiBleHByZXNzaW9uOiBgTUlHUkFUSU9OYCBBTkQgYFpPTkVfREVWSUNFYC4gVGhpcyBtZWFucyBpZiBJIGFjdGl2YXRlIGBURVNUX0hNTWAsIEkmIzM5O20gaW1wbGljaXRseSBlbmFibGluZyBgREVWSUNFX1BSSVZBVEVgLCB3aGljaCBmb3JjZXMgYFpPTkVfREVWSUNFYCwgYW5kIGNvbnNlcXVlbnRseSwgYERFVklDRV9NSUdSQVRJT05gIGJlY2F1c2Ugb2YgdGhlIGBNSUdSQVRJT05gIGRlcGVuZGVuY3kuCgpIb2xkIG9uIGEgc2Vjb25kLCB0aGF0IGZlZWxzIGxpa2UgYSBzdGFuZGFyZCBzZXR1cC4gQW5kLCBJIHRoaW5rIEkgcmVtZW1iZXIgdGhhdCBgTUlHUkFUSU9OYCBpcyBvZnRlbiwgYnV0IG5vdCBhbHdheXMsIGVuYWJsZWQgYnkgZGVmYXVsdCB3aGVuIE5VTUEgb3IgQ09NUEFDVElPTiBhcmUgcHJlc2VudC4gSSBzaG91bGQgZG91YmxlLWNoZWNrIHRoYXQgaW4gYG1tL0tjb25maWdgIHRvIGNvbmZpcm0gbXkgdW5kZXJzdGFuZGluZyBvZiB0aGUgaW1wbGljYXRpb25zIGhlcmUuIEkgc2hvdWxkIGFsc28gY2hlY2sgd2hpY2ggY29uZmlndXJhdGlvbnMgZW5hYmxlIGNvbXBhY3Rpb24gb3IgbnVtYSBpbiB0aGF0IGxvY2F0aW9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wNiAxNjoxODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O21tL0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA2OTAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDY5MDpcdFx0aGVscFxuIDY5MTpcdFx0ICBTdXBwb3J0IHRoZSBtaWdyYXRpb24gb2YgcGFnZXMgdG8gb3RoZXIgTlVNQSBub2RlcywgYXZhaWxhYmxlIHRvXG4gNjkyOlx0XHQgIHVzZXIgc3BhY2UgdGhyb3VnaCBpbnRlcmZhY2VzIGxpa2UgbWlncmF0ZV9wYWdlcygpLCBtb3ZlX3BhZ2VzKCksXG4gNjkzOlx0XHQgIGFuZCBtYmluZCgpLiBTZWxlY3RpbmcgdGhpcyBvcHRpb24gYWxzbyBlbmFibGVzIHN1cHBvcnQgZm9yIHBhZ2VcbiA2OTQ6XHRcdCAgZGVtb3Rpb24gZm9yIG1lbW9yeSB0aWVyaW5nLlxuIDY5NTpcdFxuIDY5NjpcdGNvbmZpZyBNSUdSQVRJT05cbiA2OTc6XHRcdGJvb2xcbiA2OTg6XHRcdGRlcGVuZHMgb24gTU1VXG4gNjk5Olx0XG4gNzAwOlx0Y29uZmlnIERFVklDRV9NSUdSQVRJT05cbiA3MDE6XHRcdGRlZl9ib29sIE1JR1JBVElPTiBcdTAwMjZcdTAwMjYgWk9ORV9ERVZJQ0VcbiA3MDI6XHRcbiA3MDM6XHRjb25maWcgQVJDSF9FTkFCTEVfSFVHRVBBR0VfTUlHUkFUSU9OXG4gNzA0Olx0XHRib29sXG4gNzA1Olx0XG4gNzA2Olx0Y29uZmlnIEFSQ0hfU1VQUE9SVFNfUE1EX1NPRlRMRUFGXG4gNzA3Olx0XHRib29sXG4gNzA4Olx0XG4gNzA5Olx0Y29uZmlnIEhVR0VUTEJfUEFHRV9TSVpFX1ZBUklBQkxFXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA2IDE2OjE4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE1MDYzCgkJCQkJCQlvdXRwdXQ6IDI0CgkJCQkJCQl0aG91Z2h0czogMzAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIG15IG93bjoKCioqQW5hbHl6aW5nIHRoZSBgTUlHUkFUSU9OYCBWYXJpYWJsZSoqCgpSaWdodCwgYE1JR1JBVElPTmAgaXMgZGVmaW5lZCBhcyBhIEJvb2xlYW4sIGJ1dCBoYW5nIG9uLi4uIGl0IGRvZXNuJiMzOTt0IGhhdmUgYSBzcGVjaWZpYyBwcm9tcHQgYXNzb2NpYXRlZCB3aXRoIGl0LiBUaGF0JiMzOTtzIGEgYml0IG9kZC4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgd2h5IHRoaXMgdmFyaWFibGUgaXMgYmVpbmcgc2VsZWN0ZWQgb3IgdHJpZ2dlcmVkIGluIHRoZSBmaXJzdCBwbGFjZS4gTXkgaW1tZWRpYXRlIHF1ZXN0aW9uIGlzOiBXaGF0IGNvbmRpdGlvbnMgb3IgcHJvY2Vzc2VzIGFyZSBjYXVzaW5nIGBNSUdSQVRJT05gIHRvIGV2YWx1YXRlIHRvIHRydWU/IEkgbmVlZCB0byB0cmFjZSBiYWNrIHRocm91Z2ggdGhlIGNvZGUgYW5kIGxvZ2ljLiBJJiMzOTtsbCBuZWVkIHRvIGZpZ3VyZSBvdXQgdGhlIGRlcGVuZGVuY2llcyBhbmQgc2VhcmNoIGZvciB3aGVyZXZlciBgTUlHUkFUSU9OYCBpcyBiZWluZyB1c2VkIHRvIGJlIGFibGUgdG8gdW5kZXJzdGFuZCB0aGUgc3lzdGVtLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wNiAxNjoxODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtzZWxlY3QgTUlHUkFUSU9OJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL0tjb25maWc9NTkxPWNvbmZpZyBNRU1PUllfSE9UUkVNT1ZFXG4tLVxubW0vS2NvbmZpZy01OTQtXHRkZXBlbmRzIG9uIE1FTU9SWV9IT1RQTFVHXG5tbS9LY29uZmlnOjU5NTpcdHNlbGVjdCBNSUdSQVRJT05cbm1tL0tjb25maWctNTk2LVxuLS1cbm1tL0tjb25maWc9NjU0PWNvbmZpZyBDT01QQUNUSU9OXG4tLVxubW0vS2NvbmZpZy02NTYtXHRkZWZhdWx0IHlcbm1tL0tjb25maWc6NjU3Olx0c2VsZWN0IE1JR1JBVElPTlxubW0vS2NvbmZpZy02NTgtXHRkZXBlbmRzIG9uIE1NVVxuLS1cbm1tL0tjb25maWc9Njg1PWNvbmZpZyBOVU1BX01JR1JBVElPTlxuLS1cbm1tL0tjb25maWctNjg4LVx0ZGVwZW5kcyBvbiBOVU1BIFx1MDAyNlx1MDAyNiBNTVVcbm1tL0tjb25maWc6Njg5Olx0c2VsZWN0IE1JR1JBVElPTlxubW0vS2NvbmZpZy02OTAtXHRoZWxwXG4tLVxubW0vS2NvbmZpZz0xMDY3PWNvbmZpZyBDTUFcbi0tXG5tbS9LY29uZmlnLTEwNjktXHRkZXBlbmRzIG9uIE1NVVxubW0vS2NvbmZpZzoxMDcwOlx0c2VsZWN0IE1JR1JBVElPTlxubW0vS2NvbmZpZy0xMDcxLVx0c2VsZWN0IE1FTU9SWV9JU09MQVRJT05cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDYgMTY6MTg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTU1MjkKCQkJCQkJCW91dHB1dDogMzMKCQkJCQkJCXRob3VnaHRzOiAyNDcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgTGluZSBvZiBSZWFzb25pbmcgZm9yIHRoaXMgQ29uZmlndXJhdGlvbioqCgpPa2F5LCBzbyB0aGUgYENPTVBBQ1RJT05gIG9wdGlvbiBoYXMgYmVlbiBzZXQgdG8gc2VsZWN0IGBNSUdSQVRJT05gLCB3aGljaCBpcyB0aGUgZGVmYXVsdCBiZWhhdmlvci4gVGhhdCBtZWFucyBgTUlHUkFUSU9OYCBpcyBhbG1vc3QgYWx3YXlzIGVuYWJsZWQuIEdvb2QuIE5vdywgbG9va2luZyBhdCB0aGUgb3RoZXIgcmVxdWlyZWQgY29tcG9uZW50cywgSSBrbm93IHdlIG5lZWQgYFpPTkVfREVWSUNFYCwgYERFVklDRV9QUklWQVRFYCwgYW5kIGBURVNUX0hNTWAuCgpMZXQmIzM5O3Mgc3RhcnQgd2l0aCBgVEVTVF9ITU1gLiBJcyB0aGF0IGVub3VnaD8gSSBzZWUgdGhhdCBgVEVTVF9ITU1gIGRlcGVuZHMgb24gYERFVklDRV9QUklWQVRFYCwgc28gSeKAmWxsIG5lZWQgdG8gZW5hYmxlIHRoYXQgZmlyc3QuIEFuZCwgc2luY2UgYERFVklDRV9QUklWQVRFYCBkZXBlbmRzIG9uIGBaT05FX0RFVklDRWAsIEkgaGF2ZSB0byBlbmFibGUgdGhhdCBhcyB3ZWxsLiBBbHNvLCBsb29raW5nIGNsb3NlciwgSSBzZWUgYFRFU1RfSE1NYCBkZXBlbmRzIG9uIGBUUkFOU1BBUkVOVF9IVUdFUEFHRWAsIHNvIHRoYXQgb25lIGdvZXMgaW4gdGhlIHNldCB0b28uCgpOb3cgSeKAmW0gd29uZGVyaW5nLCB3aGF0IGNvZGUgaGFzIGJlZW4gdG91Y2hlZD8gSXMgaXQgYSBsb2NhbGl6ZWQgY2hhbmdlIG9yIGEgbW9yZSB3aWRlc3ByZWFkIG1vZGlmaWNhdGlvbj8gSSBuZWVkIHRvIGNoZWNrIGlmIGBtaWdyYXRlX3ZtYV9jb2xsZWN0X3BtZGAgaXMgdGhlIG9ubHkgZnVuY3Rpb24gdGhhdCB3YXMgY2hhbmdlZC4gRnJvbSB0aGUgbG9va3Mgb2YgaXQsIHllcy4gSXQmIzM5O3MgdGhlIG9ubHkgb25lIGluIGBtbS9taWdyYXRlX2RldmljZS5jYC4gVGhhdOKAmXMgcmVhc3N1cmluZy4KCkZpbmFsbHksIGlzIGFueSBvZiB0aGlzIGZ1bmN0aW9uYWxpdHkgZXhwb3NlZCB0byB1c2Vyc3BhY2U/IExvb2tzIGxpa2UgdGhlIGBURVNUX0hNTWAgbW9kdWxlIGRvZXMgdGhpcywgcG90ZW50aWFsbHkgdGhyb3VnaCBhbiBpb2N0bCBvciBzb21ldGhpbmcgc2ltaWxhciB0aGF0IHRyaWdnZXJzIHRoZSBtaWdyYXRpb24uIEkgc2hvdWxkIHByb2JhYmx5IGRpZyBpbnRvIGBsaWIvdGVzdF9obW0uY2AgdG8gc2VlIGV4YWN0bHkgaG93IGl0JiMzOTtzIHRyaWdnZXJlZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDYgMTY6MTg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bWlncmF0ZV92bWFfc2V0dXAmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtsaWIvdGVzdF9obW0uYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtsaWIvdGVzdF9obW0uYz0xMTIwPXN0YXRpYyBpbnQgZG1pcnJvcl9taWdyYXRlX3RvX3N5c3RlbShzdHJ1Y3QgZG1pcnJvciAqZG1pcnJvcixcbi0tXG5saWIvdGVzdF9obW0uYy0xMTY0LVxubGliL3Rlc3RfaG1tLmM6MTE2NTpcdFx0cmV0ID0gbWlncmF0ZV92bWFfc2V0dXAoXHUwMDI2YXJncyk7XG5saWIvdGVzdF9obW0uYy0xMTY2LVx0XHRpZiAocmV0KVxuLS1cbmxpYi90ZXN0X2htbS5jPTExODk9c3RhdGljIGludCBkbWlycm9yX21pZ3JhdGVfdG9fZGV2aWNlKHN0cnVjdCBkbWlycm9yICpkbWlycm9yLFxuLS1cbmxpYi90ZXN0X2htbS5jLTEyNDItXHRcdFx0XHRNSUdSQVRFX1ZNQV9TRUxFQ1RfQ09NUE9VTkQ7XG5saWIvdGVzdF9obW0uYzoxMjQzOlx0XHRyZXQgPSBtaWdyYXRlX3ZtYV9zZXR1cChcdTAwMjZhcmdzKTtcbmxpYi90ZXN0X2htbS5jLTEyNDQtXHRcdGlmIChyZXQpXG4tLVxubGliL3Rlc3RfaG1tLmM9MTY1Mz1zdGF0aWMgdm1fZmF1bHRfdCBkbWlycm9yX2Rldm1lbV9mYXVsdChzdHJ1Y3Qgdm1fZmF1bHQgKnZtZilcbi0tXG5saWIvdGVzdF9obW0uYy0xNzA1LVx0LypcbmxpYi90ZXN0X2htbS5jOjE3MDY6XHQgKiBJbiBwcmFjdGljZSBtaWdyYXRlX3ZtYV9zZXR1cCgpIHNob3VsZCBuZXZlciBmYWlsIHVubGVzcyB0aGVcbmxpYi90ZXN0X2htbS5jLTE3MDctXHQgKiB0ZXN0IGlzIHdyb25nIGFzIGl0IGp1c3QgdGVzdHMgc29tZSBzdGF0aWMgVk1BIHByb3BlcnRpZXMuXG5saWIvdGVzdF9obW0uYy0xNzA4LVx0ICovXG5saWIvdGVzdF9obW0uYzoxNzA5Olx0aWYgKG1pZ3JhdGVfdm1hX3NldHVwKFx1MDAyNmFyZ3MpKSB7XG5saWIvdGVzdF9obW0uYy0xNzEwLVx0XHRyZXQgPSBWTV9GQVVMVF9TSUdCVVM7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA2IDE2OjE4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE2NTIzCgkJCQkJCQlvdXRwdXQ6IDM1CgkJCQkJCQl0aG91Z2h0czogMjkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBteSBvd24sIGdpdmVuIG15IGV4cGVydGlzZToKCioqTXkgSW1tZWRpYXRlIEFzc2Vzc21lbnQ6IGlvY3RsIEludGVncmF0aW9uIGFuZCBNaWdyYXRpb24gRnVuY3Rpb25zKioKClJpZ2h0LCBzbyBJJiMzOTttIHNlZWluZyB0aGF0IGBkbWlycm9yX21pZ3JhdGVfdG9fc3lzdGVtYCBhbmQgYGRtaXJyb3JfbWlncmF0ZV90b19kZXZpY2VgIGFyZSBiZWluZyBpbnZva2VkIHRocm91Z2ggaW9jdGxzLiBUaGF0JiMzOTtzIGltbWVkaWF0ZWx5IGludGVyZXN0aW5nLCBiZWNhdXNlIGl0IGdpdmVzIG1lIGEgY2xlYXIgaWRlYSBvZiB0aGUgaW50ZW5kZWQgdXNlIGNhc2UsIGFuZCB0aGUgbGV2ZWwgb2YgaW50ZXJhY3Rpb24gdGhlIGNhbGxlciBoYXMgd2l0aCB0aGUgZGV2aWNlLiBJL08gY29udHJvbCBjYWxscyBhcmUgdHlwaWNhbGx5IGhvdyB3ZSBleHBvc2UgbG93LWxldmVsIGRldmljZSBjb250cm9sIGFuZCBjb25maWd1cmF0aW9uIHRvIHVzZXIgc3BhY2UsIG9yIG90aGVyIHN5c3RlbSBjb21wb25lbnRzLgoKVGhpcyBzdHJvbmdseSBzdWdnZXN0cyB0aGF0IHRoZXNlIG1pZ3JhdGlvbiBmdW5jdGlvbnMgYXJlIGludGltYXRlbHkgdGllZCB0byB0aGUgY29yZSBkZXZpY2UgZHJpdmVyIG9yIGl0cyBhc3NvY2lhdGVkIGludGVyZmFjZS4gSXQgaXMgbGlrZWx5IGEgcHJpdmlsZWdlZCBvcGVyYXRpb24sIHJlcXVpcmluZyBhIGNhcmVmdWxseSBjcmFmdGVkIGlvY3RsIHJlcXVlc3QuIFRoZSBmYWN0IHRoYXQgdGhlIGZ1bmN0aW9ucyBhcmUgbmFtZWQgJiMzNDttaWdyYXRlJiMzNDsgaXMgYWxzbyBzaWduaWZpY2FudC4gSSBhbSBleHBlY3Rpbmcgc29tZSBzb3J0IG9mIGRhdGEgbW92ZW1lbnQgb3IgbWFuYWdlbWVudCBtZWNoYW5pc20uIFBlcmhhcHMgdGhlc2UgZnVuY3Rpb25zIG9yY2hlc3RyYXRlIHRoZSBtb3ZlbWVudCBvZiBkYXRhIGJsb2NrcyBiZXR3ZWVuIHN5c3RlbSBtZW1vcnkgYW5kIHRoZSBkZXZpY2UmIzM5O3Mgb3duIHN0b3JhZ2UsIG9yIHZpY2UtdmVyc2EsIGxpa2VseSBmb3Igc29tZSBvcHRpbWl6YXRpb24gcHVycG9zZSAoZS5nLiwgZGF0YSBjYWNoaW5nLCBsb2FkIGJhbGFuY2luZywgb3IgYSBtaWdyYXRpb24gdG93YXJkIG9yIGF3YXkgZnJvbSBhIGRlZGljYXRlZCBtZW1vcnkgcmVnaW9uKS4gVGhlIG5hbWluZyBjb252ZW50aW9ucyBtYWtlIG1lIGFudGljaXBhdGUgc29tZSBzb3J0IG9mIG1pcnJvcmluZyBvcGVyYXRpb25zLgoKTXkgbmV4dCBzdGVwIGlzIHRvIGV4YW1pbmUgdGhlIGRyaXZlciBjb2RlIHRoYXQgY2FsbHMgdGhlc2UgaW9jdGxzIHRvIHVuZGVyc3RhbmQgdGhlIGxhcmdlciBjb250ZXh0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wNiAxNjoxODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtkbWlycm9yX21pZ3JhdGVfdG9fc3lzdGVtJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bGliL3Rlc3RfaG1tLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bGliL3Rlc3RfaG1tLmM9MTEwNz1kbWlycm9yX3N1Y2Nlc3NmdWxfbWlncmF0ZWRfcGFnZXMoc3RydWN0IG1pZ3JhdGVfdm1hICptaWdyYXRlKVxuLS1cbmxpYi90ZXN0X2htbS5jLTExMTktXG5saWIvdGVzdF9obW0uYzoxMTIwOnN0YXRpYyBpbnQgZG1pcnJvcl9taWdyYXRlX3RvX3N5c3RlbShzdHJ1Y3QgZG1pcnJvciAqZG1pcnJvcixcbmxpYi90ZXN0X2htbS5jLTExMjEtXHRcdFx0XHQgICAgIHN0cnVjdCBobW1fZG1pcnJvcl9jbWQgKmNtZClcbi0tXG5saWIvdGVzdF9obW0uYz0xNTEzPXN0YXRpYyBsb25nIGRtaXJyb3JfZm9wc191bmxvY2tlZF9pb2N0bChzdHJ1Y3QgZmlsZSAqZmlscCxcbi0tXG5saWIvdGVzdF9obW0uYy0xNTUwLVx0Y2FzZSBITU1fRE1JUlJPUl9NSUdSQVRFX1RPX1NZUzpcbmxpYi90ZXN0X2htbS5jOjE1NTE6XHRcdHJldCA9IGRtaXJyb3JfbWlncmF0ZV90b19zeXN0ZW0oZG1pcnJvciwgXHUwMDI2Y21kKTtcbmxpYi90ZXN0X2htbS5jLTE1NTItXHRcdGJyZWFrO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wNiAxNjoxODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNzEwMQoJCQkJCQkJb3V0cHV0OiAyNgoJCQkJCQkJdGhvdWdodHM6IDM1OQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBbmFseXNpcyBvZiB0aGUgYEhNTV9ETUlSUk9SX01JR1JBVEVgIFBhdGgqKgoKT2theSwgc28gdGhlIGBITU1fRE1JUlJPUl9NSUdSQVRFX1RPX1NZU2AgYW5kIGBITU1fRE1JUlJPUl9NSUdSQVRFX1RPX0RFVmAgaW9jdGxzIOKAkyB0aG9zZSBhcmUgZGVmaW5pdGVseSB0aGUgZW50cnkgcG9pbnRzLCB3aGljaCBtZWFucyB1c2Vyc3BhY2UgY2FuIHRyaWdnZXIgdGhpcyB0aHJvdWdoIGBURVNUX0hNTWAuIEFuZCwgSSBrbm93IERSTSBkcml2ZXJzIGxpa2UgYG5vdXZlYXVgIGFuZCBgYW1ka2ZkYCBhcmUgYWxzbyBsZXZlcmFnaW5nIHRoaXMsIHdoaWNoIGZ1cnRoZXIgdmFsaWRhdGVzIGl0cyBpbXBvcnRhbmNlLiBFbmFibGluZyBgVEVTVF9ITU1gIHNlZW1zIGxpa2UgYSBzb2xpZCwgZm9jdXNlZCBhcHByb2FjaCBmb3Igb3VyIHB1cnBvc2VzLgoKTm93LCBJIG5lZWQgdG8gcGlucG9pbnQgdGhlIGNyaXRpY2FsIGZ1bmN0aW9uLiBMZXQmIzM5O3Mgc2VlLi4uIHllcywgYG1pZ3JhdGVfdm1hX2NvbGxlY3RfcG1kYCBpcyB0aGUgc3BlY2lmaWMgZnVuY3Rpb24gd2hlcmUgdGhlIGNoYW5nZXMgcmVzaWRlLiBHb29kLiBJcyB0aGlzIGEgaG90IHBhdGgsIHRob3VnaD8gTm8sIGl0IHNlZW1zIHRvIGJlIHBhcnQgb2YgZGV2aWNlIG1lbW9yeSBtaWdyYXRpb24sIHdoaWNoIGlzbiYjMzk7dCB0aGUgZ2VuZXJpYywgZnJlcXVlbnRseS1jYWxsZWQgY29kZSBwYXRoIGxpa2UgYHNjaGVkdWxlKClgIG9yIGBrbWFsbG9jKClgLiBUaGF0JiMzOTtzIGFjdHVhbGx5IGFkdmFudGFnZW91cy4gVGhpcyBtYWtlcyBpdCBhIGdvb2QgY2FuZGlkYXRlIGZvciBmb2N1c2VkIGFuYWx5c2lzLgoKQWxyaWdodCwgbGV0JiMzOTtzIG5haWwgZG93biB0aGUgY29uZmlndXJhdGlvbiByZXF1aXJlbWVudHMuIFdlIG5lZWQgYFRFU1RfSE1NYCwgb2J2aW91c2x5LiBXZSBhbHNvIG5lZWQgYERFVklDRV9QUklWQVRFYCwgYFpPTkVfREVWSUNFYCwgYW5kIGBUUkFOU1BBUkVOVF9IVUdFUEFHRWAuIEFoLCBidXQgYFRSQU5TUEFSRU5UX0hVR0VQQUdFYCBpcyBvZnRlbiBlbmFibGVkIGJ5IGRlZmF1bHQgaW4gc3l6Ym90IGNvbmZpZ3VyYXRpb25zLCBzbyBpdCBzaG91bGQgYmUgbGVzcyBvZiBhIGNvbmNlcm4uIFRoZSBtYWluIGZvY3VzIG11c3QgYmUgYFRFU1RfSE1NYCwgYnV0IHdpbGwgdGhhdCBhdXRvLWVuYWJsZSB0aGUgb3RoZXJzPyBObywgbG9va2luZyBpbnRvIGl0LCBgVEVTVF9ITU1gICpkZXBlbmRzKiBvbiBgREVWSUNFX1BSSVZBVEVgLCBzbyB3ZSBuZWVkIHRvIGVuc3VyZSB0aGF0IGlzIHByZXNlbnQuIEFuZCBgREVWSUNFX1BSSVZBVEVgICpkZXBlbmRzKiBvbiBgWk9ORV9ERVZJQ0VgLCBzbyB0aGF0IGFsc28gbXVzdCBiZSBwcmVzZW50LiBJIHNob3VsZCBjb25maXJtIHRoZSBkZXBlbmRhbmNpZXMgb2YgYFpPTkVfREVWSUNFYCBhcyB3ZWxsLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wNiAxNjoxOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgWk9ORV9ERVZJQ0UmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vS2NvbmZpZz0xMjMxPWNvbmZpZyBaT05FX0RNQTMyXG4tLVxubW0vS2NvbmZpZy0xMjM1LVxubW0vS2NvbmZpZzoxMjM2OmNvbmZpZyBaT05FX0RFVklDRVxubW0vS2NvbmZpZy0xMjM3LVx0Ym9vbCBcJiMzNDtEZXZpY2UgbWVtb3J5IChwbWVtLCBITU0sIGV0Yy4uLikgaG90cGx1ZyBzdXBwb3J0XCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA2IDE2OjE5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE3OTY1CgkJCQkJCQlvdXRwdXQ6IDMzCgkJCQkJCQl0aG91Z2h0czogMTYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aGUgYG1tL0tjb25maWdgIGZpbGUsIHNwZWNpZmljYWxseSBhcm91bmQgYFpPTkVfREVWSUNFYDoKCioqRGl2aW5nIGludG8gYG1tL0tjb25maWdgIGFuZCBgWk9ORV9ERVZJQ0VgKioKCkFscmlnaHQsIGxldCYjMzk7cyBnZXQgaW50byB0aGUgbml0dHktZ3JpdHR5IG9mIG1lbW9yeSBtYW5hZ2VtZW50IGNvbmZpZ3VyYXRpb24uIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyBgWk9ORV9ERVZJQ0VgIGlzIGRlZmluZWQgd2l0aGluIHRoZSBrZXJuZWwmIzM5O3MgS2NvbmZpZyBzeXN0ZW0uIE15IGltbWVkaWF0ZSBnb2FsIGlzIHRvIGZpZ3VyZSBvdXQgdGhlIGRlcGVuZGVuY2llcywgY29uc3RyYWludHMsIGFuZCBpbXBsaWNhdGlvbnMgb2YgZW5hYmxpbmcgb3IgZGlzYWJsaW5nIHRoaXMgem9uZS4gSSYjMzk7bSB0aGlua2luZywgaXMgdGhpcyBhIHNpbXBsZSBib29sZWFuLCBvciBkb2VzIGl0IG9mZmVyIGNvbmZpZ3VyYXRpb24gb3B0aW9ucz8gV2hhdCBvdGhlciBmZWF0dXJlcyBvciBkcml2ZXJzIHJlbHkgb24gaXQ/IEFyZSB0aGVyZSBhbnkgcGVyZm9ybWFuY2UgY29uc2lkZXJhdGlvbnMgdGllZCB0byBpdD8KCkkmIzM5O20gZXhwZWN0aW5nIHRvIHNlZSBkZXBlbmRlbmNpZXMgb24gc3BlY2lmaWMgaGFyZHdhcmUgYXJjaGl0ZWN0dXJlcyBvciBmZWF0dXJlcyByZWxhdGVkIHRvIHBlcnNpc3RlbnQgbWVtb3J5LCBOVkRJTU1zLCBvciBwb3NzaWJseSBldmVuIGNlcnRhaW4gYmxvY2sgZGV2aWNlcy4gVGhlIGBtbS9LY29uZmlnYCBmaWxlIG9mdGVuIHByb3ZpZGVzIGNsdWVzIGFib3V0IHRoZSB1bmRlcmx5aW5nIGRlc2lnbiBkZWNpc2lvbnMg4oCTIHdoeSB3YXMgYFpPTkVfREVWSUNFYCBpbnRyb2R1Y2VkIGluIHRoZSBmaXJzdCBwbGFjZT8gV2hhdCBwcm9ibGVtIGRvZXMgaXQgc29sdmUsIG9yIHdoYXQgZnVuY3Rpb25hbGl0eSBkb2VzIGl0IGVuYWJsZT8gSSYjMzk7bGwgYmUgbG9va2luZyBmb3IgcmVsYXRpb25zaGlwcyB3aXRoIG90aGVyIHpvbmVzIGxpa2UgYFpPTkVfRE1BYCBvciBgWk9ORV9ISUdITUVNYCwgYW5kIHdoZXRoZXIgYFpPTkVfREVWSUNFYCBtaWdodCBpbXBseSBhbnkgbW9kaWZpY2F0aW9ucyB0byB0aGUgY29yZSBtZW1vcnkgbWFuYWdlbWVudCBhbGdvcml0aG1zIChidWRkeSBhbGxvY2F0b3IsIHBhZ2UgYWxsb2NhdGlvbiwgZXRjLikuCgpJJiMzOTtsbCBiZSBwYXlpbmcgY2xvc2UgYXR0ZW50aW9uIHRvIGFueSBjb25kaXRpb25hbCBzdGF0ZW1lbnRzIG9yIGBzZWxlY3RgIGRpcmVjdGl2ZXMuIFRob3NlIGFyZSBnb2luZyB0byB0ZWxsIG1lIHdoYXQgZWxzZSAqbXVzdCogYmUgZW5hYmxlZCBvciAqY2FuKiBiZSBkaXNhYmxlZCBpZiBgWk9ORV9ERVZJQ0VgIGlzIGNob3Nlbi4gSSYjMzk7bGwgbmVlZCB0byB0cmFjZSB0aGUgaW1wbGljYXRpb25zIG9mIGVuYWJsaW5nIHRoaXMuIFRoaXMgaXMgdGhlIHN0YXJ0aW5nIHBvaW50IGZvciB1bmRlcnN0YW5kaW5nIGhvdyBkZXZpY2UgbWVtb3J5IGlzIGluY29ycG9yYXRlZCBpbnRvIHRoZSBvdmVyYWxsIG1lbW9yeSBtYXAgYW5kIGhvdyB0aGUga2VybmVsIGhhbmRsZXMgaXQuIEdvdHRhIGVuc3VyZSBJIGhhdmUgYSBjb21wbGV0ZSB1bmRlcnN0YW5kaW5nIG9mIHRoZSBrZXJuZWwmIzM5O3MgbWVtb3J5IGFyY2hpdGVjdHVyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40Mi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDYgMTY6MTk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDttbS9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTIzMCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsxMjMwOlx0XG4xMjMxOlx0Y29uZmlnIFpPTkVfRE1BMzJcbjEyMzI6XHRcdGJvb2wgXCYjMzQ7U3VwcG9ydCBETUEzMiB6b25lXCYjMzQ7IGlmIEFSQ0hfSEFTX1pPTkVfRE1BX1NFVFxuMTIzMzpcdFx0ZGVwZW5kcyBvbiAhWDg2XzMyXG4xMjM0Olx0XHRkZWZhdWx0IHkgaWYgQVJNNjRcbjEyMzU6XHRcbjEyMzY6XHRjb25maWcgWk9ORV9ERVZJQ0VcbjEyMzc6XHRcdGJvb2wgXCYjMzQ7RGV2aWNlIG1lbW9yeSAocG1lbSwgSE1NLCBldGMuLi4pIGhvdHBsdWcgc3VwcG9ydFwmIzM0O1xuMTIzODpcdFx0ZGVwZW5kcyBvbiBNRU1PUllfSE9UUExVR1xuMTIzOTpcdFx0ZGVwZW5kcyBvbiBNRU1PUllfSE9UUkVNT1ZFXG4xMjQwOlx0XHRkZXBlbmRzIG9uIFNQQVJTRU1FTV9WTUVNTUFQXG4xMjQxOlx0XHRzZWxlY3QgWEFSUkFZX01VTFRJXG4xMjQyOlx0XG4xMjQzOlx0XHRoZWxwXG4xMjQ0Olx0XHQgIERldmljZSBtZW1vcnkgaG90cGx1ZyBzdXBwb3J0IGFsbG93cyBmb3IgZXN0YWJsaXNoaW5nIHBtZW0sXG4xMjQ1Olx0XHQgIG9yIG90aGVyIGRldmljZSBkcml2ZXIgZGlzY292ZXJlZCBtZW1vcnkgcmVnaW9ucywgaW4gdGhlXG4xMjQ2Olx0XHQgIG1lbW1hcC4gVGhpcyBhbGxvd3MgcGZuX3RvX3BhZ2UoKSBsb29rdXBzIG9mIG90aGVyd2lzZVxuMTI0NzpcdFx0ICBcJiMzNDtkZXZpY2UtcGh5c2ljYWxcJiMzNDsgYWRkcmVzc2VzIHdoaWNoIGlzIG5lZWRlZCBmb3IgREFYLCBQQ0lfUDJQRE1BLCBhbmRcbjEyNDg6XHRcdCAgREVWSUNFX1BSSVZBVEUgZmVhdHVyZXMgYW1vbmcgb3RoZXJzLlxuMTI0OTpcdFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wNiAxNjoxOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxODY4NQoJCQkJCQkJb3V0cHV0OiAxMjUKCQkJCQkJCXRob3VnaHRzOiA1NDYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqS2VybmVsIENvbmZpZ3VyYXRpb24gZm9yIERldmljZSBNZW1vcnkgTWlncmF0aW9uIFRlc3RpbmcqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gR2l2ZW4gbXkgdW5kZXJzdGFuZGluZyBvZiB0aGUga2VybmVsIG1lbW9yeSBtYW5hZ2VtZW50IGxhbmRzY2FwZSwgYW5kIHRoZSBjb250ZXh0IG9mIGRldmljZSBtZW1vcnkgbWlncmF0aW9uLCBJIG5lZWQgdG8gaWRlbnRpZnkgdGhlIGtleSBjb25maWd1cmF0aW9uIG9wdGlvbnMgcmVxdWlyZWQgdG8gZnVsbHkgdGVzdCB0aGlzIHBhdGNoLiBJJiMzOTttIGZvY3VzaW5nIG9uIHRoZSBpbnRlcmFjdGlvbiB3aXRoIGRldmljZSBtZW1vcnksIGhvdHBsdWcsIGFuZCBtaWdyYXRpb24uCgpGaXJzdCwgSSBoYXZlIHRvIGNvbnNpZGVyIHRoZSBjb3JlIHByZS1yZXF1aXNpdGVzOiBgTUVNT1JZX0hPVFBMVUdgLCBgTUVNT1JZX0hPVFJFTU9WRWAsIGFuZCBgU1BBUlNFTUVNX1ZNRU1NQVBgLiBUaGVzZSBhcmUgcHJldHR5IHN0YW5kYXJkLCBhbmQgbGlrZWx5IGVuYWJsZWQgaW4gdGhlIHRlc3QgZW52aXJvbm1lbnRzIEkmIzM5O20gd29ya2luZyB3aXRoLCBzbyBJIHdvbiYjMzk7dCBsaXN0IHRob3NlIGRpcmVjdGx5LgoKTm93LCBsZXQmIzM5O3MgZ2V0IHRvIHRoZSBzcGVjaWZpY3MuIExvb2tpbmcgYXQgdGhlIGRlcGVuZGVuY2llcywgSSBzaG91bGQgbGlzdCBgVEVTVF9ITU1gLCBgREVWSUNFX1BSSVZBVEVgLCBhbmQgYFpPTkVfREVWSUNFYC4gTGV0JiMzOTtzIGNvbmZpcm0gdGhhdCBgVEVTVF9ITU1gIGlzIGEgdHJpc3RhdGUsIHRvIGF2b2lkIGNvbmZ1c2lvbi4gWWVwLCBjb25maXJtZWQsIGl0JiMzOTtzIGEgdHJpc3RhdGUgKCYjMzQ7VGVzdCBITU0gKEhldGVyb2dlbmVvdXMgTWVtb3J5IE1hbmFnZW1lbnQpJiMzNDspLiBTbywgYFRFU1RfSE1NPXlgIG9yIGBURVNUX0hNTT1tYCB3b3VsZCB3b3JrLiBJdOKAmXMgc2ltcGxlc3QgdG8ganVzdCBsaXN0IGBURVNUX0hNTWAuCgpOZXh0LCBJIG5lZWQgdG8gY2hlY2sgYERFVklDRV9NSUdSQVRJT05gLiBJdCYjMzk7cyBhIGBkZWZfYm9vbGAgdGhhdCBkZXBlbmRzIG9uIGBNSUdSQVRJT05gIGFuZCBgWk9ORV9ERVZJQ0VgLiBJIGRvbiYjMzk7dCBzdHJpY3RseSAqbmVlZCogdG8gbGlzdCBpdCBiZWNhdXNlIG9mIHRoZSBkZXBlbmRlbmNpZXMsIGJ1dCBpdCBtaWdodCBiZSB3b3J0aCBpbmNsdWRpbmcgZm9yIGNsYXJpdHkuIEkmIzM5O2xsIGFkZCBpdCB0byB0aGUgbGlzdCwganVzdCB0byBiZSB0aG9yb3VnaCwgYnV0IG5vdGUgdGhlIGRlcGVuZGVuY3kuCgpPa2F5LCB3YWl0Li4uIFRoaW5raW5nIGFib3V0IGl0LCBgVEVTVF9ITU1gIGRlZmF1bHRzIHRvIGEgbW9kdWxlLiBHaXZlbiB0aGUgaW5zdHJ1Y3Rpb25zLCB3aGljaCBzYXkgJiMzNDtMaXN0IG9mIGtlcm5lbCBjb25maWcgZmxhZ3MgdGhhdCBtdXN0IGJlIGV4cGxpY2l0bHkgZW5hYmxlZCB0byBjb21waWxlIGFuZCB0ZXN0IHRoZSBtb2RpZmllZCBjb2RlLCYjMzQ7IGJvdGggYFRFU1RfSE1NPXlgIGFuZCBgVEVTVF9ITU09bWAgYXJlIGV4cGxpY2l0bHkgZW5hYmxlZCBieSBkZWZpbml0aW9uLiBTbywgbXkgaW5pdGlhbCBsaXN0IGlzIGdvb2Q6CgotICAgYFRFU1RfSE1NYAotICAgYERFVklDRV9QUklWQVRFYAotICAgYFpPTkVfREVWSUNFYAoKTm93LCBsZXQmIzM5O3MgcmV2aWV3IHRoZSBwYXRjaCBpdHNlbGYuIEkgc2VlIHRoZSBjb2RlIGNoYW5nZXMgd2hpY2ggaW52b2x2ZSBjaGVja3MgZm9yIGBwdGVfcHJlc2VudGAgYmVmb3JlIGNhbGxpbmcgYHB0ZV9wZm5gIG9yIGBwdGVfZGlydHlgLiBUaGlzIGlzIGEgY2xlYXIgc2FmZXR5IGZpeCwgcHJldmVudGluZyBwb3RlbnRpYWwgbnVsbCBwb2ludGVyIGRlcmVmZXJlbmNlcyBvciBvdGhlciB1bmRlZmluZWQgYmVoYXZpb3Igd2hlbiBvcGVyYXRpbmcgb24gUFRFcy4gVGhpcyBpcyByb2J1c3QuCgpUaGUgcGF0Y2gmIzM5O3MgYXJlYSBvZiBpbXBhY3QgaXMgYG1pZ3JhdGVfdm1hX2NvbGxlY3RfcG1kYC4gVGhpcyBtZWFucyB0aGUgZml4IGlzIGRlZmluaXRlbHkgcmVsZXZhbnQgdG8gZGV2aWNlIG1lbW9yeSBtaWdyYXRpb24sIHBvdGVudGlhbGx5IHRyaWdnZXJlZCBieSB0aGUgYFRFU1RfSE1NYCBtb2R1bGUuIFRoZSBwYXRjaCBkaXJlY3RseSBhZGRyZXNzZXMgYSBidWcuCgpPa2F5LCBJJiMzOTttIHNhdGlzZmllZC4gTGV0JiMzOTtzIGNhbGwgYHNldC1yZXN1bHRzYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDYgMTY6MTk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1RFU1RfSE1NJiMzNDssCiAgICAmIzM0O0RFVklDRV9QUklWQVRFJiMzNDssCiAgICAmIzM0O1pPTkVfREVWSUNFJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7bWlncmF0ZV92bWFfY29sbGVjdF9wbWQmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcyBtaXNzaW5nIHB0ZV9wcmVzZW50KCkgY2hlY2tzIGluIG1pZ3JhdGVfdm1hX2NvbGxlY3RfcG1kKCkgYmVmb3JlIGNhbGxpbmcgcHRlX3BmbigpIGFuZCBwdGVfZGlydHkoKS4gVGhpcyBpcyBmdW5jdGlvbmFsIGNvcmUga2VybmVsL21tIGNvZGUgcmVhY2hhYmxlIHZpYSBkZXZpY2UgbWVtb3J5IG1pZ3JhdGlvbiBwYXRocywgd2hpY2ggY2FuIGJlIHRyaWdnZXJlZCBmcm9tIHVzZXJzcGFjZSB1c2luZyB0aGUgVEVTVF9ITU0gbW9kdWxlLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtURVNUX0hNTSYjMzQ7LAogICAgJiMzNDtERVZJQ0VfUFJJVkFURSYjMzQ7LAogICAgJiMzNDtaT05FX0RFVklDRSYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O21pZ3JhdGVfdm1hX2NvbGxlY3RfcG1kJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHMgbWlzc2luZyBwdGVfcHJlc2VudCgpIGNoZWNrcyBpbiBtaWdyYXRlX3ZtYV9jb2xsZWN0X3BtZCgpIGJlZm9yZSBjYWxsaW5nIHB0ZV9wZm4oKSBhbmQgcHRlX2RpcnR5KCkuIFRoaXMgaXMgZnVuY3Rpb25hbCBjb3JlIGtlcm5lbC9tbSBjb2RlIHJlYWNoYWJsZSB2aWEgZGV2aWNlIG1lbW9yeSBtaWdyYXRpb24gcGF0aHMsIHdoaWNoIGNhbiBiZSB0cmlnZ2VyZWQgZnJvbSB1c2Vyc3BhY2UgdXNpbmcgdGhlIFRFU1RfSE1NIG1vZHVsZS4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA2VDE2OjE2OjQyLjQzOTQzNTE0NVoiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE1OTA1MjkyMTQ1MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJURVNUX0hNTVwiLFxuICAgIFwiREVWSUNFX1BSSVZBVEVcIixcbiAgICBcIlpPTkVfREVWSUNFXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwibWlncmF0ZV92bWFfY29sbGVjdF9wbWRcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRzIG1pc3NpbmcgcHRlX3ByZXNlbnQoKSBjaGVja3MgaW4gbWlncmF0ZV92bWFfY29sbGVjdF9wbWQoKSBiZWZvcmUgY2FsbGluZyBwdGVfcGZuKCkgYW5kIHB0ZV9kaXJ0eSgpLiBUaGlzIGlzIGZ1bmN0aW9uYWwgY29yZSBrZXJuZWwvbW0gY29kZSByZWFjaGFibGUgdmlhIGRldmljZSBtZW1vcnkgbWlncmF0aW9uIHBhdGhzLCB3aGljaCBjYW4gYmUgdHJpZ2dlcmVkIGZyb20gdXNlcnNwYWNlIHVzaW5nIHRoZSBURVNUX0hNTSBtb2R1bGUuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA2VDE2OjE2OjQyLjQzOTQ0MDM3NVoiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDkyNDk5Nzg3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgYTJiODQ2YjgyNTM5ZDcyMmNhNTRlNDY3YjI4MjZkZTFiNTRjZDc1MlxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgTW9uIEp1bCA2IDE2OjE2OjQwIDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL21tL21pZ3JhdGVfZGV2aWNlLmMgYi9tbS9taWdyYXRlX2RldmljZS5jXFxuaW5kZXggMDUyMTY3ZjlhZDU0NzQuLjZlNzExMzgxZjA5Mjk1IDEwMDY0NFxcbi0tLSBhL21tL21pZ3JhdGVfZGV2aWNlLmNcXG4rKysgYi9tbS9taWdyYXRlX2RldmljZS5jXFxuQEAgLTQxMSw3ICs0MTEsOCBAQCBzdGF0aWMgaW50IG1pZ3JhdGVfdm1hX2NvbGxlY3RfcG1kKHBtZF90ICpwbWRwLFxcbiBcXHRcXHRcXHRib29sIGFub25fZXhjbHVzaXZlO1xcbiBcXHRcXHRcXHRwdGVfdCBzd3BfcHRlO1xcbiBcXG4tXFx0XFx0XFx0Zmx1c2hfY2FjaGVfcGFnZSh2bWEsIGFkZHIsIHB0ZV9wZm4ocHRlKSk7XFxuK1xcdFxcdFxcdGlmIChwdGVfcHJlc2VudChwdGUpKVxcbitcXHRcXHRcXHRcXHRmbHVzaF9jYWNoZV9wYWdlKHZtYSwgYWRkciwgcHRlX3BmbihwdGUpKTtcXG4gXFx0XFx0XFx0YW5vbl9leGNsdXNpdmUgPSBmb2xpb190ZXN0X2Fub24oZm9saW8pIFxcdTAwMjZcXHUwMDI2XFxuIFxcdFxcdFxcdFxcdFxcdCAgUGFnZUFub25FeGNsdXNpdmUocGFnZSk7XFxuIFxcdFxcdFxcdGlmIChhbm9uX2V4Y2x1c2l2ZSkge1xcbkBAIC00MzIsNyArNDMzLDcgQEAgc3RhdGljIGludCBtaWdyYXRlX3ZtYV9jb2xsZWN0X3BtZChwbWRfdCAqcG1kcCxcXG4gXFx0XFx0XFx0bWlncmF0ZS1cXHUwMDNlY3BhZ2VzKys7XFxuIFxcbiBcXHRcXHRcXHQvKiBTZXQgdGhlIGRpcnR5IGZsYWcgb24gdGhlIGZvbGlvIG5vdyB0aGUgcHRlIGlzIGdvbmUuICovXFxuLVxcdFxcdFxcdGlmIChwdGVfZGlydHkocHRlKSlcXG4rXFx0XFx0XFx0aWYgKHB0ZV9wcmVzZW50KHB0ZSkgXFx1MDAyNlxcdTAwMjYgcHRlX2RpcnR5KHB0ZSkpXFxuIFxcdFxcdFxcdFxcdGZvbGlvX21hcmtfZGlydHkoZm9saW8pO1xcbiBcXG4gXFx0XFx0XFx0LyogU2V0dXAgc3BlY2lhbCBtaWdyYXRpb24gcGFnZSB0YWJsZSBlbnRyeSAqL1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wNlQxNjoxNjo0Mi45MzI2ODExNDJaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjE1ODU1OTY2MjgzNSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJURVNUX0hNTVwiLFxuICAgIFwiREVWSUNFX1BSSVZBVEVcIixcbiAgICBcIlpPTkVfREVWSUNFXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwibWlncmF0ZV92bWFfY29sbGVjdF9wbWRcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRzIG1pc3NpbmcgcHRlX3ByZXNlbnQoKSBjaGVja3MgaW4gbWlncmF0ZV92bWFfY29sbGVjdF9wbWQoKSBiZWZvcmUgY2FsbGluZyBwdGVfcGZuKCkgYW5kIHB0ZV9kaXJ0eSgpLiBUaGlzIGlzIGZ1bmN0aW9uYWwgY29yZSBrZXJuZWwvbW0gY29kZSByZWFjaGFibGUgdmlhIGRldmljZSBtZW1vcnkgbWlncmF0aW9uIHBhdGhzLCB3aGljaCBjYW4gYmUgdHJpZ2dlcmVkIGZyb20gdXNlcnNwYWNlIHVzaW5nIHRoZSBURVNUX0hNTSBtb2R1bGUuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmVcbmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHlcbnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuXG5cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6XG4tIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuXG4tIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLlxuLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuXG4tIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSxcbmV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cblxuSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaFxudG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuXG5cbldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOlxuMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy5cbiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBEbyBub3QgbGlzdCB0b28gZ2VuZXJpYyBjb25maWdzICh3ZSBhbHJlYWR5IGhhdmUgdGhlbSBlbmFibGVkKS4gT25seSBsaXN0IHRob3NlIHRoYXRcbiAgIHNwZWNpZmljYWxseSBjb3ZlciB0aGUgbW9kaWZpZWQgY29kZS4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzIG91dHB1dCBhcnJheSxcbiAgIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgYTJiODQ2YjgyNTM5ZDcyMmNhNTRlNDY3YjI4MjZkZTFiNTRjZDc1MlxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBNb24gSnVsIDYgMTY6MTY6NDAgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9tbS9taWdyYXRlX2RldmljZS5jIGIvbW0vbWlncmF0ZV9kZXZpY2UuY1xuaW5kZXggMDUyMTY3ZjlhZDU0NzQuLjZlNzExMzgxZjA5Mjk1IDEwMDY0NFxuLS0tIGEvbW0vbWlncmF0ZV9kZXZpY2UuY1xuKysrIGIvbW0vbWlncmF0ZV9kZXZpY2UuY1xuQEAgLTQxMSw3ICs0MTEsOCBAQCBzdGF0aWMgaW50IG1pZ3JhdGVfdm1hX2NvbGxlY3RfcG1kKHBtZF90ICpwbWRwLFxuIFx0XHRcdGJvb2wgYW5vbl9leGNsdXNpdmU7XG4gXHRcdFx0cHRlX3Qgc3dwX3B0ZTtcbiBcbi1cdFx0XHRmbHVzaF9jYWNoZV9wYWdlKHZtYSwgYWRkciwgcHRlX3BmbihwdGUpKTtcbitcdFx0XHRpZiAocHRlX3ByZXNlbnQocHRlKSlcbitcdFx0XHRcdGZsdXNoX2NhY2hlX3BhZ2Uodm1hLCBhZGRyLCBwdGVfcGZuKHB0ZSkpO1xuIFx0XHRcdGFub25fZXhjbHVzaXZlID0gZm9saW9fdGVzdF9hbm9uKGZvbGlvKSBcdTAwMjZcdTAwMjZcbiBcdFx0XHRcdFx0ICBQYWdlQW5vbkV4Y2x1c2l2ZShwYWdlKTtcbiBcdFx0XHRpZiAoYW5vbl9leGNsdXNpdmUpIHtcbkBAIC00MzIsNyArNDMzLDcgQEAgc3RhdGljIGludCBtaWdyYXRlX3ZtYV9jb2xsZWN0X3BtZChwbWRfdCAqcG1kcCxcbiBcdFx0XHRtaWdyYXRlLVx1MDAzZWNwYWdlcysrO1xuIFxuIFx0XHRcdC8qIFNldCB0aGUgZGlydHkgZmxhZyBvbiB0aGUgZm9saW8gbm93IHRoZSBwdGUgaXMgZ29uZS4gKi9cbi1cdFx0XHRpZiAocHRlX2RpcnR5KHB0ZSkpXG4rXHRcdFx0aWYgKHB0ZV9wcmVzZW50KHB0ZSkgXHUwMDI2XHUwMDI2IHB0ZV9kaXJ0eShwdGUpKVxuIFx0XHRcdFx0Zm9saW9fbWFya19kaXJ0eShmb2xpbyk7XG4gXG4gXHRcdFx0LyogU2V0dXAgc3BlY2lhbCBtaWdyYXRpb24gcGFnZSB0YWJsZSBlbnRyeSAqL1xuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDZUMTY6MTY6NDIuOTMyNjgyMzcyWiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzczMjE5ODg2NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIE1pZ3JhdGUgRGV2aWNlIFBhdGNoKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBmb3IgYG1tL21pZ3JhdGVfZGV2aWNlLmNgLiBTcGVjaWZpY2FsbHksIGl0IHNlZW1zIGxpa2Ugc29tZW9uZSdzIGJlZW4gdHdlYWtpbmcgdGhlIGBtaWdyYXRlX3ZtYV9jb2xsZWN0X3BtZGAgZnVuY3Rpb24uIFRoaXMgaXMgcHJldHR5IHN0YW5kYXJkIHN0dWZmIGZvciBtZW1vcnkgbWFuYWdlbWVudCwgYW5kIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBpbXBhY3Qgb2YgdGhlIGNoYW5nZXMuXG5cblRoZSBjb3JlIG9mIHRoZSBjaGFuZ2Ugc2VlbXMgdG8gYmUgdGhlIGluY2x1c2lvbiBvZiBgcHRlX3ByZXNlbnQocHRlKWAgY2hlY2tzICpiZWZvcmUqIHRob3NlIGBmbHVzaF9jYWNoZV9wYWdlYCBjYWxscywgYW5kIGFsc28gYmVmb3JlIHRoZSBgcHRlX2RpcnR5KHB0ZSlgIGNoZWNrLiBUaGF0J3MgaW1tZWRpYXRlbHkgaW50ZXJlc3RpbmcuIEl0J3MgYWxtb3N0IGNlcnRhaW5seSB0byBwcm90ZWN0IGFnYWluc3Qgc29tZSBraW5kIG9mIHJhY2UgY29uZGl0aW9uIG9yIHBvdGVudGlhbCB1c2UtYWZ0ZXItZnJlZSBzY2VuYXJpbyB3aXRoaW4gdGhlIG1pZ3JhdGlvbiBwcm9jZXNzLiBNeSBpbml0aWFsIGh1bmNoIGlzIHRoYXQgaXQncyB0cnlpbmcgdG8gZW5zdXJlIHRoYXQgdGhlIHBhZ2UgdGFibGUgZW50cnkgKFBURSkgaXMgYWN0dWFsbHkgdmFsaWQgYmVmb3JlIGRvaW5nIGFueXRoaW5nIHdpdGggaXQsIHdoaWNoIGlzIGdvb2QgcHJhY3RpY2UsIGVzcGVjaWFsbHkgaW4gYSBjb25jdXJyZW50IGVudmlyb25tZW50IGxpa2UgdGhlIGtlcm5lbC4gTGV0IG1lIGRpZyBpbnRvIHRoZSBzdXJyb3VuZGluZyBjb2RlIGFuZCBzZWUgKndoeSogdGhpcyB3YXNuJ3QgYWxyZWFkeSB0aGVyZS4gTXkgZXhwZXJ0aXNlIHRlbGxzIG1lIHRoZXNlIGd1YXJkcyBhcmUgdGhlcmUgZm9yIGEgcmVhc29uLCBsaWtlbHkgYSBidWcgaGFkIG9jY3VycmVkLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxOTcwLCJPdXRwdXRUb2tlbnMiOjM2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6OTksIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wNlQxNjoxNjo0Ni42NjQ4ODMwOTZaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMzQzMjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibW0vbWlncmF0ZV9kZXZpY2UuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAzOTAsXG4gIFwiTGluZUNvdW50XCI6IDEwMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgMzkwOlxcdFxcdFxcdCAqXFxuIDM5MTpcXHRcXHRcXHQgKiBXZSBkcm9wIHRoaXMgcmVmZXJlbmNlIGFmdGVyIGlzb2xhdGluZyB0aGUgZm9saW8gZnJvbSB0aGUgbHJ1XFxuIDM5MjpcXHRcXHRcXHQgKiBmb3Igbm9uIGRldmljZSBmb2xpbyAoZGV2aWNlIGZvbGlvIGFyZSBub3Qgb24gdGhlIGxydSBhbmQgdGh1c1xcbiAzOTM6XFx0XFx0XFx0ICogY2FuJ3QgYmUgZHJvcHBlZCBmcm9tIGl0KS5cXG4gMzk0OlxcdFxcdFxcdCAqL1xcbiAzOTU6XFx0XFx0XFx0Zm9saW8gPSBwYWdlX2ZvbGlvKHBhZ2UpO1xcbiAzOTY6XFx0XFx0XFx0Zm9saW9fZ2V0KGZvbGlvKTtcXG4gMzk3OlxcdFxcbiAzOTg6XFx0XFx0XFx0LypcXG4gMzk5OlxcdFxcdFxcdCAqIFdlIHJlbHkgb24gZm9saW9fdHJ5bG9jaygpIHRvIGF2b2lkIGRlYWRsb2NrIGJldHdlZW5cXG4gNDAwOlxcdFxcdFxcdCAqIGNvbmN1cnJlbnQgbWlncmF0aW9ucyB3aGVyZSBlYWNoIGlzIHdhaXRpbmcgb24gdGhlIG90aGVyc1xcbiA0MDE6XFx0XFx0XFx0ICogZm9saW8gbG9jay4gSWYgd2UgY2FuJ3QgaW1tZWRpYXRlbHkgbG9jayB0aGUgZm9saW8gd2UgZmFpbCB0aGlzXFxuIDQwMjpcXHRcXHRcXHQgKiBtaWdyYXRpb24gYXMgaXQgaXMgb25seSBiZXN0IGVmZm9ydCBhbnl3YXkuXFxuIDQwMzpcXHRcXHRcXHQgKlxcbiA0MDQ6XFx0XFx0XFx0ICogSWYgd2UgY2FuIGxvY2sgdGhlIGZvbGlvIGl0J3Mgc2FmZSB0byBzZXQgdXAgYSBtaWdyYXRpb24gZW50cnlcXG4gNDA1OlxcdFxcdFxcdCAqIG5vdy4gSW4gdGhlIGNvbW1vbiBjYXNlIHdoZXJlIHRoZSBmb2xpbyBpcyBtYXBwZWQgb25jZSBpbiBhXFxuIDQwNjpcXHRcXHRcXHQgKiBzaW5nbGUgcHJvY2VzcyBzZXR0aW5nIHVwIHRoZSBtaWdyYXRpb24gZW50cnkgbm93IGlzIGFuXFxuIDQwNzpcXHRcXHRcXHQgKiBvcHRpbWlzYXRpb24gdG8gYXZvaWQgd2Fsa2luZyB0aGUgcm1hcCBsYXRlciB3aXRoXFxuIDQwODpcXHRcXHRcXHQgKiB0cnlfdG9fbWlncmF0ZSgpLlxcbiA0MDk6XFx0XFx0XFx0ICovXFxuIDQxMDpcXHRcXHRcXHRpZiAoZmF1bHRfZm9saW8gPT0gZm9saW8gfHwgZm9saW9fdHJ5bG9jayhmb2xpbykpIHtcXG4gNDExOlxcdFxcdFxcdFxcdGJvb2wgYW5vbl9leGNsdXNpdmU7XFxuIDQxMjpcXHRcXHRcXHRcXHRwdGVfdCBzd3BfcHRlO1xcbiA0MTM6XFx0XFxuIDQxNDpcXHRcXHRcXHRcXHRpZiAocHRlX3ByZXNlbnQocHRlKSlcXG4gNDE1OlxcdFxcdFxcdFxcdFxcdGZsdXNoX2NhY2hlX3BhZ2Uodm1hLCBhZGRyLCBwdGVfcGZuKHB0ZSkpO1xcbiA0MTY6XFx0XFx0XFx0XFx0YW5vbl9leGNsdXNpdmUgPSBmb2xpb190ZXN0X2Fub24oZm9saW8pIFxcdTAwMjZcXHUwMDI2XFxuIDQxNzpcXHRcXHRcXHRcXHRcXHRcXHQgIFBhZ2VBbm9uRXhjbHVzaXZlKHBhZ2UpO1xcbiA0MTg6XFx0XFx0XFx0XFx0aWYgKGFub25fZXhjbHVzaXZlKSB7XFxuIDQxOTpcXHRcXHRcXHRcXHRcXHRwdGUgPSBwdGVwX2NsZWFyX2ZsdXNoKHZtYSwgYWRkciwgcHRlcCk7XFxuIDQyMDpcXHRcXG4gNDIxOlxcdFxcdFxcdFxcdFxcdGlmIChmb2xpb190cnlfc2hhcmVfYW5vbl9ybWFwX3B0ZShmb2xpbywgcGFnZSkpIHtcXG4gNDIyOlxcdFxcdFxcdFxcdFxcdFxcdHNldF9wdGVfYXQobW0sIGFkZHIsIHB0ZXAsIHB0ZSk7XFxuIDQyMzpcXHRcXHRcXHRcXHRcXHRcXHRpZiAoZmF1bHRfZm9saW8gIT0gZm9saW8pXFxuIDQyNDpcXHRcXHRcXHRcXHRcXHRcXHRcXHRmb2xpb191bmxvY2soZm9saW8pO1xcbiA0MjU6XFx0XFx0XFx0XFx0XFx0XFx0Zm9saW9fcHV0KGZvbGlvKTtcXG4gNDI2OlxcdFxcdFxcdFxcdFxcdFxcdG1wZm4gPSAwO1xcbiA0Mjc6XFx0XFx0XFx0XFx0XFx0XFx0Z290byBuZXh0O1xcbiA0Mjg6XFx0XFx0XFx0XFx0XFx0fVxcbiA0Mjk6XFx0XFx0XFx0XFx0fSBlbHNlIHtcXG4gNDMwOlxcdFxcdFxcdFxcdFxcdHB0ZSA9IHB0ZXBfZ2V0X2FuZF9jbGVhcihtbSwgYWRkciwgcHRlcCk7XFxuIDQzMTpcXHRcXHRcXHRcXHR9XFxuIDQzMjpcXHRcXG4gNDMzOlxcdFxcdFxcdFxcdG1pZ3JhdGUtXFx1MDAzZWNwYWdlcysrO1xcbiA0MzQ6XFx0XFxuIDQzNTpcXHRcXHRcXHRcXHQvKiBTZXQgdGhlIGRpcnR5IGZsYWcgb24gdGhlIGZvbGlvIG5vdyB0aGUgcHRlIGlzIGdvbmUuICovXFxuIDQzNjpcXHRcXHRcXHRcXHRpZiAocHRlX3ByZXNlbnQocHRlKSBcXHUwMDI2XFx1MDAyNiBwdGVfZGlydHkocHRlKSlcXG4gNDM3OlxcdFxcdFxcdFxcdFxcdGZvbGlvX21hcmtfZGlydHkoZm9saW8pO1xcbiA0Mzg6XFx0XFxuIDQzOTpcXHRcXHRcXHRcXHQvKiBTZXR1cCBzcGVjaWFsIG1pZ3JhdGlvbiBwYWdlIHRhYmxlIGVudHJ5ICovXFxuIDQ0MDpcXHRcXHRcXHRcXHRpZiAobXBmbiBcXHUwMDI2IE1JR1JBVEVfUEZOX1dSSVRFKVxcbiA0NDE6XFx0XFx0XFx0XFx0XFx0ZW50cnkgPSBtYWtlX3dyaXRhYmxlX21pZ3JhdGlvbl9lbnRyeShcXG4gNDQyOlxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdHBhZ2VfdG9fcGZuKHBhZ2UpKTtcXG4gNDQzOlxcdFxcdFxcdFxcdGVsc2UgaWYgKGFub25fZXhjbHVzaXZlKVxcbiA0NDQ6XFx0XFx0XFx0XFx0XFx0ZW50cnkgPSBtYWtlX3JlYWRhYmxlX2V4Y2x1c2l2ZV9taWdyYXRpb25fZW50cnkoXFxuIDQ0NTpcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRwYWdlX3RvX3BmbihwYWdlKSk7XFxuIDQ0NjpcXHRcXHRcXHRcXHRlbHNlXFxuIDQ0NzpcXHRcXHRcXHRcXHRcXHRlbnRyeSA9IG1ha2VfcmVhZGFibGVfbWlncmF0aW9uX2VudHJ5KFxcbiA0NDg6XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0cGFnZV90b19wZm4ocGFnZSkpO1xcbiA0NDk6XFx0XFx0XFx0XFx0aWYgKHB0ZV9wcmVzZW50KHB0ZSkpIHtcXG4gNDUwOlxcdFxcdFxcdFxcdFxcdGlmIChwdGVfeW91bmcocHRlKSlcXG4gNDUxOlxcdFxcdFxcdFxcdFxcdFxcdGVudHJ5ID0gbWFrZV9taWdyYXRpb25fZW50cnlfeW91bmcoZW50cnkpO1xcbiA0NTI6XFx0XFx0XFx0XFx0XFx0aWYgKHB0ZV9kaXJ0eShwdGUpKVxcbiA0NTM6XFx0XFx0XFx0XFx0XFx0XFx0ZW50cnkgPSBtYWtlX21pZ3JhdGlvbl9lbnRyeV9kaXJ0eShlbnRyeSk7XFxuIDQ1NDpcXHRcXHRcXHRcXHR9XFxuIDQ1NTpcXHRcXHRcXHRcXHRzd3BfcHRlID0gc3dwX2VudHJ5X3RvX3B0ZShlbnRyeSk7XFxuIDQ1NjpcXHRcXHRcXHRcXHRpZiAocHRlX3ByZXNlbnQocHRlKSkge1xcbiA0NTc6XFx0XFx0XFx0XFx0XFx0aWYgKHB0ZV9zb2Z0X2RpcnR5KHB0ZSkpXFxuIDQ1ODpcXHRcXHRcXHRcXHRcXHRcXHRzd3BfcHRlID0gcHRlX3N3cF9ta3NvZnRfZGlydHkoc3dwX3B0ZSk7XFxuIDQ1OTpcXHRcXHRcXHRcXHRcXHRpZiAocHRlX3VmZmRfd3AocHRlKSlcXG4gNDYwOlxcdFxcdFxcdFxcdFxcdFxcdHN3cF9wdGUgPSBwdGVfc3dwX21rdWZmZF93cChzd3BfcHRlKTtcXG4gNDYxOlxcdFxcdFxcdFxcdH0gZWxzZSB7XFxuIDQ2MjpcXHRcXHRcXHRcXHRcXHRpZiAocHRlX3N3cF9zb2Z0X2RpcnR5KHB0ZSkpXFxuIDQ2MzpcXHRcXHRcXHRcXHRcXHRcXHRzd3BfcHRlID0gcHRlX3N3cF9ta3NvZnRfZGlydHkoc3dwX3B0ZSk7XFxuIDQ2NDpcXHRcXHRcXHRcXHRcXHRpZiAocHRlX3N3cF91ZmZkX3dwKHB0ZSkpXFxuIDQ2NTpcXHRcXHRcXHRcXHRcXHRcXHRzd3BfcHRlID0gcHRlX3N3cF9ta3VmZmRfd3Aoc3dwX3B0ZSk7XFxuIDQ2NjpcXHRcXHRcXHRcXHR9XFxuIDQ2NzpcXHRcXHRcXHRcXHRzZXRfcHRlX2F0KG1tLCBhZGRyLCBwdGVwLCBzd3BfcHRlKTtcXG4gNDY4OlxcdFxcbiA0Njk6XFx0XFx0XFx0XFx0LypcXG4gNDcwOlxcdFxcdFxcdFxcdCAqIFRoaXMgaXMgbGlrZSByZWd1bGFyIHVubWFwOiB3ZSByZW1vdmUgdGhlIHJtYXAgYW5kXFxuIDQ3MTpcXHRcXHRcXHRcXHQgKiBkcm9wIHRoZSBmb2xpbyByZWZjb3VudC4gVGhlIGZvbGlvIHdvbid0IGJlIGZyZWVkLCBhc1xcbiA0NzI6XFx0XFx0XFx0XFx0ICogd2UgdG9vayBhIHJlZmVyZW5jZSBqdXN0IGFib3ZlLlxcbiA0NzM6XFx0XFx0XFx0XFx0ICovXFxuIDQ3NDpcXHRcXHRcXHRcXHRmb2xpb19yZW1vdmVfcm1hcF9wdGUoZm9saW8sIHBhZ2UsIHZtYSk7XFxuIDQ3NTpcXHRcXHRcXHRcXHRmb2xpb19wdXQoZm9saW8pO1xcbiA0NzY6XFx0XFxuIDQ3NzpcXHRcXHRcXHRcXHRpZiAocHRlX3ByZXNlbnQocHRlKSlcXG4gNDc4OlxcdFxcdFxcdFxcdFxcdHVubWFwcGVkKys7XFxuIDQ3OTpcXHRcXHRcXHR9IGVsc2Uge1xcbiA0ODA6XFx0XFx0XFx0XFx0Zm9saW9fcHV0KGZvbGlvKTtcXG4gNDgxOlxcdFxcdFxcdFxcdG1wZm4gPSAwO1xcbiA0ODI6XFx0XFx0XFx0fVxcbiA0ODM6XFx0XFxuIDQ4NDpcXHRuZXh0OlxcbiA0ODU6XFx0XFx0XFx0bWlncmF0ZS1cXHUwMDNlZHN0W21pZ3JhdGUtXFx1MDAzZW5wYWdlc10gPSAwO1xcbiA0ODY6XFx0XFx0XFx0bWlncmF0ZS1cXHUwMDNlc3JjW21pZ3JhdGUtXFx1MDAzZW5wYWdlcysrXSA9IG1wZm47XFxuIDQ4NzpcXHRcXHR9XFxuIDQ4ODpcXHRcXG4gNDg5OlxcdFxcdC8qIE9ubHkgZmx1c2ggdGhlIFRMQiBpZiB3ZSBhY3R1YWxseSBtb2RpZmllZCBhbnkgZW50cmllcyAqL1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wNlQxNjoxNjo0Ni42NjUwMTk4MzZaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0NjU0NjE0NTE1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkZpeGluZyBhIE5vbi1QcmVzZW50IFBURSBJc3N1ZSBpbiBNaWdyYXRlIERldmljZSoqXG5cbk9rYXksIHNvIHRoaXMgcGF0Y2ggaXMgYWRkcmVzc2luZyBhIHByZXR0eSBzcGVjaWZpYyBidWcg4oCTIHNvbWVvbmUncyBjYWxsaW5nIGBwdGVfcGZuKHB0ZSlgIG9yIGBwdGVfZGlydHkocHRlKWAgb24gYSBQVEUgdGhhdCBpc24ndCBhY3R1YWxseSBwcmVzZW50LiBUaGF0J3MgYSBjbGFzc2ljIG1lbW9yeSBtYW5hZ2VtZW50IHByb2JsZW0sIGFuZCBpdCdzIGdvb2QgdGhleSdyZSBjYXRjaGluZyBpdC4gRnVuY3Rpb25hbGx5LCB0aGlzIGNvZGUncyByZWxhdGVkIHRvIGBtaWdyYXRlX3ZtYV9jb2xsZWN0X3BtZGAsIHNvIGl0J3MgY2xlYXJseSBpbnZvbHZlZCBpbiBwYWdlIG1pZ3JhdGlvbiwgd2hpY2ggaXMgd2hlcmUgdGhpbmdzIGNhbiBnZXQgdHJpY2t5IHdpdGggcGFnZSB0YWJsZSBlbnRyaWVzLiBMZXQncyBzZWUuLi4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgd2hhdCBjb25maWd1cmF0aW9ucyBhcmUgcmVsZXZhbnQgdG8gdGhhdCBmaWxlLCBgbW0vbWlncmF0ZV9kZXZpY2UuY2AsIGJlY2F1c2UgdW5kZXJzdGFuZGluZyB0aGUgY29udGV4dCBvZiB0aGlzIGZpeCBpcyBnb2luZyB0byBiZSBjcnVjaWFsLiBJJ2xsIG5lZWQgdG8ga25vdyAqd2h5KiB0aGlzIHNjZW5hcmlvIGlzIGV2ZW4gaGFwcGVuaW5nIGluIHRoZSBmaXJzdCBwbGFjZSB0byB1bmRlcnN0YW5kIHRoZSByb290IGNhdXNlIGFuZCBlbnN1cmUgdGhlIGZpeCBpcyByb2J1c3QuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjM5MDIsIk91dHB1dFRva2VucyI6MjcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo3MCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA2VDE2OjE2OjUxLjMxOTYzNjQxMVoiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NTE5ODM4ODQsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibWlncmF0ZV9kZXZpY2Uub1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vTWFrZWZpbGU9OTk9b2JqLSQoQ09ORklHX05VTUEpICs9IG1lbW9yeS10aWVycy5vXFxubW0vTWFrZWZpbGU6MTAwOm9iai0kKENPTkZJR19ERVZJQ0VfTUlHUkFUSU9OKSArPSBtaWdyYXRlX2RldmljZS5vXFxubW0vTWFrZWZpbGUtMTAxLW9iai0kKENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRSkgKz0gaHVnZV9tZW1vcnkubyBraHVnZXBhZ2VkLm9cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDZUMTY6MTY6NTEuNzcxNjI5ODM1WiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDIxMTY0NDQ1NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBmb3IgYW4gZXhwZXJ0IGxpa2UgbXlzZWxmOlxuXG4qKkluaXRpYWwgQ29uZmlndXJhdGlvbiBBc3Nlc3NtZW50KipcblxuQWxyaWdodCwgc28gdGhlIHRhc2sgYXQgaGFuZCBoaW5nZXMgb24gYENPTkZJR19ERVZJQ0VfTUlHUkFUSU9OYC4gVGhhdCdzIHRoZSBjb3JlIHJlcXVpcmVtZW50LCBJIGdldCB0aGF0LiBCdXQsIG5hdHVyYWxseSwgYmVmb3JlIGRpdmluZyBpbiwgSSBuZWVkIHRvIHRha2UgYSB3aWRlciB2aWV3LiBUaGlzIGlzbid0IGFuIGlzb2xhdGVkIHNldHRpbmc7IHRoZXNlIGNvbmZpZ3VyYXRpb25zIGFyZSBvZnRlbiBpbnRlcnR3aW5lZC4gU28sIGxldCdzIHRha2UgYSBxdWljayBsb29rIGFyb3VuZC4gV2hhdCBvdGhlciByZWxhdGVkIGNvbmZpZ3VyYXRpb25zIG1pZ2h0IGJlIGx1cmtpbmcgdGhhdCB3b3VsZCBpbmZsdWVuY2UgdGhpcyBzZXR1cCwgb3IgdGhhdCBgQ09ORklHX0RFVklDRV9NSUdSQVRJT05gIG1pZ2h0IGFmZmVjdD8gR290dGEgYnVpbGQgdGhlIGZ1bGwgcGljdHVyZSBiZWZvcmUgSSBzdGFydCBtYWtpbmcgYW55IGNoYW5nZXMsIEkgZG9uJ3Qgd2FudCB0byBtYWtlIHRoaW5ncyB3b3JzZSB3aXRoIGFuIGlzb2xhdGVkIGZpeCFcblxuXG4iLCJJbnB1dFRva2VucyI6NDI4MywiT3V0cHV0VG9rZW5zIjoyOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA2VDE2OjE2OjU1Ljk4MzI3NTgwMloiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2MDc3ODcxNSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgREVWSUNFX01JR1JBVElPTlwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vS2NvbmZpZz02OTY9Y29uZmlnIE1JR1JBVElPTlxcbi0tXFxubW0vS2NvbmZpZy02OTktXFxubW0vS2NvbmZpZzo3MDA6Y29uZmlnIERFVklDRV9NSUdSQVRJT05cXG5tbS9LY29uZmlnLTcwMS1cXHRkZWZfYm9vbCBNSUdSQVRJT04gXFx1MDAyNlxcdTAwMjYgWk9ORV9ERVZJQ0VcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDZUMTY6MTY6NTYuMDQ0MDU5MDk3WiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzkwMTI0MDE1NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRoaXMgbG9naWMsIGFzIHRob3VnaCBpdCB3ZXJlIG15IG93biB0aG91Z2h0IHByb2Nlc3M6XG5cbioqRGl2aW5nIGludG8gRGV2aWNlIE1pZ3JhdGlvbiBSZXF1aXJlbWVudHMqKlxuXG5BbHJpZ2h0LCBsZXQncyBicmVhayB0aGlzIGRvd24uIFRoZSBkZWZpbml0aW9uIG9mIGBERVZJQ0VfTUlHUkFUSU9OYCBoaW5nZXMgb24gdHdvIG90aGVyIGNvbXBvbmVudHM6IGBNSUdSQVRJT05gIGFuZCBgWk9ORV9ERVZJQ0VgLiBTcGVjaWZpY2FsbHksIGBERVZJQ0VfTUlHUkFUSU9OYCBpcyB0cnVlIGlmIGFuZCBvbmx5IGlmIGJvdGggYE1JR1JBVElPTmAgKmFuZCogYFpPTkVfREVWSUNFYCBhcmUgdHJ1ZSAoaXQncyBhbiBBTkQgY29uZGl0aW9uLCBJIHNlZSkuICBUaGVyZWZvcmUsIHRvIGVuYWJsZSBkZXZpY2UgbWlncmF0aW9uLCB3ZSBhYnNvbHV0ZWx5ICptdXN0KiBoYXZlIGJvdGggYENPTkZJR19NSUdSQVRJT05gIGFuZCBgQ09ORklHX1pPTkVfREVWSUNFYCBlbmFibGVkIGluIHRoZSBjb25maWd1cmF0aW9uLiBUaGF0IG1ha2VzIHBlcmZlY3Qgc2Vuc2UuIE5vdywgbGV0IG1lIGp1c3QgZG91YmxlLWNoZWNrIHRoYXQgYFpPTkVfREVWSUNFYCBpcyBzZXQgY29ycmVjdGx5LiBJJ2xsIG5lZWQgdG8gZGlnIGludG8gdGhlIGRlZmluaXRpb24gb2YgYFpPTkVfREVWSUNFYCB0byB2ZXJpZnkuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQ1NTksIk91dHB1dFRva2VucyI6MjYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0OSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0wNlQxNjoxNjo1OS45NDUzMDE0ODFaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE1OTgxNDgyNCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgWk9ORV9ERVZJQ0VcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL0tjb25maWc9MTIzMT1jb25maWcgWk9ORV9ETUEzMlxcbi0tXFxubW0vS2NvbmZpZy0xMjM1LVxcbm1tL0tjb25maWc6MTIzNjpjb25maWcgWk9ORV9ERVZJQ0VcXG5tbS9LY29uZmlnLTEyMzctXFx0Ym9vbCBcXFwiRGV2aWNlIG1lbW9yeSAocG1lbSwgSE1NLCBldGMuLi4pIGhvdHBsdWcgc3VwcG9ydFxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDZUMTY6MTc6MDAuMTA1MTI0MzQ2WiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMzNjkyNzk4MDMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIEkgd2VyZSBjb25zaWRlcmluZyB0aGlzIGNvZGU6XG5cbioqQW5hbHl6aW5nIEJvb2xlYW4gU3RhdGVzKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBjb2RlIGFuZCB0aGUgZmlyc3QgdGhpbmcgdGhhdCBqdW1wcyBvdXQgaXMgYFpPTkVfREVWSUNFYC4gUmlnaHQsIHRoYXQncyBhIGJvb2xlYW4sIG1ha2VzIHNlbnNlLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcywgXCJXaGF0J3MgdGhlIGNvbnRleHQ/IFdoYXQgaXMgdGhpcyBgWk9ORV9ERVZJQ0VgIGZsYWcgdXNlZCBmb3I/XCIgSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoYXQgYm9vbGVhbiBzdGF0ZSBpbmZsdWVuY2VzIHRoZSBvdmVyYWxsIHN5c3RlbSBiZWhhdmlvci5cblxuTm93LCB3aGVyZSB3YXMgST8gUmlnaHQsIGBNSUdSQVRJT05gLiBMZXQgbWUgZGl2ZSBpbnRvIGhvdyBtaWdyYXRpb24gaXMgaGFuZGxlZCBpbiB0aGlzIGNvZGUuIFdoYXQncyB0aGUgcmVsYXRpb25zaGlwIGJldHdlZW4gdGhlIGBaT05FX0RFVklDRWAgZmxhZyBhbmQgdGhlIG1pZ3JhdGlvbiBwcm9jZXNzPyBBcmUgdGhleSBpbmRlcGVuZGVudCBjb25jZXJucyBvciBpcyBgWk9ORV9ERVZJQ0VgIHVzZWQgdG8gdG9nZ2xlIHRoZSBlZmZlY3RzIG9mIGBNSUdSQVRJT05gPyBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgZGVwZW5kZW5jaWVzIGFuZCB0aGUgb3ZlcmFsbCBhcmNoaXRlY3R1cmUuIEkgc2hvdWxkIGludmVzdGlnYXRlIGhvdyB0aGVzZSB0d28gdmFyaWFibGVzIGludGVyYWN0IHdpdGhpbiB0aGUgbGFyZ2VyIHN5c3RlbS5cblxuXG4iLCJJbnB1dFRva2VucyI6NDkwNSwiT3V0cHV0VG9rZW5zIjoyNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA2VDE2OjE3OjAzLjQ3NDQwNzEyOVoiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDM1MDgyMjAxLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBNSUdSQVRJT05cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL0tjb25maWc9Njg1PWNvbmZpZyBOVU1BX01JR1JBVElPTlxcbi0tXFxubW0vS2NvbmZpZy02OTUtXFxubW0vS2NvbmZpZzo2OTY6Y29uZmlnIE1JR1JBVElPTlxcbm1tL0tjb25maWctNjk3LVxcdGJvb2xcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDZUMTY6MTc6MDMuOTA5NDkzNjRaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTcyMzI4NzU0MDksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgbXkgb3duOlxuXG4qKkFuYWx5emluZyBNaWdyYXRpb24gTG9naWMqKlxuXG5BbHJpZ2h0LCBzbyBgTUlHUkFUSU9OYCBpcyBkZWZpbmVkIGFzIGEgYm9vbGVhbiDigJMgbWFrZXMgc2Vuc2UuIE5vdyBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGVyZSB0aGlzIGlzIGJlaW5nIHVzZWQgYW5kIGhvdyBpdCBpbmZsdWVuY2VzIHRoZSBmbG93LiBUaW1lIHRvIGRpZyBpbnRvIHRoZSBjYWxsIHNpdGVzIG9mIGBtaWdyYXRlX3ZtYV9jb2xsZWN0X3BtZGAuIFRoaXMgd2lsbCBnaXZlIG1lIGEgY2xlYXIgcGljdHVyZSBvZiBob3cgdGhlIG1pZ3JhdGlvbiBmbGFnIGludGVyYWN0cyB3aXRoIHRoZSBwYWdlIHRhYmxlIG1hbmlwdWxhdGlvbnMgYW5kIHBoeXNpY2FsIG1lbW9yeSByZW1hcHBpbmcuIEkgZXhwZWN0IHRvIHNlZSBpdHMgdXNlIGRpcmVjdGx5IGluIHRoZSBjb3JlIG1pZ3JhdGlvbiByb3V0aW5lcywgYnV0IGtub3dpbmcgdGhlIGltbWVkaWF0ZSBjYWxsZXJzIHdpbGwgc2hlZCBsaWdodCBvbiB0aGUgY29udGV4dCBhbmQgYW55IGNvbmRpdGlvbmFsIGRlcGVuZGVuY2llcyB0aGF0IG5lZWQgdG8gYmUgY29uc2lkZXJlZC4gTGV0J3Mgc2VlIHdoYXQgd2UgdW5jb3Zlci5cblxuXG4iLCJJbnB1dFRva2VucyI6NTIwNCwiT3V0cHV0VG9rZW5zIjozMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA2VDE2OjE3OjIxLjE0MjM3MjA5OVoiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzE0MjAwNjEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibWlncmF0ZV92bWFfY29sbGVjdF9wbWRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL21pZ3JhdGVfZGV2aWNlLmM9MTM3PXN0YXRpYyBpbnQgbWlncmF0ZV92bWFfY29sbGVjdF9odWdlX3BtZChwbWRfdCAqcG1kcCwgdW5zaWduZWQgbG9uZyBzdGFydCxcXG4tLVxcbm1tL21pZ3JhdGVfZGV2aWNlLmMtMjQ0LVxcbm1tL21pZ3JhdGVfZGV2aWNlLmM6MjQ1OnN0YXRpYyBpbnQgbWlncmF0ZV92bWFfY29sbGVjdF9wbWQocG1kX3QgKnBtZHAsXFxubW0vbWlncmF0ZV9kZXZpY2UuYy0yNDYtXFx0XFx0XFx0XFx0ICAgdW5zaWduZWQgbG9uZyBzdGFydCxcXG4tLVxcbm1tL21pZ3JhdGVfZGV2aWNlLmM9NDk5PXN0YXRpYyBjb25zdCBzdHJ1Y3QgbW1fd2Fsa19vcHMgbWlncmF0ZV92bWFfd2Fsa19vcHMgPSB7XFxubW0vbWlncmF0ZV9kZXZpY2UuYzo1MDA6XFx0LnBtZF9lbnRyeVxcdFxcdD0gbWlncmF0ZV92bWFfY29sbGVjdF9wbWQsXFxubW0vbWlncmF0ZV9kZXZpY2UuYy01MDEtXFx0LnB0ZV9ob2xlXFx0XFx0PSBtaWdyYXRlX3ZtYV9jb2xsZWN0X2hvbGUsXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA2VDE2OjE3OjIxLjIxMzc5NzI3WiIsIlNlcSI6MTUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMyMDA4OTgxMDMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgZnJvbSBteSBwZXJzcGVjdGl2ZTpcblxuKipJbnZlc3RpZ2F0aW5nIHRoZSBVc2FnZSBvZiBgbWlncmF0ZV92bWFfd2Fsa19vcHNgKipcblxuSG1tLCBzbyBgbWlncmF0ZV92bWFfd2Fsa19vcHNgIGlzIHRoZSBrZXkgaGVyZS4gUmlnaHQuIEl0J3MgdXNlZCBpbiBzb21ldGhpbmcgY2FsbGVkIGBtaWdyYXRlX3ZtYV93YWxrX29wc2AuIFRoZSBxdWVzdGlvbiBub3cgYmVjb21lczogd2hlcmUgaXMgKnRoYXQqIHVzZWQ/IFRoYXQncyB0aGUgbmV4dCBsb2dpY2FsIHN0ZXAgaW4gdW5kZXJzdGFuZGluZyB0aGUgY29udGV4dCBhbmQgcHVycG9zZSBvZiB0aGlzIHBhcnRpY3VsYXIgY29tcG9uZW50LiBOZWVkIHRvIHRyYWNlIGl0cyBpbnZvY2F0aW9ucyB0byBnZXQgdGhlIGJyb2FkZXIgcGljdHVyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6NTYxNywiT3V0cHV0VG9rZW5zIjozMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA2VDE2OjE3OjI0LjQxNDY5Nzc1M1oiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzEzNDg4NzEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibWlncmF0ZV92bWFfd2Fsa19vcHNcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL21pZ3JhdGVfZGV2aWNlLmM9MjQ1PXN0YXRpYyBpbnQgbWlncmF0ZV92bWFfY29sbGVjdF9wbWQocG1kX3QgKnBtZHAsXFxuLS1cXG5tbS9taWdyYXRlX2RldmljZS5jLTQ5OC1cXG5tbS9taWdyYXRlX2RldmljZS5jOjQ5OTpzdGF0aWMgY29uc3Qgc3RydWN0IG1tX3dhbGtfb3BzIG1pZ3JhdGVfdm1hX3dhbGtfb3BzID0ge1xcbm1tL21pZ3JhdGVfZGV2aWNlLmMtNTAwLVxcdC5wbWRfZW50cnlcXHRcXHQ9IG1pZ3JhdGVfdm1hX2NvbGxlY3RfcG1kLFxcbi0tXFxubW0vbWlncmF0ZV9kZXZpY2UuYz01MTM9c3RhdGljIHZvaWQgbWlncmF0ZV92bWFfY29sbGVjdChzdHJ1Y3QgbWlncmF0ZV92bWEgKm1pZ3JhdGUpXFxuLS1cXG5tbS9taWdyYXRlX2RldmljZS5jLTUyNy1cXHR3YWxrX3BhZ2VfcmFuZ2Vfdm1hKG1pZ3JhdGUtXFx1MDAzZXZtYSwgbWlncmF0ZS1cXHUwMDNlc3RhcnQsIG1pZ3JhdGUtXFx1MDAzZWVuZCxcXG5tbS9taWdyYXRlX2RldmljZS5jOjUyODpcXHRcXHRcXHRcXHUwMDI2bWlncmF0ZV92bWFfd2Fsa19vcHMsIG1pZ3JhdGUpO1xcbm1tL21pZ3JhdGVfZGV2aWNlLmMtNTI5LVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wNlQxNjoxNzoyNC40ODYwNTIyMjNaIiwiU2VxIjoxNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTgyNTk4MDQwNTcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0IHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgYW5kIHdyaXR0ZW4gaW4gdGhlIGZpcnN0IHBlcnNvbjpcblxuKipNeSBNaWdyYXRpb24gUGxhbm5pbmc6IGBtaWdyYXRlX3ZtYV9jb2xsZWN0YCdzIFJvbGUqKlxuXG5BbHJpZ2h0LCBJJ20gdGhpbmtpbmcgYWJvdXQgdGhlIG1pZ3JhdGlvbiBwcm9jZXNzLCBzcGVjaWZpY2FsbHkgd2l0aGluIHRoZSB2aXJ0dWFsIG1lbW9yeSBhcmVhIChWTUEpIGNvbnRleHQuIEkndmUgZ290IGBtaWdyYXRlX3ZtYV9zZXR1cGAga2lja2luZyB0aGluZ3Mgb2ZmLCB3aGljaCBpcyB0aGUgbG9naWNhbCBlbnRyeSBwb2ludCBmb3IgcHJlcGFyaW5nIGEgVk1BIGZvciBtaWdyYXRpb24uIE5vdywgSSdtIHRyYWNpbmcgdGhlIGV4ZWN1dGlvbiBwYXRoLCBhbmQgSSBzZWUgYG1pZ3JhdGVfdm1hX2NvbGxlY3RgIGdldHRpbmcgY2FsbGVkIGZyb20gd2l0aGluIGBtaWdyYXRlX3ZtYV9zZXR1cGAuIFRoYXQgaW1tZWRpYXRlbHkgZmxhZ3MgYSBwYXJ0aWN1bGFyIGZ1bmN0aW9uIGZvciBtZS4gSXQncyBjb2xsZWN0aW5nIGluZm9ybWF0aW9uOiBnYXRoZXIgdGhlIHJlbGV2YW50IGRhdGEgb3IgZ2F0aGVyIHRoaW5ncyB0aGF0IHdpbGwgYmUgdXNlZCBkdXJpbmcgdGhlIG1lbW9yeSBtb3ZlLiBUaGlzIHN0cm9uZ2x5IHN1Z2dlc3RzIHRoYXQgaXQncyB0aGUgcGhhc2Ugd2hlcmUgd2UncmUgZ29pbmcgdG8gZXhhbWluZSBhbmQgcG90ZW50aWFsbHkgaW52ZW50b3J5IHRoZSBWTUEncyBjb250ZW50cyBvciBtZXRhZGF0YS4gVGhpbmsgb2YgaXQgYXMgcHJlcGFyaW5nIHRoZSBcIm1hbmlmZXN0XCIgb3IgYSBkaXJlY3RvcnkgbGlzdGluZyBvZiB3aGF0IG5lZWRzIHRvIG1vdmUuIFRoaXMgY291bGQgaW52b2x2ZSBpZGVudGlmeWluZyBkaXJ0eSBwYWdlcywgbWFwcGluZyBpbmZvcm1hdGlvbiwgYWNjZXNzIHBlcm1pc3Npb25zLCBvciBhbnl0aGluZyBlbHNlIGVzc2VudGlhbCBmb3IgYSBjb21wbGV0ZSBhbmQgY29uc2lzdGVudCBtaWdyYXRpb24uIEtub3dpbmcgdGhpcyBpcyBjcml0aWNhbCBiZWNhdXNlIGl0IHRlbGxzIG1lIHdoZXJlIEkgbmVlZCB0byBsb29rIGZvciBlZmZpY2llbmN5IGdhaW5zIG9yIHBvdGVudGlhbCBmYWlsdXJlIHBvaW50cyBsYXRlciBkb3duIHRoZSBwcm9jZXNzLiBJJ2xsIG5lZWQgdG8gZHJpbGwgZG93biBpbnRvIHRoZSBpbXBsZW1lbnRhdGlvbiBvZiBgbWlncmF0ZV92bWFfY29sbGVjdGAgdG8gdW5kZXJzdGFuZCBleGFjdGx5ICp3aGF0KiBpdCdzIGNvbGxlY3RpbmcgYW5kICpob3cqIGl0J3MgZG9pbmcgaXQuIEFueSBwb3RlbnRpYWwgYm90dGxlbmVja3Mgd2lsbCBzaG93IHVwIGhlcmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjYwMjcsIk91dHB1dFRva2VucyI6MjgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxOSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0wNlQxNjoxNzo0Mi43NDU4NTg3NVoiLCJTZXEiOjE4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDM1NTMyNDIxLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm1pZ3JhdGVfdm1hX2NvbGxlY3RcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL21pZ3JhdGVfZGV2aWNlLmMtMjAtXFxubW0vbWlncmF0ZV9kZXZpY2UuYzoyMTpzdGF0aWMgaW50IG1pZ3JhdGVfdm1hX2NvbGxlY3Rfc2tpcCh1bnNpZ25lZCBsb25nIHN0YXJ0LFxcbm1tL21pZ3JhdGVfZGV2aWNlLmMtMjItXFx0XFx0XFx0XFx0ICAgIHVuc2lnbmVkIGxvbmcgZW5kLFxcbi0tXFxubW0vbWlncmF0ZV9kZXZpY2UuYy0zNS1cXG5tbS9taWdyYXRlX2RldmljZS5jOjM2OnN0YXRpYyBpbnQgbWlncmF0ZV92bWFfY29sbGVjdF9ob2xlKHVuc2lnbmVkIGxvbmcgc3RhcnQsXFxubW0vbWlncmF0ZV9kZXZpY2UuYy0zNy1cXHRcXHRcXHRcXHQgICAgdW5zaWduZWQgbG9uZyBlbmQsXFxuLS1cXG5tbS9taWdyYXRlX2RldmljZS5jLTQ1LVxcdGlmICghdm1hX2lzX2Fub255bW91cyh3YWxrLVxcdTAwM2V2bWEpKVxcbm1tL21pZ3JhdGVfZGV2aWNlLmM6NDY6XFx0XFx0cmV0dXJuIG1pZ3JhdGVfdm1hX2NvbGxlY3Rfc2tpcChzdGFydCwgZW5kLCB3YWxrKTtcXG5tbS9taWdyYXRlX2RldmljZS5jLTQ3LVxcbi0tXFxubW0vbWlncmF0ZV9kZXZpY2UuYy02MS1cXHRcXHQgKi9cXG5tbS9taWdyYXRlX2RldmljZS5jOjYyOlxcdFxcdHJldHVybiBtaWdyYXRlX3ZtYV9jb2xsZWN0X3NraXAoc3RhcnQgKyBQQUdFX1NJWkUsIGVuZCwgd2Fsayk7XFxubW0vbWlncmF0ZV9kZXZpY2UuYy02My1cXHR9XFxuLS1cXG5tbS9taWdyYXRlX2RldmljZS5jPTg1PXN0YXRpYyBpbnQgbWlncmF0ZV92bWFfc3BsaXRfZm9saW8oc3RydWN0IGZvbGlvICpmb2xpbyxcXG4tLVxcbm1tL21pZ3JhdGVfZGV2aWNlLmMtMTI0LVxcbm1tL21pZ3JhdGVfZGV2aWNlLmM6MTI1Oi8qKiBtaWdyYXRlX3ZtYV9jb2xsZWN0X2h1Z2VfcG1kIC0gY29sbGVjdCBUSFAgcGFnZXMgd2l0aG91dCBzcGxpdHRpbmcgdGhlXFxubW0vbWlncmF0ZV9kZXZpY2UuYy0xMjYtICogZm9saW8gZm9yIGRldmljZSBwcml2YXRlIHBhZ2VzLlxcbi0tXFxubW0vbWlncmF0ZV9kZXZpY2UuYy0xMzYtICovXFxubW0vbWlncmF0ZV9kZXZpY2UuYzoxMzc6c3RhdGljIGludCBtaWdyYXRlX3ZtYV9jb2xsZWN0X2h1Z2VfcG1kKHBtZF90ICpwbWRwLCB1bnNpZ25lZCBsb25nIHN0YXJ0LFxcbm1tL21pZ3JhdGVfZGV2aWNlLmMtMTM4LVxcdFxcdFxcdFxcdFxcdHVuc2lnbmVkIGxvbmcgZW5kLCBzdHJ1Y3QgbW1fd2FsayAqd2FsayxcXG4tLVxcbm1tL21pZ3JhdGVfZGV2aWNlLmMtMTUwLVxcdFxcdHNwaW5fdW5sb2NrKHB0bCk7XFxubW0vbWlncmF0ZV9kZXZpY2UuYzoxNTE6XFx0XFx0cmV0dXJuIG1pZ3JhdGVfdm1hX2NvbGxlY3RfaG9sZShzdGFydCwgZW5kLCAtMSwgd2Fsayk7XFxubW0vbWlncmF0ZV9kZXZpY2UuYy0xNTItXFx0fVxcbi0tXFxubW0vbWlncmF0ZV9kZXZpY2UuYy0xNTYtXFx0XFx0XFx0c3Bpbl91bmxvY2socHRsKTtcXG5tbS9taWdyYXRlX2RldmljZS5jOjE1NzpcXHRcXHRcXHRyZXR1cm4gbWlncmF0ZV92bWFfY29sbGVjdF9za2lwKHN0YXJ0LCBlbmQsIHdhbGspO1xcbm1tL21pZ3JhdGVfZGV2aWNlLmMtMTU4LVxcdFxcdH1cXG4tLVxcbm1tL21pZ3JhdGVfZGV2aWNlLmMtMTYyLVxcdFxcdFxcdHNwaW5fdW5sb2NrKHB0bCk7XFxubW0vbWlncmF0ZV9kZXZpY2UuYzoxNjM6XFx0XFx0XFx0cmV0dXJuIG1pZ3JhdGVfdm1hX2NvbGxlY3RfaG9sZShzdGFydCwgZW5kLCAtMSwgd2Fsayk7XFxubW0vbWlncmF0ZV9kZXZpY2UuYy0xNjQtXFx0XFx0fVxcbi0tXFxubW0vbWlncmF0ZV9kZXZpY2UuYy0xNzItXFx0XFx0XFx0c3Bpbl91bmxvY2socHRsKTtcXG5tbS9taWdyYXRlX2RldmljZS5jOjE3MzpcXHRcXHRcXHRyZXR1cm4gbWlncmF0ZV92bWFfY29sbGVjdF9za2lwKHN0YXJ0LCBlbmQsIHdhbGspO1xcbm1tL21pZ3JhdGVfZGV2aWNlLmMtMTc0LVxcdFxcdH1cXG4tLVxcbm1tL21pZ3JhdGVfZGV2aWNlLmMtMTc4LVxcdFxcdFxcdHNwaW5fdW5sb2NrKHB0bCk7XFxubW0vbWlncmF0ZV9kZXZpY2UuYzoxNzk6XFx0XFx0XFx0cmV0dXJuIG1pZ3JhdGVfdm1hX2NvbGxlY3Rfc2tpcChzdGFydCwgZW5kLCB3YWxrKTtcXG5tbS9taWdyYXRlX2RldmljZS5jLTE4MC1cXHRcXHR9XFxuLS1cXG5tbS9taWdyYXRlX2RldmljZS5jLTE5Mi1cXHRcXHRmb2xpb19wdXQoZm9saW8pO1xcbm1tL21pZ3JhdGVfZGV2aWNlLmM6MTkzOlxcdFxcdHJldHVybiBtaWdyYXRlX3ZtYV9jb2xsZWN0X3NraXAoc3RhcnQsIGVuZCwgd2Fsayk7XFxubW0vbWlncmF0ZV9kZXZpY2UuYy0xOTQtXFx0fVxcbi0tXFxubW0vbWlncmF0ZV9kZXZpY2UuYy0yMjItXFx0XFx0fVxcbm1tL21pZ3JhdGVfZGV2aWNlLmM6MjIzOlxcdFxcdG1pZ3JhdGVfdm1hX2NvbGxlY3Rfc2tpcChzdGFydCArIFBBR0VfU0laRSwgZW5kLCB3YWxrKTtcXG5tbS9taWdyYXRlX2RldmljZS5jLTIyNC1cXHRcXHRzcGluX3VubG9jayhwdGwpO1xcbi0tXFxubW0vbWlncmF0ZV9kZXZpY2UuYy0yMzYtXFx0aWYgKHJldClcXG5tbS9taWdyYXRlX2RldmljZS5jOjIzNzpcXHRcXHRyZXR1cm4gbWlncmF0ZV92bWFfY29sbGVjdF9za2lwKHN0YXJ0LCBlbmQsIHdhbGspO1xcbm1tL21pZ3JhdGVfZGV2aWNlLmMtMjM4LVxcdGlmIChwbWRfbm9uZShwbWRwX2dldF9sb2NrbGVzcyhwbWRwKSkpXFxubW0vbWlncmF0ZV9kZXZpY2UuYzoyMzk6XFx0XFx0cmV0dXJuIG1pZ3JhdGVfdm1hX2NvbGxlY3RfaG9sZShzdGFydCwgZW5kLCAtMSwgd2Fsayk7XFxubW0vbWlncmF0ZV9kZXZpY2UuYy0yNDAtXFxuLS1cXG5tbS9taWdyYXRlX2RldmljZS5jLTI0NC1cXG5tbS9taWdyYXRlX2RldmljZS5jOjI0NTpzdGF0aWMgaW50IG1pZ3JhdGVfdm1hX2NvbGxlY3RfcG1kKHBtZF90ICpwbWRwLFxcbm1tL21pZ3JhdGVfZGV2aWNlLmMtMjQ2LVxcdFxcdFxcdFxcdCAgIHVuc2lnbmVkIGxvbmcgc3RhcnQsXFxuLS1cXG5tbS9taWdyYXRlX2RldmljZS5jLTI2MC1cXHRpZiAocG1kX3RyYW5zX2h1Z2UoKnBtZHApIHx8ICFwbWRfcHJlc2VudCgqcG1kcCkpIHtcXG5tbS9taWdyYXRlX2RldmljZS5jOjI2MTpcXHRcXHRpbnQgcmV0ID0gbWlncmF0ZV92bWFfY29sbGVjdF9odWdlX3BtZChwbWRwLCBzdGFydCwgZW5kLCB3YWxrLCBmYXVsdF9mb2xpbyk7XFxubW0vbWlncmF0ZV9kZXZpY2UuYy0yNjItXFxuLS1cXG5tbS9taWdyYXRlX2RldmljZS5jLTMyNS1cXG5tbS9taWdyYXRlX2RldmljZS5jOjMyNjpcXHRcXHRcXHRcXHRcXHRyZXR1cm4gbWlncmF0ZV92bWFfY29sbGVjdF9za2lwKGFkZHIsIGVuZCwgd2Fsayk7XFxubW0vbWlncmF0ZV9kZXZpY2UuYy0zMjctXFx0XFx0XFx0XFx0fVxcbi0tXFxubW0vbWlncmF0ZV9kZXZpY2UuYy0zNzEtXFxubW0vbWlncmF0ZV9kZXZpY2UuYzozNzI6XFx0XFx0XFx0XFx0XFx0cmV0dXJuIG1pZ3JhdGVfdm1hX2NvbGxlY3Rfc2tpcChhZGRyLCBlbmQsIHdhbGspO1xcbm1tL21pZ3JhdGVfZGV2aWNlLmMtMzczLVxcdFxcdFxcdFxcdH1cXG4tLVxcbm1tL21pZ3JhdGVfZGV2aWNlLmM9NDk5PXN0YXRpYyBjb25zdCBzdHJ1Y3QgbW1fd2Fsa19vcHMgbWlncmF0ZV92bWFfd2Fsa19vcHMgPSB7XFxubW0vbWlncmF0ZV9kZXZpY2UuYzo1MDA6XFx0LnBtZF9lbnRyeVxcdFxcdD0gbWlncmF0ZV92bWFfY29sbGVjdF9wbWQsXFxubW0vbWlncmF0ZV9kZXZpY2UuYzo1MDE6XFx0LnB0ZV9ob2xlXFx0XFx0PSBtaWdyYXRlX3ZtYV9jb2xsZWN0X2hvbGUsXFxubW0vbWlncmF0ZV9kZXZpY2UuYy01MDItXFx0LndhbGtfbG9ja1xcdFxcdD0gUEdXQUxLX1JETE9DSyxcXG4tLVxcbm1tL21pZ3JhdGVfZGV2aWNlLmMtNTA1LS8qXFxubW0vbWlncmF0ZV9kZXZpY2UuYzo1MDY6ICogbWlncmF0ZV92bWFfY29sbGVjdCgpIC0gY29sbGVjdCBwYWdlcyBvdmVyIGEgcmFuZ2Ugb2YgdmlydHVhbCBhZGRyZXNzZXNcXG5tbS9taWdyYXRlX2RldmljZS5jLTUwNy0gKiBAbWlncmF0ZTogbWlncmF0ZSBzdHJ1Y3QgY29udGFpbmluZyBhbGwgbWlncmF0aW9uIGluZm9ybWF0aW9uXFxuLS1cXG5tbS9taWdyYXRlX2RldmljZS5jLTUxMi0gKi9cXG5tbS9taWdyYXRlX2RldmljZS5jOjUxMzpzdGF0aWMgdm9pZCBtaWdyYXRlX3ZtYV9jb2xsZWN0KHN0cnVjdCBtaWdyYXRlX3ZtYSAqbWlncmF0ZSlcXG5tbS9taWdyYXRlX2RldmljZS5jLTUxNC17XFxuLS1cXG5tbS9taWdyYXRlX2RldmljZS5jPTU0Mj1zdGF0aWMgYm9vbCBtaWdyYXRlX3ZtYV9jaGVja19wYWdlKHN0cnVjdCBwYWdlICpwYWdlLCBzdHJ1Y3QgcGFnZSAqZmF1bHRfcGFnZSlcXG4tLVxcbm1tL21pZ3JhdGVfZGV2aWNlLmMtNTQ3LVxcdCAqIE9uZSBleHRyYSByZWYgYmVjYXVzZSBjYWxsZXIgaG9sZHMgYW4gZXh0cmEgcmVmZXJlbmNlLCBlaXRoZXIgZnJvbVxcbm1tL21pZ3JhdGVfZGV2aWNlLmM6NTQ4OlxcdCAqIGZvbGlvX2lzb2xhdGVfbHJ1KCkgZm9yIGEgcmVndWxhciBmb2xpbywgb3IgbWlncmF0ZV92bWFfY29sbGVjdCgpIGZvclxcbm1tL21pZ3JhdGVfZGV2aWNlLmMtNTQ5LVxcdCAqIGEgZGV2aWNlIGZvbGlvLlxcbi0tXFxubW0vbWlncmF0ZV9kZXZpY2UuYz03NDA9aW50IG1pZ3JhdGVfdm1hX3NldHVwKHN0cnVjdCBtaWdyYXRlX3ZtYSAqYXJncylcXG4tLVxcbm1tL21pZ3JhdGVfZGV2aWNlLmMtNzY2LVxcbm1tL21pZ3JhdGVfZGV2aWNlLmM6NzY3OlxcdG1pZ3JhdGVfdm1hX2NvbGxlY3QoYXJncyk7XFxubW0vbWlncmF0ZV9kZXZpY2UuYy03NjgtXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA2VDE2OjE3OjQzLjE4MTM5NzYzMVoiLCJTZXEiOjE5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNDkyOTQ1NjUzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aGUgdGhvdWdodCBwcm9jZXNzLCBhcyByZXF1ZXN0ZWQ6XG5cbioqRGVjb25zdHJ1Y3RpbmcgYG1pZ3JhdGVfdm1hX3NldHVwYCoqXG5cbk9rYXksIHNvIGBtaWdyYXRlX3ZtYV9zZXR1cGAgaXMgZXhwb3J0ZWQuIFRoYXQncyBpbnRlcmVzdGluZzsgaXQncyBkZXNpZ25lZCB0byBiZSB1c2VkIGV4dGVybmFsbHksIG1lYW5pbmcgb3RoZXIgcGFydHMgb2YgdGhlIHN5c3RlbSBhcmUgcmVseWluZyBvbiBpdC4gTXkgZmlyc3QgaW5zdGluY3QsIGdpdmVuIG15IGV4cGVyaWVuY2Ugd2l0aCBtZW1vcnkgbWFuYWdlbWVudCwgaXMgdG8gZmlndXJlIG91dCB0aGUgdXNlIGNhc2VzLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgY29udGV4dHMgaW4gd2hpY2ggdGhpcyBmdW5jdGlvbiBpcyBpbnZva2VkLiBXaG8ncyBjYWxsaW5nIGl0PyBXaGF0IGFyZSB0aGV5IHRyeWluZyB0byBhY2hpZXZlPyBLbm93aW5nIHRoZSBjYWxsaW5nIHNpdGVzIGlzIGNydWNpYWwgdG8gdW5kZXJzdGFuZGluZyB0aGUgaW50ZW50IGFuZCBwb3RlbnRpYWwgaW1wYWN0IG9mIHRoaXMgcGllY2Ugb2YgY29kZS4gVGltZSB0byBkaWcgaW50byB0aGUgY2FsbCBncmFwaCBhbmQgc2VlIHdobydzIGludGVyZXN0ZWQgaW4gc2V0dGluZyB1cCB2aXJ0dWFsIG1lbW9yeSBhcmVhcyBmb3IgbWlncmF0aW9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjo4MTY0LCJPdXRwdXRUb2tlbnMiOjI2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDZUMTY6MTc6NDYuNjc0MzQ1NzA0WiIsIlNlcSI6MjAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMjk3NTM5Nzc0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm1pZ3JhdGVfdm1hX3NldHVwXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIlwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJEb2N1bWVudGF0aW9uL21tL2htbS5yc3Q9MjY0PXVzZSBoYXJkd2FyZSBETUEgb3IgZGV2aWNlIHNwZWNpZmljIGxvYWQvc3RvcmUgaW5zdHJ1Y3Rpb25zIHRvIG1pZ3JhdGUgZGF0YS5cXG5Eb2N1bWVudGF0aW9uL21tL2htbS5yc3Q6MjY1OlRoZSBtaWdyYXRlX3ZtYV9zZXR1cCgpLCBtaWdyYXRlX3ZtYV9wYWdlcygpLCBhbmQgbWlncmF0ZV92bWFfZmluYWxpemUoKVxcbkRvY3VtZW50YXRpb24vbW0vaG1tLnJzdC0yNjYtZnVuY3Rpb25zIGFyZSBkZXNpZ25lZCB0byBtYWtlIGRyaXZlcnMgZWFzaWVyIHRvIHdyaXRlIGFuZCB0byBjZW50cmFsaXplIGNvbW1vblxcbi0tXFxuRG9jdW1lbnRhdGlvbi9tbS9obW0ucnN0PTI5Nz1iZXR3ZWVuIGRldmljZSBkcml2ZXIgc3BlY2lmaWMgY29kZSBhbmQgc2hhcmVkIGNvbW1vbiBjb2RlOlxcbi0tXFxuRG9jdW1lbnRhdGlvbi9tbS9obW0ucnN0LTMwMS0gICBUaGUgZGV2aWNlIGRyaXZlciBoYXMgdG8gcGFzcyBhIGBgc3RydWN0IHZtX2FyZWFfc3RydWN0YGAgdG9cXG5Eb2N1bWVudGF0aW9uL21tL2htbS5yc3Q6MzAyOiAgIG1pZ3JhdGVfdm1hX3NldHVwKCkgc28gdGhlIG1tYXBfcmVhZF9sb2NrKCkgb3IgbW1hcF93cml0ZV9sb2NrKCkgbmVlZHMgdG9cXG5Eb2N1bWVudGF0aW9uL21tL2htbS5yc3QtMzAzLSAgIGJlIGhlbGQgZm9yIHRoZSBkdXJhdGlvbiBvZiB0aGUgbWlncmF0aW9uLlxcbkRvY3VtZW50YXRpb24vbW0vaG1tLnJzdC0zMDQtXFxuRG9jdW1lbnRhdGlvbi9tbS9obW0ucnN0OjMwNToyLiBgYG1pZ3JhdGVfdm1hX3NldHVwKHN0cnVjdCBtaWdyYXRlX3ZtYSAqYXJncylgYFxcbkRvY3VtZW50YXRpb24vbW0vaG1tLnJzdC0zMDYtXFxuRG9jdW1lbnRhdGlvbi9tbS9obW0ucnN0LTMwNy0gICBUaGUgZGV2aWNlIGRyaXZlciBpbml0aWFsaXplcyB0aGUgYGBzdHJ1Y3QgbWlncmF0ZV92bWFgYCBmaWVsZHMgYW5kIHBhc3Nlc1xcbkRvY3VtZW50YXRpb24vbW0vaG1tLnJzdDozMDg6ICAgdGhlIHBvaW50ZXIgdG8gbWlncmF0ZV92bWFfc2V0dXAoKS4gVGhlIGBgYXJncy1cXHUwMDNlZmxhZ3NgYCBmaWVsZCBpcyB1c2VkIHRvXFxuRG9jdW1lbnRhdGlvbi9tbS9obW0ucnN0LTMwOS0gICBmaWx0ZXIgd2hpY2ggc291cmNlIHBhZ2VzIHNob3VsZCBiZSBtaWdyYXRlZC4gRm9yIGV4YW1wbGUsIHNldHRpbmdcXG4tLVxcbkRvY3VtZW50YXRpb24vbW0vaG1tLnJzdC0zMTctXFxuRG9jdW1lbnRhdGlvbi9tbS9obW0ucnN0OjMxODogICBPbmUgb2YgdGhlIGZpcnN0IHN0ZXBzIG1pZ3JhdGVfdm1hX3NldHVwKCkgZG9lcyBpcyB0byBpbnZhbGlkYXRlIG90aGVyXFxuRG9jdW1lbnRhdGlvbi9tbS9obW0ucnN0LTMxOS0gICBkZXZpY2UncyBNTVVzIHdpdGggdGhlIGBgbW11X25vdGlmaWVyX2ludmFsaWRhdGVfcmFuZ2Vfc3RhcnQoKClgYCBhbmRcXG4tLVxcbkRvY3VtZW50YXRpb24vbW0vaG1tLnJzdC0zMjQtICAgYGBNTVVfTk9USUZZX01JR1JBVEVgYCBhbmQgdGhlIGBgb3duZXJgYCBmaWVsZCBzZXQgdG9cXG5Eb2N1bWVudGF0aW9uL21tL2htbS5yc3Q6MzI1OiAgIHRoZSBgYGFyZ3MtXFx1MDAzZXBnbWFwX293bmVyYGAgZmllbGQgcGFzc2VkIHRvIG1pZ3JhdGVfdm1hX3NldHVwKCkuIFRoaXNcXG5Eb2N1bWVudGF0aW9uL21tL2htbS5yc3QtMzI2LSAgIGFsbG93cyB0aGUgZGV2aWNlIGRyaXZlciB0byBza2lwIHRoZSBpbnZhbGlkYXRpb24gY2FsbGJhY2sgYW5kIG9ubHlcXG4tLVxcbkRvY3VtZW50YXRpb24vbW0vaG1tLnJzdC0zMzctICAgaW5zZXJ0ZWQgaW4gcGxhY2Ugb2YgdGhlIG9yaWdpbmFsIFBURS5cXG5Eb2N1bWVudGF0aW9uL21tL2htbS5yc3Q6MzM4OiAgIG1pZ3JhdGVfdm1hX3NldHVwKCkgYWxzbyBjbGVhcnMgdGhlIGBgYXJncy1cXHUwMDNlZHN0YGAgYXJyYXkuXFxuRG9jdW1lbnRhdGlvbi9tbS9obW0ucnN0LTMzOS1cXG4tLVxcbkRvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL3poX0NOL21tL2htbS5yc3Q9MjEyPUhNTSDliIfmjaLliLDnm7TmjqXkvb/nlKggc3RydWN0IHBhZ2Ug55So5LqO6K6+5aSH5YaF5a2Y77yM6L+Z5L2/5b6X5aSn5aSa5pWw5YaF5qC45Luj56CB6Lev5b6E5LiN55+l6YGT5beu5byC44CCXFxuLS1cXG5Eb2N1bWVudGF0aW9uL3RyYW5zbGF0aW9ucy96aF9DTi9tbS9obW0ucnN0LTIxOC3nlLHkuo4gQ1BVIOaXoOazleebtOaOpeiuv+mXruiuvuWkh+WGheWtmO+8jOWboOatpOiuvuWkh+mpseWKqOeoi+W6j+W/hemhu+S9v+eUqOehrOS7tiBETUEg5oiW6K6+5aSH54m55a6a55qE5Yqg6L29L+WtmFxcbkRvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL3poX0NOL21tL2htbS5yc3Q6MjE5OuWCqOaMh+S7pOadpei/geenu+aVsOaNruOAgm1pZ3JhdGVfdm1hX3NldHVwKCnjgIFtaWdyYXRlX3ZtYV9wYWdlcygpIOWSjFxcbkRvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL3poX0NOL21tL2htbS5yc3QtMjIwLW1pZ3JhdGVfdm1hX2ZpbmFsaXplKCkg5Ye95pWw5peo5Zyo5L2/6amx5Yqo56iL5bqP5pu05piT5LqO57yW5YaZ5bm26ZuG5Lit6Leo6amx5Yqo56iL5bqP55qE6YCa55So5Luj56CB44CCXFxuLS1cXG5Eb2N1bWVudGF0aW9uL3RyYW5zbGF0aW9ucy96aF9DTi9tbS9obW0ucnN0PTI0Mz1kZXZtX21lbXVubWFwX3BhZ2VzKCkg5ZKMIGRldm1fcmVsZWFzZV9tZW1fcmVnaW9uKCkg5b2T6LWE5rqQ5Y+v5Lul57uR5a6a5YiwIGBgc3RydWN0IGRldmljZWBgLlxcbi0tXFxuRG9jdW1lbnRhdGlvbi90cmFuc2xhdGlvbnMvemhfQ04vbW0vaG1tLnJzdC0yNDktXFxuRG9jdW1lbnRhdGlvbi90cmFuc2xhdGlvbnMvemhfQ04vbW0vaG1tLnJzdDoyNTA6ICAg6K6+5aSH6amx5Yqo56iL5bqP5b+F6aG75bCGIGBgc3RydWN0IHZtX2FyZWFfc3RydWN0YGAg5Lyg6YCS57uZbWlncmF0ZV92bWFfc2V0dXAoKe+8jFxcbkRvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL3poX0NOL21tL2htbS5yc3QtMjUxLSAgIOWboOatpOmcgOimgeWcqOi/geenu+acn+mXtOS/neeVmSBtbWFwX3JlYWRfbG9jaygpIOaIliBtbWFwX3dyaXRlX2xvY2soKeOAglxcbkRvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL3poX0NOL21tL2htbS5yc3QtMjUyLVxcbkRvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL3poX0NOL21tL2htbS5yc3Q6MjUzOjIuIGBgbWlncmF0ZV92bWFfc2V0dXAoc3RydWN0IG1pZ3JhdGVfdm1hICphcmdzKWBgXFxuRG9jdW1lbnRhdGlvbi90cmFuc2xhdGlvbnMvemhfQ04vbW0vaG1tLnJzdC0yNTQtXFxuRG9jdW1lbnRhdGlvbi90cmFuc2xhdGlvbnMvemhfQ04vbW0vaG1tLnJzdC0yNTUtICAg6K6+5aSH6amx5Yqo5Yid5aeL5YyW5LqGIGBgc3RydWN0IG1pZ3JhdGVfdm1hYGAg55qE5a2X5q6177yM5bm25bCG6K+l5oyH6ZKI5Lyg6YCS57uZXFxuRG9jdW1lbnRhdGlvbi90cmFuc2xhdGlvbnMvemhfQ04vbW0vaG1tLnJzdDoyNTY6ICAgbWlncmF0ZV92bWFfc2V0dXAoKeOAgmBgYXJncy1cXHUwMDNlZmxhZ3NgYCDlrZfmrrXmmK/nlKjmnaXov4fmu6Tlk6rkupvmupDpobXpnaLlupTor6Xooqvov4Hnp7vjgIJcXG5Eb2N1bWVudGF0aW9uL3RyYW5zbGF0aW9ucy96aF9DTi9tbS9obW0ucnN0LTI1Ny0gICDkvovlpoLvvIzorr7nva4gYGBNSUdSQVRFX1ZNQV9TRUxFQ1RfU1lTVEVNYGAg5bCG5Y+q6L+B56e757O757uf5YaF5a2Y77yM6K6+572uXFxuLS1cXG5Eb2N1bWVudGF0aW9uL3RyYW5zbGF0aW9ucy96aF9DTi9tbS9obW0ucnN0LTI2Mi1cXG5Eb2N1bWVudGF0aW9uL3RyYW5zbGF0aW9ucy96aF9DTi9tbS9obW0ucnN0OjI2MzogICBtaWdyYXRlX3ZtYV9zZXR1cCgp5omA5YGa55qE56ys5LiA5q2l5piv55SoIGBgbW11X25vdGlmaWVyX2ludmFsaWRhdGVfcmFuZ2Vfc3RhcnQoKWBgXFxuRG9jdW1lbnRhdGlvbi90cmFuc2xhdGlvbnMvemhfQ04vbW0vaG1tLnJzdC0yNjQtICAg5ZKMIGBgbW11X25vdGlmaWVyX2ludmFsaWRhdGVfcmFuZ2VfZW5kKClgYCDosIPnlKjmnaXpgY3ljoborr7lpIflkajlm7TnmoTpobXooajvvIzkvb9cXG4tLVxcbkRvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL3poX0NOL21tL2htbS5yc3QtMjY3LSAgIOWFtiBgYGV2ZW50YGAg5a2X5q616K6+572u5Li6TU1VX05PVElGWV9NSUdSQVRF77yMIGBgb3duZXJgYCDlrZfmrrXorr7nva7kuLrkvKDpgJLnu5lcXG5Eb2N1bWVudGF0aW9uL3RyYW5zbGF0aW9ucy96aF9DTi9tbS9obW0ucnN0OjI2ODogICBtaWdyYXRlX3ZtYV9zZXR1cCgp55qEIGBgYXJncy1cXHUwMDNlcGdtYXBfb3duZXJgYCDlrZfmrrXjgILov5nlhYHorrjorr7lpIfpqbHliqjot7Pov4fml6BcXG5Eb2N1bWVudGF0aW9uL3RyYW5zbGF0aW9ucy96aF9DTi9tbS9obW0ucnN0LTI2OS0gICDmlYjljJblm57osIPvvIzlj6rml6DmlYjljJbpgqPkupvlrp7pmYXmraPlnKjov4Hnp7vnmoTorr7lpIfnp4HmnIlNTVXmmKDlsITjgILov5nkuIDngrnlsIblnKjkuIvkuIDoioLor6bnu4bop6Pph4rjgIJcXG4tLVxcbkRvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL3poX0NOL21tL2htbS5yc3QtMjc1LSAgIGBgbG9ja19wYWdlKClgYOmUgeWumu+8jOS4jkxSVemalOemu++8iOWmguaenOezu+e7n+WGheWtmOWSjOiuvuWkh+engeaciemhteS4jeWcqExSVeS4iu+8ie+8jOS7jui/m1xcbkRvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL3poX0NOL21tL2htbS5yc3Q6Mjc2OiAgIOeoi+S4reWPlua2iOaYoOWwhO+8jOW5tuaPkuWFpeS4gOS4queJueauiueahOi/geenu1BUReadpeS7o+abv+WOn+adpeeahFBUReOAgiBtaWdyYXRlX3ZtYV9zZXR1cCgpXFxuRG9jdW1lbnRhdGlvbi90cmFuc2xhdGlvbnMvemhfQ04vbW0vaG1tLnJzdC0yNzctICAg6L+Y5riF6Zmk5LqGIGBgYXJncy1cXHUwMDNlZHN0YGAg5pWw57uE44CCXFxuLS1cXG5hcmNoL3Bvd2VycGMva3ZtL2Jvb2szc19odl91dm1lbS5jPTUxMz1zdGF0aWMgaW50IF9fa3ZtcHBjX3N2bV9wYWdlX291dChzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcXG4tLVxcbmFyY2gvcG93ZXJwYy9rdm0vYm9vazNzX2h2X3V2bWVtLmMtNTM4LVxcbmFyY2gvcG93ZXJwYy9rdm0vYm9vazNzX2h2X3V2bWVtLmM6NTM5OlxcdHJldCA9IG1pZ3JhdGVfdm1hX3NldHVwKFxcdTAwMjZtaWcpO1xcbmFyY2gvcG93ZXJwYy9rdm0vYm9vazNzX2h2X3V2bWVtLmMtNTQwLVxcdGlmIChyZXQpXFxuLS1cXG5hcmNoL3Bvd2VycGMva3ZtL2Jvb2szc19odl91dm1lbS5jPTc0MD1zdGF0aWMgaW50IGt2bXBwY19zdm1fcGFnZV9pbihzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcXG4tLVxcbmFyY2gvcG93ZXJwYy9rdm0vYm9vazNzX2h2X3V2bWVtLmMtNzYwLVxcbmFyY2gvcG93ZXJwYy9rdm0vYm9vazNzX2h2X3V2bWVtLmM6NzYxOlxcdHJldCA9IG1pZ3JhdGVfdm1hX3NldHVwKFxcdTAwMjZtaWcpO1xcbmFyY2gvcG93ZXJwYy9rdm0vYm9vazNzX2h2X3V2bWVtLmMtNzYyLVxcdGlmIChyZXQpXFxuLS1cXG5kcml2ZXJzL2dwdS9kcm0vYW1kL2FtZGtmZC9rZmRfbWlncmF0ZS5jPTM5ND1zdm1fbWlncmF0ZV92bWFfdG9fdnJhbShzdHJ1Y3Qga2ZkX25vZGUgKm5vZGUsIHN0cnVjdCBzdm1fcmFuZ2UgKnByYW5nZSxcXG4tLVxcbmRyaXZlcnMvZ3B1L2RybS9hbWQvYW1ka2ZkL2tmZF9taWdyYXRlLmMtNDMxLVxcbmRyaXZlcnMvZ3B1L2RybS9hbWQvYW1ka2ZkL2tmZF9taWdyYXRlLmM6NDMyOlxcdHIgPSBtaWdyYXRlX3ZtYV9zZXR1cChcXHUwMDI2bWlncmF0ZSk7XFxuZHJpdmVycy9ncHUvZHJtL2FtZC9hbWRrZmQva2ZkX21pZ3JhdGUuYy00MzMtXFx0aWYgKHIpIHtcXG4tLVxcbmRyaXZlcnMvZ3B1L2RybS9hbWQvYW1ka2ZkL2tmZF9taWdyYXRlLmM9NjkzPXN2bV9taWdyYXRlX3ZtYV90b19yYW0oc3RydWN0IGtmZF9ub2RlICpub2RlLCBzdHJ1Y3Qgc3ZtX3JhbmdlICpwcmFuZ2UsXFxuLS1cXG5kcml2ZXJzL2dwdS9kcm0vYW1kL2FtZGtmZC9rZmRfbWlncmF0ZS5jLTczNC1cXG5kcml2ZXJzL2dwdS9kcm0vYW1kL2FtZGtmZC9rZmRfbWlncmF0ZS5jOjczNTpcXHRyID0gbWlncmF0ZV92bWFfc2V0dXAoXFx1MDAyNm1pZ3JhdGUpO1xcbmRyaXZlcnMvZ3B1L2RybS9hbWQvYW1ka2ZkL2tmZF9taWdyYXRlLmMtNzM2LVxcdGlmIChyKSB7XFxuLS1cXG5kcml2ZXJzL2dwdS9kcm0vYW1kL2FtZGtmZC9rZmRfc3ZtLmM9MzUxNT1zdm1fcmFuZ2VfYmVzdF9wcmVmZXRjaF9sb2NhdGlvbihzdHJ1Y3Qgc3ZtX3JhbmdlICpwcmFuZ2UpXFxuLS1cXG5kcml2ZXJzL2dwdS9kcm0vYW1kL2FtZGtmZC9rZmRfc3ZtLmMtMzU4Mi0gKiBhbmQgcmVzdG9yZSB3b3JrOlxcbmRyaXZlcnMvZ3B1L2RybS9hbWQvYW1ka2ZkL2tmZF9zdm0uYzozNTgzOiAqIDEuIG1pZ3JhdGVfdm1hX3NldHVwIGludmFsaWRhdGUgcGFnZXMsIE1NVSBub3RpZmllciBjYWxsYmFjayBzdm1fcmFuZ2VfZXZpY3RcXG5kcml2ZXJzL2dwdS9kcm0vYW1kL2FtZGtmZC9rZmRfc3ZtLmMtMzU4NC0gKiAgICBzdG9wcyBhbGwgcXVldWVzLCBzY2hlZHVsZSByZXN0b3JlIHdvcmtcXG4tLVxcbmRyaXZlcnMvZ3B1L2RybS9kcm1fcGFnZW1hcC5jPTYxNj1pbnQgZHJtX3BhZ2VtYXBfbWlncmF0ZV90b19kZXZtZW0oc3RydWN0IGRybV9wYWdlbWFwX2Rldm1lbSAqZGV2bWVtX2FsbG9jYXRpb24sXFxuLS1cXG5kcml2ZXJzL2dwdS9kcm0vZHJtX3BhZ2VtYXAuYy02ODMtXFxuZHJpdmVycy9ncHUvZHJtL2RybV9wYWdlbWFwLmM6Njg0OlxcdGVyciA9IG1pZ3JhdGVfdm1hX3NldHVwKFxcdTAwMjZtaWdyYXRlKTtcXG5kcml2ZXJzL2dwdS9kcm0vZHJtX3BhZ2VtYXAuYy02ODUtXFx0aWYgKGVycilcXG4tLVxcbmRyaXZlcnMvZ3B1L2RybS9kcm1fcGFnZW1hcC5jPTEyMTE9c3RhdGljIGludCBfX2RybV9wYWdlbWFwX21pZ3JhdGVfdG9fcmFtKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdmFzLFxcbi0tXFxuZHJpdmVycy9ncHUvZHJtL2RybV9wYWdlbWFwLmMtMTI2NC1cXG5kcml2ZXJzL2dwdS9kcm0vZHJtX3BhZ2VtYXAuYzoxMjY1OlxcdGVyciA9IG1pZ3JhdGVfdm1hX3NldHVwKFxcdTAwMjZtaWdyYXRlKTtcXG5kcml2ZXJzL2dwdS9kcm0vZHJtX3BhZ2VtYXAuYy0xMjY2LVxcdGlmIChlcnIpXFxuLS1cXG5kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9ub3V2ZWF1X2RtZW0uYz0xODM9c3RhdGljIHZtX2ZhdWx0X3Qgbm91dmVhdV9kbWVtX21pZ3JhdGVfdG9fcmFtKHN0cnVjdCB2bV9mYXVsdCAqdm1mKVxcbi0tXFxuZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbm91dmVhdV9kbWVtLmMtMjM1LVxcdCAqL1xcbmRyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L25vdXZlYXVfZG1lbS5jOjIzNjpcXHRpZiAobWlncmF0ZV92bWFfc2V0dXAoXFx1MDAyNmFyZ3MpIFxcdTAwM2MgMClcXG5kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9ub3V2ZWF1X2RtZW0uYy0yMzctXFx0XFx0cmV0dXJuIFZNX0ZBVUxUX1NJR0JVUztcXG4tLVxcbmRyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L25vdXZlYXVfZG1lbS5jPTgyMj1ub3V2ZWF1X2RtZW1fbWlncmF0ZV92bWEoc3RydWN0IG5vdXZlYXVfZHJtICpkcm0sXFxuLS1cXG5kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9ub3V2ZWF1X2RtZW0uYy04NzEtXFxuZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbm91dmVhdV9kbWVtLmM6ODcyOlxcdFxcdHJldCA9IG1pZ3JhdGVfdm1hX3NldHVwKFxcdTAwMjZhcmdzKTtcXG5kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9ub3V2ZWF1X2RtZW0uYy04NzMtXFx0XFx0aWYgKHJldClcXG4tLVxcbmluY2x1ZGUvbGludXgvbWlncmF0ZS5oPTE2MD1zdHJ1Y3QgbWlncmF0ZV92bWEge1xcbi0tXFxuaW5jbHVkZS9saW51eC9taWdyYXRlLmgtMTY2LVxcdCAqIFRoZSBzcmMgYXJyYXkgbXVzdCBub3QgYmUgbW9kaWZpZWQgYnkgdGhlIGNhbGxlciBhZnRlclxcbmluY2x1ZGUvbGludXgvbWlncmF0ZS5oOjE2NzpcXHQgKiBtaWdyYXRlX3ZtYV9zZXR1cCgpLCBhbmQgbXVzdCBub3QgY2hhbmdlIHRoZSBkc3QgYXJyYXkgYWZ0ZXJcXG5pbmNsdWRlL2xpbnV4L21pZ3JhdGUuaC0xNjgtXFx0ICogbWlncmF0ZV92bWFfcGFnZXMoKSByZXR1cm5zLlxcbi0tXFxuaW5jbHVkZS9saW51eC9taWdyYXRlLmgtMTk0LVxcbmluY2x1ZGUvbGludXgvbWlncmF0ZS5oOjE5NTppbnQgbWlncmF0ZV92bWFfc2V0dXAoc3RydWN0IG1pZ3JhdGVfdm1hICphcmdzKTtcXG5pbmNsdWRlL2xpbnV4L21pZ3JhdGUuaC0xOTYtdm9pZCBtaWdyYXRlX3ZtYV9wYWdlcyhzdHJ1Y3QgbWlncmF0ZV92bWEgKm1pZ3JhdGUpO1xcbi0tXFxubGliL3Rlc3RfaG1tLmM9MTEyMD1zdGF0aWMgaW50IGRtaXJyb3JfbWlncmF0ZV90b19zeXN0ZW0oc3RydWN0IGRtaXJyb3IgKmRtaXJyb3IsXFxuLS1cXG5saWIvdGVzdF9obW0uYy0xMTY0LVxcbmxpYi90ZXN0X2htbS5jOjExNjU6XFx0XFx0cmV0ID0gbWlncmF0ZV92bWFfc2V0dXAoXFx1MDAyNmFyZ3MpO1xcbmxpYi90ZXN0X2htbS5jLTExNjYtXFx0XFx0aWYgKHJldClcXG4tLVxcbmxpYi90ZXN0X2htbS5jPTExODk9c3RhdGljIGludCBkbWlycm9yX21pZ3JhdGVfdG9fZGV2aWNlKHN0cnVjdCBkbWlycm9yICpkbWlycm9yLFxcbi0tXFxubGliL3Rlc3RfaG1tLmMtMTI0Mi1cXHRcXHRcXHRcXHRNSUdSQVRFX1ZNQV9TRUxFQ1RfQ09NUE9VTkQ7XFxubGliL3Rlc3RfaG1tLmM6MTI0MzpcXHRcXHRyZXQgPSBtaWdyYXRlX3ZtYV9zZXR1cChcXHUwMDI2YXJncyk7XFxubGliL3Rlc3RfaG1tLmMtMTI0NC1cXHRcXHRpZiAocmV0KVxcbi0tXFxubGliL3Rlc3RfaG1tLmM9MTY1Mz1zdGF0aWMgdm1fZmF1bHRfdCBkbWlycm9yX2Rldm1lbV9mYXVsdChzdHJ1Y3Qgdm1fZmF1bHQgKnZtZilcXG4tLVxcbmxpYi90ZXN0X2htbS5jLTE3MDUtXFx0LypcXG5saWIvdGVzdF9obW0uYzoxNzA2OlxcdCAqIEluIHByYWN0aWNlIG1pZ3JhdGVfdm1hX3NldHVwKCkgc2hvdWxkIG5ldmVyIGZhaWwgdW5sZXNzIHRoZVxcbmxpYi90ZXN0X2htbS5jLTE3MDctXFx0ICogdGVzdCBpcyB3cm9uZyBhcyBpdCBqdXN0IHRlc3RzIHNvbWUgc3RhdGljIFZNQSBwcm9wZXJ0aWVzLlxcbmxpYi90ZXN0X2htbS5jLTE3MDgtXFx0ICovXFxubGliL3Rlc3RfaG1tLmM6MTcwOTpcXHRpZiAobWlncmF0ZV92bWFfc2V0dXAoXFx1MDAyNmFyZ3MpKSB7XFxubGliL3Rlc3RfaG1tLmMtMTcxMC1cXHRcXHRyZXQgPSBWTV9GQVVMVF9TSUdCVVM7XFxuLS1cXG5tbS9taWdyYXRlX2RldmljZS5jPTY3MD1zdGF0aWMgdm9pZCBtaWdyYXRlX3ZtYV91bm1hcChzdHJ1Y3QgbWlncmF0ZV92bWEgKm1pZ3JhdGUpXFxuLS1cXG5tbS9taWdyYXRlX2RldmljZS5jLTY3Ni0vKipcXG5tbS9taWdyYXRlX2RldmljZS5jOjY3NzogKiBtaWdyYXRlX3ZtYV9zZXR1cCgpIC0gcHJlcGFyZSB0byBtaWdyYXRlIGEgcmFuZ2Ugb2YgbWVtb3J5XFxubW0vbWlncmF0ZV9kZXZpY2UuYy02NzgtICogQGFyZ3M6IGNvbnRhaW5zIHRoZSB2bWEsIHN0YXJ0LCBhbmQgcGZucyBhcnJheXMgZm9yIHRoZSBtaWdyYXRpb25cXG4tLVxcbm1tL21pZ3JhdGVfZGV2aWNlLmMtNzM5LSAqL1xcbm1tL21pZ3JhdGVfZGV2aWNlLmM6NzQwOmludCBtaWdyYXRlX3ZtYV9zZXR1cChzdHJ1Y3QgbWlncmF0ZV92bWEgKmFyZ3MpXFxubW0vbWlncmF0ZV9kZXZpY2UuYy03NDEte1xcbi0tXFxubW0vbWlncmF0ZV9kZXZpY2UuYy03NzktfVxcbm1tL21pZ3JhdGVfZGV2aWNlLmM6NzgwOkVYUE9SVF9TWU1CT0wobWlncmF0ZV92bWFfc2V0dXApO1xcbm1tL21pZ3JhdGVfZGV2aWNlLmMtNzgxLVxcbi0tXFxubW0vbWlncmF0ZV9kZXZpY2UuYz0xMzY2PXN0YXRpYyB1bnNpZ25lZCBsb25nIG1pZ3JhdGVfZGV2aWNlX3Bmbl9sb2NrKHVuc2lnbmVkIGxvbmcgcGZuKVxcbi0tXFxubW0vbWlncmF0ZV9kZXZpY2UuYy0xMzg3LSAqXFxubW0vbWlncmF0ZV9kZXZpY2UuYzoxMzg4OiAqIG1pZ3JhdGVfdm1hX3NldHVwKCkgaXMgc2ltaWxhciBpbiBjb25jZXB0IHRvIG1pZ3JhdGVfdm1hX3NldHVwKCkgZXhjZXB0IHRoYXRcXG5tbS9taWdyYXRlX2RldmljZS5jLTEzODktICogaW5zdGVhZCBvZiBsb29raW5nIHVwIHBhZ2VzIGJhc2VkIG9uIHZpcnR1YWwgYWRkcmVzcyBtYXBwaW5ncyBhIHJhbmdlIG9mXFxuLS1cXG5tbS9taWdyYXRlX2RldmljZS5jLTEzOTUtICpcXG5tbS9taWdyYXRlX2RldmljZS5jOjEzOTY6ICogTGlrZSBtaWdyYXRlX3ZtYV9zZXR1cCgpIHRoaXMgZnVuY3Rpb24gd2lsbCB0YWtlIGEgcmVmZXJlbmNlIGFuZCBsb2NrIGFueVxcbm1tL21pZ3JhdGVfZGV2aWNlLmMtMTM5Ny0gKiBtaWdyYXRpbmcgcGFnZXMgdGhhdCBhcmVuJ3QgZnJlZSBiZWZvcmUgdW5tYXBwaW5nIHRoZW0uIERyaXZlcnMgbWF5IHRoZW5cXG4tLVxcbm1tL21pZ3JhdGVfZGV2aWNlLmM9MTQ2Nj1pbnQgbWlncmF0ZV9kZXZpY2VfY29oZXJlbnRfZm9saW8oc3RydWN0IGZvbGlvICpmb2xpbylcXG4tLVxcbm1tL21pZ3JhdGVfZGV2aWNlLmMtMTQ3OC1cXHQgKiB0aGUgc291cmNlIGZvbGlvLiBTbyBjYWxsIG1pZ3JhdGVfdm1hX3VubWFwKCkgZGlyZWN0bHkgdG8gdW5tYXAgdGhlXFxubW0vbWlncmF0ZV9kZXZpY2UuYzoxNDc5OlxcdCAqIGZvbGlvIGFzIG1pZ3JhdGVfdm1hX3NldHVwKCkgd2lsbCBmYWlsIGlmIGFyZ3Mudm1hID09IE5VTEwuXFxubW0vbWlncmF0ZV9kZXZpY2UuYy0xNDgwLVxcdCAqL1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wNlQxNjoxNzo0OC45NzE4OTE2OThaIiwiU2VxIjoyMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzU1Nzc1ODE4NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCBzdW1tYXJpemVkIGZyb20gbXkgcGVyc3BlY3RpdmUgYXMgYW4gZXhwZXJ0IGluIG15IGZpZWxkOlxuXG4qKkFzc2Vzc2luZyB0aGUgRnV6emluZyBQb3RlbnRpYWwgb2YgYSBUZXN0IE1vZHVsZSoqXG5cblJpZ2h0LCBzbyB0aGlzIHRoaW5nIGlzIGJlaW5nIHVzZWQgd2l0aGluIGBsaWIvdGVzdF9obW0uY2AuIE9rYXksIHRoYXQncyBpbnRlcmVzdGluZy4gVGhlIGZhY3QgdGhhdCBpdCdzIGluIGEgYC5jYCBmaWxlIG5hbWVkIGB0ZXN0X2htbWAgc3VnZ2VzdHMgaXQgbWlnaHQgYmUgYSB0ZXN0aW5nIG1vZHVsZSBvZiBzb21lIGtpbmQuIE5vdywgYSB0ZXN0IG1vZHVsZS4uLiB0aGF0ICpjb3VsZCogYmUgYSBncmVhdCBjYW5kaWRhdGUgZm9yIGZ1enppbmchIEl0J3Mgd29ydGggYSBxdWljayBsb29rIGF0IGBsaWIvdGVzdF9obW0uY2AgdG8gY29uZmlybSB0aGF0IHN1c3BpY2lvbi4gVGhlIHBvdGVudGlhbCBwYXlvZmYgaXMgaGlnaDsgaWYgaXQgKmlzKiBhIHRlc3QsIGl0J3MgZGVzaWduZWQgdG8gZXhwbG9yZSB0aGUgYmVoYXZpb3Igb2YgdGhlIGBobW1gIGxpYnJhcnkgYW5kIHRoZXJlZm9yZSwgbWF5IGJlIGFuIGlkZWFsIHBsYWNlIHRvIGZpbmQgdnVsbmVyYWJpbGl0aWVzIHZpYSB1bmV4cGVjdGVkIGlucHV0cyBhbmQgY29uZmlndXJhdGlvbnMuIExldCdzIGRpZyBpbiBhbmQgc2VlIHdoYXQncyB3aGF0IVxuXG5cbiIsIklucHV0VG9rZW5zIjoxMjIyMywiT3V0cHV0VG9rZW5zIjoyNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQxLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA2VDE2OjE3OjUyLjUyOTY1MjYyNFoiLCJTZXEiOjIyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODE5MTMwNDYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIFRFU1RfSE1NXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImxpYi9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibGliL0tjb25maWcuZGVidWc9MzMxOD1jb25maWcgVEVTVF9NRU1JTklUXFxuLS1cXG5saWIvS2NvbmZpZy5kZWJ1Zy0zMzI1LVxcbmxpYi9LY29uZmlnLmRlYnVnOjMzMjY6Y29uZmlnIFRFU1RfSE1NXFxubGliL0tjb25maWcuZGVidWctMzMyNy1cXHR0cmlzdGF0ZSBcXFwiVGVzdCBITU0gKEhldGVyb2dlbmVvdXMgTWVtb3J5IE1hbmFnZW1lbnQpXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wNlQxNjoxNzo1Mi42MTE1NzM5N1oiLCJTZXEiOjIzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNjMzNzQ1NjQ1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIHByZXNlbnRlZCBhcyBhIGZpcnN0LXBlcnNvbiBleHBlcnQgc3VtbWFyeTpcblxuKipBbmFseXppbmcgQ29uZmlndXJhdGlvbiBEZXBlbmRlbmNpZXMqKlxuXG5BbHJpZ2h0LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIGBURVNUX0hNTWAgY29uZmlndXJhdGlvbi4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIHRyZWF0IHRoaXMgYXMgYSBjb25maWd1cmF0aW9uLCBwcm9iYWJseSBmb3IgYSBzcGVjaWZpYyBwcm9jZXNzLiBOb3csIHRoZSBrZXkgcXVlc3Rpb24gaXMsIGRvZXMgdGhpcyBgVEVTVF9ITU1gIHNldHVwIGhhdmUgYW55IGRlcGVuZGVuY2llcyBvbiB0aGUgYERFVklDRV9NSUdSQVRJT05gIGZ1bmN0aW9uYWxpdHk/IEkgbmVlZCB0byBxdWlja2x5IGRldGVybWluZSB0aGUgcmVsYXRpb25zaGlwIGJldHdlZW4gdGhlc2UgdHdvLCBhcyB0aGlzJ2xsIGFmZmVjdCBob3cgSSBtYW5hZ2UgdGhlbSBhbmQgYW55IHBvdGVudGlhbCBpc3N1ZXMgaWYgY2hhbmdlcyBhcmUgbWFkZSB0byBlaXRoZXIgb25lIG9mIHRoZW0uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEyNTcwLCJPdXRwdXRUb2tlbnMiOjI2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDZUMTY6MTc6NTYuMjQ1MzIzMTY1WiIsIlNlcSI6MjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3MzU2NDIzMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJURVNUX0hNTVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJsaWIvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImxpYi9LY29uZmlnLmRlYnVnPTMzMTg9Y29uZmlnIFRFU1RfTUVNSU5JVFxcbi0tXFxubGliL0tjb25maWcuZGVidWctMzMyNS1cXG5saWIvS2NvbmZpZy5kZWJ1ZzozMzI2OmNvbmZpZyBURVNUX0hNTVxcbmxpYi9LY29uZmlnLmRlYnVnLTMzMjctXFx0dHJpc3RhdGUgXFxcIlRlc3QgSE1NIChIZXRlcm9nZW5lb3VzIE1lbW9yeSBNYW5hZ2VtZW50KVxcXCJcXG4tLVxcbmxpYi9NYWtlZmlsZT0xMDI9b2JqLSQoQ09ORklHX1RFU1RfTE9DS1VQKSArPSB0ZXN0X2xvY2t1cC5vXFxubGliL01ha2VmaWxlOjEwMzpvYmotJChDT05GSUdfVEVTVF9ITU0pICs9IHRlc3RfaG1tLm9cXG5saWIvTWFrZWZpbGUtMTA0LW9iai0kKENPTkZJR19URVNUX0ZSRUVfUEFHRVMpICs9IHRlc3RfZnJlZV9wYWdlcy5vXFxuLS1cXG5saWIvdGVzdF9obW1fdWFwaS5oLTYtICovXFxubGliL3Rlc3RfaG1tX3VhcGkuaDo3OiNpZm5kZWYgX0xJQl9URVNUX0hNTV9VQVBJX0hcXG5saWIvdGVzdF9obW1fdWFwaS5oOjg6I2RlZmluZSBfTElCX1RFU1RfSE1NX1VBUElfSFxcbmxpYi90ZXN0X2htbV91YXBpLmgtOS1cXG4tLVxcbmxpYi90ZXN0X2htbV91YXBpLmg9NzQ9ZW51bSB7XFxuLS1cXG5saWIvdGVzdF9obW1fdWFwaS5oLTc5LVxcbmxpYi90ZXN0X2htbV91YXBpLmg6ODA6I2VuZGlmIC8qIF9MSUJfVEVTVF9ITU1fVUFQSV9IICovXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA2VDE2OjE3OjU2LjMxODg5MzI0NVoiLCJTZXEiOjI1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNTYzNTE4NTE0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgYSBzdW1tYXJ5IG9mIG15IHRob3VnaHQgcHJvY2VzcywgYXMgcmVxdWVzdGVkOlxuXG4qKkRpdmluZyBpbnRvIGBLY29uZmlnLmRlYnVnYCBmb3IgYFRFU1RfSE1NYCoqXG5cbk9rYXksIHNvIEkgbmVlZCB0byB1bmRlcnN0YW5kIHNvbWV0aGluZyBhYm91dCB0aGUgY29uZmlndXJhdGlvbiByZWxhdGVkIHRvIGBURVNUX0hNTWAuIExldCdzIHplcm8gaW4gb24gYGxpYi9LY29uZmlnLmRlYnVnYC4gVGhhdCdzIHdoZXJlIEkgZXhwZWN0IHRvIGZpbmQgdGhlIHNldHRpbmdzLCBkZXBlbmRlbmNpZXMsIGFuZCBhbnkgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZvciB0aGlzIGZlYXR1cmUuIEknbSBnb2luZyB0byBsb29rIHNwZWNpZmljYWxseSBhcm91bmQgdGhlIGBURVNUX0hNTWAgZGVmaW5pdGlvbiBpdHNlbGYuIEkgbmVlZCB0byBmaWd1cmUgb3V0OlxuXG4qICAgV2hhdCBvcHRpb25zIGV4aXN0P1xuKiAgIFdoYXQgb3RoZXIgY29uZmlndXJhdGlvbnMgZG9lcyBpdCBkZXBlbmQgb24/XG4qICAgQXJlIHRoZXJlIGFueSBpbnRlcmVzdGluZyBjb21tZW50cyBvciBleHBsYW5hdGlvbnMgdGhhdCB3aWxsIHByb3ZpZGUgY29udGV4dD9cblxuQmFzaWNhbGx5LCBJIHdhbnQgdG8gcXVpY2tseSBncmFzcCB0aGUgcmVsZXZhbnQgZGV0YWlscyBzbyBJIGNhbiBtb3ZlIGZvcndhcmQgd2l0aCBteSBvdGhlciB0YXNrcy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTMwNzcsIk91dHB1dFRva2VucyI6MzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxOSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0wNlQxNjoxNzo1OS44ODI0MTQ1NjlaIiwiU2VxIjoyNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTk0MDc5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImxpYi9LY29uZmlnLmRlYnVnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDMzMjAsXG4gIFwiTGluZUNvdW50XCI6IDIwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjMzMjA6XFx0XFx0aGVscFxcbjMzMjE6XFx0XFx0ICBUZXN0IGlmIHRoZSBrZXJuZWwgaXMgemVyby1pbml0aWFsaXppbmcgaGVhcCBhbmQgcGFnZSBhbGxvY2F0aW9ucy5cXG4zMzIyOlxcdFxcdCAgVGhpcyBjYW4gYmUgdXNlZnVsIHRvIHRlc3QgaW5pdF9vbl9hbGxvYyBhbmQgaW5pdF9vbl9mcmVlIGZlYXR1cmVzLlxcbjMzMjM6XFx0XFxuMzMyNDpcXHRcXHQgIElmIHVuc3VyZSwgc2F5IE4uXFxuMzMyNTpcXHRcXG4zMzI2OlxcdGNvbmZpZyBURVNUX0hNTVxcbjMzMjc6XFx0XFx0dHJpc3RhdGUgXFxcIlRlc3QgSE1NIChIZXRlcm9nZW5lb3VzIE1lbW9yeSBNYW5hZ2VtZW50KVxcXCJcXG4zMzI4OlxcdFxcdGRlcGVuZHMgb24gVFJBTlNQQVJFTlRfSFVHRVBBR0VcXG4zMzI5OlxcdFxcdGRlcGVuZHMgb24gREVWSUNFX1BSSVZBVEVcXG4zMzMwOlxcdFxcdHNlbGVjdCBITU1fTUlSUk9SXFxuMzMzMTpcXHRcXHRzZWxlY3QgTU1VX05PVElGSUVSXFxuMzMzMjpcXHRcXHRoZWxwXFxuMzMzMzpcXHRcXHQgIFRoaXMgaXMgYSBwc2V1ZG8gZGV2aWNlIGRyaXZlciBzb2xlbHkgZm9yIHRlc3RpbmcgSE1NLlxcbjMzMzQ6XFx0XFx0ICBTYXkgTSBoZXJlIGlmIHlvdSB3YW50IHRvIGJ1aWxkIHRoZSBITU0gdGVzdCBtb2R1bGUuXFxuMzMzNTpcXHRcXHQgIERvaW5nIHNvIHdpbGwgYWxsb3cgeW91IHRvIHJ1biB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0L3ZtL2htbS10ZXN0cy5cXG4zMzM2OlxcdFxcbjMzMzc6XFx0XFx0ICBJZiB1bnN1cmUsIHNheSBOLlxcbjMzMzg6XFx0XFxuMzMzOTpcXHRjb25maWcgVEVTVF9GUkVFX1BBR0VTXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA2VDE2OjE3OjU5Ljg4MjYxMDQ2OVoiLCJTZXEiOjI3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoyODE0ODQ2MDU2OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHN1bW1hcnksIHByZXNlbnRlZCBhcyBhIHN0cmVhbSBvZiB0aG91Z2h0OlxuXG4qKkNoZWNraW5nIHRoZSBQcml2YXRlIERldmljZSBTdGF0dXMqKlxuXG5SaWdodCwgdGhpcyBoaW5nZXMgb24gYERFVklDRV9QUklWQVRFYC4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgdGhlIHN0YXR1cyBvZiB0aGF0IHZhcmlhYmxlIGJlZm9yZSBJIGNhbiBwcm9jZWVkLiBObyBwb2ludCBnb2luZyBkb3duIGFueSByYWJiaXQgaG9sZXMgdW50aWwgSSB1bmRlcnN0YW5kIGlmIGBERVZJQ0VfUFJJVkFURWAgaXMgc2V0IG9yIG5vdC4gTGV0J3Mgc3RhcnQgYnkgdmVyaWZ5aW5nIHRoZSBjdXJyZW50IHN0YXRlIG9mIGBERVZJQ0VfUFJJVkFURWAuIEkgbmVlZCB0byBpc29sYXRlIHRoaXMgdmFsdWUgdG8gZGV0ZXJtaW5lIHRoZSBuZXh0IHN0ZXA7IGl0IHdpbGwgYmUgY3JpdGljYWwgaW4gZGVjaWRpbmcgdGhlIGV4ZWN1dGlvbiBwYXRoLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMzYwMCwiT3V0cHV0VG9rZW5zIjoyNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE4LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDZUMTY6MTg6MjguMDMxMDc1NDM2WiIsIlNlcSI6MjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3NjE0NzI3OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgREVWSUNFX1BSSVZBVEVcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL0tjb25maWc9MTI2ND1jb25maWcgR0VUX0ZSRUVfUkVHSU9OXFxuLS1cXG5tbS9LY29uZmlnLTEyNjYtXFxubW0vS2NvbmZpZzoxMjY3OmNvbmZpZyBERVZJQ0VfUFJJVkFURVxcbm1tL0tjb25maWctMTI2OC1cXHRib29sIFxcXCJVbmFkZHJlc3NhYmxlIGRldmljZSBtZW1vcnkgKEdQVSBtZW1vcnksIC4uLilcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA2VDE2OjE4OjI4LjEwNzIyOTQ1NVoiLCJTZXEiOjI5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozOTg1MDYzOTQwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGhvdWdodCBwcm9jZXNzLCBzdW1tYXJpemVkIGFzIGlmIEkgd2VyZSBjb25zaWRlcmluZyB0aGUgZ2l2ZW4gaW5zdHJ1Y3Rpb25zOlxuXG4qKkFuYWx5emluZyBtbS9LY29uZmlnIGFyb3VuZCBERVZJQ0VfUFJJVkFURSoqXG5cbk9rYXksIHNvIHRoZSBwcm9tcHQgd2FudHMgbWUgdG8gZm9jdXMgb24gYG1tL0tjb25maWdgLCBzcGVjaWZpY2FsbHkgYXJvdW5kIHRoZSBgREVWSUNFX1BSSVZBVEVgIGNvbmZpZ3VyYXRpb24gb3B0aW9uLiBSaWdodCwgc28gdGhpcyBpcyBhYm91dCBtZW1vcnkgbWFuYWdlbWVudCB3aXRoaW4gdGhlIGtlcm5lbCdzIGNvbmZpZ3VyYXRpb24gc3lzdGVtLiBJIG5lZWQgdG8gZmlndXJlIG91dCB3aGF0IHJvbGUgYERFVklDRV9QUklWQVRFYCBwbGF5cyBpbiB0aGlzIGNvbnRleHQuIEknbSBhc3N1bWluZyBpdCByZWxhdGVzIHRvIHdoZXRoZXIgY2VydGFpbiBtZW1vcnkgcmVnaW9ucyBvciBkZXZpY2VzIHNob3VsZCBiZSBjb25zaWRlcmVkIHByaXZhdGUgdG8gYSBzcGVjaWZpYyBkZXZpY2Ugb3IsIGNvbnZlcnNlbHksIHNoYXJlZCBhbmQgbWFuYWdlZCBhdCBhIG1vcmUgZ2xvYmFsIGxldmVsLiBUaGUgYEtjb25maWdgIGZpbGVzIGFyZSB3aGVyZSB0aGUgY29uZmlndXJhdGlvbiBvcHRpb25zIGFyZSBkZWZpbmVkLCBhbG9uZyB3aXRoIHRoZWlyIGRlcGVuZGVuY2llcywgZGVzY3JpcHRpb25zLCBhbmQgZGVmYXVsdHMsIHNvIEkgbmVlZCB0byBnbyByZWFkIHRoZSBjb250ZW50cyBvZiB0aGF0IGZpbGUuIEkgZXhwZWN0IHRvIHNlZSBkZWZpbml0aW9ucyBmb3IgYERFVklDRV9QUklWQVRFYCwgYW5kIGxpa2VseSBhIGRlc2NyaXB0aW9uIG9mIGl0cyBtZWFuaW5nLCBwZXJoYXBzIGNvbmRpdGlvbmFsIGNvbXBpbGF0aW9uIGJhc2VkIG9uIHRoaXMgb3B0aW9uIGFuZCByZWxhdGVkIG9wdGlvbnMuIEknbGwgYmUgbG9va2luZyBmb3IgdGhpbmdzIGxpa2U6XG5cbiogICBXaGF0IGRldmljZXMgb3IgbWVtb3J5IHJlZ2lvbnMgYXJlIGltcGFjdGVkIGJ5IHRoaXMgb3B0aW9uLlxuKiAgIFRoZSBpbXBsaWNhdGlvbnMgb2YgZW5hYmxpbmcgb3IgZGlzYWJsaW5nIHRoaXMgb3B0aW9uLlxuKiAgIEFueSBkZXBlbmRlbmNpZXMgb24gb3RoZXIgY29uZmlndXJhdGlvbiBzZXR0aW5ncy5cbiogICBIb3cgdGhlIGtlcm5lbCBtYW5hZ2VzIGFuZCB1dGlsaXplcyBtZW1vcnkgYmFzZWQgb24gdGhpcyBzZXR0aW5nLlxuXG5NeSBnb2FsIGlzIHRvIHVuZGVyc3RhbmQgaG93IGBERVZJQ0VfUFJJVkFURWAgYWZmZWN0cyB0aGUgbWVtb3J5IG1hbmFnZW1lbnQgc2NoZW1lIHdpdGhpbiB0aGUga2VybmVsIGFuZCBob3cgaXQgY2FuIGJlIGNvbnRyb2xsZWQgdGhyb3VnaCB0aGUgY29uZmlndXJhdGlvbiBwcm9jZXNzLiBVbHRpbWF0ZWx5LCBJJ2xsIHN5bnRoZXNpemUgd2hhdCBgbW0vS2NvbmZpZ2AgaXMgZXhwcmVzc2luZyBhcm91bmQgdGhpcyBvcHRpb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEzODM0LCJPdXRwdXRUb2tlbnMiOjMzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDZUMTY6MTg6MzIuMDkyMjk3Mjk1WiIsIlNlcSI6MzAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjExODgwMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJtbS9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEyNjAsXG4gIFwiTGluZUNvdW50XCI6IDIwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjEyNjA6XFx0Y29uZmlnIEhNTV9NSVJST1JcXG4xMjYxOlxcdFxcdGJvb2xcXG4xMjYyOlxcdFxcdGRlcGVuZHMgb24gTU1VXFxuMTI2MzpcXHRcXG4xMjY0OlxcdGNvbmZpZyBHRVRfRlJFRV9SRUdJT05cXG4xMjY1OlxcdFxcdGJvb2xcXG4xMjY2OlxcdFxcbjEyNjc6XFx0Y29uZmlnIERFVklDRV9QUklWQVRFXFxuMTI2ODpcXHRcXHRib29sIFxcXCJVbmFkZHJlc3NhYmxlIGRldmljZSBtZW1vcnkgKEdQVSBtZW1vcnksIC4uLilcXFwiXFxuMTI2OTpcXHRcXHRkZXBlbmRzIG9uIFpPTkVfREVWSUNFXFxuMTI3MDpcXHRcXHRzZWxlY3QgR0VUX0ZSRUVfUkVHSU9OXFxuMTI3MTpcXHRcXG4xMjcyOlxcdFxcdGhlbHBcXG4xMjczOlxcdFxcdCAgQWxsb3dzIGNyZWF0aW9uIG9mIHN0cnVjdCBwYWdlcyB0byByZXByZXNlbnQgdW5hZGRyZXNzYWJsZSBkZXZpY2VcXG4xMjc0OlxcdFxcdCAgbWVtb3J5OyBpLmUuLCBtZW1vcnkgdGhhdCBpcyBvbmx5IGFjY2Vzc2libGUgZnJvbSB0aGUgZGV2aWNlIChvclxcbjEyNzU6XFx0XFx0ICBncm91cCBvZiBkZXZpY2VzKS4gWW91IGxpa2VseSBhbHNvIHdhbnQgdG8gc2VsZWN0IEhNTV9NSVJST1IuXFxuMTI3NjpcXHRcXG4xMjc3OlxcdGNvbmZpZyBWTUFQX1BGTlxcbjEyNzg6XFx0XFx0Ym9vbFxcbjEyNzk6XFx0XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA2VDE2OjE4OjMyLjA5MjQxNzc5NVoiLCJTZXEiOjMxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo4NTg4MDE0MDY2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFuYWx5c2lzIG9mIEtlcm5lbCBDb25maWd1cmF0aW9uIERlcGVuZGVuY2llcyoqXG5cbk9rYXksIGxldCBtZSBicmVhayB0aGlzIGRvd24uIEl0IHNlZW1zIGxpa2UgYFRFU1RfSE1NYCBpcyBjb250aW5nZW50IG9uIGBERVZJQ0VfUFJJVkFURWAsIGFuZCBgREVWSUNFX1BSSVZBVEVgIGl0c2VsZiBpcyBkZXBlbmRlbnQgb24gYFpPTkVfREVWSUNFYC4gU28sIGEgc3RyYWlnaHRmb3J3YXJkIGRlcGVuZGVuY3kgY2hhaW4uIE5vdywgYERFVklDRV9NSUdSQVRJT05gIGlzIGRlZmluZWQgYXMgYSBib29sZWFuIGV4cHJlc3Npb246IGBNSUdSQVRJT05gIEFORCBgWk9ORV9ERVZJQ0VgLiBUaGlzIG1lYW5zIGlmIEkgYWN0aXZhdGUgYFRFU1RfSE1NYCwgSSdtIGltcGxpY2l0bHkgZW5hYmxpbmcgYERFVklDRV9QUklWQVRFYCwgd2hpY2ggZm9yY2VzIGBaT05FX0RFVklDRWAsIGFuZCBjb25zZXF1ZW50bHksIGBERVZJQ0VfTUlHUkFUSU9OYCBiZWNhdXNlIG9mIHRoZSBgTUlHUkFUSU9OYCBkZXBlbmRlbmN5LlxuXG5Ib2xkIG9uIGEgc2Vjb25kLCB0aGF0IGZlZWxzIGxpa2UgYSBzdGFuZGFyZCBzZXR1cC4gQW5kLCBJIHRoaW5rIEkgcmVtZW1iZXIgdGhhdCBgTUlHUkFUSU9OYCBpcyBvZnRlbiwgYnV0IG5vdCBhbHdheXMsIGVuYWJsZWQgYnkgZGVmYXVsdCB3aGVuIE5VTUEgb3IgQ09NUEFDVElPTiBhcmUgcHJlc2VudC4gSSBzaG91bGQgZG91YmxlLWNoZWNrIHRoYXQgaW4gYG1tL0tjb25maWdgIHRvIGNvbmZpcm0gbXkgdW5kZXJzdGFuZGluZyBvZiB0aGUgaW1wbGljYXRpb25zIGhlcmUuIEkgc2hvdWxkIGFsc28gY2hlY2sgd2hpY2ggY29uZmlndXJhdGlvbnMgZW5hYmxlIGNvbXBhY3Rpb24gb3IgbnVtYSBpbiB0aGF0IGxvY2F0aW9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNDQzNywiT3V0cHV0VG9rZW5zIjozMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjExOCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA2VDE2OjE4OjQwLjY4MDQzNDM5MVoiLCJTZXEiOjMyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNjI3NjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibW0vS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiA2OTAsXG4gIFwiTGluZUNvdW50XCI6IDIwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiA2OTA6XFx0XFx0aGVscFxcbiA2OTE6XFx0XFx0ICBTdXBwb3J0IHRoZSBtaWdyYXRpb24gb2YgcGFnZXMgdG8gb3RoZXIgTlVNQSBub2RlcywgYXZhaWxhYmxlIHRvXFxuIDY5MjpcXHRcXHQgIHVzZXIgc3BhY2UgdGhyb3VnaCBpbnRlcmZhY2VzIGxpa2UgbWlncmF0ZV9wYWdlcygpLCBtb3ZlX3BhZ2VzKCksXFxuIDY5MzpcXHRcXHQgIGFuZCBtYmluZCgpLiBTZWxlY3RpbmcgdGhpcyBvcHRpb24gYWxzbyBlbmFibGVzIHN1cHBvcnQgZm9yIHBhZ2VcXG4gNjk0OlxcdFxcdCAgZGVtb3Rpb24gZm9yIG1lbW9yeSB0aWVyaW5nLlxcbiA2OTU6XFx0XFxuIDY5NjpcXHRjb25maWcgTUlHUkFUSU9OXFxuIDY5NzpcXHRcXHRib29sXFxuIDY5ODpcXHRcXHRkZXBlbmRzIG9uIE1NVVxcbiA2OTk6XFx0XFxuIDcwMDpcXHRjb25maWcgREVWSUNFX01JR1JBVElPTlxcbiA3MDE6XFx0XFx0ZGVmX2Jvb2wgTUlHUkFUSU9OIFxcdTAwMjZcXHUwMDI2IFpPTkVfREVWSUNFXFxuIDcwMjpcXHRcXG4gNzAzOlxcdGNvbmZpZyBBUkNIX0VOQUJMRV9IVUdFUEFHRV9NSUdSQVRJT05cXG4gNzA0OlxcdFxcdGJvb2xcXG4gNzA1OlxcdFxcbiA3MDY6XFx0Y29uZmlnIEFSQ0hfU1VQUE9SVFNfUE1EX1NPRlRMRUFGXFxuIDcwNzpcXHRcXHRib29sXFxuIDcwODpcXHRcXG4gNzA5OlxcdGNvbmZpZyBIVUdFVExCX1BBR0VfU0laRV9WQVJJQUJMRVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wNlQxNjoxODo0MC42ODA1OTg3NjFaIiwiU2VxIjozMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzI3NTU4MTcyMiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBteSBvd246XG5cbioqQW5hbHl6aW5nIHRoZSBgTUlHUkFUSU9OYCBWYXJpYWJsZSoqXG5cblJpZ2h0LCBgTUlHUkFUSU9OYCBpcyBkZWZpbmVkIGFzIGEgQm9vbGVhbiwgYnV0IGhhbmcgb24uLi4gaXQgZG9lc24ndCBoYXZlIGEgc3BlY2lmaWMgcHJvbXB0IGFzc29jaWF0ZWQgd2l0aCBpdC4gVGhhdCdzIGEgYml0IG9kZC4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgd2h5IHRoaXMgdmFyaWFibGUgaXMgYmVpbmcgc2VsZWN0ZWQgb3IgdHJpZ2dlcmVkIGluIHRoZSBmaXJzdCBwbGFjZS4gTXkgaW1tZWRpYXRlIHF1ZXN0aW9uIGlzOiBXaGF0IGNvbmRpdGlvbnMgb3IgcHJvY2Vzc2VzIGFyZSBjYXVzaW5nIGBNSUdSQVRJT05gIHRvIGV2YWx1YXRlIHRvIHRydWU/IEkgbmVlZCB0byB0cmFjZSBiYWNrIHRocm91Z2ggdGhlIGNvZGUgYW5kIGxvZ2ljLiBJJ2xsIG5lZWQgdG8gZmlndXJlIG91dCB0aGUgZGVwZW5kZW5jaWVzIGFuZCBzZWFyY2ggZm9yIHdoZXJldmVyIGBNSUdSQVRJT05gIGlzIGJlaW5nIHVzZWQgdG8gYmUgYWJsZSB0byB1bmRlcnN0YW5kIHRoZSBzeXN0ZW0uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE1MDYzLCJPdXRwdXRUb2tlbnMiOjI0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzAsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0wNlQxNjoxODo0My45NTYxODM5NzNaIiwiU2VxIjozNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI0ODU4MTU2MTcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwic2VsZWN0IE1JR1JBVElPTlwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vS2NvbmZpZz01OTE9Y29uZmlnIE1FTU9SWV9IT1RSRU1PVkVcXG4tLVxcbm1tL0tjb25maWctNTk0LVxcdGRlcGVuZHMgb24gTUVNT1JZX0hPVFBMVUdcXG5tbS9LY29uZmlnOjU5NTpcXHRzZWxlY3QgTUlHUkFUSU9OXFxubW0vS2NvbmZpZy01OTYtXFxuLS1cXG5tbS9LY29uZmlnPTY1ND1jb25maWcgQ09NUEFDVElPTlxcbi0tXFxubW0vS2NvbmZpZy02NTYtXFx0ZGVmYXVsdCB5XFxubW0vS2NvbmZpZzo2NTc6XFx0c2VsZWN0IE1JR1JBVElPTlxcbm1tL0tjb25maWctNjU4LVxcdGRlcGVuZHMgb24gTU1VXFxuLS1cXG5tbS9LY29uZmlnPTY4NT1jb25maWcgTlVNQV9NSUdSQVRJT05cXG4tLVxcbm1tL0tjb25maWctNjg4LVxcdGRlcGVuZHMgb24gTlVNQSBcXHUwMDI2XFx1MDAyNiBNTVVcXG5tbS9LY29uZmlnOjY4OTpcXHRzZWxlY3QgTUlHUkFUSU9OXFxubW0vS2NvbmZpZy02OTAtXFx0aGVscFxcbi0tXFxubW0vS2NvbmZpZz0xMDY3PWNvbmZpZyBDTUFcXG4tLVxcbm1tL0tjb25maWctMTA2OS1cXHRkZXBlbmRzIG9uIE1NVVxcbm1tL0tjb25maWc6MTA3MDpcXHRzZWxlY3QgTUlHUkFUSU9OXFxubW0vS2NvbmZpZy0xMDcxLVxcdHNlbGVjdCBNRU1PUllfSVNPTEFUSU9OXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA2VDE2OjE4OjQ2LjQ0MjAwNzA0WiIsIlNlcSI6MzUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjU3Njg5NTQ4MjYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgTGluZSBvZiBSZWFzb25pbmcgZm9yIHRoaXMgQ29uZmlndXJhdGlvbioqXG5cbk9rYXksIHNvIHRoZSBgQ09NUEFDVElPTmAgb3B0aW9uIGhhcyBiZWVuIHNldCB0byBzZWxlY3QgYE1JR1JBVElPTmAsIHdoaWNoIGlzIHRoZSBkZWZhdWx0IGJlaGF2aW9yLiBUaGF0IG1lYW5zIGBNSUdSQVRJT05gIGlzIGFsbW9zdCBhbHdheXMgZW5hYmxlZC4gR29vZC4gTm93LCBsb29raW5nIGF0IHRoZSBvdGhlciByZXF1aXJlZCBjb21wb25lbnRzLCBJIGtub3cgd2UgbmVlZCBgWk9ORV9ERVZJQ0VgLCBgREVWSUNFX1BSSVZBVEVgLCBhbmQgYFRFU1RfSE1NYC5cblxuTGV0J3Mgc3RhcnQgd2l0aCBgVEVTVF9ITU1gLiBJcyB0aGF0IGVub3VnaD8gSSBzZWUgdGhhdCBgVEVTVF9ITU1gIGRlcGVuZHMgb24gYERFVklDRV9QUklWQVRFYCwgc28gSeKAmWxsIG5lZWQgdG8gZW5hYmxlIHRoYXQgZmlyc3QuIEFuZCwgc2luY2UgYERFVklDRV9QUklWQVRFYCBkZXBlbmRzIG9uIGBaT05FX0RFVklDRWAsIEkgaGF2ZSB0byBlbmFibGUgdGhhdCBhcyB3ZWxsLiBBbHNvLCBsb29raW5nIGNsb3NlciwgSSBzZWUgYFRFU1RfSE1NYCBkZXBlbmRzIG9uIGBUUkFOU1BBUkVOVF9IVUdFUEFHRWAsIHNvIHRoYXQgb25lIGdvZXMgaW4gdGhlIHNldCB0b28uXG5cbk5vdyBJ4oCZbSB3b25kZXJpbmcsIHdoYXQgY29kZSBoYXMgYmVlbiB0b3VjaGVkPyBJcyBpdCBhIGxvY2FsaXplZCBjaGFuZ2Ugb3IgYSBtb3JlIHdpZGVzcHJlYWQgbW9kaWZpY2F0aW9uPyBJIG5lZWQgdG8gY2hlY2sgaWYgYG1pZ3JhdGVfdm1hX2NvbGxlY3RfcG1kYCBpcyB0aGUgb25seSBmdW5jdGlvbiB0aGF0IHdhcyBjaGFuZ2VkLiBGcm9tIHRoZSBsb29rcyBvZiBpdCwgeWVzLiBJdCdzIHRoZSBvbmx5IG9uZSBpbiBgbW0vbWlncmF0ZV9kZXZpY2UuY2AuIFRoYXTigJlzIHJlYXNzdXJpbmcuXG5cbkZpbmFsbHksIGlzIGFueSBvZiB0aGlzIGZ1bmN0aW9uYWxpdHkgZXhwb3NlZCB0byB1c2Vyc3BhY2U/IExvb2tzIGxpa2UgdGhlIGBURVNUX0hNTWAgbW9kdWxlIGRvZXMgdGhpcywgcG90ZW50aWFsbHkgdGhyb3VnaCBhbiBpb2N0bCBvciBzb21ldGhpbmcgc2ltaWxhciB0aGF0IHRyaWdnZXJzIHRoZSBtaWdyYXRpb24uIEkgc2hvdWxkIHByb2JhYmx5IGRpZyBpbnRvIGBsaWIvdGVzdF9obW0uY2AgdG8gc2VlIGV4YWN0bHkgaG93IGl0J3MgdHJpZ2dlcmVkLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNTUyOSwiT3V0cHV0VG9rZW5zIjozMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI0NywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0wNlQxNjoxODo1Mi4yMTA5NjYzOTZaIiwiU2VxIjozNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEyNDExMTQ2OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJtaWdyYXRlX3ZtYV9zZXR1cFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJsaWIvdGVzdF9obW0uY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJsaWIvdGVzdF9obW0uYz0xMTIwPXN0YXRpYyBpbnQgZG1pcnJvcl9taWdyYXRlX3RvX3N5c3RlbShzdHJ1Y3QgZG1pcnJvciAqZG1pcnJvcixcXG4tLVxcbmxpYi90ZXN0X2htbS5jLTExNjQtXFxubGliL3Rlc3RfaG1tLmM6MTE2NTpcXHRcXHRyZXQgPSBtaWdyYXRlX3ZtYV9zZXR1cChcXHUwMDI2YXJncyk7XFxubGliL3Rlc3RfaG1tLmMtMTE2Ni1cXHRcXHRpZiAocmV0KVxcbi0tXFxubGliL3Rlc3RfaG1tLmM9MTE4OT1zdGF0aWMgaW50IGRtaXJyb3JfbWlncmF0ZV90b19kZXZpY2Uoc3RydWN0IGRtaXJyb3IgKmRtaXJyb3IsXFxuLS1cXG5saWIvdGVzdF9obW0uYy0xMjQyLVxcdFxcdFxcdFxcdE1JR1JBVEVfVk1BX1NFTEVDVF9DT01QT1VORDtcXG5saWIvdGVzdF9obW0uYzoxMjQzOlxcdFxcdHJldCA9IG1pZ3JhdGVfdm1hX3NldHVwKFxcdTAwMjZhcmdzKTtcXG5saWIvdGVzdF9obW0uYy0xMjQ0LVxcdFxcdGlmIChyZXQpXFxuLS1cXG5saWIvdGVzdF9obW0uYz0xNjUzPXN0YXRpYyB2bV9mYXVsdF90IGRtaXJyb3JfZGV2bWVtX2ZhdWx0KHN0cnVjdCB2bV9mYXVsdCAqdm1mKVxcbi0tXFxubGliL3Rlc3RfaG1tLmMtMTcwNS1cXHQvKlxcbmxpYi90ZXN0X2htbS5jOjE3MDY6XFx0ICogSW4gcHJhY3RpY2UgbWlncmF0ZV92bWFfc2V0dXAoKSBzaG91bGQgbmV2ZXIgZmFpbCB1bmxlc3MgdGhlXFxubGliL3Rlc3RfaG1tLmMtMTcwNy1cXHQgKiB0ZXN0IGlzIHdyb25nIGFzIGl0IGp1c3QgdGVzdHMgc29tZSBzdGF0aWMgVk1BIHByb3BlcnRpZXMuXFxubGliL3Rlc3RfaG1tLmMtMTcwOC1cXHQgKi9cXG5saWIvdGVzdF9obW0uYzoxNzA5OlxcdGlmIChtaWdyYXRlX3ZtYV9zZXR1cChcXHUwMDI2YXJncykpIHtcXG5saWIvdGVzdF9obW0uYy0xNzEwLVxcdFxcdHJldCA9IFZNX0ZBVUxUX1NJR0JVUztcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDZUMTY6MTg6NTIuMzM1MDgzMTA1WiIsIlNlcSI6MzcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQyMTUyMjE0ODYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIG15IG93biwgZ2l2ZW4gbXkgZXhwZXJ0aXNlOlxuXG4qKk15IEltbWVkaWF0ZSBBc3Nlc3NtZW50OiBpb2N0bCBJbnRlZ3JhdGlvbiBhbmQgTWlncmF0aW9uIEZ1bmN0aW9ucyoqXG5cblJpZ2h0LCBzbyBJJ20gc2VlaW5nIHRoYXQgYGRtaXJyb3JfbWlncmF0ZV90b19zeXN0ZW1gIGFuZCBgZG1pcnJvcl9taWdyYXRlX3RvX2RldmljZWAgYXJlIGJlaW5nIGludm9rZWQgdGhyb3VnaCBpb2N0bHMuIFRoYXQncyBpbW1lZGlhdGVseSBpbnRlcmVzdGluZywgYmVjYXVzZSBpdCBnaXZlcyBtZSBhIGNsZWFyIGlkZWEgb2YgdGhlIGludGVuZGVkIHVzZSBjYXNlLCBhbmQgdGhlIGxldmVsIG9mIGludGVyYWN0aW9uIHRoZSBjYWxsZXIgaGFzIHdpdGggdGhlIGRldmljZS4gSS9PIGNvbnRyb2wgY2FsbHMgYXJlIHR5cGljYWxseSBob3cgd2UgZXhwb3NlIGxvdy1sZXZlbCBkZXZpY2UgY29udHJvbCBhbmQgY29uZmlndXJhdGlvbiB0byB1c2VyIHNwYWNlLCBvciBvdGhlciBzeXN0ZW0gY29tcG9uZW50cy5cblxuVGhpcyBzdHJvbmdseSBzdWdnZXN0cyB0aGF0IHRoZXNlIG1pZ3JhdGlvbiBmdW5jdGlvbnMgYXJlIGludGltYXRlbHkgdGllZCB0byB0aGUgY29yZSBkZXZpY2UgZHJpdmVyIG9yIGl0cyBhc3NvY2lhdGVkIGludGVyZmFjZS4gSXQgaXMgbGlrZWx5IGEgcHJpdmlsZWdlZCBvcGVyYXRpb24sIHJlcXVpcmluZyBhIGNhcmVmdWxseSBjcmFmdGVkIGlvY3RsIHJlcXVlc3QuIFRoZSBmYWN0IHRoYXQgdGhlIGZ1bmN0aW9ucyBhcmUgbmFtZWQgXCJtaWdyYXRlXCIgaXMgYWxzbyBzaWduaWZpY2FudC4gSSBhbSBleHBlY3Rpbmcgc29tZSBzb3J0IG9mIGRhdGEgbW92ZW1lbnQgb3IgbWFuYWdlbWVudCBtZWNoYW5pc20uIFBlcmhhcHMgdGhlc2UgZnVuY3Rpb25zIG9yY2hlc3RyYXRlIHRoZSBtb3ZlbWVudCBvZiBkYXRhIGJsb2NrcyBiZXR3ZWVuIHN5c3RlbSBtZW1vcnkgYW5kIHRoZSBkZXZpY2UncyBvd24gc3RvcmFnZSwgb3IgdmljZS12ZXJzYSwgbGlrZWx5IGZvciBzb21lIG9wdGltaXphdGlvbiBwdXJwb3NlIChlLmcuLCBkYXRhIGNhY2hpbmcsIGxvYWQgYmFsYW5jaW5nLCBvciBhIG1pZ3JhdGlvbiB0b3dhcmQgb3IgYXdheSBmcm9tIGEgZGVkaWNhdGVkIG1lbW9yeSByZWdpb24pLiBUaGUgbmFtaW5nIGNvbnZlbnRpb25zIG1ha2UgbWUgYW50aWNpcGF0ZSBzb21lIHNvcnQgb2YgbWlycm9yaW5nIG9wZXJhdGlvbnMuXG5cbk15IG5leHQgc3RlcCBpcyB0byBleGFtaW5lIHRoZSBkcml2ZXIgY29kZSB0aGF0IGNhbGxzIHRoZXNlIGlvY3RscyB0byB1bmRlcnN0YW5kIHRoZSBsYXJnZXIgY29udGV4dC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTY1MjMsIk91dHB1dFRva2VucyI6MzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyOSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0wNlQxNjoxODo1Ni41NTAzMDc0NjFaIiwiU2VxIjozOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjc2MTI4NzQ4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImRtaXJyb3JfbWlncmF0ZV90b19zeXN0ZW1cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibGliL3Rlc3RfaG1tLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibGliL3Rlc3RfaG1tLmM9MTEwNz1kbWlycm9yX3N1Y2Nlc3NmdWxfbWlncmF0ZWRfcGFnZXMoc3RydWN0IG1pZ3JhdGVfdm1hICptaWdyYXRlKVxcbi0tXFxubGliL3Rlc3RfaG1tLmMtMTExOS1cXG5saWIvdGVzdF9obW0uYzoxMTIwOnN0YXRpYyBpbnQgZG1pcnJvcl9taWdyYXRlX3RvX3N5c3RlbShzdHJ1Y3QgZG1pcnJvciAqZG1pcnJvcixcXG5saWIvdGVzdF9obW0uYy0xMTIxLVxcdFxcdFxcdFxcdCAgICAgc3RydWN0IGhtbV9kbWlycm9yX2NtZCAqY21kKVxcbi0tXFxubGliL3Rlc3RfaG1tLmM9MTUxMz1zdGF0aWMgbG9uZyBkbWlycm9yX2ZvcHNfdW5sb2NrZWRfaW9jdGwoc3RydWN0IGZpbGUgKmZpbHAsXFxuLS1cXG5saWIvdGVzdF9obW0uYy0xNTUwLVxcdGNhc2UgSE1NX0RNSVJST1JfTUlHUkFURV9UT19TWVM6XFxubGliL3Rlc3RfaG1tLmM6MTU1MTpcXHRcXHRyZXQgPSBkbWlycm9yX21pZ3JhdGVfdG9fc3lzdGVtKGRtaXJyb3IsIFxcdTAwMjZjbWQpO1xcbmxpYi90ZXN0X2htbS5jLTE1NTItXFx0XFx0YnJlYWs7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA2VDE2OjE4OjU2LjYyNjQ0MTIzOVoiLCJTZXEiOjM5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo2OTQ5OTYwODIxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFuYWx5c2lzIG9mIHRoZSBgSE1NX0RNSVJST1JfTUlHUkFURWAgUGF0aCoqXG5cbk9rYXksIHNvIHRoZSBgSE1NX0RNSVJST1JfTUlHUkFURV9UT19TWVNgIGFuZCBgSE1NX0RNSVJST1JfTUlHUkFURV9UT19ERVZgIGlvY3RscyDigJMgdGhvc2UgYXJlIGRlZmluaXRlbHkgdGhlIGVudHJ5IHBvaW50cywgd2hpY2ggbWVhbnMgdXNlcnNwYWNlIGNhbiB0cmlnZ2VyIHRoaXMgdGhyb3VnaCBgVEVTVF9ITU1gLiBBbmQsIEkga25vdyBEUk0gZHJpdmVycyBsaWtlIGBub3V2ZWF1YCBhbmQgYGFtZGtmZGAgYXJlIGFsc28gbGV2ZXJhZ2luZyB0aGlzLCB3aGljaCBmdXJ0aGVyIHZhbGlkYXRlcyBpdHMgaW1wb3J0YW5jZS4gRW5hYmxpbmcgYFRFU1RfSE1NYCBzZWVtcyBsaWtlIGEgc29saWQsIGZvY3VzZWQgYXBwcm9hY2ggZm9yIG91ciBwdXJwb3Nlcy5cblxuTm93LCBJIG5lZWQgdG8gcGlucG9pbnQgdGhlIGNyaXRpY2FsIGZ1bmN0aW9uLiBMZXQncyBzZWUuLi4geWVzLCBgbWlncmF0ZV92bWFfY29sbGVjdF9wbWRgIGlzIHRoZSBzcGVjaWZpYyBmdW5jdGlvbiB3aGVyZSB0aGUgY2hhbmdlcyByZXNpZGUuIEdvb2QuIElzIHRoaXMgYSBob3QgcGF0aCwgdGhvdWdoPyBObywgaXQgc2VlbXMgdG8gYmUgcGFydCBvZiBkZXZpY2UgbWVtb3J5IG1pZ3JhdGlvbiwgd2hpY2ggaXNuJ3QgdGhlIGdlbmVyaWMsIGZyZXF1ZW50bHktY2FsbGVkIGNvZGUgcGF0aCBsaWtlIGBzY2hlZHVsZSgpYCBvciBga21hbGxvYygpYC4gVGhhdCdzIGFjdHVhbGx5IGFkdmFudGFnZW91cy4gVGhpcyBtYWtlcyBpdCBhIGdvb2QgY2FuZGlkYXRlIGZvciBmb2N1c2VkIGFuYWx5c2lzLlxuXG5BbHJpZ2h0LCBsZXQncyBuYWlsIGRvd24gdGhlIGNvbmZpZ3VyYXRpb24gcmVxdWlyZW1lbnRzLiBXZSBuZWVkIGBURVNUX0hNTWAsIG9idmlvdXNseS4gV2UgYWxzbyBuZWVkIGBERVZJQ0VfUFJJVkFURWAsIGBaT05FX0RFVklDRWAsIGFuZCBgVFJBTlNQQVJFTlRfSFVHRVBBR0VgLiBBaCwgYnV0IGBUUkFOU1BBUkVOVF9IVUdFUEFHRWAgaXMgb2Z0ZW4gZW5hYmxlZCBieSBkZWZhdWx0IGluIHN5emJvdCBjb25maWd1cmF0aW9ucywgc28gaXQgc2hvdWxkIGJlIGxlc3Mgb2YgYSBjb25jZXJuLiBUaGUgbWFpbiBmb2N1cyBtdXN0IGJlIGBURVNUX0hNTWAsIGJ1dCB3aWxsIHRoYXQgYXV0by1lbmFibGUgdGhlIG90aGVycz8gTm8sIGxvb2tpbmcgaW50byBpdCwgYFRFU1RfSE1NYCAqZGVwZW5kcyogb24gYERFVklDRV9QUklWQVRFYCwgc28gd2UgbmVlZCB0byBlbnN1cmUgdGhhdCBpcyBwcmVzZW50LiBBbmQgYERFVklDRV9QUklWQVRFYCAqZGVwZW5kcyogb24gYFpPTkVfREVWSUNFYCwgc28gdGhhdCBhbHNvIG11c3QgYmUgcHJlc2VudC4gSSBzaG91bGQgY29uZmlybSB0aGUgZGVwZW5kYW5jaWVzIG9mIGBaT05FX0RFVklDRWAgYXMgd2VsbC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTcxMDEsIk91dHB1dFRva2VucyI6MjYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozNTksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDZUMTY6MTk6MDMuNTc2NDA1MzVaIiwiU2VxIjo0MCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjY4NTk3MTIxLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBaT05FX0RFVklDRVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vS2NvbmZpZz0xMjMxPWNvbmZpZyBaT05FX0RNQTMyXFxuLS1cXG5tbS9LY29uZmlnLTEyMzUtXFxubW0vS2NvbmZpZzoxMjM2OmNvbmZpZyBaT05FX0RFVklDRVxcbm1tL0tjb25maWctMTIzNy1cXHRib29sIFxcXCJEZXZpY2UgbWVtb3J5IChwbWVtLCBITU0sIGV0Yy4uLikgaG90cGx1ZyBzdXBwb3J0XFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wNlQxNjoxOTowMy42NDUwMTE1NTFaIiwiU2VxIjo0MSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDI2NzMzNjcwNCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRha2Ugb24gdGhlIGBtbS9LY29uZmlnYCBmaWxlLCBzcGVjaWZpY2FsbHkgYXJvdW5kIGBaT05FX0RFVklDRWA6XG5cbioqRGl2aW5nIGludG8gYG1tL0tjb25maWdgIGFuZCBgWk9ORV9ERVZJQ0VgKipcblxuQWxyaWdodCwgbGV0J3MgZ2V0IGludG8gdGhlIG5pdHR5LWdyaXR0eSBvZiBtZW1vcnkgbWFuYWdlbWVudCBjb25maWd1cmF0aW9uLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgYFpPTkVfREVWSUNFYCBpcyBkZWZpbmVkIHdpdGhpbiB0aGUga2VybmVsJ3MgS2NvbmZpZyBzeXN0ZW0uIE15IGltbWVkaWF0ZSBnb2FsIGlzIHRvIGZpZ3VyZSBvdXQgdGhlIGRlcGVuZGVuY2llcywgY29uc3RyYWludHMsIGFuZCBpbXBsaWNhdGlvbnMgb2YgZW5hYmxpbmcgb3IgZGlzYWJsaW5nIHRoaXMgem9uZS4gSSdtIHRoaW5raW5nLCBpcyB0aGlzIGEgc2ltcGxlIGJvb2xlYW4sIG9yIGRvZXMgaXQgb2ZmZXIgY29uZmlndXJhdGlvbiBvcHRpb25zPyBXaGF0IG90aGVyIGZlYXR1cmVzIG9yIGRyaXZlcnMgcmVseSBvbiBpdD8gQXJlIHRoZXJlIGFueSBwZXJmb3JtYW5jZSBjb25zaWRlcmF0aW9ucyB0aWVkIHRvIGl0P1xuXG5JJ20gZXhwZWN0aW5nIHRvIHNlZSBkZXBlbmRlbmNpZXMgb24gc3BlY2lmaWMgaGFyZHdhcmUgYXJjaGl0ZWN0dXJlcyBvciBmZWF0dXJlcyByZWxhdGVkIHRvIHBlcnNpc3RlbnQgbWVtb3J5LCBOVkRJTU1zLCBvciBwb3NzaWJseSBldmVuIGNlcnRhaW4gYmxvY2sgZGV2aWNlcy4gVGhlIGBtbS9LY29uZmlnYCBmaWxlIG9mdGVuIHByb3ZpZGVzIGNsdWVzIGFib3V0IHRoZSB1bmRlcmx5aW5nIGRlc2lnbiBkZWNpc2lvbnMg4oCTIHdoeSB3YXMgYFpPTkVfREVWSUNFYCBpbnRyb2R1Y2VkIGluIHRoZSBmaXJzdCBwbGFjZT8gV2hhdCBwcm9ibGVtIGRvZXMgaXQgc29sdmUsIG9yIHdoYXQgZnVuY3Rpb25hbGl0eSBkb2VzIGl0IGVuYWJsZT8gSSdsbCBiZSBsb29raW5nIGZvciByZWxhdGlvbnNoaXBzIHdpdGggb3RoZXIgem9uZXMgbGlrZSBgWk9ORV9ETUFgIG9yIGBaT05FX0hJR0hNRU1gLCBhbmQgd2hldGhlciBgWk9ORV9ERVZJQ0VgIG1pZ2h0IGltcGx5IGFueSBtb2RpZmljYXRpb25zIHRvIHRoZSBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IGFsZ29yaXRobXMgKGJ1ZGR5IGFsbG9jYXRvciwgcGFnZSBhbGxvY2F0aW9uLCBldGMuKS5cblxuSSdsbCBiZSBwYXlpbmcgY2xvc2UgYXR0ZW50aW9uIHRvIGFueSBjb25kaXRpb25hbCBzdGF0ZW1lbnRzIG9yIGBzZWxlY3RgIGRpcmVjdGl2ZXMuIFRob3NlIGFyZSBnb2luZyB0byB0ZWxsIG1lIHdoYXQgZWxzZSAqbXVzdCogYmUgZW5hYmxlZCBvciAqY2FuKiBiZSBkaXNhYmxlZCBpZiBgWk9ORV9ERVZJQ0VgIGlzIGNob3Nlbi4gSSdsbCBuZWVkIHRvIHRyYWNlIHRoZSBpbXBsaWNhdGlvbnMgb2YgZW5hYmxpbmcgdGhpcy4gVGhpcyBpcyB0aGUgc3RhcnRpbmcgcG9pbnQgZm9yIHVuZGVyc3RhbmRpbmcgaG93IGRldmljZSBtZW1vcnkgaXMgaW5jb3Jwb3JhdGVkIGludG8gdGhlIG92ZXJhbGwgbWVtb3J5IG1hcCBhbmQgaG93IHRoZSBrZXJuZWwgaGFuZGxlcyBpdC4gR290dGEgZW5zdXJlIEkgaGF2ZSBhIGNvbXBsZXRlIHVuZGVyc3RhbmRpbmcgb2YgdGhlIGtlcm5lbCdzIG1lbW9yeSBhcmNoaXRlY3R1cmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE3OTY1LCJPdXRwdXRUb2tlbnMiOjMzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDZUMTY6MTk6MDcuOTEyMzUxNTY1WiIsIlNlcSI6NDIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjExMTE5OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJtbS9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEyMzAsXG4gIFwiTGluZUNvdW50XCI6IDIwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjEyMzA6XFx0XFxuMTIzMTpcXHRjb25maWcgWk9ORV9ETUEzMlxcbjEyMzI6XFx0XFx0Ym9vbCBcXFwiU3VwcG9ydCBETUEzMiB6b25lXFxcIiBpZiBBUkNIX0hBU19aT05FX0RNQV9TRVRcXG4xMjMzOlxcdFxcdGRlcGVuZHMgb24gIVg4Nl8zMlxcbjEyMzQ6XFx0XFx0ZGVmYXVsdCB5IGlmIEFSTTY0XFxuMTIzNTpcXHRcXG4xMjM2OlxcdGNvbmZpZyBaT05FX0RFVklDRVxcbjEyMzc6XFx0XFx0Ym9vbCBcXFwiRGV2aWNlIG1lbW9yeSAocG1lbSwgSE1NLCBldGMuLi4pIGhvdHBsdWcgc3VwcG9ydFxcXCJcXG4xMjM4OlxcdFxcdGRlcGVuZHMgb24gTUVNT1JZX0hPVFBMVUdcXG4xMjM5OlxcdFxcdGRlcGVuZHMgb24gTUVNT1JZX0hPVFJFTU9WRVxcbjEyNDA6XFx0XFx0ZGVwZW5kcyBvbiBTUEFSU0VNRU1fVk1FTU1BUFxcbjEyNDE6XFx0XFx0c2VsZWN0IFhBUlJBWV9NVUxUSVxcbjEyNDI6XFx0XFxuMTI0MzpcXHRcXHRoZWxwXFxuMTI0NDpcXHRcXHQgIERldmljZSBtZW1vcnkgaG90cGx1ZyBzdXBwb3J0IGFsbG93cyBmb3IgZXN0YWJsaXNoaW5nIHBtZW0sXFxuMTI0NTpcXHRcXHQgIG9yIG90aGVyIGRldmljZSBkcml2ZXIgZGlzY292ZXJlZCBtZW1vcnkgcmVnaW9ucywgaW4gdGhlXFxuMTI0NjpcXHRcXHQgIG1lbW1hcC4gVGhpcyBhbGxvd3MgcGZuX3RvX3BhZ2UoKSBsb29rdXBzIG9mIG90aGVyd2lzZVxcbjEyNDc6XFx0XFx0ICBcXFwiZGV2aWNlLXBoeXNpY2FsXFxcIiBhZGRyZXNzZXMgd2hpY2ggaXMgbmVlZGVkIGZvciBEQVgsIFBDSV9QMlBETUEsIGFuZFxcbjEyNDg6XFx0XFx0ICBERVZJQ0VfUFJJVkFURSBmZWF0dXJlcyBhbW9uZyBvdGhlcnMuXFxuMTI0OTpcXHRcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDZUMTY6MTk6MDcuOTEyNDY0MzA1WiIsIlNlcSI6NDMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjEzNDk1OTU4NDU3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKktlcm5lbCBDb25maWd1cmF0aW9uIGZvciBEZXZpY2UgTWVtb3J5IE1pZ3JhdGlvbiBUZXN0aW5nKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBHaXZlbiBteSB1bmRlcnN0YW5kaW5nIG9mIHRoZSBrZXJuZWwgbWVtb3J5IG1hbmFnZW1lbnQgbGFuZHNjYXBlLCBhbmQgdGhlIGNvbnRleHQgb2YgZGV2aWNlIG1lbW9yeSBtaWdyYXRpb24sIEkgbmVlZCB0byBpZGVudGlmeSB0aGUga2V5IGNvbmZpZ3VyYXRpb24gb3B0aW9ucyByZXF1aXJlZCB0byBmdWxseSB0ZXN0IHRoaXMgcGF0Y2guIEknbSBmb2N1c2luZyBvbiB0aGUgaW50ZXJhY3Rpb24gd2l0aCBkZXZpY2UgbWVtb3J5LCBob3RwbHVnLCBhbmQgbWlncmF0aW9uLlxuXG5GaXJzdCwgSSBoYXZlIHRvIGNvbnNpZGVyIHRoZSBjb3JlIHByZS1yZXF1aXNpdGVzOiBgTUVNT1JZX0hPVFBMVUdgLCBgTUVNT1JZX0hPVFJFTU9WRWAsIGFuZCBgU1BBUlNFTUVNX1ZNRU1NQVBgLiBUaGVzZSBhcmUgcHJldHR5IHN0YW5kYXJkLCBhbmQgbGlrZWx5IGVuYWJsZWQgaW4gdGhlIHRlc3QgZW52aXJvbm1lbnRzIEknbSB3b3JraW5nIHdpdGgsIHNvIEkgd29uJ3QgbGlzdCB0aG9zZSBkaXJlY3RseS5cblxuTm93LCBsZXQncyBnZXQgdG8gdGhlIHNwZWNpZmljcy4gTG9va2luZyBhdCB0aGUgZGVwZW5kZW5jaWVzLCBJIHNob3VsZCBsaXN0IGBURVNUX0hNTWAsIGBERVZJQ0VfUFJJVkFURWAsIGFuZCBgWk9ORV9ERVZJQ0VgLiBMZXQncyBjb25maXJtIHRoYXQgYFRFU1RfSE1NYCBpcyBhIHRyaXN0YXRlLCB0byBhdm9pZCBjb25mdXNpb24uIFllcCwgY29uZmlybWVkLCBpdCdzIGEgdHJpc3RhdGUgKFwiVGVzdCBITU0gKEhldGVyb2dlbmVvdXMgTWVtb3J5IE1hbmFnZW1lbnQpXCIpLiBTbywgYFRFU1RfSE1NPXlgIG9yIGBURVNUX0hNTT1tYCB3b3VsZCB3b3JrLiBJdOKAmXMgc2ltcGxlc3QgdG8ganVzdCBsaXN0IGBURVNUX0hNTWAuXG5cbk5leHQsIEkgbmVlZCB0byBjaGVjayBgREVWSUNFX01JR1JBVElPTmAuIEl0J3MgYSBgZGVmX2Jvb2xgIHRoYXQgZGVwZW5kcyBvbiBgTUlHUkFUSU9OYCBhbmQgYFpPTkVfREVWSUNFYC4gSSBkb24ndCBzdHJpY3RseSAqbmVlZCogdG8gbGlzdCBpdCBiZWNhdXNlIG9mIHRoZSBkZXBlbmRlbmNpZXMsIGJ1dCBpdCBtaWdodCBiZSB3b3J0aCBpbmNsdWRpbmcgZm9yIGNsYXJpdHkuIEknbGwgYWRkIGl0IHRvIHRoZSBsaXN0LCBqdXN0IHRvIGJlIHRob3JvdWdoLCBidXQgbm90ZSB0aGUgZGVwZW5kZW5jeS5cblxuT2theSwgd2FpdC4uLiBUaGlua2luZyBhYm91dCBpdCwgYFRFU1RfSE1NYCBkZWZhdWx0cyB0byBhIG1vZHVsZS4gR2l2ZW4gdGhlIGluc3RydWN0aW9ucywgd2hpY2ggc2F5IFwiTGlzdCBvZiBrZXJuZWwgY29uZmlnIGZsYWdzIHRoYXQgbXVzdCBiZSBleHBsaWNpdGx5IGVuYWJsZWQgdG8gY29tcGlsZSBhbmQgdGVzdCB0aGUgbW9kaWZpZWQgY29kZSxcIiBib3RoIGBURVNUX0hNTT15YCBhbmQgYFRFU1RfSE1NPW1gIGFyZSBleHBsaWNpdGx5IGVuYWJsZWQgYnkgZGVmaW5pdGlvbi4gU28sIG15IGluaXRpYWwgbGlzdCBpcyBnb29kOlxuXG4tICAgYFRFU1RfSE1NYFxuLSAgIGBERVZJQ0VfUFJJVkFURWBcbi0gICBgWk9ORV9ERVZJQ0VgXG5cbk5vdywgbGV0J3MgcmV2aWV3IHRoZSBwYXRjaCBpdHNlbGYuIEkgc2VlIHRoZSBjb2RlIGNoYW5nZXMgd2hpY2ggaW52b2x2ZSBjaGVja3MgZm9yIGBwdGVfcHJlc2VudGAgYmVmb3JlIGNhbGxpbmcgYHB0ZV9wZm5gIG9yIGBwdGVfZGlydHlgLiBUaGlzIGlzIGEgY2xlYXIgc2FmZXR5IGZpeCwgcHJldmVudGluZyBwb3RlbnRpYWwgbnVsbCBwb2ludGVyIGRlcmVmZXJlbmNlcyBvciBvdGhlciB1bmRlZmluZWQgYmVoYXZpb3Igd2hlbiBvcGVyYXRpbmcgb24gUFRFcy4gVGhpcyBpcyByb2J1c3QuXG5cblRoZSBwYXRjaCdzIGFyZWEgb2YgaW1wYWN0IGlzIGBtaWdyYXRlX3ZtYV9jb2xsZWN0X3BtZGAuIFRoaXMgbWVhbnMgdGhlIGZpeCBpcyBkZWZpbml0ZWx5IHJlbGV2YW50IHRvIGRldmljZSBtZW1vcnkgbWlncmF0aW9uLCBwb3RlbnRpYWxseSB0cmlnZ2VyZWQgYnkgdGhlIGBURVNUX0hNTWAgbW9kdWxlLiBUaGUgcGF0Y2ggZGlyZWN0bHkgYWRkcmVzc2VzIGEgYnVnLlxuXG5Pa2F5LCBJJ20gc2F0aXNmaWVkLiBMZXQncyBjYWxsIGBzZXQtcmVzdWx0c2AuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE4Njg1LCJPdXRwdXRUb2tlbnMiOjEyNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjU0NiwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA2VDE2OjE5OjIxLjQwODQyNjY2MloiLCJTZXEiOjQ0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjgzOTExOTU1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJURVNUX0hNTVwiLFxuICAgIFwiREVWSUNFX1BSSVZBVEVcIixcbiAgICBcIlpPTkVfREVWSUNFXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwibWlncmF0ZV92bWFfY29sbGVjdF9wbWRcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRzIG1pc3NpbmcgcHRlX3ByZXNlbnQoKSBjaGVja3MgaW4gbWlncmF0ZV92bWFfY29sbGVjdF9wbWQoKSBiZWZvcmUgY2FsbGluZyBwdGVfcGZuKCkgYW5kIHB0ZV9kaXJ0eSgpLiBUaGlzIGlzIGZ1bmN0aW9uYWwgY29yZSBrZXJuZWwvbW0gY29kZSByZWFjaGFibGUgdmlhIGRldmljZSBtZW1vcnkgbWlncmF0aW9uIHBhdGhzLCB3aGljaCBjYW4gYmUgdHJpZ2dlcmVkIGZyb20gdXNlcnNwYWNlIHVzaW5nIHRoZSBURVNUX0hNTSBtb2R1bGUuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiVEVTVF9ITU1cIixcbiAgICBcIkRFVklDRV9QUklWQVRFXCIsXG4gICAgXCJaT05FX0RFVklDRVwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcIm1pZ3JhdGVfdm1hX2NvbGxlY3RfcG1kXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcyBtaXNzaW5nIHB0ZV9wcmVzZW50KCkgY2hlY2tzIGluIG1pZ3JhdGVfdm1hX2NvbGxlY3RfcG1kKCkgYmVmb3JlIGNhbGxpbmcgcHRlX3BmbigpIGFuZCBwdGVfZGlydHkoKS4gVGhpcyBpcyBmdW5jdGlvbmFsIGNvcmUga2VybmVsL21tIGNvZGUgcmVhY2hhYmxlIHZpYSBkZXZpY2UgbWVtb3J5IG1pZ3JhdGlvbiBwYXRocywgd2hpY2ggY2FuIGJlIHRyaWdnZXJlZCBmcm9tIHVzZXJzcGFjZSB1c2luZyB0aGUgVEVTVF9ITU0gbW9kdWxlLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+IHsKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOyAKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iKSB7CgkJCQkJc3RhdHMubGxtLmNvdW50Kys7CgkJCQkJc3RhdHMubGxtLnRva2VucyArPSAocy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2Vucyk7CgkJCQkJc3RhdHMubGxtLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0gZWxzZSBpZiAocy5UeXBlID09PSAidG9vbCIpIHsKCQkJCQlzdGF0cy50b29sLmNvdW50Kys7CgkJCQkJc3RhdHMudG9vbC5kdXJhdGlvbiArPSBkdXI7CgkJCQl9CgkJCX0pOwoKCQkJY29uc3QgYXZnTGxtRHVyID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0uZHVyYXRpb24gLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdMbG1Ub2tlbiA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLnRva2VucyAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z1Rvb2xEdXIgPSBzdGF0cy50b29sLmNvdW50ID4gMCA/IChzdGF0cy50b29sLmR1cmF0aW9uIC8gc3RhdHMudG9vbC5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgoJCQljb25zdCBsbG1TdW1hcnlDZWxscyA9IFtzdGF0cy5sbG0uY291bnQsIHN0YXRzLmxsbS50b2tlbnMsIGF2Z0xsbVRva2VuLCBzdGF0cy5sbG0uZHVyYXRpb24sIGF2Z0xsbUR1cl07CgkJCWNvbnN0IHRvb2xTdW1tYXJ5Q2VsbHMgPSBbc3RhdHMudG9vbC5jb3VudCwgc3RhdHMudG9vbC5kdXJhdGlvbiwgYXZnVG9vbER1cl07CgoJCQljb25zdCBsbG1TdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsbG1fc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCWxsbVN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCBsbG1UciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCWxsbVN1bWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQlsbG1Uci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQlsbG1TdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZChsbG1Ucik7CgoJCQljb25zdCB0b29sU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJdG9vbFN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCB0b29sVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQl0b29sU3VtbWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQl0b29sVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJdG9vbFN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKHRvb2xUcik7CgkJfQoKCQlmdW5jdGlvbiBkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGZpbHRlcmVkU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IFsibGxtIiwgInRvb2wiXS5pbmNsdWRlcyhkLlR5cGUpKTsKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnRHVyYXRpb24nKTsKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsgCgoJCQlmaWx0ZXJlZFN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQkKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOwoJCQkJbGV0IHRvb2x0aXAgPSBzLk5hbWU7CgkJCQlpZiAocy5UeXBlID09PSAibGxtIiAmJiBzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgkJCQlkYXRhLmFkZFJvdyhbYCR7cy5TZXF9YCwgZHVyLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVGltZSBDb25zdW1wdGlvbiBvZiBMTE0vVG9vbCBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNL1Rvb2wgU3RlcHMnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnU2Vjb25kcycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZHVyYXRpb25fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGxsbVN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBkLlR5cGUgPT09ICJsbG0iKTsKCQkJaWYgKGxsbVN0ZXBzLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnVG9rZW5zJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3N0eWxlJ30pOwkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsJCgoJCQljb25zdCBhZ2VudENvbG9ycyA9IHt9OwoJCQljb25zdCBwYWxldHRlID0gWycjNDI4NUY0JywgJyNEQjQ0MzcnLCAnI0Y0QjQwMCcsICcjMEY5RDU4JywgJyNBQjQ3QkMnLCAnIzAwQUNDMSddOwoJCQlsZXQgY29sb3JJZHggPSAwOwoJCQljb25zdCBhZ2VudExMTUNvdW50cyA9IHt9OwoJCQlsbG1TdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJaWYgKCFhZ2VudENvbG9yc1tzLk5hbWVdKSB7CgkJCQkJYWdlbnRDb2xvcnNbcy5OYW1lXSA9IHBhbGV0dGVbY29sb3JJZHggJSBwYWxldHRlLmxlbmd0aF07CgkJCQkJY29sb3JJZHgrKzsKCQkJCX0KCgkJCQlhZ2VudExMTUNvdW50c1tzLk5hbWVdID0gKGFnZW50TExNQ291bnRzW3MuTmFtZV0gfHwgMCkgKyAxOwoJCQkJY29uc3QgbGFiZWwgPSBgJHtzLk5hbWV9LSR7YWdlbnRMTE1Db3VudHNbcy5OYW1lXX1gOwoJCQkJY29uc3QgdG90YWxUb2tlbnMgPSBzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zOwoJCQkJY29uc3Qgc3R5bGUgPSBgY29sb3I6ICR7YWdlbnRDb2xvcnNbcy5OYW1lXX1gOwoJCQkJbGV0IHRvb2x0aXAgPSBgVG90YWwgVG9rZW5zOiAke3RvdGFsVG9rZW5zfVxuKEluOiAke3MuSW5wdXRUb2tlbnN9LCBPdXQ6ICR7cy5PdXRwdXRUb2tlbnN9LCBUaG91Z2h0czogJHtzLk91dHB1dFRob3VnaHRzVG9rZW5zfSlgOwoJCQkJaWYgKHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCgkJCQlkYXRhLmFkZFJvdyhbbGFiZWwsIHRvdGFsVG9rZW5zLCBzdHlsZSwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1Rva2VuIENvbnN1bXB0aW9uIGJ5IExMTSBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNIENhbGwgU2VxdWVuY2UnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnQ29uc3VtZWQgVG9rZW5zJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b2tlbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoJCWxldCBhbGxFeHBhbmRlZCA9IGZhbHNlOwoJCWZ1bmN0aW9uIHRvZ2dsZUFsbERldGFpbHMoKSB7CgkJCWFsbEV4cGFuZGVkID0gIWFsbEV4cGFuZGVkOwoJCQlkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdkZXRhaWxzJykuZm9yRWFjaChkID0+IHsKCQkJCWlmIChhbGxFeHBhbmRlZCkgZC5zZXRBdHRyaWJ1dGUoJ29wZW4nLCAnJyk7CgkJCQllbHNlIGQucmVtb3ZlQXR0cmlidXRlKCdvcGVuJyk7CgkJCX0pOwoJCX0KCTwvc2NyaXB0PgoKCjwvYm9keT4KPC9odG1sPgo=" },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-workflow74q9w[0].run-triage(0) Phase: Succeeded StartedAt: 2026-07-06 15:35:28 +0000 UTC FinishedAt: 2026-07-06 16:19:23 +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": "820d5dfede0cd55dcbc89ce96fcfbb11b7c457ba", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "TEST_HMM", "DEVICE_PRIVATE", "ZONE_DEVICE" ], "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": "820d5dfede0cd55dcbc89ce96fcfbb11b7c457ba", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "TEST_HMM", "DEVICE_PRIVATE", "ZONE_DEVICE" ], "series_id": "12e810ec-3ca6-4bf6-a554-28ab36d6011d" }, "track": "KASAN", "fuzz": { "focus": null, "focus_symbols": [ "migrate_vma_collect_pmd" ], "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+CgkJCTx0ZD4yMDI2LzA3LzA2IDE2OjE2PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+Mm08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1RFU1RfSE1NJiMzNDssCiAgICAmIzM0O0RFVklDRV9QUklWQVRFJiMzNDssCiAgICAmIzM0O1pPTkVfREVWSUNFJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7bWlncmF0ZV92bWFfY29sbGVjdF9wbWQmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcyBtaXNzaW5nIHB0ZV9wcmVzZW50KCkgY2hlY2tzIGluIG1pZ3JhdGVfdm1hX2NvbGxlY3RfcG1kKCkgYmVmb3JlIGNhbGxpbmcgcHRlX3BmbigpIGFuZCBwdGVfZGlydHkoKS4gVGhpcyBpcyBmdW5jdGlvbmFsIGNvcmUga2VybmVsL21tIGNvZGUgcmVhY2hhYmxlIHZpYSBkZXZpY2UgbWVtb3J5IG1pZ3JhdGlvbiBwYXRocywgd2hpY2ggY2FuIGJlIHRyaWdnZXJlZCBmcm9tIHVzZXJzcGFjZSB1c2luZyB0aGUgVEVTVF9ITU0gbW9kdWxlLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA2IDE2OjE2PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgYTJiODQ2YjgyNTM5ZDcyMmNhNTRlNDY3YjI4MjZkZTFiNTRjZDc1MlxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBNb24gSnVsIDYgMTY6MTY6NDAgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvbW0vbWlncmF0ZV9kZXZpY2UuYyBiL21tL21pZ3JhdGVfZGV2aWNlLmNcbmluZGV4IDA1MjE2N2Y5YWQ1NDc0Li42ZTcxMTM4MWYwOTI5NSAxMDA2NDRcbi0tLSBhL21tL21pZ3JhdGVfZGV2aWNlLmNcbiYjNDM7JiM0MzsmIzQzOyBiL21tL21pZ3JhdGVfZGV2aWNlLmNcbkBAIC00MTEsNyAmIzQzOzQxMSw4IEBAIHN0YXRpYyBpbnQgbWlncmF0ZV92bWFfY29sbGVjdF9wbWQocG1kX3QgKnBtZHAsXG4gXHRcdFx0Ym9vbCBhbm9uX2V4Y2x1c2l2ZTtcbiBcdFx0XHRwdGVfdCBzd3BfcHRlO1xuIFxuLVx0XHRcdGZsdXNoX2NhY2hlX3BhZ2Uodm1hLCBhZGRyLCBwdGVfcGZuKHB0ZSkpO1xuJiM0MztcdFx0XHRpZiAocHRlX3ByZXNlbnQocHRlKSlcbiYjNDM7XHRcdFx0XHRmbHVzaF9jYWNoZV9wYWdlKHZtYSwgYWRkciwgcHRlX3BmbihwdGUpKTtcbiBcdFx0XHRhbm9uX2V4Y2x1c2l2ZSA9IGZvbGlvX3Rlc3RfYW5vbihmb2xpbykgXHUwMDI2XHUwMDI2XG4gXHRcdFx0XHRcdCAgUGFnZUFub25FeGNsdXNpdmUocGFnZSk7XG4gXHRcdFx0aWYgKGFub25fZXhjbHVzaXZlKSB7XG5AQCAtNDMyLDcgJiM0Mzs0MzMsNyBAQCBzdGF0aWMgaW50IG1pZ3JhdGVfdm1hX2NvbGxlY3RfcG1kKHBtZF90ICpwbWRwLFxuIFx0XHRcdG1pZ3JhdGUtXHUwMDNlY3BhZ2VzJiM0MzsmIzQzOztcbiBcbiBcdFx0XHQvKiBTZXQgdGhlIGRpcnR5IGZsYWcgb24gdGhlIGZvbGlvIG5vdyB0aGUgcHRlIGlzIGdvbmUuICovXG4tXHRcdFx0aWYgKHB0ZV9kaXJ0eShwdGUpKVxuJiM0MztcdFx0XHRpZiAocHRlX3ByZXNlbnQocHRlKSBcdTAwMjZcdTAwMjYgcHRlX2RpcnR5KHB0ZSkpXG4gXHRcdFx0XHRmb2xpb19tYXJrX2RpcnR5KGZvbGlvKTtcbiBcbiBcdFx0XHQvKiBTZXR1cCBzcGVjaWFsIG1pZ3JhdGlvbiBwYWdlIHRhYmxlIGVudHJ5ICovXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDYgMTY6MTY8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+Mm08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7VEVTVF9ITU0mIzM0OywKICAgICYjMzQ7REVWSUNFX1BSSVZBVEUmIzM0OywKICAgICYjMzQ7Wk9ORV9ERVZJQ0UmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDttaWdyYXRlX3ZtYV9jb2xsZWN0X3BtZCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRzIG1pc3NpbmcgcHRlX3ByZXNlbnQoKSBjaGVja3MgaW4gbWlncmF0ZV92bWFfY29sbGVjdF9wbWQoKSBiZWZvcmUgY2FsbGluZyBwdGVfcGZuKCkgYW5kIHB0ZV9kaXJ0eSgpLiBUaGlzIGlzIGZ1bmN0aW9uYWwgY29yZSBrZXJuZWwvbW0gY29kZSByZWFjaGFibGUgdmlhIGRldmljZSBtZW1vcnkgbWlncmF0aW9uIHBhdGhzLCB3aGljaCBjYW4gYmUgdHJpZ2dlcmVkIGZyb20gdXNlcnNwYWNlIHVzaW5nIHRoZSBURVNUX0hNTSBtb2R1bGUuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLgoKSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaAp0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4KCldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOgoxLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLgogICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4KMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuCiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KICAgRG8gbm90IGxpc3QgdG9vIGdlbmVyaWMgY29uZmlncyAod2UgYWxyZWFkeSBoYXZlIHRoZW0gZW5hYmxlZCkuIE9ubHkgbGlzdCB0aG9zZSB0aGF0CiAgIHNwZWNpZmljYWxseSBjb3ZlciB0aGUgbW9kaWZpZWQgY29kZS4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzIG91dHB1dCBhcnJheSwKICAgYW5kIERPIE5PVCBhZGQgYSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IGEyYjg0NmI4MjUzOWQ3MjJjYTU0ZTQ2N2IyODI2ZGUxYjU0Y2Q3NTIKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgTW9uIEp1bCA2IDE2OjE2OjQwIDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvbW0vbWlncmF0ZV9kZXZpY2UuYyBiL21tL21pZ3JhdGVfZGV2aWNlLmMKaW5kZXggMDUyMTY3ZjlhZDU0NzQuLjZlNzExMzgxZjA5Mjk1IDEwMDY0NAotLS0gYS9tbS9taWdyYXRlX2RldmljZS5jCiYjNDM7JiM0MzsmIzQzOyBiL21tL21pZ3JhdGVfZGV2aWNlLmMKQEAgLTQxMSw3ICYjNDM7NDExLDggQEAgc3RhdGljIGludCBtaWdyYXRlX3ZtYV9jb2xsZWN0X3BtZChwbWRfdCAqcG1kcCwKIAkJCWJvb2wgYW5vbl9leGNsdXNpdmU7CiAJCQlwdGVfdCBzd3BfcHRlOwogCi0JCQlmbHVzaF9jYWNoZV9wYWdlKHZtYSwgYWRkciwgcHRlX3BmbihwdGUpKTsKJiM0MzsJCQlpZiAocHRlX3ByZXNlbnQocHRlKSkKJiM0MzsJCQkJZmx1c2hfY2FjaGVfcGFnZSh2bWEsIGFkZHIsIHB0ZV9wZm4ocHRlKSk7CiAJCQlhbm9uX2V4Y2x1c2l2ZSA9IGZvbGlvX3Rlc3RfYW5vbihmb2xpbykgJmFtcDsmYW1wOwogCQkJCQkgIFBhZ2VBbm9uRXhjbHVzaXZlKHBhZ2UpOwogCQkJaWYgKGFub25fZXhjbHVzaXZlKSB7CkBAIC00MzIsNyAmIzQzOzQzMyw3IEBAIHN0YXRpYyBpbnQgbWlncmF0ZV92bWFfY29sbGVjdF9wbWQocG1kX3QgKnBtZHAsCiAJCQltaWdyYXRlLSZndDtjcGFnZXMmIzQzOyYjNDM7OwogCiAJCQkvKiBTZXQgdGhlIGRpcnR5IGZsYWcgb24gdGhlIGZvbGlvIG5vdyB0aGUgcHRlIGlzIGdvbmUuICovCi0JCQlpZiAocHRlX2RpcnR5KHB0ZSkpCiYjNDM7CQkJaWYgKHB0ZV9wcmVzZW50KHB0ZSkgJmFtcDsmYW1wOyBwdGVfZGlydHkocHRlKSkKIAkJCQlmb2xpb19tYXJrX2RpcnR5KGZvbGlvKTsKIAogCQkJLyogU2V0dXAgc3BlY2lhbCBtaWdyYXRpb24gcGFnZSB0YWJsZSBlbnRyeSAqLwo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wNiAxNjoxNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxOTcwCgkJCQkJCQlvdXRwdXQ6IDM2CgkJCQkJCQl0aG91Z2h0czogOTkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBNaWdyYXRlIERldmljZSBQYXRjaCoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBmb3IgYG1tL21pZ3JhdGVfZGV2aWNlLmNgLiBTcGVjaWZpY2FsbHksIGl0IHNlZW1zIGxpa2Ugc29tZW9uZSYjMzk7cyBiZWVuIHR3ZWFraW5nIHRoZSBgbWlncmF0ZV92bWFfY29sbGVjdF9wbWRgIGZ1bmN0aW9uLiBUaGlzIGlzIHByZXR0eSBzdGFuZGFyZCBzdHVmZiBmb3IgbWVtb3J5IG1hbmFnZW1lbnQsIGFuZCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgaW1wYWN0IG9mIHRoZSBjaGFuZ2VzLgoKVGhlIGNvcmUgb2YgdGhlIGNoYW5nZSBzZWVtcyB0byBiZSB0aGUgaW5jbHVzaW9uIG9mIGBwdGVfcHJlc2VudChwdGUpYCBjaGVja3MgKmJlZm9yZSogdGhvc2UgYGZsdXNoX2NhY2hlX3BhZ2VgIGNhbGxzLCBhbmQgYWxzbyBiZWZvcmUgdGhlIGBwdGVfZGlydHkocHRlKWAgY2hlY2suIFRoYXQmIzM5O3MgaW1tZWRpYXRlbHkgaW50ZXJlc3RpbmcuIEl0JiMzOTtzIGFsbW9zdCBjZXJ0YWlubHkgdG8gcHJvdGVjdCBhZ2FpbnN0IHNvbWUga2luZCBvZiByYWNlIGNvbmRpdGlvbiBvciBwb3RlbnRpYWwgdXNlLWFmdGVyLWZyZWUgc2NlbmFyaW8gd2l0aGluIHRoZSBtaWdyYXRpb24gcHJvY2Vzcy4gTXkgaW5pdGlhbCBodW5jaCBpcyB0aGF0IGl0JiMzOTtzIHRyeWluZyB0byBlbnN1cmUgdGhhdCB0aGUgcGFnZSB0YWJsZSBlbnRyeSAoUFRFKSBpcyBhY3R1YWxseSB2YWxpZCBiZWZvcmUgZG9pbmcgYW55dGhpbmcgd2l0aCBpdCwgd2hpY2ggaXMgZ29vZCBwcmFjdGljZSwgZXNwZWNpYWxseSBpbiBhIGNvbmN1cnJlbnQgZW52aXJvbm1lbnQgbGlrZSB0aGUga2VybmVsLiBMZXQgbWUgZGlnIGludG8gdGhlIHN1cnJvdW5kaW5nIGNvZGUgYW5kIHNlZSAqd2h5KiB0aGlzIHdhc24mIzM5O3QgYWxyZWFkeSB0aGVyZS4gTXkgZXhwZXJ0aXNlIHRlbGxzIG1lIHRoZXNlIGd1YXJkcyBhcmUgdGhlcmUgZm9yIGEgcmVhc29uLCBsaWtlbHkgYSBidWcgaGFkIG9jY3VycmVkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA2IDE2OjE2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bW0vbWlncmF0ZV9kZXZpY2UuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDM5MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAxMDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDM5MDpcdFx0XHQgKlxuIDM5MTpcdFx0XHQgKiBXZSBkcm9wIHRoaXMgcmVmZXJlbmNlIGFmdGVyIGlzb2xhdGluZyB0aGUgZm9saW8gZnJvbSB0aGUgbHJ1XG4gMzkyOlx0XHRcdCAqIGZvciBub24gZGV2aWNlIGZvbGlvIChkZXZpY2UgZm9saW8gYXJlIG5vdCBvbiB0aGUgbHJ1IGFuZCB0aHVzXG4gMzkzOlx0XHRcdCAqIGNhbiYjMzk7dCBiZSBkcm9wcGVkIGZyb20gaXQpLlxuIDM5NDpcdFx0XHQgKi9cbiAzOTU6XHRcdFx0Zm9saW8gPSBwYWdlX2ZvbGlvKHBhZ2UpO1xuIDM5NjpcdFx0XHRmb2xpb19nZXQoZm9saW8pO1xuIDM5NzpcdFxuIDM5ODpcdFx0XHQvKlxuIDM5OTpcdFx0XHQgKiBXZSByZWx5IG9uIGZvbGlvX3RyeWxvY2soKSB0byBhdm9pZCBkZWFkbG9jayBiZXR3ZWVuXG4gNDAwOlx0XHRcdCAqIGNvbmN1cnJlbnQgbWlncmF0aW9ucyB3aGVyZSBlYWNoIGlzIHdhaXRpbmcgb24gdGhlIG90aGVyc1xuIDQwMTpcdFx0XHQgKiBmb2xpbyBsb2NrLiBJZiB3ZSBjYW4mIzM5O3QgaW1tZWRpYXRlbHkgbG9jayB0aGUgZm9saW8gd2UgZmFpbCB0aGlzXG4gNDAyOlx0XHRcdCAqIG1pZ3JhdGlvbiBhcyBpdCBpcyBvbmx5IGJlc3QgZWZmb3J0IGFueXdheS5cbiA0MDM6XHRcdFx0ICpcbiA0MDQ6XHRcdFx0ICogSWYgd2UgY2FuIGxvY2sgdGhlIGZvbGlvIGl0JiMzOTtzIHNhZmUgdG8gc2V0IHVwIGEgbWlncmF0aW9uIGVudHJ5XG4gNDA1Olx0XHRcdCAqIG5vdy4gSW4gdGhlIGNvbW1vbiBjYXNlIHdoZXJlIHRoZSBmb2xpbyBpcyBtYXBwZWQgb25jZSBpbiBhXG4gNDA2Olx0XHRcdCAqIHNpbmdsZSBwcm9jZXNzIHNldHRpbmcgdXAgdGhlIG1pZ3JhdGlvbiBlbnRyeSBub3cgaXMgYW5cbiA0MDc6XHRcdFx0ICogb3B0aW1pc2F0aW9uIHRvIGF2b2lkIHdhbGtpbmcgdGhlIHJtYXAgbGF0ZXIgd2l0aFxuIDQwODpcdFx0XHQgKiB0cnlfdG9fbWlncmF0ZSgpLlxuIDQwOTpcdFx0XHQgKi9cbiA0MTA6XHRcdFx0aWYgKGZhdWx0X2ZvbGlvID09IGZvbGlvIHx8IGZvbGlvX3RyeWxvY2soZm9saW8pKSB7XG4gNDExOlx0XHRcdFx0Ym9vbCBhbm9uX2V4Y2x1c2l2ZTtcbiA0MTI6XHRcdFx0XHRwdGVfdCBzd3BfcHRlO1xuIDQxMzpcdFxuIDQxNDpcdFx0XHRcdGlmIChwdGVfcHJlc2VudChwdGUpKVxuIDQxNTpcdFx0XHRcdFx0Zmx1c2hfY2FjaGVfcGFnZSh2bWEsIGFkZHIsIHB0ZV9wZm4ocHRlKSk7XG4gNDE2Olx0XHRcdFx0YW5vbl9leGNsdXNpdmUgPSBmb2xpb190ZXN0X2Fub24oZm9saW8pIFx1MDAyNlx1MDAyNlxuIDQxNzpcdFx0XHRcdFx0XHQgIFBhZ2VBbm9uRXhjbHVzaXZlKHBhZ2UpO1xuIDQxODpcdFx0XHRcdGlmIChhbm9uX2V4Y2x1c2l2ZSkge1xuIDQxOTpcdFx0XHRcdFx0cHRlID0gcHRlcF9jbGVhcl9mbHVzaCh2bWEsIGFkZHIsIHB0ZXApO1xuIDQyMDpcdFxuIDQyMTpcdFx0XHRcdFx0aWYgKGZvbGlvX3RyeV9zaGFyZV9hbm9uX3JtYXBfcHRlKGZvbGlvLCBwYWdlKSkge1xuIDQyMjpcdFx0XHRcdFx0XHRzZXRfcHRlX2F0KG1tLCBhZGRyLCBwdGVwLCBwdGUpO1xuIDQyMzpcdFx0XHRcdFx0XHRpZiAoZmF1bHRfZm9saW8gIT0gZm9saW8pXG4gNDI0Olx0XHRcdFx0XHRcdFx0Zm9saW9fdW5sb2NrKGZvbGlvKTtcbiA0MjU6XHRcdFx0XHRcdFx0Zm9saW9fcHV0KGZvbGlvKTtcbiA0MjY6XHRcdFx0XHRcdFx0bXBmbiA9IDA7XG4gNDI3Olx0XHRcdFx0XHRcdGdvdG8gbmV4dDtcbiA0Mjg6XHRcdFx0XHRcdH1cbiA0Mjk6XHRcdFx0XHR9IGVsc2Uge1xuIDQzMDpcdFx0XHRcdFx0cHRlID0gcHRlcF9nZXRfYW5kX2NsZWFyKG1tLCBhZGRyLCBwdGVwKTtcbiA0MzE6XHRcdFx0XHR9XG4gNDMyOlx0XG4gNDMzOlx0XHRcdFx0bWlncmF0ZS1cdTAwM2VjcGFnZXMmIzQzOyYjNDM7O1xuIDQzNDpcdFxuIDQzNTpcdFx0XHRcdC8qIFNldCB0aGUgZGlydHkgZmxhZyBvbiB0aGUgZm9saW8gbm93IHRoZSBwdGUgaXMgZ29uZS4gKi9cbiA0MzY6XHRcdFx0XHRpZiAocHRlX3ByZXNlbnQocHRlKSBcdTAwMjZcdTAwMjYgcHRlX2RpcnR5KHB0ZSkpXG4gNDM3Olx0XHRcdFx0XHRmb2xpb19tYXJrX2RpcnR5KGZvbGlvKTtcbiA0Mzg6XHRcbiA0Mzk6XHRcdFx0XHQvKiBTZXR1cCBzcGVjaWFsIG1pZ3JhdGlvbiBwYWdlIHRhYmxlIGVudHJ5ICovXG4gNDQwOlx0XHRcdFx0aWYgKG1wZm4gXHUwMDI2IE1JR1JBVEVfUEZOX1dSSVRFKVxuIDQ0MTpcdFx0XHRcdFx0ZW50cnkgPSBtYWtlX3dyaXRhYmxlX21pZ3JhdGlvbl9lbnRyeShcbiA0NDI6XHRcdFx0XHRcdFx0XHRcdHBhZ2VfdG9fcGZuKHBhZ2UpKTtcbiA0NDM6XHRcdFx0XHRlbHNlIGlmIChhbm9uX2V4Y2x1c2l2ZSlcbiA0NDQ6XHRcdFx0XHRcdGVudHJ5ID0gbWFrZV9yZWFkYWJsZV9leGNsdXNpdmVfbWlncmF0aW9uX2VudHJ5KFxuIDQ0NTpcdFx0XHRcdFx0XHRcdFx0cGFnZV90b19wZm4ocGFnZSkpO1xuIDQ0NjpcdFx0XHRcdGVsc2VcbiA0NDc6XHRcdFx0XHRcdGVudHJ5ID0gbWFrZV9yZWFkYWJsZV9taWdyYXRpb25fZW50cnkoXG4gNDQ4Olx0XHRcdFx0XHRcdFx0XHRwYWdlX3RvX3BmbihwYWdlKSk7XG4gNDQ5Olx0XHRcdFx0aWYgKHB0ZV9wcmVzZW50KHB0ZSkpIHtcbiA0NTA6XHRcdFx0XHRcdGlmIChwdGVfeW91bmcocHRlKSlcbiA0NTE6XHRcdFx0XHRcdFx0ZW50cnkgPSBtYWtlX21pZ3JhdGlvbl9lbnRyeV95b3VuZyhlbnRyeSk7XG4gNDUyOlx0XHRcdFx0XHRpZiAocHRlX2RpcnR5KHB0ZSkpXG4gNDUzOlx0XHRcdFx0XHRcdGVudHJ5ID0gbWFrZV9taWdyYXRpb25fZW50cnlfZGlydHkoZW50cnkpO1xuIDQ1NDpcdFx0XHRcdH1cbiA0NTU6XHRcdFx0XHRzd3BfcHRlID0gc3dwX2VudHJ5X3RvX3B0ZShlbnRyeSk7XG4gNDU2Olx0XHRcdFx0aWYgKHB0ZV9wcmVzZW50KHB0ZSkpIHtcbiA0NTc6XHRcdFx0XHRcdGlmIChwdGVfc29mdF9kaXJ0eShwdGUpKVxuIDQ1ODpcdFx0XHRcdFx0XHRzd3BfcHRlID0gcHRlX3N3cF9ta3NvZnRfZGlydHkoc3dwX3B0ZSk7XG4gNDU5Olx0XHRcdFx0XHRpZiAocHRlX3VmZmRfd3AocHRlKSlcbiA0NjA6XHRcdFx0XHRcdFx0c3dwX3B0ZSA9IHB0ZV9zd3BfbWt1ZmZkX3dwKHN3cF9wdGUpO1xuIDQ2MTpcdFx0XHRcdH0gZWxzZSB7XG4gNDYyOlx0XHRcdFx0XHRpZiAocHRlX3N3cF9zb2Z0X2RpcnR5KHB0ZSkpXG4gNDYzOlx0XHRcdFx0XHRcdHN3cF9wdGUgPSBwdGVfc3dwX21rc29mdF9kaXJ0eShzd3BfcHRlKTtcbiA0NjQ6XHRcdFx0XHRcdGlmIChwdGVfc3dwX3VmZmRfd3AocHRlKSlcbiA0NjU6XHRcdFx0XHRcdFx0c3dwX3B0ZSA9IHB0ZV9zd3BfbWt1ZmZkX3dwKHN3cF9wdGUpO1xuIDQ2NjpcdFx0XHRcdH1cbiA0Njc6XHRcdFx0XHRzZXRfcHRlX2F0KG1tLCBhZGRyLCBwdGVwLCBzd3BfcHRlKTtcbiA0Njg6XHRcbiA0Njk6XHRcdFx0XHQvKlxuIDQ3MDpcdFx0XHRcdCAqIFRoaXMgaXMgbGlrZSByZWd1bGFyIHVubWFwOiB3ZSByZW1vdmUgdGhlIHJtYXAgYW5kXG4gNDcxOlx0XHRcdFx0ICogZHJvcCB0aGUgZm9saW8gcmVmY291bnQuIFRoZSBmb2xpbyB3b24mIzM5O3QgYmUgZnJlZWQsIGFzXG4gNDcyOlx0XHRcdFx0ICogd2UgdG9vayBhIHJlZmVyZW5jZSBqdXN0IGFib3ZlLlxuIDQ3MzpcdFx0XHRcdCAqL1xuIDQ3NDpcdFx0XHRcdGZvbGlvX3JlbW92ZV9ybWFwX3B0ZShmb2xpbywgcGFnZSwgdm1hKTtcbiA0NzU6XHRcdFx0XHRmb2xpb19wdXQoZm9saW8pO1xuIDQ3NjpcdFxuIDQ3NzpcdFx0XHRcdGlmIChwdGVfcHJlc2VudChwdGUpKVxuIDQ3ODpcdFx0XHRcdFx0dW5tYXBwZWQmIzQzOyYjNDM7O1xuIDQ3OTpcdFx0XHR9IGVsc2Uge1xuIDQ4MDpcdFx0XHRcdGZvbGlvX3B1dChmb2xpbyk7XG4gNDgxOlx0XHRcdFx0bXBmbiA9IDA7XG4gNDgyOlx0XHRcdH1cbiA0ODM6XHRcbiA0ODQ6XHRuZXh0OlxuIDQ4NTpcdFx0XHRtaWdyYXRlLVx1MDAzZWRzdFttaWdyYXRlLVx1MDAzZW5wYWdlc10gPSAwO1xuIDQ4NjpcdFx0XHRtaWdyYXRlLVx1MDAzZXNyY1ttaWdyYXRlLVx1MDAzZW5wYWdlcyYjNDM7JiM0MztdID0gbXBmbjtcbiA0ODc6XHRcdH1cbiA0ODg6XHRcbiA0ODk6XHRcdC8qIE9ubHkgZmx1c2ggdGhlIFRMQiBpZiB3ZSBhY3R1YWxseSBtb2RpZmllZCBhbnkgZW50cmllcyAqL1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA2IDE2OjE2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDM5MDIKCQkJCQkJCW91dHB1dDogMjcKCQkJCQkJCXRob3VnaHRzOiA3MAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipGaXhpbmcgYSBOb24tUHJlc2VudCBQVEUgSXNzdWUgaW4gTWlncmF0ZSBEZXZpY2UqKgoKT2theSwgc28gdGhpcyBwYXRjaCBpcyBhZGRyZXNzaW5nIGEgcHJldHR5IHNwZWNpZmljIGJ1ZyDigJMgc29tZW9uZSYjMzk7cyBjYWxsaW5nIGBwdGVfcGZuKHB0ZSlgIG9yIGBwdGVfZGlydHkocHRlKWAgb24gYSBQVEUgdGhhdCBpc24mIzM5O3QgYWN0dWFsbHkgcHJlc2VudC4gVGhhdCYjMzk7cyBhIGNsYXNzaWMgbWVtb3J5IG1hbmFnZW1lbnQgcHJvYmxlbSwgYW5kIGl0JiMzOTtzIGdvb2QgdGhleSYjMzk7cmUgY2F0Y2hpbmcgaXQuIEZ1bmN0aW9uYWxseSwgdGhpcyBjb2RlJiMzOTtzIHJlbGF0ZWQgdG8gYG1pZ3JhdGVfdm1hX2NvbGxlY3RfcG1kYCwgc28gaXQmIzM5O3MgY2xlYXJseSBpbnZvbHZlZCBpbiBwYWdlIG1pZ3JhdGlvbiwgd2hpY2ggaXMgd2hlcmUgdGhpbmdzIGNhbiBnZXQgdHJpY2t5IHdpdGggcGFnZSB0YWJsZSBlbnRyaWVzLiBMZXQmIzM5O3Mgc2VlLi4uIEkgbmVlZCB0byBmaWd1cmUgb3V0IHdoYXQgY29uZmlndXJhdGlvbnMgYXJlIHJlbGV2YW50IHRvIHRoYXQgZmlsZSwgYG1tL21pZ3JhdGVfZGV2aWNlLmNgLCBiZWNhdXNlIHVuZGVyc3RhbmRpbmcgdGhlIGNvbnRleHQgb2YgdGhpcyBmaXggaXMgZ29pbmcgdG8gYmUgY3J1Y2lhbC4gSSYjMzk7bGwgbmVlZCB0byBrbm93ICp3aHkqIHRoaXMgc2NlbmFyaW8gaXMgZXZlbiBoYXBwZW5pbmcgaW4gdGhlIGZpcnN0IHBsYWNlIHRvIHVuZGVyc3RhbmQgdGhlIHJvb3QgY2F1c2UgYW5kIGVuc3VyZSB0aGUgZml4IGlzIHJvYnVzdC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wNiAxNjoxNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDttaWdyYXRlX2RldmljZS5vJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL01ha2VmaWxlPTk5PW9iai0kKENPTkZJR19OVU1BKSAmIzQzOz0gbWVtb3J5LXRpZXJzLm9cbm1tL01ha2VmaWxlOjEwMDpvYmotJChDT05GSUdfREVWSUNFX01JR1JBVElPTikgJiM0Mzs9IG1pZ3JhdGVfZGV2aWNlLm9cbm1tL01ha2VmaWxlLTEwMS1vYmotJChDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0UpICYjNDM7PSBodWdlX21lbW9yeS5vIGtodWdlcGFnZWQub1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA2IDE2OjE2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQyODMKCQkJCQkJCW91dHB1dDogMjgKCQkJCQkJCXRob3VnaHRzOiAyNAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgZm9yIGFuIGV4cGVydCBsaWtlIG15c2VsZjoKCioqSW5pdGlhbCBDb25maWd1cmF0aW9uIEFzc2Vzc21lbnQqKgoKQWxyaWdodCwgc28gdGhlIHRhc2sgYXQgaGFuZCBoaW5nZXMgb24gYENPTkZJR19ERVZJQ0VfTUlHUkFUSU9OYC4gVGhhdCYjMzk7cyB0aGUgY29yZSByZXF1aXJlbWVudCwgSSBnZXQgdGhhdC4gQnV0LCBuYXR1cmFsbHksIGJlZm9yZSBkaXZpbmcgaW4sIEkgbmVlZCB0byB0YWtlIGEgd2lkZXIgdmlldy4gVGhpcyBpc24mIzM5O3QgYW4gaXNvbGF0ZWQgc2V0dGluZzsgdGhlc2UgY29uZmlndXJhdGlvbnMgYXJlIG9mdGVuIGludGVydHdpbmVkLiBTbywgbGV0JiMzOTtzIHRha2UgYSBxdWljayBsb29rIGFyb3VuZC4gV2hhdCBvdGhlciByZWxhdGVkIGNvbmZpZ3VyYXRpb25zIG1pZ2h0IGJlIGx1cmtpbmcgdGhhdCB3b3VsZCBpbmZsdWVuY2UgdGhpcyBzZXR1cCwgb3IgdGhhdCBgQ09ORklHX0RFVklDRV9NSUdSQVRJT05gIG1pZ2h0IGFmZmVjdD8gR290dGEgYnVpbGQgdGhlIGZ1bGwgcGljdHVyZSBiZWZvcmUgSSBzdGFydCBtYWtpbmcgYW55IGNoYW5nZXMsIEkgZG9uJiMzOTt0IHdhbnQgdG8gbWFrZSB0aGluZ3Mgd29yc2Ugd2l0aCBhbiBpc29sYXRlZCBmaXghCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDYgMTY6MTY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIERFVklDRV9NSUdSQVRJT04mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vS2NvbmZpZz02OTY9Y29uZmlnIE1JR1JBVElPTlxuLS1cbm1tL0tjb25maWctNjk5LVxubW0vS2NvbmZpZzo3MDA6Y29uZmlnIERFVklDRV9NSUdSQVRJT05cbm1tL0tjb25maWctNzAxLVx0ZGVmX2Jvb2wgTUlHUkFUSU9OIFx1MDAyNlx1MDAyNiBaT05FX0RFVklDRVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA2IDE2OjE2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQ1NTkKCQkJCQkJCW91dHB1dDogMjYKCQkJCQkJCXRob3VnaHRzOiA0OQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGlzIGxvZ2ljLCBhcyB0aG91Z2ggaXQgd2VyZSBteSBvd24gdGhvdWdodCBwcm9jZXNzOgoKKipEaXZpbmcgaW50byBEZXZpY2UgTWlncmF0aW9uIFJlcXVpcmVtZW50cyoqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBUaGUgZGVmaW5pdGlvbiBvZiBgREVWSUNFX01JR1JBVElPTmAgaGluZ2VzIG9uIHR3byBvdGhlciBjb21wb25lbnRzOiBgTUlHUkFUSU9OYCBhbmQgYFpPTkVfREVWSUNFYC4gU3BlY2lmaWNhbGx5LCBgREVWSUNFX01JR1JBVElPTmAgaXMgdHJ1ZSBpZiBhbmQgb25seSBpZiBib3RoIGBNSUdSQVRJT05gICphbmQqIGBaT05FX0RFVklDRWAgYXJlIHRydWUgKGl0JiMzOTtzIGFuIEFORCBjb25kaXRpb24sIEkgc2VlKS4gIFRoZXJlZm9yZSwgdG8gZW5hYmxlIGRldmljZSBtaWdyYXRpb24sIHdlIGFic29sdXRlbHkgKm11c3QqIGhhdmUgYm90aCBgQ09ORklHX01JR1JBVElPTmAgYW5kIGBDT05GSUdfWk9ORV9ERVZJQ0VgIGVuYWJsZWQgaW4gdGhlIGNvbmZpZ3VyYXRpb24uIFRoYXQgbWFrZXMgcGVyZmVjdCBzZW5zZS4gTm93LCBsZXQgbWUganVzdCBkb3VibGUtY2hlY2sgdGhhdCBgWk9ORV9ERVZJQ0VgIGlzIHNldCBjb3JyZWN0bHkuIEkmIzM5O2xsIG5lZWQgdG8gZGlnIGludG8gdGhlIGRlZmluaXRpb24gb2YgYFpPTkVfREVWSUNFYCB0byB2ZXJpZnkuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA2IDE2OjE2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBaT05FX0RFVklDRSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9LY29uZmlnPTEyMzE9Y29uZmlnIFpPTkVfRE1BMzJcbi0tXG5tbS9LY29uZmlnLTEyMzUtXG5tbS9LY29uZmlnOjEyMzY6Y29uZmlnIFpPTkVfREVWSUNFXG5tbS9LY29uZmlnLTEyMzctXHRib29sIFwmIzM0O0RldmljZSBtZW1vcnkgKHBtZW0sIEhNTSwgZXRjLi4uKSBob3RwbHVnIHN1cHBvcnRcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDYgMTY6MTc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDkwNQoJCQkJCQkJb3V0cHV0OiAyNgoJCQkJCQkJdGhvdWdodHM6IDIwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRob3VnaHQgcHJvY2VzcywgYXMgaWYgSSB3ZXJlIGNvbnNpZGVyaW5nIHRoaXMgY29kZToKCioqQW5hbHl6aW5nIEJvb2xlYW4gU3RhdGVzKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIGNvZGUgYW5kIHRoZSBmaXJzdCB0aGluZyB0aGF0IGp1bXBzIG91dCBpcyBgWk9ORV9ERVZJQ0VgLiBSaWdodCwgdGhhdCYjMzk7cyBhIGJvb2xlYW4sIG1ha2VzIHNlbnNlLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcywgJiMzNDtXaGF0JiMzOTtzIHRoZSBjb250ZXh0PyBXaGF0IGlzIHRoaXMgYFpPTkVfREVWSUNFYCBmbGFnIHVzZWQgZm9yPyYjMzQ7IEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGF0IGJvb2xlYW4gc3RhdGUgaW5mbHVlbmNlcyB0aGUgb3ZlcmFsbCBzeXN0ZW0gYmVoYXZpb3IuCgpOb3csIHdoZXJlIHdhcyBJPyBSaWdodCwgYE1JR1JBVElPTmAuIExldCBtZSBkaXZlIGludG8gaG93IG1pZ3JhdGlvbiBpcyBoYW5kbGVkIGluIHRoaXMgY29kZS4gV2hhdCYjMzk7cyB0aGUgcmVsYXRpb25zaGlwIGJldHdlZW4gdGhlIGBaT05FX0RFVklDRWAgZmxhZyBhbmQgdGhlIG1pZ3JhdGlvbiBwcm9jZXNzPyBBcmUgdGhleSBpbmRlcGVuZGVudCBjb25jZXJucyBvciBpcyBgWk9ORV9ERVZJQ0VgIHVzZWQgdG8gdG9nZ2xlIHRoZSBlZmZlY3RzIG9mIGBNSUdSQVRJT05gPyBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgZGVwZW5kZW5jaWVzIGFuZCB0aGUgb3ZlcmFsbCBhcmNoaXRlY3R1cmUuIEkgc2hvdWxkIGludmVzdGlnYXRlIGhvdyB0aGVzZSB0d28gdmFyaWFibGVzIGludGVyYWN0IHdpdGhpbiB0aGUgbGFyZ2VyIHN5c3RlbS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDYgMTY6MTc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIE1JR1JBVElPTiYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9LY29uZmlnPTY4NT1jb25maWcgTlVNQV9NSUdSQVRJT05cbi0tXG5tbS9LY29uZmlnLTY5NS1cbm1tL0tjb25maWc6Njk2OmNvbmZpZyBNSUdSQVRJT05cbm1tL0tjb25maWctNjk3LVx0Ym9vbFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wNiAxNjoxNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1MjA0CgkJCQkJCQlvdXRwdXQ6IDMxCgkJCQkJCQl0aG91Z2h0czogMjgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIG15IG93bjoKCioqQW5hbHl6aW5nIE1pZ3JhdGlvbiBMb2dpYyoqCgpBbHJpZ2h0LCBzbyBgTUlHUkFUSU9OYCBpcyBkZWZpbmVkIGFzIGEgYm9vbGVhbiDigJMgbWFrZXMgc2Vuc2UuIE5vdyBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGVyZSB0aGlzIGlzIGJlaW5nIHVzZWQgYW5kIGhvdyBpdCBpbmZsdWVuY2VzIHRoZSBmbG93LiBUaW1lIHRvIGRpZyBpbnRvIHRoZSBjYWxsIHNpdGVzIG9mIGBtaWdyYXRlX3ZtYV9jb2xsZWN0X3BtZGAuIFRoaXMgd2lsbCBnaXZlIG1lIGEgY2xlYXIgcGljdHVyZSBvZiBob3cgdGhlIG1pZ3JhdGlvbiBmbGFnIGludGVyYWN0cyB3aXRoIHRoZSBwYWdlIHRhYmxlIG1hbmlwdWxhdGlvbnMgYW5kIHBoeXNpY2FsIG1lbW9yeSByZW1hcHBpbmcuIEkgZXhwZWN0IHRvIHNlZSBpdHMgdXNlIGRpcmVjdGx5IGluIHRoZSBjb3JlIG1pZ3JhdGlvbiByb3V0aW5lcywgYnV0IGtub3dpbmcgdGhlIGltbWVkaWF0ZSBjYWxsZXJzIHdpbGwgc2hlZCBsaWdodCBvbiB0aGUgY29udGV4dCBhbmQgYW55IGNvbmRpdGlvbmFsIGRlcGVuZGVuY2llcyB0aGF0IG5lZWQgdG8gYmUgY29uc2lkZXJlZC4gTGV0JiMzOTtzIHNlZSB3aGF0IHdlIHVuY292ZXIuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA2IDE2OjE3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O21pZ3JhdGVfdm1hX2NvbGxlY3RfcG1kJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL21pZ3JhdGVfZGV2aWNlLmM9MTM3PXN0YXRpYyBpbnQgbWlncmF0ZV92bWFfY29sbGVjdF9odWdlX3BtZChwbWRfdCAqcG1kcCwgdW5zaWduZWQgbG9uZyBzdGFydCxcbi0tXG5tbS9taWdyYXRlX2RldmljZS5jLTI0NC1cbm1tL21pZ3JhdGVfZGV2aWNlLmM6MjQ1OnN0YXRpYyBpbnQgbWlncmF0ZV92bWFfY29sbGVjdF9wbWQocG1kX3QgKnBtZHAsXG5tbS9taWdyYXRlX2RldmljZS5jLTI0Ni1cdFx0XHRcdCAgIHVuc2lnbmVkIGxvbmcgc3RhcnQsXG4tLVxubW0vbWlncmF0ZV9kZXZpY2UuYz00OTk9c3RhdGljIGNvbnN0IHN0cnVjdCBtbV93YWxrX29wcyBtaWdyYXRlX3ZtYV93YWxrX29wcyA9IHtcbm1tL21pZ3JhdGVfZGV2aWNlLmM6NTAwOlx0LnBtZF9lbnRyeVx0XHQ9IG1pZ3JhdGVfdm1hX2NvbGxlY3RfcG1kLFxubW0vbWlncmF0ZV9kZXZpY2UuYy01MDEtXHQucHRlX2hvbGVcdFx0PSBtaWdyYXRlX3ZtYV9jb2xsZWN0X2hvbGUsXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA2IDE2OjE3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDU2MTcKCQkJCQkJCW91dHB1dDogMzAKCQkJCQkJCXRob3VnaHRzOiAzNAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgZnJvbSBteSBwZXJzcGVjdGl2ZToKCioqSW52ZXN0aWdhdGluZyB0aGUgVXNhZ2Ugb2YgYG1pZ3JhdGVfdm1hX3dhbGtfb3BzYCoqCgpIbW0sIHNvIGBtaWdyYXRlX3ZtYV93YWxrX29wc2AgaXMgdGhlIGtleSBoZXJlLiBSaWdodC4gSXQmIzM5O3MgdXNlZCBpbiBzb21ldGhpbmcgY2FsbGVkIGBtaWdyYXRlX3ZtYV93YWxrX29wc2AuIFRoZSBxdWVzdGlvbiBub3cgYmVjb21lczogd2hlcmUgaXMgKnRoYXQqIHVzZWQ/IFRoYXQmIzM5O3MgdGhlIG5leHQgbG9naWNhbCBzdGVwIGluIHVuZGVyc3RhbmRpbmcgdGhlIGNvbnRleHQgYW5kIHB1cnBvc2Ugb2YgdGhpcyBwYXJ0aWN1bGFyIGNvbXBvbmVudC4gTmVlZCB0byB0cmFjZSBpdHMgaW52b2NhdGlvbnMgdG8gZ2V0IHRoZSBicm9hZGVyIHBpY3R1cmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA2IDE2OjE3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O21pZ3JhdGVfdm1hX3dhbGtfb3BzJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL21pZ3JhdGVfZGV2aWNlLmM9MjQ1PXN0YXRpYyBpbnQgbWlncmF0ZV92bWFfY29sbGVjdF9wbWQocG1kX3QgKnBtZHAsXG4tLVxubW0vbWlncmF0ZV9kZXZpY2UuYy00OTgtXG5tbS9taWdyYXRlX2RldmljZS5jOjQ5OTpzdGF0aWMgY29uc3Qgc3RydWN0IG1tX3dhbGtfb3BzIG1pZ3JhdGVfdm1hX3dhbGtfb3BzID0ge1xubW0vbWlncmF0ZV9kZXZpY2UuYy01MDAtXHQucG1kX2VudHJ5XHRcdD0gbWlncmF0ZV92bWFfY29sbGVjdF9wbWQsXG4tLVxubW0vbWlncmF0ZV9kZXZpY2UuYz01MTM9c3RhdGljIHZvaWQgbWlncmF0ZV92bWFfY29sbGVjdChzdHJ1Y3QgbWlncmF0ZV92bWEgKm1pZ3JhdGUpXG4tLVxubW0vbWlncmF0ZV9kZXZpY2UuYy01MjctXHR3YWxrX3BhZ2VfcmFuZ2Vfdm1hKG1pZ3JhdGUtXHUwMDNldm1hLCBtaWdyYXRlLVx1MDAzZXN0YXJ0LCBtaWdyYXRlLVx1MDAzZWVuZCxcbm1tL21pZ3JhdGVfZGV2aWNlLmM6NTI4Olx0XHRcdFx1MDAyNm1pZ3JhdGVfdm1hX3dhbGtfb3BzLCBtaWdyYXRlKTtcbm1tL21pZ3JhdGVfZGV2aWNlLmMtNTI5LVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wNiAxNjoxNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA2MDI3CgkJCQkJCQlvdXRwdXQ6IDI4CgkJCQkJCQl0aG91Z2h0czogMTkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIGFuZCB3cml0dGVuIGluIHRoZSBmaXJzdCBwZXJzb246CgoqKk15IE1pZ3JhdGlvbiBQbGFubmluZzogYG1pZ3JhdGVfdm1hX2NvbGxlY3RgJiMzOTtzIFJvbGUqKgoKQWxyaWdodCwgSSYjMzk7bSB0aGlua2luZyBhYm91dCB0aGUgbWlncmF0aW9uIHByb2Nlc3MsIHNwZWNpZmljYWxseSB3aXRoaW4gdGhlIHZpcnR1YWwgbWVtb3J5IGFyZWEgKFZNQSkgY29udGV4dC4gSSYjMzk7dmUgZ290IGBtaWdyYXRlX3ZtYV9zZXR1cGAga2lja2luZyB0aGluZ3Mgb2ZmLCB3aGljaCBpcyB0aGUgbG9naWNhbCBlbnRyeSBwb2ludCBmb3IgcHJlcGFyaW5nIGEgVk1BIGZvciBtaWdyYXRpb24uIE5vdywgSSYjMzk7bSB0cmFjaW5nIHRoZSBleGVjdXRpb24gcGF0aCwgYW5kIEkgc2VlIGBtaWdyYXRlX3ZtYV9jb2xsZWN0YCBnZXR0aW5nIGNhbGxlZCBmcm9tIHdpdGhpbiBgbWlncmF0ZV92bWFfc2V0dXBgLiBUaGF0IGltbWVkaWF0ZWx5IGZsYWdzIGEgcGFydGljdWxhciBmdW5jdGlvbiBmb3IgbWUuIEl0JiMzOTtzIGNvbGxlY3RpbmcgaW5mb3JtYXRpb246IGdhdGhlciB0aGUgcmVsZXZhbnQgZGF0YSBvciBnYXRoZXIgdGhpbmdzIHRoYXQgd2lsbCBiZSB1c2VkIGR1cmluZyB0aGUgbWVtb3J5IG1vdmUuIFRoaXMgc3Ryb25nbHkgc3VnZ2VzdHMgdGhhdCBpdCYjMzk7cyB0aGUgcGhhc2Ugd2hlcmUgd2UmIzM5O3JlIGdvaW5nIHRvIGV4YW1pbmUgYW5kIHBvdGVudGlhbGx5IGludmVudG9yeSB0aGUgVk1BJiMzOTtzIGNvbnRlbnRzIG9yIG1ldGFkYXRhLiBUaGluayBvZiBpdCBhcyBwcmVwYXJpbmcgdGhlICYjMzQ7bWFuaWZlc3QmIzM0OyBvciBhIGRpcmVjdG9yeSBsaXN0aW5nIG9mIHdoYXQgbmVlZHMgdG8gbW92ZS4gVGhpcyBjb3VsZCBpbnZvbHZlIGlkZW50aWZ5aW5nIGRpcnR5IHBhZ2VzLCBtYXBwaW5nIGluZm9ybWF0aW9uLCBhY2Nlc3MgcGVybWlzc2lvbnMsIG9yIGFueXRoaW5nIGVsc2UgZXNzZW50aWFsIGZvciBhIGNvbXBsZXRlIGFuZCBjb25zaXN0ZW50IG1pZ3JhdGlvbi4gS25vd2luZyB0aGlzIGlzIGNyaXRpY2FsIGJlY2F1c2UgaXQgdGVsbHMgbWUgd2hlcmUgSSBuZWVkIHRvIGxvb2sgZm9yIGVmZmljaWVuY3kgZ2FpbnMgb3IgcG90ZW50aWFsIGZhaWx1cmUgcG9pbnRzIGxhdGVyIGRvd24gdGhlIHByb2Nlc3MuIEkmIzM5O2xsIG5lZWQgdG8gZHJpbGwgZG93biBpbnRvIHRoZSBpbXBsZW1lbnRhdGlvbiBvZiBgbWlncmF0ZV92bWFfY29sbGVjdGAgdG8gdW5kZXJzdGFuZCBleGFjdGx5ICp3aGF0KiBpdCYjMzk7cyBjb2xsZWN0aW5nIGFuZCAqaG93KiBpdCYjMzk7cyBkb2luZyBpdC4gQW55IHBvdGVudGlhbCBib3R0bGVuZWNrcyB3aWxsIHNob3cgdXAgaGVyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDYgMTY6MTc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bWlncmF0ZV92bWFfY29sbGVjdCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9taWdyYXRlX2RldmljZS5jLTIwLVxubW0vbWlncmF0ZV9kZXZpY2UuYzoyMTpzdGF0aWMgaW50IG1pZ3JhdGVfdm1hX2NvbGxlY3Rfc2tpcCh1bnNpZ25lZCBsb25nIHN0YXJ0LFxubW0vbWlncmF0ZV9kZXZpY2UuYy0yMi1cdFx0XHRcdCAgICB1bnNpZ25lZCBsb25nIGVuZCxcbi0tXG5tbS9taWdyYXRlX2RldmljZS5jLTM1LVxubW0vbWlncmF0ZV9kZXZpY2UuYzozNjpzdGF0aWMgaW50IG1pZ3JhdGVfdm1hX2NvbGxlY3RfaG9sZSh1bnNpZ25lZCBsb25nIHN0YXJ0LFxubW0vbWlncmF0ZV9kZXZpY2UuYy0zNy1cdFx0XHRcdCAgICB1bnNpZ25lZCBsb25nIGVuZCxcbi0tXG5tbS9taWdyYXRlX2RldmljZS5jLTQ1LVx0aWYgKCF2bWFfaXNfYW5vbnltb3VzKHdhbGstXHUwMDNldm1hKSlcbm1tL21pZ3JhdGVfZGV2aWNlLmM6NDY6XHRcdHJldHVybiBtaWdyYXRlX3ZtYV9jb2xsZWN0X3NraXAoc3RhcnQsIGVuZCwgd2Fsayk7XG5tbS9taWdyYXRlX2RldmljZS5jLTQ3LVxuLS1cbm1tL21pZ3JhdGVfZGV2aWNlLmMtNjEtXHRcdCAqL1xubW0vbWlncmF0ZV9kZXZpY2UuYzo2MjpcdFx0cmV0dXJuIG1pZ3JhdGVfdm1hX2NvbGxlY3Rfc2tpcChzdGFydCAmIzQzOyBQQUdFX1NJWkUsIGVuZCwgd2Fsayk7XG5tbS9taWdyYXRlX2RldmljZS5jLTYzLVx0fVxuLS1cbm1tL21pZ3JhdGVfZGV2aWNlLmM9ODU9c3RhdGljIGludCBtaWdyYXRlX3ZtYV9zcGxpdF9mb2xpbyhzdHJ1Y3QgZm9saW8gKmZvbGlvLFxuLS1cbm1tL21pZ3JhdGVfZGV2aWNlLmMtMTI0LVxubW0vbWlncmF0ZV9kZXZpY2UuYzoxMjU6LyoqIG1pZ3JhdGVfdm1hX2NvbGxlY3RfaHVnZV9wbWQgLSBjb2xsZWN0IFRIUCBwYWdlcyB3aXRob3V0IHNwbGl0dGluZyB0aGVcbm1tL21pZ3JhdGVfZGV2aWNlLmMtMTI2LSAqIGZvbGlvIGZvciBkZXZpY2UgcHJpdmF0ZSBwYWdlcy5cbi0tXG5tbS9taWdyYXRlX2RldmljZS5jLTEzNi0gKi9cbm1tL21pZ3JhdGVfZGV2aWNlLmM6MTM3OnN0YXRpYyBpbnQgbWlncmF0ZV92bWFfY29sbGVjdF9odWdlX3BtZChwbWRfdCAqcG1kcCwgdW5zaWduZWQgbG9uZyBzdGFydCxcbm1tL21pZ3JhdGVfZGV2aWNlLmMtMTM4LVx0XHRcdFx0XHR1bnNpZ25lZCBsb25nIGVuZCwgc3RydWN0IG1tX3dhbGsgKndhbGssXG4tLVxubW0vbWlncmF0ZV9kZXZpY2UuYy0xNTAtXHRcdHNwaW5fdW5sb2NrKHB0bCk7XG5tbS9taWdyYXRlX2RldmljZS5jOjE1MTpcdFx0cmV0dXJuIG1pZ3JhdGVfdm1hX2NvbGxlY3RfaG9sZShzdGFydCwgZW5kLCAtMSwgd2Fsayk7XG5tbS9taWdyYXRlX2RldmljZS5jLTE1Mi1cdH1cbi0tXG5tbS9taWdyYXRlX2RldmljZS5jLTE1Ni1cdFx0XHRzcGluX3VubG9jayhwdGwpO1xubW0vbWlncmF0ZV9kZXZpY2UuYzoxNTc6XHRcdFx0cmV0dXJuIG1pZ3JhdGVfdm1hX2NvbGxlY3Rfc2tpcChzdGFydCwgZW5kLCB3YWxrKTtcbm1tL21pZ3JhdGVfZGV2aWNlLmMtMTU4LVx0XHR9XG4tLVxubW0vbWlncmF0ZV9kZXZpY2UuYy0xNjItXHRcdFx0c3Bpbl91bmxvY2socHRsKTtcbm1tL21pZ3JhdGVfZGV2aWNlLmM6MTYzOlx0XHRcdHJldHVybiBtaWdyYXRlX3ZtYV9jb2xsZWN0X2hvbGUoc3RhcnQsIGVuZCwgLTEsIHdhbGspO1xubW0vbWlncmF0ZV9kZXZpY2UuYy0xNjQtXHRcdH1cbi0tXG5tbS9taWdyYXRlX2RldmljZS5jLTE3Mi1cdFx0XHRzcGluX3VubG9jayhwdGwpO1xubW0vbWlncmF0ZV9kZXZpY2UuYzoxNzM6XHRcdFx0cmV0dXJuIG1pZ3JhdGVfdm1hX2NvbGxlY3Rfc2tpcChzdGFydCwgZW5kLCB3YWxrKTtcbm1tL21pZ3JhdGVfZGV2aWNlLmMtMTc0LVx0XHR9XG4tLVxubW0vbWlncmF0ZV9kZXZpY2UuYy0xNzgtXHRcdFx0c3Bpbl91bmxvY2socHRsKTtcbm1tL21pZ3JhdGVfZGV2aWNlLmM6MTc5Olx0XHRcdHJldHVybiBtaWdyYXRlX3ZtYV9jb2xsZWN0X3NraXAoc3RhcnQsIGVuZCwgd2Fsayk7XG5tbS9taWdyYXRlX2RldmljZS5jLTE4MC1cdFx0fVxuLS1cbm1tL21pZ3JhdGVfZGV2aWNlLmMtMTkyLVx0XHRmb2xpb19wdXQoZm9saW8pO1xubW0vbWlncmF0ZV9kZXZpY2UuYzoxOTM6XHRcdHJldHVybiBtaWdyYXRlX3ZtYV9jb2xsZWN0X3NraXAoc3RhcnQsIGVuZCwgd2Fsayk7XG5tbS9taWdyYXRlX2RldmljZS5jLTE5NC1cdH1cbi0tXG5tbS9taWdyYXRlX2RldmljZS5jLTIyMi1cdFx0fVxubW0vbWlncmF0ZV9kZXZpY2UuYzoyMjM6XHRcdG1pZ3JhdGVfdm1hX2NvbGxlY3Rfc2tpcChzdGFydCAmIzQzOyBQQUdFX1NJWkUsIGVuZCwgd2Fsayk7XG5tbS9taWdyYXRlX2RldmljZS5jLTIyNC1cdFx0c3Bpbl91bmxvY2socHRsKTtcbi0tXG5tbS9taWdyYXRlX2RldmljZS5jLTIzNi1cdGlmIChyZXQpXG5tbS9taWdyYXRlX2RldmljZS5jOjIzNzpcdFx0cmV0dXJuIG1pZ3JhdGVfdm1hX2NvbGxlY3Rfc2tpcChzdGFydCwgZW5kLCB3YWxrKTtcbm1tL21pZ3JhdGVfZGV2aWNlLmMtMjM4LVx0aWYgKHBtZF9ub25lKHBtZHBfZ2V0X2xvY2tsZXNzKHBtZHApKSlcbm1tL21pZ3JhdGVfZGV2aWNlLmM6MjM5Olx0XHRyZXR1cm4gbWlncmF0ZV92bWFfY29sbGVjdF9ob2xlKHN0YXJ0LCBlbmQsIC0xLCB3YWxrKTtcbm1tL21pZ3JhdGVfZGV2aWNlLmMtMjQwLVxuLS1cbm1tL21pZ3JhdGVfZGV2aWNlLmMtMjQ0LVxubW0vbWlncmF0ZV9kZXZpY2UuYzoyNDU6c3RhdGljIGludCBtaWdyYXRlX3ZtYV9jb2xsZWN0X3BtZChwbWRfdCAqcG1kcCxcbm1tL21pZ3JhdGVfZGV2aWNlLmMtMjQ2LVx0XHRcdFx0ICAgdW5zaWduZWQgbG9uZyBzdGFydCxcbi0tXG5tbS9taWdyYXRlX2RldmljZS5jLTI2MC1cdGlmIChwbWRfdHJhbnNfaHVnZSgqcG1kcCkgfHwgIXBtZF9wcmVzZW50KCpwbWRwKSkge1xubW0vbWlncmF0ZV9kZXZpY2UuYzoyNjE6XHRcdGludCByZXQgPSBtaWdyYXRlX3ZtYV9jb2xsZWN0X2h1Z2VfcG1kKHBtZHAsIHN0YXJ0LCBlbmQsIHdhbGssIGZhdWx0X2ZvbGlvKTtcbm1tL21pZ3JhdGVfZGV2aWNlLmMtMjYyLVxuLS1cbm1tL21pZ3JhdGVfZGV2aWNlLmMtMzI1LVxubW0vbWlncmF0ZV9kZXZpY2UuYzozMjY6XHRcdFx0XHRcdHJldHVybiBtaWdyYXRlX3ZtYV9jb2xsZWN0X3NraXAoYWRkciwgZW5kLCB3YWxrKTtcbm1tL21pZ3JhdGVfZGV2aWNlLmMtMzI3LVx0XHRcdFx0fVxuLS1cbm1tL21pZ3JhdGVfZGV2aWNlLmMtMzcxLVxubW0vbWlncmF0ZV9kZXZpY2UuYzozNzI6XHRcdFx0XHRcdHJldHVybiBtaWdyYXRlX3ZtYV9jb2xsZWN0X3NraXAoYWRkciwgZW5kLCB3YWxrKTtcbm1tL21pZ3JhdGVfZGV2aWNlLmMtMzczLVx0XHRcdFx0fVxuLS1cbm1tL21pZ3JhdGVfZGV2aWNlLmM9NDk5PXN0YXRpYyBjb25zdCBzdHJ1Y3QgbW1fd2Fsa19vcHMgbWlncmF0ZV92bWFfd2Fsa19vcHMgPSB7XG5tbS9taWdyYXRlX2RldmljZS5jOjUwMDpcdC5wbWRfZW50cnlcdFx0PSBtaWdyYXRlX3ZtYV9jb2xsZWN0X3BtZCxcbm1tL21pZ3JhdGVfZGV2aWNlLmM6NTAxOlx0LnB0ZV9ob2xlXHRcdD0gbWlncmF0ZV92bWFfY29sbGVjdF9ob2xlLFxubW0vbWlncmF0ZV9kZXZpY2UuYy01MDItXHQud2Fsa19sb2NrXHRcdD0gUEdXQUxLX1JETE9DSyxcbi0tXG5tbS9taWdyYXRlX2RldmljZS5jLTUwNS0vKlxubW0vbWlncmF0ZV9kZXZpY2UuYzo1MDY6ICogbWlncmF0ZV92bWFfY29sbGVjdCgpIC0gY29sbGVjdCBwYWdlcyBvdmVyIGEgcmFuZ2Ugb2YgdmlydHVhbCBhZGRyZXNzZXNcbm1tL21pZ3JhdGVfZGV2aWNlLmMtNTA3LSAqIEBtaWdyYXRlOiBtaWdyYXRlIHN0cnVjdCBjb250YWluaW5nIGFsbCBtaWdyYXRpb24gaW5mb3JtYXRpb25cbi0tXG5tbS9taWdyYXRlX2RldmljZS5jLTUxMi0gKi9cbm1tL21pZ3JhdGVfZGV2aWNlLmM6NTEzOnN0YXRpYyB2b2lkIG1pZ3JhdGVfdm1hX2NvbGxlY3Qoc3RydWN0IG1pZ3JhdGVfdm1hICptaWdyYXRlKVxubW0vbWlncmF0ZV9kZXZpY2UuYy01MTQte1xuLS1cbm1tL21pZ3JhdGVfZGV2aWNlLmM9NTQyPXN0YXRpYyBib29sIG1pZ3JhdGVfdm1hX2NoZWNrX3BhZ2Uoc3RydWN0IHBhZ2UgKnBhZ2UsIHN0cnVjdCBwYWdlICpmYXVsdF9wYWdlKVxuLS1cbm1tL21pZ3JhdGVfZGV2aWNlLmMtNTQ3LVx0ICogT25lIGV4dHJhIHJlZiBiZWNhdXNlIGNhbGxlciBob2xkcyBhbiBleHRyYSByZWZlcmVuY2UsIGVpdGhlciBmcm9tXG5tbS9taWdyYXRlX2RldmljZS5jOjU0ODpcdCAqIGZvbGlvX2lzb2xhdGVfbHJ1KCkgZm9yIGEgcmVndWxhciBmb2xpbywgb3IgbWlncmF0ZV92bWFfY29sbGVjdCgpIGZvclxubW0vbWlncmF0ZV9kZXZpY2UuYy01NDktXHQgKiBhIGRldmljZSBmb2xpby5cbi0tXG5tbS9taWdyYXRlX2RldmljZS5jPTc0MD1pbnQgbWlncmF0ZV92bWFfc2V0dXAoc3RydWN0IG1pZ3JhdGVfdm1hICphcmdzKVxuLS1cbm1tL21pZ3JhdGVfZGV2aWNlLmMtNzY2LVxubW0vbWlncmF0ZV9kZXZpY2UuYzo3Njc6XHRtaWdyYXRlX3ZtYV9jb2xsZWN0KGFyZ3MpO1xubW0vbWlncmF0ZV9kZXZpY2UuYy03NjgtXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA2IDE2OjE3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDgxNjQKCQkJCQkJCW91dHB1dDogMjYKCQkJCQkJCXRob3VnaHRzOiAxOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRoZSB0aG91Z2h0IHByb2Nlc3MsIGFzIHJlcXVlc3RlZDoKCioqRGVjb25zdHJ1Y3RpbmcgYG1pZ3JhdGVfdm1hX3NldHVwYCoqCgpPa2F5LCBzbyBgbWlncmF0ZV92bWFfc2V0dXBgIGlzIGV4cG9ydGVkLiBUaGF0JiMzOTtzIGludGVyZXN0aW5nOyBpdCYjMzk7cyBkZXNpZ25lZCB0byBiZSB1c2VkIGV4dGVybmFsbHksIG1lYW5pbmcgb3RoZXIgcGFydHMgb2YgdGhlIHN5c3RlbSBhcmUgcmVseWluZyBvbiBpdC4gTXkgZmlyc3QgaW5zdGluY3QsIGdpdmVuIG15IGV4cGVyaWVuY2Ugd2l0aCBtZW1vcnkgbWFuYWdlbWVudCwgaXMgdG8gZmlndXJlIG91dCB0aGUgdXNlIGNhc2VzLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgY29udGV4dHMgaW4gd2hpY2ggdGhpcyBmdW5jdGlvbiBpcyBpbnZva2VkLiBXaG8mIzM5O3MgY2FsbGluZyBpdD8gV2hhdCBhcmUgdGhleSB0cnlpbmcgdG8gYWNoaWV2ZT8gS25vd2luZyB0aGUgY2FsbGluZyBzaXRlcyBpcyBjcnVjaWFsIHRvIHVuZGVyc3RhbmRpbmcgdGhlIGludGVudCBhbmQgcG90ZW50aWFsIGltcGFjdCBvZiB0aGlzIHBpZWNlIG9mIGNvZGUuIFRpbWUgdG8gZGlnIGludG8gdGhlIGNhbGwgZ3JhcGggYW5kIHNlZSB3aG8mIzM5O3MgaW50ZXJlc3RlZCBpbiBzZXR0aW5nIHVwIHZpcnR1YWwgbWVtb3J5IGFyZWFzIGZvciBtaWdyYXRpb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA2IDE2OjE3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O21pZ3JhdGVfdm1hX3NldHVwJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O0RvY3VtZW50YXRpb24vbW0vaG1tLnJzdD0yNjQ9dXNlIGhhcmR3YXJlIERNQSBvciBkZXZpY2Ugc3BlY2lmaWMgbG9hZC9zdG9yZSBpbnN0cnVjdGlvbnMgdG8gbWlncmF0ZSBkYXRhLlxuRG9jdW1lbnRhdGlvbi9tbS9obW0ucnN0OjI2NTpUaGUgbWlncmF0ZV92bWFfc2V0dXAoKSwgbWlncmF0ZV92bWFfcGFnZXMoKSwgYW5kIG1pZ3JhdGVfdm1hX2ZpbmFsaXplKClcbkRvY3VtZW50YXRpb24vbW0vaG1tLnJzdC0yNjYtZnVuY3Rpb25zIGFyZSBkZXNpZ25lZCB0byBtYWtlIGRyaXZlcnMgZWFzaWVyIHRvIHdyaXRlIGFuZCB0byBjZW50cmFsaXplIGNvbW1vblxuLS1cbkRvY3VtZW50YXRpb24vbW0vaG1tLnJzdD0yOTc9YmV0d2VlbiBkZXZpY2UgZHJpdmVyIHNwZWNpZmljIGNvZGUgYW5kIHNoYXJlZCBjb21tb24gY29kZTpcbi0tXG5Eb2N1bWVudGF0aW9uL21tL2htbS5yc3QtMzAxLSAgIFRoZSBkZXZpY2UgZHJpdmVyIGhhcyB0byBwYXNzIGEgYGBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3RgYCB0b1xuRG9jdW1lbnRhdGlvbi9tbS9obW0ucnN0OjMwMjogICBtaWdyYXRlX3ZtYV9zZXR1cCgpIHNvIHRoZSBtbWFwX3JlYWRfbG9jaygpIG9yIG1tYXBfd3JpdGVfbG9jaygpIG5lZWRzIHRvXG5Eb2N1bWVudGF0aW9uL21tL2htbS5yc3QtMzAzLSAgIGJlIGhlbGQgZm9yIHRoZSBkdXJhdGlvbiBvZiB0aGUgbWlncmF0aW9uLlxuRG9jdW1lbnRhdGlvbi9tbS9obW0ucnN0LTMwNC1cbkRvY3VtZW50YXRpb24vbW0vaG1tLnJzdDozMDU6Mi4gYGBtaWdyYXRlX3ZtYV9zZXR1cChzdHJ1Y3QgbWlncmF0ZV92bWEgKmFyZ3MpYGBcbkRvY3VtZW50YXRpb24vbW0vaG1tLnJzdC0zMDYtXG5Eb2N1bWVudGF0aW9uL21tL2htbS5yc3QtMzA3LSAgIFRoZSBkZXZpY2UgZHJpdmVyIGluaXRpYWxpemVzIHRoZSBgYHN0cnVjdCBtaWdyYXRlX3ZtYWBgIGZpZWxkcyBhbmQgcGFzc2VzXG5Eb2N1bWVudGF0aW9uL21tL2htbS5yc3Q6MzA4OiAgIHRoZSBwb2ludGVyIHRvIG1pZ3JhdGVfdm1hX3NldHVwKCkuIFRoZSBgYGFyZ3MtXHUwMDNlZmxhZ3NgYCBmaWVsZCBpcyB1c2VkIHRvXG5Eb2N1bWVudGF0aW9uL21tL2htbS5yc3QtMzA5LSAgIGZpbHRlciB3aGljaCBzb3VyY2UgcGFnZXMgc2hvdWxkIGJlIG1pZ3JhdGVkLiBGb3IgZXhhbXBsZSwgc2V0dGluZ1xuLS1cbkRvY3VtZW50YXRpb24vbW0vaG1tLnJzdC0zMTctXG5Eb2N1bWVudGF0aW9uL21tL2htbS5yc3Q6MzE4OiAgIE9uZSBvZiB0aGUgZmlyc3Qgc3RlcHMgbWlncmF0ZV92bWFfc2V0dXAoKSBkb2VzIGlzIHRvIGludmFsaWRhdGUgb3RoZXJcbkRvY3VtZW50YXRpb24vbW0vaG1tLnJzdC0zMTktICAgZGV2aWNlJiMzOTtzIE1NVXMgd2l0aCB0aGUgYGBtbXVfbm90aWZpZXJfaW52YWxpZGF0ZV9yYW5nZV9zdGFydCgoKWBgIGFuZFxuLS1cbkRvY3VtZW50YXRpb24vbW0vaG1tLnJzdC0zMjQtICAgYGBNTVVfTk9USUZZX01JR1JBVEVgYCBhbmQgdGhlIGBgb3duZXJgYCBmaWVsZCBzZXQgdG9cbkRvY3VtZW50YXRpb24vbW0vaG1tLnJzdDozMjU6ICAgdGhlIGBgYXJncy1cdTAwM2VwZ21hcF9vd25lcmBgIGZpZWxkIHBhc3NlZCB0byBtaWdyYXRlX3ZtYV9zZXR1cCgpLiBUaGlzXG5Eb2N1bWVudGF0aW9uL21tL2htbS5yc3QtMzI2LSAgIGFsbG93cyB0aGUgZGV2aWNlIGRyaXZlciB0byBza2lwIHRoZSBpbnZhbGlkYXRpb24gY2FsbGJhY2sgYW5kIG9ubHlcbi0tXG5Eb2N1bWVudGF0aW9uL21tL2htbS5yc3QtMzM3LSAgIGluc2VydGVkIGluIHBsYWNlIG9mIHRoZSBvcmlnaW5hbCBQVEUuXG5Eb2N1bWVudGF0aW9uL21tL2htbS5yc3Q6MzM4OiAgIG1pZ3JhdGVfdm1hX3NldHVwKCkgYWxzbyBjbGVhcnMgdGhlIGBgYXJncy1cdTAwM2Vkc3RgYCBhcnJheS5cbkRvY3VtZW50YXRpb24vbW0vaG1tLnJzdC0zMzktXG4tLVxuRG9jdW1lbnRhdGlvbi90cmFuc2xhdGlvbnMvemhfQ04vbW0vaG1tLnJzdD0yMTI9SE1NIOWIh+aNouWIsOebtOaOpeS9v+eUqCBzdHJ1Y3QgcGFnZSDnlKjkuo7orr7lpIflhoXlrZjvvIzov5nkvb/lvpflpKflpJrmlbDlhoXmoLjku6PnoIHot6/lvoTkuI3nn6XpgZPlt67lvILjgIJcbi0tXG5Eb2N1bWVudGF0aW9uL3RyYW5zbGF0aW9ucy96aF9DTi9tbS9obW0ucnN0LTIxOC3nlLHkuo4gQ1BVIOaXoOazleebtOaOpeiuv+mXruiuvuWkh+WGheWtmO+8jOWboOatpOiuvuWkh+mpseWKqOeoi+W6j+W/hemhu+S9v+eUqOehrOS7tiBETUEg5oiW6K6+5aSH54m55a6a55qE5Yqg6L29L+WtmFxuRG9jdW1lbnRhdGlvbi90cmFuc2xhdGlvbnMvemhfQ04vbW0vaG1tLnJzdDoyMTk65YKo5oyH5Luk5p2l6L+B56e75pWw5o2u44CCbWlncmF0ZV92bWFfc2V0dXAoKeOAgW1pZ3JhdGVfdm1hX3BhZ2VzKCkg5ZKMXG5Eb2N1bWVudGF0aW9uL3RyYW5zbGF0aW9ucy96aF9DTi9tbS9obW0ucnN0LTIyMC1taWdyYXRlX3ZtYV9maW5hbGl6ZSgpIOWHveaVsOaXqOWcqOS9v+mpseWKqOeoi+W6j+abtOaYk+S6jue8luWGmeW5tumbhuS4rei3qOmpseWKqOeoi+W6j+eahOmAmueUqOS7o+eggeOAglxuLS1cbkRvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL3poX0NOL21tL2htbS5yc3Q9MjQzPWRldm1fbWVtdW5tYXBfcGFnZXMoKSDlkowgZGV2bV9yZWxlYXNlX21lbV9yZWdpb24oKSDlvZPotYTmupDlj6/ku6Xnu5HlrprliLAgYGBzdHJ1Y3QgZGV2aWNlYGAuXG4tLVxuRG9jdW1lbnRhdGlvbi90cmFuc2xhdGlvbnMvemhfQ04vbW0vaG1tLnJzdC0yNDktXG5Eb2N1bWVudGF0aW9uL3RyYW5zbGF0aW9ucy96aF9DTi9tbS9obW0ucnN0OjI1MDogICDorr7lpIfpqbHliqjnqIvluo/lv4XpobvlsIYgYGBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3RgYCDkvKDpgJLnu5ltaWdyYXRlX3ZtYV9zZXR1cCgp77yMXG5Eb2N1bWVudGF0aW9uL3RyYW5zbGF0aW9ucy96aF9DTi9tbS9obW0ucnN0LTI1MS0gICDlm6DmraTpnIDopoHlnKjov4Hnp7vmnJ/pl7Tkv53nlZkgbW1hcF9yZWFkX2xvY2soKSDmiJYgbW1hcF93cml0ZV9sb2NrKCnjgIJcbkRvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL3poX0NOL21tL2htbS5yc3QtMjUyLVxuRG9jdW1lbnRhdGlvbi90cmFuc2xhdGlvbnMvemhfQ04vbW0vaG1tLnJzdDoyNTM6Mi4gYGBtaWdyYXRlX3ZtYV9zZXR1cChzdHJ1Y3QgbWlncmF0ZV92bWEgKmFyZ3MpYGBcbkRvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL3poX0NOL21tL2htbS5yc3QtMjU0LVxuRG9jdW1lbnRhdGlvbi90cmFuc2xhdGlvbnMvemhfQ04vbW0vaG1tLnJzdC0yNTUtICAg6K6+5aSH6amx5Yqo5Yid5aeL5YyW5LqGIGBgc3RydWN0IG1pZ3JhdGVfdm1hYGAg55qE5a2X5q6177yM5bm25bCG6K+l5oyH6ZKI5Lyg6YCS57uZXG5Eb2N1bWVudGF0aW9uL3RyYW5zbGF0aW9ucy96aF9DTi9tbS9obW0ucnN0OjI1NjogICBtaWdyYXRlX3ZtYV9zZXR1cCgp44CCYGBhcmdzLVx1MDAzZWZsYWdzYGAg5a2X5q615piv55So5p2l6L+H5ruk5ZOq5Lqb5rqQ6aG16Z2i5bqU6K+l6KKr6L+B56e744CCXG5Eb2N1bWVudGF0aW9uL3RyYW5zbGF0aW9ucy96aF9DTi9tbS9obW0ucnN0LTI1Ny0gICDkvovlpoLvvIzorr7nva4gYGBNSUdSQVRFX1ZNQV9TRUxFQ1RfU1lTVEVNYGAg5bCG5Y+q6L+B56e757O757uf5YaF5a2Y77yM6K6+572uXG4tLVxuRG9jdW1lbnRhdGlvbi90cmFuc2xhdGlvbnMvemhfQ04vbW0vaG1tLnJzdC0yNjItXG5Eb2N1bWVudGF0aW9uL3RyYW5zbGF0aW9ucy96aF9DTi9tbS9obW0ucnN0OjI2MzogICBtaWdyYXRlX3ZtYV9zZXR1cCgp5omA5YGa55qE56ys5LiA5q2l5piv55SoIGBgbW11X25vdGlmaWVyX2ludmFsaWRhdGVfcmFuZ2Vfc3RhcnQoKWBgXG5Eb2N1bWVudGF0aW9uL3RyYW5zbGF0aW9ucy96aF9DTi9tbS9obW0ucnN0LTI2NC0gICDlkowgYGBtbXVfbm90aWZpZXJfaW52YWxpZGF0ZV9yYW5nZV9lbmQoKWBgIOiwg+eUqOadpemBjeWOhuiuvuWkh+WRqOWbtOeahOmhteihqO+8jOS9v1xuLS1cbkRvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL3poX0NOL21tL2htbS5yc3QtMjY3LSAgIOWFtiBgYGV2ZW50YGAg5a2X5q616K6+572u5Li6TU1VX05PVElGWV9NSUdSQVRF77yMIGBgb3duZXJgYCDlrZfmrrXorr7nva7kuLrkvKDpgJLnu5lcbkRvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL3poX0NOL21tL2htbS5yc3Q6MjY4OiAgIG1pZ3JhdGVfdm1hX3NldHVwKCnnmoQgYGBhcmdzLVx1MDAzZXBnbWFwX293bmVyYGAg5a2X5q6144CC6L+Z5YWB6K646K6+5aSH6amx5Yqo6Lez6L+H5pegXG5Eb2N1bWVudGF0aW9uL3RyYW5zbGF0aW9ucy96aF9DTi9tbS9obW0ucnN0LTI2OS0gICDmlYjljJblm57osIPvvIzlj6rml6DmlYjljJbpgqPkupvlrp7pmYXmraPlnKjov4Hnp7vnmoTorr7lpIfnp4HmnIlNTVXmmKDlsITjgILov5nkuIDngrnlsIblnKjkuIvkuIDoioLor6bnu4bop6Pph4rjgIJcbi0tXG5Eb2N1bWVudGF0aW9uL3RyYW5zbGF0aW9ucy96aF9DTi9tbS9obW0ucnN0LTI3NS0gICBgYGxvY2tfcGFnZSgpYGDplIHlrprvvIzkuI5MUlXpmpTnprvvvIjlpoLmnpzns7vnu5/lhoXlrZjlkozorr7lpIfnp4HmnInpobXkuI3lnKhMUlXkuIrvvInvvIzku47ov5tcbkRvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL3poX0NOL21tL2htbS5yc3Q6Mjc2OiAgIOeoi+S4reWPlua2iOaYoOWwhO+8jOW5tuaPkuWFpeS4gOS4queJueauiueahOi/geenu1BUReadpeS7o+abv+WOn+adpeeahFBUReOAgiBtaWdyYXRlX3ZtYV9zZXR1cCgpXG5Eb2N1bWVudGF0aW9uL3RyYW5zbGF0aW9ucy96aF9DTi9tbS9obW0ucnN0LTI3Ny0gICDov5jmuIXpmaTkuoYgYGBhcmdzLVx1MDAzZWRzdGBgIOaVsOe7hOOAglxuLS1cbmFyY2gvcG93ZXJwYy9rdm0vYm9vazNzX2h2X3V2bWVtLmM9NTEzPXN0YXRpYyBpbnQgX19rdm1wcGNfc3ZtX3BhZ2Vfb3V0KHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxuLS1cbmFyY2gvcG93ZXJwYy9rdm0vYm9vazNzX2h2X3V2bWVtLmMtNTM4LVxuYXJjaC9wb3dlcnBjL2t2bS9ib29rM3NfaHZfdXZtZW0uYzo1Mzk6XHRyZXQgPSBtaWdyYXRlX3ZtYV9zZXR1cChcdTAwMjZtaWcpO1xuYXJjaC9wb3dlcnBjL2t2bS9ib29rM3NfaHZfdXZtZW0uYy01NDAtXHRpZiAocmV0KVxuLS1cbmFyY2gvcG93ZXJwYy9rdm0vYm9vazNzX2h2X3V2bWVtLmM9NzQwPXN0YXRpYyBpbnQga3ZtcHBjX3N2bV9wYWdlX2luKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxuLS1cbmFyY2gvcG93ZXJwYy9rdm0vYm9vazNzX2h2X3V2bWVtLmMtNzYwLVxuYXJjaC9wb3dlcnBjL2t2bS9ib29rM3NfaHZfdXZtZW0uYzo3NjE6XHRyZXQgPSBtaWdyYXRlX3ZtYV9zZXR1cChcdTAwMjZtaWcpO1xuYXJjaC9wb3dlcnBjL2t2bS9ib29rM3NfaHZfdXZtZW0uYy03NjItXHRpZiAocmV0KVxuLS1cbmRyaXZlcnMvZ3B1L2RybS9hbWQvYW1ka2ZkL2tmZF9taWdyYXRlLmM9Mzk0PXN2bV9taWdyYXRlX3ZtYV90b192cmFtKHN0cnVjdCBrZmRfbm9kZSAqbm9kZSwgc3RydWN0IHN2bV9yYW5nZSAqcHJhbmdlLFxuLS1cbmRyaXZlcnMvZ3B1L2RybS9hbWQvYW1ka2ZkL2tmZF9taWdyYXRlLmMtNDMxLVxuZHJpdmVycy9ncHUvZHJtL2FtZC9hbWRrZmQva2ZkX21pZ3JhdGUuYzo0MzI6XHRyID0gbWlncmF0ZV92bWFfc2V0dXAoXHUwMDI2bWlncmF0ZSk7XG5kcml2ZXJzL2dwdS9kcm0vYW1kL2FtZGtmZC9rZmRfbWlncmF0ZS5jLTQzMy1cdGlmIChyKSB7XG4tLVxuZHJpdmVycy9ncHUvZHJtL2FtZC9hbWRrZmQva2ZkX21pZ3JhdGUuYz02OTM9c3ZtX21pZ3JhdGVfdm1hX3RvX3JhbShzdHJ1Y3Qga2ZkX25vZGUgKm5vZGUsIHN0cnVjdCBzdm1fcmFuZ2UgKnByYW5nZSxcbi0tXG5kcml2ZXJzL2dwdS9kcm0vYW1kL2FtZGtmZC9rZmRfbWlncmF0ZS5jLTczNC1cbmRyaXZlcnMvZ3B1L2RybS9hbWQvYW1ka2ZkL2tmZF9taWdyYXRlLmM6NzM1Olx0ciA9IG1pZ3JhdGVfdm1hX3NldHVwKFx1MDAyNm1pZ3JhdGUpO1xuZHJpdmVycy9ncHUvZHJtL2FtZC9hbWRrZmQva2ZkX21pZ3JhdGUuYy03MzYtXHRpZiAocikge1xuLS1cbmRyaXZlcnMvZ3B1L2RybS9hbWQvYW1ka2ZkL2tmZF9zdm0uYz0zNTE1PXN2bV9yYW5nZV9iZXN0X3ByZWZldGNoX2xvY2F0aW9uKHN0cnVjdCBzdm1fcmFuZ2UgKnByYW5nZSlcbi0tXG5kcml2ZXJzL2dwdS9kcm0vYW1kL2FtZGtmZC9rZmRfc3ZtLmMtMzU4Mi0gKiBhbmQgcmVzdG9yZSB3b3JrOlxuZHJpdmVycy9ncHUvZHJtL2FtZC9hbWRrZmQva2ZkX3N2bS5jOjM1ODM6ICogMS4gbWlncmF0ZV92bWFfc2V0dXAgaW52YWxpZGF0ZSBwYWdlcywgTU1VIG5vdGlmaWVyIGNhbGxiYWNrIHN2bV9yYW5nZV9ldmljdFxuZHJpdmVycy9ncHUvZHJtL2FtZC9hbWRrZmQva2ZkX3N2bS5jLTM1ODQtICogICAgc3RvcHMgYWxsIHF1ZXVlcywgc2NoZWR1bGUgcmVzdG9yZSB3b3JrXG4tLVxuZHJpdmVycy9ncHUvZHJtL2RybV9wYWdlbWFwLmM9NjE2PWludCBkcm1fcGFnZW1hcF9taWdyYXRlX3RvX2Rldm1lbShzdHJ1Y3QgZHJtX3BhZ2VtYXBfZGV2bWVtICpkZXZtZW1fYWxsb2NhdGlvbixcbi0tXG5kcml2ZXJzL2dwdS9kcm0vZHJtX3BhZ2VtYXAuYy02ODMtXG5kcml2ZXJzL2dwdS9kcm0vZHJtX3BhZ2VtYXAuYzo2ODQ6XHRlcnIgPSBtaWdyYXRlX3ZtYV9zZXR1cChcdTAwMjZtaWdyYXRlKTtcbmRyaXZlcnMvZ3B1L2RybS9kcm1fcGFnZW1hcC5jLTY4NS1cdGlmIChlcnIpXG4tLVxuZHJpdmVycy9ncHUvZHJtL2RybV9wYWdlbWFwLmM9MTIxMT1zdGF0aWMgaW50IF9fZHJtX3BhZ2VtYXBfbWlncmF0ZV90b19yYW0oc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2YXMsXG4tLVxuZHJpdmVycy9ncHUvZHJtL2RybV9wYWdlbWFwLmMtMTI2NC1cbmRyaXZlcnMvZ3B1L2RybS9kcm1fcGFnZW1hcC5jOjEyNjU6XHRlcnIgPSBtaWdyYXRlX3ZtYV9zZXR1cChcdTAwMjZtaWdyYXRlKTtcbmRyaXZlcnMvZ3B1L2RybS9kcm1fcGFnZW1hcC5jLTEyNjYtXHRpZiAoZXJyKVxuLS1cbmRyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L25vdXZlYXVfZG1lbS5jPTE4Mz1zdGF0aWMgdm1fZmF1bHRfdCBub3V2ZWF1X2RtZW1fbWlncmF0ZV90b19yYW0oc3RydWN0IHZtX2ZhdWx0ICp2bWYpXG4tLVxuZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbm91dmVhdV9kbWVtLmMtMjM1LVx0ICovXG5kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9ub3V2ZWF1X2RtZW0uYzoyMzY6XHRpZiAobWlncmF0ZV92bWFfc2V0dXAoXHUwMDI2YXJncykgXHUwMDNjIDApXG5kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9ub3V2ZWF1X2RtZW0uYy0yMzctXHRcdHJldHVybiBWTV9GQVVMVF9TSUdCVVM7XG4tLVxuZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbm91dmVhdV9kbWVtLmM9ODIyPW5vdXZlYXVfZG1lbV9taWdyYXRlX3ZtYShzdHJ1Y3Qgbm91dmVhdV9kcm0gKmRybSxcbi0tXG5kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9ub3V2ZWF1X2RtZW0uYy04NzEtXG5kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9ub3V2ZWF1X2RtZW0uYzo4NzI6XHRcdHJldCA9IG1pZ3JhdGVfdm1hX3NldHVwKFx1MDAyNmFyZ3MpO1xuZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbm91dmVhdV9kbWVtLmMtODczLVx0XHRpZiAocmV0KVxuLS1cbmluY2x1ZGUvbGludXgvbWlncmF0ZS5oPTE2MD1zdHJ1Y3QgbWlncmF0ZV92bWEge1xuLS1cbmluY2x1ZGUvbGludXgvbWlncmF0ZS5oLTE2Ni1cdCAqIFRoZSBzcmMgYXJyYXkgbXVzdCBub3QgYmUgbW9kaWZpZWQgYnkgdGhlIGNhbGxlciBhZnRlclxuaW5jbHVkZS9saW51eC9taWdyYXRlLmg6MTY3Olx0ICogbWlncmF0ZV92bWFfc2V0dXAoKSwgYW5kIG11c3Qgbm90IGNoYW5nZSB0aGUgZHN0IGFycmF5IGFmdGVyXG5pbmNsdWRlL2xpbnV4L21pZ3JhdGUuaC0xNjgtXHQgKiBtaWdyYXRlX3ZtYV9wYWdlcygpIHJldHVybnMuXG4tLVxuaW5jbHVkZS9saW51eC9taWdyYXRlLmgtMTk0LVxuaW5jbHVkZS9saW51eC9taWdyYXRlLmg6MTk1OmludCBtaWdyYXRlX3ZtYV9zZXR1cChzdHJ1Y3QgbWlncmF0ZV92bWEgKmFyZ3MpO1xuaW5jbHVkZS9saW51eC9taWdyYXRlLmgtMTk2LXZvaWQgbWlncmF0ZV92bWFfcGFnZXMoc3RydWN0IG1pZ3JhdGVfdm1hICptaWdyYXRlKTtcbi0tXG5saWIvdGVzdF9obW0uYz0xMTIwPXN0YXRpYyBpbnQgZG1pcnJvcl9taWdyYXRlX3RvX3N5c3RlbShzdHJ1Y3QgZG1pcnJvciAqZG1pcnJvcixcbi0tXG5saWIvdGVzdF9obW0uYy0xMTY0LVxubGliL3Rlc3RfaG1tLmM6MTE2NTpcdFx0cmV0ID0gbWlncmF0ZV92bWFfc2V0dXAoXHUwMDI2YXJncyk7XG5saWIvdGVzdF9obW0uYy0xMTY2LVx0XHRpZiAocmV0KVxuLS1cbmxpYi90ZXN0X2htbS5jPTExODk9c3RhdGljIGludCBkbWlycm9yX21pZ3JhdGVfdG9fZGV2aWNlKHN0cnVjdCBkbWlycm9yICpkbWlycm9yLFxuLS1cbmxpYi90ZXN0X2htbS5jLTEyNDItXHRcdFx0XHRNSUdSQVRFX1ZNQV9TRUxFQ1RfQ09NUE9VTkQ7XG5saWIvdGVzdF9obW0uYzoxMjQzOlx0XHRyZXQgPSBtaWdyYXRlX3ZtYV9zZXR1cChcdTAwMjZhcmdzKTtcbmxpYi90ZXN0X2htbS5jLTEyNDQtXHRcdGlmIChyZXQpXG4tLVxubGliL3Rlc3RfaG1tLmM9MTY1Mz1zdGF0aWMgdm1fZmF1bHRfdCBkbWlycm9yX2Rldm1lbV9mYXVsdChzdHJ1Y3Qgdm1fZmF1bHQgKnZtZilcbi0tXG5saWIvdGVzdF9obW0uYy0xNzA1LVx0LypcbmxpYi90ZXN0X2htbS5jOjE3MDY6XHQgKiBJbiBwcmFjdGljZSBtaWdyYXRlX3ZtYV9zZXR1cCgpIHNob3VsZCBuZXZlciBmYWlsIHVubGVzcyB0aGVcbmxpYi90ZXN0X2htbS5jLTE3MDctXHQgKiB0ZXN0IGlzIHdyb25nIGFzIGl0IGp1c3QgdGVzdHMgc29tZSBzdGF0aWMgVk1BIHByb3BlcnRpZXMuXG5saWIvdGVzdF9obW0uYy0xNzA4LVx0ICovXG5saWIvdGVzdF9obW0uYzoxNzA5Olx0aWYgKG1pZ3JhdGVfdm1hX3NldHVwKFx1MDAyNmFyZ3MpKSB7XG5saWIvdGVzdF9obW0uYy0xNzEwLVx0XHRyZXQgPSBWTV9GQVVMVF9TSUdCVVM7XG4tLVxubW0vbWlncmF0ZV9kZXZpY2UuYz02NzA9c3RhdGljIHZvaWQgbWlncmF0ZV92bWFfdW5tYXAoc3RydWN0IG1pZ3JhdGVfdm1hICptaWdyYXRlKVxuLS1cbm1tL21pZ3JhdGVfZGV2aWNlLmMtNjc2LS8qKlxubW0vbWlncmF0ZV9kZXZpY2UuYzo2Nzc6ICogbWlncmF0ZV92bWFfc2V0dXAoKSAtIHByZXBhcmUgdG8gbWlncmF0ZSBhIHJhbmdlIG9mIG1lbW9yeVxubW0vbWlncmF0ZV9kZXZpY2UuYy02NzgtICogQGFyZ3M6IGNvbnRhaW5zIHRoZSB2bWEsIHN0YXJ0LCBhbmQgcGZucyBhcnJheXMgZm9yIHRoZSBtaWdyYXRpb25cbi0tXG5tbS9taWdyYXRlX2RldmljZS5jLTczOS0gKi9cbm1tL21pZ3JhdGVfZGV2aWNlLmM6NzQwOmludCBtaWdyYXRlX3ZtYV9zZXR1cChzdHJ1Y3QgbWlncmF0ZV92bWEgKmFyZ3MpXG5tbS9taWdyYXRlX2RldmljZS5jLTc0MS17XG4tLVxubW0vbWlncmF0ZV9kZXZpY2UuYy03NzktfVxubW0vbWlncmF0ZV9kZXZpY2UuYzo3ODA6RVhQT1JUX1NZTUJPTChtaWdyYXRlX3ZtYV9zZXR1cCk7XG5tbS9taWdyYXRlX2RldmljZS5jLTc4MS1cbi0tXG5tbS9taWdyYXRlX2RldmljZS5jPTEzNjY9c3RhdGljIHVuc2lnbmVkIGxvbmcgbWlncmF0ZV9kZXZpY2VfcGZuX2xvY2sodW5zaWduZWQgbG9uZyBwZm4pXG4tLVxubW0vbWlncmF0ZV9kZXZpY2UuYy0xMzg3LSAqXG5tbS9taWdyYXRlX2RldmljZS5jOjEzODg6ICogbWlncmF0ZV92bWFfc2V0dXAoKSBpcyBzaW1pbGFyIGluIGNvbmNlcHQgdG8gbWlncmF0ZV92bWFfc2V0dXAoKSBleGNlcHQgdGhhdFxubW0vbWlncmF0ZV9kZXZpY2UuYy0xMzg5LSAqIGluc3RlYWQgb2YgbG9va2luZyB1cCBwYWdlcyBiYXNlZCBvbiB2aXJ0dWFsIGFkZHJlc3MgbWFwcGluZ3MgYSByYW5nZSBvZlxuLS1cbm1tL21pZ3JhdGVfZGV2aWNlLmMtMTM5NS0gKlxubW0vbWlncmF0ZV9kZXZpY2UuYzoxMzk2OiAqIExpa2UgbWlncmF0ZV92bWFfc2V0dXAoKSB0aGlzIGZ1bmN0aW9uIHdpbGwgdGFrZSBhIHJlZmVyZW5jZSBhbmQgbG9jayBhbnlcbm1tL21pZ3JhdGVfZGV2aWNlLmMtMTM5Ny0gKiBtaWdyYXRpbmcgcGFnZXMgdGhhdCBhcmVuJiMzOTt0IGZyZWUgYmVmb3JlIHVubWFwcGluZyB0aGVtLiBEcml2ZXJzIG1heSB0aGVuXG4tLVxubW0vbWlncmF0ZV9kZXZpY2UuYz0xNDY2PWludCBtaWdyYXRlX2RldmljZV9jb2hlcmVudF9mb2xpbyhzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuLS1cbm1tL21pZ3JhdGVfZGV2aWNlLmMtMTQ3OC1cdCAqIHRoZSBzb3VyY2UgZm9saW8uIFNvIGNhbGwgbWlncmF0ZV92bWFfdW5tYXAoKSBkaXJlY3RseSB0byB1bm1hcCB0aGVcbm1tL21pZ3JhdGVfZGV2aWNlLmM6MTQ3OTpcdCAqIGZvbGlvIGFzIG1pZ3JhdGVfdm1hX3NldHVwKCkgd2lsbCBmYWlsIGlmIGFyZ3Mudm1hID09IE5VTEwuXG5tbS9taWdyYXRlX2RldmljZS5jLTE0ODAtXHQgKi9cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDYgMTY6MTc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTIyMjMKCQkJCQkJCW91dHB1dDogMjcKCQkJCQkJCXRob3VnaHRzOiA0MQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgc3VtbWFyaXplZCBmcm9tIG15IHBlcnNwZWN0aXZlIGFzIGFuIGV4cGVydCBpbiBteSBmaWVsZDoKCioqQXNzZXNzaW5nIHRoZSBGdXp6aW5nIFBvdGVudGlhbCBvZiBhIFRlc3QgTW9kdWxlKioKClJpZ2h0LCBzbyB0aGlzIHRoaW5nIGlzIGJlaW5nIHVzZWQgd2l0aGluIGBsaWIvdGVzdF9obW0uY2AuIE9rYXksIHRoYXQmIzM5O3MgaW50ZXJlc3RpbmcuIFRoZSBmYWN0IHRoYXQgaXQmIzM5O3MgaW4gYSBgLmNgIGZpbGUgbmFtZWQgYHRlc3RfaG1tYCBzdWdnZXN0cyBpdCBtaWdodCBiZSBhIHRlc3RpbmcgbW9kdWxlIG9mIHNvbWUga2luZC4gTm93LCBhIHRlc3QgbW9kdWxlLi4uIHRoYXQgKmNvdWxkKiBiZSBhIGdyZWF0IGNhbmRpZGF0ZSBmb3IgZnV6emluZyEgSXQmIzM5O3Mgd29ydGggYSBxdWljayBsb29rIGF0IGBsaWIvdGVzdF9obW0uY2AgdG8gY29uZmlybSB0aGF0IHN1c3BpY2lvbi4gVGhlIHBvdGVudGlhbCBwYXlvZmYgaXMgaGlnaDsgaWYgaXQgKmlzKiBhIHRlc3QsIGl0JiMzOTtzIGRlc2lnbmVkIHRvIGV4cGxvcmUgdGhlIGJlaGF2aW9yIG9mIHRoZSBgaG1tYCBsaWJyYXJ5IGFuZCB0aGVyZWZvcmUsIG1heSBiZSBhbiBpZGVhbCBwbGFjZSB0byBmaW5kIHZ1bG5lcmFiaWxpdGllcyB2aWEgdW5leHBlY3RlZCBpbnB1dHMgYW5kIGNvbmZpZ3VyYXRpb25zLiBMZXQmIzM5O3MgZGlnIGluIGFuZCBzZWUgd2hhdCYjMzk7cyB3aGF0IQoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wNiAxNjoxNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgVEVTVF9ITU0mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtsaWIvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2xpYi9LY29uZmlnLmRlYnVnPTMzMTg9Y29uZmlnIFRFU1RfTUVNSU5JVFxuLS1cbmxpYi9LY29uZmlnLmRlYnVnLTMzMjUtXG5saWIvS2NvbmZpZy5kZWJ1ZzozMzI2OmNvbmZpZyBURVNUX0hNTVxubGliL0tjb25maWcuZGVidWctMzMyNy1cdHRyaXN0YXRlIFwmIzM0O1Rlc3QgSE1NIChIZXRlcm9nZW5lb3VzIE1lbW9yeSBNYW5hZ2VtZW50KVwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wNiAxNjoxNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMjU3MAoJCQkJCQkJb3V0cHV0OiAyNgoJCQkJCQkJdGhvdWdodHM6IDMyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCBwcmVzZW50ZWQgYXMgYSBmaXJzdC1wZXJzb24gZXhwZXJ0IHN1bW1hcnk6CgoqKkFuYWx5emluZyBDb25maWd1cmF0aW9uIERlcGVuZGVuY2llcyoqCgpBbHJpZ2h0LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBgVEVTVF9ITU1gIGNvbmZpZ3VyYXRpb24uIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byB0cmVhdCB0aGlzIGFzIGEgY29uZmlndXJhdGlvbiwgcHJvYmFibHkgZm9yIGEgc3BlY2lmaWMgcHJvY2Vzcy4gTm93LCB0aGUga2V5IHF1ZXN0aW9uIGlzLCBkb2VzIHRoaXMgYFRFU1RfSE1NYCBzZXR1cCBoYXZlIGFueSBkZXBlbmRlbmNpZXMgb24gdGhlIGBERVZJQ0VfTUlHUkFUSU9OYCBmdW5jdGlvbmFsaXR5PyBJIG5lZWQgdG8gcXVpY2tseSBkZXRlcm1pbmUgdGhlIHJlbGF0aW9uc2hpcCBiZXR3ZWVuIHRoZXNlIHR3bywgYXMgdGhpcyYjMzk7bGwgYWZmZWN0IGhvdyBJIG1hbmFnZSB0aGVtIGFuZCBhbnkgcG90ZW50aWFsIGlzc3VlcyBpZiBjaGFuZ2VzIGFyZSBtYWRlIHRvIGVpdGhlciBvbmUgb2YgdGhlbS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDYgMTY6MTc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7VEVTVF9ITU0mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtsaWIvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2xpYi9LY29uZmlnLmRlYnVnPTMzMTg9Y29uZmlnIFRFU1RfTUVNSU5JVFxuLS1cbmxpYi9LY29uZmlnLmRlYnVnLTMzMjUtXG5saWIvS2NvbmZpZy5kZWJ1ZzozMzI2OmNvbmZpZyBURVNUX0hNTVxubGliL0tjb25maWcuZGVidWctMzMyNy1cdHRyaXN0YXRlIFwmIzM0O1Rlc3QgSE1NIChIZXRlcm9nZW5lb3VzIE1lbW9yeSBNYW5hZ2VtZW50KVwmIzM0O1xuLS1cbmxpYi9NYWtlZmlsZT0xMDI9b2JqLSQoQ09ORklHX1RFU1RfTE9DS1VQKSAmIzQzOz0gdGVzdF9sb2NrdXAub1xubGliL01ha2VmaWxlOjEwMzpvYmotJChDT05GSUdfVEVTVF9ITU0pICYjNDM7PSB0ZXN0X2htbS5vXG5saWIvTWFrZWZpbGUtMTA0LW9iai0kKENPTkZJR19URVNUX0ZSRUVfUEFHRVMpICYjNDM7PSB0ZXN0X2ZyZWVfcGFnZXMub1xuLS1cbmxpYi90ZXN0X2htbV91YXBpLmgtNi0gKi9cbmxpYi90ZXN0X2htbV91YXBpLmg6NzojaWZuZGVmIF9MSUJfVEVTVF9ITU1fVUFQSV9IXG5saWIvdGVzdF9obW1fdWFwaS5oOjg6I2RlZmluZSBfTElCX1RFU1RfSE1NX1VBUElfSFxubGliL3Rlc3RfaG1tX3VhcGkuaC05LVxuLS1cbmxpYi90ZXN0X2htbV91YXBpLmg9NzQ9ZW51bSB7XG4tLVxubGliL3Rlc3RfaG1tX3VhcGkuaC03OS1cbmxpYi90ZXN0X2htbV91YXBpLmg6ODA6I2VuZGlmIC8qIF9MSUJfVEVTVF9ITU1fVUFQSV9IICovXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA2IDE2OjE3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEzMDc3CgkJCQkJCQlvdXRwdXQ6IDM1CgkJCQkJCQl0aG91Z2h0czogMTkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgYSBzdW1tYXJ5IG9mIG15IHRob3VnaHQgcHJvY2VzcywgYXMgcmVxdWVzdGVkOgoKKipEaXZpbmcgaW50byBgS2NvbmZpZy5kZWJ1Z2AgZm9yIGBURVNUX0hNTWAqKgoKT2theSwgc28gSSBuZWVkIHRvIHVuZGVyc3RhbmQgc29tZXRoaW5nIGFib3V0IHRoZSBjb25maWd1cmF0aW9uIHJlbGF0ZWQgdG8gYFRFU1RfSE1NYC4gTGV0JiMzOTtzIHplcm8gaW4gb24gYGxpYi9LY29uZmlnLmRlYnVnYC4gVGhhdCYjMzk7cyB3aGVyZSBJIGV4cGVjdCB0byBmaW5kIHRoZSBzZXR0aW5ncywgZGVwZW5kZW5jaWVzLCBhbmQgYW55IGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmb3IgdGhpcyBmZWF0dXJlLiBJJiMzOTttIGdvaW5nIHRvIGxvb2sgc3BlY2lmaWNhbGx5IGFyb3VuZCB0aGUgYFRFU1RfSE1NYCBkZWZpbml0aW9uIGl0c2VsZi4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQ6CgoqICAgV2hhdCBvcHRpb25zIGV4aXN0PwoqICAgV2hhdCBvdGhlciBjb25maWd1cmF0aW9ucyBkb2VzIGl0IGRlcGVuZCBvbj8KKiAgIEFyZSB0aGVyZSBhbnkgaW50ZXJlc3RpbmcgY29tbWVudHMgb3IgZXhwbGFuYXRpb25zIHRoYXQgd2lsbCBwcm92aWRlIGNvbnRleHQ/CgpCYXNpY2FsbHksIEkgd2FudCB0byBxdWlja2x5IGdyYXNwIHRoZSByZWxldmFudCBkZXRhaWxzIHNvIEkgY2FuIG1vdmUgZm9yd2FyZCB3aXRoIG15IG90aGVyIHRhc2tzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wNiAxNjoxNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2xpYi9LY29uZmlnLmRlYnVnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMzMyMCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDszMzIwOlx0XHRoZWxwXG4zMzIxOlx0XHQgIFRlc3QgaWYgdGhlIGtlcm5lbCBpcyB6ZXJvLWluaXRpYWxpemluZyBoZWFwIGFuZCBwYWdlIGFsbG9jYXRpb25zLlxuMzMyMjpcdFx0ICBUaGlzIGNhbiBiZSB1c2VmdWwgdG8gdGVzdCBpbml0X29uX2FsbG9jIGFuZCBpbml0X29uX2ZyZWUgZmVhdHVyZXMuXG4zMzIzOlx0XG4zMzI0Olx0XHQgIElmIHVuc3VyZSwgc2F5IE4uXG4zMzI1Olx0XG4zMzI2Olx0Y29uZmlnIFRFU1RfSE1NXG4zMzI3Olx0XHR0cmlzdGF0ZSBcJiMzNDtUZXN0IEhNTSAoSGV0ZXJvZ2VuZW91cyBNZW1vcnkgTWFuYWdlbWVudClcJiMzNDtcbjMzMjg6XHRcdGRlcGVuZHMgb24gVFJBTlNQQVJFTlRfSFVHRVBBR0VcbjMzMjk6XHRcdGRlcGVuZHMgb24gREVWSUNFX1BSSVZBVEVcbjMzMzA6XHRcdHNlbGVjdCBITU1fTUlSUk9SXG4zMzMxOlx0XHRzZWxlY3QgTU1VX05PVElGSUVSXG4zMzMyOlx0XHRoZWxwXG4zMzMzOlx0XHQgIFRoaXMgaXMgYSBwc2V1ZG8gZGV2aWNlIGRyaXZlciBzb2xlbHkgZm9yIHRlc3RpbmcgSE1NLlxuMzMzNDpcdFx0ICBTYXkgTSBoZXJlIGlmIHlvdSB3YW50IHRvIGJ1aWxkIHRoZSBITU0gdGVzdCBtb2R1bGUuXG4zMzM1Olx0XHQgIERvaW5nIHNvIHdpbGwgYWxsb3cgeW91IHRvIHJ1biB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0L3ZtL2htbS10ZXN0cy5cbjMzMzY6XHRcbjMzMzc6XHRcdCAgSWYgdW5zdXJlLCBzYXkgTi5cbjMzMzg6XHRcbjMzMzk6XHRjb25maWcgVEVTVF9GUkVFX1BBR0VTXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA2IDE2OjE3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEzNjAwCgkJCQkJCQlvdXRwdXQ6IDI2CgkJCQkJCQl0aG91Z2h0czogMTgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgc3VtbWFyeSwgcHJlc2VudGVkIGFzIGEgc3RyZWFtIG9mIHRob3VnaHQ6CgoqKkNoZWNraW5nIHRoZSBQcml2YXRlIERldmljZSBTdGF0dXMqKgoKUmlnaHQsIHRoaXMgaGluZ2VzIG9uIGBERVZJQ0VfUFJJVkFURWAuIEkgbmVlZCB0byBmaWd1cmUgb3V0IHRoZSBzdGF0dXMgb2YgdGhhdCB2YXJpYWJsZSBiZWZvcmUgSSBjYW4gcHJvY2VlZC4gTm8gcG9pbnQgZ29pbmcgZG93biBhbnkgcmFiYml0IGhvbGVzIHVudGlsIEkgdW5kZXJzdGFuZCBpZiBgREVWSUNFX1BSSVZBVEVgIGlzIHNldCBvciBub3QuIExldCYjMzk7cyBzdGFydCBieSB2ZXJpZnlpbmcgdGhlIGN1cnJlbnQgc3RhdGUgb2YgYERFVklDRV9QUklWQVRFYC4gSSBuZWVkIHRvIGlzb2xhdGUgdGhpcyB2YWx1ZSB0byBkZXRlcm1pbmUgdGhlIG5leHQgc3RlcDsgaXQgd2lsbCBiZSBjcml0aWNhbCBpbiBkZWNpZGluZyB0aGUgZXhlY3V0aW9uIHBhdGguCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA2IDE2OjE4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBERVZJQ0VfUFJJVkFURSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9LY29uZmlnPTEyNjQ9Y29uZmlnIEdFVF9GUkVFX1JFR0lPTlxuLS1cbm1tL0tjb25maWctMTI2Ni1cbm1tL0tjb25maWc6MTI2Nzpjb25maWcgREVWSUNFX1BSSVZBVEVcbm1tL0tjb25maWctMTI2OC1cdGJvb2wgXCYjMzQ7VW5hZGRyZXNzYWJsZSBkZXZpY2UgbWVtb3J5IChHUFUgbWVtb3J5LCAuLi4pXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA2IDE2OjE4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEzODM0CgkJCQkJCQlvdXRwdXQ6IDMzCgkJCQkJCQl0aG91Z2h0czogMTYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGhvdWdodCBwcm9jZXNzLCBzdW1tYXJpemVkIGFzIGlmIEkgd2VyZSBjb25zaWRlcmluZyB0aGUgZ2l2ZW4gaW5zdHJ1Y3Rpb25zOgoKKipBbmFseXppbmcgbW0vS2NvbmZpZyBhcm91bmQgREVWSUNFX1BSSVZBVEUqKgoKT2theSwgc28gdGhlIHByb21wdCB3YW50cyBtZSB0byBmb2N1cyBvbiBgbW0vS2NvbmZpZ2AsIHNwZWNpZmljYWxseSBhcm91bmQgdGhlIGBERVZJQ0VfUFJJVkFURWAgY29uZmlndXJhdGlvbiBvcHRpb24uIFJpZ2h0LCBzbyB0aGlzIGlzIGFib3V0IG1lbW9yeSBtYW5hZ2VtZW50IHdpdGhpbiB0aGUga2VybmVsJiMzOTtzIGNvbmZpZ3VyYXRpb24gc3lzdGVtLiBJIG5lZWQgdG8gZmlndXJlIG91dCB3aGF0IHJvbGUgYERFVklDRV9QUklWQVRFYCBwbGF5cyBpbiB0aGlzIGNvbnRleHQuIEkmIzM5O20gYXNzdW1pbmcgaXQgcmVsYXRlcyB0byB3aGV0aGVyIGNlcnRhaW4gbWVtb3J5IHJlZ2lvbnMgb3IgZGV2aWNlcyBzaG91bGQgYmUgY29uc2lkZXJlZCBwcml2YXRlIHRvIGEgc3BlY2lmaWMgZGV2aWNlIG9yLCBjb252ZXJzZWx5LCBzaGFyZWQgYW5kIG1hbmFnZWQgYXQgYSBtb3JlIGdsb2JhbCBsZXZlbC4gVGhlIGBLY29uZmlnYCBmaWxlcyBhcmUgd2hlcmUgdGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBhcmUgZGVmaW5lZCwgYWxvbmcgd2l0aCB0aGVpciBkZXBlbmRlbmNpZXMsIGRlc2NyaXB0aW9ucywgYW5kIGRlZmF1bHRzLCBzbyBJIG5lZWQgdG8gZ28gcmVhZCB0aGUgY29udGVudHMgb2YgdGhhdCBmaWxlLiBJIGV4cGVjdCB0byBzZWUgZGVmaW5pdGlvbnMgZm9yIGBERVZJQ0VfUFJJVkFURWAsIGFuZCBsaWtlbHkgYSBkZXNjcmlwdGlvbiBvZiBpdHMgbWVhbmluZywgcGVyaGFwcyBjb25kaXRpb25hbCBjb21waWxhdGlvbiBiYXNlZCBvbiB0aGlzIG9wdGlvbiBhbmQgcmVsYXRlZCBvcHRpb25zLiBJJiMzOTtsbCBiZSBsb29raW5nIGZvciB0aGluZ3MgbGlrZToKCiogICBXaGF0IGRldmljZXMgb3IgbWVtb3J5IHJlZ2lvbnMgYXJlIGltcGFjdGVkIGJ5IHRoaXMgb3B0aW9uLgoqICAgVGhlIGltcGxpY2F0aW9ucyBvZiBlbmFibGluZyBvciBkaXNhYmxpbmcgdGhpcyBvcHRpb24uCiogICBBbnkgZGVwZW5kZW5jaWVzIG9uIG90aGVyIGNvbmZpZ3VyYXRpb24gc2V0dGluZ3MuCiogICBIb3cgdGhlIGtlcm5lbCBtYW5hZ2VzIGFuZCB1dGlsaXplcyBtZW1vcnkgYmFzZWQgb24gdGhpcyBzZXR0aW5nLgoKTXkgZ29hbCBpcyB0byB1bmRlcnN0YW5kIGhvdyBgREVWSUNFX1BSSVZBVEVgIGFmZmVjdHMgdGhlIG1lbW9yeSBtYW5hZ2VtZW50IHNjaGVtZSB3aXRoaW4gdGhlIGtlcm5lbCBhbmQgaG93IGl0IGNhbiBiZSBjb250cm9sbGVkIHRocm91Z2ggdGhlIGNvbmZpZ3VyYXRpb24gcHJvY2Vzcy4gVWx0aW1hdGVseSwgSSYjMzk7bGwgc3ludGhlc2l6ZSB3aGF0IGBtbS9LY29uZmlnYCBpcyBleHByZXNzaW5nIGFyb3VuZCB0aGlzIG9wdGlvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDYgMTY6MTg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDttbS9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTI2MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsxMjYwOlx0Y29uZmlnIEhNTV9NSVJST1JcbjEyNjE6XHRcdGJvb2xcbjEyNjI6XHRcdGRlcGVuZHMgb24gTU1VXG4xMjYzOlx0XG4xMjY0Olx0Y29uZmlnIEdFVF9GUkVFX1JFR0lPTlxuMTI2NTpcdFx0Ym9vbFxuMTI2NjpcdFxuMTI2NzpcdGNvbmZpZyBERVZJQ0VfUFJJVkFURVxuMTI2ODpcdFx0Ym9vbCBcJiMzNDtVbmFkZHJlc3NhYmxlIGRldmljZSBtZW1vcnkgKEdQVSBtZW1vcnksIC4uLilcJiMzNDtcbjEyNjk6XHRcdGRlcGVuZHMgb24gWk9ORV9ERVZJQ0VcbjEyNzA6XHRcdHNlbGVjdCBHRVRfRlJFRV9SRUdJT05cbjEyNzE6XHRcbjEyNzI6XHRcdGhlbHBcbjEyNzM6XHRcdCAgQWxsb3dzIGNyZWF0aW9uIG9mIHN0cnVjdCBwYWdlcyB0byByZXByZXNlbnQgdW5hZGRyZXNzYWJsZSBkZXZpY2VcbjEyNzQ6XHRcdCAgbWVtb3J5OyBpLmUuLCBtZW1vcnkgdGhhdCBpcyBvbmx5IGFjY2Vzc2libGUgZnJvbSB0aGUgZGV2aWNlIChvclxuMTI3NTpcdFx0ICBncm91cCBvZiBkZXZpY2VzKS4gWW91IGxpa2VseSBhbHNvIHdhbnQgdG8gc2VsZWN0IEhNTV9NSVJST1IuXG4xMjc2Olx0XG4xMjc3Olx0Y29uZmlnIFZNQVBfUEZOXG4xMjc4Olx0XHRib29sXG4xMjc5Olx0XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA2IDE2OjE4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE0NDM3CgkJCQkJCQlvdXRwdXQ6IDMyCgkJCQkJCQl0aG91Z2h0czogMTE4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFuYWx5c2lzIG9mIEtlcm5lbCBDb25maWd1cmF0aW9uIERlcGVuZGVuY2llcyoqCgpPa2F5LCBsZXQgbWUgYnJlYWsgdGhpcyBkb3duLiBJdCBzZWVtcyBsaWtlIGBURVNUX0hNTWAgaXMgY29udGluZ2VudCBvbiBgREVWSUNFX1BSSVZBVEVgLCBhbmQgYERFVklDRV9QUklWQVRFYCBpdHNlbGYgaXMgZGVwZW5kZW50IG9uIGBaT05FX0RFVklDRWAuIFNvLCBhIHN0cmFpZ2h0Zm9yd2FyZCBkZXBlbmRlbmN5IGNoYWluLiBOb3csIGBERVZJQ0VfTUlHUkFUSU9OYCBpcyBkZWZpbmVkIGFzIGEgYm9vbGVhbiBleHByZXNzaW9uOiBgTUlHUkFUSU9OYCBBTkQgYFpPTkVfREVWSUNFYC4gVGhpcyBtZWFucyBpZiBJIGFjdGl2YXRlIGBURVNUX0hNTWAsIEkmIzM5O20gaW1wbGljaXRseSBlbmFibGluZyBgREVWSUNFX1BSSVZBVEVgLCB3aGljaCBmb3JjZXMgYFpPTkVfREVWSUNFYCwgYW5kIGNvbnNlcXVlbnRseSwgYERFVklDRV9NSUdSQVRJT05gIGJlY2F1c2Ugb2YgdGhlIGBNSUdSQVRJT05gIGRlcGVuZGVuY3kuCgpIb2xkIG9uIGEgc2Vjb25kLCB0aGF0IGZlZWxzIGxpa2UgYSBzdGFuZGFyZCBzZXR1cC4gQW5kLCBJIHRoaW5rIEkgcmVtZW1iZXIgdGhhdCBgTUlHUkFUSU9OYCBpcyBvZnRlbiwgYnV0IG5vdCBhbHdheXMsIGVuYWJsZWQgYnkgZGVmYXVsdCB3aGVuIE5VTUEgb3IgQ09NUEFDVElPTiBhcmUgcHJlc2VudC4gSSBzaG91bGQgZG91YmxlLWNoZWNrIHRoYXQgaW4gYG1tL0tjb25maWdgIHRvIGNvbmZpcm0gbXkgdW5kZXJzdGFuZGluZyBvZiB0aGUgaW1wbGljYXRpb25zIGhlcmUuIEkgc2hvdWxkIGFsc28gY2hlY2sgd2hpY2ggY29uZmlndXJhdGlvbnMgZW5hYmxlIGNvbXBhY3Rpb24gb3IgbnVtYSBpbiB0aGF0IGxvY2F0aW9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wNiAxNjoxODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O21tL0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA2OTAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDY5MDpcdFx0aGVscFxuIDY5MTpcdFx0ICBTdXBwb3J0IHRoZSBtaWdyYXRpb24gb2YgcGFnZXMgdG8gb3RoZXIgTlVNQSBub2RlcywgYXZhaWxhYmxlIHRvXG4gNjkyOlx0XHQgIHVzZXIgc3BhY2UgdGhyb3VnaCBpbnRlcmZhY2VzIGxpa2UgbWlncmF0ZV9wYWdlcygpLCBtb3ZlX3BhZ2VzKCksXG4gNjkzOlx0XHQgIGFuZCBtYmluZCgpLiBTZWxlY3RpbmcgdGhpcyBvcHRpb24gYWxzbyBlbmFibGVzIHN1cHBvcnQgZm9yIHBhZ2VcbiA2OTQ6XHRcdCAgZGVtb3Rpb24gZm9yIG1lbW9yeSB0aWVyaW5nLlxuIDY5NTpcdFxuIDY5NjpcdGNvbmZpZyBNSUdSQVRJT05cbiA2OTc6XHRcdGJvb2xcbiA2OTg6XHRcdGRlcGVuZHMgb24gTU1VXG4gNjk5Olx0XG4gNzAwOlx0Y29uZmlnIERFVklDRV9NSUdSQVRJT05cbiA3MDE6XHRcdGRlZl9ib29sIE1JR1JBVElPTiBcdTAwMjZcdTAwMjYgWk9ORV9ERVZJQ0VcbiA3MDI6XHRcbiA3MDM6XHRjb25maWcgQVJDSF9FTkFCTEVfSFVHRVBBR0VfTUlHUkFUSU9OXG4gNzA0Olx0XHRib29sXG4gNzA1Olx0XG4gNzA2Olx0Y29uZmlnIEFSQ0hfU1VQUE9SVFNfUE1EX1NPRlRMRUFGXG4gNzA3Olx0XHRib29sXG4gNzA4Olx0XG4gNzA5Olx0Y29uZmlnIEhVR0VUTEJfUEFHRV9TSVpFX1ZBUklBQkxFXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA2IDE2OjE4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE1MDYzCgkJCQkJCQlvdXRwdXQ6IDI0CgkJCQkJCQl0aG91Z2h0czogMzAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIG15IG93bjoKCioqQW5hbHl6aW5nIHRoZSBgTUlHUkFUSU9OYCBWYXJpYWJsZSoqCgpSaWdodCwgYE1JR1JBVElPTmAgaXMgZGVmaW5lZCBhcyBhIEJvb2xlYW4sIGJ1dCBoYW5nIG9uLi4uIGl0IGRvZXNuJiMzOTt0IGhhdmUgYSBzcGVjaWZpYyBwcm9tcHQgYXNzb2NpYXRlZCB3aXRoIGl0LiBUaGF0JiMzOTtzIGEgYml0IG9kZC4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgd2h5IHRoaXMgdmFyaWFibGUgaXMgYmVpbmcgc2VsZWN0ZWQgb3IgdHJpZ2dlcmVkIGluIHRoZSBmaXJzdCBwbGFjZS4gTXkgaW1tZWRpYXRlIHF1ZXN0aW9uIGlzOiBXaGF0IGNvbmRpdGlvbnMgb3IgcHJvY2Vzc2VzIGFyZSBjYXVzaW5nIGBNSUdSQVRJT05gIHRvIGV2YWx1YXRlIHRvIHRydWU/IEkgbmVlZCB0byB0cmFjZSBiYWNrIHRocm91Z2ggdGhlIGNvZGUgYW5kIGxvZ2ljLiBJJiMzOTtsbCBuZWVkIHRvIGZpZ3VyZSBvdXQgdGhlIGRlcGVuZGVuY2llcyBhbmQgc2VhcmNoIGZvciB3aGVyZXZlciBgTUlHUkFUSU9OYCBpcyBiZWluZyB1c2VkIHRvIGJlIGFibGUgdG8gdW5kZXJzdGFuZCB0aGUgc3lzdGVtLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wNiAxNjoxODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtzZWxlY3QgTUlHUkFUSU9OJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL0tjb25maWc9NTkxPWNvbmZpZyBNRU1PUllfSE9UUkVNT1ZFXG4tLVxubW0vS2NvbmZpZy01OTQtXHRkZXBlbmRzIG9uIE1FTU9SWV9IT1RQTFVHXG5tbS9LY29uZmlnOjU5NTpcdHNlbGVjdCBNSUdSQVRJT05cbm1tL0tjb25maWctNTk2LVxuLS1cbm1tL0tjb25maWc9NjU0PWNvbmZpZyBDT01QQUNUSU9OXG4tLVxubW0vS2NvbmZpZy02NTYtXHRkZWZhdWx0IHlcbm1tL0tjb25maWc6NjU3Olx0c2VsZWN0IE1JR1JBVElPTlxubW0vS2NvbmZpZy02NTgtXHRkZXBlbmRzIG9uIE1NVVxuLS1cbm1tL0tjb25maWc9Njg1PWNvbmZpZyBOVU1BX01JR1JBVElPTlxuLS1cbm1tL0tjb25maWctNjg4LVx0ZGVwZW5kcyBvbiBOVU1BIFx1MDAyNlx1MDAyNiBNTVVcbm1tL0tjb25maWc6Njg5Olx0c2VsZWN0IE1JR1JBVElPTlxubW0vS2NvbmZpZy02OTAtXHRoZWxwXG4tLVxubW0vS2NvbmZpZz0xMDY3PWNvbmZpZyBDTUFcbi0tXG5tbS9LY29uZmlnLTEwNjktXHRkZXBlbmRzIG9uIE1NVVxubW0vS2NvbmZpZzoxMDcwOlx0c2VsZWN0IE1JR1JBVElPTlxubW0vS2NvbmZpZy0xMDcxLVx0c2VsZWN0IE1FTU9SWV9JU09MQVRJT05cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDYgMTY6MTg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTU1MjkKCQkJCQkJCW91dHB1dDogMzMKCQkJCQkJCXRob3VnaHRzOiAyNDcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgTGluZSBvZiBSZWFzb25pbmcgZm9yIHRoaXMgQ29uZmlndXJhdGlvbioqCgpPa2F5LCBzbyB0aGUgYENPTVBBQ1RJT05gIG9wdGlvbiBoYXMgYmVlbiBzZXQgdG8gc2VsZWN0IGBNSUdSQVRJT05gLCB3aGljaCBpcyB0aGUgZGVmYXVsdCBiZWhhdmlvci4gVGhhdCBtZWFucyBgTUlHUkFUSU9OYCBpcyBhbG1vc3QgYWx3YXlzIGVuYWJsZWQuIEdvb2QuIE5vdywgbG9va2luZyBhdCB0aGUgb3RoZXIgcmVxdWlyZWQgY29tcG9uZW50cywgSSBrbm93IHdlIG5lZWQgYFpPTkVfREVWSUNFYCwgYERFVklDRV9QUklWQVRFYCwgYW5kIGBURVNUX0hNTWAuCgpMZXQmIzM5O3Mgc3RhcnQgd2l0aCBgVEVTVF9ITU1gLiBJcyB0aGF0IGVub3VnaD8gSSBzZWUgdGhhdCBgVEVTVF9ITU1gIGRlcGVuZHMgb24gYERFVklDRV9QUklWQVRFYCwgc28gSeKAmWxsIG5lZWQgdG8gZW5hYmxlIHRoYXQgZmlyc3QuIEFuZCwgc2luY2UgYERFVklDRV9QUklWQVRFYCBkZXBlbmRzIG9uIGBaT05FX0RFVklDRWAsIEkgaGF2ZSB0byBlbmFibGUgdGhhdCBhcyB3ZWxsLiBBbHNvLCBsb29raW5nIGNsb3NlciwgSSBzZWUgYFRFU1RfSE1NYCBkZXBlbmRzIG9uIGBUUkFOU1BBUkVOVF9IVUdFUEFHRWAsIHNvIHRoYXQgb25lIGdvZXMgaW4gdGhlIHNldCB0b28uCgpOb3cgSeKAmW0gd29uZGVyaW5nLCB3aGF0IGNvZGUgaGFzIGJlZW4gdG91Y2hlZD8gSXMgaXQgYSBsb2NhbGl6ZWQgY2hhbmdlIG9yIGEgbW9yZSB3aWRlc3ByZWFkIG1vZGlmaWNhdGlvbj8gSSBuZWVkIHRvIGNoZWNrIGlmIGBtaWdyYXRlX3ZtYV9jb2xsZWN0X3BtZGAgaXMgdGhlIG9ubHkgZnVuY3Rpb24gdGhhdCB3YXMgY2hhbmdlZC4gRnJvbSB0aGUgbG9va3Mgb2YgaXQsIHllcy4gSXQmIzM5O3MgdGhlIG9ubHkgb25lIGluIGBtbS9taWdyYXRlX2RldmljZS5jYC4gVGhhdOKAmXMgcmVhc3N1cmluZy4KCkZpbmFsbHksIGlzIGFueSBvZiB0aGlzIGZ1bmN0aW9uYWxpdHkgZXhwb3NlZCB0byB1c2Vyc3BhY2U/IExvb2tzIGxpa2UgdGhlIGBURVNUX0hNTWAgbW9kdWxlIGRvZXMgdGhpcywgcG90ZW50aWFsbHkgdGhyb3VnaCBhbiBpb2N0bCBvciBzb21ldGhpbmcgc2ltaWxhciB0aGF0IHRyaWdnZXJzIHRoZSBtaWdyYXRpb24uIEkgc2hvdWxkIHByb2JhYmx5IGRpZyBpbnRvIGBsaWIvdGVzdF9obW0uY2AgdG8gc2VlIGV4YWN0bHkgaG93IGl0JiMzOTtzIHRyaWdnZXJlZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDYgMTY6MTg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bWlncmF0ZV92bWFfc2V0dXAmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtsaWIvdGVzdF9obW0uYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtsaWIvdGVzdF9obW0uYz0xMTIwPXN0YXRpYyBpbnQgZG1pcnJvcl9taWdyYXRlX3RvX3N5c3RlbShzdHJ1Y3QgZG1pcnJvciAqZG1pcnJvcixcbi0tXG5saWIvdGVzdF9obW0uYy0xMTY0LVxubGliL3Rlc3RfaG1tLmM6MTE2NTpcdFx0cmV0ID0gbWlncmF0ZV92bWFfc2V0dXAoXHUwMDI2YXJncyk7XG5saWIvdGVzdF9obW0uYy0xMTY2LVx0XHRpZiAocmV0KVxuLS1cbmxpYi90ZXN0X2htbS5jPTExODk9c3RhdGljIGludCBkbWlycm9yX21pZ3JhdGVfdG9fZGV2aWNlKHN0cnVjdCBkbWlycm9yICpkbWlycm9yLFxuLS1cbmxpYi90ZXN0X2htbS5jLTEyNDItXHRcdFx0XHRNSUdSQVRFX1ZNQV9TRUxFQ1RfQ09NUE9VTkQ7XG5saWIvdGVzdF9obW0uYzoxMjQzOlx0XHRyZXQgPSBtaWdyYXRlX3ZtYV9zZXR1cChcdTAwMjZhcmdzKTtcbmxpYi90ZXN0X2htbS5jLTEyNDQtXHRcdGlmIChyZXQpXG4tLVxubGliL3Rlc3RfaG1tLmM9MTY1Mz1zdGF0aWMgdm1fZmF1bHRfdCBkbWlycm9yX2Rldm1lbV9mYXVsdChzdHJ1Y3Qgdm1fZmF1bHQgKnZtZilcbi0tXG5saWIvdGVzdF9obW0uYy0xNzA1LVx0LypcbmxpYi90ZXN0X2htbS5jOjE3MDY6XHQgKiBJbiBwcmFjdGljZSBtaWdyYXRlX3ZtYV9zZXR1cCgpIHNob3VsZCBuZXZlciBmYWlsIHVubGVzcyB0aGVcbmxpYi90ZXN0X2htbS5jLTE3MDctXHQgKiB0ZXN0IGlzIHdyb25nIGFzIGl0IGp1c3QgdGVzdHMgc29tZSBzdGF0aWMgVk1BIHByb3BlcnRpZXMuXG5saWIvdGVzdF9obW0uYy0xNzA4LVx0ICovXG5saWIvdGVzdF9obW0uYzoxNzA5Olx0aWYgKG1pZ3JhdGVfdm1hX3NldHVwKFx1MDAyNmFyZ3MpKSB7XG5saWIvdGVzdF9obW0uYy0xNzEwLVx0XHRyZXQgPSBWTV9GQVVMVF9TSUdCVVM7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA2IDE2OjE4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE2NTIzCgkJCQkJCQlvdXRwdXQ6IDM1CgkJCQkJCQl0aG91Z2h0czogMjkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBteSBvd24sIGdpdmVuIG15IGV4cGVydGlzZToKCioqTXkgSW1tZWRpYXRlIEFzc2Vzc21lbnQ6IGlvY3RsIEludGVncmF0aW9uIGFuZCBNaWdyYXRpb24gRnVuY3Rpb25zKioKClJpZ2h0LCBzbyBJJiMzOTttIHNlZWluZyB0aGF0IGBkbWlycm9yX21pZ3JhdGVfdG9fc3lzdGVtYCBhbmQgYGRtaXJyb3JfbWlncmF0ZV90b19kZXZpY2VgIGFyZSBiZWluZyBpbnZva2VkIHRocm91Z2ggaW9jdGxzLiBUaGF0JiMzOTtzIGltbWVkaWF0ZWx5IGludGVyZXN0aW5nLCBiZWNhdXNlIGl0IGdpdmVzIG1lIGEgY2xlYXIgaWRlYSBvZiB0aGUgaW50ZW5kZWQgdXNlIGNhc2UsIGFuZCB0aGUgbGV2ZWwgb2YgaW50ZXJhY3Rpb24gdGhlIGNhbGxlciBoYXMgd2l0aCB0aGUgZGV2aWNlLiBJL08gY29udHJvbCBjYWxscyBhcmUgdHlwaWNhbGx5IGhvdyB3ZSBleHBvc2UgbG93LWxldmVsIGRldmljZSBjb250cm9sIGFuZCBjb25maWd1cmF0aW9uIHRvIHVzZXIgc3BhY2UsIG9yIG90aGVyIHN5c3RlbSBjb21wb25lbnRzLgoKVGhpcyBzdHJvbmdseSBzdWdnZXN0cyB0aGF0IHRoZXNlIG1pZ3JhdGlvbiBmdW5jdGlvbnMgYXJlIGludGltYXRlbHkgdGllZCB0byB0aGUgY29yZSBkZXZpY2UgZHJpdmVyIG9yIGl0cyBhc3NvY2lhdGVkIGludGVyZmFjZS4gSXQgaXMgbGlrZWx5IGEgcHJpdmlsZWdlZCBvcGVyYXRpb24sIHJlcXVpcmluZyBhIGNhcmVmdWxseSBjcmFmdGVkIGlvY3RsIHJlcXVlc3QuIFRoZSBmYWN0IHRoYXQgdGhlIGZ1bmN0aW9ucyBhcmUgbmFtZWQgJiMzNDttaWdyYXRlJiMzNDsgaXMgYWxzbyBzaWduaWZpY2FudC4gSSBhbSBleHBlY3Rpbmcgc29tZSBzb3J0IG9mIGRhdGEgbW92ZW1lbnQgb3IgbWFuYWdlbWVudCBtZWNoYW5pc20uIFBlcmhhcHMgdGhlc2UgZnVuY3Rpb25zIG9yY2hlc3RyYXRlIHRoZSBtb3ZlbWVudCBvZiBkYXRhIGJsb2NrcyBiZXR3ZWVuIHN5c3RlbSBtZW1vcnkgYW5kIHRoZSBkZXZpY2UmIzM5O3Mgb3duIHN0b3JhZ2UsIG9yIHZpY2UtdmVyc2EsIGxpa2VseSBmb3Igc29tZSBvcHRpbWl6YXRpb24gcHVycG9zZSAoZS5nLiwgZGF0YSBjYWNoaW5nLCBsb2FkIGJhbGFuY2luZywgb3IgYSBtaWdyYXRpb24gdG93YXJkIG9yIGF3YXkgZnJvbSBhIGRlZGljYXRlZCBtZW1vcnkgcmVnaW9uKS4gVGhlIG5hbWluZyBjb252ZW50aW9ucyBtYWtlIG1lIGFudGljaXBhdGUgc29tZSBzb3J0IG9mIG1pcnJvcmluZyBvcGVyYXRpb25zLgoKTXkgbmV4dCBzdGVwIGlzIHRvIGV4YW1pbmUgdGhlIGRyaXZlciBjb2RlIHRoYXQgY2FsbHMgdGhlc2UgaW9jdGxzIHRvIHVuZGVyc3RhbmQgdGhlIGxhcmdlciBjb250ZXh0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wNiAxNjoxODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtkbWlycm9yX21pZ3JhdGVfdG9fc3lzdGVtJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bGliL3Rlc3RfaG1tLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bGliL3Rlc3RfaG1tLmM9MTEwNz1kbWlycm9yX3N1Y2Nlc3NmdWxfbWlncmF0ZWRfcGFnZXMoc3RydWN0IG1pZ3JhdGVfdm1hICptaWdyYXRlKVxuLS1cbmxpYi90ZXN0X2htbS5jLTExMTktXG5saWIvdGVzdF9obW0uYzoxMTIwOnN0YXRpYyBpbnQgZG1pcnJvcl9taWdyYXRlX3RvX3N5c3RlbShzdHJ1Y3QgZG1pcnJvciAqZG1pcnJvcixcbmxpYi90ZXN0X2htbS5jLTExMjEtXHRcdFx0XHQgICAgIHN0cnVjdCBobW1fZG1pcnJvcl9jbWQgKmNtZClcbi0tXG5saWIvdGVzdF9obW0uYz0xNTEzPXN0YXRpYyBsb25nIGRtaXJyb3JfZm9wc191bmxvY2tlZF9pb2N0bChzdHJ1Y3QgZmlsZSAqZmlscCxcbi0tXG5saWIvdGVzdF9obW0uYy0xNTUwLVx0Y2FzZSBITU1fRE1JUlJPUl9NSUdSQVRFX1RPX1NZUzpcbmxpYi90ZXN0X2htbS5jOjE1NTE6XHRcdHJldCA9IGRtaXJyb3JfbWlncmF0ZV90b19zeXN0ZW0oZG1pcnJvciwgXHUwMDI2Y21kKTtcbmxpYi90ZXN0X2htbS5jLTE1NTItXHRcdGJyZWFrO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wNiAxNjoxODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNzEwMQoJCQkJCQkJb3V0cHV0OiAyNgoJCQkJCQkJdGhvdWdodHM6IDM1OQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBbmFseXNpcyBvZiB0aGUgYEhNTV9ETUlSUk9SX01JR1JBVEVgIFBhdGgqKgoKT2theSwgc28gdGhlIGBITU1fRE1JUlJPUl9NSUdSQVRFX1RPX1NZU2AgYW5kIGBITU1fRE1JUlJPUl9NSUdSQVRFX1RPX0RFVmAgaW9jdGxzIOKAkyB0aG9zZSBhcmUgZGVmaW5pdGVseSB0aGUgZW50cnkgcG9pbnRzLCB3aGljaCBtZWFucyB1c2Vyc3BhY2UgY2FuIHRyaWdnZXIgdGhpcyB0aHJvdWdoIGBURVNUX0hNTWAuIEFuZCwgSSBrbm93IERSTSBkcml2ZXJzIGxpa2UgYG5vdXZlYXVgIGFuZCBgYW1ka2ZkYCBhcmUgYWxzbyBsZXZlcmFnaW5nIHRoaXMsIHdoaWNoIGZ1cnRoZXIgdmFsaWRhdGVzIGl0cyBpbXBvcnRhbmNlLiBFbmFibGluZyBgVEVTVF9ITU1gIHNlZW1zIGxpa2UgYSBzb2xpZCwgZm9jdXNlZCBhcHByb2FjaCBmb3Igb3VyIHB1cnBvc2VzLgoKTm93LCBJIG5lZWQgdG8gcGlucG9pbnQgdGhlIGNyaXRpY2FsIGZ1bmN0aW9uLiBMZXQmIzM5O3Mgc2VlLi4uIHllcywgYG1pZ3JhdGVfdm1hX2NvbGxlY3RfcG1kYCBpcyB0aGUgc3BlY2lmaWMgZnVuY3Rpb24gd2hlcmUgdGhlIGNoYW5nZXMgcmVzaWRlLiBHb29kLiBJcyB0aGlzIGEgaG90IHBhdGgsIHRob3VnaD8gTm8sIGl0IHNlZW1zIHRvIGJlIHBhcnQgb2YgZGV2aWNlIG1lbW9yeSBtaWdyYXRpb24sIHdoaWNoIGlzbiYjMzk7dCB0aGUgZ2VuZXJpYywgZnJlcXVlbnRseS1jYWxsZWQgY29kZSBwYXRoIGxpa2UgYHNjaGVkdWxlKClgIG9yIGBrbWFsbG9jKClgLiBUaGF0JiMzOTtzIGFjdHVhbGx5IGFkdmFudGFnZW91cy4gVGhpcyBtYWtlcyBpdCBhIGdvb2QgY2FuZGlkYXRlIGZvciBmb2N1c2VkIGFuYWx5c2lzLgoKQWxyaWdodCwgbGV0JiMzOTtzIG5haWwgZG93biB0aGUgY29uZmlndXJhdGlvbiByZXF1aXJlbWVudHMuIFdlIG5lZWQgYFRFU1RfSE1NYCwgb2J2aW91c2x5LiBXZSBhbHNvIG5lZWQgYERFVklDRV9QUklWQVRFYCwgYFpPTkVfREVWSUNFYCwgYW5kIGBUUkFOU1BBUkVOVF9IVUdFUEFHRWAuIEFoLCBidXQgYFRSQU5TUEFSRU5UX0hVR0VQQUdFYCBpcyBvZnRlbiBlbmFibGVkIGJ5IGRlZmF1bHQgaW4gc3l6Ym90IGNvbmZpZ3VyYXRpb25zLCBzbyBpdCBzaG91bGQgYmUgbGVzcyBvZiBhIGNvbmNlcm4uIFRoZSBtYWluIGZvY3VzIG11c3QgYmUgYFRFU1RfSE1NYCwgYnV0IHdpbGwgdGhhdCBhdXRvLWVuYWJsZSB0aGUgb3RoZXJzPyBObywgbG9va2luZyBpbnRvIGl0LCBgVEVTVF9ITU1gICpkZXBlbmRzKiBvbiBgREVWSUNFX1BSSVZBVEVgLCBzbyB3ZSBuZWVkIHRvIGVuc3VyZSB0aGF0IGlzIHByZXNlbnQuIEFuZCBgREVWSUNFX1BSSVZBVEVgICpkZXBlbmRzKiBvbiBgWk9ORV9ERVZJQ0VgLCBzbyB0aGF0IGFsc28gbXVzdCBiZSBwcmVzZW50LiBJIHNob3VsZCBjb25maXJtIHRoZSBkZXBlbmRhbmNpZXMgb2YgYFpPTkVfREVWSUNFYCBhcyB3ZWxsLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wNiAxNjoxOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgWk9ORV9ERVZJQ0UmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vS2NvbmZpZz0xMjMxPWNvbmZpZyBaT05FX0RNQTMyXG4tLVxubW0vS2NvbmZpZy0xMjM1LVxubW0vS2NvbmZpZzoxMjM2OmNvbmZpZyBaT05FX0RFVklDRVxubW0vS2NvbmZpZy0xMjM3LVx0Ym9vbCBcJiMzNDtEZXZpY2UgbWVtb3J5IChwbWVtLCBITU0sIGV0Yy4uLikgaG90cGx1ZyBzdXBwb3J0XCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA2IDE2OjE5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE3OTY1CgkJCQkJCQlvdXRwdXQ6IDMzCgkJCQkJCQl0aG91Z2h0czogMTYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aGUgYG1tL0tjb25maWdgIGZpbGUsIHNwZWNpZmljYWxseSBhcm91bmQgYFpPTkVfREVWSUNFYDoKCioqRGl2aW5nIGludG8gYG1tL0tjb25maWdgIGFuZCBgWk9ORV9ERVZJQ0VgKioKCkFscmlnaHQsIGxldCYjMzk7cyBnZXQgaW50byB0aGUgbml0dHktZ3JpdHR5IG9mIG1lbW9yeSBtYW5hZ2VtZW50IGNvbmZpZ3VyYXRpb24uIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyBgWk9ORV9ERVZJQ0VgIGlzIGRlZmluZWQgd2l0aGluIHRoZSBrZXJuZWwmIzM5O3MgS2NvbmZpZyBzeXN0ZW0uIE15IGltbWVkaWF0ZSBnb2FsIGlzIHRvIGZpZ3VyZSBvdXQgdGhlIGRlcGVuZGVuY2llcywgY29uc3RyYWludHMsIGFuZCBpbXBsaWNhdGlvbnMgb2YgZW5hYmxpbmcgb3IgZGlzYWJsaW5nIHRoaXMgem9uZS4gSSYjMzk7bSB0aGlua2luZywgaXMgdGhpcyBhIHNpbXBsZSBib29sZWFuLCBvciBkb2VzIGl0IG9mZmVyIGNvbmZpZ3VyYXRpb24gb3B0aW9ucz8gV2hhdCBvdGhlciBmZWF0dXJlcyBvciBkcml2ZXJzIHJlbHkgb24gaXQ/IEFyZSB0aGVyZSBhbnkgcGVyZm9ybWFuY2UgY29uc2lkZXJhdGlvbnMgdGllZCB0byBpdD8KCkkmIzM5O20gZXhwZWN0aW5nIHRvIHNlZSBkZXBlbmRlbmNpZXMgb24gc3BlY2lmaWMgaGFyZHdhcmUgYXJjaGl0ZWN0dXJlcyBvciBmZWF0dXJlcyByZWxhdGVkIHRvIHBlcnNpc3RlbnQgbWVtb3J5LCBOVkRJTU1zLCBvciBwb3NzaWJseSBldmVuIGNlcnRhaW4gYmxvY2sgZGV2aWNlcy4gVGhlIGBtbS9LY29uZmlnYCBmaWxlIG9mdGVuIHByb3ZpZGVzIGNsdWVzIGFib3V0IHRoZSB1bmRlcmx5aW5nIGRlc2lnbiBkZWNpc2lvbnMg4oCTIHdoeSB3YXMgYFpPTkVfREVWSUNFYCBpbnRyb2R1Y2VkIGluIHRoZSBmaXJzdCBwbGFjZT8gV2hhdCBwcm9ibGVtIGRvZXMgaXQgc29sdmUsIG9yIHdoYXQgZnVuY3Rpb25hbGl0eSBkb2VzIGl0IGVuYWJsZT8gSSYjMzk7bGwgYmUgbG9va2luZyBmb3IgcmVsYXRpb25zaGlwcyB3aXRoIG90aGVyIHpvbmVzIGxpa2UgYFpPTkVfRE1BYCBvciBgWk9ORV9ISUdITUVNYCwgYW5kIHdoZXRoZXIgYFpPTkVfREVWSUNFYCBtaWdodCBpbXBseSBhbnkgbW9kaWZpY2F0aW9ucyB0byB0aGUgY29yZSBtZW1vcnkgbWFuYWdlbWVudCBhbGdvcml0aG1zIChidWRkeSBhbGxvY2F0b3IsIHBhZ2UgYWxsb2NhdGlvbiwgZXRjLikuCgpJJiMzOTtsbCBiZSBwYXlpbmcgY2xvc2UgYXR0ZW50aW9uIHRvIGFueSBjb25kaXRpb25hbCBzdGF0ZW1lbnRzIG9yIGBzZWxlY3RgIGRpcmVjdGl2ZXMuIFRob3NlIGFyZSBnb2luZyB0byB0ZWxsIG1lIHdoYXQgZWxzZSAqbXVzdCogYmUgZW5hYmxlZCBvciAqY2FuKiBiZSBkaXNhYmxlZCBpZiBgWk9ORV9ERVZJQ0VgIGlzIGNob3Nlbi4gSSYjMzk7bGwgbmVlZCB0byB0cmFjZSB0aGUgaW1wbGljYXRpb25zIG9mIGVuYWJsaW5nIHRoaXMuIFRoaXMgaXMgdGhlIHN0YXJ0aW5nIHBvaW50IGZvciB1bmRlcnN0YW5kaW5nIGhvdyBkZXZpY2UgbWVtb3J5IGlzIGluY29ycG9yYXRlZCBpbnRvIHRoZSBvdmVyYWxsIG1lbW9yeSBtYXAgYW5kIGhvdyB0aGUga2VybmVsIGhhbmRsZXMgaXQuIEdvdHRhIGVuc3VyZSBJIGhhdmUgYSBjb21wbGV0ZSB1bmRlcnN0YW5kaW5nIG9mIHRoZSBrZXJuZWwmIzM5O3MgbWVtb3J5IGFyY2hpdGVjdHVyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40Mi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDYgMTY6MTk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDttbS9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTIzMCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsxMjMwOlx0XG4xMjMxOlx0Y29uZmlnIFpPTkVfRE1BMzJcbjEyMzI6XHRcdGJvb2wgXCYjMzQ7U3VwcG9ydCBETUEzMiB6b25lXCYjMzQ7IGlmIEFSQ0hfSEFTX1pPTkVfRE1BX1NFVFxuMTIzMzpcdFx0ZGVwZW5kcyBvbiAhWDg2XzMyXG4xMjM0Olx0XHRkZWZhdWx0IHkgaWYgQVJNNjRcbjEyMzU6XHRcbjEyMzY6XHRjb25maWcgWk9ORV9ERVZJQ0VcbjEyMzc6XHRcdGJvb2wgXCYjMzQ7RGV2aWNlIG1lbW9yeSAocG1lbSwgSE1NLCBldGMuLi4pIGhvdHBsdWcgc3VwcG9ydFwmIzM0O1xuMTIzODpcdFx0ZGVwZW5kcyBvbiBNRU1PUllfSE9UUExVR1xuMTIzOTpcdFx0ZGVwZW5kcyBvbiBNRU1PUllfSE9UUkVNT1ZFXG4xMjQwOlx0XHRkZXBlbmRzIG9uIFNQQVJTRU1FTV9WTUVNTUFQXG4xMjQxOlx0XHRzZWxlY3QgWEFSUkFZX01VTFRJXG4xMjQyOlx0XG4xMjQzOlx0XHRoZWxwXG4xMjQ0Olx0XHQgIERldmljZSBtZW1vcnkgaG90cGx1ZyBzdXBwb3J0IGFsbG93cyBmb3IgZXN0YWJsaXNoaW5nIHBtZW0sXG4xMjQ1Olx0XHQgIG9yIG90aGVyIGRldmljZSBkcml2ZXIgZGlzY292ZXJlZCBtZW1vcnkgcmVnaW9ucywgaW4gdGhlXG4xMjQ2Olx0XHQgIG1lbW1hcC4gVGhpcyBhbGxvd3MgcGZuX3RvX3BhZ2UoKSBsb29rdXBzIG9mIG90aGVyd2lzZVxuMTI0NzpcdFx0ICBcJiMzNDtkZXZpY2UtcGh5c2ljYWxcJiMzNDsgYWRkcmVzc2VzIHdoaWNoIGlzIG5lZWRlZCBmb3IgREFYLCBQQ0lfUDJQRE1BLCBhbmRcbjEyNDg6XHRcdCAgREVWSUNFX1BSSVZBVEUgZmVhdHVyZXMgYW1vbmcgb3RoZXJzLlxuMTI0OTpcdFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wNiAxNjoxOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxODY4NQoJCQkJCQkJb3V0cHV0OiAxMjUKCQkJCQkJCXRob3VnaHRzOiA1NDYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqS2VybmVsIENvbmZpZ3VyYXRpb24gZm9yIERldmljZSBNZW1vcnkgTWlncmF0aW9uIFRlc3RpbmcqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gR2l2ZW4gbXkgdW5kZXJzdGFuZGluZyBvZiB0aGUga2VybmVsIG1lbW9yeSBtYW5hZ2VtZW50IGxhbmRzY2FwZSwgYW5kIHRoZSBjb250ZXh0IG9mIGRldmljZSBtZW1vcnkgbWlncmF0aW9uLCBJIG5lZWQgdG8gaWRlbnRpZnkgdGhlIGtleSBjb25maWd1cmF0aW9uIG9wdGlvbnMgcmVxdWlyZWQgdG8gZnVsbHkgdGVzdCB0aGlzIHBhdGNoLiBJJiMzOTttIGZvY3VzaW5nIG9uIHRoZSBpbnRlcmFjdGlvbiB3aXRoIGRldmljZSBtZW1vcnksIGhvdHBsdWcsIGFuZCBtaWdyYXRpb24uCgpGaXJzdCwgSSBoYXZlIHRvIGNvbnNpZGVyIHRoZSBjb3JlIHByZS1yZXF1aXNpdGVzOiBgTUVNT1JZX0hPVFBMVUdgLCBgTUVNT1JZX0hPVFJFTU9WRWAsIGFuZCBgU1BBUlNFTUVNX1ZNRU1NQVBgLiBUaGVzZSBhcmUgcHJldHR5IHN0YW5kYXJkLCBhbmQgbGlrZWx5IGVuYWJsZWQgaW4gdGhlIHRlc3QgZW52aXJvbm1lbnRzIEkmIzM5O20gd29ya2luZyB3aXRoLCBzbyBJIHdvbiYjMzk7dCBsaXN0IHRob3NlIGRpcmVjdGx5LgoKTm93LCBsZXQmIzM5O3MgZ2V0IHRvIHRoZSBzcGVjaWZpY3MuIExvb2tpbmcgYXQgdGhlIGRlcGVuZGVuY2llcywgSSBzaG91bGQgbGlzdCBgVEVTVF9ITU1gLCBgREVWSUNFX1BSSVZBVEVgLCBhbmQgYFpPTkVfREVWSUNFYC4gTGV0JiMzOTtzIGNvbmZpcm0gdGhhdCBgVEVTVF9ITU1gIGlzIGEgdHJpc3RhdGUsIHRvIGF2b2lkIGNvbmZ1c2lvbi4gWWVwLCBjb25maXJtZWQsIGl0JiMzOTtzIGEgdHJpc3RhdGUgKCYjMzQ7VGVzdCBITU0gKEhldGVyb2dlbmVvdXMgTWVtb3J5IE1hbmFnZW1lbnQpJiMzNDspLiBTbywgYFRFU1RfSE1NPXlgIG9yIGBURVNUX0hNTT1tYCB3b3VsZCB3b3JrLiBJdOKAmXMgc2ltcGxlc3QgdG8ganVzdCBsaXN0IGBURVNUX0hNTWAuCgpOZXh0LCBJIG5lZWQgdG8gY2hlY2sgYERFVklDRV9NSUdSQVRJT05gLiBJdCYjMzk7cyBhIGBkZWZfYm9vbGAgdGhhdCBkZXBlbmRzIG9uIGBNSUdSQVRJT05gIGFuZCBgWk9ORV9ERVZJQ0VgLiBJIGRvbiYjMzk7dCBzdHJpY3RseSAqbmVlZCogdG8gbGlzdCBpdCBiZWNhdXNlIG9mIHRoZSBkZXBlbmRlbmNpZXMsIGJ1dCBpdCBtaWdodCBiZSB3b3J0aCBpbmNsdWRpbmcgZm9yIGNsYXJpdHkuIEkmIzM5O2xsIGFkZCBpdCB0byB0aGUgbGlzdCwganVzdCB0byBiZSB0aG9yb3VnaCwgYnV0IG5vdGUgdGhlIGRlcGVuZGVuY3kuCgpPa2F5LCB3YWl0Li4uIFRoaW5raW5nIGFib3V0IGl0LCBgVEVTVF9ITU1gIGRlZmF1bHRzIHRvIGEgbW9kdWxlLiBHaXZlbiB0aGUgaW5zdHJ1Y3Rpb25zLCB3aGljaCBzYXkgJiMzNDtMaXN0IG9mIGtlcm5lbCBjb25maWcgZmxhZ3MgdGhhdCBtdXN0IGJlIGV4cGxpY2l0bHkgZW5hYmxlZCB0byBjb21waWxlIGFuZCB0ZXN0IHRoZSBtb2RpZmllZCBjb2RlLCYjMzQ7IGJvdGggYFRFU1RfSE1NPXlgIGFuZCBgVEVTVF9ITU09bWAgYXJlIGV4cGxpY2l0bHkgZW5hYmxlZCBieSBkZWZpbml0aW9uLiBTbywgbXkgaW5pdGlhbCBsaXN0IGlzIGdvb2Q6CgotICAgYFRFU1RfSE1NYAotICAgYERFVklDRV9QUklWQVRFYAotICAgYFpPTkVfREVWSUNFYAoKTm93LCBsZXQmIzM5O3MgcmV2aWV3IHRoZSBwYXRjaCBpdHNlbGYuIEkgc2VlIHRoZSBjb2RlIGNoYW5nZXMgd2hpY2ggaW52b2x2ZSBjaGVja3MgZm9yIGBwdGVfcHJlc2VudGAgYmVmb3JlIGNhbGxpbmcgYHB0ZV9wZm5gIG9yIGBwdGVfZGlydHlgLiBUaGlzIGlzIGEgY2xlYXIgc2FmZXR5IGZpeCwgcHJldmVudGluZyBwb3RlbnRpYWwgbnVsbCBwb2ludGVyIGRlcmVmZXJlbmNlcyBvciBvdGhlciB1bmRlZmluZWQgYmVoYXZpb3Igd2hlbiBvcGVyYXRpbmcgb24gUFRFcy4gVGhpcyBpcyByb2J1c3QuCgpUaGUgcGF0Y2gmIzM5O3MgYXJlYSBvZiBpbXBhY3QgaXMgYG1pZ3JhdGVfdm1hX2NvbGxlY3RfcG1kYC4gVGhpcyBtZWFucyB0aGUgZml4IGlzIGRlZmluaXRlbHkgcmVsZXZhbnQgdG8gZGV2aWNlIG1lbW9yeSBtaWdyYXRpb24sIHBvdGVudGlhbGx5IHRyaWdnZXJlZCBieSB0aGUgYFRFU1RfSE1NYCBtb2R1bGUuIFRoZSBwYXRjaCBkaXJlY3RseSBhZGRyZXNzZXMgYSBidWcuCgpPa2F5LCBJJiMzOTttIHNhdGlzZmllZC4gTGV0JiMzOTtzIGNhbGwgYHNldC1yZXN1bHRzYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDYgMTY6MTk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1RFU1RfSE1NJiMzNDssCiAgICAmIzM0O0RFVklDRV9QUklWQVRFJiMzNDssCiAgICAmIzM0O1pPTkVfREVWSUNFJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7bWlncmF0ZV92bWFfY29sbGVjdF9wbWQmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcyBtaXNzaW5nIHB0ZV9wcmVzZW50KCkgY2hlY2tzIGluIG1pZ3JhdGVfdm1hX2NvbGxlY3RfcG1kKCkgYmVmb3JlIGNhbGxpbmcgcHRlX3BmbigpIGFuZCBwdGVfZGlydHkoKS4gVGhpcyBpcyBmdW5jdGlvbmFsIGNvcmUga2VybmVsL21tIGNvZGUgcmVhY2hhYmxlIHZpYSBkZXZpY2UgbWVtb3J5IG1pZ3JhdGlvbiBwYXRocywgd2hpY2ggY2FuIGJlIHRyaWdnZXJlZCBmcm9tIHVzZXJzcGFjZSB1c2luZyB0aGUgVEVTVF9ITU0gbW9kdWxlLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtURVNUX0hNTSYjMzQ7LAogICAgJiMzNDtERVZJQ0VfUFJJVkFURSYjMzQ7LAogICAgJiMzNDtaT05FX0RFVklDRSYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O21pZ3JhdGVfdm1hX2NvbGxlY3RfcG1kJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHMgbWlzc2luZyBwdGVfcHJlc2VudCgpIGNoZWNrcyBpbiBtaWdyYXRlX3ZtYV9jb2xsZWN0X3BtZCgpIGJlZm9yZSBjYWxsaW5nIHB0ZV9wZm4oKSBhbmQgcHRlX2RpcnR5KCkuIFRoaXMgaXMgZnVuY3Rpb25hbCBjb3JlIGtlcm5lbC9tbSBjb2RlIHJlYWNoYWJsZSB2aWEgZGV2aWNlIG1lbW9yeSBtaWdyYXRpb24gcGF0aHMsIHdoaWNoIGNhbiBiZSB0cmlnZ2VyZWQgZnJvbSB1c2Vyc3BhY2UgdXNpbmcgdGhlIFRFU1RfSE1NIG1vZHVsZS4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA2VDE2OjE2OjQyLjQzOTQzNTE0NVoiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE1OTA1MjkyMTQ1MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJURVNUX0hNTVwiLFxuICAgIFwiREVWSUNFX1BSSVZBVEVcIixcbiAgICBcIlpPTkVfREVWSUNFXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwibWlncmF0ZV92bWFfY29sbGVjdF9wbWRcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRzIG1pc3NpbmcgcHRlX3ByZXNlbnQoKSBjaGVja3MgaW4gbWlncmF0ZV92bWFfY29sbGVjdF9wbWQoKSBiZWZvcmUgY2FsbGluZyBwdGVfcGZuKCkgYW5kIHB0ZV9kaXJ0eSgpLiBUaGlzIGlzIGZ1bmN0aW9uYWwgY29yZSBrZXJuZWwvbW0gY29kZSByZWFjaGFibGUgdmlhIGRldmljZSBtZW1vcnkgbWlncmF0aW9uIHBhdGhzLCB3aGljaCBjYW4gYmUgdHJpZ2dlcmVkIGZyb20gdXNlcnNwYWNlIHVzaW5nIHRoZSBURVNUX0hNTSBtb2R1bGUuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA2VDE2OjE2OjQyLjQzOTQ0MDM3NVoiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDkyNDk5Nzg3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgYTJiODQ2YjgyNTM5ZDcyMmNhNTRlNDY3YjI4MjZkZTFiNTRjZDc1MlxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgTW9uIEp1bCA2IDE2OjE2OjQwIDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL21tL21pZ3JhdGVfZGV2aWNlLmMgYi9tbS9taWdyYXRlX2RldmljZS5jXFxuaW5kZXggMDUyMTY3ZjlhZDU0NzQuLjZlNzExMzgxZjA5Mjk1IDEwMDY0NFxcbi0tLSBhL21tL21pZ3JhdGVfZGV2aWNlLmNcXG4rKysgYi9tbS9taWdyYXRlX2RldmljZS5jXFxuQEAgLTQxMSw3ICs0MTEsOCBAQCBzdGF0aWMgaW50IG1pZ3JhdGVfdm1hX2NvbGxlY3RfcG1kKHBtZF90ICpwbWRwLFxcbiBcXHRcXHRcXHRib29sIGFub25fZXhjbHVzaXZlO1xcbiBcXHRcXHRcXHRwdGVfdCBzd3BfcHRlO1xcbiBcXG4tXFx0XFx0XFx0Zmx1c2hfY2FjaGVfcGFnZSh2bWEsIGFkZHIsIHB0ZV9wZm4ocHRlKSk7XFxuK1xcdFxcdFxcdGlmIChwdGVfcHJlc2VudChwdGUpKVxcbitcXHRcXHRcXHRcXHRmbHVzaF9jYWNoZV9wYWdlKHZtYSwgYWRkciwgcHRlX3BmbihwdGUpKTtcXG4gXFx0XFx0XFx0YW5vbl9leGNsdXNpdmUgPSBmb2xpb190ZXN0X2Fub24oZm9saW8pIFxcdTAwMjZcXHUwMDI2XFxuIFxcdFxcdFxcdFxcdFxcdCAgUGFnZUFub25FeGNsdXNpdmUocGFnZSk7XFxuIFxcdFxcdFxcdGlmIChhbm9uX2V4Y2x1c2l2ZSkge1xcbkBAIC00MzIsNyArNDMzLDcgQEAgc3RhdGljIGludCBtaWdyYXRlX3ZtYV9jb2xsZWN0X3BtZChwbWRfdCAqcG1kcCxcXG4gXFx0XFx0XFx0bWlncmF0ZS1cXHUwMDNlY3BhZ2VzKys7XFxuIFxcbiBcXHRcXHRcXHQvKiBTZXQgdGhlIGRpcnR5IGZsYWcgb24gdGhlIGZvbGlvIG5vdyB0aGUgcHRlIGlzIGdvbmUuICovXFxuLVxcdFxcdFxcdGlmIChwdGVfZGlydHkocHRlKSlcXG4rXFx0XFx0XFx0aWYgKHB0ZV9wcmVzZW50KHB0ZSkgXFx1MDAyNlxcdTAwMjYgcHRlX2RpcnR5KHB0ZSkpXFxuIFxcdFxcdFxcdFxcdGZvbGlvX21hcmtfZGlydHkoZm9saW8pO1xcbiBcXG4gXFx0XFx0XFx0LyogU2V0dXAgc3BlY2lhbCBtaWdyYXRpb24gcGFnZSB0YWJsZSBlbnRyeSAqL1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wNlQxNjoxNjo0Mi45MzI2ODExNDJaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjE1ODU1OTY2MjgzNSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJURVNUX0hNTVwiLFxuICAgIFwiREVWSUNFX1BSSVZBVEVcIixcbiAgICBcIlpPTkVfREVWSUNFXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwibWlncmF0ZV92bWFfY29sbGVjdF9wbWRcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRzIG1pc3NpbmcgcHRlX3ByZXNlbnQoKSBjaGVja3MgaW4gbWlncmF0ZV92bWFfY29sbGVjdF9wbWQoKSBiZWZvcmUgY2FsbGluZyBwdGVfcGZuKCkgYW5kIHB0ZV9kaXJ0eSgpLiBUaGlzIGlzIGZ1bmN0aW9uYWwgY29yZSBrZXJuZWwvbW0gY29kZSByZWFjaGFibGUgdmlhIGRldmljZSBtZW1vcnkgbWlncmF0aW9uIHBhdGhzLCB3aGljaCBjYW4gYmUgdHJpZ2dlcmVkIGZyb20gdXNlcnNwYWNlIHVzaW5nIHRoZSBURVNUX0hNTSBtb2R1bGUuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmVcbmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHlcbnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuXG5cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6XG4tIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuXG4tIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLlxuLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuXG4tIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSxcbmV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cblxuSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaFxudG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuXG5cbldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOlxuMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy5cbiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBEbyBub3QgbGlzdCB0b28gZ2VuZXJpYyBjb25maWdzICh3ZSBhbHJlYWR5IGhhdmUgdGhlbSBlbmFibGVkKS4gT25seSBsaXN0IHRob3NlIHRoYXRcbiAgIHNwZWNpZmljYWxseSBjb3ZlciB0aGUgbW9kaWZpZWQgY29kZS4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzIG91dHB1dCBhcnJheSxcbiAgIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgYTJiODQ2YjgyNTM5ZDcyMmNhNTRlNDY3YjI4MjZkZTFiNTRjZDc1MlxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBNb24gSnVsIDYgMTY6MTY6NDAgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9tbS9taWdyYXRlX2RldmljZS5jIGIvbW0vbWlncmF0ZV9kZXZpY2UuY1xuaW5kZXggMDUyMTY3ZjlhZDU0NzQuLjZlNzExMzgxZjA5Mjk1IDEwMDY0NFxuLS0tIGEvbW0vbWlncmF0ZV9kZXZpY2UuY1xuKysrIGIvbW0vbWlncmF0ZV9kZXZpY2UuY1xuQEAgLTQxMSw3ICs0MTEsOCBAQCBzdGF0aWMgaW50IG1pZ3JhdGVfdm1hX2NvbGxlY3RfcG1kKHBtZF90ICpwbWRwLFxuIFx0XHRcdGJvb2wgYW5vbl9leGNsdXNpdmU7XG4gXHRcdFx0cHRlX3Qgc3dwX3B0ZTtcbiBcbi1cdFx0XHRmbHVzaF9jYWNoZV9wYWdlKHZtYSwgYWRkciwgcHRlX3BmbihwdGUpKTtcbitcdFx0XHRpZiAocHRlX3ByZXNlbnQocHRlKSlcbitcdFx0XHRcdGZsdXNoX2NhY2hlX3BhZ2Uodm1hLCBhZGRyLCBwdGVfcGZuKHB0ZSkpO1xuIFx0XHRcdGFub25fZXhjbHVzaXZlID0gZm9saW9fdGVzdF9hbm9uKGZvbGlvKSBcdTAwMjZcdTAwMjZcbiBcdFx0XHRcdFx0ICBQYWdlQW5vbkV4Y2x1c2l2ZShwYWdlKTtcbiBcdFx0XHRpZiAoYW5vbl9leGNsdXNpdmUpIHtcbkBAIC00MzIsNyArNDMzLDcgQEAgc3RhdGljIGludCBtaWdyYXRlX3ZtYV9jb2xsZWN0X3BtZChwbWRfdCAqcG1kcCxcbiBcdFx0XHRtaWdyYXRlLVx1MDAzZWNwYWdlcysrO1xuIFxuIFx0XHRcdC8qIFNldCB0aGUgZGlydHkgZmxhZyBvbiB0aGUgZm9saW8gbm93IHRoZSBwdGUgaXMgZ29uZS4gKi9cbi1cdFx0XHRpZiAocHRlX2RpcnR5KHB0ZSkpXG4rXHRcdFx0aWYgKHB0ZV9wcmVzZW50KHB0ZSkgXHUwMDI2XHUwMDI2IHB0ZV9kaXJ0eShwdGUpKVxuIFx0XHRcdFx0Zm9saW9fbWFya19kaXJ0eShmb2xpbyk7XG4gXG4gXHRcdFx0LyogU2V0dXAgc3BlY2lhbCBtaWdyYXRpb24gcGFnZSB0YWJsZSBlbnRyeSAqL1xuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDZUMTY6MTY6NDIuOTMyNjgyMzcyWiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzczMjE5ODg2NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIE1pZ3JhdGUgRGV2aWNlIFBhdGNoKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBmb3IgYG1tL21pZ3JhdGVfZGV2aWNlLmNgLiBTcGVjaWZpY2FsbHksIGl0IHNlZW1zIGxpa2Ugc29tZW9uZSdzIGJlZW4gdHdlYWtpbmcgdGhlIGBtaWdyYXRlX3ZtYV9jb2xsZWN0X3BtZGAgZnVuY3Rpb24uIFRoaXMgaXMgcHJldHR5IHN0YW5kYXJkIHN0dWZmIGZvciBtZW1vcnkgbWFuYWdlbWVudCwgYW5kIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBpbXBhY3Qgb2YgdGhlIGNoYW5nZXMuXG5cblRoZSBjb3JlIG9mIHRoZSBjaGFuZ2Ugc2VlbXMgdG8gYmUgdGhlIGluY2x1c2lvbiBvZiBgcHRlX3ByZXNlbnQocHRlKWAgY2hlY2tzICpiZWZvcmUqIHRob3NlIGBmbHVzaF9jYWNoZV9wYWdlYCBjYWxscywgYW5kIGFsc28gYmVmb3JlIHRoZSBgcHRlX2RpcnR5KHB0ZSlgIGNoZWNrLiBUaGF0J3MgaW1tZWRpYXRlbHkgaW50ZXJlc3RpbmcuIEl0J3MgYWxtb3N0IGNlcnRhaW5seSB0byBwcm90ZWN0IGFnYWluc3Qgc29tZSBraW5kIG9mIHJhY2UgY29uZGl0aW9uIG9yIHBvdGVudGlhbCB1c2UtYWZ0ZXItZnJlZSBzY2VuYXJpbyB3aXRoaW4gdGhlIG1pZ3JhdGlvbiBwcm9jZXNzLiBNeSBpbml0aWFsIGh1bmNoIGlzIHRoYXQgaXQncyB0cnlpbmcgdG8gZW5zdXJlIHRoYXQgdGhlIHBhZ2UgdGFibGUgZW50cnkgKFBURSkgaXMgYWN0dWFsbHkgdmFsaWQgYmVmb3JlIGRvaW5nIGFueXRoaW5nIHdpdGggaXQsIHdoaWNoIGlzIGdvb2QgcHJhY3RpY2UsIGVzcGVjaWFsbHkgaW4gYSBjb25jdXJyZW50IGVudmlyb25tZW50IGxpa2UgdGhlIGtlcm5lbC4gTGV0IG1lIGRpZyBpbnRvIHRoZSBzdXJyb3VuZGluZyBjb2RlIGFuZCBzZWUgKndoeSogdGhpcyB3YXNuJ3QgYWxyZWFkeSB0aGVyZS4gTXkgZXhwZXJ0aXNlIHRlbGxzIG1lIHRoZXNlIGd1YXJkcyBhcmUgdGhlcmUgZm9yIGEgcmVhc29uLCBsaWtlbHkgYSBidWcgaGFkIG9jY3VycmVkLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxOTcwLCJPdXRwdXRUb2tlbnMiOjM2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6OTksIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wNlQxNjoxNjo0Ni42NjQ4ODMwOTZaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMzQzMjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibW0vbWlncmF0ZV9kZXZpY2UuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAzOTAsXG4gIFwiTGluZUNvdW50XCI6IDEwMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgMzkwOlxcdFxcdFxcdCAqXFxuIDM5MTpcXHRcXHRcXHQgKiBXZSBkcm9wIHRoaXMgcmVmZXJlbmNlIGFmdGVyIGlzb2xhdGluZyB0aGUgZm9saW8gZnJvbSB0aGUgbHJ1XFxuIDM5MjpcXHRcXHRcXHQgKiBmb3Igbm9uIGRldmljZSBmb2xpbyAoZGV2aWNlIGZvbGlvIGFyZSBub3Qgb24gdGhlIGxydSBhbmQgdGh1c1xcbiAzOTM6XFx0XFx0XFx0ICogY2FuJ3QgYmUgZHJvcHBlZCBmcm9tIGl0KS5cXG4gMzk0OlxcdFxcdFxcdCAqL1xcbiAzOTU6XFx0XFx0XFx0Zm9saW8gPSBwYWdlX2ZvbGlvKHBhZ2UpO1xcbiAzOTY6XFx0XFx0XFx0Zm9saW9fZ2V0KGZvbGlvKTtcXG4gMzk3OlxcdFxcbiAzOTg6XFx0XFx0XFx0LypcXG4gMzk5OlxcdFxcdFxcdCAqIFdlIHJlbHkgb24gZm9saW9fdHJ5bG9jaygpIHRvIGF2b2lkIGRlYWRsb2NrIGJldHdlZW5cXG4gNDAwOlxcdFxcdFxcdCAqIGNvbmN1cnJlbnQgbWlncmF0aW9ucyB3aGVyZSBlYWNoIGlzIHdhaXRpbmcgb24gdGhlIG90aGVyc1xcbiA0MDE6XFx0XFx0XFx0ICogZm9saW8gbG9jay4gSWYgd2UgY2FuJ3QgaW1tZWRpYXRlbHkgbG9jayB0aGUgZm9saW8gd2UgZmFpbCB0aGlzXFxuIDQwMjpcXHRcXHRcXHQgKiBtaWdyYXRpb24gYXMgaXQgaXMgb25seSBiZXN0IGVmZm9ydCBhbnl3YXkuXFxuIDQwMzpcXHRcXHRcXHQgKlxcbiA0MDQ6XFx0XFx0XFx0ICogSWYgd2UgY2FuIGxvY2sgdGhlIGZvbGlvIGl0J3Mgc2FmZSB0byBzZXQgdXAgYSBtaWdyYXRpb24gZW50cnlcXG4gNDA1OlxcdFxcdFxcdCAqIG5vdy4gSW4gdGhlIGNvbW1vbiBjYXNlIHdoZXJlIHRoZSBmb2xpbyBpcyBtYXBwZWQgb25jZSBpbiBhXFxuIDQwNjpcXHRcXHRcXHQgKiBzaW5nbGUgcHJvY2VzcyBzZXR0aW5nIHVwIHRoZSBtaWdyYXRpb24gZW50cnkgbm93IGlzIGFuXFxuIDQwNzpcXHRcXHRcXHQgKiBvcHRpbWlzYXRpb24gdG8gYXZvaWQgd2Fsa2luZyB0aGUgcm1hcCBsYXRlciB3aXRoXFxuIDQwODpcXHRcXHRcXHQgKiB0cnlfdG9fbWlncmF0ZSgpLlxcbiA0MDk6XFx0XFx0XFx0ICovXFxuIDQxMDpcXHRcXHRcXHRpZiAoZmF1bHRfZm9saW8gPT0gZm9saW8gfHwgZm9saW9fdHJ5bG9jayhmb2xpbykpIHtcXG4gNDExOlxcdFxcdFxcdFxcdGJvb2wgYW5vbl9leGNsdXNpdmU7XFxuIDQxMjpcXHRcXHRcXHRcXHRwdGVfdCBzd3BfcHRlO1xcbiA0MTM6XFx0XFxuIDQxNDpcXHRcXHRcXHRcXHRpZiAocHRlX3ByZXNlbnQocHRlKSlcXG4gNDE1OlxcdFxcdFxcdFxcdFxcdGZsdXNoX2NhY2hlX3BhZ2Uodm1hLCBhZGRyLCBwdGVfcGZuKHB0ZSkpO1xcbiA0MTY6XFx0XFx0XFx0XFx0YW5vbl9leGNsdXNpdmUgPSBmb2xpb190ZXN0X2Fub24oZm9saW8pIFxcdTAwMjZcXHUwMDI2XFxuIDQxNzpcXHRcXHRcXHRcXHRcXHRcXHQgIFBhZ2VBbm9uRXhjbHVzaXZlKHBhZ2UpO1xcbiA0MTg6XFx0XFx0XFx0XFx0aWYgKGFub25fZXhjbHVzaXZlKSB7XFxuIDQxOTpcXHRcXHRcXHRcXHRcXHRwdGUgPSBwdGVwX2NsZWFyX2ZsdXNoKHZtYSwgYWRkciwgcHRlcCk7XFxuIDQyMDpcXHRcXG4gNDIxOlxcdFxcdFxcdFxcdFxcdGlmIChmb2xpb190cnlfc2hhcmVfYW5vbl9ybWFwX3B0ZShmb2xpbywgcGFnZSkpIHtcXG4gNDIyOlxcdFxcdFxcdFxcdFxcdFxcdHNldF9wdGVfYXQobW0sIGFkZHIsIHB0ZXAsIHB0ZSk7XFxuIDQyMzpcXHRcXHRcXHRcXHRcXHRcXHRpZiAoZmF1bHRfZm9saW8gIT0gZm9saW8pXFxuIDQyNDpcXHRcXHRcXHRcXHRcXHRcXHRcXHRmb2xpb191bmxvY2soZm9saW8pO1xcbiA0MjU6XFx0XFx0XFx0XFx0XFx0XFx0Zm9saW9fcHV0KGZvbGlvKTtcXG4gNDI2OlxcdFxcdFxcdFxcdFxcdFxcdG1wZm4gPSAwO1xcbiA0Mjc6XFx0XFx0XFx0XFx0XFx0XFx0Z290byBuZXh0O1xcbiA0Mjg6XFx0XFx0XFx0XFx0XFx0fVxcbiA0Mjk6XFx0XFx0XFx0XFx0fSBlbHNlIHtcXG4gNDMwOlxcdFxcdFxcdFxcdFxcdHB0ZSA9IHB0ZXBfZ2V0X2FuZF9jbGVhcihtbSwgYWRkciwgcHRlcCk7XFxuIDQzMTpcXHRcXHRcXHRcXHR9XFxuIDQzMjpcXHRcXG4gNDMzOlxcdFxcdFxcdFxcdG1pZ3JhdGUtXFx1MDAzZWNwYWdlcysrO1xcbiA0MzQ6XFx0XFxuIDQzNTpcXHRcXHRcXHRcXHQvKiBTZXQgdGhlIGRpcnR5IGZsYWcgb24gdGhlIGZvbGlvIG5vdyB0aGUgcHRlIGlzIGdvbmUuICovXFxuIDQzNjpcXHRcXHRcXHRcXHRpZiAocHRlX3ByZXNlbnQocHRlKSBcXHUwMDI2XFx1MDAyNiBwdGVfZGlydHkocHRlKSlcXG4gNDM3OlxcdFxcdFxcdFxcdFxcdGZvbGlvX21hcmtfZGlydHkoZm9saW8pO1xcbiA0Mzg6XFx0XFxuIDQzOTpcXHRcXHRcXHRcXHQvKiBTZXR1cCBzcGVjaWFsIG1pZ3JhdGlvbiBwYWdlIHRhYmxlIGVudHJ5ICovXFxuIDQ0MDpcXHRcXHRcXHRcXHRpZiAobXBmbiBcXHUwMDI2IE1JR1JBVEVfUEZOX1dSSVRFKVxcbiA0NDE6XFx0XFx0XFx0XFx0XFx0ZW50cnkgPSBtYWtlX3dyaXRhYmxlX21pZ3JhdGlvbl9lbnRyeShcXG4gNDQyOlxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdHBhZ2VfdG9fcGZuKHBhZ2UpKTtcXG4gNDQzOlxcdFxcdFxcdFxcdGVsc2UgaWYgKGFub25fZXhjbHVzaXZlKVxcbiA0NDQ6XFx0XFx0XFx0XFx0XFx0ZW50cnkgPSBtYWtlX3JlYWRhYmxlX2V4Y2x1c2l2ZV9taWdyYXRpb25fZW50cnkoXFxuIDQ0NTpcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRwYWdlX3RvX3BmbihwYWdlKSk7XFxuIDQ0NjpcXHRcXHRcXHRcXHRlbHNlXFxuIDQ0NzpcXHRcXHRcXHRcXHRcXHRlbnRyeSA9IG1ha2VfcmVhZGFibGVfbWlncmF0aW9uX2VudHJ5KFxcbiA0NDg6XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0cGFnZV90b19wZm4ocGFnZSkpO1xcbiA0NDk6XFx0XFx0XFx0XFx0aWYgKHB0ZV9wcmVzZW50KHB0ZSkpIHtcXG4gNDUwOlxcdFxcdFxcdFxcdFxcdGlmIChwdGVfeW91bmcocHRlKSlcXG4gNDUxOlxcdFxcdFxcdFxcdFxcdFxcdGVudHJ5ID0gbWFrZV9taWdyYXRpb25fZW50cnlfeW91bmcoZW50cnkpO1xcbiA0NTI6XFx0XFx0XFx0XFx0XFx0aWYgKHB0ZV9kaXJ0eShwdGUpKVxcbiA0NTM6XFx0XFx0XFx0XFx0XFx0XFx0ZW50cnkgPSBtYWtlX21pZ3JhdGlvbl9lbnRyeV9kaXJ0eShlbnRyeSk7XFxuIDQ1NDpcXHRcXHRcXHRcXHR9XFxuIDQ1NTpcXHRcXHRcXHRcXHRzd3BfcHRlID0gc3dwX2VudHJ5X3RvX3B0ZShlbnRyeSk7XFxuIDQ1NjpcXHRcXHRcXHRcXHRpZiAocHRlX3ByZXNlbnQocHRlKSkge1xcbiA0NTc6XFx0XFx0XFx0XFx0XFx0aWYgKHB0ZV9zb2Z0X2RpcnR5KHB0ZSkpXFxuIDQ1ODpcXHRcXHRcXHRcXHRcXHRcXHRzd3BfcHRlID0gcHRlX3N3cF9ta3NvZnRfZGlydHkoc3dwX3B0ZSk7XFxuIDQ1OTpcXHRcXHRcXHRcXHRcXHRpZiAocHRlX3VmZmRfd3AocHRlKSlcXG4gNDYwOlxcdFxcdFxcdFxcdFxcdFxcdHN3cF9wdGUgPSBwdGVfc3dwX21rdWZmZF93cChzd3BfcHRlKTtcXG4gNDYxOlxcdFxcdFxcdFxcdH0gZWxzZSB7XFxuIDQ2MjpcXHRcXHRcXHRcXHRcXHRpZiAocHRlX3N3cF9zb2Z0X2RpcnR5KHB0ZSkpXFxuIDQ2MzpcXHRcXHRcXHRcXHRcXHRcXHRzd3BfcHRlID0gcHRlX3N3cF9ta3NvZnRfZGlydHkoc3dwX3B0ZSk7XFxuIDQ2NDpcXHRcXHRcXHRcXHRcXHRpZiAocHRlX3N3cF91ZmZkX3dwKHB0ZSkpXFxuIDQ2NTpcXHRcXHRcXHRcXHRcXHRcXHRzd3BfcHRlID0gcHRlX3N3cF9ta3VmZmRfd3Aoc3dwX3B0ZSk7XFxuIDQ2NjpcXHRcXHRcXHRcXHR9XFxuIDQ2NzpcXHRcXHRcXHRcXHRzZXRfcHRlX2F0KG1tLCBhZGRyLCBwdGVwLCBzd3BfcHRlKTtcXG4gNDY4OlxcdFxcbiA0Njk6XFx0XFx0XFx0XFx0LypcXG4gNDcwOlxcdFxcdFxcdFxcdCAqIFRoaXMgaXMgbGlrZSByZWd1bGFyIHVubWFwOiB3ZSByZW1vdmUgdGhlIHJtYXAgYW5kXFxuIDQ3MTpcXHRcXHRcXHRcXHQgKiBkcm9wIHRoZSBmb2xpbyByZWZjb3VudC4gVGhlIGZvbGlvIHdvbid0IGJlIGZyZWVkLCBhc1xcbiA0NzI6XFx0XFx0XFx0XFx0ICogd2UgdG9vayBhIHJlZmVyZW5jZSBqdXN0IGFib3ZlLlxcbiA0NzM6XFx0XFx0XFx0XFx0ICovXFxuIDQ3NDpcXHRcXHRcXHRcXHRmb2xpb19yZW1vdmVfcm1hcF9wdGUoZm9saW8sIHBhZ2UsIHZtYSk7XFxuIDQ3NTpcXHRcXHRcXHRcXHRmb2xpb19wdXQoZm9saW8pO1xcbiA0NzY6XFx0XFxuIDQ3NzpcXHRcXHRcXHRcXHRpZiAocHRlX3ByZXNlbnQocHRlKSlcXG4gNDc4OlxcdFxcdFxcdFxcdFxcdHVubWFwcGVkKys7XFxuIDQ3OTpcXHRcXHRcXHR9IGVsc2Uge1xcbiA0ODA6XFx0XFx0XFx0XFx0Zm9saW9fcHV0KGZvbGlvKTtcXG4gNDgxOlxcdFxcdFxcdFxcdG1wZm4gPSAwO1xcbiA0ODI6XFx0XFx0XFx0fVxcbiA0ODM6XFx0XFxuIDQ4NDpcXHRuZXh0OlxcbiA0ODU6XFx0XFx0XFx0bWlncmF0ZS1cXHUwMDNlZHN0W21pZ3JhdGUtXFx1MDAzZW5wYWdlc10gPSAwO1xcbiA0ODY6XFx0XFx0XFx0bWlncmF0ZS1cXHUwMDNlc3JjW21pZ3JhdGUtXFx1MDAzZW5wYWdlcysrXSA9IG1wZm47XFxuIDQ4NzpcXHRcXHR9XFxuIDQ4ODpcXHRcXG4gNDg5OlxcdFxcdC8qIE9ubHkgZmx1c2ggdGhlIFRMQiBpZiB3ZSBhY3R1YWxseSBtb2RpZmllZCBhbnkgZW50cmllcyAqL1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wNlQxNjoxNjo0Ni42NjUwMTk4MzZaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0NjU0NjE0NTE1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkZpeGluZyBhIE5vbi1QcmVzZW50IFBURSBJc3N1ZSBpbiBNaWdyYXRlIERldmljZSoqXG5cbk9rYXksIHNvIHRoaXMgcGF0Y2ggaXMgYWRkcmVzc2luZyBhIHByZXR0eSBzcGVjaWZpYyBidWcg4oCTIHNvbWVvbmUncyBjYWxsaW5nIGBwdGVfcGZuKHB0ZSlgIG9yIGBwdGVfZGlydHkocHRlKWAgb24gYSBQVEUgdGhhdCBpc24ndCBhY3R1YWxseSBwcmVzZW50LiBUaGF0J3MgYSBjbGFzc2ljIG1lbW9yeSBtYW5hZ2VtZW50IHByb2JsZW0sIGFuZCBpdCdzIGdvb2QgdGhleSdyZSBjYXRjaGluZyBpdC4gRnVuY3Rpb25hbGx5LCB0aGlzIGNvZGUncyByZWxhdGVkIHRvIGBtaWdyYXRlX3ZtYV9jb2xsZWN0X3BtZGAsIHNvIGl0J3MgY2xlYXJseSBpbnZvbHZlZCBpbiBwYWdlIG1pZ3JhdGlvbiwgd2hpY2ggaXMgd2hlcmUgdGhpbmdzIGNhbiBnZXQgdHJpY2t5IHdpdGggcGFnZSB0YWJsZSBlbnRyaWVzLiBMZXQncyBzZWUuLi4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgd2hhdCBjb25maWd1cmF0aW9ucyBhcmUgcmVsZXZhbnQgdG8gdGhhdCBmaWxlLCBgbW0vbWlncmF0ZV9kZXZpY2UuY2AsIGJlY2F1c2UgdW5kZXJzdGFuZGluZyB0aGUgY29udGV4dCBvZiB0aGlzIGZpeCBpcyBnb2luZyB0byBiZSBjcnVjaWFsLiBJJ2xsIG5lZWQgdG8ga25vdyAqd2h5KiB0aGlzIHNjZW5hcmlvIGlzIGV2ZW4gaGFwcGVuaW5nIGluIHRoZSBmaXJzdCBwbGFjZSB0byB1bmRlcnN0YW5kIHRoZSByb290IGNhdXNlIGFuZCBlbnN1cmUgdGhlIGZpeCBpcyByb2J1c3QuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjM5MDIsIk91dHB1dFRva2VucyI6MjcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo3MCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA2VDE2OjE2OjUxLjMxOTYzNjQxMVoiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NTE5ODM4ODQsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibWlncmF0ZV9kZXZpY2Uub1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vTWFrZWZpbGU9OTk9b2JqLSQoQ09ORklHX05VTUEpICs9IG1lbW9yeS10aWVycy5vXFxubW0vTWFrZWZpbGU6MTAwOm9iai0kKENPTkZJR19ERVZJQ0VfTUlHUkFUSU9OKSArPSBtaWdyYXRlX2RldmljZS5vXFxubW0vTWFrZWZpbGUtMTAxLW9iai0kKENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRSkgKz0gaHVnZV9tZW1vcnkubyBraHVnZXBhZ2VkLm9cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDZUMTY6MTY6NTEuNzcxNjI5ODM1WiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDIxMTY0NDQ1NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBmb3IgYW4gZXhwZXJ0IGxpa2UgbXlzZWxmOlxuXG4qKkluaXRpYWwgQ29uZmlndXJhdGlvbiBBc3Nlc3NtZW50KipcblxuQWxyaWdodCwgc28gdGhlIHRhc2sgYXQgaGFuZCBoaW5nZXMgb24gYENPTkZJR19ERVZJQ0VfTUlHUkFUSU9OYC4gVGhhdCdzIHRoZSBjb3JlIHJlcXVpcmVtZW50LCBJIGdldCB0aGF0LiBCdXQsIG5hdHVyYWxseSwgYmVmb3JlIGRpdmluZyBpbiwgSSBuZWVkIHRvIHRha2UgYSB3aWRlciB2aWV3LiBUaGlzIGlzbid0IGFuIGlzb2xhdGVkIHNldHRpbmc7IHRoZXNlIGNvbmZpZ3VyYXRpb25zIGFyZSBvZnRlbiBpbnRlcnR3aW5lZC4gU28sIGxldCdzIHRha2UgYSBxdWljayBsb29rIGFyb3VuZC4gV2hhdCBvdGhlciByZWxhdGVkIGNvbmZpZ3VyYXRpb25zIG1pZ2h0IGJlIGx1cmtpbmcgdGhhdCB3b3VsZCBpbmZsdWVuY2UgdGhpcyBzZXR1cCwgb3IgdGhhdCBgQ09ORklHX0RFVklDRV9NSUdSQVRJT05gIG1pZ2h0IGFmZmVjdD8gR290dGEgYnVpbGQgdGhlIGZ1bGwgcGljdHVyZSBiZWZvcmUgSSBzdGFydCBtYWtpbmcgYW55IGNoYW5nZXMsIEkgZG9uJ3Qgd2FudCB0byBtYWtlIHRoaW5ncyB3b3JzZSB3aXRoIGFuIGlzb2xhdGVkIGZpeCFcblxuXG4iLCJJbnB1dFRva2VucyI6NDI4MywiT3V0cHV0VG9rZW5zIjoyOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA2VDE2OjE2OjU1Ljk4MzI3NTgwMloiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2MDc3ODcxNSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgREVWSUNFX01JR1JBVElPTlwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vS2NvbmZpZz02OTY9Y29uZmlnIE1JR1JBVElPTlxcbi0tXFxubW0vS2NvbmZpZy02OTktXFxubW0vS2NvbmZpZzo3MDA6Y29uZmlnIERFVklDRV9NSUdSQVRJT05cXG5tbS9LY29uZmlnLTcwMS1cXHRkZWZfYm9vbCBNSUdSQVRJT04gXFx1MDAyNlxcdTAwMjYgWk9ORV9ERVZJQ0VcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDZUMTY6MTY6NTYuMDQ0MDU5MDk3WiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzkwMTI0MDE1NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRoaXMgbG9naWMsIGFzIHRob3VnaCBpdCB3ZXJlIG15IG93biB0aG91Z2h0IHByb2Nlc3M6XG5cbioqRGl2aW5nIGludG8gRGV2aWNlIE1pZ3JhdGlvbiBSZXF1aXJlbWVudHMqKlxuXG5BbHJpZ2h0LCBsZXQncyBicmVhayB0aGlzIGRvd24uIFRoZSBkZWZpbml0aW9uIG9mIGBERVZJQ0VfTUlHUkFUSU9OYCBoaW5nZXMgb24gdHdvIG90aGVyIGNvbXBvbmVudHM6IGBNSUdSQVRJT05gIGFuZCBgWk9ORV9ERVZJQ0VgLiBTcGVjaWZpY2FsbHksIGBERVZJQ0VfTUlHUkFUSU9OYCBpcyB0cnVlIGlmIGFuZCBvbmx5IGlmIGJvdGggYE1JR1JBVElPTmAgKmFuZCogYFpPTkVfREVWSUNFYCBhcmUgdHJ1ZSAoaXQncyBhbiBBTkQgY29uZGl0aW9uLCBJIHNlZSkuICBUaGVyZWZvcmUsIHRvIGVuYWJsZSBkZXZpY2UgbWlncmF0aW9uLCB3ZSBhYnNvbHV0ZWx5ICptdXN0KiBoYXZlIGJvdGggYENPTkZJR19NSUdSQVRJT05gIGFuZCBgQ09ORklHX1pPTkVfREVWSUNFYCBlbmFibGVkIGluIHRoZSBjb25maWd1cmF0aW9uLiBUaGF0IG1ha2VzIHBlcmZlY3Qgc2Vuc2UuIE5vdywgbGV0IG1lIGp1c3QgZG91YmxlLWNoZWNrIHRoYXQgYFpPTkVfREVWSUNFYCBpcyBzZXQgY29ycmVjdGx5LiBJJ2xsIG5lZWQgdG8gZGlnIGludG8gdGhlIGRlZmluaXRpb24gb2YgYFpPTkVfREVWSUNFYCB0byB2ZXJpZnkuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQ1NTksIk91dHB1dFRva2VucyI6MjYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0OSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0wNlQxNjoxNjo1OS45NDUzMDE0ODFaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE1OTgxNDgyNCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgWk9ORV9ERVZJQ0VcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL0tjb25maWc9MTIzMT1jb25maWcgWk9ORV9ETUEzMlxcbi0tXFxubW0vS2NvbmZpZy0xMjM1LVxcbm1tL0tjb25maWc6MTIzNjpjb25maWcgWk9ORV9ERVZJQ0VcXG5tbS9LY29uZmlnLTEyMzctXFx0Ym9vbCBcXFwiRGV2aWNlIG1lbW9yeSAocG1lbSwgSE1NLCBldGMuLi4pIGhvdHBsdWcgc3VwcG9ydFxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDZUMTY6MTc6MDAuMTA1MTI0MzQ2WiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMzNjkyNzk4MDMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIEkgd2VyZSBjb25zaWRlcmluZyB0aGlzIGNvZGU6XG5cbioqQW5hbHl6aW5nIEJvb2xlYW4gU3RhdGVzKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBjb2RlIGFuZCB0aGUgZmlyc3QgdGhpbmcgdGhhdCBqdW1wcyBvdXQgaXMgYFpPTkVfREVWSUNFYC4gUmlnaHQsIHRoYXQncyBhIGJvb2xlYW4sIG1ha2VzIHNlbnNlLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcywgXCJXaGF0J3MgdGhlIGNvbnRleHQ/IFdoYXQgaXMgdGhpcyBgWk9ORV9ERVZJQ0VgIGZsYWcgdXNlZCBmb3I/XCIgSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoYXQgYm9vbGVhbiBzdGF0ZSBpbmZsdWVuY2VzIHRoZSBvdmVyYWxsIHN5c3RlbSBiZWhhdmlvci5cblxuTm93LCB3aGVyZSB3YXMgST8gUmlnaHQsIGBNSUdSQVRJT05gLiBMZXQgbWUgZGl2ZSBpbnRvIGhvdyBtaWdyYXRpb24gaXMgaGFuZGxlZCBpbiB0aGlzIGNvZGUuIFdoYXQncyB0aGUgcmVsYXRpb25zaGlwIGJldHdlZW4gdGhlIGBaT05FX0RFVklDRWAgZmxhZyBhbmQgdGhlIG1pZ3JhdGlvbiBwcm9jZXNzPyBBcmUgdGhleSBpbmRlcGVuZGVudCBjb25jZXJucyBvciBpcyBgWk9ORV9ERVZJQ0VgIHVzZWQgdG8gdG9nZ2xlIHRoZSBlZmZlY3RzIG9mIGBNSUdSQVRJT05gPyBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgZGVwZW5kZW5jaWVzIGFuZCB0aGUgb3ZlcmFsbCBhcmNoaXRlY3R1cmUuIEkgc2hvdWxkIGludmVzdGlnYXRlIGhvdyB0aGVzZSB0d28gdmFyaWFibGVzIGludGVyYWN0IHdpdGhpbiB0aGUgbGFyZ2VyIHN5c3RlbS5cblxuXG4iLCJJbnB1dFRva2VucyI6NDkwNSwiT3V0cHV0VG9rZW5zIjoyNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA2VDE2OjE3OjAzLjQ3NDQwNzEyOVoiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDM1MDgyMjAxLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBNSUdSQVRJT05cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL0tjb25maWc9Njg1PWNvbmZpZyBOVU1BX01JR1JBVElPTlxcbi0tXFxubW0vS2NvbmZpZy02OTUtXFxubW0vS2NvbmZpZzo2OTY6Y29uZmlnIE1JR1JBVElPTlxcbm1tL0tjb25maWctNjk3LVxcdGJvb2xcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDZUMTY6MTc6MDMuOTA5NDkzNjRaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTcyMzI4NzU0MDksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgbXkgb3duOlxuXG4qKkFuYWx5emluZyBNaWdyYXRpb24gTG9naWMqKlxuXG5BbHJpZ2h0LCBzbyBgTUlHUkFUSU9OYCBpcyBkZWZpbmVkIGFzIGEgYm9vbGVhbiDigJMgbWFrZXMgc2Vuc2UuIE5vdyBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGVyZSB0aGlzIGlzIGJlaW5nIHVzZWQgYW5kIGhvdyBpdCBpbmZsdWVuY2VzIHRoZSBmbG93LiBUaW1lIHRvIGRpZyBpbnRvIHRoZSBjYWxsIHNpdGVzIG9mIGBtaWdyYXRlX3ZtYV9jb2xsZWN0X3BtZGAuIFRoaXMgd2lsbCBnaXZlIG1lIGEgY2xlYXIgcGljdHVyZSBvZiBob3cgdGhlIG1pZ3JhdGlvbiBmbGFnIGludGVyYWN0cyB3aXRoIHRoZSBwYWdlIHRhYmxlIG1hbmlwdWxhdGlvbnMgYW5kIHBoeXNpY2FsIG1lbW9yeSByZW1hcHBpbmcuIEkgZXhwZWN0IHRvIHNlZSBpdHMgdXNlIGRpcmVjdGx5IGluIHRoZSBjb3JlIG1pZ3JhdGlvbiByb3V0aW5lcywgYnV0IGtub3dpbmcgdGhlIGltbWVkaWF0ZSBjYWxsZXJzIHdpbGwgc2hlZCBsaWdodCBvbiB0aGUgY29udGV4dCBhbmQgYW55IGNvbmRpdGlvbmFsIGRlcGVuZGVuY2llcyB0aGF0IG5lZWQgdG8gYmUgY29uc2lkZXJlZC4gTGV0J3Mgc2VlIHdoYXQgd2UgdW5jb3Zlci5cblxuXG4iLCJJbnB1dFRva2VucyI6NTIwNCwiT3V0cHV0VG9rZW5zIjozMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA2VDE2OjE3OjIxLjE0MjM3MjA5OVoiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzE0MjAwNjEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibWlncmF0ZV92bWFfY29sbGVjdF9wbWRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL21pZ3JhdGVfZGV2aWNlLmM9MTM3PXN0YXRpYyBpbnQgbWlncmF0ZV92bWFfY29sbGVjdF9odWdlX3BtZChwbWRfdCAqcG1kcCwgdW5zaWduZWQgbG9uZyBzdGFydCxcXG4tLVxcbm1tL21pZ3JhdGVfZGV2aWNlLmMtMjQ0LVxcbm1tL21pZ3JhdGVfZGV2aWNlLmM6MjQ1OnN0YXRpYyBpbnQgbWlncmF0ZV92bWFfY29sbGVjdF9wbWQocG1kX3QgKnBtZHAsXFxubW0vbWlncmF0ZV9kZXZpY2UuYy0yNDYtXFx0XFx0XFx0XFx0ICAgdW5zaWduZWQgbG9uZyBzdGFydCxcXG4tLVxcbm1tL21pZ3JhdGVfZGV2aWNlLmM9NDk5PXN0YXRpYyBjb25zdCBzdHJ1Y3QgbW1fd2Fsa19vcHMgbWlncmF0ZV92bWFfd2Fsa19vcHMgPSB7XFxubW0vbWlncmF0ZV9kZXZpY2UuYzo1MDA6XFx0LnBtZF9lbnRyeVxcdFxcdD0gbWlncmF0ZV92bWFfY29sbGVjdF9wbWQsXFxubW0vbWlncmF0ZV9kZXZpY2UuYy01MDEtXFx0LnB0ZV9ob2xlXFx0XFx0PSBtaWdyYXRlX3ZtYV9jb2xsZWN0X2hvbGUsXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA2VDE2OjE3OjIxLjIxMzc5NzI3WiIsIlNlcSI6MTUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMyMDA4OTgxMDMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgZnJvbSBteSBwZXJzcGVjdGl2ZTpcblxuKipJbnZlc3RpZ2F0aW5nIHRoZSBVc2FnZSBvZiBgbWlncmF0ZV92bWFfd2Fsa19vcHNgKipcblxuSG1tLCBzbyBgbWlncmF0ZV92bWFfd2Fsa19vcHNgIGlzIHRoZSBrZXkgaGVyZS4gUmlnaHQuIEl0J3MgdXNlZCBpbiBzb21ldGhpbmcgY2FsbGVkIGBtaWdyYXRlX3ZtYV93YWxrX29wc2AuIFRoZSBxdWVzdGlvbiBub3cgYmVjb21lczogd2hlcmUgaXMgKnRoYXQqIHVzZWQ/IFRoYXQncyB0aGUgbmV4dCBsb2dpY2FsIHN0ZXAgaW4gdW5kZXJzdGFuZGluZyB0aGUgY29udGV4dCBhbmQgcHVycG9zZSBvZiB0aGlzIHBhcnRpY3VsYXIgY29tcG9uZW50LiBOZWVkIHRvIHRyYWNlIGl0cyBpbnZvY2F0aW9ucyB0byBnZXQgdGhlIGJyb2FkZXIgcGljdHVyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6NTYxNywiT3V0cHV0VG9rZW5zIjozMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA2VDE2OjE3OjI0LjQxNDY5Nzc1M1oiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzEzNDg4NzEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibWlncmF0ZV92bWFfd2Fsa19vcHNcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL21pZ3JhdGVfZGV2aWNlLmM9MjQ1PXN0YXRpYyBpbnQgbWlncmF0ZV92bWFfY29sbGVjdF9wbWQocG1kX3QgKnBtZHAsXFxuLS1cXG5tbS9taWdyYXRlX2RldmljZS5jLTQ5OC1cXG5tbS9taWdyYXRlX2RldmljZS5jOjQ5OTpzdGF0aWMgY29uc3Qgc3RydWN0IG1tX3dhbGtfb3BzIG1pZ3JhdGVfdm1hX3dhbGtfb3BzID0ge1xcbm1tL21pZ3JhdGVfZGV2aWNlLmMtNTAwLVxcdC5wbWRfZW50cnlcXHRcXHQ9IG1pZ3JhdGVfdm1hX2NvbGxlY3RfcG1kLFxcbi0tXFxubW0vbWlncmF0ZV9kZXZpY2UuYz01MTM9c3RhdGljIHZvaWQgbWlncmF0ZV92bWFfY29sbGVjdChzdHJ1Y3QgbWlncmF0ZV92bWEgKm1pZ3JhdGUpXFxuLS1cXG5tbS9taWdyYXRlX2RldmljZS5jLTUyNy1cXHR3YWxrX3BhZ2VfcmFuZ2Vfdm1hKG1pZ3JhdGUtXFx1MDAzZXZtYSwgbWlncmF0ZS1cXHUwMDNlc3RhcnQsIG1pZ3JhdGUtXFx1MDAzZWVuZCxcXG5tbS9taWdyYXRlX2RldmljZS5jOjUyODpcXHRcXHRcXHRcXHUwMDI2bWlncmF0ZV92bWFfd2Fsa19vcHMsIG1pZ3JhdGUpO1xcbm1tL21pZ3JhdGVfZGV2aWNlLmMtNTI5LVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wNlQxNjoxNzoyNC40ODYwNTIyMjNaIiwiU2VxIjoxNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTgyNTk4MDQwNTcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0IHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgYW5kIHdyaXR0ZW4gaW4gdGhlIGZpcnN0IHBlcnNvbjpcblxuKipNeSBNaWdyYXRpb24gUGxhbm5pbmc6IGBtaWdyYXRlX3ZtYV9jb2xsZWN0YCdzIFJvbGUqKlxuXG5BbHJpZ2h0LCBJJ20gdGhpbmtpbmcgYWJvdXQgdGhlIG1pZ3JhdGlvbiBwcm9jZXNzLCBzcGVjaWZpY2FsbHkgd2l0aGluIHRoZSB2aXJ0dWFsIG1lbW9yeSBhcmVhIChWTUEpIGNvbnRleHQuIEkndmUgZ290IGBtaWdyYXRlX3ZtYV9zZXR1cGAga2lja2luZyB0aGluZ3Mgb2ZmLCB3aGljaCBpcyB0aGUgbG9naWNhbCBlbnRyeSBwb2ludCBmb3IgcHJlcGFyaW5nIGEgVk1BIGZvciBtaWdyYXRpb24uIE5vdywgSSdtIHRyYWNpbmcgdGhlIGV4ZWN1dGlvbiBwYXRoLCBhbmQgSSBzZWUgYG1pZ3JhdGVfdm1hX2NvbGxlY3RgIGdldHRpbmcgY2FsbGVkIGZyb20gd2l0aGluIGBtaWdyYXRlX3ZtYV9zZXR1cGAuIFRoYXQgaW1tZWRpYXRlbHkgZmxhZ3MgYSBwYXJ0aWN1bGFyIGZ1bmN0aW9uIGZvciBtZS4gSXQncyBjb2xsZWN0aW5nIGluZm9ybWF0aW9uOiBnYXRoZXIgdGhlIHJlbGV2YW50IGRhdGEgb3IgZ2F0aGVyIHRoaW5ncyB0aGF0IHdpbGwgYmUgdXNlZCBkdXJpbmcgdGhlIG1lbW9yeSBtb3ZlLiBUaGlzIHN0cm9uZ2x5IHN1Z2dlc3RzIHRoYXQgaXQncyB0aGUgcGhhc2Ugd2hlcmUgd2UncmUgZ29pbmcgdG8gZXhhbWluZSBhbmQgcG90ZW50aWFsbHkgaW52ZW50b3J5IHRoZSBWTUEncyBjb250ZW50cyBvciBtZXRhZGF0YS4gVGhpbmsgb2YgaXQgYXMgcHJlcGFyaW5nIHRoZSBcIm1hbmlmZXN0XCIgb3IgYSBkaXJlY3RvcnkgbGlzdGluZyBvZiB3aGF0IG5lZWRzIHRvIG1vdmUuIFRoaXMgY291bGQgaW52b2x2ZSBpZGVudGlmeWluZyBkaXJ0eSBwYWdlcywgbWFwcGluZyBpbmZvcm1hdGlvbiwgYWNjZXNzIHBlcm1pc3Npb25zLCBvciBhbnl0aGluZyBlbHNlIGVzc2VudGlhbCBmb3IgYSBjb21wbGV0ZSBhbmQgY29uc2lzdGVudCBtaWdyYXRpb24uIEtub3dpbmcgdGhpcyBpcyBjcml0aWNhbCBiZWNhdXNlIGl0IHRlbGxzIG1lIHdoZXJlIEkgbmVlZCB0byBsb29rIGZvciBlZmZpY2llbmN5IGdhaW5zIG9yIHBvdGVudGlhbCBmYWlsdXJlIHBvaW50cyBsYXRlciBkb3duIHRoZSBwcm9jZXNzLiBJJ2xsIG5lZWQgdG8gZHJpbGwgZG93biBpbnRvIHRoZSBpbXBsZW1lbnRhdGlvbiBvZiBgbWlncmF0ZV92bWFfY29sbGVjdGAgdG8gdW5kZXJzdGFuZCBleGFjdGx5ICp3aGF0KiBpdCdzIGNvbGxlY3RpbmcgYW5kICpob3cqIGl0J3MgZG9pbmcgaXQuIEFueSBwb3RlbnRpYWwgYm90dGxlbmVja3Mgd2lsbCBzaG93IHVwIGhlcmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjYwMjcsIk91dHB1dFRva2VucyI6MjgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxOSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0wNlQxNjoxNzo0Mi43NDU4NTg3NVoiLCJTZXEiOjE4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDM1NTMyNDIxLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm1pZ3JhdGVfdm1hX2NvbGxlY3RcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL21pZ3JhdGVfZGV2aWNlLmMtMjAtXFxubW0vbWlncmF0ZV9kZXZpY2UuYzoyMTpzdGF0aWMgaW50IG1pZ3JhdGVfdm1hX2NvbGxlY3Rfc2tpcCh1bnNpZ25lZCBsb25nIHN0YXJ0LFxcbm1tL21pZ3JhdGVfZGV2aWNlLmMtMjItXFx0XFx0XFx0XFx0ICAgIHVuc2lnbmVkIGxvbmcgZW5kLFxcbi0tXFxubW0vbWlncmF0ZV9kZXZpY2UuYy0zNS1cXG5tbS9taWdyYXRlX2RldmljZS5jOjM2OnN0YXRpYyBpbnQgbWlncmF0ZV92bWFfY29sbGVjdF9ob2xlKHVuc2lnbmVkIGxvbmcgc3RhcnQsXFxubW0vbWlncmF0ZV9kZXZpY2UuYy0zNy1cXHRcXHRcXHRcXHQgICAgdW5zaWduZWQgbG9uZyBlbmQsXFxuLS1cXG5tbS9taWdyYXRlX2RldmljZS5jLTQ1LVxcdGlmICghdm1hX2lzX2Fub255bW91cyh3YWxrLVxcdTAwM2V2bWEpKVxcbm1tL21pZ3JhdGVfZGV2aWNlLmM6NDY6XFx0XFx0cmV0dXJuIG1pZ3JhdGVfdm1hX2NvbGxlY3Rfc2tpcChzdGFydCwgZW5kLCB3YWxrKTtcXG5tbS9taWdyYXRlX2RldmljZS5jLTQ3LVxcbi0tXFxubW0vbWlncmF0ZV9kZXZpY2UuYy02MS1cXHRcXHQgKi9cXG5tbS9taWdyYXRlX2RldmljZS5jOjYyOlxcdFxcdHJldHVybiBtaWdyYXRlX3ZtYV9jb2xsZWN0X3NraXAoc3RhcnQgKyBQQUdFX1NJWkUsIGVuZCwgd2Fsayk7XFxubW0vbWlncmF0ZV9kZXZpY2UuYy02My1cXHR9XFxuLS1cXG5tbS9taWdyYXRlX2RldmljZS5jPTg1PXN0YXRpYyBpbnQgbWlncmF0ZV92bWFfc3BsaXRfZm9saW8oc3RydWN0IGZvbGlvICpmb2xpbyxcXG4tLVxcbm1tL21pZ3JhdGVfZGV2aWNlLmMtMTI0LVxcbm1tL21pZ3JhdGVfZGV2aWNlLmM6MTI1Oi8qKiBtaWdyYXRlX3ZtYV9jb2xsZWN0X2h1Z2VfcG1kIC0gY29sbGVjdCBUSFAgcGFnZXMgd2l0aG91dCBzcGxpdHRpbmcgdGhlXFxubW0vbWlncmF0ZV9kZXZpY2UuYy0xMjYtICogZm9saW8gZm9yIGRldmljZSBwcml2YXRlIHBhZ2VzLlxcbi0tXFxubW0vbWlncmF0ZV9kZXZpY2UuYy0xMzYtICovXFxubW0vbWlncmF0ZV9kZXZpY2UuYzoxMzc6c3RhdGljIGludCBtaWdyYXRlX3ZtYV9jb2xsZWN0X2h1Z2VfcG1kKHBtZF90ICpwbWRwLCB1bnNpZ25lZCBsb25nIHN0YXJ0LFxcbm1tL21pZ3JhdGVfZGV2aWNlLmMtMTM4LVxcdFxcdFxcdFxcdFxcdHVuc2lnbmVkIGxvbmcgZW5kLCBzdHJ1Y3QgbW1fd2FsayAqd2FsayxcXG4tLVxcbm1tL21pZ3JhdGVfZGV2aWNlLmMtMTUwLVxcdFxcdHNwaW5fdW5sb2NrKHB0bCk7XFxubW0vbWlncmF0ZV9kZXZpY2UuYzoxNTE6XFx0XFx0cmV0dXJuIG1pZ3JhdGVfdm1hX2NvbGxlY3RfaG9sZShzdGFydCwgZW5kLCAtMSwgd2Fsayk7XFxubW0vbWlncmF0ZV9kZXZpY2UuYy0xNTItXFx0fVxcbi0tXFxubW0vbWlncmF0ZV9kZXZpY2UuYy0xNTYtXFx0XFx0XFx0c3Bpbl91bmxvY2socHRsKTtcXG5tbS9taWdyYXRlX2RldmljZS5jOjE1NzpcXHRcXHRcXHRyZXR1cm4gbWlncmF0ZV92bWFfY29sbGVjdF9za2lwKHN0YXJ0LCBlbmQsIHdhbGspO1xcbm1tL21pZ3JhdGVfZGV2aWNlLmMtMTU4LVxcdFxcdH1cXG4tLVxcbm1tL21pZ3JhdGVfZGV2aWNlLmMtMTYyLVxcdFxcdFxcdHNwaW5fdW5sb2NrKHB0bCk7XFxubW0vbWlncmF0ZV9kZXZpY2UuYzoxNjM6XFx0XFx0XFx0cmV0dXJuIG1pZ3JhdGVfdm1hX2NvbGxlY3RfaG9sZShzdGFydCwgZW5kLCAtMSwgd2Fsayk7XFxubW0vbWlncmF0ZV9kZXZpY2UuYy0xNjQtXFx0XFx0fVxcbi0tXFxubW0vbWlncmF0ZV9kZXZpY2UuYy0xNzItXFx0XFx0XFx0c3Bpbl91bmxvY2socHRsKTtcXG5tbS9taWdyYXRlX2RldmljZS5jOjE3MzpcXHRcXHRcXHRyZXR1cm4gbWlncmF0ZV92bWFfY29sbGVjdF9za2lwKHN0YXJ0LCBlbmQsIHdhbGspO1xcbm1tL21pZ3JhdGVfZGV2aWNlLmMtMTc0LVxcdFxcdH1cXG4tLVxcbm1tL21pZ3JhdGVfZGV2aWNlLmMtMTc4LVxcdFxcdFxcdHNwaW5fdW5sb2NrKHB0bCk7XFxubW0vbWlncmF0ZV9kZXZpY2UuYzoxNzk6XFx0XFx0XFx0cmV0dXJuIG1pZ3JhdGVfdm1hX2NvbGxlY3Rfc2tpcChzdGFydCwgZW5kLCB3YWxrKTtcXG5tbS9taWdyYXRlX2RldmljZS5jLTE4MC1cXHRcXHR9XFxuLS1cXG5tbS9taWdyYXRlX2RldmljZS5jLTE5Mi1cXHRcXHRmb2xpb19wdXQoZm9saW8pO1xcbm1tL21pZ3JhdGVfZGV2aWNlLmM6MTkzOlxcdFxcdHJldHVybiBtaWdyYXRlX3ZtYV9jb2xsZWN0X3NraXAoc3RhcnQsIGVuZCwgd2Fsayk7XFxubW0vbWlncmF0ZV9kZXZpY2UuYy0xOTQtXFx0fVxcbi0tXFxubW0vbWlncmF0ZV9kZXZpY2UuYy0yMjItXFx0XFx0fVxcbm1tL21pZ3JhdGVfZGV2aWNlLmM6MjIzOlxcdFxcdG1pZ3JhdGVfdm1hX2NvbGxlY3Rfc2tpcChzdGFydCArIFBBR0VfU0laRSwgZW5kLCB3YWxrKTtcXG5tbS9taWdyYXRlX2RldmljZS5jLTIyNC1cXHRcXHRzcGluX3VubG9jayhwdGwpO1xcbi0tXFxubW0vbWlncmF0ZV9kZXZpY2UuYy0yMzYtXFx0aWYgKHJldClcXG5tbS9taWdyYXRlX2RldmljZS5jOjIzNzpcXHRcXHRyZXR1cm4gbWlncmF0ZV92bWFfY29sbGVjdF9za2lwKHN0YXJ0LCBlbmQsIHdhbGspO1xcbm1tL21pZ3JhdGVfZGV2aWNlLmMtMjM4LVxcdGlmIChwbWRfbm9uZShwbWRwX2dldF9sb2NrbGVzcyhwbWRwKSkpXFxubW0vbWlncmF0ZV9kZXZpY2UuYzoyMzk6XFx0XFx0cmV0dXJuIG1pZ3JhdGVfdm1hX2NvbGxlY3RfaG9sZShzdGFydCwgZW5kLCAtMSwgd2Fsayk7XFxubW0vbWlncmF0ZV9kZXZpY2UuYy0yNDAtXFxuLS1cXG5tbS9taWdyYXRlX2RldmljZS5jLTI0NC1cXG5tbS9taWdyYXRlX2RldmljZS5jOjI0NTpzdGF0aWMgaW50IG1pZ3JhdGVfdm1hX2NvbGxlY3RfcG1kKHBtZF90ICpwbWRwLFxcbm1tL21pZ3JhdGVfZGV2aWNlLmMtMjQ2LVxcdFxcdFxcdFxcdCAgIHVuc2lnbmVkIGxvbmcgc3RhcnQsXFxuLS1cXG5tbS9taWdyYXRlX2RldmljZS5jLTI2MC1cXHRpZiAocG1kX3RyYW5zX2h1Z2UoKnBtZHApIHx8ICFwbWRfcHJlc2VudCgqcG1kcCkpIHtcXG5tbS9taWdyYXRlX2RldmljZS5jOjI2MTpcXHRcXHRpbnQgcmV0ID0gbWlncmF0ZV92bWFfY29sbGVjdF9odWdlX3BtZChwbWRwLCBzdGFydCwgZW5kLCB3YWxrLCBmYXVsdF9mb2xpbyk7XFxubW0vbWlncmF0ZV9kZXZpY2UuYy0yNjItXFxuLS1cXG5tbS9taWdyYXRlX2RldmljZS5jLTMyNS1cXG5tbS9taWdyYXRlX2RldmljZS5jOjMyNjpcXHRcXHRcXHRcXHRcXHRyZXR1cm4gbWlncmF0ZV92bWFfY29sbGVjdF9za2lwKGFkZHIsIGVuZCwgd2Fsayk7XFxubW0vbWlncmF0ZV9kZXZpY2UuYy0zMjctXFx0XFx0XFx0XFx0fVxcbi0tXFxubW0vbWlncmF0ZV9kZXZpY2UuYy0zNzEtXFxubW0vbWlncmF0ZV9kZXZpY2UuYzozNzI6XFx0XFx0XFx0XFx0XFx0cmV0dXJuIG1pZ3JhdGVfdm1hX2NvbGxlY3Rfc2tpcChhZGRyLCBlbmQsIHdhbGspO1xcbm1tL21pZ3JhdGVfZGV2aWNlLmMtMzczLVxcdFxcdFxcdFxcdH1cXG4tLVxcbm1tL21pZ3JhdGVfZGV2aWNlLmM9NDk5PXN0YXRpYyBjb25zdCBzdHJ1Y3QgbW1fd2Fsa19vcHMgbWlncmF0ZV92bWFfd2Fsa19vcHMgPSB7XFxubW0vbWlncmF0ZV9kZXZpY2UuYzo1MDA6XFx0LnBtZF9lbnRyeVxcdFxcdD0gbWlncmF0ZV92bWFfY29sbGVjdF9wbWQsXFxubW0vbWlncmF0ZV9kZXZpY2UuYzo1MDE6XFx0LnB0ZV9ob2xlXFx0XFx0PSBtaWdyYXRlX3ZtYV9jb2xsZWN0X2hvbGUsXFxubW0vbWlncmF0ZV9kZXZpY2UuYy01MDItXFx0LndhbGtfbG9ja1xcdFxcdD0gUEdXQUxLX1JETE9DSyxcXG4tLVxcbm1tL21pZ3JhdGVfZGV2aWNlLmMtNTA1LS8qXFxubW0vbWlncmF0ZV9kZXZpY2UuYzo1MDY6ICogbWlncmF0ZV92bWFfY29sbGVjdCgpIC0gY29sbGVjdCBwYWdlcyBvdmVyIGEgcmFuZ2Ugb2YgdmlydHVhbCBhZGRyZXNzZXNcXG5tbS9taWdyYXRlX2RldmljZS5jLTUwNy0gKiBAbWlncmF0ZTogbWlncmF0ZSBzdHJ1Y3QgY29udGFpbmluZyBhbGwgbWlncmF0aW9uIGluZm9ybWF0aW9uXFxuLS1cXG5tbS9taWdyYXRlX2RldmljZS5jLTUxMi0gKi9cXG5tbS9taWdyYXRlX2RldmljZS5jOjUxMzpzdGF0aWMgdm9pZCBtaWdyYXRlX3ZtYV9jb2xsZWN0KHN0cnVjdCBtaWdyYXRlX3ZtYSAqbWlncmF0ZSlcXG5tbS9taWdyYXRlX2RldmljZS5jLTUxNC17XFxuLS1cXG5tbS9taWdyYXRlX2RldmljZS5jPTU0Mj1zdGF0aWMgYm9vbCBtaWdyYXRlX3ZtYV9jaGVja19wYWdlKHN0cnVjdCBwYWdlICpwYWdlLCBzdHJ1Y3QgcGFnZSAqZmF1bHRfcGFnZSlcXG4tLVxcbm1tL21pZ3JhdGVfZGV2aWNlLmMtNTQ3LVxcdCAqIE9uZSBleHRyYSByZWYgYmVjYXVzZSBjYWxsZXIgaG9sZHMgYW4gZXh0cmEgcmVmZXJlbmNlLCBlaXRoZXIgZnJvbVxcbm1tL21pZ3JhdGVfZGV2aWNlLmM6NTQ4OlxcdCAqIGZvbGlvX2lzb2xhdGVfbHJ1KCkgZm9yIGEgcmVndWxhciBmb2xpbywgb3IgbWlncmF0ZV92bWFfY29sbGVjdCgpIGZvclxcbm1tL21pZ3JhdGVfZGV2aWNlLmMtNTQ5LVxcdCAqIGEgZGV2aWNlIGZvbGlvLlxcbi0tXFxubW0vbWlncmF0ZV9kZXZpY2UuYz03NDA9aW50IG1pZ3JhdGVfdm1hX3NldHVwKHN0cnVjdCBtaWdyYXRlX3ZtYSAqYXJncylcXG4tLVxcbm1tL21pZ3JhdGVfZGV2aWNlLmMtNzY2LVxcbm1tL21pZ3JhdGVfZGV2aWNlLmM6NzY3OlxcdG1pZ3JhdGVfdm1hX2NvbGxlY3QoYXJncyk7XFxubW0vbWlncmF0ZV9kZXZpY2UuYy03NjgtXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA2VDE2OjE3OjQzLjE4MTM5NzYzMVoiLCJTZXEiOjE5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNDkyOTQ1NjUzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aGUgdGhvdWdodCBwcm9jZXNzLCBhcyByZXF1ZXN0ZWQ6XG5cbioqRGVjb25zdHJ1Y3RpbmcgYG1pZ3JhdGVfdm1hX3NldHVwYCoqXG5cbk9rYXksIHNvIGBtaWdyYXRlX3ZtYV9zZXR1cGAgaXMgZXhwb3J0ZWQuIFRoYXQncyBpbnRlcmVzdGluZzsgaXQncyBkZXNpZ25lZCB0byBiZSB1c2VkIGV4dGVybmFsbHksIG1lYW5pbmcgb3RoZXIgcGFydHMgb2YgdGhlIHN5c3RlbSBhcmUgcmVseWluZyBvbiBpdC4gTXkgZmlyc3QgaW5zdGluY3QsIGdpdmVuIG15IGV4cGVyaWVuY2Ugd2l0aCBtZW1vcnkgbWFuYWdlbWVudCwgaXMgdG8gZmlndXJlIG91dCB0aGUgdXNlIGNhc2VzLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgY29udGV4dHMgaW4gd2hpY2ggdGhpcyBmdW5jdGlvbiBpcyBpbnZva2VkLiBXaG8ncyBjYWxsaW5nIGl0PyBXaGF0IGFyZSB0aGV5IHRyeWluZyB0byBhY2hpZXZlPyBLbm93aW5nIHRoZSBjYWxsaW5nIHNpdGVzIGlzIGNydWNpYWwgdG8gdW5kZXJzdGFuZGluZyB0aGUgaW50ZW50IGFuZCBwb3RlbnRpYWwgaW1wYWN0IG9mIHRoaXMgcGllY2Ugb2YgY29kZS4gVGltZSB0byBkaWcgaW50byB0aGUgY2FsbCBncmFwaCBhbmQgc2VlIHdobydzIGludGVyZXN0ZWQgaW4gc2V0dGluZyB1cCB2aXJ0dWFsIG1lbW9yeSBhcmVhcyBmb3IgbWlncmF0aW9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjo4MTY0LCJPdXRwdXRUb2tlbnMiOjI2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDZUMTY6MTc6NDYuNjc0MzQ1NzA0WiIsIlNlcSI6MjAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMjk3NTM5Nzc0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm1pZ3JhdGVfdm1hX3NldHVwXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIlwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJEb2N1bWVudGF0aW9uL21tL2htbS5yc3Q9MjY0PXVzZSBoYXJkd2FyZSBETUEgb3IgZGV2aWNlIHNwZWNpZmljIGxvYWQvc3RvcmUgaW5zdHJ1Y3Rpb25zIHRvIG1pZ3JhdGUgZGF0YS5cXG5Eb2N1bWVudGF0aW9uL21tL2htbS5yc3Q6MjY1OlRoZSBtaWdyYXRlX3ZtYV9zZXR1cCgpLCBtaWdyYXRlX3ZtYV9wYWdlcygpLCBhbmQgbWlncmF0ZV92bWFfZmluYWxpemUoKVxcbkRvY3VtZW50YXRpb24vbW0vaG1tLnJzdC0yNjYtZnVuY3Rpb25zIGFyZSBkZXNpZ25lZCB0byBtYWtlIGRyaXZlcnMgZWFzaWVyIHRvIHdyaXRlIGFuZCB0byBjZW50cmFsaXplIGNvbW1vblxcbi0tXFxuRG9jdW1lbnRhdGlvbi9tbS9obW0ucnN0PTI5Nz1iZXR3ZWVuIGRldmljZSBkcml2ZXIgc3BlY2lmaWMgY29kZSBhbmQgc2hhcmVkIGNvbW1vbiBjb2RlOlxcbi0tXFxuRG9jdW1lbnRhdGlvbi9tbS9obW0ucnN0LTMwMS0gICBUaGUgZGV2aWNlIGRyaXZlciBoYXMgdG8gcGFzcyBhIGBgc3RydWN0IHZtX2FyZWFfc3RydWN0YGAgdG9cXG5Eb2N1bWVudGF0aW9uL21tL2htbS5yc3Q6MzAyOiAgIG1pZ3JhdGVfdm1hX3NldHVwKCkgc28gdGhlIG1tYXBfcmVhZF9sb2NrKCkgb3IgbW1hcF93cml0ZV9sb2NrKCkgbmVlZHMgdG9cXG5Eb2N1bWVudGF0aW9uL21tL2htbS5yc3QtMzAzLSAgIGJlIGhlbGQgZm9yIHRoZSBkdXJhdGlvbiBvZiB0aGUgbWlncmF0aW9uLlxcbkRvY3VtZW50YXRpb24vbW0vaG1tLnJzdC0zMDQtXFxuRG9jdW1lbnRhdGlvbi9tbS9obW0ucnN0OjMwNToyLiBgYG1pZ3JhdGVfdm1hX3NldHVwKHN0cnVjdCBtaWdyYXRlX3ZtYSAqYXJncylgYFxcbkRvY3VtZW50YXRpb24vbW0vaG1tLnJzdC0zMDYtXFxuRG9jdW1lbnRhdGlvbi9tbS9obW0ucnN0LTMwNy0gICBUaGUgZGV2aWNlIGRyaXZlciBpbml0aWFsaXplcyB0aGUgYGBzdHJ1Y3QgbWlncmF0ZV92bWFgYCBmaWVsZHMgYW5kIHBhc3Nlc1xcbkRvY3VtZW50YXRpb24vbW0vaG1tLnJzdDozMDg6ICAgdGhlIHBvaW50ZXIgdG8gbWlncmF0ZV92bWFfc2V0dXAoKS4gVGhlIGBgYXJncy1cXHUwMDNlZmxhZ3NgYCBmaWVsZCBpcyB1c2VkIHRvXFxuRG9jdW1lbnRhdGlvbi9tbS9obW0ucnN0LTMwOS0gICBmaWx0ZXIgd2hpY2ggc291cmNlIHBhZ2VzIHNob3VsZCBiZSBtaWdyYXRlZC4gRm9yIGV4YW1wbGUsIHNldHRpbmdcXG4tLVxcbkRvY3VtZW50YXRpb24vbW0vaG1tLnJzdC0zMTctXFxuRG9jdW1lbnRhdGlvbi9tbS9obW0ucnN0OjMxODogICBPbmUgb2YgdGhlIGZpcnN0IHN0ZXBzIG1pZ3JhdGVfdm1hX3NldHVwKCkgZG9lcyBpcyB0byBpbnZhbGlkYXRlIG90aGVyXFxuRG9jdW1lbnRhdGlvbi9tbS9obW0ucnN0LTMxOS0gICBkZXZpY2UncyBNTVVzIHdpdGggdGhlIGBgbW11X25vdGlmaWVyX2ludmFsaWRhdGVfcmFuZ2Vfc3RhcnQoKClgYCBhbmRcXG4tLVxcbkRvY3VtZW50YXRpb24vbW0vaG1tLnJzdC0zMjQtICAgYGBNTVVfTk9USUZZX01JR1JBVEVgYCBhbmQgdGhlIGBgb3duZXJgYCBmaWVsZCBzZXQgdG9cXG5Eb2N1bWVudGF0aW9uL21tL2htbS5yc3Q6MzI1OiAgIHRoZSBgYGFyZ3MtXFx1MDAzZXBnbWFwX293bmVyYGAgZmllbGQgcGFzc2VkIHRvIG1pZ3JhdGVfdm1hX3NldHVwKCkuIFRoaXNcXG5Eb2N1bWVudGF0aW9uL21tL2htbS5yc3QtMzI2LSAgIGFsbG93cyB0aGUgZGV2aWNlIGRyaXZlciB0byBza2lwIHRoZSBpbnZhbGlkYXRpb24gY2FsbGJhY2sgYW5kIG9ubHlcXG4tLVxcbkRvY3VtZW50YXRpb24vbW0vaG1tLnJzdC0zMzctICAgaW5zZXJ0ZWQgaW4gcGxhY2Ugb2YgdGhlIG9yaWdpbmFsIFBURS5cXG5Eb2N1bWVudGF0aW9uL21tL2htbS5yc3Q6MzM4OiAgIG1pZ3JhdGVfdm1hX3NldHVwKCkgYWxzbyBjbGVhcnMgdGhlIGBgYXJncy1cXHUwMDNlZHN0YGAgYXJyYXkuXFxuRG9jdW1lbnRhdGlvbi9tbS9obW0ucnN0LTMzOS1cXG4tLVxcbkRvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL3poX0NOL21tL2htbS5yc3Q9MjEyPUhNTSDliIfmjaLliLDnm7TmjqXkvb/nlKggc3RydWN0IHBhZ2Ug55So5LqO6K6+5aSH5YaF5a2Y77yM6L+Z5L2/5b6X5aSn5aSa5pWw5YaF5qC45Luj56CB6Lev5b6E5LiN55+l6YGT5beu5byC44CCXFxuLS1cXG5Eb2N1bWVudGF0aW9uL3RyYW5zbGF0aW9ucy96aF9DTi9tbS9obW0ucnN0LTIxOC3nlLHkuo4gQ1BVIOaXoOazleebtOaOpeiuv+mXruiuvuWkh+WGheWtmO+8jOWboOatpOiuvuWkh+mpseWKqOeoi+W6j+W/hemhu+S9v+eUqOehrOS7tiBETUEg5oiW6K6+5aSH54m55a6a55qE5Yqg6L29L+WtmFxcbkRvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL3poX0NOL21tL2htbS5yc3Q6MjE5OuWCqOaMh+S7pOadpei/geenu+aVsOaNruOAgm1pZ3JhdGVfdm1hX3NldHVwKCnjgIFtaWdyYXRlX3ZtYV9wYWdlcygpIOWSjFxcbkRvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL3poX0NOL21tL2htbS5yc3QtMjIwLW1pZ3JhdGVfdm1hX2ZpbmFsaXplKCkg5Ye95pWw5peo5Zyo5L2/6amx5Yqo56iL5bqP5pu05piT5LqO57yW5YaZ5bm26ZuG5Lit6Leo6amx5Yqo56iL5bqP55qE6YCa55So5Luj56CB44CCXFxuLS1cXG5Eb2N1bWVudGF0aW9uL3RyYW5zbGF0aW9ucy96aF9DTi9tbS9obW0ucnN0PTI0Mz1kZXZtX21lbXVubWFwX3BhZ2VzKCkg5ZKMIGRldm1fcmVsZWFzZV9tZW1fcmVnaW9uKCkg5b2T6LWE5rqQ5Y+v5Lul57uR5a6a5YiwIGBgc3RydWN0IGRldmljZWBgLlxcbi0tXFxuRG9jdW1lbnRhdGlvbi90cmFuc2xhdGlvbnMvemhfQ04vbW0vaG1tLnJzdC0yNDktXFxuRG9jdW1lbnRhdGlvbi90cmFuc2xhdGlvbnMvemhfQ04vbW0vaG1tLnJzdDoyNTA6ICAg6K6+5aSH6amx5Yqo56iL5bqP5b+F6aG75bCGIGBgc3RydWN0IHZtX2FyZWFfc3RydWN0YGAg5Lyg6YCS57uZbWlncmF0ZV92bWFfc2V0dXAoKe+8jFxcbkRvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL3poX0NOL21tL2htbS5yc3QtMjUxLSAgIOWboOatpOmcgOimgeWcqOi/geenu+acn+mXtOS/neeVmSBtbWFwX3JlYWRfbG9jaygpIOaIliBtbWFwX3dyaXRlX2xvY2soKeOAglxcbkRvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL3poX0NOL21tL2htbS5yc3QtMjUyLVxcbkRvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL3poX0NOL21tL2htbS5yc3Q6MjUzOjIuIGBgbWlncmF0ZV92bWFfc2V0dXAoc3RydWN0IG1pZ3JhdGVfdm1hICphcmdzKWBgXFxuRG9jdW1lbnRhdGlvbi90cmFuc2xhdGlvbnMvemhfQ04vbW0vaG1tLnJzdC0yNTQtXFxuRG9jdW1lbnRhdGlvbi90cmFuc2xhdGlvbnMvemhfQ04vbW0vaG1tLnJzdC0yNTUtICAg6K6+5aSH6amx5Yqo5Yid5aeL5YyW5LqGIGBgc3RydWN0IG1pZ3JhdGVfdm1hYGAg55qE5a2X5q6177yM5bm25bCG6K+l5oyH6ZKI5Lyg6YCS57uZXFxuRG9jdW1lbnRhdGlvbi90cmFuc2xhdGlvbnMvemhfQ04vbW0vaG1tLnJzdDoyNTY6ICAgbWlncmF0ZV92bWFfc2V0dXAoKeOAgmBgYXJncy1cXHUwMDNlZmxhZ3NgYCDlrZfmrrXmmK/nlKjmnaXov4fmu6Tlk6rkupvmupDpobXpnaLlupTor6Xooqvov4Hnp7vjgIJcXG5Eb2N1bWVudGF0aW9uL3RyYW5zbGF0aW9ucy96aF9DTi9tbS9obW0ucnN0LTI1Ny0gICDkvovlpoLvvIzorr7nva4gYGBNSUdSQVRFX1ZNQV9TRUxFQ1RfU1lTVEVNYGAg5bCG5Y+q6L+B56e757O757uf5YaF5a2Y77yM6K6+572uXFxuLS1cXG5Eb2N1bWVudGF0aW9uL3RyYW5zbGF0aW9ucy96aF9DTi9tbS9obW0ucnN0LTI2Mi1cXG5Eb2N1bWVudGF0aW9uL3RyYW5zbGF0aW9ucy96aF9DTi9tbS9obW0ucnN0OjI2MzogICBtaWdyYXRlX3ZtYV9zZXR1cCgp5omA5YGa55qE56ys5LiA5q2l5piv55SoIGBgbW11X25vdGlmaWVyX2ludmFsaWRhdGVfcmFuZ2Vfc3RhcnQoKWBgXFxuRG9jdW1lbnRhdGlvbi90cmFuc2xhdGlvbnMvemhfQ04vbW0vaG1tLnJzdC0yNjQtICAg5ZKMIGBgbW11X25vdGlmaWVyX2ludmFsaWRhdGVfcmFuZ2VfZW5kKClgYCDosIPnlKjmnaXpgY3ljoborr7lpIflkajlm7TnmoTpobXooajvvIzkvb9cXG4tLVxcbkRvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL3poX0NOL21tL2htbS5yc3QtMjY3LSAgIOWFtiBgYGV2ZW50YGAg5a2X5q616K6+572u5Li6TU1VX05PVElGWV9NSUdSQVRF77yMIGBgb3duZXJgYCDlrZfmrrXorr7nva7kuLrkvKDpgJLnu5lcXG5Eb2N1bWVudGF0aW9uL3RyYW5zbGF0aW9ucy96aF9DTi9tbS9obW0ucnN0OjI2ODogICBtaWdyYXRlX3ZtYV9zZXR1cCgp55qEIGBgYXJncy1cXHUwMDNlcGdtYXBfb3duZXJgYCDlrZfmrrXjgILov5nlhYHorrjorr7lpIfpqbHliqjot7Pov4fml6BcXG5Eb2N1bWVudGF0aW9uL3RyYW5zbGF0aW9ucy96aF9DTi9tbS9obW0ucnN0LTI2OS0gICDmlYjljJblm57osIPvvIzlj6rml6DmlYjljJbpgqPkupvlrp7pmYXmraPlnKjov4Hnp7vnmoTorr7lpIfnp4HmnIlNTVXmmKDlsITjgILov5nkuIDngrnlsIblnKjkuIvkuIDoioLor6bnu4bop6Pph4rjgIJcXG4tLVxcbkRvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL3poX0NOL21tL2htbS5yc3QtMjc1LSAgIGBgbG9ja19wYWdlKClgYOmUgeWumu+8jOS4jkxSVemalOemu++8iOWmguaenOezu+e7n+WGheWtmOWSjOiuvuWkh+engeaciemhteS4jeWcqExSVeS4iu+8ie+8jOS7jui/m1xcbkRvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL3poX0NOL21tL2htbS5yc3Q6Mjc2OiAgIOeoi+S4reWPlua2iOaYoOWwhO+8jOW5tuaPkuWFpeS4gOS4queJueauiueahOi/geenu1BUReadpeS7o+abv+WOn+adpeeahFBUReOAgiBtaWdyYXRlX3ZtYV9zZXR1cCgpXFxuRG9jdW1lbnRhdGlvbi90cmFuc2xhdGlvbnMvemhfQ04vbW0vaG1tLnJzdC0yNzctICAg6L+Y5riF6Zmk5LqGIGBgYXJncy1cXHUwMDNlZHN0YGAg5pWw57uE44CCXFxuLS1cXG5hcmNoL3Bvd2VycGMva3ZtL2Jvb2szc19odl91dm1lbS5jPTUxMz1zdGF0aWMgaW50IF9fa3ZtcHBjX3N2bV9wYWdlX291dChzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcXG4tLVxcbmFyY2gvcG93ZXJwYy9rdm0vYm9vazNzX2h2X3V2bWVtLmMtNTM4LVxcbmFyY2gvcG93ZXJwYy9rdm0vYm9vazNzX2h2X3V2bWVtLmM6NTM5OlxcdHJldCA9IG1pZ3JhdGVfdm1hX3NldHVwKFxcdTAwMjZtaWcpO1xcbmFyY2gvcG93ZXJwYy9rdm0vYm9vazNzX2h2X3V2bWVtLmMtNTQwLVxcdGlmIChyZXQpXFxuLS1cXG5hcmNoL3Bvd2VycGMva3ZtL2Jvb2szc19odl91dm1lbS5jPTc0MD1zdGF0aWMgaW50IGt2bXBwY19zdm1fcGFnZV9pbihzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcXG4tLVxcbmFyY2gvcG93ZXJwYy9rdm0vYm9vazNzX2h2X3V2bWVtLmMtNzYwLVxcbmFyY2gvcG93ZXJwYy9rdm0vYm9vazNzX2h2X3V2bWVtLmM6NzYxOlxcdHJldCA9IG1pZ3JhdGVfdm1hX3NldHVwKFxcdTAwMjZtaWcpO1xcbmFyY2gvcG93ZXJwYy9rdm0vYm9vazNzX2h2X3V2bWVtLmMtNzYyLVxcdGlmIChyZXQpXFxuLS1cXG5kcml2ZXJzL2dwdS9kcm0vYW1kL2FtZGtmZC9rZmRfbWlncmF0ZS5jPTM5ND1zdm1fbWlncmF0ZV92bWFfdG9fdnJhbShzdHJ1Y3Qga2ZkX25vZGUgKm5vZGUsIHN0cnVjdCBzdm1fcmFuZ2UgKnByYW5nZSxcXG4tLVxcbmRyaXZlcnMvZ3B1L2RybS9hbWQvYW1ka2ZkL2tmZF9taWdyYXRlLmMtNDMxLVxcbmRyaXZlcnMvZ3B1L2RybS9hbWQvYW1ka2ZkL2tmZF9taWdyYXRlLmM6NDMyOlxcdHIgPSBtaWdyYXRlX3ZtYV9zZXR1cChcXHUwMDI2bWlncmF0ZSk7XFxuZHJpdmVycy9ncHUvZHJtL2FtZC9hbWRrZmQva2ZkX21pZ3JhdGUuYy00MzMtXFx0aWYgKHIpIHtcXG4tLVxcbmRyaXZlcnMvZ3B1L2RybS9hbWQvYW1ka2ZkL2tmZF9taWdyYXRlLmM9NjkzPXN2bV9taWdyYXRlX3ZtYV90b19yYW0oc3RydWN0IGtmZF9ub2RlICpub2RlLCBzdHJ1Y3Qgc3ZtX3JhbmdlICpwcmFuZ2UsXFxuLS1cXG5kcml2ZXJzL2dwdS9kcm0vYW1kL2FtZGtmZC9rZmRfbWlncmF0ZS5jLTczNC1cXG5kcml2ZXJzL2dwdS9kcm0vYW1kL2FtZGtmZC9rZmRfbWlncmF0ZS5jOjczNTpcXHRyID0gbWlncmF0ZV92bWFfc2V0dXAoXFx1MDAyNm1pZ3JhdGUpO1xcbmRyaXZlcnMvZ3B1L2RybS9hbWQvYW1ka2ZkL2tmZF9taWdyYXRlLmMtNzM2LVxcdGlmIChyKSB7XFxuLS1cXG5kcml2ZXJzL2dwdS9kcm0vYW1kL2FtZGtmZC9rZmRfc3ZtLmM9MzUxNT1zdm1fcmFuZ2VfYmVzdF9wcmVmZXRjaF9sb2NhdGlvbihzdHJ1Y3Qgc3ZtX3JhbmdlICpwcmFuZ2UpXFxuLS1cXG5kcml2ZXJzL2dwdS9kcm0vYW1kL2FtZGtmZC9rZmRfc3ZtLmMtMzU4Mi0gKiBhbmQgcmVzdG9yZSB3b3JrOlxcbmRyaXZlcnMvZ3B1L2RybS9hbWQvYW1ka2ZkL2tmZF9zdm0uYzozNTgzOiAqIDEuIG1pZ3JhdGVfdm1hX3NldHVwIGludmFsaWRhdGUgcGFnZXMsIE1NVSBub3RpZmllciBjYWxsYmFjayBzdm1fcmFuZ2VfZXZpY3RcXG5kcml2ZXJzL2dwdS9kcm0vYW1kL2FtZGtmZC9rZmRfc3ZtLmMtMzU4NC0gKiAgICBzdG9wcyBhbGwgcXVldWVzLCBzY2hlZHVsZSByZXN0b3JlIHdvcmtcXG4tLVxcbmRyaXZlcnMvZ3B1L2RybS9kcm1fcGFnZW1hcC5jPTYxNj1pbnQgZHJtX3BhZ2VtYXBfbWlncmF0ZV90b19kZXZtZW0oc3RydWN0IGRybV9wYWdlbWFwX2Rldm1lbSAqZGV2bWVtX2FsbG9jYXRpb24sXFxuLS1cXG5kcml2ZXJzL2dwdS9kcm0vZHJtX3BhZ2VtYXAuYy02ODMtXFxuZHJpdmVycy9ncHUvZHJtL2RybV9wYWdlbWFwLmM6Njg0OlxcdGVyciA9IG1pZ3JhdGVfdm1hX3NldHVwKFxcdTAwMjZtaWdyYXRlKTtcXG5kcml2ZXJzL2dwdS9kcm0vZHJtX3BhZ2VtYXAuYy02ODUtXFx0aWYgKGVycilcXG4tLVxcbmRyaXZlcnMvZ3B1L2RybS9kcm1fcGFnZW1hcC5jPTEyMTE9c3RhdGljIGludCBfX2RybV9wYWdlbWFwX21pZ3JhdGVfdG9fcmFtKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdmFzLFxcbi0tXFxuZHJpdmVycy9ncHUvZHJtL2RybV9wYWdlbWFwLmMtMTI2NC1cXG5kcml2ZXJzL2dwdS9kcm0vZHJtX3BhZ2VtYXAuYzoxMjY1OlxcdGVyciA9IG1pZ3JhdGVfdm1hX3NldHVwKFxcdTAwMjZtaWdyYXRlKTtcXG5kcml2ZXJzL2dwdS9kcm0vZHJtX3BhZ2VtYXAuYy0xMjY2LVxcdGlmIChlcnIpXFxuLS1cXG5kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9ub3V2ZWF1X2RtZW0uYz0xODM9c3RhdGljIHZtX2ZhdWx0X3Qgbm91dmVhdV9kbWVtX21pZ3JhdGVfdG9fcmFtKHN0cnVjdCB2bV9mYXVsdCAqdm1mKVxcbi0tXFxuZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbm91dmVhdV9kbWVtLmMtMjM1LVxcdCAqL1xcbmRyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L25vdXZlYXVfZG1lbS5jOjIzNjpcXHRpZiAobWlncmF0ZV92bWFfc2V0dXAoXFx1MDAyNmFyZ3MpIFxcdTAwM2MgMClcXG5kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9ub3V2ZWF1X2RtZW0uYy0yMzctXFx0XFx0cmV0dXJuIFZNX0ZBVUxUX1NJR0JVUztcXG4tLVxcbmRyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L25vdXZlYXVfZG1lbS5jPTgyMj1ub3V2ZWF1X2RtZW1fbWlncmF0ZV92bWEoc3RydWN0IG5vdXZlYXVfZHJtICpkcm0sXFxuLS1cXG5kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9ub3V2ZWF1X2RtZW0uYy04NzEtXFxuZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbm91dmVhdV9kbWVtLmM6ODcyOlxcdFxcdHJldCA9IG1pZ3JhdGVfdm1hX3NldHVwKFxcdTAwMjZhcmdzKTtcXG5kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9ub3V2ZWF1X2RtZW0uYy04NzMtXFx0XFx0aWYgKHJldClcXG4tLVxcbmluY2x1ZGUvbGludXgvbWlncmF0ZS5oPTE2MD1zdHJ1Y3QgbWlncmF0ZV92bWEge1xcbi0tXFxuaW5jbHVkZS9saW51eC9taWdyYXRlLmgtMTY2LVxcdCAqIFRoZSBzcmMgYXJyYXkgbXVzdCBub3QgYmUgbW9kaWZpZWQgYnkgdGhlIGNhbGxlciBhZnRlclxcbmluY2x1ZGUvbGludXgvbWlncmF0ZS5oOjE2NzpcXHQgKiBtaWdyYXRlX3ZtYV9zZXR1cCgpLCBhbmQgbXVzdCBub3QgY2hhbmdlIHRoZSBkc3QgYXJyYXkgYWZ0ZXJcXG5pbmNsdWRlL2xpbnV4L21pZ3JhdGUuaC0xNjgtXFx0ICogbWlncmF0ZV92bWFfcGFnZXMoKSByZXR1cm5zLlxcbi0tXFxuaW5jbHVkZS9saW51eC9taWdyYXRlLmgtMTk0LVxcbmluY2x1ZGUvbGludXgvbWlncmF0ZS5oOjE5NTppbnQgbWlncmF0ZV92bWFfc2V0dXAoc3RydWN0IG1pZ3JhdGVfdm1hICphcmdzKTtcXG5pbmNsdWRlL2xpbnV4L21pZ3JhdGUuaC0xOTYtdm9pZCBtaWdyYXRlX3ZtYV9wYWdlcyhzdHJ1Y3QgbWlncmF0ZV92bWEgKm1pZ3JhdGUpO1xcbi0tXFxubGliL3Rlc3RfaG1tLmM9MTEyMD1zdGF0aWMgaW50IGRtaXJyb3JfbWlncmF0ZV90b19zeXN0ZW0oc3RydWN0IGRtaXJyb3IgKmRtaXJyb3IsXFxuLS1cXG5saWIvdGVzdF9obW0uYy0xMTY0LVxcbmxpYi90ZXN0X2htbS5jOjExNjU6XFx0XFx0cmV0ID0gbWlncmF0ZV92bWFfc2V0dXAoXFx1MDAyNmFyZ3MpO1xcbmxpYi90ZXN0X2htbS5jLTExNjYtXFx0XFx0aWYgKHJldClcXG4tLVxcbmxpYi90ZXN0X2htbS5jPTExODk9c3RhdGljIGludCBkbWlycm9yX21pZ3JhdGVfdG9fZGV2aWNlKHN0cnVjdCBkbWlycm9yICpkbWlycm9yLFxcbi0tXFxubGliL3Rlc3RfaG1tLmMtMTI0Mi1cXHRcXHRcXHRcXHRNSUdSQVRFX1ZNQV9TRUxFQ1RfQ09NUE9VTkQ7XFxubGliL3Rlc3RfaG1tLmM6MTI0MzpcXHRcXHRyZXQgPSBtaWdyYXRlX3ZtYV9zZXR1cChcXHUwMDI2YXJncyk7XFxubGliL3Rlc3RfaG1tLmMtMTI0NC1cXHRcXHRpZiAocmV0KVxcbi0tXFxubGliL3Rlc3RfaG1tLmM9MTY1Mz1zdGF0aWMgdm1fZmF1bHRfdCBkbWlycm9yX2Rldm1lbV9mYXVsdChzdHJ1Y3Qgdm1fZmF1bHQgKnZtZilcXG4tLVxcbmxpYi90ZXN0X2htbS5jLTE3MDUtXFx0LypcXG5saWIvdGVzdF9obW0uYzoxNzA2OlxcdCAqIEluIHByYWN0aWNlIG1pZ3JhdGVfdm1hX3NldHVwKCkgc2hvdWxkIG5ldmVyIGZhaWwgdW5sZXNzIHRoZVxcbmxpYi90ZXN0X2htbS5jLTE3MDctXFx0ICogdGVzdCBpcyB3cm9uZyBhcyBpdCBqdXN0IHRlc3RzIHNvbWUgc3RhdGljIFZNQSBwcm9wZXJ0aWVzLlxcbmxpYi90ZXN0X2htbS5jLTE3MDgtXFx0ICovXFxubGliL3Rlc3RfaG1tLmM6MTcwOTpcXHRpZiAobWlncmF0ZV92bWFfc2V0dXAoXFx1MDAyNmFyZ3MpKSB7XFxubGliL3Rlc3RfaG1tLmMtMTcxMC1cXHRcXHRyZXQgPSBWTV9GQVVMVF9TSUdCVVM7XFxuLS1cXG5tbS9taWdyYXRlX2RldmljZS5jPTY3MD1zdGF0aWMgdm9pZCBtaWdyYXRlX3ZtYV91bm1hcChzdHJ1Y3QgbWlncmF0ZV92bWEgKm1pZ3JhdGUpXFxuLS1cXG5tbS9taWdyYXRlX2RldmljZS5jLTY3Ni0vKipcXG5tbS9taWdyYXRlX2RldmljZS5jOjY3NzogKiBtaWdyYXRlX3ZtYV9zZXR1cCgpIC0gcHJlcGFyZSB0byBtaWdyYXRlIGEgcmFuZ2Ugb2YgbWVtb3J5XFxubW0vbWlncmF0ZV9kZXZpY2UuYy02NzgtICogQGFyZ3M6IGNvbnRhaW5zIHRoZSB2bWEsIHN0YXJ0LCBhbmQgcGZucyBhcnJheXMgZm9yIHRoZSBtaWdyYXRpb25cXG4tLVxcbm1tL21pZ3JhdGVfZGV2aWNlLmMtNzM5LSAqL1xcbm1tL21pZ3JhdGVfZGV2aWNlLmM6NzQwOmludCBtaWdyYXRlX3ZtYV9zZXR1cChzdHJ1Y3QgbWlncmF0ZV92bWEgKmFyZ3MpXFxubW0vbWlncmF0ZV9kZXZpY2UuYy03NDEte1xcbi0tXFxubW0vbWlncmF0ZV9kZXZpY2UuYy03NzktfVxcbm1tL21pZ3JhdGVfZGV2aWNlLmM6NzgwOkVYUE9SVF9TWU1CT0wobWlncmF0ZV92bWFfc2V0dXApO1xcbm1tL21pZ3JhdGVfZGV2aWNlLmMtNzgxLVxcbi0tXFxubW0vbWlncmF0ZV9kZXZpY2UuYz0xMzY2PXN0YXRpYyB1bnNpZ25lZCBsb25nIG1pZ3JhdGVfZGV2aWNlX3Bmbl9sb2NrKHVuc2lnbmVkIGxvbmcgcGZuKVxcbi0tXFxubW0vbWlncmF0ZV9kZXZpY2UuYy0xMzg3LSAqXFxubW0vbWlncmF0ZV9kZXZpY2UuYzoxMzg4OiAqIG1pZ3JhdGVfdm1hX3NldHVwKCkgaXMgc2ltaWxhciBpbiBjb25jZXB0IHRvIG1pZ3JhdGVfdm1hX3NldHVwKCkgZXhjZXB0IHRoYXRcXG5tbS9taWdyYXRlX2RldmljZS5jLTEzODktICogaW5zdGVhZCBvZiBsb29raW5nIHVwIHBhZ2VzIGJhc2VkIG9uIHZpcnR1YWwgYWRkcmVzcyBtYXBwaW5ncyBhIHJhbmdlIG9mXFxuLS1cXG5tbS9taWdyYXRlX2RldmljZS5jLTEzOTUtICpcXG5tbS9taWdyYXRlX2RldmljZS5jOjEzOTY6ICogTGlrZSBtaWdyYXRlX3ZtYV9zZXR1cCgpIHRoaXMgZnVuY3Rpb24gd2lsbCB0YWtlIGEgcmVmZXJlbmNlIGFuZCBsb2NrIGFueVxcbm1tL21pZ3JhdGVfZGV2aWNlLmMtMTM5Ny0gKiBtaWdyYXRpbmcgcGFnZXMgdGhhdCBhcmVuJ3QgZnJlZSBiZWZvcmUgdW5tYXBwaW5nIHRoZW0uIERyaXZlcnMgbWF5IHRoZW5cXG4tLVxcbm1tL21pZ3JhdGVfZGV2aWNlLmM9MTQ2Nj1pbnQgbWlncmF0ZV9kZXZpY2VfY29oZXJlbnRfZm9saW8oc3RydWN0IGZvbGlvICpmb2xpbylcXG4tLVxcbm1tL21pZ3JhdGVfZGV2aWNlLmMtMTQ3OC1cXHQgKiB0aGUgc291cmNlIGZvbGlvLiBTbyBjYWxsIG1pZ3JhdGVfdm1hX3VubWFwKCkgZGlyZWN0bHkgdG8gdW5tYXAgdGhlXFxubW0vbWlncmF0ZV9kZXZpY2UuYzoxNDc5OlxcdCAqIGZvbGlvIGFzIG1pZ3JhdGVfdm1hX3NldHVwKCkgd2lsbCBmYWlsIGlmIGFyZ3Mudm1hID09IE5VTEwuXFxubW0vbWlncmF0ZV9kZXZpY2UuYy0xNDgwLVxcdCAqL1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wNlQxNjoxNzo0OC45NzE4OTE2OThaIiwiU2VxIjoyMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzU1Nzc1ODE4NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCBzdW1tYXJpemVkIGZyb20gbXkgcGVyc3BlY3RpdmUgYXMgYW4gZXhwZXJ0IGluIG15IGZpZWxkOlxuXG4qKkFzc2Vzc2luZyB0aGUgRnV6emluZyBQb3RlbnRpYWwgb2YgYSBUZXN0IE1vZHVsZSoqXG5cblJpZ2h0LCBzbyB0aGlzIHRoaW5nIGlzIGJlaW5nIHVzZWQgd2l0aGluIGBsaWIvdGVzdF9obW0uY2AuIE9rYXksIHRoYXQncyBpbnRlcmVzdGluZy4gVGhlIGZhY3QgdGhhdCBpdCdzIGluIGEgYC5jYCBmaWxlIG5hbWVkIGB0ZXN0X2htbWAgc3VnZ2VzdHMgaXQgbWlnaHQgYmUgYSB0ZXN0aW5nIG1vZHVsZSBvZiBzb21lIGtpbmQuIE5vdywgYSB0ZXN0IG1vZHVsZS4uLiB0aGF0ICpjb3VsZCogYmUgYSBncmVhdCBjYW5kaWRhdGUgZm9yIGZ1enppbmchIEl0J3Mgd29ydGggYSBxdWljayBsb29rIGF0IGBsaWIvdGVzdF9obW0uY2AgdG8gY29uZmlybSB0aGF0IHN1c3BpY2lvbi4gVGhlIHBvdGVudGlhbCBwYXlvZmYgaXMgaGlnaDsgaWYgaXQgKmlzKiBhIHRlc3QsIGl0J3MgZGVzaWduZWQgdG8gZXhwbG9yZSB0aGUgYmVoYXZpb3Igb2YgdGhlIGBobW1gIGxpYnJhcnkgYW5kIHRoZXJlZm9yZSwgbWF5IGJlIGFuIGlkZWFsIHBsYWNlIHRvIGZpbmQgdnVsbmVyYWJpbGl0aWVzIHZpYSB1bmV4cGVjdGVkIGlucHV0cyBhbmQgY29uZmlndXJhdGlvbnMuIExldCdzIGRpZyBpbiBhbmQgc2VlIHdoYXQncyB3aGF0IVxuXG5cbiIsIklucHV0VG9rZW5zIjoxMjIyMywiT3V0cHV0VG9rZW5zIjoyNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQxLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA2VDE2OjE3OjUyLjUyOTY1MjYyNFoiLCJTZXEiOjIyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODE5MTMwNDYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIFRFU1RfSE1NXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImxpYi9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibGliL0tjb25maWcuZGVidWc9MzMxOD1jb25maWcgVEVTVF9NRU1JTklUXFxuLS1cXG5saWIvS2NvbmZpZy5kZWJ1Zy0zMzI1LVxcbmxpYi9LY29uZmlnLmRlYnVnOjMzMjY6Y29uZmlnIFRFU1RfSE1NXFxubGliL0tjb25maWcuZGVidWctMzMyNy1cXHR0cmlzdGF0ZSBcXFwiVGVzdCBITU0gKEhldGVyb2dlbmVvdXMgTWVtb3J5IE1hbmFnZW1lbnQpXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wNlQxNjoxNzo1Mi42MTE1NzM5N1oiLCJTZXEiOjIzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNjMzNzQ1NjQ1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIHByZXNlbnRlZCBhcyBhIGZpcnN0LXBlcnNvbiBleHBlcnQgc3VtbWFyeTpcblxuKipBbmFseXppbmcgQ29uZmlndXJhdGlvbiBEZXBlbmRlbmNpZXMqKlxuXG5BbHJpZ2h0LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIGBURVNUX0hNTWAgY29uZmlndXJhdGlvbi4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIHRyZWF0IHRoaXMgYXMgYSBjb25maWd1cmF0aW9uLCBwcm9iYWJseSBmb3IgYSBzcGVjaWZpYyBwcm9jZXNzLiBOb3csIHRoZSBrZXkgcXVlc3Rpb24gaXMsIGRvZXMgdGhpcyBgVEVTVF9ITU1gIHNldHVwIGhhdmUgYW55IGRlcGVuZGVuY2llcyBvbiB0aGUgYERFVklDRV9NSUdSQVRJT05gIGZ1bmN0aW9uYWxpdHk/IEkgbmVlZCB0byBxdWlja2x5IGRldGVybWluZSB0aGUgcmVsYXRpb25zaGlwIGJldHdlZW4gdGhlc2UgdHdvLCBhcyB0aGlzJ2xsIGFmZmVjdCBob3cgSSBtYW5hZ2UgdGhlbSBhbmQgYW55IHBvdGVudGlhbCBpc3N1ZXMgaWYgY2hhbmdlcyBhcmUgbWFkZSB0byBlaXRoZXIgb25lIG9mIHRoZW0uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEyNTcwLCJPdXRwdXRUb2tlbnMiOjI2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDZUMTY6MTc6NTYuMjQ1MzIzMTY1WiIsIlNlcSI6MjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3MzU2NDIzMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJURVNUX0hNTVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJsaWIvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImxpYi9LY29uZmlnLmRlYnVnPTMzMTg9Y29uZmlnIFRFU1RfTUVNSU5JVFxcbi0tXFxubGliL0tjb25maWcuZGVidWctMzMyNS1cXG5saWIvS2NvbmZpZy5kZWJ1ZzozMzI2OmNvbmZpZyBURVNUX0hNTVxcbmxpYi9LY29uZmlnLmRlYnVnLTMzMjctXFx0dHJpc3RhdGUgXFxcIlRlc3QgSE1NIChIZXRlcm9nZW5lb3VzIE1lbW9yeSBNYW5hZ2VtZW50KVxcXCJcXG4tLVxcbmxpYi9NYWtlZmlsZT0xMDI9b2JqLSQoQ09ORklHX1RFU1RfTE9DS1VQKSArPSB0ZXN0X2xvY2t1cC5vXFxubGliL01ha2VmaWxlOjEwMzpvYmotJChDT05GSUdfVEVTVF9ITU0pICs9IHRlc3RfaG1tLm9cXG5saWIvTWFrZWZpbGUtMTA0LW9iai0kKENPTkZJR19URVNUX0ZSRUVfUEFHRVMpICs9IHRlc3RfZnJlZV9wYWdlcy5vXFxuLS1cXG5saWIvdGVzdF9obW1fdWFwaS5oLTYtICovXFxubGliL3Rlc3RfaG1tX3VhcGkuaDo3OiNpZm5kZWYgX0xJQl9URVNUX0hNTV9VQVBJX0hcXG5saWIvdGVzdF9obW1fdWFwaS5oOjg6I2RlZmluZSBfTElCX1RFU1RfSE1NX1VBUElfSFxcbmxpYi90ZXN0X2htbV91YXBpLmgtOS1cXG4tLVxcbmxpYi90ZXN0X2htbV91YXBpLmg9NzQ9ZW51bSB7XFxuLS1cXG5saWIvdGVzdF9obW1fdWFwaS5oLTc5LVxcbmxpYi90ZXN0X2htbV91YXBpLmg6ODA6I2VuZGlmIC8qIF9MSUJfVEVTVF9ITU1fVUFQSV9IICovXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA2VDE2OjE3OjU2LjMxODg5MzI0NVoiLCJTZXEiOjI1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNTYzNTE4NTE0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgYSBzdW1tYXJ5IG9mIG15IHRob3VnaHQgcHJvY2VzcywgYXMgcmVxdWVzdGVkOlxuXG4qKkRpdmluZyBpbnRvIGBLY29uZmlnLmRlYnVnYCBmb3IgYFRFU1RfSE1NYCoqXG5cbk9rYXksIHNvIEkgbmVlZCB0byB1bmRlcnN0YW5kIHNvbWV0aGluZyBhYm91dCB0aGUgY29uZmlndXJhdGlvbiByZWxhdGVkIHRvIGBURVNUX0hNTWAuIExldCdzIHplcm8gaW4gb24gYGxpYi9LY29uZmlnLmRlYnVnYC4gVGhhdCdzIHdoZXJlIEkgZXhwZWN0IHRvIGZpbmQgdGhlIHNldHRpbmdzLCBkZXBlbmRlbmNpZXMsIGFuZCBhbnkgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZvciB0aGlzIGZlYXR1cmUuIEknbSBnb2luZyB0byBsb29rIHNwZWNpZmljYWxseSBhcm91bmQgdGhlIGBURVNUX0hNTWAgZGVmaW5pdGlvbiBpdHNlbGYuIEkgbmVlZCB0byBmaWd1cmUgb3V0OlxuXG4qICAgV2hhdCBvcHRpb25zIGV4aXN0P1xuKiAgIFdoYXQgb3RoZXIgY29uZmlndXJhdGlvbnMgZG9lcyBpdCBkZXBlbmQgb24/XG4qICAgQXJlIHRoZXJlIGFueSBpbnRlcmVzdGluZyBjb21tZW50cyBvciBleHBsYW5hdGlvbnMgdGhhdCB3aWxsIHByb3ZpZGUgY29udGV4dD9cblxuQmFzaWNhbGx5LCBJIHdhbnQgdG8gcXVpY2tseSBncmFzcCB0aGUgcmVsZXZhbnQgZGV0YWlscyBzbyBJIGNhbiBtb3ZlIGZvcndhcmQgd2l0aCBteSBvdGhlciB0YXNrcy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTMwNzcsIk91dHB1dFRva2VucyI6MzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxOSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0wNlQxNjoxNzo1OS44ODI0MTQ1NjlaIiwiU2VxIjoyNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTk0MDc5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImxpYi9LY29uZmlnLmRlYnVnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDMzMjAsXG4gIFwiTGluZUNvdW50XCI6IDIwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjMzMjA6XFx0XFx0aGVscFxcbjMzMjE6XFx0XFx0ICBUZXN0IGlmIHRoZSBrZXJuZWwgaXMgemVyby1pbml0aWFsaXppbmcgaGVhcCBhbmQgcGFnZSBhbGxvY2F0aW9ucy5cXG4zMzIyOlxcdFxcdCAgVGhpcyBjYW4gYmUgdXNlZnVsIHRvIHRlc3QgaW5pdF9vbl9hbGxvYyBhbmQgaW5pdF9vbl9mcmVlIGZlYXR1cmVzLlxcbjMzMjM6XFx0XFxuMzMyNDpcXHRcXHQgIElmIHVuc3VyZSwgc2F5IE4uXFxuMzMyNTpcXHRcXG4zMzI2OlxcdGNvbmZpZyBURVNUX0hNTVxcbjMzMjc6XFx0XFx0dHJpc3RhdGUgXFxcIlRlc3QgSE1NIChIZXRlcm9nZW5lb3VzIE1lbW9yeSBNYW5hZ2VtZW50KVxcXCJcXG4zMzI4OlxcdFxcdGRlcGVuZHMgb24gVFJBTlNQQVJFTlRfSFVHRVBBR0VcXG4zMzI5OlxcdFxcdGRlcGVuZHMgb24gREVWSUNFX1BSSVZBVEVcXG4zMzMwOlxcdFxcdHNlbGVjdCBITU1fTUlSUk9SXFxuMzMzMTpcXHRcXHRzZWxlY3QgTU1VX05PVElGSUVSXFxuMzMzMjpcXHRcXHRoZWxwXFxuMzMzMzpcXHRcXHQgIFRoaXMgaXMgYSBwc2V1ZG8gZGV2aWNlIGRyaXZlciBzb2xlbHkgZm9yIHRlc3RpbmcgSE1NLlxcbjMzMzQ6XFx0XFx0ICBTYXkgTSBoZXJlIGlmIHlvdSB3YW50IHRvIGJ1aWxkIHRoZSBITU0gdGVzdCBtb2R1bGUuXFxuMzMzNTpcXHRcXHQgIERvaW5nIHNvIHdpbGwgYWxsb3cgeW91IHRvIHJ1biB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0L3ZtL2htbS10ZXN0cy5cXG4zMzM2OlxcdFxcbjMzMzc6XFx0XFx0ICBJZiB1bnN1cmUsIHNheSBOLlxcbjMzMzg6XFx0XFxuMzMzOTpcXHRjb25maWcgVEVTVF9GUkVFX1BBR0VTXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA2VDE2OjE3OjU5Ljg4MjYxMDQ2OVoiLCJTZXEiOjI3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoyODE0ODQ2MDU2OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHN1bW1hcnksIHByZXNlbnRlZCBhcyBhIHN0cmVhbSBvZiB0aG91Z2h0OlxuXG4qKkNoZWNraW5nIHRoZSBQcml2YXRlIERldmljZSBTdGF0dXMqKlxuXG5SaWdodCwgdGhpcyBoaW5nZXMgb24gYERFVklDRV9QUklWQVRFYC4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgdGhlIHN0YXR1cyBvZiB0aGF0IHZhcmlhYmxlIGJlZm9yZSBJIGNhbiBwcm9jZWVkLiBObyBwb2ludCBnb2luZyBkb3duIGFueSByYWJiaXQgaG9sZXMgdW50aWwgSSB1bmRlcnN0YW5kIGlmIGBERVZJQ0VfUFJJVkFURWAgaXMgc2V0IG9yIG5vdC4gTGV0J3Mgc3RhcnQgYnkgdmVyaWZ5aW5nIHRoZSBjdXJyZW50IHN0YXRlIG9mIGBERVZJQ0VfUFJJVkFURWAuIEkgbmVlZCB0byBpc29sYXRlIHRoaXMgdmFsdWUgdG8gZGV0ZXJtaW5lIHRoZSBuZXh0IHN0ZXA7IGl0IHdpbGwgYmUgY3JpdGljYWwgaW4gZGVjaWRpbmcgdGhlIGV4ZWN1dGlvbiBwYXRoLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMzYwMCwiT3V0cHV0VG9rZW5zIjoyNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE4LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDZUMTY6MTg6MjguMDMxMDc1NDM2WiIsIlNlcSI6MjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3NjE0NzI3OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgREVWSUNFX1BSSVZBVEVcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL0tjb25maWc9MTI2ND1jb25maWcgR0VUX0ZSRUVfUkVHSU9OXFxuLS1cXG5tbS9LY29uZmlnLTEyNjYtXFxubW0vS2NvbmZpZzoxMjY3OmNvbmZpZyBERVZJQ0VfUFJJVkFURVxcbm1tL0tjb25maWctMTI2OC1cXHRib29sIFxcXCJVbmFkZHJlc3NhYmxlIGRldmljZSBtZW1vcnkgKEdQVSBtZW1vcnksIC4uLilcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA2VDE2OjE4OjI4LjEwNzIyOTQ1NVoiLCJTZXEiOjI5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozOTg1MDYzOTQwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGhvdWdodCBwcm9jZXNzLCBzdW1tYXJpemVkIGFzIGlmIEkgd2VyZSBjb25zaWRlcmluZyB0aGUgZ2l2ZW4gaW5zdHJ1Y3Rpb25zOlxuXG4qKkFuYWx5emluZyBtbS9LY29uZmlnIGFyb3VuZCBERVZJQ0VfUFJJVkFURSoqXG5cbk9rYXksIHNvIHRoZSBwcm9tcHQgd2FudHMgbWUgdG8gZm9jdXMgb24gYG1tL0tjb25maWdgLCBzcGVjaWZpY2FsbHkgYXJvdW5kIHRoZSBgREVWSUNFX1BSSVZBVEVgIGNvbmZpZ3VyYXRpb24gb3B0aW9uLiBSaWdodCwgc28gdGhpcyBpcyBhYm91dCBtZW1vcnkgbWFuYWdlbWVudCB3aXRoaW4gdGhlIGtlcm5lbCdzIGNvbmZpZ3VyYXRpb24gc3lzdGVtLiBJIG5lZWQgdG8gZmlndXJlIG91dCB3aGF0IHJvbGUgYERFVklDRV9QUklWQVRFYCBwbGF5cyBpbiB0aGlzIGNvbnRleHQuIEknbSBhc3N1bWluZyBpdCByZWxhdGVzIHRvIHdoZXRoZXIgY2VydGFpbiBtZW1vcnkgcmVnaW9ucyBvciBkZXZpY2VzIHNob3VsZCBiZSBjb25zaWRlcmVkIHByaXZhdGUgdG8gYSBzcGVjaWZpYyBkZXZpY2Ugb3IsIGNvbnZlcnNlbHksIHNoYXJlZCBhbmQgbWFuYWdlZCBhdCBhIG1vcmUgZ2xvYmFsIGxldmVsLiBUaGUgYEtjb25maWdgIGZpbGVzIGFyZSB3aGVyZSB0aGUgY29uZmlndXJhdGlvbiBvcHRpb25zIGFyZSBkZWZpbmVkLCBhbG9uZyB3aXRoIHRoZWlyIGRlcGVuZGVuY2llcywgZGVzY3JpcHRpb25zLCBhbmQgZGVmYXVsdHMsIHNvIEkgbmVlZCB0byBnbyByZWFkIHRoZSBjb250ZW50cyBvZiB0aGF0IGZpbGUuIEkgZXhwZWN0IHRvIHNlZSBkZWZpbml0aW9ucyBmb3IgYERFVklDRV9QUklWQVRFYCwgYW5kIGxpa2VseSBhIGRlc2NyaXB0aW9uIG9mIGl0cyBtZWFuaW5nLCBwZXJoYXBzIGNvbmRpdGlvbmFsIGNvbXBpbGF0aW9uIGJhc2VkIG9uIHRoaXMgb3B0aW9uIGFuZCByZWxhdGVkIG9wdGlvbnMuIEknbGwgYmUgbG9va2luZyBmb3IgdGhpbmdzIGxpa2U6XG5cbiogICBXaGF0IGRldmljZXMgb3IgbWVtb3J5IHJlZ2lvbnMgYXJlIGltcGFjdGVkIGJ5IHRoaXMgb3B0aW9uLlxuKiAgIFRoZSBpbXBsaWNhdGlvbnMgb2YgZW5hYmxpbmcgb3IgZGlzYWJsaW5nIHRoaXMgb3B0aW9uLlxuKiAgIEFueSBkZXBlbmRlbmNpZXMgb24gb3RoZXIgY29uZmlndXJhdGlvbiBzZXR0aW5ncy5cbiogICBIb3cgdGhlIGtlcm5lbCBtYW5hZ2VzIGFuZCB1dGlsaXplcyBtZW1vcnkgYmFzZWQgb24gdGhpcyBzZXR0aW5nLlxuXG5NeSBnb2FsIGlzIHRvIHVuZGVyc3RhbmQgaG93IGBERVZJQ0VfUFJJVkFURWAgYWZmZWN0cyB0aGUgbWVtb3J5IG1hbmFnZW1lbnQgc2NoZW1lIHdpdGhpbiB0aGUga2VybmVsIGFuZCBob3cgaXQgY2FuIGJlIGNvbnRyb2xsZWQgdGhyb3VnaCB0aGUgY29uZmlndXJhdGlvbiBwcm9jZXNzLiBVbHRpbWF0ZWx5LCBJJ2xsIHN5bnRoZXNpemUgd2hhdCBgbW0vS2NvbmZpZ2AgaXMgZXhwcmVzc2luZyBhcm91bmQgdGhpcyBvcHRpb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEzODM0LCJPdXRwdXRUb2tlbnMiOjMzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDZUMTY6MTg6MzIuMDkyMjk3Mjk1WiIsIlNlcSI6MzAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjExODgwMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJtbS9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEyNjAsXG4gIFwiTGluZUNvdW50XCI6IDIwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjEyNjA6XFx0Y29uZmlnIEhNTV9NSVJST1JcXG4xMjYxOlxcdFxcdGJvb2xcXG4xMjYyOlxcdFxcdGRlcGVuZHMgb24gTU1VXFxuMTI2MzpcXHRcXG4xMjY0OlxcdGNvbmZpZyBHRVRfRlJFRV9SRUdJT05cXG4xMjY1OlxcdFxcdGJvb2xcXG4xMjY2OlxcdFxcbjEyNjc6XFx0Y29uZmlnIERFVklDRV9QUklWQVRFXFxuMTI2ODpcXHRcXHRib29sIFxcXCJVbmFkZHJlc3NhYmxlIGRldmljZSBtZW1vcnkgKEdQVSBtZW1vcnksIC4uLilcXFwiXFxuMTI2OTpcXHRcXHRkZXBlbmRzIG9uIFpPTkVfREVWSUNFXFxuMTI3MDpcXHRcXHRzZWxlY3QgR0VUX0ZSRUVfUkVHSU9OXFxuMTI3MTpcXHRcXG4xMjcyOlxcdFxcdGhlbHBcXG4xMjczOlxcdFxcdCAgQWxsb3dzIGNyZWF0aW9uIG9mIHN0cnVjdCBwYWdlcyB0byByZXByZXNlbnQgdW5hZGRyZXNzYWJsZSBkZXZpY2VcXG4xMjc0OlxcdFxcdCAgbWVtb3J5OyBpLmUuLCBtZW1vcnkgdGhhdCBpcyBvbmx5IGFjY2Vzc2libGUgZnJvbSB0aGUgZGV2aWNlIChvclxcbjEyNzU6XFx0XFx0ICBncm91cCBvZiBkZXZpY2VzKS4gWW91IGxpa2VseSBhbHNvIHdhbnQgdG8gc2VsZWN0IEhNTV9NSVJST1IuXFxuMTI3NjpcXHRcXG4xMjc3OlxcdGNvbmZpZyBWTUFQX1BGTlxcbjEyNzg6XFx0XFx0Ym9vbFxcbjEyNzk6XFx0XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA2VDE2OjE4OjMyLjA5MjQxNzc5NVoiLCJTZXEiOjMxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo4NTg4MDE0MDY2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFuYWx5c2lzIG9mIEtlcm5lbCBDb25maWd1cmF0aW9uIERlcGVuZGVuY2llcyoqXG5cbk9rYXksIGxldCBtZSBicmVhayB0aGlzIGRvd24uIEl0IHNlZW1zIGxpa2UgYFRFU1RfSE1NYCBpcyBjb250aW5nZW50IG9uIGBERVZJQ0VfUFJJVkFURWAsIGFuZCBgREVWSUNFX1BSSVZBVEVgIGl0c2VsZiBpcyBkZXBlbmRlbnQgb24gYFpPTkVfREVWSUNFYC4gU28sIGEgc3RyYWlnaHRmb3J3YXJkIGRlcGVuZGVuY3kgY2hhaW4uIE5vdywgYERFVklDRV9NSUdSQVRJT05gIGlzIGRlZmluZWQgYXMgYSBib29sZWFuIGV4cHJlc3Npb246IGBNSUdSQVRJT05gIEFORCBgWk9ORV9ERVZJQ0VgLiBUaGlzIG1lYW5zIGlmIEkgYWN0aXZhdGUgYFRFU1RfSE1NYCwgSSdtIGltcGxpY2l0bHkgZW5hYmxpbmcgYERFVklDRV9QUklWQVRFYCwgd2hpY2ggZm9yY2VzIGBaT05FX0RFVklDRWAsIGFuZCBjb25zZXF1ZW50bHksIGBERVZJQ0VfTUlHUkFUSU9OYCBiZWNhdXNlIG9mIHRoZSBgTUlHUkFUSU9OYCBkZXBlbmRlbmN5LlxuXG5Ib2xkIG9uIGEgc2Vjb25kLCB0aGF0IGZlZWxzIGxpa2UgYSBzdGFuZGFyZCBzZXR1cC4gQW5kLCBJIHRoaW5rIEkgcmVtZW1iZXIgdGhhdCBgTUlHUkFUSU9OYCBpcyBvZnRlbiwgYnV0IG5vdCBhbHdheXMsIGVuYWJsZWQgYnkgZGVmYXVsdCB3aGVuIE5VTUEgb3IgQ09NUEFDVElPTiBhcmUgcHJlc2VudC4gSSBzaG91bGQgZG91YmxlLWNoZWNrIHRoYXQgaW4gYG1tL0tjb25maWdgIHRvIGNvbmZpcm0gbXkgdW5kZXJzdGFuZGluZyBvZiB0aGUgaW1wbGljYXRpb25zIGhlcmUuIEkgc2hvdWxkIGFsc28gY2hlY2sgd2hpY2ggY29uZmlndXJhdGlvbnMgZW5hYmxlIGNvbXBhY3Rpb24gb3IgbnVtYSBpbiB0aGF0IGxvY2F0aW9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNDQzNywiT3V0cHV0VG9rZW5zIjozMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjExOCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA2VDE2OjE4OjQwLjY4MDQzNDM5MVoiLCJTZXEiOjMyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNjI3NjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibW0vS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiA2OTAsXG4gIFwiTGluZUNvdW50XCI6IDIwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiA2OTA6XFx0XFx0aGVscFxcbiA2OTE6XFx0XFx0ICBTdXBwb3J0IHRoZSBtaWdyYXRpb24gb2YgcGFnZXMgdG8gb3RoZXIgTlVNQSBub2RlcywgYXZhaWxhYmxlIHRvXFxuIDY5MjpcXHRcXHQgIHVzZXIgc3BhY2UgdGhyb3VnaCBpbnRlcmZhY2VzIGxpa2UgbWlncmF0ZV9wYWdlcygpLCBtb3ZlX3BhZ2VzKCksXFxuIDY5MzpcXHRcXHQgIGFuZCBtYmluZCgpLiBTZWxlY3RpbmcgdGhpcyBvcHRpb24gYWxzbyBlbmFibGVzIHN1cHBvcnQgZm9yIHBhZ2VcXG4gNjk0OlxcdFxcdCAgZGVtb3Rpb24gZm9yIG1lbW9yeSB0aWVyaW5nLlxcbiA2OTU6XFx0XFxuIDY5NjpcXHRjb25maWcgTUlHUkFUSU9OXFxuIDY5NzpcXHRcXHRib29sXFxuIDY5ODpcXHRcXHRkZXBlbmRzIG9uIE1NVVxcbiA2OTk6XFx0XFxuIDcwMDpcXHRjb25maWcgREVWSUNFX01JR1JBVElPTlxcbiA3MDE6XFx0XFx0ZGVmX2Jvb2wgTUlHUkFUSU9OIFxcdTAwMjZcXHUwMDI2IFpPTkVfREVWSUNFXFxuIDcwMjpcXHRcXG4gNzAzOlxcdGNvbmZpZyBBUkNIX0VOQUJMRV9IVUdFUEFHRV9NSUdSQVRJT05cXG4gNzA0OlxcdFxcdGJvb2xcXG4gNzA1OlxcdFxcbiA3MDY6XFx0Y29uZmlnIEFSQ0hfU1VQUE9SVFNfUE1EX1NPRlRMRUFGXFxuIDcwNzpcXHRcXHRib29sXFxuIDcwODpcXHRcXG4gNzA5OlxcdGNvbmZpZyBIVUdFVExCX1BBR0VfU0laRV9WQVJJQUJMRVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wNlQxNjoxODo0MC42ODA1OTg3NjFaIiwiU2VxIjozMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzI3NTU4MTcyMiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBteSBvd246XG5cbioqQW5hbHl6aW5nIHRoZSBgTUlHUkFUSU9OYCBWYXJpYWJsZSoqXG5cblJpZ2h0LCBgTUlHUkFUSU9OYCBpcyBkZWZpbmVkIGFzIGEgQm9vbGVhbiwgYnV0IGhhbmcgb24uLi4gaXQgZG9lc24ndCBoYXZlIGEgc3BlY2lmaWMgcHJvbXB0IGFzc29jaWF0ZWQgd2l0aCBpdC4gVGhhdCdzIGEgYml0IG9kZC4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgd2h5IHRoaXMgdmFyaWFibGUgaXMgYmVpbmcgc2VsZWN0ZWQgb3IgdHJpZ2dlcmVkIGluIHRoZSBmaXJzdCBwbGFjZS4gTXkgaW1tZWRpYXRlIHF1ZXN0aW9uIGlzOiBXaGF0IGNvbmRpdGlvbnMgb3IgcHJvY2Vzc2VzIGFyZSBjYXVzaW5nIGBNSUdSQVRJT05gIHRvIGV2YWx1YXRlIHRvIHRydWU/IEkgbmVlZCB0byB0cmFjZSBiYWNrIHRocm91Z2ggdGhlIGNvZGUgYW5kIGxvZ2ljLiBJJ2xsIG5lZWQgdG8gZmlndXJlIG91dCB0aGUgZGVwZW5kZW5jaWVzIGFuZCBzZWFyY2ggZm9yIHdoZXJldmVyIGBNSUdSQVRJT05gIGlzIGJlaW5nIHVzZWQgdG8gYmUgYWJsZSB0byB1bmRlcnN0YW5kIHRoZSBzeXN0ZW0uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE1MDYzLCJPdXRwdXRUb2tlbnMiOjI0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzAsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0wNlQxNjoxODo0My45NTYxODM5NzNaIiwiU2VxIjozNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI0ODU4MTU2MTcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwic2VsZWN0IE1JR1JBVElPTlwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vS2NvbmZpZz01OTE9Y29uZmlnIE1FTU9SWV9IT1RSRU1PVkVcXG4tLVxcbm1tL0tjb25maWctNTk0LVxcdGRlcGVuZHMgb24gTUVNT1JZX0hPVFBMVUdcXG5tbS9LY29uZmlnOjU5NTpcXHRzZWxlY3QgTUlHUkFUSU9OXFxubW0vS2NvbmZpZy01OTYtXFxuLS1cXG5tbS9LY29uZmlnPTY1ND1jb25maWcgQ09NUEFDVElPTlxcbi0tXFxubW0vS2NvbmZpZy02NTYtXFx0ZGVmYXVsdCB5XFxubW0vS2NvbmZpZzo2NTc6XFx0c2VsZWN0IE1JR1JBVElPTlxcbm1tL0tjb25maWctNjU4LVxcdGRlcGVuZHMgb24gTU1VXFxuLS1cXG5tbS9LY29uZmlnPTY4NT1jb25maWcgTlVNQV9NSUdSQVRJT05cXG4tLVxcbm1tL0tjb25maWctNjg4LVxcdGRlcGVuZHMgb24gTlVNQSBcXHUwMDI2XFx1MDAyNiBNTVVcXG5tbS9LY29uZmlnOjY4OTpcXHRzZWxlY3QgTUlHUkFUSU9OXFxubW0vS2NvbmZpZy02OTAtXFx0aGVscFxcbi0tXFxubW0vS2NvbmZpZz0xMDY3PWNvbmZpZyBDTUFcXG4tLVxcbm1tL0tjb25maWctMTA2OS1cXHRkZXBlbmRzIG9uIE1NVVxcbm1tL0tjb25maWc6MTA3MDpcXHRzZWxlY3QgTUlHUkFUSU9OXFxubW0vS2NvbmZpZy0xMDcxLVxcdHNlbGVjdCBNRU1PUllfSVNPTEFUSU9OXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA2VDE2OjE4OjQ2LjQ0MjAwNzA0WiIsIlNlcSI6MzUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjU3Njg5NTQ4MjYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgTGluZSBvZiBSZWFzb25pbmcgZm9yIHRoaXMgQ29uZmlndXJhdGlvbioqXG5cbk9rYXksIHNvIHRoZSBgQ09NUEFDVElPTmAgb3B0aW9uIGhhcyBiZWVuIHNldCB0byBzZWxlY3QgYE1JR1JBVElPTmAsIHdoaWNoIGlzIHRoZSBkZWZhdWx0IGJlaGF2aW9yLiBUaGF0IG1lYW5zIGBNSUdSQVRJT05gIGlzIGFsbW9zdCBhbHdheXMgZW5hYmxlZC4gR29vZC4gTm93LCBsb29raW5nIGF0IHRoZSBvdGhlciByZXF1aXJlZCBjb21wb25lbnRzLCBJIGtub3cgd2UgbmVlZCBgWk9ORV9ERVZJQ0VgLCBgREVWSUNFX1BSSVZBVEVgLCBhbmQgYFRFU1RfSE1NYC5cblxuTGV0J3Mgc3RhcnQgd2l0aCBgVEVTVF9ITU1gLiBJcyB0aGF0IGVub3VnaD8gSSBzZWUgdGhhdCBgVEVTVF9ITU1gIGRlcGVuZHMgb24gYERFVklDRV9QUklWQVRFYCwgc28gSeKAmWxsIG5lZWQgdG8gZW5hYmxlIHRoYXQgZmlyc3QuIEFuZCwgc2luY2UgYERFVklDRV9QUklWQVRFYCBkZXBlbmRzIG9uIGBaT05FX0RFVklDRWAsIEkgaGF2ZSB0byBlbmFibGUgdGhhdCBhcyB3ZWxsLiBBbHNvLCBsb29raW5nIGNsb3NlciwgSSBzZWUgYFRFU1RfSE1NYCBkZXBlbmRzIG9uIGBUUkFOU1BBUkVOVF9IVUdFUEFHRWAsIHNvIHRoYXQgb25lIGdvZXMgaW4gdGhlIHNldCB0b28uXG5cbk5vdyBJ4oCZbSB3b25kZXJpbmcsIHdoYXQgY29kZSBoYXMgYmVlbiB0b3VjaGVkPyBJcyBpdCBhIGxvY2FsaXplZCBjaGFuZ2Ugb3IgYSBtb3JlIHdpZGVzcHJlYWQgbW9kaWZpY2F0aW9uPyBJIG5lZWQgdG8gY2hlY2sgaWYgYG1pZ3JhdGVfdm1hX2NvbGxlY3RfcG1kYCBpcyB0aGUgb25seSBmdW5jdGlvbiB0aGF0IHdhcyBjaGFuZ2VkLiBGcm9tIHRoZSBsb29rcyBvZiBpdCwgeWVzLiBJdCdzIHRoZSBvbmx5IG9uZSBpbiBgbW0vbWlncmF0ZV9kZXZpY2UuY2AuIFRoYXTigJlzIHJlYXNzdXJpbmcuXG5cbkZpbmFsbHksIGlzIGFueSBvZiB0aGlzIGZ1bmN0aW9uYWxpdHkgZXhwb3NlZCB0byB1c2Vyc3BhY2U/IExvb2tzIGxpa2UgdGhlIGBURVNUX0hNTWAgbW9kdWxlIGRvZXMgdGhpcywgcG90ZW50aWFsbHkgdGhyb3VnaCBhbiBpb2N0bCBvciBzb21ldGhpbmcgc2ltaWxhciB0aGF0IHRyaWdnZXJzIHRoZSBtaWdyYXRpb24uIEkgc2hvdWxkIHByb2JhYmx5IGRpZyBpbnRvIGBsaWIvdGVzdF9obW0uY2AgdG8gc2VlIGV4YWN0bHkgaG93IGl0J3MgdHJpZ2dlcmVkLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNTUyOSwiT3V0cHV0VG9rZW5zIjozMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI0NywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0wNlQxNjoxODo1Mi4yMTA5NjYzOTZaIiwiU2VxIjozNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEyNDExMTQ2OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJtaWdyYXRlX3ZtYV9zZXR1cFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJsaWIvdGVzdF9obW0uY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJsaWIvdGVzdF9obW0uYz0xMTIwPXN0YXRpYyBpbnQgZG1pcnJvcl9taWdyYXRlX3RvX3N5c3RlbShzdHJ1Y3QgZG1pcnJvciAqZG1pcnJvcixcXG4tLVxcbmxpYi90ZXN0X2htbS5jLTExNjQtXFxubGliL3Rlc3RfaG1tLmM6MTE2NTpcXHRcXHRyZXQgPSBtaWdyYXRlX3ZtYV9zZXR1cChcXHUwMDI2YXJncyk7XFxubGliL3Rlc3RfaG1tLmMtMTE2Ni1cXHRcXHRpZiAocmV0KVxcbi0tXFxubGliL3Rlc3RfaG1tLmM9MTE4OT1zdGF0aWMgaW50IGRtaXJyb3JfbWlncmF0ZV90b19kZXZpY2Uoc3RydWN0IGRtaXJyb3IgKmRtaXJyb3IsXFxuLS1cXG5saWIvdGVzdF9obW0uYy0xMjQyLVxcdFxcdFxcdFxcdE1JR1JBVEVfVk1BX1NFTEVDVF9DT01QT1VORDtcXG5saWIvdGVzdF9obW0uYzoxMjQzOlxcdFxcdHJldCA9IG1pZ3JhdGVfdm1hX3NldHVwKFxcdTAwMjZhcmdzKTtcXG5saWIvdGVzdF9obW0uYy0xMjQ0LVxcdFxcdGlmIChyZXQpXFxuLS1cXG5saWIvdGVzdF9obW0uYz0xNjUzPXN0YXRpYyB2bV9mYXVsdF90IGRtaXJyb3JfZGV2bWVtX2ZhdWx0KHN0cnVjdCB2bV9mYXVsdCAqdm1mKVxcbi0tXFxubGliL3Rlc3RfaG1tLmMtMTcwNS1cXHQvKlxcbmxpYi90ZXN0X2htbS5jOjE3MDY6XFx0ICogSW4gcHJhY3RpY2UgbWlncmF0ZV92bWFfc2V0dXAoKSBzaG91bGQgbmV2ZXIgZmFpbCB1bmxlc3MgdGhlXFxubGliL3Rlc3RfaG1tLmMtMTcwNy1cXHQgKiB0ZXN0IGlzIHdyb25nIGFzIGl0IGp1c3QgdGVzdHMgc29tZSBzdGF0aWMgVk1BIHByb3BlcnRpZXMuXFxubGliL3Rlc3RfaG1tLmMtMTcwOC1cXHQgKi9cXG5saWIvdGVzdF9obW0uYzoxNzA5OlxcdGlmIChtaWdyYXRlX3ZtYV9zZXR1cChcXHUwMDI2YXJncykpIHtcXG5saWIvdGVzdF9obW0uYy0xNzEwLVxcdFxcdHJldCA9IFZNX0ZBVUxUX1NJR0JVUztcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDZUMTY6MTg6NTIuMzM1MDgzMTA1WiIsIlNlcSI6MzcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQyMTUyMjE0ODYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIG15IG93biwgZ2l2ZW4gbXkgZXhwZXJ0aXNlOlxuXG4qKk15IEltbWVkaWF0ZSBBc3Nlc3NtZW50OiBpb2N0bCBJbnRlZ3JhdGlvbiBhbmQgTWlncmF0aW9uIEZ1bmN0aW9ucyoqXG5cblJpZ2h0LCBzbyBJJ20gc2VlaW5nIHRoYXQgYGRtaXJyb3JfbWlncmF0ZV90b19zeXN0ZW1gIGFuZCBgZG1pcnJvcl9taWdyYXRlX3RvX2RldmljZWAgYXJlIGJlaW5nIGludm9rZWQgdGhyb3VnaCBpb2N0bHMuIFRoYXQncyBpbW1lZGlhdGVseSBpbnRlcmVzdGluZywgYmVjYXVzZSBpdCBnaXZlcyBtZSBhIGNsZWFyIGlkZWEgb2YgdGhlIGludGVuZGVkIHVzZSBjYXNlLCBhbmQgdGhlIGxldmVsIG9mIGludGVyYWN0aW9uIHRoZSBjYWxsZXIgaGFzIHdpdGggdGhlIGRldmljZS4gSS9PIGNvbnRyb2wgY2FsbHMgYXJlIHR5cGljYWxseSBob3cgd2UgZXhwb3NlIGxvdy1sZXZlbCBkZXZpY2UgY29udHJvbCBhbmQgY29uZmlndXJhdGlvbiB0byB1c2VyIHNwYWNlLCBvciBvdGhlciBzeXN0ZW0gY29tcG9uZW50cy5cblxuVGhpcyBzdHJvbmdseSBzdWdnZXN0cyB0aGF0IHRoZXNlIG1pZ3JhdGlvbiBmdW5jdGlvbnMgYXJlIGludGltYXRlbHkgdGllZCB0byB0aGUgY29yZSBkZXZpY2UgZHJpdmVyIG9yIGl0cyBhc3NvY2lhdGVkIGludGVyZmFjZS4gSXQgaXMgbGlrZWx5IGEgcHJpdmlsZWdlZCBvcGVyYXRpb24sIHJlcXVpcmluZyBhIGNhcmVmdWxseSBjcmFmdGVkIGlvY3RsIHJlcXVlc3QuIFRoZSBmYWN0IHRoYXQgdGhlIGZ1bmN0aW9ucyBhcmUgbmFtZWQgXCJtaWdyYXRlXCIgaXMgYWxzbyBzaWduaWZpY2FudC4gSSBhbSBleHBlY3Rpbmcgc29tZSBzb3J0IG9mIGRhdGEgbW92ZW1lbnQgb3IgbWFuYWdlbWVudCBtZWNoYW5pc20uIFBlcmhhcHMgdGhlc2UgZnVuY3Rpb25zIG9yY2hlc3RyYXRlIHRoZSBtb3ZlbWVudCBvZiBkYXRhIGJsb2NrcyBiZXR3ZWVuIHN5c3RlbSBtZW1vcnkgYW5kIHRoZSBkZXZpY2UncyBvd24gc3RvcmFnZSwgb3IgdmljZS12ZXJzYSwgbGlrZWx5IGZvciBzb21lIG9wdGltaXphdGlvbiBwdXJwb3NlIChlLmcuLCBkYXRhIGNhY2hpbmcsIGxvYWQgYmFsYW5jaW5nLCBvciBhIG1pZ3JhdGlvbiB0b3dhcmQgb3IgYXdheSBmcm9tIGEgZGVkaWNhdGVkIG1lbW9yeSByZWdpb24pLiBUaGUgbmFtaW5nIGNvbnZlbnRpb25zIG1ha2UgbWUgYW50aWNpcGF0ZSBzb21lIHNvcnQgb2YgbWlycm9yaW5nIG9wZXJhdGlvbnMuXG5cbk15IG5leHQgc3RlcCBpcyB0byBleGFtaW5lIHRoZSBkcml2ZXIgY29kZSB0aGF0IGNhbGxzIHRoZXNlIGlvY3RscyB0byB1bmRlcnN0YW5kIHRoZSBsYXJnZXIgY29udGV4dC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTY1MjMsIk91dHB1dFRva2VucyI6MzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyOSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0wNlQxNjoxODo1Ni41NTAzMDc0NjFaIiwiU2VxIjozOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjc2MTI4NzQ4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImRtaXJyb3JfbWlncmF0ZV90b19zeXN0ZW1cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibGliL3Rlc3RfaG1tLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibGliL3Rlc3RfaG1tLmM9MTEwNz1kbWlycm9yX3N1Y2Nlc3NmdWxfbWlncmF0ZWRfcGFnZXMoc3RydWN0IG1pZ3JhdGVfdm1hICptaWdyYXRlKVxcbi0tXFxubGliL3Rlc3RfaG1tLmMtMTExOS1cXG5saWIvdGVzdF9obW0uYzoxMTIwOnN0YXRpYyBpbnQgZG1pcnJvcl9taWdyYXRlX3RvX3N5c3RlbShzdHJ1Y3QgZG1pcnJvciAqZG1pcnJvcixcXG5saWIvdGVzdF9obW0uYy0xMTIxLVxcdFxcdFxcdFxcdCAgICAgc3RydWN0IGhtbV9kbWlycm9yX2NtZCAqY21kKVxcbi0tXFxubGliL3Rlc3RfaG1tLmM9MTUxMz1zdGF0aWMgbG9uZyBkbWlycm9yX2ZvcHNfdW5sb2NrZWRfaW9jdGwoc3RydWN0IGZpbGUgKmZpbHAsXFxuLS1cXG5saWIvdGVzdF9obW0uYy0xNTUwLVxcdGNhc2UgSE1NX0RNSVJST1JfTUlHUkFURV9UT19TWVM6XFxubGliL3Rlc3RfaG1tLmM6MTU1MTpcXHRcXHRyZXQgPSBkbWlycm9yX21pZ3JhdGVfdG9fc3lzdGVtKGRtaXJyb3IsIFxcdTAwMjZjbWQpO1xcbmxpYi90ZXN0X2htbS5jLTE1NTItXFx0XFx0YnJlYWs7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA2VDE2OjE4OjU2LjYyNjQ0MTIzOVoiLCJTZXEiOjM5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo2OTQ5OTYwODIxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFuYWx5c2lzIG9mIHRoZSBgSE1NX0RNSVJST1JfTUlHUkFURWAgUGF0aCoqXG5cbk9rYXksIHNvIHRoZSBgSE1NX0RNSVJST1JfTUlHUkFURV9UT19TWVNgIGFuZCBgSE1NX0RNSVJST1JfTUlHUkFURV9UT19ERVZgIGlvY3RscyDigJMgdGhvc2UgYXJlIGRlZmluaXRlbHkgdGhlIGVudHJ5IHBvaW50cywgd2hpY2ggbWVhbnMgdXNlcnNwYWNlIGNhbiB0cmlnZ2VyIHRoaXMgdGhyb3VnaCBgVEVTVF9ITU1gLiBBbmQsIEkga25vdyBEUk0gZHJpdmVycyBsaWtlIGBub3V2ZWF1YCBhbmQgYGFtZGtmZGAgYXJlIGFsc28gbGV2ZXJhZ2luZyB0aGlzLCB3aGljaCBmdXJ0aGVyIHZhbGlkYXRlcyBpdHMgaW1wb3J0YW5jZS4gRW5hYmxpbmcgYFRFU1RfSE1NYCBzZWVtcyBsaWtlIGEgc29saWQsIGZvY3VzZWQgYXBwcm9hY2ggZm9yIG91ciBwdXJwb3Nlcy5cblxuTm93LCBJIG5lZWQgdG8gcGlucG9pbnQgdGhlIGNyaXRpY2FsIGZ1bmN0aW9uLiBMZXQncyBzZWUuLi4geWVzLCBgbWlncmF0ZV92bWFfY29sbGVjdF9wbWRgIGlzIHRoZSBzcGVjaWZpYyBmdW5jdGlvbiB3aGVyZSB0aGUgY2hhbmdlcyByZXNpZGUuIEdvb2QuIElzIHRoaXMgYSBob3QgcGF0aCwgdGhvdWdoPyBObywgaXQgc2VlbXMgdG8gYmUgcGFydCBvZiBkZXZpY2UgbWVtb3J5IG1pZ3JhdGlvbiwgd2hpY2ggaXNuJ3QgdGhlIGdlbmVyaWMsIGZyZXF1ZW50bHktY2FsbGVkIGNvZGUgcGF0aCBsaWtlIGBzY2hlZHVsZSgpYCBvciBga21hbGxvYygpYC4gVGhhdCdzIGFjdHVhbGx5IGFkdmFudGFnZW91cy4gVGhpcyBtYWtlcyBpdCBhIGdvb2QgY2FuZGlkYXRlIGZvciBmb2N1c2VkIGFuYWx5c2lzLlxuXG5BbHJpZ2h0LCBsZXQncyBuYWlsIGRvd24gdGhlIGNvbmZpZ3VyYXRpb24gcmVxdWlyZW1lbnRzLiBXZSBuZWVkIGBURVNUX0hNTWAsIG9idmlvdXNseS4gV2UgYWxzbyBuZWVkIGBERVZJQ0VfUFJJVkFURWAsIGBaT05FX0RFVklDRWAsIGFuZCBgVFJBTlNQQVJFTlRfSFVHRVBBR0VgLiBBaCwgYnV0IGBUUkFOU1BBUkVOVF9IVUdFUEFHRWAgaXMgb2Z0ZW4gZW5hYmxlZCBieSBkZWZhdWx0IGluIHN5emJvdCBjb25maWd1cmF0aW9ucywgc28gaXQgc2hvdWxkIGJlIGxlc3Mgb2YgYSBjb25jZXJuLiBUaGUgbWFpbiBmb2N1cyBtdXN0IGJlIGBURVNUX0hNTWAsIGJ1dCB3aWxsIHRoYXQgYXV0by1lbmFibGUgdGhlIG90aGVycz8gTm8sIGxvb2tpbmcgaW50byBpdCwgYFRFU1RfSE1NYCAqZGVwZW5kcyogb24gYERFVklDRV9QUklWQVRFYCwgc28gd2UgbmVlZCB0byBlbnN1cmUgdGhhdCBpcyBwcmVzZW50LiBBbmQgYERFVklDRV9QUklWQVRFYCAqZGVwZW5kcyogb24gYFpPTkVfREVWSUNFYCwgc28gdGhhdCBhbHNvIG11c3QgYmUgcHJlc2VudC4gSSBzaG91bGQgY29uZmlybSB0aGUgZGVwZW5kYW5jaWVzIG9mIGBaT05FX0RFVklDRWAgYXMgd2VsbC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTcxMDEsIk91dHB1dFRva2VucyI6MjYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozNTksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDZUMTY6MTk6MDMuNTc2NDA1MzVaIiwiU2VxIjo0MCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjY4NTk3MTIxLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBaT05FX0RFVklDRVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vS2NvbmZpZz0xMjMxPWNvbmZpZyBaT05FX0RNQTMyXFxuLS1cXG5tbS9LY29uZmlnLTEyMzUtXFxubW0vS2NvbmZpZzoxMjM2OmNvbmZpZyBaT05FX0RFVklDRVxcbm1tL0tjb25maWctMTIzNy1cXHRib29sIFxcXCJEZXZpY2UgbWVtb3J5IChwbWVtLCBITU0sIGV0Yy4uLikgaG90cGx1ZyBzdXBwb3J0XFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wNlQxNjoxOTowMy42NDUwMTE1NTFaIiwiU2VxIjo0MSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDI2NzMzNjcwNCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRha2Ugb24gdGhlIGBtbS9LY29uZmlnYCBmaWxlLCBzcGVjaWZpY2FsbHkgYXJvdW5kIGBaT05FX0RFVklDRWA6XG5cbioqRGl2aW5nIGludG8gYG1tL0tjb25maWdgIGFuZCBgWk9ORV9ERVZJQ0VgKipcblxuQWxyaWdodCwgbGV0J3MgZ2V0IGludG8gdGhlIG5pdHR5LWdyaXR0eSBvZiBtZW1vcnkgbWFuYWdlbWVudCBjb25maWd1cmF0aW9uLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgYFpPTkVfREVWSUNFYCBpcyBkZWZpbmVkIHdpdGhpbiB0aGUga2VybmVsJ3MgS2NvbmZpZyBzeXN0ZW0uIE15IGltbWVkaWF0ZSBnb2FsIGlzIHRvIGZpZ3VyZSBvdXQgdGhlIGRlcGVuZGVuY2llcywgY29uc3RyYWludHMsIGFuZCBpbXBsaWNhdGlvbnMgb2YgZW5hYmxpbmcgb3IgZGlzYWJsaW5nIHRoaXMgem9uZS4gSSdtIHRoaW5raW5nLCBpcyB0aGlzIGEgc2ltcGxlIGJvb2xlYW4sIG9yIGRvZXMgaXQgb2ZmZXIgY29uZmlndXJhdGlvbiBvcHRpb25zPyBXaGF0IG90aGVyIGZlYXR1cmVzIG9yIGRyaXZlcnMgcmVseSBvbiBpdD8gQXJlIHRoZXJlIGFueSBwZXJmb3JtYW5jZSBjb25zaWRlcmF0aW9ucyB0aWVkIHRvIGl0P1xuXG5JJ20gZXhwZWN0aW5nIHRvIHNlZSBkZXBlbmRlbmNpZXMgb24gc3BlY2lmaWMgaGFyZHdhcmUgYXJjaGl0ZWN0dXJlcyBvciBmZWF0dXJlcyByZWxhdGVkIHRvIHBlcnNpc3RlbnQgbWVtb3J5LCBOVkRJTU1zLCBvciBwb3NzaWJseSBldmVuIGNlcnRhaW4gYmxvY2sgZGV2aWNlcy4gVGhlIGBtbS9LY29uZmlnYCBmaWxlIG9mdGVuIHByb3ZpZGVzIGNsdWVzIGFib3V0IHRoZSB1bmRlcmx5aW5nIGRlc2lnbiBkZWNpc2lvbnMg4oCTIHdoeSB3YXMgYFpPTkVfREVWSUNFYCBpbnRyb2R1Y2VkIGluIHRoZSBmaXJzdCBwbGFjZT8gV2hhdCBwcm9ibGVtIGRvZXMgaXQgc29sdmUsIG9yIHdoYXQgZnVuY3Rpb25hbGl0eSBkb2VzIGl0IGVuYWJsZT8gSSdsbCBiZSBsb29raW5nIGZvciByZWxhdGlvbnNoaXBzIHdpdGggb3RoZXIgem9uZXMgbGlrZSBgWk9ORV9ETUFgIG9yIGBaT05FX0hJR0hNRU1gLCBhbmQgd2hldGhlciBgWk9ORV9ERVZJQ0VgIG1pZ2h0IGltcGx5IGFueSBtb2RpZmljYXRpb25zIHRvIHRoZSBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IGFsZ29yaXRobXMgKGJ1ZGR5IGFsbG9jYXRvciwgcGFnZSBhbGxvY2F0aW9uLCBldGMuKS5cblxuSSdsbCBiZSBwYXlpbmcgY2xvc2UgYXR0ZW50aW9uIHRvIGFueSBjb25kaXRpb25hbCBzdGF0ZW1lbnRzIG9yIGBzZWxlY3RgIGRpcmVjdGl2ZXMuIFRob3NlIGFyZSBnb2luZyB0byB0ZWxsIG1lIHdoYXQgZWxzZSAqbXVzdCogYmUgZW5hYmxlZCBvciAqY2FuKiBiZSBkaXNhYmxlZCBpZiBgWk9ORV9ERVZJQ0VgIGlzIGNob3Nlbi4gSSdsbCBuZWVkIHRvIHRyYWNlIHRoZSBpbXBsaWNhdGlvbnMgb2YgZW5hYmxpbmcgdGhpcy4gVGhpcyBpcyB0aGUgc3RhcnRpbmcgcG9pbnQgZm9yIHVuZGVyc3RhbmRpbmcgaG93IGRldmljZSBtZW1vcnkgaXMgaW5jb3Jwb3JhdGVkIGludG8gdGhlIG92ZXJhbGwgbWVtb3J5IG1hcCBhbmQgaG93IHRoZSBrZXJuZWwgaGFuZGxlcyBpdC4gR290dGEgZW5zdXJlIEkgaGF2ZSBhIGNvbXBsZXRlIHVuZGVyc3RhbmRpbmcgb2YgdGhlIGtlcm5lbCdzIG1lbW9yeSBhcmNoaXRlY3R1cmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE3OTY1LCJPdXRwdXRUb2tlbnMiOjMzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDZUMTY6MTk6MDcuOTEyMzUxNTY1WiIsIlNlcSI6NDIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjExMTE5OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJtbS9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEyMzAsXG4gIFwiTGluZUNvdW50XCI6IDIwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjEyMzA6XFx0XFxuMTIzMTpcXHRjb25maWcgWk9ORV9ETUEzMlxcbjEyMzI6XFx0XFx0Ym9vbCBcXFwiU3VwcG9ydCBETUEzMiB6b25lXFxcIiBpZiBBUkNIX0hBU19aT05FX0RNQV9TRVRcXG4xMjMzOlxcdFxcdGRlcGVuZHMgb24gIVg4Nl8zMlxcbjEyMzQ6XFx0XFx0ZGVmYXVsdCB5IGlmIEFSTTY0XFxuMTIzNTpcXHRcXG4xMjM2OlxcdGNvbmZpZyBaT05FX0RFVklDRVxcbjEyMzc6XFx0XFx0Ym9vbCBcXFwiRGV2aWNlIG1lbW9yeSAocG1lbSwgSE1NLCBldGMuLi4pIGhvdHBsdWcgc3VwcG9ydFxcXCJcXG4xMjM4OlxcdFxcdGRlcGVuZHMgb24gTUVNT1JZX0hPVFBMVUdcXG4xMjM5OlxcdFxcdGRlcGVuZHMgb24gTUVNT1JZX0hPVFJFTU9WRVxcbjEyNDA6XFx0XFx0ZGVwZW5kcyBvbiBTUEFSU0VNRU1fVk1FTU1BUFxcbjEyNDE6XFx0XFx0c2VsZWN0IFhBUlJBWV9NVUxUSVxcbjEyNDI6XFx0XFxuMTI0MzpcXHRcXHRoZWxwXFxuMTI0NDpcXHRcXHQgIERldmljZSBtZW1vcnkgaG90cGx1ZyBzdXBwb3J0IGFsbG93cyBmb3IgZXN0YWJsaXNoaW5nIHBtZW0sXFxuMTI0NTpcXHRcXHQgIG9yIG90aGVyIGRldmljZSBkcml2ZXIgZGlzY292ZXJlZCBtZW1vcnkgcmVnaW9ucywgaW4gdGhlXFxuMTI0NjpcXHRcXHQgIG1lbW1hcC4gVGhpcyBhbGxvd3MgcGZuX3RvX3BhZ2UoKSBsb29rdXBzIG9mIG90aGVyd2lzZVxcbjEyNDc6XFx0XFx0ICBcXFwiZGV2aWNlLXBoeXNpY2FsXFxcIiBhZGRyZXNzZXMgd2hpY2ggaXMgbmVlZGVkIGZvciBEQVgsIFBDSV9QMlBETUEsIGFuZFxcbjEyNDg6XFx0XFx0ICBERVZJQ0VfUFJJVkFURSBmZWF0dXJlcyBhbW9uZyBvdGhlcnMuXFxuMTI0OTpcXHRcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDZUMTY6MTk6MDcuOTEyNDY0MzA1WiIsIlNlcSI6NDMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjEzNDk1OTU4NDU3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKktlcm5lbCBDb25maWd1cmF0aW9uIGZvciBEZXZpY2UgTWVtb3J5IE1pZ3JhdGlvbiBUZXN0aW5nKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBHaXZlbiBteSB1bmRlcnN0YW5kaW5nIG9mIHRoZSBrZXJuZWwgbWVtb3J5IG1hbmFnZW1lbnQgbGFuZHNjYXBlLCBhbmQgdGhlIGNvbnRleHQgb2YgZGV2aWNlIG1lbW9yeSBtaWdyYXRpb24sIEkgbmVlZCB0byBpZGVudGlmeSB0aGUga2V5IGNvbmZpZ3VyYXRpb24gb3B0aW9ucyByZXF1aXJlZCB0byBmdWxseSB0ZXN0IHRoaXMgcGF0Y2guIEknbSBmb2N1c2luZyBvbiB0aGUgaW50ZXJhY3Rpb24gd2l0aCBkZXZpY2UgbWVtb3J5LCBob3RwbHVnLCBhbmQgbWlncmF0aW9uLlxuXG5GaXJzdCwgSSBoYXZlIHRvIGNvbnNpZGVyIHRoZSBjb3JlIHByZS1yZXF1aXNpdGVzOiBgTUVNT1JZX0hPVFBMVUdgLCBgTUVNT1JZX0hPVFJFTU9WRWAsIGFuZCBgU1BBUlNFTUVNX1ZNRU1NQVBgLiBUaGVzZSBhcmUgcHJldHR5IHN0YW5kYXJkLCBhbmQgbGlrZWx5IGVuYWJsZWQgaW4gdGhlIHRlc3QgZW52aXJvbm1lbnRzIEknbSB3b3JraW5nIHdpdGgsIHNvIEkgd29uJ3QgbGlzdCB0aG9zZSBkaXJlY3RseS5cblxuTm93LCBsZXQncyBnZXQgdG8gdGhlIHNwZWNpZmljcy4gTG9va2luZyBhdCB0aGUgZGVwZW5kZW5jaWVzLCBJIHNob3VsZCBsaXN0IGBURVNUX0hNTWAsIGBERVZJQ0VfUFJJVkFURWAsIGFuZCBgWk9ORV9ERVZJQ0VgLiBMZXQncyBjb25maXJtIHRoYXQgYFRFU1RfSE1NYCBpcyBhIHRyaXN0YXRlLCB0byBhdm9pZCBjb25mdXNpb24uIFllcCwgY29uZmlybWVkLCBpdCdzIGEgdHJpc3RhdGUgKFwiVGVzdCBITU0gKEhldGVyb2dlbmVvdXMgTWVtb3J5IE1hbmFnZW1lbnQpXCIpLiBTbywgYFRFU1RfSE1NPXlgIG9yIGBURVNUX0hNTT1tYCB3b3VsZCB3b3JrLiBJdOKAmXMgc2ltcGxlc3QgdG8ganVzdCBsaXN0IGBURVNUX0hNTWAuXG5cbk5leHQsIEkgbmVlZCB0byBjaGVjayBgREVWSUNFX01JR1JBVElPTmAuIEl0J3MgYSBgZGVmX2Jvb2xgIHRoYXQgZGVwZW5kcyBvbiBgTUlHUkFUSU9OYCBhbmQgYFpPTkVfREVWSUNFYC4gSSBkb24ndCBzdHJpY3RseSAqbmVlZCogdG8gbGlzdCBpdCBiZWNhdXNlIG9mIHRoZSBkZXBlbmRlbmNpZXMsIGJ1dCBpdCBtaWdodCBiZSB3b3J0aCBpbmNsdWRpbmcgZm9yIGNsYXJpdHkuIEknbGwgYWRkIGl0IHRvIHRoZSBsaXN0LCBqdXN0IHRvIGJlIHRob3JvdWdoLCBidXQgbm90ZSB0aGUgZGVwZW5kZW5jeS5cblxuT2theSwgd2FpdC4uLiBUaGlua2luZyBhYm91dCBpdCwgYFRFU1RfSE1NYCBkZWZhdWx0cyB0byBhIG1vZHVsZS4gR2l2ZW4gdGhlIGluc3RydWN0aW9ucywgd2hpY2ggc2F5IFwiTGlzdCBvZiBrZXJuZWwgY29uZmlnIGZsYWdzIHRoYXQgbXVzdCBiZSBleHBsaWNpdGx5IGVuYWJsZWQgdG8gY29tcGlsZSBhbmQgdGVzdCB0aGUgbW9kaWZpZWQgY29kZSxcIiBib3RoIGBURVNUX0hNTT15YCBhbmQgYFRFU1RfSE1NPW1gIGFyZSBleHBsaWNpdGx5IGVuYWJsZWQgYnkgZGVmaW5pdGlvbi4gU28sIG15IGluaXRpYWwgbGlzdCBpcyBnb29kOlxuXG4tICAgYFRFU1RfSE1NYFxuLSAgIGBERVZJQ0VfUFJJVkFURWBcbi0gICBgWk9ORV9ERVZJQ0VgXG5cbk5vdywgbGV0J3MgcmV2aWV3IHRoZSBwYXRjaCBpdHNlbGYuIEkgc2VlIHRoZSBjb2RlIGNoYW5nZXMgd2hpY2ggaW52b2x2ZSBjaGVja3MgZm9yIGBwdGVfcHJlc2VudGAgYmVmb3JlIGNhbGxpbmcgYHB0ZV9wZm5gIG9yIGBwdGVfZGlydHlgLiBUaGlzIGlzIGEgY2xlYXIgc2FmZXR5IGZpeCwgcHJldmVudGluZyBwb3RlbnRpYWwgbnVsbCBwb2ludGVyIGRlcmVmZXJlbmNlcyBvciBvdGhlciB1bmRlZmluZWQgYmVoYXZpb3Igd2hlbiBvcGVyYXRpbmcgb24gUFRFcy4gVGhpcyBpcyByb2J1c3QuXG5cblRoZSBwYXRjaCdzIGFyZWEgb2YgaW1wYWN0IGlzIGBtaWdyYXRlX3ZtYV9jb2xsZWN0X3BtZGAuIFRoaXMgbWVhbnMgdGhlIGZpeCBpcyBkZWZpbml0ZWx5IHJlbGV2YW50IHRvIGRldmljZSBtZW1vcnkgbWlncmF0aW9uLCBwb3RlbnRpYWxseSB0cmlnZ2VyZWQgYnkgdGhlIGBURVNUX0hNTWAgbW9kdWxlLiBUaGUgcGF0Y2ggZGlyZWN0bHkgYWRkcmVzc2VzIGEgYnVnLlxuXG5Pa2F5LCBJJ20gc2F0aXNmaWVkLiBMZXQncyBjYWxsIGBzZXQtcmVzdWx0c2AuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE4Njg1LCJPdXRwdXRUb2tlbnMiOjEyNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjU0NiwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA2VDE2OjE5OjIxLjQwODQyNjY2MloiLCJTZXEiOjQ0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjgzOTExOTU1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJURVNUX0hNTVwiLFxuICAgIFwiREVWSUNFX1BSSVZBVEVcIixcbiAgICBcIlpPTkVfREVWSUNFXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwibWlncmF0ZV92bWFfY29sbGVjdF9wbWRcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRzIG1pc3NpbmcgcHRlX3ByZXNlbnQoKSBjaGVja3MgaW4gbWlncmF0ZV92bWFfY29sbGVjdF9wbWQoKSBiZWZvcmUgY2FsbGluZyBwdGVfcGZuKCkgYW5kIHB0ZV9kaXJ0eSgpLiBUaGlzIGlzIGZ1bmN0aW9uYWwgY29yZSBrZXJuZWwvbW0gY29kZSByZWFjaGFibGUgdmlhIGRldmljZSBtZW1vcnkgbWlncmF0aW9uIHBhdGhzLCB3aGljaCBjYW4gYmUgdHJpZ2dlcmVkIGZyb20gdXNlcnNwYWNlIHVzaW5nIHRoZSBURVNUX0hNTSBtb2R1bGUuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiVEVTVF9ITU1cIixcbiAgICBcIkRFVklDRV9QUklWQVRFXCIsXG4gICAgXCJaT05FX0RFVklDRVwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcIm1pZ3JhdGVfdm1hX2NvbGxlY3RfcG1kXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcyBtaXNzaW5nIHB0ZV9wcmVzZW50KCkgY2hlY2tzIGluIG1pZ3JhdGVfdm1hX2NvbGxlY3RfcG1kKCkgYmVmb3JlIGNhbGxpbmcgcHRlX3BmbigpIGFuZCBwdGVfZGlydHkoKS4gVGhpcyBpcyBmdW5jdGlvbmFsIGNvcmUga2VybmVsL21tIGNvZGUgcmVhY2hhYmxlIHZpYSBkZXZpY2UgbWVtb3J5IG1pZ3JhdGlvbiBwYXRocywgd2hpY2ggY2FuIGJlIHRyaWdnZXJlZCBmcm9tIHVzZXJzcGFjZSB1c2luZyB0aGUgVEVTVF9ITU0gbW9kdWxlLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+IHsKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOyAKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iKSB7CgkJCQkJc3RhdHMubGxtLmNvdW50Kys7CgkJCQkJc3RhdHMubGxtLnRva2VucyArPSAocy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2Vucyk7CgkJCQkJc3RhdHMubGxtLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0gZWxzZSBpZiAocy5UeXBlID09PSAidG9vbCIpIHsKCQkJCQlzdGF0cy50b29sLmNvdW50Kys7CgkJCQkJc3RhdHMudG9vbC5kdXJhdGlvbiArPSBkdXI7CgkJCQl9CgkJCX0pOwoKCQkJY29uc3QgYXZnTGxtRHVyID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0uZHVyYXRpb24gLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdMbG1Ub2tlbiA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLnRva2VucyAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z1Rvb2xEdXIgPSBzdGF0cy50b29sLmNvdW50ID4gMCA/IChzdGF0cy50b29sLmR1cmF0aW9uIC8gc3RhdHMudG9vbC5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgoJCQljb25zdCBsbG1TdW1hcnlDZWxscyA9IFtzdGF0cy5sbG0uY291bnQsIHN0YXRzLmxsbS50b2tlbnMsIGF2Z0xsbVRva2VuLCBzdGF0cy5sbG0uZHVyYXRpb24sIGF2Z0xsbUR1cl07CgkJCWNvbnN0IHRvb2xTdW1tYXJ5Q2VsbHMgPSBbc3RhdHMudG9vbC5jb3VudCwgc3RhdHMudG9vbC5kdXJhdGlvbiwgYXZnVG9vbER1cl07CgoJCQljb25zdCBsbG1TdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsbG1fc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCWxsbVN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCBsbG1UciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCWxsbVN1bWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQlsbG1Uci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQlsbG1TdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZChsbG1Ucik7CgoJCQljb25zdCB0b29sU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJdG9vbFN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCB0b29sVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQl0b29sU3VtbWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQl0b29sVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJdG9vbFN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKHRvb2xUcik7CgkJfQoKCQlmdW5jdGlvbiBkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGZpbHRlcmVkU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IFsibGxtIiwgInRvb2wiXS5pbmNsdWRlcyhkLlR5cGUpKTsKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnRHVyYXRpb24nKTsKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsgCgoJCQlmaWx0ZXJlZFN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQkKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOwoJCQkJbGV0IHRvb2x0aXAgPSBzLk5hbWU7CgkJCQlpZiAocy5UeXBlID09PSAibGxtIiAmJiBzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgkJCQlkYXRhLmFkZFJvdyhbYCR7cy5TZXF9YCwgZHVyLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVGltZSBDb25zdW1wdGlvbiBvZiBMTE0vVG9vbCBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNL1Rvb2wgU3RlcHMnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnU2Vjb25kcycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZHVyYXRpb25fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGxsbVN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBkLlR5cGUgPT09ICJsbG0iKTsKCQkJaWYgKGxsbVN0ZXBzLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnVG9rZW5zJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3N0eWxlJ30pOwkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsJCgoJCQljb25zdCBhZ2VudENvbG9ycyA9IHt9OwoJCQljb25zdCBwYWxldHRlID0gWycjNDI4NUY0JywgJyNEQjQ0MzcnLCAnI0Y0QjQwMCcsICcjMEY5RDU4JywgJyNBQjQ3QkMnLCAnIzAwQUNDMSddOwoJCQlsZXQgY29sb3JJZHggPSAwOwoJCQljb25zdCBhZ2VudExMTUNvdW50cyA9IHt9OwoJCQlsbG1TdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJaWYgKCFhZ2VudENvbG9yc1tzLk5hbWVdKSB7CgkJCQkJYWdlbnRDb2xvcnNbcy5OYW1lXSA9IHBhbGV0dGVbY29sb3JJZHggJSBwYWxldHRlLmxlbmd0aF07CgkJCQkJY29sb3JJZHgrKzsKCQkJCX0KCgkJCQlhZ2VudExMTUNvdW50c1tzLk5hbWVdID0gKGFnZW50TExNQ291bnRzW3MuTmFtZV0gfHwgMCkgKyAxOwoJCQkJY29uc3QgbGFiZWwgPSBgJHtzLk5hbWV9LSR7YWdlbnRMTE1Db3VudHNbcy5OYW1lXX1gOwoJCQkJY29uc3QgdG90YWxUb2tlbnMgPSBzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zOwoJCQkJY29uc3Qgc3R5bGUgPSBgY29sb3I6ICR7YWdlbnRDb2xvcnNbcy5OYW1lXX1gOwoJCQkJbGV0IHRvb2x0aXAgPSBgVG90YWwgVG9rZW5zOiAke3RvdGFsVG9rZW5zfVxuKEluOiAke3MuSW5wdXRUb2tlbnN9LCBPdXQ6ICR7cy5PdXRwdXRUb2tlbnN9LCBUaG91Z2h0czogJHtzLk91dHB1dFRob3VnaHRzVG9rZW5zfSlgOwoJCQkJaWYgKHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCgkJCQlkYXRhLmFkZFJvdyhbbGFiZWwsIHRvdGFsVG9rZW5zLCBzdHlsZSwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1Rva2VuIENvbnN1bXB0aW9uIGJ5IExMTSBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNIENhbGwgU2VxdWVuY2UnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnQ29uc3VtZWQgVG9rZW5zJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b2tlbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoJCWxldCBhbGxFeHBhbmRlZCA9IGZhbHNlOwoJCWZ1bmN0aW9uIHRvZ2dsZUFsbERldGFpbHMoKSB7CgkJCWFsbEV4cGFuZGVkID0gIWFsbEV4cGFuZGVkOwoJCQlkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdkZXRhaWxzJykuZm9yRWFjaChkID0+IHsKCQkJCWlmIChhbGxFeHBhbmRlZCkgZC5zZXRBdHRyaWJ1dGUoJ29wZW4nLCAnJyk7CgkJCQllbHNlIGQucmVtb3ZlQXR0cmlidXRlKCdvcGVuJyk7CgkJCX0pOwoJCX0KCTwvc2NyaXB0PgoKCjwvYm9keT4KPC9odG1sPgo=" },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-workflow74q9w[1] Phase: Succeeded StartedAt: 2026-07-06 16:20:10 +0000 UTC FinishedAt: 2026-07-06 16:20:10 +0000 UTC Input: nil Output: nil --------- Name: series-workflow74q9w[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-07-06 16:20:10 +0000 UTC FinishedAt: 2026-07-06 16:20:10 +0000 UTC Input: nil Output: nil --------- Name: series-workflow74q9w[2] Phase: Succeeded StartedAt: 2026-07-06 16:20:10 +0000 UTC FinishedAt: 2026-07-06 20:32:15 +0000 UTC Input: nil Output: nil --------- Name: series-workflow74q9w[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"820d5dfede0cd55dcbc89ce96fcfbb11b7c457ba","config_name":"upstream-apparmor-kasan.config","enable_configs":["TEST_HMM","DEVICE_PRIVATE","ZONE_DEVICE"],"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":["migrate_vma_collect_pmd"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"820d5dfede0cd55dcbc89ce96fcfbb11b7c457ba","config_name":"upstream-apparmor-kasan.config","enable_configs":["TEST_HMM","DEVICE_PRIVATE","ZONE_DEVICE"],"series_id":"12e810ec-3ca6-4bf6-a554-28ab36d6011d","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-06 16:20:10 +0000 UTC FinishedAt: 2026-07-06 20:32:15 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"820d5dfede0cd55dcbc89ce96fcfbb11b7c457ba","config_name":"upstream-apparmor-kasan.config","enable_configs":["TEST_HMM","DEVICE_PRIVATE","ZONE_DEVICE"],"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":["migrate_vma_collect_pmd"],"skip_cover_check":true},"patched":{"arch":"amd64","commit_hash":"820d5dfede0cd55dcbc89ce96fcfbb11b7c457ba","config_name":"upstream-apparmor-kasan.config","enable_configs":["TEST_HMM","DEVICE_PRIVATE","ZONE_DEVICE"],"series_id":"12e810ec-3ca6-4bf6-a554-28ab36d6011d","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-workflow74q9w[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"820d5dfede0cd55dcbc89ce96fcfbb11b7c457ba","config_name":"upstream-apparmor-kasan.config","enable_configs":["TEST_HMM","DEVICE_PRIVATE","ZONE_DEVICE"],"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":["migrate_vma_collect_pmd"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"820d5dfede0cd55dcbc89ce96fcfbb11b7c457ba","config_name":"upstream-apparmor-kasan.config","enable_configs":["TEST_HMM","DEVICE_PRIVATE","ZONE_DEVICE"],"series_id":"12e810ec-3ca6-4bf6-a554-28ab36d6011d","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-06 16:20:10 +0000 UTC FinishedAt: 2026-07-06 16:20:36 +0000 UTC Input: nil Output: nil --------- Name: series-workflow74q9w[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"820d5dfede0cd55dcbc89ce96fcfbb11b7c457ba","config_name":"upstream-apparmor-kasan.config","enable_configs":["TEST_HMM","DEVICE_PRIVATE","ZONE_DEVICE"],"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":["migrate_vma_collect_pmd"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"820d5dfede0cd55dcbc89ce96fcfbb11b7c457ba","config_name":"upstream-apparmor-kasan.config","enable_configs":["TEST_HMM","DEVICE_PRIVATE","ZONE_DEVICE"],"series_id":"12e810ec-3ca6-4bf6-a554-28ab36d6011d","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-06 16:20:10 +0000 UTC FinishedAt: 2026-07-06 16:20:17 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"820d5dfede0cd55dcbc89ce96fcfbb11b7c457ba","config_name":"upstream-apparmor-kasan.config","enable_configs":["TEST_HMM","DEVICE_PRIVATE","ZONE_DEVICE"],"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-workflow74q9w/series-workflow74q9w-convert-artifact-1169670011/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow74q9w[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"820d5dfede0cd55dcbc89ce96fcfbb11b7c457ba","config_name":"upstream-apparmor-kasan.config","enable_configs":["TEST_HMM","DEVICE_PRIVATE","ZONE_DEVICE"],"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":["migrate_vma_collect_pmd"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"820d5dfede0cd55dcbc89ce96fcfbb11b7c457ba","config_name":"upstream-apparmor-kasan.config","enable_configs":["TEST_HMM","DEVICE_PRIVATE","ZONE_DEVICE"],"series_id":"12e810ec-3ca6-4bf6-a554-28ab36d6011d","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-06 16:20:36 +0000 UTC FinishedAt: 2026-07-06 16:47:12 +0000 UTC Input: nil Output: nil --------- Name: series-workflow74q9w[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"820d5dfede0cd55dcbc89ce96fcfbb11b7c457ba","config_name":"upstream-apparmor-kasan.config","enable_configs":["TEST_HMM","DEVICE_PRIVATE","ZONE_DEVICE"],"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":["migrate_vma_collect_pmd"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"820d5dfede0cd55dcbc89ce96fcfbb11b7c457ba","config_name":"upstream-apparmor-kasan.config","enable_configs":["TEST_HMM","DEVICE_PRIVATE","ZONE_DEVICE"],"series_id":"12e810ec-3ca6-4bf6-a554-28ab36d6011d","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-06 16:20:36 +0000 UTC FinishedAt: 2026-07-06 16:47:12 +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:*62ed9382-ee4c-42d0-a7ee-aa54690937a1,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-workflow74q9w/series-workflow74q9w-convert-artifact-1169670011/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": "75815b33-fc9a-4407-9641-4fbcd03925ea", "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-workflow74q9w/series-workflow74q9w-build-action-1505390265/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow74q9w[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"820d5dfede0cd55dcbc89ce96fcfbb11b7c457ba","config_name":"upstream-apparmor-kasan.config","enable_configs":["TEST_HMM","DEVICE_PRIVATE","ZONE_DEVICE"],"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":["migrate_vma_collect_pmd"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"820d5dfede0cd55dcbc89ce96fcfbb11b7c457ba","config_name":"upstream-apparmor-kasan.config","enable_configs":["TEST_HMM","DEVICE_PRIVATE","ZONE_DEVICE"],"series_id":"12e810ec-3ca6-4bf6-a554-28ab36d6011d","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-06 16:20:36 +0000 UTC FinishedAt: 2026-07-06 16:47:02 +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:*62ed9382-ee4c-42d0-a7ee-aa54690937a1,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-workflow74q9w/series-workflow74q9w-convert-artifact-1169670011/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": "75815b33-fc9a-4407-9641-4fbcd03925ea", "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-workflow74q9w/series-workflow74q9w-build-action-1505390265/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow74q9w[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"820d5dfede0cd55dcbc89ce96fcfbb11b7c457ba","config_name":"upstream-apparmor-kasan.config","enable_configs":["TEST_HMM","DEVICE_PRIVATE","ZONE_DEVICE"],"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":["migrate_vma_collect_pmd"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"820d5dfede0cd55dcbc89ce96fcfbb11b7c457ba","config_name":"upstream-apparmor-kasan.config","enable_configs":["TEST_HMM","DEVICE_PRIVATE","ZONE_DEVICE"],"series_id":"12e810ec-3ca6-4bf6-a554-28ab36d6011d","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-06 16:47:12 +0000 UTC FinishedAt: 2026-07-06 16:47:12 +0000 UTC Input: nil Output: nil --------- Name: series-workflow74q9w[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"820d5dfede0cd55dcbc89ce96fcfbb11b7c457ba","config_name":"upstream-apparmor-kasan.config","enable_configs":["TEST_HMM","DEVICE_PRIVATE","ZONE_DEVICE"],"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":["migrate_vma_collect_pmd"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"820d5dfede0cd55dcbc89ce96fcfbb11b7c457ba","config_name":"upstream-apparmor-kasan.config","enable_configs":["TEST_HMM","DEVICE_PRIVATE","ZONE_DEVICE"],"series_id":"12e810ec-3ca6-4bf6-a554-28ab36d6011d","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-06 16:47:12 +0000 UTC FinishedAt: 2026-07-06 16:47:12 +0000 UTC Input: nil Output: nil --------- Name: series-workflow74q9w[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"820d5dfede0cd55dcbc89ce96fcfbb11b7c457ba","config_name":"upstream-apparmor-kasan.config","enable_configs":["TEST_HMM","DEVICE_PRIVATE","ZONE_DEVICE"],"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":["migrate_vma_collect_pmd"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"820d5dfede0cd55dcbc89ce96fcfbb11b7c457ba","config_name":"upstream-apparmor-kasan.config","enable_configs":["TEST_HMM","DEVICE_PRIVATE","ZONE_DEVICE"],"series_id":"12e810ec-3ca6-4bf6-a554-28ab36d6011d","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-06 16:47:12 +0000 UTC FinishedAt: 2026-07-06 16:47:22 +0000 UTC Input: nil Output: nil --------- Name: series-workflow74q9w[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"820d5dfede0cd55dcbc89ce96fcfbb11b7c457ba","config_name":"upstream-apparmor-kasan.config","enable_configs":["TEST_HMM","DEVICE_PRIVATE","ZONE_DEVICE"],"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":["migrate_vma_collect_pmd"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"820d5dfede0cd55dcbc89ce96fcfbb11b7c457ba","config_name":"upstream-apparmor-kasan.config","enable_configs":["TEST_HMM","DEVICE_PRIVATE","ZONE_DEVICE"],"series_id":"12e810ec-3ca6-4bf6-a554-28ab36d6011d","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-06 16:47:12 +0000 UTC FinishedAt: 2026-07-06 16:47:20 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"820d5dfede0cd55dcbc89ce96fcfbb11b7c457ba","config_name":"upstream-apparmor-kasan.config","enable_configs":["TEST_HMM","DEVICE_PRIVATE","ZONE_DEVICE"],"series_id":"12e810ec-3ca6-4bf6-a554-28ab36d6011d","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-workflow74q9w/series-workflow74q9w-convert-artifact-978894034/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow74q9w[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"820d5dfede0cd55dcbc89ce96fcfbb11b7c457ba","config_name":"upstream-apparmor-kasan.config","enable_configs":["TEST_HMM","DEVICE_PRIVATE","ZONE_DEVICE"],"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":["migrate_vma_collect_pmd"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"820d5dfede0cd55dcbc89ce96fcfbb11b7c457ba","config_name":"upstream-apparmor-kasan.config","enable_configs":["TEST_HMM","DEVICE_PRIVATE","ZONE_DEVICE"],"series_id":"12e810ec-3ca6-4bf6-a554-28ab36d6011d","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-06 16:47:22 +0000 UTC FinishedAt: 2026-07-06 16:49:45 +0000 UTC Input: nil Output: nil --------- Name: series-workflow74q9w[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"820d5dfede0cd55dcbc89ce96fcfbb11b7c457ba","config_name":"upstream-apparmor-kasan.config","enable_configs":["TEST_HMM","DEVICE_PRIVATE","ZONE_DEVICE"],"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":["migrate_vma_collect_pmd"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"820d5dfede0cd55dcbc89ce96fcfbb11b7c457ba","config_name":"upstream-apparmor-kasan.config","enable_configs":["TEST_HMM","DEVICE_PRIVATE","ZONE_DEVICE"],"series_id":"12e810ec-3ca6-4bf6-a554-28ab36d6011d","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-06 16:47:22 +0000 UTC FinishedAt: 2026-07-06 16:49:35 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*75815b33-fc9a-4407-9641-4fbcd03925ea,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-workflow74q9w/series-workflow74q9w-build-action-1505390265/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-workflow74q9w[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"820d5dfede0cd55dcbc89ce96fcfbb11b7c457ba","config_name":"upstream-apparmor-kasan.config","enable_configs":["TEST_HMM","DEVICE_PRIVATE","ZONE_DEVICE"],"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":["migrate_vma_collect_pmd"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"820d5dfede0cd55dcbc89ce96fcfbb11b7c457ba","config_name":"upstream-apparmor-kasan.config","enable_configs":["TEST_HMM","DEVICE_PRIVATE","ZONE_DEVICE"],"series_id":"12e810ec-3ca6-4bf6-a554-28ab36d6011d","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-06 16:49:45 +0000 UTC FinishedAt: 2026-07-06 16:49:45 +0000 UTC Input: nil Output: nil --------- Name: series-workflow74q9w[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"820d5dfede0cd55dcbc89ce96fcfbb11b7c457ba","config_name":"upstream-apparmor-kasan.config","enable_configs":["TEST_HMM","DEVICE_PRIVATE","ZONE_DEVICE"],"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":["migrate_vma_collect_pmd"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"820d5dfede0cd55dcbc89ce96fcfbb11b7c457ba","config_name":"upstream-apparmor-kasan.config","enable_configs":["TEST_HMM","DEVICE_PRIVATE","ZONE_DEVICE"],"series_id":"12e810ec-3ca6-4bf6-a554-28ab36d6011d","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-06 16:49:45 +0000 UTC FinishedAt: 2026-07-06 16:49:45 +0000 UTC Input: nil Output: nil --------- Name: series-workflow74q9w[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"820d5dfede0cd55dcbc89ce96fcfbb11b7c457ba","config_name":"upstream-apparmor-kasan.config","enable_configs":["TEST_HMM","DEVICE_PRIVATE","ZONE_DEVICE"],"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":["migrate_vma_collect_pmd"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"820d5dfede0cd55dcbc89ce96fcfbb11b7c457ba","config_name":"upstream-apparmor-kasan.config","enable_configs":["TEST_HMM","DEVICE_PRIVATE","ZONE_DEVICE"],"series_id":"12e810ec-3ca6-4bf6-a554-28ab36d6011d","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-06 16:49:45 +0000 UTC FinishedAt: 2026-07-06 17:22:40 +0000 UTC Input: nil Output: nil --------- Name: series-workflow74q9w[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"820d5dfede0cd55dcbc89ce96fcfbb11b7c457ba","config_name":"upstream-apparmor-kasan.config","enable_configs":["TEST_HMM","DEVICE_PRIVATE","ZONE_DEVICE"],"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":["migrate_vma_collect_pmd"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"820d5dfede0cd55dcbc89ce96fcfbb11b7c457ba","config_name":"upstream-apparmor-kasan.config","enable_configs":["TEST_HMM","DEVICE_PRIVATE","ZONE_DEVICE"],"series_id":"12e810ec-3ca6-4bf6-a554-28ab36d6011d","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-06 16:49:45 +0000 UTC FinishedAt: 2026-07-06 17:22:40 +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:*62ed9382-ee4c-42d0-a7ee-aa54690937a1,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-workflow74q9w/series-workflow74q9w-convert-artifact-978894034/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": "6b788083-e6d6-4898-8b2b-af1083d57d2d", "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-workflow74q9w/series-workflow74q9w-build-action-2125937510/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow74q9w[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"820d5dfede0cd55dcbc89ce96fcfbb11b7c457ba","config_name":"upstream-apparmor-kasan.config","enable_configs":["TEST_HMM","DEVICE_PRIVATE","ZONE_DEVICE"],"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":["migrate_vma_collect_pmd"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"820d5dfede0cd55dcbc89ce96fcfbb11b7c457ba","config_name":"upstream-apparmor-kasan.config","enable_configs":["TEST_HMM","DEVICE_PRIVATE","ZONE_DEVICE"],"series_id":"12e810ec-3ca6-4bf6-a554-28ab36d6011d","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-06 16:49:45 +0000 UTC FinishedAt: 2026-07-06 17:22:19 +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:*62ed9382-ee4c-42d0-a7ee-aa54690937a1,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-workflow74q9w/series-workflow74q9w-convert-artifact-978894034/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": "6b788083-e6d6-4898-8b2b-af1083d57d2d", "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-workflow74q9w/series-workflow74q9w-build-action-2125937510/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow74q9w[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"820d5dfede0cd55dcbc89ce96fcfbb11b7c457ba","config_name":"upstream-apparmor-kasan.config","enable_configs":["TEST_HMM","DEVICE_PRIVATE","ZONE_DEVICE"],"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":["migrate_vma_collect_pmd"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"820d5dfede0cd55dcbc89ce96fcfbb11b7c457ba","config_name":"upstream-apparmor-kasan.config","enable_configs":["TEST_HMM","DEVICE_PRIVATE","ZONE_DEVICE"],"series_id":"12e810ec-3ca6-4bf6-a554-28ab36d6011d","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-06 17:22:40 +0000 UTC FinishedAt: 2026-07-06 17:22:40 +0000 UTC Input: nil Output: nil --------- Name: series-workflow74q9w[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"820d5dfede0cd55dcbc89ce96fcfbb11b7c457ba","config_name":"upstream-apparmor-kasan.config","enable_configs":["TEST_HMM","DEVICE_PRIVATE","ZONE_DEVICE"],"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":["migrate_vma_collect_pmd"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"820d5dfede0cd55dcbc89ce96fcfbb11b7c457ba","config_name":"upstream-apparmor-kasan.config","enable_configs":["TEST_HMM","DEVICE_PRIVATE","ZONE_DEVICE"],"series_id":"12e810ec-3ca6-4bf6-a554-28ab36d6011d","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-06 17:22:40 +0000 UTC FinishedAt: 2026-07-06 17:22:40 +0000 UTC Input: nil Output: nil --------- Name: series-workflow74q9w[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"820d5dfede0cd55dcbc89ce96fcfbb11b7c457ba","config_name":"upstream-apparmor-kasan.config","enable_configs":["TEST_HMM","DEVICE_PRIVATE","ZONE_DEVICE"],"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":["migrate_vma_collect_pmd"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"820d5dfede0cd55dcbc89ce96fcfbb11b7c457ba","config_name":"upstream-apparmor-kasan.config","enable_configs":["TEST_HMM","DEVICE_PRIVATE","ZONE_DEVICE"],"series_id":"12e810ec-3ca6-4bf6-a554-28ab36d6011d","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-06 17:22:40 +0000 UTC FinishedAt: 2026-07-06 17:25:01 +0000 UTC Input: nil Output: nil --------- Name: series-workflow74q9w[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"820d5dfede0cd55dcbc89ce96fcfbb11b7c457ba","config_name":"upstream-apparmor-kasan.config","enable_configs":["TEST_HMM","DEVICE_PRIVATE","ZONE_DEVICE"],"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":["migrate_vma_collect_pmd"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"820d5dfede0cd55dcbc89ce96fcfbb11b7c457ba","config_name":"upstream-apparmor-kasan.config","enable_configs":["TEST_HMM","DEVICE_PRIVATE","ZONE_DEVICE"],"series_id":"12e810ec-3ca6-4bf6-a554-28ab36d6011d","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-06 17:22:40 +0000 UTC FinishedAt: 2026-07-06 17:24:52 +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:*6b788083-e6d6-4898-8b2b-af1083d57d2d,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-workflow74q9w/series-workflow74q9w-build-action-2125937510/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-workflow74q9w[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"820d5dfede0cd55dcbc89ce96fcfbb11b7c457ba","config_name":"upstream-apparmor-kasan.config","enable_configs":["TEST_HMM","DEVICE_PRIVATE","ZONE_DEVICE"],"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":["migrate_vma_collect_pmd"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"820d5dfede0cd55dcbc89ce96fcfbb11b7c457ba","config_name":"upstream-apparmor-kasan.config","enable_configs":["TEST_HMM","DEVICE_PRIVATE","ZONE_DEVICE"],"series_id":"12e810ec-3ca6-4bf6-a554-28ab36d6011d","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-06 17:25:01 +0000 UTC FinishedAt: 2026-07-06 20:32:15 +0000 UTC Input: nil Output: nil --------- Name: series-workflow74q9w[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"820d5dfede0cd55dcbc89ce96fcfbb11b7c457ba","config_name":"upstream-apparmor-kasan.config","enable_configs":["TEST_HMM","DEVICE_PRIVATE","ZONE_DEVICE"],"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":["migrate_vma_collect_pmd"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"820d5dfede0cd55dcbc89ce96fcfbb11b7c457ba","config_name":"upstream-apparmor-kasan.config","enable_configs":["TEST_HMM","DEVICE_PRIVATE","ZONE_DEVICE"],"series_id":"12e810ec-3ca6-4bf6-a554-28ab36d6011d","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-06 17:25:01 +0000 UTC FinishedAt: 2026-07-06 20:32:15 +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":["migrate_vma_collect_pmd"],"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:*75815b33-fc9a-4407-9641-4fbcd03925ea,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*6b788083-e6d6-4898-8b2b-af1083d57d2d,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-workflow74q9w/series-workflow74q9w-build-action-1505390265/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-workflow74q9w/series-workflow74q9w-build-action-2125937510/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflow74q9w[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"820d5dfede0cd55dcbc89ce96fcfbb11b7c457ba","config_name":"upstream-apparmor-kasan.config","enable_configs":["TEST_HMM","DEVICE_PRIVATE","ZONE_DEVICE"],"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":["migrate_vma_collect_pmd"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"820d5dfede0cd55dcbc89ce96fcfbb11b7c457ba","config_name":"upstream-apparmor-kasan.config","enable_configs":["TEST_HMM","DEVICE_PRIVATE","ZONE_DEVICE"],"series_id":"12e810ec-3ca6-4bf6-a554-28ab36d6011d","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-06 17:25:01 +0000 UTC FinishedAt: 2026-07-06 17:26:14 +0000 UTC Input: nil Output: nil --------- Name: series-workflow74q9w[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"820d5dfede0cd55dcbc89ce96fcfbb11b7c457ba","config_name":"upstream-apparmor-kasan.config","enable_configs":["TEST_HMM","DEVICE_PRIVATE","ZONE_DEVICE"],"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":["migrate_vma_collect_pmd"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"820d5dfede0cd55dcbc89ce96fcfbb11b7c457ba","config_name":"upstream-apparmor-kasan.config","enable_configs":["TEST_HMM","DEVICE_PRIVATE","ZONE_DEVICE"],"series_id":"12e810ec-3ca6-4bf6-a554-28ab36d6011d","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-06 17:25:01 +0000 UTC FinishedAt: 2026-07-06 17:25:33 +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":["migrate_vma_collect_pmd"],"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-workflow74q9w/series-workflow74q9w-convert-artifact-2970064935/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow74q9w[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"820d5dfede0cd55dcbc89ce96fcfbb11b7c457ba","config_name":"upstream-apparmor-kasan.config","enable_configs":["TEST_HMM","DEVICE_PRIVATE","ZONE_DEVICE"],"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":["migrate_vma_collect_pmd"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"820d5dfede0cd55dcbc89ce96fcfbb11b7c457ba","config_name":"upstream-apparmor-kasan.config","enable_configs":["TEST_HMM","DEVICE_PRIVATE","ZONE_DEVICE"],"series_id":"12e810ec-3ca6-4bf6-a554-28ab36d6011d","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-06 17:25:01 +0000 UTC FinishedAt: 2026-07-06 17:25:01 +0000 UTC Input: nil Output: nil --------- Name: series-workflow74q9w[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"820d5dfede0cd55dcbc89ce96fcfbb11b7c457ba","config_name":"upstream-apparmor-kasan.config","enable_configs":["TEST_HMM","DEVICE_PRIVATE","ZONE_DEVICE"],"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":["migrate_vma_collect_pmd"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"820d5dfede0cd55dcbc89ce96fcfbb11b7c457ba","config_name":"upstream-apparmor-kasan.config","enable_configs":["TEST_HMM","DEVICE_PRIVATE","ZONE_DEVICE"],"series_id":"12e810ec-3ca6-4bf6-a554-28ab36d6011d","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-06 17:25:01 +0000 UTC FinishedAt: 2026-07-06 17:25:01 +0000 UTC Input: nil Output: nil --------- Name: series-workflow74q9w[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"820d5dfede0cd55dcbc89ce96fcfbb11b7c457ba","config_name":"upstream-apparmor-kasan.config","enable_configs":["TEST_HMM","DEVICE_PRIVATE","ZONE_DEVICE"],"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":["migrate_vma_collect_pmd"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"820d5dfede0cd55dcbc89ce96fcfbb11b7c457ba","config_name":"upstream-apparmor-kasan.config","enable_configs":["TEST_HMM","DEVICE_PRIVATE","ZONE_DEVICE"],"series_id":"12e810ec-3ca6-4bf6-a554-28ab36d6011d","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-06 17:25:01 +0000 UTC FinishedAt: 2026-07-06 17:25:01 +0000 UTC Input: nil Output: nil --------- Name: series-workflow74q9w[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"820d5dfede0cd55dcbc89ce96fcfbb11b7c457ba","config_name":"upstream-apparmor-kasan.config","enable_configs":["TEST_HMM","DEVICE_PRIVATE","ZONE_DEVICE"],"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":["migrate_vma_collect_pmd"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"820d5dfede0cd55dcbc89ce96fcfbb11b7c457ba","config_name":"upstream-apparmor-kasan.config","enable_configs":["TEST_HMM","DEVICE_PRIVATE","ZONE_DEVICE"],"series_id":"12e810ec-3ca6-4bf6-a554-28ab36d6011d","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-06 17:26:14 +0000 UTC FinishedAt: 2026-07-06 20:32:15 +0000 UTC Input: nil Output: nil --------- Name: series-workflow74q9w[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"820d5dfede0cd55dcbc89ce96fcfbb11b7c457ba","config_name":"upstream-apparmor-kasan.config","enable_configs":["TEST_HMM","DEVICE_PRIVATE","ZONE_DEVICE"],"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":["migrate_vma_collect_pmd"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"820d5dfede0cd55dcbc89ce96fcfbb11b7c457ba","config_name":"upstream-apparmor-kasan.config","enable_configs":["TEST_HMM","DEVICE_PRIVATE","ZONE_DEVICE"],"series_id":"12e810ec-3ca6-4bf6-a554-28ab36d6011d","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-06 17:26:14 +0000 UTC FinishedAt: 2026-07-06 20:32:05 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*75815b33-fc9a-4407-9641-4fbcd03925ea,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*6b788083-e6d6-4898-8b2b-af1083d57d2d,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-workflow74q9w/series-workflow74q9w-build-action-1505390265/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-workflow74q9w/series-workflow74q9w-build-action-2125937510/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-workflow74q9w/series-workflow74q9w-convert-artifact-2970064935/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,}