Name: series-workflowtw985 Phase: Succeeded StartedAt: 2026-07-11 17:00:09 +0000 UTC FinishedAt: 2026-07-11 17:38:04 +0000 UTC Input: nil Output: nil --------- Name: series-workflowtw985[0] Phase: Succeeded StartedAt: 2026-07-11 17:00:09 +0000 UTC FinishedAt: 2026-07-11 17:36:31 +0000 UTC Input: nil Output: nil --------- Name: series-workflowtw985[0].run-triage Phase: Succeeded StartedAt: 2026-07-11 17:00:09 +0000 UTC FinishedAt: 2026-07-11 17:36:31 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "net", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git", "commit_hash": "3f1f755366687d051174739fb99f7d560202f60b", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "ZL3073X_I2C", "ZL3073X_SPI" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "net", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git", "commit_hash": "3f1f755366687d051174739fb99f7d560202f60b", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "ZL3073X_I2C", "ZL3073X_SPI" ], "series_id": "32054c97-ddb0-405f-9afb-d7a26d4b8fea" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "dpll_msg_add_pin_ref_sync", "dpll_cmd_pin_get_one", "dpll_nl_pin_get_doit", "dpll_nl_pin_get_dumpit" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzExIDE3OjMzPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1pMMzA3M1hfSTJDJiMzNDssCiAgICAmIzM0O1pMMzA3M1hfU1BJJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7ZHBsbF9tc2dfYWRkX3Bpbl9yZWZfc3luYyYjMzQ7LAogICAgJiMzNDtkcGxsX2NtZF9waW5fZ2V0X29uZSYjMzQ7LAogICAgJiMzNDtkcGxsX25sX3Bpbl9nZXRfZG9pdCYjMzQ7LAogICAgJiMzNDtkcGxsX25sX3Bpbl9nZXRfZHVtcGl0JiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHMgYSBOVUxMIGNoZWNrIGZvciBgcmVmX3N5bmNfcGluX3ByaXZgIGluIGBkcGxsX21zZ19hZGRfcGluX3JlZl9zeW5jYCB0byBwcmV2ZW50IGEgcG90ZW50aWFsIE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZSBvciBpbnZhbGlkIG1lbW9yeSBhY2Nlc3Mgd2hlbiB0aGUgcGluIGhhcyBiZWVuIHVucmVnaXN0ZXJlZCBmcm9tIHRoZSBEUExMLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIERQTEwgbmV0bGluayBpbnRlcmZhY2UsIHdoaWNoIGlzIHJlYWNoYWJsZSBmcm9tIHVzZXIgc3BhY2UgdmlhIG5ldGxpbmsgY29tbWFuZHMgKGUuZy4sIGBEUExMX0NNRF9QSU5fR0VUYCkuIEZ1enppbmcgdGhpcyByZXF1aXJlcyBlbmFibGluZyBEUExMIGRyaXZlcnMsIHN1Y2ggYXMgdGhlIE1pY3JvY2hpcCBBenVyaXRlIEkyQy9TUEkgZHJpdmVycywgd2hpY2ggY2FuIGJlIGluc3RhbnRpYXRlZCBpbiB2aXJ0dWFsIGVudmlyb25tZW50cy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMSAxNzozMzwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IDhlMWE0MGY0YzM4Njg0MTFhMDdjNmFiYjBmZjI4NjljOGNjMmVjMTZcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgU2F0IEp1bCAxMSAxNzozMzozMiAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9kcml2ZXJzL2RwbGwvZHBsbF9uZXRsaW5rLmMgYi9kcml2ZXJzL2RwbGwvZHBsbF9uZXRsaW5rLmNcbmluZGV4IGJmNzI5Y2RlNzk2YTc3Li41NzAzNjY3NTkzYTdjMiAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvZHBsbC9kcGxsX25ldGxpbmsuY1xuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9kcGxsL2RwbGxfbmV0bGluay5jXG5AQCAtNTY3LDYgJiM0Mzs1NjcsOSBAQCBkcGxsX21zZ19hZGRfcGluX3JlZl9zeW5jKHN0cnVjdCBza19idWZmICptc2csIHN0cnVjdCBkcGxsX3BpbiAqcGluLFxuIFx0XHRpZiAoIWRwbGxfcGluX2F2YWlsYWJsZShyZWZfc3luY19waW4pKVxuIFx0XHRcdGNvbnRpbnVlO1xuIFx0XHRyZWZfc3luY19waW5fcHJpdiA9IGRwbGxfcGluX29uX2RwbGxfcHJpdihkcGxsLCByZWZfc3luY19waW4pO1xuJiM0MztcdFx0LyogUGluIG1heSBoYXZlIGJlZW4gdW5yZWdpc3RlcmVkIGZyb20gdGhpcyBkcGxsIGFscmVhZHkgKi9cbiYjNDM7XHRcdGlmICghcmVmX3N5bmNfcGluX3ByaXYpXG4mIzQzO1x0XHRcdGNvbnRpbnVlO1xuIFx0XHRpZiAoV0FSTl9PTighb3BzLVx1MDAzZXJlZl9zeW5jX2dldCkpXG4gXHRcdFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xuIFx0XHRyZXQgPSBvcHMtXHUwMDNlcmVmX3N5bmNfZ2V0KHBpbiwgcGluX3ByaXYsIHJlZl9zeW5jX3BpbixcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMSAxNzozMzwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4xbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtaTDMwNzNYX0kyQyYjMzQ7LAogICAgJiMzNDtaTDMwNzNYX1NQSSYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2RwbGxfbXNnX2FkZF9waW5fcmVmX3N5bmMmIzM0OywKICAgICYjMzQ7ZHBsbF9jbWRfcGluX2dldF9vbmUmIzM0OywKICAgICYjMzQ7ZHBsbF9ubF9waW5fZ2V0X2RvaXQmIzM0OywKICAgICYjMzQ7ZHBsbF9ubF9waW5fZ2V0X2R1bXBpdCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRzIGEgTlVMTCBjaGVjayBmb3IgYHJlZl9zeW5jX3Bpbl9wcml2YCBpbiBgZHBsbF9tc2dfYWRkX3Bpbl9yZWZfc3luY2AgdG8gcHJldmVudCBhIHBvdGVudGlhbCBOVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2Ugb3IgaW52YWxpZCBtZW1vcnkgYWNjZXNzIHdoZW4gdGhlIHBpbiBoYXMgYmVlbiB1bnJlZ2lzdGVyZWQgZnJvbSB0aGUgRFBMTC4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBEUExMIG5ldGxpbmsgaW50ZXJmYWNlLCB3aGljaCBpcyByZWFjaGFibGUgZnJvbSB1c2VyIHNwYWNlIHZpYSBuZXRsaW5rIGNvbW1hbmRzIChlLmcuLCBgRFBMTF9DTURfUElOX0dFVGApLiBGdXp6aW5nIHRoaXMgcmVxdWlyZXMgZW5hYmxpbmcgRFBMTCBkcml2ZXJzLCBzdWNoIGFzIHRoZSBNaWNyb2NoaXAgQXp1cml0ZSBJMkMvU1BJIGRyaXZlcnMsIHdoaWNoIGNhbiBiZSBpbnN0YW50aWF0ZWQgaW4gdmlydHVhbCBlbnZpcm9ubWVudHMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLgoKSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaAp0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4KCldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOgoxLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLgogICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4KMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuCiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KICAgRG8gbm90IGxpc3QgdG9vIGdlbmVyaWMgY29uZmlncyAod2UgYWxyZWFkeSBoYXZlIHRoZW0gZW5hYmxlZCkuIE9ubHkgbGlzdCB0aG9zZSB0aGF0CiAgIHNwZWNpZmljYWxseSBjb3ZlciB0aGUgbW9kaWZpZWQgY29kZS4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzIG91dHB1dCBhcnJheSwKICAgYW5kIERPIE5PVCBhZGQgYSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDhlMWE0MGY0YzM4Njg0MTFhMDdjNmFiYjBmZjI4NjljOGNjMmVjMTYKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgU2F0IEp1bCAxMSAxNzozMzozMiAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZHBsbC9kcGxsX25ldGxpbmsuYyBiL2RyaXZlcnMvZHBsbC9kcGxsX25ldGxpbmsuYwppbmRleCBiZjcyOWNkZTc5NmE3Ny4uNTcwMzY2NzU5M2E3YzIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZHBsbC9kcGxsX25ldGxpbmsuYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL2RwbGwvZHBsbF9uZXRsaW5rLmMKQEAgLTU2Nyw2ICYjNDM7NTY3LDkgQEAgZHBsbF9tc2dfYWRkX3Bpbl9yZWZfc3luYyhzdHJ1Y3Qgc2tfYnVmZiAqbXNnLCBzdHJ1Y3QgZHBsbF9waW4gKnBpbiwKIAkJaWYgKCFkcGxsX3Bpbl9hdmFpbGFibGUocmVmX3N5bmNfcGluKSkKIAkJCWNvbnRpbnVlOwogCQlyZWZfc3luY19waW5fcHJpdiA9IGRwbGxfcGluX29uX2RwbGxfcHJpdihkcGxsLCByZWZfc3luY19waW4pOwomIzQzOwkJLyogUGluIG1heSBoYXZlIGJlZW4gdW5yZWdpc3RlcmVkIGZyb20gdGhpcyBkcGxsIGFscmVhZHkgKi8KJiM0MzsJCWlmICghcmVmX3N5bmNfcGluX3ByaXYpCiYjNDM7CQkJY29udGludWU7CiAJCWlmIChXQVJOX09OKCFvcHMtJmd0O3JlZl9zeW5jX2dldCkpCiAJCQlyZXR1cm4gLUVPUE5PVFNVUFA7CiAJCXJldCA9IG9wcy0mZ3Q7cmVmX3N5bmNfZ2V0KHBpbiwgcGluX3ByaXYsIHJlZl9zeW5jX3BpbiwKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTEgMTc6MzM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTkyMgoJCQkJCQkJb3V0cHV0OiA0NwoJCQkJCQkJdGhvdWdodHM6IDkyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHVuZGVyc3RhbmRpbmcsIHRoaW5raW5nIHRocm91Z2ggdGhpcyBjb2RlIGNoYW5nZSBpbiBgZHJpdmVycy9kcGxsL2RwbGxfbmV0bGluay5jYDoKCioqQW5hbHl6aW5nIGEgRFBMTCBOZXRsaW5rIFBhdGNoKioKClJpZ2h0LCBJJiMzOTttIGxvb2tpbmcgYXQgYSBwYXRjaCB0aGF0JiMzOTtzIGJlZW4gYXBwbGllZCB0byBgZHJpdmVycy9kcGxsL2RwbGxfbmV0bGluay5jYC4gVGhlIGNvcmUgb2YgdGhlIGNoYW5nZSBzZWVtcyB0byBiZSBpbiB0aGUgZnVuY3Rpb24gYGRwbGxfbXNnX2FkZF9waW5fcmVmX3N5bmNgLiBUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIG5ldyBjaGVjazogYGlmICghcmVmX3N5bmNfcGluX3ByaXYpYC4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMsICYjMzQ7T2theSwgdGhhdCYjMzk7cyBhIGNvbmRpdGlvbiBiZWluZyBhZGRlZC4gV2hhdCBpcyBgcmVmX3N5bmNfcGluX3ByaXZgIGFuZCB3aHkgaXMgdGhpcyBjaGVjayBuZWNlc3Nhcnk/JiMzNDsgSSYjMzk7bGwgbmVlZCB0byBkaWcgaW50byB0aGUgc3Vycm91bmRpbmcgY29kZSB0byB1bmRlcnN0YW5kIHRoZSBjb250ZXh0IG9mIHRoaXMgdmFyaWFibGUsIHdoYXQgaXQgcmVwcmVzZW50cyBpbiB0aGUgRFBMTCBjb250cm9sLCBhbmQgd2hhdCB0aGUgaW1wbGljYXRpb25zIGFyZSBpZiBpdCYjMzk7cyBudWxsLiBJcyB0aGlzIGEgbmV3IGluaXRpYWxpemF0aW9uIGNoZWNrPyBQcmV2ZW50aW5nIGEgcG90ZW50aWFsIG51bGwgcG9pbnRlciBkZXJlZmVyZW5jZT8gT3IgaXMgdGhlIGFic2VuY2Ugb2YgdGhpcyB2YXJpYWJsZSBpbmRpY2F0aXZlIG9mIHNvbWUgY3JpdGljYWwgc3RhdGUgb3IgY29uZmlndXJhdGlvbiBlcnJvcj8gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCB0aGlzIGByZWZfc3luY19waW5fcHJpdmAgbWVhbnMgaW4gdGhlIGNvbnRyb2wgZmxvdyBvZiBEUExMIG5ldGxpbmsgbWVzc2FnaW5nIGFuZCB0aGVuIGRlZHVjZSB3aGF0IHRoaXMgY2hlY2sgaXMgZG9pbmcuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTEgMTc6MzM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7ZHBsbF9tc2dfYWRkX3Bpbl9yZWZfc3luYyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvZHBsbC9kcGxsX25ldGxpbmsuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL2RwbGwvZHBsbF9uZXRsaW5rLmM9NTUxPXN0YXRpYyBpbnRcbmRyaXZlcnMvZHBsbC9kcGxsX25ldGxpbmsuYzo1NTI6ZHBsbF9tc2dfYWRkX3Bpbl9yZWZfc3luYyhzdHJ1Y3Qgc2tfYnVmZiAqbXNnLCBzdHJ1Y3QgZHBsbF9waW4gKnBpbixcbmRyaXZlcnMvZHBsbC9kcGxsX25ldGxpbmsuYy01NTMtXHRcdFx0ICBzdHJ1Y3QgZHBsbF9waW5fcmVmICpyZWYsXG4tLVxuZHJpdmVycy9kcGxsL2RwbGxfbmV0bGluay5jPTY5NT1kcGxsX2NtZF9waW5fZ2V0X29uZShzdHJ1Y3Qgc2tfYnVmZiAqbXNnLCBzdHJ1Y3QgZHBsbF9waW4gKnBpbixcbi0tXG5kcml2ZXJzL2RwbGwvZHBsbF9uZXRsaW5rLmMtNzU0LVx0aWYgKCF4YV9lbXB0eShcdTAwMjZwaW4tXHUwMDNlcmVmX3N5bmNfcGlucykpXG5kcml2ZXJzL2RwbGwvZHBsbF9uZXRsaW5rLmM6NzU1Olx0XHRyZXQgPSBkcGxsX21zZ19hZGRfcGluX3JlZl9zeW5jKG1zZywgcGluLCByZWYsIGV4dGFjayk7XG5kcml2ZXJzL2RwbGwvZHBsbF9uZXRsaW5rLmMtNzU2LVx0aWYgKHJldClcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMSAxNzozMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNTkyCgkJCQkJCQlvdXRwdXQ6IDMxCgkJCQkJCQl0aG91Z2h0czogNTcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIG15IG93bjoKCioqQW5hbHl6aW5nIHRoZSBEUExMIFJlZmVyZW5jZSBDb3VudGluZyoqCgpBbHJpZ2h0LCBsZXQmIzM5O3Mgc2VlLCBgZHBsbF9tc2dfYWRkX3Bpbl9yZWZfc3luY2AgaXMgYmVpbmcgaW52b2tlZCBieSBgZHBsbF9jbWRfcGluX2dldF9vbmVgLiBIbW0sIHRoYXQmIzM5O3MgaW50ZXJlc3RpbmcuIEkga25vdyB0aGF0IGZ1bmN0aW9uIGlzIHBhcnQgb2YgdGhlIERQTEwgc3Vic3lzdGVtJiMzOTtzIG5ldGxpbmsgaW50ZXJmYWNlLiBTbywgaXQmIzM5O3MgbGlrZWx5IGludm9sdmVkIGluIGEgJiMzNDtnZXQmIzM0OyBvcGVyYXRpb24gZm9yIGEgRFBMTCBwaW4sIGFuZCB3ZSYjMzk7cmUgZGVhbGluZyB3aXRoIHJlZmVyZW5jZSBjb3VudGluZyBoZXJlIOKAkyB0aGUgYF9yZWZgIGluIHRoZSBuYW1lIGlzIGEgY2x1ZS4gR290dGEgbWFrZSBzdXJlIHdlJiMzOTtyZSBoYW5kbGluZyByZXNvdXJjZSBsaWZldGltZXMgY29ycmVjdGx5LiBOb3csIGJlZm9yZSBJIGp1bXAgdG8gYW55IGNvbmNsdXNpb25zLCBJIHNob3VsZCBwcm9iYWJseSBkb3VibGUtY2hlY2sgdGhlIERQTEwgY29uZmlndXJhdGlvbiBpdHNlbGYuIFNlZSB3aGF0IHRoZSBjdXJyZW50IHNldHVwIGlzLCB3aGF0IGZlYXR1cmVzIGFyZSBlbmFibGVkLCBhbmQgaG93IHRoaXMgcGFydGljdWxhciBwaW4gaXMgY29uZmlndXJlZCBpbiByZWxhdGlvbiB0byB0aGUgb3ZlcmFsbCBjbG9ja2luZyBzY2hlbWUuIFRoYXQgY29uZmlnIHdpbGwgbGlrZWx5IHNoZWQgYSBsb3Qgb2YgbGlnaHQgb24gKndoeSogdGhpcyByZWZlcmVuY2UgbWFuYWdlbWVudCBpcyBoYXBwZW5pbmcgdGhpcyB3YXkuIFVuZGVyc3RhbmRpbmcgdGhlIGNvbnRleHQgaXMga2V5IHRvIHNwb3R0aW5nIGFueSBwb3RlbnRpYWwgaXNzdWVzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzExIDE3OjMzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBEUExMJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9kcGxsL0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9kcGxsL0tjb25maWc9Nj1tZW51IFwmIzM0O0RQTEwgZGV2aWNlIHN1cHBvcnRcJiMzNDtcbmRyaXZlcnMvZHBsbC9LY29uZmlnLTctXG5kcml2ZXJzL2RwbGwvS2NvbmZpZzo4OmNvbmZpZyBEUExMXG5kcml2ZXJzL2RwbGwvS2NvbmZpZy05LVx0Ym9vbFxuZHJpdmVycy9kcGxsL0tjb25maWctMTAtXG5kcml2ZXJzL2RwbGwvS2NvbmZpZzoxMTpjb25maWcgRFBMTF9SRUZDTlRfVFJBQ0tFUlxuZHJpdmVycy9kcGxsL0tjb25maWctMTItXHRib29sIFwmIzM0O0RQTEwgcmVmZXJlbmNlIGNvdW50IHRyYWNraW5nXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTEgMTc6MzM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzAzMgoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDI2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkRQTEwmIzM5O3MgVHJ1ZSBOYXR1cmUqKgoKSG9sZCBvbiBhIHNlY29uZC4uLiBpcyBEUExMIGVzc2VudGlhbGx5IGEgYGJvb2xgIHR5cGUsIGJ1dCB3aXRob3V0IHRoZSBpbnRlcmFjdGl2ZSBwcm9tcHRpbmcgbWVjaGFuaXNtPyBJIG5lZWQgdG8gdmVyaWZ5IG15IGluaXRpYWwgaHVuY2guIEl0IHNlZW1zIGludHVpdGl2ZWx5IGNvcnJlY3QgZ2l2ZW4gdGhlIHVzdWFsIGRlZmluaXRpb25zLCBidXQgSSB3YW50IHRvIGJlIGNlcnRhaW4uIE15IG5leHQgYWN0aW9uIGlzIHRvIHF1aWNrbHkgc2NydXRpbml6ZSB0aGUgcmVsZXZhbnQgS2NvbmZpZyBmaWxlLCBzcGVjaWZpY2FsbHkgd2l0aGluIHRoZSBgZHJpdmVycy9kcGxsL2AgZGlyZWN0b3J5LCB0byBjb25maXJtIG9yIHJlZnV0ZSB0aGlzIGh5cG90aGVzaXMuIEkmIzM5O2xsIGJlIGxvb2tpbmcgZm9yIGhvdyBEUExMIGlzIGFjdHVhbGx5IGRlZmluZWQgYW5kIGltcGxlbWVudGVkIHdpdGggcmVzcGVjdCB0byBpdHMgZnVuZGFtZW50YWwgYm9vbGVhbiBuYXR1cmUsIGFuZCBjb21wYXJlIHRoYXQgdG8gdGhlIHdheSBgYm9vbGAgaXMgaW1wbGVtZW50ZWQgZWxzZXdoZXJlLiBJIHN1c3BlY3QgSSBtaWdodCBmaW5kIHNvbWUgc3VidGxlIGRpZmZlcmVuY2VzLCBvciBtYXliZSBub3QuIFRpbWUgdG8gZGl2ZSBpbnRvIHRoZSBjb2RlIQoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzExIDE3OjMzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy9kcGxsL0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDIwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAgIDE6XHQjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcbiAgIDI6XHQjXG4gICAzOlx0IyBHZW5lcmljIERQTEwgZHJpdmVycyBjb25maWd1cmF0aW9uXG4gICA0Olx0I1xuICAgNTpcdFxuICAgNjpcdG1lbnUgXCYjMzQ7RFBMTCBkZXZpY2Ugc3VwcG9ydFwmIzM0O1xuICAgNzpcdFxuICAgODpcdGNvbmZpZyBEUExMXG4gICA5Olx0XHRib29sXG4gIDEwOlx0XG4gIDExOlx0Y29uZmlnIERQTExfUkVGQ05UX1RSQUNLRVJcbiAgMTI6XHRcdGJvb2wgXCYjMzQ7RFBMTCByZWZlcmVuY2UgY291bnQgdHJhY2tpbmdcJiMzNDtcbiAgMTM6XHRcdGRlcGVuZHMgb24gREVCVUdfS0VSTkVMIFx1MDAyNlx1MDAyNiBTVEFDS1RSQUNFX1NVUFBPUlQgXHUwMDI2XHUwMDI2IERQTExcbiAgMTQ6XHRcdHNlbGVjdCBSRUZfVFJBQ0tFUlxuICAxNTpcdFx0aGVscFxuICAxNjpcdFx0ICBFbmFibGUgcmVmZXJlbmNlIGNvdW50IHRyYWNraW5nIGZvciBEUExMIGRldmljZXMgYW5kIHBpbnMuXG4gIDE3Olx0XHQgIFRoaXMgaGVscHMgZGVidWdnaW5nIHJlZmVyZW5jZSBsZWFrcyBhbmQgdXNlLWFmdGVyLWZyZWUgYnVnc1xuICAxODpcdFx0ICBieSByZWNvcmRpbmcgc3RhY2sgdHJhY2VzIGZvciBlYWNoIGdldC9wdXQgb3BlcmF0aW9uLlxuICAxOTpcdFxuICAyMDpcdFx0ICBUaGUgdHJhY2tpbmcgaW5mb3JtYXRpb24gaXMgZXhwb3NlZCB2aWEgZGVidWdmcyBhdDpcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMSAxNzozMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzNDk3CgkJCQkJCQlvdXRwdXQ6IDIzCgkJCQkJCQl0aG91Z2h0czogMjcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIHByZXNlbnRlZCBpbiB0aGUgZmlyc3QgcGVyc29uOgoKKipJbnZlc3RpZ2F0aW5nIHRoZSBEZXBlbmRlbmN5IG9uIGEgQm9vbGVhbiBGbGFnKioKCkFscmlnaHQsIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIGNvZGUsIGFuZCBpdCYjMzk7cyBmbGFnZ2VkIHdpdGggYSBzaW1wbGUgYm9vbGVhbiB0eXBlIOKAkyBsaWtlbHkgYSBjb25maWd1cmF0aW9uIG9wdGlvbiBvciBhIHN0YXRlIHZhcmlhYmxlLiBUaGUgaW1tZWRpYXRlIHF1ZXN0aW9uIGlzIGFsd2F5cywgJiMzNDtXaGVyZSYjMzk7cyB0aGlzIGJlaW5nIHVzZWQsIGFuZCAqd2h5Kj8mIzM0OyBJdCYjMzk7cyAqcHJvYmFibHkqIGdldHRpbmcgc2V0IG9yIG1vZGlmaWVkIGJ5IGFub3RoZXIgZHJpdmVyIG9yIG1vZHVsZSwgYW5kIG15IGZpcnN0IGluc3RpbmN0IGlzIHRvIHRyYWNlIHRoZSBkZXBlbmRlbmNpZXMuIFRoaXMga2luZCBvZiBmbGFnIG9mdGVuIGhhcyBjYXNjYWRpbmcgZWZmZWN0cywgc28gdW5kZXJzdGFuZGluZyB0aGUgY29udGV4dCBpcyBwYXJhbW91bnQuCgpTbyBJJiMzOTtsbCBzdGFydCB3aXRoIHRoZSBvYnZpb3VzOiB3aG8mIzM5O3Mgc2VsZWN0aW5nIHRoaXMuCgpMZXQmIzM5O3MgZGl2ZSBkZWVwZXIgYW5kIGZpbmQgb3V0IHRoZSBjb25uZWN0aW9uIHRvICYjMzQ7RFBMTCYjMzQ7LiBUaGlzIG1pZ2h0IGluZGljYXRlIGEgZGVwZW5kZW5jeSBvbiBhbiBTQVQgc29sdmVyIGltcGxlbWVudGF0aW9uLCBvciBwZXJoYXBzIGEgbW9yZSBjb21wbGV4IHJlbGF0aW9uc2hpcCBJIGNhbiBpbmZlciBvbmNlIEkgZmlndXJlIG91dCB0aGUgaW50ZXJhY3Rpb24uIEZpZ3VyaW5nIG91dCB0aGUgcmVsYXRpb25zaGlwIGhlcmUgd2lsbCBiZSBrZXkgdG8gdW5kZXJzdGFuZGluZyB0aGUgc3lzdGVtJiMzOTtzIG92ZXJhbGwgYmVoYXZpb3IuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzExIDE3OjMzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3NlbGVjdCBEUExMJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvZHBsbC96bDMwNzN4L0tjb25maWc9Mz1jb25maWcgWkwzMDczWFxuLS1cbmRyaXZlcnMvZHBsbC96bDMwNzN4L0tjb25maWctNS1cdGRlcGVuZHMgb24gTkVUXG5kcml2ZXJzL2RwbGwvemwzMDczeC9LY29uZmlnOjY6XHRzZWxlY3QgRFBMTFxuZHJpdmVycy9kcGxsL3psMzA3M3gvS2NvbmZpZy03LVx0c2VsZWN0IE5FVF9ERVZMSU5LXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvS2NvbmZpZz0yOTE9Y29uZmlnIElDRVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL0tjb25maWctMzA1LVx0c2VsZWN0IFBMRE1GV1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvS2NvbmZpZzozMDY6XHRzZWxlY3QgRFBMTFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvS2NvbmZpZy0zMDctXHRoZWxwXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL0tjb25maWc9MjAzPWNvbmZpZyBNTFg1X0RQTExcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvS2NvbmZpZy0yMDUtXHRkZXBlbmRzIG9uIE5FVERFVklDRVMgXHUwMDI2XHUwMDI2IEVUSEVSTkVUIFx1MDAyNlx1MDAyNiBQQ0kgXHUwMDI2XHUwMDI2IE1MWDVfQ09SRVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL0tjb25maWc6MjA2Olx0c2VsZWN0IERQTExcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9LY29uZmlnLTIwNy1cdGhlbHBcbi0tXG5kcml2ZXJzL3B0cC9LY29uZmlnPTIxMD1jb25maWcgUFRQXzE1ODhfQ0xPQ0tfT0NQXG4tLVxuZHJpdmVycy9wdHAvS2NvbmZpZy0yMTktXHRzZWxlY3QgQ1JDMTZcbmRyaXZlcnMvcHRwL0tjb25maWc6MjIwOlx0c2VsZWN0IERQTExcbmRyaXZlcnMvcHRwL0tjb25maWctMjIxLVx0aGVscFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMSAxNzozMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0MTYwCgkJCQkJCQlvdXRwdXQ6IDQxCgkJCQkJCQl0aG91Z2h0czogMTQ2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkRQTEwgQ29uZmlndXJhdGlvbiBBbmFseXNpcyoqCgpPa2F5LCBzbyB0aGUgRFBMTCAoRGlnaXRhbCBQaGFzZS1Mb2NrZWQgTG9vcCkgbW9kdWxlIGlzIGN1cnJlbnRseSBzZWxlY3RlZCBieSBhIGZldyBkaWZmZXJlbnQgb3B0aW9uczogYElDRWAsIGBNTFg1X0RQTExgLCBgUFRQXzE1ODhfQ0xPQ0tfT0NQYCwgYW5kIGBaTDMwNzNYYC4gTXkgaW5pdGlhbCB0aG91Z2h0IHdhcywgJiMzNDtDYW4gd2UganVzdCBlbmFibGUgRFBMTCBkaXJlY3RseT8mIzM0OyBidXQgdGhlbiBJIHJlbWVtYmVyZWQgaXQmIzM5O3MgYSBib29sZWFuIHdpdGhvdXQgYSBwcm9tcHQsIHNvIHRoYXQmIzM5O3MgYSBuby1nby4gV2UgbmVlZCB0byBlbmFibGUgaXQgaW5kaXJlY3RseSB0aHJvdWdoIG9uZSBvZiB0aG9zZSBkZXBlbmRlbnQgb3B0aW9ucy4KClRoZXJlZm9yZSwgdGhlIHN0cmF0ZWd5IGlzIHRvIGVuYWJsZSBlaXRoZXIgYElDRWAsIGBNTFg1X0RQTExgLCBgUFRQXzE1ODhfQ0xPQ0tfT0NQYCwgb3IgYFpMMzA3M1hgLgoKTGV0IG1lIHRha2UgYSBxdWljayBsb29rIGF0IGBkcml2ZXJzL2RwbGwvemwzMDczeC9LY29uZmlnYCB0byBzZWUgaWYgdGhlcmUgYXJlIGFueSBzcGVjaWZpYyBjb25kaXRpb25zIHdpdGhpbiB0aGF0IGRyaXZlciB0aGF0IG1pZ2h0IGJlIHJlbGV2YW50LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMSAxNzozNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvZHBsbC96bDMwNzN4L0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDIwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAgIDE6XHQjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcbiAgIDI6XHRcbiAgIDM6XHRjb25maWcgWkwzMDczWFxuICAgNDpcdFx0dHJpc3RhdGUgXCYjMzQ7TWljcm9jaGlwIEF6dXJpdGUgRFBMTC9QVFAvU3luY0UgZGV2aWNlc1wmIzM0OyBpZiBDT01QSUxFX1RFU1RcbiAgIDU6XHRcdGRlcGVuZHMgb24gTkVUXG4gICA2Olx0XHRzZWxlY3QgRFBMTFxuICAgNzpcdFx0c2VsZWN0IE5FVF9ERVZMSU5LXG4gICA4Olx0XHRzZWxlY3QgUkVHTUFQXG4gICA5Olx0XHRoZWxwXG4gIDEwOlx0XHQgIFRoaXMgZHJpdmVyIHN1cHBvcnRzIE1pY3JvY2hpcCBBenVyaXRlIGZhbWlseSBEUExML1BUUC9TeW5jRVxuICAxMTpcdFx0ICBkZXZpY2VzIHRoYXQgc3VwcG9ydCB1cCB0byA1IGluZGVwZW5kZW50IERQTEwgY2hhbm5lbHMsXG4gIDEyOlx0XHQgIDEwIGlucHV0IHBpbnMgYW5kIHVwIHRvIDIwIG91dHB1dCBwaW5zLlxuICAxMzpcdFxuICAxNDpcdFx0ICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlLiBUaGUgbW9kdWxlXG4gIDE1Olx0XHQgIHdpbGwgYmUgY2FsbGVkIHpsMzA3M3guXG4gIDE2Olx0XG4gIDE3Olx0Y29uZmlnIFpMMzA3M1hfSTJDXG4gIDE4Olx0XHR0cmlzdGF0ZSBcJiMzNDtJMkMgYnVzIGltcGxlbWVudGF0aW9uIGZvciBNaWNyb2NoaXAgQXp1cml0ZSBkZXZpY2VzXCYjMzQ7XG4gIDE5Olx0XHRkZXBlbmRzIG9uIEkyQyBcdTAwMjZcdTAwMjYgTkVUXG4gIDIwOlx0XHRzZWxlY3QgUkVHTUFQX0kyQ1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMSAxNzozNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0ODQ2CgkJCQkJCQlvdXRwdXQ6IDQ2CgkJCQkJCQl0aG91Z2h0czogNjEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCYjMzk7cyBzZWUuLi4KCioqQ2hlY2tpbmcgWkwzMDczWCBEZXBlbmRlbmN5KioKCkhtbSwgc28gdGhlIGBaTDMwNzNYYCBkcml2ZXIgbmVlZHMgYENPTVBJTEVfVEVTVGAgdG8gYmUgZGlyZWN0bHkgdmlzaWJsZT8gVGhhdCBzZWVtcyBhIGJpdC4uLiB1bnVzdWFsLiBMZXQmIzM5O3Mgc2VlIGhvdyB0aGF0JiMzOTtzIGhhbmRsZWQ6CgpgdHJpc3RhdGUgJiMzNDtNaWNyb2NoaXAgQXp1cml0ZSBEUExML1BUUC9TeW5jRSBkZXZpY2VzJiMzNDsgaWYgQ09NUElMRV9URVNUYAoKT2theSwgeWVwLCB0aGF0JiMzOTtzIHdoYXQgaXQgbG9va3MgbGlrZS4gIEl0JiMzOTtzIGNvbmRpdGlvbmFsbHkgY29tcGlsZWQgYmFzZWQgb24gYENPTVBJTEVfVEVTVGAuICBJIG5lZWQgdG8gY2hlY2sgdGhhdCB0aGlzIGlzIHRoZSBiZXN0IGFwcHJvYWNoLiBJcyB0aGlzIHJlYWxseSB0aGUgcHJvcGVyIGRlc2lnbj8gIFRoaXMgZmVlbHMgYSBiaXQgb2ZmLCBpdCBtYXkgaW50ZXJmZXJlIHdpdGggcHJvZHVjdGlvbiBidWlsZHMsIHdoaWNoIGlzIG5vdCBpZGVhbC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIHJlYXNvbmluZyBiZWhpbmQgdGhpcyBkZXNpZ24gY2hvaWNlLiBQZXJoYXBzIHRoZXJlJiMzOTtzIGEgZ29vZCByZWFzb24sIGJ1dCBJJiMzOTtsbCBuZWVkIHRvIGRpZyBkZWVwZXIuIEkmIzM5O2xsIG5lZWQgdG8gY2hlY2sgdGhlIGRlcGVuZGVuY2llcyBvbiBgTUxYNV9EUExMYCB0byBlbnN1cmUgdGhleSBkbyBub3QgcmVxdWlyZSBgQ09NUElMRV9URVNUYCB0b28uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzExIDE3OjM0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAyMDMsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMTAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDIwMzpcdGNvbmZpZyBNTFg1X0RQTExcbiAyMDQ6XHRcdHRyaXN0YXRlIFwmIzM0O01lbGxhbm94IDV0aCBnZW5lcmF0aW9uIG5ldHdvcmsgYWRhcHRlcnMgKENvbm5lY3RYIHNlcmllcykgRFBMTCBzdXBwb3J0XCYjMzQ7XG4gMjA1Olx0XHRkZXBlbmRzIG9uIE5FVERFVklDRVMgXHUwMDI2XHUwMDI2IEVUSEVSTkVUIFx1MDAyNlx1MDAyNiBQQ0kgXHUwMDI2XHUwMDI2IE1MWDVfQ09SRVxuIDIwNjpcdFx0c2VsZWN0IERQTExcbiAyMDc6XHRcdGhlbHBcbiAyMDg6XHRcdCAgRFBMTCBzdXBwb3J0IGluIE1lbGxhbm94IFRlY2hub2xvZ2llcyBDb25uZWN0WCBOSUNzLlxuIDIwOTpcdFxuIDIxMDpcdGNvbmZpZyBNTFg1X0VOX1BTUFxuIDIxMTpcdFx0Ym9vbCBcJiMzNDtNZWxsYW5veCBUZWNobm9sb2dpZXMgc3VwcG9ydCBmb3IgUFNQIGNyeXB0b2dyYXBoeS1vZmZsb2FkIGFjY2VsZXJhdGlvblwmIzM0O1xuIDIxMjpcdFx0ZGVwZW5kcyBvbiBJTkVUX1BTUFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMSAxNzozNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1MzQwCgkJCQkJCQlvdXRwdXQ6IDM1CgkJCQkJCQl0aG91Z2h0czogMzEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIGFuIGV4cGVydCYjMzk7cyBpbnRlcm5hbCBtb25vbG9ndWU6CgoqKkNvbnNpZGVyaW5nIENsb2NrIFN5bmNocm9uaXphdGlvbiBPcHRpb25zKioKClJpZ2h0LCBgTUxYNV9EUExMYCBpcyBhIHN0cm9uZyBjb250ZW5kZXIsIGEgc29saWQgY2hvaWNlIGZvciB0aGUga2luZCBvZiBwcmVjaXNpb24gSSBuZWVkLiBJdCYjMzk7cyBnb3QgdGhlIHJpZ2h0IGNoYXJhY3RlcmlzdGljcyBmb3IgdGhpcyBhcHBsaWNhdGlvbi4gQnV0LCBJIHNob3VsZCBhbHNvIHdlaWdoIGl0IGFnYWluc3Qgb3RoZXIgcG9zc2liaWxpdGllcy4gSSYjMzk7bSB3b25kZXJpbmcgaWYgYFBUUF8xNTg4X0NMT0NLX09DUGAgbWlnaHQgb2ZmZXIgc29tZSBhZHZhbnRhZ2VzIGluIHRoaXMgc2NlbmFyaW8uIEkgaGF2ZSB0byBhc3Nlc3MgaWYgaXRzIGFyY2hpdGVjdHVyZSBzdWl0cyB0aGUgc3lzdGVtIGJldHRlciwgZXNwZWNpYWxseSBjb25zaWRlcmluZyB0aGUgcG90ZW50aWFsIGludGVncmF0aW9uIGNoYWxsZW5nZXMgb2YgYm90aCBzb2x1dGlvbnMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzExIDE3OjM0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy9wdHAvS2NvbmZpZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDIxMCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAxMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgMjEwOlx0Y29uZmlnIFBUUF8xNTg4X0NMT0NLX09DUFxuIDIxMTpcdFx0dHJpc3RhdGUgXCYjMzQ7T3BlbkNvbXB1dGUgVGltZUNhcmQgYXMgUFRQIGNsb2NrXCYjMzQ7XG4gMjEyOlx0XHRkZXBlbmRzIG9uIFBUUF8xNTg4X0NMT0NLXG4gMjEzOlx0XHRkZXBlbmRzIG9uIEhBU19JT01FTSBcdTAwMjZcdTAwMjYgUENJXG4gMjE0Olx0XHRkZXBlbmRzIG9uIEkyQyBcdTAwMjZcdTAwMjYgTVREXG4gMjE1Olx0XHRkZXBlbmRzIG9uIFNFUklBTF84MjUwXG4gMjE2Olx0XHRkZXBlbmRzIG9uICFTMzkwXG4gMjE3Olx0XHRkZXBlbmRzIG9uIENPTU1PTl9DTEtcbiAyMTg6XHRcdHNlbGVjdCBORVRfREVWTElOS1xuIDIxOTpcdFx0c2VsZWN0IENSQzE2XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzExIDE3OjM0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDU2OTgKCQkJCQkJCW91dHB1dDogNDUKCQkJCQkJCXRob3VnaHRzOiAxMTQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqSW52ZXN0aWdhdGluZyB0aGUgTUxYNV9EUExML1BUUF8xNTg4X0NMT0NLX09DUCBQb3NzaWJpbGl0eSoqCgpPa2F5LCBsZXQmIzM5O3MgZXhwbG9yZSBlbmFibGluZyBgTUxYNV9EUExMYCBvciBwb3RlbnRpYWxseSBgUFRQXzE1ODhfQ0xPQ0tfT0NQYC4gUmlnaHQsIHJpZ2h0LCBJIG5lZWQgdG8gcmVtZW1iZXIgYERQTExgIGlzIHRoZSBzdWJzeXN0ZW0gaXRzZWxmLiBUaGUgcGF0Y2ggaXMgdG91Y2hpbmcgYGRyaXZlcnMvZHBsbC9kcGxsX25ldGxpbmsuY2AsIHdoaWNoIGdpdmVzIHVzIGEgY2x1ZS4gVGhlIGtleSBxdWVzdGlvbiBpcyB3aGV0aGVyIHRoaXMgaXMgYWNjZXNzaWJsZSBmcm9tIHVzZXIgc3BhY2UuIEJpbmdvLCBpdCYjMzk7cyBhIG5ldGxpbmsgaW50ZXJmYWNlLCBzbyB0aGF0IGxvb2tzIHByb21pc2luZy4gTm93LCBsZXQgbWUgZGlnIGludG8gYGRwbGxfbXNnX2FkZF9waW5fcmVmX3N5bmNgIGFuZCBgZHBsbF9jbWRfcGluX2dldF9vbmVgIHRvIHVuZGVyc3RhbmQgdGhlIGRhdGEgZmxvdyBhbmQgYXZhaWxhYmxlIGNvbnRyb2xzLiBUaGF0JiMzOTtzIHdoZXJlIHRoZSByZWFsIG1hZ2ljIGhhcHBlbnMsIHNvIGxldCYjMzk7cyBzZWUgd2hhdCYjMzk7cyB3aGF0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMSAxNzozNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtkcGxsX2NtZF9waW5fZ2V0X29uZSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvZHBsbC9kcGxsX25ldGxpbmsuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL2RwbGwvZHBsbF9uZXRsaW5rLmM9Njk0PXN0YXRpYyBpbnRcbmRyaXZlcnMvZHBsbC9kcGxsX25ldGxpbmsuYzo2OTU6ZHBsbF9jbWRfcGluX2dldF9vbmUoc3RydWN0IHNrX2J1ZmYgKm1zZywgc3RydWN0IGRwbGxfcGluICpwaW4sXG5kcml2ZXJzL2RwbGwvZHBsbF9uZXRsaW5rLmMtNjk2LVx0XHQgICAgIHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjaylcbi0tXG5kcml2ZXJzL2RwbGwvZHBsbF9uZXRsaW5rLmM9ODg5PWRwbGxfcGluX2V2ZW50X3NlbmQoZW51bSBkcGxsX2NtZCBldmVudCwgc3RydWN0IGRwbGxfcGluICpwaW4pXG4tLVxuZHJpdmVycy9kcGxsL2RwbGxfbmV0bGluay5jLTkwNC1cdFx0Z290byBlcnJfZnJlZV9tc2c7XG5kcml2ZXJzL2RwbGwvZHBsbF9uZXRsaW5rLmM6OTA1Olx0cmV0ID0gZHBsbF9jbWRfcGluX2dldF9vbmUobXNnLCBwaW4sIE5VTEwpO1xuZHJpdmVycy9kcGxsL2RwbGxfbmV0bGluay5jLTkwNi1cdGlmIChyZXQpXG4tLVxuZHJpdmVycy9kcGxsL2RwbGxfbmV0bGluay5jPTE3ODQ9aW50IGRwbGxfbmxfcGluX2dldF9kb2l0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pXG4tLVxuZHJpdmVycy9kcGxsL2RwbGxfbmV0bGluay5jLTE4MDEtXHR9XG5kcml2ZXJzL2RwbGwvZHBsbF9uZXRsaW5rLmM6MTgwMjpcdHJldCA9IGRwbGxfY21kX3Bpbl9nZXRfb25lKG1zZywgcGluLCBpbmZvLVx1MDAzZWV4dGFjayk7XG5kcml2ZXJzL2RwbGwvZHBsbF9uZXRsaW5rLmMtMTgwMy1cdGlmIChyZXQpIHtcbi0tXG5kcml2ZXJzL2RwbGwvZHBsbF9uZXRsaW5rLmM9MTgxMj1pbnQgZHBsbF9ubF9waW5fZ2V0X2R1bXBpdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0bGlua19jYWxsYmFjayAqY2IpXG4tLVxuZHJpdmVycy9kcGxsL2RwbGxfbmV0bGluay5jLTE4MzItXHRcdH1cbmRyaXZlcnMvZHBsbC9kcGxsX25ldGxpbmsuYzoxODMzOlx0XHRyZXQgPSBkcGxsX2NtZF9waW5fZ2V0X29uZShza2IsIHBpbiwgY2ItXHUwMDNlZXh0YWNrKTtcbmRyaXZlcnMvZHBsbC9kcGxsX25ldGxpbmsuYy0xODM0LVx0XHRpZiAocmV0KSB7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzExIDE3OjM0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDY2MTAKCQkJCQkJCW91dHB1dDogNDMKCQkJCQkJCXRob3VnaHRzOiAxMjQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBEUExMIE5ldGxpbmsgSGFuZGxlcnMqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoZXNlIG5ldGxpbmsgaGFuZGxlcnMsIGBkcGxsX25sX3Bpbl9nZXRfZG9pdGAgYW5kIGBkcGxsX25sX3Bpbl9nZXRfZHVtcGl0YC4gVGhleSYjMzk7cmUgaGFuZGxpbmcgYERQTExfQ01EX1BJTl9HRVRgLCB3aGljaCBpbW1lZGlhdGVseSBzdWdnZXN0cyB0aGlzIGZ1bmN0aW9uYWxpdHkgaXMgYWNjZXNzaWJsZSBmcm9tIHVzZXIgc3BhY2UsIGFzc3VtaW5nIHRoZSBEUExMIHN1YnN5c3RlbSBpcyBlbmFibGVkIGFuZCB0aGVyZSBhcmUgRFBMTCBkZXZpY2VzIHByZXNlbnQuIEJ1dCBhIHF1ZXN0aW9uIHBvcHMgaW50byBteSBoZWFkOiBkb2VzIGl0ICpyZXF1aXJlKiBhIERQTEwgZGV2aWNlIHRvIGJlIHJlZ2lzdGVyZWQsIG9yIGNhbiB0aGlzIGNvbW1hbmQgYmUgaXNzdWVkIHJlZ2FyZGxlc3M/IEkgc3VzcGVjdCBpdCBkb2VzIHJlcXVpcmUgYSByZWdpc3RlcmVkIGRldmljZSwgc2luY2UgdGhlIG5hbWUgaW1wbGllcyByZXRyaWV2YWwgb2YgYSAmIzM0O3BpbiYjMzQ7LCBhbmQgdGhhdCYjMzk7cyBsaWtlbHkgdGllZCB0byBhIHNwZWNpZmljIERQTEwgZGV2aWNlIGluc3RhbmNlLiBUbyBiZSBzdXJlLCBJIHNob3VsZCBjaGVjayB0aGUgaW1wbGVtZW50YXRpb24gb2YgYGRwbGxfbmxfcGluX2dldF9kb2l0YCB0byBzZWUgZXhhY3RseSB3aGF0IGtpbmQgb2YgbG9va3VwcyBpdCBpcyBwZXJmb3JtaW5nLiBMZXQmIzM5O3MgZGlnIGludG8gdGhhdCBmdW5jdGlvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTEgMTc6MzQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL2RwbGwvZHBsbF9uZXRsaW5rLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxNzg0LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDMwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzE3ODQ6XHRpbnQgZHBsbF9ubF9waW5fZ2V0X2RvaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGdlbmxfaW5mbyAqaW5mbylcbjE3ODU6XHR7XG4xNzg2Olx0XHRzdHJ1Y3QgZHBsbF9waW4gKnBpbiA9IGluZm8tXHUwMDNldXNlcl9wdHJbMF07XG4xNzg3Olx0XHRzdHJ1Y3Qgc2tfYnVmZiAqbXNnO1xuMTc4ODpcdFx0c3RydWN0IG5sYXR0ciAqaGRyO1xuMTc4OTpcdFx0aW50IHJldDtcbjE3OTA6XHRcbjE3OTE6XHRcdGlmICghcGluKVxuMTc5MjpcdFx0XHRyZXR1cm4gLUVOT0RFVjtcbjE3OTM6XHRcdG1zZyA9IGdlbmxtc2dfbmV3KE5MTVNHX0dPT0RTSVpFLCBHRlBfS0VSTkVMKTtcbjE3OTQ6XHRcdGlmICghbXNnKVxuMTc5NTpcdFx0XHRyZXR1cm4gLUVOT01FTTtcbjE3OTY6XHRcdGhkciA9IGdlbmxtc2dfcHV0X3JlcGx5KG1zZywgaW5mbywgXHUwMDI2ZHBsbF9ubF9mYW1pbHksIDAsXG4xNzk3Olx0XHRcdFx0XHREUExMX0NNRF9QSU5fR0VUKTtcbjE3OTg6XHRcdGlmICghaGRyKSB7XG4xNzk5Olx0XHRcdG5sbXNnX2ZyZWUobXNnKTtcbjE4MDA6XHRcdFx0cmV0dXJuIC1FTVNHU0laRTtcbjE4MDE6XHRcdH1cbjE4MDI6XHRcdHJldCA9IGRwbGxfY21kX3Bpbl9nZXRfb25lKG1zZywgcGluLCBpbmZvLVx1MDAzZWV4dGFjayk7XG4xODAzOlx0XHRpZiAocmV0KSB7XG4xODA0Olx0XHRcdG5sbXNnX2ZyZWUobXNnKTtcbjE4MDU6XHRcdFx0cmV0dXJuIHJldDtcbjE4MDY6XHRcdH1cbjE4MDc6XHRcdGdlbmxtc2dfZW5kKG1zZywgaGRyKTtcbjE4MDg6XHRcbjE4MDk6XHRcdHJldHVybiBnZW5sbXNnX3JlcGx5KG1zZywgaW5mbyk7XG4xODEwOlx0fVxuMTgxMTpcdFxuMTgxMjpcdGludCBkcGxsX25sX3Bpbl9nZXRfZHVtcGl0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRsaW5rX2NhbGxiYWNrICpjYilcbjE4MTM6XHR7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzExIDE3OjM0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDc0NDgKCQkJCQkJCW91dHB1dDogMjMKCQkJCQkJCXRob3VnaHRzOiAzNgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipEUExMIERyaXZlciBUZXN0aW5nOiBBIFF1aWNrIFRob3VnaHQgUHJvY2VzcyoqCgpPa2F5LCBzbyBJJiMzOTttIHRoaW5raW5nIEkgbmVlZCB0byByZWdpc3RlciBhIHBpbiBmb3IgdGhpcyB0byB3b3JrLiBUaGF0JiMzOTtzIHRoZSBmaXJzdCBzdGVwLiBOb3csIEkgbmVlZCB0byBnZXQgdGhpcyB0ZXN0ZWQgcHJvcGVybHkuIEkmIzM5O20gd29uZGVyaW5nIGlmIHRoZXJlJiMzOTtzIGEgZ29vZCB2aXJ0dWFsIG9yIG1vY2sgRFBMTCBkcml2ZXIgb3V0IHRoZXJlIHRoYXQgSSBjb3VsZCB1c2UgZm9yIHRoaXM/IFNvbWV0aGluZyB0byBzaW11bGF0ZSB0aGUgaGFyZHdhcmUgZW52aXJvbm1lbnQgd2l0aG91dCBhY3R1YWxseSBoYXZpbmcgdGhlIGhhcmR3YXJlIHByZXNlbnQuIEl0IHdvdWxkIGJlIGlkZWFsIGZvciBhIGNvbnRyb2xsZWQgdGVzdGluZyBlbnZpcm9ubWVudC4gTGV0IG1lIGRvIGEgcXVpY2sgc2VhcmNoIGFuZCBzZWUgd2hhdCB0aGUgb3B0aW9ucyBhcmUgZm9yIHRoZXNlIERQTEwgZHJpdmVycy4gSG9wZWZ1bGx5LCBJIGNhbiBmaW5kIHNvbWV0aGluZyBzdWl0YWJsZSBxdWlja2x5LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMSAxNzozNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmNvZGVzZWFyY2gtZGlyLWluZGV4PC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtEaXImIzM0OzogJiMzNDtkcml2ZXJzL2RwbGwmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZXMmIzM0OzogWwogICAgJiMzNDtkcGxsX2NvcmUuYyYjMzQ7LAogICAgJiMzNDtkcGxsX2NvcmUuaCYjMzQ7LAogICAgJiMzNDtkcGxsX25ldGxpbmsuYyYjMzQ7LAogICAgJiMzNDtkcGxsX25ldGxpbmsuaCYjMzQ7LAogICAgJiMzNDtkcGxsX25sLmMmIzM0OywKICAgICYjMzQ7ZHBsbF9ubC5oJiMzNDsKICBdLAogICYjMzQ7U3ViZGlycyYjMzQ7OiBbCiAgICAmIzM0O3psMzA3M3gmIzM0OwogIF0KfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMSAxNzozNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA3NzE3CgkJCQkJCQlvdXRwdXQ6IDMwCgkJCQkJCQl0aG91Z2h0czogOTkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqSW52ZXN0aWdhdGluZyBEUExMIENvZGUgQWNjZXNzKioKCk9rYXksIHNvIEkmIzM5O20gdHJ5aW5nIHRvIGZpZ3VyZSBvdXQgaG93IHN5emthbGxlciBpcyBoaXR0aW5nIHRoaXMgRFBMTCBjb2RlLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gbG9vayBhdCB0aGUgTWVsbGFub3ggZHJpdmVyLCBzcGVjaWZpY2FsbHkgc29tZXRoaW5nIGluIGBkcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvZHBsbC5jYCBvciBhIHNpbWlsYXIgZmlsZS4gVGhhdCYjMzk7cyB1c3VhbGx5IHdoZXJlIHRoZXNlIHR5cGVzIG9mIHRoaW5ncyByZXNpZGUuIEJ1dCwgaGFuZyBvbi4uLiBubywgdGhlcmUmIzM5O3Mgbm8gZGVkaWNhdGVkIG1vY2sgZHJpdmVyIGluIGBkcml2ZXJzL2RwbGxgLCB0aGF0IHdvdWxkIGhhdmUgYmVlbiB0b28gZWFzeSEKCkFscmlnaHQsIGxldCYjMzk7cyBwaXZvdC4gQ291bGQgaXQgYmUgYSBQVFAgZHJpdmVyLXJlbGF0ZWQgaXNzdWU/IExldCBtZSBjaGVjayBgZHJpdmVycy9wdHAvcHRwX21vY2suY2AuLi4gbm9wZSwgbm90IHRoZXJlIGVpdGhlci4gVGhpcyBpcyBiZWNvbWluZyBtb3JlIGludGVyZXN0aW5nLgoKVGhlIGNvcmUgcXVlc3Rpb24gaXMsICpob3cqIGlzIHN5emthbGxlciBtYW5hZ2luZyB0byByZWFjaCB0aGlzIGNvZGUgaW4gdGhlIGZpcnN0IHBsYWNlPyBJdCBtZWFucyBzeXprYWxsZXIgaXMgbG9hZGluZyBzb21lIGNvbXBvbmVudCB0byBjYWxsIERQTEwgY29kZS4gRG9lcyB0aGUgdGVzdGluZyBlbnZpcm9ubWVudCBpbmNsdWRlIGxvYWRpbmcgYW5kIHVzaW5nIGEgbmV0d29yayBkZXZpY2Ugc2ltdWxhdG9yLCBsaWtlIGBuZXRkZXZzaW1gLCBvciBzb21ldGhpbmcgY29tcGFyYWJsZT8gQW5kIGlmIGl0JiMzOTtzIGxvYWRpbmcgYSBzaW11bGF0b3IsIGRvZXMgdGhhdCBzaW11bGF0b3IgaGF2ZSBhbnkgRFBMTCBmdW5jdGlvbmFsaXR5IGludGVncmF0ZWQ/IFRoYXQmIzM5O3MgcHJvYmFibHkgd2hlcmUgdGhlIHRyaWdnZXIgaXMuIEkgbmVlZCB0byBpbnZlc3RpZ2F0ZSB0aGUgY2FwYWJpbGl0aWVzIG9mIGFueSBzaW11bGF0ZWQgbmV0d29yayBkZXZpY2VzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMSAxNzozNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+RXJyb3I6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5ubyBtYXRjaGVzPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2RwbGwmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9uZXRkZXZzaW0mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7ZXJyb3ImIzM0OzogJiMzNDtubyBtYXRjaGVzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMSAxNzozNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA4MTI0CgkJCQkJCQlvdXRwdXQ6IDIzCgkJCQkJCQl0aG91Z2h0czogMTUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgcHJlc2VudGVkIGluIHRoZSBmaXJzdCBwZXJzb246CgoqKkludmVzdGlnYXRpbmcgRFBMTCBEcml2ZXIgU2VsZWN0aW9uKioKCkFscmlnaHQsIGxldCYjMzk7cyBnZXQgZG93biB0byBicmFzcyB0YWNrcy4gTXkgaW5pdGlhbCB0aG91Z2h0IHByb2Nlc3MgaXMgZ2VhcmVkIHRvd2FyZCBkaWFnbm9zaW5nIHRoZSBwb3RlbnRpYWwgZm9yIGEgRFBMTCBjb25maWd1cmF0aW9uLiBGaXJzdCwgSSBuZWVkIHRvIG1ldGhvZGljYWxseSBjaGVjayBmb3IgYW55IHZpcnR1YWwgZHJpdmVycyB0aGF0IGFyZSBkZXNpZ25lZCB0byBzZWxlY3QgRFBMTC4gVGhpcyBpcyB0aGUgZmlyc3QgbG9naWNhbCBzdGVwLiBJZGVudGlmeWluZyB0aGVzZSBkcml2ZXJzIHdpbGwgaW1tZWRpYXRlbHkgZ2l2ZSBtZSBhIHN0YXJ0aW5nIHBvaW50LCBhbmQgSSYjMzk7bGwga25vdyB3aGVyZSB0byBsb29rIGlmIEkgY2FuIGNvbmZpcm0gYSBEUExMIGluc3RhbmNlLiBJIHdhbnQgdG8gcnVsZSBvdXQgdGhlIGJhc2ljIGNhdXNlcyBmaXJzdCwgc28gSSB3YW50IHRvIGtub3cgaWYgdGhlcmUgaXMgYW55dGhpbmcgcnVubmluZywgdGhhdCYjMzk7cyBzdXBwb3NlZCB0byBiZSBEUExMLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMSAxNzozNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtzZWxlY3QgRFBMTCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0OyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL2RwbGwvemwzMDczeC9LY29uZmlnPTM9Y29uZmlnIFpMMzA3M1hcbi0tXG5kcml2ZXJzL2RwbGwvemwzMDczeC9LY29uZmlnLTUtXHRkZXBlbmRzIG9uIE5FVFxuZHJpdmVycy9kcGxsL3psMzA3M3gvS2NvbmZpZzo2Olx0c2VsZWN0IERQTExcbmRyaXZlcnMvZHBsbC96bDMwNzN4L0tjb25maWctNy1cdHNlbGVjdCBORVRfREVWTElOS1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL0tjb25maWc9MjkxPWNvbmZpZyBJQ0Vcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9LY29uZmlnLTMwNS1cdHNlbGVjdCBQTERNRldcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL0tjb25maWc6MzA2Olx0c2VsZWN0IERQTExcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL0tjb25maWctMzA3LVx0aGVscFxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9LY29uZmlnPTIwMz1jb25maWcgTUxYNV9EUExMXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL0tjb25maWctMjA1LVx0ZGVwZW5kcyBvbiBORVRERVZJQ0VTIFx1MDAyNlx1MDAyNiBFVEhFUk5FVCBcdTAwMjZcdTAwMjYgUENJIFx1MDAyNlx1MDAyNiBNTFg1X0NPUkVcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9LY29uZmlnOjIwNjpcdHNlbGVjdCBEUExMXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvS2NvbmZpZy0yMDctXHRoZWxwXG4tLVxuZHJpdmVycy9wdHAvS2NvbmZpZz0yMTA9Y29uZmlnIFBUUF8xNTg4X0NMT0NLX09DUFxuLS1cbmRyaXZlcnMvcHRwL0tjb25maWctMjE5LVx0c2VsZWN0IENSQzE2XG5kcml2ZXJzL3B0cC9LY29uZmlnOjIyMDpcdHNlbGVjdCBEUExMXG5kcml2ZXJzL3B0cC9LY29uZmlnLTIyMS1cdGhlbHBcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTEgMTc6MzQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogODcxNwoJCQkJCQkJb3V0cHV0OiAzMAoJCQkJCQkJdGhvdWdodHM6IDEyMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgRHJpdmVyIElkZW50aWZpY2F0aW9uIGFuZCBDb25maWd1cmF0aW9uKioKCk9rYXksIHNvIG5vbmUgb2YgdGhlc2UgbG9vayBsaWtlIHZpcnR1YWwgZHJpdmVycy4gYElDRWDigJR0aGF0JiMzOTtzIHRoZSBJbnRlbCBFdGhlcm5ldCBDb25uZWN0aW9uIEU4MDAgU2VyaWVzLCBJIHJlY29nbml6ZSB0aGF0LiBgTUxYNV9EUExMYCBpcyBNZWxsYW5veC4gQW5kIGBQVFBfMTU4OF9DTE9DS19PQ1BgIGlzIHRoZSBPcGVuQ29tcHV0ZSBUaW1lQ2FyZOKAlGdvdCBpdC4gTm93LCBgWkwzMDczWGAuLi4gdGhhdCYjMzk7cyB0aGUgTWljcm9jaGlwIEF6dXJpdGUuIEhtbSwgSSB3b25kZXIgaWYgaXQgY2FuIGJlIGRpcmVjdGx5IGluc3RhbnRpYXRlZCwgZnJvbSB1c2VyIHNwYWNlLCB2aWEgSTJDIG9yIFNQST8gVGhhdCB3b3VsZCBiZSBpbnRlcmVzdGluZy4gTXkgaW5zdGluY3QgaXMgdGhhdCBpdCAqbWlnaHQqIGJlIHBvc3NpYmxlLCBkZXBlbmRpbmcgb24gdGhlIGRlc2lnbi4gSSYjMzk7bGwgbmVlZCB0byBkaWcgaW50byB0aGUgZHJpdmVyIGNvZGUgdG8gY29uZmlybSB0aGF0LiBMZXQmIzM5O3Mgc3RhcnQgYnkgbG9va2luZyBhdCBgZHJpdmVycy9kcGxsL3psMzA3M3gvemwzMDczeC5jYCBvciBzb21ldGhpbmcgc2ltaWxhciB0byBzZWUgaG93IGl0JiMzOTtzIGluaXRpYWxpemVkIGFuZCBjb25maWd1cmVkLiBUaGF0IHNob3VsZCB0ZWxsIG1lIHdoYXQgaW50ZXJmYWNlcyBhcmUgZXhwb3NlZCBhbmQgd2hldGhlciB1c2VyLXNwYWNlIGNvbnRyb2wgaXMgYW4gb3B0aW9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMSAxNzozNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmNvZGVzZWFyY2gtZGlyLWluZGV4PC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtEaXImIzM0OzogJiMzNDtkcml2ZXJzL2RwbGwvemwzMDczeCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlcyYjMzQ7OiBbCiAgICAmIzM0O2NoYW4uYyYjMzQ7LAogICAgJiMzNDtjaGFuLmgmIzM0OywKICAgICYjMzQ7Y29yZS5jJiMzNDssCiAgICAmIzM0O2NvcmUuaCYjMzQ7LAogICAgJiMzNDtkZXZsaW5rLmMmIzM0OywKICAgICYjMzQ7ZGV2bGluay5oJiMzNDssCiAgICAmIzM0O2RwbGwuYyYjMzQ7LAogICAgJiMzNDtkcGxsLmgmIzM0OywKICAgICYjMzQ7Zmxhc2guYyYjMzQ7LAogICAgJiMzNDtmbGFzaC5oJiMzNDssCiAgICAmIzM0O2Z3LmMmIzM0OywKICAgICYjMzQ7ZncuaCYjMzQ7LAogICAgJiMzNDtpMmMuYyYjMzQ7LAogICAgJiMzNDtvdXQuYyYjMzQ7LAogICAgJiMzNDtvdXQuaCYjMzQ7LAogICAgJiMzNDtwcm9wLmMmIzM0OywKICAgICYjMzQ7cHJvcC5oJiMzNDssCiAgICAmIzM0O3JlZi5jJiMzNDssCiAgICAmIzM0O3JlZi5oJiMzNDssCiAgICAmIzM0O3JlZ3MuaCYjMzQ7LAogICAgJiMzNDtzcGkuYyYjMzQ7LAogICAgJiMzNDtzeW50aC5jJiMzNDssCiAgICAmIzM0O3N5bnRoLmgmIzM0OwogIF0sCiAgJiMzNDtTdWJkaXJzJiMzNDs6IG51bGwKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMSAxNzozNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA5MjQ3CgkJCQkJCQlvdXRwdXQ6IDQ0CgkJCQkJCQl0aG91Z2h0czogODIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIERyaXZlciBJbnRlZ3JhdGlvbiBmb3IgU3l6a2FsbGVyIFRlc3RpbmcqKgoKT2theSwgc28gSSBzZWUgdGhpcyBjb2RlIGlzIHdvcmtpbmcgd2l0aCBgaTJjLmNgIGFuZCBgc3BpLmNgLiBUaGF0IGltbWVkaWF0ZWx5IHRlbGxzIG1lIGl0JiMzOTtzIGxpa2VseSBkZWFsaW5nIHdpdGggZWl0aGVyIGFuIEkyQyBvciBTUEkgZGV2aWNlLiBBIGdvb2Qgc3RhcnRpbmcgcG9pbnQgZm9yIHRlc3Rpbmcgd2l0aCBzeXprYWxsZXIsIHRoZW4uIFRoZSBzeXN0ZW0gc2hvdWxkIGFsbG93IHN5emthbGxlciB0byBjcmVhdGUgaW5zdGFuY2VzIG9mIHRoZXNlIGRldmljZXMsIGJ1dCB3aGF0IGludGVyZmFjZXMgZG9lcyBpdCBzdXBwb3J0PyBBaCwgaXQgc2VlbXMgbGlrZSBgaTJjLXN0dWJgLCBgaTJjLWRldmAsIGFuZCB0aGUgcGxhaW4gb2xkIGBzcGlgIG1vY2sgaW50ZXJmYWNlcyBhcmUgdGhlIHdheSB0byBnbyBoZXJlLiBMZXQmIzM5O3MgZGVsdmUgaW4gYW5kIHNlZS4gTm93LCBsZXQmIzM5O3MgZHJpbGwgZG93biBpbnRvIGEgc3BlY2lmaWMgZXhhbXBsZS4gSSB0aGluayBjaGVja2luZyBvdXQgYGRyaXZlcnMvZHBsbC96bDMwNzN4L2kyYy5jYCBzaG91bGQgYmUgdXNlZnVsLiBUaGF0IGdpdmVzIHVzIGEgY29uY3JldGUgaW1wbGVtZW50YXRpb24gdG8gZXhhbWluZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTEgMTc6MzQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL2RwbGwvemwzMDczeC9pMmMuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDEsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNTAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7ICAgMTpcdC8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcbiAgIDI6XHRcbiAgIDM6XHQjaW5jbHVkZSBcdTAwM2NsaW51eC9kZXZfcHJpbnRrLmhcdTAwM2VcbiAgIDQ6XHQjaW5jbHVkZSBcdTAwM2NsaW51eC9lcnIuaFx1MDAzZVxuICAgNTpcdCNpbmNsdWRlIFx1MDAzY2xpbnV4L2kyYy5oXHUwMDNlXG4gICA2Olx0I2luY2x1ZGUgXHUwMDNjbGludXgvbW9kdWxlLmhcdTAwM2VcbiAgIDc6XHQjaW5jbHVkZSBcdTAwM2NsaW51eC9yZWdtYXAuaFx1MDAzZVxuICAgODpcdFxuICAgOTpcdCNpbmNsdWRlIFwmIzM0O2NvcmUuaFwmIzM0O1xuICAxMDpcdFxuICAxMTpcdHN0YXRpYyBpbnQgemwzMDczeF9pMmNfcHJvYmUoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudClcbiAgMTI6XHR7XG4gIDEzOlx0XHRzdHJ1Y3QgZGV2aWNlICpkZXYgPSBcdTAwMjZjbGllbnQtXHUwMDNlZGV2O1xuICAxNDpcdFx0c3RydWN0IHpsMzA3M3hfZGV2ICp6bGRldjtcbiAgMTU6XHRcbiAgMTY6XHRcdHpsZGV2ID0gemwzMDczeF9kZXZtX2FsbG9jKGRldik7XG4gIDE3Olx0XHRpZiAoSVNfRVJSKHpsZGV2KSlcbiAgMTg6XHRcdFx0cmV0dXJuIFBUUl9FUlIoemxkZXYpO1xuICAxOTpcdFxuICAyMDpcdFx0emxkZXYtXHUwMDNlcmVnbWFwID0gZGV2bV9yZWdtYXBfaW5pdF9pMmMoY2xpZW50LCBcdTAwMjZ6bDMwNzN4X3JlZ21hcF9jb25maWcpO1xuICAyMTpcdFx0aWYgKElTX0VSUih6bGRldi1cdTAwM2VyZWdtYXApKVxuICAyMjpcdFx0XHRyZXR1cm4gZGV2X2Vycl9wcm9iZShkZXYsIFBUUl9FUlIoemxkZXYtXHUwMDNlcmVnbWFwKSxcbiAgMjM6XHRcdFx0XHRcdCAgICAgXCYjMzQ7RmFpbGVkIHRvIGluaXRpYWxpemUgcmVnbWFwXFxuXCYjMzQ7KTtcbiAgMjQ6XHRcbiAgMjU6XHRcdHJldHVybiB6bDMwNzN4X2Rldl9wcm9iZSh6bGRldik7XG4gIDI2Olx0fVxuICAyNzpcdFxuICAyODpcdHN0YXRpYyBjb25zdCBzdHJ1Y3QgaTJjX2RldmljZV9pZCB6bDMwNzN4X2kyY19pZFtdID0ge1xuICAyOTpcdFx0eyAubmFtZSA9IFwmIzM0O3psMzA3MzFcJiMzNDsgfSxcbiAgMzA6XHRcdHsgLm5hbWUgPSBcJiMzNDt6bDMwNzMyXCYjMzQ7IH0sXG4gIDMxOlx0XHR7IC5uYW1lID0gXCYjMzQ7emwzMDczM1wmIzM0OyB9LFxuICAzMjpcdFx0eyAubmFtZSA9IFwmIzM0O3psMzA3MzRcJiMzNDsgfSxcbiAgMzM6XHRcdHsgLm5hbWUgPSBcJiMzNDt6bDMwNzM1XCYjMzQ7IH0sXG4gIDM0Olx0XHR7IC8qIHNlbnRpbmVsICovIH1cbiAgMzU6XHR9O1xuICAzNjpcdE1PRFVMRV9ERVZJQ0VfVEFCTEUoaTJjLCB6bDMwNzN4X2kyY19pZCk7XG4gIDM3Olx0XG4gIDM4Olx0c3RhdGljIGNvbnN0IHN0cnVjdCBvZl9kZXZpY2VfaWQgemwzMDczeF9pMmNfb2ZfbWF0Y2hbXSA9IHtcbiAgMzk6XHRcdHsgLmNvbXBhdGlibGUgPSBcJiMzNDttaWNyb2NoaXAsemwzMDczMVwmIzM0OyB9LFxuICA0MDpcdFx0eyAuY29tcGF0aWJsZSA9IFwmIzM0O21pY3JvY2hpcCx6bDMwNzMyXCYjMzQ7IH0sXG4gIDQxOlx0XHR7IC5jb21wYXRpYmxlID0gXCYjMzQ7bWljcm9jaGlwLHpsMzA3MzNcJiMzNDsgfSxcbiAgNDI6XHRcdHsgLmNvbXBhdGlibGUgPSBcJiMzNDttaWNyb2NoaXAsemwzMDczNFwmIzM0OyB9LFxuICA0MzpcdFx0eyAuY29tcGF0aWJsZSA9IFwmIzM0O21pY3JvY2hpcCx6bDMwNzM1XCYjMzQ7IH0sXG4gIDQ0Olx0XHR7IC8qIHNlbnRpbmVsICovIH1cbiAgNDU6XHR9O1xuICA0NjpcdE1PRFVMRV9ERVZJQ0VfVEFCTEUob2YsIHpsMzA3M3hfaTJjX29mX21hdGNoKTtcbiAgNDc6XHRcbiAgNDg6XHRzdGF0aWMgc3RydWN0IGkyY19kcml2ZXIgemwzMDczeF9pMmNfZHJpdmVyID0ge1xuICA0OTpcdFx0LmRyaXZlciA9IHtcbiAgNTA6XHRcdFx0Lm5hbWUgPSBcJiMzNDt6bDMwNzN4LWkyY1wmIzM0OyxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTEgMTc6MzQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTA0MDEKCQkJCQkJCW91dHB1dDogNDIKCQkJCQkJCXRob3VnaHRzOiA4OQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgU3l6a2FsbGVyJiMzOTtzIEkyQyBEZXZpY2UgSW5zdGFudGlhdGlvbiBDYXBhYmlsaXRpZXMqKgoKT2theSwgc28gSSYjMzk7bSB0aGlua2luZywgeWVzLCBzeXprYWxsZXIgKmNhbiogZGVmaW5pdGVseSBoYW5kbGUgdGhlIGluc3RhbnRpYXRpb24gb2YgdGhpcyBkZXZpY2UsIHRoZSBaTDMwNzNYLCB1c2luZyBuZXRsaW5rLCBzcGVjaWZpY2FsbHkgdGhyb3VnaCBgSTJDX05FV19ERVZJQ0VgIG9yIGEgc2ltaWxhciBtZXRob2QsIG9yIGV2ZW4gdmlhIHN5c2ZzIGFuZCB0aGUgYG5ld19kZXZpY2VgIGVudHJ5LiBIYW5nIG9uLi4uIGlzbiYjMzk7dCB0aGVyZSBhbHJlYWR5IHN1cHBvcnQgZm9yIHRoYXQgaW4gc3l6a2FsbGVyIHZpYSBzeXNmcz8gVGhhdCYjMzk7cyByaWdodCwgdGhlcmUgaXMuIEV4Y2VsbGVudCEgVGhhdCBtYWtlcyBgWkwzMDczWF9JMkNgIGEgdmVyeSBzZW5zaWJsZSBjb25maWd1cmF0aW9uIHRvIGVuYWJsZS4gTm93LCBsZXQmIzM5O3MganVzdCBzaGlmdCBnZWFycyBhbmQgcXVpY2tseSB0YWtlIGEgbG9vayBhdCB0aGUgYFpMMzA3M1hfU1BJYCBjb25maWcgYW5kIHNlZSB3aGF0JiMzOTtzIHdoYXQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzExIDE3OjM0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy9kcGxsL3psMzA3M3gvS2NvbmZpZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDE3LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDIwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAgMTc6XHRjb25maWcgWkwzMDczWF9JMkNcbiAgMTg6XHRcdHRyaXN0YXRlIFwmIzM0O0kyQyBidXMgaW1wbGVtZW50YXRpb24gZm9yIE1pY3JvY2hpcCBBenVyaXRlIGRldmljZXNcJiMzNDtcbiAgMTk6XHRcdGRlcGVuZHMgb24gSTJDIFx1MDAyNlx1MDAyNiBORVRcbiAgMjA6XHRcdHNlbGVjdCBSRUdNQVBfSTJDXG4gIDIxOlx0XHRzZWxlY3QgWkwzMDczWFxuICAyMjpcdFx0aGVscFxuICAyMzpcdFx0ICBUaGlzIGlzIEkyQyBidXMgaW1wbGVtZW50YXRpb24gZm9yIE1pY3JvY2hpcCBBenVyaXRlIERQTEwvUFRQL1N5bmNFXG4gIDI0Olx0XHQgIGRldmljZXMuXG4gIDI1Olx0XG4gIDI2Olx0XHQgIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZSBtb2R1bGUgd2lsbFxuICAyNzpcdFx0ICBiZSBjYWxsZWQgemwzMDczeF9pMmMuXG4gIDI4Olx0XG4gIDI5Olx0Y29uZmlnIFpMMzA3M1hfU1BJXG4gIDMwOlx0XHR0cmlzdGF0ZSBcJiMzNDtTUEkgYnVzIGltcGxlbWVudGF0aW9uIGZvciBNaWNyb2NoaXAgQXp1cml0ZSBkZXZpY2VzXCYjMzQ7XG4gIDMxOlx0XHRkZXBlbmRzIG9uIE5FVCBcdTAwMjZcdTAwMjYgU1BJXG4gIDMyOlx0XHRzZWxlY3QgUkVHTUFQX1NQSVxuICAzMzpcdFx0c2VsZWN0IFpMMzA3M1hcbiAgMzQ6XHRcdGhlbHBcbiAgMzU6XHRcdCAgVGhpcyBpcyBTUEkgYnVzIGltcGxlbWVudGF0aW9uIGZvciBNaWNyb2NoaXAgQXp1cml0ZSBEUExML1BUUC9TeW5jRVxuICAzNjpcdFx0ICBkZXZpY2VzLlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMSAxNzozNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMTAwOAoJCQkJCQkJb3V0cHV0OiA0MgoJCQkJCQkJdGhvdWdodHM6IDIxNgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBbmFseXNpcyBvZiBEUExMIE5ldGxpbmsgSW50ZXJmYWNlIFJlYWNoYWJpbGl0eSoqCgpPa2F5LCBoZXJlJiMzOTtzIGhvdyBJJiMzOTttIHRoaW5raW5nIHRocm91Z2ggdGhpcy4gRW5hYmxpbmcgYm90aCBgWkwzMDczWF9JMkNgIGFuZCBgWkwzMDczWF9TUElgIGVmZmVjdGl2ZWx5IHRyaWdnZXJzIHRoZSBgWkwzMDczWGAgc2VsZWN0aW9uLCB3aGljaCBpbiB0dXJuIG1lYW5zIHRoZSBgRFBMTGAgc3Vic3lzdGVtIGdldHMgYWN0aXZhdGVkLiAgTXkgcHJpbWFyeSBjb25jZXJuIGlzIG1ha2luZyB0aGUgRFBMTCBuZXRsaW5rIGludGVyZmFjZSBhY2Nlc3NpYmxlIGFuZCwgY3J1Y2lhbGx5LCB0ZXN0YWJsZSwgZXNwZWNpYWxseSBnaXZlbiB0aGUgbGlrZWxpaG9vZCBvZiBTeXprYWxsZXIgdGFyZ2V0aW5nIGl0LgoKTm93LCBsZXQmIzM5O3MgZHJpbGwgZG93bi4gSSYjMzk7bSBmb2N1c2luZyBvbiB3aGV0aGVyIGBkcGxsX21zZ19hZGRfcGluX3JlZl9zeW5jYCBpcyByZWFjaGFibGUuICBJIHNlZSB0aGF0IGl0JiMzOTtzIGNhbGxlZCBieSBgZHBsbF9jbWRfcGluX2dldF9vbmVgLCB3aGljaCBpcyBpdHNlbGYgY2FsbGVkIGJ5IGBkcGxsX25sX3Bpbl9nZXRfZG9pdGAgYW5kIGBkcGxsX25sX3Bpbl9nZXRfZHVtcGl0YC4gIFRob3NlIGZ1bmN0aW9ucyBhcmUsIG9mIGNvdXJzZSwgdGhlIG5ldGxpbmsgaGFuZGxlcnMgZm9yIHRoZSBgRFBMTF9DTURfUElOX0dFVGAgY29tbWFuZC4gR2l2ZW4gU3l6a2FsbGVyJiMzOTtzIGFnZ3Jlc3NpdmUgZnV6emluZyBvZiBuZXRsaW5rLCBteSBleHBlY3RhdGlvbiBpcyB0aGF0IHRoaXMgY29kZSB3aWxsICpkZWZpbml0ZWx5KiBiZSBoaXQgaWYgdGhlIERQTEwgc3Vic3lzdGVtIGlzIGFjdGl2ZSBhbmQgYSBkZXZpY2UgaXMgcmVnaXN0ZXJlZC4gIFRoaXMgaXMgYmFzZWQgb24gdGhlIG5hdHVyZSBvZiB0aGUgZnV6emVyLgoKSSYjMzk7bSBtYWtpbmcgYSBtZW50YWwgbm90ZSB0byB2ZXJpZnkgdGhhdCBgZHBsbF9tc2dfYWRkX3Bpbl9yZWZfc3luY2AgaXMgaW5kZWVkIHByZXNlbnQgaW4gYGRyaXZlcnMvZHBsbC9kcGxsX25ldGxpbmsuY2AsIHdoaWNoIEkmIzM5O2xsIGJlIGNvbmZpcm1pbmcgc2hvcnRseS4gVGhpcyBpcyB0byB2ZXJpZnkgdGhlIGFzc3VtcHRpb25zLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMSAxNzozNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvZHBsbC9kcGxsX25ldGxpbmsuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDU1MSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAzMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgNTUxOlx0c3RhdGljIGludFxuIDU1MjpcdGRwbGxfbXNnX2FkZF9waW5fcmVmX3N5bmMoc3RydWN0IHNrX2J1ZmYgKm1zZywgc3RydWN0IGRwbGxfcGluICpwaW4sXG4gNTUzOlx0XHRcdFx0ICBzdHJ1Y3QgZHBsbF9waW5fcmVmICpyZWYsXG4gNTU0Olx0XHRcdFx0ICBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spXG4gNTU1Olx0e1xuIDU1NjpcdFx0Y29uc3Qgc3RydWN0IGRwbGxfcGluX29wcyAqb3BzID0gZHBsbF9waW5fb3BzKHJlZik7XG4gNTU3Olx0XHRzdHJ1Y3QgZHBsbF9kZXZpY2UgKmRwbGwgPSByZWYtXHUwMDNlZHBsbDtcbiA1NTg6XHRcdHZvaWQgKnBpbl9wcml2LCAqcmVmX3N5bmNfcGluX3ByaXY7XG4gNTU5Olx0XHRzdHJ1Y3QgZHBsbF9waW4gKnJlZl9zeW5jX3BpbjtcbiA1NjA6XHRcdGVudW0gZHBsbF9waW5fc3RhdGUgc3RhdGU7XG4gNTYxOlx0XHRzdHJ1Y3QgbmxhdHRyICpuZXN0O1xuIDU2MjpcdFx0dW5zaWduZWQgbG9uZyBpbmRleDtcbiA1NjM6XHRcdGludCByZXQ7XG4gNTY0Olx0XG4gNTY1Olx0XHRwaW5fcHJpdiA9IGRwbGxfcGluX29uX2RwbGxfcHJpdihkcGxsLCBwaW4pO1xuIDU2NjpcdFx0eGFfZm9yX2VhY2goXHUwMDI2cGluLVx1MDAzZXJlZl9zeW5jX3BpbnMsIGluZGV4LCByZWZfc3luY19waW4pIHtcbiA1Njc6XHRcdFx0aWYgKCFkcGxsX3Bpbl9hdmFpbGFibGUocmVmX3N5bmNfcGluKSlcbiA1Njg6XHRcdFx0XHRjb250aW51ZTtcbiA1Njk6XHRcdFx0cmVmX3N5bmNfcGluX3ByaXYgPSBkcGxsX3Bpbl9vbl9kcGxsX3ByaXYoZHBsbCwgcmVmX3N5bmNfcGluKTtcbiA1NzA6XHRcdFx0LyogUGluIG1heSBoYXZlIGJlZW4gdW5yZWdpc3RlcmVkIGZyb20gdGhpcyBkcGxsIGFscmVhZHkgKi9cbiA1NzE6XHRcdFx0aWYgKCFyZWZfc3luY19waW5fcHJpdilcbiA1NzI6XHRcdFx0XHRjb250aW51ZTtcbiA1NzM6XHRcdFx0aWYgKFdBUk5fT04oIW9wcy1cdTAwM2VyZWZfc3luY19nZXQpKVxuIDU3NDpcdFx0XHRcdHJldHVybiAtRU9QTk9UU1VQUDtcbiA1NzU6XHRcdFx0cmV0ID0gb3BzLVx1MDAzZXJlZl9zeW5jX2dldChwaW4sIHBpbl9wcml2LCByZWZfc3luY19waW4sXG4gNTc2Olx0XHRcdFx0XHRcdHJlZl9zeW5jX3Bpbl9wcml2LCBcdTAwMjZzdGF0ZSwgZXh0YWNrKTtcbiA1Nzc6XHRcdFx0aWYgKHJldClcbiA1Nzg6XHRcdFx0XHRyZXR1cm4gcmV0O1xuIDU3OTpcdFx0XHRuZXN0ID0gbmxhX25lc3Rfc3RhcnQobXNnLCBEUExMX0FfUElOX1JFRkVSRU5DRV9TWU5DKTtcbiA1ODA6XHRcdFx0aWYgKCFuZXN0KVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMSAxNzozNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMjE4NgoJCQkJCQkJb3V0cHV0OiA0MgoJCQkJCQkJdGhvdWdodHM6IDM5MAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgYSBLZXJuZWwgUGF0Y2g6IEEgVGhvdWdodCBQcm9jZXNzKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIGtlcm5lbCBwYXRjaC4gSXQgc2VlbXMgbGlrZSBpdCYjMzk7cyBhZGRyZXNzaW5nIGEgcG90ZW50aWFsIHZ1bG5lcmFiaWxpdHkuIFNwZWNpZmljYWxseSwgaXQmIzM5O3MgYWRkaW5nIGEgY2hlY2s6CgpgYGBjCgkJLyogUGluIG1heSBoYXZlIGJlZW4gdW5yZWdpc3RlcmVkIGZyb20gdGhpcyBkcGxsIGFscmVhZHkgKi8KCQlpZiAoIXJlZl9zeW5jX3Bpbl9wcml2KQoJCQljb250aW51ZTsKYGBgCgpUaGlzIGlzIHNtYXJ0LiBJdCBwcmV2ZW50cyBhIE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZSwgb3Igc29tZXRoaW5nIHNpbWlsYXIsIGxhdGVyIG9uIHdoZW4gdGhlIGNvZGUgdXNlcyBgcmVmX3N5bmNfcGluX3ByaXZgLiBHb29kIGNhdGNoISBUaGF0IHZhcmlhYmxlIGdldHMgcGFzc2VkIHRvIGBvcHMtJmd0O3JlZl9zeW5jX2dldGAsIGFuZCBpZiBpdCB3ZXJlIE5VTEwsIHRoZSBkcml2ZXIgY291bGQgZGVmaW5pdGVseSBjcmFzaC4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlLCBkZWZpbml0ZWx5IHNvbWV0aGluZyB3b3J0aCBmdXp6aW5nIHRvIG1ha2Ugc3VyZSBpdCYjMzk7cyByb2J1c3QuCgpOb3csIGxldCBtZSBzZWUgaWYgdGhlcmUgYXJlIGFueSBvdGhlciBjb25maWd1cmF0aW9uIG9wdGlvbnMgSSBzaG91bGQgZW5hYmxlIHdpdGggdGhpcyBwYXRjaC4gSXQgbG9va3MgbGlrZSBgRFBMTGAgaXMgc2VsZWN0ZWQgYnkgc2V2ZXJhbCBvdGhlciBjb25maWd1cmF0aW9ucyBsaWtlIGBaTDMwNzNYX0kyQ2AsIGBaTDMwNzNYX1NQSWAsIGBNTFg1X0RQTExgLCBgUFRQXzE1ODhfQ0xPQ0tfT0NQYCwgYW5kIGBJQ0VgLiBUaGUgYFpMMzA3M1hfSTJDYCBhbmQgYFpMMzA3M1hfU1BJYCBjb25maWd1cmF0aW9ucyBhcmUgaWRlYWwgZm9yIHRlc3RpbmcgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGJlY2F1c2UgdGhleSBjYW4gdXNlIEkyQy9TUEkgbW9jayBpbnRlcmZhY2VzLiBJJiMzOTtsbCBhZGQgdGhvc2UgdG8gdGhlIGJ1aWxkLiBJJiMzOTtsbCBhbHNvIGFkZCBgRFBMTGAgc2luY2UgaXQmIzM5O3MgYSBib29sZWFuIHZhbHVlLiBXYWl0LCB0aGUgYHNldC1yZXN1bHRzYCBkb2N1bWVudGF0aW9uIHNheXMgbm90IHRvIGluY2x1ZGUgdGhlICYjMzQ7Q09ORklHXyYjMzQ7IHByZWZpeCwgc28gSSYjMzk7bGwganVzdCB1c2UgdGhlIGJhc2UgbmFtZXM6IGBaTDMwNzNYX0kyQ2AsIGBaTDMwNzNYX1NQSWAsIGFuZCBgRFBMTGAuCgpOZXh0LCBJIG5lZWQgdG8gY2hlY2sgdGhlIGNvZGUgdGhhdCYjMzk7cyByZWxhdGVkIHRvIHRoaXMgY2hlY2suIEkmIzM5O2xsIGxvb2sgYXQgYGRwbGxfbXNnX2FkZF9waW5fcmVmX3N5bmNgIGluIGBkcml2ZXJzL2RwbGwvZHBsbF9uZXRsaW5rLmNgLiBJdCYjMzk7cyBhIHN0YXRpYyBmdW5jdGlvbiwgYW5kIGl0JiMzOTtzIGNhbGxlZCBieSBgZHBsbF9jbWRfcGluX2dldF9vbmVgLiBPa2F5LCBsZXQmIzM5O3MgdGFrZSBhIGxvb2sgYXQgdGhhdCBmdW5jdGlvbiBuZXh0IHRvIHNlZSB0aGUgY29udGV4dC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTEgMTc6MzQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL2RwbGwvZHBsbF9uZXRsaW5rLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA2OTQsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMzAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDY5NDpcdHN0YXRpYyBpbnRcbiA2OTU6XHRkcGxsX2NtZF9waW5fZ2V0X29uZShzdHJ1Y3Qgc2tfYnVmZiAqbXNnLCBzdHJ1Y3QgZHBsbF9waW4gKnBpbixcbiA2OTY6XHRcdFx0ICAgICBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spXG4gNjk3Olx0e1xuIDY5ODpcdFx0Y29uc3Qgc3RydWN0IGRwbGxfcGluX3Byb3BlcnRpZXMgKnByb3AgPSBcdTAwMjZwaW4tXHUwMDNlcHJvcDtcbiA2OTk6XHRcdHN0cnVjdCBkcGxsX3Bpbl9yZWYgKnJlZjtcbiA3MDA6XHRcdGludCByZXQ7XG4gNzAxOlx0XG4gNzAyOlx0XHRyZWYgPSBkcGxsX3hhX3JlZl9kcGxsX2ZpcnN0KFx1MDAyNnBpbi1cdTAwM2VkcGxsX3JlZnMpO1xuIDcwMzpcdFx0QVNTRVJUX05PVF9OVUxMKHJlZik7XG4gNzA0Olx0XG4gNzA1Olx0XHRyZXQgPSBkcGxsX21zZ19hZGRfcGluX2hhbmRsZShtc2csIHBpbik7XG4gNzA2Olx0XHRpZiAocmV0KVxuIDcwNzpcdFx0XHRyZXR1cm4gcmV0O1xuIDcwODpcdFx0aWYgKG5sYV9wdXRfc3RyaW5nKG1zZywgRFBMTF9BX1BJTl9NT0RVTEVfTkFNRSxcbiA3MDk6XHRcdFx0XHQgICBwaW4tXHUwMDNlbW9kdWxlX25hbWUpKVxuIDcxMDpcdFx0XHRyZXR1cm4gLUVNU0dTSVpFO1xuIDcxMTpcdFx0aWYgKG5sYV9wdXRfNjRiaXQobXNnLCBEUExMX0FfUElOX0NMT0NLX0lELCBzaXplb2YocGluLVx1MDAzZWNsb2NrX2lkKSxcbiA3MTI6XHRcdFx0XHQgIFx1MDAyNnBpbi1cdTAwM2VjbG9ja19pZCwgRFBMTF9BX1BJTl9QQUQpKVxuIDcxMzpcdFx0XHRyZXR1cm4gLUVNU0dTSVpFO1xuIDcxNDpcdFx0aWYgKHByb3AtXHUwMDNlYm9hcmRfbGFiZWwgXHUwMDI2XHUwMDI2XG4gNzE1Olx0XHQgICAgbmxhX3B1dF9zdHJpbmcobXNnLCBEUExMX0FfUElOX0JPQVJEX0xBQkVMLCBwcm9wLVx1MDAzZWJvYXJkX2xhYmVsKSlcbiA3MTY6XHRcdFx0cmV0dXJuIC1FTVNHU0laRTtcbiA3MTc6XHRcdGlmIChwcm9wLVx1MDAzZXBhbmVsX2xhYmVsIFx1MDAyNlx1MDAyNlxuIDcxODpcdFx0ICAgIG5sYV9wdXRfc3RyaW5nKG1zZywgRFBMTF9BX1BJTl9QQU5FTF9MQUJFTCwgcHJvcC1cdTAwM2VwYW5lbF9sYWJlbCkpXG4gNzE5Olx0XHRcdHJldHVybiAtRU1TR1NJWkU7XG4gNzIwOlx0XHRpZiAocHJvcC1cdTAwM2VwYWNrYWdlX2xhYmVsIFx1MDAyNlx1MDAyNlxuIDcyMTpcdFx0ICAgIG5sYV9wdXRfc3RyaW5nKG1zZywgRFBMTF9BX1BJTl9QQUNLQUdFX0xBQkVMLFxuIDcyMjpcdFx0XHRcdCAgIHByb3AtXHUwMDNlcGFja2FnZV9sYWJlbCkpXG4gNzIzOlx0XHRcdHJldHVybiAtRU1TR1NJWkU7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzExIDE3OjM0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEzNjUzCgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogMzA1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBEUExMIE5ldGxpbmsgSGFuZGxlciBJbnRlcmFjdGlvbnMqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgYGRwbGxfbmxfcGluX2dldF9kb2l0YCBmdW5jdGlvbiDigJMgdGhhdCYjMzk7cyBvdXIgbmV0bGluayBoYW5kbGVyLCB0aGUgZW50cnkgcG9pbnQgZm9yIHRoaXMgcGFydGljdWxhciBvcGVyYXRpb24uIE15IGZpcnN0IHRob3VnaHQgaXMgdG8gbWFrZSBzdXJlIHdlJiMzOTtyZSB0cmFja2luZyB0aGlzIHByb3Blcmx5LCBzbyBJJiMzOTtsbCBhZGQgYGRwbGxfbmxfcGluX2dldF9kb2l0YCBhbmQgaXRzIGNvbXBhbmlvbiBgZHBsbF9ubF9waW5fZ2V0X2R1bXBpdGAgdG8gYEZvY3VzU3ltYm9sc2AuIFdoaWxlIEkmIzM5O20gYXQgaXQsIEkmIzM5O2xsIGluY2x1ZGUgYGRwbGxfbXNnX2FkZF9waW5fcmVmX3N5bmNgIGFuZCBgZHBsbF9jbWRfcGluX2dldF9vbmVgIGFzIHdlbGwsIHNpbmNlIHRoZXkgc2VlbSByZWxhdGVkLgoKTm93LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0JiMzOTtzICp0cmlnZ2VyaW5nKiB0aGlzIG5ldGxpbmsgaW50ZXJhY3Rpb24uIEkgbmVlZCB0byBrbm93IGlmIHRoZXJlIGFyZSBvdGhlciBEUExMIG5ldGxpbmsgaGFuZGxlcnMgaW52b2x2ZWQgaW4gdGhpcyBzYW1lIGZsb3cuIExvb2tpbmcgYSBsaXR0bGUgZGVlcGVyLCBJIHNlZSB0aGF0IGBkcGxsX3Bpbl9ldmVudF9zZW5kYCBjYWxscyBgZHBsbF9jbWRfcGluX2dldF9vbmVgIGFuZCB0aGF0JiMzOTtzIHRyaWdnZXJlZCBieSBhIHBpbiBldmVudCwgd2hpY2ggaXMgYW4gaW1wb3J0YW50IGNsdWUuCgpBbHJpZ2h0LCBsZXQmIzM5O3MgY29uZmlybSB0aGUgY3VycmVudCBlbnRyaWVzIGluIGBGb2N1c1N5bWJvbHNgLiBTbyBmYXIsIHNvIGdvb2Q6CiogICBgZHBsbF9tc2dfYWRkX3Bpbl9yZWZfc3luY2AKKiAgIGBkcGxsX2NtZF9waW5fZ2V0X29uZWAKKiAgIGBkcGxsX25sX3Bpbl9nZXRfZG9pdGAKKiAgIGBkcGxsX25sX3Bpbl9nZXRfZHVtcGl0YAoKTmV4dCwgSSBuZWVkIHRvIG1ha2Ugc3VyZSB3ZSYjMzk7cmUgb24gdGhlIHJpZ2h0IHRyYWNrIHdpdGggdGhlIGNvbmZpZ3VyYXRpb24uIEkgd2FudCB0byB2ZXJpZnkgdGhhdCBgWkwzMDczWF9JMkNgIGFuZCBgWkwzMDczWF9TUElgIGFyZSBpbmRlZWQgdGhlIGNvcnJlY3QgY29uZmlncyBmb3IgdGhpcy4gQWgsIHllcywgdGhleSBzZWxlY3QgYFpMMzA3M1hgLCB3aGljaCB0aGVuIHNlbGVjdHMgYERQTExgIOKAkyB0aGF0IG1ha2VzIHNlbnNlLgoKSnVzdCB0byBiZSBhYnNvbHV0ZWx5IHN1cmUsIEkmIzM5O20gZ29pbmcgdG8gcXVpY2tseSBjaGVjayBgZHJpdmVycy9kcGxsL0tjb25maWdgIGFnYWluIHRvIG1ha2Ugc3VyZSB0aGVyZSBpc24mIzM5O3QgYW5vdGhlciB2aXJ0dWFsIERQTEwgZHJpdmVyIHRoYXQgSSYjMzk7dmUgbWlzc2VkLiBJIG5lZWQgdG8gYmUgY29tcGxldGVseSB0aG9yb3VnaCBoZXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMSAxNzozNTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvZHBsbC9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAzMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgICAxOlx0IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XG4gICAyOlx0I1xuICAgMzpcdCMgR2VuZXJpYyBEUExMIGRyaXZlcnMgY29uZmlndXJhdGlvblxuICAgNDpcdCNcbiAgIDU6XHRcbiAgIDY6XHRtZW51IFwmIzM0O0RQTEwgZGV2aWNlIHN1cHBvcnRcJiMzNDtcbiAgIDc6XHRcbiAgIDg6XHRjb25maWcgRFBMTFxuICAgOTpcdFx0Ym9vbFxuICAxMDpcdFxuICAxMTpcdGNvbmZpZyBEUExMX1JFRkNOVF9UUkFDS0VSXG4gIDEyOlx0XHRib29sIFwmIzM0O0RQTEwgcmVmZXJlbmNlIGNvdW50IHRyYWNraW5nXCYjMzQ7XG4gIDEzOlx0XHRkZXBlbmRzIG9uIERFQlVHX0tFUk5FTCBcdTAwMjZcdTAwMjYgU1RBQ0tUUkFDRV9TVVBQT1JUIFx1MDAyNlx1MDAyNiBEUExMXG4gIDE0Olx0XHRzZWxlY3QgUkVGX1RSQUNLRVJcbiAgMTU6XHRcdGhlbHBcbiAgMTY6XHRcdCAgRW5hYmxlIHJlZmVyZW5jZSBjb3VudCB0cmFja2luZyBmb3IgRFBMTCBkZXZpY2VzIGFuZCBwaW5zLlxuICAxNzpcdFx0ICBUaGlzIGhlbHBzIGRlYnVnZ2luZyByZWZlcmVuY2UgbGVha3MgYW5kIHVzZS1hZnRlci1mcmVlIGJ1Z3NcbiAgMTg6XHRcdCAgYnkgcmVjb3JkaW5nIHN0YWNrIHRyYWNlcyBmb3IgZWFjaCBnZXQvcHV0IG9wZXJhdGlvbi5cbiAgMTk6XHRcbiAgMjA6XHRcdCAgVGhlIHRyYWNraW5nIGluZm9ybWF0aW9uIGlzIGV4cG9zZWQgdmlhIGRlYnVnZnMgYXQ6XG4gIDIxOlx0XHQgICAgL3N5cy9rZXJuZWwvZGVidWcvcmVmX3RyYWNrZXIvZHBsbF9kZXZpY2VfKlxuICAyMjpcdFx0ICAgIC9zeXMva2VybmVsL2RlYnVnL3JlZl90cmFja2VyL2RwbGxfcGluXypcbiAgMjM6XHRcbiAgMjQ6XHRcdCAgSWYgdW5zdXJlLCBzYXkgTi5cbiAgMjU6XHRcbiAgMjY6XHRzb3VyY2UgXCYjMzQ7ZHJpdmVycy9kcGxsL3psMzA3M3gvS2NvbmZpZ1wmIzM0O1xuICAyNzpcdFxuICAyODpcdGVuZG1lbnVcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTEgMTc6MzU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTQ4MDgKCQkJCQkJCW91dHB1dDogMjM5CgkJCQkJCQl0aG91Z2h0czogMzkzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFuYWx5c2lzIG9mIHRoZSBEUExMIERyaXZlciBQYXRjaCoqCgpPa2F5LCBzbyBJIHNlZSB0aGlzIHBhdGNoIGlzIGFkZHJlc3NpbmcgYSBwb3RlbnRpYWwgaXNzdWUgd2l0aGluIHRoZSBgZHJpdmVycy9kcGxsYCBkaXJlY3RvcnksIHNwZWNpZmljYWxseSBjb25jZXJuaW5nIHRoZSBgWkwzMDczWGAgZHJpdmVyLiBJJiMzOTttIG5vdGluZyB0aGF0IHRoZSBleGlzdGluZyBkcml2ZXIgbGlzdCBpbmRpY2F0ZXMgYFpMMzA3M1hgIGlzIHRoZSBvbmx5IG9uZSBpbiB0aGF0IGxvY2F0aW9uLiBNeSBpbml0aWFsIGFjdGlvbiBpcyB0byBhZGQgYFpMMzA3M1hfSTJDYCBhbmQgYFpMMzA3M1hfU1BJYCB0byB0aGUgYEVuYWJsZUNvbmZpZ3NgIHNpbmNlIHRob3NlIGNvbmZpZ3VyYXRpb25zIGFyZSBjcnVjaWFsIGZvciB0aGUgcmVsZXZhbnQgSTJDIGFuZCBTUEkgaW50ZXJmYWNlcywgYW5kIHRoZXJlZm9yZSwgZXNzZW50aWFsIGZvciB0ZXN0aW5nIHRoaXMgcHJvcGVybHkuCgpOZXh0LCBJIG5lZWQgdG8gY29uZmlybSB0aGUgcmVhY2hhYmlsaXR5IG9mIGBkcGxsX21zZ19hZGRfcGluX3JlZl9zeW5jYC4gQSBxdWljayBjaGVjayBzaG93cyB0aGF0IGl0ICppcyogaW5kZWVkIGNhbGxlZCBieSBgZHBsbF9jbWRfcGluX2dldF9vbmVgLCB3aGljaCBpbiB0dXJuIGlzIGNhbGxlZCBieSBib3RoIGBkcGxsX25sX3Bpbl9nZXRfZG9pdGAgYW5kIGBkcGxsX25sX3Bpbl9nZXRfZHVtcGl0YC4gVGhhdCBjb25maXJtcyBpdCYjMzk7cyB3aXRoaW4gdGhlIGNvbW1hbmQgcGF0aCB3ZSYjMzk7cmUgY29uY2VybmVkIHdpdGggaGVyZS4gSSBzZWUgdGhhdCB0aGUgcGF0Y2gmIzM5O3MgcHVycG9zZSBpcyB0byBmaXggYSBidWcgd2hlcmUgYHJlZl9zeW5jX3Bpbl9wcml2YCBjb3VsZCBiZSBOVUxMLCB3aGljaCBvZiBjb3Vyc2Ugd291bGQgbGVhZCB0byBhIGNyYXNoLiBUaGlzIGxvb2tzIGxpa2UgYSBmdW5jdGlvbmFsIGNoYW5nZSDigJMgYSBuZWNlc3NhcnkgY29ycmVjdGlvbiB0byBtYWludGFpbiBzdGFiaWxpdHkgd2hlbiBoYW5kbGluZyBEUExMIHBpbiByZWdpc3RyYXRpb24vZGVyZWdpc3RyYXRpb24gYW5kIG5ldGxpbmsgY29tbWFuZHMuCgpOb3csIGxldCYjMzk7cyBwcmVwYXJlIHRoZSBmdXp6aW5nIHJlc3BvbnNlLiBJdCYjMzk7cyBkZWZpbml0ZWx5IGBXb3J0aEZ1enppbmdgLCBiZWNhdXNlIHdlJiMzOTt2ZSBpZGVudGlmaWVkIGEgdnVsbmVyYWJpbGl0eS4KCk15IGBGb2N1c1N5bWJvbHNgIHdpbGwgYmU6CgoqICAgYGRwbGxfbXNnX2FkZF9waW5fcmVmX3N5bmNgICh0aGUgdGFyZ2V0IG9mIHRoZSBwYXRjaCkKKiAgIGBkcGxsX2NtZF9waW5fZ2V0X29uZWAKKiAgIGBkcGxsX25sX3Bpbl9nZXRfZG9pdGAKKiAgIGBkcGxsX25sX3Bpbl9nZXRfZHVtcGl0YCAoYXMgdGhleSBhcmUgdGhlIGNhbGxpbmcgZnVuY3Rpb25zKQoKQW5kIHRoZSBuZWNlc3NhcnkgYEVuYWJsZUNvbmZpZ3NgIHdpbGwgYmU6CgoqICAgYFpMMzA3M1hfSTJDYAoqICAgYFpMMzA3M1hfU1BJYAoKRmluYWxseSwgdGhpcyBwYXRjaCBpcyBpbnRyb2R1Y2luZyBhIE5VTEwgY2hlY2sgd2l0aGluIGBkcGxsX21zZ19hZGRfcGluX3JlZl9zeW5jYC4gVGhpcyBzYWZlZ3VhcmQgcHJldmVudHMgYSBwb3RlbnRpYWwgTlVMTCBwb2ludGVyIGRlcmVmZXJlbmNlIG9yIGludmFsaWQgbWVtb3J5IGFjY2VzcyBzY2VuYXJpbyB3aGVuIGEgRFBMTCBwaW4gaGFzIGJlZW4gdW5yZWdpc3RlcmVkIGZyb20gdGhlIHN5c3RlbS4gVGhpcyBkaXJlY3RseSBpbXBhY3RzIHRoZSBEUExMIG5ldGxpbmsgaW50ZXJmYWNlLCBhbmQgaXRzIHJlbGV2YW50IGNvbW1hbmRzIHdoaWNoIGFyZSBkaXJlY3RseSBhY2Nlc3NpYmxlIGZyb20gdXNlciBzcGFjZS4gRnV6emluZyB0aGlzIHdpbGwgcmVxdWlyZSBlbmFibGluZyBEUExMIGRyaXZlcnMsIGxpa2UgdGhlIE1pY3JvY2hpcCBBenVyaXRlIEkyQy9TUEkgZHJpdmVycywgd2hpY2ggYXJlIGVhc2lseSBpbnN0YW50aWF0ZWQgaW4gdmlydHVhbCBlbnZpcm9ubWVudHMgZm9yIHRlc3RpbmcuIEkgYW0gcmVhZHkgdG8gbW92ZSBmb3J3YXJkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMSAxNzozNTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7WkwzMDczWF9JMkMmIzM0OywKICAgICYjMzQ7WkwzMDczWF9TUEkmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtkcGxsX21zZ19hZGRfcGluX3JlZl9zeW5jJiMzNDssCiAgICAmIzM0O2RwbGxfY21kX3Bpbl9nZXRfb25lJiMzNDssCiAgICAmIzM0O2RwbGxfbmxfcGluX2dldF9kb2l0JiMzNDssCiAgICAmIzM0O2RwbGxfbmxfcGluX2dldF9kdW1waXQmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcyBhIE5VTEwgY2hlY2sgZm9yIGByZWZfc3luY19waW5fcHJpdmAgaW4gYGRwbGxfbXNnX2FkZF9waW5fcmVmX3N5bmNgIHRvIHByZXZlbnQgYSBwb3RlbnRpYWwgTlVMTCBwb2ludGVyIGRlcmVmZXJlbmNlIG9yIGludmFsaWQgbWVtb3J5IGFjY2VzcyB3aGVuIHRoZSBwaW4gaGFzIGJlZW4gdW5yZWdpc3RlcmVkIGZyb20gdGhlIERQTEwuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgRFBMTCBuZXRsaW5rIGludGVyZmFjZSwgd2hpY2ggaXMgcmVhY2hhYmxlIGZyb20gdXNlciBzcGFjZSB2aWEgbmV0bGluayBjb21tYW5kcyAoZS5nLiwgYERQTExfQ01EX1BJTl9HRVRgKS4gRnV6emluZyB0aGlzIHJlcXVpcmVzIGVuYWJsaW5nIERQTEwgZHJpdmVycywgc3VjaCBhcyB0aGUgTWljcm9jaGlwIEF6dXJpdGUgSTJDL1NQSSBkcml2ZXJzLCB3aGljaCBjYW4gYmUgaW5zdGFudGlhdGVkIGluIHZpcnR1YWwgZW52aXJvbm1lbnRzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtaTDMwNzNYX0kyQyYjMzQ7LAogICAgJiMzNDtaTDMwNzNYX1NQSSYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2RwbGxfbXNnX2FkZF9waW5fcmVmX3N5bmMmIzM0OywKICAgICYjMzQ7ZHBsbF9jbWRfcGluX2dldF9vbmUmIzM0OywKICAgICYjMzQ7ZHBsbF9ubF9waW5fZ2V0X2RvaXQmIzM0OywKICAgICYjMzQ7ZHBsbF9ubF9waW5fZ2V0X2R1bXBpdCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRzIGEgTlVMTCBjaGVjayBmb3IgYHJlZl9zeW5jX3Bpbl9wcml2YCBpbiBgZHBsbF9tc2dfYWRkX3Bpbl9yZWZfc3luY2AgdG8gcHJldmVudCBhIHBvdGVudGlhbCBOVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2Ugb3IgaW52YWxpZCBtZW1vcnkgYWNjZXNzIHdoZW4gdGhlIHBpbiBoYXMgYmVlbiB1bnJlZ2lzdGVyZWQgZnJvbSB0aGUgRFBMTC4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBEUExMIG5ldGxpbmsgaW50ZXJmYWNlLCB3aGljaCBpcyByZWFjaGFibGUgZnJvbSB1c2VyIHNwYWNlIHZpYSBuZXRsaW5rIGNvbW1hbmRzIChlLmcuLCBgRFBMTF9DTURfUElOX0dFVGApLiBGdXp6aW5nIHRoaXMgcmVxdWlyZXMgZW5hYmxpbmcgRFBMTCBkcml2ZXJzLCBzdWNoIGFzIHRoZSBNaWNyb2NoaXAgQXp1cml0ZSBJMkMvU1BJIGRyaXZlcnMsIHdoaWNoIGNhbiBiZSBpbnN0YW50aWF0ZWQgaW4gdmlydHVhbCBlbnZpcm9ubWVudHMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wNy0xMVQxNzozMzozNC45MTI5NTMxMzhaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo5NTE4MTc1NDQ0NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJaTDMwNzNYX0kyQ1wiLFxuICAgIFwiWkwzMDczWF9TUElcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJkcGxsX21zZ19hZGRfcGluX3JlZl9zeW5jXCIsXG4gICAgXCJkcGxsX2NtZF9waW5fZ2V0X29uZVwiLFxuICAgIFwiZHBsbF9ubF9waW5fZ2V0X2RvaXRcIixcbiAgICBcImRwbGxfbmxfcGluX2dldF9kdW1waXRcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRzIGEgTlVMTCBjaGVjayBmb3IgYHJlZl9zeW5jX3Bpbl9wcml2YCBpbiBgZHBsbF9tc2dfYWRkX3Bpbl9yZWZfc3luY2AgdG8gcHJldmVudCBhIHBvdGVudGlhbCBOVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2Ugb3IgaW52YWxpZCBtZW1vcnkgYWNjZXNzIHdoZW4gdGhlIHBpbiBoYXMgYmVlbiB1bnJlZ2lzdGVyZWQgZnJvbSB0aGUgRFBMTC4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBEUExMIG5ldGxpbmsgaW50ZXJmYWNlLCB3aGljaCBpcyByZWFjaGFibGUgZnJvbSB1c2VyIHNwYWNlIHZpYSBuZXRsaW5rIGNvbW1hbmRzIChlLmcuLCBgRFBMTF9DTURfUElOX0dFVGApLiBGdXp6aW5nIHRoaXMgcmVxdWlyZXMgZW5hYmxpbmcgRFBMTCBkcml2ZXJzLCBzdWNoIGFzIHRoZSBNaWNyb2NoaXAgQXp1cml0ZSBJMkMvU1BJIGRyaXZlcnMsIHdoaWNoIGNhbiBiZSBpbnN0YW50aWF0ZWQgaW4gdmlydHVhbCBlbnZpcm9ubWVudHMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTExVDE3OjMzOjM0LjkxMjk1OTA4OVoiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjQ5NTcwMjAxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgOGUxYTQwZjRjMzg2ODQxMWEwN2M2YWJiMGZmMjg2OWM4Y2MyZWMxNlxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgU2F0IEp1bCAxMSAxNzozMzozMiAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL2RwbGwvZHBsbF9uZXRsaW5rLmMgYi9kcml2ZXJzL2RwbGwvZHBsbF9uZXRsaW5rLmNcXG5pbmRleCBiZjcyOWNkZTc5NmE3Ny4uNTcwMzY2NzU5M2E3YzIgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9kcGxsL2RwbGxfbmV0bGluay5jXFxuKysrIGIvZHJpdmVycy9kcGxsL2RwbGxfbmV0bGluay5jXFxuQEAgLTU2Nyw2ICs1NjcsOSBAQCBkcGxsX21zZ19hZGRfcGluX3JlZl9zeW5jKHN0cnVjdCBza19idWZmICptc2csIHN0cnVjdCBkcGxsX3BpbiAqcGluLFxcbiBcXHRcXHRpZiAoIWRwbGxfcGluX2F2YWlsYWJsZShyZWZfc3luY19waW4pKVxcbiBcXHRcXHRcXHRjb250aW51ZTtcXG4gXFx0XFx0cmVmX3N5bmNfcGluX3ByaXYgPSBkcGxsX3Bpbl9vbl9kcGxsX3ByaXYoZHBsbCwgcmVmX3N5bmNfcGluKTtcXG4rXFx0XFx0LyogUGluIG1heSBoYXZlIGJlZW4gdW5yZWdpc3RlcmVkIGZyb20gdGhpcyBkcGxsIGFscmVhZHkgKi9cXG4rXFx0XFx0aWYgKCFyZWZfc3luY19waW5fcHJpdilcXG4rXFx0XFx0XFx0Y29udGludWU7XFxuIFxcdFxcdGlmIChXQVJOX09OKCFvcHMtXFx1MDAzZXJlZl9zeW5jX2dldCkpXFxuIFxcdFxcdFxcdHJldHVybiAtRU9QTk9UU1VQUDtcXG4gXFx0XFx0cmV0ID0gb3BzLVxcdTAwM2VyZWZfc3luY19nZXQocGluLCBwaW5fcHJpdiwgcmVmX3N5bmNfcGluLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xMVQxNzozMzozNS41NjM1MDgxOTlaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjk0NTMxMTg0NjI0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIlpMMzA3M1hfSTJDXCIsXG4gICAgXCJaTDMwNzNYX1NQSVwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImRwbGxfbXNnX2FkZF9waW5fcmVmX3N5bmNcIixcbiAgICBcImRwbGxfY21kX3Bpbl9nZXRfb25lXCIsXG4gICAgXCJkcGxsX25sX3Bpbl9nZXRfZG9pdFwiLFxuICAgIFwiZHBsbF9ubF9waW5fZ2V0X2R1bXBpdFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHMgYSBOVUxMIGNoZWNrIGZvciBgcmVmX3N5bmNfcGluX3ByaXZgIGluIGBkcGxsX21zZ19hZGRfcGluX3JlZl9zeW5jYCB0byBwcmV2ZW50IGEgcG90ZW50aWFsIE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZSBvciBpbnZhbGlkIG1lbW9yeSBhY2Nlc3Mgd2hlbiB0aGUgcGluIGhhcyBiZWVuIHVucmVnaXN0ZXJlZCBmcm9tIHRoZSBEUExMLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIERQTEwgbmV0bGluayBpbnRlcmZhY2UsIHdoaWNoIGlzIHJlYWNoYWJsZSBmcm9tIHVzZXIgc3BhY2UgdmlhIG5ldGxpbmsgY29tbWFuZHMgKGUuZy4sIGBEUExMX0NNRF9QSU5fR0VUYCkuIEZ1enppbmcgdGhpcyByZXF1aXJlcyBlbmFibGluZyBEUExMIGRyaXZlcnMsIHN1Y2ggYXMgdGhlIE1pY3JvY2hpcCBBenVyaXRlIEkyQy9TUEkgZHJpdmVycywgd2hpY2ggY2FuIGJlIGluc3RhbnRpYXRlZCBpbiB2aXJ0dWFsIGVudmlyb25tZW50cy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4yLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS5cbiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbiAgIERvIG5vdCBsaXN0IHRvbyBnZW5lcmljIGNvbmZpZ3MgKHdlIGFscmVhZHkgaGF2ZSB0aGVtIGVuYWJsZWQpLiBPbmx5IGxpc3QgdGhvc2UgdGhhdFxuICAgc3BlY2lmaWNhbGx5IGNvdmVyIHRoZSBtb2RpZmllZCBjb2RlLiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3Mgb3V0cHV0IGFycmF5LFxuICAgYW5kIERPIE5PVCBhZGQgYSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCA4ZTFhNDBmNGMzODY4NDExYTA3YzZhYmIwZmYyODY5YzhjYzJlYzE2XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFNhdCBKdWwgMTEgMTc6MzM6MzIgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9kcml2ZXJzL2RwbGwvZHBsbF9uZXRsaW5rLmMgYi9kcml2ZXJzL2RwbGwvZHBsbF9uZXRsaW5rLmNcbmluZGV4IGJmNzI5Y2RlNzk2YTc3Li41NzAzNjY3NTkzYTdjMiAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvZHBsbC9kcGxsX25ldGxpbmsuY1xuKysrIGIvZHJpdmVycy9kcGxsL2RwbGxfbmV0bGluay5jXG5AQCAtNTY3LDYgKzU2Nyw5IEBAIGRwbGxfbXNnX2FkZF9waW5fcmVmX3N5bmMoc3RydWN0IHNrX2J1ZmYgKm1zZywgc3RydWN0IGRwbGxfcGluICpwaW4sXG4gXHRcdGlmICghZHBsbF9waW5fYXZhaWxhYmxlKHJlZl9zeW5jX3BpbikpXG4gXHRcdFx0Y29udGludWU7XG4gXHRcdHJlZl9zeW5jX3Bpbl9wcml2ID0gZHBsbF9waW5fb25fZHBsbF9wcml2KGRwbGwsIHJlZl9zeW5jX3Bpbik7XG4rXHRcdC8qIFBpbiBtYXkgaGF2ZSBiZWVuIHVucmVnaXN0ZXJlZCBmcm9tIHRoaXMgZHBsbCBhbHJlYWR5ICovXG4rXHRcdGlmICghcmVmX3N5bmNfcGluX3ByaXYpXG4rXHRcdFx0Y29udGludWU7XG4gXHRcdGlmIChXQVJOX09OKCFvcHMtXHUwMDNlcmVmX3N5bmNfZ2V0KSlcbiBcdFx0XHRyZXR1cm4gLUVPUE5PVFNVUFA7XG4gXHRcdHJldCA9IG9wcy1cdTAwM2VyZWZfc3luY19nZXQocGluLCBwaW5fcHJpdiwgcmVmX3N5bmNfcGluLFxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTFUMTc6MzM6MzUuNTYzNTEwMTU5WiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDE1OTA4MTQ2MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHVuZGVyc3RhbmRpbmcsIHRoaW5raW5nIHRocm91Z2ggdGhpcyBjb2RlIGNoYW5nZSBpbiBgZHJpdmVycy9kcGxsL2RwbGxfbmV0bGluay5jYDpcblxuKipBbmFseXppbmcgYSBEUExMIE5ldGxpbmsgUGF0Y2gqKlxuXG5SaWdodCwgSSdtIGxvb2tpbmcgYXQgYSBwYXRjaCB0aGF0J3MgYmVlbiBhcHBsaWVkIHRvIGBkcml2ZXJzL2RwbGwvZHBsbF9uZXRsaW5rLmNgLiBUaGUgY29yZSBvZiB0aGUgY2hhbmdlIHNlZW1zIHRvIGJlIGluIHRoZSBmdW5jdGlvbiBgZHBsbF9tc2dfYWRkX3Bpbl9yZWZfc3luY2AuIFRoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgbmV3IGNoZWNrOiBgaWYgKCFyZWZfc3luY19waW5fcHJpdilgLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcywgXCJPa2F5LCB0aGF0J3MgYSBjb25kaXRpb24gYmVpbmcgYWRkZWQuIFdoYXQgaXMgYHJlZl9zeW5jX3Bpbl9wcml2YCBhbmQgd2h5IGlzIHRoaXMgY2hlY2sgbmVjZXNzYXJ5P1wiIEknbGwgbmVlZCB0byBkaWcgaW50byB0aGUgc3Vycm91bmRpbmcgY29kZSB0byB1bmRlcnN0YW5kIHRoZSBjb250ZXh0IG9mIHRoaXMgdmFyaWFibGUsIHdoYXQgaXQgcmVwcmVzZW50cyBpbiB0aGUgRFBMTCBjb250cm9sLCBhbmQgd2hhdCB0aGUgaW1wbGljYXRpb25zIGFyZSBpZiBpdCdzIG51bGwuIElzIHRoaXMgYSBuZXcgaW5pdGlhbGl6YXRpb24gY2hlY2s/IFByZXZlbnRpbmcgYSBwb3RlbnRpYWwgbnVsbCBwb2ludGVyIGRlcmVmZXJlbmNlPyBPciBpcyB0aGUgYWJzZW5jZSBvZiB0aGlzIHZhcmlhYmxlIGluZGljYXRpdmUgb2Ygc29tZSBjcml0aWNhbCBzdGF0ZSBvciBjb25maWd1cmF0aW9uIGVycm9yPyBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0IHRoaXMgYHJlZl9zeW5jX3Bpbl9wcml2YCBtZWFucyBpbiB0aGUgY29udHJvbCBmbG93IG9mIERQTEwgbmV0bGluayBtZXNzYWdpbmcgYW5kIHRoZW4gZGVkdWNlIHdoYXQgdGhpcyBjaGVjayBpcyBkb2luZy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTkyMiwiT3V0cHV0VG9rZW5zIjo0NywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjkyLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTFUMTc6MzM6MzkuNzIyNTkzNTk5WiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE3OTM2MTM4OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJkcGxsX21zZ19hZGRfcGluX3JlZl9zeW5jXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvZHBsbC9kcGxsX25ldGxpbmsuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL2RwbGwvZHBsbF9uZXRsaW5rLmM9NTUxPXN0YXRpYyBpbnRcXG5kcml2ZXJzL2RwbGwvZHBsbF9uZXRsaW5rLmM6NTUyOmRwbGxfbXNnX2FkZF9waW5fcmVmX3N5bmMoc3RydWN0IHNrX2J1ZmYgKm1zZywgc3RydWN0IGRwbGxfcGluICpwaW4sXFxuZHJpdmVycy9kcGxsL2RwbGxfbmV0bGluay5jLTU1My1cXHRcXHRcXHQgIHN0cnVjdCBkcGxsX3Bpbl9yZWYgKnJlZixcXG4tLVxcbmRyaXZlcnMvZHBsbC9kcGxsX25ldGxpbmsuYz02OTU9ZHBsbF9jbWRfcGluX2dldF9vbmUoc3RydWN0IHNrX2J1ZmYgKm1zZywgc3RydWN0IGRwbGxfcGluICpwaW4sXFxuLS1cXG5kcml2ZXJzL2RwbGwvZHBsbF9uZXRsaW5rLmMtNzU0LVxcdGlmICgheGFfZW1wdHkoXFx1MDAyNnBpbi1cXHUwMDNlcmVmX3N5bmNfcGlucykpXFxuZHJpdmVycy9kcGxsL2RwbGxfbmV0bGluay5jOjc1NTpcXHRcXHRyZXQgPSBkcGxsX21zZ19hZGRfcGluX3JlZl9zeW5jKG1zZywgcGluLCByZWYsIGV4dGFjayk7XFxuZHJpdmVycy9kcGxsL2RwbGxfbmV0bGluay5jLTc1Ni1cXHRpZiAocmV0KVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xMVQxNzozMzozOS45MDE5NjAwMThaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMTgyODkyNTE5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIG15IG93bjpcblxuKipBbmFseXppbmcgdGhlIERQTEwgUmVmZXJlbmNlIENvdW50aW5nKipcblxuQWxyaWdodCwgbGV0J3Mgc2VlLCBgZHBsbF9tc2dfYWRkX3Bpbl9yZWZfc3luY2AgaXMgYmVpbmcgaW52b2tlZCBieSBgZHBsbF9jbWRfcGluX2dldF9vbmVgLiBIbW0sIHRoYXQncyBpbnRlcmVzdGluZy4gSSBrbm93IHRoYXQgZnVuY3Rpb24gaXMgcGFydCBvZiB0aGUgRFBMTCBzdWJzeXN0ZW0ncyBuZXRsaW5rIGludGVyZmFjZS4gU28sIGl0J3MgbGlrZWx5IGludm9sdmVkIGluIGEgXCJnZXRcIiBvcGVyYXRpb24gZm9yIGEgRFBMTCBwaW4sIGFuZCB3ZSdyZSBkZWFsaW5nIHdpdGggcmVmZXJlbmNlIGNvdW50aW5nIGhlcmUg4oCTIHRoZSBgX3JlZmAgaW4gdGhlIG5hbWUgaXMgYSBjbHVlLiBHb3R0YSBtYWtlIHN1cmUgd2UncmUgaGFuZGxpbmcgcmVzb3VyY2UgbGlmZXRpbWVzIGNvcnJlY3RseS4gTm93LCBiZWZvcmUgSSBqdW1wIHRvIGFueSBjb25jbHVzaW9ucywgSSBzaG91bGQgcHJvYmFibHkgZG91YmxlLWNoZWNrIHRoZSBEUExMIGNvbmZpZ3VyYXRpb24gaXRzZWxmLiBTZWUgd2hhdCB0aGUgY3VycmVudCBzZXR1cCBpcywgd2hhdCBmZWF0dXJlcyBhcmUgZW5hYmxlZCwgYW5kIGhvdyB0aGlzIHBhcnRpY3VsYXIgcGluIGlzIGNvbmZpZ3VyZWQgaW4gcmVsYXRpb24gdG8gdGhlIG92ZXJhbGwgY2xvY2tpbmcgc2NoZW1lLiBUaGF0IGNvbmZpZyB3aWxsIGxpa2VseSBzaGVkIGEgbG90IG9mIGxpZ2h0IG9uICp3aHkqIHRoaXMgcmVmZXJlbmNlIG1hbmFnZW1lbnQgaXMgaGFwcGVuaW5nIHRoaXMgd2F5LiBVbmRlcnN0YW5kaW5nIHRoZSBjb250ZXh0IGlzIGtleSB0byBzcG90dGluZyBhbnkgcG90ZW50aWFsIGlzc3Vlcy5cblxuXG4iLCJJbnB1dFRva2VucyI6MjU5MiwiT3V0cHV0VG9rZW5zIjozMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjU3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTExVDE3OjMzOjQzLjA4NDg4MTI2N1oiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozMzEwMzYyNzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIERQTExcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9kcGxsL0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9kcGxsL0tjb25maWc9Nj1tZW51IFxcXCJEUExMIGRldmljZSBzdXBwb3J0XFxcIlxcbmRyaXZlcnMvZHBsbC9LY29uZmlnLTctXFxuZHJpdmVycy9kcGxsL0tjb25maWc6ODpjb25maWcgRFBMTFxcbmRyaXZlcnMvZHBsbC9LY29uZmlnLTktXFx0Ym9vbFxcbmRyaXZlcnMvZHBsbC9LY29uZmlnLTEwLVxcbmRyaXZlcnMvZHBsbC9LY29uZmlnOjExOmNvbmZpZyBEUExMX1JFRkNOVF9UUkFDS0VSXFxuZHJpdmVycy9kcGxsL0tjb25maWctMTItXFx0Ym9vbCBcXFwiRFBMTCByZWZlcmVuY2UgY291bnQgdHJhY2tpbmdcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTExVDE3OjMzOjQzLjQxNTkyMjQ4N1oiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMyMjQzNDI2NjYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoYXQgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkRQTEwncyBUcnVlIE5hdHVyZSoqXG5cbkhvbGQgb24gYSBzZWNvbmQuLi4gaXMgRFBMTCBlc3NlbnRpYWxseSBhIGBib29sYCB0eXBlLCBidXQgd2l0aG91dCB0aGUgaW50ZXJhY3RpdmUgcHJvbXB0aW5nIG1lY2hhbmlzbT8gSSBuZWVkIHRvIHZlcmlmeSBteSBpbml0aWFsIGh1bmNoLiBJdCBzZWVtcyBpbnR1aXRpdmVseSBjb3JyZWN0IGdpdmVuIHRoZSB1c3VhbCBkZWZpbml0aW9ucywgYnV0IEkgd2FudCB0byBiZSBjZXJ0YWluLiBNeSBuZXh0IGFjdGlvbiBpcyB0byBxdWlja2x5IHNjcnV0aW5pemUgdGhlIHJlbGV2YW50IEtjb25maWcgZmlsZSwgc3BlY2lmaWNhbGx5IHdpdGhpbiB0aGUgYGRyaXZlcnMvZHBsbC9gIGRpcmVjdG9yeSwgdG8gY29uZmlybSBvciByZWZ1dGUgdGhpcyBoeXBvdGhlc2lzLiBJJ2xsIGJlIGxvb2tpbmcgZm9yIGhvdyBEUExMIGlzIGFjdHVhbGx5IGRlZmluZWQgYW5kIGltcGxlbWVudGVkIHdpdGggcmVzcGVjdCB0byBpdHMgZnVuZGFtZW50YWwgYm9vbGVhbiBuYXR1cmUsIGFuZCBjb21wYXJlIHRoYXQgdG8gdGhlIHdheSBgYm9vbGAgaXMgaW1wbGVtZW50ZWQgZWxzZXdoZXJlLiBJIHN1c3BlY3QgSSBtaWdodCBmaW5kIHNvbWUgc3VidGxlIGRpZmZlcmVuY2VzLCBvciBtYXliZSBub3QuIFRpbWUgdG8gZGl2ZSBpbnRvIHRoZSBjb2RlIVxuXG5cbiIsIklucHV0VG9rZW5zIjozMDMyLCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMTFUMTc6MzM6NDYuNjQwMjY4MDEzWiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTQxMzcwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImRyaXZlcnMvZHBsbC9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEsXG4gIFwiTGluZUNvdW50XCI6IDIwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgIDE6XFx0IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XFxuICAgMjpcXHQjXFxuICAgMzpcXHQjIEdlbmVyaWMgRFBMTCBkcml2ZXJzIGNvbmZpZ3VyYXRpb25cXG4gICA0OlxcdCNcXG4gICA1OlxcdFxcbiAgIDY6XFx0bWVudSBcXFwiRFBMTCBkZXZpY2Ugc3VwcG9ydFxcXCJcXG4gICA3OlxcdFxcbiAgIDg6XFx0Y29uZmlnIERQTExcXG4gICA5OlxcdFxcdGJvb2xcXG4gIDEwOlxcdFxcbiAgMTE6XFx0Y29uZmlnIERQTExfUkVGQ05UX1RSQUNLRVJcXG4gIDEyOlxcdFxcdGJvb2wgXFxcIkRQTEwgcmVmZXJlbmNlIGNvdW50IHRyYWNraW5nXFxcIlxcbiAgMTM6XFx0XFx0ZGVwZW5kcyBvbiBERUJVR19LRVJORUwgXFx1MDAyNlxcdTAwMjYgU1RBQ0tUUkFDRV9TVVBQT1JUIFxcdTAwMjZcXHUwMDI2IERQTExcXG4gIDE0OlxcdFxcdHNlbGVjdCBSRUZfVFJBQ0tFUlxcbiAgMTU6XFx0XFx0aGVscFxcbiAgMTY6XFx0XFx0ICBFbmFibGUgcmVmZXJlbmNlIGNvdW50IHRyYWNraW5nIGZvciBEUExMIGRldmljZXMgYW5kIHBpbnMuXFxuICAxNzpcXHRcXHQgIFRoaXMgaGVscHMgZGVidWdnaW5nIHJlZmVyZW5jZSBsZWFrcyBhbmQgdXNlLWFmdGVyLWZyZWUgYnVnc1xcbiAgMTg6XFx0XFx0ICBieSByZWNvcmRpbmcgc3RhY2sgdHJhY2VzIGZvciBlYWNoIGdldC9wdXQgb3BlcmF0aW9uLlxcbiAgMTk6XFx0XFxuICAyMDpcXHRcXHQgIFRoZSB0cmFja2luZyBpbmZvcm1hdGlvbiBpcyBleHBvc2VkIHZpYSBkZWJ1Z2ZzIGF0OlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xMVQxNzozMzo0Ni42NDA0MTEyNjNaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMTQxNjUyMTQxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIHByZXNlbnRlZCBpbiB0aGUgZmlyc3QgcGVyc29uOlxuXG4qKkludmVzdGlnYXRpbmcgdGhlIERlcGVuZGVuY3kgb24gYSBCb29sZWFuIEZsYWcqKlxuXG5BbHJpZ2h0LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIGNvZGUsIGFuZCBpdCdzIGZsYWdnZWQgd2l0aCBhIHNpbXBsZSBib29sZWFuIHR5cGUg4oCTIGxpa2VseSBhIGNvbmZpZ3VyYXRpb24gb3B0aW9uIG9yIGEgc3RhdGUgdmFyaWFibGUuIFRoZSBpbW1lZGlhdGUgcXVlc3Rpb24gaXMgYWx3YXlzLCBcIldoZXJlJ3MgdGhpcyBiZWluZyB1c2VkLCBhbmQgKndoeSo/XCIgSXQncyAqcHJvYmFibHkqIGdldHRpbmcgc2V0IG9yIG1vZGlmaWVkIGJ5IGFub3RoZXIgZHJpdmVyIG9yIG1vZHVsZSwgYW5kIG15IGZpcnN0IGluc3RpbmN0IGlzIHRvIHRyYWNlIHRoZSBkZXBlbmRlbmNpZXMuIFRoaXMga2luZCBvZiBmbGFnIG9mdGVuIGhhcyBjYXNjYWRpbmcgZWZmZWN0cywgc28gdW5kZXJzdGFuZGluZyB0aGUgY29udGV4dCBpcyBwYXJhbW91bnQuXG5cblNvIEknbGwgc3RhcnQgd2l0aCB0aGUgb2J2aW91czogd2hvJ3Mgc2VsZWN0aW5nIHRoaXMuXG5cbkxldCdzIGRpdmUgZGVlcGVyIGFuZCBmaW5kIG91dCB0aGUgY29ubmVjdGlvbiB0byBcIkRQTExcIi4gVGhpcyBtaWdodCBpbmRpY2F0ZSBhIGRlcGVuZGVuY3kgb24gYW4gU0FUIHNvbHZlciBpbXBsZW1lbnRhdGlvbiwgb3IgcGVyaGFwcyBhIG1vcmUgY29tcGxleCByZWxhdGlvbnNoaXAgSSBjYW4gaW5mZXIgb25jZSBJIGZpZ3VyZSBvdXQgdGhlIGludGVyYWN0aW9uLiBGaWd1cmluZyBvdXQgdGhlIHJlbGF0aW9uc2hpcCBoZXJlIHdpbGwgYmUga2V5IHRvIHVuZGVyc3RhbmRpbmcgdGhlIHN5c3RlbSdzIG92ZXJhbGwgYmVoYXZpb3IuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjM0OTcsIk91dHB1dFRva2VucyI6MjMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNywiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTExVDE3OjMzOjQ5Ljc4MjA2NTYxNFoiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzQ2Mzg5MzIxMSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJzZWxlY3QgRFBMTFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9kcGxsL3psMzA3M3gvS2NvbmZpZz0zPWNvbmZpZyBaTDMwNzNYXFxuLS1cXG5kcml2ZXJzL2RwbGwvemwzMDczeC9LY29uZmlnLTUtXFx0ZGVwZW5kcyBvbiBORVRcXG5kcml2ZXJzL2RwbGwvemwzMDczeC9LY29uZmlnOjY6XFx0c2VsZWN0IERQTExcXG5kcml2ZXJzL2RwbGwvemwzMDczeC9LY29uZmlnLTctXFx0c2VsZWN0IE5FVF9ERVZMSU5LXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9LY29uZmlnPTI5MT1jb25maWcgSUNFXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9LY29uZmlnLTMwNS1cXHRzZWxlY3QgUExETUZXXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvS2NvbmZpZzozMDY6XFx0c2VsZWN0IERQTExcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9LY29uZmlnLTMwNy1cXHRoZWxwXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvS2NvbmZpZz0yMDM9Y29uZmlnIE1MWDVfRFBMTFxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL0tjb25maWctMjA1LVxcdGRlcGVuZHMgb24gTkVUREVWSUNFUyBcXHUwMDI2XFx1MDAyNiBFVEhFUk5FVCBcXHUwMDI2XFx1MDAyNiBQQ0kgXFx1MDAyNlxcdTAwMjYgTUxYNV9DT1JFXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL0tjb25maWc6MjA2OlxcdHNlbGVjdCBEUExMXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL0tjb25maWctMjA3LVxcdGhlbHBcXG4tLVxcbmRyaXZlcnMvcHRwL0tjb25maWc9MjEwPWNvbmZpZyBQVFBfMTU4OF9DTE9DS19PQ1BcXG4tLVxcbmRyaXZlcnMvcHRwL0tjb25maWctMjE5LVxcdHNlbGVjdCBDUkMxNlxcbmRyaXZlcnMvcHRwL0tjb25maWc6MjIwOlxcdHNlbGVjdCBEUExMXFxuZHJpdmVycy9wdHAvS2NvbmZpZy0yMjEtXFx0aGVscFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xMVQxNzozMzo1Ny4yNDU5NjU1NzVaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzY1MDM4MTc0MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipEUExMIENvbmZpZ3VyYXRpb24gQW5hbHlzaXMqKlxuXG5Pa2F5LCBzbyB0aGUgRFBMTCAoRGlnaXRhbCBQaGFzZS1Mb2NrZWQgTG9vcCkgbW9kdWxlIGlzIGN1cnJlbnRseSBzZWxlY3RlZCBieSBhIGZldyBkaWZmZXJlbnQgb3B0aW9uczogYElDRWAsIGBNTFg1X0RQTExgLCBgUFRQXzE1ODhfQ0xPQ0tfT0NQYCwgYW5kIGBaTDMwNzNYYC4gTXkgaW5pdGlhbCB0aG91Z2h0IHdhcywgXCJDYW4gd2UganVzdCBlbmFibGUgRFBMTCBkaXJlY3RseT9cIiBidXQgdGhlbiBJIHJlbWVtYmVyZWQgaXQncyBhIGJvb2xlYW4gd2l0aG91dCBhIHByb21wdCwgc28gdGhhdCdzIGEgbm8tZ28uIFdlIG5lZWQgdG8gZW5hYmxlIGl0IGluZGlyZWN0bHkgdGhyb3VnaCBvbmUgb2YgdGhvc2UgZGVwZW5kZW50IG9wdGlvbnMuXG5cblRoZXJlZm9yZSwgdGhlIHN0cmF0ZWd5IGlzIHRvIGVuYWJsZSBlaXRoZXIgYElDRWAsIGBNTFg1X0RQTExgLCBgUFRQXzE1ODhfQ0xPQ0tfT0NQYCwgb3IgYFpMMzA3M1hgLlxuXG5MZXQgbWUgdGFrZSBhIHF1aWNrIGxvb2sgYXQgYGRyaXZlcnMvZHBsbC96bDMwNzN4L0tjb25maWdgIHRvIHNlZSBpZiB0aGVyZSBhcmUgYW55IHNwZWNpZmljIGNvbmRpdGlvbnMgd2l0aGluIHRoYXQgZHJpdmVyIHRoYXQgbWlnaHQgYmUgcmVsZXZhbnQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQxNjAsIk91dHB1dFRva2VucyI6NDEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNDYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMTFUMTc6MzQ6MDAuODk2MzQ5NzU1WiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE0MzU2MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL2RwbGwvemwzMDczeC9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEsXG4gIFwiTGluZUNvdW50XCI6IDIwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgIDE6XFx0IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XFxuICAgMjpcXHRcXG4gICAzOlxcdGNvbmZpZyBaTDMwNzNYXFxuICAgNDpcXHRcXHR0cmlzdGF0ZSBcXFwiTWljcm9jaGlwIEF6dXJpdGUgRFBMTC9QVFAvU3luY0UgZGV2aWNlc1xcXCIgaWYgQ09NUElMRV9URVNUXFxuICAgNTpcXHRcXHRkZXBlbmRzIG9uIE5FVFxcbiAgIDY6XFx0XFx0c2VsZWN0IERQTExcXG4gICA3OlxcdFxcdHNlbGVjdCBORVRfREVWTElOS1xcbiAgIDg6XFx0XFx0c2VsZWN0IFJFR01BUFxcbiAgIDk6XFx0XFx0aGVscFxcbiAgMTA6XFx0XFx0ICBUaGlzIGRyaXZlciBzdXBwb3J0cyBNaWNyb2NoaXAgQXp1cml0ZSBmYW1pbHkgRFBMTC9QVFAvU3luY0VcXG4gIDExOlxcdFxcdCAgZGV2aWNlcyB0aGF0IHN1cHBvcnQgdXAgdG8gNSBpbmRlcGVuZGVudCBEUExMIGNoYW5uZWxzLFxcbiAgMTI6XFx0XFx0ICAxMCBpbnB1dCBwaW5zIGFuZCB1cCB0byAyMCBvdXRwdXQgcGlucy5cXG4gIDEzOlxcdFxcbiAgMTQ6XFx0XFx0ICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlLiBUaGUgbW9kdWxlXFxuICAxNTpcXHRcXHQgIHdpbGwgYmUgY2FsbGVkIHpsMzA3M3guXFxuICAxNjpcXHRcXG4gIDE3OlxcdGNvbmZpZyBaTDMwNzNYX0kyQ1xcbiAgMTg6XFx0XFx0dHJpc3RhdGUgXFxcIkkyQyBidXMgaW1wbGVtZW50YXRpb24gZm9yIE1pY3JvY2hpcCBBenVyaXRlIGRldmljZXNcXFwiXFxuICAxOTpcXHRcXHRkZXBlbmRzIG9uIEkyQyBcXHUwMDI2XFx1MDAyNiBORVRcXG4gIDIwOlxcdFxcdHNlbGVjdCBSRUdNQVBfSTJDXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTExVDE3OjM0OjAwLjg5NjQ5NjQ4NloiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMzEyOTYyMDgwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBzZWUuLi5cblxuKipDaGVja2luZyBaTDMwNzNYIERlcGVuZGVuY3kqKlxuXG5IbW0sIHNvIHRoZSBgWkwzMDczWGAgZHJpdmVyIG5lZWRzIGBDT01QSUxFX1RFU1RgIHRvIGJlIGRpcmVjdGx5IHZpc2libGU/IFRoYXQgc2VlbXMgYSBiaXQuLi4gdW51c3VhbC4gTGV0J3Mgc2VlIGhvdyB0aGF0J3MgaGFuZGxlZDpcblxuYHRyaXN0YXRlIFwiTWljcm9jaGlwIEF6dXJpdGUgRFBMTC9QVFAvU3luY0UgZGV2aWNlc1wiIGlmIENPTVBJTEVfVEVTVGBcblxuT2theSwgeWVwLCB0aGF0J3Mgd2hhdCBpdCBsb29rcyBsaWtlLiAgSXQncyBjb25kaXRpb25hbGx5IGNvbXBpbGVkIGJhc2VkIG9uIGBDT01QSUxFX1RFU1RgLiAgSSBuZWVkIHRvIGNoZWNrIHRoYXQgdGhpcyBpcyB0aGUgYmVzdCBhcHByb2FjaC4gSXMgdGhpcyByZWFsbHkgdGhlIHByb3BlciBkZXNpZ24/ICBUaGlzIGZlZWxzIGEgYml0IG9mZiwgaXQgbWF5IGludGVyZmVyZSB3aXRoIHByb2R1Y3Rpb24gYnVpbGRzLCB3aGljaCBpcyBub3QgaWRlYWwuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSByZWFzb25pbmcgYmVoaW5kIHRoaXMgZGVzaWduIGNob2ljZS4gUGVyaGFwcyB0aGVyZSdzIGEgZ29vZCByZWFzb24sIGJ1dCBJJ2xsIG5lZWQgdG8gZGlnIGRlZXBlci4gSSdsbCBuZWVkIHRvIGNoZWNrIHRoZSBkZXBlbmRlbmNpZXMgb24gYE1MWDVfRFBMTGAgdG8gZW5zdXJlIHRoZXkgZG8gbm90IHJlcXVpcmUgYENPTVBJTEVfVEVTVGAgdG9vLlxuXG5cbiIsIklucHV0VG9rZW5zIjo0ODQ2LCJPdXRwdXRUb2tlbnMiOjQ2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NjEsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0xMVQxNzozNDowNC4yMDk0NjEwNjZaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6OTkwNTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogMjAzLFxuICBcIkxpbmVDb3VudFwiOiAxMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgMjAzOlxcdGNvbmZpZyBNTFg1X0RQTExcXG4gMjA0OlxcdFxcdHRyaXN0YXRlIFxcXCJNZWxsYW5veCA1dGggZ2VuZXJhdGlvbiBuZXR3b3JrIGFkYXB0ZXJzIChDb25uZWN0WCBzZXJpZXMpIERQTEwgc3VwcG9ydFxcXCJcXG4gMjA1OlxcdFxcdGRlcGVuZHMgb24gTkVUREVWSUNFUyBcXHUwMDI2XFx1MDAyNiBFVEhFUk5FVCBcXHUwMDI2XFx1MDAyNiBQQ0kgXFx1MDAyNlxcdTAwMjYgTUxYNV9DT1JFXFxuIDIwNjpcXHRcXHRzZWxlY3QgRFBMTFxcbiAyMDc6XFx0XFx0aGVscFxcbiAyMDg6XFx0XFx0ICBEUExMIHN1cHBvcnQgaW4gTWVsbGFub3ggVGVjaG5vbG9naWVzIENvbm5lY3RYIE5JQ3MuXFxuIDIwOTpcXHRcXG4gMjEwOlxcdGNvbmZpZyBNTFg1X0VOX1BTUFxcbiAyMTE6XFx0XFx0Ym9vbCBcXFwiTWVsbGFub3ggVGVjaG5vbG9naWVzIHN1cHBvcnQgZm9yIFBTUCBjcnlwdG9ncmFwaHktb2ZmbG9hZCBhY2NlbGVyYXRpb25cXFwiXFxuIDIxMjpcXHRcXHRkZXBlbmRzIG9uIElORVRfUFNQXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTExVDE3OjM0OjA0LjIwOTU2MjM5NloiLCJTZXEiOjE1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoyNjU4MTU1MjgwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIGFuIGV4cGVydCdzIGludGVybmFsIG1vbm9sb2d1ZTpcblxuKipDb25zaWRlcmluZyBDbG9jayBTeW5jaHJvbml6YXRpb24gT3B0aW9ucyoqXG5cblJpZ2h0LCBgTUxYNV9EUExMYCBpcyBhIHN0cm9uZyBjb250ZW5kZXIsIGEgc29saWQgY2hvaWNlIGZvciB0aGUga2luZCBvZiBwcmVjaXNpb24gSSBuZWVkLiBJdCdzIGdvdCB0aGUgcmlnaHQgY2hhcmFjdGVyaXN0aWNzIGZvciB0aGlzIGFwcGxpY2F0aW9uLiBCdXQsIEkgc2hvdWxkIGFsc28gd2VpZ2ggaXQgYWdhaW5zdCBvdGhlciBwb3NzaWJpbGl0aWVzLiBJJ20gd29uZGVyaW5nIGlmIGBQVFBfMTU4OF9DTE9DS19PQ1BgIG1pZ2h0IG9mZmVyIHNvbWUgYWR2YW50YWdlcyBpbiB0aGlzIHNjZW5hcmlvLiBJIGhhdmUgdG8gYXNzZXNzIGlmIGl0cyBhcmNoaXRlY3R1cmUgc3VpdHMgdGhlIHN5c3RlbSBiZXR0ZXIsIGVzcGVjaWFsbHkgY29uc2lkZXJpbmcgdGhlIHBvdGVudGlhbCBpbnRlZ3JhdGlvbiBjaGFsbGVuZ2VzIG9mIGJvdGggc29sdXRpb25zLlxuXG5cbiIsIklucHV0VG9rZW5zIjo1MzQwLCJPdXRwdXRUb2tlbnMiOjM1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzEsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0xMVQxNzozNDowNi44Njc3MjA0NDZaIiwiU2VxIjoxNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTIwMDkwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImRyaXZlcnMvcHRwL0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogMjEwLFxuICBcIkxpbmVDb3VudFwiOiAxMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgMjEwOlxcdGNvbmZpZyBQVFBfMTU4OF9DTE9DS19PQ1BcXG4gMjExOlxcdFxcdHRyaXN0YXRlIFxcXCJPcGVuQ29tcHV0ZSBUaW1lQ2FyZCBhcyBQVFAgY2xvY2tcXFwiXFxuIDIxMjpcXHRcXHRkZXBlbmRzIG9uIFBUUF8xNTg4X0NMT0NLXFxuIDIxMzpcXHRcXHRkZXBlbmRzIG9uIEhBU19JT01FTSBcXHUwMDI2XFx1MDAyNiBQQ0lcXG4gMjE0OlxcdFxcdGRlcGVuZHMgb24gSTJDIFxcdTAwMjZcXHUwMDI2IE1URFxcbiAyMTU6XFx0XFx0ZGVwZW5kcyBvbiBTRVJJQUxfODI1MFxcbiAyMTY6XFx0XFx0ZGVwZW5kcyBvbiAhUzM5MFxcbiAyMTc6XFx0XFx0ZGVwZW5kcyBvbiBDT01NT05fQ0xLXFxuIDIxODpcXHRcXHRzZWxlY3QgTkVUX0RFVkxJTktcXG4gMjE5OlxcdFxcdHNlbGVjdCBDUkMxNlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xMVQxNzozNDowNi44Njc4NDIzNzZaIiwiU2VxIjoxNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzU0MDQxMTM5NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipJbnZlc3RpZ2F0aW5nIHRoZSBNTFg1X0RQTEwvUFRQXzE1ODhfQ0xPQ0tfT0NQIFBvc3NpYmlsaXR5KipcblxuT2theSwgbGV0J3MgZXhwbG9yZSBlbmFibGluZyBgTUxYNV9EUExMYCBvciBwb3RlbnRpYWxseSBgUFRQXzE1ODhfQ0xPQ0tfT0NQYC4gUmlnaHQsIHJpZ2h0LCBJIG5lZWQgdG8gcmVtZW1iZXIgYERQTExgIGlzIHRoZSBzdWJzeXN0ZW0gaXRzZWxmLiBUaGUgcGF0Y2ggaXMgdG91Y2hpbmcgYGRyaXZlcnMvZHBsbC9kcGxsX25ldGxpbmsuY2AsIHdoaWNoIGdpdmVzIHVzIGEgY2x1ZS4gVGhlIGtleSBxdWVzdGlvbiBpcyB3aGV0aGVyIHRoaXMgaXMgYWNjZXNzaWJsZSBmcm9tIHVzZXIgc3BhY2UuIEJpbmdvLCBpdCdzIGEgbmV0bGluayBpbnRlcmZhY2UsIHNvIHRoYXQgbG9va3MgcHJvbWlzaW5nLiBOb3csIGxldCBtZSBkaWcgaW50byBgZHBsbF9tc2dfYWRkX3Bpbl9yZWZfc3luY2AgYW5kIGBkcGxsX2NtZF9waW5fZ2V0X29uZWAgdG8gdW5kZXJzdGFuZCB0aGUgZGF0YSBmbG93IGFuZCBhdmFpbGFibGUgY29udHJvbHMuIFRoYXQncyB3aGVyZSB0aGUgcmVhbCBtYWdpYyBoYXBwZW5zLCBzbyBsZXQncyBzZWUgd2hhdCdzIHdoYXQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjU2OTgsIk91dHB1dFRva2VucyI6NDUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMTQsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0xMVQxNzozNDoxMC40MDgyNTY0NzNaIiwiU2VxIjoxOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI2MDgyNTMxNSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJkcGxsX2NtZF9waW5fZ2V0X29uZVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL2RwbGwvZHBsbF9uZXRsaW5rLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9kcGxsL2RwbGxfbmV0bGluay5jPTY5ND1zdGF0aWMgaW50XFxuZHJpdmVycy9kcGxsL2RwbGxfbmV0bGluay5jOjY5NTpkcGxsX2NtZF9waW5fZ2V0X29uZShzdHJ1Y3Qgc2tfYnVmZiAqbXNnLCBzdHJ1Y3QgZHBsbF9waW4gKnBpbixcXG5kcml2ZXJzL2RwbGwvZHBsbF9uZXRsaW5rLmMtNjk2LVxcdFxcdCAgICAgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKVxcbi0tXFxuZHJpdmVycy9kcGxsL2RwbGxfbmV0bGluay5jPTg4OT1kcGxsX3Bpbl9ldmVudF9zZW5kKGVudW0gZHBsbF9jbWQgZXZlbnQsIHN0cnVjdCBkcGxsX3BpbiAqcGluKVxcbi0tXFxuZHJpdmVycy9kcGxsL2RwbGxfbmV0bGluay5jLTkwNC1cXHRcXHRnb3RvIGVycl9mcmVlX21zZztcXG5kcml2ZXJzL2RwbGwvZHBsbF9uZXRsaW5rLmM6OTA1OlxcdHJldCA9IGRwbGxfY21kX3Bpbl9nZXRfb25lKG1zZywgcGluLCBOVUxMKTtcXG5kcml2ZXJzL2RwbGwvZHBsbF9uZXRsaW5rLmMtOTA2LVxcdGlmIChyZXQpXFxuLS1cXG5kcml2ZXJzL2RwbGwvZHBsbF9uZXRsaW5rLmM9MTc4ND1pbnQgZHBsbF9ubF9waW5fZ2V0X2RvaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGdlbmxfaW5mbyAqaW5mbylcXG4tLVxcbmRyaXZlcnMvZHBsbC9kcGxsX25ldGxpbmsuYy0xODAxLVxcdH1cXG5kcml2ZXJzL2RwbGwvZHBsbF9uZXRsaW5rLmM6MTgwMjpcXHRyZXQgPSBkcGxsX2NtZF9waW5fZ2V0X29uZShtc2csIHBpbiwgaW5mby1cXHUwMDNlZXh0YWNrKTtcXG5kcml2ZXJzL2RwbGwvZHBsbF9uZXRsaW5rLmMtMTgwMy1cXHRpZiAocmV0KSB7XFxuLS1cXG5kcml2ZXJzL2RwbGwvZHBsbF9uZXRsaW5rLmM9MTgxMj1pbnQgZHBsbF9ubF9waW5fZ2V0X2R1bXBpdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0bGlua19jYWxsYmFjayAqY2IpXFxuLS1cXG5kcml2ZXJzL2RwbGwvZHBsbF9uZXRsaW5rLmMtMTgzMi1cXHRcXHR9XFxuZHJpdmVycy9kcGxsL2RwbGxfbmV0bGluay5jOjE4MzM6XFx0XFx0cmV0ID0gZHBsbF9jbWRfcGluX2dldF9vbmUoc2tiLCBwaW4sIGNiLVxcdTAwM2VleHRhY2spO1xcbmRyaXZlcnMvZHBsbC9kcGxsX25ldGxpbmsuYy0xODM0LVxcdFxcdGlmIChyZXQpIHtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTFUMTc6MzQ6MTAuNjY5MDg4MjM4WiIsIlNlcSI6MTksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ1MjYxOTg5MzcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBEUExMIE5ldGxpbmsgSGFuZGxlcnMqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGVzZSBuZXRsaW5rIGhhbmRsZXJzLCBgZHBsbF9ubF9waW5fZ2V0X2RvaXRgIGFuZCBgZHBsbF9ubF9waW5fZ2V0X2R1bXBpdGAuIFRoZXkncmUgaGFuZGxpbmcgYERQTExfQ01EX1BJTl9HRVRgLCB3aGljaCBpbW1lZGlhdGVseSBzdWdnZXN0cyB0aGlzIGZ1bmN0aW9uYWxpdHkgaXMgYWNjZXNzaWJsZSBmcm9tIHVzZXIgc3BhY2UsIGFzc3VtaW5nIHRoZSBEUExMIHN1YnN5c3RlbSBpcyBlbmFibGVkIGFuZCB0aGVyZSBhcmUgRFBMTCBkZXZpY2VzIHByZXNlbnQuIEJ1dCBhIHF1ZXN0aW9uIHBvcHMgaW50byBteSBoZWFkOiBkb2VzIGl0ICpyZXF1aXJlKiBhIERQTEwgZGV2aWNlIHRvIGJlIHJlZ2lzdGVyZWQsIG9yIGNhbiB0aGlzIGNvbW1hbmQgYmUgaXNzdWVkIHJlZ2FyZGxlc3M/IEkgc3VzcGVjdCBpdCBkb2VzIHJlcXVpcmUgYSByZWdpc3RlcmVkIGRldmljZSwgc2luY2UgdGhlIG5hbWUgaW1wbGllcyByZXRyaWV2YWwgb2YgYSBcInBpblwiLCBhbmQgdGhhdCdzIGxpa2VseSB0aWVkIHRvIGEgc3BlY2lmaWMgRFBMTCBkZXZpY2UgaW5zdGFuY2UuIFRvIGJlIHN1cmUsIEkgc2hvdWxkIGNoZWNrIHRoZSBpbXBsZW1lbnRhdGlvbiBvZiBgZHBsbF9ubF9waW5fZ2V0X2RvaXRgIHRvIHNlZSBleGFjdGx5IHdoYXQga2luZCBvZiBsb29rdXBzIGl0IGlzIHBlcmZvcm1pbmcuIExldCdzIGRpZyBpbnRvIHRoYXQgZnVuY3Rpb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjY2MTAsIk91dHB1dFRva2VucyI6NDMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMjQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMTFUMTc6MzQ6MTUuMTk1Mjg5NzU1WiIsIlNlcSI6MjAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE1Nzc1MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL2RwbGwvZHBsbF9uZXRsaW5rLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMTc4NCxcbiAgXCJMaW5lQ291bnRcIjogMzBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMTc4NDpcXHRpbnQgZHBsbF9ubF9waW5fZ2V0X2RvaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGdlbmxfaW5mbyAqaW5mbylcXG4xNzg1OlxcdHtcXG4xNzg2OlxcdFxcdHN0cnVjdCBkcGxsX3BpbiAqcGluID0gaW5mby1cXHUwMDNldXNlcl9wdHJbMF07XFxuMTc4NzpcXHRcXHRzdHJ1Y3Qgc2tfYnVmZiAqbXNnO1xcbjE3ODg6XFx0XFx0c3RydWN0IG5sYXR0ciAqaGRyO1xcbjE3ODk6XFx0XFx0aW50IHJldDtcXG4xNzkwOlxcdFxcbjE3OTE6XFx0XFx0aWYgKCFwaW4pXFxuMTc5MjpcXHRcXHRcXHRyZXR1cm4gLUVOT0RFVjtcXG4xNzkzOlxcdFxcdG1zZyA9IGdlbmxtc2dfbmV3KE5MTVNHX0dPT0RTSVpFLCBHRlBfS0VSTkVMKTtcXG4xNzk0OlxcdFxcdGlmICghbXNnKVxcbjE3OTU6XFx0XFx0XFx0cmV0dXJuIC1FTk9NRU07XFxuMTc5NjpcXHRcXHRoZHIgPSBnZW5sbXNnX3B1dF9yZXBseShtc2csIGluZm8sIFxcdTAwMjZkcGxsX25sX2ZhbWlseSwgMCxcXG4xNzk3OlxcdFxcdFxcdFxcdFxcdERQTExfQ01EX1BJTl9HRVQpO1xcbjE3OTg6XFx0XFx0aWYgKCFoZHIpIHtcXG4xNzk5OlxcdFxcdFxcdG5sbXNnX2ZyZWUobXNnKTtcXG4xODAwOlxcdFxcdFxcdHJldHVybiAtRU1TR1NJWkU7XFxuMTgwMTpcXHRcXHR9XFxuMTgwMjpcXHRcXHRyZXQgPSBkcGxsX2NtZF9waW5fZ2V0X29uZShtc2csIHBpbiwgaW5mby1cXHUwMDNlZXh0YWNrKTtcXG4xODAzOlxcdFxcdGlmIChyZXQpIHtcXG4xODA0OlxcdFxcdFxcdG5sbXNnX2ZyZWUobXNnKTtcXG4xODA1OlxcdFxcdFxcdHJldHVybiByZXQ7XFxuMTgwNjpcXHRcXHR9XFxuMTgwNzpcXHRcXHRnZW5sbXNnX2VuZChtc2csIGhkcik7XFxuMTgwODpcXHRcXG4xODA5OlxcdFxcdHJldHVybiBnZW5sbXNnX3JlcGx5KG1zZywgaW5mbyk7XFxuMTgxMDpcXHR9XFxuMTgxMTpcXHRcXG4xODEyOlxcdGludCBkcGxsX25sX3Bpbl9nZXRfZHVtcGl0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRsaW5rX2NhbGxiYWNrICpjYilcXG4xODEzOlxcdHtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTFUMTc6MzQ6MTUuMTk1NDUxMDQ1WiIsIlNlcSI6MjEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMxNjUyMDY0NTAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqRFBMTCBEcml2ZXIgVGVzdGluZzogQSBRdWljayBUaG91Z2h0IFByb2Nlc3MqKlxuXG5Pa2F5LCBzbyBJJ20gdGhpbmtpbmcgSSBuZWVkIHRvIHJlZ2lzdGVyIGEgcGluIGZvciB0aGlzIHRvIHdvcmsuIFRoYXQncyB0aGUgZmlyc3Qgc3RlcC4gTm93LCBJIG5lZWQgdG8gZ2V0IHRoaXMgdGVzdGVkIHByb3Blcmx5LiBJJ20gd29uZGVyaW5nIGlmIHRoZXJlJ3MgYSBnb29kIHZpcnR1YWwgb3IgbW9jayBEUExMIGRyaXZlciBvdXQgdGhlcmUgdGhhdCBJIGNvdWxkIHVzZSBmb3IgdGhpcz8gU29tZXRoaW5nIHRvIHNpbXVsYXRlIHRoZSBoYXJkd2FyZSBlbnZpcm9ubWVudCB3aXRob3V0IGFjdHVhbGx5IGhhdmluZyB0aGUgaGFyZHdhcmUgcHJlc2VudC4gSXQgd291bGQgYmUgaWRlYWwgZm9yIGEgY29udHJvbGxlZCB0ZXN0aW5nIGVudmlyb25tZW50LiBMZXQgbWUgZG8gYSBxdWljayBzZWFyY2ggYW5kIHNlZSB3aGF0IHRoZSBvcHRpb25zIGFyZSBmb3IgdGhlc2UgRFBMTCBkcml2ZXJzLiBIb3BlZnVsbHksIEkgY2FuIGZpbmQgc29tZXRoaW5nIHN1aXRhYmxlIHF1aWNrbHkuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjc0NDgsIk91dHB1dFRva2VucyI6MjMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozNiwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTExVDE3OjM0OjE4LjM2MDY1OTk5NVoiLCJTZXEiOjIyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJjb2Rlc2VhcmNoLWRpci1pbmRleCIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjc5NDYwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRGlyXCI6IFwiZHJpdmVycy9kcGxsXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIkZpbGVzXCI6IFtcbiAgICBcImRwbGxfY29yZS5jXCIsXG4gICAgXCJkcGxsX2NvcmUuaFwiLFxuICAgIFwiZHBsbF9uZXRsaW5rLmNcIixcbiAgICBcImRwbGxfbmV0bGluay5oXCIsXG4gICAgXCJkcGxsX25sLmNcIixcbiAgICBcImRwbGxfbmwuaFwiXG4gIF0sXG4gIFwiU3ViZGlyc1wiOiBbXG4gICAgXCJ6bDMwNzN4XCJcbiAgXVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTFUMTc6MzQ6MTguMzYwNzQxNjY1WiIsIlNlcSI6MjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM5OTEwOTQxMDAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqSW52ZXN0aWdhdGluZyBEUExMIENvZGUgQWNjZXNzKipcblxuT2theSwgc28gSSdtIHRyeWluZyB0byBmaWd1cmUgb3V0IGhvdyBzeXprYWxsZXIgaXMgaGl0dGluZyB0aGlzIERQTEwgY29kZS4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIGxvb2sgYXQgdGhlIE1lbGxhbm94IGRyaXZlciwgc3BlY2lmaWNhbGx5IHNvbWV0aGluZyBpbiBgZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2RwbGwuY2Agb3IgYSBzaW1pbGFyIGZpbGUuIFRoYXQncyB1c3VhbGx5IHdoZXJlIHRoZXNlIHR5cGVzIG9mIHRoaW5ncyByZXNpZGUuIEJ1dCwgaGFuZyBvbi4uLiBubywgdGhlcmUncyBubyBkZWRpY2F0ZWQgbW9jayBkcml2ZXIgaW4gYGRyaXZlcnMvZHBsbGAsIHRoYXQgd291bGQgaGF2ZSBiZWVuIHRvbyBlYXN5IVxuXG5BbHJpZ2h0LCBsZXQncyBwaXZvdC4gQ291bGQgaXQgYmUgYSBQVFAgZHJpdmVyLXJlbGF0ZWQgaXNzdWU/IExldCBtZSBjaGVjayBgZHJpdmVycy9wdHAvcHRwX21vY2suY2AuLi4gbm9wZSwgbm90IHRoZXJlIGVpdGhlci4gVGhpcyBpcyBiZWNvbWluZyBtb3JlIGludGVyZXN0aW5nLlxuXG5UaGUgY29yZSBxdWVzdGlvbiBpcywgKmhvdyogaXMgc3l6a2FsbGVyIG1hbmFnaW5nIHRvIHJlYWNoIHRoaXMgY29kZSBpbiB0aGUgZmlyc3QgcGxhY2U/IEl0IG1lYW5zIHN5emthbGxlciBpcyBsb2FkaW5nIHNvbWUgY29tcG9uZW50IHRvIGNhbGwgRFBMTCBjb2RlLiBEb2VzIHRoZSB0ZXN0aW5nIGVudmlyb25tZW50IGluY2x1ZGUgbG9hZGluZyBhbmQgdXNpbmcgYSBuZXR3b3JrIGRldmljZSBzaW11bGF0b3IsIGxpa2UgYG5ldGRldnNpbWAsIG9yIHNvbWV0aGluZyBjb21wYXJhYmxlPyBBbmQgaWYgaXQncyBsb2FkaW5nIGEgc2ltdWxhdG9yLCBkb2VzIHRoYXQgc2ltdWxhdG9yIGhhdmUgYW55IERQTEwgZnVuY3Rpb25hbGl0eSBpbnRlZ3JhdGVkPyBUaGF0J3MgcHJvYmFibHkgd2hlcmUgdGhlIHRyaWdnZXIgaXMuIEkgbmVlZCB0byBpbnZlc3RpZ2F0ZSB0aGUgY2FwYWJpbGl0aWVzIG9mIGFueSBzaW11bGF0ZWQgbmV0d29yayBkZXZpY2VzLlxuXG5cbiIsIklucHV0VG9rZW5zIjo3NzE3LCJPdXRwdXRUb2tlbnMiOjMwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6OTksIlRvb2xDYWxscyI6WyJjb2Rlc2VhcmNoLWRpci1pbmRleCJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTExVDE3OjM0OjIyLjM1MTgzODg1NVoiLCJTZXEiOjI0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjA4MTEyNDEzLCJFcnJvciI6Im5vIG1hdGNoZXMiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJkcGxsXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L25ldGRldnNpbVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJlcnJvclwiOiBcIm5vIG1hdGNoZXNcIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTFUMTc6MzQ6MjIuOTU5OTYwNjc4WiIsIlNlcSI6MjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMzOTExNzkxNTYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBwcmVzZW50ZWQgaW4gdGhlIGZpcnN0IHBlcnNvbjpcblxuKipJbnZlc3RpZ2F0aW5nIERQTEwgRHJpdmVyIFNlbGVjdGlvbioqXG5cbkFscmlnaHQsIGxldCdzIGdldCBkb3duIHRvIGJyYXNzIHRhY2tzLiBNeSBpbml0aWFsIHRob3VnaHQgcHJvY2VzcyBpcyBnZWFyZWQgdG93YXJkIGRpYWdub3NpbmcgdGhlIHBvdGVudGlhbCBmb3IgYSBEUExMIGNvbmZpZ3VyYXRpb24uIEZpcnN0LCBJIG5lZWQgdG8gbWV0aG9kaWNhbGx5IGNoZWNrIGZvciBhbnkgdmlydHVhbCBkcml2ZXJzIHRoYXQgYXJlIGRlc2lnbmVkIHRvIHNlbGVjdCBEUExMLiBUaGlzIGlzIHRoZSBmaXJzdCBsb2dpY2FsIHN0ZXAuIElkZW50aWZ5aW5nIHRoZXNlIGRyaXZlcnMgd2lsbCBpbW1lZGlhdGVseSBnaXZlIG1lIGEgc3RhcnRpbmcgcG9pbnQsIGFuZCBJJ2xsIGtub3cgd2hlcmUgdG8gbG9vayBpZiBJIGNhbiBjb25maXJtIGEgRFBMTCBpbnN0YW5jZS4gSSB3YW50IHRvIHJ1bGUgb3V0IHRoZSBiYXNpYyBjYXVzZXMgZmlyc3QsIHNvIEkgd2FudCB0byBrbm93IGlmIHRoZXJlIGlzIGFueXRoaW5nIHJ1bm5pbmcsIHRoYXQncyBzdXBwb3NlZCB0byBiZSBEUExMLlxuXG5cbiIsIklucHV0VG9rZW5zIjo4MTI0LCJPdXRwdXRUb2tlbnMiOjIzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMTFUMTc6MzQ6MjYuMzUxMTQyMzk0WiIsIlNlcSI6MjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1MjI3ODAzNTg2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInNlbGVjdCBEUExMXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIlwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL2RwbGwvemwzMDczeC9LY29uZmlnPTM9Y29uZmlnIFpMMzA3M1hcXG4tLVxcbmRyaXZlcnMvZHBsbC96bDMwNzN4L0tjb25maWctNS1cXHRkZXBlbmRzIG9uIE5FVFxcbmRyaXZlcnMvZHBsbC96bDMwNzN4L0tjb25maWc6NjpcXHRzZWxlY3QgRFBMTFxcbmRyaXZlcnMvZHBsbC96bDMwNzN4L0tjb25maWctNy1cXHRzZWxlY3QgTkVUX0RFVkxJTktcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL0tjb25maWc9MjkxPWNvbmZpZyBJQ0VcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL0tjb25maWctMzA1LVxcdHNlbGVjdCBQTERNRldcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9LY29uZmlnOjMwNjpcXHRzZWxlY3QgRFBMTFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL0tjb25maWctMzA3LVxcdGhlbHBcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9LY29uZmlnPTIwMz1jb25maWcgTUxYNV9EUExMXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvS2NvbmZpZy0yMDUtXFx0ZGVwZW5kcyBvbiBORVRERVZJQ0VTIFxcdTAwMjZcXHUwMDI2IEVUSEVSTkVUIFxcdTAwMjZcXHUwMDI2IFBDSSBcXHUwMDI2XFx1MDAyNiBNTFg1X0NPUkVcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvS2NvbmZpZzoyMDY6XFx0c2VsZWN0IERQTExcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvS2NvbmZpZy0yMDctXFx0aGVscFxcbi0tXFxuZHJpdmVycy9wdHAvS2NvbmZpZz0yMTA9Y29uZmlnIFBUUF8xNTg4X0NMT0NLX09DUFxcbi0tXFxuZHJpdmVycy9wdHAvS2NvbmZpZy0yMTktXFx0c2VsZWN0IENSQzE2XFxuZHJpdmVycy9wdHAvS2NvbmZpZzoyMjA6XFx0c2VsZWN0IERQTExcXG5kcml2ZXJzL3B0cC9LY29uZmlnLTIyMS1cXHRoZWxwXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTExVDE3OjM0OjMxLjU3ODk1MjI3WiIsIlNlcSI6MjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQwMjQ0MTY2ODgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIERyaXZlciBJZGVudGlmaWNhdGlvbiBhbmQgQ29uZmlndXJhdGlvbioqXG5cbk9rYXksIHNvIG5vbmUgb2YgdGhlc2UgbG9vayBsaWtlIHZpcnR1YWwgZHJpdmVycy4gYElDRWDigJR0aGF0J3MgdGhlIEludGVsIEV0aGVybmV0IENvbm5lY3Rpb24gRTgwMCBTZXJpZXMsIEkgcmVjb2duaXplIHRoYXQuIGBNTFg1X0RQTExgIGlzIE1lbGxhbm94LiBBbmQgYFBUUF8xNTg4X0NMT0NLX09DUGAgaXMgdGhlIE9wZW5Db21wdXRlIFRpbWVDYXJk4oCUZ290IGl0LiBOb3csIGBaTDMwNzNYYC4uLiB0aGF0J3MgdGhlIE1pY3JvY2hpcCBBenVyaXRlLiBIbW0sIEkgd29uZGVyIGlmIGl0IGNhbiBiZSBkaXJlY3RseSBpbnN0YW50aWF0ZWQsIGZyb20gdXNlciBzcGFjZSwgdmlhIEkyQyBvciBTUEk/IFRoYXQgd291bGQgYmUgaW50ZXJlc3RpbmcuIE15IGluc3RpbmN0IGlzIHRoYXQgaXQgKm1pZ2h0KiBiZSBwb3NzaWJsZSwgZGVwZW5kaW5nIG9uIHRoZSBkZXNpZ24uIEknbGwgbmVlZCB0byBkaWcgaW50byB0aGUgZHJpdmVyIGNvZGUgdG8gY29uZmlybSB0aGF0LiBMZXQncyBzdGFydCBieSBsb29raW5nIGF0IGBkcml2ZXJzL2RwbGwvemwzMDczeC96bDMwNzN4LmNgIG9yIHNvbWV0aGluZyBzaW1pbGFyIHRvIHNlZSBob3cgaXQncyBpbml0aWFsaXplZCBhbmQgY29uZmlndXJlZC4gVGhhdCBzaG91bGQgdGVsbCBtZSB3aGF0IGludGVyZmFjZXMgYXJlIGV4cG9zZWQgYW5kIHdoZXRoZXIgdXNlci1zcGFjZSBjb250cm9sIGlzIGFuIG9wdGlvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6ODcxNywiT3V0cHV0VG9rZW5zIjozMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEyMywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0xMVQxNzozNDozNS42MDMzNzE0ODhaIiwiU2VxIjoyOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiY29kZXNlYXJjaC1kaXItaW5kZXgiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1NjY3NTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJEaXJcIjogXCJkcml2ZXJzL2RwbGwvemwzMDczeFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJGaWxlc1wiOiBbXG4gICAgXCJjaGFuLmNcIixcbiAgICBcImNoYW4uaFwiLFxuICAgIFwiY29yZS5jXCIsXG4gICAgXCJjb3JlLmhcIixcbiAgICBcImRldmxpbmsuY1wiLFxuICAgIFwiZGV2bGluay5oXCIsXG4gICAgXCJkcGxsLmNcIixcbiAgICBcImRwbGwuaFwiLFxuICAgIFwiZmxhc2guY1wiLFxuICAgIFwiZmxhc2guaFwiLFxuICAgIFwiZncuY1wiLFxuICAgIFwiZncuaFwiLFxuICAgIFwiaTJjLmNcIixcbiAgICBcIm91dC5jXCIsXG4gICAgXCJvdXQuaFwiLFxuICAgIFwicHJvcC5jXCIsXG4gICAgXCJwcm9wLmhcIixcbiAgICBcInJlZi5jXCIsXG4gICAgXCJyZWYuaFwiLFxuICAgIFwicmVncy5oXCIsXG4gICAgXCJzcGkuY1wiLFxuICAgIFwic3ludGguY1wiLFxuICAgIFwic3ludGguaFwiXG4gIF0sXG4gIFwiU3ViZGlyc1wiOiBudWxsXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xMVQxNzozNDozNS42MDM5NDI2NjhaIiwiU2VxIjoyOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzE0Njc4NDA0MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgRHJpdmVyIEludGVncmF0aW9uIGZvciBTeXprYWxsZXIgVGVzdGluZyoqXG5cbk9rYXksIHNvIEkgc2VlIHRoaXMgY29kZSBpcyB3b3JraW5nIHdpdGggYGkyYy5jYCBhbmQgYHNwaS5jYC4gVGhhdCBpbW1lZGlhdGVseSB0ZWxscyBtZSBpdCdzIGxpa2VseSBkZWFsaW5nIHdpdGggZWl0aGVyIGFuIEkyQyBvciBTUEkgZGV2aWNlLiBBIGdvb2Qgc3RhcnRpbmcgcG9pbnQgZm9yIHRlc3Rpbmcgd2l0aCBzeXprYWxsZXIsIHRoZW4uIFRoZSBzeXN0ZW0gc2hvdWxkIGFsbG93IHN5emthbGxlciB0byBjcmVhdGUgaW5zdGFuY2VzIG9mIHRoZXNlIGRldmljZXMsIGJ1dCB3aGF0IGludGVyZmFjZXMgZG9lcyBpdCBzdXBwb3J0PyBBaCwgaXQgc2VlbXMgbGlrZSBgaTJjLXN0dWJgLCBgaTJjLWRldmAsIGFuZCB0aGUgcGxhaW4gb2xkIGBzcGlgIG1vY2sgaW50ZXJmYWNlcyBhcmUgdGhlIHdheSB0byBnbyBoZXJlLiBMZXQncyBkZWx2ZSBpbiBhbmQgc2VlLiBOb3csIGxldCdzIGRyaWxsIGRvd24gaW50byBhIHNwZWNpZmljIGV4YW1wbGUuIEkgdGhpbmsgY2hlY2tpbmcgb3V0IGBkcml2ZXJzL2RwbGwvemwzMDczeC9pMmMuY2Agc2hvdWxkIGJlIHVzZWZ1bC4gVGhhdCBnaXZlcyB1cyBhIGNvbmNyZXRlIGltcGxlbWVudGF0aW9uIHRvIGV4YW1pbmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjkyNDcsIk91dHB1dFRva2VucyI6NDQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo4MiwiVG9vbENhbGxzIjpbImNvZGVzZWFyY2gtZGlyLWluZGV4Il19LHsiU3RhcnRlZCI6IjIwMjYtMDctMTFUMTc6MzQ6MzguNzUwNzI5NTU4WiIsIlNlcSI6MzAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIzMzA5MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL2RwbGwvemwzMDczeC9pMmMuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAxLFxuICBcIkxpbmVDb3VudFwiOiA1MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgICAxOlxcdC8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcXG4gICAyOlxcdFxcbiAgIDM6XFx0I2luY2x1ZGUgXFx1MDAzY2xpbnV4L2Rldl9wcmludGsuaFxcdTAwM2VcXG4gICA0OlxcdCNpbmNsdWRlIFxcdTAwM2NsaW51eC9lcnIuaFxcdTAwM2VcXG4gICA1OlxcdCNpbmNsdWRlIFxcdTAwM2NsaW51eC9pMmMuaFxcdTAwM2VcXG4gICA2OlxcdCNpbmNsdWRlIFxcdTAwM2NsaW51eC9tb2R1bGUuaFxcdTAwM2VcXG4gICA3OlxcdCNpbmNsdWRlIFxcdTAwM2NsaW51eC9yZWdtYXAuaFxcdTAwM2VcXG4gICA4OlxcdFxcbiAgIDk6XFx0I2luY2x1ZGUgXFxcImNvcmUuaFxcXCJcXG4gIDEwOlxcdFxcbiAgMTE6XFx0c3RhdGljIGludCB6bDMwNzN4X2kyY19wcm9iZShzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50KVxcbiAgMTI6XFx0e1xcbiAgMTM6XFx0XFx0c3RydWN0IGRldmljZSAqZGV2ID0gXFx1MDAyNmNsaWVudC1cXHUwMDNlZGV2O1xcbiAgMTQ6XFx0XFx0c3RydWN0IHpsMzA3M3hfZGV2ICp6bGRldjtcXG4gIDE1OlxcdFxcbiAgMTY6XFx0XFx0emxkZXYgPSB6bDMwNzN4X2Rldm1fYWxsb2MoZGV2KTtcXG4gIDE3OlxcdFxcdGlmIChJU19FUlIoemxkZXYpKVxcbiAgMTg6XFx0XFx0XFx0cmV0dXJuIFBUUl9FUlIoemxkZXYpO1xcbiAgMTk6XFx0XFxuICAyMDpcXHRcXHR6bGRldi1cXHUwMDNlcmVnbWFwID0gZGV2bV9yZWdtYXBfaW5pdF9pMmMoY2xpZW50LCBcXHUwMDI2emwzMDczeF9yZWdtYXBfY29uZmlnKTtcXG4gIDIxOlxcdFxcdGlmIChJU19FUlIoemxkZXYtXFx1MDAzZXJlZ21hcCkpXFxuICAyMjpcXHRcXHRcXHRyZXR1cm4gZGV2X2Vycl9wcm9iZShkZXYsIFBUUl9FUlIoemxkZXYtXFx1MDAzZXJlZ21hcCksXFxuICAyMzpcXHRcXHRcXHRcXHRcXHQgICAgIFxcXCJGYWlsZWQgdG8gaW5pdGlhbGl6ZSByZWdtYXBcXFxcblxcXCIpO1xcbiAgMjQ6XFx0XFxuICAyNTpcXHRcXHRyZXR1cm4gemwzMDczeF9kZXZfcHJvYmUoemxkZXYpO1xcbiAgMjY6XFx0fVxcbiAgMjc6XFx0XFxuICAyODpcXHRzdGF0aWMgY29uc3Qgc3RydWN0IGkyY19kZXZpY2VfaWQgemwzMDczeF9pMmNfaWRbXSA9IHtcXG4gIDI5OlxcdFxcdHsgLm5hbWUgPSBcXFwiemwzMDczMVxcXCIgfSxcXG4gIDMwOlxcdFxcdHsgLm5hbWUgPSBcXFwiemwzMDczMlxcXCIgfSxcXG4gIDMxOlxcdFxcdHsgLm5hbWUgPSBcXFwiemwzMDczM1xcXCIgfSxcXG4gIDMyOlxcdFxcdHsgLm5hbWUgPSBcXFwiemwzMDczNFxcXCIgfSxcXG4gIDMzOlxcdFxcdHsgLm5hbWUgPSBcXFwiemwzMDczNVxcXCIgfSxcXG4gIDM0OlxcdFxcdHsgLyogc2VudGluZWwgKi8gfVxcbiAgMzU6XFx0fTtcXG4gIDM2OlxcdE1PRFVMRV9ERVZJQ0VfVEFCTEUoaTJjLCB6bDMwNzN4X2kyY19pZCk7XFxuICAzNzpcXHRcXG4gIDM4OlxcdHN0YXRpYyBjb25zdCBzdHJ1Y3Qgb2ZfZGV2aWNlX2lkIHpsMzA3M3hfaTJjX29mX21hdGNoW10gPSB7XFxuICAzOTpcXHRcXHR7IC5jb21wYXRpYmxlID0gXFxcIm1pY3JvY2hpcCx6bDMwNzMxXFxcIiB9LFxcbiAgNDA6XFx0XFx0eyAuY29tcGF0aWJsZSA9IFxcXCJtaWNyb2NoaXAsemwzMDczMlxcXCIgfSxcXG4gIDQxOlxcdFxcdHsgLmNvbXBhdGlibGUgPSBcXFwibWljcm9jaGlwLHpsMzA3MzNcXFwiIH0sXFxuICA0MjpcXHRcXHR7IC5jb21wYXRpYmxlID0gXFxcIm1pY3JvY2hpcCx6bDMwNzM0XFxcIiB9LFxcbiAgNDM6XFx0XFx0eyAuY29tcGF0aWJsZSA9IFxcXCJtaWNyb2NoaXAsemwzMDczNVxcXCIgfSxcXG4gIDQ0OlxcdFxcdHsgLyogc2VudGluZWwgKi8gfVxcbiAgNDU6XFx0fTtcXG4gIDQ2OlxcdE1PRFVMRV9ERVZJQ0VfVEFCTEUob2YsIHpsMzA3M3hfaTJjX29mX21hdGNoKTtcXG4gIDQ3OlxcdFxcbiAgNDg6XFx0c3RhdGljIHN0cnVjdCBpMmNfZHJpdmVyIHpsMzA3M3hfaTJjX2RyaXZlciA9IHtcXG4gIDQ5OlxcdFxcdC5kcml2ZXIgPSB7XFxuICA1MDpcXHRcXHRcXHQubmFtZSA9IFxcXCJ6bDMwNzN4LWkyY1xcXCIsXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTExVDE3OjM0OjM4Ljc1MDk2NzI2OFoiLCJTZXEiOjMxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNzMzNzE0NDg2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBTeXprYWxsZXIncyBJMkMgRGV2aWNlIEluc3RhbnRpYXRpb24gQ2FwYWJpbGl0aWVzKipcblxuT2theSwgc28gSSdtIHRoaW5raW5nLCB5ZXMsIHN5emthbGxlciAqY2FuKiBkZWZpbml0ZWx5IGhhbmRsZSB0aGUgaW5zdGFudGlhdGlvbiBvZiB0aGlzIGRldmljZSwgdGhlIFpMMzA3M1gsIHVzaW5nIG5ldGxpbmssIHNwZWNpZmljYWxseSB0aHJvdWdoIGBJMkNfTkVXX0RFVklDRWAgb3IgYSBzaW1pbGFyIG1ldGhvZCwgb3IgZXZlbiB2aWEgc3lzZnMgYW5kIHRoZSBgbmV3X2RldmljZWAgZW50cnkuIEhhbmcgb24uLi4gaXNuJ3QgdGhlcmUgYWxyZWFkeSBzdXBwb3J0IGZvciB0aGF0IGluIHN5emthbGxlciB2aWEgc3lzZnM/IFRoYXQncyByaWdodCwgdGhlcmUgaXMuIEV4Y2VsbGVudCEgVGhhdCBtYWtlcyBgWkwzMDczWF9JMkNgIGEgdmVyeSBzZW5zaWJsZSBjb25maWd1cmF0aW9uIHRvIGVuYWJsZS4gTm93LCBsZXQncyBqdXN0IHNoaWZ0IGdlYXJzIGFuZCBxdWlja2x5IHRha2UgYSBsb29rIGF0IHRoZSBgWkwzMDczWF9TUElgIGNvbmZpZyBhbmQgc2VlIHdoYXQncyB3aGF0LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMDQwMSwiT3V0cHV0VG9rZW5zIjo0MiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjg5LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMTFUMTc6MzQ6NDIuNDg0NjgzOTQ0WiIsIlNlcSI6MzIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE2NTE5MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL2RwbGwvemwzMDczeC9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDE3LFxuICBcIkxpbmVDb3VudFwiOiAyMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgIDE3OlxcdGNvbmZpZyBaTDMwNzNYX0kyQ1xcbiAgMTg6XFx0XFx0dHJpc3RhdGUgXFxcIkkyQyBidXMgaW1wbGVtZW50YXRpb24gZm9yIE1pY3JvY2hpcCBBenVyaXRlIGRldmljZXNcXFwiXFxuICAxOTpcXHRcXHRkZXBlbmRzIG9uIEkyQyBcXHUwMDI2XFx1MDAyNiBORVRcXG4gIDIwOlxcdFxcdHNlbGVjdCBSRUdNQVBfSTJDXFxuICAyMTpcXHRcXHRzZWxlY3QgWkwzMDczWFxcbiAgMjI6XFx0XFx0aGVscFxcbiAgMjM6XFx0XFx0ICBUaGlzIGlzIEkyQyBidXMgaW1wbGVtZW50YXRpb24gZm9yIE1pY3JvY2hpcCBBenVyaXRlIERQTEwvUFRQL1N5bmNFXFxuICAyNDpcXHRcXHQgIGRldmljZXMuXFxuICAyNTpcXHRcXG4gIDI2OlxcdFxcdCAgVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlIG1vZHVsZSB3aWxsXFxuICAyNzpcXHRcXHQgIGJlIGNhbGxlZCB6bDMwNzN4X2kyYy5cXG4gIDI4OlxcdFxcbiAgMjk6XFx0Y29uZmlnIFpMMzA3M1hfU1BJXFxuICAzMDpcXHRcXHR0cmlzdGF0ZSBcXFwiU1BJIGJ1cyBpbXBsZW1lbnRhdGlvbiBmb3IgTWljcm9jaGlwIEF6dXJpdGUgZGV2aWNlc1xcXCJcXG4gIDMxOlxcdFxcdGRlcGVuZHMgb24gTkVUIFxcdTAwMjZcXHUwMDI2IFNQSVxcbiAgMzI6XFx0XFx0c2VsZWN0IFJFR01BUF9TUElcXG4gIDMzOlxcdFxcdHNlbGVjdCBaTDMwNzNYXFxuICAzNDpcXHRcXHRoZWxwXFxuICAzNTpcXHRcXHQgIFRoaXMgaXMgU1BJIGJ1cyBpbXBsZW1lbnRhdGlvbiBmb3IgTWljcm9jaGlwIEF6dXJpdGUgRFBMTC9QVFAvU3luY0VcXG4gIDM2OlxcdFxcdCAgZGV2aWNlcy5cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTFUMTc6MzQ6NDIuNDg0ODUxMzQ0WiIsIlNlcSI6MzMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjU0MTYwMTk5ODQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQW5hbHlzaXMgb2YgRFBMTCBOZXRsaW5rIEludGVyZmFjZSBSZWFjaGFiaWxpdHkqKlxuXG5Pa2F5LCBoZXJlJ3MgaG93IEknbSB0aGlua2luZyB0aHJvdWdoIHRoaXMuIEVuYWJsaW5nIGJvdGggYFpMMzA3M1hfSTJDYCBhbmQgYFpMMzA3M1hfU1BJYCBlZmZlY3RpdmVseSB0cmlnZ2VycyB0aGUgYFpMMzA3M1hgIHNlbGVjdGlvbiwgd2hpY2ggaW4gdHVybiBtZWFucyB0aGUgYERQTExgIHN1YnN5c3RlbSBnZXRzIGFjdGl2YXRlZC4gIE15IHByaW1hcnkgY29uY2VybiBpcyBtYWtpbmcgdGhlIERQTEwgbmV0bGluayBpbnRlcmZhY2UgYWNjZXNzaWJsZSBhbmQsIGNydWNpYWxseSwgdGVzdGFibGUsIGVzcGVjaWFsbHkgZ2l2ZW4gdGhlIGxpa2VsaWhvb2Qgb2YgU3l6a2FsbGVyIHRhcmdldGluZyBpdC5cblxuTm93LCBsZXQncyBkcmlsbCBkb3duLiBJJ20gZm9jdXNpbmcgb24gd2hldGhlciBgZHBsbF9tc2dfYWRkX3Bpbl9yZWZfc3luY2AgaXMgcmVhY2hhYmxlLiAgSSBzZWUgdGhhdCBpdCdzIGNhbGxlZCBieSBgZHBsbF9jbWRfcGluX2dldF9vbmVgLCB3aGljaCBpcyBpdHNlbGYgY2FsbGVkIGJ5IGBkcGxsX25sX3Bpbl9nZXRfZG9pdGAgYW5kIGBkcGxsX25sX3Bpbl9nZXRfZHVtcGl0YC4gIFRob3NlIGZ1bmN0aW9ucyBhcmUsIG9mIGNvdXJzZSwgdGhlIG5ldGxpbmsgaGFuZGxlcnMgZm9yIHRoZSBgRFBMTF9DTURfUElOX0dFVGAgY29tbWFuZC4gR2l2ZW4gU3l6a2FsbGVyJ3MgYWdncmVzc2l2ZSBmdXp6aW5nIG9mIG5ldGxpbmssIG15IGV4cGVjdGF0aW9uIGlzIHRoYXQgdGhpcyBjb2RlIHdpbGwgKmRlZmluaXRlbHkqIGJlIGhpdCBpZiB0aGUgRFBMTCBzdWJzeXN0ZW0gaXMgYWN0aXZlIGFuZCBhIGRldmljZSBpcyByZWdpc3RlcmVkLiAgVGhpcyBpcyBiYXNlZCBvbiB0aGUgbmF0dXJlIG9mIHRoZSBmdXp6ZXIuXG5cbkknbSBtYWtpbmcgYSBtZW50YWwgbm90ZSB0byB2ZXJpZnkgdGhhdCBgZHBsbF9tc2dfYWRkX3Bpbl9yZWZfc3luY2AgaXMgaW5kZWVkIHByZXNlbnQgaW4gYGRyaXZlcnMvZHBsbC9kcGxsX25ldGxpbmsuY2AsIHdoaWNoIEknbGwgYmUgY29uZmlybWluZyBzaG9ydGx5LiBUaGlzIGlzIHRvIHZlcmlmeSB0aGUgYXNzdW1wdGlvbnMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjExMDA4LCJPdXRwdXRUb2tlbnMiOjQyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjE2LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMTFUMTc6MzQ6NDcuOTAwODczNjQ4WiIsIlNlcSI6MzQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI1NjA5MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL2RwbGwvZHBsbF9uZXRsaW5rLmNcIixcbiAgXCJGaXJzdExpbmVcIjogNTUxLFxuICBcIkxpbmVDb3VudFwiOiAzMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgNTUxOlxcdHN0YXRpYyBpbnRcXG4gNTUyOlxcdGRwbGxfbXNnX2FkZF9waW5fcmVmX3N5bmMoc3RydWN0IHNrX2J1ZmYgKm1zZywgc3RydWN0IGRwbGxfcGluICpwaW4sXFxuIDU1MzpcXHRcXHRcXHRcXHQgIHN0cnVjdCBkcGxsX3Bpbl9yZWYgKnJlZixcXG4gNTU0OlxcdFxcdFxcdFxcdCAgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKVxcbiA1NTU6XFx0e1xcbiA1NTY6XFx0XFx0Y29uc3Qgc3RydWN0IGRwbGxfcGluX29wcyAqb3BzID0gZHBsbF9waW5fb3BzKHJlZik7XFxuIDU1NzpcXHRcXHRzdHJ1Y3QgZHBsbF9kZXZpY2UgKmRwbGwgPSByZWYtXFx1MDAzZWRwbGw7XFxuIDU1ODpcXHRcXHR2b2lkICpwaW5fcHJpdiwgKnJlZl9zeW5jX3Bpbl9wcml2O1xcbiA1NTk6XFx0XFx0c3RydWN0IGRwbGxfcGluICpyZWZfc3luY19waW47XFxuIDU2MDpcXHRcXHRlbnVtIGRwbGxfcGluX3N0YXRlIHN0YXRlO1xcbiA1NjE6XFx0XFx0c3RydWN0IG5sYXR0ciAqbmVzdDtcXG4gNTYyOlxcdFxcdHVuc2lnbmVkIGxvbmcgaW5kZXg7XFxuIDU2MzpcXHRcXHRpbnQgcmV0O1xcbiA1NjQ6XFx0XFxuIDU2NTpcXHRcXHRwaW5fcHJpdiA9IGRwbGxfcGluX29uX2RwbGxfcHJpdihkcGxsLCBwaW4pO1xcbiA1NjY6XFx0XFx0eGFfZm9yX2VhY2goXFx1MDAyNnBpbi1cXHUwMDNlcmVmX3N5bmNfcGlucywgaW5kZXgsIHJlZl9zeW5jX3Bpbikge1xcbiA1Njc6XFx0XFx0XFx0aWYgKCFkcGxsX3Bpbl9hdmFpbGFibGUocmVmX3N5bmNfcGluKSlcXG4gNTY4OlxcdFxcdFxcdFxcdGNvbnRpbnVlO1xcbiA1Njk6XFx0XFx0XFx0cmVmX3N5bmNfcGluX3ByaXYgPSBkcGxsX3Bpbl9vbl9kcGxsX3ByaXYoZHBsbCwgcmVmX3N5bmNfcGluKTtcXG4gNTcwOlxcdFxcdFxcdC8qIFBpbiBtYXkgaGF2ZSBiZWVuIHVucmVnaXN0ZXJlZCBmcm9tIHRoaXMgZHBsbCBhbHJlYWR5ICovXFxuIDU3MTpcXHRcXHRcXHRpZiAoIXJlZl9zeW5jX3Bpbl9wcml2KVxcbiA1NzI6XFx0XFx0XFx0XFx0Y29udGludWU7XFxuIDU3MzpcXHRcXHRcXHRpZiAoV0FSTl9PTighb3BzLVxcdTAwM2VyZWZfc3luY19nZXQpKVxcbiA1NzQ6XFx0XFx0XFx0XFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xcbiA1NzU6XFx0XFx0XFx0cmV0ID0gb3BzLVxcdTAwM2VyZWZfc3luY19nZXQocGluLCBwaW5fcHJpdiwgcmVmX3N5bmNfcGluLFxcbiA1NzY6XFx0XFx0XFx0XFx0XFx0XFx0cmVmX3N5bmNfcGluX3ByaXYsIFxcdTAwMjZzdGF0ZSwgZXh0YWNrKTtcXG4gNTc3OlxcdFxcdFxcdGlmIChyZXQpXFxuIDU3ODpcXHRcXHRcXHRcXHRyZXR1cm4gcmV0O1xcbiA1Nzk6XFx0XFx0XFx0bmVzdCA9IG5sYV9uZXN0X3N0YXJ0KG1zZywgRFBMTF9BX1BJTl9SRUZFUkVOQ0VfU1lOQyk7XFxuIDU4MDpcXHRcXHRcXHRpZiAoIW5lc3QpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTExVDE3OjM0OjQ3LjkwMTEzMjM0OFoiLCJTZXEiOjM1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo3MTAwMTQwMzczLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBhIEtlcm5lbCBQYXRjaDogQSBUaG91Z2h0IFByb2Nlc3MqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIGtlcm5lbCBwYXRjaC4gSXQgc2VlbXMgbGlrZSBpdCdzIGFkZHJlc3NpbmcgYSBwb3RlbnRpYWwgdnVsbmVyYWJpbGl0eS4gU3BlY2lmaWNhbGx5LCBpdCdzIGFkZGluZyBhIGNoZWNrOlxuXG5gYGBjXG5cdFx0LyogUGluIG1heSBoYXZlIGJlZW4gdW5yZWdpc3RlcmVkIGZyb20gdGhpcyBkcGxsIGFscmVhZHkgKi9cblx0XHRpZiAoIXJlZl9zeW5jX3Bpbl9wcml2KVxuXHRcdFx0Y29udGludWU7XG5gYGBcblxuVGhpcyBpcyBzbWFydC4gSXQgcHJldmVudHMgYSBOVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2UsIG9yIHNvbWV0aGluZyBzaW1pbGFyLCBsYXRlciBvbiB3aGVuIHRoZSBjb2RlIHVzZXMgYHJlZl9zeW5jX3Bpbl9wcml2YC4gR29vZCBjYXRjaCEgVGhhdCB2YXJpYWJsZSBnZXRzIHBhc3NlZCB0byBgb3BzLVx1MDAzZXJlZl9zeW5jX2dldGAsIGFuZCBpZiBpdCB3ZXJlIE5VTEwsIHRoZSBkcml2ZXIgY291bGQgZGVmaW5pdGVseSBjcmFzaC4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlLCBkZWZpbml0ZWx5IHNvbWV0aGluZyB3b3J0aCBmdXp6aW5nIHRvIG1ha2Ugc3VyZSBpdCdzIHJvYnVzdC5cblxuTm93LCBsZXQgbWUgc2VlIGlmIHRoZXJlIGFyZSBhbnkgb3RoZXIgY29uZmlndXJhdGlvbiBvcHRpb25zIEkgc2hvdWxkIGVuYWJsZSB3aXRoIHRoaXMgcGF0Y2guIEl0IGxvb2tzIGxpa2UgYERQTExgIGlzIHNlbGVjdGVkIGJ5IHNldmVyYWwgb3RoZXIgY29uZmlndXJhdGlvbnMgbGlrZSBgWkwzMDczWF9JMkNgLCBgWkwzMDczWF9TUElgLCBgTUxYNV9EUExMYCwgYFBUUF8xNTg4X0NMT0NLX09DUGAsIGFuZCBgSUNFYC4gVGhlIGBaTDMwNzNYX0kyQ2AgYW5kIGBaTDMwNzNYX1NQSWAgY29uZmlndXJhdGlvbnMgYXJlIGlkZWFsIGZvciB0ZXN0aW5nIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBiZWNhdXNlIHRoZXkgY2FuIHVzZSBJMkMvU1BJIG1vY2sgaW50ZXJmYWNlcy4gSSdsbCBhZGQgdGhvc2UgdG8gdGhlIGJ1aWxkLiBJJ2xsIGFsc28gYWRkIGBEUExMYCBzaW5jZSBpdCdzIGEgYm9vbGVhbiB2YWx1ZS4gV2FpdCwgdGhlIGBzZXQtcmVzdWx0c2AgZG9jdW1lbnRhdGlvbiBzYXlzIG5vdCB0byBpbmNsdWRlIHRoZSBcIkNPTkZJR19cIiBwcmVmaXgsIHNvIEknbGwganVzdCB1c2UgdGhlIGJhc2UgbmFtZXM6IGBaTDMwNzNYX0kyQ2AsIGBaTDMwNzNYX1NQSWAsIGFuZCBgRFBMTGAuXG5cbk5leHQsIEkgbmVlZCB0byBjaGVjayB0aGUgY29kZSB0aGF0J3MgcmVsYXRlZCB0byB0aGlzIGNoZWNrLiBJJ2xsIGxvb2sgYXQgYGRwbGxfbXNnX2FkZF9waW5fcmVmX3N5bmNgIGluIGBkcml2ZXJzL2RwbGwvZHBsbF9uZXRsaW5rLmNgLiBJdCdzIGEgc3RhdGljIGZ1bmN0aW9uLCBhbmQgaXQncyBjYWxsZWQgYnkgYGRwbGxfY21kX3Bpbl9nZXRfb25lYC4gT2theSwgbGV0J3MgdGFrZSBhIGxvb2sgYXQgdGhhdCBmdW5jdGlvbiBuZXh0IHRvIHNlZSB0aGUgY29udGV4dC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTIxODYsIk91dHB1dFRva2VucyI6NDIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozOTAsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0xMVQxNzozNDo1NS4wMDEzMTY1ODFaIiwiU2VxIjozNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjQyNDcwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImRyaXZlcnMvZHBsbC9kcGxsX25ldGxpbmsuY1wiLFxuICBcIkZpcnN0TGluZVwiOiA2OTQsXG4gIFwiTGluZUNvdW50XCI6IDMwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiA2OTQ6XFx0c3RhdGljIGludFxcbiA2OTU6XFx0ZHBsbF9jbWRfcGluX2dldF9vbmUoc3RydWN0IHNrX2J1ZmYgKm1zZywgc3RydWN0IGRwbGxfcGluICpwaW4sXFxuIDY5NjpcXHRcXHRcXHQgICAgIHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjaylcXG4gNjk3OlxcdHtcXG4gNjk4OlxcdFxcdGNvbnN0IHN0cnVjdCBkcGxsX3Bpbl9wcm9wZXJ0aWVzICpwcm9wID0gXFx1MDAyNnBpbi1cXHUwMDNlcHJvcDtcXG4gNjk5OlxcdFxcdHN0cnVjdCBkcGxsX3Bpbl9yZWYgKnJlZjtcXG4gNzAwOlxcdFxcdGludCByZXQ7XFxuIDcwMTpcXHRcXG4gNzAyOlxcdFxcdHJlZiA9IGRwbGxfeGFfcmVmX2RwbGxfZmlyc3QoXFx1MDAyNnBpbi1cXHUwMDNlZHBsbF9yZWZzKTtcXG4gNzAzOlxcdFxcdEFTU0VSVF9OT1RfTlVMTChyZWYpO1xcbiA3MDQ6XFx0XFxuIDcwNTpcXHRcXHRyZXQgPSBkcGxsX21zZ19hZGRfcGluX2hhbmRsZShtc2csIHBpbik7XFxuIDcwNjpcXHRcXHRpZiAocmV0KVxcbiA3MDc6XFx0XFx0XFx0cmV0dXJuIHJldDtcXG4gNzA4OlxcdFxcdGlmIChubGFfcHV0X3N0cmluZyhtc2csIERQTExfQV9QSU5fTU9EVUxFX05BTUUsXFxuIDcwOTpcXHRcXHRcXHRcXHQgICBwaW4tXFx1MDAzZW1vZHVsZV9uYW1lKSlcXG4gNzEwOlxcdFxcdFxcdHJldHVybiAtRU1TR1NJWkU7XFxuIDcxMTpcXHRcXHRpZiAobmxhX3B1dF82NGJpdChtc2csIERQTExfQV9QSU5fQ0xPQ0tfSUQsIHNpemVvZihwaW4tXFx1MDAzZWNsb2NrX2lkKSxcXG4gNzEyOlxcdFxcdFxcdFxcdCAgXFx1MDAyNnBpbi1cXHUwMDNlY2xvY2tfaWQsIERQTExfQV9QSU5fUEFEKSlcXG4gNzEzOlxcdFxcdFxcdHJldHVybiAtRU1TR1NJWkU7XFxuIDcxNDpcXHRcXHRpZiAocHJvcC1cXHUwMDNlYm9hcmRfbGFiZWwgXFx1MDAyNlxcdTAwMjZcXG4gNzE1OlxcdFxcdCAgICBubGFfcHV0X3N0cmluZyhtc2csIERQTExfQV9QSU5fQk9BUkRfTEFCRUwsIHByb3AtXFx1MDAzZWJvYXJkX2xhYmVsKSlcXG4gNzE2OlxcdFxcdFxcdHJldHVybiAtRU1TR1NJWkU7XFxuIDcxNzpcXHRcXHRpZiAocHJvcC1cXHUwMDNlcGFuZWxfbGFiZWwgXFx1MDAyNlxcdTAwMjZcXG4gNzE4OlxcdFxcdCAgICBubGFfcHV0X3N0cmluZyhtc2csIERQTExfQV9QSU5fUEFORUxfTEFCRUwsIHByb3AtXFx1MDAzZXBhbmVsX2xhYmVsKSlcXG4gNzE5OlxcdFxcdFxcdHJldHVybiAtRU1TR1NJWkU7XFxuIDcyMDpcXHRcXHRpZiAocHJvcC1cXHUwMDNlcGFja2FnZV9sYWJlbCBcXHUwMDI2XFx1MDAyNlxcbiA3MjE6XFx0XFx0ICAgIG5sYV9wdXRfc3RyaW5nKG1zZywgRFBMTF9BX1BJTl9QQUNLQUdFX0xBQkVMLFxcbiA3MjI6XFx0XFx0XFx0XFx0ICAgcHJvcC1cXHUwMDNlcGFja2FnZV9sYWJlbCkpXFxuIDcyMzpcXHRcXHRcXHRyZXR1cm4gLUVNU0dTSVpFO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xMVQxNzozNDo1NS4wMDE1NjE1NDFaIiwiU2VxIjozNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NjI4MjA1ODQ5MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgRFBMTCBOZXRsaW5rIEhhbmRsZXIgSW50ZXJhY3Rpb25zKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBgZHBsbF9ubF9waW5fZ2V0X2RvaXRgIGZ1bmN0aW9uIOKAkyB0aGF0J3Mgb3VyIG5ldGxpbmsgaGFuZGxlciwgdGhlIGVudHJ5IHBvaW50IGZvciB0aGlzIHBhcnRpY3VsYXIgb3BlcmF0aW9uLiBNeSBmaXJzdCB0aG91Z2h0IGlzIHRvIG1ha2Ugc3VyZSB3ZSdyZSB0cmFja2luZyB0aGlzIHByb3Blcmx5LCBzbyBJJ2xsIGFkZCBgZHBsbF9ubF9waW5fZ2V0X2RvaXRgIGFuZCBpdHMgY29tcGFuaW9uIGBkcGxsX25sX3Bpbl9nZXRfZHVtcGl0YCB0byBgRm9jdXNTeW1ib2xzYC4gV2hpbGUgSSdtIGF0IGl0LCBJJ2xsIGluY2x1ZGUgYGRwbGxfbXNnX2FkZF9waW5fcmVmX3N5bmNgIGFuZCBgZHBsbF9jbWRfcGluX2dldF9vbmVgIGFzIHdlbGwsIHNpbmNlIHRoZXkgc2VlbSByZWxhdGVkLlxuXG5Ob3csIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQncyAqdHJpZ2dlcmluZyogdGhpcyBuZXRsaW5rIGludGVyYWN0aW9uLiBJIG5lZWQgdG8ga25vdyBpZiB0aGVyZSBhcmUgb3RoZXIgRFBMTCBuZXRsaW5rIGhhbmRsZXJzIGludm9sdmVkIGluIHRoaXMgc2FtZSBmbG93LiBMb29raW5nIGEgbGl0dGxlIGRlZXBlciwgSSBzZWUgdGhhdCBgZHBsbF9waW5fZXZlbnRfc2VuZGAgY2FsbHMgYGRwbGxfY21kX3Bpbl9nZXRfb25lYCBhbmQgdGhhdCdzIHRyaWdnZXJlZCBieSBhIHBpbiBldmVudCwgd2hpY2ggaXMgYW4gaW1wb3J0YW50IGNsdWUuXG5cbkFscmlnaHQsIGxldCdzIGNvbmZpcm0gdGhlIGN1cnJlbnQgZW50cmllcyBpbiBgRm9jdXNTeW1ib2xzYC4gU28gZmFyLCBzbyBnb29kOlxuKiAgIGBkcGxsX21zZ19hZGRfcGluX3JlZl9zeW5jYFxuKiAgIGBkcGxsX2NtZF9waW5fZ2V0X29uZWBcbiogICBgZHBsbF9ubF9waW5fZ2V0X2RvaXRgXG4qICAgYGRwbGxfbmxfcGluX2dldF9kdW1waXRgXG5cbk5leHQsIEkgbmVlZCB0byBtYWtlIHN1cmUgd2UncmUgb24gdGhlIHJpZ2h0IHRyYWNrIHdpdGggdGhlIGNvbmZpZ3VyYXRpb24uIEkgd2FudCB0byB2ZXJpZnkgdGhhdCBgWkwzMDczWF9JMkNgIGFuZCBgWkwzMDczWF9TUElgIGFyZSBpbmRlZWQgdGhlIGNvcnJlY3QgY29uZmlncyBmb3IgdGhpcy4gQWgsIHllcywgdGhleSBzZWxlY3QgYFpMMzA3M1hgLCB3aGljaCB0aGVuIHNlbGVjdHMgYERQTExgIOKAkyB0aGF0IG1ha2VzIHNlbnNlLlxuXG5KdXN0IHRvIGJlIGFic29sdXRlbHkgc3VyZSwgSSdtIGdvaW5nIHRvIHF1aWNrbHkgY2hlY2sgYGRyaXZlcnMvZHBsbC9LY29uZmlnYCBhZ2FpbiB0byBtYWtlIHN1cmUgdGhlcmUgaXNuJ3QgYW5vdGhlciB2aXJ0dWFsIERQTEwgZHJpdmVyIHRoYXQgSSd2ZSBtaXNzZWQuIEkgbmVlZCB0byBiZSBjb21wbGV0ZWx5IHRob3JvdWdoIGhlcmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEzNjUzLCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzA1LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMTFUMTc6MzU6MDEuMjgzNjIyOTczWiIsIlNlcSI6MzgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEyMzg4MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL2RwbGwvS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiAxLFxuICBcIkxpbmVDb3VudFwiOiAzMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgICAxOlxcdCMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxcbiAgIDI6XFx0I1xcbiAgIDM6XFx0IyBHZW5lcmljIERQTEwgZHJpdmVycyBjb25maWd1cmF0aW9uXFxuICAgNDpcXHQjXFxuICAgNTpcXHRcXG4gICA2OlxcdG1lbnUgXFxcIkRQTEwgZGV2aWNlIHN1cHBvcnRcXFwiXFxuICAgNzpcXHRcXG4gICA4OlxcdGNvbmZpZyBEUExMXFxuICAgOTpcXHRcXHRib29sXFxuICAxMDpcXHRcXG4gIDExOlxcdGNvbmZpZyBEUExMX1JFRkNOVF9UUkFDS0VSXFxuICAxMjpcXHRcXHRib29sIFxcXCJEUExMIHJlZmVyZW5jZSBjb3VudCB0cmFja2luZ1xcXCJcXG4gIDEzOlxcdFxcdGRlcGVuZHMgb24gREVCVUdfS0VSTkVMIFxcdTAwMjZcXHUwMDI2IFNUQUNLVFJBQ0VfU1VQUE9SVCBcXHUwMDI2XFx1MDAyNiBEUExMXFxuICAxNDpcXHRcXHRzZWxlY3QgUkVGX1RSQUNLRVJcXG4gIDE1OlxcdFxcdGhlbHBcXG4gIDE2OlxcdFxcdCAgRW5hYmxlIHJlZmVyZW5jZSBjb3VudCB0cmFja2luZyBmb3IgRFBMTCBkZXZpY2VzIGFuZCBwaW5zLlxcbiAgMTc6XFx0XFx0ICBUaGlzIGhlbHBzIGRlYnVnZ2luZyByZWZlcmVuY2UgbGVha3MgYW5kIHVzZS1hZnRlci1mcmVlIGJ1Z3NcXG4gIDE4OlxcdFxcdCAgYnkgcmVjb3JkaW5nIHN0YWNrIHRyYWNlcyBmb3IgZWFjaCBnZXQvcHV0IG9wZXJhdGlvbi5cXG4gIDE5OlxcdFxcbiAgMjA6XFx0XFx0ICBUaGUgdHJhY2tpbmcgaW5mb3JtYXRpb24gaXMgZXhwb3NlZCB2aWEgZGVidWdmcyBhdDpcXG4gIDIxOlxcdFxcdCAgICAvc3lzL2tlcm5lbC9kZWJ1Zy9yZWZfdHJhY2tlci9kcGxsX2RldmljZV8qXFxuICAyMjpcXHRcXHQgICAgL3N5cy9rZXJuZWwvZGVidWcvcmVmX3RyYWNrZXIvZHBsbF9waW5fKlxcbiAgMjM6XFx0XFxuICAyNDpcXHRcXHQgIElmIHVuc3VyZSwgc2F5IE4uXFxuICAyNTpcXHRcXG4gIDI2OlxcdHNvdXJjZSBcXFwiZHJpdmVycy9kcGxsL3psMzA3M3gvS2NvbmZpZ1xcXCJcXG4gIDI3OlxcdFxcbiAgMjg6XFx0ZW5kbWVudVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xMVQxNzozNTowMS4yODM3NDkzNTNaIiwiU2VxIjozOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6ODU4MTg3MzU4MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBbmFseXNpcyBvZiB0aGUgRFBMTCBEcml2ZXIgUGF0Y2gqKlxuXG5Pa2F5LCBzbyBJIHNlZSB0aGlzIHBhdGNoIGlzIGFkZHJlc3NpbmcgYSBwb3RlbnRpYWwgaXNzdWUgd2l0aGluIHRoZSBgZHJpdmVycy9kcGxsYCBkaXJlY3RvcnksIHNwZWNpZmljYWxseSBjb25jZXJuaW5nIHRoZSBgWkwzMDczWGAgZHJpdmVyLiBJJ20gbm90aW5nIHRoYXQgdGhlIGV4aXN0aW5nIGRyaXZlciBsaXN0IGluZGljYXRlcyBgWkwzMDczWGAgaXMgdGhlIG9ubHkgb25lIGluIHRoYXQgbG9jYXRpb24uIE15IGluaXRpYWwgYWN0aW9uIGlzIHRvIGFkZCBgWkwzMDczWF9JMkNgIGFuZCBgWkwzMDczWF9TUElgIHRvIHRoZSBgRW5hYmxlQ29uZmlnc2Agc2luY2UgdGhvc2UgY29uZmlndXJhdGlvbnMgYXJlIGNydWNpYWwgZm9yIHRoZSByZWxldmFudCBJMkMgYW5kIFNQSSBpbnRlcmZhY2VzLCBhbmQgdGhlcmVmb3JlLCBlc3NlbnRpYWwgZm9yIHRlc3RpbmcgdGhpcyBwcm9wZXJseS5cblxuTmV4dCwgSSBuZWVkIHRvIGNvbmZpcm0gdGhlIHJlYWNoYWJpbGl0eSBvZiBgZHBsbF9tc2dfYWRkX3Bpbl9yZWZfc3luY2AuIEEgcXVpY2sgY2hlY2sgc2hvd3MgdGhhdCBpdCAqaXMqIGluZGVlZCBjYWxsZWQgYnkgYGRwbGxfY21kX3Bpbl9nZXRfb25lYCwgd2hpY2ggaW4gdHVybiBpcyBjYWxsZWQgYnkgYm90aCBgZHBsbF9ubF9waW5fZ2V0X2RvaXRgIGFuZCBgZHBsbF9ubF9waW5fZ2V0X2R1bXBpdGAuIFRoYXQgY29uZmlybXMgaXQncyB3aXRoaW4gdGhlIGNvbW1hbmQgcGF0aCB3ZSdyZSBjb25jZXJuZWQgd2l0aCBoZXJlLiBJIHNlZSB0aGF0IHRoZSBwYXRjaCdzIHB1cnBvc2UgaXMgdG8gZml4IGEgYnVnIHdoZXJlIGByZWZfc3luY19waW5fcHJpdmAgY291bGQgYmUgTlVMTCwgd2hpY2ggb2YgY291cnNlIHdvdWxkIGxlYWQgdG8gYSBjcmFzaC4gVGhpcyBsb29rcyBsaWtlIGEgZnVuY3Rpb25hbCBjaGFuZ2Ug4oCTIGEgbmVjZXNzYXJ5IGNvcnJlY3Rpb24gdG8gbWFpbnRhaW4gc3RhYmlsaXR5IHdoZW4gaGFuZGxpbmcgRFBMTCBwaW4gcmVnaXN0cmF0aW9uL2RlcmVnaXN0cmF0aW9uIGFuZCBuZXRsaW5rIGNvbW1hbmRzLlxuXG5Ob3csIGxldCdzIHByZXBhcmUgdGhlIGZ1enppbmcgcmVzcG9uc2UuIEl0J3MgZGVmaW5pdGVseSBgV29ydGhGdXp6aW5nYCwgYmVjYXVzZSB3ZSd2ZSBpZGVudGlmaWVkIGEgdnVsbmVyYWJpbGl0eS5cblxuTXkgYEZvY3VzU3ltYm9sc2Agd2lsbCBiZTpcblxuKiAgIGBkcGxsX21zZ19hZGRfcGluX3JlZl9zeW5jYCAodGhlIHRhcmdldCBvZiB0aGUgcGF0Y2gpXG4qICAgYGRwbGxfY21kX3Bpbl9nZXRfb25lYFxuKiAgIGBkcGxsX25sX3Bpbl9nZXRfZG9pdGBcbiogICBgZHBsbF9ubF9waW5fZ2V0X2R1bXBpdGAgKGFzIHRoZXkgYXJlIHRoZSBjYWxsaW5nIGZ1bmN0aW9ucylcblxuQW5kIHRoZSBuZWNlc3NhcnkgYEVuYWJsZUNvbmZpZ3NgIHdpbGwgYmU6XG5cbiogICBgWkwzMDczWF9JMkNgXG4qICAgYFpMMzA3M1hfU1BJYFxuXG5GaW5hbGx5LCB0aGlzIHBhdGNoIGlzIGludHJvZHVjaW5nIGEgTlVMTCBjaGVjayB3aXRoaW4gYGRwbGxfbXNnX2FkZF9waW5fcmVmX3N5bmNgLiBUaGlzIHNhZmVndWFyZCBwcmV2ZW50cyBhIHBvdGVudGlhbCBOVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2Ugb3IgaW52YWxpZCBtZW1vcnkgYWNjZXNzIHNjZW5hcmlvIHdoZW4gYSBEUExMIHBpbiBoYXMgYmVlbiB1bnJlZ2lzdGVyZWQgZnJvbSB0aGUgc3lzdGVtLiBUaGlzIGRpcmVjdGx5IGltcGFjdHMgdGhlIERQTEwgbmV0bGluayBpbnRlcmZhY2UsIGFuZCBpdHMgcmVsZXZhbnQgY29tbWFuZHMgd2hpY2ggYXJlIGRpcmVjdGx5IGFjY2Vzc2libGUgZnJvbSB1c2VyIHNwYWNlLiBGdXp6aW5nIHRoaXMgd2lsbCByZXF1aXJlIGVuYWJsaW5nIERQTEwgZHJpdmVycywgbGlrZSB0aGUgTWljcm9jaGlwIEF6dXJpdGUgSTJDL1NQSSBkcml2ZXJzLCB3aGljaCBhcmUgZWFzaWx5IGluc3RhbnRpYXRlZCBpbiB2aXJ0dWFsIGVudmlyb25tZW50cyBmb3IgdGVzdGluZy4gSSBhbSByZWFkeSB0byBtb3ZlIGZvcndhcmQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE0ODA4LCJPdXRwdXRUb2tlbnMiOjIzOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM5MywiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTExVDE3OjM1OjA5Ljg2NTYyNTg2NloiLCJTZXEiOjQwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIyOTA2MDM0NywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiWkwzMDczWF9JMkNcIixcbiAgICBcIlpMMzA3M1hfU1BJXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiZHBsbF9tc2dfYWRkX3Bpbl9yZWZfc3luY1wiLFxuICAgIFwiZHBsbF9jbWRfcGluX2dldF9vbmVcIixcbiAgICBcImRwbGxfbmxfcGluX2dldF9kb2l0XCIsXG4gICAgXCJkcGxsX25sX3Bpbl9nZXRfZHVtcGl0XCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcyBhIE5VTEwgY2hlY2sgZm9yIGByZWZfc3luY19waW5fcHJpdmAgaW4gYGRwbGxfbXNnX2FkZF9waW5fcmVmX3N5bmNgIHRvIHByZXZlbnQgYSBwb3RlbnRpYWwgTlVMTCBwb2ludGVyIGRlcmVmZXJlbmNlIG9yIGludmFsaWQgbWVtb3J5IGFjY2VzcyB3aGVuIHRoZSBwaW4gaGFzIGJlZW4gdW5yZWdpc3RlcmVkIGZyb20gdGhlIERQTEwuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgRFBMTCBuZXRsaW5rIGludGVyZmFjZSwgd2hpY2ggaXMgcmVhY2hhYmxlIGZyb20gdXNlciBzcGFjZSB2aWEgbmV0bGluayBjb21tYW5kcyAoZS5nLiwgYERQTExfQ01EX1BJTl9HRVRgKS4gRnV6emluZyB0aGlzIHJlcXVpcmVzIGVuYWJsaW5nIERQTEwgZHJpdmVycywgc3VjaCBhcyB0aGUgTWljcm9jaGlwIEF6dXJpdGUgSTJDL1NQSSBkcml2ZXJzLCB3aGljaCBjYW4gYmUgaW5zdGFudGlhdGVkIGluIHZpcnR1YWwgZW52aXJvbm1lbnRzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIlpMMzA3M1hfSTJDXCIsXG4gICAgXCJaTDMwNzNYX1NQSVwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImRwbGxfbXNnX2FkZF9waW5fcmVmX3N5bmNcIixcbiAgICBcImRwbGxfY21kX3Bpbl9nZXRfb25lXCIsXG4gICAgXCJkcGxsX25sX3Bpbl9nZXRfZG9pdFwiLFxuICAgIFwiZHBsbF9ubF9waW5fZ2V0X2R1bXBpdFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHMgYSBOVUxMIGNoZWNrIGZvciBgcmVmX3N5bmNfcGluX3ByaXZgIGluIGBkcGxsX21zZ19hZGRfcGluX3JlZl9zeW5jYCB0byBwcmV2ZW50IGEgcG90ZW50aWFsIE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZSBvciBpbnZhbGlkIG1lbW9yeSBhY2Nlc3Mgd2hlbiB0aGUgcGluIGhhcyBiZWVuIHVucmVnaXN0ZXJlZCBmcm9tIHRoZSBEUExMLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIERQTEwgbmV0bGluayBpbnRlcmZhY2UsIHdoaWNoIGlzIHJlYWNoYWJsZSBmcm9tIHVzZXIgc3BhY2UgdmlhIG5ldGxpbmsgY29tbWFuZHMgKGUuZy4sIGBEUExMX0NNRF9QSU5fR0VUYCkuIEZ1enppbmcgdGhpcyByZXF1aXJlcyBlbmFibGluZyBEUExMIGRyaXZlcnMsIHN1Y2ggYXMgdGhlIE1pY3JvY2hpcCBBenVyaXRlIEkyQy9TUEkgZHJpdmVycywgd2hpY2ggY2FuIGJlIGluc3RhbnRpYXRlZCBpbiB2aXJ0dWFsIGVudmlyb25tZW50cy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLmR1cmF0aW9uIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnTGxtVG9rZW4gPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS50b2tlbnMgLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdUb29sRHVyID0gc3RhdHMudG9vbC5jb3VudCA+IDAgPyAoc3RhdHMudG9vbC5kdXJhdGlvbiAvIHN0YXRzLnRvb2wuY291bnQpLnRvRml4ZWQoMikgOiAwOwoKCQkJY29uc3QgbGxtU3VtYXJ5Q2VsbHMgPSBbc3RhdHMubGxtLmNvdW50LCBzdGF0cy5sbG0udG9rZW5zLCBhdmdMbG1Ub2tlbiwgc3RhdHMubGxtLmR1cmF0aW9uLCBhdmdMbG1EdXJdOwoJCQljb25zdCB0b29sU3VtbWFyeUNlbGxzID0gW3N0YXRzLnRvb2wuY291bnQsIHN0YXRzLnRvb2wuZHVyYXRpb24sIGF2Z1Rvb2xEdXJdOwoKCQkJY29uc3QgbGxtU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbGxtX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQlsbG1TdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgbGxtVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQlsbG1TdW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJbGxtVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJbGxtU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQobGxtVHIpOwoKCQkJY29uc3QgdG9vbFN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rvb2xfc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgdG9vbFRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJdG9vbFN1bW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJdG9vbFRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZCh0b29sVHIpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBmaWx0ZXJlZFN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBbImxsbSIsICJ0b29sIl0uaW5jbHVkZXMoZC5UeXBlKSk7CgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ0R1cmF0aW9uJyk7CgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7IAoKCQkJZmlsdGVyZWRTdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJCgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsKCQkJCWxldCB0b29sdGlwID0gcy5OYW1lOwoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIgJiYgcy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoJCQkJZGF0YS5hZGRSb3coW2Ake3MuU2VxfWAsIGR1ciwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1RpbWUgQ29uc3VtcHRpb24gb2YgTExNL1Rvb2wgQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTS9Ub29sIFN0ZXBzJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ1NlY29uZHMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2R1cmF0aW9uX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBsbG1TdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gZC5UeXBlID09PSAibGxtIik7CgkJCWlmIChsbG1TdGVwcy5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwkJCQoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ1Rva2VucycpOwkJCQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICdzdHlsZSd9KTsJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7CQoKCQkJY29uc3QgYWdlbnRDb2xvcnMgPSB7fTsKCQkJY29uc3QgcGFsZXR0ZSA9IFsnIzQyODVGNCcsICcjREI0NDM3JywgJyNGNEI0MDAnLCAnIzBGOUQ1OCcsICcjQUI0N0JDJywgJyMwMEFDQzEnXTsKCQkJbGV0IGNvbG9ySWR4ID0gMDsKCQkJY29uc3QgYWdlbnRMTE1Db3VudHMgPSB7fTsKCQkJbGxtU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCWlmICghYWdlbnRDb2xvcnNbcy5OYW1lXSkgewoJCQkJCWFnZW50Q29sb3JzW3MuTmFtZV0gPSBwYWxldHRlW2NvbG9ySWR4ICUgcGFsZXR0ZS5sZW5ndGhdOwoJCQkJCWNvbG9ySWR4Kys7CgkJCQl9CgoJCQkJYWdlbnRMTE1Db3VudHNbcy5OYW1lXSA9IChhZ2VudExMTUNvdW50c1tzLk5hbWVdIHx8IDApICsgMTsKCQkJCWNvbnN0IGxhYmVsID0gYCR7cy5OYW1lfS0ke2FnZW50TExNQ291bnRzW3MuTmFtZV19YDsKCQkJCWNvbnN0IHRvdGFsVG9rZW5zID0gcy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2VuczsKCQkJCWNvbnN0IHN0eWxlID0gYGNvbG9yOiAke2FnZW50Q29sb3JzW3MuTmFtZV19YDsKCQkJCWxldCB0b29sdGlwID0gYFRvdGFsIFRva2VuczogJHt0b3RhbFRva2Vuc31cbihJbjogJHtzLklucHV0VG9rZW5zfSwgT3V0OiAke3MuT3V0cHV0VG9rZW5zfSwgVGhvdWdodHM6ICR7cy5PdXRwdXRUaG91Z2h0c1Rva2Vuc30pYDsKCQkJCWlmIChzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgoJCQkJZGF0YS5hZGRSb3coW2xhYmVsLCB0b3RhbFRva2Vucywgc3R5bGUsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUb2tlbiBDb25zdW1wdGlvbiBieSBMTE0gQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTSBDYWxsIFNlcXVlbmNlJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ0NvbnN1bWVkIFRva2VucycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9rZW5fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCQlsZXQgYWxsRXhwYW5kZWQgPSBmYWxzZTsKCQlmdW5jdGlvbiB0b2dnbGVBbGxEZXRhaWxzKCkgewoJCQlhbGxFeHBhbmRlZCA9ICFhbGxFeHBhbmRlZDsKCQkJZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnZGV0YWlscycpLmZvckVhY2goZCA9PiB7CgkJCQlpZiAoYWxsRXhwYW5kZWQpIGQuc2V0QXR0cmlidXRlKCdvcGVuJywgJycpOwoJCQkJZWxzZSBkLnJlbW92ZUF0dHJpYnV0ZSgnb3BlbicpOwoJCQl9KTsKCQl9Cgk8L3NjcmlwdD4KCgo8L2JvZHk+CjwvaHRtbD4K" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowtw985[0].run-triage(0) Phase: Succeeded StartedAt: 2026-07-11 17:00:09 +0000 UTC FinishedAt: 2026-07-11 17:35:11 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "net", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git", "commit_hash": "3f1f755366687d051174739fb99f7d560202f60b", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "ZL3073X_I2C", "ZL3073X_SPI" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "net", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git", "commit_hash": "3f1f755366687d051174739fb99f7d560202f60b", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "ZL3073X_I2C", "ZL3073X_SPI" ], "series_id": "32054c97-ddb0-405f-9afb-d7a26d4b8fea" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "dpll_msg_add_pin_ref_sync", "dpll_cmd_pin_get_one", "dpll_nl_pin_get_doit", "dpll_nl_pin_get_dumpit" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzExIDE3OjMzPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1pMMzA3M1hfSTJDJiMzNDssCiAgICAmIzM0O1pMMzA3M1hfU1BJJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7ZHBsbF9tc2dfYWRkX3Bpbl9yZWZfc3luYyYjMzQ7LAogICAgJiMzNDtkcGxsX2NtZF9waW5fZ2V0X29uZSYjMzQ7LAogICAgJiMzNDtkcGxsX25sX3Bpbl9nZXRfZG9pdCYjMzQ7LAogICAgJiMzNDtkcGxsX25sX3Bpbl9nZXRfZHVtcGl0JiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHMgYSBOVUxMIGNoZWNrIGZvciBgcmVmX3N5bmNfcGluX3ByaXZgIGluIGBkcGxsX21zZ19hZGRfcGluX3JlZl9zeW5jYCB0byBwcmV2ZW50IGEgcG90ZW50aWFsIE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZSBvciBpbnZhbGlkIG1lbW9yeSBhY2Nlc3Mgd2hlbiB0aGUgcGluIGhhcyBiZWVuIHVucmVnaXN0ZXJlZCBmcm9tIHRoZSBEUExMLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIERQTEwgbmV0bGluayBpbnRlcmZhY2UsIHdoaWNoIGlzIHJlYWNoYWJsZSBmcm9tIHVzZXIgc3BhY2UgdmlhIG5ldGxpbmsgY29tbWFuZHMgKGUuZy4sIGBEUExMX0NNRF9QSU5fR0VUYCkuIEZ1enppbmcgdGhpcyByZXF1aXJlcyBlbmFibGluZyBEUExMIGRyaXZlcnMsIHN1Y2ggYXMgdGhlIE1pY3JvY2hpcCBBenVyaXRlIEkyQy9TUEkgZHJpdmVycywgd2hpY2ggY2FuIGJlIGluc3RhbnRpYXRlZCBpbiB2aXJ0dWFsIGVudmlyb25tZW50cy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMSAxNzozMzwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IDhlMWE0MGY0YzM4Njg0MTFhMDdjNmFiYjBmZjI4NjljOGNjMmVjMTZcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgU2F0IEp1bCAxMSAxNzozMzozMiAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9kcml2ZXJzL2RwbGwvZHBsbF9uZXRsaW5rLmMgYi9kcml2ZXJzL2RwbGwvZHBsbF9uZXRsaW5rLmNcbmluZGV4IGJmNzI5Y2RlNzk2YTc3Li41NzAzNjY3NTkzYTdjMiAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvZHBsbC9kcGxsX25ldGxpbmsuY1xuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9kcGxsL2RwbGxfbmV0bGluay5jXG5AQCAtNTY3LDYgJiM0Mzs1NjcsOSBAQCBkcGxsX21zZ19hZGRfcGluX3JlZl9zeW5jKHN0cnVjdCBza19idWZmICptc2csIHN0cnVjdCBkcGxsX3BpbiAqcGluLFxuIFx0XHRpZiAoIWRwbGxfcGluX2F2YWlsYWJsZShyZWZfc3luY19waW4pKVxuIFx0XHRcdGNvbnRpbnVlO1xuIFx0XHRyZWZfc3luY19waW5fcHJpdiA9IGRwbGxfcGluX29uX2RwbGxfcHJpdihkcGxsLCByZWZfc3luY19waW4pO1xuJiM0MztcdFx0LyogUGluIG1heSBoYXZlIGJlZW4gdW5yZWdpc3RlcmVkIGZyb20gdGhpcyBkcGxsIGFscmVhZHkgKi9cbiYjNDM7XHRcdGlmICghcmVmX3N5bmNfcGluX3ByaXYpXG4mIzQzO1x0XHRcdGNvbnRpbnVlO1xuIFx0XHRpZiAoV0FSTl9PTighb3BzLVx1MDAzZXJlZl9zeW5jX2dldCkpXG4gXHRcdFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xuIFx0XHRyZXQgPSBvcHMtXHUwMDNlcmVmX3N5bmNfZ2V0KHBpbiwgcGluX3ByaXYsIHJlZl9zeW5jX3BpbixcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMSAxNzozMzwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4xbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtaTDMwNzNYX0kyQyYjMzQ7LAogICAgJiMzNDtaTDMwNzNYX1NQSSYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2RwbGxfbXNnX2FkZF9waW5fcmVmX3N5bmMmIzM0OywKICAgICYjMzQ7ZHBsbF9jbWRfcGluX2dldF9vbmUmIzM0OywKICAgICYjMzQ7ZHBsbF9ubF9waW5fZ2V0X2RvaXQmIzM0OywKICAgICYjMzQ7ZHBsbF9ubF9waW5fZ2V0X2R1bXBpdCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRzIGEgTlVMTCBjaGVjayBmb3IgYHJlZl9zeW5jX3Bpbl9wcml2YCBpbiBgZHBsbF9tc2dfYWRkX3Bpbl9yZWZfc3luY2AgdG8gcHJldmVudCBhIHBvdGVudGlhbCBOVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2Ugb3IgaW52YWxpZCBtZW1vcnkgYWNjZXNzIHdoZW4gdGhlIHBpbiBoYXMgYmVlbiB1bnJlZ2lzdGVyZWQgZnJvbSB0aGUgRFBMTC4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBEUExMIG5ldGxpbmsgaW50ZXJmYWNlLCB3aGljaCBpcyByZWFjaGFibGUgZnJvbSB1c2VyIHNwYWNlIHZpYSBuZXRsaW5rIGNvbW1hbmRzIChlLmcuLCBgRFBMTF9DTURfUElOX0dFVGApLiBGdXp6aW5nIHRoaXMgcmVxdWlyZXMgZW5hYmxpbmcgRFBMTCBkcml2ZXJzLCBzdWNoIGFzIHRoZSBNaWNyb2NoaXAgQXp1cml0ZSBJMkMvU1BJIGRyaXZlcnMsIHdoaWNoIGNhbiBiZSBpbnN0YW50aWF0ZWQgaW4gdmlydHVhbCBlbnZpcm9ubWVudHMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLgoKSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaAp0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4KCldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOgoxLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLgogICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4KMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuCiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KICAgRG8gbm90IGxpc3QgdG9vIGdlbmVyaWMgY29uZmlncyAod2UgYWxyZWFkeSBoYXZlIHRoZW0gZW5hYmxlZCkuIE9ubHkgbGlzdCB0aG9zZSB0aGF0CiAgIHNwZWNpZmljYWxseSBjb3ZlciB0aGUgbW9kaWZpZWQgY29kZS4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzIG91dHB1dCBhcnJheSwKICAgYW5kIERPIE5PVCBhZGQgYSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDhlMWE0MGY0YzM4Njg0MTFhMDdjNmFiYjBmZjI4NjljOGNjMmVjMTYKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgU2F0IEp1bCAxMSAxNzozMzozMiAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZHBsbC9kcGxsX25ldGxpbmsuYyBiL2RyaXZlcnMvZHBsbC9kcGxsX25ldGxpbmsuYwppbmRleCBiZjcyOWNkZTc5NmE3Ny4uNTcwMzY2NzU5M2E3YzIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZHBsbC9kcGxsX25ldGxpbmsuYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL2RwbGwvZHBsbF9uZXRsaW5rLmMKQEAgLTU2Nyw2ICYjNDM7NTY3LDkgQEAgZHBsbF9tc2dfYWRkX3Bpbl9yZWZfc3luYyhzdHJ1Y3Qgc2tfYnVmZiAqbXNnLCBzdHJ1Y3QgZHBsbF9waW4gKnBpbiwKIAkJaWYgKCFkcGxsX3Bpbl9hdmFpbGFibGUocmVmX3N5bmNfcGluKSkKIAkJCWNvbnRpbnVlOwogCQlyZWZfc3luY19waW5fcHJpdiA9IGRwbGxfcGluX29uX2RwbGxfcHJpdihkcGxsLCByZWZfc3luY19waW4pOwomIzQzOwkJLyogUGluIG1heSBoYXZlIGJlZW4gdW5yZWdpc3RlcmVkIGZyb20gdGhpcyBkcGxsIGFscmVhZHkgKi8KJiM0MzsJCWlmICghcmVmX3N5bmNfcGluX3ByaXYpCiYjNDM7CQkJY29udGludWU7CiAJCWlmIChXQVJOX09OKCFvcHMtJmd0O3JlZl9zeW5jX2dldCkpCiAJCQlyZXR1cm4gLUVPUE5PVFNVUFA7CiAJCXJldCA9IG9wcy0mZ3Q7cmVmX3N5bmNfZ2V0KHBpbiwgcGluX3ByaXYsIHJlZl9zeW5jX3BpbiwKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTEgMTc6MzM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTkyMgoJCQkJCQkJb3V0cHV0OiA0NwoJCQkJCQkJdGhvdWdodHM6IDkyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHVuZGVyc3RhbmRpbmcsIHRoaW5raW5nIHRocm91Z2ggdGhpcyBjb2RlIGNoYW5nZSBpbiBgZHJpdmVycy9kcGxsL2RwbGxfbmV0bGluay5jYDoKCioqQW5hbHl6aW5nIGEgRFBMTCBOZXRsaW5rIFBhdGNoKioKClJpZ2h0LCBJJiMzOTttIGxvb2tpbmcgYXQgYSBwYXRjaCB0aGF0JiMzOTtzIGJlZW4gYXBwbGllZCB0byBgZHJpdmVycy9kcGxsL2RwbGxfbmV0bGluay5jYC4gVGhlIGNvcmUgb2YgdGhlIGNoYW5nZSBzZWVtcyB0byBiZSBpbiB0aGUgZnVuY3Rpb24gYGRwbGxfbXNnX2FkZF9waW5fcmVmX3N5bmNgLiBUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIG5ldyBjaGVjazogYGlmICghcmVmX3N5bmNfcGluX3ByaXYpYC4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMsICYjMzQ7T2theSwgdGhhdCYjMzk7cyBhIGNvbmRpdGlvbiBiZWluZyBhZGRlZC4gV2hhdCBpcyBgcmVmX3N5bmNfcGluX3ByaXZgIGFuZCB3aHkgaXMgdGhpcyBjaGVjayBuZWNlc3Nhcnk/JiMzNDsgSSYjMzk7bGwgbmVlZCB0byBkaWcgaW50byB0aGUgc3Vycm91bmRpbmcgY29kZSB0byB1bmRlcnN0YW5kIHRoZSBjb250ZXh0IG9mIHRoaXMgdmFyaWFibGUsIHdoYXQgaXQgcmVwcmVzZW50cyBpbiB0aGUgRFBMTCBjb250cm9sLCBhbmQgd2hhdCB0aGUgaW1wbGljYXRpb25zIGFyZSBpZiBpdCYjMzk7cyBudWxsLiBJcyB0aGlzIGEgbmV3IGluaXRpYWxpemF0aW9uIGNoZWNrPyBQcmV2ZW50aW5nIGEgcG90ZW50aWFsIG51bGwgcG9pbnRlciBkZXJlZmVyZW5jZT8gT3IgaXMgdGhlIGFic2VuY2Ugb2YgdGhpcyB2YXJpYWJsZSBpbmRpY2F0aXZlIG9mIHNvbWUgY3JpdGljYWwgc3RhdGUgb3IgY29uZmlndXJhdGlvbiBlcnJvcj8gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCB0aGlzIGByZWZfc3luY19waW5fcHJpdmAgbWVhbnMgaW4gdGhlIGNvbnRyb2wgZmxvdyBvZiBEUExMIG5ldGxpbmsgbWVzc2FnaW5nIGFuZCB0aGVuIGRlZHVjZSB3aGF0IHRoaXMgY2hlY2sgaXMgZG9pbmcuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTEgMTc6MzM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7ZHBsbF9tc2dfYWRkX3Bpbl9yZWZfc3luYyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvZHBsbC9kcGxsX25ldGxpbmsuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL2RwbGwvZHBsbF9uZXRsaW5rLmM9NTUxPXN0YXRpYyBpbnRcbmRyaXZlcnMvZHBsbC9kcGxsX25ldGxpbmsuYzo1NTI6ZHBsbF9tc2dfYWRkX3Bpbl9yZWZfc3luYyhzdHJ1Y3Qgc2tfYnVmZiAqbXNnLCBzdHJ1Y3QgZHBsbF9waW4gKnBpbixcbmRyaXZlcnMvZHBsbC9kcGxsX25ldGxpbmsuYy01NTMtXHRcdFx0ICBzdHJ1Y3QgZHBsbF9waW5fcmVmICpyZWYsXG4tLVxuZHJpdmVycy9kcGxsL2RwbGxfbmV0bGluay5jPTY5NT1kcGxsX2NtZF9waW5fZ2V0X29uZShzdHJ1Y3Qgc2tfYnVmZiAqbXNnLCBzdHJ1Y3QgZHBsbF9waW4gKnBpbixcbi0tXG5kcml2ZXJzL2RwbGwvZHBsbF9uZXRsaW5rLmMtNzU0LVx0aWYgKCF4YV9lbXB0eShcdTAwMjZwaW4tXHUwMDNlcmVmX3N5bmNfcGlucykpXG5kcml2ZXJzL2RwbGwvZHBsbF9uZXRsaW5rLmM6NzU1Olx0XHRyZXQgPSBkcGxsX21zZ19hZGRfcGluX3JlZl9zeW5jKG1zZywgcGluLCByZWYsIGV4dGFjayk7XG5kcml2ZXJzL2RwbGwvZHBsbF9uZXRsaW5rLmMtNzU2LVx0aWYgKHJldClcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMSAxNzozMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNTkyCgkJCQkJCQlvdXRwdXQ6IDMxCgkJCQkJCQl0aG91Z2h0czogNTcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIG15IG93bjoKCioqQW5hbHl6aW5nIHRoZSBEUExMIFJlZmVyZW5jZSBDb3VudGluZyoqCgpBbHJpZ2h0LCBsZXQmIzM5O3Mgc2VlLCBgZHBsbF9tc2dfYWRkX3Bpbl9yZWZfc3luY2AgaXMgYmVpbmcgaW52b2tlZCBieSBgZHBsbF9jbWRfcGluX2dldF9vbmVgLiBIbW0sIHRoYXQmIzM5O3MgaW50ZXJlc3RpbmcuIEkga25vdyB0aGF0IGZ1bmN0aW9uIGlzIHBhcnQgb2YgdGhlIERQTEwgc3Vic3lzdGVtJiMzOTtzIG5ldGxpbmsgaW50ZXJmYWNlLiBTbywgaXQmIzM5O3MgbGlrZWx5IGludm9sdmVkIGluIGEgJiMzNDtnZXQmIzM0OyBvcGVyYXRpb24gZm9yIGEgRFBMTCBwaW4sIGFuZCB3ZSYjMzk7cmUgZGVhbGluZyB3aXRoIHJlZmVyZW5jZSBjb3VudGluZyBoZXJlIOKAkyB0aGUgYF9yZWZgIGluIHRoZSBuYW1lIGlzIGEgY2x1ZS4gR290dGEgbWFrZSBzdXJlIHdlJiMzOTtyZSBoYW5kbGluZyByZXNvdXJjZSBsaWZldGltZXMgY29ycmVjdGx5LiBOb3csIGJlZm9yZSBJIGp1bXAgdG8gYW55IGNvbmNsdXNpb25zLCBJIHNob3VsZCBwcm9iYWJseSBkb3VibGUtY2hlY2sgdGhlIERQTEwgY29uZmlndXJhdGlvbiBpdHNlbGYuIFNlZSB3aGF0IHRoZSBjdXJyZW50IHNldHVwIGlzLCB3aGF0IGZlYXR1cmVzIGFyZSBlbmFibGVkLCBhbmQgaG93IHRoaXMgcGFydGljdWxhciBwaW4gaXMgY29uZmlndXJlZCBpbiByZWxhdGlvbiB0byB0aGUgb3ZlcmFsbCBjbG9ja2luZyBzY2hlbWUuIFRoYXQgY29uZmlnIHdpbGwgbGlrZWx5IHNoZWQgYSBsb3Qgb2YgbGlnaHQgb24gKndoeSogdGhpcyByZWZlcmVuY2UgbWFuYWdlbWVudCBpcyBoYXBwZW5pbmcgdGhpcyB3YXkuIFVuZGVyc3RhbmRpbmcgdGhlIGNvbnRleHQgaXMga2V5IHRvIHNwb3R0aW5nIGFueSBwb3RlbnRpYWwgaXNzdWVzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzExIDE3OjMzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBEUExMJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9kcGxsL0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9kcGxsL0tjb25maWc9Nj1tZW51IFwmIzM0O0RQTEwgZGV2aWNlIHN1cHBvcnRcJiMzNDtcbmRyaXZlcnMvZHBsbC9LY29uZmlnLTctXG5kcml2ZXJzL2RwbGwvS2NvbmZpZzo4OmNvbmZpZyBEUExMXG5kcml2ZXJzL2RwbGwvS2NvbmZpZy05LVx0Ym9vbFxuZHJpdmVycy9kcGxsL0tjb25maWctMTAtXG5kcml2ZXJzL2RwbGwvS2NvbmZpZzoxMTpjb25maWcgRFBMTF9SRUZDTlRfVFJBQ0tFUlxuZHJpdmVycy9kcGxsL0tjb25maWctMTItXHRib29sIFwmIzM0O0RQTEwgcmVmZXJlbmNlIGNvdW50IHRyYWNraW5nXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTEgMTc6MzM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzAzMgoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDI2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkRQTEwmIzM5O3MgVHJ1ZSBOYXR1cmUqKgoKSG9sZCBvbiBhIHNlY29uZC4uLiBpcyBEUExMIGVzc2VudGlhbGx5IGEgYGJvb2xgIHR5cGUsIGJ1dCB3aXRob3V0IHRoZSBpbnRlcmFjdGl2ZSBwcm9tcHRpbmcgbWVjaGFuaXNtPyBJIG5lZWQgdG8gdmVyaWZ5IG15IGluaXRpYWwgaHVuY2guIEl0IHNlZW1zIGludHVpdGl2ZWx5IGNvcnJlY3QgZ2l2ZW4gdGhlIHVzdWFsIGRlZmluaXRpb25zLCBidXQgSSB3YW50IHRvIGJlIGNlcnRhaW4uIE15IG5leHQgYWN0aW9uIGlzIHRvIHF1aWNrbHkgc2NydXRpbml6ZSB0aGUgcmVsZXZhbnQgS2NvbmZpZyBmaWxlLCBzcGVjaWZpY2FsbHkgd2l0aGluIHRoZSBgZHJpdmVycy9kcGxsL2AgZGlyZWN0b3J5LCB0byBjb25maXJtIG9yIHJlZnV0ZSB0aGlzIGh5cG90aGVzaXMuIEkmIzM5O2xsIGJlIGxvb2tpbmcgZm9yIGhvdyBEUExMIGlzIGFjdHVhbGx5IGRlZmluZWQgYW5kIGltcGxlbWVudGVkIHdpdGggcmVzcGVjdCB0byBpdHMgZnVuZGFtZW50YWwgYm9vbGVhbiBuYXR1cmUsIGFuZCBjb21wYXJlIHRoYXQgdG8gdGhlIHdheSBgYm9vbGAgaXMgaW1wbGVtZW50ZWQgZWxzZXdoZXJlLiBJIHN1c3BlY3QgSSBtaWdodCBmaW5kIHNvbWUgc3VidGxlIGRpZmZlcmVuY2VzLCBvciBtYXliZSBub3QuIFRpbWUgdG8gZGl2ZSBpbnRvIHRoZSBjb2RlIQoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzExIDE3OjMzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy9kcGxsL0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDIwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAgIDE6XHQjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcbiAgIDI6XHQjXG4gICAzOlx0IyBHZW5lcmljIERQTEwgZHJpdmVycyBjb25maWd1cmF0aW9uXG4gICA0Olx0I1xuICAgNTpcdFxuICAgNjpcdG1lbnUgXCYjMzQ7RFBMTCBkZXZpY2Ugc3VwcG9ydFwmIzM0O1xuICAgNzpcdFxuICAgODpcdGNvbmZpZyBEUExMXG4gICA5Olx0XHRib29sXG4gIDEwOlx0XG4gIDExOlx0Y29uZmlnIERQTExfUkVGQ05UX1RSQUNLRVJcbiAgMTI6XHRcdGJvb2wgXCYjMzQ7RFBMTCByZWZlcmVuY2UgY291bnQgdHJhY2tpbmdcJiMzNDtcbiAgMTM6XHRcdGRlcGVuZHMgb24gREVCVUdfS0VSTkVMIFx1MDAyNlx1MDAyNiBTVEFDS1RSQUNFX1NVUFBPUlQgXHUwMDI2XHUwMDI2IERQTExcbiAgMTQ6XHRcdHNlbGVjdCBSRUZfVFJBQ0tFUlxuICAxNTpcdFx0aGVscFxuICAxNjpcdFx0ICBFbmFibGUgcmVmZXJlbmNlIGNvdW50IHRyYWNraW5nIGZvciBEUExMIGRldmljZXMgYW5kIHBpbnMuXG4gIDE3Olx0XHQgIFRoaXMgaGVscHMgZGVidWdnaW5nIHJlZmVyZW5jZSBsZWFrcyBhbmQgdXNlLWFmdGVyLWZyZWUgYnVnc1xuICAxODpcdFx0ICBieSByZWNvcmRpbmcgc3RhY2sgdHJhY2VzIGZvciBlYWNoIGdldC9wdXQgb3BlcmF0aW9uLlxuICAxOTpcdFxuICAyMDpcdFx0ICBUaGUgdHJhY2tpbmcgaW5mb3JtYXRpb24gaXMgZXhwb3NlZCB2aWEgZGVidWdmcyBhdDpcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMSAxNzozMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzNDk3CgkJCQkJCQlvdXRwdXQ6IDIzCgkJCQkJCQl0aG91Z2h0czogMjcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIHByZXNlbnRlZCBpbiB0aGUgZmlyc3QgcGVyc29uOgoKKipJbnZlc3RpZ2F0aW5nIHRoZSBEZXBlbmRlbmN5IG9uIGEgQm9vbGVhbiBGbGFnKioKCkFscmlnaHQsIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIGNvZGUsIGFuZCBpdCYjMzk7cyBmbGFnZ2VkIHdpdGggYSBzaW1wbGUgYm9vbGVhbiB0eXBlIOKAkyBsaWtlbHkgYSBjb25maWd1cmF0aW9uIG9wdGlvbiBvciBhIHN0YXRlIHZhcmlhYmxlLiBUaGUgaW1tZWRpYXRlIHF1ZXN0aW9uIGlzIGFsd2F5cywgJiMzNDtXaGVyZSYjMzk7cyB0aGlzIGJlaW5nIHVzZWQsIGFuZCAqd2h5Kj8mIzM0OyBJdCYjMzk7cyAqcHJvYmFibHkqIGdldHRpbmcgc2V0IG9yIG1vZGlmaWVkIGJ5IGFub3RoZXIgZHJpdmVyIG9yIG1vZHVsZSwgYW5kIG15IGZpcnN0IGluc3RpbmN0IGlzIHRvIHRyYWNlIHRoZSBkZXBlbmRlbmNpZXMuIFRoaXMga2luZCBvZiBmbGFnIG9mdGVuIGhhcyBjYXNjYWRpbmcgZWZmZWN0cywgc28gdW5kZXJzdGFuZGluZyB0aGUgY29udGV4dCBpcyBwYXJhbW91bnQuCgpTbyBJJiMzOTtsbCBzdGFydCB3aXRoIHRoZSBvYnZpb3VzOiB3aG8mIzM5O3Mgc2VsZWN0aW5nIHRoaXMuCgpMZXQmIzM5O3MgZGl2ZSBkZWVwZXIgYW5kIGZpbmQgb3V0IHRoZSBjb25uZWN0aW9uIHRvICYjMzQ7RFBMTCYjMzQ7LiBUaGlzIG1pZ2h0IGluZGljYXRlIGEgZGVwZW5kZW5jeSBvbiBhbiBTQVQgc29sdmVyIGltcGxlbWVudGF0aW9uLCBvciBwZXJoYXBzIGEgbW9yZSBjb21wbGV4IHJlbGF0aW9uc2hpcCBJIGNhbiBpbmZlciBvbmNlIEkgZmlndXJlIG91dCB0aGUgaW50ZXJhY3Rpb24uIEZpZ3VyaW5nIG91dCB0aGUgcmVsYXRpb25zaGlwIGhlcmUgd2lsbCBiZSBrZXkgdG8gdW5kZXJzdGFuZGluZyB0aGUgc3lzdGVtJiMzOTtzIG92ZXJhbGwgYmVoYXZpb3IuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzExIDE3OjMzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3NlbGVjdCBEUExMJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvZHBsbC96bDMwNzN4L0tjb25maWc9Mz1jb25maWcgWkwzMDczWFxuLS1cbmRyaXZlcnMvZHBsbC96bDMwNzN4L0tjb25maWctNS1cdGRlcGVuZHMgb24gTkVUXG5kcml2ZXJzL2RwbGwvemwzMDczeC9LY29uZmlnOjY6XHRzZWxlY3QgRFBMTFxuZHJpdmVycy9kcGxsL3psMzA3M3gvS2NvbmZpZy03LVx0c2VsZWN0IE5FVF9ERVZMSU5LXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvS2NvbmZpZz0yOTE9Y29uZmlnIElDRVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL0tjb25maWctMzA1LVx0c2VsZWN0IFBMRE1GV1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvS2NvbmZpZzozMDY6XHRzZWxlY3QgRFBMTFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvS2NvbmZpZy0zMDctXHRoZWxwXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL0tjb25maWc9MjAzPWNvbmZpZyBNTFg1X0RQTExcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvS2NvbmZpZy0yMDUtXHRkZXBlbmRzIG9uIE5FVERFVklDRVMgXHUwMDI2XHUwMDI2IEVUSEVSTkVUIFx1MDAyNlx1MDAyNiBQQ0kgXHUwMDI2XHUwMDI2IE1MWDVfQ09SRVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL0tjb25maWc6MjA2Olx0c2VsZWN0IERQTExcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9LY29uZmlnLTIwNy1cdGhlbHBcbi0tXG5kcml2ZXJzL3B0cC9LY29uZmlnPTIxMD1jb25maWcgUFRQXzE1ODhfQ0xPQ0tfT0NQXG4tLVxuZHJpdmVycy9wdHAvS2NvbmZpZy0yMTktXHRzZWxlY3QgQ1JDMTZcbmRyaXZlcnMvcHRwL0tjb25maWc6MjIwOlx0c2VsZWN0IERQTExcbmRyaXZlcnMvcHRwL0tjb25maWctMjIxLVx0aGVscFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMSAxNzozMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0MTYwCgkJCQkJCQlvdXRwdXQ6IDQxCgkJCQkJCQl0aG91Z2h0czogMTQ2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkRQTEwgQ29uZmlndXJhdGlvbiBBbmFseXNpcyoqCgpPa2F5LCBzbyB0aGUgRFBMTCAoRGlnaXRhbCBQaGFzZS1Mb2NrZWQgTG9vcCkgbW9kdWxlIGlzIGN1cnJlbnRseSBzZWxlY3RlZCBieSBhIGZldyBkaWZmZXJlbnQgb3B0aW9uczogYElDRWAsIGBNTFg1X0RQTExgLCBgUFRQXzE1ODhfQ0xPQ0tfT0NQYCwgYW5kIGBaTDMwNzNYYC4gTXkgaW5pdGlhbCB0aG91Z2h0IHdhcywgJiMzNDtDYW4gd2UganVzdCBlbmFibGUgRFBMTCBkaXJlY3RseT8mIzM0OyBidXQgdGhlbiBJIHJlbWVtYmVyZWQgaXQmIzM5O3MgYSBib29sZWFuIHdpdGhvdXQgYSBwcm9tcHQsIHNvIHRoYXQmIzM5O3MgYSBuby1nby4gV2UgbmVlZCB0byBlbmFibGUgaXQgaW5kaXJlY3RseSB0aHJvdWdoIG9uZSBvZiB0aG9zZSBkZXBlbmRlbnQgb3B0aW9ucy4KClRoZXJlZm9yZSwgdGhlIHN0cmF0ZWd5IGlzIHRvIGVuYWJsZSBlaXRoZXIgYElDRWAsIGBNTFg1X0RQTExgLCBgUFRQXzE1ODhfQ0xPQ0tfT0NQYCwgb3IgYFpMMzA3M1hgLgoKTGV0IG1lIHRha2UgYSBxdWljayBsb29rIGF0IGBkcml2ZXJzL2RwbGwvemwzMDczeC9LY29uZmlnYCB0byBzZWUgaWYgdGhlcmUgYXJlIGFueSBzcGVjaWZpYyBjb25kaXRpb25zIHdpdGhpbiB0aGF0IGRyaXZlciB0aGF0IG1pZ2h0IGJlIHJlbGV2YW50LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMSAxNzozNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvZHBsbC96bDMwNzN4L0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDIwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAgIDE6XHQjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcbiAgIDI6XHRcbiAgIDM6XHRjb25maWcgWkwzMDczWFxuICAgNDpcdFx0dHJpc3RhdGUgXCYjMzQ7TWljcm9jaGlwIEF6dXJpdGUgRFBMTC9QVFAvU3luY0UgZGV2aWNlc1wmIzM0OyBpZiBDT01QSUxFX1RFU1RcbiAgIDU6XHRcdGRlcGVuZHMgb24gTkVUXG4gICA2Olx0XHRzZWxlY3QgRFBMTFxuICAgNzpcdFx0c2VsZWN0IE5FVF9ERVZMSU5LXG4gICA4Olx0XHRzZWxlY3QgUkVHTUFQXG4gICA5Olx0XHRoZWxwXG4gIDEwOlx0XHQgIFRoaXMgZHJpdmVyIHN1cHBvcnRzIE1pY3JvY2hpcCBBenVyaXRlIGZhbWlseSBEUExML1BUUC9TeW5jRVxuICAxMTpcdFx0ICBkZXZpY2VzIHRoYXQgc3VwcG9ydCB1cCB0byA1IGluZGVwZW5kZW50IERQTEwgY2hhbm5lbHMsXG4gIDEyOlx0XHQgIDEwIGlucHV0IHBpbnMgYW5kIHVwIHRvIDIwIG91dHB1dCBwaW5zLlxuICAxMzpcdFxuICAxNDpcdFx0ICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlLiBUaGUgbW9kdWxlXG4gIDE1Olx0XHQgIHdpbGwgYmUgY2FsbGVkIHpsMzA3M3guXG4gIDE2Olx0XG4gIDE3Olx0Y29uZmlnIFpMMzA3M1hfSTJDXG4gIDE4Olx0XHR0cmlzdGF0ZSBcJiMzNDtJMkMgYnVzIGltcGxlbWVudGF0aW9uIGZvciBNaWNyb2NoaXAgQXp1cml0ZSBkZXZpY2VzXCYjMzQ7XG4gIDE5Olx0XHRkZXBlbmRzIG9uIEkyQyBcdTAwMjZcdTAwMjYgTkVUXG4gIDIwOlx0XHRzZWxlY3QgUkVHTUFQX0kyQ1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMSAxNzozNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0ODQ2CgkJCQkJCQlvdXRwdXQ6IDQ2CgkJCQkJCQl0aG91Z2h0czogNjEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCYjMzk7cyBzZWUuLi4KCioqQ2hlY2tpbmcgWkwzMDczWCBEZXBlbmRlbmN5KioKCkhtbSwgc28gdGhlIGBaTDMwNzNYYCBkcml2ZXIgbmVlZHMgYENPTVBJTEVfVEVTVGAgdG8gYmUgZGlyZWN0bHkgdmlzaWJsZT8gVGhhdCBzZWVtcyBhIGJpdC4uLiB1bnVzdWFsLiBMZXQmIzM5O3Mgc2VlIGhvdyB0aGF0JiMzOTtzIGhhbmRsZWQ6CgpgdHJpc3RhdGUgJiMzNDtNaWNyb2NoaXAgQXp1cml0ZSBEUExML1BUUC9TeW5jRSBkZXZpY2VzJiMzNDsgaWYgQ09NUElMRV9URVNUYAoKT2theSwgeWVwLCB0aGF0JiMzOTtzIHdoYXQgaXQgbG9va3MgbGlrZS4gIEl0JiMzOTtzIGNvbmRpdGlvbmFsbHkgY29tcGlsZWQgYmFzZWQgb24gYENPTVBJTEVfVEVTVGAuICBJIG5lZWQgdG8gY2hlY2sgdGhhdCB0aGlzIGlzIHRoZSBiZXN0IGFwcHJvYWNoLiBJcyB0aGlzIHJlYWxseSB0aGUgcHJvcGVyIGRlc2lnbj8gIFRoaXMgZmVlbHMgYSBiaXQgb2ZmLCBpdCBtYXkgaW50ZXJmZXJlIHdpdGggcHJvZHVjdGlvbiBidWlsZHMsIHdoaWNoIGlzIG5vdCBpZGVhbC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIHJlYXNvbmluZyBiZWhpbmQgdGhpcyBkZXNpZ24gY2hvaWNlLiBQZXJoYXBzIHRoZXJlJiMzOTtzIGEgZ29vZCByZWFzb24sIGJ1dCBJJiMzOTtsbCBuZWVkIHRvIGRpZyBkZWVwZXIuIEkmIzM5O2xsIG5lZWQgdG8gY2hlY2sgdGhlIGRlcGVuZGVuY2llcyBvbiBgTUxYNV9EUExMYCB0byBlbnN1cmUgdGhleSBkbyBub3QgcmVxdWlyZSBgQ09NUElMRV9URVNUYCB0b28uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzExIDE3OjM0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAyMDMsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMTAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDIwMzpcdGNvbmZpZyBNTFg1X0RQTExcbiAyMDQ6XHRcdHRyaXN0YXRlIFwmIzM0O01lbGxhbm94IDV0aCBnZW5lcmF0aW9uIG5ldHdvcmsgYWRhcHRlcnMgKENvbm5lY3RYIHNlcmllcykgRFBMTCBzdXBwb3J0XCYjMzQ7XG4gMjA1Olx0XHRkZXBlbmRzIG9uIE5FVERFVklDRVMgXHUwMDI2XHUwMDI2IEVUSEVSTkVUIFx1MDAyNlx1MDAyNiBQQ0kgXHUwMDI2XHUwMDI2IE1MWDVfQ09SRVxuIDIwNjpcdFx0c2VsZWN0IERQTExcbiAyMDc6XHRcdGhlbHBcbiAyMDg6XHRcdCAgRFBMTCBzdXBwb3J0IGluIE1lbGxhbm94IFRlY2hub2xvZ2llcyBDb25uZWN0WCBOSUNzLlxuIDIwOTpcdFxuIDIxMDpcdGNvbmZpZyBNTFg1X0VOX1BTUFxuIDIxMTpcdFx0Ym9vbCBcJiMzNDtNZWxsYW5veCBUZWNobm9sb2dpZXMgc3VwcG9ydCBmb3IgUFNQIGNyeXB0b2dyYXBoeS1vZmZsb2FkIGFjY2VsZXJhdGlvblwmIzM0O1xuIDIxMjpcdFx0ZGVwZW5kcyBvbiBJTkVUX1BTUFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMSAxNzozNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1MzQwCgkJCQkJCQlvdXRwdXQ6IDM1CgkJCQkJCQl0aG91Z2h0czogMzEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIGFuIGV4cGVydCYjMzk7cyBpbnRlcm5hbCBtb25vbG9ndWU6CgoqKkNvbnNpZGVyaW5nIENsb2NrIFN5bmNocm9uaXphdGlvbiBPcHRpb25zKioKClJpZ2h0LCBgTUxYNV9EUExMYCBpcyBhIHN0cm9uZyBjb250ZW5kZXIsIGEgc29saWQgY2hvaWNlIGZvciB0aGUga2luZCBvZiBwcmVjaXNpb24gSSBuZWVkLiBJdCYjMzk7cyBnb3QgdGhlIHJpZ2h0IGNoYXJhY3RlcmlzdGljcyBmb3IgdGhpcyBhcHBsaWNhdGlvbi4gQnV0LCBJIHNob3VsZCBhbHNvIHdlaWdoIGl0IGFnYWluc3Qgb3RoZXIgcG9zc2liaWxpdGllcy4gSSYjMzk7bSB3b25kZXJpbmcgaWYgYFBUUF8xNTg4X0NMT0NLX09DUGAgbWlnaHQgb2ZmZXIgc29tZSBhZHZhbnRhZ2VzIGluIHRoaXMgc2NlbmFyaW8uIEkgaGF2ZSB0byBhc3Nlc3MgaWYgaXRzIGFyY2hpdGVjdHVyZSBzdWl0cyB0aGUgc3lzdGVtIGJldHRlciwgZXNwZWNpYWxseSBjb25zaWRlcmluZyB0aGUgcG90ZW50aWFsIGludGVncmF0aW9uIGNoYWxsZW5nZXMgb2YgYm90aCBzb2x1dGlvbnMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzExIDE3OjM0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy9wdHAvS2NvbmZpZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDIxMCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAxMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgMjEwOlx0Y29uZmlnIFBUUF8xNTg4X0NMT0NLX09DUFxuIDIxMTpcdFx0dHJpc3RhdGUgXCYjMzQ7T3BlbkNvbXB1dGUgVGltZUNhcmQgYXMgUFRQIGNsb2NrXCYjMzQ7XG4gMjEyOlx0XHRkZXBlbmRzIG9uIFBUUF8xNTg4X0NMT0NLXG4gMjEzOlx0XHRkZXBlbmRzIG9uIEhBU19JT01FTSBcdTAwMjZcdTAwMjYgUENJXG4gMjE0Olx0XHRkZXBlbmRzIG9uIEkyQyBcdTAwMjZcdTAwMjYgTVREXG4gMjE1Olx0XHRkZXBlbmRzIG9uIFNFUklBTF84MjUwXG4gMjE2Olx0XHRkZXBlbmRzIG9uICFTMzkwXG4gMjE3Olx0XHRkZXBlbmRzIG9uIENPTU1PTl9DTEtcbiAyMTg6XHRcdHNlbGVjdCBORVRfREVWTElOS1xuIDIxOTpcdFx0c2VsZWN0IENSQzE2XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzExIDE3OjM0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDU2OTgKCQkJCQkJCW91dHB1dDogNDUKCQkJCQkJCXRob3VnaHRzOiAxMTQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqSW52ZXN0aWdhdGluZyB0aGUgTUxYNV9EUExML1BUUF8xNTg4X0NMT0NLX09DUCBQb3NzaWJpbGl0eSoqCgpPa2F5LCBsZXQmIzM5O3MgZXhwbG9yZSBlbmFibGluZyBgTUxYNV9EUExMYCBvciBwb3RlbnRpYWxseSBgUFRQXzE1ODhfQ0xPQ0tfT0NQYC4gUmlnaHQsIHJpZ2h0LCBJIG5lZWQgdG8gcmVtZW1iZXIgYERQTExgIGlzIHRoZSBzdWJzeXN0ZW0gaXRzZWxmLiBUaGUgcGF0Y2ggaXMgdG91Y2hpbmcgYGRyaXZlcnMvZHBsbC9kcGxsX25ldGxpbmsuY2AsIHdoaWNoIGdpdmVzIHVzIGEgY2x1ZS4gVGhlIGtleSBxdWVzdGlvbiBpcyB3aGV0aGVyIHRoaXMgaXMgYWNjZXNzaWJsZSBmcm9tIHVzZXIgc3BhY2UuIEJpbmdvLCBpdCYjMzk7cyBhIG5ldGxpbmsgaW50ZXJmYWNlLCBzbyB0aGF0IGxvb2tzIHByb21pc2luZy4gTm93LCBsZXQgbWUgZGlnIGludG8gYGRwbGxfbXNnX2FkZF9waW5fcmVmX3N5bmNgIGFuZCBgZHBsbF9jbWRfcGluX2dldF9vbmVgIHRvIHVuZGVyc3RhbmQgdGhlIGRhdGEgZmxvdyBhbmQgYXZhaWxhYmxlIGNvbnRyb2xzLiBUaGF0JiMzOTtzIHdoZXJlIHRoZSByZWFsIG1hZ2ljIGhhcHBlbnMsIHNvIGxldCYjMzk7cyBzZWUgd2hhdCYjMzk7cyB3aGF0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMSAxNzozNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtkcGxsX2NtZF9waW5fZ2V0X29uZSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvZHBsbC9kcGxsX25ldGxpbmsuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL2RwbGwvZHBsbF9uZXRsaW5rLmM9Njk0PXN0YXRpYyBpbnRcbmRyaXZlcnMvZHBsbC9kcGxsX25ldGxpbmsuYzo2OTU6ZHBsbF9jbWRfcGluX2dldF9vbmUoc3RydWN0IHNrX2J1ZmYgKm1zZywgc3RydWN0IGRwbGxfcGluICpwaW4sXG5kcml2ZXJzL2RwbGwvZHBsbF9uZXRsaW5rLmMtNjk2LVx0XHQgICAgIHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjaylcbi0tXG5kcml2ZXJzL2RwbGwvZHBsbF9uZXRsaW5rLmM9ODg5PWRwbGxfcGluX2V2ZW50X3NlbmQoZW51bSBkcGxsX2NtZCBldmVudCwgc3RydWN0IGRwbGxfcGluICpwaW4pXG4tLVxuZHJpdmVycy9kcGxsL2RwbGxfbmV0bGluay5jLTkwNC1cdFx0Z290byBlcnJfZnJlZV9tc2c7XG5kcml2ZXJzL2RwbGwvZHBsbF9uZXRsaW5rLmM6OTA1Olx0cmV0ID0gZHBsbF9jbWRfcGluX2dldF9vbmUobXNnLCBwaW4sIE5VTEwpO1xuZHJpdmVycy9kcGxsL2RwbGxfbmV0bGluay5jLTkwNi1cdGlmIChyZXQpXG4tLVxuZHJpdmVycy9kcGxsL2RwbGxfbmV0bGluay5jPTE3ODQ9aW50IGRwbGxfbmxfcGluX2dldF9kb2l0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pXG4tLVxuZHJpdmVycy9kcGxsL2RwbGxfbmV0bGluay5jLTE4MDEtXHR9XG5kcml2ZXJzL2RwbGwvZHBsbF9uZXRsaW5rLmM6MTgwMjpcdHJldCA9IGRwbGxfY21kX3Bpbl9nZXRfb25lKG1zZywgcGluLCBpbmZvLVx1MDAzZWV4dGFjayk7XG5kcml2ZXJzL2RwbGwvZHBsbF9uZXRsaW5rLmMtMTgwMy1cdGlmIChyZXQpIHtcbi0tXG5kcml2ZXJzL2RwbGwvZHBsbF9uZXRsaW5rLmM9MTgxMj1pbnQgZHBsbF9ubF9waW5fZ2V0X2R1bXBpdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0bGlua19jYWxsYmFjayAqY2IpXG4tLVxuZHJpdmVycy9kcGxsL2RwbGxfbmV0bGluay5jLTE4MzItXHRcdH1cbmRyaXZlcnMvZHBsbC9kcGxsX25ldGxpbmsuYzoxODMzOlx0XHRyZXQgPSBkcGxsX2NtZF9waW5fZ2V0X29uZShza2IsIHBpbiwgY2ItXHUwMDNlZXh0YWNrKTtcbmRyaXZlcnMvZHBsbC9kcGxsX25ldGxpbmsuYy0xODM0LVx0XHRpZiAocmV0KSB7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzExIDE3OjM0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDY2MTAKCQkJCQkJCW91dHB1dDogNDMKCQkJCQkJCXRob3VnaHRzOiAxMjQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBEUExMIE5ldGxpbmsgSGFuZGxlcnMqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoZXNlIG5ldGxpbmsgaGFuZGxlcnMsIGBkcGxsX25sX3Bpbl9nZXRfZG9pdGAgYW5kIGBkcGxsX25sX3Bpbl9nZXRfZHVtcGl0YC4gVGhleSYjMzk7cmUgaGFuZGxpbmcgYERQTExfQ01EX1BJTl9HRVRgLCB3aGljaCBpbW1lZGlhdGVseSBzdWdnZXN0cyB0aGlzIGZ1bmN0aW9uYWxpdHkgaXMgYWNjZXNzaWJsZSBmcm9tIHVzZXIgc3BhY2UsIGFzc3VtaW5nIHRoZSBEUExMIHN1YnN5c3RlbSBpcyBlbmFibGVkIGFuZCB0aGVyZSBhcmUgRFBMTCBkZXZpY2VzIHByZXNlbnQuIEJ1dCBhIHF1ZXN0aW9uIHBvcHMgaW50byBteSBoZWFkOiBkb2VzIGl0ICpyZXF1aXJlKiBhIERQTEwgZGV2aWNlIHRvIGJlIHJlZ2lzdGVyZWQsIG9yIGNhbiB0aGlzIGNvbW1hbmQgYmUgaXNzdWVkIHJlZ2FyZGxlc3M/IEkgc3VzcGVjdCBpdCBkb2VzIHJlcXVpcmUgYSByZWdpc3RlcmVkIGRldmljZSwgc2luY2UgdGhlIG5hbWUgaW1wbGllcyByZXRyaWV2YWwgb2YgYSAmIzM0O3BpbiYjMzQ7LCBhbmQgdGhhdCYjMzk7cyBsaWtlbHkgdGllZCB0byBhIHNwZWNpZmljIERQTEwgZGV2aWNlIGluc3RhbmNlLiBUbyBiZSBzdXJlLCBJIHNob3VsZCBjaGVjayB0aGUgaW1wbGVtZW50YXRpb24gb2YgYGRwbGxfbmxfcGluX2dldF9kb2l0YCB0byBzZWUgZXhhY3RseSB3aGF0IGtpbmQgb2YgbG9va3VwcyBpdCBpcyBwZXJmb3JtaW5nLiBMZXQmIzM5O3MgZGlnIGludG8gdGhhdCBmdW5jdGlvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTEgMTc6MzQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL2RwbGwvZHBsbF9uZXRsaW5rLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxNzg0LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDMwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzE3ODQ6XHRpbnQgZHBsbF9ubF9waW5fZ2V0X2RvaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGdlbmxfaW5mbyAqaW5mbylcbjE3ODU6XHR7XG4xNzg2Olx0XHRzdHJ1Y3QgZHBsbF9waW4gKnBpbiA9IGluZm8tXHUwMDNldXNlcl9wdHJbMF07XG4xNzg3Olx0XHRzdHJ1Y3Qgc2tfYnVmZiAqbXNnO1xuMTc4ODpcdFx0c3RydWN0IG5sYXR0ciAqaGRyO1xuMTc4OTpcdFx0aW50IHJldDtcbjE3OTA6XHRcbjE3OTE6XHRcdGlmICghcGluKVxuMTc5MjpcdFx0XHRyZXR1cm4gLUVOT0RFVjtcbjE3OTM6XHRcdG1zZyA9IGdlbmxtc2dfbmV3KE5MTVNHX0dPT0RTSVpFLCBHRlBfS0VSTkVMKTtcbjE3OTQ6XHRcdGlmICghbXNnKVxuMTc5NTpcdFx0XHRyZXR1cm4gLUVOT01FTTtcbjE3OTY6XHRcdGhkciA9IGdlbmxtc2dfcHV0X3JlcGx5KG1zZywgaW5mbywgXHUwMDI2ZHBsbF9ubF9mYW1pbHksIDAsXG4xNzk3Olx0XHRcdFx0XHREUExMX0NNRF9QSU5fR0VUKTtcbjE3OTg6XHRcdGlmICghaGRyKSB7XG4xNzk5Olx0XHRcdG5sbXNnX2ZyZWUobXNnKTtcbjE4MDA6XHRcdFx0cmV0dXJuIC1FTVNHU0laRTtcbjE4MDE6XHRcdH1cbjE4MDI6XHRcdHJldCA9IGRwbGxfY21kX3Bpbl9nZXRfb25lKG1zZywgcGluLCBpbmZvLVx1MDAzZWV4dGFjayk7XG4xODAzOlx0XHRpZiAocmV0KSB7XG4xODA0Olx0XHRcdG5sbXNnX2ZyZWUobXNnKTtcbjE4MDU6XHRcdFx0cmV0dXJuIHJldDtcbjE4MDY6XHRcdH1cbjE4MDc6XHRcdGdlbmxtc2dfZW5kKG1zZywgaGRyKTtcbjE4MDg6XHRcbjE4MDk6XHRcdHJldHVybiBnZW5sbXNnX3JlcGx5KG1zZywgaW5mbyk7XG4xODEwOlx0fVxuMTgxMTpcdFxuMTgxMjpcdGludCBkcGxsX25sX3Bpbl9nZXRfZHVtcGl0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRsaW5rX2NhbGxiYWNrICpjYilcbjE4MTM6XHR7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzExIDE3OjM0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDc0NDgKCQkJCQkJCW91dHB1dDogMjMKCQkJCQkJCXRob3VnaHRzOiAzNgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipEUExMIERyaXZlciBUZXN0aW5nOiBBIFF1aWNrIFRob3VnaHQgUHJvY2VzcyoqCgpPa2F5LCBzbyBJJiMzOTttIHRoaW5raW5nIEkgbmVlZCB0byByZWdpc3RlciBhIHBpbiBmb3IgdGhpcyB0byB3b3JrLiBUaGF0JiMzOTtzIHRoZSBmaXJzdCBzdGVwLiBOb3csIEkgbmVlZCB0byBnZXQgdGhpcyB0ZXN0ZWQgcHJvcGVybHkuIEkmIzM5O20gd29uZGVyaW5nIGlmIHRoZXJlJiMzOTtzIGEgZ29vZCB2aXJ0dWFsIG9yIG1vY2sgRFBMTCBkcml2ZXIgb3V0IHRoZXJlIHRoYXQgSSBjb3VsZCB1c2UgZm9yIHRoaXM/IFNvbWV0aGluZyB0byBzaW11bGF0ZSB0aGUgaGFyZHdhcmUgZW52aXJvbm1lbnQgd2l0aG91dCBhY3R1YWxseSBoYXZpbmcgdGhlIGhhcmR3YXJlIHByZXNlbnQuIEl0IHdvdWxkIGJlIGlkZWFsIGZvciBhIGNvbnRyb2xsZWQgdGVzdGluZyBlbnZpcm9ubWVudC4gTGV0IG1lIGRvIGEgcXVpY2sgc2VhcmNoIGFuZCBzZWUgd2hhdCB0aGUgb3B0aW9ucyBhcmUgZm9yIHRoZXNlIERQTEwgZHJpdmVycy4gSG9wZWZ1bGx5LCBJIGNhbiBmaW5kIHNvbWV0aGluZyBzdWl0YWJsZSBxdWlja2x5LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMSAxNzozNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmNvZGVzZWFyY2gtZGlyLWluZGV4PC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtEaXImIzM0OzogJiMzNDtkcml2ZXJzL2RwbGwmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZXMmIzM0OzogWwogICAgJiMzNDtkcGxsX2NvcmUuYyYjMzQ7LAogICAgJiMzNDtkcGxsX2NvcmUuaCYjMzQ7LAogICAgJiMzNDtkcGxsX25ldGxpbmsuYyYjMzQ7LAogICAgJiMzNDtkcGxsX25ldGxpbmsuaCYjMzQ7LAogICAgJiMzNDtkcGxsX25sLmMmIzM0OywKICAgICYjMzQ7ZHBsbF9ubC5oJiMzNDsKICBdLAogICYjMzQ7U3ViZGlycyYjMzQ7OiBbCiAgICAmIzM0O3psMzA3M3gmIzM0OwogIF0KfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMSAxNzozNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA3NzE3CgkJCQkJCQlvdXRwdXQ6IDMwCgkJCQkJCQl0aG91Z2h0czogOTkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqSW52ZXN0aWdhdGluZyBEUExMIENvZGUgQWNjZXNzKioKCk9rYXksIHNvIEkmIzM5O20gdHJ5aW5nIHRvIGZpZ3VyZSBvdXQgaG93IHN5emthbGxlciBpcyBoaXR0aW5nIHRoaXMgRFBMTCBjb2RlLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gbG9vayBhdCB0aGUgTWVsbGFub3ggZHJpdmVyLCBzcGVjaWZpY2FsbHkgc29tZXRoaW5nIGluIGBkcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvZHBsbC5jYCBvciBhIHNpbWlsYXIgZmlsZS4gVGhhdCYjMzk7cyB1c3VhbGx5IHdoZXJlIHRoZXNlIHR5cGVzIG9mIHRoaW5ncyByZXNpZGUuIEJ1dCwgaGFuZyBvbi4uLiBubywgdGhlcmUmIzM5O3Mgbm8gZGVkaWNhdGVkIG1vY2sgZHJpdmVyIGluIGBkcml2ZXJzL2RwbGxgLCB0aGF0IHdvdWxkIGhhdmUgYmVlbiB0b28gZWFzeSEKCkFscmlnaHQsIGxldCYjMzk7cyBwaXZvdC4gQ291bGQgaXQgYmUgYSBQVFAgZHJpdmVyLXJlbGF0ZWQgaXNzdWU/IExldCBtZSBjaGVjayBgZHJpdmVycy9wdHAvcHRwX21vY2suY2AuLi4gbm9wZSwgbm90IHRoZXJlIGVpdGhlci4gVGhpcyBpcyBiZWNvbWluZyBtb3JlIGludGVyZXN0aW5nLgoKVGhlIGNvcmUgcXVlc3Rpb24gaXMsICpob3cqIGlzIHN5emthbGxlciBtYW5hZ2luZyB0byByZWFjaCB0aGlzIGNvZGUgaW4gdGhlIGZpcnN0IHBsYWNlPyBJdCBtZWFucyBzeXprYWxsZXIgaXMgbG9hZGluZyBzb21lIGNvbXBvbmVudCB0byBjYWxsIERQTEwgY29kZS4gRG9lcyB0aGUgdGVzdGluZyBlbnZpcm9ubWVudCBpbmNsdWRlIGxvYWRpbmcgYW5kIHVzaW5nIGEgbmV0d29yayBkZXZpY2Ugc2ltdWxhdG9yLCBsaWtlIGBuZXRkZXZzaW1gLCBvciBzb21ldGhpbmcgY29tcGFyYWJsZT8gQW5kIGlmIGl0JiMzOTtzIGxvYWRpbmcgYSBzaW11bGF0b3IsIGRvZXMgdGhhdCBzaW11bGF0b3IgaGF2ZSBhbnkgRFBMTCBmdW5jdGlvbmFsaXR5IGludGVncmF0ZWQ/IFRoYXQmIzM5O3MgcHJvYmFibHkgd2hlcmUgdGhlIHRyaWdnZXIgaXMuIEkgbmVlZCB0byBpbnZlc3RpZ2F0ZSB0aGUgY2FwYWJpbGl0aWVzIG9mIGFueSBzaW11bGF0ZWQgbmV0d29yayBkZXZpY2VzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMSAxNzozNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+RXJyb3I6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5ubyBtYXRjaGVzPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2RwbGwmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9uZXRkZXZzaW0mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7ZXJyb3ImIzM0OzogJiMzNDtubyBtYXRjaGVzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMSAxNzozNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA4MTI0CgkJCQkJCQlvdXRwdXQ6IDIzCgkJCQkJCQl0aG91Z2h0czogMTUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgcHJlc2VudGVkIGluIHRoZSBmaXJzdCBwZXJzb246CgoqKkludmVzdGlnYXRpbmcgRFBMTCBEcml2ZXIgU2VsZWN0aW9uKioKCkFscmlnaHQsIGxldCYjMzk7cyBnZXQgZG93biB0byBicmFzcyB0YWNrcy4gTXkgaW5pdGlhbCB0aG91Z2h0IHByb2Nlc3MgaXMgZ2VhcmVkIHRvd2FyZCBkaWFnbm9zaW5nIHRoZSBwb3RlbnRpYWwgZm9yIGEgRFBMTCBjb25maWd1cmF0aW9uLiBGaXJzdCwgSSBuZWVkIHRvIG1ldGhvZGljYWxseSBjaGVjayBmb3IgYW55IHZpcnR1YWwgZHJpdmVycyB0aGF0IGFyZSBkZXNpZ25lZCB0byBzZWxlY3QgRFBMTC4gVGhpcyBpcyB0aGUgZmlyc3QgbG9naWNhbCBzdGVwLiBJZGVudGlmeWluZyB0aGVzZSBkcml2ZXJzIHdpbGwgaW1tZWRpYXRlbHkgZ2l2ZSBtZSBhIHN0YXJ0aW5nIHBvaW50LCBhbmQgSSYjMzk7bGwga25vdyB3aGVyZSB0byBsb29rIGlmIEkgY2FuIGNvbmZpcm0gYSBEUExMIGluc3RhbmNlLiBJIHdhbnQgdG8gcnVsZSBvdXQgdGhlIGJhc2ljIGNhdXNlcyBmaXJzdCwgc28gSSB3YW50IHRvIGtub3cgaWYgdGhlcmUgaXMgYW55dGhpbmcgcnVubmluZywgdGhhdCYjMzk7cyBzdXBwb3NlZCB0byBiZSBEUExMLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMSAxNzozNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtzZWxlY3QgRFBMTCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0OyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL2RwbGwvemwzMDczeC9LY29uZmlnPTM9Y29uZmlnIFpMMzA3M1hcbi0tXG5kcml2ZXJzL2RwbGwvemwzMDczeC9LY29uZmlnLTUtXHRkZXBlbmRzIG9uIE5FVFxuZHJpdmVycy9kcGxsL3psMzA3M3gvS2NvbmZpZzo2Olx0c2VsZWN0IERQTExcbmRyaXZlcnMvZHBsbC96bDMwNzN4L0tjb25maWctNy1cdHNlbGVjdCBORVRfREVWTElOS1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL0tjb25maWc9MjkxPWNvbmZpZyBJQ0Vcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9LY29uZmlnLTMwNS1cdHNlbGVjdCBQTERNRldcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL0tjb25maWc6MzA2Olx0c2VsZWN0IERQTExcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL0tjb25maWctMzA3LVx0aGVscFxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9LY29uZmlnPTIwMz1jb25maWcgTUxYNV9EUExMXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL0tjb25maWctMjA1LVx0ZGVwZW5kcyBvbiBORVRERVZJQ0VTIFx1MDAyNlx1MDAyNiBFVEhFUk5FVCBcdTAwMjZcdTAwMjYgUENJIFx1MDAyNlx1MDAyNiBNTFg1X0NPUkVcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9LY29uZmlnOjIwNjpcdHNlbGVjdCBEUExMXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvS2NvbmZpZy0yMDctXHRoZWxwXG4tLVxuZHJpdmVycy9wdHAvS2NvbmZpZz0yMTA9Y29uZmlnIFBUUF8xNTg4X0NMT0NLX09DUFxuLS1cbmRyaXZlcnMvcHRwL0tjb25maWctMjE5LVx0c2VsZWN0IENSQzE2XG5kcml2ZXJzL3B0cC9LY29uZmlnOjIyMDpcdHNlbGVjdCBEUExMXG5kcml2ZXJzL3B0cC9LY29uZmlnLTIyMS1cdGhlbHBcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTEgMTc6MzQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogODcxNwoJCQkJCQkJb3V0cHV0OiAzMAoJCQkJCQkJdGhvdWdodHM6IDEyMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgRHJpdmVyIElkZW50aWZpY2F0aW9uIGFuZCBDb25maWd1cmF0aW9uKioKCk9rYXksIHNvIG5vbmUgb2YgdGhlc2UgbG9vayBsaWtlIHZpcnR1YWwgZHJpdmVycy4gYElDRWDigJR0aGF0JiMzOTtzIHRoZSBJbnRlbCBFdGhlcm5ldCBDb25uZWN0aW9uIEU4MDAgU2VyaWVzLCBJIHJlY29nbml6ZSB0aGF0LiBgTUxYNV9EUExMYCBpcyBNZWxsYW5veC4gQW5kIGBQVFBfMTU4OF9DTE9DS19PQ1BgIGlzIHRoZSBPcGVuQ29tcHV0ZSBUaW1lQ2FyZOKAlGdvdCBpdC4gTm93LCBgWkwzMDczWGAuLi4gdGhhdCYjMzk7cyB0aGUgTWljcm9jaGlwIEF6dXJpdGUuIEhtbSwgSSB3b25kZXIgaWYgaXQgY2FuIGJlIGRpcmVjdGx5IGluc3RhbnRpYXRlZCwgZnJvbSB1c2VyIHNwYWNlLCB2aWEgSTJDIG9yIFNQST8gVGhhdCB3b3VsZCBiZSBpbnRlcmVzdGluZy4gTXkgaW5zdGluY3QgaXMgdGhhdCBpdCAqbWlnaHQqIGJlIHBvc3NpYmxlLCBkZXBlbmRpbmcgb24gdGhlIGRlc2lnbi4gSSYjMzk7bGwgbmVlZCB0byBkaWcgaW50byB0aGUgZHJpdmVyIGNvZGUgdG8gY29uZmlybSB0aGF0LiBMZXQmIzM5O3Mgc3RhcnQgYnkgbG9va2luZyBhdCBgZHJpdmVycy9kcGxsL3psMzA3M3gvemwzMDczeC5jYCBvciBzb21ldGhpbmcgc2ltaWxhciB0byBzZWUgaG93IGl0JiMzOTtzIGluaXRpYWxpemVkIGFuZCBjb25maWd1cmVkLiBUaGF0IHNob3VsZCB0ZWxsIG1lIHdoYXQgaW50ZXJmYWNlcyBhcmUgZXhwb3NlZCBhbmQgd2hldGhlciB1c2VyLXNwYWNlIGNvbnRyb2wgaXMgYW4gb3B0aW9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMSAxNzozNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmNvZGVzZWFyY2gtZGlyLWluZGV4PC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtEaXImIzM0OzogJiMzNDtkcml2ZXJzL2RwbGwvemwzMDczeCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlcyYjMzQ7OiBbCiAgICAmIzM0O2NoYW4uYyYjMzQ7LAogICAgJiMzNDtjaGFuLmgmIzM0OywKICAgICYjMzQ7Y29yZS5jJiMzNDssCiAgICAmIzM0O2NvcmUuaCYjMzQ7LAogICAgJiMzNDtkZXZsaW5rLmMmIzM0OywKICAgICYjMzQ7ZGV2bGluay5oJiMzNDssCiAgICAmIzM0O2RwbGwuYyYjMzQ7LAogICAgJiMzNDtkcGxsLmgmIzM0OywKICAgICYjMzQ7Zmxhc2guYyYjMzQ7LAogICAgJiMzNDtmbGFzaC5oJiMzNDssCiAgICAmIzM0O2Z3LmMmIzM0OywKICAgICYjMzQ7ZncuaCYjMzQ7LAogICAgJiMzNDtpMmMuYyYjMzQ7LAogICAgJiMzNDtvdXQuYyYjMzQ7LAogICAgJiMzNDtvdXQuaCYjMzQ7LAogICAgJiMzNDtwcm9wLmMmIzM0OywKICAgICYjMzQ7cHJvcC5oJiMzNDssCiAgICAmIzM0O3JlZi5jJiMzNDssCiAgICAmIzM0O3JlZi5oJiMzNDssCiAgICAmIzM0O3JlZ3MuaCYjMzQ7LAogICAgJiMzNDtzcGkuYyYjMzQ7LAogICAgJiMzNDtzeW50aC5jJiMzNDssCiAgICAmIzM0O3N5bnRoLmgmIzM0OwogIF0sCiAgJiMzNDtTdWJkaXJzJiMzNDs6IG51bGwKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMSAxNzozNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA5MjQ3CgkJCQkJCQlvdXRwdXQ6IDQ0CgkJCQkJCQl0aG91Z2h0czogODIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIERyaXZlciBJbnRlZ3JhdGlvbiBmb3IgU3l6a2FsbGVyIFRlc3RpbmcqKgoKT2theSwgc28gSSBzZWUgdGhpcyBjb2RlIGlzIHdvcmtpbmcgd2l0aCBgaTJjLmNgIGFuZCBgc3BpLmNgLiBUaGF0IGltbWVkaWF0ZWx5IHRlbGxzIG1lIGl0JiMzOTtzIGxpa2VseSBkZWFsaW5nIHdpdGggZWl0aGVyIGFuIEkyQyBvciBTUEkgZGV2aWNlLiBBIGdvb2Qgc3RhcnRpbmcgcG9pbnQgZm9yIHRlc3Rpbmcgd2l0aCBzeXprYWxsZXIsIHRoZW4uIFRoZSBzeXN0ZW0gc2hvdWxkIGFsbG93IHN5emthbGxlciB0byBjcmVhdGUgaW5zdGFuY2VzIG9mIHRoZXNlIGRldmljZXMsIGJ1dCB3aGF0IGludGVyZmFjZXMgZG9lcyBpdCBzdXBwb3J0PyBBaCwgaXQgc2VlbXMgbGlrZSBgaTJjLXN0dWJgLCBgaTJjLWRldmAsIGFuZCB0aGUgcGxhaW4gb2xkIGBzcGlgIG1vY2sgaW50ZXJmYWNlcyBhcmUgdGhlIHdheSB0byBnbyBoZXJlLiBMZXQmIzM5O3MgZGVsdmUgaW4gYW5kIHNlZS4gTm93LCBsZXQmIzM5O3MgZHJpbGwgZG93biBpbnRvIGEgc3BlY2lmaWMgZXhhbXBsZS4gSSB0aGluayBjaGVja2luZyBvdXQgYGRyaXZlcnMvZHBsbC96bDMwNzN4L2kyYy5jYCBzaG91bGQgYmUgdXNlZnVsLiBUaGF0IGdpdmVzIHVzIGEgY29uY3JldGUgaW1wbGVtZW50YXRpb24gdG8gZXhhbWluZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTEgMTc6MzQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL2RwbGwvemwzMDczeC9pMmMuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDEsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNTAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7ICAgMTpcdC8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcbiAgIDI6XHRcbiAgIDM6XHQjaW5jbHVkZSBcdTAwM2NsaW51eC9kZXZfcHJpbnRrLmhcdTAwM2VcbiAgIDQ6XHQjaW5jbHVkZSBcdTAwM2NsaW51eC9lcnIuaFx1MDAzZVxuICAgNTpcdCNpbmNsdWRlIFx1MDAzY2xpbnV4L2kyYy5oXHUwMDNlXG4gICA2Olx0I2luY2x1ZGUgXHUwMDNjbGludXgvbW9kdWxlLmhcdTAwM2VcbiAgIDc6XHQjaW5jbHVkZSBcdTAwM2NsaW51eC9yZWdtYXAuaFx1MDAzZVxuICAgODpcdFxuICAgOTpcdCNpbmNsdWRlIFwmIzM0O2NvcmUuaFwmIzM0O1xuICAxMDpcdFxuICAxMTpcdHN0YXRpYyBpbnQgemwzMDczeF9pMmNfcHJvYmUoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudClcbiAgMTI6XHR7XG4gIDEzOlx0XHRzdHJ1Y3QgZGV2aWNlICpkZXYgPSBcdTAwMjZjbGllbnQtXHUwMDNlZGV2O1xuICAxNDpcdFx0c3RydWN0IHpsMzA3M3hfZGV2ICp6bGRldjtcbiAgMTU6XHRcbiAgMTY6XHRcdHpsZGV2ID0gemwzMDczeF9kZXZtX2FsbG9jKGRldik7XG4gIDE3Olx0XHRpZiAoSVNfRVJSKHpsZGV2KSlcbiAgMTg6XHRcdFx0cmV0dXJuIFBUUl9FUlIoemxkZXYpO1xuICAxOTpcdFxuICAyMDpcdFx0emxkZXYtXHUwMDNlcmVnbWFwID0gZGV2bV9yZWdtYXBfaW5pdF9pMmMoY2xpZW50LCBcdTAwMjZ6bDMwNzN4X3JlZ21hcF9jb25maWcpO1xuICAyMTpcdFx0aWYgKElTX0VSUih6bGRldi1cdTAwM2VyZWdtYXApKVxuICAyMjpcdFx0XHRyZXR1cm4gZGV2X2Vycl9wcm9iZShkZXYsIFBUUl9FUlIoemxkZXYtXHUwMDNlcmVnbWFwKSxcbiAgMjM6XHRcdFx0XHRcdCAgICAgXCYjMzQ7RmFpbGVkIHRvIGluaXRpYWxpemUgcmVnbWFwXFxuXCYjMzQ7KTtcbiAgMjQ6XHRcbiAgMjU6XHRcdHJldHVybiB6bDMwNzN4X2Rldl9wcm9iZSh6bGRldik7XG4gIDI2Olx0fVxuICAyNzpcdFxuICAyODpcdHN0YXRpYyBjb25zdCBzdHJ1Y3QgaTJjX2RldmljZV9pZCB6bDMwNzN4X2kyY19pZFtdID0ge1xuICAyOTpcdFx0eyAubmFtZSA9IFwmIzM0O3psMzA3MzFcJiMzNDsgfSxcbiAgMzA6XHRcdHsgLm5hbWUgPSBcJiMzNDt6bDMwNzMyXCYjMzQ7IH0sXG4gIDMxOlx0XHR7IC5uYW1lID0gXCYjMzQ7emwzMDczM1wmIzM0OyB9LFxuICAzMjpcdFx0eyAubmFtZSA9IFwmIzM0O3psMzA3MzRcJiMzNDsgfSxcbiAgMzM6XHRcdHsgLm5hbWUgPSBcJiMzNDt6bDMwNzM1XCYjMzQ7IH0sXG4gIDM0Olx0XHR7IC8qIHNlbnRpbmVsICovIH1cbiAgMzU6XHR9O1xuICAzNjpcdE1PRFVMRV9ERVZJQ0VfVEFCTEUoaTJjLCB6bDMwNzN4X2kyY19pZCk7XG4gIDM3Olx0XG4gIDM4Olx0c3RhdGljIGNvbnN0IHN0cnVjdCBvZl9kZXZpY2VfaWQgemwzMDczeF9pMmNfb2ZfbWF0Y2hbXSA9IHtcbiAgMzk6XHRcdHsgLmNvbXBhdGlibGUgPSBcJiMzNDttaWNyb2NoaXAsemwzMDczMVwmIzM0OyB9LFxuICA0MDpcdFx0eyAuY29tcGF0aWJsZSA9IFwmIzM0O21pY3JvY2hpcCx6bDMwNzMyXCYjMzQ7IH0sXG4gIDQxOlx0XHR7IC5jb21wYXRpYmxlID0gXCYjMzQ7bWljcm9jaGlwLHpsMzA3MzNcJiMzNDsgfSxcbiAgNDI6XHRcdHsgLmNvbXBhdGlibGUgPSBcJiMzNDttaWNyb2NoaXAsemwzMDczNFwmIzM0OyB9LFxuICA0MzpcdFx0eyAuY29tcGF0aWJsZSA9IFwmIzM0O21pY3JvY2hpcCx6bDMwNzM1XCYjMzQ7IH0sXG4gIDQ0Olx0XHR7IC8qIHNlbnRpbmVsICovIH1cbiAgNDU6XHR9O1xuICA0NjpcdE1PRFVMRV9ERVZJQ0VfVEFCTEUob2YsIHpsMzA3M3hfaTJjX29mX21hdGNoKTtcbiAgNDc6XHRcbiAgNDg6XHRzdGF0aWMgc3RydWN0IGkyY19kcml2ZXIgemwzMDczeF9pMmNfZHJpdmVyID0ge1xuICA0OTpcdFx0LmRyaXZlciA9IHtcbiAgNTA6XHRcdFx0Lm5hbWUgPSBcJiMzNDt6bDMwNzN4LWkyY1wmIzM0OyxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTEgMTc6MzQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTA0MDEKCQkJCQkJCW91dHB1dDogNDIKCQkJCQkJCXRob3VnaHRzOiA4OQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgU3l6a2FsbGVyJiMzOTtzIEkyQyBEZXZpY2UgSW5zdGFudGlhdGlvbiBDYXBhYmlsaXRpZXMqKgoKT2theSwgc28gSSYjMzk7bSB0aGlua2luZywgeWVzLCBzeXprYWxsZXIgKmNhbiogZGVmaW5pdGVseSBoYW5kbGUgdGhlIGluc3RhbnRpYXRpb24gb2YgdGhpcyBkZXZpY2UsIHRoZSBaTDMwNzNYLCB1c2luZyBuZXRsaW5rLCBzcGVjaWZpY2FsbHkgdGhyb3VnaCBgSTJDX05FV19ERVZJQ0VgIG9yIGEgc2ltaWxhciBtZXRob2QsIG9yIGV2ZW4gdmlhIHN5c2ZzIGFuZCB0aGUgYG5ld19kZXZpY2VgIGVudHJ5LiBIYW5nIG9uLi4uIGlzbiYjMzk7dCB0aGVyZSBhbHJlYWR5IHN1cHBvcnQgZm9yIHRoYXQgaW4gc3l6a2FsbGVyIHZpYSBzeXNmcz8gVGhhdCYjMzk7cyByaWdodCwgdGhlcmUgaXMuIEV4Y2VsbGVudCEgVGhhdCBtYWtlcyBgWkwzMDczWF9JMkNgIGEgdmVyeSBzZW5zaWJsZSBjb25maWd1cmF0aW9uIHRvIGVuYWJsZS4gTm93LCBsZXQmIzM5O3MganVzdCBzaGlmdCBnZWFycyBhbmQgcXVpY2tseSB0YWtlIGEgbG9vayBhdCB0aGUgYFpMMzA3M1hfU1BJYCBjb25maWcgYW5kIHNlZSB3aGF0JiMzOTtzIHdoYXQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzExIDE3OjM0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy9kcGxsL3psMzA3M3gvS2NvbmZpZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDE3LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDIwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAgMTc6XHRjb25maWcgWkwzMDczWF9JMkNcbiAgMTg6XHRcdHRyaXN0YXRlIFwmIzM0O0kyQyBidXMgaW1wbGVtZW50YXRpb24gZm9yIE1pY3JvY2hpcCBBenVyaXRlIGRldmljZXNcJiMzNDtcbiAgMTk6XHRcdGRlcGVuZHMgb24gSTJDIFx1MDAyNlx1MDAyNiBORVRcbiAgMjA6XHRcdHNlbGVjdCBSRUdNQVBfSTJDXG4gIDIxOlx0XHRzZWxlY3QgWkwzMDczWFxuICAyMjpcdFx0aGVscFxuICAyMzpcdFx0ICBUaGlzIGlzIEkyQyBidXMgaW1wbGVtZW50YXRpb24gZm9yIE1pY3JvY2hpcCBBenVyaXRlIERQTEwvUFRQL1N5bmNFXG4gIDI0Olx0XHQgIGRldmljZXMuXG4gIDI1Olx0XG4gIDI2Olx0XHQgIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZSBtb2R1bGUgd2lsbFxuICAyNzpcdFx0ICBiZSBjYWxsZWQgemwzMDczeF9pMmMuXG4gIDI4Olx0XG4gIDI5Olx0Y29uZmlnIFpMMzA3M1hfU1BJXG4gIDMwOlx0XHR0cmlzdGF0ZSBcJiMzNDtTUEkgYnVzIGltcGxlbWVudGF0aW9uIGZvciBNaWNyb2NoaXAgQXp1cml0ZSBkZXZpY2VzXCYjMzQ7XG4gIDMxOlx0XHRkZXBlbmRzIG9uIE5FVCBcdTAwMjZcdTAwMjYgU1BJXG4gIDMyOlx0XHRzZWxlY3QgUkVHTUFQX1NQSVxuICAzMzpcdFx0c2VsZWN0IFpMMzA3M1hcbiAgMzQ6XHRcdGhlbHBcbiAgMzU6XHRcdCAgVGhpcyBpcyBTUEkgYnVzIGltcGxlbWVudGF0aW9uIGZvciBNaWNyb2NoaXAgQXp1cml0ZSBEUExML1BUUC9TeW5jRVxuICAzNjpcdFx0ICBkZXZpY2VzLlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMSAxNzozNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMTAwOAoJCQkJCQkJb3V0cHV0OiA0MgoJCQkJCQkJdGhvdWdodHM6IDIxNgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBbmFseXNpcyBvZiBEUExMIE5ldGxpbmsgSW50ZXJmYWNlIFJlYWNoYWJpbGl0eSoqCgpPa2F5LCBoZXJlJiMzOTtzIGhvdyBJJiMzOTttIHRoaW5raW5nIHRocm91Z2ggdGhpcy4gRW5hYmxpbmcgYm90aCBgWkwzMDczWF9JMkNgIGFuZCBgWkwzMDczWF9TUElgIGVmZmVjdGl2ZWx5IHRyaWdnZXJzIHRoZSBgWkwzMDczWGAgc2VsZWN0aW9uLCB3aGljaCBpbiB0dXJuIG1lYW5zIHRoZSBgRFBMTGAgc3Vic3lzdGVtIGdldHMgYWN0aXZhdGVkLiAgTXkgcHJpbWFyeSBjb25jZXJuIGlzIG1ha2luZyB0aGUgRFBMTCBuZXRsaW5rIGludGVyZmFjZSBhY2Nlc3NpYmxlIGFuZCwgY3J1Y2lhbGx5LCB0ZXN0YWJsZSwgZXNwZWNpYWxseSBnaXZlbiB0aGUgbGlrZWxpaG9vZCBvZiBTeXprYWxsZXIgdGFyZ2V0aW5nIGl0LgoKTm93LCBsZXQmIzM5O3MgZHJpbGwgZG93bi4gSSYjMzk7bSBmb2N1c2luZyBvbiB3aGV0aGVyIGBkcGxsX21zZ19hZGRfcGluX3JlZl9zeW5jYCBpcyByZWFjaGFibGUuICBJIHNlZSB0aGF0IGl0JiMzOTtzIGNhbGxlZCBieSBgZHBsbF9jbWRfcGluX2dldF9vbmVgLCB3aGljaCBpcyBpdHNlbGYgY2FsbGVkIGJ5IGBkcGxsX25sX3Bpbl9nZXRfZG9pdGAgYW5kIGBkcGxsX25sX3Bpbl9nZXRfZHVtcGl0YC4gIFRob3NlIGZ1bmN0aW9ucyBhcmUsIG9mIGNvdXJzZSwgdGhlIG5ldGxpbmsgaGFuZGxlcnMgZm9yIHRoZSBgRFBMTF9DTURfUElOX0dFVGAgY29tbWFuZC4gR2l2ZW4gU3l6a2FsbGVyJiMzOTtzIGFnZ3Jlc3NpdmUgZnV6emluZyBvZiBuZXRsaW5rLCBteSBleHBlY3RhdGlvbiBpcyB0aGF0IHRoaXMgY29kZSB3aWxsICpkZWZpbml0ZWx5KiBiZSBoaXQgaWYgdGhlIERQTEwgc3Vic3lzdGVtIGlzIGFjdGl2ZSBhbmQgYSBkZXZpY2UgaXMgcmVnaXN0ZXJlZC4gIFRoaXMgaXMgYmFzZWQgb24gdGhlIG5hdHVyZSBvZiB0aGUgZnV6emVyLgoKSSYjMzk7bSBtYWtpbmcgYSBtZW50YWwgbm90ZSB0byB2ZXJpZnkgdGhhdCBgZHBsbF9tc2dfYWRkX3Bpbl9yZWZfc3luY2AgaXMgaW5kZWVkIHByZXNlbnQgaW4gYGRyaXZlcnMvZHBsbC9kcGxsX25ldGxpbmsuY2AsIHdoaWNoIEkmIzM5O2xsIGJlIGNvbmZpcm1pbmcgc2hvcnRseS4gVGhpcyBpcyB0byB2ZXJpZnkgdGhlIGFzc3VtcHRpb25zLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMSAxNzozNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvZHBsbC9kcGxsX25ldGxpbmsuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDU1MSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAzMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgNTUxOlx0c3RhdGljIGludFxuIDU1MjpcdGRwbGxfbXNnX2FkZF9waW5fcmVmX3N5bmMoc3RydWN0IHNrX2J1ZmYgKm1zZywgc3RydWN0IGRwbGxfcGluICpwaW4sXG4gNTUzOlx0XHRcdFx0ICBzdHJ1Y3QgZHBsbF9waW5fcmVmICpyZWYsXG4gNTU0Olx0XHRcdFx0ICBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spXG4gNTU1Olx0e1xuIDU1NjpcdFx0Y29uc3Qgc3RydWN0IGRwbGxfcGluX29wcyAqb3BzID0gZHBsbF9waW5fb3BzKHJlZik7XG4gNTU3Olx0XHRzdHJ1Y3QgZHBsbF9kZXZpY2UgKmRwbGwgPSByZWYtXHUwMDNlZHBsbDtcbiA1NTg6XHRcdHZvaWQgKnBpbl9wcml2LCAqcmVmX3N5bmNfcGluX3ByaXY7XG4gNTU5Olx0XHRzdHJ1Y3QgZHBsbF9waW4gKnJlZl9zeW5jX3BpbjtcbiA1NjA6XHRcdGVudW0gZHBsbF9waW5fc3RhdGUgc3RhdGU7XG4gNTYxOlx0XHRzdHJ1Y3QgbmxhdHRyICpuZXN0O1xuIDU2MjpcdFx0dW5zaWduZWQgbG9uZyBpbmRleDtcbiA1NjM6XHRcdGludCByZXQ7XG4gNTY0Olx0XG4gNTY1Olx0XHRwaW5fcHJpdiA9IGRwbGxfcGluX29uX2RwbGxfcHJpdihkcGxsLCBwaW4pO1xuIDU2NjpcdFx0eGFfZm9yX2VhY2goXHUwMDI2cGluLVx1MDAzZXJlZl9zeW5jX3BpbnMsIGluZGV4LCByZWZfc3luY19waW4pIHtcbiA1Njc6XHRcdFx0aWYgKCFkcGxsX3Bpbl9hdmFpbGFibGUocmVmX3N5bmNfcGluKSlcbiA1Njg6XHRcdFx0XHRjb250aW51ZTtcbiA1Njk6XHRcdFx0cmVmX3N5bmNfcGluX3ByaXYgPSBkcGxsX3Bpbl9vbl9kcGxsX3ByaXYoZHBsbCwgcmVmX3N5bmNfcGluKTtcbiA1NzA6XHRcdFx0LyogUGluIG1heSBoYXZlIGJlZW4gdW5yZWdpc3RlcmVkIGZyb20gdGhpcyBkcGxsIGFscmVhZHkgKi9cbiA1NzE6XHRcdFx0aWYgKCFyZWZfc3luY19waW5fcHJpdilcbiA1NzI6XHRcdFx0XHRjb250aW51ZTtcbiA1NzM6XHRcdFx0aWYgKFdBUk5fT04oIW9wcy1cdTAwM2VyZWZfc3luY19nZXQpKVxuIDU3NDpcdFx0XHRcdHJldHVybiAtRU9QTk9UU1VQUDtcbiA1NzU6XHRcdFx0cmV0ID0gb3BzLVx1MDAzZXJlZl9zeW5jX2dldChwaW4sIHBpbl9wcml2LCByZWZfc3luY19waW4sXG4gNTc2Olx0XHRcdFx0XHRcdHJlZl9zeW5jX3Bpbl9wcml2LCBcdTAwMjZzdGF0ZSwgZXh0YWNrKTtcbiA1Nzc6XHRcdFx0aWYgKHJldClcbiA1Nzg6XHRcdFx0XHRyZXR1cm4gcmV0O1xuIDU3OTpcdFx0XHRuZXN0ID0gbmxhX25lc3Rfc3RhcnQobXNnLCBEUExMX0FfUElOX1JFRkVSRU5DRV9TWU5DKTtcbiA1ODA6XHRcdFx0aWYgKCFuZXN0KVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMSAxNzozNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMjE4NgoJCQkJCQkJb3V0cHV0OiA0MgoJCQkJCQkJdGhvdWdodHM6IDM5MAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgYSBLZXJuZWwgUGF0Y2g6IEEgVGhvdWdodCBQcm9jZXNzKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIGtlcm5lbCBwYXRjaC4gSXQgc2VlbXMgbGlrZSBpdCYjMzk7cyBhZGRyZXNzaW5nIGEgcG90ZW50aWFsIHZ1bG5lcmFiaWxpdHkuIFNwZWNpZmljYWxseSwgaXQmIzM5O3MgYWRkaW5nIGEgY2hlY2s6CgpgYGBjCgkJLyogUGluIG1heSBoYXZlIGJlZW4gdW5yZWdpc3RlcmVkIGZyb20gdGhpcyBkcGxsIGFscmVhZHkgKi8KCQlpZiAoIXJlZl9zeW5jX3Bpbl9wcml2KQoJCQljb250aW51ZTsKYGBgCgpUaGlzIGlzIHNtYXJ0LiBJdCBwcmV2ZW50cyBhIE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZSwgb3Igc29tZXRoaW5nIHNpbWlsYXIsIGxhdGVyIG9uIHdoZW4gdGhlIGNvZGUgdXNlcyBgcmVmX3N5bmNfcGluX3ByaXZgLiBHb29kIGNhdGNoISBUaGF0IHZhcmlhYmxlIGdldHMgcGFzc2VkIHRvIGBvcHMtJmd0O3JlZl9zeW5jX2dldGAsIGFuZCBpZiBpdCB3ZXJlIE5VTEwsIHRoZSBkcml2ZXIgY291bGQgZGVmaW5pdGVseSBjcmFzaC4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlLCBkZWZpbml0ZWx5IHNvbWV0aGluZyB3b3J0aCBmdXp6aW5nIHRvIG1ha2Ugc3VyZSBpdCYjMzk7cyByb2J1c3QuCgpOb3csIGxldCBtZSBzZWUgaWYgdGhlcmUgYXJlIGFueSBvdGhlciBjb25maWd1cmF0aW9uIG9wdGlvbnMgSSBzaG91bGQgZW5hYmxlIHdpdGggdGhpcyBwYXRjaC4gSXQgbG9va3MgbGlrZSBgRFBMTGAgaXMgc2VsZWN0ZWQgYnkgc2V2ZXJhbCBvdGhlciBjb25maWd1cmF0aW9ucyBsaWtlIGBaTDMwNzNYX0kyQ2AsIGBaTDMwNzNYX1NQSWAsIGBNTFg1X0RQTExgLCBgUFRQXzE1ODhfQ0xPQ0tfT0NQYCwgYW5kIGBJQ0VgLiBUaGUgYFpMMzA3M1hfSTJDYCBhbmQgYFpMMzA3M1hfU1BJYCBjb25maWd1cmF0aW9ucyBhcmUgaWRlYWwgZm9yIHRlc3RpbmcgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGJlY2F1c2UgdGhleSBjYW4gdXNlIEkyQy9TUEkgbW9jayBpbnRlcmZhY2VzLiBJJiMzOTtsbCBhZGQgdGhvc2UgdG8gdGhlIGJ1aWxkLiBJJiMzOTtsbCBhbHNvIGFkZCBgRFBMTGAgc2luY2UgaXQmIzM5O3MgYSBib29sZWFuIHZhbHVlLiBXYWl0LCB0aGUgYHNldC1yZXN1bHRzYCBkb2N1bWVudGF0aW9uIHNheXMgbm90IHRvIGluY2x1ZGUgdGhlICYjMzQ7Q09ORklHXyYjMzQ7IHByZWZpeCwgc28gSSYjMzk7bGwganVzdCB1c2UgdGhlIGJhc2UgbmFtZXM6IGBaTDMwNzNYX0kyQ2AsIGBaTDMwNzNYX1NQSWAsIGFuZCBgRFBMTGAuCgpOZXh0LCBJIG5lZWQgdG8gY2hlY2sgdGhlIGNvZGUgdGhhdCYjMzk7cyByZWxhdGVkIHRvIHRoaXMgY2hlY2suIEkmIzM5O2xsIGxvb2sgYXQgYGRwbGxfbXNnX2FkZF9waW5fcmVmX3N5bmNgIGluIGBkcml2ZXJzL2RwbGwvZHBsbF9uZXRsaW5rLmNgLiBJdCYjMzk7cyBhIHN0YXRpYyBmdW5jdGlvbiwgYW5kIGl0JiMzOTtzIGNhbGxlZCBieSBgZHBsbF9jbWRfcGluX2dldF9vbmVgLiBPa2F5LCBsZXQmIzM5O3MgdGFrZSBhIGxvb2sgYXQgdGhhdCBmdW5jdGlvbiBuZXh0IHRvIHNlZSB0aGUgY29udGV4dC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTEgMTc6MzQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL2RwbGwvZHBsbF9uZXRsaW5rLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA2OTQsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMzAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDY5NDpcdHN0YXRpYyBpbnRcbiA2OTU6XHRkcGxsX2NtZF9waW5fZ2V0X29uZShzdHJ1Y3Qgc2tfYnVmZiAqbXNnLCBzdHJ1Y3QgZHBsbF9waW4gKnBpbixcbiA2OTY6XHRcdFx0ICAgICBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spXG4gNjk3Olx0e1xuIDY5ODpcdFx0Y29uc3Qgc3RydWN0IGRwbGxfcGluX3Byb3BlcnRpZXMgKnByb3AgPSBcdTAwMjZwaW4tXHUwMDNlcHJvcDtcbiA2OTk6XHRcdHN0cnVjdCBkcGxsX3Bpbl9yZWYgKnJlZjtcbiA3MDA6XHRcdGludCByZXQ7XG4gNzAxOlx0XG4gNzAyOlx0XHRyZWYgPSBkcGxsX3hhX3JlZl9kcGxsX2ZpcnN0KFx1MDAyNnBpbi1cdTAwM2VkcGxsX3JlZnMpO1xuIDcwMzpcdFx0QVNTRVJUX05PVF9OVUxMKHJlZik7XG4gNzA0Olx0XG4gNzA1Olx0XHRyZXQgPSBkcGxsX21zZ19hZGRfcGluX2hhbmRsZShtc2csIHBpbik7XG4gNzA2Olx0XHRpZiAocmV0KVxuIDcwNzpcdFx0XHRyZXR1cm4gcmV0O1xuIDcwODpcdFx0aWYgKG5sYV9wdXRfc3RyaW5nKG1zZywgRFBMTF9BX1BJTl9NT0RVTEVfTkFNRSxcbiA3MDk6XHRcdFx0XHQgICBwaW4tXHUwMDNlbW9kdWxlX25hbWUpKVxuIDcxMDpcdFx0XHRyZXR1cm4gLUVNU0dTSVpFO1xuIDcxMTpcdFx0aWYgKG5sYV9wdXRfNjRiaXQobXNnLCBEUExMX0FfUElOX0NMT0NLX0lELCBzaXplb2YocGluLVx1MDAzZWNsb2NrX2lkKSxcbiA3MTI6XHRcdFx0XHQgIFx1MDAyNnBpbi1cdTAwM2VjbG9ja19pZCwgRFBMTF9BX1BJTl9QQUQpKVxuIDcxMzpcdFx0XHRyZXR1cm4gLUVNU0dTSVpFO1xuIDcxNDpcdFx0aWYgKHByb3AtXHUwMDNlYm9hcmRfbGFiZWwgXHUwMDI2XHUwMDI2XG4gNzE1Olx0XHQgICAgbmxhX3B1dF9zdHJpbmcobXNnLCBEUExMX0FfUElOX0JPQVJEX0xBQkVMLCBwcm9wLVx1MDAzZWJvYXJkX2xhYmVsKSlcbiA3MTY6XHRcdFx0cmV0dXJuIC1FTVNHU0laRTtcbiA3MTc6XHRcdGlmIChwcm9wLVx1MDAzZXBhbmVsX2xhYmVsIFx1MDAyNlx1MDAyNlxuIDcxODpcdFx0ICAgIG5sYV9wdXRfc3RyaW5nKG1zZywgRFBMTF9BX1BJTl9QQU5FTF9MQUJFTCwgcHJvcC1cdTAwM2VwYW5lbF9sYWJlbCkpXG4gNzE5Olx0XHRcdHJldHVybiAtRU1TR1NJWkU7XG4gNzIwOlx0XHRpZiAocHJvcC1cdTAwM2VwYWNrYWdlX2xhYmVsIFx1MDAyNlx1MDAyNlxuIDcyMTpcdFx0ICAgIG5sYV9wdXRfc3RyaW5nKG1zZywgRFBMTF9BX1BJTl9QQUNLQUdFX0xBQkVMLFxuIDcyMjpcdFx0XHRcdCAgIHByb3AtXHUwMDNlcGFja2FnZV9sYWJlbCkpXG4gNzIzOlx0XHRcdHJldHVybiAtRU1TR1NJWkU7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzExIDE3OjM0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEzNjUzCgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogMzA1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBEUExMIE5ldGxpbmsgSGFuZGxlciBJbnRlcmFjdGlvbnMqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgYGRwbGxfbmxfcGluX2dldF9kb2l0YCBmdW5jdGlvbiDigJMgdGhhdCYjMzk7cyBvdXIgbmV0bGluayBoYW5kbGVyLCB0aGUgZW50cnkgcG9pbnQgZm9yIHRoaXMgcGFydGljdWxhciBvcGVyYXRpb24uIE15IGZpcnN0IHRob3VnaHQgaXMgdG8gbWFrZSBzdXJlIHdlJiMzOTtyZSB0cmFja2luZyB0aGlzIHByb3Blcmx5LCBzbyBJJiMzOTtsbCBhZGQgYGRwbGxfbmxfcGluX2dldF9kb2l0YCBhbmQgaXRzIGNvbXBhbmlvbiBgZHBsbF9ubF9waW5fZ2V0X2R1bXBpdGAgdG8gYEZvY3VzU3ltYm9sc2AuIFdoaWxlIEkmIzM5O20gYXQgaXQsIEkmIzM5O2xsIGluY2x1ZGUgYGRwbGxfbXNnX2FkZF9waW5fcmVmX3N5bmNgIGFuZCBgZHBsbF9jbWRfcGluX2dldF9vbmVgIGFzIHdlbGwsIHNpbmNlIHRoZXkgc2VlbSByZWxhdGVkLgoKTm93LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0JiMzOTtzICp0cmlnZ2VyaW5nKiB0aGlzIG5ldGxpbmsgaW50ZXJhY3Rpb24uIEkgbmVlZCB0byBrbm93IGlmIHRoZXJlIGFyZSBvdGhlciBEUExMIG5ldGxpbmsgaGFuZGxlcnMgaW52b2x2ZWQgaW4gdGhpcyBzYW1lIGZsb3cuIExvb2tpbmcgYSBsaXR0bGUgZGVlcGVyLCBJIHNlZSB0aGF0IGBkcGxsX3Bpbl9ldmVudF9zZW5kYCBjYWxscyBgZHBsbF9jbWRfcGluX2dldF9vbmVgIGFuZCB0aGF0JiMzOTtzIHRyaWdnZXJlZCBieSBhIHBpbiBldmVudCwgd2hpY2ggaXMgYW4gaW1wb3J0YW50IGNsdWUuCgpBbHJpZ2h0LCBsZXQmIzM5O3MgY29uZmlybSB0aGUgY3VycmVudCBlbnRyaWVzIGluIGBGb2N1c1N5bWJvbHNgLiBTbyBmYXIsIHNvIGdvb2Q6CiogICBgZHBsbF9tc2dfYWRkX3Bpbl9yZWZfc3luY2AKKiAgIGBkcGxsX2NtZF9waW5fZ2V0X29uZWAKKiAgIGBkcGxsX25sX3Bpbl9nZXRfZG9pdGAKKiAgIGBkcGxsX25sX3Bpbl9nZXRfZHVtcGl0YAoKTmV4dCwgSSBuZWVkIHRvIG1ha2Ugc3VyZSB3ZSYjMzk7cmUgb24gdGhlIHJpZ2h0IHRyYWNrIHdpdGggdGhlIGNvbmZpZ3VyYXRpb24uIEkgd2FudCB0byB2ZXJpZnkgdGhhdCBgWkwzMDczWF9JMkNgIGFuZCBgWkwzMDczWF9TUElgIGFyZSBpbmRlZWQgdGhlIGNvcnJlY3QgY29uZmlncyBmb3IgdGhpcy4gQWgsIHllcywgdGhleSBzZWxlY3QgYFpMMzA3M1hgLCB3aGljaCB0aGVuIHNlbGVjdHMgYERQTExgIOKAkyB0aGF0IG1ha2VzIHNlbnNlLgoKSnVzdCB0byBiZSBhYnNvbHV0ZWx5IHN1cmUsIEkmIzM5O20gZ29pbmcgdG8gcXVpY2tseSBjaGVjayBgZHJpdmVycy9kcGxsL0tjb25maWdgIGFnYWluIHRvIG1ha2Ugc3VyZSB0aGVyZSBpc24mIzM5O3QgYW5vdGhlciB2aXJ0dWFsIERQTEwgZHJpdmVyIHRoYXQgSSYjMzk7dmUgbWlzc2VkLiBJIG5lZWQgdG8gYmUgY29tcGxldGVseSB0aG9yb3VnaCBoZXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMSAxNzozNTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvZHBsbC9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAzMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgICAxOlx0IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XG4gICAyOlx0I1xuICAgMzpcdCMgR2VuZXJpYyBEUExMIGRyaXZlcnMgY29uZmlndXJhdGlvblxuICAgNDpcdCNcbiAgIDU6XHRcbiAgIDY6XHRtZW51IFwmIzM0O0RQTEwgZGV2aWNlIHN1cHBvcnRcJiMzNDtcbiAgIDc6XHRcbiAgIDg6XHRjb25maWcgRFBMTFxuICAgOTpcdFx0Ym9vbFxuICAxMDpcdFxuICAxMTpcdGNvbmZpZyBEUExMX1JFRkNOVF9UUkFDS0VSXG4gIDEyOlx0XHRib29sIFwmIzM0O0RQTEwgcmVmZXJlbmNlIGNvdW50IHRyYWNraW5nXCYjMzQ7XG4gIDEzOlx0XHRkZXBlbmRzIG9uIERFQlVHX0tFUk5FTCBcdTAwMjZcdTAwMjYgU1RBQ0tUUkFDRV9TVVBQT1JUIFx1MDAyNlx1MDAyNiBEUExMXG4gIDE0Olx0XHRzZWxlY3QgUkVGX1RSQUNLRVJcbiAgMTU6XHRcdGhlbHBcbiAgMTY6XHRcdCAgRW5hYmxlIHJlZmVyZW5jZSBjb3VudCB0cmFja2luZyBmb3IgRFBMTCBkZXZpY2VzIGFuZCBwaW5zLlxuICAxNzpcdFx0ICBUaGlzIGhlbHBzIGRlYnVnZ2luZyByZWZlcmVuY2UgbGVha3MgYW5kIHVzZS1hZnRlci1mcmVlIGJ1Z3NcbiAgMTg6XHRcdCAgYnkgcmVjb3JkaW5nIHN0YWNrIHRyYWNlcyBmb3IgZWFjaCBnZXQvcHV0IG9wZXJhdGlvbi5cbiAgMTk6XHRcbiAgMjA6XHRcdCAgVGhlIHRyYWNraW5nIGluZm9ybWF0aW9uIGlzIGV4cG9zZWQgdmlhIGRlYnVnZnMgYXQ6XG4gIDIxOlx0XHQgICAgL3N5cy9rZXJuZWwvZGVidWcvcmVmX3RyYWNrZXIvZHBsbF9kZXZpY2VfKlxuICAyMjpcdFx0ICAgIC9zeXMva2VybmVsL2RlYnVnL3JlZl90cmFja2VyL2RwbGxfcGluXypcbiAgMjM6XHRcbiAgMjQ6XHRcdCAgSWYgdW5zdXJlLCBzYXkgTi5cbiAgMjU6XHRcbiAgMjY6XHRzb3VyY2UgXCYjMzQ7ZHJpdmVycy9kcGxsL3psMzA3M3gvS2NvbmZpZ1wmIzM0O1xuICAyNzpcdFxuICAyODpcdGVuZG1lbnVcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTEgMTc6MzU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTQ4MDgKCQkJCQkJCW91dHB1dDogMjM5CgkJCQkJCQl0aG91Z2h0czogMzkzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFuYWx5c2lzIG9mIHRoZSBEUExMIERyaXZlciBQYXRjaCoqCgpPa2F5LCBzbyBJIHNlZSB0aGlzIHBhdGNoIGlzIGFkZHJlc3NpbmcgYSBwb3RlbnRpYWwgaXNzdWUgd2l0aGluIHRoZSBgZHJpdmVycy9kcGxsYCBkaXJlY3RvcnksIHNwZWNpZmljYWxseSBjb25jZXJuaW5nIHRoZSBgWkwzMDczWGAgZHJpdmVyLiBJJiMzOTttIG5vdGluZyB0aGF0IHRoZSBleGlzdGluZyBkcml2ZXIgbGlzdCBpbmRpY2F0ZXMgYFpMMzA3M1hgIGlzIHRoZSBvbmx5IG9uZSBpbiB0aGF0IGxvY2F0aW9uLiBNeSBpbml0aWFsIGFjdGlvbiBpcyB0byBhZGQgYFpMMzA3M1hfSTJDYCBhbmQgYFpMMzA3M1hfU1BJYCB0byB0aGUgYEVuYWJsZUNvbmZpZ3NgIHNpbmNlIHRob3NlIGNvbmZpZ3VyYXRpb25zIGFyZSBjcnVjaWFsIGZvciB0aGUgcmVsZXZhbnQgSTJDIGFuZCBTUEkgaW50ZXJmYWNlcywgYW5kIHRoZXJlZm9yZSwgZXNzZW50aWFsIGZvciB0ZXN0aW5nIHRoaXMgcHJvcGVybHkuCgpOZXh0LCBJIG5lZWQgdG8gY29uZmlybSB0aGUgcmVhY2hhYmlsaXR5IG9mIGBkcGxsX21zZ19hZGRfcGluX3JlZl9zeW5jYC4gQSBxdWljayBjaGVjayBzaG93cyB0aGF0IGl0ICppcyogaW5kZWVkIGNhbGxlZCBieSBgZHBsbF9jbWRfcGluX2dldF9vbmVgLCB3aGljaCBpbiB0dXJuIGlzIGNhbGxlZCBieSBib3RoIGBkcGxsX25sX3Bpbl9nZXRfZG9pdGAgYW5kIGBkcGxsX25sX3Bpbl9nZXRfZHVtcGl0YC4gVGhhdCBjb25maXJtcyBpdCYjMzk7cyB3aXRoaW4gdGhlIGNvbW1hbmQgcGF0aCB3ZSYjMzk7cmUgY29uY2VybmVkIHdpdGggaGVyZS4gSSBzZWUgdGhhdCB0aGUgcGF0Y2gmIzM5O3MgcHVycG9zZSBpcyB0byBmaXggYSBidWcgd2hlcmUgYHJlZl9zeW5jX3Bpbl9wcml2YCBjb3VsZCBiZSBOVUxMLCB3aGljaCBvZiBjb3Vyc2Ugd291bGQgbGVhZCB0byBhIGNyYXNoLiBUaGlzIGxvb2tzIGxpa2UgYSBmdW5jdGlvbmFsIGNoYW5nZSDigJMgYSBuZWNlc3NhcnkgY29ycmVjdGlvbiB0byBtYWludGFpbiBzdGFiaWxpdHkgd2hlbiBoYW5kbGluZyBEUExMIHBpbiByZWdpc3RyYXRpb24vZGVyZWdpc3RyYXRpb24gYW5kIG5ldGxpbmsgY29tbWFuZHMuCgpOb3csIGxldCYjMzk7cyBwcmVwYXJlIHRoZSBmdXp6aW5nIHJlc3BvbnNlLiBJdCYjMzk7cyBkZWZpbml0ZWx5IGBXb3J0aEZ1enppbmdgLCBiZWNhdXNlIHdlJiMzOTt2ZSBpZGVudGlmaWVkIGEgdnVsbmVyYWJpbGl0eS4KCk15IGBGb2N1c1N5bWJvbHNgIHdpbGwgYmU6CgoqICAgYGRwbGxfbXNnX2FkZF9waW5fcmVmX3N5bmNgICh0aGUgdGFyZ2V0IG9mIHRoZSBwYXRjaCkKKiAgIGBkcGxsX2NtZF9waW5fZ2V0X29uZWAKKiAgIGBkcGxsX25sX3Bpbl9nZXRfZG9pdGAKKiAgIGBkcGxsX25sX3Bpbl9nZXRfZHVtcGl0YCAoYXMgdGhleSBhcmUgdGhlIGNhbGxpbmcgZnVuY3Rpb25zKQoKQW5kIHRoZSBuZWNlc3NhcnkgYEVuYWJsZUNvbmZpZ3NgIHdpbGwgYmU6CgoqICAgYFpMMzA3M1hfSTJDYAoqICAgYFpMMzA3M1hfU1BJYAoKRmluYWxseSwgdGhpcyBwYXRjaCBpcyBpbnRyb2R1Y2luZyBhIE5VTEwgY2hlY2sgd2l0aGluIGBkcGxsX21zZ19hZGRfcGluX3JlZl9zeW5jYC4gVGhpcyBzYWZlZ3VhcmQgcHJldmVudHMgYSBwb3RlbnRpYWwgTlVMTCBwb2ludGVyIGRlcmVmZXJlbmNlIG9yIGludmFsaWQgbWVtb3J5IGFjY2VzcyBzY2VuYXJpbyB3aGVuIGEgRFBMTCBwaW4gaGFzIGJlZW4gdW5yZWdpc3RlcmVkIGZyb20gdGhlIHN5c3RlbS4gVGhpcyBkaXJlY3RseSBpbXBhY3RzIHRoZSBEUExMIG5ldGxpbmsgaW50ZXJmYWNlLCBhbmQgaXRzIHJlbGV2YW50IGNvbW1hbmRzIHdoaWNoIGFyZSBkaXJlY3RseSBhY2Nlc3NpYmxlIGZyb20gdXNlciBzcGFjZS4gRnV6emluZyB0aGlzIHdpbGwgcmVxdWlyZSBlbmFibGluZyBEUExMIGRyaXZlcnMsIGxpa2UgdGhlIE1pY3JvY2hpcCBBenVyaXRlIEkyQy9TUEkgZHJpdmVycywgd2hpY2ggYXJlIGVhc2lseSBpbnN0YW50aWF0ZWQgaW4gdmlydHVhbCBlbnZpcm9ubWVudHMgZm9yIHRlc3RpbmcuIEkgYW0gcmVhZHkgdG8gbW92ZSBmb3J3YXJkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMSAxNzozNTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7WkwzMDczWF9JMkMmIzM0OywKICAgICYjMzQ7WkwzMDczWF9TUEkmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtkcGxsX21zZ19hZGRfcGluX3JlZl9zeW5jJiMzNDssCiAgICAmIzM0O2RwbGxfY21kX3Bpbl9nZXRfb25lJiMzNDssCiAgICAmIzM0O2RwbGxfbmxfcGluX2dldF9kb2l0JiMzNDssCiAgICAmIzM0O2RwbGxfbmxfcGluX2dldF9kdW1waXQmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcyBhIE5VTEwgY2hlY2sgZm9yIGByZWZfc3luY19waW5fcHJpdmAgaW4gYGRwbGxfbXNnX2FkZF9waW5fcmVmX3N5bmNgIHRvIHByZXZlbnQgYSBwb3RlbnRpYWwgTlVMTCBwb2ludGVyIGRlcmVmZXJlbmNlIG9yIGludmFsaWQgbWVtb3J5IGFjY2VzcyB3aGVuIHRoZSBwaW4gaGFzIGJlZW4gdW5yZWdpc3RlcmVkIGZyb20gdGhlIERQTEwuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgRFBMTCBuZXRsaW5rIGludGVyZmFjZSwgd2hpY2ggaXMgcmVhY2hhYmxlIGZyb20gdXNlciBzcGFjZSB2aWEgbmV0bGluayBjb21tYW5kcyAoZS5nLiwgYERQTExfQ01EX1BJTl9HRVRgKS4gRnV6emluZyB0aGlzIHJlcXVpcmVzIGVuYWJsaW5nIERQTEwgZHJpdmVycywgc3VjaCBhcyB0aGUgTWljcm9jaGlwIEF6dXJpdGUgSTJDL1NQSSBkcml2ZXJzLCB3aGljaCBjYW4gYmUgaW5zdGFudGlhdGVkIGluIHZpcnR1YWwgZW52aXJvbm1lbnRzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtaTDMwNzNYX0kyQyYjMzQ7LAogICAgJiMzNDtaTDMwNzNYX1NQSSYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2RwbGxfbXNnX2FkZF9waW5fcmVmX3N5bmMmIzM0OywKICAgICYjMzQ7ZHBsbF9jbWRfcGluX2dldF9vbmUmIzM0OywKICAgICYjMzQ7ZHBsbF9ubF9waW5fZ2V0X2RvaXQmIzM0OywKICAgICYjMzQ7ZHBsbF9ubF9waW5fZ2V0X2R1bXBpdCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRzIGEgTlVMTCBjaGVjayBmb3IgYHJlZl9zeW5jX3Bpbl9wcml2YCBpbiBgZHBsbF9tc2dfYWRkX3Bpbl9yZWZfc3luY2AgdG8gcHJldmVudCBhIHBvdGVudGlhbCBOVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2Ugb3IgaW52YWxpZCBtZW1vcnkgYWNjZXNzIHdoZW4gdGhlIHBpbiBoYXMgYmVlbiB1bnJlZ2lzdGVyZWQgZnJvbSB0aGUgRFBMTC4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBEUExMIG5ldGxpbmsgaW50ZXJmYWNlLCB3aGljaCBpcyByZWFjaGFibGUgZnJvbSB1c2VyIHNwYWNlIHZpYSBuZXRsaW5rIGNvbW1hbmRzIChlLmcuLCBgRFBMTF9DTURfUElOX0dFVGApLiBGdXp6aW5nIHRoaXMgcmVxdWlyZXMgZW5hYmxpbmcgRFBMTCBkcml2ZXJzLCBzdWNoIGFzIHRoZSBNaWNyb2NoaXAgQXp1cml0ZSBJMkMvU1BJIGRyaXZlcnMsIHdoaWNoIGNhbiBiZSBpbnN0YW50aWF0ZWQgaW4gdmlydHVhbCBlbnZpcm9ubWVudHMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wNy0xMVQxNzozMzozNC45MTI5NTMxMzhaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo5NTE4MTc1NDQ0NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJaTDMwNzNYX0kyQ1wiLFxuICAgIFwiWkwzMDczWF9TUElcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJkcGxsX21zZ19hZGRfcGluX3JlZl9zeW5jXCIsXG4gICAgXCJkcGxsX2NtZF9waW5fZ2V0X29uZVwiLFxuICAgIFwiZHBsbF9ubF9waW5fZ2V0X2RvaXRcIixcbiAgICBcImRwbGxfbmxfcGluX2dldF9kdW1waXRcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRzIGEgTlVMTCBjaGVjayBmb3IgYHJlZl9zeW5jX3Bpbl9wcml2YCBpbiBgZHBsbF9tc2dfYWRkX3Bpbl9yZWZfc3luY2AgdG8gcHJldmVudCBhIHBvdGVudGlhbCBOVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2Ugb3IgaW52YWxpZCBtZW1vcnkgYWNjZXNzIHdoZW4gdGhlIHBpbiBoYXMgYmVlbiB1bnJlZ2lzdGVyZWQgZnJvbSB0aGUgRFBMTC4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBEUExMIG5ldGxpbmsgaW50ZXJmYWNlLCB3aGljaCBpcyByZWFjaGFibGUgZnJvbSB1c2VyIHNwYWNlIHZpYSBuZXRsaW5rIGNvbW1hbmRzIChlLmcuLCBgRFBMTF9DTURfUElOX0dFVGApLiBGdXp6aW5nIHRoaXMgcmVxdWlyZXMgZW5hYmxpbmcgRFBMTCBkcml2ZXJzLCBzdWNoIGFzIHRoZSBNaWNyb2NoaXAgQXp1cml0ZSBJMkMvU1BJIGRyaXZlcnMsIHdoaWNoIGNhbiBiZSBpbnN0YW50aWF0ZWQgaW4gdmlydHVhbCBlbnZpcm9ubWVudHMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTExVDE3OjMzOjM0LjkxMjk1OTA4OVoiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjQ5NTcwMjAxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgOGUxYTQwZjRjMzg2ODQxMWEwN2M2YWJiMGZmMjg2OWM4Y2MyZWMxNlxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgU2F0IEp1bCAxMSAxNzozMzozMiAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL2RwbGwvZHBsbF9uZXRsaW5rLmMgYi9kcml2ZXJzL2RwbGwvZHBsbF9uZXRsaW5rLmNcXG5pbmRleCBiZjcyOWNkZTc5NmE3Ny4uNTcwMzY2NzU5M2E3YzIgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9kcGxsL2RwbGxfbmV0bGluay5jXFxuKysrIGIvZHJpdmVycy9kcGxsL2RwbGxfbmV0bGluay5jXFxuQEAgLTU2Nyw2ICs1NjcsOSBAQCBkcGxsX21zZ19hZGRfcGluX3JlZl9zeW5jKHN0cnVjdCBza19idWZmICptc2csIHN0cnVjdCBkcGxsX3BpbiAqcGluLFxcbiBcXHRcXHRpZiAoIWRwbGxfcGluX2F2YWlsYWJsZShyZWZfc3luY19waW4pKVxcbiBcXHRcXHRcXHRjb250aW51ZTtcXG4gXFx0XFx0cmVmX3N5bmNfcGluX3ByaXYgPSBkcGxsX3Bpbl9vbl9kcGxsX3ByaXYoZHBsbCwgcmVmX3N5bmNfcGluKTtcXG4rXFx0XFx0LyogUGluIG1heSBoYXZlIGJlZW4gdW5yZWdpc3RlcmVkIGZyb20gdGhpcyBkcGxsIGFscmVhZHkgKi9cXG4rXFx0XFx0aWYgKCFyZWZfc3luY19waW5fcHJpdilcXG4rXFx0XFx0XFx0Y29udGludWU7XFxuIFxcdFxcdGlmIChXQVJOX09OKCFvcHMtXFx1MDAzZXJlZl9zeW5jX2dldCkpXFxuIFxcdFxcdFxcdHJldHVybiAtRU9QTk9UU1VQUDtcXG4gXFx0XFx0cmV0ID0gb3BzLVxcdTAwM2VyZWZfc3luY19nZXQocGluLCBwaW5fcHJpdiwgcmVmX3N5bmNfcGluLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xMVQxNzozMzozNS41NjM1MDgxOTlaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjk0NTMxMTg0NjI0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIlpMMzA3M1hfSTJDXCIsXG4gICAgXCJaTDMwNzNYX1NQSVwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImRwbGxfbXNnX2FkZF9waW5fcmVmX3N5bmNcIixcbiAgICBcImRwbGxfY21kX3Bpbl9nZXRfb25lXCIsXG4gICAgXCJkcGxsX25sX3Bpbl9nZXRfZG9pdFwiLFxuICAgIFwiZHBsbF9ubF9waW5fZ2V0X2R1bXBpdFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHMgYSBOVUxMIGNoZWNrIGZvciBgcmVmX3N5bmNfcGluX3ByaXZgIGluIGBkcGxsX21zZ19hZGRfcGluX3JlZl9zeW5jYCB0byBwcmV2ZW50IGEgcG90ZW50aWFsIE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZSBvciBpbnZhbGlkIG1lbW9yeSBhY2Nlc3Mgd2hlbiB0aGUgcGluIGhhcyBiZWVuIHVucmVnaXN0ZXJlZCBmcm9tIHRoZSBEUExMLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIERQTEwgbmV0bGluayBpbnRlcmZhY2UsIHdoaWNoIGlzIHJlYWNoYWJsZSBmcm9tIHVzZXIgc3BhY2UgdmlhIG5ldGxpbmsgY29tbWFuZHMgKGUuZy4sIGBEUExMX0NNRF9QSU5fR0VUYCkuIEZ1enppbmcgdGhpcyByZXF1aXJlcyBlbmFibGluZyBEUExMIGRyaXZlcnMsIHN1Y2ggYXMgdGhlIE1pY3JvY2hpcCBBenVyaXRlIEkyQy9TUEkgZHJpdmVycywgd2hpY2ggY2FuIGJlIGluc3RhbnRpYXRlZCBpbiB2aXJ0dWFsIGVudmlyb25tZW50cy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4yLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS5cbiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbiAgIERvIG5vdCBsaXN0IHRvbyBnZW5lcmljIGNvbmZpZ3MgKHdlIGFscmVhZHkgaGF2ZSB0aGVtIGVuYWJsZWQpLiBPbmx5IGxpc3QgdGhvc2UgdGhhdFxuICAgc3BlY2lmaWNhbGx5IGNvdmVyIHRoZSBtb2RpZmllZCBjb2RlLiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3Mgb3V0cHV0IGFycmF5LFxuICAgYW5kIERPIE5PVCBhZGQgYSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCA4ZTFhNDBmNGMzODY4NDExYTA3YzZhYmIwZmYyODY5YzhjYzJlYzE2XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFNhdCBKdWwgMTEgMTc6MzM6MzIgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9kcml2ZXJzL2RwbGwvZHBsbF9uZXRsaW5rLmMgYi9kcml2ZXJzL2RwbGwvZHBsbF9uZXRsaW5rLmNcbmluZGV4IGJmNzI5Y2RlNzk2YTc3Li41NzAzNjY3NTkzYTdjMiAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvZHBsbC9kcGxsX25ldGxpbmsuY1xuKysrIGIvZHJpdmVycy9kcGxsL2RwbGxfbmV0bGluay5jXG5AQCAtNTY3LDYgKzU2Nyw5IEBAIGRwbGxfbXNnX2FkZF9waW5fcmVmX3N5bmMoc3RydWN0IHNrX2J1ZmYgKm1zZywgc3RydWN0IGRwbGxfcGluICpwaW4sXG4gXHRcdGlmICghZHBsbF9waW5fYXZhaWxhYmxlKHJlZl9zeW5jX3BpbikpXG4gXHRcdFx0Y29udGludWU7XG4gXHRcdHJlZl9zeW5jX3Bpbl9wcml2ID0gZHBsbF9waW5fb25fZHBsbF9wcml2KGRwbGwsIHJlZl9zeW5jX3Bpbik7XG4rXHRcdC8qIFBpbiBtYXkgaGF2ZSBiZWVuIHVucmVnaXN0ZXJlZCBmcm9tIHRoaXMgZHBsbCBhbHJlYWR5ICovXG4rXHRcdGlmICghcmVmX3N5bmNfcGluX3ByaXYpXG4rXHRcdFx0Y29udGludWU7XG4gXHRcdGlmIChXQVJOX09OKCFvcHMtXHUwMDNlcmVmX3N5bmNfZ2V0KSlcbiBcdFx0XHRyZXR1cm4gLUVPUE5PVFNVUFA7XG4gXHRcdHJldCA9IG9wcy1cdTAwM2VyZWZfc3luY19nZXQocGluLCBwaW5fcHJpdiwgcmVmX3N5bmNfcGluLFxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTFUMTc6MzM6MzUuNTYzNTEwMTU5WiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDE1OTA4MTQ2MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHVuZGVyc3RhbmRpbmcsIHRoaW5raW5nIHRocm91Z2ggdGhpcyBjb2RlIGNoYW5nZSBpbiBgZHJpdmVycy9kcGxsL2RwbGxfbmV0bGluay5jYDpcblxuKipBbmFseXppbmcgYSBEUExMIE5ldGxpbmsgUGF0Y2gqKlxuXG5SaWdodCwgSSdtIGxvb2tpbmcgYXQgYSBwYXRjaCB0aGF0J3MgYmVlbiBhcHBsaWVkIHRvIGBkcml2ZXJzL2RwbGwvZHBsbF9uZXRsaW5rLmNgLiBUaGUgY29yZSBvZiB0aGUgY2hhbmdlIHNlZW1zIHRvIGJlIGluIHRoZSBmdW5jdGlvbiBgZHBsbF9tc2dfYWRkX3Bpbl9yZWZfc3luY2AuIFRoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgbmV3IGNoZWNrOiBgaWYgKCFyZWZfc3luY19waW5fcHJpdilgLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcywgXCJPa2F5LCB0aGF0J3MgYSBjb25kaXRpb24gYmVpbmcgYWRkZWQuIFdoYXQgaXMgYHJlZl9zeW5jX3Bpbl9wcml2YCBhbmQgd2h5IGlzIHRoaXMgY2hlY2sgbmVjZXNzYXJ5P1wiIEknbGwgbmVlZCB0byBkaWcgaW50byB0aGUgc3Vycm91bmRpbmcgY29kZSB0byB1bmRlcnN0YW5kIHRoZSBjb250ZXh0IG9mIHRoaXMgdmFyaWFibGUsIHdoYXQgaXQgcmVwcmVzZW50cyBpbiB0aGUgRFBMTCBjb250cm9sLCBhbmQgd2hhdCB0aGUgaW1wbGljYXRpb25zIGFyZSBpZiBpdCdzIG51bGwuIElzIHRoaXMgYSBuZXcgaW5pdGlhbGl6YXRpb24gY2hlY2s/IFByZXZlbnRpbmcgYSBwb3RlbnRpYWwgbnVsbCBwb2ludGVyIGRlcmVmZXJlbmNlPyBPciBpcyB0aGUgYWJzZW5jZSBvZiB0aGlzIHZhcmlhYmxlIGluZGljYXRpdmUgb2Ygc29tZSBjcml0aWNhbCBzdGF0ZSBvciBjb25maWd1cmF0aW9uIGVycm9yPyBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0IHRoaXMgYHJlZl9zeW5jX3Bpbl9wcml2YCBtZWFucyBpbiB0aGUgY29udHJvbCBmbG93IG9mIERQTEwgbmV0bGluayBtZXNzYWdpbmcgYW5kIHRoZW4gZGVkdWNlIHdoYXQgdGhpcyBjaGVjayBpcyBkb2luZy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTkyMiwiT3V0cHV0VG9rZW5zIjo0NywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjkyLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTFUMTc6MzM6MzkuNzIyNTkzNTk5WiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE3OTM2MTM4OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJkcGxsX21zZ19hZGRfcGluX3JlZl9zeW5jXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvZHBsbC9kcGxsX25ldGxpbmsuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL2RwbGwvZHBsbF9uZXRsaW5rLmM9NTUxPXN0YXRpYyBpbnRcXG5kcml2ZXJzL2RwbGwvZHBsbF9uZXRsaW5rLmM6NTUyOmRwbGxfbXNnX2FkZF9waW5fcmVmX3N5bmMoc3RydWN0IHNrX2J1ZmYgKm1zZywgc3RydWN0IGRwbGxfcGluICpwaW4sXFxuZHJpdmVycy9kcGxsL2RwbGxfbmV0bGluay5jLTU1My1cXHRcXHRcXHQgIHN0cnVjdCBkcGxsX3Bpbl9yZWYgKnJlZixcXG4tLVxcbmRyaXZlcnMvZHBsbC9kcGxsX25ldGxpbmsuYz02OTU9ZHBsbF9jbWRfcGluX2dldF9vbmUoc3RydWN0IHNrX2J1ZmYgKm1zZywgc3RydWN0IGRwbGxfcGluICpwaW4sXFxuLS1cXG5kcml2ZXJzL2RwbGwvZHBsbF9uZXRsaW5rLmMtNzU0LVxcdGlmICgheGFfZW1wdHkoXFx1MDAyNnBpbi1cXHUwMDNlcmVmX3N5bmNfcGlucykpXFxuZHJpdmVycy9kcGxsL2RwbGxfbmV0bGluay5jOjc1NTpcXHRcXHRyZXQgPSBkcGxsX21zZ19hZGRfcGluX3JlZl9zeW5jKG1zZywgcGluLCByZWYsIGV4dGFjayk7XFxuZHJpdmVycy9kcGxsL2RwbGxfbmV0bGluay5jLTc1Ni1cXHRpZiAocmV0KVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xMVQxNzozMzozOS45MDE5NjAwMThaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMTgyODkyNTE5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIG15IG93bjpcblxuKipBbmFseXppbmcgdGhlIERQTEwgUmVmZXJlbmNlIENvdW50aW5nKipcblxuQWxyaWdodCwgbGV0J3Mgc2VlLCBgZHBsbF9tc2dfYWRkX3Bpbl9yZWZfc3luY2AgaXMgYmVpbmcgaW52b2tlZCBieSBgZHBsbF9jbWRfcGluX2dldF9vbmVgLiBIbW0sIHRoYXQncyBpbnRlcmVzdGluZy4gSSBrbm93IHRoYXQgZnVuY3Rpb24gaXMgcGFydCBvZiB0aGUgRFBMTCBzdWJzeXN0ZW0ncyBuZXRsaW5rIGludGVyZmFjZS4gU28sIGl0J3MgbGlrZWx5IGludm9sdmVkIGluIGEgXCJnZXRcIiBvcGVyYXRpb24gZm9yIGEgRFBMTCBwaW4sIGFuZCB3ZSdyZSBkZWFsaW5nIHdpdGggcmVmZXJlbmNlIGNvdW50aW5nIGhlcmUg4oCTIHRoZSBgX3JlZmAgaW4gdGhlIG5hbWUgaXMgYSBjbHVlLiBHb3R0YSBtYWtlIHN1cmUgd2UncmUgaGFuZGxpbmcgcmVzb3VyY2UgbGlmZXRpbWVzIGNvcnJlY3RseS4gTm93LCBiZWZvcmUgSSBqdW1wIHRvIGFueSBjb25jbHVzaW9ucywgSSBzaG91bGQgcHJvYmFibHkgZG91YmxlLWNoZWNrIHRoZSBEUExMIGNvbmZpZ3VyYXRpb24gaXRzZWxmLiBTZWUgd2hhdCB0aGUgY3VycmVudCBzZXR1cCBpcywgd2hhdCBmZWF0dXJlcyBhcmUgZW5hYmxlZCwgYW5kIGhvdyB0aGlzIHBhcnRpY3VsYXIgcGluIGlzIGNvbmZpZ3VyZWQgaW4gcmVsYXRpb24gdG8gdGhlIG92ZXJhbGwgY2xvY2tpbmcgc2NoZW1lLiBUaGF0IGNvbmZpZyB3aWxsIGxpa2VseSBzaGVkIGEgbG90IG9mIGxpZ2h0IG9uICp3aHkqIHRoaXMgcmVmZXJlbmNlIG1hbmFnZW1lbnQgaXMgaGFwcGVuaW5nIHRoaXMgd2F5LiBVbmRlcnN0YW5kaW5nIHRoZSBjb250ZXh0IGlzIGtleSB0byBzcG90dGluZyBhbnkgcG90ZW50aWFsIGlzc3Vlcy5cblxuXG4iLCJJbnB1dFRva2VucyI6MjU5MiwiT3V0cHV0VG9rZW5zIjozMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjU3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTExVDE3OjMzOjQzLjA4NDg4MTI2N1oiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozMzEwMzYyNzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIERQTExcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9kcGxsL0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9kcGxsL0tjb25maWc9Nj1tZW51IFxcXCJEUExMIGRldmljZSBzdXBwb3J0XFxcIlxcbmRyaXZlcnMvZHBsbC9LY29uZmlnLTctXFxuZHJpdmVycy9kcGxsL0tjb25maWc6ODpjb25maWcgRFBMTFxcbmRyaXZlcnMvZHBsbC9LY29uZmlnLTktXFx0Ym9vbFxcbmRyaXZlcnMvZHBsbC9LY29uZmlnLTEwLVxcbmRyaXZlcnMvZHBsbC9LY29uZmlnOjExOmNvbmZpZyBEUExMX1JFRkNOVF9UUkFDS0VSXFxuZHJpdmVycy9kcGxsL0tjb25maWctMTItXFx0Ym9vbCBcXFwiRFBMTCByZWZlcmVuY2UgY291bnQgdHJhY2tpbmdcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTExVDE3OjMzOjQzLjQxNTkyMjQ4N1oiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMyMjQzNDI2NjYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoYXQgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkRQTEwncyBUcnVlIE5hdHVyZSoqXG5cbkhvbGQgb24gYSBzZWNvbmQuLi4gaXMgRFBMTCBlc3NlbnRpYWxseSBhIGBib29sYCB0eXBlLCBidXQgd2l0aG91dCB0aGUgaW50ZXJhY3RpdmUgcHJvbXB0aW5nIG1lY2hhbmlzbT8gSSBuZWVkIHRvIHZlcmlmeSBteSBpbml0aWFsIGh1bmNoLiBJdCBzZWVtcyBpbnR1aXRpdmVseSBjb3JyZWN0IGdpdmVuIHRoZSB1c3VhbCBkZWZpbml0aW9ucywgYnV0IEkgd2FudCB0byBiZSBjZXJ0YWluLiBNeSBuZXh0IGFjdGlvbiBpcyB0byBxdWlja2x5IHNjcnV0aW5pemUgdGhlIHJlbGV2YW50IEtjb25maWcgZmlsZSwgc3BlY2lmaWNhbGx5IHdpdGhpbiB0aGUgYGRyaXZlcnMvZHBsbC9gIGRpcmVjdG9yeSwgdG8gY29uZmlybSBvciByZWZ1dGUgdGhpcyBoeXBvdGhlc2lzLiBJJ2xsIGJlIGxvb2tpbmcgZm9yIGhvdyBEUExMIGlzIGFjdHVhbGx5IGRlZmluZWQgYW5kIGltcGxlbWVudGVkIHdpdGggcmVzcGVjdCB0byBpdHMgZnVuZGFtZW50YWwgYm9vbGVhbiBuYXR1cmUsIGFuZCBjb21wYXJlIHRoYXQgdG8gdGhlIHdheSBgYm9vbGAgaXMgaW1wbGVtZW50ZWQgZWxzZXdoZXJlLiBJIHN1c3BlY3QgSSBtaWdodCBmaW5kIHNvbWUgc3VidGxlIGRpZmZlcmVuY2VzLCBvciBtYXliZSBub3QuIFRpbWUgdG8gZGl2ZSBpbnRvIHRoZSBjb2RlIVxuXG5cbiIsIklucHV0VG9rZW5zIjozMDMyLCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMTFUMTc6MzM6NDYuNjQwMjY4MDEzWiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTQxMzcwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImRyaXZlcnMvZHBsbC9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEsXG4gIFwiTGluZUNvdW50XCI6IDIwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgIDE6XFx0IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XFxuICAgMjpcXHQjXFxuICAgMzpcXHQjIEdlbmVyaWMgRFBMTCBkcml2ZXJzIGNvbmZpZ3VyYXRpb25cXG4gICA0OlxcdCNcXG4gICA1OlxcdFxcbiAgIDY6XFx0bWVudSBcXFwiRFBMTCBkZXZpY2Ugc3VwcG9ydFxcXCJcXG4gICA3OlxcdFxcbiAgIDg6XFx0Y29uZmlnIERQTExcXG4gICA5OlxcdFxcdGJvb2xcXG4gIDEwOlxcdFxcbiAgMTE6XFx0Y29uZmlnIERQTExfUkVGQ05UX1RSQUNLRVJcXG4gIDEyOlxcdFxcdGJvb2wgXFxcIkRQTEwgcmVmZXJlbmNlIGNvdW50IHRyYWNraW5nXFxcIlxcbiAgMTM6XFx0XFx0ZGVwZW5kcyBvbiBERUJVR19LRVJORUwgXFx1MDAyNlxcdTAwMjYgU1RBQ0tUUkFDRV9TVVBQT1JUIFxcdTAwMjZcXHUwMDI2IERQTExcXG4gIDE0OlxcdFxcdHNlbGVjdCBSRUZfVFJBQ0tFUlxcbiAgMTU6XFx0XFx0aGVscFxcbiAgMTY6XFx0XFx0ICBFbmFibGUgcmVmZXJlbmNlIGNvdW50IHRyYWNraW5nIGZvciBEUExMIGRldmljZXMgYW5kIHBpbnMuXFxuICAxNzpcXHRcXHQgIFRoaXMgaGVscHMgZGVidWdnaW5nIHJlZmVyZW5jZSBsZWFrcyBhbmQgdXNlLWFmdGVyLWZyZWUgYnVnc1xcbiAgMTg6XFx0XFx0ICBieSByZWNvcmRpbmcgc3RhY2sgdHJhY2VzIGZvciBlYWNoIGdldC9wdXQgb3BlcmF0aW9uLlxcbiAgMTk6XFx0XFxuICAyMDpcXHRcXHQgIFRoZSB0cmFja2luZyBpbmZvcm1hdGlvbiBpcyBleHBvc2VkIHZpYSBkZWJ1Z2ZzIGF0OlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xMVQxNzozMzo0Ni42NDA0MTEyNjNaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMTQxNjUyMTQxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIHByZXNlbnRlZCBpbiB0aGUgZmlyc3QgcGVyc29uOlxuXG4qKkludmVzdGlnYXRpbmcgdGhlIERlcGVuZGVuY3kgb24gYSBCb29sZWFuIEZsYWcqKlxuXG5BbHJpZ2h0LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIGNvZGUsIGFuZCBpdCdzIGZsYWdnZWQgd2l0aCBhIHNpbXBsZSBib29sZWFuIHR5cGUg4oCTIGxpa2VseSBhIGNvbmZpZ3VyYXRpb24gb3B0aW9uIG9yIGEgc3RhdGUgdmFyaWFibGUuIFRoZSBpbW1lZGlhdGUgcXVlc3Rpb24gaXMgYWx3YXlzLCBcIldoZXJlJ3MgdGhpcyBiZWluZyB1c2VkLCBhbmQgKndoeSo/XCIgSXQncyAqcHJvYmFibHkqIGdldHRpbmcgc2V0IG9yIG1vZGlmaWVkIGJ5IGFub3RoZXIgZHJpdmVyIG9yIG1vZHVsZSwgYW5kIG15IGZpcnN0IGluc3RpbmN0IGlzIHRvIHRyYWNlIHRoZSBkZXBlbmRlbmNpZXMuIFRoaXMga2luZCBvZiBmbGFnIG9mdGVuIGhhcyBjYXNjYWRpbmcgZWZmZWN0cywgc28gdW5kZXJzdGFuZGluZyB0aGUgY29udGV4dCBpcyBwYXJhbW91bnQuXG5cblNvIEknbGwgc3RhcnQgd2l0aCB0aGUgb2J2aW91czogd2hvJ3Mgc2VsZWN0aW5nIHRoaXMuXG5cbkxldCdzIGRpdmUgZGVlcGVyIGFuZCBmaW5kIG91dCB0aGUgY29ubmVjdGlvbiB0byBcIkRQTExcIi4gVGhpcyBtaWdodCBpbmRpY2F0ZSBhIGRlcGVuZGVuY3kgb24gYW4gU0FUIHNvbHZlciBpbXBsZW1lbnRhdGlvbiwgb3IgcGVyaGFwcyBhIG1vcmUgY29tcGxleCByZWxhdGlvbnNoaXAgSSBjYW4gaW5mZXIgb25jZSBJIGZpZ3VyZSBvdXQgdGhlIGludGVyYWN0aW9uLiBGaWd1cmluZyBvdXQgdGhlIHJlbGF0aW9uc2hpcCBoZXJlIHdpbGwgYmUga2V5IHRvIHVuZGVyc3RhbmRpbmcgdGhlIHN5c3RlbSdzIG92ZXJhbGwgYmVoYXZpb3IuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjM0OTcsIk91dHB1dFRva2VucyI6MjMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNywiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTExVDE3OjMzOjQ5Ljc4MjA2NTYxNFoiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzQ2Mzg5MzIxMSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJzZWxlY3QgRFBMTFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9kcGxsL3psMzA3M3gvS2NvbmZpZz0zPWNvbmZpZyBaTDMwNzNYXFxuLS1cXG5kcml2ZXJzL2RwbGwvemwzMDczeC9LY29uZmlnLTUtXFx0ZGVwZW5kcyBvbiBORVRcXG5kcml2ZXJzL2RwbGwvemwzMDczeC9LY29uZmlnOjY6XFx0c2VsZWN0IERQTExcXG5kcml2ZXJzL2RwbGwvemwzMDczeC9LY29uZmlnLTctXFx0c2VsZWN0IE5FVF9ERVZMSU5LXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9LY29uZmlnPTI5MT1jb25maWcgSUNFXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9LY29uZmlnLTMwNS1cXHRzZWxlY3QgUExETUZXXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvS2NvbmZpZzozMDY6XFx0c2VsZWN0IERQTExcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9LY29uZmlnLTMwNy1cXHRoZWxwXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvS2NvbmZpZz0yMDM9Y29uZmlnIE1MWDVfRFBMTFxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL0tjb25maWctMjA1LVxcdGRlcGVuZHMgb24gTkVUREVWSUNFUyBcXHUwMDI2XFx1MDAyNiBFVEhFUk5FVCBcXHUwMDI2XFx1MDAyNiBQQ0kgXFx1MDAyNlxcdTAwMjYgTUxYNV9DT1JFXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL0tjb25maWc6MjA2OlxcdHNlbGVjdCBEUExMXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL0tjb25maWctMjA3LVxcdGhlbHBcXG4tLVxcbmRyaXZlcnMvcHRwL0tjb25maWc9MjEwPWNvbmZpZyBQVFBfMTU4OF9DTE9DS19PQ1BcXG4tLVxcbmRyaXZlcnMvcHRwL0tjb25maWctMjE5LVxcdHNlbGVjdCBDUkMxNlxcbmRyaXZlcnMvcHRwL0tjb25maWc6MjIwOlxcdHNlbGVjdCBEUExMXFxuZHJpdmVycy9wdHAvS2NvbmZpZy0yMjEtXFx0aGVscFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xMVQxNzozMzo1Ny4yNDU5NjU1NzVaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzY1MDM4MTc0MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipEUExMIENvbmZpZ3VyYXRpb24gQW5hbHlzaXMqKlxuXG5Pa2F5LCBzbyB0aGUgRFBMTCAoRGlnaXRhbCBQaGFzZS1Mb2NrZWQgTG9vcCkgbW9kdWxlIGlzIGN1cnJlbnRseSBzZWxlY3RlZCBieSBhIGZldyBkaWZmZXJlbnQgb3B0aW9uczogYElDRWAsIGBNTFg1X0RQTExgLCBgUFRQXzE1ODhfQ0xPQ0tfT0NQYCwgYW5kIGBaTDMwNzNYYC4gTXkgaW5pdGlhbCB0aG91Z2h0IHdhcywgXCJDYW4gd2UganVzdCBlbmFibGUgRFBMTCBkaXJlY3RseT9cIiBidXQgdGhlbiBJIHJlbWVtYmVyZWQgaXQncyBhIGJvb2xlYW4gd2l0aG91dCBhIHByb21wdCwgc28gdGhhdCdzIGEgbm8tZ28uIFdlIG5lZWQgdG8gZW5hYmxlIGl0IGluZGlyZWN0bHkgdGhyb3VnaCBvbmUgb2YgdGhvc2UgZGVwZW5kZW50IG9wdGlvbnMuXG5cblRoZXJlZm9yZSwgdGhlIHN0cmF0ZWd5IGlzIHRvIGVuYWJsZSBlaXRoZXIgYElDRWAsIGBNTFg1X0RQTExgLCBgUFRQXzE1ODhfQ0xPQ0tfT0NQYCwgb3IgYFpMMzA3M1hgLlxuXG5MZXQgbWUgdGFrZSBhIHF1aWNrIGxvb2sgYXQgYGRyaXZlcnMvZHBsbC96bDMwNzN4L0tjb25maWdgIHRvIHNlZSBpZiB0aGVyZSBhcmUgYW55IHNwZWNpZmljIGNvbmRpdGlvbnMgd2l0aGluIHRoYXQgZHJpdmVyIHRoYXQgbWlnaHQgYmUgcmVsZXZhbnQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQxNjAsIk91dHB1dFRva2VucyI6NDEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNDYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMTFUMTc6MzQ6MDAuODk2MzQ5NzU1WiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE0MzU2MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL2RwbGwvemwzMDczeC9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEsXG4gIFwiTGluZUNvdW50XCI6IDIwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgIDE6XFx0IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XFxuICAgMjpcXHRcXG4gICAzOlxcdGNvbmZpZyBaTDMwNzNYXFxuICAgNDpcXHRcXHR0cmlzdGF0ZSBcXFwiTWljcm9jaGlwIEF6dXJpdGUgRFBMTC9QVFAvU3luY0UgZGV2aWNlc1xcXCIgaWYgQ09NUElMRV9URVNUXFxuICAgNTpcXHRcXHRkZXBlbmRzIG9uIE5FVFxcbiAgIDY6XFx0XFx0c2VsZWN0IERQTExcXG4gICA3OlxcdFxcdHNlbGVjdCBORVRfREVWTElOS1xcbiAgIDg6XFx0XFx0c2VsZWN0IFJFR01BUFxcbiAgIDk6XFx0XFx0aGVscFxcbiAgMTA6XFx0XFx0ICBUaGlzIGRyaXZlciBzdXBwb3J0cyBNaWNyb2NoaXAgQXp1cml0ZSBmYW1pbHkgRFBMTC9QVFAvU3luY0VcXG4gIDExOlxcdFxcdCAgZGV2aWNlcyB0aGF0IHN1cHBvcnQgdXAgdG8gNSBpbmRlcGVuZGVudCBEUExMIGNoYW5uZWxzLFxcbiAgMTI6XFx0XFx0ICAxMCBpbnB1dCBwaW5zIGFuZCB1cCB0byAyMCBvdXRwdXQgcGlucy5cXG4gIDEzOlxcdFxcbiAgMTQ6XFx0XFx0ICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlLiBUaGUgbW9kdWxlXFxuICAxNTpcXHRcXHQgIHdpbGwgYmUgY2FsbGVkIHpsMzA3M3guXFxuICAxNjpcXHRcXG4gIDE3OlxcdGNvbmZpZyBaTDMwNzNYX0kyQ1xcbiAgMTg6XFx0XFx0dHJpc3RhdGUgXFxcIkkyQyBidXMgaW1wbGVtZW50YXRpb24gZm9yIE1pY3JvY2hpcCBBenVyaXRlIGRldmljZXNcXFwiXFxuICAxOTpcXHRcXHRkZXBlbmRzIG9uIEkyQyBcXHUwMDI2XFx1MDAyNiBORVRcXG4gIDIwOlxcdFxcdHNlbGVjdCBSRUdNQVBfSTJDXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTExVDE3OjM0OjAwLjg5NjQ5NjQ4NloiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMzEyOTYyMDgwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBzZWUuLi5cblxuKipDaGVja2luZyBaTDMwNzNYIERlcGVuZGVuY3kqKlxuXG5IbW0sIHNvIHRoZSBgWkwzMDczWGAgZHJpdmVyIG5lZWRzIGBDT01QSUxFX1RFU1RgIHRvIGJlIGRpcmVjdGx5IHZpc2libGU/IFRoYXQgc2VlbXMgYSBiaXQuLi4gdW51c3VhbC4gTGV0J3Mgc2VlIGhvdyB0aGF0J3MgaGFuZGxlZDpcblxuYHRyaXN0YXRlIFwiTWljcm9jaGlwIEF6dXJpdGUgRFBMTC9QVFAvU3luY0UgZGV2aWNlc1wiIGlmIENPTVBJTEVfVEVTVGBcblxuT2theSwgeWVwLCB0aGF0J3Mgd2hhdCBpdCBsb29rcyBsaWtlLiAgSXQncyBjb25kaXRpb25hbGx5IGNvbXBpbGVkIGJhc2VkIG9uIGBDT01QSUxFX1RFU1RgLiAgSSBuZWVkIHRvIGNoZWNrIHRoYXQgdGhpcyBpcyB0aGUgYmVzdCBhcHByb2FjaC4gSXMgdGhpcyByZWFsbHkgdGhlIHByb3BlciBkZXNpZ24/ICBUaGlzIGZlZWxzIGEgYml0IG9mZiwgaXQgbWF5IGludGVyZmVyZSB3aXRoIHByb2R1Y3Rpb24gYnVpbGRzLCB3aGljaCBpcyBub3QgaWRlYWwuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSByZWFzb25pbmcgYmVoaW5kIHRoaXMgZGVzaWduIGNob2ljZS4gUGVyaGFwcyB0aGVyZSdzIGEgZ29vZCByZWFzb24sIGJ1dCBJJ2xsIG5lZWQgdG8gZGlnIGRlZXBlci4gSSdsbCBuZWVkIHRvIGNoZWNrIHRoZSBkZXBlbmRlbmNpZXMgb24gYE1MWDVfRFBMTGAgdG8gZW5zdXJlIHRoZXkgZG8gbm90IHJlcXVpcmUgYENPTVBJTEVfVEVTVGAgdG9vLlxuXG5cbiIsIklucHV0VG9rZW5zIjo0ODQ2LCJPdXRwdXRUb2tlbnMiOjQ2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NjEsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0xMVQxNzozNDowNC4yMDk0NjEwNjZaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6OTkwNTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogMjAzLFxuICBcIkxpbmVDb3VudFwiOiAxMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgMjAzOlxcdGNvbmZpZyBNTFg1X0RQTExcXG4gMjA0OlxcdFxcdHRyaXN0YXRlIFxcXCJNZWxsYW5veCA1dGggZ2VuZXJhdGlvbiBuZXR3b3JrIGFkYXB0ZXJzIChDb25uZWN0WCBzZXJpZXMpIERQTEwgc3VwcG9ydFxcXCJcXG4gMjA1OlxcdFxcdGRlcGVuZHMgb24gTkVUREVWSUNFUyBcXHUwMDI2XFx1MDAyNiBFVEhFUk5FVCBcXHUwMDI2XFx1MDAyNiBQQ0kgXFx1MDAyNlxcdTAwMjYgTUxYNV9DT1JFXFxuIDIwNjpcXHRcXHRzZWxlY3QgRFBMTFxcbiAyMDc6XFx0XFx0aGVscFxcbiAyMDg6XFx0XFx0ICBEUExMIHN1cHBvcnQgaW4gTWVsbGFub3ggVGVjaG5vbG9naWVzIENvbm5lY3RYIE5JQ3MuXFxuIDIwOTpcXHRcXG4gMjEwOlxcdGNvbmZpZyBNTFg1X0VOX1BTUFxcbiAyMTE6XFx0XFx0Ym9vbCBcXFwiTWVsbGFub3ggVGVjaG5vbG9naWVzIHN1cHBvcnQgZm9yIFBTUCBjcnlwdG9ncmFwaHktb2ZmbG9hZCBhY2NlbGVyYXRpb25cXFwiXFxuIDIxMjpcXHRcXHRkZXBlbmRzIG9uIElORVRfUFNQXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTExVDE3OjM0OjA0LjIwOTU2MjM5NloiLCJTZXEiOjE1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoyNjU4MTU1MjgwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIGFuIGV4cGVydCdzIGludGVybmFsIG1vbm9sb2d1ZTpcblxuKipDb25zaWRlcmluZyBDbG9jayBTeW5jaHJvbml6YXRpb24gT3B0aW9ucyoqXG5cblJpZ2h0LCBgTUxYNV9EUExMYCBpcyBhIHN0cm9uZyBjb250ZW5kZXIsIGEgc29saWQgY2hvaWNlIGZvciB0aGUga2luZCBvZiBwcmVjaXNpb24gSSBuZWVkLiBJdCdzIGdvdCB0aGUgcmlnaHQgY2hhcmFjdGVyaXN0aWNzIGZvciB0aGlzIGFwcGxpY2F0aW9uLiBCdXQsIEkgc2hvdWxkIGFsc28gd2VpZ2ggaXQgYWdhaW5zdCBvdGhlciBwb3NzaWJpbGl0aWVzLiBJJ20gd29uZGVyaW5nIGlmIGBQVFBfMTU4OF9DTE9DS19PQ1BgIG1pZ2h0IG9mZmVyIHNvbWUgYWR2YW50YWdlcyBpbiB0aGlzIHNjZW5hcmlvLiBJIGhhdmUgdG8gYXNzZXNzIGlmIGl0cyBhcmNoaXRlY3R1cmUgc3VpdHMgdGhlIHN5c3RlbSBiZXR0ZXIsIGVzcGVjaWFsbHkgY29uc2lkZXJpbmcgdGhlIHBvdGVudGlhbCBpbnRlZ3JhdGlvbiBjaGFsbGVuZ2VzIG9mIGJvdGggc29sdXRpb25zLlxuXG5cbiIsIklucHV0VG9rZW5zIjo1MzQwLCJPdXRwdXRUb2tlbnMiOjM1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzEsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0xMVQxNzozNDowNi44Njc3MjA0NDZaIiwiU2VxIjoxNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTIwMDkwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImRyaXZlcnMvcHRwL0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogMjEwLFxuICBcIkxpbmVDb3VudFwiOiAxMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgMjEwOlxcdGNvbmZpZyBQVFBfMTU4OF9DTE9DS19PQ1BcXG4gMjExOlxcdFxcdHRyaXN0YXRlIFxcXCJPcGVuQ29tcHV0ZSBUaW1lQ2FyZCBhcyBQVFAgY2xvY2tcXFwiXFxuIDIxMjpcXHRcXHRkZXBlbmRzIG9uIFBUUF8xNTg4X0NMT0NLXFxuIDIxMzpcXHRcXHRkZXBlbmRzIG9uIEhBU19JT01FTSBcXHUwMDI2XFx1MDAyNiBQQ0lcXG4gMjE0OlxcdFxcdGRlcGVuZHMgb24gSTJDIFxcdTAwMjZcXHUwMDI2IE1URFxcbiAyMTU6XFx0XFx0ZGVwZW5kcyBvbiBTRVJJQUxfODI1MFxcbiAyMTY6XFx0XFx0ZGVwZW5kcyBvbiAhUzM5MFxcbiAyMTc6XFx0XFx0ZGVwZW5kcyBvbiBDT01NT05fQ0xLXFxuIDIxODpcXHRcXHRzZWxlY3QgTkVUX0RFVkxJTktcXG4gMjE5OlxcdFxcdHNlbGVjdCBDUkMxNlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xMVQxNzozNDowNi44Njc4NDIzNzZaIiwiU2VxIjoxNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzU0MDQxMTM5NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipJbnZlc3RpZ2F0aW5nIHRoZSBNTFg1X0RQTEwvUFRQXzE1ODhfQ0xPQ0tfT0NQIFBvc3NpYmlsaXR5KipcblxuT2theSwgbGV0J3MgZXhwbG9yZSBlbmFibGluZyBgTUxYNV9EUExMYCBvciBwb3RlbnRpYWxseSBgUFRQXzE1ODhfQ0xPQ0tfT0NQYC4gUmlnaHQsIHJpZ2h0LCBJIG5lZWQgdG8gcmVtZW1iZXIgYERQTExgIGlzIHRoZSBzdWJzeXN0ZW0gaXRzZWxmLiBUaGUgcGF0Y2ggaXMgdG91Y2hpbmcgYGRyaXZlcnMvZHBsbC9kcGxsX25ldGxpbmsuY2AsIHdoaWNoIGdpdmVzIHVzIGEgY2x1ZS4gVGhlIGtleSBxdWVzdGlvbiBpcyB3aGV0aGVyIHRoaXMgaXMgYWNjZXNzaWJsZSBmcm9tIHVzZXIgc3BhY2UuIEJpbmdvLCBpdCdzIGEgbmV0bGluayBpbnRlcmZhY2UsIHNvIHRoYXQgbG9va3MgcHJvbWlzaW5nLiBOb3csIGxldCBtZSBkaWcgaW50byBgZHBsbF9tc2dfYWRkX3Bpbl9yZWZfc3luY2AgYW5kIGBkcGxsX2NtZF9waW5fZ2V0X29uZWAgdG8gdW5kZXJzdGFuZCB0aGUgZGF0YSBmbG93IGFuZCBhdmFpbGFibGUgY29udHJvbHMuIFRoYXQncyB3aGVyZSB0aGUgcmVhbCBtYWdpYyBoYXBwZW5zLCBzbyBsZXQncyBzZWUgd2hhdCdzIHdoYXQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjU2OTgsIk91dHB1dFRva2VucyI6NDUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMTQsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0xMVQxNzozNDoxMC40MDgyNTY0NzNaIiwiU2VxIjoxOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI2MDgyNTMxNSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJkcGxsX2NtZF9waW5fZ2V0X29uZVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL2RwbGwvZHBsbF9uZXRsaW5rLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9kcGxsL2RwbGxfbmV0bGluay5jPTY5ND1zdGF0aWMgaW50XFxuZHJpdmVycy9kcGxsL2RwbGxfbmV0bGluay5jOjY5NTpkcGxsX2NtZF9waW5fZ2V0X29uZShzdHJ1Y3Qgc2tfYnVmZiAqbXNnLCBzdHJ1Y3QgZHBsbF9waW4gKnBpbixcXG5kcml2ZXJzL2RwbGwvZHBsbF9uZXRsaW5rLmMtNjk2LVxcdFxcdCAgICAgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKVxcbi0tXFxuZHJpdmVycy9kcGxsL2RwbGxfbmV0bGluay5jPTg4OT1kcGxsX3Bpbl9ldmVudF9zZW5kKGVudW0gZHBsbF9jbWQgZXZlbnQsIHN0cnVjdCBkcGxsX3BpbiAqcGluKVxcbi0tXFxuZHJpdmVycy9kcGxsL2RwbGxfbmV0bGluay5jLTkwNC1cXHRcXHRnb3RvIGVycl9mcmVlX21zZztcXG5kcml2ZXJzL2RwbGwvZHBsbF9uZXRsaW5rLmM6OTA1OlxcdHJldCA9IGRwbGxfY21kX3Bpbl9nZXRfb25lKG1zZywgcGluLCBOVUxMKTtcXG5kcml2ZXJzL2RwbGwvZHBsbF9uZXRsaW5rLmMtOTA2LVxcdGlmIChyZXQpXFxuLS1cXG5kcml2ZXJzL2RwbGwvZHBsbF9uZXRsaW5rLmM9MTc4ND1pbnQgZHBsbF9ubF9waW5fZ2V0X2RvaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGdlbmxfaW5mbyAqaW5mbylcXG4tLVxcbmRyaXZlcnMvZHBsbC9kcGxsX25ldGxpbmsuYy0xODAxLVxcdH1cXG5kcml2ZXJzL2RwbGwvZHBsbF9uZXRsaW5rLmM6MTgwMjpcXHRyZXQgPSBkcGxsX2NtZF9waW5fZ2V0X29uZShtc2csIHBpbiwgaW5mby1cXHUwMDNlZXh0YWNrKTtcXG5kcml2ZXJzL2RwbGwvZHBsbF9uZXRsaW5rLmMtMTgwMy1cXHRpZiAocmV0KSB7XFxuLS1cXG5kcml2ZXJzL2RwbGwvZHBsbF9uZXRsaW5rLmM9MTgxMj1pbnQgZHBsbF9ubF9waW5fZ2V0X2R1bXBpdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0bGlua19jYWxsYmFjayAqY2IpXFxuLS1cXG5kcml2ZXJzL2RwbGwvZHBsbF9uZXRsaW5rLmMtMTgzMi1cXHRcXHR9XFxuZHJpdmVycy9kcGxsL2RwbGxfbmV0bGluay5jOjE4MzM6XFx0XFx0cmV0ID0gZHBsbF9jbWRfcGluX2dldF9vbmUoc2tiLCBwaW4sIGNiLVxcdTAwM2VleHRhY2spO1xcbmRyaXZlcnMvZHBsbC9kcGxsX25ldGxpbmsuYy0xODM0LVxcdFxcdGlmIChyZXQpIHtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTFUMTc6MzQ6MTAuNjY5MDg4MjM4WiIsIlNlcSI6MTksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ1MjYxOTg5MzcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBEUExMIE5ldGxpbmsgSGFuZGxlcnMqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGVzZSBuZXRsaW5rIGhhbmRsZXJzLCBgZHBsbF9ubF9waW5fZ2V0X2RvaXRgIGFuZCBgZHBsbF9ubF9waW5fZ2V0X2R1bXBpdGAuIFRoZXkncmUgaGFuZGxpbmcgYERQTExfQ01EX1BJTl9HRVRgLCB3aGljaCBpbW1lZGlhdGVseSBzdWdnZXN0cyB0aGlzIGZ1bmN0aW9uYWxpdHkgaXMgYWNjZXNzaWJsZSBmcm9tIHVzZXIgc3BhY2UsIGFzc3VtaW5nIHRoZSBEUExMIHN1YnN5c3RlbSBpcyBlbmFibGVkIGFuZCB0aGVyZSBhcmUgRFBMTCBkZXZpY2VzIHByZXNlbnQuIEJ1dCBhIHF1ZXN0aW9uIHBvcHMgaW50byBteSBoZWFkOiBkb2VzIGl0ICpyZXF1aXJlKiBhIERQTEwgZGV2aWNlIHRvIGJlIHJlZ2lzdGVyZWQsIG9yIGNhbiB0aGlzIGNvbW1hbmQgYmUgaXNzdWVkIHJlZ2FyZGxlc3M/IEkgc3VzcGVjdCBpdCBkb2VzIHJlcXVpcmUgYSByZWdpc3RlcmVkIGRldmljZSwgc2luY2UgdGhlIG5hbWUgaW1wbGllcyByZXRyaWV2YWwgb2YgYSBcInBpblwiLCBhbmQgdGhhdCdzIGxpa2VseSB0aWVkIHRvIGEgc3BlY2lmaWMgRFBMTCBkZXZpY2UgaW5zdGFuY2UuIFRvIGJlIHN1cmUsIEkgc2hvdWxkIGNoZWNrIHRoZSBpbXBsZW1lbnRhdGlvbiBvZiBgZHBsbF9ubF9waW5fZ2V0X2RvaXRgIHRvIHNlZSBleGFjdGx5IHdoYXQga2luZCBvZiBsb29rdXBzIGl0IGlzIHBlcmZvcm1pbmcuIExldCdzIGRpZyBpbnRvIHRoYXQgZnVuY3Rpb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjY2MTAsIk91dHB1dFRva2VucyI6NDMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMjQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMTFUMTc6MzQ6MTUuMTk1Mjg5NzU1WiIsIlNlcSI6MjAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE1Nzc1MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL2RwbGwvZHBsbF9uZXRsaW5rLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMTc4NCxcbiAgXCJMaW5lQ291bnRcIjogMzBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMTc4NDpcXHRpbnQgZHBsbF9ubF9waW5fZ2V0X2RvaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGdlbmxfaW5mbyAqaW5mbylcXG4xNzg1OlxcdHtcXG4xNzg2OlxcdFxcdHN0cnVjdCBkcGxsX3BpbiAqcGluID0gaW5mby1cXHUwMDNldXNlcl9wdHJbMF07XFxuMTc4NzpcXHRcXHRzdHJ1Y3Qgc2tfYnVmZiAqbXNnO1xcbjE3ODg6XFx0XFx0c3RydWN0IG5sYXR0ciAqaGRyO1xcbjE3ODk6XFx0XFx0aW50IHJldDtcXG4xNzkwOlxcdFxcbjE3OTE6XFx0XFx0aWYgKCFwaW4pXFxuMTc5MjpcXHRcXHRcXHRyZXR1cm4gLUVOT0RFVjtcXG4xNzkzOlxcdFxcdG1zZyA9IGdlbmxtc2dfbmV3KE5MTVNHX0dPT0RTSVpFLCBHRlBfS0VSTkVMKTtcXG4xNzk0OlxcdFxcdGlmICghbXNnKVxcbjE3OTU6XFx0XFx0XFx0cmV0dXJuIC1FTk9NRU07XFxuMTc5NjpcXHRcXHRoZHIgPSBnZW5sbXNnX3B1dF9yZXBseShtc2csIGluZm8sIFxcdTAwMjZkcGxsX25sX2ZhbWlseSwgMCxcXG4xNzk3OlxcdFxcdFxcdFxcdFxcdERQTExfQ01EX1BJTl9HRVQpO1xcbjE3OTg6XFx0XFx0aWYgKCFoZHIpIHtcXG4xNzk5OlxcdFxcdFxcdG5sbXNnX2ZyZWUobXNnKTtcXG4xODAwOlxcdFxcdFxcdHJldHVybiAtRU1TR1NJWkU7XFxuMTgwMTpcXHRcXHR9XFxuMTgwMjpcXHRcXHRyZXQgPSBkcGxsX2NtZF9waW5fZ2V0X29uZShtc2csIHBpbiwgaW5mby1cXHUwMDNlZXh0YWNrKTtcXG4xODAzOlxcdFxcdGlmIChyZXQpIHtcXG4xODA0OlxcdFxcdFxcdG5sbXNnX2ZyZWUobXNnKTtcXG4xODA1OlxcdFxcdFxcdHJldHVybiByZXQ7XFxuMTgwNjpcXHRcXHR9XFxuMTgwNzpcXHRcXHRnZW5sbXNnX2VuZChtc2csIGhkcik7XFxuMTgwODpcXHRcXG4xODA5OlxcdFxcdHJldHVybiBnZW5sbXNnX3JlcGx5KG1zZywgaW5mbyk7XFxuMTgxMDpcXHR9XFxuMTgxMTpcXHRcXG4xODEyOlxcdGludCBkcGxsX25sX3Bpbl9nZXRfZHVtcGl0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRsaW5rX2NhbGxiYWNrICpjYilcXG4xODEzOlxcdHtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTFUMTc6MzQ6MTUuMTk1NDUxMDQ1WiIsIlNlcSI6MjEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMxNjUyMDY0NTAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqRFBMTCBEcml2ZXIgVGVzdGluZzogQSBRdWljayBUaG91Z2h0IFByb2Nlc3MqKlxuXG5Pa2F5LCBzbyBJJ20gdGhpbmtpbmcgSSBuZWVkIHRvIHJlZ2lzdGVyIGEgcGluIGZvciB0aGlzIHRvIHdvcmsuIFRoYXQncyB0aGUgZmlyc3Qgc3RlcC4gTm93LCBJIG5lZWQgdG8gZ2V0IHRoaXMgdGVzdGVkIHByb3Blcmx5LiBJJ20gd29uZGVyaW5nIGlmIHRoZXJlJ3MgYSBnb29kIHZpcnR1YWwgb3IgbW9jayBEUExMIGRyaXZlciBvdXQgdGhlcmUgdGhhdCBJIGNvdWxkIHVzZSBmb3IgdGhpcz8gU29tZXRoaW5nIHRvIHNpbXVsYXRlIHRoZSBoYXJkd2FyZSBlbnZpcm9ubWVudCB3aXRob3V0IGFjdHVhbGx5IGhhdmluZyB0aGUgaGFyZHdhcmUgcHJlc2VudC4gSXQgd291bGQgYmUgaWRlYWwgZm9yIGEgY29udHJvbGxlZCB0ZXN0aW5nIGVudmlyb25tZW50LiBMZXQgbWUgZG8gYSBxdWljayBzZWFyY2ggYW5kIHNlZSB3aGF0IHRoZSBvcHRpb25zIGFyZSBmb3IgdGhlc2UgRFBMTCBkcml2ZXJzLiBIb3BlZnVsbHksIEkgY2FuIGZpbmQgc29tZXRoaW5nIHN1aXRhYmxlIHF1aWNrbHkuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjc0NDgsIk91dHB1dFRva2VucyI6MjMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozNiwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTExVDE3OjM0OjE4LjM2MDY1OTk5NVoiLCJTZXEiOjIyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJjb2Rlc2VhcmNoLWRpci1pbmRleCIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjc5NDYwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRGlyXCI6IFwiZHJpdmVycy9kcGxsXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIkZpbGVzXCI6IFtcbiAgICBcImRwbGxfY29yZS5jXCIsXG4gICAgXCJkcGxsX2NvcmUuaFwiLFxuICAgIFwiZHBsbF9uZXRsaW5rLmNcIixcbiAgICBcImRwbGxfbmV0bGluay5oXCIsXG4gICAgXCJkcGxsX25sLmNcIixcbiAgICBcImRwbGxfbmwuaFwiXG4gIF0sXG4gIFwiU3ViZGlyc1wiOiBbXG4gICAgXCJ6bDMwNzN4XCJcbiAgXVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTFUMTc6MzQ6MTguMzYwNzQxNjY1WiIsIlNlcSI6MjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM5OTEwOTQxMDAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqSW52ZXN0aWdhdGluZyBEUExMIENvZGUgQWNjZXNzKipcblxuT2theSwgc28gSSdtIHRyeWluZyB0byBmaWd1cmUgb3V0IGhvdyBzeXprYWxsZXIgaXMgaGl0dGluZyB0aGlzIERQTEwgY29kZS4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIGxvb2sgYXQgdGhlIE1lbGxhbm94IGRyaXZlciwgc3BlY2lmaWNhbGx5IHNvbWV0aGluZyBpbiBgZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2RwbGwuY2Agb3IgYSBzaW1pbGFyIGZpbGUuIFRoYXQncyB1c3VhbGx5IHdoZXJlIHRoZXNlIHR5cGVzIG9mIHRoaW5ncyByZXNpZGUuIEJ1dCwgaGFuZyBvbi4uLiBubywgdGhlcmUncyBubyBkZWRpY2F0ZWQgbW9jayBkcml2ZXIgaW4gYGRyaXZlcnMvZHBsbGAsIHRoYXQgd291bGQgaGF2ZSBiZWVuIHRvbyBlYXN5IVxuXG5BbHJpZ2h0LCBsZXQncyBwaXZvdC4gQ291bGQgaXQgYmUgYSBQVFAgZHJpdmVyLXJlbGF0ZWQgaXNzdWU/IExldCBtZSBjaGVjayBgZHJpdmVycy9wdHAvcHRwX21vY2suY2AuLi4gbm9wZSwgbm90IHRoZXJlIGVpdGhlci4gVGhpcyBpcyBiZWNvbWluZyBtb3JlIGludGVyZXN0aW5nLlxuXG5UaGUgY29yZSBxdWVzdGlvbiBpcywgKmhvdyogaXMgc3l6a2FsbGVyIG1hbmFnaW5nIHRvIHJlYWNoIHRoaXMgY29kZSBpbiB0aGUgZmlyc3QgcGxhY2U/IEl0IG1lYW5zIHN5emthbGxlciBpcyBsb2FkaW5nIHNvbWUgY29tcG9uZW50IHRvIGNhbGwgRFBMTCBjb2RlLiBEb2VzIHRoZSB0ZXN0aW5nIGVudmlyb25tZW50IGluY2x1ZGUgbG9hZGluZyBhbmQgdXNpbmcgYSBuZXR3b3JrIGRldmljZSBzaW11bGF0b3IsIGxpa2UgYG5ldGRldnNpbWAsIG9yIHNvbWV0aGluZyBjb21wYXJhYmxlPyBBbmQgaWYgaXQncyBsb2FkaW5nIGEgc2ltdWxhdG9yLCBkb2VzIHRoYXQgc2ltdWxhdG9yIGhhdmUgYW55IERQTEwgZnVuY3Rpb25hbGl0eSBpbnRlZ3JhdGVkPyBUaGF0J3MgcHJvYmFibHkgd2hlcmUgdGhlIHRyaWdnZXIgaXMuIEkgbmVlZCB0byBpbnZlc3RpZ2F0ZSB0aGUgY2FwYWJpbGl0aWVzIG9mIGFueSBzaW11bGF0ZWQgbmV0d29yayBkZXZpY2VzLlxuXG5cbiIsIklucHV0VG9rZW5zIjo3NzE3LCJPdXRwdXRUb2tlbnMiOjMwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6OTksIlRvb2xDYWxscyI6WyJjb2Rlc2VhcmNoLWRpci1pbmRleCJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTExVDE3OjM0OjIyLjM1MTgzODg1NVoiLCJTZXEiOjI0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjA4MTEyNDEzLCJFcnJvciI6Im5vIG1hdGNoZXMiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJkcGxsXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L25ldGRldnNpbVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJlcnJvclwiOiBcIm5vIG1hdGNoZXNcIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTFUMTc6MzQ6MjIuOTU5OTYwNjc4WiIsIlNlcSI6MjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMzOTExNzkxNTYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBwcmVzZW50ZWQgaW4gdGhlIGZpcnN0IHBlcnNvbjpcblxuKipJbnZlc3RpZ2F0aW5nIERQTEwgRHJpdmVyIFNlbGVjdGlvbioqXG5cbkFscmlnaHQsIGxldCdzIGdldCBkb3duIHRvIGJyYXNzIHRhY2tzLiBNeSBpbml0aWFsIHRob3VnaHQgcHJvY2VzcyBpcyBnZWFyZWQgdG93YXJkIGRpYWdub3NpbmcgdGhlIHBvdGVudGlhbCBmb3IgYSBEUExMIGNvbmZpZ3VyYXRpb24uIEZpcnN0LCBJIG5lZWQgdG8gbWV0aG9kaWNhbGx5IGNoZWNrIGZvciBhbnkgdmlydHVhbCBkcml2ZXJzIHRoYXQgYXJlIGRlc2lnbmVkIHRvIHNlbGVjdCBEUExMLiBUaGlzIGlzIHRoZSBmaXJzdCBsb2dpY2FsIHN0ZXAuIElkZW50aWZ5aW5nIHRoZXNlIGRyaXZlcnMgd2lsbCBpbW1lZGlhdGVseSBnaXZlIG1lIGEgc3RhcnRpbmcgcG9pbnQsIGFuZCBJJ2xsIGtub3cgd2hlcmUgdG8gbG9vayBpZiBJIGNhbiBjb25maXJtIGEgRFBMTCBpbnN0YW5jZS4gSSB3YW50IHRvIHJ1bGUgb3V0IHRoZSBiYXNpYyBjYXVzZXMgZmlyc3QsIHNvIEkgd2FudCB0byBrbm93IGlmIHRoZXJlIGlzIGFueXRoaW5nIHJ1bm5pbmcsIHRoYXQncyBzdXBwb3NlZCB0byBiZSBEUExMLlxuXG5cbiIsIklucHV0VG9rZW5zIjo4MTI0LCJPdXRwdXRUb2tlbnMiOjIzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMTFUMTc6MzQ6MjYuMzUxMTQyMzk0WiIsIlNlcSI6MjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1MjI3ODAzNTg2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInNlbGVjdCBEUExMXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIlwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL2RwbGwvemwzMDczeC9LY29uZmlnPTM9Y29uZmlnIFpMMzA3M1hcXG4tLVxcbmRyaXZlcnMvZHBsbC96bDMwNzN4L0tjb25maWctNS1cXHRkZXBlbmRzIG9uIE5FVFxcbmRyaXZlcnMvZHBsbC96bDMwNzN4L0tjb25maWc6NjpcXHRzZWxlY3QgRFBMTFxcbmRyaXZlcnMvZHBsbC96bDMwNzN4L0tjb25maWctNy1cXHRzZWxlY3QgTkVUX0RFVkxJTktcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL0tjb25maWc9MjkxPWNvbmZpZyBJQ0VcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL0tjb25maWctMzA1LVxcdHNlbGVjdCBQTERNRldcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9LY29uZmlnOjMwNjpcXHRzZWxlY3QgRFBMTFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL0tjb25maWctMzA3LVxcdGhlbHBcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9LY29uZmlnPTIwMz1jb25maWcgTUxYNV9EUExMXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvS2NvbmZpZy0yMDUtXFx0ZGVwZW5kcyBvbiBORVRERVZJQ0VTIFxcdTAwMjZcXHUwMDI2IEVUSEVSTkVUIFxcdTAwMjZcXHUwMDI2IFBDSSBcXHUwMDI2XFx1MDAyNiBNTFg1X0NPUkVcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvS2NvbmZpZzoyMDY6XFx0c2VsZWN0IERQTExcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvS2NvbmZpZy0yMDctXFx0aGVscFxcbi0tXFxuZHJpdmVycy9wdHAvS2NvbmZpZz0yMTA9Y29uZmlnIFBUUF8xNTg4X0NMT0NLX09DUFxcbi0tXFxuZHJpdmVycy9wdHAvS2NvbmZpZy0yMTktXFx0c2VsZWN0IENSQzE2XFxuZHJpdmVycy9wdHAvS2NvbmZpZzoyMjA6XFx0c2VsZWN0IERQTExcXG5kcml2ZXJzL3B0cC9LY29uZmlnLTIyMS1cXHRoZWxwXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTExVDE3OjM0OjMxLjU3ODk1MjI3WiIsIlNlcSI6MjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQwMjQ0MTY2ODgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIERyaXZlciBJZGVudGlmaWNhdGlvbiBhbmQgQ29uZmlndXJhdGlvbioqXG5cbk9rYXksIHNvIG5vbmUgb2YgdGhlc2UgbG9vayBsaWtlIHZpcnR1YWwgZHJpdmVycy4gYElDRWDigJR0aGF0J3MgdGhlIEludGVsIEV0aGVybmV0IENvbm5lY3Rpb24gRTgwMCBTZXJpZXMsIEkgcmVjb2duaXplIHRoYXQuIGBNTFg1X0RQTExgIGlzIE1lbGxhbm94LiBBbmQgYFBUUF8xNTg4X0NMT0NLX09DUGAgaXMgdGhlIE9wZW5Db21wdXRlIFRpbWVDYXJk4oCUZ290IGl0LiBOb3csIGBaTDMwNzNYYC4uLiB0aGF0J3MgdGhlIE1pY3JvY2hpcCBBenVyaXRlLiBIbW0sIEkgd29uZGVyIGlmIGl0IGNhbiBiZSBkaXJlY3RseSBpbnN0YW50aWF0ZWQsIGZyb20gdXNlciBzcGFjZSwgdmlhIEkyQyBvciBTUEk/IFRoYXQgd291bGQgYmUgaW50ZXJlc3RpbmcuIE15IGluc3RpbmN0IGlzIHRoYXQgaXQgKm1pZ2h0KiBiZSBwb3NzaWJsZSwgZGVwZW5kaW5nIG9uIHRoZSBkZXNpZ24uIEknbGwgbmVlZCB0byBkaWcgaW50byB0aGUgZHJpdmVyIGNvZGUgdG8gY29uZmlybSB0aGF0LiBMZXQncyBzdGFydCBieSBsb29raW5nIGF0IGBkcml2ZXJzL2RwbGwvemwzMDczeC96bDMwNzN4LmNgIG9yIHNvbWV0aGluZyBzaW1pbGFyIHRvIHNlZSBob3cgaXQncyBpbml0aWFsaXplZCBhbmQgY29uZmlndXJlZC4gVGhhdCBzaG91bGQgdGVsbCBtZSB3aGF0IGludGVyZmFjZXMgYXJlIGV4cG9zZWQgYW5kIHdoZXRoZXIgdXNlci1zcGFjZSBjb250cm9sIGlzIGFuIG9wdGlvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6ODcxNywiT3V0cHV0VG9rZW5zIjozMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEyMywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0xMVQxNzozNDozNS42MDMzNzE0ODhaIiwiU2VxIjoyOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiY29kZXNlYXJjaC1kaXItaW5kZXgiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1NjY3NTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJEaXJcIjogXCJkcml2ZXJzL2RwbGwvemwzMDczeFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJGaWxlc1wiOiBbXG4gICAgXCJjaGFuLmNcIixcbiAgICBcImNoYW4uaFwiLFxuICAgIFwiY29yZS5jXCIsXG4gICAgXCJjb3JlLmhcIixcbiAgICBcImRldmxpbmsuY1wiLFxuICAgIFwiZGV2bGluay5oXCIsXG4gICAgXCJkcGxsLmNcIixcbiAgICBcImRwbGwuaFwiLFxuICAgIFwiZmxhc2guY1wiLFxuICAgIFwiZmxhc2guaFwiLFxuICAgIFwiZncuY1wiLFxuICAgIFwiZncuaFwiLFxuICAgIFwiaTJjLmNcIixcbiAgICBcIm91dC5jXCIsXG4gICAgXCJvdXQuaFwiLFxuICAgIFwicHJvcC5jXCIsXG4gICAgXCJwcm9wLmhcIixcbiAgICBcInJlZi5jXCIsXG4gICAgXCJyZWYuaFwiLFxuICAgIFwicmVncy5oXCIsXG4gICAgXCJzcGkuY1wiLFxuICAgIFwic3ludGguY1wiLFxuICAgIFwic3ludGguaFwiXG4gIF0sXG4gIFwiU3ViZGlyc1wiOiBudWxsXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xMVQxNzozNDozNS42MDM5NDI2NjhaIiwiU2VxIjoyOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzE0Njc4NDA0MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgRHJpdmVyIEludGVncmF0aW9uIGZvciBTeXprYWxsZXIgVGVzdGluZyoqXG5cbk9rYXksIHNvIEkgc2VlIHRoaXMgY29kZSBpcyB3b3JraW5nIHdpdGggYGkyYy5jYCBhbmQgYHNwaS5jYC4gVGhhdCBpbW1lZGlhdGVseSB0ZWxscyBtZSBpdCdzIGxpa2VseSBkZWFsaW5nIHdpdGggZWl0aGVyIGFuIEkyQyBvciBTUEkgZGV2aWNlLiBBIGdvb2Qgc3RhcnRpbmcgcG9pbnQgZm9yIHRlc3Rpbmcgd2l0aCBzeXprYWxsZXIsIHRoZW4uIFRoZSBzeXN0ZW0gc2hvdWxkIGFsbG93IHN5emthbGxlciB0byBjcmVhdGUgaW5zdGFuY2VzIG9mIHRoZXNlIGRldmljZXMsIGJ1dCB3aGF0IGludGVyZmFjZXMgZG9lcyBpdCBzdXBwb3J0PyBBaCwgaXQgc2VlbXMgbGlrZSBgaTJjLXN0dWJgLCBgaTJjLWRldmAsIGFuZCB0aGUgcGxhaW4gb2xkIGBzcGlgIG1vY2sgaW50ZXJmYWNlcyBhcmUgdGhlIHdheSB0byBnbyBoZXJlLiBMZXQncyBkZWx2ZSBpbiBhbmQgc2VlLiBOb3csIGxldCdzIGRyaWxsIGRvd24gaW50byBhIHNwZWNpZmljIGV4YW1wbGUuIEkgdGhpbmsgY2hlY2tpbmcgb3V0IGBkcml2ZXJzL2RwbGwvemwzMDczeC9pMmMuY2Agc2hvdWxkIGJlIHVzZWZ1bC4gVGhhdCBnaXZlcyB1cyBhIGNvbmNyZXRlIGltcGxlbWVudGF0aW9uIHRvIGV4YW1pbmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjkyNDcsIk91dHB1dFRva2VucyI6NDQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo4MiwiVG9vbENhbGxzIjpbImNvZGVzZWFyY2gtZGlyLWluZGV4Il19LHsiU3RhcnRlZCI6IjIwMjYtMDctMTFUMTc6MzQ6MzguNzUwNzI5NTU4WiIsIlNlcSI6MzAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIzMzA5MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL2RwbGwvemwzMDczeC9pMmMuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAxLFxuICBcIkxpbmVDb3VudFwiOiA1MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgICAxOlxcdC8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcXG4gICAyOlxcdFxcbiAgIDM6XFx0I2luY2x1ZGUgXFx1MDAzY2xpbnV4L2Rldl9wcmludGsuaFxcdTAwM2VcXG4gICA0OlxcdCNpbmNsdWRlIFxcdTAwM2NsaW51eC9lcnIuaFxcdTAwM2VcXG4gICA1OlxcdCNpbmNsdWRlIFxcdTAwM2NsaW51eC9pMmMuaFxcdTAwM2VcXG4gICA2OlxcdCNpbmNsdWRlIFxcdTAwM2NsaW51eC9tb2R1bGUuaFxcdTAwM2VcXG4gICA3OlxcdCNpbmNsdWRlIFxcdTAwM2NsaW51eC9yZWdtYXAuaFxcdTAwM2VcXG4gICA4OlxcdFxcbiAgIDk6XFx0I2luY2x1ZGUgXFxcImNvcmUuaFxcXCJcXG4gIDEwOlxcdFxcbiAgMTE6XFx0c3RhdGljIGludCB6bDMwNzN4X2kyY19wcm9iZShzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50KVxcbiAgMTI6XFx0e1xcbiAgMTM6XFx0XFx0c3RydWN0IGRldmljZSAqZGV2ID0gXFx1MDAyNmNsaWVudC1cXHUwMDNlZGV2O1xcbiAgMTQ6XFx0XFx0c3RydWN0IHpsMzA3M3hfZGV2ICp6bGRldjtcXG4gIDE1OlxcdFxcbiAgMTY6XFx0XFx0emxkZXYgPSB6bDMwNzN4X2Rldm1fYWxsb2MoZGV2KTtcXG4gIDE3OlxcdFxcdGlmIChJU19FUlIoemxkZXYpKVxcbiAgMTg6XFx0XFx0XFx0cmV0dXJuIFBUUl9FUlIoemxkZXYpO1xcbiAgMTk6XFx0XFxuICAyMDpcXHRcXHR6bGRldi1cXHUwMDNlcmVnbWFwID0gZGV2bV9yZWdtYXBfaW5pdF9pMmMoY2xpZW50LCBcXHUwMDI2emwzMDczeF9yZWdtYXBfY29uZmlnKTtcXG4gIDIxOlxcdFxcdGlmIChJU19FUlIoemxkZXYtXFx1MDAzZXJlZ21hcCkpXFxuICAyMjpcXHRcXHRcXHRyZXR1cm4gZGV2X2Vycl9wcm9iZShkZXYsIFBUUl9FUlIoemxkZXYtXFx1MDAzZXJlZ21hcCksXFxuICAyMzpcXHRcXHRcXHRcXHRcXHQgICAgIFxcXCJGYWlsZWQgdG8gaW5pdGlhbGl6ZSByZWdtYXBcXFxcblxcXCIpO1xcbiAgMjQ6XFx0XFxuICAyNTpcXHRcXHRyZXR1cm4gemwzMDczeF9kZXZfcHJvYmUoemxkZXYpO1xcbiAgMjY6XFx0fVxcbiAgMjc6XFx0XFxuICAyODpcXHRzdGF0aWMgY29uc3Qgc3RydWN0IGkyY19kZXZpY2VfaWQgemwzMDczeF9pMmNfaWRbXSA9IHtcXG4gIDI5OlxcdFxcdHsgLm5hbWUgPSBcXFwiemwzMDczMVxcXCIgfSxcXG4gIDMwOlxcdFxcdHsgLm5hbWUgPSBcXFwiemwzMDczMlxcXCIgfSxcXG4gIDMxOlxcdFxcdHsgLm5hbWUgPSBcXFwiemwzMDczM1xcXCIgfSxcXG4gIDMyOlxcdFxcdHsgLm5hbWUgPSBcXFwiemwzMDczNFxcXCIgfSxcXG4gIDMzOlxcdFxcdHsgLm5hbWUgPSBcXFwiemwzMDczNVxcXCIgfSxcXG4gIDM0OlxcdFxcdHsgLyogc2VudGluZWwgKi8gfVxcbiAgMzU6XFx0fTtcXG4gIDM2OlxcdE1PRFVMRV9ERVZJQ0VfVEFCTEUoaTJjLCB6bDMwNzN4X2kyY19pZCk7XFxuICAzNzpcXHRcXG4gIDM4OlxcdHN0YXRpYyBjb25zdCBzdHJ1Y3Qgb2ZfZGV2aWNlX2lkIHpsMzA3M3hfaTJjX29mX21hdGNoW10gPSB7XFxuICAzOTpcXHRcXHR7IC5jb21wYXRpYmxlID0gXFxcIm1pY3JvY2hpcCx6bDMwNzMxXFxcIiB9LFxcbiAgNDA6XFx0XFx0eyAuY29tcGF0aWJsZSA9IFxcXCJtaWNyb2NoaXAsemwzMDczMlxcXCIgfSxcXG4gIDQxOlxcdFxcdHsgLmNvbXBhdGlibGUgPSBcXFwibWljcm9jaGlwLHpsMzA3MzNcXFwiIH0sXFxuICA0MjpcXHRcXHR7IC5jb21wYXRpYmxlID0gXFxcIm1pY3JvY2hpcCx6bDMwNzM0XFxcIiB9LFxcbiAgNDM6XFx0XFx0eyAuY29tcGF0aWJsZSA9IFxcXCJtaWNyb2NoaXAsemwzMDczNVxcXCIgfSxcXG4gIDQ0OlxcdFxcdHsgLyogc2VudGluZWwgKi8gfVxcbiAgNDU6XFx0fTtcXG4gIDQ2OlxcdE1PRFVMRV9ERVZJQ0VfVEFCTEUob2YsIHpsMzA3M3hfaTJjX29mX21hdGNoKTtcXG4gIDQ3OlxcdFxcbiAgNDg6XFx0c3RhdGljIHN0cnVjdCBpMmNfZHJpdmVyIHpsMzA3M3hfaTJjX2RyaXZlciA9IHtcXG4gIDQ5OlxcdFxcdC5kcml2ZXIgPSB7XFxuICA1MDpcXHRcXHRcXHQubmFtZSA9IFxcXCJ6bDMwNzN4LWkyY1xcXCIsXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTExVDE3OjM0OjM4Ljc1MDk2NzI2OFoiLCJTZXEiOjMxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNzMzNzE0NDg2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBTeXprYWxsZXIncyBJMkMgRGV2aWNlIEluc3RhbnRpYXRpb24gQ2FwYWJpbGl0aWVzKipcblxuT2theSwgc28gSSdtIHRoaW5raW5nLCB5ZXMsIHN5emthbGxlciAqY2FuKiBkZWZpbml0ZWx5IGhhbmRsZSB0aGUgaW5zdGFudGlhdGlvbiBvZiB0aGlzIGRldmljZSwgdGhlIFpMMzA3M1gsIHVzaW5nIG5ldGxpbmssIHNwZWNpZmljYWxseSB0aHJvdWdoIGBJMkNfTkVXX0RFVklDRWAgb3IgYSBzaW1pbGFyIG1ldGhvZCwgb3IgZXZlbiB2aWEgc3lzZnMgYW5kIHRoZSBgbmV3X2RldmljZWAgZW50cnkuIEhhbmcgb24uLi4gaXNuJ3QgdGhlcmUgYWxyZWFkeSBzdXBwb3J0IGZvciB0aGF0IGluIHN5emthbGxlciB2aWEgc3lzZnM/IFRoYXQncyByaWdodCwgdGhlcmUgaXMuIEV4Y2VsbGVudCEgVGhhdCBtYWtlcyBgWkwzMDczWF9JMkNgIGEgdmVyeSBzZW5zaWJsZSBjb25maWd1cmF0aW9uIHRvIGVuYWJsZS4gTm93LCBsZXQncyBqdXN0IHNoaWZ0IGdlYXJzIGFuZCBxdWlja2x5IHRha2UgYSBsb29rIGF0IHRoZSBgWkwzMDczWF9TUElgIGNvbmZpZyBhbmQgc2VlIHdoYXQncyB3aGF0LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMDQwMSwiT3V0cHV0VG9rZW5zIjo0MiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjg5LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMTFUMTc6MzQ6NDIuNDg0NjgzOTQ0WiIsIlNlcSI6MzIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE2NTE5MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL2RwbGwvemwzMDczeC9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDE3LFxuICBcIkxpbmVDb3VudFwiOiAyMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgIDE3OlxcdGNvbmZpZyBaTDMwNzNYX0kyQ1xcbiAgMTg6XFx0XFx0dHJpc3RhdGUgXFxcIkkyQyBidXMgaW1wbGVtZW50YXRpb24gZm9yIE1pY3JvY2hpcCBBenVyaXRlIGRldmljZXNcXFwiXFxuICAxOTpcXHRcXHRkZXBlbmRzIG9uIEkyQyBcXHUwMDI2XFx1MDAyNiBORVRcXG4gIDIwOlxcdFxcdHNlbGVjdCBSRUdNQVBfSTJDXFxuICAyMTpcXHRcXHRzZWxlY3QgWkwzMDczWFxcbiAgMjI6XFx0XFx0aGVscFxcbiAgMjM6XFx0XFx0ICBUaGlzIGlzIEkyQyBidXMgaW1wbGVtZW50YXRpb24gZm9yIE1pY3JvY2hpcCBBenVyaXRlIERQTEwvUFRQL1N5bmNFXFxuICAyNDpcXHRcXHQgIGRldmljZXMuXFxuICAyNTpcXHRcXG4gIDI2OlxcdFxcdCAgVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlIG1vZHVsZSB3aWxsXFxuICAyNzpcXHRcXHQgIGJlIGNhbGxlZCB6bDMwNzN4X2kyYy5cXG4gIDI4OlxcdFxcbiAgMjk6XFx0Y29uZmlnIFpMMzA3M1hfU1BJXFxuICAzMDpcXHRcXHR0cmlzdGF0ZSBcXFwiU1BJIGJ1cyBpbXBsZW1lbnRhdGlvbiBmb3IgTWljcm9jaGlwIEF6dXJpdGUgZGV2aWNlc1xcXCJcXG4gIDMxOlxcdFxcdGRlcGVuZHMgb24gTkVUIFxcdTAwMjZcXHUwMDI2IFNQSVxcbiAgMzI6XFx0XFx0c2VsZWN0IFJFR01BUF9TUElcXG4gIDMzOlxcdFxcdHNlbGVjdCBaTDMwNzNYXFxuICAzNDpcXHRcXHRoZWxwXFxuICAzNTpcXHRcXHQgIFRoaXMgaXMgU1BJIGJ1cyBpbXBsZW1lbnRhdGlvbiBmb3IgTWljcm9jaGlwIEF6dXJpdGUgRFBMTC9QVFAvU3luY0VcXG4gIDM2OlxcdFxcdCAgZGV2aWNlcy5cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTFUMTc6MzQ6NDIuNDg0ODUxMzQ0WiIsIlNlcSI6MzMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjU0MTYwMTk5ODQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQW5hbHlzaXMgb2YgRFBMTCBOZXRsaW5rIEludGVyZmFjZSBSZWFjaGFiaWxpdHkqKlxuXG5Pa2F5LCBoZXJlJ3MgaG93IEknbSB0aGlua2luZyB0aHJvdWdoIHRoaXMuIEVuYWJsaW5nIGJvdGggYFpMMzA3M1hfSTJDYCBhbmQgYFpMMzA3M1hfU1BJYCBlZmZlY3RpdmVseSB0cmlnZ2VycyB0aGUgYFpMMzA3M1hgIHNlbGVjdGlvbiwgd2hpY2ggaW4gdHVybiBtZWFucyB0aGUgYERQTExgIHN1YnN5c3RlbSBnZXRzIGFjdGl2YXRlZC4gIE15IHByaW1hcnkgY29uY2VybiBpcyBtYWtpbmcgdGhlIERQTEwgbmV0bGluayBpbnRlcmZhY2UgYWNjZXNzaWJsZSBhbmQsIGNydWNpYWxseSwgdGVzdGFibGUsIGVzcGVjaWFsbHkgZ2l2ZW4gdGhlIGxpa2VsaWhvb2Qgb2YgU3l6a2FsbGVyIHRhcmdldGluZyBpdC5cblxuTm93LCBsZXQncyBkcmlsbCBkb3duLiBJJ20gZm9jdXNpbmcgb24gd2hldGhlciBgZHBsbF9tc2dfYWRkX3Bpbl9yZWZfc3luY2AgaXMgcmVhY2hhYmxlLiAgSSBzZWUgdGhhdCBpdCdzIGNhbGxlZCBieSBgZHBsbF9jbWRfcGluX2dldF9vbmVgLCB3aGljaCBpcyBpdHNlbGYgY2FsbGVkIGJ5IGBkcGxsX25sX3Bpbl9nZXRfZG9pdGAgYW5kIGBkcGxsX25sX3Bpbl9nZXRfZHVtcGl0YC4gIFRob3NlIGZ1bmN0aW9ucyBhcmUsIG9mIGNvdXJzZSwgdGhlIG5ldGxpbmsgaGFuZGxlcnMgZm9yIHRoZSBgRFBMTF9DTURfUElOX0dFVGAgY29tbWFuZC4gR2l2ZW4gU3l6a2FsbGVyJ3MgYWdncmVzc2l2ZSBmdXp6aW5nIG9mIG5ldGxpbmssIG15IGV4cGVjdGF0aW9uIGlzIHRoYXQgdGhpcyBjb2RlIHdpbGwgKmRlZmluaXRlbHkqIGJlIGhpdCBpZiB0aGUgRFBMTCBzdWJzeXN0ZW0gaXMgYWN0aXZlIGFuZCBhIGRldmljZSBpcyByZWdpc3RlcmVkLiAgVGhpcyBpcyBiYXNlZCBvbiB0aGUgbmF0dXJlIG9mIHRoZSBmdXp6ZXIuXG5cbkknbSBtYWtpbmcgYSBtZW50YWwgbm90ZSB0byB2ZXJpZnkgdGhhdCBgZHBsbF9tc2dfYWRkX3Bpbl9yZWZfc3luY2AgaXMgaW5kZWVkIHByZXNlbnQgaW4gYGRyaXZlcnMvZHBsbC9kcGxsX25ldGxpbmsuY2AsIHdoaWNoIEknbGwgYmUgY29uZmlybWluZyBzaG9ydGx5LiBUaGlzIGlzIHRvIHZlcmlmeSB0aGUgYXNzdW1wdGlvbnMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjExMDA4LCJPdXRwdXRUb2tlbnMiOjQyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjE2LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMTFUMTc6MzQ6NDcuOTAwODczNjQ4WiIsIlNlcSI6MzQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI1NjA5MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL2RwbGwvZHBsbF9uZXRsaW5rLmNcIixcbiAgXCJGaXJzdExpbmVcIjogNTUxLFxuICBcIkxpbmVDb3VudFwiOiAzMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgNTUxOlxcdHN0YXRpYyBpbnRcXG4gNTUyOlxcdGRwbGxfbXNnX2FkZF9waW5fcmVmX3N5bmMoc3RydWN0IHNrX2J1ZmYgKm1zZywgc3RydWN0IGRwbGxfcGluICpwaW4sXFxuIDU1MzpcXHRcXHRcXHRcXHQgIHN0cnVjdCBkcGxsX3Bpbl9yZWYgKnJlZixcXG4gNTU0OlxcdFxcdFxcdFxcdCAgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKVxcbiA1NTU6XFx0e1xcbiA1NTY6XFx0XFx0Y29uc3Qgc3RydWN0IGRwbGxfcGluX29wcyAqb3BzID0gZHBsbF9waW5fb3BzKHJlZik7XFxuIDU1NzpcXHRcXHRzdHJ1Y3QgZHBsbF9kZXZpY2UgKmRwbGwgPSByZWYtXFx1MDAzZWRwbGw7XFxuIDU1ODpcXHRcXHR2b2lkICpwaW5fcHJpdiwgKnJlZl9zeW5jX3Bpbl9wcml2O1xcbiA1NTk6XFx0XFx0c3RydWN0IGRwbGxfcGluICpyZWZfc3luY19waW47XFxuIDU2MDpcXHRcXHRlbnVtIGRwbGxfcGluX3N0YXRlIHN0YXRlO1xcbiA1NjE6XFx0XFx0c3RydWN0IG5sYXR0ciAqbmVzdDtcXG4gNTYyOlxcdFxcdHVuc2lnbmVkIGxvbmcgaW5kZXg7XFxuIDU2MzpcXHRcXHRpbnQgcmV0O1xcbiA1NjQ6XFx0XFxuIDU2NTpcXHRcXHRwaW5fcHJpdiA9IGRwbGxfcGluX29uX2RwbGxfcHJpdihkcGxsLCBwaW4pO1xcbiA1NjY6XFx0XFx0eGFfZm9yX2VhY2goXFx1MDAyNnBpbi1cXHUwMDNlcmVmX3N5bmNfcGlucywgaW5kZXgsIHJlZl9zeW5jX3Bpbikge1xcbiA1Njc6XFx0XFx0XFx0aWYgKCFkcGxsX3Bpbl9hdmFpbGFibGUocmVmX3N5bmNfcGluKSlcXG4gNTY4OlxcdFxcdFxcdFxcdGNvbnRpbnVlO1xcbiA1Njk6XFx0XFx0XFx0cmVmX3N5bmNfcGluX3ByaXYgPSBkcGxsX3Bpbl9vbl9kcGxsX3ByaXYoZHBsbCwgcmVmX3N5bmNfcGluKTtcXG4gNTcwOlxcdFxcdFxcdC8qIFBpbiBtYXkgaGF2ZSBiZWVuIHVucmVnaXN0ZXJlZCBmcm9tIHRoaXMgZHBsbCBhbHJlYWR5ICovXFxuIDU3MTpcXHRcXHRcXHRpZiAoIXJlZl9zeW5jX3Bpbl9wcml2KVxcbiA1NzI6XFx0XFx0XFx0XFx0Y29udGludWU7XFxuIDU3MzpcXHRcXHRcXHRpZiAoV0FSTl9PTighb3BzLVxcdTAwM2VyZWZfc3luY19nZXQpKVxcbiA1NzQ6XFx0XFx0XFx0XFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xcbiA1NzU6XFx0XFx0XFx0cmV0ID0gb3BzLVxcdTAwM2VyZWZfc3luY19nZXQocGluLCBwaW5fcHJpdiwgcmVmX3N5bmNfcGluLFxcbiA1NzY6XFx0XFx0XFx0XFx0XFx0XFx0cmVmX3N5bmNfcGluX3ByaXYsIFxcdTAwMjZzdGF0ZSwgZXh0YWNrKTtcXG4gNTc3OlxcdFxcdFxcdGlmIChyZXQpXFxuIDU3ODpcXHRcXHRcXHRcXHRyZXR1cm4gcmV0O1xcbiA1Nzk6XFx0XFx0XFx0bmVzdCA9IG5sYV9uZXN0X3N0YXJ0KG1zZywgRFBMTF9BX1BJTl9SRUZFUkVOQ0VfU1lOQyk7XFxuIDU4MDpcXHRcXHRcXHRpZiAoIW5lc3QpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTExVDE3OjM0OjQ3LjkwMTEzMjM0OFoiLCJTZXEiOjM1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo3MTAwMTQwMzczLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBhIEtlcm5lbCBQYXRjaDogQSBUaG91Z2h0IFByb2Nlc3MqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIGtlcm5lbCBwYXRjaC4gSXQgc2VlbXMgbGlrZSBpdCdzIGFkZHJlc3NpbmcgYSBwb3RlbnRpYWwgdnVsbmVyYWJpbGl0eS4gU3BlY2lmaWNhbGx5LCBpdCdzIGFkZGluZyBhIGNoZWNrOlxuXG5gYGBjXG5cdFx0LyogUGluIG1heSBoYXZlIGJlZW4gdW5yZWdpc3RlcmVkIGZyb20gdGhpcyBkcGxsIGFscmVhZHkgKi9cblx0XHRpZiAoIXJlZl9zeW5jX3Bpbl9wcml2KVxuXHRcdFx0Y29udGludWU7XG5gYGBcblxuVGhpcyBpcyBzbWFydC4gSXQgcHJldmVudHMgYSBOVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2UsIG9yIHNvbWV0aGluZyBzaW1pbGFyLCBsYXRlciBvbiB3aGVuIHRoZSBjb2RlIHVzZXMgYHJlZl9zeW5jX3Bpbl9wcml2YC4gR29vZCBjYXRjaCEgVGhhdCB2YXJpYWJsZSBnZXRzIHBhc3NlZCB0byBgb3BzLVx1MDAzZXJlZl9zeW5jX2dldGAsIGFuZCBpZiBpdCB3ZXJlIE5VTEwsIHRoZSBkcml2ZXIgY291bGQgZGVmaW5pdGVseSBjcmFzaC4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlLCBkZWZpbml0ZWx5IHNvbWV0aGluZyB3b3J0aCBmdXp6aW5nIHRvIG1ha2Ugc3VyZSBpdCdzIHJvYnVzdC5cblxuTm93LCBsZXQgbWUgc2VlIGlmIHRoZXJlIGFyZSBhbnkgb3RoZXIgY29uZmlndXJhdGlvbiBvcHRpb25zIEkgc2hvdWxkIGVuYWJsZSB3aXRoIHRoaXMgcGF0Y2guIEl0IGxvb2tzIGxpa2UgYERQTExgIGlzIHNlbGVjdGVkIGJ5IHNldmVyYWwgb3RoZXIgY29uZmlndXJhdGlvbnMgbGlrZSBgWkwzMDczWF9JMkNgLCBgWkwzMDczWF9TUElgLCBgTUxYNV9EUExMYCwgYFBUUF8xNTg4X0NMT0NLX09DUGAsIGFuZCBgSUNFYC4gVGhlIGBaTDMwNzNYX0kyQ2AgYW5kIGBaTDMwNzNYX1NQSWAgY29uZmlndXJhdGlvbnMgYXJlIGlkZWFsIGZvciB0ZXN0aW5nIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBiZWNhdXNlIHRoZXkgY2FuIHVzZSBJMkMvU1BJIG1vY2sgaW50ZXJmYWNlcy4gSSdsbCBhZGQgdGhvc2UgdG8gdGhlIGJ1aWxkLiBJJ2xsIGFsc28gYWRkIGBEUExMYCBzaW5jZSBpdCdzIGEgYm9vbGVhbiB2YWx1ZS4gV2FpdCwgdGhlIGBzZXQtcmVzdWx0c2AgZG9jdW1lbnRhdGlvbiBzYXlzIG5vdCB0byBpbmNsdWRlIHRoZSBcIkNPTkZJR19cIiBwcmVmaXgsIHNvIEknbGwganVzdCB1c2UgdGhlIGJhc2UgbmFtZXM6IGBaTDMwNzNYX0kyQ2AsIGBaTDMwNzNYX1NQSWAsIGFuZCBgRFBMTGAuXG5cbk5leHQsIEkgbmVlZCB0byBjaGVjayB0aGUgY29kZSB0aGF0J3MgcmVsYXRlZCB0byB0aGlzIGNoZWNrLiBJJ2xsIGxvb2sgYXQgYGRwbGxfbXNnX2FkZF9waW5fcmVmX3N5bmNgIGluIGBkcml2ZXJzL2RwbGwvZHBsbF9uZXRsaW5rLmNgLiBJdCdzIGEgc3RhdGljIGZ1bmN0aW9uLCBhbmQgaXQncyBjYWxsZWQgYnkgYGRwbGxfY21kX3Bpbl9nZXRfb25lYC4gT2theSwgbGV0J3MgdGFrZSBhIGxvb2sgYXQgdGhhdCBmdW5jdGlvbiBuZXh0IHRvIHNlZSB0aGUgY29udGV4dC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTIxODYsIk91dHB1dFRva2VucyI6NDIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozOTAsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0xMVQxNzozNDo1NS4wMDEzMTY1ODFaIiwiU2VxIjozNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjQyNDcwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImRyaXZlcnMvZHBsbC9kcGxsX25ldGxpbmsuY1wiLFxuICBcIkZpcnN0TGluZVwiOiA2OTQsXG4gIFwiTGluZUNvdW50XCI6IDMwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiA2OTQ6XFx0c3RhdGljIGludFxcbiA2OTU6XFx0ZHBsbF9jbWRfcGluX2dldF9vbmUoc3RydWN0IHNrX2J1ZmYgKm1zZywgc3RydWN0IGRwbGxfcGluICpwaW4sXFxuIDY5NjpcXHRcXHRcXHQgICAgIHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjaylcXG4gNjk3OlxcdHtcXG4gNjk4OlxcdFxcdGNvbnN0IHN0cnVjdCBkcGxsX3Bpbl9wcm9wZXJ0aWVzICpwcm9wID0gXFx1MDAyNnBpbi1cXHUwMDNlcHJvcDtcXG4gNjk5OlxcdFxcdHN0cnVjdCBkcGxsX3Bpbl9yZWYgKnJlZjtcXG4gNzAwOlxcdFxcdGludCByZXQ7XFxuIDcwMTpcXHRcXG4gNzAyOlxcdFxcdHJlZiA9IGRwbGxfeGFfcmVmX2RwbGxfZmlyc3QoXFx1MDAyNnBpbi1cXHUwMDNlZHBsbF9yZWZzKTtcXG4gNzAzOlxcdFxcdEFTU0VSVF9OT1RfTlVMTChyZWYpO1xcbiA3MDQ6XFx0XFxuIDcwNTpcXHRcXHRyZXQgPSBkcGxsX21zZ19hZGRfcGluX2hhbmRsZShtc2csIHBpbik7XFxuIDcwNjpcXHRcXHRpZiAocmV0KVxcbiA3MDc6XFx0XFx0XFx0cmV0dXJuIHJldDtcXG4gNzA4OlxcdFxcdGlmIChubGFfcHV0X3N0cmluZyhtc2csIERQTExfQV9QSU5fTU9EVUxFX05BTUUsXFxuIDcwOTpcXHRcXHRcXHRcXHQgICBwaW4tXFx1MDAzZW1vZHVsZV9uYW1lKSlcXG4gNzEwOlxcdFxcdFxcdHJldHVybiAtRU1TR1NJWkU7XFxuIDcxMTpcXHRcXHRpZiAobmxhX3B1dF82NGJpdChtc2csIERQTExfQV9QSU5fQ0xPQ0tfSUQsIHNpemVvZihwaW4tXFx1MDAzZWNsb2NrX2lkKSxcXG4gNzEyOlxcdFxcdFxcdFxcdCAgXFx1MDAyNnBpbi1cXHUwMDNlY2xvY2tfaWQsIERQTExfQV9QSU5fUEFEKSlcXG4gNzEzOlxcdFxcdFxcdHJldHVybiAtRU1TR1NJWkU7XFxuIDcxNDpcXHRcXHRpZiAocHJvcC1cXHUwMDNlYm9hcmRfbGFiZWwgXFx1MDAyNlxcdTAwMjZcXG4gNzE1OlxcdFxcdCAgICBubGFfcHV0X3N0cmluZyhtc2csIERQTExfQV9QSU5fQk9BUkRfTEFCRUwsIHByb3AtXFx1MDAzZWJvYXJkX2xhYmVsKSlcXG4gNzE2OlxcdFxcdFxcdHJldHVybiAtRU1TR1NJWkU7XFxuIDcxNzpcXHRcXHRpZiAocHJvcC1cXHUwMDNlcGFuZWxfbGFiZWwgXFx1MDAyNlxcdTAwMjZcXG4gNzE4OlxcdFxcdCAgICBubGFfcHV0X3N0cmluZyhtc2csIERQTExfQV9QSU5fUEFORUxfTEFCRUwsIHByb3AtXFx1MDAzZXBhbmVsX2xhYmVsKSlcXG4gNzE5OlxcdFxcdFxcdHJldHVybiAtRU1TR1NJWkU7XFxuIDcyMDpcXHRcXHRpZiAocHJvcC1cXHUwMDNlcGFja2FnZV9sYWJlbCBcXHUwMDI2XFx1MDAyNlxcbiA3MjE6XFx0XFx0ICAgIG5sYV9wdXRfc3RyaW5nKG1zZywgRFBMTF9BX1BJTl9QQUNLQUdFX0xBQkVMLFxcbiA3MjI6XFx0XFx0XFx0XFx0ICAgcHJvcC1cXHUwMDNlcGFja2FnZV9sYWJlbCkpXFxuIDcyMzpcXHRcXHRcXHRyZXR1cm4gLUVNU0dTSVpFO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xMVQxNzozNDo1NS4wMDE1NjE1NDFaIiwiU2VxIjozNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NjI4MjA1ODQ5MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgRFBMTCBOZXRsaW5rIEhhbmRsZXIgSW50ZXJhY3Rpb25zKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBgZHBsbF9ubF9waW5fZ2V0X2RvaXRgIGZ1bmN0aW9uIOKAkyB0aGF0J3Mgb3VyIG5ldGxpbmsgaGFuZGxlciwgdGhlIGVudHJ5IHBvaW50IGZvciB0aGlzIHBhcnRpY3VsYXIgb3BlcmF0aW9uLiBNeSBmaXJzdCB0aG91Z2h0IGlzIHRvIG1ha2Ugc3VyZSB3ZSdyZSB0cmFja2luZyB0aGlzIHByb3Blcmx5LCBzbyBJJ2xsIGFkZCBgZHBsbF9ubF9waW5fZ2V0X2RvaXRgIGFuZCBpdHMgY29tcGFuaW9uIGBkcGxsX25sX3Bpbl9nZXRfZHVtcGl0YCB0byBgRm9jdXNTeW1ib2xzYC4gV2hpbGUgSSdtIGF0IGl0LCBJJ2xsIGluY2x1ZGUgYGRwbGxfbXNnX2FkZF9waW5fcmVmX3N5bmNgIGFuZCBgZHBsbF9jbWRfcGluX2dldF9vbmVgIGFzIHdlbGwsIHNpbmNlIHRoZXkgc2VlbSByZWxhdGVkLlxuXG5Ob3csIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQncyAqdHJpZ2dlcmluZyogdGhpcyBuZXRsaW5rIGludGVyYWN0aW9uLiBJIG5lZWQgdG8ga25vdyBpZiB0aGVyZSBhcmUgb3RoZXIgRFBMTCBuZXRsaW5rIGhhbmRsZXJzIGludm9sdmVkIGluIHRoaXMgc2FtZSBmbG93LiBMb29raW5nIGEgbGl0dGxlIGRlZXBlciwgSSBzZWUgdGhhdCBgZHBsbF9waW5fZXZlbnRfc2VuZGAgY2FsbHMgYGRwbGxfY21kX3Bpbl9nZXRfb25lYCBhbmQgdGhhdCdzIHRyaWdnZXJlZCBieSBhIHBpbiBldmVudCwgd2hpY2ggaXMgYW4gaW1wb3J0YW50IGNsdWUuXG5cbkFscmlnaHQsIGxldCdzIGNvbmZpcm0gdGhlIGN1cnJlbnQgZW50cmllcyBpbiBgRm9jdXNTeW1ib2xzYC4gU28gZmFyLCBzbyBnb29kOlxuKiAgIGBkcGxsX21zZ19hZGRfcGluX3JlZl9zeW5jYFxuKiAgIGBkcGxsX2NtZF9waW5fZ2V0X29uZWBcbiogICBgZHBsbF9ubF9waW5fZ2V0X2RvaXRgXG4qICAgYGRwbGxfbmxfcGluX2dldF9kdW1waXRgXG5cbk5leHQsIEkgbmVlZCB0byBtYWtlIHN1cmUgd2UncmUgb24gdGhlIHJpZ2h0IHRyYWNrIHdpdGggdGhlIGNvbmZpZ3VyYXRpb24uIEkgd2FudCB0byB2ZXJpZnkgdGhhdCBgWkwzMDczWF9JMkNgIGFuZCBgWkwzMDczWF9TUElgIGFyZSBpbmRlZWQgdGhlIGNvcnJlY3QgY29uZmlncyBmb3IgdGhpcy4gQWgsIHllcywgdGhleSBzZWxlY3QgYFpMMzA3M1hgLCB3aGljaCB0aGVuIHNlbGVjdHMgYERQTExgIOKAkyB0aGF0IG1ha2VzIHNlbnNlLlxuXG5KdXN0IHRvIGJlIGFic29sdXRlbHkgc3VyZSwgSSdtIGdvaW5nIHRvIHF1aWNrbHkgY2hlY2sgYGRyaXZlcnMvZHBsbC9LY29uZmlnYCBhZ2FpbiB0byBtYWtlIHN1cmUgdGhlcmUgaXNuJ3QgYW5vdGhlciB2aXJ0dWFsIERQTEwgZHJpdmVyIHRoYXQgSSd2ZSBtaXNzZWQuIEkgbmVlZCB0byBiZSBjb21wbGV0ZWx5IHRob3JvdWdoIGhlcmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEzNjUzLCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzA1LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMTFUMTc6MzU6MDEuMjgzNjIyOTczWiIsIlNlcSI6MzgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEyMzg4MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL2RwbGwvS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiAxLFxuICBcIkxpbmVDb3VudFwiOiAzMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgICAxOlxcdCMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxcbiAgIDI6XFx0I1xcbiAgIDM6XFx0IyBHZW5lcmljIERQTEwgZHJpdmVycyBjb25maWd1cmF0aW9uXFxuICAgNDpcXHQjXFxuICAgNTpcXHRcXG4gICA2OlxcdG1lbnUgXFxcIkRQTEwgZGV2aWNlIHN1cHBvcnRcXFwiXFxuICAgNzpcXHRcXG4gICA4OlxcdGNvbmZpZyBEUExMXFxuICAgOTpcXHRcXHRib29sXFxuICAxMDpcXHRcXG4gIDExOlxcdGNvbmZpZyBEUExMX1JFRkNOVF9UUkFDS0VSXFxuICAxMjpcXHRcXHRib29sIFxcXCJEUExMIHJlZmVyZW5jZSBjb3VudCB0cmFja2luZ1xcXCJcXG4gIDEzOlxcdFxcdGRlcGVuZHMgb24gREVCVUdfS0VSTkVMIFxcdTAwMjZcXHUwMDI2IFNUQUNLVFJBQ0VfU1VQUE9SVCBcXHUwMDI2XFx1MDAyNiBEUExMXFxuICAxNDpcXHRcXHRzZWxlY3QgUkVGX1RSQUNLRVJcXG4gIDE1OlxcdFxcdGhlbHBcXG4gIDE2OlxcdFxcdCAgRW5hYmxlIHJlZmVyZW5jZSBjb3VudCB0cmFja2luZyBmb3IgRFBMTCBkZXZpY2VzIGFuZCBwaW5zLlxcbiAgMTc6XFx0XFx0ICBUaGlzIGhlbHBzIGRlYnVnZ2luZyByZWZlcmVuY2UgbGVha3MgYW5kIHVzZS1hZnRlci1mcmVlIGJ1Z3NcXG4gIDE4OlxcdFxcdCAgYnkgcmVjb3JkaW5nIHN0YWNrIHRyYWNlcyBmb3IgZWFjaCBnZXQvcHV0IG9wZXJhdGlvbi5cXG4gIDE5OlxcdFxcbiAgMjA6XFx0XFx0ICBUaGUgdHJhY2tpbmcgaW5mb3JtYXRpb24gaXMgZXhwb3NlZCB2aWEgZGVidWdmcyBhdDpcXG4gIDIxOlxcdFxcdCAgICAvc3lzL2tlcm5lbC9kZWJ1Zy9yZWZfdHJhY2tlci9kcGxsX2RldmljZV8qXFxuICAyMjpcXHRcXHQgICAgL3N5cy9rZXJuZWwvZGVidWcvcmVmX3RyYWNrZXIvZHBsbF9waW5fKlxcbiAgMjM6XFx0XFxuICAyNDpcXHRcXHQgIElmIHVuc3VyZSwgc2F5IE4uXFxuICAyNTpcXHRcXG4gIDI2OlxcdHNvdXJjZSBcXFwiZHJpdmVycy9kcGxsL3psMzA3M3gvS2NvbmZpZ1xcXCJcXG4gIDI3OlxcdFxcbiAgMjg6XFx0ZW5kbWVudVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xMVQxNzozNTowMS4yODM3NDkzNTNaIiwiU2VxIjozOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6ODU4MTg3MzU4MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBbmFseXNpcyBvZiB0aGUgRFBMTCBEcml2ZXIgUGF0Y2gqKlxuXG5Pa2F5LCBzbyBJIHNlZSB0aGlzIHBhdGNoIGlzIGFkZHJlc3NpbmcgYSBwb3RlbnRpYWwgaXNzdWUgd2l0aGluIHRoZSBgZHJpdmVycy9kcGxsYCBkaXJlY3RvcnksIHNwZWNpZmljYWxseSBjb25jZXJuaW5nIHRoZSBgWkwzMDczWGAgZHJpdmVyLiBJJ20gbm90aW5nIHRoYXQgdGhlIGV4aXN0aW5nIGRyaXZlciBsaXN0IGluZGljYXRlcyBgWkwzMDczWGAgaXMgdGhlIG9ubHkgb25lIGluIHRoYXQgbG9jYXRpb24uIE15IGluaXRpYWwgYWN0aW9uIGlzIHRvIGFkZCBgWkwzMDczWF9JMkNgIGFuZCBgWkwzMDczWF9TUElgIHRvIHRoZSBgRW5hYmxlQ29uZmlnc2Agc2luY2UgdGhvc2UgY29uZmlndXJhdGlvbnMgYXJlIGNydWNpYWwgZm9yIHRoZSByZWxldmFudCBJMkMgYW5kIFNQSSBpbnRlcmZhY2VzLCBhbmQgdGhlcmVmb3JlLCBlc3NlbnRpYWwgZm9yIHRlc3RpbmcgdGhpcyBwcm9wZXJseS5cblxuTmV4dCwgSSBuZWVkIHRvIGNvbmZpcm0gdGhlIHJlYWNoYWJpbGl0eSBvZiBgZHBsbF9tc2dfYWRkX3Bpbl9yZWZfc3luY2AuIEEgcXVpY2sgY2hlY2sgc2hvd3MgdGhhdCBpdCAqaXMqIGluZGVlZCBjYWxsZWQgYnkgYGRwbGxfY21kX3Bpbl9nZXRfb25lYCwgd2hpY2ggaW4gdHVybiBpcyBjYWxsZWQgYnkgYm90aCBgZHBsbF9ubF9waW5fZ2V0X2RvaXRgIGFuZCBgZHBsbF9ubF9waW5fZ2V0X2R1bXBpdGAuIFRoYXQgY29uZmlybXMgaXQncyB3aXRoaW4gdGhlIGNvbW1hbmQgcGF0aCB3ZSdyZSBjb25jZXJuZWQgd2l0aCBoZXJlLiBJIHNlZSB0aGF0IHRoZSBwYXRjaCdzIHB1cnBvc2UgaXMgdG8gZml4IGEgYnVnIHdoZXJlIGByZWZfc3luY19waW5fcHJpdmAgY291bGQgYmUgTlVMTCwgd2hpY2ggb2YgY291cnNlIHdvdWxkIGxlYWQgdG8gYSBjcmFzaC4gVGhpcyBsb29rcyBsaWtlIGEgZnVuY3Rpb25hbCBjaGFuZ2Ug4oCTIGEgbmVjZXNzYXJ5IGNvcnJlY3Rpb24gdG8gbWFpbnRhaW4gc3RhYmlsaXR5IHdoZW4gaGFuZGxpbmcgRFBMTCBwaW4gcmVnaXN0cmF0aW9uL2RlcmVnaXN0cmF0aW9uIGFuZCBuZXRsaW5rIGNvbW1hbmRzLlxuXG5Ob3csIGxldCdzIHByZXBhcmUgdGhlIGZ1enppbmcgcmVzcG9uc2UuIEl0J3MgZGVmaW5pdGVseSBgV29ydGhGdXp6aW5nYCwgYmVjYXVzZSB3ZSd2ZSBpZGVudGlmaWVkIGEgdnVsbmVyYWJpbGl0eS5cblxuTXkgYEZvY3VzU3ltYm9sc2Agd2lsbCBiZTpcblxuKiAgIGBkcGxsX21zZ19hZGRfcGluX3JlZl9zeW5jYCAodGhlIHRhcmdldCBvZiB0aGUgcGF0Y2gpXG4qICAgYGRwbGxfY21kX3Bpbl9nZXRfb25lYFxuKiAgIGBkcGxsX25sX3Bpbl9nZXRfZG9pdGBcbiogICBgZHBsbF9ubF9waW5fZ2V0X2R1bXBpdGAgKGFzIHRoZXkgYXJlIHRoZSBjYWxsaW5nIGZ1bmN0aW9ucylcblxuQW5kIHRoZSBuZWNlc3NhcnkgYEVuYWJsZUNvbmZpZ3NgIHdpbGwgYmU6XG5cbiogICBgWkwzMDczWF9JMkNgXG4qICAgYFpMMzA3M1hfU1BJYFxuXG5GaW5hbGx5LCB0aGlzIHBhdGNoIGlzIGludHJvZHVjaW5nIGEgTlVMTCBjaGVjayB3aXRoaW4gYGRwbGxfbXNnX2FkZF9waW5fcmVmX3N5bmNgLiBUaGlzIHNhZmVndWFyZCBwcmV2ZW50cyBhIHBvdGVudGlhbCBOVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2Ugb3IgaW52YWxpZCBtZW1vcnkgYWNjZXNzIHNjZW5hcmlvIHdoZW4gYSBEUExMIHBpbiBoYXMgYmVlbiB1bnJlZ2lzdGVyZWQgZnJvbSB0aGUgc3lzdGVtLiBUaGlzIGRpcmVjdGx5IGltcGFjdHMgdGhlIERQTEwgbmV0bGluayBpbnRlcmZhY2UsIGFuZCBpdHMgcmVsZXZhbnQgY29tbWFuZHMgd2hpY2ggYXJlIGRpcmVjdGx5IGFjY2Vzc2libGUgZnJvbSB1c2VyIHNwYWNlLiBGdXp6aW5nIHRoaXMgd2lsbCByZXF1aXJlIGVuYWJsaW5nIERQTEwgZHJpdmVycywgbGlrZSB0aGUgTWljcm9jaGlwIEF6dXJpdGUgSTJDL1NQSSBkcml2ZXJzLCB3aGljaCBhcmUgZWFzaWx5IGluc3RhbnRpYXRlZCBpbiB2aXJ0dWFsIGVudmlyb25tZW50cyBmb3IgdGVzdGluZy4gSSBhbSByZWFkeSB0byBtb3ZlIGZvcndhcmQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE0ODA4LCJPdXRwdXRUb2tlbnMiOjIzOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM5MywiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTExVDE3OjM1OjA5Ljg2NTYyNTg2NloiLCJTZXEiOjQwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIyOTA2MDM0NywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiWkwzMDczWF9JMkNcIixcbiAgICBcIlpMMzA3M1hfU1BJXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiZHBsbF9tc2dfYWRkX3Bpbl9yZWZfc3luY1wiLFxuICAgIFwiZHBsbF9jbWRfcGluX2dldF9vbmVcIixcbiAgICBcImRwbGxfbmxfcGluX2dldF9kb2l0XCIsXG4gICAgXCJkcGxsX25sX3Bpbl9nZXRfZHVtcGl0XCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcyBhIE5VTEwgY2hlY2sgZm9yIGByZWZfc3luY19waW5fcHJpdmAgaW4gYGRwbGxfbXNnX2FkZF9waW5fcmVmX3N5bmNgIHRvIHByZXZlbnQgYSBwb3RlbnRpYWwgTlVMTCBwb2ludGVyIGRlcmVmZXJlbmNlIG9yIGludmFsaWQgbWVtb3J5IGFjY2VzcyB3aGVuIHRoZSBwaW4gaGFzIGJlZW4gdW5yZWdpc3RlcmVkIGZyb20gdGhlIERQTEwuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgRFBMTCBuZXRsaW5rIGludGVyZmFjZSwgd2hpY2ggaXMgcmVhY2hhYmxlIGZyb20gdXNlciBzcGFjZSB2aWEgbmV0bGluayBjb21tYW5kcyAoZS5nLiwgYERQTExfQ01EX1BJTl9HRVRgKS4gRnV6emluZyB0aGlzIHJlcXVpcmVzIGVuYWJsaW5nIERQTEwgZHJpdmVycywgc3VjaCBhcyB0aGUgTWljcm9jaGlwIEF6dXJpdGUgSTJDL1NQSSBkcml2ZXJzLCB3aGljaCBjYW4gYmUgaW5zdGFudGlhdGVkIGluIHZpcnR1YWwgZW52aXJvbm1lbnRzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIlpMMzA3M1hfSTJDXCIsXG4gICAgXCJaTDMwNzNYX1NQSVwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImRwbGxfbXNnX2FkZF9waW5fcmVmX3N5bmNcIixcbiAgICBcImRwbGxfY21kX3Bpbl9nZXRfb25lXCIsXG4gICAgXCJkcGxsX25sX3Bpbl9nZXRfZG9pdFwiLFxuICAgIFwiZHBsbF9ubF9waW5fZ2V0X2R1bXBpdFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHMgYSBOVUxMIGNoZWNrIGZvciBgcmVmX3N5bmNfcGluX3ByaXZgIGluIGBkcGxsX21zZ19hZGRfcGluX3JlZl9zeW5jYCB0byBwcmV2ZW50IGEgcG90ZW50aWFsIE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZSBvciBpbnZhbGlkIG1lbW9yeSBhY2Nlc3Mgd2hlbiB0aGUgcGluIGhhcyBiZWVuIHVucmVnaXN0ZXJlZCBmcm9tIHRoZSBEUExMLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIERQTEwgbmV0bGluayBpbnRlcmZhY2UsIHdoaWNoIGlzIHJlYWNoYWJsZSBmcm9tIHVzZXIgc3BhY2UgdmlhIG5ldGxpbmsgY29tbWFuZHMgKGUuZy4sIGBEUExMX0NNRF9QSU5fR0VUYCkuIEZ1enppbmcgdGhpcyByZXF1aXJlcyBlbmFibGluZyBEUExMIGRyaXZlcnMsIHN1Y2ggYXMgdGhlIE1pY3JvY2hpcCBBenVyaXRlIEkyQy9TUEkgZHJpdmVycywgd2hpY2ggY2FuIGJlIGluc3RhbnRpYXRlZCBpbiB2aXJ0dWFsIGVudmlyb25tZW50cy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLmR1cmF0aW9uIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnTGxtVG9rZW4gPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS50b2tlbnMgLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdUb29sRHVyID0gc3RhdHMudG9vbC5jb3VudCA+IDAgPyAoc3RhdHMudG9vbC5kdXJhdGlvbiAvIHN0YXRzLnRvb2wuY291bnQpLnRvRml4ZWQoMikgOiAwOwoKCQkJY29uc3QgbGxtU3VtYXJ5Q2VsbHMgPSBbc3RhdHMubGxtLmNvdW50LCBzdGF0cy5sbG0udG9rZW5zLCBhdmdMbG1Ub2tlbiwgc3RhdHMubGxtLmR1cmF0aW9uLCBhdmdMbG1EdXJdOwoJCQljb25zdCB0b29sU3VtbWFyeUNlbGxzID0gW3N0YXRzLnRvb2wuY291bnQsIHN0YXRzLnRvb2wuZHVyYXRpb24sIGF2Z1Rvb2xEdXJdOwoKCQkJY29uc3QgbGxtU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbGxtX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQlsbG1TdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgbGxtVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQlsbG1TdW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJbGxtVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJbGxtU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQobGxtVHIpOwoKCQkJY29uc3QgdG9vbFN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rvb2xfc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgdG9vbFRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJdG9vbFN1bW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJdG9vbFRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZCh0b29sVHIpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBmaWx0ZXJlZFN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBbImxsbSIsICJ0b29sIl0uaW5jbHVkZXMoZC5UeXBlKSk7CgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ0R1cmF0aW9uJyk7CgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7IAoKCQkJZmlsdGVyZWRTdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJCgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsKCQkJCWxldCB0b29sdGlwID0gcy5OYW1lOwoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIgJiYgcy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoJCQkJZGF0YS5hZGRSb3coW2Ake3MuU2VxfWAsIGR1ciwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1RpbWUgQ29uc3VtcHRpb24gb2YgTExNL1Rvb2wgQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTS9Ub29sIFN0ZXBzJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ1NlY29uZHMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2R1cmF0aW9uX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBsbG1TdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gZC5UeXBlID09PSAibGxtIik7CgkJCWlmIChsbG1TdGVwcy5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwkJCQoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ1Rva2VucycpOwkJCQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICdzdHlsZSd9KTsJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7CQoKCQkJY29uc3QgYWdlbnRDb2xvcnMgPSB7fTsKCQkJY29uc3QgcGFsZXR0ZSA9IFsnIzQyODVGNCcsICcjREI0NDM3JywgJyNGNEI0MDAnLCAnIzBGOUQ1OCcsICcjQUI0N0JDJywgJyMwMEFDQzEnXTsKCQkJbGV0IGNvbG9ySWR4ID0gMDsKCQkJY29uc3QgYWdlbnRMTE1Db3VudHMgPSB7fTsKCQkJbGxtU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCWlmICghYWdlbnRDb2xvcnNbcy5OYW1lXSkgewoJCQkJCWFnZW50Q29sb3JzW3MuTmFtZV0gPSBwYWxldHRlW2NvbG9ySWR4ICUgcGFsZXR0ZS5sZW5ndGhdOwoJCQkJCWNvbG9ySWR4Kys7CgkJCQl9CgoJCQkJYWdlbnRMTE1Db3VudHNbcy5OYW1lXSA9IChhZ2VudExMTUNvdW50c1tzLk5hbWVdIHx8IDApICsgMTsKCQkJCWNvbnN0IGxhYmVsID0gYCR7cy5OYW1lfS0ke2FnZW50TExNQ291bnRzW3MuTmFtZV19YDsKCQkJCWNvbnN0IHRvdGFsVG9rZW5zID0gcy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2VuczsKCQkJCWNvbnN0IHN0eWxlID0gYGNvbG9yOiAke2FnZW50Q29sb3JzW3MuTmFtZV19YDsKCQkJCWxldCB0b29sdGlwID0gYFRvdGFsIFRva2VuczogJHt0b3RhbFRva2Vuc31cbihJbjogJHtzLklucHV0VG9rZW5zfSwgT3V0OiAke3MuT3V0cHV0VG9rZW5zfSwgVGhvdWdodHM6ICR7cy5PdXRwdXRUaG91Z2h0c1Rva2Vuc30pYDsKCQkJCWlmIChzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgoJCQkJZGF0YS5hZGRSb3coW2xhYmVsLCB0b3RhbFRva2Vucywgc3R5bGUsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUb2tlbiBDb25zdW1wdGlvbiBieSBMTE0gQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTSBDYWxsIFNlcXVlbmNlJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ0NvbnN1bWVkIFRva2VucycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9rZW5fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCQlsZXQgYWxsRXhwYW5kZWQgPSBmYWxzZTsKCQlmdW5jdGlvbiB0b2dnbGVBbGxEZXRhaWxzKCkgewoJCQlhbGxFeHBhbmRlZCA9ICFhbGxFeHBhbmRlZDsKCQkJZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnZGV0YWlscycpLmZvckVhY2goZCA9PiB7CgkJCQlpZiAoYWxsRXhwYW5kZWQpIGQuc2V0QXR0cmlidXRlKCdvcGVuJywgJycpOwoJCQkJZWxzZSBkLnJlbW92ZUF0dHJpYnV0ZSgnb3BlbicpOwoJCQl9KTsKCQl9Cgk8L3NjcmlwdD4KCgo8L2JvZHk+CjwvaHRtbD4K" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowtw985[1] Phase: Succeeded StartedAt: 2026-07-11 17:36:31 +0000 UTC FinishedAt: 2026-07-11 17:36:31 +0000 UTC Input: nil Output: nil --------- Name: series-workflowtw985[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-07-11 17:36:31 +0000 UTC FinishedAt: 2026-07-11 17:36:31 +0000 UTC Input: nil Output: nil --------- Name: series-workflowtw985[2] Phase: Succeeded StartedAt: 2026-07-11 17:36:31 +0000 UTC FinishedAt: 2026-07-11 17:38:04 +0000 UTC Input: nil Output: nil --------- Name: series-workflowtw985[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3f1f755366687d051174739fb99f7d560202f60b","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZL3073X_I2C","ZL3073X_SPI"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["dpll_msg_add_pin_ref_sync","dpll_cmd_pin_get_one","dpll_nl_pin_get_doit","dpll_nl_pin_get_dumpit"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"3f1f755366687d051174739fb99f7d560202f60b","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZL3073X_I2C","ZL3073X_SPI"],"series_id":"32054c97-ddb0-405f-9afb-d7a26d4b8fea","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN) Phase: Failed StartedAt: 2026-07-11 17:36:31 +0000 UTC FinishedAt: 2026-07-11 17:38:04 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"3f1f755366687d051174739fb99f7d560202f60b","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZL3073X_I2C","ZL3073X_SPI"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["dpll_msg_add_pin_ref_sync","dpll_cmd_pin_get_one","dpll_nl_pin_get_doit","dpll_nl_pin_get_dumpit"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"3f1f755366687d051174739fb99f7d560202f60b","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZL3073X_I2C","ZL3073X_SPI"],"series_id":"32054c97-ddb0-405f-9afb-d7a26d4b8fea","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflowtw985[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3f1f755366687d051174739fb99f7d560202f60b","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZL3073X_I2C","ZL3073X_SPI"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["dpll_msg_add_pin_ref_sync","dpll_cmd_pin_get_one","dpll_nl_pin_get_doit","dpll_nl_pin_get_dumpit"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"3f1f755366687d051174739fb99f7d560202f60b","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZL3073X_I2C","ZL3073X_SPI"],"series_id":"32054c97-ddb0-405f-9afb-d7a26d4b8fea","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-07-11 17:36:31 +0000 UTC FinishedAt: 2026-07-11 17:38:03 +0000 UTC Input: nil Output: nil --------- Name: series-workflowtw985[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3f1f755366687d051174739fb99f7d560202f60b","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZL3073X_I2C","ZL3073X_SPI"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["dpll_msg_add_pin_ref_sync","dpll_cmd_pin_get_one","dpll_nl_pin_get_doit","dpll_nl_pin_get_dumpit"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"3f1f755366687d051174739fb99f7d560202f60b","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZL3073X_I2C","ZL3073X_SPI"],"series_id":"32054c97-ddb0-405f-9afb-d7a26d4b8fea","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-07-11 17:36:31 +0000 UTC FinishedAt: 2026-07-11 17:37:48 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"3f1f755366687d051174739fb99f7d560202f60b","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZL3073X_I2C","ZL3073X_SPI"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowtw985[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3f1f755366687d051174739fb99f7d560202f60b","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZL3073X_I2C","ZL3073X_SPI"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["dpll_msg_add_pin_ref_sync","dpll_cmd_pin_get_one","dpll_nl_pin_get_doit","dpll_nl_pin_get_dumpit"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"3f1f755366687d051174739fb99f7d560202f60b","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZL3073X_I2C","ZL3073X_SPI"],"series_id":"32054c97-ddb0-405f-9afb-d7a26d4b8fea","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[1] Phase: Error StartedAt: 2026-07-11 17:38:03 +0000 UTC FinishedAt: 2026-07-11 17:38:04 +0000 UTC Input: nil Output: nil