Name: series-workflowsr2hk Phase: Succeeded StartedAt: 2026-08-14 06:21:42 +0000 UTC FinishedAt: 2026-08-14 07:23:47 +0000 UTC Input: nil Output: nil --------- Name: series-workflowsr2hk[0] Phase: Succeeded StartedAt: 2026-08-14 06:21:42 +0000 UTC FinishedAt: 2026-08-14 06:39:08 +0000 UTC Input: nil Output: nil --------- Name: series-workflowsr2hk[0].run-triage Phase: Succeeded StartedAt: 2026-08-14 06:21:42 +0000 UTC FinishedAt: 2026-08-14 06:39:08 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "net-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git", "commit_hash": "3da8c3c8b8fa99505624b65ef590482f48e766b6", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "STMMAC_ETH", "STMMAC_PCI" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "net-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git", "commit_hash": "3da8c3c8b8fa99505624b65ef590482f48e766b6", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "STMMAC_ETH", "STMMAC_PCI" ], "series_id": "aaa9e265-f308-4232-9b7a-17d8d3e887b7" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "stmmac_dvr_remove", "stmmac_suspend", "stmmac_resume", "stmmac_xdp_open", "stmmac_xdp_release", "stmmac_reinit_queues", "stmmac_reinit_ringparam" ], "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+CgkJCTx0ZD4yMDI2LzA4LzE0IDA2OjM1PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+M208L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1NUTU1BQ19FVEgmIzM0OywKICAgICYjMzQ7U1RNTUFDX1BDSSYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3N0bW1hY19kdnJfcmVtb3ZlJiMzNDssCiAgICAmIzM0O3N0bW1hY19zdXNwZW5kJiMzNDssCiAgICAmIzM0O3N0bW1hY19yZXN1bWUmIzM0OywKICAgICYjMzQ7c3RtbWFjX3hkcF9vcGVuJiMzNDssCiAgICAmIzM0O3N0bW1hY194ZHBfcmVsZWFzZSYjMzQ7LAogICAgJiMzNDtzdG1tYWNfcmVpbml0X3F1ZXVlcyYjMzQ7LAogICAgJiMzNDtzdG1tYWNfcmVpbml0X3JpbmdwYXJhbSYjMzQ7CiAgXSwKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBoYXJkd2FyZSBpbml0aWFsaXphdGlvbiBhbmQgdGVhcmRvd24gc2VxdWVuY2VzIGluIHRoZSBzdG1tYWMgZHJpdmVyLCBpbnRyb2R1Y2luZyBhbiBvcmRlcmVkIGRhdGFwYXRoIHRlYXJkb3duIHRvIHByb3Blcmx5IHN0b3AgRE1BIGFuZCBNQUMgb3BlcmF0aW9ucy4gSXQgYWRkcyBmdW5jdGlvbnMgdG8gcG9sbCBoYXJkd2FyZSByZWdpc3RlcnMgZm9yIHNwZWNpZmljIHN0YXRlcyAoZS5nLiwgRE1BIHN0b3BwZWQsIE1UTCBxdWV1ZXMgZHJhaW5lZCkgdXNpbmcgYHJlYWRsX3BvbGxfdGltZW91dGAuIFRoZXNlIGNoYW5nZXMgYXJlIHB1cmVseSByZWxhdGVkIHRvIGhhcmR3YXJlIGNvbnRyb2wgZmxvdyBhbmQgZG8gbm90IGludHJvZHVjZSBhbnkgbmV3IGRhdGEgc3RydWN0dXJlcywgYnVmZmVyIGFsbG9jYXRpb25zLCBvciBkYXRhIGNvcGllcyB0byB1c2VyIHNwYWNlLiBUaGVyZSBpcyBubyByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGJlaW5nIGV4cG9zZWQgb3IgdXNlZCBpbiBjb250cm9sIGZsb3cuIFN0YW5kYXJkIEtBU0FOIGFuZCBvdGhlciBidWcgZGV0ZWN0b3JzIGFyZSBzdWZmaWNpZW50IHRvIGNhdGNoIGFueSBwb3RlbnRpYWwgbWVtb3J5IGNvcnJ1cHRpb24gb3IgdXNlLWFmdGVyLWZyZWUgYnVncyB0aGF0IG1pZ2h0IGFyaXNlIGZyb20gZHJpdmVyIHRlYXJkb3duIGlzc3Vlcy4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIG5ldyBvcmRlcmVkIGRhdGFwYXRoIHRlYXJkb3duIHNlcXVlbmNlIGZvciBhbGwgc3RtbWFjIGRldmljZXMsIGNoYW5naW5nIHRoZSBvcmRlciBvZiBETUEgc3RvcCBhbmQgTUFDIGRpc2FibGUgb3BlcmF0aW9ucy4gSXQgYWxzbyBzd2FwcyB0aGUgb3JkZXIgb2YgTUFDIGVuYWJsZSBhbmQgRE1BIHN0YXJ0IGluIHRoZSBzZXR1cCBwYXRocy4gVGhlc2UgYXJlIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUgY29yZSBkcml2ZXIgbG9naWMgcmVhY2hhYmxlIHZpYSBQQ0kgZW11bGF0aW9uLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE0IDA2OjM1PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgYTA4ZmYzNGNiMmNkMmQyOWMxZTI2MTVkZDE0NDgwY2NiMmQ4NzBmYlxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBGcmkgQXVnIDE0IDA2OjM1OjMyIDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3eGdtYWMyLmggYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd3hnbWFjMi5oXG5pbmRleCBmOGFiMzQ3ZjdiNWI5Li41MGY5Y2NkNGE5YzQ2IDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHd4Z21hYzIuaFxuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHd4Z21hYzIuaFxuQEAgLTI5MSw2ICYjNDM7MjkxLDEwIEBAXG4gI2RlZmluZSBYR01BQ19UVENcdFx0XHRHRU5NQVNLKDYsIDQpXG4gI2RlZmluZSBYR01BQ19UWFFFTlx0XHRcdEdFTk1BU0soMywgMilcbiAjZGVmaW5lIFhHTUFDX1RTRlx0XHRcdEJJVCgxKVxuJiM0MzsjZGVmaW5lIFhHTUFDX01UTF9UWFFfREVCVUcoeClcdFx0KDB4MDAwMDExMDggJiM0MzsgKDB4ODAgKiAoeCkpKVxuJiM0MzsjZGVmaW5lIFhHTUFDX1RYUVNUU1x0XHRcdEJJVCg0KVxuJiM0MzsjZGVmaW5lIFhHTUFDX1RSQ1NUU1x0XHRcdEdFTk1BU0soMiwgMSlcbiYjNDM7I2RlZmluZSBYR01BQ19UUkNTVFNfUkVBRFx0XHQweDFcbiAjZGVmaW5lIFhHTUFDX01UTF9UQ3hfRVRTX0NPTlRST0woeClcdCgweDAwMDAxMTEwICYjNDM7ICgweDgwICogKHgpKSlcbiAjZGVmaW5lIFhHTUFDX01UTF9UQ3hfUVVBTlRVTV9XRUlHSFQoeClcdCgweDAwMDAxMTE4ICYjNDM7ICgweDgwICogKHgpKSlcbiAjZGVmaW5lIFhHTUFDX01UTF9UQ3hfU0VORFNMT1BFKHgpXHQoMHgwMDAwMTExYyAmIzQzOyAoMHg4MCAqICh4KSkpXG5AQCAtMzA2LDYgJiM0MzszMTAsOSBAQFxuICNkZWZpbmUgWEdNQUNfRUhGQ1x0XHRcdEJJVCg3KVxuICNkZWZpbmUgWEdNQUNfUlNGXHRcdFx0QklUKDUpXG4gI2RlZmluZSBYR01BQ19SVENcdFx0XHRHRU5NQVNLKDEsIDApXG4mIzQzOyNkZWZpbmUgWEdNQUNfTVRMX1JYUV9ERUJVRyh4KVx0XHQoMHgwMDAwMTE0OCAmIzQzOyAoMHg4MCAqICh4KSkpXG4mIzQzOyNkZWZpbmUgWEdNQUNfUFJYUVx0XHRcdEdFTk1BU0soMjksIDE2KVxuJiM0MzsjZGVmaW5lIFhHTUFDX1JYUVNUU1x0XHRcdEdFTk1BU0soNSwgNClcbiAjZGVmaW5lIFhHTUFDX01UTF9SWFFfRkxPV19DT05UUk9MKHgpXHQoMHgwMDAwMTE1MCAmIzQzOyAoMHg4MCAqICh4KSkpXG4gI2RlZmluZSBYR01BQ19SRkRcdFx0XHRHRU5NQVNLKDMxLCAxNylcbiAjZGVmaW5lIFhHTUFDX1JGQVx0XHRcdEdFTk1BU0soMTUsIDEpXG5AQCAtMzkxLDYgJiM0MzszOTgsNyBAQFxuICNkZWZpbmUgWEdNQUNfTklTXHRcdFx0QklUKDE1KVxuICNkZWZpbmUgWEdNQUNfQUlTXHRcdFx0QklUKDE0KVxuICNkZWZpbmUgWEdNQUNfRkJFXHRcdFx0QklUKDEyKVxuJiM0MzsjZGVmaW5lIFhHTUFDX1JQU1x0XHRcdEJJVCg4KVxuICNkZWZpbmUgWEdNQUNfUkJVXHRcdFx0QklUKDcpXG4gI2RlZmluZSBYR01BQ19SSVx0XHRcdEJJVCg2KVxuICNkZWZpbmUgWEdNQUNfVEJVXHRcdFx0QklUKDIpXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHd4Z21hYzJfZG1hLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd3hnbWFjMl9kbWEuY1xuaW5kZXggZmY4Mzg1OGViYzFmMy4uYmE0ZjUzNWZiOWViNCAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3eGdtYWMyX2RtYS5jXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd3hnbWFjMl9kbWEuY1xuQEAgLTQsNiAmIzQzOzQsNyBAQFxuICAqIHN0bW1hYyBYR01BQyBzdXBwb3J0LlxuICAqL1xuIFxuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC9iaXRmaWVsZC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvaW9wb2xsLmhcdTAwM2VcbiAjaW5jbHVkZSBcJiMzNDtzdG1tYWMuaFwmIzM0O1xuICNpbmNsdWRlIFwmIzM0O2R3eGdtYWMyLmhcJiMzNDtcbkBAIC0yNjEsMTMgJiM0MzsyNjIsMTIgQEAgc3RhdGljIHZvaWQgZHd4Z21hYzJfZG1hX3N0YXJ0X3R4KHN0cnVjdCBzdG1tYWNfcHJpdiAqcHJpdixcbiB7XG4gXHR1MzIgdmFsdWU7XG4gXG4mIzQzO1x0LyogVFBTIGlzIGxhdGNoZWQgb25jZSBzZXQsIHNvIGNsZWFyIGl0IG9uIGV2ZXJ5IFR4IERNQSBzdGFydC4gKi9cbiYjNDM7XHR3cml0ZWwoWEdNQUNfVFBTLCBpb2FkZHIgJiM0MzsgWEdNQUNfRE1BX0NIX1NUQVRVUyhjaGFuKSk7XG4mIzQzO1xuIFx0dmFsdWUgPSByZWFkbChpb2FkZHIgJiM0MzsgWEdNQUNfRE1BX0NIX1RYX0NPTlRST0woY2hhbikpO1xuIFx0dmFsdWUgfD0gWEdNQUNfVFhTVDtcbiBcdHdyaXRlbCh2YWx1ZSwgaW9hZGRyICYjNDM7IFhHTUFDX0RNQV9DSF9UWF9DT05UUk9MKGNoYW4pKTtcbi1cbi1cdHZhbHVlID0gcmVhZGwoaW9hZGRyICYjNDM7IFhHTUFDX1RYX0NPTkZJRyk7XG4tXHR2YWx1ZSB8PSBYR01BQ19DT05GSUdfVEU7XG4tXHR3cml0ZWwodmFsdWUsIGlvYWRkciAmIzQzOyBYR01BQ19UWF9DT05GSUcpO1xuIH1cbiBcbiBzdGF0aWMgdm9pZCBkd3hnbWFjMl9kbWFfc3RvcF90eChzdHJ1Y3Qgc3RtbWFjX3ByaXYgKnByaXYsIHZvaWQgX19pb21lbSAqaW9hZGRyLFxuQEAgLTI3OCwxMCAmIzQzOzI3OCw2IEBAIHN0YXRpYyB2b2lkIGR3eGdtYWMyX2RtYV9zdG9wX3R4KHN0cnVjdCBzdG1tYWNfcHJpdiAqcHJpdiwgdm9pZCBfX2lvbWVtICppb2FkZHIsXG4gXHR2YWx1ZSA9IHJlYWRsKGlvYWRkciAmIzQzOyBYR01BQ19ETUFfQ0hfVFhfQ09OVFJPTChjaGFuKSk7XG4gXHR2YWx1ZSBcdTAwMjY9IH5YR01BQ19UWFNUO1xuIFx0d3JpdGVsKHZhbHVlLCBpb2FkZHIgJiM0MzsgWEdNQUNfRE1BX0NIX1RYX0NPTlRST0woY2hhbikpO1xuLVxuLVx0dmFsdWUgPSByZWFkbChpb2FkZHIgJiM0MzsgWEdNQUNfVFhfQ09ORklHKTtcbi1cdHZhbHVlIFx1MDAyNj0gflhHTUFDX0NPTkZJR19URTtcbi1cdHdyaXRlbCh2YWx1ZSwgaW9hZGRyICYjNDM7IFhHTUFDX1RYX0NPTkZJRyk7XG4gfVxuIFxuIHN0YXRpYyB2b2lkIGR3eGdtYWMyX2RtYV9zdGFydF9yeChzdHJ1Y3Qgc3RtbWFjX3ByaXYgKnByaXYsXG5AQCAtMjg5LDEzICYjNDM7Mjg1LDEyIEBAIHN0YXRpYyB2b2lkIGR3eGdtYWMyX2RtYV9zdGFydF9yeChzdHJ1Y3Qgc3RtbWFjX3ByaXYgKnByaXYsXG4ge1xuIFx0dTMyIHZhbHVlO1xuIFxuJiM0MztcdC8qIFJQUyBpcyBsYXRjaGVkIG9uY2Ugc2V0LCBzbyBjbGVhciBpdCBvbiBldmVyeSBSeCBETUEgc3RhcnQuICovXG4mIzQzO1x0d3JpdGVsKFhHTUFDX1JQUywgaW9hZGRyICYjNDM7IFhHTUFDX0RNQV9DSF9TVEFUVVMoY2hhbikpO1xuJiM0MztcbiBcdHZhbHVlID0gcmVhZGwoaW9hZGRyICYjNDM7IFhHTUFDX0RNQV9DSF9SWF9DT05UUk9MKGNoYW4pKTtcbiBcdHZhbHVlIHw9IFhHTUFDX1JYU1Q7XG4gXHR3cml0ZWwodmFsdWUsIGlvYWRkciAmIzQzOyBYR01BQ19ETUFfQ0hfUlhfQ09OVFJPTChjaGFuKSk7XG4tXG4tXHR2YWx1ZSA9IHJlYWRsKGlvYWRkciAmIzQzOyBYR01BQ19SWF9DT05GSUcpO1xuLVx0dmFsdWUgfD0gWEdNQUNfQ09ORklHX1JFO1xuLVx0d3JpdGVsKHZhbHVlLCBpb2FkZHIgJiM0MzsgWEdNQUNfUlhfQ09ORklHKTtcbiB9XG4gXG4gc3RhdGljIHZvaWQgZHd4Z21hYzJfZG1hX3N0b3Bfcngoc3RydWN0IHN0bW1hY19wcml2ICpwcml2LCB2b2lkIF9faW9tZW0gKmlvYWRkcixcbkBAIC01OTIsNiAmIzQzOzU4Nyw3NyBAQCBzdGF0aWMgaW50IGR3eGdtYWMyX2VuYWJsZV90YnMoc3RydWN0IHN0bW1hY19wcml2ICpwcml2LCB2b2lkIF9faW9tZW0gKmlvYWRkcixcbiBcdHJldHVybiAwO1xuIH1cbiBcbiYjNDM7c3RhdGljIGludCBkd3hnbWFjMl90eF9kbWFfc3RvcHBlZChzdHJ1Y3Qgc3RtbWFjX3ByaXYgKnByaXYsXG4mIzQzO1x0XHRcdFx0ICAgdm9pZCBfX2lvbWVtICppb2FkZHIsIHUzMiBjaGFuKVxuJiM0Mzt7XG4mIzQzO1x0dTMyIHZhbHVlO1xuJiM0MztcdGludCByZXQ7XG4mIzQzO1xuJiM0MztcdHJldCA9IHJlYWRsX3BvbGxfdGltZW91dChpb2FkZHIgJiM0MzsgWEdNQUNfRE1BX0NIX1NUQVRVUyhjaGFuKSwgdmFsdWUsXG4mIzQzO1x0XHRcdFx0IHZhbHVlIFx1MDAyNiBYR01BQ19UUFMsIDEwMCwgMTAwMDApO1xuJiM0MztcdGlmIChyZXQpXG4mIzQzO1x0XHRuZXRkZXZfd2Fybihwcml2LVx1MDAzZWRldiwgXCYjMzQ7VHggRE1BIGNoYW5uZWwgJXUgc3RvcCB0aW1lb3V0XFxuXCYjMzQ7LFxuJiM0MztcdFx0XHQgICAgY2hhbik7XG4mIzQzO1xuJiM0MztcdHJldHVybiByZXQ7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBpbnQgZHd4Z21hYzJfdHhfbXRsX2RyYWluKHN0cnVjdCBzdG1tYWNfcHJpdiAqcHJpdixcbiYjNDM7XHRcdFx0XHQgdm9pZCBfX2lvbWVtICppb2FkZHIsIHUzMiBxdWV1ZSlcbiYjNDM7e1xuJiM0MztcdHUzMiB2YWx1ZTtcbiYjNDM7XHRpbnQgcmV0O1xuJiM0MztcbiYjNDM7XHQvKiBXYWl0IHVudGlsIHRoZSBxdWV1ZSBpcyBlbXB0eSBhbmQgaXRzIHJlYWQgY29udHJvbGxlciBpcyBubyBsb25nZXJcbiYjNDM7XHQgKiBwdWxsaW5nIGEgZnJhbWUgb3V0IHRvd2FyZHMgdGhlIE1BQy5cbiYjNDM7XHQgKi9cbiYjNDM7XHRyZXQgPSByZWFkbF9wb2xsX3RpbWVvdXQoaW9hZGRyICYjNDM7IFhHTUFDX01UTF9UWFFfREVCVUcocXVldWUpLCB2YWx1ZSxcbiYjNDM7XHRcdFx0XHQgISh2YWx1ZSBcdTAwMjYgWEdNQUNfVFhRU1RTKSBcdTAwMjZcdTAwMjZcbiYjNDM7XHRcdFx0XHQgRklFTERfR0VUKFhHTUFDX1RSQ1NUUywgdmFsdWUpICE9XG4mIzQzO1x0XHRcdFx0IFhHTUFDX1RSQ1NUU19SRUFELFxuJiM0MztcdFx0XHRcdCAxMDAsIDEwMDAwKTtcbiYjNDM7XHRpZiAocmV0KVxuJiM0MztcdFx0bmV0ZGV2X3dhcm4ocHJpdi1cdTAwM2VkZXYsIFwmIzM0O01UTCBUeCBxdWV1ZSAldSBkcmFpbiB0aW1lb3V0XFxuXCYjMzQ7LFxuJiM0MztcdFx0XHQgICAgcXVldWUpO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gcmV0O1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW50IGR3eGdtYWMyX3J4X210bF9kcmFpbihzdHJ1Y3Qgc3RtbWFjX3ByaXYgKnByaXYsXG4mIzQzO1x0XHRcdFx0IHZvaWQgX19pb21lbSAqaW9hZGRyLCB1MzIgcXVldWUpXG4mIzQzO3tcbiYjNDM7XHR1MzIgdmFsdWU7XG4mIzQzO1x0aW50IHJldDtcbiYjNDM7XG4mIzQzO1x0LyogV2FpdCB1bnRpbCBubyBwYWNrZXQgaXMgbGVmdCBpbiB0aGUgcXVldWUgYW5kIHRoZSBxdWV1ZSByZXBvcnRzXG4mIzQzO1x0ICogaXRzZWxmIGVtcHR5LlxuJiM0MztcdCAqL1xuJiM0MztcdHJldCA9IHJlYWRsX3BvbGxfdGltZW91dChpb2FkZHIgJiM0MzsgWEdNQUNfTVRMX1JYUV9ERUJVRyhxdWV1ZSksIHZhbHVlLFxuJiM0MztcdFx0XHRcdCAhRklFTERfR0VUKFhHTUFDX1BSWFEsIHZhbHVlKSBcdTAwMjZcdTAwMjZcbiYjNDM7XHRcdFx0XHQgIUZJRUxEX0dFVChYR01BQ19SWFFTVFMsIHZhbHVlKSxcbiYjNDM7XHRcdFx0XHQgMTAwLCAxMDAwMCk7XG4mIzQzO1x0aWYgKHJldClcbiYjNDM7XHRcdG5ldGRldl93YXJuKHByaXYtXHUwMDNlZGV2LCBcJiMzNDtNVEwgUnggcXVldWUgJXUgZHJhaW4gdGltZW91dFxcblwmIzM0OyxcbiYjNDM7XHRcdFx0ICAgIHF1ZXVlKTtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIHJldDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGludCBkd3hnbWFjMl9yeF9kbWFfc3RvcHBlZChzdHJ1Y3Qgc3RtbWFjX3ByaXYgKnByaXYsXG4mIzQzO1x0XHRcdFx0ICAgdm9pZCBfX2lvbWVtICppb2FkZHIsIHUzMiBjaGFuKVxuJiM0Mzt7XG4mIzQzO1x0dTMyIHZhbHVlO1xuJiM0MztcdGludCByZXQ7XG4mIzQzO1xuJiM0MztcdHJldCA9IHJlYWRsX3BvbGxfdGltZW91dChpb2FkZHIgJiM0MzsgWEdNQUNfRE1BX0NIX1NUQVRVUyhjaGFuKSwgdmFsdWUsXG4mIzQzO1x0XHRcdFx0IHZhbHVlIFx1MDAyNiBYR01BQ19SUFMsIDEwMCwgMTAwMDApO1xuJiM0MztcdGlmIChyZXQpXG4mIzQzO1x0XHRuZXRkZXZfd2Fybihwcml2LVx1MDAzZWRldiwgXCYjMzQ7UnggRE1BIGNoYW5uZWwgJXUgc3RvcCB0aW1lb3V0XFxuXCYjMzQ7LFxuJiM0MztcdFx0XHQgICAgY2hhbik7XG4mIzQzO1xuJiM0MztcdHJldHVybiByZXQ7XG4mIzQzO31cbiYjNDM7XG4gY29uc3Qgc3RydWN0IHN0bW1hY19kbWFfb3BzIGR3eGdtYWMyMTBfZG1hX29wcyA9IHtcbiBcdC5yZXNldCA9IGR3eGdtYWMyX2RtYV9yZXNldCxcbiBcdC5pbml0ID0gZHd4Z21hYzJfZG1hX2luaXQsXG5AQCAtNjIwLDQgJiM0Mzs2ODYsOCBAQCBjb25zdCBzdHJ1Y3Qgc3RtbWFjX2RtYV9vcHMgZHd4Z21hYzIxMF9kbWFfb3BzID0ge1xuIFx0LnNldF9iZnNpemUgPSBkd3hnbWFjMl9zZXRfYmZzaXplLFxuIFx0LmVuYWJsZV9zcGggPSBkd3hnbWFjMl9lbmFibGVfc3BoLFxuIFx0LmVuYWJsZV90YnMgPSBkd3hnbWFjMl9lbmFibGVfdGJzLFxuJiM0MztcdC50eF9kbWFfc3RvcHBlZCA9IGR3eGdtYWMyX3R4X2RtYV9zdG9wcGVkLFxuJiM0MztcdC50eF9tdGxfZHJhaW4gPSBkd3hnbWFjMl90eF9tdGxfZHJhaW4sXG4mIzQzO1x0LnJ4X210bF9kcmFpbiA9IGR3eGdtYWMyX3J4X210bF9kcmFpbixcbiYjNDM7XHQucnhfZG1hX3N0b3BwZWQgPSBkd3hnbWFjMl9yeF9kbWFfc3RvcHBlZCxcbiB9O1xuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2h3aWYuaCBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2h3aWYuaFxuaW5kZXggMDRkYWZlYzAyMWI0Zi4uODZmNGFhODg5NjFjNyAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2h3aWYuaFxuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvaHdpZi5oXG5AQCAtMjMxLDYgJiM0MzsyMzEsMTUgQEAgc3RydWN0IHN0bW1hY19kbWFfb3BzIHtcbiBcdFx0XHQgICBib29sIGVuLCB1MzIgY2hhbik7XG4gXHRpbnQgKCplbmFibGVfdGJzKShzdHJ1Y3Qgc3RtbWFjX3ByaXYgKnByaXYsIHZvaWQgX19pb21lbSAqaW9hZGRyLFxuIFx0XHRcdCAgYm9vbCBlbiwgdTMyIGNoYW4pO1xuJiM0MztcdC8qIE9yZGVyZWQgZGF0YXBhdGggdGVhcmRvd24gKi9cbiYjNDM7XHRpbnQgKCp0eF9kbWFfc3RvcHBlZCkoc3RydWN0IHN0bW1hY19wcml2ICpwcml2LCB2b2lkIF9faW9tZW0gKmlvYWRkcixcbiYjNDM7XHRcdFx0ICAgICAgdTMyIGNoYW4pO1xuJiM0MztcdGludCAoKnR4X210bF9kcmFpbikoc3RydWN0IHN0bW1hY19wcml2ICpwcml2LCB2b2lkIF9faW9tZW0gKmlvYWRkcixcbiYjNDM7XHRcdFx0ICAgIHUzMiBxdWV1ZSk7XG4mIzQzO1x0aW50ICgqcnhfbXRsX2RyYWluKShzdHJ1Y3Qgc3RtbWFjX3ByaXYgKnByaXYsIHZvaWQgX19pb21lbSAqaW9hZGRyLFxuJiM0MztcdFx0XHQgICAgdTMyIHF1ZXVlKTtcbiYjNDM7XHRpbnQgKCpyeF9kbWFfc3RvcHBlZCkoc3RydWN0IHN0bW1hY19wcml2ICpwcml2LCB2b2lkIF9faW9tZW0gKmlvYWRkcixcbiYjNDM7XHRcdFx0ICAgICAgdTMyIGNoYW4pO1xuIH07XG4gXG4gI2RlZmluZSBzdG1tYWNfZG1hX2luaXQoX19wcml2LCBfX2FyZ3MuLi4pIFxcXG5AQCAtMjkzLDYgJiM0MzszMDIsMTQgQEAgc3RydWN0IHN0bW1hY19kbWFfb3BzIHtcbiBcdHN0bW1hY19kb192b2lkX2NhbGxiYWNrKF9fcHJpdiwgZG1hLCBlbmFibGVfc3BoLCBfX3ByaXYsIF9fYXJncylcbiAjZGVmaW5lIHN0bW1hY19lbmFibGVfdGJzKF9fcHJpdiwgX19hcmdzLi4uKSBcXFxuIFx0c3RtbWFjX2RvX2NhbGxiYWNrKF9fcHJpdiwgZG1hLCBlbmFibGVfdGJzLCBfX3ByaXYsIF9fYXJncylcbiYjNDM7I2RlZmluZSBzdG1tYWNfdHhfZG1hX3N0b3BwZWQoX19wcml2LCBfX2FyZ3MuLi4pIFxcXG4mIzQzO1x0c3RtbWFjX2RvX2NhbGxiYWNrKF9fcHJpdiwgZG1hLCB0eF9kbWFfc3RvcHBlZCwgX19wcml2LCBfX2FyZ3MpXG4mIzQzOyNkZWZpbmUgc3RtbWFjX3R4X210bF9kcmFpbihfX3ByaXYsIF9fYXJncy4uLikgXFxcbiYjNDM7XHRzdG1tYWNfZG9fY2FsbGJhY2soX19wcml2LCBkbWEsIHR4X210bF9kcmFpbiwgX19wcml2LCBfX2FyZ3MpXG4mIzQzOyNkZWZpbmUgc3RtbWFjX3J4X210bF9kcmFpbihfX3ByaXYsIF9fYXJncy4uLikgXFxcbiYjNDM7XHRzdG1tYWNfZG9fY2FsbGJhY2soX19wcml2LCBkbWEsIHJ4X210bF9kcmFpbiwgX19wcml2LCBfX2FyZ3MpXG4mIzQzOyNkZWZpbmUgc3RtbWFjX3J4X2RtYV9zdG9wcGVkKF9fcHJpdiwgX19hcmdzLi4uKSBcXFxuJiM0MztcdHN0bW1hY19kb19jYWxsYmFjayhfX3ByaXYsIGRtYSwgcnhfZG1hX3N0b3BwZWQsIF9fcHJpdiwgX19hcmdzKVxuIFxuIHN0cnVjdCBtYWNfZGV2aWNlX2luZm87XG4gc3RydWN0IG5ldF9kZXZpY2U7XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX21haW4uYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19tYWluLmNcbmluZGV4IGIyYjdkMDI0MmRkM2MuLjljM2E4ZjEyMmI5NGYgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfbWFpbi5jXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfbWFpbi5jXG5AQCAtMjU2MCw2ICYjNDM7MjU2MCw1MiBAQCBzdGF0aWMgdm9pZCBzdG1tYWNfc3RvcF9hbGxfZG1hKHN0cnVjdCBzdG1tYWNfcHJpdiAqcHJpdilcbiBcdFx0c3RtbWFjX2RlaW5pdF9jaGFuKHByaXYsIHByaXYtXHUwMDNlaW9hZGRyLCBjaGFuKTtcbiB9XG4gXG4mIzQzOy8qKlxuJiM0MzsgKiBzdG1tYWNfZGF0YXBhdGhfdGVhcmRvd24gLSBvcmRlcmVkIGRhdGFwYXRoIHRlYXJkb3duIGFzIHBlciBJUCBzcGVjaWZpY2F0aW9uXG4mIzQzOyAqIEBwcml2OiBkcml2ZXIgcHJpdmF0ZSBzdHJ1Y3R1cmVcbiYjNDM7ICogRGVzY3JpcHRpb246XG4mIzQzOyAqIFdoZW4gdGVhcmRvd24gb3BzIGFyZSBhdmFpbGFibGUsIGZvbGxvdyB0aGUgZGF0YWJvb2sgb3JkZXJlZCB0ZWFyZG93blxuJiM0MzsgKiBzZXF1ZW5jZS5cbiYjNDM7ICogRm9sbG93cyB0aGUgbGVnYWN5IHN0b3AgJiM0MzsgTUFDIGRpc2FibGUgZm9yIHZhcmlhbnRzIHdpdGhvdXQgdGhlIGZlYXR1cmUuXG4mIzQzOyAqL1xuJiM0MztzdGF0aWMgdm9pZCBzdG1tYWNfZGF0YXBhdGhfdGVhcmRvd24oc3RydWN0IHN0bW1hY19wcml2ICpwcml2KVxuJiM0Mzt7XG4mIzQzO1x0dTMyIHJ4X2NoYW5uZWxzX2NvdW50ID0gcHJpdi1cdTAwM2VwbGF0LVx1MDAzZXJ4X3F1ZXVlc190b191c2U7XG4mIzQzO1x0dTMyIHR4X2NoYW5uZWxzX2NvdW50ID0gcHJpdi1cdTAwM2VwbGF0LVx1MDAzZXR4X3F1ZXVlc190b191c2U7XG4mIzQzO1x0dTMyIGNoYW47XG4mIzQzO1xuJiM0MztcdC8qIFN0b3AgYWxsIFRYIERNQSBjaGFubmVscyAqL1xuJiM0MztcdGZvciAoY2hhbiA9IDA7IGNoYW4gXHUwMDNjIHR4X2NoYW5uZWxzX2NvdW50OyBjaGFuJiM0MzsmIzQzOylcbiYjNDM7XHRcdHN0bW1hY19zdG9wX3R4X2RtYShwcml2LCBjaGFuKTtcbiYjNDM7XG4mIzQzO1x0LyogV2FpdCBmb3IgZXZlcnkgVFggRE1BIGNoYW5uZWwgdG8gcmVwb3J0IGl0c2VsZiBzdG9wcGVkICovXG4mIzQzO1x0aWYgKHByaXYtXHUwMDNlaHctXHUwMDNlZG1hLVx1MDAzZXR4X2RtYV9zdG9wcGVkKVxuJiM0MztcdFx0Zm9yIChjaGFuID0gMDsgY2hhbiBcdTAwM2MgdHhfY2hhbm5lbHNfY291bnQ7IGNoYW4mIzQzOyYjNDM7KVxuJiM0MztcdFx0XHRzdG1tYWNfdHhfZG1hX3N0b3BwZWQocHJpdiwgcHJpdi1cdTAwM2Vpb2FkZHIsIGNoYW4pO1xuJiM0MztcbiYjNDM7XHQvKiBXYWl0IGZvciB0aGUgTVRMIFRYIHF1ZXVlcyB0byBmaW5pc2ggcHVzaGluZyBpbnRvIHRoZSBNQUMgKi9cbiYjNDM7XHRpZiAocHJpdi1cdTAwM2Vody1cdTAwM2VkbWEtXHUwMDNldHhfbXRsX2RyYWluKVxuJiM0MztcdFx0Zm9yIChjaGFuID0gMDsgY2hhbiBcdTAwM2MgdHhfY2hhbm5lbHNfY291bnQ7IGNoYW4mIzQzOyYjNDM7KVxuJiM0MztcdFx0XHRzdG1tYWNfdHhfbXRsX2RyYWluKHByaXYsIHByaXYtXHUwMDNlaW9hZGRyLCBjaGFuKTtcbiYjNDM7XG4mIzQzO1x0LyogRGlzYWJsZSB0aGUgTUFDIFRYIGFuZCBSWCAqL1xuJiM0MztcdHN0bW1hY19tYWNfc2V0KHByaXYsIHByaXYtXHUwMDNlaW9hZGRyLCBmYWxzZSk7XG4mIzQzO1xuJiM0MztcdC8qIFdhaXQgZm9yIHRoZSBNVEwgUlggcXVldWVzIHRvIGRyYWluIGludG8gdGhlIFJYIERNQSAqL1xuJiM0MztcdGlmIChwcml2LVx1MDAzZWh3LVx1MDAzZWRtYS1cdTAwM2VyeF9tdGxfZHJhaW4pXG4mIzQzO1x0XHRmb3IgKGNoYW4gPSAwOyBjaGFuIFx1MDAzYyByeF9jaGFubmVsc19jb3VudDsgY2hhbiYjNDM7JiM0MzspXG4mIzQzO1x0XHRcdHN0bW1hY19yeF9tdGxfZHJhaW4ocHJpdiwgcHJpdi1cdTAwM2Vpb2FkZHIsIGNoYW4pO1xuJiM0MztcbiYjNDM7XHQvKiBTdG9wIGFsbCBSWCBETUEgY2hhbm5lbHMgKi9cbiYjNDM7XHRmb3IgKGNoYW4gPSAwOyBjaGFuIFx1MDAzYyByeF9jaGFubmVsc19jb3VudDsgY2hhbiYjNDM7JiM0MzspXG4mIzQzO1x0XHRzdG1tYWNfc3RvcF9yeF9kbWEocHJpdiwgY2hhbik7XG4mIzQzO1xuJiM0MztcdC8qIFdhaXQgZm9yIGV2ZXJ5IFJYIERNQSBjaGFubmVsIHRvIHJlcG9ydCBpdHNlbGYgc3RvcHBlZCAqL1xuJiM0MztcdGlmIChwcml2LVx1MDAzZWh3LVx1MDAzZWRtYS1cdTAwM2VyeF9kbWFfc3RvcHBlZClcbiYjNDM7XHRcdGZvciAoY2hhbiA9IDA7IGNoYW4gXHUwMDNjIHJ4X2NoYW5uZWxzX2NvdW50OyBjaGFuJiM0MzsmIzQzOylcbiYjNDM7XHRcdFx0c3RtbWFjX3J4X2RtYV9zdG9wcGVkKHByaXYsIHByaXYtXHUwMDNlaW9hZGRyLCBjaGFuKTtcbiYjNDM7fVxuJiM0MztcbiAvKipcbiAgKiAgc3RtbWFjX2RtYV9vcGVyYXRpb25fbW9kZSAtIEhXIERNQSBvcGVyYXRpb24gbW9kZVxuICAqICBAcHJpdjogZHJpdmVyIHByaXZhdGUgc3RydWN0dXJlXG5AQCAtMzY4NSw5ICYjNDM7MzczMSw2IEBAIHN0YXRpYyBpbnQgc3RtbWFjX2h3X3NldHVwKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXG4gXHRcdHByaXYtXHUwMDNlaHctXHUwMDNlcnhfY3N1bSA9IDA7XG4gXHR9XG4gXG4tXHQvKiBFbmFibGUgdGhlIE1BQyBSeC9UeCAqL1xuLVx0c3RtbWFjX21hY19zZXQocHJpdiwgcHJpdi1cdTAwM2Vpb2FkZHIsIHRydWUpO1xuLVxuIFx0LyogU2V0IHRoZSBIVyBETUEgbW9kZSBhbmQgdGhlIENPRSAqL1xuIFx0c3RtbWFjX2RtYV9vcGVyYXRpb25fbW9kZShwcml2KTtcbiBcbkBAIC0zNzQzLDYgJiM0MzszNzg2LDkgQEAgc3RhdGljIGludCBzdG1tYWNfaHdfc2V0dXAoc3RydWN0IG5ldF9kZXZpY2UgKmRldilcbiBcdC8qIFN0YXJ0IHRoZSBiYWxsIHJvbGxpbmcuLi4gKi9cbiBcdHN0bW1hY19zdGFydF9hbGxfZG1hKHByaXYpO1xuIFxuJiM0MztcdC8qIEVuYWJsZSB0aGUgTUFDIFJ4L1R4ICovXG4mIzQzO1x0c3RtbWFjX21hY19zZXQocHJpdiwgcHJpdi1cdTAwM2Vpb2FkZHIsIHRydWUpO1xuJiM0MztcbiBcdHBoeWxpbmtfcnhfY2xrX3N0b3BfYmxvY2socHJpdi1cdTAwM2VwaHlsaW5rKTtcbiBcdHN0bW1hY19zZXRfaHdfdmxhbl9tb2RlKHByaXYsIHByaXYtXHUwMDNlaHcpO1xuIFx0cGh5bGlua19yeF9jbGtfc3RvcF91bmJsb2NrKHByaXYtXHUwMDNlcGh5bGluayk7XG5AQCAtNDI0MCw5ICYjNDM7NDI4Niw2IEBAIHN0YXRpYyB2b2lkIF9fc3RtbWFjX3JlbGVhc2Uoc3RydWN0IG5ldF9kZXZpY2UgKmRldilcbiBcdHN0cnVjdCBzdG1tYWNfcHJpdiAqcHJpdiA9IG5ldGRldl9wcml2KGRldik7XG4gXHR1OCBjaGFuO1xuIFxuLVx0LyogU3RvcCBhbmQgZGlzY29ubmVjdCB0aGUgUEhZICovXG4tXHRwaHlsaW5rX3N0b3AocHJpdi1cdTAwM2VwaHlsaW5rKTtcbi1cbiBcdHN0bW1hY19kaXNhYmxlX2FsbF9xdWV1ZXMocHJpdik7XG4gXG4gXHRmb3IgKGNoYW4gPSAwOyBjaGFuIFx1MDAzYyBwcml2LVx1MDAzZXBsYXQtXHUwMDNldHhfcXVldWVzX3RvX3VzZTsgY2hhbiYjNDM7JiM0MzspXG5AQCAtNDI1Myw4ICYjNDM7NDI5NiwxMSBAQCBzdGF0aWMgdm9pZCBfX3N0bW1hY19yZWxlYXNlKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXG4gXHQvKiBGcmVlIHRoZSBJUlEgbGluZXMgKi9cbiBcdHN0bW1hY19mcmVlX2lycShkZXYsIFJFUV9JUlFfRVJSX0FMTCwgMCk7XG4gXG4tXHQvKiBTdG9wIFRYL1JYIERNQSBhbmQgY2xlYXIgdGhlIGRlc2NyaXB0b3JzICovXG4tXHRzdG1tYWNfc3RvcF9hbGxfZG1hKHByaXYpO1xuJiM0MztcdC8qIEhhcyB0byBydW4gYmVmb3JlIG1hY19saW5rX2Rvd24oKSBkaXNhYmxlcyB0aGUgTUFDLiAqL1xuJiM0MztcdHN0bW1hY19kYXRhcGF0aF90ZWFyZG93bihwcml2KTtcbiYjNDM7XG4mIzQzO1x0LyogU3RvcCBhbmQgZGlzY29ubmVjdCB0aGUgUEhZICovXG4mIzQzO1x0cGh5bGlua19zdG9wKHByaXYtXHUwMDNlcGh5bGluayk7XG4gXG4gXHQvKiBSZWxlYXNlIGFuZCBmcmVlIHRoZSBSeC9UeCByZXNvdXJjZXMgKi9cbiBcdGZyZWVfZG1hX2Rlc2NfcmVzb3VyY2VzKHByaXYsIFx1MDAyNnByaXYtXHUwMDNlZG1hX2NvbmYpO1xuQEAgLTcxMDQsMTUgJiM0Mzs3MTUwLDEyIEBAIHZvaWQgc3RtbWFjX3hkcF9yZWxlYXNlKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXG4gXHQvKiBGcmVlIHRoZSBJUlEgbGluZXMgKi9cbiBcdHN0bW1hY19mcmVlX2lycShkZXYsIFJFUV9JUlFfRVJSX0FMTCwgMCk7XG4gXG4tXHQvKiBTdG9wIFRYL1JYIERNQSBjaGFubmVscyAqL1xuLVx0c3RtbWFjX3N0b3BfYWxsX2RtYShwcml2KTtcbiYjNDM7XHQvKiBTdG9wIHRoZSBNQUMgYW5kIHRoZSBUWC9SWCBETUEgY2hhbm5lbHMgKi9cbiYjNDM7XHRzdG1tYWNfZGF0YXBhdGhfdGVhcmRvd24ocHJpdik7XG4gXG4gXHQvKiBSZWxlYXNlIGFuZCBmcmVlIHRoZSBSeC9UeCByZXNvdXJjZXMgKi9cbiBcdGZyZWVfZG1hX2Rlc2NfcmVzb3VyY2VzKHByaXYsIFx1MDAyNnByaXYtXHUwMDNlZG1hX2NvbmYpO1xuIFxuLVx0LyogRGlzYWJsZSB0aGUgTUFDIFJ4L1R4ICovXG4tXHRzdG1tYWNfbWFjX3NldChwcml2LCBwcml2LVx1MDAzZWlvYWRkciwgZmFsc2UpO1xuLVxuIFx0Lyogc2V0IHRyYW5zX3N0YXJ0IHNvIHdlIGRvbiYjMzk7dCBnZXQgc3B1cmlvdXNcbiBcdCAqIHdhdGNoZG9ncyBkdXJpbmcgcmVzZXRcbiBcdCAqL1xuQEAgLTcxODQsMTIgJiM0Mzs3MjI3LDEyIEBAIGludCBzdG1tYWNfeGRwX29wZW4oc3RydWN0IG5ldF9kZXZpY2UgKmRldilcbiBcdFx0aHJ0aW1lcl9zZXR1cChcdTAwMjZ0eF9xLVx1MDAzZXR4dGltZXIsIHN0bW1hY190eF90aW1lciwgQ0xPQ0tfTU9OT1RPTklDLCBIUlRJTUVSX01PREVfUkVMKTtcbiBcdH1cbiBcbi1cdC8qIEVuYWJsZSB0aGUgTUFDIFJ4L1R4ICovXG4tXHRzdG1tYWNfbWFjX3NldChwcml2LCBwcml2LVx1MDAzZWlvYWRkciwgdHJ1ZSk7XG4tXG4gXHQvKiBTdGFydCBSeCBcdTAwMjYgVHggRE1BIENoYW5uZWxzICovXG4gXHRzdG1tYWNfc3RhcnRfYWxsX2RtYShwcml2KTtcbiBcbiYjNDM7XHQvKiBFbmFibGUgdGhlIE1BQyBSeC9UeCAqL1xuJiM0MztcdHN0bW1hY19tYWNfc2V0KHByaXYsIHByaXYtXHUwMDNlaW9hZGRyLCB0cnVlKTtcbiYjNDM7XG4gXHRyZXQgPSBzdG1tYWNfcmVxdWVzdF9pcnEoZGV2KTtcbiBcdGlmIChyZXQpXG4gXHRcdGdvdG8gaXJxX2Vycm9yO1xuQEAgLTgxOTAsMTcgJiM0Mzs4MjMzLDE1IEBAIGludCBzdG1tYWNfc3VzcGVuZChzdHJ1Y3QgZGV2aWNlICpkZXYpXG4gXHRcdHRpbWVyX2RlbGV0ZV9zeW5jKFx1MDAyNnByaXYtXHUwMDNlZWVlX2N0cmxfdGltZXIpO1xuIFx0fVxuIFxuLVx0LyogU3RvcCBUWC9SWCBETUEgKi9cbi1cdHN0bW1hY19zdG9wX2FsbF9kbWEocHJpdik7XG4tXG4tXHRzdG1tYWNfbGVnYWN5X3NlcmRlc19wb3dlcl9kb3duKHByaXYpO1xuLVxuIFx0LyogRW5hYmxlIFBvd2VyIGRvd24gbW9kZSBieSBwcm9ncmFtbWluZyB0aGUgUE1UIHJlZ3MgKi9cbiBcdGlmIChwcml2LVx1MDAzZXdvbG9wdHMpIHtcbiYjNDM7XHRcdHN0bW1hY19zdG9wX2FsbF9kbWEocHJpdik7XG4mIzQzO1x0XHRzdG1tYWNfbGVnYWN5X3NlcmRlc19wb3dlcl9kb3duKHByaXYpO1xuIFx0XHRzdG1tYWNfcG10KHByaXYsIHByaXYtXHUwMDNlaHcsIHByaXYtXHUwMDNld29sb3B0cyk7XG4gXHRcdHByaXYtXHUwMDNlaXJxX3dha2UgPSAxO1xuIFx0fSBlbHNlIHtcbi1cdFx0c3RtbWFjX21hY19zZXQocHJpdiwgcHJpdi1cdTAwM2Vpb2FkZHIsIGZhbHNlKTtcbiYjNDM7XHRcdHN0bW1hY19kYXRhcGF0aF90ZWFyZG93bihwcml2KTtcbiYjNDM7XHRcdHN0bW1hY19sZWdhY3lfc2VyZGVzX3Bvd2VyX2Rvd24ocHJpdik7XG4gXHRcdHBpbmN0cmxfcG1fc2VsZWN0X3NsZWVwX3N0YXRlKHByaXYtXHUwMDNlZGV2aWNlKTtcbiBcdH1cbiBcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNCAwNjozNTwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4zbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5iZXN0LWV4cGVuc2l2ZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7U1RNTUFDX0VUSCYjMzQ7LAogICAgJiMzNDtTVE1NQUNfUENJJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7c3RtbWFjX2R2cl9yZW1vdmUmIzM0OywKICAgICYjMzQ7c3RtbWFjX3N1c3BlbmQmIzM0OywKICAgICYjMzQ7c3RtbWFjX3Jlc3VtZSYjMzQ7LAogICAgJiMzNDtzdG1tYWNfeGRwX29wZW4mIzM0OywKICAgICYjMzQ7c3RtbWFjX3hkcF9yZWxlYXNlJiMzNDssCiAgICAmIzM0O3N0bW1hY19yZWluaXRfcXVldWVzJiMzNDssCiAgICAmIzM0O3N0bW1hY19yZWluaXRfcmluZ3BhcmFtJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGludHJvZHVjZXMgYSBuZXcgb3JkZXJlZCBkYXRhcGF0aCB0ZWFyZG93biBzZXF1ZW5jZSBmb3IgYWxsIHN0bW1hYyBkZXZpY2VzLCBjaGFuZ2luZyB0aGUgb3JkZXIgb2YgRE1BIHN0b3AgYW5kIE1BQyBkaXNhYmxlIG9wZXJhdGlvbnMuIEl0IGFsc28gc3dhcHMgdGhlIG9yZGVyIG9mIE1BQyBlbmFibGUgYW5kIERNQSBzdGFydCBpbiB0aGUgc2V0dXAgcGF0aHMuIFRoZXNlIGFyZSBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGNvcmUgZHJpdmVyIGxvZ2ljIHJlYWNoYWJsZSB2aWEgUENJIGVtdWxhdGlvbi4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLAogIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS4KLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCwKICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4KLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKQogIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy4KCklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2gKdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuCgpXaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzoKMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy4KICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuCiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9ucwogICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS4KMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuCiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KICAgQWxzbyBjaGVjayAmIzM0O2RlcGVuZHMgb24mIzM0OyBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MKICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzCiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IGEwOGZmMzRjYjJjZDJkMjljMWUyNjE1ZGQxNDQ4MGNjYjJkODcwZmIKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgRnJpIEF1ZyAxNCAwNjozNTozMiAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3eGdtYWMyLmggYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd3hnbWFjMi5oCmluZGV4IGY4YWIzNDdmN2I1YjkuLjUwZjljY2Q0YTljNDYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3eGdtYWMyLmgKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHd4Z21hYzIuaApAQCAtMjkxLDYgJiM0MzsyOTEsMTAgQEAKICNkZWZpbmUgWEdNQUNfVFRDCQkJR0VOTUFTSyg2LCA0KQogI2RlZmluZSBYR01BQ19UWFFFTgkJCUdFTk1BU0soMywgMikKICNkZWZpbmUgWEdNQUNfVFNGCQkJQklUKDEpCiYjNDM7I2RlZmluZSBYR01BQ19NVExfVFhRX0RFQlVHKHgpCQkoMHgwMDAwMTEwOCAmIzQzOyAoMHg4MCAqICh4KSkpCiYjNDM7I2RlZmluZSBYR01BQ19UWFFTVFMJCQlCSVQoNCkKJiM0MzsjZGVmaW5lIFhHTUFDX1RSQ1NUUwkJCUdFTk1BU0soMiwgMSkKJiM0MzsjZGVmaW5lIFhHTUFDX1RSQ1NUU19SRUFECQkweDEKICNkZWZpbmUgWEdNQUNfTVRMX1RDeF9FVFNfQ09OVFJPTCh4KQkoMHgwMDAwMTExMCAmIzQzOyAoMHg4MCAqICh4KSkpCiAjZGVmaW5lIFhHTUFDX01UTF9UQ3hfUVVBTlRVTV9XRUlHSFQoeCkJKDB4MDAwMDExMTggJiM0MzsgKDB4ODAgKiAoeCkpKQogI2RlZmluZSBYR01BQ19NVExfVEN4X1NFTkRTTE9QRSh4KQkoMHgwMDAwMTExYyAmIzQzOyAoMHg4MCAqICh4KSkpCkBAIC0zMDYsNiAmIzQzOzMxMCw5IEBACiAjZGVmaW5lIFhHTUFDX0VIRkMJCQlCSVQoNykKICNkZWZpbmUgWEdNQUNfUlNGCQkJQklUKDUpCiAjZGVmaW5lIFhHTUFDX1JUQwkJCUdFTk1BU0soMSwgMCkKJiM0MzsjZGVmaW5lIFhHTUFDX01UTF9SWFFfREVCVUcoeCkJCSgweDAwMDAxMTQ4ICYjNDM7ICgweDgwICogKHgpKSkKJiM0MzsjZGVmaW5lIFhHTUFDX1BSWFEJCQlHRU5NQVNLKDI5LCAxNikKJiM0MzsjZGVmaW5lIFhHTUFDX1JYUVNUUwkJCUdFTk1BU0soNSwgNCkKICNkZWZpbmUgWEdNQUNfTVRMX1JYUV9GTE9XX0NPTlRST0woeCkJKDB4MDAwMDExNTAgJiM0MzsgKDB4ODAgKiAoeCkpKQogI2RlZmluZSBYR01BQ19SRkQJCQlHRU5NQVNLKDMxLCAxNykKICNkZWZpbmUgWEdNQUNfUkZBCQkJR0VOTUFTSygxNSwgMSkKQEAgLTM5MSw2ICYjNDM7Mzk4LDcgQEAKICNkZWZpbmUgWEdNQUNfTklTCQkJQklUKDE1KQogI2RlZmluZSBYR01BQ19BSVMJCQlCSVQoMTQpCiAjZGVmaW5lIFhHTUFDX0ZCRQkJCUJJVCgxMikKJiM0MzsjZGVmaW5lIFhHTUFDX1JQUwkJCUJJVCg4KQogI2RlZmluZSBYR01BQ19SQlUJCQlCSVQoNykKICNkZWZpbmUgWEdNQUNfUkkJCQlCSVQoNikKICNkZWZpbmUgWEdNQUNfVEJVCQkJQklUKDIpCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd3hnbWFjMl9kbWEuYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3eGdtYWMyX2RtYS5jCmluZGV4IGZmODM4NThlYmMxZjMuLmJhNGY1MzVmYjllYjQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3eGdtYWMyX2RtYS5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3eGdtYWMyX2RtYS5jCkBAIC00LDYgJiM0Mzs0LDcgQEAKICAqIHN0bW1hYyBYR01BQyBzdXBwb3J0LgogICovCiAKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvYml0ZmllbGQuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9pb3BvbGwuaCZndDsKICNpbmNsdWRlICYjMzQ7c3RtbWFjLmgmIzM0OwogI2luY2x1ZGUgJiMzNDtkd3hnbWFjMi5oJiMzNDsKQEAgLTI2MSwxMyAmIzQzOzI2MiwxMiBAQCBzdGF0aWMgdm9pZCBkd3hnbWFjMl9kbWFfc3RhcnRfdHgoc3RydWN0IHN0bW1hY19wcml2ICpwcml2LAogewogCXUzMiB2YWx1ZTsKIAomIzQzOwkvKiBUUFMgaXMgbGF0Y2hlZCBvbmNlIHNldCwgc28gY2xlYXIgaXQgb24gZXZlcnkgVHggRE1BIHN0YXJ0LiAqLwomIzQzOwl3cml0ZWwoWEdNQUNfVFBTLCBpb2FkZHIgJiM0MzsgWEdNQUNfRE1BX0NIX1NUQVRVUyhjaGFuKSk7CiYjNDM7CiAJdmFsdWUgPSByZWFkbChpb2FkZHIgJiM0MzsgWEdNQUNfRE1BX0NIX1RYX0NPTlRST0woY2hhbikpOwogCXZhbHVlIHw9IFhHTUFDX1RYU1Q7CiAJd3JpdGVsKHZhbHVlLCBpb2FkZHIgJiM0MzsgWEdNQUNfRE1BX0NIX1RYX0NPTlRST0woY2hhbikpOwotCi0JdmFsdWUgPSByZWFkbChpb2FkZHIgJiM0MzsgWEdNQUNfVFhfQ09ORklHKTsKLQl2YWx1ZSB8PSBYR01BQ19DT05GSUdfVEU7Ci0Jd3JpdGVsKHZhbHVlLCBpb2FkZHIgJiM0MzsgWEdNQUNfVFhfQ09ORklHKTsKIH0KIAogc3RhdGljIHZvaWQgZHd4Z21hYzJfZG1hX3N0b3BfdHgoc3RydWN0IHN0bW1hY19wcml2ICpwcml2LCB2b2lkIF9faW9tZW0gKmlvYWRkciwKQEAgLTI3OCwxMCAmIzQzOzI3OCw2IEBAIHN0YXRpYyB2b2lkIGR3eGdtYWMyX2RtYV9zdG9wX3R4KHN0cnVjdCBzdG1tYWNfcHJpdiAqcHJpdiwgdm9pZCBfX2lvbWVtICppb2FkZHIsCiAJdmFsdWUgPSByZWFkbChpb2FkZHIgJiM0MzsgWEdNQUNfRE1BX0NIX1RYX0NPTlRST0woY2hhbikpOwogCXZhbHVlICZhbXA7PSB+WEdNQUNfVFhTVDsKIAl3cml0ZWwodmFsdWUsIGlvYWRkciAmIzQzOyBYR01BQ19ETUFfQ0hfVFhfQ09OVFJPTChjaGFuKSk7Ci0KLQl2YWx1ZSA9IHJlYWRsKGlvYWRkciAmIzQzOyBYR01BQ19UWF9DT05GSUcpOwotCXZhbHVlICZhbXA7PSB+WEdNQUNfQ09ORklHX1RFOwotCXdyaXRlbCh2YWx1ZSwgaW9hZGRyICYjNDM7IFhHTUFDX1RYX0NPTkZJRyk7CiB9CiAKIHN0YXRpYyB2b2lkIGR3eGdtYWMyX2RtYV9zdGFydF9yeChzdHJ1Y3Qgc3RtbWFjX3ByaXYgKnByaXYsCkBAIC0yODksMTMgJiM0MzsyODUsMTIgQEAgc3RhdGljIHZvaWQgZHd4Z21hYzJfZG1hX3N0YXJ0X3J4KHN0cnVjdCBzdG1tYWNfcHJpdiAqcHJpdiwKIHsKIAl1MzIgdmFsdWU7CiAKJiM0MzsJLyogUlBTIGlzIGxhdGNoZWQgb25jZSBzZXQsIHNvIGNsZWFyIGl0IG9uIGV2ZXJ5IFJ4IERNQSBzdGFydC4gKi8KJiM0MzsJd3JpdGVsKFhHTUFDX1JQUywgaW9hZGRyICYjNDM7IFhHTUFDX0RNQV9DSF9TVEFUVVMoY2hhbikpOwomIzQzOwogCXZhbHVlID0gcmVhZGwoaW9hZGRyICYjNDM7IFhHTUFDX0RNQV9DSF9SWF9DT05UUk9MKGNoYW4pKTsKIAl2YWx1ZSB8PSBYR01BQ19SWFNUOwogCXdyaXRlbCh2YWx1ZSwgaW9hZGRyICYjNDM7IFhHTUFDX0RNQV9DSF9SWF9DT05UUk9MKGNoYW4pKTsKLQotCXZhbHVlID0gcmVhZGwoaW9hZGRyICYjNDM7IFhHTUFDX1JYX0NPTkZJRyk7Ci0JdmFsdWUgfD0gWEdNQUNfQ09ORklHX1JFOwotCXdyaXRlbCh2YWx1ZSwgaW9hZGRyICYjNDM7IFhHTUFDX1JYX0NPTkZJRyk7CiB9CiAKIHN0YXRpYyB2b2lkIGR3eGdtYWMyX2RtYV9zdG9wX3J4KHN0cnVjdCBzdG1tYWNfcHJpdiAqcHJpdiwgdm9pZCBfX2lvbWVtICppb2FkZHIsCkBAIC01OTIsNiAmIzQzOzU4Nyw3NyBAQCBzdGF0aWMgaW50IGR3eGdtYWMyX2VuYWJsZV90YnMoc3RydWN0IHN0bW1hY19wcml2ICpwcml2LCB2b2lkIF9faW9tZW0gKmlvYWRkciwKIAlyZXR1cm4gMDsKIH0KIAomIzQzO3N0YXRpYyBpbnQgZHd4Z21hYzJfdHhfZG1hX3N0b3BwZWQoc3RydWN0IHN0bW1hY19wcml2ICpwcml2LAomIzQzOwkJCQkgICB2b2lkIF9faW9tZW0gKmlvYWRkciwgdTMyIGNoYW4pCiYjNDM7ewomIzQzOwl1MzIgdmFsdWU7CiYjNDM7CWludCByZXQ7CiYjNDM7CiYjNDM7CXJldCA9IHJlYWRsX3BvbGxfdGltZW91dChpb2FkZHIgJiM0MzsgWEdNQUNfRE1BX0NIX1NUQVRVUyhjaGFuKSwgdmFsdWUsCiYjNDM7CQkJCSB2YWx1ZSAmYW1wOyBYR01BQ19UUFMsIDEwMCwgMTAwMDApOwomIzQzOwlpZiAocmV0KQomIzQzOwkJbmV0ZGV2X3dhcm4ocHJpdi0mZ3Q7ZGV2LCAmIzM0O1R4IERNQSBjaGFubmVsICV1IHN0b3AgdGltZW91dFxuJiMzNDssCiYjNDM7CQkJICAgIGNoYW4pOwomIzQzOwomIzQzOwlyZXR1cm4gcmV0OwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW50IGR3eGdtYWMyX3R4X210bF9kcmFpbihzdHJ1Y3Qgc3RtbWFjX3ByaXYgKnByaXYsCiYjNDM7CQkJCSB2b2lkIF9faW9tZW0gKmlvYWRkciwgdTMyIHF1ZXVlKQomIzQzO3sKJiM0MzsJdTMyIHZhbHVlOwomIzQzOwlpbnQgcmV0OwomIzQzOwomIzQzOwkvKiBXYWl0IHVudGlsIHRoZSBxdWV1ZSBpcyBlbXB0eSBhbmQgaXRzIHJlYWQgY29udHJvbGxlciBpcyBubyBsb25nZXIKJiM0MzsJICogcHVsbGluZyBhIGZyYW1lIG91dCB0b3dhcmRzIHRoZSBNQUMuCiYjNDM7CSAqLwomIzQzOwlyZXQgPSByZWFkbF9wb2xsX3RpbWVvdXQoaW9hZGRyICYjNDM7IFhHTUFDX01UTF9UWFFfREVCVUcocXVldWUpLCB2YWx1ZSwKJiM0MzsJCQkJICEodmFsdWUgJmFtcDsgWEdNQUNfVFhRU1RTKSAmYW1wOyZhbXA7CiYjNDM7CQkJCSBGSUVMRF9HRVQoWEdNQUNfVFJDU1RTLCB2YWx1ZSkgIT0KJiM0MzsJCQkJIFhHTUFDX1RSQ1NUU19SRUFELAomIzQzOwkJCQkgMTAwLCAxMDAwMCk7CiYjNDM7CWlmIChyZXQpCiYjNDM7CQluZXRkZXZfd2Fybihwcml2LSZndDtkZXYsICYjMzQ7TVRMIFR4IHF1ZXVlICV1IGRyYWluIHRpbWVvdXRcbiYjMzQ7LAomIzQzOwkJCSAgICBxdWV1ZSk7CiYjNDM7CiYjNDM7CXJldHVybiByZXQ7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbnQgZHd4Z21hYzJfcnhfbXRsX2RyYWluKHN0cnVjdCBzdG1tYWNfcHJpdiAqcHJpdiwKJiM0MzsJCQkJIHZvaWQgX19pb21lbSAqaW9hZGRyLCB1MzIgcXVldWUpCiYjNDM7ewomIzQzOwl1MzIgdmFsdWU7CiYjNDM7CWludCByZXQ7CiYjNDM7CiYjNDM7CS8qIFdhaXQgdW50aWwgbm8gcGFja2V0IGlzIGxlZnQgaW4gdGhlIHF1ZXVlIGFuZCB0aGUgcXVldWUgcmVwb3J0cwomIzQzOwkgKiBpdHNlbGYgZW1wdHkuCiYjNDM7CSAqLwomIzQzOwlyZXQgPSByZWFkbF9wb2xsX3RpbWVvdXQoaW9hZGRyICYjNDM7IFhHTUFDX01UTF9SWFFfREVCVUcocXVldWUpLCB2YWx1ZSwKJiM0MzsJCQkJICFGSUVMRF9HRVQoWEdNQUNfUFJYUSwgdmFsdWUpICZhbXA7JmFtcDsKJiM0MzsJCQkJICFGSUVMRF9HRVQoWEdNQUNfUlhRU1RTLCB2YWx1ZSksCiYjNDM7CQkJCSAxMDAsIDEwMDAwKTsKJiM0MzsJaWYgKHJldCkKJiM0MzsJCW5ldGRldl93YXJuKHByaXYtJmd0O2RldiwgJiMzNDtNVEwgUnggcXVldWUgJXUgZHJhaW4gdGltZW91dFxuJiMzNDssCiYjNDM7CQkJICAgIHF1ZXVlKTsKJiM0MzsKJiM0MzsJcmV0dXJuIHJldDsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGludCBkd3hnbWFjMl9yeF9kbWFfc3RvcHBlZChzdHJ1Y3Qgc3RtbWFjX3ByaXYgKnByaXYsCiYjNDM7CQkJCSAgIHZvaWQgX19pb21lbSAqaW9hZGRyLCB1MzIgY2hhbikKJiM0Mzt7CiYjNDM7CXUzMiB2YWx1ZTsKJiM0MzsJaW50IHJldDsKJiM0MzsKJiM0MzsJcmV0ID0gcmVhZGxfcG9sbF90aW1lb3V0KGlvYWRkciAmIzQzOyBYR01BQ19ETUFfQ0hfU1RBVFVTKGNoYW4pLCB2YWx1ZSwKJiM0MzsJCQkJIHZhbHVlICZhbXA7IFhHTUFDX1JQUywgMTAwLCAxMDAwMCk7CiYjNDM7CWlmIChyZXQpCiYjNDM7CQluZXRkZXZfd2Fybihwcml2LSZndDtkZXYsICYjMzQ7UnggRE1BIGNoYW5uZWwgJXUgc3RvcCB0aW1lb3V0XG4mIzM0OywKJiM0MzsJCQkgICAgY2hhbik7CiYjNDM7CiYjNDM7CXJldHVybiByZXQ7CiYjNDM7fQomIzQzOwogY29uc3Qgc3RydWN0IHN0bW1hY19kbWFfb3BzIGR3eGdtYWMyMTBfZG1hX29wcyA9IHsKIAkucmVzZXQgPSBkd3hnbWFjMl9kbWFfcmVzZXQsCiAJLmluaXQgPSBkd3hnbWFjMl9kbWFfaW5pdCwKQEAgLTYyMCw0ICYjNDM7Njg2LDggQEAgY29uc3Qgc3RydWN0IHN0bW1hY19kbWFfb3BzIGR3eGdtYWMyMTBfZG1hX29wcyA9IHsKIAkuc2V0X2Jmc2l6ZSA9IGR3eGdtYWMyX3NldF9iZnNpemUsCiAJLmVuYWJsZV9zcGggPSBkd3hnbWFjMl9lbmFibGVfc3BoLAogCS5lbmFibGVfdGJzID0gZHd4Z21hYzJfZW5hYmxlX3RicywKJiM0MzsJLnR4X2RtYV9zdG9wcGVkID0gZHd4Z21hYzJfdHhfZG1hX3N0b3BwZWQsCiYjNDM7CS50eF9tdGxfZHJhaW4gPSBkd3hnbWFjMl90eF9tdGxfZHJhaW4sCiYjNDM7CS5yeF9tdGxfZHJhaW4gPSBkd3hnbWFjMl9yeF9tdGxfZHJhaW4sCiYjNDM7CS5yeF9kbWFfc3RvcHBlZCA9IGR3eGdtYWMyX3J4X2RtYV9zdG9wcGVkLAogfTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2h3aWYuaCBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2h3aWYuaAppbmRleCAwNGRhZmVjMDIxYjRmLi44NmY0YWE4ODk2MWM3IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9od2lmLmgKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvaHdpZi5oCkBAIC0yMzEsNiAmIzQzOzIzMSwxNSBAQCBzdHJ1Y3Qgc3RtbWFjX2RtYV9vcHMgewogCQkJICAgYm9vbCBlbiwgdTMyIGNoYW4pOwogCWludCAoKmVuYWJsZV90YnMpKHN0cnVjdCBzdG1tYWNfcHJpdiAqcHJpdiwgdm9pZCBfX2lvbWVtICppb2FkZHIsCiAJCQkgIGJvb2wgZW4sIHUzMiBjaGFuKTsKJiM0MzsJLyogT3JkZXJlZCBkYXRhcGF0aCB0ZWFyZG93biAqLwomIzQzOwlpbnQgKCp0eF9kbWFfc3RvcHBlZCkoc3RydWN0IHN0bW1hY19wcml2ICpwcml2LCB2b2lkIF9faW9tZW0gKmlvYWRkciwKJiM0MzsJCQkgICAgICB1MzIgY2hhbik7CiYjNDM7CWludCAoKnR4X210bF9kcmFpbikoc3RydWN0IHN0bW1hY19wcml2ICpwcml2LCB2b2lkIF9faW9tZW0gKmlvYWRkciwKJiM0MzsJCQkgICAgdTMyIHF1ZXVlKTsKJiM0MzsJaW50ICgqcnhfbXRsX2RyYWluKShzdHJ1Y3Qgc3RtbWFjX3ByaXYgKnByaXYsIHZvaWQgX19pb21lbSAqaW9hZGRyLAomIzQzOwkJCSAgICB1MzIgcXVldWUpOwomIzQzOwlpbnQgKCpyeF9kbWFfc3RvcHBlZCkoc3RydWN0IHN0bW1hY19wcml2ICpwcml2LCB2b2lkIF9faW9tZW0gKmlvYWRkciwKJiM0MzsJCQkgICAgICB1MzIgY2hhbik7CiB9OwogCiAjZGVmaW5lIHN0bW1hY19kbWFfaW5pdChfX3ByaXYsIF9fYXJncy4uLikgXApAQCAtMjkzLDYgJiM0MzszMDIsMTQgQEAgc3RydWN0IHN0bW1hY19kbWFfb3BzIHsKIAlzdG1tYWNfZG9fdm9pZF9jYWxsYmFjayhfX3ByaXYsIGRtYSwgZW5hYmxlX3NwaCwgX19wcml2LCBfX2FyZ3MpCiAjZGVmaW5lIHN0bW1hY19lbmFibGVfdGJzKF9fcHJpdiwgX19hcmdzLi4uKSBcCiAJc3RtbWFjX2RvX2NhbGxiYWNrKF9fcHJpdiwgZG1hLCBlbmFibGVfdGJzLCBfX3ByaXYsIF9fYXJncykKJiM0MzsjZGVmaW5lIHN0bW1hY190eF9kbWFfc3RvcHBlZChfX3ByaXYsIF9fYXJncy4uLikgXAomIzQzOwlzdG1tYWNfZG9fY2FsbGJhY2soX19wcml2LCBkbWEsIHR4X2RtYV9zdG9wcGVkLCBfX3ByaXYsIF9fYXJncykKJiM0MzsjZGVmaW5lIHN0bW1hY190eF9tdGxfZHJhaW4oX19wcml2LCBfX2FyZ3MuLi4pIFwKJiM0MzsJc3RtbWFjX2RvX2NhbGxiYWNrKF9fcHJpdiwgZG1hLCB0eF9tdGxfZHJhaW4sIF9fcHJpdiwgX19hcmdzKQomIzQzOyNkZWZpbmUgc3RtbWFjX3J4X210bF9kcmFpbihfX3ByaXYsIF9fYXJncy4uLikgXAomIzQzOwlzdG1tYWNfZG9fY2FsbGJhY2soX19wcml2LCBkbWEsIHJ4X210bF9kcmFpbiwgX19wcml2LCBfX2FyZ3MpCiYjNDM7I2RlZmluZSBzdG1tYWNfcnhfZG1hX3N0b3BwZWQoX19wcml2LCBfX2FyZ3MuLi4pIFwKJiM0MzsJc3RtbWFjX2RvX2NhbGxiYWNrKF9fcHJpdiwgZG1hLCByeF9kbWFfc3RvcHBlZCwgX19wcml2LCBfX2FyZ3MpCiAKIHN0cnVjdCBtYWNfZGV2aWNlX2luZm87CiBzdHJ1Y3QgbmV0X2RldmljZTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19tYWluLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfbWFpbi5jCmluZGV4IGIyYjdkMDI0MmRkM2MuLjljM2E4ZjEyMmI5NGYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19tYWluLmMKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX21haW4uYwpAQCAtMjU2MCw2ICYjNDM7MjU2MCw1MiBAQCBzdGF0aWMgdm9pZCBzdG1tYWNfc3RvcF9hbGxfZG1hKHN0cnVjdCBzdG1tYWNfcHJpdiAqcHJpdikKIAkJc3RtbWFjX2RlaW5pdF9jaGFuKHByaXYsIHByaXYtJmd0O2lvYWRkciwgY2hhbik7CiB9CiAKJiM0MzsvKioKJiM0MzsgKiBzdG1tYWNfZGF0YXBhdGhfdGVhcmRvd24gLSBvcmRlcmVkIGRhdGFwYXRoIHRlYXJkb3duIGFzIHBlciBJUCBzcGVjaWZpY2F0aW9uCiYjNDM7ICogQHByaXY6IGRyaXZlciBwcml2YXRlIHN0cnVjdHVyZQomIzQzOyAqIERlc2NyaXB0aW9uOgomIzQzOyAqIFdoZW4gdGVhcmRvd24gb3BzIGFyZSBhdmFpbGFibGUsIGZvbGxvdyB0aGUgZGF0YWJvb2sgb3JkZXJlZCB0ZWFyZG93bgomIzQzOyAqIHNlcXVlbmNlLgomIzQzOyAqIEZvbGxvd3MgdGhlIGxlZ2FjeSBzdG9wICYjNDM7IE1BQyBkaXNhYmxlIGZvciB2YXJpYW50cyB3aXRob3V0IHRoZSBmZWF0dXJlLgomIzQzOyAqLwomIzQzO3N0YXRpYyB2b2lkIHN0bW1hY19kYXRhcGF0aF90ZWFyZG93bihzdHJ1Y3Qgc3RtbWFjX3ByaXYgKnByaXYpCiYjNDM7ewomIzQzOwl1MzIgcnhfY2hhbm5lbHNfY291bnQgPSBwcml2LSZndDtwbGF0LSZndDtyeF9xdWV1ZXNfdG9fdXNlOwomIzQzOwl1MzIgdHhfY2hhbm5lbHNfY291bnQgPSBwcml2LSZndDtwbGF0LSZndDt0eF9xdWV1ZXNfdG9fdXNlOwomIzQzOwl1MzIgY2hhbjsKJiM0MzsKJiM0MzsJLyogU3RvcCBhbGwgVFggRE1BIGNoYW5uZWxzICovCiYjNDM7CWZvciAoY2hhbiA9IDA7IGNoYW4gJmx0OyB0eF9jaGFubmVsc19jb3VudDsgY2hhbiYjNDM7JiM0MzspCiYjNDM7CQlzdG1tYWNfc3RvcF90eF9kbWEocHJpdiwgY2hhbik7CiYjNDM7CiYjNDM7CS8qIFdhaXQgZm9yIGV2ZXJ5IFRYIERNQSBjaGFubmVsIHRvIHJlcG9ydCBpdHNlbGYgc3RvcHBlZCAqLwomIzQzOwlpZiAocHJpdi0mZ3Q7aHctJmd0O2RtYS0mZ3Q7dHhfZG1hX3N0b3BwZWQpCiYjNDM7CQlmb3IgKGNoYW4gPSAwOyBjaGFuICZsdDsgdHhfY2hhbm5lbHNfY291bnQ7IGNoYW4mIzQzOyYjNDM7KQomIzQzOwkJCXN0bW1hY190eF9kbWFfc3RvcHBlZChwcml2LCBwcml2LSZndDtpb2FkZHIsIGNoYW4pOwomIzQzOwomIzQzOwkvKiBXYWl0IGZvciB0aGUgTVRMIFRYIHF1ZXVlcyB0byBmaW5pc2ggcHVzaGluZyBpbnRvIHRoZSBNQUMgKi8KJiM0MzsJaWYgKHByaXYtJmd0O2h3LSZndDtkbWEtJmd0O3R4X210bF9kcmFpbikKJiM0MzsJCWZvciAoY2hhbiA9IDA7IGNoYW4gJmx0OyB0eF9jaGFubmVsc19jb3VudDsgY2hhbiYjNDM7JiM0MzspCiYjNDM7CQkJc3RtbWFjX3R4X210bF9kcmFpbihwcml2LCBwcml2LSZndDtpb2FkZHIsIGNoYW4pOwomIzQzOwomIzQzOwkvKiBEaXNhYmxlIHRoZSBNQUMgVFggYW5kIFJYICovCiYjNDM7CXN0bW1hY19tYWNfc2V0KHByaXYsIHByaXYtJmd0O2lvYWRkciwgZmFsc2UpOwomIzQzOwomIzQzOwkvKiBXYWl0IGZvciB0aGUgTVRMIFJYIHF1ZXVlcyB0byBkcmFpbiBpbnRvIHRoZSBSWCBETUEgKi8KJiM0MzsJaWYgKHByaXYtJmd0O2h3LSZndDtkbWEtJmd0O3J4X210bF9kcmFpbikKJiM0MzsJCWZvciAoY2hhbiA9IDA7IGNoYW4gJmx0OyByeF9jaGFubmVsc19jb3VudDsgY2hhbiYjNDM7JiM0MzspCiYjNDM7CQkJc3RtbWFjX3J4X210bF9kcmFpbihwcml2LCBwcml2LSZndDtpb2FkZHIsIGNoYW4pOwomIzQzOwomIzQzOwkvKiBTdG9wIGFsbCBSWCBETUEgY2hhbm5lbHMgKi8KJiM0MzsJZm9yIChjaGFuID0gMDsgY2hhbiAmbHQ7IHJ4X2NoYW5uZWxzX2NvdW50OyBjaGFuJiM0MzsmIzQzOykKJiM0MzsJCXN0bW1hY19zdG9wX3J4X2RtYShwcml2LCBjaGFuKTsKJiM0MzsKJiM0MzsJLyogV2FpdCBmb3IgZXZlcnkgUlggRE1BIGNoYW5uZWwgdG8gcmVwb3J0IGl0c2VsZiBzdG9wcGVkICovCiYjNDM7CWlmIChwcml2LSZndDtody0mZ3Q7ZG1hLSZndDtyeF9kbWFfc3RvcHBlZCkKJiM0MzsJCWZvciAoY2hhbiA9IDA7IGNoYW4gJmx0OyByeF9jaGFubmVsc19jb3VudDsgY2hhbiYjNDM7JiM0MzspCiYjNDM7CQkJc3RtbWFjX3J4X2RtYV9zdG9wcGVkKHByaXYsIHByaXYtJmd0O2lvYWRkciwgY2hhbik7CiYjNDM7fQomIzQzOwogLyoqCiAgKiAgc3RtbWFjX2RtYV9vcGVyYXRpb25fbW9kZSAtIEhXIERNQSBvcGVyYXRpb24gbW9kZQogICogIEBwcml2OiBkcml2ZXIgcHJpdmF0ZSBzdHJ1Y3R1cmUKQEAgLTM2ODUsOSAmIzQzOzM3MzEsNiBAQCBzdGF0aWMgaW50IHN0bW1hY19od19zZXR1cChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQogCQlwcml2LSZndDtody0mZ3Q7cnhfY3N1bSA9IDA7CiAJfQogCi0JLyogRW5hYmxlIHRoZSBNQUMgUngvVHggKi8KLQlzdG1tYWNfbWFjX3NldChwcml2LCBwcml2LSZndDtpb2FkZHIsIHRydWUpOwotCiAJLyogU2V0IHRoZSBIVyBETUEgbW9kZSBhbmQgdGhlIENPRSAqLwogCXN0bW1hY19kbWFfb3BlcmF0aW9uX21vZGUocHJpdik7CiAKQEAgLTM3NDMsNiAmIzQzOzM3ODYsOSBAQCBzdGF0aWMgaW50IHN0bW1hY19od19zZXR1cChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQogCS8qIFN0YXJ0IHRoZSBiYWxsIHJvbGxpbmcuLi4gKi8KIAlzdG1tYWNfc3RhcnRfYWxsX2RtYShwcml2KTsKIAomIzQzOwkvKiBFbmFibGUgdGhlIE1BQyBSeC9UeCAqLwomIzQzOwlzdG1tYWNfbWFjX3NldChwcml2LCBwcml2LSZndDtpb2FkZHIsIHRydWUpOwomIzQzOwogCXBoeWxpbmtfcnhfY2xrX3N0b3BfYmxvY2socHJpdi0mZ3Q7cGh5bGluayk7CiAJc3RtbWFjX3NldF9od192bGFuX21vZGUocHJpdiwgcHJpdi0mZ3Q7aHcpOwogCXBoeWxpbmtfcnhfY2xrX3N0b3BfdW5ibG9jayhwcml2LSZndDtwaHlsaW5rKTsKQEAgLTQyNDAsOSAmIzQzOzQyODYsNiBAQCBzdGF0aWMgdm9pZCBfX3N0bW1hY19yZWxlYXNlKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiAJc3RydWN0IHN0bW1hY19wcml2ICpwcml2ID0gbmV0ZGV2X3ByaXYoZGV2KTsKIAl1OCBjaGFuOwogCi0JLyogU3RvcCBhbmQgZGlzY29ubmVjdCB0aGUgUEhZICovCi0JcGh5bGlua19zdG9wKHByaXYtJmd0O3BoeWxpbmspOwotCiAJc3RtbWFjX2Rpc2FibGVfYWxsX3F1ZXVlcyhwcml2KTsKIAogCWZvciAoY2hhbiA9IDA7IGNoYW4gJmx0OyBwcml2LSZndDtwbGF0LSZndDt0eF9xdWV1ZXNfdG9fdXNlOyBjaGFuJiM0MzsmIzQzOykKQEAgLTQyNTMsOCAmIzQzOzQyOTYsMTEgQEAgc3RhdGljIHZvaWQgX19zdG1tYWNfcmVsZWFzZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQogCS8qIEZyZWUgdGhlIElSUSBsaW5lcyAqLwogCXN0bW1hY19mcmVlX2lycShkZXYsIFJFUV9JUlFfRVJSX0FMTCwgMCk7CiAKLQkvKiBTdG9wIFRYL1JYIERNQSBhbmQgY2xlYXIgdGhlIGRlc2NyaXB0b3JzICovCi0Jc3RtbWFjX3N0b3BfYWxsX2RtYShwcml2KTsKJiM0MzsJLyogSGFzIHRvIHJ1biBiZWZvcmUgbWFjX2xpbmtfZG93bigpIGRpc2FibGVzIHRoZSBNQUMuICovCiYjNDM7CXN0bW1hY19kYXRhcGF0aF90ZWFyZG93bihwcml2KTsKJiM0MzsKJiM0MzsJLyogU3RvcCBhbmQgZGlzY29ubmVjdCB0aGUgUEhZICovCiYjNDM7CXBoeWxpbmtfc3RvcChwcml2LSZndDtwaHlsaW5rKTsKIAogCS8qIFJlbGVhc2UgYW5kIGZyZWUgdGhlIFJ4L1R4IHJlc291cmNlcyAqLwogCWZyZWVfZG1hX2Rlc2NfcmVzb3VyY2VzKHByaXYsICZhbXA7cHJpdi0mZ3Q7ZG1hX2NvbmYpOwpAQCAtNzEwNCwxNSAmIzQzOzcxNTAsMTIgQEAgdm9pZCBzdG1tYWNfeGRwX3JlbGVhc2Uoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIAkvKiBGcmVlIHRoZSBJUlEgbGluZXMgKi8KIAlzdG1tYWNfZnJlZV9pcnEoZGV2LCBSRVFfSVJRX0VSUl9BTEwsIDApOwogCi0JLyogU3RvcCBUWC9SWCBETUEgY2hhbm5lbHMgKi8KLQlzdG1tYWNfc3RvcF9hbGxfZG1hKHByaXYpOwomIzQzOwkvKiBTdG9wIHRoZSBNQUMgYW5kIHRoZSBUWC9SWCBETUEgY2hhbm5lbHMgKi8KJiM0MzsJc3RtbWFjX2RhdGFwYXRoX3RlYXJkb3duKHByaXYpOwogCiAJLyogUmVsZWFzZSBhbmQgZnJlZSB0aGUgUngvVHggcmVzb3VyY2VzICovCiAJZnJlZV9kbWFfZGVzY19yZXNvdXJjZXMocHJpdiwgJmFtcDtwcml2LSZndDtkbWFfY29uZik7CiAKLQkvKiBEaXNhYmxlIHRoZSBNQUMgUngvVHggKi8KLQlzdG1tYWNfbWFjX3NldChwcml2LCBwcml2LSZndDtpb2FkZHIsIGZhbHNlKTsKLQogCS8qIHNldCB0cmFuc19zdGFydCBzbyB3ZSBkb24mIzM5O3QgZ2V0IHNwdXJpb3VzCiAJICogd2F0Y2hkb2dzIGR1cmluZyByZXNldAogCSAqLwpAQCAtNzE4NCwxMiAmIzQzOzcyMjcsMTIgQEAgaW50IHN0bW1hY194ZHBfb3BlbihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQogCQlocnRpbWVyX3NldHVwKCZhbXA7dHhfcS0mZ3Q7dHh0aW1lciwgc3RtbWFjX3R4X3RpbWVyLCBDTE9DS19NT05PVE9OSUMsIEhSVElNRVJfTU9ERV9SRUwpOwogCX0KIAotCS8qIEVuYWJsZSB0aGUgTUFDIFJ4L1R4ICovCi0Jc3RtbWFjX21hY19zZXQocHJpdiwgcHJpdi0mZ3Q7aW9hZGRyLCB0cnVlKTsKLQogCS8qIFN0YXJ0IFJ4ICZhbXA7IFR4IERNQSBDaGFubmVscyAqLwogCXN0bW1hY19zdGFydF9hbGxfZG1hKHByaXYpOwogCiYjNDM7CS8qIEVuYWJsZSB0aGUgTUFDIFJ4L1R4ICovCiYjNDM7CXN0bW1hY19tYWNfc2V0KHByaXYsIHByaXYtJmd0O2lvYWRkciwgdHJ1ZSk7CiYjNDM7CiAJcmV0ID0gc3RtbWFjX3JlcXVlc3RfaXJxKGRldik7CiAJaWYgKHJldCkKIAkJZ290byBpcnFfZXJyb3I7CkBAIC04MTkwLDE3ICYjNDM7ODIzMywxNSBAQCBpbnQgc3RtbWFjX3N1c3BlbmQoc3RydWN0IGRldmljZSAqZGV2KQogCQl0aW1lcl9kZWxldGVfc3luYygmYW1wO3ByaXYtJmd0O2VlZV9jdHJsX3RpbWVyKTsKIAl9CiAKLQkvKiBTdG9wIFRYL1JYIERNQSAqLwotCXN0bW1hY19zdG9wX2FsbF9kbWEocHJpdik7Ci0KLQlzdG1tYWNfbGVnYWN5X3NlcmRlc19wb3dlcl9kb3duKHByaXYpOwotCiAJLyogRW5hYmxlIFBvd2VyIGRvd24gbW9kZSBieSBwcm9ncmFtbWluZyB0aGUgUE1UIHJlZ3MgKi8KIAlpZiAocHJpdi0mZ3Q7d29sb3B0cykgewomIzQzOwkJc3RtbWFjX3N0b3BfYWxsX2RtYShwcml2KTsKJiM0MzsJCXN0bW1hY19sZWdhY3lfc2VyZGVzX3Bvd2VyX2Rvd24ocHJpdik7CiAJCXN0bW1hY19wbXQocHJpdiwgcHJpdi0mZ3Q7aHcsIHByaXYtJmd0O3dvbG9wdHMpOwogCQlwcml2LSZndDtpcnFfd2FrZSA9IDE7CiAJfSBlbHNlIHsKLQkJc3RtbWFjX21hY19zZXQocHJpdiwgcHJpdi0mZ3Q7aW9hZGRyLCBmYWxzZSk7CiYjNDM7CQlzdG1tYWNfZGF0YXBhdGhfdGVhcmRvd24ocHJpdik7CiYjNDM7CQlzdG1tYWNfbGVnYWN5X3NlcmRlc19wb3dlcl9kb3duKHByaXYpOwogCQlwaW5jdHJsX3BtX3NlbGVjdF9zbGVlcF9zdGF0ZShwcml2LSZndDtkZXZpY2UpOwogCX0KIAo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNCAwNjozNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA3Mzg0CgkJCQkJCQlvdXRwdXQ6IDIwCgkJCQkJCQl0aG91Z2h0czogMzczCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgSW1wYWN0IG9mIHRoZSBTVE1NQUMgRHJpdmVyIFBhdGNoKioKCk9rYXksIHNvIEkmIzM5O3ZlIGdvdCB0aGlzIHBhdGNoIHRoYXQgYWRkcyBvcmRlcmVkIGRhdGFwYXRoIHRlYXJkb3duIGxvZ2ljIGZvciBkd3hnbWFjMiB3aXRoaW4gdGhlIHN0bW1hYyBkcml2ZXIuIEl0JiMzOTtzIHRvdWNoaW5nIGBzdG1tYWNfbWFpbi5jYCB0byBzd2FwIG91dCB0aGUgb2xkIHNodXRkb3duIHNlcXVlbmNlIGZvciBgc3RtbWFjX2RhdGFwYXRoX3RlYXJkb3duKClgLCBhbmQgaXQmIzM5O3MgYWxzbyByZW9yZGVyaW5nIHNvbWUgZnVuY3Rpb25zIGluIGBzdG1tYWNfaHdfc2V0dXBgIGFuZCBgc3RtbWFjX3hkcF9vcGVuYC4gTXkgcHJpbWFyeSBjb25jZXJuIG5vdyBpcyB0byBkZXRlcm1pbmUgdGhlIHJlYWNoIG9mIHRoaXMgY2hhbmdlLiBTcGVjaWZpY2FsbHksIEkgbmVlZCB0byBrbm93IGhvdyBsaWtlbHkgaXQgaXMgdGhhdCB0aGlzIGRyaXZlciBpcyBoaXQgaW4gYW55IHZpcnR1YWxpemVkIGVudmlyb25tZW50LgoKVGhlIHN0bW1hYyBkcml2ZXIsIGZyb20gd2hhdCBJIGtub3csIGlzIHVzZWQgZm9yIFN5bm9wc3lzIERlc2lnbldhcmUgTUFDcy4gQSBxdWljayBjaGVjayB0ZWxscyBtZSB0aGF0IHdoaWxlIFFFTVUgZG9lc24mIzM5O3QgZGlyZWN0bHkgZW11bGF0ZSBzdG1tYWMgYnkgZGVmYXVsdCwgdGhhdCBkb2VzbuKAmXQgbWVhbiBpdCYjMzk7cyBuZXZlciB1c2VkLiBJdOKAmXMgZGVmaW5pdGVseSBwbGF1c2libGUgaXQmIzM5O3MgcGFydCBvZiB0aGUgZW11bGF0ZWQgaGFyZHdhcmUgb24gc29tZSBBUk0gYm9hcmRzIHVzaW5nIFFFTVUuIFRpbWUgdG8gY29uZmlybSBpZiBhbnkgUUVNVSBib2FyZHMgYWN0dWFsbHkgKmRvKiB1c2Ugc3RtbWFjLiBDb25zaWRlcmluZyB0aGUgd2lkZSByYW5nZSBvZiBTb0NzIHRoYXQgdXNlIHN0bW1hYywgSSBuZWVkIHRvIGNvbnNpZGVyIGEgcmFuZ2Ugb2YgcG9zc2liaWxpdGllcywgZXZlbiB0aG9zZSBhY2Nlc3NlZCB0aHJvdWdoIGEgUENJIGRldmljZSBvciBwbGF0Zm9ybSBkZXZpY2UgaW4gUUVNVS4gSSBzaG91bGQgY2hlY2sgaWYgdGhlcmUmIzM5O3MgYW55IG1lbnRpb24gb2YgYHN0bW1hY2Agd2l0aGluIHRoZSBRRU1VIGNvbmZpZ3VyYXRpb24gb3IgaWYgYENPTkZJR19TVE1NQUNfRVRIYCBpcyBlbmFibGVkIGluIHN5emthbGxlci4KCkFoYSwgYW5kIHRoZW4gSSByZWNhbGxlZCB0aGF0IGBzdG1tYWNgIGFjdHVhbGx5IGhhcyBhIFBDSSBkcml2ZXIsIGBzdG1tYWNfcGNpLmNgLiBUaGlzIGNvdWxkIG9wZW4gdXAgYSB3aG9sZSBuZXcgYXR0YWNrIHN1cmZhY2UgaWYgd2UgY291bGQgdHJpZ2dlciBpdCB0aHJvdWdoIHNvbWUgZ2VuZXJpYyBQQ0kgZGV2aWNlIHNldHVwLiBJIHNob3VsZCBmaW5kIG91dCBpZiBgc3RtbWFjX3BjaWAgaXMgc3BlY2lmaWNhbGx5IHRpZWQgdG8gc29tZSBJbnRlbCBvciBBTUQgU29DcyBvciBpZiBpdOKAmXMgbW9yZSBnZW5lcmljIGFuZCBhcHBsaWNhYmxlIHRvIGEgd2lkZXIgcmFuZ2Ugb2YgaGFyZHdhcmUgZW11bGF0ZWQgYnkgUUVNVS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNCAwNjozNTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtzdG1tYWNfcGNpJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O0RvY3VtZW50YXRpb24vbmV0d29ya2luZy9kZXZpY2VfZHJpdmVycy9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy5yc3Q9MTA3PXN5bnRheCAoZS5nLiBmb3IgUENJIG1vZHVsZSk6OlxuRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL2RldmljZV9kcml2ZXJzL2V0aGVybmV0L3N0bWljcm8vc3RtbWFjLnJzdC0xMDgtXG5Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvZGV2aWNlX2RyaXZlcnMvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMucnN0OjEwOTogICAgbW9kcHJvYmUgc3RtbWFjX3BjaSBbXHUwMDNjb3B0aW9uXHUwMDNlPVx1MDAzY1ZBTDFcdTAwM2UsXHUwMDNjVkFMMlx1MDAzZSwuLi5dXG5Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvZGV2aWNlX2RyaXZlcnMvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMucnN0LTExMC1cbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9NYWtlZmlsZT01Mz1vYmotJChDT05GSUdfRFdNQUNfTU9UT1JDT01NKVx0JiM0Mzs9IGR3bWFjLW1vdG9yY29tbS5vXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9NYWtlZmlsZTo1NDpzdG1tYWMtcGNpLW9ianM6PSBzdG1tYWNfcGNpLm9cbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1pbnRlbC5jPTI1PXN0cnVjdCBpbnRlbF9wcml2X2RhdGEge1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLWludGVsLmMtMzktICovXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1pbnRlbC5jOjQwOnN0cnVjdCBzdG1tYWNfcGNpX2Z1bmNfZGF0YSB7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1pbnRlbC5jLTQxLVx0dW5zaWduZWQgaW50IGZ1bmM7XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtaW50ZWwuYy00NC1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLWludGVsLmM6NDU6c3RydWN0IHN0bW1hY19wY2lfZG1pX2RhdGEge1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtaW50ZWwuYzo0NjpcdGNvbnN0IHN0cnVjdCBzdG1tYWNfcGNpX2Z1bmNfZGF0YSAqZnVuYztcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLWludGVsLmMtNDctXHRzaXplX3QgbmZ1bmNzO1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLWludGVsLmMtNDktXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1pbnRlbC5jOjUwOnN0cnVjdCBzdG1tYWNfcGNpX2luZm8ge1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtaW50ZWwuYy01MS1cdGludCAoKnNldHVwKShzdHJ1Y3QgcGNpX2RldiAqcGRldiwgc3RydWN0IHBsYXRfc3RtbWFjZW5ldF9kYXRhICpwbGF0KTtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1pbnRlbC5jPTkxPXN0YXRpYyBjb25zdCBpbnQgYWRsbl90c25fbGFuZV9yZWdzW10gPSB7Nn07XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1pbnRlbC5jLTkyLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtaW50ZWwuYzo5MzpzdGF0aWMgaW50IHN0bW1hY19wY2lfZmluZF9waHlfYWRkcihzdHJ1Y3QgcGNpX2RldiAqcGRldixcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLWludGVsLmMtOTQtXHRcdFx0XHQgICAgY29uc3Qgc3RydWN0IGRtaV9zeXN0ZW1faWQgKmRtaV9saXN0KVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtaW50ZWwuYy05NS17XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1pbnRlbC5jOjk2Olx0Y29uc3Qgc3RydWN0IHN0bW1hY19wY2lfZnVuY19kYXRhICpmdW5jX2RhdGE7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1pbnRlbC5jOjk3Olx0Y29uc3Qgc3RydWN0IHN0bW1hY19wY2lfZG1pX2RhdGEgKmRtaV9kYXRhO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtaW50ZWwuYy05OC1cdGNvbnN0IHN0cnVjdCBkbWlfc3lzdGVtX2lkICpkbWlfaWQ7XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtaW50ZWwuYz03ODY9c3RhdGljIGludCBlaGxfc2dtaWlfZGF0YShzdHJ1Y3QgcGNpX2RldiAqcGRldixcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1pbnRlbC5jLTgwNS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLWludGVsLmM6ODA2OnN0YXRpYyBzdHJ1Y3Qgc3RtbWFjX3BjaV9pbmZvIGVobF9zZ21paTFnX2luZm8gPSB7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1pbnRlbC5jLTgwNy1cdC5zZXR1cCA9IGVobF9zZ21paV9kYXRhLFxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLWludGVsLmM9ODEwPXN0YXRpYyBpbnQgZWhsX3JnbWlpX2RhdGEoc3RydWN0IHBjaV9kZXYgKnBkZXYsXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtaW50ZWwuYy04MjAtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1pbnRlbC5jOjgyMTpzdGF0aWMgc3RydWN0IHN0bW1hY19wY2lfaW5mbyBlaGxfcmdtaWkxZ19pbmZvID0ge1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtaW50ZWwuYy04MjItXHQuc2V0dXAgPSBlaGxfcmdtaWlfZGF0YSxcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1pbnRlbC5jPTg0MT1zdGF0aWMgaW50IGVobF9wc2UwX3JnbWlpMWdfZGF0YShzdHJ1Y3QgcGNpX2RldiAqcGRldixcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1pbnRlbC5jLTg0Ny1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLWludGVsLmM6ODQ4OnN0YXRpYyBzdHJ1Y3Qgc3RtbWFjX3BjaV9pbmZvIGVobF9wc2UwX3JnbWlpMWdfaW5mbyA9IHtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLWludGVsLmMtODQ5LVx0LnNldHVwID0gZWhsX3BzZTBfcmdtaWkxZ19kYXRhLFxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLWludGVsLmM9ODUyPXN0YXRpYyBpbnQgZWhsX3BzZTBfc2dtaWkxZ19kYXRhKHN0cnVjdCBwY2lfZGV2ICpwZGV2LFxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLWludGVsLmMtODY5LVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtaW50ZWwuYzo4NzA6c3RhdGljIHN0cnVjdCBzdG1tYWNfcGNpX2luZm8gZWhsX3BzZTBfc2dtaWkxZ19pbmZvID0ge1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtaW50ZWwuYy04NzEtXHQuc2V0dXAgPSBlaGxfcHNlMF9zZ21paTFnX2RhdGEsXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtaW50ZWwuYz04OTA9c3RhdGljIGludCBlaGxfcHNlMV9yZ21paTFnX2RhdGEoc3RydWN0IHBjaV9kZXYgKnBkZXYsXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtaW50ZWwuYy04OTYtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1pbnRlbC5jOjg5NzpzdGF0aWMgc3RydWN0IHN0bW1hY19wY2lfaW5mbyBlaGxfcHNlMV9yZ21paTFnX2luZm8gPSB7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1pbnRlbC5jLTg5OC1cdC5zZXR1cCA9IGVobF9wc2UxX3JnbWlpMWdfZGF0YSxcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1pbnRlbC5jPTkwMT1zdGF0aWMgaW50IGVobF9wc2UxX3NnbWlpMWdfZGF0YShzdHJ1Y3QgcGNpX2RldiAqcGRldixcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1pbnRlbC5jLTkxOC1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLWludGVsLmM6OTE5OnN0YXRpYyBzdHJ1Y3Qgc3RtbWFjX3BjaV9pbmZvIGVobF9wc2UxX3NnbWlpMWdfaW5mbyA9IHtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLWludGVsLmMtOTIwLVx0LnNldHVwID0gZWhsX3BzZTFfc2dtaWkxZ19kYXRhLFxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLWludGVsLmM9OTQ0PXN0YXRpYyBpbnQgdGdsX3NnbWlpX3BoeTBfZGF0YShzdHJ1Y3QgcGNpX2RldiAqcGRldixcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1pbnRlbC5jLTk1Mi1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLWludGVsLmM6OTUzOnN0YXRpYyBzdHJ1Y3Qgc3RtbWFjX3BjaV9pbmZvIHRnbF9zZ21paTFnX3BoeTBfaW5mbyA9IHtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLWludGVsLmMtOTU0LVx0LnNldHVwID0gdGdsX3NnbWlpX3BoeTBfZGF0YSxcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1pbnRlbC5jPTk1Nz1zdGF0aWMgaW50IHRnbF9zZ21paV9waHkxX2RhdGEoc3RydWN0IHBjaV9kZXYgKnBkZXYsXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtaW50ZWwuYy05NjUtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1pbnRlbC5jOjk2NjpzdGF0aWMgc3RydWN0IHN0bW1hY19wY2lfaW5mbyB0Z2xfc2dtaWkxZ19waHkxX2luZm8gPSB7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1pbnRlbC5jLTk2Ny1cdC5zZXR1cCA9IHRnbF9zZ21paV9waHkxX2RhdGEsXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtaW50ZWwuYz05NzA9c3RhdGljIGludCBhZGxzX3NnbWlpX3BoeTBfZGF0YShzdHJ1Y3QgcGNpX2RldiAqcGRldixcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1pbnRlbC5jLTk3OS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLWludGVsLmM6OTgwOnN0YXRpYyBzdHJ1Y3Qgc3RtbWFjX3BjaV9pbmZvIGFkbHNfc2dtaWkxZ19waHkwX2luZm8gPSB7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1pbnRlbC5jLTk4MS1cdC5zZXR1cCA9IGFkbHNfc2dtaWlfcGh5MF9kYXRhLFxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLWludGVsLmM9OTg0PXN0YXRpYyBpbnQgYWRsc19zZ21paV9waHkxX2RhdGEoc3RydWN0IHBjaV9kZXYgKnBkZXYsXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtaW50ZWwuYy05OTMtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1pbnRlbC5jOjk5NDpzdGF0aWMgc3RydWN0IHN0bW1hY19wY2lfaW5mbyBhZGxzX3NnbWlpMWdfcGh5MV9pbmZvID0ge1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtaW50ZWwuYy05OTUtXHQuc2V0dXAgPSBhZGxzX3NnbWlpX3BoeTFfZGF0YSxcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1pbnRlbC5jPTEwMjM9c3RhdGljIGludCBhZGxuX3NnbWlpX3BoeTBfZGF0YShzdHJ1Y3QgcGNpX2RldiAqcGRldixcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1pbnRlbC5jLTEwNDEtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1pbnRlbC5jOjEwNDI6c3RhdGljIHN0cnVjdCBzdG1tYWNfcGNpX2luZm8gYWRsbl9zZ21paTFnX3BoeTBfaW5mbyA9IHtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLWludGVsLmMtMTA0My1cdC5zZXR1cCA9IGFkbG5fc2dtaWlfcGh5MF9kYXRhLFxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLWludGVsLmMtMTA0NS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLWludGVsLmM6MTA0NjpzdGF0aWMgY29uc3Qgc3RydWN0IHN0bW1hY19wY2lfZnVuY19kYXRhIGdhbGlsZW9fc3RtbWFjX2Z1bmNfZGF0YVtdID0ge1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtaW50ZWwuYy0xMDQ3LVx0e1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLWludGVsLmMtMTA1Mi1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLWludGVsLmM6MTA1MzpzdGF0aWMgY29uc3Qgc3RydWN0IHN0bW1hY19wY2lfZG1pX2RhdGEgZ2FsaWxlb19zdG1tYWNfZG1pX2RhdGEgPSB7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1pbnRlbC5jLTEwNTQtXHQuZnVuYyA9IGdhbGlsZW9fc3RtbWFjX2Z1bmNfZGF0YSxcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1pbnRlbC5jLTEwNTctXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1pbnRlbC5jOjEwNTg6c3RhdGljIGNvbnN0IHN0cnVjdCBzdG1tYWNfcGNpX2Z1bmNfZGF0YSBpb3QyMDQwX3N0bW1hY19mdW5jX2RhdGFbXSA9IHtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLWludGVsLmMtMTA1OS1cdHtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1pbnRlbC5jLTEwNjgtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1pbnRlbC5jOjEwNjk6c3RhdGljIGNvbnN0IHN0cnVjdCBzdG1tYWNfcGNpX2RtaV9kYXRhIGlvdDIwNDBfc3RtbWFjX2RtaV9kYXRhID0ge1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtaW50ZWwuYy0xMDcwLVx0LmZ1bmMgPSBpb3QyMDQwX3N0bW1hY19mdW5jX2RhdGEsXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtaW50ZWwuYz0xMTA5PXN0YXRpYyBpbnQgcXVhcmtfZGVmYXVsdF9kYXRhKHN0cnVjdCBwY2lfZGV2ICpwZGV2LFxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLWludGVsLmMtMTExOS1cdCAqL1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtaW50ZWwuYzoxMTIwOlx0cmV0ID0gc3RtbWFjX3BjaV9maW5kX3BoeV9hZGRyKHBkZXYsIHF1YXJrX3BjaV9kbWkpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtaW50ZWwuYy0xMTIxLVx0aWYgKHJldCBcdTAwM2MgMCkge1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLWludGVsLmMtMTE0NC1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLWludGVsLmM6MTE0NTpzdGF0aWMgY29uc3Qgc3RydWN0IHN0bW1hY19wY2lfaW5mbyBxdWFya19pbmZvID0ge1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtaW50ZWwuYy0xMTQ2LVx0LnNldHVwID0gcXVhcmtfZGVmYXVsdF9kYXRhLFxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLWludGVsLmM9MTI2Mz1zdGF0aWMgaW50IGludGVsX2V0aF9wY2lfcHJvYmUoc3RydWN0IHBjaV9kZXYgKnBkZXYsXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtaW50ZWwuYy0xMjY1LXtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLWludGVsLmM6MTI2NjpcdHN0cnVjdCBzdG1tYWNfcGNpX2luZm8gKmluZm8gPSAoc3RydWN0IHN0bW1hY19wY2lfaW5mbyAqKWlkLVx1MDAzZWRyaXZlcl9kYXRhO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtaW50ZWwuYy0xMjY3LVx0c3RydWN0IGludGVsX3ByaXZfZGF0YSAqaW50ZWxfcHJpdjtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1sb29uZ3Nvbi5jPTc2PXN0cnVjdCBsb29uZ3Nvbl9kYXRhIHtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1sb29uZ3Nvbi5jLTgxLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtbG9vbmdzb24uYzo4MjpzdHJ1Y3Qgc3RtbWFjX3BjaV9pbmZvIHtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLWxvb25nc29uLmMtODMtXHRpbnQgKCpzZXR1cCkoc3RydWN0IHBjaV9kZXYgKnBkZXYsIHN0cnVjdCBwbGF0X3N0bW1hY2VuZXRfZGF0YSAqcGxhdCk7XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtbG9vbmdzb24uYz0xMzI9c3RhdGljIGludCBsb29uZ3Nvbl9nbWFjX2RhdGEoc3RydWN0IHBjaV9kZXYgKnBkZXYsXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtbG9vbmdzb24uYy0xNDEtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1sb29uZ3Nvbi5jOjE0MjpzdGF0aWMgc3RydWN0IHN0bW1hY19wY2lfaW5mbyBsb29uZ3Nvbl9nbWFjX3BjaV9pbmZvID0ge1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtbG9vbmdzb24uYy0xNDMtXHQuc2V0dXAgPSBsb29uZ3Nvbl9nbWFjX2RhdGEsXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtbG9vbmdzb24uYz0xNjU9c3RhdGljIGludCBsb29uZ3Nvbl9nbmV0X2RhdGEoc3RydWN0IHBjaV9kZXYgKnBkZXYsXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtbG9vbmdzb24uYy0xNzYtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1sb29uZ3Nvbi5jOjE3NzpzdGF0aWMgc3RydWN0IHN0bW1hY19wY2lfaW5mbyBsb29uZ3Nvbl9nbmV0X3BjaV9pbmZvID0ge1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtbG9vbmdzb24uYy0xNzgtXHQuc2V0dXAgPSBsb29uZ3Nvbl9nbmV0X2RhdGEsXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtbG9vbmdzb24uYz00OTg9c3RhdGljIGludCBsb29uZ3Nvbl9kd21hY19wcm9iZShzdHJ1Y3QgcGNpX2RldiAqcGRldiwgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgKmlkKVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLWxvb25nc29uLmMtNTAxLVx0c3RydWN0IHN0bW1hY19yZXNvdXJjZXMgcmVzID0ge307XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1sb29uZ3Nvbi5jOjUwMjpcdHN0cnVjdCBzdG1tYWNfcGNpX2luZm8gKmluZm87XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1sb29uZ3Nvbi5jLTUwMy1cdHN0cnVjdCBsb29uZ3Nvbl9kYXRhICpsZDtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1sb29uZ3Nvbi5jLTUzNy1cdHBsYXQtXHUwMDNlZml4X3NvY19yZXNldCA9IGxvb25nc29uX2R3bWFjX2ZpeF9yZXNldDtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLWxvb25nc29uLmM6NTM4Olx0cGxhdC1cdTAwM2VzdXNwZW5kID0gc3RtbWFjX3BjaV9wbGF0X3N1c3BlbmQ7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1sb29uZ3Nvbi5jOjUzOTpcdHBsYXQtXHUwMDNlcmVzdW1lID0gc3RtbWFjX3BjaV9wbGF0X3Jlc3VtZTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLWxvb25nc29uLmMtNTQwLVx0bGQtXHUwMDNlZGV2ID0gXHUwMDI2cGRldi1cdTAwM2VkZXY7XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtbG9vbmdzb24uYy01NDItXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1sb29uZ3Nvbi5jOjU0MzpcdGluZm8gPSAoc3RydWN0IHN0bW1hY19wY2lfaW5mbyAqKWlkLVx1MDAzZWRyaXZlcl9kYXRhO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtbG9vbmdzb24uYy01NDQtXHRyZXQgPSBpbmZvLVx1MDAzZXNldHVwKHBkZXYsIHBsYXQpO1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLW1vdG9yY29tbS5jPTE4OD1zdGF0aWMgaW50IG1vdG9yY29tbV9yZXN1bWUoc3RydWN0IGRldmljZSAqZGV2LCB2b2lkICpic3BfcHJpdilcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1tb3RvcmNvbW0uYy0xOTItXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1tb3RvcmNvbW0uYzoxOTM6XHRyZXQgPSBzdG1tYWNfcGNpX3BsYXRfcmVzdW1lKGRldiwgYnNwX3ByaXYpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtbW90b3Jjb21tLmMtMTk0LVx0aWYgKHJldClcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1tb3RvcmNvbW0uYz0yMDg9bW90b3Jjb21tX2RlZmF1bHRfcGxhdF9kYXRhKHN0cnVjdCBwY2lfZGV2ICpwZGV2KVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLW1vdG9yY29tbS5jLTI0OC1cdHBsYXQtXHUwMDNlY29yZV90eXBlXHRcdD0gRFdNQUNfQ09SRV9HTUFDNDtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLW1vdG9yY29tbS5jOjI0OTpcdHBsYXQtXHUwMDNlc3VzcGVuZFx0XHQ9IHN0bW1hY19wY2lfcGxhdF9zdXNwZW5kO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtbW90b3Jjb21tLmMtMjUwLVx0cGxhdC1cdTAwM2VyZXN1bWVcdFx0PSBtb3RvcmNvbW1fcmVzdW1lO1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19saWJwY2kuYy0xMS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19saWJwY2kuYzoxMjppbnQgc3RtbWFjX3BjaV9wbGF0X3N1c3BlbmQoc3RydWN0IGRldmljZSAqZGV2LCB2b2lkICpic3BfcHJpdilcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19saWJwY2kuYy0xMy17XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX2xpYnBjaS5jLTI1LX1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19saWJwY2kuYzoyNjpFWFBPUlRfU1lNQk9MX0dQTChzdG1tYWNfcGNpX3BsYXRfc3VzcGVuZCk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfbGlicGNpLmMtMjctXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfbGlicGNpLmM6Mjg6aW50IHN0bW1hY19wY2lfcGxhdF9yZXN1bWUoc3RydWN0IGRldmljZSAqZGV2LCB2b2lkICpic3BfcHJpdilcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19saWJwY2kuYy0yOS17XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX2xpYnBjaS5jLTQzLX1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19saWJwY2kuYzo0NDpFWFBPUlRfU1lNQk9MX0dQTChzdG1tYWNfcGNpX3BsYXRfcmVzdW1lKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19saWJwY2kuYy00NS1cbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfbGlicGNpLmgtOC1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19saWJwY2kuaDo5OmludCBzdG1tYWNfcGNpX3BsYXRfc3VzcGVuZChzdHJ1Y3QgZGV2aWNlICpkZXYsIHZvaWQgKmJzcF9wcml2KTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19saWJwY2kuaDoxMDppbnQgc3RtbWFjX3BjaV9wbGF0X3Jlc3VtZShzdHJ1Y3QgZGV2aWNlICpkZXYsIHZvaWQgKmJzcF9wcml2KTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19saWJwY2kuaC0xMS1cbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfcGNpLmMtMTgtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfcGNpLmM6MTk6c3RydWN0IHN0bW1hY19wY2lfaW5mbyB7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfcGNpLmMtMjAtXHRpbnQgKCpzZXR1cCkoc3RydWN0IHBjaV9kZXYgKnBkZXYsIHN0cnVjdCBwbGF0X3N0bW1hY2VuZXRfZGF0YSAqcGxhdCk7XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX3BjaS5jPTMzPXN0YXRpYyBpbnQgc3RtbWFjX2RlZmF1bHRfZGF0YShzdHJ1Y3QgcGNpX2RldiAqcGRldixcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfcGNpLmMtNDktXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfcGNpLmM6NTA6c3RhdGljIGNvbnN0IHN0cnVjdCBzdG1tYWNfcGNpX2luZm8gc3RtbWFjX3BjaV9pbmZvID0ge1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX3BjaS5jLTUxLVx0LnNldHVwID0gc3RtbWFjX2RlZmF1bHRfZGF0YSxcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfcGNpLmM9NTQ9c3RhdGljIGludCBzbnBzX2dtYWM1X2RlZmF1bHRfZGF0YShzdHJ1Y3QgcGNpX2RldiAqcGRldixcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfcGNpLmMtMTAxLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX3BjaS5jOjEwMjpzdGF0aWMgY29uc3Qgc3RydWN0IHN0bW1hY19wY2lfaW5mbyBzbnBzX2dtYWM1X3BjaV9pbmZvID0ge1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX3BjaS5jLTEwMy1cdC5zZXR1cCA9IHNucHNfZ21hYzVfZGVmYXVsdF9kYXRhLFxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19wY2kuYy0xMDYtLyoqXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfcGNpLmM6MTA3OiAqIHN0bW1hY19wY2lfcHJvYmVcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19wY2kuYy0xMDgtICpcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfcGNpLmMtMTE3LSAqL1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX3BjaS5jOjExODpzdGF0aWMgaW50IHN0bW1hY19wY2lfcHJvYmUoc3RydWN0IHBjaV9kZXYgKnBkZXYsXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfcGNpLmMtMTE5LVx0XHRcdCAgICBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCAqaWQpXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfcGNpLmMtMTIwLXtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19wY2kuYzoxMjE6XHRzdHJ1Y3Qgc3RtbWFjX3BjaV9pbmZvICppbmZvID0gKHN0cnVjdCBzdG1tYWNfcGNpX2luZm8gKilpZC1cdTAwM2Vkcml2ZXJfZGF0YTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19wY2kuYy0xMjItXHRzdHJ1Y3QgcGxhdF9zdG1tYWNlbmV0X2RhdGEgKnBsYXQ7XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX3BjaS5jLTE3OS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19wY2kuYzoxODA6XHRwbGF0LVx1MDAzZXN1c3BlbmQgPSBzdG1tYWNfcGNpX3BsYXRfc3VzcGVuZDtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19wY2kuYzoxODE6XHRwbGF0LVx1MDAzZXJlc3VtZSA9IHN0bW1hY19wY2lfcGxhdF9yZXN1bWU7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfcGNpLmMtMTgyLVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19wY2kuYy0xODYtLyoqXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfcGNpLmM6MTg3OiAqIHN0bW1hY19wY2lfcmVtb3ZlXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfcGNpLmMtMTg4LSAqXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX3BjaS5jLTE5MS0gKi9cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19wY2kuYzoxOTI6c3RhdGljIHZvaWQgc3RtbWFjX3BjaV9yZW1vdmUoc3RydWN0IHBjaV9kZXYgKnBkZXYpXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfcGNpLmMtMTkzLXtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfcGNpLmM9MjAzPXN0YXRpYyBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCBzdG1tYWNfaWRfdGFibGVbXSA9IHtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19wY2kuYzoyMDQ6XHR7IFBDSV9ERVZJQ0VfREFUQShTVE1NQUMsIFNUTU1BQywgXHUwMDI2c3RtbWFjX3BjaV9pbmZvKSB9LFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX3BjaS5jOjIwNTpcdHsgUENJX0RFVklDRV9EQVRBKFNUTUlDUk8sIE1BQywgXHUwMDI2c3RtbWFjX3BjaV9pbmZvKSB9LFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX3BjaS5jLTIwNi1cdHsgUENJX0RFVklDRV9EQVRBKFNZTk9QU1lTLCBHTUFDNV9JRCwgXHUwMDI2c25wc19nbWFjNV9wY2lfaW5mbykgfSxcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfcGNpLmM9MjEwPU1PRFVMRV9ERVZJQ0VfVEFCTEUocGNpLCBzdG1tYWNfaWRfdGFibGUpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX3BjaS5jLTIxMS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19wY2kuYzoyMTI6c3RhdGljIHN0cnVjdCBwY2lfZHJpdmVyIHN0bW1hY19wY2lfZHJpdmVyID0ge1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX3BjaS5jLTIxMy1cdC5uYW1lID0gU1RNTUFDX1JFU09VUkNFX05BTUUsXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfcGNpLmMtMjE0LVx0LmlkX3RhYmxlID0gc3RtbWFjX2lkX3RhYmxlLFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX3BjaS5jOjIxNTpcdC5wcm9iZSA9IHN0bW1hY19wY2lfcHJvYmUsXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfcGNpLmM6MjE2Olx0LnJlbW92ZSA9IHN0bW1hY19wY2lfcmVtb3ZlLFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX3BjaS5jLTIxNy1cdC5kcml2ZXIgICAgICAgICA9IHtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfcGNpLmMtMjIxLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX3BjaS5jOjIyMjptb2R1bGVfcGNpX2RyaXZlcihzdG1tYWNfcGNpX2RyaXZlcik7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfcGNpLmMtMjIzLVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE0IDA2OjM1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE1NTQzCgkJCQkJCQlvdXRwdXQ6IDI1CgkJCQkJCQl0aG91Z2h0czogMTkxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEluaXRpYWwgQXNzZXNzbWVudCBvZiB0aGUgU2l0dWF0aW9uKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCBgc3RtbWFjX3BjaWAuIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzIHRoYXQgdGhpcyBpcyBhIFBDSSBkcml2ZXIgdGhhdCBzeXprYWxsZXIgc2hvdWxkIGJlIGFibGUgdG8gcHJvYmUsIG5vIHByb2JsZW0uIEkgbmVlZCB0byBtYWtlIHN1cmUgSSYjMzk7bSByaWdodCBhYm91dCB0aGF0LiBIbW1tLCBob2xkIG9uLi4uIGBzdG1tYWNgIHNlZW1zIHRvIGJlIGZhaXJseSB3aWRlbHkgdXNlZCwgcG9wcGluZyB1cCBpbiBgZHdtYWMtaW50ZWwuY2AsIGBkd21hYy1sb29uZ3Nvbi5jYCwgYW5kIGBkd21hYy1tb3RvcmNvbW0uY2AgYXMgd2VsbC4gVGhhdCBicm9hZGVucyB0aGUgc2NvcGUgb2YgdGhpbmdzLiBBbmQgeWVzLCBjb25maXJtaW5nIG15IGluaXRpYWwgaHVuY2gsIGBzdG1tYWNfcGNpYCBzcGVjaWZpY2FsbHkgYmluZHMgaXRzZWxmIHRvIGBQQ0lfREVWSUNFX0RBVEEoU1RNTUFDLCBTVE1NQUMsICZhbXA7c3RtbWFjX3BjaV9pbmZvKWAuIFRoaXMgbWVhbnMgc3l6a2FsbGVyIGNhbiBkZWZpbml0ZWx5IGZ1enogaXQgZWZmZWN0aXZlbHkgYnkgZW11bGF0aW5nIGEgUENJIGRldmljZSB3aXRoIHRoZSByaWdodCB2ZW5kb3IgYW5kIGRldmljZSBJRC4gVGhhdOKAmXMgYSBnb29kIHN0YXJ0aW5nIHBvaW50LiBOb3csIHRoZSBtb3JlIGludGVyZXN0aW5nIHF1ZXN0aW9uOiBpcyBgZHd4Z21hYzJgIHdpdGhpbiByZWFjaD8gSSBuZWVkIHRvIGFuYWx5emUgdGhpcyBmdXJ0aGVyLiBUaGlzIHJlY2VudCBwYXRjaCBzZWVtcyB0byBiZSBmb2N1c2VkIG9uIGBkd3hnbWFjMl9kbWEuY2AsIHdoaWNoIGltcGxlbWVudHMgYGR3eGdtYWMyMTBfZG1hX29wc2AuIFRpbWUgdG8gdHJhY2UgdGhhdCwgc2VlIHdoZXJlIGBkd3hnbWFjMjEwX2RtYV9vcHNgIGlzIGFjdHVhbGx5IHVzZWQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTQgMDY6MzU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7ZHd4Z21hYzIxMF9kbWFfb3BzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3eGdtYWMyLmg9NDc0PWV4dGVybiBjb25zdCBzdHJ1Y3Qgc3RtbWFjX29wcyBkd3hsZ21hYzJfb3BzO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHd4Z21hYzIuaDo0NzU6ZXh0ZXJuIGNvbnN0IHN0cnVjdCBzdG1tYWNfZG1hX29wcyBkd3hnbWFjMjEwX2RtYV9vcHM7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd3hnbWFjMi5oLTQ3Ni1leHRlcm4gY29uc3Qgc3RydWN0IHN0bW1hY19kZXNjX29wcyBkd3hnbWFjMjEwX2Rlc2Nfb3BzO1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3eGdtYWMyX2RtYS5jPTY0Nj1zdGF0aWMgaW50IGR3eGdtYWMyX3J4X2RtYV9zdG9wcGVkKHN0cnVjdCBzdG1tYWNfcHJpdiAqcHJpdixcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd3hnbWFjMl9kbWEuYy02NjAtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd3hnbWFjMl9kbWEuYzo2NjE6Y29uc3Qgc3RydWN0IHN0bW1hY19kbWFfb3BzIGR3eGdtYWMyMTBfZG1hX29wcyA9IHtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3eGdtYWMyX2RtYS5jLTY2Mi1cdC5yZXNldCA9IGR3eGdtYWMyX2RtYV9yZXNldCxcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9od2lmLmM9MTExPXN0YXRpYyBjb25zdCBzdHJ1Y3Qgc3RtbWFjX2h3aWZfZW50cnkge1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2h3aWYuYy0yNTctXHRcdC5kZXNjID0gXHUwMDI2ZHd4Z21hYzIxMF9kZXNjX29wcyxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2h3aWYuYzoyNTg6XHRcdC5kbWEgPSBcdTAwMjZkd3hnbWFjMjEwX2RtYV9vcHMsXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9od2lmLmMtMjU5LVx0XHQubWFjID0gXHUwMDI2ZHd4Z21hYzIxMF9vcHMsXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvaHdpZi5jLTI3OS1cdFx0LmRlc2MgPSBcdTAwMjZkd3hnbWFjMjEwX2Rlc2Nfb3BzLFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvaHdpZi5jOjI4MDpcdFx0LmRtYSA9IFx1MDAyNmR3eGdtYWMyMTBfZG1hX29wcyxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2h3aWYuYy0yODEtXHRcdC5tYWMgPSBcdTAwMjZkd3hsZ21hYzJfb3BzLFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE0IDA2OjM1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE2NjUxCgkJCQkJCQlvdXRwdXQ6IDIyCgkJCQkJCQl0aG91Z2h0czogMTYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcy4gSGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIGluaXRpYWwgdGhvdWdodHM6CgoqKkFuYWx5emluZyBgaHdpZi5jYCYjMzk7cyBJbnRlcmFjdGlvbiB3aXRoIERhdGEgRW50cmllcyoqCgpSaWdodCwgc28gSSYjMzk7bSBsb29raW5nIGF0IGBod2lmLmNgLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcywgJiMzNDtPa2F5LCB3aGF0IGRvZXMgKnRoaXMqIHBhcnRpY3VsYXIgY29kZSBtb2R1bGUgYWN0dWFsbHkgZG8gd2l0aCB0aGVzZSBkYXRhIGVudHJpZXM/JiMzNDsgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIHByb2Nlc3NpbmcgZmxvdywgdGhlIG1hbmlwdWxhdGlvbnMsIGFuZCB0aGUgZXZlbnR1YWwgZGVzdGluYXRpb24gb3IgcHVycG9zZSBvZiB0aGVzZSBlbnRyaWVzIHdpdGhpbiB0aGUgY29udGV4dCBvZiB0aGUgaGFyZHdhcmUgaW50ZXJmYWNlLiBJIG5lZWQgdG8gZmlndXJlIG91dCB0aGUgcm9sZXMuIElzIGl0IGEgcmVhZGVyPyBBIHdyaXRlcj8gQSB0cmFuc2xhdG9yPyBBIGZpbHRlcj8gUHJvYmFibHkgYSBjb21iaW5hdGlvbi4gQnV0IGZpcnN0LCB0aGUgbWVjaGFuaWNzIG9mIGl0cyBpbnRlcmFjdGlvbiBhcmUgcGFyYW1vdW50LiBJIG5lZWQgdG8gdHJhY2UgdGhlIGRhdGEmIzM5O3Mgam91cm5leSBhbmQgc2VlIGhvdyB0aGUgZnVuY3Rpb25zIHdpdGhpbiBgaHdpZi5jYCBoYW5kbGUgdGhlbS4gVGhhdCYjMzk7cyB0aGUga2V5IHRvIHVuZGVyc3RhbmRpbmcgaXRzIG92ZXJhbGwgaW1wYWN0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE0IDA2OjM1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2R3eGdtYWMyMTBfb3BzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3eGdtYWMyLmgtNDcyLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHd4Z21hYzIuaDo0NzM6ZXh0ZXJuIGNvbnN0IHN0cnVjdCBzdG1tYWNfb3BzIGR3eGdtYWMyMTBfb3BzO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHd4Z21hYzIuaC00NzQtZXh0ZXJuIGNvbnN0IHN0cnVjdCBzdG1tYWNfb3BzIGR3eGxnbWFjMl9vcHM7XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHd4Z21hYzJfY29yZS5jPTE0MTM9c3RhdGljIHZvaWQgZHd4Z21hYzJfc2V0X2FycF9vZmZsb2FkKHN0cnVjdCBtYWNfZGV2aWNlX2luZm8gKmh3LCBib29sIGVuLFxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3eGdtYWMyX2NvcmUuYy0xNDI4LVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHd4Z21hYzJfY29yZS5jOjE0Mjk6Y29uc3Qgc3RydWN0IHN0bW1hY19vcHMgZHd4Z21hYzIxMF9vcHMgPSB7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd3hnbWFjMl9jb3JlLmMtMTQzMC1cdC5jb3JlX2luaXQgPSBkd3hnbWFjMl9jb3JlX2luaXQsXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvaHdpZi5jPTExMT1zdGF0aWMgY29uc3Qgc3RydWN0IHN0bW1hY19od2lmX2VudHJ5IHtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9od2lmLmMtMjU4LVx0XHQuZG1hID0gXHUwMDI2ZHd4Z21hYzIxMF9kbWFfb3BzLFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvaHdpZi5jOjI1OTpcdFx0Lm1hYyA9IFx1MDAyNmR3eGdtYWMyMTBfb3BzLFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvaHdpZi5jLTI2MC1cdFx0LnZsYW4gPSBcdTAwMjZkd3hnbWFjMjEwX3ZsYW5fb3BzLFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE0IDA2OjM1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE3MzI2CgkJCQkJCQlvdXRwdXQ6IDIyCgkJCQkJCQl0aG91Z2h0czogMjEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgc3VtbWFyeSwgYXMgaWYgSSB3ZXJlIHRoaW5raW5nIHRoZXNlIHRob3VnaHRzOgoKKipBbmFseXppbmcgdGhlIFNUTU1BQyBIYXJkd2FyZSBJbnRlcmZhY2UgRW50cnkgUG9pbnQqKgoKT2theSwgdGltZSB0byBkaWcgaW4uIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGUgaGFyZHdhcmUgaW50ZXJmYWNlIGlzIGluaXRpYWxpemVkIGFuZCBhY2Nlc3NlZCBmb3IgdGhpcyBTVE1NQUMgZHJpdmVyLiBUaGUgbW9zdCBsb2dpY2FsIHN0YXJ0aW5nIHBvaW50IGlzIHByb2JhYmx5IGBzdG1tYWNfaHdpZl9lbnRyeWAgd2l0aGluIGBod2lmLmNgLiBJIGV4cGVjdCB0aGlzIGZ1bmN0aW9uIHRvIGJlIHRoZSBjZW50cmFsIHBvaW50IG9mIGludGVyYWN0aW9uIHdpdGggdGhlIGhhcmR3YXJlIGFic3RyYWN0aW9uIGxheWVyIChIQUwpIGZvciB0aGlzIHNwZWNpZmljIEV0aGVybmV0IE1BQy4gSSBhbnRpY2lwYXRlIGZpbmRpbmcgaW5pdGlhbGl6YXRpb24gcm91dGluZXMsIHJlZ2lzdGVyIG1hcHBpbmcgc2V0dXBzLCBhbmQgbGlrZWx5IGludGVycnVwdCBjb25maWd1cmF0aW9uIHJlbGF0ZWQgdG8gdGhlIGhhcmR3YXJlIHdpdGhpbiB0aGlzIGVudHJ5IGZ1bmN0aW9uIG9yIGEgY2FsbCBjaGFpbiBvcmlnaW5hdGluZyBmcm9tIGl0LiBUaGlzIHdpbGwgcHJvdmlkZSB2YWx1YWJsZSBpbnNpZ2h0IGludG8gaG93IHRoZSBkcml2ZXIgaW50ZXJhY3RzIHdpdGggdGhlIHVuZGVybHlpbmcgaGFyZHdhcmUgY29tcG9uZW50cyBhbmQgaG93IGl0JiMzOTtzIGNvbmZpZ3VyZWQuIExldCYjMzk7cyBnZXQgdG8gaXQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE0IDA2OjM2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3N0bW1hY19od2lmX2VudHJ5JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2h3aWYuYz0xMDA9aW50IHN0bW1hY19yZXNldChzdHJ1Y3Qgc3RtbWFjX3ByaXYgKnByaXYpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvaHdpZi5jLTExMC1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2h3aWYuYzoxMTE6c3RhdGljIGNvbnN0IHN0cnVjdCBzdG1tYWNfaHdpZl9lbnRyeSB7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9od2lmLmMtMTEyLVx0ZW51bSBkd21hY19jb3JlX3R5cGUgY29yZV90eXBlO1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2h3aWYuYy0yOTItXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9od2lmLmM6MjkzOnN0YXRpYyBjb25zdCBzdHJ1Y3Qgc3RtbWFjX2h3aWZfZW50cnkgKlxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvaHdpZi5jLTI5NC1zdG1tYWNfaHdpZl9maW5kKGVudW0gZHdtYWNfY29yZV90eXBlIGNvcmVfdHlwZSwgdTggc25wc3ZlciwgdTggZGV2X2lkKVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvaHdpZi5jLTI5NS17XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9od2lmLmM6Mjk2Olx0Y29uc3Qgc3RydWN0IHN0bW1hY19od2lmX2VudHJ5ICplbnRyeTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2h3aWYuYy0yOTctXHRpbnQgaTtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9od2lmLmM9MzE3PWludCBzdG1tYWNfaHdpZl9pbml0KHN0cnVjdCBzdG1tYWNfcHJpdiAqcHJpdilcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9od2lmLmMtMzE5LVx0ZW51bSBkd21hY19jb3JlX3R5cGUgY29yZV90eXBlID0gcHJpdi1cdTAwM2VwbGF0LVx1MDAzZWNvcmVfdHlwZTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2h3aWYuYzozMjA6XHRjb25zdCBzdHJ1Y3Qgc3RtbWFjX2h3aWZfZW50cnkgKmVudHJ5O1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvaHdpZi5jLTMyMS1cdHN0cnVjdCBzdG1tYWNfdmVyc2lvbiB2ZXJzaW9uO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNCAwNjozNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxODA1MQoJCQkJCQkJb3V0cHV0OiA0NgoJCQkJCQkJdGhvdWdodHM6IDI2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKk1hcHBpbmcgYGNvcmVfdHlwZWAgdG8gYGR3eGdtYWMyMTBfZG1hX29wc2AqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IGhvdyB0aGUgYGNvcmVfdHlwZWAgZW51bWVyYXRpb24gcmVsYXRlcyB0byB0aGUgYGR3eGdtYWMyMTBfZG1hX29wc2Agc3RydWN0dXJlcy4gSXQmIzM5O3MgYSBjbGFzc2ljIHNpdHVhdGlvbiB3aGVyZSBhIGhhcmR3YXJlIGFic3RyYWN0aW9uIG5lZWRzIHRvIGJlIGxpbmtlZCB0byBhIHNwZWNpZmljIGltcGxlbWVudGF0aW9uLiBJJiMzOTttIHByb2JhYmx5IGRlYWxpbmcgd2l0aCBhIHN5c3RlbSB0aGF0IGhhcyBwb3RlbnRpYWxseSBtdWx0aXBsZSBETUEgY29udHJvbGxlcnMsIG9yIGF0IGxlYXN0IGRpZmZlcmVudCBjb25maWd1cmF0aW9ucywgYW5kIHRoZSBgY29yZV90eXBlYCBpcyB0aGUga2V5IHRvIHNlbGVjdGluZyB0aGUgcmlnaHQgc2V0IG9mIERNQSBvcGVyYXRpb25zLgoKTXkgcHJpbWFyeSBmb2N1cyByaWdodCBub3cgaXMgdG8gdW5kZXJzdGFuZCB0aGUgbG9va3VwIG1lY2hhbmlzbS4gSXMgaXQgYSBzaW1wbGUgc3dpdGNoIHN0YXRlbWVudD8gTWF5YmUgYSBsb29rdXAgdGFibGU/IEFyZSB0aGVyZSBhbnkgaW5kaXJlY3QgbGF5ZXJzIG9mIGFic3RyYWN0aW9uIEkgbmVlZCB0byB1bmRlcnN0YW5kPyBHaXZlbiB0aGF0IHRoaXMgaXMgbGlrZWx5IHRpZWQgdG8gdGhlIGRlc2lnbiBvZiB0aGUgZHJpdmVyIGFuZCBwbGF0Zm9ybSwgSSBuZWVkIHRvIGtub3c6IEFyZSB0aGVyZSBhbnkgY29tcGF0aWJpbGl0eSBsYXllcnMsIG9yIHNwZWNpYWwgY2FzZXMgdG8gYmUgYXdhcmUgb2Y/IEFyZSB0aGVyZSBhcmNoaXRlY3R1cmFsIGNvbnNpZGVyYXRpb25zIGhlcmU/IERvZXMgdGhpcyByZWxhdGlvbnNoaXAgYWZmZWN0IHRoZSBwb3dlciBtYW5hZ2VtZW50LCBjbG9jayBnYXRpbmcsIG9yIGludGVycnVwdCBoYW5kbGluZyBiZWhhdmlvcj8KClVsdGltYXRlbHksIHRoZSBnb2FsIGlzIGEgY29tcGxldGUgcGljdHVyZS4gT25jZSBJJiMzOTt2ZSBtYXBwZWQgdGhlIHBvdGVudGlhbCB2YWx1ZXMgb2YgYGNvcmVfdHlwZWAgdG8gdGhlIGNvcnJlY3QgYGR3eGdtYWMyMTBfZG1hX29wc2Agc3RydWN0dXJlLCBJJiMzOTtsbCBrbm93IHdoZXJlIHRvIGxvb2sgbmV4dCB0byB1bmRlcnN0YW5kIHRoZSBkZXRhaWxzIG9mIHRoZSBETUEgb3BlcmF0aW9ucy4gSSBoYXZlIGEgbG90IG9mIGRlYnVnZ2luZyB0byBkbyEKCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTQgMDY6MzY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9od2lmLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAyNTAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNTAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDI1MDpcdFx0XHQuZGV2X2lkID0gRFdYR01BQ19JRCxcbiAyNTE6XHRcdFx0LnJlZ3MgPSB7XG4gMjUyOlx0XHRcdFx0LnB0cF9vZmYgPSBQVFBfWEdNQUNfT0ZGU0VULFxuIDI1MzpcdFx0XHRcdC5tbWNfb2ZmID0gTU1DX1hHTUFDX09GRlNFVCxcbiAyNTQ6XHRcdFx0XHQuZXN0X29mZiA9IEVTVF9YR01BQ19PRkZTRVQsXG4gMjU1Olx0XHRcdFx0LmZwZV9yZWcgPSBcdTAwMjZkd3hnbWFjM19mcGVfcmVnLFxuIDI1NjpcdFx0XHR9LFxuIDI1NzpcdFx0XHQuZGVzYyA9IFx1MDAyNmR3eGdtYWMyMTBfZGVzY19vcHMsXG4gMjU4Olx0XHRcdC5kbWEgPSBcdTAwMjZkd3hnbWFjMjEwX2RtYV9vcHMsXG4gMjU5Olx0XHRcdC5tYWMgPSBcdTAwMjZkd3hnbWFjMjEwX29wcyxcbiAyNjA6XHRcdFx0LnZsYW4gPSBcdTAwMjZkd3hnbWFjMjEwX3ZsYW5fb3BzLFxuIDI2MTpcdFx0XHQuaHd0aW1lc3RhbXAgPSBcdTAwMjZzdG1tYWNfcHRwLFxuIDI2MjpcdFx0XHQucHRwID0gXHUwMDI2c3RtbWFjX3B0cF9jbG9ja19vcHMsXG4gMjYzOlx0XHRcdC5tb2RlID0gTlVMTCxcbiAyNjQ6XHRcdFx0LnRjID0gXHUwMDI2ZHdtYWM1MTBfdGNfb3BzLFxuIDI2NTpcdFx0XHQubW1jID0gXHUwMDI2ZHd4Z21hY19tbWNfb3BzLFxuIDI2NjpcdFx0XHQuZXN0ID0gXHUwMDI2ZHdtYWM1MTBfZXN0X29wcyxcbiAyNjc6XHRcdFx0LnNldHVwID0gZHd4Z21hYzJfc2V0dXAsXG4gMjY4Olx0XHRcdC5xdWlya3MgPSBOVUxMLFxuIDI2OTpcdFx0fSwge1xuIDI3MDpcdFx0XHQuY29yZV90eXBlID0gRFdNQUNfQ09SRV9YR01BQyxcbiAyNzE6XHRcdFx0Lm1pbl9pZCA9IERXWExHTUFDX0NPUkVfMl8wMCxcbiAyNzI6XHRcdFx0LmRldl9pZCA9IERXWExHTUFDX0lELFxuIDI3MzpcdFx0XHQucmVncyA9IHtcbiAyNzQ6XHRcdFx0XHQucHRwX29mZiA9IFBUUF9YR01BQ19PRkZTRVQsXG4gMjc1Olx0XHRcdFx0Lm1tY19vZmYgPSBNTUNfWEdNQUNfT0ZGU0VULFxuIDI3NjpcdFx0XHRcdC5lc3Rfb2ZmID0gRVNUX1hHTUFDX09GRlNFVCxcbiAyNzc6XHRcdFx0XHQuZnBlX3JlZyA9IFx1MDAyNmR3eGdtYWMzX2ZwZV9yZWcsXG4gMjc4Olx0XHRcdH0sXG4gMjc5Olx0XHRcdC5kZXNjID0gXHUwMDI2ZHd4Z21hYzIxMF9kZXNjX29wcyxcbiAyODA6XHRcdFx0LmRtYSA9IFx1MDAyNmR3eGdtYWMyMTBfZG1hX29wcyxcbiAyODE6XHRcdFx0Lm1hYyA9IFx1MDAyNmR3eGxnbWFjMl9vcHMsXG4gMjgyOlx0XHRcdC52bGFuID0gXHUwMDI2ZHd4bGdtYWMyX3ZsYW5fb3BzLFxuIDI4MzpcdFx0XHQuaHd0aW1lc3RhbXAgPSBcdTAwMjZzdG1tYWNfcHRwLFxuIDI4NDpcdFx0XHQucHRwID0gXHUwMDI2c3RtbWFjX3B0cF9jbG9ja19vcHMsXG4gMjg1Olx0XHRcdC5tb2RlID0gTlVMTCxcbiAyODY6XHRcdFx0LnRjID0gXHUwMDI2ZHdtYWM1MTBfdGNfb3BzLFxuIDI4NzpcdFx0XHQubW1jID0gXHUwMDI2ZHd4Z21hY19tbWNfb3BzLFxuIDI4ODpcdFx0XHQuZXN0ID0gXHUwMDI2ZHdtYWM1MTBfZXN0X29wcyxcbiAyODk6XHRcdFx0LnNldHVwID0gZHd4bGdtYWMyX3NldHVwLFxuIDI5MDpcdFx0fSxcbiAyOTE6XHR9O1xuIDI5MjpcdFxuIDI5MzpcdHN0YXRpYyBjb25zdCBzdHJ1Y3Qgc3RtbWFjX2h3aWZfZW50cnkgKlxuIDI5NDpcdHN0bW1hY19od2lmX2ZpbmQoZW51bSBkd21hY19jb3JlX3R5cGUgY29yZV90eXBlLCB1OCBzbnBzdmVyLCB1OCBkZXZfaWQpXG4gMjk1Olx0e1xuIDI5NjpcdFx0Y29uc3Qgc3RydWN0IHN0bW1hY19od2lmX2VudHJ5ICplbnRyeTtcbiAyOTc6XHRcdGludCBpO1xuIDI5ODpcdFxuIDI5OTpcdFx0Zm9yIChpID0gQVJSQVlfU0laRShzdG1tYWNfaHcpIC0gMTsgaSBcdTAwM2U9IDA7IGktLSkge1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNCAwNjozNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxOTM1NgoJCQkJCQkJb3V0cHV0OiAyMwoJCQkJCQkJdGhvdWdodHM6IDYzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCBwcm9jZXNzLCBmcm9tIGFuIGV4cGVydCYjMzk7cyBwZXJzcGVjdGl2ZToKCioqSW52ZXN0aWdhdGluZyBYR01BQyBDb3JlIERyaXZlciBBc3NvY2lhdGlvbioqCgpBbHJpZ2h0LCBzbyB0aGUgYERXTUFDX0NPUkVfWEdNQUNgIGNvcmUgaXMgYXNzb2NpYXRlZCB3aXRoIHRoZSBgZHd4Z21hYzIxMF9kbWFfb3BzYCBvcGVyYXRpb25zLiBNeSBtaW5kIGltbWVkaWF0ZWx5IGp1bXBzIHRvIHRoZSBQQ0kgZHJpdmVycywgc3BlY2lmaWNhbGx5IGBzdG1tYWNfcGNpYCwgdG8gdW5kZXJzdGFuZCBob3cgdGhpcyBjb25uZWN0aW9uIGlzIGVzdGFibGlzaGVkIGF0IHRoZSBoYXJkd2FyZSBsZXZlbC4gSSBuZWVkIHRvIHF1aWNrbHkgZGV0ZXJtaW5lIHdoZXRoZXIgYW55IG9mIHRoZSBQQ0kgZHJpdmVycywgb3IgcGVyaGFwcyBvdGhlciBkcml2ZXJzIEkmIzM5O20gZmFtaWxpYXIgd2l0aCwgc3BlY2lmaWNhbGx5IHNldCB0aGF0IGBjb3JlX3R5cGVgIHRvIGBEV01BQ19DT1JFX1hHTUFDYC4gVGhpcyBpcyBhIHZpdGFsIHN0ZXAgaW4gdW5kZXJzdGFuZGluZyB0aGUgZGV2aWNlJiMzOTtzIHNldHVwIGFuZCBpdHMgY29uZmlndXJhdGlvbiB3aXRoaW4gdGhlIHN5c3RlbS4gSSYjMzk7bSBmb2N1c2luZyBvbiB0aGUgY29uZmlndXJhdGlvbiBvZiB0aGlzIGNvcmUsIGFuZCBJIG5lZWQgdG8gZGV0ZXJtaW5lIGhvdyBpdCYjMzk7cyBiZWluZyBoYW5kbGVkIGJ5IHRoZSBzeXN0ZW0uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE0IDA2OjM2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O0RXTUFDX0NPUkVfWEdNQUMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvY29tbW9uLmg9NDk9c3RhdGljIGlubGluZSBib29sIGR3bWFjX2lzX3htYWMoZW51bSBkd21hY19jb3JlX3R5cGUgY29yZV90eXBlKVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvY29tbW9uLmgtNTAte1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvY29tbW9uLmg6NTE6XHRyZXR1cm4gY29yZV90eXBlID09IERXTUFDX0NPUkVfR01BQzQgfHwgY29yZV90eXBlID09IERXTUFDX0NPUkVfWEdNQUM7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9jb21tb24uaC01Mi19XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtc29jZnBnYS5jPTU2OT1zdGF0aWMgdm9pZCBzb2NmcGdhX2FnaWxleDVfc2V0dXBfcGxhdF9kYXQoc3RydWN0IHNvY2ZwZ2FfZHdtYWMgKmR3bWFjKVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLXNvY2ZwZ2EuYy01NzItXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1zb2NmcGdhLmM6NTczOlx0cGxhdF9kYXQtXHUwMDNlY29yZV90eXBlID0gRFdNQUNfQ09SRV9YR01BQztcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLXNvY2ZwZ2EuYy01NzQtXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtdGVncmEuYz0yMTQ9c3RhdGljIGludCB0ZWdyYV9tZ2JlX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtdGVncmEuYy0zMjUtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy10ZWdyYS5jOjMyNjpcdHBsYXQtXHUwMDNlY29yZV90eXBlID0gRFdNQUNfQ09SRV9YR01BQztcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLXRlZ3JhLmMtMzI3LVx0cGxhdC1cdTAwM2VmbGFncyB8PSBTVE1NQUNfRkxBR19UU09fRU47XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvaHdpZi5jPTIxPXN0YXRpYyB2b2lkIHN0bW1hY19nZXRfdmVyc2lvbihzdHJ1Y3Qgc3RtbWFjX3ByaXYgKnByaXYsXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvaHdpZi5jLTQ5LVx0dmVyLVx1MDAzZXNucHN2ZXIgPSBGSUVMRF9HRVQoRFdNQUNfU05QU1ZFUiwgdmVyc2lvbik7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9od2lmLmM6NTA6XHRpZiAoY29yZV90eXBlID09IERXTUFDX0NPUkVfWEdNQUMpXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9od2lmLmMtNTEtXHRcdHZlci1cdTAwM2VkZXZfaWQgPSBGSUVMRF9HRVQoRFdNQUNfVVNFUlZFUiwgdmVyc2lvbik7XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvaHdpZi5jPTExMT1zdGF0aWMgY29uc3Qgc3RydWN0IHN0bW1hY19od2lmX2VudHJ5IHtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9od2lmLmMtMjQ3LVx0fSwge1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvaHdpZi5jOjI0ODpcdFx0LmNvcmVfdHlwZSA9IERXTUFDX0NPUkVfWEdNQUMsXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9od2lmLmMtMjQ5LVx0XHQubWluX2lkID0gRFdYR01BQ19DT1JFXzJfMTAsXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvaHdpZi5jLTI2OS1cdH0sIHtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2h3aWYuYzoyNzA6XHRcdC5jb3JlX3R5cGUgPSBEV01BQ19DT1JFX1hHTUFDLFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvaHdpZi5jLTI3MS1cdFx0Lm1pbl9pZCA9IERXWExHTUFDX0NPUkVfMl8wMCxcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9od2lmLmM9Mjk0PXN0bW1hY19od2lmX2ZpbmQoZW51bSBkd21hY19jb3JlX3R5cGUgY29yZV90eXBlLCB1OCBzbnBzdmVyLCB1OCBkZXZfaWQpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvaHdpZi5jLTMwNi1cdFx0XHRjb250aW51ZTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2h3aWYuYzozMDc6XHRcdGlmIChjb3JlX3R5cGUgPT0gRFdNQUNfQ09SRV9YR01BQyBcdTAwMjZcdTAwMjZcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2h3aWYuYy0zMDgtXHRcdCAgICBkZXZfaWQgIT0gZW50cnktXHUwMDNlZGV2X2lkKVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19lc3QuYz0yOD1zdGF0aWMgaW50IGVzdF9jb25maWd1cmUoc3RydWN0IHN0bW1hY19wcml2ICpwcml2LCBzdHJ1Y3Qgc3RtbWFjX2VzdCAqY2ZnLFxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19lc3QuYy01NS1cdGN0cmwgPSByZWFkbChlc3RfYWRkciAmIzQzOyBFU1RfQ09OVFJPTCk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfZXN0LmM6NTY6XHRpZiAocHJpdi1cdTAwM2VwbGF0LVx1MDAzZWNvcmVfdHlwZSA9PSBEV01BQ19DT1JFX1hHTUFDKSB7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfZXN0LmMtNTctXHRcdGN0cmwgXHUwMDI2PSB+RVNUX1hHTUFDX1BUT1Y7XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX2VzdC5jPTgzPXN0YXRpYyB2b2lkIGVzdF9pcnFfc3RhdHVzKHN0cnVjdCBzdG1tYWNfcHJpdiAqcHJpdiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldixcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfZXN0LmMtMTUwLVx0aWYgKHN0YXR1cyBcdTAwMjYgRVNUX0JUUkUpIHtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19lc3QuYzoxNTE6XHRcdGlmIChwcml2LVx1MDAzZXBsYXQtXHUwMDNlY29yZV90eXBlID09IERXTUFDX0NPUkVfWEdNQUMpIHtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19lc3QuYy0xNTItXHRcdFx0YnRybCA9IEZJRUxEX0dFVChFU1RfWEdNQUNfQlRSTCwgc3RhdHVzKTtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfZXRodG9vbC5jPTMwMT1zdGF0aWMgdm9pZCBzdG1tYWNfZXRodG9vbF9nZXRkcnZpbmZvKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX2V0aHRvb2wuYy0zMDgtXHRcdHN0cnNjcHkoaW5mby1cdTAwM2Vkcml2ZXIsIEdNQUNfRVRIVE9PTF9OQU1FLCBzaXplb2YoaW5mby1cdTAwM2Vkcml2ZXIpKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19ldGh0b29sLmM6MzA5Olx0ZWxzZSBpZiAocHJpdi1cdTAwM2VwbGF0LVx1MDAzZWNvcmVfdHlwZSA9PSBEV01BQ19DT1JFX1hHTUFDKVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX2V0aHRvb2wuYy0zMTAtXHRcdHN0cnNjcHkoaW5mby1cdTAwM2Vkcml2ZXIsIFhHTUFDX0VUSFRPT0xfTkFNRSwgc2l6ZW9mKGluZm8tXHUwMDNlZHJpdmVyKSk7XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX2V0aHRvb2wuYz0zNTA9c3RhdGljIGludCBzdG1tYWNfZXRodG9vbF9nZXRfcmVnc19sZW4oc3RydWN0IG5ldF9kZXZpY2UgKmRldilcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfZXRodG9vbC5jLTM1My1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19ldGh0b29sLmM6MzU0Olx0aWYgKHByaXYtXHUwMDNlcGxhdC1cdTAwM2Vjb3JlX3R5cGUgPT0gRFdNQUNfQ09SRV9YR01BQylcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19ldGh0b29sLmMtMzU1LVx0XHRyZXR1cm4gWEdNQUNfUkVHU0laRSAqIDQ7XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX2V0aHRvb2wuYz0zNjE9c3RhdGljIHZvaWQgc3RtbWFjX2V0aHRvb2xfZ3JlZ3Moc3RydWN0IG5ldF9kZXZpY2UgKmRldixcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfZXRodG9vbC5jLTM3NS1cdFx0ICAgICAgIE5VTV9EV01BQzRfRE1BX1JFR1MgKiA0KTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19ldGh0b29sLmM6Mzc2Olx0fSBlbHNlIGlmIChwcml2LVx1MDAzZXBsYXQtXHUwMDNlY29yZV90eXBlICE9IERXTUFDX0NPUkVfWEdNQUMpIHtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19ldGh0b29sLmMtMzc3LVx0XHRtZW1jcHkoXHUwMDI2cmVnX3NwYWNlW0VUSFRPT0xfRE1BX09GRlNFVF0sXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX21haW4uYz02NDI9c3RhdGljIGludCBzdG1tYWNfaHd0c3RhbXBfc2V0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX21haW4uYy03NTgtXHRcdFx0aWYgKHByaXYtXHUwMDNlc3lub3BzeXNfaWQgXHUwMDNjIERXTUFDX0NPUkVfM183MCBcdTAwMjZcdTAwMjZcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19tYWluLmM6NzU5Olx0XHRcdCAgICBwcml2LVx1MDAzZXBsYXQtXHUwMDNlY29yZV90eXBlICE9IERXTUFDX0NPUkVfWEdNQUMpXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfbWFpbi5jLTc2MC1cdFx0XHRcdHRzX2V2ZW50X2VuID0gUFRQX1RDUl9UU0VWTlRFTkE7XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX21haW4uYz02NjA1PXN0YXRpYyBpbnQgc3RtbWFjX2RtYV9jYXBfc2hvdyhzdHJ1Y3Qgc2VxX2ZpbGUgKnNlcSwgdm9pZCAqdilcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfbWFpbi5jLTY2NDAtXHRcdCAgIChwcml2LVx1MDAzZWRtYV9jYXAuaGFsZl9kdXBsZXgpID8gXCYjMzQ7WVwmIzM0OyA6IFwmIzM0O05cJiMzNDspO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX21haW4uYzo2NjQxOlx0aWYgKHByaXYtXHUwMDNlcGxhdC1cdTAwM2Vjb3JlX3R5cGUgPT0gRFdNQUNfQ09SRV9YR01BQykge1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX21haW4uYy02NjQyLVx0XHRzZXFfcHJpbnRmKHNlcSxcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfbWFpbi5jLTY2NjQtXHRcdCAgIChwcml2LVx1MDAzZWRtYV9jYXAuYXRpbWVfc3RhbXApID8gXCYjMzQ7WVwmIzM0OyA6IFwmIzM0O05cJiMzNDspO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX21haW4uYzo2NjY1Olx0aWYgKHByaXYtXHUwMDNlcGxhdC1cdTAwM2Vjb3JlX3R5cGUgPT0gRFdNQUNfQ09SRV9YR01BQylcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19tYWluLmMtNjY2Ni1cdFx0c2VxX3ByaW50ZihzZXEsIFwmIzM0O1xcdFRpbWVzdGFtcCBTeXN0ZW0gVGltZSBTb3VyY2U6ICVzXFxuXCYjMzQ7LFxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19tYWluLmMtNjY3My1cdGlmIChwcml2LVx1MDAzZXN5bm9wc3lzX2lkIFx1MDAzZT0gRFdNQUNfQ09SRV80XzAwIHx8XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfbWFpbi5jOjY2NzQ6XHQgICAgcHJpdi1cdTAwM2VwbGF0LVx1MDAzZWNvcmVfdHlwZSA9PSBEV01BQ19DT1JFX1hHTUFDKSB7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfbWFpbi5jLTY2NzUtXHRcdHNlcV9wcmludGYoc2VxLCBcJiMzNDtcXHRJUCBDaGVja3N1bSBPZmZsb2FkIGluIFJYOiAlc1xcblwmIzM0Oyxcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfbWFpbi5jPTc0MDI9c3RhdGljIHZvaWQgc3RtbWFjX3ByaW50X2FjdHBoeWlmKHN0cnVjdCBzdG1tYWNfcHJpdiAqcHJpdilcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfbWFpbi5jLTc0MTctXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfbWFpbi5jOjc0MTg6XHRjYXNlIERXTUFDX0NPUkVfWEdNQUM6XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfbWFpbi5jLTc0MTktXHRcdHBoeWlmX3RhYmxlID0gc3RtbWFjX2R3eGdtYWNfcGh5aWY7XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX21haW4uYz03NDQ0PXN0YXRpYyBpbnQgc3RtbWFjX2h3X2luaXQoc3RydWN0IHN0bW1hY19wcml2ICpwcml2KVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19tYWluLmMtNzU2Ni1cdGlmICgocHJpdi1cdTAwM2VzeW5vcHN5c19pZCBcdTAwM2U9IERXTUFDX0NPUkVfM181MCB8fFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX21haW4uYzo3NTY3Olx0ICAgICBwcml2LVx1MDAzZXBsYXQtXHUwMDNlY29yZV90eXBlID09IERXTUFDX0NPUkVfWEdNQUMpIFx1MDAyNlx1MDAyNlxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX21haW4uYy03NTY4LVx0ICAgICFwcml2LVx1MDAzZXBsYXQtXHUwMDNlcml3dF9vZmYpIHtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfbWFpbi5jPTc4MzM9c3RhdGljIGludCBfX3N0bW1hY19kdnJfcHJvYmUoc3RydWN0IGRldmljZSAqZGV2aWNlLFxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19tYWluLmMtODA0MC1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19tYWluLmM6ODA0MTpcdGlmIChwcml2LVx1MDAzZXBsYXQtXHUwMDNlY29yZV90eXBlID09IERXTUFDX0NPUkVfWEdNQUMpXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfbWFpbi5jLTgwNDItXHRcdG5kZXYtXHUwMDNlbWF4X210dSA9IFhHTUFDX0pVTUJPX0xFTjtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfbWRpby5jPTUzNj1zdGF0aWMgdTMyIHN0bW1hY19jbGtfY3NyX3NldChzdHJ1Y3Qgc3RtbWFjX3ByaXYgKnByaXYpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX21kaW8uYy01NTQtXHRcdHJhdGVzID0gc3RtbWFjX3N1bjhpX2Nzcl90b19tZGM7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfbWRpby5jOjU1NTpcdGlmIChwcml2LVx1MDAzZXBsYXQtXHUwMDNlY29yZV90eXBlID09IERXTUFDX0NPUkVfWEdNQUMpXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfbWRpby5jLTU1Ni1cdFx0cmF0ZXMgPSBzdG1tYWNfeGdtYWNfY3NyX3RvX21kYztcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfbWRpby5jPTU5NT1pbnQgc3RtbWFjX21kaW9fcmVnaXN0ZXIoc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX21kaW8uYy02MjEtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfbWRpby5jOjYyMjpcdGlmIChwcml2LVx1MDAzZXBsYXQtXHUwMDNlY29yZV90eXBlID09IERXTUFDX0NPUkVfWEdNQUMpIHtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19tZGlvLmMtNjIzLVx0XHRuZXdfYnVzLVx1MDAzZXJlYWQgPSBcdTAwMjZzdG1tYWNfeGdtYWMyX21kaW9fcmVhZF9jMjI7XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX21kaW8uYy02NjUtXHQvKiBMb29rcyBsaWtlIHdlIG5lZWQgYSBkdW1teSByZWFkIGZvciBYR01BQyBvbmx5IGFuZCBDNDUgUEhZcyAqL1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX21kaW8uYzo2NjY6XHRpZiAocHJpdi1cdTAwM2VwbGF0LVx1MDAzZWNvcmVfdHlwZSA9PSBEV01BQ19DT1JFX1hHTUFDKVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX21kaW8uYy02NjctXHRcdHN0bW1hY194Z21hYzJfbWRpb19yZWFkX2M0NShuZXdfYnVzLCAwLCAwLCAwKTtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfcGxhdGZvcm0uYz00MTY9c3RtbWFjX3Byb2JlX2NvbmZpZ19kdChzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2LCB1OCAqbWFjKVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19wbGF0Zm9ybS5jLTU0Ny1cdGlmIChvZl9kZXZpY2VfaXNfY29tcGF0aWJsZShucCwgXCYjMzQ7c25wcyxkd3hnbWFjXCYjMzQ7KSkge1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX3BsYXRmb3JtLmM6NTQ4Olx0XHRwbGF0LVx1MDAzZWNvcmVfdHlwZSA9IERXTUFDX0NPUkVfWEdNQUM7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfcGxhdGZvcm0uYy01NDktXHRcdHBsYXQtXHUwMDNlcG10ID0gdHJ1ZTtcbi0tXG5pbmNsdWRlL2xpbnV4L3N0bW1hYy5oPTE5MT1lbnVtIGR3bWFjX2NvcmVfdHlwZSB7XG4tLVxuaW5jbHVkZS9saW51eC9zdG1tYWMuaC0xOTQtXHREV01BQ19DT1JFX0dNQUM0LFxuaW5jbHVkZS9saW51eC9zdG1tYWMuaDoxOTU6XHREV01BQ19DT1JFX1hHTUFDLFxuaW5jbHVkZS9saW51eC9zdG1tYWMuaC0xOTYtfTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTQgMDY6MzY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjM2ODEKCQkJCQkJCW91dHB1dDogNDkKCQkJCQkJCXRob3VnaHRzOiAxODcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBEV01BQyBDb3JlIFR5cGUgQXNzaWdubWVudCoqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBJdCBsb29rcyBsaWtlIGBEV01BQ19DT1JFX1hHTUFDYCBpcyBleHBsaWNpdGx5IGxpbmtlZCB0byB0aGUgYGR3bWFjLXNvY2ZwZ2EuY2AgYW5kIGBkd21hYy10ZWdyYS5jYCBkcml2ZXJzLCBhbmQgYWxzbyBwb3BzIHVwIHdoZW4gdGhlIGRldmljZSB0cmVlIGNvbXBhdGlibGUgc3RyaW5nIGlzIGAmIzM0O3NucHMsZHd4Z21hYyYjMzQ7YC4gTXkgaW1tZWRpYXRlIHF1ZXN0aW9uIGlzIGFyb3VuZCBgc3RtbWFjX3BjaWAuIEkmIzM5O20gZ29pbmcgdGhyb3VnaCB0aGUgY29kZSBhbmQgSSYjMzk7bSBub3Qgc2VlaW5nIGFueSAqZGlyZWN0KiBhc3NpZ25tZW50IG9mIGBjb3JlX3R5cGUgPSBEV01BQ19DT1JFX1hHTUFDYCB0aGVyZS4gVGhhdCBzZWVtcyBvZGQsIGJlY2F1c2UgYHN0bW1hY19od2lmX2ZpbmRgICpkb2VzKiBjaGVjayB0aGUgYGNvcmVfdHlwZWAgaW4gY29uanVuY3Rpb24gd2l0aCBgZGV2X2lkYC4gSG1tbS4KCk9rYXksIEkgc2VlIGl0IG5vdy4gYHN0bW1hY19od2lmX2luaXRgIGdldHMgdGhlIGBjb3JlX3R5cGVgIHZpYSBgcHJpdi0mZ3Q7cGxhdC0mZ3Q7Y29yZV90eXBlYC4gU28gdGhlIGNyaXRpY2FsIHF1ZXN0aW9uIGlzICp3aGVyZSogaXMgdGhhdCBiZWluZyBpbml0aWFsaXplZD8gSWYgYHN0bW1hY19wY2lgIGlzbiYjMzk7dCBzZXR0aW5nIGl0IGRpcmVjdGx5LCBJIG5lZWQgdG8ga25vdyB3aGVyZSBgcHJpdi0mZ3Q7cGxhdC0mZ3Q7Y29yZV90eXBlYCBpcyBwb3B1bGF0ZWQsIG9yIGlzIGl0IHplcm8uIElmIGl0IGlzbiYjMzk7dCBzZXQsIHRoZW4gdGhhdCBkZWZhdWx0cyB0byBgRFdNQUNfQ09SRV9NQUNgIHdoaWNoIHdvdWxkIGV4cGxhaW4gdGhlIGxhY2sgb2YgYW4gZXhwbGljaXQgYFhHTUFDYCBkZXNpZ25hdGlvbi4gSSYjMzk7bSBnb2luZyB0byB0YWtlIGFub3RoZXIgbG9vayBhdCBgc3RtbWFjX3BjaS5jYCB0byB0cmFjZSB3aGVyZSBgcHJpdi0mZ3Q7cGxhdC0mZ3Q7Y29yZV90eXBlYCBjb21lcyBmcm9tLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNCAwNjozNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19wY2kuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDMwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDUwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAgMzA6XHRcdHBsYXQtXHUwMDNlbWRpb19idXNfZGF0YS1cdTAwM2VuZWVkc19yZXNldCA9IHRydWU7XG4gIDMxOlx0fVxuICAzMjpcdFxuICAzMzpcdHN0YXRpYyBpbnQgc3RtbWFjX2RlZmF1bHRfZGF0YShzdHJ1Y3QgcGNpX2RldiAqcGRldixcbiAgMzQ6XHRcdFx0XHQgICAgICAgc3RydWN0IHBsYXRfc3RtbWFjZW5ldF9kYXRhICpwbGF0KVxuICAzNTpcdHtcbiAgMzY6XHRcdC8qIFNldCBjb21tb24gZGVmYXVsdCBkYXRhIGZpcnN0ICovXG4gIDM3Olx0XHRjb21tb25fZGVmYXVsdF9kYXRhKHBsYXQpO1xuICAzODpcdFxuICAzOTpcdFx0cGxhdC1cdTAwM2VidXNfaWQgPSAxO1xuICA0MDpcdFx0cGxhdC1cdTAwM2VwaHlfYWRkciA9IDA7XG4gIDQxOlx0XHRwbGF0LVx1MDAzZXBoeV9pbnRlcmZhY2UgPSBQSFlfSU5URVJGQUNFX01PREVfR01JSTtcbiAgNDI6XHRcbiAgNDM6XHRcdHBsYXQtXHUwMDNlZG1hX2NmZy1cdTAwM2VwYmwgPSAzMjtcbiAgNDQ6XHRcdHBsYXQtXHUwMDNlZG1hX2NmZy1cdTAwM2VwYmx4OCA9IHRydWU7XG4gIDQ1Olx0XHQvKiBUT0RPOiBBWEkgKi9cbiAgNDY6XHRcbiAgNDc6XHRcdHJldHVybiAwO1xuICA0ODpcdH1cbiAgNDk6XHRcbiAgNTA6XHRzdGF0aWMgY29uc3Qgc3RydWN0IHN0bW1hY19wY2lfaW5mbyBzdG1tYWNfcGNpX2luZm8gPSB7XG4gIDUxOlx0XHQuc2V0dXAgPSBzdG1tYWNfZGVmYXVsdF9kYXRhLFxuICA1MjpcdH07XG4gIDUzOlx0XG4gIDU0Olx0c3RhdGljIGludCBzbnBzX2dtYWM1X2RlZmF1bHRfZGF0YShzdHJ1Y3QgcGNpX2RldiAqcGRldixcbiAgNTU6XHRcdFx0XHRcdCAgIHN0cnVjdCBwbGF0X3N0bW1hY2VuZXRfZGF0YSAqcGxhdClcbiAgNTY6XHR7XG4gIDU3Olx0XHRpbnQgaTtcbiAgNTg6XHRcbiAgNTk6XHRcdHBsYXQtXHUwMDNlY2xrX2NzciA9IFNUTU1BQ19DU1JfMjUwXzMwME07XG4gIDYwOlx0XHRwbGF0LVx1MDAzZWNvcmVfdHlwZSA9IERXTUFDX0NPUkVfR01BQzQ7XG4gIDYxOlx0XHRwbGF0LVx1MDAzZWZvcmNlX3NmX2RtYV9tb2RlID0gdHJ1ZTtcbiAgNjI6XHRcdHBsYXQtXHUwMDNlZmxhZ3MgfD0gU1RNTUFDX0ZMQUdfVFNPX0VOO1xuICA2MzpcdFx0cGxhdC1cdTAwM2VwbXQgPSB0cnVlO1xuICA2NDpcdFxuICA2NTpcdFx0LyogU2V0IGRlZmF1bHQgbnVtYmVyIG9mIFJYIGFuZCBUWCBxdWV1ZXMgdG8gdXNlICovXG4gIDY2Olx0XHRwbGF0LVx1MDAzZXR4X3F1ZXVlc190b191c2UgPSA0O1xuICA2NzpcdFx0cGxhdC1cdTAwM2VyeF9xdWV1ZXNfdG9fdXNlID0gNDtcbiAgNjg6XHRcbiAgNjk6XHRcdHBsYXQtXHUwMDNldHhfc2NoZWRfYWxnb3JpdGhtID0gTVRMX1RYX0FMR09SSVRITV9XUlI7XG4gIDcwOlx0XHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBwbGF0LVx1MDAzZXR4X3F1ZXVlc190b191c2U7IGkmIzQzOyYjNDM7KSB7XG4gIDcxOlx0XHRcdHBsYXQtXHUwMDNldHhfcXVldWVzX2NmZ1tpXS5tb2RlX3RvX3VzZSA9IE1UTF9RVUVVRV9EQ0I7XG4gIDcyOlx0XHRcdHBsYXQtXHUwMDNldHhfcXVldWVzX2NmZ1tpXS53ZWlnaHQgPSAyNTtcbiAgNzM6XHRcdFx0aWYgKGkgXHUwMDNlIDApXG4gIDc0Olx0XHRcdFx0cGxhdC1cdTAwM2V0eF9xdWV1ZXNfY2ZnW2ldLnRic19lbiA9IDE7XG4gIDc1Olx0XHR9XG4gIDc2Olx0XG4gIDc3Olx0XHRwbGF0LVx1MDAzZXJ4X3NjaGVkX2FsZ29yaXRobSA9IE1UTF9SWF9BTEdPUklUSE1fU1A7XG4gIDc4Olx0XHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBwbGF0LVx1MDAzZXJ4X3F1ZXVlc190b191c2U7IGkmIzQzOyYjNDM7KVxuICA3OTpcdFx0XHRwbGF0LVx1MDAzZXJ4X3F1ZXVlc19jZmdbaV0ubW9kZV90b191c2UgPSBNVExfUVVFVUVfRENCO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNCAwNjozNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNTA0NAoJCQkJCQkJb3V0cHV0OiA0NgoJCQkJCQkJdGhvdWdodHM6IDEwNAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIFNUTU1BQyBEcml2ZXIgSW5pdGlhbGl6YXRpb24qKgoKT2theSwgc28gSSYjMzk7bSBkaWdnaW5nIGludG8gdGhpcyBgc3RtbWFjX3BjaS5jYCBmaWxlIGFuZCB0cnlpbmcgdG8gdW5kZXJzdGFuZCBob3cgaXQmIzM5O3Mgc2V0dGluZyB1cCB0aGUgZHJpdmVyLiBJIHNlZSBpdCBzZXRzIGBEV01BQ19DT1JFX0dNQUM0YCBmb3IgYHNucHNfZ21hYzVfZGVmYXVsdF9kYXRhYC4gSG1tLCB0aGF0IHNlZW1zIHN0cmFpZ2h0Zm9yd2FyZCBlbm91Z2ggYXQgZmlyc3QgZ2xhbmNlLiBCdXQgaGFuZyBvbiwgc29tZXRoaW5nJiMzOTtzIG5vdCBxdWl0ZSByaWdodC4uLiBJIGNhbiYjMzk7dCBmaW5kIGFueSBtZW50aW9uIG9mIGBEV01BQ19DT1JFX1hHTUFDYCBpbiB0aGlzIHBhcnRpY3VsYXIgZmlsZS4gVGhhdCYjMzk7cyBhIGJpdCBvZiBhIGhlYWQtc2NyYXRjaGVyLgoKTm93LCB3YWl0IGEgbWludXRlLCBJIHJlbWVtYmVyIHRoYXQgYHN0bW1hY19od2lmX2luaXRgIGlzIHJlc3BvbnNpYmxlIGZvciBncmFiYmluZyB0aGUgaGFyZHdhcmUgdmVyc2lvbi4gT2theSwgbGV0JiMzOTtzIHJldmlzaXQgYHN0bW1hY19od2lmX2luaXRgIGFuZCBnZXQgYSBjbGVhcmVyIHBpY3R1cmUgb2YgaG93IGl0IGFsbCB0aWVzIHRvZ2V0aGVyIGFuZCBob3cgdGhlIGNvcmUgaXMgYWN0dWFsbHkgaWRlbnRpZmllZC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZSBoYXJkd2FyZSB2ZXJzaW9uIGludGVyYWN0cyB3aXRoIHRoZXNlIGNvcmUgZGVmaW5pdGlvbnMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE0IDA2OjM2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvaHdpZi5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMzE1LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDUwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAzMTU6XHR9XG4gMzE2Olx0XG4gMzE3Olx0aW50IHN0bW1hY19od2lmX2luaXQoc3RydWN0IHN0bW1hY19wcml2ICpwcml2KVxuIDMxODpcdHtcbiAzMTk6XHRcdGVudW0gZHdtYWNfY29yZV90eXBlIGNvcmVfdHlwZSA9IHByaXYtXHUwMDNlcGxhdC1cdTAwM2Vjb3JlX3R5cGU7XG4gMzIwOlx0XHRjb25zdCBzdHJ1Y3Qgc3RtbWFjX2h3aWZfZW50cnkgKmVudHJ5O1xuIDMyMTpcdFx0c3RydWN0IHN0bW1hY192ZXJzaW9uIHZlcnNpb247XG4gMzIyOlx0XHRzdHJ1Y3QgbWFjX2RldmljZV9pbmZvICptYWM7XG4gMzIzOlx0XHRib29sIG5lZWRzX3NldHVwID0gdHJ1ZTtcbiAzMjQ6XHRcdGludCByZXQ7XG4gMzI1Olx0XG4gMzI2Olx0XHRzdG1tYWNfZ2V0X3ZlcnNpb24ocHJpdiwgXHUwMDI2dmVyc2lvbik7XG4gMzI3Olx0XG4gMzI4Olx0XHQvKiBTYXZlIElEIGZvciBsYXRlciB1c2UgKi9cbiAzMjk6XHRcdHByaXYtXHUwMDNlc3lub3BzeXNfaWQgPSB2ZXJzaW9uLnNucHN2ZXI7XG4gMzMwOlx0XG4gMzMxOlx0XHRtYWMgPSBkZXZtX2t6YWxsb2MocHJpdi1cdTAwM2VkZXZpY2UsIHNpemVvZigqbWFjKSwgR0ZQX0tFUk5FTCk7XG4gMzMyOlx0XHRpZiAoIW1hYylcbiAzMzM6XHRcdFx0cmV0dXJuIC1FTk9NRU07XG4gMzM0Olx0XG4gMzM1Olx0XHQvKiBDaGVjayBmb3IgSFcgc3BlY2lmaWMgc2V0dXAgZmlyc3QgKi9cbiAzMzY6XHRcdGlmIChwcml2LVx1MDAzZXBsYXQtXHUwMDNlbWFjX3NldHVwKSB7XG4gMzM3Olx0XHRcdHJldCA9IHByaXYtXHUwMDNlcGxhdC1cdTAwM2VtYWNfc2V0dXAocHJpdiwgbWFjKTtcbiAzMzg6XHRcdFx0aWYgKHJldClcbiAzMzk6XHRcdFx0XHRyZXR1cm4gcmV0O1xuIDM0MDpcdFxuIDM0MTpcdFx0XHRuZWVkc19zZXR1cCA9IGZhbHNlO1xuIDM0MjpcdFx0fVxuIDM0MzpcdFxuIDM0NDpcdFx0c3Bpbl9sb2NrX2luaXQoXHUwMDI2bWFjLVx1MDAzZWlycV9jdHJsX2xvY2spO1xuIDM0NTpcdFxuIDM0NjpcdFx0LyogRmFsbGJhY2sgdG8gZ2VuZXJpYyBIVyAqL1xuIDM0NzpcdFxuIDM0ODpcdFx0LyogVXNlIHN5bm9wc3lzX2lkIHZhciBiZWNhdXNlIHNvbWUgc2V0dXBzIGNhbiBvdmVycmlkZSB0aGlzICovXG4gMzQ5Olx0XHRlbnRyeSA9IHN0bW1hY19od2lmX2ZpbmQoY29yZV90eXBlLCBwcml2LVx1MDAzZXN5bm9wc3lzX2lkLCB2ZXJzaW9uLmRldl9pZCk7XG4gMzUwOlx0XHRpZiAoIWVudHJ5KSB7XG4gMzUxOlx0XHRcdGRldl9lcnIocHJpdi1cdTAwM2VkZXZpY2UsXG4gMzUyOlx0XHRcdFx0XCYjMzQ7RmFpbGVkIHRvIGZpbmQgSFcgSUYgKGlkPTB4JXgsIGdtYWM9JWQvJWQpXFxuXCYjMzQ7LFxuIDM1MzpcdFx0XHRcdHZlcnNpb24uc25wc3ZlciwgY29yZV90eXBlID09IERXTUFDX0NPUkVfR01BQyxcbiAzNTQ6XHRcdFx0XHRjb3JlX3R5cGUgPT0gRFdNQUNfQ09SRV9HTUFDNCk7XG4gMzU1Olx0XG4gMzU2Olx0XHRcdHJldHVybiAtRUlOVkFMO1xuIDM1NzpcdFx0fVxuIDM1ODpcdFxuIDM1OTpcdFx0LyogT25seSB1c2UgZ2VuZXJpYyBIVyBoZWxwZXJzIGlmIG5lZWRlZCAqL1xuIDM2MDpcdFx0bWFjLVx1MDAzZWRlc2MgPSBtYWMtXHUwMDNlZGVzYyA/IDogZW50cnktXHUwMDNlZGVzYztcbiAzNjE6XHRcdG1hYy1cdTAwM2VkbWEgPSBtYWMtXHUwMDNlZG1hID8gOiBlbnRyeS1cdTAwM2VkbWE7XG4gMzYyOlx0XHRtYWMtXHUwMDNlbWFjID0gbWFjLVx1MDAzZW1hYyA/IDogZW50cnktXHUwMDNlbWFjO1xuIDM2MzpcdFx0bWFjLVx1MDAzZXB0cCA9IG1hYy1cdTAwM2VwdHAgPyA6IGVudHJ5LVx1MDAzZWh3dGltZXN0YW1wO1xuIDM2NDpcdFx0bWFjLVx1MDAzZW1vZGUgPSBtYWMtXHUwMDNlbW9kZSA/IDogZW50cnktXHUwMDNlbW9kZTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTQgMDY6MzY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjYxNzUKCQkJCQkJCW91dHB1dDogNTAKCQkJCQkJCXRob3VnaHRzOiAyNDQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBgc3RtbWFjYCBEcml2ZXImIzM5O3MgWEdNQUMgQmVoYXZpb3IqKgoKT2theSwgc28gSSYjMzk7bSBkaWdnaW5nIGludG8gdGhpcyBgc3RtbWFjYCBkcml2ZXIgY29kZSwgc3BlY2lmaWNhbGx5IGhvdyBpdCBoYW5kbGVzIFhHTUFDIGNvcmVzLiBJIHNlZSB0aGF0IGBzdG1tYWNfaHdpZl9pbml0YCBjYWxscyBgc3RtbWFjX2h3aWZfZmluZGAsIGFuZCBpdCB1c2VzIGBwcml2LSZndDtwbGF0LSZndDtjb3JlX3R5cGVgIHRvIGZpbmQgdGhlIGNvcnJlY3QgaGFyZHdhcmUgaW50ZXJmYWNlLiBUaGUgaW50ZXJlc3RpbmcgYml0IGlzIHRoYXQgaWYgYGNvcmVfdHlwZWAgaXNuJiMzOTt0IGBEV01BQ19DT1JFX1hHTUFDYCwgaXQmIzM5O3Mgbm90IGdvaW5nIHRvIG1hdGNoIGFueXRoaW5nLCByaWdodD8KClRoZW4gbXkgYnJhaW4gY2xpY2tzOiBgZHdtYWMtc29jZnBnYS5jYCBhbmQgYGR3bWFjLXRlZ3JhLmNgIGJvdGggKmRvKiBzZXQgYGNvcmVfdHlwZSA9IERXTUFDX0NPUkVfWEdNQUNgLiBJIG5lZWQgdG8gY29uZmlybSB3aGV0aGVyIHRoZXNlIGRyaXZlcnMgYXJlIGV2ZW4gcmVhY2hhYmxlIGluIHRoZSBRRU1VIGVudmlyb25tZW50IEkmIzM5O20gdXNpbmcuIE15IHN1c3BpY2lvbiwgdGhvdWdoLCBpcyB0aGF0IHRoZSBpc3N1ZSBpc24mIzM5O3QgbGltaXRlZCB0byBzcGVjaWZpYyBib2FyZCBjb25maWdzLgoKVGhlbiBJIG5vdGljZWQgdGhhdCBgc3RtbWFjX21haW4uY2AgaGFzIGFsc28gYmVlbiBtb2RpZmllZC4gVGhlIHBhdGNoIGlzIGNoYW5naW5nIHRoZSB3YXkgdGhlIGRhdGFwYXRoIGlzIHRvcm4gZG93biB1c2luZyBgc3RtbWFjX2RhdGFwYXRoX3RlYXJkb3duKHByaXYpYC4gVGhpcyBmdW5jdGlvbiBpcyBiZWluZyBjYWxsZWQgaW4gc2V2ZXJhbCBwbGFjZXM6IGBfX3N0bW1hY19yZWxlYXNlYCwgYHN0bW1hY194ZHBfcmVsZWFzZWAsIGFuZCBgc3RtbWFjX3N1c3BlbmRgLiBIZXJlJiMzOTtzIHRoZSBraWNrZXI6IHRoaXMgdGVhcmRvd24gbG9naWMgc2VlbXMgdG8gYmUgZXhlY3V0ZWQgZm9yICphbGwqIGBzdG1tYWNgIGRldmljZXMsIG5vdCBqdXN0IHRoZSBYR01BQyBvbmVzLiBUaGF0JiMzOTtzIGEgcmVkIGZsYWcuIEkgbmVlZCB0byB0YWtlIGEgY2xvc2VyIGxvb2sgYXQgd2hhdCBgc3RtbWFjX2RhdGFwYXRoX3RlYXJkb3duYCBpcyBhY3R1YWxseSBkb2luZyBpbiB0aGUgcGF0Y2guCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE0IDA2OjM2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX21haW4uYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDI1NjAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNTAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MjU2MDpcdFx0XHRzdG1tYWNfZGVpbml0X2NoYW4ocHJpdiwgcHJpdi1cdTAwM2Vpb2FkZHIsIGNoYW4pO1xuMjU2MTpcdH1cbjI1NjI6XHRcbjI1NjM6XHQvKipcbjI1NjQ6XHQgKiBzdG1tYWNfZGF0YXBhdGhfdGVhcmRvd24gLSBvcmRlcmVkIGRhdGFwYXRoIHRlYXJkb3duIGFzIHBlciBJUCBzcGVjaWZpY2F0aW9uXG4yNTY1Olx0ICogQHByaXY6IGRyaXZlciBwcml2YXRlIHN0cnVjdHVyZVxuMjU2NjpcdCAqIERlc2NyaXB0aW9uOlxuMjU2NzpcdCAqIFdoZW4gdGVhcmRvd24gb3BzIGFyZSBhdmFpbGFibGUsIGZvbGxvdyB0aGUgZGF0YWJvb2sgb3JkZXJlZCB0ZWFyZG93blxuMjU2ODpcdCAqIHNlcXVlbmNlLlxuMjU2OTpcdCAqIEZvbGxvd3MgdGhlIGxlZ2FjeSBzdG9wICYjNDM7IE1BQyBkaXNhYmxlIGZvciB2YXJpYW50cyB3aXRob3V0IHRoZSBmZWF0dXJlLlxuMjU3MDpcdCAqL1xuMjU3MTpcdHN0YXRpYyB2b2lkIHN0bW1hY19kYXRhcGF0aF90ZWFyZG93bihzdHJ1Y3Qgc3RtbWFjX3ByaXYgKnByaXYpXG4yNTcyOlx0e1xuMjU3MzpcdFx0dTMyIHJ4X2NoYW5uZWxzX2NvdW50ID0gcHJpdi1cdTAwM2VwbGF0LVx1MDAzZXJ4X3F1ZXVlc190b191c2U7XG4yNTc0Olx0XHR1MzIgdHhfY2hhbm5lbHNfY291bnQgPSBwcml2LVx1MDAzZXBsYXQtXHUwMDNldHhfcXVldWVzX3RvX3VzZTtcbjI1NzU6XHRcdHUzMiBjaGFuO1xuMjU3NjpcdFxuMjU3NzpcdFx0LyogU3RvcCBhbGwgVFggRE1BIGNoYW5uZWxzICovXG4yNTc4Olx0XHRmb3IgKGNoYW4gPSAwOyBjaGFuIFx1MDAzYyB0eF9jaGFubmVsc19jb3VudDsgY2hhbiYjNDM7JiM0MzspXG4yNTc5Olx0XHRcdHN0bW1hY19zdG9wX3R4X2RtYShwcml2LCBjaGFuKTtcbjI1ODA6XHRcbjI1ODE6XHRcdC8qIFdhaXQgZm9yIGV2ZXJ5IFRYIERNQSBjaGFubmVsIHRvIHJlcG9ydCBpdHNlbGYgc3RvcHBlZCAqL1xuMjU4MjpcdFx0aWYgKHByaXYtXHUwMDNlaHctXHUwMDNlZG1hLVx1MDAzZXR4X2RtYV9zdG9wcGVkKVxuMjU4MzpcdFx0XHRmb3IgKGNoYW4gPSAwOyBjaGFuIFx1MDAzYyB0eF9jaGFubmVsc19jb3VudDsgY2hhbiYjNDM7JiM0MzspXG4yNTg0Olx0XHRcdFx0c3RtbWFjX3R4X2RtYV9zdG9wcGVkKHByaXYsIHByaXYtXHUwMDNlaW9hZGRyLCBjaGFuKTtcbjI1ODU6XHRcbjI1ODY6XHRcdC8qIFdhaXQgZm9yIHRoZSBNVEwgVFggcXVldWVzIHRvIGZpbmlzaCBwdXNoaW5nIGludG8gdGhlIE1BQyAqL1xuMjU4NzpcdFx0aWYgKHByaXYtXHUwMDNlaHctXHUwMDNlZG1hLVx1MDAzZXR4X210bF9kcmFpbilcbjI1ODg6XHRcdFx0Zm9yIChjaGFuID0gMDsgY2hhbiBcdTAwM2MgdHhfY2hhbm5lbHNfY291bnQ7IGNoYW4mIzQzOyYjNDM7KVxuMjU4OTpcdFx0XHRcdHN0bW1hY190eF9tdGxfZHJhaW4ocHJpdiwgcHJpdi1cdTAwM2Vpb2FkZHIsIGNoYW4pO1xuMjU5MDpcdFxuMjU5MTpcdFx0LyogRGlzYWJsZSB0aGUgTUFDIFRYIGFuZCBSWCAqL1xuMjU5MjpcdFx0c3RtbWFjX21hY19zZXQocHJpdiwgcHJpdi1cdTAwM2Vpb2FkZHIsIGZhbHNlKTtcbjI1OTM6XHRcbjI1OTQ6XHRcdC8qIFdhaXQgZm9yIHRoZSBNVEwgUlggcXVldWVzIHRvIGRyYWluIGludG8gdGhlIFJYIERNQSAqL1xuMjU5NTpcdFx0aWYgKHByaXYtXHUwMDNlaHctXHUwMDNlZG1hLVx1MDAzZXJ4X210bF9kcmFpbilcbjI1OTY6XHRcdFx0Zm9yIChjaGFuID0gMDsgY2hhbiBcdTAwM2MgcnhfY2hhbm5lbHNfY291bnQ7IGNoYW4mIzQzOyYjNDM7KVxuMjU5NzpcdFx0XHRcdHN0bW1hY19yeF9tdGxfZHJhaW4ocHJpdiwgcHJpdi1cdTAwM2Vpb2FkZHIsIGNoYW4pO1xuMjU5ODpcdFxuMjU5OTpcdFx0LyogU3RvcCBhbGwgUlggRE1BIGNoYW5uZWxzICovXG4yNjAwOlx0XHRmb3IgKGNoYW4gPSAwOyBjaGFuIFx1MDAzYyByeF9jaGFubmVsc19jb3VudDsgY2hhbiYjNDM7JiM0MzspXG4yNjAxOlx0XHRcdHN0bW1hY19zdG9wX3J4X2RtYShwcml2LCBjaGFuKTtcbjI2MDI6XHRcbjI2MDM6XHRcdC8qIFdhaXQgZm9yIGV2ZXJ5IFJYIERNQSBjaGFubmVsIHRvIHJlcG9ydCBpdHNlbGYgc3RvcHBlZCAqL1xuMjYwNDpcdFx0aWYgKHByaXYtXHUwMDNlaHctXHUwMDNlZG1hLVx1MDAzZXJ4X2RtYV9zdG9wcGVkKVxuMjYwNTpcdFx0XHRmb3IgKGNoYW4gPSAwOyBjaGFuIFx1MDAzYyByeF9jaGFubmVsc19jb3VudDsgY2hhbiYjNDM7JiM0MzspXG4yNjA2Olx0XHRcdFx0c3RtbWFjX3J4X2RtYV9zdG9wcGVkKHByaXYsIHByaXYtXHUwMDNlaW9hZGRyLCBjaGFuKTtcbjI2MDc6XHR9XG4yNjA4Olx0XG4yNjA5Olx0LyoqXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE0IDA2OjM2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI3NzE3CgkJCQkJCQlvdXRwdXQ6IDE5CgkJCQkJCQl0aG91Z2h0czogMTI4OAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXNpcyBvZiBzdG1tYWMgRGF0YXBhdGggVGVhcmRvd24gYW5kIEltcGxpY2F0aW9ucyoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBgc3RtbWFjX2RhdGFwYXRoX3RlYXJkb3duYCBmdW5jdGlvbiwgYW5kIGl0IHNlZW1zIHRvIGJlIHVuaXZlcnNhbGx5IGNhbGxlZCBhY3Jvc3MgYWxsIGRldmljZXMgdGhhdCB1c2UgdGhpcyBkcml2ZXIuIFRoZSBpbnRlcmVzdGluZyBwYXJ0IGlzIHRoZSBjaGFuZ2UgaW4gaXRzIGJlaGF2aW9yLiBQcmV2aW91c2x5LCB0aGUgRE1BIHdhcyBzdG9wcGVkIHdpdGggYHN0bW1hY19zdG9wX2FsbF9kbWFgIGFuZCB0aGUgTUFDIHdhcyBkaXNhYmxlZCB1c2luZyBgc3RtbWFjX21hY19zZXQoLi4uLCBmYWxzZSlgLiBOb3csIGBzdG1tYWNfZGF0YXBhdGhfdGVhcmRvd25gIGRpcmVjdGx5IGNhbGxzIGBzdG1tYWNfc3RvcF90eF9kbWFgLCB0aGVuIGBzdG1tYWNfbWFjX3NldCguLi4sIGZhbHNlKWAsIGFuZCBmaW5hbGx5IGBzdG1tYWNfc3RvcF9yeF9kbWFgLiBUaGlzIG9yZGVyIGlzIGEgKmZ1bmN0aW9uYWwgY2hhbmdlKiBhZmZlY3RpbmcgYWxsIHN0bW1hYyBkZXZpY2VzLiBUaGlzIGRpZmZlcmVuY2UgaW4gZXhlY3V0aW9uIGZsb3cgaXMgYSBjb25jZXJuLgoKTW9yZW92ZXIsIHRoZSBvcmlnaW5hbCB0ZWFyZG93biBvcmRlciBpbmNsdWRlZCBkaXNhYmxpbmcgdGhlIE1BQyAqYWZ0ZXIqIGZyZWVpbmcgdGhlIERNQSBkZXNjcmlwdG9ycy4gVGhlIG5ldyBvcmRlciBkaXNhYmxlcyB0aGUgTUFDICpiZWZvcmUqIGZyZWVpbmcgdGhlbSwgd2hpY2ggaXMgYSBtYWpvciBzaGlmdC4gVGhlIGltcGxpY2F0aW9ucyBoZXJlIGFyZSBzaWduaWZpY2FudDsgYSBjaGFuZ2UgaW4gcmVzb3VyY2UgcmVsZWFzZSBvcmRlciBpcyBhIHBvdGVudGlhbCByZWNpcGUgZm9yIGluc3RhYmlsaXR5LCBlc3BlY2lhbGx5IGR1cmluZyBicmluZy1kb3duIHNjZW5hcmlvcyAoZS5nLiwgYGlwIGxpbmsgc2V0IGV0aDAgZG93bmApLiBUaGUgc2FtZSBjaGFuZ2VzIGhhdmUgYmVlbiBtYWRlIHRvIGBzdG1tYWNfaHdfc2V0dXBgIGFuZCBgc3RtbWFjX3hkcF9vcGVuYCwgc3dpdGNoaW5nIHRoZSBvcmRlciBvZiBNQUMgZW5hYmxlIGFuZCBETUEgc3RhcnQuIFNvLCBub3cgdGhlIERNQSBzdGFydHMgYmVmb3JlIE1BQyBpcyBlbmFibGVkLgoKSSYjMzk7dmUgY29uZmlybWVkIHRoYXQgYHN0bW1hY19kYXRhcGF0aF90ZWFyZG93bmAgaXMgcmVhY2hlZCB2aWEgYF9fc3RtbWFjX3JlbGVhc2VgLCBgc3RtbWFjX3hkcF9yZWxlYXNlYCwgYW5kIGBzdG1tYWNfc3VzcGVuZGAuIFRoaXMgbWVhbnMgdGhlc2UgY2hhbmdlcyBoaXQgKmFsbCogaW50ZXJmYWNlcyB1c2luZyB0aGlzIGRyaXZlciwgd2hpY2ggYXJlIHBvdGVudGlhbGx5IHJlYWNoYWJsZSB0aHJvdWdoIHRoZSBgc3RtbWFjX3BjaWAgZHJpdmVyLgoKSSYjMzk7bSBhbHNvIHNlZWluZyB0aGVzZSBuZXcgYGR3eGdtYWMyXypgIGZ1bmN0aW9ucy4gVGhvc2UgYXJlIG9ubHkgcmVhY2hlZCB3aGVuIGBjb3JlX3R5cGUgPT0gRFdNQUNfQ09SRV9YR01BQ2AuIEkgbmVlZCB0byBmaWd1cmUgb3V0IGhvdyB0byBlbnN1cmUgdGhhdCBjb25kaXRpb24gaXMgbWV0IGluIG15IHRlc3RzLiBJdCBsb29rcyBsaWtlIHRoZSBgc3RtbWFjX3BjaWAgZHJpdmVyIHVzZXMgYHN0bW1hY19wY2lfaW5mb2AgdG8gY29uZmlndXJlIHRoZSBkZXZpY2UsIGFuZCB0aGF0IHN0cnVjdHVyZSBoYXMgYSBgY29yZV90eXBlYCBmaWVsZC4KClRoZSBQQ0kgSUQgdGFibGUgbGlzdHMgYW4gYFhHTUFDX0lEYC4gVGhpcyBpcyBwcm9taXNpbmcuIEkgbmVlZCB0byBmaWd1cmUgb3V0IHdoYXQgdGhhdCBgWEdNQUNfSURgIGFjdHVhbGx5IGlzIGluIHRoZSBjb250ZXh0IG9mIGBwY2lfZGV2aWNlX2lkYC4gQ2FuIEkgcmVhY2ggdGhlIG5ldyBmdW5jdGlvbnM/IFRoZSBxdWVzdGlvbiBpcywgaG93IGRvIEkgZW5zdXJlIGEgUENJIGRldmljZSBnZXRzIGJvdW5kIHRvIHRoaXMgYFhHTUFDX0lEYD8gSWYgSSBjYW4sIHRoZW4gSSBjYW4gcmVhY2ggdGhlIG5ldyBmdW5jdGlvbnMgdGhhdCBpbXBsZW1lbnQgdGhlIGNoYW5nZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTQgMDY6MzY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7WEdNQUNfSUQmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2hucy9obnNfZHNhZl9tYWMuYz05ODU9c3RhdGljIGludCBobnNfbWFjX2dldF9tb2RlKHBoeV9pbnRlcmZhY2VfdCBwaHlfaWYpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2hucy9obnNfZHNhZl9tYWMuYy05OTAtXHRjYXNlIFBIWV9JTlRFUkZBQ0VfTU9ERV9YR01JSTpcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMvaG5zX2RzYWZfbWFjLmM6OTkxOlx0XHRyZXR1cm4gTUFDX1hHTUFDX0lEWDtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMvaG5zX2RzYWZfbWFjLmMtOTkyLVx0ZGVmYXVsdDpcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zL2huc19kc2FmX21hYy5oPTE1PXN0cnVjdCBkc2FmX2RldmljZTtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zL2huc19kc2FmX21hYy5oLTMyLSNkZWZpbmUgTUFDX0dNQUNfSURYIDBcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMvaG5zX2RzYWZfbWFjLmg6MzM6I2RlZmluZSBNQUNfWEdNQUNfSURYIDFcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMvaG5zX2RzYWZfbWFjLmgtMzQtXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvY29tbW9uLmgtNDUtLyogRGV2aWNlIElEICovXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9jb21tb24uaDo0NjojZGVmaW5lIERXWEdNQUNfSURcdFx0MHg3NlxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvY29tbW9uLmgtNDctI2RlZmluZSBEV1hMR01BQ19JRFx0XHQweDI3XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHd4Z21hYzIuaC0xODQtI2RlZmluZSBYR01BQ19MM0w0X0FERFJfQ1RSTFx0XHQweDAwMDAwYzAwXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd3hnbWFjMi5oOjE4NTojZGVmaW5lIFhHTUFDX0lERFJcdFx0XHRHRU5NQVNLKDE2LCA4KVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHd4Z21hYzIuaDoxODY6I2RlZmluZSBYR01BQ19JRERSX0ZOVU1fTUFTS1x0XHRHRU5NQVNLKDcsIDQpXHQvKiBGTlVNIHdpdGhpbiBJRERSICovXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd3hnbWFjMi5oOjE4NzojZGVmaW5lIFhHTUFDX0lERFJfUkVHX01BU0tcdFx0R0VOTUFTSygzLCAwKVx0LyogUkVHIHdpdGhpbiBJRERSICovXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd3hnbWFjMi5oLTE4OC0jZGVmaW5lIFhHTUFDX1RUXHRcdFx0QklUKDEpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHd4Z21hYzJfY29yZS5jPTEyNDE9c3RhdGljIGludCBkd3hnbWFjMl9maWx0ZXJfcmVhZChzdHJ1Y3QgbWFjX2RldmljZV9pbmZvICpodywgdTMyIGZpbHRlcl9ubyxcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd3hnbWFjMl9jb3JlLmMtMTI1MS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3eGdtYWMyX2NvcmUuYzoxMjUyOlx0aWRkciA9IEZJRUxEX1BSRVAoWEdNQUNfSUREUl9GTlVNX01BU0ssIGZpbHRlcl9ubykgfFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHd4Z21hYzJfY29yZS5jOjEyNTM6XHQgICAgICAgRklFTERfUFJFUChYR01BQ19JRERSX1JFR19NQVNLLCByZWcpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHd4Z21hYzJfY29yZS5jOjEyNTQ6XHR2YWx1ZSA9IEZJRUxEX1BSRVAoWEdNQUNfSUREUiwgaWRkcik7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd3hnbWFjMl9jb3JlLmMtMTI1NS1cdHZhbHVlIHw9IFhHTUFDX1RUIHwgWEdNQUNfWEI7XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHd4Z21hYzJfY29yZS5jPTEyNjY9c3RhdGljIGludCBkd3hnbWFjMl9maWx0ZXJfd3JpdGUoc3RydWN0IG1hY19kZXZpY2VfaW5mbyAqaHcsIHUzMiBmaWx0ZXJfbm8sXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHd4Z21hYzJfY29yZS5jLTEyNzgtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd3hnbWFjMl9jb3JlLmM6MTI3OTpcdGlkZHIgPSBGSUVMRF9QUkVQKFhHTUFDX0lERFJfRk5VTV9NQVNLLCBmaWx0ZXJfbm8pIHxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3eGdtYWMyX2NvcmUuYzoxMjgwOlx0ICAgICAgIEZJRUxEX1BSRVAoWEdNQUNfSUREUl9SRUdfTUFTSywgcmVnKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3eGdtYWMyX2NvcmUuYzoxMjgxOlx0dmFsdWUgPSBGSUVMRF9QUkVQKFhHTUFDX0lERFIsIGlkZHIpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHd4Z21hYzJfY29yZS5jLTEyODItXHR2YWx1ZSB8PSBYR01BQ19YQjtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9od2lmLmM9MTExPXN0YXRpYyBjb25zdCBzdHJ1Y3Qgc3RtbWFjX2h3aWZfZW50cnkge1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2h3aWYuYy0yNDktXHRcdC5taW5faWQgPSBEV1hHTUFDX0NPUkVfMl8xMCxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2h3aWYuYzoyNTA6XHRcdC5kZXZfaWQgPSBEV1hHTUFDX0lELFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvaHdpZi5jLTI1MS1cdFx0LnJlZ3MgPSB7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE0IDA2OjM2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDMwOTU0CgkJCQkJCQlvdXRwdXQ6IDQ1CgkJCQkJCQl0aG91Z2h0czogMjE4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgRGV2aWNlIElEIGFuZCBWZXJzaW9uIFJldHJpZXZhbCoqCgpPa2F5LCBzbyBJIHNlZSB0aGF0IGBEV1hHTUFDX0lEYCBpcyBkZWZpbmVkIGFzIGAweDc2YC4gVGhhdCBzZWVtcyBsaWtlIGEgcG90ZW50aWFsIGlkZW50aWZpZXIgZm9yIHRoZSBYR01BQyBjb3JlLiBIb3dldmVyLCBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlIGRyaXZlciBhY3R1YWxseSBkZXRlcm1pbmVzIHRoZSBkZXZpY2UgSUQgYW5kIHZlcnNpb24gYXQgcnVudGltZS4gVGhlIGBzdG1tYWNfaHdpZl9pbml0YCBmdW5jdGlvbiBsb29rcyBsaWtlIHRoZSBrZXkgZW50cnkgcG9pbnQgaGVyZS4KCkkgcmVjYWxsIHRoYXQgdGhpcyBmdW5jdGlvbiBsZXZlcmFnZXMgaGFyZHdhcmUgcmVnaXN0ZXJzIHRvIGRldGVybWluZSB0aGUgdmVyc2lvbi4gVGhlIGNvZGUgc25pcHBldCBmb3IgYHN0bW1hY19nZXRfdmVyc2lvbmAgaXMgd2hhdCBJIG5lZWQgdG8gZm9jdXMgb24uIEl0IHJlYWRzIGZyb20gdGhlIGBNQUNfVkVSU0lPTmAgcmVnaXN0ZXIuIFRoZSBmdW5jdGlvbiB0aGVuIGV4dHJhY3RzIHJlbGV2YW50IGZpZWxkcyB1c2luZyBgRklFTERfR0VUYCwgbmFtZWx5IGBEV01BQ19TTlBTVkVSYCBhbmQgYERXTUFDX1VTRVJWRVJgLiBJZiBgY29yZV90eXBlYCBpcyBhbiBYR01BQywgaXQgZ2V0cyB0aGUgdmVyc2lvbiBmcm9tIGBEV01BQ19VU0VSVkVSYCBlbHNlIGl0IHVzZXMgdGhlIGBEV01BQ19TTlBTVkVSYC4KCkkmIzM5O20gbm93IHRoaW5raW5nIGFib3V0IGBjb3JlX3R5cGVgLiBXaGVyZSBkb2VzIHRoZSBgY29yZV90eXBlYCB2YXJpYWJsZSBjb21lIGZyb20/IElzIGl0IHBhc3NlZCBpbnRvIGBzdG1tYWNfZ2V0X3ZlcnNpb25gPyBObywgaXQgbG9va3MgbGlrZSBgY29yZV90eXBlYCBpcyBhIGxvY2FsIHZhcmlhYmxlIHRvIGBzdG1tYWNfaHdpZl9pbml0YC4gSSYjMzk7bGwgbmVlZCB0byBkb3VibGUtY2hlY2sgdGhhdCB0aGlzIGlzIGFjY3VyYXRlLiBJIHNob3VsZCBzY3J1dGluaXplIGBzdG1tYWNfaHdpZl9pbml0YCB0byBjb25maXJtIGhvdyBgY29yZV90eXBlYCBpcyBkZXRlcm1pbmVkIGFuZCBzZXQgYmVmb3JlIGl0JiMzOTtzIHVzZWQgYnkgYHN0bW1hY19nZXRfdmVyc2lvbmAuIFVuZGVyc3RhbmRpbmcgaG93IGBjb3JlX3R5cGVgIGlzIHNldCBpcyBjcml0aWNhbCBmb3IgaW50ZXJwcmV0aW5nIHRoZSBkZXZpY2UgdmVyc2lvbiBjb3JyZWN0bHkuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE0IDA2OjM2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvaHdpZi5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMjEsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNTAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7ICAyMTpcdHN0YXRpYyB2b2lkIHN0bW1hY19nZXRfdmVyc2lvbihzdHJ1Y3Qgc3RtbWFjX3ByaXYgKnByaXYsXG4gIDIyOlx0XHRcdFx0ICAgICAgIHN0cnVjdCBzdG1tYWNfdmVyc2lvbiAqdmVyKVxuICAyMzpcdHtcbiAgMjQ6XHRcdGVudW0gZHdtYWNfY29yZV90eXBlIGNvcmVfdHlwZSA9IHByaXYtXHUwMDNlcGxhdC1cdTAwM2Vjb3JlX3R5cGU7XG4gIDI1Olx0XHR1bnNpZ25lZCBpbnQgdmVyc2lvbl9vZmZzZXQ7XG4gIDI2Olx0XHR1MzIgdmVyc2lvbjtcbiAgMjc6XHRcbiAgMjg6XHRcdHZlci1cdTAwM2VzbnBzdmVyID0gMDtcbiAgMjk6XHRcdHZlci1cdTAwM2VkZXZfaWQgPSAwO1xuICAzMDpcdFxuICAzMTpcdFx0aWYgKGNvcmVfdHlwZSA9PSBEV01BQ19DT1JFX01BQzEwMClcbiAgMzI6XHRcdFx0cmV0dXJuO1xuICAzMzpcdFxuICAzNDpcdFx0aWYgKGNvcmVfdHlwZSA9PSBEV01BQ19DT1JFX0dNQUMpXG4gIDM1Olx0XHRcdHZlcnNpb25fb2Zmc2V0ID0gR01BQ19WRVJTSU9OO1xuICAzNjpcdFx0ZWxzZVxuICAzNzpcdFx0XHR2ZXJzaW9uX29mZnNldCA9IEdNQUM0X1ZFUlNJT047XG4gIDM4Olx0XG4gIDM5Olx0XHR2ZXJzaW9uID0gcmVhZGwocHJpdi1cdTAwM2Vpb2FkZHIgJiM0MzsgdmVyc2lvbl9vZmZzZXQpO1xuICA0MDpcdFx0aWYgKHZlcnNpb24gPT0gMCkge1xuICA0MTpcdFx0XHRkZXZfaW5mbyhwcml2LVx1MDAzZWRldmljZSwgXCYjMzQ7VmVyc2lvbiBJRCBub3QgYXZhaWxhYmxlXFxuXCYjMzQ7KTtcbiAgNDI6XHRcdFx0cmV0dXJuO1xuICA0MzpcdFx0fVxuICA0NDpcdFxuICA0NTpcdFx0ZGV2X2luZm8ocHJpdi1cdTAwM2VkZXZpY2UsIFwmIzM0O1VzZXIgSUQ6IDB4JXgsIFN5bm9wc3lzIElEOiAweCV4XFxuXCYjMzQ7LFxuICA0NjpcdFx0XHQgRklFTERfR0VUKERXTUFDX1VTRVJWRVIsIHZlcnNpb24pLFxuICA0NzpcdFx0XHQgRklFTERfR0VUKERXTUFDX1NOUFNWRVIsIHZlcnNpb24pKTtcbiAgNDg6XHRcbiAgNDk6XHRcdHZlci1cdTAwM2VzbnBzdmVyID0gRklFTERfR0VUKERXTUFDX1NOUFNWRVIsIHZlcnNpb24pO1xuICA1MDpcdFx0aWYgKGNvcmVfdHlwZSA9PSBEV01BQ19DT1JFX1hHTUFDKVxuICA1MTpcdFx0XHR2ZXItXHUwMDNlZGV2X2lkID0gRklFTERfR0VUKERXTUFDX1VTRVJWRVIsIHZlcnNpb24pO1xuICA1MjpcdH1cbiAgNTM6XHRcbiAgNTQ6XHRzdGF0aWMgdm9pZCBzdG1tYWNfZHdtYWNfbW9kZV9xdWlyayhzdHJ1Y3Qgc3RtbWFjX3ByaXYgKnByaXYpXG4gIDU1Olx0e1xuICA1NjpcdFx0c3RydWN0IG1hY19kZXZpY2VfaW5mbyAqbWFjID0gcHJpdi1cdTAwM2VodztcbiAgNTc6XHRcbiAgNTg6XHRcdGlmIChwcml2LVx1MDAzZWNoYWluX21vZGUpIHtcbiAgNTk6XHRcdFx0ZGV2X2luZm8ocHJpdi1cdTAwM2VkZXZpY2UsIFwmIzM0O0NoYWluIG1vZGUgZW5hYmxlZFxcblwmIzM0Oyk7XG4gIDYwOlx0XHRcdHByaXYtXHUwMDNlZGVzY3JpcHRvcl9tb2RlID0gU1RNTUFDX0NIQUlOX01PREU7XG4gIDYxOlx0XHRcdG1hYy1cdTAwM2Vtb2RlID0gXHUwMDI2Y2hhaW5fbW9kZV9vcHM7XG4gIDYyOlx0XHR9IGVsc2Uge1xuICA2MzpcdFx0XHRkZXZfaW5mbyhwcml2LVx1MDAzZWRldmljZSwgXCYjMzQ7UmluZyBtb2RlIGVuYWJsZWRcXG5cJiMzNDspO1xuICA2NDpcdFx0XHRwcml2LVx1MDAzZWRlc2NyaXB0b3JfbW9kZSA9IFNUTU1BQ19SSU5HX01PREU7XG4gIDY1Olx0XHRcdG1hYy1cdTAwM2Vtb2RlID0gXHUwMDI2cmluZ19tb2RlX29wcztcbiAgNjY6XHRcdH1cbiAgNjc6XHR9XG4gIDY4Olx0XG4gIDY5Olx0c3RhdGljIGludCBzdG1tYWNfZHdtYWMxX3F1aXJrcyhzdHJ1Y3Qgc3RtbWFjX3ByaXYgKnByaXYpXG4gIDcwOlx0e1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNCAwNjozNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzMjMwNwoJCQkJCQkJb3V0cHV0OiA0NQoJCQkJCQkJdGhvdWdodHM6IDEyNwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIHN0bW1hYyBWZXJzaW9uIFJldHJpZXZhbCoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgaG93IGBzdG1tYWNfZ2V0X3ZlcnNpb25gIHdvcmtzLiBJdCYjMzk7cyBwdWxsaW5nIHRoZSBgY29yZV90eXBlYCBmcm9tIHRoZSBgcHJpdi0mZ3Q7cGxhdGAgc3RydWN0dXJlLiBSaWdodCwgYW5kIHRoYXQgYHByaXYtJmd0O3BsYXRgIGlzIHNldCB1cCBkdXJpbmcgdGhlIGJpbmRpbmcgcHJvY2Vzcy4gSSYjMzk7bSB0aGlua2luZyBhYm91dCBTeXprYWxsZXIgYW5kIGhvdyBpdCBpbnRlcmFjdHMgd2l0aCB0aGlzLiBXaGVuIFN5emthbGxlciB1c2VzIGBzdG1tYWNfcGNpYCwgaXQgZ29lcyB0aHJvdWdoIGBzdG1tYWNfcGNpX2luZm9gLCBhbmQgdGhhdCYjMzk7cyB3aGVyZSB0aGUgYGNvcmVfdHlwZWAgaXMgc2V0LiBJdCBzZWVtcyBsaWtlIGl0JiMzOTtzIGJlaW5nIHNldCB0byBlaXRoZXIgYERXTUFDX0NPUkVfR01BQzRgIG9yIGAwYCwgd2hpY2ggaXMgYWxpYXNlZCB0byBgRFdNQUNfQ09SRV9HTUFDYC4gVGhhdCYjMzk7cyBpbnRlcmVzdGluZywgYnV0IEkgbmVlZCB0byBtYWtlIHN1cmUgSSYjMzk7bSBub3QgbWlzc2luZyBhbnl0aGluZy4gTXkgcHJpbWFyeSBjb25jZXJuIGlzIHRvIGVuc3VyZSB0aGUgc3l6a2FsbGVyIHRlc3QgY292ZXJhZ2UgaXMgc291bmQuCgpUaGUgdGhpbmcgdGhhdCBJIGFtIG1pc3NpbmcgaXMgdGhlIGBEV01BQ19DT1JFX1hHTUFDYCB2YWx1ZSEgSXMgdGhlcmUgYW55IFBDSSBJRCBjb25maWd1cmF0aW9uIHRoYXQgY2F1c2VzIGBjb3JlX3R5cGVgIHRvIGJlIHNldCB0byBgRFdNQUNfQ09SRV9YR01BQ2A/IEkgbmVlZCB0byBkb3VibGUtY2hlY2sgYHN0bW1hY19wY2kuY2AgdG8gYmUgY29tcGxldGVseSB0aG9yb3VnaC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTQgMDY6MzY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkVycm9yOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bm8gbWF0Y2hlczwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtYR01BQyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19wY2kuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtlcnJvciYjMzQ7OiAmIzM0O25vIG1hdGNoZXMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE0IDA2OjM2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDMyNzYwCgkJCQkJCQlvdXRwdXQ6IDQzCgkJCQkJCQl0aG91Z2h0czogMzEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIGFuIGV4cGVydCYjMzk7cyBpbnRlcm5hbCBtb25vbG9ndWU6CgoqKkludmVzdGlnYXRpbmcgdGhlIFhHTUFDIEFic2VuY2UqKgoKSG1tLCBpbnRlcmVzdGluZy4gTXkgaW5pdGlhbCBodW5jaCB3YXMgdGhhdCB0aGUgYFhHTUFDYCBtb2R1bGUgd2FzIHBhcnQgb2YgdGhlIHN0YW5kYXJkIFNUTU1BQyBkcml2ZXIsIGJ1dCBhIHF1aWNrIGNoZWNrIHJldmVhbHMgdGhhdCBgc3RtbWFjX3BjaS5jYCBkb2VzbiYjMzk7dCBhY3R1YWxseSBjb250YWluIHRoZSBzeW1ib2wuIFRoYXQmIzM5O3MgYSBrZXkgcGllY2Ugb2YgaW5mb3JtYXRpb24sIGFuZCBpdCBtZWFucyBJIG5lZWQgdG8gYWRqdXN0IG15IHNlYXJjaCBzdHJhdGVneS4gV2hlcmUgZWxzZSBjb3VsZCBpdCBiZSBoaWRpbmcsIG9yIHBvdGVudGlhbGx5LCB1bmRlciBhIHNsaWdodGx5IGRpZmZlcmVudCBuYW1lPyBNeSBpbW1lZGlhdGUgbmV4dCBzdGVwIGlzIHRvIGV4cGxvcmUgdGhlICYjMzQ7ZHdtYWMtaW50ZWwuYyYjMzQ7IGZpbGUuIEludGVsIGlzIGEgYmlnIHBsYXllciBpbiB0aGlzIHNwYWNlLCBhbmQgdGhleSBvZnRlbiBpbXBsZW1lbnQgdGhlaXIgb3duIHNwZWNpZmljIHZlcnNpb25zIG9mIHRoZXNlIGRyaXZlcnMuIFRoZSBYR01BQyBpbXBsZW1lbnRhdGlvbiwgaWYgcHJlc2VudCBhdCBhbGwsIG1pZ2h0IGJlIHR1Y2tlZCBhd2F5IGluIHRoZXJlLiBJJiMzOTtsbCBuZWVkIHRvIHNjcnV0aW5pemUgdGhhdCBmaWxlIGNhcmVmdWxseSwgbG9va2luZyBmb3IgYW55dGhpbmcgdGhhdCBzb3VuZHMgbGlrZSBhIHJlbGF0ZWQgaW1wbGVtZW50YXRpb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE0IDA2OjM2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5FcnJvcjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm5vIG1hdGNoZXM8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7WEdNQUMmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1pbnRlbC5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O2Vycm9yJiMzNDs6ICYjMzQ7bm8gbWF0Y2hlcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTQgMDY6MzY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzMwNDQKCQkJCQkJCW91dHB1dDogNDUKCQkJCQkJCXRob3VnaHRzOiAxMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UgYW5kIHdyaXR0ZW4gaW4gdGhlIGZpcnN0IHBlcnNvbjoKCioqTmF2aWdhdGluZyB0aGUgTG9vbmdzb24gRFdNQUMgRHJpdmVyKioKCk9rYXksIEkmIzM5O20gdGhpbmtpbmcgYWJvdXQgdGhlIERXTUFDIGRyaXZlciBzcGVjaWZpY2FsbHkgZm9yIExvb25nc29uLiBNeSBtZW50YWwgbWFwIGlzIGdvaW5nIHN0cmFpZ2h0IHRvIGBkd21hYy1sb29uZ3Nvbi5jYC4gVGhhdCYjMzk7cyB3aGVyZSBJIG5lZWQgdG8gc3RhcnQuIEl0JiMzOTtzIHRoZSBwb2ludCBvZiBpbnRlZ3JhdGlvbiwgd2hlcmUgdGhlIGdlbmVyaWMgRFdNQUMgY29kZSBpbnRlcmZhY2VzIHdpdGggdGhlIExvb25nc29uLXNwZWNpZmljIGhhcmR3YXJlLiBJJiMzOTttIGltbWVkaWF0ZWx5IHRyeWluZyB0byByZWNhbGw6IHdoYXQgYXJlIHRoZSBrZXkgZGlmZmVyZW5jZXMgYmV0d2VlbiB0aGUgZ2VuZXJpYyBEV01BQyBmcmFtZXdvcmsgYW5kIHRoZSBMb29uZ3NvbiBTb0MmIzM5O3MgaW1wbGVtZW50YXRpb24/IENsb2NrIG1hbmFnZW1lbnQ/IERNQSBjb25maWd1cmF0aW9uPyBJbnRlcnJ1cHQgaGFuZGxpbmcgc3BlY2lmaWMgdG8gdGhlIExvb25nc29uIHBsYXRmb3JtPyBNZW1vcnkgbWFwcGluZz8gUG93ZXIgbWFuYWdlbWVudD8gSSBuZWVkIHRvIHF1aWNrbHkgcmVmcmVzaCBteSB1bmRlcnN0YW5kaW5nIG9mIGhvdyB0aGUgTG9vbmdzb24gYXJjaGl0ZWN0dXJlIGludGVyYWN0cyB3aXRoIHRoZSBzdGFuZGFyZCBEV01BQyByZWdpc3RlcnMgYW5kIHN0cnVjdHVyZXMuIEkmIzM5O20gYW50aWNpcGF0aW5nIHRoYXQgSSYjMzk7bGwgYmUgbG9va2luZyBmb3IgYW55IG5vbi1zdGFuZGFyZCByZWdpc3RlciBhY2Nlc3NlcyBvciBpbnRlcnJ1cHQgaGFuZGxpbmcgcm91dGluZXMgd2l0aGluIHRoYXQgZmlsZS4gSSBleHBlY3QgdG8gZmluZCBzb21lIGNyaXRpY2FsIGluaXRpYWxpemF0aW9uIGNvZGUgd2l0aGluIHRoaXMgZmlsZSBmb3IgdGhlIGdpdmVuIGhhcmR3YXJlLiBVbHRpbWF0ZWx5LCBJJiMzOTttIHRyeWluZyB0byBmaWd1cmUgb3V0IGhvdyB0aGlzIGBkd21hYy1sb29uZ3Nvbi5jYCBmaWxlICppbnRlZ3JhdGVzKiB3aXRoIHRoZSByZXN0IG9mIHRoZSBEV01BQyBzdGFjaywgYW5kIHdoYXQgY3VzdG9tIExvb25nc29uLXNwZWNpZmljIGJpdHMgYXJlIGhhbmRsZWQgdGhlcmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE0IDA2OjM3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5FcnJvcjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm5vIG1hdGNoZXM8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7WEdNQUMmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1sb29uZ3Nvbi5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O2Vycm9yJiMzNDs6ICYjMzQ7bm8gbWF0Y2hlcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTQgMDY6Mzc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzMzOTAKCQkJCQkJCW91dHB1dDogNDQKCQkJCQkJCXRob3VnaHRzOiAxMgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBzdW1tYXJ5LCBhcyB0aG91Z2ggSSB3ZXJlIHBvbmRlcmluZyB0aGlzOgoKKipDb25zaWRlcmluZyB0aGUgYGR3bWFjLW1vdG9yY29tbS5jYCBEcml2ZXIqKgoKT2theSwgc28gSSYjMzk7bSB0aGlua2luZyBhYm91dCBFdGhlcm5ldCBkcml2ZXJzLCBwYXJ0aWN1bGFybHkgaW4gdGhlIGNvbnRleHQgb2YgdGhpcyBzcGVjaWZpYyBzeXN0ZW0sIGFuZCB0aGUgYGR3bWFjLW1vdG9yY29tbS5jYCBkcml2ZXIgaXMgcG9raW5nIGF0IHRoZSBmcm9udCBvZiBteSBtaW5kLiBXaGF0JiMzOTtzIHRoZSBkZWFsIHdpdGggdGhpcyBwYXJ0aWN1bGFyIGltcGxlbWVudGF0aW9uPyBJcyBpdCBkb2luZyBhbnl0aGluZyBzcGVjaWFsIG9yIHVuaXF1ZSB0aGF0IEkgbmVlZCB0byBiZSBhd2FyZSBvZj8gSSBuZWVkIHRvIGFuYWx5emUgaG93IGl0IGhhbmRsZXMgdGhlIE1BQyYjMzk7cyBjb21tdW5pY2F0aW9uLiBBcmUgdGhlcmUgYW55IGRldmlhdGlvbnMgZnJvbSB0aGUgc3RhbmRhcmQgRGVzaWduV2FyZSBNQUMgZHJpdmVyPyBEb2VzIGl0IGNvbnRhaW4gYW55IE1vdG9yY29tbS1zcGVjaWZpYyBoYXJkd2FyZSBxdWlya3MsIG9yIGFyZSB0aGV5IGhhbmRsZWQgdXBzdHJlYW0/IEkgaGF2ZSB0byBjb25zaWRlciB0aGUgcGVyZm9ybWFuY2UgaW1wbGljYXRpb25zIGhlcmUsIGVzcGVjaWFsbHkgaWYgaXQmIzM5O3MgaW50ZXJhY3Rpbmcgd2l0aCBhbnkgY3VzdG9tIGhhcmR3YXJlIG9yIGEgbm9uLXN0YW5kYXJkIFBIWS4gTGV0IG1lIGRpdmUgaW50byB0aGUgY29kZSBhbmQgc2VlIHdoYXQgc3RhbmRzIG91dC4gSSBuZWVkIHRvIGtlZXAgYW4gZXllIG91dCBmb3IgcG90ZW50aWFsIGludGVycnVwdCBoYW5kbGluZyBkaWZmZXJlbmNlcywgRE1BIHNldHVwIHRoYXQgaXMgb3B0aW1pemVkLCBhbmQgYW55IHBvd2VyIG1hbmFnZW1lbnQgY29uc2lkZXJhdGlvbnMgc3BlY2lmaWMgdG8gdGhpcyBkcml2ZXIgYW5kIGl0cyBpbnRlZ3JhdGlvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTQgMDY6Mzc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkVycm9yOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bm8gbWF0Y2hlczwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtYR01BQyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLW1vdG9yY29tbS5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O2Vycm9yJiMzNDs6ICYjMzQ7bm8gbWF0Y2hlcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTQgMDY6Mzc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzM2NjgKCQkJCQkJCW91dHB1dDogNTAKCQkJCQkJCXRob3VnaHRzOiAyNzcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQW5hbHlzaXMgb2YgdGhlIERXTUFDL1NUTU1BQyBEcml2ZXIgSW50ZXJhY3Rpb24qKgoKT2theSwgc28gSSYjMzk7bSBkaWdnaW5nIGludG8gdGhpcywgYW5kIGl0IHNlZW1zIHByZXR0eSBjbGVhciB0aGF0IGBEV01BQ19DT1JFX1hHTUFDYCBpc24mIzM5O3QgYWNjZXNzaWJsZSB0aHJvdWdoIFBDSS4gVGhhdCYjMzk7cyBub3QgYSBzdXJwcmlzZTsgaXQmIzM5O3MgYSBwbGF0Zm9ybSBkZXZpY2UsIGxpa2VseSBjb25maWd1cmVkIGF0IGJvb3QgYnkgc29tZXRoaW5nIGxpa2UgYGR3bWFjLXNvY2ZwZ2EuY2AsIGBkd21hYy10ZWdyYS5jYCwgb3IgYHN0bW1hY19wbGF0Zm9ybS5jYC4gVGhlIHF1ZXN0aW9uIGlzLCBjYW4gU3l6a2FsbGVyIGVtdWxhdGUgdGhvc2UgcGxhdGZvcm0gZGV2aWNlcyBlZmZlY3RpdmVseT8gSSBrbm93IGl0ICpjYW4qIGluamVjdCBkZXZpY2UgdHJlZSBub2RlcywgYXNzdW1pbmcgaXQgaGFzIGEgZnVuY3Rpb24gbGlrZSBgc3l6X2luaXRfbmV0X3NvY2tldGAgb3Igc29tZXRoaW5nIHNpbWlsYXIgYXZhaWxhYmxlLCBidXQgdXN1YWxseSwgaXQgd29uJiMzOTt0IGR5bmFtaWNhbGx5IGNyZWF0ZSBwbGF0Zm9ybSBkZXZpY2VzIHVubGVzcyB0aGVyZSYjMzk7cyBhIHNwZWNpZmljIHBzZXVkby1zeXNjYWxsIGRlc2lnbmVkIGZvciB0aGF0IHB1cnBvc2UsIG9yIGlmIGl0JiMzOTtzIGJha2VkIGludG8gdGhlIGluaXRpYWwgUUVNVSBpbWFnZS4KCkhvbGQgb24uLi4gVGhpcyBwYXRjaCBpcyB0b3VjaGluZyBgc3RtbWFjX21haW4uY2AuIFRoYXQmIzM5O3MgdGhlICpjb3JlKiBkcml2ZXIgZm9yICphbGwqIFNUTU1BQyBkZXZpY2VzLCBpbmNsdWRpbmcgdGhpbmdzIGxpa2UgYERXTUFDX0NPUkVfR01BQzRgIGFuZCBgRFdNQUNfQ09SRV9HTUFDYC4gVGhhdCYjMzk7cyBhIGtleSBvYnNlcnZhdGlvbi4gTm93IEkgbmVlZCB0byBmaWd1cmUgb3V0IGlmIGBzdG1tYWNfZGF0YXBhdGhfdGVhcmRvd25gIGdldHMgY2FsbGVkIGZvciBgRFdNQUNfQ09SRV9HTUFDNGAuIEl0JiMzOTtzIGVzc2VudGlhbCB0byB1bmRlcnN0YW5kIHRoZSBzY29wZSBvZiB0aGlzIGNoYW5nZS4KCk9rYXksIEkmIzM5O3ZlIGNoZWNrZWQgdGhlIGNvZGUsIGFuZCB5ZXMsIGBzdG1tYWNfZGF0YXBhdGhfdGVhcmRvd25gIGlzIGRlZmluaXRlbHkgY2FsbGVkIGluIGZ1bmN0aW9ucyBsaWtlIGBfX3N0bW1hY19yZWxlYXNlYCwgYHN0bW1hY194ZHBfcmVsZWFzZWAsIGFuZCBgc3RtbWFjX3N1c3BlbmRgLiBHb29kLiBBbmQgdGhlc2UgZnVuY3Rpb25zIGFyZSBjYWxsZWQgZm9yICphbGwqIHN0bW1hYyBkZXZpY2VzLCByZWdhcmRsZXNzIG9mIHRoZSBzcGVjaWZpYyBgY29yZV90eXBlYC4gVGhpcyBpcyB0aGUgY29uZmlybWF0aW9uIEkgbmVlZGVkOiBpdCBzZWVtcyB0aGUgZnVuY3Rpb24gKmRvZXMqIGFwcGx5IHRvIG11bHRpcGxlIGRldmljZXMgYW5kIGlzbiYjMzk7dCBzcGVjaWZpYyB0byBgRFdNQUNfQ09SRV9YR01BQ2AuIEkgbmVlZCB0byB2ZXJpZnkgdGhhdCBvbmNlIG1vcmUuIEJ1dCBpdCBsb29rcyBsaWtlIEkgdW5kZXJzdGFuZCB0aGUgZmxvdyBvZiBldmVudHMgaGVyZSBhbmQgdGhlIGltcGFjdCBvZiB0aGUgcGF0Y2guCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE0IDA2OjM3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX21haW4uYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDQyODAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNTAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7NDI4MDpcdFx0a2ZyZWUoZG1hX2NvbmYpO1xuNDI4MTpcdFx0cmV0dXJuIHJldDtcbjQyODI6XHR9XG40MjgzOlx0XG40Mjg0Olx0c3RhdGljIHZvaWQgX19zdG1tYWNfcmVsZWFzZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxuNDI4NTpcdHtcbjQyODY6XHRcdHN0cnVjdCBzdG1tYWNfcHJpdiAqcHJpdiA9IG5ldGRldl9wcml2KGRldik7XG40Mjg3Olx0XHR1OCBjaGFuO1xuNDI4ODpcdFxuNDI4OTpcdFx0c3RtbWFjX2Rpc2FibGVfYWxsX3F1ZXVlcyhwcml2KTtcbjQyOTA6XHRcbjQyOTE6XHRcdGZvciAoY2hhbiA9IDA7IGNoYW4gXHUwMDNjIHByaXYtXHUwMDNlcGxhdC1cdTAwM2V0eF9xdWV1ZXNfdG9fdXNlOyBjaGFuJiM0MzsmIzQzOylcbjQyOTI6XHRcdFx0aHJ0aW1lcl9jYW5jZWwoXHUwMDI2cHJpdi1cdTAwM2VkbWFfY29uZi50eF9xdWV1ZVtjaGFuXS50eHRpbWVyKTtcbjQyOTM6XHRcbjQyOTQ6XHRcdG5ldGlmX3R4X2Rpc2FibGUoZGV2KTtcbjQyOTU6XHRcbjQyOTY6XHRcdC8qIEZyZWUgdGhlIElSUSBsaW5lcyAqL1xuNDI5NzpcdFx0c3RtbWFjX2ZyZWVfaXJxKGRldiwgUkVRX0lSUV9FUlJfQUxMLCAwKTtcbjQyOTg6XHRcbjQyOTk6XHRcdC8qIEhhcyB0byBydW4gYmVmb3JlIG1hY19saW5rX2Rvd24oKSBkaXNhYmxlcyB0aGUgTUFDLiAqL1xuNDMwMDpcdFx0c3RtbWFjX2RhdGFwYXRoX3RlYXJkb3duKHByaXYpO1xuNDMwMTpcdFxuNDMwMjpcdFx0LyogU3RvcCBhbmQgZGlzY29ubmVjdCB0aGUgUEhZICovXG40MzAzOlx0XHRwaHlsaW5rX3N0b3AocHJpdi1cdTAwM2VwaHlsaW5rKTtcbjQzMDQ6XHRcbjQzMDU6XHRcdC8qIFJlbGVhc2UgYW5kIGZyZWUgdGhlIFJ4L1R4IHJlc291cmNlcyAqL1xuNDMwNjpcdFx0ZnJlZV9kbWFfZGVzY19yZXNvdXJjZXMocHJpdiwgXHUwMDI2cHJpdi1cdTAwM2VkbWFfY29uZik7XG40MzA3Olx0XG40MzA4Olx0XHRzdG1tYWNfcmVsZWFzZV9wdHAocHJpdik7XG40MzA5Olx0XG40MzEwOlx0XHRpZiAoc3RtbWFjX2ZwZV9zdXBwb3J0ZWQocHJpdikpXG40MzExOlx0XHRcdGV0aHRvb2xfbW1zdl9zdG9wKFx1MDAyNnByaXYtXHUwMDNlZnBlX2NmZy5tbXN2KTtcbjQzMTI6XHR9XG40MzEzOlx0XG40MzE0Olx0LyoqXG40MzE1Olx0ICogIHN0bW1hY19yZWxlYXNlIC0gY2xvc2UgZW50cnkgcG9pbnQgb2YgdGhlIGRyaXZlclxuNDMxNjpcdCAqICBAZGV2IDogZGV2aWNlIHBvaW50ZXIuXG40MzE3Olx0ICogIERlc2NyaXB0aW9uOlxuNDMxODpcdCAqICBUaGlzIGlzIHRoZSBzdG9wIGVudHJ5IHBvaW50IG9mIHRoZSBkcml2ZXIuXG40MzE5Olx0ICovXG40MzIwOlx0c3RhdGljIGludCBzdG1tYWNfcmVsZWFzZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxuNDMyMTpcdHtcbjQzMjI6XHRcdHN0cnVjdCBzdG1tYWNfcHJpdiAqcHJpdiA9IG5ldGRldl9wcml2KGRldik7XG40MzIzOlx0XG40MzI0Olx0XHQvKiBJZiB0aGUgUEhZIG9yIE1BQyBoYXMgV29MIGVuYWJsZWQsIHRoZW4gdGhlIFBIWSB3aWxsIG5vdCBiZVxuNDMyNTpcdFx0ICogc3VzcGVuZGVkIHdoZW4gcGh5bGlua19zdG9wKCkgaXMgY2FsbGVkIGJlbG93LiBTZXQgdGhlIFBIWVxuNDMyNjpcdFx0ICogdG8gaXRzIHNsb3dlc3Qgc3BlZWQgdG8gc2F2ZSBwb3dlci5cbjQzMjc6XHRcdCAqL1xuNDMyODpcdFx0aWYgKGRldmljZV9tYXlfd2FrZXVwKHByaXYtXHUwMDNlZGV2aWNlKSlcbjQzMjk6XHRcdFx0cGh5bGlua19zcGVlZF9kb3duKHByaXYtXHUwMDNlcGh5bGluaywgZmFsc2UpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNCAwNjozNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzNTIwNgoJCQkJCQkJb3V0cHV0OiAyMAoJCQkJCQkJdGhvdWdodHM6IDkyMgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIFNUTU1BQyBEYXRhcGF0aCBUZWFyZG93biBhbmQgU2V0dXAqKgoKT2theSwgc28gSSYjMzk7dmUgY29uZmlybWVkIHRoYXQgYF9fc3RtbWFjX3JlbGVhc2VgIGNhbGxzIGBzdG1tYWNfZGF0YXBhdGhfdGVhcmRvd24ocHJpdilgLiBMZXQmIzM5O3MgYnJlYWsgZG93biB3aGF0JiMzOTtzIGhhcHBlbmluZyBpbiBgc3RtbWFjX2RhdGFwYXRoX3RlYXJkb3duYC4gSXQgYXBwZWFycyB0byBiZSBhIG11bHRpLWNoYW5uZWwgRE1BIHNodXRkb3duIHNlcXVlbmNlLiBJdCBpdGVyYXRlcyB0aHJvdWdoIHRoZSBjb25maWd1cmVkIFRYIGFuZCBSWCBxdWV1ZXMsIHN0b3BwaW5nIHRoZSBETUEgY2hhbm5lbHMsIHdhaXRpbmcgZm9yIHRoZW0gdG8gcmVwb3J0IHRoZXkmIzM5O3JlIHN0b3BwZWQsIGRyYWluaW5nIE1UTCBxdWV1ZXMsIGRpc2FibGluZyB0aGUgTUFDLCBhbmQgdGhlbiByZXBlYXRpbmcgdGhlIHByb2Nlc3MgZm9yIFJYIGNoYW5uZWxzLgoKQSBrZXkgcG9pbnQgaXMgdGhlIGNvbmRpdGlvbmFsIGNoZWNrIGBwcml2LSZndDtody0mZ3Q7ZG1hLSZndDt0eF9kbWFfc3RvcHBlZGAuIEZvciBhIEdNQUM0LCB0aGlzIHdpbGwgYmUgTlVMTCwgYmVjYXVzZSBvbmx5IGBkd3hnbWFjMjEwX2RtYV9vcHNgIHByb3ZpZGVzIGl0LCBhbmQgdGhlIHdhaXQgaXMgc2tpcHBlZCwgd2hpY2ggaXMgcHJvYmFibHkgb2theS4KCk5vdyBoZXJlIGlzIHdoZXJlIHRoaW5ncyBnZXQgaW50ZXJlc3Rpbmc6IHRoZSBvcmRlciBvZiBvcGVyYXRpb25zIGluIHRoaXMgdGVhcmRvd24sIHNwZWNpZmljYWxseSB0aGUgcmVsYXRpdmUgcG9zaXRpb24gb2YgYHN0bW1hY19zdG9wX3R4X2RtYWAsIGBzdG1tYWNfbWFjX3NldGAsIGFuZCBgc3RtbWFjX3N0b3BfcnhfZG1hYCwgaGFzIGJlZW4gYWx0ZXJlZC4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlLgoKUHJldmlvdXNseSBpdCB3YXM6CgoxLiBgc3RtbWFjX3N0b3BfcnhfZG1hYAoyLiBgc3RtbWFjX3N0b3BfdHhfZG1hYAozLiBgc3RtbWFjX21hY19zZXQoLi4uLCBmYWxzZSlgCgpOb3cgaXQmIzM5O3M6CgoxLiBgc3RtbWFjX3N0b3BfdHhfZG1hYAoyLiBgc3RtbWFjX21hY19zZXQoLi4uLCBmYWxzZSlgCjMuIGBzdG1tYWNfc3RvcF9yeF9kbWFgCgpBbHNvLCBpbiBgc3RtbWFjX2h3X3NldHVwYCBhbmQgYHN0bW1hY194ZHBfb3BlbmAsIHRoZSBvcmRlciBvZiBgc3RtbWFjX21hY19zZXQoLi4uLCB0cnVlKWAgYW5kIGBzdG1tYWNfc3RhcnRfYWxsX2RtYWAgaGFzIGJlZW4gc3dhcHBlZDoKClByZXZpb3VzbHk6CgoxLiBgc3RtbWFjX21hY19zZXQoLi4uLCB0cnVlKWAKMi4gYHN0bW1hY19zdGFydF9hbGxfZG1hYAoKTm93OgoKMS4gYHN0bW1hY19zdGFydF9hbGxfZG1hYAoyLiBgc3RtbWFjX21hY19zZXQoLi4uLCB0cnVlKWAKClNpbmNlIHRoaXMgY2hhbmdlIGltcGFjdHMgdGhlIGJlaGF2aW9yIG9mIGFsbCBzdG1tYWMgZGV2aWNlcywgYW5kIGVzcGVjaWFsbHkgdGhvc2UgYWNjZXNzaWJsZSB0aHJvdWdoIFBDSSBpbiBzb21ldGhpbmcgbGlrZSBRRU1VLCB0aGlzIHdhcnJhbnRzIGltbWVkaWF0ZSBmdXp6aW5nLiBJdCBoYXMgYSByZWFsIHBvdGVudGlhbCB0byBicmVhayB0aGluZ3MgYW5kIGV4cG9zZSBhbnkgdGltaW5nIG9yIHJlc291cmNlIG1hbmFnZW1lbnQgaXNzdWVzLiBJdCBpcyBpbXBvcnRhbnQgdG8gY29uZmlybSB0aGUgY29uZmlnIG9wdGlvbnMsIGBDT05GSUdfU1RNTUFDX0VUSGAgYW5kIGBDT05GSUdfU1RNTUFDX1BDSWAuIEkgd2FudCB0byBzZWUgaWYgdGhlIGZ1enppbmcgY2FuIGV4cG9zZSBhbnkgaXNzdWVzIHRoYXQgbWF5IGFyaXNlIGZyb20gdGhpcyByZW9yZGVyaW5nIG9mIGNhbGxzLCBvciBldmVuIGZyb20gdGhlIHNraXBwZWQgd2FpdC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTQgMDY6Mzc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIFNUTU1BQ19FVEgmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvS2NvbmZpZy0xLSMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvS2NvbmZpZzoyOmNvbmZpZyBTVE1NQUNfRVRIXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9LY29uZmlnLTMtXHR0cmlzdGF0ZSBcJiMzNDtTVE1pY3JvZWxlY3Ryb25pY3MgTXVsdGktR2lnYWJpdCBFdGhlcm5ldCBkcml2ZXJcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTQgMDY6Mzc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzY4MzcKCQkJCQkJCW91dHB1dDogMjAKCQkJCQkJCXRob3VnaHRzOiAxMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipBbmFseXppbmcgdGhlIFNUTU1BQyBQQ0kgQ29uZmlndXJhdGlvbioqCgpPa2F5LCBzbyB0aGUgaW5pdGlhbCB0aG91Z2h0IGlzLCBuYXR1cmFsbHksIHRvIHZlcmlmeSB0aGUgc3RhdGUgb2YgYENPTkZJR19TVE1NQUNfUENJYC4gTXkgaW5zdGluY3QgaXMgdG8gcXVpY2tseSBhc3Nlc3MgaXRzIGN1cnJlbnQgc2V0dGluZywgdW5kZXJzdGFuZGluZyB0aGF0IHRoaXMgZmxhZyBkaXJlY3RseSBnb3Zlcm5zIHRoZSBpbmNsdXNpb24gb2YgdGhlIFN5bm9wc3lzIFNUTU1BQyBFdGhlcm5ldCBkcml2ZXIgZm9yIFBDSS1iYXNlZCBuZXR3b3JrIGludGVyZmFjZXMuIEkmIzM5O20gbGlrZWx5IGdlYXJpbmcgdXAgZm9yIGEgZGVlcGVyIGRpdmUgaW50byBrZXJuZWwgY29uZmlndXJhdGlvbiwgZGVidWdnaW5nIGEgbmV0d29yayBpc3N1ZSwgb3IgcGVyaGFwcyBldmVuIHByZXBhcmluZyB0byBlbmFibGUgU1RNTUFDIG9uIGEgbmV3IGhhcmR3YXJlIHBsYXRmb3JtLiBUaGUgaW1tZWRpYXRlIHF1ZXN0aW9uIGluIG15IG1pbmQgaXM6IGlzIGl0IGVuYWJsZWQgYXMgYSBtb2R1bGUgKE0pLCBidWlsdC1pbiAoWSksIG9yIGRpc2FibGVkIChOKT8gVGhhdCYjMzk7cyB0aGUgZmlyc3QgZGF0YSBwb2ludCBJIG5lZWQgdG8gZXN0YWJsaXNoLiBJIG5lZWQgdG8ga25vdyB3aGVyZSBJIGFtIHdpdGggdGhpcyBtb2R1bGUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE0IDA2OjM3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBTVE1NQUNfUENJJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL0tjb25maWc9Mzk4PWNvbmZpZyBEV01BQ19NT1RPUkNPTU1cbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9LY29uZmlnLTQwNi1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL0tjb25maWc6NDA3OmNvbmZpZyBTVE1NQUNfUENJXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9LY29uZmlnLTQwOC1cdHRyaXN0YXRlIFwmIzM0O1NUTU1BQyBQQ0kgYnVzIHN1cHBvcnRcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTQgMDY6Mzc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzcxNjgKCQkJCQkJCW91dHB1dDogNDQKCQkJCQkJCXRob3VnaHRzOiAxNAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkFuYWx5emluZyB0aGUgU1RNTUFDX1BDSSBEZXBlbmRlbmNpZXMqKgoKQWxyaWdodCwgbGV0JiMzOTtzIGRpdmUgaW4uIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzLCAmIzM0O09rYXksIGBTVE1NQUNfUENJYC4uLiB3aGF0JiMzOTtzIGl0IHRpZWQgdG8/JiMzNDsgSSBuZWVkIHRvIHF1aWNrbHkgbWFwIG91dCB0aGUgZGVwZW5kZW5jaWVzLiBJJiMzOTttIGdvaW5nIHRvIG1lbnRhbGx5IHJ1biB0aHJvdWdoIHRoZSBsaWtlbHkgY2FuZGlkYXRlczogUENJIGJ1cyBkcml2ZXIsIG9idmlvdXNseSwgYnV0IHdoYXQgc3BlY2lmaWMgUENJIHJlZ2lzdGVycyBpcyBpdCBsZXZlcmFnaW5nPyBBcmUgdGhlcmUgYW55IHBsYXRmb3JtLXNwZWNpZmljIHF1aXJrcyBvciB2YXJpYXRpb25zIGRlcGVuZGluZyBvbiB0aGUgc3lzdGVtLW9uLWEtY2hpcCAoU29DKSBpdCYjMzk7cyBydW5uaW5nIG9uPyBJIGhhdmUgdG8gbG9vayBmb3IgaW5kaXJlY3QgZGVwZW5kZW5jaWVzIGFzIHdlbGwgLSBETUEgZW5naW5lcywgaW50ZXJydXB0IGNvbnRyb2xsZXJzLCBjbG9jayBtYW5hZ2VtZW50LiBBcmUgd2UgZGVhbGluZyB3aXRoIGFueSBzaGFyZWQgcmVzb3VyY2VzIHRoYXQgY291bGQgY2F1c2UgY29uZmxpY3RzPyBJJiMzOTtsbCBhbHNvIGJlIG1pbmRmdWwgb2YgcG90ZW50aWFsIGludGVyYWN0aW9ucyB3aXRoIG90aGVyIG5ldHdvcmtpbmcgZHJpdmVycyBvbiB0aGUgc3lzdGVtLiBJcyB0aGVyZSBhbiBpbnRlcmFjdGlvbiB0aGF0IGNvdWxkIG9jY3VyIHRoYXQgY291bGQgYWZmZWN0IG90aGVyIGRyaXZlcnMgb24gdGhlIHN5c3RlbT8KCkkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBpbXBsaWNhdGlvbnMgb2YgYW55IGRlcGVuZGVuY3kgY2hhbmdlcyBpZiB0aGVyZSBhcmUgYW55LCBhbmQgY29uc2lkZXIgdGhpcyBpbiBteSBhbmFseXNpcy4gV2hhdCBrZXJuZWwgdmVyc2lvbnMgaXMgdGhpcyBtb2R1bGUgZGVzaWduZWQgdG8gd29yayB3aXRoPyBBbnkga25vd24gY29tcGF0aWJpbGl0eSBpc3N1ZXM/IEkgaGF2ZSB0byBiZSBhd2FyZSBvZiB0aGUgb3ZlcmFsbCBzeXN0ZW0gY29udGV4dCB0byBwcmV2ZW50IGFueSBpc3N1ZXMuIExldCYjMzk7cyBtYWtlIHN1cmUgd2UgaGF2ZSBhIHNvbGlkIHVuZGVyc3RhbmRpbmcgb2YgdGhlIGltcGxpY2F0aW9ucyBvZiBhbnkgZGVwZW5kZW5jaWVzIG9uIHRoZSBzeXN0ZW0uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE0IDA2OjM3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvS2NvbmZpZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDQwMCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgNDAwOlx0XHRkZXBlbmRzIG9uIFBDSVxuIDQwMTpcdFx0c2VsZWN0IE1PVE9SQ09NTV9QSFlcbiA0MDI6XHRcdHNlbGVjdCBTVE1NQUNfTElCUENJXG4gNDAzOlx0XHRoZWxwXG4gNDA0Olx0XHQgIFRoaXMgZW5hYmxlcyBnbHVlIGRyaXZlciBmb3IgTW90b3Jjb21tIERXTUFDLWJhc2VkIFBDSSBFdGhlcm5ldFxuIDQwNTpcdFx0ICBjb250cm9sbGVycy4gQ3VycmVudGx5IG9ubHkgWVQ2ODAxIGlzIHN1cHBvcnRlZC5cbiA0MDY6XHRcbiA0MDc6XHRjb25maWcgU1RNTUFDX1BDSVxuIDQwODpcdFx0dHJpc3RhdGUgXCYjMzQ7U1RNTUFDIFBDSSBidXMgc3VwcG9ydFwmIzM0O1xuIDQwOTpcdFx0ZGVwZW5kcyBvbiBQQ0lcbiA0MTA6XHRcdGRlcGVuZHMgb24gQ09NTU9OX0NMS1xuIDQxMTpcdFx0c2VsZWN0IFNUTU1BQ19MSUJQQ0lcbiA0MTI6XHRcdGhlbHBcbiA0MTM6XHRcdCAgVGhpcyBzZWxlY3RzIHRoZSBwbGF0Zm9ybSBzcGVjaWZpYyBidXMgc3VwcG9ydCBmb3IgdGhlIHN0bW1hYyBkcml2ZXIuXG4gNDE0Olx0XHQgIFRoaXMgZHJpdmVyIHdhcyB0ZXN0ZWQgb24gWExJTlggWEMyVjMwMDAgRkYxMTUyQU1UMDIyMVxuIDQxNTpcdFx0ICBEMTIxNTk5NEEgVklSVEVYIEZQR0EgYm9hcmQgYW5kIFNOUFMgUW9TIElQSyBQcm90b3R5cGluZyBLaXQuXG4gNDE2Olx0XG4gNDE3Olx0XHQgIElmIHlvdSBoYXZlIGEgY29udHJvbGxlciB3aXRoIHRoaXMgaW50ZXJmYWNlLCBzYXkgWSBvciBNIGhlcmUuXG4gNDE4Olx0XG4gNDE5Olx0XHQgIElmIHVuc3VyZSwgc2F5IE4uXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE0IDA2OjM3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDM3ODExCgkJCQkJCQlvdXRwdXQ6IDQyCgkJCQkJCQl0aG91Z2h0czogNTcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSBkZXBlbmRlbmNpZXMsIGZyb20gYW4gZXhwZXJ0JiMzOTtzIHBlcnNwZWN0aXZlOgoKKipBbmFseXppbmcgU1RNTUFDIERyaXZlciBEZXBlbmRlbmNpZXMqKgoKQWxyaWdodCwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gTXkgaW5pdGlhbCBvYnNlcnZhdGlvbiBpcyB0aGF0IGBTVE1NQUNfUENJYCByZWxpZXMgb24gYm90aCBgUENJYCBhbmQgYENPTU1PTl9DTEtgLiBUaGF0JiMzOTtzIHN0YW5kYXJkIGZvciBhIFBDSS1iYXNlZCBFdGhlcm5ldCBjb250cm9sbGVyIOKAkyBuZWVkcyB0aGUgUENJIGluZnJhc3RydWN0dXJlIHRvIGV4aXN0IGFuZCBjbG9jayBtYW5hZ2VtZW50IHRvIGZ1bmN0aW9uIGNvcnJlY3RseS4gTm8gc3VycHJpc2VzIHRoZXJlLgoKTmV4dCwgd2Ugc2VlIHRoYXQgYFNUTU1BQ19FVEhgIGRlcGVuZHMgb24gYEhBU19JT01FTWAgYW5kIGBIQVNfRE1BYC4gVGhpcyBpcyB3aGF0IEkmIzM5O2QgZXhwZWN0LiBgSEFTX0lPTUVNYCBtZWFucyBpdCBjYW4gYWNjZXNzIG1lbW9yeS1tYXBwZWQgSS9PLCB3aGljaCBpcyBjcnVjaWFsIGZvciBpbnRlcmFjdGluZyB3aXRoIHRoZSBFdGhlcm5ldCBjb250cm9sbGVyJiMzOTtzIHJlZ2lzdGVycy4gQW5kIGBIQVNfRE1BYCBpbmRpY2F0ZXMgaXQgcmVxdWlyZXMgRE1BIChEaXJlY3QgTWVtb3J5IEFjY2Vzcykgc3VwcG9ydC4gQSBtb2Rlcm4gRXRoZXJuZXQgY29udHJvbGxlciAqaGFzKiB0byB1c2UgRE1BIHRvIGJlIHBlcmZvcm1hbnQuIEl0IHdvdWxkbiYjMzk7dCBiZSB2ZXJ5IHVzZWZ1bCBpZiBpdCBkaWRuJiMzOTt0LgoKTm93LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGlzIGBTVE1NQUNfRVRIYCBkZXBlbmRlbmN5IGJldHRlci4gSSB3YW50IHRvIGRpdmUgYSBsaXR0bGUgZGVlcGVyIHRvIGNvbmZpcm0gdGhhdCBJJiMzOTttIHNlZWluZyBldmVyeXRoaW5nIGNvcnJlY3RseS4gTGV0IG1lIHNlZSB3aGF0IHNwZWNpZmljYWxseSBkZXBlbmRzIG9uICp0aGlzKiBkcml2ZXIuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE0IDA2OjM3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvS2NvbmZpZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDEsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7ICAgMTpcdCMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxuICAgMjpcdGNvbmZpZyBTVE1NQUNfRVRIXG4gICAzOlx0XHR0cmlzdGF0ZSBcJiMzNDtTVE1pY3JvZWxlY3Ryb25pY3MgTXVsdGktR2lnYWJpdCBFdGhlcm5ldCBkcml2ZXJcJiMzNDtcbiAgIDQ6XHRcdGRlcGVuZHMgb24gSEFTX0lPTUVNIFx1MDAyNlx1MDAyNiBIQVNfRE1BXG4gICA1Olx0XHRkZXBlbmRzIG9uIFBUUF8xNTg4X0NMT0NLX09QVElPTkFMXG4gICA2Olx0XHRkZXBlbmRzIG9uIEVUSFRPT0xfTkVUTElOS1xuICAgNzpcdFx0c2VsZWN0IE1JSVxuICAgODpcdFx0c2VsZWN0IFBDU19YUENTXG4gICA5Olx0XHRzZWxlY3QgUEFHRV9QT09MXG4gIDEwOlx0XHRzZWxlY3QgUEhZTElOS1xuICAxMTpcdFx0c2VsZWN0IENSQzMyXG4gIDEyOlx0XHRzZWxlY3QgUkVTRVRfQ09OVFJPTExFUlxuICAxMzpcdFx0c2VsZWN0IE5FVF9ERVZMSU5LXG4gIDE0Olx0XHRoZWxwXG4gIDE1Olx0XHQgIFRoaXMgaXMgdGhlIGRyaXZlciBmb3IgdGhlIEV0aGVybmV0IElQcyBidWlsdCBhcm91bmQgYVxuICAxNjpcdFx0ICBTeW5vcHN5cyBJUCBDb3JlLlxuICAxNzpcdFxuICAxODpcdGlmIFNUTU1BQ19FVEhcbiAgMTk6XHRcbiAgMjA6XHRjb25maWcgU1RNTUFDX1NFTEZURVNUU1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNCAwNjozNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzODQxNAoJCQkJCQkJb3V0cHV0OiAyMgoJCQkJCQkJdGhvdWdodHM6IDU0NQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipGdXp6aW5nIFN0cmF0ZWd5IGZvciBTVE1NQUMgRHJpdmVyKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIFNUTU1BQyBkcml2ZXIgcGF0Y2gsIGFuZCBteSBpbml0aWFsIHRob3VnaHRzIGFyZSBhcm91bmQgY29uZmlndXJhdGlvbiBvcHRpb25zLiBgU1RNTUFDX0VUSGAgYW5kIGBTVE1NQUNfUENJYCBzZWVtIHRvIGJlIHRoZSBwcmltYXJ5IGNvbmZpZ3VyYXRpb25zIGluIHRoaXMgY29udGV4dC4gSSYjMzk7bGwgbmVlZCB0byByZW1lbWJlciB0aG9zZS4gV2hhdCBhYm91dCB0aGUgb3RoZXIgRFdNQUMgY29uZmlndXJhdGlvbnMg4oCTIGBEV01BQ19JTlRFTGAsIGBEV01BQ19MT09OR1NPTmAsIGFuZCBgRFdNQUNfTU9UT1JDT01NYD8gRm9yIG5vdywgSSYjMzk7bGwganVzdCBmb2N1cyBvbiBpbmNsdWRpbmcgYFNUTU1BQ19QQ0lgIGFuZCBgU1RNTUFDX0VUSGAsIGFuZCByZXZpc2l0IHRob3NlIGlmIG5lY2Vzc2FyeS4KCk5vdywgbGV0JiMzOTtzIGdldCBkb3duIHRvIHRoZSBmdXp6aW5nIHRhcmdldHMuIFRoaXMgcGF0Y2ggbW9kaWZpZXMgc2V2ZXJhbCBmdW5jdGlvbnMuIEkgbmVlZCB0byBmaWd1cmUgb3V0IHdoaWNoIG9uZXMgYXJlIGNyaXRpY2FsIGFuZCB3aGVyZSB0aGUgYmVzdCBlbnRyeSBwb2ludHMgYXJlIGZvciBtYXhpbXVtIGltcGFjdC4gVGhlIHBhdGNoIHRvdWNoZXMgYHN0bW1hY19kYXRhcGF0aF90ZWFyZG93bmAsIGBzdG1tYWNfaHdfc2V0dXBgLCBgc3RtbWFjX3hkcF9vcGVuYCwgYGR3eGdtYWMyX3R4X2RtYV9zdG9wcGVkYCwgYGR3eGdtYWMyX3R4X210bF9kcmFpbmAsIGBkd3hnbWFjMl9yeF9tdGxfZHJhaW5gLCBhbmQgYGR3eGdtYWMyX3J4X2RtYV9zdG9wcGVkYC4KCkkgc2VlIHRoYXQgYHN0bW1hY19kYXRhcGF0aF90ZWFyZG93bmAgaXMgYSBzdGF0aWMgZnVuY3Rpb24sIGJ1dCBpdCBpcyBjYWxsZWQgYnkgYF9fc3RtbWFjX3JlbGVhc2VgLCBgc3RtbWFjX3hkcF9yZWxlYXNlYCwgYW5kIGBzdG1tYWNfc3VzcGVuZGAuIEFsc28sIGBzdG1tYWNfaHdfc2V0dXBgIGlzIGFsc28gaW1wb3J0YW50LCBhcyBpdCBnZXRzIGNhbGxlZCBieSBgc3RtbWFjX29wZW5gIGFuZCBgc3RtbWFjX3Jlc3VtZWAuCgpUaGUga2V5IGVudHJ5IHBvaW50cyBhcHBlYXIgdG8gYmUgdGhlIG5ldF9kZXZpY2Vfb3BzIGZ1bmN0aW9ucyBgLm5kb19vcGVuYCBhbmQgYC5uZG9fc3RvcGAsIHdoaWNoIGNvcnJlc3BvbmQgdG8gYHN0bW1hY19vcGVuYCBhbmQgYHN0bW1hY19yZWxlYXNlYCByZXNwZWN0aXZlbHkuIEFsc28sIHRoZSBkZXZpY2UgUE0gb3BzIGZvciBgc3RtbWFjX3N1c3BlbmRgIGFuZCBgc3RtbWFjX3Jlc3VtZWAgbmVlZCBhIGRlZXBlciBkaXZlLiBBbmQgb2YgY291cnNlLCB0aGUgWERQIHNldHVwIGZ1bmN0aW9uczogYHN0bW1hY194ZHBfb3BlbmAgYW5kIGBzdG1tYWNfeGRwX3JlbGVhc2VgLgoKU28sIGl0IGxvb2tzIGxpa2UgYHN0bW1hY19vcGVuYCwgYHN0bW1hY19yZWxlYXNlYCwgYHN0bW1hY19zdXNwZW5kYCwgYHN0bW1hY19yZXN1bWVgLCBgc3RtbWFjX3hkcF9vcGVuYCwgYW5kIGBzdG1tYWNfeGRwX3JlbGVhc2VgIGFyZSB0aGUgY3J1Y2lhbCBmdW5jdGlvbnMgZm9yIGludGVuc2l2ZSBmdXp6aW5nLgoKV2FpdCwgbGV0IG1lIGRvdWJsZS1jaGVjayBzb21ldGhpbmcuIGBzdG1tYWNfZGF0YXBhdGhfdGVhcmRvd25gIGlzIHN0YXRpYywgeWVzLCBidXQgaXTigJlzIGNhbGxlZCBmcm9tIGBfX3N0bW1hY19yZWxlYXNlYCwgd2hpY2ggaXMgdGhlbiBjYWxsZWQgZnJvbSBgc3RtbWFjX3JlbGVhc2VgLiBBbmQgYHN0bW1hY19vcGVuYCBjYWxscyBgc3RtbWFjX2h3X3NldHVwYC4gU28gaXQgc2VlbXMgYHN0bW1hY19vcGVuYCBhbmQgYHN0bW1hY19yZWxlYXNlYCBhcmUgc3RpbGwgdGhlIHByaW1hcnkgZW50cnkgcG9pbnRzLiBBbG9uZyB3aXRoIGBzdG1tYWNfeGRwX29wZW5gIGFuZCBgc3RtbWFjX3hkcF9yZWxlYXNlYCwgdGhleSBhcmUgdGhlIG1haW4gZm9jdXMuIEkmIzM5O2xsIG5lZWQgdG8gcXVpY2tseSBjaGVjayBpZiBgc3RtbWFjX3hkcF9vcGVuYCBpdHNlbGYgaXMgc3RhdGljIG9yIG5vdC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTQgMDY6Mzc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7c3RtbWFjX3hkcF9vcGVuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hYy5oPTQwNz12b2lkIHN0bW1hY19wdHBfdW5yZWdpc3RlcihzdHJ1Y3Qgc3RtbWFjX3ByaXYgKnByaXYpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjLmg6NDA4OmludCBzdG1tYWNfeGRwX29wZW4oc3RydWN0IG5ldF9kZXZpY2UgKmRldik7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWMuaC00MDktdm9pZCBzdG1tYWNfeGRwX3JlbGVhc2Uoc3RydWN0IG5ldF9kZXZpY2UgKmRldik7XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX21haW4uYz03MTM2PXZvaWQgc3RtbWFjX3hkcF9yZWxlYXNlKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX21haW4uYy03MTY1LVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX21haW4uYzo3MTY2OmludCBzdG1tYWNfeGRwX29wZW4oc3RydWN0IG5ldF9kZXZpY2UgKmRldilcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19tYWluLmMtNzE2Ny17XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX3hkcC5jPTEwMj1pbnQgc3RtbWFjX3hkcF9zZXRfcHJvZyhzdHJ1Y3Qgc3RtbWFjX3ByaXYgKnByaXYsIHN0cnVjdCBicGZfcHJvZyAqcHJvZyxcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfeGRwLmMtMTM0LVx0aWYgKGlmX3J1bm5pbmcgXHUwMDI2XHUwMDI2IG5lZWRfdXBkYXRlKVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX3hkcC5jOjEzNTpcdFx0c3RtbWFjX3hkcF9vcGVuKGRldik7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfeGRwLmMtMTM2LVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNCAwNjozNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0MDExMAoJCQkJCQkJb3V0cHV0OiAyMAoJCQkJCQkJdGhvdWdodHM6IDUxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgZnVuY3Rpb25zLCB0aGlua2luZyB0aHJvdWdoIGl0IGFzIHlvdSBhc2tlZDoKCioqTXkgUGVyc3BlY3RpdmUgb24gdGhlIGBzdG1tYWNgIFhEUCBhbmQgUG93ZXIgTWFuYWdlbWVudCBGdW5jdGlvbnMqKgoKUmlnaHQsIGxldCBtZSBzZWUuLi5zbywgSSYjMzk7bSBub3RpbmcgdGhhdCBgc3RtbWFjX3hkcF9vcGVuYCBhbmQgYHN0bW1hY194ZHBfcmVsZWFzZWAsIHRob3NlIGFyZSBkZWZpbml0ZWx5ICpub3QqIGRlY2xhcmVkIGFzIGBzdGF0aWNgLiBHb29kLCB0aGF0IG1ha2VzIHNlbnNlIGZvciB0aGUgWERQIGZ1bmN0aW9uYWxpdHkuIFRoZXkmIzM5O3JlIGxpa2VseSBtZWFudCB0byBiZSBjYWxsYWJsZSBmcm9tIG91dHNpZGUgdGhlIGNvcmUgYHN0bW1hY2AgbW9kdWxlLCBwcmVzdW1hYmx5IGJ5IFhEUCBwcm9ncmFtcyBvciBzb21lIG90aGVyIGV4dGVybmFsIGNvbXBvbmVudCB0aGF0IG5lZWRzIHRvIG1hbmFnZSB0aGUgaW50ZXJhY3Rpb24gd2l0aCB0aGUgZHJpdmVyIGluIHRoYXQgY29udGV4dC4gV2UgbmVlZCB0aGF0IGV4dGVybmFsIGxpbmthZ2UuCgpBbmQgdGhlbiBsb29raW5nIGF0IHRoZSBzdXNwZW5kIGFuZCByZXN1bWUgcm91dGluZXMsIGBzdG1tYWNfc3VzcGVuZGAgYW5kIGBzdG1tYWNfcmVzdW1lYD8gQWxzbyBub24tc3RhdGljLiBBZ2FpbiwgYXMgZXhwZWN0ZWQuIFRob3NlIGFyZSBjcml0aWNhbCBlbnRyeSBwb2ludHMgZm9yIHRoZSBzeXN0ZW0gcG93ZXIgbWFuYWdlbWVudCBmcmFtZXdvcmsuIFRoZSBwb3dlciBtYW5hZ2VtZW50IGNvZGUsIG9yIHBlcmhhcHMgZXZlbiBoaWdoZXItbGV2ZWwgZHJpdmVycywgbmVlZHMgdG8gYmUgYWJsZSB0byBjYWxsIHRoZXNlIGZ1bmN0aW9ucyBkaXJlY3RseSB0byBjb250cm9sIHRoZSBwb3dlciBzdGF0ZSBvZiB0aGUgU1RNTUFDIGRldmljZS4gSWYgdGhleSAqd2VyZSogc3RhdGljLCB3ZSYjMzk7ZCBoYXZlIGEgcmVhbCBwcm9ibGVtIGludGVncmF0aW5nIHdpdGggdGhlIHdpZGVyIHN5c3RlbS4gVGhhdCB3b3VsZCBtYWtlIGZvciBhIGJyaXR0bGUgZHJpdmVyLiBXZSBjYW4mIzM5O3QgaGF2ZSB0aGF0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNCAwNjozODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtzdG1tYWNfc3VzcGVuZCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy10ZWdyYS5jPTU3PXN0YXRpYyBpbnQgX19tYXliZV91bnVzZWQgdGVncmFfbWdiZV9zdXNwZW5kKHN0cnVjdCBkZXZpY2UgKmRldilcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy10ZWdyYS5jLTYxLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtdGVncmEuYzo2MjpcdGVyciA9IHN0bW1hY19zdXNwZW5kKGRldik7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy10ZWdyYS5jLTYzLVx0aWYgKGVycilcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWMuaD00MTE9aW50IHN0bW1hY19yZXN1bWUoc3RydWN0IGRldmljZSAqZGV2KTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hYy5oOjQxMjppbnQgc3RtbWFjX3N1c3BlbmQoc3RydWN0IGRldmljZSAqZGV2KTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hYy5oLTQxMy12b2lkIHN0bW1hY19kdnJfcmVtb3ZlKHN0cnVjdCBkZXZpY2UgKmRldik7XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX21haW4uYz04MjA0PUVYUE9SVF9TWU1CT0xfR1BMKHN0bW1hY19kdnJfcmVtb3ZlKTtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfbWFpbi5jLTgyMDYtLyoqXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfbWFpbi5jOjgyMDc6ICogc3RtbWFjX3N1c3BlbmQgLSBzdXNwZW5kIGNhbGxiYWNrXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfbWFpbi5jLTgyMDgtICogQGRldjogZGV2aWNlIHBvaW50ZXJcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfbWFpbi5jLTgyMTItICovXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfbWFpbi5jOjgyMTM6aW50IHN0bW1hY19zdXNwZW5kKHN0cnVjdCBkZXZpY2UgKmRldilcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19tYWluLmMtODIxNC17XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX21haW4uYy04MjYyLX1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19tYWluLmM6ODI2MzpFWFBPUlRfU1lNQk9MX0dQTChzdG1tYWNfc3VzcGVuZCk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfbWFpbi5jLTgyNjQtXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX21haW4uYz04Mzk0PUVYUE9SVF9TWU1CT0xfR1BMKHN0bW1hY19yZXN1bWUpO1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19tYWluLmMtODM5Ni0vKiBUaGlzIGlzIG5vdCB0aGUgc2FtZSBhcyBFWFBPUlRfR1BMX1NJTVBMRV9ERVZfUE1fT1BTKCkgd2hlbiBDT05GSUdfUE09biAqL1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX21haW4uYzo4Mzk3OkRFRklORV9TSU1QTEVfREVWX1BNX09QUyhzdG1tYWNfc2ltcGxlX3BtX29wcywgc3RtbWFjX3N1c3BlbmQsIHN0bW1hY19yZXN1bWUpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX21haW4uYy04Mzk4LUVYUE9SVF9TWU1CT0xfR1BMKHN0bW1hY19zaW1wbGVfcG1fb3BzKTtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfcGxhdGZvcm0uYz0xMDAxPWNvbnN0IHN0cnVjdCBkZXZfcG1fb3BzIHN0bW1hY19wbHRmcl9wbV9vcHMgPSB7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfcGxhdGZvcm0uYzoxMDAyOlx0U0VUX1NZU1RFTV9TTEVFUF9QTV9PUFMoc3RtbWFjX3N1c3BlbmQsIHN0bW1hY19yZXN1bWUpXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfcGxhdGZvcm0uYy0xMDAzLVx0U0VUX1JVTlRJTUVfUE1fT1BTKHN0bW1hY19ydW50aW1lX3N1c3BlbmQsIHN0bW1hY19ydW50aW1lX3Jlc3VtZSwgTlVMTClcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTQgMDY6Mzg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDE0MjgKCQkJCQkJCW91dHB1dDogMTkKCQkJCQkJCXRob3VnaHRzOiA1OQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0aGlua2luZyBwcm9jZXNzOgoKKipFeGFtaW5pbmcgdGhlIFNUTU1BQyBEcml2ZXImIzM5O3MgU3VzcGVuZC9SZXN1bWUgTG9naWMqKgoKT2theSwgc28gSSBzZWUgdGhhdCBgc3RtbWFjX3N1c3BlbmRgIGFuZCBgc3RtbWFjX3Jlc3VtZWAgYXJlIGV4cGxpY2l0bHkgZXhwb3J0ZWQuIFRoYXQmIzM5O3MgZ29vZCwgc3VnZ2VzdHMgdGhleSYjMzk7cmUgZGVzaWduZWQgZm9yIGV4dGVybmFsIGludGVyYWN0aW9uLCBwcm9iYWJseSBmb3IgcG93ZXIgbWFuYWdlbWVudCwgd2hpY2ggaXMgd2hhdCBJJiMzOTtkIGV4cGVjdC4gSG93ZXZlciwgYHN0bW1hY19vcGVuYCBhbmQgYHN0bW1hY19yZWxlYXNlYCBhcmUgZGVmaW5lZCB3aXRoaW4gYHN0bW1hY19tYWluLmNgLCBhbmQgdGhhdCByYWlzZXMgYSBmbGFnLiBXYWl0LCBob2xkIG9uIGEgc2Vjb25kLiBJIG5lZWQgdG8gYmUgKnN1cmUqIGFib3V0IHRoZWlyIHNjb3BlLiBMZXQgbWUgcXVpY2tseSBkb3VibGUtY2hlY2sgaWYgdGhvc2UgZnVuY3Rpb25zIGFyZSBhY3R1YWxseSBkZWNsYXJlZCBhcyBgc3RhdGljYCB3aXRoaW4gdGhhdCBmaWxlLCBiZWNhdXNlIHRoYXQgd291bGQgY29uZmlybSB0aGV5JiMzOTtyZSBvbmx5IGludGVuZGVkIGZvciBpbnRlcm5hbCB1c2Ugd2l0aGluIHRoZSBkcml2ZXImIzM5O3MgY29yZSBtb2R1bGUuIEdvdHRhIG1ha2Ugc3VyZSB0aG9zZSBvcGVuL3JlbGVhc2UgZnVuY3Rpb25zIGFyZW4mIzM5O3QgaW5hZHZlcnRlbnRseSBiZWluZyBleHBvc2VkLCB0aGF0JiMzOTtzIGltcG9ydGFudCBmb3IgdGhlIG92ZXJhbGwgYXJjaGl0ZWN0dXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNCAwNjozODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtzdG1tYWNfb3BlbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfbWFpbi5jPTQxMDA9c3RtbWFjX3NldHVwX2RtYV9kZXNjKHN0cnVjdCBzdG1tYWNfcHJpdiAqcHJpdiwgdW5zaWduZWQgaW50IG10dSlcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfbWFpbi5jLTQxNjUtLyoqXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfbWFpbi5jOjQxNjY6ICogIF9fc3RtbWFjX29wZW4gLSBvcGVuIGVudHJ5IHBvaW50IG9mIHRoZSBkcml2ZXJcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19tYWluLmMtNDE2Ny0gKiAgQGRldiA6IHBvaW50ZXIgdG8gdGhlIGRldmljZSBzdHJ1Y3R1cmUuXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX21haW4uYy00MTc0LSAqL1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX21haW4uYzo0MTc1OnN0YXRpYyBpbnQgX19zdG1tYWNfb3BlbihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX21haW4uYy00MTc2LVx0XHRcdCBzdHJ1Y3Qgc3RtbWFjX2RtYV9jb25mICpkbWFfY29uZilcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfbWFpbi5jLTQyMzItXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfbWFpbi5jOjQyMzM6c3RhdGljIGludCBzdG1tYWNfb3BlbihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX21haW4uYy00MjM0LXtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfbWFpbi5jLTQyNjAtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfbWFpbi5jOjQyNjE6XHRyZXQgPSBfX3N0bW1hY19vcGVuKGRldiwgZG1hX2NvbmYpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX21haW4uYy00MjYyLVx0aWYgKHJldClcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfbWFpbi5jPTYxNTU9c3RhdGljIGludCBzdG1tYWNfY2hhbmdlX210dShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBpbnQgbmV3X210dSlcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfbWFpbi5jLTYxOTAtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfbWFpbi5jOjYxOTE6XHRcdHJldCA9IF9fc3RtbWFjX29wZW4oZGV2LCBkbWFfY29uZik7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfbWFpbi5jLTYxOTItXHRcdGlmIChyZXQpIHtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfbWFpbi5jPTczNDc9c3RhdGljIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlX29wcyBzdG1tYWNfbmV0ZGV2X29wcyA9IHtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19tYWluLmM6NzM0ODpcdC5uZG9fb3BlbiA9IHN0bW1hY19vcGVuLFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX21haW4uYy03MzQ5LVx0Lm5kb19zdGFydF94bWl0ID0gc3RtbWFjX3htaXQsXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX21haW4uYz03NjM0PWludCBzdG1tYWNfcmVpbml0X3F1ZXVlcyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB1OCByeF9jbnQsIHU4IHR4X2NudClcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfbWFpbi5jLTc2NTMtXHRpZiAobmV0aWZfcnVubmluZyhkZXYpKVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX21haW4uYzo3NjU0Olx0XHRyZXQgPSBzdG1tYWNfb3BlbihkZXYpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX21haW4uYy03NjU1LVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19tYWluLmM9NzY1OT1pbnQgc3RtbWFjX3JlaW5pdF9yaW5ncGFyYW0oc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdTMyIHJ4X3NpemUsIHUzMiB0eF9zaXplKVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19tYWluLmMtNzY3MC1cdGlmIChuZXRpZl9ydW5uaW5nKGRldikpXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfbWFpbi5jOjc2NzE6XHRcdHJldCA9IHN0bW1hY19vcGVuKGRldik7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfbWFpbi5jLTc2NzItXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE0IDA2OjM4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQyODM4CgkJCQkJCQlvdXRwdXQ6IDI0CgkJCQkJCQl0aG91Z2h0czogMjA4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBTVE1NQUMgRHJpdmVyIEVudHJ5cG9pbnRzIGZvciBGdXp6aW5nKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCBob3cgYmVzdCB0byB0YXJnZXQgdGhlIFNUTU1BQyBkcml2ZXIgd2l0aCBmdXp6aW5nLCBzcGVjaWZpY2FsbHkgdGhpbmtpbmcgYWJvdXQgd2hhdCBlbnRyeXBvaW50cyBhcmUgbW9zdCBhY2Nlc3NpYmxlIHRvIHRvb2xzIGxpa2Ugc3l6a2FsbGVyLiBNeSBpbml0aWFsIHRob3VnaHQgd2FzIHRoYXQgYHN0bW1hY19vcGVuYCBhbmQgYHN0bW1hY19yZWxlYXNlYCBhcmUgc3RhdGljLCB3aGljaCBnZW5lcmFsbHkgbWVhbnMgdGhleSB3b24mIzM5O3QgYmUgZXhwb3J0ZWQgYXMgc3ltYm9scyBhbmQgdGhlcmVmb3JlIHdvbiYjMzk7dCBiZSBlYXNpbHkgZnV6emFibGUuIEhvd2V2ZXIsIEkgbmVlZCB0byByZW1lbWJlciB0aGF0IHN5emthbGxlciAqY2FuKiBmb2N1cyBvbiBzdGF0aWMgZnVuY3Rpb25zIGlmIHRoZXkmIzM5O3JlIG5vdCBpbmxpbmVkLiBCdXQsIHJlYWxpc3RpY2FsbHksIGl0JiMzOTtzIGFsd2F5cyBwcmVmZXJhYmxlIHRvIGxldmVyYWdlIG5vbi1zdGF0aWMgQVBJIGVudHJ5cG9pbnRzIGZvciBmdXp6aW5nLgoKTGV0JiMzOTtzIHNlZSwgdGhlIG5vbi1zdGF0aWMgY2FuZGlkYXRlcyBzZWVtIHRvIGJlOiBgc3RtbWFjX3N1c3BlbmRgLCBgc3RtbWFjX3Jlc3VtZWAsIGBzdG1tYWNfeGRwX29wZW5gLCBgc3RtbWFjX3hkcF9yZWxlYXNlYCwgYHN0bW1hY19jaGFuZ2VfbXR1YCwgYHN0bW1hY19yZWluaXRfcXVldWVzYCwgYW5kIGBzdG1tYWNfcmVpbml0X3JpbmdwYXJhbWAuIEkmIzM5O20gZ29pbmcgdG8gaGF2ZSB0byBtYWtlIGEgbm90ZSB0aGF0IGBzdG1tYWNfY2hhbmdlX210dWAgaXMgc3RhdGljLgoKV2FpdCBhIHNlY29uZC4uLkkganVzdCByZW1lbWJlcmVkIHRoYXQgYHN0bW1hY19yZWluaXRfcXVldWVzYCBhbmQgYHN0bW1hY19yZWluaXRfcmluZ3BhcmFtYCBzZWVtIHRvIGNhbGwgYHN0bW1hY19vcGVuYC4gSWYgdGhhdCYjMzk7cyB0aGUgY2FzZSwgdGhlbiB0aGF0IGNvdWxkIGJlIGEgc2lnbmlmaWNhbnQgZW50cnkgcG9pbnQuIExldCBtZSBxdWlja2x5IGRvdWJsZS1jaGVjayB0aGF0IHRob3NlIGFyZSBhY3R1YWxseSBleHBvcnRlZCBzeW1ib2xzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNCAwNjozODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+RXJyb3I6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5ubyBtYXRjaGVzPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O0VYUE9SVF9TWU1CT0wuKnN0bW1hY19yZWluaXQmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7ZXJyb3ImIzM0OzogJiMzNDtubyBtYXRjaGVzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNCAwNjozODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0MzQwNAoJCQkJCQkJb3V0cHV0OiAyMwoJCQkJCQkJdGhvdWdodHM6IDE2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMuIEhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgYXMgaWYgdGhleSYjMzk7cmUgbXkgb3duOgoKKipFeGFtaW5pbmcgdGhlIGBzdG1tYWNfcmVpbml0X3F1ZXVlc2AgRnVuY3Rpb24qKgoKUmlnaHQsIGxldCYjMzk7cyB6ZXJvIGluIG9uIGBzdG1tYWNfcmVpbml0X3F1ZXVlc2AuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGl0cyByb2xlLiBJJiMzOTttIGd1ZXNzaW5nIGl0JiMzOTtzIGEgY3JpdGljYWwgZnVuY3Rpb24gZm9yIHJlc2V0dGluZyBvciByZS1lc3RhYmxpc2hpbmcgdGhlIHRyYW5zbWl0IGFuZCByZWNlaXZlIHF1ZXVlcyB3aXRoaW4gdGhlIFNUTU1BQyBkcml2ZXIuIEtub3dpbmcgdGhpcywgaXQgaXMgbGlrZWx5IGludm9sdmVkIGluIHJlY292ZXJpbmcgZnJvbSBlcnJvciBjb25kaXRpb25zIG9yIHJlLWNvbmZpZ3VyaW5nIHRoZSBNQUMuIFRoZSBwdXJwb3NlIG9mIHRoaXMgc2VlbXMgY3JpdGljYWwgZm9yIG1haW50YWluaW5nIG5ldHdvcmsgZnVuY3Rpb25hbGl0eSBhbmQgcG90ZW50aWFsbHkgZm9yIHRhc2tzIGxpa2UgbGluayByZS1uZWdvdGlhdGlvbiwgcG93ZXIgbWFuYWdlbWVudCwgb3IgZXZlbiBoYW5kbGluZyBkZXZpY2UgcmVzZXRzLiBJIG5lZWQgdG8gcmVmcmVzaCBteSB1bmRlcnN0YW5kaW5nIG9mIGhvdyB0aGUgcXVldWVzIGFyZSBzdHJ1Y3R1cmVkIGFuZCBtYW5hZ2VkIHdpdGhpbiB0aGlzIHNwZWNpZmljIFNUTU1BQyBpbXBsZW1lbnRhdGlvbi4gV2hhdCBhcmUgaXRzIGRlcGVuZGVuY2llcz8gV2hhdCBjYWxscyBpdD8gQW5kIGltcG9ydGFudGx5LCB3aGF0IGFyZSB0aGUgcG90ZW50aWFsIGZhaWx1cmUgbW9kZXM/IEkgbmVlZCB0byB0aGluayB0aGlzIHRocm91Z2ggY2FyZWZ1bGx5LCBhcyBhbnkgYnVnIGhlcmUgY291bGQgcmVzdWx0IGluIHNlcmlvdXMgbmV0d29ya2luZyBkaXNydXB0aW9uLiBUaW1lIHRvIHNlZSB3aGF0IEkgY2FuIGZpbmQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE0IDA2OjM4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3N0bW1hY19yZWluaXRfcXVldWVzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hYy5oPTQxND1pbnQgc3RtbWFjX2R2cl9wcm9iZShzdHJ1Y3QgZGV2aWNlICpkZXZpY2UsXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjLmgtNDE2LVx0XHQgICAgIHN0cnVjdCBzdG1tYWNfcmVzb3VyY2VzICpyZXMpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjLmg6NDE3OmludCBzdG1tYWNfcmVpbml0X3F1ZXVlcyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB1OCByeF9jbnQsIHU4IHR4X2NudCk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWMuaC00MTgtaW50IHN0bW1hY19yZWluaXRfcmluZ3BhcmFtKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHUzMiByeF9zaXplLCB1MzIgdHhfc2l6ZSk7XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX2V0aHRvb2wuYz05OTI9c3RhdGljIGludCBzdG1tYWNfc2V0X2NoYW5uZWxzKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX2V0aHRvb2wuYy0xMDAxLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX2V0aHRvb2wuYzoxMDAyOlx0cmV0dXJuIHN0bW1hY19yZWluaXRfcXVldWVzKGRldiwgY2hhbi1cdTAwM2VyeF9jb3VudCwgY2hhbi1cdTAwM2V0eF9jb3VudCk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfZXRodG9vbC5jLTEwMDMtfVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19tYWluLmM9NzYxMz1zdGF0aWMgdm9pZCBzdG1tYWNfbmFwaV9kZWwoc3RydWN0IG5ldF9kZXZpY2UgKmRldilcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfbWFpbi5jLTc2MzMtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfbWFpbi5jOjc2MzQ6aW50IHN0bW1hY19yZWluaXRfcXVldWVzKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHU4IHJ4X2NudCwgdTggdHhfY250KVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX21haW4uYy03NjM1LXtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41My8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTQgMDY6Mzg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDQxOTIKCQkJCQkJCW91dHB1dDogMjIKCQkJCQkJCXRob3VnaHRzOiAxODQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIFN5bWJvbCBWaXNpYmlsaXR5IGluIHRoZSBTVE1NQUMgRHJpdmVyKioKCk9rYXksIHNvIEkmIzM5O20gdHJ5aW5nIHRvIGZpZ3VyZSBvdXQgd2hpY2ggc3ltYm9scyBpbiB0aGlzIFNUTU1BQyBkcml2ZXIgYXJlIHZpc2libGUgZXh0ZXJuYWxseSBhbmQsIG1vcmUgaW1wb3J0YW50bHksICp3aHkqLiBJJiMzOTt2ZSBnb3QgYSBiaXQgb2YgYSBtZW50YWwgbWFwIGZvcm1pbmcuIFRoZSBpbml0aWFsIGNsdWUgaXMgdGhhdCBzb21lIGFyZSAqbm90KiBleHBvcnRlZCwgYnV0IHRoZXkmIzM5O3JlIGFsc28gKm5vdCogc3RhdGljLCB3aGljaCBnaXZlcyBtZSBwYXVzZS4gTWFrZXMgbWUgdGhpbmsgb2YgdGhlbSBhcyBwb3RlbnRpYWwgY2FuZGlkYXRlcyBmb3IgaW50ZXJuYWwgY2FsbHMgYWNyb3NzIGRyaXZlciBsYXllcnMuCgpOb3csIGxldCYjMzk7cyBzZWUsIHdoYXQgYWJvdXQgYHN0bW1hY194ZHBfb3BlbmAgYW5kIGBzdG1tYWNfeGRwX3JlbGVhc2VgPyBUaG9zZSBhcmUgdGhlIG5vbi1zdGF0aWMgb25lcyBJIG5lZWQgdG8gY29uc2lkZXIgbW9yZSBkZWVwbHkuIE9uIHRoZSBvdGhlciBoYW5kLCBgc3RtbWFjX3N1c3BlbmRgIGFuZCBgc3RtbWFjX3Jlc3VtZWAgKmFyZSogZXhwb3J0ZWQsIHdoaWNoIGlzIHdoYXQgSSB3b3VsZCBleHBlY3QgZm9yIGEgcG93ZXIgbWFuYWdlbWVudCBmdW5jdGlvbi4gQW5kIHRoZW4gdGhlcmUgYXJlIGBzdG1tYWNfZHZyX3Byb2JlYCBhbmQgYHN0bW1hY19kdnJfcmVtb3ZlYCwgYWxzbyBleHBvcnRlZCwgd2hpY2ggaGFuZGxlIGRldmljZSBpbml0aWFsaXphdGlvbiBhbmQgcmVtb3ZhbCwgcmVzcGVjdGl2ZWx5LgoKSG9sZCBvbiBhIHNlY29uZCwgdGhhdCYjMzk7cyBpdCEgV2hhdCBoYXBwZW5zIHdoZW4gdGhlIGRyaXZlciBpcyAqcmVtb3ZlZCo/IERvZXMgYHN0bW1hY19kdnJfcmVtb3ZlYCBsZWFkIHRvIHRoZSBjbGVhbnVwIGZ1bmN0aW9uLCBgc3RtbWFjX3JlbGVhc2VgPyBJIHNlZW0gdG8gcmVtZW1iZXIgdGhhdCBgc3RtbWFjX3JlbGVhc2VgIGlzIGEgZnVuY3Rpb24gY2FsbGVkIHZpYSBgbmRvX3N0b3BgIHdoaWNoIHNob3VsZCBiZSBjYWxsZWQgYnkgdGhlIG5ldGRldiB1bnJlZ2lzdHJhdGlvbi4gT2theSwgSSB0aGluayBJJiMzOTt2ZSBnb3QgaXQuIEl0JiMzOTtzIHRoZSB1bnJlZ2lzdHJhdGlvbiB0aGF0IGlzIHRoZSBpbXBvcnRhbnQgYWN0aW9uIGhlcmUuCgpTbywgaW4gdGVybXMgb2YgYW5hbHl6aW5nIHRoZSBkcml2ZXImIzM5O3MgbGlmZWN5Y2xlLCBgc3RtbWFjX2R2cl9yZW1vdmVgIGlzIGEgZ29vZCBzeW1ib2wgdG8gZm9jdXMgb24uIEl0IHVucmVnaXN0ZXJzIHRoZSBuZXRkZXYsIHdoaWNoIGNhbGxzIGBuZG9fc3RvcGAsIHdoaWNoIGluIHR1cm4gbGVhZHMgdG8gdGhlIHJlbGVhc2UgYW5kIGNsZWFudXAuIEkmIzM5O20gZ29pbmcgdG8gZGlnIGludG8gdGhlIGltcGxlbWVudGF0aW9uIG9mIGBzdG1tYWNfZHZyX3JlbW92ZWAgbm93LiBUaGF0JiMzOTtzIHRoZSBrZXkgdG8gdW5kZXJzdGFuZGluZyB0aGlzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjU0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNCAwNjozODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtzdG1tYWNfZHZyX3JlbW92ZSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1kd2MtcW9zLWV0aC5jPTM0Mz1zdGF0aWMgdm9pZCBkd2NfZXRoX2R3bWFjX3JlbW92ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLWR3Yy1xb3MtZXRoLmMtMzQ2LVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtZHdjLXFvcy1ldGguYzozNDc6XHRzdG1tYWNfZHZyX3JlbW92ZShcdTAwMjZwZGV2LVx1MDAzZWRldik7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1kd2MtcW9zLWV0aC5jLTM0OC1cbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1pbnRlbC5jPTEzNjE9c3RhdGljIHZvaWQgaW50ZWxfZXRoX3BjaV9yZW1vdmUoc3RydWN0IHBjaV9kZXYgKnBkZXYpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtaW50ZWwuYy0xMzY1LVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtaW50ZWwuYzoxMzY2Olx0c3RtbWFjX2R2cl9yZW1vdmUoXHUwMDI2cGRldi1cdTAwM2VkZXYpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtaW50ZWwuYy0xMzY3LVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLWxvb25nc29uLmM9NTc4PXN0YXRpYyB2b2lkIGxvb25nc29uX2R3bWFjX3JlbW92ZShzdHJ1Y3QgcGNpX2RldiAqcGRldilcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1sb29uZ3Nvbi5jLTU4NC1cdGxkID0gcHJpdi1cdTAwM2VwbGF0LVx1MDAzZWJzcF9wcml2O1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtbG9vbmdzb24uYzo1ODU6XHRzdG1tYWNfZHZyX3JlbW92ZShcdTAwMjZwZGV2LVx1MDAzZWRldik7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1sb29uZ3Nvbi5jLTU4Ni1cbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1tb3RvcmNvbW0uYz0zNjI9c3RhdGljIHZvaWQgbW90b3Jjb21tX3JlbW92ZShzdHJ1Y3QgcGNpX2RldiAqcGRldilcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLW1vdG9yY29tbS5jLTM2My17XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1tb3RvcmNvbW0uYzozNjQ6XHRzdG1tYWNfZHZyX3JlbW92ZShcdTAwMjZwZGV2LVx1MDAzZWRldik7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1tb3RvcmNvbW0uYy0zNjUtfVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLXN0bTMyLmM9NTk1PXN0YXRpYyB2b2lkIHN0bTMyX2R3bWFjX3JlbW92ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLXN0bTMyLmMtNjAwLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtc3RtMzIuYzo2MDE6XHRzdG1tYWNfZHZyX3JlbW92ZShcdTAwMjZwZGV2LVx1MDAzZWRldik7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1zdG0zMi5jLTYwMi1cbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWMuaD00MTI9aW50IHN0bW1hY19zdXNwZW5kKHN0cnVjdCBkZXZpY2UgKmRldik7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWMuaDo0MTM6dm9pZCBzdG1tYWNfZHZyX3JlbW92ZShzdHJ1Y3QgZGV2aWNlICpkZXYpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjLmgtNDE0LWludCBzdG1tYWNfZHZyX3Byb2JlKHN0cnVjdCBkZXZpY2UgKmRldmljZSxcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfbWFpbi5jPTgxNjI9RVhQT1JUX1NZTUJPTF9HUEwoc3RtbWFjX2R2cl9wcm9iZSk7XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX21haW4uYy04MTY0LS8qKlxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX21haW4uYzo4MTY1OiAqIHN0bW1hY19kdnJfcmVtb3ZlXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfbWFpbi5jLTgxNjYtICogQGRldjogZGV2aWNlIHBvaW50ZXJcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfbWFpbi5jLTgxNjktICovXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfbWFpbi5jOjgxNzA6dm9pZCBzdG1tYWNfZHZyX3JlbW92ZShzdHJ1Y3QgZGV2aWNlICpkZXYpXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfbWFpbi5jLTgxNzEte1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19tYWluLmMtODIwMy19XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfbWFpbi5jOjgyMDQ6RVhQT1JUX1NZTUJPTF9HUEwoc3RtbWFjX2R2cl9yZW1vdmUpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX21haW4uYy04MjA1LVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19wY2kuYz0xOTI9c3RhdGljIHZvaWQgc3RtbWFjX3BjaV9yZW1vdmUoc3RydWN0IHBjaV9kZXYgKnBkZXYpXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfcGNpLmMtMTkzLXtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19wY2kuYzoxOTQ6XHRzdG1tYWNfZHZyX3JlbW92ZShcdTAwMjZwZGV2LVx1MDAzZWRldik7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfcGNpLmMtMTk1LX1cbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfcGxhdGZvcm0uYz04OTc9dm9pZCBzdG1tYWNfcGx0ZnJfcmVtb3ZlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfcGxhdGZvcm0uYy04OTgte1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX3BsYXRmb3JtLmM6ODk5Olx0c3RtbWFjX2R2cl9yZW1vdmUoXHUwMDI2cGRldi1cdTAwM2VkZXYpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX3BsYXRmb3JtLmMtOTAwLX1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTQgMDY6Mzg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDYzNDIKCQkJCQkJCW91dHB1dDogMjMKCQkJCQkJCXRob3VnaHRzOiA3NzMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQW5hbHlzaXMgb2YgdGhlIFNUTU1BQyBEcml2ZXIgQ2hhbmdlcyoqCgpPa2F5LCBzbyBJJiMzOTt2ZSBiZWVuIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBhbmQgdHJ5aW5nIHRvIGZpZ3VyZSBvdXQgdGhlIGJlc3QgYXBwcm9hY2ggZm9yIGZ1enppbmcgdGhlIGNoYW5nZXMgaXQgaW50cm9kdWNlcyB0byB0aGUgU1RNTUFDIGRyaXZlci4gTXkgaW5pdGlhbCB0aG91Z2h0IHdhcyB0aGF0IGBzdG1tYWNfZHZyX3JlbW92ZWAgd291bGQgYmUgYSBnb29kIHN5bWJvbCB0byBmb2N1cyBvbiwgYW5kIHdoaWxlIGl0IHN0aWxsIGlzLCBJIHRoaW5rIEkmIzM5O3ZlIGlkZW50aWZpZWQgc29tZSBldmVuIGJldHRlciB0YXJnZXRzLgoKTGV0JiMzOTtzIGxpc3QgdGhlbSBhbGwgb3V0LCBzdGFydGluZyB3aXRoIHRoZSBvcmlnaW5hbCBzdWdnZXN0aW9uOgoKKiAgIGBzdG1tYWNfZHZyX3Byb2JlYAoqICAgYHN0bW1hY19kdnJfcmVtb3ZlYAoqICAgYHN0bW1hY19zdXNwZW5kYAoqICAgYHN0bW1hY19yZXN1bWVgCiogICBgc3RtbWFjX3hkcF9vcGVuYAoqICAgYHN0bW1hY194ZHBfcmVsZWFzZWAKKiAgIGBzdG1tYWNfcmVpbml0X3F1ZXVlc2AKKiAgIGBzdG1tYWNfcmVpbml0X3JpbmdwYXJhbWAKCkkgaW5pdGlhbGx5IHRob3VnaHQgYHN0bW1hY19kdnJfcHJvYmVgIHdhcyB0aGUga2V5LiBCdXQsIG5vLiBJIHdhcyBtaXN0YWtlbiBhYm91dCBpdHMgcm9sZSBpbiBjYWxsaW5nIGBzdG1tYWNfaHdfc2V0dXBgLiBNeSB1bmRlcnN0YW5kaW5nIGlzIHRoYXQgYHN0bW1hY19kdnJfcHJvYmVgIHJlZ2lzdGVycyB0aGUgbmV0IGRldmljZSwgd2hlcmVhcyBgc3RtbWFjX29wZW5gIGNhbGxzIGBzdG1tYWNfaHdfc2V0dXBgLiBgc3RtbWFjX29wZW5gIGlzIHN0YXRpYywgc28gc3l6a2FsbGVyIHNob3VsZCBiZSBhYmxlIHRvIHJlYWNoIGl0IHZpYSBgbmRvX29wZW5gLiBJJiMzOTttIGFsc28gY29uc2lkZXJpbmcgYHN0bW1hY19yZWluaXRfcXVldWVzYCBhbmQgYHN0bW1hY19yZWluaXRfcmluZ3BhcmFtYCwgc2luY2UgdGhleSBjYWxsIGBzdG1tYWNfb3BlbmAgYXMgd2VsbC4KCkhvd2V2ZXIsIHRoZSBtb3JlIEkgdGhpbmsgYWJvdXQgaXQsIHRoZSBtb3JlIEkmIzM5O20gbGVhbmluZyB0b3dhcmRzIGBzdG1tYWNfeGRwX29wZW5gIGFzIGEgcHJpbWUgdGFyZ2V0LiBJdCBjYWxscyBgc3RtbWFjX3N0YXJ0X2FsbF9kbWFgIGFuZCBgc3RtbWFjX21hY19zZXRgLiBUaGF0IGxvb2tzIGxpa2UgYSBwcmV0dHkganVpY3kgZW50cnkgcG9pbnQuCgpOb3csIGEgcXVpY2sgY2hlY2sgb24gYHN0bW1hY19kYXRhcGF0aF90ZWFyZG93bmAgYW5kIGl0cyByZWFjaGFiaWxpdHkgdmlhIGBzdG1tYWNfc3VzcGVuZGA6IFllcywgYHN0bW1hY19zdXNwZW5kYCAqZG9lcyogY2FsbCBgc3RtbWFjX2RhdGFwYXRoX3RlYXJkb3duKHByaXYpYCBpZiBgcHJpdi0mZ3Q7d29sb3B0c2AgaXMgZmFsc2UuIEFuZCBvZiBjb3Vyc2UsIGBzdG1tYWNfcmVzdW1lYCBjYWxscyBgc3RtbWFjX2h3X3NldHVwKG5kZXYpYC4gU28sIGBzdG1tYWNfc3VzcGVuZGAgYW5kIGBzdG1tYWNfcmVzdW1lYCBhcmUgZGVmaW5pdGVseSB3b3J0aCBpbmNsdWRpbmcgb24gdGhlIGxpc3QuCgpIZXJlJiMzOTtzIG15IGRpc3RpbGxlZCBzdW1tYXJ5OgoKKiAgICoqV29ydGhGdXp6aW5nOioqIFRydWUKKiAgICoqUmVhc29uaW5nOioqIFRoaXMgcGF0Y2ggbWFrZXMgc2lnbmlmaWNhbnQgY2hhbmdlcyB0byB0aGUgU1RNTUFDIGRyaXZlciwgc3BlY2lmaWNhbGx5IHJlZ2FyZGluZyB0aGUgb3JkZXIgb2Ygb3BlcmF0aW9ucyBkdXJpbmcgZGF0YXBhdGggdGVhcmRvd24gYW5kIHNldHVwIGZvciBhbGwgU1RNTUFDIGRldmljZXMsIG1vZGlmeWluZyB0aGUgRE1BIHN0b3AvTUFDIGRpc2FibGUgYW5kIE1BQyBlbmFibGUvRE1BIHN0YXJ0IHNlcXVlbmNlcy4gVGhlc2UgZnVuY3Rpb25hbCBjaGFuZ2VzIGluIGNvcmUgbG9naWMgYXJlIHJlYWNoYWJsZSB0aHJvdWdoIFBDSSBlbXVsYXRpb24uCiogICAqKkZvY3VzU3ltYm9sczoqKgogICAgKiAgIGBzdG1tYWNfZHZyX3JlbW92ZWAKICAgICogICBgc3RtbWFjX3N1c3BlbmRgCiAgICAqICAgYHN0bW1hY19yZXN1bWVgCiAgICAqICAgYHN0bW1hY194ZHBfb3BlbmAKICAgICogICBgc3RtbWFjX3hkcF9yZWxlYXNlYAogICAgKiAgIGBzdG1tYWNfcmVpbml0X3F1ZXVlc2AKICAgICogICBgc3RtbWFjX3JlaW5pdF9yaW5ncGFyYW1gCiogICAqKkVuYWJsZUNvbmZpZ3M6KioKICAgICogICBgU1RNTUFDX0VUSGAKICAgICogICBgU1RNTUFDX1BDSWAKCkkmIzM5O3ZlIG1hZGUgc3VyZSB0byBjaGVjayB0aGUgZGVwZW5kZW5jaWVzLiBgU1RNTUFDX0VUSGAgZGVwZW5kcyBvbiBgSEFTX0lPTUVNYCBhbmQgYEhBU19ETUFgIOKAkyBzdGFuZGFyZCBzdHVmZi4gYFNUTU1BQ19QQ0lgIGRlcGVuZHMgb24gYFBDSWAgYW5kIGBDT01NT05fQ0xLYC4gSSBkb24mIzM5O3QgdGhpbmsgd2UgbmVlZCBhbnl0aGluZyBzcGVjaWFsIGZvciBYRFAgYmV5b25kIGBCUEZfU1lTQ0FMTGAsIHdoaWNoIGlzIGFsc28gZmFpcmx5IHN0YW5kYXJkLiBUaGVyZWZvcmUsIGBTVE1NQUNfRVRIYCBhbmQgYFNUTU1BQ19QQ0lgIHNob3VsZCBiZSBzdWZmaWNpZW50IGZvciByZXByb2R1Y2luZyB0aGlzIGlzc3VlLgoKT25lIGZpbmFsIHBvaW50IOKAkyB0aGUgcGF0Y2ggYWxzbyB0b3VjaGVzIGBkd3hnbWFjMl9kbWEuY2AuIEkgbmVlZCB0byBjb25maXJtIHdoZXRoZXIgYGR3eGdtYWMyX2RtYS5jYCwgd2hpY2ggaW1wbGVtZW50cyBgZHd4Z21hYzIxMF9kbWFfb3BzYCwgZ2V0cyBjb21waWxlZCB3aGVuIGBTVE1NQUNfRVRIYCBpcyBlbmFibGVkLiBJdCBpcyBpbXBvcnRhbnQgdG8gY29uZmlybSB0aGF0IHRoZSBjaGFuZ2VzIGluIHRoYXQgZmlsZSBhcmUgY292ZXJlZCBieSB0aGUgY3VycmVudCBjb25maWd1cmF0aW9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjU2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNCAwNjozODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtkd3hnbWFjMl9kbWEubyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9NYWtlZmlsZT0zPXN0bW1hYy1vYmpzOj0gc3RtbWFjX21haW4ubyBzdG1tYWNfZXRodG9vbC5vIHN0bW1hY19tZGlvLm8gcmluZ19tb2RlLm9cdFxcXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvTWFrZWZpbGUtNy1cdCAgICAgIGR3bWFjNF9kbWEubyBkd21hYzRfbGliLm8gZHdtYWM0X2NvcmUubyBkd21hYzUubyBod2lmLm8gXFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL01ha2VmaWxlOjg6XHQgICAgICBzdG1tYWNfdGMubyBkd3hnbWFjMl9jb3JlLm8gZHd4Z21hYzJfZG1hLm8gZHd4Z21hYzJfZGVzY3MubyBcXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvTWFrZWZpbGUtOS1cdCAgICAgIHN0bW1hY194ZHAubyBzdG1tYWNfZXN0Lm8gc3RtbWFjX2ZwZS5vIHN0bW1hY192bGFuLm8gXFxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTQgMDY6Mzg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDgzMDUKCQkJCQkJCW91dHB1dDogMTc4CgkJCQkJCQl0aG91Z2h0czogMTU3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFzc2Vzc21lbnQgb2YgdGhlIGBzdG1tYWNgIENoYW5nZXMqKgoKT2theSwgc28gSSYjMzk7dmUgY29uZmlybWVkIHRoYXQgdGhlc2UgY2hhbmdlcyBhcmUgaW5kZWVkIHdpdGhpbiB0aGUgYHN0bW1hYy1vYmpzYCBzY29wZSwgYXMgZXhwZWN0ZWQuIExldCYjMzk7cyBkZWx2ZSBpbnRvIHRoZSBjb3JlIG9mIHRoZXNlIG1vZGlmaWNhdGlvbnMuIEkmIzM5O20gZm9jdXNpbmcgb24gdGhlIGtleSBzeW1ib2xzIGFmZmVjdGVkOiBgc3RtbWFjX2R2cl9yZW1vdmVgLCBgc3RtbWFjX3N1c3BlbmRgLCBgc3RtbWFjX3Jlc3VtZWAsIGBzdG1tYWNfeGRwX29wZW5gLCBgc3RtbWFjX3hkcF9yZWxlYXNlYCwgYHN0bW1hY19yZWluaXRfcXVldWVzYCwgYW5kIGBzdG1tYWNfcmVpbml0X3JpbmdwYXJhbWAuCgpMb29raW5nIGF0IHRoaXMgbGlzdCwgdGhlIGltcGFjdCBpcyBpbW1lZGlhdGVseSBhcHBhcmVudC4gVGhlc2Ugc3ltYm9scyBlbmNhcHN1bGF0ZSB0aGUgY3JpdGljYWwgYXJlYXMgd2hlcmUgdGhlIGRyaXZlciYjMzk7cyBvcGVyYXRpb25hbCBmbG93IGhhcyBiZWVuIGFsdGVyZWQuIFNwZWNpZmljYWxseSwgdGhpcyBwYXRjaCBjaGFuZ2VzIHRoZSBzZXF1ZW5jaW5nIG9mIE1BQyBlbmFibGUvZGlzYWJsZSBhY3Rpb25zIHJlbGF0aXZlIHRvIHRoZSBETUEgc3RhcnQvc3RvcCBvcGVyYXRpb25zLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBhbHRlcmF0aW9uOyBpdCYjMzk7cyBjaGFuZ2luZyAqaG93KiB0aGUgY29yZSBkcml2ZXIgaGFuZGxlcyB0aGUgZnVuZGFtZW50YWwgaGFyZHdhcmUgaW50ZXJhY3Rpb25zIGFjcm9zcyBhbGwgc3RtbWFjIGRldmljZXMuIEl0JiMzOTtzIG5vdCBqdXN0IGEgcmVmYWN0b3Jpbmcgb3Igb3B0aW1pemF0aW9uLCBpdCYjMzk7cyBhIGZ1bmRhbWVudGFsIHNoaWZ0IGluIHRoZSBkcml2ZXImIzM5O3MgY29udHJvbCBsb2dpYy4KCkFscmlnaHQsIHdpdGggdGhpcyB1bmRlcnN0YW5kaW5nIGNvbmZpcm1lZCwgSSYjMzk7bSBjb21mb3J0YWJsZSBjYWxsaW5nIGBzZXQtcmVzdWx0c2AuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE0IDA2OjM4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtTVE1NQUNfRVRIJiMzNDssCiAgICAmIzM0O1NUTU1BQ19QQ0kmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtzdG1tYWNfZHZyX3JlbW92ZSYjMzQ7LAogICAgJiMzNDtzdG1tYWNfc3VzcGVuZCYjMzQ7LAogICAgJiMzNDtzdG1tYWNfcmVzdW1lJiMzNDssCiAgICAmIzM0O3N0bW1hY194ZHBfb3BlbiYjMzQ7LAogICAgJiMzNDtzdG1tYWNfeGRwX3JlbGVhc2UmIzM0OywKICAgICYjMzQ7c3RtbWFjX3JlaW5pdF9xdWV1ZXMmIzM0OywKICAgICYjMzQ7c3RtbWFjX3JlaW5pdF9yaW5ncGFyYW0mIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIG5ldyBvcmRlcmVkIGRhdGFwYXRoIHRlYXJkb3duIHNlcXVlbmNlIGZvciBhbGwgc3RtbWFjIGRldmljZXMsIGNoYW5naW5nIHRoZSBvcmRlciBvZiBETUEgc3RvcCBhbmQgTUFDIGRpc2FibGUgb3BlcmF0aW9ucy4gSXQgYWxzbyBzd2FwcyB0aGUgb3JkZXIgb2YgTUFDIGVuYWJsZSBhbmQgRE1BIHN0YXJ0IGluIHRoZSBzZXR1cCBwYXRocy4gVGhlc2UgYXJlIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUgY29yZSBkcml2ZXIgbG9naWMgcmVhY2hhYmxlIHZpYSBQQ0kgZW11bGF0aW9uLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtTVE1NQUNfRVRIJiMzNDssCiAgICAmIzM0O1NUTU1BQ19QQ0kmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtzdG1tYWNfZHZyX3JlbW92ZSYjMzQ7LAogICAgJiMzNDtzdG1tYWNfc3VzcGVuZCYjMzQ7LAogICAgJiMzNDtzdG1tYWNfcmVzdW1lJiMzNDssCiAgICAmIzM0O3N0bW1hY194ZHBfb3BlbiYjMzQ7LAogICAgJiMzNDtzdG1tYWNfeGRwX3JlbGVhc2UmIzM0OywKICAgICYjMzQ7c3RtbWFjX3JlaW5pdF9xdWV1ZXMmIzM0OywKICAgICYjMzQ7c3RtbWFjX3JlaW5pdF9yaW5ncGFyYW0mIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIG5ldyBvcmRlcmVkIGRhdGFwYXRoIHRlYXJkb3duIHNlcXVlbmNlIGZvciBhbGwgc3RtbWFjIGRldmljZXMsIGNoYW5naW5nIHRoZSBvcmRlciBvZiBETUEgc3RvcCBhbmQgTUFDIGRpc2FibGUgb3BlcmF0aW9ucy4gSXQgYWxzbyBzd2FwcyB0aGUgb3JkZXIgb2YgTUFDIGVuYWJsZSBhbmQgRE1BIHN0YXJ0IGluIHRoZSBzZXR1cCBwYXRocy4gVGhlc2UgYXJlIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUgY29yZSBkcml2ZXIgbG9naWMgcmVhY2hhYmxlIHZpYSBQQ0kgZW11bGF0aW9uLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjU5LzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNCAwNjozODwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+SWY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NjAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE0IDA2OjM4PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmJlc3QtZXhwZW5zaXZlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBoYXJkd2FyZSBpbml0aWFsaXphdGlvbiBhbmQgdGVhcmRvd24gc2VxdWVuY2VzIGluIHRoZSBzdG1tYWMgZHJpdmVyLCBpbnRyb2R1Y2luZyBhbiBvcmRlcmVkIGRhdGFwYXRoIHRlYXJkb3duIHRvIHByb3Blcmx5IHN0b3AgRE1BIGFuZCBNQUMgb3BlcmF0aW9ucy4gSXQgYWRkcyBmdW5jdGlvbnMgdG8gcG9sbCBoYXJkd2FyZSByZWdpc3RlcnMgZm9yIHNwZWNpZmljIHN0YXRlcyAoZS5nLiwgRE1BIHN0b3BwZWQsIE1UTCBxdWV1ZXMgZHJhaW5lZCkgdXNpbmcgYHJlYWRsX3BvbGxfdGltZW91dGAuIFRoZXNlIGNoYW5nZXMgYXJlIHB1cmVseSByZWxhdGVkIHRvIGhhcmR3YXJlIGNvbnRyb2wgZmxvdyBhbmQgZG8gbm90IGludHJvZHVjZSBhbnkgbmV3IGRhdGEgc3RydWN0dXJlcywgYnVmZmVyIGFsbG9jYXRpb25zLCBvciBkYXRhIGNvcGllcyB0byB1c2VyIHNwYWNlLiBUaGVyZSBpcyBubyByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGJlaW5nIGV4cG9zZWQgb3IgdXNlZCBpbiBjb250cm9sIGZsb3cuIFN0YW5kYXJkIEtBU0FOIGFuZCBvdGhlciBidWcgZGV0ZWN0b3JzIGFyZSBzdWZmaWNpZW50IHRvIGNhdGNoIGFueSBwb3RlbnRpYWwgbWVtb3J5IGNvcnJ1cHRpb24gb3IgdXNlLWFmdGVyLWZyZWUgYnVncyB0aGF0IG1pZ2h0IGFyaXNlIGZyb20gZHJpdmVyIHRlYXJkb3duIGlzc3Vlcy4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnkKZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQKZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKQpmdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy4KCkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOgotIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGUKICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU4KICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQCiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy4KLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCwKICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuCgpSdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLApMT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLgpBIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZCnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzCnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uCgpMb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdAp1bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZiwKYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzCnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nCnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbApmbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsCmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLgoKU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOgoxLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYgogICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkcwogICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLgoyLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzCiAgIG9yIHN0cnVjdCBmaWVsZHMuCjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHMKICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy4KNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3MKICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLgoKU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6Ci0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXIKICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHQKICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuCi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWQKICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuCi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLgoKVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZQpkZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgYTA4ZmYzNGNiMmNkMmQyOWMxZTI2MTVkZDE0NDgwY2NiMmQ4NzBmYgpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBGcmkgQXVnIDE0IDA2OjM1OjMyIDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHd4Z21hYzIuaCBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3eGdtYWMyLmgKaW5kZXggZjhhYjM0N2Y3YjViOS4uNTBmOWNjZDRhOWM0NiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHd4Z21hYzIuaAomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd3hnbWFjMi5oCkBAIC0yOTEsNiAmIzQzOzI5MSwxMCBAQAogI2RlZmluZSBYR01BQ19UVEMJCQlHRU5NQVNLKDYsIDQpCiAjZGVmaW5lIFhHTUFDX1RYUUVOCQkJR0VOTUFTSygzLCAyKQogI2RlZmluZSBYR01BQ19UU0YJCQlCSVQoMSkKJiM0MzsjZGVmaW5lIFhHTUFDX01UTF9UWFFfREVCVUcoeCkJCSgweDAwMDAxMTA4ICYjNDM7ICgweDgwICogKHgpKSkKJiM0MzsjZGVmaW5lIFhHTUFDX1RYUVNUUwkJCUJJVCg0KQomIzQzOyNkZWZpbmUgWEdNQUNfVFJDU1RTCQkJR0VOTUFTSygyLCAxKQomIzQzOyNkZWZpbmUgWEdNQUNfVFJDU1RTX1JFQUQJCTB4MQogI2RlZmluZSBYR01BQ19NVExfVEN4X0VUU19DT05UUk9MKHgpCSgweDAwMDAxMTEwICYjNDM7ICgweDgwICogKHgpKSkKICNkZWZpbmUgWEdNQUNfTVRMX1RDeF9RVUFOVFVNX1dFSUdIVCh4KQkoMHgwMDAwMTExOCAmIzQzOyAoMHg4MCAqICh4KSkpCiAjZGVmaW5lIFhHTUFDX01UTF9UQ3hfU0VORFNMT1BFKHgpCSgweDAwMDAxMTFjICYjNDM7ICgweDgwICogKHgpKSkKQEAgLTMwNiw2ICYjNDM7MzEwLDkgQEAKICNkZWZpbmUgWEdNQUNfRUhGQwkJCUJJVCg3KQogI2RlZmluZSBYR01BQ19SU0YJCQlCSVQoNSkKICNkZWZpbmUgWEdNQUNfUlRDCQkJR0VOTUFTSygxLCAwKQomIzQzOyNkZWZpbmUgWEdNQUNfTVRMX1JYUV9ERUJVRyh4KQkJKDB4MDAwMDExNDggJiM0MzsgKDB4ODAgKiAoeCkpKQomIzQzOyNkZWZpbmUgWEdNQUNfUFJYUQkJCUdFTk1BU0soMjksIDE2KQomIzQzOyNkZWZpbmUgWEdNQUNfUlhRU1RTCQkJR0VOTUFTSyg1LCA0KQogI2RlZmluZSBYR01BQ19NVExfUlhRX0ZMT1dfQ09OVFJPTCh4KQkoMHgwMDAwMTE1MCAmIzQzOyAoMHg4MCAqICh4KSkpCiAjZGVmaW5lIFhHTUFDX1JGRAkJCUdFTk1BU0soMzEsIDE3KQogI2RlZmluZSBYR01BQ19SRkEJCQlHRU5NQVNLKDE1LCAxKQpAQCAtMzkxLDYgJiM0MzszOTgsNyBAQAogI2RlZmluZSBYR01BQ19OSVMJCQlCSVQoMTUpCiAjZGVmaW5lIFhHTUFDX0FJUwkJCUJJVCgxNCkKICNkZWZpbmUgWEdNQUNfRkJFCQkJQklUKDEyKQomIzQzOyNkZWZpbmUgWEdNQUNfUlBTCQkJQklUKDgpCiAjZGVmaW5lIFhHTUFDX1JCVQkJCUJJVCg3KQogI2RlZmluZSBYR01BQ19SSQkJCUJJVCg2KQogI2RlZmluZSBYR01BQ19UQlUJCQlCSVQoMikKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3eGdtYWMyX2RtYS5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHd4Z21hYzJfZG1hLmMKaW5kZXggZmY4Mzg1OGViYzFmMy4uYmE0ZjUzNWZiOWViNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHd4Z21hYzJfZG1hLmMKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHd4Z21hYzJfZG1hLmMKQEAgLTQsNiAmIzQzOzQsNyBAQAogICogc3RtbWFjIFhHTUFDIHN1cHBvcnQuCiAgKi8KIAomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9iaXRmaWVsZC5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L2lvcG9sbC5oJmd0OwogI2luY2x1ZGUgJiMzNDtzdG1tYWMuaCYjMzQ7CiAjaW5jbHVkZSAmIzM0O2R3eGdtYWMyLmgmIzM0OwpAQCAtMjYxLDEzICYjNDM7MjYyLDEyIEBAIHN0YXRpYyB2b2lkIGR3eGdtYWMyX2RtYV9zdGFydF90eChzdHJ1Y3Qgc3RtbWFjX3ByaXYgKnByaXYsCiB7CiAJdTMyIHZhbHVlOwogCiYjNDM7CS8qIFRQUyBpcyBsYXRjaGVkIG9uY2Ugc2V0LCBzbyBjbGVhciBpdCBvbiBldmVyeSBUeCBETUEgc3RhcnQuICovCiYjNDM7CXdyaXRlbChYR01BQ19UUFMsIGlvYWRkciAmIzQzOyBYR01BQ19ETUFfQ0hfU1RBVFVTKGNoYW4pKTsKJiM0MzsKIAl2YWx1ZSA9IHJlYWRsKGlvYWRkciAmIzQzOyBYR01BQ19ETUFfQ0hfVFhfQ09OVFJPTChjaGFuKSk7CiAJdmFsdWUgfD0gWEdNQUNfVFhTVDsKIAl3cml0ZWwodmFsdWUsIGlvYWRkciAmIzQzOyBYR01BQ19ETUFfQ0hfVFhfQ09OVFJPTChjaGFuKSk7Ci0KLQl2YWx1ZSA9IHJlYWRsKGlvYWRkciAmIzQzOyBYR01BQ19UWF9DT05GSUcpOwotCXZhbHVlIHw9IFhHTUFDX0NPTkZJR19URTsKLQl3cml0ZWwodmFsdWUsIGlvYWRkciAmIzQzOyBYR01BQ19UWF9DT05GSUcpOwogfQogCiBzdGF0aWMgdm9pZCBkd3hnbWFjMl9kbWFfc3RvcF90eChzdHJ1Y3Qgc3RtbWFjX3ByaXYgKnByaXYsIHZvaWQgX19pb21lbSAqaW9hZGRyLApAQCAtMjc4LDEwICYjNDM7Mjc4LDYgQEAgc3RhdGljIHZvaWQgZHd4Z21hYzJfZG1hX3N0b3BfdHgoc3RydWN0IHN0bW1hY19wcml2ICpwcml2LCB2b2lkIF9faW9tZW0gKmlvYWRkciwKIAl2YWx1ZSA9IHJlYWRsKGlvYWRkciAmIzQzOyBYR01BQ19ETUFfQ0hfVFhfQ09OVFJPTChjaGFuKSk7CiAJdmFsdWUgJmFtcDs9IH5YR01BQ19UWFNUOwogCXdyaXRlbCh2YWx1ZSwgaW9hZGRyICYjNDM7IFhHTUFDX0RNQV9DSF9UWF9DT05UUk9MKGNoYW4pKTsKLQotCXZhbHVlID0gcmVhZGwoaW9hZGRyICYjNDM7IFhHTUFDX1RYX0NPTkZJRyk7Ci0JdmFsdWUgJmFtcDs9IH5YR01BQ19DT05GSUdfVEU7Ci0Jd3JpdGVsKHZhbHVlLCBpb2FkZHIgJiM0MzsgWEdNQUNfVFhfQ09ORklHKTsKIH0KIAogc3RhdGljIHZvaWQgZHd4Z21hYzJfZG1hX3N0YXJ0X3J4KHN0cnVjdCBzdG1tYWNfcHJpdiAqcHJpdiwKQEAgLTI4OSwxMyAmIzQzOzI4NSwxMiBAQCBzdGF0aWMgdm9pZCBkd3hnbWFjMl9kbWFfc3RhcnRfcngoc3RydWN0IHN0bW1hY19wcml2ICpwcml2LAogewogCXUzMiB2YWx1ZTsKIAomIzQzOwkvKiBSUFMgaXMgbGF0Y2hlZCBvbmNlIHNldCwgc28gY2xlYXIgaXQgb24gZXZlcnkgUnggRE1BIHN0YXJ0LiAqLwomIzQzOwl3cml0ZWwoWEdNQUNfUlBTLCBpb2FkZHIgJiM0MzsgWEdNQUNfRE1BX0NIX1NUQVRVUyhjaGFuKSk7CiYjNDM7CiAJdmFsdWUgPSByZWFkbChpb2FkZHIgJiM0MzsgWEdNQUNfRE1BX0NIX1JYX0NPTlRST0woY2hhbikpOwogCXZhbHVlIHw9IFhHTUFDX1JYU1Q7CiAJd3JpdGVsKHZhbHVlLCBpb2FkZHIgJiM0MzsgWEdNQUNfRE1BX0NIX1JYX0NPTlRST0woY2hhbikpOwotCi0JdmFsdWUgPSByZWFkbChpb2FkZHIgJiM0MzsgWEdNQUNfUlhfQ09ORklHKTsKLQl2YWx1ZSB8PSBYR01BQ19DT05GSUdfUkU7Ci0Jd3JpdGVsKHZhbHVlLCBpb2FkZHIgJiM0MzsgWEdNQUNfUlhfQ09ORklHKTsKIH0KIAogc3RhdGljIHZvaWQgZHd4Z21hYzJfZG1hX3N0b3Bfcngoc3RydWN0IHN0bW1hY19wcml2ICpwcml2LCB2b2lkIF9faW9tZW0gKmlvYWRkciwKQEAgLTU5Miw2ICYjNDM7NTg3LDc3IEBAIHN0YXRpYyBpbnQgZHd4Z21hYzJfZW5hYmxlX3RicyhzdHJ1Y3Qgc3RtbWFjX3ByaXYgKnByaXYsIHZvaWQgX19pb21lbSAqaW9hZGRyLAogCXJldHVybiAwOwogfQogCiYjNDM7c3RhdGljIGludCBkd3hnbWFjMl90eF9kbWFfc3RvcHBlZChzdHJ1Y3Qgc3RtbWFjX3ByaXYgKnByaXYsCiYjNDM7CQkJCSAgIHZvaWQgX19pb21lbSAqaW9hZGRyLCB1MzIgY2hhbikKJiM0Mzt7CiYjNDM7CXUzMiB2YWx1ZTsKJiM0MzsJaW50IHJldDsKJiM0MzsKJiM0MzsJcmV0ID0gcmVhZGxfcG9sbF90aW1lb3V0KGlvYWRkciAmIzQzOyBYR01BQ19ETUFfQ0hfU1RBVFVTKGNoYW4pLCB2YWx1ZSwKJiM0MzsJCQkJIHZhbHVlICZhbXA7IFhHTUFDX1RQUywgMTAwLCAxMDAwMCk7CiYjNDM7CWlmIChyZXQpCiYjNDM7CQluZXRkZXZfd2Fybihwcml2LSZndDtkZXYsICYjMzQ7VHggRE1BIGNoYW5uZWwgJXUgc3RvcCB0aW1lb3V0XG4mIzM0OywKJiM0MzsJCQkgICAgY2hhbik7CiYjNDM7CiYjNDM7CXJldHVybiByZXQ7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbnQgZHd4Z21hYzJfdHhfbXRsX2RyYWluKHN0cnVjdCBzdG1tYWNfcHJpdiAqcHJpdiwKJiM0MzsJCQkJIHZvaWQgX19pb21lbSAqaW9hZGRyLCB1MzIgcXVldWUpCiYjNDM7ewomIzQzOwl1MzIgdmFsdWU7CiYjNDM7CWludCByZXQ7CiYjNDM7CiYjNDM7CS8qIFdhaXQgdW50aWwgdGhlIHF1ZXVlIGlzIGVtcHR5IGFuZCBpdHMgcmVhZCBjb250cm9sbGVyIGlzIG5vIGxvbmdlcgomIzQzOwkgKiBwdWxsaW5nIGEgZnJhbWUgb3V0IHRvd2FyZHMgdGhlIE1BQy4KJiM0MzsJICovCiYjNDM7CXJldCA9IHJlYWRsX3BvbGxfdGltZW91dChpb2FkZHIgJiM0MzsgWEdNQUNfTVRMX1RYUV9ERUJVRyhxdWV1ZSksIHZhbHVlLAomIzQzOwkJCQkgISh2YWx1ZSAmYW1wOyBYR01BQ19UWFFTVFMpICZhbXA7JmFtcDsKJiM0MzsJCQkJIEZJRUxEX0dFVChYR01BQ19UUkNTVFMsIHZhbHVlKSAhPQomIzQzOwkJCQkgWEdNQUNfVFJDU1RTX1JFQUQsCiYjNDM7CQkJCSAxMDAsIDEwMDAwKTsKJiM0MzsJaWYgKHJldCkKJiM0MzsJCW5ldGRldl93YXJuKHByaXYtJmd0O2RldiwgJiMzNDtNVEwgVHggcXVldWUgJXUgZHJhaW4gdGltZW91dFxuJiMzNDssCiYjNDM7CQkJICAgIHF1ZXVlKTsKJiM0MzsKJiM0MzsJcmV0dXJuIHJldDsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGludCBkd3hnbWFjMl9yeF9tdGxfZHJhaW4oc3RydWN0IHN0bW1hY19wcml2ICpwcml2LAomIzQzOwkJCQkgdm9pZCBfX2lvbWVtICppb2FkZHIsIHUzMiBxdWV1ZSkKJiM0Mzt7CiYjNDM7CXUzMiB2YWx1ZTsKJiM0MzsJaW50IHJldDsKJiM0MzsKJiM0MzsJLyogV2FpdCB1bnRpbCBubyBwYWNrZXQgaXMgbGVmdCBpbiB0aGUgcXVldWUgYW5kIHRoZSBxdWV1ZSByZXBvcnRzCiYjNDM7CSAqIGl0c2VsZiBlbXB0eS4KJiM0MzsJICovCiYjNDM7CXJldCA9IHJlYWRsX3BvbGxfdGltZW91dChpb2FkZHIgJiM0MzsgWEdNQUNfTVRMX1JYUV9ERUJVRyhxdWV1ZSksIHZhbHVlLAomIzQzOwkJCQkgIUZJRUxEX0dFVChYR01BQ19QUlhRLCB2YWx1ZSkgJmFtcDsmYW1wOwomIzQzOwkJCQkgIUZJRUxEX0dFVChYR01BQ19SWFFTVFMsIHZhbHVlKSwKJiM0MzsJCQkJIDEwMCwgMTAwMDApOwomIzQzOwlpZiAocmV0KQomIzQzOwkJbmV0ZGV2X3dhcm4ocHJpdi0mZ3Q7ZGV2LCAmIzM0O01UTCBSeCBxdWV1ZSAldSBkcmFpbiB0aW1lb3V0XG4mIzM0OywKJiM0MzsJCQkgICAgcXVldWUpOwomIzQzOwomIzQzOwlyZXR1cm4gcmV0OwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW50IGR3eGdtYWMyX3J4X2RtYV9zdG9wcGVkKHN0cnVjdCBzdG1tYWNfcHJpdiAqcHJpdiwKJiM0MzsJCQkJICAgdm9pZCBfX2lvbWVtICppb2FkZHIsIHUzMiBjaGFuKQomIzQzO3sKJiM0MzsJdTMyIHZhbHVlOwomIzQzOwlpbnQgcmV0OwomIzQzOwomIzQzOwlyZXQgPSByZWFkbF9wb2xsX3RpbWVvdXQoaW9hZGRyICYjNDM7IFhHTUFDX0RNQV9DSF9TVEFUVVMoY2hhbiksIHZhbHVlLAomIzQzOwkJCQkgdmFsdWUgJmFtcDsgWEdNQUNfUlBTLCAxMDAsIDEwMDAwKTsKJiM0MzsJaWYgKHJldCkKJiM0MzsJCW5ldGRldl93YXJuKHByaXYtJmd0O2RldiwgJiMzNDtSeCBETUEgY2hhbm5lbCAldSBzdG9wIHRpbWVvdXRcbiYjMzQ7LAomIzQzOwkJCSAgICBjaGFuKTsKJiM0MzsKJiM0MzsJcmV0dXJuIHJldDsKJiM0Mzt9CiYjNDM7CiBjb25zdCBzdHJ1Y3Qgc3RtbWFjX2RtYV9vcHMgZHd4Z21hYzIxMF9kbWFfb3BzID0gewogCS5yZXNldCA9IGR3eGdtYWMyX2RtYV9yZXNldCwKIAkuaW5pdCA9IGR3eGdtYWMyX2RtYV9pbml0LApAQCAtNjIwLDQgJiM0Mzs2ODYsOCBAQCBjb25zdCBzdHJ1Y3Qgc3RtbWFjX2RtYV9vcHMgZHd4Z21hYzIxMF9kbWFfb3BzID0gewogCS5zZXRfYmZzaXplID0gZHd4Z21hYzJfc2V0X2Jmc2l6ZSwKIAkuZW5hYmxlX3NwaCA9IGR3eGdtYWMyX2VuYWJsZV9zcGgsCiAJLmVuYWJsZV90YnMgPSBkd3hnbWFjMl9lbmFibGVfdGJzLAomIzQzOwkudHhfZG1hX3N0b3BwZWQgPSBkd3hnbWFjMl90eF9kbWFfc3RvcHBlZCwKJiM0MzsJLnR4X210bF9kcmFpbiA9IGR3eGdtYWMyX3R4X210bF9kcmFpbiwKJiM0MzsJLnJ4X210bF9kcmFpbiA9IGR3eGdtYWMyX3J4X210bF9kcmFpbiwKJiM0MzsJLnJ4X2RtYV9zdG9wcGVkID0gZHd4Z21hYzJfcnhfZG1hX3N0b3BwZWQsCiB9OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvaHdpZi5oIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvaHdpZi5oCmluZGV4IDA0ZGFmZWMwMjFiNGYuLjg2ZjRhYTg4OTYxYzcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2h3aWYuaAomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9od2lmLmgKQEAgLTIzMSw2ICYjNDM7MjMxLDE1IEBAIHN0cnVjdCBzdG1tYWNfZG1hX29wcyB7CiAJCQkgICBib29sIGVuLCB1MzIgY2hhbik7CiAJaW50ICgqZW5hYmxlX3Ricykoc3RydWN0IHN0bW1hY19wcml2ICpwcml2LCB2b2lkIF9faW9tZW0gKmlvYWRkciwKIAkJCSAgYm9vbCBlbiwgdTMyIGNoYW4pOwomIzQzOwkvKiBPcmRlcmVkIGRhdGFwYXRoIHRlYXJkb3duICovCiYjNDM7CWludCAoKnR4X2RtYV9zdG9wcGVkKShzdHJ1Y3Qgc3RtbWFjX3ByaXYgKnByaXYsIHZvaWQgX19pb21lbSAqaW9hZGRyLAomIzQzOwkJCSAgICAgIHUzMiBjaGFuKTsKJiM0MzsJaW50ICgqdHhfbXRsX2RyYWluKShzdHJ1Y3Qgc3RtbWFjX3ByaXYgKnByaXYsIHZvaWQgX19pb21lbSAqaW9hZGRyLAomIzQzOwkJCSAgICB1MzIgcXVldWUpOwomIzQzOwlpbnQgKCpyeF9tdGxfZHJhaW4pKHN0cnVjdCBzdG1tYWNfcHJpdiAqcHJpdiwgdm9pZCBfX2lvbWVtICppb2FkZHIsCiYjNDM7CQkJICAgIHUzMiBxdWV1ZSk7CiYjNDM7CWludCAoKnJ4X2RtYV9zdG9wcGVkKShzdHJ1Y3Qgc3RtbWFjX3ByaXYgKnByaXYsIHZvaWQgX19pb21lbSAqaW9hZGRyLAomIzQzOwkJCSAgICAgIHUzMiBjaGFuKTsKIH07CiAKICNkZWZpbmUgc3RtbWFjX2RtYV9pbml0KF9fcHJpdiwgX19hcmdzLi4uKSBcCkBAIC0yOTMsNiAmIzQzOzMwMiwxNCBAQCBzdHJ1Y3Qgc3RtbWFjX2RtYV9vcHMgewogCXN0bW1hY19kb192b2lkX2NhbGxiYWNrKF9fcHJpdiwgZG1hLCBlbmFibGVfc3BoLCBfX3ByaXYsIF9fYXJncykKICNkZWZpbmUgc3RtbWFjX2VuYWJsZV90YnMoX19wcml2LCBfX2FyZ3MuLi4pIFwKIAlzdG1tYWNfZG9fY2FsbGJhY2soX19wcml2LCBkbWEsIGVuYWJsZV90YnMsIF9fcHJpdiwgX19hcmdzKQomIzQzOyNkZWZpbmUgc3RtbWFjX3R4X2RtYV9zdG9wcGVkKF9fcHJpdiwgX19hcmdzLi4uKSBcCiYjNDM7CXN0bW1hY19kb19jYWxsYmFjayhfX3ByaXYsIGRtYSwgdHhfZG1hX3N0b3BwZWQsIF9fcHJpdiwgX19hcmdzKQomIzQzOyNkZWZpbmUgc3RtbWFjX3R4X210bF9kcmFpbihfX3ByaXYsIF9fYXJncy4uLikgXAomIzQzOwlzdG1tYWNfZG9fY2FsbGJhY2soX19wcml2LCBkbWEsIHR4X210bF9kcmFpbiwgX19wcml2LCBfX2FyZ3MpCiYjNDM7I2RlZmluZSBzdG1tYWNfcnhfbXRsX2RyYWluKF9fcHJpdiwgX19hcmdzLi4uKSBcCiYjNDM7CXN0bW1hY19kb19jYWxsYmFjayhfX3ByaXYsIGRtYSwgcnhfbXRsX2RyYWluLCBfX3ByaXYsIF9fYXJncykKJiM0MzsjZGVmaW5lIHN0bW1hY19yeF9kbWFfc3RvcHBlZChfX3ByaXYsIF9fYXJncy4uLikgXAomIzQzOwlzdG1tYWNfZG9fY2FsbGJhY2soX19wcml2LCBkbWEsIHJ4X2RtYV9zdG9wcGVkLCBfX3ByaXYsIF9fYXJncykKIAogc3RydWN0IG1hY19kZXZpY2VfaW5mbzsKIHN0cnVjdCBuZXRfZGV2aWNlOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX21haW4uYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19tYWluLmMKaW5kZXggYjJiN2QwMjQyZGQzYy4uOWMzYThmMTIyYjk0ZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX21haW4uYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfbWFpbi5jCkBAIC0yNTYwLDYgJiM0MzsyNTYwLDUyIEBAIHN0YXRpYyB2b2lkIHN0bW1hY19zdG9wX2FsbF9kbWEoc3RydWN0IHN0bW1hY19wcml2ICpwcml2KQogCQlzdG1tYWNfZGVpbml0X2NoYW4ocHJpdiwgcHJpdi0mZ3Q7aW9hZGRyLCBjaGFuKTsKIH0KIAomIzQzOy8qKgomIzQzOyAqIHN0bW1hY19kYXRhcGF0aF90ZWFyZG93biAtIG9yZGVyZWQgZGF0YXBhdGggdGVhcmRvd24gYXMgcGVyIElQIHNwZWNpZmljYXRpb24KJiM0MzsgKiBAcHJpdjogZHJpdmVyIHByaXZhdGUgc3RydWN0dXJlCiYjNDM7ICogRGVzY3JpcHRpb246CiYjNDM7ICogV2hlbiB0ZWFyZG93biBvcHMgYXJlIGF2YWlsYWJsZSwgZm9sbG93IHRoZSBkYXRhYm9vayBvcmRlcmVkIHRlYXJkb3duCiYjNDM7ICogc2VxdWVuY2UuCiYjNDM7ICogRm9sbG93cyB0aGUgbGVnYWN5IHN0b3AgJiM0MzsgTUFDIGRpc2FibGUgZm9yIHZhcmlhbnRzIHdpdGhvdXQgdGhlIGZlYXR1cmUuCiYjNDM7ICovCiYjNDM7c3RhdGljIHZvaWQgc3RtbWFjX2RhdGFwYXRoX3RlYXJkb3duKHN0cnVjdCBzdG1tYWNfcHJpdiAqcHJpdikKJiM0Mzt7CiYjNDM7CXUzMiByeF9jaGFubmVsc19jb3VudCA9IHByaXYtJmd0O3BsYXQtJmd0O3J4X3F1ZXVlc190b191c2U7CiYjNDM7CXUzMiB0eF9jaGFubmVsc19jb3VudCA9IHByaXYtJmd0O3BsYXQtJmd0O3R4X3F1ZXVlc190b191c2U7CiYjNDM7CXUzMiBjaGFuOwomIzQzOwomIzQzOwkvKiBTdG9wIGFsbCBUWCBETUEgY2hhbm5lbHMgKi8KJiM0MzsJZm9yIChjaGFuID0gMDsgY2hhbiAmbHQ7IHR4X2NoYW5uZWxzX2NvdW50OyBjaGFuJiM0MzsmIzQzOykKJiM0MzsJCXN0bW1hY19zdG9wX3R4X2RtYShwcml2LCBjaGFuKTsKJiM0MzsKJiM0MzsJLyogV2FpdCBmb3IgZXZlcnkgVFggRE1BIGNoYW5uZWwgdG8gcmVwb3J0IGl0c2VsZiBzdG9wcGVkICovCiYjNDM7CWlmIChwcml2LSZndDtody0mZ3Q7ZG1hLSZndDt0eF9kbWFfc3RvcHBlZCkKJiM0MzsJCWZvciAoY2hhbiA9IDA7IGNoYW4gJmx0OyB0eF9jaGFubmVsc19jb3VudDsgY2hhbiYjNDM7JiM0MzspCiYjNDM7CQkJc3RtbWFjX3R4X2RtYV9zdG9wcGVkKHByaXYsIHByaXYtJmd0O2lvYWRkciwgY2hhbik7CiYjNDM7CiYjNDM7CS8qIFdhaXQgZm9yIHRoZSBNVEwgVFggcXVldWVzIHRvIGZpbmlzaCBwdXNoaW5nIGludG8gdGhlIE1BQyAqLwomIzQzOwlpZiAocHJpdi0mZ3Q7aHctJmd0O2RtYS0mZ3Q7dHhfbXRsX2RyYWluKQomIzQzOwkJZm9yIChjaGFuID0gMDsgY2hhbiAmbHQ7IHR4X2NoYW5uZWxzX2NvdW50OyBjaGFuJiM0MzsmIzQzOykKJiM0MzsJCQlzdG1tYWNfdHhfbXRsX2RyYWluKHByaXYsIHByaXYtJmd0O2lvYWRkciwgY2hhbik7CiYjNDM7CiYjNDM7CS8qIERpc2FibGUgdGhlIE1BQyBUWCBhbmQgUlggKi8KJiM0MzsJc3RtbWFjX21hY19zZXQocHJpdiwgcHJpdi0mZ3Q7aW9hZGRyLCBmYWxzZSk7CiYjNDM7CiYjNDM7CS8qIFdhaXQgZm9yIHRoZSBNVEwgUlggcXVldWVzIHRvIGRyYWluIGludG8gdGhlIFJYIERNQSAqLwomIzQzOwlpZiAocHJpdi0mZ3Q7aHctJmd0O2RtYS0mZ3Q7cnhfbXRsX2RyYWluKQomIzQzOwkJZm9yIChjaGFuID0gMDsgY2hhbiAmbHQ7IHJ4X2NoYW5uZWxzX2NvdW50OyBjaGFuJiM0MzsmIzQzOykKJiM0MzsJCQlzdG1tYWNfcnhfbXRsX2RyYWluKHByaXYsIHByaXYtJmd0O2lvYWRkciwgY2hhbik7CiYjNDM7CiYjNDM7CS8qIFN0b3AgYWxsIFJYIERNQSBjaGFubmVscyAqLwomIzQzOwlmb3IgKGNoYW4gPSAwOyBjaGFuICZsdDsgcnhfY2hhbm5lbHNfY291bnQ7IGNoYW4mIzQzOyYjNDM7KQomIzQzOwkJc3RtbWFjX3N0b3BfcnhfZG1hKHByaXYsIGNoYW4pOwomIzQzOwomIzQzOwkvKiBXYWl0IGZvciBldmVyeSBSWCBETUEgY2hhbm5lbCB0byByZXBvcnQgaXRzZWxmIHN0b3BwZWQgKi8KJiM0MzsJaWYgKHByaXYtJmd0O2h3LSZndDtkbWEtJmd0O3J4X2RtYV9zdG9wcGVkKQomIzQzOwkJZm9yIChjaGFuID0gMDsgY2hhbiAmbHQ7IHJ4X2NoYW5uZWxzX2NvdW50OyBjaGFuJiM0MzsmIzQzOykKJiM0MzsJCQlzdG1tYWNfcnhfZG1hX3N0b3BwZWQocHJpdiwgcHJpdi0mZ3Q7aW9hZGRyLCBjaGFuKTsKJiM0Mzt9CiYjNDM7CiAvKioKICAqICBzdG1tYWNfZG1hX29wZXJhdGlvbl9tb2RlIC0gSFcgRE1BIG9wZXJhdGlvbiBtb2RlCiAgKiAgQHByaXY6IGRyaXZlciBwcml2YXRlIHN0cnVjdHVyZQpAQCAtMzY4NSw5ICYjNDM7MzczMSw2IEBAIHN0YXRpYyBpbnQgc3RtbWFjX2h3X3NldHVwKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiAJCXByaXYtJmd0O2h3LSZndDtyeF9jc3VtID0gMDsKIAl9CiAKLQkvKiBFbmFibGUgdGhlIE1BQyBSeC9UeCAqLwotCXN0bW1hY19tYWNfc2V0KHByaXYsIHByaXYtJmd0O2lvYWRkciwgdHJ1ZSk7Ci0KIAkvKiBTZXQgdGhlIEhXIERNQSBtb2RlIGFuZCB0aGUgQ09FICovCiAJc3RtbWFjX2RtYV9vcGVyYXRpb25fbW9kZShwcml2KTsKIApAQCAtMzc0Myw2ICYjNDM7Mzc4Niw5IEBAIHN0YXRpYyBpbnQgc3RtbWFjX2h3X3NldHVwKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiAJLyogU3RhcnQgdGhlIGJhbGwgcm9sbGluZy4uLiAqLwogCXN0bW1hY19zdGFydF9hbGxfZG1hKHByaXYpOwogCiYjNDM7CS8qIEVuYWJsZSB0aGUgTUFDIFJ4L1R4ICovCiYjNDM7CXN0bW1hY19tYWNfc2V0KHByaXYsIHByaXYtJmd0O2lvYWRkciwgdHJ1ZSk7CiYjNDM7CiAJcGh5bGlua19yeF9jbGtfc3RvcF9ibG9jayhwcml2LSZndDtwaHlsaW5rKTsKIAlzdG1tYWNfc2V0X2h3X3ZsYW5fbW9kZShwcml2LCBwcml2LSZndDtodyk7CiAJcGh5bGlua19yeF9jbGtfc3RvcF91bmJsb2NrKHByaXYtJmd0O3BoeWxpbmspOwpAQCAtNDI0MCw5ICYjNDM7NDI4Niw2IEBAIHN0YXRpYyB2b2lkIF9fc3RtbWFjX3JlbGVhc2Uoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIAlzdHJ1Y3Qgc3RtbWFjX3ByaXYgKnByaXYgPSBuZXRkZXZfcHJpdihkZXYpOwogCXU4IGNoYW47CiAKLQkvKiBTdG9wIGFuZCBkaXNjb25uZWN0IHRoZSBQSFkgKi8KLQlwaHlsaW5rX3N0b3AocHJpdi0mZ3Q7cGh5bGluayk7Ci0KIAlzdG1tYWNfZGlzYWJsZV9hbGxfcXVldWVzKHByaXYpOwogCiAJZm9yIChjaGFuID0gMDsgY2hhbiAmbHQ7IHByaXYtJmd0O3BsYXQtJmd0O3R4X3F1ZXVlc190b191c2U7IGNoYW4mIzQzOyYjNDM7KQpAQCAtNDI1Myw4ICYjNDM7NDI5NiwxMSBAQCBzdGF0aWMgdm9pZCBfX3N0bW1hY19yZWxlYXNlKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiAJLyogRnJlZSB0aGUgSVJRIGxpbmVzICovCiAJc3RtbWFjX2ZyZWVfaXJxKGRldiwgUkVRX0lSUV9FUlJfQUxMLCAwKTsKIAotCS8qIFN0b3AgVFgvUlggRE1BIGFuZCBjbGVhciB0aGUgZGVzY3JpcHRvcnMgKi8KLQlzdG1tYWNfc3RvcF9hbGxfZG1hKHByaXYpOwomIzQzOwkvKiBIYXMgdG8gcnVuIGJlZm9yZSBtYWNfbGlua19kb3duKCkgZGlzYWJsZXMgdGhlIE1BQy4gKi8KJiM0MzsJc3RtbWFjX2RhdGFwYXRoX3RlYXJkb3duKHByaXYpOwomIzQzOwomIzQzOwkvKiBTdG9wIGFuZCBkaXNjb25uZWN0IHRoZSBQSFkgKi8KJiM0MzsJcGh5bGlua19zdG9wKHByaXYtJmd0O3BoeWxpbmspOwogCiAJLyogUmVsZWFzZSBhbmQgZnJlZSB0aGUgUngvVHggcmVzb3VyY2VzICovCiAJZnJlZV9kbWFfZGVzY19yZXNvdXJjZXMocHJpdiwgJmFtcDtwcml2LSZndDtkbWFfY29uZik7CkBAIC03MTA0LDE1ICYjNDM7NzE1MCwxMiBAQCB2b2lkIHN0bW1hY194ZHBfcmVsZWFzZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQogCS8qIEZyZWUgdGhlIElSUSBsaW5lcyAqLwogCXN0bW1hY19mcmVlX2lycShkZXYsIFJFUV9JUlFfRVJSX0FMTCwgMCk7CiAKLQkvKiBTdG9wIFRYL1JYIERNQSBjaGFubmVscyAqLwotCXN0bW1hY19zdG9wX2FsbF9kbWEocHJpdik7CiYjNDM7CS8qIFN0b3AgdGhlIE1BQyBhbmQgdGhlIFRYL1JYIERNQSBjaGFubmVscyAqLwomIzQzOwlzdG1tYWNfZGF0YXBhdGhfdGVhcmRvd24ocHJpdik7CiAKIAkvKiBSZWxlYXNlIGFuZCBmcmVlIHRoZSBSeC9UeCByZXNvdXJjZXMgKi8KIAlmcmVlX2RtYV9kZXNjX3Jlc291cmNlcyhwcml2LCAmYW1wO3ByaXYtJmd0O2RtYV9jb25mKTsKIAotCS8qIERpc2FibGUgdGhlIE1BQyBSeC9UeCAqLwotCXN0bW1hY19tYWNfc2V0KHByaXYsIHByaXYtJmd0O2lvYWRkciwgZmFsc2UpOwotCiAJLyogc2V0IHRyYW5zX3N0YXJ0IHNvIHdlIGRvbiYjMzk7dCBnZXQgc3B1cmlvdXMKIAkgKiB3YXRjaGRvZ3MgZHVyaW5nIHJlc2V0CiAJICovCkBAIC03MTg0LDEyICYjNDM7NzIyNywxMiBAQCBpbnQgc3RtbWFjX3hkcF9vcGVuKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiAJCWhydGltZXJfc2V0dXAoJmFtcDt0eF9xLSZndDt0eHRpbWVyLCBzdG1tYWNfdHhfdGltZXIsIENMT0NLX01PTk9UT05JQywgSFJUSU1FUl9NT0RFX1JFTCk7CiAJfQogCi0JLyogRW5hYmxlIHRoZSBNQUMgUngvVHggKi8KLQlzdG1tYWNfbWFjX3NldChwcml2LCBwcml2LSZndDtpb2FkZHIsIHRydWUpOwotCiAJLyogU3RhcnQgUnggJmFtcDsgVHggRE1BIENoYW5uZWxzICovCiAJc3RtbWFjX3N0YXJ0X2FsbF9kbWEocHJpdik7CiAKJiM0MzsJLyogRW5hYmxlIHRoZSBNQUMgUngvVHggKi8KJiM0MzsJc3RtbWFjX21hY19zZXQocHJpdiwgcHJpdi0mZ3Q7aW9hZGRyLCB0cnVlKTsKJiM0MzsKIAlyZXQgPSBzdG1tYWNfcmVxdWVzdF9pcnEoZGV2KTsKIAlpZiAocmV0KQogCQlnb3RvIGlycV9lcnJvcjsKQEAgLTgxOTAsMTcgJiM0Mzs4MjMzLDE1IEBAIGludCBzdG1tYWNfc3VzcGVuZChzdHJ1Y3QgZGV2aWNlICpkZXYpCiAJCXRpbWVyX2RlbGV0ZV9zeW5jKCZhbXA7cHJpdi0mZ3Q7ZWVlX2N0cmxfdGltZXIpOwogCX0KIAotCS8qIFN0b3AgVFgvUlggRE1BICovCi0Jc3RtbWFjX3N0b3BfYWxsX2RtYShwcml2KTsKLQotCXN0bW1hY19sZWdhY3lfc2VyZGVzX3Bvd2VyX2Rvd24ocHJpdik7Ci0KIAkvKiBFbmFibGUgUG93ZXIgZG93biBtb2RlIGJ5IHByb2dyYW1taW5nIHRoZSBQTVQgcmVncyAqLwogCWlmIChwcml2LSZndDt3b2xvcHRzKSB7CiYjNDM7CQlzdG1tYWNfc3RvcF9hbGxfZG1hKHByaXYpOwomIzQzOwkJc3RtbWFjX2xlZ2FjeV9zZXJkZXNfcG93ZXJfZG93bihwcml2KTsKIAkJc3RtbWFjX3BtdChwcml2LCBwcml2LSZndDtodywgcHJpdi0mZ3Q7d29sb3B0cyk7CiAJCXByaXYtJmd0O2lycV93YWtlID0gMTsKIAl9IGVsc2UgewotCQlzdG1tYWNfbWFjX3NldChwcml2LCBwcml2LSZndDtpb2FkZHIsIGZhbHNlKTsKJiM0MzsJCXN0bW1hY19kYXRhcGF0aF90ZWFyZG93bihwcml2KTsKJiM0MzsJCXN0bW1hY19sZWdhY3lfc2VyZGVzX3Bvd2VyX2Rvd24ocHJpdik7CiAJCXBpbmN0cmxfcG1fc2VsZWN0X3NsZWVwX3N0YXRlKHByaXYtJmd0O2RldmljZSk7CiAJfQogCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYxLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNCAwNjozODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA3MzgxCgkJCQkJCQlvdXRwdXQ6IDE2NQoJCQkJCQkJdGhvdWdodHM6IDM2NwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBc3Nlc3NtZW50IG9mIHRoZSBTVE1NQUMgRHJpdmVyIFBhdGNoKioKCkFscmlnaHQsIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIFRoaXMgcGF0Y2ggaXMgZm9jdXNlZCBzb2xlbHkgb24gdGhlIGludGVybmFsIHdvcmtpbmdzIG9mIHRoZSBgc3RtbWFjYCBkcml2ZXIsIHNwZWNpZmljYWxseSB0aGUgYGR3eGdtYWMyYCB2YXJpYW50LiBJdCYjMzk7cyBhYm91dCBlbnN1cmluZyBhIHByb3Blciwgb3JkZXJlZCBzaHV0ZG93biBzZXF1ZW5jZSBmb3IgdGhlIGRhdGFwYXRoLiBJIHNlZSB0aGF0IHRoZXkmIzM5O3ZlIGFkZGVkIHRoZXNlIG5ldyBwb2xsaW5nIGZ1bmN0aW9uczogYGR3eGdtYWMyX3R4X2RtYV9zdG9wcGVkYCwgYGR3eGdtYWMyX3R4X210bF9kcmFpbmAsIGBkd3hnbWFjMl9yeF9tdGxfZHJhaW5gLCBhbmQgYGR3eGdtYWMyX3J4X2RtYV9zdG9wcGVkYC4gVGhlc2Ugd2lsbCBwb2xsIGhhcmR3YXJlIHJlZ2lzdGVycyB0byBjaGVjayB0aGUgc3RhdGUgb2YgdGhlIHN5c3RlbS4KClRoZSBjb3JlIG9mIHRoZSBjaGFuZ2UgbGllcyBpbiB0aGUgYHN0bW1hY19kYXRhcGF0aF90ZWFyZG93bmAgZnVuY3Rpb24sIHdoaWNoIG9yY2hlc3RyYXRlcyB0aGUgY29udHJvbGxlZCBzaHV0ZG93bjogc3RvcHBpbmcgVFggRE1BLCB3YWl0aW5nIGZvciBjb21wbGV0aW9uLCBkcmFpbmluZyB0aGUgTVRMIFRYLCBkaXNhYmxpbmcgTUFDIFRYL1JYLCBkcmFpbmluZyB0aGUgTVRMIFJYLCBzdG9wcGluZyBSWCBETUEsIGFuZCB3YWl0aW5nIGFnYWluLiBJdCBpcyBhbHNvIG1vZGlmeWluZyB0aGUgb3JkZXIgb2YgZW5hYmxpbmcgYW5kIGRpc2FibGluZyBNQUMgYW5kIERNQSBpbiBzZXZlcmFsIGtleSBmdW5jdGlvbnMuIE5vdGhpbmcgcmV2b2x1dGlvbmFyeSBoZXJlLCBpdCBzZWVtcy4KCkdpdmVuIG15IHVuZGVyc3RhbmRpbmcgb2YgbmV0d29ya2luZyBzdGFja3MsIGl0JiMzOTtzIHByZXR0eSBjbGVhciB0aGlzIGlzIHB1cmVseSBhYm91dCBoYXJkd2FyZSBjb250cm9sIGZsb3csIHdoaWNoIGlzIHdoZXJlIHRoaW5ncyBnZXQgaW50ZXJlc3RpbmcuIE5vIG5ldyBkYXRhIHN0cnVjdHVyZXMgYXJlIGJlaW5nIGludHJvZHVjZWQgdGhhdCBhcmUgc2VudCB0byB1c2VyIHNwYWNlLCBubyBidWZmZXIgYWxsb2NhdGlvbnMsIG5vIG1lbW9yeS1yZWxhdGVkIGlzc3Vlcy4gVGhlIGZ1bmN0aW9ucyBzaW1wbHkgY2FsbCBgcmVhZGxfcG9sbF90aW1lb3V0YCwgd2l0aCBgdmFsdWVgIGluaXRpYWxpemVkIHByb3Blcmx5IHdpdGhpbi4gRnJvbSBteSBleHBlcnRpc2UsIHRoYXQgbWVhbnMgdGhlcmUgYXJlIG5vIGNvbmNlcm5zIGFib3V0IGluZm8tbGVha3MuCgpJJiMzOTt2ZSBjYXJlZnVsbHkgY29uc2lkZXJlZCB0aGUgcG90ZW50aWFsIGZvciB1bmluaXRpYWxpemVkIG1lbW9yeSBpc3N1ZXMsIGFuZCBJIGFtIGNvbmZpZGVudCB0aGF0IHRoZXJlIGFyZSBub25lIGJhc2VkIG9uIHRoZSBwYXRjaCBkZXNjcmlwdGlvbiBhbmQgbXkgYW5hbHlzaXMuIEdpdmVuIHRoaXMsIEkgY2FuIGNvbmZpZGVudGx5IHNldCBgTmVlZHNLTVNBTj1mYWxzZWAuIFRoaXMgb25lJiMzOTtzIGNsZWFuLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYyLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNCAwNjozODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgaGFyZHdhcmUgaW5pdGlhbGl6YXRpb24gYW5kIHRlYXJkb3duIHNlcXVlbmNlcyBpbiB0aGUgc3RtbWFjIGRyaXZlciwgaW50cm9kdWNpbmcgYW4gb3JkZXJlZCBkYXRhcGF0aCB0ZWFyZG93biB0byBwcm9wZXJseSBzdG9wIERNQSBhbmQgTUFDIG9wZXJhdGlvbnMuIEl0IGFkZHMgZnVuY3Rpb25zIHRvIHBvbGwgaGFyZHdhcmUgcmVnaXN0ZXJzIGZvciBzcGVjaWZpYyBzdGF0ZXMgKGUuZy4sIERNQSBzdG9wcGVkLCBNVEwgcXVldWVzIGRyYWluZWQpIHVzaW5nIGByZWFkbF9wb2xsX3RpbWVvdXRgLiBUaGVzZSBjaGFuZ2VzIGFyZSBwdXJlbHkgcmVsYXRlZCB0byBoYXJkd2FyZSBjb250cm9sIGZsb3cgYW5kIGRvIG5vdCBpbnRyb2R1Y2UgYW55IG5ldyBkYXRhIHN0cnVjdHVyZXMsIGJ1ZmZlciBhbGxvY2F0aW9ucywgb3IgZGF0YSBjb3BpZXMgdG8gdXNlciBzcGFjZS4gVGhlcmUgaXMgbm8gcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSBiZWluZyBleHBvc2VkIG9yIHVzZWQgaW4gY29udHJvbCBmbG93LiBTdGFuZGFyZCBLQVNBTiBhbmQgb3RoZXIgYnVnIGRldGVjdG9ycyBhcmUgc3VmZmljaWVudCB0byBjYXRjaCBhbnkgcG90ZW50aWFsIG1lbW9yeSBjb3JydXB0aW9uIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgdGhhdCBtaWdodCBhcmlzZSBmcm9tIGRyaXZlciB0ZWFyZG93biBpc3N1ZXMuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgaGFyZHdhcmUgaW5pdGlhbGl6YXRpb24gYW5kIHRlYXJkb3duIHNlcXVlbmNlcyBpbiB0aGUgc3RtbWFjIGRyaXZlciwgaW50cm9kdWNpbmcgYW4gb3JkZXJlZCBkYXRhcGF0aCB0ZWFyZG93biB0byBwcm9wZXJseSBzdG9wIERNQSBhbmQgTUFDIG9wZXJhdGlvbnMuIEl0IGFkZHMgZnVuY3Rpb25zIHRvIHBvbGwgaGFyZHdhcmUgcmVnaXN0ZXJzIGZvciBzcGVjaWZpYyBzdGF0ZXMgKGUuZy4sIERNQSBzdG9wcGVkLCBNVEwgcXVldWVzIGRyYWluZWQpIHVzaW5nIGByZWFkbF9wb2xsX3RpbWVvdXRgLiBUaGVzZSBjaGFuZ2VzIGFyZSBwdXJlbHkgcmVsYXRlZCB0byBoYXJkd2FyZSBjb250cm9sIGZsb3cgYW5kIGRvIG5vdCBpbnRyb2R1Y2UgYW55IG5ldyBkYXRhIHN0cnVjdHVyZXMsIGJ1ZmZlciBhbGxvY2F0aW9ucywgb3IgZGF0YSBjb3BpZXMgdG8gdXNlciBzcGFjZS4gVGhlcmUgaXMgbm8gcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSBiZWluZyBleHBvc2VkIG9yIHVzZWQgaW4gY29udHJvbCBmbG93LiBTdGFuZGFyZCBLQVNBTiBhbmQgb3RoZXIgYnVnIGRldGVjdG9ycyBhcmUgc3VmZmljaWVudCB0byBjYXRjaCBhbnkgcG90ZW50aWFsIG1lbW9yeSBjb3JydXB0aW9uIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgdGhhdCBtaWdodCBhcmlzZSBmcm9tIGRyaXZlciB0ZWFyZG93biBpc3N1ZXMuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE0VDA2OjM1OjMzLjk3MzgyOTkyOFoiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIwNDAyNTM4NjgzNSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJTVE1NQUNfRVRIXCIsXG4gICAgXCJTVE1NQUNfUENJXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwic3RtbWFjX2R2cl9yZW1vdmVcIixcbiAgICBcInN0bW1hY19zdXNwZW5kXCIsXG4gICAgXCJzdG1tYWNfcmVzdW1lXCIsXG4gICAgXCJzdG1tYWNfeGRwX29wZW5cIixcbiAgICBcInN0bW1hY194ZHBfcmVsZWFzZVwiLFxuICAgIFwic3RtbWFjX3JlaW5pdF9xdWV1ZXNcIixcbiAgICBcInN0bW1hY19yZWluaXRfcmluZ3BhcmFtXCJcbiAgXSxcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgaGFyZHdhcmUgaW5pdGlhbGl6YXRpb24gYW5kIHRlYXJkb3duIHNlcXVlbmNlcyBpbiB0aGUgc3RtbWFjIGRyaXZlciwgaW50cm9kdWNpbmcgYW4gb3JkZXJlZCBkYXRhcGF0aCB0ZWFyZG93biB0byBwcm9wZXJseSBzdG9wIERNQSBhbmQgTUFDIG9wZXJhdGlvbnMuIEl0IGFkZHMgZnVuY3Rpb25zIHRvIHBvbGwgaGFyZHdhcmUgcmVnaXN0ZXJzIGZvciBzcGVjaWZpYyBzdGF0ZXMgKGUuZy4sIERNQSBzdG9wcGVkLCBNVEwgcXVldWVzIGRyYWluZWQpIHVzaW5nIGByZWFkbF9wb2xsX3RpbWVvdXRgLiBUaGVzZSBjaGFuZ2VzIGFyZSBwdXJlbHkgcmVsYXRlZCB0byBoYXJkd2FyZSBjb250cm9sIGZsb3cgYW5kIGRvIG5vdCBpbnRyb2R1Y2UgYW55IG5ldyBkYXRhIHN0cnVjdHVyZXMsIGJ1ZmZlciBhbGxvY2F0aW9ucywgb3IgZGF0YSBjb3BpZXMgdG8gdXNlciBzcGFjZS4gVGhlcmUgaXMgbm8gcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSBiZWluZyBleHBvc2VkIG9yIHVzZWQgaW4gY29udHJvbCBmbG93LiBTdGFuZGFyZCBLQVNBTiBhbmQgb3RoZXIgYnVnIGRldGVjdG9ycyBhcmUgc3VmZmljaWVudCB0byBjYXRjaCBhbnkgcG90ZW50aWFsIG1lbW9yeSBjb3JydXB0aW9uIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgdGhhdCBtaWdodCBhcmlzZSBmcm9tIGRyaXZlciB0ZWFyZG93biBpc3N1ZXMuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIG5ldyBvcmRlcmVkIGRhdGFwYXRoIHRlYXJkb3duIHNlcXVlbmNlIGZvciBhbGwgc3RtbWFjIGRldmljZXMsIGNoYW5naW5nIHRoZSBvcmRlciBvZiBETUEgc3RvcCBhbmQgTUFDIGRpc2FibGUgb3BlcmF0aW9ucy4gSXQgYWxzbyBzd2FwcyB0aGUgb3JkZXIgb2YgTUFDIGVuYWJsZSBhbmQgRE1BIHN0YXJ0IGluIHRoZSBzZXR1cCBwYXRocy4gVGhlc2UgYXJlIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUgY29yZSBkcml2ZXIgbG9naWMgcmVhY2hhYmxlIHZpYSBQQ0kgZW11bGF0aW9uLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xNFQwNjozNTozMy45NzM4MzUxNDhaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjM3NzYyMDM5MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IGEwOGZmMzRjYjJjZDJkMjljMWUyNjE1ZGQxNDQ4MGNjYjJkODcwZmJcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIEZyaSBBdWcgMTQgMDY6MzU6MzIgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHd4Z21hYzIuaCBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3eGdtYWMyLmhcXG5pbmRleCBmOGFiMzQ3ZjdiNWI5Li41MGY5Y2NkNGE5YzQ2IDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3eGdtYWMyLmhcXG4rKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd3hnbWFjMi5oXFxuQEAgLTI5MSw2ICsyOTEsMTAgQEBcXG4gI2RlZmluZSBYR01BQ19UVENcXHRcXHRcXHRHRU5NQVNLKDYsIDQpXFxuICNkZWZpbmUgWEdNQUNfVFhRRU5cXHRcXHRcXHRHRU5NQVNLKDMsIDIpXFxuICNkZWZpbmUgWEdNQUNfVFNGXFx0XFx0XFx0QklUKDEpXFxuKyNkZWZpbmUgWEdNQUNfTVRMX1RYUV9ERUJVRyh4KVxcdFxcdCgweDAwMDAxMTA4ICsgKDB4ODAgKiAoeCkpKVxcbisjZGVmaW5lIFhHTUFDX1RYUVNUU1xcdFxcdFxcdEJJVCg0KVxcbisjZGVmaW5lIFhHTUFDX1RSQ1NUU1xcdFxcdFxcdEdFTk1BU0soMiwgMSlcXG4rI2RlZmluZSBYR01BQ19UUkNTVFNfUkVBRFxcdFxcdDB4MVxcbiAjZGVmaW5lIFhHTUFDX01UTF9UQ3hfRVRTX0NPTlRST0woeClcXHQoMHgwMDAwMTExMCArICgweDgwICogKHgpKSlcXG4gI2RlZmluZSBYR01BQ19NVExfVEN4X1FVQU5UVU1fV0VJR0hUKHgpXFx0KDB4MDAwMDExMTggKyAoMHg4MCAqICh4KSkpXFxuICNkZWZpbmUgWEdNQUNfTVRMX1RDeF9TRU5EU0xPUEUoeClcXHQoMHgwMDAwMTExYyArICgweDgwICogKHgpKSlcXG5AQCAtMzA2LDYgKzMxMCw5IEBAXFxuICNkZWZpbmUgWEdNQUNfRUhGQ1xcdFxcdFxcdEJJVCg3KVxcbiAjZGVmaW5lIFhHTUFDX1JTRlxcdFxcdFxcdEJJVCg1KVxcbiAjZGVmaW5lIFhHTUFDX1JUQ1xcdFxcdFxcdEdFTk1BU0soMSwgMClcXG4rI2RlZmluZSBYR01BQ19NVExfUlhRX0RFQlVHKHgpXFx0XFx0KDB4MDAwMDExNDggKyAoMHg4MCAqICh4KSkpXFxuKyNkZWZpbmUgWEdNQUNfUFJYUVxcdFxcdFxcdEdFTk1BU0soMjksIDE2KVxcbisjZGVmaW5lIFhHTUFDX1JYUVNUU1xcdFxcdFxcdEdFTk1BU0soNSwgNClcXG4gI2RlZmluZSBYR01BQ19NVExfUlhRX0ZMT1dfQ09OVFJPTCh4KVxcdCgweDAwMDAxMTUwICsgKDB4ODAgKiAoeCkpKVxcbiAjZGVmaW5lIFhHTUFDX1JGRFxcdFxcdFxcdEdFTk1BU0soMzEsIDE3KVxcbiAjZGVmaW5lIFhHTUFDX1JGQVxcdFxcdFxcdEdFTk1BU0soMTUsIDEpXFxuQEAgLTM5MSw2ICszOTgsNyBAQFxcbiAjZGVmaW5lIFhHTUFDX05JU1xcdFxcdFxcdEJJVCgxNSlcXG4gI2RlZmluZSBYR01BQ19BSVNcXHRcXHRcXHRCSVQoMTQpXFxuICNkZWZpbmUgWEdNQUNfRkJFXFx0XFx0XFx0QklUKDEyKVxcbisjZGVmaW5lIFhHTUFDX1JQU1xcdFxcdFxcdEJJVCg4KVxcbiAjZGVmaW5lIFhHTUFDX1JCVVxcdFxcdFxcdEJJVCg3KVxcbiAjZGVmaW5lIFhHTUFDX1JJXFx0XFx0XFx0QklUKDYpXFxuICNkZWZpbmUgWEdNQUNfVEJVXFx0XFx0XFx0QklUKDIpXFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3eGdtYWMyX2RtYS5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHd4Z21hYzJfZG1hLmNcXG5pbmRleCBmZjgzODU4ZWJjMWYzLi5iYTRmNTM1ZmI5ZWI0IDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3eGdtYWMyX2RtYS5jXFxuKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHd4Z21hYzJfZG1hLmNcXG5AQCAtNCw2ICs0LDcgQEBcXG4gICogc3RtbWFjIFhHTUFDIHN1cHBvcnQuXFxuICAqL1xcbiBcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2JpdGZpZWxkLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9pb3BvbGwuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFxcInN0bW1hYy5oXFxcIlxcbiAjaW5jbHVkZSBcXFwiZHd4Z21hYzIuaFxcXCJcXG5AQCAtMjYxLDEzICsyNjIsMTIgQEAgc3RhdGljIHZvaWQgZHd4Z21hYzJfZG1hX3N0YXJ0X3R4KHN0cnVjdCBzdG1tYWNfcHJpdiAqcHJpdixcXG4ge1xcbiBcXHR1MzIgdmFsdWU7XFxuIFxcbitcXHQvKiBUUFMgaXMgbGF0Y2hlZCBvbmNlIHNldCwgc28gY2xlYXIgaXQgb24gZXZlcnkgVHggRE1BIHN0YXJ0LiAqL1xcbitcXHR3cml0ZWwoWEdNQUNfVFBTLCBpb2FkZHIgKyBYR01BQ19ETUFfQ0hfU1RBVFVTKGNoYW4pKTtcXG4rXFxuIFxcdHZhbHVlID0gcmVhZGwoaW9hZGRyICsgWEdNQUNfRE1BX0NIX1RYX0NPTlRST0woY2hhbikpO1xcbiBcXHR2YWx1ZSB8PSBYR01BQ19UWFNUO1xcbiBcXHR3cml0ZWwodmFsdWUsIGlvYWRkciArIFhHTUFDX0RNQV9DSF9UWF9DT05UUk9MKGNoYW4pKTtcXG4tXFxuLVxcdHZhbHVlID0gcmVhZGwoaW9hZGRyICsgWEdNQUNfVFhfQ09ORklHKTtcXG4tXFx0dmFsdWUgfD0gWEdNQUNfQ09ORklHX1RFO1xcbi1cXHR3cml0ZWwodmFsdWUsIGlvYWRkciArIFhHTUFDX1RYX0NPTkZJRyk7XFxuIH1cXG4gXFxuIHN0YXRpYyB2b2lkIGR3eGdtYWMyX2RtYV9zdG9wX3R4KHN0cnVjdCBzdG1tYWNfcHJpdiAqcHJpdiwgdm9pZCBfX2lvbWVtICppb2FkZHIsXFxuQEAgLTI3OCwxMCArMjc4LDYgQEAgc3RhdGljIHZvaWQgZHd4Z21hYzJfZG1hX3N0b3BfdHgoc3RydWN0IHN0bW1hY19wcml2ICpwcml2LCB2b2lkIF9faW9tZW0gKmlvYWRkcixcXG4gXFx0dmFsdWUgPSByZWFkbChpb2FkZHIgKyBYR01BQ19ETUFfQ0hfVFhfQ09OVFJPTChjaGFuKSk7XFxuIFxcdHZhbHVlIFxcdTAwMjY9IH5YR01BQ19UWFNUO1xcbiBcXHR3cml0ZWwodmFsdWUsIGlvYWRkciArIFhHTUFDX0RNQV9DSF9UWF9DT05UUk9MKGNoYW4pKTtcXG4tXFxuLVxcdHZhbHVlID0gcmVhZGwoaW9hZGRyICsgWEdNQUNfVFhfQ09ORklHKTtcXG4tXFx0dmFsdWUgXFx1MDAyNj0gflhHTUFDX0NPTkZJR19URTtcXG4tXFx0d3JpdGVsKHZhbHVlLCBpb2FkZHIgKyBYR01BQ19UWF9DT05GSUcpO1xcbiB9XFxuIFxcbiBzdGF0aWMgdm9pZCBkd3hnbWFjMl9kbWFfc3RhcnRfcngoc3RydWN0IHN0bW1hY19wcml2ICpwcml2LFxcbkBAIC0yODksMTMgKzI4NSwxMiBAQCBzdGF0aWMgdm9pZCBkd3hnbWFjMl9kbWFfc3RhcnRfcngoc3RydWN0IHN0bW1hY19wcml2ICpwcml2LFxcbiB7XFxuIFxcdHUzMiB2YWx1ZTtcXG4gXFxuK1xcdC8qIFJQUyBpcyBsYXRjaGVkIG9uY2Ugc2V0LCBzbyBjbGVhciBpdCBvbiBldmVyeSBSeCBETUEgc3RhcnQuICovXFxuK1xcdHdyaXRlbChYR01BQ19SUFMsIGlvYWRkciArIFhHTUFDX0RNQV9DSF9TVEFUVVMoY2hhbikpO1xcbitcXG4gXFx0dmFsdWUgPSByZWFkbChpb2FkZHIgKyBYR01BQ19ETUFfQ0hfUlhfQ09OVFJPTChjaGFuKSk7XFxuIFxcdHZhbHVlIHw9IFhHTUFDX1JYU1Q7XFxuIFxcdHdyaXRlbCh2YWx1ZSwgaW9hZGRyICsgWEdNQUNfRE1BX0NIX1JYX0NPTlRST0woY2hhbikpO1xcbi1cXG4tXFx0dmFsdWUgPSByZWFkbChpb2FkZHIgKyBYR01BQ19SWF9DT05GSUcpO1xcbi1cXHR2YWx1ZSB8PSBYR01BQ19DT05GSUdfUkU7XFxuLVxcdHdyaXRlbCh2YWx1ZSwgaW9hZGRyICsgWEdNQUNfUlhfQ09ORklHKTtcXG4gfVxcbiBcXG4gc3RhdGljIHZvaWQgZHd4Z21hYzJfZG1hX3N0b3Bfcngoc3RydWN0IHN0bW1hY19wcml2ICpwcml2LCB2b2lkIF9faW9tZW0gKmlvYWRkcixcXG5AQCAtNTkyLDYgKzU4Nyw3NyBAQCBzdGF0aWMgaW50IGR3eGdtYWMyX2VuYWJsZV90YnMoc3RydWN0IHN0bW1hY19wcml2ICpwcml2LCB2b2lkIF9faW9tZW0gKmlvYWRkcixcXG4gXFx0cmV0dXJuIDA7XFxuIH1cXG4gXFxuK3N0YXRpYyBpbnQgZHd4Z21hYzJfdHhfZG1hX3N0b3BwZWQoc3RydWN0IHN0bW1hY19wcml2ICpwcml2LFxcbitcXHRcXHRcXHRcXHQgICB2b2lkIF9faW9tZW0gKmlvYWRkciwgdTMyIGNoYW4pXFxuK3tcXG4rXFx0dTMyIHZhbHVlO1xcbitcXHRpbnQgcmV0O1xcbitcXG4rXFx0cmV0ID0gcmVhZGxfcG9sbF90aW1lb3V0KGlvYWRkciArIFhHTUFDX0RNQV9DSF9TVEFUVVMoY2hhbiksIHZhbHVlLFxcbitcXHRcXHRcXHRcXHQgdmFsdWUgXFx1MDAyNiBYR01BQ19UUFMsIDEwMCwgMTAwMDApO1xcbitcXHRpZiAocmV0KVxcbitcXHRcXHRuZXRkZXZfd2Fybihwcml2LVxcdTAwM2VkZXYsIFxcXCJUeCBETUEgY2hhbm5lbCAldSBzdG9wIHRpbWVvdXRcXFxcblxcXCIsXFxuK1xcdFxcdFxcdCAgICBjaGFuKTtcXG4rXFxuK1xcdHJldHVybiByZXQ7XFxuK31cXG4rXFxuK3N0YXRpYyBpbnQgZHd4Z21hYzJfdHhfbXRsX2RyYWluKHN0cnVjdCBzdG1tYWNfcHJpdiAqcHJpdixcXG4rXFx0XFx0XFx0XFx0IHZvaWQgX19pb21lbSAqaW9hZGRyLCB1MzIgcXVldWUpXFxuK3tcXG4rXFx0dTMyIHZhbHVlO1xcbitcXHRpbnQgcmV0O1xcbitcXG4rXFx0LyogV2FpdCB1bnRpbCB0aGUgcXVldWUgaXMgZW1wdHkgYW5kIGl0cyByZWFkIGNvbnRyb2xsZXIgaXMgbm8gbG9uZ2VyXFxuK1xcdCAqIHB1bGxpbmcgYSBmcmFtZSBvdXQgdG93YXJkcyB0aGUgTUFDLlxcbitcXHQgKi9cXG4rXFx0cmV0ID0gcmVhZGxfcG9sbF90aW1lb3V0KGlvYWRkciArIFhHTUFDX01UTF9UWFFfREVCVUcocXVldWUpLCB2YWx1ZSxcXG4rXFx0XFx0XFx0XFx0ICEodmFsdWUgXFx1MDAyNiBYR01BQ19UWFFTVFMpIFxcdTAwMjZcXHUwMDI2XFxuK1xcdFxcdFxcdFxcdCBGSUVMRF9HRVQoWEdNQUNfVFJDU1RTLCB2YWx1ZSkgIT1cXG4rXFx0XFx0XFx0XFx0IFhHTUFDX1RSQ1NUU19SRUFELFxcbitcXHRcXHRcXHRcXHQgMTAwLCAxMDAwMCk7XFxuK1xcdGlmIChyZXQpXFxuK1xcdFxcdG5ldGRldl93YXJuKHByaXYtXFx1MDAzZWRldiwgXFxcIk1UTCBUeCBxdWV1ZSAldSBkcmFpbiB0aW1lb3V0XFxcXG5cXFwiLFxcbitcXHRcXHRcXHQgICAgcXVldWUpO1xcbitcXG4rXFx0cmV0dXJuIHJldDtcXG4rfVxcbitcXG4rc3RhdGljIGludCBkd3hnbWFjMl9yeF9tdGxfZHJhaW4oc3RydWN0IHN0bW1hY19wcml2ICpwcml2LFxcbitcXHRcXHRcXHRcXHQgdm9pZCBfX2lvbWVtICppb2FkZHIsIHUzMiBxdWV1ZSlcXG4re1xcbitcXHR1MzIgdmFsdWU7XFxuK1xcdGludCByZXQ7XFxuK1xcbitcXHQvKiBXYWl0IHVudGlsIG5vIHBhY2tldCBpcyBsZWZ0IGluIHRoZSBxdWV1ZSBhbmQgdGhlIHF1ZXVlIHJlcG9ydHNcXG4rXFx0ICogaXRzZWxmIGVtcHR5LlxcbitcXHQgKi9cXG4rXFx0cmV0ID0gcmVhZGxfcG9sbF90aW1lb3V0KGlvYWRkciArIFhHTUFDX01UTF9SWFFfREVCVUcocXVldWUpLCB2YWx1ZSxcXG4rXFx0XFx0XFx0XFx0ICFGSUVMRF9HRVQoWEdNQUNfUFJYUSwgdmFsdWUpIFxcdTAwMjZcXHUwMDI2XFxuK1xcdFxcdFxcdFxcdCAhRklFTERfR0VUKFhHTUFDX1JYUVNUUywgdmFsdWUpLFxcbitcXHRcXHRcXHRcXHQgMTAwLCAxMDAwMCk7XFxuK1xcdGlmIChyZXQpXFxuK1xcdFxcdG5ldGRldl93YXJuKHByaXYtXFx1MDAzZWRldiwgXFxcIk1UTCBSeCBxdWV1ZSAldSBkcmFpbiB0aW1lb3V0XFxcXG5cXFwiLFxcbitcXHRcXHRcXHQgICAgcXVldWUpO1xcbitcXG4rXFx0cmV0dXJuIHJldDtcXG4rfVxcbitcXG4rc3RhdGljIGludCBkd3hnbWFjMl9yeF9kbWFfc3RvcHBlZChzdHJ1Y3Qgc3RtbWFjX3ByaXYgKnByaXYsXFxuK1xcdFxcdFxcdFxcdCAgIHZvaWQgX19pb21lbSAqaW9hZGRyLCB1MzIgY2hhbilcXG4re1xcbitcXHR1MzIgdmFsdWU7XFxuK1xcdGludCByZXQ7XFxuK1xcbitcXHRyZXQgPSByZWFkbF9wb2xsX3RpbWVvdXQoaW9hZGRyICsgWEdNQUNfRE1BX0NIX1NUQVRVUyhjaGFuKSwgdmFsdWUsXFxuK1xcdFxcdFxcdFxcdCB2YWx1ZSBcXHUwMDI2IFhHTUFDX1JQUywgMTAwLCAxMDAwMCk7XFxuK1xcdGlmIChyZXQpXFxuK1xcdFxcdG5ldGRldl93YXJuKHByaXYtXFx1MDAzZWRldiwgXFxcIlJ4IERNQSBjaGFubmVsICV1IHN0b3AgdGltZW91dFxcXFxuXFxcIixcXG4rXFx0XFx0XFx0ICAgIGNoYW4pO1xcbitcXG4rXFx0cmV0dXJuIHJldDtcXG4rfVxcbitcXG4gY29uc3Qgc3RydWN0IHN0bW1hY19kbWFfb3BzIGR3eGdtYWMyMTBfZG1hX29wcyA9IHtcXG4gXFx0LnJlc2V0ID0gZHd4Z21hYzJfZG1hX3Jlc2V0LFxcbiBcXHQuaW5pdCA9IGR3eGdtYWMyX2RtYV9pbml0LFxcbkBAIC02MjAsNCArNjg2LDggQEAgY29uc3Qgc3RydWN0IHN0bW1hY19kbWFfb3BzIGR3eGdtYWMyMTBfZG1hX29wcyA9IHtcXG4gXFx0LnNldF9iZnNpemUgPSBkd3hnbWFjMl9zZXRfYmZzaXplLFxcbiBcXHQuZW5hYmxlX3NwaCA9IGR3eGdtYWMyX2VuYWJsZV9zcGgsXFxuIFxcdC5lbmFibGVfdGJzID0gZHd4Z21hYzJfZW5hYmxlX3RicyxcXG4rXFx0LnR4X2RtYV9zdG9wcGVkID0gZHd4Z21hYzJfdHhfZG1hX3N0b3BwZWQsXFxuK1xcdC50eF9tdGxfZHJhaW4gPSBkd3hnbWFjMl90eF9tdGxfZHJhaW4sXFxuK1xcdC5yeF9tdGxfZHJhaW4gPSBkd3hnbWFjMl9yeF9tdGxfZHJhaW4sXFxuK1xcdC5yeF9kbWFfc3RvcHBlZCA9IGR3eGdtYWMyX3J4X2RtYV9zdG9wcGVkLFxcbiB9O1xcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9od2lmLmggYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9od2lmLmhcXG5pbmRleCAwNGRhZmVjMDIxYjRmLi44NmY0YWE4ODk2MWM3IDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2h3aWYuaFxcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2h3aWYuaFxcbkBAIC0yMzEsNiArMjMxLDE1IEBAIHN0cnVjdCBzdG1tYWNfZG1hX29wcyB7XFxuIFxcdFxcdFxcdCAgIGJvb2wgZW4sIHUzMiBjaGFuKTtcXG4gXFx0aW50ICgqZW5hYmxlX3Ricykoc3RydWN0IHN0bW1hY19wcml2ICpwcml2LCB2b2lkIF9faW9tZW0gKmlvYWRkcixcXG4gXFx0XFx0XFx0ICBib29sIGVuLCB1MzIgY2hhbik7XFxuK1xcdC8qIE9yZGVyZWQgZGF0YXBhdGggdGVhcmRvd24gKi9cXG4rXFx0aW50ICgqdHhfZG1hX3N0b3BwZWQpKHN0cnVjdCBzdG1tYWNfcHJpdiAqcHJpdiwgdm9pZCBfX2lvbWVtICppb2FkZHIsXFxuK1xcdFxcdFxcdCAgICAgIHUzMiBjaGFuKTtcXG4rXFx0aW50ICgqdHhfbXRsX2RyYWluKShzdHJ1Y3Qgc3RtbWFjX3ByaXYgKnByaXYsIHZvaWQgX19pb21lbSAqaW9hZGRyLFxcbitcXHRcXHRcXHQgICAgdTMyIHF1ZXVlKTtcXG4rXFx0aW50ICgqcnhfbXRsX2RyYWluKShzdHJ1Y3Qgc3RtbWFjX3ByaXYgKnByaXYsIHZvaWQgX19pb21lbSAqaW9hZGRyLFxcbitcXHRcXHRcXHQgICAgdTMyIHF1ZXVlKTtcXG4rXFx0aW50ICgqcnhfZG1hX3N0b3BwZWQpKHN0cnVjdCBzdG1tYWNfcHJpdiAqcHJpdiwgdm9pZCBfX2lvbWVtICppb2FkZHIsXFxuK1xcdFxcdFxcdCAgICAgIHUzMiBjaGFuKTtcXG4gfTtcXG4gXFxuICNkZWZpbmUgc3RtbWFjX2RtYV9pbml0KF9fcHJpdiwgX19hcmdzLi4uKSBcXFxcXFxuQEAgLTI5Myw2ICszMDIsMTQgQEAgc3RydWN0IHN0bW1hY19kbWFfb3BzIHtcXG4gXFx0c3RtbWFjX2RvX3ZvaWRfY2FsbGJhY2soX19wcml2LCBkbWEsIGVuYWJsZV9zcGgsIF9fcHJpdiwgX19hcmdzKVxcbiAjZGVmaW5lIHN0bW1hY19lbmFibGVfdGJzKF9fcHJpdiwgX19hcmdzLi4uKSBcXFxcXFxuIFxcdHN0bW1hY19kb19jYWxsYmFjayhfX3ByaXYsIGRtYSwgZW5hYmxlX3RicywgX19wcml2LCBfX2FyZ3MpXFxuKyNkZWZpbmUgc3RtbWFjX3R4X2RtYV9zdG9wcGVkKF9fcHJpdiwgX19hcmdzLi4uKSBcXFxcXFxuK1xcdHN0bW1hY19kb19jYWxsYmFjayhfX3ByaXYsIGRtYSwgdHhfZG1hX3N0b3BwZWQsIF9fcHJpdiwgX19hcmdzKVxcbisjZGVmaW5lIHN0bW1hY190eF9tdGxfZHJhaW4oX19wcml2LCBfX2FyZ3MuLi4pIFxcXFxcXG4rXFx0c3RtbWFjX2RvX2NhbGxiYWNrKF9fcHJpdiwgZG1hLCB0eF9tdGxfZHJhaW4sIF9fcHJpdiwgX19hcmdzKVxcbisjZGVmaW5lIHN0bW1hY19yeF9tdGxfZHJhaW4oX19wcml2LCBfX2FyZ3MuLi4pIFxcXFxcXG4rXFx0c3RtbWFjX2RvX2NhbGxiYWNrKF9fcHJpdiwgZG1hLCByeF9tdGxfZHJhaW4sIF9fcHJpdiwgX19hcmdzKVxcbisjZGVmaW5lIHN0bW1hY19yeF9kbWFfc3RvcHBlZChfX3ByaXYsIF9fYXJncy4uLikgXFxcXFxcbitcXHRzdG1tYWNfZG9fY2FsbGJhY2soX19wcml2LCBkbWEsIHJ4X2RtYV9zdG9wcGVkLCBfX3ByaXYsIF9fYXJncylcXG4gXFxuIHN0cnVjdCBtYWNfZGV2aWNlX2luZm87XFxuIHN0cnVjdCBuZXRfZGV2aWNlO1xcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfbWFpbi5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX21haW4uY1xcbmluZGV4IGIyYjdkMDI0MmRkM2MuLjljM2E4ZjEyMmI5NGYgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX21haW4uY1xcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19tYWluLmNcXG5AQCAtMjU2MCw2ICsyNTYwLDUyIEBAIHN0YXRpYyB2b2lkIHN0bW1hY19zdG9wX2FsbF9kbWEoc3RydWN0IHN0bW1hY19wcml2ICpwcml2KVxcbiBcXHRcXHRzdG1tYWNfZGVpbml0X2NoYW4ocHJpdiwgcHJpdi1cXHUwMDNlaW9hZGRyLCBjaGFuKTtcXG4gfVxcbiBcXG4rLyoqXFxuKyAqIHN0bW1hY19kYXRhcGF0aF90ZWFyZG93biAtIG9yZGVyZWQgZGF0YXBhdGggdGVhcmRvd24gYXMgcGVyIElQIHNwZWNpZmljYXRpb25cXG4rICogQHByaXY6IGRyaXZlciBwcml2YXRlIHN0cnVjdHVyZVxcbisgKiBEZXNjcmlwdGlvbjpcXG4rICogV2hlbiB0ZWFyZG93biBvcHMgYXJlIGF2YWlsYWJsZSwgZm9sbG93IHRoZSBkYXRhYm9vayBvcmRlcmVkIHRlYXJkb3duXFxuKyAqIHNlcXVlbmNlLlxcbisgKiBGb2xsb3dzIHRoZSBsZWdhY3kgc3RvcCArIE1BQyBkaXNhYmxlIGZvciB2YXJpYW50cyB3aXRob3V0IHRoZSBmZWF0dXJlLlxcbisgKi9cXG4rc3RhdGljIHZvaWQgc3RtbWFjX2RhdGFwYXRoX3RlYXJkb3duKHN0cnVjdCBzdG1tYWNfcHJpdiAqcHJpdilcXG4re1xcbitcXHR1MzIgcnhfY2hhbm5lbHNfY291bnQgPSBwcml2LVxcdTAwM2VwbGF0LVxcdTAwM2VyeF9xdWV1ZXNfdG9fdXNlO1xcbitcXHR1MzIgdHhfY2hhbm5lbHNfY291bnQgPSBwcml2LVxcdTAwM2VwbGF0LVxcdTAwM2V0eF9xdWV1ZXNfdG9fdXNlO1xcbitcXHR1MzIgY2hhbjtcXG4rXFxuK1xcdC8qIFN0b3AgYWxsIFRYIERNQSBjaGFubmVscyAqL1xcbitcXHRmb3IgKGNoYW4gPSAwOyBjaGFuIFxcdTAwM2MgdHhfY2hhbm5lbHNfY291bnQ7IGNoYW4rKylcXG4rXFx0XFx0c3RtbWFjX3N0b3BfdHhfZG1hKHByaXYsIGNoYW4pO1xcbitcXG4rXFx0LyogV2FpdCBmb3IgZXZlcnkgVFggRE1BIGNoYW5uZWwgdG8gcmVwb3J0IGl0c2VsZiBzdG9wcGVkICovXFxuK1xcdGlmIChwcml2LVxcdTAwM2Vody1cXHUwMDNlZG1hLVxcdTAwM2V0eF9kbWFfc3RvcHBlZClcXG4rXFx0XFx0Zm9yIChjaGFuID0gMDsgY2hhbiBcXHUwMDNjIHR4X2NoYW5uZWxzX2NvdW50OyBjaGFuKyspXFxuK1xcdFxcdFxcdHN0bW1hY190eF9kbWFfc3RvcHBlZChwcml2LCBwcml2LVxcdTAwM2Vpb2FkZHIsIGNoYW4pO1xcbitcXG4rXFx0LyogV2FpdCBmb3IgdGhlIE1UTCBUWCBxdWV1ZXMgdG8gZmluaXNoIHB1c2hpbmcgaW50byB0aGUgTUFDICovXFxuK1xcdGlmIChwcml2LVxcdTAwM2Vody1cXHUwMDNlZG1hLVxcdTAwM2V0eF9tdGxfZHJhaW4pXFxuK1xcdFxcdGZvciAoY2hhbiA9IDA7IGNoYW4gXFx1MDAzYyB0eF9jaGFubmVsc19jb3VudDsgY2hhbisrKVxcbitcXHRcXHRcXHRzdG1tYWNfdHhfbXRsX2RyYWluKHByaXYsIHByaXYtXFx1MDAzZWlvYWRkciwgY2hhbik7XFxuK1xcbitcXHQvKiBEaXNhYmxlIHRoZSBNQUMgVFggYW5kIFJYICovXFxuK1xcdHN0bW1hY19tYWNfc2V0KHByaXYsIHByaXYtXFx1MDAzZWlvYWRkciwgZmFsc2UpO1xcbitcXG4rXFx0LyogV2FpdCBmb3IgdGhlIE1UTCBSWCBxdWV1ZXMgdG8gZHJhaW4gaW50byB0aGUgUlggRE1BICovXFxuK1xcdGlmIChwcml2LVxcdTAwM2Vody1cXHUwMDNlZG1hLVxcdTAwM2VyeF9tdGxfZHJhaW4pXFxuK1xcdFxcdGZvciAoY2hhbiA9IDA7IGNoYW4gXFx1MDAzYyByeF9jaGFubmVsc19jb3VudDsgY2hhbisrKVxcbitcXHRcXHRcXHRzdG1tYWNfcnhfbXRsX2RyYWluKHByaXYsIHByaXYtXFx1MDAzZWlvYWRkciwgY2hhbik7XFxuK1xcbitcXHQvKiBTdG9wIGFsbCBSWCBETUEgY2hhbm5lbHMgKi9cXG4rXFx0Zm9yIChjaGFuID0gMDsgY2hhbiBcXHUwMDNjIHJ4X2NoYW5uZWxzX2NvdW50OyBjaGFuKyspXFxuK1xcdFxcdHN0bW1hY19zdG9wX3J4X2RtYShwcml2LCBjaGFuKTtcXG4rXFxuK1xcdC8qIFdhaXQgZm9yIGV2ZXJ5IFJYIERNQSBjaGFubmVsIHRvIHJlcG9ydCBpdHNlbGYgc3RvcHBlZCAqL1xcbitcXHRpZiAocHJpdi1cXHUwMDNlaHctXFx1MDAzZWRtYS1cXHUwMDNlcnhfZG1hX3N0b3BwZWQpXFxuK1xcdFxcdGZvciAoY2hhbiA9IDA7IGNoYW4gXFx1MDAzYyByeF9jaGFubmVsc19jb3VudDsgY2hhbisrKVxcbitcXHRcXHRcXHRzdG1tYWNfcnhfZG1hX3N0b3BwZWQocHJpdiwgcHJpdi1cXHUwMDNlaW9hZGRyLCBjaGFuKTtcXG4rfVxcbitcXG4gLyoqXFxuICAqICBzdG1tYWNfZG1hX29wZXJhdGlvbl9tb2RlIC0gSFcgRE1BIG9wZXJhdGlvbiBtb2RlXFxuICAqICBAcHJpdjogZHJpdmVyIHByaXZhdGUgc3RydWN0dXJlXFxuQEAgLTM2ODUsOSArMzczMSw2IEBAIHN0YXRpYyBpbnQgc3RtbWFjX2h3X3NldHVwKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXFxuIFxcdFxcdHByaXYtXFx1MDAzZWh3LVxcdTAwM2VyeF9jc3VtID0gMDtcXG4gXFx0fVxcbiBcXG4tXFx0LyogRW5hYmxlIHRoZSBNQUMgUngvVHggKi9cXG4tXFx0c3RtbWFjX21hY19zZXQocHJpdiwgcHJpdi1cXHUwMDNlaW9hZGRyLCB0cnVlKTtcXG4tXFxuIFxcdC8qIFNldCB0aGUgSFcgRE1BIG1vZGUgYW5kIHRoZSBDT0UgKi9cXG4gXFx0c3RtbWFjX2RtYV9vcGVyYXRpb25fbW9kZShwcml2KTtcXG4gXFxuQEAgLTM3NDMsNiArMzc4Niw5IEBAIHN0YXRpYyBpbnQgc3RtbWFjX2h3X3NldHVwKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXFxuIFxcdC8qIFN0YXJ0IHRoZSBiYWxsIHJvbGxpbmcuLi4gKi9cXG4gXFx0c3RtbWFjX3N0YXJ0X2FsbF9kbWEocHJpdik7XFxuIFxcbitcXHQvKiBFbmFibGUgdGhlIE1BQyBSeC9UeCAqL1xcbitcXHRzdG1tYWNfbWFjX3NldChwcml2LCBwcml2LVxcdTAwM2Vpb2FkZHIsIHRydWUpO1xcbitcXG4gXFx0cGh5bGlua19yeF9jbGtfc3RvcF9ibG9jayhwcml2LVxcdTAwM2VwaHlsaW5rKTtcXG4gXFx0c3RtbWFjX3NldF9od192bGFuX21vZGUocHJpdiwgcHJpdi1cXHUwMDNlaHcpO1xcbiBcXHRwaHlsaW5rX3J4X2Nsa19zdG9wX3VuYmxvY2socHJpdi1cXHUwMDNlcGh5bGluayk7XFxuQEAgLTQyNDAsOSArNDI4Niw2IEBAIHN0YXRpYyB2b2lkIF9fc3RtbWFjX3JlbGVhc2Uoc3RydWN0IG5ldF9kZXZpY2UgKmRldilcXG4gXFx0c3RydWN0IHN0bW1hY19wcml2ICpwcml2ID0gbmV0ZGV2X3ByaXYoZGV2KTtcXG4gXFx0dTggY2hhbjtcXG4gXFxuLVxcdC8qIFN0b3AgYW5kIGRpc2Nvbm5lY3QgdGhlIFBIWSAqL1xcbi1cXHRwaHlsaW5rX3N0b3AocHJpdi1cXHUwMDNlcGh5bGluayk7XFxuLVxcbiBcXHRzdG1tYWNfZGlzYWJsZV9hbGxfcXVldWVzKHByaXYpO1xcbiBcXG4gXFx0Zm9yIChjaGFuID0gMDsgY2hhbiBcXHUwMDNjIHByaXYtXFx1MDAzZXBsYXQtXFx1MDAzZXR4X3F1ZXVlc190b191c2U7IGNoYW4rKylcXG5AQCAtNDI1Myw4ICs0Mjk2LDExIEBAIHN0YXRpYyB2b2lkIF9fc3RtbWFjX3JlbGVhc2Uoc3RydWN0IG5ldF9kZXZpY2UgKmRldilcXG4gXFx0LyogRnJlZSB0aGUgSVJRIGxpbmVzICovXFxuIFxcdHN0bW1hY19mcmVlX2lycShkZXYsIFJFUV9JUlFfRVJSX0FMTCwgMCk7XFxuIFxcbi1cXHQvKiBTdG9wIFRYL1JYIERNQSBhbmQgY2xlYXIgdGhlIGRlc2NyaXB0b3JzICovXFxuLVxcdHN0bW1hY19zdG9wX2FsbF9kbWEocHJpdik7XFxuK1xcdC8qIEhhcyB0byBydW4gYmVmb3JlIG1hY19saW5rX2Rvd24oKSBkaXNhYmxlcyB0aGUgTUFDLiAqL1xcbitcXHRzdG1tYWNfZGF0YXBhdGhfdGVhcmRvd24ocHJpdik7XFxuK1xcbitcXHQvKiBTdG9wIGFuZCBkaXNjb25uZWN0IHRoZSBQSFkgKi9cXG4rXFx0cGh5bGlua19zdG9wKHByaXYtXFx1MDAzZXBoeWxpbmspO1xcbiBcXG4gXFx0LyogUmVsZWFzZSBhbmQgZnJlZSB0aGUgUngvVHggcmVzb3VyY2VzICovXFxuIFxcdGZyZWVfZG1hX2Rlc2NfcmVzb3VyY2VzKHByaXYsIFxcdTAwMjZwcml2LVxcdTAwM2VkbWFfY29uZik7XFxuQEAgLTcxMDQsMTUgKzcxNTAsMTIgQEAgdm9pZCBzdG1tYWNfeGRwX3JlbGVhc2Uoc3RydWN0IG5ldF9kZXZpY2UgKmRldilcXG4gXFx0LyogRnJlZSB0aGUgSVJRIGxpbmVzICovXFxuIFxcdHN0bW1hY19mcmVlX2lycShkZXYsIFJFUV9JUlFfRVJSX0FMTCwgMCk7XFxuIFxcbi1cXHQvKiBTdG9wIFRYL1JYIERNQSBjaGFubmVscyAqL1xcbi1cXHRzdG1tYWNfc3RvcF9hbGxfZG1hKHByaXYpO1xcbitcXHQvKiBTdG9wIHRoZSBNQUMgYW5kIHRoZSBUWC9SWCBETUEgY2hhbm5lbHMgKi9cXG4rXFx0c3RtbWFjX2RhdGFwYXRoX3RlYXJkb3duKHByaXYpO1xcbiBcXG4gXFx0LyogUmVsZWFzZSBhbmQgZnJlZSB0aGUgUngvVHggcmVzb3VyY2VzICovXFxuIFxcdGZyZWVfZG1hX2Rlc2NfcmVzb3VyY2VzKHByaXYsIFxcdTAwMjZwcml2LVxcdTAwM2VkbWFfY29uZik7XFxuIFxcbi1cXHQvKiBEaXNhYmxlIHRoZSBNQUMgUngvVHggKi9cXG4tXFx0c3RtbWFjX21hY19zZXQocHJpdiwgcHJpdi1cXHUwMDNlaW9hZGRyLCBmYWxzZSk7XFxuLVxcbiBcXHQvKiBzZXQgdHJhbnNfc3RhcnQgc28gd2UgZG9uJ3QgZ2V0IHNwdXJpb3VzXFxuIFxcdCAqIHdhdGNoZG9ncyBkdXJpbmcgcmVzZXRcXG4gXFx0ICovXFxuQEAgLTcxODQsMTIgKzcyMjcsMTIgQEAgaW50IHN0bW1hY194ZHBfb3BlbihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxcbiBcXHRcXHRocnRpbWVyX3NldHVwKFxcdTAwMjZ0eF9xLVxcdTAwM2V0eHRpbWVyLCBzdG1tYWNfdHhfdGltZXIsIENMT0NLX01PTk9UT05JQywgSFJUSU1FUl9NT0RFX1JFTCk7XFxuIFxcdH1cXG4gXFxuLVxcdC8qIEVuYWJsZSB0aGUgTUFDIFJ4L1R4ICovXFxuLVxcdHN0bW1hY19tYWNfc2V0KHByaXYsIHByaXYtXFx1MDAzZWlvYWRkciwgdHJ1ZSk7XFxuLVxcbiBcXHQvKiBTdGFydCBSeCBcXHUwMDI2IFR4IERNQSBDaGFubmVscyAqL1xcbiBcXHRzdG1tYWNfc3RhcnRfYWxsX2RtYShwcml2KTtcXG4gXFxuK1xcdC8qIEVuYWJsZSB0aGUgTUFDIFJ4L1R4ICovXFxuK1xcdHN0bW1hY19tYWNfc2V0KHByaXYsIHByaXYtXFx1MDAzZWlvYWRkciwgdHJ1ZSk7XFxuK1xcbiBcXHRyZXQgPSBzdG1tYWNfcmVxdWVzdF9pcnEoZGV2KTtcXG4gXFx0aWYgKHJldClcXG4gXFx0XFx0Z290byBpcnFfZXJyb3I7XFxuQEAgLTgxOTAsMTcgKzgyMzMsMTUgQEAgaW50IHN0bW1hY19zdXNwZW5kKHN0cnVjdCBkZXZpY2UgKmRldilcXG4gXFx0XFx0dGltZXJfZGVsZXRlX3N5bmMoXFx1MDAyNnByaXYtXFx1MDAzZWVlZV9jdHJsX3RpbWVyKTtcXG4gXFx0fVxcbiBcXG4tXFx0LyogU3RvcCBUWC9SWCBETUEgKi9cXG4tXFx0c3RtbWFjX3N0b3BfYWxsX2RtYShwcml2KTtcXG4tXFxuLVxcdHN0bW1hY19sZWdhY3lfc2VyZGVzX3Bvd2VyX2Rvd24ocHJpdik7XFxuLVxcbiBcXHQvKiBFbmFibGUgUG93ZXIgZG93biBtb2RlIGJ5IHByb2dyYW1taW5nIHRoZSBQTVQgcmVncyAqL1xcbiBcXHRpZiAocHJpdi1cXHUwMDNld29sb3B0cykge1xcbitcXHRcXHRzdG1tYWNfc3RvcF9hbGxfZG1hKHByaXYpO1xcbitcXHRcXHRzdG1tYWNfbGVnYWN5X3NlcmRlc19wb3dlcl9kb3duKHByaXYpO1xcbiBcXHRcXHRzdG1tYWNfcG10KHByaXYsIHByaXYtXFx1MDAzZWh3LCBwcml2LVxcdTAwM2V3b2xvcHRzKTtcXG4gXFx0XFx0cHJpdi1cXHUwMDNlaXJxX3dha2UgPSAxO1xcbiBcXHR9IGVsc2Uge1xcbi1cXHRcXHRzdG1tYWNfbWFjX3NldChwcml2LCBwcml2LVxcdTAwM2Vpb2FkZHIsIGZhbHNlKTtcXG4rXFx0XFx0c3RtbWFjX2RhdGFwYXRoX3RlYXJkb3duKHByaXYpO1xcbitcXHRcXHRzdG1tYWNfbGVnYWN5X3NlcmRlc19wb3dlcl9kb3duKHByaXYpO1xcbiBcXHRcXHRwaW5jdHJsX3BtX3NlbGVjdF9zbGVlcF9zdGF0ZShwcml2LVxcdTAwM2VkZXZpY2UpO1xcbiBcXHR9XFxuIFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xNFQwNjozNTozNC4zNTIxMzY0MzlaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJiZXN0LWV4cGVuc2l2ZSIsIkR1cmF0aW9uIjoxOTUyMDQ3NTIzMjEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiU1RNTUFDX0VUSFwiLFxuICAgIFwiU1RNTUFDX1BDSVwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInN0bW1hY19kdnJfcmVtb3ZlXCIsXG4gICAgXCJzdG1tYWNfc3VzcGVuZFwiLFxuICAgIFwic3RtbWFjX3Jlc3VtZVwiLFxuICAgIFwic3RtbWFjX3hkcF9vcGVuXCIsXG4gICAgXCJzdG1tYWNfeGRwX3JlbGVhc2VcIixcbiAgICBcInN0bW1hY19yZWluaXRfcXVldWVzXCIsXG4gICAgXCJzdG1tYWNfcmVpbml0X3JpbmdwYXJhbVwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGludHJvZHVjZXMgYSBuZXcgb3JkZXJlZCBkYXRhcGF0aCB0ZWFyZG93biBzZXF1ZW5jZSBmb3IgYWxsIHN0bW1hYyBkZXZpY2VzLCBjaGFuZ2luZyB0aGUgb3JkZXIgb2YgRE1BIHN0b3AgYW5kIE1BQyBkaXNhYmxlIG9wZXJhdGlvbnMuIEl0IGFsc28gc3dhcHMgdGhlIG9yZGVyIG9mIE1BQyBlbmFibGUgYW5kIERNQSBzdGFydCBpbiB0aGUgc2V0dXAgcGF0aHMuIFRoZXNlIGFyZSBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGNvcmUgZHJpdmVyIGxvZ2ljIHJlYWNoYWJsZSB2aWEgUENJIGVtdWxhdGlvbi5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG4tIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cbi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSlcbiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4gICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnNcbiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBBbHNvIGNoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlnc1xuICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzXG4gICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgYTA4ZmYzNGNiMmNkMmQyOWMxZTI2MTVkZDE0NDgwY2NiMmQ4NzBmYlxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBGcmkgQXVnIDE0IDA2OjM1OjMyIDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHd4Z21hYzIuaCBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3eGdtYWMyLmhcbmluZGV4IGY4YWIzNDdmN2I1YjkuLjUwZjljY2Q0YTljNDYgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd3hnbWFjMi5oXG4rKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd3hnbWFjMi5oXG5AQCAtMjkxLDYgKzI5MSwxMCBAQFxuICNkZWZpbmUgWEdNQUNfVFRDXHRcdFx0R0VOTUFTSyg2LCA0KVxuICNkZWZpbmUgWEdNQUNfVFhRRU5cdFx0XHRHRU5NQVNLKDMsIDIpXG4gI2RlZmluZSBYR01BQ19UU0ZcdFx0XHRCSVQoMSlcbisjZGVmaW5lIFhHTUFDX01UTF9UWFFfREVCVUcoeClcdFx0KDB4MDAwMDExMDggKyAoMHg4MCAqICh4KSkpXG4rI2RlZmluZSBYR01BQ19UWFFTVFNcdFx0XHRCSVQoNClcbisjZGVmaW5lIFhHTUFDX1RSQ1NUU1x0XHRcdEdFTk1BU0soMiwgMSlcbisjZGVmaW5lIFhHTUFDX1RSQ1NUU19SRUFEXHRcdDB4MVxuICNkZWZpbmUgWEdNQUNfTVRMX1RDeF9FVFNfQ09OVFJPTCh4KVx0KDB4MDAwMDExMTAgKyAoMHg4MCAqICh4KSkpXG4gI2RlZmluZSBYR01BQ19NVExfVEN4X1FVQU5UVU1fV0VJR0hUKHgpXHQoMHgwMDAwMTExOCArICgweDgwICogKHgpKSlcbiAjZGVmaW5lIFhHTUFDX01UTF9UQ3hfU0VORFNMT1BFKHgpXHQoMHgwMDAwMTExYyArICgweDgwICogKHgpKSlcbkBAIC0zMDYsNiArMzEwLDkgQEBcbiAjZGVmaW5lIFhHTUFDX0VIRkNcdFx0XHRCSVQoNylcbiAjZGVmaW5lIFhHTUFDX1JTRlx0XHRcdEJJVCg1KVxuICNkZWZpbmUgWEdNQUNfUlRDXHRcdFx0R0VOTUFTSygxLCAwKVxuKyNkZWZpbmUgWEdNQUNfTVRMX1JYUV9ERUJVRyh4KVx0XHQoMHgwMDAwMTE0OCArICgweDgwICogKHgpKSlcbisjZGVmaW5lIFhHTUFDX1BSWFFcdFx0XHRHRU5NQVNLKDI5LCAxNilcbisjZGVmaW5lIFhHTUFDX1JYUVNUU1x0XHRcdEdFTk1BU0soNSwgNClcbiAjZGVmaW5lIFhHTUFDX01UTF9SWFFfRkxPV19DT05UUk9MKHgpXHQoMHgwMDAwMTE1MCArICgweDgwICogKHgpKSlcbiAjZGVmaW5lIFhHTUFDX1JGRFx0XHRcdEdFTk1BU0soMzEsIDE3KVxuICNkZWZpbmUgWEdNQUNfUkZBXHRcdFx0R0VOTUFTSygxNSwgMSlcbkBAIC0zOTEsNiArMzk4LDcgQEBcbiAjZGVmaW5lIFhHTUFDX05JU1x0XHRcdEJJVCgxNSlcbiAjZGVmaW5lIFhHTUFDX0FJU1x0XHRcdEJJVCgxNClcbiAjZGVmaW5lIFhHTUFDX0ZCRVx0XHRcdEJJVCgxMilcbisjZGVmaW5lIFhHTUFDX1JQU1x0XHRcdEJJVCg4KVxuICNkZWZpbmUgWEdNQUNfUkJVXHRcdFx0QklUKDcpXG4gI2RlZmluZSBYR01BQ19SSVx0XHRcdEJJVCg2KVxuICNkZWZpbmUgWEdNQUNfVEJVXHRcdFx0QklUKDIpXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHd4Z21hYzJfZG1hLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd3hnbWFjMl9kbWEuY1xuaW5kZXggZmY4Mzg1OGViYzFmMy4uYmE0ZjUzNWZiOWViNCAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3eGdtYWMyX2RtYS5jXG4rKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd3hnbWFjMl9kbWEuY1xuQEAgLTQsNiArNCw3IEBAXG4gICogc3RtbWFjIFhHTUFDIHN1cHBvcnQuXG4gICovXG4gXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvYml0ZmllbGQuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2lvcG9sbC5oXHUwMDNlXG4gI2luY2x1ZGUgXCJzdG1tYWMuaFwiXG4gI2luY2x1ZGUgXCJkd3hnbWFjMi5oXCJcbkBAIC0yNjEsMTMgKzI2MiwxMiBAQCBzdGF0aWMgdm9pZCBkd3hnbWFjMl9kbWFfc3RhcnRfdHgoc3RydWN0IHN0bW1hY19wcml2ICpwcml2LFxuIHtcbiBcdHUzMiB2YWx1ZTtcbiBcbitcdC8qIFRQUyBpcyBsYXRjaGVkIG9uY2Ugc2V0LCBzbyBjbGVhciBpdCBvbiBldmVyeSBUeCBETUEgc3RhcnQuICovXG4rXHR3cml0ZWwoWEdNQUNfVFBTLCBpb2FkZHIgKyBYR01BQ19ETUFfQ0hfU1RBVFVTKGNoYW4pKTtcbitcbiBcdHZhbHVlID0gcmVhZGwoaW9hZGRyICsgWEdNQUNfRE1BX0NIX1RYX0NPTlRST0woY2hhbikpO1xuIFx0dmFsdWUgfD0gWEdNQUNfVFhTVDtcbiBcdHdyaXRlbCh2YWx1ZSwgaW9hZGRyICsgWEdNQUNfRE1BX0NIX1RYX0NPTlRST0woY2hhbikpO1xuLVxuLVx0dmFsdWUgPSByZWFkbChpb2FkZHIgKyBYR01BQ19UWF9DT05GSUcpO1xuLVx0dmFsdWUgfD0gWEdNQUNfQ09ORklHX1RFO1xuLVx0d3JpdGVsKHZhbHVlLCBpb2FkZHIgKyBYR01BQ19UWF9DT05GSUcpO1xuIH1cbiBcbiBzdGF0aWMgdm9pZCBkd3hnbWFjMl9kbWFfc3RvcF90eChzdHJ1Y3Qgc3RtbWFjX3ByaXYgKnByaXYsIHZvaWQgX19pb21lbSAqaW9hZGRyLFxuQEAgLTI3OCwxMCArMjc4LDYgQEAgc3RhdGljIHZvaWQgZHd4Z21hYzJfZG1hX3N0b3BfdHgoc3RydWN0IHN0bW1hY19wcml2ICpwcml2LCB2b2lkIF9faW9tZW0gKmlvYWRkcixcbiBcdHZhbHVlID0gcmVhZGwoaW9hZGRyICsgWEdNQUNfRE1BX0NIX1RYX0NPTlRST0woY2hhbikpO1xuIFx0dmFsdWUgXHUwMDI2PSB+WEdNQUNfVFhTVDtcbiBcdHdyaXRlbCh2YWx1ZSwgaW9hZGRyICsgWEdNQUNfRE1BX0NIX1RYX0NPTlRST0woY2hhbikpO1xuLVxuLVx0dmFsdWUgPSByZWFkbChpb2FkZHIgKyBYR01BQ19UWF9DT05GSUcpO1xuLVx0dmFsdWUgXHUwMDI2PSB+WEdNQUNfQ09ORklHX1RFO1xuLVx0d3JpdGVsKHZhbHVlLCBpb2FkZHIgKyBYR01BQ19UWF9DT05GSUcpO1xuIH1cbiBcbiBzdGF0aWMgdm9pZCBkd3hnbWFjMl9kbWFfc3RhcnRfcngoc3RydWN0IHN0bW1hY19wcml2ICpwcml2LFxuQEAgLTI4OSwxMyArMjg1LDEyIEBAIHN0YXRpYyB2b2lkIGR3eGdtYWMyX2RtYV9zdGFydF9yeChzdHJ1Y3Qgc3RtbWFjX3ByaXYgKnByaXYsXG4ge1xuIFx0dTMyIHZhbHVlO1xuIFxuK1x0LyogUlBTIGlzIGxhdGNoZWQgb25jZSBzZXQsIHNvIGNsZWFyIGl0IG9uIGV2ZXJ5IFJ4IERNQSBzdGFydC4gKi9cbitcdHdyaXRlbChYR01BQ19SUFMsIGlvYWRkciArIFhHTUFDX0RNQV9DSF9TVEFUVVMoY2hhbikpO1xuK1xuIFx0dmFsdWUgPSByZWFkbChpb2FkZHIgKyBYR01BQ19ETUFfQ0hfUlhfQ09OVFJPTChjaGFuKSk7XG4gXHR2YWx1ZSB8PSBYR01BQ19SWFNUO1xuIFx0d3JpdGVsKHZhbHVlLCBpb2FkZHIgKyBYR01BQ19ETUFfQ0hfUlhfQ09OVFJPTChjaGFuKSk7XG4tXG4tXHR2YWx1ZSA9IHJlYWRsKGlvYWRkciArIFhHTUFDX1JYX0NPTkZJRyk7XG4tXHR2YWx1ZSB8PSBYR01BQ19DT05GSUdfUkU7XG4tXHR3cml0ZWwodmFsdWUsIGlvYWRkciArIFhHTUFDX1JYX0NPTkZJRyk7XG4gfVxuIFxuIHN0YXRpYyB2b2lkIGR3eGdtYWMyX2RtYV9zdG9wX3J4KHN0cnVjdCBzdG1tYWNfcHJpdiAqcHJpdiwgdm9pZCBfX2lvbWVtICppb2FkZHIsXG5AQCAtNTkyLDYgKzU4Nyw3NyBAQCBzdGF0aWMgaW50IGR3eGdtYWMyX2VuYWJsZV90YnMoc3RydWN0IHN0bW1hY19wcml2ICpwcml2LCB2b2lkIF9faW9tZW0gKmlvYWRkcixcbiBcdHJldHVybiAwO1xuIH1cbiBcbitzdGF0aWMgaW50IGR3eGdtYWMyX3R4X2RtYV9zdG9wcGVkKHN0cnVjdCBzdG1tYWNfcHJpdiAqcHJpdixcbitcdFx0XHRcdCAgIHZvaWQgX19pb21lbSAqaW9hZGRyLCB1MzIgY2hhbilcbit7XG4rXHR1MzIgdmFsdWU7XG4rXHRpbnQgcmV0O1xuK1xuK1x0cmV0ID0gcmVhZGxfcG9sbF90aW1lb3V0KGlvYWRkciArIFhHTUFDX0RNQV9DSF9TVEFUVVMoY2hhbiksIHZhbHVlLFxuK1x0XHRcdFx0IHZhbHVlIFx1MDAyNiBYR01BQ19UUFMsIDEwMCwgMTAwMDApO1xuK1x0aWYgKHJldClcbitcdFx0bmV0ZGV2X3dhcm4ocHJpdi1cdTAwM2VkZXYsIFwiVHggRE1BIGNoYW5uZWwgJXUgc3RvcCB0aW1lb3V0XFxuXCIsXG4rXHRcdFx0ICAgIGNoYW4pO1xuK1xuK1x0cmV0dXJuIHJldDtcbit9XG4rXG4rc3RhdGljIGludCBkd3hnbWFjMl90eF9tdGxfZHJhaW4oc3RydWN0IHN0bW1hY19wcml2ICpwcml2LFxuK1x0XHRcdFx0IHZvaWQgX19pb21lbSAqaW9hZGRyLCB1MzIgcXVldWUpXG4re1xuK1x0dTMyIHZhbHVlO1xuK1x0aW50IHJldDtcbitcbitcdC8qIFdhaXQgdW50aWwgdGhlIHF1ZXVlIGlzIGVtcHR5IGFuZCBpdHMgcmVhZCBjb250cm9sbGVyIGlzIG5vIGxvbmdlclxuK1x0ICogcHVsbGluZyBhIGZyYW1lIG91dCB0b3dhcmRzIHRoZSBNQUMuXG4rXHQgKi9cbitcdHJldCA9IHJlYWRsX3BvbGxfdGltZW91dChpb2FkZHIgKyBYR01BQ19NVExfVFhRX0RFQlVHKHF1ZXVlKSwgdmFsdWUsXG4rXHRcdFx0XHQgISh2YWx1ZSBcdTAwMjYgWEdNQUNfVFhRU1RTKSBcdTAwMjZcdTAwMjZcbitcdFx0XHRcdCBGSUVMRF9HRVQoWEdNQUNfVFJDU1RTLCB2YWx1ZSkgIT1cbitcdFx0XHRcdCBYR01BQ19UUkNTVFNfUkVBRCxcbitcdFx0XHRcdCAxMDAsIDEwMDAwKTtcbitcdGlmIChyZXQpXG4rXHRcdG5ldGRldl93YXJuKHByaXYtXHUwMDNlZGV2LCBcIk1UTCBUeCBxdWV1ZSAldSBkcmFpbiB0aW1lb3V0XFxuXCIsXG4rXHRcdFx0ICAgIHF1ZXVlKTtcbitcbitcdHJldHVybiByZXQ7XG4rfVxuK1xuK3N0YXRpYyBpbnQgZHd4Z21hYzJfcnhfbXRsX2RyYWluKHN0cnVjdCBzdG1tYWNfcHJpdiAqcHJpdixcbitcdFx0XHRcdCB2b2lkIF9faW9tZW0gKmlvYWRkciwgdTMyIHF1ZXVlKVxuK3tcbitcdHUzMiB2YWx1ZTtcbitcdGludCByZXQ7XG4rXG4rXHQvKiBXYWl0IHVudGlsIG5vIHBhY2tldCBpcyBsZWZ0IGluIHRoZSBxdWV1ZSBhbmQgdGhlIHF1ZXVlIHJlcG9ydHNcbitcdCAqIGl0c2VsZiBlbXB0eS5cbitcdCAqL1xuK1x0cmV0ID0gcmVhZGxfcG9sbF90aW1lb3V0KGlvYWRkciArIFhHTUFDX01UTF9SWFFfREVCVUcocXVldWUpLCB2YWx1ZSxcbitcdFx0XHRcdCAhRklFTERfR0VUKFhHTUFDX1BSWFEsIHZhbHVlKSBcdTAwMjZcdTAwMjZcbitcdFx0XHRcdCAhRklFTERfR0VUKFhHTUFDX1JYUVNUUywgdmFsdWUpLFxuK1x0XHRcdFx0IDEwMCwgMTAwMDApO1xuK1x0aWYgKHJldClcbitcdFx0bmV0ZGV2X3dhcm4ocHJpdi1cdTAwM2VkZXYsIFwiTVRMIFJ4IHF1ZXVlICV1IGRyYWluIHRpbWVvdXRcXG5cIixcbitcdFx0XHQgICAgcXVldWUpO1xuK1xuK1x0cmV0dXJuIHJldDtcbit9XG4rXG4rc3RhdGljIGludCBkd3hnbWFjMl9yeF9kbWFfc3RvcHBlZChzdHJ1Y3Qgc3RtbWFjX3ByaXYgKnByaXYsXG4rXHRcdFx0XHQgICB2b2lkIF9faW9tZW0gKmlvYWRkciwgdTMyIGNoYW4pXG4re1xuK1x0dTMyIHZhbHVlO1xuK1x0aW50IHJldDtcbitcbitcdHJldCA9IHJlYWRsX3BvbGxfdGltZW91dChpb2FkZHIgKyBYR01BQ19ETUFfQ0hfU1RBVFVTKGNoYW4pLCB2YWx1ZSxcbitcdFx0XHRcdCB2YWx1ZSBcdTAwMjYgWEdNQUNfUlBTLCAxMDAsIDEwMDAwKTtcbitcdGlmIChyZXQpXG4rXHRcdG5ldGRldl93YXJuKHByaXYtXHUwMDNlZGV2LCBcIlJ4IERNQSBjaGFubmVsICV1IHN0b3AgdGltZW91dFxcblwiLFxuK1x0XHRcdCAgICBjaGFuKTtcbitcbitcdHJldHVybiByZXQ7XG4rfVxuK1xuIGNvbnN0IHN0cnVjdCBzdG1tYWNfZG1hX29wcyBkd3hnbWFjMjEwX2RtYV9vcHMgPSB7XG4gXHQucmVzZXQgPSBkd3hnbWFjMl9kbWFfcmVzZXQsXG4gXHQuaW5pdCA9IGR3eGdtYWMyX2RtYV9pbml0LFxuQEAgLTYyMCw0ICs2ODYsOCBAQCBjb25zdCBzdHJ1Y3Qgc3RtbWFjX2RtYV9vcHMgZHd4Z21hYzIxMF9kbWFfb3BzID0ge1xuIFx0LnNldF9iZnNpemUgPSBkd3hnbWFjMl9zZXRfYmZzaXplLFxuIFx0LmVuYWJsZV9zcGggPSBkd3hnbWFjMl9lbmFibGVfc3BoLFxuIFx0LmVuYWJsZV90YnMgPSBkd3hnbWFjMl9lbmFibGVfdGJzLFxuK1x0LnR4X2RtYV9zdG9wcGVkID0gZHd4Z21hYzJfdHhfZG1hX3N0b3BwZWQsXG4rXHQudHhfbXRsX2RyYWluID0gZHd4Z21hYzJfdHhfbXRsX2RyYWluLFxuK1x0LnJ4X210bF9kcmFpbiA9IGR3eGdtYWMyX3J4X210bF9kcmFpbixcbitcdC5yeF9kbWFfc3RvcHBlZCA9IGR3eGdtYWMyX3J4X2RtYV9zdG9wcGVkLFxuIH07XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvaHdpZi5oIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvaHdpZi5oXG5pbmRleCAwNGRhZmVjMDIxYjRmLi44NmY0YWE4ODk2MWM3IDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvaHdpZi5oXG4rKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9od2lmLmhcbkBAIC0yMzEsNiArMjMxLDE1IEBAIHN0cnVjdCBzdG1tYWNfZG1hX29wcyB7XG4gXHRcdFx0ICAgYm9vbCBlbiwgdTMyIGNoYW4pO1xuIFx0aW50ICgqZW5hYmxlX3Ricykoc3RydWN0IHN0bW1hY19wcml2ICpwcml2LCB2b2lkIF9faW9tZW0gKmlvYWRkcixcbiBcdFx0XHQgIGJvb2wgZW4sIHUzMiBjaGFuKTtcbitcdC8qIE9yZGVyZWQgZGF0YXBhdGggdGVhcmRvd24gKi9cbitcdGludCAoKnR4X2RtYV9zdG9wcGVkKShzdHJ1Y3Qgc3RtbWFjX3ByaXYgKnByaXYsIHZvaWQgX19pb21lbSAqaW9hZGRyLFxuK1x0XHRcdCAgICAgIHUzMiBjaGFuKTtcbitcdGludCAoKnR4X210bF9kcmFpbikoc3RydWN0IHN0bW1hY19wcml2ICpwcml2LCB2b2lkIF9faW9tZW0gKmlvYWRkcixcbitcdFx0XHQgICAgdTMyIHF1ZXVlKTtcbitcdGludCAoKnJ4X210bF9kcmFpbikoc3RydWN0IHN0bW1hY19wcml2ICpwcml2LCB2b2lkIF9faW9tZW0gKmlvYWRkcixcbitcdFx0XHQgICAgdTMyIHF1ZXVlKTtcbitcdGludCAoKnJ4X2RtYV9zdG9wcGVkKShzdHJ1Y3Qgc3RtbWFjX3ByaXYgKnByaXYsIHZvaWQgX19pb21lbSAqaW9hZGRyLFxuK1x0XHRcdCAgICAgIHUzMiBjaGFuKTtcbiB9O1xuIFxuICNkZWZpbmUgc3RtbWFjX2RtYV9pbml0KF9fcHJpdiwgX19hcmdzLi4uKSBcXFxuQEAgLTI5Myw2ICszMDIsMTQgQEAgc3RydWN0IHN0bW1hY19kbWFfb3BzIHtcbiBcdHN0bW1hY19kb192b2lkX2NhbGxiYWNrKF9fcHJpdiwgZG1hLCBlbmFibGVfc3BoLCBfX3ByaXYsIF9fYXJncylcbiAjZGVmaW5lIHN0bW1hY19lbmFibGVfdGJzKF9fcHJpdiwgX19hcmdzLi4uKSBcXFxuIFx0c3RtbWFjX2RvX2NhbGxiYWNrKF9fcHJpdiwgZG1hLCBlbmFibGVfdGJzLCBfX3ByaXYsIF9fYXJncylcbisjZGVmaW5lIHN0bW1hY190eF9kbWFfc3RvcHBlZChfX3ByaXYsIF9fYXJncy4uLikgXFxcbitcdHN0bW1hY19kb19jYWxsYmFjayhfX3ByaXYsIGRtYSwgdHhfZG1hX3N0b3BwZWQsIF9fcHJpdiwgX19hcmdzKVxuKyNkZWZpbmUgc3RtbWFjX3R4X210bF9kcmFpbihfX3ByaXYsIF9fYXJncy4uLikgXFxcbitcdHN0bW1hY19kb19jYWxsYmFjayhfX3ByaXYsIGRtYSwgdHhfbXRsX2RyYWluLCBfX3ByaXYsIF9fYXJncylcbisjZGVmaW5lIHN0bW1hY19yeF9tdGxfZHJhaW4oX19wcml2LCBfX2FyZ3MuLi4pIFxcXG4rXHRzdG1tYWNfZG9fY2FsbGJhY2soX19wcml2LCBkbWEsIHJ4X210bF9kcmFpbiwgX19wcml2LCBfX2FyZ3MpXG4rI2RlZmluZSBzdG1tYWNfcnhfZG1hX3N0b3BwZWQoX19wcml2LCBfX2FyZ3MuLi4pIFxcXG4rXHRzdG1tYWNfZG9fY2FsbGJhY2soX19wcml2LCBkbWEsIHJ4X2RtYV9zdG9wcGVkLCBfX3ByaXYsIF9fYXJncylcbiBcbiBzdHJ1Y3QgbWFjX2RldmljZV9pbmZvO1xuIHN0cnVjdCBuZXRfZGV2aWNlO1xuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19tYWluLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfbWFpbi5jXG5pbmRleCBiMmI3ZDAyNDJkZDNjLi45YzNhOGYxMjJiOTRmIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX21haW4uY1xuKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX21haW4uY1xuQEAgLTI1NjAsNiArMjU2MCw1MiBAQCBzdGF0aWMgdm9pZCBzdG1tYWNfc3RvcF9hbGxfZG1hKHN0cnVjdCBzdG1tYWNfcHJpdiAqcHJpdilcbiBcdFx0c3RtbWFjX2RlaW5pdF9jaGFuKHByaXYsIHByaXYtXHUwMDNlaW9hZGRyLCBjaGFuKTtcbiB9XG4gXG4rLyoqXG4rICogc3RtbWFjX2RhdGFwYXRoX3RlYXJkb3duIC0gb3JkZXJlZCBkYXRhcGF0aCB0ZWFyZG93biBhcyBwZXIgSVAgc3BlY2lmaWNhdGlvblxuKyAqIEBwcml2OiBkcml2ZXIgcHJpdmF0ZSBzdHJ1Y3R1cmVcbisgKiBEZXNjcmlwdGlvbjpcbisgKiBXaGVuIHRlYXJkb3duIG9wcyBhcmUgYXZhaWxhYmxlLCBmb2xsb3cgdGhlIGRhdGFib29rIG9yZGVyZWQgdGVhcmRvd25cbisgKiBzZXF1ZW5jZS5cbisgKiBGb2xsb3dzIHRoZSBsZWdhY3kgc3RvcCArIE1BQyBkaXNhYmxlIGZvciB2YXJpYW50cyB3aXRob3V0IHRoZSBmZWF0dXJlLlxuKyAqL1xuK3N0YXRpYyB2b2lkIHN0bW1hY19kYXRhcGF0aF90ZWFyZG93bihzdHJ1Y3Qgc3RtbWFjX3ByaXYgKnByaXYpXG4re1xuK1x0dTMyIHJ4X2NoYW5uZWxzX2NvdW50ID0gcHJpdi1cdTAwM2VwbGF0LVx1MDAzZXJ4X3F1ZXVlc190b191c2U7XG4rXHR1MzIgdHhfY2hhbm5lbHNfY291bnQgPSBwcml2LVx1MDAzZXBsYXQtXHUwMDNldHhfcXVldWVzX3RvX3VzZTtcbitcdHUzMiBjaGFuO1xuK1xuK1x0LyogU3RvcCBhbGwgVFggRE1BIGNoYW5uZWxzICovXG4rXHRmb3IgKGNoYW4gPSAwOyBjaGFuIFx1MDAzYyB0eF9jaGFubmVsc19jb3VudDsgY2hhbisrKVxuK1x0XHRzdG1tYWNfc3RvcF90eF9kbWEocHJpdiwgY2hhbik7XG4rXG4rXHQvKiBXYWl0IGZvciBldmVyeSBUWCBETUEgY2hhbm5lbCB0byByZXBvcnQgaXRzZWxmIHN0b3BwZWQgKi9cbitcdGlmIChwcml2LVx1MDAzZWh3LVx1MDAzZWRtYS1cdTAwM2V0eF9kbWFfc3RvcHBlZClcbitcdFx0Zm9yIChjaGFuID0gMDsgY2hhbiBcdTAwM2MgdHhfY2hhbm5lbHNfY291bnQ7IGNoYW4rKylcbitcdFx0XHRzdG1tYWNfdHhfZG1hX3N0b3BwZWQocHJpdiwgcHJpdi1cdTAwM2Vpb2FkZHIsIGNoYW4pO1xuK1xuK1x0LyogV2FpdCBmb3IgdGhlIE1UTCBUWCBxdWV1ZXMgdG8gZmluaXNoIHB1c2hpbmcgaW50byB0aGUgTUFDICovXG4rXHRpZiAocHJpdi1cdTAwM2Vody1cdTAwM2VkbWEtXHUwMDNldHhfbXRsX2RyYWluKVxuK1x0XHRmb3IgKGNoYW4gPSAwOyBjaGFuIFx1MDAzYyB0eF9jaGFubmVsc19jb3VudDsgY2hhbisrKVxuK1x0XHRcdHN0bW1hY190eF9tdGxfZHJhaW4ocHJpdiwgcHJpdi1cdTAwM2Vpb2FkZHIsIGNoYW4pO1xuK1xuK1x0LyogRGlzYWJsZSB0aGUgTUFDIFRYIGFuZCBSWCAqL1xuK1x0c3RtbWFjX21hY19zZXQocHJpdiwgcHJpdi1cdTAwM2Vpb2FkZHIsIGZhbHNlKTtcbitcbitcdC8qIFdhaXQgZm9yIHRoZSBNVEwgUlggcXVldWVzIHRvIGRyYWluIGludG8gdGhlIFJYIERNQSAqL1xuK1x0aWYgKHByaXYtXHUwMDNlaHctXHUwMDNlZG1hLVx1MDAzZXJ4X210bF9kcmFpbilcbitcdFx0Zm9yIChjaGFuID0gMDsgY2hhbiBcdTAwM2MgcnhfY2hhbm5lbHNfY291bnQ7IGNoYW4rKylcbitcdFx0XHRzdG1tYWNfcnhfbXRsX2RyYWluKHByaXYsIHByaXYtXHUwMDNlaW9hZGRyLCBjaGFuKTtcbitcbitcdC8qIFN0b3AgYWxsIFJYIERNQSBjaGFubmVscyAqL1xuK1x0Zm9yIChjaGFuID0gMDsgY2hhbiBcdTAwM2MgcnhfY2hhbm5lbHNfY291bnQ7IGNoYW4rKylcbitcdFx0c3RtbWFjX3N0b3BfcnhfZG1hKHByaXYsIGNoYW4pO1xuK1xuK1x0LyogV2FpdCBmb3IgZXZlcnkgUlggRE1BIGNoYW5uZWwgdG8gcmVwb3J0IGl0c2VsZiBzdG9wcGVkICovXG4rXHRpZiAocHJpdi1cdTAwM2Vody1cdTAwM2VkbWEtXHUwMDNlcnhfZG1hX3N0b3BwZWQpXG4rXHRcdGZvciAoY2hhbiA9IDA7IGNoYW4gXHUwMDNjIHJ4X2NoYW5uZWxzX2NvdW50OyBjaGFuKyspXG4rXHRcdFx0c3RtbWFjX3J4X2RtYV9zdG9wcGVkKHByaXYsIHByaXYtXHUwMDNlaW9hZGRyLCBjaGFuKTtcbit9XG4rXG4gLyoqXG4gICogIHN0bW1hY19kbWFfb3BlcmF0aW9uX21vZGUgLSBIVyBETUEgb3BlcmF0aW9uIG1vZGVcbiAgKiAgQHByaXY6IGRyaXZlciBwcml2YXRlIHN0cnVjdHVyZVxuQEAgLTM2ODUsOSArMzczMSw2IEBAIHN0YXRpYyBpbnQgc3RtbWFjX2h3X3NldHVwKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXG4gXHRcdHByaXYtXHUwMDNlaHctXHUwMDNlcnhfY3N1bSA9IDA7XG4gXHR9XG4gXG4tXHQvKiBFbmFibGUgdGhlIE1BQyBSeC9UeCAqL1xuLVx0c3RtbWFjX21hY19zZXQocHJpdiwgcHJpdi1cdTAwM2Vpb2FkZHIsIHRydWUpO1xuLVxuIFx0LyogU2V0IHRoZSBIVyBETUEgbW9kZSBhbmQgdGhlIENPRSAqL1xuIFx0c3RtbWFjX2RtYV9vcGVyYXRpb25fbW9kZShwcml2KTtcbiBcbkBAIC0zNzQzLDYgKzM3ODYsOSBAQCBzdGF0aWMgaW50IHN0bW1hY19od19zZXR1cChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxuIFx0LyogU3RhcnQgdGhlIGJhbGwgcm9sbGluZy4uLiAqL1xuIFx0c3RtbWFjX3N0YXJ0X2FsbF9kbWEocHJpdik7XG4gXG4rXHQvKiBFbmFibGUgdGhlIE1BQyBSeC9UeCAqL1xuK1x0c3RtbWFjX21hY19zZXQocHJpdiwgcHJpdi1cdTAwM2Vpb2FkZHIsIHRydWUpO1xuK1xuIFx0cGh5bGlua19yeF9jbGtfc3RvcF9ibG9jayhwcml2LVx1MDAzZXBoeWxpbmspO1xuIFx0c3RtbWFjX3NldF9od192bGFuX21vZGUocHJpdiwgcHJpdi1cdTAwM2Vodyk7XG4gXHRwaHlsaW5rX3J4X2Nsa19zdG9wX3VuYmxvY2socHJpdi1cdTAwM2VwaHlsaW5rKTtcbkBAIC00MjQwLDkgKzQyODYsNiBAQCBzdGF0aWMgdm9pZCBfX3N0bW1hY19yZWxlYXNlKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXG4gXHRzdHJ1Y3Qgc3RtbWFjX3ByaXYgKnByaXYgPSBuZXRkZXZfcHJpdihkZXYpO1xuIFx0dTggY2hhbjtcbiBcbi1cdC8qIFN0b3AgYW5kIGRpc2Nvbm5lY3QgdGhlIFBIWSAqL1xuLVx0cGh5bGlua19zdG9wKHByaXYtXHUwMDNlcGh5bGluayk7XG4tXG4gXHRzdG1tYWNfZGlzYWJsZV9hbGxfcXVldWVzKHByaXYpO1xuIFxuIFx0Zm9yIChjaGFuID0gMDsgY2hhbiBcdTAwM2MgcHJpdi1cdTAwM2VwbGF0LVx1MDAzZXR4X3F1ZXVlc190b191c2U7IGNoYW4rKylcbkBAIC00MjUzLDggKzQyOTYsMTEgQEAgc3RhdGljIHZvaWQgX19zdG1tYWNfcmVsZWFzZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxuIFx0LyogRnJlZSB0aGUgSVJRIGxpbmVzICovXG4gXHRzdG1tYWNfZnJlZV9pcnEoZGV2LCBSRVFfSVJRX0VSUl9BTEwsIDApO1xuIFxuLVx0LyogU3RvcCBUWC9SWCBETUEgYW5kIGNsZWFyIHRoZSBkZXNjcmlwdG9ycyAqL1xuLVx0c3RtbWFjX3N0b3BfYWxsX2RtYShwcml2KTtcbitcdC8qIEhhcyB0byBydW4gYmVmb3JlIG1hY19saW5rX2Rvd24oKSBkaXNhYmxlcyB0aGUgTUFDLiAqL1xuK1x0c3RtbWFjX2RhdGFwYXRoX3RlYXJkb3duKHByaXYpO1xuK1xuK1x0LyogU3RvcCBhbmQgZGlzY29ubmVjdCB0aGUgUEhZICovXG4rXHRwaHlsaW5rX3N0b3AocHJpdi1cdTAwM2VwaHlsaW5rKTtcbiBcbiBcdC8qIFJlbGVhc2UgYW5kIGZyZWUgdGhlIFJ4L1R4IHJlc291cmNlcyAqL1xuIFx0ZnJlZV9kbWFfZGVzY19yZXNvdXJjZXMocHJpdiwgXHUwMDI2cHJpdi1cdTAwM2VkbWFfY29uZik7XG5AQCAtNzEwNCwxNSArNzE1MCwxMiBAQCB2b2lkIHN0bW1hY194ZHBfcmVsZWFzZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxuIFx0LyogRnJlZSB0aGUgSVJRIGxpbmVzICovXG4gXHRzdG1tYWNfZnJlZV9pcnEoZGV2LCBSRVFfSVJRX0VSUl9BTEwsIDApO1xuIFxuLVx0LyogU3RvcCBUWC9SWCBETUEgY2hhbm5lbHMgKi9cbi1cdHN0bW1hY19zdG9wX2FsbF9kbWEocHJpdik7XG4rXHQvKiBTdG9wIHRoZSBNQUMgYW5kIHRoZSBUWC9SWCBETUEgY2hhbm5lbHMgKi9cbitcdHN0bW1hY19kYXRhcGF0aF90ZWFyZG93bihwcml2KTtcbiBcbiBcdC8qIFJlbGVhc2UgYW5kIGZyZWUgdGhlIFJ4L1R4IHJlc291cmNlcyAqL1xuIFx0ZnJlZV9kbWFfZGVzY19yZXNvdXJjZXMocHJpdiwgXHUwMDI2cHJpdi1cdTAwM2VkbWFfY29uZik7XG4gXG4tXHQvKiBEaXNhYmxlIHRoZSBNQUMgUngvVHggKi9cbi1cdHN0bW1hY19tYWNfc2V0KHByaXYsIHByaXYtXHUwMDNlaW9hZGRyLCBmYWxzZSk7XG4tXG4gXHQvKiBzZXQgdHJhbnNfc3RhcnQgc28gd2UgZG9uJ3QgZ2V0IHNwdXJpb3VzXG4gXHQgKiB3YXRjaGRvZ3MgZHVyaW5nIHJlc2V0XG4gXHQgKi9cbkBAIC03MTg0LDEyICs3MjI3LDEyIEBAIGludCBzdG1tYWNfeGRwX29wZW4oc3RydWN0IG5ldF9kZXZpY2UgKmRldilcbiBcdFx0aHJ0aW1lcl9zZXR1cChcdTAwMjZ0eF9xLVx1MDAzZXR4dGltZXIsIHN0bW1hY190eF90aW1lciwgQ0xPQ0tfTU9OT1RPTklDLCBIUlRJTUVSX01PREVfUkVMKTtcbiBcdH1cbiBcbi1cdC8qIEVuYWJsZSB0aGUgTUFDIFJ4L1R4ICovXG4tXHRzdG1tYWNfbWFjX3NldChwcml2LCBwcml2LVx1MDAzZWlvYWRkciwgdHJ1ZSk7XG4tXG4gXHQvKiBTdGFydCBSeCBcdTAwMjYgVHggRE1BIENoYW5uZWxzICovXG4gXHRzdG1tYWNfc3RhcnRfYWxsX2RtYShwcml2KTtcbiBcbitcdC8qIEVuYWJsZSB0aGUgTUFDIFJ4L1R4ICovXG4rXHRzdG1tYWNfbWFjX3NldChwcml2LCBwcml2LVx1MDAzZWlvYWRkciwgdHJ1ZSk7XG4rXG4gXHRyZXQgPSBzdG1tYWNfcmVxdWVzdF9pcnEoZGV2KTtcbiBcdGlmIChyZXQpXG4gXHRcdGdvdG8gaXJxX2Vycm9yO1xuQEAgLTgxOTAsMTcgKzgyMzMsMTUgQEAgaW50IHN0bW1hY19zdXNwZW5kKHN0cnVjdCBkZXZpY2UgKmRldilcbiBcdFx0dGltZXJfZGVsZXRlX3N5bmMoXHUwMDI2cHJpdi1cdTAwM2VlZWVfY3RybF90aW1lcik7XG4gXHR9XG4gXG4tXHQvKiBTdG9wIFRYL1JYIERNQSAqL1xuLVx0c3RtbWFjX3N0b3BfYWxsX2RtYShwcml2KTtcbi1cbi1cdHN0bW1hY19sZWdhY3lfc2VyZGVzX3Bvd2VyX2Rvd24ocHJpdik7XG4tXG4gXHQvKiBFbmFibGUgUG93ZXIgZG93biBtb2RlIGJ5IHByb2dyYW1taW5nIHRoZSBQTVQgcmVncyAqL1xuIFx0aWYgKHByaXYtXHUwMDNld29sb3B0cykge1xuK1x0XHRzdG1tYWNfc3RvcF9hbGxfZG1hKHByaXYpO1xuK1x0XHRzdG1tYWNfbGVnYWN5X3NlcmRlc19wb3dlcl9kb3duKHByaXYpO1xuIFx0XHRzdG1tYWNfcG10KHByaXYsIHByaXYtXHUwMDNlaHcsIHByaXYtXHUwMDNld29sb3B0cyk7XG4gXHRcdHByaXYtXHUwMDNlaXJxX3dha2UgPSAxO1xuIFx0fSBlbHNlIHtcbi1cdFx0c3RtbWFjX21hY19zZXQocHJpdiwgcHJpdi1cdTAwM2Vpb2FkZHIsIGZhbHNlKTtcbitcdFx0c3RtbWFjX2RhdGFwYXRoX3RlYXJkb3duKHByaXYpO1xuK1x0XHRzdG1tYWNfbGVnYWN5X3NlcmRlc19wb3dlcl9kb3duKHByaXYpO1xuIFx0XHRwaW5jdHJsX3BtX3NlbGVjdF9zbGVlcF9zdGF0ZShwcml2LVx1MDAzZWRldmljZSk7XG4gXHR9XG4gXG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xNFQwNjozNTozNC4zNTIxMzg5MTlaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo2ODgzMDM5NjI3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgSW1wYWN0IG9mIHRoZSBTVE1NQUMgRHJpdmVyIFBhdGNoKipcblxuT2theSwgc28gSSd2ZSBnb3QgdGhpcyBwYXRjaCB0aGF0IGFkZHMgb3JkZXJlZCBkYXRhcGF0aCB0ZWFyZG93biBsb2dpYyBmb3IgZHd4Z21hYzIgd2l0aGluIHRoZSBzdG1tYWMgZHJpdmVyLiBJdCdzIHRvdWNoaW5nIGBzdG1tYWNfbWFpbi5jYCB0byBzd2FwIG91dCB0aGUgb2xkIHNodXRkb3duIHNlcXVlbmNlIGZvciBgc3RtbWFjX2RhdGFwYXRoX3RlYXJkb3duKClgLCBhbmQgaXQncyBhbHNvIHJlb3JkZXJpbmcgc29tZSBmdW5jdGlvbnMgaW4gYHN0bW1hY19od19zZXR1cGAgYW5kIGBzdG1tYWNfeGRwX29wZW5gLiBNeSBwcmltYXJ5IGNvbmNlcm4gbm93IGlzIHRvIGRldGVybWluZSB0aGUgcmVhY2ggb2YgdGhpcyBjaGFuZ2UuIFNwZWNpZmljYWxseSwgSSBuZWVkIHRvIGtub3cgaG93IGxpa2VseSBpdCBpcyB0aGF0IHRoaXMgZHJpdmVyIGlzIGhpdCBpbiBhbnkgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnQuXG5cblRoZSBzdG1tYWMgZHJpdmVyLCBmcm9tIHdoYXQgSSBrbm93LCBpcyB1c2VkIGZvciBTeW5vcHN5cyBEZXNpZ25XYXJlIE1BQ3MuIEEgcXVpY2sgY2hlY2sgdGVsbHMgbWUgdGhhdCB3aGlsZSBRRU1VIGRvZXNuJ3QgZGlyZWN0bHkgZW11bGF0ZSBzdG1tYWMgYnkgZGVmYXVsdCwgdGhhdCBkb2VzbuKAmXQgbWVhbiBpdCdzIG5ldmVyIHVzZWQuIEl04oCZcyBkZWZpbml0ZWx5IHBsYXVzaWJsZSBpdCdzIHBhcnQgb2YgdGhlIGVtdWxhdGVkIGhhcmR3YXJlIG9uIHNvbWUgQVJNIGJvYXJkcyB1c2luZyBRRU1VLiBUaW1lIHRvIGNvbmZpcm0gaWYgYW55IFFFTVUgYm9hcmRzIGFjdHVhbGx5ICpkbyogdXNlIHN0bW1hYy4gQ29uc2lkZXJpbmcgdGhlIHdpZGUgcmFuZ2Ugb2YgU29DcyB0aGF0IHVzZSBzdG1tYWMsIEkgbmVlZCB0byBjb25zaWRlciBhIHJhbmdlIG9mIHBvc3NpYmlsaXRpZXMsIGV2ZW4gdGhvc2UgYWNjZXNzZWQgdGhyb3VnaCBhIFBDSSBkZXZpY2Ugb3IgcGxhdGZvcm0gZGV2aWNlIGluIFFFTVUuIEkgc2hvdWxkIGNoZWNrIGlmIHRoZXJlJ3MgYW55IG1lbnRpb24gb2YgYHN0bW1hY2Agd2l0aGluIHRoZSBRRU1VIGNvbmZpZ3VyYXRpb24gb3IgaWYgYENPTkZJR19TVE1NQUNfRVRIYCBpcyBlbmFibGVkIGluIHN5emthbGxlci5cblxuQWhhLCBhbmQgdGhlbiBJIHJlY2FsbGVkIHRoYXQgYHN0bW1hY2AgYWN0dWFsbHkgaGFzIGEgUENJIGRyaXZlciwgYHN0bW1hY19wY2kuY2AuIFRoaXMgY291bGQgb3BlbiB1cCBhIHdob2xlIG5ldyBhdHRhY2sgc3VyZmFjZSBpZiB3ZSBjb3VsZCB0cmlnZ2VyIGl0IHRocm91Z2ggc29tZSBnZW5lcmljIFBDSSBkZXZpY2Ugc2V0dXAuIEkgc2hvdWxkIGZpbmQgb3V0IGlmIGBzdG1tYWNfcGNpYCBpcyBzcGVjaWZpY2FsbHkgdGllZCB0byBzb21lIEludGVsIG9yIEFNRCBTb0NzIG9yIGlmIGl04oCZcyBtb3JlIGdlbmVyaWMgYW5kIGFwcGxpY2FibGUgdG8gYSB3aWRlciByYW5nZSBvZiBoYXJkd2FyZSBlbXVsYXRlZCBieSBRRU1VLlxuXG5cbiIsIklucHV0VG9rZW5zIjo3Mzg0LCJPdXRwdXRUb2tlbnMiOjIwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzczLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTRUMDY6MzU6NDEuMjM1MTgxNDk1WiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE5NjAwOTQ3NDQsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwic3RtbWFjX3BjaVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJEb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvZGV2aWNlX2RyaXZlcnMvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMucnN0PTEwNz1zeW50YXggKGUuZy4gZm9yIFBDSSBtb2R1bGUpOjpcXG5Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvZGV2aWNlX2RyaXZlcnMvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMucnN0LTEwOC1cXG5Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvZGV2aWNlX2RyaXZlcnMvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMucnN0OjEwOTogICAgbW9kcHJvYmUgc3RtbWFjX3BjaSBbXFx1MDAzY29wdGlvblxcdTAwM2U9XFx1MDAzY1ZBTDFcXHUwMDNlLFxcdTAwM2NWQUwyXFx1MDAzZSwuLi5dXFxuRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL2RldmljZV9kcml2ZXJzL2V0aGVybmV0L3N0bWljcm8vc3RtbWFjLnJzdC0xMTAtXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9NYWtlZmlsZT01Mz1vYmotJChDT05GSUdfRFdNQUNfTU9UT1JDT01NKVxcdCs9IGR3bWFjLW1vdG9yY29tbS5vXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvTWFrZWZpbGU6NTQ6c3RtbWFjLXBjaS1vYmpzOj0gc3RtbWFjX3BjaS5vXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1pbnRlbC5jPTI1PXN0cnVjdCBpbnRlbF9wcml2X2RhdGEge1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtaW50ZWwuYy0zOS0gKi9cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1pbnRlbC5jOjQwOnN0cnVjdCBzdG1tYWNfcGNpX2Z1bmNfZGF0YSB7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtaW50ZWwuYy00MS1cXHR1bnNpZ25lZCBpbnQgZnVuYztcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLWludGVsLmMtNDQtXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtaW50ZWwuYzo0NTpzdHJ1Y3Qgc3RtbWFjX3BjaV9kbWlfZGF0YSB7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtaW50ZWwuYzo0NjpcXHRjb25zdCBzdHJ1Y3Qgc3RtbWFjX3BjaV9mdW5jX2RhdGEgKmZ1bmM7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtaW50ZWwuYy00Ny1cXHRzaXplX3QgbmZ1bmNzO1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtaW50ZWwuYy00OS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1pbnRlbC5jOjUwOnN0cnVjdCBzdG1tYWNfcGNpX2luZm8ge1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLWludGVsLmMtNTEtXFx0aW50ICgqc2V0dXApKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCBzdHJ1Y3QgcGxhdF9zdG1tYWNlbmV0X2RhdGEgKnBsYXQpO1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtaW50ZWwuYz05MT1zdGF0aWMgY29uc3QgaW50IGFkbG5fdHNuX2xhbmVfcmVnc1tdID0gezZ9O1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLWludGVsLmMtOTItXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtaW50ZWwuYzo5MzpzdGF0aWMgaW50IHN0bW1hY19wY2lfZmluZF9waHlfYWRkcihzdHJ1Y3QgcGNpX2RldiAqcGRldixcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1pbnRlbC5jLTk0LVxcdFxcdFxcdFxcdCAgICBjb25zdCBzdHJ1Y3QgZG1pX3N5c3RlbV9pZCAqZG1pX2xpc3QpXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtaW50ZWwuYy05NS17XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtaW50ZWwuYzo5NjpcXHRjb25zdCBzdHJ1Y3Qgc3RtbWFjX3BjaV9mdW5jX2RhdGEgKmZ1bmNfZGF0YTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1pbnRlbC5jOjk3OlxcdGNvbnN0IHN0cnVjdCBzdG1tYWNfcGNpX2RtaV9kYXRhICpkbWlfZGF0YTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1pbnRlbC5jLTk4LVxcdGNvbnN0IHN0cnVjdCBkbWlfc3lzdGVtX2lkICpkbWlfaWQ7XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1pbnRlbC5jPTc4Nj1zdGF0aWMgaW50IGVobF9zZ21paV9kYXRhKHN0cnVjdCBwY2lfZGV2ICpwZGV2LFxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtaW50ZWwuYy04MDUtXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtaW50ZWwuYzo4MDY6c3RhdGljIHN0cnVjdCBzdG1tYWNfcGNpX2luZm8gZWhsX3NnbWlpMWdfaW5mbyA9IHtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1pbnRlbC5jLTgwNy1cXHQuc2V0dXAgPSBlaGxfc2dtaWlfZGF0YSxcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLWludGVsLmM9ODEwPXN0YXRpYyBpbnQgZWhsX3JnbWlpX2RhdGEoc3RydWN0IHBjaV9kZXYgKnBkZXYsXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1pbnRlbC5jLTgyMC1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1pbnRlbC5jOjgyMTpzdGF0aWMgc3RydWN0IHN0bW1hY19wY2lfaW5mbyBlaGxfcmdtaWkxZ19pbmZvID0ge1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLWludGVsLmMtODIyLVxcdC5zZXR1cCA9IGVobF9yZ21paV9kYXRhLFxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtaW50ZWwuYz04NDE9c3RhdGljIGludCBlaGxfcHNlMF9yZ21paTFnX2RhdGEoc3RydWN0IHBjaV9kZXYgKnBkZXYsXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1pbnRlbC5jLTg0Ny1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1pbnRlbC5jOjg0ODpzdGF0aWMgc3RydWN0IHN0bW1hY19wY2lfaW5mbyBlaGxfcHNlMF9yZ21paTFnX2luZm8gPSB7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtaW50ZWwuYy04NDktXFx0LnNldHVwID0gZWhsX3BzZTBfcmdtaWkxZ19kYXRhLFxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtaW50ZWwuYz04NTI9c3RhdGljIGludCBlaGxfcHNlMF9zZ21paTFnX2RhdGEoc3RydWN0IHBjaV9kZXYgKnBkZXYsXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1pbnRlbC5jLTg2OS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1pbnRlbC5jOjg3MDpzdGF0aWMgc3RydWN0IHN0bW1hY19wY2lfaW5mbyBlaGxfcHNlMF9zZ21paTFnX2luZm8gPSB7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtaW50ZWwuYy04NzEtXFx0LnNldHVwID0gZWhsX3BzZTBfc2dtaWkxZ19kYXRhLFxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtaW50ZWwuYz04OTA9c3RhdGljIGludCBlaGxfcHNlMV9yZ21paTFnX2RhdGEoc3RydWN0IHBjaV9kZXYgKnBkZXYsXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1pbnRlbC5jLTg5Ni1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1pbnRlbC5jOjg5NzpzdGF0aWMgc3RydWN0IHN0bW1hY19wY2lfaW5mbyBlaGxfcHNlMV9yZ21paTFnX2luZm8gPSB7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtaW50ZWwuYy04OTgtXFx0LnNldHVwID0gZWhsX3BzZTFfcmdtaWkxZ19kYXRhLFxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtaW50ZWwuYz05MDE9c3RhdGljIGludCBlaGxfcHNlMV9zZ21paTFnX2RhdGEoc3RydWN0IHBjaV9kZXYgKnBkZXYsXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1pbnRlbC5jLTkxOC1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1pbnRlbC5jOjkxOTpzdGF0aWMgc3RydWN0IHN0bW1hY19wY2lfaW5mbyBlaGxfcHNlMV9zZ21paTFnX2luZm8gPSB7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtaW50ZWwuYy05MjAtXFx0LnNldHVwID0gZWhsX3BzZTFfc2dtaWkxZ19kYXRhLFxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtaW50ZWwuYz05NDQ9c3RhdGljIGludCB0Z2xfc2dtaWlfcGh5MF9kYXRhKHN0cnVjdCBwY2lfZGV2ICpwZGV2LFxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtaW50ZWwuYy05NTItXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtaW50ZWwuYzo5NTM6c3RhdGljIHN0cnVjdCBzdG1tYWNfcGNpX2luZm8gdGdsX3NnbWlpMWdfcGh5MF9pbmZvID0ge1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLWludGVsLmMtOTU0LVxcdC5zZXR1cCA9IHRnbF9zZ21paV9waHkwX2RhdGEsXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1pbnRlbC5jPTk1Nz1zdGF0aWMgaW50IHRnbF9zZ21paV9waHkxX2RhdGEoc3RydWN0IHBjaV9kZXYgKnBkZXYsXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1pbnRlbC5jLTk2NS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1pbnRlbC5jOjk2NjpzdGF0aWMgc3RydWN0IHN0bW1hY19wY2lfaW5mbyB0Z2xfc2dtaWkxZ19waHkxX2luZm8gPSB7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtaW50ZWwuYy05NjctXFx0LnNldHVwID0gdGdsX3NnbWlpX3BoeTFfZGF0YSxcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLWludGVsLmM9OTcwPXN0YXRpYyBpbnQgYWRsc19zZ21paV9waHkwX2RhdGEoc3RydWN0IHBjaV9kZXYgKnBkZXYsXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1pbnRlbC5jLTk3OS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1pbnRlbC5jOjk4MDpzdGF0aWMgc3RydWN0IHN0bW1hY19wY2lfaW5mbyBhZGxzX3NnbWlpMWdfcGh5MF9pbmZvID0ge1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLWludGVsLmMtOTgxLVxcdC5zZXR1cCA9IGFkbHNfc2dtaWlfcGh5MF9kYXRhLFxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtaW50ZWwuYz05ODQ9c3RhdGljIGludCBhZGxzX3NnbWlpX3BoeTFfZGF0YShzdHJ1Y3QgcGNpX2RldiAqcGRldixcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLWludGVsLmMtOTkzLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLWludGVsLmM6OTk0OnN0YXRpYyBzdHJ1Y3Qgc3RtbWFjX3BjaV9pbmZvIGFkbHNfc2dtaWkxZ19waHkxX2luZm8gPSB7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtaW50ZWwuYy05OTUtXFx0LnNldHVwID0gYWRsc19zZ21paV9waHkxX2RhdGEsXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1pbnRlbC5jPTEwMjM9c3RhdGljIGludCBhZGxuX3NnbWlpX3BoeTBfZGF0YShzdHJ1Y3QgcGNpX2RldiAqcGRldixcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLWludGVsLmMtMTA0MS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1pbnRlbC5jOjEwNDI6c3RhdGljIHN0cnVjdCBzdG1tYWNfcGNpX2luZm8gYWRsbl9zZ21paTFnX3BoeTBfaW5mbyA9IHtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1pbnRlbC5jLTEwNDMtXFx0LnNldHVwID0gYWRsbl9zZ21paV9waHkwX2RhdGEsXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1pbnRlbC5jLTEwNDUtXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtaW50ZWwuYzoxMDQ2OnN0YXRpYyBjb25zdCBzdHJ1Y3Qgc3RtbWFjX3BjaV9mdW5jX2RhdGEgZ2FsaWxlb19zdG1tYWNfZnVuY19kYXRhW10gPSB7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtaW50ZWwuYy0xMDQ3LVxcdHtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLWludGVsLmMtMTA1Mi1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1pbnRlbC5jOjEwNTM6c3RhdGljIGNvbnN0IHN0cnVjdCBzdG1tYWNfcGNpX2RtaV9kYXRhIGdhbGlsZW9fc3RtbWFjX2RtaV9kYXRhID0ge1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLWludGVsLmMtMTA1NC1cXHQuZnVuYyA9IGdhbGlsZW9fc3RtbWFjX2Z1bmNfZGF0YSxcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLWludGVsLmMtMTA1Ny1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1pbnRlbC5jOjEwNTg6c3RhdGljIGNvbnN0IHN0cnVjdCBzdG1tYWNfcGNpX2Z1bmNfZGF0YSBpb3QyMDQwX3N0bW1hY19mdW5jX2RhdGFbXSA9IHtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1pbnRlbC5jLTEwNTktXFx0e1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtaW50ZWwuYy0xMDY4LVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLWludGVsLmM6MTA2OTpzdGF0aWMgY29uc3Qgc3RydWN0IHN0bW1hY19wY2lfZG1pX2RhdGEgaW90MjA0MF9zdG1tYWNfZG1pX2RhdGEgPSB7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtaW50ZWwuYy0xMDcwLVxcdC5mdW5jID0gaW90MjA0MF9zdG1tYWNfZnVuY19kYXRhLFxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtaW50ZWwuYz0xMTA5PXN0YXRpYyBpbnQgcXVhcmtfZGVmYXVsdF9kYXRhKHN0cnVjdCBwY2lfZGV2ICpwZGV2LFxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtaW50ZWwuYy0xMTE5LVxcdCAqL1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLWludGVsLmM6MTEyMDpcXHRyZXQgPSBzdG1tYWNfcGNpX2ZpbmRfcGh5X2FkZHIocGRldiwgcXVhcmtfcGNpX2RtaSk7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtaW50ZWwuYy0xMTIxLVxcdGlmIChyZXQgXFx1MDAzYyAwKSB7XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1pbnRlbC5jLTExNDQtXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtaW50ZWwuYzoxMTQ1OnN0YXRpYyBjb25zdCBzdHJ1Y3Qgc3RtbWFjX3BjaV9pbmZvIHF1YXJrX2luZm8gPSB7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtaW50ZWwuYy0xMTQ2LVxcdC5zZXR1cCA9IHF1YXJrX2RlZmF1bHRfZGF0YSxcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLWludGVsLmM9MTI2Mz1zdGF0aWMgaW50IGludGVsX2V0aF9wY2lfcHJvYmUoc3RydWN0IHBjaV9kZXYgKnBkZXYsXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1pbnRlbC5jLTEyNjUte1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLWludGVsLmM6MTI2NjpcXHRzdHJ1Y3Qgc3RtbWFjX3BjaV9pbmZvICppbmZvID0gKHN0cnVjdCBzdG1tYWNfcGNpX2luZm8gKilpZC1cXHUwMDNlZHJpdmVyX2RhdGE7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtaW50ZWwuYy0xMjY3LVxcdHN0cnVjdCBpbnRlbF9wcml2X2RhdGEgKmludGVsX3ByaXY7XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1sb29uZ3Nvbi5jPTc2PXN0cnVjdCBsb29uZ3Nvbl9kYXRhIHtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLWxvb25nc29uLmMtODEtXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtbG9vbmdzb24uYzo4MjpzdHJ1Y3Qgc3RtbWFjX3BjaV9pbmZvIHtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1sb29uZ3Nvbi5jLTgzLVxcdGludCAoKnNldHVwKShzdHJ1Y3QgcGNpX2RldiAqcGRldiwgc3RydWN0IHBsYXRfc3RtbWFjZW5ldF9kYXRhICpwbGF0KTtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLWxvb25nc29uLmM9MTMyPXN0YXRpYyBpbnQgbG9vbmdzb25fZ21hY19kYXRhKHN0cnVjdCBwY2lfZGV2ICpwZGV2LFxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtbG9vbmdzb24uYy0xNDEtXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtbG9vbmdzb24uYzoxNDI6c3RhdGljIHN0cnVjdCBzdG1tYWNfcGNpX2luZm8gbG9vbmdzb25fZ21hY19wY2lfaW5mbyA9IHtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1sb29uZ3Nvbi5jLTE0My1cXHQuc2V0dXAgPSBsb29uZ3Nvbl9nbWFjX2RhdGEsXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1sb29uZ3Nvbi5jPTE2NT1zdGF0aWMgaW50IGxvb25nc29uX2duZXRfZGF0YShzdHJ1Y3QgcGNpX2RldiAqcGRldixcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLWxvb25nc29uLmMtMTc2LVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLWxvb25nc29uLmM6MTc3OnN0YXRpYyBzdHJ1Y3Qgc3RtbWFjX3BjaV9pbmZvIGxvb25nc29uX2duZXRfcGNpX2luZm8gPSB7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtbG9vbmdzb24uYy0xNzgtXFx0LnNldHVwID0gbG9vbmdzb25fZ25ldF9kYXRhLFxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtbG9vbmdzb24uYz00OTg9c3RhdGljIGludCBsb29uZ3Nvbl9kd21hY19wcm9iZShzdHJ1Y3QgcGNpX2RldiAqcGRldiwgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgKmlkKVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtbG9vbmdzb24uYy01MDEtXFx0c3RydWN0IHN0bW1hY19yZXNvdXJjZXMgcmVzID0ge307XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtbG9vbmdzb24uYzo1MDI6XFx0c3RydWN0IHN0bW1hY19wY2lfaW5mbyAqaW5mbztcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1sb29uZ3Nvbi5jLTUwMy1cXHRzdHJ1Y3QgbG9vbmdzb25fZGF0YSAqbGQ7XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1sb29uZ3Nvbi5jLTUzNy1cXHRwbGF0LVxcdTAwM2VmaXhfc29jX3Jlc2V0ID0gbG9vbmdzb25fZHdtYWNfZml4X3Jlc2V0O1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLWxvb25nc29uLmM6NTM4OlxcdHBsYXQtXFx1MDAzZXN1c3BlbmQgPSBzdG1tYWNfcGNpX3BsYXRfc3VzcGVuZDtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1sb29uZ3Nvbi5jOjUzOTpcXHRwbGF0LVxcdTAwM2VyZXN1bWUgPSBzdG1tYWNfcGNpX3BsYXRfcmVzdW1lO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLWxvb25nc29uLmMtNTQwLVxcdGxkLVxcdTAwM2VkZXYgPSBcXHUwMDI2cGRldi1cXHUwMDNlZGV2O1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtbG9vbmdzb24uYy01NDItXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtbG9vbmdzb24uYzo1NDM6XFx0aW5mbyA9IChzdHJ1Y3Qgc3RtbWFjX3BjaV9pbmZvICopaWQtXFx1MDAzZWRyaXZlcl9kYXRhO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLWxvb25nc29uLmMtNTQ0LVxcdHJldCA9IGluZm8tXFx1MDAzZXNldHVwKHBkZXYsIHBsYXQpO1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtbW90b3Jjb21tLmM9MTg4PXN0YXRpYyBpbnQgbW90b3Jjb21tX3Jlc3VtZShzdHJ1Y3QgZGV2aWNlICpkZXYsIHZvaWQgKmJzcF9wcml2KVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtbW90b3Jjb21tLmMtMTkyLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLW1vdG9yY29tbS5jOjE5MzpcXHRyZXQgPSBzdG1tYWNfcGNpX3BsYXRfcmVzdW1lKGRldiwgYnNwX3ByaXYpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLW1vdG9yY29tbS5jLTE5NC1cXHRpZiAocmV0KVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtbW90b3Jjb21tLmM9MjA4PW1vdG9yY29tbV9kZWZhdWx0X3BsYXRfZGF0YShzdHJ1Y3QgcGNpX2RldiAqcGRldilcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLW1vdG9yY29tbS5jLTI0OC1cXHRwbGF0LVxcdTAwM2Vjb3JlX3R5cGVcXHRcXHQ9IERXTUFDX0NPUkVfR01BQzQ7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtbW90b3Jjb21tLmM6MjQ5OlxcdHBsYXQtXFx1MDAzZXN1c3BlbmRcXHRcXHQ9IHN0bW1hY19wY2lfcGxhdF9zdXNwZW5kO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLW1vdG9yY29tbS5jLTI1MC1cXHRwbGF0LVxcdTAwM2VyZXN1bWVcXHRcXHQ9IG1vdG9yY29tbV9yZXN1bWU7XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfbGlicGNpLmMtMTEtXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX2xpYnBjaS5jOjEyOmludCBzdG1tYWNfcGNpX3BsYXRfc3VzcGVuZChzdHJ1Y3QgZGV2aWNlICpkZXYsIHZvaWQgKmJzcF9wcml2KVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19saWJwY2kuYy0xMy17XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfbGlicGNpLmMtMjUtfVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19saWJwY2kuYzoyNjpFWFBPUlRfU1lNQk9MX0dQTChzdG1tYWNfcGNpX3BsYXRfc3VzcGVuZCk7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX2xpYnBjaS5jLTI3LVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19saWJwY2kuYzoyODppbnQgc3RtbWFjX3BjaV9wbGF0X3Jlc3VtZShzdHJ1Y3QgZGV2aWNlICpkZXYsIHZvaWQgKmJzcF9wcml2KVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19saWJwY2kuYy0yOS17XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfbGlicGNpLmMtNDMtfVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19saWJwY2kuYzo0NDpFWFBPUlRfU1lNQk9MX0dQTChzdG1tYWNfcGNpX3BsYXRfcmVzdW1lKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfbGlicGNpLmMtNDUtXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfbGlicGNpLmgtOC1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfbGlicGNpLmg6OTppbnQgc3RtbWFjX3BjaV9wbGF0X3N1c3BlbmQoc3RydWN0IGRldmljZSAqZGV2LCB2b2lkICpic3BfcHJpdik7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX2xpYnBjaS5oOjEwOmludCBzdG1tYWNfcGNpX3BsYXRfcmVzdW1lKHN0cnVjdCBkZXZpY2UgKmRldiwgdm9pZCAqYnNwX3ByaXYpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19saWJwY2kuaC0xMS1cXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19wY2kuYy0xOC1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfcGNpLmM6MTk6c3RydWN0IHN0bW1hY19wY2lfaW5mbyB7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX3BjaS5jLTIwLVxcdGludCAoKnNldHVwKShzdHJ1Y3QgcGNpX2RldiAqcGRldiwgc3RydWN0IHBsYXRfc3RtbWFjZW5ldF9kYXRhICpwbGF0KTtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19wY2kuYz0zMz1zdGF0aWMgaW50IHN0bW1hY19kZWZhdWx0X2RhdGEoc3RydWN0IHBjaV9kZXYgKnBkZXYsXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfcGNpLmMtNDktXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX3BjaS5jOjUwOnN0YXRpYyBjb25zdCBzdHJ1Y3Qgc3RtbWFjX3BjaV9pbmZvIHN0bW1hY19wY2lfaW5mbyA9IHtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfcGNpLmMtNTEtXFx0LnNldHVwID0gc3RtbWFjX2RlZmF1bHRfZGF0YSxcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19wY2kuYz01ND1zdGF0aWMgaW50IHNucHNfZ21hYzVfZGVmYXVsdF9kYXRhKHN0cnVjdCBwY2lfZGV2ICpwZGV2LFxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX3BjaS5jLTEwMS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfcGNpLmM6MTAyOnN0YXRpYyBjb25zdCBzdHJ1Y3Qgc3RtbWFjX3BjaV9pbmZvIHNucHNfZ21hYzVfcGNpX2luZm8gPSB7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX3BjaS5jLTEwMy1cXHQuc2V0dXAgPSBzbnBzX2dtYWM1X2RlZmF1bHRfZGF0YSxcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19wY2kuYy0xMDYtLyoqXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX3BjaS5jOjEwNzogKiBzdG1tYWNfcGNpX3Byb2JlXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX3BjaS5jLTEwOC0gKlxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX3BjaS5jLTExNy0gKi9cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfcGNpLmM6MTE4OnN0YXRpYyBpbnQgc3RtbWFjX3BjaV9wcm9iZShzdHJ1Y3QgcGNpX2RldiAqcGRldixcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfcGNpLmMtMTE5LVxcdFxcdFxcdCAgICBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCAqaWQpXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX3BjaS5jLTEyMC17XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX3BjaS5jOjEyMTpcXHRzdHJ1Y3Qgc3RtbWFjX3BjaV9pbmZvICppbmZvID0gKHN0cnVjdCBzdG1tYWNfcGNpX2luZm8gKilpZC1cXHUwMDNlZHJpdmVyX2RhdGE7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX3BjaS5jLTEyMi1cXHRzdHJ1Y3QgcGxhdF9zdG1tYWNlbmV0X2RhdGEgKnBsYXQ7XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfcGNpLmMtMTc5LVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19wY2kuYzoxODA6XFx0cGxhdC1cXHUwMDNlc3VzcGVuZCA9IHN0bW1hY19wY2lfcGxhdF9zdXNwZW5kO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19wY2kuYzoxODE6XFx0cGxhdC1cXHUwMDNlcmVzdW1lID0gc3RtbWFjX3BjaV9wbGF0X3Jlc3VtZTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfcGNpLmMtMTgyLVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX3BjaS5jLTE4Ni0vKipcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfcGNpLmM6MTg3OiAqIHN0bW1hY19wY2lfcmVtb3ZlXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX3BjaS5jLTE4OC0gKlxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX3BjaS5jLTE5MS0gKi9cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfcGNpLmM6MTkyOnN0YXRpYyB2b2lkIHN0bW1hY19wY2lfcmVtb3ZlKHN0cnVjdCBwY2lfZGV2ICpwZGV2KVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19wY2kuYy0xOTMte1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX3BjaS5jPTIwMz1zdGF0aWMgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgc3RtbWFjX2lkX3RhYmxlW10gPSB7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX3BjaS5jOjIwNDpcXHR7IFBDSV9ERVZJQ0VfREFUQShTVE1NQUMsIFNUTU1BQywgXFx1MDAyNnN0bW1hY19wY2lfaW5mbykgfSxcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfcGNpLmM6MjA1OlxcdHsgUENJX0RFVklDRV9EQVRBKFNUTUlDUk8sIE1BQywgXFx1MDAyNnN0bW1hY19wY2lfaW5mbykgfSxcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfcGNpLmMtMjA2LVxcdHsgUENJX0RFVklDRV9EQVRBKFNZTk9QU1lTLCBHTUFDNV9JRCwgXFx1MDAyNnNucHNfZ21hYzVfcGNpX2luZm8pIH0sXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfcGNpLmM9MjEwPU1PRFVMRV9ERVZJQ0VfVEFCTEUocGNpLCBzdG1tYWNfaWRfdGFibGUpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19wY2kuYy0yMTEtXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX3BjaS5jOjIxMjpzdGF0aWMgc3RydWN0IHBjaV9kcml2ZXIgc3RtbWFjX3BjaV9kcml2ZXIgPSB7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX3BjaS5jLTIxMy1cXHQubmFtZSA9IFNUTU1BQ19SRVNPVVJDRV9OQU1FLFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19wY2kuYy0yMTQtXFx0LmlkX3RhYmxlID0gc3RtbWFjX2lkX3RhYmxlLFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19wY2kuYzoyMTU6XFx0LnByb2JlID0gc3RtbWFjX3BjaV9wcm9iZSxcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfcGNpLmM6MjE2OlxcdC5yZW1vdmUgPSBzdG1tYWNfcGNpX3JlbW92ZSxcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfcGNpLmMtMjE3LVxcdC5kcml2ZXIgICAgICAgICA9IHtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19wY2kuYy0yMjEtXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX3BjaS5jOjIyMjptb2R1bGVfcGNpX2RyaXZlcihzdG1tYWNfcGNpX2RyaXZlcik7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX3BjaS5jLTIyMy1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTRUMDY6MzU6NDMuMTk1MjgyMTM5WiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Nzk0NTA1Mzc4NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBJbml0aWFsIEFzc2Vzc21lbnQgb2YgdGhlIFNpdHVhdGlvbioqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IGBzdG1tYWNfcGNpYC4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMgdGhhdCB0aGlzIGlzIGEgUENJIGRyaXZlciB0aGF0IHN5emthbGxlciBzaG91bGQgYmUgYWJsZSB0byBwcm9iZSwgbm8gcHJvYmxlbS4gSSBuZWVkIHRvIG1ha2Ugc3VyZSBJJ20gcmlnaHQgYWJvdXQgdGhhdC4gSG1tbSwgaG9sZCBvbi4uLiBgc3RtbWFjYCBzZWVtcyB0byBiZSBmYWlybHkgd2lkZWx5IHVzZWQsIHBvcHBpbmcgdXAgaW4gYGR3bWFjLWludGVsLmNgLCBgZHdtYWMtbG9vbmdzb24uY2AsIGFuZCBgZHdtYWMtbW90b3Jjb21tLmNgIGFzIHdlbGwuIFRoYXQgYnJvYWRlbnMgdGhlIHNjb3BlIG9mIHRoaW5ncy4gQW5kIHllcywgY29uZmlybWluZyBteSBpbml0aWFsIGh1bmNoLCBgc3RtbWFjX3BjaWAgc3BlY2lmaWNhbGx5IGJpbmRzIGl0c2VsZiB0byBgUENJX0RFVklDRV9EQVRBKFNUTU1BQywgU1RNTUFDLCBcdTAwMjZzdG1tYWNfcGNpX2luZm8pYC4gVGhpcyBtZWFucyBzeXprYWxsZXIgY2FuIGRlZmluaXRlbHkgZnV6eiBpdCBlZmZlY3RpdmVseSBieSBlbXVsYXRpbmcgYSBQQ0kgZGV2aWNlIHdpdGggdGhlIHJpZ2h0IHZlbmRvciBhbmQgZGV2aWNlIElELiBUaGF04oCZcyBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQuIE5vdywgdGhlIG1vcmUgaW50ZXJlc3RpbmcgcXVlc3Rpb246IGlzIGBkd3hnbWFjMmAgd2l0aGluIHJlYWNoPyBJIG5lZWQgdG8gYW5hbHl6ZSB0aGlzIGZ1cnRoZXIuIFRoaXMgcmVjZW50IHBhdGNoIHNlZW1zIHRvIGJlIGZvY3VzZWQgb24gYGR3eGdtYWMyX2RtYS5jYCwgd2hpY2ggaW1wbGVtZW50cyBgZHd4Z21hYzIxMF9kbWFfb3BzYC4gVGltZSB0byB0cmFjZSB0aGF0LCBzZWUgd2hlcmUgYGR3eGdtYWMyMTBfZG1hX29wc2AgaXMgYWN0dWFsbHkgdXNlZC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTU1NDMsIk91dHB1dFRva2VucyI6MjUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxOTEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTRUMDY6MzU6NTEuMTQwMzM3OTg0WiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE3MzM5ODc0NTgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZHd4Z21hYzIxMF9kbWFfb3BzXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3eGdtYWMyLmg9NDc0PWV4dGVybiBjb25zdCBzdHJ1Y3Qgc3RtbWFjX29wcyBkd3hsZ21hYzJfb3BzO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3eGdtYWMyLmg6NDc1OmV4dGVybiBjb25zdCBzdHJ1Y3Qgc3RtbWFjX2RtYV9vcHMgZHd4Z21hYzIxMF9kbWFfb3BzO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3eGdtYWMyLmgtNDc2LWV4dGVybiBjb25zdCBzdHJ1Y3Qgc3RtbWFjX2Rlc2Nfb3BzIGR3eGdtYWMyMTBfZGVzY19vcHM7XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd3hnbWFjMl9kbWEuYz02NDY9c3RhdGljIGludCBkd3hnbWFjMl9yeF9kbWFfc3RvcHBlZChzdHJ1Y3Qgc3RtbWFjX3ByaXYgKnByaXYsXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd3hnbWFjMl9kbWEuYy02NjAtXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHd4Z21hYzJfZG1hLmM6NjYxOmNvbnN0IHN0cnVjdCBzdG1tYWNfZG1hX29wcyBkd3hnbWFjMjEwX2RtYV9vcHMgPSB7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHd4Z21hYzJfZG1hLmMtNjYyLVxcdC5yZXNldCA9IGR3eGdtYWMyX2RtYV9yZXNldCxcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2h3aWYuYz0xMTE9c3RhdGljIGNvbnN0IHN0cnVjdCBzdG1tYWNfaHdpZl9lbnRyeSB7XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9od2lmLmMtMjU3LVxcdFxcdC5kZXNjID0gXFx1MDAyNmR3eGdtYWMyMTBfZGVzY19vcHMsXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvaHdpZi5jOjI1ODpcXHRcXHQuZG1hID0gXFx1MDAyNmR3eGdtYWMyMTBfZG1hX29wcyxcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9od2lmLmMtMjU5LVxcdFxcdC5tYWMgPSBcXHUwMDI2ZHd4Z21hYzIxMF9vcHMsXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9od2lmLmMtMjc5LVxcdFxcdC5kZXNjID0gXFx1MDAyNmR3eGdtYWMyMTBfZGVzY19vcHMsXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvaHdpZi5jOjI4MDpcXHRcXHQuZG1hID0gXFx1MDAyNmR3eGdtYWMyMTBfZG1hX29wcyxcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9od2lmLmMtMjgxLVxcdFxcdC5tYWMgPSBcXHUwMDI2ZHd4bGdtYWMyX29wcyxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTRUMDY6MzU6NTIuODc0MzM2NTQyWiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MjkxMTg0ODkzMywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMuIEhlcmUncyBteSB0YWtlIG9uIHRob3NlIGluaXRpYWwgdGhvdWdodHM6XG5cbioqQW5hbHl6aW5nIGBod2lmLmNgJ3MgSW50ZXJhY3Rpb24gd2l0aCBEYXRhIEVudHJpZXMqKlxuXG5SaWdodCwgc28gSSdtIGxvb2tpbmcgYXQgYGh3aWYuY2AuIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzLCBcIk9rYXksIHdoYXQgZG9lcyAqdGhpcyogcGFydGljdWxhciBjb2RlIG1vZHVsZSBhY3R1YWxseSBkbyB3aXRoIHRoZXNlIGRhdGEgZW50cmllcz9cIiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgcHJvY2Vzc2luZyBmbG93LCB0aGUgbWFuaXB1bGF0aW9ucywgYW5kIHRoZSBldmVudHVhbCBkZXN0aW5hdGlvbiBvciBwdXJwb3NlIG9mIHRoZXNlIGVudHJpZXMgd2l0aGluIHRoZSBjb250ZXh0IG9mIHRoZSBoYXJkd2FyZSBpbnRlcmZhY2UuIEkgbmVlZCB0byBmaWd1cmUgb3V0IHRoZSByb2xlcy4gSXMgaXQgYSByZWFkZXI/IEEgd3JpdGVyPyBBIHRyYW5zbGF0b3I/IEEgZmlsdGVyPyBQcm9iYWJseSBhIGNvbWJpbmF0aW9uLiBCdXQgZmlyc3QsIHRoZSBtZWNoYW5pY3Mgb2YgaXRzIGludGVyYWN0aW9uIGFyZSBwYXJhbW91bnQuIEkgbmVlZCB0byB0cmFjZSB0aGUgZGF0YSdzIGpvdXJuZXkgYW5kIHNlZSBob3cgdGhlIGZ1bmN0aW9ucyB3aXRoaW4gYGh3aWYuY2AgaGFuZGxlIHRoZW0uIFRoYXQncyB0aGUga2V5IHRvIHVuZGVyc3RhbmRpbmcgaXRzIG92ZXJhbGwgaW1wYWN0LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNjY1MSwiT3V0cHV0VG9rZW5zIjoyMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE0VDA2OjM1OjU1Ljc4NjE4NzkzNVoiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNjE1ODA2NzAxLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImR3eGdtYWMyMTBfb3BzXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3eGdtYWMyLmgtNDcyLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3eGdtYWMyLmg6NDczOmV4dGVybiBjb25zdCBzdHJ1Y3Qgc3RtbWFjX29wcyBkd3hnbWFjMjEwX29wcztcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd3hnbWFjMi5oLTQ3NC1leHRlcm4gY29uc3Qgc3RydWN0IHN0bW1hY19vcHMgZHd4bGdtYWMyX29wcztcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3eGdtYWMyX2NvcmUuYz0xNDEzPXN0YXRpYyB2b2lkIGR3eGdtYWMyX3NldF9hcnBfb2ZmbG9hZChzdHJ1Y3QgbWFjX2RldmljZV9pbmZvICpodywgYm9vbCBlbixcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3eGdtYWMyX2NvcmUuYy0xNDI4LVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3eGdtYWMyX2NvcmUuYzoxNDI5OmNvbnN0IHN0cnVjdCBzdG1tYWNfb3BzIGR3eGdtYWMyMTBfb3BzID0ge1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3eGdtYWMyX2NvcmUuYy0xNDMwLVxcdC5jb3JlX2luaXQgPSBkd3hnbWFjMl9jb3JlX2luaXQsXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9od2lmLmM9MTExPXN0YXRpYyBjb25zdCBzdHJ1Y3Qgc3RtbWFjX2h3aWZfZW50cnkge1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvaHdpZi5jLTI1OC1cXHRcXHQuZG1hID0gXFx1MDAyNmR3eGdtYWMyMTBfZG1hX29wcyxcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9od2lmLmM6MjU5OlxcdFxcdC5tYWMgPSBcXHUwMDI2ZHd4Z21hYzIxMF9vcHMsXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvaHdpZi5jLTI2MC1cXHRcXHQudmxhbiA9IFxcdTAwMjZkd3hnbWFjMjEwX3ZsYW5fb3BzLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xNFQwNjozNTo1Ny40MDIwMDA1MjZaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNzAyODYyNDEwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgc3VtbWFyeSwgYXMgaWYgSSB3ZXJlIHRoaW5raW5nIHRoZXNlIHRob3VnaHRzOlxuXG4qKkFuYWx5emluZyB0aGUgU1RNTUFDIEhhcmR3YXJlIEludGVyZmFjZSBFbnRyeSBQb2ludCoqXG5cbk9rYXksIHRpbWUgdG8gZGlnIGluLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlIGhhcmR3YXJlIGludGVyZmFjZSBpcyBpbml0aWFsaXplZCBhbmQgYWNjZXNzZWQgZm9yIHRoaXMgU1RNTUFDIGRyaXZlci4gVGhlIG1vc3QgbG9naWNhbCBzdGFydGluZyBwb2ludCBpcyBwcm9iYWJseSBgc3RtbWFjX2h3aWZfZW50cnlgIHdpdGhpbiBgaHdpZi5jYC4gSSBleHBlY3QgdGhpcyBmdW5jdGlvbiB0byBiZSB0aGUgY2VudHJhbCBwb2ludCBvZiBpbnRlcmFjdGlvbiB3aXRoIHRoZSBoYXJkd2FyZSBhYnN0cmFjdGlvbiBsYXllciAoSEFMKSBmb3IgdGhpcyBzcGVjaWZpYyBFdGhlcm5ldCBNQUMuIEkgYW50aWNpcGF0ZSBmaW5kaW5nIGluaXRpYWxpemF0aW9uIHJvdXRpbmVzLCByZWdpc3RlciBtYXBwaW5nIHNldHVwcywgYW5kIGxpa2VseSBpbnRlcnJ1cHQgY29uZmlndXJhdGlvbiByZWxhdGVkIHRvIHRoZSBoYXJkd2FyZSB3aXRoaW4gdGhpcyBlbnRyeSBmdW5jdGlvbiBvciBhIGNhbGwgY2hhaW4gb3JpZ2luYXRpbmcgZnJvbSBpdC4gVGhpcyB3aWxsIHByb3ZpZGUgdmFsdWFibGUgaW5zaWdodCBpbnRvIGhvdyB0aGUgZHJpdmVyIGludGVyYWN0cyB3aXRoIHRoZSB1bmRlcmx5aW5nIGhhcmR3YXJlIGNvbXBvbmVudHMgYW5kIGhvdyBpdCdzIGNvbmZpZ3VyZWQuIExldCdzIGdldCB0byBpdC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTczMjYsIk91dHB1dFRva2VucyI6MjIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xNFQwNjozNjowMS4xMDQ4NjcwMDdaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE2Mzc4MTIzNDcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwic3RtbWFjX2h3aWZfZW50cnlcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvaHdpZi5jPTEwMD1pbnQgc3RtbWFjX3Jlc2V0KHN0cnVjdCBzdG1tYWNfcHJpdiAqcHJpdilcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2h3aWYuYy0xMTAtXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvaHdpZi5jOjExMTpzdGF0aWMgY29uc3Qgc3RydWN0IHN0bW1hY19od2lmX2VudHJ5IHtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9od2lmLmMtMTEyLVxcdGVudW0gZHdtYWNfY29yZV90eXBlIGNvcmVfdHlwZTtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2h3aWYuYy0yOTItXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvaHdpZi5jOjI5MzpzdGF0aWMgY29uc3Qgc3RydWN0IHN0bW1hY19od2lmX2VudHJ5ICpcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9od2lmLmMtMjk0LXN0bW1hY19od2lmX2ZpbmQoZW51bSBkd21hY19jb3JlX3R5cGUgY29yZV90eXBlLCB1OCBzbnBzdmVyLCB1OCBkZXZfaWQpXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvaHdpZi5jLTI5NS17XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvaHdpZi5jOjI5NjpcXHRjb25zdCBzdHJ1Y3Qgc3RtbWFjX2h3aWZfZW50cnkgKmVudHJ5O1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2h3aWYuYy0yOTctXFx0aW50IGk7XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9od2lmLmM9MzE3PWludCBzdG1tYWNfaHdpZl9pbml0KHN0cnVjdCBzdG1tYWNfcHJpdiAqcHJpdilcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2h3aWYuYy0zMTktXFx0ZW51bSBkd21hY19jb3JlX3R5cGUgY29yZV90eXBlID0gcHJpdi1cXHUwMDNlcGxhdC1cXHUwMDNlY29yZV90eXBlO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2h3aWYuYzozMjA6XFx0Y29uc3Qgc3RydWN0IHN0bW1hY19od2lmX2VudHJ5ICplbnRyeTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9od2lmLmMtMzIxLVxcdHN0cnVjdCBzdG1tYWNfdmVyc2lvbiB2ZXJzaW9uO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xNFQwNjozNjowMi43NDI2ODg5NzRaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Mzc2NjgxOTQzNCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqTWFwcGluZyBgY29yZV90eXBlYCB0byBgZHd4Z21hYzIxMF9kbWFfb3BzYCoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IGhvdyB0aGUgYGNvcmVfdHlwZWAgZW51bWVyYXRpb24gcmVsYXRlcyB0byB0aGUgYGR3eGdtYWMyMTBfZG1hX29wc2Agc3RydWN0dXJlcy4gSXQncyBhIGNsYXNzaWMgc2l0dWF0aW9uIHdoZXJlIGEgaGFyZHdhcmUgYWJzdHJhY3Rpb24gbmVlZHMgdG8gYmUgbGlua2VkIHRvIGEgc3BlY2lmaWMgaW1wbGVtZW50YXRpb24uIEknbSBwcm9iYWJseSBkZWFsaW5nIHdpdGggYSBzeXN0ZW0gdGhhdCBoYXMgcG90ZW50aWFsbHkgbXVsdGlwbGUgRE1BIGNvbnRyb2xsZXJzLCBvciBhdCBsZWFzdCBkaWZmZXJlbnQgY29uZmlndXJhdGlvbnMsIGFuZCB0aGUgYGNvcmVfdHlwZWAgaXMgdGhlIGtleSB0byBzZWxlY3RpbmcgdGhlIHJpZ2h0IHNldCBvZiBETUEgb3BlcmF0aW9ucy5cblxuTXkgcHJpbWFyeSBmb2N1cyByaWdodCBub3cgaXMgdG8gdW5kZXJzdGFuZCB0aGUgbG9va3VwIG1lY2hhbmlzbS4gSXMgaXQgYSBzaW1wbGUgc3dpdGNoIHN0YXRlbWVudD8gTWF5YmUgYSBsb29rdXAgdGFibGU/IEFyZSB0aGVyZSBhbnkgaW5kaXJlY3QgbGF5ZXJzIG9mIGFic3RyYWN0aW9uIEkgbmVlZCB0byB1bmRlcnN0YW5kPyBHaXZlbiB0aGF0IHRoaXMgaXMgbGlrZWx5IHRpZWQgdG8gdGhlIGRlc2lnbiBvZiB0aGUgZHJpdmVyIGFuZCBwbGF0Zm9ybSwgSSBuZWVkIHRvIGtub3c6IEFyZSB0aGVyZSBhbnkgY29tcGF0aWJpbGl0eSBsYXllcnMsIG9yIHNwZWNpYWwgY2FzZXMgdG8gYmUgYXdhcmUgb2Y/IEFyZSB0aGVyZSBhcmNoaXRlY3R1cmFsIGNvbnNpZGVyYXRpb25zIGhlcmU/IERvZXMgdGhpcyByZWxhdGlvbnNoaXAgYWZmZWN0IHRoZSBwb3dlciBtYW5hZ2VtZW50LCBjbG9jayBnYXRpbmcsIG9yIGludGVycnVwdCBoYW5kbGluZyBiZWhhdmlvcj9cblxuVWx0aW1hdGVseSwgdGhlIGdvYWwgaXMgYSBjb21wbGV0ZSBwaWN0dXJlLiBPbmNlIEkndmUgbWFwcGVkIHRoZSBwb3RlbnRpYWwgdmFsdWVzIG9mIGBjb3JlX3R5cGVgIHRvIHRoZSBjb3JyZWN0IGBkd3hnbWFjMjEwX2RtYV9vcHNgIHN0cnVjdHVyZSwgSSdsbCBrbm93IHdoZXJlIHRvIGxvb2sgbmV4dCB0byB1bmRlcnN0YW5kIHRoZSBkZXRhaWxzIG9mIHRoZSBETUEgb3BlcmF0aW9ucy4gSSBoYXZlIGEgbG90IG9mIGRlYnVnZ2luZyB0byBkbyFcblxuXG4iLCJJbnB1dFRva2VucyI6MTgwNTEsIk91dHB1dFRva2VucyI6NDYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xNFQwNjozNjowNi41MDk1MTA4MzlaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6Nzc2ODAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvaHdpZi5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDI1MCxcbiAgXCJMaW5lQ291bnRcIjogNTBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDI1MDpcXHRcXHRcXHQuZGV2X2lkID0gRFdYR01BQ19JRCxcXG4gMjUxOlxcdFxcdFxcdC5yZWdzID0ge1xcbiAyNTI6XFx0XFx0XFx0XFx0LnB0cF9vZmYgPSBQVFBfWEdNQUNfT0ZGU0VULFxcbiAyNTM6XFx0XFx0XFx0XFx0Lm1tY19vZmYgPSBNTUNfWEdNQUNfT0ZGU0VULFxcbiAyNTQ6XFx0XFx0XFx0XFx0LmVzdF9vZmYgPSBFU1RfWEdNQUNfT0ZGU0VULFxcbiAyNTU6XFx0XFx0XFx0XFx0LmZwZV9yZWcgPSBcXHUwMDI2ZHd4Z21hYzNfZnBlX3JlZyxcXG4gMjU2OlxcdFxcdFxcdH0sXFxuIDI1NzpcXHRcXHRcXHQuZGVzYyA9IFxcdTAwMjZkd3hnbWFjMjEwX2Rlc2Nfb3BzLFxcbiAyNTg6XFx0XFx0XFx0LmRtYSA9IFxcdTAwMjZkd3hnbWFjMjEwX2RtYV9vcHMsXFxuIDI1OTpcXHRcXHRcXHQubWFjID0gXFx1MDAyNmR3eGdtYWMyMTBfb3BzLFxcbiAyNjA6XFx0XFx0XFx0LnZsYW4gPSBcXHUwMDI2ZHd4Z21hYzIxMF92bGFuX29wcyxcXG4gMjYxOlxcdFxcdFxcdC5od3RpbWVzdGFtcCA9IFxcdTAwMjZzdG1tYWNfcHRwLFxcbiAyNjI6XFx0XFx0XFx0LnB0cCA9IFxcdTAwMjZzdG1tYWNfcHRwX2Nsb2NrX29wcyxcXG4gMjYzOlxcdFxcdFxcdC5tb2RlID0gTlVMTCxcXG4gMjY0OlxcdFxcdFxcdC50YyA9IFxcdTAwMjZkd21hYzUxMF90Y19vcHMsXFxuIDI2NTpcXHRcXHRcXHQubW1jID0gXFx1MDAyNmR3eGdtYWNfbW1jX29wcyxcXG4gMjY2OlxcdFxcdFxcdC5lc3QgPSBcXHUwMDI2ZHdtYWM1MTBfZXN0X29wcyxcXG4gMjY3OlxcdFxcdFxcdC5zZXR1cCA9IGR3eGdtYWMyX3NldHVwLFxcbiAyNjg6XFx0XFx0XFx0LnF1aXJrcyA9IE5VTEwsXFxuIDI2OTpcXHRcXHR9LCB7XFxuIDI3MDpcXHRcXHRcXHQuY29yZV90eXBlID0gRFdNQUNfQ09SRV9YR01BQyxcXG4gMjcxOlxcdFxcdFxcdC5taW5faWQgPSBEV1hMR01BQ19DT1JFXzJfMDAsXFxuIDI3MjpcXHRcXHRcXHQuZGV2X2lkID0gRFdYTEdNQUNfSUQsXFxuIDI3MzpcXHRcXHRcXHQucmVncyA9IHtcXG4gMjc0OlxcdFxcdFxcdFxcdC5wdHBfb2ZmID0gUFRQX1hHTUFDX09GRlNFVCxcXG4gMjc1OlxcdFxcdFxcdFxcdC5tbWNfb2ZmID0gTU1DX1hHTUFDX09GRlNFVCxcXG4gMjc2OlxcdFxcdFxcdFxcdC5lc3Rfb2ZmID0gRVNUX1hHTUFDX09GRlNFVCxcXG4gMjc3OlxcdFxcdFxcdFxcdC5mcGVfcmVnID0gXFx1MDAyNmR3eGdtYWMzX2ZwZV9yZWcsXFxuIDI3ODpcXHRcXHRcXHR9LFxcbiAyNzk6XFx0XFx0XFx0LmRlc2MgPSBcXHUwMDI2ZHd4Z21hYzIxMF9kZXNjX29wcyxcXG4gMjgwOlxcdFxcdFxcdC5kbWEgPSBcXHUwMDI2ZHd4Z21hYzIxMF9kbWFfb3BzLFxcbiAyODE6XFx0XFx0XFx0Lm1hYyA9IFxcdTAwMjZkd3hsZ21hYzJfb3BzLFxcbiAyODI6XFx0XFx0XFx0LnZsYW4gPSBcXHUwMDI2ZHd4bGdtYWMyX3ZsYW5fb3BzLFxcbiAyODM6XFx0XFx0XFx0Lmh3dGltZXN0YW1wID0gXFx1MDAyNnN0bW1hY19wdHAsXFxuIDI4NDpcXHRcXHRcXHQucHRwID0gXFx1MDAyNnN0bW1hY19wdHBfY2xvY2tfb3BzLFxcbiAyODU6XFx0XFx0XFx0Lm1vZGUgPSBOVUxMLFxcbiAyODY6XFx0XFx0XFx0LnRjID0gXFx1MDAyNmR3bWFjNTEwX3RjX29wcyxcXG4gMjg3OlxcdFxcdFxcdC5tbWMgPSBcXHUwMDI2ZHd4Z21hY19tbWNfb3BzLFxcbiAyODg6XFx0XFx0XFx0LmVzdCA9IFxcdTAwMjZkd21hYzUxMF9lc3Rfb3BzLFxcbiAyODk6XFx0XFx0XFx0LnNldHVwID0gZHd4bGdtYWMyX3NldHVwLFxcbiAyOTA6XFx0XFx0fSxcXG4gMjkxOlxcdH07XFxuIDI5MjpcXHRcXG4gMjkzOlxcdHN0YXRpYyBjb25zdCBzdHJ1Y3Qgc3RtbWFjX2h3aWZfZW50cnkgKlxcbiAyOTQ6XFx0c3RtbWFjX2h3aWZfZmluZChlbnVtIGR3bWFjX2NvcmVfdHlwZSBjb3JlX3R5cGUsIHU4IHNucHN2ZXIsIHU4IGRldl9pZClcXG4gMjk1OlxcdHtcXG4gMjk2OlxcdFxcdGNvbnN0IHN0cnVjdCBzdG1tYWNfaHdpZl9lbnRyeSAqZW50cnk7XFxuIDI5NzpcXHRcXHRpbnQgaTtcXG4gMjk4OlxcdFxcbiAyOTk6XFx0XFx0Zm9yIChpID0gQVJSQVlfU0laRShzdG1tYWNfaHcpIC0gMTsgaSBcXHUwMDNlPSAwOyBpLS0pIHtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTRUMDY6MzY6MDYuNTA5NTg5NTU5WiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQwMTcwNzYxNzcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0IHRob3VnaHQgcHJvY2VzcywgZnJvbSBhbiBleHBlcnQncyBwZXJzcGVjdGl2ZTpcblxuKipJbnZlc3RpZ2F0aW5nIFhHTUFDIENvcmUgRHJpdmVyIEFzc29jaWF0aW9uKipcblxuQWxyaWdodCwgc28gdGhlIGBEV01BQ19DT1JFX1hHTUFDYCBjb3JlIGlzIGFzc29jaWF0ZWQgd2l0aCB0aGUgYGR3eGdtYWMyMTBfZG1hX29wc2Agb3BlcmF0aW9ucy4gTXkgbWluZCBpbW1lZGlhdGVseSBqdW1wcyB0byB0aGUgUENJIGRyaXZlcnMsIHNwZWNpZmljYWxseSBgc3RtbWFjX3BjaWAsIHRvIHVuZGVyc3RhbmQgaG93IHRoaXMgY29ubmVjdGlvbiBpcyBlc3RhYmxpc2hlZCBhdCB0aGUgaGFyZHdhcmUgbGV2ZWwuIEkgbmVlZCB0byBxdWlja2x5IGRldGVybWluZSB3aGV0aGVyIGFueSBvZiB0aGUgUENJIGRyaXZlcnMsIG9yIHBlcmhhcHMgb3RoZXIgZHJpdmVycyBJJ20gZmFtaWxpYXIgd2l0aCwgc3BlY2lmaWNhbGx5IHNldCB0aGF0IGBjb3JlX3R5cGVgIHRvIGBEV01BQ19DT1JFX1hHTUFDYC4gVGhpcyBpcyBhIHZpdGFsIHN0ZXAgaW4gdW5kZXJzdGFuZGluZyB0aGUgZGV2aWNlJ3Mgc2V0dXAgYW5kIGl0cyBjb25maWd1cmF0aW9uIHdpdGhpbiB0aGUgc3lzdGVtLiBJJ20gZm9jdXNpbmcgb24gdGhlIGNvbmZpZ3VyYXRpb24gb2YgdGhpcyBjb3JlLCBhbmQgSSBuZWVkIHRvIGRldGVybWluZSBob3cgaXQncyBiZWluZyBoYW5kbGVkIGJ5IHRoZSBzeXN0ZW0uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE5MzU2LCJPdXRwdXRUb2tlbnMiOjIzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NjMsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xNFQwNjozNjoxMC41MjY2Njg5MDZaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE1Mjg2NzU3ODksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiRFdNQUNfQ09SRV9YR01BQ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9jb21tb24uaD00OT1zdGF0aWMgaW5saW5lIGJvb2wgZHdtYWNfaXNfeG1hYyhlbnVtIGR3bWFjX2NvcmVfdHlwZSBjb3JlX3R5cGUpXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvY29tbW9uLmgtNTAte1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2NvbW1vbi5oOjUxOlxcdHJldHVybiBjb3JlX3R5cGUgPT0gRFdNQUNfQ09SRV9HTUFDNCB8fCBjb3JlX3R5cGUgPT0gRFdNQUNfQ09SRV9YR01BQztcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9jb21tb24uaC01Mi19XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1zb2NmcGdhLmM9NTY5PXN0YXRpYyB2b2lkIHNvY2ZwZ2FfYWdpbGV4NV9zZXR1cF9wbGF0X2RhdChzdHJ1Y3Qgc29jZnBnYV9kd21hYyAqZHdtYWMpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1zb2NmcGdhLmMtNTcyLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLXNvY2ZwZ2EuYzo1NzM6XFx0cGxhdF9kYXQtXFx1MDAzZWNvcmVfdHlwZSA9IERXTUFDX0NPUkVfWEdNQUM7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtc29jZnBnYS5jLTU3NC1cXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLXRlZ3JhLmM9MjE0PXN0YXRpYyBpbnQgdGVncmFfbWdiZV9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtdGVncmEuYy0zMjUtXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtdGVncmEuYzozMjY6XFx0cGxhdC1cXHUwMDNlY29yZV90eXBlID0gRFdNQUNfQ09SRV9YR01BQztcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy10ZWdyYS5jLTMyNy1cXHRwbGF0LVxcdTAwM2VmbGFncyB8PSBTVE1NQUNfRkxBR19UU09fRU47XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9od2lmLmM9MjE9c3RhdGljIHZvaWQgc3RtbWFjX2dldF92ZXJzaW9uKHN0cnVjdCBzdG1tYWNfcHJpdiAqcHJpdixcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2h3aWYuYy00OS1cXHR2ZXItXFx1MDAzZXNucHN2ZXIgPSBGSUVMRF9HRVQoRFdNQUNfU05QU1ZFUiwgdmVyc2lvbik7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvaHdpZi5jOjUwOlxcdGlmIChjb3JlX3R5cGUgPT0gRFdNQUNfQ09SRV9YR01BQylcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9od2lmLmMtNTEtXFx0XFx0dmVyLVxcdTAwM2VkZXZfaWQgPSBGSUVMRF9HRVQoRFdNQUNfVVNFUlZFUiwgdmVyc2lvbik7XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9od2lmLmM9MTExPXN0YXRpYyBjb25zdCBzdHJ1Y3Qgc3RtbWFjX2h3aWZfZW50cnkge1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvaHdpZi5jLTI0Ny1cXHR9LCB7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvaHdpZi5jOjI0ODpcXHRcXHQuY29yZV90eXBlID0gRFdNQUNfQ09SRV9YR01BQyxcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9od2lmLmMtMjQ5LVxcdFxcdC5taW5faWQgPSBEV1hHTUFDX0NPUkVfMl8xMCxcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2h3aWYuYy0yNjktXFx0fSwge1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2h3aWYuYzoyNzA6XFx0XFx0LmNvcmVfdHlwZSA9IERXTUFDX0NPUkVfWEdNQUMsXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvaHdpZi5jLTI3MS1cXHRcXHQubWluX2lkID0gRFdYTEdNQUNfQ09SRV8yXzAwLFxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvaHdpZi5jPTI5ND1zdG1tYWNfaHdpZl9maW5kKGVudW0gZHdtYWNfY29yZV90eXBlIGNvcmVfdHlwZSwgdTggc25wc3ZlciwgdTggZGV2X2lkKVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvaHdpZi5jLTMwNi1cXHRcXHRcXHRjb250aW51ZTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9od2lmLmM6MzA3OlxcdFxcdGlmIChjb3JlX3R5cGUgPT0gRFdNQUNfQ09SRV9YR01BQyBcXHUwMDI2XFx1MDAyNlxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2h3aWYuYy0zMDgtXFx0XFx0ICAgIGRldl9pZCAhPSBlbnRyeS1cXHUwMDNlZGV2X2lkKVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX2VzdC5jPTI4PXN0YXRpYyBpbnQgZXN0X2NvbmZpZ3VyZShzdHJ1Y3Qgc3RtbWFjX3ByaXYgKnByaXYsIHN0cnVjdCBzdG1tYWNfZXN0ICpjZmcsXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfZXN0LmMtNTUtXFx0Y3RybCA9IHJlYWRsKGVzdF9hZGRyICsgRVNUX0NPTlRST0wpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19lc3QuYzo1NjpcXHRpZiAocHJpdi1cXHUwMDNlcGxhdC1cXHUwMDNlY29yZV90eXBlID09IERXTUFDX0NPUkVfWEdNQUMpIHtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfZXN0LmMtNTctXFx0XFx0Y3RybCBcXHUwMDI2PSB+RVNUX1hHTUFDX1BUT1Y7XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfZXN0LmM9ODM9c3RhdGljIHZvaWQgZXN0X2lycV9zdGF0dXMoc3RydWN0IHN0bW1hY19wcml2ICpwcml2LCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX2VzdC5jLTE1MC1cXHRpZiAoc3RhdHVzIFxcdTAwMjYgRVNUX0JUUkUpIHtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfZXN0LmM6MTUxOlxcdFxcdGlmIChwcml2LVxcdTAwM2VwbGF0LVxcdTAwM2Vjb3JlX3R5cGUgPT0gRFdNQUNfQ09SRV9YR01BQykge1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19lc3QuYy0xNTItXFx0XFx0XFx0YnRybCA9IEZJRUxEX0dFVChFU1RfWEdNQUNfQlRSTCwgc3RhdHVzKTtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19ldGh0b29sLmM9MzAxPXN0YXRpYyB2b2lkIHN0bW1hY19ldGh0b29sX2dldGRydmluZm8oc3RydWN0IG5ldF9kZXZpY2UgKmRldixcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19ldGh0b29sLmMtMzA4LVxcdFxcdHN0cnNjcHkoaW5mby1cXHUwMDNlZHJpdmVyLCBHTUFDX0VUSFRPT0xfTkFNRSwgc2l6ZW9mKGluZm8tXFx1MDAzZWRyaXZlcikpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19ldGh0b29sLmM6MzA5OlxcdGVsc2UgaWYgKHByaXYtXFx1MDAzZXBsYXQtXFx1MDAzZWNvcmVfdHlwZSA9PSBEV01BQ19DT1JFX1hHTUFDKVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19ldGh0b29sLmMtMzEwLVxcdFxcdHN0cnNjcHkoaW5mby1cXHUwMDNlZHJpdmVyLCBYR01BQ19FVEhUT09MX05BTUUsIHNpemVvZihpbmZvLVxcdTAwM2Vkcml2ZXIpKTtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19ldGh0b29sLmM9MzUwPXN0YXRpYyBpbnQgc3RtbWFjX2V0aHRvb2xfZ2V0X3JlZ3NfbGVuKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfZXRodG9vbC5jLTM1My1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfZXRodG9vbC5jOjM1NDpcXHRpZiAocHJpdi1cXHUwMDNlcGxhdC1cXHUwMDNlY29yZV90eXBlID09IERXTUFDX0NPUkVfWEdNQUMpXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX2V0aHRvb2wuYy0zNTUtXFx0XFx0cmV0dXJuIFhHTUFDX1JFR1NJWkUgKiA0O1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX2V0aHRvb2wuYz0zNjE9c3RhdGljIHZvaWQgc3RtbWFjX2V0aHRvb2xfZ3JlZ3Moc3RydWN0IG5ldF9kZXZpY2UgKmRldixcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19ldGh0b29sLmMtMzc1LVxcdFxcdCAgICAgICBOVU1fRFdNQUM0X0RNQV9SRUdTICogNCk7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX2V0aHRvb2wuYzozNzY6XFx0fSBlbHNlIGlmIChwcml2LVxcdTAwM2VwbGF0LVxcdTAwM2Vjb3JlX3R5cGUgIT0gRFdNQUNfQ09SRV9YR01BQykge1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19ldGh0b29sLmMtMzc3LVxcdFxcdG1lbWNweShcXHUwMDI2cmVnX3NwYWNlW0VUSFRPT0xfRE1BX09GRlNFVF0sXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfbWFpbi5jPTY0Mj1zdGF0aWMgaW50IHN0bW1hY19od3RzdGFtcF9zZXQoc3RydWN0IG5ldF9kZXZpY2UgKmRldixcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19tYWluLmMtNzU4LVxcdFxcdFxcdGlmIChwcml2LVxcdTAwM2VzeW5vcHN5c19pZCBcXHUwMDNjIERXTUFDX0NPUkVfM183MCBcXHUwMDI2XFx1MDAyNlxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19tYWluLmM6NzU5OlxcdFxcdFxcdCAgICBwcml2LVxcdTAwM2VwbGF0LVxcdTAwM2Vjb3JlX3R5cGUgIT0gRFdNQUNfQ09SRV9YR01BQylcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfbWFpbi5jLTc2MC1cXHRcXHRcXHRcXHR0c19ldmVudF9lbiA9IFBUUF9UQ1JfVFNFVk5URU5BO1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX21haW4uYz02NjA1PXN0YXRpYyBpbnQgc3RtbWFjX2RtYV9jYXBfc2hvdyhzdHJ1Y3Qgc2VxX2ZpbGUgKnNlcSwgdm9pZCAqdilcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19tYWluLmMtNjY0MC1cXHRcXHQgICAocHJpdi1cXHUwMDNlZG1hX2NhcC5oYWxmX2R1cGxleCkgPyBcXFwiWVxcXCIgOiBcXFwiTlxcXCIpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19tYWluLmM6NjY0MTpcXHRpZiAocHJpdi1cXHUwMDNlcGxhdC1cXHUwMDNlY29yZV90eXBlID09IERXTUFDX0NPUkVfWEdNQUMpIHtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfbWFpbi5jLTY2NDItXFx0XFx0c2VxX3ByaW50ZihzZXEsXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfbWFpbi5jLTY2NjQtXFx0XFx0ICAgKHByaXYtXFx1MDAzZWRtYV9jYXAuYXRpbWVfc3RhbXApID8gXFxcIllcXFwiIDogXFxcIk5cXFwiKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfbWFpbi5jOjY2NjU6XFx0aWYgKHByaXYtXFx1MDAzZXBsYXQtXFx1MDAzZWNvcmVfdHlwZSA9PSBEV01BQ19DT1JFX1hHTUFDKVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19tYWluLmMtNjY2Ni1cXHRcXHRzZXFfcHJpbnRmKHNlcSwgXFxcIlxcXFx0VGltZXN0YW1wIFN5c3RlbSBUaW1lIFNvdXJjZTogJXNcXFxcblxcXCIsXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfbWFpbi5jLTY2NzMtXFx0aWYgKHByaXYtXFx1MDAzZXN5bm9wc3lzX2lkIFxcdTAwM2U9IERXTUFDX0NPUkVfNF8wMCB8fFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19tYWluLmM6NjY3NDpcXHQgICAgcHJpdi1cXHUwMDNlcGxhdC1cXHUwMDNlY29yZV90eXBlID09IERXTUFDX0NPUkVfWEdNQUMpIHtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfbWFpbi5jLTY2NzUtXFx0XFx0c2VxX3ByaW50ZihzZXEsIFxcXCJcXFxcdElQIENoZWNrc3VtIE9mZmxvYWQgaW4gUlg6ICVzXFxcXG5cXFwiLFxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX21haW4uYz03NDAyPXN0YXRpYyB2b2lkIHN0bW1hY19wcmludF9hY3RwaHlpZihzdHJ1Y3Qgc3RtbWFjX3ByaXYgKnByaXYpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfbWFpbi5jLTc0MTctXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX21haW4uYzo3NDE4OlxcdGNhc2UgRFdNQUNfQ09SRV9YR01BQzpcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfbWFpbi5jLTc0MTktXFx0XFx0cGh5aWZfdGFibGUgPSBzdG1tYWNfZHd4Z21hY19waHlpZjtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19tYWluLmM9NzQ0ND1zdGF0aWMgaW50IHN0bW1hY19od19pbml0KHN0cnVjdCBzdG1tYWNfcHJpdiAqcHJpdilcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19tYWluLmMtNzU2Ni1cXHRpZiAoKHByaXYtXFx1MDAzZXN5bm9wc3lzX2lkIFxcdTAwM2U9IERXTUFDX0NPUkVfM181MCB8fFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19tYWluLmM6NzU2NzpcXHQgICAgIHByaXYtXFx1MDAzZXBsYXQtXFx1MDAzZWNvcmVfdHlwZSA9PSBEV01BQ19DT1JFX1hHTUFDKSBcXHUwMDI2XFx1MDAyNlxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19tYWluLmMtNzU2OC1cXHQgICAgIXByaXYtXFx1MDAzZXBsYXQtXFx1MDAzZXJpd3Rfb2ZmKSB7XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfbWFpbi5jPTc4MzM9c3RhdGljIGludCBfX3N0bW1hY19kdnJfcHJvYmUoc3RydWN0IGRldmljZSAqZGV2aWNlLFxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX21haW4uYy04MDQwLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19tYWluLmM6ODA0MTpcXHRpZiAocHJpdi1cXHUwMDNlcGxhdC1cXHUwMDNlY29yZV90eXBlID09IERXTUFDX0NPUkVfWEdNQUMpXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX21haW4uYy04MDQyLVxcdFxcdG5kZXYtXFx1MDAzZW1heF9tdHUgPSBYR01BQ19KVU1CT19MRU47XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfbWRpby5jPTUzNj1zdGF0aWMgdTMyIHN0bW1hY19jbGtfY3NyX3NldChzdHJ1Y3Qgc3RtbWFjX3ByaXYgKnByaXYpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfbWRpby5jLTU1NC1cXHRcXHRyYXRlcyA9IHN0bW1hY19zdW44aV9jc3JfdG9fbWRjO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19tZGlvLmM6NTU1OlxcdGlmIChwcml2LVxcdTAwM2VwbGF0LVxcdTAwM2Vjb3JlX3R5cGUgPT0gRFdNQUNfQ09SRV9YR01BQylcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfbWRpby5jLTU1Ni1cXHRcXHRyYXRlcyA9IHN0bW1hY194Z21hY19jc3JfdG9fbWRjO1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX21kaW8uYz01OTU9aW50IHN0bW1hY19tZGlvX3JlZ2lzdGVyKHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2KVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX21kaW8uYy02MjEtXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX21kaW8uYzo2MjI6XFx0aWYgKHByaXYtXFx1MDAzZXBsYXQtXFx1MDAzZWNvcmVfdHlwZSA9PSBEV01BQ19DT1JFX1hHTUFDKSB7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX21kaW8uYy02MjMtXFx0XFx0bmV3X2J1cy1cXHUwMDNlcmVhZCA9IFxcdTAwMjZzdG1tYWNfeGdtYWMyX21kaW9fcmVhZF9jMjI7XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfbWRpby5jLTY2NS1cXHQvKiBMb29rcyBsaWtlIHdlIG5lZWQgYSBkdW1teSByZWFkIGZvciBYR01BQyBvbmx5IGFuZCBDNDUgUEhZcyAqL1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19tZGlvLmM6NjY2OlxcdGlmIChwcml2LVxcdTAwM2VwbGF0LVxcdTAwM2Vjb3JlX3R5cGUgPT0gRFdNQUNfQ09SRV9YR01BQylcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfbWRpby5jLTY2Ny1cXHRcXHRzdG1tYWNfeGdtYWMyX21kaW9fcmVhZF9jNDUobmV3X2J1cywgMCwgMCwgMCk7XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfcGxhdGZvcm0uYz00MTY9c3RtbWFjX3Byb2JlX2NvbmZpZ19kdChzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2LCB1OCAqbWFjKVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX3BsYXRmb3JtLmMtNTQ3LVxcdGlmIChvZl9kZXZpY2VfaXNfY29tcGF0aWJsZShucCwgXFxcInNucHMsZHd4Z21hY1xcXCIpKSB7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX3BsYXRmb3JtLmM6NTQ4OlxcdFxcdHBsYXQtXFx1MDAzZWNvcmVfdHlwZSA9IERXTUFDX0NPUkVfWEdNQUM7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX3BsYXRmb3JtLmMtNTQ5LVxcdFxcdHBsYXQtXFx1MDAzZXBtdCA9IHRydWU7XFxuLS1cXG5pbmNsdWRlL2xpbnV4L3N0bW1hYy5oPTE5MT1lbnVtIGR3bWFjX2NvcmVfdHlwZSB7XFxuLS1cXG5pbmNsdWRlL2xpbnV4L3N0bW1hYy5oLTE5NC1cXHREV01BQ19DT1JFX0dNQUM0LFxcbmluY2x1ZGUvbGludXgvc3RtbWFjLmg6MTk1OlxcdERXTUFDX0NPUkVfWEdNQUMsXFxuaW5jbHVkZS9saW51eC9zdG1tYWMuaC0xOTYtfTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTRUMDY6MzY6MTIuMDU1MzUwMDY1WiIsIlNlcSI6MTUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjU3NzI1OTM3NzMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBEV01BQyBDb3JlIFR5cGUgQXNzaWdubWVudCoqXG5cbkFscmlnaHQsIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gSXQgbG9va3MgbGlrZSBgRFdNQUNfQ09SRV9YR01BQ2AgaXMgZXhwbGljaXRseSBsaW5rZWQgdG8gdGhlIGBkd21hYy1zb2NmcGdhLmNgIGFuZCBgZHdtYWMtdGVncmEuY2AgZHJpdmVycywgYW5kIGFsc28gcG9wcyB1cCB3aGVuIHRoZSBkZXZpY2UgdHJlZSBjb21wYXRpYmxlIHN0cmluZyBpcyBgXCJzbnBzLGR3eGdtYWNcImAuIE15IGltbWVkaWF0ZSBxdWVzdGlvbiBpcyBhcm91bmQgYHN0bW1hY19wY2lgLiBJJ20gZ29pbmcgdGhyb3VnaCB0aGUgY29kZSBhbmQgSSdtIG5vdCBzZWVpbmcgYW55ICpkaXJlY3QqIGFzc2lnbm1lbnQgb2YgYGNvcmVfdHlwZSA9IERXTUFDX0NPUkVfWEdNQUNgIHRoZXJlLiBUaGF0IHNlZW1zIG9kZCwgYmVjYXVzZSBgc3RtbWFjX2h3aWZfZmluZGAgKmRvZXMqIGNoZWNrIHRoZSBgY29yZV90eXBlYCBpbiBjb25qdW5jdGlvbiB3aXRoIGBkZXZfaWRgLiBIbW1tLlxuXG5Pa2F5LCBJIHNlZSBpdCBub3cuIGBzdG1tYWNfaHdpZl9pbml0YCBnZXRzIHRoZSBgY29yZV90eXBlYCB2aWEgYHByaXYtXHUwMDNlcGxhdC1cdTAwM2Vjb3JlX3R5cGVgLiBTbyB0aGUgY3JpdGljYWwgcXVlc3Rpb24gaXMgKndoZXJlKiBpcyB0aGF0IGJlaW5nIGluaXRpYWxpemVkPyBJZiBgc3RtbWFjX3BjaWAgaXNuJ3Qgc2V0dGluZyBpdCBkaXJlY3RseSwgSSBuZWVkIHRvIGtub3cgd2hlcmUgYHByaXYtXHUwMDNlcGxhdC1cdTAwM2Vjb3JlX3R5cGVgIGlzIHBvcHVsYXRlZCwgb3IgaXMgaXQgemVyby4gSWYgaXQgaXNuJ3Qgc2V0LCB0aGVuIHRoYXQgZGVmYXVsdHMgdG8gYERXTUFDX0NPUkVfTUFDYCB3aGljaCB3b3VsZCBleHBsYWluIHRoZSBsYWNrIG9mIGFuIGV4cGxpY2l0IGBYR01BQ2AgZGVzaWduYXRpb24uIEknbSBnb2luZyB0byB0YWtlIGFub3RoZXIgbG9vayBhdCBgc3RtbWFjX3BjaS5jYCB0byB0cmFjZSB3aGVyZSBgcHJpdi1cdTAwM2VwbGF0LVx1MDAzZWNvcmVfdHlwZWAgY29tZXMgZnJvbS5cblxuXG4iLCJJbnB1dFRva2VucyI6MjM2ODEsIk91dHB1dFRva2VucyI6NDksIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxODcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTRUMDY6MzY6MTcuODI3OTQ2ODI5WiIsIlNlcSI6MTYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjgzOTMwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19wY2kuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAzMCxcbiAgXCJMaW5lQ291bnRcIjogNTBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiICAzMDpcXHRcXHRwbGF0LVxcdTAwM2VtZGlvX2J1c19kYXRhLVxcdTAwM2VuZWVkc19yZXNldCA9IHRydWU7XFxuICAzMTpcXHR9XFxuICAzMjpcXHRcXG4gIDMzOlxcdHN0YXRpYyBpbnQgc3RtbWFjX2RlZmF1bHRfZGF0YShzdHJ1Y3QgcGNpX2RldiAqcGRldixcXG4gIDM0OlxcdFxcdFxcdFxcdCAgICAgICBzdHJ1Y3QgcGxhdF9zdG1tYWNlbmV0X2RhdGEgKnBsYXQpXFxuICAzNTpcXHR7XFxuICAzNjpcXHRcXHQvKiBTZXQgY29tbW9uIGRlZmF1bHQgZGF0YSBmaXJzdCAqL1xcbiAgMzc6XFx0XFx0Y29tbW9uX2RlZmF1bHRfZGF0YShwbGF0KTtcXG4gIDM4OlxcdFxcbiAgMzk6XFx0XFx0cGxhdC1cXHUwMDNlYnVzX2lkID0gMTtcXG4gIDQwOlxcdFxcdHBsYXQtXFx1MDAzZXBoeV9hZGRyID0gMDtcXG4gIDQxOlxcdFxcdHBsYXQtXFx1MDAzZXBoeV9pbnRlcmZhY2UgPSBQSFlfSU5URVJGQUNFX01PREVfR01JSTtcXG4gIDQyOlxcdFxcbiAgNDM6XFx0XFx0cGxhdC1cXHUwMDNlZG1hX2NmZy1cXHUwMDNlcGJsID0gMzI7XFxuICA0NDpcXHRcXHRwbGF0LVxcdTAwM2VkbWFfY2ZnLVxcdTAwM2VwYmx4OCA9IHRydWU7XFxuICA0NTpcXHRcXHQvKiBUT0RPOiBBWEkgKi9cXG4gIDQ2OlxcdFxcbiAgNDc6XFx0XFx0cmV0dXJuIDA7XFxuICA0ODpcXHR9XFxuICA0OTpcXHRcXG4gIDUwOlxcdHN0YXRpYyBjb25zdCBzdHJ1Y3Qgc3RtbWFjX3BjaV9pbmZvIHN0bW1hY19wY2lfaW5mbyA9IHtcXG4gIDUxOlxcdFxcdC5zZXR1cCA9IHN0bW1hY19kZWZhdWx0X2RhdGEsXFxuICA1MjpcXHR9O1xcbiAgNTM6XFx0XFxuICA1NDpcXHRzdGF0aWMgaW50IHNucHNfZ21hYzVfZGVmYXVsdF9kYXRhKHN0cnVjdCBwY2lfZGV2ICpwZGV2LFxcbiAgNTU6XFx0XFx0XFx0XFx0XFx0ICAgc3RydWN0IHBsYXRfc3RtbWFjZW5ldF9kYXRhICpwbGF0KVxcbiAgNTY6XFx0e1xcbiAgNTc6XFx0XFx0aW50IGk7XFxuICA1ODpcXHRcXG4gIDU5OlxcdFxcdHBsYXQtXFx1MDAzZWNsa19jc3IgPSBTVE1NQUNfQ1NSXzI1MF8zMDBNO1xcbiAgNjA6XFx0XFx0cGxhdC1cXHUwMDNlY29yZV90eXBlID0gRFdNQUNfQ09SRV9HTUFDNDtcXG4gIDYxOlxcdFxcdHBsYXQtXFx1MDAzZWZvcmNlX3NmX2RtYV9tb2RlID0gdHJ1ZTtcXG4gIDYyOlxcdFxcdHBsYXQtXFx1MDAzZWZsYWdzIHw9IFNUTU1BQ19GTEFHX1RTT19FTjtcXG4gIDYzOlxcdFxcdHBsYXQtXFx1MDAzZXBtdCA9IHRydWU7XFxuICA2NDpcXHRcXG4gIDY1OlxcdFxcdC8qIFNldCBkZWZhdWx0IG51bWJlciBvZiBSWCBhbmQgVFggcXVldWVzIHRvIHVzZSAqL1xcbiAgNjY6XFx0XFx0cGxhdC1cXHUwMDNldHhfcXVldWVzX3RvX3VzZSA9IDQ7XFxuICA2NzpcXHRcXHRwbGF0LVxcdTAwM2VyeF9xdWV1ZXNfdG9fdXNlID0gNDtcXG4gIDY4OlxcdFxcbiAgNjk6XFx0XFx0cGxhdC1cXHUwMDNldHhfc2NoZWRfYWxnb3JpdGhtID0gTVRMX1RYX0FMR09SSVRITV9XUlI7XFxuICA3MDpcXHRcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgcGxhdC1cXHUwMDNldHhfcXVldWVzX3RvX3VzZTsgaSsrKSB7XFxuICA3MTpcXHRcXHRcXHRwbGF0LVxcdTAwM2V0eF9xdWV1ZXNfY2ZnW2ldLm1vZGVfdG9fdXNlID0gTVRMX1FVRVVFX0RDQjtcXG4gIDcyOlxcdFxcdFxcdHBsYXQtXFx1MDAzZXR4X3F1ZXVlc19jZmdbaV0ud2VpZ2h0ID0gMjU7XFxuICA3MzpcXHRcXHRcXHRpZiAoaSBcXHUwMDNlIDApXFxuICA3NDpcXHRcXHRcXHRcXHRwbGF0LVxcdTAwM2V0eF9xdWV1ZXNfY2ZnW2ldLnRic19lbiA9IDE7XFxuICA3NTpcXHRcXHR9XFxuICA3NjpcXHRcXG4gIDc3OlxcdFxcdHBsYXQtXFx1MDAzZXJ4X3NjaGVkX2FsZ29yaXRobSA9IE1UTF9SWF9BTEdPUklUSE1fU1A7XFxuICA3ODpcXHRcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgcGxhdC1cXHUwMDNlcnhfcXVldWVzX3RvX3VzZTsgaSsrKVxcbiAgNzk6XFx0XFx0XFx0cGxhdC1cXHUwMDNlcnhfcXVldWVzX2NmZ1tpXS5tb2RlX3RvX3VzZSA9IE1UTF9RVUVVRV9EQ0I7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE0VDA2OjM2OjE3LjgyODAzMjMxOVoiLCJTZXEiOjE3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0NzEwMzA3OTk1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgU1RNTUFDIERyaXZlciBJbml0aWFsaXphdGlvbioqXG5cbk9rYXksIHNvIEknbSBkaWdnaW5nIGludG8gdGhpcyBgc3RtbWFjX3BjaS5jYCBmaWxlIGFuZCB0cnlpbmcgdG8gdW5kZXJzdGFuZCBob3cgaXQncyBzZXR0aW5nIHVwIHRoZSBkcml2ZXIuIEkgc2VlIGl0IHNldHMgYERXTUFDX0NPUkVfR01BQzRgIGZvciBgc25wc19nbWFjNV9kZWZhdWx0X2RhdGFgLiBIbW0sIHRoYXQgc2VlbXMgc3RyYWlnaHRmb3J3YXJkIGVub3VnaCBhdCBmaXJzdCBnbGFuY2UuIEJ1dCBoYW5nIG9uLCBzb21ldGhpbmcncyBub3QgcXVpdGUgcmlnaHQuLi4gSSBjYW4ndCBmaW5kIGFueSBtZW50aW9uIG9mIGBEV01BQ19DT1JFX1hHTUFDYCBpbiB0aGlzIHBhcnRpY3VsYXIgZmlsZS4gVGhhdCdzIGEgYml0IG9mIGEgaGVhZC1zY3JhdGNoZXIuXG5cbk5vdywgd2FpdCBhIG1pbnV0ZSwgSSByZW1lbWJlciB0aGF0IGBzdG1tYWNfaHdpZl9pbml0YCBpcyByZXNwb25zaWJsZSBmb3IgZ3JhYmJpbmcgdGhlIGhhcmR3YXJlIHZlcnNpb24uIE9rYXksIGxldCdzIHJldmlzaXQgYHN0bW1hY19od2lmX2luaXRgIGFuZCBnZXQgYSBjbGVhcmVyIHBpY3R1cmUgb2YgaG93IGl0IGFsbCB0aWVzIHRvZ2V0aGVyIGFuZCBob3cgdGhlIGNvcmUgaXMgYWN0dWFsbHkgaWRlbnRpZmllZC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZSBoYXJkd2FyZSB2ZXJzaW9uIGludGVyYWN0cyB3aXRoIHRoZXNlIGNvcmUgZGVmaW5pdGlvbnMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI1MDQ0LCJPdXRwdXRUb2tlbnMiOjQ2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTA0LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTRUMDY6MzY6MjIuNTM4MzQyNzYzWiIsIlNlcSI6MTgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjgyMDY5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2h3aWYuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAzMTUsXG4gIFwiTGluZUNvdW50XCI6IDUwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAzMTU6XFx0fVxcbiAzMTY6XFx0XFxuIDMxNzpcXHRpbnQgc3RtbWFjX2h3aWZfaW5pdChzdHJ1Y3Qgc3RtbWFjX3ByaXYgKnByaXYpXFxuIDMxODpcXHR7XFxuIDMxOTpcXHRcXHRlbnVtIGR3bWFjX2NvcmVfdHlwZSBjb3JlX3R5cGUgPSBwcml2LVxcdTAwM2VwbGF0LVxcdTAwM2Vjb3JlX3R5cGU7XFxuIDMyMDpcXHRcXHRjb25zdCBzdHJ1Y3Qgc3RtbWFjX2h3aWZfZW50cnkgKmVudHJ5O1xcbiAzMjE6XFx0XFx0c3RydWN0IHN0bW1hY192ZXJzaW9uIHZlcnNpb247XFxuIDMyMjpcXHRcXHRzdHJ1Y3QgbWFjX2RldmljZV9pbmZvICptYWM7XFxuIDMyMzpcXHRcXHRib29sIG5lZWRzX3NldHVwID0gdHJ1ZTtcXG4gMzI0OlxcdFxcdGludCByZXQ7XFxuIDMyNTpcXHRcXG4gMzI2OlxcdFxcdHN0bW1hY19nZXRfdmVyc2lvbihwcml2LCBcXHUwMDI2dmVyc2lvbik7XFxuIDMyNzpcXHRcXG4gMzI4OlxcdFxcdC8qIFNhdmUgSUQgZm9yIGxhdGVyIHVzZSAqL1xcbiAzMjk6XFx0XFx0cHJpdi1cXHUwMDNlc3lub3BzeXNfaWQgPSB2ZXJzaW9uLnNucHN2ZXI7XFxuIDMzMDpcXHRcXG4gMzMxOlxcdFxcdG1hYyA9IGRldm1fa3phbGxvYyhwcml2LVxcdTAwM2VkZXZpY2UsIHNpemVvZigqbWFjKSwgR0ZQX0tFUk5FTCk7XFxuIDMzMjpcXHRcXHRpZiAoIW1hYylcXG4gMzMzOlxcdFxcdFxcdHJldHVybiAtRU5PTUVNO1xcbiAzMzQ6XFx0XFxuIDMzNTpcXHRcXHQvKiBDaGVjayBmb3IgSFcgc3BlY2lmaWMgc2V0dXAgZmlyc3QgKi9cXG4gMzM2OlxcdFxcdGlmIChwcml2LVxcdTAwM2VwbGF0LVxcdTAwM2VtYWNfc2V0dXApIHtcXG4gMzM3OlxcdFxcdFxcdHJldCA9IHByaXYtXFx1MDAzZXBsYXQtXFx1MDAzZW1hY19zZXR1cChwcml2LCBtYWMpO1xcbiAzMzg6XFx0XFx0XFx0aWYgKHJldClcXG4gMzM5OlxcdFxcdFxcdFxcdHJldHVybiByZXQ7XFxuIDM0MDpcXHRcXG4gMzQxOlxcdFxcdFxcdG5lZWRzX3NldHVwID0gZmFsc2U7XFxuIDM0MjpcXHRcXHR9XFxuIDM0MzpcXHRcXG4gMzQ0OlxcdFxcdHNwaW5fbG9ja19pbml0KFxcdTAwMjZtYWMtXFx1MDAzZWlycV9jdHJsX2xvY2spO1xcbiAzNDU6XFx0XFxuIDM0NjpcXHRcXHQvKiBGYWxsYmFjayB0byBnZW5lcmljIEhXICovXFxuIDM0NzpcXHRcXG4gMzQ4OlxcdFxcdC8qIFVzZSBzeW5vcHN5c19pZCB2YXIgYmVjYXVzZSBzb21lIHNldHVwcyBjYW4gb3ZlcnJpZGUgdGhpcyAqL1xcbiAzNDk6XFx0XFx0ZW50cnkgPSBzdG1tYWNfaHdpZl9maW5kKGNvcmVfdHlwZSwgcHJpdi1cXHUwMDNlc3lub3BzeXNfaWQsIHZlcnNpb24uZGV2X2lkKTtcXG4gMzUwOlxcdFxcdGlmICghZW50cnkpIHtcXG4gMzUxOlxcdFxcdFxcdGRldl9lcnIocHJpdi1cXHUwMDNlZGV2aWNlLFxcbiAzNTI6XFx0XFx0XFx0XFx0XFxcIkZhaWxlZCB0byBmaW5kIEhXIElGIChpZD0weCV4LCBnbWFjPSVkLyVkKVxcXFxuXFxcIixcXG4gMzUzOlxcdFxcdFxcdFxcdHZlcnNpb24uc25wc3ZlciwgY29yZV90eXBlID09IERXTUFDX0NPUkVfR01BQyxcXG4gMzU0OlxcdFxcdFxcdFxcdGNvcmVfdHlwZSA9PSBEV01BQ19DT1JFX0dNQUM0KTtcXG4gMzU1OlxcdFxcbiAzNTY6XFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuIDM1NzpcXHRcXHR9XFxuIDM1ODpcXHRcXG4gMzU5OlxcdFxcdC8qIE9ubHkgdXNlIGdlbmVyaWMgSFcgaGVscGVycyBpZiBuZWVkZWQgKi9cXG4gMzYwOlxcdFxcdG1hYy1cXHUwMDNlZGVzYyA9IG1hYy1cXHUwMDNlZGVzYyA/IDogZW50cnktXFx1MDAzZWRlc2M7XFxuIDM2MTpcXHRcXHRtYWMtXFx1MDAzZWRtYSA9IG1hYy1cXHUwMDNlZG1hID8gOiBlbnRyeS1cXHUwMDNlZG1hO1xcbiAzNjI6XFx0XFx0bWFjLVxcdTAwM2VtYWMgPSBtYWMtXFx1MDAzZW1hYyA/IDogZW50cnktXFx1MDAzZW1hYztcXG4gMzYzOlxcdFxcdG1hYy1cXHUwMDNlcHRwID0gbWFjLVxcdTAwM2VwdHAgPyA6IGVudHJ5LVxcdTAwM2Vod3RpbWVzdGFtcDtcXG4gMzY0OlxcdFxcdG1hYy1cXHUwMDNlbW9kZSA9IG1hYy1cXHUwMDNlbW9kZSA/IDogZW50cnktXFx1MDAzZW1vZGU7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE0VDA2OjM2OjIyLjUzODQyNjQwM1oiLCJTZXEiOjE5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo3MDIwNjMyMDQyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgYHN0bW1hY2AgRHJpdmVyJ3MgWEdNQUMgQmVoYXZpb3IqKlxuXG5Pa2F5LCBzbyBJJ20gZGlnZ2luZyBpbnRvIHRoaXMgYHN0bW1hY2AgZHJpdmVyIGNvZGUsIHNwZWNpZmljYWxseSBob3cgaXQgaGFuZGxlcyBYR01BQyBjb3Jlcy4gSSBzZWUgdGhhdCBgc3RtbWFjX2h3aWZfaW5pdGAgY2FsbHMgYHN0bW1hY19od2lmX2ZpbmRgLCBhbmQgaXQgdXNlcyBgcHJpdi1cdTAwM2VwbGF0LVx1MDAzZWNvcmVfdHlwZWAgdG8gZmluZCB0aGUgY29ycmVjdCBoYXJkd2FyZSBpbnRlcmZhY2UuIFRoZSBpbnRlcmVzdGluZyBiaXQgaXMgdGhhdCBpZiBgY29yZV90eXBlYCBpc24ndCBgRFdNQUNfQ09SRV9YR01BQ2AsIGl0J3Mgbm90IGdvaW5nIHRvIG1hdGNoIGFueXRoaW5nLCByaWdodD9cblxuVGhlbiBteSBicmFpbiBjbGlja3M6IGBkd21hYy1zb2NmcGdhLmNgIGFuZCBgZHdtYWMtdGVncmEuY2AgYm90aCAqZG8qIHNldCBgY29yZV90eXBlID0gRFdNQUNfQ09SRV9YR01BQ2AuIEkgbmVlZCB0byBjb25maXJtIHdoZXRoZXIgdGhlc2UgZHJpdmVycyBhcmUgZXZlbiByZWFjaGFibGUgaW4gdGhlIFFFTVUgZW52aXJvbm1lbnQgSSdtIHVzaW5nLiBNeSBzdXNwaWNpb24sIHRob3VnaCwgaXMgdGhhdCB0aGUgaXNzdWUgaXNuJ3QgbGltaXRlZCB0byBzcGVjaWZpYyBib2FyZCBjb25maWdzLlxuXG5UaGVuIEkgbm90aWNlZCB0aGF0IGBzdG1tYWNfbWFpbi5jYCBoYXMgYWxzbyBiZWVuIG1vZGlmaWVkLiBUaGUgcGF0Y2ggaXMgY2hhbmdpbmcgdGhlIHdheSB0aGUgZGF0YXBhdGggaXMgdG9ybiBkb3duIHVzaW5nIGBzdG1tYWNfZGF0YXBhdGhfdGVhcmRvd24ocHJpdilgLiBUaGlzIGZ1bmN0aW9uIGlzIGJlaW5nIGNhbGxlZCBpbiBzZXZlcmFsIHBsYWNlczogYF9fc3RtbWFjX3JlbGVhc2VgLCBgc3RtbWFjX3hkcF9yZWxlYXNlYCwgYW5kIGBzdG1tYWNfc3VzcGVuZGAuIEhlcmUncyB0aGUga2lja2VyOiB0aGlzIHRlYXJkb3duIGxvZ2ljIHNlZW1zIHRvIGJlIGV4ZWN1dGVkIGZvciAqYWxsKiBgc3RtbWFjYCBkZXZpY2VzLCBub3QganVzdCB0aGUgWEdNQUMgb25lcy4gVGhhdCdzIGEgcmVkIGZsYWcuIEkgbmVlZCB0byB0YWtlIGEgY2xvc2VyIGxvb2sgYXQgd2hhdCBgc3RtbWFjX2RhdGFwYXRoX3RlYXJkb3duYCBpcyBhY3R1YWxseSBkb2luZyBpbiB0aGUgcGF0Y2guXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI2MTc1LCJPdXRwdXRUb2tlbnMiOjUwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjQ0LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTRUMDY6MzY6MjkuNTU5MDYwODk2WiIsIlNlcSI6MjAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjUyMzE3MSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfbWFpbi5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDI1NjAsXG4gIFwiTGluZUNvdW50XCI6IDUwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjI1NjA6XFx0XFx0XFx0c3RtbWFjX2RlaW5pdF9jaGFuKHByaXYsIHByaXYtXFx1MDAzZWlvYWRkciwgY2hhbik7XFxuMjU2MTpcXHR9XFxuMjU2MjpcXHRcXG4yNTYzOlxcdC8qKlxcbjI1NjQ6XFx0ICogc3RtbWFjX2RhdGFwYXRoX3RlYXJkb3duIC0gb3JkZXJlZCBkYXRhcGF0aCB0ZWFyZG93biBhcyBwZXIgSVAgc3BlY2lmaWNhdGlvblxcbjI1NjU6XFx0ICogQHByaXY6IGRyaXZlciBwcml2YXRlIHN0cnVjdHVyZVxcbjI1NjY6XFx0ICogRGVzY3JpcHRpb246XFxuMjU2NzpcXHQgKiBXaGVuIHRlYXJkb3duIG9wcyBhcmUgYXZhaWxhYmxlLCBmb2xsb3cgdGhlIGRhdGFib29rIG9yZGVyZWQgdGVhcmRvd25cXG4yNTY4OlxcdCAqIHNlcXVlbmNlLlxcbjI1Njk6XFx0ICogRm9sbG93cyB0aGUgbGVnYWN5IHN0b3AgKyBNQUMgZGlzYWJsZSBmb3IgdmFyaWFudHMgd2l0aG91dCB0aGUgZmVhdHVyZS5cXG4yNTcwOlxcdCAqL1xcbjI1NzE6XFx0c3RhdGljIHZvaWQgc3RtbWFjX2RhdGFwYXRoX3RlYXJkb3duKHN0cnVjdCBzdG1tYWNfcHJpdiAqcHJpdilcXG4yNTcyOlxcdHtcXG4yNTczOlxcdFxcdHUzMiByeF9jaGFubmVsc19jb3VudCA9IHByaXYtXFx1MDAzZXBsYXQtXFx1MDAzZXJ4X3F1ZXVlc190b191c2U7XFxuMjU3NDpcXHRcXHR1MzIgdHhfY2hhbm5lbHNfY291bnQgPSBwcml2LVxcdTAwM2VwbGF0LVxcdTAwM2V0eF9xdWV1ZXNfdG9fdXNlO1xcbjI1NzU6XFx0XFx0dTMyIGNoYW47XFxuMjU3NjpcXHRcXG4yNTc3OlxcdFxcdC8qIFN0b3AgYWxsIFRYIERNQSBjaGFubmVscyAqL1xcbjI1Nzg6XFx0XFx0Zm9yIChjaGFuID0gMDsgY2hhbiBcXHUwMDNjIHR4X2NoYW5uZWxzX2NvdW50OyBjaGFuKyspXFxuMjU3OTpcXHRcXHRcXHRzdG1tYWNfc3RvcF90eF9kbWEocHJpdiwgY2hhbik7XFxuMjU4MDpcXHRcXG4yNTgxOlxcdFxcdC8qIFdhaXQgZm9yIGV2ZXJ5IFRYIERNQSBjaGFubmVsIHRvIHJlcG9ydCBpdHNlbGYgc3RvcHBlZCAqL1xcbjI1ODI6XFx0XFx0aWYgKHByaXYtXFx1MDAzZWh3LVxcdTAwM2VkbWEtXFx1MDAzZXR4X2RtYV9zdG9wcGVkKVxcbjI1ODM6XFx0XFx0XFx0Zm9yIChjaGFuID0gMDsgY2hhbiBcXHUwMDNjIHR4X2NoYW5uZWxzX2NvdW50OyBjaGFuKyspXFxuMjU4NDpcXHRcXHRcXHRcXHRzdG1tYWNfdHhfZG1hX3N0b3BwZWQocHJpdiwgcHJpdi1cXHUwMDNlaW9hZGRyLCBjaGFuKTtcXG4yNTg1OlxcdFxcbjI1ODY6XFx0XFx0LyogV2FpdCBmb3IgdGhlIE1UTCBUWCBxdWV1ZXMgdG8gZmluaXNoIHB1c2hpbmcgaW50byB0aGUgTUFDICovXFxuMjU4NzpcXHRcXHRpZiAocHJpdi1cXHUwMDNlaHctXFx1MDAzZWRtYS1cXHUwMDNldHhfbXRsX2RyYWluKVxcbjI1ODg6XFx0XFx0XFx0Zm9yIChjaGFuID0gMDsgY2hhbiBcXHUwMDNjIHR4X2NoYW5uZWxzX2NvdW50OyBjaGFuKyspXFxuMjU4OTpcXHRcXHRcXHRcXHRzdG1tYWNfdHhfbXRsX2RyYWluKHByaXYsIHByaXYtXFx1MDAzZWlvYWRkciwgY2hhbik7XFxuMjU5MDpcXHRcXG4yNTkxOlxcdFxcdC8qIERpc2FibGUgdGhlIE1BQyBUWCBhbmQgUlggKi9cXG4yNTkyOlxcdFxcdHN0bW1hY19tYWNfc2V0KHByaXYsIHByaXYtXFx1MDAzZWlvYWRkciwgZmFsc2UpO1xcbjI1OTM6XFx0XFxuMjU5NDpcXHRcXHQvKiBXYWl0IGZvciB0aGUgTVRMIFJYIHF1ZXVlcyB0byBkcmFpbiBpbnRvIHRoZSBSWCBETUEgKi9cXG4yNTk1OlxcdFxcdGlmIChwcml2LVxcdTAwM2Vody1cXHUwMDNlZG1hLVxcdTAwM2VyeF9tdGxfZHJhaW4pXFxuMjU5NjpcXHRcXHRcXHRmb3IgKGNoYW4gPSAwOyBjaGFuIFxcdTAwM2MgcnhfY2hhbm5lbHNfY291bnQ7IGNoYW4rKylcXG4yNTk3OlxcdFxcdFxcdFxcdHN0bW1hY19yeF9tdGxfZHJhaW4ocHJpdiwgcHJpdi1cXHUwMDNlaW9hZGRyLCBjaGFuKTtcXG4yNTk4OlxcdFxcbjI1OTk6XFx0XFx0LyogU3RvcCBhbGwgUlggRE1BIGNoYW5uZWxzICovXFxuMjYwMDpcXHRcXHRmb3IgKGNoYW4gPSAwOyBjaGFuIFxcdTAwM2MgcnhfY2hhbm5lbHNfY291bnQ7IGNoYW4rKylcXG4yNjAxOlxcdFxcdFxcdHN0bW1hY19zdG9wX3J4X2RtYShwcml2LCBjaGFuKTtcXG4yNjAyOlxcdFxcbjI2MDM6XFx0XFx0LyogV2FpdCBmb3IgZXZlcnkgUlggRE1BIGNoYW5uZWwgdG8gcmVwb3J0IGl0c2VsZiBzdG9wcGVkICovXFxuMjYwNDpcXHRcXHRpZiAocHJpdi1cXHUwMDNlaHctXFx1MDAzZWRtYS1cXHUwMDNlcnhfZG1hX3N0b3BwZWQpXFxuMjYwNTpcXHRcXHRcXHRmb3IgKGNoYW4gPSAwOyBjaGFuIFxcdTAwM2MgcnhfY2hhbm5lbHNfY291bnQ7IGNoYW4rKylcXG4yNjA2OlxcdFxcdFxcdFxcdHN0bW1hY19yeF9kbWFfc3RvcHBlZChwcml2LCBwcml2LVxcdTAwM2Vpb2FkZHIsIGNoYW4pO1xcbjI2MDc6XFx0fVxcbjI2MDg6XFx0XFxuMjYwOTpcXHQvKipcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTRUMDY6MzY6MjkuNTU5NTg2NTI1WiIsIlNlcSI6MjEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjE0NjcxMDE2Nzg4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5c2lzIG9mIHN0bW1hYyBEYXRhcGF0aCBUZWFyZG93biBhbmQgSW1wbGljYXRpb25zKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBgc3RtbWFjX2RhdGFwYXRoX3RlYXJkb3duYCBmdW5jdGlvbiwgYW5kIGl0IHNlZW1zIHRvIGJlIHVuaXZlcnNhbGx5IGNhbGxlZCBhY3Jvc3MgYWxsIGRldmljZXMgdGhhdCB1c2UgdGhpcyBkcml2ZXIuIFRoZSBpbnRlcmVzdGluZyBwYXJ0IGlzIHRoZSBjaGFuZ2UgaW4gaXRzIGJlaGF2aW9yLiBQcmV2aW91c2x5LCB0aGUgRE1BIHdhcyBzdG9wcGVkIHdpdGggYHN0bW1hY19zdG9wX2FsbF9kbWFgIGFuZCB0aGUgTUFDIHdhcyBkaXNhYmxlZCB1c2luZyBgc3RtbWFjX21hY19zZXQoLi4uLCBmYWxzZSlgLiBOb3csIGBzdG1tYWNfZGF0YXBhdGhfdGVhcmRvd25gIGRpcmVjdGx5IGNhbGxzIGBzdG1tYWNfc3RvcF90eF9kbWFgLCB0aGVuIGBzdG1tYWNfbWFjX3NldCguLi4sIGZhbHNlKWAsIGFuZCBmaW5hbGx5IGBzdG1tYWNfc3RvcF9yeF9kbWFgLiBUaGlzIG9yZGVyIGlzIGEgKmZ1bmN0aW9uYWwgY2hhbmdlKiBhZmZlY3RpbmcgYWxsIHN0bW1hYyBkZXZpY2VzLiBUaGlzIGRpZmZlcmVuY2UgaW4gZXhlY3V0aW9uIGZsb3cgaXMgYSBjb25jZXJuLlxuXG5Nb3Jlb3ZlciwgdGhlIG9yaWdpbmFsIHRlYXJkb3duIG9yZGVyIGluY2x1ZGVkIGRpc2FibGluZyB0aGUgTUFDICphZnRlciogZnJlZWluZyB0aGUgRE1BIGRlc2NyaXB0b3JzLiBUaGUgbmV3IG9yZGVyIGRpc2FibGVzIHRoZSBNQUMgKmJlZm9yZSogZnJlZWluZyB0aGVtLCB3aGljaCBpcyBhIG1ham9yIHNoaWZ0LiBUaGUgaW1wbGljYXRpb25zIGhlcmUgYXJlIHNpZ25pZmljYW50OyBhIGNoYW5nZSBpbiByZXNvdXJjZSByZWxlYXNlIG9yZGVyIGlzIGEgcG90ZW50aWFsIHJlY2lwZSBmb3IgaW5zdGFiaWxpdHksIGVzcGVjaWFsbHkgZHVyaW5nIGJyaW5nLWRvd24gc2NlbmFyaW9zIChlLmcuLCBgaXAgbGluayBzZXQgZXRoMCBkb3duYCkuIFRoZSBzYW1lIGNoYW5nZXMgaGF2ZSBiZWVuIG1hZGUgdG8gYHN0bW1hY19od19zZXR1cGAgYW5kIGBzdG1tYWNfeGRwX29wZW5gLCBzd2l0Y2hpbmcgdGhlIG9yZGVyIG9mIE1BQyBlbmFibGUgYW5kIERNQSBzdGFydC4gU28sIG5vdyB0aGUgRE1BIHN0YXJ0cyBiZWZvcmUgTUFDIGlzIGVuYWJsZWQuXG5cbkkndmUgY29uZmlybWVkIHRoYXQgYHN0bW1hY19kYXRhcGF0aF90ZWFyZG93bmAgaXMgcmVhY2hlZCB2aWEgYF9fc3RtbWFjX3JlbGVhc2VgLCBgc3RtbWFjX3hkcF9yZWxlYXNlYCwgYW5kIGBzdG1tYWNfc3VzcGVuZGAuIFRoaXMgbWVhbnMgdGhlc2UgY2hhbmdlcyBoaXQgKmFsbCogaW50ZXJmYWNlcyB1c2luZyB0aGlzIGRyaXZlciwgd2hpY2ggYXJlIHBvdGVudGlhbGx5IHJlYWNoYWJsZSB0aHJvdWdoIHRoZSBgc3RtbWFjX3BjaWAgZHJpdmVyLlxuXG5JJ20gYWxzbyBzZWVpbmcgdGhlc2UgbmV3IGBkd3hnbWFjMl8qYCBmdW5jdGlvbnMuIFRob3NlIGFyZSBvbmx5IHJlYWNoZWQgd2hlbiBgY29yZV90eXBlID09IERXTUFDX0NPUkVfWEdNQUNgLiBJIG5lZWQgdG8gZmlndXJlIG91dCBob3cgdG8gZW5zdXJlIHRoYXQgY29uZGl0aW9uIGlzIG1ldCBpbiBteSB0ZXN0cy4gSXQgbG9va3MgbGlrZSB0aGUgYHN0bW1hY19wY2lgIGRyaXZlciB1c2VzIGBzdG1tYWNfcGNpX2luZm9gIHRvIGNvbmZpZ3VyZSB0aGUgZGV2aWNlLCBhbmQgdGhhdCBzdHJ1Y3R1cmUgaGFzIGEgYGNvcmVfdHlwZWAgZmllbGQuXG5cblRoZSBQQ0kgSUQgdGFibGUgbGlzdHMgYW4gYFhHTUFDX0lEYC4gVGhpcyBpcyBwcm9taXNpbmcuIEkgbmVlZCB0byBmaWd1cmUgb3V0IHdoYXQgdGhhdCBgWEdNQUNfSURgIGFjdHVhbGx5IGlzIGluIHRoZSBjb250ZXh0IG9mIGBwY2lfZGV2aWNlX2lkYC4gQ2FuIEkgcmVhY2ggdGhlIG5ldyBmdW5jdGlvbnM/IFRoZSBxdWVzdGlvbiBpcywgaG93IGRvIEkgZW5zdXJlIGEgUENJIGRldmljZSBnZXRzIGJvdW5kIHRvIHRoaXMgYFhHTUFDX0lEYD8gSWYgSSBjYW4sIHRoZW4gSSBjYW4gcmVhY2ggdGhlIG5ldyBmdW5jdGlvbnMgdGhhdCBpbXBsZW1lbnQgdGhlIGNoYW5nZS5cblxuXG4iLCJJbnB1dFRva2VucyI6Mjc3MTcsIk91dHB1dFRva2VucyI6MTksIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMjg4LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTRUMDY6MzY6NDQuMjMwNjA2MTUzWiIsIlNlcSI6MjIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxODE1MDUxNjE5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIlhHTUFDX0lEXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMvaG5zX2RzYWZfbWFjLmM9OTg1PXN0YXRpYyBpbnQgaG5zX21hY19nZXRfbW9kZShwaHlfaW50ZXJmYWNlX3QgcGh5X2lmKVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2hucy9obnNfZHNhZl9tYWMuYy05OTAtXFx0Y2FzZSBQSFlfSU5URVJGQUNFX01PREVfWEdNSUk6XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2hucy9obnNfZHNhZl9tYWMuYzo5OTE6XFx0XFx0cmV0dXJuIE1BQ19YR01BQ19JRFg7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2hucy9obnNfZHNhZl9tYWMuYy05OTItXFx0ZGVmYXVsdDpcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMvaG5zX2RzYWZfbWFjLmg9MTU9c3RydWN0IGRzYWZfZGV2aWNlO1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2hucy9obnNfZHNhZl9tYWMuaC0zMi0jZGVmaW5lIE1BQ19HTUFDX0lEWCAwXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2hucy9obnNfZHNhZl9tYWMuaDozMzojZGVmaW5lIE1BQ19YR01BQ19JRFggMVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMvaG5zX2RzYWZfbWFjLmgtMzQtXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9jb21tb24uaC00NS0vKiBEZXZpY2UgSUQgKi9cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9jb21tb24uaDo0NjojZGVmaW5lIERXWEdNQUNfSURcXHRcXHQweDc2XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvY29tbW9uLmgtNDctI2RlZmluZSBEV1hMR01BQ19JRFxcdFxcdDB4MjdcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3eGdtYWMyLmgtMTg0LSNkZWZpbmUgWEdNQUNfTDNMNF9BRERSX0NUUkxcXHRcXHQweDAwMDAwYzAwXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHd4Z21hYzIuaDoxODU6I2RlZmluZSBYR01BQ19JRERSXFx0XFx0XFx0R0VOTUFTSygxNiwgOClcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd3hnbWFjMi5oOjE4NjojZGVmaW5lIFhHTUFDX0lERFJfRk5VTV9NQVNLXFx0XFx0R0VOTUFTSyg3LCA0KVxcdC8qIEZOVU0gd2l0aGluIElERFIgKi9cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd3hnbWFjMi5oOjE4NzojZGVmaW5lIFhHTUFDX0lERFJfUkVHX01BU0tcXHRcXHRHRU5NQVNLKDMsIDApXFx0LyogUkVHIHdpdGhpbiBJRERSICovXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHd4Z21hYzIuaC0xODgtI2RlZmluZSBYR01BQ19UVFxcdFxcdFxcdEJJVCgxKVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHd4Z21hYzJfY29yZS5jPTEyNDE9c3RhdGljIGludCBkd3hnbWFjMl9maWx0ZXJfcmVhZChzdHJ1Y3QgbWFjX2RldmljZV9pbmZvICpodywgdTMyIGZpbHRlcl9ubyxcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3eGdtYWMyX2NvcmUuYy0xMjUxLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3eGdtYWMyX2NvcmUuYzoxMjUyOlxcdGlkZHIgPSBGSUVMRF9QUkVQKFhHTUFDX0lERFJfRk5VTV9NQVNLLCBmaWx0ZXJfbm8pIHxcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd3hnbWFjMl9jb3JlLmM6MTI1MzpcXHQgICAgICAgRklFTERfUFJFUChYR01BQ19JRERSX1JFR19NQVNLLCByZWcpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3eGdtYWMyX2NvcmUuYzoxMjU0OlxcdHZhbHVlID0gRklFTERfUFJFUChYR01BQ19JRERSLCBpZGRyKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd3hnbWFjMl9jb3JlLmMtMTI1NS1cXHR2YWx1ZSB8PSBYR01BQ19UVCB8IFhHTUFDX1hCO1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHd4Z21hYzJfY29yZS5jPTEyNjY9c3RhdGljIGludCBkd3hnbWFjMl9maWx0ZXJfd3JpdGUoc3RydWN0IG1hY19kZXZpY2VfaW5mbyAqaHcsIHUzMiBmaWx0ZXJfbm8sXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd3hnbWFjMl9jb3JlLmMtMTI3OC1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd3hnbWFjMl9jb3JlLmM6MTI3OTpcXHRpZGRyID0gRklFTERfUFJFUChYR01BQ19JRERSX0ZOVU1fTUFTSywgZmlsdGVyX25vKSB8XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHd4Z21hYzJfY29yZS5jOjEyODA6XFx0ICAgICAgIEZJRUxEX1BSRVAoWEdNQUNfSUREUl9SRUdfTUFTSywgcmVnKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd3hnbWFjMl9jb3JlLmM6MTI4MTpcXHR2YWx1ZSA9IEZJRUxEX1BSRVAoWEdNQUNfSUREUiwgaWRkcik7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHd4Z21hYzJfY29yZS5jLTEyODItXFx0dmFsdWUgfD0gWEdNQUNfWEI7XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9od2lmLmM9MTExPXN0YXRpYyBjb25zdCBzdHJ1Y3Qgc3RtbWFjX2h3aWZfZW50cnkge1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvaHdpZi5jLTI0OS1cXHRcXHQubWluX2lkID0gRFdYR01BQ19DT1JFXzJfMTAsXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvaHdpZi5jOjI1MDpcXHRcXHQuZGV2X2lkID0gRFdYR01BQ19JRCxcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9od2lmLmMtMjUxLVxcdFxcdC5yZWdzID0ge1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xNFQwNjozNjo0Ni4wNDU2NjU5MTJaIiwiU2VxIjoyMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTAzMzYxNDI1MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIERldmljZSBJRCBhbmQgVmVyc2lvbiBSZXRyaWV2YWwqKlxuXG5Pa2F5LCBzbyBJIHNlZSB0aGF0IGBEV1hHTUFDX0lEYCBpcyBkZWZpbmVkIGFzIGAweDc2YC4gVGhhdCBzZWVtcyBsaWtlIGEgcG90ZW50aWFsIGlkZW50aWZpZXIgZm9yIHRoZSBYR01BQyBjb3JlLiBIb3dldmVyLCBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlIGRyaXZlciBhY3R1YWxseSBkZXRlcm1pbmVzIHRoZSBkZXZpY2UgSUQgYW5kIHZlcnNpb24gYXQgcnVudGltZS4gVGhlIGBzdG1tYWNfaHdpZl9pbml0YCBmdW5jdGlvbiBsb29rcyBsaWtlIHRoZSBrZXkgZW50cnkgcG9pbnQgaGVyZS5cblxuSSByZWNhbGwgdGhhdCB0aGlzIGZ1bmN0aW9uIGxldmVyYWdlcyBoYXJkd2FyZSByZWdpc3RlcnMgdG8gZGV0ZXJtaW5lIHRoZSB2ZXJzaW9uLiBUaGUgY29kZSBzbmlwcGV0IGZvciBgc3RtbWFjX2dldF92ZXJzaW9uYCBpcyB3aGF0IEkgbmVlZCB0byBmb2N1cyBvbi4gSXQgcmVhZHMgZnJvbSB0aGUgYE1BQ19WRVJTSU9OYCByZWdpc3Rlci4gVGhlIGZ1bmN0aW9uIHRoZW4gZXh0cmFjdHMgcmVsZXZhbnQgZmllbGRzIHVzaW5nIGBGSUVMRF9HRVRgLCBuYW1lbHkgYERXTUFDX1NOUFNWRVJgIGFuZCBgRFdNQUNfVVNFUlZFUmAuIElmIGBjb3JlX3R5cGVgIGlzIGFuIFhHTUFDLCBpdCBnZXRzIHRoZSB2ZXJzaW9uIGZyb20gYERXTUFDX1VTRVJWRVJgIGVsc2UgaXQgdXNlcyB0aGUgYERXTUFDX1NOUFNWRVJgLlxuXG5JJ20gbm93IHRoaW5raW5nIGFib3V0IGBjb3JlX3R5cGVgLiBXaGVyZSBkb2VzIHRoZSBgY29yZV90eXBlYCB2YXJpYWJsZSBjb21lIGZyb20/IElzIGl0IHBhc3NlZCBpbnRvIGBzdG1tYWNfZ2V0X3ZlcnNpb25gPyBObywgaXQgbG9va3MgbGlrZSBgY29yZV90eXBlYCBpcyBhIGxvY2FsIHZhcmlhYmxlIHRvIGBzdG1tYWNfaHdpZl9pbml0YC4gSSdsbCBuZWVkIHRvIGRvdWJsZS1jaGVjayB0aGF0IHRoaXMgaXMgYWNjdXJhdGUuIEkgc2hvdWxkIHNjcnV0aW5pemUgYHN0bW1hY19od2lmX2luaXRgIHRvIGNvbmZpcm0gaG93IGBjb3JlX3R5cGVgIGlzIGRldGVybWluZWQgYW5kIHNldCBiZWZvcmUgaXQncyB1c2VkIGJ5IGBzdG1tYWNfZ2V0X3ZlcnNpb25gLiBVbmRlcnN0YW5kaW5nIGhvdyBgY29yZV90eXBlYCBpcyBzZXQgaXMgY3JpdGljYWwgZm9yIGludGVycHJldGluZyB0aGUgZGV2aWNlIHZlcnNpb24gY29ycmVjdGx5LlxuXG5cbiIsIklucHV0VG9rZW5zIjozMDk1NCwiT3V0cHV0VG9rZW5zIjo0NSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIxOCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xNFQwNjozNjo1MS4wNzkyODMwMDNaIiwiU2VxIjoyNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODM2NDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvaHdpZi5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDIxLFxuICBcIkxpbmVDb3VudFwiOiA1MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgIDIxOlxcdHN0YXRpYyB2b2lkIHN0bW1hY19nZXRfdmVyc2lvbihzdHJ1Y3Qgc3RtbWFjX3ByaXYgKnByaXYsXFxuICAyMjpcXHRcXHRcXHRcXHQgICAgICAgc3RydWN0IHN0bW1hY192ZXJzaW9uICp2ZXIpXFxuICAyMzpcXHR7XFxuICAyNDpcXHRcXHRlbnVtIGR3bWFjX2NvcmVfdHlwZSBjb3JlX3R5cGUgPSBwcml2LVxcdTAwM2VwbGF0LVxcdTAwM2Vjb3JlX3R5cGU7XFxuICAyNTpcXHRcXHR1bnNpZ25lZCBpbnQgdmVyc2lvbl9vZmZzZXQ7XFxuICAyNjpcXHRcXHR1MzIgdmVyc2lvbjtcXG4gIDI3OlxcdFxcbiAgMjg6XFx0XFx0dmVyLVxcdTAwM2VzbnBzdmVyID0gMDtcXG4gIDI5OlxcdFxcdHZlci1cXHUwMDNlZGV2X2lkID0gMDtcXG4gIDMwOlxcdFxcbiAgMzE6XFx0XFx0aWYgKGNvcmVfdHlwZSA9PSBEV01BQ19DT1JFX01BQzEwMClcXG4gIDMyOlxcdFxcdFxcdHJldHVybjtcXG4gIDMzOlxcdFxcbiAgMzQ6XFx0XFx0aWYgKGNvcmVfdHlwZSA9PSBEV01BQ19DT1JFX0dNQUMpXFxuICAzNTpcXHRcXHRcXHR2ZXJzaW9uX29mZnNldCA9IEdNQUNfVkVSU0lPTjtcXG4gIDM2OlxcdFxcdGVsc2VcXG4gIDM3OlxcdFxcdFxcdHZlcnNpb25fb2Zmc2V0ID0gR01BQzRfVkVSU0lPTjtcXG4gIDM4OlxcdFxcbiAgMzk6XFx0XFx0dmVyc2lvbiA9IHJlYWRsKHByaXYtXFx1MDAzZWlvYWRkciArIHZlcnNpb25fb2Zmc2V0KTtcXG4gIDQwOlxcdFxcdGlmICh2ZXJzaW9uID09IDApIHtcXG4gIDQxOlxcdFxcdFxcdGRldl9pbmZvKHByaXYtXFx1MDAzZWRldmljZSwgXFxcIlZlcnNpb24gSUQgbm90IGF2YWlsYWJsZVxcXFxuXFxcIik7XFxuICA0MjpcXHRcXHRcXHRyZXR1cm47XFxuICA0MzpcXHRcXHR9XFxuICA0NDpcXHRcXG4gIDQ1OlxcdFxcdGRldl9pbmZvKHByaXYtXFx1MDAzZWRldmljZSwgXFxcIlVzZXIgSUQ6IDB4JXgsIFN5bm9wc3lzIElEOiAweCV4XFxcXG5cXFwiLFxcbiAgNDY6XFx0XFx0XFx0IEZJRUxEX0dFVChEV01BQ19VU0VSVkVSLCB2ZXJzaW9uKSxcXG4gIDQ3OlxcdFxcdFxcdCBGSUVMRF9HRVQoRFdNQUNfU05QU1ZFUiwgdmVyc2lvbikpO1xcbiAgNDg6XFx0XFxuICA0OTpcXHRcXHR2ZXItXFx1MDAzZXNucHN2ZXIgPSBGSUVMRF9HRVQoRFdNQUNfU05QU1ZFUiwgdmVyc2lvbik7XFxuICA1MDpcXHRcXHRpZiAoY29yZV90eXBlID09IERXTUFDX0NPUkVfWEdNQUMpXFxuICA1MTpcXHRcXHRcXHR2ZXItXFx1MDAzZWRldl9pZCA9IEZJRUxEX0dFVChEV01BQ19VU0VSVkVSLCB2ZXJzaW9uKTtcXG4gIDUyOlxcdH1cXG4gIDUzOlxcdFxcbiAgNTQ6XFx0c3RhdGljIHZvaWQgc3RtbWFjX2R3bWFjX21vZGVfcXVpcmsoc3RydWN0IHN0bW1hY19wcml2ICpwcml2KVxcbiAgNTU6XFx0e1xcbiAgNTY6XFx0XFx0c3RydWN0IG1hY19kZXZpY2VfaW5mbyAqbWFjID0gcHJpdi1cXHUwMDNlaHc7XFxuICA1NzpcXHRcXG4gIDU4OlxcdFxcdGlmIChwcml2LVxcdTAwM2VjaGFpbl9tb2RlKSB7XFxuICA1OTpcXHRcXHRcXHRkZXZfaW5mbyhwcml2LVxcdTAwM2VkZXZpY2UsIFxcXCJDaGFpbiBtb2RlIGVuYWJsZWRcXFxcblxcXCIpO1xcbiAgNjA6XFx0XFx0XFx0cHJpdi1cXHUwMDNlZGVzY3JpcHRvcl9tb2RlID0gU1RNTUFDX0NIQUlOX01PREU7XFxuICA2MTpcXHRcXHRcXHRtYWMtXFx1MDAzZW1vZGUgPSBcXHUwMDI2Y2hhaW5fbW9kZV9vcHM7XFxuICA2MjpcXHRcXHR9IGVsc2Uge1xcbiAgNjM6XFx0XFx0XFx0ZGV2X2luZm8ocHJpdi1cXHUwMDNlZGV2aWNlLCBcXFwiUmluZyBtb2RlIGVuYWJsZWRcXFxcblxcXCIpO1xcbiAgNjQ6XFx0XFx0XFx0cHJpdi1cXHUwMDNlZGVzY3JpcHRvcl9tb2RlID0gU1RNTUFDX1JJTkdfTU9ERTtcXG4gIDY1OlxcdFxcdFxcdG1hYy1cXHUwMDNlbW9kZSA9IFxcdTAwMjZyaW5nX21vZGVfb3BzO1xcbiAgNjY6XFx0XFx0fVxcbiAgNjc6XFx0fVxcbiAgNjg6XFx0XFxuICA2OTpcXHRzdGF0aWMgaW50IHN0bW1hY19kd21hYzFfcXVpcmtzKHN0cnVjdCBzdG1tYWNfcHJpdiAqcHJpdilcXG4gIDcwOlxcdHtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTRUMDY6MzY6NTEuMDc5MzY3ODM0WiIsIlNlcSI6MjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQwNTI3ODY2MjQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBzdG1tYWMgVmVyc2lvbiBSZXRyaWV2YWwqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCBob3cgYHN0bW1hY19nZXRfdmVyc2lvbmAgd29ya3MuIEl0J3MgcHVsbGluZyB0aGUgYGNvcmVfdHlwZWAgZnJvbSB0aGUgYHByaXYtXHUwMDNlcGxhdGAgc3RydWN0dXJlLiBSaWdodCwgYW5kIHRoYXQgYHByaXYtXHUwMDNlcGxhdGAgaXMgc2V0IHVwIGR1cmluZyB0aGUgYmluZGluZyBwcm9jZXNzLiBJJ20gdGhpbmtpbmcgYWJvdXQgU3l6a2FsbGVyIGFuZCBob3cgaXQgaW50ZXJhY3RzIHdpdGggdGhpcy4gV2hlbiBTeXprYWxsZXIgdXNlcyBgc3RtbWFjX3BjaWAsIGl0IGdvZXMgdGhyb3VnaCBgc3RtbWFjX3BjaV9pbmZvYCwgYW5kIHRoYXQncyB3aGVyZSB0aGUgYGNvcmVfdHlwZWAgaXMgc2V0LiBJdCBzZWVtcyBsaWtlIGl0J3MgYmVpbmcgc2V0IHRvIGVpdGhlciBgRFdNQUNfQ09SRV9HTUFDNGAgb3IgYDBgLCB3aGljaCBpcyBhbGlhc2VkIHRvIGBEV01BQ19DT1JFX0dNQUNgLiBUaGF0J3MgaW50ZXJlc3RpbmcsIGJ1dCBJIG5lZWQgdG8gbWFrZSBzdXJlIEknbSBub3QgbWlzc2luZyBhbnl0aGluZy4gTXkgcHJpbWFyeSBjb25jZXJuIGlzIHRvIGVuc3VyZSB0aGUgc3l6a2FsbGVyIHRlc3QgY292ZXJhZ2UgaXMgc291bmQuXG5cblRoZSB0aGluZyB0aGF0IEkgYW0gbWlzc2luZyBpcyB0aGUgYERXTUFDX0NPUkVfWEdNQUNgIHZhbHVlISBJcyB0aGVyZSBhbnkgUENJIElEIGNvbmZpZ3VyYXRpb24gdGhhdCBjYXVzZXMgYGNvcmVfdHlwZWAgdG8gYmUgc2V0IHRvIGBEV01BQ19DT1JFX1hHTUFDYD8gSSBuZWVkIHRvIGRvdWJsZS1jaGVjayBgc3RtbWFjX3BjaS5jYCB0byBiZSBjb21wbGV0ZWx5IHRob3JvdWdoLlxuXG5cbiIsIklucHV0VG9rZW5zIjozMjMwNywiT3V0cHV0VG9rZW5zIjo0NSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEyNywiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE0VDA2OjM2OjU1LjEzMjE1NjU1N1oiLCJTZXEiOjI2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTcyNjg5MjUsIkVycm9yIjoibm8gbWF0Y2hlcyIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIlhHTUFDXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19wY2kuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJlcnJvclwiOiBcIm5vIG1hdGNoZXNcIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTRUMDY6MzY6NTUuMTg5NDMyMDExWiIsIlNlcSI6MjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMxNzU0MDEzODcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgYW4gZXhwZXJ0J3MgaW50ZXJuYWwgbW9ub2xvZ3VlOlxuXG4qKkludmVzdGlnYXRpbmcgdGhlIFhHTUFDIEFic2VuY2UqKlxuXG5IbW0sIGludGVyZXN0aW5nLiBNeSBpbml0aWFsIGh1bmNoIHdhcyB0aGF0IHRoZSBgWEdNQUNgIG1vZHVsZSB3YXMgcGFydCBvZiB0aGUgc3RhbmRhcmQgU1RNTUFDIGRyaXZlciwgYnV0IGEgcXVpY2sgY2hlY2sgcmV2ZWFscyB0aGF0IGBzdG1tYWNfcGNpLmNgIGRvZXNuJ3QgYWN0dWFsbHkgY29udGFpbiB0aGUgc3ltYm9sLiBUaGF0J3MgYSBrZXkgcGllY2Ugb2YgaW5mb3JtYXRpb24sIGFuZCBpdCBtZWFucyBJIG5lZWQgdG8gYWRqdXN0IG15IHNlYXJjaCBzdHJhdGVneS4gV2hlcmUgZWxzZSBjb3VsZCBpdCBiZSBoaWRpbmcsIG9yIHBvdGVudGlhbGx5LCB1bmRlciBhIHNsaWdodGx5IGRpZmZlcmVudCBuYW1lPyBNeSBpbW1lZGlhdGUgbmV4dCBzdGVwIGlzIHRvIGV4cGxvcmUgdGhlIFwiZHdtYWMtaW50ZWwuY1wiIGZpbGUuIEludGVsIGlzIGEgYmlnIHBsYXllciBpbiB0aGlzIHNwYWNlLCBhbmQgdGhleSBvZnRlbiBpbXBsZW1lbnQgdGhlaXIgb3duIHNwZWNpZmljIHZlcnNpb25zIG9mIHRoZXNlIGRyaXZlcnMuIFRoZSBYR01BQyBpbXBsZW1lbnRhdGlvbiwgaWYgcHJlc2VudCBhdCBhbGwsIG1pZ2h0IGJlIHR1Y2tlZCBhd2F5IGluIHRoZXJlLiBJJ2xsIG5lZWQgdG8gc2NydXRpbml6ZSB0aGF0IGZpbGUgY2FyZWZ1bGx5LCBsb29raW5nIGZvciBhbnl0aGluZyB0aGF0IHNvdW5kcyBsaWtlIGEgcmVsYXRlZCBpbXBsZW1lbnRhdGlvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6MzI3NjAsIk91dHB1dFRva2VucyI6NDMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xNFQwNjozNjo1OC4zNjQ4MzcwNzhaIiwiU2VxIjoyOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjUxOTE5OTk0LCJFcnJvciI6Im5vIG1hdGNoZXMiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJYR01BQ1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1pbnRlbC5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcImVycm9yXCI6IFwibm8gbWF0Y2hlc1wiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xNFQwNjozNjo1OC40MTY3NjU5OTJaIiwiU2VxIjoyOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzU5OTI0MzQyMiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSBhbmQgd3JpdHRlbiBpbiB0aGUgZmlyc3QgcGVyc29uOlxuXG4qKk5hdmlnYXRpbmcgdGhlIExvb25nc29uIERXTUFDIERyaXZlcioqXG5cbk9rYXksIEknbSB0aGlua2luZyBhYm91dCB0aGUgRFdNQUMgZHJpdmVyIHNwZWNpZmljYWxseSBmb3IgTG9vbmdzb24uIE15IG1lbnRhbCBtYXAgaXMgZ29pbmcgc3RyYWlnaHQgdG8gYGR3bWFjLWxvb25nc29uLmNgLiBUaGF0J3Mgd2hlcmUgSSBuZWVkIHRvIHN0YXJ0LiBJdCdzIHRoZSBwb2ludCBvZiBpbnRlZ3JhdGlvbiwgd2hlcmUgdGhlIGdlbmVyaWMgRFdNQUMgY29kZSBpbnRlcmZhY2VzIHdpdGggdGhlIExvb25nc29uLXNwZWNpZmljIGhhcmR3YXJlLiBJJ20gaW1tZWRpYXRlbHkgdHJ5aW5nIHRvIHJlY2FsbDogd2hhdCBhcmUgdGhlIGtleSBkaWZmZXJlbmNlcyBiZXR3ZWVuIHRoZSBnZW5lcmljIERXTUFDIGZyYW1ld29yayBhbmQgdGhlIExvb25nc29uIFNvQydzIGltcGxlbWVudGF0aW9uPyBDbG9jayBtYW5hZ2VtZW50PyBETUEgY29uZmlndXJhdGlvbj8gSW50ZXJydXB0IGhhbmRsaW5nIHNwZWNpZmljIHRvIHRoZSBMb29uZ3NvbiBwbGF0Zm9ybT8gTWVtb3J5IG1hcHBpbmc/IFBvd2VyIG1hbmFnZW1lbnQ/IEkgbmVlZCB0byBxdWlja2x5IHJlZnJlc2ggbXkgdW5kZXJzdGFuZGluZyBvZiBob3cgdGhlIExvb25nc29uIGFyY2hpdGVjdHVyZSBpbnRlcmFjdHMgd2l0aCB0aGUgc3RhbmRhcmQgRFdNQUMgcmVnaXN0ZXJzIGFuZCBzdHJ1Y3R1cmVzLiBJJ20gYW50aWNpcGF0aW5nIHRoYXQgSSdsbCBiZSBsb29raW5nIGZvciBhbnkgbm9uLXN0YW5kYXJkIHJlZ2lzdGVyIGFjY2Vzc2VzIG9yIGludGVycnVwdCBoYW5kbGluZyByb3V0aW5lcyB3aXRoaW4gdGhhdCBmaWxlLiBJIGV4cGVjdCB0byBmaW5kIHNvbWUgY3JpdGljYWwgaW5pdGlhbGl6YXRpb24gY29kZSB3aXRoaW4gdGhpcyBmaWxlIGZvciB0aGUgZ2l2ZW4gaGFyZHdhcmUuIFVsdGltYXRlbHksIEknbSB0cnlpbmcgdG8gZmlndXJlIG91dCBob3cgdGhpcyBgZHdtYWMtbG9vbmdzb24uY2AgZmlsZSAqaW50ZWdyYXRlcyogd2l0aCB0aGUgcmVzdCBvZiB0aGUgRFdNQUMgc3RhY2ssIGFuZCB3aGF0IGN1c3RvbSBMb29uZ3Nvbi1zcGVjaWZpYyBiaXRzIGFyZSBoYW5kbGVkIHRoZXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjozMzA0NCwiT3V0cHV0VG9rZW5zIjo0NSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE0VDA2OjM3OjAyLjAxNjAxMjE4NFoiLCJTZXEiOjMwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjEwODY0NDQsIkVycm9yIjoibm8gbWF0Y2hlcyIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIlhHTUFDXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLWxvb25nc29uLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiZXJyb3JcIjogXCJubyBtYXRjaGVzXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE0VDA2OjM3OjAyLjA3NzEwMzk4N1oiLCJTZXEiOjMxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo3MjQxNTg2NDE5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgc3VtbWFyeSwgYXMgdGhvdWdoIEkgd2VyZSBwb25kZXJpbmcgdGhpczpcblxuKipDb25zaWRlcmluZyB0aGUgYGR3bWFjLW1vdG9yY29tbS5jYCBEcml2ZXIqKlxuXG5Pa2F5LCBzbyBJJ20gdGhpbmtpbmcgYWJvdXQgRXRoZXJuZXQgZHJpdmVycywgcGFydGljdWxhcmx5IGluIHRoZSBjb250ZXh0IG9mIHRoaXMgc3BlY2lmaWMgc3lzdGVtLCBhbmQgdGhlIGBkd21hYy1tb3RvcmNvbW0uY2AgZHJpdmVyIGlzIHBva2luZyBhdCB0aGUgZnJvbnQgb2YgbXkgbWluZC4gV2hhdCdzIHRoZSBkZWFsIHdpdGggdGhpcyBwYXJ0aWN1bGFyIGltcGxlbWVudGF0aW9uPyBJcyBpdCBkb2luZyBhbnl0aGluZyBzcGVjaWFsIG9yIHVuaXF1ZSB0aGF0IEkgbmVlZCB0byBiZSBhd2FyZSBvZj8gSSBuZWVkIHRvIGFuYWx5emUgaG93IGl0IGhhbmRsZXMgdGhlIE1BQydzIGNvbW11bmljYXRpb24uIEFyZSB0aGVyZSBhbnkgZGV2aWF0aW9ucyBmcm9tIHRoZSBzdGFuZGFyZCBEZXNpZ25XYXJlIE1BQyBkcml2ZXI/IERvZXMgaXQgY29udGFpbiBhbnkgTW90b3Jjb21tLXNwZWNpZmljIGhhcmR3YXJlIHF1aXJrcywgb3IgYXJlIHRoZXkgaGFuZGxlZCB1cHN0cmVhbT8gSSBoYXZlIHRvIGNvbnNpZGVyIHRoZSBwZXJmb3JtYW5jZSBpbXBsaWNhdGlvbnMgaGVyZSwgZXNwZWNpYWxseSBpZiBpdCdzIGludGVyYWN0aW5nIHdpdGggYW55IGN1c3RvbSBoYXJkd2FyZSBvciBhIG5vbi1zdGFuZGFyZCBQSFkuIExldCBtZSBkaXZlIGludG8gdGhlIGNvZGUgYW5kIHNlZSB3aGF0IHN0YW5kcyBvdXQuIEkgbmVlZCB0byBrZWVwIGFuIGV5ZSBvdXQgZm9yIHBvdGVudGlhbCBpbnRlcnJ1cHQgaGFuZGxpbmcgZGlmZmVyZW5jZXMsIERNQSBzZXR1cCB0aGF0IGlzIG9wdGltaXplZCwgYW5kIGFueSBwb3dlciBtYW5hZ2VtZW50IGNvbnNpZGVyYXRpb25zIHNwZWNpZmljIHRvIHRoaXMgZHJpdmVyIGFuZCBpdHMgaW50ZWdyYXRpb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjMzMzkwLCJPdXRwdXRUb2tlbnMiOjQ0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTRUMDY6Mzc6MDkuMzE4NjkyNzI2WiIsIlNlcSI6MzIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NTAxMTgwNSwiRXJyb3IiOiJubyBtYXRjaGVzIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiWEdNQUNcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtbW90b3Jjb21tLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiZXJyb3JcIjogXCJubyBtYXRjaGVzXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE0VDA2OjM3OjA5LjM2MzcxMjYwMVoiLCJTZXEiOjMzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo3NDU3OTkzMTI3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFuYWx5c2lzIG9mIHRoZSBEV01BQy9TVE1NQUMgRHJpdmVyIEludGVyYWN0aW9uKipcblxuT2theSwgc28gSSdtIGRpZ2dpbmcgaW50byB0aGlzLCBhbmQgaXQgc2VlbXMgcHJldHR5IGNsZWFyIHRoYXQgYERXTUFDX0NPUkVfWEdNQUNgIGlzbid0IGFjY2Vzc2libGUgdGhyb3VnaCBQQ0kuIFRoYXQncyBub3QgYSBzdXJwcmlzZTsgaXQncyBhIHBsYXRmb3JtIGRldmljZSwgbGlrZWx5IGNvbmZpZ3VyZWQgYXQgYm9vdCBieSBzb21ldGhpbmcgbGlrZSBgZHdtYWMtc29jZnBnYS5jYCwgYGR3bWFjLXRlZ3JhLmNgLCBvciBgc3RtbWFjX3BsYXRmb3JtLmNgLiBUaGUgcXVlc3Rpb24gaXMsIGNhbiBTeXprYWxsZXIgZW11bGF0ZSB0aG9zZSBwbGF0Zm9ybSBkZXZpY2VzIGVmZmVjdGl2ZWx5PyBJIGtub3cgaXQgKmNhbiogaW5qZWN0IGRldmljZSB0cmVlIG5vZGVzLCBhc3N1bWluZyBpdCBoYXMgYSBmdW5jdGlvbiBsaWtlIGBzeXpfaW5pdF9uZXRfc29ja2V0YCBvciBzb21ldGhpbmcgc2ltaWxhciBhdmFpbGFibGUsIGJ1dCB1c3VhbGx5LCBpdCB3b24ndCBkeW5hbWljYWxseSBjcmVhdGUgcGxhdGZvcm0gZGV2aWNlcyB1bmxlc3MgdGhlcmUncyBhIHNwZWNpZmljIHBzZXVkby1zeXNjYWxsIGRlc2lnbmVkIGZvciB0aGF0IHB1cnBvc2UsIG9yIGlmIGl0J3MgYmFrZWQgaW50byB0aGUgaW5pdGlhbCBRRU1VIGltYWdlLlxuXG5Ib2xkIG9uLi4uIFRoaXMgcGF0Y2ggaXMgdG91Y2hpbmcgYHN0bW1hY19tYWluLmNgLiBUaGF0J3MgdGhlICpjb3JlKiBkcml2ZXIgZm9yICphbGwqIFNUTU1BQyBkZXZpY2VzLCBpbmNsdWRpbmcgdGhpbmdzIGxpa2UgYERXTUFDX0NPUkVfR01BQzRgIGFuZCBgRFdNQUNfQ09SRV9HTUFDYC4gVGhhdCdzIGEga2V5IG9ic2VydmF0aW9uLiBOb3cgSSBuZWVkIHRvIGZpZ3VyZSBvdXQgaWYgYHN0bW1hY19kYXRhcGF0aF90ZWFyZG93bmAgZ2V0cyBjYWxsZWQgZm9yIGBEV01BQ19DT1JFX0dNQUM0YC4gSXQncyBlc3NlbnRpYWwgdG8gdW5kZXJzdGFuZCB0aGUgc2NvcGUgb2YgdGhpcyBjaGFuZ2UuXG5cbk9rYXksIEkndmUgY2hlY2tlZCB0aGUgY29kZSwgYW5kIHllcywgYHN0bW1hY19kYXRhcGF0aF90ZWFyZG93bmAgaXMgZGVmaW5pdGVseSBjYWxsZWQgaW4gZnVuY3Rpb25zIGxpa2UgYF9fc3RtbWFjX3JlbGVhc2VgLCBgc3RtbWFjX3hkcF9yZWxlYXNlYCwgYW5kIGBzdG1tYWNfc3VzcGVuZGAuIEdvb2QuIEFuZCB0aGVzZSBmdW5jdGlvbnMgYXJlIGNhbGxlZCBmb3IgKmFsbCogc3RtbWFjIGRldmljZXMsIHJlZ2FyZGxlc3Mgb2YgdGhlIHNwZWNpZmljIGBjb3JlX3R5cGVgLiBUaGlzIGlzIHRoZSBjb25maXJtYXRpb24gSSBuZWVkZWQ6IGl0IHNlZW1zIHRoZSBmdW5jdGlvbiAqZG9lcyogYXBwbHkgdG8gbXVsdGlwbGUgZGV2aWNlcyBhbmQgaXNuJ3Qgc3BlY2lmaWMgdG8gYERXTUFDX0NPUkVfWEdNQUNgLiBJIG5lZWQgdG8gdmVyaWZ5IHRoYXQgb25jZSBtb3JlLiBCdXQgaXQgbG9va3MgbGlrZSBJIHVuZGVyc3RhbmQgdGhlIGZsb3cgb2YgZXZlbnRzIGhlcmUgYW5kIHRoZSBpbXBhY3Qgb2YgdGhlIHBhdGNoLlxuXG5cbiIsIklucHV0VG9rZW5zIjozMzY2OCwiT3V0cHV0VG9rZW5zIjo1MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI3NywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xNFQwNjozNzoxNi44MjE3MDc4ODhaIiwiU2VxIjozNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjkwMTcwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19tYWluLmNcIixcbiAgXCJGaXJzdExpbmVcIjogNDI4MCxcbiAgXCJMaW5lQ291bnRcIjogNTBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiNDI4MDpcXHRcXHRrZnJlZShkbWFfY29uZik7XFxuNDI4MTpcXHRcXHRyZXR1cm4gcmV0O1xcbjQyODI6XFx0fVxcbjQyODM6XFx0XFxuNDI4NDpcXHRzdGF0aWMgdm9pZCBfX3N0bW1hY19yZWxlYXNlKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXFxuNDI4NTpcXHR7XFxuNDI4NjpcXHRcXHRzdHJ1Y3Qgc3RtbWFjX3ByaXYgKnByaXYgPSBuZXRkZXZfcHJpdihkZXYpO1xcbjQyODc6XFx0XFx0dTggY2hhbjtcXG40Mjg4OlxcdFxcbjQyODk6XFx0XFx0c3RtbWFjX2Rpc2FibGVfYWxsX3F1ZXVlcyhwcml2KTtcXG40MjkwOlxcdFxcbjQyOTE6XFx0XFx0Zm9yIChjaGFuID0gMDsgY2hhbiBcXHUwMDNjIHByaXYtXFx1MDAzZXBsYXQtXFx1MDAzZXR4X3F1ZXVlc190b191c2U7IGNoYW4rKylcXG40MjkyOlxcdFxcdFxcdGhydGltZXJfY2FuY2VsKFxcdTAwMjZwcml2LVxcdTAwM2VkbWFfY29uZi50eF9xdWV1ZVtjaGFuXS50eHRpbWVyKTtcXG40MjkzOlxcdFxcbjQyOTQ6XFx0XFx0bmV0aWZfdHhfZGlzYWJsZShkZXYpO1xcbjQyOTU6XFx0XFxuNDI5NjpcXHRcXHQvKiBGcmVlIHRoZSBJUlEgbGluZXMgKi9cXG40Mjk3OlxcdFxcdHN0bW1hY19mcmVlX2lycShkZXYsIFJFUV9JUlFfRVJSX0FMTCwgMCk7XFxuNDI5ODpcXHRcXG40Mjk5OlxcdFxcdC8qIEhhcyB0byBydW4gYmVmb3JlIG1hY19saW5rX2Rvd24oKSBkaXNhYmxlcyB0aGUgTUFDLiAqL1xcbjQzMDA6XFx0XFx0c3RtbWFjX2RhdGFwYXRoX3RlYXJkb3duKHByaXYpO1xcbjQzMDE6XFx0XFxuNDMwMjpcXHRcXHQvKiBTdG9wIGFuZCBkaXNjb25uZWN0IHRoZSBQSFkgKi9cXG40MzAzOlxcdFxcdHBoeWxpbmtfc3RvcChwcml2LVxcdTAwM2VwaHlsaW5rKTtcXG40MzA0OlxcdFxcbjQzMDU6XFx0XFx0LyogUmVsZWFzZSBhbmQgZnJlZSB0aGUgUngvVHggcmVzb3VyY2VzICovXFxuNDMwNjpcXHRcXHRmcmVlX2RtYV9kZXNjX3Jlc291cmNlcyhwcml2LCBcXHUwMDI2cHJpdi1cXHUwMDNlZG1hX2NvbmYpO1xcbjQzMDc6XFx0XFxuNDMwODpcXHRcXHRzdG1tYWNfcmVsZWFzZV9wdHAocHJpdik7XFxuNDMwOTpcXHRcXG40MzEwOlxcdFxcdGlmIChzdG1tYWNfZnBlX3N1cHBvcnRlZChwcml2KSlcXG40MzExOlxcdFxcdFxcdGV0aHRvb2xfbW1zdl9zdG9wKFxcdTAwMjZwcml2LVxcdTAwM2VmcGVfY2ZnLm1tc3YpO1xcbjQzMTI6XFx0fVxcbjQzMTM6XFx0XFxuNDMxNDpcXHQvKipcXG40MzE1OlxcdCAqICBzdG1tYWNfcmVsZWFzZSAtIGNsb3NlIGVudHJ5IHBvaW50IG9mIHRoZSBkcml2ZXJcXG40MzE2OlxcdCAqICBAZGV2IDogZGV2aWNlIHBvaW50ZXIuXFxuNDMxNzpcXHQgKiAgRGVzY3JpcHRpb246XFxuNDMxODpcXHQgKiAgVGhpcyBpcyB0aGUgc3RvcCBlbnRyeSBwb2ludCBvZiB0aGUgZHJpdmVyLlxcbjQzMTk6XFx0ICovXFxuNDMyMDpcXHRzdGF0aWMgaW50IHN0bW1hY19yZWxlYXNlKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXFxuNDMyMTpcXHR7XFxuNDMyMjpcXHRcXHRzdHJ1Y3Qgc3RtbWFjX3ByaXYgKnByaXYgPSBuZXRkZXZfcHJpdihkZXYpO1xcbjQzMjM6XFx0XFxuNDMyNDpcXHRcXHQvKiBJZiB0aGUgUEhZIG9yIE1BQyBoYXMgV29MIGVuYWJsZWQsIHRoZW4gdGhlIFBIWSB3aWxsIG5vdCBiZVxcbjQzMjU6XFx0XFx0ICogc3VzcGVuZGVkIHdoZW4gcGh5bGlua19zdG9wKCkgaXMgY2FsbGVkIGJlbG93LiBTZXQgdGhlIFBIWVxcbjQzMjY6XFx0XFx0ICogdG8gaXRzIHNsb3dlc3Qgc3BlZWQgdG8gc2F2ZSBwb3dlci5cXG40MzI3OlxcdFxcdCAqL1xcbjQzMjg6XFx0XFx0aWYgKGRldmljZV9tYXlfd2FrZXVwKHByaXYtXFx1MDAzZWRldmljZSkpXFxuNDMyOTpcXHRcXHRcXHRwaHlsaW5rX3NwZWVkX2Rvd24ocHJpdi1cXHUwMDNlcGh5bGluaywgZmFsc2UpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xNFQwNjozNzoxNi44MjIwMDA4ODhaIiwiU2VxIjozNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTIxNDY2NTE2MTQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBTVE1NQUMgRGF0YXBhdGggVGVhcmRvd24gYW5kIFNldHVwKipcblxuT2theSwgc28gSSd2ZSBjb25maXJtZWQgdGhhdCBgX19zdG1tYWNfcmVsZWFzZWAgY2FsbHMgYHN0bW1hY19kYXRhcGF0aF90ZWFyZG93bihwcml2KWAuIExldCdzIGJyZWFrIGRvd24gd2hhdCdzIGhhcHBlbmluZyBpbiBgc3RtbWFjX2RhdGFwYXRoX3RlYXJkb3duYC4gSXQgYXBwZWFycyB0byBiZSBhIG11bHRpLWNoYW5uZWwgRE1BIHNodXRkb3duIHNlcXVlbmNlLiBJdCBpdGVyYXRlcyB0aHJvdWdoIHRoZSBjb25maWd1cmVkIFRYIGFuZCBSWCBxdWV1ZXMsIHN0b3BwaW5nIHRoZSBETUEgY2hhbm5lbHMsIHdhaXRpbmcgZm9yIHRoZW0gdG8gcmVwb3J0IHRoZXkncmUgc3RvcHBlZCwgZHJhaW5pbmcgTVRMIHF1ZXVlcywgZGlzYWJsaW5nIHRoZSBNQUMsIGFuZCB0aGVuIHJlcGVhdGluZyB0aGUgcHJvY2VzcyBmb3IgUlggY2hhbm5lbHMuXG5cbkEga2V5IHBvaW50IGlzIHRoZSBjb25kaXRpb25hbCBjaGVjayBgcHJpdi1cdTAwM2Vody1cdTAwM2VkbWEtXHUwMDNldHhfZG1hX3N0b3BwZWRgLiBGb3IgYSBHTUFDNCwgdGhpcyB3aWxsIGJlIE5VTEwsIGJlY2F1c2Ugb25seSBgZHd4Z21hYzIxMF9kbWFfb3BzYCBwcm92aWRlcyBpdCwgYW5kIHRoZSB3YWl0IGlzIHNraXBwZWQsIHdoaWNoIGlzIHByb2JhYmx5IG9rYXkuXG5cbk5vdyBoZXJlIGlzIHdoZXJlIHRoaW5ncyBnZXQgaW50ZXJlc3Rpbmc6IHRoZSBvcmRlciBvZiBvcGVyYXRpb25zIGluIHRoaXMgdGVhcmRvd24sIHNwZWNpZmljYWxseSB0aGUgcmVsYXRpdmUgcG9zaXRpb24gb2YgYHN0bW1hY19zdG9wX3R4X2RtYWAsIGBzdG1tYWNfbWFjX3NldGAsIGFuZCBgc3RtbWFjX3N0b3BfcnhfZG1hYCwgaGFzIGJlZW4gYWx0ZXJlZC4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlLlxuXG5QcmV2aW91c2x5IGl0IHdhczpcblxuMS4gYHN0bW1hY19zdG9wX3J4X2RtYWBcbjIuIGBzdG1tYWNfc3RvcF90eF9kbWFgXG4zLiBgc3RtbWFjX21hY19zZXQoLi4uLCBmYWxzZSlgXG5cbk5vdyBpdCdzOlxuXG4xLiBgc3RtbWFjX3N0b3BfdHhfZG1hYFxuMi4gYHN0bW1hY19tYWNfc2V0KC4uLiwgZmFsc2UpYFxuMy4gYHN0bW1hY19zdG9wX3J4X2RtYWBcblxuQWxzbywgaW4gYHN0bW1hY19od19zZXR1cGAgYW5kIGBzdG1tYWNfeGRwX29wZW5gLCB0aGUgb3JkZXIgb2YgYHN0bW1hY19tYWNfc2V0KC4uLiwgdHJ1ZSlgIGFuZCBgc3RtbWFjX3N0YXJ0X2FsbF9kbWFgIGhhcyBiZWVuIHN3YXBwZWQ6XG5cblByZXZpb3VzbHk6XG5cbjEuIGBzdG1tYWNfbWFjX3NldCguLi4sIHRydWUpYFxuMi4gYHN0bW1hY19zdGFydF9hbGxfZG1hYFxuXG5Ob3c6XG5cbjEuIGBzdG1tYWNfc3RhcnRfYWxsX2RtYWBcbjIuIGBzdG1tYWNfbWFjX3NldCguLi4sIHRydWUpYFxuXG5TaW5jZSB0aGlzIGNoYW5nZSBpbXBhY3RzIHRoZSBiZWhhdmlvciBvZiBhbGwgc3RtbWFjIGRldmljZXMsIGFuZCBlc3BlY2lhbGx5IHRob3NlIGFjY2Vzc2libGUgdGhyb3VnaCBQQ0kgaW4gc29tZXRoaW5nIGxpa2UgUUVNVSwgdGhpcyB3YXJyYW50cyBpbW1lZGlhdGUgZnV6emluZy4gSXQgaGFzIGEgcmVhbCBwb3RlbnRpYWwgdG8gYnJlYWsgdGhpbmdzIGFuZCBleHBvc2UgYW55IHRpbWluZyBvciByZXNvdXJjZSBtYW5hZ2VtZW50IGlzc3Vlcy4gSXQgaXMgaW1wb3J0YW50IHRvIGNvbmZpcm0gdGhlIGNvbmZpZyBvcHRpb25zLCBgQ09ORklHX1NUTU1BQ19FVEhgIGFuZCBgQ09ORklHX1NUTU1BQ19QQ0lgLiBJIHdhbnQgdG8gc2VlIGlmIHRoZSBmdXp6aW5nIGNhbiBleHBvc2UgYW55IGlzc3VlcyB0aGF0IG1heSBhcmlzZSBmcm9tIHRoaXMgcmVvcmRlcmluZyBvZiBjYWxscywgb3IgZXZlbiBmcm9tIHRoZSBza2lwcGVkIHdhaXQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjM1MjA2LCJPdXRwdXRUb2tlbnMiOjIwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6OTIyLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTRUMDY6Mzc6MjguOTY4NjU0MzYxWiIsIlNlcSI6MzYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNjEyMTA4NjgwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBTVE1NQUNfRVRIXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL0tjb25maWctMS0jIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9LY29uZmlnOjI6Y29uZmlnIFNUTU1BQ19FVEhcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9LY29uZmlnLTMtXFx0dHJpc3RhdGUgXFxcIlNUTWljcm9lbGVjdHJvbmljcyBNdWx0aS1HaWdhYml0IEV0aGVybmV0IGRyaXZlclxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTRUMDY6Mzc6MzAuNTgwNzY3NzYxWiIsIlNlcSI6MzcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMyNTk1NDEyMDgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkFuYWx5emluZyB0aGUgU1RNTUFDIFBDSSBDb25maWd1cmF0aW9uKipcblxuT2theSwgc28gdGhlIGluaXRpYWwgdGhvdWdodCBpcywgbmF0dXJhbGx5LCB0byB2ZXJpZnkgdGhlIHN0YXRlIG9mIGBDT05GSUdfU1RNTUFDX1BDSWAuIE15IGluc3RpbmN0IGlzIHRvIHF1aWNrbHkgYXNzZXNzIGl0cyBjdXJyZW50IHNldHRpbmcsIHVuZGVyc3RhbmRpbmcgdGhhdCB0aGlzIGZsYWcgZGlyZWN0bHkgZ292ZXJucyB0aGUgaW5jbHVzaW9uIG9mIHRoZSBTeW5vcHN5cyBTVE1NQUMgRXRoZXJuZXQgZHJpdmVyIGZvciBQQ0ktYmFzZWQgbmV0d29yayBpbnRlcmZhY2VzLiBJJ20gbGlrZWx5IGdlYXJpbmcgdXAgZm9yIGEgZGVlcGVyIGRpdmUgaW50byBrZXJuZWwgY29uZmlndXJhdGlvbiwgZGVidWdnaW5nIGEgbmV0d29yayBpc3N1ZSwgb3IgcGVyaGFwcyBldmVuIHByZXBhcmluZyB0byBlbmFibGUgU1RNTUFDIG9uIGEgbmV3IGhhcmR3YXJlIHBsYXRmb3JtLiBUaGUgaW1tZWRpYXRlIHF1ZXN0aW9uIGluIG15IG1pbmQgaXM6IGlzIGl0IGVuYWJsZWQgYXMgYSBtb2R1bGUgKE0pLCBidWlsdC1pbiAoWSksIG9yIGRpc2FibGVkIChOKT8gVGhhdCdzIHRoZSBmaXJzdCBkYXRhIHBvaW50IEkgbmVlZCB0byBlc3RhYmxpc2guIEkgbmVlZCB0byBrbm93IHdoZXJlIEkgYW0gd2l0aCB0aGlzIG1vZHVsZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MzY4MzcsIk91dHB1dFRva2VucyI6MjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xNFQwNjozNzozMy44NDAzMTEwNDlaIiwiU2VxIjozOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE1Mjk3NDY5ODksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIFNUTU1BQ19QQ0lcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvS2NvbmZpZz0zOTg9Y29uZmlnIERXTUFDX01PVE9SQ09NTVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvS2NvbmZpZy00MDYtXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvS2NvbmZpZzo0MDc6Y29uZmlnIFNUTU1BQ19QQ0lcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9LY29uZmlnLTQwOC1cXHR0cmlzdGF0ZSBcXFwiU1RNTUFDIFBDSSBidXMgc3VwcG9ydFxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTRUMDY6Mzc6MzUuMzcwMDY0MTk4WiIsIlNlcSI6MzksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM2ODg4OTMwNjIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqQW5hbHl6aW5nIHRoZSBTVE1NQUNfUENJIERlcGVuZGVuY2llcyoqXG5cbkFscmlnaHQsIGxldCdzIGRpdmUgaW4uIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzLCBcIk9rYXksIGBTVE1NQUNfUENJYC4uLiB3aGF0J3MgaXQgdGllZCB0bz9cIiBJIG5lZWQgdG8gcXVpY2tseSBtYXAgb3V0IHRoZSBkZXBlbmRlbmNpZXMuIEknbSBnb2luZyB0byBtZW50YWxseSBydW4gdGhyb3VnaCB0aGUgbGlrZWx5IGNhbmRpZGF0ZXM6IFBDSSBidXMgZHJpdmVyLCBvYnZpb3VzbHksIGJ1dCB3aGF0IHNwZWNpZmljIFBDSSByZWdpc3RlcnMgaXMgaXQgbGV2ZXJhZ2luZz8gQXJlIHRoZXJlIGFueSBwbGF0Zm9ybS1zcGVjaWZpYyBxdWlya3Mgb3IgdmFyaWF0aW9ucyBkZXBlbmRpbmcgb24gdGhlIHN5c3RlbS1vbi1hLWNoaXAgKFNvQykgaXQncyBydW5uaW5nIG9uPyBJIGhhdmUgdG8gbG9vayBmb3IgaW5kaXJlY3QgZGVwZW5kZW5jaWVzIGFzIHdlbGwgLSBETUEgZW5naW5lcywgaW50ZXJydXB0IGNvbnRyb2xsZXJzLCBjbG9jayBtYW5hZ2VtZW50LiBBcmUgd2UgZGVhbGluZyB3aXRoIGFueSBzaGFyZWQgcmVzb3VyY2VzIHRoYXQgY291bGQgY2F1c2UgY29uZmxpY3RzPyBJJ2xsIGFsc28gYmUgbWluZGZ1bCBvZiBwb3RlbnRpYWwgaW50ZXJhY3Rpb25zIHdpdGggb3RoZXIgbmV0d29ya2luZyBkcml2ZXJzIG9uIHRoZSBzeXN0ZW0uIElzIHRoZXJlIGFuIGludGVyYWN0aW9uIHRoYXQgY291bGQgb2NjdXIgdGhhdCBjb3VsZCBhZmZlY3Qgb3RoZXIgZHJpdmVycyBvbiB0aGUgc3lzdGVtP1xuXG5JIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgaW1wbGljYXRpb25zIG9mIGFueSBkZXBlbmRlbmN5IGNoYW5nZXMgaWYgdGhlcmUgYXJlIGFueSwgYW5kIGNvbnNpZGVyIHRoaXMgaW4gbXkgYW5hbHlzaXMuIFdoYXQga2VybmVsIHZlcnNpb25zIGlzIHRoaXMgbW9kdWxlIGRlc2lnbmVkIHRvIHdvcmsgd2l0aD8gQW55IGtub3duIGNvbXBhdGliaWxpdHkgaXNzdWVzPyBJIGhhdmUgdG8gYmUgYXdhcmUgb2YgdGhlIG92ZXJhbGwgc3lzdGVtIGNvbnRleHQgdG8gcHJldmVudCBhbnkgaXNzdWVzLiBMZXQncyBtYWtlIHN1cmUgd2UgaGF2ZSBhIHNvbGlkIHVuZGVyc3RhbmRpbmcgb2YgdGhlIGltcGxpY2F0aW9ucyBvZiBhbnkgZGVwZW5kZW5jaWVzIG9uIHRoZSBzeXN0ZW0uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjM3MTY4LCJPdXRwdXRUb2tlbnMiOjQ0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTRUMDY6Mzc6MzkuMDU4OTU5N1oiLCJTZXEiOjQwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2NjM2MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDQwMCxcbiAgXCJMaW5lQ291bnRcIjogMjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDQwMDpcXHRcXHRkZXBlbmRzIG9uIFBDSVxcbiA0MDE6XFx0XFx0c2VsZWN0IE1PVE9SQ09NTV9QSFlcXG4gNDAyOlxcdFxcdHNlbGVjdCBTVE1NQUNfTElCUENJXFxuIDQwMzpcXHRcXHRoZWxwXFxuIDQwNDpcXHRcXHQgIFRoaXMgZW5hYmxlcyBnbHVlIGRyaXZlciBmb3IgTW90b3Jjb21tIERXTUFDLWJhc2VkIFBDSSBFdGhlcm5ldFxcbiA0MDU6XFx0XFx0ICBjb250cm9sbGVycy4gQ3VycmVudGx5IG9ubHkgWVQ2ODAxIGlzIHN1cHBvcnRlZC5cXG4gNDA2OlxcdFxcbiA0MDc6XFx0Y29uZmlnIFNUTU1BQ19QQ0lcXG4gNDA4OlxcdFxcdHRyaXN0YXRlIFxcXCJTVE1NQUMgUENJIGJ1cyBzdXBwb3J0XFxcIlxcbiA0MDk6XFx0XFx0ZGVwZW5kcyBvbiBQQ0lcXG4gNDEwOlxcdFxcdGRlcGVuZHMgb24gQ09NTU9OX0NMS1xcbiA0MTE6XFx0XFx0c2VsZWN0IFNUTU1BQ19MSUJQQ0lcXG4gNDEyOlxcdFxcdGhlbHBcXG4gNDEzOlxcdFxcdCAgVGhpcyBzZWxlY3RzIHRoZSBwbGF0Zm9ybSBzcGVjaWZpYyBidXMgc3VwcG9ydCBmb3IgdGhlIHN0bW1hYyBkcml2ZXIuXFxuIDQxNDpcXHRcXHQgIFRoaXMgZHJpdmVyIHdhcyB0ZXN0ZWQgb24gWExJTlggWEMyVjMwMDAgRkYxMTUyQU1UMDIyMVxcbiA0MTU6XFx0XFx0ICBEMTIxNTk5NEEgVklSVEVYIEZQR0EgYm9hcmQgYW5kIFNOUFMgUW9TIElQSyBQcm90b3R5cGluZyBLaXQuXFxuIDQxNjpcXHRcXG4gNDE3OlxcdFxcdCAgSWYgeW91IGhhdmUgYSBjb250cm9sbGVyIHdpdGggdGhpcyBpbnRlcmZhY2UsIHNheSBZIG9yIE0gaGVyZS5cXG4gNDE4OlxcdFxcbiA0MTk6XFx0XFx0ICBJZiB1bnN1cmUsIHNheSBOLlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xNFQwNjozNzozOS4wNTkwMjc0NVoiLCJTZXEiOjQxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0OTk1NDg3MDY1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSBkZXBlbmRlbmNpZXMsIGZyb20gYW4gZXhwZXJ0J3MgcGVyc3BlY3RpdmU6XG5cbioqQW5hbHl6aW5nIFNUTU1BQyBEcml2ZXIgRGVwZW5kZW5jaWVzKipcblxuQWxyaWdodCwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBNeSBpbml0aWFsIG9ic2VydmF0aW9uIGlzIHRoYXQgYFNUTU1BQ19QQ0lgIHJlbGllcyBvbiBib3RoIGBQQ0lgIGFuZCBgQ09NTU9OX0NMS2AuIFRoYXQncyBzdGFuZGFyZCBmb3IgYSBQQ0ktYmFzZWQgRXRoZXJuZXQgY29udHJvbGxlciDigJMgbmVlZHMgdGhlIFBDSSBpbmZyYXN0cnVjdHVyZSB0byBleGlzdCBhbmQgY2xvY2sgbWFuYWdlbWVudCB0byBmdW5jdGlvbiBjb3JyZWN0bHkuIE5vIHN1cnByaXNlcyB0aGVyZS5cblxuTmV4dCwgd2Ugc2VlIHRoYXQgYFNUTU1BQ19FVEhgIGRlcGVuZHMgb24gYEhBU19JT01FTWAgYW5kIGBIQVNfRE1BYC4gVGhpcyBpcyB3aGF0IEknZCBleHBlY3QuIGBIQVNfSU9NRU1gIG1lYW5zIGl0IGNhbiBhY2Nlc3MgbWVtb3J5LW1hcHBlZCBJL08sIHdoaWNoIGlzIGNydWNpYWwgZm9yIGludGVyYWN0aW5nIHdpdGggdGhlIEV0aGVybmV0IGNvbnRyb2xsZXIncyByZWdpc3RlcnMuIEFuZCBgSEFTX0RNQWAgaW5kaWNhdGVzIGl0IHJlcXVpcmVzIERNQSAoRGlyZWN0IE1lbW9yeSBBY2Nlc3MpIHN1cHBvcnQuIEEgbW9kZXJuIEV0aGVybmV0IGNvbnRyb2xsZXIgKmhhcyogdG8gdXNlIERNQSB0byBiZSBwZXJmb3JtYW50LiBJdCB3b3VsZG4ndCBiZSB2ZXJ5IHVzZWZ1bCBpZiBpdCBkaWRuJ3QuXG5cbk5vdywgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhpcyBgU1RNTUFDX0VUSGAgZGVwZW5kZW5jeSBiZXR0ZXIuIEkgd2FudCB0byBkaXZlIGEgbGl0dGxlIGRlZXBlciB0byBjb25maXJtIHRoYXQgSSdtIHNlZWluZyBldmVyeXRoaW5nIGNvcnJlY3RseS4gTGV0IG1lIHNlZSB3aGF0IHNwZWNpZmljYWxseSBkZXBlbmRzIG9uICp0aGlzKiBkcml2ZXIuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjM3ODExLCJPdXRwdXRUb2tlbnMiOjQyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTcsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xNFQwNjozNzo0NC4wNTQ1MTY5MTVaIiwiU2VxIjo0MiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzA3OTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiAxLFxuICBcIkxpbmVDb3VudFwiOiAyMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgICAxOlxcdCMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxcbiAgIDI6XFx0Y29uZmlnIFNUTU1BQ19FVEhcXG4gICAzOlxcdFxcdHRyaXN0YXRlIFxcXCJTVE1pY3JvZWxlY3Ryb25pY3MgTXVsdGktR2lnYWJpdCBFdGhlcm5ldCBkcml2ZXJcXFwiXFxuICAgNDpcXHRcXHRkZXBlbmRzIG9uIEhBU19JT01FTSBcXHUwMDI2XFx1MDAyNiBIQVNfRE1BXFxuICAgNTpcXHRcXHRkZXBlbmRzIG9uIFBUUF8xNTg4X0NMT0NLX09QVElPTkFMXFxuICAgNjpcXHRcXHRkZXBlbmRzIG9uIEVUSFRPT0xfTkVUTElOS1xcbiAgIDc6XFx0XFx0c2VsZWN0IE1JSVxcbiAgIDg6XFx0XFx0c2VsZWN0IFBDU19YUENTXFxuICAgOTpcXHRcXHRzZWxlY3QgUEFHRV9QT09MXFxuICAxMDpcXHRcXHRzZWxlY3QgUEhZTElOS1xcbiAgMTE6XFx0XFx0c2VsZWN0IENSQzMyXFxuICAxMjpcXHRcXHRzZWxlY3QgUkVTRVRfQ09OVFJPTExFUlxcbiAgMTM6XFx0XFx0c2VsZWN0IE5FVF9ERVZMSU5LXFxuICAxNDpcXHRcXHRoZWxwXFxuICAxNTpcXHRcXHQgIFRoaXMgaXMgdGhlIGRyaXZlciBmb3IgdGhlIEV0aGVybmV0IElQcyBidWlsdCBhcm91bmQgYVxcbiAgMTY6XFx0XFx0ICBTeW5vcHN5cyBJUCBDb3JlLlxcbiAgMTc6XFx0XFxuICAxODpcXHRpZiBTVE1NQUNfRVRIXFxuICAxOTpcXHRcXG4gIDIwOlxcdGNvbmZpZyBTVE1NQUNfU0VMRlRFU1RTXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE0VDA2OjM3OjQ0LjA1NDU4OTI5NVoiLCJTZXEiOjQzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxMDI2NjczNTQxMSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipGdXp6aW5nIFN0cmF0ZWd5IGZvciBTVE1NQUMgRHJpdmVyKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBTVE1NQUMgZHJpdmVyIHBhdGNoLCBhbmQgbXkgaW5pdGlhbCB0aG91Z2h0cyBhcmUgYXJvdW5kIGNvbmZpZ3VyYXRpb24gb3B0aW9ucy4gYFNUTU1BQ19FVEhgIGFuZCBgU1RNTUFDX1BDSWAgc2VlbSB0byBiZSB0aGUgcHJpbWFyeSBjb25maWd1cmF0aW9ucyBpbiB0aGlzIGNvbnRleHQuIEknbGwgbmVlZCB0byByZW1lbWJlciB0aG9zZS4gV2hhdCBhYm91dCB0aGUgb3RoZXIgRFdNQUMgY29uZmlndXJhdGlvbnMg4oCTIGBEV01BQ19JTlRFTGAsIGBEV01BQ19MT09OR1NPTmAsIGFuZCBgRFdNQUNfTU9UT1JDT01NYD8gRm9yIG5vdywgSSdsbCBqdXN0IGZvY3VzIG9uIGluY2x1ZGluZyBgU1RNTUFDX1BDSWAgYW5kIGBTVE1NQUNfRVRIYCwgYW5kIHJldmlzaXQgdGhvc2UgaWYgbmVjZXNzYXJ5LlxuXG5Ob3csIGxldCdzIGdldCBkb3duIHRvIHRoZSBmdXp6aW5nIHRhcmdldHMuIFRoaXMgcGF0Y2ggbW9kaWZpZXMgc2V2ZXJhbCBmdW5jdGlvbnMuIEkgbmVlZCB0byBmaWd1cmUgb3V0IHdoaWNoIG9uZXMgYXJlIGNyaXRpY2FsIGFuZCB3aGVyZSB0aGUgYmVzdCBlbnRyeSBwb2ludHMgYXJlIGZvciBtYXhpbXVtIGltcGFjdC4gVGhlIHBhdGNoIHRvdWNoZXMgYHN0bW1hY19kYXRhcGF0aF90ZWFyZG93bmAsIGBzdG1tYWNfaHdfc2V0dXBgLCBgc3RtbWFjX3hkcF9vcGVuYCwgYGR3eGdtYWMyX3R4X2RtYV9zdG9wcGVkYCwgYGR3eGdtYWMyX3R4X210bF9kcmFpbmAsIGBkd3hnbWFjMl9yeF9tdGxfZHJhaW5gLCBhbmQgYGR3eGdtYWMyX3J4X2RtYV9zdG9wcGVkYC5cblxuSSBzZWUgdGhhdCBgc3RtbWFjX2RhdGFwYXRoX3RlYXJkb3duYCBpcyBhIHN0YXRpYyBmdW5jdGlvbiwgYnV0IGl0IGlzIGNhbGxlZCBieSBgX19zdG1tYWNfcmVsZWFzZWAsIGBzdG1tYWNfeGRwX3JlbGVhc2VgLCBhbmQgYHN0bW1hY19zdXNwZW5kYC4gQWxzbywgYHN0bW1hY19od19zZXR1cGAgaXMgYWxzbyBpbXBvcnRhbnQsIGFzIGl0IGdldHMgY2FsbGVkIGJ5IGBzdG1tYWNfb3BlbmAgYW5kIGBzdG1tYWNfcmVzdW1lYC5cblxuVGhlIGtleSBlbnRyeSBwb2ludHMgYXBwZWFyIHRvIGJlIHRoZSBuZXRfZGV2aWNlX29wcyBmdW5jdGlvbnMgYC5uZG9fb3BlbmAgYW5kIGAubmRvX3N0b3BgLCB3aGljaCBjb3JyZXNwb25kIHRvIGBzdG1tYWNfb3BlbmAgYW5kIGBzdG1tYWNfcmVsZWFzZWAgcmVzcGVjdGl2ZWx5LiBBbHNvLCB0aGUgZGV2aWNlIFBNIG9wcyBmb3IgYHN0bW1hY19zdXNwZW5kYCBhbmQgYHN0bW1hY19yZXN1bWVgIG5lZWQgYSBkZWVwZXIgZGl2ZS4gQW5kIG9mIGNvdXJzZSwgdGhlIFhEUCBzZXR1cCBmdW5jdGlvbnM6IGBzdG1tYWNfeGRwX29wZW5gIGFuZCBgc3RtbWFjX3hkcF9yZWxlYXNlYC5cblxuU28sIGl0IGxvb2tzIGxpa2UgYHN0bW1hY19vcGVuYCwgYHN0bW1hY19yZWxlYXNlYCwgYHN0bW1hY19zdXNwZW5kYCwgYHN0bW1hY19yZXN1bWVgLCBgc3RtbWFjX3hkcF9vcGVuYCwgYW5kIGBzdG1tYWNfeGRwX3JlbGVhc2VgIGFyZSB0aGUgY3J1Y2lhbCBmdW5jdGlvbnMgZm9yIGludGVuc2l2ZSBmdXp6aW5nLlxuXG5XYWl0LCBsZXQgbWUgZG91YmxlLWNoZWNrIHNvbWV0aGluZy4gYHN0bW1hY19kYXRhcGF0aF90ZWFyZG93bmAgaXMgc3RhdGljLCB5ZXMsIGJ1dCBpdOKAmXMgY2FsbGVkIGZyb20gYF9fc3RtbWFjX3JlbGVhc2VgLCB3aGljaCBpcyB0aGVuIGNhbGxlZCBmcm9tIGBzdG1tYWNfcmVsZWFzZWAuIEFuZCBgc3RtbWFjX29wZW5gIGNhbGxzIGBzdG1tYWNfaHdfc2V0dXBgLiBTbyBpdCBzZWVtcyBgc3RtbWFjX29wZW5gIGFuZCBgc3RtbWFjX3JlbGVhc2VgIGFyZSBzdGlsbCB0aGUgcHJpbWFyeSBlbnRyeSBwb2ludHMuIEFsb25nIHdpdGggYHN0bW1hY194ZHBfb3BlbmAgYW5kIGBzdG1tYWNfeGRwX3JlbGVhc2VgLCB0aGV5IGFyZSB0aGUgbWFpbiBmb2N1cy4gSSdsbCBuZWVkIHRvIHF1aWNrbHkgY2hlY2sgaWYgYHN0bW1hY194ZHBfb3BlbmAgaXRzZWxmIGlzIHN0YXRpYyBvciBub3QuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjM4NDE0LCJPdXRwdXRUb2tlbnMiOjIyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTQ1LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTRUMDY6Mzc6NTQuMzIxMzI3NzQ2WiIsIlNlcSI6NDQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxOTM3OTM1MDk2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInN0bW1hY194ZHBfb3BlblwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWMuaD00MDc9dm9pZCBzdG1tYWNfcHRwX3VucmVnaXN0ZXIoc3RydWN0IHN0bW1hY19wcml2ICpwcml2KTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWMuaDo0MDg6aW50IHN0bW1hY194ZHBfb3BlbihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWMuaC00MDktdm9pZCBzdG1tYWNfeGRwX3JlbGVhc2Uoc3RydWN0IG5ldF9kZXZpY2UgKmRldik7XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfbWFpbi5jPTcxMzY9dm9pZCBzdG1tYWNfeGRwX3JlbGVhc2Uoc3RydWN0IG5ldF9kZXZpY2UgKmRldilcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19tYWluLmMtNzE2NS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfbWFpbi5jOjcxNjY6aW50IHN0bW1hY194ZHBfb3BlbihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19tYWluLmMtNzE2Ny17XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfeGRwLmM9MTAyPWludCBzdG1tYWNfeGRwX3NldF9wcm9nKHN0cnVjdCBzdG1tYWNfcHJpdiAqcHJpdiwgc3RydWN0IGJwZl9wcm9nICpwcm9nLFxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX3hkcC5jLTEzNC1cXHRpZiAoaWZfcnVubmluZyBcXHUwMDI2XFx1MDAyNiBuZWVkX3VwZGF0ZSlcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfeGRwLmM6MTM1OlxcdFxcdHN0bW1hY194ZHBfb3BlbihkZXYpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY194ZHAuYy0xMzYtXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE0VDA2OjM3OjU2LjI1OTI2ODY5MloiLCJTZXEiOjQ1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0MDExNjQ2NzE5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSBmdW5jdGlvbnMsIHRoaW5raW5nIHRocm91Z2ggaXQgYXMgeW91IGFza2VkOlxuXG4qKk15IFBlcnNwZWN0aXZlIG9uIHRoZSBgc3RtbWFjYCBYRFAgYW5kIFBvd2VyIE1hbmFnZW1lbnQgRnVuY3Rpb25zKipcblxuUmlnaHQsIGxldCBtZSBzZWUuLi5zbywgSSdtIG5vdGluZyB0aGF0IGBzdG1tYWNfeGRwX29wZW5gIGFuZCBgc3RtbWFjX3hkcF9yZWxlYXNlYCwgdGhvc2UgYXJlIGRlZmluaXRlbHkgKm5vdCogZGVjbGFyZWQgYXMgYHN0YXRpY2AuIEdvb2QsIHRoYXQgbWFrZXMgc2Vuc2UgZm9yIHRoZSBYRFAgZnVuY3Rpb25hbGl0eS4gVGhleSdyZSBsaWtlbHkgbWVhbnQgdG8gYmUgY2FsbGFibGUgZnJvbSBvdXRzaWRlIHRoZSBjb3JlIGBzdG1tYWNgIG1vZHVsZSwgcHJlc3VtYWJseSBieSBYRFAgcHJvZ3JhbXMgb3Igc29tZSBvdGhlciBleHRlcm5hbCBjb21wb25lbnQgdGhhdCBuZWVkcyB0byBtYW5hZ2UgdGhlIGludGVyYWN0aW9uIHdpdGggdGhlIGRyaXZlciBpbiB0aGF0IGNvbnRleHQuIFdlIG5lZWQgdGhhdCBleHRlcm5hbCBsaW5rYWdlLlxuXG5BbmQgdGhlbiBsb29raW5nIGF0IHRoZSBzdXNwZW5kIGFuZCByZXN1bWUgcm91dGluZXMsIGBzdG1tYWNfc3VzcGVuZGAgYW5kIGBzdG1tYWNfcmVzdW1lYD8gQWxzbyBub24tc3RhdGljLiBBZ2FpbiwgYXMgZXhwZWN0ZWQuIFRob3NlIGFyZSBjcml0aWNhbCBlbnRyeSBwb2ludHMgZm9yIHRoZSBzeXN0ZW0gcG93ZXIgbWFuYWdlbWVudCBmcmFtZXdvcmsuIFRoZSBwb3dlciBtYW5hZ2VtZW50IGNvZGUsIG9yIHBlcmhhcHMgZXZlbiBoaWdoZXItbGV2ZWwgZHJpdmVycywgbmVlZHMgdG8gYmUgYWJsZSB0byBjYWxsIHRoZXNlIGZ1bmN0aW9ucyBkaXJlY3RseSB0byBjb250cm9sIHRoZSBwb3dlciBzdGF0ZSBvZiB0aGUgU1RNTUFDIGRldmljZS4gSWYgdGhleSAqd2VyZSogc3RhdGljLCB3ZSdkIGhhdmUgYSByZWFsIHByb2JsZW0gaW50ZWdyYXRpbmcgd2l0aCB0aGUgd2lkZXIgc3lzdGVtLiBUaGF0IHdvdWxkIG1ha2UgZm9yIGEgYnJpdHRsZSBkcml2ZXIuIFdlIGNhbid0IGhhdmUgdGhhdC5cblxuXG4iLCJJbnB1dFRva2VucyI6NDAxMTAsIk91dHB1dFRva2VucyI6MjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1MSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xNFQwNjozODowMC4yNzA5MTg3MjFaIiwiU2VxIjo0NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE2NjU0NDA4MjUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwic3RtbWFjX3N1c3BlbmRcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtdGVncmEuYz01Nz1zdGF0aWMgaW50IF9fbWF5YmVfdW51c2VkIHRlZ3JhX21nYmVfc3VzcGVuZChzdHJ1Y3QgZGV2aWNlICpkZXYpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy10ZWdyYS5jLTYxLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLXRlZ3JhLmM6NjI6XFx0ZXJyID0gc3RtbWFjX3N1c3BlbmQoZGV2KTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy10ZWdyYS5jLTYzLVxcdGlmIChlcnIpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWMuaD00MTE9aW50IHN0bW1hY19yZXN1bWUoc3RydWN0IGRldmljZSAqZGV2KTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWMuaDo0MTI6aW50IHN0bW1hY19zdXNwZW5kKHN0cnVjdCBkZXZpY2UgKmRldik7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjLmgtNDEzLXZvaWQgc3RtbWFjX2R2cl9yZW1vdmUoc3RydWN0IGRldmljZSAqZGV2KTtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19tYWluLmM9ODIwND1FWFBPUlRfU1lNQk9MX0dQTChzdG1tYWNfZHZyX3JlbW92ZSk7XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfbWFpbi5jLTgyMDYtLyoqXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX21haW4uYzo4MjA3OiAqIHN0bW1hY19zdXNwZW5kIC0gc3VzcGVuZCBjYWxsYmFja1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19tYWluLmMtODIwOC0gKiBAZGV2OiBkZXZpY2UgcG9pbnRlclxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX21haW4uYy04MjEyLSAqL1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19tYWluLmM6ODIxMzppbnQgc3RtbWFjX3N1c3BlbmQoc3RydWN0IGRldmljZSAqZGV2KVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19tYWluLmMtODIxNC17XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfbWFpbi5jLTgyNjItfVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19tYWluLmM6ODI2MzpFWFBPUlRfU1lNQk9MX0dQTChzdG1tYWNfc3VzcGVuZCk7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX21haW4uYy04MjY0LVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX21haW4uYz04Mzk0PUVYUE9SVF9TWU1CT0xfR1BMKHN0bW1hY19yZXN1bWUpO1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX21haW4uYy04Mzk2LS8qIFRoaXMgaXMgbm90IHRoZSBzYW1lIGFzIEVYUE9SVF9HUExfU0lNUExFX0RFVl9QTV9PUFMoKSB3aGVuIENPTkZJR19QTT1uICovXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX21haW4uYzo4Mzk3OkRFRklORV9TSU1QTEVfREVWX1BNX09QUyhzdG1tYWNfc2ltcGxlX3BtX29wcywgc3RtbWFjX3N1c3BlbmQsIHN0bW1hY19yZXN1bWUpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19tYWluLmMtODM5OC1FWFBPUlRfU1lNQk9MX0dQTChzdG1tYWNfc2ltcGxlX3BtX29wcyk7XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfcGxhdGZvcm0uYz0xMDAxPWNvbnN0IHN0cnVjdCBkZXZfcG1fb3BzIHN0bW1hY19wbHRmcl9wbV9vcHMgPSB7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX3BsYXRmb3JtLmM6MTAwMjpcXHRTRVRfU1lTVEVNX1NMRUVQX1BNX09QUyhzdG1tYWNfc3VzcGVuZCwgc3RtbWFjX3Jlc3VtZSlcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfcGxhdGZvcm0uYy0xMDAzLVxcdFNFVF9SVU5USU1FX1BNX09QUyhzdG1tYWNfcnVudGltZV9zdXNwZW5kLCBzdG1tYWNfcnVudGltZV9yZXN1bWUsIE5VTEwpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE0VDA2OjM4OjAxLjkzNjM2NDM4NloiLCJTZXEiOjQ3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0MjM5NDE5MzM1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGhpbmtpbmcgcHJvY2VzczpcblxuKipFeGFtaW5pbmcgdGhlIFNUTU1BQyBEcml2ZXIncyBTdXNwZW5kL1Jlc3VtZSBMb2dpYyoqXG5cbk9rYXksIHNvIEkgc2VlIHRoYXQgYHN0bW1hY19zdXNwZW5kYCBhbmQgYHN0bW1hY19yZXN1bWVgIGFyZSBleHBsaWNpdGx5IGV4cG9ydGVkLiBUaGF0J3MgZ29vZCwgc3VnZ2VzdHMgdGhleSdyZSBkZXNpZ25lZCBmb3IgZXh0ZXJuYWwgaW50ZXJhY3Rpb24sIHByb2JhYmx5IGZvciBwb3dlciBtYW5hZ2VtZW50LCB3aGljaCBpcyB3aGF0IEknZCBleHBlY3QuIEhvd2V2ZXIsIGBzdG1tYWNfb3BlbmAgYW5kIGBzdG1tYWNfcmVsZWFzZWAgYXJlIGRlZmluZWQgd2l0aGluIGBzdG1tYWNfbWFpbi5jYCwgYW5kIHRoYXQgcmFpc2VzIGEgZmxhZy4gV2FpdCwgaG9sZCBvbiBhIHNlY29uZC4gSSBuZWVkIHRvIGJlICpzdXJlKiBhYm91dCB0aGVpciBzY29wZS4gTGV0IG1lIHF1aWNrbHkgZG91YmxlLWNoZWNrIGlmIHRob3NlIGZ1bmN0aW9ucyBhcmUgYWN0dWFsbHkgZGVjbGFyZWQgYXMgYHN0YXRpY2Agd2l0aGluIHRoYXQgZmlsZSwgYmVjYXVzZSB0aGF0IHdvdWxkIGNvbmZpcm0gdGhleSdyZSBvbmx5IGludGVuZGVkIGZvciBpbnRlcm5hbCB1c2Ugd2l0aGluIHRoZSBkcml2ZXIncyBjb3JlIG1vZHVsZS4gR290dGEgbWFrZSBzdXJlIHRob3NlIG9wZW4vcmVsZWFzZSBmdW5jdGlvbnMgYXJlbid0IGluYWR2ZXJ0ZW50bHkgYmVpbmcgZXhwb3NlZCwgdGhhdCdzIGltcG9ydGFudCBmb3IgdGhlIG92ZXJhbGwgYXJjaGl0ZWN0dXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjo0MTQyOCwiT3V0cHV0VG9rZW5zIjoxOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjU5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE0VDA2OjM4OjA2LjE3NTc4NjA3WiIsIlNlcSI6NDgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNjI2MjAwMzE5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInN0bW1hY19vcGVuXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19tYWluLmM9NDEwMD1zdG1tYWNfc2V0dXBfZG1hX2Rlc2Moc3RydWN0IHN0bW1hY19wcml2ICpwcml2LCB1bnNpZ25lZCBpbnQgbXR1KVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX21haW4uYy00MTY1LS8qKlxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19tYWluLmM6NDE2NjogKiAgX19zdG1tYWNfb3BlbiAtIG9wZW4gZW50cnkgcG9pbnQgb2YgdGhlIGRyaXZlclxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19tYWluLmMtNDE2Ny0gKiAgQGRldiA6IHBvaW50ZXIgdG8gdGhlIGRldmljZSBzdHJ1Y3R1cmUuXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfbWFpbi5jLTQxNzQtICovXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX21haW4uYzo0MTc1OnN0YXRpYyBpbnQgX19zdG1tYWNfb3BlbihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19tYWluLmMtNDE3Ni1cXHRcXHRcXHQgc3RydWN0IHN0bW1hY19kbWFfY29uZiAqZG1hX2NvbmYpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfbWFpbi5jLTQyMzItXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX21haW4uYzo0MjMzOnN0YXRpYyBpbnQgc3RtbWFjX29wZW4oc3RydWN0IG5ldF9kZXZpY2UgKmRldilcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfbWFpbi5jLTQyMzQte1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX21haW4uYy00MjYwLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19tYWluLmM6NDI2MTpcXHRyZXQgPSBfX3N0bW1hY19vcGVuKGRldiwgZG1hX2NvbmYpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19tYWluLmMtNDI2Mi1cXHRpZiAocmV0KVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX21haW4uYz02MTU1PXN0YXRpYyBpbnQgc3RtbWFjX2NoYW5nZV9tdHUoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgaW50IG5ld19tdHUpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfbWFpbi5jLTYxOTAtXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX21haW4uYzo2MTkxOlxcdFxcdHJldCA9IF9fc3RtbWFjX29wZW4oZGV2LCBkbWFfY29uZik7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX21haW4uYy02MTkyLVxcdFxcdGlmIChyZXQpIHtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19tYWluLmM9NzM0Nz1zdGF0aWMgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2Vfb3BzIHN0bW1hY19uZXRkZXZfb3BzID0ge1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19tYWluLmM6NzM0ODpcXHQubmRvX29wZW4gPSBzdG1tYWNfb3BlbixcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfbWFpbi5jLTczNDktXFx0Lm5kb19zdGFydF94bWl0ID0gc3RtbWFjX3htaXQsXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfbWFpbi5jPTc2MzQ9aW50IHN0bW1hY19yZWluaXRfcXVldWVzKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHU4IHJ4X2NudCwgdTggdHhfY250KVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX21haW4uYy03NjUzLVxcdGlmIChuZXRpZl9ydW5uaW5nKGRldikpXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX21haW4uYzo3NjU0OlxcdFxcdHJldCA9IHN0bW1hY19vcGVuKGRldik7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX21haW4uYy03NjU1LVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX21haW4uYz03NjU5PWludCBzdG1tYWNfcmVpbml0X3JpbmdwYXJhbShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB1MzIgcnhfc2l6ZSwgdTMyIHR4X3NpemUpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfbWFpbi5jLTc2NzAtXFx0aWYgKG5ldGlmX3J1bm5pbmcoZGV2KSlcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfbWFpbi5jOjc2NzE6XFx0XFx0cmV0ID0gc3RtbWFjX29wZW4oZGV2KTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfbWFpbi5jLTc2NzItXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE0VDA2OjM4OjA3LjgwMTk5MTczOVoiLCJTZXEiOjQ5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo3ODMzMDk0MjI2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBTVE1NQUMgRHJpdmVyIEVudHJ5cG9pbnRzIGZvciBGdXp6aW5nKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgaG93IGJlc3QgdG8gdGFyZ2V0IHRoZSBTVE1NQUMgZHJpdmVyIHdpdGggZnV6emluZywgc3BlY2lmaWNhbGx5IHRoaW5raW5nIGFib3V0IHdoYXQgZW50cnlwb2ludHMgYXJlIG1vc3QgYWNjZXNzaWJsZSB0byB0b29scyBsaWtlIHN5emthbGxlci4gTXkgaW5pdGlhbCB0aG91Z2h0IHdhcyB0aGF0IGBzdG1tYWNfb3BlbmAgYW5kIGBzdG1tYWNfcmVsZWFzZWAgYXJlIHN0YXRpYywgd2hpY2ggZ2VuZXJhbGx5IG1lYW5zIHRoZXkgd29uJ3QgYmUgZXhwb3J0ZWQgYXMgc3ltYm9scyBhbmQgdGhlcmVmb3JlIHdvbid0IGJlIGVhc2lseSBmdXp6YWJsZS4gSG93ZXZlciwgSSBuZWVkIHRvIHJlbWVtYmVyIHRoYXQgc3l6a2FsbGVyICpjYW4qIGZvY3VzIG9uIHN0YXRpYyBmdW5jdGlvbnMgaWYgdGhleSdyZSBub3QgaW5saW5lZC4gQnV0LCByZWFsaXN0aWNhbGx5LCBpdCdzIGFsd2F5cyBwcmVmZXJhYmxlIHRvIGxldmVyYWdlIG5vbi1zdGF0aWMgQVBJIGVudHJ5cG9pbnRzIGZvciBmdXp6aW5nLlxuXG5MZXQncyBzZWUsIHRoZSBub24tc3RhdGljIGNhbmRpZGF0ZXMgc2VlbSB0byBiZTogYHN0bW1hY19zdXNwZW5kYCwgYHN0bW1hY19yZXN1bWVgLCBgc3RtbWFjX3hkcF9vcGVuYCwgYHN0bW1hY194ZHBfcmVsZWFzZWAsIGBzdG1tYWNfY2hhbmdlX210dWAsIGBzdG1tYWNfcmVpbml0X3F1ZXVlc2AsIGFuZCBgc3RtbWFjX3JlaW5pdF9yaW5ncGFyYW1gLiBJJ20gZ29pbmcgdG8gaGF2ZSB0byBtYWtlIGEgbm90ZSB0aGF0IGBzdG1tYWNfY2hhbmdlX210dWAgaXMgc3RhdGljLlxuXG5XYWl0IGEgc2Vjb25kLi4uSSBqdXN0IHJlbWVtYmVyZWQgdGhhdCBgc3RtbWFjX3JlaW5pdF9xdWV1ZXNgIGFuZCBgc3RtbWFjX3JlaW5pdF9yaW5ncGFyYW1gIHNlZW0gdG8gY2FsbCBgc3RtbWFjX29wZW5gLiBJZiB0aGF0J3MgdGhlIGNhc2UsIHRoZW4gdGhhdCBjb3VsZCBiZSBhIHNpZ25pZmljYW50IGVudHJ5IHBvaW50LiBMZXQgbWUgcXVpY2tseSBkb3VibGUtY2hlY2sgdGhhdCB0aG9zZSBhcmUgYWN0dWFsbHkgZXhwb3J0ZWQgc3ltYm9scy5cblxuXG4iLCJJbnB1dFRva2VucyI6NDI4MzgsIk91dHB1dFRva2VucyI6MjQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMDgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTRUMDY6Mzg6MTUuNjM1MDg5MDM1WiIsIlNlcSI6NTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMTA4ODkzNzM5LCJFcnJvciI6Im5vIG1hdGNoZXMiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJFWFBPUlRfU1lNQk9MLipzdG1tYWNfcmVpbml0XCJcbn0iLCJSZXN1bHRzIjoie1xuICBcImVycm9yXCI6IFwibm8gbWF0Y2hlc1wiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xNFQwNjozODoxNy43NDM5OTAzMTRaIiwiU2VxIjo1MSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzU1MDA1ODYyNywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMuIEhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBhcyBpZiB0aGV5J3JlIG15IG93bjpcblxuKipFeGFtaW5pbmcgdGhlIGBzdG1tYWNfcmVpbml0X3F1ZXVlc2AgRnVuY3Rpb24qKlxuXG5SaWdodCwgbGV0J3MgemVybyBpbiBvbiBgc3RtbWFjX3JlaW5pdF9xdWV1ZXNgLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpdHMgcm9sZS4gSSdtIGd1ZXNzaW5nIGl0J3MgYSBjcml0aWNhbCBmdW5jdGlvbiBmb3IgcmVzZXR0aW5nIG9yIHJlLWVzdGFibGlzaGluZyB0aGUgdHJhbnNtaXQgYW5kIHJlY2VpdmUgcXVldWVzIHdpdGhpbiB0aGUgU1RNTUFDIGRyaXZlci4gS25vd2luZyB0aGlzLCBpdCBpcyBsaWtlbHkgaW52b2x2ZWQgaW4gcmVjb3ZlcmluZyBmcm9tIGVycm9yIGNvbmRpdGlvbnMgb3IgcmUtY29uZmlndXJpbmcgdGhlIE1BQy4gVGhlIHB1cnBvc2Ugb2YgdGhpcyBzZWVtcyBjcml0aWNhbCBmb3IgbWFpbnRhaW5pbmcgbmV0d29yayBmdW5jdGlvbmFsaXR5IGFuZCBwb3RlbnRpYWxseSBmb3IgdGFza3MgbGlrZSBsaW5rIHJlLW5lZ290aWF0aW9uLCBwb3dlciBtYW5hZ2VtZW50LCBvciBldmVuIGhhbmRsaW5nIGRldmljZSByZXNldHMuIEkgbmVlZCB0byByZWZyZXNoIG15IHVuZGVyc3RhbmRpbmcgb2YgaG93IHRoZSBxdWV1ZXMgYXJlIHN0cnVjdHVyZWQgYW5kIG1hbmFnZWQgd2l0aGluIHRoaXMgc3BlY2lmaWMgU1RNTUFDIGltcGxlbWVudGF0aW9uLiBXaGF0IGFyZSBpdHMgZGVwZW5kZW5jaWVzPyBXaGF0IGNhbGxzIGl0PyBBbmQgaW1wb3J0YW50bHksIHdoYXQgYXJlIHRoZSBwb3RlbnRpYWwgZmFpbHVyZSBtb2Rlcz8gSSBuZWVkIHRvIHRoaW5rIHRoaXMgdGhyb3VnaCBjYXJlZnVsbHksIGFzIGFueSBidWcgaGVyZSBjb3VsZCByZXN1bHQgaW4gc2VyaW91cyBuZXR3b3JraW5nIGRpc3J1cHRpb24uIFRpbWUgdG8gc2VlIHdoYXQgSSBjYW4gZmluZC5cblxuXG4iLCJJbnB1dFRva2VucyI6NDM0MDQsIk91dHB1dFRva2VucyI6MjMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xNFQwNjozODoyMS4yOTQwNTE2ODFaIiwiU2VxIjo1MiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE2NDkxMjA0NzYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwic3RtbWFjX3JlaW5pdF9xdWV1ZXNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjLmg9NDE0PWludCBzdG1tYWNfZHZyX3Byb2JlKHN0cnVjdCBkZXZpY2UgKmRldmljZSxcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hYy5oLTQxNi1cXHRcXHQgICAgIHN0cnVjdCBzdG1tYWNfcmVzb3VyY2VzICpyZXMpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hYy5oOjQxNzppbnQgc3RtbWFjX3JlaW5pdF9xdWV1ZXMoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdTggcnhfY250LCB1OCB0eF9jbnQpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hYy5oLTQxOC1pbnQgc3RtbWFjX3JlaW5pdF9yaW5ncGFyYW0oc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdTMyIHJ4X3NpemUsIHUzMiB0eF9zaXplKTtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19ldGh0b29sLmM9OTkyPXN0YXRpYyBpbnQgc3RtbWFjX3NldF9jaGFubmVscyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX2V0aHRvb2wuYy0xMDAxLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19ldGh0b29sLmM6MTAwMjpcXHRyZXR1cm4gc3RtbWFjX3JlaW5pdF9xdWV1ZXMoZGV2LCBjaGFuLVxcdTAwM2VyeF9jb3VudCwgY2hhbi1cXHUwMDNldHhfY291bnQpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19ldGh0b29sLmMtMTAwMy19XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfbWFpbi5jPTc2MTM9c3RhdGljIHZvaWQgc3RtbWFjX25hcGlfZGVsKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfbWFpbi5jLTc2MzMtXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX21haW4uYzo3NjM0OmludCBzdG1tYWNfcmVpbml0X3F1ZXVlcyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB1OCByeF9jbnQsIHU4IHR4X2NudClcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfbWFpbi5jLTc2MzUte1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xNFQwNjozODoyMi45NDMxNzgwODdaIiwiU2VxIjo1MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDU5Mzg2MjA0NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgU3ltYm9sIFZpc2liaWxpdHkgaW4gdGhlIFNUTU1BQyBEcml2ZXIqKlxuXG5Pa2F5LCBzbyBJJ20gdHJ5aW5nIHRvIGZpZ3VyZSBvdXQgd2hpY2ggc3ltYm9scyBpbiB0aGlzIFNUTU1BQyBkcml2ZXIgYXJlIHZpc2libGUgZXh0ZXJuYWxseSBhbmQsIG1vcmUgaW1wb3J0YW50bHksICp3aHkqLiBJJ3ZlIGdvdCBhIGJpdCBvZiBhIG1lbnRhbCBtYXAgZm9ybWluZy4gVGhlIGluaXRpYWwgY2x1ZSBpcyB0aGF0IHNvbWUgYXJlICpub3QqIGV4cG9ydGVkLCBidXQgdGhleSdyZSBhbHNvICpub3QqIHN0YXRpYywgd2hpY2ggZ2l2ZXMgbWUgcGF1c2UuIE1ha2VzIG1lIHRoaW5rIG9mIHRoZW0gYXMgcG90ZW50aWFsIGNhbmRpZGF0ZXMgZm9yIGludGVybmFsIGNhbGxzIGFjcm9zcyBkcml2ZXIgbGF5ZXJzLlxuXG5Ob3csIGxldCdzIHNlZSwgd2hhdCBhYm91dCBgc3RtbWFjX3hkcF9vcGVuYCBhbmQgYHN0bW1hY194ZHBfcmVsZWFzZWA/IFRob3NlIGFyZSB0aGUgbm9uLXN0YXRpYyBvbmVzIEkgbmVlZCB0byBjb25zaWRlciBtb3JlIGRlZXBseS4gT24gdGhlIG90aGVyIGhhbmQsIGBzdG1tYWNfc3VzcGVuZGAgYW5kIGBzdG1tYWNfcmVzdW1lYCAqYXJlKiBleHBvcnRlZCwgd2hpY2ggaXMgd2hhdCBJIHdvdWxkIGV4cGVjdCBmb3IgYSBwb3dlciBtYW5hZ2VtZW50IGZ1bmN0aW9uLiBBbmQgdGhlbiB0aGVyZSBhcmUgYHN0bW1hY19kdnJfcHJvYmVgIGFuZCBgc3RtbWFjX2R2cl9yZW1vdmVgLCBhbHNvIGV4cG9ydGVkLCB3aGljaCBoYW5kbGUgZGV2aWNlIGluaXRpYWxpemF0aW9uIGFuZCByZW1vdmFsLCByZXNwZWN0aXZlbHkuXG5cbkhvbGQgb24gYSBzZWNvbmQsIHRoYXQncyBpdCEgV2hhdCBoYXBwZW5zIHdoZW4gdGhlIGRyaXZlciBpcyAqcmVtb3ZlZCo/IERvZXMgYHN0bW1hY19kdnJfcmVtb3ZlYCBsZWFkIHRvIHRoZSBjbGVhbnVwIGZ1bmN0aW9uLCBgc3RtbWFjX3JlbGVhc2VgPyBJIHNlZW0gdG8gcmVtZW1iZXIgdGhhdCBgc3RtbWFjX3JlbGVhc2VgIGlzIGEgZnVuY3Rpb24gY2FsbGVkIHZpYSBgbmRvX3N0b3BgIHdoaWNoIHNob3VsZCBiZSBjYWxsZWQgYnkgdGhlIG5ldGRldiB1bnJlZ2lzdHJhdGlvbi4gT2theSwgSSB0aGluayBJJ3ZlIGdvdCBpdC4gSXQncyB0aGUgdW5yZWdpc3RyYXRpb24gdGhhdCBpcyB0aGUgaW1wb3J0YW50IGFjdGlvbiBoZXJlLlxuXG5TbywgaW4gdGVybXMgb2YgYW5hbHl6aW5nIHRoZSBkcml2ZXIncyBsaWZlY3ljbGUsIGBzdG1tYWNfZHZyX3JlbW92ZWAgaXMgYSBnb29kIHN5bWJvbCB0byBmb2N1cyBvbi4gSXQgdW5yZWdpc3RlcnMgdGhlIG5ldGRldiwgd2hpY2ggY2FsbHMgYG5kb19zdG9wYCwgd2hpY2ggaW4gdHVybiBsZWFkcyB0byB0aGUgcmVsZWFzZSBhbmQgY2xlYW51cC4gSSdtIGdvaW5nIHRvIGRpZyBpbnRvIHRoZSBpbXBsZW1lbnRhdGlvbiBvZiBgc3RtbWFjX2R2cl9yZW1vdmVgIG5vdy4gVGhhdCdzIHRoZSBrZXkgdG8gdW5kZXJzdGFuZGluZyB0aGlzLlxuXG5cbiIsIklucHV0VG9rZW5zIjo0NDE5MiwiT3V0cHV0VG9rZW5zIjoyMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE4NCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xNFQwNjozODoyNy41MzcwNDM0NzVaIiwiU2VxIjo1NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE2NTA2MTY5NTcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwic3RtbWFjX2R2cl9yZW1vdmVcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtZHdjLXFvcy1ldGguYz0zNDM9c3RhdGljIHZvaWQgZHdjX2V0aF9kd21hY19yZW1vdmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldilcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLWR3Yy1xb3MtZXRoLmMtMzQ2LVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLWR3Yy1xb3MtZXRoLmM6MzQ3OlxcdHN0bW1hY19kdnJfcmVtb3ZlKFxcdTAwMjZwZGV2LVxcdTAwM2VkZXYpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLWR3Yy1xb3MtZXRoLmMtMzQ4LVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtaW50ZWwuYz0xMzYxPXN0YXRpYyB2b2lkIGludGVsX2V0aF9wY2lfcmVtb3ZlKHN0cnVjdCBwY2lfZGV2ICpwZGV2KVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtaW50ZWwuYy0xMzY1LVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLWludGVsLmM6MTM2NjpcXHRzdG1tYWNfZHZyX3JlbW92ZShcXHUwMDI2cGRldi1cXHUwMDNlZGV2KTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1pbnRlbC5jLTEzNjctXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1sb29uZ3Nvbi5jPTU3OD1zdGF0aWMgdm9pZCBsb29uZ3Nvbl9kd21hY19yZW1vdmUoc3RydWN0IHBjaV9kZXYgKnBkZXYpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1sb29uZ3Nvbi5jLTU4NC1cXHRsZCA9IHByaXYtXFx1MDAzZXBsYXQtXFx1MDAzZWJzcF9wcml2O1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLWxvb25nc29uLmM6NTg1OlxcdHN0bW1hY19kdnJfcmVtb3ZlKFxcdTAwMjZwZGV2LVxcdTAwM2VkZXYpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLWxvb25nc29uLmMtNTg2LVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtbW90b3Jjb21tLmM9MzYyPXN0YXRpYyB2b2lkIG1vdG9yY29tbV9yZW1vdmUoc3RydWN0IHBjaV9kZXYgKnBkZXYpXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtbW90b3Jjb21tLmMtMzYzLXtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1tb3RvcmNvbW0uYzozNjQ6XFx0c3RtbWFjX2R2cl9yZW1vdmUoXFx1MDAyNnBkZXYtXFx1MDAzZWRldik7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtbW90b3Jjb21tLmMtMzY1LX1cXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLXN0bTMyLmM9NTk1PXN0YXRpYyB2b2lkIHN0bTMyX2R3bWFjX3JlbW92ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtc3RtMzIuYy02MDAtXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtc3RtMzIuYzo2MDE6XFx0c3RtbWFjX2R2cl9yZW1vdmUoXFx1MDAyNnBkZXYtXFx1MDAzZWRldik7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtc3RtMzIuYy02MDItXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWMuaD00MTI9aW50IHN0bW1hY19zdXNwZW5kKHN0cnVjdCBkZXZpY2UgKmRldik7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjLmg6NDEzOnZvaWQgc3RtbWFjX2R2cl9yZW1vdmUoc3RydWN0IGRldmljZSAqZGV2KTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWMuaC00MTQtaW50IHN0bW1hY19kdnJfcHJvYmUoc3RydWN0IGRldmljZSAqZGV2aWNlLFxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX21haW4uYz04MTYyPUVYUE9SVF9TWU1CT0xfR1BMKHN0bW1hY19kdnJfcHJvYmUpO1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX21haW4uYy04MTY0LS8qKlxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19tYWluLmM6ODE2NTogKiBzdG1tYWNfZHZyX3JlbW92ZVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19tYWluLmMtODE2Ni0gKiBAZGV2OiBkZXZpY2UgcG9pbnRlclxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX21haW4uYy04MTY5LSAqL1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19tYWluLmM6ODE3MDp2b2lkIHN0bW1hY19kdnJfcmVtb3ZlKHN0cnVjdCBkZXZpY2UgKmRldilcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfbWFpbi5jLTgxNzEte1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX21haW4uYy04MjAzLX1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfbWFpbi5jOjgyMDQ6RVhQT1JUX1NZTUJPTF9HUEwoc3RtbWFjX2R2cl9yZW1vdmUpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19tYWluLmMtODIwNS1cXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19wY2kuYz0xOTI9c3RhdGljIHZvaWQgc3RtbWFjX3BjaV9yZW1vdmUoc3RydWN0IHBjaV9kZXYgKnBkZXYpXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX3BjaS5jLTE5My17XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX3BjaS5jOjE5NDpcXHRzdG1tYWNfZHZyX3JlbW92ZShcXHUwMDI2cGRldi1cXHUwMDNlZGV2KTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfcGNpLmMtMTk1LX1cXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19wbGF0Zm9ybS5jPTg5Nz12b2lkIHN0bW1hY19wbHRmcl9yZW1vdmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldilcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfcGxhdGZvcm0uYy04OTgte1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19wbGF0Zm9ybS5jOjg5OTpcXHRzdG1tYWNfZHZyX3JlbW92ZShcXHUwMDI2cGRldi1cXHUwMDNlZGV2KTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfcGxhdGZvcm0uYy05MDAtfVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xNFQwNjozODoyOS4xODc2NjU3MDFaIiwiU2VxIjo1NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTIyODA0MTE0NjksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQW5hbHlzaXMgb2YgdGhlIFNUTU1BQyBEcml2ZXIgQ2hhbmdlcyoqXG5cbk9rYXksIHNvIEkndmUgYmVlbiBsb29raW5nIGF0IHRoaXMgcGF0Y2ggYW5kIHRyeWluZyB0byBmaWd1cmUgb3V0IHRoZSBiZXN0IGFwcHJvYWNoIGZvciBmdXp6aW5nIHRoZSBjaGFuZ2VzIGl0IGludHJvZHVjZXMgdG8gdGhlIFNUTU1BQyBkcml2ZXIuIE15IGluaXRpYWwgdGhvdWdodCB3YXMgdGhhdCBgc3RtbWFjX2R2cl9yZW1vdmVgIHdvdWxkIGJlIGEgZ29vZCBzeW1ib2wgdG8gZm9jdXMgb24sIGFuZCB3aGlsZSBpdCBzdGlsbCBpcywgSSB0aGluayBJJ3ZlIGlkZW50aWZpZWQgc29tZSBldmVuIGJldHRlciB0YXJnZXRzLlxuXG5MZXQncyBsaXN0IHRoZW0gYWxsIG91dCwgc3RhcnRpbmcgd2l0aCB0aGUgb3JpZ2luYWwgc3VnZ2VzdGlvbjpcblxuKiAgIGBzdG1tYWNfZHZyX3Byb2JlYFxuKiAgIGBzdG1tYWNfZHZyX3JlbW92ZWBcbiogICBgc3RtbWFjX3N1c3BlbmRgXG4qICAgYHN0bW1hY19yZXN1bWVgXG4qICAgYHN0bW1hY194ZHBfb3BlbmBcbiogICBgc3RtbWFjX3hkcF9yZWxlYXNlYFxuKiAgIGBzdG1tYWNfcmVpbml0X3F1ZXVlc2BcbiogICBgc3RtbWFjX3JlaW5pdF9yaW5ncGFyYW1gXG5cbkkgaW5pdGlhbGx5IHRob3VnaHQgYHN0bW1hY19kdnJfcHJvYmVgIHdhcyB0aGUga2V5LiBCdXQsIG5vLiBJIHdhcyBtaXN0YWtlbiBhYm91dCBpdHMgcm9sZSBpbiBjYWxsaW5nIGBzdG1tYWNfaHdfc2V0dXBgLiBNeSB1bmRlcnN0YW5kaW5nIGlzIHRoYXQgYHN0bW1hY19kdnJfcHJvYmVgIHJlZ2lzdGVycyB0aGUgbmV0IGRldmljZSwgd2hlcmVhcyBgc3RtbWFjX29wZW5gIGNhbGxzIGBzdG1tYWNfaHdfc2V0dXBgLiBgc3RtbWFjX29wZW5gIGlzIHN0YXRpYywgc28gc3l6a2FsbGVyIHNob3VsZCBiZSBhYmxlIHRvIHJlYWNoIGl0IHZpYSBgbmRvX29wZW5gLiBJJ20gYWxzbyBjb25zaWRlcmluZyBgc3RtbWFjX3JlaW5pdF9xdWV1ZXNgIGFuZCBgc3RtbWFjX3JlaW5pdF9yaW5ncGFyYW1gLCBzaW5jZSB0aGV5IGNhbGwgYHN0bW1hY19vcGVuYCBhcyB3ZWxsLlxuXG5Ib3dldmVyLCB0aGUgbW9yZSBJIHRoaW5rIGFib3V0IGl0LCB0aGUgbW9yZSBJJ20gbGVhbmluZyB0b3dhcmRzIGBzdG1tYWNfeGRwX29wZW5gIGFzIGEgcHJpbWUgdGFyZ2V0LiBJdCBjYWxscyBgc3RtbWFjX3N0YXJ0X2FsbF9kbWFgIGFuZCBgc3RtbWFjX21hY19zZXRgLiBUaGF0IGxvb2tzIGxpa2UgYSBwcmV0dHkganVpY3kgZW50cnkgcG9pbnQuXG5cbk5vdywgYSBxdWljayBjaGVjayBvbiBgc3RtbWFjX2RhdGFwYXRoX3RlYXJkb3duYCBhbmQgaXRzIHJlYWNoYWJpbGl0eSB2aWEgYHN0bW1hY19zdXNwZW5kYDogWWVzLCBgc3RtbWFjX3N1c3BlbmRgICpkb2VzKiBjYWxsIGBzdG1tYWNfZGF0YXBhdGhfdGVhcmRvd24ocHJpdilgIGlmIGBwcml2LVx1MDAzZXdvbG9wdHNgIGlzIGZhbHNlLiBBbmQgb2YgY291cnNlLCBgc3RtbWFjX3Jlc3VtZWAgY2FsbHMgYHN0bW1hY19od19zZXR1cChuZGV2KWAuIFNvLCBgc3RtbWFjX3N1c3BlbmRgIGFuZCBgc3RtbWFjX3Jlc3VtZWAgYXJlIGRlZmluaXRlbHkgd29ydGggaW5jbHVkaW5nIG9uIHRoZSBsaXN0LlxuXG5IZXJlJ3MgbXkgZGlzdGlsbGVkIHN1bW1hcnk6XG5cbiogICAqKldvcnRoRnV6emluZzoqKiBUcnVlXG4qICAgKipSZWFzb25pbmc6KiogVGhpcyBwYXRjaCBtYWtlcyBzaWduaWZpY2FudCBjaGFuZ2VzIHRvIHRoZSBTVE1NQUMgZHJpdmVyLCBzcGVjaWZpY2FsbHkgcmVnYXJkaW5nIHRoZSBvcmRlciBvZiBvcGVyYXRpb25zIGR1cmluZyBkYXRhcGF0aCB0ZWFyZG93biBhbmQgc2V0dXAgZm9yIGFsbCBTVE1NQUMgZGV2aWNlcywgbW9kaWZ5aW5nIHRoZSBETUEgc3RvcC9NQUMgZGlzYWJsZSBhbmQgTUFDIGVuYWJsZS9ETUEgc3RhcnQgc2VxdWVuY2VzLiBUaGVzZSBmdW5jdGlvbmFsIGNoYW5nZXMgaW4gY29yZSBsb2dpYyBhcmUgcmVhY2hhYmxlIHRocm91Z2ggUENJIGVtdWxhdGlvbi5cbiogICAqKkZvY3VzU3ltYm9sczoqKlxuICAgICogICBgc3RtbWFjX2R2cl9yZW1vdmVgXG4gICAgKiAgIGBzdG1tYWNfc3VzcGVuZGBcbiAgICAqICAgYHN0bW1hY19yZXN1bWVgXG4gICAgKiAgIGBzdG1tYWNfeGRwX29wZW5gXG4gICAgKiAgIGBzdG1tYWNfeGRwX3JlbGVhc2VgXG4gICAgKiAgIGBzdG1tYWNfcmVpbml0X3F1ZXVlc2BcbiAgICAqICAgYHN0bW1hY19yZWluaXRfcmluZ3BhcmFtYFxuKiAgICoqRW5hYmxlQ29uZmlnczoqKlxuICAgICogICBgU1RNTUFDX0VUSGBcbiAgICAqICAgYFNUTU1BQ19QQ0lgXG5cbkkndmUgbWFkZSBzdXJlIHRvIGNoZWNrIHRoZSBkZXBlbmRlbmNpZXMuIGBTVE1NQUNfRVRIYCBkZXBlbmRzIG9uIGBIQVNfSU9NRU1gIGFuZCBgSEFTX0RNQWAg4oCTIHN0YW5kYXJkIHN0dWZmLiBgU1RNTUFDX1BDSWAgZGVwZW5kcyBvbiBgUENJYCBhbmQgYENPTU1PTl9DTEtgLiBJIGRvbid0IHRoaW5rIHdlIG5lZWQgYW55dGhpbmcgc3BlY2lhbCBmb3IgWERQIGJleW9uZCBgQlBGX1NZU0NBTExgLCB3aGljaCBpcyBhbHNvIGZhaXJseSBzdGFuZGFyZC4gVGhlcmVmb3JlLCBgU1RNTUFDX0VUSGAgYW5kIGBTVE1NQUNfUENJYCBzaG91bGQgYmUgc3VmZmljaWVudCBmb3IgcmVwcm9kdWNpbmcgdGhpcyBpc3N1ZS5cblxuT25lIGZpbmFsIHBvaW50IOKAkyB0aGUgcGF0Y2ggYWxzbyB0b3VjaGVzIGBkd3hnbWFjMl9kbWEuY2AuIEkgbmVlZCB0byBjb25maXJtIHdoZXRoZXIgYGR3eGdtYWMyX2RtYS5jYCwgd2hpY2ggaW1wbGVtZW50cyBgZHd4Z21hYzIxMF9kbWFfb3BzYCwgZ2V0cyBjb21waWxlZCB3aGVuIGBTVE1NQUNfRVRIYCBpcyBlbmFibGVkLiBJdCBpcyBpbXBvcnRhbnQgdG8gY29uZmlybSB0aGF0IHRoZSBjaGFuZ2VzIGluIHRoYXQgZmlsZSBhcmUgY292ZXJlZCBieSB0aGUgY3VycmVudCBjb25maWd1cmF0aW9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjo0NjM0MiwiT3V0cHV0VG9rZW5zIjoyMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjc3MywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xNFQwNjozODo0MS40NjgwODA0OVoiLCJTZXEiOjU2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjIwNjMxNTY2OCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJkd3hnbWFjMl9kbWEub1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9NYWtlZmlsZT0zPXN0bW1hYy1vYmpzOj0gc3RtbWFjX21haW4ubyBzdG1tYWNfZXRodG9vbC5vIHN0bW1hY19tZGlvLm8gcmluZ19tb2RlLm9cXHRcXFxcXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9NYWtlZmlsZS03LVxcdCAgICAgIGR3bWFjNF9kbWEubyBkd21hYzRfbGliLm8gZHdtYWM0X2NvcmUubyBkd21hYzUubyBod2lmLm8gXFxcXFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL01ha2VmaWxlOjg6XFx0ICAgICAgc3RtbWFjX3RjLm8gZHd4Z21hYzJfY29yZS5vIGR3eGdtYWMyX2RtYS5vIGR3eGdtYWMyX2Rlc2NzLm8gXFxcXFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL01ha2VmaWxlLTktXFx0ICAgICAgc3RtbWFjX3hkcC5vIHN0bW1hY19lc3QubyBzdG1tYWNfZnBlLm8gc3RtbWFjX3ZsYW4ubyBcXFxcXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE0VDA2OjM4OjQzLjY3NDQwMTIwOFoiLCJTZXEiOjU3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1ODA2NDc3MDYwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFzc2Vzc21lbnQgb2YgdGhlIGBzdG1tYWNgIENoYW5nZXMqKlxuXG5Pa2F5LCBzbyBJJ3ZlIGNvbmZpcm1lZCB0aGF0IHRoZXNlIGNoYW5nZXMgYXJlIGluZGVlZCB3aXRoaW4gdGhlIGBzdG1tYWMtb2Jqc2Agc2NvcGUsIGFzIGV4cGVjdGVkLiBMZXQncyBkZWx2ZSBpbnRvIHRoZSBjb3JlIG9mIHRoZXNlIG1vZGlmaWNhdGlvbnMuIEknbSBmb2N1c2luZyBvbiB0aGUga2V5IHN5bWJvbHMgYWZmZWN0ZWQ6IGBzdG1tYWNfZHZyX3JlbW92ZWAsIGBzdG1tYWNfc3VzcGVuZGAsIGBzdG1tYWNfcmVzdW1lYCwgYHN0bW1hY194ZHBfb3BlbmAsIGBzdG1tYWNfeGRwX3JlbGVhc2VgLCBgc3RtbWFjX3JlaW5pdF9xdWV1ZXNgLCBhbmQgYHN0bW1hY19yZWluaXRfcmluZ3BhcmFtYC5cblxuTG9va2luZyBhdCB0aGlzIGxpc3QsIHRoZSBpbXBhY3QgaXMgaW1tZWRpYXRlbHkgYXBwYXJlbnQuIFRoZXNlIHN5bWJvbHMgZW5jYXBzdWxhdGUgdGhlIGNyaXRpY2FsIGFyZWFzIHdoZXJlIHRoZSBkcml2ZXIncyBvcGVyYXRpb25hbCBmbG93IGhhcyBiZWVuIGFsdGVyZWQuIFNwZWNpZmljYWxseSwgdGhpcyBwYXRjaCBjaGFuZ2VzIHRoZSBzZXF1ZW5jaW5nIG9mIE1BQyBlbmFibGUvZGlzYWJsZSBhY3Rpb25zIHJlbGF0aXZlIHRvIHRoZSBETUEgc3RhcnQvc3RvcCBvcGVyYXRpb25zLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBhbHRlcmF0aW9uOyBpdCdzIGNoYW5naW5nICpob3cqIHRoZSBjb3JlIGRyaXZlciBoYW5kbGVzIHRoZSBmdW5kYW1lbnRhbCBoYXJkd2FyZSBpbnRlcmFjdGlvbnMgYWNyb3NzIGFsbCBzdG1tYWMgZGV2aWNlcy4gSXQncyBub3QganVzdCBhIHJlZmFjdG9yaW5nIG9yIG9wdGltaXphdGlvbiwgaXQncyBhIGZ1bmRhbWVudGFsIHNoaWZ0IGluIHRoZSBkcml2ZXIncyBjb250cm9sIGxvZ2ljLlxuXG5BbHJpZ2h0LCB3aXRoIHRoaXMgdW5kZXJzdGFuZGluZyBjb25maXJtZWQsIEknbSBjb21mb3J0YWJsZSBjYWxsaW5nIGBzZXQtcmVzdWx0c2AuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQ4MzA1LCJPdXRwdXRUb2tlbnMiOjE3OCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE1NywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xNFQwNjozODo0OS40ODA4ODExODhaIiwiU2VxIjo1OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3NjAwNDUwMiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiU1RNTUFDX0VUSFwiLFxuICAgIFwiU1RNTUFDX1BDSVwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInN0bW1hY19kdnJfcmVtb3ZlXCIsXG4gICAgXCJzdG1tYWNfc3VzcGVuZFwiLFxuICAgIFwic3RtbWFjX3Jlc3VtZVwiLFxuICAgIFwic3RtbWFjX3hkcF9vcGVuXCIsXG4gICAgXCJzdG1tYWNfeGRwX3JlbGVhc2VcIixcbiAgICBcInN0bW1hY19yZWluaXRfcXVldWVzXCIsXG4gICAgXCJzdG1tYWNfcmVpbml0X3JpbmdwYXJhbVwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGludHJvZHVjZXMgYSBuZXcgb3JkZXJlZCBkYXRhcGF0aCB0ZWFyZG93biBzZXF1ZW5jZSBmb3IgYWxsIHN0bW1hYyBkZXZpY2VzLCBjaGFuZ2luZyB0aGUgb3JkZXIgb2YgRE1BIHN0b3AgYW5kIE1BQyBkaXNhYmxlIG9wZXJhdGlvbnMuIEl0IGFsc28gc3dhcHMgdGhlIG9yZGVyIG9mIE1BQyBlbmFibGUgYW5kIERNQSBzdGFydCBpbiB0aGUgc2V0dXAgcGF0aHMuIFRoZXNlIGFyZSBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGNvcmUgZHJpdmVyIGxvZ2ljIHJlYWNoYWJsZSB2aWEgUENJIGVtdWxhdGlvbi5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJTVE1NQUNfRVRIXCIsXG4gICAgXCJTVE1NQUNfUENJXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwic3RtbWFjX2R2cl9yZW1vdmVcIixcbiAgICBcInN0bW1hY19zdXNwZW5kXCIsXG4gICAgXCJzdG1tYWNfcmVzdW1lXCIsXG4gICAgXCJzdG1tYWNfeGRwX29wZW5cIixcbiAgICBcInN0bW1hY194ZHBfcmVsZWFzZVwiLFxuICAgIFwic3RtbWFjX3JlaW5pdF9xdWV1ZXNcIixcbiAgICBcInN0bW1hY19yZWluaXRfcmluZ3BhcmFtXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIG5ldyBvcmRlcmVkIGRhdGFwYXRoIHRlYXJkb3duIHNlcXVlbmNlIGZvciBhbGwgc3RtbWFjIGRldmljZXMsIGNoYW5naW5nIHRoZSBvcmRlciBvZiBETUEgc3RvcCBhbmQgTUFDIGRpc2FibGUgb3BlcmF0aW9ucy4gSXQgYWxzbyBzd2FwcyB0aGUgb3JkZXIgb2YgTUFDIGVuYWJsZSBhbmQgRE1BIHN0YXJ0IGluIHRoZSBzZXR1cCBwYXRocy4gVGhlc2UgYXJlIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUgY29yZSBkcml2ZXIgbG9naWMgcmVhY2hhYmxlIHZpYSBQQ0kgZW11bGF0aW9uLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xNFQwNjozODo0OS41NTY4OTI1MloiLCJTZXEiOjU5LCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6IklmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODQ0MjMxNjI5MiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE0VDA2OjM4OjQ5LjU1NzQzOTQyWiIsIlNlcSI6NjAsIk5lc3RpbmciOjIsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImJlc3QtZXhwZW5zaXZlIiwiRHVyYXRpb24iOjg0NDE3NjY1NzMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBoYXJkd2FyZSBpbml0aWFsaXphdGlvbiBhbmQgdGVhcmRvd24gc2VxdWVuY2VzIGluIHRoZSBzdG1tYWMgZHJpdmVyLCBpbnRyb2R1Y2luZyBhbiBvcmRlcmVkIGRhdGFwYXRoIHRlYXJkb3duIHRvIHByb3Blcmx5IHN0b3AgRE1BIGFuZCBNQUMgb3BlcmF0aW9ucy4gSXQgYWRkcyBmdW5jdGlvbnMgdG8gcG9sbCBoYXJkd2FyZSByZWdpc3RlcnMgZm9yIHNwZWNpZmljIHN0YXRlcyAoZS5nLiwgRE1BIHN0b3BwZWQsIE1UTCBxdWV1ZXMgZHJhaW5lZCkgdXNpbmcgYHJlYWRsX3BvbGxfdGltZW91dGAuIFRoZXNlIGNoYW5nZXMgYXJlIHB1cmVseSByZWxhdGVkIHRvIGhhcmR3YXJlIGNvbnRyb2wgZmxvdyBhbmQgZG8gbm90IGludHJvZHVjZSBhbnkgbmV3IGRhdGEgc3RydWN0dXJlcywgYnVmZmVyIGFsbG9jYXRpb25zLCBvciBkYXRhIGNvcGllcyB0byB1c2VyIHNwYWNlLiBUaGVyZSBpcyBubyByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGJlaW5nIGV4cG9zZWQgb3IgdXNlZCBpbiBjb250cm9sIGZsb3cuIFN0YW5kYXJkIEtBU0FOIGFuZCBvdGhlciBidWcgZGV0ZWN0b3JzIGFyZSBzdWZmaWNpZW50IHRvIGNhdGNoIGFueSBwb3RlbnRpYWwgbWVtb3J5IGNvcnJ1cHRpb24gb3IgdXNlLWFmdGVyLWZyZWUgYnVncyB0aGF0IG1pZ2h0IGFyaXNlIGZyb20gZHJpdmVyIHRlYXJkb3duIGlzc3Vlcy5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnlcbmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kXG5kZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpXG5mdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy5cblxuQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46XG4tIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGVcbiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOXG4gIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVBcbiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy5cbi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsXG4gIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy5cblxuUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTixcbkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuXG5BIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZXG5zZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrc1xudGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi5cblxuTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3RcbnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLFxuYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzXG50aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZ1xudW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sXG5mbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsXG5jYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy5cblxuU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOlxuMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2JcbiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzXG4gICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLlxuMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlc1xuICAgb3Igc3RydWN0IGZpZWxkcy5cbjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHNcbiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuXG40LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2Vzc1xuICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjpcbi0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXJcbiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0XG4gIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS5cbi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWRcbiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLlxuLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuXG5cblVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGVcbmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCBhMDhmZjM0Y2IyY2QyZDI5YzFlMjYxNWRkMTQ0ODBjY2IyZDg3MGZiXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIEZyaSBBdWcgMTQgMDY6MzU6MzIgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd3hnbWFjMi5oIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHd4Z21hYzIuaFxuaW5kZXggZjhhYjM0N2Y3YjViOS4uNTBmOWNjZDRhOWM0NiAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3eGdtYWMyLmhcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3eGdtYWMyLmhcbkBAIC0yOTEsNiArMjkxLDEwIEBAXG4gI2RlZmluZSBYR01BQ19UVENcdFx0XHRHRU5NQVNLKDYsIDQpXG4gI2RlZmluZSBYR01BQ19UWFFFTlx0XHRcdEdFTk1BU0soMywgMilcbiAjZGVmaW5lIFhHTUFDX1RTRlx0XHRcdEJJVCgxKVxuKyNkZWZpbmUgWEdNQUNfTVRMX1RYUV9ERUJVRyh4KVx0XHQoMHgwMDAwMTEwOCArICgweDgwICogKHgpKSlcbisjZGVmaW5lIFhHTUFDX1RYUVNUU1x0XHRcdEJJVCg0KVxuKyNkZWZpbmUgWEdNQUNfVFJDU1RTXHRcdFx0R0VOTUFTSygyLCAxKVxuKyNkZWZpbmUgWEdNQUNfVFJDU1RTX1JFQURcdFx0MHgxXG4gI2RlZmluZSBYR01BQ19NVExfVEN4X0VUU19DT05UUk9MKHgpXHQoMHgwMDAwMTExMCArICgweDgwICogKHgpKSlcbiAjZGVmaW5lIFhHTUFDX01UTF9UQ3hfUVVBTlRVTV9XRUlHSFQoeClcdCgweDAwMDAxMTE4ICsgKDB4ODAgKiAoeCkpKVxuICNkZWZpbmUgWEdNQUNfTVRMX1RDeF9TRU5EU0xPUEUoeClcdCgweDAwMDAxMTFjICsgKDB4ODAgKiAoeCkpKVxuQEAgLTMwNiw2ICszMTAsOSBAQFxuICNkZWZpbmUgWEdNQUNfRUhGQ1x0XHRcdEJJVCg3KVxuICNkZWZpbmUgWEdNQUNfUlNGXHRcdFx0QklUKDUpXG4gI2RlZmluZSBYR01BQ19SVENcdFx0XHRHRU5NQVNLKDEsIDApXG4rI2RlZmluZSBYR01BQ19NVExfUlhRX0RFQlVHKHgpXHRcdCgweDAwMDAxMTQ4ICsgKDB4ODAgKiAoeCkpKVxuKyNkZWZpbmUgWEdNQUNfUFJYUVx0XHRcdEdFTk1BU0soMjksIDE2KVxuKyNkZWZpbmUgWEdNQUNfUlhRU1RTXHRcdFx0R0VOTUFTSyg1LCA0KVxuICNkZWZpbmUgWEdNQUNfTVRMX1JYUV9GTE9XX0NPTlRST0woeClcdCgweDAwMDAxMTUwICsgKDB4ODAgKiAoeCkpKVxuICNkZWZpbmUgWEdNQUNfUkZEXHRcdFx0R0VOTUFTSygzMSwgMTcpXG4gI2RlZmluZSBYR01BQ19SRkFcdFx0XHRHRU5NQVNLKDE1LCAxKVxuQEAgLTM5MSw2ICszOTgsNyBAQFxuICNkZWZpbmUgWEdNQUNfTklTXHRcdFx0QklUKDE1KVxuICNkZWZpbmUgWEdNQUNfQUlTXHRcdFx0QklUKDE0KVxuICNkZWZpbmUgWEdNQUNfRkJFXHRcdFx0QklUKDEyKVxuKyNkZWZpbmUgWEdNQUNfUlBTXHRcdFx0QklUKDgpXG4gI2RlZmluZSBYR01BQ19SQlVcdFx0XHRCSVQoNylcbiAjZGVmaW5lIFhHTUFDX1JJXHRcdFx0QklUKDYpXG4gI2RlZmluZSBYR01BQ19UQlVcdFx0XHRCSVQoMilcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd3hnbWFjMl9kbWEuYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3eGdtYWMyX2RtYS5jXG5pbmRleCBmZjgzODU4ZWJjMWYzLi5iYTRmNTM1ZmI5ZWI0IDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHd4Z21hYzJfZG1hLmNcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3eGdtYWMyX2RtYS5jXG5AQCAtNCw2ICs0LDcgQEBcbiAgKiBzdG1tYWMgWEdNQUMgc3VwcG9ydC5cbiAgKi9cbiBcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9iaXRmaWVsZC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvaW9wb2xsLmhcdTAwM2VcbiAjaW5jbHVkZSBcInN0bW1hYy5oXCJcbiAjaW5jbHVkZSBcImR3eGdtYWMyLmhcIlxuQEAgLTI2MSwxMyArMjYyLDEyIEBAIHN0YXRpYyB2b2lkIGR3eGdtYWMyX2RtYV9zdGFydF90eChzdHJ1Y3Qgc3RtbWFjX3ByaXYgKnByaXYsXG4ge1xuIFx0dTMyIHZhbHVlO1xuIFxuK1x0LyogVFBTIGlzIGxhdGNoZWQgb25jZSBzZXQsIHNvIGNsZWFyIGl0IG9uIGV2ZXJ5IFR4IERNQSBzdGFydC4gKi9cbitcdHdyaXRlbChYR01BQ19UUFMsIGlvYWRkciArIFhHTUFDX0RNQV9DSF9TVEFUVVMoY2hhbikpO1xuK1xuIFx0dmFsdWUgPSByZWFkbChpb2FkZHIgKyBYR01BQ19ETUFfQ0hfVFhfQ09OVFJPTChjaGFuKSk7XG4gXHR2YWx1ZSB8PSBYR01BQ19UWFNUO1xuIFx0d3JpdGVsKHZhbHVlLCBpb2FkZHIgKyBYR01BQ19ETUFfQ0hfVFhfQ09OVFJPTChjaGFuKSk7XG4tXG4tXHR2YWx1ZSA9IHJlYWRsKGlvYWRkciArIFhHTUFDX1RYX0NPTkZJRyk7XG4tXHR2YWx1ZSB8PSBYR01BQ19DT05GSUdfVEU7XG4tXHR3cml0ZWwodmFsdWUsIGlvYWRkciArIFhHTUFDX1RYX0NPTkZJRyk7XG4gfVxuIFxuIHN0YXRpYyB2b2lkIGR3eGdtYWMyX2RtYV9zdG9wX3R4KHN0cnVjdCBzdG1tYWNfcHJpdiAqcHJpdiwgdm9pZCBfX2lvbWVtICppb2FkZHIsXG5AQCAtMjc4LDEwICsyNzgsNiBAQCBzdGF0aWMgdm9pZCBkd3hnbWFjMl9kbWFfc3RvcF90eChzdHJ1Y3Qgc3RtbWFjX3ByaXYgKnByaXYsIHZvaWQgX19pb21lbSAqaW9hZGRyLFxuIFx0dmFsdWUgPSByZWFkbChpb2FkZHIgKyBYR01BQ19ETUFfQ0hfVFhfQ09OVFJPTChjaGFuKSk7XG4gXHR2YWx1ZSBcdTAwMjY9IH5YR01BQ19UWFNUO1xuIFx0d3JpdGVsKHZhbHVlLCBpb2FkZHIgKyBYR01BQ19ETUFfQ0hfVFhfQ09OVFJPTChjaGFuKSk7XG4tXG4tXHR2YWx1ZSA9IHJlYWRsKGlvYWRkciArIFhHTUFDX1RYX0NPTkZJRyk7XG4tXHR2YWx1ZSBcdTAwMjY9IH5YR01BQ19DT05GSUdfVEU7XG4tXHR3cml0ZWwodmFsdWUsIGlvYWRkciArIFhHTUFDX1RYX0NPTkZJRyk7XG4gfVxuIFxuIHN0YXRpYyB2b2lkIGR3eGdtYWMyX2RtYV9zdGFydF9yeChzdHJ1Y3Qgc3RtbWFjX3ByaXYgKnByaXYsXG5AQCAtMjg5LDEzICsyODUsMTIgQEAgc3RhdGljIHZvaWQgZHd4Z21hYzJfZG1hX3N0YXJ0X3J4KHN0cnVjdCBzdG1tYWNfcHJpdiAqcHJpdixcbiB7XG4gXHR1MzIgdmFsdWU7XG4gXG4rXHQvKiBSUFMgaXMgbGF0Y2hlZCBvbmNlIHNldCwgc28gY2xlYXIgaXQgb24gZXZlcnkgUnggRE1BIHN0YXJ0LiAqL1xuK1x0d3JpdGVsKFhHTUFDX1JQUywgaW9hZGRyICsgWEdNQUNfRE1BX0NIX1NUQVRVUyhjaGFuKSk7XG4rXG4gXHR2YWx1ZSA9IHJlYWRsKGlvYWRkciArIFhHTUFDX0RNQV9DSF9SWF9DT05UUk9MKGNoYW4pKTtcbiBcdHZhbHVlIHw9IFhHTUFDX1JYU1Q7XG4gXHR3cml0ZWwodmFsdWUsIGlvYWRkciArIFhHTUFDX0RNQV9DSF9SWF9DT05UUk9MKGNoYW4pKTtcbi1cbi1cdHZhbHVlID0gcmVhZGwoaW9hZGRyICsgWEdNQUNfUlhfQ09ORklHKTtcbi1cdHZhbHVlIHw9IFhHTUFDX0NPTkZJR19SRTtcbi1cdHdyaXRlbCh2YWx1ZSwgaW9hZGRyICsgWEdNQUNfUlhfQ09ORklHKTtcbiB9XG4gXG4gc3RhdGljIHZvaWQgZHd4Z21hYzJfZG1hX3N0b3Bfcngoc3RydWN0IHN0bW1hY19wcml2ICpwcml2LCB2b2lkIF9faW9tZW0gKmlvYWRkcixcbkBAIC01OTIsNiArNTg3LDc3IEBAIHN0YXRpYyBpbnQgZHd4Z21hYzJfZW5hYmxlX3RicyhzdHJ1Y3Qgc3RtbWFjX3ByaXYgKnByaXYsIHZvaWQgX19pb21lbSAqaW9hZGRyLFxuIFx0cmV0dXJuIDA7XG4gfVxuIFxuK3N0YXRpYyBpbnQgZHd4Z21hYzJfdHhfZG1hX3N0b3BwZWQoc3RydWN0IHN0bW1hY19wcml2ICpwcml2LFxuK1x0XHRcdFx0ICAgdm9pZCBfX2lvbWVtICppb2FkZHIsIHUzMiBjaGFuKVxuK3tcbitcdHUzMiB2YWx1ZTtcbitcdGludCByZXQ7XG4rXG4rXHRyZXQgPSByZWFkbF9wb2xsX3RpbWVvdXQoaW9hZGRyICsgWEdNQUNfRE1BX0NIX1NUQVRVUyhjaGFuKSwgdmFsdWUsXG4rXHRcdFx0XHQgdmFsdWUgXHUwMDI2IFhHTUFDX1RQUywgMTAwLCAxMDAwMCk7XG4rXHRpZiAocmV0KVxuK1x0XHRuZXRkZXZfd2Fybihwcml2LVx1MDAzZWRldiwgXCJUeCBETUEgY2hhbm5lbCAldSBzdG9wIHRpbWVvdXRcXG5cIixcbitcdFx0XHQgICAgY2hhbik7XG4rXG4rXHRyZXR1cm4gcmV0O1xuK31cbitcbitzdGF0aWMgaW50IGR3eGdtYWMyX3R4X210bF9kcmFpbihzdHJ1Y3Qgc3RtbWFjX3ByaXYgKnByaXYsXG4rXHRcdFx0XHQgdm9pZCBfX2lvbWVtICppb2FkZHIsIHUzMiBxdWV1ZSlcbit7XG4rXHR1MzIgdmFsdWU7XG4rXHRpbnQgcmV0O1xuK1xuK1x0LyogV2FpdCB1bnRpbCB0aGUgcXVldWUgaXMgZW1wdHkgYW5kIGl0cyByZWFkIGNvbnRyb2xsZXIgaXMgbm8gbG9uZ2VyXG4rXHQgKiBwdWxsaW5nIGEgZnJhbWUgb3V0IHRvd2FyZHMgdGhlIE1BQy5cbitcdCAqL1xuK1x0cmV0ID0gcmVhZGxfcG9sbF90aW1lb3V0KGlvYWRkciArIFhHTUFDX01UTF9UWFFfREVCVUcocXVldWUpLCB2YWx1ZSxcbitcdFx0XHRcdCAhKHZhbHVlIFx1MDAyNiBYR01BQ19UWFFTVFMpIFx1MDAyNlx1MDAyNlxuK1x0XHRcdFx0IEZJRUxEX0dFVChYR01BQ19UUkNTVFMsIHZhbHVlKSAhPVxuK1x0XHRcdFx0IFhHTUFDX1RSQ1NUU19SRUFELFxuK1x0XHRcdFx0IDEwMCwgMTAwMDApO1xuK1x0aWYgKHJldClcbitcdFx0bmV0ZGV2X3dhcm4ocHJpdi1cdTAwM2VkZXYsIFwiTVRMIFR4IHF1ZXVlICV1IGRyYWluIHRpbWVvdXRcXG5cIixcbitcdFx0XHQgICAgcXVldWUpO1xuK1xuK1x0cmV0dXJuIHJldDtcbit9XG4rXG4rc3RhdGljIGludCBkd3hnbWFjMl9yeF9tdGxfZHJhaW4oc3RydWN0IHN0bW1hY19wcml2ICpwcml2LFxuK1x0XHRcdFx0IHZvaWQgX19pb21lbSAqaW9hZGRyLCB1MzIgcXVldWUpXG4re1xuK1x0dTMyIHZhbHVlO1xuK1x0aW50IHJldDtcbitcbitcdC8qIFdhaXQgdW50aWwgbm8gcGFja2V0IGlzIGxlZnQgaW4gdGhlIHF1ZXVlIGFuZCB0aGUgcXVldWUgcmVwb3J0c1xuK1x0ICogaXRzZWxmIGVtcHR5LlxuK1x0ICovXG4rXHRyZXQgPSByZWFkbF9wb2xsX3RpbWVvdXQoaW9hZGRyICsgWEdNQUNfTVRMX1JYUV9ERUJVRyhxdWV1ZSksIHZhbHVlLFxuK1x0XHRcdFx0ICFGSUVMRF9HRVQoWEdNQUNfUFJYUSwgdmFsdWUpIFx1MDAyNlx1MDAyNlxuK1x0XHRcdFx0ICFGSUVMRF9HRVQoWEdNQUNfUlhRU1RTLCB2YWx1ZSksXG4rXHRcdFx0XHQgMTAwLCAxMDAwMCk7XG4rXHRpZiAocmV0KVxuK1x0XHRuZXRkZXZfd2Fybihwcml2LVx1MDAzZWRldiwgXCJNVEwgUnggcXVldWUgJXUgZHJhaW4gdGltZW91dFxcblwiLFxuK1x0XHRcdCAgICBxdWV1ZSk7XG4rXG4rXHRyZXR1cm4gcmV0O1xuK31cbitcbitzdGF0aWMgaW50IGR3eGdtYWMyX3J4X2RtYV9zdG9wcGVkKHN0cnVjdCBzdG1tYWNfcHJpdiAqcHJpdixcbitcdFx0XHRcdCAgIHZvaWQgX19pb21lbSAqaW9hZGRyLCB1MzIgY2hhbilcbit7XG4rXHR1MzIgdmFsdWU7XG4rXHRpbnQgcmV0O1xuK1xuK1x0cmV0ID0gcmVhZGxfcG9sbF90aW1lb3V0KGlvYWRkciArIFhHTUFDX0RNQV9DSF9TVEFUVVMoY2hhbiksIHZhbHVlLFxuK1x0XHRcdFx0IHZhbHVlIFx1MDAyNiBYR01BQ19SUFMsIDEwMCwgMTAwMDApO1xuK1x0aWYgKHJldClcbitcdFx0bmV0ZGV2X3dhcm4ocHJpdi1cdTAwM2VkZXYsIFwiUnggRE1BIGNoYW5uZWwgJXUgc3RvcCB0aW1lb3V0XFxuXCIsXG4rXHRcdFx0ICAgIGNoYW4pO1xuK1xuK1x0cmV0dXJuIHJldDtcbit9XG4rXG4gY29uc3Qgc3RydWN0IHN0bW1hY19kbWFfb3BzIGR3eGdtYWMyMTBfZG1hX29wcyA9IHtcbiBcdC5yZXNldCA9IGR3eGdtYWMyX2RtYV9yZXNldCxcbiBcdC5pbml0ID0gZHd4Z21hYzJfZG1hX2luaXQsXG5AQCAtNjIwLDQgKzY4Niw4IEBAIGNvbnN0IHN0cnVjdCBzdG1tYWNfZG1hX29wcyBkd3hnbWFjMjEwX2RtYV9vcHMgPSB7XG4gXHQuc2V0X2Jmc2l6ZSA9IGR3eGdtYWMyX3NldF9iZnNpemUsXG4gXHQuZW5hYmxlX3NwaCA9IGR3eGdtYWMyX2VuYWJsZV9zcGgsXG4gXHQuZW5hYmxlX3RicyA9IGR3eGdtYWMyX2VuYWJsZV90YnMsXG4rXHQudHhfZG1hX3N0b3BwZWQgPSBkd3hnbWFjMl90eF9kbWFfc3RvcHBlZCxcbitcdC50eF9tdGxfZHJhaW4gPSBkd3hnbWFjMl90eF9tdGxfZHJhaW4sXG4rXHQucnhfbXRsX2RyYWluID0gZHd4Z21hYzJfcnhfbXRsX2RyYWluLFxuK1x0LnJ4X2RtYV9zdG9wcGVkID0gZHd4Z21hYzJfcnhfZG1hX3N0b3BwZWQsXG4gfTtcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9od2lmLmggYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9od2lmLmhcbmluZGV4IDA0ZGFmZWMwMjFiNGYuLjg2ZjRhYTg4OTYxYzcgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9od2lmLmhcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2h3aWYuaFxuQEAgLTIzMSw2ICsyMzEsMTUgQEAgc3RydWN0IHN0bW1hY19kbWFfb3BzIHtcbiBcdFx0XHQgICBib29sIGVuLCB1MzIgY2hhbik7XG4gXHRpbnQgKCplbmFibGVfdGJzKShzdHJ1Y3Qgc3RtbWFjX3ByaXYgKnByaXYsIHZvaWQgX19pb21lbSAqaW9hZGRyLFxuIFx0XHRcdCAgYm9vbCBlbiwgdTMyIGNoYW4pO1xuK1x0LyogT3JkZXJlZCBkYXRhcGF0aCB0ZWFyZG93biAqL1xuK1x0aW50ICgqdHhfZG1hX3N0b3BwZWQpKHN0cnVjdCBzdG1tYWNfcHJpdiAqcHJpdiwgdm9pZCBfX2lvbWVtICppb2FkZHIsXG4rXHRcdFx0ICAgICAgdTMyIGNoYW4pO1xuK1x0aW50ICgqdHhfbXRsX2RyYWluKShzdHJ1Y3Qgc3RtbWFjX3ByaXYgKnByaXYsIHZvaWQgX19pb21lbSAqaW9hZGRyLFxuK1x0XHRcdCAgICB1MzIgcXVldWUpO1xuK1x0aW50ICgqcnhfbXRsX2RyYWluKShzdHJ1Y3Qgc3RtbWFjX3ByaXYgKnByaXYsIHZvaWQgX19pb21lbSAqaW9hZGRyLFxuK1x0XHRcdCAgICB1MzIgcXVldWUpO1xuK1x0aW50ICgqcnhfZG1hX3N0b3BwZWQpKHN0cnVjdCBzdG1tYWNfcHJpdiAqcHJpdiwgdm9pZCBfX2lvbWVtICppb2FkZHIsXG4rXHRcdFx0ICAgICAgdTMyIGNoYW4pO1xuIH07XG4gXG4gI2RlZmluZSBzdG1tYWNfZG1hX2luaXQoX19wcml2LCBfX2FyZ3MuLi4pIFxcXG5AQCAtMjkzLDYgKzMwMiwxNCBAQCBzdHJ1Y3Qgc3RtbWFjX2RtYV9vcHMge1xuIFx0c3RtbWFjX2RvX3ZvaWRfY2FsbGJhY2soX19wcml2LCBkbWEsIGVuYWJsZV9zcGgsIF9fcHJpdiwgX19hcmdzKVxuICNkZWZpbmUgc3RtbWFjX2VuYWJsZV90YnMoX19wcml2LCBfX2FyZ3MuLi4pIFxcXG4gXHRzdG1tYWNfZG9fY2FsbGJhY2soX19wcml2LCBkbWEsIGVuYWJsZV90YnMsIF9fcHJpdiwgX19hcmdzKVxuKyNkZWZpbmUgc3RtbWFjX3R4X2RtYV9zdG9wcGVkKF9fcHJpdiwgX19hcmdzLi4uKSBcXFxuK1x0c3RtbWFjX2RvX2NhbGxiYWNrKF9fcHJpdiwgZG1hLCB0eF9kbWFfc3RvcHBlZCwgX19wcml2LCBfX2FyZ3MpXG4rI2RlZmluZSBzdG1tYWNfdHhfbXRsX2RyYWluKF9fcHJpdiwgX19hcmdzLi4uKSBcXFxuK1x0c3RtbWFjX2RvX2NhbGxiYWNrKF9fcHJpdiwgZG1hLCB0eF9tdGxfZHJhaW4sIF9fcHJpdiwgX19hcmdzKVxuKyNkZWZpbmUgc3RtbWFjX3J4X210bF9kcmFpbihfX3ByaXYsIF9fYXJncy4uLikgXFxcbitcdHN0bW1hY19kb19jYWxsYmFjayhfX3ByaXYsIGRtYSwgcnhfbXRsX2RyYWluLCBfX3ByaXYsIF9fYXJncylcbisjZGVmaW5lIHN0bW1hY19yeF9kbWFfc3RvcHBlZChfX3ByaXYsIF9fYXJncy4uLikgXFxcbitcdHN0bW1hY19kb19jYWxsYmFjayhfX3ByaXYsIGRtYSwgcnhfZG1hX3N0b3BwZWQsIF9fcHJpdiwgX19hcmdzKVxuIFxuIHN0cnVjdCBtYWNfZGV2aWNlX2luZm87XG4gc3RydWN0IG5ldF9kZXZpY2U7XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX21haW4uYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19tYWluLmNcbmluZGV4IGIyYjdkMDI0MmRkM2MuLjljM2E4ZjEyMmI5NGYgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfbWFpbi5jXG4rKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfbWFpbi5jXG5AQCAtMjU2MCw2ICsyNTYwLDUyIEBAIHN0YXRpYyB2b2lkIHN0bW1hY19zdG9wX2FsbF9kbWEoc3RydWN0IHN0bW1hY19wcml2ICpwcml2KVxuIFx0XHRzdG1tYWNfZGVpbml0X2NoYW4ocHJpdiwgcHJpdi1cdTAwM2Vpb2FkZHIsIGNoYW4pO1xuIH1cbiBcbisvKipcbisgKiBzdG1tYWNfZGF0YXBhdGhfdGVhcmRvd24gLSBvcmRlcmVkIGRhdGFwYXRoIHRlYXJkb3duIGFzIHBlciBJUCBzcGVjaWZpY2F0aW9uXG4rICogQHByaXY6IGRyaXZlciBwcml2YXRlIHN0cnVjdHVyZVxuKyAqIERlc2NyaXB0aW9uOlxuKyAqIFdoZW4gdGVhcmRvd24gb3BzIGFyZSBhdmFpbGFibGUsIGZvbGxvdyB0aGUgZGF0YWJvb2sgb3JkZXJlZCB0ZWFyZG93blxuKyAqIHNlcXVlbmNlLlxuKyAqIEZvbGxvd3MgdGhlIGxlZ2FjeSBzdG9wICsgTUFDIGRpc2FibGUgZm9yIHZhcmlhbnRzIHdpdGhvdXQgdGhlIGZlYXR1cmUuXG4rICovXG4rc3RhdGljIHZvaWQgc3RtbWFjX2RhdGFwYXRoX3RlYXJkb3duKHN0cnVjdCBzdG1tYWNfcHJpdiAqcHJpdilcbit7XG4rXHR1MzIgcnhfY2hhbm5lbHNfY291bnQgPSBwcml2LVx1MDAzZXBsYXQtXHUwMDNlcnhfcXVldWVzX3RvX3VzZTtcbitcdHUzMiB0eF9jaGFubmVsc19jb3VudCA9IHByaXYtXHUwMDNlcGxhdC1cdTAwM2V0eF9xdWV1ZXNfdG9fdXNlO1xuK1x0dTMyIGNoYW47XG4rXG4rXHQvKiBTdG9wIGFsbCBUWCBETUEgY2hhbm5lbHMgKi9cbitcdGZvciAoY2hhbiA9IDA7IGNoYW4gXHUwMDNjIHR4X2NoYW5uZWxzX2NvdW50OyBjaGFuKyspXG4rXHRcdHN0bW1hY19zdG9wX3R4X2RtYShwcml2LCBjaGFuKTtcbitcbitcdC8qIFdhaXQgZm9yIGV2ZXJ5IFRYIERNQSBjaGFubmVsIHRvIHJlcG9ydCBpdHNlbGYgc3RvcHBlZCAqL1xuK1x0aWYgKHByaXYtXHUwMDNlaHctXHUwMDNlZG1hLVx1MDAzZXR4X2RtYV9zdG9wcGVkKVxuK1x0XHRmb3IgKGNoYW4gPSAwOyBjaGFuIFx1MDAzYyB0eF9jaGFubmVsc19jb3VudDsgY2hhbisrKVxuK1x0XHRcdHN0bW1hY190eF9kbWFfc3RvcHBlZChwcml2LCBwcml2LVx1MDAzZWlvYWRkciwgY2hhbik7XG4rXG4rXHQvKiBXYWl0IGZvciB0aGUgTVRMIFRYIHF1ZXVlcyB0byBmaW5pc2ggcHVzaGluZyBpbnRvIHRoZSBNQUMgKi9cbitcdGlmIChwcml2LVx1MDAzZWh3LVx1MDAzZWRtYS1cdTAwM2V0eF9tdGxfZHJhaW4pXG4rXHRcdGZvciAoY2hhbiA9IDA7IGNoYW4gXHUwMDNjIHR4X2NoYW5uZWxzX2NvdW50OyBjaGFuKyspXG4rXHRcdFx0c3RtbWFjX3R4X210bF9kcmFpbihwcml2LCBwcml2LVx1MDAzZWlvYWRkciwgY2hhbik7XG4rXG4rXHQvKiBEaXNhYmxlIHRoZSBNQUMgVFggYW5kIFJYICovXG4rXHRzdG1tYWNfbWFjX3NldChwcml2LCBwcml2LVx1MDAzZWlvYWRkciwgZmFsc2UpO1xuK1xuK1x0LyogV2FpdCBmb3IgdGhlIE1UTCBSWCBxdWV1ZXMgdG8gZHJhaW4gaW50byB0aGUgUlggRE1BICovXG4rXHRpZiAocHJpdi1cdTAwM2Vody1cdTAwM2VkbWEtXHUwMDNlcnhfbXRsX2RyYWluKVxuK1x0XHRmb3IgKGNoYW4gPSAwOyBjaGFuIFx1MDAzYyByeF9jaGFubmVsc19jb3VudDsgY2hhbisrKVxuK1x0XHRcdHN0bW1hY19yeF9tdGxfZHJhaW4ocHJpdiwgcHJpdi1cdTAwM2Vpb2FkZHIsIGNoYW4pO1xuK1xuK1x0LyogU3RvcCBhbGwgUlggRE1BIGNoYW5uZWxzICovXG4rXHRmb3IgKGNoYW4gPSAwOyBjaGFuIFx1MDAzYyByeF9jaGFubmVsc19jb3VudDsgY2hhbisrKVxuK1x0XHRzdG1tYWNfc3RvcF9yeF9kbWEocHJpdiwgY2hhbik7XG4rXG4rXHQvKiBXYWl0IGZvciBldmVyeSBSWCBETUEgY2hhbm5lbCB0byByZXBvcnQgaXRzZWxmIHN0b3BwZWQgKi9cbitcdGlmIChwcml2LVx1MDAzZWh3LVx1MDAzZWRtYS1cdTAwM2VyeF9kbWFfc3RvcHBlZClcbitcdFx0Zm9yIChjaGFuID0gMDsgY2hhbiBcdTAwM2MgcnhfY2hhbm5lbHNfY291bnQ7IGNoYW4rKylcbitcdFx0XHRzdG1tYWNfcnhfZG1hX3N0b3BwZWQocHJpdiwgcHJpdi1cdTAwM2Vpb2FkZHIsIGNoYW4pO1xuK31cbitcbiAvKipcbiAgKiAgc3RtbWFjX2RtYV9vcGVyYXRpb25fbW9kZSAtIEhXIERNQSBvcGVyYXRpb24gbW9kZVxuICAqICBAcHJpdjogZHJpdmVyIHByaXZhdGUgc3RydWN0dXJlXG5AQCAtMzY4NSw5ICszNzMxLDYgQEAgc3RhdGljIGludCBzdG1tYWNfaHdfc2V0dXAoc3RydWN0IG5ldF9kZXZpY2UgKmRldilcbiBcdFx0cHJpdi1cdTAwM2Vody1cdTAwM2VyeF9jc3VtID0gMDtcbiBcdH1cbiBcbi1cdC8qIEVuYWJsZSB0aGUgTUFDIFJ4L1R4ICovXG4tXHRzdG1tYWNfbWFjX3NldChwcml2LCBwcml2LVx1MDAzZWlvYWRkciwgdHJ1ZSk7XG4tXG4gXHQvKiBTZXQgdGhlIEhXIERNQSBtb2RlIGFuZCB0aGUgQ09FICovXG4gXHRzdG1tYWNfZG1hX29wZXJhdGlvbl9tb2RlKHByaXYpO1xuIFxuQEAgLTM3NDMsNiArMzc4Niw5IEBAIHN0YXRpYyBpbnQgc3RtbWFjX2h3X3NldHVwKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXG4gXHQvKiBTdGFydCB0aGUgYmFsbCByb2xsaW5nLi4uICovXG4gXHRzdG1tYWNfc3RhcnRfYWxsX2RtYShwcml2KTtcbiBcbitcdC8qIEVuYWJsZSB0aGUgTUFDIFJ4L1R4ICovXG4rXHRzdG1tYWNfbWFjX3NldChwcml2LCBwcml2LVx1MDAzZWlvYWRkciwgdHJ1ZSk7XG4rXG4gXHRwaHlsaW5rX3J4X2Nsa19zdG9wX2Jsb2NrKHByaXYtXHUwMDNlcGh5bGluayk7XG4gXHRzdG1tYWNfc2V0X2h3X3ZsYW5fbW9kZShwcml2LCBwcml2LVx1MDAzZWh3KTtcbiBcdHBoeWxpbmtfcnhfY2xrX3N0b3BfdW5ibG9jayhwcml2LVx1MDAzZXBoeWxpbmspO1xuQEAgLTQyNDAsOSArNDI4Niw2IEBAIHN0YXRpYyB2b2lkIF9fc3RtbWFjX3JlbGVhc2Uoc3RydWN0IG5ldF9kZXZpY2UgKmRldilcbiBcdHN0cnVjdCBzdG1tYWNfcHJpdiAqcHJpdiA9IG5ldGRldl9wcml2KGRldik7XG4gXHR1OCBjaGFuO1xuIFxuLVx0LyogU3RvcCBhbmQgZGlzY29ubmVjdCB0aGUgUEhZICovXG4tXHRwaHlsaW5rX3N0b3AocHJpdi1cdTAwM2VwaHlsaW5rKTtcbi1cbiBcdHN0bW1hY19kaXNhYmxlX2FsbF9xdWV1ZXMocHJpdik7XG4gXG4gXHRmb3IgKGNoYW4gPSAwOyBjaGFuIFx1MDAzYyBwcml2LVx1MDAzZXBsYXQtXHUwMDNldHhfcXVldWVzX3RvX3VzZTsgY2hhbisrKVxuQEAgLTQyNTMsOCArNDI5NiwxMSBAQCBzdGF0aWMgdm9pZCBfX3N0bW1hY19yZWxlYXNlKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXG4gXHQvKiBGcmVlIHRoZSBJUlEgbGluZXMgKi9cbiBcdHN0bW1hY19mcmVlX2lycShkZXYsIFJFUV9JUlFfRVJSX0FMTCwgMCk7XG4gXG4tXHQvKiBTdG9wIFRYL1JYIERNQSBhbmQgY2xlYXIgdGhlIGRlc2NyaXB0b3JzICovXG4tXHRzdG1tYWNfc3RvcF9hbGxfZG1hKHByaXYpO1xuK1x0LyogSGFzIHRvIHJ1biBiZWZvcmUgbWFjX2xpbmtfZG93bigpIGRpc2FibGVzIHRoZSBNQUMuICovXG4rXHRzdG1tYWNfZGF0YXBhdGhfdGVhcmRvd24ocHJpdik7XG4rXG4rXHQvKiBTdG9wIGFuZCBkaXNjb25uZWN0IHRoZSBQSFkgKi9cbitcdHBoeWxpbmtfc3RvcChwcml2LVx1MDAzZXBoeWxpbmspO1xuIFxuIFx0LyogUmVsZWFzZSBhbmQgZnJlZSB0aGUgUngvVHggcmVzb3VyY2VzICovXG4gXHRmcmVlX2RtYV9kZXNjX3Jlc291cmNlcyhwcml2LCBcdTAwMjZwcml2LVx1MDAzZWRtYV9jb25mKTtcbkBAIC03MTA0LDE1ICs3MTUwLDEyIEBAIHZvaWQgc3RtbWFjX3hkcF9yZWxlYXNlKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXG4gXHQvKiBGcmVlIHRoZSBJUlEgbGluZXMgKi9cbiBcdHN0bW1hY19mcmVlX2lycShkZXYsIFJFUV9JUlFfRVJSX0FMTCwgMCk7XG4gXG4tXHQvKiBTdG9wIFRYL1JYIERNQSBjaGFubmVscyAqL1xuLVx0c3RtbWFjX3N0b3BfYWxsX2RtYShwcml2KTtcbitcdC8qIFN0b3AgdGhlIE1BQyBhbmQgdGhlIFRYL1JYIERNQSBjaGFubmVscyAqL1xuK1x0c3RtbWFjX2RhdGFwYXRoX3RlYXJkb3duKHByaXYpO1xuIFxuIFx0LyogUmVsZWFzZSBhbmQgZnJlZSB0aGUgUngvVHggcmVzb3VyY2VzICovXG4gXHRmcmVlX2RtYV9kZXNjX3Jlc291cmNlcyhwcml2LCBcdTAwMjZwcml2LVx1MDAzZWRtYV9jb25mKTtcbiBcbi1cdC8qIERpc2FibGUgdGhlIE1BQyBSeC9UeCAqL1xuLVx0c3RtbWFjX21hY19zZXQocHJpdiwgcHJpdi1cdTAwM2Vpb2FkZHIsIGZhbHNlKTtcbi1cbiBcdC8qIHNldCB0cmFuc19zdGFydCBzbyB3ZSBkb24ndCBnZXQgc3B1cmlvdXNcbiBcdCAqIHdhdGNoZG9ncyBkdXJpbmcgcmVzZXRcbiBcdCAqL1xuQEAgLTcxODQsMTIgKzcyMjcsMTIgQEAgaW50IHN0bW1hY194ZHBfb3BlbihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxuIFx0XHRocnRpbWVyX3NldHVwKFx1MDAyNnR4X3EtXHUwMDNldHh0aW1lciwgc3RtbWFjX3R4X3RpbWVyLCBDTE9DS19NT05PVE9OSUMsIEhSVElNRVJfTU9ERV9SRUwpO1xuIFx0fVxuIFxuLVx0LyogRW5hYmxlIHRoZSBNQUMgUngvVHggKi9cbi1cdHN0bW1hY19tYWNfc2V0KHByaXYsIHByaXYtXHUwMDNlaW9hZGRyLCB0cnVlKTtcbi1cbiBcdC8qIFN0YXJ0IFJ4IFx1MDAyNiBUeCBETUEgQ2hhbm5lbHMgKi9cbiBcdHN0bW1hY19zdGFydF9hbGxfZG1hKHByaXYpO1xuIFxuK1x0LyogRW5hYmxlIHRoZSBNQUMgUngvVHggKi9cbitcdHN0bW1hY19tYWNfc2V0KHByaXYsIHByaXYtXHUwMDNlaW9hZGRyLCB0cnVlKTtcbitcbiBcdHJldCA9IHN0bW1hY19yZXF1ZXN0X2lycShkZXYpO1xuIFx0aWYgKHJldClcbiBcdFx0Z290byBpcnFfZXJyb3I7XG5AQCAtODE5MCwxNyArODIzMywxNSBAQCBpbnQgc3RtbWFjX3N1c3BlbmQoc3RydWN0IGRldmljZSAqZGV2KVxuIFx0XHR0aW1lcl9kZWxldGVfc3luYyhcdTAwMjZwcml2LVx1MDAzZWVlZV9jdHJsX3RpbWVyKTtcbiBcdH1cbiBcbi1cdC8qIFN0b3AgVFgvUlggRE1BICovXG4tXHRzdG1tYWNfc3RvcF9hbGxfZG1hKHByaXYpO1xuLVxuLVx0c3RtbWFjX2xlZ2FjeV9zZXJkZXNfcG93ZXJfZG93bihwcml2KTtcbi1cbiBcdC8qIEVuYWJsZSBQb3dlciBkb3duIG1vZGUgYnkgcHJvZ3JhbW1pbmcgdGhlIFBNVCByZWdzICovXG4gXHRpZiAocHJpdi1cdTAwM2V3b2xvcHRzKSB7XG4rXHRcdHN0bW1hY19zdG9wX2FsbF9kbWEocHJpdik7XG4rXHRcdHN0bW1hY19sZWdhY3lfc2VyZGVzX3Bvd2VyX2Rvd24ocHJpdik7XG4gXHRcdHN0bW1hY19wbXQocHJpdiwgcHJpdi1cdTAwM2VodywgcHJpdi1cdTAwM2V3b2xvcHRzKTtcbiBcdFx0cHJpdi1cdTAwM2VpcnFfd2FrZSA9IDE7XG4gXHR9IGVsc2Uge1xuLVx0XHRzdG1tYWNfbWFjX3NldChwcml2LCBwcml2LVx1MDAzZWlvYWRkciwgZmFsc2UpO1xuK1x0XHRzdG1tYWNfZGF0YXBhdGhfdGVhcmRvd24ocHJpdik7XG4rXHRcdHN0bW1hY19sZWdhY3lfc2VyZGVzX3Bvd2VyX2Rvd24ocHJpdik7XG4gXHRcdHBpbmN0cmxfcG1fc2VsZWN0X3NsZWVwX3N0YXRlKHByaXYtXHUwMDNlZGV2aWNlKTtcbiBcdH1cbiBcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE0VDA2OjM4OjQ5LjU1NzQ0MDU3WiIsIlNlcSI6NjEsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjg0NDE3NDk3MzMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQXNzZXNzbWVudCBvZiB0aGUgU1RNTUFDIERyaXZlciBQYXRjaCoqXG5cbkFscmlnaHQsIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gVGhpcyBwYXRjaCBpcyBmb2N1c2VkIHNvbGVseSBvbiB0aGUgaW50ZXJuYWwgd29ya2luZ3Mgb2YgdGhlIGBzdG1tYWNgIGRyaXZlciwgc3BlY2lmaWNhbGx5IHRoZSBgZHd4Z21hYzJgIHZhcmlhbnQuIEl0J3MgYWJvdXQgZW5zdXJpbmcgYSBwcm9wZXIsIG9yZGVyZWQgc2h1dGRvd24gc2VxdWVuY2UgZm9yIHRoZSBkYXRhcGF0aC4gSSBzZWUgdGhhdCB0aGV5J3ZlIGFkZGVkIHRoZXNlIG5ldyBwb2xsaW5nIGZ1bmN0aW9uczogYGR3eGdtYWMyX3R4X2RtYV9zdG9wcGVkYCwgYGR3eGdtYWMyX3R4X210bF9kcmFpbmAsIGBkd3hnbWFjMl9yeF9tdGxfZHJhaW5gLCBhbmQgYGR3eGdtYWMyX3J4X2RtYV9zdG9wcGVkYC4gVGhlc2Ugd2lsbCBwb2xsIGhhcmR3YXJlIHJlZ2lzdGVycyB0byBjaGVjayB0aGUgc3RhdGUgb2YgdGhlIHN5c3RlbS5cblxuVGhlIGNvcmUgb2YgdGhlIGNoYW5nZSBsaWVzIGluIHRoZSBgc3RtbWFjX2RhdGFwYXRoX3RlYXJkb3duYCBmdW5jdGlvbiwgd2hpY2ggb3JjaGVzdHJhdGVzIHRoZSBjb250cm9sbGVkIHNodXRkb3duOiBzdG9wcGluZyBUWCBETUEsIHdhaXRpbmcgZm9yIGNvbXBsZXRpb24sIGRyYWluaW5nIHRoZSBNVEwgVFgsIGRpc2FibGluZyBNQUMgVFgvUlgsIGRyYWluaW5nIHRoZSBNVEwgUlgsIHN0b3BwaW5nIFJYIERNQSwgYW5kIHdhaXRpbmcgYWdhaW4uIEl0IGlzIGFsc28gbW9kaWZ5aW5nIHRoZSBvcmRlciBvZiBlbmFibGluZyBhbmQgZGlzYWJsaW5nIE1BQyBhbmQgRE1BIGluIHNldmVyYWwga2V5IGZ1bmN0aW9ucy4gTm90aGluZyByZXZvbHV0aW9uYXJ5IGhlcmUsIGl0IHNlZW1zLlxuXG5HaXZlbiBteSB1bmRlcnN0YW5kaW5nIG9mIG5ldHdvcmtpbmcgc3RhY2tzLCBpdCdzIHByZXR0eSBjbGVhciB0aGlzIGlzIHB1cmVseSBhYm91dCBoYXJkd2FyZSBjb250cm9sIGZsb3csIHdoaWNoIGlzIHdoZXJlIHRoaW5ncyBnZXQgaW50ZXJlc3RpbmcuIE5vIG5ldyBkYXRhIHN0cnVjdHVyZXMgYXJlIGJlaW5nIGludHJvZHVjZWQgdGhhdCBhcmUgc2VudCB0byB1c2VyIHNwYWNlLCBubyBidWZmZXIgYWxsb2NhdGlvbnMsIG5vIG1lbW9yeS1yZWxhdGVkIGlzc3Vlcy4gVGhlIGZ1bmN0aW9ucyBzaW1wbHkgY2FsbCBgcmVhZGxfcG9sbF90aW1lb3V0YCwgd2l0aCBgdmFsdWVgIGluaXRpYWxpemVkIHByb3Blcmx5IHdpdGhpbi4gRnJvbSBteSBleHBlcnRpc2UsIHRoYXQgbWVhbnMgdGhlcmUgYXJlIG5vIGNvbmNlcm5zIGFib3V0IGluZm8tbGVha3MuXG5cbkkndmUgY2FyZWZ1bGx5IGNvbnNpZGVyZWQgdGhlIHBvdGVudGlhbCBmb3IgdW5pbml0aWFsaXplZCBtZW1vcnkgaXNzdWVzLCBhbmQgSSBhbSBjb25maWRlbnQgdGhhdCB0aGVyZSBhcmUgbm9uZSBiYXNlZCBvbiB0aGUgcGF0Y2ggZGVzY3JpcHRpb24gYW5kIG15IGFuYWx5c2lzLiBHaXZlbiB0aGlzLCBJIGNhbiBjb25maWRlbnRseSBzZXQgYE5lZWRzS01TQU49ZmFsc2VgLiBUaGlzIG9uZSdzIGNsZWFuLlxuXG5cbiIsIklucHV0VG9rZW5zIjo3MzgxLCJPdXRwdXRUb2tlbnMiOjE2NSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM2NywiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE0VDA2OjM4OjU3Ljk5OTE5MjYyMloiLCJTZXEiOjYyLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEyMDUxLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGhhcmR3YXJlIGluaXRpYWxpemF0aW9uIGFuZCB0ZWFyZG93biBzZXF1ZW5jZXMgaW4gdGhlIHN0bW1hYyBkcml2ZXIsIGludHJvZHVjaW5nIGFuIG9yZGVyZWQgZGF0YXBhdGggdGVhcmRvd24gdG8gcHJvcGVybHkgc3RvcCBETUEgYW5kIE1BQyBvcGVyYXRpb25zLiBJdCBhZGRzIGZ1bmN0aW9ucyB0byBwb2xsIGhhcmR3YXJlIHJlZ2lzdGVycyBmb3Igc3BlY2lmaWMgc3RhdGVzIChlLmcuLCBETUEgc3RvcHBlZCwgTVRMIHF1ZXVlcyBkcmFpbmVkKSB1c2luZyBgcmVhZGxfcG9sbF90aW1lb3V0YC4gVGhlc2UgY2hhbmdlcyBhcmUgcHVyZWx5IHJlbGF0ZWQgdG8gaGFyZHdhcmUgY29udHJvbCBmbG93IGFuZCBkbyBub3QgaW50cm9kdWNlIGFueSBuZXcgZGF0YSBzdHJ1Y3R1cmVzLCBidWZmZXIgYWxsb2NhdGlvbnMsIG9yIGRhdGEgY29waWVzIHRvIHVzZXIgc3BhY2UuIFRoZXJlIGlzIG5vIHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgYmVpbmcgZXhwb3NlZCBvciB1c2VkIGluIGNvbnRyb2wgZmxvdy4gU3RhbmRhcmQgS0FTQU4gYW5kIG90aGVyIGJ1ZyBkZXRlY3RvcnMgYXJlIHN1ZmZpY2llbnQgdG8gY2F0Y2ggYW55IHBvdGVudGlhbCBtZW1vcnkgY29ycnVwdGlvbiBvciB1c2UtYWZ0ZXItZnJlZSBidWdzIHRoYXQgbWlnaHQgYXJpc2UgZnJvbSBkcml2ZXIgdGVhcmRvd24gaXNzdWVzLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBoYXJkd2FyZSBpbml0aWFsaXphdGlvbiBhbmQgdGVhcmRvd24gc2VxdWVuY2VzIGluIHRoZSBzdG1tYWMgZHJpdmVyLCBpbnRyb2R1Y2luZyBhbiBvcmRlcmVkIGRhdGFwYXRoIHRlYXJkb3duIHRvIHByb3Blcmx5IHN0b3AgRE1BIGFuZCBNQUMgb3BlcmF0aW9ucy4gSXQgYWRkcyBmdW5jdGlvbnMgdG8gcG9sbCBoYXJkd2FyZSByZWdpc3RlcnMgZm9yIHNwZWNpZmljIHN0YXRlcyAoZS5nLiwgRE1BIHN0b3BwZWQsIE1UTCBxdWV1ZXMgZHJhaW5lZCkgdXNpbmcgYHJlYWRsX3BvbGxfdGltZW91dGAuIFRoZXNlIGNoYW5nZXMgYXJlIHB1cmVseSByZWxhdGVkIHRvIGhhcmR3YXJlIGNvbnRyb2wgZmxvdyBhbmQgZG8gbm90IGludHJvZHVjZSBhbnkgbmV3IGRhdGEgc3RydWN0dXJlcywgYnVmZmVyIGFsbG9jYXRpb25zLCBvciBkYXRhIGNvcGllcyB0byB1c2VyIHNwYWNlLiBUaGVyZSBpcyBubyByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGJlaW5nIGV4cG9zZWQgb3IgdXNlZCBpbiBjb250cm9sIGZsb3cuIFN0YW5kYXJkIEtBU0FOIGFuZCBvdGhlciBidWcgZGV0ZWN0b3JzIGFyZSBzdWZmaWNpZW50IHRvIGNhdGNoIGFueSBwb3RlbnRpYWwgbWVtb3J5IGNvcnJ1cHRpb24gb3IgdXNlLWFmdGVyLWZyZWUgYnVncyB0aGF0IG1pZ2h0IGFyaXNlIGZyb20gZHJpdmVyIHRlYXJkb3duIGlzc3Vlcy5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+IHsKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOyAKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iKSB7CgkJCQkJc3RhdHMubGxtLmNvdW50Kys7CgkJCQkJc3RhdHMubGxtLnRva2VucyArPSAocy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2Vucyk7CgkJCQkJc3RhdHMubGxtLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0gZWxzZSBpZiAocy5UeXBlID09PSAidG9vbCIpIHsKCQkJCQlzdGF0cy50b29sLmNvdW50Kys7CgkJCQkJc3RhdHMudG9vbC5kdXJhdGlvbiArPSBkdXI7CgkJCQl9CgkJCX0pOwoKCQkJY29uc3QgYXZnTGxtRHVyID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0uZHVyYXRpb24gLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdMbG1Ub2tlbiA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLnRva2VucyAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z1Rvb2xEdXIgPSBzdGF0cy50b29sLmNvdW50ID4gMCA/IChzdGF0cy50b29sLmR1cmF0aW9uIC8gc3RhdHMudG9vbC5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgoJCQljb25zdCBsbG1TdW1hcnlDZWxscyA9IFtzdGF0cy5sbG0uY291bnQsIHN0YXRzLmxsbS50b2tlbnMsIGF2Z0xsbVRva2VuLCBzdGF0cy5sbG0uZHVyYXRpb24sIGF2Z0xsbUR1cl07CgkJCWNvbnN0IHRvb2xTdW1tYXJ5Q2VsbHMgPSBbc3RhdHMudG9vbC5jb3VudCwgc3RhdHMudG9vbC5kdXJhdGlvbiwgYXZnVG9vbER1cl07CgoJCQljb25zdCBsbG1TdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsbG1fc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCWxsbVN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCBsbG1UciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCWxsbVN1bWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQlsbG1Uci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQlsbG1TdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZChsbG1Ucik7CgoJCQljb25zdCB0b29sU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJdG9vbFN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCB0b29sVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQl0b29sU3VtbWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQl0b29sVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJdG9vbFN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKHRvb2xUcik7CgkJfQoKCQlmdW5jdGlvbiBkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGZpbHRlcmVkU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IFsibGxtIiwgInRvb2wiXS5pbmNsdWRlcyhkLlR5cGUpKTsKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnRHVyYXRpb24nKTsKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsgCgoJCQlmaWx0ZXJlZFN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQkKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOwoJCQkJbGV0IHRvb2x0aXAgPSBzLk5hbWU7CgkJCQlpZiAocy5UeXBlID09PSAibGxtIiAmJiBzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgkJCQlkYXRhLmFkZFJvdyhbYCR7cy5TZXF9YCwgZHVyLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVGltZSBDb25zdW1wdGlvbiBvZiBMTE0vVG9vbCBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNL1Rvb2wgU3RlcHMnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnU2Vjb25kcycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZHVyYXRpb25fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGxsbVN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBkLlR5cGUgPT09ICJsbG0iKTsKCQkJaWYgKGxsbVN0ZXBzLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnVG9rZW5zJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3N0eWxlJ30pOwkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsJCgoJCQljb25zdCBhZ2VudENvbG9ycyA9IHt9OwoJCQljb25zdCBwYWxldHRlID0gWycjNDI4NUY0JywgJyNEQjQ0MzcnLCAnI0Y0QjQwMCcsICcjMEY5RDU4JywgJyNBQjQ3QkMnLCAnIzAwQUNDMSddOwoJCQlsZXQgY29sb3JJZHggPSAwOwoJCQljb25zdCBhZ2VudExMTUNvdW50cyA9IHt9OwoJCQlsbG1TdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJaWYgKCFhZ2VudENvbG9yc1tzLk5hbWVdKSB7CgkJCQkJYWdlbnRDb2xvcnNbcy5OYW1lXSA9IHBhbGV0dGVbY29sb3JJZHggJSBwYWxldHRlLmxlbmd0aF07CgkJCQkJY29sb3JJZHgrKzsKCQkJCX0KCgkJCQlhZ2VudExMTUNvdW50c1tzLk5hbWVdID0gKGFnZW50TExNQ291bnRzW3MuTmFtZV0gfHwgMCkgKyAxOwoJCQkJY29uc3QgbGFiZWwgPSBgJHtzLk5hbWV9LSR7YWdlbnRMTE1Db3VudHNbcy5OYW1lXX1gOwoJCQkJY29uc3QgdG90YWxUb2tlbnMgPSBzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zOwoJCQkJY29uc3Qgc3R5bGUgPSBgY29sb3I6ICR7YWdlbnRDb2xvcnNbcy5OYW1lXX1gOwoJCQkJbGV0IHRvb2x0aXAgPSBgVG90YWwgVG9rZW5zOiAke3RvdGFsVG9rZW5zfVxuKEluOiAke3MuSW5wdXRUb2tlbnN9LCBPdXQ6ICR7cy5PdXRwdXRUb2tlbnN9LCBUaG91Z2h0czogJHtzLk91dHB1dFRob3VnaHRzVG9rZW5zfSlgOwoJCQkJaWYgKHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCgkJCQlkYXRhLmFkZFJvdyhbbGFiZWwsIHRvdGFsVG9rZW5zLCBzdHlsZSwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1Rva2VuIENvbnN1bXB0aW9uIGJ5IExMTSBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNIENhbGwgU2VxdWVuY2UnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnQ29uc3VtZWQgVG9rZW5zJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b2tlbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoJCWxldCBhbGxFeHBhbmRlZCA9IGZhbHNlOwoJCWZ1bmN0aW9uIHRvZ2dsZUFsbERldGFpbHMoKSB7CgkJCWFsbEV4cGFuZGVkID0gIWFsbEV4cGFuZGVkOwoJCQlkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdkZXRhaWxzJykuZm9yRWFjaChkID0+IHsKCQkJCWlmIChhbGxFeHBhbmRlZCkgZC5zZXRBdHRyaWJ1dGUoJ29wZW4nLCAnJyk7CgkJCQllbHNlIGQucmVtb3ZlQXR0cmlidXRlKCdvcGVuJyk7CgkJCX0pOwoJCX0KCTwvc2NyaXB0PgoKCjwvYm9keT4KPC9odG1sPgo=" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowsr2hk[0].run-triage(0) Phase: Succeeded StartedAt: 2026-08-14 06:21:42 +0000 UTC FinishedAt: 2026-08-14 06:38:58 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "net-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git", "commit_hash": "3da8c3c8b8fa99505624b65ef590482f48e766b6", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "STMMAC_ETH", "STMMAC_PCI" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "net-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git", "commit_hash": "3da8c3c8b8fa99505624b65ef590482f48e766b6", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "STMMAC_ETH", "STMMAC_PCI" ], "series_id": "aaa9e265-f308-4232-9b7a-17d8d3e887b7" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "stmmac_dvr_remove", "stmmac_suspend", "stmmac_resume", "stmmac_xdp_open", "stmmac_xdp_release", "stmmac_reinit_queues", "stmmac_reinit_ringparam" ], "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+CgkJCTx0ZD4yMDI2LzA4LzE0IDA2OjM1PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+M208L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1NUTU1BQ19FVEgmIzM0OywKICAgICYjMzQ7U1RNTUFDX1BDSSYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3N0bW1hY19kdnJfcmVtb3ZlJiMzNDssCiAgICAmIzM0O3N0bW1hY19zdXNwZW5kJiMzNDssCiAgICAmIzM0O3N0bW1hY19yZXN1bWUmIzM0OywKICAgICYjMzQ7c3RtbWFjX3hkcF9vcGVuJiMzNDssCiAgICAmIzM0O3N0bW1hY194ZHBfcmVsZWFzZSYjMzQ7LAogICAgJiMzNDtzdG1tYWNfcmVpbml0X3F1ZXVlcyYjMzQ7LAogICAgJiMzNDtzdG1tYWNfcmVpbml0X3JpbmdwYXJhbSYjMzQ7CiAgXSwKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBoYXJkd2FyZSBpbml0aWFsaXphdGlvbiBhbmQgdGVhcmRvd24gc2VxdWVuY2VzIGluIHRoZSBzdG1tYWMgZHJpdmVyLCBpbnRyb2R1Y2luZyBhbiBvcmRlcmVkIGRhdGFwYXRoIHRlYXJkb3duIHRvIHByb3Blcmx5IHN0b3AgRE1BIGFuZCBNQUMgb3BlcmF0aW9ucy4gSXQgYWRkcyBmdW5jdGlvbnMgdG8gcG9sbCBoYXJkd2FyZSByZWdpc3RlcnMgZm9yIHNwZWNpZmljIHN0YXRlcyAoZS5nLiwgRE1BIHN0b3BwZWQsIE1UTCBxdWV1ZXMgZHJhaW5lZCkgdXNpbmcgYHJlYWRsX3BvbGxfdGltZW91dGAuIFRoZXNlIGNoYW5nZXMgYXJlIHB1cmVseSByZWxhdGVkIHRvIGhhcmR3YXJlIGNvbnRyb2wgZmxvdyBhbmQgZG8gbm90IGludHJvZHVjZSBhbnkgbmV3IGRhdGEgc3RydWN0dXJlcywgYnVmZmVyIGFsbG9jYXRpb25zLCBvciBkYXRhIGNvcGllcyB0byB1c2VyIHNwYWNlLiBUaGVyZSBpcyBubyByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGJlaW5nIGV4cG9zZWQgb3IgdXNlZCBpbiBjb250cm9sIGZsb3cuIFN0YW5kYXJkIEtBU0FOIGFuZCBvdGhlciBidWcgZGV0ZWN0b3JzIGFyZSBzdWZmaWNpZW50IHRvIGNhdGNoIGFueSBwb3RlbnRpYWwgbWVtb3J5IGNvcnJ1cHRpb24gb3IgdXNlLWFmdGVyLWZyZWUgYnVncyB0aGF0IG1pZ2h0IGFyaXNlIGZyb20gZHJpdmVyIHRlYXJkb3duIGlzc3Vlcy4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIG5ldyBvcmRlcmVkIGRhdGFwYXRoIHRlYXJkb3duIHNlcXVlbmNlIGZvciBhbGwgc3RtbWFjIGRldmljZXMsIGNoYW5naW5nIHRoZSBvcmRlciBvZiBETUEgc3RvcCBhbmQgTUFDIGRpc2FibGUgb3BlcmF0aW9ucy4gSXQgYWxzbyBzd2FwcyB0aGUgb3JkZXIgb2YgTUFDIGVuYWJsZSBhbmQgRE1BIHN0YXJ0IGluIHRoZSBzZXR1cCBwYXRocy4gVGhlc2UgYXJlIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUgY29yZSBkcml2ZXIgbG9naWMgcmVhY2hhYmxlIHZpYSBQQ0kgZW11bGF0aW9uLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE0IDA2OjM1PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgYTA4ZmYzNGNiMmNkMmQyOWMxZTI2MTVkZDE0NDgwY2NiMmQ4NzBmYlxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBGcmkgQXVnIDE0IDA2OjM1OjMyIDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3eGdtYWMyLmggYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd3hnbWFjMi5oXG5pbmRleCBmOGFiMzQ3ZjdiNWI5Li41MGY5Y2NkNGE5YzQ2IDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHd4Z21hYzIuaFxuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHd4Z21hYzIuaFxuQEAgLTI5MSw2ICYjNDM7MjkxLDEwIEBAXG4gI2RlZmluZSBYR01BQ19UVENcdFx0XHRHRU5NQVNLKDYsIDQpXG4gI2RlZmluZSBYR01BQ19UWFFFTlx0XHRcdEdFTk1BU0soMywgMilcbiAjZGVmaW5lIFhHTUFDX1RTRlx0XHRcdEJJVCgxKVxuJiM0MzsjZGVmaW5lIFhHTUFDX01UTF9UWFFfREVCVUcoeClcdFx0KDB4MDAwMDExMDggJiM0MzsgKDB4ODAgKiAoeCkpKVxuJiM0MzsjZGVmaW5lIFhHTUFDX1RYUVNUU1x0XHRcdEJJVCg0KVxuJiM0MzsjZGVmaW5lIFhHTUFDX1RSQ1NUU1x0XHRcdEdFTk1BU0soMiwgMSlcbiYjNDM7I2RlZmluZSBYR01BQ19UUkNTVFNfUkVBRFx0XHQweDFcbiAjZGVmaW5lIFhHTUFDX01UTF9UQ3hfRVRTX0NPTlRST0woeClcdCgweDAwMDAxMTEwICYjNDM7ICgweDgwICogKHgpKSlcbiAjZGVmaW5lIFhHTUFDX01UTF9UQ3hfUVVBTlRVTV9XRUlHSFQoeClcdCgweDAwMDAxMTE4ICYjNDM7ICgweDgwICogKHgpKSlcbiAjZGVmaW5lIFhHTUFDX01UTF9UQ3hfU0VORFNMT1BFKHgpXHQoMHgwMDAwMTExYyAmIzQzOyAoMHg4MCAqICh4KSkpXG5AQCAtMzA2LDYgJiM0MzszMTAsOSBAQFxuICNkZWZpbmUgWEdNQUNfRUhGQ1x0XHRcdEJJVCg3KVxuICNkZWZpbmUgWEdNQUNfUlNGXHRcdFx0QklUKDUpXG4gI2RlZmluZSBYR01BQ19SVENcdFx0XHRHRU5NQVNLKDEsIDApXG4mIzQzOyNkZWZpbmUgWEdNQUNfTVRMX1JYUV9ERUJVRyh4KVx0XHQoMHgwMDAwMTE0OCAmIzQzOyAoMHg4MCAqICh4KSkpXG4mIzQzOyNkZWZpbmUgWEdNQUNfUFJYUVx0XHRcdEdFTk1BU0soMjksIDE2KVxuJiM0MzsjZGVmaW5lIFhHTUFDX1JYUVNUU1x0XHRcdEdFTk1BU0soNSwgNClcbiAjZGVmaW5lIFhHTUFDX01UTF9SWFFfRkxPV19DT05UUk9MKHgpXHQoMHgwMDAwMTE1MCAmIzQzOyAoMHg4MCAqICh4KSkpXG4gI2RlZmluZSBYR01BQ19SRkRcdFx0XHRHRU5NQVNLKDMxLCAxNylcbiAjZGVmaW5lIFhHTUFDX1JGQVx0XHRcdEdFTk1BU0soMTUsIDEpXG5AQCAtMzkxLDYgJiM0MzszOTgsNyBAQFxuICNkZWZpbmUgWEdNQUNfTklTXHRcdFx0QklUKDE1KVxuICNkZWZpbmUgWEdNQUNfQUlTXHRcdFx0QklUKDE0KVxuICNkZWZpbmUgWEdNQUNfRkJFXHRcdFx0QklUKDEyKVxuJiM0MzsjZGVmaW5lIFhHTUFDX1JQU1x0XHRcdEJJVCg4KVxuICNkZWZpbmUgWEdNQUNfUkJVXHRcdFx0QklUKDcpXG4gI2RlZmluZSBYR01BQ19SSVx0XHRcdEJJVCg2KVxuICNkZWZpbmUgWEdNQUNfVEJVXHRcdFx0QklUKDIpXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHd4Z21hYzJfZG1hLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd3hnbWFjMl9kbWEuY1xuaW5kZXggZmY4Mzg1OGViYzFmMy4uYmE0ZjUzNWZiOWViNCAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3eGdtYWMyX2RtYS5jXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd3hnbWFjMl9kbWEuY1xuQEAgLTQsNiAmIzQzOzQsNyBAQFxuICAqIHN0bW1hYyBYR01BQyBzdXBwb3J0LlxuICAqL1xuIFxuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC9iaXRmaWVsZC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvaW9wb2xsLmhcdTAwM2VcbiAjaW5jbHVkZSBcJiMzNDtzdG1tYWMuaFwmIzM0O1xuICNpbmNsdWRlIFwmIzM0O2R3eGdtYWMyLmhcJiMzNDtcbkBAIC0yNjEsMTMgJiM0MzsyNjIsMTIgQEAgc3RhdGljIHZvaWQgZHd4Z21hYzJfZG1hX3N0YXJ0X3R4KHN0cnVjdCBzdG1tYWNfcHJpdiAqcHJpdixcbiB7XG4gXHR1MzIgdmFsdWU7XG4gXG4mIzQzO1x0LyogVFBTIGlzIGxhdGNoZWQgb25jZSBzZXQsIHNvIGNsZWFyIGl0IG9uIGV2ZXJ5IFR4IERNQSBzdGFydC4gKi9cbiYjNDM7XHR3cml0ZWwoWEdNQUNfVFBTLCBpb2FkZHIgJiM0MzsgWEdNQUNfRE1BX0NIX1NUQVRVUyhjaGFuKSk7XG4mIzQzO1xuIFx0dmFsdWUgPSByZWFkbChpb2FkZHIgJiM0MzsgWEdNQUNfRE1BX0NIX1RYX0NPTlRST0woY2hhbikpO1xuIFx0dmFsdWUgfD0gWEdNQUNfVFhTVDtcbiBcdHdyaXRlbCh2YWx1ZSwgaW9hZGRyICYjNDM7IFhHTUFDX0RNQV9DSF9UWF9DT05UUk9MKGNoYW4pKTtcbi1cbi1cdHZhbHVlID0gcmVhZGwoaW9hZGRyICYjNDM7IFhHTUFDX1RYX0NPTkZJRyk7XG4tXHR2YWx1ZSB8PSBYR01BQ19DT05GSUdfVEU7XG4tXHR3cml0ZWwodmFsdWUsIGlvYWRkciAmIzQzOyBYR01BQ19UWF9DT05GSUcpO1xuIH1cbiBcbiBzdGF0aWMgdm9pZCBkd3hnbWFjMl9kbWFfc3RvcF90eChzdHJ1Y3Qgc3RtbWFjX3ByaXYgKnByaXYsIHZvaWQgX19pb21lbSAqaW9hZGRyLFxuQEAgLTI3OCwxMCAmIzQzOzI3OCw2IEBAIHN0YXRpYyB2b2lkIGR3eGdtYWMyX2RtYV9zdG9wX3R4KHN0cnVjdCBzdG1tYWNfcHJpdiAqcHJpdiwgdm9pZCBfX2lvbWVtICppb2FkZHIsXG4gXHR2YWx1ZSA9IHJlYWRsKGlvYWRkciAmIzQzOyBYR01BQ19ETUFfQ0hfVFhfQ09OVFJPTChjaGFuKSk7XG4gXHR2YWx1ZSBcdTAwMjY9IH5YR01BQ19UWFNUO1xuIFx0d3JpdGVsKHZhbHVlLCBpb2FkZHIgJiM0MzsgWEdNQUNfRE1BX0NIX1RYX0NPTlRST0woY2hhbikpO1xuLVxuLVx0dmFsdWUgPSByZWFkbChpb2FkZHIgJiM0MzsgWEdNQUNfVFhfQ09ORklHKTtcbi1cdHZhbHVlIFx1MDAyNj0gflhHTUFDX0NPTkZJR19URTtcbi1cdHdyaXRlbCh2YWx1ZSwgaW9hZGRyICYjNDM7IFhHTUFDX1RYX0NPTkZJRyk7XG4gfVxuIFxuIHN0YXRpYyB2b2lkIGR3eGdtYWMyX2RtYV9zdGFydF9yeChzdHJ1Y3Qgc3RtbWFjX3ByaXYgKnByaXYsXG5AQCAtMjg5LDEzICYjNDM7Mjg1LDEyIEBAIHN0YXRpYyB2b2lkIGR3eGdtYWMyX2RtYV9zdGFydF9yeChzdHJ1Y3Qgc3RtbWFjX3ByaXYgKnByaXYsXG4ge1xuIFx0dTMyIHZhbHVlO1xuIFxuJiM0MztcdC8qIFJQUyBpcyBsYXRjaGVkIG9uY2Ugc2V0LCBzbyBjbGVhciBpdCBvbiBldmVyeSBSeCBETUEgc3RhcnQuICovXG4mIzQzO1x0d3JpdGVsKFhHTUFDX1JQUywgaW9hZGRyICYjNDM7IFhHTUFDX0RNQV9DSF9TVEFUVVMoY2hhbikpO1xuJiM0MztcbiBcdHZhbHVlID0gcmVhZGwoaW9hZGRyICYjNDM7IFhHTUFDX0RNQV9DSF9SWF9DT05UUk9MKGNoYW4pKTtcbiBcdHZhbHVlIHw9IFhHTUFDX1JYU1Q7XG4gXHR3cml0ZWwodmFsdWUsIGlvYWRkciAmIzQzOyBYR01BQ19ETUFfQ0hfUlhfQ09OVFJPTChjaGFuKSk7XG4tXG4tXHR2YWx1ZSA9IHJlYWRsKGlvYWRkciAmIzQzOyBYR01BQ19SWF9DT05GSUcpO1xuLVx0dmFsdWUgfD0gWEdNQUNfQ09ORklHX1JFO1xuLVx0d3JpdGVsKHZhbHVlLCBpb2FkZHIgJiM0MzsgWEdNQUNfUlhfQ09ORklHKTtcbiB9XG4gXG4gc3RhdGljIHZvaWQgZHd4Z21hYzJfZG1hX3N0b3Bfcngoc3RydWN0IHN0bW1hY19wcml2ICpwcml2LCB2b2lkIF9faW9tZW0gKmlvYWRkcixcbkBAIC01OTIsNiAmIzQzOzU4Nyw3NyBAQCBzdGF0aWMgaW50IGR3eGdtYWMyX2VuYWJsZV90YnMoc3RydWN0IHN0bW1hY19wcml2ICpwcml2LCB2b2lkIF9faW9tZW0gKmlvYWRkcixcbiBcdHJldHVybiAwO1xuIH1cbiBcbiYjNDM7c3RhdGljIGludCBkd3hnbWFjMl90eF9kbWFfc3RvcHBlZChzdHJ1Y3Qgc3RtbWFjX3ByaXYgKnByaXYsXG4mIzQzO1x0XHRcdFx0ICAgdm9pZCBfX2lvbWVtICppb2FkZHIsIHUzMiBjaGFuKVxuJiM0Mzt7XG4mIzQzO1x0dTMyIHZhbHVlO1xuJiM0MztcdGludCByZXQ7XG4mIzQzO1xuJiM0MztcdHJldCA9IHJlYWRsX3BvbGxfdGltZW91dChpb2FkZHIgJiM0MzsgWEdNQUNfRE1BX0NIX1NUQVRVUyhjaGFuKSwgdmFsdWUsXG4mIzQzO1x0XHRcdFx0IHZhbHVlIFx1MDAyNiBYR01BQ19UUFMsIDEwMCwgMTAwMDApO1xuJiM0MztcdGlmIChyZXQpXG4mIzQzO1x0XHRuZXRkZXZfd2Fybihwcml2LVx1MDAzZWRldiwgXCYjMzQ7VHggRE1BIGNoYW5uZWwgJXUgc3RvcCB0aW1lb3V0XFxuXCYjMzQ7LFxuJiM0MztcdFx0XHQgICAgY2hhbik7XG4mIzQzO1xuJiM0MztcdHJldHVybiByZXQ7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBpbnQgZHd4Z21hYzJfdHhfbXRsX2RyYWluKHN0cnVjdCBzdG1tYWNfcHJpdiAqcHJpdixcbiYjNDM7XHRcdFx0XHQgdm9pZCBfX2lvbWVtICppb2FkZHIsIHUzMiBxdWV1ZSlcbiYjNDM7e1xuJiM0MztcdHUzMiB2YWx1ZTtcbiYjNDM7XHRpbnQgcmV0O1xuJiM0MztcbiYjNDM7XHQvKiBXYWl0IHVudGlsIHRoZSBxdWV1ZSBpcyBlbXB0eSBhbmQgaXRzIHJlYWQgY29udHJvbGxlciBpcyBubyBsb25nZXJcbiYjNDM7XHQgKiBwdWxsaW5nIGEgZnJhbWUgb3V0IHRvd2FyZHMgdGhlIE1BQy5cbiYjNDM7XHQgKi9cbiYjNDM7XHRyZXQgPSByZWFkbF9wb2xsX3RpbWVvdXQoaW9hZGRyICYjNDM7IFhHTUFDX01UTF9UWFFfREVCVUcocXVldWUpLCB2YWx1ZSxcbiYjNDM7XHRcdFx0XHQgISh2YWx1ZSBcdTAwMjYgWEdNQUNfVFhRU1RTKSBcdTAwMjZcdTAwMjZcbiYjNDM7XHRcdFx0XHQgRklFTERfR0VUKFhHTUFDX1RSQ1NUUywgdmFsdWUpICE9XG4mIzQzO1x0XHRcdFx0IFhHTUFDX1RSQ1NUU19SRUFELFxuJiM0MztcdFx0XHRcdCAxMDAsIDEwMDAwKTtcbiYjNDM7XHRpZiAocmV0KVxuJiM0MztcdFx0bmV0ZGV2X3dhcm4ocHJpdi1cdTAwM2VkZXYsIFwmIzM0O01UTCBUeCBxdWV1ZSAldSBkcmFpbiB0aW1lb3V0XFxuXCYjMzQ7LFxuJiM0MztcdFx0XHQgICAgcXVldWUpO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gcmV0O1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW50IGR3eGdtYWMyX3J4X210bF9kcmFpbihzdHJ1Y3Qgc3RtbWFjX3ByaXYgKnByaXYsXG4mIzQzO1x0XHRcdFx0IHZvaWQgX19pb21lbSAqaW9hZGRyLCB1MzIgcXVldWUpXG4mIzQzO3tcbiYjNDM7XHR1MzIgdmFsdWU7XG4mIzQzO1x0aW50IHJldDtcbiYjNDM7XG4mIzQzO1x0LyogV2FpdCB1bnRpbCBubyBwYWNrZXQgaXMgbGVmdCBpbiB0aGUgcXVldWUgYW5kIHRoZSBxdWV1ZSByZXBvcnRzXG4mIzQzO1x0ICogaXRzZWxmIGVtcHR5LlxuJiM0MztcdCAqL1xuJiM0MztcdHJldCA9IHJlYWRsX3BvbGxfdGltZW91dChpb2FkZHIgJiM0MzsgWEdNQUNfTVRMX1JYUV9ERUJVRyhxdWV1ZSksIHZhbHVlLFxuJiM0MztcdFx0XHRcdCAhRklFTERfR0VUKFhHTUFDX1BSWFEsIHZhbHVlKSBcdTAwMjZcdTAwMjZcbiYjNDM7XHRcdFx0XHQgIUZJRUxEX0dFVChYR01BQ19SWFFTVFMsIHZhbHVlKSxcbiYjNDM7XHRcdFx0XHQgMTAwLCAxMDAwMCk7XG4mIzQzO1x0aWYgKHJldClcbiYjNDM7XHRcdG5ldGRldl93YXJuKHByaXYtXHUwMDNlZGV2LCBcJiMzNDtNVEwgUnggcXVldWUgJXUgZHJhaW4gdGltZW91dFxcblwmIzM0OyxcbiYjNDM7XHRcdFx0ICAgIHF1ZXVlKTtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIHJldDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGludCBkd3hnbWFjMl9yeF9kbWFfc3RvcHBlZChzdHJ1Y3Qgc3RtbWFjX3ByaXYgKnByaXYsXG4mIzQzO1x0XHRcdFx0ICAgdm9pZCBfX2lvbWVtICppb2FkZHIsIHUzMiBjaGFuKVxuJiM0Mzt7XG4mIzQzO1x0dTMyIHZhbHVlO1xuJiM0MztcdGludCByZXQ7XG4mIzQzO1xuJiM0MztcdHJldCA9IHJlYWRsX3BvbGxfdGltZW91dChpb2FkZHIgJiM0MzsgWEdNQUNfRE1BX0NIX1NUQVRVUyhjaGFuKSwgdmFsdWUsXG4mIzQzO1x0XHRcdFx0IHZhbHVlIFx1MDAyNiBYR01BQ19SUFMsIDEwMCwgMTAwMDApO1xuJiM0MztcdGlmIChyZXQpXG4mIzQzO1x0XHRuZXRkZXZfd2Fybihwcml2LVx1MDAzZWRldiwgXCYjMzQ7UnggRE1BIGNoYW5uZWwgJXUgc3RvcCB0aW1lb3V0XFxuXCYjMzQ7LFxuJiM0MztcdFx0XHQgICAgY2hhbik7XG4mIzQzO1xuJiM0MztcdHJldHVybiByZXQ7XG4mIzQzO31cbiYjNDM7XG4gY29uc3Qgc3RydWN0IHN0bW1hY19kbWFfb3BzIGR3eGdtYWMyMTBfZG1hX29wcyA9IHtcbiBcdC5yZXNldCA9IGR3eGdtYWMyX2RtYV9yZXNldCxcbiBcdC5pbml0ID0gZHd4Z21hYzJfZG1hX2luaXQsXG5AQCAtNjIwLDQgJiM0Mzs2ODYsOCBAQCBjb25zdCBzdHJ1Y3Qgc3RtbWFjX2RtYV9vcHMgZHd4Z21hYzIxMF9kbWFfb3BzID0ge1xuIFx0LnNldF9iZnNpemUgPSBkd3hnbWFjMl9zZXRfYmZzaXplLFxuIFx0LmVuYWJsZV9zcGggPSBkd3hnbWFjMl9lbmFibGVfc3BoLFxuIFx0LmVuYWJsZV90YnMgPSBkd3hnbWFjMl9lbmFibGVfdGJzLFxuJiM0MztcdC50eF9kbWFfc3RvcHBlZCA9IGR3eGdtYWMyX3R4X2RtYV9zdG9wcGVkLFxuJiM0MztcdC50eF9tdGxfZHJhaW4gPSBkd3hnbWFjMl90eF9tdGxfZHJhaW4sXG4mIzQzO1x0LnJ4X210bF9kcmFpbiA9IGR3eGdtYWMyX3J4X210bF9kcmFpbixcbiYjNDM7XHQucnhfZG1hX3N0b3BwZWQgPSBkd3hnbWFjMl9yeF9kbWFfc3RvcHBlZCxcbiB9O1xuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2h3aWYuaCBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2h3aWYuaFxuaW5kZXggMDRkYWZlYzAyMWI0Zi4uODZmNGFhODg5NjFjNyAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2h3aWYuaFxuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvaHdpZi5oXG5AQCAtMjMxLDYgJiM0MzsyMzEsMTUgQEAgc3RydWN0IHN0bW1hY19kbWFfb3BzIHtcbiBcdFx0XHQgICBib29sIGVuLCB1MzIgY2hhbik7XG4gXHRpbnQgKCplbmFibGVfdGJzKShzdHJ1Y3Qgc3RtbWFjX3ByaXYgKnByaXYsIHZvaWQgX19pb21lbSAqaW9hZGRyLFxuIFx0XHRcdCAgYm9vbCBlbiwgdTMyIGNoYW4pO1xuJiM0MztcdC8qIE9yZGVyZWQgZGF0YXBhdGggdGVhcmRvd24gKi9cbiYjNDM7XHRpbnQgKCp0eF9kbWFfc3RvcHBlZCkoc3RydWN0IHN0bW1hY19wcml2ICpwcml2LCB2b2lkIF9faW9tZW0gKmlvYWRkcixcbiYjNDM7XHRcdFx0ICAgICAgdTMyIGNoYW4pO1xuJiM0MztcdGludCAoKnR4X210bF9kcmFpbikoc3RydWN0IHN0bW1hY19wcml2ICpwcml2LCB2b2lkIF9faW9tZW0gKmlvYWRkcixcbiYjNDM7XHRcdFx0ICAgIHUzMiBxdWV1ZSk7XG4mIzQzO1x0aW50ICgqcnhfbXRsX2RyYWluKShzdHJ1Y3Qgc3RtbWFjX3ByaXYgKnByaXYsIHZvaWQgX19pb21lbSAqaW9hZGRyLFxuJiM0MztcdFx0XHQgICAgdTMyIHF1ZXVlKTtcbiYjNDM7XHRpbnQgKCpyeF9kbWFfc3RvcHBlZCkoc3RydWN0IHN0bW1hY19wcml2ICpwcml2LCB2b2lkIF9faW9tZW0gKmlvYWRkcixcbiYjNDM7XHRcdFx0ICAgICAgdTMyIGNoYW4pO1xuIH07XG4gXG4gI2RlZmluZSBzdG1tYWNfZG1hX2luaXQoX19wcml2LCBfX2FyZ3MuLi4pIFxcXG5AQCAtMjkzLDYgJiM0MzszMDIsMTQgQEAgc3RydWN0IHN0bW1hY19kbWFfb3BzIHtcbiBcdHN0bW1hY19kb192b2lkX2NhbGxiYWNrKF9fcHJpdiwgZG1hLCBlbmFibGVfc3BoLCBfX3ByaXYsIF9fYXJncylcbiAjZGVmaW5lIHN0bW1hY19lbmFibGVfdGJzKF9fcHJpdiwgX19hcmdzLi4uKSBcXFxuIFx0c3RtbWFjX2RvX2NhbGxiYWNrKF9fcHJpdiwgZG1hLCBlbmFibGVfdGJzLCBfX3ByaXYsIF9fYXJncylcbiYjNDM7I2RlZmluZSBzdG1tYWNfdHhfZG1hX3N0b3BwZWQoX19wcml2LCBfX2FyZ3MuLi4pIFxcXG4mIzQzO1x0c3RtbWFjX2RvX2NhbGxiYWNrKF9fcHJpdiwgZG1hLCB0eF9kbWFfc3RvcHBlZCwgX19wcml2LCBfX2FyZ3MpXG4mIzQzOyNkZWZpbmUgc3RtbWFjX3R4X210bF9kcmFpbihfX3ByaXYsIF9fYXJncy4uLikgXFxcbiYjNDM7XHRzdG1tYWNfZG9fY2FsbGJhY2soX19wcml2LCBkbWEsIHR4X210bF9kcmFpbiwgX19wcml2LCBfX2FyZ3MpXG4mIzQzOyNkZWZpbmUgc3RtbWFjX3J4X210bF9kcmFpbihfX3ByaXYsIF9fYXJncy4uLikgXFxcbiYjNDM7XHRzdG1tYWNfZG9fY2FsbGJhY2soX19wcml2LCBkbWEsIHJ4X210bF9kcmFpbiwgX19wcml2LCBfX2FyZ3MpXG4mIzQzOyNkZWZpbmUgc3RtbWFjX3J4X2RtYV9zdG9wcGVkKF9fcHJpdiwgX19hcmdzLi4uKSBcXFxuJiM0MztcdHN0bW1hY19kb19jYWxsYmFjayhfX3ByaXYsIGRtYSwgcnhfZG1hX3N0b3BwZWQsIF9fcHJpdiwgX19hcmdzKVxuIFxuIHN0cnVjdCBtYWNfZGV2aWNlX2luZm87XG4gc3RydWN0IG5ldF9kZXZpY2U7XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX21haW4uYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19tYWluLmNcbmluZGV4IGIyYjdkMDI0MmRkM2MuLjljM2E4ZjEyMmI5NGYgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfbWFpbi5jXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfbWFpbi5jXG5AQCAtMjU2MCw2ICYjNDM7MjU2MCw1MiBAQCBzdGF0aWMgdm9pZCBzdG1tYWNfc3RvcF9hbGxfZG1hKHN0cnVjdCBzdG1tYWNfcHJpdiAqcHJpdilcbiBcdFx0c3RtbWFjX2RlaW5pdF9jaGFuKHByaXYsIHByaXYtXHUwMDNlaW9hZGRyLCBjaGFuKTtcbiB9XG4gXG4mIzQzOy8qKlxuJiM0MzsgKiBzdG1tYWNfZGF0YXBhdGhfdGVhcmRvd24gLSBvcmRlcmVkIGRhdGFwYXRoIHRlYXJkb3duIGFzIHBlciBJUCBzcGVjaWZpY2F0aW9uXG4mIzQzOyAqIEBwcml2OiBkcml2ZXIgcHJpdmF0ZSBzdHJ1Y3R1cmVcbiYjNDM7ICogRGVzY3JpcHRpb246XG4mIzQzOyAqIFdoZW4gdGVhcmRvd24gb3BzIGFyZSBhdmFpbGFibGUsIGZvbGxvdyB0aGUgZGF0YWJvb2sgb3JkZXJlZCB0ZWFyZG93blxuJiM0MzsgKiBzZXF1ZW5jZS5cbiYjNDM7ICogRm9sbG93cyB0aGUgbGVnYWN5IHN0b3AgJiM0MzsgTUFDIGRpc2FibGUgZm9yIHZhcmlhbnRzIHdpdGhvdXQgdGhlIGZlYXR1cmUuXG4mIzQzOyAqL1xuJiM0MztzdGF0aWMgdm9pZCBzdG1tYWNfZGF0YXBhdGhfdGVhcmRvd24oc3RydWN0IHN0bW1hY19wcml2ICpwcml2KVxuJiM0Mzt7XG4mIzQzO1x0dTMyIHJ4X2NoYW5uZWxzX2NvdW50ID0gcHJpdi1cdTAwM2VwbGF0LVx1MDAzZXJ4X3F1ZXVlc190b191c2U7XG4mIzQzO1x0dTMyIHR4X2NoYW5uZWxzX2NvdW50ID0gcHJpdi1cdTAwM2VwbGF0LVx1MDAzZXR4X3F1ZXVlc190b191c2U7XG4mIzQzO1x0dTMyIGNoYW47XG4mIzQzO1xuJiM0MztcdC8qIFN0b3AgYWxsIFRYIERNQSBjaGFubmVscyAqL1xuJiM0MztcdGZvciAoY2hhbiA9IDA7IGNoYW4gXHUwMDNjIHR4X2NoYW5uZWxzX2NvdW50OyBjaGFuJiM0MzsmIzQzOylcbiYjNDM7XHRcdHN0bW1hY19zdG9wX3R4X2RtYShwcml2LCBjaGFuKTtcbiYjNDM7XG4mIzQzO1x0LyogV2FpdCBmb3IgZXZlcnkgVFggRE1BIGNoYW5uZWwgdG8gcmVwb3J0IGl0c2VsZiBzdG9wcGVkICovXG4mIzQzO1x0aWYgKHByaXYtXHUwMDNlaHctXHUwMDNlZG1hLVx1MDAzZXR4X2RtYV9zdG9wcGVkKVxuJiM0MztcdFx0Zm9yIChjaGFuID0gMDsgY2hhbiBcdTAwM2MgdHhfY2hhbm5lbHNfY291bnQ7IGNoYW4mIzQzOyYjNDM7KVxuJiM0MztcdFx0XHRzdG1tYWNfdHhfZG1hX3N0b3BwZWQocHJpdiwgcHJpdi1cdTAwM2Vpb2FkZHIsIGNoYW4pO1xuJiM0MztcbiYjNDM7XHQvKiBXYWl0IGZvciB0aGUgTVRMIFRYIHF1ZXVlcyB0byBmaW5pc2ggcHVzaGluZyBpbnRvIHRoZSBNQUMgKi9cbiYjNDM7XHRpZiAocHJpdi1cdTAwM2Vody1cdTAwM2VkbWEtXHUwMDNldHhfbXRsX2RyYWluKVxuJiM0MztcdFx0Zm9yIChjaGFuID0gMDsgY2hhbiBcdTAwM2MgdHhfY2hhbm5lbHNfY291bnQ7IGNoYW4mIzQzOyYjNDM7KVxuJiM0MztcdFx0XHRzdG1tYWNfdHhfbXRsX2RyYWluKHByaXYsIHByaXYtXHUwMDNlaW9hZGRyLCBjaGFuKTtcbiYjNDM7XG4mIzQzO1x0LyogRGlzYWJsZSB0aGUgTUFDIFRYIGFuZCBSWCAqL1xuJiM0MztcdHN0bW1hY19tYWNfc2V0KHByaXYsIHByaXYtXHUwMDNlaW9hZGRyLCBmYWxzZSk7XG4mIzQzO1xuJiM0MztcdC8qIFdhaXQgZm9yIHRoZSBNVEwgUlggcXVldWVzIHRvIGRyYWluIGludG8gdGhlIFJYIERNQSAqL1xuJiM0MztcdGlmIChwcml2LVx1MDAzZWh3LVx1MDAzZWRtYS1cdTAwM2VyeF9tdGxfZHJhaW4pXG4mIzQzO1x0XHRmb3IgKGNoYW4gPSAwOyBjaGFuIFx1MDAzYyByeF9jaGFubmVsc19jb3VudDsgY2hhbiYjNDM7JiM0MzspXG4mIzQzO1x0XHRcdHN0bW1hY19yeF9tdGxfZHJhaW4ocHJpdiwgcHJpdi1cdTAwM2Vpb2FkZHIsIGNoYW4pO1xuJiM0MztcbiYjNDM7XHQvKiBTdG9wIGFsbCBSWCBETUEgY2hhbm5lbHMgKi9cbiYjNDM7XHRmb3IgKGNoYW4gPSAwOyBjaGFuIFx1MDAzYyByeF9jaGFubmVsc19jb3VudDsgY2hhbiYjNDM7JiM0MzspXG4mIzQzO1x0XHRzdG1tYWNfc3RvcF9yeF9kbWEocHJpdiwgY2hhbik7XG4mIzQzO1xuJiM0MztcdC8qIFdhaXQgZm9yIGV2ZXJ5IFJYIERNQSBjaGFubmVsIHRvIHJlcG9ydCBpdHNlbGYgc3RvcHBlZCAqL1xuJiM0MztcdGlmIChwcml2LVx1MDAzZWh3LVx1MDAzZWRtYS1cdTAwM2VyeF9kbWFfc3RvcHBlZClcbiYjNDM7XHRcdGZvciAoY2hhbiA9IDA7IGNoYW4gXHUwMDNjIHJ4X2NoYW5uZWxzX2NvdW50OyBjaGFuJiM0MzsmIzQzOylcbiYjNDM7XHRcdFx0c3RtbWFjX3J4X2RtYV9zdG9wcGVkKHByaXYsIHByaXYtXHUwMDNlaW9hZGRyLCBjaGFuKTtcbiYjNDM7fVxuJiM0MztcbiAvKipcbiAgKiAgc3RtbWFjX2RtYV9vcGVyYXRpb25fbW9kZSAtIEhXIERNQSBvcGVyYXRpb24gbW9kZVxuICAqICBAcHJpdjogZHJpdmVyIHByaXZhdGUgc3RydWN0dXJlXG5AQCAtMzY4NSw5ICYjNDM7MzczMSw2IEBAIHN0YXRpYyBpbnQgc3RtbWFjX2h3X3NldHVwKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXG4gXHRcdHByaXYtXHUwMDNlaHctXHUwMDNlcnhfY3N1bSA9IDA7XG4gXHR9XG4gXG4tXHQvKiBFbmFibGUgdGhlIE1BQyBSeC9UeCAqL1xuLVx0c3RtbWFjX21hY19zZXQocHJpdiwgcHJpdi1cdTAwM2Vpb2FkZHIsIHRydWUpO1xuLVxuIFx0LyogU2V0IHRoZSBIVyBETUEgbW9kZSBhbmQgdGhlIENPRSAqL1xuIFx0c3RtbWFjX2RtYV9vcGVyYXRpb25fbW9kZShwcml2KTtcbiBcbkBAIC0zNzQzLDYgJiM0MzszNzg2LDkgQEAgc3RhdGljIGludCBzdG1tYWNfaHdfc2V0dXAoc3RydWN0IG5ldF9kZXZpY2UgKmRldilcbiBcdC8qIFN0YXJ0IHRoZSBiYWxsIHJvbGxpbmcuLi4gKi9cbiBcdHN0bW1hY19zdGFydF9hbGxfZG1hKHByaXYpO1xuIFxuJiM0MztcdC8qIEVuYWJsZSB0aGUgTUFDIFJ4L1R4ICovXG4mIzQzO1x0c3RtbWFjX21hY19zZXQocHJpdiwgcHJpdi1cdTAwM2Vpb2FkZHIsIHRydWUpO1xuJiM0MztcbiBcdHBoeWxpbmtfcnhfY2xrX3N0b3BfYmxvY2socHJpdi1cdTAwM2VwaHlsaW5rKTtcbiBcdHN0bW1hY19zZXRfaHdfdmxhbl9tb2RlKHByaXYsIHByaXYtXHUwMDNlaHcpO1xuIFx0cGh5bGlua19yeF9jbGtfc3RvcF91bmJsb2NrKHByaXYtXHUwMDNlcGh5bGluayk7XG5AQCAtNDI0MCw5ICYjNDM7NDI4Niw2IEBAIHN0YXRpYyB2b2lkIF9fc3RtbWFjX3JlbGVhc2Uoc3RydWN0IG5ldF9kZXZpY2UgKmRldilcbiBcdHN0cnVjdCBzdG1tYWNfcHJpdiAqcHJpdiA9IG5ldGRldl9wcml2KGRldik7XG4gXHR1OCBjaGFuO1xuIFxuLVx0LyogU3RvcCBhbmQgZGlzY29ubmVjdCB0aGUgUEhZICovXG4tXHRwaHlsaW5rX3N0b3AocHJpdi1cdTAwM2VwaHlsaW5rKTtcbi1cbiBcdHN0bW1hY19kaXNhYmxlX2FsbF9xdWV1ZXMocHJpdik7XG4gXG4gXHRmb3IgKGNoYW4gPSAwOyBjaGFuIFx1MDAzYyBwcml2LVx1MDAzZXBsYXQtXHUwMDNldHhfcXVldWVzX3RvX3VzZTsgY2hhbiYjNDM7JiM0MzspXG5AQCAtNDI1Myw4ICYjNDM7NDI5NiwxMSBAQCBzdGF0aWMgdm9pZCBfX3N0bW1hY19yZWxlYXNlKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXG4gXHQvKiBGcmVlIHRoZSBJUlEgbGluZXMgKi9cbiBcdHN0bW1hY19mcmVlX2lycShkZXYsIFJFUV9JUlFfRVJSX0FMTCwgMCk7XG4gXG4tXHQvKiBTdG9wIFRYL1JYIERNQSBhbmQgY2xlYXIgdGhlIGRlc2NyaXB0b3JzICovXG4tXHRzdG1tYWNfc3RvcF9hbGxfZG1hKHByaXYpO1xuJiM0MztcdC8qIEhhcyB0byBydW4gYmVmb3JlIG1hY19saW5rX2Rvd24oKSBkaXNhYmxlcyB0aGUgTUFDLiAqL1xuJiM0MztcdHN0bW1hY19kYXRhcGF0aF90ZWFyZG93bihwcml2KTtcbiYjNDM7XG4mIzQzO1x0LyogU3RvcCBhbmQgZGlzY29ubmVjdCB0aGUgUEhZICovXG4mIzQzO1x0cGh5bGlua19zdG9wKHByaXYtXHUwMDNlcGh5bGluayk7XG4gXG4gXHQvKiBSZWxlYXNlIGFuZCBmcmVlIHRoZSBSeC9UeCByZXNvdXJjZXMgKi9cbiBcdGZyZWVfZG1hX2Rlc2NfcmVzb3VyY2VzKHByaXYsIFx1MDAyNnByaXYtXHUwMDNlZG1hX2NvbmYpO1xuQEAgLTcxMDQsMTUgJiM0Mzs3MTUwLDEyIEBAIHZvaWQgc3RtbWFjX3hkcF9yZWxlYXNlKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXG4gXHQvKiBGcmVlIHRoZSBJUlEgbGluZXMgKi9cbiBcdHN0bW1hY19mcmVlX2lycShkZXYsIFJFUV9JUlFfRVJSX0FMTCwgMCk7XG4gXG4tXHQvKiBTdG9wIFRYL1JYIERNQSBjaGFubmVscyAqL1xuLVx0c3RtbWFjX3N0b3BfYWxsX2RtYShwcml2KTtcbiYjNDM7XHQvKiBTdG9wIHRoZSBNQUMgYW5kIHRoZSBUWC9SWCBETUEgY2hhbm5lbHMgKi9cbiYjNDM7XHRzdG1tYWNfZGF0YXBhdGhfdGVhcmRvd24ocHJpdik7XG4gXG4gXHQvKiBSZWxlYXNlIGFuZCBmcmVlIHRoZSBSeC9UeCByZXNvdXJjZXMgKi9cbiBcdGZyZWVfZG1hX2Rlc2NfcmVzb3VyY2VzKHByaXYsIFx1MDAyNnByaXYtXHUwMDNlZG1hX2NvbmYpO1xuIFxuLVx0LyogRGlzYWJsZSB0aGUgTUFDIFJ4L1R4ICovXG4tXHRzdG1tYWNfbWFjX3NldChwcml2LCBwcml2LVx1MDAzZWlvYWRkciwgZmFsc2UpO1xuLVxuIFx0Lyogc2V0IHRyYW5zX3N0YXJ0IHNvIHdlIGRvbiYjMzk7dCBnZXQgc3B1cmlvdXNcbiBcdCAqIHdhdGNoZG9ncyBkdXJpbmcgcmVzZXRcbiBcdCAqL1xuQEAgLTcxODQsMTIgJiM0Mzs3MjI3LDEyIEBAIGludCBzdG1tYWNfeGRwX29wZW4oc3RydWN0IG5ldF9kZXZpY2UgKmRldilcbiBcdFx0aHJ0aW1lcl9zZXR1cChcdTAwMjZ0eF9xLVx1MDAzZXR4dGltZXIsIHN0bW1hY190eF90aW1lciwgQ0xPQ0tfTU9OT1RPTklDLCBIUlRJTUVSX01PREVfUkVMKTtcbiBcdH1cbiBcbi1cdC8qIEVuYWJsZSB0aGUgTUFDIFJ4L1R4ICovXG4tXHRzdG1tYWNfbWFjX3NldChwcml2LCBwcml2LVx1MDAzZWlvYWRkciwgdHJ1ZSk7XG4tXG4gXHQvKiBTdGFydCBSeCBcdTAwMjYgVHggRE1BIENoYW5uZWxzICovXG4gXHRzdG1tYWNfc3RhcnRfYWxsX2RtYShwcml2KTtcbiBcbiYjNDM7XHQvKiBFbmFibGUgdGhlIE1BQyBSeC9UeCAqL1xuJiM0MztcdHN0bW1hY19tYWNfc2V0KHByaXYsIHByaXYtXHUwMDNlaW9hZGRyLCB0cnVlKTtcbiYjNDM7XG4gXHRyZXQgPSBzdG1tYWNfcmVxdWVzdF9pcnEoZGV2KTtcbiBcdGlmIChyZXQpXG4gXHRcdGdvdG8gaXJxX2Vycm9yO1xuQEAgLTgxOTAsMTcgJiM0Mzs4MjMzLDE1IEBAIGludCBzdG1tYWNfc3VzcGVuZChzdHJ1Y3QgZGV2aWNlICpkZXYpXG4gXHRcdHRpbWVyX2RlbGV0ZV9zeW5jKFx1MDAyNnByaXYtXHUwMDNlZWVlX2N0cmxfdGltZXIpO1xuIFx0fVxuIFxuLVx0LyogU3RvcCBUWC9SWCBETUEgKi9cbi1cdHN0bW1hY19zdG9wX2FsbF9kbWEocHJpdik7XG4tXG4tXHRzdG1tYWNfbGVnYWN5X3NlcmRlc19wb3dlcl9kb3duKHByaXYpO1xuLVxuIFx0LyogRW5hYmxlIFBvd2VyIGRvd24gbW9kZSBieSBwcm9ncmFtbWluZyB0aGUgUE1UIHJlZ3MgKi9cbiBcdGlmIChwcml2LVx1MDAzZXdvbG9wdHMpIHtcbiYjNDM7XHRcdHN0bW1hY19zdG9wX2FsbF9kbWEocHJpdik7XG4mIzQzO1x0XHRzdG1tYWNfbGVnYWN5X3NlcmRlc19wb3dlcl9kb3duKHByaXYpO1xuIFx0XHRzdG1tYWNfcG10KHByaXYsIHByaXYtXHUwMDNlaHcsIHByaXYtXHUwMDNld29sb3B0cyk7XG4gXHRcdHByaXYtXHUwMDNlaXJxX3dha2UgPSAxO1xuIFx0fSBlbHNlIHtcbi1cdFx0c3RtbWFjX21hY19zZXQocHJpdiwgcHJpdi1cdTAwM2Vpb2FkZHIsIGZhbHNlKTtcbiYjNDM7XHRcdHN0bW1hY19kYXRhcGF0aF90ZWFyZG93bihwcml2KTtcbiYjNDM7XHRcdHN0bW1hY19sZWdhY3lfc2VyZGVzX3Bvd2VyX2Rvd24ocHJpdik7XG4gXHRcdHBpbmN0cmxfcG1fc2VsZWN0X3NsZWVwX3N0YXRlKHByaXYtXHUwMDNlZGV2aWNlKTtcbiBcdH1cbiBcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNCAwNjozNTwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4zbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5iZXN0LWV4cGVuc2l2ZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7U1RNTUFDX0VUSCYjMzQ7LAogICAgJiMzNDtTVE1NQUNfUENJJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7c3RtbWFjX2R2cl9yZW1vdmUmIzM0OywKICAgICYjMzQ7c3RtbWFjX3N1c3BlbmQmIzM0OywKICAgICYjMzQ7c3RtbWFjX3Jlc3VtZSYjMzQ7LAogICAgJiMzNDtzdG1tYWNfeGRwX29wZW4mIzM0OywKICAgICYjMzQ7c3RtbWFjX3hkcF9yZWxlYXNlJiMzNDssCiAgICAmIzM0O3N0bW1hY19yZWluaXRfcXVldWVzJiMzNDssCiAgICAmIzM0O3N0bW1hY19yZWluaXRfcmluZ3BhcmFtJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGludHJvZHVjZXMgYSBuZXcgb3JkZXJlZCBkYXRhcGF0aCB0ZWFyZG93biBzZXF1ZW5jZSBmb3IgYWxsIHN0bW1hYyBkZXZpY2VzLCBjaGFuZ2luZyB0aGUgb3JkZXIgb2YgRE1BIHN0b3AgYW5kIE1BQyBkaXNhYmxlIG9wZXJhdGlvbnMuIEl0IGFsc28gc3dhcHMgdGhlIG9yZGVyIG9mIE1BQyBlbmFibGUgYW5kIERNQSBzdGFydCBpbiB0aGUgc2V0dXAgcGF0aHMuIFRoZXNlIGFyZSBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGNvcmUgZHJpdmVyIGxvZ2ljIHJlYWNoYWJsZSB2aWEgUENJIGVtdWxhdGlvbi4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLAogIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS4KLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCwKICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4KLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKQogIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy4KCklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2gKdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuCgpXaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzoKMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy4KICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuCiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9ucwogICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS4KMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuCiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KICAgQWxzbyBjaGVjayAmIzM0O2RlcGVuZHMgb24mIzM0OyBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MKICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzCiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IGEwOGZmMzRjYjJjZDJkMjljMWUyNjE1ZGQxNDQ4MGNjYjJkODcwZmIKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgRnJpIEF1ZyAxNCAwNjozNTozMiAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3eGdtYWMyLmggYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd3hnbWFjMi5oCmluZGV4IGY4YWIzNDdmN2I1YjkuLjUwZjljY2Q0YTljNDYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3eGdtYWMyLmgKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHd4Z21hYzIuaApAQCAtMjkxLDYgJiM0MzsyOTEsMTAgQEAKICNkZWZpbmUgWEdNQUNfVFRDCQkJR0VOTUFTSyg2LCA0KQogI2RlZmluZSBYR01BQ19UWFFFTgkJCUdFTk1BU0soMywgMikKICNkZWZpbmUgWEdNQUNfVFNGCQkJQklUKDEpCiYjNDM7I2RlZmluZSBYR01BQ19NVExfVFhRX0RFQlVHKHgpCQkoMHgwMDAwMTEwOCAmIzQzOyAoMHg4MCAqICh4KSkpCiYjNDM7I2RlZmluZSBYR01BQ19UWFFTVFMJCQlCSVQoNCkKJiM0MzsjZGVmaW5lIFhHTUFDX1RSQ1NUUwkJCUdFTk1BU0soMiwgMSkKJiM0MzsjZGVmaW5lIFhHTUFDX1RSQ1NUU19SRUFECQkweDEKICNkZWZpbmUgWEdNQUNfTVRMX1RDeF9FVFNfQ09OVFJPTCh4KQkoMHgwMDAwMTExMCAmIzQzOyAoMHg4MCAqICh4KSkpCiAjZGVmaW5lIFhHTUFDX01UTF9UQ3hfUVVBTlRVTV9XRUlHSFQoeCkJKDB4MDAwMDExMTggJiM0MzsgKDB4ODAgKiAoeCkpKQogI2RlZmluZSBYR01BQ19NVExfVEN4X1NFTkRTTE9QRSh4KQkoMHgwMDAwMTExYyAmIzQzOyAoMHg4MCAqICh4KSkpCkBAIC0zMDYsNiAmIzQzOzMxMCw5IEBACiAjZGVmaW5lIFhHTUFDX0VIRkMJCQlCSVQoNykKICNkZWZpbmUgWEdNQUNfUlNGCQkJQklUKDUpCiAjZGVmaW5lIFhHTUFDX1JUQwkJCUdFTk1BU0soMSwgMCkKJiM0MzsjZGVmaW5lIFhHTUFDX01UTF9SWFFfREVCVUcoeCkJCSgweDAwMDAxMTQ4ICYjNDM7ICgweDgwICogKHgpKSkKJiM0MzsjZGVmaW5lIFhHTUFDX1BSWFEJCQlHRU5NQVNLKDI5LCAxNikKJiM0MzsjZGVmaW5lIFhHTUFDX1JYUVNUUwkJCUdFTk1BU0soNSwgNCkKICNkZWZpbmUgWEdNQUNfTVRMX1JYUV9GTE9XX0NPTlRST0woeCkJKDB4MDAwMDExNTAgJiM0MzsgKDB4ODAgKiAoeCkpKQogI2RlZmluZSBYR01BQ19SRkQJCQlHRU5NQVNLKDMxLCAxNykKICNkZWZpbmUgWEdNQUNfUkZBCQkJR0VOTUFTSygxNSwgMSkKQEAgLTM5MSw2ICYjNDM7Mzk4LDcgQEAKICNkZWZpbmUgWEdNQUNfTklTCQkJQklUKDE1KQogI2RlZmluZSBYR01BQ19BSVMJCQlCSVQoMTQpCiAjZGVmaW5lIFhHTUFDX0ZCRQkJCUJJVCgxMikKJiM0MzsjZGVmaW5lIFhHTUFDX1JQUwkJCUJJVCg4KQogI2RlZmluZSBYR01BQ19SQlUJCQlCSVQoNykKICNkZWZpbmUgWEdNQUNfUkkJCQlCSVQoNikKICNkZWZpbmUgWEdNQUNfVEJVCQkJQklUKDIpCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd3hnbWFjMl9kbWEuYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3eGdtYWMyX2RtYS5jCmluZGV4IGZmODM4NThlYmMxZjMuLmJhNGY1MzVmYjllYjQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3eGdtYWMyX2RtYS5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3eGdtYWMyX2RtYS5jCkBAIC00LDYgJiM0Mzs0LDcgQEAKICAqIHN0bW1hYyBYR01BQyBzdXBwb3J0LgogICovCiAKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvYml0ZmllbGQuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9pb3BvbGwuaCZndDsKICNpbmNsdWRlICYjMzQ7c3RtbWFjLmgmIzM0OwogI2luY2x1ZGUgJiMzNDtkd3hnbWFjMi5oJiMzNDsKQEAgLTI2MSwxMyAmIzQzOzI2MiwxMiBAQCBzdGF0aWMgdm9pZCBkd3hnbWFjMl9kbWFfc3RhcnRfdHgoc3RydWN0IHN0bW1hY19wcml2ICpwcml2LAogewogCXUzMiB2YWx1ZTsKIAomIzQzOwkvKiBUUFMgaXMgbGF0Y2hlZCBvbmNlIHNldCwgc28gY2xlYXIgaXQgb24gZXZlcnkgVHggRE1BIHN0YXJ0LiAqLwomIzQzOwl3cml0ZWwoWEdNQUNfVFBTLCBpb2FkZHIgJiM0MzsgWEdNQUNfRE1BX0NIX1NUQVRVUyhjaGFuKSk7CiYjNDM7CiAJdmFsdWUgPSByZWFkbChpb2FkZHIgJiM0MzsgWEdNQUNfRE1BX0NIX1RYX0NPTlRST0woY2hhbikpOwogCXZhbHVlIHw9IFhHTUFDX1RYU1Q7CiAJd3JpdGVsKHZhbHVlLCBpb2FkZHIgJiM0MzsgWEdNQUNfRE1BX0NIX1RYX0NPTlRST0woY2hhbikpOwotCi0JdmFsdWUgPSByZWFkbChpb2FkZHIgJiM0MzsgWEdNQUNfVFhfQ09ORklHKTsKLQl2YWx1ZSB8PSBYR01BQ19DT05GSUdfVEU7Ci0Jd3JpdGVsKHZhbHVlLCBpb2FkZHIgJiM0MzsgWEdNQUNfVFhfQ09ORklHKTsKIH0KIAogc3RhdGljIHZvaWQgZHd4Z21hYzJfZG1hX3N0b3BfdHgoc3RydWN0IHN0bW1hY19wcml2ICpwcml2LCB2b2lkIF9faW9tZW0gKmlvYWRkciwKQEAgLTI3OCwxMCAmIzQzOzI3OCw2IEBAIHN0YXRpYyB2b2lkIGR3eGdtYWMyX2RtYV9zdG9wX3R4KHN0cnVjdCBzdG1tYWNfcHJpdiAqcHJpdiwgdm9pZCBfX2lvbWVtICppb2FkZHIsCiAJdmFsdWUgPSByZWFkbChpb2FkZHIgJiM0MzsgWEdNQUNfRE1BX0NIX1RYX0NPTlRST0woY2hhbikpOwogCXZhbHVlICZhbXA7PSB+WEdNQUNfVFhTVDsKIAl3cml0ZWwodmFsdWUsIGlvYWRkciAmIzQzOyBYR01BQ19ETUFfQ0hfVFhfQ09OVFJPTChjaGFuKSk7Ci0KLQl2YWx1ZSA9IHJlYWRsKGlvYWRkciAmIzQzOyBYR01BQ19UWF9DT05GSUcpOwotCXZhbHVlICZhbXA7PSB+WEdNQUNfQ09ORklHX1RFOwotCXdyaXRlbCh2YWx1ZSwgaW9hZGRyICYjNDM7IFhHTUFDX1RYX0NPTkZJRyk7CiB9CiAKIHN0YXRpYyB2b2lkIGR3eGdtYWMyX2RtYV9zdGFydF9yeChzdHJ1Y3Qgc3RtbWFjX3ByaXYgKnByaXYsCkBAIC0yODksMTMgJiM0MzsyODUsMTIgQEAgc3RhdGljIHZvaWQgZHd4Z21hYzJfZG1hX3N0YXJ0X3J4KHN0cnVjdCBzdG1tYWNfcHJpdiAqcHJpdiwKIHsKIAl1MzIgdmFsdWU7CiAKJiM0MzsJLyogUlBTIGlzIGxhdGNoZWQgb25jZSBzZXQsIHNvIGNsZWFyIGl0IG9uIGV2ZXJ5IFJ4IERNQSBzdGFydC4gKi8KJiM0MzsJd3JpdGVsKFhHTUFDX1JQUywgaW9hZGRyICYjNDM7IFhHTUFDX0RNQV9DSF9TVEFUVVMoY2hhbikpOwomIzQzOwogCXZhbHVlID0gcmVhZGwoaW9hZGRyICYjNDM7IFhHTUFDX0RNQV9DSF9SWF9DT05UUk9MKGNoYW4pKTsKIAl2YWx1ZSB8PSBYR01BQ19SWFNUOwogCXdyaXRlbCh2YWx1ZSwgaW9hZGRyICYjNDM7IFhHTUFDX0RNQV9DSF9SWF9DT05UUk9MKGNoYW4pKTsKLQotCXZhbHVlID0gcmVhZGwoaW9hZGRyICYjNDM7IFhHTUFDX1JYX0NPTkZJRyk7Ci0JdmFsdWUgfD0gWEdNQUNfQ09ORklHX1JFOwotCXdyaXRlbCh2YWx1ZSwgaW9hZGRyICYjNDM7IFhHTUFDX1JYX0NPTkZJRyk7CiB9CiAKIHN0YXRpYyB2b2lkIGR3eGdtYWMyX2RtYV9zdG9wX3J4KHN0cnVjdCBzdG1tYWNfcHJpdiAqcHJpdiwgdm9pZCBfX2lvbWVtICppb2FkZHIsCkBAIC01OTIsNiAmIzQzOzU4Nyw3NyBAQCBzdGF0aWMgaW50IGR3eGdtYWMyX2VuYWJsZV90YnMoc3RydWN0IHN0bW1hY19wcml2ICpwcml2LCB2b2lkIF9faW9tZW0gKmlvYWRkciwKIAlyZXR1cm4gMDsKIH0KIAomIzQzO3N0YXRpYyBpbnQgZHd4Z21hYzJfdHhfZG1hX3N0b3BwZWQoc3RydWN0IHN0bW1hY19wcml2ICpwcml2LAomIzQzOwkJCQkgICB2b2lkIF9faW9tZW0gKmlvYWRkciwgdTMyIGNoYW4pCiYjNDM7ewomIzQzOwl1MzIgdmFsdWU7CiYjNDM7CWludCByZXQ7CiYjNDM7CiYjNDM7CXJldCA9IHJlYWRsX3BvbGxfdGltZW91dChpb2FkZHIgJiM0MzsgWEdNQUNfRE1BX0NIX1NUQVRVUyhjaGFuKSwgdmFsdWUsCiYjNDM7CQkJCSB2YWx1ZSAmYW1wOyBYR01BQ19UUFMsIDEwMCwgMTAwMDApOwomIzQzOwlpZiAocmV0KQomIzQzOwkJbmV0ZGV2X3dhcm4ocHJpdi0mZ3Q7ZGV2LCAmIzM0O1R4IERNQSBjaGFubmVsICV1IHN0b3AgdGltZW91dFxuJiMzNDssCiYjNDM7CQkJICAgIGNoYW4pOwomIzQzOwomIzQzOwlyZXR1cm4gcmV0OwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW50IGR3eGdtYWMyX3R4X210bF9kcmFpbihzdHJ1Y3Qgc3RtbWFjX3ByaXYgKnByaXYsCiYjNDM7CQkJCSB2b2lkIF9faW9tZW0gKmlvYWRkciwgdTMyIHF1ZXVlKQomIzQzO3sKJiM0MzsJdTMyIHZhbHVlOwomIzQzOwlpbnQgcmV0OwomIzQzOwomIzQzOwkvKiBXYWl0IHVudGlsIHRoZSBxdWV1ZSBpcyBlbXB0eSBhbmQgaXRzIHJlYWQgY29udHJvbGxlciBpcyBubyBsb25nZXIKJiM0MzsJICogcHVsbGluZyBhIGZyYW1lIG91dCB0b3dhcmRzIHRoZSBNQUMuCiYjNDM7CSAqLwomIzQzOwlyZXQgPSByZWFkbF9wb2xsX3RpbWVvdXQoaW9hZGRyICYjNDM7IFhHTUFDX01UTF9UWFFfREVCVUcocXVldWUpLCB2YWx1ZSwKJiM0MzsJCQkJICEodmFsdWUgJmFtcDsgWEdNQUNfVFhRU1RTKSAmYW1wOyZhbXA7CiYjNDM7CQkJCSBGSUVMRF9HRVQoWEdNQUNfVFJDU1RTLCB2YWx1ZSkgIT0KJiM0MzsJCQkJIFhHTUFDX1RSQ1NUU19SRUFELAomIzQzOwkJCQkgMTAwLCAxMDAwMCk7CiYjNDM7CWlmIChyZXQpCiYjNDM7CQluZXRkZXZfd2Fybihwcml2LSZndDtkZXYsICYjMzQ7TVRMIFR4IHF1ZXVlICV1IGRyYWluIHRpbWVvdXRcbiYjMzQ7LAomIzQzOwkJCSAgICBxdWV1ZSk7CiYjNDM7CiYjNDM7CXJldHVybiByZXQ7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbnQgZHd4Z21hYzJfcnhfbXRsX2RyYWluKHN0cnVjdCBzdG1tYWNfcHJpdiAqcHJpdiwKJiM0MzsJCQkJIHZvaWQgX19pb21lbSAqaW9hZGRyLCB1MzIgcXVldWUpCiYjNDM7ewomIzQzOwl1MzIgdmFsdWU7CiYjNDM7CWludCByZXQ7CiYjNDM7CiYjNDM7CS8qIFdhaXQgdW50aWwgbm8gcGFja2V0IGlzIGxlZnQgaW4gdGhlIHF1ZXVlIGFuZCB0aGUgcXVldWUgcmVwb3J0cwomIzQzOwkgKiBpdHNlbGYgZW1wdHkuCiYjNDM7CSAqLwomIzQzOwlyZXQgPSByZWFkbF9wb2xsX3RpbWVvdXQoaW9hZGRyICYjNDM7IFhHTUFDX01UTF9SWFFfREVCVUcocXVldWUpLCB2YWx1ZSwKJiM0MzsJCQkJICFGSUVMRF9HRVQoWEdNQUNfUFJYUSwgdmFsdWUpICZhbXA7JmFtcDsKJiM0MzsJCQkJICFGSUVMRF9HRVQoWEdNQUNfUlhRU1RTLCB2YWx1ZSksCiYjNDM7CQkJCSAxMDAsIDEwMDAwKTsKJiM0MzsJaWYgKHJldCkKJiM0MzsJCW5ldGRldl93YXJuKHByaXYtJmd0O2RldiwgJiMzNDtNVEwgUnggcXVldWUgJXUgZHJhaW4gdGltZW91dFxuJiMzNDssCiYjNDM7CQkJICAgIHF1ZXVlKTsKJiM0MzsKJiM0MzsJcmV0dXJuIHJldDsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGludCBkd3hnbWFjMl9yeF9kbWFfc3RvcHBlZChzdHJ1Y3Qgc3RtbWFjX3ByaXYgKnByaXYsCiYjNDM7CQkJCSAgIHZvaWQgX19pb21lbSAqaW9hZGRyLCB1MzIgY2hhbikKJiM0Mzt7CiYjNDM7CXUzMiB2YWx1ZTsKJiM0MzsJaW50IHJldDsKJiM0MzsKJiM0MzsJcmV0ID0gcmVhZGxfcG9sbF90aW1lb3V0KGlvYWRkciAmIzQzOyBYR01BQ19ETUFfQ0hfU1RBVFVTKGNoYW4pLCB2YWx1ZSwKJiM0MzsJCQkJIHZhbHVlICZhbXA7IFhHTUFDX1JQUywgMTAwLCAxMDAwMCk7CiYjNDM7CWlmIChyZXQpCiYjNDM7CQluZXRkZXZfd2Fybihwcml2LSZndDtkZXYsICYjMzQ7UnggRE1BIGNoYW5uZWwgJXUgc3RvcCB0aW1lb3V0XG4mIzM0OywKJiM0MzsJCQkgICAgY2hhbik7CiYjNDM7CiYjNDM7CXJldHVybiByZXQ7CiYjNDM7fQomIzQzOwogY29uc3Qgc3RydWN0IHN0bW1hY19kbWFfb3BzIGR3eGdtYWMyMTBfZG1hX29wcyA9IHsKIAkucmVzZXQgPSBkd3hnbWFjMl9kbWFfcmVzZXQsCiAJLmluaXQgPSBkd3hnbWFjMl9kbWFfaW5pdCwKQEAgLTYyMCw0ICYjNDM7Njg2LDggQEAgY29uc3Qgc3RydWN0IHN0bW1hY19kbWFfb3BzIGR3eGdtYWMyMTBfZG1hX29wcyA9IHsKIAkuc2V0X2Jmc2l6ZSA9IGR3eGdtYWMyX3NldF9iZnNpemUsCiAJLmVuYWJsZV9zcGggPSBkd3hnbWFjMl9lbmFibGVfc3BoLAogCS5lbmFibGVfdGJzID0gZHd4Z21hYzJfZW5hYmxlX3RicywKJiM0MzsJLnR4X2RtYV9zdG9wcGVkID0gZHd4Z21hYzJfdHhfZG1hX3N0b3BwZWQsCiYjNDM7CS50eF9tdGxfZHJhaW4gPSBkd3hnbWFjMl90eF9tdGxfZHJhaW4sCiYjNDM7CS5yeF9tdGxfZHJhaW4gPSBkd3hnbWFjMl9yeF9tdGxfZHJhaW4sCiYjNDM7CS5yeF9kbWFfc3RvcHBlZCA9IGR3eGdtYWMyX3J4X2RtYV9zdG9wcGVkLAogfTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2h3aWYuaCBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2h3aWYuaAppbmRleCAwNGRhZmVjMDIxYjRmLi44NmY0YWE4ODk2MWM3IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9od2lmLmgKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvaHdpZi5oCkBAIC0yMzEsNiAmIzQzOzIzMSwxNSBAQCBzdHJ1Y3Qgc3RtbWFjX2RtYV9vcHMgewogCQkJICAgYm9vbCBlbiwgdTMyIGNoYW4pOwogCWludCAoKmVuYWJsZV90YnMpKHN0cnVjdCBzdG1tYWNfcHJpdiAqcHJpdiwgdm9pZCBfX2lvbWVtICppb2FkZHIsCiAJCQkgIGJvb2wgZW4sIHUzMiBjaGFuKTsKJiM0MzsJLyogT3JkZXJlZCBkYXRhcGF0aCB0ZWFyZG93biAqLwomIzQzOwlpbnQgKCp0eF9kbWFfc3RvcHBlZCkoc3RydWN0IHN0bW1hY19wcml2ICpwcml2LCB2b2lkIF9faW9tZW0gKmlvYWRkciwKJiM0MzsJCQkgICAgICB1MzIgY2hhbik7CiYjNDM7CWludCAoKnR4X210bF9kcmFpbikoc3RydWN0IHN0bW1hY19wcml2ICpwcml2LCB2b2lkIF9faW9tZW0gKmlvYWRkciwKJiM0MzsJCQkgICAgdTMyIHF1ZXVlKTsKJiM0MzsJaW50ICgqcnhfbXRsX2RyYWluKShzdHJ1Y3Qgc3RtbWFjX3ByaXYgKnByaXYsIHZvaWQgX19pb21lbSAqaW9hZGRyLAomIzQzOwkJCSAgICB1MzIgcXVldWUpOwomIzQzOwlpbnQgKCpyeF9kbWFfc3RvcHBlZCkoc3RydWN0IHN0bW1hY19wcml2ICpwcml2LCB2b2lkIF9faW9tZW0gKmlvYWRkciwKJiM0MzsJCQkgICAgICB1MzIgY2hhbik7CiB9OwogCiAjZGVmaW5lIHN0bW1hY19kbWFfaW5pdChfX3ByaXYsIF9fYXJncy4uLikgXApAQCAtMjkzLDYgJiM0MzszMDIsMTQgQEAgc3RydWN0IHN0bW1hY19kbWFfb3BzIHsKIAlzdG1tYWNfZG9fdm9pZF9jYWxsYmFjayhfX3ByaXYsIGRtYSwgZW5hYmxlX3NwaCwgX19wcml2LCBfX2FyZ3MpCiAjZGVmaW5lIHN0bW1hY19lbmFibGVfdGJzKF9fcHJpdiwgX19hcmdzLi4uKSBcCiAJc3RtbWFjX2RvX2NhbGxiYWNrKF9fcHJpdiwgZG1hLCBlbmFibGVfdGJzLCBfX3ByaXYsIF9fYXJncykKJiM0MzsjZGVmaW5lIHN0bW1hY190eF9kbWFfc3RvcHBlZChfX3ByaXYsIF9fYXJncy4uLikgXAomIzQzOwlzdG1tYWNfZG9fY2FsbGJhY2soX19wcml2LCBkbWEsIHR4X2RtYV9zdG9wcGVkLCBfX3ByaXYsIF9fYXJncykKJiM0MzsjZGVmaW5lIHN0bW1hY190eF9tdGxfZHJhaW4oX19wcml2LCBfX2FyZ3MuLi4pIFwKJiM0MzsJc3RtbWFjX2RvX2NhbGxiYWNrKF9fcHJpdiwgZG1hLCB0eF9tdGxfZHJhaW4sIF9fcHJpdiwgX19hcmdzKQomIzQzOyNkZWZpbmUgc3RtbWFjX3J4X210bF9kcmFpbihfX3ByaXYsIF9fYXJncy4uLikgXAomIzQzOwlzdG1tYWNfZG9fY2FsbGJhY2soX19wcml2LCBkbWEsIHJ4X210bF9kcmFpbiwgX19wcml2LCBfX2FyZ3MpCiYjNDM7I2RlZmluZSBzdG1tYWNfcnhfZG1hX3N0b3BwZWQoX19wcml2LCBfX2FyZ3MuLi4pIFwKJiM0MzsJc3RtbWFjX2RvX2NhbGxiYWNrKF9fcHJpdiwgZG1hLCByeF9kbWFfc3RvcHBlZCwgX19wcml2LCBfX2FyZ3MpCiAKIHN0cnVjdCBtYWNfZGV2aWNlX2luZm87CiBzdHJ1Y3QgbmV0X2RldmljZTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19tYWluLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfbWFpbi5jCmluZGV4IGIyYjdkMDI0MmRkM2MuLjljM2E4ZjEyMmI5NGYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19tYWluLmMKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX21haW4uYwpAQCAtMjU2MCw2ICYjNDM7MjU2MCw1MiBAQCBzdGF0aWMgdm9pZCBzdG1tYWNfc3RvcF9hbGxfZG1hKHN0cnVjdCBzdG1tYWNfcHJpdiAqcHJpdikKIAkJc3RtbWFjX2RlaW5pdF9jaGFuKHByaXYsIHByaXYtJmd0O2lvYWRkciwgY2hhbik7CiB9CiAKJiM0MzsvKioKJiM0MzsgKiBzdG1tYWNfZGF0YXBhdGhfdGVhcmRvd24gLSBvcmRlcmVkIGRhdGFwYXRoIHRlYXJkb3duIGFzIHBlciBJUCBzcGVjaWZpY2F0aW9uCiYjNDM7ICogQHByaXY6IGRyaXZlciBwcml2YXRlIHN0cnVjdHVyZQomIzQzOyAqIERlc2NyaXB0aW9uOgomIzQzOyAqIFdoZW4gdGVhcmRvd24gb3BzIGFyZSBhdmFpbGFibGUsIGZvbGxvdyB0aGUgZGF0YWJvb2sgb3JkZXJlZCB0ZWFyZG93bgomIzQzOyAqIHNlcXVlbmNlLgomIzQzOyAqIEZvbGxvd3MgdGhlIGxlZ2FjeSBzdG9wICYjNDM7IE1BQyBkaXNhYmxlIGZvciB2YXJpYW50cyB3aXRob3V0IHRoZSBmZWF0dXJlLgomIzQzOyAqLwomIzQzO3N0YXRpYyB2b2lkIHN0bW1hY19kYXRhcGF0aF90ZWFyZG93bihzdHJ1Y3Qgc3RtbWFjX3ByaXYgKnByaXYpCiYjNDM7ewomIzQzOwl1MzIgcnhfY2hhbm5lbHNfY291bnQgPSBwcml2LSZndDtwbGF0LSZndDtyeF9xdWV1ZXNfdG9fdXNlOwomIzQzOwl1MzIgdHhfY2hhbm5lbHNfY291bnQgPSBwcml2LSZndDtwbGF0LSZndDt0eF9xdWV1ZXNfdG9fdXNlOwomIzQzOwl1MzIgY2hhbjsKJiM0MzsKJiM0MzsJLyogU3RvcCBhbGwgVFggRE1BIGNoYW5uZWxzICovCiYjNDM7CWZvciAoY2hhbiA9IDA7IGNoYW4gJmx0OyB0eF9jaGFubmVsc19jb3VudDsgY2hhbiYjNDM7JiM0MzspCiYjNDM7CQlzdG1tYWNfc3RvcF90eF9kbWEocHJpdiwgY2hhbik7CiYjNDM7CiYjNDM7CS8qIFdhaXQgZm9yIGV2ZXJ5IFRYIERNQSBjaGFubmVsIHRvIHJlcG9ydCBpdHNlbGYgc3RvcHBlZCAqLwomIzQzOwlpZiAocHJpdi0mZ3Q7aHctJmd0O2RtYS0mZ3Q7dHhfZG1hX3N0b3BwZWQpCiYjNDM7CQlmb3IgKGNoYW4gPSAwOyBjaGFuICZsdDsgdHhfY2hhbm5lbHNfY291bnQ7IGNoYW4mIzQzOyYjNDM7KQomIzQzOwkJCXN0bW1hY190eF9kbWFfc3RvcHBlZChwcml2LCBwcml2LSZndDtpb2FkZHIsIGNoYW4pOwomIzQzOwomIzQzOwkvKiBXYWl0IGZvciB0aGUgTVRMIFRYIHF1ZXVlcyB0byBmaW5pc2ggcHVzaGluZyBpbnRvIHRoZSBNQUMgKi8KJiM0MzsJaWYgKHByaXYtJmd0O2h3LSZndDtkbWEtJmd0O3R4X210bF9kcmFpbikKJiM0MzsJCWZvciAoY2hhbiA9IDA7IGNoYW4gJmx0OyB0eF9jaGFubmVsc19jb3VudDsgY2hhbiYjNDM7JiM0MzspCiYjNDM7CQkJc3RtbWFjX3R4X210bF9kcmFpbihwcml2LCBwcml2LSZndDtpb2FkZHIsIGNoYW4pOwomIzQzOwomIzQzOwkvKiBEaXNhYmxlIHRoZSBNQUMgVFggYW5kIFJYICovCiYjNDM7CXN0bW1hY19tYWNfc2V0KHByaXYsIHByaXYtJmd0O2lvYWRkciwgZmFsc2UpOwomIzQzOwomIzQzOwkvKiBXYWl0IGZvciB0aGUgTVRMIFJYIHF1ZXVlcyB0byBkcmFpbiBpbnRvIHRoZSBSWCBETUEgKi8KJiM0MzsJaWYgKHByaXYtJmd0O2h3LSZndDtkbWEtJmd0O3J4X210bF9kcmFpbikKJiM0MzsJCWZvciAoY2hhbiA9IDA7IGNoYW4gJmx0OyByeF9jaGFubmVsc19jb3VudDsgY2hhbiYjNDM7JiM0MzspCiYjNDM7CQkJc3RtbWFjX3J4X210bF9kcmFpbihwcml2LCBwcml2LSZndDtpb2FkZHIsIGNoYW4pOwomIzQzOwomIzQzOwkvKiBTdG9wIGFsbCBSWCBETUEgY2hhbm5lbHMgKi8KJiM0MzsJZm9yIChjaGFuID0gMDsgY2hhbiAmbHQ7IHJ4X2NoYW5uZWxzX2NvdW50OyBjaGFuJiM0MzsmIzQzOykKJiM0MzsJCXN0bW1hY19zdG9wX3J4X2RtYShwcml2LCBjaGFuKTsKJiM0MzsKJiM0MzsJLyogV2FpdCBmb3IgZXZlcnkgUlggRE1BIGNoYW5uZWwgdG8gcmVwb3J0IGl0c2VsZiBzdG9wcGVkICovCiYjNDM7CWlmIChwcml2LSZndDtody0mZ3Q7ZG1hLSZndDtyeF9kbWFfc3RvcHBlZCkKJiM0MzsJCWZvciAoY2hhbiA9IDA7IGNoYW4gJmx0OyByeF9jaGFubmVsc19jb3VudDsgY2hhbiYjNDM7JiM0MzspCiYjNDM7CQkJc3RtbWFjX3J4X2RtYV9zdG9wcGVkKHByaXYsIHByaXYtJmd0O2lvYWRkciwgY2hhbik7CiYjNDM7fQomIzQzOwogLyoqCiAgKiAgc3RtbWFjX2RtYV9vcGVyYXRpb25fbW9kZSAtIEhXIERNQSBvcGVyYXRpb24gbW9kZQogICogIEBwcml2OiBkcml2ZXIgcHJpdmF0ZSBzdHJ1Y3R1cmUKQEAgLTM2ODUsOSAmIzQzOzM3MzEsNiBAQCBzdGF0aWMgaW50IHN0bW1hY19od19zZXR1cChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQogCQlwcml2LSZndDtody0mZ3Q7cnhfY3N1bSA9IDA7CiAJfQogCi0JLyogRW5hYmxlIHRoZSBNQUMgUngvVHggKi8KLQlzdG1tYWNfbWFjX3NldChwcml2LCBwcml2LSZndDtpb2FkZHIsIHRydWUpOwotCiAJLyogU2V0IHRoZSBIVyBETUEgbW9kZSBhbmQgdGhlIENPRSAqLwogCXN0bW1hY19kbWFfb3BlcmF0aW9uX21vZGUocHJpdik7CiAKQEAgLTM3NDMsNiAmIzQzOzM3ODYsOSBAQCBzdGF0aWMgaW50IHN0bW1hY19od19zZXR1cChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQogCS8qIFN0YXJ0IHRoZSBiYWxsIHJvbGxpbmcuLi4gKi8KIAlzdG1tYWNfc3RhcnRfYWxsX2RtYShwcml2KTsKIAomIzQzOwkvKiBFbmFibGUgdGhlIE1BQyBSeC9UeCAqLwomIzQzOwlzdG1tYWNfbWFjX3NldChwcml2LCBwcml2LSZndDtpb2FkZHIsIHRydWUpOwomIzQzOwogCXBoeWxpbmtfcnhfY2xrX3N0b3BfYmxvY2socHJpdi0mZ3Q7cGh5bGluayk7CiAJc3RtbWFjX3NldF9od192bGFuX21vZGUocHJpdiwgcHJpdi0mZ3Q7aHcpOwogCXBoeWxpbmtfcnhfY2xrX3N0b3BfdW5ibG9jayhwcml2LSZndDtwaHlsaW5rKTsKQEAgLTQyNDAsOSAmIzQzOzQyODYsNiBAQCBzdGF0aWMgdm9pZCBfX3N0bW1hY19yZWxlYXNlKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiAJc3RydWN0IHN0bW1hY19wcml2ICpwcml2ID0gbmV0ZGV2X3ByaXYoZGV2KTsKIAl1OCBjaGFuOwogCi0JLyogU3RvcCBhbmQgZGlzY29ubmVjdCB0aGUgUEhZICovCi0JcGh5bGlua19zdG9wKHByaXYtJmd0O3BoeWxpbmspOwotCiAJc3RtbWFjX2Rpc2FibGVfYWxsX3F1ZXVlcyhwcml2KTsKIAogCWZvciAoY2hhbiA9IDA7IGNoYW4gJmx0OyBwcml2LSZndDtwbGF0LSZndDt0eF9xdWV1ZXNfdG9fdXNlOyBjaGFuJiM0MzsmIzQzOykKQEAgLTQyNTMsOCAmIzQzOzQyOTYsMTEgQEAgc3RhdGljIHZvaWQgX19zdG1tYWNfcmVsZWFzZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQogCS8qIEZyZWUgdGhlIElSUSBsaW5lcyAqLwogCXN0bW1hY19mcmVlX2lycShkZXYsIFJFUV9JUlFfRVJSX0FMTCwgMCk7CiAKLQkvKiBTdG9wIFRYL1JYIERNQSBhbmQgY2xlYXIgdGhlIGRlc2NyaXB0b3JzICovCi0Jc3RtbWFjX3N0b3BfYWxsX2RtYShwcml2KTsKJiM0MzsJLyogSGFzIHRvIHJ1biBiZWZvcmUgbWFjX2xpbmtfZG93bigpIGRpc2FibGVzIHRoZSBNQUMuICovCiYjNDM7CXN0bW1hY19kYXRhcGF0aF90ZWFyZG93bihwcml2KTsKJiM0MzsKJiM0MzsJLyogU3RvcCBhbmQgZGlzY29ubmVjdCB0aGUgUEhZICovCiYjNDM7CXBoeWxpbmtfc3RvcChwcml2LSZndDtwaHlsaW5rKTsKIAogCS8qIFJlbGVhc2UgYW5kIGZyZWUgdGhlIFJ4L1R4IHJlc291cmNlcyAqLwogCWZyZWVfZG1hX2Rlc2NfcmVzb3VyY2VzKHByaXYsICZhbXA7cHJpdi0mZ3Q7ZG1hX2NvbmYpOwpAQCAtNzEwNCwxNSAmIzQzOzcxNTAsMTIgQEAgdm9pZCBzdG1tYWNfeGRwX3JlbGVhc2Uoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIAkvKiBGcmVlIHRoZSBJUlEgbGluZXMgKi8KIAlzdG1tYWNfZnJlZV9pcnEoZGV2LCBSRVFfSVJRX0VSUl9BTEwsIDApOwogCi0JLyogU3RvcCBUWC9SWCBETUEgY2hhbm5lbHMgKi8KLQlzdG1tYWNfc3RvcF9hbGxfZG1hKHByaXYpOwomIzQzOwkvKiBTdG9wIHRoZSBNQUMgYW5kIHRoZSBUWC9SWCBETUEgY2hhbm5lbHMgKi8KJiM0MzsJc3RtbWFjX2RhdGFwYXRoX3RlYXJkb3duKHByaXYpOwogCiAJLyogUmVsZWFzZSBhbmQgZnJlZSB0aGUgUngvVHggcmVzb3VyY2VzICovCiAJZnJlZV9kbWFfZGVzY19yZXNvdXJjZXMocHJpdiwgJmFtcDtwcml2LSZndDtkbWFfY29uZik7CiAKLQkvKiBEaXNhYmxlIHRoZSBNQUMgUngvVHggKi8KLQlzdG1tYWNfbWFjX3NldChwcml2LCBwcml2LSZndDtpb2FkZHIsIGZhbHNlKTsKLQogCS8qIHNldCB0cmFuc19zdGFydCBzbyB3ZSBkb24mIzM5O3QgZ2V0IHNwdXJpb3VzCiAJICogd2F0Y2hkb2dzIGR1cmluZyByZXNldAogCSAqLwpAQCAtNzE4NCwxMiAmIzQzOzcyMjcsMTIgQEAgaW50IHN0bW1hY194ZHBfb3BlbihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQogCQlocnRpbWVyX3NldHVwKCZhbXA7dHhfcS0mZ3Q7dHh0aW1lciwgc3RtbWFjX3R4X3RpbWVyLCBDTE9DS19NT05PVE9OSUMsIEhSVElNRVJfTU9ERV9SRUwpOwogCX0KIAotCS8qIEVuYWJsZSB0aGUgTUFDIFJ4L1R4ICovCi0Jc3RtbWFjX21hY19zZXQocHJpdiwgcHJpdi0mZ3Q7aW9hZGRyLCB0cnVlKTsKLQogCS8qIFN0YXJ0IFJ4ICZhbXA7IFR4IERNQSBDaGFubmVscyAqLwogCXN0bW1hY19zdGFydF9hbGxfZG1hKHByaXYpOwogCiYjNDM7CS8qIEVuYWJsZSB0aGUgTUFDIFJ4L1R4ICovCiYjNDM7CXN0bW1hY19tYWNfc2V0KHByaXYsIHByaXYtJmd0O2lvYWRkciwgdHJ1ZSk7CiYjNDM7CiAJcmV0ID0gc3RtbWFjX3JlcXVlc3RfaXJxKGRldik7CiAJaWYgKHJldCkKIAkJZ290byBpcnFfZXJyb3I7CkBAIC04MTkwLDE3ICYjNDM7ODIzMywxNSBAQCBpbnQgc3RtbWFjX3N1c3BlbmQoc3RydWN0IGRldmljZSAqZGV2KQogCQl0aW1lcl9kZWxldGVfc3luYygmYW1wO3ByaXYtJmd0O2VlZV9jdHJsX3RpbWVyKTsKIAl9CiAKLQkvKiBTdG9wIFRYL1JYIERNQSAqLwotCXN0bW1hY19zdG9wX2FsbF9kbWEocHJpdik7Ci0KLQlzdG1tYWNfbGVnYWN5X3NlcmRlc19wb3dlcl9kb3duKHByaXYpOwotCiAJLyogRW5hYmxlIFBvd2VyIGRvd24gbW9kZSBieSBwcm9ncmFtbWluZyB0aGUgUE1UIHJlZ3MgKi8KIAlpZiAocHJpdi0mZ3Q7d29sb3B0cykgewomIzQzOwkJc3RtbWFjX3N0b3BfYWxsX2RtYShwcml2KTsKJiM0MzsJCXN0bW1hY19sZWdhY3lfc2VyZGVzX3Bvd2VyX2Rvd24ocHJpdik7CiAJCXN0bW1hY19wbXQocHJpdiwgcHJpdi0mZ3Q7aHcsIHByaXYtJmd0O3dvbG9wdHMpOwogCQlwcml2LSZndDtpcnFfd2FrZSA9IDE7CiAJfSBlbHNlIHsKLQkJc3RtbWFjX21hY19zZXQocHJpdiwgcHJpdi0mZ3Q7aW9hZGRyLCBmYWxzZSk7CiYjNDM7CQlzdG1tYWNfZGF0YXBhdGhfdGVhcmRvd24ocHJpdik7CiYjNDM7CQlzdG1tYWNfbGVnYWN5X3NlcmRlc19wb3dlcl9kb3duKHByaXYpOwogCQlwaW5jdHJsX3BtX3NlbGVjdF9zbGVlcF9zdGF0ZShwcml2LSZndDtkZXZpY2UpOwogCX0KIAo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNCAwNjozNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA3Mzg0CgkJCQkJCQlvdXRwdXQ6IDIwCgkJCQkJCQl0aG91Z2h0czogMzczCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgSW1wYWN0IG9mIHRoZSBTVE1NQUMgRHJpdmVyIFBhdGNoKioKCk9rYXksIHNvIEkmIzM5O3ZlIGdvdCB0aGlzIHBhdGNoIHRoYXQgYWRkcyBvcmRlcmVkIGRhdGFwYXRoIHRlYXJkb3duIGxvZ2ljIGZvciBkd3hnbWFjMiB3aXRoaW4gdGhlIHN0bW1hYyBkcml2ZXIuIEl0JiMzOTtzIHRvdWNoaW5nIGBzdG1tYWNfbWFpbi5jYCB0byBzd2FwIG91dCB0aGUgb2xkIHNodXRkb3duIHNlcXVlbmNlIGZvciBgc3RtbWFjX2RhdGFwYXRoX3RlYXJkb3duKClgLCBhbmQgaXQmIzM5O3MgYWxzbyByZW9yZGVyaW5nIHNvbWUgZnVuY3Rpb25zIGluIGBzdG1tYWNfaHdfc2V0dXBgIGFuZCBgc3RtbWFjX3hkcF9vcGVuYC4gTXkgcHJpbWFyeSBjb25jZXJuIG5vdyBpcyB0byBkZXRlcm1pbmUgdGhlIHJlYWNoIG9mIHRoaXMgY2hhbmdlLiBTcGVjaWZpY2FsbHksIEkgbmVlZCB0byBrbm93IGhvdyBsaWtlbHkgaXQgaXMgdGhhdCB0aGlzIGRyaXZlciBpcyBoaXQgaW4gYW55IHZpcnR1YWxpemVkIGVudmlyb25tZW50LgoKVGhlIHN0bW1hYyBkcml2ZXIsIGZyb20gd2hhdCBJIGtub3csIGlzIHVzZWQgZm9yIFN5bm9wc3lzIERlc2lnbldhcmUgTUFDcy4gQSBxdWljayBjaGVjayB0ZWxscyBtZSB0aGF0IHdoaWxlIFFFTVUgZG9lc24mIzM5O3QgZGlyZWN0bHkgZW11bGF0ZSBzdG1tYWMgYnkgZGVmYXVsdCwgdGhhdCBkb2VzbuKAmXQgbWVhbiBpdCYjMzk7cyBuZXZlciB1c2VkLiBJdOKAmXMgZGVmaW5pdGVseSBwbGF1c2libGUgaXQmIzM5O3MgcGFydCBvZiB0aGUgZW11bGF0ZWQgaGFyZHdhcmUgb24gc29tZSBBUk0gYm9hcmRzIHVzaW5nIFFFTVUuIFRpbWUgdG8gY29uZmlybSBpZiBhbnkgUUVNVSBib2FyZHMgYWN0dWFsbHkgKmRvKiB1c2Ugc3RtbWFjLiBDb25zaWRlcmluZyB0aGUgd2lkZSByYW5nZSBvZiBTb0NzIHRoYXQgdXNlIHN0bW1hYywgSSBuZWVkIHRvIGNvbnNpZGVyIGEgcmFuZ2Ugb2YgcG9zc2liaWxpdGllcywgZXZlbiB0aG9zZSBhY2Nlc3NlZCB0aHJvdWdoIGEgUENJIGRldmljZSBvciBwbGF0Zm9ybSBkZXZpY2UgaW4gUUVNVS4gSSBzaG91bGQgY2hlY2sgaWYgdGhlcmUmIzM5O3MgYW55IG1lbnRpb24gb2YgYHN0bW1hY2Agd2l0aGluIHRoZSBRRU1VIGNvbmZpZ3VyYXRpb24gb3IgaWYgYENPTkZJR19TVE1NQUNfRVRIYCBpcyBlbmFibGVkIGluIHN5emthbGxlci4KCkFoYSwgYW5kIHRoZW4gSSByZWNhbGxlZCB0aGF0IGBzdG1tYWNgIGFjdHVhbGx5IGhhcyBhIFBDSSBkcml2ZXIsIGBzdG1tYWNfcGNpLmNgLiBUaGlzIGNvdWxkIG9wZW4gdXAgYSB3aG9sZSBuZXcgYXR0YWNrIHN1cmZhY2UgaWYgd2UgY291bGQgdHJpZ2dlciBpdCB0aHJvdWdoIHNvbWUgZ2VuZXJpYyBQQ0kgZGV2aWNlIHNldHVwLiBJIHNob3VsZCBmaW5kIG91dCBpZiBgc3RtbWFjX3BjaWAgaXMgc3BlY2lmaWNhbGx5IHRpZWQgdG8gc29tZSBJbnRlbCBvciBBTUQgU29DcyBvciBpZiBpdOKAmXMgbW9yZSBnZW5lcmljIGFuZCBhcHBsaWNhYmxlIHRvIGEgd2lkZXIgcmFuZ2Ugb2YgaGFyZHdhcmUgZW11bGF0ZWQgYnkgUUVNVS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNCAwNjozNTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtzdG1tYWNfcGNpJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O0RvY3VtZW50YXRpb24vbmV0d29ya2luZy9kZXZpY2VfZHJpdmVycy9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy5yc3Q9MTA3PXN5bnRheCAoZS5nLiBmb3IgUENJIG1vZHVsZSk6OlxuRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL2RldmljZV9kcml2ZXJzL2V0aGVybmV0L3N0bWljcm8vc3RtbWFjLnJzdC0xMDgtXG5Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvZGV2aWNlX2RyaXZlcnMvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMucnN0OjEwOTogICAgbW9kcHJvYmUgc3RtbWFjX3BjaSBbXHUwMDNjb3B0aW9uXHUwMDNlPVx1MDAzY1ZBTDFcdTAwM2UsXHUwMDNjVkFMMlx1MDAzZSwuLi5dXG5Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvZGV2aWNlX2RyaXZlcnMvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMucnN0LTExMC1cbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9NYWtlZmlsZT01Mz1vYmotJChDT05GSUdfRFdNQUNfTU9UT1JDT01NKVx0JiM0Mzs9IGR3bWFjLW1vdG9yY29tbS5vXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9NYWtlZmlsZTo1NDpzdG1tYWMtcGNpLW9ianM6PSBzdG1tYWNfcGNpLm9cbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1pbnRlbC5jPTI1PXN0cnVjdCBpbnRlbF9wcml2X2RhdGEge1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLWludGVsLmMtMzktICovXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1pbnRlbC5jOjQwOnN0cnVjdCBzdG1tYWNfcGNpX2Z1bmNfZGF0YSB7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1pbnRlbC5jLTQxLVx0dW5zaWduZWQgaW50IGZ1bmM7XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtaW50ZWwuYy00NC1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLWludGVsLmM6NDU6c3RydWN0IHN0bW1hY19wY2lfZG1pX2RhdGEge1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtaW50ZWwuYzo0NjpcdGNvbnN0IHN0cnVjdCBzdG1tYWNfcGNpX2Z1bmNfZGF0YSAqZnVuYztcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLWludGVsLmMtNDctXHRzaXplX3QgbmZ1bmNzO1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLWludGVsLmMtNDktXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1pbnRlbC5jOjUwOnN0cnVjdCBzdG1tYWNfcGNpX2luZm8ge1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtaW50ZWwuYy01MS1cdGludCAoKnNldHVwKShzdHJ1Y3QgcGNpX2RldiAqcGRldiwgc3RydWN0IHBsYXRfc3RtbWFjZW5ldF9kYXRhICpwbGF0KTtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1pbnRlbC5jPTkxPXN0YXRpYyBjb25zdCBpbnQgYWRsbl90c25fbGFuZV9yZWdzW10gPSB7Nn07XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1pbnRlbC5jLTkyLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtaW50ZWwuYzo5MzpzdGF0aWMgaW50IHN0bW1hY19wY2lfZmluZF9waHlfYWRkcihzdHJ1Y3QgcGNpX2RldiAqcGRldixcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLWludGVsLmMtOTQtXHRcdFx0XHQgICAgY29uc3Qgc3RydWN0IGRtaV9zeXN0ZW1faWQgKmRtaV9saXN0KVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtaW50ZWwuYy05NS17XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1pbnRlbC5jOjk2Olx0Y29uc3Qgc3RydWN0IHN0bW1hY19wY2lfZnVuY19kYXRhICpmdW5jX2RhdGE7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1pbnRlbC5jOjk3Olx0Y29uc3Qgc3RydWN0IHN0bW1hY19wY2lfZG1pX2RhdGEgKmRtaV9kYXRhO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtaW50ZWwuYy05OC1cdGNvbnN0IHN0cnVjdCBkbWlfc3lzdGVtX2lkICpkbWlfaWQ7XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtaW50ZWwuYz03ODY9c3RhdGljIGludCBlaGxfc2dtaWlfZGF0YShzdHJ1Y3QgcGNpX2RldiAqcGRldixcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1pbnRlbC5jLTgwNS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLWludGVsLmM6ODA2OnN0YXRpYyBzdHJ1Y3Qgc3RtbWFjX3BjaV9pbmZvIGVobF9zZ21paTFnX2luZm8gPSB7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1pbnRlbC5jLTgwNy1cdC5zZXR1cCA9IGVobF9zZ21paV9kYXRhLFxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLWludGVsLmM9ODEwPXN0YXRpYyBpbnQgZWhsX3JnbWlpX2RhdGEoc3RydWN0IHBjaV9kZXYgKnBkZXYsXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtaW50ZWwuYy04MjAtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1pbnRlbC5jOjgyMTpzdGF0aWMgc3RydWN0IHN0bW1hY19wY2lfaW5mbyBlaGxfcmdtaWkxZ19pbmZvID0ge1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtaW50ZWwuYy04MjItXHQuc2V0dXAgPSBlaGxfcmdtaWlfZGF0YSxcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1pbnRlbC5jPTg0MT1zdGF0aWMgaW50IGVobF9wc2UwX3JnbWlpMWdfZGF0YShzdHJ1Y3QgcGNpX2RldiAqcGRldixcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1pbnRlbC5jLTg0Ny1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLWludGVsLmM6ODQ4OnN0YXRpYyBzdHJ1Y3Qgc3RtbWFjX3BjaV9pbmZvIGVobF9wc2UwX3JnbWlpMWdfaW5mbyA9IHtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLWludGVsLmMtODQ5LVx0LnNldHVwID0gZWhsX3BzZTBfcmdtaWkxZ19kYXRhLFxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLWludGVsLmM9ODUyPXN0YXRpYyBpbnQgZWhsX3BzZTBfc2dtaWkxZ19kYXRhKHN0cnVjdCBwY2lfZGV2ICpwZGV2LFxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLWludGVsLmMtODY5LVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtaW50ZWwuYzo4NzA6c3RhdGljIHN0cnVjdCBzdG1tYWNfcGNpX2luZm8gZWhsX3BzZTBfc2dtaWkxZ19pbmZvID0ge1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtaW50ZWwuYy04NzEtXHQuc2V0dXAgPSBlaGxfcHNlMF9zZ21paTFnX2RhdGEsXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtaW50ZWwuYz04OTA9c3RhdGljIGludCBlaGxfcHNlMV9yZ21paTFnX2RhdGEoc3RydWN0IHBjaV9kZXYgKnBkZXYsXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtaW50ZWwuYy04OTYtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1pbnRlbC5jOjg5NzpzdGF0aWMgc3RydWN0IHN0bW1hY19wY2lfaW5mbyBlaGxfcHNlMV9yZ21paTFnX2luZm8gPSB7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1pbnRlbC5jLTg5OC1cdC5zZXR1cCA9IGVobF9wc2UxX3JnbWlpMWdfZGF0YSxcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1pbnRlbC5jPTkwMT1zdGF0aWMgaW50IGVobF9wc2UxX3NnbWlpMWdfZGF0YShzdHJ1Y3QgcGNpX2RldiAqcGRldixcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1pbnRlbC5jLTkxOC1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLWludGVsLmM6OTE5OnN0YXRpYyBzdHJ1Y3Qgc3RtbWFjX3BjaV9pbmZvIGVobF9wc2UxX3NnbWlpMWdfaW5mbyA9IHtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLWludGVsLmMtOTIwLVx0LnNldHVwID0gZWhsX3BzZTFfc2dtaWkxZ19kYXRhLFxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLWludGVsLmM9OTQ0PXN0YXRpYyBpbnQgdGdsX3NnbWlpX3BoeTBfZGF0YShzdHJ1Y3QgcGNpX2RldiAqcGRldixcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1pbnRlbC5jLTk1Mi1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLWludGVsLmM6OTUzOnN0YXRpYyBzdHJ1Y3Qgc3RtbWFjX3BjaV9pbmZvIHRnbF9zZ21paTFnX3BoeTBfaW5mbyA9IHtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLWludGVsLmMtOTU0LVx0LnNldHVwID0gdGdsX3NnbWlpX3BoeTBfZGF0YSxcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1pbnRlbC5jPTk1Nz1zdGF0aWMgaW50IHRnbF9zZ21paV9waHkxX2RhdGEoc3RydWN0IHBjaV9kZXYgKnBkZXYsXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtaW50ZWwuYy05NjUtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1pbnRlbC5jOjk2NjpzdGF0aWMgc3RydWN0IHN0bW1hY19wY2lfaW5mbyB0Z2xfc2dtaWkxZ19waHkxX2luZm8gPSB7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1pbnRlbC5jLTk2Ny1cdC5zZXR1cCA9IHRnbF9zZ21paV9waHkxX2RhdGEsXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtaW50ZWwuYz05NzA9c3RhdGljIGludCBhZGxzX3NnbWlpX3BoeTBfZGF0YShzdHJ1Y3QgcGNpX2RldiAqcGRldixcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1pbnRlbC5jLTk3OS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLWludGVsLmM6OTgwOnN0YXRpYyBzdHJ1Y3Qgc3RtbWFjX3BjaV9pbmZvIGFkbHNfc2dtaWkxZ19waHkwX2luZm8gPSB7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1pbnRlbC5jLTk4MS1cdC5zZXR1cCA9IGFkbHNfc2dtaWlfcGh5MF9kYXRhLFxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLWludGVsLmM9OTg0PXN0YXRpYyBpbnQgYWRsc19zZ21paV9waHkxX2RhdGEoc3RydWN0IHBjaV9kZXYgKnBkZXYsXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtaW50ZWwuYy05OTMtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1pbnRlbC5jOjk5NDpzdGF0aWMgc3RydWN0IHN0bW1hY19wY2lfaW5mbyBhZGxzX3NnbWlpMWdfcGh5MV9pbmZvID0ge1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtaW50ZWwuYy05OTUtXHQuc2V0dXAgPSBhZGxzX3NnbWlpX3BoeTFfZGF0YSxcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1pbnRlbC5jPTEwMjM9c3RhdGljIGludCBhZGxuX3NnbWlpX3BoeTBfZGF0YShzdHJ1Y3QgcGNpX2RldiAqcGRldixcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1pbnRlbC5jLTEwNDEtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1pbnRlbC5jOjEwNDI6c3RhdGljIHN0cnVjdCBzdG1tYWNfcGNpX2luZm8gYWRsbl9zZ21paTFnX3BoeTBfaW5mbyA9IHtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLWludGVsLmMtMTA0My1cdC5zZXR1cCA9IGFkbG5fc2dtaWlfcGh5MF9kYXRhLFxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLWludGVsLmMtMTA0NS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLWludGVsLmM6MTA0NjpzdGF0aWMgY29uc3Qgc3RydWN0IHN0bW1hY19wY2lfZnVuY19kYXRhIGdhbGlsZW9fc3RtbWFjX2Z1bmNfZGF0YVtdID0ge1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtaW50ZWwuYy0xMDQ3LVx0e1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLWludGVsLmMtMTA1Mi1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLWludGVsLmM6MTA1MzpzdGF0aWMgY29uc3Qgc3RydWN0IHN0bW1hY19wY2lfZG1pX2RhdGEgZ2FsaWxlb19zdG1tYWNfZG1pX2RhdGEgPSB7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1pbnRlbC5jLTEwNTQtXHQuZnVuYyA9IGdhbGlsZW9fc3RtbWFjX2Z1bmNfZGF0YSxcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1pbnRlbC5jLTEwNTctXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1pbnRlbC5jOjEwNTg6c3RhdGljIGNvbnN0IHN0cnVjdCBzdG1tYWNfcGNpX2Z1bmNfZGF0YSBpb3QyMDQwX3N0bW1hY19mdW5jX2RhdGFbXSA9IHtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLWludGVsLmMtMTA1OS1cdHtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1pbnRlbC5jLTEwNjgtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1pbnRlbC5jOjEwNjk6c3RhdGljIGNvbnN0IHN0cnVjdCBzdG1tYWNfcGNpX2RtaV9kYXRhIGlvdDIwNDBfc3RtbWFjX2RtaV9kYXRhID0ge1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtaW50ZWwuYy0xMDcwLVx0LmZ1bmMgPSBpb3QyMDQwX3N0bW1hY19mdW5jX2RhdGEsXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtaW50ZWwuYz0xMTA5PXN0YXRpYyBpbnQgcXVhcmtfZGVmYXVsdF9kYXRhKHN0cnVjdCBwY2lfZGV2ICpwZGV2LFxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLWludGVsLmMtMTExOS1cdCAqL1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtaW50ZWwuYzoxMTIwOlx0cmV0ID0gc3RtbWFjX3BjaV9maW5kX3BoeV9hZGRyKHBkZXYsIHF1YXJrX3BjaV9kbWkpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtaW50ZWwuYy0xMTIxLVx0aWYgKHJldCBcdTAwM2MgMCkge1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLWludGVsLmMtMTE0NC1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLWludGVsLmM6MTE0NTpzdGF0aWMgY29uc3Qgc3RydWN0IHN0bW1hY19wY2lfaW5mbyBxdWFya19pbmZvID0ge1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtaW50ZWwuYy0xMTQ2LVx0LnNldHVwID0gcXVhcmtfZGVmYXVsdF9kYXRhLFxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLWludGVsLmM9MTI2Mz1zdGF0aWMgaW50IGludGVsX2V0aF9wY2lfcHJvYmUoc3RydWN0IHBjaV9kZXYgKnBkZXYsXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtaW50ZWwuYy0xMjY1LXtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLWludGVsLmM6MTI2NjpcdHN0cnVjdCBzdG1tYWNfcGNpX2luZm8gKmluZm8gPSAoc3RydWN0IHN0bW1hY19wY2lfaW5mbyAqKWlkLVx1MDAzZWRyaXZlcl9kYXRhO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtaW50ZWwuYy0xMjY3LVx0c3RydWN0IGludGVsX3ByaXZfZGF0YSAqaW50ZWxfcHJpdjtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1sb29uZ3Nvbi5jPTc2PXN0cnVjdCBsb29uZ3Nvbl9kYXRhIHtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1sb29uZ3Nvbi5jLTgxLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtbG9vbmdzb24uYzo4MjpzdHJ1Y3Qgc3RtbWFjX3BjaV9pbmZvIHtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLWxvb25nc29uLmMtODMtXHRpbnQgKCpzZXR1cCkoc3RydWN0IHBjaV9kZXYgKnBkZXYsIHN0cnVjdCBwbGF0X3N0bW1hY2VuZXRfZGF0YSAqcGxhdCk7XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtbG9vbmdzb24uYz0xMzI9c3RhdGljIGludCBsb29uZ3Nvbl9nbWFjX2RhdGEoc3RydWN0IHBjaV9kZXYgKnBkZXYsXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtbG9vbmdzb24uYy0xNDEtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1sb29uZ3Nvbi5jOjE0MjpzdGF0aWMgc3RydWN0IHN0bW1hY19wY2lfaW5mbyBsb29uZ3Nvbl9nbWFjX3BjaV9pbmZvID0ge1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtbG9vbmdzb24uYy0xNDMtXHQuc2V0dXAgPSBsb29uZ3Nvbl9nbWFjX2RhdGEsXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtbG9vbmdzb24uYz0xNjU9c3RhdGljIGludCBsb29uZ3Nvbl9nbmV0X2RhdGEoc3RydWN0IHBjaV9kZXYgKnBkZXYsXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtbG9vbmdzb24uYy0xNzYtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1sb29uZ3Nvbi5jOjE3NzpzdGF0aWMgc3RydWN0IHN0bW1hY19wY2lfaW5mbyBsb29uZ3Nvbl9nbmV0X3BjaV9pbmZvID0ge1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtbG9vbmdzb24uYy0xNzgtXHQuc2V0dXAgPSBsb29uZ3Nvbl9nbmV0X2RhdGEsXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtbG9vbmdzb24uYz00OTg9c3RhdGljIGludCBsb29uZ3Nvbl9kd21hY19wcm9iZShzdHJ1Y3QgcGNpX2RldiAqcGRldiwgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgKmlkKVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLWxvb25nc29uLmMtNTAxLVx0c3RydWN0IHN0bW1hY19yZXNvdXJjZXMgcmVzID0ge307XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1sb29uZ3Nvbi5jOjUwMjpcdHN0cnVjdCBzdG1tYWNfcGNpX2luZm8gKmluZm87XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1sb29uZ3Nvbi5jLTUwMy1cdHN0cnVjdCBsb29uZ3Nvbl9kYXRhICpsZDtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1sb29uZ3Nvbi5jLTUzNy1cdHBsYXQtXHUwMDNlZml4X3NvY19yZXNldCA9IGxvb25nc29uX2R3bWFjX2ZpeF9yZXNldDtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLWxvb25nc29uLmM6NTM4Olx0cGxhdC1cdTAwM2VzdXNwZW5kID0gc3RtbWFjX3BjaV9wbGF0X3N1c3BlbmQ7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1sb29uZ3Nvbi5jOjUzOTpcdHBsYXQtXHUwMDNlcmVzdW1lID0gc3RtbWFjX3BjaV9wbGF0X3Jlc3VtZTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLWxvb25nc29uLmMtNTQwLVx0bGQtXHUwMDNlZGV2ID0gXHUwMDI2cGRldi1cdTAwM2VkZXY7XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtbG9vbmdzb24uYy01NDItXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1sb29uZ3Nvbi5jOjU0MzpcdGluZm8gPSAoc3RydWN0IHN0bW1hY19wY2lfaW5mbyAqKWlkLVx1MDAzZWRyaXZlcl9kYXRhO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtbG9vbmdzb24uYy01NDQtXHRyZXQgPSBpbmZvLVx1MDAzZXNldHVwKHBkZXYsIHBsYXQpO1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLW1vdG9yY29tbS5jPTE4OD1zdGF0aWMgaW50IG1vdG9yY29tbV9yZXN1bWUoc3RydWN0IGRldmljZSAqZGV2LCB2b2lkICpic3BfcHJpdilcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1tb3RvcmNvbW0uYy0xOTItXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1tb3RvcmNvbW0uYzoxOTM6XHRyZXQgPSBzdG1tYWNfcGNpX3BsYXRfcmVzdW1lKGRldiwgYnNwX3ByaXYpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtbW90b3Jjb21tLmMtMTk0LVx0aWYgKHJldClcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1tb3RvcmNvbW0uYz0yMDg9bW90b3Jjb21tX2RlZmF1bHRfcGxhdF9kYXRhKHN0cnVjdCBwY2lfZGV2ICpwZGV2KVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLW1vdG9yY29tbS5jLTI0OC1cdHBsYXQtXHUwMDNlY29yZV90eXBlXHRcdD0gRFdNQUNfQ09SRV9HTUFDNDtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLW1vdG9yY29tbS5jOjI0OTpcdHBsYXQtXHUwMDNlc3VzcGVuZFx0XHQ9IHN0bW1hY19wY2lfcGxhdF9zdXNwZW5kO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtbW90b3Jjb21tLmMtMjUwLVx0cGxhdC1cdTAwM2VyZXN1bWVcdFx0PSBtb3RvcmNvbW1fcmVzdW1lO1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19saWJwY2kuYy0xMS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19saWJwY2kuYzoxMjppbnQgc3RtbWFjX3BjaV9wbGF0X3N1c3BlbmQoc3RydWN0IGRldmljZSAqZGV2LCB2b2lkICpic3BfcHJpdilcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19saWJwY2kuYy0xMy17XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX2xpYnBjaS5jLTI1LX1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19saWJwY2kuYzoyNjpFWFBPUlRfU1lNQk9MX0dQTChzdG1tYWNfcGNpX3BsYXRfc3VzcGVuZCk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfbGlicGNpLmMtMjctXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfbGlicGNpLmM6Mjg6aW50IHN0bW1hY19wY2lfcGxhdF9yZXN1bWUoc3RydWN0IGRldmljZSAqZGV2LCB2b2lkICpic3BfcHJpdilcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19saWJwY2kuYy0yOS17XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX2xpYnBjaS5jLTQzLX1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19saWJwY2kuYzo0NDpFWFBPUlRfU1lNQk9MX0dQTChzdG1tYWNfcGNpX3BsYXRfcmVzdW1lKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19saWJwY2kuYy00NS1cbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfbGlicGNpLmgtOC1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19saWJwY2kuaDo5OmludCBzdG1tYWNfcGNpX3BsYXRfc3VzcGVuZChzdHJ1Y3QgZGV2aWNlICpkZXYsIHZvaWQgKmJzcF9wcml2KTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19saWJwY2kuaDoxMDppbnQgc3RtbWFjX3BjaV9wbGF0X3Jlc3VtZShzdHJ1Y3QgZGV2aWNlICpkZXYsIHZvaWQgKmJzcF9wcml2KTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19saWJwY2kuaC0xMS1cbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfcGNpLmMtMTgtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfcGNpLmM6MTk6c3RydWN0IHN0bW1hY19wY2lfaW5mbyB7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfcGNpLmMtMjAtXHRpbnQgKCpzZXR1cCkoc3RydWN0IHBjaV9kZXYgKnBkZXYsIHN0cnVjdCBwbGF0X3N0bW1hY2VuZXRfZGF0YSAqcGxhdCk7XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX3BjaS5jPTMzPXN0YXRpYyBpbnQgc3RtbWFjX2RlZmF1bHRfZGF0YShzdHJ1Y3QgcGNpX2RldiAqcGRldixcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfcGNpLmMtNDktXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfcGNpLmM6NTA6c3RhdGljIGNvbnN0IHN0cnVjdCBzdG1tYWNfcGNpX2luZm8gc3RtbWFjX3BjaV9pbmZvID0ge1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX3BjaS5jLTUxLVx0LnNldHVwID0gc3RtbWFjX2RlZmF1bHRfZGF0YSxcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfcGNpLmM9NTQ9c3RhdGljIGludCBzbnBzX2dtYWM1X2RlZmF1bHRfZGF0YShzdHJ1Y3QgcGNpX2RldiAqcGRldixcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfcGNpLmMtMTAxLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX3BjaS5jOjEwMjpzdGF0aWMgY29uc3Qgc3RydWN0IHN0bW1hY19wY2lfaW5mbyBzbnBzX2dtYWM1X3BjaV9pbmZvID0ge1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX3BjaS5jLTEwMy1cdC5zZXR1cCA9IHNucHNfZ21hYzVfZGVmYXVsdF9kYXRhLFxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19wY2kuYy0xMDYtLyoqXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfcGNpLmM6MTA3OiAqIHN0bW1hY19wY2lfcHJvYmVcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19wY2kuYy0xMDgtICpcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfcGNpLmMtMTE3LSAqL1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX3BjaS5jOjExODpzdGF0aWMgaW50IHN0bW1hY19wY2lfcHJvYmUoc3RydWN0IHBjaV9kZXYgKnBkZXYsXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfcGNpLmMtMTE5LVx0XHRcdCAgICBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCAqaWQpXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfcGNpLmMtMTIwLXtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19wY2kuYzoxMjE6XHRzdHJ1Y3Qgc3RtbWFjX3BjaV9pbmZvICppbmZvID0gKHN0cnVjdCBzdG1tYWNfcGNpX2luZm8gKilpZC1cdTAwM2Vkcml2ZXJfZGF0YTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19wY2kuYy0xMjItXHRzdHJ1Y3QgcGxhdF9zdG1tYWNlbmV0X2RhdGEgKnBsYXQ7XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX3BjaS5jLTE3OS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19wY2kuYzoxODA6XHRwbGF0LVx1MDAzZXN1c3BlbmQgPSBzdG1tYWNfcGNpX3BsYXRfc3VzcGVuZDtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19wY2kuYzoxODE6XHRwbGF0LVx1MDAzZXJlc3VtZSA9IHN0bW1hY19wY2lfcGxhdF9yZXN1bWU7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfcGNpLmMtMTgyLVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19wY2kuYy0xODYtLyoqXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfcGNpLmM6MTg3OiAqIHN0bW1hY19wY2lfcmVtb3ZlXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfcGNpLmMtMTg4LSAqXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX3BjaS5jLTE5MS0gKi9cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19wY2kuYzoxOTI6c3RhdGljIHZvaWQgc3RtbWFjX3BjaV9yZW1vdmUoc3RydWN0IHBjaV9kZXYgKnBkZXYpXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfcGNpLmMtMTkzLXtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfcGNpLmM9MjAzPXN0YXRpYyBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCBzdG1tYWNfaWRfdGFibGVbXSA9IHtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19wY2kuYzoyMDQ6XHR7IFBDSV9ERVZJQ0VfREFUQShTVE1NQUMsIFNUTU1BQywgXHUwMDI2c3RtbWFjX3BjaV9pbmZvKSB9LFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX3BjaS5jOjIwNTpcdHsgUENJX0RFVklDRV9EQVRBKFNUTUlDUk8sIE1BQywgXHUwMDI2c3RtbWFjX3BjaV9pbmZvKSB9LFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX3BjaS5jLTIwNi1cdHsgUENJX0RFVklDRV9EQVRBKFNZTk9QU1lTLCBHTUFDNV9JRCwgXHUwMDI2c25wc19nbWFjNV9wY2lfaW5mbykgfSxcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfcGNpLmM9MjEwPU1PRFVMRV9ERVZJQ0VfVEFCTEUocGNpLCBzdG1tYWNfaWRfdGFibGUpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX3BjaS5jLTIxMS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19wY2kuYzoyMTI6c3RhdGljIHN0cnVjdCBwY2lfZHJpdmVyIHN0bW1hY19wY2lfZHJpdmVyID0ge1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX3BjaS5jLTIxMy1cdC5uYW1lID0gU1RNTUFDX1JFU09VUkNFX05BTUUsXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfcGNpLmMtMjE0LVx0LmlkX3RhYmxlID0gc3RtbWFjX2lkX3RhYmxlLFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX3BjaS5jOjIxNTpcdC5wcm9iZSA9IHN0bW1hY19wY2lfcHJvYmUsXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfcGNpLmM6MjE2Olx0LnJlbW92ZSA9IHN0bW1hY19wY2lfcmVtb3ZlLFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX3BjaS5jLTIxNy1cdC5kcml2ZXIgICAgICAgICA9IHtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfcGNpLmMtMjIxLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX3BjaS5jOjIyMjptb2R1bGVfcGNpX2RyaXZlcihzdG1tYWNfcGNpX2RyaXZlcik7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfcGNpLmMtMjIzLVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE0IDA2OjM1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE1NTQzCgkJCQkJCQlvdXRwdXQ6IDI1CgkJCQkJCQl0aG91Z2h0czogMTkxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEluaXRpYWwgQXNzZXNzbWVudCBvZiB0aGUgU2l0dWF0aW9uKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCBgc3RtbWFjX3BjaWAuIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzIHRoYXQgdGhpcyBpcyBhIFBDSSBkcml2ZXIgdGhhdCBzeXprYWxsZXIgc2hvdWxkIGJlIGFibGUgdG8gcHJvYmUsIG5vIHByb2JsZW0uIEkgbmVlZCB0byBtYWtlIHN1cmUgSSYjMzk7bSByaWdodCBhYm91dCB0aGF0LiBIbW1tLCBob2xkIG9uLi4uIGBzdG1tYWNgIHNlZW1zIHRvIGJlIGZhaXJseSB3aWRlbHkgdXNlZCwgcG9wcGluZyB1cCBpbiBgZHdtYWMtaW50ZWwuY2AsIGBkd21hYy1sb29uZ3Nvbi5jYCwgYW5kIGBkd21hYy1tb3RvcmNvbW0uY2AgYXMgd2VsbC4gVGhhdCBicm9hZGVucyB0aGUgc2NvcGUgb2YgdGhpbmdzLiBBbmQgeWVzLCBjb25maXJtaW5nIG15IGluaXRpYWwgaHVuY2gsIGBzdG1tYWNfcGNpYCBzcGVjaWZpY2FsbHkgYmluZHMgaXRzZWxmIHRvIGBQQ0lfREVWSUNFX0RBVEEoU1RNTUFDLCBTVE1NQUMsICZhbXA7c3RtbWFjX3BjaV9pbmZvKWAuIFRoaXMgbWVhbnMgc3l6a2FsbGVyIGNhbiBkZWZpbml0ZWx5IGZ1enogaXQgZWZmZWN0aXZlbHkgYnkgZW11bGF0aW5nIGEgUENJIGRldmljZSB3aXRoIHRoZSByaWdodCB2ZW5kb3IgYW5kIGRldmljZSBJRC4gVGhhdOKAmXMgYSBnb29kIHN0YXJ0aW5nIHBvaW50LiBOb3csIHRoZSBtb3JlIGludGVyZXN0aW5nIHF1ZXN0aW9uOiBpcyBgZHd4Z21hYzJgIHdpdGhpbiByZWFjaD8gSSBuZWVkIHRvIGFuYWx5emUgdGhpcyBmdXJ0aGVyLiBUaGlzIHJlY2VudCBwYXRjaCBzZWVtcyB0byBiZSBmb2N1c2VkIG9uIGBkd3hnbWFjMl9kbWEuY2AsIHdoaWNoIGltcGxlbWVudHMgYGR3eGdtYWMyMTBfZG1hX29wc2AuIFRpbWUgdG8gdHJhY2UgdGhhdCwgc2VlIHdoZXJlIGBkd3hnbWFjMjEwX2RtYV9vcHNgIGlzIGFjdHVhbGx5IHVzZWQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTQgMDY6MzU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7ZHd4Z21hYzIxMF9kbWFfb3BzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3eGdtYWMyLmg9NDc0PWV4dGVybiBjb25zdCBzdHJ1Y3Qgc3RtbWFjX29wcyBkd3hsZ21hYzJfb3BzO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHd4Z21hYzIuaDo0NzU6ZXh0ZXJuIGNvbnN0IHN0cnVjdCBzdG1tYWNfZG1hX29wcyBkd3hnbWFjMjEwX2RtYV9vcHM7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd3hnbWFjMi5oLTQ3Ni1leHRlcm4gY29uc3Qgc3RydWN0IHN0bW1hY19kZXNjX29wcyBkd3hnbWFjMjEwX2Rlc2Nfb3BzO1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3eGdtYWMyX2RtYS5jPTY0Nj1zdGF0aWMgaW50IGR3eGdtYWMyX3J4X2RtYV9zdG9wcGVkKHN0cnVjdCBzdG1tYWNfcHJpdiAqcHJpdixcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd3hnbWFjMl9kbWEuYy02NjAtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd3hnbWFjMl9kbWEuYzo2NjE6Y29uc3Qgc3RydWN0IHN0bW1hY19kbWFfb3BzIGR3eGdtYWMyMTBfZG1hX29wcyA9IHtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3eGdtYWMyX2RtYS5jLTY2Mi1cdC5yZXNldCA9IGR3eGdtYWMyX2RtYV9yZXNldCxcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9od2lmLmM9MTExPXN0YXRpYyBjb25zdCBzdHJ1Y3Qgc3RtbWFjX2h3aWZfZW50cnkge1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2h3aWYuYy0yNTctXHRcdC5kZXNjID0gXHUwMDI2ZHd4Z21hYzIxMF9kZXNjX29wcyxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2h3aWYuYzoyNTg6XHRcdC5kbWEgPSBcdTAwMjZkd3hnbWFjMjEwX2RtYV9vcHMsXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9od2lmLmMtMjU5LVx0XHQubWFjID0gXHUwMDI2ZHd4Z21hYzIxMF9vcHMsXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvaHdpZi5jLTI3OS1cdFx0LmRlc2MgPSBcdTAwMjZkd3hnbWFjMjEwX2Rlc2Nfb3BzLFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvaHdpZi5jOjI4MDpcdFx0LmRtYSA9IFx1MDAyNmR3eGdtYWMyMTBfZG1hX29wcyxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2h3aWYuYy0yODEtXHRcdC5tYWMgPSBcdTAwMjZkd3hsZ21hYzJfb3BzLFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE0IDA2OjM1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE2NjUxCgkJCQkJCQlvdXRwdXQ6IDIyCgkJCQkJCQl0aG91Z2h0czogMTYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcy4gSGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIGluaXRpYWwgdGhvdWdodHM6CgoqKkFuYWx5emluZyBgaHdpZi5jYCYjMzk7cyBJbnRlcmFjdGlvbiB3aXRoIERhdGEgRW50cmllcyoqCgpSaWdodCwgc28gSSYjMzk7bSBsb29raW5nIGF0IGBod2lmLmNgLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcywgJiMzNDtPa2F5LCB3aGF0IGRvZXMgKnRoaXMqIHBhcnRpY3VsYXIgY29kZSBtb2R1bGUgYWN0dWFsbHkgZG8gd2l0aCB0aGVzZSBkYXRhIGVudHJpZXM/JiMzNDsgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIHByb2Nlc3NpbmcgZmxvdywgdGhlIG1hbmlwdWxhdGlvbnMsIGFuZCB0aGUgZXZlbnR1YWwgZGVzdGluYXRpb24gb3IgcHVycG9zZSBvZiB0aGVzZSBlbnRyaWVzIHdpdGhpbiB0aGUgY29udGV4dCBvZiB0aGUgaGFyZHdhcmUgaW50ZXJmYWNlLiBJIG5lZWQgdG8gZmlndXJlIG91dCB0aGUgcm9sZXMuIElzIGl0IGEgcmVhZGVyPyBBIHdyaXRlcj8gQSB0cmFuc2xhdG9yPyBBIGZpbHRlcj8gUHJvYmFibHkgYSBjb21iaW5hdGlvbi4gQnV0IGZpcnN0LCB0aGUgbWVjaGFuaWNzIG9mIGl0cyBpbnRlcmFjdGlvbiBhcmUgcGFyYW1vdW50LiBJIG5lZWQgdG8gdHJhY2UgdGhlIGRhdGEmIzM5O3Mgam91cm5leSBhbmQgc2VlIGhvdyB0aGUgZnVuY3Rpb25zIHdpdGhpbiBgaHdpZi5jYCBoYW5kbGUgdGhlbS4gVGhhdCYjMzk7cyB0aGUga2V5IHRvIHVuZGVyc3RhbmRpbmcgaXRzIG92ZXJhbGwgaW1wYWN0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE0IDA2OjM1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2R3eGdtYWMyMTBfb3BzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3eGdtYWMyLmgtNDcyLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHd4Z21hYzIuaDo0NzM6ZXh0ZXJuIGNvbnN0IHN0cnVjdCBzdG1tYWNfb3BzIGR3eGdtYWMyMTBfb3BzO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHd4Z21hYzIuaC00NzQtZXh0ZXJuIGNvbnN0IHN0cnVjdCBzdG1tYWNfb3BzIGR3eGxnbWFjMl9vcHM7XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHd4Z21hYzJfY29yZS5jPTE0MTM9c3RhdGljIHZvaWQgZHd4Z21hYzJfc2V0X2FycF9vZmZsb2FkKHN0cnVjdCBtYWNfZGV2aWNlX2luZm8gKmh3LCBib29sIGVuLFxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3eGdtYWMyX2NvcmUuYy0xNDI4LVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHd4Z21hYzJfY29yZS5jOjE0Mjk6Y29uc3Qgc3RydWN0IHN0bW1hY19vcHMgZHd4Z21hYzIxMF9vcHMgPSB7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd3hnbWFjMl9jb3JlLmMtMTQzMC1cdC5jb3JlX2luaXQgPSBkd3hnbWFjMl9jb3JlX2luaXQsXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvaHdpZi5jPTExMT1zdGF0aWMgY29uc3Qgc3RydWN0IHN0bW1hY19od2lmX2VudHJ5IHtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9od2lmLmMtMjU4LVx0XHQuZG1hID0gXHUwMDI2ZHd4Z21hYzIxMF9kbWFfb3BzLFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvaHdpZi5jOjI1OTpcdFx0Lm1hYyA9IFx1MDAyNmR3eGdtYWMyMTBfb3BzLFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvaHdpZi5jLTI2MC1cdFx0LnZsYW4gPSBcdTAwMjZkd3hnbWFjMjEwX3ZsYW5fb3BzLFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE0IDA2OjM1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE3MzI2CgkJCQkJCQlvdXRwdXQ6IDIyCgkJCQkJCQl0aG91Z2h0czogMjEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgc3VtbWFyeSwgYXMgaWYgSSB3ZXJlIHRoaW5raW5nIHRoZXNlIHRob3VnaHRzOgoKKipBbmFseXppbmcgdGhlIFNUTU1BQyBIYXJkd2FyZSBJbnRlcmZhY2UgRW50cnkgUG9pbnQqKgoKT2theSwgdGltZSB0byBkaWcgaW4uIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGUgaGFyZHdhcmUgaW50ZXJmYWNlIGlzIGluaXRpYWxpemVkIGFuZCBhY2Nlc3NlZCBmb3IgdGhpcyBTVE1NQUMgZHJpdmVyLiBUaGUgbW9zdCBsb2dpY2FsIHN0YXJ0aW5nIHBvaW50IGlzIHByb2JhYmx5IGBzdG1tYWNfaHdpZl9lbnRyeWAgd2l0aGluIGBod2lmLmNgLiBJIGV4cGVjdCB0aGlzIGZ1bmN0aW9uIHRvIGJlIHRoZSBjZW50cmFsIHBvaW50IG9mIGludGVyYWN0aW9uIHdpdGggdGhlIGhhcmR3YXJlIGFic3RyYWN0aW9uIGxheWVyIChIQUwpIGZvciB0aGlzIHNwZWNpZmljIEV0aGVybmV0IE1BQy4gSSBhbnRpY2lwYXRlIGZpbmRpbmcgaW5pdGlhbGl6YXRpb24gcm91dGluZXMsIHJlZ2lzdGVyIG1hcHBpbmcgc2V0dXBzLCBhbmQgbGlrZWx5IGludGVycnVwdCBjb25maWd1cmF0aW9uIHJlbGF0ZWQgdG8gdGhlIGhhcmR3YXJlIHdpdGhpbiB0aGlzIGVudHJ5IGZ1bmN0aW9uIG9yIGEgY2FsbCBjaGFpbiBvcmlnaW5hdGluZyBmcm9tIGl0LiBUaGlzIHdpbGwgcHJvdmlkZSB2YWx1YWJsZSBpbnNpZ2h0IGludG8gaG93IHRoZSBkcml2ZXIgaW50ZXJhY3RzIHdpdGggdGhlIHVuZGVybHlpbmcgaGFyZHdhcmUgY29tcG9uZW50cyBhbmQgaG93IGl0JiMzOTtzIGNvbmZpZ3VyZWQuIExldCYjMzk7cyBnZXQgdG8gaXQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE0IDA2OjM2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3N0bW1hY19od2lmX2VudHJ5JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2h3aWYuYz0xMDA9aW50IHN0bW1hY19yZXNldChzdHJ1Y3Qgc3RtbWFjX3ByaXYgKnByaXYpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvaHdpZi5jLTExMC1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2h3aWYuYzoxMTE6c3RhdGljIGNvbnN0IHN0cnVjdCBzdG1tYWNfaHdpZl9lbnRyeSB7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9od2lmLmMtMTEyLVx0ZW51bSBkd21hY19jb3JlX3R5cGUgY29yZV90eXBlO1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2h3aWYuYy0yOTItXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9od2lmLmM6MjkzOnN0YXRpYyBjb25zdCBzdHJ1Y3Qgc3RtbWFjX2h3aWZfZW50cnkgKlxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvaHdpZi5jLTI5NC1zdG1tYWNfaHdpZl9maW5kKGVudW0gZHdtYWNfY29yZV90eXBlIGNvcmVfdHlwZSwgdTggc25wc3ZlciwgdTggZGV2X2lkKVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvaHdpZi5jLTI5NS17XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9od2lmLmM6Mjk2Olx0Y29uc3Qgc3RydWN0IHN0bW1hY19od2lmX2VudHJ5ICplbnRyeTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2h3aWYuYy0yOTctXHRpbnQgaTtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9od2lmLmM9MzE3PWludCBzdG1tYWNfaHdpZl9pbml0KHN0cnVjdCBzdG1tYWNfcHJpdiAqcHJpdilcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9od2lmLmMtMzE5LVx0ZW51bSBkd21hY19jb3JlX3R5cGUgY29yZV90eXBlID0gcHJpdi1cdTAwM2VwbGF0LVx1MDAzZWNvcmVfdHlwZTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2h3aWYuYzozMjA6XHRjb25zdCBzdHJ1Y3Qgc3RtbWFjX2h3aWZfZW50cnkgKmVudHJ5O1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvaHdpZi5jLTMyMS1cdHN0cnVjdCBzdG1tYWNfdmVyc2lvbiB2ZXJzaW9uO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNCAwNjozNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxODA1MQoJCQkJCQkJb3V0cHV0OiA0NgoJCQkJCQkJdGhvdWdodHM6IDI2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKk1hcHBpbmcgYGNvcmVfdHlwZWAgdG8gYGR3eGdtYWMyMTBfZG1hX29wc2AqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IGhvdyB0aGUgYGNvcmVfdHlwZWAgZW51bWVyYXRpb24gcmVsYXRlcyB0byB0aGUgYGR3eGdtYWMyMTBfZG1hX29wc2Agc3RydWN0dXJlcy4gSXQmIzM5O3MgYSBjbGFzc2ljIHNpdHVhdGlvbiB3aGVyZSBhIGhhcmR3YXJlIGFic3RyYWN0aW9uIG5lZWRzIHRvIGJlIGxpbmtlZCB0byBhIHNwZWNpZmljIGltcGxlbWVudGF0aW9uLiBJJiMzOTttIHByb2JhYmx5IGRlYWxpbmcgd2l0aCBhIHN5c3RlbSB0aGF0IGhhcyBwb3RlbnRpYWxseSBtdWx0aXBsZSBETUEgY29udHJvbGxlcnMsIG9yIGF0IGxlYXN0IGRpZmZlcmVudCBjb25maWd1cmF0aW9ucywgYW5kIHRoZSBgY29yZV90eXBlYCBpcyB0aGUga2V5IHRvIHNlbGVjdGluZyB0aGUgcmlnaHQgc2V0IG9mIERNQSBvcGVyYXRpb25zLgoKTXkgcHJpbWFyeSBmb2N1cyByaWdodCBub3cgaXMgdG8gdW5kZXJzdGFuZCB0aGUgbG9va3VwIG1lY2hhbmlzbS4gSXMgaXQgYSBzaW1wbGUgc3dpdGNoIHN0YXRlbWVudD8gTWF5YmUgYSBsb29rdXAgdGFibGU/IEFyZSB0aGVyZSBhbnkgaW5kaXJlY3QgbGF5ZXJzIG9mIGFic3RyYWN0aW9uIEkgbmVlZCB0byB1bmRlcnN0YW5kPyBHaXZlbiB0aGF0IHRoaXMgaXMgbGlrZWx5IHRpZWQgdG8gdGhlIGRlc2lnbiBvZiB0aGUgZHJpdmVyIGFuZCBwbGF0Zm9ybSwgSSBuZWVkIHRvIGtub3c6IEFyZSB0aGVyZSBhbnkgY29tcGF0aWJpbGl0eSBsYXllcnMsIG9yIHNwZWNpYWwgY2FzZXMgdG8gYmUgYXdhcmUgb2Y/IEFyZSB0aGVyZSBhcmNoaXRlY3R1cmFsIGNvbnNpZGVyYXRpb25zIGhlcmU/IERvZXMgdGhpcyByZWxhdGlvbnNoaXAgYWZmZWN0IHRoZSBwb3dlciBtYW5hZ2VtZW50LCBjbG9jayBnYXRpbmcsIG9yIGludGVycnVwdCBoYW5kbGluZyBiZWhhdmlvcj8KClVsdGltYXRlbHksIHRoZSBnb2FsIGlzIGEgY29tcGxldGUgcGljdHVyZS4gT25jZSBJJiMzOTt2ZSBtYXBwZWQgdGhlIHBvdGVudGlhbCB2YWx1ZXMgb2YgYGNvcmVfdHlwZWAgdG8gdGhlIGNvcnJlY3QgYGR3eGdtYWMyMTBfZG1hX29wc2Agc3RydWN0dXJlLCBJJiMzOTtsbCBrbm93IHdoZXJlIHRvIGxvb2sgbmV4dCB0byB1bmRlcnN0YW5kIHRoZSBkZXRhaWxzIG9mIHRoZSBETUEgb3BlcmF0aW9ucy4gSSBoYXZlIGEgbG90IG9mIGRlYnVnZ2luZyB0byBkbyEKCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTQgMDY6MzY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9od2lmLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAyNTAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNTAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDI1MDpcdFx0XHQuZGV2X2lkID0gRFdYR01BQ19JRCxcbiAyNTE6XHRcdFx0LnJlZ3MgPSB7XG4gMjUyOlx0XHRcdFx0LnB0cF9vZmYgPSBQVFBfWEdNQUNfT0ZGU0VULFxuIDI1MzpcdFx0XHRcdC5tbWNfb2ZmID0gTU1DX1hHTUFDX09GRlNFVCxcbiAyNTQ6XHRcdFx0XHQuZXN0X29mZiA9IEVTVF9YR01BQ19PRkZTRVQsXG4gMjU1Olx0XHRcdFx0LmZwZV9yZWcgPSBcdTAwMjZkd3hnbWFjM19mcGVfcmVnLFxuIDI1NjpcdFx0XHR9LFxuIDI1NzpcdFx0XHQuZGVzYyA9IFx1MDAyNmR3eGdtYWMyMTBfZGVzY19vcHMsXG4gMjU4Olx0XHRcdC5kbWEgPSBcdTAwMjZkd3hnbWFjMjEwX2RtYV9vcHMsXG4gMjU5Olx0XHRcdC5tYWMgPSBcdTAwMjZkd3hnbWFjMjEwX29wcyxcbiAyNjA6XHRcdFx0LnZsYW4gPSBcdTAwMjZkd3hnbWFjMjEwX3ZsYW5fb3BzLFxuIDI2MTpcdFx0XHQuaHd0aW1lc3RhbXAgPSBcdTAwMjZzdG1tYWNfcHRwLFxuIDI2MjpcdFx0XHQucHRwID0gXHUwMDI2c3RtbWFjX3B0cF9jbG9ja19vcHMsXG4gMjYzOlx0XHRcdC5tb2RlID0gTlVMTCxcbiAyNjQ6XHRcdFx0LnRjID0gXHUwMDI2ZHdtYWM1MTBfdGNfb3BzLFxuIDI2NTpcdFx0XHQubW1jID0gXHUwMDI2ZHd4Z21hY19tbWNfb3BzLFxuIDI2NjpcdFx0XHQuZXN0ID0gXHUwMDI2ZHdtYWM1MTBfZXN0X29wcyxcbiAyNjc6XHRcdFx0LnNldHVwID0gZHd4Z21hYzJfc2V0dXAsXG4gMjY4Olx0XHRcdC5xdWlya3MgPSBOVUxMLFxuIDI2OTpcdFx0fSwge1xuIDI3MDpcdFx0XHQuY29yZV90eXBlID0gRFdNQUNfQ09SRV9YR01BQyxcbiAyNzE6XHRcdFx0Lm1pbl9pZCA9IERXWExHTUFDX0NPUkVfMl8wMCxcbiAyNzI6XHRcdFx0LmRldl9pZCA9IERXWExHTUFDX0lELFxuIDI3MzpcdFx0XHQucmVncyA9IHtcbiAyNzQ6XHRcdFx0XHQucHRwX29mZiA9IFBUUF9YR01BQ19PRkZTRVQsXG4gMjc1Olx0XHRcdFx0Lm1tY19vZmYgPSBNTUNfWEdNQUNfT0ZGU0VULFxuIDI3NjpcdFx0XHRcdC5lc3Rfb2ZmID0gRVNUX1hHTUFDX09GRlNFVCxcbiAyNzc6XHRcdFx0XHQuZnBlX3JlZyA9IFx1MDAyNmR3eGdtYWMzX2ZwZV9yZWcsXG4gMjc4Olx0XHRcdH0sXG4gMjc5Olx0XHRcdC5kZXNjID0gXHUwMDI2ZHd4Z21hYzIxMF9kZXNjX29wcyxcbiAyODA6XHRcdFx0LmRtYSA9IFx1MDAyNmR3eGdtYWMyMTBfZG1hX29wcyxcbiAyODE6XHRcdFx0Lm1hYyA9IFx1MDAyNmR3eGxnbWFjMl9vcHMsXG4gMjgyOlx0XHRcdC52bGFuID0gXHUwMDI2ZHd4bGdtYWMyX3ZsYW5fb3BzLFxuIDI4MzpcdFx0XHQuaHd0aW1lc3RhbXAgPSBcdTAwMjZzdG1tYWNfcHRwLFxuIDI4NDpcdFx0XHQucHRwID0gXHUwMDI2c3RtbWFjX3B0cF9jbG9ja19vcHMsXG4gMjg1Olx0XHRcdC5tb2RlID0gTlVMTCxcbiAyODY6XHRcdFx0LnRjID0gXHUwMDI2ZHdtYWM1MTBfdGNfb3BzLFxuIDI4NzpcdFx0XHQubW1jID0gXHUwMDI2ZHd4Z21hY19tbWNfb3BzLFxuIDI4ODpcdFx0XHQuZXN0ID0gXHUwMDI2ZHdtYWM1MTBfZXN0X29wcyxcbiAyODk6XHRcdFx0LnNldHVwID0gZHd4bGdtYWMyX3NldHVwLFxuIDI5MDpcdFx0fSxcbiAyOTE6XHR9O1xuIDI5MjpcdFxuIDI5MzpcdHN0YXRpYyBjb25zdCBzdHJ1Y3Qgc3RtbWFjX2h3aWZfZW50cnkgKlxuIDI5NDpcdHN0bW1hY19od2lmX2ZpbmQoZW51bSBkd21hY19jb3JlX3R5cGUgY29yZV90eXBlLCB1OCBzbnBzdmVyLCB1OCBkZXZfaWQpXG4gMjk1Olx0e1xuIDI5NjpcdFx0Y29uc3Qgc3RydWN0IHN0bW1hY19od2lmX2VudHJ5ICplbnRyeTtcbiAyOTc6XHRcdGludCBpO1xuIDI5ODpcdFxuIDI5OTpcdFx0Zm9yIChpID0gQVJSQVlfU0laRShzdG1tYWNfaHcpIC0gMTsgaSBcdTAwM2U9IDA7IGktLSkge1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNCAwNjozNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxOTM1NgoJCQkJCQkJb3V0cHV0OiAyMwoJCQkJCQkJdGhvdWdodHM6IDYzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCBwcm9jZXNzLCBmcm9tIGFuIGV4cGVydCYjMzk7cyBwZXJzcGVjdGl2ZToKCioqSW52ZXN0aWdhdGluZyBYR01BQyBDb3JlIERyaXZlciBBc3NvY2lhdGlvbioqCgpBbHJpZ2h0LCBzbyB0aGUgYERXTUFDX0NPUkVfWEdNQUNgIGNvcmUgaXMgYXNzb2NpYXRlZCB3aXRoIHRoZSBgZHd4Z21hYzIxMF9kbWFfb3BzYCBvcGVyYXRpb25zLiBNeSBtaW5kIGltbWVkaWF0ZWx5IGp1bXBzIHRvIHRoZSBQQ0kgZHJpdmVycywgc3BlY2lmaWNhbGx5IGBzdG1tYWNfcGNpYCwgdG8gdW5kZXJzdGFuZCBob3cgdGhpcyBjb25uZWN0aW9uIGlzIGVzdGFibGlzaGVkIGF0IHRoZSBoYXJkd2FyZSBsZXZlbC4gSSBuZWVkIHRvIHF1aWNrbHkgZGV0ZXJtaW5lIHdoZXRoZXIgYW55IG9mIHRoZSBQQ0kgZHJpdmVycywgb3IgcGVyaGFwcyBvdGhlciBkcml2ZXJzIEkmIzM5O20gZmFtaWxpYXIgd2l0aCwgc3BlY2lmaWNhbGx5IHNldCB0aGF0IGBjb3JlX3R5cGVgIHRvIGBEV01BQ19DT1JFX1hHTUFDYC4gVGhpcyBpcyBhIHZpdGFsIHN0ZXAgaW4gdW5kZXJzdGFuZGluZyB0aGUgZGV2aWNlJiMzOTtzIHNldHVwIGFuZCBpdHMgY29uZmlndXJhdGlvbiB3aXRoaW4gdGhlIHN5c3RlbS4gSSYjMzk7bSBmb2N1c2luZyBvbiB0aGUgY29uZmlndXJhdGlvbiBvZiB0aGlzIGNvcmUsIGFuZCBJIG5lZWQgdG8gZGV0ZXJtaW5lIGhvdyBpdCYjMzk7cyBiZWluZyBoYW5kbGVkIGJ5IHRoZSBzeXN0ZW0uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE0IDA2OjM2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O0RXTUFDX0NPUkVfWEdNQUMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvY29tbW9uLmg9NDk9c3RhdGljIGlubGluZSBib29sIGR3bWFjX2lzX3htYWMoZW51bSBkd21hY19jb3JlX3R5cGUgY29yZV90eXBlKVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvY29tbW9uLmgtNTAte1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvY29tbW9uLmg6NTE6XHRyZXR1cm4gY29yZV90eXBlID09IERXTUFDX0NPUkVfR01BQzQgfHwgY29yZV90eXBlID09IERXTUFDX0NPUkVfWEdNQUM7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9jb21tb24uaC01Mi19XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtc29jZnBnYS5jPTU2OT1zdGF0aWMgdm9pZCBzb2NmcGdhX2FnaWxleDVfc2V0dXBfcGxhdF9kYXQoc3RydWN0IHNvY2ZwZ2FfZHdtYWMgKmR3bWFjKVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLXNvY2ZwZ2EuYy01NzItXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1zb2NmcGdhLmM6NTczOlx0cGxhdF9kYXQtXHUwMDNlY29yZV90eXBlID0gRFdNQUNfQ09SRV9YR01BQztcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLXNvY2ZwZ2EuYy01NzQtXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtdGVncmEuYz0yMTQ9c3RhdGljIGludCB0ZWdyYV9tZ2JlX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtdGVncmEuYy0zMjUtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy10ZWdyYS5jOjMyNjpcdHBsYXQtXHUwMDNlY29yZV90eXBlID0gRFdNQUNfQ09SRV9YR01BQztcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLXRlZ3JhLmMtMzI3LVx0cGxhdC1cdTAwM2VmbGFncyB8PSBTVE1NQUNfRkxBR19UU09fRU47XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvaHdpZi5jPTIxPXN0YXRpYyB2b2lkIHN0bW1hY19nZXRfdmVyc2lvbihzdHJ1Y3Qgc3RtbWFjX3ByaXYgKnByaXYsXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvaHdpZi5jLTQ5LVx0dmVyLVx1MDAzZXNucHN2ZXIgPSBGSUVMRF9HRVQoRFdNQUNfU05QU1ZFUiwgdmVyc2lvbik7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9od2lmLmM6NTA6XHRpZiAoY29yZV90eXBlID09IERXTUFDX0NPUkVfWEdNQUMpXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9od2lmLmMtNTEtXHRcdHZlci1cdTAwM2VkZXZfaWQgPSBGSUVMRF9HRVQoRFdNQUNfVVNFUlZFUiwgdmVyc2lvbik7XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvaHdpZi5jPTExMT1zdGF0aWMgY29uc3Qgc3RydWN0IHN0bW1hY19od2lmX2VudHJ5IHtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9od2lmLmMtMjQ3LVx0fSwge1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvaHdpZi5jOjI0ODpcdFx0LmNvcmVfdHlwZSA9IERXTUFDX0NPUkVfWEdNQUMsXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9od2lmLmMtMjQ5LVx0XHQubWluX2lkID0gRFdYR01BQ19DT1JFXzJfMTAsXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvaHdpZi5jLTI2OS1cdH0sIHtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2h3aWYuYzoyNzA6XHRcdC5jb3JlX3R5cGUgPSBEV01BQ19DT1JFX1hHTUFDLFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvaHdpZi5jLTI3MS1cdFx0Lm1pbl9pZCA9IERXWExHTUFDX0NPUkVfMl8wMCxcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9od2lmLmM9Mjk0PXN0bW1hY19od2lmX2ZpbmQoZW51bSBkd21hY19jb3JlX3R5cGUgY29yZV90eXBlLCB1OCBzbnBzdmVyLCB1OCBkZXZfaWQpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvaHdpZi5jLTMwNi1cdFx0XHRjb250aW51ZTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2h3aWYuYzozMDc6XHRcdGlmIChjb3JlX3R5cGUgPT0gRFdNQUNfQ09SRV9YR01BQyBcdTAwMjZcdTAwMjZcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2h3aWYuYy0zMDgtXHRcdCAgICBkZXZfaWQgIT0gZW50cnktXHUwMDNlZGV2X2lkKVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19lc3QuYz0yOD1zdGF0aWMgaW50IGVzdF9jb25maWd1cmUoc3RydWN0IHN0bW1hY19wcml2ICpwcml2LCBzdHJ1Y3Qgc3RtbWFjX2VzdCAqY2ZnLFxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19lc3QuYy01NS1cdGN0cmwgPSByZWFkbChlc3RfYWRkciAmIzQzOyBFU1RfQ09OVFJPTCk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfZXN0LmM6NTY6XHRpZiAocHJpdi1cdTAwM2VwbGF0LVx1MDAzZWNvcmVfdHlwZSA9PSBEV01BQ19DT1JFX1hHTUFDKSB7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfZXN0LmMtNTctXHRcdGN0cmwgXHUwMDI2PSB+RVNUX1hHTUFDX1BUT1Y7XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX2VzdC5jPTgzPXN0YXRpYyB2b2lkIGVzdF9pcnFfc3RhdHVzKHN0cnVjdCBzdG1tYWNfcHJpdiAqcHJpdiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldixcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfZXN0LmMtMTUwLVx0aWYgKHN0YXR1cyBcdTAwMjYgRVNUX0JUUkUpIHtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19lc3QuYzoxNTE6XHRcdGlmIChwcml2LVx1MDAzZXBsYXQtXHUwMDNlY29yZV90eXBlID09IERXTUFDX0NPUkVfWEdNQUMpIHtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19lc3QuYy0xNTItXHRcdFx0YnRybCA9IEZJRUxEX0dFVChFU1RfWEdNQUNfQlRSTCwgc3RhdHVzKTtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfZXRodG9vbC5jPTMwMT1zdGF0aWMgdm9pZCBzdG1tYWNfZXRodG9vbF9nZXRkcnZpbmZvKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX2V0aHRvb2wuYy0zMDgtXHRcdHN0cnNjcHkoaW5mby1cdTAwM2Vkcml2ZXIsIEdNQUNfRVRIVE9PTF9OQU1FLCBzaXplb2YoaW5mby1cdTAwM2Vkcml2ZXIpKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19ldGh0b29sLmM6MzA5Olx0ZWxzZSBpZiAocHJpdi1cdTAwM2VwbGF0LVx1MDAzZWNvcmVfdHlwZSA9PSBEV01BQ19DT1JFX1hHTUFDKVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX2V0aHRvb2wuYy0zMTAtXHRcdHN0cnNjcHkoaW5mby1cdTAwM2Vkcml2ZXIsIFhHTUFDX0VUSFRPT0xfTkFNRSwgc2l6ZW9mKGluZm8tXHUwMDNlZHJpdmVyKSk7XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX2V0aHRvb2wuYz0zNTA9c3RhdGljIGludCBzdG1tYWNfZXRodG9vbF9nZXRfcmVnc19sZW4oc3RydWN0IG5ldF9kZXZpY2UgKmRldilcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfZXRodG9vbC5jLTM1My1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19ldGh0b29sLmM6MzU0Olx0aWYgKHByaXYtXHUwMDNlcGxhdC1cdTAwM2Vjb3JlX3R5cGUgPT0gRFdNQUNfQ09SRV9YR01BQylcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19ldGh0b29sLmMtMzU1LVx0XHRyZXR1cm4gWEdNQUNfUkVHU0laRSAqIDQ7XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX2V0aHRvb2wuYz0zNjE9c3RhdGljIHZvaWQgc3RtbWFjX2V0aHRvb2xfZ3JlZ3Moc3RydWN0IG5ldF9kZXZpY2UgKmRldixcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfZXRodG9vbC5jLTM3NS1cdFx0ICAgICAgIE5VTV9EV01BQzRfRE1BX1JFR1MgKiA0KTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19ldGh0b29sLmM6Mzc2Olx0fSBlbHNlIGlmIChwcml2LVx1MDAzZXBsYXQtXHUwMDNlY29yZV90eXBlICE9IERXTUFDX0NPUkVfWEdNQUMpIHtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19ldGh0b29sLmMtMzc3LVx0XHRtZW1jcHkoXHUwMDI2cmVnX3NwYWNlW0VUSFRPT0xfRE1BX09GRlNFVF0sXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX21haW4uYz02NDI9c3RhdGljIGludCBzdG1tYWNfaHd0c3RhbXBfc2V0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX21haW4uYy03NTgtXHRcdFx0aWYgKHByaXYtXHUwMDNlc3lub3BzeXNfaWQgXHUwMDNjIERXTUFDX0NPUkVfM183MCBcdTAwMjZcdTAwMjZcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19tYWluLmM6NzU5Olx0XHRcdCAgICBwcml2LVx1MDAzZXBsYXQtXHUwMDNlY29yZV90eXBlICE9IERXTUFDX0NPUkVfWEdNQUMpXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfbWFpbi5jLTc2MC1cdFx0XHRcdHRzX2V2ZW50X2VuID0gUFRQX1RDUl9UU0VWTlRFTkE7XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX21haW4uYz02NjA1PXN0YXRpYyBpbnQgc3RtbWFjX2RtYV9jYXBfc2hvdyhzdHJ1Y3Qgc2VxX2ZpbGUgKnNlcSwgdm9pZCAqdilcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfbWFpbi5jLTY2NDAtXHRcdCAgIChwcml2LVx1MDAzZWRtYV9jYXAuaGFsZl9kdXBsZXgpID8gXCYjMzQ7WVwmIzM0OyA6IFwmIzM0O05cJiMzNDspO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX21haW4uYzo2NjQxOlx0aWYgKHByaXYtXHUwMDNlcGxhdC1cdTAwM2Vjb3JlX3R5cGUgPT0gRFdNQUNfQ09SRV9YR01BQykge1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX21haW4uYy02NjQyLVx0XHRzZXFfcHJpbnRmKHNlcSxcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfbWFpbi5jLTY2NjQtXHRcdCAgIChwcml2LVx1MDAzZWRtYV9jYXAuYXRpbWVfc3RhbXApID8gXCYjMzQ7WVwmIzM0OyA6IFwmIzM0O05cJiMzNDspO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX21haW4uYzo2NjY1Olx0aWYgKHByaXYtXHUwMDNlcGxhdC1cdTAwM2Vjb3JlX3R5cGUgPT0gRFdNQUNfQ09SRV9YR01BQylcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19tYWluLmMtNjY2Ni1cdFx0c2VxX3ByaW50ZihzZXEsIFwmIzM0O1xcdFRpbWVzdGFtcCBTeXN0ZW0gVGltZSBTb3VyY2U6ICVzXFxuXCYjMzQ7LFxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19tYWluLmMtNjY3My1cdGlmIChwcml2LVx1MDAzZXN5bm9wc3lzX2lkIFx1MDAzZT0gRFdNQUNfQ09SRV80XzAwIHx8XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfbWFpbi5jOjY2NzQ6XHQgICAgcHJpdi1cdTAwM2VwbGF0LVx1MDAzZWNvcmVfdHlwZSA9PSBEV01BQ19DT1JFX1hHTUFDKSB7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfbWFpbi5jLTY2NzUtXHRcdHNlcV9wcmludGYoc2VxLCBcJiMzNDtcXHRJUCBDaGVja3N1bSBPZmZsb2FkIGluIFJYOiAlc1xcblwmIzM0Oyxcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfbWFpbi5jPTc0MDI9c3RhdGljIHZvaWQgc3RtbWFjX3ByaW50X2FjdHBoeWlmKHN0cnVjdCBzdG1tYWNfcHJpdiAqcHJpdilcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfbWFpbi5jLTc0MTctXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfbWFpbi5jOjc0MTg6XHRjYXNlIERXTUFDX0NPUkVfWEdNQUM6XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfbWFpbi5jLTc0MTktXHRcdHBoeWlmX3RhYmxlID0gc3RtbWFjX2R3eGdtYWNfcGh5aWY7XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX21haW4uYz03NDQ0PXN0YXRpYyBpbnQgc3RtbWFjX2h3X2luaXQoc3RydWN0IHN0bW1hY19wcml2ICpwcml2KVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19tYWluLmMtNzU2Ni1cdGlmICgocHJpdi1cdTAwM2VzeW5vcHN5c19pZCBcdTAwM2U9IERXTUFDX0NPUkVfM181MCB8fFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX21haW4uYzo3NTY3Olx0ICAgICBwcml2LVx1MDAzZXBsYXQtXHUwMDNlY29yZV90eXBlID09IERXTUFDX0NPUkVfWEdNQUMpIFx1MDAyNlx1MDAyNlxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX21haW4uYy03NTY4LVx0ICAgICFwcml2LVx1MDAzZXBsYXQtXHUwMDNlcml3dF9vZmYpIHtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfbWFpbi5jPTc4MzM9c3RhdGljIGludCBfX3N0bW1hY19kdnJfcHJvYmUoc3RydWN0IGRldmljZSAqZGV2aWNlLFxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19tYWluLmMtODA0MC1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19tYWluLmM6ODA0MTpcdGlmIChwcml2LVx1MDAzZXBsYXQtXHUwMDNlY29yZV90eXBlID09IERXTUFDX0NPUkVfWEdNQUMpXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfbWFpbi5jLTgwNDItXHRcdG5kZXYtXHUwMDNlbWF4X210dSA9IFhHTUFDX0pVTUJPX0xFTjtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfbWRpby5jPTUzNj1zdGF0aWMgdTMyIHN0bW1hY19jbGtfY3NyX3NldChzdHJ1Y3Qgc3RtbWFjX3ByaXYgKnByaXYpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX21kaW8uYy01NTQtXHRcdHJhdGVzID0gc3RtbWFjX3N1bjhpX2Nzcl90b19tZGM7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfbWRpby5jOjU1NTpcdGlmIChwcml2LVx1MDAzZXBsYXQtXHUwMDNlY29yZV90eXBlID09IERXTUFDX0NPUkVfWEdNQUMpXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfbWRpby5jLTU1Ni1cdFx0cmF0ZXMgPSBzdG1tYWNfeGdtYWNfY3NyX3RvX21kYztcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfbWRpby5jPTU5NT1pbnQgc3RtbWFjX21kaW9fcmVnaXN0ZXIoc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX21kaW8uYy02MjEtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfbWRpby5jOjYyMjpcdGlmIChwcml2LVx1MDAzZXBsYXQtXHUwMDNlY29yZV90eXBlID09IERXTUFDX0NPUkVfWEdNQUMpIHtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19tZGlvLmMtNjIzLVx0XHRuZXdfYnVzLVx1MDAzZXJlYWQgPSBcdTAwMjZzdG1tYWNfeGdtYWMyX21kaW9fcmVhZF9jMjI7XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX21kaW8uYy02NjUtXHQvKiBMb29rcyBsaWtlIHdlIG5lZWQgYSBkdW1teSByZWFkIGZvciBYR01BQyBvbmx5IGFuZCBDNDUgUEhZcyAqL1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX21kaW8uYzo2NjY6XHRpZiAocHJpdi1cdTAwM2VwbGF0LVx1MDAzZWNvcmVfdHlwZSA9PSBEV01BQ19DT1JFX1hHTUFDKVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX21kaW8uYy02NjctXHRcdHN0bW1hY194Z21hYzJfbWRpb19yZWFkX2M0NShuZXdfYnVzLCAwLCAwLCAwKTtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfcGxhdGZvcm0uYz00MTY9c3RtbWFjX3Byb2JlX2NvbmZpZ19kdChzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2LCB1OCAqbWFjKVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19wbGF0Zm9ybS5jLTU0Ny1cdGlmIChvZl9kZXZpY2VfaXNfY29tcGF0aWJsZShucCwgXCYjMzQ7c25wcyxkd3hnbWFjXCYjMzQ7KSkge1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX3BsYXRmb3JtLmM6NTQ4Olx0XHRwbGF0LVx1MDAzZWNvcmVfdHlwZSA9IERXTUFDX0NPUkVfWEdNQUM7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfcGxhdGZvcm0uYy01NDktXHRcdHBsYXQtXHUwMDNlcG10ID0gdHJ1ZTtcbi0tXG5pbmNsdWRlL2xpbnV4L3N0bW1hYy5oPTE5MT1lbnVtIGR3bWFjX2NvcmVfdHlwZSB7XG4tLVxuaW5jbHVkZS9saW51eC9zdG1tYWMuaC0xOTQtXHREV01BQ19DT1JFX0dNQUM0LFxuaW5jbHVkZS9saW51eC9zdG1tYWMuaDoxOTU6XHREV01BQ19DT1JFX1hHTUFDLFxuaW5jbHVkZS9saW51eC9zdG1tYWMuaC0xOTYtfTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTQgMDY6MzY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjM2ODEKCQkJCQkJCW91dHB1dDogNDkKCQkJCQkJCXRob3VnaHRzOiAxODcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBEV01BQyBDb3JlIFR5cGUgQXNzaWdubWVudCoqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBJdCBsb29rcyBsaWtlIGBEV01BQ19DT1JFX1hHTUFDYCBpcyBleHBsaWNpdGx5IGxpbmtlZCB0byB0aGUgYGR3bWFjLXNvY2ZwZ2EuY2AgYW5kIGBkd21hYy10ZWdyYS5jYCBkcml2ZXJzLCBhbmQgYWxzbyBwb3BzIHVwIHdoZW4gdGhlIGRldmljZSB0cmVlIGNvbXBhdGlibGUgc3RyaW5nIGlzIGAmIzM0O3NucHMsZHd4Z21hYyYjMzQ7YC4gTXkgaW1tZWRpYXRlIHF1ZXN0aW9uIGlzIGFyb3VuZCBgc3RtbWFjX3BjaWAuIEkmIzM5O20gZ29pbmcgdGhyb3VnaCB0aGUgY29kZSBhbmQgSSYjMzk7bSBub3Qgc2VlaW5nIGFueSAqZGlyZWN0KiBhc3NpZ25tZW50IG9mIGBjb3JlX3R5cGUgPSBEV01BQ19DT1JFX1hHTUFDYCB0aGVyZS4gVGhhdCBzZWVtcyBvZGQsIGJlY2F1c2UgYHN0bW1hY19od2lmX2ZpbmRgICpkb2VzKiBjaGVjayB0aGUgYGNvcmVfdHlwZWAgaW4gY29uanVuY3Rpb24gd2l0aCBgZGV2X2lkYC4gSG1tbS4KCk9rYXksIEkgc2VlIGl0IG5vdy4gYHN0bW1hY19od2lmX2luaXRgIGdldHMgdGhlIGBjb3JlX3R5cGVgIHZpYSBgcHJpdi0mZ3Q7cGxhdC0mZ3Q7Y29yZV90eXBlYC4gU28gdGhlIGNyaXRpY2FsIHF1ZXN0aW9uIGlzICp3aGVyZSogaXMgdGhhdCBiZWluZyBpbml0aWFsaXplZD8gSWYgYHN0bW1hY19wY2lgIGlzbiYjMzk7dCBzZXR0aW5nIGl0IGRpcmVjdGx5LCBJIG5lZWQgdG8ga25vdyB3aGVyZSBgcHJpdi0mZ3Q7cGxhdC0mZ3Q7Y29yZV90eXBlYCBpcyBwb3B1bGF0ZWQsIG9yIGlzIGl0IHplcm8uIElmIGl0IGlzbiYjMzk7dCBzZXQsIHRoZW4gdGhhdCBkZWZhdWx0cyB0byBgRFdNQUNfQ09SRV9NQUNgIHdoaWNoIHdvdWxkIGV4cGxhaW4gdGhlIGxhY2sgb2YgYW4gZXhwbGljaXQgYFhHTUFDYCBkZXNpZ25hdGlvbi4gSSYjMzk7bSBnb2luZyB0byB0YWtlIGFub3RoZXIgbG9vayBhdCBgc3RtbWFjX3BjaS5jYCB0byB0cmFjZSB3aGVyZSBgcHJpdi0mZ3Q7cGxhdC0mZ3Q7Y29yZV90eXBlYCBjb21lcyBmcm9tLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNCAwNjozNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19wY2kuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDMwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDUwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAgMzA6XHRcdHBsYXQtXHUwMDNlbWRpb19idXNfZGF0YS1cdTAwM2VuZWVkc19yZXNldCA9IHRydWU7XG4gIDMxOlx0fVxuICAzMjpcdFxuICAzMzpcdHN0YXRpYyBpbnQgc3RtbWFjX2RlZmF1bHRfZGF0YShzdHJ1Y3QgcGNpX2RldiAqcGRldixcbiAgMzQ6XHRcdFx0XHQgICAgICAgc3RydWN0IHBsYXRfc3RtbWFjZW5ldF9kYXRhICpwbGF0KVxuICAzNTpcdHtcbiAgMzY6XHRcdC8qIFNldCBjb21tb24gZGVmYXVsdCBkYXRhIGZpcnN0ICovXG4gIDM3Olx0XHRjb21tb25fZGVmYXVsdF9kYXRhKHBsYXQpO1xuICAzODpcdFxuICAzOTpcdFx0cGxhdC1cdTAwM2VidXNfaWQgPSAxO1xuICA0MDpcdFx0cGxhdC1cdTAwM2VwaHlfYWRkciA9IDA7XG4gIDQxOlx0XHRwbGF0LVx1MDAzZXBoeV9pbnRlcmZhY2UgPSBQSFlfSU5URVJGQUNFX01PREVfR01JSTtcbiAgNDI6XHRcbiAgNDM6XHRcdHBsYXQtXHUwMDNlZG1hX2NmZy1cdTAwM2VwYmwgPSAzMjtcbiAgNDQ6XHRcdHBsYXQtXHUwMDNlZG1hX2NmZy1cdTAwM2VwYmx4OCA9IHRydWU7XG4gIDQ1Olx0XHQvKiBUT0RPOiBBWEkgKi9cbiAgNDY6XHRcbiAgNDc6XHRcdHJldHVybiAwO1xuICA0ODpcdH1cbiAgNDk6XHRcbiAgNTA6XHRzdGF0aWMgY29uc3Qgc3RydWN0IHN0bW1hY19wY2lfaW5mbyBzdG1tYWNfcGNpX2luZm8gPSB7XG4gIDUxOlx0XHQuc2V0dXAgPSBzdG1tYWNfZGVmYXVsdF9kYXRhLFxuICA1MjpcdH07XG4gIDUzOlx0XG4gIDU0Olx0c3RhdGljIGludCBzbnBzX2dtYWM1X2RlZmF1bHRfZGF0YShzdHJ1Y3QgcGNpX2RldiAqcGRldixcbiAgNTU6XHRcdFx0XHRcdCAgIHN0cnVjdCBwbGF0X3N0bW1hY2VuZXRfZGF0YSAqcGxhdClcbiAgNTY6XHR7XG4gIDU3Olx0XHRpbnQgaTtcbiAgNTg6XHRcbiAgNTk6XHRcdHBsYXQtXHUwMDNlY2xrX2NzciA9IFNUTU1BQ19DU1JfMjUwXzMwME07XG4gIDYwOlx0XHRwbGF0LVx1MDAzZWNvcmVfdHlwZSA9IERXTUFDX0NPUkVfR01BQzQ7XG4gIDYxOlx0XHRwbGF0LVx1MDAzZWZvcmNlX3NmX2RtYV9tb2RlID0gdHJ1ZTtcbiAgNjI6XHRcdHBsYXQtXHUwMDNlZmxhZ3MgfD0gU1RNTUFDX0ZMQUdfVFNPX0VOO1xuICA2MzpcdFx0cGxhdC1cdTAwM2VwbXQgPSB0cnVlO1xuICA2NDpcdFxuICA2NTpcdFx0LyogU2V0IGRlZmF1bHQgbnVtYmVyIG9mIFJYIGFuZCBUWCBxdWV1ZXMgdG8gdXNlICovXG4gIDY2Olx0XHRwbGF0LVx1MDAzZXR4X3F1ZXVlc190b191c2UgPSA0O1xuICA2NzpcdFx0cGxhdC1cdTAwM2VyeF9xdWV1ZXNfdG9fdXNlID0gNDtcbiAgNjg6XHRcbiAgNjk6XHRcdHBsYXQtXHUwMDNldHhfc2NoZWRfYWxnb3JpdGhtID0gTVRMX1RYX0FMR09SSVRITV9XUlI7XG4gIDcwOlx0XHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBwbGF0LVx1MDAzZXR4X3F1ZXVlc190b191c2U7IGkmIzQzOyYjNDM7KSB7XG4gIDcxOlx0XHRcdHBsYXQtXHUwMDNldHhfcXVldWVzX2NmZ1tpXS5tb2RlX3RvX3VzZSA9IE1UTF9RVUVVRV9EQ0I7XG4gIDcyOlx0XHRcdHBsYXQtXHUwMDNldHhfcXVldWVzX2NmZ1tpXS53ZWlnaHQgPSAyNTtcbiAgNzM6XHRcdFx0aWYgKGkgXHUwMDNlIDApXG4gIDc0Olx0XHRcdFx0cGxhdC1cdTAwM2V0eF9xdWV1ZXNfY2ZnW2ldLnRic19lbiA9IDE7XG4gIDc1Olx0XHR9XG4gIDc2Olx0XG4gIDc3Olx0XHRwbGF0LVx1MDAzZXJ4X3NjaGVkX2FsZ29yaXRobSA9IE1UTF9SWF9BTEdPUklUSE1fU1A7XG4gIDc4Olx0XHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBwbGF0LVx1MDAzZXJ4X3F1ZXVlc190b191c2U7IGkmIzQzOyYjNDM7KVxuICA3OTpcdFx0XHRwbGF0LVx1MDAzZXJ4X3F1ZXVlc19jZmdbaV0ubW9kZV90b191c2UgPSBNVExfUVVFVUVfRENCO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNCAwNjozNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNTA0NAoJCQkJCQkJb3V0cHV0OiA0NgoJCQkJCQkJdGhvdWdodHM6IDEwNAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIFNUTU1BQyBEcml2ZXIgSW5pdGlhbGl6YXRpb24qKgoKT2theSwgc28gSSYjMzk7bSBkaWdnaW5nIGludG8gdGhpcyBgc3RtbWFjX3BjaS5jYCBmaWxlIGFuZCB0cnlpbmcgdG8gdW5kZXJzdGFuZCBob3cgaXQmIzM5O3Mgc2V0dGluZyB1cCB0aGUgZHJpdmVyLiBJIHNlZSBpdCBzZXRzIGBEV01BQ19DT1JFX0dNQUM0YCBmb3IgYHNucHNfZ21hYzVfZGVmYXVsdF9kYXRhYC4gSG1tLCB0aGF0IHNlZW1zIHN0cmFpZ2h0Zm9yd2FyZCBlbm91Z2ggYXQgZmlyc3QgZ2xhbmNlLiBCdXQgaGFuZyBvbiwgc29tZXRoaW5nJiMzOTtzIG5vdCBxdWl0ZSByaWdodC4uLiBJIGNhbiYjMzk7dCBmaW5kIGFueSBtZW50aW9uIG9mIGBEV01BQ19DT1JFX1hHTUFDYCBpbiB0aGlzIHBhcnRpY3VsYXIgZmlsZS4gVGhhdCYjMzk7cyBhIGJpdCBvZiBhIGhlYWQtc2NyYXRjaGVyLgoKTm93LCB3YWl0IGEgbWludXRlLCBJIHJlbWVtYmVyIHRoYXQgYHN0bW1hY19od2lmX2luaXRgIGlzIHJlc3BvbnNpYmxlIGZvciBncmFiYmluZyB0aGUgaGFyZHdhcmUgdmVyc2lvbi4gT2theSwgbGV0JiMzOTtzIHJldmlzaXQgYHN0bW1hY19od2lmX2luaXRgIGFuZCBnZXQgYSBjbGVhcmVyIHBpY3R1cmUgb2YgaG93IGl0IGFsbCB0aWVzIHRvZ2V0aGVyIGFuZCBob3cgdGhlIGNvcmUgaXMgYWN0dWFsbHkgaWRlbnRpZmllZC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZSBoYXJkd2FyZSB2ZXJzaW9uIGludGVyYWN0cyB3aXRoIHRoZXNlIGNvcmUgZGVmaW5pdGlvbnMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE0IDA2OjM2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvaHdpZi5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMzE1LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDUwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAzMTU6XHR9XG4gMzE2Olx0XG4gMzE3Olx0aW50IHN0bW1hY19od2lmX2luaXQoc3RydWN0IHN0bW1hY19wcml2ICpwcml2KVxuIDMxODpcdHtcbiAzMTk6XHRcdGVudW0gZHdtYWNfY29yZV90eXBlIGNvcmVfdHlwZSA9IHByaXYtXHUwMDNlcGxhdC1cdTAwM2Vjb3JlX3R5cGU7XG4gMzIwOlx0XHRjb25zdCBzdHJ1Y3Qgc3RtbWFjX2h3aWZfZW50cnkgKmVudHJ5O1xuIDMyMTpcdFx0c3RydWN0IHN0bW1hY192ZXJzaW9uIHZlcnNpb247XG4gMzIyOlx0XHRzdHJ1Y3QgbWFjX2RldmljZV9pbmZvICptYWM7XG4gMzIzOlx0XHRib29sIG5lZWRzX3NldHVwID0gdHJ1ZTtcbiAzMjQ6XHRcdGludCByZXQ7XG4gMzI1Olx0XG4gMzI2Olx0XHRzdG1tYWNfZ2V0X3ZlcnNpb24ocHJpdiwgXHUwMDI2dmVyc2lvbik7XG4gMzI3Olx0XG4gMzI4Olx0XHQvKiBTYXZlIElEIGZvciBsYXRlciB1c2UgKi9cbiAzMjk6XHRcdHByaXYtXHUwMDNlc3lub3BzeXNfaWQgPSB2ZXJzaW9uLnNucHN2ZXI7XG4gMzMwOlx0XG4gMzMxOlx0XHRtYWMgPSBkZXZtX2t6YWxsb2MocHJpdi1cdTAwM2VkZXZpY2UsIHNpemVvZigqbWFjKSwgR0ZQX0tFUk5FTCk7XG4gMzMyOlx0XHRpZiAoIW1hYylcbiAzMzM6XHRcdFx0cmV0dXJuIC1FTk9NRU07XG4gMzM0Olx0XG4gMzM1Olx0XHQvKiBDaGVjayBmb3IgSFcgc3BlY2lmaWMgc2V0dXAgZmlyc3QgKi9cbiAzMzY6XHRcdGlmIChwcml2LVx1MDAzZXBsYXQtXHUwMDNlbWFjX3NldHVwKSB7XG4gMzM3Olx0XHRcdHJldCA9IHByaXYtXHUwMDNlcGxhdC1cdTAwM2VtYWNfc2V0dXAocHJpdiwgbWFjKTtcbiAzMzg6XHRcdFx0aWYgKHJldClcbiAzMzk6XHRcdFx0XHRyZXR1cm4gcmV0O1xuIDM0MDpcdFxuIDM0MTpcdFx0XHRuZWVkc19zZXR1cCA9IGZhbHNlO1xuIDM0MjpcdFx0fVxuIDM0MzpcdFxuIDM0NDpcdFx0c3Bpbl9sb2NrX2luaXQoXHUwMDI2bWFjLVx1MDAzZWlycV9jdHJsX2xvY2spO1xuIDM0NTpcdFxuIDM0NjpcdFx0LyogRmFsbGJhY2sgdG8gZ2VuZXJpYyBIVyAqL1xuIDM0NzpcdFxuIDM0ODpcdFx0LyogVXNlIHN5bm9wc3lzX2lkIHZhciBiZWNhdXNlIHNvbWUgc2V0dXBzIGNhbiBvdmVycmlkZSB0aGlzICovXG4gMzQ5Olx0XHRlbnRyeSA9IHN0bW1hY19od2lmX2ZpbmQoY29yZV90eXBlLCBwcml2LVx1MDAzZXN5bm9wc3lzX2lkLCB2ZXJzaW9uLmRldl9pZCk7XG4gMzUwOlx0XHRpZiAoIWVudHJ5KSB7XG4gMzUxOlx0XHRcdGRldl9lcnIocHJpdi1cdTAwM2VkZXZpY2UsXG4gMzUyOlx0XHRcdFx0XCYjMzQ7RmFpbGVkIHRvIGZpbmQgSFcgSUYgKGlkPTB4JXgsIGdtYWM9JWQvJWQpXFxuXCYjMzQ7LFxuIDM1MzpcdFx0XHRcdHZlcnNpb24uc25wc3ZlciwgY29yZV90eXBlID09IERXTUFDX0NPUkVfR01BQyxcbiAzNTQ6XHRcdFx0XHRjb3JlX3R5cGUgPT0gRFdNQUNfQ09SRV9HTUFDNCk7XG4gMzU1Olx0XG4gMzU2Olx0XHRcdHJldHVybiAtRUlOVkFMO1xuIDM1NzpcdFx0fVxuIDM1ODpcdFxuIDM1OTpcdFx0LyogT25seSB1c2UgZ2VuZXJpYyBIVyBoZWxwZXJzIGlmIG5lZWRlZCAqL1xuIDM2MDpcdFx0bWFjLVx1MDAzZWRlc2MgPSBtYWMtXHUwMDNlZGVzYyA/IDogZW50cnktXHUwMDNlZGVzYztcbiAzNjE6XHRcdG1hYy1cdTAwM2VkbWEgPSBtYWMtXHUwMDNlZG1hID8gOiBlbnRyeS1cdTAwM2VkbWE7XG4gMzYyOlx0XHRtYWMtXHUwMDNlbWFjID0gbWFjLVx1MDAzZW1hYyA/IDogZW50cnktXHUwMDNlbWFjO1xuIDM2MzpcdFx0bWFjLVx1MDAzZXB0cCA9IG1hYy1cdTAwM2VwdHAgPyA6IGVudHJ5LVx1MDAzZWh3dGltZXN0YW1wO1xuIDM2NDpcdFx0bWFjLVx1MDAzZW1vZGUgPSBtYWMtXHUwMDNlbW9kZSA/IDogZW50cnktXHUwMDNlbW9kZTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTQgMDY6MzY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjYxNzUKCQkJCQkJCW91dHB1dDogNTAKCQkJCQkJCXRob3VnaHRzOiAyNDQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBgc3RtbWFjYCBEcml2ZXImIzM5O3MgWEdNQUMgQmVoYXZpb3IqKgoKT2theSwgc28gSSYjMzk7bSBkaWdnaW5nIGludG8gdGhpcyBgc3RtbWFjYCBkcml2ZXIgY29kZSwgc3BlY2lmaWNhbGx5IGhvdyBpdCBoYW5kbGVzIFhHTUFDIGNvcmVzLiBJIHNlZSB0aGF0IGBzdG1tYWNfaHdpZl9pbml0YCBjYWxscyBgc3RtbWFjX2h3aWZfZmluZGAsIGFuZCBpdCB1c2VzIGBwcml2LSZndDtwbGF0LSZndDtjb3JlX3R5cGVgIHRvIGZpbmQgdGhlIGNvcnJlY3QgaGFyZHdhcmUgaW50ZXJmYWNlLiBUaGUgaW50ZXJlc3RpbmcgYml0IGlzIHRoYXQgaWYgYGNvcmVfdHlwZWAgaXNuJiMzOTt0IGBEV01BQ19DT1JFX1hHTUFDYCwgaXQmIzM5O3Mgbm90IGdvaW5nIHRvIG1hdGNoIGFueXRoaW5nLCByaWdodD8KClRoZW4gbXkgYnJhaW4gY2xpY2tzOiBgZHdtYWMtc29jZnBnYS5jYCBhbmQgYGR3bWFjLXRlZ3JhLmNgIGJvdGggKmRvKiBzZXQgYGNvcmVfdHlwZSA9IERXTUFDX0NPUkVfWEdNQUNgLiBJIG5lZWQgdG8gY29uZmlybSB3aGV0aGVyIHRoZXNlIGRyaXZlcnMgYXJlIGV2ZW4gcmVhY2hhYmxlIGluIHRoZSBRRU1VIGVudmlyb25tZW50IEkmIzM5O20gdXNpbmcuIE15IHN1c3BpY2lvbiwgdGhvdWdoLCBpcyB0aGF0IHRoZSBpc3N1ZSBpc24mIzM5O3QgbGltaXRlZCB0byBzcGVjaWZpYyBib2FyZCBjb25maWdzLgoKVGhlbiBJIG5vdGljZWQgdGhhdCBgc3RtbWFjX21haW4uY2AgaGFzIGFsc28gYmVlbiBtb2RpZmllZC4gVGhlIHBhdGNoIGlzIGNoYW5naW5nIHRoZSB3YXkgdGhlIGRhdGFwYXRoIGlzIHRvcm4gZG93biB1c2luZyBgc3RtbWFjX2RhdGFwYXRoX3RlYXJkb3duKHByaXYpYC4gVGhpcyBmdW5jdGlvbiBpcyBiZWluZyBjYWxsZWQgaW4gc2V2ZXJhbCBwbGFjZXM6IGBfX3N0bW1hY19yZWxlYXNlYCwgYHN0bW1hY194ZHBfcmVsZWFzZWAsIGFuZCBgc3RtbWFjX3N1c3BlbmRgLiBIZXJlJiMzOTtzIHRoZSBraWNrZXI6IHRoaXMgdGVhcmRvd24gbG9naWMgc2VlbXMgdG8gYmUgZXhlY3V0ZWQgZm9yICphbGwqIGBzdG1tYWNgIGRldmljZXMsIG5vdCBqdXN0IHRoZSBYR01BQyBvbmVzLiBUaGF0JiMzOTtzIGEgcmVkIGZsYWcuIEkgbmVlZCB0byB0YWtlIGEgY2xvc2VyIGxvb2sgYXQgd2hhdCBgc3RtbWFjX2RhdGFwYXRoX3RlYXJkb3duYCBpcyBhY3R1YWxseSBkb2luZyBpbiB0aGUgcGF0Y2guCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE0IDA2OjM2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX21haW4uYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDI1NjAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNTAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MjU2MDpcdFx0XHRzdG1tYWNfZGVpbml0X2NoYW4ocHJpdiwgcHJpdi1cdTAwM2Vpb2FkZHIsIGNoYW4pO1xuMjU2MTpcdH1cbjI1NjI6XHRcbjI1NjM6XHQvKipcbjI1NjQ6XHQgKiBzdG1tYWNfZGF0YXBhdGhfdGVhcmRvd24gLSBvcmRlcmVkIGRhdGFwYXRoIHRlYXJkb3duIGFzIHBlciBJUCBzcGVjaWZpY2F0aW9uXG4yNTY1Olx0ICogQHByaXY6IGRyaXZlciBwcml2YXRlIHN0cnVjdHVyZVxuMjU2NjpcdCAqIERlc2NyaXB0aW9uOlxuMjU2NzpcdCAqIFdoZW4gdGVhcmRvd24gb3BzIGFyZSBhdmFpbGFibGUsIGZvbGxvdyB0aGUgZGF0YWJvb2sgb3JkZXJlZCB0ZWFyZG93blxuMjU2ODpcdCAqIHNlcXVlbmNlLlxuMjU2OTpcdCAqIEZvbGxvd3MgdGhlIGxlZ2FjeSBzdG9wICYjNDM7IE1BQyBkaXNhYmxlIGZvciB2YXJpYW50cyB3aXRob3V0IHRoZSBmZWF0dXJlLlxuMjU3MDpcdCAqL1xuMjU3MTpcdHN0YXRpYyB2b2lkIHN0bW1hY19kYXRhcGF0aF90ZWFyZG93bihzdHJ1Y3Qgc3RtbWFjX3ByaXYgKnByaXYpXG4yNTcyOlx0e1xuMjU3MzpcdFx0dTMyIHJ4X2NoYW5uZWxzX2NvdW50ID0gcHJpdi1cdTAwM2VwbGF0LVx1MDAzZXJ4X3F1ZXVlc190b191c2U7XG4yNTc0Olx0XHR1MzIgdHhfY2hhbm5lbHNfY291bnQgPSBwcml2LVx1MDAzZXBsYXQtXHUwMDNldHhfcXVldWVzX3RvX3VzZTtcbjI1NzU6XHRcdHUzMiBjaGFuO1xuMjU3NjpcdFxuMjU3NzpcdFx0LyogU3RvcCBhbGwgVFggRE1BIGNoYW5uZWxzICovXG4yNTc4Olx0XHRmb3IgKGNoYW4gPSAwOyBjaGFuIFx1MDAzYyB0eF9jaGFubmVsc19jb3VudDsgY2hhbiYjNDM7JiM0MzspXG4yNTc5Olx0XHRcdHN0bW1hY19zdG9wX3R4X2RtYShwcml2LCBjaGFuKTtcbjI1ODA6XHRcbjI1ODE6XHRcdC8qIFdhaXQgZm9yIGV2ZXJ5IFRYIERNQSBjaGFubmVsIHRvIHJlcG9ydCBpdHNlbGYgc3RvcHBlZCAqL1xuMjU4MjpcdFx0aWYgKHByaXYtXHUwMDNlaHctXHUwMDNlZG1hLVx1MDAzZXR4X2RtYV9zdG9wcGVkKVxuMjU4MzpcdFx0XHRmb3IgKGNoYW4gPSAwOyBjaGFuIFx1MDAzYyB0eF9jaGFubmVsc19jb3VudDsgY2hhbiYjNDM7JiM0MzspXG4yNTg0Olx0XHRcdFx0c3RtbWFjX3R4X2RtYV9zdG9wcGVkKHByaXYsIHByaXYtXHUwMDNlaW9hZGRyLCBjaGFuKTtcbjI1ODU6XHRcbjI1ODY6XHRcdC8qIFdhaXQgZm9yIHRoZSBNVEwgVFggcXVldWVzIHRvIGZpbmlzaCBwdXNoaW5nIGludG8gdGhlIE1BQyAqL1xuMjU4NzpcdFx0aWYgKHByaXYtXHUwMDNlaHctXHUwMDNlZG1hLVx1MDAzZXR4X210bF9kcmFpbilcbjI1ODg6XHRcdFx0Zm9yIChjaGFuID0gMDsgY2hhbiBcdTAwM2MgdHhfY2hhbm5lbHNfY291bnQ7IGNoYW4mIzQzOyYjNDM7KVxuMjU4OTpcdFx0XHRcdHN0bW1hY190eF9tdGxfZHJhaW4ocHJpdiwgcHJpdi1cdTAwM2Vpb2FkZHIsIGNoYW4pO1xuMjU5MDpcdFxuMjU5MTpcdFx0LyogRGlzYWJsZSB0aGUgTUFDIFRYIGFuZCBSWCAqL1xuMjU5MjpcdFx0c3RtbWFjX21hY19zZXQocHJpdiwgcHJpdi1cdTAwM2Vpb2FkZHIsIGZhbHNlKTtcbjI1OTM6XHRcbjI1OTQ6XHRcdC8qIFdhaXQgZm9yIHRoZSBNVEwgUlggcXVldWVzIHRvIGRyYWluIGludG8gdGhlIFJYIERNQSAqL1xuMjU5NTpcdFx0aWYgKHByaXYtXHUwMDNlaHctXHUwMDNlZG1hLVx1MDAzZXJ4X210bF9kcmFpbilcbjI1OTY6XHRcdFx0Zm9yIChjaGFuID0gMDsgY2hhbiBcdTAwM2MgcnhfY2hhbm5lbHNfY291bnQ7IGNoYW4mIzQzOyYjNDM7KVxuMjU5NzpcdFx0XHRcdHN0bW1hY19yeF9tdGxfZHJhaW4ocHJpdiwgcHJpdi1cdTAwM2Vpb2FkZHIsIGNoYW4pO1xuMjU5ODpcdFxuMjU5OTpcdFx0LyogU3RvcCBhbGwgUlggRE1BIGNoYW5uZWxzICovXG4yNjAwOlx0XHRmb3IgKGNoYW4gPSAwOyBjaGFuIFx1MDAzYyByeF9jaGFubmVsc19jb3VudDsgY2hhbiYjNDM7JiM0MzspXG4yNjAxOlx0XHRcdHN0bW1hY19zdG9wX3J4X2RtYShwcml2LCBjaGFuKTtcbjI2MDI6XHRcbjI2MDM6XHRcdC8qIFdhaXQgZm9yIGV2ZXJ5IFJYIERNQSBjaGFubmVsIHRvIHJlcG9ydCBpdHNlbGYgc3RvcHBlZCAqL1xuMjYwNDpcdFx0aWYgKHByaXYtXHUwMDNlaHctXHUwMDNlZG1hLVx1MDAzZXJ4X2RtYV9zdG9wcGVkKVxuMjYwNTpcdFx0XHRmb3IgKGNoYW4gPSAwOyBjaGFuIFx1MDAzYyByeF9jaGFubmVsc19jb3VudDsgY2hhbiYjNDM7JiM0MzspXG4yNjA2Olx0XHRcdFx0c3RtbWFjX3J4X2RtYV9zdG9wcGVkKHByaXYsIHByaXYtXHUwMDNlaW9hZGRyLCBjaGFuKTtcbjI2MDc6XHR9XG4yNjA4Olx0XG4yNjA5Olx0LyoqXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE0IDA2OjM2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI3NzE3CgkJCQkJCQlvdXRwdXQ6IDE5CgkJCQkJCQl0aG91Z2h0czogMTI4OAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXNpcyBvZiBzdG1tYWMgRGF0YXBhdGggVGVhcmRvd24gYW5kIEltcGxpY2F0aW9ucyoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBgc3RtbWFjX2RhdGFwYXRoX3RlYXJkb3duYCBmdW5jdGlvbiwgYW5kIGl0IHNlZW1zIHRvIGJlIHVuaXZlcnNhbGx5IGNhbGxlZCBhY3Jvc3MgYWxsIGRldmljZXMgdGhhdCB1c2UgdGhpcyBkcml2ZXIuIFRoZSBpbnRlcmVzdGluZyBwYXJ0IGlzIHRoZSBjaGFuZ2UgaW4gaXRzIGJlaGF2aW9yLiBQcmV2aW91c2x5LCB0aGUgRE1BIHdhcyBzdG9wcGVkIHdpdGggYHN0bW1hY19zdG9wX2FsbF9kbWFgIGFuZCB0aGUgTUFDIHdhcyBkaXNhYmxlZCB1c2luZyBgc3RtbWFjX21hY19zZXQoLi4uLCBmYWxzZSlgLiBOb3csIGBzdG1tYWNfZGF0YXBhdGhfdGVhcmRvd25gIGRpcmVjdGx5IGNhbGxzIGBzdG1tYWNfc3RvcF90eF9kbWFgLCB0aGVuIGBzdG1tYWNfbWFjX3NldCguLi4sIGZhbHNlKWAsIGFuZCBmaW5hbGx5IGBzdG1tYWNfc3RvcF9yeF9kbWFgLiBUaGlzIG9yZGVyIGlzIGEgKmZ1bmN0aW9uYWwgY2hhbmdlKiBhZmZlY3RpbmcgYWxsIHN0bW1hYyBkZXZpY2VzLiBUaGlzIGRpZmZlcmVuY2UgaW4gZXhlY3V0aW9uIGZsb3cgaXMgYSBjb25jZXJuLgoKTW9yZW92ZXIsIHRoZSBvcmlnaW5hbCB0ZWFyZG93biBvcmRlciBpbmNsdWRlZCBkaXNhYmxpbmcgdGhlIE1BQyAqYWZ0ZXIqIGZyZWVpbmcgdGhlIERNQSBkZXNjcmlwdG9ycy4gVGhlIG5ldyBvcmRlciBkaXNhYmxlcyB0aGUgTUFDICpiZWZvcmUqIGZyZWVpbmcgdGhlbSwgd2hpY2ggaXMgYSBtYWpvciBzaGlmdC4gVGhlIGltcGxpY2F0aW9ucyBoZXJlIGFyZSBzaWduaWZpY2FudDsgYSBjaGFuZ2UgaW4gcmVzb3VyY2UgcmVsZWFzZSBvcmRlciBpcyBhIHBvdGVudGlhbCByZWNpcGUgZm9yIGluc3RhYmlsaXR5LCBlc3BlY2lhbGx5IGR1cmluZyBicmluZy1kb3duIHNjZW5hcmlvcyAoZS5nLiwgYGlwIGxpbmsgc2V0IGV0aDAgZG93bmApLiBUaGUgc2FtZSBjaGFuZ2VzIGhhdmUgYmVlbiBtYWRlIHRvIGBzdG1tYWNfaHdfc2V0dXBgIGFuZCBgc3RtbWFjX3hkcF9vcGVuYCwgc3dpdGNoaW5nIHRoZSBvcmRlciBvZiBNQUMgZW5hYmxlIGFuZCBETUEgc3RhcnQuIFNvLCBub3cgdGhlIERNQSBzdGFydHMgYmVmb3JlIE1BQyBpcyBlbmFibGVkLgoKSSYjMzk7dmUgY29uZmlybWVkIHRoYXQgYHN0bW1hY19kYXRhcGF0aF90ZWFyZG93bmAgaXMgcmVhY2hlZCB2aWEgYF9fc3RtbWFjX3JlbGVhc2VgLCBgc3RtbWFjX3hkcF9yZWxlYXNlYCwgYW5kIGBzdG1tYWNfc3VzcGVuZGAuIFRoaXMgbWVhbnMgdGhlc2UgY2hhbmdlcyBoaXQgKmFsbCogaW50ZXJmYWNlcyB1c2luZyB0aGlzIGRyaXZlciwgd2hpY2ggYXJlIHBvdGVudGlhbGx5IHJlYWNoYWJsZSB0aHJvdWdoIHRoZSBgc3RtbWFjX3BjaWAgZHJpdmVyLgoKSSYjMzk7bSBhbHNvIHNlZWluZyB0aGVzZSBuZXcgYGR3eGdtYWMyXypgIGZ1bmN0aW9ucy4gVGhvc2UgYXJlIG9ubHkgcmVhY2hlZCB3aGVuIGBjb3JlX3R5cGUgPT0gRFdNQUNfQ09SRV9YR01BQ2AuIEkgbmVlZCB0byBmaWd1cmUgb3V0IGhvdyB0byBlbnN1cmUgdGhhdCBjb25kaXRpb24gaXMgbWV0IGluIG15IHRlc3RzLiBJdCBsb29rcyBsaWtlIHRoZSBgc3RtbWFjX3BjaWAgZHJpdmVyIHVzZXMgYHN0bW1hY19wY2lfaW5mb2AgdG8gY29uZmlndXJlIHRoZSBkZXZpY2UsIGFuZCB0aGF0IHN0cnVjdHVyZSBoYXMgYSBgY29yZV90eXBlYCBmaWVsZC4KClRoZSBQQ0kgSUQgdGFibGUgbGlzdHMgYW4gYFhHTUFDX0lEYC4gVGhpcyBpcyBwcm9taXNpbmcuIEkgbmVlZCB0byBmaWd1cmUgb3V0IHdoYXQgdGhhdCBgWEdNQUNfSURgIGFjdHVhbGx5IGlzIGluIHRoZSBjb250ZXh0IG9mIGBwY2lfZGV2aWNlX2lkYC4gQ2FuIEkgcmVhY2ggdGhlIG5ldyBmdW5jdGlvbnM/IFRoZSBxdWVzdGlvbiBpcywgaG93IGRvIEkgZW5zdXJlIGEgUENJIGRldmljZSBnZXRzIGJvdW5kIHRvIHRoaXMgYFhHTUFDX0lEYD8gSWYgSSBjYW4sIHRoZW4gSSBjYW4gcmVhY2ggdGhlIG5ldyBmdW5jdGlvbnMgdGhhdCBpbXBsZW1lbnQgdGhlIGNoYW5nZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTQgMDY6MzY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7WEdNQUNfSUQmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2hucy9obnNfZHNhZl9tYWMuYz05ODU9c3RhdGljIGludCBobnNfbWFjX2dldF9tb2RlKHBoeV9pbnRlcmZhY2VfdCBwaHlfaWYpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2hucy9obnNfZHNhZl9tYWMuYy05OTAtXHRjYXNlIFBIWV9JTlRFUkZBQ0VfTU9ERV9YR01JSTpcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMvaG5zX2RzYWZfbWFjLmM6OTkxOlx0XHRyZXR1cm4gTUFDX1hHTUFDX0lEWDtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMvaG5zX2RzYWZfbWFjLmMtOTkyLVx0ZGVmYXVsdDpcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zL2huc19kc2FmX21hYy5oPTE1PXN0cnVjdCBkc2FmX2RldmljZTtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zL2huc19kc2FmX21hYy5oLTMyLSNkZWZpbmUgTUFDX0dNQUNfSURYIDBcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMvaG5zX2RzYWZfbWFjLmg6MzM6I2RlZmluZSBNQUNfWEdNQUNfSURYIDFcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMvaG5zX2RzYWZfbWFjLmgtMzQtXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvY29tbW9uLmgtNDUtLyogRGV2aWNlIElEICovXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9jb21tb24uaDo0NjojZGVmaW5lIERXWEdNQUNfSURcdFx0MHg3NlxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvY29tbW9uLmgtNDctI2RlZmluZSBEV1hMR01BQ19JRFx0XHQweDI3XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHd4Z21hYzIuaC0xODQtI2RlZmluZSBYR01BQ19MM0w0X0FERFJfQ1RSTFx0XHQweDAwMDAwYzAwXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd3hnbWFjMi5oOjE4NTojZGVmaW5lIFhHTUFDX0lERFJcdFx0XHRHRU5NQVNLKDE2LCA4KVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHd4Z21hYzIuaDoxODY6I2RlZmluZSBYR01BQ19JRERSX0ZOVU1fTUFTS1x0XHRHRU5NQVNLKDcsIDQpXHQvKiBGTlVNIHdpdGhpbiBJRERSICovXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd3hnbWFjMi5oOjE4NzojZGVmaW5lIFhHTUFDX0lERFJfUkVHX01BU0tcdFx0R0VOTUFTSygzLCAwKVx0LyogUkVHIHdpdGhpbiBJRERSICovXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd3hnbWFjMi5oLTE4OC0jZGVmaW5lIFhHTUFDX1RUXHRcdFx0QklUKDEpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHd4Z21hYzJfY29yZS5jPTEyNDE9c3RhdGljIGludCBkd3hnbWFjMl9maWx0ZXJfcmVhZChzdHJ1Y3QgbWFjX2RldmljZV9pbmZvICpodywgdTMyIGZpbHRlcl9ubyxcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd3hnbWFjMl9jb3JlLmMtMTI1MS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3eGdtYWMyX2NvcmUuYzoxMjUyOlx0aWRkciA9IEZJRUxEX1BSRVAoWEdNQUNfSUREUl9GTlVNX01BU0ssIGZpbHRlcl9ubykgfFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHd4Z21hYzJfY29yZS5jOjEyNTM6XHQgICAgICAgRklFTERfUFJFUChYR01BQ19JRERSX1JFR19NQVNLLCByZWcpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHd4Z21hYzJfY29yZS5jOjEyNTQ6XHR2YWx1ZSA9IEZJRUxEX1BSRVAoWEdNQUNfSUREUiwgaWRkcik7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd3hnbWFjMl9jb3JlLmMtMTI1NS1cdHZhbHVlIHw9IFhHTUFDX1RUIHwgWEdNQUNfWEI7XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHd4Z21hYzJfY29yZS5jPTEyNjY9c3RhdGljIGludCBkd3hnbWFjMl9maWx0ZXJfd3JpdGUoc3RydWN0IG1hY19kZXZpY2VfaW5mbyAqaHcsIHUzMiBmaWx0ZXJfbm8sXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHd4Z21hYzJfY29yZS5jLTEyNzgtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd3hnbWFjMl9jb3JlLmM6MTI3OTpcdGlkZHIgPSBGSUVMRF9QUkVQKFhHTUFDX0lERFJfRk5VTV9NQVNLLCBmaWx0ZXJfbm8pIHxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3eGdtYWMyX2NvcmUuYzoxMjgwOlx0ICAgICAgIEZJRUxEX1BSRVAoWEdNQUNfSUREUl9SRUdfTUFTSywgcmVnKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3eGdtYWMyX2NvcmUuYzoxMjgxOlx0dmFsdWUgPSBGSUVMRF9QUkVQKFhHTUFDX0lERFIsIGlkZHIpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHd4Z21hYzJfY29yZS5jLTEyODItXHR2YWx1ZSB8PSBYR01BQ19YQjtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9od2lmLmM9MTExPXN0YXRpYyBjb25zdCBzdHJ1Y3Qgc3RtbWFjX2h3aWZfZW50cnkge1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2h3aWYuYy0yNDktXHRcdC5taW5faWQgPSBEV1hHTUFDX0NPUkVfMl8xMCxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2h3aWYuYzoyNTA6XHRcdC5kZXZfaWQgPSBEV1hHTUFDX0lELFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvaHdpZi5jLTI1MS1cdFx0LnJlZ3MgPSB7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE0IDA2OjM2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDMwOTU0CgkJCQkJCQlvdXRwdXQ6IDQ1CgkJCQkJCQl0aG91Z2h0czogMjE4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgRGV2aWNlIElEIGFuZCBWZXJzaW9uIFJldHJpZXZhbCoqCgpPa2F5LCBzbyBJIHNlZSB0aGF0IGBEV1hHTUFDX0lEYCBpcyBkZWZpbmVkIGFzIGAweDc2YC4gVGhhdCBzZWVtcyBsaWtlIGEgcG90ZW50aWFsIGlkZW50aWZpZXIgZm9yIHRoZSBYR01BQyBjb3JlLiBIb3dldmVyLCBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlIGRyaXZlciBhY3R1YWxseSBkZXRlcm1pbmVzIHRoZSBkZXZpY2UgSUQgYW5kIHZlcnNpb24gYXQgcnVudGltZS4gVGhlIGBzdG1tYWNfaHdpZl9pbml0YCBmdW5jdGlvbiBsb29rcyBsaWtlIHRoZSBrZXkgZW50cnkgcG9pbnQgaGVyZS4KCkkgcmVjYWxsIHRoYXQgdGhpcyBmdW5jdGlvbiBsZXZlcmFnZXMgaGFyZHdhcmUgcmVnaXN0ZXJzIHRvIGRldGVybWluZSB0aGUgdmVyc2lvbi4gVGhlIGNvZGUgc25pcHBldCBmb3IgYHN0bW1hY19nZXRfdmVyc2lvbmAgaXMgd2hhdCBJIG5lZWQgdG8gZm9jdXMgb24uIEl0IHJlYWRzIGZyb20gdGhlIGBNQUNfVkVSU0lPTmAgcmVnaXN0ZXIuIFRoZSBmdW5jdGlvbiB0aGVuIGV4dHJhY3RzIHJlbGV2YW50IGZpZWxkcyB1c2luZyBgRklFTERfR0VUYCwgbmFtZWx5IGBEV01BQ19TTlBTVkVSYCBhbmQgYERXTUFDX1VTRVJWRVJgLiBJZiBgY29yZV90eXBlYCBpcyBhbiBYR01BQywgaXQgZ2V0cyB0aGUgdmVyc2lvbiBmcm9tIGBEV01BQ19VU0VSVkVSYCBlbHNlIGl0IHVzZXMgdGhlIGBEV01BQ19TTlBTVkVSYC4KCkkmIzM5O20gbm93IHRoaW5raW5nIGFib3V0IGBjb3JlX3R5cGVgLiBXaGVyZSBkb2VzIHRoZSBgY29yZV90eXBlYCB2YXJpYWJsZSBjb21lIGZyb20/IElzIGl0IHBhc3NlZCBpbnRvIGBzdG1tYWNfZ2V0X3ZlcnNpb25gPyBObywgaXQgbG9va3MgbGlrZSBgY29yZV90eXBlYCBpcyBhIGxvY2FsIHZhcmlhYmxlIHRvIGBzdG1tYWNfaHdpZl9pbml0YC4gSSYjMzk7bGwgbmVlZCB0byBkb3VibGUtY2hlY2sgdGhhdCB0aGlzIGlzIGFjY3VyYXRlLiBJIHNob3VsZCBzY3J1dGluaXplIGBzdG1tYWNfaHdpZl9pbml0YCB0byBjb25maXJtIGhvdyBgY29yZV90eXBlYCBpcyBkZXRlcm1pbmVkIGFuZCBzZXQgYmVmb3JlIGl0JiMzOTtzIHVzZWQgYnkgYHN0bW1hY19nZXRfdmVyc2lvbmAuIFVuZGVyc3RhbmRpbmcgaG93IGBjb3JlX3R5cGVgIGlzIHNldCBpcyBjcml0aWNhbCBmb3IgaW50ZXJwcmV0aW5nIHRoZSBkZXZpY2UgdmVyc2lvbiBjb3JyZWN0bHkuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE0IDA2OjM2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvaHdpZi5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMjEsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNTAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7ICAyMTpcdHN0YXRpYyB2b2lkIHN0bW1hY19nZXRfdmVyc2lvbihzdHJ1Y3Qgc3RtbWFjX3ByaXYgKnByaXYsXG4gIDIyOlx0XHRcdFx0ICAgICAgIHN0cnVjdCBzdG1tYWNfdmVyc2lvbiAqdmVyKVxuICAyMzpcdHtcbiAgMjQ6XHRcdGVudW0gZHdtYWNfY29yZV90eXBlIGNvcmVfdHlwZSA9IHByaXYtXHUwMDNlcGxhdC1cdTAwM2Vjb3JlX3R5cGU7XG4gIDI1Olx0XHR1bnNpZ25lZCBpbnQgdmVyc2lvbl9vZmZzZXQ7XG4gIDI2Olx0XHR1MzIgdmVyc2lvbjtcbiAgMjc6XHRcbiAgMjg6XHRcdHZlci1cdTAwM2VzbnBzdmVyID0gMDtcbiAgMjk6XHRcdHZlci1cdTAwM2VkZXZfaWQgPSAwO1xuICAzMDpcdFxuICAzMTpcdFx0aWYgKGNvcmVfdHlwZSA9PSBEV01BQ19DT1JFX01BQzEwMClcbiAgMzI6XHRcdFx0cmV0dXJuO1xuICAzMzpcdFxuICAzNDpcdFx0aWYgKGNvcmVfdHlwZSA9PSBEV01BQ19DT1JFX0dNQUMpXG4gIDM1Olx0XHRcdHZlcnNpb25fb2Zmc2V0ID0gR01BQ19WRVJTSU9OO1xuICAzNjpcdFx0ZWxzZVxuICAzNzpcdFx0XHR2ZXJzaW9uX29mZnNldCA9IEdNQUM0X1ZFUlNJT047XG4gIDM4Olx0XG4gIDM5Olx0XHR2ZXJzaW9uID0gcmVhZGwocHJpdi1cdTAwM2Vpb2FkZHIgJiM0MzsgdmVyc2lvbl9vZmZzZXQpO1xuICA0MDpcdFx0aWYgKHZlcnNpb24gPT0gMCkge1xuICA0MTpcdFx0XHRkZXZfaW5mbyhwcml2LVx1MDAzZWRldmljZSwgXCYjMzQ7VmVyc2lvbiBJRCBub3QgYXZhaWxhYmxlXFxuXCYjMzQ7KTtcbiAgNDI6XHRcdFx0cmV0dXJuO1xuICA0MzpcdFx0fVxuICA0NDpcdFxuICA0NTpcdFx0ZGV2X2luZm8ocHJpdi1cdTAwM2VkZXZpY2UsIFwmIzM0O1VzZXIgSUQ6IDB4JXgsIFN5bm9wc3lzIElEOiAweCV4XFxuXCYjMzQ7LFxuICA0NjpcdFx0XHQgRklFTERfR0VUKERXTUFDX1VTRVJWRVIsIHZlcnNpb24pLFxuICA0NzpcdFx0XHQgRklFTERfR0VUKERXTUFDX1NOUFNWRVIsIHZlcnNpb24pKTtcbiAgNDg6XHRcbiAgNDk6XHRcdHZlci1cdTAwM2VzbnBzdmVyID0gRklFTERfR0VUKERXTUFDX1NOUFNWRVIsIHZlcnNpb24pO1xuICA1MDpcdFx0aWYgKGNvcmVfdHlwZSA9PSBEV01BQ19DT1JFX1hHTUFDKVxuICA1MTpcdFx0XHR2ZXItXHUwMDNlZGV2X2lkID0gRklFTERfR0VUKERXTUFDX1VTRVJWRVIsIHZlcnNpb24pO1xuICA1MjpcdH1cbiAgNTM6XHRcbiAgNTQ6XHRzdGF0aWMgdm9pZCBzdG1tYWNfZHdtYWNfbW9kZV9xdWlyayhzdHJ1Y3Qgc3RtbWFjX3ByaXYgKnByaXYpXG4gIDU1Olx0e1xuICA1NjpcdFx0c3RydWN0IG1hY19kZXZpY2VfaW5mbyAqbWFjID0gcHJpdi1cdTAwM2VodztcbiAgNTc6XHRcbiAgNTg6XHRcdGlmIChwcml2LVx1MDAzZWNoYWluX21vZGUpIHtcbiAgNTk6XHRcdFx0ZGV2X2luZm8ocHJpdi1cdTAwM2VkZXZpY2UsIFwmIzM0O0NoYWluIG1vZGUgZW5hYmxlZFxcblwmIzM0Oyk7XG4gIDYwOlx0XHRcdHByaXYtXHUwMDNlZGVzY3JpcHRvcl9tb2RlID0gU1RNTUFDX0NIQUlOX01PREU7XG4gIDYxOlx0XHRcdG1hYy1cdTAwM2Vtb2RlID0gXHUwMDI2Y2hhaW5fbW9kZV9vcHM7XG4gIDYyOlx0XHR9IGVsc2Uge1xuICA2MzpcdFx0XHRkZXZfaW5mbyhwcml2LVx1MDAzZWRldmljZSwgXCYjMzQ7UmluZyBtb2RlIGVuYWJsZWRcXG5cJiMzNDspO1xuICA2NDpcdFx0XHRwcml2LVx1MDAzZWRlc2NyaXB0b3JfbW9kZSA9IFNUTU1BQ19SSU5HX01PREU7XG4gIDY1Olx0XHRcdG1hYy1cdTAwM2Vtb2RlID0gXHUwMDI2cmluZ19tb2RlX29wcztcbiAgNjY6XHRcdH1cbiAgNjc6XHR9XG4gIDY4Olx0XG4gIDY5Olx0c3RhdGljIGludCBzdG1tYWNfZHdtYWMxX3F1aXJrcyhzdHJ1Y3Qgc3RtbWFjX3ByaXYgKnByaXYpXG4gIDcwOlx0e1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNCAwNjozNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzMjMwNwoJCQkJCQkJb3V0cHV0OiA0NQoJCQkJCQkJdGhvdWdodHM6IDEyNwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIHN0bW1hYyBWZXJzaW9uIFJldHJpZXZhbCoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgaG93IGBzdG1tYWNfZ2V0X3ZlcnNpb25gIHdvcmtzLiBJdCYjMzk7cyBwdWxsaW5nIHRoZSBgY29yZV90eXBlYCBmcm9tIHRoZSBgcHJpdi0mZ3Q7cGxhdGAgc3RydWN0dXJlLiBSaWdodCwgYW5kIHRoYXQgYHByaXYtJmd0O3BsYXRgIGlzIHNldCB1cCBkdXJpbmcgdGhlIGJpbmRpbmcgcHJvY2Vzcy4gSSYjMzk7bSB0aGlua2luZyBhYm91dCBTeXprYWxsZXIgYW5kIGhvdyBpdCBpbnRlcmFjdHMgd2l0aCB0aGlzLiBXaGVuIFN5emthbGxlciB1c2VzIGBzdG1tYWNfcGNpYCwgaXQgZ29lcyB0aHJvdWdoIGBzdG1tYWNfcGNpX2luZm9gLCBhbmQgdGhhdCYjMzk7cyB3aGVyZSB0aGUgYGNvcmVfdHlwZWAgaXMgc2V0LiBJdCBzZWVtcyBsaWtlIGl0JiMzOTtzIGJlaW5nIHNldCB0byBlaXRoZXIgYERXTUFDX0NPUkVfR01BQzRgIG9yIGAwYCwgd2hpY2ggaXMgYWxpYXNlZCB0byBgRFdNQUNfQ09SRV9HTUFDYC4gVGhhdCYjMzk7cyBpbnRlcmVzdGluZywgYnV0IEkgbmVlZCB0byBtYWtlIHN1cmUgSSYjMzk7bSBub3QgbWlzc2luZyBhbnl0aGluZy4gTXkgcHJpbWFyeSBjb25jZXJuIGlzIHRvIGVuc3VyZSB0aGUgc3l6a2FsbGVyIHRlc3QgY292ZXJhZ2UgaXMgc291bmQuCgpUaGUgdGhpbmcgdGhhdCBJIGFtIG1pc3NpbmcgaXMgdGhlIGBEV01BQ19DT1JFX1hHTUFDYCB2YWx1ZSEgSXMgdGhlcmUgYW55IFBDSSBJRCBjb25maWd1cmF0aW9uIHRoYXQgY2F1c2VzIGBjb3JlX3R5cGVgIHRvIGJlIHNldCB0byBgRFdNQUNfQ09SRV9YR01BQ2A/IEkgbmVlZCB0byBkb3VibGUtY2hlY2sgYHN0bW1hY19wY2kuY2AgdG8gYmUgY29tcGxldGVseSB0aG9yb3VnaC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTQgMDY6MzY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkVycm9yOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bm8gbWF0Y2hlczwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtYR01BQyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19wY2kuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtlcnJvciYjMzQ7OiAmIzM0O25vIG1hdGNoZXMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE0IDA2OjM2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDMyNzYwCgkJCQkJCQlvdXRwdXQ6IDQzCgkJCQkJCQl0aG91Z2h0czogMzEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIGFuIGV4cGVydCYjMzk7cyBpbnRlcm5hbCBtb25vbG9ndWU6CgoqKkludmVzdGlnYXRpbmcgdGhlIFhHTUFDIEFic2VuY2UqKgoKSG1tLCBpbnRlcmVzdGluZy4gTXkgaW5pdGlhbCBodW5jaCB3YXMgdGhhdCB0aGUgYFhHTUFDYCBtb2R1bGUgd2FzIHBhcnQgb2YgdGhlIHN0YW5kYXJkIFNUTU1BQyBkcml2ZXIsIGJ1dCBhIHF1aWNrIGNoZWNrIHJldmVhbHMgdGhhdCBgc3RtbWFjX3BjaS5jYCBkb2VzbiYjMzk7dCBhY3R1YWxseSBjb250YWluIHRoZSBzeW1ib2wuIFRoYXQmIzM5O3MgYSBrZXkgcGllY2Ugb2YgaW5mb3JtYXRpb24sIGFuZCBpdCBtZWFucyBJIG5lZWQgdG8gYWRqdXN0IG15IHNlYXJjaCBzdHJhdGVneS4gV2hlcmUgZWxzZSBjb3VsZCBpdCBiZSBoaWRpbmcsIG9yIHBvdGVudGlhbGx5LCB1bmRlciBhIHNsaWdodGx5IGRpZmZlcmVudCBuYW1lPyBNeSBpbW1lZGlhdGUgbmV4dCBzdGVwIGlzIHRvIGV4cGxvcmUgdGhlICYjMzQ7ZHdtYWMtaW50ZWwuYyYjMzQ7IGZpbGUuIEludGVsIGlzIGEgYmlnIHBsYXllciBpbiB0aGlzIHNwYWNlLCBhbmQgdGhleSBvZnRlbiBpbXBsZW1lbnQgdGhlaXIgb3duIHNwZWNpZmljIHZlcnNpb25zIG9mIHRoZXNlIGRyaXZlcnMuIFRoZSBYR01BQyBpbXBsZW1lbnRhdGlvbiwgaWYgcHJlc2VudCBhdCBhbGwsIG1pZ2h0IGJlIHR1Y2tlZCBhd2F5IGluIHRoZXJlLiBJJiMzOTtsbCBuZWVkIHRvIHNjcnV0aW5pemUgdGhhdCBmaWxlIGNhcmVmdWxseSwgbG9va2luZyBmb3IgYW55dGhpbmcgdGhhdCBzb3VuZHMgbGlrZSBhIHJlbGF0ZWQgaW1wbGVtZW50YXRpb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE0IDA2OjM2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5FcnJvcjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm5vIG1hdGNoZXM8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7WEdNQUMmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1pbnRlbC5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O2Vycm9yJiMzNDs6ICYjMzQ7bm8gbWF0Y2hlcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTQgMDY6MzY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzMwNDQKCQkJCQkJCW91dHB1dDogNDUKCQkJCQkJCXRob3VnaHRzOiAxMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UgYW5kIHdyaXR0ZW4gaW4gdGhlIGZpcnN0IHBlcnNvbjoKCioqTmF2aWdhdGluZyB0aGUgTG9vbmdzb24gRFdNQUMgRHJpdmVyKioKCk9rYXksIEkmIzM5O20gdGhpbmtpbmcgYWJvdXQgdGhlIERXTUFDIGRyaXZlciBzcGVjaWZpY2FsbHkgZm9yIExvb25nc29uLiBNeSBtZW50YWwgbWFwIGlzIGdvaW5nIHN0cmFpZ2h0IHRvIGBkd21hYy1sb29uZ3Nvbi5jYC4gVGhhdCYjMzk7cyB3aGVyZSBJIG5lZWQgdG8gc3RhcnQuIEl0JiMzOTtzIHRoZSBwb2ludCBvZiBpbnRlZ3JhdGlvbiwgd2hlcmUgdGhlIGdlbmVyaWMgRFdNQUMgY29kZSBpbnRlcmZhY2VzIHdpdGggdGhlIExvb25nc29uLXNwZWNpZmljIGhhcmR3YXJlLiBJJiMzOTttIGltbWVkaWF0ZWx5IHRyeWluZyB0byByZWNhbGw6IHdoYXQgYXJlIHRoZSBrZXkgZGlmZmVyZW5jZXMgYmV0d2VlbiB0aGUgZ2VuZXJpYyBEV01BQyBmcmFtZXdvcmsgYW5kIHRoZSBMb29uZ3NvbiBTb0MmIzM5O3MgaW1wbGVtZW50YXRpb24/IENsb2NrIG1hbmFnZW1lbnQ/IERNQSBjb25maWd1cmF0aW9uPyBJbnRlcnJ1cHQgaGFuZGxpbmcgc3BlY2lmaWMgdG8gdGhlIExvb25nc29uIHBsYXRmb3JtPyBNZW1vcnkgbWFwcGluZz8gUG93ZXIgbWFuYWdlbWVudD8gSSBuZWVkIHRvIHF1aWNrbHkgcmVmcmVzaCBteSB1bmRlcnN0YW5kaW5nIG9mIGhvdyB0aGUgTG9vbmdzb24gYXJjaGl0ZWN0dXJlIGludGVyYWN0cyB3aXRoIHRoZSBzdGFuZGFyZCBEV01BQyByZWdpc3RlcnMgYW5kIHN0cnVjdHVyZXMuIEkmIzM5O20gYW50aWNpcGF0aW5nIHRoYXQgSSYjMzk7bGwgYmUgbG9va2luZyBmb3IgYW55IG5vbi1zdGFuZGFyZCByZWdpc3RlciBhY2Nlc3NlcyBvciBpbnRlcnJ1cHQgaGFuZGxpbmcgcm91dGluZXMgd2l0aGluIHRoYXQgZmlsZS4gSSBleHBlY3QgdG8gZmluZCBzb21lIGNyaXRpY2FsIGluaXRpYWxpemF0aW9uIGNvZGUgd2l0aGluIHRoaXMgZmlsZSBmb3IgdGhlIGdpdmVuIGhhcmR3YXJlLiBVbHRpbWF0ZWx5LCBJJiMzOTttIHRyeWluZyB0byBmaWd1cmUgb3V0IGhvdyB0aGlzIGBkd21hYy1sb29uZ3Nvbi5jYCBmaWxlICppbnRlZ3JhdGVzKiB3aXRoIHRoZSByZXN0IG9mIHRoZSBEV01BQyBzdGFjaywgYW5kIHdoYXQgY3VzdG9tIExvb25nc29uLXNwZWNpZmljIGJpdHMgYXJlIGhhbmRsZWQgdGhlcmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE0IDA2OjM3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5FcnJvcjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm5vIG1hdGNoZXM8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7WEdNQUMmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1sb29uZ3Nvbi5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O2Vycm9yJiMzNDs6ICYjMzQ7bm8gbWF0Y2hlcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTQgMDY6Mzc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzMzOTAKCQkJCQkJCW91dHB1dDogNDQKCQkJCQkJCXRob3VnaHRzOiAxMgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBzdW1tYXJ5LCBhcyB0aG91Z2ggSSB3ZXJlIHBvbmRlcmluZyB0aGlzOgoKKipDb25zaWRlcmluZyB0aGUgYGR3bWFjLW1vdG9yY29tbS5jYCBEcml2ZXIqKgoKT2theSwgc28gSSYjMzk7bSB0aGlua2luZyBhYm91dCBFdGhlcm5ldCBkcml2ZXJzLCBwYXJ0aWN1bGFybHkgaW4gdGhlIGNvbnRleHQgb2YgdGhpcyBzcGVjaWZpYyBzeXN0ZW0sIGFuZCB0aGUgYGR3bWFjLW1vdG9yY29tbS5jYCBkcml2ZXIgaXMgcG9raW5nIGF0IHRoZSBmcm9udCBvZiBteSBtaW5kLiBXaGF0JiMzOTtzIHRoZSBkZWFsIHdpdGggdGhpcyBwYXJ0aWN1bGFyIGltcGxlbWVudGF0aW9uPyBJcyBpdCBkb2luZyBhbnl0aGluZyBzcGVjaWFsIG9yIHVuaXF1ZSB0aGF0IEkgbmVlZCB0byBiZSBhd2FyZSBvZj8gSSBuZWVkIHRvIGFuYWx5emUgaG93IGl0IGhhbmRsZXMgdGhlIE1BQyYjMzk7cyBjb21tdW5pY2F0aW9uLiBBcmUgdGhlcmUgYW55IGRldmlhdGlvbnMgZnJvbSB0aGUgc3RhbmRhcmQgRGVzaWduV2FyZSBNQUMgZHJpdmVyPyBEb2VzIGl0IGNvbnRhaW4gYW55IE1vdG9yY29tbS1zcGVjaWZpYyBoYXJkd2FyZSBxdWlya3MsIG9yIGFyZSB0aGV5IGhhbmRsZWQgdXBzdHJlYW0/IEkgaGF2ZSB0byBjb25zaWRlciB0aGUgcGVyZm9ybWFuY2UgaW1wbGljYXRpb25zIGhlcmUsIGVzcGVjaWFsbHkgaWYgaXQmIzM5O3MgaW50ZXJhY3Rpbmcgd2l0aCBhbnkgY3VzdG9tIGhhcmR3YXJlIG9yIGEgbm9uLXN0YW5kYXJkIFBIWS4gTGV0IG1lIGRpdmUgaW50byB0aGUgY29kZSBhbmQgc2VlIHdoYXQgc3RhbmRzIG91dC4gSSBuZWVkIHRvIGtlZXAgYW4gZXllIG91dCBmb3IgcG90ZW50aWFsIGludGVycnVwdCBoYW5kbGluZyBkaWZmZXJlbmNlcywgRE1BIHNldHVwIHRoYXQgaXMgb3B0aW1pemVkLCBhbmQgYW55IHBvd2VyIG1hbmFnZW1lbnQgY29uc2lkZXJhdGlvbnMgc3BlY2lmaWMgdG8gdGhpcyBkcml2ZXIgYW5kIGl0cyBpbnRlZ3JhdGlvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTQgMDY6Mzc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkVycm9yOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bm8gbWF0Y2hlczwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtYR01BQyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLW1vdG9yY29tbS5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O2Vycm9yJiMzNDs6ICYjMzQ7bm8gbWF0Y2hlcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTQgMDY6Mzc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzM2NjgKCQkJCQkJCW91dHB1dDogNTAKCQkJCQkJCXRob3VnaHRzOiAyNzcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQW5hbHlzaXMgb2YgdGhlIERXTUFDL1NUTU1BQyBEcml2ZXIgSW50ZXJhY3Rpb24qKgoKT2theSwgc28gSSYjMzk7bSBkaWdnaW5nIGludG8gdGhpcywgYW5kIGl0IHNlZW1zIHByZXR0eSBjbGVhciB0aGF0IGBEV01BQ19DT1JFX1hHTUFDYCBpc24mIzM5O3QgYWNjZXNzaWJsZSB0aHJvdWdoIFBDSS4gVGhhdCYjMzk7cyBub3QgYSBzdXJwcmlzZTsgaXQmIzM5O3MgYSBwbGF0Zm9ybSBkZXZpY2UsIGxpa2VseSBjb25maWd1cmVkIGF0IGJvb3QgYnkgc29tZXRoaW5nIGxpa2UgYGR3bWFjLXNvY2ZwZ2EuY2AsIGBkd21hYy10ZWdyYS5jYCwgb3IgYHN0bW1hY19wbGF0Zm9ybS5jYC4gVGhlIHF1ZXN0aW9uIGlzLCBjYW4gU3l6a2FsbGVyIGVtdWxhdGUgdGhvc2UgcGxhdGZvcm0gZGV2aWNlcyBlZmZlY3RpdmVseT8gSSBrbm93IGl0ICpjYW4qIGluamVjdCBkZXZpY2UgdHJlZSBub2RlcywgYXNzdW1pbmcgaXQgaGFzIGEgZnVuY3Rpb24gbGlrZSBgc3l6X2luaXRfbmV0X3NvY2tldGAgb3Igc29tZXRoaW5nIHNpbWlsYXIgYXZhaWxhYmxlLCBidXQgdXN1YWxseSwgaXQgd29uJiMzOTt0IGR5bmFtaWNhbGx5IGNyZWF0ZSBwbGF0Zm9ybSBkZXZpY2VzIHVubGVzcyB0aGVyZSYjMzk7cyBhIHNwZWNpZmljIHBzZXVkby1zeXNjYWxsIGRlc2lnbmVkIGZvciB0aGF0IHB1cnBvc2UsIG9yIGlmIGl0JiMzOTtzIGJha2VkIGludG8gdGhlIGluaXRpYWwgUUVNVSBpbWFnZS4KCkhvbGQgb24uLi4gVGhpcyBwYXRjaCBpcyB0b3VjaGluZyBgc3RtbWFjX21haW4uY2AuIFRoYXQmIzM5O3MgdGhlICpjb3JlKiBkcml2ZXIgZm9yICphbGwqIFNUTU1BQyBkZXZpY2VzLCBpbmNsdWRpbmcgdGhpbmdzIGxpa2UgYERXTUFDX0NPUkVfR01BQzRgIGFuZCBgRFdNQUNfQ09SRV9HTUFDYC4gVGhhdCYjMzk7cyBhIGtleSBvYnNlcnZhdGlvbi4gTm93IEkgbmVlZCB0byBmaWd1cmUgb3V0IGlmIGBzdG1tYWNfZGF0YXBhdGhfdGVhcmRvd25gIGdldHMgY2FsbGVkIGZvciBgRFdNQUNfQ09SRV9HTUFDNGAuIEl0JiMzOTtzIGVzc2VudGlhbCB0byB1bmRlcnN0YW5kIHRoZSBzY29wZSBvZiB0aGlzIGNoYW5nZS4KCk9rYXksIEkmIzM5O3ZlIGNoZWNrZWQgdGhlIGNvZGUsIGFuZCB5ZXMsIGBzdG1tYWNfZGF0YXBhdGhfdGVhcmRvd25gIGlzIGRlZmluaXRlbHkgY2FsbGVkIGluIGZ1bmN0aW9ucyBsaWtlIGBfX3N0bW1hY19yZWxlYXNlYCwgYHN0bW1hY194ZHBfcmVsZWFzZWAsIGFuZCBgc3RtbWFjX3N1c3BlbmRgLiBHb29kLiBBbmQgdGhlc2UgZnVuY3Rpb25zIGFyZSBjYWxsZWQgZm9yICphbGwqIHN0bW1hYyBkZXZpY2VzLCByZWdhcmRsZXNzIG9mIHRoZSBzcGVjaWZpYyBgY29yZV90eXBlYC4gVGhpcyBpcyB0aGUgY29uZmlybWF0aW9uIEkgbmVlZGVkOiBpdCBzZWVtcyB0aGUgZnVuY3Rpb24gKmRvZXMqIGFwcGx5IHRvIG11bHRpcGxlIGRldmljZXMgYW5kIGlzbiYjMzk7dCBzcGVjaWZpYyB0byBgRFdNQUNfQ09SRV9YR01BQ2AuIEkgbmVlZCB0byB2ZXJpZnkgdGhhdCBvbmNlIG1vcmUuIEJ1dCBpdCBsb29rcyBsaWtlIEkgdW5kZXJzdGFuZCB0aGUgZmxvdyBvZiBldmVudHMgaGVyZSBhbmQgdGhlIGltcGFjdCBvZiB0aGUgcGF0Y2guCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE0IDA2OjM3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX21haW4uYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDQyODAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNTAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7NDI4MDpcdFx0a2ZyZWUoZG1hX2NvbmYpO1xuNDI4MTpcdFx0cmV0dXJuIHJldDtcbjQyODI6XHR9XG40MjgzOlx0XG40Mjg0Olx0c3RhdGljIHZvaWQgX19zdG1tYWNfcmVsZWFzZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxuNDI4NTpcdHtcbjQyODY6XHRcdHN0cnVjdCBzdG1tYWNfcHJpdiAqcHJpdiA9IG5ldGRldl9wcml2KGRldik7XG40Mjg3Olx0XHR1OCBjaGFuO1xuNDI4ODpcdFxuNDI4OTpcdFx0c3RtbWFjX2Rpc2FibGVfYWxsX3F1ZXVlcyhwcml2KTtcbjQyOTA6XHRcbjQyOTE6XHRcdGZvciAoY2hhbiA9IDA7IGNoYW4gXHUwMDNjIHByaXYtXHUwMDNlcGxhdC1cdTAwM2V0eF9xdWV1ZXNfdG9fdXNlOyBjaGFuJiM0MzsmIzQzOylcbjQyOTI6XHRcdFx0aHJ0aW1lcl9jYW5jZWwoXHUwMDI2cHJpdi1cdTAwM2VkbWFfY29uZi50eF9xdWV1ZVtjaGFuXS50eHRpbWVyKTtcbjQyOTM6XHRcbjQyOTQ6XHRcdG5ldGlmX3R4X2Rpc2FibGUoZGV2KTtcbjQyOTU6XHRcbjQyOTY6XHRcdC8qIEZyZWUgdGhlIElSUSBsaW5lcyAqL1xuNDI5NzpcdFx0c3RtbWFjX2ZyZWVfaXJxKGRldiwgUkVRX0lSUV9FUlJfQUxMLCAwKTtcbjQyOTg6XHRcbjQyOTk6XHRcdC8qIEhhcyB0byBydW4gYmVmb3JlIG1hY19saW5rX2Rvd24oKSBkaXNhYmxlcyB0aGUgTUFDLiAqL1xuNDMwMDpcdFx0c3RtbWFjX2RhdGFwYXRoX3RlYXJkb3duKHByaXYpO1xuNDMwMTpcdFxuNDMwMjpcdFx0LyogU3RvcCBhbmQgZGlzY29ubmVjdCB0aGUgUEhZICovXG40MzAzOlx0XHRwaHlsaW5rX3N0b3AocHJpdi1cdTAwM2VwaHlsaW5rKTtcbjQzMDQ6XHRcbjQzMDU6XHRcdC8qIFJlbGVhc2UgYW5kIGZyZWUgdGhlIFJ4L1R4IHJlc291cmNlcyAqL1xuNDMwNjpcdFx0ZnJlZV9kbWFfZGVzY19yZXNvdXJjZXMocHJpdiwgXHUwMDI2cHJpdi1cdTAwM2VkbWFfY29uZik7XG40MzA3Olx0XG40MzA4Olx0XHRzdG1tYWNfcmVsZWFzZV9wdHAocHJpdik7XG40MzA5Olx0XG40MzEwOlx0XHRpZiAoc3RtbWFjX2ZwZV9zdXBwb3J0ZWQocHJpdikpXG40MzExOlx0XHRcdGV0aHRvb2xfbW1zdl9zdG9wKFx1MDAyNnByaXYtXHUwMDNlZnBlX2NmZy5tbXN2KTtcbjQzMTI6XHR9XG40MzEzOlx0XG40MzE0Olx0LyoqXG40MzE1Olx0ICogIHN0bW1hY19yZWxlYXNlIC0gY2xvc2UgZW50cnkgcG9pbnQgb2YgdGhlIGRyaXZlclxuNDMxNjpcdCAqICBAZGV2IDogZGV2aWNlIHBvaW50ZXIuXG40MzE3Olx0ICogIERlc2NyaXB0aW9uOlxuNDMxODpcdCAqICBUaGlzIGlzIHRoZSBzdG9wIGVudHJ5IHBvaW50IG9mIHRoZSBkcml2ZXIuXG40MzE5Olx0ICovXG40MzIwOlx0c3RhdGljIGludCBzdG1tYWNfcmVsZWFzZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxuNDMyMTpcdHtcbjQzMjI6XHRcdHN0cnVjdCBzdG1tYWNfcHJpdiAqcHJpdiA9IG5ldGRldl9wcml2KGRldik7XG40MzIzOlx0XG40MzI0Olx0XHQvKiBJZiB0aGUgUEhZIG9yIE1BQyBoYXMgV29MIGVuYWJsZWQsIHRoZW4gdGhlIFBIWSB3aWxsIG5vdCBiZVxuNDMyNTpcdFx0ICogc3VzcGVuZGVkIHdoZW4gcGh5bGlua19zdG9wKCkgaXMgY2FsbGVkIGJlbG93LiBTZXQgdGhlIFBIWVxuNDMyNjpcdFx0ICogdG8gaXRzIHNsb3dlc3Qgc3BlZWQgdG8gc2F2ZSBwb3dlci5cbjQzMjc6XHRcdCAqL1xuNDMyODpcdFx0aWYgKGRldmljZV9tYXlfd2FrZXVwKHByaXYtXHUwMDNlZGV2aWNlKSlcbjQzMjk6XHRcdFx0cGh5bGlua19zcGVlZF9kb3duKHByaXYtXHUwMDNlcGh5bGluaywgZmFsc2UpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNCAwNjozNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzNTIwNgoJCQkJCQkJb3V0cHV0OiAyMAoJCQkJCQkJdGhvdWdodHM6IDkyMgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIFNUTU1BQyBEYXRhcGF0aCBUZWFyZG93biBhbmQgU2V0dXAqKgoKT2theSwgc28gSSYjMzk7dmUgY29uZmlybWVkIHRoYXQgYF9fc3RtbWFjX3JlbGVhc2VgIGNhbGxzIGBzdG1tYWNfZGF0YXBhdGhfdGVhcmRvd24ocHJpdilgLiBMZXQmIzM5O3MgYnJlYWsgZG93biB3aGF0JiMzOTtzIGhhcHBlbmluZyBpbiBgc3RtbWFjX2RhdGFwYXRoX3RlYXJkb3duYC4gSXQgYXBwZWFycyB0byBiZSBhIG11bHRpLWNoYW5uZWwgRE1BIHNodXRkb3duIHNlcXVlbmNlLiBJdCBpdGVyYXRlcyB0aHJvdWdoIHRoZSBjb25maWd1cmVkIFRYIGFuZCBSWCBxdWV1ZXMsIHN0b3BwaW5nIHRoZSBETUEgY2hhbm5lbHMsIHdhaXRpbmcgZm9yIHRoZW0gdG8gcmVwb3J0IHRoZXkmIzM5O3JlIHN0b3BwZWQsIGRyYWluaW5nIE1UTCBxdWV1ZXMsIGRpc2FibGluZyB0aGUgTUFDLCBhbmQgdGhlbiByZXBlYXRpbmcgdGhlIHByb2Nlc3MgZm9yIFJYIGNoYW5uZWxzLgoKQSBrZXkgcG9pbnQgaXMgdGhlIGNvbmRpdGlvbmFsIGNoZWNrIGBwcml2LSZndDtody0mZ3Q7ZG1hLSZndDt0eF9kbWFfc3RvcHBlZGAuIEZvciBhIEdNQUM0LCB0aGlzIHdpbGwgYmUgTlVMTCwgYmVjYXVzZSBvbmx5IGBkd3hnbWFjMjEwX2RtYV9vcHNgIHByb3ZpZGVzIGl0LCBhbmQgdGhlIHdhaXQgaXMgc2tpcHBlZCwgd2hpY2ggaXMgcHJvYmFibHkgb2theS4KCk5vdyBoZXJlIGlzIHdoZXJlIHRoaW5ncyBnZXQgaW50ZXJlc3Rpbmc6IHRoZSBvcmRlciBvZiBvcGVyYXRpb25zIGluIHRoaXMgdGVhcmRvd24sIHNwZWNpZmljYWxseSB0aGUgcmVsYXRpdmUgcG9zaXRpb24gb2YgYHN0bW1hY19zdG9wX3R4X2RtYWAsIGBzdG1tYWNfbWFjX3NldGAsIGFuZCBgc3RtbWFjX3N0b3BfcnhfZG1hYCwgaGFzIGJlZW4gYWx0ZXJlZC4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlLgoKUHJldmlvdXNseSBpdCB3YXM6CgoxLiBgc3RtbWFjX3N0b3BfcnhfZG1hYAoyLiBgc3RtbWFjX3N0b3BfdHhfZG1hYAozLiBgc3RtbWFjX21hY19zZXQoLi4uLCBmYWxzZSlgCgpOb3cgaXQmIzM5O3M6CgoxLiBgc3RtbWFjX3N0b3BfdHhfZG1hYAoyLiBgc3RtbWFjX21hY19zZXQoLi4uLCBmYWxzZSlgCjMuIGBzdG1tYWNfc3RvcF9yeF9kbWFgCgpBbHNvLCBpbiBgc3RtbWFjX2h3X3NldHVwYCBhbmQgYHN0bW1hY194ZHBfb3BlbmAsIHRoZSBvcmRlciBvZiBgc3RtbWFjX21hY19zZXQoLi4uLCB0cnVlKWAgYW5kIGBzdG1tYWNfc3RhcnRfYWxsX2RtYWAgaGFzIGJlZW4gc3dhcHBlZDoKClByZXZpb3VzbHk6CgoxLiBgc3RtbWFjX21hY19zZXQoLi4uLCB0cnVlKWAKMi4gYHN0bW1hY19zdGFydF9hbGxfZG1hYAoKTm93OgoKMS4gYHN0bW1hY19zdGFydF9hbGxfZG1hYAoyLiBgc3RtbWFjX21hY19zZXQoLi4uLCB0cnVlKWAKClNpbmNlIHRoaXMgY2hhbmdlIGltcGFjdHMgdGhlIGJlaGF2aW9yIG9mIGFsbCBzdG1tYWMgZGV2aWNlcywgYW5kIGVzcGVjaWFsbHkgdGhvc2UgYWNjZXNzaWJsZSB0aHJvdWdoIFBDSSBpbiBzb21ldGhpbmcgbGlrZSBRRU1VLCB0aGlzIHdhcnJhbnRzIGltbWVkaWF0ZSBmdXp6aW5nLiBJdCBoYXMgYSByZWFsIHBvdGVudGlhbCB0byBicmVhayB0aGluZ3MgYW5kIGV4cG9zZSBhbnkgdGltaW5nIG9yIHJlc291cmNlIG1hbmFnZW1lbnQgaXNzdWVzLiBJdCBpcyBpbXBvcnRhbnQgdG8gY29uZmlybSB0aGUgY29uZmlnIG9wdGlvbnMsIGBDT05GSUdfU1RNTUFDX0VUSGAgYW5kIGBDT05GSUdfU1RNTUFDX1BDSWAuIEkgd2FudCB0byBzZWUgaWYgdGhlIGZ1enppbmcgY2FuIGV4cG9zZSBhbnkgaXNzdWVzIHRoYXQgbWF5IGFyaXNlIGZyb20gdGhpcyByZW9yZGVyaW5nIG9mIGNhbGxzLCBvciBldmVuIGZyb20gdGhlIHNraXBwZWQgd2FpdC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTQgMDY6Mzc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIFNUTU1BQ19FVEgmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvS2NvbmZpZy0xLSMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvS2NvbmZpZzoyOmNvbmZpZyBTVE1NQUNfRVRIXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9LY29uZmlnLTMtXHR0cmlzdGF0ZSBcJiMzNDtTVE1pY3JvZWxlY3Ryb25pY3MgTXVsdGktR2lnYWJpdCBFdGhlcm5ldCBkcml2ZXJcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTQgMDY6Mzc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzY4MzcKCQkJCQkJCW91dHB1dDogMjAKCQkJCQkJCXRob3VnaHRzOiAxMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipBbmFseXppbmcgdGhlIFNUTU1BQyBQQ0kgQ29uZmlndXJhdGlvbioqCgpPa2F5LCBzbyB0aGUgaW5pdGlhbCB0aG91Z2h0IGlzLCBuYXR1cmFsbHksIHRvIHZlcmlmeSB0aGUgc3RhdGUgb2YgYENPTkZJR19TVE1NQUNfUENJYC4gTXkgaW5zdGluY3QgaXMgdG8gcXVpY2tseSBhc3Nlc3MgaXRzIGN1cnJlbnQgc2V0dGluZywgdW5kZXJzdGFuZGluZyB0aGF0IHRoaXMgZmxhZyBkaXJlY3RseSBnb3Zlcm5zIHRoZSBpbmNsdXNpb24gb2YgdGhlIFN5bm9wc3lzIFNUTU1BQyBFdGhlcm5ldCBkcml2ZXIgZm9yIFBDSS1iYXNlZCBuZXR3b3JrIGludGVyZmFjZXMuIEkmIzM5O20gbGlrZWx5IGdlYXJpbmcgdXAgZm9yIGEgZGVlcGVyIGRpdmUgaW50byBrZXJuZWwgY29uZmlndXJhdGlvbiwgZGVidWdnaW5nIGEgbmV0d29yayBpc3N1ZSwgb3IgcGVyaGFwcyBldmVuIHByZXBhcmluZyB0byBlbmFibGUgU1RNTUFDIG9uIGEgbmV3IGhhcmR3YXJlIHBsYXRmb3JtLiBUaGUgaW1tZWRpYXRlIHF1ZXN0aW9uIGluIG15IG1pbmQgaXM6IGlzIGl0IGVuYWJsZWQgYXMgYSBtb2R1bGUgKE0pLCBidWlsdC1pbiAoWSksIG9yIGRpc2FibGVkIChOKT8gVGhhdCYjMzk7cyB0aGUgZmlyc3QgZGF0YSBwb2ludCBJIG5lZWQgdG8gZXN0YWJsaXNoLiBJIG5lZWQgdG8ga25vdyB3aGVyZSBJIGFtIHdpdGggdGhpcyBtb2R1bGUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE0IDA2OjM3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBTVE1NQUNfUENJJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL0tjb25maWc9Mzk4PWNvbmZpZyBEV01BQ19NT1RPUkNPTU1cbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9LY29uZmlnLTQwNi1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL0tjb25maWc6NDA3OmNvbmZpZyBTVE1NQUNfUENJXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9LY29uZmlnLTQwOC1cdHRyaXN0YXRlIFwmIzM0O1NUTU1BQyBQQ0kgYnVzIHN1cHBvcnRcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTQgMDY6Mzc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzcxNjgKCQkJCQkJCW91dHB1dDogNDQKCQkJCQkJCXRob3VnaHRzOiAxNAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkFuYWx5emluZyB0aGUgU1RNTUFDX1BDSSBEZXBlbmRlbmNpZXMqKgoKQWxyaWdodCwgbGV0JiMzOTtzIGRpdmUgaW4uIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzLCAmIzM0O09rYXksIGBTVE1NQUNfUENJYC4uLiB3aGF0JiMzOTtzIGl0IHRpZWQgdG8/JiMzNDsgSSBuZWVkIHRvIHF1aWNrbHkgbWFwIG91dCB0aGUgZGVwZW5kZW5jaWVzLiBJJiMzOTttIGdvaW5nIHRvIG1lbnRhbGx5IHJ1biB0aHJvdWdoIHRoZSBsaWtlbHkgY2FuZGlkYXRlczogUENJIGJ1cyBkcml2ZXIsIG9idmlvdXNseSwgYnV0IHdoYXQgc3BlY2lmaWMgUENJIHJlZ2lzdGVycyBpcyBpdCBsZXZlcmFnaW5nPyBBcmUgdGhlcmUgYW55IHBsYXRmb3JtLXNwZWNpZmljIHF1aXJrcyBvciB2YXJpYXRpb25zIGRlcGVuZGluZyBvbiB0aGUgc3lzdGVtLW9uLWEtY2hpcCAoU29DKSBpdCYjMzk7cyBydW5uaW5nIG9uPyBJIGhhdmUgdG8gbG9vayBmb3IgaW5kaXJlY3QgZGVwZW5kZW5jaWVzIGFzIHdlbGwgLSBETUEgZW5naW5lcywgaW50ZXJydXB0IGNvbnRyb2xsZXJzLCBjbG9jayBtYW5hZ2VtZW50LiBBcmUgd2UgZGVhbGluZyB3aXRoIGFueSBzaGFyZWQgcmVzb3VyY2VzIHRoYXQgY291bGQgY2F1c2UgY29uZmxpY3RzPyBJJiMzOTtsbCBhbHNvIGJlIG1pbmRmdWwgb2YgcG90ZW50aWFsIGludGVyYWN0aW9ucyB3aXRoIG90aGVyIG5ldHdvcmtpbmcgZHJpdmVycyBvbiB0aGUgc3lzdGVtLiBJcyB0aGVyZSBhbiBpbnRlcmFjdGlvbiB0aGF0IGNvdWxkIG9jY3VyIHRoYXQgY291bGQgYWZmZWN0IG90aGVyIGRyaXZlcnMgb24gdGhlIHN5c3RlbT8KCkkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBpbXBsaWNhdGlvbnMgb2YgYW55IGRlcGVuZGVuY3kgY2hhbmdlcyBpZiB0aGVyZSBhcmUgYW55LCBhbmQgY29uc2lkZXIgdGhpcyBpbiBteSBhbmFseXNpcy4gV2hhdCBrZXJuZWwgdmVyc2lvbnMgaXMgdGhpcyBtb2R1bGUgZGVzaWduZWQgdG8gd29yayB3aXRoPyBBbnkga25vd24gY29tcGF0aWJpbGl0eSBpc3N1ZXM/IEkgaGF2ZSB0byBiZSBhd2FyZSBvZiB0aGUgb3ZlcmFsbCBzeXN0ZW0gY29udGV4dCB0byBwcmV2ZW50IGFueSBpc3N1ZXMuIExldCYjMzk7cyBtYWtlIHN1cmUgd2UgaGF2ZSBhIHNvbGlkIHVuZGVyc3RhbmRpbmcgb2YgdGhlIGltcGxpY2F0aW9ucyBvZiBhbnkgZGVwZW5kZW5jaWVzIG9uIHRoZSBzeXN0ZW0uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE0IDA2OjM3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvS2NvbmZpZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDQwMCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgNDAwOlx0XHRkZXBlbmRzIG9uIFBDSVxuIDQwMTpcdFx0c2VsZWN0IE1PVE9SQ09NTV9QSFlcbiA0MDI6XHRcdHNlbGVjdCBTVE1NQUNfTElCUENJXG4gNDAzOlx0XHRoZWxwXG4gNDA0Olx0XHQgIFRoaXMgZW5hYmxlcyBnbHVlIGRyaXZlciBmb3IgTW90b3Jjb21tIERXTUFDLWJhc2VkIFBDSSBFdGhlcm5ldFxuIDQwNTpcdFx0ICBjb250cm9sbGVycy4gQ3VycmVudGx5IG9ubHkgWVQ2ODAxIGlzIHN1cHBvcnRlZC5cbiA0MDY6XHRcbiA0MDc6XHRjb25maWcgU1RNTUFDX1BDSVxuIDQwODpcdFx0dHJpc3RhdGUgXCYjMzQ7U1RNTUFDIFBDSSBidXMgc3VwcG9ydFwmIzM0O1xuIDQwOTpcdFx0ZGVwZW5kcyBvbiBQQ0lcbiA0MTA6XHRcdGRlcGVuZHMgb24gQ09NTU9OX0NMS1xuIDQxMTpcdFx0c2VsZWN0IFNUTU1BQ19MSUJQQ0lcbiA0MTI6XHRcdGhlbHBcbiA0MTM6XHRcdCAgVGhpcyBzZWxlY3RzIHRoZSBwbGF0Zm9ybSBzcGVjaWZpYyBidXMgc3VwcG9ydCBmb3IgdGhlIHN0bW1hYyBkcml2ZXIuXG4gNDE0Olx0XHQgIFRoaXMgZHJpdmVyIHdhcyB0ZXN0ZWQgb24gWExJTlggWEMyVjMwMDAgRkYxMTUyQU1UMDIyMVxuIDQxNTpcdFx0ICBEMTIxNTk5NEEgVklSVEVYIEZQR0EgYm9hcmQgYW5kIFNOUFMgUW9TIElQSyBQcm90b3R5cGluZyBLaXQuXG4gNDE2Olx0XG4gNDE3Olx0XHQgIElmIHlvdSBoYXZlIGEgY29udHJvbGxlciB3aXRoIHRoaXMgaW50ZXJmYWNlLCBzYXkgWSBvciBNIGhlcmUuXG4gNDE4Olx0XG4gNDE5Olx0XHQgIElmIHVuc3VyZSwgc2F5IE4uXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE0IDA2OjM3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDM3ODExCgkJCQkJCQlvdXRwdXQ6IDQyCgkJCQkJCQl0aG91Z2h0czogNTcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSBkZXBlbmRlbmNpZXMsIGZyb20gYW4gZXhwZXJ0JiMzOTtzIHBlcnNwZWN0aXZlOgoKKipBbmFseXppbmcgU1RNTUFDIERyaXZlciBEZXBlbmRlbmNpZXMqKgoKQWxyaWdodCwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gTXkgaW5pdGlhbCBvYnNlcnZhdGlvbiBpcyB0aGF0IGBTVE1NQUNfUENJYCByZWxpZXMgb24gYm90aCBgUENJYCBhbmQgYENPTU1PTl9DTEtgLiBUaGF0JiMzOTtzIHN0YW5kYXJkIGZvciBhIFBDSS1iYXNlZCBFdGhlcm5ldCBjb250cm9sbGVyIOKAkyBuZWVkcyB0aGUgUENJIGluZnJhc3RydWN0dXJlIHRvIGV4aXN0IGFuZCBjbG9jayBtYW5hZ2VtZW50IHRvIGZ1bmN0aW9uIGNvcnJlY3RseS4gTm8gc3VycHJpc2VzIHRoZXJlLgoKTmV4dCwgd2Ugc2VlIHRoYXQgYFNUTU1BQ19FVEhgIGRlcGVuZHMgb24gYEhBU19JT01FTWAgYW5kIGBIQVNfRE1BYC4gVGhpcyBpcyB3aGF0IEkmIzM5O2QgZXhwZWN0LiBgSEFTX0lPTUVNYCBtZWFucyBpdCBjYW4gYWNjZXNzIG1lbW9yeS1tYXBwZWQgSS9PLCB3aGljaCBpcyBjcnVjaWFsIGZvciBpbnRlcmFjdGluZyB3aXRoIHRoZSBFdGhlcm5ldCBjb250cm9sbGVyJiMzOTtzIHJlZ2lzdGVycy4gQW5kIGBIQVNfRE1BYCBpbmRpY2F0ZXMgaXQgcmVxdWlyZXMgRE1BIChEaXJlY3QgTWVtb3J5IEFjY2Vzcykgc3VwcG9ydC4gQSBtb2Rlcm4gRXRoZXJuZXQgY29udHJvbGxlciAqaGFzKiB0byB1c2UgRE1BIHRvIGJlIHBlcmZvcm1hbnQuIEl0IHdvdWxkbiYjMzk7dCBiZSB2ZXJ5IHVzZWZ1bCBpZiBpdCBkaWRuJiMzOTt0LgoKTm93LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGlzIGBTVE1NQUNfRVRIYCBkZXBlbmRlbmN5IGJldHRlci4gSSB3YW50IHRvIGRpdmUgYSBsaXR0bGUgZGVlcGVyIHRvIGNvbmZpcm0gdGhhdCBJJiMzOTttIHNlZWluZyBldmVyeXRoaW5nIGNvcnJlY3RseS4gTGV0IG1lIHNlZSB3aGF0IHNwZWNpZmljYWxseSBkZXBlbmRzIG9uICp0aGlzKiBkcml2ZXIuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE0IDA2OjM3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvS2NvbmZpZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDEsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7ICAgMTpcdCMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxuICAgMjpcdGNvbmZpZyBTVE1NQUNfRVRIXG4gICAzOlx0XHR0cmlzdGF0ZSBcJiMzNDtTVE1pY3JvZWxlY3Ryb25pY3MgTXVsdGktR2lnYWJpdCBFdGhlcm5ldCBkcml2ZXJcJiMzNDtcbiAgIDQ6XHRcdGRlcGVuZHMgb24gSEFTX0lPTUVNIFx1MDAyNlx1MDAyNiBIQVNfRE1BXG4gICA1Olx0XHRkZXBlbmRzIG9uIFBUUF8xNTg4X0NMT0NLX09QVElPTkFMXG4gICA2Olx0XHRkZXBlbmRzIG9uIEVUSFRPT0xfTkVUTElOS1xuICAgNzpcdFx0c2VsZWN0IE1JSVxuICAgODpcdFx0c2VsZWN0IFBDU19YUENTXG4gICA5Olx0XHRzZWxlY3QgUEFHRV9QT09MXG4gIDEwOlx0XHRzZWxlY3QgUEhZTElOS1xuICAxMTpcdFx0c2VsZWN0IENSQzMyXG4gIDEyOlx0XHRzZWxlY3QgUkVTRVRfQ09OVFJPTExFUlxuICAxMzpcdFx0c2VsZWN0IE5FVF9ERVZMSU5LXG4gIDE0Olx0XHRoZWxwXG4gIDE1Olx0XHQgIFRoaXMgaXMgdGhlIGRyaXZlciBmb3IgdGhlIEV0aGVybmV0IElQcyBidWlsdCBhcm91bmQgYVxuICAxNjpcdFx0ICBTeW5vcHN5cyBJUCBDb3JlLlxuICAxNzpcdFxuICAxODpcdGlmIFNUTU1BQ19FVEhcbiAgMTk6XHRcbiAgMjA6XHRjb25maWcgU1RNTUFDX1NFTEZURVNUU1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNCAwNjozNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzODQxNAoJCQkJCQkJb3V0cHV0OiAyMgoJCQkJCQkJdGhvdWdodHM6IDU0NQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipGdXp6aW5nIFN0cmF0ZWd5IGZvciBTVE1NQUMgRHJpdmVyKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIFNUTU1BQyBkcml2ZXIgcGF0Y2gsIGFuZCBteSBpbml0aWFsIHRob3VnaHRzIGFyZSBhcm91bmQgY29uZmlndXJhdGlvbiBvcHRpb25zLiBgU1RNTUFDX0VUSGAgYW5kIGBTVE1NQUNfUENJYCBzZWVtIHRvIGJlIHRoZSBwcmltYXJ5IGNvbmZpZ3VyYXRpb25zIGluIHRoaXMgY29udGV4dC4gSSYjMzk7bGwgbmVlZCB0byByZW1lbWJlciB0aG9zZS4gV2hhdCBhYm91dCB0aGUgb3RoZXIgRFdNQUMgY29uZmlndXJhdGlvbnMg4oCTIGBEV01BQ19JTlRFTGAsIGBEV01BQ19MT09OR1NPTmAsIGFuZCBgRFdNQUNfTU9UT1JDT01NYD8gRm9yIG5vdywgSSYjMzk7bGwganVzdCBmb2N1cyBvbiBpbmNsdWRpbmcgYFNUTU1BQ19QQ0lgIGFuZCBgU1RNTUFDX0VUSGAsIGFuZCByZXZpc2l0IHRob3NlIGlmIG5lY2Vzc2FyeS4KCk5vdywgbGV0JiMzOTtzIGdldCBkb3duIHRvIHRoZSBmdXp6aW5nIHRhcmdldHMuIFRoaXMgcGF0Y2ggbW9kaWZpZXMgc2V2ZXJhbCBmdW5jdGlvbnMuIEkgbmVlZCB0byBmaWd1cmUgb3V0IHdoaWNoIG9uZXMgYXJlIGNyaXRpY2FsIGFuZCB3aGVyZSB0aGUgYmVzdCBlbnRyeSBwb2ludHMgYXJlIGZvciBtYXhpbXVtIGltcGFjdC4gVGhlIHBhdGNoIHRvdWNoZXMgYHN0bW1hY19kYXRhcGF0aF90ZWFyZG93bmAsIGBzdG1tYWNfaHdfc2V0dXBgLCBgc3RtbWFjX3hkcF9vcGVuYCwgYGR3eGdtYWMyX3R4X2RtYV9zdG9wcGVkYCwgYGR3eGdtYWMyX3R4X210bF9kcmFpbmAsIGBkd3hnbWFjMl9yeF9tdGxfZHJhaW5gLCBhbmQgYGR3eGdtYWMyX3J4X2RtYV9zdG9wcGVkYC4KCkkgc2VlIHRoYXQgYHN0bW1hY19kYXRhcGF0aF90ZWFyZG93bmAgaXMgYSBzdGF0aWMgZnVuY3Rpb24sIGJ1dCBpdCBpcyBjYWxsZWQgYnkgYF9fc3RtbWFjX3JlbGVhc2VgLCBgc3RtbWFjX3hkcF9yZWxlYXNlYCwgYW5kIGBzdG1tYWNfc3VzcGVuZGAuIEFsc28sIGBzdG1tYWNfaHdfc2V0dXBgIGlzIGFsc28gaW1wb3J0YW50LCBhcyBpdCBnZXRzIGNhbGxlZCBieSBgc3RtbWFjX29wZW5gIGFuZCBgc3RtbWFjX3Jlc3VtZWAuCgpUaGUga2V5IGVudHJ5IHBvaW50cyBhcHBlYXIgdG8gYmUgdGhlIG5ldF9kZXZpY2Vfb3BzIGZ1bmN0aW9ucyBgLm5kb19vcGVuYCBhbmQgYC5uZG9fc3RvcGAsIHdoaWNoIGNvcnJlc3BvbmQgdG8gYHN0bW1hY19vcGVuYCBhbmQgYHN0bW1hY19yZWxlYXNlYCByZXNwZWN0aXZlbHkuIEFsc28sIHRoZSBkZXZpY2UgUE0gb3BzIGZvciBgc3RtbWFjX3N1c3BlbmRgIGFuZCBgc3RtbWFjX3Jlc3VtZWAgbmVlZCBhIGRlZXBlciBkaXZlLiBBbmQgb2YgY291cnNlLCB0aGUgWERQIHNldHVwIGZ1bmN0aW9uczogYHN0bW1hY194ZHBfb3BlbmAgYW5kIGBzdG1tYWNfeGRwX3JlbGVhc2VgLgoKU28sIGl0IGxvb2tzIGxpa2UgYHN0bW1hY19vcGVuYCwgYHN0bW1hY19yZWxlYXNlYCwgYHN0bW1hY19zdXNwZW5kYCwgYHN0bW1hY19yZXN1bWVgLCBgc3RtbWFjX3hkcF9vcGVuYCwgYW5kIGBzdG1tYWNfeGRwX3JlbGVhc2VgIGFyZSB0aGUgY3J1Y2lhbCBmdW5jdGlvbnMgZm9yIGludGVuc2l2ZSBmdXp6aW5nLgoKV2FpdCwgbGV0IG1lIGRvdWJsZS1jaGVjayBzb21ldGhpbmcuIGBzdG1tYWNfZGF0YXBhdGhfdGVhcmRvd25gIGlzIHN0YXRpYywgeWVzLCBidXQgaXTigJlzIGNhbGxlZCBmcm9tIGBfX3N0bW1hY19yZWxlYXNlYCwgd2hpY2ggaXMgdGhlbiBjYWxsZWQgZnJvbSBgc3RtbWFjX3JlbGVhc2VgLiBBbmQgYHN0bW1hY19vcGVuYCBjYWxscyBgc3RtbWFjX2h3X3NldHVwYC4gU28gaXQgc2VlbXMgYHN0bW1hY19vcGVuYCBhbmQgYHN0bW1hY19yZWxlYXNlYCBhcmUgc3RpbGwgdGhlIHByaW1hcnkgZW50cnkgcG9pbnRzLiBBbG9uZyB3aXRoIGBzdG1tYWNfeGRwX29wZW5gIGFuZCBgc3RtbWFjX3hkcF9yZWxlYXNlYCwgdGhleSBhcmUgdGhlIG1haW4gZm9jdXMuIEkmIzM5O2xsIG5lZWQgdG8gcXVpY2tseSBjaGVjayBpZiBgc3RtbWFjX3hkcF9vcGVuYCBpdHNlbGYgaXMgc3RhdGljIG9yIG5vdC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTQgMDY6Mzc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7c3RtbWFjX3hkcF9vcGVuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hYy5oPTQwNz12b2lkIHN0bW1hY19wdHBfdW5yZWdpc3RlcihzdHJ1Y3Qgc3RtbWFjX3ByaXYgKnByaXYpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjLmg6NDA4OmludCBzdG1tYWNfeGRwX29wZW4oc3RydWN0IG5ldF9kZXZpY2UgKmRldik7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWMuaC00MDktdm9pZCBzdG1tYWNfeGRwX3JlbGVhc2Uoc3RydWN0IG5ldF9kZXZpY2UgKmRldik7XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX21haW4uYz03MTM2PXZvaWQgc3RtbWFjX3hkcF9yZWxlYXNlKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX21haW4uYy03MTY1LVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX21haW4uYzo3MTY2OmludCBzdG1tYWNfeGRwX29wZW4oc3RydWN0IG5ldF9kZXZpY2UgKmRldilcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19tYWluLmMtNzE2Ny17XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX3hkcC5jPTEwMj1pbnQgc3RtbWFjX3hkcF9zZXRfcHJvZyhzdHJ1Y3Qgc3RtbWFjX3ByaXYgKnByaXYsIHN0cnVjdCBicGZfcHJvZyAqcHJvZyxcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfeGRwLmMtMTM0LVx0aWYgKGlmX3J1bm5pbmcgXHUwMDI2XHUwMDI2IG5lZWRfdXBkYXRlKVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX3hkcC5jOjEzNTpcdFx0c3RtbWFjX3hkcF9vcGVuKGRldik7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfeGRwLmMtMTM2LVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNCAwNjozNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0MDExMAoJCQkJCQkJb3V0cHV0OiAyMAoJCQkJCQkJdGhvdWdodHM6IDUxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgZnVuY3Rpb25zLCB0aGlua2luZyB0aHJvdWdoIGl0IGFzIHlvdSBhc2tlZDoKCioqTXkgUGVyc3BlY3RpdmUgb24gdGhlIGBzdG1tYWNgIFhEUCBhbmQgUG93ZXIgTWFuYWdlbWVudCBGdW5jdGlvbnMqKgoKUmlnaHQsIGxldCBtZSBzZWUuLi5zbywgSSYjMzk7bSBub3RpbmcgdGhhdCBgc3RtbWFjX3hkcF9vcGVuYCBhbmQgYHN0bW1hY194ZHBfcmVsZWFzZWAsIHRob3NlIGFyZSBkZWZpbml0ZWx5ICpub3QqIGRlY2xhcmVkIGFzIGBzdGF0aWNgLiBHb29kLCB0aGF0IG1ha2VzIHNlbnNlIGZvciB0aGUgWERQIGZ1bmN0aW9uYWxpdHkuIFRoZXkmIzM5O3JlIGxpa2VseSBtZWFudCB0byBiZSBjYWxsYWJsZSBmcm9tIG91dHNpZGUgdGhlIGNvcmUgYHN0bW1hY2AgbW9kdWxlLCBwcmVzdW1hYmx5IGJ5IFhEUCBwcm9ncmFtcyBvciBzb21lIG90aGVyIGV4dGVybmFsIGNvbXBvbmVudCB0aGF0IG5lZWRzIHRvIG1hbmFnZSB0aGUgaW50ZXJhY3Rpb24gd2l0aCB0aGUgZHJpdmVyIGluIHRoYXQgY29udGV4dC4gV2UgbmVlZCB0aGF0IGV4dGVybmFsIGxpbmthZ2UuCgpBbmQgdGhlbiBsb29raW5nIGF0IHRoZSBzdXNwZW5kIGFuZCByZXN1bWUgcm91dGluZXMsIGBzdG1tYWNfc3VzcGVuZGAgYW5kIGBzdG1tYWNfcmVzdW1lYD8gQWxzbyBub24tc3RhdGljLiBBZ2FpbiwgYXMgZXhwZWN0ZWQuIFRob3NlIGFyZSBjcml0aWNhbCBlbnRyeSBwb2ludHMgZm9yIHRoZSBzeXN0ZW0gcG93ZXIgbWFuYWdlbWVudCBmcmFtZXdvcmsuIFRoZSBwb3dlciBtYW5hZ2VtZW50IGNvZGUsIG9yIHBlcmhhcHMgZXZlbiBoaWdoZXItbGV2ZWwgZHJpdmVycywgbmVlZHMgdG8gYmUgYWJsZSB0byBjYWxsIHRoZXNlIGZ1bmN0aW9ucyBkaXJlY3RseSB0byBjb250cm9sIHRoZSBwb3dlciBzdGF0ZSBvZiB0aGUgU1RNTUFDIGRldmljZS4gSWYgdGhleSAqd2VyZSogc3RhdGljLCB3ZSYjMzk7ZCBoYXZlIGEgcmVhbCBwcm9ibGVtIGludGVncmF0aW5nIHdpdGggdGhlIHdpZGVyIHN5c3RlbS4gVGhhdCB3b3VsZCBtYWtlIGZvciBhIGJyaXR0bGUgZHJpdmVyLiBXZSBjYW4mIzM5O3QgaGF2ZSB0aGF0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNCAwNjozODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtzdG1tYWNfc3VzcGVuZCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy10ZWdyYS5jPTU3PXN0YXRpYyBpbnQgX19tYXliZV91bnVzZWQgdGVncmFfbWdiZV9zdXNwZW5kKHN0cnVjdCBkZXZpY2UgKmRldilcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy10ZWdyYS5jLTYxLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtdGVncmEuYzo2MjpcdGVyciA9IHN0bW1hY19zdXNwZW5kKGRldik7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy10ZWdyYS5jLTYzLVx0aWYgKGVycilcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWMuaD00MTE9aW50IHN0bW1hY19yZXN1bWUoc3RydWN0IGRldmljZSAqZGV2KTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hYy5oOjQxMjppbnQgc3RtbWFjX3N1c3BlbmQoc3RydWN0IGRldmljZSAqZGV2KTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hYy5oLTQxMy12b2lkIHN0bW1hY19kdnJfcmVtb3ZlKHN0cnVjdCBkZXZpY2UgKmRldik7XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX21haW4uYz04MjA0PUVYUE9SVF9TWU1CT0xfR1BMKHN0bW1hY19kdnJfcmVtb3ZlKTtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfbWFpbi5jLTgyMDYtLyoqXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfbWFpbi5jOjgyMDc6ICogc3RtbWFjX3N1c3BlbmQgLSBzdXNwZW5kIGNhbGxiYWNrXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfbWFpbi5jLTgyMDgtICogQGRldjogZGV2aWNlIHBvaW50ZXJcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfbWFpbi5jLTgyMTItICovXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfbWFpbi5jOjgyMTM6aW50IHN0bW1hY19zdXNwZW5kKHN0cnVjdCBkZXZpY2UgKmRldilcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19tYWluLmMtODIxNC17XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX21haW4uYy04MjYyLX1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19tYWluLmM6ODI2MzpFWFBPUlRfU1lNQk9MX0dQTChzdG1tYWNfc3VzcGVuZCk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfbWFpbi5jLTgyNjQtXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX21haW4uYz04Mzk0PUVYUE9SVF9TWU1CT0xfR1BMKHN0bW1hY19yZXN1bWUpO1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19tYWluLmMtODM5Ni0vKiBUaGlzIGlzIG5vdCB0aGUgc2FtZSBhcyBFWFBPUlRfR1BMX1NJTVBMRV9ERVZfUE1fT1BTKCkgd2hlbiBDT05GSUdfUE09biAqL1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX21haW4uYzo4Mzk3OkRFRklORV9TSU1QTEVfREVWX1BNX09QUyhzdG1tYWNfc2ltcGxlX3BtX29wcywgc3RtbWFjX3N1c3BlbmQsIHN0bW1hY19yZXN1bWUpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX21haW4uYy04Mzk4LUVYUE9SVF9TWU1CT0xfR1BMKHN0bW1hY19zaW1wbGVfcG1fb3BzKTtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfcGxhdGZvcm0uYz0xMDAxPWNvbnN0IHN0cnVjdCBkZXZfcG1fb3BzIHN0bW1hY19wbHRmcl9wbV9vcHMgPSB7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfcGxhdGZvcm0uYzoxMDAyOlx0U0VUX1NZU1RFTV9TTEVFUF9QTV9PUFMoc3RtbWFjX3N1c3BlbmQsIHN0bW1hY19yZXN1bWUpXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfcGxhdGZvcm0uYy0xMDAzLVx0U0VUX1JVTlRJTUVfUE1fT1BTKHN0bW1hY19ydW50aW1lX3N1c3BlbmQsIHN0bW1hY19ydW50aW1lX3Jlc3VtZSwgTlVMTClcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTQgMDY6Mzg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDE0MjgKCQkJCQkJCW91dHB1dDogMTkKCQkJCQkJCXRob3VnaHRzOiA1OQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0aGlua2luZyBwcm9jZXNzOgoKKipFeGFtaW5pbmcgdGhlIFNUTU1BQyBEcml2ZXImIzM5O3MgU3VzcGVuZC9SZXN1bWUgTG9naWMqKgoKT2theSwgc28gSSBzZWUgdGhhdCBgc3RtbWFjX3N1c3BlbmRgIGFuZCBgc3RtbWFjX3Jlc3VtZWAgYXJlIGV4cGxpY2l0bHkgZXhwb3J0ZWQuIFRoYXQmIzM5O3MgZ29vZCwgc3VnZ2VzdHMgdGhleSYjMzk7cmUgZGVzaWduZWQgZm9yIGV4dGVybmFsIGludGVyYWN0aW9uLCBwcm9iYWJseSBmb3IgcG93ZXIgbWFuYWdlbWVudCwgd2hpY2ggaXMgd2hhdCBJJiMzOTtkIGV4cGVjdC4gSG93ZXZlciwgYHN0bW1hY19vcGVuYCBhbmQgYHN0bW1hY19yZWxlYXNlYCBhcmUgZGVmaW5lZCB3aXRoaW4gYHN0bW1hY19tYWluLmNgLCBhbmQgdGhhdCByYWlzZXMgYSBmbGFnLiBXYWl0LCBob2xkIG9uIGEgc2Vjb25kLiBJIG5lZWQgdG8gYmUgKnN1cmUqIGFib3V0IHRoZWlyIHNjb3BlLiBMZXQgbWUgcXVpY2tseSBkb3VibGUtY2hlY2sgaWYgdGhvc2UgZnVuY3Rpb25zIGFyZSBhY3R1YWxseSBkZWNsYXJlZCBhcyBgc3RhdGljYCB3aXRoaW4gdGhhdCBmaWxlLCBiZWNhdXNlIHRoYXQgd291bGQgY29uZmlybSB0aGV5JiMzOTtyZSBvbmx5IGludGVuZGVkIGZvciBpbnRlcm5hbCB1c2Ugd2l0aGluIHRoZSBkcml2ZXImIzM5O3MgY29yZSBtb2R1bGUuIEdvdHRhIG1ha2Ugc3VyZSB0aG9zZSBvcGVuL3JlbGVhc2UgZnVuY3Rpb25zIGFyZW4mIzM5O3QgaW5hZHZlcnRlbnRseSBiZWluZyBleHBvc2VkLCB0aGF0JiMzOTtzIGltcG9ydGFudCBmb3IgdGhlIG92ZXJhbGwgYXJjaGl0ZWN0dXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNCAwNjozODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtzdG1tYWNfb3BlbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfbWFpbi5jPTQxMDA9c3RtbWFjX3NldHVwX2RtYV9kZXNjKHN0cnVjdCBzdG1tYWNfcHJpdiAqcHJpdiwgdW5zaWduZWQgaW50IG10dSlcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfbWFpbi5jLTQxNjUtLyoqXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfbWFpbi5jOjQxNjY6ICogIF9fc3RtbWFjX29wZW4gLSBvcGVuIGVudHJ5IHBvaW50IG9mIHRoZSBkcml2ZXJcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19tYWluLmMtNDE2Ny0gKiAgQGRldiA6IHBvaW50ZXIgdG8gdGhlIGRldmljZSBzdHJ1Y3R1cmUuXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX21haW4uYy00MTc0LSAqL1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX21haW4uYzo0MTc1OnN0YXRpYyBpbnQgX19zdG1tYWNfb3BlbihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX21haW4uYy00MTc2LVx0XHRcdCBzdHJ1Y3Qgc3RtbWFjX2RtYV9jb25mICpkbWFfY29uZilcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfbWFpbi5jLTQyMzItXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfbWFpbi5jOjQyMzM6c3RhdGljIGludCBzdG1tYWNfb3BlbihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX21haW4uYy00MjM0LXtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfbWFpbi5jLTQyNjAtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfbWFpbi5jOjQyNjE6XHRyZXQgPSBfX3N0bW1hY19vcGVuKGRldiwgZG1hX2NvbmYpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX21haW4uYy00MjYyLVx0aWYgKHJldClcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfbWFpbi5jPTYxNTU9c3RhdGljIGludCBzdG1tYWNfY2hhbmdlX210dShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBpbnQgbmV3X210dSlcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfbWFpbi5jLTYxOTAtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfbWFpbi5jOjYxOTE6XHRcdHJldCA9IF9fc3RtbWFjX29wZW4oZGV2LCBkbWFfY29uZik7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfbWFpbi5jLTYxOTItXHRcdGlmIChyZXQpIHtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfbWFpbi5jPTczNDc9c3RhdGljIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlX29wcyBzdG1tYWNfbmV0ZGV2X29wcyA9IHtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19tYWluLmM6NzM0ODpcdC5uZG9fb3BlbiA9IHN0bW1hY19vcGVuLFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX21haW4uYy03MzQ5LVx0Lm5kb19zdGFydF94bWl0ID0gc3RtbWFjX3htaXQsXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX21haW4uYz03NjM0PWludCBzdG1tYWNfcmVpbml0X3F1ZXVlcyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB1OCByeF9jbnQsIHU4IHR4X2NudClcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfbWFpbi5jLTc2NTMtXHRpZiAobmV0aWZfcnVubmluZyhkZXYpKVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX21haW4uYzo3NjU0Olx0XHRyZXQgPSBzdG1tYWNfb3BlbihkZXYpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX21haW4uYy03NjU1LVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19tYWluLmM9NzY1OT1pbnQgc3RtbWFjX3JlaW5pdF9yaW5ncGFyYW0oc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdTMyIHJ4X3NpemUsIHUzMiB0eF9zaXplKVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19tYWluLmMtNzY3MC1cdGlmIChuZXRpZl9ydW5uaW5nKGRldikpXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfbWFpbi5jOjc2NzE6XHRcdHJldCA9IHN0bW1hY19vcGVuKGRldik7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfbWFpbi5jLTc2NzItXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE0IDA2OjM4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQyODM4CgkJCQkJCQlvdXRwdXQ6IDI0CgkJCQkJCQl0aG91Z2h0czogMjA4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBTVE1NQUMgRHJpdmVyIEVudHJ5cG9pbnRzIGZvciBGdXp6aW5nKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCBob3cgYmVzdCB0byB0YXJnZXQgdGhlIFNUTU1BQyBkcml2ZXIgd2l0aCBmdXp6aW5nLCBzcGVjaWZpY2FsbHkgdGhpbmtpbmcgYWJvdXQgd2hhdCBlbnRyeXBvaW50cyBhcmUgbW9zdCBhY2Nlc3NpYmxlIHRvIHRvb2xzIGxpa2Ugc3l6a2FsbGVyLiBNeSBpbml0aWFsIHRob3VnaHQgd2FzIHRoYXQgYHN0bW1hY19vcGVuYCBhbmQgYHN0bW1hY19yZWxlYXNlYCBhcmUgc3RhdGljLCB3aGljaCBnZW5lcmFsbHkgbWVhbnMgdGhleSB3b24mIzM5O3QgYmUgZXhwb3J0ZWQgYXMgc3ltYm9scyBhbmQgdGhlcmVmb3JlIHdvbiYjMzk7dCBiZSBlYXNpbHkgZnV6emFibGUuIEhvd2V2ZXIsIEkgbmVlZCB0byByZW1lbWJlciB0aGF0IHN5emthbGxlciAqY2FuKiBmb2N1cyBvbiBzdGF0aWMgZnVuY3Rpb25zIGlmIHRoZXkmIzM5O3JlIG5vdCBpbmxpbmVkLiBCdXQsIHJlYWxpc3RpY2FsbHksIGl0JiMzOTtzIGFsd2F5cyBwcmVmZXJhYmxlIHRvIGxldmVyYWdlIG5vbi1zdGF0aWMgQVBJIGVudHJ5cG9pbnRzIGZvciBmdXp6aW5nLgoKTGV0JiMzOTtzIHNlZSwgdGhlIG5vbi1zdGF0aWMgY2FuZGlkYXRlcyBzZWVtIHRvIGJlOiBgc3RtbWFjX3N1c3BlbmRgLCBgc3RtbWFjX3Jlc3VtZWAsIGBzdG1tYWNfeGRwX29wZW5gLCBgc3RtbWFjX3hkcF9yZWxlYXNlYCwgYHN0bW1hY19jaGFuZ2VfbXR1YCwgYHN0bW1hY19yZWluaXRfcXVldWVzYCwgYW5kIGBzdG1tYWNfcmVpbml0X3JpbmdwYXJhbWAuIEkmIzM5O20gZ29pbmcgdG8gaGF2ZSB0byBtYWtlIGEgbm90ZSB0aGF0IGBzdG1tYWNfY2hhbmdlX210dWAgaXMgc3RhdGljLgoKV2FpdCBhIHNlY29uZC4uLkkganVzdCByZW1lbWJlcmVkIHRoYXQgYHN0bW1hY19yZWluaXRfcXVldWVzYCBhbmQgYHN0bW1hY19yZWluaXRfcmluZ3BhcmFtYCBzZWVtIHRvIGNhbGwgYHN0bW1hY19vcGVuYC4gSWYgdGhhdCYjMzk7cyB0aGUgY2FzZSwgdGhlbiB0aGF0IGNvdWxkIGJlIGEgc2lnbmlmaWNhbnQgZW50cnkgcG9pbnQuIExldCBtZSBxdWlja2x5IGRvdWJsZS1jaGVjayB0aGF0IHRob3NlIGFyZSBhY3R1YWxseSBleHBvcnRlZCBzeW1ib2xzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNCAwNjozODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+RXJyb3I6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5ubyBtYXRjaGVzPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O0VYUE9SVF9TWU1CT0wuKnN0bW1hY19yZWluaXQmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7ZXJyb3ImIzM0OzogJiMzNDtubyBtYXRjaGVzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNCAwNjozODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0MzQwNAoJCQkJCQkJb3V0cHV0OiAyMwoJCQkJCQkJdGhvdWdodHM6IDE2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMuIEhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgYXMgaWYgdGhleSYjMzk7cmUgbXkgb3duOgoKKipFeGFtaW5pbmcgdGhlIGBzdG1tYWNfcmVpbml0X3F1ZXVlc2AgRnVuY3Rpb24qKgoKUmlnaHQsIGxldCYjMzk7cyB6ZXJvIGluIG9uIGBzdG1tYWNfcmVpbml0X3F1ZXVlc2AuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGl0cyByb2xlLiBJJiMzOTttIGd1ZXNzaW5nIGl0JiMzOTtzIGEgY3JpdGljYWwgZnVuY3Rpb24gZm9yIHJlc2V0dGluZyBvciByZS1lc3RhYmxpc2hpbmcgdGhlIHRyYW5zbWl0IGFuZCByZWNlaXZlIHF1ZXVlcyB3aXRoaW4gdGhlIFNUTU1BQyBkcml2ZXIuIEtub3dpbmcgdGhpcywgaXQgaXMgbGlrZWx5IGludm9sdmVkIGluIHJlY292ZXJpbmcgZnJvbSBlcnJvciBjb25kaXRpb25zIG9yIHJlLWNvbmZpZ3VyaW5nIHRoZSBNQUMuIFRoZSBwdXJwb3NlIG9mIHRoaXMgc2VlbXMgY3JpdGljYWwgZm9yIG1haW50YWluaW5nIG5ldHdvcmsgZnVuY3Rpb25hbGl0eSBhbmQgcG90ZW50aWFsbHkgZm9yIHRhc2tzIGxpa2UgbGluayByZS1uZWdvdGlhdGlvbiwgcG93ZXIgbWFuYWdlbWVudCwgb3IgZXZlbiBoYW5kbGluZyBkZXZpY2UgcmVzZXRzLiBJIG5lZWQgdG8gcmVmcmVzaCBteSB1bmRlcnN0YW5kaW5nIG9mIGhvdyB0aGUgcXVldWVzIGFyZSBzdHJ1Y3R1cmVkIGFuZCBtYW5hZ2VkIHdpdGhpbiB0aGlzIHNwZWNpZmljIFNUTU1BQyBpbXBsZW1lbnRhdGlvbi4gV2hhdCBhcmUgaXRzIGRlcGVuZGVuY2llcz8gV2hhdCBjYWxscyBpdD8gQW5kIGltcG9ydGFudGx5LCB3aGF0IGFyZSB0aGUgcG90ZW50aWFsIGZhaWx1cmUgbW9kZXM/IEkgbmVlZCB0byB0aGluayB0aGlzIHRocm91Z2ggY2FyZWZ1bGx5LCBhcyBhbnkgYnVnIGhlcmUgY291bGQgcmVzdWx0IGluIHNlcmlvdXMgbmV0d29ya2luZyBkaXNydXB0aW9uLiBUaW1lIHRvIHNlZSB3aGF0IEkgY2FuIGZpbmQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE0IDA2OjM4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3N0bW1hY19yZWluaXRfcXVldWVzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hYy5oPTQxND1pbnQgc3RtbWFjX2R2cl9wcm9iZShzdHJ1Y3QgZGV2aWNlICpkZXZpY2UsXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjLmgtNDE2LVx0XHQgICAgIHN0cnVjdCBzdG1tYWNfcmVzb3VyY2VzICpyZXMpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjLmg6NDE3OmludCBzdG1tYWNfcmVpbml0X3F1ZXVlcyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB1OCByeF9jbnQsIHU4IHR4X2NudCk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWMuaC00MTgtaW50IHN0bW1hY19yZWluaXRfcmluZ3BhcmFtKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHUzMiByeF9zaXplLCB1MzIgdHhfc2l6ZSk7XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX2V0aHRvb2wuYz05OTI9c3RhdGljIGludCBzdG1tYWNfc2V0X2NoYW5uZWxzKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX2V0aHRvb2wuYy0xMDAxLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX2V0aHRvb2wuYzoxMDAyOlx0cmV0dXJuIHN0bW1hY19yZWluaXRfcXVldWVzKGRldiwgY2hhbi1cdTAwM2VyeF9jb3VudCwgY2hhbi1cdTAwM2V0eF9jb3VudCk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfZXRodG9vbC5jLTEwMDMtfVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19tYWluLmM9NzYxMz1zdGF0aWMgdm9pZCBzdG1tYWNfbmFwaV9kZWwoc3RydWN0IG5ldF9kZXZpY2UgKmRldilcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfbWFpbi5jLTc2MzMtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfbWFpbi5jOjc2MzQ6aW50IHN0bW1hY19yZWluaXRfcXVldWVzKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHU4IHJ4X2NudCwgdTggdHhfY250KVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX21haW4uYy03NjM1LXtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41My8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTQgMDY6Mzg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDQxOTIKCQkJCQkJCW91dHB1dDogMjIKCQkJCQkJCXRob3VnaHRzOiAxODQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIFN5bWJvbCBWaXNpYmlsaXR5IGluIHRoZSBTVE1NQUMgRHJpdmVyKioKCk9rYXksIHNvIEkmIzM5O20gdHJ5aW5nIHRvIGZpZ3VyZSBvdXQgd2hpY2ggc3ltYm9scyBpbiB0aGlzIFNUTU1BQyBkcml2ZXIgYXJlIHZpc2libGUgZXh0ZXJuYWxseSBhbmQsIG1vcmUgaW1wb3J0YW50bHksICp3aHkqLiBJJiMzOTt2ZSBnb3QgYSBiaXQgb2YgYSBtZW50YWwgbWFwIGZvcm1pbmcuIFRoZSBpbml0aWFsIGNsdWUgaXMgdGhhdCBzb21lIGFyZSAqbm90KiBleHBvcnRlZCwgYnV0IHRoZXkmIzM5O3JlIGFsc28gKm5vdCogc3RhdGljLCB3aGljaCBnaXZlcyBtZSBwYXVzZS4gTWFrZXMgbWUgdGhpbmsgb2YgdGhlbSBhcyBwb3RlbnRpYWwgY2FuZGlkYXRlcyBmb3IgaW50ZXJuYWwgY2FsbHMgYWNyb3NzIGRyaXZlciBsYXllcnMuCgpOb3csIGxldCYjMzk7cyBzZWUsIHdoYXQgYWJvdXQgYHN0bW1hY194ZHBfb3BlbmAgYW5kIGBzdG1tYWNfeGRwX3JlbGVhc2VgPyBUaG9zZSBhcmUgdGhlIG5vbi1zdGF0aWMgb25lcyBJIG5lZWQgdG8gY29uc2lkZXIgbW9yZSBkZWVwbHkuIE9uIHRoZSBvdGhlciBoYW5kLCBgc3RtbWFjX3N1c3BlbmRgIGFuZCBgc3RtbWFjX3Jlc3VtZWAgKmFyZSogZXhwb3J0ZWQsIHdoaWNoIGlzIHdoYXQgSSB3b3VsZCBleHBlY3QgZm9yIGEgcG93ZXIgbWFuYWdlbWVudCBmdW5jdGlvbi4gQW5kIHRoZW4gdGhlcmUgYXJlIGBzdG1tYWNfZHZyX3Byb2JlYCBhbmQgYHN0bW1hY19kdnJfcmVtb3ZlYCwgYWxzbyBleHBvcnRlZCwgd2hpY2ggaGFuZGxlIGRldmljZSBpbml0aWFsaXphdGlvbiBhbmQgcmVtb3ZhbCwgcmVzcGVjdGl2ZWx5LgoKSG9sZCBvbiBhIHNlY29uZCwgdGhhdCYjMzk7cyBpdCEgV2hhdCBoYXBwZW5zIHdoZW4gdGhlIGRyaXZlciBpcyAqcmVtb3ZlZCo/IERvZXMgYHN0bW1hY19kdnJfcmVtb3ZlYCBsZWFkIHRvIHRoZSBjbGVhbnVwIGZ1bmN0aW9uLCBgc3RtbWFjX3JlbGVhc2VgPyBJIHNlZW0gdG8gcmVtZW1iZXIgdGhhdCBgc3RtbWFjX3JlbGVhc2VgIGlzIGEgZnVuY3Rpb24gY2FsbGVkIHZpYSBgbmRvX3N0b3BgIHdoaWNoIHNob3VsZCBiZSBjYWxsZWQgYnkgdGhlIG5ldGRldiB1bnJlZ2lzdHJhdGlvbi4gT2theSwgSSB0aGluayBJJiMzOTt2ZSBnb3QgaXQuIEl0JiMzOTtzIHRoZSB1bnJlZ2lzdHJhdGlvbiB0aGF0IGlzIHRoZSBpbXBvcnRhbnQgYWN0aW9uIGhlcmUuCgpTbywgaW4gdGVybXMgb2YgYW5hbHl6aW5nIHRoZSBkcml2ZXImIzM5O3MgbGlmZWN5Y2xlLCBgc3RtbWFjX2R2cl9yZW1vdmVgIGlzIGEgZ29vZCBzeW1ib2wgdG8gZm9jdXMgb24uIEl0IHVucmVnaXN0ZXJzIHRoZSBuZXRkZXYsIHdoaWNoIGNhbGxzIGBuZG9fc3RvcGAsIHdoaWNoIGluIHR1cm4gbGVhZHMgdG8gdGhlIHJlbGVhc2UgYW5kIGNsZWFudXAuIEkmIzM5O20gZ29pbmcgdG8gZGlnIGludG8gdGhlIGltcGxlbWVudGF0aW9uIG9mIGBzdG1tYWNfZHZyX3JlbW92ZWAgbm93LiBUaGF0JiMzOTtzIHRoZSBrZXkgdG8gdW5kZXJzdGFuZGluZyB0aGlzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjU0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNCAwNjozODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtzdG1tYWNfZHZyX3JlbW92ZSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1kd2MtcW9zLWV0aC5jPTM0Mz1zdGF0aWMgdm9pZCBkd2NfZXRoX2R3bWFjX3JlbW92ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLWR3Yy1xb3MtZXRoLmMtMzQ2LVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtZHdjLXFvcy1ldGguYzozNDc6XHRzdG1tYWNfZHZyX3JlbW92ZShcdTAwMjZwZGV2LVx1MDAzZWRldik7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1kd2MtcW9zLWV0aC5jLTM0OC1cbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1pbnRlbC5jPTEzNjE9c3RhdGljIHZvaWQgaW50ZWxfZXRoX3BjaV9yZW1vdmUoc3RydWN0IHBjaV9kZXYgKnBkZXYpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtaW50ZWwuYy0xMzY1LVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtaW50ZWwuYzoxMzY2Olx0c3RtbWFjX2R2cl9yZW1vdmUoXHUwMDI2cGRldi1cdTAwM2VkZXYpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtaW50ZWwuYy0xMzY3LVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLWxvb25nc29uLmM9NTc4PXN0YXRpYyB2b2lkIGxvb25nc29uX2R3bWFjX3JlbW92ZShzdHJ1Y3QgcGNpX2RldiAqcGRldilcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1sb29uZ3Nvbi5jLTU4NC1cdGxkID0gcHJpdi1cdTAwM2VwbGF0LVx1MDAzZWJzcF9wcml2O1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtbG9vbmdzb24uYzo1ODU6XHRzdG1tYWNfZHZyX3JlbW92ZShcdTAwMjZwZGV2LVx1MDAzZWRldik7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1sb29uZ3Nvbi5jLTU4Ni1cbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1tb3RvcmNvbW0uYz0zNjI9c3RhdGljIHZvaWQgbW90b3Jjb21tX3JlbW92ZShzdHJ1Y3QgcGNpX2RldiAqcGRldilcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLW1vdG9yY29tbS5jLTM2My17XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1tb3RvcmNvbW0uYzozNjQ6XHRzdG1tYWNfZHZyX3JlbW92ZShcdTAwMjZwZGV2LVx1MDAzZWRldik7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1tb3RvcmNvbW0uYy0zNjUtfVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLXN0bTMyLmM9NTk1PXN0YXRpYyB2b2lkIHN0bTMyX2R3bWFjX3JlbW92ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLXN0bTMyLmMtNjAwLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtc3RtMzIuYzo2MDE6XHRzdG1tYWNfZHZyX3JlbW92ZShcdTAwMjZwZGV2LVx1MDAzZWRldik7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1zdG0zMi5jLTYwMi1cbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWMuaD00MTI9aW50IHN0bW1hY19zdXNwZW5kKHN0cnVjdCBkZXZpY2UgKmRldik7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWMuaDo0MTM6dm9pZCBzdG1tYWNfZHZyX3JlbW92ZShzdHJ1Y3QgZGV2aWNlICpkZXYpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjLmgtNDE0LWludCBzdG1tYWNfZHZyX3Byb2JlKHN0cnVjdCBkZXZpY2UgKmRldmljZSxcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfbWFpbi5jPTgxNjI9RVhQT1JUX1NZTUJPTF9HUEwoc3RtbWFjX2R2cl9wcm9iZSk7XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX21haW4uYy04MTY0LS8qKlxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX21haW4uYzo4MTY1OiAqIHN0bW1hY19kdnJfcmVtb3ZlXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfbWFpbi5jLTgxNjYtICogQGRldjogZGV2aWNlIHBvaW50ZXJcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfbWFpbi5jLTgxNjktICovXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfbWFpbi5jOjgxNzA6dm9pZCBzdG1tYWNfZHZyX3JlbW92ZShzdHJ1Y3QgZGV2aWNlICpkZXYpXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfbWFpbi5jLTgxNzEte1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19tYWluLmMtODIwMy19XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfbWFpbi5jOjgyMDQ6RVhQT1JUX1NZTUJPTF9HUEwoc3RtbWFjX2R2cl9yZW1vdmUpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX21haW4uYy04MjA1LVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19wY2kuYz0xOTI9c3RhdGljIHZvaWQgc3RtbWFjX3BjaV9yZW1vdmUoc3RydWN0IHBjaV9kZXYgKnBkZXYpXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfcGNpLmMtMTkzLXtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19wY2kuYzoxOTQ6XHRzdG1tYWNfZHZyX3JlbW92ZShcdTAwMjZwZGV2LVx1MDAzZWRldik7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfcGNpLmMtMTk1LX1cbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfcGxhdGZvcm0uYz04OTc9dm9pZCBzdG1tYWNfcGx0ZnJfcmVtb3ZlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfcGxhdGZvcm0uYy04OTgte1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX3BsYXRmb3JtLmM6ODk5Olx0c3RtbWFjX2R2cl9yZW1vdmUoXHUwMDI2cGRldi1cdTAwM2VkZXYpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX3BsYXRmb3JtLmMtOTAwLX1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTQgMDY6Mzg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDYzNDIKCQkJCQkJCW91dHB1dDogMjMKCQkJCQkJCXRob3VnaHRzOiA3NzMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQW5hbHlzaXMgb2YgdGhlIFNUTU1BQyBEcml2ZXIgQ2hhbmdlcyoqCgpPa2F5LCBzbyBJJiMzOTt2ZSBiZWVuIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBhbmQgdHJ5aW5nIHRvIGZpZ3VyZSBvdXQgdGhlIGJlc3QgYXBwcm9hY2ggZm9yIGZ1enppbmcgdGhlIGNoYW5nZXMgaXQgaW50cm9kdWNlcyB0byB0aGUgU1RNTUFDIGRyaXZlci4gTXkgaW5pdGlhbCB0aG91Z2h0IHdhcyB0aGF0IGBzdG1tYWNfZHZyX3JlbW92ZWAgd291bGQgYmUgYSBnb29kIHN5bWJvbCB0byBmb2N1cyBvbiwgYW5kIHdoaWxlIGl0IHN0aWxsIGlzLCBJIHRoaW5rIEkmIzM5O3ZlIGlkZW50aWZpZWQgc29tZSBldmVuIGJldHRlciB0YXJnZXRzLgoKTGV0JiMzOTtzIGxpc3QgdGhlbSBhbGwgb3V0LCBzdGFydGluZyB3aXRoIHRoZSBvcmlnaW5hbCBzdWdnZXN0aW9uOgoKKiAgIGBzdG1tYWNfZHZyX3Byb2JlYAoqICAgYHN0bW1hY19kdnJfcmVtb3ZlYAoqICAgYHN0bW1hY19zdXNwZW5kYAoqICAgYHN0bW1hY19yZXN1bWVgCiogICBgc3RtbWFjX3hkcF9vcGVuYAoqICAgYHN0bW1hY194ZHBfcmVsZWFzZWAKKiAgIGBzdG1tYWNfcmVpbml0X3F1ZXVlc2AKKiAgIGBzdG1tYWNfcmVpbml0X3JpbmdwYXJhbWAKCkkgaW5pdGlhbGx5IHRob3VnaHQgYHN0bW1hY19kdnJfcHJvYmVgIHdhcyB0aGUga2V5LiBCdXQsIG5vLiBJIHdhcyBtaXN0YWtlbiBhYm91dCBpdHMgcm9sZSBpbiBjYWxsaW5nIGBzdG1tYWNfaHdfc2V0dXBgLiBNeSB1bmRlcnN0YW5kaW5nIGlzIHRoYXQgYHN0bW1hY19kdnJfcHJvYmVgIHJlZ2lzdGVycyB0aGUgbmV0IGRldmljZSwgd2hlcmVhcyBgc3RtbWFjX29wZW5gIGNhbGxzIGBzdG1tYWNfaHdfc2V0dXBgLiBgc3RtbWFjX29wZW5gIGlzIHN0YXRpYywgc28gc3l6a2FsbGVyIHNob3VsZCBiZSBhYmxlIHRvIHJlYWNoIGl0IHZpYSBgbmRvX29wZW5gLiBJJiMzOTttIGFsc28gY29uc2lkZXJpbmcgYHN0bW1hY19yZWluaXRfcXVldWVzYCBhbmQgYHN0bW1hY19yZWluaXRfcmluZ3BhcmFtYCwgc2luY2UgdGhleSBjYWxsIGBzdG1tYWNfb3BlbmAgYXMgd2VsbC4KCkhvd2V2ZXIsIHRoZSBtb3JlIEkgdGhpbmsgYWJvdXQgaXQsIHRoZSBtb3JlIEkmIzM5O20gbGVhbmluZyB0b3dhcmRzIGBzdG1tYWNfeGRwX29wZW5gIGFzIGEgcHJpbWUgdGFyZ2V0LiBJdCBjYWxscyBgc3RtbWFjX3N0YXJ0X2FsbF9kbWFgIGFuZCBgc3RtbWFjX21hY19zZXRgLiBUaGF0IGxvb2tzIGxpa2UgYSBwcmV0dHkganVpY3kgZW50cnkgcG9pbnQuCgpOb3csIGEgcXVpY2sgY2hlY2sgb24gYHN0bW1hY19kYXRhcGF0aF90ZWFyZG93bmAgYW5kIGl0cyByZWFjaGFiaWxpdHkgdmlhIGBzdG1tYWNfc3VzcGVuZGA6IFllcywgYHN0bW1hY19zdXNwZW5kYCAqZG9lcyogY2FsbCBgc3RtbWFjX2RhdGFwYXRoX3RlYXJkb3duKHByaXYpYCBpZiBgcHJpdi0mZ3Q7d29sb3B0c2AgaXMgZmFsc2UuIEFuZCBvZiBjb3Vyc2UsIGBzdG1tYWNfcmVzdW1lYCBjYWxscyBgc3RtbWFjX2h3X3NldHVwKG5kZXYpYC4gU28sIGBzdG1tYWNfc3VzcGVuZGAgYW5kIGBzdG1tYWNfcmVzdW1lYCBhcmUgZGVmaW5pdGVseSB3b3J0aCBpbmNsdWRpbmcgb24gdGhlIGxpc3QuCgpIZXJlJiMzOTtzIG15IGRpc3RpbGxlZCBzdW1tYXJ5OgoKKiAgICoqV29ydGhGdXp6aW5nOioqIFRydWUKKiAgICoqUmVhc29uaW5nOioqIFRoaXMgcGF0Y2ggbWFrZXMgc2lnbmlmaWNhbnQgY2hhbmdlcyB0byB0aGUgU1RNTUFDIGRyaXZlciwgc3BlY2lmaWNhbGx5IHJlZ2FyZGluZyB0aGUgb3JkZXIgb2Ygb3BlcmF0aW9ucyBkdXJpbmcgZGF0YXBhdGggdGVhcmRvd24gYW5kIHNldHVwIGZvciBhbGwgU1RNTUFDIGRldmljZXMsIG1vZGlmeWluZyB0aGUgRE1BIHN0b3AvTUFDIGRpc2FibGUgYW5kIE1BQyBlbmFibGUvRE1BIHN0YXJ0IHNlcXVlbmNlcy4gVGhlc2UgZnVuY3Rpb25hbCBjaGFuZ2VzIGluIGNvcmUgbG9naWMgYXJlIHJlYWNoYWJsZSB0aHJvdWdoIFBDSSBlbXVsYXRpb24uCiogICAqKkZvY3VzU3ltYm9sczoqKgogICAgKiAgIGBzdG1tYWNfZHZyX3JlbW92ZWAKICAgICogICBgc3RtbWFjX3N1c3BlbmRgCiAgICAqICAgYHN0bW1hY19yZXN1bWVgCiAgICAqICAgYHN0bW1hY194ZHBfb3BlbmAKICAgICogICBgc3RtbWFjX3hkcF9yZWxlYXNlYAogICAgKiAgIGBzdG1tYWNfcmVpbml0X3F1ZXVlc2AKICAgICogICBgc3RtbWFjX3JlaW5pdF9yaW5ncGFyYW1gCiogICAqKkVuYWJsZUNvbmZpZ3M6KioKICAgICogICBgU1RNTUFDX0VUSGAKICAgICogICBgU1RNTUFDX1BDSWAKCkkmIzM5O3ZlIG1hZGUgc3VyZSB0byBjaGVjayB0aGUgZGVwZW5kZW5jaWVzLiBgU1RNTUFDX0VUSGAgZGVwZW5kcyBvbiBgSEFTX0lPTUVNYCBhbmQgYEhBU19ETUFgIOKAkyBzdGFuZGFyZCBzdHVmZi4gYFNUTU1BQ19QQ0lgIGRlcGVuZHMgb24gYFBDSWAgYW5kIGBDT01NT05fQ0xLYC4gSSBkb24mIzM5O3QgdGhpbmsgd2UgbmVlZCBhbnl0aGluZyBzcGVjaWFsIGZvciBYRFAgYmV5b25kIGBCUEZfU1lTQ0FMTGAsIHdoaWNoIGlzIGFsc28gZmFpcmx5IHN0YW5kYXJkLiBUaGVyZWZvcmUsIGBTVE1NQUNfRVRIYCBhbmQgYFNUTU1BQ19QQ0lgIHNob3VsZCBiZSBzdWZmaWNpZW50IGZvciByZXByb2R1Y2luZyB0aGlzIGlzc3VlLgoKT25lIGZpbmFsIHBvaW50IOKAkyB0aGUgcGF0Y2ggYWxzbyB0b3VjaGVzIGBkd3hnbWFjMl9kbWEuY2AuIEkgbmVlZCB0byBjb25maXJtIHdoZXRoZXIgYGR3eGdtYWMyX2RtYS5jYCwgd2hpY2ggaW1wbGVtZW50cyBgZHd4Z21hYzIxMF9kbWFfb3BzYCwgZ2V0cyBjb21waWxlZCB3aGVuIGBTVE1NQUNfRVRIYCBpcyBlbmFibGVkLiBJdCBpcyBpbXBvcnRhbnQgdG8gY29uZmlybSB0aGF0IHRoZSBjaGFuZ2VzIGluIHRoYXQgZmlsZSBhcmUgY292ZXJlZCBieSB0aGUgY3VycmVudCBjb25maWd1cmF0aW9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjU2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNCAwNjozODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtkd3hnbWFjMl9kbWEubyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9NYWtlZmlsZT0zPXN0bW1hYy1vYmpzOj0gc3RtbWFjX21haW4ubyBzdG1tYWNfZXRodG9vbC5vIHN0bW1hY19tZGlvLm8gcmluZ19tb2RlLm9cdFxcXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvTWFrZWZpbGUtNy1cdCAgICAgIGR3bWFjNF9kbWEubyBkd21hYzRfbGliLm8gZHdtYWM0X2NvcmUubyBkd21hYzUubyBod2lmLm8gXFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL01ha2VmaWxlOjg6XHQgICAgICBzdG1tYWNfdGMubyBkd3hnbWFjMl9jb3JlLm8gZHd4Z21hYzJfZG1hLm8gZHd4Z21hYzJfZGVzY3MubyBcXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvTWFrZWZpbGUtOS1cdCAgICAgIHN0bW1hY194ZHAubyBzdG1tYWNfZXN0Lm8gc3RtbWFjX2ZwZS5vIHN0bW1hY192bGFuLm8gXFxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTQgMDY6Mzg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDgzMDUKCQkJCQkJCW91dHB1dDogMTc4CgkJCQkJCQl0aG91Z2h0czogMTU3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFzc2Vzc21lbnQgb2YgdGhlIGBzdG1tYWNgIENoYW5nZXMqKgoKT2theSwgc28gSSYjMzk7dmUgY29uZmlybWVkIHRoYXQgdGhlc2UgY2hhbmdlcyBhcmUgaW5kZWVkIHdpdGhpbiB0aGUgYHN0bW1hYy1vYmpzYCBzY29wZSwgYXMgZXhwZWN0ZWQuIExldCYjMzk7cyBkZWx2ZSBpbnRvIHRoZSBjb3JlIG9mIHRoZXNlIG1vZGlmaWNhdGlvbnMuIEkmIzM5O20gZm9jdXNpbmcgb24gdGhlIGtleSBzeW1ib2xzIGFmZmVjdGVkOiBgc3RtbWFjX2R2cl9yZW1vdmVgLCBgc3RtbWFjX3N1c3BlbmRgLCBgc3RtbWFjX3Jlc3VtZWAsIGBzdG1tYWNfeGRwX29wZW5gLCBgc3RtbWFjX3hkcF9yZWxlYXNlYCwgYHN0bW1hY19yZWluaXRfcXVldWVzYCwgYW5kIGBzdG1tYWNfcmVpbml0X3JpbmdwYXJhbWAuCgpMb29raW5nIGF0IHRoaXMgbGlzdCwgdGhlIGltcGFjdCBpcyBpbW1lZGlhdGVseSBhcHBhcmVudC4gVGhlc2Ugc3ltYm9scyBlbmNhcHN1bGF0ZSB0aGUgY3JpdGljYWwgYXJlYXMgd2hlcmUgdGhlIGRyaXZlciYjMzk7cyBvcGVyYXRpb25hbCBmbG93IGhhcyBiZWVuIGFsdGVyZWQuIFNwZWNpZmljYWxseSwgdGhpcyBwYXRjaCBjaGFuZ2VzIHRoZSBzZXF1ZW5jaW5nIG9mIE1BQyBlbmFibGUvZGlzYWJsZSBhY3Rpb25zIHJlbGF0aXZlIHRvIHRoZSBETUEgc3RhcnQvc3RvcCBvcGVyYXRpb25zLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBhbHRlcmF0aW9uOyBpdCYjMzk7cyBjaGFuZ2luZyAqaG93KiB0aGUgY29yZSBkcml2ZXIgaGFuZGxlcyB0aGUgZnVuZGFtZW50YWwgaGFyZHdhcmUgaW50ZXJhY3Rpb25zIGFjcm9zcyBhbGwgc3RtbWFjIGRldmljZXMuIEl0JiMzOTtzIG5vdCBqdXN0IGEgcmVmYWN0b3Jpbmcgb3Igb3B0aW1pemF0aW9uLCBpdCYjMzk7cyBhIGZ1bmRhbWVudGFsIHNoaWZ0IGluIHRoZSBkcml2ZXImIzM5O3MgY29udHJvbCBsb2dpYy4KCkFscmlnaHQsIHdpdGggdGhpcyB1bmRlcnN0YW5kaW5nIGNvbmZpcm1lZCwgSSYjMzk7bSBjb21mb3J0YWJsZSBjYWxsaW5nIGBzZXQtcmVzdWx0c2AuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE0IDA2OjM4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtTVE1NQUNfRVRIJiMzNDssCiAgICAmIzM0O1NUTU1BQ19QQ0kmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtzdG1tYWNfZHZyX3JlbW92ZSYjMzQ7LAogICAgJiMzNDtzdG1tYWNfc3VzcGVuZCYjMzQ7LAogICAgJiMzNDtzdG1tYWNfcmVzdW1lJiMzNDssCiAgICAmIzM0O3N0bW1hY194ZHBfb3BlbiYjMzQ7LAogICAgJiMzNDtzdG1tYWNfeGRwX3JlbGVhc2UmIzM0OywKICAgICYjMzQ7c3RtbWFjX3JlaW5pdF9xdWV1ZXMmIzM0OywKICAgICYjMzQ7c3RtbWFjX3JlaW5pdF9yaW5ncGFyYW0mIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIG5ldyBvcmRlcmVkIGRhdGFwYXRoIHRlYXJkb3duIHNlcXVlbmNlIGZvciBhbGwgc3RtbWFjIGRldmljZXMsIGNoYW5naW5nIHRoZSBvcmRlciBvZiBETUEgc3RvcCBhbmQgTUFDIGRpc2FibGUgb3BlcmF0aW9ucy4gSXQgYWxzbyBzd2FwcyB0aGUgb3JkZXIgb2YgTUFDIGVuYWJsZSBhbmQgRE1BIHN0YXJ0IGluIHRoZSBzZXR1cCBwYXRocy4gVGhlc2UgYXJlIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUgY29yZSBkcml2ZXIgbG9naWMgcmVhY2hhYmxlIHZpYSBQQ0kgZW11bGF0aW9uLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtTVE1NQUNfRVRIJiMzNDssCiAgICAmIzM0O1NUTU1BQ19QQ0kmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtzdG1tYWNfZHZyX3JlbW92ZSYjMzQ7LAogICAgJiMzNDtzdG1tYWNfc3VzcGVuZCYjMzQ7LAogICAgJiMzNDtzdG1tYWNfcmVzdW1lJiMzNDssCiAgICAmIzM0O3N0bW1hY194ZHBfb3BlbiYjMzQ7LAogICAgJiMzNDtzdG1tYWNfeGRwX3JlbGVhc2UmIzM0OywKICAgICYjMzQ7c3RtbWFjX3JlaW5pdF9xdWV1ZXMmIzM0OywKICAgICYjMzQ7c3RtbWFjX3JlaW5pdF9yaW5ncGFyYW0mIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIG5ldyBvcmRlcmVkIGRhdGFwYXRoIHRlYXJkb3duIHNlcXVlbmNlIGZvciBhbGwgc3RtbWFjIGRldmljZXMsIGNoYW5naW5nIHRoZSBvcmRlciBvZiBETUEgc3RvcCBhbmQgTUFDIGRpc2FibGUgb3BlcmF0aW9ucy4gSXQgYWxzbyBzd2FwcyB0aGUgb3JkZXIgb2YgTUFDIGVuYWJsZSBhbmQgRE1BIHN0YXJ0IGluIHRoZSBzZXR1cCBwYXRocy4gVGhlc2UgYXJlIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUgY29yZSBkcml2ZXIgbG9naWMgcmVhY2hhYmxlIHZpYSBQQ0kgZW11bGF0aW9uLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjU5LzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNCAwNjozODwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+SWY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NjAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE0IDA2OjM4PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmJlc3QtZXhwZW5zaXZlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBoYXJkd2FyZSBpbml0aWFsaXphdGlvbiBhbmQgdGVhcmRvd24gc2VxdWVuY2VzIGluIHRoZSBzdG1tYWMgZHJpdmVyLCBpbnRyb2R1Y2luZyBhbiBvcmRlcmVkIGRhdGFwYXRoIHRlYXJkb3duIHRvIHByb3Blcmx5IHN0b3AgRE1BIGFuZCBNQUMgb3BlcmF0aW9ucy4gSXQgYWRkcyBmdW5jdGlvbnMgdG8gcG9sbCBoYXJkd2FyZSByZWdpc3RlcnMgZm9yIHNwZWNpZmljIHN0YXRlcyAoZS5nLiwgRE1BIHN0b3BwZWQsIE1UTCBxdWV1ZXMgZHJhaW5lZCkgdXNpbmcgYHJlYWRsX3BvbGxfdGltZW91dGAuIFRoZXNlIGNoYW5nZXMgYXJlIHB1cmVseSByZWxhdGVkIHRvIGhhcmR3YXJlIGNvbnRyb2wgZmxvdyBhbmQgZG8gbm90IGludHJvZHVjZSBhbnkgbmV3IGRhdGEgc3RydWN0dXJlcywgYnVmZmVyIGFsbG9jYXRpb25zLCBvciBkYXRhIGNvcGllcyB0byB1c2VyIHNwYWNlLiBUaGVyZSBpcyBubyByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGJlaW5nIGV4cG9zZWQgb3IgdXNlZCBpbiBjb250cm9sIGZsb3cuIFN0YW5kYXJkIEtBU0FOIGFuZCBvdGhlciBidWcgZGV0ZWN0b3JzIGFyZSBzdWZmaWNpZW50IHRvIGNhdGNoIGFueSBwb3RlbnRpYWwgbWVtb3J5IGNvcnJ1cHRpb24gb3IgdXNlLWFmdGVyLWZyZWUgYnVncyB0aGF0IG1pZ2h0IGFyaXNlIGZyb20gZHJpdmVyIHRlYXJkb3duIGlzc3Vlcy4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnkKZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQKZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKQpmdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy4KCkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOgotIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGUKICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU4KICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQCiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy4KLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCwKICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuCgpSdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLApMT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLgpBIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZCnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzCnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uCgpMb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdAp1bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZiwKYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzCnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nCnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbApmbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsCmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLgoKU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOgoxLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYgogICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkcwogICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLgoyLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzCiAgIG9yIHN0cnVjdCBmaWVsZHMuCjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHMKICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy4KNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3MKICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLgoKU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6Ci0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXIKICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHQKICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuCi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWQKICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuCi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLgoKVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZQpkZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgYTA4ZmYzNGNiMmNkMmQyOWMxZTI2MTVkZDE0NDgwY2NiMmQ4NzBmYgpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBGcmkgQXVnIDE0IDA2OjM1OjMyIDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHd4Z21hYzIuaCBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3eGdtYWMyLmgKaW5kZXggZjhhYjM0N2Y3YjViOS4uNTBmOWNjZDRhOWM0NiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHd4Z21hYzIuaAomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd3hnbWFjMi5oCkBAIC0yOTEsNiAmIzQzOzI5MSwxMCBAQAogI2RlZmluZSBYR01BQ19UVEMJCQlHRU5NQVNLKDYsIDQpCiAjZGVmaW5lIFhHTUFDX1RYUUVOCQkJR0VOTUFTSygzLCAyKQogI2RlZmluZSBYR01BQ19UU0YJCQlCSVQoMSkKJiM0MzsjZGVmaW5lIFhHTUFDX01UTF9UWFFfREVCVUcoeCkJCSgweDAwMDAxMTA4ICYjNDM7ICgweDgwICogKHgpKSkKJiM0MzsjZGVmaW5lIFhHTUFDX1RYUVNUUwkJCUJJVCg0KQomIzQzOyNkZWZpbmUgWEdNQUNfVFJDU1RTCQkJR0VOTUFTSygyLCAxKQomIzQzOyNkZWZpbmUgWEdNQUNfVFJDU1RTX1JFQUQJCTB4MQogI2RlZmluZSBYR01BQ19NVExfVEN4X0VUU19DT05UUk9MKHgpCSgweDAwMDAxMTEwICYjNDM7ICgweDgwICogKHgpKSkKICNkZWZpbmUgWEdNQUNfTVRMX1RDeF9RVUFOVFVNX1dFSUdIVCh4KQkoMHgwMDAwMTExOCAmIzQzOyAoMHg4MCAqICh4KSkpCiAjZGVmaW5lIFhHTUFDX01UTF9UQ3hfU0VORFNMT1BFKHgpCSgweDAwMDAxMTFjICYjNDM7ICgweDgwICogKHgpKSkKQEAgLTMwNiw2ICYjNDM7MzEwLDkgQEAKICNkZWZpbmUgWEdNQUNfRUhGQwkJCUJJVCg3KQogI2RlZmluZSBYR01BQ19SU0YJCQlCSVQoNSkKICNkZWZpbmUgWEdNQUNfUlRDCQkJR0VOTUFTSygxLCAwKQomIzQzOyNkZWZpbmUgWEdNQUNfTVRMX1JYUV9ERUJVRyh4KQkJKDB4MDAwMDExNDggJiM0MzsgKDB4ODAgKiAoeCkpKQomIzQzOyNkZWZpbmUgWEdNQUNfUFJYUQkJCUdFTk1BU0soMjksIDE2KQomIzQzOyNkZWZpbmUgWEdNQUNfUlhRU1RTCQkJR0VOTUFTSyg1LCA0KQogI2RlZmluZSBYR01BQ19NVExfUlhRX0ZMT1dfQ09OVFJPTCh4KQkoMHgwMDAwMTE1MCAmIzQzOyAoMHg4MCAqICh4KSkpCiAjZGVmaW5lIFhHTUFDX1JGRAkJCUdFTk1BU0soMzEsIDE3KQogI2RlZmluZSBYR01BQ19SRkEJCQlHRU5NQVNLKDE1LCAxKQpAQCAtMzkxLDYgJiM0MzszOTgsNyBAQAogI2RlZmluZSBYR01BQ19OSVMJCQlCSVQoMTUpCiAjZGVmaW5lIFhHTUFDX0FJUwkJCUJJVCgxNCkKICNkZWZpbmUgWEdNQUNfRkJFCQkJQklUKDEyKQomIzQzOyNkZWZpbmUgWEdNQUNfUlBTCQkJQklUKDgpCiAjZGVmaW5lIFhHTUFDX1JCVQkJCUJJVCg3KQogI2RlZmluZSBYR01BQ19SSQkJCUJJVCg2KQogI2RlZmluZSBYR01BQ19UQlUJCQlCSVQoMikKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3eGdtYWMyX2RtYS5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHd4Z21hYzJfZG1hLmMKaW5kZXggZmY4Mzg1OGViYzFmMy4uYmE0ZjUzNWZiOWViNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHd4Z21hYzJfZG1hLmMKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHd4Z21hYzJfZG1hLmMKQEAgLTQsNiAmIzQzOzQsNyBAQAogICogc3RtbWFjIFhHTUFDIHN1cHBvcnQuCiAgKi8KIAomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9iaXRmaWVsZC5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L2lvcG9sbC5oJmd0OwogI2luY2x1ZGUgJiMzNDtzdG1tYWMuaCYjMzQ7CiAjaW5jbHVkZSAmIzM0O2R3eGdtYWMyLmgmIzM0OwpAQCAtMjYxLDEzICYjNDM7MjYyLDEyIEBAIHN0YXRpYyB2b2lkIGR3eGdtYWMyX2RtYV9zdGFydF90eChzdHJ1Y3Qgc3RtbWFjX3ByaXYgKnByaXYsCiB7CiAJdTMyIHZhbHVlOwogCiYjNDM7CS8qIFRQUyBpcyBsYXRjaGVkIG9uY2Ugc2V0LCBzbyBjbGVhciBpdCBvbiBldmVyeSBUeCBETUEgc3RhcnQuICovCiYjNDM7CXdyaXRlbChYR01BQ19UUFMsIGlvYWRkciAmIzQzOyBYR01BQ19ETUFfQ0hfU1RBVFVTKGNoYW4pKTsKJiM0MzsKIAl2YWx1ZSA9IHJlYWRsKGlvYWRkciAmIzQzOyBYR01BQ19ETUFfQ0hfVFhfQ09OVFJPTChjaGFuKSk7CiAJdmFsdWUgfD0gWEdNQUNfVFhTVDsKIAl3cml0ZWwodmFsdWUsIGlvYWRkciAmIzQzOyBYR01BQ19ETUFfQ0hfVFhfQ09OVFJPTChjaGFuKSk7Ci0KLQl2YWx1ZSA9IHJlYWRsKGlvYWRkciAmIzQzOyBYR01BQ19UWF9DT05GSUcpOwotCXZhbHVlIHw9IFhHTUFDX0NPTkZJR19URTsKLQl3cml0ZWwodmFsdWUsIGlvYWRkciAmIzQzOyBYR01BQ19UWF9DT05GSUcpOwogfQogCiBzdGF0aWMgdm9pZCBkd3hnbWFjMl9kbWFfc3RvcF90eChzdHJ1Y3Qgc3RtbWFjX3ByaXYgKnByaXYsIHZvaWQgX19pb21lbSAqaW9hZGRyLApAQCAtMjc4LDEwICYjNDM7Mjc4LDYgQEAgc3RhdGljIHZvaWQgZHd4Z21hYzJfZG1hX3N0b3BfdHgoc3RydWN0IHN0bW1hY19wcml2ICpwcml2LCB2b2lkIF9faW9tZW0gKmlvYWRkciwKIAl2YWx1ZSA9IHJlYWRsKGlvYWRkciAmIzQzOyBYR01BQ19ETUFfQ0hfVFhfQ09OVFJPTChjaGFuKSk7CiAJdmFsdWUgJmFtcDs9IH5YR01BQ19UWFNUOwogCXdyaXRlbCh2YWx1ZSwgaW9hZGRyICYjNDM7IFhHTUFDX0RNQV9DSF9UWF9DT05UUk9MKGNoYW4pKTsKLQotCXZhbHVlID0gcmVhZGwoaW9hZGRyICYjNDM7IFhHTUFDX1RYX0NPTkZJRyk7Ci0JdmFsdWUgJmFtcDs9IH5YR01BQ19DT05GSUdfVEU7Ci0Jd3JpdGVsKHZhbHVlLCBpb2FkZHIgJiM0MzsgWEdNQUNfVFhfQ09ORklHKTsKIH0KIAogc3RhdGljIHZvaWQgZHd4Z21hYzJfZG1hX3N0YXJ0X3J4KHN0cnVjdCBzdG1tYWNfcHJpdiAqcHJpdiwKQEAgLTI4OSwxMyAmIzQzOzI4NSwxMiBAQCBzdGF0aWMgdm9pZCBkd3hnbWFjMl9kbWFfc3RhcnRfcngoc3RydWN0IHN0bW1hY19wcml2ICpwcml2LAogewogCXUzMiB2YWx1ZTsKIAomIzQzOwkvKiBSUFMgaXMgbGF0Y2hlZCBvbmNlIHNldCwgc28gY2xlYXIgaXQgb24gZXZlcnkgUnggRE1BIHN0YXJ0LiAqLwomIzQzOwl3cml0ZWwoWEdNQUNfUlBTLCBpb2FkZHIgJiM0MzsgWEdNQUNfRE1BX0NIX1NUQVRVUyhjaGFuKSk7CiYjNDM7CiAJdmFsdWUgPSByZWFkbChpb2FkZHIgJiM0MzsgWEdNQUNfRE1BX0NIX1JYX0NPTlRST0woY2hhbikpOwogCXZhbHVlIHw9IFhHTUFDX1JYU1Q7CiAJd3JpdGVsKHZhbHVlLCBpb2FkZHIgJiM0MzsgWEdNQUNfRE1BX0NIX1JYX0NPTlRST0woY2hhbikpOwotCi0JdmFsdWUgPSByZWFkbChpb2FkZHIgJiM0MzsgWEdNQUNfUlhfQ09ORklHKTsKLQl2YWx1ZSB8PSBYR01BQ19DT05GSUdfUkU7Ci0Jd3JpdGVsKHZhbHVlLCBpb2FkZHIgJiM0MzsgWEdNQUNfUlhfQ09ORklHKTsKIH0KIAogc3RhdGljIHZvaWQgZHd4Z21hYzJfZG1hX3N0b3Bfcngoc3RydWN0IHN0bW1hY19wcml2ICpwcml2LCB2b2lkIF9faW9tZW0gKmlvYWRkciwKQEAgLTU5Miw2ICYjNDM7NTg3LDc3IEBAIHN0YXRpYyBpbnQgZHd4Z21hYzJfZW5hYmxlX3RicyhzdHJ1Y3Qgc3RtbWFjX3ByaXYgKnByaXYsIHZvaWQgX19pb21lbSAqaW9hZGRyLAogCXJldHVybiAwOwogfQogCiYjNDM7c3RhdGljIGludCBkd3hnbWFjMl90eF9kbWFfc3RvcHBlZChzdHJ1Y3Qgc3RtbWFjX3ByaXYgKnByaXYsCiYjNDM7CQkJCSAgIHZvaWQgX19pb21lbSAqaW9hZGRyLCB1MzIgY2hhbikKJiM0Mzt7CiYjNDM7CXUzMiB2YWx1ZTsKJiM0MzsJaW50IHJldDsKJiM0MzsKJiM0MzsJcmV0ID0gcmVhZGxfcG9sbF90aW1lb3V0KGlvYWRkciAmIzQzOyBYR01BQ19ETUFfQ0hfU1RBVFVTKGNoYW4pLCB2YWx1ZSwKJiM0MzsJCQkJIHZhbHVlICZhbXA7IFhHTUFDX1RQUywgMTAwLCAxMDAwMCk7CiYjNDM7CWlmIChyZXQpCiYjNDM7CQluZXRkZXZfd2Fybihwcml2LSZndDtkZXYsICYjMzQ7VHggRE1BIGNoYW5uZWwgJXUgc3RvcCB0aW1lb3V0XG4mIzM0OywKJiM0MzsJCQkgICAgY2hhbik7CiYjNDM7CiYjNDM7CXJldHVybiByZXQ7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbnQgZHd4Z21hYzJfdHhfbXRsX2RyYWluKHN0cnVjdCBzdG1tYWNfcHJpdiAqcHJpdiwKJiM0MzsJCQkJIHZvaWQgX19pb21lbSAqaW9hZGRyLCB1MzIgcXVldWUpCiYjNDM7ewomIzQzOwl1MzIgdmFsdWU7CiYjNDM7CWludCByZXQ7CiYjNDM7CiYjNDM7CS8qIFdhaXQgdW50aWwgdGhlIHF1ZXVlIGlzIGVtcHR5IGFuZCBpdHMgcmVhZCBjb250cm9sbGVyIGlzIG5vIGxvbmdlcgomIzQzOwkgKiBwdWxsaW5nIGEgZnJhbWUgb3V0IHRvd2FyZHMgdGhlIE1BQy4KJiM0MzsJICovCiYjNDM7CXJldCA9IHJlYWRsX3BvbGxfdGltZW91dChpb2FkZHIgJiM0MzsgWEdNQUNfTVRMX1RYUV9ERUJVRyhxdWV1ZSksIHZhbHVlLAomIzQzOwkJCQkgISh2YWx1ZSAmYW1wOyBYR01BQ19UWFFTVFMpICZhbXA7JmFtcDsKJiM0MzsJCQkJIEZJRUxEX0dFVChYR01BQ19UUkNTVFMsIHZhbHVlKSAhPQomIzQzOwkJCQkgWEdNQUNfVFJDU1RTX1JFQUQsCiYjNDM7CQkJCSAxMDAsIDEwMDAwKTsKJiM0MzsJaWYgKHJldCkKJiM0MzsJCW5ldGRldl93YXJuKHByaXYtJmd0O2RldiwgJiMzNDtNVEwgVHggcXVldWUgJXUgZHJhaW4gdGltZW91dFxuJiMzNDssCiYjNDM7CQkJICAgIHF1ZXVlKTsKJiM0MzsKJiM0MzsJcmV0dXJuIHJldDsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGludCBkd3hnbWFjMl9yeF9tdGxfZHJhaW4oc3RydWN0IHN0bW1hY19wcml2ICpwcml2LAomIzQzOwkJCQkgdm9pZCBfX2lvbWVtICppb2FkZHIsIHUzMiBxdWV1ZSkKJiM0Mzt7CiYjNDM7CXUzMiB2YWx1ZTsKJiM0MzsJaW50IHJldDsKJiM0MzsKJiM0MzsJLyogV2FpdCB1bnRpbCBubyBwYWNrZXQgaXMgbGVmdCBpbiB0aGUgcXVldWUgYW5kIHRoZSBxdWV1ZSByZXBvcnRzCiYjNDM7CSAqIGl0c2VsZiBlbXB0eS4KJiM0MzsJICovCiYjNDM7CXJldCA9IHJlYWRsX3BvbGxfdGltZW91dChpb2FkZHIgJiM0MzsgWEdNQUNfTVRMX1JYUV9ERUJVRyhxdWV1ZSksIHZhbHVlLAomIzQzOwkJCQkgIUZJRUxEX0dFVChYR01BQ19QUlhRLCB2YWx1ZSkgJmFtcDsmYW1wOwomIzQzOwkJCQkgIUZJRUxEX0dFVChYR01BQ19SWFFTVFMsIHZhbHVlKSwKJiM0MzsJCQkJIDEwMCwgMTAwMDApOwomIzQzOwlpZiAocmV0KQomIzQzOwkJbmV0ZGV2X3dhcm4ocHJpdi0mZ3Q7ZGV2LCAmIzM0O01UTCBSeCBxdWV1ZSAldSBkcmFpbiB0aW1lb3V0XG4mIzM0OywKJiM0MzsJCQkgICAgcXVldWUpOwomIzQzOwomIzQzOwlyZXR1cm4gcmV0OwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW50IGR3eGdtYWMyX3J4X2RtYV9zdG9wcGVkKHN0cnVjdCBzdG1tYWNfcHJpdiAqcHJpdiwKJiM0MzsJCQkJICAgdm9pZCBfX2lvbWVtICppb2FkZHIsIHUzMiBjaGFuKQomIzQzO3sKJiM0MzsJdTMyIHZhbHVlOwomIzQzOwlpbnQgcmV0OwomIzQzOwomIzQzOwlyZXQgPSByZWFkbF9wb2xsX3RpbWVvdXQoaW9hZGRyICYjNDM7IFhHTUFDX0RNQV9DSF9TVEFUVVMoY2hhbiksIHZhbHVlLAomIzQzOwkJCQkgdmFsdWUgJmFtcDsgWEdNQUNfUlBTLCAxMDAsIDEwMDAwKTsKJiM0MzsJaWYgKHJldCkKJiM0MzsJCW5ldGRldl93YXJuKHByaXYtJmd0O2RldiwgJiMzNDtSeCBETUEgY2hhbm5lbCAldSBzdG9wIHRpbWVvdXRcbiYjMzQ7LAomIzQzOwkJCSAgICBjaGFuKTsKJiM0MzsKJiM0MzsJcmV0dXJuIHJldDsKJiM0Mzt9CiYjNDM7CiBjb25zdCBzdHJ1Y3Qgc3RtbWFjX2RtYV9vcHMgZHd4Z21hYzIxMF9kbWFfb3BzID0gewogCS5yZXNldCA9IGR3eGdtYWMyX2RtYV9yZXNldCwKIAkuaW5pdCA9IGR3eGdtYWMyX2RtYV9pbml0LApAQCAtNjIwLDQgJiM0Mzs2ODYsOCBAQCBjb25zdCBzdHJ1Y3Qgc3RtbWFjX2RtYV9vcHMgZHd4Z21hYzIxMF9kbWFfb3BzID0gewogCS5zZXRfYmZzaXplID0gZHd4Z21hYzJfc2V0X2Jmc2l6ZSwKIAkuZW5hYmxlX3NwaCA9IGR3eGdtYWMyX2VuYWJsZV9zcGgsCiAJLmVuYWJsZV90YnMgPSBkd3hnbWFjMl9lbmFibGVfdGJzLAomIzQzOwkudHhfZG1hX3N0b3BwZWQgPSBkd3hnbWFjMl90eF9kbWFfc3RvcHBlZCwKJiM0MzsJLnR4X210bF9kcmFpbiA9IGR3eGdtYWMyX3R4X210bF9kcmFpbiwKJiM0MzsJLnJ4X210bF9kcmFpbiA9IGR3eGdtYWMyX3J4X210bF9kcmFpbiwKJiM0MzsJLnJ4X2RtYV9zdG9wcGVkID0gZHd4Z21hYzJfcnhfZG1hX3N0b3BwZWQsCiB9OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvaHdpZi5oIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvaHdpZi5oCmluZGV4IDA0ZGFmZWMwMjFiNGYuLjg2ZjRhYTg4OTYxYzcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2h3aWYuaAomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9od2lmLmgKQEAgLTIzMSw2ICYjNDM7MjMxLDE1IEBAIHN0cnVjdCBzdG1tYWNfZG1hX29wcyB7CiAJCQkgICBib29sIGVuLCB1MzIgY2hhbik7CiAJaW50ICgqZW5hYmxlX3Ricykoc3RydWN0IHN0bW1hY19wcml2ICpwcml2LCB2b2lkIF9faW9tZW0gKmlvYWRkciwKIAkJCSAgYm9vbCBlbiwgdTMyIGNoYW4pOwomIzQzOwkvKiBPcmRlcmVkIGRhdGFwYXRoIHRlYXJkb3duICovCiYjNDM7CWludCAoKnR4X2RtYV9zdG9wcGVkKShzdHJ1Y3Qgc3RtbWFjX3ByaXYgKnByaXYsIHZvaWQgX19pb21lbSAqaW9hZGRyLAomIzQzOwkJCSAgICAgIHUzMiBjaGFuKTsKJiM0MzsJaW50ICgqdHhfbXRsX2RyYWluKShzdHJ1Y3Qgc3RtbWFjX3ByaXYgKnByaXYsIHZvaWQgX19pb21lbSAqaW9hZGRyLAomIzQzOwkJCSAgICB1MzIgcXVldWUpOwomIzQzOwlpbnQgKCpyeF9tdGxfZHJhaW4pKHN0cnVjdCBzdG1tYWNfcHJpdiAqcHJpdiwgdm9pZCBfX2lvbWVtICppb2FkZHIsCiYjNDM7CQkJICAgIHUzMiBxdWV1ZSk7CiYjNDM7CWludCAoKnJ4X2RtYV9zdG9wcGVkKShzdHJ1Y3Qgc3RtbWFjX3ByaXYgKnByaXYsIHZvaWQgX19pb21lbSAqaW9hZGRyLAomIzQzOwkJCSAgICAgIHUzMiBjaGFuKTsKIH07CiAKICNkZWZpbmUgc3RtbWFjX2RtYV9pbml0KF9fcHJpdiwgX19hcmdzLi4uKSBcCkBAIC0yOTMsNiAmIzQzOzMwMiwxNCBAQCBzdHJ1Y3Qgc3RtbWFjX2RtYV9vcHMgewogCXN0bW1hY19kb192b2lkX2NhbGxiYWNrKF9fcHJpdiwgZG1hLCBlbmFibGVfc3BoLCBfX3ByaXYsIF9fYXJncykKICNkZWZpbmUgc3RtbWFjX2VuYWJsZV90YnMoX19wcml2LCBfX2FyZ3MuLi4pIFwKIAlzdG1tYWNfZG9fY2FsbGJhY2soX19wcml2LCBkbWEsIGVuYWJsZV90YnMsIF9fcHJpdiwgX19hcmdzKQomIzQzOyNkZWZpbmUgc3RtbWFjX3R4X2RtYV9zdG9wcGVkKF9fcHJpdiwgX19hcmdzLi4uKSBcCiYjNDM7CXN0bW1hY19kb19jYWxsYmFjayhfX3ByaXYsIGRtYSwgdHhfZG1hX3N0b3BwZWQsIF9fcHJpdiwgX19hcmdzKQomIzQzOyNkZWZpbmUgc3RtbWFjX3R4X210bF9kcmFpbihfX3ByaXYsIF9fYXJncy4uLikgXAomIzQzOwlzdG1tYWNfZG9fY2FsbGJhY2soX19wcml2LCBkbWEsIHR4X210bF9kcmFpbiwgX19wcml2LCBfX2FyZ3MpCiYjNDM7I2RlZmluZSBzdG1tYWNfcnhfbXRsX2RyYWluKF9fcHJpdiwgX19hcmdzLi4uKSBcCiYjNDM7CXN0bW1hY19kb19jYWxsYmFjayhfX3ByaXYsIGRtYSwgcnhfbXRsX2RyYWluLCBfX3ByaXYsIF9fYXJncykKJiM0MzsjZGVmaW5lIHN0bW1hY19yeF9kbWFfc3RvcHBlZChfX3ByaXYsIF9fYXJncy4uLikgXAomIzQzOwlzdG1tYWNfZG9fY2FsbGJhY2soX19wcml2LCBkbWEsIHJ4X2RtYV9zdG9wcGVkLCBfX3ByaXYsIF9fYXJncykKIAogc3RydWN0IG1hY19kZXZpY2VfaW5mbzsKIHN0cnVjdCBuZXRfZGV2aWNlOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX21haW4uYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19tYWluLmMKaW5kZXggYjJiN2QwMjQyZGQzYy4uOWMzYThmMTIyYjk0ZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX21haW4uYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfbWFpbi5jCkBAIC0yNTYwLDYgJiM0MzsyNTYwLDUyIEBAIHN0YXRpYyB2b2lkIHN0bW1hY19zdG9wX2FsbF9kbWEoc3RydWN0IHN0bW1hY19wcml2ICpwcml2KQogCQlzdG1tYWNfZGVpbml0X2NoYW4ocHJpdiwgcHJpdi0mZ3Q7aW9hZGRyLCBjaGFuKTsKIH0KIAomIzQzOy8qKgomIzQzOyAqIHN0bW1hY19kYXRhcGF0aF90ZWFyZG93biAtIG9yZGVyZWQgZGF0YXBhdGggdGVhcmRvd24gYXMgcGVyIElQIHNwZWNpZmljYXRpb24KJiM0MzsgKiBAcHJpdjogZHJpdmVyIHByaXZhdGUgc3RydWN0dXJlCiYjNDM7ICogRGVzY3JpcHRpb246CiYjNDM7ICogV2hlbiB0ZWFyZG93biBvcHMgYXJlIGF2YWlsYWJsZSwgZm9sbG93IHRoZSBkYXRhYm9vayBvcmRlcmVkIHRlYXJkb3duCiYjNDM7ICogc2VxdWVuY2UuCiYjNDM7ICogRm9sbG93cyB0aGUgbGVnYWN5IHN0b3AgJiM0MzsgTUFDIGRpc2FibGUgZm9yIHZhcmlhbnRzIHdpdGhvdXQgdGhlIGZlYXR1cmUuCiYjNDM7ICovCiYjNDM7c3RhdGljIHZvaWQgc3RtbWFjX2RhdGFwYXRoX3RlYXJkb3duKHN0cnVjdCBzdG1tYWNfcHJpdiAqcHJpdikKJiM0Mzt7CiYjNDM7CXUzMiByeF9jaGFubmVsc19jb3VudCA9IHByaXYtJmd0O3BsYXQtJmd0O3J4X3F1ZXVlc190b191c2U7CiYjNDM7CXUzMiB0eF9jaGFubmVsc19jb3VudCA9IHByaXYtJmd0O3BsYXQtJmd0O3R4X3F1ZXVlc190b191c2U7CiYjNDM7CXUzMiBjaGFuOwomIzQzOwomIzQzOwkvKiBTdG9wIGFsbCBUWCBETUEgY2hhbm5lbHMgKi8KJiM0MzsJZm9yIChjaGFuID0gMDsgY2hhbiAmbHQ7IHR4X2NoYW5uZWxzX2NvdW50OyBjaGFuJiM0MzsmIzQzOykKJiM0MzsJCXN0bW1hY19zdG9wX3R4X2RtYShwcml2LCBjaGFuKTsKJiM0MzsKJiM0MzsJLyogV2FpdCBmb3IgZXZlcnkgVFggRE1BIGNoYW5uZWwgdG8gcmVwb3J0IGl0c2VsZiBzdG9wcGVkICovCiYjNDM7CWlmIChwcml2LSZndDtody0mZ3Q7ZG1hLSZndDt0eF9kbWFfc3RvcHBlZCkKJiM0MzsJCWZvciAoY2hhbiA9IDA7IGNoYW4gJmx0OyB0eF9jaGFubmVsc19jb3VudDsgY2hhbiYjNDM7JiM0MzspCiYjNDM7CQkJc3RtbWFjX3R4X2RtYV9zdG9wcGVkKHByaXYsIHByaXYtJmd0O2lvYWRkciwgY2hhbik7CiYjNDM7CiYjNDM7CS8qIFdhaXQgZm9yIHRoZSBNVEwgVFggcXVldWVzIHRvIGZpbmlzaCBwdXNoaW5nIGludG8gdGhlIE1BQyAqLwomIzQzOwlpZiAocHJpdi0mZ3Q7aHctJmd0O2RtYS0mZ3Q7dHhfbXRsX2RyYWluKQomIzQzOwkJZm9yIChjaGFuID0gMDsgY2hhbiAmbHQ7IHR4X2NoYW5uZWxzX2NvdW50OyBjaGFuJiM0MzsmIzQzOykKJiM0MzsJCQlzdG1tYWNfdHhfbXRsX2RyYWluKHByaXYsIHByaXYtJmd0O2lvYWRkciwgY2hhbik7CiYjNDM7CiYjNDM7CS8qIERpc2FibGUgdGhlIE1BQyBUWCBhbmQgUlggKi8KJiM0MzsJc3RtbWFjX21hY19zZXQocHJpdiwgcHJpdi0mZ3Q7aW9hZGRyLCBmYWxzZSk7CiYjNDM7CiYjNDM7CS8qIFdhaXQgZm9yIHRoZSBNVEwgUlggcXVldWVzIHRvIGRyYWluIGludG8gdGhlIFJYIERNQSAqLwomIzQzOwlpZiAocHJpdi0mZ3Q7aHctJmd0O2RtYS0mZ3Q7cnhfbXRsX2RyYWluKQomIzQzOwkJZm9yIChjaGFuID0gMDsgY2hhbiAmbHQ7IHJ4X2NoYW5uZWxzX2NvdW50OyBjaGFuJiM0MzsmIzQzOykKJiM0MzsJCQlzdG1tYWNfcnhfbXRsX2RyYWluKHByaXYsIHByaXYtJmd0O2lvYWRkciwgY2hhbik7CiYjNDM7CiYjNDM7CS8qIFN0b3AgYWxsIFJYIERNQSBjaGFubmVscyAqLwomIzQzOwlmb3IgKGNoYW4gPSAwOyBjaGFuICZsdDsgcnhfY2hhbm5lbHNfY291bnQ7IGNoYW4mIzQzOyYjNDM7KQomIzQzOwkJc3RtbWFjX3N0b3BfcnhfZG1hKHByaXYsIGNoYW4pOwomIzQzOwomIzQzOwkvKiBXYWl0IGZvciBldmVyeSBSWCBETUEgY2hhbm5lbCB0byByZXBvcnQgaXRzZWxmIHN0b3BwZWQgKi8KJiM0MzsJaWYgKHByaXYtJmd0O2h3LSZndDtkbWEtJmd0O3J4X2RtYV9zdG9wcGVkKQomIzQzOwkJZm9yIChjaGFuID0gMDsgY2hhbiAmbHQ7IHJ4X2NoYW5uZWxzX2NvdW50OyBjaGFuJiM0MzsmIzQzOykKJiM0MzsJCQlzdG1tYWNfcnhfZG1hX3N0b3BwZWQocHJpdiwgcHJpdi0mZ3Q7aW9hZGRyLCBjaGFuKTsKJiM0Mzt9CiYjNDM7CiAvKioKICAqICBzdG1tYWNfZG1hX29wZXJhdGlvbl9tb2RlIC0gSFcgRE1BIG9wZXJhdGlvbiBtb2RlCiAgKiAgQHByaXY6IGRyaXZlciBwcml2YXRlIHN0cnVjdHVyZQpAQCAtMzY4NSw5ICYjNDM7MzczMSw2IEBAIHN0YXRpYyBpbnQgc3RtbWFjX2h3X3NldHVwKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiAJCXByaXYtJmd0O2h3LSZndDtyeF9jc3VtID0gMDsKIAl9CiAKLQkvKiBFbmFibGUgdGhlIE1BQyBSeC9UeCAqLwotCXN0bW1hY19tYWNfc2V0KHByaXYsIHByaXYtJmd0O2lvYWRkciwgdHJ1ZSk7Ci0KIAkvKiBTZXQgdGhlIEhXIERNQSBtb2RlIGFuZCB0aGUgQ09FICovCiAJc3RtbWFjX2RtYV9vcGVyYXRpb25fbW9kZShwcml2KTsKIApAQCAtMzc0Myw2ICYjNDM7Mzc4Niw5IEBAIHN0YXRpYyBpbnQgc3RtbWFjX2h3X3NldHVwKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiAJLyogU3RhcnQgdGhlIGJhbGwgcm9sbGluZy4uLiAqLwogCXN0bW1hY19zdGFydF9hbGxfZG1hKHByaXYpOwogCiYjNDM7CS8qIEVuYWJsZSB0aGUgTUFDIFJ4L1R4ICovCiYjNDM7CXN0bW1hY19tYWNfc2V0KHByaXYsIHByaXYtJmd0O2lvYWRkciwgdHJ1ZSk7CiYjNDM7CiAJcGh5bGlua19yeF9jbGtfc3RvcF9ibG9jayhwcml2LSZndDtwaHlsaW5rKTsKIAlzdG1tYWNfc2V0X2h3X3ZsYW5fbW9kZShwcml2LCBwcml2LSZndDtodyk7CiAJcGh5bGlua19yeF9jbGtfc3RvcF91bmJsb2NrKHByaXYtJmd0O3BoeWxpbmspOwpAQCAtNDI0MCw5ICYjNDM7NDI4Niw2IEBAIHN0YXRpYyB2b2lkIF9fc3RtbWFjX3JlbGVhc2Uoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIAlzdHJ1Y3Qgc3RtbWFjX3ByaXYgKnByaXYgPSBuZXRkZXZfcHJpdihkZXYpOwogCXU4IGNoYW47CiAKLQkvKiBTdG9wIGFuZCBkaXNjb25uZWN0IHRoZSBQSFkgKi8KLQlwaHlsaW5rX3N0b3AocHJpdi0mZ3Q7cGh5bGluayk7Ci0KIAlzdG1tYWNfZGlzYWJsZV9hbGxfcXVldWVzKHByaXYpOwogCiAJZm9yIChjaGFuID0gMDsgY2hhbiAmbHQ7IHByaXYtJmd0O3BsYXQtJmd0O3R4X3F1ZXVlc190b191c2U7IGNoYW4mIzQzOyYjNDM7KQpAQCAtNDI1Myw4ICYjNDM7NDI5NiwxMSBAQCBzdGF0aWMgdm9pZCBfX3N0bW1hY19yZWxlYXNlKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiAJLyogRnJlZSB0aGUgSVJRIGxpbmVzICovCiAJc3RtbWFjX2ZyZWVfaXJxKGRldiwgUkVRX0lSUV9FUlJfQUxMLCAwKTsKIAotCS8qIFN0b3AgVFgvUlggRE1BIGFuZCBjbGVhciB0aGUgZGVzY3JpcHRvcnMgKi8KLQlzdG1tYWNfc3RvcF9hbGxfZG1hKHByaXYpOwomIzQzOwkvKiBIYXMgdG8gcnVuIGJlZm9yZSBtYWNfbGlua19kb3duKCkgZGlzYWJsZXMgdGhlIE1BQy4gKi8KJiM0MzsJc3RtbWFjX2RhdGFwYXRoX3RlYXJkb3duKHByaXYpOwomIzQzOwomIzQzOwkvKiBTdG9wIGFuZCBkaXNjb25uZWN0IHRoZSBQSFkgKi8KJiM0MzsJcGh5bGlua19zdG9wKHByaXYtJmd0O3BoeWxpbmspOwogCiAJLyogUmVsZWFzZSBhbmQgZnJlZSB0aGUgUngvVHggcmVzb3VyY2VzICovCiAJZnJlZV9kbWFfZGVzY19yZXNvdXJjZXMocHJpdiwgJmFtcDtwcml2LSZndDtkbWFfY29uZik7CkBAIC03MTA0LDE1ICYjNDM7NzE1MCwxMiBAQCB2b2lkIHN0bW1hY194ZHBfcmVsZWFzZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQogCS8qIEZyZWUgdGhlIElSUSBsaW5lcyAqLwogCXN0bW1hY19mcmVlX2lycShkZXYsIFJFUV9JUlFfRVJSX0FMTCwgMCk7CiAKLQkvKiBTdG9wIFRYL1JYIERNQSBjaGFubmVscyAqLwotCXN0bW1hY19zdG9wX2FsbF9kbWEocHJpdik7CiYjNDM7CS8qIFN0b3AgdGhlIE1BQyBhbmQgdGhlIFRYL1JYIERNQSBjaGFubmVscyAqLwomIzQzOwlzdG1tYWNfZGF0YXBhdGhfdGVhcmRvd24ocHJpdik7CiAKIAkvKiBSZWxlYXNlIGFuZCBmcmVlIHRoZSBSeC9UeCByZXNvdXJjZXMgKi8KIAlmcmVlX2RtYV9kZXNjX3Jlc291cmNlcyhwcml2LCAmYW1wO3ByaXYtJmd0O2RtYV9jb25mKTsKIAotCS8qIERpc2FibGUgdGhlIE1BQyBSeC9UeCAqLwotCXN0bW1hY19tYWNfc2V0KHByaXYsIHByaXYtJmd0O2lvYWRkciwgZmFsc2UpOwotCiAJLyogc2V0IHRyYW5zX3N0YXJ0IHNvIHdlIGRvbiYjMzk7dCBnZXQgc3B1cmlvdXMKIAkgKiB3YXRjaGRvZ3MgZHVyaW5nIHJlc2V0CiAJICovCkBAIC03MTg0LDEyICYjNDM7NzIyNywxMiBAQCBpbnQgc3RtbWFjX3hkcF9vcGVuKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiAJCWhydGltZXJfc2V0dXAoJmFtcDt0eF9xLSZndDt0eHRpbWVyLCBzdG1tYWNfdHhfdGltZXIsIENMT0NLX01PTk9UT05JQywgSFJUSU1FUl9NT0RFX1JFTCk7CiAJfQogCi0JLyogRW5hYmxlIHRoZSBNQUMgUngvVHggKi8KLQlzdG1tYWNfbWFjX3NldChwcml2LCBwcml2LSZndDtpb2FkZHIsIHRydWUpOwotCiAJLyogU3RhcnQgUnggJmFtcDsgVHggRE1BIENoYW5uZWxzICovCiAJc3RtbWFjX3N0YXJ0X2FsbF9kbWEocHJpdik7CiAKJiM0MzsJLyogRW5hYmxlIHRoZSBNQUMgUngvVHggKi8KJiM0MzsJc3RtbWFjX21hY19zZXQocHJpdiwgcHJpdi0mZ3Q7aW9hZGRyLCB0cnVlKTsKJiM0MzsKIAlyZXQgPSBzdG1tYWNfcmVxdWVzdF9pcnEoZGV2KTsKIAlpZiAocmV0KQogCQlnb3RvIGlycV9lcnJvcjsKQEAgLTgxOTAsMTcgJiM0Mzs4MjMzLDE1IEBAIGludCBzdG1tYWNfc3VzcGVuZChzdHJ1Y3QgZGV2aWNlICpkZXYpCiAJCXRpbWVyX2RlbGV0ZV9zeW5jKCZhbXA7cHJpdi0mZ3Q7ZWVlX2N0cmxfdGltZXIpOwogCX0KIAotCS8qIFN0b3AgVFgvUlggRE1BICovCi0Jc3RtbWFjX3N0b3BfYWxsX2RtYShwcml2KTsKLQotCXN0bW1hY19sZWdhY3lfc2VyZGVzX3Bvd2VyX2Rvd24ocHJpdik7Ci0KIAkvKiBFbmFibGUgUG93ZXIgZG93biBtb2RlIGJ5IHByb2dyYW1taW5nIHRoZSBQTVQgcmVncyAqLwogCWlmIChwcml2LSZndDt3b2xvcHRzKSB7CiYjNDM7CQlzdG1tYWNfc3RvcF9hbGxfZG1hKHByaXYpOwomIzQzOwkJc3RtbWFjX2xlZ2FjeV9zZXJkZXNfcG93ZXJfZG93bihwcml2KTsKIAkJc3RtbWFjX3BtdChwcml2LCBwcml2LSZndDtodywgcHJpdi0mZ3Q7d29sb3B0cyk7CiAJCXByaXYtJmd0O2lycV93YWtlID0gMTsKIAl9IGVsc2UgewotCQlzdG1tYWNfbWFjX3NldChwcml2LCBwcml2LSZndDtpb2FkZHIsIGZhbHNlKTsKJiM0MzsJCXN0bW1hY19kYXRhcGF0aF90ZWFyZG93bihwcml2KTsKJiM0MzsJCXN0bW1hY19sZWdhY3lfc2VyZGVzX3Bvd2VyX2Rvd24ocHJpdik7CiAJCXBpbmN0cmxfcG1fc2VsZWN0X3NsZWVwX3N0YXRlKHByaXYtJmd0O2RldmljZSk7CiAJfQogCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYxLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNCAwNjozODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA3MzgxCgkJCQkJCQlvdXRwdXQ6IDE2NQoJCQkJCQkJdGhvdWdodHM6IDM2NwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBc3Nlc3NtZW50IG9mIHRoZSBTVE1NQUMgRHJpdmVyIFBhdGNoKioKCkFscmlnaHQsIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIFRoaXMgcGF0Y2ggaXMgZm9jdXNlZCBzb2xlbHkgb24gdGhlIGludGVybmFsIHdvcmtpbmdzIG9mIHRoZSBgc3RtbWFjYCBkcml2ZXIsIHNwZWNpZmljYWxseSB0aGUgYGR3eGdtYWMyYCB2YXJpYW50LiBJdCYjMzk7cyBhYm91dCBlbnN1cmluZyBhIHByb3Blciwgb3JkZXJlZCBzaHV0ZG93biBzZXF1ZW5jZSBmb3IgdGhlIGRhdGFwYXRoLiBJIHNlZSB0aGF0IHRoZXkmIzM5O3ZlIGFkZGVkIHRoZXNlIG5ldyBwb2xsaW5nIGZ1bmN0aW9uczogYGR3eGdtYWMyX3R4X2RtYV9zdG9wcGVkYCwgYGR3eGdtYWMyX3R4X210bF9kcmFpbmAsIGBkd3hnbWFjMl9yeF9tdGxfZHJhaW5gLCBhbmQgYGR3eGdtYWMyX3J4X2RtYV9zdG9wcGVkYC4gVGhlc2Ugd2lsbCBwb2xsIGhhcmR3YXJlIHJlZ2lzdGVycyB0byBjaGVjayB0aGUgc3RhdGUgb2YgdGhlIHN5c3RlbS4KClRoZSBjb3JlIG9mIHRoZSBjaGFuZ2UgbGllcyBpbiB0aGUgYHN0bW1hY19kYXRhcGF0aF90ZWFyZG93bmAgZnVuY3Rpb24sIHdoaWNoIG9yY2hlc3RyYXRlcyB0aGUgY29udHJvbGxlZCBzaHV0ZG93bjogc3RvcHBpbmcgVFggRE1BLCB3YWl0aW5nIGZvciBjb21wbGV0aW9uLCBkcmFpbmluZyB0aGUgTVRMIFRYLCBkaXNhYmxpbmcgTUFDIFRYL1JYLCBkcmFpbmluZyB0aGUgTVRMIFJYLCBzdG9wcGluZyBSWCBETUEsIGFuZCB3YWl0aW5nIGFnYWluLiBJdCBpcyBhbHNvIG1vZGlmeWluZyB0aGUgb3JkZXIgb2YgZW5hYmxpbmcgYW5kIGRpc2FibGluZyBNQUMgYW5kIERNQSBpbiBzZXZlcmFsIGtleSBmdW5jdGlvbnMuIE5vdGhpbmcgcmV2b2x1dGlvbmFyeSBoZXJlLCBpdCBzZWVtcy4KCkdpdmVuIG15IHVuZGVyc3RhbmRpbmcgb2YgbmV0d29ya2luZyBzdGFja3MsIGl0JiMzOTtzIHByZXR0eSBjbGVhciB0aGlzIGlzIHB1cmVseSBhYm91dCBoYXJkd2FyZSBjb250cm9sIGZsb3csIHdoaWNoIGlzIHdoZXJlIHRoaW5ncyBnZXQgaW50ZXJlc3RpbmcuIE5vIG5ldyBkYXRhIHN0cnVjdHVyZXMgYXJlIGJlaW5nIGludHJvZHVjZWQgdGhhdCBhcmUgc2VudCB0byB1c2VyIHNwYWNlLCBubyBidWZmZXIgYWxsb2NhdGlvbnMsIG5vIG1lbW9yeS1yZWxhdGVkIGlzc3Vlcy4gVGhlIGZ1bmN0aW9ucyBzaW1wbHkgY2FsbCBgcmVhZGxfcG9sbF90aW1lb3V0YCwgd2l0aCBgdmFsdWVgIGluaXRpYWxpemVkIHByb3Blcmx5IHdpdGhpbi4gRnJvbSBteSBleHBlcnRpc2UsIHRoYXQgbWVhbnMgdGhlcmUgYXJlIG5vIGNvbmNlcm5zIGFib3V0IGluZm8tbGVha3MuCgpJJiMzOTt2ZSBjYXJlZnVsbHkgY29uc2lkZXJlZCB0aGUgcG90ZW50aWFsIGZvciB1bmluaXRpYWxpemVkIG1lbW9yeSBpc3N1ZXMsIGFuZCBJIGFtIGNvbmZpZGVudCB0aGF0IHRoZXJlIGFyZSBub25lIGJhc2VkIG9uIHRoZSBwYXRjaCBkZXNjcmlwdGlvbiBhbmQgbXkgYW5hbHlzaXMuIEdpdmVuIHRoaXMsIEkgY2FuIGNvbmZpZGVudGx5IHNldCBgTmVlZHNLTVNBTj1mYWxzZWAuIFRoaXMgb25lJiMzOTtzIGNsZWFuLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYyLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNCAwNjozODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgaGFyZHdhcmUgaW5pdGlhbGl6YXRpb24gYW5kIHRlYXJkb3duIHNlcXVlbmNlcyBpbiB0aGUgc3RtbWFjIGRyaXZlciwgaW50cm9kdWNpbmcgYW4gb3JkZXJlZCBkYXRhcGF0aCB0ZWFyZG93biB0byBwcm9wZXJseSBzdG9wIERNQSBhbmQgTUFDIG9wZXJhdGlvbnMuIEl0IGFkZHMgZnVuY3Rpb25zIHRvIHBvbGwgaGFyZHdhcmUgcmVnaXN0ZXJzIGZvciBzcGVjaWZpYyBzdGF0ZXMgKGUuZy4sIERNQSBzdG9wcGVkLCBNVEwgcXVldWVzIGRyYWluZWQpIHVzaW5nIGByZWFkbF9wb2xsX3RpbWVvdXRgLiBUaGVzZSBjaGFuZ2VzIGFyZSBwdXJlbHkgcmVsYXRlZCB0byBoYXJkd2FyZSBjb250cm9sIGZsb3cgYW5kIGRvIG5vdCBpbnRyb2R1Y2UgYW55IG5ldyBkYXRhIHN0cnVjdHVyZXMsIGJ1ZmZlciBhbGxvY2F0aW9ucywgb3IgZGF0YSBjb3BpZXMgdG8gdXNlciBzcGFjZS4gVGhlcmUgaXMgbm8gcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSBiZWluZyBleHBvc2VkIG9yIHVzZWQgaW4gY29udHJvbCBmbG93LiBTdGFuZGFyZCBLQVNBTiBhbmQgb3RoZXIgYnVnIGRldGVjdG9ycyBhcmUgc3VmZmljaWVudCB0byBjYXRjaCBhbnkgcG90ZW50aWFsIG1lbW9yeSBjb3JydXB0aW9uIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgdGhhdCBtaWdodCBhcmlzZSBmcm9tIGRyaXZlciB0ZWFyZG93biBpc3N1ZXMuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgaGFyZHdhcmUgaW5pdGlhbGl6YXRpb24gYW5kIHRlYXJkb3duIHNlcXVlbmNlcyBpbiB0aGUgc3RtbWFjIGRyaXZlciwgaW50cm9kdWNpbmcgYW4gb3JkZXJlZCBkYXRhcGF0aCB0ZWFyZG93biB0byBwcm9wZXJseSBzdG9wIERNQSBhbmQgTUFDIG9wZXJhdGlvbnMuIEl0IGFkZHMgZnVuY3Rpb25zIHRvIHBvbGwgaGFyZHdhcmUgcmVnaXN0ZXJzIGZvciBzcGVjaWZpYyBzdGF0ZXMgKGUuZy4sIERNQSBzdG9wcGVkLCBNVEwgcXVldWVzIGRyYWluZWQpIHVzaW5nIGByZWFkbF9wb2xsX3RpbWVvdXRgLiBUaGVzZSBjaGFuZ2VzIGFyZSBwdXJlbHkgcmVsYXRlZCB0byBoYXJkd2FyZSBjb250cm9sIGZsb3cgYW5kIGRvIG5vdCBpbnRyb2R1Y2UgYW55IG5ldyBkYXRhIHN0cnVjdHVyZXMsIGJ1ZmZlciBhbGxvY2F0aW9ucywgb3IgZGF0YSBjb3BpZXMgdG8gdXNlciBzcGFjZS4gVGhlcmUgaXMgbm8gcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSBiZWluZyBleHBvc2VkIG9yIHVzZWQgaW4gY29udHJvbCBmbG93LiBTdGFuZGFyZCBLQVNBTiBhbmQgb3RoZXIgYnVnIGRldGVjdG9ycyBhcmUgc3VmZmljaWVudCB0byBjYXRjaCBhbnkgcG90ZW50aWFsIG1lbW9yeSBjb3JydXB0aW9uIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgdGhhdCBtaWdodCBhcmlzZSBmcm9tIGRyaXZlciB0ZWFyZG93biBpc3N1ZXMuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE0VDA2OjM1OjMzLjk3MzgyOTkyOFoiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIwNDAyNTM4NjgzNSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJTVE1NQUNfRVRIXCIsXG4gICAgXCJTVE1NQUNfUENJXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwic3RtbWFjX2R2cl9yZW1vdmVcIixcbiAgICBcInN0bW1hY19zdXNwZW5kXCIsXG4gICAgXCJzdG1tYWNfcmVzdW1lXCIsXG4gICAgXCJzdG1tYWNfeGRwX29wZW5cIixcbiAgICBcInN0bW1hY194ZHBfcmVsZWFzZVwiLFxuICAgIFwic3RtbWFjX3JlaW5pdF9xdWV1ZXNcIixcbiAgICBcInN0bW1hY19yZWluaXRfcmluZ3BhcmFtXCJcbiAgXSxcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgaGFyZHdhcmUgaW5pdGlhbGl6YXRpb24gYW5kIHRlYXJkb3duIHNlcXVlbmNlcyBpbiB0aGUgc3RtbWFjIGRyaXZlciwgaW50cm9kdWNpbmcgYW4gb3JkZXJlZCBkYXRhcGF0aCB0ZWFyZG93biB0byBwcm9wZXJseSBzdG9wIERNQSBhbmQgTUFDIG9wZXJhdGlvbnMuIEl0IGFkZHMgZnVuY3Rpb25zIHRvIHBvbGwgaGFyZHdhcmUgcmVnaXN0ZXJzIGZvciBzcGVjaWZpYyBzdGF0ZXMgKGUuZy4sIERNQSBzdG9wcGVkLCBNVEwgcXVldWVzIGRyYWluZWQpIHVzaW5nIGByZWFkbF9wb2xsX3RpbWVvdXRgLiBUaGVzZSBjaGFuZ2VzIGFyZSBwdXJlbHkgcmVsYXRlZCB0byBoYXJkd2FyZSBjb250cm9sIGZsb3cgYW5kIGRvIG5vdCBpbnRyb2R1Y2UgYW55IG5ldyBkYXRhIHN0cnVjdHVyZXMsIGJ1ZmZlciBhbGxvY2F0aW9ucywgb3IgZGF0YSBjb3BpZXMgdG8gdXNlciBzcGFjZS4gVGhlcmUgaXMgbm8gcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSBiZWluZyBleHBvc2VkIG9yIHVzZWQgaW4gY29udHJvbCBmbG93LiBTdGFuZGFyZCBLQVNBTiBhbmQgb3RoZXIgYnVnIGRldGVjdG9ycyBhcmUgc3VmZmljaWVudCB0byBjYXRjaCBhbnkgcG90ZW50aWFsIG1lbW9yeSBjb3JydXB0aW9uIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgdGhhdCBtaWdodCBhcmlzZSBmcm9tIGRyaXZlciB0ZWFyZG93biBpc3N1ZXMuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIG5ldyBvcmRlcmVkIGRhdGFwYXRoIHRlYXJkb3duIHNlcXVlbmNlIGZvciBhbGwgc3RtbWFjIGRldmljZXMsIGNoYW5naW5nIHRoZSBvcmRlciBvZiBETUEgc3RvcCBhbmQgTUFDIGRpc2FibGUgb3BlcmF0aW9ucy4gSXQgYWxzbyBzd2FwcyB0aGUgb3JkZXIgb2YgTUFDIGVuYWJsZSBhbmQgRE1BIHN0YXJ0IGluIHRoZSBzZXR1cCBwYXRocy4gVGhlc2UgYXJlIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUgY29yZSBkcml2ZXIgbG9naWMgcmVhY2hhYmxlIHZpYSBQQ0kgZW11bGF0aW9uLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xNFQwNjozNTozMy45NzM4MzUxNDhaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjM3NzYyMDM5MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IGEwOGZmMzRjYjJjZDJkMjljMWUyNjE1ZGQxNDQ4MGNjYjJkODcwZmJcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIEZyaSBBdWcgMTQgMDY6MzU6MzIgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHd4Z21hYzIuaCBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3eGdtYWMyLmhcXG5pbmRleCBmOGFiMzQ3ZjdiNWI5Li41MGY5Y2NkNGE5YzQ2IDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3eGdtYWMyLmhcXG4rKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd3hnbWFjMi5oXFxuQEAgLTI5MSw2ICsyOTEsMTAgQEBcXG4gI2RlZmluZSBYR01BQ19UVENcXHRcXHRcXHRHRU5NQVNLKDYsIDQpXFxuICNkZWZpbmUgWEdNQUNfVFhRRU5cXHRcXHRcXHRHRU5NQVNLKDMsIDIpXFxuICNkZWZpbmUgWEdNQUNfVFNGXFx0XFx0XFx0QklUKDEpXFxuKyNkZWZpbmUgWEdNQUNfTVRMX1RYUV9ERUJVRyh4KVxcdFxcdCgweDAwMDAxMTA4ICsgKDB4ODAgKiAoeCkpKVxcbisjZGVmaW5lIFhHTUFDX1RYUVNUU1xcdFxcdFxcdEJJVCg0KVxcbisjZGVmaW5lIFhHTUFDX1RSQ1NUU1xcdFxcdFxcdEdFTk1BU0soMiwgMSlcXG4rI2RlZmluZSBYR01BQ19UUkNTVFNfUkVBRFxcdFxcdDB4MVxcbiAjZGVmaW5lIFhHTUFDX01UTF9UQ3hfRVRTX0NPTlRST0woeClcXHQoMHgwMDAwMTExMCArICgweDgwICogKHgpKSlcXG4gI2RlZmluZSBYR01BQ19NVExfVEN4X1FVQU5UVU1fV0VJR0hUKHgpXFx0KDB4MDAwMDExMTggKyAoMHg4MCAqICh4KSkpXFxuICNkZWZpbmUgWEdNQUNfTVRMX1RDeF9TRU5EU0xPUEUoeClcXHQoMHgwMDAwMTExYyArICgweDgwICogKHgpKSlcXG5AQCAtMzA2LDYgKzMxMCw5IEBAXFxuICNkZWZpbmUgWEdNQUNfRUhGQ1xcdFxcdFxcdEJJVCg3KVxcbiAjZGVmaW5lIFhHTUFDX1JTRlxcdFxcdFxcdEJJVCg1KVxcbiAjZGVmaW5lIFhHTUFDX1JUQ1xcdFxcdFxcdEdFTk1BU0soMSwgMClcXG4rI2RlZmluZSBYR01BQ19NVExfUlhRX0RFQlVHKHgpXFx0XFx0KDB4MDAwMDExNDggKyAoMHg4MCAqICh4KSkpXFxuKyNkZWZpbmUgWEdNQUNfUFJYUVxcdFxcdFxcdEdFTk1BU0soMjksIDE2KVxcbisjZGVmaW5lIFhHTUFDX1JYUVNUU1xcdFxcdFxcdEdFTk1BU0soNSwgNClcXG4gI2RlZmluZSBYR01BQ19NVExfUlhRX0ZMT1dfQ09OVFJPTCh4KVxcdCgweDAwMDAxMTUwICsgKDB4ODAgKiAoeCkpKVxcbiAjZGVmaW5lIFhHTUFDX1JGRFxcdFxcdFxcdEdFTk1BU0soMzEsIDE3KVxcbiAjZGVmaW5lIFhHTUFDX1JGQVxcdFxcdFxcdEdFTk1BU0soMTUsIDEpXFxuQEAgLTM5MSw2ICszOTgsNyBAQFxcbiAjZGVmaW5lIFhHTUFDX05JU1xcdFxcdFxcdEJJVCgxNSlcXG4gI2RlZmluZSBYR01BQ19BSVNcXHRcXHRcXHRCSVQoMTQpXFxuICNkZWZpbmUgWEdNQUNfRkJFXFx0XFx0XFx0QklUKDEyKVxcbisjZGVmaW5lIFhHTUFDX1JQU1xcdFxcdFxcdEJJVCg4KVxcbiAjZGVmaW5lIFhHTUFDX1JCVVxcdFxcdFxcdEJJVCg3KVxcbiAjZGVmaW5lIFhHTUFDX1JJXFx0XFx0XFx0QklUKDYpXFxuICNkZWZpbmUgWEdNQUNfVEJVXFx0XFx0XFx0QklUKDIpXFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3eGdtYWMyX2RtYS5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHd4Z21hYzJfZG1hLmNcXG5pbmRleCBmZjgzODU4ZWJjMWYzLi5iYTRmNTM1ZmI5ZWI0IDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3eGdtYWMyX2RtYS5jXFxuKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHd4Z21hYzJfZG1hLmNcXG5AQCAtNCw2ICs0LDcgQEBcXG4gICogc3RtbWFjIFhHTUFDIHN1cHBvcnQuXFxuICAqL1xcbiBcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2JpdGZpZWxkLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9pb3BvbGwuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFxcInN0bW1hYy5oXFxcIlxcbiAjaW5jbHVkZSBcXFwiZHd4Z21hYzIuaFxcXCJcXG5AQCAtMjYxLDEzICsyNjIsMTIgQEAgc3RhdGljIHZvaWQgZHd4Z21hYzJfZG1hX3N0YXJ0X3R4KHN0cnVjdCBzdG1tYWNfcHJpdiAqcHJpdixcXG4ge1xcbiBcXHR1MzIgdmFsdWU7XFxuIFxcbitcXHQvKiBUUFMgaXMgbGF0Y2hlZCBvbmNlIHNldCwgc28gY2xlYXIgaXQgb24gZXZlcnkgVHggRE1BIHN0YXJ0LiAqL1xcbitcXHR3cml0ZWwoWEdNQUNfVFBTLCBpb2FkZHIgKyBYR01BQ19ETUFfQ0hfU1RBVFVTKGNoYW4pKTtcXG4rXFxuIFxcdHZhbHVlID0gcmVhZGwoaW9hZGRyICsgWEdNQUNfRE1BX0NIX1RYX0NPTlRST0woY2hhbikpO1xcbiBcXHR2YWx1ZSB8PSBYR01BQ19UWFNUO1xcbiBcXHR3cml0ZWwodmFsdWUsIGlvYWRkciArIFhHTUFDX0RNQV9DSF9UWF9DT05UUk9MKGNoYW4pKTtcXG4tXFxuLVxcdHZhbHVlID0gcmVhZGwoaW9hZGRyICsgWEdNQUNfVFhfQ09ORklHKTtcXG4tXFx0dmFsdWUgfD0gWEdNQUNfQ09ORklHX1RFO1xcbi1cXHR3cml0ZWwodmFsdWUsIGlvYWRkciArIFhHTUFDX1RYX0NPTkZJRyk7XFxuIH1cXG4gXFxuIHN0YXRpYyB2b2lkIGR3eGdtYWMyX2RtYV9zdG9wX3R4KHN0cnVjdCBzdG1tYWNfcHJpdiAqcHJpdiwgdm9pZCBfX2lvbWVtICppb2FkZHIsXFxuQEAgLTI3OCwxMCArMjc4LDYgQEAgc3RhdGljIHZvaWQgZHd4Z21hYzJfZG1hX3N0b3BfdHgoc3RydWN0IHN0bW1hY19wcml2ICpwcml2LCB2b2lkIF9faW9tZW0gKmlvYWRkcixcXG4gXFx0dmFsdWUgPSByZWFkbChpb2FkZHIgKyBYR01BQ19ETUFfQ0hfVFhfQ09OVFJPTChjaGFuKSk7XFxuIFxcdHZhbHVlIFxcdTAwMjY9IH5YR01BQ19UWFNUO1xcbiBcXHR3cml0ZWwodmFsdWUsIGlvYWRkciArIFhHTUFDX0RNQV9DSF9UWF9DT05UUk9MKGNoYW4pKTtcXG4tXFxuLVxcdHZhbHVlID0gcmVhZGwoaW9hZGRyICsgWEdNQUNfVFhfQ09ORklHKTtcXG4tXFx0dmFsdWUgXFx1MDAyNj0gflhHTUFDX0NPTkZJR19URTtcXG4tXFx0d3JpdGVsKHZhbHVlLCBpb2FkZHIgKyBYR01BQ19UWF9DT05GSUcpO1xcbiB9XFxuIFxcbiBzdGF0aWMgdm9pZCBkd3hnbWFjMl9kbWFfc3RhcnRfcngoc3RydWN0IHN0bW1hY19wcml2ICpwcml2LFxcbkBAIC0yODksMTMgKzI4NSwxMiBAQCBzdGF0aWMgdm9pZCBkd3hnbWFjMl9kbWFfc3RhcnRfcngoc3RydWN0IHN0bW1hY19wcml2ICpwcml2LFxcbiB7XFxuIFxcdHUzMiB2YWx1ZTtcXG4gXFxuK1xcdC8qIFJQUyBpcyBsYXRjaGVkIG9uY2Ugc2V0LCBzbyBjbGVhciBpdCBvbiBldmVyeSBSeCBETUEgc3RhcnQuICovXFxuK1xcdHdyaXRlbChYR01BQ19SUFMsIGlvYWRkciArIFhHTUFDX0RNQV9DSF9TVEFUVVMoY2hhbikpO1xcbitcXG4gXFx0dmFsdWUgPSByZWFkbChpb2FkZHIgKyBYR01BQ19ETUFfQ0hfUlhfQ09OVFJPTChjaGFuKSk7XFxuIFxcdHZhbHVlIHw9IFhHTUFDX1JYU1Q7XFxuIFxcdHdyaXRlbCh2YWx1ZSwgaW9hZGRyICsgWEdNQUNfRE1BX0NIX1JYX0NPTlRST0woY2hhbikpO1xcbi1cXG4tXFx0dmFsdWUgPSByZWFkbChpb2FkZHIgKyBYR01BQ19SWF9DT05GSUcpO1xcbi1cXHR2YWx1ZSB8PSBYR01BQ19DT05GSUdfUkU7XFxuLVxcdHdyaXRlbCh2YWx1ZSwgaW9hZGRyICsgWEdNQUNfUlhfQ09ORklHKTtcXG4gfVxcbiBcXG4gc3RhdGljIHZvaWQgZHd4Z21hYzJfZG1hX3N0b3Bfcngoc3RydWN0IHN0bW1hY19wcml2ICpwcml2LCB2b2lkIF9faW9tZW0gKmlvYWRkcixcXG5AQCAtNTkyLDYgKzU4Nyw3NyBAQCBzdGF0aWMgaW50IGR3eGdtYWMyX2VuYWJsZV90YnMoc3RydWN0IHN0bW1hY19wcml2ICpwcml2LCB2b2lkIF9faW9tZW0gKmlvYWRkcixcXG4gXFx0cmV0dXJuIDA7XFxuIH1cXG4gXFxuK3N0YXRpYyBpbnQgZHd4Z21hYzJfdHhfZG1hX3N0b3BwZWQoc3RydWN0IHN0bW1hY19wcml2ICpwcml2LFxcbitcXHRcXHRcXHRcXHQgICB2b2lkIF9faW9tZW0gKmlvYWRkciwgdTMyIGNoYW4pXFxuK3tcXG4rXFx0dTMyIHZhbHVlO1xcbitcXHRpbnQgcmV0O1xcbitcXG4rXFx0cmV0ID0gcmVhZGxfcG9sbF90aW1lb3V0KGlvYWRkciArIFhHTUFDX0RNQV9DSF9TVEFUVVMoY2hhbiksIHZhbHVlLFxcbitcXHRcXHRcXHRcXHQgdmFsdWUgXFx1MDAyNiBYR01BQ19UUFMsIDEwMCwgMTAwMDApO1xcbitcXHRpZiAocmV0KVxcbitcXHRcXHRuZXRkZXZfd2Fybihwcml2LVxcdTAwM2VkZXYsIFxcXCJUeCBETUEgY2hhbm5lbCAldSBzdG9wIHRpbWVvdXRcXFxcblxcXCIsXFxuK1xcdFxcdFxcdCAgICBjaGFuKTtcXG4rXFxuK1xcdHJldHVybiByZXQ7XFxuK31cXG4rXFxuK3N0YXRpYyBpbnQgZHd4Z21hYzJfdHhfbXRsX2RyYWluKHN0cnVjdCBzdG1tYWNfcHJpdiAqcHJpdixcXG4rXFx0XFx0XFx0XFx0IHZvaWQgX19pb21lbSAqaW9hZGRyLCB1MzIgcXVldWUpXFxuK3tcXG4rXFx0dTMyIHZhbHVlO1xcbitcXHRpbnQgcmV0O1xcbitcXG4rXFx0LyogV2FpdCB1bnRpbCB0aGUgcXVldWUgaXMgZW1wdHkgYW5kIGl0cyByZWFkIGNvbnRyb2xsZXIgaXMgbm8gbG9uZ2VyXFxuK1xcdCAqIHB1bGxpbmcgYSBmcmFtZSBvdXQgdG93YXJkcyB0aGUgTUFDLlxcbitcXHQgKi9cXG4rXFx0cmV0ID0gcmVhZGxfcG9sbF90aW1lb3V0KGlvYWRkciArIFhHTUFDX01UTF9UWFFfREVCVUcocXVldWUpLCB2YWx1ZSxcXG4rXFx0XFx0XFx0XFx0ICEodmFsdWUgXFx1MDAyNiBYR01BQ19UWFFTVFMpIFxcdTAwMjZcXHUwMDI2XFxuK1xcdFxcdFxcdFxcdCBGSUVMRF9HRVQoWEdNQUNfVFJDU1RTLCB2YWx1ZSkgIT1cXG4rXFx0XFx0XFx0XFx0IFhHTUFDX1RSQ1NUU19SRUFELFxcbitcXHRcXHRcXHRcXHQgMTAwLCAxMDAwMCk7XFxuK1xcdGlmIChyZXQpXFxuK1xcdFxcdG5ldGRldl93YXJuKHByaXYtXFx1MDAzZWRldiwgXFxcIk1UTCBUeCBxdWV1ZSAldSBkcmFpbiB0aW1lb3V0XFxcXG5cXFwiLFxcbitcXHRcXHRcXHQgICAgcXVldWUpO1xcbitcXG4rXFx0cmV0dXJuIHJldDtcXG4rfVxcbitcXG4rc3RhdGljIGludCBkd3hnbWFjMl9yeF9tdGxfZHJhaW4oc3RydWN0IHN0bW1hY19wcml2ICpwcml2LFxcbitcXHRcXHRcXHRcXHQgdm9pZCBfX2lvbWVtICppb2FkZHIsIHUzMiBxdWV1ZSlcXG4re1xcbitcXHR1MzIgdmFsdWU7XFxuK1xcdGludCByZXQ7XFxuK1xcbitcXHQvKiBXYWl0IHVudGlsIG5vIHBhY2tldCBpcyBsZWZ0IGluIHRoZSBxdWV1ZSBhbmQgdGhlIHF1ZXVlIHJlcG9ydHNcXG4rXFx0ICogaXRzZWxmIGVtcHR5LlxcbitcXHQgKi9cXG4rXFx0cmV0ID0gcmVhZGxfcG9sbF90aW1lb3V0KGlvYWRkciArIFhHTUFDX01UTF9SWFFfREVCVUcocXVldWUpLCB2YWx1ZSxcXG4rXFx0XFx0XFx0XFx0ICFGSUVMRF9HRVQoWEdNQUNfUFJYUSwgdmFsdWUpIFxcdTAwMjZcXHUwMDI2XFxuK1xcdFxcdFxcdFxcdCAhRklFTERfR0VUKFhHTUFDX1JYUVNUUywgdmFsdWUpLFxcbitcXHRcXHRcXHRcXHQgMTAwLCAxMDAwMCk7XFxuK1xcdGlmIChyZXQpXFxuK1xcdFxcdG5ldGRldl93YXJuKHByaXYtXFx1MDAzZWRldiwgXFxcIk1UTCBSeCBxdWV1ZSAldSBkcmFpbiB0aW1lb3V0XFxcXG5cXFwiLFxcbitcXHRcXHRcXHQgICAgcXVldWUpO1xcbitcXG4rXFx0cmV0dXJuIHJldDtcXG4rfVxcbitcXG4rc3RhdGljIGludCBkd3hnbWFjMl9yeF9kbWFfc3RvcHBlZChzdHJ1Y3Qgc3RtbWFjX3ByaXYgKnByaXYsXFxuK1xcdFxcdFxcdFxcdCAgIHZvaWQgX19pb21lbSAqaW9hZGRyLCB1MzIgY2hhbilcXG4re1xcbitcXHR1MzIgdmFsdWU7XFxuK1xcdGludCByZXQ7XFxuK1xcbitcXHRyZXQgPSByZWFkbF9wb2xsX3RpbWVvdXQoaW9hZGRyICsgWEdNQUNfRE1BX0NIX1NUQVRVUyhjaGFuKSwgdmFsdWUsXFxuK1xcdFxcdFxcdFxcdCB2YWx1ZSBcXHUwMDI2IFhHTUFDX1JQUywgMTAwLCAxMDAwMCk7XFxuK1xcdGlmIChyZXQpXFxuK1xcdFxcdG5ldGRldl93YXJuKHByaXYtXFx1MDAzZWRldiwgXFxcIlJ4IERNQSBjaGFubmVsICV1IHN0b3AgdGltZW91dFxcXFxuXFxcIixcXG4rXFx0XFx0XFx0ICAgIGNoYW4pO1xcbitcXG4rXFx0cmV0dXJuIHJldDtcXG4rfVxcbitcXG4gY29uc3Qgc3RydWN0IHN0bW1hY19kbWFfb3BzIGR3eGdtYWMyMTBfZG1hX29wcyA9IHtcXG4gXFx0LnJlc2V0ID0gZHd4Z21hYzJfZG1hX3Jlc2V0LFxcbiBcXHQuaW5pdCA9IGR3eGdtYWMyX2RtYV9pbml0LFxcbkBAIC02MjAsNCArNjg2LDggQEAgY29uc3Qgc3RydWN0IHN0bW1hY19kbWFfb3BzIGR3eGdtYWMyMTBfZG1hX29wcyA9IHtcXG4gXFx0LnNldF9iZnNpemUgPSBkd3hnbWFjMl9zZXRfYmZzaXplLFxcbiBcXHQuZW5hYmxlX3NwaCA9IGR3eGdtYWMyX2VuYWJsZV9zcGgsXFxuIFxcdC5lbmFibGVfdGJzID0gZHd4Z21hYzJfZW5hYmxlX3RicyxcXG4rXFx0LnR4X2RtYV9zdG9wcGVkID0gZHd4Z21hYzJfdHhfZG1hX3N0b3BwZWQsXFxuK1xcdC50eF9tdGxfZHJhaW4gPSBkd3hnbWFjMl90eF9tdGxfZHJhaW4sXFxuK1xcdC5yeF9tdGxfZHJhaW4gPSBkd3hnbWFjMl9yeF9tdGxfZHJhaW4sXFxuK1xcdC5yeF9kbWFfc3RvcHBlZCA9IGR3eGdtYWMyX3J4X2RtYV9zdG9wcGVkLFxcbiB9O1xcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9od2lmLmggYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9od2lmLmhcXG5pbmRleCAwNGRhZmVjMDIxYjRmLi44NmY0YWE4ODk2MWM3IDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2h3aWYuaFxcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2h3aWYuaFxcbkBAIC0yMzEsNiArMjMxLDE1IEBAIHN0cnVjdCBzdG1tYWNfZG1hX29wcyB7XFxuIFxcdFxcdFxcdCAgIGJvb2wgZW4sIHUzMiBjaGFuKTtcXG4gXFx0aW50ICgqZW5hYmxlX3Ricykoc3RydWN0IHN0bW1hY19wcml2ICpwcml2LCB2b2lkIF9faW9tZW0gKmlvYWRkcixcXG4gXFx0XFx0XFx0ICBib29sIGVuLCB1MzIgY2hhbik7XFxuK1xcdC8qIE9yZGVyZWQgZGF0YXBhdGggdGVhcmRvd24gKi9cXG4rXFx0aW50ICgqdHhfZG1hX3N0b3BwZWQpKHN0cnVjdCBzdG1tYWNfcHJpdiAqcHJpdiwgdm9pZCBfX2lvbWVtICppb2FkZHIsXFxuK1xcdFxcdFxcdCAgICAgIHUzMiBjaGFuKTtcXG4rXFx0aW50ICgqdHhfbXRsX2RyYWluKShzdHJ1Y3Qgc3RtbWFjX3ByaXYgKnByaXYsIHZvaWQgX19pb21lbSAqaW9hZGRyLFxcbitcXHRcXHRcXHQgICAgdTMyIHF1ZXVlKTtcXG4rXFx0aW50ICgqcnhfbXRsX2RyYWluKShzdHJ1Y3Qgc3RtbWFjX3ByaXYgKnByaXYsIHZvaWQgX19pb21lbSAqaW9hZGRyLFxcbitcXHRcXHRcXHQgICAgdTMyIHF1ZXVlKTtcXG4rXFx0aW50ICgqcnhfZG1hX3N0b3BwZWQpKHN0cnVjdCBzdG1tYWNfcHJpdiAqcHJpdiwgdm9pZCBfX2lvbWVtICppb2FkZHIsXFxuK1xcdFxcdFxcdCAgICAgIHUzMiBjaGFuKTtcXG4gfTtcXG4gXFxuICNkZWZpbmUgc3RtbWFjX2RtYV9pbml0KF9fcHJpdiwgX19hcmdzLi4uKSBcXFxcXFxuQEAgLTI5Myw2ICszMDIsMTQgQEAgc3RydWN0IHN0bW1hY19kbWFfb3BzIHtcXG4gXFx0c3RtbWFjX2RvX3ZvaWRfY2FsbGJhY2soX19wcml2LCBkbWEsIGVuYWJsZV9zcGgsIF9fcHJpdiwgX19hcmdzKVxcbiAjZGVmaW5lIHN0bW1hY19lbmFibGVfdGJzKF9fcHJpdiwgX19hcmdzLi4uKSBcXFxcXFxuIFxcdHN0bW1hY19kb19jYWxsYmFjayhfX3ByaXYsIGRtYSwgZW5hYmxlX3RicywgX19wcml2LCBfX2FyZ3MpXFxuKyNkZWZpbmUgc3RtbWFjX3R4X2RtYV9zdG9wcGVkKF9fcHJpdiwgX19hcmdzLi4uKSBcXFxcXFxuK1xcdHN0bW1hY19kb19jYWxsYmFjayhfX3ByaXYsIGRtYSwgdHhfZG1hX3N0b3BwZWQsIF9fcHJpdiwgX19hcmdzKVxcbisjZGVmaW5lIHN0bW1hY190eF9tdGxfZHJhaW4oX19wcml2LCBfX2FyZ3MuLi4pIFxcXFxcXG4rXFx0c3RtbWFjX2RvX2NhbGxiYWNrKF9fcHJpdiwgZG1hLCB0eF9tdGxfZHJhaW4sIF9fcHJpdiwgX19hcmdzKVxcbisjZGVmaW5lIHN0bW1hY19yeF9tdGxfZHJhaW4oX19wcml2LCBfX2FyZ3MuLi4pIFxcXFxcXG4rXFx0c3RtbWFjX2RvX2NhbGxiYWNrKF9fcHJpdiwgZG1hLCByeF9tdGxfZHJhaW4sIF9fcHJpdiwgX19hcmdzKVxcbisjZGVmaW5lIHN0bW1hY19yeF9kbWFfc3RvcHBlZChfX3ByaXYsIF9fYXJncy4uLikgXFxcXFxcbitcXHRzdG1tYWNfZG9fY2FsbGJhY2soX19wcml2LCBkbWEsIHJ4X2RtYV9zdG9wcGVkLCBfX3ByaXYsIF9fYXJncylcXG4gXFxuIHN0cnVjdCBtYWNfZGV2aWNlX2luZm87XFxuIHN0cnVjdCBuZXRfZGV2aWNlO1xcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfbWFpbi5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX21haW4uY1xcbmluZGV4IGIyYjdkMDI0MmRkM2MuLjljM2E4ZjEyMmI5NGYgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX21haW4uY1xcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19tYWluLmNcXG5AQCAtMjU2MCw2ICsyNTYwLDUyIEBAIHN0YXRpYyB2b2lkIHN0bW1hY19zdG9wX2FsbF9kbWEoc3RydWN0IHN0bW1hY19wcml2ICpwcml2KVxcbiBcXHRcXHRzdG1tYWNfZGVpbml0X2NoYW4ocHJpdiwgcHJpdi1cXHUwMDNlaW9hZGRyLCBjaGFuKTtcXG4gfVxcbiBcXG4rLyoqXFxuKyAqIHN0bW1hY19kYXRhcGF0aF90ZWFyZG93biAtIG9yZGVyZWQgZGF0YXBhdGggdGVhcmRvd24gYXMgcGVyIElQIHNwZWNpZmljYXRpb25cXG4rICogQHByaXY6IGRyaXZlciBwcml2YXRlIHN0cnVjdHVyZVxcbisgKiBEZXNjcmlwdGlvbjpcXG4rICogV2hlbiB0ZWFyZG93biBvcHMgYXJlIGF2YWlsYWJsZSwgZm9sbG93IHRoZSBkYXRhYm9vayBvcmRlcmVkIHRlYXJkb3duXFxuKyAqIHNlcXVlbmNlLlxcbisgKiBGb2xsb3dzIHRoZSBsZWdhY3kgc3RvcCArIE1BQyBkaXNhYmxlIGZvciB2YXJpYW50cyB3aXRob3V0IHRoZSBmZWF0dXJlLlxcbisgKi9cXG4rc3RhdGljIHZvaWQgc3RtbWFjX2RhdGFwYXRoX3RlYXJkb3duKHN0cnVjdCBzdG1tYWNfcHJpdiAqcHJpdilcXG4re1xcbitcXHR1MzIgcnhfY2hhbm5lbHNfY291bnQgPSBwcml2LVxcdTAwM2VwbGF0LVxcdTAwM2VyeF9xdWV1ZXNfdG9fdXNlO1xcbitcXHR1MzIgdHhfY2hhbm5lbHNfY291bnQgPSBwcml2LVxcdTAwM2VwbGF0LVxcdTAwM2V0eF9xdWV1ZXNfdG9fdXNlO1xcbitcXHR1MzIgY2hhbjtcXG4rXFxuK1xcdC8qIFN0b3AgYWxsIFRYIERNQSBjaGFubmVscyAqL1xcbitcXHRmb3IgKGNoYW4gPSAwOyBjaGFuIFxcdTAwM2MgdHhfY2hhbm5lbHNfY291bnQ7IGNoYW4rKylcXG4rXFx0XFx0c3RtbWFjX3N0b3BfdHhfZG1hKHByaXYsIGNoYW4pO1xcbitcXG4rXFx0LyogV2FpdCBmb3IgZXZlcnkgVFggRE1BIGNoYW5uZWwgdG8gcmVwb3J0IGl0c2VsZiBzdG9wcGVkICovXFxuK1xcdGlmIChwcml2LVxcdTAwM2Vody1cXHUwMDNlZG1hLVxcdTAwM2V0eF9kbWFfc3RvcHBlZClcXG4rXFx0XFx0Zm9yIChjaGFuID0gMDsgY2hhbiBcXHUwMDNjIHR4X2NoYW5uZWxzX2NvdW50OyBjaGFuKyspXFxuK1xcdFxcdFxcdHN0bW1hY190eF9kbWFfc3RvcHBlZChwcml2LCBwcml2LVxcdTAwM2Vpb2FkZHIsIGNoYW4pO1xcbitcXG4rXFx0LyogV2FpdCBmb3IgdGhlIE1UTCBUWCBxdWV1ZXMgdG8gZmluaXNoIHB1c2hpbmcgaW50byB0aGUgTUFDICovXFxuK1xcdGlmIChwcml2LVxcdTAwM2Vody1cXHUwMDNlZG1hLVxcdTAwM2V0eF9tdGxfZHJhaW4pXFxuK1xcdFxcdGZvciAoY2hhbiA9IDA7IGNoYW4gXFx1MDAzYyB0eF9jaGFubmVsc19jb3VudDsgY2hhbisrKVxcbitcXHRcXHRcXHRzdG1tYWNfdHhfbXRsX2RyYWluKHByaXYsIHByaXYtXFx1MDAzZWlvYWRkciwgY2hhbik7XFxuK1xcbitcXHQvKiBEaXNhYmxlIHRoZSBNQUMgVFggYW5kIFJYICovXFxuK1xcdHN0bW1hY19tYWNfc2V0KHByaXYsIHByaXYtXFx1MDAzZWlvYWRkciwgZmFsc2UpO1xcbitcXG4rXFx0LyogV2FpdCBmb3IgdGhlIE1UTCBSWCBxdWV1ZXMgdG8gZHJhaW4gaW50byB0aGUgUlggRE1BICovXFxuK1xcdGlmIChwcml2LVxcdTAwM2Vody1cXHUwMDNlZG1hLVxcdTAwM2VyeF9tdGxfZHJhaW4pXFxuK1xcdFxcdGZvciAoY2hhbiA9IDA7IGNoYW4gXFx1MDAzYyByeF9jaGFubmVsc19jb3VudDsgY2hhbisrKVxcbitcXHRcXHRcXHRzdG1tYWNfcnhfbXRsX2RyYWluKHByaXYsIHByaXYtXFx1MDAzZWlvYWRkciwgY2hhbik7XFxuK1xcbitcXHQvKiBTdG9wIGFsbCBSWCBETUEgY2hhbm5lbHMgKi9cXG4rXFx0Zm9yIChjaGFuID0gMDsgY2hhbiBcXHUwMDNjIHJ4X2NoYW5uZWxzX2NvdW50OyBjaGFuKyspXFxuK1xcdFxcdHN0bW1hY19zdG9wX3J4X2RtYShwcml2LCBjaGFuKTtcXG4rXFxuK1xcdC8qIFdhaXQgZm9yIGV2ZXJ5IFJYIERNQSBjaGFubmVsIHRvIHJlcG9ydCBpdHNlbGYgc3RvcHBlZCAqL1xcbitcXHRpZiAocHJpdi1cXHUwMDNlaHctXFx1MDAzZWRtYS1cXHUwMDNlcnhfZG1hX3N0b3BwZWQpXFxuK1xcdFxcdGZvciAoY2hhbiA9IDA7IGNoYW4gXFx1MDAzYyByeF9jaGFubmVsc19jb3VudDsgY2hhbisrKVxcbitcXHRcXHRcXHRzdG1tYWNfcnhfZG1hX3N0b3BwZWQocHJpdiwgcHJpdi1cXHUwMDNlaW9hZGRyLCBjaGFuKTtcXG4rfVxcbitcXG4gLyoqXFxuICAqICBzdG1tYWNfZG1hX29wZXJhdGlvbl9tb2RlIC0gSFcgRE1BIG9wZXJhdGlvbiBtb2RlXFxuICAqICBAcHJpdjogZHJpdmVyIHByaXZhdGUgc3RydWN0dXJlXFxuQEAgLTM2ODUsOSArMzczMSw2IEBAIHN0YXRpYyBpbnQgc3RtbWFjX2h3X3NldHVwKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXFxuIFxcdFxcdHByaXYtXFx1MDAzZWh3LVxcdTAwM2VyeF9jc3VtID0gMDtcXG4gXFx0fVxcbiBcXG4tXFx0LyogRW5hYmxlIHRoZSBNQUMgUngvVHggKi9cXG4tXFx0c3RtbWFjX21hY19zZXQocHJpdiwgcHJpdi1cXHUwMDNlaW9hZGRyLCB0cnVlKTtcXG4tXFxuIFxcdC8qIFNldCB0aGUgSFcgRE1BIG1vZGUgYW5kIHRoZSBDT0UgKi9cXG4gXFx0c3RtbWFjX2RtYV9vcGVyYXRpb25fbW9kZShwcml2KTtcXG4gXFxuQEAgLTM3NDMsNiArMzc4Niw5IEBAIHN0YXRpYyBpbnQgc3RtbWFjX2h3X3NldHVwKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXFxuIFxcdC8qIFN0YXJ0IHRoZSBiYWxsIHJvbGxpbmcuLi4gKi9cXG4gXFx0c3RtbWFjX3N0YXJ0X2FsbF9kbWEocHJpdik7XFxuIFxcbitcXHQvKiBFbmFibGUgdGhlIE1BQyBSeC9UeCAqL1xcbitcXHRzdG1tYWNfbWFjX3NldChwcml2LCBwcml2LVxcdTAwM2Vpb2FkZHIsIHRydWUpO1xcbitcXG4gXFx0cGh5bGlua19yeF9jbGtfc3RvcF9ibG9jayhwcml2LVxcdTAwM2VwaHlsaW5rKTtcXG4gXFx0c3RtbWFjX3NldF9od192bGFuX21vZGUocHJpdiwgcHJpdi1cXHUwMDNlaHcpO1xcbiBcXHRwaHlsaW5rX3J4X2Nsa19zdG9wX3VuYmxvY2socHJpdi1cXHUwMDNlcGh5bGluayk7XFxuQEAgLTQyNDAsOSArNDI4Niw2IEBAIHN0YXRpYyB2b2lkIF9fc3RtbWFjX3JlbGVhc2Uoc3RydWN0IG5ldF9kZXZpY2UgKmRldilcXG4gXFx0c3RydWN0IHN0bW1hY19wcml2ICpwcml2ID0gbmV0ZGV2X3ByaXYoZGV2KTtcXG4gXFx0dTggY2hhbjtcXG4gXFxuLVxcdC8qIFN0b3AgYW5kIGRpc2Nvbm5lY3QgdGhlIFBIWSAqL1xcbi1cXHRwaHlsaW5rX3N0b3AocHJpdi1cXHUwMDNlcGh5bGluayk7XFxuLVxcbiBcXHRzdG1tYWNfZGlzYWJsZV9hbGxfcXVldWVzKHByaXYpO1xcbiBcXG4gXFx0Zm9yIChjaGFuID0gMDsgY2hhbiBcXHUwMDNjIHByaXYtXFx1MDAzZXBsYXQtXFx1MDAzZXR4X3F1ZXVlc190b191c2U7IGNoYW4rKylcXG5AQCAtNDI1Myw4ICs0Mjk2LDExIEBAIHN0YXRpYyB2b2lkIF9fc3RtbWFjX3JlbGVhc2Uoc3RydWN0IG5ldF9kZXZpY2UgKmRldilcXG4gXFx0LyogRnJlZSB0aGUgSVJRIGxpbmVzICovXFxuIFxcdHN0bW1hY19mcmVlX2lycShkZXYsIFJFUV9JUlFfRVJSX0FMTCwgMCk7XFxuIFxcbi1cXHQvKiBTdG9wIFRYL1JYIERNQSBhbmQgY2xlYXIgdGhlIGRlc2NyaXB0b3JzICovXFxuLVxcdHN0bW1hY19zdG9wX2FsbF9kbWEocHJpdik7XFxuK1xcdC8qIEhhcyB0byBydW4gYmVmb3JlIG1hY19saW5rX2Rvd24oKSBkaXNhYmxlcyB0aGUgTUFDLiAqL1xcbitcXHRzdG1tYWNfZGF0YXBhdGhfdGVhcmRvd24ocHJpdik7XFxuK1xcbitcXHQvKiBTdG9wIGFuZCBkaXNjb25uZWN0IHRoZSBQSFkgKi9cXG4rXFx0cGh5bGlua19zdG9wKHByaXYtXFx1MDAzZXBoeWxpbmspO1xcbiBcXG4gXFx0LyogUmVsZWFzZSBhbmQgZnJlZSB0aGUgUngvVHggcmVzb3VyY2VzICovXFxuIFxcdGZyZWVfZG1hX2Rlc2NfcmVzb3VyY2VzKHByaXYsIFxcdTAwMjZwcml2LVxcdTAwM2VkbWFfY29uZik7XFxuQEAgLTcxMDQsMTUgKzcxNTAsMTIgQEAgdm9pZCBzdG1tYWNfeGRwX3JlbGVhc2Uoc3RydWN0IG5ldF9kZXZpY2UgKmRldilcXG4gXFx0LyogRnJlZSB0aGUgSVJRIGxpbmVzICovXFxuIFxcdHN0bW1hY19mcmVlX2lycShkZXYsIFJFUV9JUlFfRVJSX0FMTCwgMCk7XFxuIFxcbi1cXHQvKiBTdG9wIFRYL1JYIERNQSBjaGFubmVscyAqL1xcbi1cXHRzdG1tYWNfc3RvcF9hbGxfZG1hKHByaXYpO1xcbitcXHQvKiBTdG9wIHRoZSBNQUMgYW5kIHRoZSBUWC9SWCBETUEgY2hhbm5lbHMgKi9cXG4rXFx0c3RtbWFjX2RhdGFwYXRoX3RlYXJkb3duKHByaXYpO1xcbiBcXG4gXFx0LyogUmVsZWFzZSBhbmQgZnJlZSB0aGUgUngvVHggcmVzb3VyY2VzICovXFxuIFxcdGZyZWVfZG1hX2Rlc2NfcmVzb3VyY2VzKHByaXYsIFxcdTAwMjZwcml2LVxcdTAwM2VkbWFfY29uZik7XFxuIFxcbi1cXHQvKiBEaXNhYmxlIHRoZSBNQUMgUngvVHggKi9cXG4tXFx0c3RtbWFjX21hY19zZXQocHJpdiwgcHJpdi1cXHUwMDNlaW9hZGRyLCBmYWxzZSk7XFxuLVxcbiBcXHQvKiBzZXQgdHJhbnNfc3RhcnQgc28gd2UgZG9uJ3QgZ2V0IHNwdXJpb3VzXFxuIFxcdCAqIHdhdGNoZG9ncyBkdXJpbmcgcmVzZXRcXG4gXFx0ICovXFxuQEAgLTcxODQsMTIgKzcyMjcsMTIgQEAgaW50IHN0bW1hY194ZHBfb3BlbihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxcbiBcXHRcXHRocnRpbWVyX3NldHVwKFxcdTAwMjZ0eF9xLVxcdTAwM2V0eHRpbWVyLCBzdG1tYWNfdHhfdGltZXIsIENMT0NLX01PTk9UT05JQywgSFJUSU1FUl9NT0RFX1JFTCk7XFxuIFxcdH1cXG4gXFxuLVxcdC8qIEVuYWJsZSB0aGUgTUFDIFJ4L1R4ICovXFxuLVxcdHN0bW1hY19tYWNfc2V0KHByaXYsIHByaXYtXFx1MDAzZWlvYWRkciwgdHJ1ZSk7XFxuLVxcbiBcXHQvKiBTdGFydCBSeCBcXHUwMDI2IFR4IERNQSBDaGFubmVscyAqL1xcbiBcXHRzdG1tYWNfc3RhcnRfYWxsX2RtYShwcml2KTtcXG4gXFxuK1xcdC8qIEVuYWJsZSB0aGUgTUFDIFJ4L1R4ICovXFxuK1xcdHN0bW1hY19tYWNfc2V0KHByaXYsIHByaXYtXFx1MDAzZWlvYWRkciwgdHJ1ZSk7XFxuK1xcbiBcXHRyZXQgPSBzdG1tYWNfcmVxdWVzdF9pcnEoZGV2KTtcXG4gXFx0aWYgKHJldClcXG4gXFx0XFx0Z290byBpcnFfZXJyb3I7XFxuQEAgLTgxOTAsMTcgKzgyMzMsMTUgQEAgaW50IHN0bW1hY19zdXNwZW5kKHN0cnVjdCBkZXZpY2UgKmRldilcXG4gXFx0XFx0dGltZXJfZGVsZXRlX3N5bmMoXFx1MDAyNnByaXYtXFx1MDAzZWVlZV9jdHJsX3RpbWVyKTtcXG4gXFx0fVxcbiBcXG4tXFx0LyogU3RvcCBUWC9SWCBETUEgKi9cXG4tXFx0c3RtbWFjX3N0b3BfYWxsX2RtYShwcml2KTtcXG4tXFxuLVxcdHN0bW1hY19sZWdhY3lfc2VyZGVzX3Bvd2VyX2Rvd24ocHJpdik7XFxuLVxcbiBcXHQvKiBFbmFibGUgUG93ZXIgZG93biBtb2RlIGJ5IHByb2dyYW1taW5nIHRoZSBQTVQgcmVncyAqL1xcbiBcXHRpZiAocHJpdi1cXHUwMDNld29sb3B0cykge1xcbitcXHRcXHRzdG1tYWNfc3RvcF9hbGxfZG1hKHByaXYpO1xcbitcXHRcXHRzdG1tYWNfbGVnYWN5X3NlcmRlc19wb3dlcl9kb3duKHByaXYpO1xcbiBcXHRcXHRzdG1tYWNfcG10KHByaXYsIHByaXYtXFx1MDAzZWh3LCBwcml2LVxcdTAwM2V3b2xvcHRzKTtcXG4gXFx0XFx0cHJpdi1cXHUwMDNlaXJxX3dha2UgPSAxO1xcbiBcXHR9IGVsc2Uge1xcbi1cXHRcXHRzdG1tYWNfbWFjX3NldChwcml2LCBwcml2LVxcdTAwM2Vpb2FkZHIsIGZhbHNlKTtcXG4rXFx0XFx0c3RtbWFjX2RhdGFwYXRoX3RlYXJkb3duKHByaXYpO1xcbitcXHRcXHRzdG1tYWNfbGVnYWN5X3NlcmRlc19wb3dlcl9kb3duKHByaXYpO1xcbiBcXHRcXHRwaW5jdHJsX3BtX3NlbGVjdF9zbGVlcF9zdGF0ZShwcml2LVxcdTAwM2VkZXZpY2UpO1xcbiBcXHR9XFxuIFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xNFQwNjozNTozNC4zNTIxMzY0MzlaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJiZXN0LWV4cGVuc2l2ZSIsIkR1cmF0aW9uIjoxOTUyMDQ3NTIzMjEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiU1RNTUFDX0VUSFwiLFxuICAgIFwiU1RNTUFDX1BDSVwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInN0bW1hY19kdnJfcmVtb3ZlXCIsXG4gICAgXCJzdG1tYWNfc3VzcGVuZFwiLFxuICAgIFwic3RtbWFjX3Jlc3VtZVwiLFxuICAgIFwic3RtbWFjX3hkcF9vcGVuXCIsXG4gICAgXCJzdG1tYWNfeGRwX3JlbGVhc2VcIixcbiAgICBcInN0bW1hY19yZWluaXRfcXVldWVzXCIsXG4gICAgXCJzdG1tYWNfcmVpbml0X3JpbmdwYXJhbVwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGludHJvZHVjZXMgYSBuZXcgb3JkZXJlZCBkYXRhcGF0aCB0ZWFyZG93biBzZXF1ZW5jZSBmb3IgYWxsIHN0bW1hYyBkZXZpY2VzLCBjaGFuZ2luZyB0aGUgb3JkZXIgb2YgRE1BIHN0b3AgYW5kIE1BQyBkaXNhYmxlIG9wZXJhdGlvbnMuIEl0IGFsc28gc3dhcHMgdGhlIG9yZGVyIG9mIE1BQyBlbmFibGUgYW5kIERNQSBzdGFydCBpbiB0aGUgc2V0dXAgcGF0aHMuIFRoZXNlIGFyZSBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGNvcmUgZHJpdmVyIGxvZ2ljIHJlYWNoYWJsZSB2aWEgUENJIGVtdWxhdGlvbi5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG4tIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cbi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSlcbiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4gICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnNcbiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBBbHNvIGNoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlnc1xuICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzXG4gICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgYTA4ZmYzNGNiMmNkMmQyOWMxZTI2MTVkZDE0NDgwY2NiMmQ4NzBmYlxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBGcmkgQXVnIDE0IDA2OjM1OjMyIDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHd4Z21hYzIuaCBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3eGdtYWMyLmhcbmluZGV4IGY4YWIzNDdmN2I1YjkuLjUwZjljY2Q0YTljNDYgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd3hnbWFjMi5oXG4rKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd3hnbWFjMi5oXG5AQCAtMjkxLDYgKzI5MSwxMCBAQFxuICNkZWZpbmUgWEdNQUNfVFRDXHRcdFx0R0VOTUFTSyg2LCA0KVxuICNkZWZpbmUgWEdNQUNfVFhRRU5cdFx0XHRHRU5NQVNLKDMsIDIpXG4gI2RlZmluZSBYR01BQ19UU0ZcdFx0XHRCSVQoMSlcbisjZGVmaW5lIFhHTUFDX01UTF9UWFFfREVCVUcoeClcdFx0KDB4MDAwMDExMDggKyAoMHg4MCAqICh4KSkpXG4rI2RlZmluZSBYR01BQ19UWFFTVFNcdFx0XHRCSVQoNClcbisjZGVmaW5lIFhHTUFDX1RSQ1NUU1x0XHRcdEdFTk1BU0soMiwgMSlcbisjZGVmaW5lIFhHTUFDX1RSQ1NUU19SRUFEXHRcdDB4MVxuICNkZWZpbmUgWEdNQUNfTVRMX1RDeF9FVFNfQ09OVFJPTCh4KVx0KDB4MDAwMDExMTAgKyAoMHg4MCAqICh4KSkpXG4gI2RlZmluZSBYR01BQ19NVExfVEN4X1FVQU5UVU1fV0VJR0hUKHgpXHQoMHgwMDAwMTExOCArICgweDgwICogKHgpKSlcbiAjZGVmaW5lIFhHTUFDX01UTF9UQ3hfU0VORFNMT1BFKHgpXHQoMHgwMDAwMTExYyArICgweDgwICogKHgpKSlcbkBAIC0zMDYsNiArMzEwLDkgQEBcbiAjZGVmaW5lIFhHTUFDX0VIRkNcdFx0XHRCSVQoNylcbiAjZGVmaW5lIFhHTUFDX1JTRlx0XHRcdEJJVCg1KVxuICNkZWZpbmUgWEdNQUNfUlRDXHRcdFx0R0VOTUFTSygxLCAwKVxuKyNkZWZpbmUgWEdNQUNfTVRMX1JYUV9ERUJVRyh4KVx0XHQoMHgwMDAwMTE0OCArICgweDgwICogKHgpKSlcbisjZGVmaW5lIFhHTUFDX1BSWFFcdFx0XHRHRU5NQVNLKDI5LCAxNilcbisjZGVmaW5lIFhHTUFDX1JYUVNUU1x0XHRcdEdFTk1BU0soNSwgNClcbiAjZGVmaW5lIFhHTUFDX01UTF9SWFFfRkxPV19DT05UUk9MKHgpXHQoMHgwMDAwMTE1MCArICgweDgwICogKHgpKSlcbiAjZGVmaW5lIFhHTUFDX1JGRFx0XHRcdEdFTk1BU0soMzEsIDE3KVxuICNkZWZpbmUgWEdNQUNfUkZBXHRcdFx0R0VOTUFTSygxNSwgMSlcbkBAIC0zOTEsNiArMzk4LDcgQEBcbiAjZGVmaW5lIFhHTUFDX05JU1x0XHRcdEJJVCgxNSlcbiAjZGVmaW5lIFhHTUFDX0FJU1x0XHRcdEJJVCgxNClcbiAjZGVmaW5lIFhHTUFDX0ZCRVx0XHRcdEJJVCgxMilcbisjZGVmaW5lIFhHTUFDX1JQU1x0XHRcdEJJVCg4KVxuICNkZWZpbmUgWEdNQUNfUkJVXHRcdFx0QklUKDcpXG4gI2RlZmluZSBYR01BQ19SSVx0XHRcdEJJVCg2KVxuICNkZWZpbmUgWEdNQUNfVEJVXHRcdFx0QklUKDIpXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHd4Z21hYzJfZG1hLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd3hnbWFjMl9kbWEuY1xuaW5kZXggZmY4Mzg1OGViYzFmMy4uYmE0ZjUzNWZiOWViNCAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3eGdtYWMyX2RtYS5jXG4rKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd3hnbWFjMl9kbWEuY1xuQEAgLTQsNiArNCw3IEBAXG4gICogc3RtbWFjIFhHTUFDIHN1cHBvcnQuXG4gICovXG4gXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvYml0ZmllbGQuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2lvcG9sbC5oXHUwMDNlXG4gI2luY2x1ZGUgXCJzdG1tYWMuaFwiXG4gI2luY2x1ZGUgXCJkd3hnbWFjMi5oXCJcbkBAIC0yNjEsMTMgKzI2MiwxMiBAQCBzdGF0aWMgdm9pZCBkd3hnbWFjMl9kbWFfc3RhcnRfdHgoc3RydWN0IHN0bW1hY19wcml2ICpwcml2LFxuIHtcbiBcdHUzMiB2YWx1ZTtcbiBcbitcdC8qIFRQUyBpcyBsYXRjaGVkIG9uY2Ugc2V0LCBzbyBjbGVhciBpdCBvbiBldmVyeSBUeCBETUEgc3RhcnQuICovXG4rXHR3cml0ZWwoWEdNQUNfVFBTLCBpb2FkZHIgKyBYR01BQ19ETUFfQ0hfU1RBVFVTKGNoYW4pKTtcbitcbiBcdHZhbHVlID0gcmVhZGwoaW9hZGRyICsgWEdNQUNfRE1BX0NIX1RYX0NPTlRST0woY2hhbikpO1xuIFx0dmFsdWUgfD0gWEdNQUNfVFhTVDtcbiBcdHdyaXRlbCh2YWx1ZSwgaW9hZGRyICsgWEdNQUNfRE1BX0NIX1RYX0NPTlRST0woY2hhbikpO1xuLVxuLVx0dmFsdWUgPSByZWFkbChpb2FkZHIgKyBYR01BQ19UWF9DT05GSUcpO1xuLVx0dmFsdWUgfD0gWEdNQUNfQ09ORklHX1RFO1xuLVx0d3JpdGVsKHZhbHVlLCBpb2FkZHIgKyBYR01BQ19UWF9DT05GSUcpO1xuIH1cbiBcbiBzdGF0aWMgdm9pZCBkd3hnbWFjMl9kbWFfc3RvcF90eChzdHJ1Y3Qgc3RtbWFjX3ByaXYgKnByaXYsIHZvaWQgX19pb21lbSAqaW9hZGRyLFxuQEAgLTI3OCwxMCArMjc4LDYgQEAgc3RhdGljIHZvaWQgZHd4Z21hYzJfZG1hX3N0b3BfdHgoc3RydWN0IHN0bW1hY19wcml2ICpwcml2LCB2b2lkIF9faW9tZW0gKmlvYWRkcixcbiBcdHZhbHVlID0gcmVhZGwoaW9hZGRyICsgWEdNQUNfRE1BX0NIX1RYX0NPTlRST0woY2hhbikpO1xuIFx0dmFsdWUgXHUwMDI2PSB+WEdNQUNfVFhTVDtcbiBcdHdyaXRlbCh2YWx1ZSwgaW9hZGRyICsgWEdNQUNfRE1BX0NIX1RYX0NPTlRST0woY2hhbikpO1xuLVxuLVx0dmFsdWUgPSByZWFkbChpb2FkZHIgKyBYR01BQ19UWF9DT05GSUcpO1xuLVx0dmFsdWUgXHUwMDI2PSB+WEdNQUNfQ09ORklHX1RFO1xuLVx0d3JpdGVsKHZhbHVlLCBpb2FkZHIgKyBYR01BQ19UWF9DT05GSUcpO1xuIH1cbiBcbiBzdGF0aWMgdm9pZCBkd3hnbWFjMl9kbWFfc3RhcnRfcngoc3RydWN0IHN0bW1hY19wcml2ICpwcml2LFxuQEAgLTI4OSwxMyArMjg1LDEyIEBAIHN0YXRpYyB2b2lkIGR3eGdtYWMyX2RtYV9zdGFydF9yeChzdHJ1Y3Qgc3RtbWFjX3ByaXYgKnByaXYsXG4ge1xuIFx0dTMyIHZhbHVlO1xuIFxuK1x0LyogUlBTIGlzIGxhdGNoZWQgb25jZSBzZXQsIHNvIGNsZWFyIGl0IG9uIGV2ZXJ5IFJ4IERNQSBzdGFydC4gKi9cbitcdHdyaXRlbChYR01BQ19SUFMsIGlvYWRkciArIFhHTUFDX0RNQV9DSF9TVEFUVVMoY2hhbikpO1xuK1xuIFx0dmFsdWUgPSByZWFkbChpb2FkZHIgKyBYR01BQ19ETUFfQ0hfUlhfQ09OVFJPTChjaGFuKSk7XG4gXHR2YWx1ZSB8PSBYR01BQ19SWFNUO1xuIFx0d3JpdGVsKHZhbHVlLCBpb2FkZHIgKyBYR01BQ19ETUFfQ0hfUlhfQ09OVFJPTChjaGFuKSk7XG4tXG4tXHR2YWx1ZSA9IHJlYWRsKGlvYWRkciArIFhHTUFDX1JYX0NPTkZJRyk7XG4tXHR2YWx1ZSB8PSBYR01BQ19DT05GSUdfUkU7XG4tXHR3cml0ZWwodmFsdWUsIGlvYWRkciArIFhHTUFDX1JYX0NPTkZJRyk7XG4gfVxuIFxuIHN0YXRpYyB2b2lkIGR3eGdtYWMyX2RtYV9zdG9wX3J4KHN0cnVjdCBzdG1tYWNfcHJpdiAqcHJpdiwgdm9pZCBfX2lvbWVtICppb2FkZHIsXG5AQCAtNTkyLDYgKzU4Nyw3NyBAQCBzdGF0aWMgaW50IGR3eGdtYWMyX2VuYWJsZV90YnMoc3RydWN0IHN0bW1hY19wcml2ICpwcml2LCB2b2lkIF9faW9tZW0gKmlvYWRkcixcbiBcdHJldHVybiAwO1xuIH1cbiBcbitzdGF0aWMgaW50IGR3eGdtYWMyX3R4X2RtYV9zdG9wcGVkKHN0cnVjdCBzdG1tYWNfcHJpdiAqcHJpdixcbitcdFx0XHRcdCAgIHZvaWQgX19pb21lbSAqaW9hZGRyLCB1MzIgY2hhbilcbit7XG4rXHR1MzIgdmFsdWU7XG4rXHRpbnQgcmV0O1xuK1xuK1x0cmV0ID0gcmVhZGxfcG9sbF90aW1lb3V0KGlvYWRkciArIFhHTUFDX0RNQV9DSF9TVEFUVVMoY2hhbiksIHZhbHVlLFxuK1x0XHRcdFx0IHZhbHVlIFx1MDAyNiBYR01BQ19UUFMsIDEwMCwgMTAwMDApO1xuK1x0aWYgKHJldClcbitcdFx0bmV0ZGV2X3dhcm4ocHJpdi1cdTAwM2VkZXYsIFwiVHggRE1BIGNoYW5uZWwgJXUgc3RvcCB0aW1lb3V0XFxuXCIsXG4rXHRcdFx0ICAgIGNoYW4pO1xuK1xuK1x0cmV0dXJuIHJldDtcbit9XG4rXG4rc3RhdGljIGludCBkd3hnbWFjMl90eF9tdGxfZHJhaW4oc3RydWN0IHN0bW1hY19wcml2ICpwcml2LFxuK1x0XHRcdFx0IHZvaWQgX19pb21lbSAqaW9hZGRyLCB1MzIgcXVldWUpXG4re1xuK1x0dTMyIHZhbHVlO1xuK1x0aW50IHJldDtcbitcbitcdC8qIFdhaXQgdW50aWwgdGhlIHF1ZXVlIGlzIGVtcHR5IGFuZCBpdHMgcmVhZCBjb250cm9sbGVyIGlzIG5vIGxvbmdlclxuK1x0ICogcHVsbGluZyBhIGZyYW1lIG91dCB0b3dhcmRzIHRoZSBNQUMuXG4rXHQgKi9cbitcdHJldCA9IHJlYWRsX3BvbGxfdGltZW91dChpb2FkZHIgKyBYR01BQ19NVExfVFhRX0RFQlVHKHF1ZXVlKSwgdmFsdWUsXG4rXHRcdFx0XHQgISh2YWx1ZSBcdTAwMjYgWEdNQUNfVFhRU1RTKSBcdTAwMjZcdTAwMjZcbitcdFx0XHRcdCBGSUVMRF9HRVQoWEdNQUNfVFJDU1RTLCB2YWx1ZSkgIT1cbitcdFx0XHRcdCBYR01BQ19UUkNTVFNfUkVBRCxcbitcdFx0XHRcdCAxMDAsIDEwMDAwKTtcbitcdGlmIChyZXQpXG4rXHRcdG5ldGRldl93YXJuKHByaXYtXHUwMDNlZGV2LCBcIk1UTCBUeCBxdWV1ZSAldSBkcmFpbiB0aW1lb3V0XFxuXCIsXG4rXHRcdFx0ICAgIHF1ZXVlKTtcbitcbitcdHJldHVybiByZXQ7XG4rfVxuK1xuK3N0YXRpYyBpbnQgZHd4Z21hYzJfcnhfbXRsX2RyYWluKHN0cnVjdCBzdG1tYWNfcHJpdiAqcHJpdixcbitcdFx0XHRcdCB2b2lkIF9faW9tZW0gKmlvYWRkciwgdTMyIHF1ZXVlKVxuK3tcbitcdHUzMiB2YWx1ZTtcbitcdGludCByZXQ7XG4rXG4rXHQvKiBXYWl0IHVudGlsIG5vIHBhY2tldCBpcyBsZWZ0IGluIHRoZSBxdWV1ZSBhbmQgdGhlIHF1ZXVlIHJlcG9ydHNcbitcdCAqIGl0c2VsZiBlbXB0eS5cbitcdCAqL1xuK1x0cmV0ID0gcmVhZGxfcG9sbF90aW1lb3V0KGlvYWRkciArIFhHTUFDX01UTF9SWFFfREVCVUcocXVldWUpLCB2YWx1ZSxcbitcdFx0XHRcdCAhRklFTERfR0VUKFhHTUFDX1BSWFEsIHZhbHVlKSBcdTAwMjZcdTAwMjZcbitcdFx0XHRcdCAhRklFTERfR0VUKFhHTUFDX1JYUVNUUywgdmFsdWUpLFxuK1x0XHRcdFx0IDEwMCwgMTAwMDApO1xuK1x0aWYgKHJldClcbitcdFx0bmV0ZGV2X3dhcm4ocHJpdi1cdTAwM2VkZXYsIFwiTVRMIFJ4IHF1ZXVlICV1IGRyYWluIHRpbWVvdXRcXG5cIixcbitcdFx0XHQgICAgcXVldWUpO1xuK1xuK1x0cmV0dXJuIHJldDtcbit9XG4rXG4rc3RhdGljIGludCBkd3hnbWFjMl9yeF9kbWFfc3RvcHBlZChzdHJ1Y3Qgc3RtbWFjX3ByaXYgKnByaXYsXG4rXHRcdFx0XHQgICB2b2lkIF9faW9tZW0gKmlvYWRkciwgdTMyIGNoYW4pXG4re1xuK1x0dTMyIHZhbHVlO1xuK1x0aW50IHJldDtcbitcbitcdHJldCA9IHJlYWRsX3BvbGxfdGltZW91dChpb2FkZHIgKyBYR01BQ19ETUFfQ0hfU1RBVFVTKGNoYW4pLCB2YWx1ZSxcbitcdFx0XHRcdCB2YWx1ZSBcdTAwMjYgWEdNQUNfUlBTLCAxMDAsIDEwMDAwKTtcbitcdGlmIChyZXQpXG4rXHRcdG5ldGRldl93YXJuKHByaXYtXHUwMDNlZGV2LCBcIlJ4IERNQSBjaGFubmVsICV1IHN0b3AgdGltZW91dFxcblwiLFxuK1x0XHRcdCAgICBjaGFuKTtcbitcbitcdHJldHVybiByZXQ7XG4rfVxuK1xuIGNvbnN0IHN0cnVjdCBzdG1tYWNfZG1hX29wcyBkd3hnbWFjMjEwX2RtYV9vcHMgPSB7XG4gXHQucmVzZXQgPSBkd3hnbWFjMl9kbWFfcmVzZXQsXG4gXHQuaW5pdCA9IGR3eGdtYWMyX2RtYV9pbml0LFxuQEAgLTYyMCw0ICs2ODYsOCBAQCBjb25zdCBzdHJ1Y3Qgc3RtbWFjX2RtYV9vcHMgZHd4Z21hYzIxMF9kbWFfb3BzID0ge1xuIFx0LnNldF9iZnNpemUgPSBkd3hnbWFjMl9zZXRfYmZzaXplLFxuIFx0LmVuYWJsZV9zcGggPSBkd3hnbWFjMl9lbmFibGVfc3BoLFxuIFx0LmVuYWJsZV90YnMgPSBkd3hnbWFjMl9lbmFibGVfdGJzLFxuK1x0LnR4X2RtYV9zdG9wcGVkID0gZHd4Z21hYzJfdHhfZG1hX3N0b3BwZWQsXG4rXHQudHhfbXRsX2RyYWluID0gZHd4Z21hYzJfdHhfbXRsX2RyYWluLFxuK1x0LnJ4X210bF9kcmFpbiA9IGR3eGdtYWMyX3J4X210bF9kcmFpbixcbitcdC5yeF9kbWFfc3RvcHBlZCA9IGR3eGdtYWMyX3J4X2RtYV9zdG9wcGVkLFxuIH07XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvaHdpZi5oIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvaHdpZi5oXG5pbmRleCAwNGRhZmVjMDIxYjRmLi44NmY0YWE4ODk2MWM3IDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvaHdpZi5oXG4rKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9od2lmLmhcbkBAIC0yMzEsNiArMjMxLDE1IEBAIHN0cnVjdCBzdG1tYWNfZG1hX29wcyB7XG4gXHRcdFx0ICAgYm9vbCBlbiwgdTMyIGNoYW4pO1xuIFx0aW50ICgqZW5hYmxlX3Ricykoc3RydWN0IHN0bW1hY19wcml2ICpwcml2LCB2b2lkIF9faW9tZW0gKmlvYWRkcixcbiBcdFx0XHQgIGJvb2wgZW4sIHUzMiBjaGFuKTtcbitcdC8qIE9yZGVyZWQgZGF0YXBhdGggdGVhcmRvd24gKi9cbitcdGludCAoKnR4X2RtYV9zdG9wcGVkKShzdHJ1Y3Qgc3RtbWFjX3ByaXYgKnByaXYsIHZvaWQgX19pb21lbSAqaW9hZGRyLFxuK1x0XHRcdCAgICAgIHUzMiBjaGFuKTtcbitcdGludCAoKnR4X210bF9kcmFpbikoc3RydWN0IHN0bW1hY19wcml2ICpwcml2LCB2b2lkIF9faW9tZW0gKmlvYWRkcixcbitcdFx0XHQgICAgdTMyIHF1ZXVlKTtcbitcdGludCAoKnJ4X210bF9kcmFpbikoc3RydWN0IHN0bW1hY19wcml2ICpwcml2LCB2b2lkIF9faW9tZW0gKmlvYWRkcixcbitcdFx0XHQgICAgdTMyIHF1ZXVlKTtcbitcdGludCAoKnJ4X2RtYV9zdG9wcGVkKShzdHJ1Y3Qgc3RtbWFjX3ByaXYgKnByaXYsIHZvaWQgX19pb21lbSAqaW9hZGRyLFxuK1x0XHRcdCAgICAgIHUzMiBjaGFuKTtcbiB9O1xuIFxuICNkZWZpbmUgc3RtbWFjX2RtYV9pbml0KF9fcHJpdiwgX19hcmdzLi4uKSBcXFxuQEAgLTI5Myw2ICszMDIsMTQgQEAgc3RydWN0IHN0bW1hY19kbWFfb3BzIHtcbiBcdHN0bW1hY19kb192b2lkX2NhbGxiYWNrKF9fcHJpdiwgZG1hLCBlbmFibGVfc3BoLCBfX3ByaXYsIF9fYXJncylcbiAjZGVmaW5lIHN0bW1hY19lbmFibGVfdGJzKF9fcHJpdiwgX19hcmdzLi4uKSBcXFxuIFx0c3RtbWFjX2RvX2NhbGxiYWNrKF9fcHJpdiwgZG1hLCBlbmFibGVfdGJzLCBfX3ByaXYsIF9fYXJncylcbisjZGVmaW5lIHN0bW1hY190eF9kbWFfc3RvcHBlZChfX3ByaXYsIF9fYXJncy4uLikgXFxcbitcdHN0bW1hY19kb19jYWxsYmFjayhfX3ByaXYsIGRtYSwgdHhfZG1hX3N0b3BwZWQsIF9fcHJpdiwgX19hcmdzKVxuKyNkZWZpbmUgc3RtbWFjX3R4X210bF9kcmFpbihfX3ByaXYsIF9fYXJncy4uLikgXFxcbitcdHN0bW1hY19kb19jYWxsYmFjayhfX3ByaXYsIGRtYSwgdHhfbXRsX2RyYWluLCBfX3ByaXYsIF9fYXJncylcbisjZGVmaW5lIHN0bW1hY19yeF9tdGxfZHJhaW4oX19wcml2LCBfX2FyZ3MuLi4pIFxcXG4rXHRzdG1tYWNfZG9fY2FsbGJhY2soX19wcml2LCBkbWEsIHJ4X210bF9kcmFpbiwgX19wcml2LCBfX2FyZ3MpXG4rI2RlZmluZSBzdG1tYWNfcnhfZG1hX3N0b3BwZWQoX19wcml2LCBfX2FyZ3MuLi4pIFxcXG4rXHRzdG1tYWNfZG9fY2FsbGJhY2soX19wcml2LCBkbWEsIHJ4X2RtYV9zdG9wcGVkLCBfX3ByaXYsIF9fYXJncylcbiBcbiBzdHJ1Y3QgbWFjX2RldmljZV9pbmZvO1xuIHN0cnVjdCBuZXRfZGV2aWNlO1xuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19tYWluLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfbWFpbi5jXG5pbmRleCBiMmI3ZDAyNDJkZDNjLi45YzNhOGYxMjJiOTRmIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX21haW4uY1xuKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX21haW4uY1xuQEAgLTI1NjAsNiArMjU2MCw1MiBAQCBzdGF0aWMgdm9pZCBzdG1tYWNfc3RvcF9hbGxfZG1hKHN0cnVjdCBzdG1tYWNfcHJpdiAqcHJpdilcbiBcdFx0c3RtbWFjX2RlaW5pdF9jaGFuKHByaXYsIHByaXYtXHUwMDNlaW9hZGRyLCBjaGFuKTtcbiB9XG4gXG4rLyoqXG4rICogc3RtbWFjX2RhdGFwYXRoX3RlYXJkb3duIC0gb3JkZXJlZCBkYXRhcGF0aCB0ZWFyZG93biBhcyBwZXIgSVAgc3BlY2lmaWNhdGlvblxuKyAqIEBwcml2OiBkcml2ZXIgcHJpdmF0ZSBzdHJ1Y3R1cmVcbisgKiBEZXNjcmlwdGlvbjpcbisgKiBXaGVuIHRlYXJkb3duIG9wcyBhcmUgYXZhaWxhYmxlLCBmb2xsb3cgdGhlIGRhdGFib29rIG9yZGVyZWQgdGVhcmRvd25cbisgKiBzZXF1ZW5jZS5cbisgKiBGb2xsb3dzIHRoZSBsZWdhY3kgc3RvcCArIE1BQyBkaXNhYmxlIGZvciB2YXJpYW50cyB3aXRob3V0IHRoZSBmZWF0dXJlLlxuKyAqL1xuK3N0YXRpYyB2b2lkIHN0bW1hY19kYXRhcGF0aF90ZWFyZG93bihzdHJ1Y3Qgc3RtbWFjX3ByaXYgKnByaXYpXG4re1xuK1x0dTMyIHJ4X2NoYW5uZWxzX2NvdW50ID0gcHJpdi1cdTAwM2VwbGF0LVx1MDAzZXJ4X3F1ZXVlc190b191c2U7XG4rXHR1MzIgdHhfY2hhbm5lbHNfY291bnQgPSBwcml2LVx1MDAzZXBsYXQtXHUwMDNldHhfcXVldWVzX3RvX3VzZTtcbitcdHUzMiBjaGFuO1xuK1xuK1x0LyogU3RvcCBhbGwgVFggRE1BIGNoYW5uZWxzICovXG4rXHRmb3IgKGNoYW4gPSAwOyBjaGFuIFx1MDAzYyB0eF9jaGFubmVsc19jb3VudDsgY2hhbisrKVxuK1x0XHRzdG1tYWNfc3RvcF90eF9kbWEocHJpdiwgY2hhbik7XG4rXG4rXHQvKiBXYWl0IGZvciBldmVyeSBUWCBETUEgY2hhbm5lbCB0byByZXBvcnQgaXRzZWxmIHN0b3BwZWQgKi9cbitcdGlmIChwcml2LVx1MDAzZWh3LVx1MDAzZWRtYS1cdTAwM2V0eF9kbWFfc3RvcHBlZClcbitcdFx0Zm9yIChjaGFuID0gMDsgY2hhbiBcdTAwM2MgdHhfY2hhbm5lbHNfY291bnQ7IGNoYW4rKylcbitcdFx0XHRzdG1tYWNfdHhfZG1hX3N0b3BwZWQocHJpdiwgcHJpdi1cdTAwM2Vpb2FkZHIsIGNoYW4pO1xuK1xuK1x0LyogV2FpdCBmb3IgdGhlIE1UTCBUWCBxdWV1ZXMgdG8gZmluaXNoIHB1c2hpbmcgaW50byB0aGUgTUFDICovXG4rXHRpZiAocHJpdi1cdTAwM2Vody1cdTAwM2VkbWEtXHUwMDNldHhfbXRsX2RyYWluKVxuK1x0XHRmb3IgKGNoYW4gPSAwOyBjaGFuIFx1MDAzYyB0eF9jaGFubmVsc19jb3VudDsgY2hhbisrKVxuK1x0XHRcdHN0bW1hY190eF9tdGxfZHJhaW4ocHJpdiwgcHJpdi1cdTAwM2Vpb2FkZHIsIGNoYW4pO1xuK1xuK1x0LyogRGlzYWJsZSB0aGUgTUFDIFRYIGFuZCBSWCAqL1xuK1x0c3RtbWFjX21hY19zZXQocHJpdiwgcHJpdi1cdTAwM2Vpb2FkZHIsIGZhbHNlKTtcbitcbitcdC8qIFdhaXQgZm9yIHRoZSBNVEwgUlggcXVldWVzIHRvIGRyYWluIGludG8gdGhlIFJYIERNQSAqL1xuK1x0aWYgKHByaXYtXHUwMDNlaHctXHUwMDNlZG1hLVx1MDAzZXJ4X210bF9kcmFpbilcbitcdFx0Zm9yIChjaGFuID0gMDsgY2hhbiBcdTAwM2MgcnhfY2hhbm5lbHNfY291bnQ7IGNoYW4rKylcbitcdFx0XHRzdG1tYWNfcnhfbXRsX2RyYWluKHByaXYsIHByaXYtXHUwMDNlaW9hZGRyLCBjaGFuKTtcbitcbitcdC8qIFN0b3AgYWxsIFJYIERNQSBjaGFubmVscyAqL1xuK1x0Zm9yIChjaGFuID0gMDsgY2hhbiBcdTAwM2MgcnhfY2hhbm5lbHNfY291bnQ7IGNoYW4rKylcbitcdFx0c3RtbWFjX3N0b3BfcnhfZG1hKHByaXYsIGNoYW4pO1xuK1xuK1x0LyogV2FpdCBmb3IgZXZlcnkgUlggRE1BIGNoYW5uZWwgdG8gcmVwb3J0IGl0c2VsZiBzdG9wcGVkICovXG4rXHRpZiAocHJpdi1cdTAwM2Vody1cdTAwM2VkbWEtXHUwMDNlcnhfZG1hX3N0b3BwZWQpXG4rXHRcdGZvciAoY2hhbiA9IDA7IGNoYW4gXHUwMDNjIHJ4X2NoYW5uZWxzX2NvdW50OyBjaGFuKyspXG4rXHRcdFx0c3RtbWFjX3J4X2RtYV9zdG9wcGVkKHByaXYsIHByaXYtXHUwMDNlaW9hZGRyLCBjaGFuKTtcbit9XG4rXG4gLyoqXG4gICogIHN0bW1hY19kbWFfb3BlcmF0aW9uX21vZGUgLSBIVyBETUEgb3BlcmF0aW9uIG1vZGVcbiAgKiAgQHByaXY6IGRyaXZlciBwcml2YXRlIHN0cnVjdHVyZVxuQEAgLTM2ODUsOSArMzczMSw2IEBAIHN0YXRpYyBpbnQgc3RtbWFjX2h3X3NldHVwKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXG4gXHRcdHByaXYtXHUwMDNlaHctXHUwMDNlcnhfY3N1bSA9IDA7XG4gXHR9XG4gXG4tXHQvKiBFbmFibGUgdGhlIE1BQyBSeC9UeCAqL1xuLVx0c3RtbWFjX21hY19zZXQocHJpdiwgcHJpdi1cdTAwM2Vpb2FkZHIsIHRydWUpO1xuLVxuIFx0LyogU2V0IHRoZSBIVyBETUEgbW9kZSBhbmQgdGhlIENPRSAqL1xuIFx0c3RtbWFjX2RtYV9vcGVyYXRpb25fbW9kZShwcml2KTtcbiBcbkBAIC0zNzQzLDYgKzM3ODYsOSBAQCBzdGF0aWMgaW50IHN0bW1hY19od19zZXR1cChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxuIFx0LyogU3RhcnQgdGhlIGJhbGwgcm9sbGluZy4uLiAqL1xuIFx0c3RtbWFjX3N0YXJ0X2FsbF9kbWEocHJpdik7XG4gXG4rXHQvKiBFbmFibGUgdGhlIE1BQyBSeC9UeCAqL1xuK1x0c3RtbWFjX21hY19zZXQocHJpdiwgcHJpdi1cdTAwM2Vpb2FkZHIsIHRydWUpO1xuK1xuIFx0cGh5bGlua19yeF9jbGtfc3RvcF9ibG9jayhwcml2LVx1MDAzZXBoeWxpbmspO1xuIFx0c3RtbWFjX3NldF9od192bGFuX21vZGUocHJpdiwgcHJpdi1cdTAwM2Vodyk7XG4gXHRwaHlsaW5rX3J4X2Nsa19zdG9wX3VuYmxvY2socHJpdi1cdTAwM2VwaHlsaW5rKTtcbkBAIC00MjQwLDkgKzQyODYsNiBAQCBzdGF0aWMgdm9pZCBfX3N0bW1hY19yZWxlYXNlKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXG4gXHRzdHJ1Y3Qgc3RtbWFjX3ByaXYgKnByaXYgPSBuZXRkZXZfcHJpdihkZXYpO1xuIFx0dTggY2hhbjtcbiBcbi1cdC8qIFN0b3AgYW5kIGRpc2Nvbm5lY3QgdGhlIFBIWSAqL1xuLVx0cGh5bGlua19zdG9wKHByaXYtXHUwMDNlcGh5bGluayk7XG4tXG4gXHRzdG1tYWNfZGlzYWJsZV9hbGxfcXVldWVzKHByaXYpO1xuIFxuIFx0Zm9yIChjaGFuID0gMDsgY2hhbiBcdTAwM2MgcHJpdi1cdTAwM2VwbGF0LVx1MDAzZXR4X3F1ZXVlc190b191c2U7IGNoYW4rKylcbkBAIC00MjUzLDggKzQyOTYsMTEgQEAgc3RhdGljIHZvaWQgX19zdG1tYWNfcmVsZWFzZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxuIFx0LyogRnJlZSB0aGUgSVJRIGxpbmVzICovXG4gXHRzdG1tYWNfZnJlZV9pcnEoZGV2LCBSRVFfSVJRX0VSUl9BTEwsIDApO1xuIFxuLVx0LyogU3RvcCBUWC9SWCBETUEgYW5kIGNsZWFyIHRoZSBkZXNjcmlwdG9ycyAqL1xuLVx0c3RtbWFjX3N0b3BfYWxsX2RtYShwcml2KTtcbitcdC8qIEhhcyB0byBydW4gYmVmb3JlIG1hY19saW5rX2Rvd24oKSBkaXNhYmxlcyB0aGUgTUFDLiAqL1xuK1x0c3RtbWFjX2RhdGFwYXRoX3RlYXJkb3duKHByaXYpO1xuK1xuK1x0LyogU3RvcCBhbmQgZGlzY29ubmVjdCB0aGUgUEhZICovXG4rXHRwaHlsaW5rX3N0b3AocHJpdi1cdTAwM2VwaHlsaW5rKTtcbiBcbiBcdC8qIFJlbGVhc2UgYW5kIGZyZWUgdGhlIFJ4L1R4IHJlc291cmNlcyAqL1xuIFx0ZnJlZV9kbWFfZGVzY19yZXNvdXJjZXMocHJpdiwgXHUwMDI2cHJpdi1cdTAwM2VkbWFfY29uZik7XG5AQCAtNzEwNCwxNSArNzE1MCwxMiBAQCB2b2lkIHN0bW1hY194ZHBfcmVsZWFzZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxuIFx0LyogRnJlZSB0aGUgSVJRIGxpbmVzICovXG4gXHRzdG1tYWNfZnJlZV9pcnEoZGV2LCBSRVFfSVJRX0VSUl9BTEwsIDApO1xuIFxuLVx0LyogU3RvcCBUWC9SWCBETUEgY2hhbm5lbHMgKi9cbi1cdHN0bW1hY19zdG9wX2FsbF9kbWEocHJpdik7XG4rXHQvKiBTdG9wIHRoZSBNQUMgYW5kIHRoZSBUWC9SWCBETUEgY2hhbm5lbHMgKi9cbitcdHN0bW1hY19kYXRhcGF0aF90ZWFyZG93bihwcml2KTtcbiBcbiBcdC8qIFJlbGVhc2UgYW5kIGZyZWUgdGhlIFJ4L1R4IHJlc291cmNlcyAqL1xuIFx0ZnJlZV9kbWFfZGVzY19yZXNvdXJjZXMocHJpdiwgXHUwMDI2cHJpdi1cdTAwM2VkbWFfY29uZik7XG4gXG4tXHQvKiBEaXNhYmxlIHRoZSBNQUMgUngvVHggKi9cbi1cdHN0bW1hY19tYWNfc2V0KHByaXYsIHByaXYtXHUwMDNlaW9hZGRyLCBmYWxzZSk7XG4tXG4gXHQvKiBzZXQgdHJhbnNfc3RhcnQgc28gd2UgZG9uJ3QgZ2V0IHNwdXJpb3VzXG4gXHQgKiB3YXRjaGRvZ3MgZHVyaW5nIHJlc2V0XG4gXHQgKi9cbkBAIC03MTg0LDEyICs3MjI3LDEyIEBAIGludCBzdG1tYWNfeGRwX29wZW4oc3RydWN0IG5ldF9kZXZpY2UgKmRldilcbiBcdFx0aHJ0aW1lcl9zZXR1cChcdTAwMjZ0eF9xLVx1MDAzZXR4dGltZXIsIHN0bW1hY190eF90aW1lciwgQ0xPQ0tfTU9OT1RPTklDLCBIUlRJTUVSX01PREVfUkVMKTtcbiBcdH1cbiBcbi1cdC8qIEVuYWJsZSB0aGUgTUFDIFJ4L1R4ICovXG4tXHRzdG1tYWNfbWFjX3NldChwcml2LCBwcml2LVx1MDAzZWlvYWRkciwgdHJ1ZSk7XG4tXG4gXHQvKiBTdGFydCBSeCBcdTAwMjYgVHggRE1BIENoYW5uZWxzICovXG4gXHRzdG1tYWNfc3RhcnRfYWxsX2RtYShwcml2KTtcbiBcbitcdC8qIEVuYWJsZSB0aGUgTUFDIFJ4L1R4ICovXG4rXHRzdG1tYWNfbWFjX3NldChwcml2LCBwcml2LVx1MDAzZWlvYWRkciwgdHJ1ZSk7XG4rXG4gXHRyZXQgPSBzdG1tYWNfcmVxdWVzdF9pcnEoZGV2KTtcbiBcdGlmIChyZXQpXG4gXHRcdGdvdG8gaXJxX2Vycm9yO1xuQEAgLTgxOTAsMTcgKzgyMzMsMTUgQEAgaW50IHN0bW1hY19zdXNwZW5kKHN0cnVjdCBkZXZpY2UgKmRldilcbiBcdFx0dGltZXJfZGVsZXRlX3N5bmMoXHUwMDI2cHJpdi1cdTAwM2VlZWVfY3RybF90aW1lcik7XG4gXHR9XG4gXG4tXHQvKiBTdG9wIFRYL1JYIERNQSAqL1xuLVx0c3RtbWFjX3N0b3BfYWxsX2RtYShwcml2KTtcbi1cbi1cdHN0bW1hY19sZWdhY3lfc2VyZGVzX3Bvd2VyX2Rvd24ocHJpdik7XG4tXG4gXHQvKiBFbmFibGUgUG93ZXIgZG93biBtb2RlIGJ5IHByb2dyYW1taW5nIHRoZSBQTVQgcmVncyAqL1xuIFx0aWYgKHByaXYtXHUwMDNld29sb3B0cykge1xuK1x0XHRzdG1tYWNfc3RvcF9hbGxfZG1hKHByaXYpO1xuK1x0XHRzdG1tYWNfbGVnYWN5X3NlcmRlc19wb3dlcl9kb3duKHByaXYpO1xuIFx0XHRzdG1tYWNfcG10KHByaXYsIHByaXYtXHUwMDNlaHcsIHByaXYtXHUwMDNld29sb3B0cyk7XG4gXHRcdHByaXYtXHUwMDNlaXJxX3dha2UgPSAxO1xuIFx0fSBlbHNlIHtcbi1cdFx0c3RtbWFjX21hY19zZXQocHJpdiwgcHJpdi1cdTAwM2Vpb2FkZHIsIGZhbHNlKTtcbitcdFx0c3RtbWFjX2RhdGFwYXRoX3RlYXJkb3duKHByaXYpO1xuK1x0XHRzdG1tYWNfbGVnYWN5X3NlcmRlc19wb3dlcl9kb3duKHByaXYpO1xuIFx0XHRwaW5jdHJsX3BtX3NlbGVjdF9zbGVlcF9zdGF0ZShwcml2LVx1MDAzZWRldmljZSk7XG4gXHR9XG4gXG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xNFQwNjozNTozNC4zNTIxMzg5MTlaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo2ODgzMDM5NjI3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgSW1wYWN0IG9mIHRoZSBTVE1NQUMgRHJpdmVyIFBhdGNoKipcblxuT2theSwgc28gSSd2ZSBnb3QgdGhpcyBwYXRjaCB0aGF0IGFkZHMgb3JkZXJlZCBkYXRhcGF0aCB0ZWFyZG93biBsb2dpYyBmb3IgZHd4Z21hYzIgd2l0aGluIHRoZSBzdG1tYWMgZHJpdmVyLiBJdCdzIHRvdWNoaW5nIGBzdG1tYWNfbWFpbi5jYCB0byBzd2FwIG91dCB0aGUgb2xkIHNodXRkb3duIHNlcXVlbmNlIGZvciBgc3RtbWFjX2RhdGFwYXRoX3RlYXJkb3duKClgLCBhbmQgaXQncyBhbHNvIHJlb3JkZXJpbmcgc29tZSBmdW5jdGlvbnMgaW4gYHN0bW1hY19od19zZXR1cGAgYW5kIGBzdG1tYWNfeGRwX29wZW5gLiBNeSBwcmltYXJ5IGNvbmNlcm4gbm93IGlzIHRvIGRldGVybWluZSB0aGUgcmVhY2ggb2YgdGhpcyBjaGFuZ2UuIFNwZWNpZmljYWxseSwgSSBuZWVkIHRvIGtub3cgaG93IGxpa2VseSBpdCBpcyB0aGF0IHRoaXMgZHJpdmVyIGlzIGhpdCBpbiBhbnkgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnQuXG5cblRoZSBzdG1tYWMgZHJpdmVyLCBmcm9tIHdoYXQgSSBrbm93LCBpcyB1c2VkIGZvciBTeW5vcHN5cyBEZXNpZ25XYXJlIE1BQ3MuIEEgcXVpY2sgY2hlY2sgdGVsbHMgbWUgdGhhdCB3aGlsZSBRRU1VIGRvZXNuJ3QgZGlyZWN0bHkgZW11bGF0ZSBzdG1tYWMgYnkgZGVmYXVsdCwgdGhhdCBkb2VzbuKAmXQgbWVhbiBpdCdzIG5ldmVyIHVzZWQuIEl04oCZcyBkZWZpbml0ZWx5IHBsYXVzaWJsZSBpdCdzIHBhcnQgb2YgdGhlIGVtdWxhdGVkIGhhcmR3YXJlIG9uIHNvbWUgQVJNIGJvYXJkcyB1c2luZyBRRU1VLiBUaW1lIHRvIGNvbmZpcm0gaWYgYW55IFFFTVUgYm9hcmRzIGFjdHVhbGx5ICpkbyogdXNlIHN0bW1hYy4gQ29uc2lkZXJpbmcgdGhlIHdpZGUgcmFuZ2Ugb2YgU29DcyB0aGF0IHVzZSBzdG1tYWMsIEkgbmVlZCB0byBjb25zaWRlciBhIHJhbmdlIG9mIHBvc3NpYmlsaXRpZXMsIGV2ZW4gdGhvc2UgYWNjZXNzZWQgdGhyb3VnaCBhIFBDSSBkZXZpY2Ugb3IgcGxhdGZvcm0gZGV2aWNlIGluIFFFTVUuIEkgc2hvdWxkIGNoZWNrIGlmIHRoZXJlJ3MgYW55IG1lbnRpb24gb2YgYHN0bW1hY2Agd2l0aGluIHRoZSBRRU1VIGNvbmZpZ3VyYXRpb24gb3IgaWYgYENPTkZJR19TVE1NQUNfRVRIYCBpcyBlbmFibGVkIGluIHN5emthbGxlci5cblxuQWhhLCBhbmQgdGhlbiBJIHJlY2FsbGVkIHRoYXQgYHN0bW1hY2AgYWN0dWFsbHkgaGFzIGEgUENJIGRyaXZlciwgYHN0bW1hY19wY2kuY2AuIFRoaXMgY291bGQgb3BlbiB1cCBhIHdob2xlIG5ldyBhdHRhY2sgc3VyZmFjZSBpZiB3ZSBjb3VsZCB0cmlnZ2VyIGl0IHRocm91Z2ggc29tZSBnZW5lcmljIFBDSSBkZXZpY2Ugc2V0dXAuIEkgc2hvdWxkIGZpbmQgb3V0IGlmIGBzdG1tYWNfcGNpYCBpcyBzcGVjaWZpY2FsbHkgdGllZCB0byBzb21lIEludGVsIG9yIEFNRCBTb0NzIG9yIGlmIGl04oCZcyBtb3JlIGdlbmVyaWMgYW5kIGFwcGxpY2FibGUgdG8gYSB3aWRlciByYW5nZSBvZiBoYXJkd2FyZSBlbXVsYXRlZCBieSBRRU1VLlxuXG5cbiIsIklucHV0VG9rZW5zIjo3Mzg0LCJPdXRwdXRUb2tlbnMiOjIwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzczLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTRUMDY6MzU6NDEuMjM1MTgxNDk1WiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE5NjAwOTQ3NDQsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwic3RtbWFjX3BjaVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJEb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvZGV2aWNlX2RyaXZlcnMvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMucnN0PTEwNz1zeW50YXggKGUuZy4gZm9yIFBDSSBtb2R1bGUpOjpcXG5Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvZGV2aWNlX2RyaXZlcnMvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMucnN0LTEwOC1cXG5Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvZGV2aWNlX2RyaXZlcnMvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMucnN0OjEwOTogICAgbW9kcHJvYmUgc3RtbWFjX3BjaSBbXFx1MDAzY29wdGlvblxcdTAwM2U9XFx1MDAzY1ZBTDFcXHUwMDNlLFxcdTAwM2NWQUwyXFx1MDAzZSwuLi5dXFxuRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL2RldmljZV9kcml2ZXJzL2V0aGVybmV0L3N0bWljcm8vc3RtbWFjLnJzdC0xMTAtXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9NYWtlZmlsZT01Mz1vYmotJChDT05GSUdfRFdNQUNfTU9UT1JDT01NKVxcdCs9IGR3bWFjLW1vdG9yY29tbS5vXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvTWFrZWZpbGU6NTQ6c3RtbWFjLXBjaS1vYmpzOj0gc3RtbWFjX3BjaS5vXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1pbnRlbC5jPTI1PXN0cnVjdCBpbnRlbF9wcml2X2RhdGEge1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtaW50ZWwuYy0zOS0gKi9cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1pbnRlbC5jOjQwOnN0cnVjdCBzdG1tYWNfcGNpX2Z1bmNfZGF0YSB7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtaW50ZWwuYy00MS1cXHR1bnNpZ25lZCBpbnQgZnVuYztcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLWludGVsLmMtNDQtXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtaW50ZWwuYzo0NTpzdHJ1Y3Qgc3RtbWFjX3BjaV9kbWlfZGF0YSB7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtaW50ZWwuYzo0NjpcXHRjb25zdCBzdHJ1Y3Qgc3RtbWFjX3BjaV9mdW5jX2RhdGEgKmZ1bmM7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtaW50ZWwuYy00Ny1cXHRzaXplX3QgbmZ1bmNzO1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtaW50ZWwuYy00OS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1pbnRlbC5jOjUwOnN0cnVjdCBzdG1tYWNfcGNpX2luZm8ge1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLWludGVsLmMtNTEtXFx0aW50ICgqc2V0dXApKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCBzdHJ1Y3QgcGxhdF9zdG1tYWNlbmV0X2RhdGEgKnBsYXQpO1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtaW50ZWwuYz05MT1zdGF0aWMgY29uc3QgaW50IGFkbG5fdHNuX2xhbmVfcmVnc1tdID0gezZ9O1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLWludGVsLmMtOTItXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtaW50ZWwuYzo5MzpzdGF0aWMgaW50IHN0bW1hY19wY2lfZmluZF9waHlfYWRkcihzdHJ1Y3QgcGNpX2RldiAqcGRldixcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1pbnRlbC5jLTk0LVxcdFxcdFxcdFxcdCAgICBjb25zdCBzdHJ1Y3QgZG1pX3N5c3RlbV9pZCAqZG1pX2xpc3QpXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtaW50ZWwuYy05NS17XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtaW50ZWwuYzo5NjpcXHRjb25zdCBzdHJ1Y3Qgc3RtbWFjX3BjaV9mdW5jX2RhdGEgKmZ1bmNfZGF0YTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1pbnRlbC5jOjk3OlxcdGNvbnN0IHN0cnVjdCBzdG1tYWNfcGNpX2RtaV9kYXRhICpkbWlfZGF0YTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1pbnRlbC5jLTk4LVxcdGNvbnN0IHN0cnVjdCBkbWlfc3lzdGVtX2lkICpkbWlfaWQ7XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1pbnRlbC5jPTc4Nj1zdGF0aWMgaW50IGVobF9zZ21paV9kYXRhKHN0cnVjdCBwY2lfZGV2ICpwZGV2LFxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtaW50ZWwuYy04MDUtXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtaW50ZWwuYzo4MDY6c3RhdGljIHN0cnVjdCBzdG1tYWNfcGNpX2luZm8gZWhsX3NnbWlpMWdfaW5mbyA9IHtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1pbnRlbC5jLTgwNy1cXHQuc2V0dXAgPSBlaGxfc2dtaWlfZGF0YSxcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLWludGVsLmM9ODEwPXN0YXRpYyBpbnQgZWhsX3JnbWlpX2RhdGEoc3RydWN0IHBjaV9kZXYgKnBkZXYsXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1pbnRlbC5jLTgyMC1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1pbnRlbC5jOjgyMTpzdGF0aWMgc3RydWN0IHN0bW1hY19wY2lfaW5mbyBlaGxfcmdtaWkxZ19pbmZvID0ge1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLWludGVsLmMtODIyLVxcdC5zZXR1cCA9IGVobF9yZ21paV9kYXRhLFxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtaW50ZWwuYz04NDE9c3RhdGljIGludCBlaGxfcHNlMF9yZ21paTFnX2RhdGEoc3RydWN0IHBjaV9kZXYgKnBkZXYsXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1pbnRlbC5jLTg0Ny1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1pbnRlbC5jOjg0ODpzdGF0aWMgc3RydWN0IHN0bW1hY19wY2lfaW5mbyBlaGxfcHNlMF9yZ21paTFnX2luZm8gPSB7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtaW50ZWwuYy04NDktXFx0LnNldHVwID0gZWhsX3BzZTBfcmdtaWkxZ19kYXRhLFxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtaW50ZWwuYz04NTI9c3RhdGljIGludCBlaGxfcHNlMF9zZ21paTFnX2RhdGEoc3RydWN0IHBjaV9kZXYgKnBkZXYsXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1pbnRlbC5jLTg2OS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1pbnRlbC5jOjg3MDpzdGF0aWMgc3RydWN0IHN0bW1hY19wY2lfaW5mbyBlaGxfcHNlMF9zZ21paTFnX2luZm8gPSB7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtaW50ZWwuYy04NzEtXFx0LnNldHVwID0gZWhsX3BzZTBfc2dtaWkxZ19kYXRhLFxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtaW50ZWwuYz04OTA9c3RhdGljIGludCBlaGxfcHNlMV9yZ21paTFnX2RhdGEoc3RydWN0IHBjaV9kZXYgKnBkZXYsXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1pbnRlbC5jLTg5Ni1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1pbnRlbC5jOjg5NzpzdGF0aWMgc3RydWN0IHN0bW1hY19wY2lfaW5mbyBlaGxfcHNlMV9yZ21paTFnX2luZm8gPSB7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtaW50ZWwuYy04OTgtXFx0LnNldHVwID0gZWhsX3BzZTFfcmdtaWkxZ19kYXRhLFxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtaW50ZWwuYz05MDE9c3RhdGljIGludCBlaGxfcHNlMV9zZ21paTFnX2RhdGEoc3RydWN0IHBjaV9kZXYgKnBkZXYsXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1pbnRlbC5jLTkxOC1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1pbnRlbC5jOjkxOTpzdGF0aWMgc3RydWN0IHN0bW1hY19wY2lfaW5mbyBlaGxfcHNlMV9zZ21paTFnX2luZm8gPSB7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtaW50ZWwuYy05MjAtXFx0LnNldHVwID0gZWhsX3BzZTFfc2dtaWkxZ19kYXRhLFxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtaW50ZWwuYz05NDQ9c3RhdGljIGludCB0Z2xfc2dtaWlfcGh5MF9kYXRhKHN0cnVjdCBwY2lfZGV2ICpwZGV2LFxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtaW50ZWwuYy05NTItXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtaW50ZWwuYzo5NTM6c3RhdGljIHN0cnVjdCBzdG1tYWNfcGNpX2luZm8gdGdsX3NnbWlpMWdfcGh5MF9pbmZvID0ge1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLWludGVsLmMtOTU0LVxcdC5zZXR1cCA9IHRnbF9zZ21paV9waHkwX2RhdGEsXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1pbnRlbC5jPTk1Nz1zdGF0aWMgaW50IHRnbF9zZ21paV9waHkxX2RhdGEoc3RydWN0IHBjaV9kZXYgKnBkZXYsXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1pbnRlbC5jLTk2NS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1pbnRlbC5jOjk2NjpzdGF0aWMgc3RydWN0IHN0bW1hY19wY2lfaW5mbyB0Z2xfc2dtaWkxZ19waHkxX2luZm8gPSB7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtaW50ZWwuYy05NjctXFx0LnNldHVwID0gdGdsX3NnbWlpX3BoeTFfZGF0YSxcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLWludGVsLmM9OTcwPXN0YXRpYyBpbnQgYWRsc19zZ21paV9waHkwX2RhdGEoc3RydWN0IHBjaV9kZXYgKnBkZXYsXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1pbnRlbC5jLTk3OS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1pbnRlbC5jOjk4MDpzdGF0aWMgc3RydWN0IHN0bW1hY19wY2lfaW5mbyBhZGxzX3NnbWlpMWdfcGh5MF9pbmZvID0ge1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLWludGVsLmMtOTgxLVxcdC5zZXR1cCA9IGFkbHNfc2dtaWlfcGh5MF9kYXRhLFxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtaW50ZWwuYz05ODQ9c3RhdGljIGludCBhZGxzX3NnbWlpX3BoeTFfZGF0YShzdHJ1Y3QgcGNpX2RldiAqcGRldixcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLWludGVsLmMtOTkzLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLWludGVsLmM6OTk0OnN0YXRpYyBzdHJ1Y3Qgc3RtbWFjX3BjaV9pbmZvIGFkbHNfc2dtaWkxZ19waHkxX2luZm8gPSB7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtaW50ZWwuYy05OTUtXFx0LnNldHVwID0gYWRsc19zZ21paV9waHkxX2RhdGEsXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1pbnRlbC5jPTEwMjM9c3RhdGljIGludCBhZGxuX3NnbWlpX3BoeTBfZGF0YShzdHJ1Y3QgcGNpX2RldiAqcGRldixcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLWludGVsLmMtMTA0MS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1pbnRlbC5jOjEwNDI6c3RhdGljIHN0cnVjdCBzdG1tYWNfcGNpX2luZm8gYWRsbl9zZ21paTFnX3BoeTBfaW5mbyA9IHtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1pbnRlbC5jLTEwNDMtXFx0LnNldHVwID0gYWRsbl9zZ21paV9waHkwX2RhdGEsXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1pbnRlbC5jLTEwNDUtXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtaW50ZWwuYzoxMDQ2OnN0YXRpYyBjb25zdCBzdHJ1Y3Qgc3RtbWFjX3BjaV9mdW5jX2RhdGEgZ2FsaWxlb19zdG1tYWNfZnVuY19kYXRhW10gPSB7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtaW50ZWwuYy0xMDQ3LVxcdHtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLWludGVsLmMtMTA1Mi1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1pbnRlbC5jOjEwNTM6c3RhdGljIGNvbnN0IHN0cnVjdCBzdG1tYWNfcGNpX2RtaV9kYXRhIGdhbGlsZW9fc3RtbWFjX2RtaV9kYXRhID0ge1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLWludGVsLmMtMTA1NC1cXHQuZnVuYyA9IGdhbGlsZW9fc3RtbWFjX2Z1bmNfZGF0YSxcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLWludGVsLmMtMTA1Ny1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1pbnRlbC5jOjEwNTg6c3RhdGljIGNvbnN0IHN0cnVjdCBzdG1tYWNfcGNpX2Z1bmNfZGF0YSBpb3QyMDQwX3N0bW1hY19mdW5jX2RhdGFbXSA9IHtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1pbnRlbC5jLTEwNTktXFx0e1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtaW50ZWwuYy0xMDY4LVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLWludGVsLmM6MTA2OTpzdGF0aWMgY29uc3Qgc3RydWN0IHN0bW1hY19wY2lfZG1pX2RhdGEgaW90MjA0MF9zdG1tYWNfZG1pX2RhdGEgPSB7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtaW50ZWwuYy0xMDcwLVxcdC5mdW5jID0gaW90MjA0MF9zdG1tYWNfZnVuY19kYXRhLFxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtaW50ZWwuYz0xMTA5PXN0YXRpYyBpbnQgcXVhcmtfZGVmYXVsdF9kYXRhKHN0cnVjdCBwY2lfZGV2ICpwZGV2LFxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtaW50ZWwuYy0xMTE5LVxcdCAqL1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLWludGVsLmM6MTEyMDpcXHRyZXQgPSBzdG1tYWNfcGNpX2ZpbmRfcGh5X2FkZHIocGRldiwgcXVhcmtfcGNpX2RtaSk7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtaW50ZWwuYy0xMTIxLVxcdGlmIChyZXQgXFx1MDAzYyAwKSB7XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1pbnRlbC5jLTExNDQtXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtaW50ZWwuYzoxMTQ1OnN0YXRpYyBjb25zdCBzdHJ1Y3Qgc3RtbWFjX3BjaV9pbmZvIHF1YXJrX2luZm8gPSB7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtaW50ZWwuYy0xMTQ2LVxcdC5zZXR1cCA9IHF1YXJrX2RlZmF1bHRfZGF0YSxcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLWludGVsLmM9MTI2Mz1zdGF0aWMgaW50IGludGVsX2V0aF9wY2lfcHJvYmUoc3RydWN0IHBjaV9kZXYgKnBkZXYsXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1pbnRlbC5jLTEyNjUte1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLWludGVsLmM6MTI2NjpcXHRzdHJ1Y3Qgc3RtbWFjX3BjaV9pbmZvICppbmZvID0gKHN0cnVjdCBzdG1tYWNfcGNpX2luZm8gKilpZC1cXHUwMDNlZHJpdmVyX2RhdGE7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtaW50ZWwuYy0xMjY3LVxcdHN0cnVjdCBpbnRlbF9wcml2X2RhdGEgKmludGVsX3ByaXY7XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1sb29uZ3Nvbi5jPTc2PXN0cnVjdCBsb29uZ3Nvbl9kYXRhIHtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLWxvb25nc29uLmMtODEtXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtbG9vbmdzb24uYzo4MjpzdHJ1Y3Qgc3RtbWFjX3BjaV9pbmZvIHtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1sb29uZ3Nvbi5jLTgzLVxcdGludCAoKnNldHVwKShzdHJ1Y3QgcGNpX2RldiAqcGRldiwgc3RydWN0IHBsYXRfc3RtbWFjZW5ldF9kYXRhICpwbGF0KTtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLWxvb25nc29uLmM9MTMyPXN0YXRpYyBpbnQgbG9vbmdzb25fZ21hY19kYXRhKHN0cnVjdCBwY2lfZGV2ICpwZGV2LFxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtbG9vbmdzb24uYy0xNDEtXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtbG9vbmdzb24uYzoxNDI6c3RhdGljIHN0cnVjdCBzdG1tYWNfcGNpX2luZm8gbG9vbmdzb25fZ21hY19wY2lfaW5mbyA9IHtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1sb29uZ3Nvbi5jLTE0My1cXHQuc2V0dXAgPSBsb29uZ3Nvbl9nbWFjX2RhdGEsXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1sb29uZ3Nvbi5jPTE2NT1zdGF0aWMgaW50IGxvb25nc29uX2duZXRfZGF0YShzdHJ1Y3QgcGNpX2RldiAqcGRldixcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLWxvb25nc29uLmMtMTc2LVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLWxvb25nc29uLmM6MTc3OnN0YXRpYyBzdHJ1Y3Qgc3RtbWFjX3BjaV9pbmZvIGxvb25nc29uX2duZXRfcGNpX2luZm8gPSB7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtbG9vbmdzb24uYy0xNzgtXFx0LnNldHVwID0gbG9vbmdzb25fZ25ldF9kYXRhLFxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtbG9vbmdzb24uYz00OTg9c3RhdGljIGludCBsb29uZ3Nvbl9kd21hY19wcm9iZShzdHJ1Y3QgcGNpX2RldiAqcGRldiwgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgKmlkKVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtbG9vbmdzb24uYy01MDEtXFx0c3RydWN0IHN0bW1hY19yZXNvdXJjZXMgcmVzID0ge307XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtbG9vbmdzb24uYzo1MDI6XFx0c3RydWN0IHN0bW1hY19wY2lfaW5mbyAqaW5mbztcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1sb29uZ3Nvbi5jLTUwMy1cXHRzdHJ1Y3QgbG9vbmdzb25fZGF0YSAqbGQ7XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1sb29uZ3Nvbi5jLTUzNy1cXHRwbGF0LVxcdTAwM2VmaXhfc29jX3Jlc2V0ID0gbG9vbmdzb25fZHdtYWNfZml4X3Jlc2V0O1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLWxvb25nc29uLmM6NTM4OlxcdHBsYXQtXFx1MDAzZXN1c3BlbmQgPSBzdG1tYWNfcGNpX3BsYXRfc3VzcGVuZDtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1sb29uZ3Nvbi5jOjUzOTpcXHRwbGF0LVxcdTAwM2VyZXN1bWUgPSBzdG1tYWNfcGNpX3BsYXRfcmVzdW1lO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLWxvb25nc29uLmMtNTQwLVxcdGxkLVxcdTAwM2VkZXYgPSBcXHUwMDI2cGRldi1cXHUwMDNlZGV2O1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtbG9vbmdzb24uYy01NDItXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtbG9vbmdzb24uYzo1NDM6XFx0aW5mbyA9IChzdHJ1Y3Qgc3RtbWFjX3BjaV9pbmZvICopaWQtXFx1MDAzZWRyaXZlcl9kYXRhO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLWxvb25nc29uLmMtNTQ0LVxcdHJldCA9IGluZm8tXFx1MDAzZXNldHVwKHBkZXYsIHBsYXQpO1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtbW90b3Jjb21tLmM9MTg4PXN0YXRpYyBpbnQgbW90b3Jjb21tX3Jlc3VtZShzdHJ1Y3QgZGV2aWNlICpkZXYsIHZvaWQgKmJzcF9wcml2KVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtbW90b3Jjb21tLmMtMTkyLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLW1vdG9yY29tbS5jOjE5MzpcXHRyZXQgPSBzdG1tYWNfcGNpX3BsYXRfcmVzdW1lKGRldiwgYnNwX3ByaXYpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLW1vdG9yY29tbS5jLTE5NC1cXHRpZiAocmV0KVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtbW90b3Jjb21tLmM9MjA4PW1vdG9yY29tbV9kZWZhdWx0X3BsYXRfZGF0YShzdHJ1Y3QgcGNpX2RldiAqcGRldilcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLW1vdG9yY29tbS5jLTI0OC1cXHRwbGF0LVxcdTAwM2Vjb3JlX3R5cGVcXHRcXHQ9IERXTUFDX0NPUkVfR01BQzQ7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtbW90b3Jjb21tLmM6MjQ5OlxcdHBsYXQtXFx1MDAzZXN1c3BlbmRcXHRcXHQ9IHN0bW1hY19wY2lfcGxhdF9zdXNwZW5kO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLW1vdG9yY29tbS5jLTI1MC1cXHRwbGF0LVxcdTAwM2VyZXN1bWVcXHRcXHQ9IG1vdG9yY29tbV9yZXN1bWU7XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfbGlicGNpLmMtMTEtXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX2xpYnBjaS5jOjEyOmludCBzdG1tYWNfcGNpX3BsYXRfc3VzcGVuZChzdHJ1Y3QgZGV2aWNlICpkZXYsIHZvaWQgKmJzcF9wcml2KVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19saWJwY2kuYy0xMy17XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfbGlicGNpLmMtMjUtfVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19saWJwY2kuYzoyNjpFWFBPUlRfU1lNQk9MX0dQTChzdG1tYWNfcGNpX3BsYXRfc3VzcGVuZCk7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX2xpYnBjaS5jLTI3LVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19saWJwY2kuYzoyODppbnQgc3RtbWFjX3BjaV9wbGF0X3Jlc3VtZShzdHJ1Y3QgZGV2aWNlICpkZXYsIHZvaWQgKmJzcF9wcml2KVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19saWJwY2kuYy0yOS17XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfbGlicGNpLmMtNDMtfVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19saWJwY2kuYzo0NDpFWFBPUlRfU1lNQk9MX0dQTChzdG1tYWNfcGNpX3BsYXRfcmVzdW1lKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfbGlicGNpLmMtNDUtXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfbGlicGNpLmgtOC1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfbGlicGNpLmg6OTppbnQgc3RtbWFjX3BjaV9wbGF0X3N1c3BlbmQoc3RydWN0IGRldmljZSAqZGV2LCB2b2lkICpic3BfcHJpdik7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX2xpYnBjaS5oOjEwOmludCBzdG1tYWNfcGNpX3BsYXRfcmVzdW1lKHN0cnVjdCBkZXZpY2UgKmRldiwgdm9pZCAqYnNwX3ByaXYpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19saWJwY2kuaC0xMS1cXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19wY2kuYy0xOC1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfcGNpLmM6MTk6c3RydWN0IHN0bW1hY19wY2lfaW5mbyB7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX3BjaS5jLTIwLVxcdGludCAoKnNldHVwKShzdHJ1Y3QgcGNpX2RldiAqcGRldiwgc3RydWN0IHBsYXRfc3RtbWFjZW5ldF9kYXRhICpwbGF0KTtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19wY2kuYz0zMz1zdGF0aWMgaW50IHN0bW1hY19kZWZhdWx0X2RhdGEoc3RydWN0IHBjaV9kZXYgKnBkZXYsXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfcGNpLmMtNDktXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX3BjaS5jOjUwOnN0YXRpYyBjb25zdCBzdHJ1Y3Qgc3RtbWFjX3BjaV9pbmZvIHN0bW1hY19wY2lfaW5mbyA9IHtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfcGNpLmMtNTEtXFx0LnNldHVwID0gc3RtbWFjX2RlZmF1bHRfZGF0YSxcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19wY2kuYz01ND1zdGF0aWMgaW50IHNucHNfZ21hYzVfZGVmYXVsdF9kYXRhKHN0cnVjdCBwY2lfZGV2ICpwZGV2LFxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX3BjaS5jLTEwMS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfcGNpLmM6MTAyOnN0YXRpYyBjb25zdCBzdHJ1Y3Qgc3RtbWFjX3BjaV9pbmZvIHNucHNfZ21hYzVfcGNpX2luZm8gPSB7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX3BjaS5jLTEwMy1cXHQuc2V0dXAgPSBzbnBzX2dtYWM1X2RlZmF1bHRfZGF0YSxcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19wY2kuYy0xMDYtLyoqXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX3BjaS5jOjEwNzogKiBzdG1tYWNfcGNpX3Byb2JlXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX3BjaS5jLTEwOC0gKlxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX3BjaS5jLTExNy0gKi9cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfcGNpLmM6MTE4OnN0YXRpYyBpbnQgc3RtbWFjX3BjaV9wcm9iZShzdHJ1Y3QgcGNpX2RldiAqcGRldixcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfcGNpLmMtMTE5LVxcdFxcdFxcdCAgICBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCAqaWQpXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX3BjaS5jLTEyMC17XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX3BjaS5jOjEyMTpcXHRzdHJ1Y3Qgc3RtbWFjX3BjaV9pbmZvICppbmZvID0gKHN0cnVjdCBzdG1tYWNfcGNpX2luZm8gKilpZC1cXHUwMDNlZHJpdmVyX2RhdGE7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX3BjaS5jLTEyMi1cXHRzdHJ1Y3QgcGxhdF9zdG1tYWNlbmV0X2RhdGEgKnBsYXQ7XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfcGNpLmMtMTc5LVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19wY2kuYzoxODA6XFx0cGxhdC1cXHUwMDNlc3VzcGVuZCA9IHN0bW1hY19wY2lfcGxhdF9zdXNwZW5kO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19wY2kuYzoxODE6XFx0cGxhdC1cXHUwMDNlcmVzdW1lID0gc3RtbWFjX3BjaV9wbGF0X3Jlc3VtZTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfcGNpLmMtMTgyLVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX3BjaS5jLTE4Ni0vKipcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfcGNpLmM6MTg3OiAqIHN0bW1hY19wY2lfcmVtb3ZlXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX3BjaS5jLTE4OC0gKlxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX3BjaS5jLTE5MS0gKi9cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfcGNpLmM6MTkyOnN0YXRpYyB2b2lkIHN0bW1hY19wY2lfcmVtb3ZlKHN0cnVjdCBwY2lfZGV2ICpwZGV2KVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19wY2kuYy0xOTMte1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX3BjaS5jPTIwMz1zdGF0aWMgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgc3RtbWFjX2lkX3RhYmxlW10gPSB7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX3BjaS5jOjIwNDpcXHR7IFBDSV9ERVZJQ0VfREFUQShTVE1NQUMsIFNUTU1BQywgXFx1MDAyNnN0bW1hY19wY2lfaW5mbykgfSxcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfcGNpLmM6MjA1OlxcdHsgUENJX0RFVklDRV9EQVRBKFNUTUlDUk8sIE1BQywgXFx1MDAyNnN0bW1hY19wY2lfaW5mbykgfSxcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfcGNpLmMtMjA2LVxcdHsgUENJX0RFVklDRV9EQVRBKFNZTk9QU1lTLCBHTUFDNV9JRCwgXFx1MDAyNnNucHNfZ21hYzVfcGNpX2luZm8pIH0sXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfcGNpLmM9MjEwPU1PRFVMRV9ERVZJQ0VfVEFCTEUocGNpLCBzdG1tYWNfaWRfdGFibGUpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19wY2kuYy0yMTEtXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX3BjaS5jOjIxMjpzdGF0aWMgc3RydWN0IHBjaV9kcml2ZXIgc3RtbWFjX3BjaV9kcml2ZXIgPSB7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX3BjaS5jLTIxMy1cXHQubmFtZSA9IFNUTU1BQ19SRVNPVVJDRV9OQU1FLFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19wY2kuYy0yMTQtXFx0LmlkX3RhYmxlID0gc3RtbWFjX2lkX3RhYmxlLFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19wY2kuYzoyMTU6XFx0LnByb2JlID0gc3RtbWFjX3BjaV9wcm9iZSxcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfcGNpLmM6MjE2OlxcdC5yZW1vdmUgPSBzdG1tYWNfcGNpX3JlbW92ZSxcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfcGNpLmMtMjE3LVxcdC5kcml2ZXIgICAgICAgICA9IHtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19wY2kuYy0yMjEtXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX3BjaS5jOjIyMjptb2R1bGVfcGNpX2RyaXZlcihzdG1tYWNfcGNpX2RyaXZlcik7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX3BjaS5jLTIyMy1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTRUMDY6MzU6NDMuMTk1MjgyMTM5WiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Nzk0NTA1Mzc4NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBJbml0aWFsIEFzc2Vzc21lbnQgb2YgdGhlIFNpdHVhdGlvbioqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IGBzdG1tYWNfcGNpYC4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMgdGhhdCB0aGlzIGlzIGEgUENJIGRyaXZlciB0aGF0IHN5emthbGxlciBzaG91bGQgYmUgYWJsZSB0byBwcm9iZSwgbm8gcHJvYmxlbS4gSSBuZWVkIHRvIG1ha2Ugc3VyZSBJJ20gcmlnaHQgYWJvdXQgdGhhdC4gSG1tbSwgaG9sZCBvbi4uLiBgc3RtbWFjYCBzZWVtcyB0byBiZSBmYWlybHkgd2lkZWx5IHVzZWQsIHBvcHBpbmcgdXAgaW4gYGR3bWFjLWludGVsLmNgLCBgZHdtYWMtbG9vbmdzb24uY2AsIGFuZCBgZHdtYWMtbW90b3Jjb21tLmNgIGFzIHdlbGwuIFRoYXQgYnJvYWRlbnMgdGhlIHNjb3BlIG9mIHRoaW5ncy4gQW5kIHllcywgY29uZmlybWluZyBteSBpbml0aWFsIGh1bmNoLCBgc3RtbWFjX3BjaWAgc3BlY2lmaWNhbGx5IGJpbmRzIGl0c2VsZiB0byBgUENJX0RFVklDRV9EQVRBKFNUTU1BQywgU1RNTUFDLCBcdTAwMjZzdG1tYWNfcGNpX2luZm8pYC4gVGhpcyBtZWFucyBzeXprYWxsZXIgY2FuIGRlZmluaXRlbHkgZnV6eiBpdCBlZmZlY3RpdmVseSBieSBlbXVsYXRpbmcgYSBQQ0kgZGV2aWNlIHdpdGggdGhlIHJpZ2h0IHZlbmRvciBhbmQgZGV2aWNlIElELiBUaGF04oCZcyBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQuIE5vdywgdGhlIG1vcmUgaW50ZXJlc3RpbmcgcXVlc3Rpb246IGlzIGBkd3hnbWFjMmAgd2l0aGluIHJlYWNoPyBJIG5lZWQgdG8gYW5hbHl6ZSB0aGlzIGZ1cnRoZXIuIFRoaXMgcmVjZW50IHBhdGNoIHNlZW1zIHRvIGJlIGZvY3VzZWQgb24gYGR3eGdtYWMyX2RtYS5jYCwgd2hpY2ggaW1wbGVtZW50cyBgZHd4Z21hYzIxMF9kbWFfb3BzYC4gVGltZSB0byB0cmFjZSB0aGF0LCBzZWUgd2hlcmUgYGR3eGdtYWMyMTBfZG1hX29wc2AgaXMgYWN0dWFsbHkgdXNlZC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTU1NDMsIk91dHB1dFRva2VucyI6MjUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxOTEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTRUMDY6MzU6NTEuMTQwMzM3OTg0WiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE3MzM5ODc0NTgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZHd4Z21hYzIxMF9kbWFfb3BzXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3eGdtYWMyLmg9NDc0PWV4dGVybiBjb25zdCBzdHJ1Y3Qgc3RtbWFjX29wcyBkd3hsZ21hYzJfb3BzO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3eGdtYWMyLmg6NDc1OmV4dGVybiBjb25zdCBzdHJ1Y3Qgc3RtbWFjX2RtYV9vcHMgZHd4Z21hYzIxMF9kbWFfb3BzO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3eGdtYWMyLmgtNDc2LWV4dGVybiBjb25zdCBzdHJ1Y3Qgc3RtbWFjX2Rlc2Nfb3BzIGR3eGdtYWMyMTBfZGVzY19vcHM7XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd3hnbWFjMl9kbWEuYz02NDY9c3RhdGljIGludCBkd3hnbWFjMl9yeF9kbWFfc3RvcHBlZChzdHJ1Y3Qgc3RtbWFjX3ByaXYgKnByaXYsXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd3hnbWFjMl9kbWEuYy02NjAtXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHd4Z21hYzJfZG1hLmM6NjYxOmNvbnN0IHN0cnVjdCBzdG1tYWNfZG1hX29wcyBkd3hnbWFjMjEwX2RtYV9vcHMgPSB7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHd4Z21hYzJfZG1hLmMtNjYyLVxcdC5yZXNldCA9IGR3eGdtYWMyX2RtYV9yZXNldCxcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2h3aWYuYz0xMTE9c3RhdGljIGNvbnN0IHN0cnVjdCBzdG1tYWNfaHdpZl9lbnRyeSB7XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9od2lmLmMtMjU3LVxcdFxcdC5kZXNjID0gXFx1MDAyNmR3eGdtYWMyMTBfZGVzY19vcHMsXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvaHdpZi5jOjI1ODpcXHRcXHQuZG1hID0gXFx1MDAyNmR3eGdtYWMyMTBfZG1hX29wcyxcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9od2lmLmMtMjU5LVxcdFxcdC5tYWMgPSBcXHUwMDI2ZHd4Z21hYzIxMF9vcHMsXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9od2lmLmMtMjc5LVxcdFxcdC5kZXNjID0gXFx1MDAyNmR3eGdtYWMyMTBfZGVzY19vcHMsXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvaHdpZi5jOjI4MDpcXHRcXHQuZG1hID0gXFx1MDAyNmR3eGdtYWMyMTBfZG1hX29wcyxcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9od2lmLmMtMjgxLVxcdFxcdC5tYWMgPSBcXHUwMDI2ZHd4bGdtYWMyX29wcyxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTRUMDY6MzU6NTIuODc0MzM2NTQyWiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MjkxMTg0ODkzMywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMuIEhlcmUncyBteSB0YWtlIG9uIHRob3NlIGluaXRpYWwgdGhvdWdodHM6XG5cbioqQW5hbHl6aW5nIGBod2lmLmNgJ3MgSW50ZXJhY3Rpb24gd2l0aCBEYXRhIEVudHJpZXMqKlxuXG5SaWdodCwgc28gSSdtIGxvb2tpbmcgYXQgYGh3aWYuY2AuIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzLCBcIk9rYXksIHdoYXQgZG9lcyAqdGhpcyogcGFydGljdWxhciBjb2RlIG1vZHVsZSBhY3R1YWxseSBkbyB3aXRoIHRoZXNlIGRhdGEgZW50cmllcz9cIiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgcHJvY2Vzc2luZyBmbG93LCB0aGUgbWFuaXB1bGF0aW9ucywgYW5kIHRoZSBldmVudHVhbCBkZXN0aW5hdGlvbiBvciBwdXJwb3NlIG9mIHRoZXNlIGVudHJpZXMgd2l0aGluIHRoZSBjb250ZXh0IG9mIHRoZSBoYXJkd2FyZSBpbnRlcmZhY2UuIEkgbmVlZCB0byBmaWd1cmUgb3V0IHRoZSByb2xlcy4gSXMgaXQgYSByZWFkZXI/IEEgd3JpdGVyPyBBIHRyYW5zbGF0b3I/IEEgZmlsdGVyPyBQcm9iYWJseSBhIGNvbWJpbmF0aW9uLiBCdXQgZmlyc3QsIHRoZSBtZWNoYW5pY3Mgb2YgaXRzIGludGVyYWN0aW9uIGFyZSBwYXJhbW91bnQuIEkgbmVlZCB0byB0cmFjZSB0aGUgZGF0YSdzIGpvdXJuZXkgYW5kIHNlZSBob3cgdGhlIGZ1bmN0aW9ucyB3aXRoaW4gYGh3aWYuY2AgaGFuZGxlIHRoZW0uIFRoYXQncyB0aGUga2V5IHRvIHVuZGVyc3RhbmRpbmcgaXRzIG92ZXJhbGwgaW1wYWN0LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNjY1MSwiT3V0cHV0VG9rZW5zIjoyMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE0VDA2OjM1OjU1Ljc4NjE4NzkzNVoiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNjE1ODA2NzAxLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImR3eGdtYWMyMTBfb3BzXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3eGdtYWMyLmgtNDcyLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3eGdtYWMyLmg6NDczOmV4dGVybiBjb25zdCBzdHJ1Y3Qgc3RtbWFjX29wcyBkd3hnbWFjMjEwX29wcztcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd3hnbWFjMi5oLTQ3NC1leHRlcm4gY29uc3Qgc3RydWN0IHN0bW1hY19vcHMgZHd4bGdtYWMyX29wcztcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3eGdtYWMyX2NvcmUuYz0xNDEzPXN0YXRpYyB2b2lkIGR3eGdtYWMyX3NldF9hcnBfb2ZmbG9hZChzdHJ1Y3QgbWFjX2RldmljZV9pbmZvICpodywgYm9vbCBlbixcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3eGdtYWMyX2NvcmUuYy0xNDI4LVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3eGdtYWMyX2NvcmUuYzoxNDI5OmNvbnN0IHN0cnVjdCBzdG1tYWNfb3BzIGR3eGdtYWMyMTBfb3BzID0ge1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3eGdtYWMyX2NvcmUuYy0xNDMwLVxcdC5jb3JlX2luaXQgPSBkd3hnbWFjMl9jb3JlX2luaXQsXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9od2lmLmM9MTExPXN0YXRpYyBjb25zdCBzdHJ1Y3Qgc3RtbWFjX2h3aWZfZW50cnkge1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvaHdpZi5jLTI1OC1cXHRcXHQuZG1hID0gXFx1MDAyNmR3eGdtYWMyMTBfZG1hX29wcyxcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9od2lmLmM6MjU5OlxcdFxcdC5tYWMgPSBcXHUwMDI2ZHd4Z21hYzIxMF9vcHMsXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvaHdpZi5jLTI2MC1cXHRcXHQudmxhbiA9IFxcdTAwMjZkd3hnbWFjMjEwX3ZsYW5fb3BzLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xNFQwNjozNTo1Ny40MDIwMDA1MjZaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNzAyODYyNDEwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgc3VtbWFyeSwgYXMgaWYgSSB3ZXJlIHRoaW5raW5nIHRoZXNlIHRob3VnaHRzOlxuXG4qKkFuYWx5emluZyB0aGUgU1RNTUFDIEhhcmR3YXJlIEludGVyZmFjZSBFbnRyeSBQb2ludCoqXG5cbk9rYXksIHRpbWUgdG8gZGlnIGluLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlIGhhcmR3YXJlIGludGVyZmFjZSBpcyBpbml0aWFsaXplZCBhbmQgYWNjZXNzZWQgZm9yIHRoaXMgU1RNTUFDIGRyaXZlci4gVGhlIG1vc3QgbG9naWNhbCBzdGFydGluZyBwb2ludCBpcyBwcm9iYWJseSBgc3RtbWFjX2h3aWZfZW50cnlgIHdpdGhpbiBgaHdpZi5jYC4gSSBleHBlY3QgdGhpcyBmdW5jdGlvbiB0byBiZSB0aGUgY2VudHJhbCBwb2ludCBvZiBpbnRlcmFjdGlvbiB3aXRoIHRoZSBoYXJkd2FyZSBhYnN0cmFjdGlvbiBsYXllciAoSEFMKSBmb3IgdGhpcyBzcGVjaWZpYyBFdGhlcm5ldCBNQUMuIEkgYW50aWNpcGF0ZSBmaW5kaW5nIGluaXRpYWxpemF0aW9uIHJvdXRpbmVzLCByZWdpc3RlciBtYXBwaW5nIHNldHVwcywgYW5kIGxpa2VseSBpbnRlcnJ1cHQgY29uZmlndXJhdGlvbiByZWxhdGVkIHRvIHRoZSBoYXJkd2FyZSB3aXRoaW4gdGhpcyBlbnRyeSBmdW5jdGlvbiBvciBhIGNhbGwgY2hhaW4gb3JpZ2luYXRpbmcgZnJvbSBpdC4gVGhpcyB3aWxsIHByb3ZpZGUgdmFsdWFibGUgaW5zaWdodCBpbnRvIGhvdyB0aGUgZHJpdmVyIGludGVyYWN0cyB3aXRoIHRoZSB1bmRlcmx5aW5nIGhhcmR3YXJlIGNvbXBvbmVudHMgYW5kIGhvdyBpdCdzIGNvbmZpZ3VyZWQuIExldCdzIGdldCB0byBpdC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTczMjYsIk91dHB1dFRva2VucyI6MjIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xNFQwNjozNjowMS4xMDQ4NjcwMDdaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE2Mzc4MTIzNDcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwic3RtbWFjX2h3aWZfZW50cnlcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvaHdpZi5jPTEwMD1pbnQgc3RtbWFjX3Jlc2V0KHN0cnVjdCBzdG1tYWNfcHJpdiAqcHJpdilcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2h3aWYuYy0xMTAtXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvaHdpZi5jOjExMTpzdGF0aWMgY29uc3Qgc3RydWN0IHN0bW1hY19od2lmX2VudHJ5IHtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9od2lmLmMtMTEyLVxcdGVudW0gZHdtYWNfY29yZV90eXBlIGNvcmVfdHlwZTtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2h3aWYuYy0yOTItXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvaHdpZi5jOjI5MzpzdGF0aWMgY29uc3Qgc3RydWN0IHN0bW1hY19od2lmX2VudHJ5ICpcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9od2lmLmMtMjk0LXN0bW1hY19od2lmX2ZpbmQoZW51bSBkd21hY19jb3JlX3R5cGUgY29yZV90eXBlLCB1OCBzbnBzdmVyLCB1OCBkZXZfaWQpXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvaHdpZi5jLTI5NS17XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvaHdpZi5jOjI5NjpcXHRjb25zdCBzdHJ1Y3Qgc3RtbWFjX2h3aWZfZW50cnkgKmVudHJ5O1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2h3aWYuYy0yOTctXFx0aW50IGk7XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9od2lmLmM9MzE3PWludCBzdG1tYWNfaHdpZl9pbml0KHN0cnVjdCBzdG1tYWNfcHJpdiAqcHJpdilcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2h3aWYuYy0zMTktXFx0ZW51bSBkd21hY19jb3JlX3R5cGUgY29yZV90eXBlID0gcHJpdi1cXHUwMDNlcGxhdC1cXHUwMDNlY29yZV90eXBlO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2h3aWYuYzozMjA6XFx0Y29uc3Qgc3RydWN0IHN0bW1hY19od2lmX2VudHJ5ICplbnRyeTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9od2lmLmMtMzIxLVxcdHN0cnVjdCBzdG1tYWNfdmVyc2lvbiB2ZXJzaW9uO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xNFQwNjozNjowMi43NDI2ODg5NzRaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Mzc2NjgxOTQzNCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqTWFwcGluZyBgY29yZV90eXBlYCB0byBgZHd4Z21hYzIxMF9kbWFfb3BzYCoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IGhvdyB0aGUgYGNvcmVfdHlwZWAgZW51bWVyYXRpb24gcmVsYXRlcyB0byB0aGUgYGR3eGdtYWMyMTBfZG1hX29wc2Agc3RydWN0dXJlcy4gSXQncyBhIGNsYXNzaWMgc2l0dWF0aW9uIHdoZXJlIGEgaGFyZHdhcmUgYWJzdHJhY3Rpb24gbmVlZHMgdG8gYmUgbGlua2VkIHRvIGEgc3BlY2lmaWMgaW1wbGVtZW50YXRpb24uIEknbSBwcm9iYWJseSBkZWFsaW5nIHdpdGggYSBzeXN0ZW0gdGhhdCBoYXMgcG90ZW50aWFsbHkgbXVsdGlwbGUgRE1BIGNvbnRyb2xsZXJzLCBvciBhdCBsZWFzdCBkaWZmZXJlbnQgY29uZmlndXJhdGlvbnMsIGFuZCB0aGUgYGNvcmVfdHlwZWAgaXMgdGhlIGtleSB0byBzZWxlY3RpbmcgdGhlIHJpZ2h0IHNldCBvZiBETUEgb3BlcmF0aW9ucy5cblxuTXkgcHJpbWFyeSBmb2N1cyByaWdodCBub3cgaXMgdG8gdW5kZXJzdGFuZCB0aGUgbG9va3VwIG1lY2hhbmlzbS4gSXMgaXQgYSBzaW1wbGUgc3dpdGNoIHN0YXRlbWVudD8gTWF5YmUgYSBsb29rdXAgdGFibGU/IEFyZSB0aGVyZSBhbnkgaW5kaXJlY3QgbGF5ZXJzIG9mIGFic3RyYWN0aW9uIEkgbmVlZCB0byB1bmRlcnN0YW5kPyBHaXZlbiB0aGF0IHRoaXMgaXMgbGlrZWx5IHRpZWQgdG8gdGhlIGRlc2lnbiBvZiB0aGUgZHJpdmVyIGFuZCBwbGF0Zm9ybSwgSSBuZWVkIHRvIGtub3c6IEFyZSB0aGVyZSBhbnkgY29tcGF0aWJpbGl0eSBsYXllcnMsIG9yIHNwZWNpYWwgY2FzZXMgdG8gYmUgYXdhcmUgb2Y/IEFyZSB0aGVyZSBhcmNoaXRlY3R1cmFsIGNvbnNpZGVyYXRpb25zIGhlcmU/IERvZXMgdGhpcyByZWxhdGlvbnNoaXAgYWZmZWN0IHRoZSBwb3dlciBtYW5hZ2VtZW50LCBjbG9jayBnYXRpbmcsIG9yIGludGVycnVwdCBoYW5kbGluZyBiZWhhdmlvcj9cblxuVWx0aW1hdGVseSwgdGhlIGdvYWwgaXMgYSBjb21wbGV0ZSBwaWN0dXJlLiBPbmNlIEkndmUgbWFwcGVkIHRoZSBwb3RlbnRpYWwgdmFsdWVzIG9mIGBjb3JlX3R5cGVgIHRvIHRoZSBjb3JyZWN0IGBkd3hnbWFjMjEwX2RtYV9vcHNgIHN0cnVjdHVyZSwgSSdsbCBrbm93IHdoZXJlIHRvIGxvb2sgbmV4dCB0byB1bmRlcnN0YW5kIHRoZSBkZXRhaWxzIG9mIHRoZSBETUEgb3BlcmF0aW9ucy4gSSBoYXZlIGEgbG90IG9mIGRlYnVnZ2luZyB0byBkbyFcblxuXG4iLCJJbnB1dFRva2VucyI6MTgwNTEsIk91dHB1dFRva2VucyI6NDYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xNFQwNjozNjowNi41MDk1MTA4MzlaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6Nzc2ODAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvaHdpZi5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDI1MCxcbiAgXCJMaW5lQ291bnRcIjogNTBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDI1MDpcXHRcXHRcXHQuZGV2X2lkID0gRFdYR01BQ19JRCxcXG4gMjUxOlxcdFxcdFxcdC5yZWdzID0ge1xcbiAyNTI6XFx0XFx0XFx0XFx0LnB0cF9vZmYgPSBQVFBfWEdNQUNfT0ZGU0VULFxcbiAyNTM6XFx0XFx0XFx0XFx0Lm1tY19vZmYgPSBNTUNfWEdNQUNfT0ZGU0VULFxcbiAyNTQ6XFx0XFx0XFx0XFx0LmVzdF9vZmYgPSBFU1RfWEdNQUNfT0ZGU0VULFxcbiAyNTU6XFx0XFx0XFx0XFx0LmZwZV9yZWcgPSBcXHUwMDI2ZHd4Z21hYzNfZnBlX3JlZyxcXG4gMjU2OlxcdFxcdFxcdH0sXFxuIDI1NzpcXHRcXHRcXHQuZGVzYyA9IFxcdTAwMjZkd3hnbWFjMjEwX2Rlc2Nfb3BzLFxcbiAyNTg6XFx0XFx0XFx0LmRtYSA9IFxcdTAwMjZkd3hnbWFjMjEwX2RtYV9vcHMsXFxuIDI1OTpcXHRcXHRcXHQubWFjID0gXFx1MDAyNmR3eGdtYWMyMTBfb3BzLFxcbiAyNjA6XFx0XFx0XFx0LnZsYW4gPSBcXHUwMDI2ZHd4Z21hYzIxMF92bGFuX29wcyxcXG4gMjYxOlxcdFxcdFxcdC5od3RpbWVzdGFtcCA9IFxcdTAwMjZzdG1tYWNfcHRwLFxcbiAyNjI6XFx0XFx0XFx0LnB0cCA9IFxcdTAwMjZzdG1tYWNfcHRwX2Nsb2NrX29wcyxcXG4gMjYzOlxcdFxcdFxcdC5tb2RlID0gTlVMTCxcXG4gMjY0OlxcdFxcdFxcdC50YyA9IFxcdTAwMjZkd21hYzUxMF90Y19vcHMsXFxuIDI2NTpcXHRcXHRcXHQubW1jID0gXFx1MDAyNmR3eGdtYWNfbW1jX29wcyxcXG4gMjY2OlxcdFxcdFxcdC5lc3QgPSBcXHUwMDI2ZHdtYWM1MTBfZXN0X29wcyxcXG4gMjY3OlxcdFxcdFxcdC5zZXR1cCA9IGR3eGdtYWMyX3NldHVwLFxcbiAyNjg6XFx0XFx0XFx0LnF1aXJrcyA9IE5VTEwsXFxuIDI2OTpcXHRcXHR9LCB7XFxuIDI3MDpcXHRcXHRcXHQuY29yZV90eXBlID0gRFdNQUNfQ09SRV9YR01BQyxcXG4gMjcxOlxcdFxcdFxcdC5taW5faWQgPSBEV1hMR01BQ19DT1JFXzJfMDAsXFxuIDI3MjpcXHRcXHRcXHQuZGV2X2lkID0gRFdYTEdNQUNfSUQsXFxuIDI3MzpcXHRcXHRcXHQucmVncyA9IHtcXG4gMjc0OlxcdFxcdFxcdFxcdC5wdHBfb2ZmID0gUFRQX1hHTUFDX09GRlNFVCxcXG4gMjc1OlxcdFxcdFxcdFxcdC5tbWNfb2ZmID0gTU1DX1hHTUFDX09GRlNFVCxcXG4gMjc2OlxcdFxcdFxcdFxcdC5lc3Rfb2ZmID0gRVNUX1hHTUFDX09GRlNFVCxcXG4gMjc3OlxcdFxcdFxcdFxcdC5mcGVfcmVnID0gXFx1MDAyNmR3eGdtYWMzX2ZwZV9yZWcsXFxuIDI3ODpcXHRcXHRcXHR9LFxcbiAyNzk6XFx0XFx0XFx0LmRlc2MgPSBcXHUwMDI2ZHd4Z21hYzIxMF9kZXNjX29wcyxcXG4gMjgwOlxcdFxcdFxcdC5kbWEgPSBcXHUwMDI2ZHd4Z21hYzIxMF9kbWFfb3BzLFxcbiAyODE6XFx0XFx0XFx0Lm1hYyA9IFxcdTAwMjZkd3hsZ21hYzJfb3BzLFxcbiAyODI6XFx0XFx0XFx0LnZsYW4gPSBcXHUwMDI2ZHd4bGdtYWMyX3ZsYW5fb3BzLFxcbiAyODM6XFx0XFx0XFx0Lmh3dGltZXN0YW1wID0gXFx1MDAyNnN0bW1hY19wdHAsXFxuIDI4NDpcXHRcXHRcXHQucHRwID0gXFx1MDAyNnN0bW1hY19wdHBfY2xvY2tfb3BzLFxcbiAyODU6XFx0XFx0XFx0Lm1vZGUgPSBOVUxMLFxcbiAyODY6XFx0XFx0XFx0LnRjID0gXFx1MDAyNmR3bWFjNTEwX3RjX29wcyxcXG4gMjg3OlxcdFxcdFxcdC5tbWMgPSBcXHUwMDI2ZHd4Z21hY19tbWNfb3BzLFxcbiAyODg6XFx0XFx0XFx0LmVzdCA9IFxcdTAwMjZkd21hYzUxMF9lc3Rfb3BzLFxcbiAyODk6XFx0XFx0XFx0LnNldHVwID0gZHd4bGdtYWMyX3NldHVwLFxcbiAyOTA6XFx0XFx0fSxcXG4gMjkxOlxcdH07XFxuIDI5MjpcXHRcXG4gMjkzOlxcdHN0YXRpYyBjb25zdCBzdHJ1Y3Qgc3RtbWFjX2h3aWZfZW50cnkgKlxcbiAyOTQ6XFx0c3RtbWFjX2h3aWZfZmluZChlbnVtIGR3bWFjX2NvcmVfdHlwZSBjb3JlX3R5cGUsIHU4IHNucHN2ZXIsIHU4IGRldl9pZClcXG4gMjk1OlxcdHtcXG4gMjk2OlxcdFxcdGNvbnN0IHN0cnVjdCBzdG1tYWNfaHdpZl9lbnRyeSAqZW50cnk7XFxuIDI5NzpcXHRcXHRpbnQgaTtcXG4gMjk4OlxcdFxcbiAyOTk6XFx0XFx0Zm9yIChpID0gQVJSQVlfU0laRShzdG1tYWNfaHcpIC0gMTsgaSBcXHUwMDNlPSAwOyBpLS0pIHtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTRUMDY6MzY6MDYuNTA5NTg5NTU5WiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQwMTcwNzYxNzcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0IHRob3VnaHQgcHJvY2VzcywgZnJvbSBhbiBleHBlcnQncyBwZXJzcGVjdGl2ZTpcblxuKipJbnZlc3RpZ2F0aW5nIFhHTUFDIENvcmUgRHJpdmVyIEFzc29jaWF0aW9uKipcblxuQWxyaWdodCwgc28gdGhlIGBEV01BQ19DT1JFX1hHTUFDYCBjb3JlIGlzIGFzc29jaWF0ZWQgd2l0aCB0aGUgYGR3eGdtYWMyMTBfZG1hX29wc2Agb3BlcmF0aW9ucy4gTXkgbWluZCBpbW1lZGlhdGVseSBqdW1wcyB0byB0aGUgUENJIGRyaXZlcnMsIHNwZWNpZmljYWxseSBgc3RtbWFjX3BjaWAsIHRvIHVuZGVyc3RhbmQgaG93IHRoaXMgY29ubmVjdGlvbiBpcyBlc3RhYmxpc2hlZCBhdCB0aGUgaGFyZHdhcmUgbGV2ZWwuIEkgbmVlZCB0byBxdWlja2x5IGRldGVybWluZSB3aGV0aGVyIGFueSBvZiB0aGUgUENJIGRyaXZlcnMsIG9yIHBlcmhhcHMgb3RoZXIgZHJpdmVycyBJJ20gZmFtaWxpYXIgd2l0aCwgc3BlY2lmaWNhbGx5IHNldCB0aGF0IGBjb3JlX3R5cGVgIHRvIGBEV01BQ19DT1JFX1hHTUFDYC4gVGhpcyBpcyBhIHZpdGFsIHN0ZXAgaW4gdW5kZXJzdGFuZGluZyB0aGUgZGV2aWNlJ3Mgc2V0dXAgYW5kIGl0cyBjb25maWd1cmF0aW9uIHdpdGhpbiB0aGUgc3lzdGVtLiBJJ20gZm9jdXNpbmcgb24gdGhlIGNvbmZpZ3VyYXRpb24gb2YgdGhpcyBjb3JlLCBhbmQgSSBuZWVkIHRvIGRldGVybWluZSBob3cgaXQncyBiZWluZyBoYW5kbGVkIGJ5IHRoZSBzeXN0ZW0uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE5MzU2LCJPdXRwdXRUb2tlbnMiOjIzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NjMsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xNFQwNjozNjoxMC41MjY2Njg5MDZaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE1Mjg2NzU3ODksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiRFdNQUNfQ09SRV9YR01BQ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9jb21tb24uaD00OT1zdGF0aWMgaW5saW5lIGJvb2wgZHdtYWNfaXNfeG1hYyhlbnVtIGR3bWFjX2NvcmVfdHlwZSBjb3JlX3R5cGUpXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvY29tbW9uLmgtNTAte1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2NvbW1vbi5oOjUxOlxcdHJldHVybiBjb3JlX3R5cGUgPT0gRFdNQUNfQ09SRV9HTUFDNCB8fCBjb3JlX3R5cGUgPT0gRFdNQUNfQ09SRV9YR01BQztcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9jb21tb24uaC01Mi19XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1zb2NmcGdhLmM9NTY5PXN0YXRpYyB2b2lkIHNvY2ZwZ2FfYWdpbGV4NV9zZXR1cF9wbGF0X2RhdChzdHJ1Y3Qgc29jZnBnYV9kd21hYyAqZHdtYWMpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1zb2NmcGdhLmMtNTcyLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLXNvY2ZwZ2EuYzo1NzM6XFx0cGxhdF9kYXQtXFx1MDAzZWNvcmVfdHlwZSA9IERXTUFDX0NPUkVfWEdNQUM7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtc29jZnBnYS5jLTU3NC1cXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLXRlZ3JhLmM9MjE0PXN0YXRpYyBpbnQgdGVncmFfbWdiZV9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtdGVncmEuYy0zMjUtXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtdGVncmEuYzozMjY6XFx0cGxhdC1cXHUwMDNlY29yZV90eXBlID0gRFdNQUNfQ09SRV9YR01BQztcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy10ZWdyYS5jLTMyNy1cXHRwbGF0LVxcdTAwM2VmbGFncyB8PSBTVE1NQUNfRkxBR19UU09fRU47XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9od2lmLmM9MjE9c3RhdGljIHZvaWQgc3RtbWFjX2dldF92ZXJzaW9uKHN0cnVjdCBzdG1tYWNfcHJpdiAqcHJpdixcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2h3aWYuYy00OS1cXHR2ZXItXFx1MDAzZXNucHN2ZXIgPSBGSUVMRF9HRVQoRFdNQUNfU05QU1ZFUiwgdmVyc2lvbik7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvaHdpZi5jOjUwOlxcdGlmIChjb3JlX3R5cGUgPT0gRFdNQUNfQ09SRV9YR01BQylcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9od2lmLmMtNTEtXFx0XFx0dmVyLVxcdTAwM2VkZXZfaWQgPSBGSUVMRF9HRVQoRFdNQUNfVVNFUlZFUiwgdmVyc2lvbik7XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9od2lmLmM9MTExPXN0YXRpYyBjb25zdCBzdHJ1Y3Qgc3RtbWFjX2h3aWZfZW50cnkge1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvaHdpZi5jLTI0Ny1cXHR9LCB7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvaHdpZi5jOjI0ODpcXHRcXHQuY29yZV90eXBlID0gRFdNQUNfQ09SRV9YR01BQyxcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9od2lmLmMtMjQ5LVxcdFxcdC5taW5faWQgPSBEV1hHTUFDX0NPUkVfMl8xMCxcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2h3aWYuYy0yNjktXFx0fSwge1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2h3aWYuYzoyNzA6XFx0XFx0LmNvcmVfdHlwZSA9IERXTUFDX0NPUkVfWEdNQUMsXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvaHdpZi5jLTI3MS1cXHRcXHQubWluX2lkID0gRFdYTEdNQUNfQ09SRV8yXzAwLFxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvaHdpZi5jPTI5ND1zdG1tYWNfaHdpZl9maW5kKGVudW0gZHdtYWNfY29yZV90eXBlIGNvcmVfdHlwZSwgdTggc25wc3ZlciwgdTggZGV2X2lkKVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvaHdpZi5jLTMwNi1cXHRcXHRcXHRjb250aW51ZTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9od2lmLmM6MzA3OlxcdFxcdGlmIChjb3JlX3R5cGUgPT0gRFdNQUNfQ09SRV9YR01BQyBcXHUwMDI2XFx1MDAyNlxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2h3aWYuYy0zMDgtXFx0XFx0ICAgIGRldl9pZCAhPSBlbnRyeS1cXHUwMDNlZGV2X2lkKVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX2VzdC5jPTI4PXN0YXRpYyBpbnQgZXN0X2NvbmZpZ3VyZShzdHJ1Y3Qgc3RtbWFjX3ByaXYgKnByaXYsIHN0cnVjdCBzdG1tYWNfZXN0ICpjZmcsXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfZXN0LmMtNTUtXFx0Y3RybCA9IHJlYWRsKGVzdF9hZGRyICsgRVNUX0NPTlRST0wpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19lc3QuYzo1NjpcXHRpZiAocHJpdi1cXHUwMDNlcGxhdC1cXHUwMDNlY29yZV90eXBlID09IERXTUFDX0NPUkVfWEdNQUMpIHtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfZXN0LmMtNTctXFx0XFx0Y3RybCBcXHUwMDI2PSB+RVNUX1hHTUFDX1BUT1Y7XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfZXN0LmM9ODM9c3RhdGljIHZvaWQgZXN0X2lycV9zdGF0dXMoc3RydWN0IHN0bW1hY19wcml2ICpwcml2LCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX2VzdC5jLTE1MC1cXHRpZiAoc3RhdHVzIFxcdTAwMjYgRVNUX0JUUkUpIHtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfZXN0LmM6MTUxOlxcdFxcdGlmIChwcml2LVxcdTAwM2VwbGF0LVxcdTAwM2Vjb3JlX3R5cGUgPT0gRFdNQUNfQ09SRV9YR01BQykge1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19lc3QuYy0xNTItXFx0XFx0XFx0YnRybCA9IEZJRUxEX0dFVChFU1RfWEdNQUNfQlRSTCwgc3RhdHVzKTtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19ldGh0b29sLmM9MzAxPXN0YXRpYyB2b2lkIHN0bW1hY19ldGh0b29sX2dldGRydmluZm8oc3RydWN0IG5ldF9kZXZpY2UgKmRldixcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19ldGh0b29sLmMtMzA4LVxcdFxcdHN0cnNjcHkoaW5mby1cXHUwMDNlZHJpdmVyLCBHTUFDX0VUSFRPT0xfTkFNRSwgc2l6ZW9mKGluZm8tXFx1MDAzZWRyaXZlcikpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19ldGh0b29sLmM6MzA5OlxcdGVsc2UgaWYgKHByaXYtXFx1MDAzZXBsYXQtXFx1MDAzZWNvcmVfdHlwZSA9PSBEV01BQ19DT1JFX1hHTUFDKVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19ldGh0b29sLmMtMzEwLVxcdFxcdHN0cnNjcHkoaW5mby1cXHUwMDNlZHJpdmVyLCBYR01BQ19FVEhUT09MX05BTUUsIHNpemVvZihpbmZvLVxcdTAwM2Vkcml2ZXIpKTtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19ldGh0b29sLmM9MzUwPXN0YXRpYyBpbnQgc3RtbWFjX2V0aHRvb2xfZ2V0X3JlZ3NfbGVuKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfZXRodG9vbC5jLTM1My1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfZXRodG9vbC5jOjM1NDpcXHRpZiAocHJpdi1cXHUwMDNlcGxhdC1cXHUwMDNlY29yZV90eXBlID09IERXTUFDX0NPUkVfWEdNQUMpXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX2V0aHRvb2wuYy0zNTUtXFx0XFx0cmV0dXJuIFhHTUFDX1JFR1NJWkUgKiA0O1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX2V0aHRvb2wuYz0zNjE9c3RhdGljIHZvaWQgc3RtbWFjX2V0aHRvb2xfZ3JlZ3Moc3RydWN0IG5ldF9kZXZpY2UgKmRldixcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19ldGh0b29sLmMtMzc1LVxcdFxcdCAgICAgICBOVU1fRFdNQUM0X0RNQV9SRUdTICogNCk7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX2V0aHRvb2wuYzozNzY6XFx0fSBlbHNlIGlmIChwcml2LVxcdTAwM2VwbGF0LVxcdTAwM2Vjb3JlX3R5cGUgIT0gRFdNQUNfQ09SRV9YR01BQykge1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19ldGh0b29sLmMtMzc3LVxcdFxcdG1lbWNweShcXHUwMDI2cmVnX3NwYWNlW0VUSFRPT0xfRE1BX09GRlNFVF0sXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfbWFpbi5jPTY0Mj1zdGF0aWMgaW50IHN0bW1hY19od3RzdGFtcF9zZXQoc3RydWN0IG5ldF9kZXZpY2UgKmRldixcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19tYWluLmMtNzU4LVxcdFxcdFxcdGlmIChwcml2LVxcdTAwM2VzeW5vcHN5c19pZCBcXHUwMDNjIERXTUFDX0NPUkVfM183MCBcXHUwMDI2XFx1MDAyNlxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19tYWluLmM6NzU5OlxcdFxcdFxcdCAgICBwcml2LVxcdTAwM2VwbGF0LVxcdTAwM2Vjb3JlX3R5cGUgIT0gRFdNQUNfQ09SRV9YR01BQylcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfbWFpbi5jLTc2MC1cXHRcXHRcXHRcXHR0c19ldmVudF9lbiA9IFBUUF9UQ1JfVFNFVk5URU5BO1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX21haW4uYz02NjA1PXN0YXRpYyBpbnQgc3RtbWFjX2RtYV9jYXBfc2hvdyhzdHJ1Y3Qgc2VxX2ZpbGUgKnNlcSwgdm9pZCAqdilcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19tYWluLmMtNjY0MC1cXHRcXHQgICAocHJpdi1cXHUwMDNlZG1hX2NhcC5oYWxmX2R1cGxleCkgPyBcXFwiWVxcXCIgOiBcXFwiTlxcXCIpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19tYWluLmM6NjY0MTpcXHRpZiAocHJpdi1cXHUwMDNlcGxhdC1cXHUwMDNlY29yZV90eXBlID09IERXTUFDX0NPUkVfWEdNQUMpIHtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfbWFpbi5jLTY2NDItXFx0XFx0c2VxX3ByaW50ZihzZXEsXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfbWFpbi5jLTY2NjQtXFx0XFx0ICAgKHByaXYtXFx1MDAzZWRtYV9jYXAuYXRpbWVfc3RhbXApID8gXFxcIllcXFwiIDogXFxcIk5cXFwiKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfbWFpbi5jOjY2NjU6XFx0aWYgKHByaXYtXFx1MDAzZXBsYXQtXFx1MDAzZWNvcmVfdHlwZSA9PSBEV01BQ19DT1JFX1hHTUFDKVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19tYWluLmMtNjY2Ni1cXHRcXHRzZXFfcHJpbnRmKHNlcSwgXFxcIlxcXFx0VGltZXN0YW1wIFN5c3RlbSBUaW1lIFNvdXJjZTogJXNcXFxcblxcXCIsXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfbWFpbi5jLTY2NzMtXFx0aWYgKHByaXYtXFx1MDAzZXN5bm9wc3lzX2lkIFxcdTAwM2U9IERXTUFDX0NPUkVfNF8wMCB8fFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19tYWluLmM6NjY3NDpcXHQgICAgcHJpdi1cXHUwMDNlcGxhdC1cXHUwMDNlY29yZV90eXBlID09IERXTUFDX0NPUkVfWEdNQUMpIHtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfbWFpbi5jLTY2NzUtXFx0XFx0c2VxX3ByaW50ZihzZXEsIFxcXCJcXFxcdElQIENoZWNrc3VtIE9mZmxvYWQgaW4gUlg6ICVzXFxcXG5cXFwiLFxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX21haW4uYz03NDAyPXN0YXRpYyB2b2lkIHN0bW1hY19wcmludF9hY3RwaHlpZihzdHJ1Y3Qgc3RtbWFjX3ByaXYgKnByaXYpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfbWFpbi5jLTc0MTctXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX21haW4uYzo3NDE4OlxcdGNhc2UgRFdNQUNfQ09SRV9YR01BQzpcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfbWFpbi5jLTc0MTktXFx0XFx0cGh5aWZfdGFibGUgPSBzdG1tYWNfZHd4Z21hY19waHlpZjtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19tYWluLmM9NzQ0ND1zdGF0aWMgaW50IHN0bW1hY19od19pbml0KHN0cnVjdCBzdG1tYWNfcHJpdiAqcHJpdilcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19tYWluLmMtNzU2Ni1cXHRpZiAoKHByaXYtXFx1MDAzZXN5bm9wc3lzX2lkIFxcdTAwM2U9IERXTUFDX0NPUkVfM181MCB8fFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19tYWluLmM6NzU2NzpcXHQgICAgIHByaXYtXFx1MDAzZXBsYXQtXFx1MDAzZWNvcmVfdHlwZSA9PSBEV01BQ19DT1JFX1hHTUFDKSBcXHUwMDI2XFx1MDAyNlxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19tYWluLmMtNzU2OC1cXHQgICAgIXByaXYtXFx1MDAzZXBsYXQtXFx1MDAzZXJpd3Rfb2ZmKSB7XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfbWFpbi5jPTc4MzM9c3RhdGljIGludCBfX3N0bW1hY19kdnJfcHJvYmUoc3RydWN0IGRldmljZSAqZGV2aWNlLFxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX21haW4uYy04MDQwLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19tYWluLmM6ODA0MTpcXHRpZiAocHJpdi1cXHUwMDNlcGxhdC1cXHUwMDNlY29yZV90eXBlID09IERXTUFDX0NPUkVfWEdNQUMpXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX21haW4uYy04MDQyLVxcdFxcdG5kZXYtXFx1MDAzZW1heF9tdHUgPSBYR01BQ19KVU1CT19MRU47XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfbWRpby5jPTUzNj1zdGF0aWMgdTMyIHN0bW1hY19jbGtfY3NyX3NldChzdHJ1Y3Qgc3RtbWFjX3ByaXYgKnByaXYpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfbWRpby5jLTU1NC1cXHRcXHRyYXRlcyA9IHN0bW1hY19zdW44aV9jc3JfdG9fbWRjO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19tZGlvLmM6NTU1OlxcdGlmIChwcml2LVxcdTAwM2VwbGF0LVxcdTAwM2Vjb3JlX3R5cGUgPT0gRFdNQUNfQ09SRV9YR01BQylcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfbWRpby5jLTU1Ni1cXHRcXHRyYXRlcyA9IHN0bW1hY194Z21hY19jc3JfdG9fbWRjO1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX21kaW8uYz01OTU9aW50IHN0bW1hY19tZGlvX3JlZ2lzdGVyKHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2KVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX21kaW8uYy02MjEtXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX21kaW8uYzo2MjI6XFx0aWYgKHByaXYtXFx1MDAzZXBsYXQtXFx1MDAzZWNvcmVfdHlwZSA9PSBEV01BQ19DT1JFX1hHTUFDKSB7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX21kaW8uYy02MjMtXFx0XFx0bmV3X2J1cy1cXHUwMDNlcmVhZCA9IFxcdTAwMjZzdG1tYWNfeGdtYWMyX21kaW9fcmVhZF9jMjI7XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfbWRpby5jLTY2NS1cXHQvKiBMb29rcyBsaWtlIHdlIG5lZWQgYSBkdW1teSByZWFkIGZvciBYR01BQyBvbmx5IGFuZCBDNDUgUEhZcyAqL1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19tZGlvLmM6NjY2OlxcdGlmIChwcml2LVxcdTAwM2VwbGF0LVxcdTAwM2Vjb3JlX3R5cGUgPT0gRFdNQUNfQ09SRV9YR01BQylcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfbWRpby5jLTY2Ny1cXHRcXHRzdG1tYWNfeGdtYWMyX21kaW9fcmVhZF9jNDUobmV3X2J1cywgMCwgMCwgMCk7XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfcGxhdGZvcm0uYz00MTY9c3RtbWFjX3Byb2JlX2NvbmZpZ19kdChzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2LCB1OCAqbWFjKVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX3BsYXRmb3JtLmMtNTQ3LVxcdGlmIChvZl9kZXZpY2VfaXNfY29tcGF0aWJsZShucCwgXFxcInNucHMsZHd4Z21hY1xcXCIpKSB7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX3BsYXRmb3JtLmM6NTQ4OlxcdFxcdHBsYXQtXFx1MDAzZWNvcmVfdHlwZSA9IERXTUFDX0NPUkVfWEdNQUM7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX3BsYXRmb3JtLmMtNTQ5LVxcdFxcdHBsYXQtXFx1MDAzZXBtdCA9IHRydWU7XFxuLS1cXG5pbmNsdWRlL2xpbnV4L3N0bW1hYy5oPTE5MT1lbnVtIGR3bWFjX2NvcmVfdHlwZSB7XFxuLS1cXG5pbmNsdWRlL2xpbnV4L3N0bW1hYy5oLTE5NC1cXHREV01BQ19DT1JFX0dNQUM0LFxcbmluY2x1ZGUvbGludXgvc3RtbWFjLmg6MTk1OlxcdERXTUFDX0NPUkVfWEdNQUMsXFxuaW5jbHVkZS9saW51eC9zdG1tYWMuaC0xOTYtfTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTRUMDY6MzY6MTIuMDU1MzUwMDY1WiIsIlNlcSI6MTUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjU3NzI1OTM3NzMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBEV01BQyBDb3JlIFR5cGUgQXNzaWdubWVudCoqXG5cbkFscmlnaHQsIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gSXQgbG9va3MgbGlrZSBgRFdNQUNfQ09SRV9YR01BQ2AgaXMgZXhwbGljaXRseSBsaW5rZWQgdG8gdGhlIGBkd21hYy1zb2NmcGdhLmNgIGFuZCBgZHdtYWMtdGVncmEuY2AgZHJpdmVycywgYW5kIGFsc28gcG9wcyB1cCB3aGVuIHRoZSBkZXZpY2UgdHJlZSBjb21wYXRpYmxlIHN0cmluZyBpcyBgXCJzbnBzLGR3eGdtYWNcImAuIE15IGltbWVkaWF0ZSBxdWVzdGlvbiBpcyBhcm91bmQgYHN0bW1hY19wY2lgLiBJJ20gZ29pbmcgdGhyb3VnaCB0aGUgY29kZSBhbmQgSSdtIG5vdCBzZWVpbmcgYW55ICpkaXJlY3QqIGFzc2lnbm1lbnQgb2YgYGNvcmVfdHlwZSA9IERXTUFDX0NPUkVfWEdNQUNgIHRoZXJlLiBUaGF0IHNlZW1zIG9kZCwgYmVjYXVzZSBgc3RtbWFjX2h3aWZfZmluZGAgKmRvZXMqIGNoZWNrIHRoZSBgY29yZV90eXBlYCBpbiBjb25qdW5jdGlvbiB3aXRoIGBkZXZfaWRgLiBIbW1tLlxuXG5Pa2F5LCBJIHNlZSBpdCBub3cuIGBzdG1tYWNfaHdpZl9pbml0YCBnZXRzIHRoZSBgY29yZV90eXBlYCB2aWEgYHByaXYtXHUwMDNlcGxhdC1cdTAwM2Vjb3JlX3R5cGVgLiBTbyB0aGUgY3JpdGljYWwgcXVlc3Rpb24gaXMgKndoZXJlKiBpcyB0aGF0IGJlaW5nIGluaXRpYWxpemVkPyBJZiBgc3RtbWFjX3BjaWAgaXNuJ3Qgc2V0dGluZyBpdCBkaXJlY3RseSwgSSBuZWVkIHRvIGtub3cgd2hlcmUgYHByaXYtXHUwMDNlcGxhdC1cdTAwM2Vjb3JlX3R5cGVgIGlzIHBvcHVsYXRlZCwgb3IgaXMgaXQgemVyby4gSWYgaXQgaXNuJ3Qgc2V0LCB0aGVuIHRoYXQgZGVmYXVsdHMgdG8gYERXTUFDX0NPUkVfTUFDYCB3aGljaCB3b3VsZCBleHBsYWluIHRoZSBsYWNrIG9mIGFuIGV4cGxpY2l0IGBYR01BQ2AgZGVzaWduYXRpb24uIEknbSBnb2luZyB0byB0YWtlIGFub3RoZXIgbG9vayBhdCBgc3RtbWFjX3BjaS5jYCB0byB0cmFjZSB3aGVyZSBgcHJpdi1cdTAwM2VwbGF0LVx1MDAzZWNvcmVfdHlwZWAgY29tZXMgZnJvbS5cblxuXG4iLCJJbnB1dFRva2VucyI6MjM2ODEsIk91dHB1dFRva2VucyI6NDksIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxODcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTRUMDY6MzY6MTcuODI3OTQ2ODI5WiIsIlNlcSI6MTYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjgzOTMwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19wY2kuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAzMCxcbiAgXCJMaW5lQ291bnRcIjogNTBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiICAzMDpcXHRcXHRwbGF0LVxcdTAwM2VtZGlvX2J1c19kYXRhLVxcdTAwM2VuZWVkc19yZXNldCA9IHRydWU7XFxuICAzMTpcXHR9XFxuICAzMjpcXHRcXG4gIDMzOlxcdHN0YXRpYyBpbnQgc3RtbWFjX2RlZmF1bHRfZGF0YShzdHJ1Y3QgcGNpX2RldiAqcGRldixcXG4gIDM0OlxcdFxcdFxcdFxcdCAgICAgICBzdHJ1Y3QgcGxhdF9zdG1tYWNlbmV0X2RhdGEgKnBsYXQpXFxuICAzNTpcXHR7XFxuICAzNjpcXHRcXHQvKiBTZXQgY29tbW9uIGRlZmF1bHQgZGF0YSBmaXJzdCAqL1xcbiAgMzc6XFx0XFx0Y29tbW9uX2RlZmF1bHRfZGF0YShwbGF0KTtcXG4gIDM4OlxcdFxcbiAgMzk6XFx0XFx0cGxhdC1cXHUwMDNlYnVzX2lkID0gMTtcXG4gIDQwOlxcdFxcdHBsYXQtXFx1MDAzZXBoeV9hZGRyID0gMDtcXG4gIDQxOlxcdFxcdHBsYXQtXFx1MDAzZXBoeV9pbnRlcmZhY2UgPSBQSFlfSU5URVJGQUNFX01PREVfR01JSTtcXG4gIDQyOlxcdFxcbiAgNDM6XFx0XFx0cGxhdC1cXHUwMDNlZG1hX2NmZy1cXHUwMDNlcGJsID0gMzI7XFxuICA0NDpcXHRcXHRwbGF0LVxcdTAwM2VkbWFfY2ZnLVxcdTAwM2VwYmx4OCA9IHRydWU7XFxuICA0NTpcXHRcXHQvKiBUT0RPOiBBWEkgKi9cXG4gIDQ2OlxcdFxcbiAgNDc6XFx0XFx0cmV0dXJuIDA7XFxuICA0ODpcXHR9XFxuICA0OTpcXHRcXG4gIDUwOlxcdHN0YXRpYyBjb25zdCBzdHJ1Y3Qgc3RtbWFjX3BjaV9pbmZvIHN0bW1hY19wY2lfaW5mbyA9IHtcXG4gIDUxOlxcdFxcdC5zZXR1cCA9IHN0bW1hY19kZWZhdWx0X2RhdGEsXFxuICA1MjpcXHR9O1xcbiAgNTM6XFx0XFxuICA1NDpcXHRzdGF0aWMgaW50IHNucHNfZ21hYzVfZGVmYXVsdF9kYXRhKHN0cnVjdCBwY2lfZGV2ICpwZGV2LFxcbiAgNTU6XFx0XFx0XFx0XFx0XFx0ICAgc3RydWN0IHBsYXRfc3RtbWFjZW5ldF9kYXRhICpwbGF0KVxcbiAgNTY6XFx0e1xcbiAgNTc6XFx0XFx0aW50IGk7XFxuICA1ODpcXHRcXG4gIDU5OlxcdFxcdHBsYXQtXFx1MDAzZWNsa19jc3IgPSBTVE1NQUNfQ1NSXzI1MF8zMDBNO1xcbiAgNjA6XFx0XFx0cGxhdC1cXHUwMDNlY29yZV90eXBlID0gRFdNQUNfQ09SRV9HTUFDNDtcXG4gIDYxOlxcdFxcdHBsYXQtXFx1MDAzZWZvcmNlX3NmX2RtYV9tb2RlID0gdHJ1ZTtcXG4gIDYyOlxcdFxcdHBsYXQtXFx1MDAzZWZsYWdzIHw9IFNUTU1BQ19GTEFHX1RTT19FTjtcXG4gIDYzOlxcdFxcdHBsYXQtXFx1MDAzZXBtdCA9IHRydWU7XFxuICA2NDpcXHRcXG4gIDY1OlxcdFxcdC8qIFNldCBkZWZhdWx0IG51bWJlciBvZiBSWCBhbmQgVFggcXVldWVzIHRvIHVzZSAqL1xcbiAgNjY6XFx0XFx0cGxhdC1cXHUwMDNldHhfcXVldWVzX3RvX3VzZSA9IDQ7XFxuICA2NzpcXHRcXHRwbGF0LVxcdTAwM2VyeF9xdWV1ZXNfdG9fdXNlID0gNDtcXG4gIDY4OlxcdFxcbiAgNjk6XFx0XFx0cGxhdC1cXHUwMDNldHhfc2NoZWRfYWxnb3JpdGhtID0gTVRMX1RYX0FMR09SSVRITV9XUlI7XFxuICA3MDpcXHRcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgcGxhdC1cXHUwMDNldHhfcXVldWVzX3RvX3VzZTsgaSsrKSB7XFxuICA3MTpcXHRcXHRcXHRwbGF0LVxcdTAwM2V0eF9xdWV1ZXNfY2ZnW2ldLm1vZGVfdG9fdXNlID0gTVRMX1FVRVVFX0RDQjtcXG4gIDcyOlxcdFxcdFxcdHBsYXQtXFx1MDAzZXR4X3F1ZXVlc19jZmdbaV0ud2VpZ2h0ID0gMjU7XFxuICA3MzpcXHRcXHRcXHRpZiAoaSBcXHUwMDNlIDApXFxuICA3NDpcXHRcXHRcXHRcXHRwbGF0LVxcdTAwM2V0eF9xdWV1ZXNfY2ZnW2ldLnRic19lbiA9IDE7XFxuICA3NTpcXHRcXHR9XFxuICA3NjpcXHRcXG4gIDc3OlxcdFxcdHBsYXQtXFx1MDAzZXJ4X3NjaGVkX2FsZ29yaXRobSA9IE1UTF9SWF9BTEdPUklUSE1fU1A7XFxuICA3ODpcXHRcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgcGxhdC1cXHUwMDNlcnhfcXVldWVzX3RvX3VzZTsgaSsrKVxcbiAgNzk6XFx0XFx0XFx0cGxhdC1cXHUwMDNlcnhfcXVldWVzX2NmZ1tpXS5tb2RlX3RvX3VzZSA9IE1UTF9RVUVVRV9EQ0I7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE0VDA2OjM2OjE3LjgyODAzMjMxOVoiLCJTZXEiOjE3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0NzEwMzA3OTk1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgU1RNTUFDIERyaXZlciBJbml0aWFsaXphdGlvbioqXG5cbk9rYXksIHNvIEknbSBkaWdnaW5nIGludG8gdGhpcyBgc3RtbWFjX3BjaS5jYCBmaWxlIGFuZCB0cnlpbmcgdG8gdW5kZXJzdGFuZCBob3cgaXQncyBzZXR0aW5nIHVwIHRoZSBkcml2ZXIuIEkgc2VlIGl0IHNldHMgYERXTUFDX0NPUkVfR01BQzRgIGZvciBgc25wc19nbWFjNV9kZWZhdWx0X2RhdGFgLiBIbW0sIHRoYXQgc2VlbXMgc3RyYWlnaHRmb3J3YXJkIGVub3VnaCBhdCBmaXJzdCBnbGFuY2UuIEJ1dCBoYW5nIG9uLCBzb21ldGhpbmcncyBub3QgcXVpdGUgcmlnaHQuLi4gSSBjYW4ndCBmaW5kIGFueSBtZW50aW9uIG9mIGBEV01BQ19DT1JFX1hHTUFDYCBpbiB0aGlzIHBhcnRpY3VsYXIgZmlsZS4gVGhhdCdzIGEgYml0IG9mIGEgaGVhZC1zY3JhdGNoZXIuXG5cbk5vdywgd2FpdCBhIG1pbnV0ZSwgSSByZW1lbWJlciB0aGF0IGBzdG1tYWNfaHdpZl9pbml0YCBpcyByZXNwb25zaWJsZSBmb3IgZ3JhYmJpbmcgdGhlIGhhcmR3YXJlIHZlcnNpb24uIE9rYXksIGxldCdzIHJldmlzaXQgYHN0bW1hY19od2lmX2luaXRgIGFuZCBnZXQgYSBjbGVhcmVyIHBpY3R1cmUgb2YgaG93IGl0IGFsbCB0aWVzIHRvZ2V0aGVyIGFuZCBob3cgdGhlIGNvcmUgaXMgYWN0dWFsbHkgaWRlbnRpZmllZC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZSBoYXJkd2FyZSB2ZXJzaW9uIGludGVyYWN0cyB3aXRoIHRoZXNlIGNvcmUgZGVmaW5pdGlvbnMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI1MDQ0LCJPdXRwdXRUb2tlbnMiOjQ2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTA0LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTRUMDY6MzY6MjIuNTM4MzQyNzYzWiIsIlNlcSI6MTgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjgyMDY5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2h3aWYuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAzMTUsXG4gIFwiTGluZUNvdW50XCI6IDUwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAzMTU6XFx0fVxcbiAzMTY6XFx0XFxuIDMxNzpcXHRpbnQgc3RtbWFjX2h3aWZfaW5pdChzdHJ1Y3Qgc3RtbWFjX3ByaXYgKnByaXYpXFxuIDMxODpcXHR7XFxuIDMxOTpcXHRcXHRlbnVtIGR3bWFjX2NvcmVfdHlwZSBjb3JlX3R5cGUgPSBwcml2LVxcdTAwM2VwbGF0LVxcdTAwM2Vjb3JlX3R5cGU7XFxuIDMyMDpcXHRcXHRjb25zdCBzdHJ1Y3Qgc3RtbWFjX2h3aWZfZW50cnkgKmVudHJ5O1xcbiAzMjE6XFx0XFx0c3RydWN0IHN0bW1hY192ZXJzaW9uIHZlcnNpb247XFxuIDMyMjpcXHRcXHRzdHJ1Y3QgbWFjX2RldmljZV9pbmZvICptYWM7XFxuIDMyMzpcXHRcXHRib29sIG5lZWRzX3NldHVwID0gdHJ1ZTtcXG4gMzI0OlxcdFxcdGludCByZXQ7XFxuIDMyNTpcXHRcXG4gMzI2OlxcdFxcdHN0bW1hY19nZXRfdmVyc2lvbihwcml2LCBcXHUwMDI2dmVyc2lvbik7XFxuIDMyNzpcXHRcXG4gMzI4OlxcdFxcdC8qIFNhdmUgSUQgZm9yIGxhdGVyIHVzZSAqL1xcbiAzMjk6XFx0XFx0cHJpdi1cXHUwMDNlc3lub3BzeXNfaWQgPSB2ZXJzaW9uLnNucHN2ZXI7XFxuIDMzMDpcXHRcXG4gMzMxOlxcdFxcdG1hYyA9IGRldm1fa3phbGxvYyhwcml2LVxcdTAwM2VkZXZpY2UsIHNpemVvZigqbWFjKSwgR0ZQX0tFUk5FTCk7XFxuIDMzMjpcXHRcXHRpZiAoIW1hYylcXG4gMzMzOlxcdFxcdFxcdHJldHVybiAtRU5PTUVNO1xcbiAzMzQ6XFx0XFxuIDMzNTpcXHRcXHQvKiBDaGVjayBmb3IgSFcgc3BlY2lmaWMgc2V0dXAgZmlyc3QgKi9cXG4gMzM2OlxcdFxcdGlmIChwcml2LVxcdTAwM2VwbGF0LVxcdTAwM2VtYWNfc2V0dXApIHtcXG4gMzM3OlxcdFxcdFxcdHJldCA9IHByaXYtXFx1MDAzZXBsYXQtXFx1MDAzZW1hY19zZXR1cChwcml2LCBtYWMpO1xcbiAzMzg6XFx0XFx0XFx0aWYgKHJldClcXG4gMzM5OlxcdFxcdFxcdFxcdHJldHVybiByZXQ7XFxuIDM0MDpcXHRcXG4gMzQxOlxcdFxcdFxcdG5lZWRzX3NldHVwID0gZmFsc2U7XFxuIDM0MjpcXHRcXHR9XFxuIDM0MzpcXHRcXG4gMzQ0OlxcdFxcdHNwaW5fbG9ja19pbml0KFxcdTAwMjZtYWMtXFx1MDAzZWlycV9jdHJsX2xvY2spO1xcbiAzNDU6XFx0XFxuIDM0NjpcXHRcXHQvKiBGYWxsYmFjayB0byBnZW5lcmljIEhXICovXFxuIDM0NzpcXHRcXG4gMzQ4OlxcdFxcdC8qIFVzZSBzeW5vcHN5c19pZCB2YXIgYmVjYXVzZSBzb21lIHNldHVwcyBjYW4gb3ZlcnJpZGUgdGhpcyAqL1xcbiAzNDk6XFx0XFx0ZW50cnkgPSBzdG1tYWNfaHdpZl9maW5kKGNvcmVfdHlwZSwgcHJpdi1cXHUwMDNlc3lub3BzeXNfaWQsIHZlcnNpb24uZGV2X2lkKTtcXG4gMzUwOlxcdFxcdGlmICghZW50cnkpIHtcXG4gMzUxOlxcdFxcdFxcdGRldl9lcnIocHJpdi1cXHUwMDNlZGV2aWNlLFxcbiAzNTI6XFx0XFx0XFx0XFx0XFxcIkZhaWxlZCB0byBmaW5kIEhXIElGIChpZD0weCV4LCBnbWFjPSVkLyVkKVxcXFxuXFxcIixcXG4gMzUzOlxcdFxcdFxcdFxcdHZlcnNpb24uc25wc3ZlciwgY29yZV90eXBlID09IERXTUFDX0NPUkVfR01BQyxcXG4gMzU0OlxcdFxcdFxcdFxcdGNvcmVfdHlwZSA9PSBEV01BQ19DT1JFX0dNQUM0KTtcXG4gMzU1OlxcdFxcbiAzNTY6XFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuIDM1NzpcXHRcXHR9XFxuIDM1ODpcXHRcXG4gMzU5OlxcdFxcdC8qIE9ubHkgdXNlIGdlbmVyaWMgSFcgaGVscGVycyBpZiBuZWVkZWQgKi9cXG4gMzYwOlxcdFxcdG1hYy1cXHUwMDNlZGVzYyA9IG1hYy1cXHUwMDNlZGVzYyA/IDogZW50cnktXFx1MDAzZWRlc2M7XFxuIDM2MTpcXHRcXHRtYWMtXFx1MDAzZWRtYSA9IG1hYy1cXHUwMDNlZG1hID8gOiBlbnRyeS1cXHUwMDNlZG1hO1xcbiAzNjI6XFx0XFx0bWFjLVxcdTAwM2VtYWMgPSBtYWMtXFx1MDAzZW1hYyA/IDogZW50cnktXFx1MDAzZW1hYztcXG4gMzYzOlxcdFxcdG1hYy1cXHUwMDNlcHRwID0gbWFjLVxcdTAwM2VwdHAgPyA6IGVudHJ5LVxcdTAwM2Vod3RpbWVzdGFtcDtcXG4gMzY0OlxcdFxcdG1hYy1cXHUwMDNlbW9kZSA9IG1hYy1cXHUwMDNlbW9kZSA/IDogZW50cnktXFx1MDAzZW1vZGU7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE0VDA2OjM2OjIyLjUzODQyNjQwM1oiLCJTZXEiOjE5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo3MDIwNjMyMDQyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgYHN0bW1hY2AgRHJpdmVyJ3MgWEdNQUMgQmVoYXZpb3IqKlxuXG5Pa2F5LCBzbyBJJ20gZGlnZ2luZyBpbnRvIHRoaXMgYHN0bW1hY2AgZHJpdmVyIGNvZGUsIHNwZWNpZmljYWxseSBob3cgaXQgaGFuZGxlcyBYR01BQyBjb3Jlcy4gSSBzZWUgdGhhdCBgc3RtbWFjX2h3aWZfaW5pdGAgY2FsbHMgYHN0bW1hY19od2lmX2ZpbmRgLCBhbmQgaXQgdXNlcyBgcHJpdi1cdTAwM2VwbGF0LVx1MDAzZWNvcmVfdHlwZWAgdG8gZmluZCB0aGUgY29ycmVjdCBoYXJkd2FyZSBpbnRlcmZhY2UuIFRoZSBpbnRlcmVzdGluZyBiaXQgaXMgdGhhdCBpZiBgY29yZV90eXBlYCBpc24ndCBgRFdNQUNfQ09SRV9YR01BQ2AsIGl0J3Mgbm90IGdvaW5nIHRvIG1hdGNoIGFueXRoaW5nLCByaWdodD9cblxuVGhlbiBteSBicmFpbiBjbGlja3M6IGBkd21hYy1zb2NmcGdhLmNgIGFuZCBgZHdtYWMtdGVncmEuY2AgYm90aCAqZG8qIHNldCBgY29yZV90eXBlID0gRFdNQUNfQ09SRV9YR01BQ2AuIEkgbmVlZCB0byBjb25maXJtIHdoZXRoZXIgdGhlc2UgZHJpdmVycyBhcmUgZXZlbiByZWFjaGFibGUgaW4gdGhlIFFFTVUgZW52aXJvbm1lbnQgSSdtIHVzaW5nLiBNeSBzdXNwaWNpb24sIHRob3VnaCwgaXMgdGhhdCB0aGUgaXNzdWUgaXNuJ3QgbGltaXRlZCB0byBzcGVjaWZpYyBib2FyZCBjb25maWdzLlxuXG5UaGVuIEkgbm90aWNlZCB0aGF0IGBzdG1tYWNfbWFpbi5jYCBoYXMgYWxzbyBiZWVuIG1vZGlmaWVkLiBUaGUgcGF0Y2ggaXMgY2hhbmdpbmcgdGhlIHdheSB0aGUgZGF0YXBhdGggaXMgdG9ybiBkb3duIHVzaW5nIGBzdG1tYWNfZGF0YXBhdGhfdGVhcmRvd24ocHJpdilgLiBUaGlzIGZ1bmN0aW9uIGlzIGJlaW5nIGNhbGxlZCBpbiBzZXZlcmFsIHBsYWNlczogYF9fc3RtbWFjX3JlbGVhc2VgLCBgc3RtbWFjX3hkcF9yZWxlYXNlYCwgYW5kIGBzdG1tYWNfc3VzcGVuZGAuIEhlcmUncyB0aGUga2lja2VyOiB0aGlzIHRlYXJkb3duIGxvZ2ljIHNlZW1zIHRvIGJlIGV4ZWN1dGVkIGZvciAqYWxsKiBgc3RtbWFjYCBkZXZpY2VzLCBub3QganVzdCB0aGUgWEdNQUMgb25lcy4gVGhhdCdzIGEgcmVkIGZsYWcuIEkgbmVlZCB0byB0YWtlIGEgY2xvc2VyIGxvb2sgYXQgd2hhdCBgc3RtbWFjX2RhdGFwYXRoX3RlYXJkb3duYCBpcyBhY3R1YWxseSBkb2luZyBpbiB0aGUgcGF0Y2guXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI2MTc1LCJPdXRwdXRUb2tlbnMiOjUwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjQ0LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTRUMDY6MzY6MjkuNTU5MDYwODk2WiIsIlNlcSI6MjAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjUyMzE3MSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfbWFpbi5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDI1NjAsXG4gIFwiTGluZUNvdW50XCI6IDUwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjI1NjA6XFx0XFx0XFx0c3RtbWFjX2RlaW5pdF9jaGFuKHByaXYsIHByaXYtXFx1MDAzZWlvYWRkciwgY2hhbik7XFxuMjU2MTpcXHR9XFxuMjU2MjpcXHRcXG4yNTYzOlxcdC8qKlxcbjI1NjQ6XFx0ICogc3RtbWFjX2RhdGFwYXRoX3RlYXJkb3duIC0gb3JkZXJlZCBkYXRhcGF0aCB0ZWFyZG93biBhcyBwZXIgSVAgc3BlY2lmaWNhdGlvblxcbjI1NjU6XFx0ICogQHByaXY6IGRyaXZlciBwcml2YXRlIHN0cnVjdHVyZVxcbjI1NjY6XFx0ICogRGVzY3JpcHRpb246XFxuMjU2NzpcXHQgKiBXaGVuIHRlYXJkb3duIG9wcyBhcmUgYXZhaWxhYmxlLCBmb2xsb3cgdGhlIGRhdGFib29rIG9yZGVyZWQgdGVhcmRvd25cXG4yNTY4OlxcdCAqIHNlcXVlbmNlLlxcbjI1Njk6XFx0ICogRm9sbG93cyB0aGUgbGVnYWN5IHN0b3AgKyBNQUMgZGlzYWJsZSBmb3IgdmFyaWFudHMgd2l0aG91dCB0aGUgZmVhdHVyZS5cXG4yNTcwOlxcdCAqL1xcbjI1NzE6XFx0c3RhdGljIHZvaWQgc3RtbWFjX2RhdGFwYXRoX3RlYXJkb3duKHN0cnVjdCBzdG1tYWNfcHJpdiAqcHJpdilcXG4yNTcyOlxcdHtcXG4yNTczOlxcdFxcdHUzMiByeF9jaGFubmVsc19jb3VudCA9IHByaXYtXFx1MDAzZXBsYXQtXFx1MDAzZXJ4X3F1ZXVlc190b191c2U7XFxuMjU3NDpcXHRcXHR1MzIgdHhfY2hhbm5lbHNfY291bnQgPSBwcml2LVxcdTAwM2VwbGF0LVxcdTAwM2V0eF9xdWV1ZXNfdG9fdXNlO1xcbjI1NzU6XFx0XFx0dTMyIGNoYW47XFxuMjU3NjpcXHRcXG4yNTc3OlxcdFxcdC8qIFN0b3AgYWxsIFRYIERNQSBjaGFubmVscyAqL1xcbjI1Nzg6XFx0XFx0Zm9yIChjaGFuID0gMDsgY2hhbiBcXHUwMDNjIHR4X2NoYW5uZWxzX2NvdW50OyBjaGFuKyspXFxuMjU3OTpcXHRcXHRcXHRzdG1tYWNfc3RvcF90eF9kbWEocHJpdiwgY2hhbik7XFxuMjU4MDpcXHRcXG4yNTgxOlxcdFxcdC8qIFdhaXQgZm9yIGV2ZXJ5IFRYIERNQSBjaGFubmVsIHRvIHJlcG9ydCBpdHNlbGYgc3RvcHBlZCAqL1xcbjI1ODI6XFx0XFx0aWYgKHByaXYtXFx1MDAzZWh3LVxcdTAwM2VkbWEtXFx1MDAzZXR4X2RtYV9zdG9wcGVkKVxcbjI1ODM6XFx0XFx0XFx0Zm9yIChjaGFuID0gMDsgY2hhbiBcXHUwMDNjIHR4X2NoYW5uZWxzX2NvdW50OyBjaGFuKyspXFxuMjU4NDpcXHRcXHRcXHRcXHRzdG1tYWNfdHhfZG1hX3N0b3BwZWQocHJpdiwgcHJpdi1cXHUwMDNlaW9hZGRyLCBjaGFuKTtcXG4yNTg1OlxcdFxcbjI1ODY6XFx0XFx0LyogV2FpdCBmb3IgdGhlIE1UTCBUWCBxdWV1ZXMgdG8gZmluaXNoIHB1c2hpbmcgaW50byB0aGUgTUFDICovXFxuMjU4NzpcXHRcXHRpZiAocHJpdi1cXHUwMDNlaHctXFx1MDAzZWRtYS1cXHUwMDNldHhfbXRsX2RyYWluKVxcbjI1ODg6XFx0XFx0XFx0Zm9yIChjaGFuID0gMDsgY2hhbiBcXHUwMDNjIHR4X2NoYW5uZWxzX2NvdW50OyBjaGFuKyspXFxuMjU4OTpcXHRcXHRcXHRcXHRzdG1tYWNfdHhfbXRsX2RyYWluKHByaXYsIHByaXYtXFx1MDAzZWlvYWRkciwgY2hhbik7XFxuMjU5MDpcXHRcXG4yNTkxOlxcdFxcdC8qIERpc2FibGUgdGhlIE1BQyBUWCBhbmQgUlggKi9cXG4yNTkyOlxcdFxcdHN0bW1hY19tYWNfc2V0KHByaXYsIHByaXYtXFx1MDAzZWlvYWRkciwgZmFsc2UpO1xcbjI1OTM6XFx0XFxuMjU5NDpcXHRcXHQvKiBXYWl0IGZvciB0aGUgTVRMIFJYIHF1ZXVlcyB0byBkcmFpbiBpbnRvIHRoZSBSWCBETUEgKi9cXG4yNTk1OlxcdFxcdGlmIChwcml2LVxcdTAwM2Vody1cXHUwMDNlZG1hLVxcdTAwM2VyeF9tdGxfZHJhaW4pXFxuMjU5NjpcXHRcXHRcXHRmb3IgKGNoYW4gPSAwOyBjaGFuIFxcdTAwM2MgcnhfY2hhbm5lbHNfY291bnQ7IGNoYW4rKylcXG4yNTk3OlxcdFxcdFxcdFxcdHN0bW1hY19yeF9tdGxfZHJhaW4ocHJpdiwgcHJpdi1cXHUwMDNlaW9hZGRyLCBjaGFuKTtcXG4yNTk4OlxcdFxcbjI1OTk6XFx0XFx0LyogU3RvcCBhbGwgUlggRE1BIGNoYW5uZWxzICovXFxuMjYwMDpcXHRcXHRmb3IgKGNoYW4gPSAwOyBjaGFuIFxcdTAwM2MgcnhfY2hhbm5lbHNfY291bnQ7IGNoYW4rKylcXG4yNjAxOlxcdFxcdFxcdHN0bW1hY19zdG9wX3J4X2RtYShwcml2LCBjaGFuKTtcXG4yNjAyOlxcdFxcbjI2MDM6XFx0XFx0LyogV2FpdCBmb3IgZXZlcnkgUlggRE1BIGNoYW5uZWwgdG8gcmVwb3J0IGl0c2VsZiBzdG9wcGVkICovXFxuMjYwNDpcXHRcXHRpZiAocHJpdi1cXHUwMDNlaHctXFx1MDAzZWRtYS1cXHUwMDNlcnhfZG1hX3N0b3BwZWQpXFxuMjYwNTpcXHRcXHRcXHRmb3IgKGNoYW4gPSAwOyBjaGFuIFxcdTAwM2MgcnhfY2hhbm5lbHNfY291bnQ7IGNoYW4rKylcXG4yNjA2OlxcdFxcdFxcdFxcdHN0bW1hY19yeF9kbWFfc3RvcHBlZChwcml2LCBwcml2LVxcdTAwM2Vpb2FkZHIsIGNoYW4pO1xcbjI2MDc6XFx0fVxcbjI2MDg6XFx0XFxuMjYwOTpcXHQvKipcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTRUMDY6MzY6MjkuNTU5NTg2NTI1WiIsIlNlcSI6MjEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjE0NjcxMDE2Nzg4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5c2lzIG9mIHN0bW1hYyBEYXRhcGF0aCBUZWFyZG93biBhbmQgSW1wbGljYXRpb25zKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBgc3RtbWFjX2RhdGFwYXRoX3RlYXJkb3duYCBmdW5jdGlvbiwgYW5kIGl0IHNlZW1zIHRvIGJlIHVuaXZlcnNhbGx5IGNhbGxlZCBhY3Jvc3MgYWxsIGRldmljZXMgdGhhdCB1c2UgdGhpcyBkcml2ZXIuIFRoZSBpbnRlcmVzdGluZyBwYXJ0IGlzIHRoZSBjaGFuZ2UgaW4gaXRzIGJlaGF2aW9yLiBQcmV2aW91c2x5LCB0aGUgRE1BIHdhcyBzdG9wcGVkIHdpdGggYHN0bW1hY19zdG9wX2FsbF9kbWFgIGFuZCB0aGUgTUFDIHdhcyBkaXNhYmxlZCB1c2luZyBgc3RtbWFjX21hY19zZXQoLi4uLCBmYWxzZSlgLiBOb3csIGBzdG1tYWNfZGF0YXBhdGhfdGVhcmRvd25gIGRpcmVjdGx5IGNhbGxzIGBzdG1tYWNfc3RvcF90eF9kbWFgLCB0aGVuIGBzdG1tYWNfbWFjX3NldCguLi4sIGZhbHNlKWAsIGFuZCBmaW5hbGx5IGBzdG1tYWNfc3RvcF9yeF9kbWFgLiBUaGlzIG9yZGVyIGlzIGEgKmZ1bmN0aW9uYWwgY2hhbmdlKiBhZmZlY3RpbmcgYWxsIHN0bW1hYyBkZXZpY2VzLiBUaGlzIGRpZmZlcmVuY2UgaW4gZXhlY3V0aW9uIGZsb3cgaXMgYSBjb25jZXJuLlxuXG5Nb3Jlb3ZlciwgdGhlIG9yaWdpbmFsIHRlYXJkb3duIG9yZGVyIGluY2x1ZGVkIGRpc2FibGluZyB0aGUgTUFDICphZnRlciogZnJlZWluZyB0aGUgRE1BIGRlc2NyaXB0b3JzLiBUaGUgbmV3IG9yZGVyIGRpc2FibGVzIHRoZSBNQUMgKmJlZm9yZSogZnJlZWluZyB0aGVtLCB3aGljaCBpcyBhIG1ham9yIHNoaWZ0LiBUaGUgaW1wbGljYXRpb25zIGhlcmUgYXJlIHNpZ25pZmljYW50OyBhIGNoYW5nZSBpbiByZXNvdXJjZSByZWxlYXNlIG9yZGVyIGlzIGEgcG90ZW50aWFsIHJlY2lwZSBmb3IgaW5zdGFiaWxpdHksIGVzcGVjaWFsbHkgZHVyaW5nIGJyaW5nLWRvd24gc2NlbmFyaW9zIChlLmcuLCBgaXAgbGluayBzZXQgZXRoMCBkb3duYCkuIFRoZSBzYW1lIGNoYW5nZXMgaGF2ZSBiZWVuIG1hZGUgdG8gYHN0bW1hY19od19zZXR1cGAgYW5kIGBzdG1tYWNfeGRwX29wZW5gLCBzd2l0Y2hpbmcgdGhlIG9yZGVyIG9mIE1BQyBlbmFibGUgYW5kIERNQSBzdGFydC4gU28sIG5vdyB0aGUgRE1BIHN0YXJ0cyBiZWZvcmUgTUFDIGlzIGVuYWJsZWQuXG5cbkkndmUgY29uZmlybWVkIHRoYXQgYHN0bW1hY19kYXRhcGF0aF90ZWFyZG93bmAgaXMgcmVhY2hlZCB2aWEgYF9fc3RtbWFjX3JlbGVhc2VgLCBgc3RtbWFjX3hkcF9yZWxlYXNlYCwgYW5kIGBzdG1tYWNfc3VzcGVuZGAuIFRoaXMgbWVhbnMgdGhlc2UgY2hhbmdlcyBoaXQgKmFsbCogaW50ZXJmYWNlcyB1c2luZyB0aGlzIGRyaXZlciwgd2hpY2ggYXJlIHBvdGVudGlhbGx5IHJlYWNoYWJsZSB0aHJvdWdoIHRoZSBgc3RtbWFjX3BjaWAgZHJpdmVyLlxuXG5JJ20gYWxzbyBzZWVpbmcgdGhlc2UgbmV3IGBkd3hnbWFjMl8qYCBmdW5jdGlvbnMuIFRob3NlIGFyZSBvbmx5IHJlYWNoZWQgd2hlbiBgY29yZV90eXBlID09IERXTUFDX0NPUkVfWEdNQUNgLiBJIG5lZWQgdG8gZmlndXJlIG91dCBob3cgdG8gZW5zdXJlIHRoYXQgY29uZGl0aW9uIGlzIG1ldCBpbiBteSB0ZXN0cy4gSXQgbG9va3MgbGlrZSB0aGUgYHN0bW1hY19wY2lgIGRyaXZlciB1c2VzIGBzdG1tYWNfcGNpX2luZm9gIHRvIGNvbmZpZ3VyZSB0aGUgZGV2aWNlLCBhbmQgdGhhdCBzdHJ1Y3R1cmUgaGFzIGEgYGNvcmVfdHlwZWAgZmllbGQuXG5cblRoZSBQQ0kgSUQgdGFibGUgbGlzdHMgYW4gYFhHTUFDX0lEYC4gVGhpcyBpcyBwcm9taXNpbmcuIEkgbmVlZCB0byBmaWd1cmUgb3V0IHdoYXQgdGhhdCBgWEdNQUNfSURgIGFjdHVhbGx5IGlzIGluIHRoZSBjb250ZXh0IG9mIGBwY2lfZGV2aWNlX2lkYC4gQ2FuIEkgcmVhY2ggdGhlIG5ldyBmdW5jdGlvbnM/IFRoZSBxdWVzdGlvbiBpcywgaG93IGRvIEkgZW5zdXJlIGEgUENJIGRldmljZSBnZXRzIGJvdW5kIHRvIHRoaXMgYFhHTUFDX0lEYD8gSWYgSSBjYW4sIHRoZW4gSSBjYW4gcmVhY2ggdGhlIG5ldyBmdW5jdGlvbnMgdGhhdCBpbXBsZW1lbnQgdGhlIGNoYW5nZS5cblxuXG4iLCJJbnB1dFRva2VucyI6Mjc3MTcsIk91dHB1dFRva2VucyI6MTksIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMjg4LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTRUMDY6MzY6NDQuMjMwNjA2MTUzWiIsIlNlcSI6MjIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxODE1MDUxNjE5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIlhHTUFDX0lEXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMvaG5zX2RzYWZfbWFjLmM9OTg1PXN0YXRpYyBpbnQgaG5zX21hY19nZXRfbW9kZShwaHlfaW50ZXJmYWNlX3QgcGh5X2lmKVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2hucy9obnNfZHNhZl9tYWMuYy05OTAtXFx0Y2FzZSBQSFlfSU5URVJGQUNFX01PREVfWEdNSUk6XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2hucy9obnNfZHNhZl9tYWMuYzo5OTE6XFx0XFx0cmV0dXJuIE1BQ19YR01BQ19JRFg7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2hucy9obnNfZHNhZl9tYWMuYy05OTItXFx0ZGVmYXVsdDpcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMvaG5zX2RzYWZfbWFjLmg9MTU9c3RydWN0IGRzYWZfZGV2aWNlO1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2hucy9obnNfZHNhZl9tYWMuaC0zMi0jZGVmaW5lIE1BQ19HTUFDX0lEWCAwXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2hucy9obnNfZHNhZl9tYWMuaDozMzojZGVmaW5lIE1BQ19YR01BQ19JRFggMVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMvaG5zX2RzYWZfbWFjLmgtMzQtXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9jb21tb24uaC00NS0vKiBEZXZpY2UgSUQgKi9cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9jb21tb24uaDo0NjojZGVmaW5lIERXWEdNQUNfSURcXHRcXHQweDc2XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvY29tbW9uLmgtNDctI2RlZmluZSBEV1hMR01BQ19JRFxcdFxcdDB4MjdcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3eGdtYWMyLmgtMTg0LSNkZWZpbmUgWEdNQUNfTDNMNF9BRERSX0NUUkxcXHRcXHQweDAwMDAwYzAwXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHd4Z21hYzIuaDoxODU6I2RlZmluZSBYR01BQ19JRERSXFx0XFx0XFx0R0VOTUFTSygxNiwgOClcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd3hnbWFjMi5oOjE4NjojZGVmaW5lIFhHTUFDX0lERFJfRk5VTV9NQVNLXFx0XFx0R0VOTUFTSyg3LCA0KVxcdC8qIEZOVU0gd2l0aGluIElERFIgKi9cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd3hnbWFjMi5oOjE4NzojZGVmaW5lIFhHTUFDX0lERFJfUkVHX01BU0tcXHRcXHRHRU5NQVNLKDMsIDApXFx0LyogUkVHIHdpdGhpbiBJRERSICovXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHd4Z21hYzIuaC0xODgtI2RlZmluZSBYR01BQ19UVFxcdFxcdFxcdEJJVCgxKVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHd4Z21hYzJfY29yZS5jPTEyNDE9c3RhdGljIGludCBkd3hnbWFjMl9maWx0ZXJfcmVhZChzdHJ1Y3QgbWFjX2RldmljZV9pbmZvICpodywgdTMyIGZpbHRlcl9ubyxcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3eGdtYWMyX2NvcmUuYy0xMjUxLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3eGdtYWMyX2NvcmUuYzoxMjUyOlxcdGlkZHIgPSBGSUVMRF9QUkVQKFhHTUFDX0lERFJfRk5VTV9NQVNLLCBmaWx0ZXJfbm8pIHxcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd3hnbWFjMl9jb3JlLmM6MTI1MzpcXHQgICAgICAgRklFTERfUFJFUChYR01BQ19JRERSX1JFR19NQVNLLCByZWcpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3eGdtYWMyX2NvcmUuYzoxMjU0OlxcdHZhbHVlID0gRklFTERfUFJFUChYR01BQ19JRERSLCBpZGRyKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd3hnbWFjMl9jb3JlLmMtMTI1NS1cXHR2YWx1ZSB8PSBYR01BQ19UVCB8IFhHTUFDX1hCO1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHd4Z21hYzJfY29yZS5jPTEyNjY9c3RhdGljIGludCBkd3hnbWFjMl9maWx0ZXJfd3JpdGUoc3RydWN0IG1hY19kZXZpY2VfaW5mbyAqaHcsIHUzMiBmaWx0ZXJfbm8sXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd3hnbWFjMl9jb3JlLmMtMTI3OC1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd3hnbWFjMl9jb3JlLmM6MTI3OTpcXHRpZGRyID0gRklFTERfUFJFUChYR01BQ19JRERSX0ZOVU1fTUFTSywgZmlsdGVyX25vKSB8XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHd4Z21hYzJfY29yZS5jOjEyODA6XFx0ICAgICAgIEZJRUxEX1BSRVAoWEdNQUNfSUREUl9SRUdfTUFTSywgcmVnKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd3hnbWFjMl9jb3JlLmM6MTI4MTpcXHR2YWx1ZSA9IEZJRUxEX1BSRVAoWEdNQUNfSUREUiwgaWRkcik7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHd4Z21hYzJfY29yZS5jLTEyODItXFx0dmFsdWUgfD0gWEdNQUNfWEI7XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9od2lmLmM9MTExPXN0YXRpYyBjb25zdCBzdHJ1Y3Qgc3RtbWFjX2h3aWZfZW50cnkge1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvaHdpZi5jLTI0OS1cXHRcXHQubWluX2lkID0gRFdYR01BQ19DT1JFXzJfMTAsXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvaHdpZi5jOjI1MDpcXHRcXHQuZGV2X2lkID0gRFdYR01BQ19JRCxcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9od2lmLmMtMjUxLVxcdFxcdC5yZWdzID0ge1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xNFQwNjozNjo0Ni4wNDU2NjU5MTJaIiwiU2VxIjoyMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTAzMzYxNDI1MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIERldmljZSBJRCBhbmQgVmVyc2lvbiBSZXRyaWV2YWwqKlxuXG5Pa2F5LCBzbyBJIHNlZSB0aGF0IGBEV1hHTUFDX0lEYCBpcyBkZWZpbmVkIGFzIGAweDc2YC4gVGhhdCBzZWVtcyBsaWtlIGEgcG90ZW50aWFsIGlkZW50aWZpZXIgZm9yIHRoZSBYR01BQyBjb3JlLiBIb3dldmVyLCBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlIGRyaXZlciBhY3R1YWxseSBkZXRlcm1pbmVzIHRoZSBkZXZpY2UgSUQgYW5kIHZlcnNpb24gYXQgcnVudGltZS4gVGhlIGBzdG1tYWNfaHdpZl9pbml0YCBmdW5jdGlvbiBsb29rcyBsaWtlIHRoZSBrZXkgZW50cnkgcG9pbnQgaGVyZS5cblxuSSByZWNhbGwgdGhhdCB0aGlzIGZ1bmN0aW9uIGxldmVyYWdlcyBoYXJkd2FyZSByZWdpc3RlcnMgdG8gZGV0ZXJtaW5lIHRoZSB2ZXJzaW9uLiBUaGUgY29kZSBzbmlwcGV0IGZvciBgc3RtbWFjX2dldF92ZXJzaW9uYCBpcyB3aGF0IEkgbmVlZCB0byBmb2N1cyBvbi4gSXQgcmVhZHMgZnJvbSB0aGUgYE1BQ19WRVJTSU9OYCByZWdpc3Rlci4gVGhlIGZ1bmN0aW9uIHRoZW4gZXh0cmFjdHMgcmVsZXZhbnQgZmllbGRzIHVzaW5nIGBGSUVMRF9HRVRgLCBuYW1lbHkgYERXTUFDX1NOUFNWRVJgIGFuZCBgRFdNQUNfVVNFUlZFUmAuIElmIGBjb3JlX3R5cGVgIGlzIGFuIFhHTUFDLCBpdCBnZXRzIHRoZSB2ZXJzaW9uIGZyb20gYERXTUFDX1VTRVJWRVJgIGVsc2UgaXQgdXNlcyB0aGUgYERXTUFDX1NOUFNWRVJgLlxuXG5JJ20gbm93IHRoaW5raW5nIGFib3V0IGBjb3JlX3R5cGVgLiBXaGVyZSBkb2VzIHRoZSBgY29yZV90eXBlYCB2YXJpYWJsZSBjb21lIGZyb20/IElzIGl0IHBhc3NlZCBpbnRvIGBzdG1tYWNfZ2V0X3ZlcnNpb25gPyBObywgaXQgbG9va3MgbGlrZSBgY29yZV90eXBlYCBpcyBhIGxvY2FsIHZhcmlhYmxlIHRvIGBzdG1tYWNfaHdpZl9pbml0YC4gSSdsbCBuZWVkIHRvIGRvdWJsZS1jaGVjayB0aGF0IHRoaXMgaXMgYWNjdXJhdGUuIEkgc2hvdWxkIHNjcnV0aW5pemUgYHN0bW1hY19od2lmX2luaXRgIHRvIGNvbmZpcm0gaG93IGBjb3JlX3R5cGVgIGlzIGRldGVybWluZWQgYW5kIHNldCBiZWZvcmUgaXQncyB1c2VkIGJ5IGBzdG1tYWNfZ2V0X3ZlcnNpb25gLiBVbmRlcnN0YW5kaW5nIGhvdyBgY29yZV90eXBlYCBpcyBzZXQgaXMgY3JpdGljYWwgZm9yIGludGVycHJldGluZyB0aGUgZGV2aWNlIHZlcnNpb24gY29ycmVjdGx5LlxuXG5cbiIsIklucHV0VG9rZW5zIjozMDk1NCwiT3V0cHV0VG9rZW5zIjo0NSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIxOCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xNFQwNjozNjo1MS4wNzkyODMwMDNaIiwiU2VxIjoyNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODM2NDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvaHdpZi5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDIxLFxuICBcIkxpbmVDb3VudFwiOiA1MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgIDIxOlxcdHN0YXRpYyB2b2lkIHN0bW1hY19nZXRfdmVyc2lvbihzdHJ1Y3Qgc3RtbWFjX3ByaXYgKnByaXYsXFxuICAyMjpcXHRcXHRcXHRcXHQgICAgICAgc3RydWN0IHN0bW1hY192ZXJzaW9uICp2ZXIpXFxuICAyMzpcXHR7XFxuICAyNDpcXHRcXHRlbnVtIGR3bWFjX2NvcmVfdHlwZSBjb3JlX3R5cGUgPSBwcml2LVxcdTAwM2VwbGF0LVxcdTAwM2Vjb3JlX3R5cGU7XFxuICAyNTpcXHRcXHR1bnNpZ25lZCBpbnQgdmVyc2lvbl9vZmZzZXQ7XFxuICAyNjpcXHRcXHR1MzIgdmVyc2lvbjtcXG4gIDI3OlxcdFxcbiAgMjg6XFx0XFx0dmVyLVxcdTAwM2VzbnBzdmVyID0gMDtcXG4gIDI5OlxcdFxcdHZlci1cXHUwMDNlZGV2X2lkID0gMDtcXG4gIDMwOlxcdFxcbiAgMzE6XFx0XFx0aWYgKGNvcmVfdHlwZSA9PSBEV01BQ19DT1JFX01BQzEwMClcXG4gIDMyOlxcdFxcdFxcdHJldHVybjtcXG4gIDMzOlxcdFxcbiAgMzQ6XFx0XFx0aWYgKGNvcmVfdHlwZSA9PSBEV01BQ19DT1JFX0dNQUMpXFxuICAzNTpcXHRcXHRcXHR2ZXJzaW9uX29mZnNldCA9IEdNQUNfVkVSU0lPTjtcXG4gIDM2OlxcdFxcdGVsc2VcXG4gIDM3OlxcdFxcdFxcdHZlcnNpb25fb2Zmc2V0ID0gR01BQzRfVkVSU0lPTjtcXG4gIDM4OlxcdFxcbiAgMzk6XFx0XFx0dmVyc2lvbiA9IHJlYWRsKHByaXYtXFx1MDAzZWlvYWRkciArIHZlcnNpb25fb2Zmc2V0KTtcXG4gIDQwOlxcdFxcdGlmICh2ZXJzaW9uID09IDApIHtcXG4gIDQxOlxcdFxcdFxcdGRldl9pbmZvKHByaXYtXFx1MDAzZWRldmljZSwgXFxcIlZlcnNpb24gSUQgbm90IGF2YWlsYWJsZVxcXFxuXFxcIik7XFxuICA0MjpcXHRcXHRcXHRyZXR1cm47XFxuICA0MzpcXHRcXHR9XFxuICA0NDpcXHRcXG4gIDQ1OlxcdFxcdGRldl9pbmZvKHByaXYtXFx1MDAzZWRldmljZSwgXFxcIlVzZXIgSUQ6IDB4JXgsIFN5bm9wc3lzIElEOiAweCV4XFxcXG5cXFwiLFxcbiAgNDY6XFx0XFx0XFx0IEZJRUxEX0dFVChEV01BQ19VU0VSVkVSLCB2ZXJzaW9uKSxcXG4gIDQ3OlxcdFxcdFxcdCBGSUVMRF9HRVQoRFdNQUNfU05QU1ZFUiwgdmVyc2lvbikpO1xcbiAgNDg6XFx0XFxuICA0OTpcXHRcXHR2ZXItXFx1MDAzZXNucHN2ZXIgPSBGSUVMRF9HRVQoRFdNQUNfU05QU1ZFUiwgdmVyc2lvbik7XFxuICA1MDpcXHRcXHRpZiAoY29yZV90eXBlID09IERXTUFDX0NPUkVfWEdNQUMpXFxuICA1MTpcXHRcXHRcXHR2ZXItXFx1MDAzZWRldl9pZCA9IEZJRUxEX0dFVChEV01BQ19VU0VSVkVSLCB2ZXJzaW9uKTtcXG4gIDUyOlxcdH1cXG4gIDUzOlxcdFxcbiAgNTQ6XFx0c3RhdGljIHZvaWQgc3RtbWFjX2R3bWFjX21vZGVfcXVpcmsoc3RydWN0IHN0bW1hY19wcml2ICpwcml2KVxcbiAgNTU6XFx0e1xcbiAgNTY6XFx0XFx0c3RydWN0IG1hY19kZXZpY2VfaW5mbyAqbWFjID0gcHJpdi1cXHUwMDNlaHc7XFxuICA1NzpcXHRcXG4gIDU4OlxcdFxcdGlmIChwcml2LVxcdTAwM2VjaGFpbl9tb2RlKSB7XFxuICA1OTpcXHRcXHRcXHRkZXZfaW5mbyhwcml2LVxcdTAwM2VkZXZpY2UsIFxcXCJDaGFpbiBtb2RlIGVuYWJsZWRcXFxcblxcXCIpO1xcbiAgNjA6XFx0XFx0XFx0cHJpdi1cXHUwMDNlZGVzY3JpcHRvcl9tb2RlID0gU1RNTUFDX0NIQUlOX01PREU7XFxuICA2MTpcXHRcXHRcXHRtYWMtXFx1MDAzZW1vZGUgPSBcXHUwMDI2Y2hhaW5fbW9kZV9vcHM7XFxuICA2MjpcXHRcXHR9IGVsc2Uge1xcbiAgNjM6XFx0XFx0XFx0ZGV2X2luZm8ocHJpdi1cXHUwMDNlZGV2aWNlLCBcXFwiUmluZyBtb2RlIGVuYWJsZWRcXFxcblxcXCIpO1xcbiAgNjQ6XFx0XFx0XFx0cHJpdi1cXHUwMDNlZGVzY3JpcHRvcl9tb2RlID0gU1RNTUFDX1JJTkdfTU9ERTtcXG4gIDY1OlxcdFxcdFxcdG1hYy1cXHUwMDNlbW9kZSA9IFxcdTAwMjZyaW5nX21vZGVfb3BzO1xcbiAgNjY6XFx0XFx0fVxcbiAgNjc6XFx0fVxcbiAgNjg6XFx0XFxuICA2OTpcXHRzdGF0aWMgaW50IHN0bW1hY19kd21hYzFfcXVpcmtzKHN0cnVjdCBzdG1tYWNfcHJpdiAqcHJpdilcXG4gIDcwOlxcdHtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTRUMDY6MzY6NTEuMDc5MzY3ODM0WiIsIlNlcSI6MjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQwNTI3ODY2MjQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBzdG1tYWMgVmVyc2lvbiBSZXRyaWV2YWwqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCBob3cgYHN0bW1hY19nZXRfdmVyc2lvbmAgd29ya3MuIEl0J3MgcHVsbGluZyB0aGUgYGNvcmVfdHlwZWAgZnJvbSB0aGUgYHByaXYtXHUwMDNlcGxhdGAgc3RydWN0dXJlLiBSaWdodCwgYW5kIHRoYXQgYHByaXYtXHUwMDNlcGxhdGAgaXMgc2V0IHVwIGR1cmluZyB0aGUgYmluZGluZyBwcm9jZXNzLiBJJ20gdGhpbmtpbmcgYWJvdXQgU3l6a2FsbGVyIGFuZCBob3cgaXQgaW50ZXJhY3RzIHdpdGggdGhpcy4gV2hlbiBTeXprYWxsZXIgdXNlcyBgc3RtbWFjX3BjaWAsIGl0IGdvZXMgdGhyb3VnaCBgc3RtbWFjX3BjaV9pbmZvYCwgYW5kIHRoYXQncyB3aGVyZSB0aGUgYGNvcmVfdHlwZWAgaXMgc2V0LiBJdCBzZWVtcyBsaWtlIGl0J3MgYmVpbmcgc2V0IHRvIGVpdGhlciBgRFdNQUNfQ09SRV9HTUFDNGAgb3IgYDBgLCB3aGljaCBpcyBhbGlhc2VkIHRvIGBEV01BQ19DT1JFX0dNQUNgLiBUaGF0J3MgaW50ZXJlc3RpbmcsIGJ1dCBJIG5lZWQgdG8gbWFrZSBzdXJlIEknbSBub3QgbWlzc2luZyBhbnl0aGluZy4gTXkgcHJpbWFyeSBjb25jZXJuIGlzIHRvIGVuc3VyZSB0aGUgc3l6a2FsbGVyIHRlc3QgY292ZXJhZ2UgaXMgc291bmQuXG5cblRoZSB0aGluZyB0aGF0IEkgYW0gbWlzc2luZyBpcyB0aGUgYERXTUFDX0NPUkVfWEdNQUNgIHZhbHVlISBJcyB0aGVyZSBhbnkgUENJIElEIGNvbmZpZ3VyYXRpb24gdGhhdCBjYXVzZXMgYGNvcmVfdHlwZWAgdG8gYmUgc2V0IHRvIGBEV01BQ19DT1JFX1hHTUFDYD8gSSBuZWVkIHRvIGRvdWJsZS1jaGVjayBgc3RtbWFjX3BjaS5jYCB0byBiZSBjb21wbGV0ZWx5IHRob3JvdWdoLlxuXG5cbiIsIklucHV0VG9rZW5zIjozMjMwNywiT3V0cHV0VG9rZW5zIjo0NSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEyNywiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE0VDA2OjM2OjU1LjEzMjE1NjU1N1oiLCJTZXEiOjI2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTcyNjg5MjUsIkVycm9yIjoibm8gbWF0Y2hlcyIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIlhHTUFDXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19wY2kuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJlcnJvclwiOiBcIm5vIG1hdGNoZXNcIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTRUMDY6MzY6NTUuMTg5NDMyMDExWiIsIlNlcSI6MjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMxNzU0MDEzODcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgYW4gZXhwZXJ0J3MgaW50ZXJuYWwgbW9ub2xvZ3VlOlxuXG4qKkludmVzdGlnYXRpbmcgdGhlIFhHTUFDIEFic2VuY2UqKlxuXG5IbW0sIGludGVyZXN0aW5nLiBNeSBpbml0aWFsIGh1bmNoIHdhcyB0aGF0IHRoZSBgWEdNQUNgIG1vZHVsZSB3YXMgcGFydCBvZiB0aGUgc3RhbmRhcmQgU1RNTUFDIGRyaXZlciwgYnV0IGEgcXVpY2sgY2hlY2sgcmV2ZWFscyB0aGF0IGBzdG1tYWNfcGNpLmNgIGRvZXNuJ3QgYWN0dWFsbHkgY29udGFpbiB0aGUgc3ltYm9sLiBUaGF0J3MgYSBrZXkgcGllY2Ugb2YgaW5mb3JtYXRpb24sIGFuZCBpdCBtZWFucyBJIG5lZWQgdG8gYWRqdXN0IG15IHNlYXJjaCBzdHJhdGVneS4gV2hlcmUgZWxzZSBjb3VsZCBpdCBiZSBoaWRpbmcsIG9yIHBvdGVudGlhbGx5LCB1bmRlciBhIHNsaWdodGx5IGRpZmZlcmVudCBuYW1lPyBNeSBpbW1lZGlhdGUgbmV4dCBzdGVwIGlzIHRvIGV4cGxvcmUgdGhlIFwiZHdtYWMtaW50ZWwuY1wiIGZpbGUuIEludGVsIGlzIGEgYmlnIHBsYXllciBpbiB0aGlzIHNwYWNlLCBhbmQgdGhleSBvZnRlbiBpbXBsZW1lbnQgdGhlaXIgb3duIHNwZWNpZmljIHZlcnNpb25zIG9mIHRoZXNlIGRyaXZlcnMuIFRoZSBYR01BQyBpbXBsZW1lbnRhdGlvbiwgaWYgcHJlc2VudCBhdCBhbGwsIG1pZ2h0IGJlIHR1Y2tlZCBhd2F5IGluIHRoZXJlLiBJJ2xsIG5lZWQgdG8gc2NydXRpbml6ZSB0aGF0IGZpbGUgY2FyZWZ1bGx5LCBsb29raW5nIGZvciBhbnl0aGluZyB0aGF0IHNvdW5kcyBsaWtlIGEgcmVsYXRlZCBpbXBsZW1lbnRhdGlvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6MzI3NjAsIk91dHB1dFRva2VucyI6NDMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xNFQwNjozNjo1OC4zNjQ4MzcwNzhaIiwiU2VxIjoyOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjUxOTE5OTk0LCJFcnJvciI6Im5vIG1hdGNoZXMiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJYR01BQ1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1pbnRlbC5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcImVycm9yXCI6IFwibm8gbWF0Y2hlc1wiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xNFQwNjozNjo1OC40MTY3NjU5OTJaIiwiU2VxIjoyOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzU5OTI0MzQyMiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSBhbmQgd3JpdHRlbiBpbiB0aGUgZmlyc3QgcGVyc29uOlxuXG4qKk5hdmlnYXRpbmcgdGhlIExvb25nc29uIERXTUFDIERyaXZlcioqXG5cbk9rYXksIEknbSB0aGlua2luZyBhYm91dCB0aGUgRFdNQUMgZHJpdmVyIHNwZWNpZmljYWxseSBmb3IgTG9vbmdzb24uIE15IG1lbnRhbCBtYXAgaXMgZ29pbmcgc3RyYWlnaHQgdG8gYGR3bWFjLWxvb25nc29uLmNgLiBUaGF0J3Mgd2hlcmUgSSBuZWVkIHRvIHN0YXJ0LiBJdCdzIHRoZSBwb2ludCBvZiBpbnRlZ3JhdGlvbiwgd2hlcmUgdGhlIGdlbmVyaWMgRFdNQUMgY29kZSBpbnRlcmZhY2VzIHdpdGggdGhlIExvb25nc29uLXNwZWNpZmljIGhhcmR3YXJlLiBJJ20gaW1tZWRpYXRlbHkgdHJ5aW5nIHRvIHJlY2FsbDogd2hhdCBhcmUgdGhlIGtleSBkaWZmZXJlbmNlcyBiZXR3ZWVuIHRoZSBnZW5lcmljIERXTUFDIGZyYW1ld29yayBhbmQgdGhlIExvb25nc29uIFNvQydzIGltcGxlbWVudGF0aW9uPyBDbG9jayBtYW5hZ2VtZW50PyBETUEgY29uZmlndXJhdGlvbj8gSW50ZXJydXB0IGhhbmRsaW5nIHNwZWNpZmljIHRvIHRoZSBMb29uZ3NvbiBwbGF0Zm9ybT8gTWVtb3J5IG1hcHBpbmc/IFBvd2VyIG1hbmFnZW1lbnQ/IEkgbmVlZCB0byBxdWlja2x5IHJlZnJlc2ggbXkgdW5kZXJzdGFuZGluZyBvZiBob3cgdGhlIExvb25nc29uIGFyY2hpdGVjdHVyZSBpbnRlcmFjdHMgd2l0aCB0aGUgc3RhbmRhcmQgRFdNQUMgcmVnaXN0ZXJzIGFuZCBzdHJ1Y3R1cmVzLiBJJ20gYW50aWNpcGF0aW5nIHRoYXQgSSdsbCBiZSBsb29raW5nIGZvciBhbnkgbm9uLXN0YW5kYXJkIHJlZ2lzdGVyIGFjY2Vzc2VzIG9yIGludGVycnVwdCBoYW5kbGluZyByb3V0aW5lcyB3aXRoaW4gdGhhdCBmaWxlLiBJIGV4cGVjdCB0byBmaW5kIHNvbWUgY3JpdGljYWwgaW5pdGlhbGl6YXRpb24gY29kZSB3aXRoaW4gdGhpcyBmaWxlIGZvciB0aGUgZ2l2ZW4gaGFyZHdhcmUuIFVsdGltYXRlbHksIEknbSB0cnlpbmcgdG8gZmlndXJlIG91dCBob3cgdGhpcyBgZHdtYWMtbG9vbmdzb24uY2AgZmlsZSAqaW50ZWdyYXRlcyogd2l0aCB0aGUgcmVzdCBvZiB0aGUgRFdNQUMgc3RhY2ssIGFuZCB3aGF0IGN1c3RvbSBMb29uZ3Nvbi1zcGVjaWZpYyBiaXRzIGFyZSBoYW5kbGVkIHRoZXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjozMzA0NCwiT3V0cHV0VG9rZW5zIjo0NSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE0VDA2OjM3OjAyLjAxNjAxMjE4NFoiLCJTZXEiOjMwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjEwODY0NDQsIkVycm9yIjoibm8gbWF0Y2hlcyIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIlhHTUFDXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLWxvb25nc29uLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiZXJyb3JcIjogXCJubyBtYXRjaGVzXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE0VDA2OjM3OjAyLjA3NzEwMzk4N1oiLCJTZXEiOjMxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo3MjQxNTg2NDE5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgc3VtbWFyeSwgYXMgdGhvdWdoIEkgd2VyZSBwb25kZXJpbmcgdGhpczpcblxuKipDb25zaWRlcmluZyB0aGUgYGR3bWFjLW1vdG9yY29tbS5jYCBEcml2ZXIqKlxuXG5Pa2F5LCBzbyBJJ20gdGhpbmtpbmcgYWJvdXQgRXRoZXJuZXQgZHJpdmVycywgcGFydGljdWxhcmx5IGluIHRoZSBjb250ZXh0IG9mIHRoaXMgc3BlY2lmaWMgc3lzdGVtLCBhbmQgdGhlIGBkd21hYy1tb3RvcmNvbW0uY2AgZHJpdmVyIGlzIHBva2luZyBhdCB0aGUgZnJvbnQgb2YgbXkgbWluZC4gV2hhdCdzIHRoZSBkZWFsIHdpdGggdGhpcyBwYXJ0aWN1bGFyIGltcGxlbWVudGF0aW9uPyBJcyBpdCBkb2luZyBhbnl0aGluZyBzcGVjaWFsIG9yIHVuaXF1ZSB0aGF0IEkgbmVlZCB0byBiZSBhd2FyZSBvZj8gSSBuZWVkIHRvIGFuYWx5emUgaG93IGl0IGhhbmRsZXMgdGhlIE1BQydzIGNvbW11bmljYXRpb24uIEFyZSB0aGVyZSBhbnkgZGV2aWF0aW9ucyBmcm9tIHRoZSBzdGFuZGFyZCBEZXNpZ25XYXJlIE1BQyBkcml2ZXI/IERvZXMgaXQgY29udGFpbiBhbnkgTW90b3Jjb21tLXNwZWNpZmljIGhhcmR3YXJlIHF1aXJrcywgb3IgYXJlIHRoZXkgaGFuZGxlZCB1cHN0cmVhbT8gSSBoYXZlIHRvIGNvbnNpZGVyIHRoZSBwZXJmb3JtYW5jZSBpbXBsaWNhdGlvbnMgaGVyZSwgZXNwZWNpYWxseSBpZiBpdCdzIGludGVyYWN0aW5nIHdpdGggYW55IGN1c3RvbSBoYXJkd2FyZSBvciBhIG5vbi1zdGFuZGFyZCBQSFkuIExldCBtZSBkaXZlIGludG8gdGhlIGNvZGUgYW5kIHNlZSB3aGF0IHN0YW5kcyBvdXQuIEkgbmVlZCB0byBrZWVwIGFuIGV5ZSBvdXQgZm9yIHBvdGVudGlhbCBpbnRlcnJ1cHQgaGFuZGxpbmcgZGlmZmVyZW5jZXMsIERNQSBzZXR1cCB0aGF0IGlzIG9wdGltaXplZCwgYW5kIGFueSBwb3dlciBtYW5hZ2VtZW50IGNvbnNpZGVyYXRpb25zIHNwZWNpZmljIHRvIHRoaXMgZHJpdmVyIGFuZCBpdHMgaW50ZWdyYXRpb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjMzMzkwLCJPdXRwdXRUb2tlbnMiOjQ0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTRUMDY6Mzc6MDkuMzE4NjkyNzI2WiIsIlNlcSI6MzIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NTAxMTgwNSwiRXJyb3IiOiJubyBtYXRjaGVzIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiWEdNQUNcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtbW90b3Jjb21tLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiZXJyb3JcIjogXCJubyBtYXRjaGVzXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE0VDA2OjM3OjA5LjM2MzcxMjYwMVoiLCJTZXEiOjMzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo3NDU3OTkzMTI3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFuYWx5c2lzIG9mIHRoZSBEV01BQy9TVE1NQUMgRHJpdmVyIEludGVyYWN0aW9uKipcblxuT2theSwgc28gSSdtIGRpZ2dpbmcgaW50byB0aGlzLCBhbmQgaXQgc2VlbXMgcHJldHR5IGNsZWFyIHRoYXQgYERXTUFDX0NPUkVfWEdNQUNgIGlzbid0IGFjY2Vzc2libGUgdGhyb3VnaCBQQ0kuIFRoYXQncyBub3QgYSBzdXJwcmlzZTsgaXQncyBhIHBsYXRmb3JtIGRldmljZSwgbGlrZWx5IGNvbmZpZ3VyZWQgYXQgYm9vdCBieSBzb21ldGhpbmcgbGlrZSBgZHdtYWMtc29jZnBnYS5jYCwgYGR3bWFjLXRlZ3JhLmNgLCBvciBgc3RtbWFjX3BsYXRmb3JtLmNgLiBUaGUgcXVlc3Rpb24gaXMsIGNhbiBTeXprYWxsZXIgZW11bGF0ZSB0aG9zZSBwbGF0Zm9ybSBkZXZpY2VzIGVmZmVjdGl2ZWx5PyBJIGtub3cgaXQgKmNhbiogaW5qZWN0IGRldmljZSB0cmVlIG5vZGVzLCBhc3N1bWluZyBpdCBoYXMgYSBmdW5jdGlvbiBsaWtlIGBzeXpfaW5pdF9uZXRfc29ja2V0YCBvciBzb21ldGhpbmcgc2ltaWxhciBhdmFpbGFibGUsIGJ1dCB1c3VhbGx5LCBpdCB3b24ndCBkeW5hbWljYWxseSBjcmVhdGUgcGxhdGZvcm0gZGV2aWNlcyB1bmxlc3MgdGhlcmUncyBhIHNwZWNpZmljIHBzZXVkby1zeXNjYWxsIGRlc2lnbmVkIGZvciB0aGF0IHB1cnBvc2UsIG9yIGlmIGl0J3MgYmFrZWQgaW50byB0aGUgaW5pdGlhbCBRRU1VIGltYWdlLlxuXG5Ib2xkIG9uLi4uIFRoaXMgcGF0Y2ggaXMgdG91Y2hpbmcgYHN0bW1hY19tYWluLmNgLiBUaGF0J3MgdGhlICpjb3JlKiBkcml2ZXIgZm9yICphbGwqIFNUTU1BQyBkZXZpY2VzLCBpbmNsdWRpbmcgdGhpbmdzIGxpa2UgYERXTUFDX0NPUkVfR01BQzRgIGFuZCBgRFdNQUNfQ09SRV9HTUFDYC4gVGhhdCdzIGEga2V5IG9ic2VydmF0aW9uLiBOb3cgSSBuZWVkIHRvIGZpZ3VyZSBvdXQgaWYgYHN0bW1hY19kYXRhcGF0aF90ZWFyZG93bmAgZ2V0cyBjYWxsZWQgZm9yIGBEV01BQ19DT1JFX0dNQUM0YC4gSXQncyBlc3NlbnRpYWwgdG8gdW5kZXJzdGFuZCB0aGUgc2NvcGUgb2YgdGhpcyBjaGFuZ2UuXG5cbk9rYXksIEkndmUgY2hlY2tlZCB0aGUgY29kZSwgYW5kIHllcywgYHN0bW1hY19kYXRhcGF0aF90ZWFyZG93bmAgaXMgZGVmaW5pdGVseSBjYWxsZWQgaW4gZnVuY3Rpb25zIGxpa2UgYF9fc3RtbWFjX3JlbGVhc2VgLCBgc3RtbWFjX3hkcF9yZWxlYXNlYCwgYW5kIGBzdG1tYWNfc3VzcGVuZGAuIEdvb2QuIEFuZCB0aGVzZSBmdW5jdGlvbnMgYXJlIGNhbGxlZCBmb3IgKmFsbCogc3RtbWFjIGRldmljZXMsIHJlZ2FyZGxlc3Mgb2YgdGhlIHNwZWNpZmljIGBjb3JlX3R5cGVgLiBUaGlzIGlzIHRoZSBjb25maXJtYXRpb24gSSBuZWVkZWQ6IGl0IHNlZW1zIHRoZSBmdW5jdGlvbiAqZG9lcyogYXBwbHkgdG8gbXVsdGlwbGUgZGV2aWNlcyBhbmQgaXNuJ3Qgc3BlY2lmaWMgdG8gYERXTUFDX0NPUkVfWEdNQUNgLiBJIG5lZWQgdG8gdmVyaWZ5IHRoYXQgb25jZSBtb3JlLiBCdXQgaXQgbG9va3MgbGlrZSBJIHVuZGVyc3RhbmQgdGhlIGZsb3cgb2YgZXZlbnRzIGhlcmUgYW5kIHRoZSBpbXBhY3Qgb2YgdGhlIHBhdGNoLlxuXG5cbiIsIklucHV0VG9rZW5zIjozMzY2OCwiT3V0cHV0VG9rZW5zIjo1MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI3NywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xNFQwNjozNzoxNi44MjE3MDc4ODhaIiwiU2VxIjozNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjkwMTcwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19tYWluLmNcIixcbiAgXCJGaXJzdExpbmVcIjogNDI4MCxcbiAgXCJMaW5lQ291bnRcIjogNTBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiNDI4MDpcXHRcXHRrZnJlZShkbWFfY29uZik7XFxuNDI4MTpcXHRcXHRyZXR1cm4gcmV0O1xcbjQyODI6XFx0fVxcbjQyODM6XFx0XFxuNDI4NDpcXHRzdGF0aWMgdm9pZCBfX3N0bW1hY19yZWxlYXNlKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXFxuNDI4NTpcXHR7XFxuNDI4NjpcXHRcXHRzdHJ1Y3Qgc3RtbWFjX3ByaXYgKnByaXYgPSBuZXRkZXZfcHJpdihkZXYpO1xcbjQyODc6XFx0XFx0dTggY2hhbjtcXG40Mjg4OlxcdFxcbjQyODk6XFx0XFx0c3RtbWFjX2Rpc2FibGVfYWxsX3F1ZXVlcyhwcml2KTtcXG40MjkwOlxcdFxcbjQyOTE6XFx0XFx0Zm9yIChjaGFuID0gMDsgY2hhbiBcXHUwMDNjIHByaXYtXFx1MDAzZXBsYXQtXFx1MDAzZXR4X3F1ZXVlc190b191c2U7IGNoYW4rKylcXG40MjkyOlxcdFxcdFxcdGhydGltZXJfY2FuY2VsKFxcdTAwMjZwcml2LVxcdTAwM2VkbWFfY29uZi50eF9xdWV1ZVtjaGFuXS50eHRpbWVyKTtcXG40MjkzOlxcdFxcbjQyOTQ6XFx0XFx0bmV0aWZfdHhfZGlzYWJsZShkZXYpO1xcbjQyOTU6XFx0XFxuNDI5NjpcXHRcXHQvKiBGcmVlIHRoZSBJUlEgbGluZXMgKi9cXG40Mjk3OlxcdFxcdHN0bW1hY19mcmVlX2lycShkZXYsIFJFUV9JUlFfRVJSX0FMTCwgMCk7XFxuNDI5ODpcXHRcXG40Mjk5OlxcdFxcdC8qIEhhcyB0byBydW4gYmVmb3JlIG1hY19saW5rX2Rvd24oKSBkaXNhYmxlcyB0aGUgTUFDLiAqL1xcbjQzMDA6XFx0XFx0c3RtbWFjX2RhdGFwYXRoX3RlYXJkb3duKHByaXYpO1xcbjQzMDE6XFx0XFxuNDMwMjpcXHRcXHQvKiBTdG9wIGFuZCBkaXNjb25uZWN0IHRoZSBQSFkgKi9cXG40MzAzOlxcdFxcdHBoeWxpbmtfc3RvcChwcml2LVxcdTAwM2VwaHlsaW5rKTtcXG40MzA0OlxcdFxcbjQzMDU6XFx0XFx0LyogUmVsZWFzZSBhbmQgZnJlZSB0aGUgUngvVHggcmVzb3VyY2VzICovXFxuNDMwNjpcXHRcXHRmcmVlX2RtYV9kZXNjX3Jlc291cmNlcyhwcml2LCBcXHUwMDI2cHJpdi1cXHUwMDNlZG1hX2NvbmYpO1xcbjQzMDc6XFx0XFxuNDMwODpcXHRcXHRzdG1tYWNfcmVsZWFzZV9wdHAocHJpdik7XFxuNDMwOTpcXHRcXG40MzEwOlxcdFxcdGlmIChzdG1tYWNfZnBlX3N1cHBvcnRlZChwcml2KSlcXG40MzExOlxcdFxcdFxcdGV0aHRvb2xfbW1zdl9zdG9wKFxcdTAwMjZwcml2LVxcdTAwM2VmcGVfY2ZnLm1tc3YpO1xcbjQzMTI6XFx0fVxcbjQzMTM6XFx0XFxuNDMxNDpcXHQvKipcXG40MzE1OlxcdCAqICBzdG1tYWNfcmVsZWFzZSAtIGNsb3NlIGVudHJ5IHBvaW50IG9mIHRoZSBkcml2ZXJcXG40MzE2OlxcdCAqICBAZGV2IDogZGV2aWNlIHBvaW50ZXIuXFxuNDMxNzpcXHQgKiAgRGVzY3JpcHRpb246XFxuNDMxODpcXHQgKiAgVGhpcyBpcyB0aGUgc3RvcCBlbnRyeSBwb2ludCBvZiB0aGUgZHJpdmVyLlxcbjQzMTk6XFx0ICovXFxuNDMyMDpcXHRzdGF0aWMgaW50IHN0bW1hY19yZWxlYXNlKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXFxuNDMyMTpcXHR7XFxuNDMyMjpcXHRcXHRzdHJ1Y3Qgc3RtbWFjX3ByaXYgKnByaXYgPSBuZXRkZXZfcHJpdihkZXYpO1xcbjQzMjM6XFx0XFxuNDMyNDpcXHRcXHQvKiBJZiB0aGUgUEhZIG9yIE1BQyBoYXMgV29MIGVuYWJsZWQsIHRoZW4gdGhlIFBIWSB3aWxsIG5vdCBiZVxcbjQzMjU6XFx0XFx0ICogc3VzcGVuZGVkIHdoZW4gcGh5bGlua19zdG9wKCkgaXMgY2FsbGVkIGJlbG93LiBTZXQgdGhlIFBIWVxcbjQzMjY6XFx0XFx0ICogdG8gaXRzIHNsb3dlc3Qgc3BlZWQgdG8gc2F2ZSBwb3dlci5cXG40MzI3OlxcdFxcdCAqL1xcbjQzMjg6XFx0XFx0aWYgKGRldmljZV9tYXlfd2FrZXVwKHByaXYtXFx1MDAzZWRldmljZSkpXFxuNDMyOTpcXHRcXHRcXHRwaHlsaW5rX3NwZWVkX2Rvd24ocHJpdi1cXHUwMDNlcGh5bGluaywgZmFsc2UpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xNFQwNjozNzoxNi44MjIwMDA4ODhaIiwiU2VxIjozNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTIxNDY2NTE2MTQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBTVE1NQUMgRGF0YXBhdGggVGVhcmRvd24gYW5kIFNldHVwKipcblxuT2theSwgc28gSSd2ZSBjb25maXJtZWQgdGhhdCBgX19zdG1tYWNfcmVsZWFzZWAgY2FsbHMgYHN0bW1hY19kYXRhcGF0aF90ZWFyZG93bihwcml2KWAuIExldCdzIGJyZWFrIGRvd24gd2hhdCdzIGhhcHBlbmluZyBpbiBgc3RtbWFjX2RhdGFwYXRoX3RlYXJkb3duYC4gSXQgYXBwZWFycyB0byBiZSBhIG11bHRpLWNoYW5uZWwgRE1BIHNodXRkb3duIHNlcXVlbmNlLiBJdCBpdGVyYXRlcyB0aHJvdWdoIHRoZSBjb25maWd1cmVkIFRYIGFuZCBSWCBxdWV1ZXMsIHN0b3BwaW5nIHRoZSBETUEgY2hhbm5lbHMsIHdhaXRpbmcgZm9yIHRoZW0gdG8gcmVwb3J0IHRoZXkncmUgc3RvcHBlZCwgZHJhaW5pbmcgTVRMIHF1ZXVlcywgZGlzYWJsaW5nIHRoZSBNQUMsIGFuZCB0aGVuIHJlcGVhdGluZyB0aGUgcHJvY2VzcyBmb3IgUlggY2hhbm5lbHMuXG5cbkEga2V5IHBvaW50IGlzIHRoZSBjb25kaXRpb25hbCBjaGVjayBgcHJpdi1cdTAwM2Vody1cdTAwM2VkbWEtXHUwMDNldHhfZG1hX3N0b3BwZWRgLiBGb3IgYSBHTUFDNCwgdGhpcyB3aWxsIGJlIE5VTEwsIGJlY2F1c2Ugb25seSBgZHd4Z21hYzIxMF9kbWFfb3BzYCBwcm92aWRlcyBpdCwgYW5kIHRoZSB3YWl0IGlzIHNraXBwZWQsIHdoaWNoIGlzIHByb2JhYmx5IG9rYXkuXG5cbk5vdyBoZXJlIGlzIHdoZXJlIHRoaW5ncyBnZXQgaW50ZXJlc3Rpbmc6IHRoZSBvcmRlciBvZiBvcGVyYXRpb25zIGluIHRoaXMgdGVhcmRvd24sIHNwZWNpZmljYWxseSB0aGUgcmVsYXRpdmUgcG9zaXRpb24gb2YgYHN0bW1hY19zdG9wX3R4X2RtYWAsIGBzdG1tYWNfbWFjX3NldGAsIGFuZCBgc3RtbWFjX3N0b3BfcnhfZG1hYCwgaGFzIGJlZW4gYWx0ZXJlZC4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlLlxuXG5QcmV2aW91c2x5IGl0IHdhczpcblxuMS4gYHN0bW1hY19zdG9wX3J4X2RtYWBcbjIuIGBzdG1tYWNfc3RvcF90eF9kbWFgXG4zLiBgc3RtbWFjX21hY19zZXQoLi4uLCBmYWxzZSlgXG5cbk5vdyBpdCdzOlxuXG4xLiBgc3RtbWFjX3N0b3BfdHhfZG1hYFxuMi4gYHN0bW1hY19tYWNfc2V0KC4uLiwgZmFsc2UpYFxuMy4gYHN0bW1hY19zdG9wX3J4X2RtYWBcblxuQWxzbywgaW4gYHN0bW1hY19od19zZXR1cGAgYW5kIGBzdG1tYWNfeGRwX29wZW5gLCB0aGUgb3JkZXIgb2YgYHN0bW1hY19tYWNfc2V0KC4uLiwgdHJ1ZSlgIGFuZCBgc3RtbWFjX3N0YXJ0X2FsbF9kbWFgIGhhcyBiZWVuIHN3YXBwZWQ6XG5cblByZXZpb3VzbHk6XG5cbjEuIGBzdG1tYWNfbWFjX3NldCguLi4sIHRydWUpYFxuMi4gYHN0bW1hY19zdGFydF9hbGxfZG1hYFxuXG5Ob3c6XG5cbjEuIGBzdG1tYWNfc3RhcnRfYWxsX2RtYWBcbjIuIGBzdG1tYWNfbWFjX3NldCguLi4sIHRydWUpYFxuXG5TaW5jZSB0aGlzIGNoYW5nZSBpbXBhY3RzIHRoZSBiZWhhdmlvciBvZiBhbGwgc3RtbWFjIGRldmljZXMsIGFuZCBlc3BlY2lhbGx5IHRob3NlIGFjY2Vzc2libGUgdGhyb3VnaCBQQ0kgaW4gc29tZXRoaW5nIGxpa2UgUUVNVSwgdGhpcyB3YXJyYW50cyBpbW1lZGlhdGUgZnV6emluZy4gSXQgaGFzIGEgcmVhbCBwb3RlbnRpYWwgdG8gYnJlYWsgdGhpbmdzIGFuZCBleHBvc2UgYW55IHRpbWluZyBvciByZXNvdXJjZSBtYW5hZ2VtZW50IGlzc3Vlcy4gSXQgaXMgaW1wb3J0YW50IHRvIGNvbmZpcm0gdGhlIGNvbmZpZyBvcHRpb25zLCBgQ09ORklHX1NUTU1BQ19FVEhgIGFuZCBgQ09ORklHX1NUTU1BQ19QQ0lgLiBJIHdhbnQgdG8gc2VlIGlmIHRoZSBmdXp6aW5nIGNhbiBleHBvc2UgYW55IGlzc3VlcyB0aGF0IG1heSBhcmlzZSBmcm9tIHRoaXMgcmVvcmRlcmluZyBvZiBjYWxscywgb3IgZXZlbiBmcm9tIHRoZSBza2lwcGVkIHdhaXQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjM1MjA2LCJPdXRwdXRUb2tlbnMiOjIwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6OTIyLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTRUMDY6Mzc6MjguOTY4NjU0MzYxWiIsIlNlcSI6MzYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNjEyMTA4NjgwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBTVE1NQUNfRVRIXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL0tjb25maWctMS0jIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9LY29uZmlnOjI6Y29uZmlnIFNUTU1BQ19FVEhcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9LY29uZmlnLTMtXFx0dHJpc3RhdGUgXFxcIlNUTWljcm9lbGVjdHJvbmljcyBNdWx0aS1HaWdhYml0IEV0aGVybmV0IGRyaXZlclxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTRUMDY6Mzc6MzAuNTgwNzY3NzYxWiIsIlNlcSI6MzcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMyNTk1NDEyMDgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkFuYWx5emluZyB0aGUgU1RNTUFDIFBDSSBDb25maWd1cmF0aW9uKipcblxuT2theSwgc28gdGhlIGluaXRpYWwgdGhvdWdodCBpcywgbmF0dXJhbGx5LCB0byB2ZXJpZnkgdGhlIHN0YXRlIG9mIGBDT05GSUdfU1RNTUFDX1BDSWAuIE15IGluc3RpbmN0IGlzIHRvIHF1aWNrbHkgYXNzZXNzIGl0cyBjdXJyZW50IHNldHRpbmcsIHVuZGVyc3RhbmRpbmcgdGhhdCB0aGlzIGZsYWcgZGlyZWN0bHkgZ292ZXJucyB0aGUgaW5jbHVzaW9uIG9mIHRoZSBTeW5vcHN5cyBTVE1NQUMgRXRoZXJuZXQgZHJpdmVyIGZvciBQQ0ktYmFzZWQgbmV0d29yayBpbnRlcmZhY2VzLiBJJ20gbGlrZWx5IGdlYXJpbmcgdXAgZm9yIGEgZGVlcGVyIGRpdmUgaW50byBrZXJuZWwgY29uZmlndXJhdGlvbiwgZGVidWdnaW5nIGEgbmV0d29yayBpc3N1ZSwgb3IgcGVyaGFwcyBldmVuIHByZXBhcmluZyB0byBlbmFibGUgU1RNTUFDIG9uIGEgbmV3IGhhcmR3YXJlIHBsYXRmb3JtLiBUaGUgaW1tZWRpYXRlIHF1ZXN0aW9uIGluIG15IG1pbmQgaXM6IGlzIGl0IGVuYWJsZWQgYXMgYSBtb2R1bGUgKE0pLCBidWlsdC1pbiAoWSksIG9yIGRpc2FibGVkIChOKT8gVGhhdCdzIHRoZSBmaXJzdCBkYXRhIHBvaW50IEkgbmVlZCB0byBlc3RhYmxpc2guIEkgbmVlZCB0byBrbm93IHdoZXJlIEkgYW0gd2l0aCB0aGlzIG1vZHVsZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MzY4MzcsIk91dHB1dFRva2VucyI6MjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xNFQwNjozNzozMy44NDAzMTEwNDlaIiwiU2VxIjozOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE1Mjk3NDY5ODksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIFNUTU1BQ19QQ0lcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvS2NvbmZpZz0zOTg9Y29uZmlnIERXTUFDX01PVE9SQ09NTVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvS2NvbmZpZy00MDYtXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvS2NvbmZpZzo0MDc6Y29uZmlnIFNUTU1BQ19QQ0lcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9LY29uZmlnLTQwOC1cXHR0cmlzdGF0ZSBcXFwiU1RNTUFDIFBDSSBidXMgc3VwcG9ydFxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTRUMDY6Mzc6MzUuMzcwMDY0MTk4WiIsIlNlcSI6MzksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM2ODg4OTMwNjIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqQW5hbHl6aW5nIHRoZSBTVE1NQUNfUENJIERlcGVuZGVuY2llcyoqXG5cbkFscmlnaHQsIGxldCdzIGRpdmUgaW4uIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzLCBcIk9rYXksIGBTVE1NQUNfUENJYC4uLiB3aGF0J3MgaXQgdGllZCB0bz9cIiBJIG5lZWQgdG8gcXVpY2tseSBtYXAgb3V0IHRoZSBkZXBlbmRlbmNpZXMuIEknbSBnb2luZyB0byBtZW50YWxseSBydW4gdGhyb3VnaCB0aGUgbGlrZWx5IGNhbmRpZGF0ZXM6IFBDSSBidXMgZHJpdmVyLCBvYnZpb3VzbHksIGJ1dCB3aGF0IHNwZWNpZmljIFBDSSByZWdpc3RlcnMgaXMgaXQgbGV2ZXJhZ2luZz8gQXJlIHRoZXJlIGFueSBwbGF0Zm9ybS1zcGVjaWZpYyBxdWlya3Mgb3IgdmFyaWF0aW9ucyBkZXBlbmRpbmcgb24gdGhlIHN5c3RlbS1vbi1hLWNoaXAgKFNvQykgaXQncyBydW5uaW5nIG9uPyBJIGhhdmUgdG8gbG9vayBmb3IgaW5kaXJlY3QgZGVwZW5kZW5jaWVzIGFzIHdlbGwgLSBETUEgZW5naW5lcywgaW50ZXJydXB0IGNvbnRyb2xsZXJzLCBjbG9jayBtYW5hZ2VtZW50LiBBcmUgd2UgZGVhbGluZyB3aXRoIGFueSBzaGFyZWQgcmVzb3VyY2VzIHRoYXQgY291bGQgY2F1c2UgY29uZmxpY3RzPyBJJ2xsIGFsc28gYmUgbWluZGZ1bCBvZiBwb3RlbnRpYWwgaW50ZXJhY3Rpb25zIHdpdGggb3RoZXIgbmV0d29ya2luZyBkcml2ZXJzIG9uIHRoZSBzeXN0ZW0uIElzIHRoZXJlIGFuIGludGVyYWN0aW9uIHRoYXQgY291bGQgb2NjdXIgdGhhdCBjb3VsZCBhZmZlY3Qgb3RoZXIgZHJpdmVycyBvbiB0aGUgc3lzdGVtP1xuXG5JIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgaW1wbGljYXRpb25zIG9mIGFueSBkZXBlbmRlbmN5IGNoYW5nZXMgaWYgdGhlcmUgYXJlIGFueSwgYW5kIGNvbnNpZGVyIHRoaXMgaW4gbXkgYW5hbHlzaXMuIFdoYXQga2VybmVsIHZlcnNpb25zIGlzIHRoaXMgbW9kdWxlIGRlc2lnbmVkIHRvIHdvcmsgd2l0aD8gQW55IGtub3duIGNvbXBhdGliaWxpdHkgaXNzdWVzPyBJIGhhdmUgdG8gYmUgYXdhcmUgb2YgdGhlIG92ZXJhbGwgc3lzdGVtIGNvbnRleHQgdG8gcHJldmVudCBhbnkgaXNzdWVzLiBMZXQncyBtYWtlIHN1cmUgd2UgaGF2ZSBhIHNvbGlkIHVuZGVyc3RhbmRpbmcgb2YgdGhlIGltcGxpY2F0aW9ucyBvZiBhbnkgZGVwZW5kZW5jaWVzIG9uIHRoZSBzeXN0ZW0uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjM3MTY4LCJPdXRwdXRUb2tlbnMiOjQ0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTRUMDY6Mzc6MzkuMDU4OTU5N1oiLCJTZXEiOjQwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2NjM2MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDQwMCxcbiAgXCJMaW5lQ291bnRcIjogMjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDQwMDpcXHRcXHRkZXBlbmRzIG9uIFBDSVxcbiA0MDE6XFx0XFx0c2VsZWN0IE1PVE9SQ09NTV9QSFlcXG4gNDAyOlxcdFxcdHNlbGVjdCBTVE1NQUNfTElCUENJXFxuIDQwMzpcXHRcXHRoZWxwXFxuIDQwNDpcXHRcXHQgIFRoaXMgZW5hYmxlcyBnbHVlIGRyaXZlciBmb3IgTW90b3Jjb21tIERXTUFDLWJhc2VkIFBDSSBFdGhlcm5ldFxcbiA0MDU6XFx0XFx0ICBjb250cm9sbGVycy4gQ3VycmVudGx5IG9ubHkgWVQ2ODAxIGlzIHN1cHBvcnRlZC5cXG4gNDA2OlxcdFxcbiA0MDc6XFx0Y29uZmlnIFNUTU1BQ19QQ0lcXG4gNDA4OlxcdFxcdHRyaXN0YXRlIFxcXCJTVE1NQUMgUENJIGJ1cyBzdXBwb3J0XFxcIlxcbiA0MDk6XFx0XFx0ZGVwZW5kcyBvbiBQQ0lcXG4gNDEwOlxcdFxcdGRlcGVuZHMgb24gQ09NTU9OX0NMS1xcbiA0MTE6XFx0XFx0c2VsZWN0IFNUTU1BQ19MSUJQQ0lcXG4gNDEyOlxcdFxcdGhlbHBcXG4gNDEzOlxcdFxcdCAgVGhpcyBzZWxlY3RzIHRoZSBwbGF0Zm9ybSBzcGVjaWZpYyBidXMgc3VwcG9ydCBmb3IgdGhlIHN0bW1hYyBkcml2ZXIuXFxuIDQxNDpcXHRcXHQgIFRoaXMgZHJpdmVyIHdhcyB0ZXN0ZWQgb24gWExJTlggWEMyVjMwMDAgRkYxMTUyQU1UMDIyMVxcbiA0MTU6XFx0XFx0ICBEMTIxNTk5NEEgVklSVEVYIEZQR0EgYm9hcmQgYW5kIFNOUFMgUW9TIElQSyBQcm90b3R5cGluZyBLaXQuXFxuIDQxNjpcXHRcXG4gNDE3OlxcdFxcdCAgSWYgeW91IGhhdmUgYSBjb250cm9sbGVyIHdpdGggdGhpcyBpbnRlcmZhY2UsIHNheSBZIG9yIE0gaGVyZS5cXG4gNDE4OlxcdFxcbiA0MTk6XFx0XFx0ICBJZiB1bnN1cmUsIHNheSBOLlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xNFQwNjozNzozOS4wNTkwMjc0NVoiLCJTZXEiOjQxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0OTk1NDg3MDY1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSBkZXBlbmRlbmNpZXMsIGZyb20gYW4gZXhwZXJ0J3MgcGVyc3BlY3RpdmU6XG5cbioqQW5hbHl6aW5nIFNUTU1BQyBEcml2ZXIgRGVwZW5kZW5jaWVzKipcblxuQWxyaWdodCwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBNeSBpbml0aWFsIG9ic2VydmF0aW9uIGlzIHRoYXQgYFNUTU1BQ19QQ0lgIHJlbGllcyBvbiBib3RoIGBQQ0lgIGFuZCBgQ09NTU9OX0NMS2AuIFRoYXQncyBzdGFuZGFyZCBmb3IgYSBQQ0ktYmFzZWQgRXRoZXJuZXQgY29udHJvbGxlciDigJMgbmVlZHMgdGhlIFBDSSBpbmZyYXN0cnVjdHVyZSB0byBleGlzdCBhbmQgY2xvY2sgbWFuYWdlbWVudCB0byBmdW5jdGlvbiBjb3JyZWN0bHkuIE5vIHN1cnByaXNlcyB0aGVyZS5cblxuTmV4dCwgd2Ugc2VlIHRoYXQgYFNUTU1BQ19FVEhgIGRlcGVuZHMgb24gYEhBU19JT01FTWAgYW5kIGBIQVNfRE1BYC4gVGhpcyBpcyB3aGF0IEknZCBleHBlY3QuIGBIQVNfSU9NRU1gIG1lYW5zIGl0IGNhbiBhY2Nlc3MgbWVtb3J5LW1hcHBlZCBJL08sIHdoaWNoIGlzIGNydWNpYWwgZm9yIGludGVyYWN0aW5nIHdpdGggdGhlIEV0aGVybmV0IGNvbnRyb2xsZXIncyByZWdpc3RlcnMuIEFuZCBgSEFTX0RNQWAgaW5kaWNhdGVzIGl0IHJlcXVpcmVzIERNQSAoRGlyZWN0IE1lbW9yeSBBY2Nlc3MpIHN1cHBvcnQuIEEgbW9kZXJuIEV0aGVybmV0IGNvbnRyb2xsZXIgKmhhcyogdG8gdXNlIERNQSB0byBiZSBwZXJmb3JtYW50LiBJdCB3b3VsZG4ndCBiZSB2ZXJ5IHVzZWZ1bCBpZiBpdCBkaWRuJ3QuXG5cbk5vdywgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhpcyBgU1RNTUFDX0VUSGAgZGVwZW5kZW5jeSBiZXR0ZXIuIEkgd2FudCB0byBkaXZlIGEgbGl0dGxlIGRlZXBlciB0byBjb25maXJtIHRoYXQgSSdtIHNlZWluZyBldmVyeXRoaW5nIGNvcnJlY3RseS4gTGV0IG1lIHNlZSB3aGF0IHNwZWNpZmljYWxseSBkZXBlbmRzIG9uICp0aGlzKiBkcml2ZXIuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjM3ODExLCJPdXRwdXRUb2tlbnMiOjQyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTcsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xNFQwNjozNzo0NC4wNTQ1MTY5MTVaIiwiU2VxIjo0MiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzA3OTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiAxLFxuICBcIkxpbmVDb3VudFwiOiAyMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgICAxOlxcdCMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxcbiAgIDI6XFx0Y29uZmlnIFNUTU1BQ19FVEhcXG4gICAzOlxcdFxcdHRyaXN0YXRlIFxcXCJTVE1pY3JvZWxlY3Ryb25pY3MgTXVsdGktR2lnYWJpdCBFdGhlcm5ldCBkcml2ZXJcXFwiXFxuICAgNDpcXHRcXHRkZXBlbmRzIG9uIEhBU19JT01FTSBcXHUwMDI2XFx1MDAyNiBIQVNfRE1BXFxuICAgNTpcXHRcXHRkZXBlbmRzIG9uIFBUUF8xNTg4X0NMT0NLX09QVElPTkFMXFxuICAgNjpcXHRcXHRkZXBlbmRzIG9uIEVUSFRPT0xfTkVUTElOS1xcbiAgIDc6XFx0XFx0c2VsZWN0IE1JSVxcbiAgIDg6XFx0XFx0c2VsZWN0IFBDU19YUENTXFxuICAgOTpcXHRcXHRzZWxlY3QgUEFHRV9QT09MXFxuICAxMDpcXHRcXHRzZWxlY3QgUEhZTElOS1xcbiAgMTE6XFx0XFx0c2VsZWN0IENSQzMyXFxuICAxMjpcXHRcXHRzZWxlY3QgUkVTRVRfQ09OVFJPTExFUlxcbiAgMTM6XFx0XFx0c2VsZWN0IE5FVF9ERVZMSU5LXFxuICAxNDpcXHRcXHRoZWxwXFxuICAxNTpcXHRcXHQgIFRoaXMgaXMgdGhlIGRyaXZlciBmb3IgdGhlIEV0aGVybmV0IElQcyBidWlsdCBhcm91bmQgYVxcbiAgMTY6XFx0XFx0ICBTeW5vcHN5cyBJUCBDb3JlLlxcbiAgMTc6XFx0XFxuICAxODpcXHRpZiBTVE1NQUNfRVRIXFxuICAxOTpcXHRcXG4gIDIwOlxcdGNvbmZpZyBTVE1NQUNfU0VMRlRFU1RTXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE0VDA2OjM3OjQ0LjA1NDU4OTI5NVoiLCJTZXEiOjQzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxMDI2NjczNTQxMSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipGdXp6aW5nIFN0cmF0ZWd5IGZvciBTVE1NQUMgRHJpdmVyKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBTVE1NQUMgZHJpdmVyIHBhdGNoLCBhbmQgbXkgaW5pdGlhbCB0aG91Z2h0cyBhcmUgYXJvdW5kIGNvbmZpZ3VyYXRpb24gb3B0aW9ucy4gYFNUTU1BQ19FVEhgIGFuZCBgU1RNTUFDX1BDSWAgc2VlbSB0byBiZSB0aGUgcHJpbWFyeSBjb25maWd1cmF0aW9ucyBpbiB0aGlzIGNvbnRleHQuIEknbGwgbmVlZCB0byByZW1lbWJlciB0aG9zZS4gV2hhdCBhYm91dCB0aGUgb3RoZXIgRFdNQUMgY29uZmlndXJhdGlvbnMg4oCTIGBEV01BQ19JTlRFTGAsIGBEV01BQ19MT09OR1NPTmAsIGFuZCBgRFdNQUNfTU9UT1JDT01NYD8gRm9yIG5vdywgSSdsbCBqdXN0IGZvY3VzIG9uIGluY2x1ZGluZyBgU1RNTUFDX1BDSWAgYW5kIGBTVE1NQUNfRVRIYCwgYW5kIHJldmlzaXQgdGhvc2UgaWYgbmVjZXNzYXJ5LlxuXG5Ob3csIGxldCdzIGdldCBkb3duIHRvIHRoZSBmdXp6aW5nIHRhcmdldHMuIFRoaXMgcGF0Y2ggbW9kaWZpZXMgc2V2ZXJhbCBmdW5jdGlvbnMuIEkgbmVlZCB0byBmaWd1cmUgb3V0IHdoaWNoIG9uZXMgYXJlIGNyaXRpY2FsIGFuZCB3aGVyZSB0aGUgYmVzdCBlbnRyeSBwb2ludHMgYXJlIGZvciBtYXhpbXVtIGltcGFjdC4gVGhlIHBhdGNoIHRvdWNoZXMgYHN0bW1hY19kYXRhcGF0aF90ZWFyZG93bmAsIGBzdG1tYWNfaHdfc2V0dXBgLCBgc3RtbWFjX3hkcF9vcGVuYCwgYGR3eGdtYWMyX3R4X2RtYV9zdG9wcGVkYCwgYGR3eGdtYWMyX3R4X210bF9kcmFpbmAsIGBkd3hnbWFjMl9yeF9tdGxfZHJhaW5gLCBhbmQgYGR3eGdtYWMyX3J4X2RtYV9zdG9wcGVkYC5cblxuSSBzZWUgdGhhdCBgc3RtbWFjX2RhdGFwYXRoX3RlYXJkb3duYCBpcyBhIHN0YXRpYyBmdW5jdGlvbiwgYnV0IGl0IGlzIGNhbGxlZCBieSBgX19zdG1tYWNfcmVsZWFzZWAsIGBzdG1tYWNfeGRwX3JlbGVhc2VgLCBhbmQgYHN0bW1hY19zdXNwZW5kYC4gQWxzbywgYHN0bW1hY19od19zZXR1cGAgaXMgYWxzbyBpbXBvcnRhbnQsIGFzIGl0IGdldHMgY2FsbGVkIGJ5IGBzdG1tYWNfb3BlbmAgYW5kIGBzdG1tYWNfcmVzdW1lYC5cblxuVGhlIGtleSBlbnRyeSBwb2ludHMgYXBwZWFyIHRvIGJlIHRoZSBuZXRfZGV2aWNlX29wcyBmdW5jdGlvbnMgYC5uZG9fb3BlbmAgYW5kIGAubmRvX3N0b3BgLCB3aGljaCBjb3JyZXNwb25kIHRvIGBzdG1tYWNfb3BlbmAgYW5kIGBzdG1tYWNfcmVsZWFzZWAgcmVzcGVjdGl2ZWx5LiBBbHNvLCB0aGUgZGV2aWNlIFBNIG9wcyBmb3IgYHN0bW1hY19zdXNwZW5kYCBhbmQgYHN0bW1hY19yZXN1bWVgIG5lZWQgYSBkZWVwZXIgZGl2ZS4gQW5kIG9mIGNvdXJzZSwgdGhlIFhEUCBzZXR1cCBmdW5jdGlvbnM6IGBzdG1tYWNfeGRwX29wZW5gIGFuZCBgc3RtbWFjX3hkcF9yZWxlYXNlYC5cblxuU28sIGl0IGxvb2tzIGxpa2UgYHN0bW1hY19vcGVuYCwgYHN0bW1hY19yZWxlYXNlYCwgYHN0bW1hY19zdXNwZW5kYCwgYHN0bW1hY19yZXN1bWVgLCBgc3RtbWFjX3hkcF9vcGVuYCwgYW5kIGBzdG1tYWNfeGRwX3JlbGVhc2VgIGFyZSB0aGUgY3J1Y2lhbCBmdW5jdGlvbnMgZm9yIGludGVuc2l2ZSBmdXp6aW5nLlxuXG5XYWl0LCBsZXQgbWUgZG91YmxlLWNoZWNrIHNvbWV0aGluZy4gYHN0bW1hY19kYXRhcGF0aF90ZWFyZG93bmAgaXMgc3RhdGljLCB5ZXMsIGJ1dCBpdOKAmXMgY2FsbGVkIGZyb20gYF9fc3RtbWFjX3JlbGVhc2VgLCB3aGljaCBpcyB0aGVuIGNhbGxlZCBmcm9tIGBzdG1tYWNfcmVsZWFzZWAuIEFuZCBgc3RtbWFjX29wZW5gIGNhbGxzIGBzdG1tYWNfaHdfc2V0dXBgLiBTbyBpdCBzZWVtcyBgc3RtbWFjX29wZW5gIGFuZCBgc3RtbWFjX3JlbGVhc2VgIGFyZSBzdGlsbCB0aGUgcHJpbWFyeSBlbnRyeSBwb2ludHMuIEFsb25nIHdpdGggYHN0bW1hY194ZHBfb3BlbmAgYW5kIGBzdG1tYWNfeGRwX3JlbGVhc2VgLCB0aGV5IGFyZSB0aGUgbWFpbiBmb2N1cy4gSSdsbCBuZWVkIHRvIHF1aWNrbHkgY2hlY2sgaWYgYHN0bW1hY194ZHBfb3BlbmAgaXRzZWxmIGlzIHN0YXRpYyBvciBub3QuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjM4NDE0LCJPdXRwdXRUb2tlbnMiOjIyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTQ1LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTRUMDY6Mzc6NTQuMzIxMzI3NzQ2WiIsIlNlcSI6NDQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxOTM3OTM1MDk2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInN0bW1hY194ZHBfb3BlblwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWMuaD00MDc9dm9pZCBzdG1tYWNfcHRwX3VucmVnaXN0ZXIoc3RydWN0IHN0bW1hY19wcml2ICpwcml2KTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWMuaDo0MDg6aW50IHN0bW1hY194ZHBfb3BlbihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWMuaC00MDktdm9pZCBzdG1tYWNfeGRwX3JlbGVhc2Uoc3RydWN0IG5ldF9kZXZpY2UgKmRldik7XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfbWFpbi5jPTcxMzY9dm9pZCBzdG1tYWNfeGRwX3JlbGVhc2Uoc3RydWN0IG5ldF9kZXZpY2UgKmRldilcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19tYWluLmMtNzE2NS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfbWFpbi5jOjcxNjY6aW50IHN0bW1hY194ZHBfb3BlbihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19tYWluLmMtNzE2Ny17XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfeGRwLmM9MTAyPWludCBzdG1tYWNfeGRwX3NldF9wcm9nKHN0cnVjdCBzdG1tYWNfcHJpdiAqcHJpdiwgc3RydWN0IGJwZl9wcm9nICpwcm9nLFxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX3hkcC5jLTEzNC1cXHRpZiAoaWZfcnVubmluZyBcXHUwMDI2XFx1MDAyNiBuZWVkX3VwZGF0ZSlcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfeGRwLmM6MTM1OlxcdFxcdHN0bW1hY194ZHBfb3BlbihkZXYpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY194ZHAuYy0xMzYtXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE0VDA2OjM3OjU2LjI1OTI2ODY5MloiLCJTZXEiOjQ1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0MDExNjQ2NzE5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSBmdW5jdGlvbnMsIHRoaW5raW5nIHRocm91Z2ggaXQgYXMgeW91IGFza2VkOlxuXG4qKk15IFBlcnNwZWN0aXZlIG9uIHRoZSBgc3RtbWFjYCBYRFAgYW5kIFBvd2VyIE1hbmFnZW1lbnQgRnVuY3Rpb25zKipcblxuUmlnaHQsIGxldCBtZSBzZWUuLi5zbywgSSdtIG5vdGluZyB0aGF0IGBzdG1tYWNfeGRwX29wZW5gIGFuZCBgc3RtbWFjX3hkcF9yZWxlYXNlYCwgdGhvc2UgYXJlIGRlZmluaXRlbHkgKm5vdCogZGVjbGFyZWQgYXMgYHN0YXRpY2AuIEdvb2QsIHRoYXQgbWFrZXMgc2Vuc2UgZm9yIHRoZSBYRFAgZnVuY3Rpb25hbGl0eS4gVGhleSdyZSBsaWtlbHkgbWVhbnQgdG8gYmUgY2FsbGFibGUgZnJvbSBvdXRzaWRlIHRoZSBjb3JlIGBzdG1tYWNgIG1vZHVsZSwgcHJlc3VtYWJseSBieSBYRFAgcHJvZ3JhbXMgb3Igc29tZSBvdGhlciBleHRlcm5hbCBjb21wb25lbnQgdGhhdCBuZWVkcyB0byBtYW5hZ2UgdGhlIGludGVyYWN0aW9uIHdpdGggdGhlIGRyaXZlciBpbiB0aGF0IGNvbnRleHQuIFdlIG5lZWQgdGhhdCBleHRlcm5hbCBsaW5rYWdlLlxuXG5BbmQgdGhlbiBsb29raW5nIGF0IHRoZSBzdXNwZW5kIGFuZCByZXN1bWUgcm91dGluZXMsIGBzdG1tYWNfc3VzcGVuZGAgYW5kIGBzdG1tYWNfcmVzdW1lYD8gQWxzbyBub24tc3RhdGljLiBBZ2FpbiwgYXMgZXhwZWN0ZWQuIFRob3NlIGFyZSBjcml0aWNhbCBlbnRyeSBwb2ludHMgZm9yIHRoZSBzeXN0ZW0gcG93ZXIgbWFuYWdlbWVudCBmcmFtZXdvcmsuIFRoZSBwb3dlciBtYW5hZ2VtZW50IGNvZGUsIG9yIHBlcmhhcHMgZXZlbiBoaWdoZXItbGV2ZWwgZHJpdmVycywgbmVlZHMgdG8gYmUgYWJsZSB0byBjYWxsIHRoZXNlIGZ1bmN0aW9ucyBkaXJlY3RseSB0byBjb250cm9sIHRoZSBwb3dlciBzdGF0ZSBvZiB0aGUgU1RNTUFDIGRldmljZS4gSWYgdGhleSAqd2VyZSogc3RhdGljLCB3ZSdkIGhhdmUgYSByZWFsIHByb2JsZW0gaW50ZWdyYXRpbmcgd2l0aCB0aGUgd2lkZXIgc3lzdGVtLiBUaGF0IHdvdWxkIG1ha2UgZm9yIGEgYnJpdHRsZSBkcml2ZXIuIFdlIGNhbid0IGhhdmUgdGhhdC5cblxuXG4iLCJJbnB1dFRva2VucyI6NDAxMTAsIk91dHB1dFRva2VucyI6MjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1MSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xNFQwNjozODowMC4yNzA5MTg3MjFaIiwiU2VxIjo0NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE2NjU0NDA4MjUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwic3RtbWFjX3N1c3BlbmRcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtdGVncmEuYz01Nz1zdGF0aWMgaW50IF9fbWF5YmVfdW51c2VkIHRlZ3JhX21nYmVfc3VzcGVuZChzdHJ1Y3QgZGV2aWNlICpkZXYpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy10ZWdyYS5jLTYxLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLXRlZ3JhLmM6NjI6XFx0ZXJyID0gc3RtbWFjX3N1c3BlbmQoZGV2KTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy10ZWdyYS5jLTYzLVxcdGlmIChlcnIpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWMuaD00MTE9aW50IHN0bW1hY19yZXN1bWUoc3RydWN0IGRldmljZSAqZGV2KTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWMuaDo0MTI6aW50IHN0bW1hY19zdXNwZW5kKHN0cnVjdCBkZXZpY2UgKmRldik7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjLmgtNDEzLXZvaWQgc3RtbWFjX2R2cl9yZW1vdmUoc3RydWN0IGRldmljZSAqZGV2KTtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19tYWluLmM9ODIwND1FWFBPUlRfU1lNQk9MX0dQTChzdG1tYWNfZHZyX3JlbW92ZSk7XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfbWFpbi5jLTgyMDYtLyoqXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX21haW4uYzo4MjA3OiAqIHN0bW1hY19zdXNwZW5kIC0gc3VzcGVuZCBjYWxsYmFja1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19tYWluLmMtODIwOC0gKiBAZGV2OiBkZXZpY2UgcG9pbnRlclxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX21haW4uYy04MjEyLSAqL1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19tYWluLmM6ODIxMzppbnQgc3RtbWFjX3N1c3BlbmQoc3RydWN0IGRldmljZSAqZGV2KVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19tYWluLmMtODIxNC17XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfbWFpbi5jLTgyNjItfVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19tYWluLmM6ODI2MzpFWFBPUlRfU1lNQk9MX0dQTChzdG1tYWNfc3VzcGVuZCk7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX21haW4uYy04MjY0LVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX21haW4uYz04Mzk0PUVYUE9SVF9TWU1CT0xfR1BMKHN0bW1hY19yZXN1bWUpO1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX21haW4uYy04Mzk2LS8qIFRoaXMgaXMgbm90IHRoZSBzYW1lIGFzIEVYUE9SVF9HUExfU0lNUExFX0RFVl9QTV9PUFMoKSB3aGVuIENPTkZJR19QTT1uICovXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX21haW4uYzo4Mzk3OkRFRklORV9TSU1QTEVfREVWX1BNX09QUyhzdG1tYWNfc2ltcGxlX3BtX29wcywgc3RtbWFjX3N1c3BlbmQsIHN0bW1hY19yZXN1bWUpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19tYWluLmMtODM5OC1FWFBPUlRfU1lNQk9MX0dQTChzdG1tYWNfc2ltcGxlX3BtX29wcyk7XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfcGxhdGZvcm0uYz0xMDAxPWNvbnN0IHN0cnVjdCBkZXZfcG1fb3BzIHN0bW1hY19wbHRmcl9wbV9vcHMgPSB7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX3BsYXRmb3JtLmM6MTAwMjpcXHRTRVRfU1lTVEVNX1NMRUVQX1BNX09QUyhzdG1tYWNfc3VzcGVuZCwgc3RtbWFjX3Jlc3VtZSlcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfcGxhdGZvcm0uYy0xMDAzLVxcdFNFVF9SVU5USU1FX1BNX09QUyhzdG1tYWNfcnVudGltZV9zdXNwZW5kLCBzdG1tYWNfcnVudGltZV9yZXN1bWUsIE5VTEwpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE0VDA2OjM4OjAxLjkzNjM2NDM4NloiLCJTZXEiOjQ3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0MjM5NDE5MzM1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGhpbmtpbmcgcHJvY2VzczpcblxuKipFeGFtaW5pbmcgdGhlIFNUTU1BQyBEcml2ZXIncyBTdXNwZW5kL1Jlc3VtZSBMb2dpYyoqXG5cbk9rYXksIHNvIEkgc2VlIHRoYXQgYHN0bW1hY19zdXNwZW5kYCBhbmQgYHN0bW1hY19yZXN1bWVgIGFyZSBleHBsaWNpdGx5IGV4cG9ydGVkLiBUaGF0J3MgZ29vZCwgc3VnZ2VzdHMgdGhleSdyZSBkZXNpZ25lZCBmb3IgZXh0ZXJuYWwgaW50ZXJhY3Rpb24sIHByb2JhYmx5IGZvciBwb3dlciBtYW5hZ2VtZW50LCB3aGljaCBpcyB3aGF0IEknZCBleHBlY3QuIEhvd2V2ZXIsIGBzdG1tYWNfb3BlbmAgYW5kIGBzdG1tYWNfcmVsZWFzZWAgYXJlIGRlZmluZWQgd2l0aGluIGBzdG1tYWNfbWFpbi5jYCwgYW5kIHRoYXQgcmFpc2VzIGEgZmxhZy4gV2FpdCwgaG9sZCBvbiBhIHNlY29uZC4gSSBuZWVkIHRvIGJlICpzdXJlKiBhYm91dCB0aGVpciBzY29wZS4gTGV0IG1lIHF1aWNrbHkgZG91YmxlLWNoZWNrIGlmIHRob3NlIGZ1bmN0aW9ucyBhcmUgYWN0dWFsbHkgZGVjbGFyZWQgYXMgYHN0YXRpY2Agd2l0aGluIHRoYXQgZmlsZSwgYmVjYXVzZSB0aGF0IHdvdWxkIGNvbmZpcm0gdGhleSdyZSBvbmx5IGludGVuZGVkIGZvciBpbnRlcm5hbCB1c2Ugd2l0aGluIHRoZSBkcml2ZXIncyBjb3JlIG1vZHVsZS4gR290dGEgbWFrZSBzdXJlIHRob3NlIG9wZW4vcmVsZWFzZSBmdW5jdGlvbnMgYXJlbid0IGluYWR2ZXJ0ZW50bHkgYmVpbmcgZXhwb3NlZCwgdGhhdCdzIGltcG9ydGFudCBmb3IgdGhlIG92ZXJhbGwgYXJjaGl0ZWN0dXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjo0MTQyOCwiT3V0cHV0VG9rZW5zIjoxOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjU5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE0VDA2OjM4OjA2LjE3NTc4NjA3WiIsIlNlcSI6NDgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNjI2MjAwMzE5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInN0bW1hY19vcGVuXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19tYWluLmM9NDEwMD1zdG1tYWNfc2V0dXBfZG1hX2Rlc2Moc3RydWN0IHN0bW1hY19wcml2ICpwcml2LCB1bnNpZ25lZCBpbnQgbXR1KVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX21haW4uYy00MTY1LS8qKlxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19tYWluLmM6NDE2NjogKiAgX19zdG1tYWNfb3BlbiAtIG9wZW4gZW50cnkgcG9pbnQgb2YgdGhlIGRyaXZlclxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19tYWluLmMtNDE2Ny0gKiAgQGRldiA6IHBvaW50ZXIgdG8gdGhlIGRldmljZSBzdHJ1Y3R1cmUuXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfbWFpbi5jLTQxNzQtICovXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX21haW4uYzo0MTc1OnN0YXRpYyBpbnQgX19zdG1tYWNfb3BlbihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19tYWluLmMtNDE3Ni1cXHRcXHRcXHQgc3RydWN0IHN0bW1hY19kbWFfY29uZiAqZG1hX2NvbmYpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfbWFpbi5jLTQyMzItXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX21haW4uYzo0MjMzOnN0YXRpYyBpbnQgc3RtbWFjX29wZW4oc3RydWN0IG5ldF9kZXZpY2UgKmRldilcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfbWFpbi5jLTQyMzQte1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX21haW4uYy00MjYwLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19tYWluLmM6NDI2MTpcXHRyZXQgPSBfX3N0bW1hY19vcGVuKGRldiwgZG1hX2NvbmYpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19tYWluLmMtNDI2Mi1cXHRpZiAocmV0KVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX21haW4uYz02MTU1PXN0YXRpYyBpbnQgc3RtbWFjX2NoYW5nZV9tdHUoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgaW50IG5ld19tdHUpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfbWFpbi5jLTYxOTAtXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX21haW4uYzo2MTkxOlxcdFxcdHJldCA9IF9fc3RtbWFjX29wZW4oZGV2LCBkbWFfY29uZik7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX21haW4uYy02MTkyLVxcdFxcdGlmIChyZXQpIHtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19tYWluLmM9NzM0Nz1zdGF0aWMgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2Vfb3BzIHN0bW1hY19uZXRkZXZfb3BzID0ge1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19tYWluLmM6NzM0ODpcXHQubmRvX29wZW4gPSBzdG1tYWNfb3BlbixcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfbWFpbi5jLTczNDktXFx0Lm5kb19zdGFydF94bWl0ID0gc3RtbWFjX3htaXQsXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfbWFpbi5jPTc2MzQ9aW50IHN0bW1hY19yZWluaXRfcXVldWVzKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHU4IHJ4X2NudCwgdTggdHhfY250KVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX21haW4uYy03NjUzLVxcdGlmIChuZXRpZl9ydW5uaW5nKGRldikpXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX21haW4uYzo3NjU0OlxcdFxcdHJldCA9IHN0bW1hY19vcGVuKGRldik7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX21haW4uYy03NjU1LVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX21haW4uYz03NjU5PWludCBzdG1tYWNfcmVpbml0X3JpbmdwYXJhbShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB1MzIgcnhfc2l6ZSwgdTMyIHR4X3NpemUpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfbWFpbi5jLTc2NzAtXFx0aWYgKG5ldGlmX3J1bm5pbmcoZGV2KSlcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfbWFpbi5jOjc2NzE6XFx0XFx0cmV0ID0gc3RtbWFjX29wZW4oZGV2KTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfbWFpbi5jLTc2NzItXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE0VDA2OjM4OjA3LjgwMTk5MTczOVoiLCJTZXEiOjQ5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo3ODMzMDk0MjI2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBTVE1NQUMgRHJpdmVyIEVudHJ5cG9pbnRzIGZvciBGdXp6aW5nKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgaG93IGJlc3QgdG8gdGFyZ2V0IHRoZSBTVE1NQUMgZHJpdmVyIHdpdGggZnV6emluZywgc3BlY2lmaWNhbGx5IHRoaW5raW5nIGFib3V0IHdoYXQgZW50cnlwb2ludHMgYXJlIG1vc3QgYWNjZXNzaWJsZSB0byB0b29scyBsaWtlIHN5emthbGxlci4gTXkgaW5pdGlhbCB0aG91Z2h0IHdhcyB0aGF0IGBzdG1tYWNfb3BlbmAgYW5kIGBzdG1tYWNfcmVsZWFzZWAgYXJlIHN0YXRpYywgd2hpY2ggZ2VuZXJhbGx5IG1lYW5zIHRoZXkgd29uJ3QgYmUgZXhwb3J0ZWQgYXMgc3ltYm9scyBhbmQgdGhlcmVmb3JlIHdvbid0IGJlIGVhc2lseSBmdXp6YWJsZS4gSG93ZXZlciwgSSBuZWVkIHRvIHJlbWVtYmVyIHRoYXQgc3l6a2FsbGVyICpjYW4qIGZvY3VzIG9uIHN0YXRpYyBmdW5jdGlvbnMgaWYgdGhleSdyZSBub3QgaW5saW5lZC4gQnV0LCByZWFsaXN0aWNhbGx5LCBpdCdzIGFsd2F5cyBwcmVmZXJhYmxlIHRvIGxldmVyYWdlIG5vbi1zdGF0aWMgQVBJIGVudHJ5cG9pbnRzIGZvciBmdXp6aW5nLlxuXG5MZXQncyBzZWUsIHRoZSBub24tc3RhdGljIGNhbmRpZGF0ZXMgc2VlbSB0byBiZTogYHN0bW1hY19zdXNwZW5kYCwgYHN0bW1hY19yZXN1bWVgLCBgc3RtbWFjX3hkcF9vcGVuYCwgYHN0bW1hY194ZHBfcmVsZWFzZWAsIGBzdG1tYWNfY2hhbmdlX210dWAsIGBzdG1tYWNfcmVpbml0X3F1ZXVlc2AsIGFuZCBgc3RtbWFjX3JlaW5pdF9yaW5ncGFyYW1gLiBJJ20gZ29pbmcgdG8gaGF2ZSB0byBtYWtlIGEgbm90ZSB0aGF0IGBzdG1tYWNfY2hhbmdlX210dWAgaXMgc3RhdGljLlxuXG5XYWl0IGEgc2Vjb25kLi4uSSBqdXN0IHJlbWVtYmVyZWQgdGhhdCBgc3RtbWFjX3JlaW5pdF9xdWV1ZXNgIGFuZCBgc3RtbWFjX3JlaW5pdF9yaW5ncGFyYW1gIHNlZW0gdG8gY2FsbCBgc3RtbWFjX29wZW5gLiBJZiB0aGF0J3MgdGhlIGNhc2UsIHRoZW4gdGhhdCBjb3VsZCBiZSBhIHNpZ25pZmljYW50IGVudHJ5IHBvaW50LiBMZXQgbWUgcXVpY2tseSBkb3VibGUtY2hlY2sgdGhhdCB0aG9zZSBhcmUgYWN0dWFsbHkgZXhwb3J0ZWQgc3ltYm9scy5cblxuXG4iLCJJbnB1dFRva2VucyI6NDI4MzgsIk91dHB1dFRva2VucyI6MjQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMDgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTRUMDY6Mzg6MTUuNjM1MDg5MDM1WiIsIlNlcSI6NTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMTA4ODkzNzM5LCJFcnJvciI6Im5vIG1hdGNoZXMiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJFWFBPUlRfU1lNQk9MLipzdG1tYWNfcmVpbml0XCJcbn0iLCJSZXN1bHRzIjoie1xuICBcImVycm9yXCI6IFwibm8gbWF0Y2hlc1wiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xNFQwNjozODoxNy43NDM5OTAzMTRaIiwiU2VxIjo1MSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzU1MDA1ODYyNywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMuIEhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBhcyBpZiB0aGV5J3JlIG15IG93bjpcblxuKipFeGFtaW5pbmcgdGhlIGBzdG1tYWNfcmVpbml0X3F1ZXVlc2AgRnVuY3Rpb24qKlxuXG5SaWdodCwgbGV0J3MgemVybyBpbiBvbiBgc3RtbWFjX3JlaW5pdF9xdWV1ZXNgLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpdHMgcm9sZS4gSSdtIGd1ZXNzaW5nIGl0J3MgYSBjcml0aWNhbCBmdW5jdGlvbiBmb3IgcmVzZXR0aW5nIG9yIHJlLWVzdGFibGlzaGluZyB0aGUgdHJhbnNtaXQgYW5kIHJlY2VpdmUgcXVldWVzIHdpdGhpbiB0aGUgU1RNTUFDIGRyaXZlci4gS25vd2luZyB0aGlzLCBpdCBpcyBsaWtlbHkgaW52b2x2ZWQgaW4gcmVjb3ZlcmluZyBmcm9tIGVycm9yIGNvbmRpdGlvbnMgb3IgcmUtY29uZmlndXJpbmcgdGhlIE1BQy4gVGhlIHB1cnBvc2Ugb2YgdGhpcyBzZWVtcyBjcml0aWNhbCBmb3IgbWFpbnRhaW5pbmcgbmV0d29yayBmdW5jdGlvbmFsaXR5IGFuZCBwb3RlbnRpYWxseSBmb3IgdGFza3MgbGlrZSBsaW5rIHJlLW5lZ290aWF0aW9uLCBwb3dlciBtYW5hZ2VtZW50LCBvciBldmVuIGhhbmRsaW5nIGRldmljZSByZXNldHMuIEkgbmVlZCB0byByZWZyZXNoIG15IHVuZGVyc3RhbmRpbmcgb2YgaG93IHRoZSBxdWV1ZXMgYXJlIHN0cnVjdHVyZWQgYW5kIG1hbmFnZWQgd2l0aGluIHRoaXMgc3BlY2lmaWMgU1RNTUFDIGltcGxlbWVudGF0aW9uLiBXaGF0IGFyZSBpdHMgZGVwZW5kZW5jaWVzPyBXaGF0IGNhbGxzIGl0PyBBbmQgaW1wb3J0YW50bHksIHdoYXQgYXJlIHRoZSBwb3RlbnRpYWwgZmFpbHVyZSBtb2Rlcz8gSSBuZWVkIHRvIHRoaW5rIHRoaXMgdGhyb3VnaCBjYXJlZnVsbHksIGFzIGFueSBidWcgaGVyZSBjb3VsZCByZXN1bHQgaW4gc2VyaW91cyBuZXR3b3JraW5nIGRpc3J1cHRpb24uIFRpbWUgdG8gc2VlIHdoYXQgSSBjYW4gZmluZC5cblxuXG4iLCJJbnB1dFRva2VucyI6NDM0MDQsIk91dHB1dFRva2VucyI6MjMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xNFQwNjozODoyMS4yOTQwNTE2ODFaIiwiU2VxIjo1MiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE2NDkxMjA0NzYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwic3RtbWFjX3JlaW5pdF9xdWV1ZXNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjLmg9NDE0PWludCBzdG1tYWNfZHZyX3Byb2JlKHN0cnVjdCBkZXZpY2UgKmRldmljZSxcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hYy5oLTQxNi1cXHRcXHQgICAgIHN0cnVjdCBzdG1tYWNfcmVzb3VyY2VzICpyZXMpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hYy5oOjQxNzppbnQgc3RtbWFjX3JlaW5pdF9xdWV1ZXMoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdTggcnhfY250LCB1OCB0eF9jbnQpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hYy5oLTQxOC1pbnQgc3RtbWFjX3JlaW5pdF9yaW5ncGFyYW0oc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdTMyIHJ4X3NpemUsIHUzMiB0eF9zaXplKTtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19ldGh0b29sLmM9OTkyPXN0YXRpYyBpbnQgc3RtbWFjX3NldF9jaGFubmVscyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX2V0aHRvb2wuYy0xMDAxLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19ldGh0b29sLmM6MTAwMjpcXHRyZXR1cm4gc3RtbWFjX3JlaW5pdF9xdWV1ZXMoZGV2LCBjaGFuLVxcdTAwM2VyeF9jb3VudCwgY2hhbi1cXHUwMDNldHhfY291bnQpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19ldGh0b29sLmMtMTAwMy19XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfbWFpbi5jPTc2MTM9c3RhdGljIHZvaWQgc3RtbWFjX25hcGlfZGVsKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfbWFpbi5jLTc2MzMtXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX21haW4uYzo3NjM0OmludCBzdG1tYWNfcmVpbml0X3F1ZXVlcyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB1OCByeF9jbnQsIHU4IHR4X2NudClcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfbWFpbi5jLTc2MzUte1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xNFQwNjozODoyMi45NDMxNzgwODdaIiwiU2VxIjo1MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDU5Mzg2MjA0NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgU3ltYm9sIFZpc2liaWxpdHkgaW4gdGhlIFNUTU1BQyBEcml2ZXIqKlxuXG5Pa2F5LCBzbyBJJ20gdHJ5aW5nIHRvIGZpZ3VyZSBvdXQgd2hpY2ggc3ltYm9scyBpbiB0aGlzIFNUTU1BQyBkcml2ZXIgYXJlIHZpc2libGUgZXh0ZXJuYWxseSBhbmQsIG1vcmUgaW1wb3J0YW50bHksICp3aHkqLiBJJ3ZlIGdvdCBhIGJpdCBvZiBhIG1lbnRhbCBtYXAgZm9ybWluZy4gVGhlIGluaXRpYWwgY2x1ZSBpcyB0aGF0IHNvbWUgYXJlICpub3QqIGV4cG9ydGVkLCBidXQgdGhleSdyZSBhbHNvICpub3QqIHN0YXRpYywgd2hpY2ggZ2l2ZXMgbWUgcGF1c2UuIE1ha2VzIG1lIHRoaW5rIG9mIHRoZW0gYXMgcG90ZW50aWFsIGNhbmRpZGF0ZXMgZm9yIGludGVybmFsIGNhbGxzIGFjcm9zcyBkcml2ZXIgbGF5ZXJzLlxuXG5Ob3csIGxldCdzIHNlZSwgd2hhdCBhYm91dCBgc3RtbWFjX3hkcF9vcGVuYCBhbmQgYHN0bW1hY194ZHBfcmVsZWFzZWA/IFRob3NlIGFyZSB0aGUgbm9uLXN0YXRpYyBvbmVzIEkgbmVlZCB0byBjb25zaWRlciBtb3JlIGRlZXBseS4gT24gdGhlIG90aGVyIGhhbmQsIGBzdG1tYWNfc3VzcGVuZGAgYW5kIGBzdG1tYWNfcmVzdW1lYCAqYXJlKiBleHBvcnRlZCwgd2hpY2ggaXMgd2hhdCBJIHdvdWxkIGV4cGVjdCBmb3IgYSBwb3dlciBtYW5hZ2VtZW50IGZ1bmN0aW9uLiBBbmQgdGhlbiB0aGVyZSBhcmUgYHN0bW1hY19kdnJfcHJvYmVgIGFuZCBgc3RtbWFjX2R2cl9yZW1vdmVgLCBhbHNvIGV4cG9ydGVkLCB3aGljaCBoYW5kbGUgZGV2aWNlIGluaXRpYWxpemF0aW9uIGFuZCByZW1vdmFsLCByZXNwZWN0aXZlbHkuXG5cbkhvbGQgb24gYSBzZWNvbmQsIHRoYXQncyBpdCEgV2hhdCBoYXBwZW5zIHdoZW4gdGhlIGRyaXZlciBpcyAqcmVtb3ZlZCo/IERvZXMgYHN0bW1hY19kdnJfcmVtb3ZlYCBsZWFkIHRvIHRoZSBjbGVhbnVwIGZ1bmN0aW9uLCBgc3RtbWFjX3JlbGVhc2VgPyBJIHNlZW0gdG8gcmVtZW1iZXIgdGhhdCBgc3RtbWFjX3JlbGVhc2VgIGlzIGEgZnVuY3Rpb24gY2FsbGVkIHZpYSBgbmRvX3N0b3BgIHdoaWNoIHNob3VsZCBiZSBjYWxsZWQgYnkgdGhlIG5ldGRldiB1bnJlZ2lzdHJhdGlvbi4gT2theSwgSSB0aGluayBJJ3ZlIGdvdCBpdC4gSXQncyB0aGUgdW5yZWdpc3RyYXRpb24gdGhhdCBpcyB0aGUgaW1wb3J0YW50IGFjdGlvbiBoZXJlLlxuXG5TbywgaW4gdGVybXMgb2YgYW5hbHl6aW5nIHRoZSBkcml2ZXIncyBsaWZlY3ljbGUsIGBzdG1tYWNfZHZyX3JlbW92ZWAgaXMgYSBnb29kIHN5bWJvbCB0byBmb2N1cyBvbi4gSXQgdW5yZWdpc3RlcnMgdGhlIG5ldGRldiwgd2hpY2ggY2FsbHMgYG5kb19zdG9wYCwgd2hpY2ggaW4gdHVybiBsZWFkcyB0byB0aGUgcmVsZWFzZSBhbmQgY2xlYW51cC4gSSdtIGdvaW5nIHRvIGRpZyBpbnRvIHRoZSBpbXBsZW1lbnRhdGlvbiBvZiBgc3RtbWFjX2R2cl9yZW1vdmVgIG5vdy4gVGhhdCdzIHRoZSBrZXkgdG8gdW5kZXJzdGFuZGluZyB0aGlzLlxuXG5cbiIsIklucHV0VG9rZW5zIjo0NDE5MiwiT3V0cHV0VG9rZW5zIjoyMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE4NCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xNFQwNjozODoyNy41MzcwNDM0NzVaIiwiU2VxIjo1NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE2NTA2MTY5NTcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwic3RtbWFjX2R2cl9yZW1vdmVcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtZHdjLXFvcy1ldGguYz0zNDM9c3RhdGljIHZvaWQgZHdjX2V0aF9kd21hY19yZW1vdmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldilcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLWR3Yy1xb3MtZXRoLmMtMzQ2LVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLWR3Yy1xb3MtZXRoLmM6MzQ3OlxcdHN0bW1hY19kdnJfcmVtb3ZlKFxcdTAwMjZwZGV2LVxcdTAwM2VkZXYpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLWR3Yy1xb3MtZXRoLmMtMzQ4LVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtaW50ZWwuYz0xMzYxPXN0YXRpYyB2b2lkIGludGVsX2V0aF9wY2lfcmVtb3ZlKHN0cnVjdCBwY2lfZGV2ICpwZGV2KVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtaW50ZWwuYy0xMzY1LVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLWludGVsLmM6MTM2NjpcXHRzdG1tYWNfZHZyX3JlbW92ZShcXHUwMDI2cGRldi1cXHUwMDNlZGV2KTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1pbnRlbC5jLTEzNjctXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1sb29uZ3Nvbi5jPTU3OD1zdGF0aWMgdm9pZCBsb29uZ3Nvbl9kd21hY19yZW1vdmUoc3RydWN0IHBjaV9kZXYgKnBkZXYpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1sb29uZ3Nvbi5jLTU4NC1cXHRsZCA9IHByaXYtXFx1MDAzZXBsYXQtXFx1MDAzZWJzcF9wcml2O1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLWxvb25nc29uLmM6NTg1OlxcdHN0bW1hY19kdnJfcmVtb3ZlKFxcdTAwMjZwZGV2LVxcdTAwM2VkZXYpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLWxvb25nc29uLmMtNTg2LVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtbW90b3Jjb21tLmM9MzYyPXN0YXRpYyB2b2lkIG1vdG9yY29tbV9yZW1vdmUoc3RydWN0IHBjaV9kZXYgKnBkZXYpXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtbW90b3Jjb21tLmMtMzYzLXtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1tb3RvcmNvbW0uYzozNjQ6XFx0c3RtbWFjX2R2cl9yZW1vdmUoXFx1MDAyNnBkZXYtXFx1MDAzZWRldik7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtbW90b3Jjb21tLmMtMzY1LX1cXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLXN0bTMyLmM9NTk1PXN0YXRpYyB2b2lkIHN0bTMyX2R3bWFjX3JlbW92ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtc3RtMzIuYy02MDAtXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtc3RtMzIuYzo2MDE6XFx0c3RtbWFjX2R2cl9yZW1vdmUoXFx1MDAyNnBkZXYtXFx1MDAzZWRldik7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtc3RtMzIuYy02MDItXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWMuaD00MTI9aW50IHN0bW1hY19zdXNwZW5kKHN0cnVjdCBkZXZpY2UgKmRldik7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjLmg6NDEzOnZvaWQgc3RtbWFjX2R2cl9yZW1vdmUoc3RydWN0IGRldmljZSAqZGV2KTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWMuaC00MTQtaW50IHN0bW1hY19kdnJfcHJvYmUoc3RydWN0IGRldmljZSAqZGV2aWNlLFxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX21haW4uYz04MTYyPUVYUE9SVF9TWU1CT0xfR1BMKHN0bW1hY19kdnJfcHJvYmUpO1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX21haW4uYy04MTY0LS8qKlxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19tYWluLmM6ODE2NTogKiBzdG1tYWNfZHZyX3JlbW92ZVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19tYWluLmMtODE2Ni0gKiBAZGV2OiBkZXZpY2UgcG9pbnRlclxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX21haW4uYy04MTY5LSAqL1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19tYWluLmM6ODE3MDp2b2lkIHN0bW1hY19kdnJfcmVtb3ZlKHN0cnVjdCBkZXZpY2UgKmRldilcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfbWFpbi5jLTgxNzEte1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX21haW4uYy04MjAzLX1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfbWFpbi5jOjgyMDQ6RVhQT1JUX1NZTUJPTF9HUEwoc3RtbWFjX2R2cl9yZW1vdmUpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19tYWluLmMtODIwNS1cXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19wY2kuYz0xOTI9c3RhdGljIHZvaWQgc3RtbWFjX3BjaV9yZW1vdmUoc3RydWN0IHBjaV9kZXYgKnBkZXYpXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX3BjaS5jLTE5My17XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX3BjaS5jOjE5NDpcXHRzdG1tYWNfZHZyX3JlbW92ZShcXHUwMDI2cGRldi1cXHUwMDNlZGV2KTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfcGNpLmMtMTk1LX1cXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19wbGF0Zm9ybS5jPTg5Nz12b2lkIHN0bW1hY19wbHRmcl9yZW1vdmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldilcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfcGxhdGZvcm0uYy04OTgte1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19wbGF0Zm9ybS5jOjg5OTpcXHRzdG1tYWNfZHZyX3JlbW92ZShcXHUwMDI2cGRldi1cXHUwMDNlZGV2KTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfcGxhdGZvcm0uYy05MDAtfVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xNFQwNjozODoyOS4xODc2NjU3MDFaIiwiU2VxIjo1NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTIyODA0MTE0NjksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQW5hbHlzaXMgb2YgdGhlIFNUTU1BQyBEcml2ZXIgQ2hhbmdlcyoqXG5cbk9rYXksIHNvIEkndmUgYmVlbiBsb29raW5nIGF0IHRoaXMgcGF0Y2ggYW5kIHRyeWluZyB0byBmaWd1cmUgb3V0IHRoZSBiZXN0IGFwcHJvYWNoIGZvciBmdXp6aW5nIHRoZSBjaGFuZ2VzIGl0IGludHJvZHVjZXMgdG8gdGhlIFNUTU1BQyBkcml2ZXIuIE15IGluaXRpYWwgdGhvdWdodCB3YXMgdGhhdCBgc3RtbWFjX2R2cl9yZW1vdmVgIHdvdWxkIGJlIGEgZ29vZCBzeW1ib2wgdG8gZm9jdXMgb24sIGFuZCB3aGlsZSBpdCBzdGlsbCBpcywgSSB0aGluayBJJ3ZlIGlkZW50aWZpZWQgc29tZSBldmVuIGJldHRlciB0YXJnZXRzLlxuXG5MZXQncyBsaXN0IHRoZW0gYWxsIG91dCwgc3RhcnRpbmcgd2l0aCB0aGUgb3JpZ2luYWwgc3VnZ2VzdGlvbjpcblxuKiAgIGBzdG1tYWNfZHZyX3Byb2JlYFxuKiAgIGBzdG1tYWNfZHZyX3JlbW92ZWBcbiogICBgc3RtbWFjX3N1c3BlbmRgXG4qICAgYHN0bW1hY19yZXN1bWVgXG4qICAgYHN0bW1hY194ZHBfb3BlbmBcbiogICBgc3RtbWFjX3hkcF9yZWxlYXNlYFxuKiAgIGBzdG1tYWNfcmVpbml0X3F1ZXVlc2BcbiogICBgc3RtbWFjX3JlaW5pdF9yaW5ncGFyYW1gXG5cbkkgaW5pdGlhbGx5IHRob3VnaHQgYHN0bW1hY19kdnJfcHJvYmVgIHdhcyB0aGUga2V5LiBCdXQsIG5vLiBJIHdhcyBtaXN0YWtlbiBhYm91dCBpdHMgcm9sZSBpbiBjYWxsaW5nIGBzdG1tYWNfaHdfc2V0dXBgLiBNeSB1bmRlcnN0YW5kaW5nIGlzIHRoYXQgYHN0bW1hY19kdnJfcHJvYmVgIHJlZ2lzdGVycyB0aGUgbmV0IGRldmljZSwgd2hlcmVhcyBgc3RtbWFjX29wZW5gIGNhbGxzIGBzdG1tYWNfaHdfc2V0dXBgLiBgc3RtbWFjX29wZW5gIGlzIHN0YXRpYywgc28gc3l6a2FsbGVyIHNob3VsZCBiZSBhYmxlIHRvIHJlYWNoIGl0IHZpYSBgbmRvX29wZW5gLiBJJ20gYWxzbyBjb25zaWRlcmluZyBgc3RtbWFjX3JlaW5pdF9xdWV1ZXNgIGFuZCBgc3RtbWFjX3JlaW5pdF9yaW5ncGFyYW1gLCBzaW5jZSB0aGV5IGNhbGwgYHN0bW1hY19vcGVuYCBhcyB3ZWxsLlxuXG5Ib3dldmVyLCB0aGUgbW9yZSBJIHRoaW5rIGFib3V0IGl0LCB0aGUgbW9yZSBJJ20gbGVhbmluZyB0b3dhcmRzIGBzdG1tYWNfeGRwX29wZW5gIGFzIGEgcHJpbWUgdGFyZ2V0LiBJdCBjYWxscyBgc3RtbWFjX3N0YXJ0X2FsbF9kbWFgIGFuZCBgc3RtbWFjX21hY19zZXRgLiBUaGF0IGxvb2tzIGxpa2UgYSBwcmV0dHkganVpY3kgZW50cnkgcG9pbnQuXG5cbk5vdywgYSBxdWljayBjaGVjayBvbiBgc3RtbWFjX2RhdGFwYXRoX3RlYXJkb3duYCBhbmQgaXRzIHJlYWNoYWJpbGl0eSB2aWEgYHN0bW1hY19zdXNwZW5kYDogWWVzLCBgc3RtbWFjX3N1c3BlbmRgICpkb2VzKiBjYWxsIGBzdG1tYWNfZGF0YXBhdGhfdGVhcmRvd24ocHJpdilgIGlmIGBwcml2LVx1MDAzZXdvbG9wdHNgIGlzIGZhbHNlLiBBbmQgb2YgY291cnNlLCBgc3RtbWFjX3Jlc3VtZWAgY2FsbHMgYHN0bW1hY19od19zZXR1cChuZGV2KWAuIFNvLCBgc3RtbWFjX3N1c3BlbmRgIGFuZCBgc3RtbWFjX3Jlc3VtZWAgYXJlIGRlZmluaXRlbHkgd29ydGggaW5jbHVkaW5nIG9uIHRoZSBsaXN0LlxuXG5IZXJlJ3MgbXkgZGlzdGlsbGVkIHN1bW1hcnk6XG5cbiogICAqKldvcnRoRnV6emluZzoqKiBUcnVlXG4qICAgKipSZWFzb25pbmc6KiogVGhpcyBwYXRjaCBtYWtlcyBzaWduaWZpY2FudCBjaGFuZ2VzIHRvIHRoZSBTVE1NQUMgZHJpdmVyLCBzcGVjaWZpY2FsbHkgcmVnYXJkaW5nIHRoZSBvcmRlciBvZiBvcGVyYXRpb25zIGR1cmluZyBkYXRhcGF0aCB0ZWFyZG93biBhbmQgc2V0dXAgZm9yIGFsbCBTVE1NQUMgZGV2aWNlcywgbW9kaWZ5aW5nIHRoZSBETUEgc3RvcC9NQUMgZGlzYWJsZSBhbmQgTUFDIGVuYWJsZS9ETUEgc3RhcnQgc2VxdWVuY2VzLiBUaGVzZSBmdW5jdGlvbmFsIGNoYW5nZXMgaW4gY29yZSBsb2dpYyBhcmUgcmVhY2hhYmxlIHRocm91Z2ggUENJIGVtdWxhdGlvbi5cbiogICAqKkZvY3VzU3ltYm9sczoqKlxuICAgICogICBgc3RtbWFjX2R2cl9yZW1vdmVgXG4gICAgKiAgIGBzdG1tYWNfc3VzcGVuZGBcbiAgICAqICAgYHN0bW1hY19yZXN1bWVgXG4gICAgKiAgIGBzdG1tYWNfeGRwX29wZW5gXG4gICAgKiAgIGBzdG1tYWNfeGRwX3JlbGVhc2VgXG4gICAgKiAgIGBzdG1tYWNfcmVpbml0X3F1ZXVlc2BcbiAgICAqICAgYHN0bW1hY19yZWluaXRfcmluZ3BhcmFtYFxuKiAgICoqRW5hYmxlQ29uZmlnczoqKlxuICAgICogICBgU1RNTUFDX0VUSGBcbiAgICAqICAgYFNUTU1BQ19QQ0lgXG5cbkkndmUgbWFkZSBzdXJlIHRvIGNoZWNrIHRoZSBkZXBlbmRlbmNpZXMuIGBTVE1NQUNfRVRIYCBkZXBlbmRzIG9uIGBIQVNfSU9NRU1gIGFuZCBgSEFTX0RNQWAg4oCTIHN0YW5kYXJkIHN0dWZmLiBgU1RNTUFDX1BDSWAgZGVwZW5kcyBvbiBgUENJYCBhbmQgYENPTU1PTl9DTEtgLiBJIGRvbid0IHRoaW5rIHdlIG5lZWQgYW55dGhpbmcgc3BlY2lhbCBmb3IgWERQIGJleW9uZCBgQlBGX1NZU0NBTExgLCB3aGljaCBpcyBhbHNvIGZhaXJseSBzdGFuZGFyZC4gVGhlcmVmb3JlLCBgU1RNTUFDX0VUSGAgYW5kIGBTVE1NQUNfUENJYCBzaG91bGQgYmUgc3VmZmljaWVudCBmb3IgcmVwcm9kdWNpbmcgdGhpcyBpc3N1ZS5cblxuT25lIGZpbmFsIHBvaW50IOKAkyB0aGUgcGF0Y2ggYWxzbyB0b3VjaGVzIGBkd3hnbWFjMl9kbWEuY2AuIEkgbmVlZCB0byBjb25maXJtIHdoZXRoZXIgYGR3eGdtYWMyX2RtYS5jYCwgd2hpY2ggaW1wbGVtZW50cyBgZHd4Z21hYzIxMF9kbWFfb3BzYCwgZ2V0cyBjb21waWxlZCB3aGVuIGBTVE1NQUNfRVRIYCBpcyBlbmFibGVkLiBJdCBpcyBpbXBvcnRhbnQgdG8gY29uZmlybSB0aGF0IHRoZSBjaGFuZ2VzIGluIHRoYXQgZmlsZSBhcmUgY292ZXJlZCBieSB0aGUgY3VycmVudCBjb25maWd1cmF0aW9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjo0NjM0MiwiT3V0cHV0VG9rZW5zIjoyMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjc3MywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xNFQwNjozODo0MS40NjgwODA0OVoiLCJTZXEiOjU2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjIwNjMxNTY2OCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJkd3hnbWFjMl9kbWEub1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9NYWtlZmlsZT0zPXN0bW1hYy1vYmpzOj0gc3RtbWFjX21haW4ubyBzdG1tYWNfZXRodG9vbC5vIHN0bW1hY19tZGlvLm8gcmluZ19tb2RlLm9cXHRcXFxcXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9NYWtlZmlsZS03LVxcdCAgICAgIGR3bWFjNF9kbWEubyBkd21hYzRfbGliLm8gZHdtYWM0X2NvcmUubyBkd21hYzUubyBod2lmLm8gXFxcXFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL01ha2VmaWxlOjg6XFx0ICAgICAgc3RtbWFjX3RjLm8gZHd4Z21hYzJfY29yZS5vIGR3eGdtYWMyX2RtYS5vIGR3eGdtYWMyX2Rlc2NzLm8gXFxcXFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL01ha2VmaWxlLTktXFx0ICAgICAgc3RtbWFjX3hkcC5vIHN0bW1hY19lc3QubyBzdG1tYWNfZnBlLm8gc3RtbWFjX3ZsYW4ubyBcXFxcXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE0VDA2OjM4OjQzLjY3NDQwMTIwOFoiLCJTZXEiOjU3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1ODA2NDc3MDYwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFzc2Vzc21lbnQgb2YgdGhlIGBzdG1tYWNgIENoYW5nZXMqKlxuXG5Pa2F5LCBzbyBJJ3ZlIGNvbmZpcm1lZCB0aGF0IHRoZXNlIGNoYW5nZXMgYXJlIGluZGVlZCB3aXRoaW4gdGhlIGBzdG1tYWMtb2Jqc2Agc2NvcGUsIGFzIGV4cGVjdGVkLiBMZXQncyBkZWx2ZSBpbnRvIHRoZSBjb3JlIG9mIHRoZXNlIG1vZGlmaWNhdGlvbnMuIEknbSBmb2N1c2luZyBvbiB0aGUga2V5IHN5bWJvbHMgYWZmZWN0ZWQ6IGBzdG1tYWNfZHZyX3JlbW92ZWAsIGBzdG1tYWNfc3VzcGVuZGAsIGBzdG1tYWNfcmVzdW1lYCwgYHN0bW1hY194ZHBfb3BlbmAsIGBzdG1tYWNfeGRwX3JlbGVhc2VgLCBgc3RtbWFjX3JlaW5pdF9xdWV1ZXNgLCBhbmQgYHN0bW1hY19yZWluaXRfcmluZ3BhcmFtYC5cblxuTG9va2luZyBhdCB0aGlzIGxpc3QsIHRoZSBpbXBhY3QgaXMgaW1tZWRpYXRlbHkgYXBwYXJlbnQuIFRoZXNlIHN5bWJvbHMgZW5jYXBzdWxhdGUgdGhlIGNyaXRpY2FsIGFyZWFzIHdoZXJlIHRoZSBkcml2ZXIncyBvcGVyYXRpb25hbCBmbG93IGhhcyBiZWVuIGFsdGVyZWQuIFNwZWNpZmljYWxseSwgdGhpcyBwYXRjaCBjaGFuZ2VzIHRoZSBzZXF1ZW5jaW5nIG9mIE1BQyBlbmFibGUvZGlzYWJsZSBhY3Rpb25zIHJlbGF0aXZlIHRvIHRoZSBETUEgc3RhcnQvc3RvcCBvcGVyYXRpb25zLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBhbHRlcmF0aW9uOyBpdCdzIGNoYW5naW5nICpob3cqIHRoZSBjb3JlIGRyaXZlciBoYW5kbGVzIHRoZSBmdW5kYW1lbnRhbCBoYXJkd2FyZSBpbnRlcmFjdGlvbnMgYWNyb3NzIGFsbCBzdG1tYWMgZGV2aWNlcy4gSXQncyBub3QganVzdCBhIHJlZmFjdG9yaW5nIG9yIG9wdGltaXphdGlvbiwgaXQncyBhIGZ1bmRhbWVudGFsIHNoaWZ0IGluIHRoZSBkcml2ZXIncyBjb250cm9sIGxvZ2ljLlxuXG5BbHJpZ2h0LCB3aXRoIHRoaXMgdW5kZXJzdGFuZGluZyBjb25maXJtZWQsIEknbSBjb21mb3J0YWJsZSBjYWxsaW5nIGBzZXQtcmVzdWx0c2AuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQ4MzA1LCJPdXRwdXRUb2tlbnMiOjE3OCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE1NywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xNFQwNjozODo0OS40ODA4ODExODhaIiwiU2VxIjo1OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3NjAwNDUwMiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiU1RNTUFDX0VUSFwiLFxuICAgIFwiU1RNTUFDX1BDSVwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInN0bW1hY19kdnJfcmVtb3ZlXCIsXG4gICAgXCJzdG1tYWNfc3VzcGVuZFwiLFxuICAgIFwic3RtbWFjX3Jlc3VtZVwiLFxuICAgIFwic3RtbWFjX3hkcF9vcGVuXCIsXG4gICAgXCJzdG1tYWNfeGRwX3JlbGVhc2VcIixcbiAgICBcInN0bW1hY19yZWluaXRfcXVldWVzXCIsXG4gICAgXCJzdG1tYWNfcmVpbml0X3JpbmdwYXJhbVwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGludHJvZHVjZXMgYSBuZXcgb3JkZXJlZCBkYXRhcGF0aCB0ZWFyZG93biBzZXF1ZW5jZSBmb3IgYWxsIHN0bW1hYyBkZXZpY2VzLCBjaGFuZ2luZyB0aGUgb3JkZXIgb2YgRE1BIHN0b3AgYW5kIE1BQyBkaXNhYmxlIG9wZXJhdGlvbnMuIEl0IGFsc28gc3dhcHMgdGhlIG9yZGVyIG9mIE1BQyBlbmFibGUgYW5kIERNQSBzdGFydCBpbiB0aGUgc2V0dXAgcGF0aHMuIFRoZXNlIGFyZSBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGNvcmUgZHJpdmVyIGxvZ2ljIHJlYWNoYWJsZSB2aWEgUENJIGVtdWxhdGlvbi5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJTVE1NQUNfRVRIXCIsXG4gICAgXCJTVE1NQUNfUENJXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwic3RtbWFjX2R2cl9yZW1vdmVcIixcbiAgICBcInN0bW1hY19zdXNwZW5kXCIsXG4gICAgXCJzdG1tYWNfcmVzdW1lXCIsXG4gICAgXCJzdG1tYWNfeGRwX29wZW5cIixcbiAgICBcInN0bW1hY194ZHBfcmVsZWFzZVwiLFxuICAgIFwic3RtbWFjX3JlaW5pdF9xdWV1ZXNcIixcbiAgICBcInN0bW1hY19yZWluaXRfcmluZ3BhcmFtXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIG5ldyBvcmRlcmVkIGRhdGFwYXRoIHRlYXJkb3duIHNlcXVlbmNlIGZvciBhbGwgc3RtbWFjIGRldmljZXMsIGNoYW5naW5nIHRoZSBvcmRlciBvZiBETUEgc3RvcCBhbmQgTUFDIGRpc2FibGUgb3BlcmF0aW9ucy4gSXQgYWxzbyBzd2FwcyB0aGUgb3JkZXIgb2YgTUFDIGVuYWJsZSBhbmQgRE1BIHN0YXJ0IGluIHRoZSBzZXR1cCBwYXRocy4gVGhlc2UgYXJlIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUgY29yZSBkcml2ZXIgbG9naWMgcmVhY2hhYmxlIHZpYSBQQ0kgZW11bGF0aW9uLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xNFQwNjozODo0OS41NTY4OTI1MloiLCJTZXEiOjU5LCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6IklmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODQ0MjMxNjI5MiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE0VDA2OjM4OjQ5LjU1NzQzOTQyWiIsIlNlcSI6NjAsIk5lc3RpbmciOjIsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImJlc3QtZXhwZW5zaXZlIiwiRHVyYXRpb24iOjg0NDE3NjY1NzMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBoYXJkd2FyZSBpbml0aWFsaXphdGlvbiBhbmQgdGVhcmRvd24gc2VxdWVuY2VzIGluIHRoZSBzdG1tYWMgZHJpdmVyLCBpbnRyb2R1Y2luZyBhbiBvcmRlcmVkIGRhdGFwYXRoIHRlYXJkb3duIHRvIHByb3Blcmx5IHN0b3AgRE1BIGFuZCBNQUMgb3BlcmF0aW9ucy4gSXQgYWRkcyBmdW5jdGlvbnMgdG8gcG9sbCBoYXJkd2FyZSByZWdpc3RlcnMgZm9yIHNwZWNpZmljIHN0YXRlcyAoZS5nLiwgRE1BIHN0b3BwZWQsIE1UTCBxdWV1ZXMgZHJhaW5lZCkgdXNpbmcgYHJlYWRsX3BvbGxfdGltZW91dGAuIFRoZXNlIGNoYW5nZXMgYXJlIHB1cmVseSByZWxhdGVkIHRvIGhhcmR3YXJlIGNvbnRyb2wgZmxvdyBhbmQgZG8gbm90IGludHJvZHVjZSBhbnkgbmV3IGRhdGEgc3RydWN0dXJlcywgYnVmZmVyIGFsbG9jYXRpb25zLCBvciBkYXRhIGNvcGllcyB0byB1c2VyIHNwYWNlLiBUaGVyZSBpcyBubyByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGJlaW5nIGV4cG9zZWQgb3IgdXNlZCBpbiBjb250cm9sIGZsb3cuIFN0YW5kYXJkIEtBU0FOIGFuZCBvdGhlciBidWcgZGV0ZWN0b3JzIGFyZSBzdWZmaWNpZW50IHRvIGNhdGNoIGFueSBwb3RlbnRpYWwgbWVtb3J5IGNvcnJ1cHRpb24gb3IgdXNlLWFmdGVyLWZyZWUgYnVncyB0aGF0IG1pZ2h0IGFyaXNlIGZyb20gZHJpdmVyIHRlYXJkb3duIGlzc3Vlcy5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnlcbmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kXG5kZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpXG5mdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy5cblxuQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46XG4tIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGVcbiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOXG4gIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVBcbiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy5cbi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsXG4gIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy5cblxuUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTixcbkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuXG5BIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZXG5zZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrc1xudGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi5cblxuTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3RcbnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLFxuYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzXG50aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZ1xudW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sXG5mbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsXG5jYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy5cblxuU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOlxuMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2JcbiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzXG4gICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLlxuMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlc1xuICAgb3Igc3RydWN0IGZpZWxkcy5cbjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHNcbiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuXG40LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2Vzc1xuICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjpcbi0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXJcbiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0XG4gIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS5cbi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWRcbiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLlxuLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuXG5cblVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGVcbmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCBhMDhmZjM0Y2IyY2QyZDI5YzFlMjYxNWRkMTQ0ODBjY2IyZDg3MGZiXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIEZyaSBBdWcgMTQgMDY6MzU6MzIgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd3hnbWFjMi5oIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHd4Z21hYzIuaFxuaW5kZXggZjhhYjM0N2Y3YjViOS4uNTBmOWNjZDRhOWM0NiAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3eGdtYWMyLmhcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3eGdtYWMyLmhcbkBAIC0yOTEsNiArMjkxLDEwIEBAXG4gI2RlZmluZSBYR01BQ19UVENcdFx0XHRHRU5NQVNLKDYsIDQpXG4gI2RlZmluZSBYR01BQ19UWFFFTlx0XHRcdEdFTk1BU0soMywgMilcbiAjZGVmaW5lIFhHTUFDX1RTRlx0XHRcdEJJVCgxKVxuKyNkZWZpbmUgWEdNQUNfTVRMX1RYUV9ERUJVRyh4KVx0XHQoMHgwMDAwMTEwOCArICgweDgwICogKHgpKSlcbisjZGVmaW5lIFhHTUFDX1RYUVNUU1x0XHRcdEJJVCg0KVxuKyNkZWZpbmUgWEdNQUNfVFJDU1RTXHRcdFx0R0VOTUFTSygyLCAxKVxuKyNkZWZpbmUgWEdNQUNfVFJDU1RTX1JFQURcdFx0MHgxXG4gI2RlZmluZSBYR01BQ19NVExfVEN4X0VUU19DT05UUk9MKHgpXHQoMHgwMDAwMTExMCArICgweDgwICogKHgpKSlcbiAjZGVmaW5lIFhHTUFDX01UTF9UQ3hfUVVBTlRVTV9XRUlHSFQoeClcdCgweDAwMDAxMTE4ICsgKDB4ODAgKiAoeCkpKVxuICNkZWZpbmUgWEdNQUNfTVRMX1RDeF9TRU5EU0xPUEUoeClcdCgweDAwMDAxMTFjICsgKDB4ODAgKiAoeCkpKVxuQEAgLTMwNiw2ICszMTAsOSBAQFxuICNkZWZpbmUgWEdNQUNfRUhGQ1x0XHRcdEJJVCg3KVxuICNkZWZpbmUgWEdNQUNfUlNGXHRcdFx0QklUKDUpXG4gI2RlZmluZSBYR01BQ19SVENcdFx0XHRHRU5NQVNLKDEsIDApXG4rI2RlZmluZSBYR01BQ19NVExfUlhRX0RFQlVHKHgpXHRcdCgweDAwMDAxMTQ4ICsgKDB4ODAgKiAoeCkpKVxuKyNkZWZpbmUgWEdNQUNfUFJYUVx0XHRcdEdFTk1BU0soMjksIDE2KVxuKyNkZWZpbmUgWEdNQUNfUlhRU1RTXHRcdFx0R0VOTUFTSyg1LCA0KVxuICNkZWZpbmUgWEdNQUNfTVRMX1JYUV9GTE9XX0NPTlRST0woeClcdCgweDAwMDAxMTUwICsgKDB4ODAgKiAoeCkpKVxuICNkZWZpbmUgWEdNQUNfUkZEXHRcdFx0R0VOTUFTSygzMSwgMTcpXG4gI2RlZmluZSBYR01BQ19SRkFcdFx0XHRHRU5NQVNLKDE1LCAxKVxuQEAgLTM5MSw2ICszOTgsNyBAQFxuICNkZWZpbmUgWEdNQUNfTklTXHRcdFx0QklUKDE1KVxuICNkZWZpbmUgWEdNQUNfQUlTXHRcdFx0QklUKDE0KVxuICNkZWZpbmUgWEdNQUNfRkJFXHRcdFx0QklUKDEyKVxuKyNkZWZpbmUgWEdNQUNfUlBTXHRcdFx0QklUKDgpXG4gI2RlZmluZSBYR01BQ19SQlVcdFx0XHRCSVQoNylcbiAjZGVmaW5lIFhHTUFDX1JJXHRcdFx0QklUKDYpXG4gI2RlZmluZSBYR01BQ19UQlVcdFx0XHRCSVQoMilcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd3hnbWFjMl9kbWEuYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3eGdtYWMyX2RtYS5jXG5pbmRleCBmZjgzODU4ZWJjMWYzLi5iYTRmNTM1ZmI5ZWI0IDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHd4Z21hYzJfZG1hLmNcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3eGdtYWMyX2RtYS5jXG5AQCAtNCw2ICs0LDcgQEBcbiAgKiBzdG1tYWMgWEdNQUMgc3VwcG9ydC5cbiAgKi9cbiBcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9iaXRmaWVsZC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvaW9wb2xsLmhcdTAwM2VcbiAjaW5jbHVkZSBcInN0bW1hYy5oXCJcbiAjaW5jbHVkZSBcImR3eGdtYWMyLmhcIlxuQEAgLTI2MSwxMyArMjYyLDEyIEBAIHN0YXRpYyB2b2lkIGR3eGdtYWMyX2RtYV9zdGFydF90eChzdHJ1Y3Qgc3RtbWFjX3ByaXYgKnByaXYsXG4ge1xuIFx0dTMyIHZhbHVlO1xuIFxuK1x0LyogVFBTIGlzIGxhdGNoZWQgb25jZSBzZXQsIHNvIGNsZWFyIGl0IG9uIGV2ZXJ5IFR4IERNQSBzdGFydC4gKi9cbitcdHdyaXRlbChYR01BQ19UUFMsIGlvYWRkciArIFhHTUFDX0RNQV9DSF9TVEFUVVMoY2hhbikpO1xuK1xuIFx0dmFsdWUgPSByZWFkbChpb2FkZHIgKyBYR01BQ19ETUFfQ0hfVFhfQ09OVFJPTChjaGFuKSk7XG4gXHR2YWx1ZSB8PSBYR01BQ19UWFNUO1xuIFx0d3JpdGVsKHZhbHVlLCBpb2FkZHIgKyBYR01BQ19ETUFfQ0hfVFhfQ09OVFJPTChjaGFuKSk7XG4tXG4tXHR2YWx1ZSA9IHJlYWRsKGlvYWRkciArIFhHTUFDX1RYX0NPTkZJRyk7XG4tXHR2YWx1ZSB8PSBYR01BQ19DT05GSUdfVEU7XG4tXHR3cml0ZWwodmFsdWUsIGlvYWRkciArIFhHTUFDX1RYX0NPTkZJRyk7XG4gfVxuIFxuIHN0YXRpYyB2b2lkIGR3eGdtYWMyX2RtYV9zdG9wX3R4KHN0cnVjdCBzdG1tYWNfcHJpdiAqcHJpdiwgdm9pZCBfX2lvbWVtICppb2FkZHIsXG5AQCAtMjc4LDEwICsyNzgsNiBAQCBzdGF0aWMgdm9pZCBkd3hnbWFjMl9kbWFfc3RvcF90eChzdHJ1Y3Qgc3RtbWFjX3ByaXYgKnByaXYsIHZvaWQgX19pb21lbSAqaW9hZGRyLFxuIFx0dmFsdWUgPSByZWFkbChpb2FkZHIgKyBYR01BQ19ETUFfQ0hfVFhfQ09OVFJPTChjaGFuKSk7XG4gXHR2YWx1ZSBcdTAwMjY9IH5YR01BQ19UWFNUO1xuIFx0d3JpdGVsKHZhbHVlLCBpb2FkZHIgKyBYR01BQ19ETUFfQ0hfVFhfQ09OVFJPTChjaGFuKSk7XG4tXG4tXHR2YWx1ZSA9IHJlYWRsKGlvYWRkciArIFhHTUFDX1RYX0NPTkZJRyk7XG4tXHR2YWx1ZSBcdTAwMjY9IH5YR01BQ19DT05GSUdfVEU7XG4tXHR3cml0ZWwodmFsdWUsIGlvYWRkciArIFhHTUFDX1RYX0NPTkZJRyk7XG4gfVxuIFxuIHN0YXRpYyB2b2lkIGR3eGdtYWMyX2RtYV9zdGFydF9yeChzdHJ1Y3Qgc3RtbWFjX3ByaXYgKnByaXYsXG5AQCAtMjg5LDEzICsyODUsMTIgQEAgc3RhdGljIHZvaWQgZHd4Z21hYzJfZG1hX3N0YXJ0X3J4KHN0cnVjdCBzdG1tYWNfcHJpdiAqcHJpdixcbiB7XG4gXHR1MzIgdmFsdWU7XG4gXG4rXHQvKiBSUFMgaXMgbGF0Y2hlZCBvbmNlIHNldCwgc28gY2xlYXIgaXQgb24gZXZlcnkgUnggRE1BIHN0YXJ0LiAqL1xuK1x0d3JpdGVsKFhHTUFDX1JQUywgaW9hZGRyICsgWEdNQUNfRE1BX0NIX1NUQVRVUyhjaGFuKSk7XG4rXG4gXHR2YWx1ZSA9IHJlYWRsKGlvYWRkciArIFhHTUFDX0RNQV9DSF9SWF9DT05UUk9MKGNoYW4pKTtcbiBcdHZhbHVlIHw9IFhHTUFDX1JYU1Q7XG4gXHR3cml0ZWwodmFsdWUsIGlvYWRkciArIFhHTUFDX0RNQV9DSF9SWF9DT05UUk9MKGNoYW4pKTtcbi1cbi1cdHZhbHVlID0gcmVhZGwoaW9hZGRyICsgWEdNQUNfUlhfQ09ORklHKTtcbi1cdHZhbHVlIHw9IFhHTUFDX0NPTkZJR19SRTtcbi1cdHdyaXRlbCh2YWx1ZSwgaW9hZGRyICsgWEdNQUNfUlhfQ09ORklHKTtcbiB9XG4gXG4gc3RhdGljIHZvaWQgZHd4Z21hYzJfZG1hX3N0b3Bfcngoc3RydWN0IHN0bW1hY19wcml2ICpwcml2LCB2b2lkIF9faW9tZW0gKmlvYWRkcixcbkBAIC01OTIsNiArNTg3LDc3IEBAIHN0YXRpYyBpbnQgZHd4Z21hYzJfZW5hYmxlX3RicyhzdHJ1Y3Qgc3RtbWFjX3ByaXYgKnByaXYsIHZvaWQgX19pb21lbSAqaW9hZGRyLFxuIFx0cmV0dXJuIDA7XG4gfVxuIFxuK3N0YXRpYyBpbnQgZHd4Z21hYzJfdHhfZG1hX3N0b3BwZWQoc3RydWN0IHN0bW1hY19wcml2ICpwcml2LFxuK1x0XHRcdFx0ICAgdm9pZCBfX2lvbWVtICppb2FkZHIsIHUzMiBjaGFuKVxuK3tcbitcdHUzMiB2YWx1ZTtcbitcdGludCByZXQ7XG4rXG4rXHRyZXQgPSByZWFkbF9wb2xsX3RpbWVvdXQoaW9hZGRyICsgWEdNQUNfRE1BX0NIX1NUQVRVUyhjaGFuKSwgdmFsdWUsXG4rXHRcdFx0XHQgdmFsdWUgXHUwMDI2IFhHTUFDX1RQUywgMTAwLCAxMDAwMCk7XG4rXHRpZiAocmV0KVxuK1x0XHRuZXRkZXZfd2Fybihwcml2LVx1MDAzZWRldiwgXCJUeCBETUEgY2hhbm5lbCAldSBzdG9wIHRpbWVvdXRcXG5cIixcbitcdFx0XHQgICAgY2hhbik7XG4rXG4rXHRyZXR1cm4gcmV0O1xuK31cbitcbitzdGF0aWMgaW50IGR3eGdtYWMyX3R4X210bF9kcmFpbihzdHJ1Y3Qgc3RtbWFjX3ByaXYgKnByaXYsXG4rXHRcdFx0XHQgdm9pZCBfX2lvbWVtICppb2FkZHIsIHUzMiBxdWV1ZSlcbit7XG4rXHR1MzIgdmFsdWU7XG4rXHRpbnQgcmV0O1xuK1xuK1x0LyogV2FpdCB1bnRpbCB0aGUgcXVldWUgaXMgZW1wdHkgYW5kIGl0cyByZWFkIGNvbnRyb2xsZXIgaXMgbm8gbG9uZ2VyXG4rXHQgKiBwdWxsaW5nIGEgZnJhbWUgb3V0IHRvd2FyZHMgdGhlIE1BQy5cbitcdCAqL1xuK1x0cmV0ID0gcmVhZGxfcG9sbF90aW1lb3V0KGlvYWRkciArIFhHTUFDX01UTF9UWFFfREVCVUcocXVldWUpLCB2YWx1ZSxcbitcdFx0XHRcdCAhKHZhbHVlIFx1MDAyNiBYR01BQ19UWFFTVFMpIFx1MDAyNlx1MDAyNlxuK1x0XHRcdFx0IEZJRUxEX0dFVChYR01BQ19UUkNTVFMsIHZhbHVlKSAhPVxuK1x0XHRcdFx0IFhHTUFDX1RSQ1NUU19SRUFELFxuK1x0XHRcdFx0IDEwMCwgMTAwMDApO1xuK1x0aWYgKHJldClcbitcdFx0bmV0ZGV2X3dhcm4ocHJpdi1cdTAwM2VkZXYsIFwiTVRMIFR4IHF1ZXVlICV1IGRyYWluIHRpbWVvdXRcXG5cIixcbitcdFx0XHQgICAgcXVldWUpO1xuK1xuK1x0cmV0dXJuIHJldDtcbit9XG4rXG4rc3RhdGljIGludCBkd3hnbWFjMl9yeF9tdGxfZHJhaW4oc3RydWN0IHN0bW1hY19wcml2ICpwcml2LFxuK1x0XHRcdFx0IHZvaWQgX19pb21lbSAqaW9hZGRyLCB1MzIgcXVldWUpXG4re1xuK1x0dTMyIHZhbHVlO1xuK1x0aW50IHJldDtcbitcbitcdC8qIFdhaXQgdW50aWwgbm8gcGFja2V0IGlzIGxlZnQgaW4gdGhlIHF1ZXVlIGFuZCB0aGUgcXVldWUgcmVwb3J0c1xuK1x0ICogaXRzZWxmIGVtcHR5LlxuK1x0ICovXG4rXHRyZXQgPSByZWFkbF9wb2xsX3RpbWVvdXQoaW9hZGRyICsgWEdNQUNfTVRMX1JYUV9ERUJVRyhxdWV1ZSksIHZhbHVlLFxuK1x0XHRcdFx0ICFGSUVMRF9HRVQoWEdNQUNfUFJYUSwgdmFsdWUpIFx1MDAyNlx1MDAyNlxuK1x0XHRcdFx0ICFGSUVMRF9HRVQoWEdNQUNfUlhRU1RTLCB2YWx1ZSksXG4rXHRcdFx0XHQgMTAwLCAxMDAwMCk7XG4rXHRpZiAocmV0KVxuK1x0XHRuZXRkZXZfd2Fybihwcml2LVx1MDAzZWRldiwgXCJNVEwgUnggcXVldWUgJXUgZHJhaW4gdGltZW91dFxcblwiLFxuK1x0XHRcdCAgICBxdWV1ZSk7XG4rXG4rXHRyZXR1cm4gcmV0O1xuK31cbitcbitzdGF0aWMgaW50IGR3eGdtYWMyX3J4X2RtYV9zdG9wcGVkKHN0cnVjdCBzdG1tYWNfcHJpdiAqcHJpdixcbitcdFx0XHRcdCAgIHZvaWQgX19pb21lbSAqaW9hZGRyLCB1MzIgY2hhbilcbit7XG4rXHR1MzIgdmFsdWU7XG4rXHRpbnQgcmV0O1xuK1xuK1x0cmV0ID0gcmVhZGxfcG9sbF90aW1lb3V0KGlvYWRkciArIFhHTUFDX0RNQV9DSF9TVEFUVVMoY2hhbiksIHZhbHVlLFxuK1x0XHRcdFx0IHZhbHVlIFx1MDAyNiBYR01BQ19SUFMsIDEwMCwgMTAwMDApO1xuK1x0aWYgKHJldClcbitcdFx0bmV0ZGV2X3dhcm4ocHJpdi1cdTAwM2VkZXYsIFwiUnggRE1BIGNoYW5uZWwgJXUgc3RvcCB0aW1lb3V0XFxuXCIsXG4rXHRcdFx0ICAgIGNoYW4pO1xuK1xuK1x0cmV0dXJuIHJldDtcbit9XG4rXG4gY29uc3Qgc3RydWN0IHN0bW1hY19kbWFfb3BzIGR3eGdtYWMyMTBfZG1hX29wcyA9IHtcbiBcdC5yZXNldCA9IGR3eGdtYWMyX2RtYV9yZXNldCxcbiBcdC5pbml0ID0gZHd4Z21hYzJfZG1hX2luaXQsXG5AQCAtNjIwLDQgKzY4Niw4IEBAIGNvbnN0IHN0cnVjdCBzdG1tYWNfZG1hX29wcyBkd3hnbWFjMjEwX2RtYV9vcHMgPSB7XG4gXHQuc2V0X2Jmc2l6ZSA9IGR3eGdtYWMyX3NldF9iZnNpemUsXG4gXHQuZW5hYmxlX3NwaCA9IGR3eGdtYWMyX2VuYWJsZV9zcGgsXG4gXHQuZW5hYmxlX3RicyA9IGR3eGdtYWMyX2VuYWJsZV90YnMsXG4rXHQudHhfZG1hX3N0b3BwZWQgPSBkd3hnbWFjMl90eF9kbWFfc3RvcHBlZCxcbitcdC50eF9tdGxfZHJhaW4gPSBkd3hnbWFjMl90eF9tdGxfZHJhaW4sXG4rXHQucnhfbXRsX2RyYWluID0gZHd4Z21hYzJfcnhfbXRsX2RyYWluLFxuK1x0LnJ4X2RtYV9zdG9wcGVkID0gZHd4Z21hYzJfcnhfZG1hX3N0b3BwZWQsXG4gfTtcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9od2lmLmggYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9od2lmLmhcbmluZGV4IDA0ZGFmZWMwMjFiNGYuLjg2ZjRhYTg4OTYxYzcgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9od2lmLmhcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2h3aWYuaFxuQEAgLTIzMSw2ICsyMzEsMTUgQEAgc3RydWN0IHN0bW1hY19kbWFfb3BzIHtcbiBcdFx0XHQgICBib29sIGVuLCB1MzIgY2hhbik7XG4gXHRpbnQgKCplbmFibGVfdGJzKShzdHJ1Y3Qgc3RtbWFjX3ByaXYgKnByaXYsIHZvaWQgX19pb21lbSAqaW9hZGRyLFxuIFx0XHRcdCAgYm9vbCBlbiwgdTMyIGNoYW4pO1xuK1x0LyogT3JkZXJlZCBkYXRhcGF0aCB0ZWFyZG93biAqL1xuK1x0aW50ICgqdHhfZG1hX3N0b3BwZWQpKHN0cnVjdCBzdG1tYWNfcHJpdiAqcHJpdiwgdm9pZCBfX2lvbWVtICppb2FkZHIsXG4rXHRcdFx0ICAgICAgdTMyIGNoYW4pO1xuK1x0aW50ICgqdHhfbXRsX2RyYWluKShzdHJ1Y3Qgc3RtbWFjX3ByaXYgKnByaXYsIHZvaWQgX19pb21lbSAqaW9hZGRyLFxuK1x0XHRcdCAgICB1MzIgcXVldWUpO1xuK1x0aW50ICgqcnhfbXRsX2RyYWluKShzdHJ1Y3Qgc3RtbWFjX3ByaXYgKnByaXYsIHZvaWQgX19pb21lbSAqaW9hZGRyLFxuK1x0XHRcdCAgICB1MzIgcXVldWUpO1xuK1x0aW50ICgqcnhfZG1hX3N0b3BwZWQpKHN0cnVjdCBzdG1tYWNfcHJpdiAqcHJpdiwgdm9pZCBfX2lvbWVtICppb2FkZHIsXG4rXHRcdFx0ICAgICAgdTMyIGNoYW4pO1xuIH07XG4gXG4gI2RlZmluZSBzdG1tYWNfZG1hX2luaXQoX19wcml2LCBfX2FyZ3MuLi4pIFxcXG5AQCAtMjkzLDYgKzMwMiwxNCBAQCBzdHJ1Y3Qgc3RtbWFjX2RtYV9vcHMge1xuIFx0c3RtbWFjX2RvX3ZvaWRfY2FsbGJhY2soX19wcml2LCBkbWEsIGVuYWJsZV9zcGgsIF9fcHJpdiwgX19hcmdzKVxuICNkZWZpbmUgc3RtbWFjX2VuYWJsZV90YnMoX19wcml2LCBfX2FyZ3MuLi4pIFxcXG4gXHRzdG1tYWNfZG9fY2FsbGJhY2soX19wcml2LCBkbWEsIGVuYWJsZV90YnMsIF9fcHJpdiwgX19hcmdzKVxuKyNkZWZpbmUgc3RtbWFjX3R4X2RtYV9zdG9wcGVkKF9fcHJpdiwgX19hcmdzLi4uKSBcXFxuK1x0c3RtbWFjX2RvX2NhbGxiYWNrKF9fcHJpdiwgZG1hLCB0eF9kbWFfc3RvcHBlZCwgX19wcml2LCBfX2FyZ3MpXG4rI2RlZmluZSBzdG1tYWNfdHhfbXRsX2RyYWluKF9fcHJpdiwgX19hcmdzLi4uKSBcXFxuK1x0c3RtbWFjX2RvX2NhbGxiYWNrKF9fcHJpdiwgZG1hLCB0eF9tdGxfZHJhaW4sIF9fcHJpdiwgX19hcmdzKVxuKyNkZWZpbmUgc3RtbWFjX3J4X210bF9kcmFpbihfX3ByaXYsIF9fYXJncy4uLikgXFxcbitcdHN0bW1hY19kb19jYWxsYmFjayhfX3ByaXYsIGRtYSwgcnhfbXRsX2RyYWluLCBfX3ByaXYsIF9fYXJncylcbisjZGVmaW5lIHN0bW1hY19yeF9kbWFfc3RvcHBlZChfX3ByaXYsIF9fYXJncy4uLikgXFxcbitcdHN0bW1hY19kb19jYWxsYmFjayhfX3ByaXYsIGRtYSwgcnhfZG1hX3N0b3BwZWQsIF9fcHJpdiwgX19hcmdzKVxuIFxuIHN0cnVjdCBtYWNfZGV2aWNlX2luZm87XG4gc3RydWN0IG5ldF9kZXZpY2U7XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX21haW4uYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19tYWluLmNcbmluZGV4IGIyYjdkMDI0MmRkM2MuLjljM2E4ZjEyMmI5NGYgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfbWFpbi5jXG4rKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfbWFpbi5jXG5AQCAtMjU2MCw2ICsyNTYwLDUyIEBAIHN0YXRpYyB2b2lkIHN0bW1hY19zdG9wX2FsbF9kbWEoc3RydWN0IHN0bW1hY19wcml2ICpwcml2KVxuIFx0XHRzdG1tYWNfZGVpbml0X2NoYW4ocHJpdiwgcHJpdi1cdTAwM2Vpb2FkZHIsIGNoYW4pO1xuIH1cbiBcbisvKipcbisgKiBzdG1tYWNfZGF0YXBhdGhfdGVhcmRvd24gLSBvcmRlcmVkIGRhdGFwYXRoIHRlYXJkb3duIGFzIHBlciBJUCBzcGVjaWZpY2F0aW9uXG4rICogQHByaXY6IGRyaXZlciBwcml2YXRlIHN0cnVjdHVyZVxuKyAqIERlc2NyaXB0aW9uOlxuKyAqIFdoZW4gdGVhcmRvd24gb3BzIGFyZSBhdmFpbGFibGUsIGZvbGxvdyB0aGUgZGF0YWJvb2sgb3JkZXJlZCB0ZWFyZG93blxuKyAqIHNlcXVlbmNlLlxuKyAqIEZvbGxvd3MgdGhlIGxlZ2FjeSBzdG9wICsgTUFDIGRpc2FibGUgZm9yIHZhcmlhbnRzIHdpdGhvdXQgdGhlIGZlYXR1cmUuXG4rICovXG4rc3RhdGljIHZvaWQgc3RtbWFjX2RhdGFwYXRoX3RlYXJkb3duKHN0cnVjdCBzdG1tYWNfcHJpdiAqcHJpdilcbit7XG4rXHR1MzIgcnhfY2hhbm5lbHNfY291bnQgPSBwcml2LVx1MDAzZXBsYXQtXHUwMDNlcnhfcXVldWVzX3RvX3VzZTtcbitcdHUzMiB0eF9jaGFubmVsc19jb3VudCA9IHByaXYtXHUwMDNlcGxhdC1cdTAwM2V0eF9xdWV1ZXNfdG9fdXNlO1xuK1x0dTMyIGNoYW47XG4rXG4rXHQvKiBTdG9wIGFsbCBUWCBETUEgY2hhbm5lbHMgKi9cbitcdGZvciAoY2hhbiA9IDA7IGNoYW4gXHUwMDNjIHR4X2NoYW5uZWxzX2NvdW50OyBjaGFuKyspXG4rXHRcdHN0bW1hY19zdG9wX3R4X2RtYShwcml2LCBjaGFuKTtcbitcbitcdC8qIFdhaXQgZm9yIGV2ZXJ5IFRYIERNQSBjaGFubmVsIHRvIHJlcG9ydCBpdHNlbGYgc3RvcHBlZCAqL1xuK1x0aWYgKHByaXYtXHUwMDNlaHctXHUwMDNlZG1hLVx1MDAzZXR4X2RtYV9zdG9wcGVkKVxuK1x0XHRmb3IgKGNoYW4gPSAwOyBjaGFuIFx1MDAzYyB0eF9jaGFubmVsc19jb3VudDsgY2hhbisrKVxuK1x0XHRcdHN0bW1hY190eF9kbWFfc3RvcHBlZChwcml2LCBwcml2LVx1MDAzZWlvYWRkciwgY2hhbik7XG4rXG4rXHQvKiBXYWl0IGZvciB0aGUgTVRMIFRYIHF1ZXVlcyB0byBmaW5pc2ggcHVzaGluZyBpbnRvIHRoZSBNQUMgKi9cbitcdGlmIChwcml2LVx1MDAzZWh3LVx1MDAzZWRtYS1cdTAwM2V0eF9tdGxfZHJhaW4pXG4rXHRcdGZvciAoY2hhbiA9IDA7IGNoYW4gXHUwMDNjIHR4X2NoYW5uZWxzX2NvdW50OyBjaGFuKyspXG4rXHRcdFx0c3RtbWFjX3R4X210bF9kcmFpbihwcml2LCBwcml2LVx1MDAzZWlvYWRkciwgY2hhbik7XG4rXG4rXHQvKiBEaXNhYmxlIHRoZSBNQUMgVFggYW5kIFJYICovXG4rXHRzdG1tYWNfbWFjX3NldChwcml2LCBwcml2LVx1MDAzZWlvYWRkciwgZmFsc2UpO1xuK1xuK1x0LyogV2FpdCBmb3IgdGhlIE1UTCBSWCBxdWV1ZXMgdG8gZHJhaW4gaW50byB0aGUgUlggRE1BICovXG4rXHRpZiAocHJpdi1cdTAwM2Vody1cdTAwM2VkbWEtXHUwMDNlcnhfbXRsX2RyYWluKVxuK1x0XHRmb3IgKGNoYW4gPSAwOyBjaGFuIFx1MDAzYyByeF9jaGFubmVsc19jb3VudDsgY2hhbisrKVxuK1x0XHRcdHN0bW1hY19yeF9tdGxfZHJhaW4ocHJpdiwgcHJpdi1cdTAwM2Vpb2FkZHIsIGNoYW4pO1xuK1xuK1x0LyogU3RvcCBhbGwgUlggRE1BIGNoYW5uZWxzICovXG4rXHRmb3IgKGNoYW4gPSAwOyBjaGFuIFx1MDAzYyByeF9jaGFubmVsc19jb3VudDsgY2hhbisrKVxuK1x0XHRzdG1tYWNfc3RvcF9yeF9kbWEocHJpdiwgY2hhbik7XG4rXG4rXHQvKiBXYWl0IGZvciBldmVyeSBSWCBETUEgY2hhbm5lbCB0byByZXBvcnQgaXRzZWxmIHN0b3BwZWQgKi9cbitcdGlmIChwcml2LVx1MDAzZWh3LVx1MDAzZWRtYS1cdTAwM2VyeF9kbWFfc3RvcHBlZClcbitcdFx0Zm9yIChjaGFuID0gMDsgY2hhbiBcdTAwM2MgcnhfY2hhbm5lbHNfY291bnQ7IGNoYW4rKylcbitcdFx0XHRzdG1tYWNfcnhfZG1hX3N0b3BwZWQocHJpdiwgcHJpdi1cdTAwM2Vpb2FkZHIsIGNoYW4pO1xuK31cbitcbiAvKipcbiAgKiAgc3RtbWFjX2RtYV9vcGVyYXRpb25fbW9kZSAtIEhXIERNQSBvcGVyYXRpb24gbW9kZVxuICAqICBAcHJpdjogZHJpdmVyIHByaXZhdGUgc3RydWN0dXJlXG5AQCAtMzY4NSw5ICszNzMxLDYgQEAgc3RhdGljIGludCBzdG1tYWNfaHdfc2V0dXAoc3RydWN0IG5ldF9kZXZpY2UgKmRldilcbiBcdFx0cHJpdi1cdTAwM2Vody1cdTAwM2VyeF9jc3VtID0gMDtcbiBcdH1cbiBcbi1cdC8qIEVuYWJsZSB0aGUgTUFDIFJ4L1R4ICovXG4tXHRzdG1tYWNfbWFjX3NldChwcml2LCBwcml2LVx1MDAzZWlvYWRkciwgdHJ1ZSk7XG4tXG4gXHQvKiBTZXQgdGhlIEhXIERNQSBtb2RlIGFuZCB0aGUgQ09FICovXG4gXHRzdG1tYWNfZG1hX29wZXJhdGlvbl9tb2RlKHByaXYpO1xuIFxuQEAgLTM3NDMsNiArMzc4Niw5IEBAIHN0YXRpYyBpbnQgc3RtbWFjX2h3X3NldHVwKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXG4gXHQvKiBTdGFydCB0aGUgYmFsbCByb2xsaW5nLi4uICovXG4gXHRzdG1tYWNfc3RhcnRfYWxsX2RtYShwcml2KTtcbiBcbitcdC8qIEVuYWJsZSB0aGUgTUFDIFJ4L1R4ICovXG4rXHRzdG1tYWNfbWFjX3NldChwcml2LCBwcml2LVx1MDAzZWlvYWRkciwgdHJ1ZSk7XG4rXG4gXHRwaHlsaW5rX3J4X2Nsa19zdG9wX2Jsb2NrKHByaXYtXHUwMDNlcGh5bGluayk7XG4gXHRzdG1tYWNfc2V0X2h3X3ZsYW5fbW9kZShwcml2LCBwcml2LVx1MDAzZWh3KTtcbiBcdHBoeWxpbmtfcnhfY2xrX3N0b3BfdW5ibG9jayhwcml2LVx1MDAzZXBoeWxpbmspO1xuQEAgLTQyNDAsOSArNDI4Niw2IEBAIHN0YXRpYyB2b2lkIF9fc3RtbWFjX3JlbGVhc2Uoc3RydWN0IG5ldF9kZXZpY2UgKmRldilcbiBcdHN0cnVjdCBzdG1tYWNfcHJpdiAqcHJpdiA9IG5ldGRldl9wcml2KGRldik7XG4gXHR1OCBjaGFuO1xuIFxuLVx0LyogU3RvcCBhbmQgZGlzY29ubmVjdCB0aGUgUEhZICovXG4tXHRwaHlsaW5rX3N0b3AocHJpdi1cdTAwM2VwaHlsaW5rKTtcbi1cbiBcdHN0bW1hY19kaXNhYmxlX2FsbF9xdWV1ZXMocHJpdik7XG4gXG4gXHRmb3IgKGNoYW4gPSAwOyBjaGFuIFx1MDAzYyBwcml2LVx1MDAzZXBsYXQtXHUwMDNldHhfcXVldWVzX3RvX3VzZTsgY2hhbisrKVxuQEAgLTQyNTMsOCArNDI5NiwxMSBAQCBzdGF0aWMgdm9pZCBfX3N0bW1hY19yZWxlYXNlKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXG4gXHQvKiBGcmVlIHRoZSBJUlEgbGluZXMgKi9cbiBcdHN0bW1hY19mcmVlX2lycShkZXYsIFJFUV9JUlFfRVJSX0FMTCwgMCk7XG4gXG4tXHQvKiBTdG9wIFRYL1JYIERNQSBhbmQgY2xlYXIgdGhlIGRlc2NyaXB0b3JzICovXG4tXHRzdG1tYWNfc3RvcF9hbGxfZG1hKHByaXYpO1xuK1x0LyogSGFzIHRvIHJ1biBiZWZvcmUgbWFjX2xpbmtfZG93bigpIGRpc2FibGVzIHRoZSBNQUMuICovXG4rXHRzdG1tYWNfZGF0YXBhdGhfdGVhcmRvd24ocHJpdik7XG4rXG4rXHQvKiBTdG9wIGFuZCBkaXNjb25uZWN0IHRoZSBQSFkgKi9cbitcdHBoeWxpbmtfc3RvcChwcml2LVx1MDAzZXBoeWxpbmspO1xuIFxuIFx0LyogUmVsZWFzZSBhbmQgZnJlZSB0aGUgUngvVHggcmVzb3VyY2VzICovXG4gXHRmcmVlX2RtYV9kZXNjX3Jlc291cmNlcyhwcml2LCBcdTAwMjZwcml2LVx1MDAzZWRtYV9jb25mKTtcbkBAIC03MTA0LDE1ICs3MTUwLDEyIEBAIHZvaWQgc3RtbWFjX3hkcF9yZWxlYXNlKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXG4gXHQvKiBGcmVlIHRoZSBJUlEgbGluZXMgKi9cbiBcdHN0bW1hY19mcmVlX2lycShkZXYsIFJFUV9JUlFfRVJSX0FMTCwgMCk7XG4gXG4tXHQvKiBTdG9wIFRYL1JYIERNQSBjaGFubmVscyAqL1xuLVx0c3RtbWFjX3N0b3BfYWxsX2RtYShwcml2KTtcbitcdC8qIFN0b3AgdGhlIE1BQyBhbmQgdGhlIFRYL1JYIERNQSBjaGFubmVscyAqL1xuK1x0c3RtbWFjX2RhdGFwYXRoX3RlYXJkb3duKHByaXYpO1xuIFxuIFx0LyogUmVsZWFzZSBhbmQgZnJlZSB0aGUgUngvVHggcmVzb3VyY2VzICovXG4gXHRmcmVlX2RtYV9kZXNjX3Jlc291cmNlcyhwcml2LCBcdTAwMjZwcml2LVx1MDAzZWRtYV9jb25mKTtcbiBcbi1cdC8qIERpc2FibGUgdGhlIE1BQyBSeC9UeCAqL1xuLVx0c3RtbWFjX21hY19zZXQocHJpdiwgcHJpdi1cdTAwM2Vpb2FkZHIsIGZhbHNlKTtcbi1cbiBcdC8qIHNldCB0cmFuc19zdGFydCBzbyB3ZSBkb24ndCBnZXQgc3B1cmlvdXNcbiBcdCAqIHdhdGNoZG9ncyBkdXJpbmcgcmVzZXRcbiBcdCAqL1xuQEAgLTcxODQsMTIgKzcyMjcsMTIgQEAgaW50IHN0bW1hY194ZHBfb3BlbihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxuIFx0XHRocnRpbWVyX3NldHVwKFx1MDAyNnR4X3EtXHUwMDNldHh0aW1lciwgc3RtbWFjX3R4X3RpbWVyLCBDTE9DS19NT05PVE9OSUMsIEhSVElNRVJfTU9ERV9SRUwpO1xuIFx0fVxuIFxuLVx0LyogRW5hYmxlIHRoZSBNQUMgUngvVHggKi9cbi1cdHN0bW1hY19tYWNfc2V0KHByaXYsIHByaXYtXHUwMDNlaW9hZGRyLCB0cnVlKTtcbi1cbiBcdC8qIFN0YXJ0IFJ4IFx1MDAyNiBUeCBETUEgQ2hhbm5lbHMgKi9cbiBcdHN0bW1hY19zdGFydF9hbGxfZG1hKHByaXYpO1xuIFxuK1x0LyogRW5hYmxlIHRoZSBNQUMgUngvVHggKi9cbitcdHN0bW1hY19tYWNfc2V0KHByaXYsIHByaXYtXHUwMDNlaW9hZGRyLCB0cnVlKTtcbitcbiBcdHJldCA9IHN0bW1hY19yZXF1ZXN0X2lycShkZXYpO1xuIFx0aWYgKHJldClcbiBcdFx0Z290byBpcnFfZXJyb3I7XG5AQCAtODE5MCwxNyArODIzMywxNSBAQCBpbnQgc3RtbWFjX3N1c3BlbmQoc3RydWN0IGRldmljZSAqZGV2KVxuIFx0XHR0aW1lcl9kZWxldGVfc3luYyhcdTAwMjZwcml2LVx1MDAzZWVlZV9jdHJsX3RpbWVyKTtcbiBcdH1cbiBcbi1cdC8qIFN0b3AgVFgvUlggRE1BICovXG4tXHRzdG1tYWNfc3RvcF9hbGxfZG1hKHByaXYpO1xuLVxuLVx0c3RtbWFjX2xlZ2FjeV9zZXJkZXNfcG93ZXJfZG93bihwcml2KTtcbi1cbiBcdC8qIEVuYWJsZSBQb3dlciBkb3duIG1vZGUgYnkgcHJvZ3JhbW1pbmcgdGhlIFBNVCByZWdzICovXG4gXHRpZiAocHJpdi1cdTAwM2V3b2xvcHRzKSB7XG4rXHRcdHN0bW1hY19zdG9wX2FsbF9kbWEocHJpdik7XG4rXHRcdHN0bW1hY19sZWdhY3lfc2VyZGVzX3Bvd2VyX2Rvd24ocHJpdik7XG4gXHRcdHN0bW1hY19wbXQocHJpdiwgcHJpdi1cdTAwM2VodywgcHJpdi1cdTAwM2V3b2xvcHRzKTtcbiBcdFx0cHJpdi1cdTAwM2VpcnFfd2FrZSA9IDE7XG4gXHR9IGVsc2Uge1xuLVx0XHRzdG1tYWNfbWFjX3NldChwcml2LCBwcml2LVx1MDAzZWlvYWRkciwgZmFsc2UpO1xuK1x0XHRzdG1tYWNfZGF0YXBhdGhfdGVhcmRvd24ocHJpdik7XG4rXHRcdHN0bW1hY19sZWdhY3lfc2VyZGVzX3Bvd2VyX2Rvd24ocHJpdik7XG4gXHRcdHBpbmN0cmxfcG1fc2VsZWN0X3NsZWVwX3N0YXRlKHByaXYtXHUwMDNlZGV2aWNlKTtcbiBcdH1cbiBcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE0VDA2OjM4OjQ5LjU1NzQ0MDU3WiIsIlNlcSI6NjEsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjg0NDE3NDk3MzMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQXNzZXNzbWVudCBvZiB0aGUgU1RNTUFDIERyaXZlciBQYXRjaCoqXG5cbkFscmlnaHQsIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gVGhpcyBwYXRjaCBpcyBmb2N1c2VkIHNvbGVseSBvbiB0aGUgaW50ZXJuYWwgd29ya2luZ3Mgb2YgdGhlIGBzdG1tYWNgIGRyaXZlciwgc3BlY2lmaWNhbGx5IHRoZSBgZHd4Z21hYzJgIHZhcmlhbnQuIEl0J3MgYWJvdXQgZW5zdXJpbmcgYSBwcm9wZXIsIG9yZGVyZWQgc2h1dGRvd24gc2VxdWVuY2UgZm9yIHRoZSBkYXRhcGF0aC4gSSBzZWUgdGhhdCB0aGV5J3ZlIGFkZGVkIHRoZXNlIG5ldyBwb2xsaW5nIGZ1bmN0aW9uczogYGR3eGdtYWMyX3R4X2RtYV9zdG9wcGVkYCwgYGR3eGdtYWMyX3R4X210bF9kcmFpbmAsIGBkd3hnbWFjMl9yeF9tdGxfZHJhaW5gLCBhbmQgYGR3eGdtYWMyX3J4X2RtYV9zdG9wcGVkYC4gVGhlc2Ugd2lsbCBwb2xsIGhhcmR3YXJlIHJlZ2lzdGVycyB0byBjaGVjayB0aGUgc3RhdGUgb2YgdGhlIHN5c3RlbS5cblxuVGhlIGNvcmUgb2YgdGhlIGNoYW5nZSBsaWVzIGluIHRoZSBgc3RtbWFjX2RhdGFwYXRoX3RlYXJkb3duYCBmdW5jdGlvbiwgd2hpY2ggb3JjaGVzdHJhdGVzIHRoZSBjb250cm9sbGVkIHNodXRkb3duOiBzdG9wcGluZyBUWCBETUEsIHdhaXRpbmcgZm9yIGNvbXBsZXRpb24sIGRyYWluaW5nIHRoZSBNVEwgVFgsIGRpc2FibGluZyBNQUMgVFgvUlgsIGRyYWluaW5nIHRoZSBNVEwgUlgsIHN0b3BwaW5nIFJYIERNQSwgYW5kIHdhaXRpbmcgYWdhaW4uIEl0IGlzIGFsc28gbW9kaWZ5aW5nIHRoZSBvcmRlciBvZiBlbmFibGluZyBhbmQgZGlzYWJsaW5nIE1BQyBhbmQgRE1BIGluIHNldmVyYWwga2V5IGZ1bmN0aW9ucy4gTm90aGluZyByZXZvbHV0aW9uYXJ5IGhlcmUsIGl0IHNlZW1zLlxuXG5HaXZlbiBteSB1bmRlcnN0YW5kaW5nIG9mIG5ldHdvcmtpbmcgc3RhY2tzLCBpdCdzIHByZXR0eSBjbGVhciB0aGlzIGlzIHB1cmVseSBhYm91dCBoYXJkd2FyZSBjb250cm9sIGZsb3csIHdoaWNoIGlzIHdoZXJlIHRoaW5ncyBnZXQgaW50ZXJlc3RpbmcuIE5vIG5ldyBkYXRhIHN0cnVjdHVyZXMgYXJlIGJlaW5nIGludHJvZHVjZWQgdGhhdCBhcmUgc2VudCB0byB1c2VyIHNwYWNlLCBubyBidWZmZXIgYWxsb2NhdGlvbnMsIG5vIG1lbW9yeS1yZWxhdGVkIGlzc3Vlcy4gVGhlIGZ1bmN0aW9ucyBzaW1wbHkgY2FsbCBgcmVhZGxfcG9sbF90aW1lb3V0YCwgd2l0aCBgdmFsdWVgIGluaXRpYWxpemVkIHByb3Blcmx5IHdpdGhpbi4gRnJvbSBteSBleHBlcnRpc2UsIHRoYXQgbWVhbnMgdGhlcmUgYXJlIG5vIGNvbmNlcm5zIGFib3V0IGluZm8tbGVha3MuXG5cbkkndmUgY2FyZWZ1bGx5IGNvbnNpZGVyZWQgdGhlIHBvdGVudGlhbCBmb3IgdW5pbml0aWFsaXplZCBtZW1vcnkgaXNzdWVzLCBhbmQgSSBhbSBjb25maWRlbnQgdGhhdCB0aGVyZSBhcmUgbm9uZSBiYXNlZCBvbiB0aGUgcGF0Y2ggZGVzY3JpcHRpb24gYW5kIG15IGFuYWx5c2lzLiBHaXZlbiB0aGlzLCBJIGNhbiBjb25maWRlbnRseSBzZXQgYE5lZWRzS01TQU49ZmFsc2VgLiBUaGlzIG9uZSdzIGNsZWFuLlxuXG5cbiIsIklucHV0VG9rZW5zIjo3MzgxLCJPdXRwdXRUb2tlbnMiOjE2NSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM2NywiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE0VDA2OjM4OjU3Ljk5OTE5MjYyMloiLCJTZXEiOjYyLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEyMDUxLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGhhcmR3YXJlIGluaXRpYWxpemF0aW9uIGFuZCB0ZWFyZG93biBzZXF1ZW5jZXMgaW4gdGhlIHN0bW1hYyBkcml2ZXIsIGludHJvZHVjaW5nIGFuIG9yZGVyZWQgZGF0YXBhdGggdGVhcmRvd24gdG8gcHJvcGVybHkgc3RvcCBETUEgYW5kIE1BQyBvcGVyYXRpb25zLiBJdCBhZGRzIGZ1bmN0aW9ucyB0byBwb2xsIGhhcmR3YXJlIHJlZ2lzdGVycyBmb3Igc3BlY2lmaWMgc3RhdGVzIChlLmcuLCBETUEgc3RvcHBlZCwgTVRMIHF1ZXVlcyBkcmFpbmVkKSB1c2luZyBgcmVhZGxfcG9sbF90aW1lb3V0YC4gVGhlc2UgY2hhbmdlcyBhcmUgcHVyZWx5IHJlbGF0ZWQgdG8gaGFyZHdhcmUgY29udHJvbCBmbG93IGFuZCBkbyBub3QgaW50cm9kdWNlIGFueSBuZXcgZGF0YSBzdHJ1Y3R1cmVzLCBidWZmZXIgYWxsb2NhdGlvbnMsIG9yIGRhdGEgY29waWVzIHRvIHVzZXIgc3BhY2UuIFRoZXJlIGlzIG5vIHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgYmVpbmcgZXhwb3NlZCBvciB1c2VkIGluIGNvbnRyb2wgZmxvdy4gU3RhbmRhcmQgS0FTQU4gYW5kIG90aGVyIGJ1ZyBkZXRlY3RvcnMgYXJlIHN1ZmZpY2llbnQgdG8gY2F0Y2ggYW55IHBvdGVudGlhbCBtZW1vcnkgY29ycnVwdGlvbiBvciB1c2UtYWZ0ZXItZnJlZSBidWdzIHRoYXQgbWlnaHQgYXJpc2UgZnJvbSBkcml2ZXIgdGVhcmRvd24gaXNzdWVzLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBoYXJkd2FyZSBpbml0aWFsaXphdGlvbiBhbmQgdGVhcmRvd24gc2VxdWVuY2VzIGluIHRoZSBzdG1tYWMgZHJpdmVyLCBpbnRyb2R1Y2luZyBhbiBvcmRlcmVkIGRhdGFwYXRoIHRlYXJkb3duIHRvIHByb3Blcmx5IHN0b3AgRE1BIGFuZCBNQUMgb3BlcmF0aW9ucy4gSXQgYWRkcyBmdW5jdGlvbnMgdG8gcG9sbCBoYXJkd2FyZSByZWdpc3RlcnMgZm9yIHNwZWNpZmljIHN0YXRlcyAoZS5nLiwgRE1BIHN0b3BwZWQsIE1UTCBxdWV1ZXMgZHJhaW5lZCkgdXNpbmcgYHJlYWRsX3BvbGxfdGltZW91dGAuIFRoZXNlIGNoYW5nZXMgYXJlIHB1cmVseSByZWxhdGVkIHRvIGhhcmR3YXJlIGNvbnRyb2wgZmxvdyBhbmQgZG8gbm90IGludHJvZHVjZSBhbnkgbmV3IGRhdGEgc3RydWN0dXJlcywgYnVmZmVyIGFsbG9jYXRpb25zLCBvciBkYXRhIGNvcGllcyB0byB1c2VyIHNwYWNlLiBUaGVyZSBpcyBubyByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGJlaW5nIGV4cG9zZWQgb3IgdXNlZCBpbiBjb250cm9sIGZsb3cuIFN0YW5kYXJkIEtBU0FOIGFuZCBvdGhlciBidWcgZGV0ZWN0b3JzIGFyZSBzdWZmaWNpZW50IHRvIGNhdGNoIGFueSBwb3RlbnRpYWwgbWVtb3J5IGNvcnJ1cHRpb24gb3IgdXNlLWFmdGVyLWZyZWUgYnVncyB0aGF0IG1pZ2h0IGFyaXNlIGZyb20gZHJpdmVyIHRlYXJkb3duIGlzc3Vlcy5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+IHsKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOyAKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iKSB7CgkJCQkJc3RhdHMubGxtLmNvdW50Kys7CgkJCQkJc3RhdHMubGxtLnRva2VucyArPSAocy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2Vucyk7CgkJCQkJc3RhdHMubGxtLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0gZWxzZSBpZiAocy5UeXBlID09PSAidG9vbCIpIHsKCQkJCQlzdGF0cy50b29sLmNvdW50Kys7CgkJCQkJc3RhdHMudG9vbC5kdXJhdGlvbiArPSBkdXI7CgkJCQl9CgkJCX0pOwoKCQkJY29uc3QgYXZnTGxtRHVyID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0uZHVyYXRpb24gLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdMbG1Ub2tlbiA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLnRva2VucyAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z1Rvb2xEdXIgPSBzdGF0cy50b29sLmNvdW50ID4gMCA/IChzdGF0cy50b29sLmR1cmF0aW9uIC8gc3RhdHMudG9vbC5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgoJCQljb25zdCBsbG1TdW1hcnlDZWxscyA9IFtzdGF0cy5sbG0uY291bnQsIHN0YXRzLmxsbS50b2tlbnMsIGF2Z0xsbVRva2VuLCBzdGF0cy5sbG0uZHVyYXRpb24sIGF2Z0xsbUR1cl07CgkJCWNvbnN0IHRvb2xTdW1tYXJ5Q2VsbHMgPSBbc3RhdHMudG9vbC5jb3VudCwgc3RhdHMudG9vbC5kdXJhdGlvbiwgYXZnVG9vbER1cl07CgoJCQljb25zdCBsbG1TdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsbG1fc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCWxsbVN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCBsbG1UciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCWxsbVN1bWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQlsbG1Uci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQlsbG1TdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZChsbG1Ucik7CgoJCQljb25zdCB0b29sU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJdG9vbFN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCB0b29sVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQl0b29sU3VtbWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQl0b29sVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJdG9vbFN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKHRvb2xUcik7CgkJfQoKCQlmdW5jdGlvbiBkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGZpbHRlcmVkU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IFsibGxtIiwgInRvb2wiXS5pbmNsdWRlcyhkLlR5cGUpKTsKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnRHVyYXRpb24nKTsKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsgCgoJCQlmaWx0ZXJlZFN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQkKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOwoJCQkJbGV0IHRvb2x0aXAgPSBzLk5hbWU7CgkJCQlpZiAocy5UeXBlID09PSAibGxtIiAmJiBzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgkJCQlkYXRhLmFkZFJvdyhbYCR7cy5TZXF9YCwgZHVyLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVGltZSBDb25zdW1wdGlvbiBvZiBMTE0vVG9vbCBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNL1Rvb2wgU3RlcHMnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnU2Vjb25kcycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZHVyYXRpb25fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGxsbVN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBkLlR5cGUgPT09ICJsbG0iKTsKCQkJaWYgKGxsbVN0ZXBzLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnVG9rZW5zJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3N0eWxlJ30pOwkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsJCgoJCQljb25zdCBhZ2VudENvbG9ycyA9IHt9OwoJCQljb25zdCBwYWxldHRlID0gWycjNDI4NUY0JywgJyNEQjQ0MzcnLCAnI0Y0QjQwMCcsICcjMEY5RDU4JywgJyNBQjQ3QkMnLCAnIzAwQUNDMSddOwoJCQlsZXQgY29sb3JJZHggPSAwOwoJCQljb25zdCBhZ2VudExMTUNvdW50cyA9IHt9OwoJCQlsbG1TdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJaWYgKCFhZ2VudENvbG9yc1tzLk5hbWVdKSB7CgkJCQkJYWdlbnRDb2xvcnNbcy5OYW1lXSA9IHBhbGV0dGVbY29sb3JJZHggJSBwYWxldHRlLmxlbmd0aF07CgkJCQkJY29sb3JJZHgrKzsKCQkJCX0KCgkJCQlhZ2VudExMTUNvdW50c1tzLk5hbWVdID0gKGFnZW50TExNQ291bnRzW3MuTmFtZV0gfHwgMCkgKyAxOwoJCQkJY29uc3QgbGFiZWwgPSBgJHtzLk5hbWV9LSR7YWdlbnRMTE1Db3VudHNbcy5OYW1lXX1gOwoJCQkJY29uc3QgdG90YWxUb2tlbnMgPSBzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zOwoJCQkJY29uc3Qgc3R5bGUgPSBgY29sb3I6ICR7YWdlbnRDb2xvcnNbcy5OYW1lXX1gOwoJCQkJbGV0IHRvb2x0aXAgPSBgVG90YWwgVG9rZW5zOiAke3RvdGFsVG9rZW5zfVxuKEluOiAke3MuSW5wdXRUb2tlbnN9LCBPdXQ6ICR7cy5PdXRwdXRUb2tlbnN9LCBUaG91Z2h0czogJHtzLk91dHB1dFRob3VnaHRzVG9rZW5zfSlgOwoJCQkJaWYgKHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCgkJCQlkYXRhLmFkZFJvdyhbbGFiZWwsIHRvdGFsVG9rZW5zLCBzdHlsZSwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1Rva2VuIENvbnN1bXB0aW9uIGJ5IExMTSBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNIENhbGwgU2VxdWVuY2UnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnQ29uc3VtZWQgVG9rZW5zJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b2tlbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoJCWxldCBhbGxFeHBhbmRlZCA9IGZhbHNlOwoJCWZ1bmN0aW9uIHRvZ2dsZUFsbERldGFpbHMoKSB7CgkJCWFsbEV4cGFuZGVkID0gIWFsbEV4cGFuZGVkOwoJCQlkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdkZXRhaWxzJykuZm9yRWFjaChkID0+IHsKCQkJCWlmIChhbGxFeHBhbmRlZCkgZC5zZXRBdHRyaWJ1dGUoJ29wZW4nLCAnJyk7CgkJCQllbHNlIGQucmVtb3ZlQXR0cmlidXRlKCdvcGVuJyk7CgkJCX0pOwoJCX0KCTwvc2NyaXB0PgoKCjwvYm9keT4KPC9odG1sPgo=" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowsr2hk[1] Phase: Succeeded StartedAt: 2026-08-14 06:39:08 +0000 UTC FinishedAt: 2026-08-14 06:39:08 +0000 UTC Input: nil Output: nil --------- Name: series-workflowsr2hk[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-08-14 06:39:08 +0000 UTC FinishedAt: 2026-08-14 06:39:08 +0000 UTC Input: nil Output: nil --------- Name: series-workflowsr2hk[2] Phase: Succeeded StartedAt: 2026-08-14 06:39:08 +0000 UTC FinishedAt: 2026-08-14 07:23:47 +0000 UTC Input: nil Output: nil --------- Name: series-workflowsr2hk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3da8c3c8b8fa99505624b65ef590482f48e766b6","config_name":"upstream-apparmor-kasan.config","enable_configs":["STMMAC_ETH","STMMAC_PCI"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["stmmac_dvr_remove","stmmac_suspend","stmmac_resume","stmmac_xdp_open","stmmac_xdp_release","stmmac_reinit_queues","stmmac_reinit_ringparam"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"3da8c3c8b8fa99505624b65ef590482f48e766b6","config_name":"upstream-apparmor-kasan.config","enable_configs":["STMMAC_ETH","STMMAC_PCI"],"series_id":"aaa9e265-f308-4232-9b7a-17d8d3e887b7","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-08-14 06:39:08 +0000 UTC FinishedAt: 2026-08-14 07:23:47 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"3da8c3c8b8fa99505624b65ef590482f48e766b6","config_name":"upstream-apparmor-kasan.config","enable_configs":["STMMAC_ETH","STMMAC_PCI"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["stmmac_dvr_remove","stmmac_suspend","stmmac_resume","stmmac_xdp_open","stmmac_xdp_release","stmmac_reinit_queues","stmmac_reinit_ringparam"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"3da8c3c8b8fa99505624b65ef590482f48e766b6","config_name":"upstream-apparmor-kasan.config","enable_configs":["STMMAC_ETH","STMMAC_PCI"],"series_id":"aaa9e265-f308-4232-9b7a-17d8d3e887b7","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflowsr2hk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3da8c3c8b8fa99505624b65ef590482f48e766b6","config_name":"upstream-apparmor-kasan.config","enable_configs":["STMMAC_ETH","STMMAC_PCI"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["stmmac_dvr_remove","stmmac_suspend","stmmac_resume","stmmac_xdp_open","stmmac_xdp_release","stmmac_reinit_queues","stmmac_reinit_ringparam"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"3da8c3c8b8fa99505624b65ef590482f48e766b6","config_name":"upstream-apparmor-kasan.config","enable_configs":["STMMAC_ETH","STMMAC_PCI"],"series_id":"aaa9e265-f308-4232-9b7a-17d8d3e887b7","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-08-14 06:39:08 +0000 UTC FinishedAt: 2026-08-14 06:39:19 +0000 UTC Input: nil Output: nil --------- Name: series-workflowsr2hk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3da8c3c8b8fa99505624b65ef590482f48e766b6","config_name":"upstream-apparmor-kasan.config","enable_configs":["STMMAC_ETH","STMMAC_PCI"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["stmmac_dvr_remove","stmmac_suspend","stmmac_resume","stmmac_xdp_open","stmmac_xdp_release","stmmac_reinit_queues","stmmac_reinit_ringparam"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"3da8c3c8b8fa99505624b65ef590482f48e766b6","config_name":"upstream-apparmor-kasan.config","enable_configs":["STMMAC_ETH","STMMAC_PCI"],"series_id":"aaa9e265-f308-4232-9b7a-17d8d3e887b7","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-08-14 06:39:08 +0000 UTC FinishedAt: 2026-08-14 06:39:14 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"3da8c3c8b8fa99505624b65ef590482f48e766b6","config_name":"upstream-apparmor-kasan.config","enable_configs":["STMMAC_ETH","STMMAC_PCI"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowsr2hk/series-workflowsr2hk-convert-artifact-4231171016/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowsr2hk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3da8c3c8b8fa99505624b65ef590482f48e766b6","config_name":"upstream-apparmor-kasan.config","enable_configs":["STMMAC_ETH","STMMAC_PCI"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["stmmac_dvr_remove","stmmac_suspend","stmmac_resume","stmmac_xdp_open","stmmac_xdp_release","stmmac_reinit_queues","stmmac_reinit_ringparam"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"3da8c3c8b8fa99505624b65ef590482f48e766b6","config_name":"upstream-apparmor-kasan.config","enable_configs":["STMMAC_ETH","STMMAC_PCI"],"series_id":"aaa9e265-f308-4232-9b7a-17d8d3e887b7","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-08-14 06:39:19 +0000 UTC FinishedAt: 2026-08-14 06:55:25 +0000 UTC Input: nil Output: nil --------- Name: series-workflowsr2hk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3da8c3c8b8fa99505624b65ef590482f48e766b6","config_name":"upstream-apparmor-kasan.config","enable_configs":["STMMAC_ETH","STMMAC_PCI"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["stmmac_dvr_remove","stmmac_suspend","stmmac_resume","stmmac_xdp_open","stmmac_xdp_release","stmmac_reinit_queues","stmmac_reinit_ringparam"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"3da8c3c8b8fa99505624b65ef590482f48e766b6","config_name":"upstream-apparmor-kasan.config","enable_configs":["STMMAC_ETH","STMMAC_PCI"],"series_id":"aaa9e265-f308-4232-9b7a-17d8d3e887b7","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-08-14 06:39:19 +0000 UTC FinishedAt: 2026-08-14 06:55:25 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:findings,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Build Base,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:smoke-build,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:session-id,Default:nil,Value:*56de4e8a-5bda-4cd1-97c6-8cd473c9e55c,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:request,Path:/tmp/request.json,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowsr2hk/series-workflowsr2hk-convert-artifact-4231171016/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "build_id": "6a4d780c-9dcb-4f70-9c38-296ad7ed540f", "success": true },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:*,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:kernel,Path:/output,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowsr2hk/series-workflowsr2hk-build-action-1360033854/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowsr2hk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3da8c3c8b8fa99505624b65ef590482f48e766b6","config_name":"upstream-apparmor-kasan.config","enable_configs":["STMMAC_ETH","STMMAC_PCI"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["stmmac_dvr_remove","stmmac_suspend","stmmac_resume","stmmac_xdp_open","stmmac_xdp_release","stmmac_reinit_queues","stmmac_reinit_ringparam"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"3da8c3c8b8fa99505624b65ef590482f48e766b6","config_name":"upstream-apparmor-kasan.config","enable_configs":["STMMAC_ETH","STMMAC_PCI"],"series_id":"aaa9e265-f308-4232-9b7a-17d8d3e887b7","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-08-14 06:39:19 +0000 UTC FinishedAt: 2026-08-14 06:55:15 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:findings,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Build Base,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:smoke-build,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:session-id,Default:nil,Value:*56de4e8a-5bda-4cd1-97c6-8cd473c9e55c,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:request,Path:/tmp/request.json,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowsr2hk/series-workflowsr2hk-convert-artifact-4231171016/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "build_id": "6a4d780c-9dcb-4f70-9c38-296ad7ed540f", "success": true },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:*,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:kernel,Path:/output,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowsr2hk/series-workflowsr2hk-build-action-1360033854/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowsr2hk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3da8c3c8b8fa99505624b65ef590482f48e766b6","config_name":"upstream-apparmor-kasan.config","enable_configs":["STMMAC_ETH","STMMAC_PCI"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["stmmac_dvr_remove","stmmac_suspend","stmmac_resume","stmmac_xdp_open","stmmac_xdp_release","stmmac_reinit_queues","stmmac_reinit_ringparam"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"3da8c3c8b8fa99505624b65ef590482f48e766b6","config_name":"upstream-apparmor-kasan.config","enable_configs":["STMMAC_ETH","STMMAC_PCI"],"series_id":"aaa9e265-f308-4232-9b7a-17d8d3e887b7","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-08-14 06:55:25 +0000 UTC FinishedAt: 2026-08-14 06:55:25 +0000 UTC Input: nil Output: nil --------- Name: series-workflowsr2hk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3da8c3c8b8fa99505624b65ef590482f48e766b6","config_name":"upstream-apparmor-kasan.config","enable_configs":["STMMAC_ETH","STMMAC_PCI"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["stmmac_dvr_remove","stmmac_suspend","stmmac_resume","stmmac_xdp_open","stmmac_xdp_release","stmmac_reinit_queues","stmmac_reinit_ringparam"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"3da8c3c8b8fa99505624b65ef590482f48e766b6","config_name":"upstream-apparmor-kasan.config","enable_configs":["STMMAC_ETH","STMMAC_PCI"],"series_id":"aaa9e265-f308-4232-9b7a-17d8d3e887b7","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-08-14 06:55:25 +0000 UTC FinishedAt: 2026-08-14 06:55:25 +0000 UTC Input: nil Output: nil --------- Name: series-workflowsr2hk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3da8c3c8b8fa99505624b65ef590482f48e766b6","config_name":"upstream-apparmor-kasan.config","enable_configs":["STMMAC_ETH","STMMAC_PCI"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["stmmac_dvr_remove","stmmac_suspend","stmmac_resume","stmmac_xdp_open","stmmac_xdp_release","stmmac_reinit_queues","stmmac_reinit_ringparam"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"3da8c3c8b8fa99505624b65ef590482f48e766b6","config_name":"upstream-apparmor-kasan.config","enable_configs":["STMMAC_ETH","STMMAC_PCI"],"series_id":"aaa9e265-f308-4232-9b7a-17d8d3e887b7","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-08-14 06:55:25 +0000 UTC FinishedAt: 2026-08-14 06:55:35 +0000 UTC Input: nil Output: nil --------- Name: series-workflowsr2hk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3da8c3c8b8fa99505624b65ef590482f48e766b6","config_name":"upstream-apparmor-kasan.config","enable_configs":["STMMAC_ETH","STMMAC_PCI"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["stmmac_dvr_remove","stmmac_suspend","stmmac_resume","stmmac_xdp_open","stmmac_xdp_release","stmmac_reinit_queues","stmmac_reinit_ringparam"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"3da8c3c8b8fa99505624b65ef590482f48e766b6","config_name":"upstream-apparmor-kasan.config","enable_configs":["STMMAC_ETH","STMMAC_PCI"],"series_id":"aaa9e265-f308-4232-9b7a-17d8d3e887b7","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-08-14 06:55:25 +0000 UTC FinishedAt: 2026-08-14 06:55:29 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"3da8c3c8b8fa99505624b65ef590482f48e766b6","config_name":"upstream-apparmor-kasan.config","enable_configs":["STMMAC_ETH","STMMAC_PCI"],"series_id":"aaa9e265-f308-4232-9b7a-17d8d3e887b7","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowsr2hk/series-workflowsr2hk-convert-artifact-751114415/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowsr2hk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3da8c3c8b8fa99505624b65ef590482f48e766b6","config_name":"upstream-apparmor-kasan.config","enable_configs":["STMMAC_ETH","STMMAC_PCI"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["stmmac_dvr_remove","stmmac_suspend","stmmac_resume","stmmac_xdp_open","stmmac_xdp_release","stmmac_reinit_queues","stmmac_reinit_ringparam"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"3da8c3c8b8fa99505624b65ef590482f48e766b6","config_name":"upstream-apparmor-kasan.config","enable_configs":["STMMAC_ETH","STMMAC_PCI"],"series_id":"aaa9e265-f308-4232-9b7a-17d8d3e887b7","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-08-14 06:55:35 +0000 UTC FinishedAt: 2026-08-14 06:57:37 +0000 UTC Input: nil Output: nil --------- Name: series-workflowsr2hk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3da8c3c8b8fa99505624b65ef590482f48e766b6","config_name":"upstream-apparmor-kasan.config","enable_configs":["STMMAC_ETH","STMMAC_PCI"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["stmmac_dvr_remove","stmmac_suspend","stmmac_resume","stmmac_xdp_open","stmmac_xdp_release","stmmac_reinit_queues","stmmac_reinit_ringparam"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"3da8c3c8b8fa99505624b65ef590482f48e766b6","config_name":"upstream-apparmor-kasan.config","enable_configs":["STMMAC_ETH","STMMAC_PCI"],"series_id":"aaa9e265-f308-4232-9b7a-17d8d3e887b7","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-08-14 06:55:35 +0000 UTC FinishedAt: 2026-08-14 06:57:27 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*6a4d780c-9dcb-4f70-9c38-296ad7ed540f,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Boot test: Base,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:report-findings,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:kernel,Path:/base,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowsr2hk/series-workflowsr2hk-build-action-1360033854/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "success": true },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowsr2hk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3da8c3c8b8fa99505624b65ef590482f48e766b6","config_name":"upstream-apparmor-kasan.config","enable_configs":["STMMAC_ETH","STMMAC_PCI"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["stmmac_dvr_remove","stmmac_suspend","stmmac_resume","stmmac_xdp_open","stmmac_xdp_release","stmmac_reinit_queues","stmmac_reinit_ringparam"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"3da8c3c8b8fa99505624b65ef590482f48e766b6","config_name":"upstream-apparmor-kasan.config","enable_configs":["STMMAC_ETH","STMMAC_PCI"],"series_id":"aaa9e265-f308-4232-9b7a-17d8d3e887b7","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-08-14 06:57:37 +0000 UTC FinishedAt: 2026-08-14 06:57:37 +0000 UTC Input: nil Output: nil --------- Name: series-workflowsr2hk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3da8c3c8b8fa99505624b65ef590482f48e766b6","config_name":"upstream-apparmor-kasan.config","enable_configs":["STMMAC_ETH","STMMAC_PCI"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["stmmac_dvr_remove","stmmac_suspend","stmmac_resume","stmmac_xdp_open","stmmac_xdp_release","stmmac_reinit_queues","stmmac_reinit_ringparam"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"3da8c3c8b8fa99505624b65ef590482f48e766b6","config_name":"upstream-apparmor-kasan.config","enable_configs":["STMMAC_ETH","STMMAC_PCI"],"series_id":"aaa9e265-f308-4232-9b7a-17d8d3e887b7","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-08-14 06:57:37 +0000 UTC FinishedAt: 2026-08-14 06:57:37 +0000 UTC Input: nil Output: nil --------- Name: series-workflowsr2hk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3da8c3c8b8fa99505624b65ef590482f48e766b6","config_name":"upstream-apparmor-kasan.config","enable_configs":["STMMAC_ETH","STMMAC_PCI"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["stmmac_dvr_remove","stmmac_suspend","stmmac_resume","stmmac_xdp_open","stmmac_xdp_release","stmmac_reinit_queues","stmmac_reinit_ringparam"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"3da8c3c8b8fa99505624b65ef590482f48e766b6","config_name":"upstream-apparmor-kasan.config","enable_configs":["STMMAC_ETH","STMMAC_PCI"],"series_id":"aaa9e265-f308-4232-9b7a-17d8d3e887b7","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-08-14 06:57:37 +0000 UTC FinishedAt: 2026-08-14 07:18:31 +0000 UTC Input: nil Output: nil --------- Name: series-workflowsr2hk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3da8c3c8b8fa99505624b65ef590482f48e766b6","config_name":"upstream-apparmor-kasan.config","enable_configs":["STMMAC_ETH","STMMAC_PCI"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["stmmac_dvr_remove","stmmac_suspend","stmmac_resume","stmmac_xdp_open","stmmac_xdp_release","stmmac_reinit_queues","stmmac_reinit_ringparam"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"3da8c3c8b8fa99505624b65ef590482f48e766b6","config_name":"upstream-apparmor-kasan.config","enable_configs":["STMMAC_ETH","STMMAC_PCI"],"series_id":"aaa9e265-f308-4232-9b7a-17d8d3e887b7","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-08-14 06:57:37 +0000 UTC FinishedAt: 2026-08-14 07:18:31 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:findings,Default:nil,Value:*true,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Build Patched,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:smoke-build,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:session-id,Default:nil,Value:*56de4e8a-5bda-4cd1-97c6-8cd473c9e55c,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:request,Path:/tmp/request.json,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowsr2hk/series-workflowsr2hk-convert-artifact-751114415/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "build_id": "6d4282f8-4e39-42d0-bfb9-a1915f5accc3", "success": true },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:*,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:kernel,Path:/output,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowsr2hk/series-workflowsr2hk-build-action-1188357187/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowsr2hk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3da8c3c8b8fa99505624b65ef590482f48e766b6","config_name":"upstream-apparmor-kasan.config","enable_configs":["STMMAC_ETH","STMMAC_PCI"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["stmmac_dvr_remove","stmmac_suspend","stmmac_resume","stmmac_xdp_open","stmmac_xdp_release","stmmac_reinit_queues","stmmac_reinit_ringparam"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"3da8c3c8b8fa99505624b65ef590482f48e766b6","config_name":"upstream-apparmor-kasan.config","enable_configs":["STMMAC_ETH","STMMAC_PCI"],"series_id":"aaa9e265-f308-4232-9b7a-17d8d3e887b7","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-08-14 06:57:37 +0000 UTC FinishedAt: 2026-08-14 07:18:21 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:findings,Default:nil,Value:*true,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Build Patched,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:smoke-build,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:session-id,Default:nil,Value:*56de4e8a-5bda-4cd1-97c6-8cd473c9e55c,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:request,Path:/tmp/request.json,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowsr2hk/series-workflowsr2hk-convert-artifact-751114415/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "build_id": "6d4282f8-4e39-42d0-bfb9-a1915f5accc3", "success": true },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:*,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:kernel,Path:/output,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowsr2hk/series-workflowsr2hk-build-action-1188357187/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowsr2hk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3da8c3c8b8fa99505624b65ef590482f48e766b6","config_name":"upstream-apparmor-kasan.config","enable_configs":["STMMAC_ETH","STMMAC_PCI"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["stmmac_dvr_remove","stmmac_suspend","stmmac_resume","stmmac_xdp_open","stmmac_xdp_release","stmmac_reinit_queues","stmmac_reinit_ringparam"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"3da8c3c8b8fa99505624b65ef590482f48e766b6","config_name":"upstream-apparmor-kasan.config","enable_configs":["STMMAC_ETH","STMMAC_PCI"],"series_id":"aaa9e265-f308-4232-9b7a-17d8d3e887b7","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-08-14 07:18:31 +0000 UTC FinishedAt: 2026-08-14 07:18:31 +0000 UTC Input: nil Output: nil --------- Name: series-workflowsr2hk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3da8c3c8b8fa99505624b65ef590482f48e766b6","config_name":"upstream-apparmor-kasan.config","enable_configs":["STMMAC_ETH","STMMAC_PCI"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["stmmac_dvr_remove","stmmac_suspend","stmmac_resume","stmmac_xdp_open","stmmac_xdp_release","stmmac_reinit_queues","stmmac_reinit_ringparam"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"3da8c3c8b8fa99505624b65ef590482f48e766b6","config_name":"upstream-apparmor-kasan.config","enable_configs":["STMMAC_ETH","STMMAC_PCI"],"series_id":"aaa9e265-f308-4232-9b7a-17d8d3e887b7","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-08-14 07:18:31 +0000 UTC FinishedAt: 2026-08-14 07:18:31 +0000 UTC Input: nil Output: nil --------- Name: series-workflowsr2hk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3da8c3c8b8fa99505624b65ef590482f48e766b6","config_name":"upstream-apparmor-kasan.config","enable_configs":["STMMAC_ETH","STMMAC_PCI"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["stmmac_dvr_remove","stmmac_suspend","stmmac_resume","stmmac_xdp_open","stmmac_xdp_release","stmmac_reinit_queues","stmmac_reinit_ringparam"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"3da8c3c8b8fa99505624b65ef590482f48e766b6","config_name":"upstream-apparmor-kasan.config","enable_configs":["STMMAC_ETH","STMMAC_PCI"],"series_id":"aaa9e265-f308-4232-9b7a-17d8d3e887b7","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-08-14 07:18:31 +0000 UTC FinishedAt: 2026-08-14 07:20:56 +0000 UTC Input: nil Output: nil --------- Name: series-workflowsr2hk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3da8c3c8b8fa99505624b65ef590482f48e766b6","config_name":"upstream-apparmor-kasan.config","enable_configs":["STMMAC_ETH","STMMAC_PCI"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["stmmac_dvr_remove","stmmac_suspend","stmmac_resume","stmmac_xdp_open","stmmac_xdp_release","stmmac_reinit_queues","stmmac_reinit_ringparam"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"3da8c3c8b8fa99505624b65ef590482f48e766b6","config_name":"upstream-apparmor-kasan.config","enable_configs":["STMMAC_ETH","STMMAC_PCI"],"series_id":"aaa9e265-f308-4232-9b7a-17d8d3e887b7","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-08-14 07:18:31 +0000 UTC FinishedAt: 2026-08-14 07:20:46 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*6d4282f8-4e39-42d0-bfb9-a1915f5accc3,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Boot test: Patched,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:report-findings,Default:nil,Value:*true,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:kernel,Path:/base,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowsr2hk/series-workflowsr2hk-build-action-1188357187/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "success": true },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowsr2hk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3da8c3c8b8fa99505624b65ef590482f48e766b6","config_name":"upstream-apparmor-kasan.config","enable_configs":["STMMAC_ETH","STMMAC_PCI"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["stmmac_dvr_remove","stmmac_suspend","stmmac_resume","stmmac_xdp_open","stmmac_xdp_release","stmmac_reinit_queues","stmmac_reinit_ringparam"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"3da8c3c8b8fa99505624b65ef590482f48e766b6","config_name":"upstream-apparmor-kasan.config","enable_configs":["STMMAC_ETH","STMMAC_PCI"],"series_id":"aaa9e265-f308-4232-9b7a-17d8d3e887b7","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-08-14 07:20:56 +0000 UTC FinishedAt: 2026-08-14 07:23:47 +0000 UTC Input: nil Output: nil --------- Name: series-workflowsr2hk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3da8c3c8b8fa99505624b65ef590482f48e766b6","config_name":"upstream-apparmor-kasan.config","enable_configs":["STMMAC_ETH","STMMAC_PCI"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["stmmac_dvr_remove","stmmac_suspend","stmmac_resume","stmmac_xdp_open","stmmac_xdp_release","stmmac_reinit_queues","stmmac_reinit_ringparam"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"3da8c3c8b8fa99505624b65ef590482f48e766b6","config_name":"upstream-apparmor-kasan.config","enable_configs":["STMMAC_ETH","STMMAC_PCI"],"series_id":"aaa9e265-f308-4232-9b7a-17d8d3e887b7","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-08-14 07:20:56 +0000 UTC FinishedAt: 2026-08-14 07:23:47 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:config,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["stmmac_dvr_remove","stmmac_suspend","stmmac_resume","stmmac_xdp_open","stmmac_xdp_release","stmmac_reinit_queues","stmmac_reinit_ringparam"],"skip_cover_check":false},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:track,Default:nil,Value:*KASAN,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:base-build-id,Default:nil,Value:*6a4d780c-9dcb-4f70-9c38-296ad7ed540f,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*6d4282f8-4e39-42d0-bfb9-a1915f5accc3,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:base-kernel,Path:,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowsr2hk/series-workflowsr2hk-build-action-1360033854/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},Artifact{Name:patched-kernel,Path:,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowsr2hk/series-workflowsr2hk-build-action-1188357187/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowsr2hk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3da8c3c8b8fa99505624b65ef590482f48e766b6","config_name":"upstream-apparmor-kasan.config","enable_configs":["STMMAC_ETH","STMMAC_PCI"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["stmmac_dvr_remove","stmmac_suspend","stmmac_resume","stmmac_xdp_open","stmmac_xdp_release","stmmac_reinit_queues","stmmac_reinit_ringparam"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"3da8c3c8b8fa99505624b65ef590482f48e766b6","config_name":"upstream-apparmor-kasan.config","enable_configs":["STMMAC_ETH","STMMAC_PCI"],"series_id":"aaa9e265-f308-4232-9b7a-17d8d3e887b7","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-08-14 07:20:56 +0000 UTC FinishedAt: 2026-08-14 07:21:06 +0000 UTC Input: nil Output: nil --------- Name: series-workflowsr2hk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3da8c3c8b8fa99505624b65ef590482f48e766b6","config_name":"upstream-apparmor-kasan.config","enable_configs":["STMMAC_ETH","STMMAC_PCI"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["stmmac_dvr_remove","stmmac_suspend","stmmac_resume","stmmac_xdp_open","stmmac_xdp_release","stmmac_reinit_queues","stmmac_reinit_ringparam"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"3da8c3c8b8fa99505624b65ef590482f48e766b6","config_name":"upstream-apparmor-kasan.config","enable_configs":["STMMAC_ETH","STMMAC_PCI"],"series_id":"aaa9e265-f308-4232-9b7a-17d8d3e887b7","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-08-14 07:20:56 +0000 UTC FinishedAt: 2026-08-14 07:21:01 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["stmmac_dvr_remove","stmmac_suspend","stmmac_resume","stmmac_xdp_open","stmmac_xdp_release","stmmac_reinit_queues","stmmac_reinit_ringparam"],"skip_cover_check":false},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowsr2hk/series-workflowsr2hk-convert-artifact-1863862120/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowsr2hk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3da8c3c8b8fa99505624b65ef590482f48e766b6","config_name":"upstream-apparmor-kasan.config","enable_configs":["STMMAC_ETH","STMMAC_PCI"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["stmmac_dvr_remove","stmmac_suspend","stmmac_resume","stmmac_xdp_open","stmmac_xdp_release","stmmac_reinit_queues","stmmac_reinit_ringparam"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"3da8c3c8b8fa99505624b65ef590482f48e766b6","config_name":"upstream-apparmor-kasan.config","enable_configs":["STMMAC_ETH","STMMAC_PCI"],"series_id":"aaa9e265-f308-4232-9b7a-17d8d3e887b7","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-08-14 07:20:56 +0000 UTC FinishedAt: 2026-08-14 07:20:56 +0000 UTC Input: nil Output: nil --------- Name: series-workflowsr2hk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3da8c3c8b8fa99505624b65ef590482f48e766b6","config_name":"upstream-apparmor-kasan.config","enable_configs":["STMMAC_ETH","STMMAC_PCI"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["stmmac_dvr_remove","stmmac_suspend","stmmac_resume","stmmac_xdp_open","stmmac_xdp_release","stmmac_reinit_queues","stmmac_reinit_ringparam"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"3da8c3c8b8fa99505624b65ef590482f48e766b6","config_name":"upstream-apparmor-kasan.config","enable_configs":["STMMAC_ETH","STMMAC_PCI"],"series_id":"aaa9e265-f308-4232-9b7a-17d8d3e887b7","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-08-14 07:20:56 +0000 UTC FinishedAt: 2026-08-14 07:20:56 +0000 UTC Input: nil Output: nil --------- Name: series-workflowsr2hk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3da8c3c8b8fa99505624b65ef590482f48e766b6","config_name":"upstream-apparmor-kasan.config","enable_configs":["STMMAC_ETH","STMMAC_PCI"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["stmmac_dvr_remove","stmmac_suspend","stmmac_resume","stmmac_xdp_open","stmmac_xdp_release","stmmac_reinit_queues","stmmac_reinit_ringparam"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"3da8c3c8b8fa99505624b65ef590482f48e766b6","config_name":"upstream-apparmor-kasan.config","enable_configs":["STMMAC_ETH","STMMAC_PCI"],"series_id":"aaa9e265-f308-4232-9b7a-17d8d3e887b7","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-08-14 07:20:56 +0000 UTC FinishedAt: 2026-08-14 07:20:56 +0000 UTC Input: nil Output: nil --------- Name: series-workflowsr2hk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3da8c3c8b8fa99505624b65ef590482f48e766b6","config_name":"upstream-apparmor-kasan.config","enable_configs":["STMMAC_ETH","STMMAC_PCI"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["stmmac_dvr_remove","stmmac_suspend","stmmac_resume","stmmac_xdp_open","stmmac_xdp_release","stmmac_reinit_queues","stmmac_reinit_ringparam"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"3da8c3c8b8fa99505624b65ef590482f48e766b6","config_name":"upstream-apparmor-kasan.config","enable_configs":["STMMAC_ETH","STMMAC_PCI"],"series_id":"aaa9e265-f308-4232-9b7a-17d8d3e887b7","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-08-14 07:21:06 +0000 UTC FinishedAt: 2026-08-14 07:23:47 +0000 UTC Input: nil Output: nil --------- Name: series-workflowsr2hk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3da8c3c8b8fa99505624b65ef590482f48e766b6","config_name":"upstream-apparmor-kasan.config","enable_configs":["STMMAC_ETH","STMMAC_PCI"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["stmmac_dvr_remove","stmmac_suspend","stmmac_resume","stmmac_xdp_open","stmmac_xdp_release","stmmac_reinit_queues","stmmac_reinit_ringparam"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"3da8c3c8b8fa99505624b65ef590482f48e766b6","config_name":"upstream-apparmor-kasan.config","enable_configs":["STMMAC_ETH","STMMAC_PCI"],"series_id":"aaa9e265-f308-4232-9b7a-17d8d3e887b7","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-08-14 07:21:06 +0000 UTC FinishedAt: 2026-08-14 07:23:25 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*6a4d780c-9dcb-4f70-9c38-296ad7ed540f,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*6d4282f8-4e39-42d0-bfb9-a1915f5accc3,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Fuzz,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:base-kernel,Path:/base,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowsr2hk/series-workflowsr2hk-build-action-1360033854/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},Artifact{Name:patched-kernel,Path:/patched,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowsr2hk/series-workflowsr2hk-build-action-1188357187/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},Artifact{Name:config,Path:/tmp/config.json,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowsr2hk/series-workflowsr2hk-convert-artifact-1863862120/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,}