Name: series-workflow5xvxz Phase: Succeeded StartedAt: 2026-08-24 13:19:15 +0000 UTC FinishedAt: 2026-08-24 16:09:29 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5xvxz[0] Phase: Succeeded StartedAt: 2026-08-24 13:19:15 +0000 UTC FinishedAt: 2026-08-24 14:24:34 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5xvxz[0].run-triage Phase: Succeeded StartedAt: 2026-08-24 13:19:15 +0000 UTC FinishedAt: 2026-08-24 14:24:34 +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": "91ec2035134982b98fab0609a9fd8480e8217dc1", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "NET_VENDOR_INTEL", "IXGBEVF", "PCI_MMCONFIG", "PCI_MSI" ], "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": "91ec2035134982b98fab0609a9fd8480e8217dc1", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "NET_VENDOR_INTEL", "IXGBEVF", "PCI_MMCONFIG", "PCI_MSI" ], "series_id": "ae690f0a-1d70-4346-bb1d-cd2c8046a0f5" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "ixgbevf_get_link_ksettings", "ixgbevf_hv_check_mac_link_vf" ], "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+CgkJCTx0ZD4yMDI2LzA4LzI0IDE0OjE5PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+NW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O05FVF9WRU5ET1JfSU5URUwmIzM0OywKICAgICYjMzQ7SVhHQkVWRiYjMzQ7LAogICAgJiMzNDtQQ0lfTU1DT05GSUcmIzM0OywKICAgICYjMzQ7UENJX01TSSYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2l4Z2JldmZfZ2V0X2xpbmtfa3NldHRpbmdzJiMzNDssCiAgICAmIzM0O2l4Z2JldmZfaHZfY2hlY2tfbWFjX2xpbmtfdmYmIzM0OwogIF0sCiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgbmV3IGZ1bmN0aW9uIGBpeGdiZXZmX2h2X3JlYWRfbGlua3NfZTYxMGAgd2hpY2ggcmVhZHMgNCBieXRlcyBmcm9tIHRoZSBQQ0kgY29uZmlndXJhdGlvbiBzcGFjZSBpbnRvIGEgbG9jYWwgc3RhY2sgYXJyYXkgYGRhdGFgLiBUaGUgYXJyYXkgaXMgaW5pdGlhbGl6ZWQgYnl0ZS1ieS1ieXRlIHVzaW5nIGBwY2lfcmVhZF9jb25maWdfYnl0ZWAuIElmIGFueSByZWFkIGZhaWxzLCB0aGUgZnVuY3Rpb24gcmV0dXJucyBhbiBlcnJvciBpbW1lZGlhdGVseS4gSWYgYWxsIHJlYWRzIHN1Y2NlZWQsIHRoZSBhcnJheSBpcyBmdWxseSBpbml0aWFsaXplZCBiZWZvcmUgYmVpbmcgcmVhZCBieSBgZ2V0X3VuYWxpZ25lZF9sZTMyYC4gVGhlcmUgaXMgbm8gcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSBiZWluZyB1c2VkIGluIGNvbnRyb2wgZmxvdywgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIGxlYWtlZC4gU3RhbmRhcmQgS0FTQU4gYW5kIG90aGVyIGJ1ZyBkZXRlY3RvcnMgYXJlIHN1ZmZpY2llbnQgdG8gY2F0Y2ggYW55IHBvdGVudGlhbCBvdXQtb2YtYm91bmRzIG9yIG1lbW9yeSBjb3JydXB0aW9uIGlzc3Vlcy4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGl4Z2JldmYgZHJpdmVyIHRvIHJlYWQgbGluayBzcGVlZCBmcm9tIHRoZSBlbXVsYXRlZCBQQ0kgY29uZmlnIHNwYWNlIGZvciBIeXBlci1WIEU2MTAgVkZzLiBUaGlzIGxvZ2ljIGlzIHJlYWNoYWJsZSB2aWEgdGhlIGV0aHRvb2wgZ2V0X2xpbmtfa3NldHRpbmdzIGNhbGxiYWNrIGFuZCB0aGUgZHJpdmVyJiMzOTtzIGJhY2tncm91bmQgbGluayBjaGVjayB0YXNrLiBTeXprYWxsZXIgY2FuIHJlYWNoIHRoaXMgY29kZSBieSB1c2luZyBpdHMgUENJIGRldmljZSBmdXp6ZXIgdG8gZW11bGF0ZSB0aGUgc3BlY2lmaWMgVkYgZGV2aWNlIElEIGFuZCB0aGVuIGludGVyYWN0aW5nIHdpdGggdGhlIHJlZ2lzdGVyZWQgbmV0ZGV2IHZpYSBldGh0b29sLiBUaGUgbmV3IGxvZ2ljIHJlcXVpcmVzIENPTkZJR19QQ0lfTU1DT05GSUcgdG8gYmUgZW5hYmxlZCB0byBhY3R1YWxseSBwZXJmb3JtIHRoZSBQQ0kgY29uZmlnIHNwYWNlIHJlYWRzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI0IDE0OjE5PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgYzAyMjZmNzJmN2I1NDgzZmUyOTdjMmQzYjZjMTczMWIwNDQxZTI4Y1xuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBNb24gQXVnIDI0IDE0OjE5OjE1IDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2l4Z2JldmYvZXRodG9vbC5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaXhnYmV2Zi9ldGh0b29sLmNcbmluZGV4IDUzN2E2MGQ1Mjc2ZjAuLjI0NjNmY2NmZmQ0ZGEgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9peGdiZXZmL2V0aHRvb2wuY1xuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaXhnYmV2Zi9ldGh0b29sLmNcbkBAIC04Myw2ICYjNDM7ODMsMTggQEAgc3RhdGljIGludCBpeGdiZXZmX2dldF9saW5rX2tzZXR0aW5ncyhzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LFxuIFx0XHRcdFx0ICAgICAgc3RydWN0IGV0aHRvb2xfbGlua19rc2V0dGluZ3MgKmNtZClcbiB7XG4gXHRzdHJ1Y3QgaXhnYmV2Zl9hZGFwdGVyICphZGFwdGVyID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTtcbiYjNDM7XHRzdHJ1Y3QgaXhnYmVfaHcgKmh3ID0gXHUwMDI2YWRhcHRlci1cdTAwM2VodztcbiYjNDM7XG4mIzQzO1x0LyogRTYxMCBIeXBlci1WIFZGczogcmVhZCBjdXJyZW50IGxpbmsgc3BlZWQgZnJvbSBQQ0kgY29uZmlnIHNwYWNlXG4mIzQzO1x0ICogb24gZXZlcnkgbGluayBzcGVlZCBxdWVyeS5cbiYjNDM7XHQgKi9cbiYjNDM7XHRpZiAoaHctXHUwMDNlbWFjLnR5cGUgPT0gaXhnYmVfbWFjX2U2MTBfdmYpIHtcbiYjNDM7XHRcdHNwaW5fbG9ja19iaChcdTAwMjZhZGFwdGVyLVx1MDAzZW1ieF9sb2NrKTtcbiYjNDM7XHRcdGh3LVx1MDAzZW1hYy5nZXRfbGlua19zdGF0dXMgPSB0cnVlO1xuJiM0MztcdFx0aHctXHUwMDNlbWFjLm9wcy5jaGVja19saW5rKGh3LCBcdTAwMjZhZGFwdGVyLVx1MDAzZWxpbmtfc3BlZWQsXG4mIzQzO1x0XHRcdFx0ICAgICAgIFx1MDAyNmFkYXB0ZXItXHUwMDNlbGlua191cCwgZmFsc2UpO1xuJiM0MztcdFx0c3Bpbl91bmxvY2tfYmgoXHUwMDI2YWRhcHRlci1cdTAwM2VtYnhfbG9jayk7XG4mIzQzO1x0fVxuIFxuIFx0ZXRodG9vbF9saW5rX2tzZXR0aW5nc196ZXJvX2xpbmtfbW9kZShjbWQsIHN1cHBvcnRlZCk7XG4gXHRldGh0b29sX2xpbmtfa3NldHRpbmdzX2FkZF9saW5rX21vZGUoY21kLCBzdXBwb3J0ZWQsIDEwMDAwYmFzZVRfRnVsbCk7XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaXhnYmV2Zi92Zi5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaXhnYmV2Zi92Zi5jXG5pbmRleCBmNmRmODZkMTI0YjllLi5hODRiNjI2NDFlOWJjIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaXhnYmV2Zi92Zi5jXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9peGdiZXZmL3ZmLmNcbkBAIC0xLDE0ICYjNDM7MSwxNyBAQFxuIC8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXG4gLyogQ29weXJpZ2h0KGMpIDE5OTkgLSAyMDI0IEludGVsIENvcnBvcmF0aW9uLiAqL1xuIFxuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC91bmFsaWduZWQuaFx1MDAzZVxuJiM0MztcbiAjaW5jbHVkZSBcJiMzNDt2Zi5oXCYjMzQ7XG4gI2luY2x1ZGUgXCYjMzQ7aXhnYmV2Zi5oXCYjMzQ7XG4gXG4tLyogT24gSHlwZXItViwgdG8gcmVzZXQsIHdlIG5lZWQgdG8gcmVhZCBmcm9tIHRoaXMgb2Zmc2V0XG4tICogZnJvbSB0aGUgUENJIGNvbmZpZyBzcGFjZS4gVGhpcyBpcyB0aGUgbWVjaGFuaXNtIHVzZWQgb25cbi0gKiBIeXBlci1WIHRvIHN1cHBvcnQgUEYvVkYgY29tbXVuaWNhdGlvbi5cbiYjNDM7LyogT24gSHlwZXItViB0aGUgUEYvVkYgY29tbXVuaWNhdGlvbiBpcyB0aHJvdWdoIGVtdWxhdGVkIFBDSSBjb25maWdcbiYjNDM7ICogc3BhY2UuIFRoZSByZXNldCBhbmQgbGluayBzdGF0dXMgYXJlIGV4cG9zZWQgYXQgdGhlIG9mZnNldHMgYmVsb3cuXG4gICovXG4tI2RlZmluZSBJWEdCRV9IVl9SRVNFVF9PRkZTRVQgICAgICAgICAgIDB4MjAxXG4mIzQzOyNkZWZpbmUgSVhHQkVfSFZfUkVTRVRfT0ZGU0VUXHRcdDB4MjAxXG4mIzQzOyNkZWZpbmUgSVhHQkVfSFZfTElOS19TVEFUVVNfT0ZGU0VUXHQweDIwOVxuJiM0MzsjZGVmaW5lIElYR0JFX0hWX0xJTktfU1RBVFVTX1NJWkVcdDRcbiBcbiBzdGF0aWMgaW5saW5lIHMzMiBpeGdiZXZmX3dyaXRlX21zZ19yZWFkX2FjayhzdHJ1Y3QgaXhnYmVfaHcgKmh3LCB1MzIgKm1zZyxcbiBcdFx0XHRcdFx0ICAgICB1MzIgKnJldG1zZywgdTE2IHNpemUpXG5AQCAtOTAxLDYgJiM0Mzs5MDQsNDAgQEAgc3RhdGljIHMzMiBpeGdiZXZmX2NoZWNrX21hY19saW5rX3ZmKHN0cnVjdCBpeGdiZV9odyAqaHcsXG4gXHRyZXR1cm4gcmV0X3ZhbDtcbiB9XG4gXG4mIzQzOy8qKlxuJiM0MzsgKiBpeGdiZXZmX2h2X3JlYWRfbGlua3NfZTYxMCAtIHJlYWQgbGluayBzdGF0dXMgZnJvbSBQQ0kgY29uZmlnIHNwYWNlXG4mIzQzOyAqIEBodzogcG9pbnRlciB0byBoYXJkd2FyZSBzdHJ1Y3R1cmVcbiYjNDM7ICogQGxpbmtzX3JlZzogcG9pbnRlciB0byBzdG9yZSByZWFkIHZhbHVlXG4mIzQzOyAqXG4mIzQzOyAqIE9uIEh5cGVyLVYgRTYxMCBWRnMgdGhlIFZGTElOS1MgcmVnaXN0ZXIgZG9lcyBub3QgY2FycnkgdmFsaWQgbGluayBzcGVlZC5cbiYjNDM7ICogSW5zdGVhZCwgbGluayBzdGF0dXMgaXMgZXhwb3NlZCB0aHJvdWdoIGVtdWxhdGVkIFBDSSBjb25maWcgc3BhY2UgYXQgb2Zmc2V0XG4mIzQzOyAqIDB4MjA5IGluIFZGTElOS1MgcmVnaXN0ZXIgZm9ybWF0LlxuJiM0MzsgKlxuJiM0MzsgKiBSZXR1cm46IDAgb24gc3VjY2VzcywgbmVnYXRpdmUgZXJyb3IgY29kZSBvbiBmYWlsdXJlLlxuJiM0MzsgKi9cbiYjNDM7c3RhdGljIHMzMiBpeGdiZXZmX2h2X3JlYWRfbGlua3NfZTYxMChzdHJ1Y3QgaXhnYmVfaHcgKmh3LCB1MzIgKmxpbmtzX3JlZylcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBpeGdiZXZmX2FkYXB0ZXIgKmFkYXB0ZXIgPSBody1cdTAwM2ViYWNrO1xuJiM0MztcdHU4IGRhdGFbSVhHQkVfSFZfTElOS19TVEFUVVNfU0laRV07XG4mIzQzO1xuJiM0MztcdGlmICghSVNfRU5BQkxFRChDT05GSUdfUENJX01NQ09ORklHKSkge1xuJiM0MztcdFx0ZGV2X2Vycl9vbmNlKFx1MDAyNmFkYXB0ZXItXHUwMDNlcGRldi1cdTAwM2VkZXYsXG4mIzQzO1x0XHRcdCAgICAgXCYjMzQ7Y2Fubm90IHJlYWQgbGluayBzdGF0dXMsIFBDSV9NTUNPTkZJRyBpcyByZXF1aXJlZCBmb3IgSHlwZXItVlxcblwmIzM0Oyk7XG4mIzQzO1x0XHRyZXR1cm4gLUVPUE5PVFNVUFA7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRmb3IgKGludCBpID0gMDsgaSBcdTAwM2MgSVhHQkVfSFZfTElOS19TVEFUVVNfU0laRTsgaSYjNDM7JiM0MzspIHtcbiYjNDM7XHRcdGludCByZXQgPSBwY2lfcmVhZF9jb25maWdfYnl0ZShhZGFwdGVyLVx1MDAzZXBkZXYsXG4mIzQzO1x0XHRcdFx0XHQgICAgICAgSVhHQkVfSFZfTElOS19TVEFUVVNfT0ZGU0VUICYjNDM7IGksXG4mIzQzO1x0XHRcdFx0XHQgICAgICAgXHUwMDI2ZGF0YVtpXSk7XG4mIzQzO1x0XHRpZiAocmV0KVxuJiM0MztcdFx0XHRyZXR1cm4gcGNpYmlvc19lcnJfdG9fZXJybm8ocmV0KTtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdCpsaW5rc19yZWcgPSBnZXRfdW5hbGlnbmVkX2xlMzIoZGF0YSk7XG4mIzQzO1x0cmV0dXJuIDA7XG4mIzQzO31cbiYjNDM7XG4gLyoqXG4gICogaXhnYmV2Zl9odl9jaGVja19tYWNfbGlua192ZiAtIGNoZWNrIGxpbmtcbiAgKiBAaHc6IHBvaW50ZXIgdG8gcHJpdmF0ZSBoYXJkd2FyZSBzdHJ1Y3RcbkBAIC05MDksNiAmIzQzOzk0Niw3IEBAIHN0YXRpYyBzMzIgaXhnYmV2Zl9jaGVja19tYWNfbGlua192ZihzdHJ1Y3QgaXhnYmVfaHcgKmh3LFxuICAqIEBhdXRvbmVnX3dhaXRfdG9fY29tcGxldGU6IHVudXNlZFxuICAqXG4gICogSHlwZXItViB2YXJpYW50OyB0aGVyZSBpcyBubyBtYWlsYm94IGNvbW11bmljYXRpb24uXG4mIzQzOyAqIEZvciBFNjEwIFZGcywgbGluayBzdGF0dXMgaXMgcmVhZCBmcm9tIGVtdWxhdGVkIFBDSSBjb25maWcgc3BhY2UuXG4gICovXG4gc3RhdGljIHMzMiBpeGdiZXZmX2h2X2NoZWNrX21hY19saW5rX3ZmKHN0cnVjdCBpeGdiZV9odyAqaHcsXG4gXHRcdFx0XHRcdGl4Z2JlX2xpbmtfc3BlZWQgKnNwZWVkLFxuQEAgLTkyNiw4ICYjNDM7OTY0LDE2IEBAIHN0YXRpYyBzMzIgaXhnYmV2Zl9odl9jaGVja19tYWNfbGlua192ZihzdHJ1Y3QgaXhnYmVfaHcgKmh3LFxuIFx0aWYgKCFtYWMtXHUwMDNlZ2V0X2xpbmtfc3RhdHVzKVxuIFx0XHRnb3RvIG91dDtcbiBcbi1cdC8qIGlmIGxpbmsgc3RhdHVzIGlzIGRvd24gbm8gcG9pbnQgaW4gY2hlY2tpbmcgdG8gc2VlIGlmIHBmIGlzIHVwICovXG4tXHRsaW5rc19yZWcgPSBJWEdCRV9SRUFEX1JFRyhodywgSVhHQkVfVkZMSU5LUyk7XG4mIzQzO1x0aWYgKG1hYy1cdTAwM2V0eXBlID09IGl4Z2JlX21hY19lNjEwX3ZmKSB7XG4mIzQzO1x0XHRpZiAoaXhnYmV2Zl9odl9yZWFkX2xpbmtzX2U2MTAoaHcsIFx1MDAyNmxpbmtzX3JlZykpIHtcbiYjNDM7XHRcdFx0KmxpbmtfdXAgPSBmYWxzZTtcbiYjNDM7XHRcdFx0KnNwZWVkID0gSVhHQkVfTElOS19TUEVFRF9VTktOT1dOO1xuJiM0MztcdFx0XHRyZXR1cm4gMDtcbiYjNDM7XHRcdH1cbiYjNDM7XHR9IGVsc2Uge1xuJiM0MztcdFx0bGlua3NfcmVnID0gSVhHQkVfUkVBRF9SRUcoaHcsIElYR0JFX1ZGTElOS1MpO1xuJiM0MztcdH1cbiYjNDM7XG4gXHRpZiAoIShsaW5rc19yZWcgXHUwMDI2IElYR0JFX0xJTktTX1VQKSlcbiBcdFx0Z290byBvdXQ7XG4gXG5AQCAtOTQxLDggJiM0Mzs5ODcsMTEgQEAgc3RhdGljIHMzMiBpeGdiZXZmX2h2X2NoZWNrX21hY19saW5rX3ZmKHN0cnVjdCBpeGdiZV9odyAqaHcsXG4gXHRcdFx0dWRlbGF5KDEwMCk7XG4gXHRcdFx0bGlua3NfcmVnID0gSVhHQkVfUkVBRF9SRUcoaHcsIElYR0JFX1ZGTElOS1MpO1xuIFxuLVx0XHRcdGlmICghKGxpbmtzX3JlZyBcdTAwMjYgSVhHQkVfTElOS1NfVVApKVxuLVx0XHRcdFx0Z290byBvdXQ7XG4mIzQzO1x0XHRcdGlmICghKGxpbmtzX3JlZyBcdTAwMjYgSVhHQkVfTElOS1NfVVApKSB7XG4mIzQzO1x0XHRcdFx0KmxpbmtfdXAgPSBmYWxzZTtcbiYjNDM7XHRcdFx0XHQqc3BlZWQgPSBJWEdCRV9MSU5LX1NQRUVEX1VOS05PV047XG4mIzQzO1x0XHRcdFx0cmV0dXJuIDA7XG4mIzQzO1x0XHRcdH1cbiBcdFx0fVxuIFx0fVxuIFxuQEAgLTk1Niw2ICYjNDM7MTAwNSw5IEBAIHN0YXRpYyBzMzIgaXhnYmV2Zl9odl9jaGVja19tYWNfbGlua192ZihzdHJ1Y3QgaXhnYmVfaHcgKmh3LFxuIFx0Y2FzZSBJWEdCRV9MSU5LU19TUEVFRF8xMDBfODI1OTk6XG4gXHRcdCpzcGVlZCA9IElYR0JFX0xJTktfU1BFRURfMTAwX0ZVTEw7XG4gXHRcdGJyZWFrO1xuJiM0MztcdGRlZmF1bHQ6XG4mIzQzO1x0XHQqc3BlZWQgPSBJWEdCRV9MSU5LX1NQRUVEX1VOS05PV047XG4mIzQzO1x0XHRicmVhaztcbiBcdH1cbiBcbiBcdC8qIGlmIHdlIHBhc3NlZCBhbGwgdGhlIHRlc3RzIGFib3ZlIHRoZW4gdGhlIGxpbmsgaXMgdXAgYW5kIHdlIG5vXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjQgMTQ6MTk8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+NG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+YmVzdC1leHBlbnNpdmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O05FVF9WRU5ET1JfSU5URUwmIzM0OywKICAgICYjMzQ7SVhHQkVWRiYjMzQ7LAogICAgJiMzNDtQQ0lfTU1DT05GSUcmIzM0OywKICAgICYjMzQ7UENJX01TSSYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2l4Z2JldmZfZ2V0X2xpbmtfa3NldHRpbmdzJiMzNDssCiAgICAmIzM0O2l4Z2JldmZfaHZfY2hlY2tfbWFjX2xpbmtfdmYmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGl4Z2JldmYgZHJpdmVyIHRvIHJlYWQgbGluayBzcGVlZCBmcm9tIHRoZSBlbXVsYXRlZCBQQ0kgY29uZmlnIHNwYWNlIGZvciBIeXBlci1WIEU2MTAgVkZzLiBUaGlzIGxvZ2ljIGlzIHJlYWNoYWJsZSB2aWEgdGhlIGV0aHRvb2wgZ2V0X2xpbmtfa3NldHRpbmdzIGNhbGxiYWNrIGFuZCB0aGUgZHJpdmVyJiMzOTtzIGJhY2tncm91bmQgbGluayBjaGVjayB0YXNrLiBTeXprYWxsZXIgY2FuIHJlYWNoIHRoaXMgY29kZSBieSB1c2luZyBpdHMgUENJIGRldmljZSBmdXp6ZXIgdG8gZW11bGF0ZSB0aGUgc3BlY2lmaWMgVkYgZGV2aWNlIElEIGFuZCB0aGVuIGludGVyYWN0aW5nIHdpdGggdGhlIHJlZ2lzdGVyZWQgbmV0ZGV2IHZpYSBldGh0b29sLiBUaGUgbmV3IGxvZ2ljIHJlcXVpcmVzIENPTkZJR19QQ0lfTU1DT05GSUcgdG8gYmUgZW5hYmxlZCB0byBhY3R1YWxseSBwZXJmb3JtIHRoZSBQQ0kgY29uZmlnIHNwYWNlIHJlYWRzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmUKaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseQp1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLgoKUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczoKLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLgotIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLgotIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy4KLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsCiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLgotIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLAogIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpCiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLgoKSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaAp0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4KCldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOgoxLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLgogICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4KICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zCiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLgoyLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS4KICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgogICBBbHNvIGNoZWNrICYjMzQ7ZGVwZW5kcyBvbiYjMzQ7IGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncwogICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3MKICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgYzAyMjZmNzJmN2I1NDgzZmUyOTdjMmQzYjZjMTczMWIwNDQxZTI4YwpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBNb24gQXVnIDI0IDE0OjE5OjE1IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaXhnYmV2Zi9ldGh0b29sLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9peGdiZXZmL2V0aHRvb2wuYwppbmRleCA1MzdhNjBkNTI3NmYwLi4yNDYzZmNjZmZkNGRhIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9peGdiZXZmL2V0aHRvb2wuYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9peGdiZXZmL2V0aHRvb2wuYwpAQCAtODMsNiAmIzQzOzgzLDE4IEBAIHN0YXRpYyBpbnQgaXhnYmV2Zl9nZXRfbGlua19rc2V0dGluZ3Moc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwKIAkJCQkgICAgICBzdHJ1Y3QgZXRodG9vbF9saW5rX2tzZXR0aW5ncyAqY21kKQogewogCXN0cnVjdCBpeGdiZXZmX2FkYXB0ZXIgKmFkYXB0ZXIgPSBuZXRkZXZfcHJpdihuZXRkZXYpOwomIzQzOwlzdHJ1Y3QgaXhnYmVfaHcgKmh3ID0gJmFtcDthZGFwdGVyLSZndDtodzsKJiM0MzsKJiM0MzsJLyogRTYxMCBIeXBlci1WIFZGczogcmVhZCBjdXJyZW50IGxpbmsgc3BlZWQgZnJvbSBQQ0kgY29uZmlnIHNwYWNlCiYjNDM7CSAqIG9uIGV2ZXJ5IGxpbmsgc3BlZWQgcXVlcnkuCiYjNDM7CSAqLwomIzQzOwlpZiAoaHctJmd0O21hYy50eXBlID09IGl4Z2JlX21hY19lNjEwX3ZmKSB7CiYjNDM7CQlzcGluX2xvY2tfYmgoJmFtcDthZGFwdGVyLSZndDttYnhfbG9jayk7CiYjNDM7CQlody0mZ3Q7bWFjLmdldF9saW5rX3N0YXR1cyA9IHRydWU7CiYjNDM7CQlody0mZ3Q7bWFjLm9wcy5jaGVja19saW5rKGh3LCAmYW1wO2FkYXB0ZXItJmd0O2xpbmtfc3BlZWQsCiYjNDM7CQkJCSAgICAgICAmYW1wO2FkYXB0ZXItJmd0O2xpbmtfdXAsIGZhbHNlKTsKJiM0MzsJCXNwaW5fdW5sb2NrX2JoKCZhbXA7YWRhcHRlci0mZ3Q7bWJ4X2xvY2spOwomIzQzOwl9CiAKIAlldGh0b29sX2xpbmtfa3NldHRpbmdzX3plcm9fbGlua19tb2RlKGNtZCwgc3VwcG9ydGVkKTsKIAlldGh0b29sX2xpbmtfa3NldHRpbmdzX2FkZF9saW5rX21vZGUoY21kLCBzdXBwb3J0ZWQsIDEwMDAwYmFzZVRfRnVsbCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9peGdiZXZmL3ZmLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9peGdiZXZmL3ZmLmMKaW5kZXggZjZkZjg2ZDEyNGI5ZS4uYTg0YjYyNjQxZTliYyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaXhnYmV2Zi92Zi5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2l4Z2JldmYvdmYuYwpAQCAtMSwxNCAmIzQzOzEsMTcgQEAKIC8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wCiAvKiBDb3B5cmlnaHQoYykgMTk5OSAtIDIwMjQgSW50ZWwgQ29ycG9yYXRpb24uICovCiAKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvdW5hbGlnbmVkLmgmZ3Q7CiYjNDM7CiAjaW5jbHVkZSAmIzM0O3ZmLmgmIzM0OwogI2luY2x1ZGUgJiMzNDtpeGdiZXZmLmgmIzM0OwogCi0vKiBPbiBIeXBlci1WLCB0byByZXNldCwgd2UgbmVlZCB0byByZWFkIGZyb20gdGhpcyBvZmZzZXQKLSAqIGZyb20gdGhlIFBDSSBjb25maWcgc3BhY2UuIFRoaXMgaXMgdGhlIG1lY2hhbmlzbSB1c2VkIG9uCi0gKiBIeXBlci1WIHRvIHN1cHBvcnQgUEYvVkYgY29tbXVuaWNhdGlvbi4KJiM0MzsvKiBPbiBIeXBlci1WIHRoZSBQRi9WRiBjb21tdW5pY2F0aW9uIGlzIHRocm91Z2ggZW11bGF0ZWQgUENJIGNvbmZpZwomIzQzOyAqIHNwYWNlLiBUaGUgcmVzZXQgYW5kIGxpbmsgc3RhdHVzIGFyZSBleHBvc2VkIGF0IHRoZSBvZmZzZXRzIGJlbG93LgogICovCi0jZGVmaW5lIElYR0JFX0hWX1JFU0VUX09GRlNFVCAgICAgICAgICAgMHgyMDEKJiM0MzsjZGVmaW5lIElYR0JFX0hWX1JFU0VUX09GRlNFVAkJMHgyMDEKJiM0MzsjZGVmaW5lIElYR0JFX0hWX0xJTktfU1RBVFVTX09GRlNFVAkweDIwOQomIzQzOyNkZWZpbmUgSVhHQkVfSFZfTElOS19TVEFUVVNfU0laRQk0CiAKIHN0YXRpYyBpbmxpbmUgczMyIGl4Z2JldmZfd3JpdGVfbXNnX3JlYWRfYWNrKHN0cnVjdCBpeGdiZV9odyAqaHcsIHUzMiAqbXNnLAogCQkJCQkgICAgIHUzMiAqcmV0bXNnLCB1MTYgc2l6ZSkKQEAgLTkwMSw2ICYjNDM7OTA0LDQwIEBAIHN0YXRpYyBzMzIgaXhnYmV2Zl9jaGVja19tYWNfbGlua192ZihzdHJ1Y3QgaXhnYmVfaHcgKmh3LAogCXJldHVybiByZXRfdmFsOwogfQogCiYjNDM7LyoqCiYjNDM7ICogaXhnYmV2Zl9odl9yZWFkX2xpbmtzX2U2MTAgLSByZWFkIGxpbmsgc3RhdHVzIGZyb20gUENJIGNvbmZpZyBzcGFjZQomIzQzOyAqIEBodzogcG9pbnRlciB0byBoYXJkd2FyZSBzdHJ1Y3R1cmUKJiM0MzsgKiBAbGlua3NfcmVnOiBwb2ludGVyIHRvIHN0b3JlIHJlYWQgdmFsdWUKJiM0MzsgKgomIzQzOyAqIE9uIEh5cGVyLVYgRTYxMCBWRnMgdGhlIFZGTElOS1MgcmVnaXN0ZXIgZG9lcyBub3QgY2FycnkgdmFsaWQgbGluayBzcGVlZC4KJiM0MzsgKiBJbnN0ZWFkLCBsaW5rIHN0YXR1cyBpcyBleHBvc2VkIHRocm91Z2ggZW11bGF0ZWQgUENJIGNvbmZpZyBzcGFjZSBhdCBvZmZzZXQKJiM0MzsgKiAweDIwOSBpbiBWRkxJTktTIHJlZ2lzdGVyIGZvcm1hdC4KJiM0MzsgKgomIzQzOyAqIFJldHVybjogMCBvbiBzdWNjZXNzLCBuZWdhdGl2ZSBlcnJvciBjb2RlIG9uIGZhaWx1cmUuCiYjNDM7ICovCiYjNDM7c3RhdGljIHMzMiBpeGdiZXZmX2h2X3JlYWRfbGlua3NfZTYxMChzdHJ1Y3QgaXhnYmVfaHcgKmh3LCB1MzIgKmxpbmtzX3JlZykKJiM0Mzt7CiYjNDM7CXN0cnVjdCBpeGdiZXZmX2FkYXB0ZXIgKmFkYXB0ZXIgPSBody0mZ3Q7YmFjazsKJiM0MzsJdTggZGF0YVtJWEdCRV9IVl9MSU5LX1NUQVRVU19TSVpFXTsKJiM0MzsKJiM0MzsJaWYgKCFJU19FTkFCTEVEKENPTkZJR19QQ0lfTU1DT05GSUcpKSB7CiYjNDM7CQlkZXZfZXJyX29uY2UoJmFtcDthZGFwdGVyLSZndDtwZGV2LSZndDtkZXYsCiYjNDM7CQkJICAgICAmIzM0O2Nhbm5vdCByZWFkIGxpbmsgc3RhdHVzLCBQQ0lfTU1DT05GSUcgaXMgcmVxdWlyZWQgZm9yIEh5cGVyLVZcbiYjMzQ7KTsKJiM0MzsJCXJldHVybiAtRU9QTk9UU1VQUDsKJiM0MzsJfQomIzQzOwomIzQzOwlmb3IgKGludCBpID0gMDsgaSAmbHQ7IElYR0JFX0hWX0xJTktfU1RBVFVTX1NJWkU7IGkmIzQzOyYjNDM7KSB7CiYjNDM7CQlpbnQgcmV0ID0gcGNpX3JlYWRfY29uZmlnX2J5dGUoYWRhcHRlci0mZ3Q7cGRldiwKJiM0MzsJCQkJCSAgICAgICBJWEdCRV9IVl9MSU5LX1NUQVRVU19PRkZTRVQgJiM0MzsgaSwKJiM0MzsJCQkJCSAgICAgICAmYW1wO2RhdGFbaV0pOwomIzQzOwkJaWYgKHJldCkKJiM0MzsJCQlyZXR1cm4gcGNpYmlvc19lcnJfdG9fZXJybm8ocmV0KTsKJiM0MzsJfQomIzQzOwomIzQzOwkqbGlua3NfcmVnID0gZ2V0X3VuYWxpZ25lZF9sZTMyKGRhdGEpOwomIzQzOwlyZXR1cm4gMDsKJiM0Mzt9CiYjNDM7CiAvKioKICAqIGl4Z2JldmZfaHZfY2hlY2tfbWFjX2xpbmtfdmYgLSBjaGVjayBsaW5rCiAgKiBAaHc6IHBvaW50ZXIgdG8gcHJpdmF0ZSBoYXJkd2FyZSBzdHJ1Y3QKQEAgLTkwOSw2ICYjNDM7OTQ2LDcgQEAgc3RhdGljIHMzMiBpeGdiZXZmX2NoZWNrX21hY19saW5rX3ZmKHN0cnVjdCBpeGdiZV9odyAqaHcsCiAgKiBAYXV0b25lZ193YWl0X3RvX2NvbXBsZXRlOiB1bnVzZWQKICAqCiAgKiBIeXBlci1WIHZhcmlhbnQ7IHRoZXJlIGlzIG5vIG1haWxib3ggY29tbXVuaWNhdGlvbi4KJiM0MzsgKiBGb3IgRTYxMCBWRnMsIGxpbmsgc3RhdHVzIGlzIHJlYWQgZnJvbSBlbXVsYXRlZCBQQ0kgY29uZmlnIHNwYWNlLgogICovCiBzdGF0aWMgczMyIGl4Z2JldmZfaHZfY2hlY2tfbWFjX2xpbmtfdmYoc3RydWN0IGl4Z2JlX2h3ICpodywKIAkJCQkJaXhnYmVfbGlua19zcGVlZCAqc3BlZWQsCkBAIC05MjYsOCAmIzQzOzk2NCwxNiBAQCBzdGF0aWMgczMyIGl4Z2JldmZfaHZfY2hlY2tfbWFjX2xpbmtfdmYoc3RydWN0IGl4Z2JlX2h3ICpodywKIAlpZiAoIW1hYy0mZ3Q7Z2V0X2xpbmtfc3RhdHVzKQogCQlnb3RvIG91dDsKIAotCS8qIGlmIGxpbmsgc3RhdHVzIGlzIGRvd24gbm8gcG9pbnQgaW4gY2hlY2tpbmcgdG8gc2VlIGlmIHBmIGlzIHVwICovCi0JbGlua3NfcmVnID0gSVhHQkVfUkVBRF9SRUcoaHcsIElYR0JFX1ZGTElOS1MpOwomIzQzOwlpZiAobWFjLSZndDt0eXBlID09IGl4Z2JlX21hY19lNjEwX3ZmKSB7CiYjNDM7CQlpZiAoaXhnYmV2Zl9odl9yZWFkX2xpbmtzX2U2MTAoaHcsICZhbXA7bGlua3NfcmVnKSkgewomIzQzOwkJCSpsaW5rX3VwID0gZmFsc2U7CiYjNDM7CQkJKnNwZWVkID0gSVhHQkVfTElOS19TUEVFRF9VTktOT1dOOwomIzQzOwkJCXJldHVybiAwOwomIzQzOwkJfQomIzQzOwl9IGVsc2UgewomIzQzOwkJbGlua3NfcmVnID0gSVhHQkVfUkVBRF9SRUcoaHcsIElYR0JFX1ZGTElOS1MpOwomIzQzOwl9CiYjNDM7CiAJaWYgKCEobGlua3NfcmVnICZhbXA7IElYR0JFX0xJTktTX1VQKSkKIAkJZ290byBvdXQ7CiAKQEAgLTk0MSw4ICYjNDM7OTg3LDExIEBAIHN0YXRpYyBzMzIgaXhnYmV2Zl9odl9jaGVja19tYWNfbGlua192ZihzdHJ1Y3QgaXhnYmVfaHcgKmh3LAogCQkJdWRlbGF5KDEwMCk7CiAJCQlsaW5rc19yZWcgPSBJWEdCRV9SRUFEX1JFRyhodywgSVhHQkVfVkZMSU5LUyk7CiAKLQkJCWlmICghKGxpbmtzX3JlZyAmYW1wOyBJWEdCRV9MSU5LU19VUCkpCi0JCQkJZ290byBvdXQ7CiYjNDM7CQkJaWYgKCEobGlua3NfcmVnICZhbXA7IElYR0JFX0xJTktTX1VQKSkgewomIzQzOwkJCQkqbGlua191cCA9IGZhbHNlOwomIzQzOwkJCQkqc3BlZWQgPSBJWEdCRV9MSU5LX1NQRUVEX1VOS05PV047CiYjNDM7CQkJCXJldHVybiAwOwomIzQzOwkJCX0KIAkJfQogCX0KIApAQCAtOTU2LDYgJiM0MzsxMDA1LDkgQEAgc3RhdGljIHMzMiBpeGdiZXZmX2h2X2NoZWNrX21hY19saW5rX3ZmKHN0cnVjdCBpeGdiZV9odyAqaHcsCiAJY2FzZSBJWEdCRV9MSU5LU19TUEVFRF8xMDBfODI1OTk6CiAJCSpzcGVlZCA9IElYR0JFX0xJTktfU1BFRURfMTAwX0ZVTEw7CiAJCWJyZWFrOwomIzQzOwlkZWZhdWx0OgomIzQzOwkJKnNwZWVkID0gSVhHQkVfTElOS19TUEVFRF9VTktOT1dOOwomIzQzOwkJYnJlYWs7CiAJfQogCiAJLyogaWYgd2UgcGFzc2VkIGFsbCB0aGUgdGVzdHMgYWJvdmUgdGhlbiB0aGUgbGluayBpcyB1cCBhbmQgd2Ugbm8KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjQgMTQ6MTk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzg0MgoJCQkJCQkJb3V0cHV0OiAyNAoJCQkJCQkJdGhvdWdodHM6IDg4NgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIFBhdGNoIGZvciBGdXp6aW5nIFN1aXRhYmlsaXR5KioKCk9rYXksIHNvIEkmIzM5O3ZlIGdvdCB0aGlzIHBhdGNoIHRoYXQgdHdlYWtzIHRoZSBgaXhnYmV2ZmAgZHJpdmVyIOKAkyBzcGVjaWZpY2FsbHkgaW4gYGV0aHRvb2wuY2AgYW5kIGB2Zi5jYC4gSXQmIzM5O3MgYWRkaW5nIHNvbWUgbG9naWMgdG8gcmVhZCBsaW5rIHNwZWVkIGZyb20gdGhlIFBDSSBjb25maWcgc3BhY2UsIGJ1dCBvbmx5IGZvciBIeXBlci1WIEU2MTAgVkZzLiAgTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMsICYjMzQ7V29ydGhGdXp6aW5nPWZhbHNlPyYjMzQ7ICBUaGUgaW5zdHJ1Y3Rpb25zIHNheSB0byBmbGFnIHBhdGNoZXMgdGhhdCB0b3VjaCB2ZW5kb3Itc3BlY2lmaWMgUENJZSBkcml2ZXJzIG5vdCBlbXVsYXRlZCBieSBzdGFuZGFyZCBRRU1VLiAgCgpTbywgaXMgYGl4Z2JldmZgIHZlbmRvci1zcGVjaWZpYz8gSXQgKmlzKiB0aGUgSW50ZWwgMTAgR2lnYWJpdCBWaXJ0dWFsIEZ1bmN0aW9uIGRyaXZlci4gSW50ZWwgTklDcyAoZTEwMDAsIGUxMDAwZSwgaWdiLCBpeGdiZSwgaTQwZSkgYXJlIGdlbmVyYWxseSBzdGFuZGFyZCBOSUNzLiAgSG93ZXZlciwgYGl4Z2JldmZgIGlzIGEgVkYgZHJpdmVyOyBhbmQgVkYmIzM5O3MgYXJlIGFsd2F5cyBhIGxpdHRsZSB0cmlja2llci4gIERvZXMgc3RhbmRhcmQgUUVNVSBlbXVsYXRlIGl0PyBRRU1VIGVtdWxhdGVzIGBpeGdiZWAgKHRoZSBwaHlzaWNhbCBmdW5jdGlvbiksIGJ1dCBub3QsIHRvIG15IGtub3dsZWRnZSwgdGhlIFZGLiBXYWl0LCB0aGUgcHJvbXB0IHNheXMgdGhlIGZvbGxvd2luZyBzaG91bGQgYmUgY29uc2lkZXJlZCwgJiMzNDsqKkNvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLCBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVSoqJiMzNDsuCgpBaGEhIFRoaXMgcGF0Y2ggc3BlY2lmaWNhbGx5IGNhbGxzIG91dCAmIzM0O0h5cGVyLVYgRTYxMCBWRnMuJiMzNDsgIFRoZSB0ZXh0IHNheXMgdGhlIFBGL1ZGIGNvbW11bmljYXRpb24gaGFwcGVucyB0aHJvdWdoICplbXVsYXRlZCogUENJIGNvbmZpZyBzcGFjZSBvbiBIeXBlci1WLiBFNjEwIGlzIGFuIEludGVsIEV0aGVybmV0IENvbnRyb2xsZXIsIGxpa2UgdGhlIEU4MTAsIGJ1dCBub3QgdGhlIEU4MTAuIERvZXMgc3RhbmRhcmQgUUVNVSBlbXVsYXRlIEU2MTA/IE5vLCB0aGF0JiMzOTtzIGRlZmluaXRlbHkgbm90IGVtdWxhdGVkLiBRRU1VIGVtdWxhdGVzIG90aGVyIEludGVsIE5JQ3MgYnV0IG5vdCB0aGUgRTYxMCAob3IgRTYxMCBWRnMpIHRvIG15IGtub3dsZWRnZS4gU28gd2UmIzM5O3JlIGRlYWxpbmcgd2l0aCBhIGRyaXZlciwgYGl4Z2JldmZgIGZvciA4MjU5OSwgWDU0MCwgWDU1MCwgKmFuZCogRTYxMCBWRnMuIEFuZCBpdCBsb29rcyBsaWtlIGl0IG5lZWRzIGVpdGhlciBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlICpvciogdGhlIEh5cGVyLVYgVkYgcGFzcy10aHJvdWdoIHRvIHdvcmsgY29ycmVjdGx5LgoKQ2FuIHN5emthbGxlciBoYW5kbGUgdGhpcz8gU3l6a2FsbGVyIHVzZXMgUUVNVSBvciBHQ0UuIEdDRSBoYXMgZ1ZOSUMsIGJ1dCBub3QgaXhnYmV2Zi4gQW5kLCBpbiBzdGFuZGFyZCBRRU1VLCB0aGVyZSYjMzk7cyBubyBpeGdiZXZmIGVtdWxhdGlvbiwgb25seSB0aGUgaXhnYmUgUEYuICBJIGtub3cgc3l6a2FsbGVyIGhhcyBgc3l6X3BjaV9zZXR1cGAgYW5kIGBzeXpfcGNpX2RldmljZWAsIHdoaWNoICpjb3VsZCogZW11bGF0ZSBQQ0kgZGV2aWNlcyB2aWEgdmhjaSBvciBzb21ldGhpbmcgc2ltaWxhci4gQnV0LCBkb2VzIHRoYXQgcmVhbGx5IHByb3ZpZGUgdGhlIGdyYW51bGFyaXR5IG5lZWRlZCB0byBmdWxseSBlbXVsYXRlIHRoZSBzcGVjaWZpYyByZWdpc3RlcnMgYW5kIGJlaGF2aW9ycyBvZiBhbiBgaXhnYmV2ZmA/IFByb2JhYmx5IG5vdCwgdW5sZXNzIGl0IHdlcmUgd3JpdHRlbiBpbiBzeXpsYW5nLiBTeXprYWxsZXIgaGFzIHNvbWUgUENJIGZ1enppbmcsIGJ1dCBpdCYjMzk7cyBwcmV0dHkgbGltaXRlZC4KClNvLCByZWFsaXN0aWNhbGx5LCBpcyBpeGdiZXZmIGFjdHVhbGx5IGZ1enplZCBieSBzeXprYWxsZXIgY3VycmVudGx5PyBJIHNob3VsZCBwcm9iYWJseSBjaGVjayB0aGF0LCBidXQgYmFzZWQgb24gd2hhdCBJIGtub3cgbm93LCBJJiMzOTttIGxlYW5pbmcgaGVhdmlseSB0b3dhcmRzICYjMzQ7bm8mIzM0Oy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNCAxNDoxOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtpeGdiZXZmJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O1xuRnVsbCBvdXRwdXQgaXMgdG9vIGxvbmcsIHNob3dpbmcgNTAwIG91dCBvZiAzNDg3IGxpbmVzLlxuVXNlIG1vcmUgcHJlY2lzZSBleHByZXNzaW9uIGlmIHBvc3NpYmxlLlxuXG5Eb2N1bWVudGF0aW9uLy5yZW5hbWVzLnR4dD04MTc9bmV0d29ya2luZy9kZXZpY2VfZHJpdmVycy9pbnRlbC9peGdiZSBuZXR3b3JraW5nL2RldmljZV9kcml2ZXJzL2V0aGVybmV0L2ludGVsL2l4Z2JlXG5Eb2N1bWVudGF0aW9uLy5yZW5hbWVzLnR4dDo4MTg6bmV0d29ya2luZy9kZXZpY2VfZHJpdmVycy9pbnRlbC9peGdiZXZmIG5ldHdvcmtpbmcvZGV2aWNlX2RyaXZlcnMvZXRoZXJuZXQvaW50ZWwvaXhnYmV2ZlxuRG9jdW1lbnRhdGlvbi8ucmVuYW1lcy50eHQtODE5LW5ldHdvcmtpbmcvZGV2aWNlX2RyaXZlcnMvbWFydmVsbC9vY3Rlb250eDIgbmV0d29ya2luZy9kZXZpY2VfZHJpdmVycy9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4MlxuLS1cbkRvY3VtZW50YXRpb24vLnJlbmFtZXMudHh0PTg0Mz1uZXR3b3JraW5nL2l4Z2JlIG5ldHdvcmtpbmcvZGV2aWNlX2RyaXZlcnMvZXRoZXJuZXQvaW50ZWwvaXhnYmVcbkRvY3VtZW50YXRpb24vLnJlbmFtZXMudHh0Ojg0NDpuZXR3b3JraW5nL2l4Z2JldmYgbmV0d29ya2luZy9kZXZpY2VfZHJpdmVycy9ldGhlcm5ldC9pbnRlbC9peGdiZXZmXG5Eb2N1bWVudGF0aW9uLy5yZW5hbWVzLnR4dC04NDUtbmV0d29ya2luZy9uZXRkZXYtRkFRIHByb2Nlc3MvbWFpbnRhaW5lci1uZXRkZXZcbi0tXG5Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvZGV2aWNlX2RyaXZlcnMvZXRoZXJuZXQvaW5kZXgucnN0PTg9Q29udGVudHM6XG4tLVxuRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL2RldmljZV9kcml2ZXJzL2V0aGVybmV0L2luZGV4LnJzdC0zOS0gICBpbnRlbC9peGdiZVxuRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL2RldmljZV9kcml2ZXJzL2V0aGVybmV0L2luZGV4LnJzdDo0MDogICBpbnRlbC9peGdiZXZmXG5Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvZGV2aWNlX2RyaXZlcnMvZXRoZXJuZXQvaW5kZXgucnN0LTQxLSAgIGludGVsL2k0MGVcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9LY29uZmlnPTIwMz1jb25maWcgSVhHQkVWRlxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL0tjb25maWctMjEzLVx0ICBNb3JlIHNwZWNpZmljIGluZm9ybWF0aW9uIG9uIGNvbmZpZ3VyaW5nIHRoZSBkcml2ZXIgaXMgaW5cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL0tjb25maWc6MjE0Olx0ICBcdTAwM2NmaWxlOkRvY3VtZW50YXRpb24vbmV0d29ya2luZy9kZXZpY2VfZHJpdmVycy9ldGhlcm5ldC9pbnRlbC9peGdiZXZmLnJzdFx1MDAzZS5cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL0tjb25maWctMjE1LVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvS2NvbmZpZy0yMTYtXHQgIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmUuIFRoZSBtb2R1bGVcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL0tjb25maWc6MjE3Olx0ICB3aWxsIGJlIGNhbGxlZCBpeGdiZXZmLiAgTVNJLVggaW50ZXJydXB0IHN1cHBvcnQgaXMgcmVxdWlyZWRcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL0tjb25maWctMjE4LVx0ICBmb3IgdGhpcyBkcml2ZXIgdG8gd29yayBjb3JyZWN0bHkuXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvS2NvbmZpZz0yMjA9Y29uZmlnIElYR0JFVkZfSVBTRUNcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9LY29uZmlnLTIyNi1cdGhlbHBcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL0tjb25maWc6MjI3Olx0ICBFbmFibGUgc3VwcG9ydCBmb3IgSVBTZWMgb2ZmbG9hZCBpbiBpeGdiZXZmLmtvXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9LY29uZmlnLTIyOC1cbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9NYWtlZmlsZT0xNT1vYmotJChDT05GSUdfSVhHQkUpICYjNDM7PSBpeGdiZS9cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL01ha2VmaWxlOjE2Om9iai0kKENPTkZJR19JWEdCRVZGKSAmIzQzOz0gaXhnYmV2Zi9cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL01ha2VmaWxlLTE3LW9iai0kKENPTkZJR19JNDBFKSAmIzQzOz0gaTQwZS9cbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9peGdiZS9peGdiZS5oPTIxMj1zdHJ1Y3QgdmZfZGF0YV9zdG9yYWdlIHtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9peGdiZS9peGdiZS5oLTIzNC1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2l4Z2JlL2l4Z2JlLmg6MjM1OmVudW0gaXhnYmV2Zl94Y2FzdF9tb2RlcyB7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9peGdiZS9peGdiZS5oLTIzNi1cdElYR0JFVkZfWENBU1RfTU9ERV9OT05FID0gMCxcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9peGdiZXZmL01ha2VmaWxlLTYtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9peGdiZXZmL01ha2VmaWxlOjc6b2JqLSQoQ09ORklHX0lYR0JFVkYpICYjNDM7PSBpeGdiZXZmLm9cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2l4Z2JldmYvTWFrZWZpbGUtOC1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2l4Z2JldmYvTWFrZWZpbGU6OTppeGdiZXZmLXkgOj0gdmYubyBtYngubyBldGh0b29sLm8gaXhnYmV2Zl9tYWluLm9cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2l4Z2JldmYvTWFrZWZpbGU6MTA6aXhnYmV2Zi0kKENPTkZJR19JWEdCRVZGX0lQU0VDKSAmIzQzOz0gaXBzZWMub1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2l4Z2JldmYvZXRodG9vbC5jLTMtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9peGdiZXZmL2V0aHRvb2wuYzo0Oi8qIGV0aHRvb2wgc3VwcG9ydCBmb3IgaXhnYmV2ZiAqL1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaXhnYmV2Zi9ldGh0b29sLmMtNS1cbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9peGdiZXZmL2V0aHRvb2wuYy0xNy1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2l4Z2JldmYvZXRodG9vbC5jOjE4OiNpbmNsdWRlIFwmIzM0O2l4Z2JldmYuaFwmIzM0O1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaXhnYmV2Zi9ldGh0b29sLmMtMTktXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaXhnYmV2Zi9ldGh0b29sLmM9MjI9c3RydWN0IGl4Z2JlX3N0YXRzIHtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9peGdiZXZmL2V0aHRvb2wuYy0zMS1cdC50eXBlID0gSVhHQkVWRl9TVEFUUywgXFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2l4Z2JldmYvZXRodG9vbC5jOjMyOlx0LnNpemVvZl9zdGF0ID0gc2l6ZW9mX2ZpZWxkKHN0cnVjdCBpeGdiZXZmX2FkYXB0ZXIsIF9zdGF0KSwgXFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2l4Z2JldmYvZXRodG9vbC5jOjMzOlx0LnN0YXRfb2Zmc2V0ID0gb2Zmc2V0b2Yoc3RydWN0IGl4Z2JldmZfYWRhcHRlciwgX3N0YXQpIFxcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9peGdiZXZmL2V0aHRvb2wuYy0zNC19XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaXhnYmV2Zi9ldGh0b29sLmMtNDItXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9peGdiZXZmL2V0aHRvb2wuYzo0MzpzdGF0aWMgc3RydWN0IGl4Z2JlX3N0YXRzIGl4Z2JldmZfZ3N0cmluZ3Nfc3RhdHNbXSA9IHtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2l4Z2JldmYvZXRodG9vbC5jLTQ0LVx0SVhHQkVWRl9ORVRERVZfU1RBVChyeF9wYWNrZXRzKSxcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9peGdiZXZmL2V0aHRvb2wuYy02MC0jZGVmaW5lIElYR0JFVkZfUVVFVUVfU1RBVFNfTEVOICggXFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2l4Z2JldmYvZXRodG9vbC5jOjYxOlx0KCgoc3RydWN0IGl4Z2JldmZfYWRhcHRlciAqKW5ldGRldl9wcml2KG5ldGRldikpLVx1MDAzZW51bV90eF9xdWV1ZXMgJiM0MzsgXFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2l4Z2JldmYvZXRodG9vbC5jOjYyOlx0ICgoc3RydWN0IGl4Z2JldmZfYWRhcHRlciAqKW5ldGRldl9wcml2KG5ldGRldikpLVx1MDAzZW51bV94ZHBfcXVldWVzICYjNDM7IFxcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9peGdiZXZmL2V0aHRvb2wuYzo2MzpcdCAoKHN0cnVjdCBpeGdiZXZmX2FkYXB0ZXIgKiluZXRkZXZfcHJpdihuZXRkZXYpKS1cdTAwM2VudW1fcnhfcXVldWVzKSAqIFxcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9peGdiZXZmL2V0aHRvb2wuYzo2NDpcdCAoc2l6ZW9mKHN0cnVjdCBpeGdiZXZmX3N0YXRzKSAvIHNpemVvZih1NjQpKSlcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2l4Z2JldmYvZXRodG9vbC5jOjY1OiNkZWZpbmUgSVhHQkVWRl9HTE9CQUxfU1RBVFNfTEVOIEFSUkFZX1NJWkUoaXhnYmV2Zl9nc3RyaW5nc19zdGF0cylcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2l4Z2JldmYvZXRodG9vbC5jLTY2LVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2l4Z2JldmYvZXRodG9vbC5jPTY4PXN0YXRpYyBjb25zdCBjaGFyIGl4Z2JlX2dzdHJpbmdzX3Rlc3RbXVtFVEhfR1NUUklOR19MRU5dID0ge1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2l4Z2JldmYvZXRodG9vbC5jLTc0LVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaXhnYmV2Zi9ldGh0b29sLmM6NzU6c3RhdGljIGNvbnN0IGNoYXIgaXhnYmV2Zl9wcml2X2ZsYWdzX3N0cmluZ3NbXVtFVEhfR1NUUklOR19MRU5dID0ge1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaXhnYmV2Zi9ldGh0b29sLmMtNzYtI2RlZmluZSBJWEdCRVZGX1BSSVZfRkxBR1NfTEVHQUNZX1JYXHRCSVQoMClcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9peGdiZXZmL2V0aHRvb2wuYy03OS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2l4Z2JldmYvZXRodG9vbC5jOjgwOiNkZWZpbmUgSVhHQkVWRl9QUklWX0ZMQUdTX1NUUl9MRU4gQVJSQVlfU0laRShpeGdiZXZmX3ByaXZfZmxhZ3Nfc3RyaW5ncylcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2l4Z2JldmYvZXRodG9vbC5jLTgxLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaXhnYmV2Zi9ldGh0b29sLmM6ODI6c3RhdGljIGludCBpeGdiZXZmX2dldF9saW5rX2tzZXR0aW5ncyhzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaXhnYmV2Zi9ldGh0b29sLmMtODMtXHRcdFx0XHQgICAgICBzdHJ1Y3QgZXRodG9vbF9saW5rX2tzZXR0aW5ncyAqY21kKVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaXhnYmV2Zi9ldGh0b29sLmMtODQte1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaXhnYmV2Zi9ldGh0b29sLmM6ODU6XHRzdHJ1Y3QgaXhnYmV2Zl9hZGFwdGVyICphZGFwdGVyID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2l4Z2JldmYvZXRodG9vbC5jLTg2LVx0c3RydWN0IGl4Z2JlX2h3ICpodyA9IFx1MDAyNmFkYXB0ZXItXHUwMDNlaHc7XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaXhnYmV2Zi9ldGh0b29sLmMtMTI4LVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaXhnYmV2Zi9ldGh0b29sLmM6MTI5OnN0YXRpYyB1MzIgaXhnYmV2Zl9nZXRfbXNnbGV2ZWwoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldilcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2l4Z2JldmYvZXRodG9vbC5jLTEzMC17XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9peGdiZXZmL2V0aHRvb2wuYzoxMzE6XHRzdHJ1Y3QgaXhnYmV2Zl9hZGFwdGVyICphZGFwdGVyID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2l4Z2JldmYvZXRodG9vbC5jLTEzMi1cbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9peGdiZXZmL2V0aHRvb2wuYy0xMzUtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9peGdiZXZmL2V0aHRvb2wuYzoxMzY6c3RhdGljIHZvaWQgaXhnYmV2Zl9zZXRfbXNnbGV2ZWwoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwgdTMyIGRhdGEpXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9peGdiZXZmL2V0aHRvb2wuYy0xMzcte1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaXhnYmV2Zi9ldGh0b29sLmM6MTM4Olx0c3RydWN0IGl4Z2JldmZfYWRhcHRlciAqYWRhcHRlciA9IG5ldGRldl9wcml2KG5ldGRldik7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9peGdiZXZmL2V0aHRvb2wuYy0xMzktXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaXhnYmV2Zi9ldGh0b29sLmMtMTQyLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaXhnYmV2Zi9ldGh0b29sLmM6MTQzOnN0YXRpYyBpbnQgaXhnYmV2Zl9nZXRfcmVnc19sZW4oc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldilcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2l4Z2JldmYvZXRodG9vbC5jLTE0NC17XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaXhnYmV2Zi9ldGh0b29sLmMtMTQ4LVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaXhnYmV2Zi9ldGh0b29sLmM6MTQ5OnN0YXRpYyB2b2lkIGl4Z2JldmZfZ2V0X3JlZ3Moc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldixcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2l4Z2JldmYvZXRodG9vbC5jLTE1MC1cdFx0XHQgICAgIHN0cnVjdCBldGh0b29sX3JlZ3MgKnJlZ3MsXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaXhnYmV2Zi9ldGh0b29sLmMtMTUyLXtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2l4Z2JldmYvZXRodG9vbC5jOjE1MzpcdHN0cnVjdCBpeGdiZXZmX2FkYXB0ZXIgKmFkYXB0ZXIgPSBuZXRkZXZfcHJpdihuZXRkZXYpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaXhnYmV2Zi9ldGh0b29sLmMtMTU0LVx0c3RydWN0IGl4Z2JlX2h3ICpodyA9IFx1MDAyNmFkYXB0ZXItXHUwMDNlaHc7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9peGdiZXZmL2V0aHRvb2wuYy0xNTUtXHR1MzIgKnJlZ3NfYnVmZiA9IHA7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9peGdiZXZmL2V0aHRvb2wuYzoxNTY6XHR1MzIgcmVnc19sZW4gPSBpeGdiZXZmX2dldF9yZWdzX2xlbihuZXRkZXYpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaXhnYmV2Zi9ldGh0b29sLmMtMTU3LVx0dTggaTtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9peGdiZXZmL2V0aHRvb2wuYy0yMjItXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9peGdiZXZmL2V0aHRvb2wuYzoyMjM6c3RhdGljIHZvaWQgaXhnYmV2Zl9nZXRfZHJ2aW5mbyhzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaXhnYmV2Zi9ldGh0b29sLmMtMjI0LVx0XHRcdFx0c3RydWN0IGV0aHRvb2xfZHJ2aW5mbyAqZHJ2aW5mbylcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2l4Z2JldmYvZXRodG9vbC5jLTIyNS17XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9peGdiZXZmL2V0aHRvb2wuYzoyMjY6XHRzdHJ1Y3QgaXhnYmV2Zl9hZGFwdGVyICphZGFwdGVyID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2l4Z2JldmYvZXRodG9vbC5jLTIyNy1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2l4Z2JldmYvZXRodG9vbC5jOjIyODpcdHN0cnNjcHkoZHJ2aW5mby1cdTAwM2Vkcml2ZXIsIGl4Z2JldmZfZHJpdmVyX25hbWUsIHNpemVvZihkcnZpbmZvLVx1MDAzZWRyaXZlcikpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaXhnYmV2Zi9ldGh0b29sLmMtMjI5LVx0c3Ryc2NweShkcnZpbmZvLVx1MDAzZWJ1c19pbmZvLCBwY2lfbmFtZShhZGFwdGVyLVx1MDAzZXBkZXYpLFxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2l4Z2JldmYvZXRodG9vbC5jLTIzNC1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2l4Z2JldmYvZXRodG9vbC5jOjIzNTpzdGF0aWMgdm9pZCBpeGdiZXZmX2dldF9yaW5ncGFyYW0oc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldixcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2l4Z2JldmYvZXRodG9vbC5jLTIzNi1cdFx0XHRcdCAgc3RydWN0IGV0aHRvb2xfcmluZ3BhcmFtICpyaW5nLFxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2l4Z2JldmYvZXRodG9vbC5jLTIzOS17XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9peGdiZXZmL2V0aHRvb2wuYzoyNDA6XHRzdHJ1Y3QgaXhnYmV2Zl9hZGFwdGVyICphZGFwdGVyID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2l4Z2JldmYvZXRodG9vbC5jLTI0MS1cbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9peGdiZXZmL2V0aHRvb2wuYy0yNDctXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9peGdiZXZmL2V0aHRvb2wuYzoyNDg6c3RhdGljIGludCBpeGdiZXZmX3NldF9yaW5ncGFyYW0oc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldixcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2l4Z2JldmYvZXRodG9vbC5jLTI0OS1cdFx0XHRcdCBzdHJ1Y3QgZXRodG9vbF9yaW5ncGFyYW0gKnJpbmcsXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaXhnYmV2Zi9ldGh0b29sLmMtMjUyLXtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2l4Z2JldmYvZXRodG9vbC5jOjI1MzpcdHN0cnVjdCBpeGdiZXZmX2FkYXB0ZXIgKmFkYXB0ZXIgPSBuZXRkZXZfcHJpdihuZXRkZXYpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaXhnYmV2Zi9ldGh0b29sLmM6MjU0Olx0c3RydWN0IGl4Z2JldmZfcmluZyAqdHhfcmluZyA9IE5VTEwsICpyeF9yaW5nID0gTlVMTDtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2l4Z2JldmYvZXRodG9vbC5jLTI1NS1cdHUzMiBuZXdfcnhfY291bnQsIG5ld190eF9jb3VudDtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9peGdiZXZmL2V0aHRvb2wuYy0zMDItXHRcdFx0dHhfcmluZ1tpXS5jb3VudCA9IG5ld190eF9jb3VudDtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2l4Z2JldmYvZXRodG9vbC5jOjMwMzpcdFx0XHRlcnIgPSBpeGdiZXZmX3NldHVwX3R4X3Jlc291cmNlcyhcdTAwMjZ0eF9yaW5nW2ldKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2l4Z2JldmYvZXRodG9vbC5jLTMwNC1cdFx0XHRpZiAoZXJyKSB7XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaXhnYmV2Zi9ldGh0b29sLmMtMzA2LVx0XHRcdFx0XHRpLS07XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9peGdiZXZmL2V0aHRvb2wuYzozMDc6XHRcdFx0XHRcdGl4Z2JldmZfZnJlZV90eF9yZXNvdXJjZXMoXHUwMDI2dHhfcmluZ1tpXSk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9peGdiZXZmL2V0aHRvb2wuYy0zMDgtXHRcdFx0XHR9XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaXhnYmV2Zi9ldGh0b29sLmMtMzIwLVx0XHRcdHR4X3JpbmdbaV0uY291bnQgPSBuZXdfdHhfY291bnQ7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9peGdiZXZmL2V0aHRvb2wuYzozMjE6XHRcdFx0ZXJyID0gaXhnYmV2Zl9zZXR1cF90eF9yZXNvdXJjZXMoXHUwMDI2dHhfcmluZ1tpXSk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9peGdiZXZmL2V0aHRvb2wuYy0zMjItXHRcdFx0aWYgKGVycikge1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2l4Z2JldmYvZXRodG9vbC5jLTMyNC1cdFx0XHRcdFx0aS0tO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaXhnYmV2Zi9ldGh0b29sLmM6MzI1Olx0XHRcdFx0XHRpeGdiZXZmX2ZyZWVfdHhfcmVzb3VyY2VzKFx1MDAyNnR4X3JpbmdbaV0pO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaXhnYmV2Zi9ldGh0b29sLmMtMzI2LVx0XHRcdFx0fVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2l4Z2JldmYvZXRodG9vbC5jLTM1Mi1cdFx0XHRyeF9yaW5nW2ldLmNvdW50ID0gbmV3X3J4X2NvdW50O1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaXhnYmV2Zi9ldGh0b29sLmM6MzUzOlx0XHRcdGVyciA9IGl4Z2JldmZfc2V0dXBfcnhfcmVzb3VyY2VzKGFkYXB0ZXIsIFx1MDAyNnJ4X3JpbmdbaV0pO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaXhnYmV2Zi9ldGh0b29sLmMtMzU0LVx0XHRcdGlmIChlcnIpIHtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9peGdiZXZmL2V0aHRvb2wuYy0zNTYtXHRcdFx0XHRcdGktLTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2l4Z2JldmYvZXRodG9vbC5jOjM1NzpcdFx0XHRcdFx0aXhnYmV2Zl9mcmVlX3J4X3Jlc291cmNlcyhcdTAwMjZyeF9yaW5nW2ldKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2l4Z2JldmYvZXRodG9vbC5jLTM1OC1cdFx0XHRcdH1cbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9peGdiZXZmL2V0aHRvb2wuYy0zNjgtXHQvKiBicmluZyBpbnRlcmZhY2UgZG93biB0byBwcmVwYXJlIGZvciB1cGRhdGUgKi9cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2l4Z2JldmYvZXRodG9vbC5jOjM2OTpcdGl4Z2JldmZfZG93bihhZGFwdGVyKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2l4Z2JldmYvZXRodG9vbC5jLTM3MC1cbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9peGdiZXZmL2V0aHRvb2wuYy0zNzMtXHRcdGZvciAoaSA9IDA7IGkgXHUwMDNjIGFkYXB0ZXItXHUwMDNlbnVtX3R4X3F1ZXVlczsgaSYjNDM7JiM0MzspIHtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2l4Z2JldmYvZXRodG9vbC5jOjM3NDpcdFx0XHRpeGdiZXZmX2ZyZWVfdHhfcmVzb3VyY2VzKGFkYXB0ZXItXHUwMDNldHhfcmluZ1tpXSk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9peGdiZXZmL2V0aHRvb2wuYy0zNzUtXHRcdFx0KmFkYXB0ZXItXHUwMDNldHhfcmluZ1tpXSA9IHR4X3JpbmdbaV07XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaXhnYmV2Zi9ldGh0b29sLmMtMzc5LVx0XHRmb3IgKGogPSAwOyBqIFx1MDAzYyBhZGFwdGVyLVx1MDAzZW51bV94ZHBfcXVldWVzOyBpJiM0MzsmIzQzOywgaiYjNDM7JiM0MzspIHtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2l4Z2JldmYvZXRodG9vbC5jOjM4MDpcdFx0XHRpeGdiZXZmX2ZyZWVfdHhfcmVzb3VyY2VzKGFkYXB0ZXItXHUwMDNleGRwX3Jpbmdbal0pO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaXhnYmV2Zi9ldGh0b29sLmMtMzgxLVx0XHRcdCphZGFwdGVyLVx1MDAzZXhkcF9yaW5nW2pdID0gdHhfcmluZ1tpXTtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9peGdiZXZmL2V0aHRvb2wuYy0zOTEtXHRcdGZvciAoaSA9IDA7IGkgXHUwMDNjIGFkYXB0ZXItXHUwMDNlbnVtX3J4X3F1ZXVlczsgaSYjNDM7JiM0MzspIHtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2l4Z2JldmYvZXRodG9vbC5jOjM5MjpcdFx0XHRpeGdiZXZmX2ZyZWVfcnhfcmVzb3VyY2VzKGFkYXB0ZXItXHUwMDNlcnhfcmluZ1tpXSk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9peGdiZXZmL2V0aHRvb2wuYy0zOTMtXHRcdFx0KmFkYXB0ZXItXHUwMDNlcnhfcmluZ1tpXSA9IHJ4X3JpbmdbaV07XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaXhnYmV2Zi9ldGh0b29sLmMtNDAxLVx0LyogcmVzdG9yZSBpbnRlcmZhY2UgdXNpbmcgbmV3IHZhbHVlcyAqL1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaXhnYmV2Zi9ldGh0b29sLmM6NDAyOlx0aXhnYmV2Zl91cChhZGFwdGVyKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2l4Z2JldmYvZXRodG9vbC5jLTQwMy1cbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9peGdiZXZmL2V0aHRvb2wuYy00MDgtXHRcdCAgICAgaSBcdTAwM2MgYWRhcHRlci1cdTAwM2VudW1fdHhfcXVldWVzICYjNDM7IGFkYXB0ZXItXHUwMDNlbnVtX3hkcF9xdWV1ZXM7IGkmIzQzOyYjNDM7KVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaXhnYmV2Zi9ldGh0b29sLmM6NDA5Olx0XHRcdGl4Z2JldmZfZnJlZV90eF9yZXNvdXJjZXMoXHUwMDI2dHhfcmluZ1tpXSk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9peGdiZXZmL2V0aHRvb2wuYy00MTAtXHRcdHZmcmVlKHR4X3JpbmcpO1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2l4Z2JldmYvZXRodG9vbC5jLTQxNi1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2l4Z2JldmYvZXRodG9vbC5jOjQxNzpzdGF0aWMgaW50IGl4Z2JldmZfZ2V0X3NzZXRfY291bnQoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwgaW50IHN0cmluZ3NldClcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2l4Z2JldmYvZXRodG9vbC5jLTQxOC17XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaXhnYmV2Zi9ldGh0b29sLmMtNDMwLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaXhnYmV2Zi9ldGh0b29sLmM6NDMxOnN0YXRpYyB2b2lkIGl4Z2JldmZfZ2V0X2V0aHRvb2xfc3RhdHMoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldixcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2l4Z2JldmYvZXRodG9vbC5jLTQzMi1cdFx0XHRcdCAgICAgIHN0cnVjdCBldGh0b29sX3N0YXRzICpzdGF0cywgdTY0ICpkYXRhKVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaXhnYmV2Zi9ldGh0b29sLmMtNDMzLXtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2l4Z2JldmYvZXRodG9vbC5jOjQzNDpcdHN0cnVjdCBpeGdiZXZmX2FkYXB0ZXIgKmFkYXB0ZXIgPSBuZXRkZXZfcHJpdihuZXRkZXYpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaXhnYmV2Zi9ldGh0b29sLmMtNDM1LVx0c3RydWN0IHJ0bmxfbGlua19zdGF0czY0IHRlbXA7XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaXhnYmV2Zi9ldGh0b29sLmMtNDM3LVx0dW5zaWduZWQgaW50IHN0YXJ0O1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaXhnYmV2Zi9ldGh0b29sLmM6NDM4Olx0c3RydWN0IGl4Z2JldmZfcmluZyAqcmluZztcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2l4Z2JldmYvZXRodG9vbC5jLTQzOS1cdGludCBpLCBqO1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2l4Z2JldmYvZXRodG9vbC5jLTQ0MS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2l4Z2JldmYvZXRodG9vbC5jOjQ0MjpcdGl4Z2JldmZfdXBkYXRlX3N0YXRzKGFkYXB0ZXIpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaXhnYmV2Zi9ldGh0b29sLmMtNDQzLVx0bmV0X3N0YXRzID0gZGV2X2dldF9zdGF0cyhuZXRkZXYsIFx1MDAyNnRlbXApO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaXhnYmV2Zi9ldGh0b29sLmMtNDQ0LVx0Zm9yIChpID0gMDsgaSBcdTAwM2MgSVhHQkVWRl9HTE9CQUxfU1RBVFNfTEVOOyBpJiM0MzsmIzQzOykge1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaXhnYmV2Zi9ldGh0b29sLmM6NDQ1Olx0XHRzd2l0Y2ggKGl4Z2JldmZfZ3N0cmluZ3Nfc3RhdHNbaV0udHlwZSkge1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaXhnYmV2Zi9ldGh0b29sLmMtNDQ2LVx0XHRjYXNlIE5FVERFVl9TVEFUUzpcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2l4Z2JldmYvZXRodG9vbC5jLTQ0Ny1cdFx0XHRwID0gKGNoYXIgKiluZXRfc3RhdHMgJiM0MztcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2l4Z2JldmYvZXRodG9vbC5jOjQ0ODpcdFx0XHRcdFx0aXhnYmV2Zl9nc3RyaW5nc19zdGF0c1tpXS5zdGF0X29mZnNldDtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2l4Z2JldmYvZXRodG9vbC5jLTQ0OS1cdFx0XHRicmVhaztcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9peGdiZXZmL2V0aHRvb2wuYy00NTEtXHRcdFx0cCA9IChjaGFyICopYWRhcHRlciAmIzQzO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaXhnYmV2Zi9ldGh0b29sLmM6NDUyOlx0XHRcdFx0XHRpeGdiZXZmX2dzdHJpbmdzX3N0YXRzW2ldLnN0YXRfb2Zmc2V0O1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaXhnYmV2Zi9ldGh0b29sLmMtNDUzLVx0XHRcdGJyZWFrO1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2l4Z2JldmYvZXRodG9vbC5jLTQ1OC1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2l4Z2JldmYvZXRodG9vbC5jOjQ1OTpcdFx0ZGF0YVtpXSA9IChpeGdiZXZmX2dzdHJpbmdzX3N0YXRzW2ldLnNpemVvZl9zdGF0ID09XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9peGdiZXZmL2V0aHRvb2wuYy00NjAtXHRcdFx0ICAgc2l6ZW9mKHU2NCkpID8gKih1NjQgKilwIDogKih1MzIgKilwO1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2l4Z2JldmYvZXRodG9vbC5jLTUxNC1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2l4Z2JldmYvZXRodG9vbC5jOjUxNTpzdGF0aWMgdm9pZCBpeGdiZXZmX2dldF9zdHJpbmdzKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsIHUzMiBzdHJpbmdzZXQsXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9peGdiZXZmL2V0aHRvb2wuYy01MTYtXHRcdFx0XHR1OCAqZGF0YSlcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2l4Z2JldmYvZXRodG9vbC5jLTUxNy17XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9peGdiZXZmL2V0aHRvb2wuYzo1MTg6XHRzdHJ1Y3QgaXhnYmV2Zl9hZGFwdGVyICphZGFwdGVyID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2l4Z2JldmYvZXRodG9vbC5jLTUxOS1cdGNoYXIgKnAgPSAoY2hhciAqKWRhdGE7XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaXhnYmV2Zi9ldGh0b29sLmMtNTI4LVx0XHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBJWEdCRVZGX0dMT0JBTF9TVEFUU19MRU47IGkmIzQzOyYjNDM7KSB7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9peGdiZXZmL2V0aHRvb2wuYzo1Mjk6XHRcdFx0bWVtY3B5KHAsIGl4Z2JldmZfZ3N0cmluZ3Nfc3RhdHNbaV0uc3RhdF9zdHJpbmcsXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9peGdiZXZmL2V0aHRvb2wuYy01MzAtXHRcdFx0ICAgICAgIEVUSF9HU1RSSU5HX0xFTik7XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaXhnYmV2Zi9ldGh0b29sLmMtNTUzLVx0Y2FzZSBFVEhfU1NfUFJJVl9GTEFHUzpcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2l4Z2JldmYvZXRodG9vbC5jOjU1NDpcdFx0bWVtY3B5KGRhdGEsIGl4Z2JldmZfcHJpdl9mbGFnc19zdHJpbmdzLFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaXhnYmV2Zi9ldGh0b29sLmMtNTU1LVx0XHQgICAgICAgSVhHQkVWRl9QUklWX0ZMQUdTX1NUUl9MRU4gKiBFVEhfR1NUUklOR19MRU4pO1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2l4Z2JldmYvZXRodG9vbC5jLTU1OS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2l4Z2JldmYvZXRodG9vbC5jOjU2MDpzdGF0aWMgaW50IGl4Z2JldmZfbGlua190ZXN0KHN0cnVjdCBpeGdiZXZmX2FkYXB0ZXIgKmFkYXB0ZXIsIHU2NCAqZGF0YSlcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2l4Z2JldmYvZXRodG9vbC5jLTU2MS17XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaXhnYmV2Zi9ldGh0b29sLmMtNTc0LS8qIGV0aHRvb2wgcmVnaXN0ZXIgdGVzdCBkYXRhICovXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9peGdiZXZmL2V0aHRvb2wuYzo1NzU6c3RydWN0IGl4Z2JldmZfcmVnX3Rlc3Qge1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaXhnYmV2Zi9ldGh0b29sLmMtNTc2LVx0dTE2IHJlZztcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9peGdiZXZmL2V0aHRvb2wuYy02MDAtLyogZGVmYXVsdCBWRiByZWdpc3RlciB0ZXN0ICovXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9peGdiZXZmL2V0aHRvb2wuYzo2MDE6c3RhdGljIGNvbnN0IHN0cnVjdCBpeGdiZXZmX3JlZ190ZXN0IHJlZ190ZXN0X3ZmW10gPSB7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9peGdiZXZmL2V0aHRvb2wuYy02MDItXHR7IElYR0JFX1ZGUkRCQUwoMCksIDIsIFBBVFRFUk5fVEVTVCwgMHhGRkZGRkY4MCwgMHhGRkZGRkY4MCB9LFxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2l4Z2JldmYvZXRodG9vbC5jPTYxND1zdGF0aWMgY29uc3QgdTMyIHJlZ2lzdGVyX3Rlc3RfcGF0dGVybnNbXSA9IHtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9peGdiZXZmL2V0aHRvb2wuYy02MTctXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9peGdiZXZmL2V0aHRvb2wuYzo2MTg6c3RhdGljIGJvb2wgcmVnX3BhdHRlcm5fdGVzdChzdHJ1Y3QgaXhnYmV2Zl9hZGFwdGVyICphZGFwdGVyLCB1NjQgKmRhdGEsXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9peGdiZXZmL2V0aHRvb2wuYy02MTktXHRcdFx0ICAgICBpbnQgcmVnLCB1MzIgbWFzaywgdTMyIHdyaXRlKVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2l4Z2JldmYvZXRodG9vbC5jLTYyNy1cdGZvciAocGF0ID0gMDsgcGF0IFx1MDAzYyBBUlJBWV9TSVpFKHJlZ2lzdGVyX3Rlc3RfcGF0dGVybnMpOyBwYXQmIzQzOyYjNDM7KSB7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9peGdiZXZmL2V0aHRvb2wuYzo2Mjg6XHRcdGJlZm9yZSA9IGl4Z2JldmZfcmVhZF9yZWcoXHUwMDI2YWRhcHRlci1cdTAwM2VodywgcmVnKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2l4Z2JldmYvZXRodG9vbC5jLTYyOS1cdFx0aXhnYmVfd3JpdGVfcmVnKFx1MDAyNmFkYXB0ZXItXHUwMDNlaHcsIHJlZyxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2l4Z2JldmYvZXRodG9vbC5jLTYzMC1cdFx0XHRcdHJlZ2lzdGVyX3Rlc3RfcGF0dGVybnNbcGF0XSBcdTAwMjYgd3JpdGUpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaXhnYmV2Zi9ldGh0b29sLmM6NjMxOlx0XHR2YWwgPSBpeGdiZXZmX3JlYWRfcmVnKFx1MDAyNmFkYXB0ZXItXHUwMDNlaHcsIHJlZyk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9peGdiZXZmL2V0aHRvb2wuYy02MzItXHRcdGlmICh2YWwgIT0gKHJlZ2lzdGVyX3Rlc3RfcGF0dGVybnNbcGF0XSBcdTAwMjYgd3JpdGUgXHUwMDI2IG1hc2spKSB7XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaXhnYmV2Zi9ldGh0b29sLmMtNjQ1LVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaXhnYmV2Zi9ldGh0b29sLmM6NjQ2OnN0YXRpYyBib29sIHJlZ19zZXRfYW5kX2NoZWNrKHN0cnVjdCBpeGdiZXZmX2FkYXB0ZXIgKmFkYXB0ZXIsIHU2NCAqZGF0YSxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2l4Z2JldmYvZXRodG9vbC5jLTY0Ny1cdFx0XHQgICAgICBpbnQgcmVnLCB1MzIgbWFzaywgdTMyIHdyaXRlKVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2l4Z2JldmYvZXRodG9vbC5jLTY1NC1cdH1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2l4Z2JldmYvZXRodG9vbC5jOjY1NTpcdGJlZm9yZSA9IGl4Z2JldmZfcmVhZF9yZWcoXHUwMDI2YWRhcHRlci1cdTAwM2VodywgcmVnKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2l4Z2JldmYvZXRodG9vbC5jLTY1Ni1cdGl4Z2JlX3dyaXRlX3JlZyhcdTAwMjZhZGFwdGVyLVx1MDAzZWh3LCByZWcsIHdyaXRlIFx1MDAyNiBtYXNrKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2l4Z2JldmYvZXRodG9vbC5jOjY1NzpcdHZhbCA9IGl4Z2JldmZfcmVhZF9yZWcoXHUwMDI2YWRhcHRlci1cdTAwM2VodywgcmVnKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2l4Z2JldmYvZXRodG9vbC5jLTY1OC1cdGlmICgod3JpdGUgXHUwMDI2IG1hc2spICE9ICh2YWwgXHUwMDI2IG1hc2spKSB7XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaXhnYmV2Zi9ldGh0b29sLmMtNjY4LVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaXhnYmV2Zi9ldGh0b29sLmM6NjY5OnN0YXRpYyBpbnQgaXhnYmV2Zl9yZWdfdGVzdChzdHJ1Y3QgaXhnYmV2Zl9hZGFwdGVyICphZGFwdGVyLCB1NjQgKmRhdGEpXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9peGdiZXZmL2V0aHRvb2wuYy02NzAte1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaXhnYmV2Zi9ldGh0b29sLmM6NjcxOlx0Y29uc3Qgc3RydWN0IGl4Z2JldmZfcmVnX3Rlc3QgKnRlc3Q7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9peGdiZXZmL2V0aHRvb2wuYy02NzItXHR1MzIgaTtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9peGdiZXZmL2V0aHRvb2wuYy03MzUtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9peGdiZXZmL2V0aHRvb2wuYzo3MzY6c3RhdGljIHZvaWQgaXhnYmV2Zl9kaWFnX3Rlc3Qoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldixcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2l4Z2JldmYvZXRodG9vbC5jLTczNy1cdFx0XHQgICAgICBzdHJ1Y3QgZXRodG9vbF90ZXN0ICpldGhfdGVzdCwgdTY0ICpkYXRhKVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaXhnYmV2Zi9ldGh0b29sLmMtNzM4LXtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2l4Z2JldmYvZXRodG9vbC5jOjczOTpcdHN0cnVjdCBpeGdiZXZmX2FkYXB0ZXIgKmFkYXB0ZXIgPSBuZXRkZXZfcHJpdihuZXRkZXYpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaXhnYmV2Zi9ldGh0b29sLmMtNzQwLVx0Ym9vbCBpZl9ydW5uaW5nID0gbmV0aWZfcnVubmluZyhuZXRkZXYpO1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2l4Z2JldmYvZXRodG9vbC5jLTc1OC1cdFx0ICovXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9peGdiZXZmL2V0aHRvb2wuYzo3NTk6XHRcdGlmIChpeGdiZXZmX2xpbmtfdGVzdChhZGFwdGVyLCBcdTAwMjZkYXRhWzFdKSlcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2l4Z2JldmYvZXRodG9vbC5jLTc2MC1cdFx0XHRldGhfdGVzdC1cdTAwM2VmbGFncyB8PSBFVEhfVEVTVF9GTF9GQUlMRUQ7XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaXhnYmV2Zi9ldGh0b29sLmMtNzYzLVx0XHRcdC8qIGluZGljYXRlIHdlJiMzOTtyZSBpbiB0ZXN0IG1vZGUgKi9cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2l4Z2JldmYvZXRodG9vbC5jOjc2NDpcdFx0XHRpeGdiZXZmX2Nsb3NlKG5ldGRldik7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9peGdiZXZmL2V0aHRvb2wuYy03NjUtXHRcdGVsc2VcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2l4Z2JldmYvZXRodG9vbC5jOjc2NjpcdFx0XHRpeGdiZXZmX3Jlc2V0KGFkYXB0ZXIpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaXhnYmV2Zi9ldGh0b29sLmMtNzY3LVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaXhnYmV2Zi9ldGh0b29sLmMtNzY4LVx0XHRod19kYmcoXHUwMDI2YWRhcHRlci1cdTAwM2VodywgXCYjMzQ7cmVnaXN0ZXIgdGVzdGluZyBzdGFydGluZ1xcblwmIzM0Oyk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9peGdiZXZmL2V0aHRvb2wuYzo3Njk6XHRcdGlmIChpeGdiZXZmX3JlZ190ZXN0KGFkYXB0ZXIsIFx1MDAyNmRhdGFbMF0pKVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaXhnYmV2Zi9ldGh0b29sLmMtNzcwLVx0XHRcdGV0aF90ZXN0LVx1MDAzZWZsYWdzIHw9IEVUSF9URVNUX0ZMX0ZBSUxFRDtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2l4Z2JldmYvZXRodG9vbC5jLTc3MS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2l4Z2JldmYvZXRodG9vbC5jOjc3MjpcdFx0aXhnYmV2Zl9yZXNldChhZGFwdGVyKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2l4Z2JldmYvZXRodG9vbC5jLTc3My1cbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9peGdiZXZmL2V0aHRvb2wuYy03NzUtXHRcdGlmIChpZl9ydW5uaW5nKVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaXhnYmV2Zi9ldGh0b29sLmM6Nzc2Olx0XHRcdGl4Z2JldmZfb3BlbihuZXRkZXYpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaXhnYmV2Zi9ldGh0b29sLmMtNzc3LVx0fSBlbHNlIHtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9peGdiZXZmL2V0aHRvb2wuYy03NzktXHRcdC8qIE9ubGluZSB0ZXN0cyAqL1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaXhnYmV2Zi9ldGh0b29sLmM6NzgwOlx0XHRpZiAoaXhnYmV2Zl9saW5rX3Rlc3QoYWRhcHRlciwgXHUwMDI2ZGF0YVsxXSkpXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9peGdiZXZmL2V0aHRvb2wuYy03ODEtXHRcdFx0ZXRoX3Rlc3QtXHUwMDNlZmxhZ3MgfD0gRVRIX1RFU1RfRkxfRkFJTEVEO1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2l4Z2JldmYvZXRodG9vbC5jLTc5MC1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2l4Z2JldmYvZXRodG9vbC5jOjc5MTpzdGF0aWMgaW50IGl4Z2JldmZfbndheV9yZXNldChzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2KVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaXhnYmV2Zi9ldGh0b29sLmMtNzkyLXtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2l4Z2JldmYvZXRodG9vbC5jOjc5MzpcdHN0cnVjdCBpeGdiZXZmX2FkYXB0ZXIgKmFkYXB0ZXIgPSBuZXRkZXZfcHJpdihuZXRkZXYpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaXhnYmV2Zi9ldGh0b29sLmMtNzk0LVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaXhnYmV2Zi9ldGh0b29sLmMtNzk1LVx0aWYgKG5ldGlmX3J1bm5pbmcobmV0ZGV2KSlcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2l4Z2JldmYvZXRodG9vbC5jOjc5NjpcdFx0aXhnYmV2Zl9yZWluaXRfbG9ja2VkKGFkYXB0ZXIpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaXhnYmV2Zi9ldGh0b29sLmMtNzk3LVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2l4Z2JldmYvZXRodG9vbC5jLTgwMC1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2l4Z2JldmYvZXRodG9vbC5jOjgwMTpzdGF0aWMgaW50IGl4Z2JldmZfZ2V0X2NvYWxlc2NlKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9peGdiZXZmL2V0aHRvb2wuYy04MDItXHRcdFx0XHRzdHJ1Y3QgZXRodG9vbF9jb2FsZXNjZSAqZWMsXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaXhnYmV2Zi9ldGh0b29sLmMtODA1LXtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2l4Z2JldmYvZXRodG9vbC5jOjgwNjpcdHN0cnVjdCBpeGdiZXZmX2FkYXB0ZXIgKmFkYXB0ZXIgPSBuZXRkZXZfcHJpdihuZXRkZXYpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaXhnYmV2Zi9ldGh0b29sLmMtODA3LVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2l4Z2JldmYvZXRodG9vbC5jLTgyNi1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2l4Z2JldmYvZXRodG9vbC5jOjgyNzpzdGF0aWMgaW50IGl4Z2JldmZfc2V0X2NvYWxlc2NlKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9peGdiZXZmL2V0aHRvb2wuYy04MjgtXHRcdFx0XHRzdHJ1Y3QgZXRodG9vbF9jb2FsZXNjZSAqZWMsXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaXhnYmV2Zi9ldGh0b29sLmMtODMxLXtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2l4Z2JldmYvZXRodG9vbC5jOjgzMjpcdHN0cnVjdCBpeGdiZXZmX2FkYXB0ZXIgKmFkYXB0ZXIgPSBuZXRkZXZfcHJpdihuZXRkZXYpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaXhnYmV2Zi9ldGh0b29sLmM6ODMzOlx0c3RydWN0IGl4Z2JldmZfcV92ZWN0b3IgKnFfdmVjdG9yO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaXhnYmV2Zi9ldGh0b29sLmMtODM0LVx0aW50IG51bV92ZWN0b3JzLCBpO1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2l4Z2JldmYvZXRodG9vbC5jLTg3NS1cdFx0XHRxX3ZlY3Rvci1cdTAwM2VpdHIgPSByeF9pdHJfcGFyYW07XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9peGdiZXZmL2V0aHRvb2wuYzo4NzY6XHRcdGl4Z2JldmZfd3JpdGVfZWl0cihxX3ZlY3Rvcik7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9peGdiZXZmL2V0aHRvb2wuYy04NzctXHR9XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaXhnYmV2Zi9ldGh0b29sLmMtODgxLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaXhnYmV2Zi9ldGh0b29sLmM6ODgyOnN0YXRpYyB1MzIgaXhnYmV2Zl9nZXRfcnhfcmluZ19jb3VudChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaXhnYmV2Zi9ldGh0b29sLmMtODgzLXtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2l4Z2JldmYvZXRodG9vbC5jOjg4NDpcdHN0cnVjdCBpeGdiZXZmX2FkYXB0ZXIgKmFkYXB0ZXIgPSBuZXRkZXZfcHJpdihkZXYpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaXhnYmV2Zi9ldGh0b29sLmMtODg1LVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2l4Z2JldmYvZXRodG9vbC5jLTg4OC1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2l4Z2JldmYvZXRodG9vbC5jOjg4OTpzdGF0aWMgdTMyIGl4Z2JldmZfZ2V0X3J4ZmhfaW5kaXJfc2l6ZShzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2KVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaXhnYmV2Zi9ldGh0b29sLmMtODkwLXtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2l4Z2JldmYvZXRodG9vbC5jOjg5MTpcdHN0cnVjdCBpeGdiZXZmX2FkYXB0ZXIgKmFkYXB0ZXIgPSBuZXRkZXZfcHJpdihuZXRkZXYpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaXhnYmV2Zi9ldGh0b29sLmMtODkyLVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2l4Z2JldmYvZXRodG9vbC5jLTg5OC1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2l4Z2JldmYvZXRodG9vbC5jOjg5OTpzdGF0aWMgdTMyIGl4Z2JldmZfZ2V0X3J4Zmhfa2V5X3NpemUoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldilcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2l4Z2JldmYvZXRodG9vbC5jLTkwMC17XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaXhnYmV2Zi9ldGh0b29sLmMtOTAzLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaXhnYmV2Zi9ldGh0b29sLmM6OTA0OnN0YXRpYyBpbnQgaXhnYmV2Zl9nZXRfcnhmaChzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaXhnYmV2Zi9ldGh0b29sLmMtOTA1LVx0XHRcdCAgICBzdHJ1Y3QgZXRodG9vbF9yeGZoX3BhcmFtICpyeGZoKVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaXhnYmV2Zi9ldGh0b29sLmMtOTA2LXtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2l4Z2JldmYvZXRodG9vbC5jOjkwNzpcdHN0cnVjdCBpeGdiZXZmX2FkYXB0ZXIgKmFkYXB0ZXIgPSBuZXRkZXZfcHJpdihuZXRkZXYpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaXhnYmV2Zi9ldGh0b29sLmMtOTA4LVx0aW50IGVyciA9IDA7XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaXhnYmV2Zi9ldGh0b29sLmMtOTE0LVx0XHRcdG1lbWNweShyeGZoLVx1MDAzZWtleSwgYWRhcHRlci1cdTAwM2Vyc3Nfa2V5LFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaXhnYmV2Zi9ldGh0b29sLmM6OTE1Olx0XHRcdCAgICAgICBpeGdiZXZmX2dldF9yeGZoX2tleV9zaXplKG5ldGRldikpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaXhnYmV2Zi9ldGh0b29sLmMtOTE2LVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2l4Z2JldmYvZXRodG9vbC5jLTkzMS1cdFx0aWYgKHJ4ZmgtXHUwMDNlaW5kaXIpXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9peGdiZXZmL2V0aHRvb2wuYzo5MzI6XHRcdFx0ZXJyID0gaXhnYmV2Zl9nZXRfcmV0YV9sb2NrZWQoXHUwMDI2YWRhcHRlci1cdTAwM2VodyxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2l4Z2JldmYvZXRodG9vbC5jLTkzMy1cdFx0XHRcdFx0XHQgICAgICByeGZoLVx1MDAzZWluZGlyLFxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2l4Z2JldmYvZXRodG9vbC5jLTkzNi1cdFx0aWYgKCFlcnIgXHUwMDI2XHUwMDI2IHJ4ZmgtXHUwMDNla2V5KVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaXhnYmV2Zi9ldGh0b29sLmM6OTM3Olx0XHRcdGVyciA9IGl4Z2JldmZfZ2V0X3Jzc19rZXlfbG9ja2VkKFx1MDAyNmFkYXB0ZXItXHUwMDNlaHcsXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9peGdiZXZmL2V0aHRvb2wuYy05MzgtXHRcdFx0XHRcdFx0XHQgcnhmaC1cdTAwM2VrZXkpO1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2l4Z2JldmYvZXRodG9vbC5jLTk0NS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2l4Z2JldmYvZXRodG9vbC5jOjk0NjpzdGF0aWMgdTMyIGl4Z2JldmZfZ2V0X3ByaXZfZmxhZ3Moc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldilcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2l4Z2JldmYvZXRodG9vbC5jLTk0Ny17XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9peGdiZXZmL2V0aHRvb2wuYzo5NDg6XHRzdHJ1Y3QgaXhnYmV2Zl9hZGFwdGVyICphZGFwdGVyID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2l4Z2JldmYvZXRodG9vbC5jLTk0OS1cdHUzMiBwcml2X2ZsYWdzID0gMDtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9peGdiZXZmL2V0aHRvb2wuYy05NTYtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9peGdiZXZmL2V0aHRvb2wuYzo5NTc6c3RhdGljIGludCBpeGdiZXZmX3NldF9wcml2X2ZsYWdzKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsIHUzMiBwcml2X2ZsYWdzKVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaXhnYmV2Zi9ldGh0b29sLmMtOTU4LXtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2l4Z2JldmYvZXRodG9vbC5jOjk1OTpcdHN0cnVjdCBpeGdiZXZmX2FkYXB0ZXIgKmFkYXB0ZXIgPSBuZXRkZXZfcHJpdihuZXRkZXYpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaXhnYmV2Zi9ldGh0b29sLmMtOTYwLVx0dW5zaWduZWQgaW50IGZsYWdzID0gYWRhcHRlci1cdTAwM2VmbGFncztcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9peGdiZXZmL2V0aHRvb2wuYy05NzAtXHRcdGlmIChuZXRpZl9ydW5uaW5nKG5ldGRldikpXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9peGdiZXZmL2V0aHRvb2wuYzo5NzE6XHRcdFx0aXhnYmV2Zl9yZWluaXRfbG9ja2VkKGFkYXB0ZXIpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaXhnYmV2Zi9ldGh0b29sLmMtOTcyLVx0fVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2l4Z2JldmYvZXRodG9vbC5jLTk3Ni1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2l4Z2JldmYvZXRodG9vbC5jOjk3NzpzdGF0aWMgY29uc3Qgc3RydWN0IGV0aHRvb2xfb3BzIGl4Z2JldmZfZXRodG9vbF9vcHMgPSB7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9peGdiZXZmL2V0aHRvb2wuYy05NzgtXHQuc3VwcG9ydGVkX2NvYWxlc2NlX3BhcmFtcyA9IEVUSFRPT0xfQ09BTEVTQ0VfVVNFQ1MsXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9peGdiZXZmL2V0aHRvb2wuYzo5Nzk6XHQuZ2V0X2RydmluZm9cdFx0PSBpeGdiZXZmX2dldF9kcnZpbmZvLFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaXhnYmV2Zi9ldGh0b29sLmM6OTgwOlx0LmdldF9yZWdzX2xlblx0XHQ9IGl4Z2JldmZfZ2V0X3JlZ3NfbGVuLFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaXhnYmV2Zi9ldGh0b29sLmM6OTgxOlx0LmdldF9yZWdzXHRcdD0gaXhnYmV2Zl9nZXRfcmVncyxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2l4Z2JldmYvZXRodG9vbC5jOjk4MjpcdC5ud2F5X3Jlc2V0XHRcdD0gaXhnYmV2Zl9ud2F5X3Jlc2V0LFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaXhnYmV2Zi9ldGh0b29sLmMtOTgzLVx0LmdldF9saW5rXHRcdD0gZXRodG9vbF9vcF9nZXRfbGluayxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2l4Z2JldmYvZXRodG9vbC5jOjk4NDpcdC5nZXRfcmluZ3BhcmFtXHRcdD0gaXhnYmV2Zl9nZXRfcmluZ3BhcmFtLFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaXhnYmV2Zi9ldGh0b29sLmM6OTg1Olx0LnNldF9yaW5ncGFyYW1cdFx0PSBpeGdiZXZmX3NldF9yaW5ncGFyYW0sXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9peGdiZXZmL2V0aHRvb2wuYzo5ODY6XHQuZ2V0X21zZ2xldmVsXHRcdD0gaXhnYmV2Zl9nZXRfbXNnbGV2ZWwsXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9peGdiZXZmL2V0aHRvb2wuYzo5ODc6XHQuc2V0X21zZ2xldmVsXHRcdD0gaXhnYmV2Zl9zZXRfbXNnbGV2ZWwsXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9peGdiZXZmL2V0aHRvb2wuYzo5ODg6XHQuc2VsZl90ZXN0XHRcdD0gaXhnYmV2Zl9kaWFnX3Rlc3QsXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9peGdiZXZmL2V0aHRvb2wuYzo5ODk6XHQuZ2V0X3NzZXRfY291bnRcdFx0PSBpeGdiZXZmX2dldF9zc2V0X2NvdW50LFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaXhnYmV2Zi9ldGh0b29sLmM6OTkwOlx0LmdldF9zdHJpbmdzXHRcdD0gaXhnYmV2Zl9nZXRfc3RyaW5ncyxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2l4Z2JldmYvZXRodG9vbC5jOjk5MTpcdC5nZXRfZXRodG9vbF9zdGF0c1x0PSBpeGdiZXZmX2dldF9ldGh0b29sX3N0YXRzLFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaXhnYmV2Zi9ldGh0b29sLmM6OTkyOlx0LmdldF9jb2FsZXNjZVx0XHQ9IGl4Z2JldmZfZ2V0X2NvYWxlc2NlLFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaXhnYmV2Zi9ldGh0b29sLmM6OTkzOlx0LnNldF9jb2FsZXNjZVx0XHQ9IGl4Z2JldmZfc2V0X2NvYWxlc2NlLFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaXhnYmV2Zi9ldGh0b29sLmM6OTk0Olx0LmdldF9yeF9yaW5nX2NvdW50XHQ9IGl4Z2JldmZfZ2V0X3J4X3JpbmdfY291bnQsXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9peGdiZXZmL2V0aHRvb2wuYzo5OTU6XHQuZ2V0X3J4ZmhfaW5kaXJfc2l6ZVx0PSBpeGdiZXZmX2dldF9yeGZoX2luZGlyX3NpemUsXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9peGdiZXZmL2V0aHRvb2wuYzo5OTY6XHQuZ2V0X3J4Zmhfa2V5X3NpemVcdD0gaXhnYmV2Zl9nZXRfcnhmaF9rZXlfc2l6ZSxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2l4Z2JldmYvZXRodG9vbC5jOjk5NzpcdC5nZXRfcnhmaFx0XHQ9IGl4Z2JldmZfZ2V0X3J4ZmgsXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9peGdiZXZmL2V0aHRvb2wuYzo5OTg6XHQuZ2V0X2xpbmtfa3NldHRpbmdzXHQ9IGl4Z2JldmZfZ2V0X2xpbmtfa3NldHRpbmdzLFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaXhnYmV2Zi9ldGh0b29sLmM6OTk5Olx0LmdldF9wcml2X2ZsYWdzXHRcdD0gaXhnYmV2Zl9nZXRfcHJpdl9mbGFncyxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2l4Z2JldmYvZXRodG9vbC5jOjEwMDA6XHQuc2V0X3ByaXZfZmxhZ3NcdFx0PSBpeGdiZXZmX3NldF9wcml2X2ZsYWdzLFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaXhnYmV2Zi9ldGh0b29sLmMtMTAwMS19O1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaXhnYmV2Zi9ldGh0b29sLmMtMTAwMi1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2l4Z2JldmYvZXRodG9vbC5jOjEwMDM6dm9pZCBpeGdiZXZmX3NldF9ldGh0b29sX29wcyhzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2KVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaXhnYmV2Zi9ldGh0b29sLmMtMTAwNC17XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9peGdiZXZmL2V0aHRvb2wuYzoxMDA1Olx0bmV0ZGV2LVx1MDAzZWV0aHRvb2xfb3BzID0gXHUwMDI2aXhnYmV2Zl9ldGh0b29sX29wcztcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2l4Z2JldmYvZXRodG9vbC5jLTEwMDYtfVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2l4Z2JldmYvaXBzZWMuYy0zLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaXhnYmV2Zi9pcHNlYy5jOjQ6I2luY2x1ZGUgXCYjMzQ7aXhnYmV2Zi5oXCYjMzQ7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9peGdiZXZmL2lwc2VjLmMtNS0jaW5jbHVkZSBcdTAwM2NuZXQveGZybS5oXHUwMDNlXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaXhnYmV2Zi9pcHNlYy5jPTk9c3RhdGljIGNvbnN0IGNoYXIgYWVzX2djbV9uYW1lW10gPSBcJiMzNDtyZmM0MTA2KGdjbShhZXMpKVwmIzM0Oztcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9peGdiZXZmL2lwc2VjLmMtMTEtLyoqXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9peGdiZXZmL2lwc2VjLmM6MTI6ICogaXhnYmV2Zl9pcHNlY19zZXRfcGZfc2EgLSBhc2sgdGhlIFBGIHRvIHNldCB1cCBhbiBTQVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaXhnYmV2Zi9pcHNlYy5jLTEzLSAqIEBhZGFwdGVyOiBib2FyZCBwcml2YXRlIHN0cnVjdHVyZVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2l4Z2JldmYvaXBzZWMuYy0xNy0gKiovXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9peGdiZXZmL2lwc2VjLmM6MTg6c3RhdGljIGludCBpeGdiZXZmX2lwc2VjX3NldF9wZl9zYShzdHJ1Y3QgaXhnYmV2Zl9hZGFwdGVyICphZGFwdGVyLFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaXhnYmV2Zi9pcHNlYy5jLTE5LVx0XHRcdFx0ICAgc3RydWN0IHhmcm1fc3RhdGUgKnhzKVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2l4Z2JldmYvaXBzZWMuYy00Mi1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2l4Z2JldmYvaXBzZWMuYzo0MzpcdHJldCA9IGl4Z2JldmZfd3JpdGVfbWJ4KGh3LCBtc2didWYsIElYR0JFX1ZGTUFJTEJPWF9TSVpFKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2l4Z2JldmYvaXBzZWMuYy00NC1cdGlmIChyZXQpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaXhnYmV2Zi9pcHNlYy5jLTQ2LVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaXhnYmV2Zi9pcHNlYy5jOjQ3Olx0cmV0ID0gaXhnYmV2Zl9wb2xsX21ieChodywgbXNnYnVmLCAyKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2l4Z2JldmYvaXBzZWMuYy00OC1cdGlmIChyZXQpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaXhnYmV2Zi9pcHNlYy5jLTYxLS8qKlxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaXhnYmV2Zi9pcHNlYy5jOjYyOiAqIGl4Z2JldmZfaXBzZWNfZGVsX3BmX3NhIC0gYXNrIHRoZSBQRiB0byBkZWxldGUgYW4gU0FcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2l4Z2JldmYvaXBzZWMuYy02My0gKiBAYWRhcHRlcjogYm9hcmQgcHJpdmF0ZSBzdHJ1Y3R1cmVcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9peGdiZXZmL2lwc2VjLmMtNjctICoqL1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaXhnYmV2Zi9pcHNlYy5jOjY4OnN0YXRpYyBpbnQgaXhnYmV2Zl9pcHNlY19kZWxfcGZfc2Eoc3RydWN0IGl4Z2JldmZfYWRhcHRlciAqYWRhcHRlciwgaW50IHBmc2EpXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9peGdiZXZmL2lwc2VjLmMtNjkte1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2l4Z2JldmYvaXBzZWMuYy03OS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2l4Z2JldmYvaXBzZWMuYzo4MDpcdGVyciA9IGl4Z2JldmZfd3JpdGVfbWJ4KGh3LCBtc2didWYsIDIpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaXhnYmV2Zi9pcHNlYy5jLTgxLVx0aWYgKGVycilcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9peGdiZXZmL2lwc2VjLmMtODMtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9peGdiZXZmL2lwc2VjLmM6ODQ6XHRlcnIgPSBpeGdiZXZmX3BvbGxfbWJ4KGh3LCBtc2didWYsIDIpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaXhnYmV2Zi9pcHNlYy5jLTg1LVx0aWYgKGVycilcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9peGdiZXZmL2lwc2VjLmMtOTMtLyoqXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9peGdiZXZmL2lwc2VjLmM6OTQ6ICogaXhnYmV2Zl9pcHNlY19yZXN0b3JlIC0gcmVzdG9yZSB0aGUgSVBzZWMgSFcgc2V0dGluZ3MgYWZ0ZXIgYSByZXNldFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaXhnYmV2Zi9pcHNlYy5jLTk1LSAqIEBhZGFwdGVyOiBib2FyZCBwcml2YXRlIHN0cnVjdHVyZVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2l4Z2JldmYvaXBzZWMuYy0xMDAtICoqL1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaXhnYmV2Zi9pcHNlYy5jOjEwMTp2b2lkIGl4Z2JldmZfaXBzZWNfcmVzdG9yZShzdHJ1Y3QgaXhnYmV2Zl9hZGFwdGVyICphZGFwdGVyKVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaXhnYmV2Zi9pcHNlYy5jLTEwMi17XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9peGdiZXZmL2lwc2VjLmM6MTAzOlx0c3RydWN0IGl4Z2JldmZfaXBzZWMgKmlwc2VjID0gYWRhcHRlci1cdTAwM2VpcHNlYztcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2l4Z2JldmYvaXBzZWMuYy0xMDQtXHRzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2ID0gYWRhcHRlci1cdTAwM2VuZXRkZXY7XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaXhnYmV2Zi9pcHNlYy5jLTExNi1cdFx0aWYgKHItXHUwMDNldXNlZCkge1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaXhnYmV2Zi9pcHNlYy5jOjExNzpcdFx0XHRyZXQgPSBpeGdiZXZmX2lwc2VjX3NldF9wZl9zYShhZGFwdGVyLCByLVx1MDAzZXhzKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2l4Z2JldmYvaXBzZWMuYy0xMTgtXHRcdFx0aWYgKHJldCBcdTAwM2MgMClcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9peGdiZXZmL2lwc2VjLmMtMTIzLVx0XHRpZiAodC1cdTAwM2V1c2VkKSB7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9peGdiZXZmL2lwc2VjLmM6MTI0Olx0XHRcdHJldCA9IGl4Z2JldmZfaXBzZWNfc2V0X3BmX3NhKGFkYXB0ZXIsIHQtXHUwMDNleHMpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaXhnYmV2Zi9pcHNlYy5jLTEyNS1cdFx0XHRpZiAocmV0IFx1MDAzYyAwKVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2l4Z2JldmYvaXBzZWMuYy0xMzItLyoqXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9peGdiZXZmL2lwc2VjLmM6MTMzOiAqIGl4Z2JldmZfaXBzZWNfZmluZF9lbXB0eV9pZHggLSBmaW5kIHRoZSBmaXJzdCB1bnVzZWQgc2VjdXJpdHkgcGFyYW1ldGVyIGluZGV4XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9peGdiZXZmL2lwc2VjLmMtMTM0LSAqIEBpcHNlYzogcG9pbnRlciB0byBJUHNlYyBzdHJ1Y3Rcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9peGdiZXZmL2lwc2VjLmM9MTM5PXN0YXRpY1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaXhnYmV2Zi9pcHNlYy5jOjE0MDppbnQgaXhnYmV2Zl9pcHNlY19maW5kX2VtcHR5X2lkeChzdHJ1Y3QgaXhnYmV2Zl9pcHNlYyAqaXBzZWMsIGJvb2wgcnh0YWJsZSlcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2l4Z2JldmYvaXBzZWMuYy0xNDEte1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2l4Z2JldmYvaXBzZWMuYy0xNjctLyoqXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9peGdiZXZmL2lwc2VjLmM6MTY4OiAqIGl4Z2JldmZfaXBzZWNfZmluZF9yeF9zdGF0ZSAtIGZpbmQgdGhlIHN0YXRlIHRoYXQgbWF0Y2hlc1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaXhnYmV2Zi9pcHNlYy5jLTE2OS0gKiBAaXBzZWM6IHBvaW50ZXIgdG8gSVBzZWMgc3RydWN0XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaXhnYmV2Zi9pcHNlYy5jPTE3Nz1zdGF0aWNcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2l4Z2JldmYvaXBzZWMuYzoxNzg6c3RydWN0IHhmcm1fc3RhdGUgKml4Z2JldmZfaXBzZWNfZmluZF9yeF9zdGF0ZShzdHJ1Y3QgaXhnYmV2Zl9pcHNlYyAqaXBzZWMsXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9peGdiZXZmL2lwc2VjLmMtMTc5LVx0XHRcdFx0XHQgICAgICAgX19iZTMyICpkYWRkciwgdTggcHJvdG8sXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaXhnYmV2Zi9pcHNlYy5jLTIwMi0vKipcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2l4Z2JldmYvaXBzZWMuYzoyMDM6ICogaXhnYmV2Zl9pcHNlY19wYXJzZV9wcm90b19rZXlzIC0gZmluZCB0aGUga2V5IGFuZCBzYWx0IGJhc2VkIG9uIHRoZSBwcm90b2NvbFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaXhnYmV2Zi9pcHNlYy5jLTIwNC0gKiBAZGV2OiBwb2ludGVyIHRvIG5ldCBkZXZpY2UgdG8gcHJvZ3JhbVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2l4Z2JldmYvaXBzZWMuYy0yMTEtICoqL1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaXhnYmV2Zi9pcHNlYy5jOjIxMjpzdGF0aWMgaW50IGl4Z2JldmZfaXBzZWNfcGFyc2VfcHJvdG9fa2V5cyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaXhnYmV2Zi9pcHNlYy5jLTIxMy1cdFx0XHRcdFx0ICBzdHJ1Y3QgeGZybV9zdGF0ZSAqeHMsXG5cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNCAxNDoxOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxOTk2NQoJCQkJCQkJb3V0cHV0OiA0NwoJCQkJCQkJdGhvdWdodHM6IDk2OQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipXb3J0aEZ1enppbmcgQXNzZXNzbWVudCBmb3IgaXhnYmV2ZiBQYXRjaCoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBUaGUgcGF0Y2ggdGFyZ2V0cyB0aGUgYGl4Z2JldmZgIGRyaXZlciwgSW50ZWwmIzM5O3MgMTBHYkUgUENJIEV4cHJlc3MgVmlydHVhbCBGdW5jdGlvbiBkcml2ZXIuIEl0JiMzOTtzIG1vZGlmeWluZyB0d28gZnVuY3Rpb25zLCBgaXhnYmV2Zl9nZXRfbGlua19rc2V0dGluZ3NgIGFuZCBgaXhnYmV2Zl9odl9jaGVja19tYWNfbGlua192ZmAsIHdoaWNoIGRlYWwgd2l0aCBsaW5rIHN0YXR1cywgc3BlY2lmaWNhbGx5IHJlYWRpbmcgZnJvbSBQQ0kgY29uZmlnIHNwYWNlLiBUaGUgY2F0Y2ggaXMgdGhhdCBpdCYjMzk7cyBmb2N1c2luZyBvbiBIeXBlci1WIEU2MTAgVkZzLgoKVGhlIGluc3RydWN0aW9ucyBzYXkgdG8gcmV0dXJuIGBXb3J0aEZ1enppbmc9ZmFsc2VgIGlmIHRoZSBwYXRjaCBmYWxscyBpbnRvIHRoZSBjYXRlZ29yeSBvZiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBkcml2ZXJzIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBoYXJkd2FyZSBub3QgZW11bGF0ZWQgaW4gUUVNVS4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRoYXQgYGl4Z2JldmZgICppcyogYSBWRiBkcml2ZXIsIGFuZCBWRnMgYXJlIHVzdWFsbHkgZXhwb3NlZCBieSBwaHlzaWNhbCBoYXJkd2FyZSB1c2luZyBTUi1JT1YuIFN5emthbGxlciBkb2VzbiYjMzk7dCBlbXVsYXRlIHRoZSBWRiBkaXJlY3RseTsgaXQgZW11bGF0ZXMgdGhlIFBGIChgaXhnYmVgKS4gU28gdGhlIHF1ZXN0aW9uIGlzOiBkb2VzIFFFTVUgZW11bGF0ZSBgaXhnYmV2ZmA/IEkgbmVlZCB0byBjaGVjay4gIFdoaWxlIFFFTVUgaGFzIGBpZ2J2Zi5jYCBhbmQgYGlnYi5jYCwgZm9yIGBpeGdiZWAsIHRoZXJlJiMzOTtzIG9ubHkgYGl4Z2JlLmNgIC0gbm8gYGl4Z2JldmYuY2AhIFNvLCBteSBpbml0aWFsIGd1ZXNzIGlzIHRoYXQgaXQgZG9lcyAqbm90KiBmdWxseSBlbXVsYXRlIHRoZSBWRiBmb3IgaXhnYmUuIEJ1dCBsZXQmIzM5O3MgdmVyaWZ5LiBJIHNob3VsZCBjb25maXJtIGlmIHN5emthbGxlciBldmVuICphdHRlbXB0cyogdG8gcmVhY2ggYGl4Z2JldmZgIGNvZGUgcGF0aHMuCgpIb3dldmVyLCB0aGUgcGF0Y2ggKnNwZWNpZmljYWxseSogbWVudGlvbnMgSHlwZXItViBFNjEwIFZGcy4gVGhpcyBpbXBsaWVzIGEgdmVyeSBuYXJyb3cgdXNlIGNhc2U6IGEgdmlydHVhbCBmdW5jdGlvbiBvZiBhbiBFNjEwIE5JQyBydW5uaW5nIHVuZGVyIEh5cGVyLVYuIENhbiBTeXprYWxsZXIgZnV6eiBIeXBlci1WLXNwZWNpZmljIGNvZGUgaW4gYGl4Z2JldmZgPyBTeXprYWxsZXIgcnVucyBvbiBHQ0UgKEtWTSkgb3IgUUVNVSAoS1ZNL1RDRykuIEl0IGRvZXNuJiMzOTt0IHJ1biBvbiBIeXBlci1WLCBzbyB0aGF0JiMzOTtzIGEgcHJvYmxlbS4gQWxzbywgdGhlIHBhdGNoIGhhcyBhIGNoZWNrIGZvciBgaHctJmd0O21hYy50eXBlID09IGl4Z2JlX21hY19lNjEwX3ZmYC4gRTYxMCBpcyBhIHNwZWNpZmljIGhhcmR3YXJlIE1BQyB0eXBlLiBRRU1VIGVtdWxhdGVzIDgyNTk5LCBub3QgdGhlIEU2MTAuIFNvIGBpeGdiZV9tYWNfZTYxMF92ZmAgaXMgbGlrZWx5IHVucmVhY2hhYmxlIGluIFFFTVUuIFN5emthbGxlciBjYW4gZnV6eiBQQ0kgZGV2aWNlcyBpZiB0aGV5JiMzOTtyZSBlbXVsYXRlZCwgYnV0IHRoZSBFNjEwIFZGIGlzbiYjMzk7dC4KCk5vdywgbGV0JiMzOTtzIHN0ZXAgYmFjayBhbmQgY29uc2lkZXIgdGhlIGZ1enppbmcgaW5zdHJ1Y3Rpb25zIGFnYWluLiBUaGV5IGV4cGxpY2l0bHkgcnVsZSBvdXQgY29kZSBwYXRocyB1bnJlYWNoYWJsZSBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwgZXZlbiB3aXRoIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlLiBUaGV5IGFsc28gZXhjbHVkZSB2ZW5kb3Itc3BlY2lmaWMgUENJZSBkcml2ZXJzIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLiBgaXhnYmV2ZmAgKmlzKiBhbiBFdGhlcm5ldCBkcml2ZXIgZm9yIEludGVsIDEwR2JFIFZGcy4gQW5kIGl0IHJlcXVpcmVzIHBoeXNpY2FsIGhhcmR3YXJlLCAqb3IqIGEgaHlwZXJ2aXNvciB0aGF0IGVtdWxhdGVzIGl0LiBTdGFuZGFyZCBRRU1VIGRvZXNuJiMzOTt0IGVtdWxhdGUgRTYxMCBWRnMuIFNvLCBRRU1VIG1pZ2h0IGVtdWxhdGUgYGl4Z2JldmZgLCBidXQsIGlzIHRoaXMgY29kZSBwYXRoIGZvciBgaXhnYmVfbWFjX2U2MTBfdmZgIGFuZCBIeXBlci1WPyBUaGUgZnVuY3Rpb24gYGl4Z2JldmZfaHZfY2hlY2tfbWFjX2xpbmtfdmZgIGlzIG9ubHkgY2FsbGVkIHdoZW4gdGhlIE1BQyBvcGVyYXRpb25zIGFyZSBzZXQgdXAgZm9yIEh5cGVyLVYuCgpJIG5lZWQgdG8gY29uZmlybSBpZiBRRU1VIGVtdWxhdGVzIGl0LCBidXQsIGl0JiMzOTtzIGlycmVsZXZhbnQsIGJlY2F1c2UgdGhlIGNvZGUgaXMgSHlwZXItViBzcGVjaWZpYy4gVGhlcmVmb3JlLCB0aGUgcGF0Y2ggdGFyZ2V0cyBhIHZlcnkgc3BlY2lmaWMsIGxpa2VseSB1bi1mdXp6YWJsZSwgc2l0dWF0aW9uLiBJIHNob3VsZCBjaGVjayBgZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaXhnYmV2Zi92Zi5jYCB0byBiZSBzdXJlIGhvdyBgaXhnYmV2Zl9odl9jaGVja19tYWNfbGlua192ZmAgaXMgYXNzaWduZWQuIEJ1dCBiYXNlZCBvbiB0aGUgcmVzdHJpY3Rpb25zLCB0aGlzIGlzIGFsbW9zdCBjZXJ0YWlubHkgYFdvcnRoRnV6emluZz1mYWxzZWAuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjQgMTQ6MTk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7aXhnYmV2Zl9odl9jaGVja19tYWNfbGlua192ZiYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2l4Z2JldmYmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaXhnYmV2Zi92Zi5jPTkxOD1zdGF0aWMgczMyIGl4Z2JldmZfaHZfcmVhZF9saW5rc19lNjEwKHN0cnVjdCBpeGdiZV9odyAqaHcsIHUzMiAqbGlua3NfcmVnKVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2l4Z2JldmYvdmYuYy05NDEtLyoqXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9peGdiZXZmL3ZmLmM6OTQyOiAqIGl4Z2JldmZfaHZfY2hlY2tfbWFjX2xpbmtfdmYgLSBjaGVjayBsaW5rXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9peGdiZXZmL3ZmLmMtOTQzLSAqIEBodzogcG9pbnRlciB0byBwcml2YXRlIGhhcmR3YXJlIHN0cnVjdFxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2l4Z2JldmYvdmYuYy05NTAtICovXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9peGdiZXZmL3ZmLmM6OTUxOnN0YXRpYyBzMzIgaXhnYmV2Zl9odl9jaGVja19tYWNfbGlua192ZihzdHJ1Y3QgaXhnYmVfaHcgKmh3LFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaXhnYmV2Zi92Zi5jLTk1Mi1cdFx0XHRcdFx0aXhnYmVfbGlua19zcGVlZCAqc3BlZWQsXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaXhnYmV2Zi92Zi5jPTExOTQ9c3RhdGljIGNvbnN0IHN0cnVjdCBpeGdiZV9tYWNfb3BlcmF0aW9ucyBpeGdiZXZmX2h2X21hY19vcHMgPSB7XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaXhnYmV2Zi92Zi5jLTEyMDAtXHQuc2V0dXBfbGlua1x0XHQ9IGl4Z2JldmZfc2V0dXBfbWFjX2xpbmtfdmYsXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9peGdiZXZmL3ZmLmM6MTIwMTpcdC5jaGVja19saW5rXHRcdD0gaXhnYmV2Zl9odl9jaGVja19tYWNfbGlua192ZixcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2l4Z2JldmYvdmYuYy0xMjAyLVx0Lm5lZ290aWF0ZV9hcGlfdmVyc2lvblx0PSBpeGdiZXZmX2h2X25lZ290aWF0ZV9hcGlfdmVyc2lvbl92ZixcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNCAxNDoxOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMjI5MgoJCQkJCQkJb3V0cHV0OiA0MwoJCQkJCQkJdGhvdWdodHM6IDUzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBteSBvd246CgoqKkRpZ2dpbmcgaW50byB0aGUgaXhnYmV2ZiBEcml2ZXImIzM5O3MgTUFDIE9wZXJhdGlvbnMqKgoKQWxyaWdodCwgbGV0JiMzOTtzIHNlZSwgYGl4Z2JldmZfaHZfY2hlY2tfbWFjX2xpbmtfdmZgIGlzIGRlZmluaXRlbHkgcGFydCBvZiB0aGF0IGBpeGdiZXZmX2h2X21hY19vcHNgIHN0cnVjdHVyZS4gTXkgbmV4dCBsb2dpY2FsIHN0ZXAgaXMgdG8gdW5kZXJzdGFuZCB0aGUgc2NvcGUgYW5kIHVzYWdlIG9mIHRoYXQgYGl4Z2JldmZfaHZfbWFjX29wc2Agc3RydWN0dXJlIGl0c2VsZi4gSSBuZWVkIHRvIHRyYWNlIHdoZXJlIGl0JiMzOTtzIGJlaW5nIGVtcGxveWVkIGluIHRoZSBkcml2ZXIuIEtub3dpbmcgaG93IGl0JiMzOTtzIHVzZWQgd2lsbCBnaXZlIG1lIHRoZSBjb250ZXh0dWFsIGJhY2tncm91bmQgdG8gdW5kZXJzdGFuZCB0aGUgcHVycG9zZSBhbmQgZnVuY3Rpb24gb2YgdGhlIGBjaGVja19tYWNfbGlua192ZmAgZnVuY3Rpb24uIFRpbWUgdG8gZGl2ZSBkZWVwZXIgYW5kIHNlZSB3aGF0IEkgY2FuIGZpbmQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjQgMTQ6MjA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7aXhnYmV2Zl9odl9tYWNfb3BzJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaXhnYmV2ZiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9peGdiZXZmL3ZmLmM9MTE3NT1zdGF0aWMgY29uc3Qgc3RydWN0IGl4Z2JlX21hY19vcGVyYXRpb25zIGl4Z2JldmZfbWFjX29wcyA9IHtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9peGdiZXZmL3ZmLmMtMTE5My1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2l4Z2JldmYvdmYuYzoxMTk0OnN0YXRpYyBjb25zdCBzdHJ1Y3QgaXhnYmVfbWFjX29wZXJhdGlvbnMgaXhnYmV2Zl9odl9tYWNfb3BzID0ge1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaXhnYmV2Zi92Zi5jLTExOTUtXHQuaW5pdF9od1x0XHQ9IGl4Z2JldmZfaW5pdF9od192Zixcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9peGdiZXZmL3ZmLmM9MTIxOD1jb25zdCBzdHJ1Y3QgaXhnYmV2Zl9pbmZvIGl4Z2JldmZfODI1OTlfdmZfaHZfaW5mbyA9IHtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2l4Z2JldmYvdmYuYy0xMjE5LVx0Lm1hYyA9IGl4Z2JlX21hY184MjU5OV92ZixcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2l4Z2JldmYvdmYuYzoxMjIwOlx0Lm1hY19vcHMgPSBcdTAwMjZpeGdiZXZmX2h2X21hY19vcHMsXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9peGdiZXZmL3ZmLmMtMTIyMS19O1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2l4Z2JldmYvdmYuYz0xMjI4PWNvbnN0IHN0cnVjdCBpeGdiZXZmX2luZm8gaXhnYmV2Zl9YNTQwX3ZmX2h2X2luZm8gPSB7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9peGdiZXZmL3ZmLmMtMTIyOS1cdC5tYWMgPSBpeGdiZV9tYWNfWDU0MF92ZixcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2l4Z2JldmYvdmYuYzoxMjMwOlx0Lm1hY19vcHMgPSBcdTAwMjZpeGdiZXZmX2h2X21hY19vcHMsXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9peGdiZXZmL3ZmLmMtMTIzMS19O1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2l4Z2JldmYvdmYuYz0xMjM4PWNvbnN0IHN0cnVjdCBpeGdiZXZmX2luZm8gaXhnYmV2Zl9YNTUwX3ZmX2h2X2luZm8gPSB7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9peGdiZXZmL3ZmLmMtMTIzOS1cdC5tYWMgPSBpeGdiZV9tYWNfWDU1MF92ZixcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2l4Z2JldmYvdmYuYzoxMjQwOlx0Lm1hY19vcHMgPSBcdTAwMjZpeGdiZXZmX2h2X21hY19vcHMsXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9peGdiZXZmL3ZmLmMtMTI0MS19O1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2l4Z2JldmYvdmYuYz0xMjQ4PWNvbnN0IHN0cnVjdCBpeGdiZXZmX2luZm8gaXhnYmV2Zl9YNTUwRU1feF92Zl9odl9pbmZvID0ge1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaXhnYmV2Zi92Zi5jLTEyNDktXHQubWFjID0gaXhnYmVfbWFjX1g1NTBFTV94X3ZmLFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaXhnYmV2Zi92Zi5jOjEyNTA6XHQubWFjX29wcyA9IFx1MDAyNml4Z2JldmZfaHZfbWFjX29wcyxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2l4Z2JldmYvdmYuYy0xMjUxLX07XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaXhnYmV2Zi92Zi5jPTEyNjM9Y29uc3Qgc3RydWN0IGl4Z2JldmZfaW5mbyBpeGdiZXZmX2U2MTBfdmZfaHZfaW5mbyA9IHtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2l4Z2JldmYvdmYuYy0xMjY0LVx0Lm1hYyAgICAgICAgICAgID0gaXhnYmVfbWFjX2U2MTBfdmYsXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9peGdiZXZmL3ZmLmM6MTI2NTpcdC5tYWNfb3BzICAgICAgICA9IFx1MDAyNml4Z2JldmZfaHZfbWFjX29wcyxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2l4Z2JldmYvdmYuYy0xMjY2LX07XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjQgMTQ6MjA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjM1MjMKCQkJCQkJCW91dHB1dDogNDgKCQkJCQkJCXRob3VnaHRzOiAxNgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBzdW1tYXJ5LCB0YWtpbmcgb24gdGhlIHBlcnNvbmEgeW91JiMzOTt2ZSBkZXNjcmliZWQ6CgoqKkFuYWx5emluZyB0aGUgQ29udGV4dCBvZiBgaXhnYmV2Zl9tYWluLmNgIFVzYWdlKioKCkFscmlnaHQsIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIE15IGluaXRpYWwgdGhvdWdodCBpcywgYmFzZWQgb24gdGhlIGZpbGUgbmFtZSwgdGhhdCB0aGVzZSBhcmUgcHJvYmFibHkgY2VudHJhbCBjb21wb25lbnRzIHVzZWQgd2l0aGluIHRoZSBgaXhnYmV2Zl9tYWluLmNgIGZpbGUuIEtub3dpbmcgdGhhdCBmaWxlIGFuZCBpdHMgY29udGV4dCBpcyBjcnVjaWFsIGZvciB1bmRlcnN0YW5kaW5nICpob3cqIHRoZXNlIGVsZW1lbnRzIGFyZSBiZWluZyB1c2VkLiBBcmUgd2UgdGFsa2luZyBhYm91dCBkYXRhIHN0cnVjdHVyZXMsIGZ1bmN0aW9uIGNhbGxzLCBvciBtYXliZSBzb21lIGtleSB2YXJpYWJsZXMgb3IgbWFjcm9zIHRoYXQgZGVmaW5lIGNvcmUgZnVuY3Rpb25hbGl0aWVzIG9mIHRoZSBJbnRlbCBYNzEwIFZpcnR1YWwgRnVuY3Rpb24gZHJpdmVyPyBNeSBtaW5kIGltbWVkaWF0ZWx5IHN0YXJ0cyB0byBydW4gdGhyb3VnaCB0aGUgY29tbW9uIGFyZWFzIHdpdGhpbiBkcml2ZXIgY29kZTogaW5pdGlhbGl6YXRpb24sIHBhY2tldCBwcm9jZXNzaW5nLCBpbnRlcnJ1cHQgaGFuZGxpbmcsIG9yIHJlc291cmNlIG1hbmFnZW1lbnQuIEdpdmVuIHRoZSB0ZXJtLCBJJiMzOTtkIGV4cGVjdCB0aGlzIGNvZGUgdG8gcmVsYXRlIHRvIHRoZSBWaXJ0dWFsIEZ1bmN0aW9uIHNpZGUgb2YgdGhpbmdzLiBJdCBhbGwgZGVwZW5kcyBvbiBob3cgYGl4Z2JldmZfbWFpbi5jYCBpbnRlZ3JhdGVzIHdpdGggdGhlIG92ZXJhbGwgaXhnYmUgZHJpdmVyIGFyY2hpdGVjdHVyZSBhbmQgdGhlIFZGJiMzOTtzIGNvbW11bmljYXRpb24gZmxvdy4gTXkgbmV4dCBzdGVwIHdvdWxkIGJlIHRvIHJldmlldyB0aGUgYXNzb2NpYXRlZCBjb2RlIHN1cnJvdW5kaW5nIHRoZXNlIGVsZW1lbnRzIHdpdGhpbiB0aGF0IHNwZWNpZmljIGZpbGUgdG8gY29uZmlybSBteSBleHBlY3RhdGlvbnMuIEkgbmVlZCB0byBzZWUgdGhlIGltcGxlbWVudGF0aW9uIGRldGFpbHMgdG8gZ2V0IHRoZSB3aG9sZSBwaWN0dXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNCAxNDoyMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtpeGdiZXZmX2U2MTBfdmZfaHZfaW5mbyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2l4Z2JldmYmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaXhnYmV2Zi9peGdiZXZmLmg9NDMyPWV4dGVybiBjb25zdCBzdHJ1Y3QgaXhnYmV2Zl9pbmZvIGl4Z2JldmZfWDU1MEVNX3hfdmZfaHZfaW5mbztcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2l4Z2JldmYvaXhnYmV2Zi5oOjQzMzpleHRlcm4gY29uc3Qgc3RydWN0IGl4Z2JldmZfaW5mbyBpeGdiZXZmX2U2MTBfdmZfaHZfaW5mbztcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2l4Z2JldmYvaXhnYmV2Zi5oLTQzNC1cbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9peGdiZXZmL2l4Z2JldmZfbWFpbi5jPTQ0PXN0YXRpYyBjb25zdCBzdHJ1Y3QgaXhnYmV2Zl9pbmZvICppeGdiZXZmX2luZm9fdGJsW10gPSB7XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaXhnYmV2Zi9peGdiZXZmX21haW4uYy01NC1cdFtib2FyZF9lNjEwX3ZmXSAgICAgICAgID0gXHUwMDI2aXhnYmV2Zl9lNjEwX3ZmX2luZm8sXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9peGdiZXZmL2l4Z2JldmZfbWFpbi5jOjU1Olx0W2JvYXJkX2U2MTBfdmZfaHZdICAgICAgPSBcdTAwMjZpeGdiZXZmX2U2MTBfdmZfaHZfaW5mbyxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2l4Z2JldmYvaXhnYmV2Zl9tYWluLmMtNTYtfTtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9peGdiZXZmL3ZmLmM9MTI1OD1jb25zdCBzdHJ1Y3QgaXhnYmV2Zl9pbmZvIGl4Z2JldmZfZTYxMF92Zl9pbmZvID0ge1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2l4Z2JldmYvdmYuYy0xMjYyLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaXhnYmV2Zi92Zi5jOjEyNjM6Y29uc3Qgc3RydWN0IGl4Z2JldmZfaW5mbyBpeGdiZXZmX2U2MTBfdmZfaHZfaW5mbyA9IHtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2l4Z2JldmYvdmYuYy0xMjY0LVx0Lm1hYyAgICAgICAgICAgID0gaXhnYmVfbWFjX2U2MTBfdmYsXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI0IDE0OjIwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI0MzMyCgkJCQkJCQlvdXRwdXQ6IDQzCgkJCQkJCQl0aG91Z2h0czogNDkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIHByZXNlbnRlZCBpbiB0aGUgZmlyc3QgcGVyc29uOgoKKipJbnZlc3RpZ2F0aW5nIHRoZSBQQ0kgRGV2aWNlIElEIEFzc29jaWF0aW9uKioKCkFscmlnaHQsIHNvIGBib2FyZF9lNjEwX3ZmX2h2YCBpcyBsaXN0ZWQgaW4gdGhlIFBDSSBkZXZpY2UgSUQgdGFibGUuIFRoYXQmIzM5O3MgYSBnb29kIHN0YXJ0aW5nIHBvaW50LiBNeSBuZXh0IG1vdmUgaXMgY2xlYXI6IEkgbmVlZCB0byBkaWcgaW50byBgaXhnYmV2Zl9wY2lfdGJsYCB0byB1bmRlcnN0YW5kIGhvdyB0aGlzIElEIGlzIG1hcHBlZCB3aXRoaW4gdGhlIGNvbnRleHQgb2YgdGhlIGRyaXZlci4gTGV0JiMzOTtzIGhlYWQgb3ZlciB0byBgaXhnYmV2Zl9tYWluLmNgIGFuZCB0YWtlIGEgbG9vay4gSSYjMzk7bSBhc3N1bWluZyB0aGF0IHRoZSBkZXZpY2UgSUQgdGFibGUgd2l0aGluIGBpeGdiZXZmX3BjaV90YmxgIHdpbGwgY29udGFpbiBhbGwgdGhlIG5lY2Vzc2FyeSBpbmZvcm1hdGlvbiBhYm91dCB0aGF0IFBDSSBkZXZpY2UsIHNvIEkgY2FuIGFzc29jaWF0ZSB0aGUgc3BlY2lmaWMgYGJvYXJkX2U2MTBfdmZfaHZgIGFuZCBpbnZlc3RpZ2F0ZSBpdHMgc3BlY2lmaWMgcmVxdWlyZW1lbnRzLiBJIGV4cGVjdCB0byBiZSBsb29raW5nIGZvciBhc3NvY2lhdGVkIHN0cnVjdHVyZXMsIG9yIHNwZWNpZmljIGZ1bmN0aW9uIGNhbGxzIHRoYXQgdHJpZ2dlciBiYXNlZCBvbiB0aGlzIGRldmljZSBJRC4gSG9wZWZ1bGx5LCBJIGNhbiBmaW5kIHdoYXQgY29uZmlndXJhdGlvbnMgYXJlIGluIGVmZmVjdCBmb3IgdGhpcyBwYXJ0aWN1bGFyIGRldmljZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjQgMTQ6MjA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Ym9hcmRfZTYxMF92Zl9odiYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2l4Z2JldmYmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaXhnYmV2Zi9peGdiZXZmLmg9Mzk5PWVudW0gaXhnYmV2Zl9ib2FyZHMge1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2l4Z2JldmYvaXhnYmV2Zi5oLTQwOS1cdGJvYXJkX2U2MTBfdmYsXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9peGdiZXZmL2l4Z2JldmYuaDo0MTA6XHRib2FyZF9lNjEwX3ZmX2h2LFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaXhnYmV2Zi9peGdiZXZmLmgtNDExLX07XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaXhnYmV2Zi9peGdiZXZmX21haW4uYz00ND1zdGF0aWMgY29uc3Qgc3RydWN0IGl4Z2JldmZfaW5mbyAqaXhnYmV2Zl9pbmZvX3RibFtdID0ge1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2l4Z2JldmYvaXhnYmV2Zl9tYWluLmMtNTQtXHRbYm9hcmRfZTYxMF92Zl0gICAgICAgICA9IFx1MDAyNml4Z2JldmZfZTYxMF92Zl9pbmZvLFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaXhnYmV2Zi9peGdiZXZmX21haW4uYzo1NTpcdFtib2FyZF9lNjEwX3ZmX2h2XSAgICAgID0gXHUwMDI2aXhnYmV2Zl9lNjEwX3ZmX2h2X2luZm8sXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9peGdiZXZmL2l4Z2JldmZfbWFpbi5jLTU2LX07XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaXhnYmV2Zi9peGdiZXZmX21haW4uYz02Nj1zdGF0aWMgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgaXhnYmV2Zl9wY2lfdGJsW10gPSB7XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaXhnYmV2Zi9peGdiZXZmX21haW4uYy05Ni1cdFx0XHRcdFBDSV9BTllfSUQsIElYR0JFX1NVQkRFVl9JRF9FNjEwX1ZGX0hWKSxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2l4Z2JldmYvaXhnYmV2Zl9tYWluLmM6OTc6XHRcdC5kcml2ZXJfZGF0YSA9IGJvYXJkX2U2MTBfdmZfaHYsXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9peGdiZXZmL2l4Z2JldmZfbWFpbi5jLTk4LVx0fSwge1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNCAxNDoyMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNTE2MQoJCQkJCQkJb3V0cHV0OiAyNgoJCQkJCQkJdGhvdWdodHM6IDcwNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBc3Nlc3NtZW50IG9mIHRoZSBGdXp6YWJpbGl0eSBvZiB0aGlzIGl4Z2JldmYgUGF0Y2gqKgoKT2theSwgbGV0IG1lIGJyZWFrIHRoaXMgZG93bi4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRoYXQgdGhlIGRyaXZlciBiaW5kcyB0byBhIHNwZWNpZmljIFBDSSBkZXZpY2UgSUQuIFRoYXQmIzM5O3MgdGhlIGtleS4gRmlyc3QsIGlzIHRoaXMgZGV2aWNlIGVtdWxhdGVkIGluIFFFTVU/IE5vLiBPa2F5LCB0aGF0IHJ1bGVzIG91dCBzdGFuZGFyZCBRRU1VLWJhc2VkIGZ1enppbmcuIE5vdywgY2FuIHN5emthbGxlciBmdXp6IHRoaXM/IEkgbmVlZCB0byB0aGluayB0aGlzIHRocm91Z2guCgpXYWl0LCBkb2VzbiYjMzk7dCBzeXprYWxsZXIgaGF2ZSB0aGF0IG1lY2hhbmlzbSB1c2luZyBgc3l6X3BjaV9zZXR1cGAgYW5kIGBzeXpfcGNpX2RldmljZWA/IFJpZ2h0ISBTeXprYWxsZXIgdXNlcyBgc3l6X3BjaV9kZXZpY2VgIHRvLCBlc3NlbnRpYWxseSwgaW5qZWN0IGFyYml0cmFyeSBQQ0kgZGV2aWNlcyBpbnRvIHRoZSBrZXJuZWwgdGhyb3VnaCB2aXJ0dWFsIGhhcmR3YXJlIGludGVyZmFjZXMuIFRoaXMgc291bmRzIHByb21pc2luZy4gU28sIHN5emthbGxlciAqZG9lcyogaGF2ZSBhIFBDSSBmdXp6ZXIgdGhhdCBjYW4gZW11bGF0ZSBhIFBDSSBkZXZpY2Ugd2l0aCBhIHNwZWNpZmljIHZlbmRvciBhbmQgZGV2aWNlIElELiBJdCBjYW4gcmVzcG9uZCB0byBjb25maWcgYW5kIG1lbW9yeSBzcGFjZSBhY2Nlc3Nlcywgd2hpY2ggaXMgd2hhdCBJIG5lZWQuCgpBbHJpZ2h0LCB0aGUgbmV4dCBzdGVwIGlzIHRvIHNlZSBpZiBzeXprYWxsZXImIzM5O3MgUENJIGZ1enplciAqY2FuKiByZWFjaCB0aGUgY29kZSBtb2RpZmllZCBieSB0aGlzIHBhdGNoLiBUaGUgcGF0Y2ggbW9kaWZpZXMgYGl4Z2JldmZfZ2V0X2xpbmtfa3NldHRpbmdzYCBhbmQgYGl4Z2JldmZfaHZfY2hlY2tfbWFjX2xpbmtfdmZgLiBgaXhnYmV2Zl9nZXRfbGlua19rc2V0dGluZ3NgIGlzIHJlYWNoZWQgdGhyb3VnaCBldGh0b29sLCBhbmQgYGl4Z2JldmZfaHZfY2hlY2tfbWFjX2xpbmtfdmZgIHZpYSBgaHctJmd0O21hYy5vcHMuY2hlY2tfbGlua2AuIE5vdywgaWYgc3l6a2FsbGVyIGVtdWxhdGVzIHRoZSBQQ0kgZGV2aWNlLCB0aGUgYGl4Z2JldmZgIGRyaXZlciAqc2hvdWxkKiBwcm9iZSBpdCwgcmlnaHQ/CgpCdXQgYSBjcnVjaWFsIHF1ZXN0aW9uIGNvbWVzIHVwOiBkb2VzIGBpeGdiZXZmYCByZXF1aXJlIE1TSS1YPyBBaCwgdGhlIEtjb25maWcgc2F5cyBpdCAqZG9lcyouIFRoYXQgY291bGQgYmUgYSBzdHVtYmxpbmcgYmxvY2suIFN5emthbGxlciYjMzk7cyBQQ0kgZnV6emVyIG1pZ2h0IG5vdCBmdWxseSBzdXBwb3J0IE1TSS1YIG9yIGNvbXBsZXggRE1BLiBIb3dldmVyLCBvZnRlbiBpdCBjYW4gZ2V0IHBhc3QgdGhlIHByb2JlIGZ1bmN0aW9uIGFuZCByZWdpc3RlciB0aGUgbmV0ZGV2LiBJdOKAmXMgd29ydGggZXhwbG9yaW5nLgoKTm93LCBJIGhhdmUgdG8gY29uc2lkZXIgdGhlIHNwZWNpZmljIHByb21wdCBpbnN0cnVjdGlvbnMuIEl0IHNheXMgdG8gcmV0dXJuIGBXb3J0aEZ1enppbmc9ZmFsc2VgIGlmIHRoZSBwYXRjaCBpbnZvbHZlcyBjb2RlIGluICYjMzQ7dmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMuLi4gdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUmIzM0Oy4KCklzIGBpeGdiZXZmYCBvbmUgb2YgdGhvc2U/IE5vLCBub3QgcmVhbGx5LiBJdCYjMzk7cyBhIHN0YW5kYXJkIEV0aGVybmV0IE5JQyBWaXJ0dWFsIEZ1bmN0aW9uIChWRikgZHJpdmVyLCBub3Qgc29tZXRoaW5nIHNwZWNpYWxpemVkIGxpa2UgYSBTbWFydE5JQyBvciBHUFUuIEJ1dCwgZG9lcyBpdCByZXF1aXJlIHBoeXNpY2FsIGhhcmR3YXJlIG5vdCBlbXVsYXRlZCBpbiBRRU1VPyBZZXMsIHRoYXQmIzM5O3MgdGhlIHJ1YiEgYGl4Z2JldmZgIGlzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgoKQnV0IHdhaXQsIGlmIGBpeGdiZXZmYCBpc24mIzM5O3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVSwgYW5kIHN5emthbGxlciYjMzk7cyBQQ0kgZnV6emVyIGlzIHRoZSBvbmx5IHdheSB0byByZWFjaCBpdCwgZG9lc24mIzM5O3QgdGhhdCBmYWxsIHVuZGVyICYjMzQ7aW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSYjMzQ7PyBCdXQsIG15IFBDSSBmdXp6ZXIgKmlzKiBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSEgQnV0LCBpdCYjMzk7cyBhIGdlbmVyaWMgZnV6emVyLCBub3QgYSBmdWxsIGRldmljZSBlbXVsYXRvci4gSXTigJlzIGp1c3QgZmVlZGluZyByYW5kb20gYnl0ZXMgdG8gTU1JTy9QSU8vQ29uZmlnIHNwYWNlIHJlYWRzLiBJdCBpcyBOT1QgY29tcGxleCBsaWtlLCBzYXksIGFuIG1seHN3IG9yIGFuIEFNRCBHUFUgZHJpdmVyIQoKVGhlIHByb21wdCBzcGVjaWZpY2FsbHkgbGlzdHMgdGhvc2UgY29tcGxleCBkZXZpY2VzOiAmIzM0O21seHN3LCBwZHNfY29yZSwgcWVkLCBpb25pYywgYW1kZ3B1JiMzNDsuIGBpeGdiZXZmYCBpcyBhbiBJbnRlbCBFdGhlcm5ldCBWRi4gSXTigJlzIG5vdCBpbiB0aGF0IGNsYXNzLgoKRmluYWxseSwgSSBuZWVkIHRvIGNoZWNrIHN5emthbGxlciB0byBzZWUgaWYgdGhlcmUgYXJlIGFueSBleGlzdGluZyBkZXNjcmlwdGlvbnMuIExldCBtZSBzZWUuLi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjQgMTQ6MjA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkVycm9yOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bm8gbWF0Y2hlczwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtpeGdiZXZmJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7c3lzLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtlcnJvciYjMzQ7OiAmIzM0O25vIG1hdGNoZXMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI0IDE0OjIwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI2Njc1CgkJCQkJCQlvdXRwdXQ6IDM5CgkJCQkJCQl0aG91Z2h0czogMTYyOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXNpcyBvZiB0aGUgUGF0Y2g6IFdvcnRoRnV6emluZz1mYWxzZSoqCgpPa2F5LCBzbyB0aGUgaW5pdGlhbCB0aG91Z2h0IHdhcyB0byB1c2UgYGRlZmF1bHRfYXBpOmdyZXBwZXJgIHRvIHNlYXJjaCBmb3IgcmVsYXRlZCBjb2RlLCBidXQgSSBxdWlja2x5IHJlYWxpemVkIEkgY2FuJiMzOTt0IHNlYXJjaCBgc3lzL2Agb3IgZXhwcmVzc2lvbnMgY29udGFpbmluZyBgc3l6X2AgYmVjYXVzZSBvZiB0aG9zZSByZXN0cmljdGlvbnMgaW4gdGhlIHByb21wdC4gSSBhbHNvIGRvbiYjMzk7dCBoYXZlIHRoZSBgcmVhZC1zeXotc3BlY2Agb3IgYHN5ei1ncmVwcGVyYCB0b29scywgc28gSSYjMzk7bSBsaW1pdGVkIHRvIGBncmVwcGVyYCwgYGNvZGVzZWFyY2gtZGlyLWluZGV4YCwgYHJlYWQtZmlsZWAsIGFuZCBgc2V0LXJlc3VsdHNgLiBObyBkaWNlIG9uIHRoZSBzeXprYWxsZXIgc2lkZS4KCk5vdywgbGV0JiMzOTtzIGdldCBiYWNrIHRvIHRoZSBjb3JlIHF1ZXN0aW9uOiBJcyB0aGlzIHdvcnRoIGZ1enppbmc/IEkgbmVlZCB0byBmaWd1cmUgb3V0IGlmIHRoaXMgY29kZSBwYXRoIGlzIHJlYWNoYWJsZSBpbiBhIHZpcnR1YWxpemVkIGVudmlyb25tZW50IGxpa2UgUUVNVSBvciBHQ0UuIFRoZSBwcm9tcHQgaXMgcHJldHR5IGNsZWFyOiBpdCYjMzk7cyBub3Qgd29ydGggZnV6emluZyBpZiB0aGUgY29kZSBwYXRoIGlzIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdGhvc2UgZW52aXJvbm1lbnRzLgoKVGhlIHBhdGNoIG1lbnRpb25zIGBpeGdiZXZmYCwgd2hpY2ggaW5pdGlhbGx5IG1hZGUgbWUgdGhpbmsgYWJvdXQgdmVuZG9yLXNwZWNpZmljIGhhcmR3YXJlLiBCdXQgaXQmIzM5O3Mgbm90ICp0ZWNobmljYWxseSogYSB2ZW5kb3Itc3BlY2lmaWMgTklDLCBpdCYjMzk7cyBhIHN0YW5kYXJkIE5JQyB0aGF0IGhhcyBhIFZGLiBCdXQsIGRvZXMgaXQgcmVxdWlyZSBwaHlzaWNhbCBoYXJkd2FyZT8gVHVybnMgb3V0LCBRRU1VIGVtdWxhdGVzIGBpeGdiZWAgKFBGKSwgYGUxMDAwYCwgYGUxMDAwZWAsIGBpZ2JgLCBgaWdidmZgLCBidXQgKm5vdCogYGl4Z2JldmZgLiBTbywgaXQgZmFsbHMgdW5kZXIgdGhlIGNhdGVnb3J5IG9mIGhhcmR3YXJlICpub3QqIGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuCgpUaGVuIEkgaGFkIHRvIGNvbnNpZGVyIGlmIHN5emthbGxlciBjb3VsZCBmb3JjZSBpdC4gQ291bGQgdGhlIFBDSSBmdXp6ZXIgc29tZWhvdyBmYWtlIHRoZSBkZXZpY2UgYW5kIHBhc3MgdGhlIHByb2JlIGZ1bmN0aW9uPyBFdmVuIGlmIGl0IGNvdWxkLCB0aGUgcHJvbXB0IGV4cGxpY2l0bHkgc2F5cyB0aGF0IGl0IGlzIG5vdCB3b3J0aCBmdXp6aW5nIGlmIGl0IHJlcXVpcmVzIHBoeXNpY2FsIGhhcmR3YXJlIHRoYXQgaXMgbm90IGVtdWxhdGVkIGluIFFFTVUuCgpUaGUgcGF0Y2ggc3BlY2lmaWNhbGx5IHRhcmdldHMgSHlwZXItViBFNjEwIFZGcy4gSXQmIzM5O3MgcmVhZGluZyBsaW5rIHN0YXR1cyBmcm9tIGFuIGVtdWxhdGVkIFBDSSBjb25maWcgc3BhY2UuIFRoaXMgaXMgdmVyeSBIeXBlci1WIHNwZWNpZmljLgoKVGhlIHByb2JlIHdpbGwgbm90IGV2ZW4gc3VjY2VlZCBpbiBRRU1VIGJlY2F1c2UgdGhlIGRldmljZSBpcyBub3QgcHJlc2VudCwgYW5kIHRoZSBkcml2ZXIgaXMgbm90IGxvYWRlZC4gSWYgdGhlIGRyaXZlciBpcyBub3QgbG9hZGVkLCB0aGVyZSB3aWxsIGJlIG5vIGBuZXRfZGV2aWNlYCwgYW5kIHRoZSBmdW5jdGlvbiBgaXhnYmV2Zl9nZXRfbGlua19rc2V0dGluZ3NgIGNhbm5vdCBldmVuIGJlIHJlYWNoZWQuCgpTbywgdGhpcyBFNjEwIFZGIGJlaGF2aW9yIGlzIG5vdCBzb2Z0d2FyZS1lbXVsYXRlZCBpbiBRRU1VLCB1bmxpa2UgdGhpbmdzIGxpa2UgYSBVU0IgZ2FkZ2V0IG9yIGBtYWM4MDIxMV9od3NpbWAuIEl0JiMzOTtzIGEgSHlwZXItViBzcGVjaWZpYyBkZXZpY2UgdGhhdCYjMzk7cyBub3QgcHJlc2VudCBpbiBRRU1VLCBtYWtpbmcgaXQgdW5yZWFjaGFibGUuCgpMZXQgbWUgY29uZmlybSB0aGF0IHdpdGggYSBxdWljayBjaGVjayBvbiB0aGUgUUVNVSBzb3VyY2UuIFdoaWxlIGBpZ2J2ZmAgKmlzKiB0aGVyZSwgdGhlcmUmIzM5O3Mgbm8gbmF0aXZlIGBpeGdiZXZmYCBzdXBwb3J0LiBXYWl0LCBRRU1VJiMzOTtzIGBpZ2JgIHN1cHBvcnRzIFNSLUlPVi4gUUVNVSYjMzk7cyBgaXhnYmVgIGltcGxlbWVudGF0aW9uICptaWdodCogbm90LiBUaGUga2V5IGhlcmUgaXMgdGhlIHBhdGNoIGlzIHRhbGtpbmcgYWJvdXQgYGl4Z2JlX21hY19lNjEwX3ZmYCB3aGljaCBoYXMgYSBzcGVjaWZpYyBQQ0kgZGV2aWNlIElEIGBJWEdCRV9ERVZfSURfRTYxMF9WRl9IVmAgdGhhdCBvbmx5IGV4aXN0cyBvbiBIeXBlci1WLgoKTGV0JiMzOTtzIGxvb2sgYXQgdGhlIGNyaXRpY2FsIGNvZGUgc25pcHBldCBpbiB0aGUgcGF0Y2ggYWdhaW4uCmBgYGMKJiM0MzsJaWYgKGh3LSZndDttYWMudHlwZSA9PSBpeGdiZV9tYWNfZTYxMF92ZikgewomIzQzOwkJc3Bpbl9sb2NrX2JoKCZhbXA7YWRhcHRlci0mZ3Q7bWJ4X2xvY2spOwomIzQzOwkJaHctJmd0O21hYy5nZXRfbGlua19zdGF0dXMgPSB0cnVlOwomIzQzOwkJaHctJmd0O21hYy5vcHMuY2hlY2tfbGluayhodywgJmFtcDthZGFwdGVyLSZndDtsaW5rX3NwZWVkLAomIzQzOwkJCQkgICAgICAgJmFtcDthZGFwdGVyLSZndDtsaW5rX3VwLCBmYWxzZSk7CiYjNDM7CQlzcGluX3VubG9ja19iaCgmYW1wO2FkYXB0ZXItJmd0O21ieF9sb2NrKTsKJiM0MzsJfQpgYGAKQW5kIGhvdyB0aGUgYGl4Z2JldmZfaHZfcmVhZF9saW5rc19lNjEwYCBhY2Nlc3NlcyB0aGUgZW11bGF0ZWQgUENJIGNvbmZpZyBzcGFjZS4KYGBgYwomIzQzOwlpZiAoIUlTX0VOQUJMRUQoQ09ORklHX1BDSV9NTUNPTkZJRykpIHsKJiM0MzsJCWRldl9lcnJfb25jZSgmYW1wO2FkYXB0ZXItJmd0O3BkZXYtJmd0O2RldiwKJiM0MzsJCQkgICAgICYjMzQ7Y2Fubm90IHJlYWQgbGluayBzdGF0dXMsIFBDSV9NTUNPTkZJRyBpcyByZXF1aXJlZCBmb3IgSHlwZXItVlxuJiMzNDspOwomIzQzOwkJcmV0dXJuIC1FT1BOT1RTVVBQOwomIzQzOwl9CiYjNDM7CiYjNDM7CWZvciAoaW50IGkgPSAwOyBpICZsdDsgSVhHQkVfSFZfTElOS19TVEFUVVNfU0laRTsgaSYjNDM7JiM0MzspIHsKJiM0MzsJCWludCByZXQgPSBwY2lfcmVhZF9jb25maWdfYnl0ZShhZGFwdGVyLSZndDtwZGV2LAomIzQzOwkJCQkJICAgICAgIElYR0JFX0hWX0xJTktfU1RBVFVTX09GRlNFVCAmIzQzOyBpLAomIzQzOwkJCQkJICAgICAgICZhbXA7ZGF0YVtpXSk7CmBgYApJdCYjMzk7cyByZWFkaW5nIGZyb20gUENJIGNvbmZpZyBzcGFjZSBvZmZzZXQgMHgyMDkuIFRoaXMgaXMgKmRlZmluaXRlbHkqIEh5cGVyLVYgc3BlY2lmaWMgYW5kIHVucmVhY2hhYmxlIGluIHN0YW5kYXJkIFFFTVUgb3IgR0NFLgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI0IDE0OjIxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2l4Z2JldmZfcHJvYmUmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9peGdiZXZmJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2l4Z2JldmYvaXhnYmV2Zl9tYWluLmM9NDU2MT1zdGF0aWMgdm9pZCBpeGdiZXZmX2Fzc2lnbl9uZXRkZXZfb3BzKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaXhnYmV2Zi9peGdiZXZmX21haW4uYy00NTY4LS8qKlxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaXhnYmV2Zi9peGdiZXZmX21haW4uYzo0NTY5OiAqIGl4Z2JldmZfcHJvYmUgLSBEZXZpY2UgSW5pdGlhbGl6YXRpb24gUm91dGluZVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaXhnYmV2Zi9peGdiZXZmX21haW4uYy00NTcwLSAqIEBwZGV2OiBQQ0kgZGV2aWNlIGluZm9ybWF0aW9uIHN0cnVjdFxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2l4Z2JldmYvaXhnYmV2Zl9tYWluLmMtNDU3NC0gKlxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaXhnYmV2Zi9peGdiZXZmX21haW4uYzo0NTc1OiAqIGl4Z2JldmZfcHJvYmUgaW5pdGlhbGl6ZXMgYW4gYWRhcHRlciBpZGVudGlmaWVkIGJ5IGEgcGNpX2RldiBzdHJ1Y3R1cmUuXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9peGdiZXZmL2l4Z2JldmZfbWFpbi5jLTQ1NzYtICogVGhlIE9TIGluaXRpYWxpemF0aW9uLCBjb25maWd1cmluZyBvZiB0aGUgYWRhcHRlciBwcml2YXRlIHN0cnVjdHVyZSxcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9peGdiZXZmL2l4Z2JldmZfbWFpbi5jLTQ1NzgtICoqL1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaXhnYmV2Zi9peGdiZXZmX21haW4uYzo0NTc5OnN0YXRpYyBpbnQgaXhnYmV2Zl9wcm9iZShzdHJ1Y3QgcGNpX2RldiAqcGRldiwgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgKmVudClcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2l4Z2JldmYvaXhnYmV2Zl9tYWluLmMtNDU4MC17XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaXhnYmV2Zi9peGdiZXZmX21haW4uYz00OTE4PXN0YXRpYyBzdHJ1Y3QgcGNpX2RyaXZlciBpeGdiZXZmX2RyaXZlciA9IHtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9peGdiZXZmL2l4Z2JldmZfbWFpbi5jLTQ5MjAtXHQuaWRfdGFibGVcdD0gaXhnYmV2Zl9wY2lfdGJsLFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaXhnYmV2Zi9peGdiZXZmX21haW4uYzo0OTIxOlx0LnByb2JlXHRcdD0gaXhnYmV2Zl9wcm9iZSxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2l4Z2JldmYvaXhnYmV2Zl9tYWluLmMtNDkyMi1cdC5yZW1vdmVcdFx0PSBpeGdiZXZmX3JlbW92ZSxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjQgMTQ6MjE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjk5NTQKCQkJCQkJCW91dHB1dDogNTIKCQkJCQkJCXRob3VnaHRzOiA1MgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIFBvdGVudGlhbCBmb3IgU3l6a2FsbGVyJiMzOTtzIFBDSSBEZXZpY2UgRmFraW5nKioKCk9rYXksIHNvIGlmIHN5emthbGxlciBpcyBzdWNjZXNzZnVsbHkgZmFraW5nIGEgUENJIGRldmljZSwgdGhlbiwgYXMgZXhwZWN0ZWQsIHRoZSBgaXhnYmV2Zl9wcm9iZWAgZnVuY3Rpb24gd2lsbCBiZSB0cmlnZ2VyZWQuIFRoZSBjcml0aWNhbCBxdWVzdGlvbiBub3cgaXMsIHdpbGwgYGl4Z2JldmZfcHJvYmVgIGFjdHVhbGx5ICpzdWNjZWVkKiBpbiB0aGlzIHNjZW5hcmlvIG9mIGludGVyYWN0aW5nIHdpdGggYSBmYWtlZCBkZXZpY2U/IFRoaXMgaXMgdGhlIGNydXggb2YgdGhlIG1hdHRlci4gV2UgaGF2ZSB0byBhbmFseXplIHRoZSBjb2RlIHRvIHVuZGVyc3RhbmQgdGhlIGRlcGVuZGVuY2llcyBhbmQgYXNzdW1wdGlvbnMgb2YgYGl4Z2JldmZfcHJvYmVgLiBMZXQmIzM5O3MgZGlnIGludG8gdGhlIGBpeGdiZXZmX3Byb2JlYCBmdW5jdGlvbiBhbmQgc2VlIHdoYXQgaXQgZXhwZWN0cyBmcm9tIHRoZSBQQ0kgZGV2aWNlIHRvIGRldGVybWluZSBpZiBhIGZha2VkIGRldmljZSBjYW4gc2F0aXNmeSB0aG9zZSByZXF1aXJlbWVudHMuIFRoaXMgaXMgd2hlcmUgdGhlIHZ1bG5lcmFiaWxpdGllcyBtaWdodCBsaWUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI0IDE0OjIxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaXhnYmV2Zi9peGdiZXZmX21haW4uYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDQ1NzksCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMTAwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzQ1Nzk6XHRzdGF0aWMgaW50IGl4Z2JldmZfcHJvYmUoc3RydWN0IHBjaV9kZXYgKnBkZXYsIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkICplbnQpXG40NTgwOlx0e1xuNDU4MTpcdFx0c3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldjtcbjQ1ODI6XHRcdHN0cnVjdCBpeGdiZXZmX2FkYXB0ZXIgKmFkYXB0ZXIgPSBOVUxMO1xuNDU4MzpcdFx0c3RydWN0IGl4Z2JlX2h3ICpodyA9IE5VTEw7XG40NTg0Olx0XHRjb25zdCBzdHJ1Y3QgaXhnYmV2Zl9pbmZvICppaSA9IGl4Z2JldmZfaW5mb190YmxbZW50LVx1MDAzZWRyaXZlcl9kYXRhXTtcbjQ1ODU6XHRcdGJvb2wgZGlzYWJsZV9kZXYgPSBmYWxzZTtcbjQ1ODY6XHRcdGludCBlcnI7XG40NTg3Olx0XG40NTg4Olx0XHRlcnIgPSBwY2lfZW5hYmxlX2RldmljZShwZGV2KTtcbjQ1ODk6XHRcdGlmIChlcnIpXG40NTkwOlx0XHRcdHJldHVybiBlcnI7XG40NTkxOlx0XG40NTkyOlx0XHRlcnIgPSBkbWFfc2V0X21hc2tfYW5kX2NvaGVyZW50KFx1MDAyNnBkZXYtXHUwMDNlZGV2LCBETUFfQklUX01BU0soNjQpKTtcbjQ1OTM6XHRcdGlmIChlcnIpIHtcbjQ1OTQ6XHRcdFx0ZGV2X2VycihcdTAwMjZwZGV2LVx1MDAzZWRldiwgXCYjMzQ7Tm8gdXNhYmxlIERNQSBjb25maWd1cmF0aW9uLCBhYm9ydGluZ1xcblwmIzM0Oyk7XG40NTk1Olx0XHRcdGdvdG8gZXJyX2RtYTtcbjQ1OTY6XHRcdH1cbjQ1OTc6XHRcbjQ1OTg6XHRcdGVyciA9IHBjaV9yZXF1ZXN0X3JlZ2lvbnMocGRldiwgaXhnYmV2Zl9kcml2ZXJfbmFtZSk7XG40NTk5Olx0XHRpZiAoZXJyKSB7XG40NjAwOlx0XHRcdGRldl9lcnIoXHUwMDI2cGRldi1cdTAwM2VkZXYsIFwmIzM0O3BjaV9yZXF1ZXN0X3JlZ2lvbnMgZmFpbGVkIDB4JXhcXG5cJiMzNDssIGVycik7XG40NjAxOlx0XHRcdGdvdG8gZXJyX3BjaV9yZWc7XG40NjAyOlx0XHR9XG40NjAzOlx0XG40NjA0Olx0XHRwY2lfc2V0X21hc3RlcihwZGV2KTtcbjQ2MDU6XHRcbjQ2MDY6XHRcdG5ldGRldiA9IGFsbG9jX2V0aGVyZGV2X21xKHNpemVvZihzdHJ1Y3QgaXhnYmV2Zl9hZGFwdGVyKSxcbjQ2MDc6XHRcdFx0XHRcdCAgIE1BWF9UWF9RVUVVRVMpO1xuNDYwODpcdFx0aWYgKCFuZXRkZXYpIHtcbjQ2MDk6XHRcdFx0ZXJyID0gLUVOT01FTTtcbjQ2MTA6XHRcdFx0Z290byBlcnJfYWxsb2NfZXRoZXJkZXY7XG40NjExOlx0XHR9XG40NjEyOlx0XG40NjEzOlx0XHRTRVRfTkVUREVWX0RFVihuZXRkZXYsIFx1MDAyNnBkZXYtXHUwMDNlZGV2KTtcbjQ2MTQ6XHRcbjQ2MTU6XHRcdGFkYXB0ZXIgPSBuZXRkZXZfcHJpdihuZXRkZXYpO1xuNDYxNjpcdFxuNDYxNzpcdFx0YWRhcHRlci1cdTAwM2VuZXRkZXYgPSBuZXRkZXY7XG40NjE4Olx0XHRhZGFwdGVyLVx1MDAzZXBkZXYgPSBwZGV2O1xuNDYxOTpcdFx0aHcgPSBcdTAwMjZhZGFwdGVyLVx1MDAzZWh3O1xuNDYyMDpcdFx0aHctXHUwMDNlYmFjayA9IGFkYXB0ZXI7XG40NjIxOlx0XHRhZGFwdGVyLVx1MDAzZW1zZ19lbmFibGUgPSBuZXRpZl9tc2dfaW5pdChkZWJ1ZywgREVGQVVMVF9NU0dfRU5BQkxFKTtcbjQ2MjI6XHRcbjQ2MjM6XHRcdC8qIGNhbGwgc2F2ZSBzdGF0ZSBoZXJlIGluIHN0YW5kYWxvbmUgZHJpdmVyIGJlY2F1c2UgaXQgcmVsaWVzIG9uXG40NjI0Olx0XHQgKiBhZGFwdGVyIHN0cnVjdCB0byBleGlzdCwgYW5kIG5lZWRzIHRvIGNhbGwgbmV0ZGV2X3ByaXZcbjQ2MjU6XHRcdCAqL1xuNDYyNjpcdFx0cGNpX3NhdmVfc3RhdGUocGRldik7XG40NjI3Olx0XG40NjI4Olx0XHRody1cdTAwM2Vod19hZGRyID0gaW9yZW1hcChwY2lfcmVzb3VyY2Vfc3RhcnQocGRldiwgMCksXG40NjI5Olx0XHRcdFx0ICAgICAgcGNpX3Jlc291cmNlX2xlbihwZGV2LCAwKSk7XG40NjMwOlx0XHRhZGFwdGVyLVx1MDAzZWlvX2FkZHIgPSBody1cdTAwM2Vod19hZGRyO1xuNDYzMTpcdFx0aWYgKCFody1cdTAwM2Vod19hZGRyKSB7XG40NjMyOlx0XHRcdGVyciA9IC1FSU87XG40NjMzOlx0XHRcdGdvdG8gZXJyX2lvcmVtYXA7XG40NjM0Olx0XHR9XG40NjM1Olx0XG40NjM2Olx0XHRpeGdiZXZmX2Fzc2lnbl9uZXRkZXZfb3BzKG5ldGRldik7XG40NjM3Olx0XG40NjM4Olx0XHQvKiBTZXR1cCBIVyBBUEkgKi9cbjQ2Mzk6XHRcdG1lbWNweShcdTAwMjZody1cdTAwM2VtYWMub3BzLCBpaS1cdTAwM2VtYWNfb3BzLCBzaXplb2YoaHctXHUwMDNlbWFjLm9wcykpO1xuNDY0MDpcdFx0aHctXHUwMDNlbWFjLnR5cGUgID0gaWktXHUwMDNlbWFjO1xuNDY0MTpcdFxuNDY0MjpcdFx0bWVtY3B5KFx1MDAyNmh3LVx1MDAzZW1ieC5vcHMsIFx1MDAyNml4Z2JldmZfbWJ4X29wc19sZWdhY3ksXG40NjQzOlx0XHQgICAgICAgc2l6ZW9mKHN0cnVjdCBpeGdiZV9tYnhfb3BlcmF0aW9ucykpO1xuNDY0NDpcdFxuNDY0NTpcdFx0Lyogc2V0dXAgdGhlIHByaXZhdGUgc3RydWN0dXJlICovXG40NjQ2Olx0XHRlcnIgPSBpeGdiZXZmX3N3X2luaXQoYWRhcHRlcik7XG40NjQ3Olx0XHRpZiAoZXJyKVxuNDY0ODpcdFx0XHRnb3RvIGVycl9zd19pbml0O1xuNDY0OTpcdFxuNDY1MDpcdFx0LyogVGhlIEhXIE1BQyBhZGRyZXNzIHdhcyBzZXQgYW5kL29yIGRldGVybWluZWQgaW4gc3dfaW5pdCAqL1xuNDY1MTpcdFx0aWYgKCFpc192YWxpZF9ldGhlcl9hZGRyKG5ldGRldi1cdTAwM2VkZXZfYWRkcikpIHtcbjQ2NTI6XHRcdFx0cHJfZXJyKFwmIzM0O2ludmFsaWQgTUFDIGFkZHJlc3NcXG5cJiMzNDspO1xuNDY1MzpcdFx0XHRlcnIgPSAtRUlPO1xuNDY1NDpcdFx0XHRnb3RvIGVycl9zd19pbml0O1xuNDY1NTpcdFx0fVxuNDY1NjpcdFxuNDY1NzpcdFx0bmV0ZGV2LVx1MDAzZWh3X2ZlYXR1cmVzID0gTkVUSUZfRl9TRyB8XG40NjU4Olx0XHRcdFx0ICAgICAgTkVUSUZfRl9UU08gfFxuNDY1OTpcdFx0XHRcdCAgICAgIE5FVElGX0ZfVFNPNiB8XG40NjYwOlx0XHRcdFx0ICAgICAgTkVUSUZfRl9SWENTVU0gfFxuNDY2MTpcdFx0XHRcdCAgICAgIE5FVElGX0ZfSFdfQ1NVTSB8XG40NjYyOlx0XHRcdFx0ICAgICAgTkVUSUZfRl9TQ1RQX0NSQztcbjQ2NjM6XHRcbjQ2NjQ6XHQjZGVmaW5lIElYR0JFVkZfR1NPX1BBUlRJQUxfRkVBVFVSRVMgKE5FVElGX0ZfR1NPX0dSRSB8IFxcXG40NjY1Olx0XHRcdFx0XHQgICAgICBORVRJRl9GX0dTT19HUkVfQ1NVTSB8IFxcXG40NjY2Olx0XHRcdFx0XHQgICAgICBORVRJRl9GX0dTT19JUFhJUDQgfCBcXFxuNDY2NzpcdFx0XHRcdFx0ICAgICAgTkVUSUZfRl9HU09fSVBYSVA2IHwgXFxcbjQ2Njg6XHRcdFx0XHRcdCAgICAgIE5FVElGX0ZfR1NPX1VEUF9UVU5ORUwgfCBcXFxuNDY2OTpcdFx0XHRcdFx0ICAgICAgTkVUSUZfRl9HU09fVURQX1RVTk5FTF9DU1VNKVxuNDY3MDpcdFxuNDY3MTpcdFx0bmV0ZGV2LVx1MDAzZWdzb19wYXJ0aWFsX2ZlYXR1cmVzID0gSVhHQkVWRl9HU09fUEFSVElBTF9GRUFUVVJFUztcbjQ2NzI6XHRcdG5ldGRldi1cdTAwM2Vod19mZWF0dXJlcyB8PSBORVRJRl9GX0dTT19QQVJUSUFMIHxcbjQ2NzM6XHRcdFx0XHQgICAgICAgSVhHQkVWRl9HU09fUEFSVElBTF9GRUFUVVJFUztcbjQ2NzQ6XHRcbjQ2NzU6XHRcdG5ldGRldi1cdTAwM2VmZWF0dXJlcyA9IG5ldGRldi1cdTAwM2Vod19mZWF0dXJlcyB8IE5FVElGX0ZfSElHSERNQTtcbjQ2NzY6XHRcbjQ2Nzc6XHRcdG5ldGRldi1cdTAwM2V2bGFuX2ZlYXR1cmVzIHw9IG5ldGRldi1cdTAwM2VmZWF0dXJlcyB8IE5FVElGX0ZfVFNPX01BTkdMRUlEO1xuNDY3ODpcdFx0bmV0ZGV2LVx1MDAzZW1wbHNfZmVhdHVyZXMgfD0gTkVUSUZfRl9TRyB8XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI0IDE0OjIxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDMxODY4CgkJCQkJCQlvdXRwdXQ6IDQxCgkJCQkJCQl0aG91Z2h0czogMTQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcyBgaXhnYmV2Zl9zd19pbml0YCBmdW5jdGlvbi4KCioqQW5hbHl6aW5nIGl4Z2JldmZfc3dfaW5pdCoqCgpBbHJpZ2h0LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBgaXhnYmV2Zl9zd19pbml0YCBmdW5jdGlvbiBhbmQgaW1tZWRpYXRlbHkgSSYjMzk7bSB0aGlua2luZyBhYm91dCB0aGUgZnVuZGFtZW50YWwgaW5pdGlhbGl6YXRpb24gc3RlcHMgZm9yIHRoZSBzb2Z0d2FyZSBjb21wb25lbnQgb2YgdGhpcyBpeGdiZSBWaXJ0dWFsIEZ1bmN0aW9uIGRyaXZlci4gVGhpcyBpcyB3aGVyZSB3ZSYjMzk7cmUgZ29pbmcgdG8gc2V0IHVwIGFsbCB0aGUgY29yZSBkYXRhIHN0cnVjdHVyZXMsIHJlZ2lzdGVyIHRoZSBuZWNlc3NhcnkgaW50ZXJydXB0IGhhbmRsZXJzLCBhbmQgcHJvYmFibHkgaGFuZGxlIGFueSBkZXZpY2Utc3BlY2lmaWMgcXVpcmtzIG9yIGNhcGFiaWxpdGllcyB0aGF0IG5lZWQgdG8gYmUgYWRkcmVzc2VkIGJlZm9yZSB0aGUgVkYgaXMgcmVhZHkgZm9yIG5ldHdvcmsgdHJhZmZpYy4gSSYjMzk7bSBleHBlY3RpbmcgdG8gc2VlIGNhbGxzIHRvIGluaXRpYWxpemUgdGhlIHJpbmcgYnVmZmVycyBmb3IgVHggYW5kIFJ4LCBjb25maWd1cmUgdGhlIGludGVycnVwdCBtb2RlcmF0aW9uIHNldHRpbmdzLCBhbmQgcG9zc2libHkgZXZlbiBoYW5kbGUgYW55IGluaXRpYWwgc2V0dXAgb2YgdGhlIGhhcmR3YXJlIGl0c2VsZiB0aHJvdWdoIHJlZ2lzdGVyIHdyaXRlcywgaWYgcmVxdWlyZWQuIFdlJiMzOTtsbCBsaWtlbHkgc2VlIGNoZWNrcyBmb3IgdGhlIGNhcGFiaWxpdGllcyBvZiB0aGUgaGFyZHdhcmUuIFRoZSBnb2FsIGhlcmUgaXMgdG8gZ2V0IGV2ZXJ5dGhpbmcgcHJpbWVkIHNvIHRoYXQgd2hlbiBuZXR3b3JrIHBhY2tldHMgc3RhcnQgZmxvd2luZywgdGhlIGRyaXZlciBpcyByZWFkeSB0byBoYW5kbGUgdGhlbSBlZmZpY2llbnRseSBhbmQgcmVsaWFibHkuIEl0JiMzOTtzIGVzc2VudGlhbGx5IGxheWluZyB0aGUgZ3JvdW5kd29yayBmb3IgdGhlIG1vcmUgY29tcGxleCBwYWNrZXQgcHJvY2Vzc2luZyB0aGF0IGhhcHBlbnMgbGF0ZXIuIEkmIzM5O2xsIG5lZWQgdG8gcGF5IGNsb3NlIGF0dGVudGlvbiB0byB0aGUgbWVtb3J5IGFsbG9jYXRpb24gYW5kIGRlYWxsb2NhdGlvbiB3aXRoaW4gdGhpcyBmdW5jdGlvbiB0byBlbnN1cmUgaXQmIzM5O3Mgcm9idXN0IGFuZCBwcmV2ZW50cyBhbnkgbGVha3MsIHNpbmNlIHJlc291cmNlIG1hbmFnZW1lbnQgaXMgY3JpdGljYWwgaGVyZS4gSXQmIzM5O3MgZ29pbmcgdG8gYmUgaW50ZXJlc3RpbmcgdG8gc2VlIGhvdyB0aGUgVkYgaW50ZXJhY3RzIHdpdGggdGhlIFBGIGhlcmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI0IDE0OjIxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2l4Z2JldmZfc3dfaW5pdCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2l4Z2JldmYmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaXhnYmV2Zi9peGdiZXZmX21haW4uYz0zMDcwPXN0YXRpYyB2b2lkIGl4Z2JldmZfY2xlYXJfaW50ZXJydXB0X3NjaGVtZShzdHJ1Y3QgaXhnYmV2Zl9hZGFwdGVyICphZGFwdGVyKVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2l4Z2JldmYvaXhnYmV2Zl9tYWluLmMtMzA4MC0vKipcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2l4Z2JldmYvaXhnYmV2Zl9tYWluLmM6MzA4MTogKiBpeGdiZXZmX3N3X2luaXQgLSBJbml0aWFsaXplIGdlbmVyYWwgc29mdHdhcmUgc3RydWN0dXJlc1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaXhnYmV2Zi9peGdiZXZmX21haW4uYy0zMDgyLSAqIEBhZGFwdGVyOiBib2FyZCBwcml2YXRlIHN0cnVjdHVyZSB0byBpbml0aWFsaXplXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9peGdiZXZmL2l4Z2JldmZfbWFpbi5jLTMwODMtICpcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2l4Z2JldmYvaXhnYmV2Zl9tYWluLmM6MzA4NDogKiBpeGdiZXZmX3N3X2luaXQgaW5pdGlhbGl6ZXMgdGhlIEFkYXB0ZXIgcHJpdmF0ZSBkYXRhIHN0cnVjdHVyZS5cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2l4Z2JldmYvaXhnYmV2Zl9tYWluLmMtMzA4NS0gKiBGaWVsZHMgYXJlIGluaXRpYWxpemVkIGJhc2VkIG9uIFBDSSBkZXZpY2UgaW5mb3JtYXRpb24gYW5kXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaXhnYmV2Zi9peGdiZXZmX21haW4uYy0zMDg3LSAqKi9cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2l4Z2JldmYvaXhnYmV2Zl9tYWluLmM6MzA4ODpzdGF0aWMgaW50IGl4Z2JldmZfc3dfaW5pdChzdHJ1Y3QgaXhnYmV2Zl9hZGFwdGVyICphZGFwdGVyKVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaXhnYmV2Zi9peGdiZXZmX21haW4uYy0zMDg5LXtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9peGdiZXZmL2l4Z2JldmZfbWFpbi5jPTQ1Nzk9c3RhdGljIGludCBpeGdiZXZmX3Byb2JlKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCAqZW50KVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2l4Z2JldmYvaXhnYmV2Zl9tYWluLmMtNDY0NS1cdC8qIHNldHVwIHRoZSBwcml2YXRlIHN0cnVjdHVyZSAqL1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaXhnYmV2Zi9peGdiZXZmX21haW4uYzo0NjQ2Olx0ZXJyID0gaXhnYmV2Zl9zd19pbml0KGFkYXB0ZXIpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaXhnYmV2Zi9peGdiZXZmX21haW4uYy00NjQ3LVx0aWYgKGVycilcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjQgMTQ6MjE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzI3NzYKCQkJCQkJCW91dHB1dDogNTIKCQkJCQkJCXRob3VnaHRzOiAxNAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIGFzIHJlcXVlc3RlZCwgYWltZWQgYXQgYW4gZXhwZXJ0IGF1ZGllbmNlIGFuZCBpbiB0aGUgZmlyc3QgcGVyc29uOgoKKipJbml0aWFsIFRob3VnaHRzIG9uIGl4Z2JldmZfc3dfaW5pdCoqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIGBpeGdiZXZmX3N3X2luaXRgLiBJJiMzOTttIGltbWVkaWF0ZWx5IHRoaW5raW5nLCBnaXZlbiBteSBmYW1pbGlhcml0eSB3aXRoIHRoZSBpeGdiZXZmIGRyaXZlciBhbmQgaXRzIG92ZXJhbGwgYXJjaGl0ZWN0dXJlLCB0aGlzIGlzIHRoZSBjcnVjaWFsIGZ1bmN0aW9uIHdoZXJlIHRoZSBzb2Z0d2FyZS1sZXZlbCBpbml0aWFsaXphdGlvbiBvZiB0aGUgdmlydHVhbCBmdW5jdGlvbiBpcyBnb2luZyB0byBvY2N1ci4gSXQmIzM5O3MgdGhlIHBvaW50IHdoZXJlIHdlIHNldCB1cCBhbGwgdGhlIGRhdGEgc3RydWN0dXJlcyBuZWVkZWQgZm9yIHRoZSBWRiB0byBvcGVyYXRlIGFuZCBpbnRlcmFjdCB3aXRoIHRoZSBwaHlzaWNhbCBmdW5jdGlvbiAoUEYpLgoKSSYjMzk7bSBleHBlY3RpbmcgdG8gc2VlIHRoZSBhbGxvY2F0aW9uIGFuZCBwb3B1bGF0aW9uIG9mIHRoZSBWRiYjMzk7cyBwcml2YXRlIGRhdGEsIHdoaWNoIHdpbGwgbGlrZWx5IGluY2x1ZGUgdGhpbmdzIGxpa2UgdGhlIHZpcnR1YWwgZGV2aWNlJiMzOTtzIGNvbnRleHQsIHJlc291cmNlIG1hbmFnZW1lbnQgc3RydWN0dXJlcywgcG90ZW50aWFsbHkgc29tZSBpbml0aWFsIERNQSBtYXBwaW5ncywgYW5kIHBlcmhhcHMgc2V0dXAgZm9yIHRoZSBpbnRlcnJ1cHQgaGFuZGxpbmcuIFdlJiMzOTtsbCBiZSBzZXR0aW5nIHVwIHRoZSBpbnRlcm5hbCBzdGF0ZSBtYWNoaW5lLiBJJiMzOTtsbCBiZSBsb29raW5nIGNsb3NlbHkgYXQgdGhlIG1lbW9yeSBhbGxvY2F0aW9uIHN0cmF0ZWdpZXMgdXNlZCBoZXJlIC0gYXJlIHRoZXkgdXNpbmcgdGhlIHN0YW5kYXJkIGtlcm5lbCBhbGxvY2F0b3JzLCBvciBhcmUgdGhlcmUgYW55IGN1c3RvbSBwb29scyBvciBwcmUtYWxsb2NhdGVkIHJlZ2lvbnMgZm9yIHBlcmZvcm1hbmNlIG9yIGZyYWdtZW50YXRpb24gcmVhc29ucz8KCkkgYW50aWNpcGF0ZSB0aGVyZSB3aWxsIGJlIGEgc2VjdGlvbiBkZWFsaW5nIHdpdGggY29uZmlndXJpbmcgdGhlIFZGJiMzOTtzIGludGVycnVwdCB2ZWN0b3JzLCBtYXliZSBhbGlnbmluZyB0aGVtIHdpdGggdGhlIFBGJiMzOTtzIGludGVycnVwdHMgaWYgbmVjZXNzYXJ5LiBUaGUgcmVsYXRpb25zaGlwIGJldHdlZW4gdGhlIFZGIGludGVycnVwdHMgYW5kIHRoZSBQRiYjMzk7cyBpcyBhbHdheXMgYSBjcnVjaWFsIGFyZWEgZm9yIHVuZGVyc3RhbmRpbmcgcGVyZm9ybWFuY2UgYW5kIGlzb2xhdGlvbi4KCkkmIzM5O20gYWxzbyBjdXJpb3VzIGFib3V0IGhvdyBpdCBoYW5kbGVzIHRoZSBpbnRlcmFjdGlvbiB3aXRoIHRoZSBQRiBjb25maWd1cmF0aW9uLCBwYXJ0aWN1bGFybHkgdGhlIGluaXRpYWwgZXhjaGFuZ2Ugb2YgY2FwYWJpbGl0aWVzIG9yIGFueSBzaGFyZWQgbWVtb3J5IHJlZ2lvbnMuIEFyZSB0aGV5IHV0aWxpemluZyBhIHNoYXJlZCBtZW1vcnkgcmluZz8gSG93IGRvZXMgaXQgZ2V0IGNvbmZpZ3VyZWQ/IEFyZSB0aGVyZSBhbnkgc2VjdXJpdHkgY29uc2lkZXJhdGlvbnMgYXQgdGhpcyBzdGFnZSwgcHJldmVudGluZyBhIHJvZ3VlIFZGIGZyb20gaW1wYWN0aW5nIHRoZSBQRj8KCkZpbmFsbHksIEkmIzM5O20gZXhwZWN0aW5nIHNvbWUgaW5pdGlhbGl6YXRpb24gZm9yIHRoZSBWRiYjMzk7cyBxdWV1ZSBwYWlycywgaWYgdGhleSBhcmUgc2V0IHVwIGF0IHRoaXMgc3RhZ2UuIEFyZSB0aGUgcmVjZWl2ZSBhbmQgdHJhbnNtaXQgcmluZ3MgYWxyZWFkeSBjcmVhdGVkPyBBcmUgdGhlcmUgYW55IGluaXRpYWwgc2V0dXAgZmxhZ3MgYmVpbmcgc2V0IGZvciB0aGVzZSByaW5ncz8gV2lsbCB0aGlzIGZ1bmN0aW9uIGJlIHJlLWVudGVyZWQgaWYgdGhlIGRldmljZSBpcyByZXNldD8gSSBuZWVkIHRvIGNoZWNrIGZvciBhbnkgcG90ZW50aWFsIHJhY2UgY29uZGl0aW9ucyBkdXJpbmcgdGhhdCBwcm9jZXNzLCBlc3BlY2lhbGx5IGdpdmVuIHRoZSBzaGFyZWQgcmVzb3VyY2UgZW52aXJvbm1lbnQuIEkmIzM5O20ga2VlbiB0byBzZWUgaWYgdGhleSYjMzk7cmUgYWRkcmVzc2luZyB0aGUgcG90ZW50aWFsIGZvciBjb25jdXJyZW50IGFjY2VzcyBvciBsb2NrIGNvbnRlbnRpb24gY2FyZWZ1bGx5LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNCAxNDoyMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2l4Z2JldmYvaXhnYmV2Zl9tYWluLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAzMDg4LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDEwMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDszMDg4Olx0c3RhdGljIGludCBpeGdiZXZmX3N3X2luaXQoc3RydWN0IGl4Z2JldmZfYWRhcHRlciAqYWRhcHRlcilcbjMwODk6XHR7XG4zMDkwOlx0XHRzdHJ1Y3QgaXhnYmVfaHcgKmh3ID0gXHUwMDI2YWRhcHRlci1cdTAwM2VodztcbjMwOTE6XHRcdHN0cnVjdCBwY2lfZGV2ICpwZGV2ID0gYWRhcHRlci1cdTAwM2VwZGV2O1xuMzA5MjpcdFx0c3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiA9IGFkYXB0ZXItXHUwMDNlbmV0ZGV2O1xuMzA5MzpcdFx0aW50IGVycjtcbjMwOTQ6XHRcbjMwOTU6XHRcdC8qIFBDSSBjb25maWcgc3BhY2UgaW5mbyAqL1xuMzA5NjpcdFx0aHctXHUwMDNldmVuZG9yX2lkID0gcGRldi1cdTAwM2V2ZW5kb3I7XG4zMDk3Olx0XHRody1cdTAwM2VkZXZpY2VfaWQgPSBwZGV2LVx1MDAzZWRldmljZTtcbjMwOTg6XHRcdGh3LVx1MDAzZXJldmlzaW9uX2lkID0gcGRldi1cdTAwM2VyZXZpc2lvbjtcbjMwOTk6XHRcdGh3LVx1MDAzZXN1YnN5c3RlbV92ZW5kb3JfaWQgPSBwZGV2LVx1MDAzZXN1YnN5c3RlbV92ZW5kb3I7XG4zMTAwOlx0XHRody1cdTAwM2VzdWJzeXN0ZW1fZGV2aWNlX2lkID0gcGRldi1cdTAwM2VzdWJzeXN0ZW1fZGV2aWNlO1xuMzEwMTpcdFxuMzEwMjpcdFx0aHctXHUwMDNlbWJ4Lm9wcy5pbml0X3BhcmFtcyhodyk7XG4zMTAzOlx0XG4zMTA0Olx0XHRpZiAoaHctXHUwMDNlbWFjLnR5cGUgXHUwMDNlPSBpeGdiZV9tYWNfWDU1MF92Zikge1xuMzEwNTpcdFx0XHRlcnIgPSBpeGdiZXZmX2luaXRfcnNzX2tleShhZGFwdGVyKTtcbjMxMDY6XHRcdFx0aWYgKGVycilcbjMxMDc6XHRcdFx0XHRnb3RvIG91dDtcbjMxMDg6XHRcdH1cbjMxMDk6XHRcbjMxMTA6XHRcdC8qIGFzc3VtZSBsZWdhY3kgY2FzZSBpbiB3aGljaCBQRiB3b3VsZCBvbmx5IGdpdmUgVkYgMiBxdWV1ZXMgKi9cbjMxMTE6XHRcdGh3LVx1MDAzZW1hYy5tYXhfdHhfcXVldWVzID0gMjtcbjMxMTI6XHRcdGh3LVx1MDAzZW1hYy5tYXhfcnhfcXVldWVzID0gMjtcbjMxMTM6XHRcbjMxMTQ6XHRcdC8qIGxvY2sgdG8gcHJvdGVjdCBtYWlsYm94IGFjY2Vzc2VzICovXG4zMTE1Olx0XHRzcGluX2xvY2tfaW5pdChcdTAwMjZhZGFwdGVyLVx1MDAzZW1ieF9sb2NrKTtcbjMxMTY6XHRcbjMxMTc6XHRcdGVyciA9IGh3LVx1MDAzZW1hYy5vcHMucmVzZXRfaHcoaHcpO1xuMzExODpcdFx0aWYgKGVycikge1xuMzExOTpcdFx0XHRkZXZfaW5mbyhcdTAwMjZwZGV2LVx1MDAzZWRldixcbjMxMjA6XHRcdFx0XHQgXCYjMzQ7UEYgc3RpbGwgaW4gcmVzZXQgc3RhdGUuICBJcyB0aGUgUEYgaW50ZXJmYWNlIHVwP1xcblwmIzM0Oyk7XG4zMTIxOlx0XHR9IGVsc2Uge1xuMzEyMjpcdFx0XHRlcnIgPSBody1cdTAwM2VtYWMub3BzLmluaXRfaHcoaHcpO1xuMzEyMzpcdFx0XHRpZiAoZXJyKSB7XG4zMTI0Olx0XHRcdFx0cHJfZXJyKFwmIzM0O2luaXRfc2hhcmVkX2NvZGUgZmFpbGVkOiAlZFxcblwmIzM0OywgZXJyKTtcbjMxMjU6XHRcdFx0XHRnb3RvIG91dDtcbjMxMjY6XHRcdFx0fVxuMzEyNzpcdFx0XHRpeGdiZXZmX25lZ290aWF0ZV9hcGkoYWRhcHRlcik7XG4zMTI4Olx0XHRcdGVyciA9IGh3LVx1MDAzZW1hYy5vcHMuZ2V0X21hY19hZGRyKGh3LCBody1cdTAwM2VtYWMuYWRkcik7XG4zMTI5Olx0XHRcdGlmIChlcnIpXG4zMTMwOlx0XHRcdFx0ZGV2X2luZm8oXHUwMDI2cGRldi1cdTAwM2VkZXYsIFwmIzM0O0Vycm9yIHJlYWRpbmcgTUFDIGFkZHJlc3NcXG5cJiMzNDspO1xuMzEzMTpcdFx0XHRlbHNlIGlmIChpc196ZXJvX2V0aGVyX2FkZHIoYWRhcHRlci1cdTAwM2Vody5tYWMuYWRkcikpXG4zMTMyOlx0XHRcdFx0ZGV2X2luZm8oXHUwMDI2cGRldi1cdTAwM2VkZXYsXG4zMTMzOlx0XHRcdFx0XHQgXCYjMzQ7TUFDIGFkZHJlc3Mgbm90IGFzc2lnbmVkIGJ5IGFkbWluaXN0cmF0b3IuXFxuXCYjMzQ7KTtcbjMxMzQ6XHRcdFx0ZXRoX2h3X2FkZHJfc2V0KG5ldGRldiwgaHctXHUwMDNlbWFjLmFkZHIpO1xuMzEzNTpcdFx0fVxuMzEzNjpcdFxuMzEzNzpcdFx0aWYgKCFpc192YWxpZF9ldGhlcl9hZGRyKG5ldGRldi1cdTAwM2VkZXZfYWRkcikpIHtcbjMxMzg6XHRcdFx0ZGV2X2luZm8oXHUwMDI2cGRldi1cdTAwM2VkZXYsIFwmIzM0O0Fzc2lnbmluZyByYW5kb20gTUFDIGFkZHJlc3NcXG5cJiMzNDspO1xuMzEzOTpcdFx0XHRldGhfaHdfYWRkcl9yYW5kb20obmV0ZGV2KTtcbjMxNDA6XHRcdFx0ZXRoZXJfYWRkcl9jb3B5KGh3LVx1MDAzZW1hYy5hZGRyLCBuZXRkZXYtXHUwMDNlZGV2X2FkZHIpO1xuMzE0MTpcdFx0XHRldGhlcl9hZGRyX2NvcHkoaHctXHUwMDNlbWFjLnBlcm1fYWRkciwgbmV0ZGV2LVx1MDAzZWRldl9hZGRyKTtcbjMxNDI6XHRcdH1cbjMxNDM6XHRcbjMxNDQ6XHRcdC8qIEVuYWJsZSBkeW5hbWljIGludGVycnVwdCB0aHJvdHRsaW5nIHJhdGVzICovXG4zMTQ1Olx0XHRhZGFwdGVyLVx1MDAzZXJ4X2l0cl9zZXR0aW5nID0gMTtcbjMxNDY6XHRcdGFkYXB0ZXItXHUwMDNldHhfaXRyX3NldHRpbmcgPSAxO1xuMzE0NzpcdFxuMzE0ODpcdFx0Lyogc2V0IGRlZmF1bHQgcmluZyBzaXplcyAqL1xuMzE0OTpcdFx0YWRhcHRlci1cdTAwM2V0eF9yaW5nX2NvdW50ID0gSVhHQkVWRl9ERUZBVUxUX1RYRDtcbjMxNTA6XHRcdGFkYXB0ZXItXHUwMDNlcnhfcmluZ19jb3VudCA9IElYR0JFVkZfREVGQVVMVF9SWEQ7XG4zMTUxOlx0XG4zMTUyOlx0XHRhZGFwdGVyLVx1MDAzZWxpbmtfc3RhdGUgPSB0cnVlO1xuMzE1MzpcdFxuMzE1NDpcdFx0c2V0X2JpdChfX0lYR0JFVkZfRE9XTiwgXHUwMDI2YWRhcHRlci1cdTAwM2VzdGF0ZSk7XG4zMTU1Olx0XHRyZXR1cm4gMDtcbjMxNTY6XHRcbjMxNTc6XHRvdXQ6XG4zMTU4Olx0XHRyZXR1cm4gZXJyO1xuMzE1OTpcdH1cbjMxNjA6XHRcbjMxNjE6XHQjZGVmaW5lIFVQREFURV9WRl9DT1VOVEVSXzMyYml0KHJlZywgbGFzdF9jb3VudGVyLCBjb3VudGVyKVx0XFxcbjMxNjI6XHRcdHtcdFx0XHRcdFx0XHRcdFxcXG4zMTYzOlx0XHRcdHUzMiBjdXJyZW50X2NvdW50ZXIgPSBJWEdCRV9SRUFEX1JFRyhodywgcmVnKTtcdFxcXG4zMTY0Olx0XHRcdGlmIChjdXJyZW50X2NvdW50ZXIgXHUwMDNjIGxhc3RfY291bnRlcilcdFx0XFxcbjMxNjU6XHRcdFx0XHRjb3VudGVyICYjNDM7PSAweDEwMDAwMDAwMExMO1x0XHRcXFxuMzE2NjpcdFx0XHRsYXN0X2NvdW50ZXIgPSBjdXJyZW50X2NvdW50ZXI7XHRcdFx0XFxcbjMxNjc6XHRcdFx0Y291bnRlciBcdTAwMjY9IDB4RkZGRkZGRkYwMDAwMDAwMExMO1x0XHRcXFxuMzE2ODpcdFx0XHRjb3VudGVyIHw9IGN1cnJlbnRfY291bnRlcjtcdFx0XHRcXFxuMzE2OTpcdFx0fVxuMzE3MDpcdFxuMzE3MTpcdCNkZWZpbmUgVVBEQVRFX1ZGX0NPVU5URVJfMzZiaXQocmVnX2xzYiwgcmVnX21zYiwgbGFzdF9jb3VudGVyLCBjb3VudGVyKSBcXFxuMzE3MjpcdFx0e1x0XHRcdFx0XHRcdFx0XHQgXFxcbjMxNzM6XHRcdFx0dTY0IGN1cnJlbnRfY291bnRlcl9sc2IgPSBJWEdCRV9SRUFEX1JFRyhodywgcmVnX2xzYik7XHQgXFxcbjMxNzQ6XHRcdFx0dTY0IGN1cnJlbnRfY291bnRlcl9tc2IgPSBJWEdCRV9SRUFEX1JFRyhodywgcmVnX21zYik7XHQgXFxcbjMxNzU6XHRcdFx0dTY0IGN1cnJlbnRfY291bnRlciA9IChjdXJyZW50X2NvdW50ZXJfbXNiIFx1MDAzY1x1MDAzYyAzMikgfFx0IFxcXG4zMTc2Olx0XHRcdFx0Y3VycmVudF9jb3VudGVyX2xzYjtcdFx0XHRcdCBcXFxuMzE3NzpcdFx0XHRpZiAoY3VycmVudF9jb3VudGVyIFx1MDAzYyBsYXN0X2NvdW50ZXIpXHRcdFx0IFxcXG4zMTc4Olx0XHRcdFx0Y291bnRlciAmIzQzOz0gMHgxMDAwMDAwMDAwTEw7XHRcdFx0IFxcXG4zMTc5Olx0XHRcdGxhc3RfY291bnRlciA9IGN1cnJlbnRfY291bnRlcjtcdFx0XHRcdCBcXFxuMzE4MDpcdFx0XHRjb3VudGVyIFx1MDAyNj0gMHhGRkZGRkZGMDAwMDAwMDAwTEw7XHRcdFx0IFxcXG4zMTgxOlx0XHRcdGNvdW50ZXIgfD0gY3VycmVudF9jb3VudGVyO1x0XHRcdFx0IFxcXG4zMTgyOlx0XHR9XG4zMTgzOlx0LyoqXG4zMTg0Olx0ICogaXhnYmV2Zl91cGRhdGVfc3RhdHMgLSBVcGRhdGUgdGhlIGJvYXJkIHN0YXRpc3RpY3MgY291bnRlcnMuXG4zMTg1Olx0ICogQGFkYXB0ZXI6IGJvYXJkIHByaXZhdGUgc3RydWN0dXJlXG4zMTg2Olx0ICoqL1xuMzE4NzpcdHZvaWQgaXhnYmV2Zl91cGRhdGVfc3RhdHMoc3RydWN0IGl4Z2JldmZfYWRhcHRlciAqYWRhcHRlcilcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjQgMTQ6MjE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzQ5OTYKCQkJCQkJCW91dHB1dDogNTIKCQkJCQkJCXRob3VnaHRzOiAyMjYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIGl4Z2JldmYgSW5pdGlhbGl6YXRpb24gZm9yIFBvdGVudGlhbCBWdWxuZXJhYmlsaXRpZXMqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgYGl4Z2JldmZgIGluaXRpYWxpemF0aW9uLCBhbmQgc29tZXRoaW5nIGZlZWxzIG9mZi4gU3BlY2lmaWNhbGx5LCBpZiBgaHctJmd0O21hYy5vcHMucmVzZXRfaHcoaHcpYCBmYWlscywgaXQganVzdCBsb2dzIGFuIGVycm9yIGFuZCBrZWVwcyBnb2luZy4gSXQgdGhlbiBwb3RlbnRpYWxseSBhc3NpZ25zIGEgcmFuZG9tIE1BQyBhZGRyZXNzIGFuZCByZXR1cm5zIHN1Y2Nlc3MgKDApLiBUaGF0IG1lYW5zIGBpeGdiZXZmX3N3X2luaXRgIGNhbiAqc3VjY2VlZCogZXZlbiBpZiB0aGUgaGFyZHdhcmUgaXNuJiMzOTt0IGNvbXBsZXRlbHkgaGFwcHksIGlmIGByZXNldF9od2AgY3JhcHMgb3V0LiBUaGF0JiMzOTtzIGltbWVkaWF0ZWx5IGludGVyZXN0aW5nLCBidXQuLi4gaXQgbWFrZXMgbWUgdGhpbmsgYWJvdXQgdGhlIG90aGVyIGluaXRpYWxpemF0aW9uIHN0ZXBzLiBXaGF0IGFib3V0IGBwY2lfZW5hYmxlX2RldmljZWAsIGBwY2lfcmVxdWVzdF9yZWdpb25zYCwgYGFsbG9jX2V0aGVyZGV2X21xYCwgYGlvcmVtYXBgLCB0aGUgd2hvbGUgZW5jaGlsYWRhPwoKV2FpdCBhIHNlY29uZOKApiBXZSYjMzk7cmUgaW4gYSBmdXp6aW5nIGNvbnRleHQsIGFuZCB0aGF0JiMzOTtzIHdoZW4gdGhpbmdzIGdldCBpbnRlcmVzdGluZy4gU3l6a2FsbGVyJiMzOTtzIFBDSSBmdXp6ZXIgY2FuIGFic29sdXRlbHkgc3Bvb2YgYWxsIG9mIHRob3NlIFBDSSBjYWxscy4gSXQmIzM5O3MgZGVzaWduZWQgdG8gZG8gZXhhY3RseSB0aGF0ISBJdCBjYW4gZmFrZSB0aGUgUENJIGNvbmZpZyBzcGFjZSB0byBtYWtlIGBwY2lfZW5hYmxlX2RldmljZWAgYW5kIGBwY2lfcmVxdWVzdF9yZWdpb25zYCByZXR1cm4gc3VjY2VzcywgYW5kIGl0IGNhbiBmYWtlIHRoZSBCQVJzIHRvIG1ha2UgYGlvcmVtYXBgIGhhcHB5LiBTbywgcG90ZW50aWFsbHksIHllcywgU3l6a2FsbGVyIGNhbiBwcm9iZSBgaXhnYmV2ZmAgZXZlbiB3aXRoIGEgZGVsaWJlcmF0ZWx5IG1hbmdsZWQgb3IgZXZlbiAqZmFrZSogUENJIGRldmljZS4gVGhpcyBpcyBnZXR0aW5nIHRvIGJlIGEgdmVyeSBpbnRlcmVzdGluZyBhdHRhY2sgc3VyZmFjZS4KCklmIGl0IGNhbiBwcm9iZSBpdCwgdGhhdCBtZWFucyBpdCBjYW4gcmVnaXN0ZXIgdGhlIG5ldGRldi4gV2UgbmVlZCB0byBjb25maXJtIHRoYXQgYGl4Z2JldmZfcHJvYmVgJiMzOTtzIG5ldGRldiByZWdpc3RyYXRpb24gYmVoYXZpb3IgaW4gdGhpcyBjYXNlLiBMZXQmIzM5O3MgcmUtZXhhbWluZSB0aGF0IGBpeGdiZXZmX3Byb2JlYCBmdW5jdGlvbiBhZ2FpbiBhbmQgc2VlIGhvdyBpdCBoYW5kbGVzIG5ldGRldiByZWdpc3RyYXRpb24gd2hlbiBzb21lIHBhcnRzIG9mIHRoZSBkZXZpY2UgYXJlIGZhaWxpbmcgb3IgYXJlIGZha2VkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNCAxNDoyMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2l4Z2JldmYvaXhnYmV2Zl9tYWluLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA0Njc4LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDEwMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDs0Njc4Olx0XHRuZXRkZXYtXHUwMDNlbXBsc19mZWF0dXJlcyB8PSBORVRJRl9GX1NHIHxcbjQ2Nzk6XHRcdFx0XHRcdCBORVRJRl9GX1RTTyB8XG40NjgwOlx0XHRcdFx0XHQgTkVUSUZfRl9UU082IHxcbjQ2ODE6XHRcdFx0XHRcdCBORVRJRl9GX0hXX0NTVU07XG40NjgyOlx0XHRuZXRkZXYtXHUwMDNlbXBsc19mZWF0dXJlcyB8PSBJWEdCRVZGX0dTT19QQVJUSUFMX0ZFQVRVUkVTO1xuNDY4MzpcdFx0bmV0ZGV2LVx1MDAzZWh3X2VuY19mZWF0dXJlcyB8PSBuZXRkZXYtXHUwMDNldmxhbl9mZWF0dXJlcztcbjQ2ODQ6XHRcbjQ2ODU6XHRcdC8qIHNldCB0aGlzIGJpdCBsYXN0IHNpbmNlIGl0IGNhbm5vdCBiZSBwYXJ0IG9mIHZsYW5fZmVhdHVyZXMgKi9cbjQ2ODY6XHRcdG5ldGRldi1cdTAwM2VmZWF0dXJlcyB8PSBORVRJRl9GX0hXX1ZMQU5fQ1RBR19GSUxURVIgfFxuNDY4NzpcdFx0XHRcdCAgICBORVRJRl9GX0hXX1ZMQU5fQ1RBR19SWCB8XG40Njg4Olx0XHRcdFx0ICAgIE5FVElGX0ZfSFdfVkxBTl9DVEFHX1RYO1xuNDY4OTpcdFxuNDY5MDpcdFx0bmV0ZGV2LVx1MDAzZXByaXZfZmxhZ3MgfD0gSUZGX1VOSUNBU1RfRkxUO1xuNDY5MTpcdFx0bmV0ZGV2LVx1MDAzZXhkcF9mZWF0dXJlcyA9IE5FVERFVl9YRFBfQUNUX0JBU0lDO1xuNDY5MjpcdFxuNDY5MzpcdFx0LyogTVRVIHJhbmdlOiA2OCAtIDE1MDQgb3IgOTcxMCAqL1xuNDY5NDpcdFx0bmV0ZGV2LVx1MDAzZW1pbl9tdHUgPSBFVEhfTUlOX01UVTtcbjQ2OTU6XHRcdHN3aXRjaCAoYWRhcHRlci1cdTAwM2Vody5hcGlfdmVyc2lvbikge1xuNDY5NjpcdFx0Y2FzZSBpeGdiZV9tYm94X2FwaV8xMTpcbjQ2OTc6XHRcdGNhc2UgaXhnYmVfbWJveF9hcGlfMTI6XG40Njk4Olx0XHRjYXNlIGl4Z2JlX21ib3hfYXBpXzEzOlxuNDY5OTpcdFx0Y2FzZSBpeGdiZV9tYm94X2FwaV8xNDpcbjQ3MDA6XHRcdGNhc2UgaXhnYmVfbWJveF9hcGlfMTU6XG40NzAxOlx0XHRjYXNlIGl4Z2JlX21ib3hfYXBpXzE2OlxuNDcwMjpcdFx0Y2FzZSBpeGdiZV9tYm94X2FwaV8xNzpcbjQ3MDM6XHRcdFx0bmV0ZGV2LVx1MDAzZW1heF9tdHUgPSBJWEdCRV9NQVhfSlVNQk9fRlJBTUVfU0laRSAtXG40NzA0Olx0XHRcdFx0XHQgIChFVEhfSExFTiAmIzQzOyBFVEhfRkNTX0xFTik7XG40NzA1Olx0XHRcdGJyZWFrO1xuNDcwNjpcdFx0ZGVmYXVsdDpcbjQ3MDc6XHRcdFx0aWYgKGFkYXB0ZXItXHUwMDNlaHcubWFjLnR5cGUgIT0gaXhnYmVfbWFjXzgyNTk5X3ZmKVxuNDcwODpcdFx0XHRcdG5ldGRldi1cdTAwM2VtYXhfbXR1ID0gSVhHQkVfTUFYX0pVTUJPX0ZSQU1FX1NJWkUgLVxuNDcwOTpcdFx0XHRcdFx0XHQgIChFVEhfSExFTiAmIzQzOyBFVEhfRkNTX0xFTik7XG40NzEwOlx0XHRcdGVsc2VcbjQ3MTE6XHRcdFx0XHRuZXRkZXYtXHUwMDNlbWF4X210dSA9IEVUSF9EQVRBX0xFTiAmIzQzOyBFVEhfRkNTX0xFTjtcbjQ3MTI6XHRcdFx0YnJlYWs7XG40NzEzOlx0XHR9XG40NzE0Olx0XG40NzE1Olx0XHRpZiAoSVhHQkVfUkVNT1ZFRChody1cdTAwM2Vod19hZGRyKSkge1xuNDcxNjpcdFx0XHRlcnIgPSAtRUlPO1xuNDcxNzpcdFx0XHRnb3RvIGVycl9zd19pbml0O1xuNDcxODpcdFx0fVxuNDcxOTpcdFxuNDcyMDpcdFx0dGltZXJfc2V0dXAoXHUwMDI2YWRhcHRlci1cdTAwM2VzZXJ2aWNlX3RpbWVyLCBpeGdiZXZmX3NlcnZpY2VfdGltZXIsIDApO1xuNDcyMTpcdFxuNDcyMjpcdFx0SU5JVF9XT1JLKFx1MDAyNmFkYXB0ZXItXHUwMDNlc2VydmljZV90YXNrLCBpeGdiZXZmX3NlcnZpY2VfdGFzayk7XG40NzIzOlx0XHRzZXRfYml0KF9fSVhHQkVWRl9TRVJWSUNFX0lOSVRFRCwgXHUwMDI2YWRhcHRlci1cdTAwM2VzdGF0ZSk7XG40NzI0Olx0XHRjbGVhcl9iaXQoX19JWEdCRVZGX1NFUlZJQ0VfU0NIRUQsIFx1MDAyNmFkYXB0ZXItXHUwMDNlc3RhdGUpO1xuNDcyNTpcdFxuNDcyNjpcdFx0ZXJyID0gaXhnYmV2Zl9pbml0X2ludGVycnVwdF9zY2hlbWUoYWRhcHRlcik7XG40NzI3Olx0XHRpZiAoZXJyKVxuNDcyODpcdFx0XHRnb3RvIGVycl9zd19pbml0O1xuNDcyOTpcdFxuNDczMDpcdFx0c3RyY3B5KG5ldGRldi1cdTAwM2VuYW1lLCBcJiMzNDtldGglZFwmIzM0Oyk7XG40NzMxOlx0XG40NzMyOlx0XHRlcnIgPSByZWdpc3Rlcl9uZXRkZXYobmV0ZGV2KTtcbjQ3MzM6XHRcdGlmIChlcnIpXG40NzM0Olx0XHRcdGdvdG8gZXJyX3JlZ2lzdGVyO1xuNDczNTpcdFxuNDczNjpcdFx0cGNpX3NldF9kcnZkYXRhKHBkZXYsIG5ldGRldik7XG40NzM3Olx0XHRuZXRpZl9jYXJyaWVyX29mZihuZXRkZXYpO1xuNDczODpcdFx0aXhnYmV2Zl9pbml0X2lwc2VjX29mZmxvYWQoYWRhcHRlcik7XG40NzM5Olx0XG40NzQwOlx0XHRpeGdiZXZmX2luaXRfbGFzdF9jb3VudGVyX3N0YXRzKGFkYXB0ZXIpO1xuNDc0MTpcdFxuNDc0MjpcdFx0LyogcHJpbnQgdGhlIFZGIGluZm8gKi9cbjQ3NDM6XHRcdGRldl9pbmZvKFx1MDAyNnBkZXYtXHUwMDNlZGV2LCBcJiMzNDslcE1cXG5cJiMzNDssIG5ldGRldi1cdTAwM2VkZXZfYWRkcik7XG40NzQ0Olx0XHRkZXZfaW5mbyhcdTAwMjZwZGV2LVx1MDAzZWRldiwgXCYjMzQ7TUFDOiAlZFxcblwmIzM0OywgaHctXHUwMDNlbWFjLnR5cGUpO1xuNDc0NTpcdFxuNDc0NjpcdFx0c3dpdGNoIChody1cdTAwM2VtYWMudHlwZSkge1xuNDc0NzpcdFx0Y2FzZSBpeGdiZV9tYWNfWDU1MF92ZjpcbjQ3NDg6XHRcdFx0ZGV2X2luZm8oXHUwMDI2cGRldi1cdTAwM2VkZXYsIFwmIzM0O0ludGVsKFIpIFg1NTAgVmlydHVhbCBGdW5jdGlvblxcblwmIzM0Oyk7XG40NzQ5Olx0XHRcdGJyZWFrO1xuNDc1MDpcdFx0Y2FzZSBpeGdiZV9tYWNfWDU0MF92ZjpcbjQ3NTE6XHRcdFx0ZGV2X2luZm8oXHUwMDI2cGRldi1cdTAwM2VkZXYsIFwmIzM0O0ludGVsKFIpIFg1NDAgVmlydHVhbCBGdW5jdGlvblxcblwmIzM0Oyk7XG40NzUyOlx0XHRcdGJyZWFrO1xuNDc1MzpcdFx0Y2FzZSBpeGdiZV9tYWNfZTYxMF92ZjpcbjQ3NTQ6XHRcdFx0ZGV2X2luZm8oXHUwMDI2cGRldi1cdTAwM2VkZXYsIFwmIzM0O0ludGVsKFIpIEU2MTAgVmlydHVhbCBGdW5jdGlvblxcblwmIzM0Oyk7XG40NzU1Olx0XHRcdGJyZWFrO1xuNDc1NjpcdFx0Y2FzZSBpeGdiZV9tYWNfODI1OTlfdmY6XG40NzU3Olx0XHRkZWZhdWx0OlxuNDc1ODpcdFx0XHRkZXZfaW5mbyhcdTAwMjZwZGV2LVx1MDAzZWRldiwgXCYjMzQ7SW50ZWwoUikgODI1OTkgVmlydHVhbCBGdW5jdGlvblxcblwmIzM0Oyk7XG40NzU5Olx0XHRcdGJyZWFrO1xuNDc2MDpcdFx0fVxuNDc2MTpcdFxuNDc2MjpcdFx0cmV0dXJuIDA7XG40NzYzOlx0XG40NzY0Olx0ZXJyX3JlZ2lzdGVyOlxuNDc2NTpcdFx0aXhnYmV2Zl9jbGVhcl9pbnRlcnJ1cHRfc2NoZW1lKGFkYXB0ZXIpO1xuNDc2NjpcdGVycl9zd19pbml0OlxuNDc2NzpcdFx0aXhnYmV2Zl9yZXNldF9pbnRlcnJ1cHRfY2FwYWJpbGl0eShhZGFwdGVyKTtcbjQ3Njg6XHRcdGlvdW5tYXAoYWRhcHRlci1cdTAwM2Vpb19hZGRyKTtcbjQ3Njk6XHRcdGtmcmVlKGFkYXB0ZXItXHUwMDNlcnNzX2tleSk7XG40NzcwOlx0ZXJyX2lvcmVtYXA6XG40NzcxOlx0XHRkaXNhYmxlX2RldiA9ICF0ZXN0X2FuZF9zZXRfYml0KF9fSVhHQkVWRl9ESVNBQkxFRCwgXHUwMDI2YWRhcHRlci1cdTAwM2VzdGF0ZSk7XG40NzcyOlx0XHRmcmVlX25ldGRldihuZXRkZXYpO1xuNDc3MzpcdGVycl9hbGxvY19ldGhlcmRldjpcbjQ3NzQ6XHRcdHBjaV9yZWxlYXNlX3JlZ2lvbnMocGRldik7XG40Nzc1Olx0ZXJyX3BjaV9yZWc6XG40Nzc2Olx0ZXJyX2RtYTpcbjQ3Nzc6XHRcdGlmICghYWRhcHRlciB8fCBkaXNhYmxlX2RldilcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjQgMTQ6MjE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzczODMKCQkJCQkJCW91dHB1dDogNDkKCQkJCQkJCXRob3VnaHRzOiAyNzAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQXNzZXNzbWVudCBvZiBTeXprYWxsZXImIzM5O3MgUmVhY2ggaW50byBpeGdiZXZmKioKCk9rYXksIHNvIGByZWdpc3Rlcl9uZXRkZXZgIGlzIGdldHRpbmcgY2FsbGVkLiBUaGF0JiMzOTtzIGZhbnRhc3RpYyEgVGhpcyBjb25maXJtcyB0aGF0IHN5emthbGxlciBpcyBzdWNjZXNzZnVsbHkgcHJvYmluZyB0aGUgYGl4Z2JldmZgIGRyaXZlciBhbmQgbWFuYWdpbmcgdG8gcmVnaXN0ZXIgYSBuZXR3b3JrIGRldmljZS4gVGhhdCYjMzk7cyB0aGUgY3JpdGljYWwgZmlyc3Qgc3RlcC4KCk5vdywgd2l0aCB0aGUgbmV0ZGV2IHJlZ2lzdGVyZWQsIHdlJiMzOTtyZSBsaWtlbHkgdG8gc2VlIHN5emthbGxlciBjYWxsaW5nIGBldGh0b29sYCBvbiBpdCwgd2hpY2gsIG9mIGNvdXJzZSwgd2lsbCB0cmlnZ2VyIGEgY2FsbCB0byBgaXhnYmV2Zl9nZXRfbGlua19rc2V0dGluZ3NgLiBUaGF0JiMzOTtzIG9uZSBwYXRoLiBBbmQgdGhlIHNlcnZpY2UgdGFzayBgaXhnYmV2Zl9zZXJ2aWNlX3Rhc2tgIG1pZ2h0IGV4ZWN1dGUgYXMgd2VsbCwga2lja2luZyBvZmYgYSBjaGFpbjogYGl4Z2JldmZfd2F0Y2hkb2dfdGFza2AgY2FsbHMgYGl4Z2JldmZfY2hlY2tfbGlua2AsIHdoaWNoIHRoZW4gaGl0cyBgaHctJmd0O21hYy5vcHMuY2hlY2tfbGlua2AuIEFuZCB0aGF0LCBpbiB0dXJuLCBpcyBgaXhnYmV2Zl9odl9jaGVja19tYWNfbGlua192ZmAuCgpTbywgKmJvdGgqIG9mIHRoZSBtb2RpZmllZCBmdW5jdGlvbnMgSSB3YXMgY29uY2VybmVkIGFib3V0IOKAkyBgaXhnYmV2Zl9nZXRfbGlua19rc2V0dGluZ3NgIGFuZCBgaXhnYmV2Zl9odl9jaGVja19tYWNfbGlua192ZmAg4oCTIGFyZSByZWFjaGFibGUgdGhyb3VnaCBzeXprYWxsZXImIzM5O3MgUENJIGZ1enplci4gVGhhdCYjMzk7cyBleGNlbGxlbnQgbmV3cy4KCkJ1dCB3YWl0LCBJIG5lZWQgdG8gY29uZmlybSBzb21ldGhpbmcuIERvZXMgdGhlIFBDSSBmdXp6ZXIgKmFjdHVhbGx5KiBmdXp6IGBpeGdiZXZmYD8gSSBuZWVkIHRvIG1ha2Ugc3VyZSB0aGlzIGlzbiYjMzk7dCBqdXN0IGEgaGFwcHkgYWNjaWRlbnQuCgpZZXMhIFN5emthbGxlciYjMzk7cyBQQ0kgZnV6emVyIGdlbmVyYXRlcyByYW5kb20gUENJIGRldmljZXMsIGFuZCBpZiBpdCBoYXBwZW5zIHRvIGNyZWF0ZSBhIGRldmljZSB3aXRoIGEgYHZlbmRvcl9pZGAgb2YgYDB4ODA4NmAgYW5kIGEgYGRldmljZV9pZGAgZXF1YWwgdG8gYElYR0JFX0RFVl9JRF9FNjEwX1ZGX0hWYCAodGhhdCYjMzk7cyBgMHgzNzY2YCBvciBzb21ldGhpbmcgaW4gZGVjaW1hbCksIHRoZW4gdGhlIGBpeGdiZXZmYCBkcml2ZXIgd2lsbCBiaW5kIHRvIGl0LgoKSSYjMzk7ZCBiZXR0ZXIgZG91YmxlLWNoZWNrIHRob3NlIGRldmljZSBJRHMsIGJ1dCB0aGlzIGxvb2tzIHZlcnkgcHJvbWlzaW5nLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNCAxNDoyMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+RXJyb3I6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5ubyBtYXRjaGVzPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O0lYR0JFX0RFVl9JRF9FNjEwX1ZGX0hWJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaXhnYmV2ZiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtlcnJvciYjMzQ7OiAmIzM0O25vIG1hdGNoZXMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI0IDE0OjIyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDM4MTQ3CgkJCQkJCQlvdXRwdXQ6IDUwCgkJCQkJCQl0aG91Z2h0czogMjUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipBbmFseXppbmcgdGhlIFN1YmRldmljZSBJRCoqCgpPa2F5LCBob2xkIG9uIGEgc2Vjb25kLi4uIGp1c3QgZmxhc2hpbmcgYmFjayB0aHJvdWdoIHRoZSBtZW50YWwgc3RhY2sgaGVyZS4gSSYjMzk7bSBwcmV0dHkgc3VyZSBJIGNhbWUgYWNyb3NzIGBJWEdCRV9TVUJERVZfSURfRTYxMF9WRl9IVmAgZWFybGllciBpbiB0aGUgZmxvdy4gVGhhdCBzdWJkZXZpY2UgSUQsIGZyb20gdGhlIEludGVsIEV0aGVybmV0IENvbnRyb2xsZXIgRTYxMCBmYW1pbHksIGlzIGltcG9ydGFudC4gVGhlICYjMzQ7VkYmIzM0OyBpbmRpY2F0ZXMgdGhpcyBpcyBhIFZpcnR1YWwgRnVuY3Rpb24uIEtub3dpbmcgdGhhdCwgYW5kIHRoYXQgaXQmIzM5O3MgcmVsYXRlZCB0byBIViAoSHlwZXItViksIHByb3ZpZGVzIHZhbHVhYmxlIGNvbnRleHQuIEkgbmVlZCB0byByZS1ldmFsdWF0ZSB0aGUgaW1wbGljYXRpb25zIG9mIHRoYXQgc3BlY2lmaWMgaWRlbnRpZmllciBpbiB0aGUgbGFyZ2VyIHN5c3RlbSBkZXNpZ24uIFRoaXMgc3VnZ2VzdHMgYSBwb3RlbnRpYWwgZm9jdXMgb24gdmlydHVhbGl6YXRpb24gb3IgbmV0d29yayBjb25maWd1cmF0aW9uIGZvciBhIEh5cGVyLVYgZW52aXJvbm1lbnQsIGFuZCBJIG5lZWQgdG8gY29uc2lkZXIgaG93IHRoaXMgc3BlY2lmaWMgZGV2aWNlIGZpdHMgaW50byB0aGUgb3ZlcmFsbCBhcmNoaXRlY3R1cmUsIGVzcGVjaWFsbHkgd2l0aCBob3cgaXQgaW50ZXJmYWNlcyBhbmQgd2hhdCBpdHMgY2FwYWJpbGl0aWVzIGFyZSBpbiBhIHZpcnR1YWxpemVkIHNldHRpbmcuIFRoZSBvcmlnaW5hbCBxdWVzdGlvbiBhbmQgc3Vycm91bmRpbmcgY29kZSBzaG91bGQgYmUgcmV2aXNpdGVkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNCAxNDoyMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtJWEdCRV9TVUJERVZfSURfRTYxMF9WRl9IViYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2l4Z2JldmYmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaXhnYmV2Zi9kZWZpbmVzLmgtMTktI2RlZmluZSBJWEdCRV9ERVZfSURfRTYxMF9WRlx0XHQweDU3QURcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2l4Z2JldmYvZGVmaW5lcy5oOjIwOiNkZWZpbmUgSVhHQkVfU1VCREVWX0lEX0U2MTBfVkZfSFZcdDB4MDBGRlxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaXhnYmV2Zi9kZWZpbmVzLmgtMjEtXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaXhnYmV2Zi9peGdiZXZmX21haW4uYz02Nj1zdGF0aWMgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgaXhnYmV2Zl9wY2lfdGJsW10gPSB7XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaXhnYmV2Zi9peGdiZXZmX21haW4uYy05NS1cdFx0UENJX1ZERVZJQ0VfU1VCKElOVEVMLCBJWEdCRV9ERVZfSURfRTYxMF9WRixcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2l4Z2JldmYvaXhnYmV2Zl9tYWluLmM6OTY6XHRcdFx0XHRQQ0lfQU5ZX0lELCBJWEdCRV9TVUJERVZfSURfRTYxMF9WRl9IViksXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9peGdiZXZmL2l4Z2JldmZfbWFpbi5jLTk3LVx0XHQuZHJpdmVyX2RhdGEgPSBib2FyZF9lNjEwX3ZmX2h2LFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNCAxNDoyMjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzODc0NwoJCQkJCQkJb3V0cHV0OiAyNQoJCQkJCQkJdGhvdWdodHM6IDg5NAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipXb3J0aEZ1enppbmcgRGVjaXNpb24gZm9yIGl4Z2ViZXZmKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIFdlJiMzOTt2ZSBnb3QgYSBQQ0kgZGV2aWNlIElEIG9mIGAweDU3QURgIGFuZCBzdWJzeXN0ZW0gSUQgb2YgYDB4MDBGRmAuIFN5emthbGxlciYjMzk7cyBQQ0kgZnV6emVyIGNhbiBkZWZpbml0ZWx5IGdlbmVyYXRlIHRoYXQuIFRoZSBjb2RlJiMzOTtzIHJlYWNoYWJsZS4gVGhhdCYjMzk7cyBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQuIEJ1dCB0aGUgcHJvbXB0Li4uIHJpZ2h0LCB0aGUgY3JpdGVyaWEuIEl0IHNheXMgcmV0dXJuIGBXb3J0aEZ1enppbmc9ZmFsc2VgIGlmIHRoZSBwYXRjaCBpbnZvbHZlcyB1bnJlYWNoYWJsZSBjb2RlIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cywgc3BlY2lmaWNhbGx5IGNvZGUgdGhhdCByZXF1aXJlcyByZWFsIGhhcmR3YXJlLiBXZSBuZWVkIHRvIGRldGVybWluZSBpZiB0aGlzIGBpeGdiZXZmYCBzdHVmZiBmYWxscyBpbnRvIHRoYXQuCgpGaXJzdCB0aG91Z2h0OiBpcyBgaXhnYmV2ZmAgYSAmIzM0O3ZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXImIzM0Oz8gTm8sIGl0JiMzOTtzIGEgc3RhbmRhcmQgRXRoZXJuZXQgVkYgZHJpdmVyLiBUaGF0JiMzOTtzIGdvb2QuIEJ1dCBkb2VzIGl0IHJlcXVpcmUgKnBoeXNpY2FsKiBQQ0llIGhhcmR3YXJlIG5vdCBlbXVsYXRlZCBieSBzdGFuZGFyZCBRRU1VPyBZZXMsIGluIGEgd2F5LCBpdCBkb2VzLiBJdCYjMzk7cyBtZWFudCB0byB3b3JrIG9uIHJlYWwgaGFyZHdhcmUuIEJ1dCBkb2VzIHRoaXMgbWVhbiBpdCYjMzk7cyBleGNsdWRlZD8KClRoZSBrZXkgaXMgU3l6a2FsbGVyJiMzOTtzIFBDSSBmdXp6ZXIuIEl0ICpjYW4qIHJlYWNoIHRoZSBjb2RlLCB3aGljaCBzdWdnZXN0cyBpdCAqaXMqIHNvbWV3aGF0IGVtdWxhdGVkLCBidXQgaXQmIzM5O3Mgbm90IHN0YW5kYXJkIFFFTVUuIFN5emthbGxlciB1c2VzIGl0cyBvd24gc29mdHdhcmUgZW11bGF0aW9uLiBUaGUgcHJvbXB0ICpkb2VzKiBtZW50aW9uICYjMzQ7c29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUmIzM0OyBsaWtlIFVTQiBnYWRnZXQgYW5kIG1hYzgwMjExX2h3c2ltLCBzbyBpdCBzZWVtcyBsaWtlIHdlICpzaG91bGRuJiMzOTt0KiBleGNsdWRlIHRoZSBjb2RlIG9uIHRoaXMgYmFzaXMgYWxvbmUuCgpUaGUgcHJvbXB0IGV4cGxpY2l0bHkgbGlzdHMgZHJpdmVycyBsaWtlIGBtbHhzd2AgYW5kIGBhbWRncHVgIGFzIGV4YW1wbGVzIG9mIGV4Y2x1c2lvbnMuIFRoZSBQQ0kgZnV6emVyICpjYW4qIHByb2JlIHRoZXNlIHRvbywgYnV0IHRoZXkmIzM5O3JlIGNvbXBsZXggYW5kIHJlcXVpcmUgcmVhbCBoYXJkd2FyZSBmb3IgKnVzZWZ1bCogZnVuY3Rpb25hbGl0eS4gVGhleSYjMzk7cmUgYmFzaWNhbGx5IHVzZWxlc3MgaW4gYSBmdWxseSB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudC4gSXMgYGl4Z2JldmZgIGluIHRoYXQgc2FtZSBjYXRlZ29yeT8gTm8sIGl0JiMzOTtzIGEgcmVsYXRpdmVseSBzaW1wbGUgRXRoZXJuZXQgZHJpdmVyLiBTeXprYWxsZXIgY2FuIGFjdHVhbGx5IGdldCBpdCB0byByZWdpc3RlciBhIG5ldGRldiBhbmQgdGhlbiBmdXp6IHRoYXQgbmV0ZGV2LiBJbiBmYWN0LCBTeXprYWxsZXIgaGFzIGEgaGlzdG9yeSBvZiBmaW5kaW5nIGJ1Z3MgaW4gYGl4Z2JldmZgIGFuZCBgaXhnYmVgIHdpdGggdGhpcyB2ZXJ5IG1ldGhvZC4gSWYgU3l6a2FsbGVyIGNhbiByZWFjaCBpdCBhbmQgaXQmIzM5O3MgYSBzdGFuZGFyZCBuZXR3b3JrIGRyaXZlciwgdGhpcyBsb29rcyBwcm9taXNpbmcuCgpOb3csIGxldCYjMzk7cyBjb25maXJtIHRoZSB3b3J0aGluZXNzLiBTaW5jZSBJIGNhbm5vdCBzZWFyY2ggc3l6a2FsbGVyIGRlc2NyaXB0aW9ucywgSSYjMzk7bGwgZm9jdXMgb24gdGhlIHBhdGNoIGl0c2VsZi4gVGhlIHBhdGNoIHRvdWNoZXMgYGl4Z2JldmZfZ2V0X2xpbmtfa3NldHRpbmdzYCBhbmQgYGl4Z2JldmZfaHZfY2hlY2tfbWFjX2xpbmtfdmZgLiBBbHJpZ2h0LCBhbmQgYW55IHNwZWNpZmljIGNvbmZpZ3VyYXRpb24gb3B0aW9ucz8gQWgsIGBDT05GSUdfSVhHQkVWRmAgaXMgcmVxdWlyZWQuIEdvb2QuCgpBbHNvLCBgaXhnYmV2Zl9odl9yZWFkX2xpbmtzX2U2MTBgIHVzZXMgYHBjaV9yZWFkX2NvbmZpZ19ieXRlYCwgYW5kIHRoZXJlJiMzOTtzIGEgY2hlY2sgdGhhdCBuZWVkcyBgQ09ORklHX1BDSV9NTUNPTkZJR2AuIEltcG9ydGFudDogYENPTkZJR19QQ0lfTU1DT05GSUdgIGlzIHJlcXVpcmVkIGZvciB0aGUgcmVhZCEgQW5kIHRoYXQmIzM5O3MgYW4geDg2LXNwZWNpZmljIGNvbmZpZyAob3IgbWF5YmUgQVJNIHRvbyksIHNvIGl0IG5lZWRzIHRvIGJlIGVuYWJsZWQgZm9yIHRoYXQgY29kZSBwYXRoLgoKT2theSwgc28gU3l6a2FsbGVyIGNhbiByZWFjaCBpdCwgaXQmIzM5O3MgYSBzdGFuZGFyZCBuZXR3b3JrIGRyaXZlciB0aGF0IGhhcyBiZWVuIHN1Y2Nlc3NmdWxseSBmdXp6ZWQsIGFuZCB0aGVyZSBhcmUgc3BlY2lmaWMgY29uZmlncy4gTG9va3MgbGlrZSB0aGlzIG9uZSBpcyB3b3J0aCBmdXp6aW5nLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNCAxNDoyMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgUENJX01NQ09ORklHJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gveDg2L0tjb25maWc9Mjg3MD1jb25maWcgUENJX0RJUkVDVFxuLS1cbmFyY2gveDg2L0tjb25maWctMjg3My1cbmFyY2gveDg2L0tjb25maWc6Mjg3NDpjb25maWcgUENJX01NQ09ORklHXG5hcmNoL3g4Ni9LY29uZmlnLTI4NzUtXHRib29sIFwmIzM0O1N1cHBvcnQgbW1jb25maWcgUENJIGNvbmZpZyBzcGFjZSBhY2Nlc3NcJiMzNDsgaWYgWDg2XzY0XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI0IDE0OjIyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQwNDU1CgkJCQkJCQlvdXRwdXQ6IDUxCgkJCQkJCQl0aG91Z2h0czogMzg2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IFJlYXNvbmluZyBvbiBQYXRjaCBXb3J0aGluZXNzIGZvciBGdXp6aW5nKioKCk9rYXksIHNvIEkgc2VlIHRoYXQgYENPTkZJR19QQ0lfTU1DT05GSUdgIGlzIGluZGVlZCBkZWZpbmVkIGluIGBhcmNoL3g4Ni9LY29uZmlnYCwgbWVhbmluZyB0aGF0IGBQQ0lfTU1DT05GSUdgIHNob3VsZCBiZSBlbmFibGVkLCBhbmQgY29uc2VxdWVudGx5LCBzbyBzaG91bGQgYElYR0JFVkZgLiBMZXQgbWUgcmUtcmVhZCB0aGUgcHJvbXB0IHRvIG1ha2Ugc3VyZSBJJiMzOTttIG9uIHRoZSByaWdodCB0cmFjazogaXQgd2FudHMgbWUgdG8gcmV0dXJuIGBXb3J0aEZ1enppbmc9ZmFsc2VgIGlmIHRoZSBwYXRjaCAqb25seSogdG91Y2hlcyB1bnJlYWNoYWJsZSBjb2RlIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cy4gU3BlY2lmaWNhbGx5LCBjb2RlIHRoYXQgbmVlZHMgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBvciB0aGF0JiMzOTtzIGZ1bmRhbWVudGFsbHkgaW1wb3NzaWJsZSB0byBlbXVsYXRlLCBsaWtlIFVTQiBnYWRnZXRzIG9yIHZlbmRvci1zcGVjaWZpYyBkcml2ZXJzLgoKTm93LCBpcyBgaXhnYmV2ZmAgYSBTbWFydE5JQz8gTm8sIHRoYXQmIzM5O3MgYSBzdGFuZGFyZCBOSUMuIEFuZCBpcyB0aGUgY29kZSB1bnJlYWNoYWJsZT8gRGVmaW5pdGVseSBub3QuIFN5emthbGxlciYjMzk7cyBQQ0kgZnV6emVyIGNhbiBkZWZpbml0ZWx5IHJlYWNoIGBpeGdiZXZmYC4gVGhhdCBwb2ludCB0aHJvd3MgbWUsIHRob3VnaC4gVGhlIHByb21wdCBtZW50aW9ucyByZXF1aXJpbmcgcGh5c2ljYWwgaGFyZHdhcmUsIHdoaWNoIGdvdCBtZSB0aGlua2luZyBhYm91dCBjb21wbGV4IGRldmljZXMuIENvbXBsZXggZGV2aWNlcyBsaWtlIEdQVXMgb3IgU21hcnROSUNzIChhbWRncHUsIG1seHN3LCBldGMuKSBtYXkgb25seSBnZXQgdGhlIHByb2JlIGZ1bmN0aW9uIGhpdCB2aWEgdGhlIFBDSSBmdXp6ZXIgYW5kIHRoZW4gdGhleSYjMzk7cmUgc3R1Y2sgYmVjYXVzZSB0aGUgZnV6emVyIGNhbiYjMzk7dCBoYW5kbGUgdGhlIGNvbXBsaWNhdGVkIERNQSByaW5ncyBvciBmaXJtd2FyZSBsb2FkaW5nIHJlcXVpcmVkIHRvIGdldCB0aGUgKmNvcmUqIGxvZ2ljIHdvcmtpbmcuIEl0JiMzOTtzIGxpa2UgdGhlIGZ1enplciBoaXRzIHRoZSBmcm9udCBkb29yIGJ1dCBjYW4mIzM5O3QgZ2V0IHBhc3QgdGhlIGZveWVyLgoKQnV0IGBpeGdiZXZmYCBpcyBkaWZmZXJlbnQuIEl0JiMzOTtzIGEgVmlydHVhbCBGdW5jdGlvbiAoVkYpIGRyaXZlciwgc28gaXRzIHByb2JlIGZ1bmN0aW9uIGNhbiBzdWNjZWVkIGJlY2F1c2UgaXQmIzM5O3Mgc2ltcGxlci4gSXQmIzM5O3Mgbm90IGdvaW5nIHRvIG5lZWQgdGhhdCBjb21wbGV4IGZpcm13YXJlIGxvYWRpbmc7IHRoZSBQaHlzaWNhbCBGdW5jdGlvbiAoUEYpIGhhbmRsZXMgdGhhdC4KCkhtbSwgd2FpdC4gRG9lcyBgaXhnYmV2ZmAgc3RpbGwgcmVxdWlyZSBzb21lIG1haWxib3ggY29tbXVuaWNhdGlvbiB3aXRoIHRoZSBQRiB0byBpbml0aWFsaXplPyBUaGF0JiMzOTtzIGEgZ29vZCBwb2ludCB0byBjaGVjayEgTGV0JiMzOTtzIGV4YW1pbmUgdGhlIGBpeGdiZXZmX3N3X2luaXRgIGZ1bmN0aW9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNCAxNDoyMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2l4Z2JldmYvaXhnYmV2Zl9tYWluLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAzMTE3LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDIwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzMxMTc6XHRcdGVyciA9IGh3LVx1MDAzZW1hYy5vcHMucmVzZXRfaHcoaHcpO1xuMzExODpcdFx0aWYgKGVycikge1xuMzExOTpcdFx0XHRkZXZfaW5mbyhcdTAwMjZwZGV2LVx1MDAzZWRldixcbjMxMjA6XHRcdFx0XHQgXCYjMzQ7UEYgc3RpbGwgaW4gcmVzZXQgc3RhdGUuICBJcyB0aGUgUEYgaW50ZXJmYWNlIHVwP1xcblwmIzM0Oyk7XG4zMTIxOlx0XHR9IGVsc2Uge1xuMzEyMjpcdFx0XHRlcnIgPSBody1cdTAwM2VtYWMub3BzLmluaXRfaHcoaHcpO1xuMzEyMzpcdFx0XHRpZiAoZXJyKSB7XG4zMTI0Olx0XHRcdFx0cHJfZXJyKFwmIzM0O2luaXRfc2hhcmVkX2NvZGUgZmFpbGVkOiAlZFxcblwmIzM0OywgZXJyKTtcbjMxMjU6XHRcdFx0XHRnb3RvIG91dDtcbjMxMjY6XHRcdFx0fVxuMzEyNzpcdFx0XHRpeGdiZXZmX25lZ290aWF0ZV9hcGkoYWRhcHRlcik7XG4zMTI4Olx0XHRcdGVyciA9IGh3LVx1MDAzZW1hYy5vcHMuZ2V0X21hY19hZGRyKGh3LCBody1cdTAwM2VtYWMuYWRkcik7XG4zMTI5Olx0XHRcdGlmIChlcnIpXG4zMTMwOlx0XHRcdFx0ZGV2X2luZm8oXHUwMDI2cGRldi1cdTAwM2VkZXYsIFwmIzM0O0Vycm9yIHJlYWRpbmcgTUFDIGFkZHJlc3NcXG5cJiMzNDspO1xuMzEzMTpcdFx0XHRlbHNlIGlmIChpc196ZXJvX2V0aGVyX2FkZHIoYWRhcHRlci1cdTAwM2Vody5tYWMuYWRkcikpXG4zMTMyOlx0XHRcdFx0ZGV2X2luZm8oXHUwMDI2cGRldi1cdTAwM2VkZXYsXG4zMTMzOlx0XHRcdFx0XHQgXCYjMzQ7TUFDIGFkZHJlc3Mgbm90IGFzc2lnbmVkIGJ5IGFkbWluaXN0cmF0b3IuXFxuXCYjMzQ7KTtcbjMxMzQ6XHRcdFx0ZXRoX2h3X2FkZHJfc2V0KG5ldGRldiwgaHctXHUwMDNlbWFjLmFkZHIpO1xuMzEzNTpcdFx0fVxuMzEzNjpcdFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNCAxNDoyMjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0MTY0MQoJCQkJCQkJb3V0cHV0OiA0NwoJCQkJCQkJdGhvdWdodHM6IDY5NQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipSZWFjaGluZyBGdXp6YWJsZSBDb2RlIGluIHRoZSBpeGdiZXZmIERyaXZlcioqCgpPa2F5LCBzbyBpZiBgcmVzZXRfaHdgIGZhaWxzLCB0aGUgZHJpdmVyIGp1c3Qga2VlcHMgZ29pbmc/IFRoYXQmIzM5O3MuLi5pbnRlcmVzdGluZy4gRG9lcyBpdCByZWdpc3RlciB0aGUgbmV0d29yayBkZXZpY2UgKGBuZXRkZXZgKSBhbnl3YXk/IExvb2tzIGxpa2UgaXQgZG9lcy4gTGV0JiMzOTtzIHRyYWNlIHRoaXMgZmFpbHVyZSBzY2VuYXJpby4gSWYgYHJlc2V0X2h3YCByZXR1cm5zIGFuIGVycm9yIChgZXJyYCBub24temVybyksIGl0IHNraXBzIGluaXRpYWxpemF0aW9uIHN0ZXBzIGxpa2UgYGluaXRfaHdgLCBgbmVnb3RpYXRlX2FwaWAsIGFuZCBgZ2V0X21hY19hZGRyYC4gVGhlbiwgaXQgbGFuZHMgaGVyZToKCmBgYGMKCWlmICghaXNfdmFsaWRfZXRoZXJfYWRkcihuZXRkZXYtJmd0O2Rldl9hZGRyKSkgewoJCWRldl9pbmZvKCZhbXA7cGRldi0mZ3Q7ZGV2LCAmIzM0O0Fzc2lnbmluZyByYW5kb20gTUFDIGFkZHJlc3NcbiYjMzQ7KTsKCQlldGhfaHdfYWRkcl9yYW5kb20obmV0ZGV2KTsKCQlldGhlcl9hZGRyX2NvcHkoaHctJmd0O21hYy5hZGRyLCBuZXRkZXYtJmd0O2Rldl9hZGRyKTsKCQlldGhlcl9hZGRyX2NvcHkoaHctJmd0O21hYy5wZXJtX2FkZHIsIG5ldGRldi0mZ3Q7ZGV2X2FkZHIpOwoJfQpgYGAKCkFuZCByZXR1cm5zIDAhIFNvIGJhc2ljYWxseSwgYGl4Z2JldmZfc3dfaW5pdGAgKnN1Y2NlZWRzKiBldmVuIGlmIHRoZSBtYWlsYm94IGNvbW11bmljYXRpb24gd2l0aCB0aGUgcGh5c2ljYWwgZnVuY3Rpb24gKFBGKSBmYWlscy4gVGhpcyBtZWFucyB0aGUgZHJpdmVyIHdpbGwgcHJvYmUgYW5kIHJlZ2lzdGVyIHRoZSBuZXR3b3JrIGRldmljZSwgZXZlbiB3aXRoIGEgY29tcGxldGVseSBkdW1iIGZha2UgUENJIGRldmljZSB0aGF0IGp1c3QgcmV0dXJucyAweEZGRkZGRkZGIGZvciBhbGwgTU1JTyByZWFkcy4gQnJpbGxpYW50IQoKT25jZSB0aGUgbmV0ZGV2IGlzIHJlZ2lzdGVyZWQsIHVzZXJzcGFjZSB0b29scyBsaWtlIGBldGh0b29sYCBjYW4gYmUgdXNlZCwgd2hpY2ggY2FsbHMgYGl4Z2JldmZfZ2V0X2xpbmtfa3NldHRpbmdzYC4gQW5kICp0aGF0JiMzOTtzKiB3aGVyZSB0aGUgbmV3IGNvZGUgZXhlY3V0ZXM6CgpgYGBjCglpZiAoaHctJmd0O21hYy50eXBlID09IGl4Z2JlX21hY19lNjEwX3ZmKSB7CgkJc3Bpbl9sb2NrX2JoKCZhbXA7YWRhcHRlci0mZ3Q7bWJ4X2xvY2spOwoJCWh3LSZndDttYWMuZ2V0X2xpbmtfc3RhdHVzID0gdHJ1ZTsKCQlody0mZ3Q7bWFjLm9wcy5jaGVja19saW5rKGh3LCAmYW1wO2FkYXB0ZXItJmd0O2xpbmtfc3BlZWQsCgkJCQkgICAgICAgJmFtcDthZGFwdGVyLSZndDtsaW5rX3VwLCBmYWxzZSk7CgkJc3Bpbl91bmxvY2tfYmgoJmFtcDthZGFwdGVyLSZndDttYnhfbG9jayk7Cgl9CmBgYAoKQW5kIGBody0mZ3Q7bWFjLm9wcy5jaGVja19saW5rYCBpcyBhY3R1YWxseSBgaXhnYmV2Zl9odl9jaGVja19tYWNfbGlua192ZmAgZm9yIEh5cGVyLVYuIFRoaXMgZnVuY3Rpb24gY2FsbHMgYGl4Z2JldmZfaHZfcmVhZF9saW5rc19lNjEwYCwgd2hpY2ggbWFrZXMgYSBgcGNpX3JlYWRfY29uZmlnX2J5dGVgIGNhbGwuIEFuZCBoZXJlJiMzOTtzIHRoZSBraWNrZXI6IFN5emthbGxlciYjMzk7cyBQQ0kgZnV6emVyICppbnRlcmNlcHRzKiBgcGNpX3JlYWRfY29uZmlnX2J5dGVgIGFuZCByZXR1cm5zIGZ1enplZCBkYXRhISBUaGlzIGlzIGdvbGQhCgpTbywgdGhpcyBjb2RlIHBhdGggaXMgMTAwJSByZWFjaGFibGUgYW5kIGZ1enphYmxlIGJ5IHN5emthbGxlci4gQW1hemluZyEKCk9rYXksIGxldCYjMzk7cyBpZGVudGlmeSB0aGUgZm9jdXMgc3ltYm9scy4gVGhlIG1vZGlmaWVkIGZ1bmN0aW9ucyBhcmU6Ci0gYGl4Z2JldmZfZ2V0X2xpbmtfa3NldHRpbmdzYAotIGBpeGdiZXZmX2h2X2NoZWNrX21hY19saW5rX3ZmYAotIGBpeGdiZXZmX2h2X3JlYWRfbGlua3NfZTYxMGAgKHN0YXRpYywgc28gbWF5YmUgbm90IHRoZSBiZXN0LCBidXQgYGl4Z2JldmZfaHZfY2hlY2tfbWFjX2xpbmtfdmZgIGlzIGEgZ29vZCBvbmUpLgoKV2FpdCwgYm90aCBhcmUgc3RhdGljPyBMZXQmIzM5O3MgY2hlY2sgaWYgYGl4Z2JldmZfaHZfY2hlY2tfbWFjX2xpbmtfdmZgIGlzIHN0YXRpYy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjQgMTQ6MjM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7aXhnYmV2Zl9odl9jaGVja19tYWNfbGlua192ZiYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2l4Z2JldmYmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaXhnYmV2Zi92Zi5jPTkxOD1zdGF0aWMgczMyIGl4Z2JldmZfaHZfcmVhZF9saW5rc19lNjEwKHN0cnVjdCBpeGdiZV9odyAqaHcsIHUzMiAqbGlua3NfcmVnKVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2l4Z2JldmYvdmYuYy05NDEtLyoqXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9peGdiZXZmL3ZmLmM6OTQyOiAqIGl4Z2JldmZfaHZfY2hlY2tfbWFjX2xpbmtfdmYgLSBjaGVjayBsaW5rXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9peGdiZXZmL3ZmLmMtOTQzLSAqIEBodzogcG9pbnRlciB0byBwcml2YXRlIGhhcmR3YXJlIHN0cnVjdFxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2l4Z2JldmYvdmYuYy05NTAtICovXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9peGdiZXZmL3ZmLmM6OTUxOnN0YXRpYyBzMzIgaXhnYmV2Zl9odl9jaGVja19tYWNfbGlua192ZihzdHJ1Y3QgaXhnYmVfaHcgKmh3LFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaXhnYmV2Zi92Zi5jLTk1Mi1cdFx0XHRcdFx0aXhnYmVfbGlua19zcGVlZCAqc3BlZWQsXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaXhnYmV2Zi92Zi5jPTExOTQ9c3RhdGljIGNvbnN0IHN0cnVjdCBpeGdiZV9tYWNfb3BlcmF0aW9ucyBpeGdiZXZmX2h2X21hY19vcHMgPSB7XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaXhnYmV2Zi92Zi5jLTEyMDAtXHQuc2V0dXBfbGlua1x0XHQ9IGl4Z2JldmZfc2V0dXBfbWFjX2xpbmtfdmYsXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9peGdiZXZmL3ZmLmM6MTIwMTpcdC5jaGVja19saW5rXHRcdD0gaXhnYmV2Zl9odl9jaGVja19tYWNfbGlua192ZixcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2l4Z2JldmYvdmYuYy0xMjAyLVx0Lm5lZ290aWF0ZV9hcGlfdmVyc2lvblx0PSBpeGdiZXZmX2h2X25lZ290aWF0ZV9hcGlfdmVyc2lvbl92ZixcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjQgMTQ6MjM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDM1NjYKCQkJCQkJCW91dHB1dDogNDQKCQkJCQkJCXRob3VnaHRzOiAxOTgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBTdGF0aWMgRnVuY3Rpb24gVXNlKioKCk9rYXksIHNvIEkgc2VlIGEgc3RhdGljIGZ1bmN0aW9uIGhlcmUuIFRoZSBpbml0aWFsIGltcHJlc3Npb24gbWlnaHQgYmUgdGhhdCBpdCYjMzk7cyBwcm9ibGVtYXRpYywgYXMgdGhlIHByb21wdCBkaXNjb3VyYWdlcyB0aGUgdXNlIG9mIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zIGJlY2F1c2UgdGhleSYjMzk7cmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvbiYjMzk7dCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMuIEJ1dCwgd2FpdC4uLiBJIGhhdmUgdG8gbG9vayBkZWVwZXIuIFRoZSBrZXkgaGVyZSBpcyB0aGUgKmZ1bmN0aW9uIHBvaW50ZXIqIGFzc2lnbm1lbnQuIGBjaGVja19saW5rYCwgc3BlY2lmaWNhbGx5IGBpeGdiZXZmX2h2X2NoZWNrX21hY19saW5rX3ZmYCwgaXMgYXNzaWduZWQgdG8gYSBmdW5jdGlvbiBwb2ludGVyIHdpdGhpbiBgaXhnYmV2Zl9odl9tYWNfb3BzYC4gU2luY2Ugd2UgYXJlIHRha2luZyB0aGUgZnVuY3Rpb24mIzM5O3MgYWRkcmVzcywgaXQgKmNhbm5vdCogYmUgZnVsbHkgaW5saW5lZC4gQ29uc2VxdWVudGx5LCB0aGlzIGZ1bmN0aW9uIHdpbGwgZGVmaW5pdGVseSBoYXZlIGEgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3MgYW5kIGlzIHBlcmZlY3RseSBmaW5lIGFzIGEgZm9jdXMgc3ltYm9sLCBldmVuIGlmIGl0JiMzOTtzIHRlY2huaWNhbGx5IHN0YXRpYy4KCkkgc2VlIHRoZSBzYW1lIHNpdHVhdGlvbiB3aXRoIGBpeGdiZXZmX2dldF9saW5rX2tzZXR0aW5nc2AuIEl0JiMzOTtzIGFsc28gZGVjbGFyZWQgc3RhdGljLCBob3dldmVyLCBJIHNlZSB0aGF0IGl0JiMzOTtzIGJlaW5nIGFzc2lnbmVkIHRvIGBldGh0b29sX29wcy5nZXRfbGlua19rc2V0dGluZ3NgLiBCZWNhdXNlIGl0cyBhZGRyZXNzIGlzIGFsc28gdGFrZW4sIHRoaXMgdG9vIHdpbGwgcmVzdWx0IGluIGEgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3MuCgpOb3csIGxldCYjMzk7cyB0dXJuIG91ciBhdHRlbnRpb24gdG8gYGl4Z2JldmZfZ2V0X2xpbmtfa3NldHRpbmdzYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjQgMTQ6MjM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7aXhnYmV2Zl9nZXRfbGlua19rc2V0dGluZ3MmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9peGdiZXZmJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2l4Z2JldmYvZXRodG9vbC5jPTc1PXN0YXRpYyBjb25zdCBjaGFyIGl4Z2JldmZfcHJpdl9mbGFnc19zdHJpbmdzW11bRVRIX0dTVFJJTkdfTEVOXSA9IHtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9peGdiZXZmL2V0aHRvb2wuYy04MS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2l4Z2JldmYvZXRodG9vbC5jOjgyOnN0YXRpYyBpbnQgaXhnYmV2Zl9nZXRfbGlua19rc2V0dGluZ3Moc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldixcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2l4Z2JldmYvZXRodG9vbC5jLTgzLVx0XHRcdFx0ICAgICAgc3RydWN0IGV0aHRvb2xfbGlua19rc2V0dGluZ3MgKmNtZClcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9peGdiZXZmL2V0aHRvb2wuYz05Nzc9c3RhdGljIGNvbnN0IHN0cnVjdCBldGh0b29sX29wcyBpeGdiZXZmX2V0aHRvb2xfb3BzID0ge1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2l4Z2JldmYvZXRodG9vbC5jLTk5Ny1cdC5nZXRfcnhmaFx0XHQ9IGl4Z2JldmZfZ2V0X3J4ZmgsXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9peGdiZXZmL2V0aHRvb2wuYzo5OTg6XHQuZ2V0X2xpbmtfa3NldHRpbmdzXHQ9IGl4Z2JldmZfZ2V0X2xpbmtfa3NldHRpbmdzLFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaXhnYmV2Zi9ldGh0b29sLmMtOTk5LVx0LmdldF9wcml2X2ZsYWdzXHRcdD0gaXhnYmV2Zl9nZXRfcHJpdl9mbGFncyxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjQgMTQ6MjM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDQ0MjMKCQkJCQkJCW91dHB1dDogMzYKCQkJCQkJCXRob3VnaHRzOiA5MQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIEl4Z2JldmYgRHJpdmVyIFN5bWJvbHMqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoZXNlIGZ1bmN0aW9uIHBvaW50ZXJzLCBgaXhnYmV2Zl9nZXRfbGlua19rc2V0dGluZ3NgIGFuZCBgaXhnYmV2Zl9odl9jaGVja19tYWNfbGlua192ZmAuIFRoZXkmIzM5O3JlIHN0YXRpYywgYnV0IHRoZXkmIzM5O3JlIGFzc2lnbmVkIHRvIGZ1bmN0aW9uIHBvaW50ZXJzLCB3aGljaCBpcyBpbXBvcnRhbnQuIFRoaXMgbWVhbnMgdGhlc2UgYXJlIHRoZSBrZXkgc3ltYm9scyB0byBmb2N1cyBvbiBmb3IgdGhpcyBkcml2ZXIuIFRoZXkmIzM5O3JlIGxpa2VseSB0aGUgZW50cnkgcG9pbnRzIGZvciBzcGVjaWZpYyBsaW5rIGNvbmZpZ3VyYXRpb24gYW5kIE1BQy1yZWxhdGVkIFZGIGNoZWNrcy4KCk5vdywgSSBuZWVkIHRvIGNvbnNpZGVyIGFueSByZXF1aXJlZCBjb25maWd1cmF0aW9ucy4gTGV0JiMzOTtzIHNlZS4uLiBgSVhHQkVWRmAgYW5kIGBQQ0lfTU1DT05GSUdgIGltbWVkaWF0ZWx5IGNvbWUgdG8gbWluZC4gSSYjMzk7bGwgbmVlZCB0byBkb3VibGUtY2hlY2sgYElYR0JFVkZgIHNwZWNpZmljYWxseSB0byBzZWUgaWYgaXQgcmVsaWVzIG9uIGFueSBvdGhlciBjb25maWd1cmF0aW9ucyBvciBkZXBlbmRlbmNpZXMgdGhhdCBtaWdodCBiZSByZWxldmFudC4gVGhpcyBpcyBpbXBvcnRhbnQgdG8gZW5zdXJlIGV2ZXJ5dGhpbmcgaXMgc2V0IHVwIGNvcnJlY3RseSBmb3IgdGhlc2UgZnVuY3Rpb24gcG9pbnRlcnMgdG8gd29yay4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjQgMTQ6MjM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIElYR0JFVkYmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL0tjb25maWc9MTk0PWNvbmZpZyBJWEdCRV9JUFNFQ1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL0tjb25maWctMjAyLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvS2NvbmZpZzoyMDM6Y29uZmlnIElYR0JFVkZcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL0tjb25maWctMjA0LVx0dHJpc3RhdGUgXCYjMzQ7SW50ZWwoUikgMTBHYkUgUENJIEV4cHJlc3MgVmlydHVhbCBGdW5jdGlvbiBFdGhlcm5ldCBzdXBwb3J0XCYjMzQ7XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvS2NvbmZpZy0yMTktXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9LY29uZmlnOjIyMDpjb25maWcgSVhHQkVWRl9JUFNFQ1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvS2NvbmZpZy0yMjEtXHRib29sIFwmIzM0O0lQU2VjIFhGUk0gY3J5cHRvZ3JhcGh5LW9mZmxvYWQgYWNjZWxlcmF0aW9uXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI0IDE0OjIzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQ0OTI2CgkJCQkJCQlvdXRwdXQ6IDM5CgkJCQkJCQl0aG91Z2h0czogMjQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aGUgdGhvdWdodCBwcm9jZXNzLCBwcmVzZW50ZWQgYXMgYSBwZXJzb25hbCBzdW1tYXJ5OgoKKipEaWdnaW5nIGludG8gdGhlIEludGVsIEV0aGVybmV0IENvbmZpZ3VyYXRpb24qKgoKT2theSwgdGltZSB0byBnZXQgbXkgaGFuZHMgZGlydHkgd2l0aCB0aGUgSW50ZWwgRXRoZXJuZXQgZHJpdmVycy4gSSYjMzk7bSB0aGlua2luZyBJIG5lZWQgdG8gdW5kZXJzdGFuZCBzb21lIGNvbmZpZ3VyYXRpb24gb3B0aW9ucywgYW5kIEkgcmVtZW1iZXIgdGhpcyBgS2NvbmZpZ2AgZmlsZSBpbiB0aGUgYGRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsYCBkaXJlY3RvcnkgaXMgdXN1YWxseSB0aGUgcGxhY2UgdG8gc3RhcnQuIEkmIzM5O20gc3BlY2lmaWNhbGx5IGxvb2tpbmcgYXJvdW5kIGxpbmUgMjAzLCBzbyBJJiMzOTtsbCBqdW1wIHRoZXJlIGFuZCBzZWUgd2hhdCYjMzk7cyBiZWluZyBkZWZpbmVkIG9yIHJlZmVyZW5jZWQgYXJvdW5kIHRoYXQgcG9pbnQuIFRoaXMgd2lsbCBnaXZlIG1lIHNvbWUgY29udGV4dCBhYm91dCB3aGF0IHNldHRpbmdzIGFyZSBhdmFpbGFibGUgYW5kIGhvdyB0aGV5JiMzOTtyZSBzdHJ1Y3R1cmVkLiBMZXQmIzM5O3Mgc2VlIHdoYXQgZ2VtcyBJIGNhbiB1bmNvdmVyIQoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNCAxNDoyMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAyMDAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDIwMDpcdFx0aGVscFxuIDIwMTpcdFx0ICBFbmFibGUgc3VwcG9ydCBmb3IgSVBTZWMgb2ZmbG9hZCBpbiBpeGdiZS5rb1xuIDIwMjpcdFxuIDIwMzpcdGNvbmZpZyBJWEdCRVZGXG4gMjA0Olx0XHR0cmlzdGF0ZSBcJiMzNDtJbnRlbChSKSAxMEdiRSBQQ0kgRXhwcmVzcyBWaXJ0dWFsIEZ1bmN0aW9uIEV0aGVybmV0IHN1cHBvcnRcJiMzNDtcbiAyMDU6XHRcdGRlcGVuZHMgb24gUENJX01TSVxuIDIwNjpcdFx0aGVscFxuIDIwNzpcdFx0ICBUaGlzIGRyaXZlciBzdXBwb3J0cyBJbnRlbChSKSBQQ0kgRXhwcmVzcyB2aXJ0dWFsIGZ1bmN0aW9ucyBmb3IgdGhlXG4gMjA4Olx0XHQgIEludGVsKFIpIGl4Z2JlIGRyaXZlci4gIEZvciBtb3JlIGluZm9ybWF0aW9uIG9uIGhvdyB0byBpZGVudGlmeSB5b3VyXG4gMjA5Olx0XHQgIGFkYXB0ZXIsIGdvIHRvIHRoZSBBZGFwdGVyIFx1MDAyNiBEcml2ZXIgSUQgR3VpZGUgdGhhdCBjYW4gYmUgbG9jYXRlZCBhdDpcbiAyMTA6XHRcbiAyMTE6XHRcdCAgXHUwMDNjaHR0cDovL3N1cHBvcnQuaW50ZWwuY29tXHUwMDNlXG4gMjEyOlx0XG4gMjEzOlx0XHQgIE1vcmUgc3BlY2lmaWMgaW5mb3JtYXRpb24gb24gY29uZmlndXJpbmcgdGhlIGRyaXZlciBpcyBpblxuIDIxNDpcdFx0ICBcdTAwM2NmaWxlOkRvY3VtZW50YXRpb24vbmV0d29ya2luZy9kZXZpY2VfZHJpdmVycy9ldGhlcm5ldC9pbnRlbC9peGdiZXZmLnJzdFx1MDAzZS5cbiAyMTU6XHRcbiAyMTY6XHRcdCAgVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZS4gVGhlIG1vZHVsZVxuIDIxNzpcdFx0ICB3aWxsIGJlIGNhbGxlZCBpeGdiZXZmLiAgTVNJLVggaW50ZXJydXB0IHN1cHBvcnQgaXMgcmVxdWlyZWRcbiAyMTg6XHRcdCAgZm9yIHRoaXMgZHJpdmVyIHRvIHdvcmsgY29ycmVjdGx5LlxuIDIxOTpcdFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNCAxNDoyMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0NTQ2NgoJCQkJCQkJb3V0cHV0OiAzNwoJCQkJCQkJdGhvdWdodHM6IDY3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IENvbmZpZ3VyYXRpb24gTXVzaW5ncyoqCgpPa2F5LCBzbyB3ZSYjMzk7cmUgZGl2aW5nIGludG8gdGhpcyBjb25maWd1cmF0aW9uLCBhbmQgaXQgcmVhbGx5IGhpbmdlcyBvbiBgUENJX01TSWAuIFRoYXQmIzM5O3MgdGhlIGNvcmUuIFNvLCBsb29raW5nIGF0IHRoZSBjcnVjaWFsIHBpZWNlcywgSSBuZWVkIHRvIG1ha2Ugc3VyZSBgSVhHQkVWRmAgaXMgc2V0LCBvYnZpb3VzbHkuIFRoZW4sIHdlIGFic29sdXRlbHkgbmVlZCBgUENJX01NQ09ORklHYC4gQW5kIHdoaWxlIGBQQ0lfTVNJYCBpcyB1c3VhbGx5IGVuYWJsZWQgYXMgYSBkZWZhdWx0IHNldHRpbmcsIEkgYWx3YXlzIHRoaW5rIGl0JiMzOTtzIHBydWRlbnQgdG8gaW5jbHVkZSBpdCBleHBsaWNpdGx5IGZvciBjbGFyaXR5IGFuZCB0byBlbnN1cmUgd2UgZG9uJiMzOTt0IG1pc3MgYW55dGhpbmcuIEJldHRlciBzYWZlIHRoYW4gc29ycnkgd2hlbiBjb25maWd1cmluZyB0aGVzZSBzeXN0ZW1zLgoKTm93LCBiZWZvcmUgSSBwcm9jZWVkIGZ1cnRoZXIsIEkgd2FudCB0byBkb3VibGUtY2hlY2sgdGhhdCBgUENJX01NQ09ORklHYCBkb2VzbiYjMzk7dCBoYXZlIGFueSBoaWRkZW4gZGVwZW5kZW5jaWVzIGx1cmtpbmcgaW4gdGhlIHNoYWRvd3MgdGhhdCBJIG1pZ2h0IGhhdmUgb3Zlcmxvb2tlZC4gR290dGEgbWFrZSBzdXJlIGV2ZXJ5dGhpbmcgaXMgaW4gcGxhY2UgdG8gbWluaW1pemUgZXJyb3JzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNCAxNDoyMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2FyY2gveDg2L0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAyODcwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDEwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzI4NzA6XHRjb25maWcgUENJX0RJUkVDVFxuMjg3MTpcdFx0ZGVmX2Jvb2wgeVxuMjg3MjpcdFx0ZGVwZW5kcyBvbiBQQ0kgXHUwMDI2XHUwMDI2IChYODZfNjQgfHwgKFBDSV9HT0RJUkVDVCB8fCBQQ0lfR09BTlkgfHwgUENJX0dPT0xQQyB8fCBQQ0lfR09NTUNPTkZJRykpXG4yODczOlx0XG4yODc0Olx0Y29uZmlnIFBDSV9NTUNPTkZJR1xuMjg3NTpcdFx0Ym9vbCBcJiMzNDtTdXBwb3J0IG1tY29uZmlnIFBDSSBjb25maWcgc3BhY2UgYWNjZXNzXCYjMzQ7IGlmIFg4Nl82NFxuMjg3NjpcdFx0ZGVmYXVsdCB5XG4yODc3Olx0XHRkZXBlbmRzIG9uIFBDSSBcdTAwMjZcdTAwMjYgKEFDUEkgfHwgSkFJTEhPVVNFX0dVRVNUKVxuMjg3ODpcdFx0ZGVwZW5kcyBvbiBYODZfNjQgfHwgKFBDSV9HT0FOWSB8fCBQQ0lfR09NTUNPTkZJRylcbjI4Nzk6XHRcdGhlbHBcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40My8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjQgMTQ6MjM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDU5MjgKCQkJCQkJCW91dHB1dDogMzcKCQkJCQkJCXRob3VnaHRzOiA0NjUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQW5hbHlzaXMgb2YgdGhlIGBpeGdiZXZmYCBEcml2ZXImIzM5O3MgTGluayBTcGVlZCBGZWF0dXJlIGFuZCBDb25maWd1cmF0aW9uIERlcGVuZGVuY2llcyoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBNeSBpbml0aWFsIHRob3VnaHQgd2FzIGFib3V0IHRoZSBkZXBlbmRlbmN5IGNoYWluLiBUaGUgcGF0Y2ggYWRkcyBmdW5jdGlvbmFsaXR5IHRvIHRoZSBgaXhnYmV2ZmAgZHJpdmVyIOKAkyBzcGVjaWZpY2FsbHksIHJldHJpZXZpbmcgbGluayBzcGVlZCBpbmZvcm1hdGlvbiBmcm9tIHRoZSBlbXVsYXRlZCBQQ0kgY29uZmlndXJhdGlvbiBzcGFjZSBmb3IgSHlwZXItViBFNjEwIFZpcnR1YWwgRnVuY3Rpb25zLiBUaGlzIGlzIGFjY2Vzc2VkIHZpYSB0aGUgYGl4Z2JldmZfZ2V0X2xpbmtfa3NldHRpbmdzYCBldGh0b29sIGNhbGxiYWNrIGFuZCB0aGUgZHJpdmVyJiMzOTtzIHBlcmlvZGljIGxpbmsgY2hlY2sgdGFzayAoYGl4Z2JldmZfaHZfY2hlY2tfbWFjX2xpbmtfdmZgKS4KCk15IGNvbmNlcm4sIGluaXRpYWxseSwgd2FzIHdoZXRoZXIgYFBDSV9NTUNPTkZJR2Agd2FzICpzdHJpY3RseSogcmVxdWlyZWQgZm9yIGNvbXBpbGF0aW9uLiBUaGUgY29kZSBzbmlwcGV0IHdpdGggYGRldl9lcnJfb25jZWAgc2VlbXMgdG8gc3VnZ2VzdCB0aGF0IHRoZSBkcml2ZXIgd2lsbCBjb21waWxlIHdpdGhvdXQgaXQsIGJ1dCBhdHRlbXB0aW5nIHRvICpleGVjdXRlKiB0aGUgbmV3IGxvZ2ljLCB0aGUgYHBjaV9yZWFkX2NvbmZpZ19ieXRlYCBsb29wIHNwZWNpZmljYWxseSwgd2lsbCBmYWlsIGFuZCByZXR1cm4gLUVPUE5PVFNVUFAgaWYgYFBDSV9NTUNPTkZJR2AgaXMgZGlzYWJsZWQuIFNvLCBpdCYjMzk7cyBub3QgYSBjb21waWxhdGlvbiBibG9ja2VyLCBidXQgYWJzb2x1dGVseSBlc3NlbnRpYWwgZm9yIHRlc3RpbmcgdGhpcyBuZXcgZmVhdHVyZS4KCkhvdyBkb2VzIGEgZnV6emluZyB0ZXN0IHJlYWNoIHRoaXMgY29kZT8gQWgsIFN5emthbGxlci4gSXQgbGV2ZXJhZ2VzIGEgUENJIGRldmljZSBmdXp6ZXIgdG8gZW11bGF0ZSB0aGUgc3BlY2lmaWMgVkYgZGV2aWNlIElELiBCeSBzaW11bGF0aW5nIHRoaXMgc3BlY2lmaWMgZGV2aWNlIElEIGFuZCB0aGVuIGludGVyYWN0aW5nIHdpdGggdGhlIHJlZ2lzdGVyZWQgbmV0d29yayBkZXZpY2UgdGhyb3VnaCBldGh0b29sIG9yIHdhaXRpbmcgZm9yIHRoZSBiYWNrZ3JvdW5kIHRhc2ssIHRoZSBuZXcgUENJIGNvbmZpZyBzcGFjZSByZWFkIGZ1bmN0aW9uYWxpdHkgY2FuIGJlIGV4ZXJjaXNlZC4KClRoZXJlZm9yZSwgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldyBsaW5rIHNwZWVkIHJlYWRpbmcsIEkgbmVlZCB0byBlbnN1cmUgdGhlIGZvbGxvd2luZyBjb25maWd1cmF0aW9ucyBhcmUgZW5hYmxlZDogYElYR0JFVkZgLCB3aGljaCBpcyB0aGUgZHJpdmVyIGl0c2VsZiwgYFBDSV9NTUNPTkZJR2AgZm9yIHRoZSBQQ0kgY29uZmlndXJhdGlvbiBzcGFjZSBhY2Nlc3MsIGFuZCBgUENJX01TSWAgaXMgYXV0b21hdGljYWxseSBuZWVkZWQgYXMgYSBkZXBlbmRlbmN5IG9mIGBJWEdCRVZGYC4KCkkgYWxzbyBrbm93IHRoYXQgYElYR0JFVkZgIGFsc28gZGVwZW5kcyBvbiBgUENJYCwgYE5FVERFVklDRVNgLCBgRVRIRVJORVRgLCBhbmQgYE5FVF9WRU5ET1JfSU5URUxgLiBUaGVzZSBkZXBlbmRlbmNpZXMgYXJlIHByZXR0eSBzdGFuZGFyZCwgYW5kIGBORVRfVkVORE9SX0lOVEVMYCBpcyB1c3VhbGx5IG5lZWRlZCB0byBldmVuIHNlZSB0aGUgYElYR0JFVkZgIGRyaXZlciBpbiB0aGUgY29uZmlndXJhdGlvbiBtZW51LiBUaGF0JiMzOTtzIGEgc2FuaXR5IGNoZWNrOyBJJiMzOTtsbCBtYWtlIHN1cmUgdGhvc2UgYXJlIGFsbCBlbmFibGVkIGFzIHdlbGwuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI0IDE0OjIzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvS2NvbmZpZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDEsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7ICAgMTpcdCMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxuICAgMjpcdCNcbiAgIDM6XHQjIEludGVsIG5ldHdvcmsgZGV2aWNlIGNvbmZpZ3VyYXRpb25cbiAgIDQ6XHQjXG4gICA1Olx0XG4gICA2Olx0Y29uZmlnIE5FVF9WRU5ET1JfSU5URUxcbiAgIDc6XHRcdGJvb2wgXCYjMzQ7SW50ZWwgZGV2aWNlc1wmIzM0O1xuICAgODpcdFx0ZGVmYXVsdCB5XG4gICA5Olx0XHRoZWxwXG4gIDEwOlx0XHQgIElmIHlvdSBoYXZlIGEgbmV0d29yayAoRXRoZXJuZXQpIGNhcmQgYmVsb25naW5nIHRvIHRoaXMgY2xhc3MsIHNheSBZLlxuICAxMTpcdFxuICAxMjpcdFx0ICBOb3RlIHRoYXQgdGhlIGFuc3dlciB0byB0aGlzIHF1ZXN0aW9uIGRvZXNuJiMzOTt0IGRpcmVjdGx5IGFmZmVjdCB0aGVcbiAgMTM6XHRcdCAga2VybmVsOiBzYXlpbmcgTiB3aWxsIGp1c3QgY2F1c2UgdGhlIGNvbmZpZ3VyYXRvciB0byBza2lwIGFsbFxuICAxNDpcdFx0ICB0aGUgcXVlc3Rpb25zIGFib3V0IEludGVsIGNhcmRzLiBJZiB5b3Ugc2F5IFksIHlvdSB3aWxsIGJlIGFza2VkIGZvclxuICAxNTpcdFx0ICB5b3VyIHNwZWNpZmljIGNhcmQgaW4gdGhlIGZvbGxvd2luZyBxdWVzdGlvbnMuXG4gIDE2Olx0XG4gIDE3Olx0aWYgTkVUX1ZFTkRPUl9JTlRFTFxuICAxODpcdFxuICAxOTpcdHNvdXJjZSBcJiMzNDtkcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9saWJldGgvS2NvbmZpZ1wmIzM0O1xuICAyMDpcdHNvdXJjZSBcJiMzNDtkcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9saWJpZS9LY29uZmlnXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI0IDE0OjIzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQ3MTYxCgkJCQkJCQlvdXRwdXQ6IDIwNAoJCQkJCQkJdGhvdWdodHM6IDc3NQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBc3Nlc3NtZW50IG9mIHRoZSBGdXp6aW5nIFdvcnRoaW5lc3MqKgoKT2theSwgc28gSSYjMzk7dmUgZ29uZSB0aHJvdWdoIHRoaXMgY2FyZWZ1bGx5LiBZZXMsIGFic29sdXRlbHksIGBORVRfVkVORE9SX0lOVEVMYCBpcyBhIG11c3QtaGF2ZSBmb3IgdGhpcy4gV2UmIzM5O2xsIG5lZWQgdGhlIGZvbGxvd2luZyBgRW5hYmxlQ29uZmlnc2A6IGBORVRfVkVORE9SX0lOVEVMYCwgYElYR0JFVkZgLCBgUENJX01NQ09ORklHYCwgYW5kIGBQQ0lfTVNJYC4KCkkgaGFkIHRvIGRvdWJsZS1jaGVjayB0aGF0IGBpeGdiZXZmX2h2X3JlYWRfbGlua3NfZTYxMGAgaXNuJiMzOTt0IGEgcHJvYmxlbS4gSXQmIzM5O3MgYSBzdGF0aWMgZnVuY3Rpb24sIGJ1dCBpdCYjMzk7cyBjYWxsZWQgZGlyZWN0bHkgYnkgYGl4Z2JldmZfaHZfY2hlY2tfbWFjX2xpbmtfdmZgLiBHaXZlbiB0aGF0IGl0JiMzOTtzIGNhbGxlZCBvbmx5IG9uY2UsIHRoZSBjb21waWxlciBpcyB2ZXJ5IGxpa2VseSB0byBpbmxpbmUgaXQuIElmIGlubGluZWQsIGl0IHdvbiYjMzk7dCBoYXZlIGEgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3MsIHNvIGl0JiMzOTtzIGJlc3QgKm5vdCogdG8gaW5jbHVkZSBpdCBpbiB0aGUgYEZvY3VzU3ltYm9sc2AgdG8gcHJldmVudCBhbnkgdW5uZWNlc3Nhcnkgd2FybmluZ3Mgb3IgbWlzc2luZyBjb3ZlcmFnZS4gSG93ZXZlciwgdGhlIG90aGVyIHR3bzogYGl4Z2JldmZfaHZfY2hlY2tfbWFjX2xpbmtfdmZgIGFuZCBgaXhnYmV2Zl9nZXRfbGlua19rc2V0dGluZ3NgIGFyZSBhc3NpZ25lZCB0byBmdW5jdGlvbiBwb2ludGVycywgYW5kIHNvIHdvbiYjMzk7dCBiZSBmdWxseSBpbmxpbmVkLiBUaGVzZSAqYXJlKiBpbXBvcnRhbnQuCgpOb3csIGxldCYjMzk7cyBjaXJjbGUgYmFjayB0byB0aGUgcHJvbXB0LCBtYWtpbmcgc3VyZSBJIGhhdmVuJiMzOTt0IG1pc3NlZCBhbnl0aGluZyBjcnVjaWFsLiBUaGUgaW5zdHJ1Y3Rpb24gaXMgdG8gcmV0dXJuIGBXb3J0aEZ1enppbmc9ZmFsc2VgIGlmIHRoZSBwYXRjaCBoYXMgY29kZSBwYXRocyB0aGF0IGFyZSB1bnJlYWNoYWJsZSBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgb3IgY29kZSB0aGF0IGRlcGVuZHMgb24gc3BlY2lmaWMsIG5vbi1lbXVsYXRlZCBoYXJkd2FyZS4KClRoZSBTeXprYWxsZXIgUENJIGZ1enplciBjYW4gZW11bGF0ZSBlbm91Z2ggb2YgdGhlIGRldmljZSB0byBwYXNzIHRoZSBwcm9iZSBmdW5jdGlvbiBhbmQgcmVnaXN0ZXIgdGhlIG5ldGRldiwgd2hpY2ggbWFrZXMgdGhlIGNvZGUgcmVhY2hhYmxlLiBUaGUgUENJIGZ1enplciBpbnRlcmNlcHRzIFBDSSBjb25maWcgc3BhY2UgYW5kIE1NSU8gcmVhZHMvd3JpdGVzLiBgaXhnYmV2Zl9zd19pbml0YCBkb2VzIE1NSU8gcmVhZHMvd3JpdGVzLCBsaWtlIGBJWEdCRV9SRUFEX1JFR2AuIElmIHRoZSBmdXp6ZXIgdGhyb3dzIHJhbmRvbSB2YWx1ZXMgYXQgaXQsIGByZXNldF9od2AgbWlnaHQgZmFpbCwgYnV0IGFzIHdlIG9ic2VydmVkLCB0aGUgZHJpdmVyIHdpbGwgcHJvY2VlZCBhbmQgcmVnaXN0ZXIgdGhlIG5ldGRldiBhbnl3YXkuIFNvLCBpdCYjMzk7cyBkZWZpbml0ZWx5IHJlYWNoYWJsZS4gTm8gcmVhc29uIHRvIHRoaW5rIHRoZSBQQ0kgZnV6emVyIHdvbiYjMzk7dCBiZSBlZmZlY3RpdmUgaGVyZS4KClRoZXJlZm9yZSwgSSYjMzk7bSBjb25maWRlbnQgaW4gc2V0dGluZyBgV29ydGhGdXp6aW5nPXRydWVgLgoKVGhlIHJlYXNvbmluZyBpcyB0aGF0IHRoaXMgcGF0Y2ggbW9kaWZpZXMgdGhlIGBpeGdiZXZmYCBkcml2ZXIuIEl0IGFkZHMgbG9naWMgdG8gcmVhZCB0aGUgbGluayBzcGVlZCBmcm9tIHRoZSBlbXVsYXRlZCBQQ0kgY29uZmlnIHNwYWNlIHNwZWNpZmljYWxseSBmb3IgSHlwZXItViBFNjEwIFZGcy4gVGhpcyBjb2RlIGlzIHJlYWNoYWJsZSB2aWEgdGhlIGBldGh0b29sIGdldF9saW5rX2tzZXR0aW5nc2AgY2FsbGJhY2sgYW5kIHRoZSBkcml2ZXImIzM5O3MgYmFja2dyb3VuZCBsaW5rIGNoZWNrIHRhc2suIFN5emthbGxlciBjYW4gcmVhY2ggaXQgYnkgdXNpbmcgaXRzIFBDSSBkZXZpY2UgZnV6emVyIHRvIGVtdWxhdGUgdGhlIHNwZWNpZmljIFZGIGRldmljZSBJRCwgYW5kIHRoZW4gaW50ZXJhY3Rpbmcgd2l0aCB0aGUgcmVnaXN0ZXJlZCBuZXRkZXYgdGhyb3VnaCBldGh0b29sLiBUaGUgbmV3IGxvZ2ljIGRvZXMgcmVxdWlyZSBgQ09ORklHX1BDSV9NTUNPTkZJR2AgdG8gYmUgZW5hYmxlZCB0byBwZXJmb3JtIHRoZSBQQ0kgY29uZmlnIHNwYWNlIHJlYWRzLgoKVGhlIGBGb2N1c1N5bWJvbHNgIEkgd2lsbCBmb2N1cyBvbiBhcmU6IGBpeGdiZXZmX2dldF9saW5rX2tzZXR0aW5nc2AgYW5kIGBpeGdiZXZmX2h2X2NoZWNrX21hY19saW5rX3ZmYC4KClRoZSBgRW5hYmxlIGNvbmZpZ3NgIGFyZTogYE5FVF9WRU5ET1JfSU5URUxgLCBgSVhHQkVWRmAsIGBQQ0lfTU1DT05GSUdgLCBhbmQgYFBDSV9NU0lgLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNCAxNDoyNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7TkVUX1ZFTkRPUl9JTlRFTCYjMzQ7LAogICAgJiMzNDtJWEdCRVZGJiMzNDssCiAgICAmIzM0O1BDSV9NTUNPTkZJRyYjMzQ7LAogICAgJiMzNDtQQ0lfTVNJJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7aXhnYmV2Zl9nZXRfbGlua19rc2V0dGluZ3MmIzM0OywKICAgICYjMzQ7aXhnYmV2Zl9odl9jaGVja19tYWNfbGlua192ZiYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgaXhnYmV2ZiBkcml2ZXIgdG8gcmVhZCBsaW5rIHNwZWVkIGZyb20gdGhlIGVtdWxhdGVkIFBDSSBjb25maWcgc3BhY2UgZm9yIEh5cGVyLVYgRTYxMCBWRnMuIFRoaXMgbG9naWMgaXMgcmVhY2hhYmxlIHZpYSB0aGUgZXRodG9vbCBnZXRfbGlua19rc2V0dGluZ3MgY2FsbGJhY2sgYW5kIHRoZSBkcml2ZXImIzM5O3MgYmFja2dyb3VuZCBsaW5rIGNoZWNrIHRhc2suIFN5emthbGxlciBjYW4gcmVhY2ggdGhpcyBjb2RlIGJ5IHVzaW5nIGl0cyBQQ0kgZGV2aWNlIGZ1enplciB0byBlbXVsYXRlIHRoZSBzcGVjaWZpYyBWRiBkZXZpY2UgSUQgYW5kIHRoZW4gaW50ZXJhY3Rpbmcgd2l0aCB0aGUgcmVnaXN0ZXJlZCBuZXRkZXYgdmlhIGV0aHRvb2wuIFRoZSBuZXcgbG9naWMgcmVxdWlyZXMgQ09ORklHX1BDSV9NTUNPTkZJRyB0byBiZSBlbmFibGVkIHRvIGFjdHVhbGx5IHBlcmZvcm0gdGhlIFBDSSBjb25maWcgc3BhY2UgcmVhZHMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O05FVF9WRU5ET1JfSU5URUwmIzM0OywKICAgICYjMzQ7SVhHQkVWRiYjMzQ7LAogICAgJiMzNDtQQ0lfTU1DT05GSUcmIzM0OywKICAgICYjMzQ7UENJX01TSSYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2l4Z2JldmZfZ2V0X2xpbmtfa3NldHRpbmdzJiMzNDssCiAgICAmIzM0O2l4Z2JldmZfaHZfY2hlY2tfbWFjX2xpbmtfdmYmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGl4Z2JldmYgZHJpdmVyIHRvIHJlYWQgbGluayBzcGVlZCBmcm9tIHRoZSBlbXVsYXRlZCBQQ0kgY29uZmlnIHNwYWNlIGZvciBIeXBlci1WIEU2MTAgVkZzLiBUaGlzIGxvZ2ljIGlzIHJlYWNoYWJsZSB2aWEgdGhlIGV0aHRvb2wgZ2V0X2xpbmtfa3NldHRpbmdzIGNhbGxiYWNrIGFuZCB0aGUgZHJpdmVyJiMzOTtzIGJhY2tncm91bmQgbGluayBjaGVjayB0YXNrLiBTeXprYWxsZXIgY2FuIHJlYWNoIHRoaXMgY29kZSBieSB1c2luZyBpdHMgUENJIGRldmljZSBmdXp6ZXIgdG8gZW11bGF0ZSB0aGUgc3BlY2lmaWMgVkYgZGV2aWNlIElEIGFuZCB0aGVuIGludGVyYWN0aW5nIHdpdGggdGhlIHJlZ2lzdGVyZWQgbmV0ZGV2IHZpYSBldGh0b29sLiBUaGUgbmV3IGxvZ2ljIHJlcXVpcmVzIENPTkZJR19QQ0lfTU1DT05GSUcgdG8gYmUgZW5hYmxlZCB0byBhY3R1YWxseSBwZXJmb3JtIHRoZSBQQ0kgY29uZmlnIHNwYWNlIHJlYWRzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ3LzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNCAxNDoyNDwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+SWY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI0IDE0OjI0PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmJlc3QtZXhwZW5zaXZlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGludHJvZHVjZXMgYSBuZXcgZnVuY3Rpb24gYGl4Z2JldmZfaHZfcmVhZF9saW5rc19lNjEwYCB3aGljaCByZWFkcyA0IGJ5dGVzIGZyb20gdGhlIFBDSSBjb25maWd1cmF0aW9uIHNwYWNlIGludG8gYSBsb2NhbCBzdGFjayBhcnJheSBgZGF0YWAuIFRoZSBhcnJheSBpcyBpbml0aWFsaXplZCBieXRlLWJ5LWJ5dGUgdXNpbmcgYHBjaV9yZWFkX2NvbmZpZ19ieXRlYC4gSWYgYW55IHJlYWQgZmFpbHMsIHRoZSBmdW5jdGlvbiByZXR1cm5zIGFuIGVycm9yIGltbWVkaWF0ZWx5LiBJZiBhbGwgcmVhZHMgc3VjY2VlZCwgdGhlIGFycmF5IGlzIGZ1bGx5IGluaXRpYWxpemVkIGJlZm9yZSBiZWluZyByZWFkIGJ5IGBnZXRfdW5hbGlnbmVkX2xlMzJgLiBUaGVyZSBpcyBubyByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGJlaW5nIHVzZWQgaW4gY29udHJvbCBmbG93LCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgbGVha2VkLiBTdGFuZGFyZCBLQVNBTiBhbmQgb3RoZXIgYnVnIGRldGVjdG9ycyBhcmUgc3VmZmljaWVudCB0byBjYXRjaCBhbnkgcG90ZW50aWFsIG91dC1vZi1ib3VuZHMgb3IgbWVtb3J5IGNvcnJ1cHRpb24gaXNzdWVzLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeQplcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZApkZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpCmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLgoKQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46Ci0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZQogIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTgogIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVAKICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLgotIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLAogIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy4KClJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sCkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuCkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFkKc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3MKdGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi4KCkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0CnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLAphIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXMKdGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmcKdW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sCmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSwKY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuCgpTZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6CjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiCiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzCiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuCjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMKICAgb3Igc3RydWN0IGZpZWxkcy4KMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkcwogICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLgo0LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2VzcwogICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuCgpTZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjoKLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlcgogIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodAogIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS4KLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZAogIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC4KLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuCgpVc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlCmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCBjMDIyNmY3MmY3YjU0ODNmZTI5N2MyZDNiNmMxNzMxYjA0NDFlMjhjCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIE1vbiBBdWcgMjQgMTQ6MTk6MTUgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9peGdiZXZmL2V0aHRvb2wuYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2l4Z2JldmYvZXRodG9vbC5jCmluZGV4IDUzN2E2MGQ1Mjc2ZjAuLjI0NjNmY2NmZmQ0ZGEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2l4Z2JldmYvZXRodG9vbC5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2l4Z2JldmYvZXRodG9vbC5jCkBAIC04Myw2ICYjNDM7ODMsMTggQEAgc3RhdGljIGludCBpeGdiZXZmX2dldF9saW5rX2tzZXR0aW5ncyhzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LAogCQkJCSAgICAgIHN0cnVjdCBldGh0b29sX2xpbmtfa3NldHRpbmdzICpjbWQpCiB7CiAJc3RydWN0IGl4Z2JldmZfYWRhcHRlciAqYWRhcHRlciA9IG5ldGRldl9wcml2KG5ldGRldik7CiYjNDM7CXN0cnVjdCBpeGdiZV9odyAqaHcgPSAmYW1wO2FkYXB0ZXItJmd0O2h3OwomIzQzOwomIzQzOwkvKiBFNjEwIEh5cGVyLVYgVkZzOiByZWFkIGN1cnJlbnQgbGluayBzcGVlZCBmcm9tIFBDSSBjb25maWcgc3BhY2UKJiM0MzsJICogb24gZXZlcnkgbGluayBzcGVlZCBxdWVyeS4KJiM0MzsJICovCiYjNDM7CWlmIChody0mZ3Q7bWFjLnR5cGUgPT0gaXhnYmVfbWFjX2U2MTBfdmYpIHsKJiM0MzsJCXNwaW5fbG9ja19iaCgmYW1wO2FkYXB0ZXItJmd0O21ieF9sb2NrKTsKJiM0MzsJCWh3LSZndDttYWMuZ2V0X2xpbmtfc3RhdHVzID0gdHJ1ZTsKJiM0MzsJCWh3LSZndDttYWMub3BzLmNoZWNrX2xpbmsoaHcsICZhbXA7YWRhcHRlci0mZ3Q7bGlua19zcGVlZCwKJiM0MzsJCQkJICAgICAgICZhbXA7YWRhcHRlci0mZ3Q7bGlua191cCwgZmFsc2UpOwomIzQzOwkJc3Bpbl91bmxvY2tfYmgoJmFtcDthZGFwdGVyLSZndDttYnhfbG9jayk7CiYjNDM7CX0KIAogCWV0aHRvb2xfbGlua19rc2V0dGluZ3NfemVyb19saW5rX21vZGUoY21kLCBzdXBwb3J0ZWQpOwogCWV0aHRvb2xfbGlua19rc2V0dGluZ3NfYWRkX2xpbmtfbW9kZShjbWQsIHN1cHBvcnRlZCwgMTAwMDBiYXNlVF9GdWxsKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2l4Z2JldmYvdmYuYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2l4Z2JldmYvdmYuYwppbmRleCBmNmRmODZkMTI0YjllLi5hODRiNjI2NDFlOWJjIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9peGdiZXZmL3ZmLmMKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaXhnYmV2Zi92Zi5jCkBAIC0xLDE0ICYjNDM7MSwxNyBAQAogLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAKIC8qIENvcHlyaWdodChjKSAxOTk5IC0gMjAyNCBJbnRlbCBDb3Jwb3JhdGlvbi4gKi8KIAomIzQzOyNpbmNsdWRlICZsdDtsaW51eC91bmFsaWduZWQuaCZndDsKJiM0MzsKICNpbmNsdWRlICYjMzQ7dmYuaCYjMzQ7CiAjaW5jbHVkZSAmIzM0O2l4Z2JldmYuaCYjMzQ7CiAKLS8qIE9uIEh5cGVyLVYsIHRvIHJlc2V0LCB3ZSBuZWVkIHRvIHJlYWQgZnJvbSB0aGlzIG9mZnNldAotICogZnJvbSB0aGUgUENJIGNvbmZpZyBzcGFjZS4gVGhpcyBpcyB0aGUgbWVjaGFuaXNtIHVzZWQgb24KLSAqIEh5cGVyLVYgdG8gc3VwcG9ydCBQRi9WRiBjb21tdW5pY2F0aW9uLgomIzQzOy8qIE9uIEh5cGVyLVYgdGhlIFBGL1ZGIGNvbW11bmljYXRpb24gaXMgdGhyb3VnaCBlbXVsYXRlZCBQQ0kgY29uZmlnCiYjNDM7ICogc3BhY2UuIFRoZSByZXNldCBhbmQgbGluayBzdGF0dXMgYXJlIGV4cG9zZWQgYXQgdGhlIG9mZnNldHMgYmVsb3cuCiAgKi8KLSNkZWZpbmUgSVhHQkVfSFZfUkVTRVRfT0ZGU0VUICAgICAgICAgICAweDIwMQomIzQzOyNkZWZpbmUgSVhHQkVfSFZfUkVTRVRfT0ZGU0VUCQkweDIwMQomIzQzOyNkZWZpbmUgSVhHQkVfSFZfTElOS19TVEFUVVNfT0ZGU0VUCTB4MjA5CiYjNDM7I2RlZmluZSBJWEdCRV9IVl9MSU5LX1NUQVRVU19TSVpFCTQKIAogc3RhdGljIGlubGluZSBzMzIgaXhnYmV2Zl93cml0ZV9tc2dfcmVhZF9hY2soc3RydWN0IGl4Z2JlX2h3ICpodywgdTMyICptc2csCiAJCQkJCSAgICAgdTMyICpyZXRtc2csIHUxNiBzaXplKQpAQCAtOTAxLDYgJiM0Mzs5MDQsNDAgQEAgc3RhdGljIHMzMiBpeGdiZXZmX2NoZWNrX21hY19saW5rX3ZmKHN0cnVjdCBpeGdiZV9odyAqaHcsCiAJcmV0dXJuIHJldF92YWw7CiB9CiAKJiM0MzsvKioKJiM0MzsgKiBpeGdiZXZmX2h2X3JlYWRfbGlua3NfZTYxMCAtIHJlYWQgbGluayBzdGF0dXMgZnJvbSBQQ0kgY29uZmlnIHNwYWNlCiYjNDM7ICogQGh3OiBwb2ludGVyIHRvIGhhcmR3YXJlIHN0cnVjdHVyZQomIzQzOyAqIEBsaW5rc19yZWc6IHBvaW50ZXIgdG8gc3RvcmUgcmVhZCB2YWx1ZQomIzQzOyAqCiYjNDM7ICogT24gSHlwZXItViBFNjEwIFZGcyB0aGUgVkZMSU5LUyByZWdpc3RlciBkb2VzIG5vdCBjYXJyeSB2YWxpZCBsaW5rIHNwZWVkLgomIzQzOyAqIEluc3RlYWQsIGxpbmsgc3RhdHVzIGlzIGV4cG9zZWQgdGhyb3VnaCBlbXVsYXRlZCBQQ0kgY29uZmlnIHNwYWNlIGF0IG9mZnNldAomIzQzOyAqIDB4MjA5IGluIFZGTElOS1MgcmVnaXN0ZXIgZm9ybWF0LgomIzQzOyAqCiYjNDM7ICogUmV0dXJuOiAwIG9uIHN1Y2Nlc3MsIG5lZ2F0aXZlIGVycm9yIGNvZGUgb24gZmFpbHVyZS4KJiM0MzsgKi8KJiM0MztzdGF0aWMgczMyIGl4Z2JldmZfaHZfcmVhZF9saW5rc19lNjEwKHN0cnVjdCBpeGdiZV9odyAqaHcsIHUzMiAqbGlua3NfcmVnKQomIzQzO3sKJiM0MzsJc3RydWN0IGl4Z2JldmZfYWRhcHRlciAqYWRhcHRlciA9IGh3LSZndDtiYWNrOwomIzQzOwl1OCBkYXRhW0lYR0JFX0hWX0xJTktfU1RBVFVTX1NJWkVdOwomIzQzOwomIzQzOwlpZiAoIUlTX0VOQUJMRUQoQ09ORklHX1BDSV9NTUNPTkZJRykpIHsKJiM0MzsJCWRldl9lcnJfb25jZSgmYW1wO2FkYXB0ZXItJmd0O3BkZXYtJmd0O2RldiwKJiM0MzsJCQkgICAgICYjMzQ7Y2Fubm90IHJlYWQgbGluayBzdGF0dXMsIFBDSV9NTUNPTkZJRyBpcyByZXF1aXJlZCBmb3IgSHlwZXItVlxuJiMzNDspOwomIzQzOwkJcmV0dXJuIC1FT1BOT1RTVVBQOwomIzQzOwl9CiYjNDM7CiYjNDM7CWZvciAoaW50IGkgPSAwOyBpICZsdDsgSVhHQkVfSFZfTElOS19TVEFUVVNfU0laRTsgaSYjNDM7JiM0MzspIHsKJiM0MzsJCWludCByZXQgPSBwY2lfcmVhZF9jb25maWdfYnl0ZShhZGFwdGVyLSZndDtwZGV2LAomIzQzOwkJCQkJICAgICAgIElYR0JFX0hWX0xJTktfU1RBVFVTX09GRlNFVCAmIzQzOyBpLAomIzQzOwkJCQkJICAgICAgICZhbXA7ZGF0YVtpXSk7CiYjNDM7CQlpZiAocmV0KQomIzQzOwkJCXJldHVybiBwY2liaW9zX2Vycl90b19lcnJubyhyZXQpOwomIzQzOwl9CiYjNDM7CiYjNDM7CSpsaW5rc19yZWcgPSBnZXRfdW5hbGlnbmVkX2xlMzIoZGF0YSk7CiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MzsKIC8qKgogICogaXhnYmV2Zl9odl9jaGVja19tYWNfbGlua192ZiAtIGNoZWNrIGxpbmsKICAqIEBodzogcG9pbnRlciB0byBwcml2YXRlIGhhcmR3YXJlIHN0cnVjdApAQCAtOTA5LDYgJiM0Mzs5NDYsNyBAQCBzdGF0aWMgczMyIGl4Z2JldmZfY2hlY2tfbWFjX2xpbmtfdmYoc3RydWN0IGl4Z2JlX2h3ICpodywKICAqIEBhdXRvbmVnX3dhaXRfdG9fY29tcGxldGU6IHVudXNlZAogICoKICAqIEh5cGVyLVYgdmFyaWFudDsgdGhlcmUgaXMgbm8gbWFpbGJveCBjb21tdW5pY2F0aW9uLgomIzQzOyAqIEZvciBFNjEwIFZGcywgbGluayBzdGF0dXMgaXMgcmVhZCBmcm9tIGVtdWxhdGVkIFBDSSBjb25maWcgc3BhY2UuCiAgKi8KIHN0YXRpYyBzMzIgaXhnYmV2Zl9odl9jaGVja19tYWNfbGlua192ZihzdHJ1Y3QgaXhnYmVfaHcgKmh3LAogCQkJCQlpeGdiZV9saW5rX3NwZWVkICpzcGVlZCwKQEAgLTkyNiw4ICYjNDM7OTY0LDE2IEBAIHN0YXRpYyBzMzIgaXhnYmV2Zl9odl9jaGVja19tYWNfbGlua192ZihzdHJ1Y3QgaXhnYmVfaHcgKmh3LAogCWlmICghbWFjLSZndDtnZXRfbGlua19zdGF0dXMpCiAJCWdvdG8gb3V0OwogCi0JLyogaWYgbGluayBzdGF0dXMgaXMgZG93biBubyBwb2ludCBpbiBjaGVja2luZyB0byBzZWUgaWYgcGYgaXMgdXAgKi8KLQlsaW5rc19yZWcgPSBJWEdCRV9SRUFEX1JFRyhodywgSVhHQkVfVkZMSU5LUyk7CiYjNDM7CWlmIChtYWMtJmd0O3R5cGUgPT0gaXhnYmVfbWFjX2U2MTBfdmYpIHsKJiM0MzsJCWlmIChpeGdiZXZmX2h2X3JlYWRfbGlua3NfZTYxMChodywgJmFtcDtsaW5rc19yZWcpKSB7CiYjNDM7CQkJKmxpbmtfdXAgPSBmYWxzZTsKJiM0MzsJCQkqc3BlZWQgPSBJWEdCRV9MSU5LX1NQRUVEX1VOS05PV047CiYjNDM7CQkJcmV0dXJuIDA7CiYjNDM7CQl9CiYjNDM7CX0gZWxzZSB7CiYjNDM7CQlsaW5rc19yZWcgPSBJWEdCRV9SRUFEX1JFRyhodywgSVhHQkVfVkZMSU5LUyk7CiYjNDM7CX0KJiM0MzsKIAlpZiAoIShsaW5rc19yZWcgJmFtcDsgSVhHQkVfTElOS1NfVVApKQogCQlnb3RvIG91dDsKIApAQCAtOTQxLDggJiM0Mzs5ODcsMTEgQEAgc3RhdGljIHMzMiBpeGdiZXZmX2h2X2NoZWNrX21hY19saW5rX3ZmKHN0cnVjdCBpeGdiZV9odyAqaHcsCiAJCQl1ZGVsYXkoMTAwKTsKIAkJCWxpbmtzX3JlZyA9IElYR0JFX1JFQURfUkVHKGh3LCBJWEdCRV9WRkxJTktTKTsKIAotCQkJaWYgKCEobGlua3NfcmVnICZhbXA7IElYR0JFX0xJTktTX1VQKSkKLQkJCQlnb3RvIG91dDsKJiM0MzsJCQlpZiAoIShsaW5rc19yZWcgJmFtcDsgSVhHQkVfTElOS1NfVVApKSB7CiYjNDM7CQkJCSpsaW5rX3VwID0gZmFsc2U7CiYjNDM7CQkJCSpzcGVlZCA9IElYR0JFX0xJTktfU1BFRURfVU5LTk9XTjsKJiM0MzsJCQkJcmV0dXJuIDA7CiYjNDM7CQkJfQogCQl9CiAJfQogCkBAIC05NTYsNiAmIzQzOzEwMDUsOSBAQCBzdGF0aWMgczMyIGl4Z2JldmZfaHZfY2hlY2tfbWFjX2xpbmtfdmYoc3RydWN0IGl4Z2JlX2h3ICpodywKIAljYXNlIElYR0JFX0xJTktTX1NQRUVEXzEwMF84MjU5OToKIAkJKnNwZWVkID0gSVhHQkVfTElOS19TUEVFRF8xMDBfRlVMTDsKIAkJYnJlYWs7CiYjNDM7CWRlZmF1bHQ6CiYjNDM7CQkqc3BlZWQgPSBJWEdCRV9MSU5LX1NQRUVEX1VOS05PV047CiYjNDM7CQlicmVhazsKIAl9CiAKIAkvKiBpZiB3ZSBwYXNzZWQgYWxsIHRoZSB0ZXN0cyBhYm92ZSB0aGVuIHRoZSBsaW5rIGlzIHVwIGFuZCB3ZSBubwo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40OS8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjQgMTQ6MjQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzgzOQoJCQkJCQkJb3V0cHV0OiAxNjkKCQkJCQkJCXRob3VnaHRzOiA2OTEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQXNzZXNzbWVudCBvZiB0aGUgaXhnYmV2ZiBEcml2ZXIgUGF0Y2gqKgoKQWxyaWdodCwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gVGhpcyBwYXRjaCBpcyB0YXJnZXRpbmcgdGhlIGBpeGdiZXZmYCBkcml2ZXIg4oCTIHRoZSBJbnRlbCAxMCBHaWdhYml0IFBDSSBFeHByZXNzIFZpcnR1YWwgRnVuY3Rpb24gZHJpdmVyIOKAkyBzcGVjaWZpY2FsbHkgdG8gYWRkIHRoZSBhYmlsaXR5IHRvIHJlYWQgbGluayBzdGF0dXMgZGlyZWN0bHkgZnJvbSB0aGUgUENJIGNvbmZpZ3VyYXRpb24gc3BhY2UgZm9yIEU2MTAgSHlwZXItViBWaXJ0dWFsIEZ1bmN0aW9ucy4KCk15IGFuYWx5c2lzIGZvY3VzZXMgb24gcG90ZW50aWFsIG1lbW9yeSBzYWZldHkgaXNzdWVzLCBwYXJ0aWN1bGFybHkgcmVnYXJkaW5nIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzLgoKVGhlIGNvcmUgb2YgdGhlIGNoYW5nZSBsaWVzIGluIHRoZXNlIGZ1bmN0aW9uczoKCjEuICBgaXhnYmV2Zl9nZXRfbGlua19rc2V0dGluZ3NgIGluIGBldGh0b29sLmNgIG5vdyBjYWxscyBgaHctJmd0O21hYy5vcHMuY2hlY2tfbGlua2AsIHdoaWNoIGlzIGNydWNpYWwgZm9yIGxpbmsgc3RhdHVzLgoKMi4gIGBpeGdiZXZmX2h2X3JlYWRfbGlua3NfZTYxMGAgaW4gYHZmLmNgIGlzIHRoZSBrZXkgcGllY2UuIEl0IGF0dGVtcHRzIHRvIHJlYWQgNCBieXRlcyBvZiBsaW5rIHN0YXR1cyBkYXRhIGZyb20gdGhlIFBDSSBjb25maWcgc3BhY2UgaW50byBhIGB1OCBkYXRhW0lYR0JFX0hWX0xJTktfU1RBVFVTX1NJWkVdYCBhcnJheS4gVGhpcyBpcyBkb25lIGJ5dGUgYnkgYnl0ZSB1c2luZyBgcGNpX3JlYWRfY29uZmlnX2J5dGVgLiBDcnVjaWFsbHksIGlmIGFueSBgcGNpX3JlYWRfY29uZmlnX2J5dGVgIGZhaWxzIChyZXR1cm5zIGEgbm9uLXplcm8gdmFsdWUpLCB0aGUgZnVuY3Rpb24gKmltbWVkaWF0ZWx5IHJldHVybnMqLCBwcmV2ZW50aW5nIGFueSB1c2Ugb2YgcGFydGlhbGx5IGluaXRpYWxpemVkIGRhdGEuIElmIHN1Y2Nlc3NmdWwsICphbGwgZm91ciBieXRlcyogb2YgdGhlIGBkYXRhYCBhcnJheSBhcmUgZmlsbGVkLiBUaGUgZnVuY3Rpb24gdGhlbiBjb25zdHJ1Y3RzIGEgMzItYml0IHZhbHVlIHVzaW5nIGBnZXRfdW5hbGlnbmVkX2xlMzIoZGF0YSlgLgoKMy4gYGl4Z2JldmZfaHZfY2hlY2tfbWFjX2xpbmtfdmZgIGNhbGxzIHRoZSBhYm92ZSBmdW5jdGlvbi4gSWYgdGhlIHJlYWQgZmFpbHMsIHRoZSBsaW5rIHN0YXR1cyBpcyBzZXQgdG8gJiMzNDtkb3duJiMzNDsgYW5kIHNwZWVkIHRvICYjMzQ7dW5rbm93biYjMzQ7LiBJZiBpdCBzdWNjZWVkcywgdGhlIHJlYWQgZGF0YSBpcyB1c2VkIHRvIGRldGVybWluZSBsaW5rIHNwZWVkLgoKVGhlIGNlbnRyYWwgcXVlc3Rpb24gaGVyZSBpcyB3aGV0aGVyIHRoaXMgaW50cm9kdWNlcyB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcy4gSSYjMzk7bSBzYXRpc2ZpZWQgdGhhdCBpdCAqZG9lc24mIzM5O3QqLiBUaGUgYGRhdGFgIGFycmF5IGlzIGV4cGxpY2l0bHkgaW5pdGlhbGl6ZWQsIGJ5dGUgYnkgYnl0ZSwgdXNpbmcgYHBjaV9yZWFkX2NvbmZpZ19ieXRlYC4gRmFpbHVyZSBhdCBhbnkgcG9pbnQgY2F1c2VzIGFuIGltbWVkaWF0ZSBleGl0IGZyb20gdGhlIGZ1bmN0aW9uLCBzbyB0aGUgcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCBgZGF0YWAgYXJyYXkgaXMgbmV2ZXIgYWNjZXNzZWQuIFdoZW4gdGhlIHJlYWQgc3VjY2VlZHMsIGFsbCBieXRlcyBhcmUgaW5pdGlhbGl6ZWQgYmVmb3JlIGBnZXRfdW5hbGlnbmVkX2xlMzJgIGlzIGNhbGxlZC4gSXTigJlzIGFsc28gaW1wb3J0YW50IHRvIG5vdGUgdGhhdCB0aGUgcGF0Y2ggZG9lc24mIzM5O3QgaW50cm9kdWNlIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIG9yIGFueSB1bnVzdWFsIHBhZGRpbmcgc2NlbmFyaW9zLgoKYHBjaV9yZWFkX2NvbmZpZ19ieXRlYOKAmXMgYmVoYXZpb3IgZnVydGhlciByZWluZm9yY2VzIHRoaXMuIEl0IHRha2VzIGEgcG9pbnRlciB0byBgdThgIGFuZCwgdXBvbiBhIHN1Y2Nlc3NmdWwgcmVhZCwgcGxhY2VzIHRoZSB2YWx1ZSBhdCB0aGF0IGFkZHJlc3MuIFNvIGlmIHRoZSBjYWxsIHJldHVybnMgemVybywgdGhlIG1lbW9yeSBiZWluZyBwb2ludGVkIHRvIGhhcyBiZWVuIHN1Y2Nlc3NmdWxseSB3cml0dGVuIHRvLgoKVGhlcmVmb3JlLCBnaXZlbiB0aGUgZXhwbGljaXQgaW5pdGlhbGl6YXRpb24gc3RyYXRlZ3kgYW5kIHRoZSBlYXJseS1leGl0IGVycm9yIGhhbmRsaW5nLCBJIGNhbiBjb25maWRlbnRseSBzdGF0ZSB0aGF0IEtlcm5lbCBNZW1vcnkgU2FuaXRpemVyIChLTVNBTikgaXMgKm5vdCogbmVjZXNzYXJ5IGhlcmUuIFRoZSBwb3RlbnRpYWwgZm9yIG1lbW9yeSBlcnJvcnMgaXMgYWxyZWFkeSBhZGRyZXNzZWQgYnkgdGhlIGJ5dGUtYnktYnl0ZSBpbml0aWFsaXphdGlvbiB3aXRoIGEgY2hlY2sgZm9yIGVhY2ggYnl0ZS4gS0FTQU4gYW5kIHN0YW5kYXJkIHRvb2xzIHNob3VsZCBzdWZmaWNlIHRvIGNhdGNoIGFueSBwb3RlbnRpYWwgbWVtb3J5IGVycm9ycywgdGhvdWdoIEkgc2VlIG5vbmUgYXBwYXJlbnQuCgpJJiMzOTttIHNldHRpbmcgYE5lZWRzS01TQU49ZmFsc2VgIGZvciB0aGlzIHBhdGNoLiBNeSBhbmFseXNpcyBhbmQgdGhlIGxvdy1sZXZlbCBmdW5jdGlvbnMgdXNlZCBjb25maXJtIHRoYXQgdGhlIG1lbW9yeSBzYWZldHkgcmVxdWlyZW1lbnRzIGFyZSBtZXQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTAvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI0IDE0OjI0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGludHJvZHVjZXMgYSBuZXcgZnVuY3Rpb24gYGl4Z2JldmZfaHZfcmVhZF9saW5rc19lNjEwYCB3aGljaCByZWFkcyA0IGJ5dGVzIGZyb20gdGhlIFBDSSBjb25maWd1cmF0aW9uIHNwYWNlIGludG8gYSBsb2NhbCBzdGFjayBhcnJheSBgZGF0YWAuIFRoZSBhcnJheSBpcyBpbml0aWFsaXplZCBieXRlLWJ5LWJ5dGUgdXNpbmcgYHBjaV9yZWFkX2NvbmZpZ19ieXRlYC4gSWYgYW55IHJlYWQgZmFpbHMsIHRoZSBmdW5jdGlvbiByZXR1cm5zIGFuIGVycm9yIGltbWVkaWF0ZWx5LiBJZiBhbGwgcmVhZHMgc3VjY2VlZCwgdGhlIGFycmF5IGlzIGZ1bGx5IGluaXRpYWxpemVkIGJlZm9yZSBiZWluZyByZWFkIGJ5IGBnZXRfdW5hbGlnbmVkX2xlMzJgLiBUaGVyZSBpcyBubyByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGJlaW5nIHVzZWQgaW4gY29udHJvbCBmbG93LCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgbGVha2VkLiBTdGFuZGFyZCBLQVNBTiBhbmQgb3RoZXIgYnVnIGRldGVjdG9ycyBhcmUgc3VmZmljaWVudCB0byBjYXRjaCBhbnkgcG90ZW50aWFsIG91dC1vZi1ib3VuZHMgb3IgbWVtb3J5IGNvcnJ1cHRpb24gaXNzdWVzLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIG5ldyBmdW5jdGlvbiBgaXhnYmV2Zl9odl9yZWFkX2xpbmtzX2U2MTBgIHdoaWNoIHJlYWRzIDQgYnl0ZXMgZnJvbSB0aGUgUENJIGNvbmZpZ3VyYXRpb24gc3BhY2UgaW50byBhIGxvY2FsIHN0YWNrIGFycmF5IGBkYXRhYC4gVGhlIGFycmF5IGlzIGluaXRpYWxpemVkIGJ5dGUtYnktYnl0ZSB1c2luZyBgcGNpX3JlYWRfY29uZmlnX2J5dGVgLiBJZiBhbnkgcmVhZCBmYWlscywgdGhlIGZ1bmN0aW9uIHJldHVybnMgYW4gZXJyb3IgaW1tZWRpYXRlbHkuIElmIGFsbCByZWFkcyBzdWNjZWVkLCB0aGUgYXJyYXkgaXMgZnVsbHkgaW5pdGlhbGl6ZWQgYmVmb3JlIGJlaW5nIHJlYWQgYnkgYGdldF91bmFsaWduZWRfbGUzMmAuIFRoZXJlIGlzIG5vIHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgYmVpbmcgdXNlZCBpbiBjb250cm9sIGZsb3csIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciBsZWFrZWQuIFN0YW5kYXJkIEtBU0FOIGFuZCBvdGhlciBidWcgZGV0ZWN0b3JzIGFyZSBzdWZmaWNpZW50IHRvIGNhdGNoIGFueSBwb3RlbnRpYWwgb3V0LW9mLWJvdW5kcyBvciBtZW1vcnkgY29ycnVwdGlvbiBpc3N1ZXMuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI0VDE0OjE5OjE3Ljc5OTQyNzQ2NloiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjMwNDI4MDI3NzA0OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJORVRfVkVORE9SX0lOVEVMXCIsXG4gICAgXCJJWEdCRVZGXCIsXG4gICAgXCJQQ0lfTU1DT05GSUdcIixcbiAgICBcIlBDSV9NU0lcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJpeGdiZXZmX2dldF9saW5rX2tzZXR0aW5nc1wiLFxuICAgIFwiaXhnYmV2Zl9odl9jaGVja19tYWNfbGlua192ZlwiXG4gIF0sXG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIG5ldyBmdW5jdGlvbiBgaXhnYmV2Zl9odl9yZWFkX2xpbmtzX2U2MTBgIHdoaWNoIHJlYWRzIDQgYnl0ZXMgZnJvbSB0aGUgUENJIGNvbmZpZ3VyYXRpb24gc3BhY2UgaW50byBhIGxvY2FsIHN0YWNrIGFycmF5IGBkYXRhYC4gVGhlIGFycmF5IGlzIGluaXRpYWxpemVkIGJ5dGUtYnktYnl0ZSB1c2luZyBgcGNpX3JlYWRfY29uZmlnX2J5dGVgLiBJZiBhbnkgcmVhZCBmYWlscywgdGhlIGZ1bmN0aW9uIHJldHVybnMgYW4gZXJyb3IgaW1tZWRpYXRlbHkuIElmIGFsbCByZWFkcyBzdWNjZWVkLCB0aGUgYXJyYXkgaXMgZnVsbHkgaW5pdGlhbGl6ZWQgYmVmb3JlIGJlaW5nIHJlYWQgYnkgYGdldF91bmFsaWduZWRfbGUzMmAuIFRoZXJlIGlzIG5vIHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgYmVpbmcgdXNlZCBpbiBjb250cm9sIGZsb3csIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciBsZWFrZWQuIFN0YW5kYXJkIEtBU0FOIGFuZCBvdGhlciBidWcgZGV0ZWN0b3JzIGFyZSBzdWZmaWNpZW50IHRvIGNhdGNoIGFueSBwb3RlbnRpYWwgb3V0LW9mLWJvdW5kcyBvciBtZW1vcnkgY29ycnVwdGlvbiBpc3N1ZXMuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGl4Z2JldmYgZHJpdmVyIHRvIHJlYWQgbGluayBzcGVlZCBmcm9tIHRoZSBlbXVsYXRlZCBQQ0kgY29uZmlnIHNwYWNlIGZvciBIeXBlci1WIEU2MTAgVkZzLiBUaGlzIGxvZ2ljIGlzIHJlYWNoYWJsZSB2aWEgdGhlIGV0aHRvb2wgZ2V0X2xpbmtfa3NldHRpbmdzIGNhbGxiYWNrIGFuZCB0aGUgZHJpdmVyJ3MgYmFja2dyb3VuZCBsaW5rIGNoZWNrIHRhc2suIFN5emthbGxlciBjYW4gcmVhY2ggdGhpcyBjb2RlIGJ5IHVzaW5nIGl0cyBQQ0kgZGV2aWNlIGZ1enplciB0byBlbXVsYXRlIHRoZSBzcGVjaWZpYyBWRiBkZXZpY2UgSUQgYW5kIHRoZW4gaW50ZXJhY3Rpbmcgd2l0aCB0aGUgcmVnaXN0ZXJlZCBuZXRkZXYgdmlhIGV0aHRvb2wuIFRoZSBuZXcgbG9naWMgcmVxdWlyZXMgQ09ORklHX1BDSV9NTUNPTkZJRyB0byBiZSBlbmFibGVkIHRvIGFjdHVhbGx5IHBlcmZvcm0gdGhlIFBDSSBjb25maWcgc3BhY2UgcmVhZHMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI0VDE0OjE5OjE3Ljc5OTQzNDI3NloiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTc0NzUzMTU3MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IGMwMjI2ZjcyZjdiNTQ4M2ZlMjk3YzJkM2I2YzE3MzFiMDQ0MWUyOGNcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIE1vbiBBdWcgMjQgMTQ6MTk6MTUgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaXhnYmV2Zi9ldGh0b29sLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9peGdiZXZmL2V0aHRvb2wuY1xcbmluZGV4IDUzN2E2MGQ1Mjc2ZjAuLjI0NjNmY2NmZmQ0ZGEgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaXhnYmV2Zi9ldGh0b29sLmNcXG4rKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9peGdiZXZmL2V0aHRvb2wuY1xcbkBAIC04Myw2ICs4MywxOCBAQCBzdGF0aWMgaW50IGl4Z2JldmZfZ2V0X2xpbmtfa3NldHRpbmdzKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsXFxuIFxcdFxcdFxcdFxcdCAgICAgIHN0cnVjdCBldGh0b29sX2xpbmtfa3NldHRpbmdzICpjbWQpXFxuIHtcXG4gXFx0c3RydWN0IGl4Z2JldmZfYWRhcHRlciAqYWRhcHRlciA9IG5ldGRldl9wcml2KG5ldGRldik7XFxuK1xcdHN0cnVjdCBpeGdiZV9odyAqaHcgPSBcXHUwMDI2YWRhcHRlci1cXHUwMDNlaHc7XFxuK1xcbitcXHQvKiBFNjEwIEh5cGVyLVYgVkZzOiByZWFkIGN1cnJlbnQgbGluayBzcGVlZCBmcm9tIFBDSSBjb25maWcgc3BhY2VcXG4rXFx0ICogb24gZXZlcnkgbGluayBzcGVlZCBxdWVyeS5cXG4rXFx0ICovXFxuK1xcdGlmIChody1cXHUwMDNlbWFjLnR5cGUgPT0gaXhnYmVfbWFjX2U2MTBfdmYpIHtcXG4rXFx0XFx0c3Bpbl9sb2NrX2JoKFxcdTAwMjZhZGFwdGVyLVxcdTAwM2VtYnhfbG9jayk7XFxuK1xcdFxcdGh3LVxcdTAwM2VtYWMuZ2V0X2xpbmtfc3RhdHVzID0gdHJ1ZTtcXG4rXFx0XFx0aHctXFx1MDAzZW1hYy5vcHMuY2hlY2tfbGluayhodywgXFx1MDAyNmFkYXB0ZXItXFx1MDAzZWxpbmtfc3BlZWQsXFxuK1xcdFxcdFxcdFxcdCAgICAgICBcXHUwMDI2YWRhcHRlci1cXHUwMDNlbGlua191cCwgZmFsc2UpO1xcbitcXHRcXHRzcGluX3VubG9ja19iaChcXHUwMDI2YWRhcHRlci1cXHUwMDNlbWJ4X2xvY2spO1xcbitcXHR9XFxuIFxcbiBcXHRldGh0b29sX2xpbmtfa3NldHRpbmdzX3plcm9fbGlua19tb2RlKGNtZCwgc3VwcG9ydGVkKTtcXG4gXFx0ZXRodG9vbF9saW5rX2tzZXR0aW5nc19hZGRfbGlua19tb2RlKGNtZCwgc3VwcG9ydGVkLCAxMDAwMGJhc2VUX0Z1bGwpO1xcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9peGdiZXZmL3ZmLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9peGdiZXZmL3ZmLmNcXG5pbmRleCBmNmRmODZkMTI0YjllLi5hODRiNjI2NDFlOWJjIDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2l4Z2JldmYvdmYuY1xcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2l4Z2JldmYvdmYuY1xcbkBAIC0xLDE0ICsxLDE3IEBAXFxuIC8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXFxuIC8qIENvcHlyaWdodChjKSAxOTk5IC0gMjAyNCBJbnRlbCBDb3Jwb3JhdGlvbi4gKi9cXG4gXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC91bmFsaWduZWQuaFxcdTAwM2VcXG4rXFxuICNpbmNsdWRlIFxcXCJ2Zi5oXFxcIlxcbiAjaW5jbHVkZSBcXFwiaXhnYmV2Zi5oXFxcIlxcbiBcXG4tLyogT24gSHlwZXItViwgdG8gcmVzZXQsIHdlIG5lZWQgdG8gcmVhZCBmcm9tIHRoaXMgb2Zmc2V0XFxuLSAqIGZyb20gdGhlIFBDSSBjb25maWcgc3BhY2UuIFRoaXMgaXMgdGhlIG1lY2hhbmlzbSB1c2VkIG9uXFxuLSAqIEh5cGVyLVYgdG8gc3VwcG9ydCBQRi9WRiBjb21tdW5pY2F0aW9uLlxcbisvKiBPbiBIeXBlci1WIHRoZSBQRi9WRiBjb21tdW5pY2F0aW9uIGlzIHRocm91Z2ggZW11bGF0ZWQgUENJIGNvbmZpZ1xcbisgKiBzcGFjZS4gVGhlIHJlc2V0IGFuZCBsaW5rIHN0YXR1cyBhcmUgZXhwb3NlZCBhdCB0aGUgb2Zmc2V0cyBiZWxvdy5cXG4gICovXFxuLSNkZWZpbmUgSVhHQkVfSFZfUkVTRVRfT0ZGU0VUICAgICAgICAgICAweDIwMVxcbisjZGVmaW5lIElYR0JFX0hWX1JFU0VUX09GRlNFVFxcdFxcdDB4MjAxXFxuKyNkZWZpbmUgSVhHQkVfSFZfTElOS19TVEFUVVNfT0ZGU0VUXFx0MHgyMDlcXG4rI2RlZmluZSBJWEdCRV9IVl9MSU5LX1NUQVRVU19TSVpFXFx0NFxcbiBcXG4gc3RhdGljIGlubGluZSBzMzIgaXhnYmV2Zl93cml0ZV9tc2dfcmVhZF9hY2soc3RydWN0IGl4Z2JlX2h3ICpodywgdTMyICptc2csXFxuIFxcdFxcdFxcdFxcdFxcdCAgICAgdTMyICpyZXRtc2csIHUxNiBzaXplKVxcbkBAIC05MDEsNiArOTA0LDQwIEBAIHN0YXRpYyBzMzIgaXhnYmV2Zl9jaGVja19tYWNfbGlua192ZihzdHJ1Y3QgaXhnYmVfaHcgKmh3LFxcbiBcXHRyZXR1cm4gcmV0X3ZhbDtcXG4gfVxcbiBcXG4rLyoqXFxuKyAqIGl4Z2JldmZfaHZfcmVhZF9saW5rc19lNjEwIC0gcmVhZCBsaW5rIHN0YXR1cyBmcm9tIFBDSSBjb25maWcgc3BhY2VcXG4rICogQGh3OiBwb2ludGVyIHRvIGhhcmR3YXJlIHN0cnVjdHVyZVxcbisgKiBAbGlua3NfcmVnOiBwb2ludGVyIHRvIHN0b3JlIHJlYWQgdmFsdWVcXG4rICpcXG4rICogT24gSHlwZXItViBFNjEwIFZGcyB0aGUgVkZMSU5LUyByZWdpc3RlciBkb2VzIG5vdCBjYXJyeSB2YWxpZCBsaW5rIHNwZWVkLlxcbisgKiBJbnN0ZWFkLCBsaW5rIHN0YXR1cyBpcyBleHBvc2VkIHRocm91Z2ggZW11bGF0ZWQgUENJIGNvbmZpZyBzcGFjZSBhdCBvZmZzZXRcXG4rICogMHgyMDkgaW4gVkZMSU5LUyByZWdpc3RlciBmb3JtYXQuXFxuKyAqXFxuKyAqIFJldHVybjogMCBvbiBzdWNjZXNzLCBuZWdhdGl2ZSBlcnJvciBjb2RlIG9uIGZhaWx1cmUuXFxuKyAqL1xcbitzdGF0aWMgczMyIGl4Z2JldmZfaHZfcmVhZF9saW5rc19lNjEwKHN0cnVjdCBpeGdiZV9odyAqaHcsIHUzMiAqbGlua3NfcmVnKVxcbit7XFxuK1xcdHN0cnVjdCBpeGdiZXZmX2FkYXB0ZXIgKmFkYXB0ZXIgPSBody1cXHUwMDNlYmFjaztcXG4rXFx0dTggZGF0YVtJWEdCRV9IVl9MSU5LX1NUQVRVU19TSVpFXTtcXG4rXFxuK1xcdGlmICghSVNfRU5BQkxFRChDT05GSUdfUENJX01NQ09ORklHKSkge1xcbitcXHRcXHRkZXZfZXJyX29uY2UoXFx1MDAyNmFkYXB0ZXItXFx1MDAzZXBkZXYtXFx1MDAzZWRldixcXG4rXFx0XFx0XFx0ICAgICBcXFwiY2Fubm90IHJlYWQgbGluayBzdGF0dXMsIFBDSV9NTUNPTkZJRyBpcyByZXF1aXJlZCBmb3IgSHlwZXItVlxcXFxuXFxcIik7XFxuK1xcdFxcdHJldHVybiAtRU9QTk9UU1VQUDtcXG4rXFx0fVxcbitcXG4rXFx0Zm9yIChpbnQgaSA9IDA7IGkgXFx1MDAzYyBJWEdCRV9IVl9MSU5LX1NUQVRVU19TSVpFOyBpKyspIHtcXG4rXFx0XFx0aW50IHJldCA9IHBjaV9yZWFkX2NvbmZpZ19ieXRlKGFkYXB0ZXItXFx1MDAzZXBkZXYsXFxuK1xcdFxcdFxcdFxcdFxcdCAgICAgICBJWEdCRV9IVl9MSU5LX1NUQVRVU19PRkZTRVQgKyBpLFxcbitcXHRcXHRcXHRcXHRcXHQgICAgICAgXFx1MDAyNmRhdGFbaV0pO1xcbitcXHRcXHRpZiAocmV0KVxcbitcXHRcXHRcXHRyZXR1cm4gcGNpYmlvc19lcnJfdG9fZXJybm8ocmV0KTtcXG4rXFx0fVxcbitcXG4rXFx0KmxpbmtzX3JlZyA9IGdldF91bmFsaWduZWRfbGUzMihkYXRhKTtcXG4rXFx0cmV0dXJuIDA7XFxuK31cXG4rXFxuIC8qKlxcbiAgKiBpeGdiZXZmX2h2X2NoZWNrX21hY19saW5rX3ZmIC0gY2hlY2sgbGlua1xcbiAgKiBAaHc6IHBvaW50ZXIgdG8gcHJpdmF0ZSBoYXJkd2FyZSBzdHJ1Y3RcXG5AQCAtOTA5LDYgKzk0Niw3IEBAIHN0YXRpYyBzMzIgaXhnYmV2Zl9jaGVja19tYWNfbGlua192ZihzdHJ1Y3QgaXhnYmVfaHcgKmh3LFxcbiAgKiBAYXV0b25lZ193YWl0X3RvX2NvbXBsZXRlOiB1bnVzZWRcXG4gICpcXG4gICogSHlwZXItViB2YXJpYW50OyB0aGVyZSBpcyBubyBtYWlsYm94IGNvbW11bmljYXRpb24uXFxuKyAqIEZvciBFNjEwIFZGcywgbGluayBzdGF0dXMgaXMgcmVhZCBmcm9tIGVtdWxhdGVkIFBDSSBjb25maWcgc3BhY2UuXFxuICAqL1xcbiBzdGF0aWMgczMyIGl4Z2JldmZfaHZfY2hlY2tfbWFjX2xpbmtfdmYoc3RydWN0IGl4Z2JlX2h3ICpodyxcXG4gXFx0XFx0XFx0XFx0XFx0aXhnYmVfbGlua19zcGVlZCAqc3BlZWQsXFxuQEAgLTkyNiw4ICs5NjQsMTYgQEAgc3RhdGljIHMzMiBpeGdiZXZmX2h2X2NoZWNrX21hY19saW5rX3ZmKHN0cnVjdCBpeGdiZV9odyAqaHcsXFxuIFxcdGlmICghbWFjLVxcdTAwM2VnZXRfbGlua19zdGF0dXMpXFxuIFxcdFxcdGdvdG8gb3V0O1xcbiBcXG4tXFx0LyogaWYgbGluayBzdGF0dXMgaXMgZG93biBubyBwb2ludCBpbiBjaGVja2luZyB0byBzZWUgaWYgcGYgaXMgdXAgKi9cXG4tXFx0bGlua3NfcmVnID0gSVhHQkVfUkVBRF9SRUcoaHcsIElYR0JFX1ZGTElOS1MpO1xcbitcXHRpZiAobWFjLVxcdTAwM2V0eXBlID09IGl4Z2JlX21hY19lNjEwX3ZmKSB7XFxuK1xcdFxcdGlmIChpeGdiZXZmX2h2X3JlYWRfbGlua3NfZTYxMChodywgXFx1MDAyNmxpbmtzX3JlZykpIHtcXG4rXFx0XFx0XFx0KmxpbmtfdXAgPSBmYWxzZTtcXG4rXFx0XFx0XFx0KnNwZWVkID0gSVhHQkVfTElOS19TUEVFRF9VTktOT1dOO1xcbitcXHRcXHRcXHRyZXR1cm4gMDtcXG4rXFx0XFx0fVxcbitcXHR9IGVsc2Uge1xcbitcXHRcXHRsaW5rc19yZWcgPSBJWEdCRV9SRUFEX1JFRyhodywgSVhHQkVfVkZMSU5LUyk7XFxuK1xcdH1cXG4rXFxuIFxcdGlmICghKGxpbmtzX3JlZyBcXHUwMDI2IElYR0JFX0xJTktTX1VQKSlcXG4gXFx0XFx0Z290byBvdXQ7XFxuIFxcbkBAIC05NDEsOCArOTg3LDExIEBAIHN0YXRpYyBzMzIgaXhnYmV2Zl9odl9jaGVja19tYWNfbGlua192ZihzdHJ1Y3QgaXhnYmVfaHcgKmh3LFxcbiBcXHRcXHRcXHR1ZGVsYXkoMTAwKTtcXG4gXFx0XFx0XFx0bGlua3NfcmVnID0gSVhHQkVfUkVBRF9SRUcoaHcsIElYR0JFX1ZGTElOS1MpO1xcbiBcXG4tXFx0XFx0XFx0aWYgKCEobGlua3NfcmVnIFxcdTAwMjYgSVhHQkVfTElOS1NfVVApKVxcbi1cXHRcXHRcXHRcXHRnb3RvIG91dDtcXG4rXFx0XFx0XFx0aWYgKCEobGlua3NfcmVnIFxcdTAwMjYgSVhHQkVfTElOS1NfVVApKSB7XFxuK1xcdFxcdFxcdFxcdCpsaW5rX3VwID0gZmFsc2U7XFxuK1xcdFxcdFxcdFxcdCpzcGVlZCA9IElYR0JFX0xJTktfU1BFRURfVU5LTk9XTjtcXG4rXFx0XFx0XFx0XFx0cmV0dXJuIDA7XFxuK1xcdFxcdFxcdH1cXG4gXFx0XFx0fVxcbiBcXHR9XFxuIFxcbkBAIC05NTYsNiArMTAwNSw5IEBAIHN0YXRpYyBzMzIgaXhnYmV2Zl9odl9jaGVja19tYWNfbGlua192ZihzdHJ1Y3QgaXhnYmVfaHcgKmh3LFxcbiBcXHRjYXNlIElYR0JFX0xJTktTX1NQRUVEXzEwMF84MjU5OTpcXG4gXFx0XFx0KnNwZWVkID0gSVhHQkVfTElOS19TUEVFRF8xMDBfRlVMTDtcXG4gXFx0XFx0YnJlYWs7XFxuK1xcdGRlZmF1bHQ6XFxuK1xcdFxcdCpzcGVlZCA9IElYR0JFX0xJTktfU1BFRURfVU5LTk9XTjtcXG4rXFx0XFx0YnJlYWs7XFxuIFxcdH1cXG4gXFxuIFxcdC8qIGlmIHdlIHBhc3NlZCBhbGwgdGhlIHRlc3RzIGFib3ZlIHRoZW4gdGhlIGxpbmsgaXMgdXAgYW5kIHdlIG5vXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI0VDE0OjE5OjE5LjU0Nzg4NjUwOFoiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImJlc3QtZXhwZW5zaXZlIiwiRHVyYXRpb24iOjI4NDg4ODQ1NzkyNiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJORVRfVkVORE9SX0lOVEVMXCIsXG4gICAgXCJJWEdCRVZGXCIsXG4gICAgXCJQQ0lfTU1DT05GSUdcIixcbiAgICBcIlBDSV9NU0lcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJpeGdiZXZmX2dldF9saW5rX2tzZXR0aW5nc1wiLFxuICAgIFwiaXhnYmV2Zl9odl9jaGVja19tYWNfbGlua192ZlwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBpeGdiZXZmIGRyaXZlciB0byByZWFkIGxpbmsgc3BlZWQgZnJvbSB0aGUgZW11bGF0ZWQgUENJIGNvbmZpZyBzcGFjZSBmb3IgSHlwZXItViBFNjEwIFZGcy4gVGhpcyBsb2dpYyBpcyByZWFjaGFibGUgdmlhIHRoZSBldGh0b29sIGdldF9saW5rX2tzZXR0aW5ncyBjYWxsYmFjayBhbmQgdGhlIGRyaXZlcidzIGJhY2tncm91bmQgbGluayBjaGVjayB0YXNrLiBTeXprYWxsZXIgY2FuIHJlYWNoIHRoaXMgY29kZSBieSB1c2luZyBpdHMgUENJIGRldmljZSBmdXp6ZXIgdG8gZW11bGF0ZSB0aGUgc3BlY2lmaWMgVkYgZGV2aWNlIElEIGFuZCB0aGVuIGludGVyYWN0aW5nIHdpdGggdGhlIHJlZ2lzdGVyZWQgbmV0ZGV2IHZpYSBldGh0b29sLiBUaGUgbmV3IGxvZ2ljIHJlcXVpcmVzIENPTkZJR19QQ0lfTU1DT05GSUcgdG8gYmUgZW5hYmxlZCB0byBhY3R1YWxseSBwZXJmb3JtIHRoZSBQQ0kgY29uZmlnIHNwYWNlIHJlYWRzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lXG5pZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5XG51c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLlxuXG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOlxuLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLlxuLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy5cbi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LlxuLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsXG4gIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cbi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsXG4gIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLlxuLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKVxuICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuXG5cbklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2hcbnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlxuXG5XaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzpcbjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuXG4gICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy5cbiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9uc1xuICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuXG4yLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS5cbiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbiAgIEFsc28gY2hlY2sgXCJkZXBlbmRzIG9uXCIgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzXG4gICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3NcbiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCBjMDIyNmY3MmY3YjU0ODNmZTI5N2MyZDNiNmMxNzMxYjA0NDFlMjhjXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIE1vbiBBdWcgMjQgMTQ6MTk6MTUgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9peGdiZXZmL2V0aHRvb2wuYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2l4Z2JldmYvZXRodG9vbC5jXG5pbmRleCA1MzdhNjBkNTI3NmYwLi4yNDYzZmNjZmZkNGRhIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaXhnYmV2Zi9ldGh0b29sLmNcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2l4Z2JldmYvZXRodG9vbC5jXG5AQCAtODMsNiArODMsMTggQEAgc3RhdGljIGludCBpeGdiZXZmX2dldF9saW5rX2tzZXR0aW5ncyhzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LFxuIFx0XHRcdFx0ICAgICAgc3RydWN0IGV0aHRvb2xfbGlua19rc2V0dGluZ3MgKmNtZClcbiB7XG4gXHRzdHJ1Y3QgaXhnYmV2Zl9hZGFwdGVyICphZGFwdGVyID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTtcbitcdHN0cnVjdCBpeGdiZV9odyAqaHcgPSBcdTAwMjZhZGFwdGVyLVx1MDAzZWh3O1xuK1xuK1x0LyogRTYxMCBIeXBlci1WIFZGczogcmVhZCBjdXJyZW50IGxpbmsgc3BlZWQgZnJvbSBQQ0kgY29uZmlnIHNwYWNlXG4rXHQgKiBvbiBldmVyeSBsaW5rIHNwZWVkIHF1ZXJ5LlxuK1x0ICovXG4rXHRpZiAoaHctXHUwMDNlbWFjLnR5cGUgPT0gaXhnYmVfbWFjX2U2MTBfdmYpIHtcbitcdFx0c3Bpbl9sb2NrX2JoKFx1MDAyNmFkYXB0ZXItXHUwMDNlbWJ4X2xvY2spO1xuK1x0XHRody1cdTAwM2VtYWMuZ2V0X2xpbmtfc3RhdHVzID0gdHJ1ZTtcbitcdFx0aHctXHUwMDNlbWFjLm9wcy5jaGVja19saW5rKGh3LCBcdTAwMjZhZGFwdGVyLVx1MDAzZWxpbmtfc3BlZWQsXG4rXHRcdFx0XHQgICAgICAgXHUwMDI2YWRhcHRlci1cdTAwM2VsaW5rX3VwLCBmYWxzZSk7XG4rXHRcdHNwaW5fdW5sb2NrX2JoKFx1MDAyNmFkYXB0ZXItXHUwMDNlbWJ4X2xvY2spO1xuK1x0fVxuIFxuIFx0ZXRodG9vbF9saW5rX2tzZXR0aW5nc196ZXJvX2xpbmtfbW9kZShjbWQsIHN1cHBvcnRlZCk7XG4gXHRldGh0b29sX2xpbmtfa3NldHRpbmdzX2FkZF9saW5rX21vZGUoY21kLCBzdXBwb3J0ZWQsIDEwMDAwYmFzZVRfRnVsbCk7XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaXhnYmV2Zi92Zi5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaXhnYmV2Zi92Zi5jXG5pbmRleCBmNmRmODZkMTI0YjllLi5hODRiNjI2NDFlOWJjIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaXhnYmV2Zi92Zi5jXG4rKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9peGdiZXZmL3ZmLmNcbkBAIC0xLDE0ICsxLDE3IEBAXG4gLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjBcbiAvKiBDb3B5cmlnaHQoYykgMTk5OSAtIDIwMjQgSW50ZWwgQ29ycG9yYXRpb24uICovXG4gXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvdW5hbGlnbmVkLmhcdTAwM2VcbitcbiAjaW5jbHVkZSBcInZmLmhcIlxuICNpbmNsdWRlIFwiaXhnYmV2Zi5oXCJcbiBcbi0vKiBPbiBIeXBlci1WLCB0byByZXNldCwgd2UgbmVlZCB0byByZWFkIGZyb20gdGhpcyBvZmZzZXRcbi0gKiBmcm9tIHRoZSBQQ0kgY29uZmlnIHNwYWNlLiBUaGlzIGlzIHRoZSBtZWNoYW5pc20gdXNlZCBvblxuLSAqIEh5cGVyLVYgdG8gc3VwcG9ydCBQRi9WRiBjb21tdW5pY2F0aW9uLlxuKy8qIE9uIEh5cGVyLVYgdGhlIFBGL1ZGIGNvbW11bmljYXRpb24gaXMgdGhyb3VnaCBlbXVsYXRlZCBQQ0kgY29uZmlnXG4rICogc3BhY2UuIFRoZSByZXNldCBhbmQgbGluayBzdGF0dXMgYXJlIGV4cG9zZWQgYXQgdGhlIG9mZnNldHMgYmVsb3cuXG4gICovXG4tI2RlZmluZSBJWEdCRV9IVl9SRVNFVF9PRkZTRVQgICAgICAgICAgIDB4MjAxXG4rI2RlZmluZSBJWEdCRV9IVl9SRVNFVF9PRkZTRVRcdFx0MHgyMDFcbisjZGVmaW5lIElYR0JFX0hWX0xJTktfU1RBVFVTX09GRlNFVFx0MHgyMDlcbisjZGVmaW5lIElYR0JFX0hWX0xJTktfU1RBVFVTX1NJWkVcdDRcbiBcbiBzdGF0aWMgaW5saW5lIHMzMiBpeGdiZXZmX3dyaXRlX21zZ19yZWFkX2FjayhzdHJ1Y3QgaXhnYmVfaHcgKmh3LCB1MzIgKm1zZyxcbiBcdFx0XHRcdFx0ICAgICB1MzIgKnJldG1zZywgdTE2IHNpemUpXG5AQCAtOTAxLDYgKzkwNCw0MCBAQCBzdGF0aWMgczMyIGl4Z2JldmZfY2hlY2tfbWFjX2xpbmtfdmYoc3RydWN0IGl4Z2JlX2h3ICpodyxcbiBcdHJldHVybiByZXRfdmFsO1xuIH1cbiBcbisvKipcbisgKiBpeGdiZXZmX2h2X3JlYWRfbGlua3NfZTYxMCAtIHJlYWQgbGluayBzdGF0dXMgZnJvbSBQQ0kgY29uZmlnIHNwYWNlXG4rICogQGh3OiBwb2ludGVyIHRvIGhhcmR3YXJlIHN0cnVjdHVyZVxuKyAqIEBsaW5rc19yZWc6IHBvaW50ZXIgdG8gc3RvcmUgcmVhZCB2YWx1ZVxuKyAqXG4rICogT24gSHlwZXItViBFNjEwIFZGcyB0aGUgVkZMSU5LUyByZWdpc3RlciBkb2VzIG5vdCBjYXJyeSB2YWxpZCBsaW5rIHNwZWVkLlxuKyAqIEluc3RlYWQsIGxpbmsgc3RhdHVzIGlzIGV4cG9zZWQgdGhyb3VnaCBlbXVsYXRlZCBQQ0kgY29uZmlnIHNwYWNlIGF0IG9mZnNldFxuKyAqIDB4MjA5IGluIFZGTElOS1MgcmVnaXN0ZXIgZm9ybWF0LlxuKyAqXG4rICogUmV0dXJuOiAwIG9uIHN1Y2Nlc3MsIG5lZ2F0aXZlIGVycm9yIGNvZGUgb24gZmFpbHVyZS5cbisgKi9cbitzdGF0aWMgczMyIGl4Z2JldmZfaHZfcmVhZF9saW5rc19lNjEwKHN0cnVjdCBpeGdiZV9odyAqaHcsIHUzMiAqbGlua3NfcmVnKVxuK3tcbitcdHN0cnVjdCBpeGdiZXZmX2FkYXB0ZXIgKmFkYXB0ZXIgPSBody1cdTAwM2ViYWNrO1xuK1x0dTggZGF0YVtJWEdCRV9IVl9MSU5LX1NUQVRVU19TSVpFXTtcbitcbitcdGlmICghSVNfRU5BQkxFRChDT05GSUdfUENJX01NQ09ORklHKSkge1xuK1x0XHRkZXZfZXJyX29uY2UoXHUwMDI2YWRhcHRlci1cdTAwM2VwZGV2LVx1MDAzZWRldixcbitcdFx0XHQgICAgIFwiY2Fubm90IHJlYWQgbGluayBzdGF0dXMsIFBDSV9NTUNPTkZJRyBpcyByZXF1aXJlZCBmb3IgSHlwZXItVlxcblwiKTtcbitcdFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xuK1x0fVxuK1xuK1x0Zm9yIChpbnQgaSA9IDA7IGkgXHUwMDNjIElYR0JFX0hWX0xJTktfU1RBVFVTX1NJWkU7IGkrKykge1xuK1x0XHRpbnQgcmV0ID0gcGNpX3JlYWRfY29uZmlnX2J5dGUoYWRhcHRlci1cdTAwM2VwZGV2LFxuK1x0XHRcdFx0XHQgICAgICAgSVhHQkVfSFZfTElOS19TVEFUVVNfT0ZGU0VUICsgaSxcbitcdFx0XHRcdFx0ICAgICAgIFx1MDAyNmRhdGFbaV0pO1xuK1x0XHRpZiAocmV0KVxuK1x0XHRcdHJldHVybiBwY2liaW9zX2Vycl90b19lcnJubyhyZXQpO1xuK1x0fVxuK1xuK1x0KmxpbmtzX3JlZyA9IGdldF91bmFsaWduZWRfbGUzMihkYXRhKTtcbitcdHJldHVybiAwO1xuK31cbitcbiAvKipcbiAgKiBpeGdiZXZmX2h2X2NoZWNrX21hY19saW5rX3ZmIC0gY2hlY2sgbGlua1xuICAqIEBodzogcG9pbnRlciB0byBwcml2YXRlIGhhcmR3YXJlIHN0cnVjdFxuQEAgLTkwOSw2ICs5NDYsNyBAQCBzdGF0aWMgczMyIGl4Z2JldmZfY2hlY2tfbWFjX2xpbmtfdmYoc3RydWN0IGl4Z2JlX2h3ICpodyxcbiAgKiBAYXV0b25lZ193YWl0X3RvX2NvbXBsZXRlOiB1bnVzZWRcbiAgKlxuICAqIEh5cGVyLVYgdmFyaWFudDsgdGhlcmUgaXMgbm8gbWFpbGJveCBjb21tdW5pY2F0aW9uLlxuKyAqIEZvciBFNjEwIFZGcywgbGluayBzdGF0dXMgaXMgcmVhZCBmcm9tIGVtdWxhdGVkIFBDSSBjb25maWcgc3BhY2UuXG4gICovXG4gc3RhdGljIHMzMiBpeGdiZXZmX2h2X2NoZWNrX21hY19saW5rX3ZmKHN0cnVjdCBpeGdiZV9odyAqaHcsXG4gXHRcdFx0XHRcdGl4Z2JlX2xpbmtfc3BlZWQgKnNwZWVkLFxuQEAgLTkyNiw4ICs5NjQsMTYgQEAgc3RhdGljIHMzMiBpeGdiZXZmX2h2X2NoZWNrX21hY19saW5rX3ZmKHN0cnVjdCBpeGdiZV9odyAqaHcsXG4gXHRpZiAoIW1hYy1cdTAwM2VnZXRfbGlua19zdGF0dXMpXG4gXHRcdGdvdG8gb3V0O1xuIFxuLVx0LyogaWYgbGluayBzdGF0dXMgaXMgZG93biBubyBwb2ludCBpbiBjaGVja2luZyB0byBzZWUgaWYgcGYgaXMgdXAgKi9cbi1cdGxpbmtzX3JlZyA9IElYR0JFX1JFQURfUkVHKGh3LCBJWEdCRV9WRkxJTktTKTtcbitcdGlmIChtYWMtXHUwMDNldHlwZSA9PSBpeGdiZV9tYWNfZTYxMF92Zikge1xuK1x0XHRpZiAoaXhnYmV2Zl9odl9yZWFkX2xpbmtzX2U2MTAoaHcsIFx1MDAyNmxpbmtzX3JlZykpIHtcbitcdFx0XHQqbGlua191cCA9IGZhbHNlO1xuK1x0XHRcdCpzcGVlZCA9IElYR0JFX0xJTktfU1BFRURfVU5LTk9XTjtcbitcdFx0XHRyZXR1cm4gMDtcbitcdFx0fVxuK1x0fSBlbHNlIHtcbitcdFx0bGlua3NfcmVnID0gSVhHQkVfUkVBRF9SRUcoaHcsIElYR0JFX1ZGTElOS1MpO1xuK1x0fVxuK1xuIFx0aWYgKCEobGlua3NfcmVnIFx1MDAyNiBJWEdCRV9MSU5LU19VUCkpXG4gXHRcdGdvdG8gb3V0O1xuIFxuQEAgLTk0MSw4ICs5ODcsMTEgQEAgc3RhdGljIHMzMiBpeGdiZXZmX2h2X2NoZWNrX21hY19saW5rX3ZmKHN0cnVjdCBpeGdiZV9odyAqaHcsXG4gXHRcdFx0dWRlbGF5KDEwMCk7XG4gXHRcdFx0bGlua3NfcmVnID0gSVhHQkVfUkVBRF9SRUcoaHcsIElYR0JFX1ZGTElOS1MpO1xuIFxuLVx0XHRcdGlmICghKGxpbmtzX3JlZyBcdTAwMjYgSVhHQkVfTElOS1NfVVApKVxuLVx0XHRcdFx0Z290byBvdXQ7XG4rXHRcdFx0aWYgKCEobGlua3NfcmVnIFx1MDAyNiBJWEdCRV9MSU5LU19VUCkpIHtcbitcdFx0XHRcdCpsaW5rX3VwID0gZmFsc2U7XG4rXHRcdFx0XHQqc3BlZWQgPSBJWEdCRV9MSU5LX1NQRUVEX1VOS05PV047XG4rXHRcdFx0XHRyZXR1cm4gMDtcbitcdFx0XHR9XG4gXHRcdH1cbiBcdH1cbiBcbkBAIC05NTYsNiArMTAwNSw5IEBAIHN0YXRpYyBzMzIgaXhnYmV2Zl9odl9jaGVja19tYWNfbGlua192ZihzdHJ1Y3QgaXhnYmVfaHcgKmh3LFxuIFx0Y2FzZSBJWEdCRV9MSU5LU19TUEVFRF8xMDBfODI1OTk6XG4gXHRcdCpzcGVlZCA9IElYR0JFX0xJTktfU1BFRURfMTAwX0ZVTEw7XG4gXHRcdGJyZWFrO1xuK1x0ZGVmYXVsdDpcbitcdFx0KnNwZWVkID0gSVhHQkVfTElOS19TUEVFRF9VTktOT1dOO1xuK1x0XHRicmVhaztcbiBcdH1cbiBcbiBcdC8qIGlmIHdlIHBhc3NlZCBhbGwgdGhlIHRlc3RzIGFib3ZlIHRoZW4gdGhlIGxpbmsgaXMgdXAgYW5kIHdlIG5vXG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNFQxNDoxOToxOS41NDc4ODgxODhaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxNDg3OTA5NDYzMCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIFBhdGNoIGZvciBGdXp6aW5nIFN1aXRhYmlsaXR5KipcblxuT2theSwgc28gSSd2ZSBnb3QgdGhpcyBwYXRjaCB0aGF0IHR3ZWFrcyB0aGUgYGl4Z2JldmZgIGRyaXZlciDigJMgc3BlY2lmaWNhbGx5IGluIGBldGh0b29sLmNgIGFuZCBgdmYuY2AuIEl0J3MgYWRkaW5nIHNvbWUgbG9naWMgdG8gcmVhZCBsaW5rIHNwZWVkIGZyb20gdGhlIFBDSSBjb25maWcgc3BhY2UsIGJ1dCBvbmx5IGZvciBIeXBlci1WIEU2MTAgVkZzLiAgTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMsIFwiV29ydGhGdXp6aW5nPWZhbHNlP1wiICBUaGUgaW5zdHJ1Y3Rpb25zIHNheSB0byBmbGFnIHBhdGNoZXMgdGhhdCB0b3VjaCB2ZW5kb3Itc3BlY2lmaWMgUENJZSBkcml2ZXJzIG5vdCBlbXVsYXRlZCBieSBzdGFuZGFyZCBRRU1VLiAgXG5cblNvLCBpcyBgaXhnYmV2ZmAgdmVuZG9yLXNwZWNpZmljPyBJdCAqaXMqIHRoZSBJbnRlbCAxMCBHaWdhYml0IFZpcnR1YWwgRnVuY3Rpb24gZHJpdmVyLiBJbnRlbCBOSUNzIChlMTAwMCwgZTEwMDBlLCBpZ2IsIGl4Z2JlLCBpNDBlKSBhcmUgZ2VuZXJhbGx5IHN0YW5kYXJkIE5JQ3MuICBIb3dldmVyLCBgaXhnYmV2ZmAgaXMgYSBWRiBkcml2ZXI7IGFuZCBWRidzIGFyZSBhbHdheXMgYSBsaXR0bGUgdHJpY2tpZXIuICBEb2VzIHN0YW5kYXJkIFFFTVUgZW11bGF0ZSBpdD8gUUVNVSBlbXVsYXRlcyBgaXhnYmVgICh0aGUgcGh5c2ljYWwgZnVuY3Rpb24pLCBidXQgbm90LCB0byBteSBrbm93bGVkZ2UsIHRoZSBWRi4gV2FpdCwgdGhlIHByb21wdCBzYXlzIHRoZSBmb2xsb3dpbmcgc2hvdWxkIGJlIGNvbnNpZGVyZWQsIFwiKipDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCwgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUqKlwiLlxuXG5BaGEhIFRoaXMgcGF0Y2ggc3BlY2lmaWNhbGx5IGNhbGxzIG91dCBcIkh5cGVyLVYgRTYxMCBWRnMuXCIgIFRoZSB0ZXh0IHNheXMgdGhlIFBGL1ZGIGNvbW11bmljYXRpb24gaGFwcGVucyB0aHJvdWdoICplbXVsYXRlZCogUENJIGNvbmZpZyBzcGFjZSBvbiBIeXBlci1WLiBFNjEwIGlzIGFuIEludGVsIEV0aGVybmV0IENvbnRyb2xsZXIsIGxpa2UgdGhlIEU4MTAsIGJ1dCBub3QgdGhlIEU4MTAuIERvZXMgc3RhbmRhcmQgUUVNVSBlbXVsYXRlIEU2MTA/IE5vLCB0aGF0J3MgZGVmaW5pdGVseSBub3QgZW11bGF0ZWQuIFFFTVUgZW11bGF0ZXMgb3RoZXIgSW50ZWwgTklDcyBidXQgbm90IHRoZSBFNjEwIChvciBFNjEwIFZGcykgdG8gbXkga25vd2xlZGdlLiBTbyB3ZSdyZSBkZWFsaW5nIHdpdGggYSBkcml2ZXIsIGBpeGdiZXZmYCBmb3IgODI1OTksIFg1NDAsIFg1NTAsICphbmQqIEU2MTAgVkZzLiBBbmQgaXQgbG9va3MgbGlrZSBpdCBuZWVkcyBlaXRoZXIgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSAqb3IqIHRoZSBIeXBlci1WIFZGIHBhc3MtdGhyb3VnaCB0byB3b3JrIGNvcnJlY3RseS5cblxuQ2FuIHN5emthbGxlciBoYW5kbGUgdGhpcz8gU3l6a2FsbGVyIHVzZXMgUUVNVSBvciBHQ0UuIEdDRSBoYXMgZ1ZOSUMsIGJ1dCBub3QgaXhnYmV2Zi4gQW5kLCBpbiBzdGFuZGFyZCBRRU1VLCB0aGVyZSdzIG5vIGl4Z2JldmYgZW11bGF0aW9uLCBvbmx5IHRoZSBpeGdiZSBQRi4gIEkga25vdyBzeXprYWxsZXIgaGFzIGBzeXpfcGNpX3NldHVwYCBhbmQgYHN5el9wY2lfZGV2aWNlYCwgd2hpY2ggKmNvdWxkKiBlbXVsYXRlIFBDSSBkZXZpY2VzIHZpYSB2aGNpIG9yIHNvbWV0aGluZyBzaW1pbGFyLiBCdXQsIGRvZXMgdGhhdCByZWFsbHkgcHJvdmlkZSB0aGUgZ3JhbnVsYXJpdHkgbmVlZGVkIHRvIGZ1bGx5IGVtdWxhdGUgdGhlIHNwZWNpZmljIHJlZ2lzdGVycyBhbmQgYmVoYXZpb3JzIG9mIGFuIGBpeGdiZXZmYD8gUHJvYmFibHkgbm90LCB1bmxlc3MgaXQgd2VyZSB3cml0dGVuIGluIHN5emxhbmcuIFN5emthbGxlciBoYXMgc29tZSBQQ0kgZnV6emluZywgYnV0IGl0J3MgcHJldHR5IGxpbWl0ZWQuXG5cblNvLCByZWFsaXN0aWNhbGx5LCBpcyBpeGdiZXZmIGFjdHVhbGx5IGZ1enplZCBieSBzeXprYWxsZXIgY3VycmVudGx5PyBJIHNob3VsZCBwcm9iYWJseSBjaGVjayB0aGF0LCBidXQgYmFzZWQgb24gd2hhdCBJIGtub3cgbm93LCBJJ20gbGVhbmluZyBoZWF2aWx5IHRvd2FyZHMgXCJub1wiLlxuXG5cbiIsIklucHV0VG9rZW5zIjozODQyLCJPdXRwdXRUb2tlbnMiOjI0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6ODg2LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjRUMTQ6MTk6MzQuNDI2OTg1NDc3WiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ1Mjk5Mzg0NDQsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiaXhnYmV2ZlwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiXFxuRnVsbCBvdXRwdXQgaXMgdG9vIGxvbmcsIHNob3dpbmcgNTAwIG91dCBvZiAzNDg3IGxpbmVzLlxcblVzZSBtb3JlIHByZWNpc2UgZXhwcmVzc2lvbiBpZiBwb3NzaWJsZS5cXG5cXG5Eb2N1bWVudGF0aW9uLy5yZW5hbWVzLnR4dD04MTc9bmV0d29ya2luZy9kZXZpY2VfZHJpdmVycy9pbnRlbC9peGdiZSBuZXR3b3JraW5nL2RldmljZV9kcml2ZXJzL2V0aGVybmV0L2ludGVsL2l4Z2JlXFxuRG9jdW1lbnRhdGlvbi8ucmVuYW1lcy50eHQ6ODE4Om5ldHdvcmtpbmcvZGV2aWNlX2RyaXZlcnMvaW50ZWwvaXhnYmV2ZiBuZXR3b3JraW5nL2RldmljZV9kcml2ZXJzL2V0aGVybmV0L2ludGVsL2l4Z2JldmZcXG5Eb2N1bWVudGF0aW9uLy5yZW5hbWVzLnR4dC04MTktbmV0d29ya2luZy9kZXZpY2VfZHJpdmVycy9tYXJ2ZWxsL29jdGVvbnR4MiBuZXR3b3JraW5nL2RldmljZV9kcml2ZXJzL2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyXFxuLS1cXG5Eb2N1bWVudGF0aW9uLy5yZW5hbWVzLnR4dD04NDM9bmV0d29ya2luZy9peGdiZSBuZXR3b3JraW5nL2RldmljZV9kcml2ZXJzL2V0aGVybmV0L2ludGVsL2l4Z2JlXFxuRG9jdW1lbnRhdGlvbi8ucmVuYW1lcy50eHQ6ODQ0Om5ldHdvcmtpbmcvaXhnYmV2ZiBuZXR3b3JraW5nL2RldmljZV9kcml2ZXJzL2V0aGVybmV0L2ludGVsL2l4Z2JldmZcXG5Eb2N1bWVudGF0aW9uLy5yZW5hbWVzLnR4dC04NDUtbmV0d29ya2luZy9uZXRkZXYtRkFRIHByb2Nlc3MvbWFpbnRhaW5lci1uZXRkZXZcXG4tLVxcbkRvY3VtZW50YXRpb24vbmV0d29ya2luZy9kZXZpY2VfZHJpdmVycy9ldGhlcm5ldC9pbmRleC5yc3Q9OD1Db250ZW50czpcXG4tLVxcbkRvY3VtZW50YXRpb24vbmV0d29ya2luZy9kZXZpY2VfZHJpdmVycy9ldGhlcm5ldC9pbmRleC5yc3QtMzktICAgaW50ZWwvaXhnYmVcXG5Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvZGV2aWNlX2RyaXZlcnMvZXRoZXJuZXQvaW5kZXgucnN0OjQwOiAgIGludGVsL2l4Z2JldmZcXG5Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvZGV2aWNlX2RyaXZlcnMvZXRoZXJuZXQvaW5kZXgucnN0LTQxLSAgIGludGVsL2k0MGVcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL0tjb25maWc9MjAzPWNvbmZpZyBJWEdCRVZGXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9LY29uZmlnLTIxMy1cXHQgIE1vcmUgc3BlY2lmaWMgaW5mb3JtYXRpb24gb24gY29uZmlndXJpbmcgdGhlIGRyaXZlciBpcyBpblxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL0tjb25maWc6MjE0OlxcdCAgXFx1MDAzY2ZpbGU6RG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL2RldmljZV9kcml2ZXJzL2V0aGVybmV0L2ludGVsL2l4Z2JldmYucnN0XFx1MDAzZS5cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9LY29uZmlnLTIxNS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9LY29uZmlnLTIxNi1cXHQgIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmUuIFRoZSBtb2R1bGVcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9LY29uZmlnOjIxNzpcXHQgIHdpbGwgYmUgY2FsbGVkIGl4Z2JldmYuICBNU0ktWCBpbnRlcnJ1cHQgc3VwcG9ydCBpcyByZXF1aXJlZFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL0tjb25maWctMjE4LVxcdCAgZm9yIHRoaXMgZHJpdmVyIHRvIHdvcmsgY29ycmVjdGx5Llxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvS2NvbmZpZz0yMjA9Y29uZmlnIElYR0JFVkZfSVBTRUNcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL0tjb25maWctMjI2LVxcdGhlbHBcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9LY29uZmlnOjIyNzpcXHQgIEVuYWJsZSBzdXBwb3J0IGZvciBJUFNlYyBvZmZsb2FkIGluIGl4Z2JldmYua29cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9LY29uZmlnLTIyOC1cXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL01ha2VmaWxlPTE1PW9iai0kKENPTkZJR19JWEdCRSkgKz0gaXhnYmUvXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvTWFrZWZpbGU6MTY6b2JqLSQoQ09ORklHX0lYR0JFVkYpICs9IGl4Z2JldmYvXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvTWFrZWZpbGUtMTctb2JqLSQoQ09ORklHX0k0MEUpICs9IGk0MGUvXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9peGdiZS9peGdiZS5oPTIxMj1zdHJ1Y3QgdmZfZGF0YV9zdG9yYWdlIHtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2l4Z2JlL2l4Z2JlLmgtMjM0LVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2l4Z2JlL2l4Z2JlLmg6MjM1OmVudW0gaXhnYmV2Zl94Y2FzdF9tb2RlcyB7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaXhnYmUvaXhnYmUuaC0yMzYtXFx0SVhHQkVWRl9YQ0FTVF9NT0RFX05PTkUgPSAwLFxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaXhnYmV2Zi9NYWtlZmlsZS02LVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2l4Z2JldmYvTWFrZWZpbGU6NzpvYmotJChDT05GSUdfSVhHQkVWRikgKz0gaXhnYmV2Zi5vXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaXhnYmV2Zi9NYWtlZmlsZS04LVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2l4Z2JldmYvTWFrZWZpbGU6OTppeGdiZXZmLXkgOj0gdmYubyBtYngubyBldGh0b29sLm8gaXhnYmV2Zl9tYWluLm9cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9peGdiZXZmL01ha2VmaWxlOjEwOml4Z2JldmYtJChDT05GSUdfSVhHQkVWRl9JUFNFQykgKz0gaXBzZWMub1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaXhnYmV2Zi9ldGh0b29sLmMtMy1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9peGdiZXZmL2V0aHRvb2wuYzo0Oi8qIGV0aHRvb2wgc3VwcG9ydCBmb3IgaXhnYmV2ZiAqL1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2l4Z2JldmYvZXRodG9vbC5jLTUtXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9peGdiZXZmL2V0aHRvb2wuYy0xNy1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9peGdiZXZmL2V0aHRvb2wuYzoxODojaW5jbHVkZSBcXFwiaXhnYmV2Zi5oXFxcIlxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2l4Z2JldmYvZXRodG9vbC5jLTE5LVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaXhnYmV2Zi9ldGh0b29sLmM9MjI9c3RydWN0IGl4Z2JlX3N0YXRzIHtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2l4Z2JldmYvZXRodG9vbC5jLTMxLVxcdC50eXBlID0gSVhHQkVWRl9TVEFUUywgXFxcXFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2l4Z2JldmYvZXRodG9vbC5jOjMyOlxcdC5zaXplb2Zfc3RhdCA9IHNpemVvZl9maWVsZChzdHJ1Y3QgaXhnYmV2Zl9hZGFwdGVyLCBfc3RhdCksIFxcXFxcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9peGdiZXZmL2V0aHRvb2wuYzozMzpcXHQuc3RhdF9vZmZzZXQgPSBvZmZzZXRvZihzdHJ1Y3QgaXhnYmV2Zl9hZGFwdGVyLCBfc3RhdCkgXFxcXFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2l4Z2JldmYvZXRodG9vbC5jLTM0LX1cXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2l4Z2JldmYvZXRodG9vbC5jLTQyLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2l4Z2JldmYvZXRodG9vbC5jOjQzOnN0YXRpYyBzdHJ1Y3QgaXhnYmVfc3RhdHMgaXhnYmV2Zl9nc3RyaW5nc19zdGF0c1tdID0ge1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2l4Z2JldmYvZXRodG9vbC5jLTQ0LVxcdElYR0JFVkZfTkVUREVWX1NUQVQocnhfcGFja2V0cyksXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9peGdiZXZmL2V0aHRvb2wuYy02MC0jZGVmaW5lIElYR0JFVkZfUVVFVUVfU1RBVFNfTEVOICggXFxcXFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2l4Z2JldmYvZXRodG9vbC5jOjYxOlxcdCgoKHN0cnVjdCBpeGdiZXZmX2FkYXB0ZXIgKiluZXRkZXZfcHJpdihuZXRkZXYpKS1cXHUwMDNlbnVtX3R4X3F1ZXVlcyArIFxcXFxcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9peGdiZXZmL2V0aHRvb2wuYzo2MjpcXHQgKChzdHJ1Y3QgaXhnYmV2Zl9hZGFwdGVyICopbmV0ZGV2X3ByaXYobmV0ZGV2KSktXFx1MDAzZW51bV94ZHBfcXVldWVzICsgXFxcXFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2l4Z2JldmYvZXRodG9vbC5jOjYzOlxcdCAoKHN0cnVjdCBpeGdiZXZmX2FkYXB0ZXIgKiluZXRkZXZfcHJpdihuZXRkZXYpKS1cXHUwMDNlbnVtX3J4X3F1ZXVlcykgKiBcXFxcXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaXhnYmV2Zi9ldGh0b29sLmM6NjQ6XFx0IChzaXplb2Yoc3RydWN0IGl4Z2JldmZfc3RhdHMpIC8gc2l6ZW9mKHU2NCkpKVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2l4Z2JldmYvZXRodG9vbC5jOjY1OiNkZWZpbmUgSVhHQkVWRl9HTE9CQUxfU1RBVFNfTEVOIEFSUkFZX1NJWkUoaXhnYmV2Zl9nc3RyaW5nc19zdGF0cylcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9peGdiZXZmL2V0aHRvb2wuYy02Ni1cXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2l4Z2JldmYvZXRodG9vbC5jPTY4PXN0YXRpYyBjb25zdCBjaGFyIGl4Z2JlX2dzdHJpbmdzX3Rlc3RbXVtFVEhfR1NUUklOR19MRU5dID0ge1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaXhnYmV2Zi9ldGh0b29sLmMtNzQtXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaXhnYmV2Zi9ldGh0b29sLmM6NzU6c3RhdGljIGNvbnN0IGNoYXIgaXhnYmV2Zl9wcml2X2ZsYWdzX3N0cmluZ3NbXVtFVEhfR1NUUklOR19MRU5dID0ge1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2l4Z2JldmYvZXRodG9vbC5jLTc2LSNkZWZpbmUgSVhHQkVWRl9QUklWX0ZMQUdTX0xFR0FDWV9SWFxcdEJJVCgwKVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaXhnYmV2Zi9ldGh0b29sLmMtNzktXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaXhnYmV2Zi9ldGh0b29sLmM6ODA6I2RlZmluZSBJWEdCRVZGX1BSSVZfRkxBR1NfU1RSX0xFTiBBUlJBWV9TSVpFKGl4Z2JldmZfcHJpdl9mbGFnc19zdHJpbmdzKVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2l4Z2JldmYvZXRodG9vbC5jLTgxLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2l4Z2JldmYvZXRodG9vbC5jOjgyOnN0YXRpYyBpbnQgaXhnYmV2Zl9nZXRfbGlua19rc2V0dGluZ3Moc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldixcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9peGdiZXZmL2V0aHRvb2wuYy04My1cXHRcXHRcXHRcXHQgICAgICBzdHJ1Y3QgZXRodG9vbF9saW5rX2tzZXR0aW5ncyAqY21kKVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2l4Z2JldmYvZXRodG9vbC5jLTg0LXtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9peGdiZXZmL2V0aHRvb2wuYzo4NTpcXHRzdHJ1Y3QgaXhnYmV2Zl9hZGFwdGVyICphZGFwdGVyID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9peGdiZXZmL2V0aHRvb2wuYy04Ni1cXHRzdHJ1Y3QgaXhnYmVfaHcgKmh3ID0gXFx1MDAyNmFkYXB0ZXItXFx1MDAzZWh3O1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaXhnYmV2Zi9ldGh0b29sLmMtMTI4LVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2l4Z2JldmYvZXRodG9vbC5jOjEyOTpzdGF0aWMgdTMyIGl4Z2JldmZfZ2V0X21zZ2xldmVsKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYpXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaXhnYmV2Zi9ldGh0b29sLmMtMTMwLXtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9peGdiZXZmL2V0aHRvb2wuYzoxMzE6XFx0c3RydWN0IGl4Z2JldmZfYWRhcHRlciAqYWRhcHRlciA9IG5ldGRldl9wcml2KG5ldGRldik7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaXhnYmV2Zi9ldGh0b29sLmMtMTMyLVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaXhnYmV2Zi9ldGh0b29sLmMtMTM1LVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2l4Z2JldmYvZXRodG9vbC5jOjEzNjpzdGF0aWMgdm9pZCBpeGdiZXZmX3NldF9tc2dsZXZlbChzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LCB1MzIgZGF0YSlcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9peGdiZXZmL2V0aHRvb2wuYy0xMzcte1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2l4Z2JldmYvZXRodG9vbC5jOjEzODpcXHRzdHJ1Y3QgaXhnYmV2Zl9hZGFwdGVyICphZGFwdGVyID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9peGdiZXZmL2V0aHRvb2wuYy0xMzktXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9peGdiZXZmL2V0aHRvb2wuYy0xNDItXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaXhnYmV2Zi9ldGh0b29sLmM6MTQzOnN0YXRpYyBpbnQgaXhnYmV2Zl9nZXRfcmVnc19sZW4oc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldilcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9peGdiZXZmL2V0aHRvb2wuYy0xNDQte1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaXhnYmV2Zi9ldGh0b29sLmMtMTQ4LVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2l4Z2JldmYvZXRodG9vbC5jOjE0OTpzdGF0aWMgdm9pZCBpeGdiZXZmX2dldF9yZWdzKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaXhnYmV2Zi9ldGh0b29sLmMtMTUwLVxcdFxcdFxcdCAgICAgc3RydWN0IGV0aHRvb2xfcmVncyAqcmVncyxcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2l4Z2JldmYvZXRodG9vbC5jLTE1Mi17XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaXhnYmV2Zi9ldGh0b29sLmM6MTUzOlxcdHN0cnVjdCBpeGdiZXZmX2FkYXB0ZXIgKmFkYXB0ZXIgPSBuZXRkZXZfcHJpdihuZXRkZXYpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2l4Z2JldmYvZXRodG9vbC5jLTE1NC1cXHRzdHJ1Y3QgaXhnYmVfaHcgKmh3ID0gXFx1MDAyNmFkYXB0ZXItXFx1MDAzZWh3O1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2l4Z2JldmYvZXRodG9vbC5jLTE1NS1cXHR1MzIgKnJlZ3NfYnVmZiA9IHA7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaXhnYmV2Zi9ldGh0b29sLmM6MTU2OlxcdHUzMiByZWdzX2xlbiA9IGl4Z2JldmZfZ2V0X3JlZ3NfbGVuKG5ldGRldik7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaXhnYmV2Zi9ldGh0b29sLmMtMTU3LVxcdHU4IGk7XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9peGdiZXZmL2V0aHRvb2wuYy0yMjItXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaXhnYmV2Zi9ldGh0b29sLmM6MjIzOnN0YXRpYyB2b2lkIGl4Z2JldmZfZ2V0X2RydmluZm8oc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldixcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9peGdiZXZmL2V0aHRvb2wuYy0yMjQtXFx0XFx0XFx0XFx0c3RydWN0IGV0aHRvb2xfZHJ2aW5mbyAqZHJ2aW5mbylcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9peGdiZXZmL2V0aHRvb2wuYy0yMjUte1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2l4Z2JldmYvZXRodG9vbC5jOjIyNjpcXHRzdHJ1Y3QgaXhnYmV2Zl9hZGFwdGVyICphZGFwdGVyID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9peGdiZXZmL2V0aHRvb2wuYy0yMjctXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaXhnYmV2Zi9ldGh0b29sLmM6MjI4OlxcdHN0cnNjcHkoZHJ2aW5mby1cXHUwMDNlZHJpdmVyLCBpeGdiZXZmX2RyaXZlcl9uYW1lLCBzaXplb2YoZHJ2aW5mby1cXHUwMDNlZHJpdmVyKSk7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaXhnYmV2Zi9ldGh0b29sLmMtMjI5LVxcdHN0cnNjcHkoZHJ2aW5mby1cXHUwMDNlYnVzX2luZm8sIHBjaV9uYW1lKGFkYXB0ZXItXFx1MDAzZXBkZXYpLFxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaXhnYmV2Zi9ldGh0b29sLmMtMjM0LVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2l4Z2JldmYvZXRodG9vbC5jOjIzNTpzdGF0aWMgdm9pZCBpeGdiZXZmX2dldF9yaW5ncGFyYW0oc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldixcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9peGdiZXZmL2V0aHRvb2wuYy0yMzYtXFx0XFx0XFx0XFx0ICBzdHJ1Y3QgZXRodG9vbF9yaW5ncGFyYW0gKnJpbmcsXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9peGdiZXZmL2V0aHRvb2wuYy0yMzkte1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2l4Z2JldmYvZXRodG9vbC5jOjI0MDpcXHRzdHJ1Y3QgaXhnYmV2Zl9hZGFwdGVyICphZGFwdGVyID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9peGdiZXZmL2V0aHRvb2wuYy0yNDEtXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9peGdiZXZmL2V0aHRvb2wuYy0yNDctXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaXhnYmV2Zi9ldGh0b29sLmM6MjQ4OnN0YXRpYyBpbnQgaXhnYmV2Zl9zZXRfcmluZ3BhcmFtKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaXhnYmV2Zi9ldGh0b29sLmMtMjQ5LVxcdFxcdFxcdFxcdCBzdHJ1Y3QgZXRodG9vbF9yaW5ncGFyYW0gKnJpbmcsXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9peGdiZXZmL2V0aHRvb2wuYy0yNTIte1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2l4Z2JldmYvZXRodG9vbC5jOjI1MzpcXHRzdHJ1Y3QgaXhnYmV2Zl9hZGFwdGVyICphZGFwdGVyID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9peGdiZXZmL2V0aHRvb2wuYzoyNTQ6XFx0c3RydWN0IGl4Z2JldmZfcmluZyAqdHhfcmluZyA9IE5VTEwsICpyeF9yaW5nID0gTlVMTDtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9peGdiZXZmL2V0aHRvb2wuYy0yNTUtXFx0dTMyIG5ld19yeF9jb3VudCwgbmV3X3R4X2NvdW50O1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaXhnYmV2Zi9ldGh0b29sLmMtMzAyLVxcdFxcdFxcdHR4X3JpbmdbaV0uY291bnQgPSBuZXdfdHhfY291bnQ7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaXhnYmV2Zi9ldGh0b29sLmM6MzAzOlxcdFxcdFxcdGVyciA9IGl4Z2JldmZfc2V0dXBfdHhfcmVzb3VyY2VzKFxcdTAwMjZ0eF9yaW5nW2ldKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9peGdiZXZmL2V0aHRvb2wuYy0zMDQtXFx0XFx0XFx0aWYgKGVycikge1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaXhnYmV2Zi9ldGh0b29sLmMtMzA2LVxcdFxcdFxcdFxcdFxcdGktLTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9peGdiZXZmL2V0aHRvb2wuYzozMDc6XFx0XFx0XFx0XFx0XFx0aXhnYmV2Zl9mcmVlX3R4X3Jlc291cmNlcyhcXHUwMDI2dHhfcmluZ1tpXSk7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaXhnYmV2Zi9ldGh0b29sLmMtMzA4LVxcdFxcdFxcdFxcdH1cXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2l4Z2JldmYvZXRodG9vbC5jLTMyMC1cXHRcXHRcXHR0eF9yaW5nW2ldLmNvdW50ID0gbmV3X3R4X2NvdW50O1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2l4Z2JldmYvZXRodG9vbC5jOjMyMTpcXHRcXHRcXHRlcnIgPSBpeGdiZXZmX3NldHVwX3R4X3Jlc291cmNlcyhcXHUwMDI2dHhfcmluZ1tpXSk7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaXhnYmV2Zi9ldGh0b29sLmMtMzIyLVxcdFxcdFxcdGlmIChlcnIpIHtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2l4Z2JldmYvZXRodG9vbC5jLTMyNC1cXHRcXHRcXHRcXHRcXHRpLS07XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaXhnYmV2Zi9ldGh0b29sLmM6MzI1OlxcdFxcdFxcdFxcdFxcdGl4Z2JldmZfZnJlZV90eF9yZXNvdXJjZXMoXFx1MDAyNnR4X3JpbmdbaV0pO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2l4Z2JldmYvZXRodG9vbC5jLTMyNi1cXHRcXHRcXHRcXHR9XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9peGdiZXZmL2V0aHRvb2wuYy0zNTItXFx0XFx0XFx0cnhfcmluZ1tpXS5jb3VudCA9IG5ld19yeF9jb3VudDtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9peGdiZXZmL2V0aHRvb2wuYzozNTM6XFx0XFx0XFx0ZXJyID0gaXhnYmV2Zl9zZXR1cF9yeF9yZXNvdXJjZXMoYWRhcHRlciwgXFx1MDAyNnJ4X3JpbmdbaV0pO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2l4Z2JldmYvZXRodG9vbC5jLTM1NC1cXHRcXHRcXHRpZiAoZXJyKSB7XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9peGdiZXZmL2V0aHRvb2wuYy0zNTYtXFx0XFx0XFx0XFx0XFx0aS0tO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2l4Z2JldmYvZXRodG9vbC5jOjM1NzpcXHRcXHRcXHRcXHRcXHRpeGdiZXZmX2ZyZWVfcnhfcmVzb3VyY2VzKFxcdTAwMjZyeF9yaW5nW2ldKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9peGdiZXZmL2V0aHRvb2wuYy0zNTgtXFx0XFx0XFx0XFx0fVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaXhnYmV2Zi9ldGh0b29sLmMtMzY4LVxcdC8qIGJyaW5nIGludGVyZmFjZSBkb3duIHRvIHByZXBhcmUgZm9yIHVwZGF0ZSAqL1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2l4Z2JldmYvZXRodG9vbC5jOjM2OTpcXHRpeGdiZXZmX2Rvd24oYWRhcHRlcik7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaXhnYmV2Zi9ldGh0b29sLmMtMzcwLVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaXhnYmV2Zi9ldGh0b29sLmMtMzczLVxcdFxcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBhZGFwdGVyLVxcdTAwM2VudW1fdHhfcXVldWVzOyBpKyspIHtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9peGdiZXZmL2V0aHRvb2wuYzozNzQ6XFx0XFx0XFx0aXhnYmV2Zl9mcmVlX3R4X3Jlc291cmNlcyhhZGFwdGVyLVxcdTAwM2V0eF9yaW5nW2ldKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9peGdiZXZmL2V0aHRvb2wuYy0zNzUtXFx0XFx0XFx0KmFkYXB0ZXItXFx1MDAzZXR4X3JpbmdbaV0gPSB0eF9yaW5nW2ldO1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaXhnYmV2Zi9ldGh0b29sLmMtMzc5LVxcdFxcdGZvciAoaiA9IDA7IGogXFx1MDAzYyBhZGFwdGVyLVxcdTAwM2VudW1feGRwX3F1ZXVlczsgaSsrLCBqKyspIHtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9peGdiZXZmL2V0aHRvb2wuYzozODA6XFx0XFx0XFx0aXhnYmV2Zl9mcmVlX3R4X3Jlc291cmNlcyhhZGFwdGVyLVxcdTAwM2V4ZHBfcmluZ1tqXSk7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaXhnYmV2Zi9ldGh0b29sLmMtMzgxLVxcdFxcdFxcdCphZGFwdGVyLVxcdTAwM2V4ZHBfcmluZ1tqXSA9IHR4X3JpbmdbaV07XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9peGdiZXZmL2V0aHRvb2wuYy0zOTEtXFx0XFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIGFkYXB0ZXItXFx1MDAzZW51bV9yeF9xdWV1ZXM7IGkrKykge1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2l4Z2JldmYvZXRodG9vbC5jOjM5MjpcXHRcXHRcXHRpeGdiZXZmX2ZyZWVfcnhfcmVzb3VyY2VzKGFkYXB0ZXItXFx1MDAzZXJ4X3JpbmdbaV0pO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2l4Z2JldmYvZXRodG9vbC5jLTM5My1cXHRcXHRcXHQqYWRhcHRlci1cXHUwMDNlcnhfcmluZ1tpXSA9IHJ4X3JpbmdbaV07XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9peGdiZXZmL2V0aHRvb2wuYy00MDEtXFx0LyogcmVzdG9yZSBpbnRlcmZhY2UgdXNpbmcgbmV3IHZhbHVlcyAqL1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2l4Z2JldmYvZXRodG9vbC5jOjQwMjpcXHRpeGdiZXZmX3VwKGFkYXB0ZXIpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2l4Z2JldmYvZXRodG9vbC5jLTQwMy1cXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2l4Z2JldmYvZXRodG9vbC5jLTQwOC1cXHRcXHQgICAgIGkgXFx1MDAzYyBhZGFwdGVyLVxcdTAwM2VudW1fdHhfcXVldWVzICsgYWRhcHRlci1cXHUwMDNlbnVtX3hkcF9xdWV1ZXM7IGkrKylcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9peGdiZXZmL2V0aHRvb2wuYzo0MDk6XFx0XFx0XFx0aXhnYmV2Zl9mcmVlX3R4X3Jlc291cmNlcyhcXHUwMDI2dHhfcmluZ1tpXSk7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaXhnYmV2Zi9ldGh0b29sLmMtNDEwLVxcdFxcdHZmcmVlKHR4X3JpbmcpO1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaXhnYmV2Zi9ldGh0b29sLmMtNDE2LVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2l4Z2JldmYvZXRodG9vbC5jOjQxNzpzdGF0aWMgaW50IGl4Z2JldmZfZ2V0X3NzZXRfY291bnQoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwgaW50IHN0cmluZ3NldClcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9peGdiZXZmL2V0aHRvb2wuYy00MTgte1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaXhnYmV2Zi9ldGh0b29sLmMtNDMwLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2l4Z2JldmYvZXRodG9vbC5jOjQzMTpzdGF0aWMgdm9pZCBpeGdiZXZmX2dldF9ldGh0b29sX3N0YXRzKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaXhnYmV2Zi9ldGh0b29sLmMtNDMyLVxcdFxcdFxcdFxcdCAgICAgIHN0cnVjdCBldGh0b29sX3N0YXRzICpzdGF0cywgdTY0ICpkYXRhKVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2l4Z2JldmYvZXRodG9vbC5jLTQzMy17XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaXhnYmV2Zi9ldGh0b29sLmM6NDM0OlxcdHN0cnVjdCBpeGdiZXZmX2FkYXB0ZXIgKmFkYXB0ZXIgPSBuZXRkZXZfcHJpdihuZXRkZXYpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2l4Z2JldmYvZXRodG9vbC5jLTQzNS1cXHRzdHJ1Y3QgcnRubF9saW5rX3N0YXRzNjQgdGVtcDtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2l4Z2JldmYvZXRodG9vbC5jLTQzNy1cXHR1bnNpZ25lZCBpbnQgc3RhcnQ7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaXhnYmV2Zi9ldGh0b29sLmM6NDM4OlxcdHN0cnVjdCBpeGdiZXZmX3JpbmcgKnJpbmc7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaXhnYmV2Zi9ldGh0b29sLmMtNDM5LVxcdGludCBpLCBqO1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaXhnYmV2Zi9ldGh0b29sLmMtNDQxLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2l4Z2JldmYvZXRodG9vbC5jOjQ0MjpcXHRpeGdiZXZmX3VwZGF0ZV9zdGF0cyhhZGFwdGVyKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9peGdiZXZmL2V0aHRvb2wuYy00NDMtXFx0bmV0X3N0YXRzID0gZGV2X2dldF9zdGF0cyhuZXRkZXYsIFxcdTAwMjZ0ZW1wKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9peGdiZXZmL2V0aHRvb2wuYy00NDQtXFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIElYR0JFVkZfR0xPQkFMX1NUQVRTX0xFTjsgaSsrKSB7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaXhnYmV2Zi9ldGh0b29sLmM6NDQ1OlxcdFxcdHN3aXRjaCAoaXhnYmV2Zl9nc3RyaW5nc19zdGF0c1tpXS50eXBlKSB7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaXhnYmV2Zi9ldGh0b29sLmMtNDQ2LVxcdFxcdGNhc2UgTkVUREVWX1NUQVRTOlxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2l4Z2JldmYvZXRodG9vbC5jLTQ0Ny1cXHRcXHRcXHRwID0gKGNoYXIgKiluZXRfc3RhdHMgK1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2l4Z2JldmYvZXRodG9vbC5jOjQ0ODpcXHRcXHRcXHRcXHRcXHRpeGdiZXZmX2dzdHJpbmdzX3N0YXRzW2ldLnN0YXRfb2Zmc2V0O1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2l4Z2JldmYvZXRodG9vbC5jLTQ0OS1cXHRcXHRcXHRicmVhaztcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2l4Z2JldmYvZXRodG9vbC5jLTQ1MS1cXHRcXHRcXHRwID0gKGNoYXIgKilhZGFwdGVyICtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9peGdiZXZmL2V0aHRvb2wuYzo0NTI6XFx0XFx0XFx0XFx0XFx0aXhnYmV2Zl9nc3RyaW5nc19zdGF0c1tpXS5zdGF0X29mZnNldDtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9peGdiZXZmL2V0aHRvb2wuYy00NTMtXFx0XFx0XFx0YnJlYWs7XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9peGdiZXZmL2V0aHRvb2wuYy00NTgtXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaXhnYmV2Zi9ldGh0b29sLmM6NDU5OlxcdFxcdGRhdGFbaV0gPSAoaXhnYmV2Zl9nc3RyaW5nc19zdGF0c1tpXS5zaXplb2Zfc3RhdCA9PVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2l4Z2JldmYvZXRodG9vbC5jLTQ2MC1cXHRcXHRcXHQgICBzaXplb2YodTY0KSkgPyAqKHU2NCAqKXAgOiAqKHUzMiAqKXA7XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9peGdiZXZmL2V0aHRvb2wuYy01MTQtXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaXhnYmV2Zi9ldGh0b29sLmM6NTE1OnN0YXRpYyB2b2lkIGl4Z2JldmZfZ2V0X3N0cmluZ3Moc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwgdTMyIHN0cmluZ3NldCxcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9peGdiZXZmL2V0aHRvb2wuYy01MTYtXFx0XFx0XFx0XFx0dTggKmRhdGEpXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaXhnYmV2Zi9ldGh0b29sLmMtNTE3LXtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9peGdiZXZmL2V0aHRvb2wuYzo1MTg6XFx0c3RydWN0IGl4Z2JldmZfYWRhcHRlciAqYWRhcHRlciA9IG5ldGRldl9wcml2KG5ldGRldik7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaXhnYmV2Zi9ldGh0b29sLmMtNTE5LVxcdGNoYXIgKnAgPSAoY2hhciAqKWRhdGE7XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9peGdiZXZmL2V0aHRvb2wuYy01MjgtXFx0XFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIElYR0JFVkZfR0xPQkFMX1NUQVRTX0xFTjsgaSsrKSB7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaXhnYmV2Zi9ldGh0b29sLmM6NTI5OlxcdFxcdFxcdG1lbWNweShwLCBpeGdiZXZmX2dzdHJpbmdzX3N0YXRzW2ldLnN0YXRfc3RyaW5nLFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2l4Z2JldmYvZXRodG9vbC5jLTUzMC1cXHRcXHRcXHQgICAgICAgRVRIX0dTVFJJTkdfTEVOKTtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2l4Z2JldmYvZXRodG9vbC5jLTU1My1cXHRjYXNlIEVUSF9TU19QUklWX0ZMQUdTOlxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2l4Z2JldmYvZXRodG9vbC5jOjU1NDpcXHRcXHRtZW1jcHkoZGF0YSwgaXhnYmV2Zl9wcml2X2ZsYWdzX3N0cmluZ3MsXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaXhnYmV2Zi9ldGh0b29sLmMtNTU1LVxcdFxcdCAgICAgICBJWEdCRVZGX1BSSVZfRkxBR1NfU1RSX0xFTiAqIEVUSF9HU1RSSU5HX0xFTik7XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9peGdiZXZmL2V0aHRvb2wuYy01NTktXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaXhnYmV2Zi9ldGh0b29sLmM6NTYwOnN0YXRpYyBpbnQgaXhnYmV2Zl9saW5rX3Rlc3Qoc3RydWN0IGl4Z2JldmZfYWRhcHRlciAqYWRhcHRlciwgdTY0ICpkYXRhKVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2l4Z2JldmYvZXRodG9vbC5jLTU2MS17XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9peGdiZXZmL2V0aHRvb2wuYy01NzQtLyogZXRodG9vbCByZWdpc3RlciB0ZXN0IGRhdGEgKi9cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9peGdiZXZmL2V0aHRvb2wuYzo1NzU6c3RydWN0IGl4Z2JldmZfcmVnX3Rlc3Qge1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2l4Z2JldmYvZXRodG9vbC5jLTU3Ni1cXHR1MTYgcmVnO1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaXhnYmV2Zi9ldGh0b29sLmMtNjAwLS8qIGRlZmF1bHQgVkYgcmVnaXN0ZXIgdGVzdCAqL1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2l4Z2JldmYvZXRodG9vbC5jOjYwMTpzdGF0aWMgY29uc3Qgc3RydWN0IGl4Z2JldmZfcmVnX3Rlc3QgcmVnX3Rlc3RfdmZbXSA9IHtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9peGdiZXZmL2V0aHRvb2wuYy02MDItXFx0eyBJWEdCRV9WRlJEQkFMKDApLCAyLCBQQVRURVJOX1RFU1QsIDB4RkZGRkZGODAsIDB4RkZGRkZGODAgfSxcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2l4Z2JldmYvZXRodG9vbC5jPTYxND1zdGF0aWMgY29uc3QgdTMyIHJlZ2lzdGVyX3Rlc3RfcGF0dGVybnNbXSA9IHtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2l4Z2JldmYvZXRodG9vbC5jLTYxNy1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9peGdiZXZmL2V0aHRvb2wuYzo2MTg6c3RhdGljIGJvb2wgcmVnX3BhdHRlcm5fdGVzdChzdHJ1Y3QgaXhnYmV2Zl9hZGFwdGVyICphZGFwdGVyLCB1NjQgKmRhdGEsXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaXhnYmV2Zi9ldGh0b29sLmMtNjE5LVxcdFxcdFxcdCAgICAgaW50IHJlZywgdTMyIG1hc2ssIHUzMiB3cml0ZSlcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2l4Z2JldmYvZXRodG9vbC5jLTYyNy1cXHRmb3IgKHBhdCA9IDA7IHBhdCBcXHUwMDNjIEFSUkFZX1NJWkUocmVnaXN0ZXJfdGVzdF9wYXR0ZXJucyk7IHBhdCsrKSB7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaXhnYmV2Zi9ldGh0b29sLmM6NjI4OlxcdFxcdGJlZm9yZSA9IGl4Z2JldmZfcmVhZF9yZWcoXFx1MDAyNmFkYXB0ZXItXFx1MDAzZWh3LCByZWcpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2l4Z2JldmYvZXRodG9vbC5jLTYyOS1cXHRcXHRpeGdiZV93cml0ZV9yZWcoXFx1MDAyNmFkYXB0ZXItXFx1MDAzZWh3LCByZWcsXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaXhnYmV2Zi9ldGh0b29sLmMtNjMwLVxcdFxcdFxcdFxcdHJlZ2lzdGVyX3Rlc3RfcGF0dGVybnNbcGF0XSBcXHUwMDI2IHdyaXRlKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9peGdiZXZmL2V0aHRvb2wuYzo2MzE6XFx0XFx0dmFsID0gaXhnYmV2Zl9yZWFkX3JlZyhcXHUwMDI2YWRhcHRlci1cXHUwMDNlaHcsIHJlZyk7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaXhnYmV2Zi9ldGh0b29sLmMtNjMyLVxcdFxcdGlmICh2YWwgIT0gKHJlZ2lzdGVyX3Rlc3RfcGF0dGVybnNbcGF0XSBcXHUwMDI2IHdyaXRlIFxcdTAwMjYgbWFzaykpIHtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2l4Z2JldmYvZXRodG9vbC5jLTY0NS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9peGdiZXZmL2V0aHRvb2wuYzo2NDY6c3RhdGljIGJvb2wgcmVnX3NldF9hbmRfY2hlY2soc3RydWN0IGl4Z2JldmZfYWRhcHRlciAqYWRhcHRlciwgdTY0ICpkYXRhLFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2l4Z2JldmYvZXRodG9vbC5jLTY0Ny1cXHRcXHRcXHQgICAgICBpbnQgcmVnLCB1MzIgbWFzaywgdTMyIHdyaXRlKVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaXhnYmV2Zi9ldGh0b29sLmMtNjU0LVxcdH1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9peGdiZXZmL2V0aHRvb2wuYzo2NTU6XFx0YmVmb3JlID0gaXhnYmV2Zl9yZWFkX3JlZyhcXHUwMDI2YWRhcHRlci1cXHUwMDNlaHcsIHJlZyk7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaXhnYmV2Zi9ldGh0b29sLmMtNjU2LVxcdGl4Z2JlX3dyaXRlX3JlZyhcXHUwMDI2YWRhcHRlci1cXHUwMDNlaHcsIHJlZywgd3JpdGUgXFx1MDAyNiBtYXNrKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9peGdiZXZmL2V0aHRvb2wuYzo2NTc6XFx0dmFsID0gaXhnYmV2Zl9yZWFkX3JlZyhcXHUwMDI2YWRhcHRlci1cXHUwMDNlaHcsIHJlZyk7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaXhnYmV2Zi9ldGh0b29sLmMtNjU4LVxcdGlmICgod3JpdGUgXFx1MDAyNiBtYXNrKSAhPSAodmFsIFxcdTAwMjYgbWFzaykpIHtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2l4Z2JldmYvZXRodG9vbC5jLTY2OC1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9peGdiZXZmL2V0aHRvb2wuYzo2Njk6c3RhdGljIGludCBpeGdiZXZmX3JlZ190ZXN0KHN0cnVjdCBpeGdiZXZmX2FkYXB0ZXIgKmFkYXB0ZXIsIHU2NCAqZGF0YSlcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9peGdiZXZmL2V0aHRvb2wuYy02NzAte1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2l4Z2JldmYvZXRodG9vbC5jOjY3MTpcXHRjb25zdCBzdHJ1Y3QgaXhnYmV2Zl9yZWdfdGVzdCAqdGVzdDtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9peGdiZXZmL2V0aHRvb2wuYy02NzItXFx0dTMyIGk7XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9peGdiZXZmL2V0aHRvb2wuYy03MzUtXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaXhnYmV2Zi9ldGh0b29sLmM6NzM2OnN0YXRpYyB2b2lkIGl4Z2JldmZfZGlhZ190ZXN0KHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaXhnYmV2Zi9ldGh0b29sLmMtNzM3LVxcdFxcdFxcdCAgICAgIHN0cnVjdCBldGh0b29sX3Rlc3QgKmV0aF90ZXN0LCB1NjQgKmRhdGEpXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaXhnYmV2Zi9ldGh0b29sLmMtNzM4LXtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9peGdiZXZmL2V0aHRvb2wuYzo3Mzk6XFx0c3RydWN0IGl4Z2JldmZfYWRhcHRlciAqYWRhcHRlciA9IG5ldGRldl9wcml2KG5ldGRldik7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaXhnYmV2Zi9ldGh0b29sLmMtNzQwLVxcdGJvb2wgaWZfcnVubmluZyA9IG5ldGlmX3J1bm5pbmcobmV0ZGV2KTtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2l4Z2JldmYvZXRodG9vbC5jLTc1OC1cXHRcXHQgKi9cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9peGdiZXZmL2V0aHRvb2wuYzo3NTk6XFx0XFx0aWYgKGl4Z2JldmZfbGlua190ZXN0KGFkYXB0ZXIsIFxcdTAwMjZkYXRhWzFdKSlcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9peGdiZXZmL2V0aHRvb2wuYy03NjAtXFx0XFx0XFx0ZXRoX3Rlc3QtXFx1MDAzZWZsYWdzIHw9IEVUSF9URVNUX0ZMX0ZBSUxFRDtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2l4Z2JldmYvZXRodG9vbC5jLTc2My1cXHRcXHRcXHQvKiBpbmRpY2F0ZSB3ZSdyZSBpbiB0ZXN0IG1vZGUgKi9cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9peGdiZXZmL2V0aHRvb2wuYzo3NjQ6XFx0XFx0XFx0aXhnYmV2Zl9jbG9zZShuZXRkZXYpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2l4Z2JldmYvZXRodG9vbC5jLTc2NS1cXHRcXHRlbHNlXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaXhnYmV2Zi9ldGh0b29sLmM6NzY2OlxcdFxcdFxcdGl4Z2JldmZfcmVzZXQoYWRhcHRlcik7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaXhnYmV2Zi9ldGh0b29sLmMtNzY3LVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2l4Z2JldmYvZXRodG9vbC5jLTc2OC1cXHRcXHRod19kYmcoXFx1MDAyNmFkYXB0ZXItXFx1MDAzZWh3LCBcXFwicmVnaXN0ZXIgdGVzdGluZyBzdGFydGluZ1xcXFxuXFxcIik7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaXhnYmV2Zi9ldGh0b29sLmM6NzY5OlxcdFxcdGlmIChpeGdiZXZmX3JlZ190ZXN0KGFkYXB0ZXIsIFxcdTAwMjZkYXRhWzBdKSlcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9peGdiZXZmL2V0aHRvb2wuYy03NzAtXFx0XFx0XFx0ZXRoX3Rlc3QtXFx1MDAzZWZsYWdzIHw9IEVUSF9URVNUX0ZMX0ZBSUxFRDtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9peGdiZXZmL2V0aHRvb2wuYy03NzEtXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaXhnYmV2Zi9ldGh0b29sLmM6NzcyOlxcdFxcdGl4Z2JldmZfcmVzZXQoYWRhcHRlcik7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaXhnYmV2Zi9ldGh0b29sLmMtNzczLVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaXhnYmV2Zi9ldGh0b29sLmMtNzc1LVxcdFxcdGlmIChpZl9ydW5uaW5nKVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2l4Z2JldmYvZXRodG9vbC5jOjc3NjpcXHRcXHRcXHRpeGdiZXZmX29wZW4obmV0ZGV2KTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9peGdiZXZmL2V0aHRvb2wuYy03NzctXFx0fSBlbHNlIHtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2l4Z2JldmYvZXRodG9vbC5jLTc3OS1cXHRcXHQvKiBPbmxpbmUgdGVzdHMgKi9cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9peGdiZXZmL2V0aHRvb2wuYzo3ODA6XFx0XFx0aWYgKGl4Z2JldmZfbGlua190ZXN0KGFkYXB0ZXIsIFxcdTAwMjZkYXRhWzFdKSlcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9peGdiZXZmL2V0aHRvb2wuYy03ODEtXFx0XFx0XFx0ZXRoX3Rlc3QtXFx1MDAzZWZsYWdzIHw9IEVUSF9URVNUX0ZMX0ZBSUxFRDtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2l4Z2JldmYvZXRodG9vbC5jLTc5MC1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9peGdiZXZmL2V0aHRvb2wuYzo3OTE6c3RhdGljIGludCBpeGdiZXZmX253YXlfcmVzZXQoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldilcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9peGdiZXZmL2V0aHRvb2wuYy03OTIte1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2l4Z2JldmYvZXRodG9vbC5jOjc5MzpcXHRzdHJ1Y3QgaXhnYmV2Zl9hZGFwdGVyICphZGFwdGVyID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9peGdiZXZmL2V0aHRvb2wuYy03OTQtXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaXhnYmV2Zi9ldGh0b29sLmMtNzk1LVxcdGlmIChuZXRpZl9ydW5uaW5nKG5ldGRldikpXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaXhnYmV2Zi9ldGh0b29sLmM6Nzk2OlxcdFxcdGl4Z2JldmZfcmVpbml0X2xvY2tlZChhZGFwdGVyKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9peGdiZXZmL2V0aHRvb2wuYy03OTctXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9peGdiZXZmL2V0aHRvb2wuYy04MDAtXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaXhnYmV2Zi9ldGh0b29sLmM6ODAxOnN0YXRpYyBpbnQgaXhnYmV2Zl9nZXRfY29hbGVzY2Uoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldixcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9peGdiZXZmL2V0aHRvb2wuYy04MDItXFx0XFx0XFx0XFx0c3RydWN0IGV0aHRvb2xfY29hbGVzY2UgKmVjLFxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaXhnYmV2Zi9ldGh0b29sLmMtODA1LXtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9peGdiZXZmL2V0aHRvb2wuYzo4MDY6XFx0c3RydWN0IGl4Z2JldmZfYWRhcHRlciAqYWRhcHRlciA9IG5ldGRldl9wcml2KG5ldGRldik7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaXhnYmV2Zi9ldGh0b29sLmMtODA3LVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaXhnYmV2Zi9ldGh0b29sLmMtODI2LVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2l4Z2JldmYvZXRodG9vbC5jOjgyNzpzdGF0aWMgaW50IGl4Z2JldmZfc2V0X2NvYWxlc2NlKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaXhnYmV2Zi9ldGh0b29sLmMtODI4LVxcdFxcdFxcdFxcdHN0cnVjdCBldGh0b29sX2NvYWxlc2NlICplYyxcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2l4Z2JldmYvZXRodG9vbC5jLTgzMS17XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaXhnYmV2Zi9ldGh0b29sLmM6ODMyOlxcdHN0cnVjdCBpeGdiZXZmX2FkYXB0ZXIgKmFkYXB0ZXIgPSBuZXRkZXZfcHJpdihuZXRkZXYpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2l4Z2JldmYvZXRodG9vbC5jOjgzMzpcXHRzdHJ1Y3QgaXhnYmV2Zl9xX3ZlY3RvciAqcV92ZWN0b3I7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaXhnYmV2Zi9ldGh0b29sLmMtODM0LVxcdGludCBudW1fdmVjdG9ycywgaTtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2l4Z2JldmYvZXRodG9vbC5jLTg3NS1cXHRcXHRcXHRxX3ZlY3Rvci1cXHUwMDNlaXRyID0gcnhfaXRyX3BhcmFtO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2l4Z2JldmYvZXRodG9vbC5jOjg3NjpcXHRcXHRpeGdiZXZmX3dyaXRlX2VpdHIocV92ZWN0b3IpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2l4Z2JldmYvZXRodG9vbC5jLTg3Ny1cXHR9XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9peGdiZXZmL2V0aHRvb2wuYy04ODEtXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaXhnYmV2Zi9ldGh0b29sLmM6ODgyOnN0YXRpYyB1MzIgaXhnYmV2Zl9nZXRfcnhfcmluZ19jb3VudChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2l4Z2JldmYvZXRodG9vbC5jLTg4My17XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaXhnYmV2Zi9ldGh0b29sLmM6ODg0OlxcdHN0cnVjdCBpeGdiZXZmX2FkYXB0ZXIgKmFkYXB0ZXIgPSBuZXRkZXZfcHJpdihkZXYpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2l4Z2JldmYvZXRodG9vbC5jLTg4NS1cXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2l4Z2JldmYvZXRodG9vbC5jLTg4OC1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9peGdiZXZmL2V0aHRvb2wuYzo4ODk6c3RhdGljIHUzMiBpeGdiZXZmX2dldF9yeGZoX2luZGlyX3NpemUoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldilcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9peGdiZXZmL2V0aHRvb2wuYy04OTAte1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2l4Z2JldmYvZXRodG9vbC5jOjg5MTpcXHRzdHJ1Y3QgaXhnYmV2Zl9hZGFwdGVyICphZGFwdGVyID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9peGdiZXZmL2V0aHRvb2wuYy04OTItXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9peGdiZXZmL2V0aHRvb2wuYy04OTgtXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaXhnYmV2Zi9ldGh0b29sLmM6ODk5OnN0YXRpYyB1MzIgaXhnYmV2Zl9nZXRfcnhmaF9rZXlfc2l6ZShzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2KVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2l4Z2JldmYvZXRodG9vbC5jLTkwMC17XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9peGdiZXZmL2V0aHRvb2wuYy05MDMtXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaXhnYmV2Zi9ldGh0b29sLmM6OTA0OnN0YXRpYyBpbnQgaXhnYmV2Zl9nZXRfcnhmaChzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2l4Z2JldmYvZXRodG9vbC5jLTkwNS1cXHRcXHRcXHQgICAgc3RydWN0IGV0aHRvb2xfcnhmaF9wYXJhbSAqcnhmaClcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9peGdiZXZmL2V0aHRvb2wuYy05MDYte1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2l4Z2JldmYvZXRodG9vbC5jOjkwNzpcXHRzdHJ1Y3QgaXhnYmV2Zl9hZGFwdGVyICphZGFwdGVyID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9peGdiZXZmL2V0aHRvb2wuYy05MDgtXFx0aW50IGVyciA9IDA7XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9peGdiZXZmL2V0aHRvb2wuYy05MTQtXFx0XFx0XFx0bWVtY3B5KHJ4ZmgtXFx1MDAzZWtleSwgYWRhcHRlci1cXHUwMDNlcnNzX2tleSxcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9peGdiZXZmL2V0aHRvb2wuYzo5MTU6XFx0XFx0XFx0ICAgICAgIGl4Z2JldmZfZ2V0X3J4Zmhfa2V5X3NpemUobmV0ZGV2KSk7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaXhnYmV2Zi9ldGh0b29sLmMtOTE2LVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaXhnYmV2Zi9ldGh0b29sLmMtOTMxLVxcdFxcdGlmIChyeGZoLVxcdTAwM2VpbmRpcilcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9peGdiZXZmL2V0aHRvb2wuYzo5MzI6XFx0XFx0XFx0ZXJyID0gaXhnYmV2Zl9nZXRfcmV0YV9sb2NrZWQoXFx1MDAyNmFkYXB0ZXItXFx1MDAzZWh3LFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2l4Z2JldmYvZXRodG9vbC5jLTkzMy1cXHRcXHRcXHRcXHRcXHRcXHQgICAgICByeGZoLVxcdTAwM2VpbmRpcixcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2l4Z2JldmYvZXRodG9vbC5jLTkzNi1cXHRcXHRpZiAoIWVyciBcXHUwMDI2XFx1MDAyNiByeGZoLVxcdTAwM2VrZXkpXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaXhnYmV2Zi9ldGh0b29sLmM6OTM3OlxcdFxcdFxcdGVyciA9IGl4Z2JldmZfZ2V0X3Jzc19rZXlfbG9ja2VkKFxcdTAwMjZhZGFwdGVyLVxcdTAwM2VodyxcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9peGdiZXZmL2V0aHRvb2wuYy05MzgtXFx0XFx0XFx0XFx0XFx0XFx0XFx0IHJ4ZmgtXFx1MDAzZWtleSk7XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9peGdiZXZmL2V0aHRvb2wuYy05NDUtXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaXhnYmV2Zi9ldGh0b29sLmM6OTQ2OnN0YXRpYyB1MzIgaXhnYmV2Zl9nZXRfcHJpdl9mbGFncyhzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2KVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2l4Z2JldmYvZXRodG9vbC5jLTk0Ny17XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaXhnYmV2Zi9ldGh0b29sLmM6OTQ4OlxcdHN0cnVjdCBpeGdiZXZmX2FkYXB0ZXIgKmFkYXB0ZXIgPSBuZXRkZXZfcHJpdihuZXRkZXYpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2l4Z2JldmYvZXRodG9vbC5jLTk0OS1cXHR1MzIgcHJpdl9mbGFncyA9IDA7XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9peGdiZXZmL2V0aHRvb2wuYy05NTYtXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaXhnYmV2Zi9ldGh0b29sLmM6OTU3OnN0YXRpYyBpbnQgaXhnYmV2Zl9zZXRfcHJpdl9mbGFncyhzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LCB1MzIgcHJpdl9mbGFncylcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9peGdiZXZmL2V0aHRvb2wuYy05NTgte1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2l4Z2JldmYvZXRodG9vbC5jOjk1OTpcXHRzdHJ1Y3QgaXhnYmV2Zl9hZGFwdGVyICphZGFwdGVyID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9peGdiZXZmL2V0aHRvb2wuYy05NjAtXFx0dW5zaWduZWQgaW50IGZsYWdzID0gYWRhcHRlci1cXHUwMDNlZmxhZ3M7XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9peGdiZXZmL2V0aHRvb2wuYy05NzAtXFx0XFx0aWYgKG5ldGlmX3J1bm5pbmcobmV0ZGV2KSlcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9peGdiZXZmL2V0aHRvb2wuYzo5NzE6XFx0XFx0XFx0aXhnYmV2Zl9yZWluaXRfbG9ja2VkKGFkYXB0ZXIpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2l4Z2JldmYvZXRodG9vbC5jLTk3Mi1cXHR9XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9peGdiZXZmL2V0aHRvb2wuYy05NzYtXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaXhnYmV2Zi9ldGh0b29sLmM6OTc3OnN0YXRpYyBjb25zdCBzdHJ1Y3QgZXRodG9vbF9vcHMgaXhnYmV2Zl9ldGh0b29sX29wcyA9IHtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9peGdiZXZmL2V0aHRvb2wuYy05NzgtXFx0LnN1cHBvcnRlZF9jb2FsZXNjZV9wYXJhbXMgPSBFVEhUT09MX0NPQUxFU0NFX1VTRUNTLFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2l4Z2JldmYvZXRodG9vbC5jOjk3OTpcXHQuZ2V0X2RydmluZm9cXHRcXHQ9IGl4Z2JldmZfZ2V0X2RydmluZm8sXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaXhnYmV2Zi9ldGh0b29sLmM6OTgwOlxcdC5nZXRfcmVnc19sZW5cXHRcXHQ9IGl4Z2JldmZfZ2V0X3JlZ3NfbGVuLFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2l4Z2JldmYvZXRodG9vbC5jOjk4MTpcXHQuZ2V0X3JlZ3NcXHRcXHQ9IGl4Z2JldmZfZ2V0X3JlZ3MsXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaXhnYmV2Zi9ldGh0b29sLmM6OTgyOlxcdC5ud2F5X3Jlc2V0XFx0XFx0PSBpeGdiZXZmX253YXlfcmVzZXQsXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaXhnYmV2Zi9ldGh0b29sLmMtOTgzLVxcdC5nZXRfbGlua1xcdFxcdD0gZXRodG9vbF9vcF9nZXRfbGluayxcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9peGdiZXZmL2V0aHRvb2wuYzo5ODQ6XFx0LmdldF9yaW5ncGFyYW1cXHRcXHQ9IGl4Z2JldmZfZ2V0X3JpbmdwYXJhbSxcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9peGdiZXZmL2V0aHRvb2wuYzo5ODU6XFx0LnNldF9yaW5ncGFyYW1cXHRcXHQ9IGl4Z2JldmZfc2V0X3JpbmdwYXJhbSxcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9peGdiZXZmL2V0aHRvb2wuYzo5ODY6XFx0LmdldF9tc2dsZXZlbFxcdFxcdD0gaXhnYmV2Zl9nZXRfbXNnbGV2ZWwsXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaXhnYmV2Zi9ldGh0b29sLmM6OTg3OlxcdC5zZXRfbXNnbGV2ZWxcXHRcXHQ9IGl4Z2JldmZfc2V0X21zZ2xldmVsLFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2l4Z2JldmYvZXRodG9vbC5jOjk4ODpcXHQuc2VsZl90ZXN0XFx0XFx0PSBpeGdiZXZmX2RpYWdfdGVzdCxcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9peGdiZXZmL2V0aHRvb2wuYzo5ODk6XFx0LmdldF9zc2V0X2NvdW50XFx0XFx0PSBpeGdiZXZmX2dldF9zc2V0X2NvdW50LFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2l4Z2JldmYvZXRodG9vbC5jOjk5MDpcXHQuZ2V0X3N0cmluZ3NcXHRcXHQ9IGl4Z2JldmZfZ2V0X3N0cmluZ3MsXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaXhnYmV2Zi9ldGh0b29sLmM6OTkxOlxcdC5nZXRfZXRodG9vbF9zdGF0c1xcdD0gaXhnYmV2Zl9nZXRfZXRodG9vbF9zdGF0cyxcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9peGdiZXZmL2V0aHRvb2wuYzo5OTI6XFx0LmdldF9jb2FsZXNjZVxcdFxcdD0gaXhnYmV2Zl9nZXRfY29hbGVzY2UsXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaXhnYmV2Zi9ldGh0b29sLmM6OTkzOlxcdC5zZXRfY29hbGVzY2VcXHRcXHQ9IGl4Z2JldmZfc2V0X2NvYWxlc2NlLFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2l4Z2JldmYvZXRodG9vbC5jOjk5NDpcXHQuZ2V0X3J4X3JpbmdfY291bnRcXHQ9IGl4Z2JldmZfZ2V0X3J4X3JpbmdfY291bnQsXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaXhnYmV2Zi9ldGh0b29sLmM6OTk1OlxcdC5nZXRfcnhmaF9pbmRpcl9zaXplXFx0PSBpeGdiZXZmX2dldF9yeGZoX2luZGlyX3NpemUsXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaXhnYmV2Zi9ldGh0b29sLmM6OTk2OlxcdC5nZXRfcnhmaF9rZXlfc2l6ZVxcdD0gaXhnYmV2Zl9nZXRfcnhmaF9rZXlfc2l6ZSxcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9peGdiZXZmL2V0aHRvb2wuYzo5OTc6XFx0LmdldF9yeGZoXFx0XFx0PSBpeGdiZXZmX2dldF9yeGZoLFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2l4Z2JldmYvZXRodG9vbC5jOjk5ODpcXHQuZ2V0X2xpbmtfa3NldHRpbmdzXFx0PSBpeGdiZXZmX2dldF9saW5rX2tzZXR0aW5ncyxcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9peGdiZXZmL2V0aHRvb2wuYzo5OTk6XFx0LmdldF9wcml2X2ZsYWdzXFx0XFx0PSBpeGdiZXZmX2dldF9wcml2X2ZsYWdzLFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2l4Z2JldmYvZXRodG9vbC5jOjEwMDA6XFx0LnNldF9wcml2X2ZsYWdzXFx0XFx0PSBpeGdiZXZmX3NldF9wcml2X2ZsYWdzLFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2l4Z2JldmYvZXRodG9vbC5jLTEwMDEtfTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9peGdiZXZmL2V0aHRvb2wuYy0xMDAyLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2l4Z2JldmYvZXRodG9vbC5jOjEwMDM6dm9pZCBpeGdiZXZmX3NldF9ldGh0b29sX29wcyhzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2KVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2l4Z2JldmYvZXRodG9vbC5jLTEwMDQte1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2l4Z2JldmYvZXRodG9vbC5jOjEwMDU6XFx0bmV0ZGV2LVxcdTAwM2VldGh0b29sX29wcyA9IFxcdTAwMjZpeGdiZXZmX2V0aHRvb2xfb3BzO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2l4Z2JldmYvZXRodG9vbC5jLTEwMDYtfVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaXhnYmV2Zi9pcHNlYy5jLTMtXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaXhnYmV2Zi9pcHNlYy5jOjQ6I2luY2x1ZGUgXFxcIml4Z2JldmYuaFxcXCJcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9peGdiZXZmL2lwc2VjLmMtNS0jaW5jbHVkZSBcXHUwMDNjbmV0L3hmcm0uaFxcdTAwM2VcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2l4Z2JldmYvaXBzZWMuYz05PXN0YXRpYyBjb25zdCBjaGFyIGFlc19nY21fbmFtZVtdID0gXFxcInJmYzQxMDYoZ2NtKGFlcykpXFxcIjtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2l4Z2JldmYvaXBzZWMuYy0xMS0vKipcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9peGdiZXZmL2lwc2VjLmM6MTI6ICogaXhnYmV2Zl9pcHNlY19zZXRfcGZfc2EgLSBhc2sgdGhlIFBGIHRvIHNldCB1cCBhbiBTQVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2l4Z2JldmYvaXBzZWMuYy0xMy0gKiBAYWRhcHRlcjogYm9hcmQgcHJpdmF0ZSBzdHJ1Y3R1cmVcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2l4Z2JldmYvaXBzZWMuYy0xNy0gKiovXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaXhnYmV2Zi9pcHNlYy5jOjE4OnN0YXRpYyBpbnQgaXhnYmV2Zl9pcHNlY19zZXRfcGZfc2Eoc3RydWN0IGl4Z2JldmZfYWRhcHRlciAqYWRhcHRlcixcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9peGdiZXZmL2lwc2VjLmMtMTktXFx0XFx0XFx0XFx0ICAgc3RydWN0IHhmcm1fc3RhdGUgKnhzKVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaXhnYmV2Zi9pcHNlYy5jLTQyLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2l4Z2JldmYvaXBzZWMuYzo0MzpcXHRyZXQgPSBpeGdiZXZmX3dyaXRlX21ieChodywgbXNnYnVmLCBJWEdCRV9WRk1BSUxCT1hfU0laRSk7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaXhnYmV2Zi9pcHNlYy5jLTQ0LVxcdGlmIChyZXQpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9peGdiZXZmL2lwc2VjLmMtNDYtXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaXhnYmV2Zi9pcHNlYy5jOjQ3OlxcdHJldCA9IGl4Z2JldmZfcG9sbF9tYngoaHcsIG1zZ2J1ZiwgMik7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaXhnYmV2Zi9pcHNlYy5jLTQ4LVxcdGlmIChyZXQpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9peGdiZXZmL2lwc2VjLmMtNjEtLyoqXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaXhnYmV2Zi9pcHNlYy5jOjYyOiAqIGl4Z2JldmZfaXBzZWNfZGVsX3BmX3NhIC0gYXNrIHRoZSBQRiB0byBkZWxldGUgYW4gU0FcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9peGdiZXZmL2lwc2VjLmMtNjMtICogQGFkYXB0ZXI6IGJvYXJkIHByaXZhdGUgc3RydWN0dXJlXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9peGdiZXZmL2lwc2VjLmMtNjctICoqL1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2l4Z2JldmYvaXBzZWMuYzo2ODpzdGF0aWMgaW50IGl4Z2JldmZfaXBzZWNfZGVsX3BmX3NhKHN0cnVjdCBpeGdiZXZmX2FkYXB0ZXIgKmFkYXB0ZXIsIGludCBwZnNhKVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2l4Z2JldmYvaXBzZWMuYy02OS17XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9peGdiZXZmL2lwc2VjLmMtNzktXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaXhnYmV2Zi9pcHNlYy5jOjgwOlxcdGVyciA9IGl4Z2JldmZfd3JpdGVfbWJ4KGh3LCBtc2didWYsIDIpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2l4Z2JldmYvaXBzZWMuYy04MS1cXHRpZiAoZXJyKVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaXhnYmV2Zi9pcHNlYy5jLTgzLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2l4Z2JldmYvaXBzZWMuYzo4NDpcXHRlcnIgPSBpeGdiZXZmX3BvbGxfbWJ4KGh3LCBtc2didWYsIDIpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2l4Z2JldmYvaXBzZWMuYy04NS1cXHRpZiAoZXJyKVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaXhnYmV2Zi9pcHNlYy5jLTkzLS8qKlxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2l4Z2JldmYvaXBzZWMuYzo5NDogKiBpeGdiZXZmX2lwc2VjX3Jlc3RvcmUgLSByZXN0b3JlIHRoZSBJUHNlYyBIVyBzZXR0aW5ncyBhZnRlciBhIHJlc2V0XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaXhnYmV2Zi9pcHNlYy5jLTk1LSAqIEBhZGFwdGVyOiBib2FyZCBwcml2YXRlIHN0cnVjdHVyZVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaXhnYmV2Zi9pcHNlYy5jLTEwMC0gKiovXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaXhnYmV2Zi9pcHNlYy5jOjEwMTp2b2lkIGl4Z2JldmZfaXBzZWNfcmVzdG9yZShzdHJ1Y3QgaXhnYmV2Zl9hZGFwdGVyICphZGFwdGVyKVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2l4Z2JldmYvaXBzZWMuYy0xMDIte1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2l4Z2JldmYvaXBzZWMuYzoxMDM6XFx0c3RydWN0IGl4Z2JldmZfaXBzZWMgKmlwc2VjID0gYWRhcHRlci1cXHUwMDNlaXBzZWM7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaXhnYmV2Zi9pcHNlYy5jLTEwNC1cXHRzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2ID0gYWRhcHRlci1cXHUwMDNlbmV0ZGV2O1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaXhnYmV2Zi9pcHNlYy5jLTExNi1cXHRcXHRpZiAoci1cXHUwMDNldXNlZCkge1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2l4Z2JldmYvaXBzZWMuYzoxMTc6XFx0XFx0XFx0cmV0ID0gaXhnYmV2Zl9pcHNlY19zZXRfcGZfc2EoYWRhcHRlciwgci1cXHUwMDNleHMpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2l4Z2JldmYvaXBzZWMuYy0xMTgtXFx0XFx0XFx0aWYgKHJldCBcXHUwMDNjIDApXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9peGdiZXZmL2lwc2VjLmMtMTIzLVxcdFxcdGlmICh0LVxcdTAwM2V1c2VkKSB7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaXhnYmV2Zi9pcHNlYy5jOjEyNDpcXHRcXHRcXHRyZXQgPSBpeGdiZXZmX2lwc2VjX3NldF9wZl9zYShhZGFwdGVyLCB0LVxcdTAwM2V4cyk7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaXhnYmV2Zi9pcHNlYy5jLTEyNS1cXHRcXHRcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2l4Z2JldmYvaXBzZWMuYy0xMzItLyoqXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaXhnYmV2Zi9pcHNlYy5jOjEzMzogKiBpeGdiZXZmX2lwc2VjX2ZpbmRfZW1wdHlfaWR4IC0gZmluZCB0aGUgZmlyc3QgdW51c2VkIHNlY3VyaXR5IHBhcmFtZXRlciBpbmRleFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2l4Z2JldmYvaXBzZWMuYy0xMzQtICogQGlwc2VjOiBwb2ludGVyIHRvIElQc2VjIHN0cnVjdFxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaXhnYmV2Zi9pcHNlYy5jPTEzOT1zdGF0aWNcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9peGdiZXZmL2lwc2VjLmM6MTQwOmludCBpeGdiZXZmX2lwc2VjX2ZpbmRfZW1wdHlfaWR4KHN0cnVjdCBpeGdiZXZmX2lwc2VjICppcHNlYywgYm9vbCByeHRhYmxlKVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2l4Z2JldmYvaXBzZWMuYy0xNDEte1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaXhnYmV2Zi9pcHNlYy5jLTE2Ny0vKipcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9peGdiZXZmL2lwc2VjLmM6MTY4OiAqIGl4Z2JldmZfaXBzZWNfZmluZF9yeF9zdGF0ZSAtIGZpbmQgdGhlIHN0YXRlIHRoYXQgbWF0Y2hlc1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2l4Z2JldmYvaXBzZWMuYy0xNjktICogQGlwc2VjOiBwb2ludGVyIHRvIElQc2VjIHN0cnVjdFxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaXhnYmV2Zi9pcHNlYy5jPTE3Nz1zdGF0aWNcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9peGdiZXZmL2lwc2VjLmM6MTc4OnN0cnVjdCB4ZnJtX3N0YXRlICppeGdiZXZmX2lwc2VjX2ZpbmRfcnhfc3RhdGUoc3RydWN0IGl4Z2JldmZfaXBzZWMgKmlwc2VjLFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2l4Z2JldmYvaXBzZWMuYy0xNzktXFx0XFx0XFx0XFx0XFx0ICAgICAgIF9fYmUzMiAqZGFkZHIsIHU4IHByb3RvLFxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaXhnYmV2Zi9pcHNlYy5jLTIwMi0vKipcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9peGdiZXZmL2lwc2VjLmM6MjAzOiAqIGl4Z2JldmZfaXBzZWNfcGFyc2VfcHJvdG9fa2V5cyAtIGZpbmQgdGhlIGtleSBhbmQgc2FsdCBiYXNlZCBvbiB0aGUgcHJvdG9jb2xcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9peGdiZXZmL2lwc2VjLmMtMjA0LSAqIEBkZXY6IHBvaW50ZXIgdG8gbmV0IGRldmljZSB0byBwcm9ncmFtXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9peGdiZXZmL2lwc2VjLmMtMjExLSAqKi9cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9peGdiZXZmL2lwc2VjLmM6MjEyOnN0YXRpYyBpbnQgaXhnYmV2Zl9pcHNlY19wYXJzZV9wcm90b19rZXlzKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaXhnYmV2Zi9pcHNlYy5jLTIxMy1cXHRcXHRcXHRcXHRcXHQgIHN0cnVjdCB4ZnJtX3N0YXRlICp4cyxcXG5cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjRUMTQ6MTk6MzguOTU2OTMwMTIxWiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTgzMTUzNTEyNzcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqV29ydGhGdXp6aW5nIEFzc2Vzc21lbnQgZm9yIGl4Z2JldmYgUGF0Y2gqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIFRoZSBwYXRjaCB0YXJnZXRzIHRoZSBgaXhnYmV2ZmAgZHJpdmVyLCBJbnRlbCdzIDEwR2JFIFBDSSBFeHByZXNzIFZpcnR1YWwgRnVuY3Rpb24gZHJpdmVyLiBJdCdzIG1vZGlmeWluZyB0d28gZnVuY3Rpb25zLCBgaXhnYmV2Zl9nZXRfbGlua19rc2V0dGluZ3NgIGFuZCBgaXhnYmV2Zl9odl9jaGVja19tYWNfbGlua192ZmAsIHdoaWNoIGRlYWwgd2l0aCBsaW5rIHN0YXR1cywgc3BlY2lmaWNhbGx5IHJlYWRpbmcgZnJvbSBQQ0kgY29uZmlnIHNwYWNlLiBUaGUgY2F0Y2ggaXMgdGhhdCBpdCdzIGZvY3VzaW5nIG9uIEh5cGVyLVYgRTYxMCBWRnMuXG5cblRoZSBpbnN0cnVjdGlvbnMgc2F5IHRvIHJldHVybiBgV29ydGhGdXp6aW5nPWZhbHNlYCBpZiB0aGUgcGF0Y2ggZmFsbHMgaW50byB0aGUgY2F0ZWdvcnkgb2YgdmVuZG9yLXNwZWNpZmljIFBDSWUgZHJpdmVycyB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgaGFyZHdhcmUgbm90IGVtdWxhdGVkIGluIFFFTVUuIE15IGluaXRpYWwgdGhvdWdodCBpcyB0aGF0IGBpeGdiZXZmYCAqaXMqIGEgVkYgZHJpdmVyLCBhbmQgVkZzIGFyZSB1c3VhbGx5IGV4cG9zZWQgYnkgcGh5c2ljYWwgaGFyZHdhcmUgdXNpbmcgU1ItSU9WLiBTeXprYWxsZXIgZG9lc24ndCBlbXVsYXRlIHRoZSBWRiBkaXJlY3RseTsgaXQgZW11bGF0ZXMgdGhlIFBGIChgaXhnYmVgKS4gU28gdGhlIHF1ZXN0aW9uIGlzOiBkb2VzIFFFTVUgZW11bGF0ZSBgaXhnYmV2ZmA/IEkgbmVlZCB0byBjaGVjay4gIFdoaWxlIFFFTVUgaGFzIGBpZ2J2Zi5jYCBhbmQgYGlnYi5jYCwgZm9yIGBpeGdiZWAsIHRoZXJlJ3Mgb25seSBgaXhnYmUuY2AgLSBubyBgaXhnYmV2Zi5jYCEgU28sIG15IGluaXRpYWwgZ3Vlc3MgaXMgdGhhdCBpdCBkb2VzICpub3QqIGZ1bGx5IGVtdWxhdGUgdGhlIFZGIGZvciBpeGdiZS4gQnV0IGxldCdzIHZlcmlmeS4gSSBzaG91bGQgY29uZmlybSBpZiBzeXprYWxsZXIgZXZlbiAqYXR0ZW1wdHMqIHRvIHJlYWNoIGBpeGdiZXZmYCBjb2RlIHBhdGhzLlxuXG5Ib3dldmVyLCB0aGUgcGF0Y2ggKnNwZWNpZmljYWxseSogbWVudGlvbnMgSHlwZXItViBFNjEwIFZGcy4gVGhpcyBpbXBsaWVzIGEgdmVyeSBuYXJyb3cgdXNlIGNhc2U6IGEgdmlydHVhbCBmdW5jdGlvbiBvZiBhbiBFNjEwIE5JQyBydW5uaW5nIHVuZGVyIEh5cGVyLVYuIENhbiBTeXprYWxsZXIgZnV6eiBIeXBlci1WLXNwZWNpZmljIGNvZGUgaW4gYGl4Z2JldmZgPyBTeXprYWxsZXIgcnVucyBvbiBHQ0UgKEtWTSkgb3IgUUVNVSAoS1ZNL1RDRykuIEl0IGRvZXNuJ3QgcnVuIG9uIEh5cGVyLVYsIHNvIHRoYXQncyBhIHByb2JsZW0uIEFsc28sIHRoZSBwYXRjaCBoYXMgYSBjaGVjayBmb3IgYGh3LVx1MDAzZW1hYy50eXBlID09IGl4Z2JlX21hY19lNjEwX3ZmYC4gRTYxMCBpcyBhIHNwZWNpZmljIGhhcmR3YXJlIE1BQyB0eXBlLiBRRU1VIGVtdWxhdGVzIDgyNTk5LCBub3QgdGhlIEU2MTAuIFNvIGBpeGdiZV9tYWNfZTYxMF92ZmAgaXMgbGlrZWx5IHVucmVhY2hhYmxlIGluIFFFTVUuIFN5emthbGxlciBjYW4gZnV6eiBQQ0kgZGV2aWNlcyBpZiB0aGV5J3JlIGVtdWxhdGVkLCBidXQgdGhlIEU2MTAgVkYgaXNuJ3QuXG5cbk5vdywgbGV0J3Mgc3RlcCBiYWNrIGFuZCBjb25zaWRlciB0aGUgZnV6emluZyBpbnN0cnVjdGlvbnMgYWdhaW4uIFRoZXkgZXhwbGljaXRseSBydWxlIG91dCBjb2RlIHBhdGhzIHVucmVhY2hhYmxlIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLCBldmVuIHdpdGggc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUuIFRoZXkgYWxzbyBleGNsdWRlIHZlbmRvci1zcGVjaWZpYyBQQ0llIGRyaXZlcnMgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuIGBpeGdiZXZmYCAqaXMqIGFuIEV0aGVybmV0IGRyaXZlciBmb3IgSW50ZWwgMTBHYkUgVkZzLiBBbmQgaXQgcmVxdWlyZXMgcGh5c2ljYWwgaGFyZHdhcmUsICpvciogYSBoeXBlcnZpc29yIHRoYXQgZW11bGF0ZXMgaXQuIFN0YW5kYXJkIFFFTVUgZG9lc24ndCBlbXVsYXRlIEU2MTAgVkZzLiBTbywgUUVNVSBtaWdodCBlbXVsYXRlIGBpeGdiZXZmYCwgYnV0LCBpcyB0aGlzIGNvZGUgcGF0aCBmb3IgYGl4Z2JlX21hY19lNjEwX3ZmYCBhbmQgSHlwZXItVj8gVGhlIGZ1bmN0aW9uIGBpeGdiZXZmX2h2X2NoZWNrX21hY19saW5rX3ZmYCBpcyBvbmx5IGNhbGxlZCB3aGVuIHRoZSBNQUMgb3BlcmF0aW9ucyBhcmUgc2V0IHVwIGZvciBIeXBlci1WLlxuXG5JIG5lZWQgdG8gY29uZmlybSBpZiBRRU1VIGVtdWxhdGVzIGl0LCBidXQsIGl0J3MgaXJyZWxldmFudCwgYmVjYXVzZSB0aGUgY29kZSBpcyBIeXBlci1WIHNwZWNpZmljLiBUaGVyZWZvcmUsIHRoZSBwYXRjaCB0YXJnZXRzIGEgdmVyeSBzcGVjaWZpYywgbGlrZWx5IHVuLWZ1enphYmxlLCBzaXR1YXRpb24uIEkgc2hvdWxkIGNoZWNrIGBkcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9peGdiZXZmL3ZmLmNgIHRvIGJlIHN1cmUgaG93IGBpeGdiZXZmX2h2X2NoZWNrX21hY19saW5rX3ZmYCBpcyBhc3NpZ25lZC4gQnV0IGJhc2VkIG9uIHRoZSByZXN0cmljdGlvbnMsIHRoaXMgaXMgYWxtb3N0IGNlcnRhaW5seSBgV29ydGhGdXp6aW5nPWZhbHNlYC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTk5NjUsIk91dHB1dFRva2VucyI6NDcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo5NjksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjRUMTQ6MTk6NTcuMjcyMjg0NTM4WiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEwMzY2MzU1MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJpeGdiZXZmX2h2X2NoZWNrX21hY19saW5rX3ZmXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2l4Z2JldmZcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaXhnYmV2Zi92Zi5jPTkxOD1zdGF0aWMgczMyIGl4Z2JldmZfaHZfcmVhZF9saW5rc19lNjEwKHN0cnVjdCBpeGdiZV9odyAqaHcsIHUzMiAqbGlua3NfcmVnKVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaXhnYmV2Zi92Zi5jLTk0MS0vKipcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9peGdiZXZmL3ZmLmM6OTQyOiAqIGl4Z2JldmZfaHZfY2hlY2tfbWFjX2xpbmtfdmYgLSBjaGVjayBsaW5rXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaXhnYmV2Zi92Zi5jLTk0My0gKiBAaHc6IHBvaW50ZXIgdG8gcHJpdmF0ZSBoYXJkd2FyZSBzdHJ1Y3RcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2l4Z2JldmYvdmYuYy05NTAtICovXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaXhnYmV2Zi92Zi5jOjk1MTpzdGF0aWMgczMyIGl4Z2JldmZfaHZfY2hlY2tfbWFjX2xpbmtfdmYoc3RydWN0IGl4Z2JlX2h3ICpodyxcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9peGdiZXZmL3ZmLmMtOTUyLVxcdFxcdFxcdFxcdFxcdGl4Z2JlX2xpbmtfc3BlZWQgKnNwZWVkLFxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaXhnYmV2Zi92Zi5jPTExOTQ9c3RhdGljIGNvbnN0IHN0cnVjdCBpeGdiZV9tYWNfb3BlcmF0aW9ucyBpeGdiZXZmX2h2X21hY19vcHMgPSB7XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9peGdiZXZmL3ZmLmMtMTIwMC1cXHQuc2V0dXBfbGlua1xcdFxcdD0gaXhnYmV2Zl9zZXR1cF9tYWNfbGlua192ZixcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9peGdiZXZmL3ZmLmM6MTIwMTpcXHQuY2hlY2tfbGlua1xcdFxcdD0gaXhnYmV2Zl9odl9jaGVja19tYWNfbGlua192ZixcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9peGdiZXZmL3ZmLmMtMTIwMi1cXHQubmVnb3RpYXRlX2FwaV92ZXJzaW9uXFx0PSBpeGdiZXZmX2h2X25lZ290aWF0ZV9hcGlfdmVyc2lvbl92ZixcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjRUMTQ6MTk6NTcuMzc1OTU5NDI4WiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6ODc2OTY1MzAwMSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBteSBvd246XG5cbioqRGlnZ2luZyBpbnRvIHRoZSBpeGdiZXZmIERyaXZlcidzIE1BQyBPcGVyYXRpb25zKipcblxuQWxyaWdodCwgbGV0J3Mgc2VlLCBgaXhnYmV2Zl9odl9jaGVja19tYWNfbGlua192ZmAgaXMgZGVmaW5pdGVseSBwYXJ0IG9mIHRoYXQgYGl4Z2JldmZfaHZfbWFjX29wc2Agc3RydWN0dXJlLiBNeSBuZXh0IGxvZ2ljYWwgc3RlcCBpcyB0byB1bmRlcnN0YW5kIHRoZSBzY29wZSBhbmQgdXNhZ2Ugb2YgdGhhdCBgaXhnYmV2Zl9odl9tYWNfb3BzYCBzdHJ1Y3R1cmUgaXRzZWxmLiBJIG5lZWQgdG8gdHJhY2Ugd2hlcmUgaXQncyBiZWluZyBlbXBsb3llZCBpbiB0aGUgZHJpdmVyLiBLbm93aW5nIGhvdyBpdCdzIHVzZWQgd2lsbCBnaXZlIG1lIHRoZSBjb250ZXh0dWFsIGJhY2tncm91bmQgdG8gdW5kZXJzdGFuZCB0aGUgcHVycG9zZSBhbmQgZnVuY3Rpb24gb2YgdGhlIGBjaGVja19tYWNfbGlua192ZmAgZnVuY3Rpb24uIFRpbWUgdG8gZGl2ZSBkZWVwZXIgYW5kIHNlZSB3aGF0IEkgY2FuIGZpbmQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIyMjkyLCJPdXRwdXRUb2tlbnMiOjQzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjRUMTQ6MjA6MDYuMTQ1NjE1MzE5WiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEwMzg0MTEwMSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJpeGdiZXZmX2h2X21hY19vcHNcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaXhnYmV2ZlwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9peGdiZXZmL3ZmLmM9MTE3NT1zdGF0aWMgY29uc3Qgc3RydWN0IGl4Z2JlX21hY19vcGVyYXRpb25zIGl4Z2JldmZfbWFjX29wcyA9IHtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2l4Z2JldmYvdmYuYy0xMTkzLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2l4Z2JldmYvdmYuYzoxMTk0OnN0YXRpYyBjb25zdCBzdHJ1Y3QgaXhnYmVfbWFjX29wZXJhdGlvbnMgaXhnYmV2Zl9odl9tYWNfb3BzID0ge1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2l4Z2JldmYvdmYuYy0xMTk1LVxcdC5pbml0X2h3XFx0XFx0PSBpeGdiZXZmX2luaXRfaHdfdmYsXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9peGdiZXZmL3ZmLmM9MTIxOD1jb25zdCBzdHJ1Y3QgaXhnYmV2Zl9pbmZvIGl4Z2JldmZfODI1OTlfdmZfaHZfaW5mbyA9IHtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9peGdiZXZmL3ZmLmMtMTIxOS1cXHQubWFjID0gaXhnYmVfbWFjXzgyNTk5X3ZmLFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2l4Z2JldmYvdmYuYzoxMjIwOlxcdC5tYWNfb3BzID0gXFx1MDAyNml4Z2JldmZfaHZfbWFjX29wcyxcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9peGdiZXZmL3ZmLmMtMTIyMS19O1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaXhnYmV2Zi92Zi5jPTEyMjg9Y29uc3Qgc3RydWN0IGl4Z2JldmZfaW5mbyBpeGdiZXZmX1g1NDBfdmZfaHZfaW5mbyA9IHtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9peGdiZXZmL3ZmLmMtMTIyOS1cXHQubWFjID0gaXhnYmVfbWFjX1g1NDBfdmYsXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaXhnYmV2Zi92Zi5jOjEyMzA6XFx0Lm1hY19vcHMgPSBcXHUwMDI2aXhnYmV2Zl9odl9tYWNfb3BzLFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2l4Z2JldmYvdmYuYy0xMjMxLX07XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9peGdiZXZmL3ZmLmM9MTIzOD1jb25zdCBzdHJ1Y3QgaXhnYmV2Zl9pbmZvIGl4Z2JldmZfWDU1MF92Zl9odl9pbmZvID0ge1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2l4Z2JldmYvdmYuYy0xMjM5LVxcdC5tYWMgPSBpeGdiZV9tYWNfWDU1MF92ZixcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9peGdiZXZmL3ZmLmM6MTI0MDpcXHQubWFjX29wcyA9IFxcdTAwMjZpeGdiZXZmX2h2X21hY19vcHMsXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaXhnYmV2Zi92Zi5jLTEyNDEtfTtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2l4Z2JldmYvdmYuYz0xMjQ4PWNvbnN0IHN0cnVjdCBpeGdiZXZmX2luZm8gaXhnYmV2Zl9YNTUwRU1feF92Zl9odl9pbmZvID0ge1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2l4Z2JldmYvdmYuYy0xMjQ5LVxcdC5tYWMgPSBpeGdiZV9tYWNfWDU1MEVNX3hfdmYsXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaXhnYmV2Zi92Zi5jOjEyNTA6XFx0Lm1hY19vcHMgPSBcXHUwMDI2aXhnYmV2Zl9odl9tYWNfb3BzLFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2l4Z2JldmYvdmYuYy0xMjUxLX07XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9peGdiZXZmL3ZmLmM9MTI2Mz1jb25zdCBzdHJ1Y3QgaXhnYmV2Zl9pbmZvIGl4Z2JldmZfZTYxMF92Zl9odl9pbmZvID0ge1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2l4Z2JldmYvdmYuYy0xMjY0LVxcdC5tYWMgICAgICAgICAgICA9IGl4Z2JlX21hY19lNjEwX3ZmLFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2l4Z2JldmYvdmYuYzoxMjY1OlxcdC5tYWNfb3BzICAgICAgICA9IFxcdTAwMjZpeGdiZXZmX2h2X21hY19vcHMsXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaXhnYmV2Zi92Zi5jLTEyNjYtfTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjRUMTQ6MjA6MDYuMjQ5NDYyMTc5WiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTQxOTU3ODM5OTIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBzdW1tYXJ5LCB0YWtpbmcgb24gdGhlIHBlcnNvbmEgeW91J3ZlIGRlc2NyaWJlZDpcblxuKipBbmFseXppbmcgdGhlIENvbnRleHQgb2YgYGl4Z2JldmZfbWFpbi5jYCBVc2FnZSoqXG5cbkFscmlnaHQsIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzLCBiYXNlZCBvbiB0aGUgZmlsZSBuYW1lLCB0aGF0IHRoZXNlIGFyZSBwcm9iYWJseSBjZW50cmFsIGNvbXBvbmVudHMgdXNlZCB3aXRoaW4gdGhlIGBpeGdiZXZmX21haW4uY2AgZmlsZS4gS25vd2luZyB0aGF0IGZpbGUgYW5kIGl0cyBjb250ZXh0IGlzIGNydWNpYWwgZm9yIHVuZGVyc3RhbmRpbmcgKmhvdyogdGhlc2UgZWxlbWVudHMgYXJlIGJlaW5nIHVzZWQuIEFyZSB3ZSB0YWxraW5nIGFib3V0IGRhdGEgc3RydWN0dXJlcywgZnVuY3Rpb24gY2FsbHMsIG9yIG1heWJlIHNvbWUga2V5IHZhcmlhYmxlcyBvciBtYWNyb3MgdGhhdCBkZWZpbmUgY29yZSBmdW5jdGlvbmFsaXRpZXMgb2YgdGhlIEludGVsIFg3MTAgVmlydHVhbCBGdW5jdGlvbiBkcml2ZXI/IE15IG1pbmQgaW1tZWRpYXRlbHkgc3RhcnRzIHRvIHJ1biB0aHJvdWdoIHRoZSBjb21tb24gYXJlYXMgd2l0aGluIGRyaXZlciBjb2RlOiBpbml0aWFsaXphdGlvbiwgcGFja2V0IHByb2Nlc3NpbmcsIGludGVycnVwdCBoYW5kbGluZywgb3IgcmVzb3VyY2UgbWFuYWdlbWVudC4gR2l2ZW4gdGhlIHRlcm0sIEknZCBleHBlY3QgdGhpcyBjb2RlIHRvIHJlbGF0ZSB0byB0aGUgVmlydHVhbCBGdW5jdGlvbiBzaWRlIG9mIHRoaW5ncy4gSXQgYWxsIGRlcGVuZHMgb24gaG93IGBpeGdiZXZmX21haW4uY2AgaW50ZWdyYXRlcyB3aXRoIHRoZSBvdmVyYWxsIGl4Z2JlIGRyaXZlciBhcmNoaXRlY3R1cmUgYW5kIHRoZSBWRidzIGNvbW11bmljYXRpb24gZmxvdy4gTXkgbmV4dCBzdGVwIHdvdWxkIGJlIHRvIHJldmlldyB0aGUgYXNzb2NpYXRlZCBjb2RlIHN1cnJvdW5kaW5nIHRoZXNlIGVsZW1lbnRzIHdpdGhpbiB0aGF0IHNwZWNpZmljIGZpbGUgdG8gY29uZmlybSBteSBleHBlY3RhdGlvbnMuIEkgbmVlZCB0byBzZWUgdGhlIGltcGxlbWVudGF0aW9uIGRldGFpbHMgdG8gZ2V0IHRoZSB3aG9sZSBwaWN0dXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMzUyMywiT3V0cHV0VG9rZW5zIjo0OCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI0VDE0OjIwOjIwLjQ0NTI0ODk0MVoiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDI1MjUwNDUyLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIml4Z2JldmZfZTYxMF92Zl9odl9pbmZvXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2l4Z2JldmZcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaXhnYmV2Zi9peGdiZXZmLmg9NDMyPWV4dGVybiBjb25zdCBzdHJ1Y3QgaXhnYmV2Zl9pbmZvIGl4Z2JldmZfWDU1MEVNX3hfdmZfaHZfaW5mbztcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9peGdiZXZmL2l4Z2JldmYuaDo0MzM6ZXh0ZXJuIGNvbnN0IHN0cnVjdCBpeGdiZXZmX2luZm8gaXhnYmV2Zl9lNjEwX3ZmX2h2X2luZm87XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaXhnYmV2Zi9peGdiZXZmLmgtNDM0LVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaXhnYmV2Zi9peGdiZXZmX21haW4uYz00ND1zdGF0aWMgY29uc3Qgc3RydWN0IGl4Z2JldmZfaW5mbyAqaXhnYmV2Zl9pbmZvX3RibFtdID0ge1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaXhnYmV2Zi9peGdiZXZmX21haW4uYy01NC1cXHRbYm9hcmRfZTYxMF92Zl0gICAgICAgICA9IFxcdTAwMjZpeGdiZXZmX2U2MTBfdmZfaW5mbyxcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9peGdiZXZmL2l4Z2JldmZfbWFpbi5jOjU1OlxcdFtib2FyZF9lNjEwX3ZmX2h2XSAgICAgID0gXFx1MDAyNml4Z2JldmZfZTYxMF92Zl9odl9pbmZvLFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2l4Z2JldmYvaXhnYmV2Zl9tYWluLmMtNTYtfTtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2l4Z2JldmYvdmYuYz0xMjU4PWNvbnN0IHN0cnVjdCBpeGdiZXZmX2luZm8gaXhnYmV2Zl9lNjEwX3ZmX2luZm8gPSB7XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9peGdiZXZmL3ZmLmMtMTI2Mi1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9peGdiZXZmL3ZmLmM6MTI2Mzpjb25zdCBzdHJ1Y3QgaXhnYmV2Zl9pbmZvIGl4Z2JldmZfZTYxMF92Zl9odl9pbmZvID0ge1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2l4Z2JldmYvdmYuYy0xMjY0LVxcdC5tYWMgICAgICAgICAgICA9IGl4Z2JlX21hY19lNjEwX3ZmLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNFQxNDoyMDoyMC44NzA1MDY3NzNaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NzI1OTY4NTYzMiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBwcmVzZW50ZWQgaW4gdGhlIGZpcnN0IHBlcnNvbjpcblxuKipJbnZlc3RpZ2F0aW5nIHRoZSBQQ0kgRGV2aWNlIElEIEFzc29jaWF0aW9uKipcblxuQWxyaWdodCwgc28gYGJvYXJkX2U2MTBfdmZfaHZgIGlzIGxpc3RlZCBpbiB0aGUgUENJIGRldmljZSBJRCB0YWJsZS4gVGhhdCdzIGEgZ29vZCBzdGFydGluZyBwb2ludC4gTXkgbmV4dCBtb3ZlIGlzIGNsZWFyOiBJIG5lZWQgdG8gZGlnIGludG8gYGl4Z2JldmZfcGNpX3RibGAgdG8gdW5kZXJzdGFuZCBob3cgdGhpcyBJRCBpcyBtYXBwZWQgd2l0aGluIHRoZSBjb250ZXh0IG9mIHRoZSBkcml2ZXIuIExldCdzIGhlYWQgb3ZlciB0byBgaXhnYmV2Zl9tYWluLmNgIGFuZCB0YWtlIGEgbG9vay4gSSdtIGFzc3VtaW5nIHRoYXQgdGhlIGRldmljZSBJRCB0YWJsZSB3aXRoaW4gYGl4Z2JldmZfcGNpX3RibGAgd2lsbCBjb250YWluIGFsbCB0aGUgbmVjZXNzYXJ5IGluZm9ybWF0aW9uIGFib3V0IHRoYXQgUENJIGRldmljZSwgc28gSSBjYW4gYXNzb2NpYXRlIHRoZSBzcGVjaWZpYyBgYm9hcmRfZTYxMF92Zl9odmAgYW5kIGludmVzdGlnYXRlIGl0cyBzcGVjaWZpYyByZXF1aXJlbWVudHMuIEkgZXhwZWN0IHRvIGJlIGxvb2tpbmcgZm9yIGFzc29jaWF0ZWQgc3RydWN0dXJlcywgb3Igc3BlY2lmaWMgZnVuY3Rpb24gY2FsbHMgdGhhdCB0cmlnZ2VyIGJhc2VkIG9uIHRoaXMgZGV2aWNlIElELiBIb3BlZnVsbHksIEkgY2FuIGZpbmQgd2hhdCBjb25maWd1cmF0aW9ucyBhcmUgaW4gZWZmZWN0IGZvciB0aGlzIHBhcnRpY3VsYXIgZGV2aWNlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNDMzMiwiT3V0cHV0VG9rZW5zIjo0MywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQ5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI0VDE0OjIwOjI4LjEzMDE5NTE4NVoiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjQyNTk2MDQ0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImJvYXJkX2U2MTBfdmZfaHZcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaXhnYmV2ZlwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9peGdiZXZmL2l4Z2JldmYuaD0zOTk9ZW51bSBpeGdiZXZmX2JvYXJkcyB7XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9peGdiZXZmL2l4Z2JldmYuaC00MDktXFx0Ym9hcmRfZTYxMF92ZixcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9peGdiZXZmL2l4Z2JldmYuaDo0MTA6XFx0Ym9hcmRfZTYxMF92Zl9odixcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9peGdiZXZmL2l4Z2JldmYuaC00MTEtfTtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2l4Z2JldmYvaXhnYmV2Zl9tYWluLmM9NDQ9c3RhdGljIGNvbnN0IHN0cnVjdCBpeGdiZXZmX2luZm8gKml4Z2JldmZfaW5mb190YmxbXSA9IHtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2l4Z2JldmYvaXhnYmV2Zl9tYWluLmMtNTQtXFx0W2JvYXJkX2U2MTBfdmZdICAgICAgICAgPSBcXHUwMDI2aXhnYmV2Zl9lNjEwX3ZmX2luZm8sXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaXhnYmV2Zi9peGdiZXZmX21haW4uYzo1NTpcXHRbYm9hcmRfZTYxMF92Zl9odl0gICAgICA9IFxcdTAwMjZpeGdiZXZmX2U2MTBfdmZfaHZfaW5mbyxcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9peGdiZXZmL2l4Z2JldmZfbWFpbi5jLTU2LX07XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9peGdiZXZmL2l4Z2JldmZfbWFpbi5jPTY2PXN0YXRpYyBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCBpeGdiZXZmX3BjaV90YmxbXSA9IHtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2l4Z2JldmYvaXhnYmV2Zl9tYWluLmMtOTYtXFx0XFx0XFx0XFx0UENJX0FOWV9JRCwgSVhHQkVfU1VCREVWX0lEX0U2MTBfVkZfSFYpLFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2l4Z2JldmYvaXhnYmV2Zl9tYWluLmM6OTc6XFx0XFx0LmRyaXZlcl9kYXRhID0gYm9hcmRfZTYxMF92Zl9odixcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9peGdiZXZmL2l4Z2JldmZfbWFpbi5jLTk4LVxcdH0sIHtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjRUMTQ6MjA6MjguMzcyODAwNTc5WiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjIxOTEzNDg2NzU5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFzc2Vzc21lbnQgb2YgdGhlIEZ1enphYmlsaXR5IG9mIHRoaXMgaXhnYmV2ZiBQYXRjaCoqXG5cbk9rYXksIGxldCBtZSBicmVhayB0aGlzIGRvd24uIE15IGluaXRpYWwgdGhvdWdodCBpcyB0aGF0IHRoZSBkcml2ZXIgYmluZHMgdG8gYSBzcGVjaWZpYyBQQ0kgZGV2aWNlIElELiBUaGF0J3MgdGhlIGtleS4gRmlyc3QsIGlzIHRoaXMgZGV2aWNlIGVtdWxhdGVkIGluIFFFTVU/IE5vLiBPa2F5LCB0aGF0IHJ1bGVzIG91dCBzdGFuZGFyZCBRRU1VLWJhc2VkIGZ1enppbmcuIE5vdywgY2FuIHN5emthbGxlciBmdXp6IHRoaXM/IEkgbmVlZCB0byB0aGluayB0aGlzIHRocm91Z2guXG5cbldhaXQsIGRvZXNuJ3Qgc3l6a2FsbGVyIGhhdmUgdGhhdCBtZWNoYW5pc20gdXNpbmcgYHN5el9wY2lfc2V0dXBgIGFuZCBgc3l6X3BjaV9kZXZpY2VgPyBSaWdodCEgU3l6a2FsbGVyIHVzZXMgYHN5el9wY2lfZGV2aWNlYCB0bywgZXNzZW50aWFsbHksIGluamVjdCBhcmJpdHJhcnkgUENJIGRldmljZXMgaW50byB0aGUga2VybmVsIHRocm91Z2ggdmlydHVhbCBoYXJkd2FyZSBpbnRlcmZhY2VzLiBUaGlzIHNvdW5kcyBwcm9taXNpbmcuIFNvLCBzeXprYWxsZXIgKmRvZXMqIGhhdmUgYSBQQ0kgZnV6emVyIHRoYXQgY2FuIGVtdWxhdGUgYSBQQ0kgZGV2aWNlIHdpdGggYSBzcGVjaWZpYyB2ZW5kb3IgYW5kIGRldmljZSBJRC4gSXQgY2FuIHJlc3BvbmQgdG8gY29uZmlnIGFuZCBtZW1vcnkgc3BhY2UgYWNjZXNzZXMsIHdoaWNoIGlzIHdoYXQgSSBuZWVkLlxuXG5BbHJpZ2h0LCB0aGUgbmV4dCBzdGVwIGlzIHRvIHNlZSBpZiBzeXprYWxsZXIncyBQQ0kgZnV6emVyICpjYW4qIHJlYWNoIHRoZSBjb2RlIG1vZGlmaWVkIGJ5IHRoaXMgcGF0Y2guIFRoZSBwYXRjaCBtb2RpZmllcyBgaXhnYmV2Zl9nZXRfbGlua19rc2V0dGluZ3NgIGFuZCBgaXhnYmV2Zl9odl9jaGVja19tYWNfbGlua192ZmAuIGBpeGdiZXZmX2dldF9saW5rX2tzZXR0aW5nc2AgaXMgcmVhY2hlZCB0aHJvdWdoIGV0aHRvb2wsIGFuZCBgaXhnYmV2Zl9odl9jaGVja19tYWNfbGlua192ZmAgdmlhIGBody1cdTAwM2VtYWMub3BzLmNoZWNrX2xpbmtgLiBOb3csIGlmIHN5emthbGxlciBlbXVsYXRlcyB0aGUgUENJIGRldmljZSwgdGhlIGBpeGdiZXZmYCBkcml2ZXIgKnNob3VsZCogcHJvYmUgaXQsIHJpZ2h0P1xuXG5CdXQgYSBjcnVjaWFsIHF1ZXN0aW9uIGNvbWVzIHVwOiBkb2VzIGBpeGdiZXZmYCByZXF1aXJlIE1TSS1YPyBBaCwgdGhlIEtjb25maWcgc2F5cyBpdCAqZG9lcyouIFRoYXQgY291bGQgYmUgYSBzdHVtYmxpbmcgYmxvY2suIFN5emthbGxlcidzIFBDSSBmdXp6ZXIgbWlnaHQgbm90IGZ1bGx5IHN1cHBvcnQgTVNJLVggb3IgY29tcGxleCBETUEuIEhvd2V2ZXIsIG9mdGVuIGl0IGNhbiBnZXQgcGFzdCB0aGUgcHJvYmUgZnVuY3Rpb24gYW5kIHJlZ2lzdGVyIHRoZSBuZXRkZXYuIEl04oCZcyB3b3J0aCBleHBsb3JpbmcuXG5cbk5vdywgSSBoYXZlIHRvIGNvbnNpZGVyIHRoZSBzcGVjaWZpYyBwcm9tcHQgaW5zdHJ1Y3Rpb25zLiBJdCBzYXlzIHRvIHJldHVybiBgV29ydGhGdXp6aW5nPWZhbHNlYCBpZiB0aGUgcGF0Y2ggaW52b2x2ZXMgY29kZSBpbiBcInZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzLi4uIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VXCIuXG5cbklzIGBpeGdiZXZmYCBvbmUgb2YgdGhvc2U/IE5vLCBub3QgcmVhbGx5LiBJdCdzIGEgc3RhbmRhcmQgRXRoZXJuZXQgTklDIFZpcnR1YWwgRnVuY3Rpb24gKFZGKSBkcml2ZXIsIG5vdCBzb21ldGhpbmcgc3BlY2lhbGl6ZWQgbGlrZSBhIFNtYXJ0TklDIG9yIEdQVS4gQnV0LCBkb2VzIGl0IHJlcXVpcmUgcGh5c2ljYWwgaGFyZHdhcmUgbm90IGVtdWxhdGVkIGluIFFFTVU/IFllcywgdGhhdCdzIHRoZSBydWIhIGBpeGdiZXZmYCBpcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cblxuQnV0IHdhaXQsIGlmIGBpeGdiZXZmYCBpc24ndCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLCBhbmQgc3l6a2FsbGVyJ3MgUENJIGZ1enplciBpcyB0aGUgb25seSB3YXkgdG8gcmVhY2ggaXQsIGRvZXNuJ3QgdGhhdCBmYWxsIHVuZGVyIFwiaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZVwiPyBCdXQsIG15IFBDSSBmdXp6ZXIgKmlzKiBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSEgQnV0LCBpdCdzIGEgZ2VuZXJpYyBmdXp6ZXIsIG5vdCBhIGZ1bGwgZGV2aWNlIGVtdWxhdG9yLiBJdOKAmXMganVzdCBmZWVkaW5nIHJhbmRvbSBieXRlcyB0byBNTUlPL1BJTy9Db25maWcgc3BhY2UgcmVhZHMuIEl0IGlzIE5PVCBjb21wbGV4IGxpa2UsIHNheSwgYW4gbWx4c3cgb3IgYW4gQU1EIEdQVSBkcml2ZXIhXG5cblRoZSBwcm9tcHQgc3BlY2lmaWNhbGx5IGxpc3RzIHRob3NlIGNvbXBsZXggZGV2aWNlczogXCJtbHhzdywgcGRzX2NvcmUsIHFlZCwgaW9uaWMsIGFtZGdwdVwiLiBgaXhnYmV2ZmAgaXMgYW4gSW50ZWwgRXRoZXJuZXQgVkYuIEl04oCZcyBub3QgaW4gdGhhdCBjbGFzcy5cblxuRmluYWxseSwgSSBuZWVkIHRvIGNoZWNrIHN5emthbGxlciB0byBzZWUgaWYgdGhlcmUgYXJlIGFueSBleGlzdGluZyBkZXNjcmlwdGlvbnMuIExldCBtZSBzZWUuLi5cblxuXG4iLCJJbnB1dFRva2VucyI6MjUxNjEsIk91dHB1dFRva2VucyI6MjYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo3MDUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjRUMTQ6MjA6NTAuMjg2MjkwOTE4WiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2ODczMzQ0NywiRXJyb3IiOiJubyBtYXRjaGVzIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiaXhnYmV2ZlwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJzeXMvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcImVycm9yXCI6IFwibm8gbWF0Y2hlc1wiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNFQxNDoyMDo1MC4zNTUwMzI4MjVaIiwiU2VxIjoxNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MjQ5MTUwOTIxODQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHlzaXMgb2YgdGhlIFBhdGNoOiBXb3J0aEZ1enppbmc9ZmFsc2UqKlxuXG5Pa2F5LCBzbyB0aGUgaW5pdGlhbCB0aG91Z2h0IHdhcyB0byB1c2UgYGRlZmF1bHRfYXBpOmdyZXBwZXJgIHRvIHNlYXJjaCBmb3IgcmVsYXRlZCBjb2RlLCBidXQgSSBxdWlja2x5IHJlYWxpemVkIEkgY2FuJ3Qgc2VhcmNoIGBzeXMvYCBvciBleHByZXNzaW9ucyBjb250YWluaW5nIGBzeXpfYCBiZWNhdXNlIG9mIHRob3NlIHJlc3RyaWN0aW9ucyBpbiB0aGUgcHJvbXB0LiBJIGFsc28gZG9uJ3QgaGF2ZSB0aGUgYHJlYWQtc3l6LXNwZWNgIG9yIGBzeXotZ3JlcHBlcmAgdG9vbHMsIHNvIEknbSBsaW1pdGVkIHRvIGBncmVwcGVyYCwgYGNvZGVzZWFyY2gtZGlyLWluZGV4YCwgYHJlYWQtZmlsZWAsIGFuZCBgc2V0LXJlc3VsdHNgLiBObyBkaWNlIG9uIHRoZSBzeXprYWxsZXIgc2lkZS5cblxuTm93LCBsZXQncyBnZXQgYmFjayB0byB0aGUgY29yZSBxdWVzdGlvbjogSXMgdGhpcyB3b3J0aCBmdXp6aW5nPyBJIG5lZWQgdG8gZmlndXJlIG91dCBpZiB0aGlzIGNvZGUgcGF0aCBpcyByZWFjaGFibGUgaW4gYSB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudCBsaWtlIFFFTVUgb3IgR0NFLiBUaGUgcHJvbXB0IGlzIHByZXR0eSBjbGVhcjogaXQncyBub3Qgd29ydGggZnV6emluZyBpZiB0aGUgY29kZSBwYXRoIGlzIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdGhvc2UgZW52aXJvbm1lbnRzLlxuXG5UaGUgcGF0Y2ggbWVudGlvbnMgYGl4Z2JldmZgLCB3aGljaCBpbml0aWFsbHkgbWFkZSBtZSB0aGluayBhYm91dCB2ZW5kb3Itc3BlY2lmaWMgaGFyZHdhcmUuIEJ1dCBpdCdzIG5vdCAqdGVjaG5pY2FsbHkqIGEgdmVuZG9yLXNwZWNpZmljIE5JQywgaXQncyBhIHN0YW5kYXJkIE5JQyB0aGF0IGhhcyBhIFZGLiBCdXQsIGRvZXMgaXQgcmVxdWlyZSBwaHlzaWNhbCBoYXJkd2FyZT8gVHVybnMgb3V0LCBRRU1VIGVtdWxhdGVzIGBpeGdiZWAgKFBGKSwgYGUxMDAwYCwgYGUxMDAwZWAsIGBpZ2JgLCBgaWdidmZgLCBidXQgKm5vdCogYGl4Z2JldmZgLiBTbywgaXQgZmFsbHMgdW5kZXIgdGhlIGNhdGVnb3J5IG9mIGhhcmR3YXJlICpub3QqIGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG5cblRoZW4gSSBoYWQgdG8gY29uc2lkZXIgaWYgc3l6a2FsbGVyIGNvdWxkIGZvcmNlIGl0LiBDb3VsZCB0aGUgUENJIGZ1enplciBzb21laG93IGZha2UgdGhlIGRldmljZSBhbmQgcGFzcyB0aGUgcHJvYmUgZnVuY3Rpb24/IEV2ZW4gaWYgaXQgY291bGQsIHRoZSBwcm9tcHQgZXhwbGljaXRseSBzYXlzIHRoYXQgaXQgaXMgbm90IHdvcnRoIGZ1enppbmcgaWYgaXQgcmVxdWlyZXMgcGh5c2ljYWwgaGFyZHdhcmUgdGhhdCBpcyBub3QgZW11bGF0ZWQgaW4gUUVNVS5cblxuVGhlIHBhdGNoIHNwZWNpZmljYWxseSB0YXJnZXRzIEh5cGVyLVYgRTYxMCBWRnMuIEl0J3MgcmVhZGluZyBsaW5rIHN0YXR1cyBmcm9tIGFuIGVtdWxhdGVkIFBDSSBjb25maWcgc3BhY2UuIFRoaXMgaXMgdmVyeSBIeXBlci1WIHNwZWNpZmljLlxuXG5UaGUgcHJvYmUgd2lsbCBub3QgZXZlbiBzdWNjZWVkIGluIFFFTVUgYmVjYXVzZSB0aGUgZGV2aWNlIGlzIG5vdCBwcmVzZW50LCBhbmQgdGhlIGRyaXZlciBpcyBub3QgbG9hZGVkLiBJZiB0aGUgZHJpdmVyIGlzIG5vdCBsb2FkZWQsIHRoZXJlIHdpbGwgYmUgbm8gYG5ldF9kZXZpY2VgLCBhbmQgdGhlIGZ1bmN0aW9uIGBpeGdiZXZmX2dldF9saW5rX2tzZXR0aW5nc2AgY2Fubm90IGV2ZW4gYmUgcmVhY2hlZC5cblxuU28sIHRoaXMgRTYxMCBWRiBiZWhhdmlvciBpcyBub3Qgc29mdHdhcmUtZW11bGF0ZWQgaW4gUUVNVSwgdW5saWtlIHRoaW5ncyBsaWtlIGEgVVNCIGdhZGdldCBvciBgbWFjODAyMTFfaHdzaW1gLiBJdCdzIGEgSHlwZXItViBzcGVjaWZpYyBkZXZpY2UgdGhhdCdzIG5vdCBwcmVzZW50IGluIFFFTVUsIG1ha2luZyBpdCB1bnJlYWNoYWJsZS5cblxuTGV0IG1lIGNvbmZpcm0gdGhhdCB3aXRoIGEgcXVpY2sgY2hlY2sgb24gdGhlIFFFTVUgc291cmNlLiBXaGlsZSBgaWdidmZgICppcyogdGhlcmUsIHRoZXJlJ3Mgbm8gbmF0aXZlIGBpeGdiZXZmYCBzdXBwb3J0LiBXYWl0LCBRRU1VJ3MgYGlnYmAgc3VwcG9ydHMgU1ItSU9WLiBRRU1VJ3MgYGl4Z2JlYCBpbXBsZW1lbnRhdGlvbiAqbWlnaHQqIG5vdC4gVGhlIGtleSBoZXJlIGlzIHRoZSBwYXRjaCBpcyB0YWxraW5nIGFib3V0IGBpeGdiZV9tYWNfZTYxMF92ZmAgd2hpY2ggaGFzIGEgc3BlY2lmaWMgUENJIGRldmljZSBJRCBgSVhHQkVfREVWX0lEX0U2MTBfVkZfSFZgIHRoYXQgb25seSBleGlzdHMgb24gSHlwZXItVi5cblxuTGV0J3MgbG9vayBhdCB0aGUgY3JpdGljYWwgY29kZSBzbmlwcGV0IGluIHRoZSBwYXRjaCBhZ2Fpbi5cbmBgYGNcbitcdGlmIChody1cdTAwM2VtYWMudHlwZSA9PSBpeGdiZV9tYWNfZTYxMF92Zikge1xuK1x0XHRzcGluX2xvY2tfYmgoXHUwMDI2YWRhcHRlci1cdTAwM2VtYnhfbG9jayk7XG4rXHRcdGh3LVx1MDAzZW1hYy5nZXRfbGlua19zdGF0dXMgPSB0cnVlO1xuK1x0XHRody1cdTAwM2VtYWMub3BzLmNoZWNrX2xpbmsoaHcsIFx1MDAyNmFkYXB0ZXItXHUwMDNlbGlua19zcGVlZCxcbitcdFx0XHRcdCAgICAgICBcdTAwMjZhZGFwdGVyLVx1MDAzZWxpbmtfdXAsIGZhbHNlKTtcbitcdFx0c3Bpbl91bmxvY2tfYmgoXHUwMDI2YWRhcHRlci1cdTAwM2VtYnhfbG9jayk7XG4rXHR9XG5gYGBcbkFuZCBob3cgdGhlIGBpeGdiZXZmX2h2X3JlYWRfbGlua3NfZTYxMGAgYWNjZXNzZXMgdGhlIGVtdWxhdGVkIFBDSSBjb25maWcgc3BhY2UuXG5gYGBjXG4rXHRpZiAoIUlTX0VOQUJMRUQoQ09ORklHX1BDSV9NTUNPTkZJRykpIHtcbitcdFx0ZGV2X2Vycl9vbmNlKFx1MDAyNmFkYXB0ZXItXHUwMDNlcGRldi1cdTAwM2VkZXYsXG4rXHRcdFx0ICAgICBcImNhbm5vdCByZWFkIGxpbmsgc3RhdHVzLCBQQ0lfTU1DT05GSUcgaXMgcmVxdWlyZWQgZm9yIEh5cGVyLVZcXG5cIik7XG4rXHRcdHJldHVybiAtRU9QTk9UU1VQUDtcbitcdH1cbitcbitcdGZvciAoaW50IGkgPSAwOyBpIFx1MDAzYyBJWEdCRV9IVl9MSU5LX1NUQVRVU19TSVpFOyBpKyspIHtcbitcdFx0aW50IHJldCA9IHBjaV9yZWFkX2NvbmZpZ19ieXRlKGFkYXB0ZXItXHUwMDNlcGRldixcbitcdFx0XHRcdFx0ICAgICAgIElYR0JFX0hWX0xJTktfU1RBVFVTX09GRlNFVCArIGksXG4rXHRcdFx0XHRcdCAgICAgICBcdTAwMjZkYXRhW2ldKTtcbmBgYFxuSXQncyByZWFkaW5nIGZyb20gUENJIGNvbmZpZyBzcGFjZSBvZmZzZXQgMHgyMDkuIFRoaXMgaXMgKmRlZmluaXRlbHkqIEh5cGVyLVYgc3BlY2lmaWMgYW5kIHVucmVhY2hhYmxlIGluIHN0YW5kYXJkIFFFTVUgb3IgR0NFLlxuXG4iLCJJbnB1dFRva2VucyI6MjY2NzUsIk91dHB1dFRva2VucyI6MzksIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNjI4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI0VDE0OjIxOjE1LjI3MDEyNjkwOVoiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTAwMzA2NjQwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIml4Z2JldmZfcHJvYmVcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaXhnYmV2ZlwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9peGdiZXZmL2l4Z2JldmZfbWFpbi5jPTQ1NjE9c3RhdGljIHZvaWQgaXhnYmV2Zl9hc3NpZ25fbmV0ZGV2X29wcyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaXhnYmV2Zi9peGdiZXZmX21haW4uYy00NTY4LS8qKlxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2l4Z2JldmYvaXhnYmV2Zl9tYWluLmM6NDU2OTogKiBpeGdiZXZmX3Byb2JlIC0gRGV2aWNlIEluaXRpYWxpemF0aW9uIFJvdXRpbmVcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9peGdiZXZmL2l4Z2JldmZfbWFpbi5jLTQ1NzAtICogQHBkZXY6IFBDSSBkZXZpY2UgaW5mb3JtYXRpb24gc3RydWN0XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9peGdiZXZmL2l4Z2JldmZfbWFpbi5jLTQ1NzQtICpcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9peGdiZXZmL2l4Z2JldmZfbWFpbi5jOjQ1NzU6ICogaXhnYmV2Zl9wcm9iZSBpbml0aWFsaXplcyBhbiBhZGFwdGVyIGlkZW50aWZpZWQgYnkgYSBwY2lfZGV2IHN0cnVjdHVyZS5cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9peGdiZXZmL2l4Z2JldmZfbWFpbi5jLTQ1NzYtICogVGhlIE9TIGluaXRpYWxpemF0aW9uLCBjb25maWd1cmluZyBvZiB0aGUgYWRhcHRlciBwcml2YXRlIHN0cnVjdHVyZSxcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2l4Z2JldmYvaXhnYmV2Zl9tYWluLmMtNDU3OC0gKiovXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaXhnYmV2Zi9peGdiZXZmX21haW4uYzo0NTc5OnN0YXRpYyBpbnQgaXhnYmV2Zl9wcm9iZShzdHJ1Y3QgcGNpX2RldiAqcGRldiwgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgKmVudClcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9peGdiZXZmL2l4Z2JldmZfbWFpbi5jLTQ1ODAte1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaXhnYmV2Zi9peGdiZXZmX21haW4uYz00OTE4PXN0YXRpYyBzdHJ1Y3QgcGNpX2RyaXZlciBpeGdiZXZmX2RyaXZlciA9IHtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2l4Z2JldmYvaXhnYmV2Zl9tYWluLmMtNDkyMC1cXHQuaWRfdGFibGVcXHQ9IGl4Z2JldmZfcGNpX3RibCxcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9peGdiZXZmL2l4Z2JldmZfbWFpbi5jOjQ5MjE6XFx0LnByb2JlXFx0XFx0PSBpeGdiZXZmX3Byb2JlLFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2l4Z2JldmYvaXhnYmV2Zl9tYWluLmMtNDkyMi1cXHQucmVtb3ZlXFx0XFx0PSBpeGdiZXZmX3JlbW92ZSxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjRUMTQ6MjE6MTUuMzcwNDM3ODk5WiIsIlNlcSI6MTcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjc0NDMyOTA1NzAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBQb3RlbnRpYWwgZm9yIFN5emthbGxlcidzIFBDSSBEZXZpY2UgRmFraW5nKipcblxuT2theSwgc28gaWYgc3l6a2FsbGVyIGlzIHN1Y2Nlc3NmdWxseSBmYWtpbmcgYSBQQ0kgZGV2aWNlLCB0aGVuLCBhcyBleHBlY3RlZCwgdGhlIGBpeGdiZXZmX3Byb2JlYCBmdW5jdGlvbiB3aWxsIGJlIHRyaWdnZXJlZC4gVGhlIGNyaXRpY2FsIHF1ZXN0aW9uIG5vdyBpcywgd2lsbCBgaXhnYmV2Zl9wcm9iZWAgYWN0dWFsbHkgKnN1Y2NlZWQqIGluIHRoaXMgc2NlbmFyaW8gb2YgaW50ZXJhY3Rpbmcgd2l0aCBhIGZha2VkIGRldmljZT8gVGhpcyBpcyB0aGUgY3J1eCBvZiB0aGUgbWF0dGVyLiBXZSBoYXZlIHRvIGFuYWx5emUgdGhlIGNvZGUgdG8gdW5kZXJzdGFuZCB0aGUgZGVwZW5kZW5jaWVzIGFuZCBhc3N1bXB0aW9ucyBvZiBgaXhnYmV2Zl9wcm9iZWAuIExldCdzIGRpZyBpbnRvIHRoZSBgaXhnYmV2Zl9wcm9iZWAgZnVuY3Rpb24gYW5kIHNlZSB3aGF0IGl0IGV4cGVjdHMgZnJvbSB0aGUgUENJIGRldmljZSB0byBkZXRlcm1pbmUgaWYgYSBmYWtlZCBkZXZpY2UgY2FuIHNhdGlzZnkgdGhvc2UgcmVxdWlyZW1lbnRzLiBUaGlzIGlzIHdoZXJlIHRoZSB2dWxuZXJhYmlsaXRpZXMgbWlnaHQgbGllLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyOTk1NCwiT3V0cHV0VG9rZW5zIjo1MiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjUyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI0VDE0OjIxOjIyLjgxMzczMTQ4OVoiLCJTZXEiOjE4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NTY3NjcxLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2l4Z2JldmYvaXhnYmV2Zl9tYWluLmNcIixcbiAgXCJGaXJzdExpbmVcIjogNDU3OSxcbiAgXCJMaW5lQ291bnRcIjogMTAwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjQ1Nzk6XFx0c3RhdGljIGludCBpeGdiZXZmX3Byb2JlKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCAqZW50KVxcbjQ1ODA6XFx0e1xcbjQ1ODE6XFx0XFx0c3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldjtcXG40NTgyOlxcdFxcdHN0cnVjdCBpeGdiZXZmX2FkYXB0ZXIgKmFkYXB0ZXIgPSBOVUxMO1xcbjQ1ODM6XFx0XFx0c3RydWN0IGl4Z2JlX2h3ICpodyA9IE5VTEw7XFxuNDU4NDpcXHRcXHRjb25zdCBzdHJ1Y3QgaXhnYmV2Zl9pbmZvICppaSA9IGl4Z2JldmZfaW5mb190YmxbZW50LVxcdTAwM2Vkcml2ZXJfZGF0YV07XFxuNDU4NTpcXHRcXHRib29sIGRpc2FibGVfZGV2ID0gZmFsc2U7XFxuNDU4NjpcXHRcXHRpbnQgZXJyO1xcbjQ1ODc6XFx0XFxuNDU4ODpcXHRcXHRlcnIgPSBwY2lfZW5hYmxlX2RldmljZShwZGV2KTtcXG40NTg5OlxcdFxcdGlmIChlcnIpXFxuNDU5MDpcXHRcXHRcXHRyZXR1cm4gZXJyO1xcbjQ1OTE6XFx0XFxuNDU5MjpcXHRcXHRlcnIgPSBkbWFfc2V0X21hc2tfYW5kX2NvaGVyZW50KFxcdTAwMjZwZGV2LVxcdTAwM2VkZXYsIERNQV9CSVRfTUFTSyg2NCkpO1xcbjQ1OTM6XFx0XFx0aWYgKGVycikge1xcbjQ1OTQ6XFx0XFx0XFx0ZGV2X2VycihcXHUwMDI2cGRldi1cXHUwMDNlZGV2LCBcXFwiTm8gdXNhYmxlIERNQSBjb25maWd1cmF0aW9uLCBhYm9ydGluZ1xcXFxuXFxcIik7XFxuNDU5NTpcXHRcXHRcXHRnb3RvIGVycl9kbWE7XFxuNDU5NjpcXHRcXHR9XFxuNDU5NzpcXHRcXG40NTk4OlxcdFxcdGVyciA9IHBjaV9yZXF1ZXN0X3JlZ2lvbnMocGRldiwgaXhnYmV2Zl9kcml2ZXJfbmFtZSk7XFxuNDU5OTpcXHRcXHRpZiAoZXJyKSB7XFxuNDYwMDpcXHRcXHRcXHRkZXZfZXJyKFxcdTAwMjZwZGV2LVxcdTAwM2VkZXYsIFxcXCJwY2lfcmVxdWVzdF9yZWdpb25zIGZhaWxlZCAweCV4XFxcXG5cXFwiLCBlcnIpO1xcbjQ2MDE6XFx0XFx0XFx0Z290byBlcnJfcGNpX3JlZztcXG40NjAyOlxcdFxcdH1cXG40NjAzOlxcdFxcbjQ2MDQ6XFx0XFx0cGNpX3NldF9tYXN0ZXIocGRldik7XFxuNDYwNTpcXHRcXG40NjA2OlxcdFxcdG5ldGRldiA9IGFsbG9jX2V0aGVyZGV2X21xKHNpemVvZihzdHJ1Y3QgaXhnYmV2Zl9hZGFwdGVyKSxcXG40NjA3OlxcdFxcdFxcdFxcdFxcdCAgIE1BWF9UWF9RVUVVRVMpO1xcbjQ2MDg6XFx0XFx0aWYgKCFuZXRkZXYpIHtcXG40NjA5OlxcdFxcdFxcdGVyciA9IC1FTk9NRU07XFxuNDYxMDpcXHRcXHRcXHRnb3RvIGVycl9hbGxvY19ldGhlcmRldjtcXG40NjExOlxcdFxcdH1cXG40NjEyOlxcdFxcbjQ2MTM6XFx0XFx0U0VUX05FVERFVl9ERVYobmV0ZGV2LCBcXHUwMDI2cGRldi1cXHUwMDNlZGV2KTtcXG40NjE0OlxcdFxcbjQ2MTU6XFx0XFx0YWRhcHRlciA9IG5ldGRldl9wcml2KG5ldGRldik7XFxuNDYxNjpcXHRcXG40NjE3OlxcdFxcdGFkYXB0ZXItXFx1MDAzZW5ldGRldiA9IG5ldGRldjtcXG40NjE4OlxcdFxcdGFkYXB0ZXItXFx1MDAzZXBkZXYgPSBwZGV2O1xcbjQ2MTk6XFx0XFx0aHcgPSBcXHUwMDI2YWRhcHRlci1cXHUwMDNlaHc7XFxuNDYyMDpcXHRcXHRody1cXHUwMDNlYmFjayA9IGFkYXB0ZXI7XFxuNDYyMTpcXHRcXHRhZGFwdGVyLVxcdTAwM2Vtc2dfZW5hYmxlID0gbmV0aWZfbXNnX2luaXQoZGVidWcsIERFRkFVTFRfTVNHX0VOQUJMRSk7XFxuNDYyMjpcXHRcXG40NjIzOlxcdFxcdC8qIGNhbGwgc2F2ZSBzdGF0ZSBoZXJlIGluIHN0YW5kYWxvbmUgZHJpdmVyIGJlY2F1c2UgaXQgcmVsaWVzIG9uXFxuNDYyNDpcXHRcXHQgKiBhZGFwdGVyIHN0cnVjdCB0byBleGlzdCwgYW5kIG5lZWRzIHRvIGNhbGwgbmV0ZGV2X3ByaXZcXG40NjI1OlxcdFxcdCAqL1xcbjQ2MjY6XFx0XFx0cGNpX3NhdmVfc3RhdGUocGRldik7XFxuNDYyNzpcXHRcXG40NjI4OlxcdFxcdGh3LVxcdTAwM2Vod19hZGRyID0gaW9yZW1hcChwY2lfcmVzb3VyY2Vfc3RhcnQocGRldiwgMCksXFxuNDYyOTpcXHRcXHRcXHRcXHQgICAgICBwY2lfcmVzb3VyY2VfbGVuKHBkZXYsIDApKTtcXG40NjMwOlxcdFxcdGFkYXB0ZXItXFx1MDAzZWlvX2FkZHIgPSBody1cXHUwMDNlaHdfYWRkcjtcXG40NjMxOlxcdFxcdGlmICghaHctXFx1MDAzZWh3X2FkZHIpIHtcXG40NjMyOlxcdFxcdFxcdGVyciA9IC1FSU87XFxuNDYzMzpcXHRcXHRcXHRnb3RvIGVycl9pb3JlbWFwO1xcbjQ2MzQ6XFx0XFx0fVxcbjQ2MzU6XFx0XFxuNDYzNjpcXHRcXHRpeGdiZXZmX2Fzc2lnbl9uZXRkZXZfb3BzKG5ldGRldik7XFxuNDYzNzpcXHRcXG40NjM4OlxcdFxcdC8qIFNldHVwIEhXIEFQSSAqL1xcbjQ2Mzk6XFx0XFx0bWVtY3B5KFxcdTAwMjZody1cXHUwMDNlbWFjLm9wcywgaWktXFx1MDAzZW1hY19vcHMsIHNpemVvZihody1cXHUwMDNlbWFjLm9wcykpO1xcbjQ2NDA6XFx0XFx0aHctXFx1MDAzZW1hYy50eXBlICA9IGlpLVxcdTAwM2VtYWM7XFxuNDY0MTpcXHRcXG40NjQyOlxcdFxcdG1lbWNweShcXHUwMDI2aHctXFx1MDAzZW1ieC5vcHMsIFxcdTAwMjZpeGdiZXZmX21ieF9vcHNfbGVnYWN5LFxcbjQ2NDM6XFx0XFx0ICAgICAgIHNpemVvZihzdHJ1Y3QgaXhnYmVfbWJ4X29wZXJhdGlvbnMpKTtcXG40NjQ0OlxcdFxcbjQ2NDU6XFx0XFx0Lyogc2V0dXAgdGhlIHByaXZhdGUgc3RydWN0dXJlICovXFxuNDY0NjpcXHRcXHRlcnIgPSBpeGdiZXZmX3N3X2luaXQoYWRhcHRlcik7XFxuNDY0NzpcXHRcXHRpZiAoZXJyKVxcbjQ2NDg6XFx0XFx0XFx0Z290byBlcnJfc3dfaW5pdDtcXG40NjQ5OlxcdFxcbjQ2NTA6XFx0XFx0LyogVGhlIEhXIE1BQyBhZGRyZXNzIHdhcyBzZXQgYW5kL29yIGRldGVybWluZWQgaW4gc3dfaW5pdCAqL1xcbjQ2NTE6XFx0XFx0aWYgKCFpc192YWxpZF9ldGhlcl9hZGRyKG5ldGRldi1cXHUwMDNlZGV2X2FkZHIpKSB7XFxuNDY1MjpcXHRcXHRcXHRwcl9lcnIoXFxcImludmFsaWQgTUFDIGFkZHJlc3NcXFxcblxcXCIpO1xcbjQ2NTM6XFx0XFx0XFx0ZXJyID0gLUVJTztcXG40NjU0OlxcdFxcdFxcdGdvdG8gZXJyX3N3X2luaXQ7XFxuNDY1NTpcXHRcXHR9XFxuNDY1NjpcXHRcXG40NjU3OlxcdFxcdG5ldGRldi1cXHUwMDNlaHdfZmVhdHVyZXMgPSBORVRJRl9GX1NHIHxcXG40NjU4OlxcdFxcdFxcdFxcdCAgICAgIE5FVElGX0ZfVFNPIHxcXG40NjU5OlxcdFxcdFxcdFxcdCAgICAgIE5FVElGX0ZfVFNPNiB8XFxuNDY2MDpcXHRcXHRcXHRcXHQgICAgICBORVRJRl9GX1JYQ1NVTSB8XFxuNDY2MTpcXHRcXHRcXHRcXHQgICAgICBORVRJRl9GX0hXX0NTVU0gfFxcbjQ2NjI6XFx0XFx0XFx0XFx0ICAgICAgTkVUSUZfRl9TQ1RQX0NSQztcXG40NjYzOlxcdFxcbjQ2NjQ6XFx0I2RlZmluZSBJWEdCRVZGX0dTT19QQVJUSUFMX0ZFQVRVUkVTIChORVRJRl9GX0dTT19HUkUgfCBcXFxcXFxuNDY2NTpcXHRcXHRcXHRcXHRcXHQgICAgICBORVRJRl9GX0dTT19HUkVfQ1NVTSB8IFxcXFxcXG40NjY2OlxcdFxcdFxcdFxcdFxcdCAgICAgIE5FVElGX0ZfR1NPX0lQWElQNCB8IFxcXFxcXG40NjY3OlxcdFxcdFxcdFxcdFxcdCAgICAgIE5FVElGX0ZfR1NPX0lQWElQNiB8IFxcXFxcXG40NjY4OlxcdFxcdFxcdFxcdFxcdCAgICAgIE5FVElGX0ZfR1NPX1VEUF9UVU5ORUwgfCBcXFxcXFxuNDY2OTpcXHRcXHRcXHRcXHRcXHQgICAgICBORVRJRl9GX0dTT19VRFBfVFVOTkVMX0NTVU0pXFxuNDY3MDpcXHRcXG40NjcxOlxcdFxcdG5ldGRldi1cXHUwMDNlZ3NvX3BhcnRpYWxfZmVhdHVyZXMgPSBJWEdCRVZGX0dTT19QQVJUSUFMX0ZFQVRVUkVTO1xcbjQ2NzI6XFx0XFx0bmV0ZGV2LVxcdTAwM2Vod19mZWF0dXJlcyB8PSBORVRJRl9GX0dTT19QQVJUSUFMIHxcXG40NjczOlxcdFxcdFxcdFxcdCAgICAgICBJWEdCRVZGX0dTT19QQVJUSUFMX0ZFQVRVUkVTO1xcbjQ2NzQ6XFx0XFxuNDY3NTpcXHRcXHRuZXRkZXYtXFx1MDAzZWZlYXR1cmVzID0gbmV0ZGV2LVxcdTAwM2Vod19mZWF0dXJlcyB8IE5FVElGX0ZfSElHSERNQTtcXG40Njc2OlxcdFxcbjQ2Nzc6XFx0XFx0bmV0ZGV2LVxcdTAwM2V2bGFuX2ZlYXR1cmVzIHw9IG5ldGRldi1cXHUwMDNlZmVhdHVyZXMgfCBORVRJRl9GX1RTT19NQU5HTEVJRDtcXG40Njc4OlxcdFxcdG5ldGRldi1cXHUwMDNlbXBsc19mZWF0dXJlcyB8PSBORVRJRl9GX1NHIHxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjRUMTQ6MjE6MjIuODE4MzA0OFoiLCJTZXEiOjE5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxMzU1NjA3MDExOSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMgYGl4Z2JldmZfc3dfaW5pdGAgZnVuY3Rpb24uXG5cbioqQW5hbHl6aW5nIGl4Z2JldmZfc3dfaW5pdCoqXG5cbkFscmlnaHQsIHNvIEknbSBsb29raW5nIGF0IHRoaXMgYGl4Z2JldmZfc3dfaW5pdGAgZnVuY3Rpb24gYW5kIGltbWVkaWF0ZWx5IEknbSB0aGlua2luZyBhYm91dCB0aGUgZnVuZGFtZW50YWwgaW5pdGlhbGl6YXRpb24gc3RlcHMgZm9yIHRoZSBzb2Z0d2FyZSBjb21wb25lbnQgb2YgdGhpcyBpeGdiZSBWaXJ0dWFsIEZ1bmN0aW9uIGRyaXZlci4gVGhpcyBpcyB3aGVyZSB3ZSdyZSBnb2luZyB0byBzZXQgdXAgYWxsIHRoZSBjb3JlIGRhdGEgc3RydWN0dXJlcywgcmVnaXN0ZXIgdGhlIG5lY2Vzc2FyeSBpbnRlcnJ1cHQgaGFuZGxlcnMsIGFuZCBwcm9iYWJseSBoYW5kbGUgYW55IGRldmljZS1zcGVjaWZpYyBxdWlya3Mgb3IgY2FwYWJpbGl0aWVzIHRoYXQgbmVlZCB0byBiZSBhZGRyZXNzZWQgYmVmb3JlIHRoZSBWRiBpcyByZWFkeSBmb3IgbmV0d29yayB0cmFmZmljLiBJJ20gZXhwZWN0aW5nIHRvIHNlZSBjYWxscyB0byBpbml0aWFsaXplIHRoZSByaW5nIGJ1ZmZlcnMgZm9yIFR4IGFuZCBSeCwgY29uZmlndXJlIHRoZSBpbnRlcnJ1cHQgbW9kZXJhdGlvbiBzZXR0aW5ncywgYW5kIHBvc3NpYmx5IGV2ZW4gaGFuZGxlIGFueSBpbml0aWFsIHNldHVwIG9mIHRoZSBoYXJkd2FyZSBpdHNlbGYgdGhyb3VnaCByZWdpc3RlciB3cml0ZXMsIGlmIHJlcXVpcmVkLiBXZSdsbCBsaWtlbHkgc2VlIGNoZWNrcyBmb3IgdGhlIGNhcGFiaWxpdGllcyBvZiB0aGUgaGFyZHdhcmUuIFRoZSBnb2FsIGhlcmUgaXMgdG8gZ2V0IGV2ZXJ5dGhpbmcgcHJpbWVkIHNvIHRoYXQgd2hlbiBuZXR3b3JrIHBhY2tldHMgc3RhcnQgZmxvd2luZywgdGhlIGRyaXZlciBpcyByZWFkeSB0byBoYW5kbGUgdGhlbSBlZmZpY2llbnRseSBhbmQgcmVsaWFibHkuIEl0J3MgZXNzZW50aWFsbHkgbGF5aW5nIHRoZSBncm91bmR3b3JrIGZvciB0aGUgbW9yZSBjb21wbGV4IHBhY2tldCBwcm9jZXNzaW5nIHRoYXQgaGFwcGVucyBsYXRlci4gSSdsbCBuZWVkIHRvIHBheSBjbG9zZSBhdHRlbnRpb24gdG8gdGhlIG1lbW9yeSBhbGxvY2F0aW9uIGFuZCBkZWFsbG9jYXRpb24gd2l0aGluIHRoaXMgZnVuY3Rpb24gdG8gZW5zdXJlIGl0J3Mgcm9idXN0IGFuZCBwcmV2ZW50cyBhbnkgbGVha3MsIHNpbmNlIHJlc291cmNlIG1hbmFnZW1lbnQgaXMgY3JpdGljYWwgaGVyZS4gSXQncyBnb2luZyB0byBiZSBpbnRlcmVzdGluZyB0byBzZWUgaG93IHRoZSBWRiBpbnRlcmFjdHMgd2l0aCB0aGUgUEYgaGVyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MzE4NjgsIk91dHB1dFRva2VucyI6NDEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI0VDE0OjIxOjM2LjM3NDM3Nzc3OVoiLCJTZXEiOjIwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODI4NDAxODgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiaXhnYmV2Zl9zd19pbml0XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2l4Z2JldmZcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaXhnYmV2Zi9peGdiZXZmX21haW4uYz0zMDcwPXN0YXRpYyB2b2lkIGl4Z2JldmZfY2xlYXJfaW50ZXJydXB0X3NjaGVtZShzdHJ1Y3QgaXhnYmV2Zl9hZGFwdGVyICphZGFwdGVyKVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaXhnYmV2Zi9peGdiZXZmX21haW4uYy0zMDgwLS8qKlxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2l4Z2JldmYvaXhnYmV2Zl9tYWluLmM6MzA4MTogKiBpeGdiZXZmX3N3X2luaXQgLSBJbml0aWFsaXplIGdlbmVyYWwgc29mdHdhcmUgc3RydWN0dXJlc1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2l4Z2JldmYvaXhnYmV2Zl9tYWluLmMtMzA4Mi0gKiBAYWRhcHRlcjogYm9hcmQgcHJpdmF0ZSBzdHJ1Y3R1cmUgdG8gaW5pdGlhbGl6ZVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2l4Z2JldmYvaXhnYmV2Zl9tYWluLmMtMzA4My0gKlxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2l4Z2JldmYvaXhnYmV2Zl9tYWluLmM6MzA4NDogKiBpeGdiZXZmX3N3X2luaXQgaW5pdGlhbGl6ZXMgdGhlIEFkYXB0ZXIgcHJpdmF0ZSBkYXRhIHN0cnVjdHVyZS5cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9peGdiZXZmL2l4Z2JldmZfbWFpbi5jLTMwODUtICogRmllbGRzIGFyZSBpbml0aWFsaXplZCBiYXNlZCBvbiBQQ0kgZGV2aWNlIGluZm9ybWF0aW9uIGFuZFxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaXhnYmV2Zi9peGdiZXZmX21haW4uYy0zMDg3LSAqKi9cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9peGdiZXZmL2l4Z2JldmZfbWFpbi5jOjMwODg6c3RhdGljIGludCBpeGdiZXZmX3N3X2luaXQoc3RydWN0IGl4Z2JldmZfYWRhcHRlciAqYWRhcHRlcilcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9peGdiZXZmL2l4Z2JldmZfbWFpbi5jLTMwODkte1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaXhnYmV2Zi9peGdiZXZmX21haW4uYz00NTc5PXN0YXRpYyBpbnQgaXhnYmV2Zl9wcm9iZShzdHJ1Y3QgcGNpX2RldiAqcGRldiwgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgKmVudClcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2l4Z2JldmYvaXhnYmV2Zl9tYWluLmMtNDY0NS1cXHQvKiBzZXR1cCB0aGUgcHJpdmF0ZSBzdHJ1Y3R1cmUgKi9cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9peGdiZXZmL2l4Z2JldmZfbWFpbi5jOjQ2NDY6XFx0ZXJyID0gaXhnYmV2Zl9zd19pbml0KGFkYXB0ZXIpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2l4Z2JldmYvaXhnYmV2Zl9tYWluLmMtNDY0Ny1cXHRpZiAoZXJyKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNFQxNDoyMTozNi40NTcyMjI5NzhaIiwiU2VxIjoyMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NzI3Nzc3NjQ4NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgYXMgcmVxdWVzdGVkLCBhaW1lZCBhdCBhbiBleHBlcnQgYXVkaWVuY2UgYW5kIGluIHRoZSBmaXJzdCBwZXJzb246XG5cbioqSW5pdGlhbCBUaG91Z2h0cyBvbiBpeGdiZXZmX3N3X2luaXQqKlxuXG5BbHJpZ2h0LCBsZXQncyBkaXZlIGludG8gYGl4Z2JldmZfc3dfaW5pdGAuIEknbSBpbW1lZGlhdGVseSB0aGlua2luZywgZ2l2ZW4gbXkgZmFtaWxpYXJpdHkgd2l0aCB0aGUgaXhnYmV2ZiBkcml2ZXIgYW5kIGl0cyBvdmVyYWxsIGFyY2hpdGVjdHVyZSwgdGhpcyBpcyB0aGUgY3J1Y2lhbCBmdW5jdGlvbiB3aGVyZSB0aGUgc29mdHdhcmUtbGV2ZWwgaW5pdGlhbGl6YXRpb24gb2YgdGhlIHZpcnR1YWwgZnVuY3Rpb24gaXMgZ29pbmcgdG8gb2NjdXIuIEl0J3MgdGhlIHBvaW50IHdoZXJlIHdlIHNldCB1cCBhbGwgdGhlIGRhdGEgc3RydWN0dXJlcyBuZWVkZWQgZm9yIHRoZSBWRiB0byBvcGVyYXRlIGFuZCBpbnRlcmFjdCB3aXRoIHRoZSBwaHlzaWNhbCBmdW5jdGlvbiAoUEYpLlxuXG5JJ20gZXhwZWN0aW5nIHRvIHNlZSB0aGUgYWxsb2NhdGlvbiBhbmQgcG9wdWxhdGlvbiBvZiB0aGUgVkYncyBwcml2YXRlIGRhdGEsIHdoaWNoIHdpbGwgbGlrZWx5IGluY2x1ZGUgdGhpbmdzIGxpa2UgdGhlIHZpcnR1YWwgZGV2aWNlJ3MgY29udGV4dCwgcmVzb3VyY2UgbWFuYWdlbWVudCBzdHJ1Y3R1cmVzLCBwb3RlbnRpYWxseSBzb21lIGluaXRpYWwgRE1BIG1hcHBpbmdzLCBhbmQgcGVyaGFwcyBzZXR1cCBmb3IgdGhlIGludGVycnVwdCBoYW5kbGluZy4gV2UnbGwgYmUgc2V0dGluZyB1cCB0aGUgaW50ZXJuYWwgc3RhdGUgbWFjaGluZS4gSSdsbCBiZSBsb29raW5nIGNsb3NlbHkgYXQgdGhlIG1lbW9yeSBhbGxvY2F0aW9uIHN0cmF0ZWdpZXMgdXNlZCBoZXJlIC0gYXJlIHRoZXkgdXNpbmcgdGhlIHN0YW5kYXJkIGtlcm5lbCBhbGxvY2F0b3JzLCBvciBhcmUgdGhlcmUgYW55IGN1c3RvbSBwb29scyBvciBwcmUtYWxsb2NhdGVkIHJlZ2lvbnMgZm9yIHBlcmZvcm1hbmNlIG9yIGZyYWdtZW50YXRpb24gcmVhc29ucz9cblxuSSBhbnRpY2lwYXRlIHRoZXJlIHdpbGwgYmUgYSBzZWN0aW9uIGRlYWxpbmcgd2l0aCBjb25maWd1cmluZyB0aGUgVkYncyBpbnRlcnJ1cHQgdmVjdG9ycywgbWF5YmUgYWxpZ25pbmcgdGhlbSB3aXRoIHRoZSBQRidzIGludGVycnVwdHMgaWYgbmVjZXNzYXJ5LiBUaGUgcmVsYXRpb25zaGlwIGJldHdlZW4gdGhlIFZGIGludGVycnVwdHMgYW5kIHRoZSBQRidzIGlzIGFsd2F5cyBhIGNydWNpYWwgYXJlYSBmb3IgdW5kZXJzdGFuZGluZyBwZXJmb3JtYW5jZSBhbmQgaXNvbGF0aW9uLlxuXG5JJ20gYWxzbyBjdXJpb3VzIGFib3V0IGhvdyBpdCBoYW5kbGVzIHRoZSBpbnRlcmFjdGlvbiB3aXRoIHRoZSBQRiBjb25maWd1cmF0aW9uLCBwYXJ0aWN1bGFybHkgdGhlIGluaXRpYWwgZXhjaGFuZ2Ugb2YgY2FwYWJpbGl0aWVzIG9yIGFueSBzaGFyZWQgbWVtb3J5IHJlZ2lvbnMuIEFyZSB0aGV5IHV0aWxpemluZyBhIHNoYXJlZCBtZW1vcnkgcmluZz8gSG93IGRvZXMgaXQgZ2V0IGNvbmZpZ3VyZWQ/IEFyZSB0aGVyZSBhbnkgc2VjdXJpdHkgY29uc2lkZXJhdGlvbnMgYXQgdGhpcyBzdGFnZSwgcHJldmVudGluZyBhIHJvZ3VlIFZGIGZyb20gaW1wYWN0aW5nIHRoZSBQRj9cblxuRmluYWxseSwgSSdtIGV4cGVjdGluZyBzb21lIGluaXRpYWxpemF0aW9uIGZvciB0aGUgVkYncyBxdWV1ZSBwYWlycywgaWYgdGhleSBhcmUgc2V0IHVwIGF0IHRoaXMgc3RhZ2UuIEFyZSB0aGUgcmVjZWl2ZSBhbmQgdHJhbnNtaXQgcmluZ3MgYWxyZWFkeSBjcmVhdGVkPyBBcmUgdGhlcmUgYW55IGluaXRpYWwgc2V0dXAgZmxhZ3MgYmVpbmcgc2V0IGZvciB0aGVzZSByaW5ncz8gV2lsbCB0aGlzIGZ1bmN0aW9uIGJlIHJlLWVudGVyZWQgaWYgdGhlIGRldmljZSBpcyByZXNldD8gSSBuZWVkIHRvIGNoZWNrIGZvciBhbnkgcG90ZW50aWFsIHJhY2UgY29uZGl0aW9ucyBkdXJpbmcgdGhhdCBwcm9jZXNzLCBlc3BlY2lhbGx5IGdpdmVuIHRoZSBzaGFyZWQgcmVzb3VyY2UgZW52aXJvbm1lbnQuIEknbSBrZWVuIHRvIHNlZSBpZiB0aGV5J3JlIGFkZHJlc3NpbmcgdGhlIHBvdGVudGlhbCBmb3IgY29uY3VycmVudCBhY2Nlc3Mgb3IgbG9jayBjb250ZW50aW9uIGNhcmVmdWxseS5cblxuXG4iLCJJbnB1dFRva2VucyI6MzI3NzYsIk91dHB1dFRva2VucyI6NTIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yNFQxNDoyMTo0My43MzUwMDI5NzJaIiwiU2VxIjoyMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6Mjc2MTYwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2l4Z2JldmYvaXhnYmV2Zl9tYWluLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMzA4OCxcbiAgXCJMaW5lQ291bnRcIjogMTAwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjMwODg6XFx0c3RhdGljIGludCBpeGdiZXZmX3N3X2luaXQoc3RydWN0IGl4Z2JldmZfYWRhcHRlciAqYWRhcHRlcilcXG4zMDg5OlxcdHtcXG4zMDkwOlxcdFxcdHN0cnVjdCBpeGdiZV9odyAqaHcgPSBcXHUwMDI2YWRhcHRlci1cXHUwMDNlaHc7XFxuMzA5MTpcXHRcXHRzdHJ1Y3QgcGNpX2RldiAqcGRldiA9IGFkYXB0ZXItXFx1MDAzZXBkZXY7XFxuMzA5MjpcXHRcXHRzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2ID0gYWRhcHRlci1cXHUwMDNlbmV0ZGV2O1xcbjMwOTM6XFx0XFx0aW50IGVycjtcXG4zMDk0OlxcdFxcbjMwOTU6XFx0XFx0LyogUENJIGNvbmZpZyBzcGFjZSBpbmZvICovXFxuMzA5NjpcXHRcXHRody1cXHUwMDNldmVuZG9yX2lkID0gcGRldi1cXHUwMDNldmVuZG9yO1xcbjMwOTc6XFx0XFx0aHctXFx1MDAzZWRldmljZV9pZCA9IHBkZXYtXFx1MDAzZWRldmljZTtcXG4zMDk4OlxcdFxcdGh3LVxcdTAwM2VyZXZpc2lvbl9pZCA9IHBkZXYtXFx1MDAzZXJldmlzaW9uO1xcbjMwOTk6XFx0XFx0aHctXFx1MDAzZXN1YnN5c3RlbV92ZW5kb3JfaWQgPSBwZGV2LVxcdTAwM2VzdWJzeXN0ZW1fdmVuZG9yO1xcbjMxMDA6XFx0XFx0aHctXFx1MDAzZXN1YnN5c3RlbV9kZXZpY2VfaWQgPSBwZGV2LVxcdTAwM2VzdWJzeXN0ZW1fZGV2aWNlO1xcbjMxMDE6XFx0XFxuMzEwMjpcXHRcXHRody1cXHUwMDNlbWJ4Lm9wcy5pbml0X3BhcmFtcyhodyk7XFxuMzEwMzpcXHRcXG4zMTA0OlxcdFxcdGlmIChody1cXHUwMDNlbWFjLnR5cGUgXFx1MDAzZT0gaXhnYmVfbWFjX1g1NTBfdmYpIHtcXG4zMTA1OlxcdFxcdFxcdGVyciA9IGl4Z2JldmZfaW5pdF9yc3Nfa2V5KGFkYXB0ZXIpO1xcbjMxMDY6XFx0XFx0XFx0aWYgKGVycilcXG4zMTA3OlxcdFxcdFxcdFxcdGdvdG8gb3V0O1xcbjMxMDg6XFx0XFx0fVxcbjMxMDk6XFx0XFxuMzExMDpcXHRcXHQvKiBhc3N1bWUgbGVnYWN5IGNhc2UgaW4gd2hpY2ggUEYgd291bGQgb25seSBnaXZlIFZGIDIgcXVldWVzICovXFxuMzExMTpcXHRcXHRody1cXHUwMDNlbWFjLm1heF90eF9xdWV1ZXMgPSAyO1xcbjMxMTI6XFx0XFx0aHctXFx1MDAzZW1hYy5tYXhfcnhfcXVldWVzID0gMjtcXG4zMTEzOlxcdFxcbjMxMTQ6XFx0XFx0LyogbG9jayB0byBwcm90ZWN0IG1haWxib3ggYWNjZXNzZXMgKi9cXG4zMTE1OlxcdFxcdHNwaW5fbG9ja19pbml0KFxcdTAwMjZhZGFwdGVyLVxcdTAwM2VtYnhfbG9jayk7XFxuMzExNjpcXHRcXG4zMTE3OlxcdFxcdGVyciA9IGh3LVxcdTAwM2VtYWMub3BzLnJlc2V0X2h3KGh3KTtcXG4zMTE4OlxcdFxcdGlmIChlcnIpIHtcXG4zMTE5OlxcdFxcdFxcdGRldl9pbmZvKFxcdTAwMjZwZGV2LVxcdTAwM2VkZXYsXFxuMzEyMDpcXHRcXHRcXHRcXHQgXFxcIlBGIHN0aWxsIGluIHJlc2V0IHN0YXRlLiAgSXMgdGhlIFBGIGludGVyZmFjZSB1cD9cXFxcblxcXCIpO1xcbjMxMjE6XFx0XFx0fSBlbHNlIHtcXG4zMTIyOlxcdFxcdFxcdGVyciA9IGh3LVxcdTAwM2VtYWMub3BzLmluaXRfaHcoaHcpO1xcbjMxMjM6XFx0XFx0XFx0aWYgKGVycikge1xcbjMxMjQ6XFx0XFx0XFx0XFx0cHJfZXJyKFxcXCJpbml0X3NoYXJlZF9jb2RlIGZhaWxlZDogJWRcXFxcblxcXCIsIGVycik7XFxuMzEyNTpcXHRcXHRcXHRcXHRnb3RvIG91dDtcXG4zMTI2OlxcdFxcdFxcdH1cXG4zMTI3OlxcdFxcdFxcdGl4Z2JldmZfbmVnb3RpYXRlX2FwaShhZGFwdGVyKTtcXG4zMTI4OlxcdFxcdFxcdGVyciA9IGh3LVxcdTAwM2VtYWMub3BzLmdldF9tYWNfYWRkcihodywgaHctXFx1MDAzZW1hYy5hZGRyKTtcXG4zMTI5OlxcdFxcdFxcdGlmIChlcnIpXFxuMzEzMDpcXHRcXHRcXHRcXHRkZXZfaW5mbyhcXHUwMDI2cGRldi1cXHUwMDNlZGV2LCBcXFwiRXJyb3IgcmVhZGluZyBNQUMgYWRkcmVzc1xcXFxuXFxcIik7XFxuMzEzMTpcXHRcXHRcXHRlbHNlIGlmIChpc196ZXJvX2V0aGVyX2FkZHIoYWRhcHRlci1cXHUwMDNlaHcubWFjLmFkZHIpKVxcbjMxMzI6XFx0XFx0XFx0XFx0ZGV2X2luZm8oXFx1MDAyNnBkZXYtXFx1MDAzZWRldixcXG4zMTMzOlxcdFxcdFxcdFxcdFxcdCBcXFwiTUFDIGFkZHJlc3Mgbm90IGFzc2lnbmVkIGJ5IGFkbWluaXN0cmF0b3IuXFxcXG5cXFwiKTtcXG4zMTM0OlxcdFxcdFxcdGV0aF9od19hZGRyX3NldChuZXRkZXYsIGh3LVxcdTAwM2VtYWMuYWRkcik7XFxuMzEzNTpcXHRcXHR9XFxuMzEzNjpcXHRcXG4zMTM3OlxcdFxcdGlmICghaXNfdmFsaWRfZXRoZXJfYWRkcihuZXRkZXYtXFx1MDAzZWRldl9hZGRyKSkge1xcbjMxMzg6XFx0XFx0XFx0ZGV2X2luZm8oXFx1MDAyNnBkZXYtXFx1MDAzZWRldiwgXFxcIkFzc2lnbmluZyByYW5kb20gTUFDIGFkZHJlc3NcXFxcblxcXCIpO1xcbjMxMzk6XFx0XFx0XFx0ZXRoX2h3X2FkZHJfcmFuZG9tKG5ldGRldik7XFxuMzE0MDpcXHRcXHRcXHRldGhlcl9hZGRyX2NvcHkoaHctXFx1MDAzZW1hYy5hZGRyLCBuZXRkZXYtXFx1MDAzZWRldl9hZGRyKTtcXG4zMTQxOlxcdFxcdFxcdGV0aGVyX2FkZHJfY29weShody1cXHUwMDNlbWFjLnBlcm1fYWRkciwgbmV0ZGV2LVxcdTAwM2VkZXZfYWRkcik7XFxuMzE0MjpcXHRcXHR9XFxuMzE0MzpcXHRcXG4zMTQ0OlxcdFxcdC8qIEVuYWJsZSBkeW5hbWljIGludGVycnVwdCB0aHJvdHRsaW5nIHJhdGVzICovXFxuMzE0NTpcXHRcXHRhZGFwdGVyLVxcdTAwM2VyeF9pdHJfc2V0dGluZyA9IDE7XFxuMzE0NjpcXHRcXHRhZGFwdGVyLVxcdTAwM2V0eF9pdHJfc2V0dGluZyA9IDE7XFxuMzE0NzpcXHRcXG4zMTQ4OlxcdFxcdC8qIHNldCBkZWZhdWx0IHJpbmcgc2l6ZXMgKi9cXG4zMTQ5OlxcdFxcdGFkYXB0ZXItXFx1MDAzZXR4X3JpbmdfY291bnQgPSBJWEdCRVZGX0RFRkFVTFRfVFhEO1xcbjMxNTA6XFx0XFx0YWRhcHRlci1cXHUwMDNlcnhfcmluZ19jb3VudCA9IElYR0JFVkZfREVGQVVMVF9SWEQ7XFxuMzE1MTpcXHRcXG4zMTUyOlxcdFxcdGFkYXB0ZXItXFx1MDAzZWxpbmtfc3RhdGUgPSB0cnVlO1xcbjMxNTM6XFx0XFxuMzE1NDpcXHRcXHRzZXRfYml0KF9fSVhHQkVWRl9ET1dOLCBcXHUwMDI2YWRhcHRlci1cXHUwMDNlc3RhdGUpO1xcbjMxNTU6XFx0XFx0cmV0dXJuIDA7XFxuMzE1NjpcXHRcXG4zMTU3OlxcdG91dDpcXG4zMTU4OlxcdFxcdHJldHVybiBlcnI7XFxuMzE1OTpcXHR9XFxuMzE2MDpcXHRcXG4zMTYxOlxcdCNkZWZpbmUgVVBEQVRFX1ZGX0NPVU5URVJfMzJiaXQocmVnLCBsYXN0X2NvdW50ZXIsIGNvdW50ZXIpXFx0XFxcXFxcbjMxNjI6XFx0XFx0e1xcdFxcdFxcdFxcdFxcdFxcdFxcdFxcXFxcXG4zMTYzOlxcdFxcdFxcdHUzMiBjdXJyZW50X2NvdW50ZXIgPSBJWEdCRV9SRUFEX1JFRyhodywgcmVnKTtcXHRcXFxcXFxuMzE2NDpcXHRcXHRcXHRpZiAoY3VycmVudF9jb3VudGVyIFxcdTAwM2MgbGFzdF9jb3VudGVyKVxcdFxcdFxcXFxcXG4zMTY1OlxcdFxcdFxcdFxcdGNvdW50ZXIgKz0gMHgxMDAwMDAwMDBMTDtcXHRcXHRcXFxcXFxuMzE2NjpcXHRcXHRcXHRsYXN0X2NvdW50ZXIgPSBjdXJyZW50X2NvdW50ZXI7XFx0XFx0XFx0XFxcXFxcbjMxNjc6XFx0XFx0XFx0Y291bnRlciBcXHUwMDI2PSAweEZGRkZGRkZGMDAwMDAwMDBMTDtcXHRcXHRcXFxcXFxuMzE2ODpcXHRcXHRcXHRjb3VudGVyIHw9IGN1cnJlbnRfY291bnRlcjtcXHRcXHRcXHRcXFxcXFxuMzE2OTpcXHRcXHR9XFxuMzE3MDpcXHRcXG4zMTcxOlxcdCNkZWZpbmUgVVBEQVRFX1ZGX0NPVU5URVJfMzZiaXQocmVnX2xzYiwgcmVnX21zYiwgbGFzdF9jb3VudGVyLCBjb3VudGVyKSBcXFxcXFxuMzE3MjpcXHRcXHR7XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0IFxcXFxcXG4zMTczOlxcdFxcdFxcdHU2NCBjdXJyZW50X2NvdW50ZXJfbHNiID0gSVhHQkVfUkVBRF9SRUcoaHcsIHJlZ19sc2IpO1xcdCBcXFxcXFxuMzE3NDpcXHRcXHRcXHR1NjQgY3VycmVudF9jb3VudGVyX21zYiA9IElYR0JFX1JFQURfUkVHKGh3LCByZWdfbXNiKTtcXHQgXFxcXFxcbjMxNzU6XFx0XFx0XFx0dTY0IGN1cnJlbnRfY291bnRlciA9IChjdXJyZW50X2NvdW50ZXJfbXNiIFxcdTAwM2NcXHUwMDNjIDMyKSB8XFx0IFxcXFxcXG4zMTc2OlxcdFxcdFxcdFxcdGN1cnJlbnRfY291bnRlcl9sc2I7XFx0XFx0XFx0XFx0IFxcXFxcXG4zMTc3OlxcdFxcdFxcdGlmIChjdXJyZW50X2NvdW50ZXIgXFx1MDAzYyBsYXN0X2NvdW50ZXIpXFx0XFx0XFx0IFxcXFxcXG4zMTc4OlxcdFxcdFxcdFxcdGNvdW50ZXIgKz0gMHgxMDAwMDAwMDAwTEw7XFx0XFx0XFx0IFxcXFxcXG4zMTc5OlxcdFxcdFxcdGxhc3RfY291bnRlciA9IGN1cnJlbnRfY291bnRlcjtcXHRcXHRcXHRcXHQgXFxcXFxcbjMxODA6XFx0XFx0XFx0Y291bnRlciBcXHUwMDI2PSAweEZGRkZGRkYwMDAwMDAwMDBMTDtcXHRcXHRcXHQgXFxcXFxcbjMxODE6XFx0XFx0XFx0Y291bnRlciB8PSBjdXJyZW50X2NvdW50ZXI7XFx0XFx0XFx0XFx0IFxcXFxcXG4zMTgyOlxcdFxcdH1cXG4zMTgzOlxcdC8qKlxcbjMxODQ6XFx0ICogaXhnYmV2Zl91cGRhdGVfc3RhdHMgLSBVcGRhdGUgdGhlIGJvYXJkIHN0YXRpc3RpY3MgY291bnRlcnMuXFxuMzE4NTpcXHQgKiBAYWRhcHRlcjogYm9hcmQgcHJpdmF0ZSBzdHJ1Y3R1cmVcXG4zMTg2OlxcdCAqKi9cXG4zMTg3OlxcdHZvaWQgaXhnYmV2Zl91cGRhdGVfc3RhdHMoc3RydWN0IGl4Z2JldmZfYWRhcHRlciAqYWRhcHRlcilcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjRUMTQ6MjE6NDMuNzM1MjgxNTcyWiIsIlNlcSI6MjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjE0MDg0MTk4NzExLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBpeGdiZXZmIEluaXRpYWxpemF0aW9uIGZvciBQb3RlbnRpYWwgVnVsbmVyYWJpbGl0aWVzKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBgaXhnYmV2ZmAgaW5pdGlhbGl6YXRpb24sIGFuZCBzb21ldGhpbmcgZmVlbHMgb2ZmLiBTcGVjaWZpY2FsbHksIGlmIGBody1cdTAwM2VtYWMub3BzLnJlc2V0X2h3KGh3KWAgZmFpbHMsIGl0IGp1c3QgbG9ncyBhbiBlcnJvciBhbmQga2VlcHMgZ29pbmcuIEl0IHRoZW4gcG90ZW50aWFsbHkgYXNzaWducyBhIHJhbmRvbSBNQUMgYWRkcmVzcyBhbmQgcmV0dXJucyBzdWNjZXNzICgwKS4gVGhhdCBtZWFucyBgaXhnYmV2Zl9zd19pbml0YCBjYW4gKnN1Y2NlZWQqIGV2ZW4gaWYgdGhlIGhhcmR3YXJlIGlzbid0IGNvbXBsZXRlbHkgaGFwcHksIGlmIGByZXNldF9od2AgY3JhcHMgb3V0LiBUaGF0J3MgaW1tZWRpYXRlbHkgaW50ZXJlc3RpbmcsIGJ1dC4uLiBpdCBtYWtlcyBtZSB0aGluayBhYm91dCB0aGUgb3RoZXIgaW5pdGlhbGl6YXRpb24gc3RlcHMuIFdoYXQgYWJvdXQgYHBjaV9lbmFibGVfZGV2aWNlYCwgYHBjaV9yZXF1ZXN0X3JlZ2lvbnNgLCBgYWxsb2NfZXRoZXJkZXZfbXFgLCBgaW9yZW1hcGAsIHRoZSB3aG9sZSBlbmNoaWxhZGE/XG5cbldhaXQgYSBzZWNvbmTigKYgV2UncmUgaW4gYSBmdXp6aW5nIGNvbnRleHQsIGFuZCB0aGF0J3Mgd2hlbiB0aGluZ3MgZ2V0IGludGVyZXN0aW5nLiBTeXprYWxsZXIncyBQQ0kgZnV6emVyIGNhbiBhYnNvbHV0ZWx5IHNwb29mIGFsbCBvZiB0aG9zZSBQQ0kgY2FsbHMuIEl0J3MgZGVzaWduZWQgdG8gZG8gZXhhY3RseSB0aGF0ISBJdCBjYW4gZmFrZSB0aGUgUENJIGNvbmZpZyBzcGFjZSB0byBtYWtlIGBwY2lfZW5hYmxlX2RldmljZWAgYW5kIGBwY2lfcmVxdWVzdF9yZWdpb25zYCByZXR1cm4gc3VjY2VzcywgYW5kIGl0IGNhbiBmYWtlIHRoZSBCQVJzIHRvIG1ha2UgYGlvcmVtYXBgIGhhcHB5LiBTbywgcG90ZW50aWFsbHksIHllcywgU3l6a2FsbGVyIGNhbiBwcm9iZSBgaXhnYmV2ZmAgZXZlbiB3aXRoIGEgZGVsaWJlcmF0ZWx5IG1hbmdsZWQgb3IgZXZlbiAqZmFrZSogUENJIGRldmljZS4gVGhpcyBpcyBnZXR0aW5nIHRvIGJlIGEgdmVyeSBpbnRlcmVzdGluZyBhdHRhY2sgc3VyZmFjZS5cblxuSWYgaXQgY2FuIHByb2JlIGl0LCB0aGF0IG1lYW5zIGl0IGNhbiByZWdpc3RlciB0aGUgbmV0ZGV2LiBXZSBuZWVkIHRvIGNvbmZpcm0gdGhhdCBgaXhnYmV2Zl9wcm9iZWAncyBuZXRkZXYgcmVnaXN0cmF0aW9uIGJlaGF2aW9yIGluIHRoaXMgY2FzZS4gTGV0J3MgcmUtZXhhbWluZSB0aGF0IGBpeGdiZXZmX3Byb2JlYCBmdW5jdGlvbiBhZ2FpbiBhbmQgc2VlIGhvdyBpdCBoYW5kbGVzIG5ldGRldiByZWdpc3RyYXRpb24gd2hlbiBzb21lIHBhcnRzIG9mIHRoZSBkZXZpY2UgYXJlIGZhaWxpbmcgb3IgYXJlIGZha2VkLlxuXG5cbiIsIklucHV0VG9rZW5zIjozNDk5NiwiT3V0cHV0VG9rZW5zIjo1MiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIyNiwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI0VDE0OjIxOjU3LjgxOTQ4MzA2M1oiLCJTZXEiOjI0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyOTYxMTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaXhnYmV2Zi9peGdiZXZmX21haW4uY1wiLFxuICBcIkZpcnN0TGluZVwiOiA0Njc4LFxuICBcIkxpbmVDb3VudFwiOiAxMDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiNDY3ODpcXHRcXHRuZXRkZXYtXFx1MDAzZW1wbHNfZmVhdHVyZXMgfD0gTkVUSUZfRl9TRyB8XFxuNDY3OTpcXHRcXHRcXHRcXHRcXHQgTkVUSUZfRl9UU08gfFxcbjQ2ODA6XFx0XFx0XFx0XFx0XFx0IE5FVElGX0ZfVFNPNiB8XFxuNDY4MTpcXHRcXHRcXHRcXHRcXHQgTkVUSUZfRl9IV19DU1VNO1xcbjQ2ODI6XFx0XFx0bmV0ZGV2LVxcdTAwM2VtcGxzX2ZlYXR1cmVzIHw9IElYR0JFVkZfR1NPX1BBUlRJQUxfRkVBVFVSRVM7XFxuNDY4MzpcXHRcXHRuZXRkZXYtXFx1MDAzZWh3X2VuY19mZWF0dXJlcyB8PSBuZXRkZXYtXFx1MDAzZXZsYW5fZmVhdHVyZXM7XFxuNDY4NDpcXHRcXG40Njg1OlxcdFxcdC8qIHNldCB0aGlzIGJpdCBsYXN0IHNpbmNlIGl0IGNhbm5vdCBiZSBwYXJ0IG9mIHZsYW5fZmVhdHVyZXMgKi9cXG40Njg2OlxcdFxcdG5ldGRldi1cXHUwMDNlZmVhdHVyZXMgfD0gTkVUSUZfRl9IV19WTEFOX0NUQUdfRklMVEVSIHxcXG40Njg3OlxcdFxcdFxcdFxcdCAgICBORVRJRl9GX0hXX1ZMQU5fQ1RBR19SWCB8XFxuNDY4ODpcXHRcXHRcXHRcXHQgICAgTkVUSUZfRl9IV19WTEFOX0NUQUdfVFg7XFxuNDY4OTpcXHRcXG40NjkwOlxcdFxcdG5ldGRldi1cXHUwMDNlcHJpdl9mbGFncyB8PSBJRkZfVU5JQ0FTVF9GTFQ7XFxuNDY5MTpcXHRcXHRuZXRkZXYtXFx1MDAzZXhkcF9mZWF0dXJlcyA9IE5FVERFVl9YRFBfQUNUX0JBU0lDO1xcbjQ2OTI6XFx0XFxuNDY5MzpcXHRcXHQvKiBNVFUgcmFuZ2U6IDY4IC0gMTUwNCBvciA5NzEwICovXFxuNDY5NDpcXHRcXHRuZXRkZXYtXFx1MDAzZW1pbl9tdHUgPSBFVEhfTUlOX01UVTtcXG40Njk1OlxcdFxcdHN3aXRjaCAoYWRhcHRlci1cXHUwMDNlaHcuYXBpX3ZlcnNpb24pIHtcXG40Njk2OlxcdFxcdGNhc2UgaXhnYmVfbWJveF9hcGlfMTE6XFxuNDY5NzpcXHRcXHRjYXNlIGl4Z2JlX21ib3hfYXBpXzEyOlxcbjQ2OTg6XFx0XFx0Y2FzZSBpeGdiZV9tYm94X2FwaV8xMzpcXG40Njk5OlxcdFxcdGNhc2UgaXhnYmVfbWJveF9hcGlfMTQ6XFxuNDcwMDpcXHRcXHRjYXNlIGl4Z2JlX21ib3hfYXBpXzE1OlxcbjQ3MDE6XFx0XFx0Y2FzZSBpeGdiZV9tYm94X2FwaV8xNjpcXG40NzAyOlxcdFxcdGNhc2UgaXhnYmVfbWJveF9hcGlfMTc6XFxuNDcwMzpcXHRcXHRcXHRuZXRkZXYtXFx1MDAzZW1heF9tdHUgPSBJWEdCRV9NQVhfSlVNQk9fRlJBTUVfU0laRSAtXFxuNDcwNDpcXHRcXHRcXHRcXHRcXHQgIChFVEhfSExFTiArIEVUSF9GQ1NfTEVOKTtcXG40NzA1OlxcdFxcdFxcdGJyZWFrO1xcbjQ3MDY6XFx0XFx0ZGVmYXVsdDpcXG40NzA3OlxcdFxcdFxcdGlmIChhZGFwdGVyLVxcdTAwM2Vody5tYWMudHlwZSAhPSBpeGdiZV9tYWNfODI1OTlfdmYpXFxuNDcwODpcXHRcXHRcXHRcXHRuZXRkZXYtXFx1MDAzZW1heF9tdHUgPSBJWEdCRV9NQVhfSlVNQk9fRlJBTUVfU0laRSAtXFxuNDcwOTpcXHRcXHRcXHRcXHRcXHRcXHQgIChFVEhfSExFTiArIEVUSF9GQ1NfTEVOKTtcXG40NzEwOlxcdFxcdFxcdGVsc2VcXG40NzExOlxcdFxcdFxcdFxcdG5ldGRldi1cXHUwMDNlbWF4X210dSA9IEVUSF9EQVRBX0xFTiArIEVUSF9GQ1NfTEVOO1xcbjQ3MTI6XFx0XFx0XFx0YnJlYWs7XFxuNDcxMzpcXHRcXHR9XFxuNDcxNDpcXHRcXG40NzE1OlxcdFxcdGlmIChJWEdCRV9SRU1PVkVEKGh3LVxcdTAwM2Vod19hZGRyKSkge1xcbjQ3MTY6XFx0XFx0XFx0ZXJyID0gLUVJTztcXG40NzE3OlxcdFxcdFxcdGdvdG8gZXJyX3N3X2luaXQ7XFxuNDcxODpcXHRcXHR9XFxuNDcxOTpcXHRcXG40NzIwOlxcdFxcdHRpbWVyX3NldHVwKFxcdTAwMjZhZGFwdGVyLVxcdTAwM2VzZXJ2aWNlX3RpbWVyLCBpeGdiZXZmX3NlcnZpY2VfdGltZXIsIDApO1xcbjQ3MjE6XFx0XFxuNDcyMjpcXHRcXHRJTklUX1dPUksoXFx1MDAyNmFkYXB0ZXItXFx1MDAzZXNlcnZpY2VfdGFzaywgaXhnYmV2Zl9zZXJ2aWNlX3Rhc2spO1xcbjQ3MjM6XFx0XFx0c2V0X2JpdChfX0lYR0JFVkZfU0VSVklDRV9JTklURUQsIFxcdTAwMjZhZGFwdGVyLVxcdTAwM2VzdGF0ZSk7XFxuNDcyNDpcXHRcXHRjbGVhcl9iaXQoX19JWEdCRVZGX1NFUlZJQ0VfU0NIRUQsIFxcdTAwMjZhZGFwdGVyLVxcdTAwM2VzdGF0ZSk7XFxuNDcyNTpcXHRcXG40NzI2OlxcdFxcdGVyciA9IGl4Z2JldmZfaW5pdF9pbnRlcnJ1cHRfc2NoZW1lKGFkYXB0ZXIpO1xcbjQ3Mjc6XFx0XFx0aWYgKGVycilcXG40NzI4OlxcdFxcdFxcdGdvdG8gZXJyX3N3X2luaXQ7XFxuNDcyOTpcXHRcXG40NzMwOlxcdFxcdHN0cmNweShuZXRkZXYtXFx1MDAzZW5hbWUsIFxcXCJldGglZFxcXCIpO1xcbjQ3MzE6XFx0XFxuNDczMjpcXHRcXHRlcnIgPSByZWdpc3Rlcl9uZXRkZXYobmV0ZGV2KTtcXG40NzMzOlxcdFxcdGlmIChlcnIpXFxuNDczNDpcXHRcXHRcXHRnb3RvIGVycl9yZWdpc3RlcjtcXG40NzM1OlxcdFxcbjQ3MzY6XFx0XFx0cGNpX3NldF9kcnZkYXRhKHBkZXYsIG5ldGRldik7XFxuNDczNzpcXHRcXHRuZXRpZl9jYXJyaWVyX29mZihuZXRkZXYpO1xcbjQ3Mzg6XFx0XFx0aXhnYmV2Zl9pbml0X2lwc2VjX29mZmxvYWQoYWRhcHRlcik7XFxuNDczOTpcXHRcXG40NzQwOlxcdFxcdGl4Z2JldmZfaW5pdF9sYXN0X2NvdW50ZXJfc3RhdHMoYWRhcHRlcik7XFxuNDc0MTpcXHRcXG40NzQyOlxcdFxcdC8qIHByaW50IHRoZSBWRiBpbmZvICovXFxuNDc0MzpcXHRcXHRkZXZfaW5mbyhcXHUwMDI2cGRldi1cXHUwMDNlZGV2LCBcXFwiJXBNXFxcXG5cXFwiLCBuZXRkZXYtXFx1MDAzZWRldl9hZGRyKTtcXG40NzQ0OlxcdFxcdGRldl9pbmZvKFxcdTAwMjZwZGV2LVxcdTAwM2VkZXYsIFxcXCJNQUM6ICVkXFxcXG5cXFwiLCBody1cXHUwMDNlbWFjLnR5cGUpO1xcbjQ3NDU6XFx0XFxuNDc0NjpcXHRcXHRzd2l0Y2ggKGh3LVxcdTAwM2VtYWMudHlwZSkge1xcbjQ3NDc6XFx0XFx0Y2FzZSBpeGdiZV9tYWNfWDU1MF92ZjpcXG40NzQ4OlxcdFxcdFxcdGRldl9pbmZvKFxcdTAwMjZwZGV2LVxcdTAwM2VkZXYsIFxcXCJJbnRlbChSKSBYNTUwIFZpcnR1YWwgRnVuY3Rpb25cXFxcblxcXCIpO1xcbjQ3NDk6XFx0XFx0XFx0YnJlYWs7XFxuNDc1MDpcXHRcXHRjYXNlIGl4Z2JlX21hY19YNTQwX3ZmOlxcbjQ3NTE6XFx0XFx0XFx0ZGV2X2luZm8oXFx1MDAyNnBkZXYtXFx1MDAzZWRldiwgXFxcIkludGVsKFIpIFg1NDAgVmlydHVhbCBGdW5jdGlvblxcXFxuXFxcIik7XFxuNDc1MjpcXHRcXHRcXHRicmVhaztcXG40NzUzOlxcdFxcdGNhc2UgaXhnYmVfbWFjX2U2MTBfdmY6XFxuNDc1NDpcXHRcXHRcXHRkZXZfaW5mbyhcXHUwMDI2cGRldi1cXHUwMDNlZGV2LCBcXFwiSW50ZWwoUikgRTYxMCBWaXJ0dWFsIEZ1bmN0aW9uXFxcXG5cXFwiKTtcXG40NzU1OlxcdFxcdFxcdGJyZWFrO1xcbjQ3NTY6XFx0XFx0Y2FzZSBpeGdiZV9tYWNfODI1OTlfdmY6XFxuNDc1NzpcXHRcXHRkZWZhdWx0OlxcbjQ3NTg6XFx0XFx0XFx0ZGV2X2luZm8oXFx1MDAyNnBkZXYtXFx1MDAzZWRldiwgXFxcIkludGVsKFIpIDgyNTk5IFZpcnR1YWwgRnVuY3Rpb25cXFxcblxcXCIpO1xcbjQ3NTk6XFx0XFx0XFx0YnJlYWs7XFxuNDc2MDpcXHRcXHR9XFxuNDc2MTpcXHRcXG40NzYyOlxcdFxcdHJldHVybiAwO1xcbjQ3NjM6XFx0XFxuNDc2NDpcXHRlcnJfcmVnaXN0ZXI6XFxuNDc2NTpcXHRcXHRpeGdiZXZmX2NsZWFyX2ludGVycnVwdF9zY2hlbWUoYWRhcHRlcik7XFxuNDc2NjpcXHRlcnJfc3dfaW5pdDpcXG40NzY3OlxcdFxcdGl4Z2JldmZfcmVzZXRfaW50ZXJydXB0X2NhcGFiaWxpdHkoYWRhcHRlcik7XFxuNDc2ODpcXHRcXHRpb3VubWFwKGFkYXB0ZXItXFx1MDAzZWlvX2FkZHIpO1xcbjQ3Njk6XFx0XFx0a2ZyZWUoYWRhcHRlci1cXHUwMDNlcnNzX2tleSk7XFxuNDc3MDpcXHRlcnJfaW9yZW1hcDpcXG40NzcxOlxcdFxcdGRpc2FibGVfZGV2ID0gIXRlc3RfYW5kX3NldF9iaXQoX19JWEdCRVZGX0RJU0FCTEVELCBcXHUwMDI2YWRhcHRlci1cXHUwMDNlc3RhdGUpO1xcbjQ3NzI6XFx0XFx0ZnJlZV9uZXRkZXYobmV0ZGV2KTtcXG40NzczOlxcdGVycl9hbGxvY19ldGhlcmRldjpcXG40Nzc0OlxcdFxcdHBjaV9yZWxlYXNlX3JlZ2lvbnMocGRldik7XFxuNDc3NTpcXHRlcnJfcGNpX3JlZzpcXG40Nzc2OlxcdGVycl9kbWE6XFxuNDc3NzpcXHRcXHRpZiAoIWFkYXB0ZXIgfHwgZGlzYWJsZV9kZXYpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI0VDE0OjIxOjU3LjgxOTc4MTcxM1oiLCJTZXEiOjI1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxMTgxNjAyNDk1OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBc3Nlc3NtZW50IG9mIFN5emthbGxlcidzIFJlYWNoIGludG8gaXhnYmV2ZioqXG5cbk9rYXksIHNvIGByZWdpc3Rlcl9uZXRkZXZgIGlzIGdldHRpbmcgY2FsbGVkLiBUaGF0J3MgZmFudGFzdGljISBUaGlzIGNvbmZpcm1zIHRoYXQgc3l6a2FsbGVyIGlzIHN1Y2Nlc3NmdWxseSBwcm9iaW5nIHRoZSBgaXhnYmV2ZmAgZHJpdmVyIGFuZCBtYW5hZ2luZyB0byByZWdpc3RlciBhIG5ldHdvcmsgZGV2aWNlLiBUaGF0J3MgdGhlIGNyaXRpY2FsIGZpcnN0IHN0ZXAuXG5cbk5vdywgd2l0aCB0aGUgbmV0ZGV2IHJlZ2lzdGVyZWQsIHdlJ3JlIGxpa2VseSB0byBzZWUgc3l6a2FsbGVyIGNhbGxpbmcgYGV0aHRvb2xgIG9uIGl0LCB3aGljaCwgb2YgY291cnNlLCB3aWxsIHRyaWdnZXIgYSBjYWxsIHRvIGBpeGdiZXZmX2dldF9saW5rX2tzZXR0aW5nc2AuIFRoYXQncyBvbmUgcGF0aC4gQW5kIHRoZSBzZXJ2aWNlIHRhc2sgYGl4Z2JldmZfc2VydmljZV90YXNrYCBtaWdodCBleGVjdXRlIGFzIHdlbGwsIGtpY2tpbmcgb2ZmIGEgY2hhaW46IGBpeGdiZXZmX3dhdGNoZG9nX3Rhc2tgIGNhbGxzIGBpeGdiZXZmX2NoZWNrX2xpbmtgLCB3aGljaCB0aGVuIGhpdHMgYGh3LVx1MDAzZW1hYy5vcHMuY2hlY2tfbGlua2AuIEFuZCB0aGF0LCBpbiB0dXJuLCBpcyBgaXhnYmV2Zl9odl9jaGVja19tYWNfbGlua192ZmAuXG5cblNvLCAqYm90aCogb2YgdGhlIG1vZGlmaWVkIGZ1bmN0aW9ucyBJIHdhcyBjb25jZXJuZWQgYWJvdXQg4oCTIGBpeGdiZXZmX2dldF9saW5rX2tzZXR0aW5nc2AgYW5kIGBpeGdiZXZmX2h2X2NoZWNrX21hY19saW5rX3ZmYCDigJMgYXJlIHJlYWNoYWJsZSB0aHJvdWdoIHN5emthbGxlcidzIFBDSSBmdXp6ZXIuIFRoYXQncyBleGNlbGxlbnQgbmV3cy5cblxuQnV0IHdhaXQsIEkgbmVlZCB0byBjb25maXJtIHNvbWV0aGluZy4gRG9lcyB0aGUgUENJIGZ1enplciAqYWN0dWFsbHkqIGZ1enogYGl4Z2JldmZgPyBJIG5lZWQgdG8gbWFrZSBzdXJlIHRoaXMgaXNuJ3QganVzdCBhIGhhcHB5IGFjY2lkZW50LlxuXG5ZZXMhIFN5emthbGxlcidzIFBDSSBmdXp6ZXIgZ2VuZXJhdGVzIHJhbmRvbSBQQ0kgZGV2aWNlcywgYW5kIGlmIGl0IGhhcHBlbnMgdG8gY3JlYXRlIGEgZGV2aWNlIHdpdGggYSBgdmVuZG9yX2lkYCBvZiBgMHg4MDg2YCBhbmQgYSBgZGV2aWNlX2lkYCBlcXVhbCB0byBgSVhHQkVfREVWX0lEX0U2MTBfVkZfSFZgICh0aGF0J3MgYDB4Mzc2NmAgb3Igc29tZXRoaW5nIGluIGRlY2ltYWwpLCB0aGVuIHRoZSBgaXhnYmV2ZmAgZHJpdmVyIHdpbGwgYmluZCB0byBpdC5cblxuSSdkIGJldHRlciBkb3VibGUtY2hlY2sgdGhvc2UgZGV2aWNlIElEcywgYnV0IHRoaXMgbG9va3MgdmVyeSBwcm9taXNpbmcuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjM3MzgzLCJPdXRwdXRUb2tlbnMiOjQ5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjcwLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjRUMTQ6MjI6MDkuNjM1ODA5NjEyWiIsIlNlcSI6MjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3MzE4NDU0NywiRXJyb3IiOiJubyBtYXRjaGVzIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiSVhHQkVfREVWX0lEX0U2MTBfVkZfSFZcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaXhnYmV2ZlwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJlcnJvclwiOiBcIm5vIG1hdGNoZXNcIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjRUMTQ6MjI6MDkuNzA5MDA5NloiLCJTZXEiOjI3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxMTAwMzk4MjkwOSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipBbmFseXppbmcgdGhlIFN1YmRldmljZSBJRCoqXG5cbk9rYXksIGhvbGQgb24gYSBzZWNvbmQuLi4ganVzdCBmbGFzaGluZyBiYWNrIHRocm91Z2ggdGhlIG1lbnRhbCBzdGFjayBoZXJlLiBJJ20gcHJldHR5IHN1cmUgSSBjYW1lIGFjcm9zcyBgSVhHQkVfU1VCREVWX0lEX0U2MTBfVkZfSFZgIGVhcmxpZXIgaW4gdGhlIGZsb3cuIFRoYXQgc3ViZGV2aWNlIElELCBmcm9tIHRoZSBJbnRlbCBFdGhlcm5ldCBDb250cm9sbGVyIEU2MTAgZmFtaWx5LCBpcyBpbXBvcnRhbnQuIFRoZSBcIlZGXCIgaW5kaWNhdGVzIHRoaXMgaXMgYSBWaXJ0dWFsIEZ1bmN0aW9uLiBLbm93aW5nIHRoYXQsIGFuZCB0aGF0IGl0J3MgcmVsYXRlZCB0byBIViAoSHlwZXItViksIHByb3ZpZGVzIHZhbHVhYmxlIGNvbnRleHQuIEkgbmVlZCB0byByZS1ldmFsdWF0ZSB0aGUgaW1wbGljYXRpb25zIG9mIHRoYXQgc3BlY2lmaWMgaWRlbnRpZmllciBpbiB0aGUgbGFyZ2VyIHN5c3RlbSBkZXNpZ24uIFRoaXMgc3VnZ2VzdHMgYSBwb3RlbnRpYWwgZm9jdXMgb24gdmlydHVhbGl6YXRpb24gb3IgbmV0d29yayBjb25maWd1cmF0aW9uIGZvciBhIEh5cGVyLVYgZW52aXJvbm1lbnQsIGFuZCBJIG5lZWQgdG8gY29uc2lkZXIgaG93IHRoaXMgc3BlY2lmaWMgZGV2aWNlIGZpdHMgaW50byB0aGUgb3ZlcmFsbCBhcmNoaXRlY3R1cmUsIGVzcGVjaWFsbHkgd2l0aCBob3cgaXQgaW50ZXJmYWNlcyBhbmQgd2hhdCBpdHMgY2FwYWJpbGl0aWVzIGFyZSBpbiBhIHZpcnR1YWxpemVkIHNldHRpbmcuIFRoZSBvcmlnaW5hbCBxdWVzdGlvbiBhbmQgc3Vycm91bmRpbmcgY29kZSBzaG91bGQgYmUgcmV2aXNpdGVkLlxuXG5cbiIsIklucHV0VG9rZW5zIjozODE0NywiT3V0cHV0VG9rZW5zIjo1MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI0VDE0OjIyOjIwLjcxMjk5NTk1OVoiLCJTZXEiOjI4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTkxNzQ4MDYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiSVhHQkVfU1VCREVWX0lEX0U2MTBfVkZfSFZcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaXhnYmV2ZlwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9peGdiZXZmL2RlZmluZXMuaC0xOS0jZGVmaW5lIElYR0JFX0RFVl9JRF9FNjEwX1ZGXFx0XFx0MHg1N0FEXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaXhnYmV2Zi9kZWZpbmVzLmg6MjA6I2RlZmluZSBJWEdCRV9TVUJERVZfSURfRTYxMF9WRl9IVlxcdDB4MDBGRlxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2l4Z2JldmYvZGVmaW5lcy5oLTIxLVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaXhnYmV2Zi9peGdiZXZmX21haW4uYz02Nj1zdGF0aWMgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgaXhnYmV2Zl9wY2lfdGJsW10gPSB7XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9peGdiZXZmL2l4Z2JldmZfbWFpbi5jLTk1LVxcdFxcdFBDSV9WREVWSUNFX1NVQihJTlRFTCwgSVhHQkVfREVWX0lEX0U2MTBfVkYsXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaXhnYmV2Zi9peGdiZXZmX21haW4uYzo5NjpcXHRcXHRcXHRcXHRQQ0lfQU5ZX0lELCBJWEdCRV9TVUJERVZfSURfRTYxMF9WRl9IViksXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaXhnYmV2Zi9peGdiZXZmX21haW4uYy05Ny1cXHRcXHQuZHJpdmVyX2RhdGEgPSBib2FyZF9lNjEwX3ZmX2h2LFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNFQxNDoyMjoyMC43NzIxNzU2MDVaIiwiU2VxIjoyOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTUzNzQ3Njc5NTgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqV29ydGhGdXp6aW5nIERlY2lzaW9uIGZvciBpeGdlYmV2ZioqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gV2UndmUgZ290IGEgUENJIGRldmljZSBJRCBvZiBgMHg1N0FEYCBhbmQgc3Vic3lzdGVtIElEIG9mIGAweDAwRkZgLiBTeXprYWxsZXIncyBQQ0kgZnV6emVyIGNhbiBkZWZpbml0ZWx5IGdlbmVyYXRlIHRoYXQuIFRoZSBjb2RlJ3MgcmVhY2hhYmxlLiBUaGF0J3MgYSBnb29kIHN0YXJ0aW5nIHBvaW50LiBCdXQgdGhlIHByb21wdC4uLiByaWdodCwgdGhlIGNyaXRlcmlhLiBJdCBzYXlzIHJldHVybiBgV29ydGhGdXp6aW5nPWZhbHNlYCBpZiB0aGUgcGF0Y2ggaW52b2x2ZXMgdW5yZWFjaGFibGUgY29kZSBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMsIHNwZWNpZmljYWxseSBjb2RlIHRoYXQgcmVxdWlyZXMgcmVhbCBoYXJkd2FyZS4gV2UgbmVlZCB0byBkZXRlcm1pbmUgaWYgdGhpcyBgaXhnYmV2ZmAgc3R1ZmYgZmFsbHMgaW50byB0aGF0LlxuXG5GaXJzdCB0aG91Z2h0OiBpcyBgaXhnYmV2ZmAgYSBcInZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJcIj8gTm8sIGl0J3MgYSBzdGFuZGFyZCBFdGhlcm5ldCBWRiBkcml2ZXIuIFRoYXQncyBnb29kLiBCdXQgZG9lcyBpdCByZXF1aXJlICpwaHlzaWNhbCogUENJZSBoYXJkd2FyZSBub3QgZW11bGF0ZWQgYnkgc3RhbmRhcmQgUUVNVT8gWWVzLCBpbiBhIHdheSwgaXQgZG9lcy4gSXQncyBtZWFudCB0byB3b3JrIG9uIHJlYWwgaGFyZHdhcmUuIEJ1dCBkb2VzIHRoaXMgbWVhbiBpdCdzIGV4Y2x1ZGVkP1xuXG5UaGUga2V5IGlzIFN5emthbGxlcidzIFBDSSBmdXp6ZXIuIEl0ICpjYW4qIHJlYWNoIHRoZSBjb2RlLCB3aGljaCBzdWdnZXN0cyBpdCAqaXMqIHNvbWV3aGF0IGVtdWxhdGVkLCBidXQgaXQncyBub3Qgc3RhbmRhcmQgUUVNVS4gU3l6a2FsbGVyIHVzZXMgaXRzIG93biBzb2Z0d2FyZSBlbXVsYXRpb24uIFRoZSBwcm9tcHQgKmRvZXMqIG1lbnRpb24gXCJzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZVwiIGxpa2UgVVNCIGdhZGdldCBhbmQgbWFjODAyMTFfaHdzaW0sIHNvIGl0IHNlZW1zIGxpa2Ugd2UgKnNob3VsZG4ndCogZXhjbHVkZSB0aGUgY29kZSBvbiB0aGlzIGJhc2lzIGFsb25lLlxuXG5UaGUgcHJvbXB0IGV4cGxpY2l0bHkgbGlzdHMgZHJpdmVycyBsaWtlIGBtbHhzd2AgYW5kIGBhbWRncHVgIGFzIGV4YW1wbGVzIG9mIGV4Y2x1c2lvbnMuIFRoZSBQQ0kgZnV6emVyICpjYW4qIHByb2JlIHRoZXNlIHRvbywgYnV0IHRoZXkncmUgY29tcGxleCBhbmQgcmVxdWlyZSByZWFsIGhhcmR3YXJlIGZvciAqdXNlZnVsKiBmdW5jdGlvbmFsaXR5LiBUaGV5J3JlIGJhc2ljYWxseSB1c2VsZXNzIGluIGEgZnVsbHkgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnQuIElzIGBpeGdiZXZmYCBpbiB0aGF0IHNhbWUgY2F0ZWdvcnk/IE5vLCBpdCdzIGEgcmVsYXRpdmVseSBzaW1wbGUgRXRoZXJuZXQgZHJpdmVyLiBTeXprYWxsZXIgY2FuIGFjdHVhbGx5IGdldCBpdCB0byByZWdpc3RlciBhIG5ldGRldiBhbmQgdGhlbiBmdXp6IHRoYXQgbmV0ZGV2LiBJbiBmYWN0LCBTeXprYWxsZXIgaGFzIGEgaGlzdG9yeSBvZiBmaW5kaW5nIGJ1Z3MgaW4gYGl4Z2JldmZgIGFuZCBgaXhnYmVgIHdpdGggdGhpcyB2ZXJ5IG1ldGhvZC4gSWYgU3l6a2FsbGVyIGNhbiByZWFjaCBpdCBhbmQgaXQncyBhIHN0YW5kYXJkIG5ldHdvcmsgZHJpdmVyLCB0aGlzIGxvb2tzIHByb21pc2luZy5cblxuTm93LCBsZXQncyBjb25maXJtIHRoZSB3b3J0aGluZXNzLiBTaW5jZSBJIGNhbm5vdCBzZWFyY2ggc3l6a2FsbGVyIGRlc2NyaXB0aW9ucywgSSdsbCBmb2N1cyBvbiB0aGUgcGF0Y2ggaXRzZWxmLiBUaGUgcGF0Y2ggdG91Y2hlcyBgaXhnYmV2Zl9nZXRfbGlua19rc2V0dGluZ3NgIGFuZCBgaXhnYmV2Zl9odl9jaGVja19tYWNfbGlua192ZmAuIEFscmlnaHQsIGFuZCBhbnkgc3BlY2lmaWMgY29uZmlndXJhdGlvbiBvcHRpb25zPyBBaCwgYENPTkZJR19JWEdCRVZGYCBpcyByZXF1aXJlZC4gR29vZC5cblxuQWxzbywgYGl4Z2JldmZfaHZfcmVhZF9saW5rc19lNjEwYCB1c2VzIGBwY2lfcmVhZF9jb25maWdfYnl0ZWAsIGFuZCB0aGVyZSdzIGEgY2hlY2sgdGhhdCBuZWVkcyBgQ09ORklHX1BDSV9NTUNPTkZJR2AuIEltcG9ydGFudDogYENPTkZJR19QQ0lfTU1DT05GSUdgIGlzIHJlcXVpcmVkIGZvciB0aGUgcmVhZCEgQW5kIHRoYXQncyBhbiB4ODYtc3BlY2lmaWMgY29uZmlnIChvciBtYXliZSBBUk0gdG9vKSwgc28gaXQgbmVlZHMgdG8gYmUgZW5hYmxlZCBmb3IgdGhhdCBjb2RlIHBhdGguXG5cbk9rYXksIHNvIFN5emthbGxlciBjYW4gcmVhY2ggaXQsIGl0J3MgYSBzdGFuZGFyZCBuZXR3b3JrIGRyaXZlciB0aGF0IGhhcyBiZWVuIHN1Y2Nlc3NmdWxseSBmdXp6ZWQsIGFuZCB0aGVyZSBhcmUgc3BlY2lmaWMgY29uZmlncy4gTG9va3MgbGlrZSB0aGlzIG9uZSBpcyB3b3J0aCBmdXp6aW5nLlxuXG5cbiIsIklucHV0VG9rZW5zIjozODc0NywiT3V0cHV0VG9rZW5zIjoyNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjg5NCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yNFQxNDoyMjozNi4xNDY5NDczODNaIiwiU2VxIjozMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIzMjkzMjc4NTgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIFBDSV9NTUNPTkZJR1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC94ODYvS2NvbmZpZz0yODcwPWNvbmZpZyBQQ0lfRElSRUNUXFxuLS1cXG5hcmNoL3g4Ni9LY29uZmlnLTI4NzMtXFxuYXJjaC94ODYvS2NvbmZpZzoyODc0OmNvbmZpZyBQQ0lfTU1DT05GSUdcXG5hcmNoL3g4Ni9LY29uZmlnLTI4NzUtXFx0Ym9vbCBcXFwiU3VwcG9ydCBtbWNvbmZpZyBQQ0kgY29uZmlnIHNwYWNlIGFjY2Vzc1xcXCIgaWYgWDg2XzY0XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI0VDE0OjIyOjM4LjQ3NjI4NDk4MloiLCJTZXEiOjMxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxMjA1NjkzNDk2MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBSZWFzb25pbmcgb24gUGF0Y2ggV29ydGhpbmVzcyBmb3IgRnV6emluZyoqXG5cbk9rYXksIHNvIEkgc2VlIHRoYXQgYENPTkZJR19QQ0lfTU1DT05GSUdgIGlzIGluZGVlZCBkZWZpbmVkIGluIGBhcmNoL3g4Ni9LY29uZmlnYCwgbWVhbmluZyB0aGF0IGBQQ0lfTU1DT05GSUdgIHNob3VsZCBiZSBlbmFibGVkLCBhbmQgY29uc2VxdWVudGx5LCBzbyBzaG91bGQgYElYR0JFVkZgLiBMZXQgbWUgcmUtcmVhZCB0aGUgcHJvbXB0IHRvIG1ha2Ugc3VyZSBJJ20gb24gdGhlIHJpZ2h0IHRyYWNrOiBpdCB3YW50cyBtZSB0byByZXR1cm4gYFdvcnRoRnV6emluZz1mYWxzZWAgaWYgdGhlIHBhdGNoICpvbmx5KiB0b3VjaGVzIHVucmVhY2hhYmxlIGNvZGUgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzLiBTcGVjaWZpY2FsbHksIGNvZGUgdGhhdCBuZWVkcyBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIG9yIHRoYXQncyBmdW5kYW1lbnRhbGx5IGltcG9zc2libGUgdG8gZW11bGF0ZSwgbGlrZSBVU0IgZ2FkZ2V0cyBvciB2ZW5kb3Itc3BlY2lmaWMgZHJpdmVycy5cblxuTm93LCBpcyBgaXhnYmV2ZmAgYSBTbWFydE5JQz8gTm8sIHRoYXQncyBhIHN0YW5kYXJkIE5JQy4gQW5kIGlzIHRoZSBjb2RlIHVucmVhY2hhYmxlPyBEZWZpbml0ZWx5IG5vdC4gU3l6a2FsbGVyJ3MgUENJIGZ1enplciBjYW4gZGVmaW5pdGVseSByZWFjaCBgaXhnYmV2ZmAuIFRoYXQgcG9pbnQgdGhyb3dzIG1lLCB0aG91Z2guIFRoZSBwcm9tcHQgbWVudGlvbnMgcmVxdWlyaW5nIHBoeXNpY2FsIGhhcmR3YXJlLCB3aGljaCBnb3QgbWUgdGhpbmtpbmcgYWJvdXQgY29tcGxleCBkZXZpY2VzLiBDb21wbGV4IGRldmljZXMgbGlrZSBHUFVzIG9yIFNtYXJ0TklDcyAoYW1kZ3B1LCBtbHhzdywgZXRjLikgbWF5IG9ubHkgZ2V0IHRoZSBwcm9iZSBmdW5jdGlvbiBoaXQgdmlhIHRoZSBQQ0kgZnV6emVyIGFuZCB0aGVuIHRoZXkncmUgc3R1Y2sgYmVjYXVzZSB0aGUgZnV6emVyIGNhbid0IGhhbmRsZSB0aGUgY29tcGxpY2F0ZWQgRE1BIHJpbmdzIG9yIGZpcm13YXJlIGxvYWRpbmcgcmVxdWlyZWQgdG8gZ2V0IHRoZSAqY29yZSogbG9naWMgd29ya2luZy4gSXQncyBsaWtlIHRoZSBmdXp6ZXIgaGl0cyB0aGUgZnJvbnQgZG9vciBidXQgY2FuJ3QgZ2V0IHBhc3QgdGhlIGZveWVyLlxuXG5CdXQgYGl4Z2JldmZgIGlzIGRpZmZlcmVudC4gSXQncyBhIFZpcnR1YWwgRnVuY3Rpb24gKFZGKSBkcml2ZXIsIHNvIGl0cyBwcm9iZSBmdW5jdGlvbiBjYW4gc3VjY2VlZCBiZWNhdXNlIGl0J3Mgc2ltcGxlci4gSXQncyBub3QgZ29pbmcgdG8gbmVlZCB0aGF0IGNvbXBsZXggZmlybXdhcmUgbG9hZGluZzsgdGhlIFBoeXNpY2FsIEZ1bmN0aW9uIChQRikgaGFuZGxlcyB0aGF0LlxuXG5IbW0sIHdhaXQuIERvZXMgYGl4Z2JldmZgIHN0aWxsIHJlcXVpcmUgc29tZSBtYWlsYm94IGNvbW11bmljYXRpb24gd2l0aCB0aGUgUEYgdG8gaW5pdGlhbGl6ZT8gVGhhdCdzIGEgZ29vZCBwb2ludCB0byBjaGVjayEgTGV0J3MgZXhhbWluZSB0aGUgYGl4Z2JldmZfc3dfaW5pdGAgZnVuY3Rpb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQwNDU1LCJPdXRwdXRUb2tlbnMiOjUxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6Mzg2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI0VDE0OjIyOjUwLjUzMzIyMjk5NFoiLCJTZXEiOjMyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNTQzODAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaXhnYmV2Zi9peGdiZXZmX21haW4uY1wiLFxuICBcIkZpcnN0TGluZVwiOiAzMTE3LFxuICBcIkxpbmVDb3VudFwiOiAyMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIzMTE3OlxcdFxcdGVyciA9IGh3LVxcdTAwM2VtYWMub3BzLnJlc2V0X2h3KGh3KTtcXG4zMTE4OlxcdFxcdGlmIChlcnIpIHtcXG4zMTE5OlxcdFxcdFxcdGRldl9pbmZvKFxcdTAwMjZwZGV2LVxcdTAwM2VkZXYsXFxuMzEyMDpcXHRcXHRcXHRcXHQgXFxcIlBGIHN0aWxsIGluIHJlc2V0IHN0YXRlLiAgSXMgdGhlIFBGIGludGVyZmFjZSB1cD9cXFxcblxcXCIpO1xcbjMxMjE6XFx0XFx0fSBlbHNlIHtcXG4zMTIyOlxcdFxcdFxcdGVyciA9IGh3LVxcdTAwM2VtYWMub3BzLmluaXRfaHcoaHcpO1xcbjMxMjM6XFx0XFx0XFx0aWYgKGVycikge1xcbjMxMjQ6XFx0XFx0XFx0XFx0cHJfZXJyKFxcXCJpbml0X3NoYXJlZF9jb2RlIGZhaWxlZDogJWRcXFxcblxcXCIsIGVycik7XFxuMzEyNTpcXHRcXHRcXHRcXHRnb3RvIG91dDtcXG4zMTI2OlxcdFxcdFxcdH1cXG4zMTI3OlxcdFxcdFxcdGl4Z2JldmZfbmVnb3RpYXRlX2FwaShhZGFwdGVyKTtcXG4zMTI4OlxcdFxcdFxcdGVyciA9IGh3LVxcdTAwM2VtYWMub3BzLmdldF9tYWNfYWRkcihodywgaHctXFx1MDAzZW1hYy5hZGRyKTtcXG4zMTI5OlxcdFxcdFxcdGlmIChlcnIpXFxuMzEzMDpcXHRcXHRcXHRcXHRkZXZfaW5mbyhcXHUwMDI2cGRldi1cXHUwMDNlZGV2LCBcXFwiRXJyb3IgcmVhZGluZyBNQUMgYWRkcmVzc1xcXFxuXFxcIik7XFxuMzEzMTpcXHRcXHRcXHRlbHNlIGlmIChpc196ZXJvX2V0aGVyX2FkZHIoYWRhcHRlci1cXHUwMDNlaHcubWFjLmFkZHIpKVxcbjMxMzI6XFx0XFx0XFx0XFx0ZGV2X2luZm8oXFx1MDAyNnBkZXYtXFx1MDAzZWRldixcXG4zMTMzOlxcdFxcdFxcdFxcdFxcdCBcXFwiTUFDIGFkZHJlc3Mgbm90IGFzc2lnbmVkIGJ5IGFkbWluaXN0cmF0b3IuXFxcXG5cXFwiKTtcXG4zMTM0OlxcdFxcdFxcdGV0aF9od19hZGRyX3NldChuZXRkZXYsIGh3LVxcdTAwM2VtYWMuYWRkcik7XFxuMzEzNTpcXHRcXHR9XFxuMzEzNjpcXHRcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjRUMTQ6MjI6NTAuNTMzNDc5OTI0WiIsIlNlcSI6MzMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjE0OTk3MTA2MTgxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKlJlYWNoaW5nIEZ1enphYmxlIENvZGUgaW4gdGhlIGl4Z2JldmYgRHJpdmVyKipcblxuT2theSwgc28gaWYgYHJlc2V0X2h3YCBmYWlscywgdGhlIGRyaXZlciBqdXN0IGtlZXBzIGdvaW5nPyBUaGF0J3MuLi5pbnRlcmVzdGluZy4gRG9lcyBpdCByZWdpc3RlciB0aGUgbmV0d29yayBkZXZpY2UgKGBuZXRkZXZgKSBhbnl3YXk/IExvb2tzIGxpa2UgaXQgZG9lcy4gTGV0J3MgdHJhY2UgdGhpcyBmYWlsdXJlIHNjZW5hcmlvLiBJZiBgcmVzZXRfaHdgIHJldHVybnMgYW4gZXJyb3IgKGBlcnJgIG5vbi16ZXJvKSwgaXQgc2tpcHMgaW5pdGlhbGl6YXRpb24gc3RlcHMgbGlrZSBgaW5pdF9od2AsIGBuZWdvdGlhdGVfYXBpYCwgYW5kIGBnZXRfbWFjX2FkZHJgLiBUaGVuLCBpdCBsYW5kcyBoZXJlOlxuXG5gYGBjXG5cdGlmICghaXNfdmFsaWRfZXRoZXJfYWRkcihuZXRkZXYtXHUwMDNlZGV2X2FkZHIpKSB7XG5cdFx0ZGV2X2luZm8oXHUwMDI2cGRldi1cdTAwM2VkZXYsIFwiQXNzaWduaW5nIHJhbmRvbSBNQUMgYWRkcmVzc1xcblwiKTtcblx0XHRldGhfaHdfYWRkcl9yYW5kb20obmV0ZGV2KTtcblx0XHRldGhlcl9hZGRyX2NvcHkoaHctXHUwMDNlbWFjLmFkZHIsIG5ldGRldi1cdTAwM2VkZXZfYWRkcik7XG5cdFx0ZXRoZXJfYWRkcl9jb3B5KGh3LVx1MDAzZW1hYy5wZXJtX2FkZHIsIG5ldGRldi1cdTAwM2VkZXZfYWRkcik7XG5cdH1cbmBgYFxuXG5BbmQgcmV0dXJucyAwISBTbyBiYXNpY2FsbHksIGBpeGdiZXZmX3N3X2luaXRgICpzdWNjZWVkcyogZXZlbiBpZiB0aGUgbWFpbGJveCBjb21tdW5pY2F0aW9uIHdpdGggdGhlIHBoeXNpY2FsIGZ1bmN0aW9uIChQRikgZmFpbHMuIFRoaXMgbWVhbnMgdGhlIGRyaXZlciB3aWxsIHByb2JlIGFuZCByZWdpc3RlciB0aGUgbmV0d29yayBkZXZpY2UsIGV2ZW4gd2l0aCBhIGNvbXBsZXRlbHkgZHVtYiBmYWtlIFBDSSBkZXZpY2UgdGhhdCBqdXN0IHJldHVybnMgMHhGRkZGRkZGRiBmb3IgYWxsIE1NSU8gcmVhZHMuIEJyaWxsaWFudCFcblxuT25jZSB0aGUgbmV0ZGV2IGlzIHJlZ2lzdGVyZWQsIHVzZXJzcGFjZSB0b29scyBsaWtlIGBldGh0b29sYCBjYW4gYmUgdXNlZCwgd2hpY2ggY2FsbHMgYGl4Z2JldmZfZ2V0X2xpbmtfa3NldHRpbmdzYC4gQW5kICp0aGF0J3MqIHdoZXJlIHRoZSBuZXcgY29kZSBleGVjdXRlczpcblxuYGBgY1xuXHRpZiAoaHctXHUwMDNlbWFjLnR5cGUgPT0gaXhnYmVfbWFjX2U2MTBfdmYpIHtcblx0XHRzcGluX2xvY2tfYmgoXHUwMDI2YWRhcHRlci1cdTAwM2VtYnhfbG9jayk7XG5cdFx0aHctXHUwMDNlbWFjLmdldF9saW5rX3N0YXR1cyA9IHRydWU7XG5cdFx0aHctXHUwMDNlbWFjLm9wcy5jaGVja19saW5rKGh3LCBcdTAwMjZhZGFwdGVyLVx1MDAzZWxpbmtfc3BlZWQsXG5cdFx0XHRcdCAgICAgICBcdTAwMjZhZGFwdGVyLVx1MDAzZWxpbmtfdXAsIGZhbHNlKTtcblx0XHRzcGluX3VubG9ja19iaChcdTAwMjZhZGFwdGVyLVx1MDAzZW1ieF9sb2NrKTtcblx0fVxuYGBgXG5cbkFuZCBgaHctXHUwMDNlbWFjLm9wcy5jaGVja19saW5rYCBpcyBhY3R1YWxseSBgaXhnYmV2Zl9odl9jaGVja19tYWNfbGlua192ZmAgZm9yIEh5cGVyLVYuIFRoaXMgZnVuY3Rpb24gY2FsbHMgYGl4Z2JldmZfaHZfcmVhZF9saW5rc19lNjEwYCwgd2hpY2ggbWFrZXMgYSBgcGNpX3JlYWRfY29uZmlnX2J5dGVgIGNhbGwuIEFuZCBoZXJlJ3MgdGhlIGtpY2tlcjogU3l6a2FsbGVyJ3MgUENJIGZ1enplciAqaW50ZXJjZXB0cyogYHBjaV9yZWFkX2NvbmZpZ19ieXRlYCBhbmQgcmV0dXJucyBmdXp6ZWQgZGF0YSEgVGhpcyBpcyBnb2xkIVxuXG5TbywgdGhpcyBjb2RlIHBhdGggaXMgMTAwJSByZWFjaGFibGUgYW5kIGZ1enphYmxlIGJ5IHN5emthbGxlci4gQW1hemluZyFcblxuT2theSwgbGV0J3MgaWRlbnRpZnkgdGhlIGZvY3VzIHN5bWJvbHMuIFRoZSBtb2RpZmllZCBmdW5jdGlvbnMgYXJlOlxuLSBgaXhnYmV2Zl9nZXRfbGlua19rc2V0dGluZ3NgXG4tIGBpeGdiZXZmX2h2X2NoZWNrX21hY19saW5rX3ZmYFxuLSBgaXhnYmV2Zl9odl9yZWFkX2xpbmtzX2U2MTBgIChzdGF0aWMsIHNvIG1heWJlIG5vdCB0aGUgYmVzdCwgYnV0IGBpeGdiZXZmX2h2X2NoZWNrX21hY19saW5rX3ZmYCBpcyBhIGdvb2Qgb25lKS5cblxuV2FpdCwgYm90aCBhcmUgc3RhdGljPyBMZXQncyBjaGVjayBpZiBgaXhnYmV2Zl9odl9jaGVja19tYWNfbGlua192ZmAgaXMgc3RhdGljLlxuXG5cbiIsIklucHV0VG9rZW5zIjo0MTY0MSwiT3V0cHV0VG9rZW5zIjo0NywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjY5NSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI0VDE0OjIzOjA1LjUzMDU4ODg3NVoiLCJTZXEiOjM0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTExMzE5MjUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiaXhnYmV2Zl9odl9jaGVja19tYWNfbGlua192ZlwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9peGdiZXZmXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2l4Z2JldmYvdmYuYz05MTg9c3RhdGljIHMzMiBpeGdiZXZmX2h2X3JlYWRfbGlua3NfZTYxMChzdHJ1Y3QgaXhnYmVfaHcgKmh3LCB1MzIgKmxpbmtzX3JlZylcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2l4Z2JldmYvdmYuYy05NDEtLyoqXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaXhnYmV2Zi92Zi5jOjk0MjogKiBpeGdiZXZmX2h2X2NoZWNrX21hY19saW5rX3ZmIC0gY2hlY2sgbGlua1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2l4Z2JldmYvdmYuYy05NDMtICogQGh3OiBwb2ludGVyIHRvIHByaXZhdGUgaGFyZHdhcmUgc3RydWN0XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9peGdiZXZmL3ZmLmMtOTUwLSAqL1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2l4Z2JldmYvdmYuYzo5NTE6c3RhdGljIHMzMiBpeGdiZXZmX2h2X2NoZWNrX21hY19saW5rX3ZmKHN0cnVjdCBpeGdiZV9odyAqaHcsXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaXhnYmV2Zi92Zi5jLTk1Mi1cXHRcXHRcXHRcXHRcXHRpeGdiZV9saW5rX3NwZWVkICpzcGVlZCxcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2l4Z2JldmYvdmYuYz0xMTk0PXN0YXRpYyBjb25zdCBzdHJ1Y3QgaXhnYmVfbWFjX29wZXJhdGlvbnMgaXhnYmV2Zl9odl9tYWNfb3BzID0ge1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaXhnYmV2Zi92Zi5jLTEyMDAtXFx0LnNldHVwX2xpbmtcXHRcXHQ9IGl4Z2JldmZfc2V0dXBfbWFjX2xpbmtfdmYsXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaXhnYmV2Zi92Zi5jOjEyMDE6XFx0LmNoZWNrX2xpbmtcXHRcXHQ9IGl4Z2JldmZfaHZfY2hlY2tfbWFjX2xpbmtfdmYsXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaXhnYmV2Zi92Zi5jLTEyMDItXFx0Lm5lZ290aWF0ZV9hcGlfdmVyc2lvblxcdD0gaXhnYmV2Zl9odl9uZWdvdGlhdGVfYXBpX3ZlcnNpb25fdmYsXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI0VDE0OjIzOjA1LjU4MTcyNjU5WiIsIlNlcSI6MzUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjEyODc5NTU1Mzk0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgU3RhdGljIEZ1bmN0aW9uIFVzZSoqXG5cbk9rYXksIHNvIEkgc2VlIGEgc3RhdGljIGZ1bmN0aW9uIGhlcmUuIFRoZSBpbml0aWFsIGltcHJlc3Npb24gbWlnaHQgYmUgdGhhdCBpdCdzIHByb2JsZW1hdGljLCBhcyB0aGUgcHJvbXB0IGRpc2NvdXJhZ2VzIHRoZSB1c2Ugb2Ygc3RhdGljIGhlbHBlciBmdW5jdGlvbnMgYmVjYXVzZSB0aGV5J3JlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkb24ndCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMuIEJ1dCwgd2FpdC4uLiBJIGhhdmUgdG8gbG9vayBkZWVwZXIuIFRoZSBrZXkgaGVyZSBpcyB0aGUgKmZ1bmN0aW9uIHBvaW50ZXIqIGFzc2lnbm1lbnQuIGBjaGVja19saW5rYCwgc3BlY2lmaWNhbGx5IGBpeGdiZXZmX2h2X2NoZWNrX21hY19saW5rX3ZmYCwgaXMgYXNzaWduZWQgdG8gYSBmdW5jdGlvbiBwb2ludGVyIHdpdGhpbiBgaXhnYmV2Zl9odl9tYWNfb3BzYC4gU2luY2Ugd2UgYXJlIHRha2luZyB0aGUgZnVuY3Rpb24ncyBhZGRyZXNzLCBpdCAqY2Fubm90KiBiZSBmdWxseSBpbmxpbmVkLiBDb25zZXF1ZW50bHksIHRoaXMgZnVuY3Rpb24gd2lsbCBkZWZpbml0ZWx5IGhhdmUgYSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzcyBhbmQgaXMgcGVyZmVjdGx5IGZpbmUgYXMgYSBmb2N1cyBzeW1ib2wsIGV2ZW4gaWYgaXQncyB0ZWNobmljYWxseSBzdGF0aWMuXG5cbkkgc2VlIHRoZSBzYW1lIHNpdHVhdGlvbiB3aXRoIGBpeGdiZXZmX2dldF9saW5rX2tzZXR0aW5nc2AuIEl0J3MgYWxzbyBkZWNsYXJlZCBzdGF0aWMsIGhvd2V2ZXIsIEkgc2VlIHRoYXQgaXQncyBiZWluZyBhc3NpZ25lZCB0byBgZXRodG9vbF9vcHMuZ2V0X2xpbmtfa3NldHRpbmdzYC4gQmVjYXVzZSBpdHMgYWRkcmVzcyBpcyBhbHNvIHRha2VuLCB0aGlzIHRvbyB3aWxsIHJlc3VsdCBpbiBhIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzLlxuXG5Ob3csIGxldCdzIHR1cm4gb3VyIGF0dGVudGlvbiB0byBgaXhnYmV2Zl9nZXRfbGlua19rc2V0dGluZ3NgLlxuXG5cbiIsIklucHV0VG9rZW5zIjo0MzU2NiwiT3V0cHV0VG9rZW5zIjo0NCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE5OCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yNFQxNDoyMzoxOC40NjEyODQwMjRaIiwiU2VxIjozNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEwNjg5Mjg2MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJpeGdiZXZmX2dldF9saW5rX2tzZXR0aW5nc1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9peGdiZXZmXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2l4Z2JldmYvZXRodG9vbC5jPTc1PXN0YXRpYyBjb25zdCBjaGFyIGl4Z2JldmZfcHJpdl9mbGFnc19zdHJpbmdzW11bRVRIX0dTVFJJTkdfTEVOXSA9IHtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2l4Z2JldmYvZXRodG9vbC5jLTgxLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2l4Z2JldmYvZXRodG9vbC5jOjgyOnN0YXRpYyBpbnQgaXhnYmV2Zl9nZXRfbGlua19rc2V0dGluZ3Moc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldixcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9peGdiZXZmL2V0aHRvb2wuYy04My1cXHRcXHRcXHRcXHQgICAgICBzdHJ1Y3QgZXRodG9vbF9saW5rX2tzZXR0aW5ncyAqY21kKVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaXhnYmV2Zi9ldGh0b29sLmM9OTc3PXN0YXRpYyBjb25zdCBzdHJ1Y3QgZXRodG9vbF9vcHMgaXhnYmV2Zl9ldGh0b29sX29wcyA9IHtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2l4Z2JldmYvZXRodG9vbC5jLTk5Ny1cXHQuZ2V0X3J4ZmhcXHRcXHQ9IGl4Z2JldmZfZ2V0X3J4ZmgsXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaXhnYmV2Zi9ldGh0b29sLmM6OTk4OlxcdC5nZXRfbGlua19rc2V0dGluZ3NcXHQ9IGl4Z2JldmZfZ2V0X2xpbmtfa3NldHRpbmdzLFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2l4Z2JldmYvZXRodG9vbC5jLTk5OS1cXHQuZ2V0X3ByaXZfZmxhZ3NcXHRcXHQ9IGl4Z2JldmZfZ2V0X3ByaXZfZmxhZ3MsXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI0VDE0OjIzOjE4LjU2ODE4NDA0NFoiLCJTZXEiOjM3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo2NTk2NTk5NDY4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgSXhnYmV2ZiBEcml2ZXIgU3ltYm9scyoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoZXNlIGZ1bmN0aW9uIHBvaW50ZXJzLCBgaXhnYmV2Zl9nZXRfbGlua19rc2V0dGluZ3NgIGFuZCBgaXhnYmV2Zl9odl9jaGVja19tYWNfbGlua192ZmAuIFRoZXkncmUgc3RhdGljLCBidXQgdGhleSdyZSBhc3NpZ25lZCB0byBmdW5jdGlvbiBwb2ludGVycywgd2hpY2ggaXMgaW1wb3J0YW50LiBUaGlzIG1lYW5zIHRoZXNlIGFyZSB0aGUga2V5IHN5bWJvbHMgdG8gZm9jdXMgb24gZm9yIHRoaXMgZHJpdmVyLiBUaGV5J3JlIGxpa2VseSB0aGUgZW50cnkgcG9pbnRzIGZvciBzcGVjaWZpYyBsaW5rIGNvbmZpZ3VyYXRpb24gYW5kIE1BQy1yZWxhdGVkIFZGIGNoZWNrcy5cblxuTm93LCBJIG5lZWQgdG8gY29uc2lkZXIgYW55IHJlcXVpcmVkIGNvbmZpZ3VyYXRpb25zLiBMZXQncyBzZWUuLi4gYElYR0JFVkZgIGFuZCBgUENJX01NQ09ORklHYCBpbW1lZGlhdGVseSBjb21lIHRvIG1pbmQuIEknbGwgbmVlZCB0byBkb3VibGUtY2hlY2sgYElYR0JFVkZgIHNwZWNpZmljYWxseSB0byBzZWUgaWYgaXQgcmVsaWVzIG9uIGFueSBvdGhlciBjb25maWd1cmF0aW9ucyBvciBkZXBlbmRlbmNpZXMgdGhhdCBtaWdodCBiZSByZWxldmFudC4gVGhpcyBpcyBpbXBvcnRhbnQgdG8gZW5zdXJlIGV2ZXJ5dGhpbmcgaXMgc2V0IHVwIGNvcnJlY3RseSBmb3IgdGhlc2UgZnVuY3Rpb24gcG9pbnRlcnMgdG8gd29yay5cblxuXG4iLCJJbnB1dFRva2VucyI6NDQ0MjMsIk91dHB1dFRva2VucyI6MzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo5MSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yNFQxNDoyMzoyNS4xNjQ3ODYwNzJaIiwiU2VxIjozOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjg5MTcyMDI4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBJWEdCRVZGXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvS2NvbmZpZz0xOTQ9Y29uZmlnIElYR0JFX0lQU0VDXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9LY29uZmlnLTIwMi1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9LY29uZmlnOjIwMzpjb25maWcgSVhHQkVWRlxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL0tjb25maWctMjA0LVxcdHRyaXN0YXRlIFxcXCJJbnRlbChSKSAxMEdiRSBQQ0kgRXhwcmVzcyBWaXJ0dWFsIEZ1bmN0aW9uIEV0aGVybmV0IHN1cHBvcnRcXFwiXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9LY29uZmlnLTIxOS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9LY29uZmlnOjIyMDpjb25maWcgSVhHQkVWRl9JUFNFQ1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL0tjb25maWctMjIxLVxcdGJvb2wgXFxcIklQU2VjIFhGUk0gY3J5cHRvZ3JhcGh5LW9mZmxvYWQgYWNjZWxlcmF0aW9uXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNFQxNDoyMzoyNS4yNTM5NjU5NFoiLCJTZXEiOjM5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0Mzk2NDU3NjIyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aGUgdGhvdWdodCBwcm9jZXNzLCBwcmVzZW50ZWQgYXMgYSBwZXJzb25hbCBzdW1tYXJ5OlxuXG4qKkRpZ2dpbmcgaW50byB0aGUgSW50ZWwgRXRoZXJuZXQgQ29uZmlndXJhdGlvbioqXG5cbk9rYXksIHRpbWUgdG8gZ2V0IG15IGhhbmRzIGRpcnR5IHdpdGggdGhlIEludGVsIEV0aGVybmV0IGRyaXZlcnMuIEknbSB0aGlua2luZyBJIG5lZWQgdG8gdW5kZXJzdGFuZCBzb21lIGNvbmZpZ3VyYXRpb24gb3B0aW9ucywgYW5kIEkgcmVtZW1iZXIgdGhpcyBgS2NvbmZpZ2AgZmlsZSBpbiB0aGUgYGRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsYCBkaXJlY3RvcnkgaXMgdXN1YWxseSB0aGUgcGxhY2UgdG8gc3RhcnQuIEknbSBzcGVjaWZpY2FsbHkgbG9va2luZyBhcm91bmQgbGluZSAyMDMsIHNvIEknbGwganVtcCB0aGVyZSBhbmQgc2VlIHdoYXQncyBiZWluZyBkZWZpbmVkIG9yIHJlZmVyZW5jZWQgYXJvdW5kIHRoYXQgcG9pbnQuIFRoaXMgd2lsbCBnaXZlIG1lIHNvbWUgY29udGV4dCBhYm91dCB3aGF0IHNldHRpbmdzIGFyZSBhdmFpbGFibGUgYW5kIGhvdyB0aGV5J3JlIHN0cnVjdHVyZWQuIExldCdzIHNlZSB3aGF0IGdlbXMgSSBjYW4gdW5jb3ZlciFcblxuXG4iLCJJbnB1dFRva2VucyI6NDQ5MjYsIk91dHB1dFRva2VucyI6MzksIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yNFQxNDoyMzoyOS42NTA0MjY2MjJaIiwiU2VxIjo0MCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTEwMDcwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogMjAwLFxuICBcIkxpbmVDb3VudFwiOiAyMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgMjAwOlxcdFxcdGhlbHBcXG4gMjAxOlxcdFxcdCAgRW5hYmxlIHN1cHBvcnQgZm9yIElQU2VjIG9mZmxvYWQgaW4gaXhnYmUua29cXG4gMjAyOlxcdFxcbiAyMDM6XFx0Y29uZmlnIElYR0JFVkZcXG4gMjA0OlxcdFxcdHRyaXN0YXRlIFxcXCJJbnRlbChSKSAxMEdiRSBQQ0kgRXhwcmVzcyBWaXJ0dWFsIEZ1bmN0aW9uIEV0aGVybmV0IHN1cHBvcnRcXFwiXFxuIDIwNTpcXHRcXHRkZXBlbmRzIG9uIFBDSV9NU0lcXG4gMjA2OlxcdFxcdGhlbHBcXG4gMjA3OlxcdFxcdCAgVGhpcyBkcml2ZXIgc3VwcG9ydHMgSW50ZWwoUikgUENJIEV4cHJlc3MgdmlydHVhbCBmdW5jdGlvbnMgZm9yIHRoZVxcbiAyMDg6XFx0XFx0ICBJbnRlbChSKSBpeGdiZSBkcml2ZXIuICBGb3IgbW9yZSBpbmZvcm1hdGlvbiBvbiBob3cgdG8gaWRlbnRpZnkgeW91clxcbiAyMDk6XFx0XFx0ICBhZGFwdGVyLCBnbyB0byB0aGUgQWRhcHRlciBcXHUwMDI2IERyaXZlciBJRCBHdWlkZSB0aGF0IGNhbiBiZSBsb2NhdGVkIGF0OlxcbiAyMTA6XFx0XFxuIDIxMTpcXHRcXHQgIFxcdTAwM2NodHRwOi8vc3VwcG9ydC5pbnRlbC5jb21cXHUwMDNlXFxuIDIxMjpcXHRcXG4gMjEzOlxcdFxcdCAgTW9yZSBzcGVjaWZpYyBpbmZvcm1hdGlvbiBvbiBjb25maWd1cmluZyB0aGUgZHJpdmVyIGlzIGluXFxuIDIxNDpcXHRcXHQgIFxcdTAwM2NmaWxlOkRvY3VtZW50YXRpb24vbmV0d29ya2luZy9kZXZpY2VfZHJpdmVycy9ldGhlcm5ldC9pbnRlbC9peGdiZXZmLnJzdFxcdTAwM2UuXFxuIDIxNTpcXHRcXG4gMjE2OlxcdFxcdCAgVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZS4gVGhlIG1vZHVsZVxcbiAyMTc6XFx0XFx0ICB3aWxsIGJlIGNhbGxlZCBpeGdiZXZmLiAgTVNJLVggaW50ZXJydXB0IHN1cHBvcnQgaXMgcmVxdWlyZWRcXG4gMjE4OlxcdFxcdCAgZm9yIHRoaXMgZHJpdmVyIHRvIHdvcmsgY29ycmVjdGx5LlxcbiAyMTk6XFx0XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI0VDE0OjIzOjI5LjY1MDUzODQ1MloiLCJTZXEiOjQxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo2Mzk3NzYwMjc3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IENvbmZpZ3VyYXRpb24gTXVzaW5ncyoqXG5cbk9rYXksIHNvIHdlJ3JlIGRpdmluZyBpbnRvIHRoaXMgY29uZmlndXJhdGlvbiwgYW5kIGl0IHJlYWxseSBoaW5nZXMgb24gYFBDSV9NU0lgLiBUaGF0J3MgdGhlIGNvcmUuIFNvLCBsb29raW5nIGF0IHRoZSBjcnVjaWFsIHBpZWNlcywgSSBuZWVkIHRvIG1ha2Ugc3VyZSBgSVhHQkVWRmAgaXMgc2V0LCBvYnZpb3VzbHkuIFRoZW4sIHdlIGFic29sdXRlbHkgbmVlZCBgUENJX01NQ09ORklHYC4gQW5kIHdoaWxlIGBQQ0lfTVNJYCBpcyB1c3VhbGx5IGVuYWJsZWQgYXMgYSBkZWZhdWx0IHNldHRpbmcsIEkgYWx3YXlzIHRoaW5rIGl0J3MgcHJ1ZGVudCB0byBpbmNsdWRlIGl0IGV4cGxpY2l0bHkgZm9yIGNsYXJpdHkgYW5kIHRvIGVuc3VyZSB3ZSBkb24ndCBtaXNzIGFueXRoaW5nLiBCZXR0ZXIgc2FmZSB0aGFuIHNvcnJ5IHdoZW4gY29uZmlndXJpbmcgdGhlc2Ugc3lzdGVtcy5cblxuTm93LCBiZWZvcmUgSSBwcm9jZWVkIGZ1cnRoZXIsIEkgd2FudCB0byBkb3VibGUtY2hlY2sgdGhhdCBgUENJX01NQ09ORklHYCBkb2Vzbid0IGhhdmUgYW55IGhpZGRlbiBkZXBlbmRlbmNpZXMgbHVya2luZyBpbiB0aGUgc2hhZG93cyB0aGF0IEkgbWlnaHQgaGF2ZSBvdmVybG9va2VkLiBHb3R0YSBtYWtlIHN1cmUgZXZlcnl0aGluZyBpcyBpbiBwbGFjZSB0byBtaW5pbWl6ZSBlcnJvcnMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQ1NDY2LCJPdXRwdXRUb2tlbnMiOjM3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NjcsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yNFQxNDoyMzozNi4wNDgzMDMwNzlaIiwiU2VxIjo0MiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjA4MjIwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImFyY2gveDg2L0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogMjg3MCxcbiAgXCJMaW5lQ291bnRcIjogMTBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMjg3MDpcXHRjb25maWcgUENJX0RJUkVDVFxcbjI4NzE6XFx0XFx0ZGVmX2Jvb2wgeVxcbjI4NzI6XFx0XFx0ZGVwZW5kcyBvbiBQQ0kgXFx1MDAyNlxcdTAwMjYgKFg4Nl82NCB8fCAoUENJX0dPRElSRUNUIHx8IFBDSV9HT0FOWSB8fCBQQ0lfR09PTFBDIHx8IFBDSV9HT01NQ09ORklHKSlcXG4yODczOlxcdFxcbjI4NzQ6XFx0Y29uZmlnIFBDSV9NTUNPTkZJR1xcbjI4NzU6XFx0XFx0Ym9vbCBcXFwiU3VwcG9ydCBtbWNvbmZpZyBQQ0kgY29uZmlnIHNwYWNlIGFjY2Vzc1xcXCIgaWYgWDg2XzY0XFxuMjg3NjpcXHRcXHRkZWZhdWx0IHlcXG4yODc3OlxcdFxcdGRlcGVuZHMgb24gUENJIFxcdTAwMjZcXHUwMDI2IChBQ1BJIHx8IEpBSUxIT1VTRV9HVUVTVClcXG4yODc4OlxcdFxcdGRlcGVuZHMgb24gWDg2XzY0IHx8IChQQ0lfR09BTlkgfHwgUENJX0dPTU1DT05GSUcpXFxuMjg3OTpcXHRcXHRoZWxwXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI0VDE0OjIzOjM2LjA0ODUxMzUyOVoiLCJTZXEiOjQzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxMTQzOTk3NDI5MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBbmFseXNpcyBvZiB0aGUgYGl4Z2JldmZgIERyaXZlcidzIExpbmsgU3BlZWQgRmVhdHVyZSBhbmQgQ29uZmlndXJhdGlvbiBEZXBlbmRlbmNpZXMqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIE15IGluaXRpYWwgdGhvdWdodCB3YXMgYWJvdXQgdGhlIGRlcGVuZGVuY3kgY2hhaW4uIFRoZSBwYXRjaCBhZGRzIGZ1bmN0aW9uYWxpdHkgdG8gdGhlIGBpeGdiZXZmYCBkcml2ZXIg4oCTIHNwZWNpZmljYWxseSwgcmV0cmlldmluZyBsaW5rIHNwZWVkIGluZm9ybWF0aW9uIGZyb20gdGhlIGVtdWxhdGVkIFBDSSBjb25maWd1cmF0aW9uIHNwYWNlIGZvciBIeXBlci1WIEU2MTAgVmlydHVhbCBGdW5jdGlvbnMuIFRoaXMgaXMgYWNjZXNzZWQgdmlhIHRoZSBgaXhnYmV2Zl9nZXRfbGlua19rc2V0dGluZ3NgIGV0aHRvb2wgY2FsbGJhY2sgYW5kIHRoZSBkcml2ZXIncyBwZXJpb2RpYyBsaW5rIGNoZWNrIHRhc2sgKGBpeGdiZXZmX2h2X2NoZWNrX21hY19saW5rX3ZmYCkuXG5cbk15IGNvbmNlcm4sIGluaXRpYWxseSwgd2FzIHdoZXRoZXIgYFBDSV9NTUNPTkZJR2Agd2FzICpzdHJpY3RseSogcmVxdWlyZWQgZm9yIGNvbXBpbGF0aW9uLiBUaGUgY29kZSBzbmlwcGV0IHdpdGggYGRldl9lcnJfb25jZWAgc2VlbXMgdG8gc3VnZ2VzdCB0aGF0IHRoZSBkcml2ZXIgd2lsbCBjb21waWxlIHdpdGhvdXQgaXQsIGJ1dCBhdHRlbXB0aW5nIHRvICpleGVjdXRlKiB0aGUgbmV3IGxvZ2ljLCB0aGUgYHBjaV9yZWFkX2NvbmZpZ19ieXRlYCBsb29wIHNwZWNpZmljYWxseSwgd2lsbCBmYWlsIGFuZCByZXR1cm4gLUVPUE5PVFNVUFAgaWYgYFBDSV9NTUNPTkZJR2AgaXMgZGlzYWJsZWQuIFNvLCBpdCdzIG5vdCBhIGNvbXBpbGF0aW9uIGJsb2NrZXIsIGJ1dCBhYnNvbHV0ZWx5IGVzc2VudGlhbCBmb3IgdGVzdGluZyB0aGlzIG5ldyBmZWF0dXJlLlxuXG5Ib3cgZG9lcyBhIGZ1enppbmcgdGVzdCByZWFjaCB0aGlzIGNvZGU/IEFoLCBTeXprYWxsZXIuIEl0IGxldmVyYWdlcyBhIFBDSSBkZXZpY2UgZnV6emVyIHRvIGVtdWxhdGUgdGhlIHNwZWNpZmljIFZGIGRldmljZSBJRC4gQnkgc2ltdWxhdGluZyB0aGlzIHNwZWNpZmljIGRldmljZSBJRCBhbmQgdGhlbiBpbnRlcmFjdGluZyB3aXRoIHRoZSByZWdpc3RlcmVkIG5ldHdvcmsgZGV2aWNlIHRocm91Z2ggZXRodG9vbCBvciB3YWl0aW5nIGZvciB0aGUgYmFja2dyb3VuZCB0YXNrLCB0aGUgbmV3IFBDSSBjb25maWcgc3BhY2UgcmVhZCBmdW5jdGlvbmFsaXR5IGNhbiBiZSBleGVyY2lzZWQuXG5cblRoZXJlZm9yZSwgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldyBsaW5rIHNwZWVkIHJlYWRpbmcsIEkgbmVlZCB0byBlbnN1cmUgdGhlIGZvbGxvd2luZyBjb25maWd1cmF0aW9ucyBhcmUgZW5hYmxlZDogYElYR0JFVkZgLCB3aGljaCBpcyB0aGUgZHJpdmVyIGl0c2VsZiwgYFBDSV9NTUNPTkZJR2AgZm9yIHRoZSBQQ0kgY29uZmlndXJhdGlvbiBzcGFjZSBhY2Nlc3MsIGFuZCBgUENJX01TSWAgaXMgYXV0b21hdGljYWxseSBuZWVkZWQgYXMgYSBkZXBlbmRlbmN5IG9mIGBJWEdCRVZGYC5cblxuSSBhbHNvIGtub3cgdGhhdCBgSVhHQkVWRmAgYWxzbyBkZXBlbmRzIG9uIGBQQ0lgLCBgTkVUREVWSUNFU2AsIGBFVEhFUk5FVGAsIGFuZCBgTkVUX1ZFTkRPUl9JTlRFTGAuIFRoZXNlIGRlcGVuZGVuY2llcyBhcmUgcHJldHR5IHN0YW5kYXJkLCBhbmQgYE5FVF9WRU5ET1JfSU5URUxgIGlzIHVzdWFsbHkgbmVlZGVkIHRvIGV2ZW4gc2VlIHRoZSBgSVhHQkVWRmAgZHJpdmVyIGluIHRoZSBjb25maWd1cmF0aW9uIG1lbnUuIFRoYXQncyBhIHNhbml0eSBjaGVjazsgSSdsbCBtYWtlIHN1cmUgdGhvc2UgYXJlIGFsbCBlbmFibGVkIGFzIHdlbGwuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQ1OTI4LCJPdXRwdXRUb2tlbnMiOjM3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDY1LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjRUMTQ6MjM6NDcuNDg4NDkwOTIxWiIsIlNlcSI6NDQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjExMjEyMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEsXG4gIFwiTGluZUNvdW50XCI6IDIwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgIDE6XFx0IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XFxuICAgMjpcXHQjXFxuICAgMzpcXHQjIEludGVsIG5ldHdvcmsgZGV2aWNlIGNvbmZpZ3VyYXRpb25cXG4gICA0OlxcdCNcXG4gICA1OlxcdFxcbiAgIDY6XFx0Y29uZmlnIE5FVF9WRU5ET1JfSU5URUxcXG4gICA3OlxcdFxcdGJvb2wgXFxcIkludGVsIGRldmljZXNcXFwiXFxuICAgODpcXHRcXHRkZWZhdWx0IHlcXG4gICA5OlxcdFxcdGhlbHBcXG4gIDEwOlxcdFxcdCAgSWYgeW91IGhhdmUgYSBuZXR3b3JrIChFdGhlcm5ldCkgY2FyZCBiZWxvbmdpbmcgdG8gdGhpcyBjbGFzcywgc2F5IFkuXFxuICAxMTpcXHRcXG4gIDEyOlxcdFxcdCAgTm90ZSB0aGF0IHRoZSBhbnN3ZXIgdG8gdGhpcyBxdWVzdGlvbiBkb2Vzbid0IGRpcmVjdGx5IGFmZmVjdCB0aGVcXG4gIDEzOlxcdFxcdCAga2VybmVsOiBzYXlpbmcgTiB3aWxsIGp1c3QgY2F1c2UgdGhlIGNvbmZpZ3VyYXRvciB0byBza2lwIGFsbFxcbiAgMTQ6XFx0XFx0ICB0aGUgcXVlc3Rpb25zIGFib3V0IEludGVsIGNhcmRzLiBJZiB5b3Ugc2F5IFksIHlvdSB3aWxsIGJlIGFza2VkIGZvclxcbiAgMTU6XFx0XFx0ICB5b3VyIHNwZWNpZmljIGNhcmQgaW4gdGhlIGZvbGxvd2luZyBxdWVzdGlvbnMuXFxuICAxNjpcXHRcXG4gIDE3OlxcdGlmIE5FVF9WRU5ET1JfSU5URUxcXG4gIDE4OlxcdFxcbiAgMTk6XFx0c291cmNlIFxcXCJkcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9saWJldGgvS2NvbmZpZ1xcXCJcXG4gIDIwOlxcdHNvdXJjZSBcXFwiZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvbGliaWUvS2NvbmZpZ1xcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjRUMTQ6MjM6NDcuNDg4NjA1MTgxWiIsIlNlcSI6NDUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjE2ODI5NTE3MjkxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFzc2Vzc21lbnQgb2YgdGhlIEZ1enppbmcgV29ydGhpbmVzcyoqXG5cbk9rYXksIHNvIEkndmUgZ29uZSB0aHJvdWdoIHRoaXMgY2FyZWZ1bGx5LiBZZXMsIGFic29sdXRlbHksIGBORVRfVkVORE9SX0lOVEVMYCBpcyBhIG11c3QtaGF2ZSBmb3IgdGhpcy4gV2UnbGwgbmVlZCB0aGUgZm9sbG93aW5nIGBFbmFibGVDb25maWdzYDogYE5FVF9WRU5ET1JfSU5URUxgLCBgSVhHQkVWRmAsIGBQQ0lfTU1DT05GSUdgLCBhbmQgYFBDSV9NU0lgLlxuXG5JIGhhZCB0byBkb3VibGUtY2hlY2sgdGhhdCBgaXhnYmV2Zl9odl9yZWFkX2xpbmtzX2U2MTBgIGlzbid0IGEgcHJvYmxlbS4gSXQncyBhIHN0YXRpYyBmdW5jdGlvbiwgYnV0IGl0J3MgY2FsbGVkIGRpcmVjdGx5IGJ5IGBpeGdiZXZmX2h2X2NoZWNrX21hY19saW5rX3ZmYC4gR2l2ZW4gdGhhdCBpdCdzIGNhbGxlZCBvbmx5IG9uY2UsIHRoZSBjb21waWxlciBpcyB2ZXJ5IGxpa2VseSB0byBpbmxpbmUgaXQuIElmIGlubGluZWQsIGl0IHdvbid0IGhhdmUgYSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzcywgc28gaXQncyBiZXN0ICpub3QqIHRvIGluY2x1ZGUgaXQgaW4gdGhlIGBGb2N1c1N5bWJvbHNgIHRvIHByZXZlbnQgYW55IHVubmVjZXNzYXJ5IHdhcm5pbmdzIG9yIG1pc3NpbmcgY292ZXJhZ2UuIEhvd2V2ZXIsIHRoZSBvdGhlciB0d286IGBpeGdiZXZmX2h2X2NoZWNrX21hY19saW5rX3ZmYCBhbmQgYGl4Z2JldmZfZ2V0X2xpbmtfa3NldHRpbmdzYCBhcmUgYXNzaWduZWQgdG8gZnVuY3Rpb24gcG9pbnRlcnMsIGFuZCBzbyB3b24ndCBiZSBmdWxseSBpbmxpbmVkLiBUaGVzZSAqYXJlKiBpbXBvcnRhbnQuXG5cbk5vdywgbGV0J3MgY2lyY2xlIGJhY2sgdG8gdGhlIHByb21wdCwgbWFraW5nIHN1cmUgSSBoYXZlbid0IG1pc3NlZCBhbnl0aGluZyBjcnVjaWFsLiBUaGUgaW5zdHJ1Y3Rpb24gaXMgdG8gcmV0dXJuIGBXb3J0aEZ1enppbmc9ZmFsc2VgIGlmIHRoZSBwYXRjaCBoYXMgY29kZSBwYXRocyB0aGF0IGFyZSB1bnJlYWNoYWJsZSBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgb3IgY29kZSB0aGF0IGRlcGVuZHMgb24gc3BlY2lmaWMsIG5vbi1lbXVsYXRlZCBoYXJkd2FyZS5cblxuVGhlIFN5emthbGxlciBQQ0kgZnV6emVyIGNhbiBlbXVsYXRlIGVub3VnaCBvZiB0aGUgZGV2aWNlIHRvIHBhc3MgdGhlIHByb2JlIGZ1bmN0aW9uIGFuZCByZWdpc3RlciB0aGUgbmV0ZGV2LCB3aGljaCBtYWtlcyB0aGUgY29kZSByZWFjaGFibGUuIFRoZSBQQ0kgZnV6emVyIGludGVyY2VwdHMgUENJIGNvbmZpZyBzcGFjZSBhbmQgTU1JTyByZWFkcy93cml0ZXMuIGBpeGdiZXZmX3N3X2luaXRgIGRvZXMgTU1JTyByZWFkcy93cml0ZXMsIGxpa2UgYElYR0JFX1JFQURfUkVHYC4gSWYgdGhlIGZ1enplciB0aHJvd3MgcmFuZG9tIHZhbHVlcyBhdCBpdCwgYHJlc2V0X2h3YCBtaWdodCBmYWlsLCBidXQgYXMgd2Ugb2JzZXJ2ZWQsIHRoZSBkcml2ZXIgd2lsbCBwcm9jZWVkIGFuZCByZWdpc3RlciB0aGUgbmV0ZGV2IGFueXdheS4gU28sIGl0J3MgZGVmaW5pdGVseSByZWFjaGFibGUuIE5vIHJlYXNvbiB0byB0aGluayB0aGUgUENJIGZ1enplciB3b24ndCBiZSBlZmZlY3RpdmUgaGVyZS5cblxuVGhlcmVmb3JlLCBJJ20gY29uZmlkZW50IGluIHNldHRpbmcgYFdvcnRoRnV6emluZz10cnVlYC5cblxuVGhlIHJlYXNvbmluZyBpcyB0aGF0IHRoaXMgcGF0Y2ggbW9kaWZpZXMgdGhlIGBpeGdiZXZmYCBkcml2ZXIuIEl0IGFkZHMgbG9naWMgdG8gcmVhZCB0aGUgbGluayBzcGVlZCBmcm9tIHRoZSBlbXVsYXRlZCBQQ0kgY29uZmlnIHNwYWNlIHNwZWNpZmljYWxseSBmb3IgSHlwZXItViBFNjEwIFZGcy4gVGhpcyBjb2RlIGlzIHJlYWNoYWJsZSB2aWEgdGhlIGBldGh0b29sIGdldF9saW5rX2tzZXR0aW5nc2AgY2FsbGJhY2sgYW5kIHRoZSBkcml2ZXIncyBiYWNrZ3JvdW5kIGxpbmsgY2hlY2sgdGFzay4gU3l6a2FsbGVyIGNhbiByZWFjaCBpdCBieSB1c2luZyBpdHMgUENJIGRldmljZSBmdXp6ZXIgdG8gZW11bGF0ZSB0aGUgc3BlY2lmaWMgVkYgZGV2aWNlIElELCBhbmQgdGhlbiBpbnRlcmFjdGluZyB3aXRoIHRoZSByZWdpc3RlcmVkIG5ldGRldiB0aHJvdWdoIGV0aHRvb2wuIFRoZSBuZXcgbG9naWMgZG9lcyByZXF1aXJlIGBDT05GSUdfUENJX01NQ09ORklHYCB0byBiZSBlbmFibGVkIHRvIHBlcmZvcm0gdGhlIFBDSSBjb25maWcgc3BhY2UgcmVhZHMuXG5cblRoZSBgRm9jdXNTeW1ib2xzYCBJIHdpbGwgZm9jdXMgb24gYXJlOiBgaXhnYmV2Zl9nZXRfbGlua19rc2V0dGluZ3NgIGFuZCBgaXhnYmV2Zl9odl9jaGVja19tYWNfbGlua192ZmAuXG5cblRoZSBgRW5hYmxlIGNvbmZpZ3NgIGFyZTogYE5FVF9WRU5ET1JfSU5URUxgLCBgSVhHQkVWRmAsIGBQQ0lfTU1DT05GSUdgLCBhbmQgYFBDSV9NU0lgLlxuXG5cbiIsIklucHV0VG9rZW5zIjo0NzE2MSwiT3V0cHV0VG9rZW5zIjoyMDQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo3NzUsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yNFQxNDoyNDowNC4zMTgxMjY1MTJaIiwiU2VxIjo0NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMTgyMTAzMDIsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIk5FVF9WRU5ET1JfSU5URUxcIixcbiAgICBcIklYR0JFVkZcIixcbiAgICBcIlBDSV9NTUNPTkZJR1wiLFxuICAgIFwiUENJX01TSVwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcIml4Z2JldmZfZ2V0X2xpbmtfa3NldHRpbmdzXCIsXG4gICAgXCJpeGdiZXZmX2h2X2NoZWNrX21hY19saW5rX3ZmXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGl4Z2JldmYgZHJpdmVyIHRvIHJlYWQgbGluayBzcGVlZCBmcm9tIHRoZSBlbXVsYXRlZCBQQ0kgY29uZmlnIHNwYWNlIGZvciBIeXBlci1WIEU2MTAgVkZzLiBUaGlzIGxvZ2ljIGlzIHJlYWNoYWJsZSB2aWEgdGhlIGV0aHRvb2wgZ2V0X2xpbmtfa3NldHRpbmdzIGNhbGxiYWNrIGFuZCB0aGUgZHJpdmVyJ3MgYmFja2dyb3VuZCBsaW5rIGNoZWNrIHRhc2suIFN5emthbGxlciBjYW4gcmVhY2ggdGhpcyBjb2RlIGJ5IHVzaW5nIGl0cyBQQ0kgZGV2aWNlIGZ1enplciB0byBlbXVsYXRlIHRoZSBzcGVjaWZpYyBWRiBkZXZpY2UgSUQgYW5kIHRoZW4gaW50ZXJhY3Rpbmcgd2l0aCB0aGUgcmVnaXN0ZXJlZCBuZXRkZXYgdmlhIGV0aHRvb2wuIFRoZSBuZXcgbG9naWMgcmVxdWlyZXMgQ09ORklHX1BDSV9NTUNPTkZJRyB0byBiZSBlbmFibGVkIHRvIGFjdHVhbGx5IHBlcmZvcm0gdGhlIFBDSSBjb25maWcgc3BhY2UgcmVhZHMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiTkVUX1ZFTkRPUl9JTlRFTFwiLFxuICAgIFwiSVhHQkVWRlwiLFxuICAgIFwiUENJX01NQ09ORklHXCIsXG4gICAgXCJQQ0lfTVNJXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiaXhnYmV2Zl9nZXRfbGlua19rc2V0dGluZ3NcIixcbiAgICBcIml4Z2JldmZfaHZfY2hlY2tfbWFjX2xpbmtfdmZcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgaXhnYmV2ZiBkcml2ZXIgdG8gcmVhZCBsaW5rIHNwZWVkIGZyb20gdGhlIGVtdWxhdGVkIFBDSSBjb25maWcgc3BhY2UgZm9yIEh5cGVyLVYgRTYxMCBWRnMuIFRoaXMgbG9naWMgaXMgcmVhY2hhYmxlIHZpYSB0aGUgZXRodG9vbCBnZXRfbGlua19rc2V0dGluZ3MgY2FsbGJhY2sgYW5kIHRoZSBkcml2ZXIncyBiYWNrZ3JvdW5kIGxpbmsgY2hlY2sgdGFzay4gU3l6a2FsbGVyIGNhbiByZWFjaCB0aGlzIGNvZGUgYnkgdXNpbmcgaXRzIFBDSSBkZXZpY2UgZnV6emVyIHRvIGVtdWxhdGUgdGhlIHNwZWNpZmljIFZGIGRldmljZSBJRCBhbmQgdGhlbiBpbnRlcmFjdGluZyB3aXRoIHRoZSByZWdpc3RlcmVkIG5ldGRldiB2aWEgZXRodG9vbC4gVGhlIG5ldyBsb2dpYyByZXF1aXJlcyBDT05GSUdfUENJX01NQ09ORklHIHRvIGJlIGVuYWJsZWQgdG8gYWN0dWFsbHkgcGVyZm9ybSB0aGUgUENJIGNvbmZpZyBzcGFjZSByZWFkcy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjRUMTQ6MjQ6MDQuNDM2MzQ5NzY0WiIsIlNlcSI6NDcsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoiSWYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNzY0MzM0NjcyMSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI0VDE0OjI0OjA0LjQzNzE4OTM2NFoiLCJTZXEiOjQ4LCJOZXN0aW5nIjoyLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJiZXN0LWV4cGVuc2l2ZSIsIkR1cmF0aW9uIjoxNzY0MjUwMjkwMSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIG5ldyBmdW5jdGlvbiBgaXhnYmV2Zl9odl9yZWFkX2xpbmtzX2U2MTBgIHdoaWNoIHJlYWRzIDQgYnl0ZXMgZnJvbSB0aGUgUENJIGNvbmZpZ3VyYXRpb24gc3BhY2UgaW50byBhIGxvY2FsIHN0YWNrIGFycmF5IGBkYXRhYC4gVGhlIGFycmF5IGlzIGluaXRpYWxpemVkIGJ5dGUtYnktYnl0ZSB1c2luZyBgcGNpX3JlYWRfY29uZmlnX2J5dGVgLiBJZiBhbnkgcmVhZCBmYWlscywgdGhlIGZ1bmN0aW9uIHJldHVybnMgYW4gZXJyb3IgaW1tZWRpYXRlbHkuIElmIGFsbCByZWFkcyBzdWNjZWVkLCB0aGUgYXJyYXkgaXMgZnVsbHkgaW5pdGlhbGl6ZWQgYmVmb3JlIGJlaW5nIHJlYWQgYnkgYGdldF91bmFsaWduZWRfbGUzMmAuIFRoZXJlIGlzIG5vIHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgYmVpbmcgdXNlZCBpbiBjb250cm9sIGZsb3csIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciBsZWFrZWQuIFN0YW5kYXJkIEtBU0FOIGFuZCBvdGhlciBidWcgZGV0ZWN0b3JzIGFyZSBzdWZmaWNpZW50IHRvIGNhdGNoIGFueSBwb3RlbnRpYWwgb3V0LW9mLWJvdW5kcyBvciBtZW1vcnkgY29ycnVwdGlvbiBpc3N1ZXMuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5XG5lcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZFxuZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKVxuZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuXG5cbkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOlxuLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlXG4gIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTlxuICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQXG4gIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuXG4tIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLFxuICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuXG5cblJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sXG5MT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLlxuQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWVxuc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3NcbnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uXG5cbkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0XG51bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZixcbmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5c1xudGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmdcbnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbFxuZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLFxuY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuXG5cblNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczpcbjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiXG4gICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkc1xuICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC5cbjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXNcbiAgIG9yIHN0cnVjdCBmaWVsZHMuXG4zLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzXG4gICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLlxuNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3NcbiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy5cblxuU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6XG4tIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyXG4gIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodFxuICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuXG4tIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkXG4gIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC5cbi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLlxuXG5Vc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlXG5kZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgYzAyMjZmNzJmN2I1NDgzZmUyOTdjMmQzYjZjMTczMWIwNDQxZTI4Y1xuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBNb24gQXVnIDI0IDE0OjE5OjE1IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaXhnYmV2Zi9ldGh0b29sLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9peGdiZXZmL2V0aHRvb2wuY1xuaW5kZXggNTM3YTYwZDUyNzZmMC4uMjQ2M2ZjY2ZmZDRkYSAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2l4Z2JldmYvZXRodG9vbC5jXG4rKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9peGdiZXZmL2V0aHRvb2wuY1xuQEAgLTgzLDYgKzgzLDE4IEBAIHN0YXRpYyBpbnQgaXhnYmV2Zl9nZXRfbGlua19rc2V0dGluZ3Moc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldixcbiBcdFx0XHRcdCAgICAgIHN0cnVjdCBldGh0b29sX2xpbmtfa3NldHRpbmdzICpjbWQpXG4ge1xuIFx0c3RydWN0IGl4Z2JldmZfYWRhcHRlciAqYWRhcHRlciA9IG5ldGRldl9wcml2KG5ldGRldik7XG4rXHRzdHJ1Y3QgaXhnYmVfaHcgKmh3ID0gXHUwMDI2YWRhcHRlci1cdTAwM2VodztcbitcbitcdC8qIEU2MTAgSHlwZXItViBWRnM6IHJlYWQgY3VycmVudCBsaW5rIHNwZWVkIGZyb20gUENJIGNvbmZpZyBzcGFjZVxuK1x0ICogb24gZXZlcnkgbGluayBzcGVlZCBxdWVyeS5cbitcdCAqL1xuK1x0aWYgKGh3LVx1MDAzZW1hYy50eXBlID09IGl4Z2JlX21hY19lNjEwX3ZmKSB7XG4rXHRcdHNwaW5fbG9ja19iaChcdTAwMjZhZGFwdGVyLVx1MDAzZW1ieF9sb2NrKTtcbitcdFx0aHctXHUwMDNlbWFjLmdldF9saW5rX3N0YXR1cyA9IHRydWU7XG4rXHRcdGh3LVx1MDAzZW1hYy5vcHMuY2hlY2tfbGluayhodywgXHUwMDI2YWRhcHRlci1cdTAwM2VsaW5rX3NwZWVkLFxuK1x0XHRcdFx0ICAgICAgIFx1MDAyNmFkYXB0ZXItXHUwMDNlbGlua191cCwgZmFsc2UpO1xuK1x0XHRzcGluX3VubG9ja19iaChcdTAwMjZhZGFwdGVyLVx1MDAzZW1ieF9sb2NrKTtcbitcdH1cbiBcbiBcdGV0aHRvb2xfbGlua19rc2V0dGluZ3NfemVyb19saW5rX21vZGUoY21kLCBzdXBwb3J0ZWQpO1xuIFx0ZXRodG9vbF9saW5rX2tzZXR0aW5nc19hZGRfbGlua19tb2RlKGNtZCwgc3VwcG9ydGVkLCAxMDAwMGJhc2VUX0Z1bGwpO1xuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2l4Z2JldmYvdmYuYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2l4Z2JldmYvdmYuY1xuaW5kZXggZjZkZjg2ZDEyNGI5ZS4uYTg0YjYyNjQxZTliYyAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2l4Z2JldmYvdmYuY1xuKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaXhnYmV2Zi92Zi5jXG5AQCAtMSwxNCArMSwxNyBAQFxuIC8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXG4gLyogQ29weXJpZ2h0KGMpIDE5OTkgLSAyMDI0IEludGVsIENvcnBvcmF0aW9uLiAqL1xuIFxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L3VuYWxpZ25lZC5oXHUwMDNlXG4rXG4gI2luY2x1ZGUgXCJ2Zi5oXCJcbiAjaW5jbHVkZSBcIml4Z2JldmYuaFwiXG4gXG4tLyogT24gSHlwZXItViwgdG8gcmVzZXQsIHdlIG5lZWQgdG8gcmVhZCBmcm9tIHRoaXMgb2Zmc2V0XG4tICogZnJvbSB0aGUgUENJIGNvbmZpZyBzcGFjZS4gVGhpcyBpcyB0aGUgbWVjaGFuaXNtIHVzZWQgb25cbi0gKiBIeXBlci1WIHRvIHN1cHBvcnQgUEYvVkYgY29tbXVuaWNhdGlvbi5cbisvKiBPbiBIeXBlci1WIHRoZSBQRi9WRiBjb21tdW5pY2F0aW9uIGlzIHRocm91Z2ggZW11bGF0ZWQgUENJIGNvbmZpZ1xuKyAqIHNwYWNlLiBUaGUgcmVzZXQgYW5kIGxpbmsgc3RhdHVzIGFyZSBleHBvc2VkIGF0IHRoZSBvZmZzZXRzIGJlbG93LlxuICAqL1xuLSNkZWZpbmUgSVhHQkVfSFZfUkVTRVRfT0ZGU0VUICAgICAgICAgICAweDIwMVxuKyNkZWZpbmUgSVhHQkVfSFZfUkVTRVRfT0ZGU0VUXHRcdDB4MjAxXG4rI2RlZmluZSBJWEdCRV9IVl9MSU5LX1NUQVRVU19PRkZTRVRcdDB4MjA5XG4rI2RlZmluZSBJWEdCRV9IVl9MSU5LX1NUQVRVU19TSVpFXHQ0XG4gXG4gc3RhdGljIGlubGluZSBzMzIgaXhnYmV2Zl93cml0ZV9tc2dfcmVhZF9hY2soc3RydWN0IGl4Z2JlX2h3ICpodywgdTMyICptc2csXG4gXHRcdFx0XHRcdCAgICAgdTMyICpyZXRtc2csIHUxNiBzaXplKVxuQEAgLTkwMSw2ICs5MDQsNDAgQEAgc3RhdGljIHMzMiBpeGdiZXZmX2NoZWNrX21hY19saW5rX3ZmKHN0cnVjdCBpeGdiZV9odyAqaHcsXG4gXHRyZXR1cm4gcmV0X3ZhbDtcbiB9XG4gXG4rLyoqXG4rICogaXhnYmV2Zl9odl9yZWFkX2xpbmtzX2U2MTAgLSByZWFkIGxpbmsgc3RhdHVzIGZyb20gUENJIGNvbmZpZyBzcGFjZVxuKyAqIEBodzogcG9pbnRlciB0byBoYXJkd2FyZSBzdHJ1Y3R1cmVcbisgKiBAbGlua3NfcmVnOiBwb2ludGVyIHRvIHN0b3JlIHJlYWQgdmFsdWVcbisgKlxuKyAqIE9uIEh5cGVyLVYgRTYxMCBWRnMgdGhlIFZGTElOS1MgcmVnaXN0ZXIgZG9lcyBub3QgY2FycnkgdmFsaWQgbGluayBzcGVlZC5cbisgKiBJbnN0ZWFkLCBsaW5rIHN0YXR1cyBpcyBleHBvc2VkIHRocm91Z2ggZW11bGF0ZWQgUENJIGNvbmZpZyBzcGFjZSBhdCBvZmZzZXRcbisgKiAweDIwOSBpbiBWRkxJTktTIHJlZ2lzdGVyIGZvcm1hdC5cbisgKlxuKyAqIFJldHVybjogMCBvbiBzdWNjZXNzLCBuZWdhdGl2ZSBlcnJvciBjb2RlIG9uIGZhaWx1cmUuXG4rICovXG4rc3RhdGljIHMzMiBpeGdiZXZmX2h2X3JlYWRfbGlua3NfZTYxMChzdHJ1Y3QgaXhnYmVfaHcgKmh3LCB1MzIgKmxpbmtzX3JlZylcbit7XG4rXHRzdHJ1Y3QgaXhnYmV2Zl9hZGFwdGVyICphZGFwdGVyID0gaHctXHUwMDNlYmFjaztcbitcdHU4IGRhdGFbSVhHQkVfSFZfTElOS19TVEFUVVNfU0laRV07XG4rXG4rXHRpZiAoIUlTX0VOQUJMRUQoQ09ORklHX1BDSV9NTUNPTkZJRykpIHtcbitcdFx0ZGV2X2Vycl9vbmNlKFx1MDAyNmFkYXB0ZXItXHUwMDNlcGRldi1cdTAwM2VkZXYsXG4rXHRcdFx0ICAgICBcImNhbm5vdCByZWFkIGxpbmsgc3RhdHVzLCBQQ0lfTU1DT05GSUcgaXMgcmVxdWlyZWQgZm9yIEh5cGVyLVZcXG5cIik7XG4rXHRcdHJldHVybiAtRU9QTk9UU1VQUDtcbitcdH1cbitcbitcdGZvciAoaW50IGkgPSAwOyBpIFx1MDAzYyBJWEdCRV9IVl9MSU5LX1NUQVRVU19TSVpFOyBpKyspIHtcbitcdFx0aW50IHJldCA9IHBjaV9yZWFkX2NvbmZpZ19ieXRlKGFkYXB0ZXItXHUwMDNlcGRldixcbitcdFx0XHRcdFx0ICAgICAgIElYR0JFX0hWX0xJTktfU1RBVFVTX09GRlNFVCArIGksXG4rXHRcdFx0XHRcdCAgICAgICBcdTAwMjZkYXRhW2ldKTtcbitcdFx0aWYgKHJldClcbitcdFx0XHRyZXR1cm4gcGNpYmlvc19lcnJfdG9fZXJybm8ocmV0KTtcbitcdH1cbitcbitcdCpsaW5rc19yZWcgPSBnZXRfdW5hbGlnbmVkX2xlMzIoZGF0YSk7XG4rXHRyZXR1cm4gMDtcbit9XG4rXG4gLyoqXG4gICogaXhnYmV2Zl9odl9jaGVja19tYWNfbGlua192ZiAtIGNoZWNrIGxpbmtcbiAgKiBAaHc6IHBvaW50ZXIgdG8gcHJpdmF0ZSBoYXJkd2FyZSBzdHJ1Y3RcbkBAIC05MDksNiArOTQ2LDcgQEAgc3RhdGljIHMzMiBpeGdiZXZmX2NoZWNrX21hY19saW5rX3ZmKHN0cnVjdCBpeGdiZV9odyAqaHcsXG4gICogQGF1dG9uZWdfd2FpdF90b19jb21wbGV0ZTogdW51c2VkXG4gICpcbiAgKiBIeXBlci1WIHZhcmlhbnQ7IHRoZXJlIGlzIG5vIG1haWxib3ggY29tbXVuaWNhdGlvbi5cbisgKiBGb3IgRTYxMCBWRnMsIGxpbmsgc3RhdHVzIGlzIHJlYWQgZnJvbSBlbXVsYXRlZCBQQ0kgY29uZmlnIHNwYWNlLlxuICAqL1xuIHN0YXRpYyBzMzIgaXhnYmV2Zl9odl9jaGVja19tYWNfbGlua192ZihzdHJ1Y3QgaXhnYmVfaHcgKmh3LFxuIFx0XHRcdFx0XHRpeGdiZV9saW5rX3NwZWVkICpzcGVlZCxcbkBAIC05MjYsOCArOTY0LDE2IEBAIHN0YXRpYyBzMzIgaXhnYmV2Zl9odl9jaGVja19tYWNfbGlua192ZihzdHJ1Y3QgaXhnYmVfaHcgKmh3LFxuIFx0aWYgKCFtYWMtXHUwMDNlZ2V0X2xpbmtfc3RhdHVzKVxuIFx0XHRnb3RvIG91dDtcbiBcbi1cdC8qIGlmIGxpbmsgc3RhdHVzIGlzIGRvd24gbm8gcG9pbnQgaW4gY2hlY2tpbmcgdG8gc2VlIGlmIHBmIGlzIHVwICovXG4tXHRsaW5rc19yZWcgPSBJWEdCRV9SRUFEX1JFRyhodywgSVhHQkVfVkZMSU5LUyk7XG4rXHRpZiAobWFjLVx1MDAzZXR5cGUgPT0gaXhnYmVfbWFjX2U2MTBfdmYpIHtcbitcdFx0aWYgKGl4Z2JldmZfaHZfcmVhZF9saW5rc19lNjEwKGh3LCBcdTAwMjZsaW5rc19yZWcpKSB7XG4rXHRcdFx0KmxpbmtfdXAgPSBmYWxzZTtcbitcdFx0XHQqc3BlZWQgPSBJWEdCRV9MSU5LX1NQRUVEX1VOS05PV047XG4rXHRcdFx0cmV0dXJuIDA7XG4rXHRcdH1cbitcdH0gZWxzZSB7XG4rXHRcdGxpbmtzX3JlZyA9IElYR0JFX1JFQURfUkVHKGh3LCBJWEdCRV9WRkxJTktTKTtcbitcdH1cbitcbiBcdGlmICghKGxpbmtzX3JlZyBcdTAwMjYgSVhHQkVfTElOS1NfVVApKVxuIFx0XHRnb3RvIG91dDtcbiBcbkBAIC05NDEsOCArOTg3LDExIEBAIHN0YXRpYyBzMzIgaXhnYmV2Zl9odl9jaGVja19tYWNfbGlua192ZihzdHJ1Y3QgaXhnYmVfaHcgKmh3LFxuIFx0XHRcdHVkZWxheSgxMDApO1xuIFx0XHRcdGxpbmtzX3JlZyA9IElYR0JFX1JFQURfUkVHKGh3LCBJWEdCRV9WRkxJTktTKTtcbiBcbi1cdFx0XHRpZiAoIShsaW5rc19yZWcgXHUwMDI2IElYR0JFX0xJTktTX1VQKSlcbi1cdFx0XHRcdGdvdG8gb3V0O1xuK1x0XHRcdGlmICghKGxpbmtzX3JlZyBcdTAwMjYgSVhHQkVfTElOS1NfVVApKSB7XG4rXHRcdFx0XHQqbGlua191cCA9IGZhbHNlO1xuK1x0XHRcdFx0KnNwZWVkID0gSVhHQkVfTElOS19TUEVFRF9VTktOT1dOO1xuK1x0XHRcdFx0cmV0dXJuIDA7XG4rXHRcdFx0fVxuIFx0XHR9XG4gXHR9XG4gXG5AQCAtOTU2LDYgKzEwMDUsOSBAQCBzdGF0aWMgczMyIGl4Z2JldmZfaHZfY2hlY2tfbWFjX2xpbmtfdmYoc3RydWN0IGl4Z2JlX2h3ICpodyxcbiBcdGNhc2UgSVhHQkVfTElOS1NfU1BFRURfMTAwXzgyNTk5OlxuIFx0XHQqc3BlZWQgPSBJWEdCRV9MSU5LX1NQRUVEXzEwMF9GVUxMO1xuIFx0XHRicmVhaztcbitcdGRlZmF1bHQ6XG4rXHRcdCpzcGVlZCA9IElYR0JFX0xJTktfU1BFRURfVU5LTk9XTjtcbitcdFx0YnJlYWs7XG4gXHR9XG4gXG4gXHQvKiBpZiB3ZSBwYXNzZWQgYWxsIHRoZSB0ZXN0cyBhYm92ZSB0aGVuIHRoZSBsaW5rIGlzIHVwIGFuZCB3ZSBub1xuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjRUMTQ6MjQ6MDQuNDM3MTkxNDc0WiIsIlNlcSI6NDksIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjE3NjQyNDgwNjYxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFzc2Vzc21lbnQgb2YgdGhlIGl4Z2JldmYgRHJpdmVyIFBhdGNoKipcblxuQWxyaWdodCwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBUaGlzIHBhdGNoIGlzIHRhcmdldGluZyB0aGUgYGl4Z2JldmZgIGRyaXZlciDigJMgdGhlIEludGVsIDEwIEdpZ2FiaXQgUENJIEV4cHJlc3MgVmlydHVhbCBGdW5jdGlvbiBkcml2ZXIg4oCTIHNwZWNpZmljYWxseSB0byBhZGQgdGhlIGFiaWxpdHkgdG8gcmVhZCBsaW5rIHN0YXR1cyBkaXJlY3RseSBmcm9tIHRoZSBQQ0kgY29uZmlndXJhdGlvbiBzcGFjZSBmb3IgRTYxMCBIeXBlci1WIFZpcnR1YWwgRnVuY3Rpb25zLlxuXG5NeSBhbmFseXNpcyBmb2N1c2VzIG9uIHBvdGVudGlhbCBtZW1vcnkgc2FmZXR5IGlzc3VlcywgcGFydGljdWxhcmx5IHJlZ2FyZGluZyB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcy5cblxuVGhlIGNvcmUgb2YgdGhlIGNoYW5nZSBsaWVzIGluIHRoZXNlIGZ1bmN0aW9uczpcblxuMS4gIGBpeGdiZXZmX2dldF9saW5rX2tzZXR0aW5nc2AgaW4gYGV0aHRvb2wuY2Agbm93IGNhbGxzIGBody1cdTAwM2VtYWMub3BzLmNoZWNrX2xpbmtgLCB3aGljaCBpcyBjcnVjaWFsIGZvciBsaW5rIHN0YXR1cy5cblxuMi4gIGBpeGdiZXZmX2h2X3JlYWRfbGlua3NfZTYxMGAgaW4gYHZmLmNgIGlzIHRoZSBrZXkgcGllY2UuIEl0IGF0dGVtcHRzIHRvIHJlYWQgNCBieXRlcyBvZiBsaW5rIHN0YXR1cyBkYXRhIGZyb20gdGhlIFBDSSBjb25maWcgc3BhY2UgaW50byBhIGB1OCBkYXRhW0lYR0JFX0hWX0xJTktfU1RBVFVTX1NJWkVdYCBhcnJheS4gVGhpcyBpcyBkb25lIGJ5dGUgYnkgYnl0ZSB1c2luZyBgcGNpX3JlYWRfY29uZmlnX2J5dGVgLiBDcnVjaWFsbHksIGlmIGFueSBgcGNpX3JlYWRfY29uZmlnX2J5dGVgIGZhaWxzIChyZXR1cm5zIGEgbm9uLXplcm8gdmFsdWUpLCB0aGUgZnVuY3Rpb24gKmltbWVkaWF0ZWx5IHJldHVybnMqLCBwcmV2ZW50aW5nIGFueSB1c2Ugb2YgcGFydGlhbGx5IGluaXRpYWxpemVkIGRhdGEuIElmIHN1Y2Nlc3NmdWwsICphbGwgZm91ciBieXRlcyogb2YgdGhlIGBkYXRhYCBhcnJheSBhcmUgZmlsbGVkLiBUaGUgZnVuY3Rpb24gdGhlbiBjb25zdHJ1Y3RzIGEgMzItYml0IHZhbHVlIHVzaW5nIGBnZXRfdW5hbGlnbmVkX2xlMzIoZGF0YSlgLlxuXG4zLiBgaXhnYmV2Zl9odl9jaGVja19tYWNfbGlua192ZmAgY2FsbHMgdGhlIGFib3ZlIGZ1bmN0aW9uLiBJZiB0aGUgcmVhZCBmYWlscywgdGhlIGxpbmsgc3RhdHVzIGlzIHNldCB0byBcImRvd25cIiBhbmQgc3BlZWQgdG8gXCJ1bmtub3duXCIuIElmIGl0IHN1Y2NlZWRzLCB0aGUgcmVhZCBkYXRhIGlzIHVzZWQgdG8gZGV0ZXJtaW5lIGxpbmsgc3BlZWQuXG5cblRoZSBjZW50cmFsIHF1ZXN0aW9uIGhlcmUgaXMgd2hldGhlciB0aGlzIGludHJvZHVjZXMgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMuIEknbSBzYXRpc2ZpZWQgdGhhdCBpdCAqZG9lc24ndCouIFRoZSBgZGF0YWAgYXJyYXkgaXMgZXhwbGljaXRseSBpbml0aWFsaXplZCwgYnl0ZSBieSBieXRlLCB1c2luZyBgcGNpX3JlYWRfY29uZmlnX2J5dGVgLiBGYWlsdXJlIGF0IGFueSBwb2ludCBjYXVzZXMgYW4gaW1tZWRpYXRlIGV4aXQgZnJvbSB0aGUgZnVuY3Rpb24sIHNvIHRoZSBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIGBkYXRhYCBhcnJheSBpcyBuZXZlciBhY2Nlc3NlZC4gV2hlbiB0aGUgcmVhZCBzdWNjZWVkcywgYWxsIGJ5dGVzIGFyZSBpbml0aWFsaXplZCBiZWZvcmUgYGdldF91bmFsaWduZWRfbGUzMmAgaXMgY2FsbGVkLiBJdOKAmXMgYWxzbyBpbXBvcnRhbnQgdG8gbm90ZSB0aGF0IHRoZSBwYXRjaCBkb2Vzbid0IGludHJvZHVjZSBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyBvciBhbnkgdW51c3VhbCBwYWRkaW5nIHNjZW5hcmlvcy5cblxuYHBjaV9yZWFkX2NvbmZpZ19ieXRlYOKAmXMgYmVoYXZpb3IgZnVydGhlciByZWluZm9yY2VzIHRoaXMuIEl0IHRha2VzIGEgcG9pbnRlciB0byBgdThgIGFuZCwgdXBvbiBhIHN1Y2Nlc3NmdWwgcmVhZCwgcGxhY2VzIHRoZSB2YWx1ZSBhdCB0aGF0IGFkZHJlc3MuIFNvIGlmIHRoZSBjYWxsIHJldHVybnMgemVybywgdGhlIG1lbW9yeSBiZWluZyBwb2ludGVkIHRvIGhhcyBiZWVuIHN1Y2Nlc3NmdWxseSB3cml0dGVuIHRvLlxuXG5UaGVyZWZvcmUsIGdpdmVuIHRoZSBleHBsaWNpdCBpbml0aWFsaXphdGlvbiBzdHJhdGVneSBhbmQgdGhlIGVhcmx5LWV4aXQgZXJyb3IgaGFuZGxpbmcsIEkgY2FuIGNvbmZpZGVudGx5IHN0YXRlIHRoYXQgS2VybmVsIE1lbW9yeSBTYW5pdGl6ZXIgKEtNU0FOKSBpcyAqbm90KiBuZWNlc3NhcnkgaGVyZS4gVGhlIHBvdGVudGlhbCBmb3IgbWVtb3J5IGVycm9ycyBpcyBhbHJlYWR5IGFkZHJlc3NlZCBieSB0aGUgYnl0ZS1ieS1ieXRlIGluaXRpYWxpemF0aW9uIHdpdGggYSBjaGVjayBmb3IgZWFjaCBieXRlLiBLQVNBTiBhbmQgc3RhbmRhcmQgdG9vbHMgc2hvdWxkIHN1ZmZpY2UgdG8gY2F0Y2ggYW55IHBvdGVudGlhbCBtZW1vcnkgZXJyb3JzLCB0aG91Z2ggSSBzZWUgbm9uZSBhcHBhcmVudC5cblxuSSdtIHNldHRpbmcgYE5lZWRzS01TQU49ZmFsc2VgIGZvciB0aGlzIHBhdGNoLiBNeSBhbmFseXNpcyBhbmQgdGhlIGxvdy1sZXZlbCBmdW5jdGlvbnMgdXNlZCBjb25maXJtIHRoYXQgdGhlIG1lbW9yeSBzYWZldHkgcmVxdWlyZW1lbnRzIGFyZSBtZXQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjM4MzksIk91dHB1dFRva2VucyI6MTY5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NjkxLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjRUMTQ6MjQ6MjIuMDc5Njc1NTU1WiIsIlNlcSI6NTAsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTU1NTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgbmV3IGZ1bmN0aW9uIGBpeGdiZXZmX2h2X3JlYWRfbGlua3NfZTYxMGAgd2hpY2ggcmVhZHMgNCBieXRlcyBmcm9tIHRoZSBQQ0kgY29uZmlndXJhdGlvbiBzcGFjZSBpbnRvIGEgbG9jYWwgc3RhY2sgYXJyYXkgYGRhdGFgLiBUaGUgYXJyYXkgaXMgaW5pdGlhbGl6ZWQgYnl0ZS1ieS1ieXRlIHVzaW5nIGBwY2lfcmVhZF9jb25maWdfYnl0ZWAuIElmIGFueSByZWFkIGZhaWxzLCB0aGUgZnVuY3Rpb24gcmV0dXJucyBhbiBlcnJvciBpbW1lZGlhdGVseS4gSWYgYWxsIHJlYWRzIHN1Y2NlZWQsIHRoZSBhcnJheSBpcyBmdWxseSBpbml0aWFsaXplZCBiZWZvcmUgYmVpbmcgcmVhZCBieSBgZ2V0X3VuYWxpZ25lZF9sZTMyYC4gVGhlcmUgaXMgbm8gcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSBiZWluZyB1c2VkIGluIGNvbnRyb2wgZmxvdywgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIGxlYWtlZC4gU3RhbmRhcmQgS0FTQU4gYW5kIG90aGVyIGJ1ZyBkZXRlY3RvcnMgYXJlIHN1ZmZpY2llbnQgdG8gY2F0Y2ggYW55IHBvdGVudGlhbCBvdXQtb2YtYm91bmRzIG9yIG1lbW9yeSBjb3JydXB0aW9uIGlzc3Vlcy5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgbmV3IGZ1bmN0aW9uIGBpeGdiZXZmX2h2X3JlYWRfbGlua3NfZTYxMGAgd2hpY2ggcmVhZHMgNCBieXRlcyBmcm9tIHRoZSBQQ0kgY29uZmlndXJhdGlvbiBzcGFjZSBpbnRvIGEgbG9jYWwgc3RhY2sgYXJyYXkgYGRhdGFgLiBUaGUgYXJyYXkgaXMgaW5pdGlhbGl6ZWQgYnl0ZS1ieS1ieXRlIHVzaW5nIGBwY2lfcmVhZF9jb25maWdfYnl0ZWAuIElmIGFueSByZWFkIGZhaWxzLCB0aGUgZnVuY3Rpb24gcmV0dXJucyBhbiBlcnJvciBpbW1lZGlhdGVseS4gSWYgYWxsIHJlYWRzIHN1Y2NlZWQsIHRoZSBhcnJheSBpcyBmdWxseSBpbml0aWFsaXplZCBiZWZvcmUgYmVpbmcgcmVhZCBieSBgZ2V0X3VuYWxpZ25lZF9sZTMyYC4gVGhlcmUgaXMgbm8gcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSBiZWluZyB1c2VkIGluIGNvbnRyb2wgZmxvdywgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIGxlYWtlZC4gU3RhbmRhcmQgS0FTQU4gYW5kIG90aGVyIGJ1ZyBkZXRlY3RvcnMgYXJlIHN1ZmZpY2llbnQgdG8gY2F0Y2ggYW55IHBvdGVudGlhbCBvdXQtb2YtYm91bmRzIG9yIG1lbW9yeSBjb3JydXB0aW9uIGlzc3Vlcy5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+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-workflow5xvxz[0].run-triage(0) Phase: Succeeded StartedAt: 2026-08-24 13:19:15 +0000 UTC FinishedAt: 2026-08-24 14:24:24 +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": "91ec2035134982b98fab0609a9fd8480e8217dc1", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "NET_VENDOR_INTEL", "IXGBEVF", "PCI_MMCONFIG", "PCI_MSI" ], "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": "91ec2035134982b98fab0609a9fd8480e8217dc1", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "NET_VENDOR_INTEL", "IXGBEVF", "PCI_MMCONFIG", "PCI_MSI" ], "series_id": "ae690f0a-1d70-4346-bb1d-cd2c8046a0f5" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "ixgbevf_get_link_ksettings", "ixgbevf_hv_check_mac_link_vf" ], "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+CgkJCTx0ZD4yMDI2LzA4LzI0IDE0OjE5PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+NW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O05FVF9WRU5ET1JfSU5URUwmIzM0OywKICAgICYjMzQ7SVhHQkVWRiYjMzQ7LAogICAgJiMzNDtQQ0lfTU1DT05GSUcmIzM0OywKICAgICYjMzQ7UENJX01TSSYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2l4Z2JldmZfZ2V0X2xpbmtfa3NldHRpbmdzJiMzNDssCiAgICAmIzM0O2l4Z2JldmZfaHZfY2hlY2tfbWFjX2xpbmtfdmYmIzM0OwogIF0sCiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgbmV3IGZ1bmN0aW9uIGBpeGdiZXZmX2h2X3JlYWRfbGlua3NfZTYxMGAgd2hpY2ggcmVhZHMgNCBieXRlcyBmcm9tIHRoZSBQQ0kgY29uZmlndXJhdGlvbiBzcGFjZSBpbnRvIGEgbG9jYWwgc3RhY2sgYXJyYXkgYGRhdGFgLiBUaGUgYXJyYXkgaXMgaW5pdGlhbGl6ZWQgYnl0ZS1ieS1ieXRlIHVzaW5nIGBwY2lfcmVhZF9jb25maWdfYnl0ZWAuIElmIGFueSByZWFkIGZhaWxzLCB0aGUgZnVuY3Rpb24gcmV0dXJucyBhbiBlcnJvciBpbW1lZGlhdGVseS4gSWYgYWxsIHJlYWRzIHN1Y2NlZWQsIHRoZSBhcnJheSBpcyBmdWxseSBpbml0aWFsaXplZCBiZWZvcmUgYmVpbmcgcmVhZCBieSBgZ2V0X3VuYWxpZ25lZF9sZTMyYC4gVGhlcmUgaXMgbm8gcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSBiZWluZyB1c2VkIGluIGNvbnRyb2wgZmxvdywgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIGxlYWtlZC4gU3RhbmRhcmQgS0FTQU4gYW5kIG90aGVyIGJ1ZyBkZXRlY3RvcnMgYXJlIHN1ZmZpY2llbnQgdG8gY2F0Y2ggYW55IHBvdGVudGlhbCBvdXQtb2YtYm91bmRzIG9yIG1lbW9yeSBjb3JydXB0aW9uIGlzc3Vlcy4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGl4Z2JldmYgZHJpdmVyIHRvIHJlYWQgbGluayBzcGVlZCBmcm9tIHRoZSBlbXVsYXRlZCBQQ0kgY29uZmlnIHNwYWNlIGZvciBIeXBlci1WIEU2MTAgVkZzLiBUaGlzIGxvZ2ljIGlzIHJlYWNoYWJsZSB2aWEgdGhlIGV0aHRvb2wgZ2V0X2xpbmtfa3NldHRpbmdzIGNhbGxiYWNrIGFuZCB0aGUgZHJpdmVyJiMzOTtzIGJhY2tncm91bmQgbGluayBjaGVjayB0YXNrLiBTeXprYWxsZXIgY2FuIHJlYWNoIHRoaXMgY29kZSBieSB1c2luZyBpdHMgUENJIGRldmljZSBmdXp6ZXIgdG8gZW11bGF0ZSB0aGUgc3BlY2lmaWMgVkYgZGV2aWNlIElEIGFuZCB0aGVuIGludGVyYWN0aW5nIHdpdGggdGhlIHJlZ2lzdGVyZWQgbmV0ZGV2IHZpYSBldGh0b29sLiBUaGUgbmV3IGxvZ2ljIHJlcXVpcmVzIENPTkZJR19QQ0lfTU1DT05GSUcgdG8gYmUgZW5hYmxlZCB0byBhY3R1YWxseSBwZXJmb3JtIHRoZSBQQ0kgY29uZmlnIHNwYWNlIHJlYWRzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI0IDE0OjE5PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgYzAyMjZmNzJmN2I1NDgzZmUyOTdjMmQzYjZjMTczMWIwNDQxZTI4Y1xuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBNb24gQXVnIDI0IDE0OjE5OjE1IDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2l4Z2JldmYvZXRodG9vbC5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaXhnYmV2Zi9ldGh0b29sLmNcbmluZGV4IDUzN2E2MGQ1Mjc2ZjAuLjI0NjNmY2NmZmQ0ZGEgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9peGdiZXZmL2V0aHRvb2wuY1xuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaXhnYmV2Zi9ldGh0b29sLmNcbkBAIC04Myw2ICYjNDM7ODMsMTggQEAgc3RhdGljIGludCBpeGdiZXZmX2dldF9saW5rX2tzZXR0aW5ncyhzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LFxuIFx0XHRcdFx0ICAgICAgc3RydWN0IGV0aHRvb2xfbGlua19rc2V0dGluZ3MgKmNtZClcbiB7XG4gXHRzdHJ1Y3QgaXhnYmV2Zl9hZGFwdGVyICphZGFwdGVyID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTtcbiYjNDM7XHRzdHJ1Y3QgaXhnYmVfaHcgKmh3ID0gXHUwMDI2YWRhcHRlci1cdTAwM2VodztcbiYjNDM7XG4mIzQzO1x0LyogRTYxMCBIeXBlci1WIFZGczogcmVhZCBjdXJyZW50IGxpbmsgc3BlZWQgZnJvbSBQQ0kgY29uZmlnIHNwYWNlXG4mIzQzO1x0ICogb24gZXZlcnkgbGluayBzcGVlZCBxdWVyeS5cbiYjNDM7XHQgKi9cbiYjNDM7XHRpZiAoaHctXHUwMDNlbWFjLnR5cGUgPT0gaXhnYmVfbWFjX2U2MTBfdmYpIHtcbiYjNDM7XHRcdHNwaW5fbG9ja19iaChcdTAwMjZhZGFwdGVyLVx1MDAzZW1ieF9sb2NrKTtcbiYjNDM7XHRcdGh3LVx1MDAzZW1hYy5nZXRfbGlua19zdGF0dXMgPSB0cnVlO1xuJiM0MztcdFx0aHctXHUwMDNlbWFjLm9wcy5jaGVja19saW5rKGh3LCBcdTAwMjZhZGFwdGVyLVx1MDAzZWxpbmtfc3BlZWQsXG4mIzQzO1x0XHRcdFx0ICAgICAgIFx1MDAyNmFkYXB0ZXItXHUwMDNlbGlua191cCwgZmFsc2UpO1xuJiM0MztcdFx0c3Bpbl91bmxvY2tfYmgoXHUwMDI2YWRhcHRlci1cdTAwM2VtYnhfbG9jayk7XG4mIzQzO1x0fVxuIFxuIFx0ZXRodG9vbF9saW5rX2tzZXR0aW5nc196ZXJvX2xpbmtfbW9kZShjbWQsIHN1cHBvcnRlZCk7XG4gXHRldGh0b29sX2xpbmtfa3NldHRpbmdzX2FkZF9saW5rX21vZGUoY21kLCBzdXBwb3J0ZWQsIDEwMDAwYmFzZVRfRnVsbCk7XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaXhnYmV2Zi92Zi5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaXhnYmV2Zi92Zi5jXG5pbmRleCBmNmRmODZkMTI0YjllLi5hODRiNjI2NDFlOWJjIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaXhnYmV2Zi92Zi5jXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9peGdiZXZmL3ZmLmNcbkBAIC0xLDE0ICYjNDM7MSwxNyBAQFxuIC8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXG4gLyogQ29weXJpZ2h0KGMpIDE5OTkgLSAyMDI0IEludGVsIENvcnBvcmF0aW9uLiAqL1xuIFxuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC91bmFsaWduZWQuaFx1MDAzZVxuJiM0MztcbiAjaW5jbHVkZSBcJiMzNDt2Zi5oXCYjMzQ7XG4gI2luY2x1ZGUgXCYjMzQ7aXhnYmV2Zi5oXCYjMzQ7XG4gXG4tLyogT24gSHlwZXItViwgdG8gcmVzZXQsIHdlIG5lZWQgdG8gcmVhZCBmcm9tIHRoaXMgb2Zmc2V0XG4tICogZnJvbSB0aGUgUENJIGNvbmZpZyBzcGFjZS4gVGhpcyBpcyB0aGUgbWVjaGFuaXNtIHVzZWQgb25cbi0gKiBIeXBlci1WIHRvIHN1cHBvcnQgUEYvVkYgY29tbXVuaWNhdGlvbi5cbiYjNDM7LyogT24gSHlwZXItViB0aGUgUEYvVkYgY29tbXVuaWNhdGlvbiBpcyB0aHJvdWdoIGVtdWxhdGVkIFBDSSBjb25maWdcbiYjNDM7ICogc3BhY2UuIFRoZSByZXNldCBhbmQgbGluayBzdGF0dXMgYXJlIGV4cG9zZWQgYXQgdGhlIG9mZnNldHMgYmVsb3cuXG4gICovXG4tI2RlZmluZSBJWEdCRV9IVl9SRVNFVF9PRkZTRVQgICAgICAgICAgIDB4MjAxXG4mIzQzOyNkZWZpbmUgSVhHQkVfSFZfUkVTRVRfT0ZGU0VUXHRcdDB4MjAxXG4mIzQzOyNkZWZpbmUgSVhHQkVfSFZfTElOS19TVEFUVVNfT0ZGU0VUXHQweDIwOVxuJiM0MzsjZGVmaW5lIElYR0JFX0hWX0xJTktfU1RBVFVTX1NJWkVcdDRcbiBcbiBzdGF0aWMgaW5saW5lIHMzMiBpeGdiZXZmX3dyaXRlX21zZ19yZWFkX2FjayhzdHJ1Y3QgaXhnYmVfaHcgKmh3LCB1MzIgKm1zZyxcbiBcdFx0XHRcdFx0ICAgICB1MzIgKnJldG1zZywgdTE2IHNpemUpXG5AQCAtOTAxLDYgJiM0Mzs5MDQsNDAgQEAgc3RhdGljIHMzMiBpeGdiZXZmX2NoZWNrX21hY19saW5rX3ZmKHN0cnVjdCBpeGdiZV9odyAqaHcsXG4gXHRyZXR1cm4gcmV0X3ZhbDtcbiB9XG4gXG4mIzQzOy8qKlxuJiM0MzsgKiBpeGdiZXZmX2h2X3JlYWRfbGlua3NfZTYxMCAtIHJlYWQgbGluayBzdGF0dXMgZnJvbSBQQ0kgY29uZmlnIHNwYWNlXG4mIzQzOyAqIEBodzogcG9pbnRlciB0byBoYXJkd2FyZSBzdHJ1Y3R1cmVcbiYjNDM7ICogQGxpbmtzX3JlZzogcG9pbnRlciB0byBzdG9yZSByZWFkIHZhbHVlXG4mIzQzOyAqXG4mIzQzOyAqIE9uIEh5cGVyLVYgRTYxMCBWRnMgdGhlIFZGTElOS1MgcmVnaXN0ZXIgZG9lcyBub3QgY2FycnkgdmFsaWQgbGluayBzcGVlZC5cbiYjNDM7ICogSW5zdGVhZCwgbGluayBzdGF0dXMgaXMgZXhwb3NlZCB0aHJvdWdoIGVtdWxhdGVkIFBDSSBjb25maWcgc3BhY2UgYXQgb2Zmc2V0XG4mIzQzOyAqIDB4MjA5IGluIFZGTElOS1MgcmVnaXN0ZXIgZm9ybWF0LlxuJiM0MzsgKlxuJiM0MzsgKiBSZXR1cm46IDAgb24gc3VjY2VzcywgbmVnYXRpdmUgZXJyb3IgY29kZSBvbiBmYWlsdXJlLlxuJiM0MzsgKi9cbiYjNDM7c3RhdGljIHMzMiBpeGdiZXZmX2h2X3JlYWRfbGlua3NfZTYxMChzdHJ1Y3QgaXhnYmVfaHcgKmh3LCB1MzIgKmxpbmtzX3JlZylcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBpeGdiZXZmX2FkYXB0ZXIgKmFkYXB0ZXIgPSBody1cdTAwM2ViYWNrO1xuJiM0MztcdHU4IGRhdGFbSVhHQkVfSFZfTElOS19TVEFUVVNfU0laRV07XG4mIzQzO1xuJiM0MztcdGlmICghSVNfRU5BQkxFRChDT05GSUdfUENJX01NQ09ORklHKSkge1xuJiM0MztcdFx0ZGV2X2Vycl9vbmNlKFx1MDAyNmFkYXB0ZXItXHUwMDNlcGRldi1cdTAwM2VkZXYsXG4mIzQzO1x0XHRcdCAgICAgXCYjMzQ7Y2Fubm90IHJlYWQgbGluayBzdGF0dXMsIFBDSV9NTUNPTkZJRyBpcyByZXF1aXJlZCBmb3IgSHlwZXItVlxcblwmIzM0Oyk7XG4mIzQzO1x0XHRyZXR1cm4gLUVPUE5PVFNVUFA7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRmb3IgKGludCBpID0gMDsgaSBcdTAwM2MgSVhHQkVfSFZfTElOS19TVEFUVVNfU0laRTsgaSYjNDM7JiM0MzspIHtcbiYjNDM7XHRcdGludCByZXQgPSBwY2lfcmVhZF9jb25maWdfYnl0ZShhZGFwdGVyLVx1MDAzZXBkZXYsXG4mIzQzO1x0XHRcdFx0XHQgICAgICAgSVhHQkVfSFZfTElOS19TVEFUVVNfT0ZGU0VUICYjNDM7IGksXG4mIzQzO1x0XHRcdFx0XHQgICAgICAgXHUwMDI2ZGF0YVtpXSk7XG4mIzQzO1x0XHRpZiAocmV0KVxuJiM0MztcdFx0XHRyZXR1cm4gcGNpYmlvc19lcnJfdG9fZXJybm8ocmV0KTtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdCpsaW5rc19yZWcgPSBnZXRfdW5hbGlnbmVkX2xlMzIoZGF0YSk7XG4mIzQzO1x0cmV0dXJuIDA7XG4mIzQzO31cbiYjNDM7XG4gLyoqXG4gICogaXhnYmV2Zl9odl9jaGVja19tYWNfbGlua192ZiAtIGNoZWNrIGxpbmtcbiAgKiBAaHc6IHBvaW50ZXIgdG8gcHJpdmF0ZSBoYXJkd2FyZSBzdHJ1Y3RcbkBAIC05MDksNiAmIzQzOzk0Niw3IEBAIHN0YXRpYyBzMzIgaXhnYmV2Zl9jaGVja19tYWNfbGlua192ZihzdHJ1Y3QgaXhnYmVfaHcgKmh3LFxuICAqIEBhdXRvbmVnX3dhaXRfdG9fY29tcGxldGU6IHVudXNlZFxuICAqXG4gICogSHlwZXItViB2YXJpYW50OyB0aGVyZSBpcyBubyBtYWlsYm94IGNvbW11bmljYXRpb24uXG4mIzQzOyAqIEZvciBFNjEwIFZGcywgbGluayBzdGF0dXMgaXMgcmVhZCBmcm9tIGVtdWxhdGVkIFBDSSBjb25maWcgc3BhY2UuXG4gICovXG4gc3RhdGljIHMzMiBpeGdiZXZmX2h2X2NoZWNrX21hY19saW5rX3ZmKHN0cnVjdCBpeGdiZV9odyAqaHcsXG4gXHRcdFx0XHRcdGl4Z2JlX2xpbmtfc3BlZWQgKnNwZWVkLFxuQEAgLTkyNiw4ICYjNDM7OTY0LDE2IEBAIHN0YXRpYyBzMzIgaXhnYmV2Zl9odl9jaGVja19tYWNfbGlua192ZihzdHJ1Y3QgaXhnYmVfaHcgKmh3LFxuIFx0aWYgKCFtYWMtXHUwMDNlZ2V0X2xpbmtfc3RhdHVzKVxuIFx0XHRnb3RvIG91dDtcbiBcbi1cdC8qIGlmIGxpbmsgc3RhdHVzIGlzIGRvd24gbm8gcG9pbnQgaW4gY2hlY2tpbmcgdG8gc2VlIGlmIHBmIGlzIHVwICovXG4tXHRsaW5rc19yZWcgPSBJWEdCRV9SRUFEX1JFRyhodywgSVhHQkVfVkZMSU5LUyk7XG4mIzQzO1x0aWYgKG1hYy1cdTAwM2V0eXBlID09IGl4Z2JlX21hY19lNjEwX3ZmKSB7XG4mIzQzO1x0XHRpZiAoaXhnYmV2Zl9odl9yZWFkX2xpbmtzX2U2MTAoaHcsIFx1MDAyNmxpbmtzX3JlZykpIHtcbiYjNDM7XHRcdFx0KmxpbmtfdXAgPSBmYWxzZTtcbiYjNDM7XHRcdFx0KnNwZWVkID0gSVhHQkVfTElOS19TUEVFRF9VTktOT1dOO1xuJiM0MztcdFx0XHRyZXR1cm4gMDtcbiYjNDM7XHRcdH1cbiYjNDM7XHR9IGVsc2Uge1xuJiM0MztcdFx0bGlua3NfcmVnID0gSVhHQkVfUkVBRF9SRUcoaHcsIElYR0JFX1ZGTElOS1MpO1xuJiM0MztcdH1cbiYjNDM7XG4gXHRpZiAoIShsaW5rc19yZWcgXHUwMDI2IElYR0JFX0xJTktTX1VQKSlcbiBcdFx0Z290byBvdXQ7XG4gXG5AQCAtOTQxLDggJiM0Mzs5ODcsMTEgQEAgc3RhdGljIHMzMiBpeGdiZXZmX2h2X2NoZWNrX21hY19saW5rX3ZmKHN0cnVjdCBpeGdiZV9odyAqaHcsXG4gXHRcdFx0dWRlbGF5KDEwMCk7XG4gXHRcdFx0bGlua3NfcmVnID0gSVhHQkVfUkVBRF9SRUcoaHcsIElYR0JFX1ZGTElOS1MpO1xuIFxuLVx0XHRcdGlmICghKGxpbmtzX3JlZyBcdTAwMjYgSVhHQkVfTElOS1NfVVApKVxuLVx0XHRcdFx0Z290byBvdXQ7XG4mIzQzO1x0XHRcdGlmICghKGxpbmtzX3JlZyBcdTAwMjYgSVhHQkVfTElOS1NfVVApKSB7XG4mIzQzO1x0XHRcdFx0KmxpbmtfdXAgPSBmYWxzZTtcbiYjNDM7XHRcdFx0XHQqc3BlZWQgPSBJWEdCRV9MSU5LX1NQRUVEX1VOS05PV047XG4mIzQzO1x0XHRcdFx0cmV0dXJuIDA7XG4mIzQzO1x0XHRcdH1cbiBcdFx0fVxuIFx0fVxuIFxuQEAgLTk1Niw2ICYjNDM7MTAwNSw5IEBAIHN0YXRpYyBzMzIgaXhnYmV2Zl9odl9jaGVja19tYWNfbGlua192ZihzdHJ1Y3QgaXhnYmVfaHcgKmh3LFxuIFx0Y2FzZSBJWEdCRV9MSU5LU19TUEVFRF8xMDBfODI1OTk6XG4gXHRcdCpzcGVlZCA9IElYR0JFX0xJTktfU1BFRURfMTAwX0ZVTEw7XG4gXHRcdGJyZWFrO1xuJiM0MztcdGRlZmF1bHQ6XG4mIzQzO1x0XHQqc3BlZWQgPSBJWEdCRV9MSU5LX1NQRUVEX1VOS05PV047XG4mIzQzO1x0XHRicmVhaztcbiBcdH1cbiBcbiBcdC8qIGlmIHdlIHBhc3NlZCBhbGwgdGhlIHRlc3RzIGFib3ZlIHRoZW4gdGhlIGxpbmsgaXMgdXAgYW5kIHdlIG5vXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjQgMTQ6MTk8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+NG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+YmVzdC1leHBlbnNpdmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O05FVF9WRU5ET1JfSU5URUwmIzM0OywKICAgICYjMzQ7SVhHQkVWRiYjMzQ7LAogICAgJiMzNDtQQ0lfTU1DT05GSUcmIzM0OywKICAgICYjMzQ7UENJX01TSSYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2l4Z2JldmZfZ2V0X2xpbmtfa3NldHRpbmdzJiMzNDssCiAgICAmIzM0O2l4Z2JldmZfaHZfY2hlY2tfbWFjX2xpbmtfdmYmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGl4Z2JldmYgZHJpdmVyIHRvIHJlYWQgbGluayBzcGVlZCBmcm9tIHRoZSBlbXVsYXRlZCBQQ0kgY29uZmlnIHNwYWNlIGZvciBIeXBlci1WIEU2MTAgVkZzLiBUaGlzIGxvZ2ljIGlzIHJlYWNoYWJsZSB2aWEgdGhlIGV0aHRvb2wgZ2V0X2xpbmtfa3NldHRpbmdzIGNhbGxiYWNrIGFuZCB0aGUgZHJpdmVyJiMzOTtzIGJhY2tncm91bmQgbGluayBjaGVjayB0YXNrLiBTeXprYWxsZXIgY2FuIHJlYWNoIHRoaXMgY29kZSBieSB1c2luZyBpdHMgUENJIGRldmljZSBmdXp6ZXIgdG8gZW11bGF0ZSB0aGUgc3BlY2lmaWMgVkYgZGV2aWNlIElEIGFuZCB0aGVuIGludGVyYWN0aW5nIHdpdGggdGhlIHJlZ2lzdGVyZWQgbmV0ZGV2IHZpYSBldGh0b29sLiBUaGUgbmV3IGxvZ2ljIHJlcXVpcmVzIENPTkZJR19QQ0lfTU1DT05GSUcgdG8gYmUgZW5hYmxlZCB0byBhY3R1YWxseSBwZXJmb3JtIHRoZSBQQ0kgY29uZmlnIHNwYWNlIHJlYWRzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmUKaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseQp1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLgoKUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczoKLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLgotIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLgotIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy4KLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsCiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLgotIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLAogIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpCiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLgoKSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaAp0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4KCldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOgoxLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLgogICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4KICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zCiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLgoyLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS4KICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgogICBBbHNvIGNoZWNrICYjMzQ7ZGVwZW5kcyBvbiYjMzQ7IGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncwogICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3MKICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgYzAyMjZmNzJmN2I1NDgzZmUyOTdjMmQzYjZjMTczMWIwNDQxZTI4YwpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBNb24gQXVnIDI0IDE0OjE5OjE1IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaXhnYmV2Zi9ldGh0b29sLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9peGdiZXZmL2V0aHRvb2wuYwppbmRleCA1MzdhNjBkNTI3NmYwLi4yNDYzZmNjZmZkNGRhIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9peGdiZXZmL2V0aHRvb2wuYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9peGdiZXZmL2V0aHRvb2wuYwpAQCAtODMsNiAmIzQzOzgzLDE4IEBAIHN0YXRpYyBpbnQgaXhnYmV2Zl9nZXRfbGlua19rc2V0dGluZ3Moc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwKIAkJCQkgICAgICBzdHJ1Y3QgZXRodG9vbF9saW5rX2tzZXR0aW5ncyAqY21kKQogewogCXN0cnVjdCBpeGdiZXZmX2FkYXB0ZXIgKmFkYXB0ZXIgPSBuZXRkZXZfcHJpdihuZXRkZXYpOwomIzQzOwlzdHJ1Y3QgaXhnYmVfaHcgKmh3ID0gJmFtcDthZGFwdGVyLSZndDtodzsKJiM0MzsKJiM0MzsJLyogRTYxMCBIeXBlci1WIFZGczogcmVhZCBjdXJyZW50IGxpbmsgc3BlZWQgZnJvbSBQQ0kgY29uZmlnIHNwYWNlCiYjNDM7CSAqIG9uIGV2ZXJ5IGxpbmsgc3BlZWQgcXVlcnkuCiYjNDM7CSAqLwomIzQzOwlpZiAoaHctJmd0O21hYy50eXBlID09IGl4Z2JlX21hY19lNjEwX3ZmKSB7CiYjNDM7CQlzcGluX2xvY2tfYmgoJmFtcDthZGFwdGVyLSZndDttYnhfbG9jayk7CiYjNDM7CQlody0mZ3Q7bWFjLmdldF9saW5rX3N0YXR1cyA9IHRydWU7CiYjNDM7CQlody0mZ3Q7bWFjLm9wcy5jaGVja19saW5rKGh3LCAmYW1wO2FkYXB0ZXItJmd0O2xpbmtfc3BlZWQsCiYjNDM7CQkJCSAgICAgICAmYW1wO2FkYXB0ZXItJmd0O2xpbmtfdXAsIGZhbHNlKTsKJiM0MzsJCXNwaW5fdW5sb2NrX2JoKCZhbXA7YWRhcHRlci0mZ3Q7bWJ4X2xvY2spOwomIzQzOwl9CiAKIAlldGh0b29sX2xpbmtfa3NldHRpbmdzX3plcm9fbGlua19tb2RlKGNtZCwgc3VwcG9ydGVkKTsKIAlldGh0b29sX2xpbmtfa3NldHRpbmdzX2FkZF9saW5rX21vZGUoY21kLCBzdXBwb3J0ZWQsIDEwMDAwYmFzZVRfRnVsbCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9peGdiZXZmL3ZmLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9peGdiZXZmL3ZmLmMKaW5kZXggZjZkZjg2ZDEyNGI5ZS4uYTg0YjYyNjQxZTliYyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaXhnYmV2Zi92Zi5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2l4Z2JldmYvdmYuYwpAQCAtMSwxNCAmIzQzOzEsMTcgQEAKIC8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wCiAvKiBDb3B5cmlnaHQoYykgMTk5OSAtIDIwMjQgSW50ZWwgQ29ycG9yYXRpb24uICovCiAKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvdW5hbGlnbmVkLmgmZ3Q7CiYjNDM7CiAjaW5jbHVkZSAmIzM0O3ZmLmgmIzM0OwogI2luY2x1ZGUgJiMzNDtpeGdiZXZmLmgmIzM0OwogCi0vKiBPbiBIeXBlci1WLCB0byByZXNldCwgd2UgbmVlZCB0byByZWFkIGZyb20gdGhpcyBvZmZzZXQKLSAqIGZyb20gdGhlIFBDSSBjb25maWcgc3BhY2UuIFRoaXMgaXMgdGhlIG1lY2hhbmlzbSB1c2VkIG9uCi0gKiBIeXBlci1WIHRvIHN1cHBvcnQgUEYvVkYgY29tbXVuaWNhdGlvbi4KJiM0MzsvKiBPbiBIeXBlci1WIHRoZSBQRi9WRiBjb21tdW5pY2F0aW9uIGlzIHRocm91Z2ggZW11bGF0ZWQgUENJIGNvbmZpZwomIzQzOyAqIHNwYWNlLiBUaGUgcmVzZXQgYW5kIGxpbmsgc3RhdHVzIGFyZSBleHBvc2VkIGF0IHRoZSBvZmZzZXRzIGJlbG93LgogICovCi0jZGVmaW5lIElYR0JFX0hWX1JFU0VUX09GRlNFVCAgICAgICAgICAgMHgyMDEKJiM0MzsjZGVmaW5lIElYR0JFX0hWX1JFU0VUX09GRlNFVAkJMHgyMDEKJiM0MzsjZGVmaW5lIElYR0JFX0hWX0xJTktfU1RBVFVTX09GRlNFVAkweDIwOQomIzQzOyNkZWZpbmUgSVhHQkVfSFZfTElOS19TVEFUVVNfU0laRQk0CiAKIHN0YXRpYyBpbmxpbmUgczMyIGl4Z2JldmZfd3JpdGVfbXNnX3JlYWRfYWNrKHN0cnVjdCBpeGdiZV9odyAqaHcsIHUzMiAqbXNnLAogCQkJCQkgICAgIHUzMiAqcmV0bXNnLCB1MTYgc2l6ZSkKQEAgLTkwMSw2ICYjNDM7OTA0LDQwIEBAIHN0YXRpYyBzMzIgaXhnYmV2Zl9jaGVja19tYWNfbGlua192ZihzdHJ1Y3QgaXhnYmVfaHcgKmh3LAogCXJldHVybiByZXRfdmFsOwogfQogCiYjNDM7LyoqCiYjNDM7ICogaXhnYmV2Zl9odl9yZWFkX2xpbmtzX2U2MTAgLSByZWFkIGxpbmsgc3RhdHVzIGZyb20gUENJIGNvbmZpZyBzcGFjZQomIzQzOyAqIEBodzogcG9pbnRlciB0byBoYXJkd2FyZSBzdHJ1Y3R1cmUKJiM0MzsgKiBAbGlua3NfcmVnOiBwb2ludGVyIHRvIHN0b3JlIHJlYWQgdmFsdWUKJiM0MzsgKgomIzQzOyAqIE9uIEh5cGVyLVYgRTYxMCBWRnMgdGhlIFZGTElOS1MgcmVnaXN0ZXIgZG9lcyBub3QgY2FycnkgdmFsaWQgbGluayBzcGVlZC4KJiM0MzsgKiBJbnN0ZWFkLCBsaW5rIHN0YXR1cyBpcyBleHBvc2VkIHRocm91Z2ggZW11bGF0ZWQgUENJIGNvbmZpZyBzcGFjZSBhdCBvZmZzZXQKJiM0MzsgKiAweDIwOSBpbiBWRkxJTktTIHJlZ2lzdGVyIGZvcm1hdC4KJiM0MzsgKgomIzQzOyAqIFJldHVybjogMCBvbiBzdWNjZXNzLCBuZWdhdGl2ZSBlcnJvciBjb2RlIG9uIGZhaWx1cmUuCiYjNDM7ICovCiYjNDM7c3RhdGljIHMzMiBpeGdiZXZmX2h2X3JlYWRfbGlua3NfZTYxMChzdHJ1Y3QgaXhnYmVfaHcgKmh3LCB1MzIgKmxpbmtzX3JlZykKJiM0Mzt7CiYjNDM7CXN0cnVjdCBpeGdiZXZmX2FkYXB0ZXIgKmFkYXB0ZXIgPSBody0mZ3Q7YmFjazsKJiM0MzsJdTggZGF0YVtJWEdCRV9IVl9MSU5LX1NUQVRVU19TSVpFXTsKJiM0MzsKJiM0MzsJaWYgKCFJU19FTkFCTEVEKENPTkZJR19QQ0lfTU1DT05GSUcpKSB7CiYjNDM7CQlkZXZfZXJyX29uY2UoJmFtcDthZGFwdGVyLSZndDtwZGV2LSZndDtkZXYsCiYjNDM7CQkJICAgICAmIzM0O2Nhbm5vdCByZWFkIGxpbmsgc3RhdHVzLCBQQ0lfTU1DT05GSUcgaXMgcmVxdWlyZWQgZm9yIEh5cGVyLVZcbiYjMzQ7KTsKJiM0MzsJCXJldHVybiAtRU9QTk9UU1VQUDsKJiM0MzsJfQomIzQzOwomIzQzOwlmb3IgKGludCBpID0gMDsgaSAmbHQ7IElYR0JFX0hWX0xJTktfU1RBVFVTX1NJWkU7IGkmIzQzOyYjNDM7KSB7CiYjNDM7CQlpbnQgcmV0ID0gcGNpX3JlYWRfY29uZmlnX2J5dGUoYWRhcHRlci0mZ3Q7cGRldiwKJiM0MzsJCQkJCSAgICAgICBJWEdCRV9IVl9MSU5LX1NUQVRVU19PRkZTRVQgJiM0MzsgaSwKJiM0MzsJCQkJCSAgICAgICAmYW1wO2RhdGFbaV0pOwomIzQzOwkJaWYgKHJldCkKJiM0MzsJCQlyZXR1cm4gcGNpYmlvc19lcnJfdG9fZXJybm8ocmV0KTsKJiM0MzsJfQomIzQzOwomIzQzOwkqbGlua3NfcmVnID0gZ2V0X3VuYWxpZ25lZF9sZTMyKGRhdGEpOwomIzQzOwlyZXR1cm4gMDsKJiM0Mzt9CiYjNDM7CiAvKioKICAqIGl4Z2JldmZfaHZfY2hlY2tfbWFjX2xpbmtfdmYgLSBjaGVjayBsaW5rCiAgKiBAaHc6IHBvaW50ZXIgdG8gcHJpdmF0ZSBoYXJkd2FyZSBzdHJ1Y3QKQEAgLTkwOSw2ICYjNDM7OTQ2LDcgQEAgc3RhdGljIHMzMiBpeGdiZXZmX2NoZWNrX21hY19saW5rX3ZmKHN0cnVjdCBpeGdiZV9odyAqaHcsCiAgKiBAYXV0b25lZ193YWl0X3RvX2NvbXBsZXRlOiB1bnVzZWQKICAqCiAgKiBIeXBlci1WIHZhcmlhbnQ7IHRoZXJlIGlzIG5vIG1haWxib3ggY29tbXVuaWNhdGlvbi4KJiM0MzsgKiBGb3IgRTYxMCBWRnMsIGxpbmsgc3RhdHVzIGlzIHJlYWQgZnJvbSBlbXVsYXRlZCBQQ0kgY29uZmlnIHNwYWNlLgogICovCiBzdGF0aWMgczMyIGl4Z2JldmZfaHZfY2hlY2tfbWFjX2xpbmtfdmYoc3RydWN0IGl4Z2JlX2h3ICpodywKIAkJCQkJaXhnYmVfbGlua19zcGVlZCAqc3BlZWQsCkBAIC05MjYsOCAmIzQzOzk2NCwxNiBAQCBzdGF0aWMgczMyIGl4Z2JldmZfaHZfY2hlY2tfbWFjX2xpbmtfdmYoc3RydWN0IGl4Z2JlX2h3ICpodywKIAlpZiAoIW1hYy0mZ3Q7Z2V0X2xpbmtfc3RhdHVzKQogCQlnb3RvIG91dDsKIAotCS8qIGlmIGxpbmsgc3RhdHVzIGlzIGRvd24gbm8gcG9pbnQgaW4gY2hlY2tpbmcgdG8gc2VlIGlmIHBmIGlzIHVwICovCi0JbGlua3NfcmVnID0gSVhHQkVfUkVBRF9SRUcoaHcsIElYR0JFX1ZGTElOS1MpOwomIzQzOwlpZiAobWFjLSZndDt0eXBlID09IGl4Z2JlX21hY19lNjEwX3ZmKSB7CiYjNDM7CQlpZiAoaXhnYmV2Zl9odl9yZWFkX2xpbmtzX2U2MTAoaHcsICZhbXA7bGlua3NfcmVnKSkgewomIzQzOwkJCSpsaW5rX3VwID0gZmFsc2U7CiYjNDM7CQkJKnNwZWVkID0gSVhHQkVfTElOS19TUEVFRF9VTktOT1dOOwomIzQzOwkJCXJldHVybiAwOwomIzQzOwkJfQomIzQzOwl9IGVsc2UgewomIzQzOwkJbGlua3NfcmVnID0gSVhHQkVfUkVBRF9SRUcoaHcsIElYR0JFX1ZGTElOS1MpOwomIzQzOwl9CiYjNDM7CiAJaWYgKCEobGlua3NfcmVnICZhbXA7IElYR0JFX0xJTktTX1VQKSkKIAkJZ290byBvdXQ7CiAKQEAgLTk0MSw4ICYjNDM7OTg3LDExIEBAIHN0YXRpYyBzMzIgaXhnYmV2Zl9odl9jaGVja19tYWNfbGlua192ZihzdHJ1Y3QgaXhnYmVfaHcgKmh3LAogCQkJdWRlbGF5KDEwMCk7CiAJCQlsaW5rc19yZWcgPSBJWEdCRV9SRUFEX1JFRyhodywgSVhHQkVfVkZMSU5LUyk7CiAKLQkJCWlmICghKGxpbmtzX3JlZyAmYW1wOyBJWEdCRV9MSU5LU19VUCkpCi0JCQkJZ290byBvdXQ7CiYjNDM7CQkJaWYgKCEobGlua3NfcmVnICZhbXA7IElYR0JFX0xJTktTX1VQKSkgewomIzQzOwkJCQkqbGlua191cCA9IGZhbHNlOwomIzQzOwkJCQkqc3BlZWQgPSBJWEdCRV9MSU5LX1NQRUVEX1VOS05PV047CiYjNDM7CQkJCXJldHVybiAwOwomIzQzOwkJCX0KIAkJfQogCX0KIApAQCAtOTU2LDYgJiM0MzsxMDA1LDkgQEAgc3RhdGljIHMzMiBpeGdiZXZmX2h2X2NoZWNrX21hY19saW5rX3ZmKHN0cnVjdCBpeGdiZV9odyAqaHcsCiAJY2FzZSBJWEdCRV9MSU5LU19TUEVFRF8xMDBfODI1OTk6CiAJCSpzcGVlZCA9IElYR0JFX0xJTktfU1BFRURfMTAwX0ZVTEw7CiAJCWJyZWFrOwomIzQzOwlkZWZhdWx0OgomIzQzOwkJKnNwZWVkID0gSVhHQkVfTElOS19TUEVFRF9VTktOT1dOOwomIzQzOwkJYnJlYWs7CiAJfQogCiAJLyogaWYgd2UgcGFzc2VkIGFsbCB0aGUgdGVzdHMgYWJvdmUgdGhlbiB0aGUgbGluayBpcyB1cCBhbmQgd2Ugbm8KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjQgMTQ6MTk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzg0MgoJCQkJCQkJb3V0cHV0OiAyNAoJCQkJCQkJdGhvdWdodHM6IDg4NgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIFBhdGNoIGZvciBGdXp6aW5nIFN1aXRhYmlsaXR5KioKCk9rYXksIHNvIEkmIzM5O3ZlIGdvdCB0aGlzIHBhdGNoIHRoYXQgdHdlYWtzIHRoZSBgaXhnYmV2ZmAgZHJpdmVyIOKAkyBzcGVjaWZpY2FsbHkgaW4gYGV0aHRvb2wuY2AgYW5kIGB2Zi5jYC4gSXQmIzM5O3MgYWRkaW5nIHNvbWUgbG9naWMgdG8gcmVhZCBsaW5rIHNwZWVkIGZyb20gdGhlIFBDSSBjb25maWcgc3BhY2UsIGJ1dCBvbmx5IGZvciBIeXBlci1WIEU2MTAgVkZzLiAgTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMsICYjMzQ7V29ydGhGdXp6aW5nPWZhbHNlPyYjMzQ7ICBUaGUgaW5zdHJ1Y3Rpb25zIHNheSB0byBmbGFnIHBhdGNoZXMgdGhhdCB0b3VjaCB2ZW5kb3Itc3BlY2lmaWMgUENJZSBkcml2ZXJzIG5vdCBlbXVsYXRlZCBieSBzdGFuZGFyZCBRRU1VLiAgCgpTbywgaXMgYGl4Z2JldmZgIHZlbmRvci1zcGVjaWZpYz8gSXQgKmlzKiB0aGUgSW50ZWwgMTAgR2lnYWJpdCBWaXJ0dWFsIEZ1bmN0aW9uIGRyaXZlci4gSW50ZWwgTklDcyAoZTEwMDAsIGUxMDAwZSwgaWdiLCBpeGdiZSwgaTQwZSkgYXJlIGdlbmVyYWxseSBzdGFuZGFyZCBOSUNzLiAgSG93ZXZlciwgYGl4Z2JldmZgIGlzIGEgVkYgZHJpdmVyOyBhbmQgVkYmIzM5O3MgYXJlIGFsd2F5cyBhIGxpdHRsZSB0cmlja2llci4gIERvZXMgc3RhbmRhcmQgUUVNVSBlbXVsYXRlIGl0PyBRRU1VIGVtdWxhdGVzIGBpeGdiZWAgKHRoZSBwaHlzaWNhbCBmdW5jdGlvbiksIGJ1dCBub3QsIHRvIG15IGtub3dsZWRnZSwgdGhlIFZGLiBXYWl0LCB0aGUgcHJvbXB0IHNheXMgdGhlIGZvbGxvd2luZyBzaG91bGQgYmUgY29uc2lkZXJlZCwgJiMzNDsqKkNvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLCBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVSoqJiMzNDsuCgpBaGEhIFRoaXMgcGF0Y2ggc3BlY2lmaWNhbGx5IGNhbGxzIG91dCAmIzM0O0h5cGVyLVYgRTYxMCBWRnMuJiMzNDsgIFRoZSB0ZXh0IHNheXMgdGhlIFBGL1ZGIGNvbW11bmljYXRpb24gaGFwcGVucyB0aHJvdWdoICplbXVsYXRlZCogUENJIGNvbmZpZyBzcGFjZSBvbiBIeXBlci1WLiBFNjEwIGlzIGFuIEludGVsIEV0aGVybmV0IENvbnRyb2xsZXIsIGxpa2UgdGhlIEU4MTAsIGJ1dCBub3QgdGhlIEU4MTAuIERvZXMgc3RhbmRhcmQgUUVNVSBlbXVsYXRlIEU2MTA/IE5vLCB0aGF0JiMzOTtzIGRlZmluaXRlbHkgbm90IGVtdWxhdGVkLiBRRU1VIGVtdWxhdGVzIG90aGVyIEludGVsIE5JQ3MgYnV0IG5vdCB0aGUgRTYxMCAob3IgRTYxMCBWRnMpIHRvIG15IGtub3dsZWRnZS4gU28gd2UmIzM5O3JlIGRlYWxpbmcgd2l0aCBhIGRyaXZlciwgYGl4Z2JldmZgIGZvciA4MjU5OSwgWDU0MCwgWDU1MCwgKmFuZCogRTYxMCBWRnMuIEFuZCBpdCBsb29rcyBsaWtlIGl0IG5lZWRzIGVpdGhlciBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlICpvciogdGhlIEh5cGVyLVYgVkYgcGFzcy10aHJvdWdoIHRvIHdvcmsgY29ycmVjdGx5LgoKQ2FuIHN5emthbGxlciBoYW5kbGUgdGhpcz8gU3l6a2FsbGVyIHVzZXMgUUVNVSBvciBHQ0UuIEdDRSBoYXMgZ1ZOSUMsIGJ1dCBub3QgaXhnYmV2Zi4gQW5kLCBpbiBzdGFuZGFyZCBRRU1VLCB0aGVyZSYjMzk7cyBubyBpeGdiZXZmIGVtdWxhdGlvbiwgb25seSB0aGUgaXhnYmUgUEYuICBJIGtub3cgc3l6a2FsbGVyIGhhcyBgc3l6X3BjaV9zZXR1cGAgYW5kIGBzeXpfcGNpX2RldmljZWAsIHdoaWNoICpjb3VsZCogZW11bGF0ZSBQQ0kgZGV2aWNlcyB2aWEgdmhjaSBvciBzb21ldGhpbmcgc2ltaWxhci4gQnV0LCBkb2VzIHRoYXQgcmVhbGx5IHByb3ZpZGUgdGhlIGdyYW51bGFyaXR5IG5lZWRlZCB0byBmdWxseSBlbXVsYXRlIHRoZSBzcGVjaWZpYyByZWdpc3RlcnMgYW5kIGJlaGF2aW9ycyBvZiBhbiBgaXhnYmV2ZmA/IFByb2JhYmx5IG5vdCwgdW5sZXNzIGl0IHdlcmUgd3JpdHRlbiBpbiBzeXpsYW5nLiBTeXprYWxsZXIgaGFzIHNvbWUgUENJIGZ1enppbmcsIGJ1dCBpdCYjMzk7cyBwcmV0dHkgbGltaXRlZC4KClNvLCByZWFsaXN0aWNhbGx5LCBpcyBpeGdiZXZmIGFjdHVhbGx5IGZ1enplZCBieSBzeXprYWxsZXIgY3VycmVudGx5PyBJIHNob3VsZCBwcm9iYWJseSBjaGVjayB0aGF0LCBidXQgYmFzZWQgb24gd2hhdCBJIGtub3cgbm93LCBJJiMzOTttIGxlYW5pbmcgaGVhdmlseSB0b3dhcmRzICYjMzQ7bm8mIzM0Oy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNCAxNDoxOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtpeGdiZXZmJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O1xuRnVsbCBvdXRwdXQgaXMgdG9vIGxvbmcsIHNob3dpbmcgNTAwIG91dCBvZiAzNDg3IGxpbmVzLlxuVXNlIG1vcmUgcHJlY2lzZSBleHByZXNzaW9uIGlmIHBvc3NpYmxlLlxuXG5Eb2N1bWVudGF0aW9uLy5yZW5hbWVzLnR4dD04MTc9bmV0d29ya2luZy9kZXZpY2VfZHJpdmVycy9pbnRlbC9peGdiZSBuZXR3b3JraW5nL2RldmljZV9kcml2ZXJzL2V0aGVybmV0L2ludGVsL2l4Z2JlXG5Eb2N1bWVudGF0aW9uLy5yZW5hbWVzLnR4dDo4MTg6bmV0d29ya2luZy9kZXZpY2VfZHJpdmVycy9pbnRlbC9peGdiZXZmIG5ldHdvcmtpbmcvZGV2aWNlX2RyaXZlcnMvZXRoZXJuZXQvaW50ZWwvaXhnYmV2ZlxuRG9jdW1lbnRhdGlvbi8ucmVuYW1lcy50eHQtODE5LW5ldHdvcmtpbmcvZGV2aWNlX2RyaXZlcnMvbWFydmVsbC9vY3Rlb250eDIgbmV0d29ya2luZy9kZXZpY2VfZHJpdmVycy9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4MlxuLS1cbkRvY3VtZW50YXRpb24vLnJlbmFtZXMudHh0PTg0Mz1uZXR3b3JraW5nL2l4Z2JlIG5ldHdvcmtpbmcvZGV2aWNlX2RyaXZlcnMvZXRoZXJuZXQvaW50ZWwvaXhnYmVcbkRvY3VtZW50YXRpb24vLnJlbmFtZXMudHh0Ojg0NDpuZXR3b3JraW5nL2l4Z2JldmYgbmV0d29ya2luZy9kZXZpY2VfZHJpdmVycy9ldGhlcm5ldC9pbnRlbC9peGdiZXZmXG5Eb2N1bWVudGF0aW9uLy5yZW5hbWVzLnR4dC04NDUtbmV0d29ya2luZy9uZXRkZXYtRkFRIHByb2Nlc3MvbWFpbnRhaW5lci1uZXRkZXZcbi0tXG5Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvZGV2aWNlX2RyaXZlcnMvZXRoZXJuZXQvaW5kZXgucnN0PTg9Q29udGVudHM6XG4tLVxuRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL2RldmljZV9kcml2ZXJzL2V0aGVybmV0L2luZGV4LnJzdC0zOS0gICBpbnRlbC9peGdiZVxuRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL2RldmljZV9kcml2ZXJzL2V0aGVybmV0L2luZGV4LnJzdDo0MDogICBpbnRlbC9peGdiZXZmXG5Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvZGV2aWNlX2RyaXZlcnMvZXRoZXJuZXQvaW5kZXgucnN0LTQxLSAgIGludGVsL2k0MGVcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9LY29uZmlnPTIwMz1jb25maWcgSVhHQkVWRlxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL0tjb25maWctMjEzLVx0ICBNb3JlIHNwZWNpZmljIGluZm9ybWF0aW9uIG9uIGNvbmZpZ3VyaW5nIHRoZSBkcml2ZXIgaXMgaW5cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL0tjb25maWc6MjE0Olx0ICBcdTAwM2NmaWxlOkRvY3VtZW50YXRpb24vbmV0d29ya2luZy9kZXZpY2VfZHJpdmVycy9ldGhlcm5ldC9pbnRlbC9peGdiZXZmLnJzdFx1MDAzZS5cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL0tjb25maWctMjE1LVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvS2NvbmZpZy0yMTYtXHQgIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmUuIFRoZSBtb2R1bGVcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL0tjb25maWc6MjE3Olx0ICB3aWxsIGJlIGNhbGxlZCBpeGdiZXZmLiAgTVNJLVggaW50ZXJydXB0IHN1cHBvcnQgaXMgcmVxdWlyZWRcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL0tjb25maWctMjE4LVx0ICBmb3IgdGhpcyBkcml2ZXIgdG8gd29yayBjb3JyZWN0bHkuXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvS2NvbmZpZz0yMjA9Y29uZmlnIElYR0JFVkZfSVBTRUNcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9LY29uZmlnLTIyNi1cdGhlbHBcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL0tjb25maWc6MjI3Olx0ICBFbmFibGUgc3VwcG9ydCBmb3IgSVBTZWMgb2ZmbG9hZCBpbiBpeGdiZXZmLmtvXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9LY29uZmlnLTIyOC1cbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9NYWtlZmlsZT0xNT1vYmotJChDT05GSUdfSVhHQkUpICYjNDM7PSBpeGdiZS9cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL01ha2VmaWxlOjE2Om9iai0kKENPTkZJR19JWEdCRVZGKSAmIzQzOz0gaXhnYmV2Zi9cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL01ha2VmaWxlLTE3LW9iai0kKENPTkZJR19JNDBFKSAmIzQzOz0gaTQwZS9cbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9peGdiZS9peGdiZS5oPTIxMj1zdHJ1Y3QgdmZfZGF0YV9zdG9yYWdlIHtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9peGdiZS9peGdiZS5oLTIzNC1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2l4Z2JlL2l4Z2JlLmg6MjM1OmVudW0gaXhnYmV2Zl94Y2FzdF9tb2RlcyB7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9peGdiZS9peGdiZS5oLTIzNi1cdElYR0JFVkZfWENBU1RfTU9ERV9OT05FID0gMCxcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9peGdiZXZmL01ha2VmaWxlLTYtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9peGdiZXZmL01ha2VmaWxlOjc6b2JqLSQoQ09ORklHX0lYR0JFVkYpICYjNDM7PSBpeGdiZXZmLm9cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2l4Z2JldmYvTWFrZWZpbGUtOC1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2l4Z2JldmYvTWFrZWZpbGU6OTppeGdiZXZmLXkgOj0gdmYubyBtYngubyBldGh0b29sLm8gaXhnYmV2Zl9tYWluLm9cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2l4Z2JldmYvTWFrZWZpbGU6MTA6aXhnYmV2Zi0kKENPTkZJR19JWEdCRVZGX0lQU0VDKSAmIzQzOz0gaXBzZWMub1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2l4Z2JldmYvZXRodG9vbC5jLTMtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9peGdiZXZmL2V0aHRvb2wuYzo0Oi8qIGV0aHRvb2wgc3VwcG9ydCBmb3IgaXhnYmV2ZiAqL1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaXhnYmV2Zi9ldGh0b29sLmMtNS1cbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9peGdiZXZmL2V0aHRvb2wuYy0xNy1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2l4Z2JldmYvZXRodG9vbC5jOjE4OiNpbmNsdWRlIFwmIzM0O2l4Z2JldmYuaFwmIzM0O1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaXhnYmV2Zi9ldGh0b29sLmMtMTktXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaXhnYmV2Zi9ldGh0b29sLmM9MjI9c3RydWN0IGl4Z2JlX3N0YXRzIHtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9peGdiZXZmL2V0aHRvb2wuYy0zMS1cdC50eXBlID0gSVhHQkVWRl9TVEFUUywgXFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2l4Z2JldmYvZXRodG9vbC5jOjMyOlx0LnNpemVvZl9zdGF0ID0gc2l6ZW9mX2ZpZWxkKHN0cnVjdCBpeGdiZXZmX2FkYXB0ZXIsIF9zdGF0KSwgXFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2l4Z2JldmYvZXRodG9vbC5jOjMzOlx0LnN0YXRfb2Zmc2V0ID0gb2Zmc2V0b2Yoc3RydWN0IGl4Z2JldmZfYWRhcHRlciwgX3N0YXQpIFxcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9peGdiZXZmL2V0aHRvb2wuYy0zNC19XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaXhnYmV2Zi9ldGh0b29sLmMtNDItXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9peGdiZXZmL2V0aHRvb2wuYzo0MzpzdGF0aWMgc3RydWN0IGl4Z2JlX3N0YXRzIGl4Z2JldmZfZ3N0cmluZ3Nfc3RhdHNbXSA9IHtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2l4Z2JldmYvZXRodG9vbC5jLTQ0LVx0SVhHQkVWRl9ORVRERVZfU1RBVChyeF9wYWNrZXRzKSxcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9peGdiZXZmL2V0aHRvb2wuYy02MC0jZGVmaW5lIElYR0JFVkZfUVVFVUVfU1RBVFNfTEVOICggXFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2l4Z2JldmYvZXRodG9vbC5jOjYxOlx0KCgoc3RydWN0IGl4Z2JldmZfYWRhcHRlciAqKW5ldGRldl9wcml2KG5ldGRldikpLVx1MDAzZW51bV90eF9xdWV1ZXMgJiM0MzsgXFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2l4Z2JldmYvZXRodG9vbC5jOjYyOlx0ICgoc3RydWN0IGl4Z2JldmZfYWRhcHRlciAqKW5ldGRldl9wcml2KG5ldGRldikpLVx1MDAzZW51bV94ZHBfcXVldWVzICYjNDM7IFxcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9peGdiZXZmL2V0aHRvb2wuYzo2MzpcdCAoKHN0cnVjdCBpeGdiZXZmX2FkYXB0ZXIgKiluZXRkZXZfcHJpdihuZXRkZXYpKS1cdTAwM2VudW1fcnhfcXVldWVzKSAqIFxcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9peGdiZXZmL2V0aHRvb2wuYzo2NDpcdCAoc2l6ZW9mKHN0cnVjdCBpeGdiZXZmX3N0YXRzKSAvIHNpemVvZih1NjQpKSlcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2l4Z2JldmYvZXRodG9vbC5jOjY1OiNkZWZpbmUgSVhHQkVWRl9HTE9CQUxfU1RBVFNfTEVOIEFSUkFZX1NJWkUoaXhnYmV2Zl9nc3RyaW5nc19zdGF0cylcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2l4Z2JldmYvZXRodG9vbC5jLTY2LVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2l4Z2JldmYvZXRodG9vbC5jPTY4PXN0YXRpYyBjb25zdCBjaGFyIGl4Z2JlX2dzdHJpbmdzX3Rlc3RbXVtFVEhfR1NUUklOR19MRU5dID0ge1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2l4Z2JldmYvZXRodG9vbC5jLTc0LVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaXhnYmV2Zi9ldGh0b29sLmM6NzU6c3RhdGljIGNvbnN0IGNoYXIgaXhnYmV2Zl9wcml2X2ZsYWdzX3N0cmluZ3NbXVtFVEhfR1NUUklOR19MRU5dID0ge1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaXhnYmV2Zi9ldGh0b29sLmMtNzYtI2RlZmluZSBJWEdCRVZGX1BSSVZfRkxBR1NfTEVHQUNZX1JYXHRCSVQoMClcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9peGdiZXZmL2V0aHRvb2wuYy03OS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2l4Z2JldmYvZXRodG9vbC5jOjgwOiNkZWZpbmUgSVhHQkVWRl9QUklWX0ZMQUdTX1NUUl9MRU4gQVJSQVlfU0laRShpeGdiZXZmX3ByaXZfZmxhZ3Nfc3RyaW5ncylcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2l4Z2JldmYvZXRodG9vbC5jLTgxLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaXhnYmV2Zi9ldGh0b29sLmM6ODI6c3RhdGljIGludCBpeGdiZXZmX2dldF9saW5rX2tzZXR0aW5ncyhzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaXhnYmV2Zi9ldGh0b29sLmMtODMtXHRcdFx0XHQgICAgICBzdHJ1Y3QgZXRodG9vbF9saW5rX2tzZXR0aW5ncyAqY21kKVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaXhnYmV2Zi9ldGh0b29sLmMtODQte1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaXhnYmV2Zi9ldGh0b29sLmM6ODU6XHRzdHJ1Y3QgaXhnYmV2Zl9hZGFwdGVyICphZGFwdGVyID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2l4Z2JldmYvZXRodG9vbC5jLTg2LVx0c3RydWN0IGl4Z2JlX2h3ICpodyA9IFx1MDAyNmFkYXB0ZXItXHUwMDNlaHc7XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaXhnYmV2Zi9ldGh0b29sLmMtMTI4LVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaXhnYmV2Zi9ldGh0b29sLmM6MTI5OnN0YXRpYyB1MzIgaXhnYmV2Zl9nZXRfbXNnbGV2ZWwoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldilcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2l4Z2JldmYvZXRodG9vbC5jLTEzMC17XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9peGdiZXZmL2V0aHRvb2wuYzoxMzE6XHRzdHJ1Y3QgaXhnYmV2Zl9hZGFwdGVyICphZGFwdGVyID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2l4Z2JldmYvZXRodG9vbC5jLTEzMi1cbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9peGdiZXZmL2V0aHRvb2wuYy0xMzUtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9peGdiZXZmL2V0aHRvb2wuYzoxMzY6c3RhdGljIHZvaWQgaXhnYmV2Zl9zZXRfbXNnbGV2ZWwoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwgdTMyIGRhdGEpXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9peGdiZXZmL2V0aHRvb2wuYy0xMzcte1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaXhnYmV2Zi9ldGh0b29sLmM6MTM4Olx0c3RydWN0IGl4Z2JldmZfYWRhcHRlciAqYWRhcHRlciA9IG5ldGRldl9wcml2KG5ldGRldik7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9peGdiZXZmL2V0aHRvb2wuYy0xMzktXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaXhnYmV2Zi9ldGh0b29sLmMtMTQyLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaXhnYmV2Zi9ldGh0b29sLmM6MTQzOnN0YXRpYyBpbnQgaXhnYmV2Zl9nZXRfcmVnc19sZW4oc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldilcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2l4Z2JldmYvZXRodG9vbC5jLTE0NC17XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaXhnYmV2Zi9ldGh0b29sLmMtMTQ4LVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaXhnYmV2Zi9ldGh0b29sLmM6MTQ5OnN0YXRpYyB2b2lkIGl4Z2JldmZfZ2V0X3JlZ3Moc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldixcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2l4Z2JldmYvZXRodG9vbC5jLTE1MC1cdFx0XHQgICAgIHN0cnVjdCBldGh0b29sX3JlZ3MgKnJlZ3MsXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaXhnYmV2Zi9ldGh0b29sLmMtMTUyLXtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2l4Z2JldmYvZXRodG9vbC5jOjE1MzpcdHN0cnVjdCBpeGdiZXZmX2FkYXB0ZXIgKmFkYXB0ZXIgPSBuZXRkZXZfcHJpdihuZXRkZXYpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaXhnYmV2Zi9ldGh0b29sLmMtMTU0LVx0c3RydWN0IGl4Z2JlX2h3ICpodyA9IFx1MDAyNmFkYXB0ZXItXHUwMDNlaHc7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9peGdiZXZmL2V0aHRvb2wuYy0xNTUtXHR1MzIgKnJlZ3NfYnVmZiA9IHA7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9peGdiZXZmL2V0aHRvb2wuYzoxNTY6XHR1MzIgcmVnc19sZW4gPSBpeGdiZXZmX2dldF9yZWdzX2xlbihuZXRkZXYpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaXhnYmV2Zi9ldGh0b29sLmMtMTU3LVx0dTggaTtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9peGdiZXZmL2V0aHRvb2wuYy0yMjItXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9peGdiZXZmL2V0aHRvb2wuYzoyMjM6c3RhdGljIHZvaWQgaXhnYmV2Zl9nZXRfZHJ2aW5mbyhzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaXhnYmV2Zi9ldGh0b29sLmMtMjI0LVx0XHRcdFx0c3RydWN0IGV0aHRvb2xfZHJ2aW5mbyAqZHJ2aW5mbylcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2l4Z2JldmYvZXRodG9vbC5jLTIyNS17XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9peGdiZXZmL2V0aHRvb2wuYzoyMjY6XHRzdHJ1Y3QgaXhnYmV2Zl9hZGFwdGVyICphZGFwdGVyID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2l4Z2JldmYvZXRodG9vbC5jLTIyNy1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2l4Z2JldmYvZXRodG9vbC5jOjIyODpcdHN0cnNjcHkoZHJ2aW5mby1cdTAwM2Vkcml2ZXIsIGl4Z2JldmZfZHJpdmVyX25hbWUsIHNpemVvZihkcnZpbmZvLVx1MDAzZWRyaXZlcikpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaXhnYmV2Zi9ldGh0b29sLmMtMjI5LVx0c3Ryc2NweShkcnZpbmZvLVx1MDAzZWJ1c19pbmZvLCBwY2lfbmFtZShhZGFwdGVyLVx1MDAzZXBkZXYpLFxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2l4Z2JldmYvZXRodG9vbC5jLTIzNC1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2l4Z2JldmYvZXRodG9vbC5jOjIzNTpzdGF0aWMgdm9pZCBpeGdiZXZmX2dldF9yaW5ncGFyYW0oc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldixcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2l4Z2JldmYvZXRodG9vbC5jLTIzNi1cdFx0XHRcdCAgc3RydWN0IGV0aHRvb2xfcmluZ3BhcmFtICpyaW5nLFxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2l4Z2JldmYvZXRodG9vbC5jLTIzOS17XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9peGdiZXZmL2V0aHRvb2wuYzoyNDA6XHRzdHJ1Y3QgaXhnYmV2Zl9hZGFwdGVyICphZGFwdGVyID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2l4Z2JldmYvZXRodG9vbC5jLTI0MS1cbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9peGdiZXZmL2V0aHRvb2wuYy0yNDctXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9peGdiZXZmL2V0aHRvb2wuYzoyNDg6c3RhdGljIGludCBpeGdiZXZmX3NldF9yaW5ncGFyYW0oc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldixcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2l4Z2JldmYvZXRodG9vbC5jLTI0OS1cdFx0XHRcdCBzdHJ1Y3QgZXRodG9vbF9yaW5ncGFyYW0gKnJpbmcsXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaXhnYmV2Zi9ldGh0b29sLmMtMjUyLXtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2l4Z2JldmYvZXRodG9vbC5jOjI1MzpcdHN0cnVjdCBpeGdiZXZmX2FkYXB0ZXIgKmFkYXB0ZXIgPSBuZXRkZXZfcHJpdihuZXRkZXYpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaXhnYmV2Zi9ldGh0b29sLmM6MjU0Olx0c3RydWN0IGl4Z2JldmZfcmluZyAqdHhfcmluZyA9IE5VTEwsICpyeF9yaW5nID0gTlVMTDtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2l4Z2JldmYvZXRodG9vbC5jLTI1NS1cdHUzMiBuZXdfcnhfY291bnQsIG5ld190eF9jb3VudDtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9peGdiZXZmL2V0aHRvb2wuYy0zMDItXHRcdFx0dHhfcmluZ1tpXS5jb3VudCA9IG5ld190eF9jb3VudDtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2l4Z2JldmYvZXRodG9vbC5jOjMwMzpcdFx0XHRlcnIgPSBpeGdiZXZmX3NldHVwX3R4X3Jlc291cmNlcyhcdTAwMjZ0eF9yaW5nW2ldKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2l4Z2JldmYvZXRodG9vbC5jLTMwNC1cdFx0XHRpZiAoZXJyKSB7XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaXhnYmV2Zi9ldGh0b29sLmMtMzA2LVx0XHRcdFx0XHRpLS07XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9peGdiZXZmL2V0aHRvb2wuYzozMDc6XHRcdFx0XHRcdGl4Z2JldmZfZnJlZV90eF9yZXNvdXJjZXMoXHUwMDI2dHhfcmluZ1tpXSk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9peGdiZXZmL2V0aHRvb2wuYy0zMDgtXHRcdFx0XHR9XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaXhnYmV2Zi9ldGh0b29sLmMtMzIwLVx0XHRcdHR4X3JpbmdbaV0uY291bnQgPSBuZXdfdHhfY291bnQ7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9peGdiZXZmL2V0aHRvb2wuYzozMjE6XHRcdFx0ZXJyID0gaXhnYmV2Zl9zZXR1cF90eF9yZXNvdXJjZXMoXHUwMDI2dHhfcmluZ1tpXSk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9peGdiZXZmL2V0aHRvb2wuYy0zMjItXHRcdFx0aWYgKGVycikge1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2l4Z2JldmYvZXRodG9vbC5jLTMyNC1cdFx0XHRcdFx0aS0tO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaXhnYmV2Zi9ldGh0b29sLmM6MzI1Olx0XHRcdFx0XHRpeGdiZXZmX2ZyZWVfdHhfcmVzb3VyY2VzKFx1MDAyNnR4X3JpbmdbaV0pO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaXhnYmV2Zi9ldGh0b29sLmMtMzI2LVx0XHRcdFx0fVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2l4Z2JldmYvZXRodG9vbC5jLTM1Mi1cdFx0XHRyeF9yaW5nW2ldLmNvdW50ID0gbmV3X3J4X2NvdW50O1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaXhnYmV2Zi9ldGh0b29sLmM6MzUzOlx0XHRcdGVyciA9IGl4Z2JldmZfc2V0dXBfcnhfcmVzb3VyY2VzKGFkYXB0ZXIsIFx1MDAyNnJ4X3JpbmdbaV0pO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaXhnYmV2Zi9ldGh0b29sLmMtMzU0LVx0XHRcdGlmIChlcnIpIHtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9peGdiZXZmL2V0aHRvb2wuYy0zNTYtXHRcdFx0XHRcdGktLTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2l4Z2JldmYvZXRodG9vbC5jOjM1NzpcdFx0XHRcdFx0aXhnYmV2Zl9mcmVlX3J4X3Jlc291cmNlcyhcdTAwMjZyeF9yaW5nW2ldKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2l4Z2JldmYvZXRodG9vbC5jLTM1OC1cdFx0XHRcdH1cbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9peGdiZXZmL2V0aHRvb2wuYy0zNjgtXHQvKiBicmluZyBpbnRlcmZhY2UgZG93biB0byBwcmVwYXJlIGZvciB1cGRhdGUgKi9cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2l4Z2JldmYvZXRodG9vbC5jOjM2OTpcdGl4Z2JldmZfZG93bihhZGFwdGVyKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2l4Z2JldmYvZXRodG9vbC5jLTM3MC1cbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9peGdiZXZmL2V0aHRvb2wuYy0zNzMtXHRcdGZvciAoaSA9IDA7IGkgXHUwMDNjIGFkYXB0ZXItXHUwMDNlbnVtX3R4X3F1ZXVlczsgaSYjNDM7JiM0MzspIHtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2l4Z2JldmYvZXRodG9vbC5jOjM3NDpcdFx0XHRpeGdiZXZmX2ZyZWVfdHhfcmVzb3VyY2VzKGFkYXB0ZXItXHUwMDNldHhfcmluZ1tpXSk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9peGdiZXZmL2V0aHRvb2wuYy0zNzUtXHRcdFx0KmFkYXB0ZXItXHUwMDNldHhfcmluZ1tpXSA9IHR4X3JpbmdbaV07XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaXhnYmV2Zi9ldGh0b29sLmMtMzc5LVx0XHRmb3IgKGogPSAwOyBqIFx1MDAzYyBhZGFwdGVyLVx1MDAzZW51bV94ZHBfcXVldWVzOyBpJiM0MzsmIzQzOywgaiYjNDM7JiM0MzspIHtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2l4Z2JldmYvZXRodG9vbC5jOjM4MDpcdFx0XHRpeGdiZXZmX2ZyZWVfdHhfcmVzb3VyY2VzKGFkYXB0ZXItXHUwMDNleGRwX3Jpbmdbal0pO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaXhnYmV2Zi9ldGh0b29sLmMtMzgxLVx0XHRcdCphZGFwdGVyLVx1MDAzZXhkcF9yaW5nW2pdID0gdHhfcmluZ1tpXTtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9peGdiZXZmL2V0aHRvb2wuYy0zOTEtXHRcdGZvciAoaSA9IDA7IGkgXHUwMDNjIGFkYXB0ZXItXHUwMDNlbnVtX3J4X3F1ZXVlczsgaSYjNDM7JiM0MzspIHtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2l4Z2JldmYvZXRodG9vbC5jOjM5MjpcdFx0XHRpeGdiZXZmX2ZyZWVfcnhfcmVzb3VyY2VzKGFkYXB0ZXItXHUwMDNlcnhfcmluZ1tpXSk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9peGdiZXZmL2V0aHRvb2wuYy0zOTMtXHRcdFx0KmFkYXB0ZXItXHUwMDNlcnhfcmluZ1tpXSA9IHJ4X3JpbmdbaV07XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaXhnYmV2Zi9ldGh0b29sLmMtNDAxLVx0LyogcmVzdG9yZSBpbnRlcmZhY2UgdXNpbmcgbmV3IHZhbHVlcyAqL1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaXhnYmV2Zi9ldGh0b29sLmM6NDAyOlx0aXhnYmV2Zl91cChhZGFwdGVyKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2l4Z2JldmYvZXRodG9vbC5jLTQwMy1cbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9peGdiZXZmL2V0aHRvb2wuYy00MDgtXHRcdCAgICAgaSBcdTAwM2MgYWRhcHRlci1cdTAwM2VudW1fdHhfcXVldWVzICYjNDM7IGFkYXB0ZXItXHUwMDNlbnVtX3hkcF9xdWV1ZXM7IGkmIzQzOyYjNDM7KVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaXhnYmV2Zi9ldGh0b29sLmM6NDA5Olx0XHRcdGl4Z2JldmZfZnJlZV90eF9yZXNvdXJjZXMoXHUwMDI2dHhfcmluZ1tpXSk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9peGdiZXZmL2V0aHRvb2wuYy00MTAtXHRcdHZmcmVlKHR4X3JpbmcpO1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2l4Z2JldmYvZXRodG9vbC5jLTQxNi1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2l4Z2JldmYvZXRodG9vbC5jOjQxNzpzdGF0aWMgaW50IGl4Z2JldmZfZ2V0X3NzZXRfY291bnQoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwgaW50IHN0cmluZ3NldClcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2l4Z2JldmYvZXRodG9vbC5jLTQxOC17XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaXhnYmV2Zi9ldGh0b29sLmMtNDMwLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaXhnYmV2Zi9ldGh0b29sLmM6NDMxOnN0YXRpYyB2b2lkIGl4Z2JldmZfZ2V0X2V0aHRvb2xfc3RhdHMoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldixcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2l4Z2JldmYvZXRodG9vbC5jLTQzMi1cdFx0XHRcdCAgICAgIHN0cnVjdCBldGh0b29sX3N0YXRzICpzdGF0cywgdTY0ICpkYXRhKVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaXhnYmV2Zi9ldGh0b29sLmMtNDMzLXtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2l4Z2JldmYvZXRodG9vbC5jOjQzNDpcdHN0cnVjdCBpeGdiZXZmX2FkYXB0ZXIgKmFkYXB0ZXIgPSBuZXRkZXZfcHJpdihuZXRkZXYpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaXhnYmV2Zi9ldGh0b29sLmMtNDM1LVx0c3RydWN0IHJ0bmxfbGlua19zdGF0czY0IHRlbXA7XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaXhnYmV2Zi9ldGh0b29sLmMtNDM3LVx0dW5zaWduZWQgaW50IHN0YXJ0O1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaXhnYmV2Zi9ldGh0b29sLmM6NDM4Olx0c3RydWN0IGl4Z2JldmZfcmluZyAqcmluZztcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2l4Z2JldmYvZXRodG9vbC5jLTQzOS1cdGludCBpLCBqO1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2l4Z2JldmYvZXRodG9vbC5jLTQ0MS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2l4Z2JldmYvZXRodG9vbC5jOjQ0MjpcdGl4Z2JldmZfdXBkYXRlX3N0YXRzKGFkYXB0ZXIpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaXhnYmV2Zi9ldGh0b29sLmMtNDQzLVx0bmV0X3N0YXRzID0gZGV2X2dldF9zdGF0cyhuZXRkZXYsIFx1MDAyNnRlbXApO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaXhnYmV2Zi9ldGh0b29sLmMtNDQ0LVx0Zm9yIChpID0gMDsgaSBcdTAwM2MgSVhHQkVWRl9HTE9CQUxfU1RBVFNfTEVOOyBpJiM0MzsmIzQzOykge1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaXhnYmV2Zi9ldGh0b29sLmM6NDQ1Olx0XHRzd2l0Y2ggKGl4Z2JldmZfZ3N0cmluZ3Nfc3RhdHNbaV0udHlwZSkge1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaXhnYmV2Zi9ldGh0b29sLmMtNDQ2LVx0XHRjYXNlIE5FVERFVl9TVEFUUzpcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2l4Z2JldmYvZXRodG9vbC5jLTQ0Ny1cdFx0XHRwID0gKGNoYXIgKiluZXRfc3RhdHMgJiM0MztcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2l4Z2JldmYvZXRodG9vbC5jOjQ0ODpcdFx0XHRcdFx0aXhnYmV2Zl9nc3RyaW5nc19zdGF0c1tpXS5zdGF0X29mZnNldDtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2l4Z2JldmYvZXRodG9vbC5jLTQ0OS1cdFx0XHRicmVhaztcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9peGdiZXZmL2V0aHRvb2wuYy00NTEtXHRcdFx0cCA9IChjaGFyICopYWRhcHRlciAmIzQzO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaXhnYmV2Zi9ldGh0b29sLmM6NDUyOlx0XHRcdFx0XHRpeGdiZXZmX2dzdHJpbmdzX3N0YXRzW2ldLnN0YXRfb2Zmc2V0O1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaXhnYmV2Zi9ldGh0b29sLmMtNDUzLVx0XHRcdGJyZWFrO1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2l4Z2JldmYvZXRodG9vbC5jLTQ1OC1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2l4Z2JldmYvZXRodG9vbC5jOjQ1OTpcdFx0ZGF0YVtpXSA9IChpeGdiZXZmX2dzdHJpbmdzX3N0YXRzW2ldLnNpemVvZl9zdGF0ID09XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9peGdiZXZmL2V0aHRvb2wuYy00NjAtXHRcdFx0ICAgc2l6ZW9mKHU2NCkpID8gKih1NjQgKilwIDogKih1MzIgKilwO1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2l4Z2JldmYvZXRodG9vbC5jLTUxNC1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2l4Z2JldmYvZXRodG9vbC5jOjUxNTpzdGF0aWMgdm9pZCBpeGdiZXZmX2dldF9zdHJpbmdzKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsIHUzMiBzdHJpbmdzZXQsXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9peGdiZXZmL2V0aHRvb2wuYy01MTYtXHRcdFx0XHR1OCAqZGF0YSlcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2l4Z2JldmYvZXRodG9vbC5jLTUxNy17XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9peGdiZXZmL2V0aHRvb2wuYzo1MTg6XHRzdHJ1Y3QgaXhnYmV2Zl9hZGFwdGVyICphZGFwdGVyID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2l4Z2JldmYvZXRodG9vbC5jLTUxOS1cdGNoYXIgKnAgPSAoY2hhciAqKWRhdGE7XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaXhnYmV2Zi9ldGh0b29sLmMtNTI4LVx0XHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBJWEdCRVZGX0dMT0JBTF9TVEFUU19MRU47IGkmIzQzOyYjNDM7KSB7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9peGdiZXZmL2V0aHRvb2wuYzo1Mjk6XHRcdFx0bWVtY3B5KHAsIGl4Z2JldmZfZ3N0cmluZ3Nfc3RhdHNbaV0uc3RhdF9zdHJpbmcsXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9peGdiZXZmL2V0aHRvb2wuYy01MzAtXHRcdFx0ICAgICAgIEVUSF9HU1RSSU5HX0xFTik7XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaXhnYmV2Zi9ldGh0b29sLmMtNTUzLVx0Y2FzZSBFVEhfU1NfUFJJVl9GTEFHUzpcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2l4Z2JldmYvZXRodG9vbC5jOjU1NDpcdFx0bWVtY3B5KGRhdGEsIGl4Z2JldmZfcHJpdl9mbGFnc19zdHJpbmdzLFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaXhnYmV2Zi9ldGh0b29sLmMtNTU1LVx0XHQgICAgICAgSVhHQkVWRl9QUklWX0ZMQUdTX1NUUl9MRU4gKiBFVEhfR1NUUklOR19MRU4pO1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2l4Z2JldmYvZXRodG9vbC5jLTU1OS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2l4Z2JldmYvZXRodG9vbC5jOjU2MDpzdGF0aWMgaW50IGl4Z2JldmZfbGlua190ZXN0KHN0cnVjdCBpeGdiZXZmX2FkYXB0ZXIgKmFkYXB0ZXIsIHU2NCAqZGF0YSlcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2l4Z2JldmYvZXRodG9vbC5jLTU2MS17XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaXhnYmV2Zi9ldGh0b29sLmMtNTc0LS8qIGV0aHRvb2wgcmVnaXN0ZXIgdGVzdCBkYXRhICovXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9peGdiZXZmL2V0aHRvb2wuYzo1NzU6c3RydWN0IGl4Z2JldmZfcmVnX3Rlc3Qge1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaXhnYmV2Zi9ldGh0b29sLmMtNTc2LVx0dTE2IHJlZztcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9peGdiZXZmL2V0aHRvb2wuYy02MDAtLyogZGVmYXVsdCBWRiByZWdpc3RlciB0ZXN0ICovXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9peGdiZXZmL2V0aHRvb2wuYzo2MDE6c3RhdGljIGNvbnN0IHN0cnVjdCBpeGdiZXZmX3JlZ190ZXN0IHJlZ190ZXN0X3ZmW10gPSB7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9peGdiZXZmL2V0aHRvb2wuYy02MDItXHR7IElYR0JFX1ZGUkRCQUwoMCksIDIsIFBBVFRFUk5fVEVTVCwgMHhGRkZGRkY4MCwgMHhGRkZGRkY4MCB9LFxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2l4Z2JldmYvZXRodG9vbC5jPTYxND1zdGF0aWMgY29uc3QgdTMyIHJlZ2lzdGVyX3Rlc3RfcGF0dGVybnNbXSA9IHtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9peGdiZXZmL2V0aHRvb2wuYy02MTctXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9peGdiZXZmL2V0aHRvb2wuYzo2MTg6c3RhdGljIGJvb2wgcmVnX3BhdHRlcm5fdGVzdChzdHJ1Y3QgaXhnYmV2Zl9hZGFwdGVyICphZGFwdGVyLCB1NjQgKmRhdGEsXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9peGdiZXZmL2V0aHRvb2wuYy02MTktXHRcdFx0ICAgICBpbnQgcmVnLCB1MzIgbWFzaywgdTMyIHdyaXRlKVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2l4Z2JldmYvZXRodG9vbC5jLTYyNy1cdGZvciAocGF0ID0gMDsgcGF0IFx1MDAzYyBBUlJBWV9TSVpFKHJlZ2lzdGVyX3Rlc3RfcGF0dGVybnMpOyBwYXQmIzQzOyYjNDM7KSB7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9peGdiZXZmL2V0aHRvb2wuYzo2Mjg6XHRcdGJlZm9yZSA9IGl4Z2JldmZfcmVhZF9yZWcoXHUwMDI2YWRhcHRlci1cdTAwM2VodywgcmVnKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2l4Z2JldmYvZXRodG9vbC5jLTYyOS1cdFx0aXhnYmVfd3JpdGVfcmVnKFx1MDAyNmFkYXB0ZXItXHUwMDNlaHcsIHJlZyxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2l4Z2JldmYvZXRodG9vbC5jLTYzMC1cdFx0XHRcdHJlZ2lzdGVyX3Rlc3RfcGF0dGVybnNbcGF0XSBcdTAwMjYgd3JpdGUpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaXhnYmV2Zi9ldGh0b29sLmM6NjMxOlx0XHR2YWwgPSBpeGdiZXZmX3JlYWRfcmVnKFx1MDAyNmFkYXB0ZXItXHUwMDNlaHcsIHJlZyk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9peGdiZXZmL2V0aHRvb2wuYy02MzItXHRcdGlmICh2YWwgIT0gKHJlZ2lzdGVyX3Rlc3RfcGF0dGVybnNbcGF0XSBcdTAwMjYgd3JpdGUgXHUwMDI2IG1hc2spKSB7XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaXhnYmV2Zi9ldGh0b29sLmMtNjQ1LVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaXhnYmV2Zi9ldGh0b29sLmM6NjQ2OnN0YXRpYyBib29sIHJlZ19zZXRfYW5kX2NoZWNrKHN0cnVjdCBpeGdiZXZmX2FkYXB0ZXIgKmFkYXB0ZXIsIHU2NCAqZGF0YSxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2l4Z2JldmYvZXRodG9vbC5jLTY0Ny1cdFx0XHQgICAgICBpbnQgcmVnLCB1MzIgbWFzaywgdTMyIHdyaXRlKVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2l4Z2JldmYvZXRodG9vbC5jLTY1NC1cdH1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2l4Z2JldmYvZXRodG9vbC5jOjY1NTpcdGJlZm9yZSA9IGl4Z2JldmZfcmVhZF9yZWcoXHUwMDI2YWRhcHRlci1cdTAwM2VodywgcmVnKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2l4Z2JldmYvZXRodG9vbC5jLTY1Ni1cdGl4Z2JlX3dyaXRlX3JlZyhcdTAwMjZhZGFwdGVyLVx1MDAzZWh3LCByZWcsIHdyaXRlIFx1MDAyNiBtYXNrKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2l4Z2JldmYvZXRodG9vbC5jOjY1NzpcdHZhbCA9IGl4Z2JldmZfcmVhZF9yZWcoXHUwMDI2YWRhcHRlci1cdTAwM2VodywgcmVnKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2l4Z2JldmYvZXRodG9vbC5jLTY1OC1cdGlmICgod3JpdGUgXHUwMDI2IG1hc2spICE9ICh2YWwgXHUwMDI2IG1hc2spKSB7XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaXhnYmV2Zi9ldGh0b29sLmMtNjY4LVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaXhnYmV2Zi9ldGh0b29sLmM6NjY5OnN0YXRpYyBpbnQgaXhnYmV2Zl9yZWdfdGVzdChzdHJ1Y3QgaXhnYmV2Zl9hZGFwdGVyICphZGFwdGVyLCB1NjQgKmRhdGEpXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9peGdiZXZmL2V0aHRvb2wuYy02NzAte1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaXhnYmV2Zi9ldGh0b29sLmM6NjcxOlx0Y29uc3Qgc3RydWN0IGl4Z2JldmZfcmVnX3Rlc3QgKnRlc3Q7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9peGdiZXZmL2V0aHRvb2wuYy02NzItXHR1MzIgaTtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9peGdiZXZmL2V0aHRvb2wuYy03MzUtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9peGdiZXZmL2V0aHRvb2wuYzo3MzY6c3RhdGljIHZvaWQgaXhnYmV2Zl9kaWFnX3Rlc3Qoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldixcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2l4Z2JldmYvZXRodG9vbC5jLTczNy1cdFx0XHQgICAgICBzdHJ1Y3QgZXRodG9vbF90ZXN0ICpldGhfdGVzdCwgdTY0ICpkYXRhKVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaXhnYmV2Zi9ldGh0b29sLmMtNzM4LXtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2l4Z2JldmYvZXRodG9vbC5jOjczOTpcdHN0cnVjdCBpeGdiZXZmX2FkYXB0ZXIgKmFkYXB0ZXIgPSBuZXRkZXZfcHJpdihuZXRkZXYpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaXhnYmV2Zi9ldGh0b29sLmMtNzQwLVx0Ym9vbCBpZl9ydW5uaW5nID0gbmV0aWZfcnVubmluZyhuZXRkZXYpO1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2l4Z2JldmYvZXRodG9vbC5jLTc1OC1cdFx0ICovXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9peGdiZXZmL2V0aHRvb2wuYzo3NTk6XHRcdGlmIChpeGdiZXZmX2xpbmtfdGVzdChhZGFwdGVyLCBcdTAwMjZkYXRhWzFdKSlcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2l4Z2JldmYvZXRodG9vbC5jLTc2MC1cdFx0XHRldGhfdGVzdC1cdTAwM2VmbGFncyB8PSBFVEhfVEVTVF9GTF9GQUlMRUQ7XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaXhnYmV2Zi9ldGh0b29sLmMtNzYzLVx0XHRcdC8qIGluZGljYXRlIHdlJiMzOTtyZSBpbiB0ZXN0IG1vZGUgKi9cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2l4Z2JldmYvZXRodG9vbC5jOjc2NDpcdFx0XHRpeGdiZXZmX2Nsb3NlKG5ldGRldik7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9peGdiZXZmL2V0aHRvb2wuYy03NjUtXHRcdGVsc2VcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2l4Z2JldmYvZXRodG9vbC5jOjc2NjpcdFx0XHRpeGdiZXZmX3Jlc2V0KGFkYXB0ZXIpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaXhnYmV2Zi9ldGh0b29sLmMtNzY3LVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaXhnYmV2Zi9ldGh0b29sLmMtNzY4LVx0XHRod19kYmcoXHUwMDI2YWRhcHRlci1cdTAwM2VodywgXCYjMzQ7cmVnaXN0ZXIgdGVzdGluZyBzdGFydGluZ1xcblwmIzM0Oyk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9peGdiZXZmL2V0aHRvb2wuYzo3Njk6XHRcdGlmIChpeGdiZXZmX3JlZ190ZXN0KGFkYXB0ZXIsIFx1MDAyNmRhdGFbMF0pKVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaXhnYmV2Zi9ldGh0b29sLmMtNzcwLVx0XHRcdGV0aF90ZXN0LVx1MDAzZWZsYWdzIHw9IEVUSF9URVNUX0ZMX0ZBSUxFRDtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2l4Z2JldmYvZXRodG9vbC5jLTc3MS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2l4Z2JldmYvZXRodG9vbC5jOjc3MjpcdFx0aXhnYmV2Zl9yZXNldChhZGFwdGVyKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2l4Z2JldmYvZXRodG9vbC5jLTc3My1cbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9peGdiZXZmL2V0aHRvb2wuYy03NzUtXHRcdGlmIChpZl9ydW5uaW5nKVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaXhnYmV2Zi9ldGh0b29sLmM6Nzc2Olx0XHRcdGl4Z2JldmZfb3BlbihuZXRkZXYpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaXhnYmV2Zi9ldGh0b29sLmMtNzc3LVx0fSBlbHNlIHtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9peGdiZXZmL2V0aHRvb2wuYy03NzktXHRcdC8qIE9ubGluZSB0ZXN0cyAqL1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaXhnYmV2Zi9ldGh0b29sLmM6NzgwOlx0XHRpZiAoaXhnYmV2Zl9saW5rX3Rlc3QoYWRhcHRlciwgXHUwMDI2ZGF0YVsxXSkpXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9peGdiZXZmL2V0aHRvb2wuYy03ODEtXHRcdFx0ZXRoX3Rlc3QtXHUwMDNlZmxhZ3MgfD0gRVRIX1RFU1RfRkxfRkFJTEVEO1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2l4Z2JldmYvZXRodG9vbC5jLTc5MC1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2l4Z2JldmYvZXRodG9vbC5jOjc5MTpzdGF0aWMgaW50IGl4Z2JldmZfbndheV9yZXNldChzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2KVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaXhnYmV2Zi9ldGh0b29sLmMtNzkyLXtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2l4Z2JldmYvZXRodG9vbC5jOjc5MzpcdHN0cnVjdCBpeGdiZXZmX2FkYXB0ZXIgKmFkYXB0ZXIgPSBuZXRkZXZfcHJpdihuZXRkZXYpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaXhnYmV2Zi9ldGh0b29sLmMtNzk0LVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaXhnYmV2Zi9ldGh0b29sLmMtNzk1LVx0aWYgKG5ldGlmX3J1bm5pbmcobmV0ZGV2KSlcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2l4Z2JldmYvZXRodG9vbC5jOjc5NjpcdFx0aXhnYmV2Zl9yZWluaXRfbG9ja2VkKGFkYXB0ZXIpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaXhnYmV2Zi9ldGh0b29sLmMtNzk3LVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2l4Z2JldmYvZXRodG9vbC5jLTgwMC1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2l4Z2JldmYvZXRodG9vbC5jOjgwMTpzdGF0aWMgaW50IGl4Z2JldmZfZ2V0X2NvYWxlc2NlKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9peGdiZXZmL2V0aHRvb2wuYy04MDItXHRcdFx0XHRzdHJ1Y3QgZXRodG9vbF9jb2FsZXNjZSAqZWMsXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaXhnYmV2Zi9ldGh0b29sLmMtODA1LXtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2l4Z2JldmYvZXRodG9vbC5jOjgwNjpcdHN0cnVjdCBpeGdiZXZmX2FkYXB0ZXIgKmFkYXB0ZXIgPSBuZXRkZXZfcHJpdihuZXRkZXYpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaXhnYmV2Zi9ldGh0b29sLmMtODA3LVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2l4Z2JldmYvZXRodG9vbC5jLTgyNi1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2l4Z2JldmYvZXRodG9vbC5jOjgyNzpzdGF0aWMgaW50IGl4Z2JldmZfc2V0X2NvYWxlc2NlKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9peGdiZXZmL2V0aHRvb2wuYy04MjgtXHRcdFx0XHRzdHJ1Y3QgZXRodG9vbF9jb2FsZXNjZSAqZWMsXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaXhnYmV2Zi9ldGh0b29sLmMtODMxLXtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2l4Z2JldmYvZXRodG9vbC5jOjgzMjpcdHN0cnVjdCBpeGdiZXZmX2FkYXB0ZXIgKmFkYXB0ZXIgPSBuZXRkZXZfcHJpdihuZXRkZXYpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaXhnYmV2Zi9ldGh0b29sLmM6ODMzOlx0c3RydWN0IGl4Z2JldmZfcV92ZWN0b3IgKnFfdmVjdG9yO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaXhnYmV2Zi9ldGh0b29sLmMtODM0LVx0aW50IG51bV92ZWN0b3JzLCBpO1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2l4Z2JldmYvZXRodG9vbC5jLTg3NS1cdFx0XHRxX3ZlY3Rvci1cdTAwM2VpdHIgPSByeF9pdHJfcGFyYW07XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9peGdiZXZmL2V0aHRvb2wuYzo4NzY6XHRcdGl4Z2JldmZfd3JpdGVfZWl0cihxX3ZlY3Rvcik7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9peGdiZXZmL2V0aHRvb2wuYy04NzctXHR9XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaXhnYmV2Zi9ldGh0b29sLmMtODgxLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaXhnYmV2Zi9ldGh0b29sLmM6ODgyOnN0YXRpYyB1MzIgaXhnYmV2Zl9nZXRfcnhfcmluZ19jb3VudChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaXhnYmV2Zi9ldGh0b29sLmMtODgzLXtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2l4Z2JldmYvZXRodG9vbC5jOjg4NDpcdHN0cnVjdCBpeGdiZXZmX2FkYXB0ZXIgKmFkYXB0ZXIgPSBuZXRkZXZfcHJpdihkZXYpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaXhnYmV2Zi9ldGh0b29sLmMtODg1LVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2l4Z2JldmYvZXRodG9vbC5jLTg4OC1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2l4Z2JldmYvZXRodG9vbC5jOjg4OTpzdGF0aWMgdTMyIGl4Z2JldmZfZ2V0X3J4ZmhfaW5kaXJfc2l6ZShzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2KVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaXhnYmV2Zi9ldGh0b29sLmMtODkwLXtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2l4Z2JldmYvZXRodG9vbC5jOjg5MTpcdHN0cnVjdCBpeGdiZXZmX2FkYXB0ZXIgKmFkYXB0ZXIgPSBuZXRkZXZfcHJpdihuZXRkZXYpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaXhnYmV2Zi9ldGh0b29sLmMtODkyLVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2l4Z2JldmYvZXRodG9vbC5jLTg5OC1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2l4Z2JldmYvZXRodG9vbC5jOjg5OTpzdGF0aWMgdTMyIGl4Z2JldmZfZ2V0X3J4Zmhfa2V5X3NpemUoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldilcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2l4Z2JldmYvZXRodG9vbC5jLTkwMC17XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaXhnYmV2Zi9ldGh0b29sLmMtOTAzLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaXhnYmV2Zi9ldGh0b29sLmM6OTA0OnN0YXRpYyBpbnQgaXhnYmV2Zl9nZXRfcnhmaChzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaXhnYmV2Zi9ldGh0b29sLmMtOTA1LVx0XHRcdCAgICBzdHJ1Y3QgZXRodG9vbF9yeGZoX3BhcmFtICpyeGZoKVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaXhnYmV2Zi9ldGh0b29sLmMtOTA2LXtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2l4Z2JldmYvZXRodG9vbC5jOjkwNzpcdHN0cnVjdCBpeGdiZXZmX2FkYXB0ZXIgKmFkYXB0ZXIgPSBuZXRkZXZfcHJpdihuZXRkZXYpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaXhnYmV2Zi9ldGh0b29sLmMtOTA4LVx0aW50IGVyciA9IDA7XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaXhnYmV2Zi9ldGh0b29sLmMtOTE0LVx0XHRcdG1lbWNweShyeGZoLVx1MDAzZWtleSwgYWRhcHRlci1cdTAwM2Vyc3Nfa2V5LFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaXhnYmV2Zi9ldGh0b29sLmM6OTE1Olx0XHRcdCAgICAgICBpeGdiZXZmX2dldF9yeGZoX2tleV9zaXplKG5ldGRldikpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaXhnYmV2Zi9ldGh0b29sLmMtOTE2LVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2l4Z2JldmYvZXRodG9vbC5jLTkzMS1cdFx0aWYgKHJ4ZmgtXHUwMDNlaW5kaXIpXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9peGdiZXZmL2V0aHRvb2wuYzo5MzI6XHRcdFx0ZXJyID0gaXhnYmV2Zl9nZXRfcmV0YV9sb2NrZWQoXHUwMDI2YWRhcHRlci1cdTAwM2VodyxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2l4Z2JldmYvZXRodG9vbC5jLTkzMy1cdFx0XHRcdFx0XHQgICAgICByeGZoLVx1MDAzZWluZGlyLFxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2l4Z2JldmYvZXRodG9vbC5jLTkzNi1cdFx0aWYgKCFlcnIgXHUwMDI2XHUwMDI2IHJ4ZmgtXHUwMDNla2V5KVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaXhnYmV2Zi9ldGh0b29sLmM6OTM3Olx0XHRcdGVyciA9IGl4Z2JldmZfZ2V0X3Jzc19rZXlfbG9ja2VkKFx1MDAyNmFkYXB0ZXItXHUwMDNlaHcsXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9peGdiZXZmL2V0aHRvb2wuYy05MzgtXHRcdFx0XHRcdFx0XHQgcnhmaC1cdTAwM2VrZXkpO1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2l4Z2JldmYvZXRodG9vbC5jLTk0NS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2l4Z2JldmYvZXRodG9vbC5jOjk0NjpzdGF0aWMgdTMyIGl4Z2JldmZfZ2V0X3ByaXZfZmxhZ3Moc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldilcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2l4Z2JldmYvZXRodG9vbC5jLTk0Ny17XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9peGdiZXZmL2V0aHRvb2wuYzo5NDg6XHRzdHJ1Y3QgaXhnYmV2Zl9hZGFwdGVyICphZGFwdGVyID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2l4Z2JldmYvZXRodG9vbC5jLTk0OS1cdHUzMiBwcml2X2ZsYWdzID0gMDtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9peGdiZXZmL2V0aHRvb2wuYy05NTYtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9peGdiZXZmL2V0aHRvb2wuYzo5NTc6c3RhdGljIGludCBpeGdiZXZmX3NldF9wcml2X2ZsYWdzKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsIHUzMiBwcml2X2ZsYWdzKVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaXhnYmV2Zi9ldGh0b29sLmMtOTU4LXtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2l4Z2JldmYvZXRodG9vbC5jOjk1OTpcdHN0cnVjdCBpeGdiZXZmX2FkYXB0ZXIgKmFkYXB0ZXIgPSBuZXRkZXZfcHJpdihuZXRkZXYpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaXhnYmV2Zi9ldGh0b29sLmMtOTYwLVx0dW5zaWduZWQgaW50IGZsYWdzID0gYWRhcHRlci1cdTAwM2VmbGFncztcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9peGdiZXZmL2V0aHRvb2wuYy05NzAtXHRcdGlmIChuZXRpZl9ydW5uaW5nKG5ldGRldikpXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9peGdiZXZmL2V0aHRvb2wuYzo5NzE6XHRcdFx0aXhnYmV2Zl9yZWluaXRfbG9ja2VkKGFkYXB0ZXIpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaXhnYmV2Zi9ldGh0b29sLmMtOTcyLVx0fVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2l4Z2JldmYvZXRodG9vbC5jLTk3Ni1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2l4Z2JldmYvZXRodG9vbC5jOjk3NzpzdGF0aWMgY29uc3Qgc3RydWN0IGV0aHRvb2xfb3BzIGl4Z2JldmZfZXRodG9vbF9vcHMgPSB7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9peGdiZXZmL2V0aHRvb2wuYy05NzgtXHQuc3VwcG9ydGVkX2NvYWxlc2NlX3BhcmFtcyA9IEVUSFRPT0xfQ09BTEVTQ0VfVVNFQ1MsXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9peGdiZXZmL2V0aHRvb2wuYzo5Nzk6XHQuZ2V0X2RydmluZm9cdFx0PSBpeGdiZXZmX2dldF9kcnZpbmZvLFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaXhnYmV2Zi9ldGh0b29sLmM6OTgwOlx0LmdldF9yZWdzX2xlblx0XHQ9IGl4Z2JldmZfZ2V0X3JlZ3NfbGVuLFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaXhnYmV2Zi9ldGh0b29sLmM6OTgxOlx0LmdldF9yZWdzXHRcdD0gaXhnYmV2Zl9nZXRfcmVncyxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2l4Z2JldmYvZXRodG9vbC5jOjk4MjpcdC5ud2F5X3Jlc2V0XHRcdD0gaXhnYmV2Zl9ud2F5X3Jlc2V0LFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaXhnYmV2Zi9ldGh0b29sLmMtOTgzLVx0LmdldF9saW5rXHRcdD0gZXRodG9vbF9vcF9nZXRfbGluayxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2l4Z2JldmYvZXRodG9vbC5jOjk4NDpcdC5nZXRfcmluZ3BhcmFtXHRcdD0gaXhnYmV2Zl9nZXRfcmluZ3BhcmFtLFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaXhnYmV2Zi9ldGh0b29sLmM6OTg1Olx0LnNldF9yaW5ncGFyYW1cdFx0PSBpeGdiZXZmX3NldF9yaW5ncGFyYW0sXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9peGdiZXZmL2V0aHRvb2wuYzo5ODY6XHQuZ2V0X21zZ2xldmVsXHRcdD0gaXhnYmV2Zl9nZXRfbXNnbGV2ZWwsXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9peGdiZXZmL2V0aHRvb2wuYzo5ODc6XHQuc2V0X21zZ2xldmVsXHRcdD0gaXhnYmV2Zl9zZXRfbXNnbGV2ZWwsXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9peGdiZXZmL2V0aHRvb2wuYzo5ODg6XHQuc2VsZl90ZXN0XHRcdD0gaXhnYmV2Zl9kaWFnX3Rlc3QsXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9peGdiZXZmL2V0aHRvb2wuYzo5ODk6XHQuZ2V0X3NzZXRfY291bnRcdFx0PSBpeGdiZXZmX2dldF9zc2V0X2NvdW50LFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaXhnYmV2Zi9ldGh0b29sLmM6OTkwOlx0LmdldF9zdHJpbmdzXHRcdD0gaXhnYmV2Zl9nZXRfc3RyaW5ncyxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2l4Z2JldmYvZXRodG9vbC5jOjk5MTpcdC5nZXRfZXRodG9vbF9zdGF0c1x0PSBpeGdiZXZmX2dldF9ldGh0b29sX3N0YXRzLFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaXhnYmV2Zi9ldGh0b29sLmM6OTkyOlx0LmdldF9jb2FsZXNjZVx0XHQ9IGl4Z2JldmZfZ2V0X2NvYWxlc2NlLFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaXhnYmV2Zi9ldGh0b29sLmM6OTkzOlx0LnNldF9jb2FsZXNjZVx0XHQ9IGl4Z2JldmZfc2V0X2NvYWxlc2NlLFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaXhnYmV2Zi9ldGh0b29sLmM6OTk0Olx0LmdldF9yeF9yaW5nX2NvdW50XHQ9IGl4Z2JldmZfZ2V0X3J4X3JpbmdfY291bnQsXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9peGdiZXZmL2V0aHRvb2wuYzo5OTU6XHQuZ2V0X3J4ZmhfaW5kaXJfc2l6ZVx0PSBpeGdiZXZmX2dldF9yeGZoX2luZGlyX3NpemUsXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9peGdiZXZmL2V0aHRvb2wuYzo5OTY6XHQuZ2V0X3J4Zmhfa2V5X3NpemVcdD0gaXhnYmV2Zl9nZXRfcnhmaF9rZXlfc2l6ZSxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2l4Z2JldmYvZXRodG9vbC5jOjk5NzpcdC5nZXRfcnhmaFx0XHQ9IGl4Z2JldmZfZ2V0X3J4ZmgsXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9peGdiZXZmL2V0aHRvb2wuYzo5OTg6XHQuZ2V0X2xpbmtfa3NldHRpbmdzXHQ9IGl4Z2JldmZfZ2V0X2xpbmtfa3NldHRpbmdzLFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaXhnYmV2Zi9ldGh0b29sLmM6OTk5Olx0LmdldF9wcml2X2ZsYWdzXHRcdD0gaXhnYmV2Zl9nZXRfcHJpdl9mbGFncyxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2l4Z2JldmYvZXRodG9vbC5jOjEwMDA6XHQuc2V0X3ByaXZfZmxhZ3NcdFx0PSBpeGdiZXZmX3NldF9wcml2X2ZsYWdzLFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaXhnYmV2Zi9ldGh0b29sLmMtMTAwMS19O1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaXhnYmV2Zi9ldGh0b29sLmMtMTAwMi1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2l4Z2JldmYvZXRodG9vbC5jOjEwMDM6dm9pZCBpeGdiZXZmX3NldF9ldGh0b29sX29wcyhzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2KVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaXhnYmV2Zi9ldGh0b29sLmMtMTAwNC17XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9peGdiZXZmL2V0aHRvb2wuYzoxMDA1Olx0bmV0ZGV2LVx1MDAzZWV0aHRvb2xfb3BzID0gXHUwMDI2aXhnYmV2Zl9ldGh0b29sX29wcztcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2l4Z2JldmYvZXRodG9vbC5jLTEwMDYtfVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2l4Z2JldmYvaXBzZWMuYy0zLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaXhnYmV2Zi9pcHNlYy5jOjQ6I2luY2x1ZGUgXCYjMzQ7aXhnYmV2Zi5oXCYjMzQ7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9peGdiZXZmL2lwc2VjLmMtNS0jaW5jbHVkZSBcdTAwM2NuZXQveGZybS5oXHUwMDNlXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaXhnYmV2Zi9pcHNlYy5jPTk9c3RhdGljIGNvbnN0IGNoYXIgYWVzX2djbV9uYW1lW10gPSBcJiMzNDtyZmM0MTA2KGdjbShhZXMpKVwmIzM0Oztcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9peGdiZXZmL2lwc2VjLmMtMTEtLyoqXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9peGdiZXZmL2lwc2VjLmM6MTI6ICogaXhnYmV2Zl9pcHNlY19zZXRfcGZfc2EgLSBhc2sgdGhlIFBGIHRvIHNldCB1cCBhbiBTQVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaXhnYmV2Zi9pcHNlYy5jLTEzLSAqIEBhZGFwdGVyOiBib2FyZCBwcml2YXRlIHN0cnVjdHVyZVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2l4Z2JldmYvaXBzZWMuYy0xNy0gKiovXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9peGdiZXZmL2lwc2VjLmM6MTg6c3RhdGljIGludCBpeGdiZXZmX2lwc2VjX3NldF9wZl9zYShzdHJ1Y3QgaXhnYmV2Zl9hZGFwdGVyICphZGFwdGVyLFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaXhnYmV2Zi9pcHNlYy5jLTE5LVx0XHRcdFx0ICAgc3RydWN0IHhmcm1fc3RhdGUgKnhzKVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2l4Z2JldmYvaXBzZWMuYy00Mi1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2l4Z2JldmYvaXBzZWMuYzo0MzpcdHJldCA9IGl4Z2JldmZfd3JpdGVfbWJ4KGh3LCBtc2didWYsIElYR0JFX1ZGTUFJTEJPWF9TSVpFKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2l4Z2JldmYvaXBzZWMuYy00NC1cdGlmIChyZXQpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaXhnYmV2Zi9pcHNlYy5jLTQ2LVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaXhnYmV2Zi9pcHNlYy5jOjQ3Olx0cmV0ID0gaXhnYmV2Zl9wb2xsX21ieChodywgbXNnYnVmLCAyKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2l4Z2JldmYvaXBzZWMuYy00OC1cdGlmIChyZXQpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaXhnYmV2Zi9pcHNlYy5jLTYxLS8qKlxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaXhnYmV2Zi9pcHNlYy5jOjYyOiAqIGl4Z2JldmZfaXBzZWNfZGVsX3BmX3NhIC0gYXNrIHRoZSBQRiB0byBkZWxldGUgYW4gU0FcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2l4Z2JldmYvaXBzZWMuYy02My0gKiBAYWRhcHRlcjogYm9hcmQgcHJpdmF0ZSBzdHJ1Y3R1cmVcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9peGdiZXZmL2lwc2VjLmMtNjctICoqL1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaXhnYmV2Zi9pcHNlYy5jOjY4OnN0YXRpYyBpbnQgaXhnYmV2Zl9pcHNlY19kZWxfcGZfc2Eoc3RydWN0IGl4Z2JldmZfYWRhcHRlciAqYWRhcHRlciwgaW50IHBmc2EpXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9peGdiZXZmL2lwc2VjLmMtNjkte1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2l4Z2JldmYvaXBzZWMuYy03OS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2l4Z2JldmYvaXBzZWMuYzo4MDpcdGVyciA9IGl4Z2JldmZfd3JpdGVfbWJ4KGh3LCBtc2didWYsIDIpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaXhnYmV2Zi9pcHNlYy5jLTgxLVx0aWYgKGVycilcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9peGdiZXZmL2lwc2VjLmMtODMtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9peGdiZXZmL2lwc2VjLmM6ODQ6XHRlcnIgPSBpeGdiZXZmX3BvbGxfbWJ4KGh3LCBtc2didWYsIDIpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaXhnYmV2Zi9pcHNlYy5jLTg1LVx0aWYgKGVycilcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9peGdiZXZmL2lwc2VjLmMtOTMtLyoqXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9peGdiZXZmL2lwc2VjLmM6OTQ6ICogaXhnYmV2Zl9pcHNlY19yZXN0b3JlIC0gcmVzdG9yZSB0aGUgSVBzZWMgSFcgc2V0dGluZ3MgYWZ0ZXIgYSByZXNldFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaXhnYmV2Zi9pcHNlYy5jLTk1LSAqIEBhZGFwdGVyOiBib2FyZCBwcml2YXRlIHN0cnVjdHVyZVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2l4Z2JldmYvaXBzZWMuYy0xMDAtICoqL1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaXhnYmV2Zi9pcHNlYy5jOjEwMTp2b2lkIGl4Z2JldmZfaXBzZWNfcmVzdG9yZShzdHJ1Y3QgaXhnYmV2Zl9hZGFwdGVyICphZGFwdGVyKVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaXhnYmV2Zi9pcHNlYy5jLTEwMi17XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9peGdiZXZmL2lwc2VjLmM6MTAzOlx0c3RydWN0IGl4Z2JldmZfaXBzZWMgKmlwc2VjID0gYWRhcHRlci1cdTAwM2VpcHNlYztcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2l4Z2JldmYvaXBzZWMuYy0xMDQtXHRzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2ID0gYWRhcHRlci1cdTAwM2VuZXRkZXY7XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaXhnYmV2Zi9pcHNlYy5jLTExNi1cdFx0aWYgKHItXHUwMDNldXNlZCkge1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaXhnYmV2Zi9pcHNlYy5jOjExNzpcdFx0XHRyZXQgPSBpeGdiZXZmX2lwc2VjX3NldF9wZl9zYShhZGFwdGVyLCByLVx1MDAzZXhzKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2l4Z2JldmYvaXBzZWMuYy0xMTgtXHRcdFx0aWYgKHJldCBcdTAwM2MgMClcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9peGdiZXZmL2lwc2VjLmMtMTIzLVx0XHRpZiAodC1cdTAwM2V1c2VkKSB7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9peGdiZXZmL2lwc2VjLmM6MTI0Olx0XHRcdHJldCA9IGl4Z2JldmZfaXBzZWNfc2V0X3BmX3NhKGFkYXB0ZXIsIHQtXHUwMDNleHMpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaXhnYmV2Zi9pcHNlYy5jLTEyNS1cdFx0XHRpZiAocmV0IFx1MDAzYyAwKVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2l4Z2JldmYvaXBzZWMuYy0xMzItLyoqXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9peGdiZXZmL2lwc2VjLmM6MTMzOiAqIGl4Z2JldmZfaXBzZWNfZmluZF9lbXB0eV9pZHggLSBmaW5kIHRoZSBmaXJzdCB1bnVzZWQgc2VjdXJpdHkgcGFyYW1ldGVyIGluZGV4XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9peGdiZXZmL2lwc2VjLmMtMTM0LSAqIEBpcHNlYzogcG9pbnRlciB0byBJUHNlYyBzdHJ1Y3Rcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9peGdiZXZmL2lwc2VjLmM9MTM5PXN0YXRpY1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaXhnYmV2Zi9pcHNlYy5jOjE0MDppbnQgaXhnYmV2Zl9pcHNlY19maW5kX2VtcHR5X2lkeChzdHJ1Y3QgaXhnYmV2Zl9pcHNlYyAqaXBzZWMsIGJvb2wgcnh0YWJsZSlcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2l4Z2JldmYvaXBzZWMuYy0xNDEte1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2l4Z2JldmYvaXBzZWMuYy0xNjctLyoqXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9peGdiZXZmL2lwc2VjLmM6MTY4OiAqIGl4Z2JldmZfaXBzZWNfZmluZF9yeF9zdGF0ZSAtIGZpbmQgdGhlIHN0YXRlIHRoYXQgbWF0Y2hlc1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaXhnYmV2Zi9pcHNlYy5jLTE2OS0gKiBAaXBzZWM6IHBvaW50ZXIgdG8gSVBzZWMgc3RydWN0XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaXhnYmV2Zi9pcHNlYy5jPTE3Nz1zdGF0aWNcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2l4Z2JldmYvaXBzZWMuYzoxNzg6c3RydWN0IHhmcm1fc3RhdGUgKml4Z2JldmZfaXBzZWNfZmluZF9yeF9zdGF0ZShzdHJ1Y3QgaXhnYmV2Zl9pcHNlYyAqaXBzZWMsXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9peGdiZXZmL2lwc2VjLmMtMTc5LVx0XHRcdFx0XHQgICAgICAgX19iZTMyICpkYWRkciwgdTggcHJvdG8sXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaXhnYmV2Zi9pcHNlYy5jLTIwMi0vKipcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2l4Z2JldmYvaXBzZWMuYzoyMDM6ICogaXhnYmV2Zl9pcHNlY19wYXJzZV9wcm90b19rZXlzIC0gZmluZCB0aGUga2V5IGFuZCBzYWx0IGJhc2VkIG9uIHRoZSBwcm90b2NvbFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaXhnYmV2Zi9pcHNlYy5jLTIwNC0gKiBAZGV2OiBwb2ludGVyIHRvIG5ldCBkZXZpY2UgdG8gcHJvZ3JhbVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2l4Z2JldmYvaXBzZWMuYy0yMTEtICoqL1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaXhnYmV2Zi9pcHNlYy5jOjIxMjpzdGF0aWMgaW50IGl4Z2JldmZfaXBzZWNfcGFyc2VfcHJvdG9fa2V5cyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaXhnYmV2Zi9pcHNlYy5jLTIxMy1cdFx0XHRcdFx0ICBzdHJ1Y3QgeGZybV9zdGF0ZSAqeHMsXG5cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNCAxNDoxOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxOTk2NQoJCQkJCQkJb3V0cHV0OiA0NwoJCQkJCQkJdGhvdWdodHM6IDk2OQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipXb3J0aEZ1enppbmcgQXNzZXNzbWVudCBmb3IgaXhnYmV2ZiBQYXRjaCoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBUaGUgcGF0Y2ggdGFyZ2V0cyB0aGUgYGl4Z2JldmZgIGRyaXZlciwgSW50ZWwmIzM5O3MgMTBHYkUgUENJIEV4cHJlc3MgVmlydHVhbCBGdW5jdGlvbiBkcml2ZXIuIEl0JiMzOTtzIG1vZGlmeWluZyB0d28gZnVuY3Rpb25zLCBgaXhnYmV2Zl9nZXRfbGlua19rc2V0dGluZ3NgIGFuZCBgaXhnYmV2Zl9odl9jaGVja19tYWNfbGlua192ZmAsIHdoaWNoIGRlYWwgd2l0aCBsaW5rIHN0YXR1cywgc3BlY2lmaWNhbGx5IHJlYWRpbmcgZnJvbSBQQ0kgY29uZmlnIHNwYWNlLiBUaGUgY2F0Y2ggaXMgdGhhdCBpdCYjMzk7cyBmb2N1c2luZyBvbiBIeXBlci1WIEU2MTAgVkZzLgoKVGhlIGluc3RydWN0aW9ucyBzYXkgdG8gcmV0dXJuIGBXb3J0aEZ1enppbmc9ZmFsc2VgIGlmIHRoZSBwYXRjaCBmYWxscyBpbnRvIHRoZSBjYXRlZ29yeSBvZiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBkcml2ZXJzIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBoYXJkd2FyZSBub3QgZW11bGF0ZWQgaW4gUUVNVS4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRoYXQgYGl4Z2JldmZgICppcyogYSBWRiBkcml2ZXIsIGFuZCBWRnMgYXJlIHVzdWFsbHkgZXhwb3NlZCBieSBwaHlzaWNhbCBoYXJkd2FyZSB1c2luZyBTUi1JT1YuIFN5emthbGxlciBkb2VzbiYjMzk7dCBlbXVsYXRlIHRoZSBWRiBkaXJlY3RseTsgaXQgZW11bGF0ZXMgdGhlIFBGIChgaXhnYmVgKS4gU28gdGhlIHF1ZXN0aW9uIGlzOiBkb2VzIFFFTVUgZW11bGF0ZSBgaXhnYmV2ZmA/IEkgbmVlZCB0byBjaGVjay4gIFdoaWxlIFFFTVUgaGFzIGBpZ2J2Zi5jYCBhbmQgYGlnYi5jYCwgZm9yIGBpeGdiZWAsIHRoZXJlJiMzOTtzIG9ubHkgYGl4Z2JlLmNgIC0gbm8gYGl4Z2JldmYuY2AhIFNvLCBteSBpbml0aWFsIGd1ZXNzIGlzIHRoYXQgaXQgZG9lcyAqbm90KiBmdWxseSBlbXVsYXRlIHRoZSBWRiBmb3IgaXhnYmUuIEJ1dCBsZXQmIzM5O3MgdmVyaWZ5LiBJIHNob3VsZCBjb25maXJtIGlmIHN5emthbGxlciBldmVuICphdHRlbXB0cyogdG8gcmVhY2ggYGl4Z2JldmZgIGNvZGUgcGF0aHMuCgpIb3dldmVyLCB0aGUgcGF0Y2ggKnNwZWNpZmljYWxseSogbWVudGlvbnMgSHlwZXItViBFNjEwIFZGcy4gVGhpcyBpbXBsaWVzIGEgdmVyeSBuYXJyb3cgdXNlIGNhc2U6IGEgdmlydHVhbCBmdW5jdGlvbiBvZiBhbiBFNjEwIE5JQyBydW5uaW5nIHVuZGVyIEh5cGVyLVYuIENhbiBTeXprYWxsZXIgZnV6eiBIeXBlci1WLXNwZWNpZmljIGNvZGUgaW4gYGl4Z2JldmZgPyBTeXprYWxsZXIgcnVucyBvbiBHQ0UgKEtWTSkgb3IgUUVNVSAoS1ZNL1RDRykuIEl0IGRvZXNuJiMzOTt0IHJ1biBvbiBIeXBlci1WLCBzbyB0aGF0JiMzOTtzIGEgcHJvYmxlbS4gQWxzbywgdGhlIHBhdGNoIGhhcyBhIGNoZWNrIGZvciBgaHctJmd0O21hYy50eXBlID09IGl4Z2JlX21hY19lNjEwX3ZmYC4gRTYxMCBpcyBhIHNwZWNpZmljIGhhcmR3YXJlIE1BQyB0eXBlLiBRRU1VIGVtdWxhdGVzIDgyNTk5LCBub3QgdGhlIEU2MTAuIFNvIGBpeGdiZV9tYWNfZTYxMF92ZmAgaXMgbGlrZWx5IHVucmVhY2hhYmxlIGluIFFFTVUuIFN5emthbGxlciBjYW4gZnV6eiBQQ0kgZGV2aWNlcyBpZiB0aGV5JiMzOTtyZSBlbXVsYXRlZCwgYnV0IHRoZSBFNjEwIFZGIGlzbiYjMzk7dC4KCk5vdywgbGV0JiMzOTtzIHN0ZXAgYmFjayBhbmQgY29uc2lkZXIgdGhlIGZ1enppbmcgaW5zdHJ1Y3Rpb25zIGFnYWluLiBUaGV5IGV4cGxpY2l0bHkgcnVsZSBvdXQgY29kZSBwYXRocyB1bnJlYWNoYWJsZSBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwgZXZlbiB3aXRoIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlLiBUaGV5IGFsc28gZXhjbHVkZSB2ZW5kb3Itc3BlY2lmaWMgUENJZSBkcml2ZXJzIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLiBgaXhnYmV2ZmAgKmlzKiBhbiBFdGhlcm5ldCBkcml2ZXIgZm9yIEludGVsIDEwR2JFIFZGcy4gQW5kIGl0IHJlcXVpcmVzIHBoeXNpY2FsIGhhcmR3YXJlLCAqb3IqIGEgaHlwZXJ2aXNvciB0aGF0IGVtdWxhdGVzIGl0LiBTdGFuZGFyZCBRRU1VIGRvZXNuJiMzOTt0IGVtdWxhdGUgRTYxMCBWRnMuIFNvLCBRRU1VIG1pZ2h0IGVtdWxhdGUgYGl4Z2JldmZgLCBidXQsIGlzIHRoaXMgY29kZSBwYXRoIGZvciBgaXhnYmVfbWFjX2U2MTBfdmZgIGFuZCBIeXBlci1WPyBUaGUgZnVuY3Rpb24gYGl4Z2JldmZfaHZfY2hlY2tfbWFjX2xpbmtfdmZgIGlzIG9ubHkgY2FsbGVkIHdoZW4gdGhlIE1BQyBvcGVyYXRpb25zIGFyZSBzZXQgdXAgZm9yIEh5cGVyLVYuCgpJIG5lZWQgdG8gY29uZmlybSBpZiBRRU1VIGVtdWxhdGVzIGl0LCBidXQsIGl0JiMzOTtzIGlycmVsZXZhbnQsIGJlY2F1c2UgdGhlIGNvZGUgaXMgSHlwZXItViBzcGVjaWZpYy4gVGhlcmVmb3JlLCB0aGUgcGF0Y2ggdGFyZ2V0cyBhIHZlcnkgc3BlY2lmaWMsIGxpa2VseSB1bi1mdXp6YWJsZSwgc2l0dWF0aW9uLiBJIHNob3VsZCBjaGVjayBgZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaXhnYmV2Zi92Zi5jYCB0byBiZSBzdXJlIGhvdyBgaXhnYmV2Zl9odl9jaGVja19tYWNfbGlua192ZmAgaXMgYXNzaWduZWQuIEJ1dCBiYXNlZCBvbiB0aGUgcmVzdHJpY3Rpb25zLCB0aGlzIGlzIGFsbW9zdCBjZXJ0YWlubHkgYFdvcnRoRnV6emluZz1mYWxzZWAuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjQgMTQ6MTk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7aXhnYmV2Zl9odl9jaGVja19tYWNfbGlua192ZiYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2l4Z2JldmYmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaXhnYmV2Zi92Zi5jPTkxOD1zdGF0aWMgczMyIGl4Z2JldmZfaHZfcmVhZF9saW5rc19lNjEwKHN0cnVjdCBpeGdiZV9odyAqaHcsIHUzMiAqbGlua3NfcmVnKVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2l4Z2JldmYvdmYuYy05NDEtLyoqXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9peGdiZXZmL3ZmLmM6OTQyOiAqIGl4Z2JldmZfaHZfY2hlY2tfbWFjX2xpbmtfdmYgLSBjaGVjayBsaW5rXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9peGdiZXZmL3ZmLmMtOTQzLSAqIEBodzogcG9pbnRlciB0byBwcml2YXRlIGhhcmR3YXJlIHN0cnVjdFxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2l4Z2JldmYvdmYuYy05NTAtICovXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9peGdiZXZmL3ZmLmM6OTUxOnN0YXRpYyBzMzIgaXhnYmV2Zl9odl9jaGVja19tYWNfbGlua192ZihzdHJ1Y3QgaXhnYmVfaHcgKmh3LFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaXhnYmV2Zi92Zi5jLTk1Mi1cdFx0XHRcdFx0aXhnYmVfbGlua19zcGVlZCAqc3BlZWQsXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaXhnYmV2Zi92Zi5jPTExOTQ9c3RhdGljIGNvbnN0IHN0cnVjdCBpeGdiZV9tYWNfb3BlcmF0aW9ucyBpeGdiZXZmX2h2X21hY19vcHMgPSB7XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaXhnYmV2Zi92Zi5jLTEyMDAtXHQuc2V0dXBfbGlua1x0XHQ9IGl4Z2JldmZfc2V0dXBfbWFjX2xpbmtfdmYsXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9peGdiZXZmL3ZmLmM6MTIwMTpcdC5jaGVja19saW5rXHRcdD0gaXhnYmV2Zl9odl9jaGVja19tYWNfbGlua192ZixcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2l4Z2JldmYvdmYuYy0xMjAyLVx0Lm5lZ290aWF0ZV9hcGlfdmVyc2lvblx0PSBpeGdiZXZmX2h2X25lZ290aWF0ZV9hcGlfdmVyc2lvbl92ZixcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNCAxNDoxOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMjI5MgoJCQkJCQkJb3V0cHV0OiA0MwoJCQkJCQkJdGhvdWdodHM6IDUzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBteSBvd246CgoqKkRpZ2dpbmcgaW50byB0aGUgaXhnYmV2ZiBEcml2ZXImIzM5O3MgTUFDIE9wZXJhdGlvbnMqKgoKQWxyaWdodCwgbGV0JiMzOTtzIHNlZSwgYGl4Z2JldmZfaHZfY2hlY2tfbWFjX2xpbmtfdmZgIGlzIGRlZmluaXRlbHkgcGFydCBvZiB0aGF0IGBpeGdiZXZmX2h2X21hY19vcHNgIHN0cnVjdHVyZS4gTXkgbmV4dCBsb2dpY2FsIHN0ZXAgaXMgdG8gdW5kZXJzdGFuZCB0aGUgc2NvcGUgYW5kIHVzYWdlIG9mIHRoYXQgYGl4Z2JldmZfaHZfbWFjX29wc2Agc3RydWN0dXJlIGl0c2VsZi4gSSBuZWVkIHRvIHRyYWNlIHdoZXJlIGl0JiMzOTtzIGJlaW5nIGVtcGxveWVkIGluIHRoZSBkcml2ZXIuIEtub3dpbmcgaG93IGl0JiMzOTtzIHVzZWQgd2lsbCBnaXZlIG1lIHRoZSBjb250ZXh0dWFsIGJhY2tncm91bmQgdG8gdW5kZXJzdGFuZCB0aGUgcHVycG9zZSBhbmQgZnVuY3Rpb24gb2YgdGhlIGBjaGVja19tYWNfbGlua192ZmAgZnVuY3Rpb24uIFRpbWUgdG8gZGl2ZSBkZWVwZXIgYW5kIHNlZSB3aGF0IEkgY2FuIGZpbmQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjQgMTQ6MjA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7aXhnYmV2Zl9odl9tYWNfb3BzJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaXhnYmV2ZiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9peGdiZXZmL3ZmLmM9MTE3NT1zdGF0aWMgY29uc3Qgc3RydWN0IGl4Z2JlX21hY19vcGVyYXRpb25zIGl4Z2JldmZfbWFjX29wcyA9IHtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9peGdiZXZmL3ZmLmMtMTE5My1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2l4Z2JldmYvdmYuYzoxMTk0OnN0YXRpYyBjb25zdCBzdHJ1Y3QgaXhnYmVfbWFjX29wZXJhdGlvbnMgaXhnYmV2Zl9odl9tYWNfb3BzID0ge1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaXhnYmV2Zi92Zi5jLTExOTUtXHQuaW5pdF9od1x0XHQ9IGl4Z2JldmZfaW5pdF9od192Zixcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9peGdiZXZmL3ZmLmM9MTIxOD1jb25zdCBzdHJ1Y3QgaXhnYmV2Zl9pbmZvIGl4Z2JldmZfODI1OTlfdmZfaHZfaW5mbyA9IHtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2l4Z2JldmYvdmYuYy0xMjE5LVx0Lm1hYyA9IGl4Z2JlX21hY184MjU5OV92ZixcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2l4Z2JldmYvdmYuYzoxMjIwOlx0Lm1hY19vcHMgPSBcdTAwMjZpeGdiZXZmX2h2X21hY19vcHMsXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9peGdiZXZmL3ZmLmMtMTIyMS19O1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2l4Z2JldmYvdmYuYz0xMjI4PWNvbnN0IHN0cnVjdCBpeGdiZXZmX2luZm8gaXhnYmV2Zl9YNTQwX3ZmX2h2X2luZm8gPSB7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9peGdiZXZmL3ZmLmMtMTIyOS1cdC5tYWMgPSBpeGdiZV9tYWNfWDU0MF92ZixcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2l4Z2JldmYvdmYuYzoxMjMwOlx0Lm1hY19vcHMgPSBcdTAwMjZpeGdiZXZmX2h2X21hY19vcHMsXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9peGdiZXZmL3ZmLmMtMTIzMS19O1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2l4Z2JldmYvdmYuYz0xMjM4PWNvbnN0IHN0cnVjdCBpeGdiZXZmX2luZm8gaXhnYmV2Zl9YNTUwX3ZmX2h2X2luZm8gPSB7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9peGdiZXZmL3ZmLmMtMTIzOS1cdC5tYWMgPSBpeGdiZV9tYWNfWDU1MF92ZixcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2l4Z2JldmYvdmYuYzoxMjQwOlx0Lm1hY19vcHMgPSBcdTAwMjZpeGdiZXZmX2h2X21hY19vcHMsXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9peGdiZXZmL3ZmLmMtMTI0MS19O1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2l4Z2JldmYvdmYuYz0xMjQ4PWNvbnN0IHN0cnVjdCBpeGdiZXZmX2luZm8gaXhnYmV2Zl9YNTUwRU1feF92Zl9odl9pbmZvID0ge1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaXhnYmV2Zi92Zi5jLTEyNDktXHQubWFjID0gaXhnYmVfbWFjX1g1NTBFTV94X3ZmLFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaXhnYmV2Zi92Zi5jOjEyNTA6XHQubWFjX29wcyA9IFx1MDAyNml4Z2JldmZfaHZfbWFjX29wcyxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2l4Z2JldmYvdmYuYy0xMjUxLX07XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaXhnYmV2Zi92Zi5jPTEyNjM9Y29uc3Qgc3RydWN0IGl4Z2JldmZfaW5mbyBpeGdiZXZmX2U2MTBfdmZfaHZfaW5mbyA9IHtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2l4Z2JldmYvdmYuYy0xMjY0LVx0Lm1hYyAgICAgICAgICAgID0gaXhnYmVfbWFjX2U2MTBfdmYsXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9peGdiZXZmL3ZmLmM6MTI2NTpcdC5tYWNfb3BzICAgICAgICA9IFx1MDAyNml4Z2JldmZfaHZfbWFjX29wcyxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2l4Z2JldmYvdmYuYy0xMjY2LX07XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjQgMTQ6MjA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjM1MjMKCQkJCQkJCW91dHB1dDogNDgKCQkJCQkJCXRob3VnaHRzOiAxNgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBzdW1tYXJ5LCB0YWtpbmcgb24gdGhlIHBlcnNvbmEgeW91JiMzOTt2ZSBkZXNjcmliZWQ6CgoqKkFuYWx5emluZyB0aGUgQ29udGV4dCBvZiBgaXhnYmV2Zl9tYWluLmNgIFVzYWdlKioKCkFscmlnaHQsIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIE15IGluaXRpYWwgdGhvdWdodCBpcywgYmFzZWQgb24gdGhlIGZpbGUgbmFtZSwgdGhhdCB0aGVzZSBhcmUgcHJvYmFibHkgY2VudHJhbCBjb21wb25lbnRzIHVzZWQgd2l0aGluIHRoZSBgaXhnYmV2Zl9tYWluLmNgIGZpbGUuIEtub3dpbmcgdGhhdCBmaWxlIGFuZCBpdHMgY29udGV4dCBpcyBjcnVjaWFsIGZvciB1bmRlcnN0YW5kaW5nICpob3cqIHRoZXNlIGVsZW1lbnRzIGFyZSBiZWluZyB1c2VkLiBBcmUgd2UgdGFsa2luZyBhYm91dCBkYXRhIHN0cnVjdHVyZXMsIGZ1bmN0aW9uIGNhbGxzLCBvciBtYXliZSBzb21lIGtleSB2YXJpYWJsZXMgb3IgbWFjcm9zIHRoYXQgZGVmaW5lIGNvcmUgZnVuY3Rpb25hbGl0aWVzIG9mIHRoZSBJbnRlbCBYNzEwIFZpcnR1YWwgRnVuY3Rpb24gZHJpdmVyPyBNeSBtaW5kIGltbWVkaWF0ZWx5IHN0YXJ0cyB0byBydW4gdGhyb3VnaCB0aGUgY29tbW9uIGFyZWFzIHdpdGhpbiBkcml2ZXIgY29kZTogaW5pdGlhbGl6YXRpb24sIHBhY2tldCBwcm9jZXNzaW5nLCBpbnRlcnJ1cHQgaGFuZGxpbmcsIG9yIHJlc291cmNlIG1hbmFnZW1lbnQuIEdpdmVuIHRoZSB0ZXJtLCBJJiMzOTtkIGV4cGVjdCB0aGlzIGNvZGUgdG8gcmVsYXRlIHRvIHRoZSBWaXJ0dWFsIEZ1bmN0aW9uIHNpZGUgb2YgdGhpbmdzLiBJdCBhbGwgZGVwZW5kcyBvbiBob3cgYGl4Z2JldmZfbWFpbi5jYCBpbnRlZ3JhdGVzIHdpdGggdGhlIG92ZXJhbGwgaXhnYmUgZHJpdmVyIGFyY2hpdGVjdHVyZSBhbmQgdGhlIFZGJiMzOTtzIGNvbW11bmljYXRpb24gZmxvdy4gTXkgbmV4dCBzdGVwIHdvdWxkIGJlIHRvIHJldmlldyB0aGUgYXNzb2NpYXRlZCBjb2RlIHN1cnJvdW5kaW5nIHRoZXNlIGVsZW1lbnRzIHdpdGhpbiB0aGF0IHNwZWNpZmljIGZpbGUgdG8gY29uZmlybSBteSBleHBlY3RhdGlvbnMuIEkgbmVlZCB0byBzZWUgdGhlIGltcGxlbWVudGF0aW9uIGRldGFpbHMgdG8gZ2V0IHRoZSB3aG9sZSBwaWN0dXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNCAxNDoyMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtpeGdiZXZmX2U2MTBfdmZfaHZfaW5mbyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2l4Z2JldmYmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaXhnYmV2Zi9peGdiZXZmLmg9NDMyPWV4dGVybiBjb25zdCBzdHJ1Y3QgaXhnYmV2Zl9pbmZvIGl4Z2JldmZfWDU1MEVNX3hfdmZfaHZfaW5mbztcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2l4Z2JldmYvaXhnYmV2Zi5oOjQzMzpleHRlcm4gY29uc3Qgc3RydWN0IGl4Z2JldmZfaW5mbyBpeGdiZXZmX2U2MTBfdmZfaHZfaW5mbztcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2l4Z2JldmYvaXhnYmV2Zi5oLTQzNC1cbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9peGdiZXZmL2l4Z2JldmZfbWFpbi5jPTQ0PXN0YXRpYyBjb25zdCBzdHJ1Y3QgaXhnYmV2Zl9pbmZvICppeGdiZXZmX2luZm9fdGJsW10gPSB7XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaXhnYmV2Zi9peGdiZXZmX21haW4uYy01NC1cdFtib2FyZF9lNjEwX3ZmXSAgICAgICAgID0gXHUwMDI2aXhnYmV2Zl9lNjEwX3ZmX2luZm8sXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9peGdiZXZmL2l4Z2JldmZfbWFpbi5jOjU1Olx0W2JvYXJkX2U2MTBfdmZfaHZdICAgICAgPSBcdTAwMjZpeGdiZXZmX2U2MTBfdmZfaHZfaW5mbyxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2l4Z2JldmYvaXhnYmV2Zl9tYWluLmMtNTYtfTtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9peGdiZXZmL3ZmLmM9MTI1OD1jb25zdCBzdHJ1Y3QgaXhnYmV2Zl9pbmZvIGl4Z2JldmZfZTYxMF92Zl9pbmZvID0ge1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2l4Z2JldmYvdmYuYy0xMjYyLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaXhnYmV2Zi92Zi5jOjEyNjM6Y29uc3Qgc3RydWN0IGl4Z2JldmZfaW5mbyBpeGdiZXZmX2U2MTBfdmZfaHZfaW5mbyA9IHtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2l4Z2JldmYvdmYuYy0xMjY0LVx0Lm1hYyAgICAgICAgICAgID0gaXhnYmVfbWFjX2U2MTBfdmYsXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI0IDE0OjIwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI0MzMyCgkJCQkJCQlvdXRwdXQ6IDQzCgkJCQkJCQl0aG91Z2h0czogNDkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIHByZXNlbnRlZCBpbiB0aGUgZmlyc3QgcGVyc29uOgoKKipJbnZlc3RpZ2F0aW5nIHRoZSBQQ0kgRGV2aWNlIElEIEFzc29jaWF0aW9uKioKCkFscmlnaHQsIHNvIGBib2FyZF9lNjEwX3ZmX2h2YCBpcyBsaXN0ZWQgaW4gdGhlIFBDSSBkZXZpY2UgSUQgdGFibGUuIFRoYXQmIzM5O3MgYSBnb29kIHN0YXJ0aW5nIHBvaW50LiBNeSBuZXh0IG1vdmUgaXMgY2xlYXI6IEkgbmVlZCB0byBkaWcgaW50byBgaXhnYmV2Zl9wY2lfdGJsYCB0byB1bmRlcnN0YW5kIGhvdyB0aGlzIElEIGlzIG1hcHBlZCB3aXRoaW4gdGhlIGNvbnRleHQgb2YgdGhlIGRyaXZlci4gTGV0JiMzOTtzIGhlYWQgb3ZlciB0byBgaXhnYmV2Zl9tYWluLmNgIGFuZCB0YWtlIGEgbG9vay4gSSYjMzk7bSBhc3N1bWluZyB0aGF0IHRoZSBkZXZpY2UgSUQgdGFibGUgd2l0aGluIGBpeGdiZXZmX3BjaV90YmxgIHdpbGwgY29udGFpbiBhbGwgdGhlIG5lY2Vzc2FyeSBpbmZvcm1hdGlvbiBhYm91dCB0aGF0IFBDSSBkZXZpY2UsIHNvIEkgY2FuIGFzc29jaWF0ZSB0aGUgc3BlY2lmaWMgYGJvYXJkX2U2MTBfdmZfaHZgIGFuZCBpbnZlc3RpZ2F0ZSBpdHMgc3BlY2lmaWMgcmVxdWlyZW1lbnRzLiBJIGV4cGVjdCB0byBiZSBsb29raW5nIGZvciBhc3NvY2lhdGVkIHN0cnVjdHVyZXMsIG9yIHNwZWNpZmljIGZ1bmN0aW9uIGNhbGxzIHRoYXQgdHJpZ2dlciBiYXNlZCBvbiB0aGlzIGRldmljZSBJRC4gSG9wZWZ1bGx5LCBJIGNhbiBmaW5kIHdoYXQgY29uZmlndXJhdGlvbnMgYXJlIGluIGVmZmVjdCBmb3IgdGhpcyBwYXJ0aWN1bGFyIGRldmljZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjQgMTQ6MjA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Ym9hcmRfZTYxMF92Zl9odiYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2l4Z2JldmYmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaXhnYmV2Zi9peGdiZXZmLmg9Mzk5PWVudW0gaXhnYmV2Zl9ib2FyZHMge1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2l4Z2JldmYvaXhnYmV2Zi5oLTQwOS1cdGJvYXJkX2U2MTBfdmYsXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9peGdiZXZmL2l4Z2JldmYuaDo0MTA6XHRib2FyZF9lNjEwX3ZmX2h2LFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaXhnYmV2Zi9peGdiZXZmLmgtNDExLX07XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaXhnYmV2Zi9peGdiZXZmX21haW4uYz00ND1zdGF0aWMgY29uc3Qgc3RydWN0IGl4Z2JldmZfaW5mbyAqaXhnYmV2Zl9pbmZvX3RibFtdID0ge1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2l4Z2JldmYvaXhnYmV2Zl9tYWluLmMtNTQtXHRbYm9hcmRfZTYxMF92Zl0gICAgICAgICA9IFx1MDAyNml4Z2JldmZfZTYxMF92Zl9pbmZvLFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaXhnYmV2Zi9peGdiZXZmX21haW4uYzo1NTpcdFtib2FyZF9lNjEwX3ZmX2h2XSAgICAgID0gXHUwMDI2aXhnYmV2Zl9lNjEwX3ZmX2h2X2luZm8sXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9peGdiZXZmL2l4Z2JldmZfbWFpbi5jLTU2LX07XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaXhnYmV2Zi9peGdiZXZmX21haW4uYz02Nj1zdGF0aWMgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgaXhnYmV2Zl9wY2lfdGJsW10gPSB7XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaXhnYmV2Zi9peGdiZXZmX21haW4uYy05Ni1cdFx0XHRcdFBDSV9BTllfSUQsIElYR0JFX1NVQkRFVl9JRF9FNjEwX1ZGX0hWKSxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2l4Z2JldmYvaXhnYmV2Zl9tYWluLmM6OTc6XHRcdC5kcml2ZXJfZGF0YSA9IGJvYXJkX2U2MTBfdmZfaHYsXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9peGdiZXZmL2l4Z2JldmZfbWFpbi5jLTk4LVx0fSwge1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNCAxNDoyMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNTE2MQoJCQkJCQkJb3V0cHV0OiAyNgoJCQkJCQkJdGhvdWdodHM6IDcwNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBc3Nlc3NtZW50IG9mIHRoZSBGdXp6YWJpbGl0eSBvZiB0aGlzIGl4Z2JldmYgUGF0Y2gqKgoKT2theSwgbGV0IG1lIGJyZWFrIHRoaXMgZG93bi4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRoYXQgdGhlIGRyaXZlciBiaW5kcyB0byBhIHNwZWNpZmljIFBDSSBkZXZpY2UgSUQuIFRoYXQmIzM5O3MgdGhlIGtleS4gRmlyc3QsIGlzIHRoaXMgZGV2aWNlIGVtdWxhdGVkIGluIFFFTVU/IE5vLiBPa2F5LCB0aGF0IHJ1bGVzIG91dCBzdGFuZGFyZCBRRU1VLWJhc2VkIGZ1enppbmcuIE5vdywgY2FuIHN5emthbGxlciBmdXp6IHRoaXM/IEkgbmVlZCB0byB0aGluayB0aGlzIHRocm91Z2guCgpXYWl0LCBkb2VzbiYjMzk7dCBzeXprYWxsZXIgaGF2ZSB0aGF0IG1lY2hhbmlzbSB1c2luZyBgc3l6X3BjaV9zZXR1cGAgYW5kIGBzeXpfcGNpX2RldmljZWA/IFJpZ2h0ISBTeXprYWxsZXIgdXNlcyBgc3l6X3BjaV9kZXZpY2VgIHRvLCBlc3NlbnRpYWxseSwgaW5qZWN0IGFyYml0cmFyeSBQQ0kgZGV2aWNlcyBpbnRvIHRoZSBrZXJuZWwgdGhyb3VnaCB2aXJ0dWFsIGhhcmR3YXJlIGludGVyZmFjZXMuIFRoaXMgc291bmRzIHByb21pc2luZy4gU28sIHN5emthbGxlciAqZG9lcyogaGF2ZSBhIFBDSSBmdXp6ZXIgdGhhdCBjYW4gZW11bGF0ZSBhIFBDSSBkZXZpY2Ugd2l0aCBhIHNwZWNpZmljIHZlbmRvciBhbmQgZGV2aWNlIElELiBJdCBjYW4gcmVzcG9uZCB0byBjb25maWcgYW5kIG1lbW9yeSBzcGFjZSBhY2Nlc3Nlcywgd2hpY2ggaXMgd2hhdCBJIG5lZWQuCgpBbHJpZ2h0LCB0aGUgbmV4dCBzdGVwIGlzIHRvIHNlZSBpZiBzeXprYWxsZXImIzM5O3MgUENJIGZ1enplciAqY2FuKiByZWFjaCB0aGUgY29kZSBtb2RpZmllZCBieSB0aGlzIHBhdGNoLiBUaGUgcGF0Y2ggbW9kaWZpZXMgYGl4Z2JldmZfZ2V0X2xpbmtfa3NldHRpbmdzYCBhbmQgYGl4Z2JldmZfaHZfY2hlY2tfbWFjX2xpbmtfdmZgLiBgaXhnYmV2Zl9nZXRfbGlua19rc2V0dGluZ3NgIGlzIHJlYWNoZWQgdGhyb3VnaCBldGh0b29sLCBhbmQgYGl4Z2JldmZfaHZfY2hlY2tfbWFjX2xpbmtfdmZgIHZpYSBgaHctJmd0O21hYy5vcHMuY2hlY2tfbGlua2AuIE5vdywgaWYgc3l6a2FsbGVyIGVtdWxhdGVzIHRoZSBQQ0kgZGV2aWNlLCB0aGUgYGl4Z2JldmZgIGRyaXZlciAqc2hvdWxkKiBwcm9iZSBpdCwgcmlnaHQ/CgpCdXQgYSBjcnVjaWFsIHF1ZXN0aW9uIGNvbWVzIHVwOiBkb2VzIGBpeGdiZXZmYCByZXF1aXJlIE1TSS1YPyBBaCwgdGhlIEtjb25maWcgc2F5cyBpdCAqZG9lcyouIFRoYXQgY291bGQgYmUgYSBzdHVtYmxpbmcgYmxvY2suIFN5emthbGxlciYjMzk7cyBQQ0kgZnV6emVyIG1pZ2h0IG5vdCBmdWxseSBzdXBwb3J0IE1TSS1YIG9yIGNvbXBsZXggRE1BLiBIb3dldmVyLCBvZnRlbiBpdCBjYW4gZ2V0IHBhc3QgdGhlIHByb2JlIGZ1bmN0aW9uIGFuZCByZWdpc3RlciB0aGUgbmV0ZGV2LiBJdOKAmXMgd29ydGggZXhwbG9yaW5nLgoKTm93LCBJIGhhdmUgdG8gY29uc2lkZXIgdGhlIHNwZWNpZmljIHByb21wdCBpbnN0cnVjdGlvbnMuIEl0IHNheXMgdG8gcmV0dXJuIGBXb3J0aEZ1enppbmc9ZmFsc2VgIGlmIHRoZSBwYXRjaCBpbnZvbHZlcyBjb2RlIGluICYjMzQ7dmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMuLi4gdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUmIzM0Oy4KCklzIGBpeGdiZXZmYCBvbmUgb2YgdGhvc2U/IE5vLCBub3QgcmVhbGx5LiBJdCYjMzk7cyBhIHN0YW5kYXJkIEV0aGVybmV0IE5JQyBWaXJ0dWFsIEZ1bmN0aW9uIChWRikgZHJpdmVyLCBub3Qgc29tZXRoaW5nIHNwZWNpYWxpemVkIGxpa2UgYSBTbWFydE5JQyBvciBHUFUuIEJ1dCwgZG9lcyBpdCByZXF1aXJlIHBoeXNpY2FsIGhhcmR3YXJlIG5vdCBlbXVsYXRlZCBpbiBRRU1VPyBZZXMsIHRoYXQmIzM5O3MgdGhlIHJ1YiEgYGl4Z2JldmZgIGlzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgoKQnV0IHdhaXQsIGlmIGBpeGdiZXZmYCBpc24mIzM5O3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVSwgYW5kIHN5emthbGxlciYjMzk7cyBQQ0kgZnV6emVyIGlzIHRoZSBvbmx5IHdheSB0byByZWFjaCBpdCwgZG9lc24mIzM5O3QgdGhhdCBmYWxsIHVuZGVyICYjMzQ7aW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSYjMzQ7PyBCdXQsIG15IFBDSSBmdXp6ZXIgKmlzKiBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSEgQnV0LCBpdCYjMzk7cyBhIGdlbmVyaWMgZnV6emVyLCBub3QgYSBmdWxsIGRldmljZSBlbXVsYXRvci4gSXTigJlzIGp1c3QgZmVlZGluZyByYW5kb20gYnl0ZXMgdG8gTU1JTy9QSU8vQ29uZmlnIHNwYWNlIHJlYWRzLiBJdCBpcyBOT1QgY29tcGxleCBsaWtlLCBzYXksIGFuIG1seHN3IG9yIGFuIEFNRCBHUFUgZHJpdmVyIQoKVGhlIHByb21wdCBzcGVjaWZpY2FsbHkgbGlzdHMgdGhvc2UgY29tcGxleCBkZXZpY2VzOiAmIzM0O21seHN3LCBwZHNfY29yZSwgcWVkLCBpb25pYywgYW1kZ3B1JiMzNDsuIGBpeGdiZXZmYCBpcyBhbiBJbnRlbCBFdGhlcm5ldCBWRi4gSXTigJlzIG5vdCBpbiB0aGF0IGNsYXNzLgoKRmluYWxseSwgSSBuZWVkIHRvIGNoZWNrIHN5emthbGxlciB0byBzZWUgaWYgdGhlcmUgYXJlIGFueSBleGlzdGluZyBkZXNjcmlwdGlvbnMuIExldCBtZSBzZWUuLi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjQgMTQ6MjA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkVycm9yOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bm8gbWF0Y2hlczwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtpeGdiZXZmJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7c3lzLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtlcnJvciYjMzQ7OiAmIzM0O25vIG1hdGNoZXMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI0IDE0OjIwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI2Njc1CgkJCQkJCQlvdXRwdXQ6IDM5CgkJCQkJCQl0aG91Z2h0czogMTYyOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXNpcyBvZiB0aGUgUGF0Y2g6IFdvcnRoRnV6emluZz1mYWxzZSoqCgpPa2F5LCBzbyB0aGUgaW5pdGlhbCB0aG91Z2h0IHdhcyB0byB1c2UgYGRlZmF1bHRfYXBpOmdyZXBwZXJgIHRvIHNlYXJjaCBmb3IgcmVsYXRlZCBjb2RlLCBidXQgSSBxdWlja2x5IHJlYWxpemVkIEkgY2FuJiMzOTt0IHNlYXJjaCBgc3lzL2Agb3IgZXhwcmVzc2lvbnMgY29udGFpbmluZyBgc3l6X2AgYmVjYXVzZSBvZiB0aG9zZSByZXN0cmljdGlvbnMgaW4gdGhlIHByb21wdC4gSSBhbHNvIGRvbiYjMzk7dCBoYXZlIHRoZSBgcmVhZC1zeXotc3BlY2Agb3IgYHN5ei1ncmVwcGVyYCB0b29scywgc28gSSYjMzk7bSBsaW1pdGVkIHRvIGBncmVwcGVyYCwgYGNvZGVzZWFyY2gtZGlyLWluZGV4YCwgYHJlYWQtZmlsZWAsIGFuZCBgc2V0LXJlc3VsdHNgLiBObyBkaWNlIG9uIHRoZSBzeXprYWxsZXIgc2lkZS4KCk5vdywgbGV0JiMzOTtzIGdldCBiYWNrIHRvIHRoZSBjb3JlIHF1ZXN0aW9uOiBJcyB0aGlzIHdvcnRoIGZ1enppbmc/IEkgbmVlZCB0byBmaWd1cmUgb3V0IGlmIHRoaXMgY29kZSBwYXRoIGlzIHJlYWNoYWJsZSBpbiBhIHZpcnR1YWxpemVkIGVudmlyb25tZW50IGxpa2UgUUVNVSBvciBHQ0UuIFRoZSBwcm9tcHQgaXMgcHJldHR5IGNsZWFyOiBpdCYjMzk7cyBub3Qgd29ydGggZnV6emluZyBpZiB0aGUgY29kZSBwYXRoIGlzIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdGhvc2UgZW52aXJvbm1lbnRzLgoKVGhlIHBhdGNoIG1lbnRpb25zIGBpeGdiZXZmYCwgd2hpY2ggaW5pdGlhbGx5IG1hZGUgbWUgdGhpbmsgYWJvdXQgdmVuZG9yLXNwZWNpZmljIGhhcmR3YXJlLiBCdXQgaXQmIzM5O3Mgbm90ICp0ZWNobmljYWxseSogYSB2ZW5kb3Itc3BlY2lmaWMgTklDLCBpdCYjMzk7cyBhIHN0YW5kYXJkIE5JQyB0aGF0IGhhcyBhIFZGLiBCdXQsIGRvZXMgaXQgcmVxdWlyZSBwaHlzaWNhbCBoYXJkd2FyZT8gVHVybnMgb3V0LCBRRU1VIGVtdWxhdGVzIGBpeGdiZWAgKFBGKSwgYGUxMDAwYCwgYGUxMDAwZWAsIGBpZ2JgLCBgaWdidmZgLCBidXQgKm5vdCogYGl4Z2JldmZgLiBTbywgaXQgZmFsbHMgdW5kZXIgdGhlIGNhdGVnb3J5IG9mIGhhcmR3YXJlICpub3QqIGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuCgpUaGVuIEkgaGFkIHRvIGNvbnNpZGVyIGlmIHN5emthbGxlciBjb3VsZCBmb3JjZSBpdC4gQ291bGQgdGhlIFBDSSBmdXp6ZXIgc29tZWhvdyBmYWtlIHRoZSBkZXZpY2UgYW5kIHBhc3MgdGhlIHByb2JlIGZ1bmN0aW9uPyBFdmVuIGlmIGl0IGNvdWxkLCB0aGUgcHJvbXB0IGV4cGxpY2l0bHkgc2F5cyB0aGF0IGl0IGlzIG5vdCB3b3J0aCBmdXp6aW5nIGlmIGl0IHJlcXVpcmVzIHBoeXNpY2FsIGhhcmR3YXJlIHRoYXQgaXMgbm90IGVtdWxhdGVkIGluIFFFTVUuCgpUaGUgcGF0Y2ggc3BlY2lmaWNhbGx5IHRhcmdldHMgSHlwZXItViBFNjEwIFZGcy4gSXQmIzM5O3MgcmVhZGluZyBsaW5rIHN0YXR1cyBmcm9tIGFuIGVtdWxhdGVkIFBDSSBjb25maWcgc3BhY2UuIFRoaXMgaXMgdmVyeSBIeXBlci1WIHNwZWNpZmljLgoKVGhlIHByb2JlIHdpbGwgbm90IGV2ZW4gc3VjY2VlZCBpbiBRRU1VIGJlY2F1c2UgdGhlIGRldmljZSBpcyBub3QgcHJlc2VudCwgYW5kIHRoZSBkcml2ZXIgaXMgbm90IGxvYWRlZC4gSWYgdGhlIGRyaXZlciBpcyBub3QgbG9hZGVkLCB0aGVyZSB3aWxsIGJlIG5vIGBuZXRfZGV2aWNlYCwgYW5kIHRoZSBmdW5jdGlvbiBgaXhnYmV2Zl9nZXRfbGlua19rc2V0dGluZ3NgIGNhbm5vdCBldmVuIGJlIHJlYWNoZWQuCgpTbywgdGhpcyBFNjEwIFZGIGJlaGF2aW9yIGlzIG5vdCBzb2Z0d2FyZS1lbXVsYXRlZCBpbiBRRU1VLCB1bmxpa2UgdGhpbmdzIGxpa2UgYSBVU0IgZ2FkZ2V0IG9yIGBtYWM4MDIxMV9od3NpbWAuIEl0JiMzOTtzIGEgSHlwZXItViBzcGVjaWZpYyBkZXZpY2UgdGhhdCYjMzk7cyBub3QgcHJlc2VudCBpbiBRRU1VLCBtYWtpbmcgaXQgdW5yZWFjaGFibGUuCgpMZXQgbWUgY29uZmlybSB0aGF0IHdpdGggYSBxdWljayBjaGVjayBvbiB0aGUgUUVNVSBzb3VyY2UuIFdoaWxlIGBpZ2J2ZmAgKmlzKiB0aGVyZSwgdGhlcmUmIzM5O3Mgbm8gbmF0aXZlIGBpeGdiZXZmYCBzdXBwb3J0LiBXYWl0LCBRRU1VJiMzOTtzIGBpZ2JgIHN1cHBvcnRzIFNSLUlPVi4gUUVNVSYjMzk7cyBgaXhnYmVgIGltcGxlbWVudGF0aW9uICptaWdodCogbm90LiBUaGUga2V5IGhlcmUgaXMgdGhlIHBhdGNoIGlzIHRhbGtpbmcgYWJvdXQgYGl4Z2JlX21hY19lNjEwX3ZmYCB3aGljaCBoYXMgYSBzcGVjaWZpYyBQQ0kgZGV2aWNlIElEIGBJWEdCRV9ERVZfSURfRTYxMF9WRl9IVmAgdGhhdCBvbmx5IGV4aXN0cyBvbiBIeXBlci1WLgoKTGV0JiMzOTtzIGxvb2sgYXQgdGhlIGNyaXRpY2FsIGNvZGUgc25pcHBldCBpbiB0aGUgcGF0Y2ggYWdhaW4uCmBgYGMKJiM0MzsJaWYgKGh3LSZndDttYWMudHlwZSA9PSBpeGdiZV9tYWNfZTYxMF92ZikgewomIzQzOwkJc3Bpbl9sb2NrX2JoKCZhbXA7YWRhcHRlci0mZ3Q7bWJ4X2xvY2spOwomIzQzOwkJaHctJmd0O21hYy5nZXRfbGlua19zdGF0dXMgPSB0cnVlOwomIzQzOwkJaHctJmd0O21hYy5vcHMuY2hlY2tfbGluayhodywgJmFtcDthZGFwdGVyLSZndDtsaW5rX3NwZWVkLAomIzQzOwkJCQkgICAgICAgJmFtcDthZGFwdGVyLSZndDtsaW5rX3VwLCBmYWxzZSk7CiYjNDM7CQlzcGluX3VubG9ja19iaCgmYW1wO2FkYXB0ZXItJmd0O21ieF9sb2NrKTsKJiM0MzsJfQpgYGAKQW5kIGhvdyB0aGUgYGl4Z2JldmZfaHZfcmVhZF9saW5rc19lNjEwYCBhY2Nlc3NlcyB0aGUgZW11bGF0ZWQgUENJIGNvbmZpZyBzcGFjZS4KYGBgYwomIzQzOwlpZiAoIUlTX0VOQUJMRUQoQ09ORklHX1BDSV9NTUNPTkZJRykpIHsKJiM0MzsJCWRldl9lcnJfb25jZSgmYW1wO2FkYXB0ZXItJmd0O3BkZXYtJmd0O2RldiwKJiM0MzsJCQkgICAgICYjMzQ7Y2Fubm90IHJlYWQgbGluayBzdGF0dXMsIFBDSV9NTUNPTkZJRyBpcyByZXF1aXJlZCBmb3IgSHlwZXItVlxuJiMzNDspOwomIzQzOwkJcmV0dXJuIC1FT1BOT1RTVVBQOwomIzQzOwl9CiYjNDM7CiYjNDM7CWZvciAoaW50IGkgPSAwOyBpICZsdDsgSVhHQkVfSFZfTElOS19TVEFUVVNfU0laRTsgaSYjNDM7JiM0MzspIHsKJiM0MzsJCWludCByZXQgPSBwY2lfcmVhZF9jb25maWdfYnl0ZShhZGFwdGVyLSZndDtwZGV2LAomIzQzOwkJCQkJICAgICAgIElYR0JFX0hWX0xJTktfU1RBVFVTX09GRlNFVCAmIzQzOyBpLAomIzQzOwkJCQkJICAgICAgICZhbXA7ZGF0YVtpXSk7CmBgYApJdCYjMzk7cyByZWFkaW5nIGZyb20gUENJIGNvbmZpZyBzcGFjZSBvZmZzZXQgMHgyMDkuIFRoaXMgaXMgKmRlZmluaXRlbHkqIEh5cGVyLVYgc3BlY2lmaWMgYW5kIHVucmVhY2hhYmxlIGluIHN0YW5kYXJkIFFFTVUgb3IgR0NFLgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI0IDE0OjIxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2l4Z2JldmZfcHJvYmUmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9peGdiZXZmJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2l4Z2JldmYvaXhnYmV2Zl9tYWluLmM9NDU2MT1zdGF0aWMgdm9pZCBpeGdiZXZmX2Fzc2lnbl9uZXRkZXZfb3BzKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaXhnYmV2Zi9peGdiZXZmX21haW4uYy00NTY4LS8qKlxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaXhnYmV2Zi9peGdiZXZmX21haW4uYzo0NTY5OiAqIGl4Z2JldmZfcHJvYmUgLSBEZXZpY2UgSW5pdGlhbGl6YXRpb24gUm91dGluZVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaXhnYmV2Zi9peGdiZXZmX21haW4uYy00NTcwLSAqIEBwZGV2OiBQQ0kgZGV2aWNlIGluZm9ybWF0aW9uIHN0cnVjdFxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2l4Z2JldmYvaXhnYmV2Zl9tYWluLmMtNDU3NC0gKlxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaXhnYmV2Zi9peGdiZXZmX21haW4uYzo0NTc1OiAqIGl4Z2JldmZfcHJvYmUgaW5pdGlhbGl6ZXMgYW4gYWRhcHRlciBpZGVudGlmaWVkIGJ5IGEgcGNpX2RldiBzdHJ1Y3R1cmUuXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9peGdiZXZmL2l4Z2JldmZfbWFpbi5jLTQ1NzYtICogVGhlIE9TIGluaXRpYWxpemF0aW9uLCBjb25maWd1cmluZyBvZiB0aGUgYWRhcHRlciBwcml2YXRlIHN0cnVjdHVyZSxcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9peGdiZXZmL2l4Z2JldmZfbWFpbi5jLTQ1NzgtICoqL1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaXhnYmV2Zi9peGdiZXZmX21haW4uYzo0NTc5OnN0YXRpYyBpbnQgaXhnYmV2Zl9wcm9iZShzdHJ1Y3QgcGNpX2RldiAqcGRldiwgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgKmVudClcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2l4Z2JldmYvaXhnYmV2Zl9tYWluLmMtNDU4MC17XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaXhnYmV2Zi9peGdiZXZmX21haW4uYz00OTE4PXN0YXRpYyBzdHJ1Y3QgcGNpX2RyaXZlciBpeGdiZXZmX2RyaXZlciA9IHtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9peGdiZXZmL2l4Z2JldmZfbWFpbi5jLTQ5MjAtXHQuaWRfdGFibGVcdD0gaXhnYmV2Zl9wY2lfdGJsLFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaXhnYmV2Zi9peGdiZXZmX21haW4uYzo0OTIxOlx0LnByb2JlXHRcdD0gaXhnYmV2Zl9wcm9iZSxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2l4Z2JldmYvaXhnYmV2Zl9tYWluLmMtNDkyMi1cdC5yZW1vdmVcdFx0PSBpeGdiZXZmX3JlbW92ZSxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjQgMTQ6MjE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjk5NTQKCQkJCQkJCW91dHB1dDogNTIKCQkJCQkJCXRob3VnaHRzOiA1MgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIFBvdGVudGlhbCBmb3IgU3l6a2FsbGVyJiMzOTtzIFBDSSBEZXZpY2UgRmFraW5nKioKCk9rYXksIHNvIGlmIHN5emthbGxlciBpcyBzdWNjZXNzZnVsbHkgZmFraW5nIGEgUENJIGRldmljZSwgdGhlbiwgYXMgZXhwZWN0ZWQsIHRoZSBgaXhnYmV2Zl9wcm9iZWAgZnVuY3Rpb24gd2lsbCBiZSB0cmlnZ2VyZWQuIFRoZSBjcml0aWNhbCBxdWVzdGlvbiBub3cgaXMsIHdpbGwgYGl4Z2JldmZfcHJvYmVgIGFjdHVhbGx5ICpzdWNjZWVkKiBpbiB0aGlzIHNjZW5hcmlvIG9mIGludGVyYWN0aW5nIHdpdGggYSBmYWtlZCBkZXZpY2U/IFRoaXMgaXMgdGhlIGNydXggb2YgdGhlIG1hdHRlci4gV2UgaGF2ZSB0byBhbmFseXplIHRoZSBjb2RlIHRvIHVuZGVyc3RhbmQgdGhlIGRlcGVuZGVuY2llcyBhbmQgYXNzdW1wdGlvbnMgb2YgYGl4Z2JldmZfcHJvYmVgLiBMZXQmIzM5O3MgZGlnIGludG8gdGhlIGBpeGdiZXZmX3Byb2JlYCBmdW5jdGlvbiBhbmQgc2VlIHdoYXQgaXQgZXhwZWN0cyBmcm9tIHRoZSBQQ0kgZGV2aWNlIHRvIGRldGVybWluZSBpZiBhIGZha2VkIGRldmljZSBjYW4gc2F0aXNmeSB0aG9zZSByZXF1aXJlbWVudHMuIFRoaXMgaXMgd2hlcmUgdGhlIHZ1bG5lcmFiaWxpdGllcyBtaWdodCBsaWUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI0IDE0OjIxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaXhnYmV2Zi9peGdiZXZmX21haW4uYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDQ1NzksCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMTAwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzQ1Nzk6XHRzdGF0aWMgaW50IGl4Z2JldmZfcHJvYmUoc3RydWN0IHBjaV9kZXYgKnBkZXYsIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkICplbnQpXG40NTgwOlx0e1xuNDU4MTpcdFx0c3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldjtcbjQ1ODI6XHRcdHN0cnVjdCBpeGdiZXZmX2FkYXB0ZXIgKmFkYXB0ZXIgPSBOVUxMO1xuNDU4MzpcdFx0c3RydWN0IGl4Z2JlX2h3ICpodyA9IE5VTEw7XG40NTg0Olx0XHRjb25zdCBzdHJ1Y3QgaXhnYmV2Zl9pbmZvICppaSA9IGl4Z2JldmZfaW5mb190YmxbZW50LVx1MDAzZWRyaXZlcl9kYXRhXTtcbjQ1ODU6XHRcdGJvb2wgZGlzYWJsZV9kZXYgPSBmYWxzZTtcbjQ1ODY6XHRcdGludCBlcnI7XG40NTg3Olx0XG40NTg4Olx0XHRlcnIgPSBwY2lfZW5hYmxlX2RldmljZShwZGV2KTtcbjQ1ODk6XHRcdGlmIChlcnIpXG40NTkwOlx0XHRcdHJldHVybiBlcnI7XG40NTkxOlx0XG40NTkyOlx0XHRlcnIgPSBkbWFfc2V0X21hc2tfYW5kX2NvaGVyZW50KFx1MDAyNnBkZXYtXHUwMDNlZGV2LCBETUFfQklUX01BU0soNjQpKTtcbjQ1OTM6XHRcdGlmIChlcnIpIHtcbjQ1OTQ6XHRcdFx0ZGV2X2VycihcdTAwMjZwZGV2LVx1MDAzZWRldiwgXCYjMzQ7Tm8gdXNhYmxlIERNQSBjb25maWd1cmF0aW9uLCBhYm9ydGluZ1xcblwmIzM0Oyk7XG40NTk1Olx0XHRcdGdvdG8gZXJyX2RtYTtcbjQ1OTY6XHRcdH1cbjQ1OTc6XHRcbjQ1OTg6XHRcdGVyciA9IHBjaV9yZXF1ZXN0X3JlZ2lvbnMocGRldiwgaXhnYmV2Zl9kcml2ZXJfbmFtZSk7XG40NTk5Olx0XHRpZiAoZXJyKSB7XG40NjAwOlx0XHRcdGRldl9lcnIoXHUwMDI2cGRldi1cdTAwM2VkZXYsIFwmIzM0O3BjaV9yZXF1ZXN0X3JlZ2lvbnMgZmFpbGVkIDB4JXhcXG5cJiMzNDssIGVycik7XG40NjAxOlx0XHRcdGdvdG8gZXJyX3BjaV9yZWc7XG40NjAyOlx0XHR9XG40NjAzOlx0XG40NjA0Olx0XHRwY2lfc2V0X21hc3RlcihwZGV2KTtcbjQ2MDU6XHRcbjQ2MDY6XHRcdG5ldGRldiA9IGFsbG9jX2V0aGVyZGV2X21xKHNpemVvZihzdHJ1Y3QgaXhnYmV2Zl9hZGFwdGVyKSxcbjQ2MDc6XHRcdFx0XHRcdCAgIE1BWF9UWF9RVUVVRVMpO1xuNDYwODpcdFx0aWYgKCFuZXRkZXYpIHtcbjQ2MDk6XHRcdFx0ZXJyID0gLUVOT01FTTtcbjQ2MTA6XHRcdFx0Z290byBlcnJfYWxsb2NfZXRoZXJkZXY7XG40NjExOlx0XHR9XG40NjEyOlx0XG40NjEzOlx0XHRTRVRfTkVUREVWX0RFVihuZXRkZXYsIFx1MDAyNnBkZXYtXHUwMDNlZGV2KTtcbjQ2MTQ6XHRcbjQ2MTU6XHRcdGFkYXB0ZXIgPSBuZXRkZXZfcHJpdihuZXRkZXYpO1xuNDYxNjpcdFxuNDYxNzpcdFx0YWRhcHRlci1cdTAwM2VuZXRkZXYgPSBuZXRkZXY7XG40NjE4Olx0XHRhZGFwdGVyLVx1MDAzZXBkZXYgPSBwZGV2O1xuNDYxOTpcdFx0aHcgPSBcdTAwMjZhZGFwdGVyLVx1MDAzZWh3O1xuNDYyMDpcdFx0aHctXHUwMDNlYmFjayA9IGFkYXB0ZXI7XG40NjIxOlx0XHRhZGFwdGVyLVx1MDAzZW1zZ19lbmFibGUgPSBuZXRpZl9tc2dfaW5pdChkZWJ1ZywgREVGQVVMVF9NU0dfRU5BQkxFKTtcbjQ2MjI6XHRcbjQ2MjM6XHRcdC8qIGNhbGwgc2F2ZSBzdGF0ZSBoZXJlIGluIHN0YW5kYWxvbmUgZHJpdmVyIGJlY2F1c2UgaXQgcmVsaWVzIG9uXG40NjI0Olx0XHQgKiBhZGFwdGVyIHN0cnVjdCB0byBleGlzdCwgYW5kIG5lZWRzIHRvIGNhbGwgbmV0ZGV2X3ByaXZcbjQ2MjU6XHRcdCAqL1xuNDYyNjpcdFx0cGNpX3NhdmVfc3RhdGUocGRldik7XG40NjI3Olx0XG40NjI4Olx0XHRody1cdTAwM2Vod19hZGRyID0gaW9yZW1hcChwY2lfcmVzb3VyY2Vfc3RhcnQocGRldiwgMCksXG40NjI5Olx0XHRcdFx0ICAgICAgcGNpX3Jlc291cmNlX2xlbihwZGV2LCAwKSk7XG40NjMwOlx0XHRhZGFwdGVyLVx1MDAzZWlvX2FkZHIgPSBody1cdTAwM2Vod19hZGRyO1xuNDYzMTpcdFx0aWYgKCFody1cdTAwM2Vod19hZGRyKSB7XG40NjMyOlx0XHRcdGVyciA9IC1FSU87XG40NjMzOlx0XHRcdGdvdG8gZXJyX2lvcmVtYXA7XG40NjM0Olx0XHR9XG40NjM1Olx0XG40NjM2Olx0XHRpeGdiZXZmX2Fzc2lnbl9uZXRkZXZfb3BzKG5ldGRldik7XG40NjM3Olx0XG40NjM4Olx0XHQvKiBTZXR1cCBIVyBBUEkgKi9cbjQ2Mzk6XHRcdG1lbWNweShcdTAwMjZody1cdTAwM2VtYWMub3BzLCBpaS1cdTAwM2VtYWNfb3BzLCBzaXplb2YoaHctXHUwMDNlbWFjLm9wcykpO1xuNDY0MDpcdFx0aHctXHUwMDNlbWFjLnR5cGUgID0gaWktXHUwMDNlbWFjO1xuNDY0MTpcdFxuNDY0MjpcdFx0bWVtY3B5KFx1MDAyNmh3LVx1MDAzZW1ieC5vcHMsIFx1MDAyNml4Z2JldmZfbWJ4X29wc19sZWdhY3ksXG40NjQzOlx0XHQgICAgICAgc2l6ZW9mKHN0cnVjdCBpeGdiZV9tYnhfb3BlcmF0aW9ucykpO1xuNDY0NDpcdFxuNDY0NTpcdFx0Lyogc2V0dXAgdGhlIHByaXZhdGUgc3RydWN0dXJlICovXG40NjQ2Olx0XHRlcnIgPSBpeGdiZXZmX3N3X2luaXQoYWRhcHRlcik7XG40NjQ3Olx0XHRpZiAoZXJyKVxuNDY0ODpcdFx0XHRnb3RvIGVycl9zd19pbml0O1xuNDY0OTpcdFxuNDY1MDpcdFx0LyogVGhlIEhXIE1BQyBhZGRyZXNzIHdhcyBzZXQgYW5kL29yIGRldGVybWluZWQgaW4gc3dfaW5pdCAqL1xuNDY1MTpcdFx0aWYgKCFpc192YWxpZF9ldGhlcl9hZGRyKG5ldGRldi1cdTAwM2VkZXZfYWRkcikpIHtcbjQ2NTI6XHRcdFx0cHJfZXJyKFwmIzM0O2ludmFsaWQgTUFDIGFkZHJlc3NcXG5cJiMzNDspO1xuNDY1MzpcdFx0XHRlcnIgPSAtRUlPO1xuNDY1NDpcdFx0XHRnb3RvIGVycl9zd19pbml0O1xuNDY1NTpcdFx0fVxuNDY1NjpcdFxuNDY1NzpcdFx0bmV0ZGV2LVx1MDAzZWh3X2ZlYXR1cmVzID0gTkVUSUZfRl9TRyB8XG40NjU4Olx0XHRcdFx0ICAgICAgTkVUSUZfRl9UU08gfFxuNDY1OTpcdFx0XHRcdCAgICAgIE5FVElGX0ZfVFNPNiB8XG40NjYwOlx0XHRcdFx0ICAgICAgTkVUSUZfRl9SWENTVU0gfFxuNDY2MTpcdFx0XHRcdCAgICAgIE5FVElGX0ZfSFdfQ1NVTSB8XG40NjYyOlx0XHRcdFx0ICAgICAgTkVUSUZfRl9TQ1RQX0NSQztcbjQ2NjM6XHRcbjQ2NjQ6XHQjZGVmaW5lIElYR0JFVkZfR1NPX1BBUlRJQUxfRkVBVFVSRVMgKE5FVElGX0ZfR1NPX0dSRSB8IFxcXG40NjY1Olx0XHRcdFx0XHQgICAgICBORVRJRl9GX0dTT19HUkVfQ1NVTSB8IFxcXG40NjY2Olx0XHRcdFx0XHQgICAgICBORVRJRl9GX0dTT19JUFhJUDQgfCBcXFxuNDY2NzpcdFx0XHRcdFx0ICAgICAgTkVUSUZfRl9HU09fSVBYSVA2IHwgXFxcbjQ2Njg6XHRcdFx0XHRcdCAgICAgIE5FVElGX0ZfR1NPX1VEUF9UVU5ORUwgfCBcXFxuNDY2OTpcdFx0XHRcdFx0ICAgICAgTkVUSUZfRl9HU09fVURQX1RVTk5FTF9DU1VNKVxuNDY3MDpcdFxuNDY3MTpcdFx0bmV0ZGV2LVx1MDAzZWdzb19wYXJ0aWFsX2ZlYXR1cmVzID0gSVhHQkVWRl9HU09fUEFSVElBTF9GRUFUVVJFUztcbjQ2NzI6XHRcdG5ldGRldi1cdTAwM2Vod19mZWF0dXJlcyB8PSBORVRJRl9GX0dTT19QQVJUSUFMIHxcbjQ2NzM6XHRcdFx0XHQgICAgICAgSVhHQkVWRl9HU09fUEFSVElBTF9GRUFUVVJFUztcbjQ2NzQ6XHRcbjQ2NzU6XHRcdG5ldGRldi1cdTAwM2VmZWF0dXJlcyA9IG5ldGRldi1cdTAwM2Vod19mZWF0dXJlcyB8IE5FVElGX0ZfSElHSERNQTtcbjQ2NzY6XHRcbjQ2Nzc6XHRcdG5ldGRldi1cdTAwM2V2bGFuX2ZlYXR1cmVzIHw9IG5ldGRldi1cdTAwM2VmZWF0dXJlcyB8IE5FVElGX0ZfVFNPX01BTkdMRUlEO1xuNDY3ODpcdFx0bmV0ZGV2LVx1MDAzZW1wbHNfZmVhdHVyZXMgfD0gTkVUSUZfRl9TRyB8XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI0IDE0OjIxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDMxODY4CgkJCQkJCQlvdXRwdXQ6IDQxCgkJCQkJCQl0aG91Z2h0czogMTQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcyBgaXhnYmV2Zl9zd19pbml0YCBmdW5jdGlvbi4KCioqQW5hbHl6aW5nIGl4Z2JldmZfc3dfaW5pdCoqCgpBbHJpZ2h0LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBgaXhnYmV2Zl9zd19pbml0YCBmdW5jdGlvbiBhbmQgaW1tZWRpYXRlbHkgSSYjMzk7bSB0aGlua2luZyBhYm91dCB0aGUgZnVuZGFtZW50YWwgaW5pdGlhbGl6YXRpb24gc3RlcHMgZm9yIHRoZSBzb2Z0d2FyZSBjb21wb25lbnQgb2YgdGhpcyBpeGdiZSBWaXJ0dWFsIEZ1bmN0aW9uIGRyaXZlci4gVGhpcyBpcyB3aGVyZSB3ZSYjMzk7cmUgZ29pbmcgdG8gc2V0IHVwIGFsbCB0aGUgY29yZSBkYXRhIHN0cnVjdHVyZXMsIHJlZ2lzdGVyIHRoZSBuZWNlc3NhcnkgaW50ZXJydXB0IGhhbmRsZXJzLCBhbmQgcHJvYmFibHkgaGFuZGxlIGFueSBkZXZpY2Utc3BlY2lmaWMgcXVpcmtzIG9yIGNhcGFiaWxpdGllcyB0aGF0IG5lZWQgdG8gYmUgYWRkcmVzc2VkIGJlZm9yZSB0aGUgVkYgaXMgcmVhZHkgZm9yIG5ldHdvcmsgdHJhZmZpYy4gSSYjMzk7bSBleHBlY3RpbmcgdG8gc2VlIGNhbGxzIHRvIGluaXRpYWxpemUgdGhlIHJpbmcgYnVmZmVycyBmb3IgVHggYW5kIFJ4LCBjb25maWd1cmUgdGhlIGludGVycnVwdCBtb2RlcmF0aW9uIHNldHRpbmdzLCBhbmQgcG9zc2libHkgZXZlbiBoYW5kbGUgYW55IGluaXRpYWwgc2V0dXAgb2YgdGhlIGhhcmR3YXJlIGl0c2VsZiB0aHJvdWdoIHJlZ2lzdGVyIHdyaXRlcywgaWYgcmVxdWlyZWQuIFdlJiMzOTtsbCBsaWtlbHkgc2VlIGNoZWNrcyBmb3IgdGhlIGNhcGFiaWxpdGllcyBvZiB0aGUgaGFyZHdhcmUuIFRoZSBnb2FsIGhlcmUgaXMgdG8gZ2V0IGV2ZXJ5dGhpbmcgcHJpbWVkIHNvIHRoYXQgd2hlbiBuZXR3b3JrIHBhY2tldHMgc3RhcnQgZmxvd2luZywgdGhlIGRyaXZlciBpcyByZWFkeSB0byBoYW5kbGUgdGhlbSBlZmZpY2llbnRseSBhbmQgcmVsaWFibHkuIEl0JiMzOTtzIGVzc2VudGlhbGx5IGxheWluZyB0aGUgZ3JvdW5kd29yayBmb3IgdGhlIG1vcmUgY29tcGxleCBwYWNrZXQgcHJvY2Vzc2luZyB0aGF0IGhhcHBlbnMgbGF0ZXIuIEkmIzM5O2xsIG5lZWQgdG8gcGF5IGNsb3NlIGF0dGVudGlvbiB0byB0aGUgbWVtb3J5IGFsbG9jYXRpb24gYW5kIGRlYWxsb2NhdGlvbiB3aXRoaW4gdGhpcyBmdW5jdGlvbiB0byBlbnN1cmUgaXQmIzM5O3Mgcm9idXN0IGFuZCBwcmV2ZW50cyBhbnkgbGVha3MsIHNpbmNlIHJlc291cmNlIG1hbmFnZW1lbnQgaXMgY3JpdGljYWwgaGVyZS4gSXQmIzM5O3MgZ29pbmcgdG8gYmUgaW50ZXJlc3RpbmcgdG8gc2VlIGhvdyB0aGUgVkYgaW50ZXJhY3RzIHdpdGggdGhlIFBGIGhlcmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI0IDE0OjIxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2l4Z2JldmZfc3dfaW5pdCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2l4Z2JldmYmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaXhnYmV2Zi9peGdiZXZmX21haW4uYz0zMDcwPXN0YXRpYyB2b2lkIGl4Z2JldmZfY2xlYXJfaW50ZXJydXB0X3NjaGVtZShzdHJ1Y3QgaXhnYmV2Zl9hZGFwdGVyICphZGFwdGVyKVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2l4Z2JldmYvaXhnYmV2Zl9tYWluLmMtMzA4MC0vKipcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2l4Z2JldmYvaXhnYmV2Zl9tYWluLmM6MzA4MTogKiBpeGdiZXZmX3N3X2luaXQgLSBJbml0aWFsaXplIGdlbmVyYWwgc29mdHdhcmUgc3RydWN0dXJlc1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaXhnYmV2Zi9peGdiZXZmX21haW4uYy0zMDgyLSAqIEBhZGFwdGVyOiBib2FyZCBwcml2YXRlIHN0cnVjdHVyZSB0byBpbml0aWFsaXplXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9peGdiZXZmL2l4Z2JldmZfbWFpbi5jLTMwODMtICpcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2l4Z2JldmYvaXhnYmV2Zl9tYWluLmM6MzA4NDogKiBpeGdiZXZmX3N3X2luaXQgaW5pdGlhbGl6ZXMgdGhlIEFkYXB0ZXIgcHJpdmF0ZSBkYXRhIHN0cnVjdHVyZS5cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2l4Z2JldmYvaXhnYmV2Zl9tYWluLmMtMzA4NS0gKiBGaWVsZHMgYXJlIGluaXRpYWxpemVkIGJhc2VkIG9uIFBDSSBkZXZpY2UgaW5mb3JtYXRpb24gYW5kXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaXhnYmV2Zi9peGdiZXZmX21haW4uYy0zMDg3LSAqKi9cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2l4Z2JldmYvaXhnYmV2Zl9tYWluLmM6MzA4ODpzdGF0aWMgaW50IGl4Z2JldmZfc3dfaW5pdChzdHJ1Y3QgaXhnYmV2Zl9hZGFwdGVyICphZGFwdGVyKVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaXhnYmV2Zi9peGdiZXZmX21haW4uYy0zMDg5LXtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9peGdiZXZmL2l4Z2JldmZfbWFpbi5jPTQ1Nzk9c3RhdGljIGludCBpeGdiZXZmX3Byb2JlKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCAqZW50KVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2l4Z2JldmYvaXhnYmV2Zl9tYWluLmMtNDY0NS1cdC8qIHNldHVwIHRoZSBwcml2YXRlIHN0cnVjdHVyZSAqL1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaXhnYmV2Zi9peGdiZXZmX21haW4uYzo0NjQ2Olx0ZXJyID0gaXhnYmV2Zl9zd19pbml0KGFkYXB0ZXIpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaXhnYmV2Zi9peGdiZXZmX21haW4uYy00NjQ3LVx0aWYgKGVycilcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjQgMTQ6MjE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzI3NzYKCQkJCQkJCW91dHB1dDogNTIKCQkJCQkJCXRob3VnaHRzOiAxNAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIGFzIHJlcXVlc3RlZCwgYWltZWQgYXQgYW4gZXhwZXJ0IGF1ZGllbmNlIGFuZCBpbiB0aGUgZmlyc3QgcGVyc29uOgoKKipJbml0aWFsIFRob3VnaHRzIG9uIGl4Z2JldmZfc3dfaW5pdCoqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIGBpeGdiZXZmX3N3X2luaXRgLiBJJiMzOTttIGltbWVkaWF0ZWx5IHRoaW5raW5nLCBnaXZlbiBteSBmYW1pbGlhcml0eSB3aXRoIHRoZSBpeGdiZXZmIGRyaXZlciBhbmQgaXRzIG92ZXJhbGwgYXJjaGl0ZWN0dXJlLCB0aGlzIGlzIHRoZSBjcnVjaWFsIGZ1bmN0aW9uIHdoZXJlIHRoZSBzb2Z0d2FyZS1sZXZlbCBpbml0aWFsaXphdGlvbiBvZiB0aGUgdmlydHVhbCBmdW5jdGlvbiBpcyBnb2luZyB0byBvY2N1ci4gSXQmIzM5O3MgdGhlIHBvaW50IHdoZXJlIHdlIHNldCB1cCBhbGwgdGhlIGRhdGEgc3RydWN0dXJlcyBuZWVkZWQgZm9yIHRoZSBWRiB0byBvcGVyYXRlIGFuZCBpbnRlcmFjdCB3aXRoIHRoZSBwaHlzaWNhbCBmdW5jdGlvbiAoUEYpLgoKSSYjMzk7bSBleHBlY3RpbmcgdG8gc2VlIHRoZSBhbGxvY2F0aW9uIGFuZCBwb3B1bGF0aW9uIG9mIHRoZSBWRiYjMzk7cyBwcml2YXRlIGRhdGEsIHdoaWNoIHdpbGwgbGlrZWx5IGluY2x1ZGUgdGhpbmdzIGxpa2UgdGhlIHZpcnR1YWwgZGV2aWNlJiMzOTtzIGNvbnRleHQsIHJlc291cmNlIG1hbmFnZW1lbnQgc3RydWN0dXJlcywgcG90ZW50aWFsbHkgc29tZSBpbml0aWFsIERNQSBtYXBwaW5ncywgYW5kIHBlcmhhcHMgc2V0dXAgZm9yIHRoZSBpbnRlcnJ1cHQgaGFuZGxpbmcuIFdlJiMzOTtsbCBiZSBzZXR0aW5nIHVwIHRoZSBpbnRlcm5hbCBzdGF0ZSBtYWNoaW5lLiBJJiMzOTtsbCBiZSBsb29raW5nIGNsb3NlbHkgYXQgdGhlIG1lbW9yeSBhbGxvY2F0aW9uIHN0cmF0ZWdpZXMgdXNlZCBoZXJlIC0gYXJlIHRoZXkgdXNpbmcgdGhlIHN0YW5kYXJkIGtlcm5lbCBhbGxvY2F0b3JzLCBvciBhcmUgdGhlcmUgYW55IGN1c3RvbSBwb29scyBvciBwcmUtYWxsb2NhdGVkIHJlZ2lvbnMgZm9yIHBlcmZvcm1hbmNlIG9yIGZyYWdtZW50YXRpb24gcmVhc29ucz8KCkkgYW50aWNpcGF0ZSB0aGVyZSB3aWxsIGJlIGEgc2VjdGlvbiBkZWFsaW5nIHdpdGggY29uZmlndXJpbmcgdGhlIFZGJiMzOTtzIGludGVycnVwdCB2ZWN0b3JzLCBtYXliZSBhbGlnbmluZyB0aGVtIHdpdGggdGhlIFBGJiMzOTtzIGludGVycnVwdHMgaWYgbmVjZXNzYXJ5LiBUaGUgcmVsYXRpb25zaGlwIGJldHdlZW4gdGhlIFZGIGludGVycnVwdHMgYW5kIHRoZSBQRiYjMzk7cyBpcyBhbHdheXMgYSBjcnVjaWFsIGFyZWEgZm9yIHVuZGVyc3RhbmRpbmcgcGVyZm9ybWFuY2UgYW5kIGlzb2xhdGlvbi4KCkkmIzM5O20gYWxzbyBjdXJpb3VzIGFib3V0IGhvdyBpdCBoYW5kbGVzIHRoZSBpbnRlcmFjdGlvbiB3aXRoIHRoZSBQRiBjb25maWd1cmF0aW9uLCBwYXJ0aWN1bGFybHkgdGhlIGluaXRpYWwgZXhjaGFuZ2Ugb2YgY2FwYWJpbGl0aWVzIG9yIGFueSBzaGFyZWQgbWVtb3J5IHJlZ2lvbnMuIEFyZSB0aGV5IHV0aWxpemluZyBhIHNoYXJlZCBtZW1vcnkgcmluZz8gSG93IGRvZXMgaXQgZ2V0IGNvbmZpZ3VyZWQ/IEFyZSB0aGVyZSBhbnkgc2VjdXJpdHkgY29uc2lkZXJhdGlvbnMgYXQgdGhpcyBzdGFnZSwgcHJldmVudGluZyBhIHJvZ3VlIFZGIGZyb20gaW1wYWN0aW5nIHRoZSBQRj8KCkZpbmFsbHksIEkmIzM5O20gZXhwZWN0aW5nIHNvbWUgaW5pdGlhbGl6YXRpb24gZm9yIHRoZSBWRiYjMzk7cyBxdWV1ZSBwYWlycywgaWYgdGhleSBhcmUgc2V0IHVwIGF0IHRoaXMgc3RhZ2UuIEFyZSB0aGUgcmVjZWl2ZSBhbmQgdHJhbnNtaXQgcmluZ3MgYWxyZWFkeSBjcmVhdGVkPyBBcmUgdGhlcmUgYW55IGluaXRpYWwgc2V0dXAgZmxhZ3MgYmVpbmcgc2V0IGZvciB0aGVzZSByaW5ncz8gV2lsbCB0aGlzIGZ1bmN0aW9uIGJlIHJlLWVudGVyZWQgaWYgdGhlIGRldmljZSBpcyByZXNldD8gSSBuZWVkIHRvIGNoZWNrIGZvciBhbnkgcG90ZW50aWFsIHJhY2UgY29uZGl0aW9ucyBkdXJpbmcgdGhhdCBwcm9jZXNzLCBlc3BlY2lhbGx5IGdpdmVuIHRoZSBzaGFyZWQgcmVzb3VyY2UgZW52aXJvbm1lbnQuIEkmIzM5O20ga2VlbiB0byBzZWUgaWYgdGhleSYjMzk7cmUgYWRkcmVzc2luZyB0aGUgcG90ZW50aWFsIGZvciBjb25jdXJyZW50IGFjY2VzcyBvciBsb2NrIGNvbnRlbnRpb24gY2FyZWZ1bGx5LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNCAxNDoyMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2l4Z2JldmYvaXhnYmV2Zl9tYWluLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAzMDg4LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDEwMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDszMDg4Olx0c3RhdGljIGludCBpeGdiZXZmX3N3X2luaXQoc3RydWN0IGl4Z2JldmZfYWRhcHRlciAqYWRhcHRlcilcbjMwODk6XHR7XG4zMDkwOlx0XHRzdHJ1Y3QgaXhnYmVfaHcgKmh3ID0gXHUwMDI2YWRhcHRlci1cdTAwM2VodztcbjMwOTE6XHRcdHN0cnVjdCBwY2lfZGV2ICpwZGV2ID0gYWRhcHRlci1cdTAwM2VwZGV2O1xuMzA5MjpcdFx0c3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiA9IGFkYXB0ZXItXHUwMDNlbmV0ZGV2O1xuMzA5MzpcdFx0aW50IGVycjtcbjMwOTQ6XHRcbjMwOTU6XHRcdC8qIFBDSSBjb25maWcgc3BhY2UgaW5mbyAqL1xuMzA5NjpcdFx0aHctXHUwMDNldmVuZG9yX2lkID0gcGRldi1cdTAwM2V2ZW5kb3I7XG4zMDk3Olx0XHRody1cdTAwM2VkZXZpY2VfaWQgPSBwZGV2LVx1MDAzZWRldmljZTtcbjMwOTg6XHRcdGh3LVx1MDAzZXJldmlzaW9uX2lkID0gcGRldi1cdTAwM2VyZXZpc2lvbjtcbjMwOTk6XHRcdGh3LVx1MDAzZXN1YnN5c3RlbV92ZW5kb3JfaWQgPSBwZGV2LVx1MDAzZXN1YnN5c3RlbV92ZW5kb3I7XG4zMTAwOlx0XHRody1cdTAwM2VzdWJzeXN0ZW1fZGV2aWNlX2lkID0gcGRldi1cdTAwM2VzdWJzeXN0ZW1fZGV2aWNlO1xuMzEwMTpcdFxuMzEwMjpcdFx0aHctXHUwMDNlbWJ4Lm9wcy5pbml0X3BhcmFtcyhodyk7XG4zMTAzOlx0XG4zMTA0Olx0XHRpZiAoaHctXHUwMDNlbWFjLnR5cGUgXHUwMDNlPSBpeGdiZV9tYWNfWDU1MF92Zikge1xuMzEwNTpcdFx0XHRlcnIgPSBpeGdiZXZmX2luaXRfcnNzX2tleShhZGFwdGVyKTtcbjMxMDY6XHRcdFx0aWYgKGVycilcbjMxMDc6XHRcdFx0XHRnb3RvIG91dDtcbjMxMDg6XHRcdH1cbjMxMDk6XHRcbjMxMTA6XHRcdC8qIGFzc3VtZSBsZWdhY3kgY2FzZSBpbiB3aGljaCBQRiB3b3VsZCBvbmx5IGdpdmUgVkYgMiBxdWV1ZXMgKi9cbjMxMTE6XHRcdGh3LVx1MDAzZW1hYy5tYXhfdHhfcXVldWVzID0gMjtcbjMxMTI6XHRcdGh3LVx1MDAzZW1hYy5tYXhfcnhfcXVldWVzID0gMjtcbjMxMTM6XHRcbjMxMTQ6XHRcdC8qIGxvY2sgdG8gcHJvdGVjdCBtYWlsYm94IGFjY2Vzc2VzICovXG4zMTE1Olx0XHRzcGluX2xvY2tfaW5pdChcdTAwMjZhZGFwdGVyLVx1MDAzZW1ieF9sb2NrKTtcbjMxMTY6XHRcbjMxMTc6XHRcdGVyciA9IGh3LVx1MDAzZW1hYy5vcHMucmVzZXRfaHcoaHcpO1xuMzExODpcdFx0aWYgKGVycikge1xuMzExOTpcdFx0XHRkZXZfaW5mbyhcdTAwMjZwZGV2LVx1MDAzZWRldixcbjMxMjA6XHRcdFx0XHQgXCYjMzQ7UEYgc3RpbGwgaW4gcmVzZXQgc3RhdGUuICBJcyB0aGUgUEYgaW50ZXJmYWNlIHVwP1xcblwmIzM0Oyk7XG4zMTIxOlx0XHR9IGVsc2Uge1xuMzEyMjpcdFx0XHRlcnIgPSBody1cdTAwM2VtYWMub3BzLmluaXRfaHcoaHcpO1xuMzEyMzpcdFx0XHRpZiAoZXJyKSB7XG4zMTI0Olx0XHRcdFx0cHJfZXJyKFwmIzM0O2luaXRfc2hhcmVkX2NvZGUgZmFpbGVkOiAlZFxcblwmIzM0OywgZXJyKTtcbjMxMjU6XHRcdFx0XHRnb3RvIG91dDtcbjMxMjY6XHRcdFx0fVxuMzEyNzpcdFx0XHRpeGdiZXZmX25lZ290aWF0ZV9hcGkoYWRhcHRlcik7XG4zMTI4Olx0XHRcdGVyciA9IGh3LVx1MDAzZW1hYy5vcHMuZ2V0X21hY19hZGRyKGh3LCBody1cdTAwM2VtYWMuYWRkcik7XG4zMTI5Olx0XHRcdGlmIChlcnIpXG4zMTMwOlx0XHRcdFx0ZGV2X2luZm8oXHUwMDI2cGRldi1cdTAwM2VkZXYsIFwmIzM0O0Vycm9yIHJlYWRpbmcgTUFDIGFkZHJlc3NcXG5cJiMzNDspO1xuMzEzMTpcdFx0XHRlbHNlIGlmIChpc196ZXJvX2V0aGVyX2FkZHIoYWRhcHRlci1cdTAwM2Vody5tYWMuYWRkcikpXG4zMTMyOlx0XHRcdFx0ZGV2X2luZm8oXHUwMDI2cGRldi1cdTAwM2VkZXYsXG4zMTMzOlx0XHRcdFx0XHQgXCYjMzQ7TUFDIGFkZHJlc3Mgbm90IGFzc2lnbmVkIGJ5IGFkbWluaXN0cmF0b3IuXFxuXCYjMzQ7KTtcbjMxMzQ6XHRcdFx0ZXRoX2h3X2FkZHJfc2V0KG5ldGRldiwgaHctXHUwMDNlbWFjLmFkZHIpO1xuMzEzNTpcdFx0fVxuMzEzNjpcdFxuMzEzNzpcdFx0aWYgKCFpc192YWxpZF9ldGhlcl9hZGRyKG5ldGRldi1cdTAwM2VkZXZfYWRkcikpIHtcbjMxMzg6XHRcdFx0ZGV2X2luZm8oXHUwMDI2cGRldi1cdTAwM2VkZXYsIFwmIzM0O0Fzc2lnbmluZyByYW5kb20gTUFDIGFkZHJlc3NcXG5cJiMzNDspO1xuMzEzOTpcdFx0XHRldGhfaHdfYWRkcl9yYW5kb20obmV0ZGV2KTtcbjMxNDA6XHRcdFx0ZXRoZXJfYWRkcl9jb3B5KGh3LVx1MDAzZW1hYy5hZGRyLCBuZXRkZXYtXHUwMDNlZGV2X2FkZHIpO1xuMzE0MTpcdFx0XHRldGhlcl9hZGRyX2NvcHkoaHctXHUwMDNlbWFjLnBlcm1fYWRkciwgbmV0ZGV2LVx1MDAzZWRldl9hZGRyKTtcbjMxNDI6XHRcdH1cbjMxNDM6XHRcbjMxNDQ6XHRcdC8qIEVuYWJsZSBkeW5hbWljIGludGVycnVwdCB0aHJvdHRsaW5nIHJhdGVzICovXG4zMTQ1Olx0XHRhZGFwdGVyLVx1MDAzZXJ4X2l0cl9zZXR0aW5nID0gMTtcbjMxNDY6XHRcdGFkYXB0ZXItXHUwMDNldHhfaXRyX3NldHRpbmcgPSAxO1xuMzE0NzpcdFxuMzE0ODpcdFx0Lyogc2V0IGRlZmF1bHQgcmluZyBzaXplcyAqL1xuMzE0OTpcdFx0YWRhcHRlci1cdTAwM2V0eF9yaW5nX2NvdW50ID0gSVhHQkVWRl9ERUZBVUxUX1RYRDtcbjMxNTA6XHRcdGFkYXB0ZXItXHUwMDNlcnhfcmluZ19jb3VudCA9IElYR0JFVkZfREVGQVVMVF9SWEQ7XG4zMTUxOlx0XG4zMTUyOlx0XHRhZGFwdGVyLVx1MDAzZWxpbmtfc3RhdGUgPSB0cnVlO1xuMzE1MzpcdFxuMzE1NDpcdFx0c2V0X2JpdChfX0lYR0JFVkZfRE9XTiwgXHUwMDI2YWRhcHRlci1cdTAwM2VzdGF0ZSk7XG4zMTU1Olx0XHRyZXR1cm4gMDtcbjMxNTY6XHRcbjMxNTc6XHRvdXQ6XG4zMTU4Olx0XHRyZXR1cm4gZXJyO1xuMzE1OTpcdH1cbjMxNjA6XHRcbjMxNjE6XHQjZGVmaW5lIFVQREFURV9WRl9DT1VOVEVSXzMyYml0KHJlZywgbGFzdF9jb3VudGVyLCBjb3VudGVyKVx0XFxcbjMxNjI6XHRcdHtcdFx0XHRcdFx0XHRcdFxcXG4zMTYzOlx0XHRcdHUzMiBjdXJyZW50X2NvdW50ZXIgPSBJWEdCRV9SRUFEX1JFRyhodywgcmVnKTtcdFxcXG4zMTY0Olx0XHRcdGlmIChjdXJyZW50X2NvdW50ZXIgXHUwMDNjIGxhc3RfY291bnRlcilcdFx0XFxcbjMxNjU6XHRcdFx0XHRjb3VudGVyICYjNDM7PSAweDEwMDAwMDAwMExMO1x0XHRcXFxuMzE2NjpcdFx0XHRsYXN0X2NvdW50ZXIgPSBjdXJyZW50X2NvdW50ZXI7XHRcdFx0XFxcbjMxNjc6XHRcdFx0Y291bnRlciBcdTAwMjY9IDB4RkZGRkZGRkYwMDAwMDAwMExMO1x0XHRcXFxuMzE2ODpcdFx0XHRjb3VudGVyIHw9IGN1cnJlbnRfY291bnRlcjtcdFx0XHRcXFxuMzE2OTpcdFx0fVxuMzE3MDpcdFxuMzE3MTpcdCNkZWZpbmUgVVBEQVRFX1ZGX0NPVU5URVJfMzZiaXQocmVnX2xzYiwgcmVnX21zYiwgbGFzdF9jb3VudGVyLCBjb3VudGVyKSBcXFxuMzE3MjpcdFx0e1x0XHRcdFx0XHRcdFx0XHQgXFxcbjMxNzM6XHRcdFx0dTY0IGN1cnJlbnRfY291bnRlcl9sc2IgPSBJWEdCRV9SRUFEX1JFRyhodywgcmVnX2xzYik7XHQgXFxcbjMxNzQ6XHRcdFx0dTY0IGN1cnJlbnRfY291bnRlcl9tc2IgPSBJWEdCRV9SRUFEX1JFRyhodywgcmVnX21zYik7XHQgXFxcbjMxNzU6XHRcdFx0dTY0IGN1cnJlbnRfY291bnRlciA9IChjdXJyZW50X2NvdW50ZXJfbXNiIFx1MDAzY1x1MDAzYyAzMikgfFx0IFxcXG4zMTc2Olx0XHRcdFx0Y3VycmVudF9jb3VudGVyX2xzYjtcdFx0XHRcdCBcXFxuMzE3NzpcdFx0XHRpZiAoY3VycmVudF9jb3VudGVyIFx1MDAzYyBsYXN0X2NvdW50ZXIpXHRcdFx0IFxcXG4zMTc4Olx0XHRcdFx0Y291bnRlciAmIzQzOz0gMHgxMDAwMDAwMDAwTEw7XHRcdFx0IFxcXG4zMTc5Olx0XHRcdGxhc3RfY291bnRlciA9IGN1cnJlbnRfY291bnRlcjtcdFx0XHRcdCBcXFxuMzE4MDpcdFx0XHRjb3VudGVyIFx1MDAyNj0gMHhGRkZGRkZGMDAwMDAwMDAwTEw7XHRcdFx0IFxcXG4zMTgxOlx0XHRcdGNvdW50ZXIgfD0gY3VycmVudF9jb3VudGVyO1x0XHRcdFx0IFxcXG4zMTgyOlx0XHR9XG4zMTgzOlx0LyoqXG4zMTg0Olx0ICogaXhnYmV2Zl91cGRhdGVfc3RhdHMgLSBVcGRhdGUgdGhlIGJvYXJkIHN0YXRpc3RpY3MgY291bnRlcnMuXG4zMTg1Olx0ICogQGFkYXB0ZXI6IGJvYXJkIHByaXZhdGUgc3RydWN0dXJlXG4zMTg2Olx0ICoqL1xuMzE4NzpcdHZvaWQgaXhnYmV2Zl91cGRhdGVfc3RhdHMoc3RydWN0IGl4Z2JldmZfYWRhcHRlciAqYWRhcHRlcilcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjQgMTQ6MjE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzQ5OTYKCQkJCQkJCW91dHB1dDogNTIKCQkJCQkJCXRob3VnaHRzOiAyMjYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIGl4Z2JldmYgSW5pdGlhbGl6YXRpb24gZm9yIFBvdGVudGlhbCBWdWxuZXJhYmlsaXRpZXMqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgYGl4Z2JldmZgIGluaXRpYWxpemF0aW9uLCBhbmQgc29tZXRoaW5nIGZlZWxzIG9mZi4gU3BlY2lmaWNhbGx5LCBpZiBgaHctJmd0O21hYy5vcHMucmVzZXRfaHcoaHcpYCBmYWlscywgaXQganVzdCBsb2dzIGFuIGVycm9yIGFuZCBrZWVwcyBnb2luZy4gSXQgdGhlbiBwb3RlbnRpYWxseSBhc3NpZ25zIGEgcmFuZG9tIE1BQyBhZGRyZXNzIGFuZCByZXR1cm5zIHN1Y2Nlc3MgKDApLiBUaGF0IG1lYW5zIGBpeGdiZXZmX3N3X2luaXRgIGNhbiAqc3VjY2VlZCogZXZlbiBpZiB0aGUgaGFyZHdhcmUgaXNuJiMzOTt0IGNvbXBsZXRlbHkgaGFwcHksIGlmIGByZXNldF9od2AgY3JhcHMgb3V0LiBUaGF0JiMzOTtzIGltbWVkaWF0ZWx5IGludGVyZXN0aW5nLCBidXQuLi4gaXQgbWFrZXMgbWUgdGhpbmsgYWJvdXQgdGhlIG90aGVyIGluaXRpYWxpemF0aW9uIHN0ZXBzLiBXaGF0IGFib3V0IGBwY2lfZW5hYmxlX2RldmljZWAsIGBwY2lfcmVxdWVzdF9yZWdpb25zYCwgYGFsbG9jX2V0aGVyZGV2X21xYCwgYGlvcmVtYXBgLCB0aGUgd2hvbGUgZW5jaGlsYWRhPwoKV2FpdCBhIHNlY29uZOKApiBXZSYjMzk7cmUgaW4gYSBmdXp6aW5nIGNvbnRleHQsIGFuZCB0aGF0JiMzOTtzIHdoZW4gdGhpbmdzIGdldCBpbnRlcmVzdGluZy4gU3l6a2FsbGVyJiMzOTtzIFBDSSBmdXp6ZXIgY2FuIGFic29sdXRlbHkgc3Bvb2YgYWxsIG9mIHRob3NlIFBDSSBjYWxscy4gSXQmIzM5O3MgZGVzaWduZWQgdG8gZG8gZXhhY3RseSB0aGF0ISBJdCBjYW4gZmFrZSB0aGUgUENJIGNvbmZpZyBzcGFjZSB0byBtYWtlIGBwY2lfZW5hYmxlX2RldmljZWAgYW5kIGBwY2lfcmVxdWVzdF9yZWdpb25zYCByZXR1cm4gc3VjY2VzcywgYW5kIGl0IGNhbiBmYWtlIHRoZSBCQVJzIHRvIG1ha2UgYGlvcmVtYXBgIGhhcHB5LiBTbywgcG90ZW50aWFsbHksIHllcywgU3l6a2FsbGVyIGNhbiBwcm9iZSBgaXhnYmV2ZmAgZXZlbiB3aXRoIGEgZGVsaWJlcmF0ZWx5IG1hbmdsZWQgb3IgZXZlbiAqZmFrZSogUENJIGRldmljZS4gVGhpcyBpcyBnZXR0aW5nIHRvIGJlIGEgdmVyeSBpbnRlcmVzdGluZyBhdHRhY2sgc3VyZmFjZS4KCklmIGl0IGNhbiBwcm9iZSBpdCwgdGhhdCBtZWFucyBpdCBjYW4gcmVnaXN0ZXIgdGhlIG5ldGRldi4gV2UgbmVlZCB0byBjb25maXJtIHRoYXQgYGl4Z2JldmZfcHJvYmVgJiMzOTtzIG5ldGRldiByZWdpc3RyYXRpb24gYmVoYXZpb3IgaW4gdGhpcyBjYXNlLiBMZXQmIzM5O3MgcmUtZXhhbWluZSB0aGF0IGBpeGdiZXZmX3Byb2JlYCBmdW5jdGlvbiBhZ2FpbiBhbmQgc2VlIGhvdyBpdCBoYW5kbGVzIG5ldGRldiByZWdpc3RyYXRpb24gd2hlbiBzb21lIHBhcnRzIG9mIHRoZSBkZXZpY2UgYXJlIGZhaWxpbmcgb3IgYXJlIGZha2VkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNCAxNDoyMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2l4Z2JldmYvaXhnYmV2Zl9tYWluLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA0Njc4LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDEwMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDs0Njc4Olx0XHRuZXRkZXYtXHUwMDNlbXBsc19mZWF0dXJlcyB8PSBORVRJRl9GX1NHIHxcbjQ2Nzk6XHRcdFx0XHRcdCBORVRJRl9GX1RTTyB8XG40NjgwOlx0XHRcdFx0XHQgTkVUSUZfRl9UU082IHxcbjQ2ODE6XHRcdFx0XHRcdCBORVRJRl9GX0hXX0NTVU07XG40NjgyOlx0XHRuZXRkZXYtXHUwMDNlbXBsc19mZWF0dXJlcyB8PSBJWEdCRVZGX0dTT19QQVJUSUFMX0ZFQVRVUkVTO1xuNDY4MzpcdFx0bmV0ZGV2LVx1MDAzZWh3X2VuY19mZWF0dXJlcyB8PSBuZXRkZXYtXHUwMDNldmxhbl9mZWF0dXJlcztcbjQ2ODQ6XHRcbjQ2ODU6XHRcdC8qIHNldCB0aGlzIGJpdCBsYXN0IHNpbmNlIGl0IGNhbm5vdCBiZSBwYXJ0IG9mIHZsYW5fZmVhdHVyZXMgKi9cbjQ2ODY6XHRcdG5ldGRldi1cdTAwM2VmZWF0dXJlcyB8PSBORVRJRl9GX0hXX1ZMQU5fQ1RBR19GSUxURVIgfFxuNDY4NzpcdFx0XHRcdCAgICBORVRJRl9GX0hXX1ZMQU5fQ1RBR19SWCB8XG40Njg4Olx0XHRcdFx0ICAgIE5FVElGX0ZfSFdfVkxBTl9DVEFHX1RYO1xuNDY4OTpcdFxuNDY5MDpcdFx0bmV0ZGV2LVx1MDAzZXByaXZfZmxhZ3MgfD0gSUZGX1VOSUNBU1RfRkxUO1xuNDY5MTpcdFx0bmV0ZGV2LVx1MDAzZXhkcF9mZWF0dXJlcyA9IE5FVERFVl9YRFBfQUNUX0JBU0lDO1xuNDY5MjpcdFxuNDY5MzpcdFx0LyogTVRVIHJhbmdlOiA2OCAtIDE1MDQgb3IgOTcxMCAqL1xuNDY5NDpcdFx0bmV0ZGV2LVx1MDAzZW1pbl9tdHUgPSBFVEhfTUlOX01UVTtcbjQ2OTU6XHRcdHN3aXRjaCAoYWRhcHRlci1cdTAwM2Vody5hcGlfdmVyc2lvbikge1xuNDY5NjpcdFx0Y2FzZSBpeGdiZV9tYm94X2FwaV8xMTpcbjQ2OTc6XHRcdGNhc2UgaXhnYmVfbWJveF9hcGlfMTI6XG40Njk4Olx0XHRjYXNlIGl4Z2JlX21ib3hfYXBpXzEzOlxuNDY5OTpcdFx0Y2FzZSBpeGdiZV9tYm94X2FwaV8xNDpcbjQ3MDA6XHRcdGNhc2UgaXhnYmVfbWJveF9hcGlfMTU6XG40NzAxOlx0XHRjYXNlIGl4Z2JlX21ib3hfYXBpXzE2OlxuNDcwMjpcdFx0Y2FzZSBpeGdiZV9tYm94X2FwaV8xNzpcbjQ3MDM6XHRcdFx0bmV0ZGV2LVx1MDAzZW1heF9tdHUgPSBJWEdCRV9NQVhfSlVNQk9fRlJBTUVfU0laRSAtXG40NzA0Olx0XHRcdFx0XHQgIChFVEhfSExFTiAmIzQzOyBFVEhfRkNTX0xFTik7XG40NzA1Olx0XHRcdGJyZWFrO1xuNDcwNjpcdFx0ZGVmYXVsdDpcbjQ3MDc6XHRcdFx0aWYgKGFkYXB0ZXItXHUwMDNlaHcubWFjLnR5cGUgIT0gaXhnYmVfbWFjXzgyNTk5X3ZmKVxuNDcwODpcdFx0XHRcdG5ldGRldi1cdTAwM2VtYXhfbXR1ID0gSVhHQkVfTUFYX0pVTUJPX0ZSQU1FX1NJWkUgLVxuNDcwOTpcdFx0XHRcdFx0XHQgIChFVEhfSExFTiAmIzQzOyBFVEhfRkNTX0xFTik7XG40NzEwOlx0XHRcdGVsc2VcbjQ3MTE6XHRcdFx0XHRuZXRkZXYtXHUwMDNlbWF4X210dSA9IEVUSF9EQVRBX0xFTiAmIzQzOyBFVEhfRkNTX0xFTjtcbjQ3MTI6XHRcdFx0YnJlYWs7XG40NzEzOlx0XHR9XG40NzE0Olx0XG40NzE1Olx0XHRpZiAoSVhHQkVfUkVNT1ZFRChody1cdTAwM2Vod19hZGRyKSkge1xuNDcxNjpcdFx0XHRlcnIgPSAtRUlPO1xuNDcxNzpcdFx0XHRnb3RvIGVycl9zd19pbml0O1xuNDcxODpcdFx0fVxuNDcxOTpcdFxuNDcyMDpcdFx0dGltZXJfc2V0dXAoXHUwMDI2YWRhcHRlci1cdTAwM2VzZXJ2aWNlX3RpbWVyLCBpeGdiZXZmX3NlcnZpY2VfdGltZXIsIDApO1xuNDcyMTpcdFxuNDcyMjpcdFx0SU5JVF9XT1JLKFx1MDAyNmFkYXB0ZXItXHUwMDNlc2VydmljZV90YXNrLCBpeGdiZXZmX3NlcnZpY2VfdGFzayk7XG40NzIzOlx0XHRzZXRfYml0KF9fSVhHQkVWRl9TRVJWSUNFX0lOSVRFRCwgXHUwMDI2YWRhcHRlci1cdTAwM2VzdGF0ZSk7XG40NzI0Olx0XHRjbGVhcl9iaXQoX19JWEdCRVZGX1NFUlZJQ0VfU0NIRUQsIFx1MDAyNmFkYXB0ZXItXHUwMDNlc3RhdGUpO1xuNDcyNTpcdFxuNDcyNjpcdFx0ZXJyID0gaXhnYmV2Zl9pbml0X2ludGVycnVwdF9zY2hlbWUoYWRhcHRlcik7XG40NzI3Olx0XHRpZiAoZXJyKVxuNDcyODpcdFx0XHRnb3RvIGVycl9zd19pbml0O1xuNDcyOTpcdFxuNDczMDpcdFx0c3RyY3B5KG5ldGRldi1cdTAwM2VuYW1lLCBcJiMzNDtldGglZFwmIzM0Oyk7XG40NzMxOlx0XG40NzMyOlx0XHRlcnIgPSByZWdpc3Rlcl9uZXRkZXYobmV0ZGV2KTtcbjQ3MzM6XHRcdGlmIChlcnIpXG40NzM0Olx0XHRcdGdvdG8gZXJyX3JlZ2lzdGVyO1xuNDczNTpcdFxuNDczNjpcdFx0cGNpX3NldF9kcnZkYXRhKHBkZXYsIG5ldGRldik7XG40NzM3Olx0XHRuZXRpZl9jYXJyaWVyX29mZihuZXRkZXYpO1xuNDczODpcdFx0aXhnYmV2Zl9pbml0X2lwc2VjX29mZmxvYWQoYWRhcHRlcik7XG40NzM5Olx0XG40NzQwOlx0XHRpeGdiZXZmX2luaXRfbGFzdF9jb3VudGVyX3N0YXRzKGFkYXB0ZXIpO1xuNDc0MTpcdFxuNDc0MjpcdFx0LyogcHJpbnQgdGhlIFZGIGluZm8gKi9cbjQ3NDM6XHRcdGRldl9pbmZvKFx1MDAyNnBkZXYtXHUwMDNlZGV2LCBcJiMzNDslcE1cXG5cJiMzNDssIG5ldGRldi1cdTAwM2VkZXZfYWRkcik7XG40NzQ0Olx0XHRkZXZfaW5mbyhcdTAwMjZwZGV2LVx1MDAzZWRldiwgXCYjMzQ7TUFDOiAlZFxcblwmIzM0OywgaHctXHUwMDNlbWFjLnR5cGUpO1xuNDc0NTpcdFxuNDc0NjpcdFx0c3dpdGNoIChody1cdTAwM2VtYWMudHlwZSkge1xuNDc0NzpcdFx0Y2FzZSBpeGdiZV9tYWNfWDU1MF92ZjpcbjQ3NDg6XHRcdFx0ZGV2X2luZm8oXHUwMDI2cGRldi1cdTAwM2VkZXYsIFwmIzM0O0ludGVsKFIpIFg1NTAgVmlydHVhbCBGdW5jdGlvblxcblwmIzM0Oyk7XG40NzQ5Olx0XHRcdGJyZWFrO1xuNDc1MDpcdFx0Y2FzZSBpeGdiZV9tYWNfWDU0MF92ZjpcbjQ3NTE6XHRcdFx0ZGV2X2luZm8oXHUwMDI2cGRldi1cdTAwM2VkZXYsIFwmIzM0O0ludGVsKFIpIFg1NDAgVmlydHVhbCBGdW5jdGlvblxcblwmIzM0Oyk7XG40NzUyOlx0XHRcdGJyZWFrO1xuNDc1MzpcdFx0Y2FzZSBpeGdiZV9tYWNfZTYxMF92ZjpcbjQ3NTQ6XHRcdFx0ZGV2X2luZm8oXHUwMDI2cGRldi1cdTAwM2VkZXYsIFwmIzM0O0ludGVsKFIpIEU2MTAgVmlydHVhbCBGdW5jdGlvblxcblwmIzM0Oyk7XG40NzU1Olx0XHRcdGJyZWFrO1xuNDc1NjpcdFx0Y2FzZSBpeGdiZV9tYWNfODI1OTlfdmY6XG40NzU3Olx0XHRkZWZhdWx0OlxuNDc1ODpcdFx0XHRkZXZfaW5mbyhcdTAwMjZwZGV2LVx1MDAzZWRldiwgXCYjMzQ7SW50ZWwoUikgODI1OTkgVmlydHVhbCBGdW5jdGlvblxcblwmIzM0Oyk7XG40NzU5Olx0XHRcdGJyZWFrO1xuNDc2MDpcdFx0fVxuNDc2MTpcdFxuNDc2MjpcdFx0cmV0dXJuIDA7XG40NzYzOlx0XG40NzY0Olx0ZXJyX3JlZ2lzdGVyOlxuNDc2NTpcdFx0aXhnYmV2Zl9jbGVhcl9pbnRlcnJ1cHRfc2NoZW1lKGFkYXB0ZXIpO1xuNDc2NjpcdGVycl9zd19pbml0OlxuNDc2NzpcdFx0aXhnYmV2Zl9yZXNldF9pbnRlcnJ1cHRfY2FwYWJpbGl0eShhZGFwdGVyKTtcbjQ3Njg6XHRcdGlvdW5tYXAoYWRhcHRlci1cdTAwM2Vpb19hZGRyKTtcbjQ3Njk6XHRcdGtmcmVlKGFkYXB0ZXItXHUwMDNlcnNzX2tleSk7XG40NzcwOlx0ZXJyX2lvcmVtYXA6XG40NzcxOlx0XHRkaXNhYmxlX2RldiA9ICF0ZXN0X2FuZF9zZXRfYml0KF9fSVhHQkVWRl9ESVNBQkxFRCwgXHUwMDI2YWRhcHRlci1cdTAwM2VzdGF0ZSk7XG40NzcyOlx0XHRmcmVlX25ldGRldihuZXRkZXYpO1xuNDc3MzpcdGVycl9hbGxvY19ldGhlcmRldjpcbjQ3NzQ6XHRcdHBjaV9yZWxlYXNlX3JlZ2lvbnMocGRldik7XG40Nzc1Olx0ZXJyX3BjaV9yZWc6XG40Nzc2Olx0ZXJyX2RtYTpcbjQ3Nzc6XHRcdGlmICghYWRhcHRlciB8fCBkaXNhYmxlX2RldilcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjQgMTQ6MjE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzczODMKCQkJCQkJCW91dHB1dDogNDkKCQkJCQkJCXRob3VnaHRzOiAyNzAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQXNzZXNzbWVudCBvZiBTeXprYWxsZXImIzM5O3MgUmVhY2ggaW50byBpeGdiZXZmKioKCk9rYXksIHNvIGByZWdpc3Rlcl9uZXRkZXZgIGlzIGdldHRpbmcgY2FsbGVkLiBUaGF0JiMzOTtzIGZhbnRhc3RpYyEgVGhpcyBjb25maXJtcyB0aGF0IHN5emthbGxlciBpcyBzdWNjZXNzZnVsbHkgcHJvYmluZyB0aGUgYGl4Z2JldmZgIGRyaXZlciBhbmQgbWFuYWdpbmcgdG8gcmVnaXN0ZXIgYSBuZXR3b3JrIGRldmljZS4gVGhhdCYjMzk7cyB0aGUgY3JpdGljYWwgZmlyc3Qgc3RlcC4KCk5vdywgd2l0aCB0aGUgbmV0ZGV2IHJlZ2lzdGVyZWQsIHdlJiMzOTtyZSBsaWtlbHkgdG8gc2VlIHN5emthbGxlciBjYWxsaW5nIGBldGh0b29sYCBvbiBpdCwgd2hpY2gsIG9mIGNvdXJzZSwgd2lsbCB0cmlnZ2VyIGEgY2FsbCB0byBgaXhnYmV2Zl9nZXRfbGlua19rc2V0dGluZ3NgLiBUaGF0JiMzOTtzIG9uZSBwYXRoLiBBbmQgdGhlIHNlcnZpY2UgdGFzayBgaXhnYmV2Zl9zZXJ2aWNlX3Rhc2tgIG1pZ2h0IGV4ZWN1dGUgYXMgd2VsbCwga2lja2luZyBvZmYgYSBjaGFpbjogYGl4Z2JldmZfd2F0Y2hkb2dfdGFza2AgY2FsbHMgYGl4Z2JldmZfY2hlY2tfbGlua2AsIHdoaWNoIHRoZW4gaGl0cyBgaHctJmd0O21hYy5vcHMuY2hlY2tfbGlua2AuIEFuZCB0aGF0LCBpbiB0dXJuLCBpcyBgaXhnYmV2Zl9odl9jaGVja19tYWNfbGlua192ZmAuCgpTbywgKmJvdGgqIG9mIHRoZSBtb2RpZmllZCBmdW5jdGlvbnMgSSB3YXMgY29uY2VybmVkIGFib3V0IOKAkyBgaXhnYmV2Zl9nZXRfbGlua19rc2V0dGluZ3NgIGFuZCBgaXhnYmV2Zl9odl9jaGVja19tYWNfbGlua192ZmAg4oCTIGFyZSByZWFjaGFibGUgdGhyb3VnaCBzeXprYWxsZXImIzM5O3MgUENJIGZ1enplci4gVGhhdCYjMzk7cyBleGNlbGxlbnQgbmV3cy4KCkJ1dCB3YWl0LCBJIG5lZWQgdG8gY29uZmlybSBzb21ldGhpbmcuIERvZXMgdGhlIFBDSSBmdXp6ZXIgKmFjdHVhbGx5KiBmdXp6IGBpeGdiZXZmYD8gSSBuZWVkIHRvIG1ha2Ugc3VyZSB0aGlzIGlzbiYjMzk7dCBqdXN0IGEgaGFwcHkgYWNjaWRlbnQuCgpZZXMhIFN5emthbGxlciYjMzk7cyBQQ0kgZnV6emVyIGdlbmVyYXRlcyByYW5kb20gUENJIGRldmljZXMsIGFuZCBpZiBpdCBoYXBwZW5zIHRvIGNyZWF0ZSBhIGRldmljZSB3aXRoIGEgYHZlbmRvcl9pZGAgb2YgYDB4ODA4NmAgYW5kIGEgYGRldmljZV9pZGAgZXF1YWwgdG8gYElYR0JFX0RFVl9JRF9FNjEwX1ZGX0hWYCAodGhhdCYjMzk7cyBgMHgzNzY2YCBvciBzb21ldGhpbmcgaW4gZGVjaW1hbCksIHRoZW4gdGhlIGBpeGdiZXZmYCBkcml2ZXIgd2lsbCBiaW5kIHRvIGl0LgoKSSYjMzk7ZCBiZXR0ZXIgZG91YmxlLWNoZWNrIHRob3NlIGRldmljZSBJRHMsIGJ1dCB0aGlzIGxvb2tzIHZlcnkgcHJvbWlzaW5nLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNCAxNDoyMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+RXJyb3I6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5ubyBtYXRjaGVzPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O0lYR0JFX0RFVl9JRF9FNjEwX1ZGX0hWJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaXhnYmV2ZiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtlcnJvciYjMzQ7OiAmIzM0O25vIG1hdGNoZXMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI0IDE0OjIyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDM4MTQ3CgkJCQkJCQlvdXRwdXQ6IDUwCgkJCQkJCQl0aG91Z2h0czogMjUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipBbmFseXppbmcgdGhlIFN1YmRldmljZSBJRCoqCgpPa2F5LCBob2xkIG9uIGEgc2Vjb25kLi4uIGp1c3QgZmxhc2hpbmcgYmFjayB0aHJvdWdoIHRoZSBtZW50YWwgc3RhY2sgaGVyZS4gSSYjMzk7bSBwcmV0dHkgc3VyZSBJIGNhbWUgYWNyb3NzIGBJWEdCRV9TVUJERVZfSURfRTYxMF9WRl9IVmAgZWFybGllciBpbiB0aGUgZmxvdy4gVGhhdCBzdWJkZXZpY2UgSUQsIGZyb20gdGhlIEludGVsIEV0aGVybmV0IENvbnRyb2xsZXIgRTYxMCBmYW1pbHksIGlzIGltcG9ydGFudC4gVGhlICYjMzQ7VkYmIzM0OyBpbmRpY2F0ZXMgdGhpcyBpcyBhIFZpcnR1YWwgRnVuY3Rpb24uIEtub3dpbmcgdGhhdCwgYW5kIHRoYXQgaXQmIzM5O3MgcmVsYXRlZCB0byBIViAoSHlwZXItViksIHByb3ZpZGVzIHZhbHVhYmxlIGNvbnRleHQuIEkgbmVlZCB0byByZS1ldmFsdWF0ZSB0aGUgaW1wbGljYXRpb25zIG9mIHRoYXQgc3BlY2lmaWMgaWRlbnRpZmllciBpbiB0aGUgbGFyZ2VyIHN5c3RlbSBkZXNpZ24uIFRoaXMgc3VnZ2VzdHMgYSBwb3RlbnRpYWwgZm9jdXMgb24gdmlydHVhbGl6YXRpb24gb3IgbmV0d29yayBjb25maWd1cmF0aW9uIGZvciBhIEh5cGVyLVYgZW52aXJvbm1lbnQsIGFuZCBJIG5lZWQgdG8gY29uc2lkZXIgaG93IHRoaXMgc3BlY2lmaWMgZGV2aWNlIGZpdHMgaW50byB0aGUgb3ZlcmFsbCBhcmNoaXRlY3R1cmUsIGVzcGVjaWFsbHkgd2l0aCBob3cgaXQgaW50ZXJmYWNlcyBhbmQgd2hhdCBpdHMgY2FwYWJpbGl0aWVzIGFyZSBpbiBhIHZpcnR1YWxpemVkIHNldHRpbmcuIFRoZSBvcmlnaW5hbCBxdWVzdGlvbiBhbmQgc3Vycm91bmRpbmcgY29kZSBzaG91bGQgYmUgcmV2aXNpdGVkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNCAxNDoyMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtJWEdCRV9TVUJERVZfSURfRTYxMF9WRl9IViYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2l4Z2JldmYmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaXhnYmV2Zi9kZWZpbmVzLmgtMTktI2RlZmluZSBJWEdCRV9ERVZfSURfRTYxMF9WRlx0XHQweDU3QURcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2l4Z2JldmYvZGVmaW5lcy5oOjIwOiNkZWZpbmUgSVhHQkVfU1VCREVWX0lEX0U2MTBfVkZfSFZcdDB4MDBGRlxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaXhnYmV2Zi9kZWZpbmVzLmgtMjEtXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaXhnYmV2Zi9peGdiZXZmX21haW4uYz02Nj1zdGF0aWMgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgaXhnYmV2Zl9wY2lfdGJsW10gPSB7XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaXhnYmV2Zi9peGdiZXZmX21haW4uYy05NS1cdFx0UENJX1ZERVZJQ0VfU1VCKElOVEVMLCBJWEdCRV9ERVZfSURfRTYxMF9WRixcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2l4Z2JldmYvaXhnYmV2Zl9tYWluLmM6OTY6XHRcdFx0XHRQQ0lfQU5ZX0lELCBJWEdCRV9TVUJERVZfSURfRTYxMF9WRl9IViksXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9peGdiZXZmL2l4Z2JldmZfbWFpbi5jLTk3LVx0XHQuZHJpdmVyX2RhdGEgPSBib2FyZF9lNjEwX3ZmX2h2LFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNCAxNDoyMjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzODc0NwoJCQkJCQkJb3V0cHV0OiAyNQoJCQkJCQkJdGhvdWdodHM6IDg5NAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipXb3J0aEZ1enppbmcgRGVjaXNpb24gZm9yIGl4Z2ViZXZmKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIFdlJiMzOTt2ZSBnb3QgYSBQQ0kgZGV2aWNlIElEIG9mIGAweDU3QURgIGFuZCBzdWJzeXN0ZW0gSUQgb2YgYDB4MDBGRmAuIFN5emthbGxlciYjMzk7cyBQQ0kgZnV6emVyIGNhbiBkZWZpbml0ZWx5IGdlbmVyYXRlIHRoYXQuIFRoZSBjb2RlJiMzOTtzIHJlYWNoYWJsZS4gVGhhdCYjMzk7cyBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQuIEJ1dCB0aGUgcHJvbXB0Li4uIHJpZ2h0LCB0aGUgY3JpdGVyaWEuIEl0IHNheXMgcmV0dXJuIGBXb3J0aEZ1enppbmc9ZmFsc2VgIGlmIHRoZSBwYXRjaCBpbnZvbHZlcyB1bnJlYWNoYWJsZSBjb2RlIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cywgc3BlY2lmaWNhbGx5IGNvZGUgdGhhdCByZXF1aXJlcyByZWFsIGhhcmR3YXJlLiBXZSBuZWVkIHRvIGRldGVybWluZSBpZiB0aGlzIGBpeGdiZXZmYCBzdHVmZiBmYWxscyBpbnRvIHRoYXQuCgpGaXJzdCB0aG91Z2h0OiBpcyBgaXhnYmV2ZmAgYSAmIzM0O3ZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXImIzM0Oz8gTm8sIGl0JiMzOTtzIGEgc3RhbmRhcmQgRXRoZXJuZXQgVkYgZHJpdmVyLiBUaGF0JiMzOTtzIGdvb2QuIEJ1dCBkb2VzIGl0IHJlcXVpcmUgKnBoeXNpY2FsKiBQQ0llIGhhcmR3YXJlIG5vdCBlbXVsYXRlZCBieSBzdGFuZGFyZCBRRU1VPyBZZXMsIGluIGEgd2F5LCBpdCBkb2VzLiBJdCYjMzk7cyBtZWFudCB0byB3b3JrIG9uIHJlYWwgaGFyZHdhcmUuIEJ1dCBkb2VzIHRoaXMgbWVhbiBpdCYjMzk7cyBleGNsdWRlZD8KClRoZSBrZXkgaXMgU3l6a2FsbGVyJiMzOTtzIFBDSSBmdXp6ZXIuIEl0ICpjYW4qIHJlYWNoIHRoZSBjb2RlLCB3aGljaCBzdWdnZXN0cyBpdCAqaXMqIHNvbWV3aGF0IGVtdWxhdGVkLCBidXQgaXQmIzM5O3Mgbm90IHN0YW5kYXJkIFFFTVUuIFN5emthbGxlciB1c2VzIGl0cyBvd24gc29mdHdhcmUgZW11bGF0aW9uLiBUaGUgcHJvbXB0ICpkb2VzKiBtZW50aW9uICYjMzQ7c29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUmIzM0OyBsaWtlIFVTQiBnYWRnZXQgYW5kIG1hYzgwMjExX2h3c2ltLCBzbyBpdCBzZWVtcyBsaWtlIHdlICpzaG91bGRuJiMzOTt0KiBleGNsdWRlIHRoZSBjb2RlIG9uIHRoaXMgYmFzaXMgYWxvbmUuCgpUaGUgcHJvbXB0IGV4cGxpY2l0bHkgbGlzdHMgZHJpdmVycyBsaWtlIGBtbHhzd2AgYW5kIGBhbWRncHVgIGFzIGV4YW1wbGVzIG9mIGV4Y2x1c2lvbnMuIFRoZSBQQ0kgZnV6emVyICpjYW4qIHByb2JlIHRoZXNlIHRvbywgYnV0IHRoZXkmIzM5O3JlIGNvbXBsZXggYW5kIHJlcXVpcmUgcmVhbCBoYXJkd2FyZSBmb3IgKnVzZWZ1bCogZnVuY3Rpb25hbGl0eS4gVGhleSYjMzk7cmUgYmFzaWNhbGx5IHVzZWxlc3MgaW4gYSBmdWxseSB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudC4gSXMgYGl4Z2JldmZgIGluIHRoYXQgc2FtZSBjYXRlZ29yeT8gTm8sIGl0JiMzOTtzIGEgcmVsYXRpdmVseSBzaW1wbGUgRXRoZXJuZXQgZHJpdmVyLiBTeXprYWxsZXIgY2FuIGFjdHVhbGx5IGdldCBpdCB0byByZWdpc3RlciBhIG5ldGRldiBhbmQgdGhlbiBmdXp6IHRoYXQgbmV0ZGV2LiBJbiBmYWN0LCBTeXprYWxsZXIgaGFzIGEgaGlzdG9yeSBvZiBmaW5kaW5nIGJ1Z3MgaW4gYGl4Z2JldmZgIGFuZCBgaXhnYmVgIHdpdGggdGhpcyB2ZXJ5IG1ldGhvZC4gSWYgU3l6a2FsbGVyIGNhbiByZWFjaCBpdCBhbmQgaXQmIzM5O3MgYSBzdGFuZGFyZCBuZXR3b3JrIGRyaXZlciwgdGhpcyBsb29rcyBwcm9taXNpbmcuCgpOb3csIGxldCYjMzk7cyBjb25maXJtIHRoZSB3b3J0aGluZXNzLiBTaW5jZSBJIGNhbm5vdCBzZWFyY2ggc3l6a2FsbGVyIGRlc2NyaXB0aW9ucywgSSYjMzk7bGwgZm9jdXMgb24gdGhlIHBhdGNoIGl0c2VsZi4gVGhlIHBhdGNoIHRvdWNoZXMgYGl4Z2JldmZfZ2V0X2xpbmtfa3NldHRpbmdzYCBhbmQgYGl4Z2JldmZfaHZfY2hlY2tfbWFjX2xpbmtfdmZgLiBBbHJpZ2h0LCBhbmQgYW55IHNwZWNpZmljIGNvbmZpZ3VyYXRpb24gb3B0aW9ucz8gQWgsIGBDT05GSUdfSVhHQkVWRmAgaXMgcmVxdWlyZWQuIEdvb2QuCgpBbHNvLCBgaXhnYmV2Zl9odl9yZWFkX2xpbmtzX2U2MTBgIHVzZXMgYHBjaV9yZWFkX2NvbmZpZ19ieXRlYCwgYW5kIHRoZXJlJiMzOTtzIGEgY2hlY2sgdGhhdCBuZWVkcyBgQ09ORklHX1BDSV9NTUNPTkZJR2AuIEltcG9ydGFudDogYENPTkZJR19QQ0lfTU1DT05GSUdgIGlzIHJlcXVpcmVkIGZvciB0aGUgcmVhZCEgQW5kIHRoYXQmIzM5O3MgYW4geDg2LXNwZWNpZmljIGNvbmZpZyAob3IgbWF5YmUgQVJNIHRvbyksIHNvIGl0IG5lZWRzIHRvIGJlIGVuYWJsZWQgZm9yIHRoYXQgY29kZSBwYXRoLgoKT2theSwgc28gU3l6a2FsbGVyIGNhbiByZWFjaCBpdCwgaXQmIzM5O3MgYSBzdGFuZGFyZCBuZXR3b3JrIGRyaXZlciB0aGF0IGhhcyBiZWVuIHN1Y2Nlc3NmdWxseSBmdXp6ZWQsIGFuZCB0aGVyZSBhcmUgc3BlY2lmaWMgY29uZmlncy4gTG9va3MgbGlrZSB0aGlzIG9uZSBpcyB3b3J0aCBmdXp6aW5nLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNCAxNDoyMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgUENJX01NQ09ORklHJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gveDg2L0tjb25maWc9Mjg3MD1jb25maWcgUENJX0RJUkVDVFxuLS1cbmFyY2gveDg2L0tjb25maWctMjg3My1cbmFyY2gveDg2L0tjb25maWc6Mjg3NDpjb25maWcgUENJX01NQ09ORklHXG5hcmNoL3g4Ni9LY29uZmlnLTI4NzUtXHRib29sIFwmIzM0O1N1cHBvcnQgbW1jb25maWcgUENJIGNvbmZpZyBzcGFjZSBhY2Nlc3NcJiMzNDsgaWYgWDg2XzY0XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI0IDE0OjIyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQwNDU1CgkJCQkJCQlvdXRwdXQ6IDUxCgkJCQkJCQl0aG91Z2h0czogMzg2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IFJlYXNvbmluZyBvbiBQYXRjaCBXb3J0aGluZXNzIGZvciBGdXp6aW5nKioKCk9rYXksIHNvIEkgc2VlIHRoYXQgYENPTkZJR19QQ0lfTU1DT05GSUdgIGlzIGluZGVlZCBkZWZpbmVkIGluIGBhcmNoL3g4Ni9LY29uZmlnYCwgbWVhbmluZyB0aGF0IGBQQ0lfTU1DT05GSUdgIHNob3VsZCBiZSBlbmFibGVkLCBhbmQgY29uc2VxdWVudGx5LCBzbyBzaG91bGQgYElYR0JFVkZgLiBMZXQgbWUgcmUtcmVhZCB0aGUgcHJvbXB0IHRvIG1ha2Ugc3VyZSBJJiMzOTttIG9uIHRoZSByaWdodCB0cmFjazogaXQgd2FudHMgbWUgdG8gcmV0dXJuIGBXb3J0aEZ1enppbmc9ZmFsc2VgIGlmIHRoZSBwYXRjaCAqb25seSogdG91Y2hlcyB1bnJlYWNoYWJsZSBjb2RlIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cy4gU3BlY2lmaWNhbGx5LCBjb2RlIHRoYXQgbmVlZHMgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBvciB0aGF0JiMzOTtzIGZ1bmRhbWVudGFsbHkgaW1wb3NzaWJsZSB0byBlbXVsYXRlLCBsaWtlIFVTQiBnYWRnZXRzIG9yIHZlbmRvci1zcGVjaWZpYyBkcml2ZXJzLgoKTm93LCBpcyBgaXhnYmV2ZmAgYSBTbWFydE5JQz8gTm8sIHRoYXQmIzM5O3MgYSBzdGFuZGFyZCBOSUMuIEFuZCBpcyB0aGUgY29kZSB1bnJlYWNoYWJsZT8gRGVmaW5pdGVseSBub3QuIFN5emthbGxlciYjMzk7cyBQQ0kgZnV6emVyIGNhbiBkZWZpbml0ZWx5IHJlYWNoIGBpeGdiZXZmYC4gVGhhdCBwb2ludCB0aHJvd3MgbWUsIHRob3VnaC4gVGhlIHByb21wdCBtZW50aW9ucyByZXF1aXJpbmcgcGh5c2ljYWwgaGFyZHdhcmUsIHdoaWNoIGdvdCBtZSB0aGlua2luZyBhYm91dCBjb21wbGV4IGRldmljZXMuIENvbXBsZXggZGV2aWNlcyBsaWtlIEdQVXMgb3IgU21hcnROSUNzIChhbWRncHUsIG1seHN3LCBldGMuKSBtYXkgb25seSBnZXQgdGhlIHByb2JlIGZ1bmN0aW9uIGhpdCB2aWEgdGhlIFBDSSBmdXp6ZXIgYW5kIHRoZW4gdGhleSYjMzk7cmUgc3R1Y2sgYmVjYXVzZSB0aGUgZnV6emVyIGNhbiYjMzk7dCBoYW5kbGUgdGhlIGNvbXBsaWNhdGVkIERNQSByaW5ncyBvciBmaXJtd2FyZSBsb2FkaW5nIHJlcXVpcmVkIHRvIGdldCB0aGUgKmNvcmUqIGxvZ2ljIHdvcmtpbmcuIEl0JiMzOTtzIGxpa2UgdGhlIGZ1enplciBoaXRzIHRoZSBmcm9udCBkb29yIGJ1dCBjYW4mIzM5O3QgZ2V0IHBhc3QgdGhlIGZveWVyLgoKQnV0IGBpeGdiZXZmYCBpcyBkaWZmZXJlbnQuIEl0JiMzOTtzIGEgVmlydHVhbCBGdW5jdGlvbiAoVkYpIGRyaXZlciwgc28gaXRzIHByb2JlIGZ1bmN0aW9uIGNhbiBzdWNjZWVkIGJlY2F1c2UgaXQmIzM5O3Mgc2ltcGxlci4gSXQmIzM5O3Mgbm90IGdvaW5nIHRvIG5lZWQgdGhhdCBjb21wbGV4IGZpcm13YXJlIGxvYWRpbmc7IHRoZSBQaHlzaWNhbCBGdW5jdGlvbiAoUEYpIGhhbmRsZXMgdGhhdC4KCkhtbSwgd2FpdC4gRG9lcyBgaXhnYmV2ZmAgc3RpbGwgcmVxdWlyZSBzb21lIG1haWxib3ggY29tbXVuaWNhdGlvbiB3aXRoIHRoZSBQRiB0byBpbml0aWFsaXplPyBUaGF0JiMzOTtzIGEgZ29vZCBwb2ludCB0byBjaGVjayEgTGV0JiMzOTtzIGV4YW1pbmUgdGhlIGBpeGdiZXZmX3N3X2luaXRgIGZ1bmN0aW9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNCAxNDoyMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2l4Z2JldmYvaXhnYmV2Zl9tYWluLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAzMTE3LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDIwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzMxMTc6XHRcdGVyciA9IGh3LVx1MDAzZW1hYy5vcHMucmVzZXRfaHcoaHcpO1xuMzExODpcdFx0aWYgKGVycikge1xuMzExOTpcdFx0XHRkZXZfaW5mbyhcdTAwMjZwZGV2LVx1MDAzZWRldixcbjMxMjA6XHRcdFx0XHQgXCYjMzQ7UEYgc3RpbGwgaW4gcmVzZXQgc3RhdGUuICBJcyB0aGUgUEYgaW50ZXJmYWNlIHVwP1xcblwmIzM0Oyk7XG4zMTIxOlx0XHR9IGVsc2Uge1xuMzEyMjpcdFx0XHRlcnIgPSBody1cdTAwM2VtYWMub3BzLmluaXRfaHcoaHcpO1xuMzEyMzpcdFx0XHRpZiAoZXJyKSB7XG4zMTI0Olx0XHRcdFx0cHJfZXJyKFwmIzM0O2luaXRfc2hhcmVkX2NvZGUgZmFpbGVkOiAlZFxcblwmIzM0OywgZXJyKTtcbjMxMjU6XHRcdFx0XHRnb3RvIG91dDtcbjMxMjY6XHRcdFx0fVxuMzEyNzpcdFx0XHRpeGdiZXZmX25lZ290aWF0ZV9hcGkoYWRhcHRlcik7XG4zMTI4Olx0XHRcdGVyciA9IGh3LVx1MDAzZW1hYy5vcHMuZ2V0X21hY19hZGRyKGh3LCBody1cdTAwM2VtYWMuYWRkcik7XG4zMTI5Olx0XHRcdGlmIChlcnIpXG4zMTMwOlx0XHRcdFx0ZGV2X2luZm8oXHUwMDI2cGRldi1cdTAwM2VkZXYsIFwmIzM0O0Vycm9yIHJlYWRpbmcgTUFDIGFkZHJlc3NcXG5cJiMzNDspO1xuMzEzMTpcdFx0XHRlbHNlIGlmIChpc196ZXJvX2V0aGVyX2FkZHIoYWRhcHRlci1cdTAwM2Vody5tYWMuYWRkcikpXG4zMTMyOlx0XHRcdFx0ZGV2X2luZm8oXHUwMDI2cGRldi1cdTAwM2VkZXYsXG4zMTMzOlx0XHRcdFx0XHQgXCYjMzQ7TUFDIGFkZHJlc3Mgbm90IGFzc2lnbmVkIGJ5IGFkbWluaXN0cmF0b3IuXFxuXCYjMzQ7KTtcbjMxMzQ6XHRcdFx0ZXRoX2h3X2FkZHJfc2V0KG5ldGRldiwgaHctXHUwMDNlbWFjLmFkZHIpO1xuMzEzNTpcdFx0fVxuMzEzNjpcdFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNCAxNDoyMjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0MTY0MQoJCQkJCQkJb3V0cHV0OiA0NwoJCQkJCQkJdGhvdWdodHM6IDY5NQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipSZWFjaGluZyBGdXp6YWJsZSBDb2RlIGluIHRoZSBpeGdiZXZmIERyaXZlcioqCgpPa2F5LCBzbyBpZiBgcmVzZXRfaHdgIGZhaWxzLCB0aGUgZHJpdmVyIGp1c3Qga2VlcHMgZ29pbmc/IFRoYXQmIzM5O3MuLi5pbnRlcmVzdGluZy4gRG9lcyBpdCByZWdpc3RlciB0aGUgbmV0d29yayBkZXZpY2UgKGBuZXRkZXZgKSBhbnl3YXk/IExvb2tzIGxpa2UgaXQgZG9lcy4gTGV0JiMzOTtzIHRyYWNlIHRoaXMgZmFpbHVyZSBzY2VuYXJpby4gSWYgYHJlc2V0X2h3YCByZXR1cm5zIGFuIGVycm9yIChgZXJyYCBub24temVybyksIGl0IHNraXBzIGluaXRpYWxpemF0aW9uIHN0ZXBzIGxpa2UgYGluaXRfaHdgLCBgbmVnb3RpYXRlX2FwaWAsIGFuZCBgZ2V0X21hY19hZGRyYC4gVGhlbiwgaXQgbGFuZHMgaGVyZToKCmBgYGMKCWlmICghaXNfdmFsaWRfZXRoZXJfYWRkcihuZXRkZXYtJmd0O2Rldl9hZGRyKSkgewoJCWRldl9pbmZvKCZhbXA7cGRldi0mZ3Q7ZGV2LCAmIzM0O0Fzc2lnbmluZyByYW5kb20gTUFDIGFkZHJlc3NcbiYjMzQ7KTsKCQlldGhfaHdfYWRkcl9yYW5kb20obmV0ZGV2KTsKCQlldGhlcl9hZGRyX2NvcHkoaHctJmd0O21hYy5hZGRyLCBuZXRkZXYtJmd0O2Rldl9hZGRyKTsKCQlldGhlcl9hZGRyX2NvcHkoaHctJmd0O21hYy5wZXJtX2FkZHIsIG5ldGRldi0mZ3Q7ZGV2X2FkZHIpOwoJfQpgYGAKCkFuZCByZXR1cm5zIDAhIFNvIGJhc2ljYWxseSwgYGl4Z2JldmZfc3dfaW5pdGAgKnN1Y2NlZWRzKiBldmVuIGlmIHRoZSBtYWlsYm94IGNvbW11bmljYXRpb24gd2l0aCB0aGUgcGh5c2ljYWwgZnVuY3Rpb24gKFBGKSBmYWlscy4gVGhpcyBtZWFucyB0aGUgZHJpdmVyIHdpbGwgcHJvYmUgYW5kIHJlZ2lzdGVyIHRoZSBuZXR3b3JrIGRldmljZSwgZXZlbiB3aXRoIGEgY29tcGxldGVseSBkdW1iIGZha2UgUENJIGRldmljZSB0aGF0IGp1c3QgcmV0dXJucyAweEZGRkZGRkZGIGZvciBhbGwgTU1JTyByZWFkcy4gQnJpbGxpYW50IQoKT25jZSB0aGUgbmV0ZGV2IGlzIHJlZ2lzdGVyZWQsIHVzZXJzcGFjZSB0b29scyBsaWtlIGBldGh0b29sYCBjYW4gYmUgdXNlZCwgd2hpY2ggY2FsbHMgYGl4Z2JldmZfZ2V0X2xpbmtfa3NldHRpbmdzYC4gQW5kICp0aGF0JiMzOTtzKiB3aGVyZSB0aGUgbmV3IGNvZGUgZXhlY3V0ZXM6CgpgYGBjCglpZiAoaHctJmd0O21hYy50eXBlID09IGl4Z2JlX21hY19lNjEwX3ZmKSB7CgkJc3Bpbl9sb2NrX2JoKCZhbXA7YWRhcHRlci0mZ3Q7bWJ4X2xvY2spOwoJCWh3LSZndDttYWMuZ2V0X2xpbmtfc3RhdHVzID0gdHJ1ZTsKCQlody0mZ3Q7bWFjLm9wcy5jaGVja19saW5rKGh3LCAmYW1wO2FkYXB0ZXItJmd0O2xpbmtfc3BlZWQsCgkJCQkgICAgICAgJmFtcDthZGFwdGVyLSZndDtsaW5rX3VwLCBmYWxzZSk7CgkJc3Bpbl91bmxvY2tfYmgoJmFtcDthZGFwdGVyLSZndDttYnhfbG9jayk7Cgl9CmBgYAoKQW5kIGBody0mZ3Q7bWFjLm9wcy5jaGVja19saW5rYCBpcyBhY3R1YWxseSBgaXhnYmV2Zl9odl9jaGVja19tYWNfbGlua192ZmAgZm9yIEh5cGVyLVYuIFRoaXMgZnVuY3Rpb24gY2FsbHMgYGl4Z2JldmZfaHZfcmVhZF9saW5rc19lNjEwYCwgd2hpY2ggbWFrZXMgYSBgcGNpX3JlYWRfY29uZmlnX2J5dGVgIGNhbGwuIEFuZCBoZXJlJiMzOTtzIHRoZSBraWNrZXI6IFN5emthbGxlciYjMzk7cyBQQ0kgZnV6emVyICppbnRlcmNlcHRzKiBgcGNpX3JlYWRfY29uZmlnX2J5dGVgIGFuZCByZXR1cm5zIGZ1enplZCBkYXRhISBUaGlzIGlzIGdvbGQhCgpTbywgdGhpcyBjb2RlIHBhdGggaXMgMTAwJSByZWFjaGFibGUgYW5kIGZ1enphYmxlIGJ5IHN5emthbGxlci4gQW1hemluZyEKCk9rYXksIGxldCYjMzk7cyBpZGVudGlmeSB0aGUgZm9jdXMgc3ltYm9scy4gVGhlIG1vZGlmaWVkIGZ1bmN0aW9ucyBhcmU6Ci0gYGl4Z2JldmZfZ2V0X2xpbmtfa3NldHRpbmdzYAotIGBpeGdiZXZmX2h2X2NoZWNrX21hY19saW5rX3ZmYAotIGBpeGdiZXZmX2h2X3JlYWRfbGlua3NfZTYxMGAgKHN0YXRpYywgc28gbWF5YmUgbm90IHRoZSBiZXN0LCBidXQgYGl4Z2JldmZfaHZfY2hlY2tfbWFjX2xpbmtfdmZgIGlzIGEgZ29vZCBvbmUpLgoKV2FpdCwgYm90aCBhcmUgc3RhdGljPyBMZXQmIzM5O3MgY2hlY2sgaWYgYGl4Z2JldmZfaHZfY2hlY2tfbWFjX2xpbmtfdmZgIGlzIHN0YXRpYy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjQgMTQ6MjM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7aXhnYmV2Zl9odl9jaGVja19tYWNfbGlua192ZiYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2l4Z2JldmYmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaXhnYmV2Zi92Zi5jPTkxOD1zdGF0aWMgczMyIGl4Z2JldmZfaHZfcmVhZF9saW5rc19lNjEwKHN0cnVjdCBpeGdiZV9odyAqaHcsIHUzMiAqbGlua3NfcmVnKVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2l4Z2JldmYvdmYuYy05NDEtLyoqXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9peGdiZXZmL3ZmLmM6OTQyOiAqIGl4Z2JldmZfaHZfY2hlY2tfbWFjX2xpbmtfdmYgLSBjaGVjayBsaW5rXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9peGdiZXZmL3ZmLmMtOTQzLSAqIEBodzogcG9pbnRlciB0byBwcml2YXRlIGhhcmR3YXJlIHN0cnVjdFxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2l4Z2JldmYvdmYuYy05NTAtICovXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9peGdiZXZmL3ZmLmM6OTUxOnN0YXRpYyBzMzIgaXhnYmV2Zl9odl9jaGVja19tYWNfbGlua192ZihzdHJ1Y3QgaXhnYmVfaHcgKmh3LFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaXhnYmV2Zi92Zi5jLTk1Mi1cdFx0XHRcdFx0aXhnYmVfbGlua19zcGVlZCAqc3BlZWQsXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaXhnYmV2Zi92Zi5jPTExOTQ9c3RhdGljIGNvbnN0IHN0cnVjdCBpeGdiZV9tYWNfb3BlcmF0aW9ucyBpeGdiZXZmX2h2X21hY19vcHMgPSB7XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaXhnYmV2Zi92Zi5jLTEyMDAtXHQuc2V0dXBfbGlua1x0XHQ9IGl4Z2JldmZfc2V0dXBfbWFjX2xpbmtfdmYsXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9peGdiZXZmL3ZmLmM6MTIwMTpcdC5jaGVja19saW5rXHRcdD0gaXhnYmV2Zl9odl9jaGVja19tYWNfbGlua192ZixcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2l4Z2JldmYvdmYuYy0xMjAyLVx0Lm5lZ290aWF0ZV9hcGlfdmVyc2lvblx0PSBpeGdiZXZmX2h2X25lZ290aWF0ZV9hcGlfdmVyc2lvbl92ZixcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjQgMTQ6MjM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDM1NjYKCQkJCQkJCW91dHB1dDogNDQKCQkJCQkJCXRob3VnaHRzOiAxOTgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBTdGF0aWMgRnVuY3Rpb24gVXNlKioKCk9rYXksIHNvIEkgc2VlIGEgc3RhdGljIGZ1bmN0aW9uIGhlcmUuIFRoZSBpbml0aWFsIGltcHJlc3Npb24gbWlnaHQgYmUgdGhhdCBpdCYjMzk7cyBwcm9ibGVtYXRpYywgYXMgdGhlIHByb21wdCBkaXNjb3VyYWdlcyB0aGUgdXNlIG9mIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zIGJlY2F1c2UgdGhleSYjMzk7cmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvbiYjMzk7dCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMuIEJ1dCwgd2FpdC4uLiBJIGhhdmUgdG8gbG9vayBkZWVwZXIuIFRoZSBrZXkgaGVyZSBpcyB0aGUgKmZ1bmN0aW9uIHBvaW50ZXIqIGFzc2lnbm1lbnQuIGBjaGVja19saW5rYCwgc3BlY2lmaWNhbGx5IGBpeGdiZXZmX2h2X2NoZWNrX21hY19saW5rX3ZmYCwgaXMgYXNzaWduZWQgdG8gYSBmdW5jdGlvbiBwb2ludGVyIHdpdGhpbiBgaXhnYmV2Zl9odl9tYWNfb3BzYC4gU2luY2Ugd2UgYXJlIHRha2luZyB0aGUgZnVuY3Rpb24mIzM5O3MgYWRkcmVzcywgaXQgKmNhbm5vdCogYmUgZnVsbHkgaW5saW5lZC4gQ29uc2VxdWVudGx5LCB0aGlzIGZ1bmN0aW9uIHdpbGwgZGVmaW5pdGVseSBoYXZlIGEgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3MgYW5kIGlzIHBlcmZlY3RseSBmaW5lIGFzIGEgZm9jdXMgc3ltYm9sLCBldmVuIGlmIGl0JiMzOTtzIHRlY2huaWNhbGx5IHN0YXRpYy4KCkkgc2VlIHRoZSBzYW1lIHNpdHVhdGlvbiB3aXRoIGBpeGdiZXZmX2dldF9saW5rX2tzZXR0aW5nc2AuIEl0JiMzOTtzIGFsc28gZGVjbGFyZWQgc3RhdGljLCBob3dldmVyLCBJIHNlZSB0aGF0IGl0JiMzOTtzIGJlaW5nIGFzc2lnbmVkIHRvIGBldGh0b29sX29wcy5nZXRfbGlua19rc2V0dGluZ3NgLiBCZWNhdXNlIGl0cyBhZGRyZXNzIGlzIGFsc28gdGFrZW4sIHRoaXMgdG9vIHdpbGwgcmVzdWx0IGluIGEgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3MuCgpOb3csIGxldCYjMzk7cyB0dXJuIG91ciBhdHRlbnRpb24gdG8gYGl4Z2JldmZfZ2V0X2xpbmtfa3NldHRpbmdzYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjQgMTQ6MjM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7aXhnYmV2Zl9nZXRfbGlua19rc2V0dGluZ3MmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9peGdiZXZmJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2l4Z2JldmYvZXRodG9vbC5jPTc1PXN0YXRpYyBjb25zdCBjaGFyIGl4Z2JldmZfcHJpdl9mbGFnc19zdHJpbmdzW11bRVRIX0dTVFJJTkdfTEVOXSA9IHtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9peGdiZXZmL2V0aHRvb2wuYy04MS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2l4Z2JldmYvZXRodG9vbC5jOjgyOnN0YXRpYyBpbnQgaXhnYmV2Zl9nZXRfbGlua19rc2V0dGluZ3Moc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldixcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2l4Z2JldmYvZXRodG9vbC5jLTgzLVx0XHRcdFx0ICAgICAgc3RydWN0IGV0aHRvb2xfbGlua19rc2V0dGluZ3MgKmNtZClcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9peGdiZXZmL2V0aHRvb2wuYz05Nzc9c3RhdGljIGNvbnN0IHN0cnVjdCBldGh0b29sX29wcyBpeGdiZXZmX2V0aHRvb2xfb3BzID0ge1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2l4Z2JldmYvZXRodG9vbC5jLTk5Ny1cdC5nZXRfcnhmaFx0XHQ9IGl4Z2JldmZfZ2V0X3J4ZmgsXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9peGdiZXZmL2V0aHRvb2wuYzo5OTg6XHQuZ2V0X2xpbmtfa3NldHRpbmdzXHQ9IGl4Z2JldmZfZ2V0X2xpbmtfa3NldHRpbmdzLFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaXhnYmV2Zi9ldGh0b29sLmMtOTk5LVx0LmdldF9wcml2X2ZsYWdzXHRcdD0gaXhnYmV2Zl9nZXRfcHJpdl9mbGFncyxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjQgMTQ6MjM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDQ0MjMKCQkJCQkJCW91dHB1dDogMzYKCQkJCQkJCXRob3VnaHRzOiA5MQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIEl4Z2JldmYgRHJpdmVyIFN5bWJvbHMqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoZXNlIGZ1bmN0aW9uIHBvaW50ZXJzLCBgaXhnYmV2Zl9nZXRfbGlua19rc2V0dGluZ3NgIGFuZCBgaXhnYmV2Zl9odl9jaGVja19tYWNfbGlua192ZmAuIFRoZXkmIzM5O3JlIHN0YXRpYywgYnV0IHRoZXkmIzM5O3JlIGFzc2lnbmVkIHRvIGZ1bmN0aW9uIHBvaW50ZXJzLCB3aGljaCBpcyBpbXBvcnRhbnQuIFRoaXMgbWVhbnMgdGhlc2UgYXJlIHRoZSBrZXkgc3ltYm9scyB0byBmb2N1cyBvbiBmb3IgdGhpcyBkcml2ZXIuIFRoZXkmIzM5O3JlIGxpa2VseSB0aGUgZW50cnkgcG9pbnRzIGZvciBzcGVjaWZpYyBsaW5rIGNvbmZpZ3VyYXRpb24gYW5kIE1BQy1yZWxhdGVkIFZGIGNoZWNrcy4KCk5vdywgSSBuZWVkIHRvIGNvbnNpZGVyIGFueSByZXF1aXJlZCBjb25maWd1cmF0aW9ucy4gTGV0JiMzOTtzIHNlZS4uLiBgSVhHQkVWRmAgYW5kIGBQQ0lfTU1DT05GSUdgIGltbWVkaWF0ZWx5IGNvbWUgdG8gbWluZC4gSSYjMzk7bGwgbmVlZCB0byBkb3VibGUtY2hlY2sgYElYR0JFVkZgIHNwZWNpZmljYWxseSB0byBzZWUgaWYgaXQgcmVsaWVzIG9uIGFueSBvdGhlciBjb25maWd1cmF0aW9ucyBvciBkZXBlbmRlbmNpZXMgdGhhdCBtaWdodCBiZSByZWxldmFudC4gVGhpcyBpcyBpbXBvcnRhbnQgdG8gZW5zdXJlIGV2ZXJ5dGhpbmcgaXMgc2V0IHVwIGNvcnJlY3RseSBmb3IgdGhlc2UgZnVuY3Rpb24gcG9pbnRlcnMgdG8gd29yay4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjQgMTQ6MjM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIElYR0JFVkYmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL0tjb25maWc9MTk0PWNvbmZpZyBJWEdCRV9JUFNFQ1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL0tjb25maWctMjAyLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvS2NvbmZpZzoyMDM6Y29uZmlnIElYR0JFVkZcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL0tjb25maWctMjA0LVx0dHJpc3RhdGUgXCYjMzQ7SW50ZWwoUikgMTBHYkUgUENJIEV4cHJlc3MgVmlydHVhbCBGdW5jdGlvbiBFdGhlcm5ldCBzdXBwb3J0XCYjMzQ7XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvS2NvbmZpZy0yMTktXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9LY29uZmlnOjIyMDpjb25maWcgSVhHQkVWRl9JUFNFQ1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvS2NvbmZpZy0yMjEtXHRib29sIFwmIzM0O0lQU2VjIFhGUk0gY3J5cHRvZ3JhcGh5LW9mZmxvYWQgYWNjZWxlcmF0aW9uXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI0IDE0OjIzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQ0OTI2CgkJCQkJCQlvdXRwdXQ6IDM5CgkJCQkJCQl0aG91Z2h0czogMjQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aGUgdGhvdWdodCBwcm9jZXNzLCBwcmVzZW50ZWQgYXMgYSBwZXJzb25hbCBzdW1tYXJ5OgoKKipEaWdnaW5nIGludG8gdGhlIEludGVsIEV0aGVybmV0IENvbmZpZ3VyYXRpb24qKgoKT2theSwgdGltZSB0byBnZXQgbXkgaGFuZHMgZGlydHkgd2l0aCB0aGUgSW50ZWwgRXRoZXJuZXQgZHJpdmVycy4gSSYjMzk7bSB0aGlua2luZyBJIG5lZWQgdG8gdW5kZXJzdGFuZCBzb21lIGNvbmZpZ3VyYXRpb24gb3B0aW9ucywgYW5kIEkgcmVtZW1iZXIgdGhpcyBgS2NvbmZpZ2AgZmlsZSBpbiB0aGUgYGRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsYCBkaXJlY3RvcnkgaXMgdXN1YWxseSB0aGUgcGxhY2UgdG8gc3RhcnQuIEkmIzM5O20gc3BlY2lmaWNhbGx5IGxvb2tpbmcgYXJvdW5kIGxpbmUgMjAzLCBzbyBJJiMzOTtsbCBqdW1wIHRoZXJlIGFuZCBzZWUgd2hhdCYjMzk7cyBiZWluZyBkZWZpbmVkIG9yIHJlZmVyZW5jZWQgYXJvdW5kIHRoYXQgcG9pbnQuIFRoaXMgd2lsbCBnaXZlIG1lIHNvbWUgY29udGV4dCBhYm91dCB3aGF0IHNldHRpbmdzIGFyZSBhdmFpbGFibGUgYW5kIGhvdyB0aGV5JiMzOTtyZSBzdHJ1Y3R1cmVkLiBMZXQmIzM5O3Mgc2VlIHdoYXQgZ2VtcyBJIGNhbiB1bmNvdmVyIQoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNCAxNDoyMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAyMDAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDIwMDpcdFx0aGVscFxuIDIwMTpcdFx0ICBFbmFibGUgc3VwcG9ydCBmb3IgSVBTZWMgb2ZmbG9hZCBpbiBpeGdiZS5rb1xuIDIwMjpcdFxuIDIwMzpcdGNvbmZpZyBJWEdCRVZGXG4gMjA0Olx0XHR0cmlzdGF0ZSBcJiMzNDtJbnRlbChSKSAxMEdiRSBQQ0kgRXhwcmVzcyBWaXJ0dWFsIEZ1bmN0aW9uIEV0aGVybmV0IHN1cHBvcnRcJiMzNDtcbiAyMDU6XHRcdGRlcGVuZHMgb24gUENJX01TSVxuIDIwNjpcdFx0aGVscFxuIDIwNzpcdFx0ICBUaGlzIGRyaXZlciBzdXBwb3J0cyBJbnRlbChSKSBQQ0kgRXhwcmVzcyB2aXJ0dWFsIGZ1bmN0aW9ucyBmb3IgdGhlXG4gMjA4Olx0XHQgIEludGVsKFIpIGl4Z2JlIGRyaXZlci4gIEZvciBtb3JlIGluZm9ybWF0aW9uIG9uIGhvdyB0byBpZGVudGlmeSB5b3VyXG4gMjA5Olx0XHQgIGFkYXB0ZXIsIGdvIHRvIHRoZSBBZGFwdGVyIFx1MDAyNiBEcml2ZXIgSUQgR3VpZGUgdGhhdCBjYW4gYmUgbG9jYXRlZCBhdDpcbiAyMTA6XHRcbiAyMTE6XHRcdCAgXHUwMDNjaHR0cDovL3N1cHBvcnQuaW50ZWwuY29tXHUwMDNlXG4gMjEyOlx0XG4gMjEzOlx0XHQgIE1vcmUgc3BlY2lmaWMgaW5mb3JtYXRpb24gb24gY29uZmlndXJpbmcgdGhlIGRyaXZlciBpcyBpblxuIDIxNDpcdFx0ICBcdTAwM2NmaWxlOkRvY3VtZW50YXRpb24vbmV0d29ya2luZy9kZXZpY2VfZHJpdmVycy9ldGhlcm5ldC9pbnRlbC9peGdiZXZmLnJzdFx1MDAzZS5cbiAyMTU6XHRcbiAyMTY6XHRcdCAgVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZS4gVGhlIG1vZHVsZVxuIDIxNzpcdFx0ICB3aWxsIGJlIGNhbGxlZCBpeGdiZXZmLiAgTVNJLVggaW50ZXJydXB0IHN1cHBvcnQgaXMgcmVxdWlyZWRcbiAyMTg6XHRcdCAgZm9yIHRoaXMgZHJpdmVyIHRvIHdvcmsgY29ycmVjdGx5LlxuIDIxOTpcdFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNCAxNDoyMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0NTQ2NgoJCQkJCQkJb3V0cHV0OiAzNwoJCQkJCQkJdGhvdWdodHM6IDY3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IENvbmZpZ3VyYXRpb24gTXVzaW5ncyoqCgpPa2F5LCBzbyB3ZSYjMzk7cmUgZGl2aW5nIGludG8gdGhpcyBjb25maWd1cmF0aW9uLCBhbmQgaXQgcmVhbGx5IGhpbmdlcyBvbiBgUENJX01TSWAuIFRoYXQmIzM5O3MgdGhlIGNvcmUuIFNvLCBsb29raW5nIGF0IHRoZSBjcnVjaWFsIHBpZWNlcywgSSBuZWVkIHRvIG1ha2Ugc3VyZSBgSVhHQkVWRmAgaXMgc2V0LCBvYnZpb3VzbHkuIFRoZW4sIHdlIGFic29sdXRlbHkgbmVlZCBgUENJX01NQ09ORklHYC4gQW5kIHdoaWxlIGBQQ0lfTVNJYCBpcyB1c3VhbGx5IGVuYWJsZWQgYXMgYSBkZWZhdWx0IHNldHRpbmcsIEkgYWx3YXlzIHRoaW5rIGl0JiMzOTtzIHBydWRlbnQgdG8gaW5jbHVkZSBpdCBleHBsaWNpdGx5IGZvciBjbGFyaXR5IGFuZCB0byBlbnN1cmUgd2UgZG9uJiMzOTt0IG1pc3MgYW55dGhpbmcuIEJldHRlciBzYWZlIHRoYW4gc29ycnkgd2hlbiBjb25maWd1cmluZyB0aGVzZSBzeXN0ZW1zLgoKTm93LCBiZWZvcmUgSSBwcm9jZWVkIGZ1cnRoZXIsIEkgd2FudCB0byBkb3VibGUtY2hlY2sgdGhhdCBgUENJX01NQ09ORklHYCBkb2VzbiYjMzk7dCBoYXZlIGFueSBoaWRkZW4gZGVwZW5kZW5jaWVzIGx1cmtpbmcgaW4gdGhlIHNoYWRvd3MgdGhhdCBJIG1pZ2h0IGhhdmUgb3Zlcmxvb2tlZC4gR290dGEgbWFrZSBzdXJlIGV2ZXJ5dGhpbmcgaXMgaW4gcGxhY2UgdG8gbWluaW1pemUgZXJyb3JzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNCAxNDoyMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2FyY2gveDg2L0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAyODcwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDEwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzI4NzA6XHRjb25maWcgUENJX0RJUkVDVFxuMjg3MTpcdFx0ZGVmX2Jvb2wgeVxuMjg3MjpcdFx0ZGVwZW5kcyBvbiBQQ0kgXHUwMDI2XHUwMDI2IChYODZfNjQgfHwgKFBDSV9HT0RJUkVDVCB8fCBQQ0lfR09BTlkgfHwgUENJX0dPT0xQQyB8fCBQQ0lfR09NTUNPTkZJRykpXG4yODczOlx0XG4yODc0Olx0Y29uZmlnIFBDSV9NTUNPTkZJR1xuMjg3NTpcdFx0Ym9vbCBcJiMzNDtTdXBwb3J0IG1tY29uZmlnIFBDSSBjb25maWcgc3BhY2UgYWNjZXNzXCYjMzQ7IGlmIFg4Nl82NFxuMjg3NjpcdFx0ZGVmYXVsdCB5XG4yODc3Olx0XHRkZXBlbmRzIG9uIFBDSSBcdTAwMjZcdTAwMjYgKEFDUEkgfHwgSkFJTEhPVVNFX0dVRVNUKVxuMjg3ODpcdFx0ZGVwZW5kcyBvbiBYODZfNjQgfHwgKFBDSV9HT0FOWSB8fCBQQ0lfR09NTUNPTkZJRylcbjI4Nzk6XHRcdGhlbHBcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40My8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjQgMTQ6MjM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDU5MjgKCQkJCQkJCW91dHB1dDogMzcKCQkJCQkJCXRob3VnaHRzOiA0NjUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQW5hbHlzaXMgb2YgdGhlIGBpeGdiZXZmYCBEcml2ZXImIzM5O3MgTGluayBTcGVlZCBGZWF0dXJlIGFuZCBDb25maWd1cmF0aW9uIERlcGVuZGVuY2llcyoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBNeSBpbml0aWFsIHRob3VnaHQgd2FzIGFib3V0IHRoZSBkZXBlbmRlbmN5IGNoYWluLiBUaGUgcGF0Y2ggYWRkcyBmdW5jdGlvbmFsaXR5IHRvIHRoZSBgaXhnYmV2ZmAgZHJpdmVyIOKAkyBzcGVjaWZpY2FsbHksIHJldHJpZXZpbmcgbGluayBzcGVlZCBpbmZvcm1hdGlvbiBmcm9tIHRoZSBlbXVsYXRlZCBQQ0kgY29uZmlndXJhdGlvbiBzcGFjZSBmb3IgSHlwZXItViBFNjEwIFZpcnR1YWwgRnVuY3Rpb25zLiBUaGlzIGlzIGFjY2Vzc2VkIHZpYSB0aGUgYGl4Z2JldmZfZ2V0X2xpbmtfa3NldHRpbmdzYCBldGh0b29sIGNhbGxiYWNrIGFuZCB0aGUgZHJpdmVyJiMzOTtzIHBlcmlvZGljIGxpbmsgY2hlY2sgdGFzayAoYGl4Z2JldmZfaHZfY2hlY2tfbWFjX2xpbmtfdmZgKS4KCk15IGNvbmNlcm4sIGluaXRpYWxseSwgd2FzIHdoZXRoZXIgYFBDSV9NTUNPTkZJR2Agd2FzICpzdHJpY3RseSogcmVxdWlyZWQgZm9yIGNvbXBpbGF0aW9uLiBUaGUgY29kZSBzbmlwcGV0IHdpdGggYGRldl9lcnJfb25jZWAgc2VlbXMgdG8gc3VnZ2VzdCB0aGF0IHRoZSBkcml2ZXIgd2lsbCBjb21waWxlIHdpdGhvdXQgaXQsIGJ1dCBhdHRlbXB0aW5nIHRvICpleGVjdXRlKiB0aGUgbmV3IGxvZ2ljLCB0aGUgYHBjaV9yZWFkX2NvbmZpZ19ieXRlYCBsb29wIHNwZWNpZmljYWxseSwgd2lsbCBmYWlsIGFuZCByZXR1cm4gLUVPUE5PVFNVUFAgaWYgYFBDSV9NTUNPTkZJR2AgaXMgZGlzYWJsZWQuIFNvLCBpdCYjMzk7cyBub3QgYSBjb21waWxhdGlvbiBibG9ja2VyLCBidXQgYWJzb2x1dGVseSBlc3NlbnRpYWwgZm9yIHRlc3RpbmcgdGhpcyBuZXcgZmVhdHVyZS4KCkhvdyBkb2VzIGEgZnV6emluZyB0ZXN0IHJlYWNoIHRoaXMgY29kZT8gQWgsIFN5emthbGxlci4gSXQgbGV2ZXJhZ2VzIGEgUENJIGRldmljZSBmdXp6ZXIgdG8gZW11bGF0ZSB0aGUgc3BlY2lmaWMgVkYgZGV2aWNlIElELiBCeSBzaW11bGF0aW5nIHRoaXMgc3BlY2lmaWMgZGV2aWNlIElEIGFuZCB0aGVuIGludGVyYWN0aW5nIHdpdGggdGhlIHJlZ2lzdGVyZWQgbmV0d29yayBkZXZpY2UgdGhyb3VnaCBldGh0b29sIG9yIHdhaXRpbmcgZm9yIHRoZSBiYWNrZ3JvdW5kIHRhc2ssIHRoZSBuZXcgUENJIGNvbmZpZyBzcGFjZSByZWFkIGZ1bmN0aW9uYWxpdHkgY2FuIGJlIGV4ZXJjaXNlZC4KClRoZXJlZm9yZSwgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldyBsaW5rIHNwZWVkIHJlYWRpbmcsIEkgbmVlZCB0byBlbnN1cmUgdGhlIGZvbGxvd2luZyBjb25maWd1cmF0aW9ucyBhcmUgZW5hYmxlZDogYElYR0JFVkZgLCB3aGljaCBpcyB0aGUgZHJpdmVyIGl0c2VsZiwgYFBDSV9NTUNPTkZJR2AgZm9yIHRoZSBQQ0kgY29uZmlndXJhdGlvbiBzcGFjZSBhY2Nlc3MsIGFuZCBgUENJX01TSWAgaXMgYXV0b21hdGljYWxseSBuZWVkZWQgYXMgYSBkZXBlbmRlbmN5IG9mIGBJWEdCRVZGYC4KCkkgYWxzbyBrbm93IHRoYXQgYElYR0JFVkZgIGFsc28gZGVwZW5kcyBvbiBgUENJYCwgYE5FVERFVklDRVNgLCBgRVRIRVJORVRgLCBhbmQgYE5FVF9WRU5ET1JfSU5URUxgLiBUaGVzZSBkZXBlbmRlbmNpZXMgYXJlIHByZXR0eSBzdGFuZGFyZCwgYW5kIGBORVRfVkVORE9SX0lOVEVMYCBpcyB1c3VhbGx5IG5lZWRlZCB0byBldmVuIHNlZSB0aGUgYElYR0JFVkZgIGRyaXZlciBpbiB0aGUgY29uZmlndXJhdGlvbiBtZW51LiBUaGF0JiMzOTtzIGEgc2FuaXR5IGNoZWNrOyBJJiMzOTtsbCBtYWtlIHN1cmUgdGhvc2UgYXJlIGFsbCBlbmFibGVkIGFzIHdlbGwuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI0IDE0OjIzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvS2NvbmZpZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDEsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7ICAgMTpcdCMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxuICAgMjpcdCNcbiAgIDM6XHQjIEludGVsIG5ldHdvcmsgZGV2aWNlIGNvbmZpZ3VyYXRpb25cbiAgIDQ6XHQjXG4gICA1Olx0XG4gICA2Olx0Y29uZmlnIE5FVF9WRU5ET1JfSU5URUxcbiAgIDc6XHRcdGJvb2wgXCYjMzQ7SW50ZWwgZGV2aWNlc1wmIzM0O1xuICAgODpcdFx0ZGVmYXVsdCB5XG4gICA5Olx0XHRoZWxwXG4gIDEwOlx0XHQgIElmIHlvdSBoYXZlIGEgbmV0d29yayAoRXRoZXJuZXQpIGNhcmQgYmVsb25naW5nIHRvIHRoaXMgY2xhc3MsIHNheSBZLlxuICAxMTpcdFxuICAxMjpcdFx0ICBOb3RlIHRoYXQgdGhlIGFuc3dlciB0byB0aGlzIHF1ZXN0aW9uIGRvZXNuJiMzOTt0IGRpcmVjdGx5IGFmZmVjdCB0aGVcbiAgMTM6XHRcdCAga2VybmVsOiBzYXlpbmcgTiB3aWxsIGp1c3QgY2F1c2UgdGhlIGNvbmZpZ3VyYXRvciB0byBza2lwIGFsbFxuICAxNDpcdFx0ICB0aGUgcXVlc3Rpb25zIGFib3V0IEludGVsIGNhcmRzLiBJZiB5b3Ugc2F5IFksIHlvdSB3aWxsIGJlIGFza2VkIGZvclxuICAxNTpcdFx0ICB5b3VyIHNwZWNpZmljIGNhcmQgaW4gdGhlIGZvbGxvd2luZyBxdWVzdGlvbnMuXG4gIDE2Olx0XG4gIDE3Olx0aWYgTkVUX1ZFTkRPUl9JTlRFTFxuICAxODpcdFxuICAxOTpcdHNvdXJjZSBcJiMzNDtkcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9saWJldGgvS2NvbmZpZ1wmIzM0O1xuICAyMDpcdHNvdXJjZSBcJiMzNDtkcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9saWJpZS9LY29uZmlnXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI0IDE0OjIzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQ3MTYxCgkJCQkJCQlvdXRwdXQ6IDIwNAoJCQkJCQkJdGhvdWdodHM6IDc3NQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBc3Nlc3NtZW50IG9mIHRoZSBGdXp6aW5nIFdvcnRoaW5lc3MqKgoKT2theSwgc28gSSYjMzk7dmUgZ29uZSB0aHJvdWdoIHRoaXMgY2FyZWZ1bGx5LiBZZXMsIGFic29sdXRlbHksIGBORVRfVkVORE9SX0lOVEVMYCBpcyBhIG11c3QtaGF2ZSBmb3IgdGhpcy4gV2UmIzM5O2xsIG5lZWQgdGhlIGZvbGxvd2luZyBgRW5hYmxlQ29uZmlnc2A6IGBORVRfVkVORE9SX0lOVEVMYCwgYElYR0JFVkZgLCBgUENJX01NQ09ORklHYCwgYW5kIGBQQ0lfTVNJYC4KCkkgaGFkIHRvIGRvdWJsZS1jaGVjayB0aGF0IGBpeGdiZXZmX2h2X3JlYWRfbGlua3NfZTYxMGAgaXNuJiMzOTt0IGEgcHJvYmxlbS4gSXQmIzM5O3MgYSBzdGF0aWMgZnVuY3Rpb24sIGJ1dCBpdCYjMzk7cyBjYWxsZWQgZGlyZWN0bHkgYnkgYGl4Z2JldmZfaHZfY2hlY2tfbWFjX2xpbmtfdmZgLiBHaXZlbiB0aGF0IGl0JiMzOTtzIGNhbGxlZCBvbmx5IG9uY2UsIHRoZSBjb21waWxlciBpcyB2ZXJ5IGxpa2VseSB0byBpbmxpbmUgaXQuIElmIGlubGluZWQsIGl0IHdvbiYjMzk7dCBoYXZlIGEgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3MsIHNvIGl0JiMzOTtzIGJlc3QgKm5vdCogdG8gaW5jbHVkZSBpdCBpbiB0aGUgYEZvY3VzU3ltYm9sc2AgdG8gcHJldmVudCBhbnkgdW5uZWNlc3Nhcnkgd2FybmluZ3Mgb3IgbWlzc2luZyBjb3ZlcmFnZS4gSG93ZXZlciwgdGhlIG90aGVyIHR3bzogYGl4Z2JldmZfaHZfY2hlY2tfbWFjX2xpbmtfdmZgIGFuZCBgaXhnYmV2Zl9nZXRfbGlua19rc2V0dGluZ3NgIGFyZSBhc3NpZ25lZCB0byBmdW5jdGlvbiBwb2ludGVycywgYW5kIHNvIHdvbiYjMzk7dCBiZSBmdWxseSBpbmxpbmVkLiBUaGVzZSAqYXJlKiBpbXBvcnRhbnQuCgpOb3csIGxldCYjMzk7cyBjaXJjbGUgYmFjayB0byB0aGUgcHJvbXB0LCBtYWtpbmcgc3VyZSBJIGhhdmVuJiMzOTt0IG1pc3NlZCBhbnl0aGluZyBjcnVjaWFsLiBUaGUgaW5zdHJ1Y3Rpb24gaXMgdG8gcmV0dXJuIGBXb3J0aEZ1enppbmc9ZmFsc2VgIGlmIHRoZSBwYXRjaCBoYXMgY29kZSBwYXRocyB0aGF0IGFyZSB1bnJlYWNoYWJsZSBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgb3IgY29kZSB0aGF0IGRlcGVuZHMgb24gc3BlY2lmaWMsIG5vbi1lbXVsYXRlZCBoYXJkd2FyZS4KClRoZSBTeXprYWxsZXIgUENJIGZ1enplciBjYW4gZW11bGF0ZSBlbm91Z2ggb2YgdGhlIGRldmljZSB0byBwYXNzIHRoZSBwcm9iZSBmdW5jdGlvbiBhbmQgcmVnaXN0ZXIgdGhlIG5ldGRldiwgd2hpY2ggbWFrZXMgdGhlIGNvZGUgcmVhY2hhYmxlLiBUaGUgUENJIGZ1enplciBpbnRlcmNlcHRzIFBDSSBjb25maWcgc3BhY2UgYW5kIE1NSU8gcmVhZHMvd3JpdGVzLiBgaXhnYmV2Zl9zd19pbml0YCBkb2VzIE1NSU8gcmVhZHMvd3JpdGVzLCBsaWtlIGBJWEdCRV9SRUFEX1JFR2AuIElmIHRoZSBmdXp6ZXIgdGhyb3dzIHJhbmRvbSB2YWx1ZXMgYXQgaXQsIGByZXNldF9od2AgbWlnaHQgZmFpbCwgYnV0IGFzIHdlIG9ic2VydmVkLCB0aGUgZHJpdmVyIHdpbGwgcHJvY2VlZCBhbmQgcmVnaXN0ZXIgdGhlIG5ldGRldiBhbnl3YXkuIFNvLCBpdCYjMzk7cyBkZWZpbml0ZWx5IHJlYWNoYWJsZS4gTm8gcmVhc29uIHRvIHRoaW5rIHRoZSBQQ0kgZnV6emVyIHdvbiYjMzk7dCBiZSBlZmZlY3RpdmUgaGVyZS4KClRoZXJlZm9yZSwgSSYjMzk7bSBjb25maWRlbnQgaW4gc2V0dGluZyBgV29ydGhGdXp6aW5nPXRydWVgLgoKVGhlIHJlYXNvbmluZyBpcyB0aGF0IHRoaXMgcGF0Y2ggbW9kaWZpZXMgdGhlIGBpeGdiZXZmYCBkcml2ZXIuIEl0IGFkZHMgbG9naWMgdG8gcmVhZCB0aGUgbGluayBzcGVlZCBmcm9tIHRoZSBlbXVsYXRlZCBQQ0kgY29uZmlnIHNwYWNlIHNwZWNpZmljYWxseSBmb3IgSHlwZXItViBFNjEwIFZGcy4gVGhpcyBjb2RlIGlzIHJlYWNoYWJsZSB2aWEgdGhlIGBldGh0b29sIGdldF9saW5rX2tzZXR0aW5nc2AgY2FsbGJhY2sgYW5kIHRoZSBkcml2ZXImIzM5O3MgYmFja2dyb3VuZCBsaW5rIGNoZWNrIHRhc2suIFN5emthbGxlciBjYW4gcmVhY2ggaXQgYnkgdXNpbmcgaXRzIFBDSSBkZXZpY2UgZnV6emVyIHRvIGVtdWxhdGUgdGhlIHNwZWNpZmljIFZGIGRldmljZSBJRCwgYW5kIHRoZW4gaW50ZXJhY3Rpbmcgd2l0aCB0aGUgcmVnaXN0ZXJlZCBuZXRkZXYgdGhyb3VnaCBldGh0b29sLiBUaGUgbmV3IGxvZ2ljIGRvZXMgcmVxdWlyZSBgQ09ORklHX1BDSV9NTUNPTkZJR2AgdG8gYmUgZW5hYmxlZCB0byBwZXJmb3JtIHRoZSBQQ0kgY29uZmlnIHNwYWNlIHJlYWRzLgoKVGhlIGBGb2N1c1N5bWJvbHNgIEkgd2lsbCBmb2N1cyBvbiBhcmU6IGBpeGdiZXZmX2dldF9saW5rX2tzZXR0aW5nc2AgYW5kIGBpeGdiZXZmX2h2X2NoZWNrX21hY19saW5rX3ZmYC4KClRoZSBgRW5hYmxlIGNvbmZpZ3NgIGFyZTogYE5FVF9WRU5ET1JfSU5URUxgLCBgSVhHQkVWRmAsIGBQQ0lfTU1DT05GSUdgLCBhbmQgYFBDSV9NU0lgLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNCAxNDoyNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7TkVUX1ZFTkRPUl9JTlRFTCYjMzQ7LAogICAgJiMzNDtJWEdCRVZGJiMzNDssCiAgICAmIzM0O1BDSV9NTUNPTkZJRyYjMzQ7LAogICAgJiMzNDtQQ0lfTVNJJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7aXhnYmV2Zl9nZXRfbGlua19rc2V0dGluZ3MmIzM0OywKICAgICYjMzQ7aXhnYmV2Zl9odl9jaGVja19tYWNfbGlua192ZiYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgaXhnYmV2ZiBkcml2ZXIgdG8gcmVhZCBsaW5rIHNwZWVkIGZyb20gdGhlIGVtdWxhdGVkIFBDSSBjb25maWcgc3BhY2UgZm9yIEh5cGVyLVYgRTYxMCBWRnMuIFRoaXMgbG9naWMgaXMgcmVhY2hhYmxlIHZpYSB0aGUgZXRodG9vbCBnZXRfbGlua19rc2V0dGluZ3MgY2FsbGJhY2sgYW5kIHRoZSBkcml2ZXImIzM5O3MgYmFja2dyb3VuZCBsaW5rIGNoZWNrIHRhc2suIFN5emthbGxlciBjYW4gcmVhY2ggdGhpcyBjb2RlIGJ5IHVzaW5nIGl0cyBQQ0kgZGV2aWNlIGZ1enplciB0byBlbXVsYXRlIHRoZSBzcGVjaWZpYyBWRiBkZXZpY2UgSUQgYW5kIHRoZW4gaW50ZXJhY3Rpbmcgd2l0aCB0aGUgcmVnaXN0ZXJlZCBuZXRkZXYgdmlhIGV0aHRvb2wuIFRoZSBuZXcgbG9naWMgcmVxdWlyZXMgQ09ORklHX1BDSV9NTUNPTkZJRyB0byBiZSBlbmFibGVkIHRvIGFjdHVhbGx5IHBlcmZvcm0gdGhlIFBDSSBjb25maWcgc3BhY2UgcmVhZHMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O05FVF9WRU5ET1JfSU5URUwmIzM0OywKICAgICYjMzQ7SVhHQkVWRiYjMzQ7LAogICAgJiMzNDtQQ0lfTU1DT05GSUcmIzM0OywKICAgICYjMzQ7UENJX01TSSYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2l4Z2JldmZfZ2V0X2xpbmtfa3NldHRpbmdzJiMzNDssCiAgICAmIzM0O2l4Z2JldmZfaHZfY2hlY2tfbWFjX2xpbmtfdmYmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGl4Z2JldmYgZHJpdmVyIHRvIHJlYWQgbGluayBzcGVlZCBmcm9tIHRoZSBlbXVsYXRlZCBQQ0kgY29uZmlnIHNwYWNlIGZvciBIeXBlci1WIEU2MTAgVkZzLiBUaGlzIGxvZ2ljIGlzIHJlYWNoYWJsZSB2aWEgdGhlIGV0aHRvb2wgZ2V0X2xpbmtfa3NldHRpbmdzIGNhbGxiYWNrIGFuZCB0aGUgZHJpdmVyJiMzOTtzIGJhY2tncm91bmQgbGluayBjaGVjayB0YXNrLiBTeXprYWxsZXIgY2FuIHJlYWNoIHRoaXMgY29kZSBieSB1c2luZyBpdHMgUENJIGRldmljZSBmdXp6ZXIgdG8gZW11bGF0ZSB0aGUgc3BlY2lmaWMgVkYgZGV2aWNlIElEIGFuZCB0aGVuIGludGVyYWN0aW5nIHdpdGggdGhlIHJlZ2lzdGVyZWQgbmV0ZGV2IHZpYSBldGh0b29sLiBUaGUgbmV3IGxvZ2ljIHJlcXVpcmVzIENPTkZJR19QQ0lfTU1DT05GSUcgdG8gYmUgZW5hYmxlZCB0byBhY3R1YWxseSBwZXJmb3JtIHRoZSBQQ0kgY29uZmlnIHNwYWNlIHJlYWRzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ3LzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNCAxNDoyNDwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+SWY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI0IDE0OjI0PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmJlc3QtZXhwZW5zaXZlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGludHJvZHVjZXMgYSBuZXcgZnVuY3Rpb24gYGl4Z2JldmZfaHZfcmVhZF9saW5rc19lNjEwYCB3aGljaCByZWFkcyA0IGJ5dGVzIGZyb20gdGhlIFBDSSBjb25maWd1cmF0aW9uIHNwYWNlIGludG8gYSBsb2NhbCBzdGFjayBhcnJheSBgZGF0YWAuIFRoZSBhcnJheSBpcyBpbml0aWFsaXplZCBieXRlLWJ5LWJ5dGUgdXNpbmcgYHBjaV9yZWFkX2NvbmZpZ19ieXRlYC4gSWYgYW55IHJlYWQgZmFpbHMsIHRoZSBmdW5jdGlvbiByZXR1cm5zIGFuIGVycm9yIGltbWVkaWF0ZWx5LiBJZiBhbGwgcmVhZHMgc3VjY2VlZCwgdGhlIGFycmF5IGlzIGZ1bGx5IGluaXRpYWxpemVkIGJlZm9yZSBiZWluZyByZWFkIGJ5IGBnZXRfdW5hbGlnbmVkX2xlMzJgLiBUaGVyZSBpcyBubyByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGJlaW5nIHVzZWQgaW4gY29udHJvbCBmbG93LCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgbGVha2VkLiBTdGFuZGFyZCBLQVNBTiBhbmQgb3RoZXIgYnVnIGRldGVjdG9ycyBhcmUgc3VmZmljaWVudCB0byBjYXRjaCBhbnkgcG90ZW50aWFsIG91dC1vZi1ib3VuZHMgb3IgbWVtb3J5IGNvcnJ1cHRpb24gaXNzdWVzLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeQplcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZApkZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpCmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLgoKQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46Ci0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZQogIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTgogIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVAKICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLgotIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLAogIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy4KClJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sCkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuCkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFkKc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3MKdGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi4KCkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0CnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLAphIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXMKdGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmcKdW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sCmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSwKY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuCgpTZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6CjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiCiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzCiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuCjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMKICAgb3Igc3RydWN0IGZpZWxkcy4KMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkcwogICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLgo0LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2VzcwogICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuCgpTZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjoKLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlcgogIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodAogIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS4KLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZAogIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC4KLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuCgpVc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlCmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCBjMDIyNmY3MmY3YjU0ODNmZTI5N2MyZDNiNmMxNzMxYjA0NDFlMjhjCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIE1vbiBBdWcgMjQgMTQ6MTk6MTUgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9peGdiZXZmL2V0aHRvb2wuYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2l4Z2JldmYvZXRodG9vbC5jCmluZGV4IDUzN2E2MGQ1Mjc2ZjAuLjI0NjNmY2NmZmQ0ZGEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2l4Z2JldmYvZXRodG9vbC5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2l4Z2JldmYvZXRodG9vbC5jCkBAIC04Myw2ICYjNDM7ODMsMTggQEAgc3RhdGljIGludCBpeGdiZXZmX2dldF9saW5rX2tzZXR0aW5ncyhzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LAogCQkJCSAgICAgIHN0cnVjdCBldGh0b29sX2xpbmtfa3NldHRpbmdzICpjbWQpCiB7CiAJc3RydWN0IGl4Z2JldmZfYWRhcHRlciAqYWRhcHRlciA9IG5ldGRldl9wcml2KG5ldGRldik7CiYjNDM7CXN0cnVjdCBpeGdiZV9odyAqaHcgPSAmYW1wO2FkYXB0ZXItJmd0O2h3OwomIzQzOwomIzQzOwkvKiBFNjEwIEh5cGVyLVYgVkZzOiByZWFkIGN1cnJlbnQgbGluayBzcGVlZCBmcm9tIFBDSSBjb25maWcgc3BhY2UKJiM0MzsJICogb24gZXZlcnkgbGluayBzcGVlZCBxdWVyeS4KJiM0MzsJICovCiYjNDM7CWlmIChody0mZ3Q7bWFjLnR5cGUgPT0gaXhnYmVfbWFjX2U2MTBfdmYpIHsKJiM0MzsJCXNwaW5fbG9ja19iaCgmYW1wO2FkYXB0ZXItJmd0O21ieF9sb2NrKTsKJiM0MzsJCWh3LSZndDttYWMuZ2V0X2xpbmtfc3RhdHVzID0gdHJ1ZTsKJiM0MzsJCWh3LSZndDttYWMub3BzLmNoZWNrX2xpbmsoaHcsICZhbXA7YWRhcHRlci0mZ3Q7bGlua19zcGVlZCwKJiM0MzsJCQkJICAgICAgICZhbXA7YWRhcHRlci0mZ3Q7bGlua191cCwgZmFsc2UpOwomIzQzOwkJc3Bpbl91bmxvY2tfYmgoJmFtcDthZGFwdGVyLSZndDttYnhfbG9jayk7CiYjNDM7CX0KIAogCWV0aHRvb2xfbGlua19rc2V0dGluZ3NfemVyb19saW5rX21vZGUoY21kLCBzdXBwb3J0ZWQpOwogCWV0aHRvb2xfbGlua19rc2V0dGluZ3NfYWRkX2xpbmtfbW9kZShjbWQsIHN1cHBvcnRlZCwgMTAwMDBiYXNlVF9GdWxsKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2l4Z2JldmYvdmYuYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2l4Z2JldmYvdmYuYwppbmRleCBmNmRmODZkMTI0YjllLi5hODRiNjI2NDFlOWJjIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9peGdiZXZmL3ZmLmMKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaXhnYmV2Zi92Zi5jCkBAIC0xLDE0ICYjNDM7MSwxNyBAQAogLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAKIC8qIENvcHlyaWdodChjKSAxOTk5IC0gMjAyNCBJbnRlbCBDb3Jwb3JhdGlvbi4gKi8KIAomIzQzOyNpbmNsdWRlICZsdDtsaW51eC91bmFsaWduZWQuaCZndDsKJiM0MzsKICNpbmNsdWRlICYjMzQ7dmYuaCYjMzQ7CiAjaW5jbHVkZSAmIzM0O2l4Z2JldmYuaCYjMzQ7CiAKLS8qIE9uIEh5cGVyLVYsIHRvIHJlc2V0LCB3ZSBuZWVkIHRvIHJlYWQgZnJvbSB0aGlzIG9mZnNldAotICogZnJvbSB0aGUgUENJIGNvbmZpZyBzcGFjZS4gVGhpcyBpcyB0aGUgbWVjaGFuaXNtIHVzZWQgb24KLSAqIEh5cGVyLVYgdG8gc3VwcG9ydCBQRi9WRiBjb21tdW5pY2F0aW9uLgomIzQzOy8qIE9uIEh5cGVyLVYgdGhlIFBGL1ZGIGNvbW11bmljYXRpb24gaXMgdGhyb3VnaCBlbXVsYXRlZCBQQ0kgY29uZmlnCiYjNDM7ICogc3BhY2UuIFRoZSByZXNldCBhbmQgbGluayBzdGF0dXMgYXJlIGV4cG9zZWQgYXQgdGhlIG9mZnNldHMgYmVsb3cuCiAgKi8KLSNkZWZpbmUgSVhHQkVfSFZfUkVTRVRfT0ZGU0VUICAgICAgICAgICAweDIwMQomIzQzOyNkZWZpbmUgSVhHQkVfSFZfUkVTRVRfT0ZGU0VUCQkweDIwMQomIzQzOyNkZWZpbmUgSVhHQkVfSFZfTElOS19TVEFUVVNfT0ZGU0VUCTB4MjA5CiYjNDM7I2RlZmluZSBJWEdCRV9IVl9MSU5LX1NUQVRVU19TSVpFCTQKIAogc3RhdGljIGlubGluZSBzMzIgaXhnYmV2Zl93cml0ZV9tc2dfcmVhZF9hY2soc3RydWN0IGl4Z2JlX2h3ICpodywgdTMyICptc2csCiAJCQkJCSAgICAgdTMyICpyZXRtc2csIHUxNiBzaXplKQpAQCAtOTAxLDYgJiM0Mzs5MDQsNDAgQEAgc3RhdGljIHMzMiBpeGdiZXZmX2NoZWNrX21hY19saW5rX3ZmKHN0cnVjdCBpeGdiZV9odyAqaHcsCiAJcmV0dXJuIHJldF92YWw7CiB9CiAKJiM0MzsvKioKJiM0MzsgKiBpeGdiZXZmX2h2X3JlYWRfbGlua3NfZTYxMCAtIHJlYWQgbGluayBzdGF0dXMgZnJvbSBQQ0kgY29uZmlnIHNwYWNlCiYjNDM7ICogQGh3OiBwb2ludGVyIHRvIGhhcmR3YXJlIHN0cnVjdHVyZQomIzQzOyAqIEBsaW5rc19yZWc6IHBvaW50ZXIgdG8gc3RvcmUgcmVhZCB2YWx1ZQomIzQzOyAqCiYjNDM7ICogT24gSHlwZXItViBFNjEwIFZGcyB0aGUgVkZMSU5LUyByZWdpc3RlciBkb2VzIG5vdCBjYXJyeSB2YWxpZCBsaW5rIHNwZWVkLgomIzQzOyAqIEluc3RlYWQsIGxpbmsgc3RhdHVzIGlzIGV4cG9zZWQgdGhyb3VnaCBlbXVsYXRlZCBQQ0kgY29uZmlnIHNwYWNlIGF0IG9mZnNldAomIzQzOyAqIDB4MjA5IGluIFZGTElOS1MgcmVnaXN0ZXIgZm9ybWF0LgomIzQzOyAqCiYjNDM7ICogUmV0dXJuOiAwIG9uIHN1Y2Nlc3MsIG5lZ2F0aXZlIGVycm9yIGNvZGUgb24gZmFpbHVyZS4KJiM0MzsgKi8KJiM0MztzdGF0aWMgczMyIGl4Z2JldmZfaHZfcmVhZF9saW5rc19lNjEwKHN0cnVjdCBpeGdiZV9odyAqaHcsIHUzMiAqbGlua3NfcmVnKQomIzQzO3sKJiM0MzsJc3RydWN0IGl4Z2JldmZfYWRhcHRlciAqYWRhcHRlciA9IGh3LSZndDtiYWNrOwomIzQzOwl1OCBkYXRhW0lYR0JFX0hWX0xJTktfU1RBVFVTX1NJWkVdOwomIzQzOwomIzQzOwlpZiAoIUlTX0VOQUJMRUQoQ09ORklHX1BDSV9NTUNPTkZJRykpIHsKJiM0MzsJCWRldl9lcnJfb25jZSgmYW1wO2FkYXB0ZXItJmd0O3BkZXYtJmd0O2RldiwKJiM0MzsJCQkgICAgICYjMzQ7Y2Fubm90IHJlYWQgbGluayBzdGF0dXMsIFBDSV9NTUNPTkZJRyBpcyByZXF1aXJlZCBmb3IgSHlwZXItVlxuJiMzNDspOwomIzQzOwkJcmV0dXJuIC1FT1BOT1RTVVBQOwomIzQzOwl9CiYjNDM7CiYjNDM7CWZvciAoaW50IGkgPSAwOyBpICZsdDsgSVhHQkVfSFZfTElOS19TVEFUVVNfU0laRTsgaSYjNDM7JiM0MzspIHsKJiM0MzsJCWludCByZXQgPSBwY2lfcmVhZF9jb25maWdfYnl0ZShhZGFwdGVyLSZndDtwZGV2LAomIzQzOwkJCQkJICAgICAgIElYR0JFX0hWX0xJTktfU1RBVFVTX09GRlNFVCAmIzQzOyBpLAomIzQzOwkJCQkJICAgICAgICZhbXA7ZGF0YVtpXSk7CiYjNDM7CQlpZiAocmV0KQomIzQzOwkJCXJldHVybiBwY2liaW9zX2Vycl90b19lcnJubyhyZXQpOwomIzQzOwl9CiYjNDM7CiYjNDM7CSpsaW5rc19yZWcgPSBnZXRfdW5hbGlnbmVkX2xlMzIoZGF0YSk7CiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MzsKIC8qKgogICogaXhnYmV2Zl9odl9jaGVja19tYWNfbGlua192ZiAtIGNoZWNrIGxpbmsKICAqIEBodzogcG9pbnRlciB0byBwcml2YXRlIGhhcmR3YXJlIHN0cnVjdApAQCAtOTA5LDYgJiM0Mzs5NDYsNyBAQCBzdGF0aWMgczMyIGl4Z2JldmZfY2hlY2tfbWFjX2xpbmtfdmYoc3RydWN0IGl4Z2JlX2h3ICpodywKICAqIEBhdXRvbmVnX3dhaXRfdG9fY29tcGxldGU6IHVudXNlZAogICoKICAqIEh5cGVyLVYgdmFyaWFudDsgdGhlcmUgaXMgbm8gbWFpbGJveCBjb21tdW5pY2F0aW9uLgomIzQzOyAqIEZvciBFNjEwIFZGcywgbGluayBzdGF0dXMgaXMgcmVhZCBmcm9tIGVtdWxhdGVkIFBDSSBjb25maWcgc3BhY2UuCiAgKi8KIHN0YXRpYyBzMzIgaXhnYmV2Zl9odl9jaGVja19tYWNfbGlua192ZihzdHJ1Y3QgaXhnYmVfaHcgKmh3LAogCQkJCQlpeGdiZV9saW5rX3NwZWVkICpzcGVlZCwKQEAgLTkyNiw4ICYjNDM7OTY0LDE2IEBAIHN0YXRpYyBzMzIgaXhnYmV2Zl9odl9jaGVja19tYWNfbGlua192ZihzdHJ1Y3QgaXhnYmVfaHcgKmh3LAogCWlmICghbWFjLSZndDtnZXRfbGlua19zdGF0dXMpCiAJCWdvdG8gb3V0OwogCi0JLyogaWYgbGluayBzdGF0dXMgaXMgZG93biBubyBwb2ludCBpbiBjaGVja2luZyB0byBzZWUgaWYgcGYgaXMgdXAgKi8KLQlsaW5rc19yZWcgPSBJWEdCRV9SRUFEX1JFRyhodywgSVhHQkVfVkZMSU5LUyk7CiYjNDM7CWlmIChtYWMtJmd0O3R5cGUgPT0gaXhnYmVfbWFjX2U2MTBfdmYpIHsKJiM0MzsJCWlmIChpeGdiZXZmX2h2X3JlYWRfbGlua3NfZTYxMChodywgJmFtcDtsaW5rc19yZWcpKSB7CiYjNDM7CQkJKmxpbmtfdXAgPSBmYWxzZTsKJiM0MzsJCQkqc3BlZWQgPSBJWEdCRV9MSU5LX1NQRUVEX1VOS05PV047CiYjNDM7CQkJcmV0dXJuIDA7CiYjNDM7CQl9CiYjNDM7CX0gZWxzZSB7CiYjNDM7CQlsaW5rc19yZWcgPSBJWEdCRV9SRUFEX1JFRyhodywgSVhHQkVfVkZMSU5LUyk7CiYjNDM7CX0KJiM0MzsKIAlpZiAoIShsaW5rc19yZWcgJmFtcDsgSVhHQkVfTElOS1NfVVApKQogCQlnb3RvIG91dDsKIApAQCAtOTQxLDggJiM0Mzs5ODcsMTEgQEAgc3RhdGljIHMzMiBpeGdiZXZmX2h2X2NoZWNrX21hY19saW5rX3ZmKHN0cnVjdCBpeGdiZV9odyAqaHcsCiAJCQl1ZGVsYXkoMTAwKTsKIAkJCWxpbmtzX3JlZyA9IElYR0JFX1JFQURfUkVHKGh3LCBJWEdCRV9WRkxJTktTKTsKIAotCQkJaWYgKCEobGlua3NfcmVnICZhbXA7IElYR0JFX0xJTktTX1VQKSkKLQkJCQlnb3RvIG91dDsKJiM0MzsJCQlpZiAoIShsaW5rc19yZWcgJmFtcDsgSVhHQkVfTElOS1NfVVApKSB7CiYjNDM7CQkJCSpsaW5rX3VwID0gZmFsc2U7CiYjNDM7CQkJCSpzcGVlZCA9IElYR0JFX0xJTktfU1BFRURfVU5LTk9XTjsKJiM0MzsJCQkJcmV0dXJuIDA7CiYjNDM7CQkJfQogCQl9CiAJfQogCkBAIC05NTYsNiAmIzQzOzEwMDUsOSBAQCBzdGF0aWMgczMyIGl4Z2JldmZfaHZfY2hlY2tfbWFjX2xpbmtfdmYoc3RydWN0IGl4Z2JlX2h3ICpodywKIAljYXNlIElYR0JFX0xJTktTX1NQRUVEXzEwMF84MjU5OToKIAkJKnNwZWVkID0gSVhHQkVfTElOS19TUEVFRF8xMDBfRlVMTDsKIAkJYnJlYWs7CiYjNDM7CWRlZmF1bHQ6CiYjNDM7CQkqc3BlZWQgPSBJWEdCRV9MSU5LX1NQRUVEX1VOS05PV047CiYjNDM7CQlicmVhazsKIAl9CiAKIAkvKiBpZiB3ZSBwYXNzZWQgYWxsIHRoZSB0ZXN0cyBhYm92ZSB0aGVuIHRoZSBsaW5rIGlzIHVwIGFuZCB3ZSBubwo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40OS8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjQgMTQ6MjQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzgzOQoJCQkJCQkJb3V0cHV0OiAxNjkKCQkJCQkJCXRob3VnaHRzOiA2OTEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQXNzZXNzbWVudCBvZiB0aGUgaXhnYmV2ZiBEcml2ZXIgUGF0Y2gqKgoKQWxyaWdodCwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gVGhpcyBwYXRjaCBpcyB0YXJnZXRpbmcgdGhlIGBpeGdiZXZmYCBkcml2ZXIg4oCTIHRoZSBJbnRlbCAxMCBHaWdhYml0IFBDSSBFeHByZXNzIFZpcnR1YWwgRnVuY3Rpb24gZHJpdmVyIOKAkyBzcGVjaWZpY2FsbHkgdG8gYWRkIHRoZSBhYmlsaXR5IHRvIHJlYWQgbGluayBzdGF0dXMgZGlyZWN0bHkgZnJvbSB0aGUgUENJIGNvbmZpZ3VyYXRpb24gc3BhY2UgZm9yIEU2MTAgSHlwZXItViBWaXJ0dWFsIEZ1bmN0aW9ucy4KCk15IGFuYWx5c2lzIGZvY3VzZXMgb24gcG90ZW50aWFsIG1lbW9yeSBzYWZldHkgaXNzdWVzLCBwYXJ0aWN1bGFybHkgcmVnYXJkaW5nIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzLgoKVGhlIGNvcmUgb2YgdGhlIGNoYW5nZSBsaWVzIGluIHRoZXNlIGZ1bmN0aW9uczoKCjEuICBgaXhnYmV2Zl9nZXRfbGlua19rc2V0dGluZ3NgIGluIGBldGh0b29sLmNgIG5vdyBjYWxscyBgaHctJmd0O21hYy5vcHMuY2hlY2tfbGlua2AsIHdoaWNoIGlzIGNydWNpYWwgZm9yIGxpbmsgc3RhdHVzLgoKMi4gIGBpeGdiZXZmX2h2X3JlYWRfbGlua3NfZTYxMGAgaW4gYHZmLmNgIGlzIHRoZSBrZXkgcGllY2UuIEl0IGF0dGVtcHRzIHRvIHJlYWQgNCBieXRlcyBvZiBsaW5rIHN0YXR1cyBkYXRhIGZyb20gdGhlIFBDSSBjb25maWcgc3BhY2UgaW50byBhIGB1OCBkYXRhW0lYR0JFX0hWX0xJTktfU1RBVFVTX1NJWkVdYCBhcnJheS4gVGhpcyBpcyBkb25lIGJ5dGUgYnkgYnl0ZSB1c2luZyBgcGNpX3JlYWRfY29uZmlnX2J5dGVgLiBDcnVjaWFsbHksIGlmIGFueSBgcGNpX3JlYWRfY29uZmlnX2J5dGVgIGZhaWxzIChyZXR1cm5zIGEgbm9uLXplcm8gdmFsdWUpLCB0aGUgZnVuY3Rpb24gKmltbWVkaWF0ZWx5IHJldHVybnMqLCBwcmV2ZW50aW5nIGFueSB1c2Ugb2YgcGFydGlhbGx5IGluaXRpYWxpemVkIGRhdGEuIElmIHN1Y2Nlc3NmdWwsICphbGwgZm91ciBieXRlcyogb2YgdGhlIGBkYXRhYCBhcnJheSBhcmUgZmlsbGVkLiBUaGUgZnVuY3Rpb24gdGhlbiBjb25zdHJ1Y3RzIGEgMzItYml0IHZhbHVlIHVzaW5nIGBnZXRfdW5hbGlnbmVkX2xlMzIoZGF0YSlgLgoKMy4gYGl4Z2JldmZfaHZfY2hlY2tfbWFjX2xpbmtfdmZgIGNhbGxzIHRoZSBhYm92ZSBmdW5jdGlvbi4gSWYgdGhlIHJlYWQgZmFpbHMsIHRoZSBsaW5rIHN0YXR1cyBpcyBzZXQgdG8gJiMzNDtkb3duJiMzNDsgYW5kIHNwZWVkIHRvICYjMzQ7dW5rbm93biYjMzQ7LiBJZiBpdCBzdWNjZWVkcywgdGhlIHJlYWQgZGF0YSBpcyB1c2VkIHRvIGRldGVybWluZSBsaW5rIHNwZWVkLgoKVGhlIGNlbnRyYWwgcXVlc3Rpb24gaGVyZSBpcyB3aGV0aGVyIHRoaXMgaW50cm9kdWNlcyB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcy4gSSYjMzk7bSBzYXRpc2ZpZWQgdGhhdCBpdCAqZG9lc24mIzM5O3QqLiBUaGUgYGRhdGFgIGFycmF5IGlzIGV4cGxpY2l0bHkgaW5pdGlhbGl6ZWQsIGJ5dGUgYnkgYnl0ZSwgdXNpbmcgYHBjaV9yZWFkX2NvbmZpZ19ieXRlYC4gRmFpbHVyZSBhdCBhbnkgcG9pbnQgY2F1c2VzIGFuIGltbWVkaWF0ZSBleGl0IGZyb20gdGhlIGZ1bmN0aW9uLCBzbyB0aGUgcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCBgZGF0YWAgYXJyYXkgaXMgbmV2ZXIgYWNjZXNzZWQuIFdoZW4gdGhlIHJlYWQgc3VjY2VlZHMsIGFsbCBieXRlcyBhcmUgaW5pdGlhbGl6ZWQgYmVmb3JlIGBnZXRfdW5hbGlnbmVkX2xlMzJgIGlzIGNhbGxlZC4gSXTigJlzIGFsc28gaW1wb3J0YW50IHRvIG5vdGUgdGhhdCB0aGUgcGF0Y2ggZG9lc24mIzM5O3QgaW50cm9kdWNlIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIG9yIGFueSB1bnVzdWFsIHBhZGRpbmcgc2NlbmFyaW9zLgoKYHBjaV9yZWFkX2NvbmZpZ19ieXRlYOKAmXMgYmVoYXZpb3IgZnVydGhlciByZWluZm9yY2VzIHRoaXMuIEl0IHRha2VzIGEgcG9pbnRlciB0byBgdThgIGFuZCwgdXBvbiBhIHN1Y2Nlc3NmdWwgcmVhZCwgcGxhY2VzIHRoZSB2YWx1ZSBhdCB0aGF0IGFkZHJlc3MuIFNvIGlmIHRoZSBjYWxsIHJldHVybnMgemVybywgdGhlIG1lbW9yeSBiZWluZyBwb2ludGVkIHRvIGhhcyBiZWVuIHN1Y2Nlc3NmdWxseSB3cml0dGVuIHRvLgoKVGhlcmVmb3JlLCBnaXZlbiB0aGUgZXhwbGljaXQgaW5pdGlhbGl6YXRpb24gc3RyYXRlZ3kgYW5kIHRoZSBlYXJseS1leGl0IGVycm9yIGhhbmRsaW5nLCBJIGNhbiBjb25maWRlbnRseSBzdGF0ZSB0aGF0IEtlcm5lbCBNZW1vcnkgU2FuaXRpemVyIChLTVNBTikgaXMgKm5vdCogbmVjZXNzYXJ5IGhlcmUuIFRoZSBwb3RlbnRpYWwgZm9yIG1lbW9yeSBlcnJvcnMgaXMgYWxyZWFkeSBhZGRyZXNzZWQgYnkgdGhlIGJ5dGUtYnktYnl0ZSBpbml0aWFsaXphdGlvbiB3aXRoIGEgY2hlY2sgZm9yIGVhY2ggYnl0ZS4gS0FTQU4gYW5kIHN0YW5kYXJkIHRvb2xzIHNob3VsZCBzdWZmaWNlIHRvIGNhdGNoIGFueSBwb3RlbnRpYWwgbWVtb3J5IGVycm9ycywgdGhvdWdoIEkgc2VlIG5vbmUgYXBwYXJlbnQuCgpJJiMzOTttIHNldHRpbmcgYE5lZWRzS01TQU49ZmFsc2VgIGZvciB0aGlzIHBhdGNoLiBNeSBhbmFseXNpcyBhbmQgdGhlIGxvdy1sZXZlbCBmdW5jdGlvbnMgdXNlZCBjb25maXJtIHRoYXQgdGhlIG1lbW9yeSBzYWZldHkgcmVxdWlyZW1lbnRzIGFyZSBtZXQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTAvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI0IDE0OjI0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGludHJvZHVjZXMgYSBuZXcgZnVuY3Rpb24gYGl4Z2JldmZfaHZfcmVhZF9saW5rc19lNjEwYCB3aGljaCByZWFkcyA0IGJ5dGVzIGZyb20gdGhlIFBDSSBjb25maWd1cmF0aW9uIHNwYWNlIGludG8gYSBsb2NhbCBzdGFjayBhcnJheSBgZGF0YWAuIFRoZSBhcnJheSBpcyBpbml0aWFsaXplZCBieXRlLWJ5LWJ5dGUgdXNpbmcgYHBjaV9yZWFkX2NvbmZpZ19ieXRlYC4gSWYgYW55IHJlYWQgZmFpbHMsIHRoZSBmdW5jdGlvbiByZXR1cm5zIGFuIGVycm9yIGltbWVkaWF0ZWx5LiBJZiBhbGwgcmVhZHMgc3VjY2VlZCwgdGhlIGFycmF5IGlzIGZ1bGx5IGluaXRpYWxpemVkIGJlZm9yZSBiZWluZyByZWFkIGJ5IGBnZXRfdW5hbGlnbmVkX2xlMzJgLiBUaGVyZSBpcyBubyByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGJlaW5nIHVzZWQgaW4gY29udHJvbCBmbG93LCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgbGVha2VkLiBTdGFuZGFyZCBLQVNBTiBhbmQgb3RoZXIgYnVnIGRldGVjdG9ycyBhcmUgc3VmZmljaWVudCB0byBjYXRjaCBhbnkgcG90ZW50aWFsIG91dC1vZi1ib3VuZHMgb3IgbWVtb3J5IGNvcnJ1cHRpb24gaXNzdWVzLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIG5ldyBmdW5jdGlvbiBgaXhnYmV2Zl9odl9yZWFkX2xpbmtzX2U2MTBgIHdoaWNoIHJlYWRzIDQgYnl0ZXMgZnJvbSB0aGUgUENJIGNvbmZpZ3VyYXRpb24gc3BhY2UgaW50byBhIGxvY2FsIHN0YWNrIGFycmF5IGBkYXRhYC4gVGhlIGFycmF5IGlzIGluaXRpYWxpemVkIGJ5dGUtYnktYnl0ZSB1c2luZyBgcGNpX3JlYWRfY29uZmlnX2J5dGVgLiBJZiBhbnkgcmVhZCBmYWlscywgdGhlIGZ1bmN0aW9uIHJldHVybnMgYW4gZXJyb3IgaW1tZWRpYXRlbHkuIElmIGFsbCByZWFkcyBzdWNjZWVkLCB0aGUgYXJyYXkgaXMgZnVsbHkgaW5pdGlhbGl6ZWQgYmVmb3JlIGJlaW5nIHJlYWQgYnkgYGdldF91bmFsaWduZWRfbGUzMmAuIFRoZXJlIGlzIG5vIHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgYmVpbmcgdXNlZCBpbiBjb250cm9sIGZsb3csIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciBsZWFrZWQuIFN0YW5kYXJkIEtBU0FOIGFuZCBvdGhlciBidWcgZGV0ZWN0b3JzIGFyZSBzdWZmaWNpZW50IHRvIGNhdGNoIGFueSBwb3RlbnRpYWwgb3V0LW9mLWJvdW5kcyBvciBtZW1vcnkgY29ycnVwdGlvbiBpc3N1ZXMuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI0VDE0OjE5OjE3Ljc5OTQyNzQ2NloiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjMwNDI4MDI3NzA0OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJORVRfVkVORE9SX0lOVEVMXCIsXG4gICAgXCJJWEdCRVZGXCIsXG4gICAgXCJQQ0lfTU1DT05GSUdcIixcbiAgICBcIlBDSV9NU0lcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJpeGdiZXZmX2dldF9saW5rX2tzZXR0aW5nc1wiLFxuICAgIFwiaXhnYmV2Zl9odl9jaGVja19tYWNfbGlua192ZlwiXG4gIF0sXG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIG5ldyBmdW5jdGlvbiBgaXhnYmV2Zl9odl9yZWFkX2xpbmtzX2U2MTBgIHdoaWNoIHJlYWRzIDQgYnl0ZXMgZnJvbSB0aGUgUENJIGNvbmZpZ3VyYXRpb24gc3BhY2UgaW50byBhIGxvY2FsIHN0YWNrIGFycmF5IGBkYXRhYC4gVGhlIGFycmF5IGlzIGluaXRpYWxpemVkIGJ5dGUtYnktYnl0ZSB1c2luZyBgcGNpX3JlYWRfY29uZmlnX2J5dGVgLiBJZiBhbnkgcmVhZCBmYWlscywgdGhlIGZ1bmN0aW9uIHJldHVybnMgYW4gZXJyb3IgaW1tZWRpYXRlbHkuIElmIGFsbCByZWFkcyBzdWNjZWVkLCB0aGUgYXJyYXkgaXMgZnVsbHkgaW5pdGlhbGl6ZWQgYmVmb3JlIGJlaW5nIHJlYWQgYnkgYGdldF91bmFsaWduZWRfbGUzMmAuIFRoZXJlIGlzIG5vIHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgYmVpbmcgdXNlZCBpbiBjb250cm9sIGZsb3csIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciBsZWFrZWQuIFN0YW5kYXJkIEtBU0FOIGFuZCBvdGhlciBidWcgZGV0ZWN0b3JzIGFyZSBzdWZmaWNpZW50IHRvIGNhdGNoIGFueSBwb3RlbnRpYWwgb3V0LW9mLWJvdW5kcyBvciBtZW1vcnkgY29ycnVwdGlvbiBpc3N1ZXMuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGl4Z2JldmYgZHJpdmVyIHRvIHJlYWQgbGluayBzcGVlZCBmcm9tIHRoZSBlbXVsYXRlZCBQQ0kgY29uZmlnIHNwYWNlIGZvciBIeXBlci1WIEU2MTAgVkZzLiBUaGlzIGxvZ2ljIGlzIHJlYWNoYWJsZSB2aWEgdGhlIGV0aHRvb2wgZ2V0X2xpbmtfa3NldHRpbmdzIGNhbGxiYWNrIGFuZCB0aGUgZHJpdmVyJ3MgYmFja2dyb3VuZCBsaW5rIGNoZWNrIHRhc2suIFN5emthbGxlciBjYW4gcmVhY2ggdGhpcyBjb2RlIGJ5IHVzaW5nIGl0cyBQQ0kgZGV2aWNlIGZ1enplciB0byBlbXVsYXRlIHRoZSBzcGVjaWZpYyBWRiBkZXZpY2UgSUQgYW5kIHRoZW4gaW50ZXJhY3Rpbmcgd2l0aCB0aGUgcmVnaXN0ZXJlZCBuZXRkZXYgdmlhIGV0aHRvb2wuIFRoZSBuZXcgbG9naWMgcmVxdWlyZXMgQ09ORklHX1BDSV9NTUNPTkZJRyB0byBiZSBlbmFibGVkIHRvIGFjdHVhbGx5IHBlcmZvcm0gdGhlIFBDSSBjb25maWcgc3BhY2UgcmVhZHMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI0VDE0OjE5OjE3Ljc5OTQzNDI3NloiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTc0NzUzMTU3MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IGMwMjI2ZjcyZjdiNTQ4M2ZlMjk3YzJkM2I2YzE3MzFiMDQ0MWUyOGNcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIE1vbiBBdWcgMjQgMTQ6MTk6MTUgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaXhnYmV2Zi9ldGh0b29sLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9peGdiZXZmL2V0aHRvb2wuY1xcbmluZGV4IDUzN2E2MGQ1Mjc2ZjAuLjI0NjNmY2NmZmQ0ZGEgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaXhnYmV2Zi9ldGh0b29sLmNcXG4rKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9peGdiZXZmL2V0aHRvb2wuY1xcbkBAIC04Myw2ICs4MywxOCBAQCBzdGF0aWMgaW50IGl4Z2JldmZfZ2V0X2xpbmtfa3NldHRpbmdzKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsXFxuIFxcdFxcdFxcdFxcdCAgICAgIHN0cnVjdCBldGh0b29sX2xpbmtfa3NldHRpbmdzICpjbWQpXFxuIHtcXG4gXFx0c3RydWN0IGl4Z2JldmZfYWRhcHRlciAqYWRhcHRlciA9IG5ldGRldl9wcml2KG5ldGRldik7XFxuK1xcdHN0cnVjdCBpeGdiZV9odyAqaHcgPSBcXHUwMDI2YWRhcHRlci1cXHUwMDNlaHc7XFxuK1xcbitcXHQvKiBFNjEwIEh5cGVyLVYgVkZzOiByZWFkIGN1cnJlbnQgbGluayBzcGVlZCBmcm9tIFBDSSBjb25maWcgc3BhY2VcXG4rXFx0ICogb24gZXZlcnkgbGluayBzcGVlZCBxdWVyeS5cXG4rXFx0ICovXFxuK1xcdGlmIChody1cXHUwMDNlbWFjLnR5cGUgPT0gaXhnYmVfbWFjX2U2MTBfdmYpIHtcXG4rXFx0XFx0c3Bpbl9sb2NrX2JoKFxcdTAwMjZhZGFwdGVyLVxcdTAwM2VtYnhfbG9jayk7XFxuK1xcdFxcdGh3LVxcdTAwM2VtYWMuZ2V0X2xpbmtfc3RhdHVzID0gdHJ1ZTtcXG4rXFx0XFx0aHctXFx1MDAzZW1hYy5vcHMuY2hlY2tfbGluayhodywgXFx1MDAyNmFkYXB0ZXItXFx1MDAzZWxpbmtfc3BlZWQsXFxuK1xcdFxcdFxcdFxcdCAgICAgICBcXHUwMDI2YWRhcHRlci1cXHUwMDNlbGlua191cCwgZmFsc2UpO1xcbitcXHRcXHRzcGluX3VubG9ja19iaChcXHUwMDI2YWRhcHRlci1cXHUwMDNlbWJ4X2xvY2spO1xcbitcXHR9XFxuIFxcbiBcXHRldGh0b29sX2xpbmtfa3NldHRpbmdzX3plcm9fbGlua19tb2RlKGNtZCwgc3VwcG9ydGVkKTtcXG4gXFx0ZXRodG9vbF9saW5rX2tzZXR0aW5nc19hZGRfbGlua19tb2RlKGNtZCwgc3VwcG9ydGVkLCAxMDAwMGJhc2VUX0Z1bGwpO1xcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9peGdiZXZmL3ZmLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9peGdiZXZmL3ZmLmNcXG5pbmRleCBmNmRmODZkMTI0YjllLi5hODRiNjI2NDFlOWJjIDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2l4Z2JldmYvdmYuY1xcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2l4Z2JldmYvdmYuY1xcbkBAIC0xLDE0ICsxLDE3IEBAXFxuIC8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXFxuIC8qIENvcHlyaWdodChjKSAxOTk5IC0gMjAyNCBJbnRlbCBDb3Jwb3JhdGlvbi4gKi9cXG4gXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC91bmFsaWduZWQuaFxcdTAwM2VcXG4rXFxuICNpbmNsdWRlIFxcXCJ2Zi5oXFxcIlxcbiAjaW5jbHVkZSBcXFwiaXhnYmV2Zi5oXFxcIlxcbiBcXG4tLyogT24gSHlwZXItViwgdG8gcmVzZXQsIHdlIG5lZWQgdG8gcmVhZCBmcm9tIHRoaXMgb2Zmc2V0XFxuLSAqIGZyb20gdGhlIFBDSSBjb25maWcgc3BhY2UuIFRoaXMgaXMgdGhlIG1lY2hhbmlzbSB1c2VkIG9uXFxuLSAqIEh5cGVyLVYgdG8gc3VwcG9ydCBQRi9WRiBjb21tdW5pY2F0aW9uLlxcbisvKiBPbiBIeXBlci1WIHRoZSBQRi9WRiBjb21tdW5pY2F0aW9uIGlzIHRocm91Z2ggZW11bGF0ZWQgUENJIGNvbmZpZ1xcbisgKiBzcGFjZS4gVGhlIHJlc2V0IGFuZCBsaW5rIHN0YXR1cyBhcmUgZXhwb3NlZCBhdCB0aGUgb2Zmc2V0cyBiZWxvdy5cXG4gICovXFxuLSNkZWZpbmUgSVhHQkVfSFZfUkVTRVRfT0ZGU0VUICAgICAgICAgICAweDIwMVxcbisjZGVmaW5lIElYR0JFX0hWX1JFU0VUX09GRlNFVFxcdFxcdDB4MjAxXFxuKyNkZWZpbmUgSVhHQkVfSFZfTElOS19TVEFUVVNfT0ZGU0VUXFx0MHgyMDlcXG4rI2RlZmluZSBJWEdCRV9IVl9MSU5LX1NUQVRVU19TSVpFXFx0NFxcbiBcXG4gc3RhdGljIGlubGluZSBzMzIgaXhnYmV2Zl93cml0ZV9tc2dfcmVhZF9hY2soc3RydWN0IGl4Z2JlX2h3ICpodywgdTMyICptc2csXFxuIFxcdFxcdFxcdFxcdFxcdCAgICAgdTMyICpyZXRtc2csIHUxNiBzaXplKVxcbkBAIC05MDEsNiArOTA0LDQwIEBAIHN0YXRpYyBzMzIgaXhnYmV2Zl9jaGVja19tYWNfbGlua192ZihzdHJ1Y3QgaXhnYmVfaHcgKmh3LFxcbiBcXHRyZXR1cm4gcmV0X3ZhbDtcXG4gfVxcbiBcXG4rLyoqXFxuKyAqIGl4Z2JldmZfaHZfcmVhZF9saW5rc19lNjEwIC0gcmVhZCBsaW5rIHN0YXR1cyBmcm9tIFBDSSBjb25maWcgc3BhY2VcXG4rICogQGh3OiBwb2ludGVyIHRvIGhhcmR3YXJlIHN0cnVjdHVyZVxcbisgKiBAbGlua3NfcmVnOiBwb2ludGVyIHRvIHN0b3JlIHJlYWQgdmFsdWVcXG4rICpcXG4rICogT24gSHlwZXItViBFNjEwIFZGcyB0aGUgVkZMSU5LUyByZWdpc3RlciBkb2VzIG5vdCBjYXJyeSB2YWxpZCBsaW5rIHNwZWVkLlxcbisgKiBJbnN0ZWFkLCBsaW5rIHN0YXR1cyBpcyBleHBvc2VkIHRocm91Z2ggZW11bGF0ZWQgUENJIGNvbmZpZyBzcGFjZSBhdCBvZmZzZXRcXG4rICogMHgyMDkgaW4gVkZMSU5LUyByZWdpc3RlciBmb3JtYXQuXFxuKyAqXFxuKyAqIFJldHVybjogMCBvbiBzdWNjZXNzLCBuZWdhdGl2ZSBlcnJvciBjb2RlIG9uIGZhaWx1cmUuXFxuKyAqL1xcbitzdGF0aWMgczMyIGl4Z2JldmZfaHZfcmVhZF9saW5rc19lNjEwKHN0cnVjdCBpeGdiZV9odyAqaHcsIHUzMiAqbGlua3NfcmVnKVxcbit7XFxuK1xcdHN0cnVjdCBpeGdiZXZmX2FkYXB0ZXIgKmFkYXB0ZXIgPSBody1cXHUwMDNlYmFjaztcXG4rXFx0dTggZGF0YVtJWEdCRV9IVl9MSU5LX1NUQVRVU19TSVpFXTtcXG4rXFxuK1xcdGlmICghSVNfRU5BQkxFRChDT05GSUdfUENJX01NQ09ORklHKSkge1xcbitcXHRcXHRkZXZfZXJyX29uY2UoXFx1MDAyNmFkYXB0ZXItXFx1MDAzZXBkZXYtXFx1MDAzZWRldixcXG4rXFx0XFx0XFx0ICAgICBcXFwiY2Fubm90IHJlYWQgbGluayBzdGF0dXMsIFBDSV9NTUNPTkZJRyBpcyByZXF1aXJlZCBmb3IgSHlwZXItVlxcXFxuXFxcIik7XFxuK1xcdFxcdHJldHVybiAtRU9QTk9UU1VQUDtcXG4rXFx0fVxcbitcXG4rXFx0Zm9yIChpbnQgaSA9IDA7IGkgXFx1MDAzYyBJWEdCRV9IVl9MSU5LX1NUQVRVU19TSVpFOyBpKyspIHtcXG4rXFx0XFx0aW50IHJldCA9IHBjaV9yZWFkX2NvbmZpZ19ieXRlKGFkYXB0ZXItXFx1MDAzZXBkZXYsXFxuK1xcdFxcdFxcdFxcdFxcdCAgICAgICBJWEdCRV9IVl9MSU5LX1NUQVRVU19PRkZTRVQgKyBpLFxcbitcXHRcXHRcXHRcXHRcXHQgICAgICAgXFx1MDAyNmRhdGFbaV0pO1xcbitcXHRcXHRpZiAocmV0KVxcbitcXHRcXHRcXHRyZXR1cm4gcGNpYmlvc19lcnJfdG9fZXJybm8ocmV0KTtcXG4rXFx0fVxcbitcXG4rXFx0KmxpbmtzX3JlZyA9IGdldF91bmFsaWduZWRfbGUzMihkYXRhKTtcXG4rXFx0cmV0dXJuIDA7XFxuK31cXG4rXFxuIC8qKlxcbiAgKiBpeGdiZXZmX2h2X2NoZWNrX21hY19saW5rX3ZmIC0gY2hlY2sgbGlua1xcbiAgKiBAaHc6IHBvaW50ZXIgdG8gcHJpdmF0ZSBoYXJkd2FyZSBzdHJ1Y3RcXG5AQCAtOTA5LDYgKzk0Niw3IEBAIHN0YXRpYyBzMzIgaXhnYmV2Zl9jaGVja19tYWNfbGlua192ZihzdHJ1Y3QgaXhnYmVfaHcgKmh3LFxcbiAgKiBAYXV0b25lZ193YWl0X3RvX2NvbXBsZXRlOiB1bnVzZWRcXG4gICpcXG4gICogSHlwZXItViB2YXJpYW50OyB0aGVyZSBpcyBubyBtYWlsYm94IGNvbW11bmljYXRpb24uXFxuKyAqIEZvciBFNjEwIFZGcywgbGluayBzdGF0dXMgaXMgcmVhZCBmcm9tIGVtdWxhdGVkIFBDSSBjb25maWcgc3BhY2UuXFxuICAqL1xcbiBzdGF0aWMgczMyIGl4Z2JldmZfaHZfY2hlY2tfbWFjX2xpbmtfdmYoc3RydWN0IGl4Z2JlX2h3ICpodyxcXG4gXFx0XFx0XFx0XFx0XFx0aXhnYmVfbGlua19zcGVlZCAqc3BlZWQsXFxuQEAgLTkyNiw4ICs5NjQsMTYgQEAgc3RhdGljIHMzMiBpeGdiZXZmX2h2X2NoZWNrX21hY19saW5rX3ZmKHN0cnVjdCBpeGdiZV9odyAqaHcsXFxuIFxcdGlmICghbWFjLVxcdTAwM2VnZXRfbGlua19zdGF0dXMpXFxuIFxcdFxcdGdvdG8gb3V0O1xcbiBcXG4tXFx0LyogaWYgbGluayBzdGF0dXMgaXMgZG93biBubyBwb2ludCBpbiBjaGVja2luZyB0byBzZWUgaWYgcGYgaXMgdXAgKi9cXG4tXFx0bGlua3NfcmVnID0gSVhHQkVfUkVBRF9SRUcoaHcsIElYR0JFX1ZGTElOS1MpO1xcbitcXHRpZiAobWFjLVxcdTAwM2V0eXBlID09IGl4Z2JlX21hY19lNjEwX3ZmKSB7XFxuK1xcdFxcdGlmIChpeGdiZXZmX2h2X3JlYWRfbGlua3NfZTYxMChodywgXFx1MDAyNmxpbmtzX3JlZykpIHtcXG4rXFx0XFx0XFx0KmxpbmtfdXAgPSBmYWxzZTtcXG4rXFx0XFx0XFx0KnNwZWVkID0gSVhHQkVfTElOS19TUEVFRF9VTktOT1dOO1xcbitcXHRcXHRcXHRyZXR1cm4gMDtcXG4rXFx0XFx0fVxcbitcXHR9IGVsc2Uge1xcbitcXHRcXHRsaW5rc19yZWcgPSBJWEdCRV9SRUFEX1JFRyhodywgSVhHQkVfVkZMSU5LUyk7XFxuK1xcdH1cXG4rXFxuIFxcdGlmICghKGxpbmtzX3JlZyBcXHUwMDI2IElYR0JFX0xJTktTX1VQKSlcXG4gXFx0XFx0Z290byBvdXQ7XFxuIFxcbkBAIC05NDEsOCArOTg3LDExIEBAIHN0YXRpYyBzMzIgaXhnYmV2Zl9odl9jaGVja19tYWNfbGlua192ZihzdHJ1Y3QgaXhnYmVfaHcgKmh3LFxcbiBcXHRcXHRcXHR1ZGVsYXkoMTAwKTtcXG4gXFx0XFx0XFx0bGlua3NfcmVnID0gSVhHQkVfUkVBRF9SRUcoaHcsIElYR0JFX1ZGTElOS1MpO1xcbiBcXG4tXFx0XFx0XFx0aWYgKCEobGlua3NfcmVnIFxcdTAwMjYgSVhHQkVfTElOS1NfVVApKVxcbi1cXHRcXHRcXHRcXHRnb3RvIG91dDtcXG4rXFx0XFx0XFx0aWYgKCEobGlua3NfcmVnIFxcdTAwMjYgSVhHQkVfTElOS1NfVVApKSB7XFxuK1xcdFxcdFxcdFxcdCpsaW5rX3VwID0gZmFsc2U7XFxuK1xcdFxcdFxcdFxcdCpzcGVlZCA9IElYR0JFX0xJTktfU1BFRURfVU5LTk9XTjtcXG4rXFx0XFx0XFx0XFx0cmV0dXJuIDA7XFxuK1xcdFxcdFxcdH1cXG4gXFx0XFx0fVxcbiBcXHR9XFxuIFxcbkBAIC05NTYsNiArMTAwNSw5IEBAIHN0YXRpYyBzMzIgaXhnYmV2Zl9odl9jaGVja19tYWNfbGlua192ZihzdHJ1Y3QgaXhnYmVfaHcgKmh3LFxcbiBcXHRjYXNlIElYR0JFX0xJTktTX1NQRUVEXzEwMF84MjU5OTpcXG4gXFx0XFx0KnNwZWVkID0gSVhHQkVfTElOS19TUEVFRF8xMDBfRlVMTDtcXG4gXFx0XFx0YnJlYWs7XFxuK1xcdGRlZmF1bHQ6XFxuK1xcdFxcdCpzcGVlZCA9IElYR0JFX0xJTktfU1BFRURfVU5LTk9XTjtcXG4rXFx0XFx0YnJlYWs7XFxuIFxcdH1cXG4gXFxuIFxcdC8qIGlmIHdlIHBhc3NlZCBhbGwgdGhlIHRlc3RzIGFib3ZlIHRoZW4gdGhlIGxpbmsgaXMgdXAgYW5kIHdlIG5vXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI0VDE0OjE5OjE5LjU0Nzg4NjUwOFoiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImJlc3QtZXhwZW5zaXZlIiwiRHVyYXRpb24iOjI4NDg4ODQ1NzkyNiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJORVRfVkVORE9SX0lOVEVMXCIsXG4gICAgXCJJWEdCRVZGXCIsXG4gICAgXCJQQ0lfTU1DT05GSUdcIixcbiAgICBcIlBDSV9NU0lcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJpeGdiZXZmX2dldF9saW5rX2tzZXR0aW5nc1wiLFxuICAgIFwiaXhnYmV2Zl9odl9jaGVja19tYWNfbGlua192ZlwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBpeGdiZXZmIGRyaXZlciB0byByZWFkIGxpbmsgc3BlZWQgZnJvbSB0aGUgZW11bGF0ZWQgUENJIGNvbmZpZyBzcGFjZSBmb3IgSHlwZXItViBFNjEwIFZGcy4gVGhpcyBsb2dpYyBpcyByZWFjaGFibGUgdmlhIHRoZSBldGh0b29sIGdldF9saW5rX2tzZXR0aW5ncyBjYWxsYmFjayBhbmQgdGhlIGRyaXZlcidzIGJhY2tncm91bmQgbGluayBjaGVjayB0YXNrLiBTeXprYWxsZXIgY2FuIHJlYWNoIHRoaXMgY29kZSBieSB1c2luZyBpdHMgUENJIGRldmljZSBmdXp6ZXIgdG8gZW11bGF0ZSB0aGUgc3BlY2lmaWMgVkYgZGV2aWNlIElEIGFuZCB0aGVuIGludGVyYWN0aW5nIHdpdGggdGhlIHJlZ2lzdGVyZWQgbmV0ZGV2IHZpYSBldGh0b29sLiBUaGUgbmV3IGxvZ2ljIHJlcXVpcmVzIENPTkZJR19QQ0lfTU1DT05GSUcgdG8gYmUgZW5hYmxlZCB0byBhY3R1YWxseSBwZXJmb3JtIHRoZSBQQ0kgY29uZmlnIHNwYWNlIHJlYWRzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lXG5pZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5XG51c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLlxuXG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOlxuLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLlxuLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy5cbi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LlxuLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsXG4gIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cbi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsXG4gIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLlxuLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKVxuICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuXG5cbklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2hcbnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlxuXG5XaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzpcbjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuXG4gICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy5cbiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9uc1xuICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuXG4yLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS5cbiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbiAgIEFsc28gY2hlY2sgXCJkZXBlbmRzIG9uXCIgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzXG4gICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3NcbiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCBjMDIyNmY3MmY3YjU0ODNmZTI5N2MyZDNiNmMxNzMxYjA0NDFlMjhjXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIE1vbiBBdWcgMjQgMTQ6MTk6MTUgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9peGdiZXZmL2V0aHRvb2wuYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2l4Z2JldmYvZXRodG9vbC5jXG5pbmRleCA1MzdhNjBkNTI3NmYwLi4yNDYzZmNjZmZkNGRhIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaXhnYmV2Zi9ldGh0b29sLmNcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2l4Z2JldmYvZXRodG9vbC5jXG5AQCAtODMsNiArODMsMTggQEAgc3RhdGljIGludCBpeGdiZXZmX2dldF9saW5rX2tzZXR0aW5ncyhzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LFxuIFx0XHRcdFx0ICAgICAgc3RydWN0IGV0aHRvb2xfbGlua19rc2V0dGluZ3MgKmNtZClcbiB7XG4gXHRzdHJ1Y3QgaXhnYmV2Zl9hZGFwdGVyICphZGFwdGVyID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTtcbitcdHN0cnVjdCBpeGdiZV9odyAqaHcgPSBcdTAwMjZhZGFwdGVyLVx1MDAzZWh3O1xuK1xuK1x0LyogRTYxMCBIeXBlci1WIFZGczogcmVhZCBjdXJyZW50IGxpbmsgc3BlZWQgZnJvbSBQQ0kgY29uZmlnIHNwYWNlXG4rXHQgKiBvbiBldmVyeSBsaW5rIHNwZWVkIHF1ZXJ5LlxuK1x0ICovXG4rXHRpZiAoaHctXHUwMDNlbWFjLnR5cGUgPT0gaXhnYmVfbWFjX2U2MTBfdmYpIHtcbitcdFx0c3Bpbl9sb2NrX2JoKFx1MDAyNmFkYXB0ZXItXHUwMDNlbWJ4X2xvY2spO1xuK1x0XHRody1cdTAwM2VtYWMuZ2V0X2xpbmtfc3RhdHVzID0gdHJ1ZTtcbitcdFx0aHctXHUwMDNlbWFjLm9wcy5jaGVja19saW5rKGh3LCBcdTAwMjZhZGFwdGVyLVx1MDAzZWxpbmtfc3BlZWQsXG4rXHRcdFx0XHQgICAgICAgXHUwMDI2YWRhcHRlci1cdTAwM2VsaW5rX3VwLCBmYWxzZSk7XG4rXHRcdHNwaW5fdW5sb2NrX2JoKFx1MDAyNmFkYXB0ZXItXHUwMDNlbWJ4X2xvY2spO1xuK1x0fVxuIFxuIFx0ZXRodG9vbF9saW5rX2tzZXR0aW5nc196ZXJvX2xpbmtfbW9kZShjbWQsIHN1cHBvcnRlZCk7XG4gXHRldGh0b29sX2xpbmtfa3NldHRpbmdzX2FkZF9saW5rX21vZGUoY21kLCBzdXBwb3J0ZWQsIDEwMDAwYmFzZVRfRnVsbCk7XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaXhnYmV2Zi92Zi5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaXhnYmV2Zi92Zi5jXG5pbmRleCBmNmRmODZkMTI0YjllLi5hODRiNjI2NDFlOWJjIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaXhnYmV2Zi92Zi5jXG4rKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9peGdiZXZmL3ZmLmNcbkBAIC0xLDE0ICsxLDE3IEBAXG4gLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjBcbiAvKiBDb3B5cmlnaHQoYykgMTk5OSAtIDIwMjQgSW50ZWwgQ29ycG9yYXRpb24uICovXG4gXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvdW5hbGlnbmVkLmhcdTAwM2VcbitcbiAjaW5jbHVkZSBcInZmLmhcIlxuICNpbmNsdWRlIFwiaXhnYmV2Zi5oXCJcbiBcbi0vKiBPbiBIeXBlci1WLCB0byByZXNldCwgd2UgbmVlZCB0byByZWFkIGZyb20gdGhpcyBvZmZzZXRcbi0gKiBmcm9tIHRoZSBQQ0kgY29uZmlnIHNwYWNlLiBUaGlzIGlzIHRoZSBtZWNoYW5pc20gdXNlZCBvblxuLSAqIEh5cGVyLVYgdG8gc3VwcG9ydCBQRi9WRiBjb21tdW5pY2F0aW9uLlxuKy8qIE9uIEh5cGVyLVYgdGhlIFBGL1ZGIGNvbW11bmljYXRpb24gaXMgdGhyb3VnaCBlbXVsYXRlZCBQQ0kgY29uZmlnXG4rICogc3BhY2UuIFRoZSByZXNldCBhbmQgbGluayBzdGF0dXMgYXJlIGV4cG9zZWQgYXQgdGhlIG9mZnNldHMgYmVsb3cuXG4gICovXG4tI2RlZmluZSBJWEdCRV9IVl9SRVNFVF9PRkZTRVQgICAgICAgICAgIDB4MjAxXG4rI2RlZmluZSBJWEdCRV9IVl9SRVNFVF9PRkZTRVRcdFx0MHgyMDFcbisjZGVmaW5lIElYR0JFX0hWX0xJTktfU1RBVFVTX09GRlNFVFx0MHgyMDlcbisjZGVmaW5lIElYR0JFX0hWX0xJTktfU1RBVFVTX1NJWkVcdDRcbiBcbiBzdGF0aWMgaW5saW5lIHMzMiBpeGdiZXZmX3dyaXRlX21zZ19yZWFkX2FjayhzdHJ1Y3QgaXhnYmVfaHcgKmh3LCB1MzIgKm1zZyxcbiBcdFx0XHRcdFx0ICAgICB1MzIgKnJldG1zZywgdTE2IHNpemUpXG5AQCAtOTAxLDYgKzkwNCw0MCBAQCBzdGF0aWMgczMyIGl4Z2JldmZfY2hlY2tfbWFjX2xpbmtfdmYoc3RydWN0IGl4Z2JlX2h3ICpodyxcbiBcdHJldHVybiByZXRfdmFsO1xuIH1cbiBcbisvKipcbisgKiBpeGdiZXZmX2h2X3JlYWRfbGlua3NfZTYxMCAtIHJlYWQgbGluayBzdGF0dXMgZnJvbSBQQ0kgY29uZmlnIHNwYWNlXG4rICogQGh3OiBwb2ludGVyIHRvIGhhcmR3YXJlIHN0cnVjdHVyZVxuKyAqIEBsaW5rc19yZWc6IHBvaW50ZXIgdG8gc3RvcmUgcmVhZCB2YWx1ZVxuKyAqXG4rICogT24gSHlwZXItViBFNjEwIFZGcyB0aGUgVkZMSU5LUyByZWdpc3RlciBkb2VzIG5vdCBjYXJyeSB2YWxpZCBsaW5rIHNwZWVkLlxuKyAqIEluc3RlYWQsIGxpbmsgc3RhdHVzIGlzIGV4cG9zZWQgdGhyb3VnaCBlbXVsYXRlZCBQQ0kgY29uZmlnIHNwYWNlIGF0IG9mZnNldFxuKyAqIDB4MjA5IGluIFZGTElOS1MgcmVnaXN0ZXIgZm9ybWF0LlxuKyAqXG4rICogUmV0dXJuOiAwIG9uIHN1Y2Nlc3MsIG5lZ2F0aXZlIGVycm9yIGNvZGUgb24gZmFpbHVyZS5cbisgKi9cbitzdGF0aWMgczMyIGl4Z2JldmZfaHZfcmVhZF9saW5rc19lNjEwKHN0cnVjdCBpeGdiZV9odyAqaHcsIHUzMiAqbGlua3NfcmVnKVxuK3tcbitcdHN0cnVjdCBpeGdiZXZmX2FkYXB0ZXIgKmFkYXB0ZXIgPSBody1cdTAwM2ViYWNrO1xuK1x0dTggZGF0YVtJWEdCRV9IVl9MSU5LX1NUQVRVU19TSVpFXTtcbitcbitcdGlmICghSVNfRU5BQkxFRChDT05GSUdfUENJX01NQ09ORklHKSkge1xuK1x0XHRkZXZfZXJyX29uY2UoXHUwMDI2YWRhcHRlci1cdTAwM2VwZGV2LVx1MDAzZWRldixcbitcdFx0XHQgICAgIFwiY2Fubm90IHJlYWQgbGluayBzdGF0dXMsIFBDSV9NTUNPTkZJRyBpcyByZXF1aXJlZCBmb3IgSHlwZXItVlxcblwiKTtcbitcdFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xuK1x0fVxuK1xuK1x0Zm9yIChpbnQgaSA9IDA7IGkgXHUwMDNjIElYR0JFX0hWX0xJTktfU1RBVFVTX1NJWkU7IGkrKykge1xuK1x0XHRpbnQgcmV0ID0gcGNpX3JlYWRfY29uZmlnX2J5dGUoYWRhcHRlci1cdTAwM2VwZGV2LFxuK1x0XHRcdFx0XHQgICAgICAgSVhHQkVfSFZfTElOS19TVEFUVVNfT0ZGU0VUICsgaSxcbitcdFx0XHRcdFx0ICAgICAgIFx1MDAyNmRhdGFbaV0pO1xuK1x0XHRpZiAocmV0KVxuK1x0XHRcdHJldHVybiBwY2liaW9zX2Vycl90b19lcnJubyhyZXQpO1xuK1x0fVxuK1xuK1x0KmxpbmtzX3JlZyA9IGdldF91bmFsaWduZWRfbGUzMihkYXRhKTtcbitcdHJldHVybiAwO1xuK31cbitcbiAvKipcbiAgKiBpeGdiZXZmX2h2X2NoZWNrX21hY19saW5rX3ZmIC0gY2hlY2sgbGlua1xuICAqIEBodzogcG9pbnRlciB0byBwcml2YXRlIGhhcmR3YXJlIHN0cnVjdFxuQEAgLTkwOSw2ICs5NDYsNyBAQCBzdGF0aWMgczMyIGl4Z2JldmZfY2hlY2tfbWFjX2xpbmtfdmYoc3RydWN0IGl4Z2JlX2h3ICpodyxcbiAgKiBAYXV0b25lZ193YWl0X3RvX2NvbXBsZXRlOiB1bnVzZWRcbiAgKlxuICAqIEh5cGVyLVYgdmFyaWFudDsgdGhlcmUgaXMgbm8gbWFpbGJveCBjb21tdW5pY2F0aW9uLlxuKyAqIEZvciBFNjEwIFZGcywgbGluayBzdGF0dXMgaXMgcmVhZCBmcm9tIGVtdWxhdGVkIFBDSSBjb25maWcgc3BhY2UuXG4gICovXG4gc3RhdGljIHMzMiBpeGdiZXZmX2h2X2NoZWNrX21hY19saW5rX3ZmKHN0cnVjdCBpeGdiZV9odyAqaHcsXG4gXHRcdFx0XHRcdGl4Z2JlX2xpbmtfc3BlZWQgKnNwZWVkLFxuQEAgLTkyNiw4ICs5NjQsMTYgQEAgc3RhdGljIHMzMiBpeGdiZXZmX2h2X2NoZWNrX21hY19saW5rX3ZmKHN0cnVjdCBpeGdiZV9odyAqaHcsXG4gXHRpZiAoIW1hYy1cdTAwM2VnZXRfbGlua19zdGF0dXMpXG4gXHRcdGdvdG8gb3V0O1xuIFxuLVx0LyogaWYgbGluayBzdGF0dXMgaXMgZG93biBubyBwb2ludCBpbiBjaGVja2luZyB0byBzZWUgaWYgcGYgaXMgdXAgKi9cbi1cdGxpbmtzX3JlZyA9IElYR0JFX1JFQURfUkVHKGh3LCBJWEdCRV9WRkxJTktTKTtcbitcdGlmIChtYWMtXHUwMDNldHlwZSA9PSBpeGdiZV9tYWNfZTYxMF92Zikge1xuK1x0XHRpZiAoaXhnYmV2Zl9odl9yZWFkX2xpbmtzX2U2MTAoaHcsIFx1MDAyNmxpbmtzX3JlZykpIHtcbitcdFx0XHQqbGlua191cCA9IGZhbHNlO1xuK1x0XHRcdCpzcGVlZCA9IElYR0JFX0xJTktfU1BFRURfVU5LTk9XTjtcbitcdFx0XHRyZXR1cm4gMDtcbitcdFx0fVxuK1x0fSBlbHNlIHtcbitcdFx0bGlua3NfcmVnID0gSVhHQkVfUkVBRF9SRUcoaHcsIElYR0JFX1ZGTElOS1MpO1xuK1x0fVxuK1xuIFx0aWYgKCEobGlua3NfcmVnIFx1MDAyNiBJWEdCRV9MSU5LU19VUCkpXG4gXHRcdGdvdG8gb3V0O1xuIFxuQEAgLTk0MSw4ICs5ODcsMTEgQEAgc3RhdGljIHMzMiBpeGdiZXZmX2h2X2NoZWNrX21hY19saW5rX3ZmKHN0cnVjdCBpeGdiZV9odyAqaHcsXG4gXHRcdFx0dWRlbGF5KDEwMCk7XG4gXHRcdFx0bGlua3NfcmVnID0gSVhHQkVfUkVBRF9SRUcoaHcsIElYR0JFX1ZGTElOS1MpO1xuIFxuLVx0XHRcdGlmICghKGxpbmtzX3JlZyBcdTAwMjYgSVhHQkVfTElOS1NfVVApKVxuLVx0XHRcdFx0Z290byBvdXQ7XG4rXHRcdFx0aWYgKCEobGlua3NfcmVnIFx1MDAyNiBJWEdCRV9MSU5LU19VUCkpIHtcbitcdFx0XHRcdCpsaW5rX3VwID0gZmFsc2U7XG4rXHRcdFx0XHQqc3BlZWQgPSBJWEdCRV9MSU5LX1NQRUVEX1VOS05PV047XG4rXHRcdFx0XHRyZXR1cm4gMDtcbitcdFx0XHR9XG4gXHRcdH1cbiBcdH1cbiBcbkBAIC05NTYsNiArMTAwNSw5IEBAIHN0YXRpYyBzMzIgaXhnYmV2Zl9odl9jaGVja19tYWNfbGlua192ZihzdHJ1Y3QgaXhnYmVfaHcgKmh3LFxuIFx0Y2FzZSBJWEdCRV9MSU5LU19TUEVFRF8xMDBfODI1OTk6XG4gXHRcdCpzcGVlZCA9IElYR0JFX0xJTktfU1BFRURfMTAwX0ZVTEw7XG4gXHRcdGJyZWFrO1xuK1x0ZGVmYXVsdDpcbitcdFx0KnNwZWVkID0gSVhHQkVfTElOS19TUEVFRF9VTktOT1dOO1xuK1x0XHRicmVhaztcbiBcdH1cbiBcbiBcdC8qIGlmIHdlIHBhc3NlZCBhbGwgdGhlIHRlc3RzIGFib3ZlIHRoZW4gdGhlIGxpbmsgaXMgdXAgYW5kIHdlIG5vXG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNFQxNDoxOToxOS41NDc4ODgxODhaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxNDg3OTA5NDYzMCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIFBhdGNoIGZvciBGdXp6aW5nIFN1aXRhYmlsaXR5KipcblxuT2theSwgc28gSSd2ZSBnb3QgdGhpcyBwYXRjaCB0aGF0IHR3ZWFrcyB0aGUgYGl4Z2JldmZgIGRyaXZlciDigJMgc3BlY2lmaWNhbGx5IGluIGBldGh0b29sLmNgIGFuZCBgdmYuY2AuIEl0J3MgYWRkaW5nIHNvbWUgbG9naWMgdG8gcmVhZCBsaW5rIHNwZWVkIGZyb20gdGhlIFBDSSBjb25maWcgc3BhY2UsIGJ1dCBvbmx5IGZvciBIeXBlci1WIEU2MTAgVkZzLiAgTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMsIFwiV29ydGhGdXp6aW5nPWZhbHNlP1wiICBUaGUgaW5zdHJ1Y3Rpb25zIHNheSB0byBmbGFnIHBhdGNoZXMgdGhhdCB0b3VjaCB2ZW5kb3Itc3BlY2lmaWMgUENJZSBkcml2ZXJzIG5vdCBlbXVsYXRlZCBieSBzdGFuZGFyZCBRRU1VLiAgXG5cblNvLCBpcyBgaXhnYmV2ZmAgdmVuZG9yLXNwZWNpZmljPyBJdCAqaXMqIHRoZSBJbnRlbCAxMCBHaWdhYml0IFZpcnR1YWwgRnVuY3Rpb24gZHJpdmVyLiBJbnRlbCBOSUNzIChlMTAwMCwgZTEwMDBlLCBpZ2IsIGl4Z2JlLCBpNDBlKSBhcmUgZ2VuZXJhbGx5IHN0YW5kYXJkIE5JQ3MuICBIb3dldmVyLCBgaXhnYmV2ZmAgaXMgYSBWRiBkcml2ZXI7IGFuZCBWRidzIGFyZSBhbHdheXMgYSBsaXR0bGUgdHJpY2tpZXIuICBEb2VzIHN0YW5kYXJkIFFFTVUgZW11bGF0ZSBpdD8gUUVNVSBlbXVsYXRlcyBgaXhnYmVgICh0aGUgcGh5c2ljYWwgZnVuY3Rpb24pLCBidXQgbm90LCB0byBteSBrbm93bGVkZ2UsIHRoZSBWRi4gV2FpdCwgdGhlIHByb21wdCBzYXlzIHRoZSBmb2xsb3dpbmcgc2hvdWxkIGJlIGNvbnNpZGVyZWQsIFwiKipDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCwgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUqKlwiLlxuXG5BaGEhIFRoaXMgcGF0Y2ggc3BlY2lmaWNhbGx5IGNhbGxzIG91dCBcIkh5cGVyLVYgRTYxMCBWRnMuXCIgIFRoZSB0ZXh0IHNheXMgdGhlIFBGL1ZGIGNvbW11bmljYXRpb24gaGFwcGVucyB0aHJvdWdoICplbXVsYXRlZCogUENJIGNvbmZpZyBzcGFjZSBvbiBIeXBlci1WLiBFNjEwIGlzIGFuIEludGVsIEV0aGVybmV0IENvbnRyb2xsZXIsIGxpa2UgdGhlIEU4MTAsIGJ1dCBub3QgdGhlIEU4MTAuIERvZXMgc3RhbmRhcmQgUUVNVSBlbXVsYXRlIEU2MTA/IE5vLCB0aGF0J3MgZGVmaW5pdGVseSBub3QgZW11bGF0ZWQuIFFFTVUgZW11bGF0ZXMgb3RoZXIgSW50ZWwgTklDcyBidXQgbm90IHRoZSBFNjEwIChvciBFNjEwIFZGcykgdG8gbXkga25vd2xlZGdlLiBTbyB3ZSdyZSBkZWFsaW5nIHdpdGggYSBkcml2ZXIsIGBpeGdiZXZmYCBmb3IgODI1OTksIFg1NDAsIFg1NTAsICphbmQqIEU2MTAgVkZzLiBBbmQgaXQgbG9va3MgbGlrZSBpdCBuZWVkcyBlaXRoZXIgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSAqb3IqIHRoZSBIeXBlci1WIFZGIHBhc3MtdGhyb3VnaCB0byB3b3JrIGNvcnJlY3RseS5cblxuQ2FuIHN5emthbGxlciBoYW5kbGUgdGhpcz8gU3l6a2FsbGVyIHVzZXMgUUVNVSBvciBHQ0UuIEdDRSBoYXMgZ1ZOSUMsIGJ1dCBub3QgaXhnYmV2Zi4gQW5kLCBpbiBzdGFuZGFyZCBRRU1VLCB0aGVyZSdzIG5vIGl4Z2JldmYgZW11bGF0aW9uLCBvbmx5IHRoZSBpeGdiZSBQRi4gIEkga25vdyBzeXprYWxsZXIgaGFzIGBzeXpfcGNpX3NldHVwYCBhbmQgYHN5el9wY2lfZGV2aWNlYCwgd2hpY2ggKmNvdWxkKiBlbXVsYXRlIFBDSSBkZXZpY2VzIHZpYSB2aGNpIG9yIHNvbWV0aGluZyBzaW1pbGFyLiBCdXQsIGRvZXMgdGhhdCByZWFsbHkgcHJvdmlkZSB0aGUgZ3JhbnVsYXJpdHkgbmVlZGVkIHRvIGZ1bGx5IGVtdWxhdGUgdGhlIHNwZWNpZmljIHJlZ2lzdGVycyBhbmQgYmVoYXZpb3JzIG9mIGFuIGBpeGdiZXZmYD8gUHJvYmFibHkgbm90LCB1bmxlc3MgaXQgd2VyZSB3cml0dGVuIGluIHN5emxhbmcuIFN5emthbGxlciBoYXMgc29tZSBQQ0kgZnV6emluZywgYnV0IGl0J3MgcHJldHR5IGxpbWl0ZWQuXG5cblNvLCByZWFsaXN0aWNhbGx5LCBpcyBpeGdiZXZmIGFjdHVhbGx5IGZ1enplZCBieSBzeXprYWxsZXIgY3VycmVudGx5PyBJIHNob3VsZCBwcm9iYWJseSBjaGVjayB0aGF0LCBidXQgYmFzZWQgb24gd2hhdCBJIGtub3cgbm93LCBJJ20gbGVhbmluZyBoZWF2aWx5IHRvd2FyZHMgXCJub1wiLlxuXG5cbiIsIklucHV0VG9rZW5zIjozODQyLCJPdXRwdXRUb2tlbnMiOjI0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6ODg2LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjRUMTQ6MTk6MzQuNDI2OTg1NDc3WiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ1Mjk5Mzg0NDQsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiaXhnYmV2ZlwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiXFxuRnVsbCBvdXRwdXQgaXMgdG9vIGxvbmcsIHNob3dpbmcgNTAwIG91dCBvZiAzNDg3IGxpbmVzLlxcblVzZSBtb3JlIHByZWNpc2UgZXhwcmVzc2lvbiBpZiBwb3NzaWJsZS5cXG5cXG5Eb2N1bWVudGF0aW9uLy5yZW5hbWVzLnR4dD04MTc9bmV0d29ya2luZy9kZXZpY2VfZHJpdmVycy9pbnRlbC9peGdiZSBuZXR3b3JraW5nL2RldmljZV9kcml2ZXJzL2V0aGVybmV0L2ludGVsL2l4Z2JlXFxuRG9jdW1lbnRhdGlvbi8ucmVuYW1lcy50eHQ6ODE4Om5ldHdvcmtpbmcvZGV2aWNlX2RyaXZlcnMvaW50ZWwvaXhnYmV2ZiBuZXR3b3JraW5nL2RldmljZV9kcml2ZXJzL2V0aGVybmV0L2ludGVsL2l4Z2JldmZcXG5Eb2N1bWVudGF0aW9uLy5yZW5hbWVzLnR4dC04MTktbmV0d29ya2luZy9kZXZpY2VfZHJpdmVycy9tYXJ2ZWxsL29jdGVvbnR4MiBuZXR3b3JraW5nL2RldmljZV9kcml2ZXJzL2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyXFxuLS1cXG5Eb2N1bWVudGF0aW9uLy5yZW5hbWVzLnR4dD04NDM9bmV0d29ya2luZy9peGdiZSBuZXR3b3JraW5nL2RldmljZV9kcml2ZXJzL2V0aGVybmV0L2ludGVsL2l4Z2JlXFxuRG9jdW1lbnRhdGlvbi8ucmVuYW1lcy50eHQ6ODQ0Om5ldHdvcmtpbmcvaXhnYmV2ZiBuZXR3b3JraW5nL2RldmljZV9kcml2ZXJzL2V0aGVybmV0L2ludGVsL2l4Z2JldmZcXG5Eb2N1bWVudGF0aW9uLy5yZW5hbWVzLnR4dC04NDUtbmV0d29ya2luZy9uZXRkZXYtRkFRIHByb2Nlc3MvbWFpbnRhaW5lci1uZXRkZXZcXG4tLVxcbkRvY3VtZW50YXRpb24vbmV0d29ya2luZy9kZXZpY2VfZHJpdmVycy9ldGhlcm5ldC9pbmRleC5yc3Q9OD1Db250ZW50czpcXG4tLVxcbkRvY3VtZW50YXRpb24vbmV0d29ya2luZy9kZXZpY2VfZHJpdmVycy9ldGhlcm5ldC9pbmRleC5yc3QtMzktICAgaW50ZWwvaXhnYmVcXG5Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvZGV2aWNlX2RyaXZlcnMvZXRoZXJuZXQvaW5kZXgucnN0OjQwOiAgIGludGVsL2l4Z2JldmZcXG5Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvZGV2aWNlX2RyaXZlcnMvZXRoZXJuZXQvaW5kZXgucnN0LTQxLSAgIGludGVsL2k0MGVcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL0tjb25maWc9MjAzPWNvbmZpZyBJWEdCRVZGXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9LY29uZmlnLTIxMy1cXHQgIE1vcmUgc3BlY2lmaWMgaW5mb3JtYXRpb24gb24gY29uZmlndXJpbmcgdGhlIGRyaXZlciBpcyBpblxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL0tjb25maWc6MjE0OlxcdCAgXFx1MDAzY2ZpbGU6RG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL2RldmljZV9kcml2ZXJzL2V0aGVybmV0L2ludGVsL2l4Z2JldmYucnN0XFx1MDAzZS5cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9LY29uZmlnLTIxNS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9LY29uZmlnLTIxNi1cXHQgIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmUuIFRoZSBtb2R1bGVcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9LY29uZmlnOjIxNzpcXHQgIHdpbGwgYmUgY2FsbGVkIGl4Z2JldmYuICBNU0ktWCBpbnRlcnJ1cHQgc3VwcG9ydCBpcyByZXF1aXJlZFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL0tjb25maWctMjE4LVxcdCAgZm9yIHRoaXMgZHJpdmVyIHRvIHdvcmsgY29ycmVjdGx5Llxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvS2NvbmZpZz0yMjA9Y29uZmlnIElYR0JFVkZfSVBTRUNcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL0tjb25maWctMjI2LVxcdGhlbHBcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9LY29uZmlnOjIyNzpcXHQgIEVuYWJsZSBzdXBwb3J0IGZvciBJUFNlYyBvZmZsb2FkIGluIGl4Z2JldmYua29cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9LY29uZmlnLTIyOC1cXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL01ha2VmaWxlPTE1PW9iai0kKENPTkZJR19JWEdCRSkgKz0gaXhnYmUvXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvTWFrZWZpbGU6MTY6b2JqLSQoQ09ORklHX0lYR0JFVkYpICs9IGl4Z2JldmYvXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvTWFrZWZpbGUtMTctb2JqLSQoQ09ORklHX0k0MEUpICs9IGk0MGUvXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9peGdiZS9peGdiZS5oPTIxMj1zdHJ1Y3QgdmZfZGF0YV9zdG9yYWdlIHtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2l4Z2JlL2l4Z2JlLmgtMjM0LVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2l4Z2JlL2l4Z2JlLmg6MjM1OmVudW0gaXhnYmV2Zl94Y2FzdF9tb2RlcyB7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaXhnYmUvaXhnYmUuaC0yMzYtXFx0SVhHQkVWRl9YQ0FTVF9NT0RFX05PTkUgPSAwLFxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaXhnYmV2Zi9NYWtlZmlsZS02LVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2l4Z2JldmYvTWFrZWZpbGU6NzpvYmotJChDT05GSUdfSVhHQkVWRikgKz0gaXhnYmV2Zi5vXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaXhnYmV2Zi9NYWtlZmlsZS04LVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2l4Z2JldmYvTWFrZWZpbGU6OTppeGdiZXZmLXkgOj0gdmYubyBtYngubyBldGh0b29sLm8gaXhnYmV2Zl9tYWluLm9cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9peGdiZXZmL01ha2VmaWxlOjEwOml4Z2JldmYtJChDT05GSUdfSVhHQkVWRl9JUFNFQykgKz0gaXBzZWMub1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaXhnYmV2Zi9ldGh0b29sLmMtMy1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9peGdiZXZmL2V0aHRvb2wuYzo0Oi8qIGV0aHRvb2wgc3VwcG9ydCBmb3IgaXhnYmV2ZiAqL1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2l4Z2JldmYvZXRodG9vbC5jLTUtXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9peGdiZXZmL2V0aHRvb2wuYy0xNy1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9peGdiZXZmL2V0aHRvb2wuYzoxODojaW5jbHVkZSBcXFwiaXhnYmV2Zi5oXFxcIlxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2l4Z2JldmYvZXRodG9vbC5jLTE5LVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaXhnYmV2Zi9ldGh0b29sLmM9MjI9c3RydWN0IGl4Z2JlX3N0YXRzIHtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2l4Z2JldmYvZXRodG9vbC5jLTMxLVxcdC50eXBlID0gSVhHQkVWRl9TVEFUUywgXFxcXFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2l4Z2JldmYvZXRodG9vbC5jOjMyOlxcdC5zaXplb2Zfc3RhdCA9IHNpemVvZl9maWVsZChzdHJ1Y3QgaXhnYmV2Zl9hZGFwdGVyLCBfc3RhdCksIFxcXFxcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9peGdiZXZmL2V0aHRvb2wuYzozMzpcXHQuc3RhdF9vZmZzZXQgPSBvZmZzZXRvZihzdHJ1Y3QgaXhnYmV2Zl9hZGFwdGVyLCBfc3RhdCkgXFxcXFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2l4Z2JldmYvZXRodG9vbC5jLTM0LX1cXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2l4Z2JldmYvZXRodG9vbC5jLTQyLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2l4Z2JldmYvZXRodG9vbC5jOjQzOnN0YXRpYyBzdHJ1Y3QgaXhnYmVfc3RhdHMgaXhnYmV2Zl9nc3RyaW5nc19zdGF0c1tdID0ge1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2l4Z2JldmYvZXRodG9vbC5jLTQ0LVxcdElYR0JFVkZfTkVUREVWX1NUQVQocnhfcGFja2V0cyksXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9peGdiZXZmL2V0aHRvb2wuYy02MC0jZGVmaW5lIElYR0JFVkZfUVVFVUVfU1RBVFNfTEVOICggXFxcXFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2l4Z2JldmYvZXRodG9vbC5jOjYxOlxcdCgoKHN0cnVjdCBpeGdiZXZmX2FkYXB0ZXIgKiluZXRkZXZfcHJpdihuZXRkZXYpKS1cXHUwMDNlbnVtX3R4X3F1ZXVlcyArIFxcXFxcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9peGdiZXZmL2V0aHRvb2wuYzo2MjpcXHQgKChzdHJ1Y3QgaXhnYmV2Zl9hZGFwdGVyICopbmV0ZGV2X3ByaXYobmV0ZGV2KSktXFx1MDAzZW51bV94ZHBfcXVldWVzICsgXFxcXFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2l4Z2JldmYvZXRodG9vbC5jOjYzOlxcdCAoKHN0cnVjdCBpeGdiZXZmX2FkYXB0ZXIgKiluZXRkZXZfcHJpdihuZXRkZXYpKS1cXHUwMDNlbnVtX3J4X3F1ZXVlcykgKiBcXFxcXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaXhnYmV2Zi9ldGh0b29sLmM6NjQ6XFx0IChzaXplb2Yoc3RydWN0IGl4Z2JldmZfc3RhdHMpIC8gc2l6ZW9mKHU2NCkpKVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2l4Z2JldmYvZXRodG9vbC5jOjY1OiNkZWZpbmUgSVhHQkVWRl9HTE9CQUxfU1RBVFNfTEVOIEFSUkFZX1NJWkUoaXhnYmV2Zl9nc3RyaW5nc19zdGF0cylcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9peGdiZXZmL2V0aHRvb2wuYy02Ni1cXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2l4Z2JldmYvZXRodG9vbC5jPTY4PXN0YXRpYyBjb25zdCBjaGFyIGl4Z2JlX2dzdHJpbmdzX3Rlc3RbXVtFVEhfR1NUUklOR19MRU5dID0ge1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaXhnYmV2Zi9ldGh0b29sLmMtNzQtXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaXhnYmV2Zi9ldGh0b29sLmM6NzU6c3RhdGljIGNvbnN0IGNoYXIgaXhnYmV2Zl9wcml2X2ZsYWdzX3N0cmluZ3NbXVtFVEhfR1NUUklOR19MRU5dID0ge1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2l4Z2JldmYvZXRodG9vbC5jLTc2LSNkZWZpbmUgSVhHQkVWRl9QUklWX0ZMQUdTX0xFR0FDWV9SWFxcdEJJVCgwKVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaXhnYmV2Zi9ldGh0b29sLmMtNzktXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaXhnYmV2Zi9ldGh0b29sLmM6ODA6I2RlZmluZSBJWEdCRVZGX1BSSVZfRkxBR1NfU1RSX0xFTiBBUlJBWV9TSVpFKGl4Z2JldmZfcHJpdl9mbGFnc19zdHJpbmdzKVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2l4Z2JldmYvZXRodG9vbC5jLTgxLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2l4Z2JldmYvZXRodG9vbC5jOjgyOnN0YXRpYyBpbnQgaXhnYmV2Zl9nZXRfbGlua19rc2V0dGluZ3Moc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldixcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9peGdiZXZmL2V0aHRvb2wuYy04My1cXHRcXHRcXHRcXHQgICAgICBzdHJ1Y3QgZXRodG9vbF9saW5rX2tzZXR0aW5ncyAqY21kKVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2l4Z2JldmYvZXRodG9vbC5jLTg0LXtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9peGdiZXZmL2V0aHRvb2wuYzo4NTpcXHRzdHJ1Y3QgaXhnYmV2Zl9hZGFwdGVyICphZGFwdGVyID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9peGdiZXZmL2V0aHRvb2wuYy04Ni1cXHRzdHJ1Y3QgaXhnYmVfaHcgKmh3ID0gXFx1MDAyNmFkYXB0ZXItXFx1MDAzZWh3O1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaXhnYmV2Zi9ldGh0b29sLmMtMTI4LVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2l4Z2JldmYvZXRodG9vbC5jOjEyOTpzdGF0aWMgdTMyIGl4Z2JldmZfZ2V0X21zZ2xldmVsKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYpXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaXhnYmV2Zi9ldGh0b29sLmMtMTMwLXtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9peGdiZXZmL2V0aHRvb2wuYzoxMzE6XFx0c3RydWN0IGl4Z2JldmZfYWRhcHRlciAqYWRhcHRlciA9IG5ldGRldl9wcml2KG5ldGRldik7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaXhnYmV2Zi9ldGh0b29sLmMtMTMyLVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaXhnYmV2Zi9ldGh0b29sLmMtMTM1LVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2l4Z2JldmYvZXRodG9vbC5jOjEzNjpzdGF0aWMgdm9pZCBpeGdiZXZmX3NldF9tc2dsZXZlbChzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LCB1MzIgZGF0YSlcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9peGdiZXZmL2V0aHRvb2wuYy0xMzcte1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2l4Z2JldmYvZXRodG9vbC5jOjEzODpcXHRzdHJ1Y3QgaXhnYmV2Zl9hZGFwdGVyICphZGFwdGVyID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9peGdiZXZmL2V0aHRvb2wuYy0xMzktXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9peGdiZXZmL2V0aHRvb2wuYy0xNDItXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaXhnYmV2Zi9ldGh0b29sLmM6MTQzOnN0YXRpYyBpbnQgaXhnYmV2Zl9nZXRfcmVnc19sZW4oc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldilcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9peGdiZXZmL2V0aHRvb2wuYy0xNDQte1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaXhnYmV2Zi9ldGh0b29sLmMtMTQ4LVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2l4Z2JldmYvZXRodG9vbC5jOjE0OTpzdGF0aWMgdm9pZCBpeGdiZXZmX2dldF9yZWdzKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaXhnYmV2Zi9ldGh0b29sLmMtMTUwLVxcdFxcdFxcdCAgICAgc3RydWN0IGV0aHRvb2xfcmVncyAqcmVncyxcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2l4Z2JldmYvZXRodG9vbC5jLTE1Mi17XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaXhnYmV2Zi9ldGh0b29sLmM6MTUzOlxcdHN0cnVjdCBpeGdiZXZmX2FkYXB0ZXIgKmFkYXB0ZXIgPSBuZXRkZXZfcHJpdihuZXRkZXYpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2l4Z2JldmYvZXRodG9vbC5jLTE1NC1cXHRzdHJ1Y3QgaXhnYmVfaHcgKmh3ID0gXFx1MDAyNmFkYXB0ZXItXFx1MDAzZWh3O1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2l4Z2JldmYvZXRodG9vbC5jLTE1NS1cXHR1MzIgKnJlZ3NfYnVmZiA9IHA7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaXhnYmV2Zi9ldGh0b29sLmM6MTU2OlxcdHUzMiByZWdzX2xlbiA9IGl4Z2JldmZfZ2V0X3JlZ3NfbGVuKG5ldGRldik7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaXhnYmV2Zi9ldGh0b29sLmMtMTU3LVxcdHU4IGk7XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9peGdiZXZmL2V0aHRvb2wuYy0yMjItXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaXhnYmV2Zi9ldGh0b29sLmM6MjIzOnN0YXRpYyB2b2lkIGl4Z2JldmZfZ2V0X2RydmluZm8oc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldixcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9peGdiZXZmL2V0aHRvb2wuYy0yMjQtXFx0XFx0XFx0XFx0c3RydWN0IGV0aHRvb2xfZHJ2aW5mbyAqZHJ2aW5mbylcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9peGdiZXZmL2V0aHRvb2wuYy0yMjUte1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2l4Z2JldmYvZXRodG9vbC5jOjIyNjpcXHRzdHJ1Y3QgaXhnYmV2Zl9hZGFwdGVyICphZGFwdGVyID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9peGdiZXZmL2V0aHRvb2wuYy0yMjctXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaXhnYmV2Zi9ldGh0b29sLmM6MjI4OlxcdHN0cnNjcHkoZHJ2aW5mby1cXHUwMDNlZHJpdmVyLCBpeGdiZXZmX2RyaXZlcl9uYW1lLCBzaXplb2YoZHJ2aW5mby1cXHUwMDNlZHJpdmVyKSk7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaXhnYmV2Zi9ldGh0b29sLmMtMjI5LVxcdHN0cnNjcHkoZHJ2aW5mby1cXHUwMDNlYnVzX2luZm8sIHBjaV9uYW1lKGFkYXB0ZXItXFx1MDAzZXBkZXYpLFxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaXhnYmV2Zi9ldGh0b29sLmMtMjM0LVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2l4Z2JldmYvZXRodG9vbC5jOjIzNTpzdGF0aWMgdm9pZCBpeGdiZXZmX2dldF9yaW5ncGFyYW0oc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldixcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9peGdiZXZmL2V0aHRvb2wuYy0yMzYtXFx0XFx0XFx0XFx0ICBzdHJ1Y3QgZXRodG9vbF9yaW5ncGFyYW0gKnJpbmcsXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9peGdiZXZmL2V0aHRvb2wuYy0yMzkte1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2l4Z2JldmYvZXRodG9vbC5jOjI0MDpcXHRzdHJ1Y3QgaXhnYmV2Zl9hZGFwdGVyICphZGFwdGVyID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9peGdiZXZmL2V0aHRvb2wuYy0yNDEtXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9peGdiZXZmL2V0aHRvb2wuYy0yNDctXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaXhnYmV2Zi9ldGh0b29sLmM6MjQ4OnN0YXRpYyBpbnQgaXhnYmV2Zl9zZXRfcmluZ3BhcmFtKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaXhnYmV2Zi9ldGh0b29sLmMtMjQ5LVxcdFxcdFxcdFxcdCBzdHJ1Y3QgZXRodG9vbF9yaW5ncGFyYW0gKnJpbmcsXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9peGdiZXZmL2V0aHRvb2wuYy0yNTIte1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2l4Z2JldmYvZXRodG9vbC5jOjI1MzpcXHRzdHJ1Y3QgaXhnYmV2Zl9hZGFwdGVyICphZGFwdGVyID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9peGdiZXZmL2V0aHRvb2wuYzoyNTQ6XFx0c3RydWN0IGl4Z2JldmZfcmluZyAqdHhfcmluZyA9IE5VTEwsICpyeF9yaW5nID0gTlVMTDtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9peGdiZXZmL2V0aHRvb2wuYy0yNTUtXFx0dTMyIG5ld19yeF9jb3VudCwgbmV3X3R4X2NvdW50O1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaXhnYmV2Zi9ldGh0b29sLmMtMzAyLVxcdFxcdFxcdHR4X3JpbmdbaV0uY291bnQgPSBuZXdfdHhfY291bnQ7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaXhnYmV2Zi9ldGh0b29sLmM6MzAzOlxcdFxcdFxcdGVyciA9IGl4Z2JldmZfc2V0dXBfdHhfcmVzb3VyY2VzKFxcdTAwMjZ0eF9yaW5nW2ldKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9peGdiZXZmL2V0aHRvb2wuYy0zMDQtXFx0XFx0XFx0aWYgKGVycikge1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaXhnYmV2Zi9ldGh0b29sLmMtMzA2LVxcdFxcdFxcdFxcdFxcdGktLTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9peGdiZXZmL2V0aHRvb2wuYzozMDc6XFx0XFx0XFx0XFx0XFx0aXhnYmV2Zl9mcmVlX3R4X3Jlc291cmNlcyhcXHUwMDI2dHhfcmluZ1tpXSk7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaXhnYmV2Zi9ldGh0b29sLmMtMzA4LVxcdFxcdFxcdFxcdH1cXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2l4Z2JldmYvZXRodG9vbC5jLTMyMC1cXHRcXHRcXHR0eF9yaW5nW2ldLmNvdW50ID0gbmV3X3R4X2NvdW50O1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2l4Z2JldmYvZXRodG9vbC5jOjMyMTpcXHRcXHRcXHRlcnIgPSBpeGdiZXZmX3NldHVwX3R4X3Jlc291cmNlcyhcXHUwMDI2dHhfcmluZ1tpXSk7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaXhnYmV2Zi9ldGh0b29sLmMtMzIyLVxcdFxcdFxcdGlmIChlcnIpIHtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2l4Z2JldmYvZXRodG9vbC5jLTMyNC1cXHRcXHRcXHRcXHRcXHRpLS07XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaXhnYmV2Zi9ldGh0b29sLmM6MzI1OlxcdFxcdFxcdFxcdFxcdGl4Z2JldmZfZnJlZV90eF9yZXNvdXJjZXMoXFx1MDAyNnR4X3JpbmdbaV0pO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2l4Z2JldmYvZXRodG9vbC5jLTMyNi1cXHRcXHRcXHRcXHR9XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9peGdiZXZmL2V0aHRvb2wuYy0zNTItXFx0XFx0XFx0cnhfcmluZ1tpXS5jb3VudCA9IG5ld19yeF9jb3VudDtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9peGdiZXZmL2V0aHRvb2wuYzozNTM6XFx0XFx0XFx0ZXJyID0gaXhnYmV2Zl9zZXR1cF9yeF9yZXNvdXJjZXMoYWRhcHRlciwgXFx1MDAyNnJ4X3JpbmdbaV0pO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2l4Z2JldmYvZXRodG9vbC5jLTM1NC1cXHRcXHRcXHRpZiAoZXJyKSB7XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9peGdiZXZmL2V0aHRvb2wuYy0zNTYtXFx0XFx0XFx0XFx0XFx0aS0tO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2l4Z2JldmYvZXRodG9vbC5jOjM1NzpcXHRcXHRcXHRcXHRcXHRpeGdiZXZmX2ZyZWVfcnhfcmVzb3VyY2VzKFxcdTAwMjZyeF9yaW5nW2ldKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9peGdiZXZmL2V0aHRvb2wuYy0zNTgtXFx0XFx0XFx0XFx0fVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaXhnYmV2Zi9ldGh0b29sLmMtMzY4LVxcdC8qIGJyaW5nIGludGVyZmFjZSBkb3duIHRvIHByZXBhcmUgZm9yIHVwZGF0ZSAqL1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2l4Z2JldmYvZXRodG9vbC5jOjM2OTpcXHRpeGdiZXZmX2Rvd24oYWRhcHRlcik7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaXhnYmV2Zi9ldGh0b29sLmMtMzcwLVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaXhnYmV2Zi9ldGh0b29sLmMtMzczLVxcdFxcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBhZGFwdGVyLVxcdTAwM2VudW1fdHhfcXVldWVzOyBpKyspIHtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9peGdiZXZmL2V0aHRvb2wuYzozNzQ6XFx0XFx0XFx0aXhnYmV2Zl9mcmVlX3R4X3Jlc291cmNlcyhhZGFwdGVyLVxcdTAwM2V0eF9yaW5nW2ldKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9peGdiZXZmL2V0aHRvb2wuYy0zNzUtXFx0XFx0XFx0KmFkYXB0ZXItXFx1MDAzZXR4X3JpbmdbaV0gPSB0eF9yaW5nW2ldO1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaXhnYmV2Zi9ldGh0b29sLmMtMzc5LVxcdFxcdGZvciAoaiA9IDA7IGogXFx1MDAzYyBhZGFwdGVyLVxcdTAwM2VudW1feGRwX3F1ZXVlczsgaSsrLCBqKyspIHtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9peGdiZXZmL2V0aHRvb2wuYzozODA6XFx0XFx0XFx0aXhnYmV2Zl9mcmVlX3R4X3Jlc291cmNlcyhhZGFwdGVyLVxcdTAwM2V4ZHBfcmluZ1tqXSk7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaXhnYmV2Zi9ldGh0b29sLmMtMzgxLVxcdFxcdFxcdCphZGFwdGVyLVxcdTAwM2V4ZHBfcmluZ1tqXSA9IHR4X3JpbmdbaV07XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9peGdiZXZmL2V0aHRvb2wuYy0zOTEtXFx0XFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIGFkYXB0ZXItXFx1MDAzZW51bV9yeF9xdWV1ZXM7IGkrKykge1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2l4Z2JldmYvZXRodG9vbC5jOjM5MjpcXHRcXHRcXHRpeGdiZXZmX2ZyZWVfcnhfcmVzb3VyY2VzKGFkYXB0ZXItXFx1MDAzZXJ4X3JpbmdbaV0pO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2l4Z2JldmYvZXRodG9vbC5jLTM5My1cXHRcXHRcXHQqYWRhcHRlci1cXHUwMDNlcnhfcmluZ1tpXSA9IHJ4X3JpbmdbaV07XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9peGdiZXZmL2V0aHRvb2wuYy00MDEtXFx0LyogcmVzdG9yZSBpbnRlcmZhY2UgdXNpbmcgbmV3IHZhbHVlcyAqL1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2l4Z2JldmYvZXRodG9vbC5jOjQwMjpcXHRpeGdiZXZmX3VwKGFkYXB0ZXIpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2l4Z2JldmYvZXRodG9vbC5jLTQwMy1cXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2l4Z2JldmYvZXRodG9vbC5jLTQwOC1cXHRcXHQgICAgIGkgXFx1MDAzYyBhZGFwdGVyLVxcdTAwM2VudW1fdHhfcXVldWVzICsgYWRhcHRlci1cXHUwMDNlbnVtX3hkcF9xdWV1ZXM7IGkrKylcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9peGdiZXZmL2V0aHRvb2wuYzo0MDk6XFx0XFx0XFx0aXhnYmV2Zl9mcmVlX3R4X3Jlc291cmNlcyhcXHUwMDI2dHhfcmluZ1tpXSk7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaXhnYmV2Zi9ldGh0b29sLmMtNDEwLVxcdFxcdHZmcmVlKHR4X3JpbmcpO1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaXhnYmV2Zi9ldGh0b29sLmMtNDE2LVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2l4Z2JldmYvZXRodG9vbC5jOjQxNzpzdGF0aWMgaW50IGl4Z2JldmZfZ2V0X3NzZXRfY291bnQoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwgaW50IHN0cmluZ3NldClcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9peGdiZXZmL2V0aHRvb2wuYy00MTgte1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaXhnYmV2Zi9ldGh0b29sLmMtNDMwLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2l4Z2JldmYvZXRodG9vbC5jOjQzMTpzdGF0aWMgdm9pZCBpeGdiZXZmX2dldF9ldGh0b29sX3N0YXRzKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaXhnYmV2Zi9ldGh0b29sLmMtNDMyLVxcdFxcdFxcdFxcdCAgICAgIHN0cnVjdCBldGh0b29sX3N0YXRzICpzdGF0cywgdTY0ICpkYXRhKVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2l4Z2JldmYvZXRodG9vbC5jLTQzMy17XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaXhnYmV2Zi9ldGh0b29sLmM6NDM0OlxcdHN0cnVjdCBpeGdiZXZmX2FkYXB0ZXIgKmFkYXB0ZXIgPSBuZXRkZXZfcHJpdihuZXRkZXYpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2l4Z2JldmYvZXRodG9vbC5jLTQzNS1cXHRzdHJ1Y3QgcnRubF9saW5rX3N0YXRzNjQgdGVtcDtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2l4Z2JldmYvZXRodG9vbC5jLTQzNy1cXHR1bnNpZ25lZCBpbnQgc3RhcnQ7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaXhnYmV2Zi9ldGh0b29sLmM6NDM4OlxcdHN0cnVjdCBpeGdiZXZmX3JpbmcgKnJpbmc7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaXhnYmV2Zi9ldGh0b29sLmMtNDM5LVxcdGludCBpLCBqO1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaXhnYmV2Zi9ldGh0b29sLmMtNDQxLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2l4Z2JldmYvZXRodG9vbC5jOjQ0MjpcXHRpeGdiZXZmX3VwZGF0ZV9zdGF0cyhhZGFwdGVyKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9peGdiZXZmL2V0aHRvb2wuYy00NDMtXFx0bmV0X3N0YXRzID0gZGV2X2dldF9zdGF0cyhuZXRkZXYsIFxcdTAwMjZ0ZW1wKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9peGdiZXZmL2V0aHRvb2wuYy00NDQtXFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIElYR0JFVkZfR0xPQkFMX1NUQVRTX0xFTjsgaSsrKSB7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaXhnYmV2Zi9ldGh0b29sLmM6NDQ1OlxcdFxcdHN3aXRjaCAoaXhnYmV2Zl9nc3RyaW5nc19zdGF0c1tpXS50eXBlKSB7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaXhnYmV2Zi9ldGh0b29sLmMtNDQ2LVxcdFxcdGNhc2UgTkVUREVWX1NUQVRTOlxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2l4Z2JldmYvZXRodG9vbC5jLTQ0Ny1cXHRcXHRcXHRwID0gKGNoYXIgKiluZXRfc3RhdHMgK1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2l4Z2JldmYvZXRodG9vbC5jOjQ0ODpcXHRcXHRcXHRcXHRcXHRpeGdiZXZmX2dzdHJpbmdzX3N0YXRzW2ldLnN0YXRfb2Zmc2V0O1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2l4Z2JldmYvZXRodG9vbC5jLTQ0OS1cXHRcXHRcXHRicmVhaztcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2l4Z2JldmYvZXRodG9vbC5jLTQ1MS1cXHRcXHRcXHRwID0gKGNoYXIgKilhZGFwdGVyICtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9peGdiZXZmL2V0aHRvb2wuYzo0NTI6XFx0XFx0XFx0XFx0XFx0aXhnYmV2Zl9nc3RyaW5nc19zdGF0c1tpXS5zdGF0X29mZnNldDtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9peGdiZXZmL2V0aHRvb2wuYy00NTMtXFx0XFx0XFx0YnJlYWs7XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9peGdiZXZmL2V0aHRvb2wuYy00NTgtXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaXhnYmV2Zi9ldGh0b29sLmM6NDU5OlxcdFxcdGRhdGFbaV0gPSAoaXhnYmV2Zl9nc3RyaW5nc19zdGF0c1tpXS5zaXplb2Zfc3RhdCA9PVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2l4Z2JldmYvZXRodG9vbC5jLTQ2MC1cXHRcXHRcXHQgICBzaXplb2YodTY0KSkgPyAqKHU2NCAqKXAgOiAqKHUzMiAqKXA7XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9peGdiZXZmL2V0aHRvb2wuYy01MTQtXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaXhnYmV2Zi9ldGh0b29sLmM6NTE1OnN0YXRpYyB2b2lkIGl4Z2JldmZfZ2V0X3N0cmluZ3Moc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwgdTMyIHN0cmluZ3NldCxcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9peGdiZXZmL2V0aHRvb2wuYy01MTYtXFx0XFx0XFx0XFx0dTggKmRhdGEpXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaXhnYmV2Zi9ldGh0b29sLmMtNTE3LXtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9peGdiZXZmL2V0aHRvb2wuYzo1MTg6XFx0c3RydWN0IGl4Z2JldmZfYWRhcHRlciAqYWRhcHRlciA9IG5ldGRldl9wcml2KG5ldGRldik7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaXhnYmV2Zi9ldGh0b29sLmMtNTE5LVxcdGNoYXIgKnAgPSAoY2hhciAqKWRhdGE7XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9peGdiZXZmL2V0aHRvb2wuYy01MjgtXFx0XFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIElYR0JFVkZfR0xPQkFMX1NUQVRTX0xFTjsgaSsrKSB7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaXhnYmV2Zi9ldGh0b29sLmM6NTI5OlxcdFxcdFxcdG1lbWNweShwLCBpeGdiZXZmX2dzdHJpbmdzX3N0YXRzW2ldLnN0YXRfc3RyaW5nLFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2l4Z2JldmYvZXRodG9vbC5jLTUzMC1cXHRcXHRcXHQgICAgICAgRVRIX0dTVFJJTkdfTEVOKTtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2l4Z2JldmYvZXRodG9vbC5jLTU1My1cXHRjYXNlIEVUSF9TU19QUklWX0ZMQUdTOlxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2l4Z2JldmYvZXRodG9vbC5jOjU1NDpcXHRcXHRtZW1jcHkoZGF0YSwgaXhnYmV2Zl9wcml2X2ZsYWdzX3N0cmluZ3MsXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaXhnYmV2Zi9ldGh0b29sLmMtNTU1LVxcdFxcdCAgICAgICBJWEdCRVZGX1BSSVZfRkxBR1NfU1RSX0xFTiAqIEVUSF9HU1RSSU5HX0xFTik7XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9peGdiZXZmL2V0aHRvb2wuYy01NTktXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaXhnYmV2Zi9ldGh0b29sLmM6NTYwOnN0YXRpYyBpbnQgaXhnYmV2Zl9saW5rX3Rlc3Qoc3RydWN0IGl4Z2JldmZfYWRhcHRlciAqYWRhcHRlciwgdTY0ICpkYXRhKVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2l4Z2JldmYvZXRodG9vbC5jLTU2MS17XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9peGdiZXZmL2V0aHRvb2wuYy01NzQtLyogZXRodG9vbCByZWdpc3RlciB0ZXN0IGRhdGEgKi9cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9peGdiZXZmL2V0aHRvb2wuYzo1NzU6c3RydWN0IGl4Z2JldmZfcmVnX3Rlc3Qge1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2l4Z2JldmYvZXRodG9vbC5jLTU3Ni1cXHR1MTYgcmVnO1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaXhnYmV2Zi9ldGh0b29sLmMtNjAwLS8qIGRlZmF1bHQgVkYgcmVnaXN0ZXIgdGVzdCAqL1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2l4Z2JldmYvZXRodG9vbC5jOjYwMTpzdGF0aWMgY29uc3Qgc3RydWN0IGl4Z2JldmZfcmVnX3Rlc3QgcmVnX3Rlc3RfdmZbXSA9IHtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9peGdiZXZmL2V0aHRvb2wuYy02MDItXFx0eyBJWEdCRV9WRlJEQkFMKDApLCAyLCBQQVRURVJOX1RFU1QsIDB4RkZGRkZGODAsIDB4RkZGRkZGODAgfSxcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2l4Z2JldmYvZXRodG9vbC5jPTYxND1zdGF0aWMgY29uc3QgdTMyIHJlZ2lzdGVyX3Rlc3RfcGF0dGVybnNbXSA9IHtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2l4Z2JldmYvZXRodG9vbC5jLTYxNy1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9peGdiZXZmL2V0aHRvb2wuYzo2MTg6c3RhdGljIGJvb2wgcmVnX3BhdHRlcm5fdGVzdChzdHJ1Y3QgaXhnYmV2Zl9hZGFwdGVyICphZGFwdGVyLCB1NjQgKmRhdGEsXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaXhnYmV2Zi9ldGh0b29sLmMtNjE5LVxcdFxcdFxcdCAgICAgaW50IHJlZywgdTMyIG1hc2ssIHUzMiB3cml0ZSlcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2l4Z2JldmYvZXRodG9vbC5jLTYyNy1cXHRmb3IgKHBhdCA9IDA7IHBhdCBcXHUwMDNjIEFSUkFZX1NJWkUocmVnaXN0ZXJfdGVzdF9wYXR0ZXJucyk7IHBhdCsrKSB7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaXhnYmV2Zi9ldGh0b29sLmM6NjI4OlxcdFxcdGJlZm9yZSA9IGl4Z2JldmZfcmVhZF9yZWcoXFx1MDAyNmFkYXB0ZXItXFx1MDAzZWh3LCByZWcpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2l4Z2JldmYvZXRodG9vbC5jLTYyOS1cXHRcXHRpeGdiZV93cml0ZV9yZWcoXFx1MDAyNmFkYXB0ZXItXFx1MDAzZWh3LCByZWcsXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaXhnYmV2Zi9ldGh0b29sLmMtNjMwLVxcdFxcdFxcdFxcdHJlZ2lzdGVyX3Rlc3RfcGF0dGVybnNbcGF0XSBcXHUwMDI2IHdyaXRlKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9peGdiZXZmL2V0aHRvb2wuYzo2MzE6XFx0XFx0dmFsID0gaXhnYmV2Zl9yZWFkX3JlZyhcXHUwMDI2YWRhcHRlci1cXHUwMDNlaHcsIHJlZyk7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaXhnYmV2Zi9ldGh0b29sLmMtNjMyLVxcdFxcdGlmICh2YWwgIT0gKHJlZ2lzdGVyX3Rlc3RfcGF0dGVybnNbcGF0XSBcXHUwMDI2IHdyaXRlIFxcdTAwMjYgbWFzaykpIHtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2l4Z2JldmYvZXRodG9vbC5jLTY0NS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9peGdiZXZmL2V0aHRvb2wuYzo2NDY6c3RhdGljIGJvb2wgcmVnX3NldF9hbmRfY2hlY2soc3RydWN0IGl4Z2JldmZfYWRhcHRlciAqYWRhcHRlciwgdTY0ICpkYXRhLFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2l4Z2JldmYvZXRodG9vbC5jLTY0Ny1cXHRcXHRcXHQgICAgICBpbnQgcmVnLCB1MzIgbWFzaywgdTMyIHdyaXRlKVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaXhnYmV2Zi9ldGh0b29sLmMtNjU0LVxcdH1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9peGdiZXZmL2V0aHRvb2wuYzo2NTU6XFx0YmVmb3JlID0gaXhnYmV2Zl9yZWFkX3JlZyhcXHUwMDI2YWRhcHRlci1cXHUwMDNlaHcsIHJlZyk7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaXhnYmV2Zi9ldGh0b29sLmMtNjU2LVxcdGl4Z2JlX3dyaXRlX3JlZyhcXHUwMDI2YWRhcHRlci1cXHUwMDNlaHcsIHJlZywgd3JpdGUgXFx1MDAyNiBtYXNrKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9peGdiZXZmL2V0aHRvb2wuYzo2NTc6XFx0dmFsID0gaXhnYmV2Zl9yZWFkX3JlZyhcXHUwMDI2YWRhcHRlci1cXHUwMDNlaHcsIHJlZyk7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaXhnYmV2Zi9ldGh0b29sLmMtNjU4LVxcdGlmICgod3JpdGUgXFx1MDAyNiBtYXNrKSAhPSAodmFsIFxcdTAwMjYgbWFzaykpIHtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2l4Z2JldmYvZXRodG9vbC5jLTY2OC1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9peGdiZXZmL2V0aHRvb2wuYzo2Njk6c3RhdGljIGludCBpeGdiZXZmX3JlZ190ZXN0KHN0cnVjdCBpeGdiZXZmX2FkYXB0ZXIgKmFkYXB0ZXIsIHU2NCAqZGF0YSlcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9peGdiZXZmL2V0aHRvb2wuYy02NzAte1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2l4Z2JldmYvZXRodG9vbC5jOjY3MTpcXHRjb25zdCBzdHJ1Y3QgaXhnYmV2Zl9yZWdfdGVzdCAqdGVzdDtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9peGdiZXZmL2V0aHRvb2wuYy02NzItXFx0dTMyIGk7XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9peGdiZXZmL2V0aHRvb2wuYy03MzUtXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaXhnYmV2Zi9ldGh0b29sLmM6NzM2OnN0YXRpYyB2b2lkIGl4Z2JldmZfZGlhZ190ZXN0KHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaXhnYmV2Zi9ldGh0b29sLmMtNzM3LVxcdFxcdFxcdCAgICAgIHN0cnVjdCBldGh0b29sX3Rlc3QgKmV0aF90ZXN0LCB1NjQgKmRhdGEpXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaXhnYmV2Zi9ldGh0b29sLmMtNzM4LXtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9peGdiZXZmL2V0aHRvb2wuYzo3Mzk6XFx0c3RydWN0IGl4Z2JldmZfYWRhcHRlciAqYWRhcHRlciA9IG5ldGRldl9wcml2KG5ldGRldik7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaXhnYmV2Zi9ldGh0b29sLmMtNzQwLVxcdGJvb2wgaWZfcnVubmluZyA9IG5ldGlmX3J1bm5pbmcobmV0ZGV2KTtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2l4Z2JldmYvZXRodG9vbC5jLTc1OC1cXHRcXHQgKi9cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9peGdiZXZmL2V0aHRvb2wuYzo3NTk6XFx0XFx0aWYgKGl4Z2JldmZfbGlua190ZXN0KGFkYXB0ZXIsIFxcdTAwMjZkYXRhWzFdKSlcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9peGdiZXZmL2V0aHRvb2wuYy03NjAtXFx0XFx0XFx0ZXRoX3Rlc3QtXFx1MDAzZWZsYWdzIHw9IEVUSF9URVNUX0ZMX0ZBSUxFRDtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2l4Z2JldmYvZXRodG9vbC5jLTc2My1cXHRcXHRcXHQvKiBpbmRpY2F0ZSB3ZSdyZSBpbiB0ZXN0IG1vZGUgKi9cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9peGdiZXZmL2V0aHRvb2wuYzo3NjQ6XFx0XFx0XFx0aXhnYmV2Zl9jbG9zZShuZXRkZXYpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2l4Z2JldmYvZXRodG9vbC5jLTc2NS1cXHRcXHRlbHNlXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaXhnYmV2Zi9ldGh0b29sLmM6NzY2OlxcdFxcdFxcdGl4Z2JldmZfcmVzZXQoYWRhcHRlcik7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaXhnYmV2Zi9ldGh0b29sLmMtNzY3LVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2l4Z2JldmYvZXRodG9vbC5jLTc2OC1cXHRcXHRod19kYmcoXFx1MDAyNmFkYXB0ZXItXFx1MDAzZWh3LCBcXFwicmVnaXN0ZXIgdGVzdGluZyBzdGFydGluZ1xcXFxuXFxcIik7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaXhnYmV2Zi9ldGh0b29sLmM6NzY5OlxcdFxcdGlmIChpeGdiZXZmX3JlZ190ZXN0KGFkYXB0ZXIsIFxcdTAwMjZkYXRhWzBdKSlcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9peGdiZXZmL2V0aHRvb2wuYy03NzAtXFx0XFx0XFx0ZXRoX3Rlc3QtXFx1MDAzZWZsYWdzIHw9IEVUSF9URVNUX0ZMX0ZBSUxFRDtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9peGdiZXZmL2V0aHRvb2wuYy03NzEtXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaXhnYmV2Zi9ldGh0b29sLmM6NzcyOlxcdFxcdGl4Z2JldmZfcmVzZXQoYWRhcHRlcik7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaXhnYmV2Zi9ldGh0b29sLmMtNzczLVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaXhnYmV2Zi9ldGh0b29sLmMtNzc1LVxcdFxcdGlmIChpZl9ydW5uaW5nKVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2l4Z2JldmYvZXRodG9vbC5jOjc3NjpcXHRcXHRcXHRpeGdiZXZmX29wZW4obmV0ZGV2KTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9peGdiZXZmL2V0aHRvb2wuYy03NzctXFx0fSBlbHNlIHtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2l4Z2JldmYvZXRodG9vbC5jLTc3OS1cXHRcXHQvKiBPbmxpbmUgdGVzdHMgKi9cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9peGdiZXZmL2V0aHRvb2wuYzo3ODA6XFx0XFx0aWYgKGl4Z2JldmZfbGlua190ZXN0KGFkYXB0ZXIsIFxcdTAwMjZkYXRhWzFdKSlcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9peGdiZXZmL2V0aHRvb2wuYy03ODEtXFx0XFx0XFx0ZXRoX3Rlc3QtXFx1MDAzZWZsYWdzIHw9IEVUSF9URVNUX0ZMX0ZBSUxFRDtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2l4Z2JldmYvZXRodG9vbC5jLTc5MC1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9peGdiZXZmL2V0aHRvb2wuYzo3OTE6c3RhdGljIGludCBpeGdiZXZmX253YXlfcmVzZXQoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldilcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9peGdiZXZmL2V0aHRvb2wuYy03OTIte1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2l4Z2JldmYvZXRodG9vbC5jOjc5MzpcXHRzdHJ1Y3QgaXhnYmV2Zl9hZGFwdGVyICphZGFwdGVyID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9peGdiZXZmL2V0aHRvb2wuYy03OTQtXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaXhnYmV2Zi9ldGh0b29sLmMtNzk1LVxcdGlmIChuZXRpZl9ydW5uaW5nKG5ldGRldikpXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaXhnYmV2Zi9ldGh0b29sLmM6Nzk2OlxcdFxcdGl4Z2JldmZfcmVpbml0X2xvY2tlZChhZGFwdGVyKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9peGdiZXZmL2V0aHRvb2wuYy03OTctXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9peGdiZXZmL2V0aHRvb2wuYy04MDAtXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaXhnYmV2Zi9ldGh0b29sLmM6ODAxOnN0YXRpYyBpbnQgaXhnYmV2Zl9nZXRfY29hbGVzY2Uoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldixcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9peGdiZXZmL2V0aHRvb2wuYy04MDItXFx0XFx0XFx0XFx0c3RydWN0IGV0aHRvb2xfY29hbGVzY2UgKmVjLFxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaXhnYmV2Zi9ldGh0b29sLmMtODA1LXtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9peGdiZXZmL2V0aHRvb2wuYzo4MDY6XFx0c3RydWN0IGl4Z2JldmZfYWRhcHRlciAqYWRhcHRlciA9IG5ldGRldl9wcml2KG5ldGRldik7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaXhnYmV2Zi9ldGh0b29sLmMtODA3LVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaXhnYmV2Zi9ldGh0b29sLmMtODI2LVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2l4Z2JldmYvZXRodG9vbC5jOjgyNzpzdGF0aWMgaW50IGl4Z2JldmZfc2V0X2NvYWxlc2NlKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaXhnYmV2Zi9ldGh0b29sLmMtODI4LVxcdFxcdFxcdFxcdHN0cnVjdCBldGh0b29sX2NvYWxlc2NlICplYyxcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2l4Z2JldmYvZXRodG9vbC5jLTgzMS17XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaXhnYmV2Zi9ldGh0b29sLmM6ODMyOlxcdHN0cnVjdCBpeGdiZXZmX2FkYXB0ZXIgKmFkYXB0ZXIgPSBuZXRkZXZfcHJpdihuZXRkZXYpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2l4Z2JldmYvZXRodG9vbC5jOjgzMzpcXHRzdHJ1Y3QgaXhnYmV2Zl9xX3ZlY3RvciAqcV92ZWN0b3I7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaXhnYmV2Zi9ldGh0b29sLmMtODM0LVxcdGludCBudW1fdmVjdG9ycywgaTtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2l4Z2JldmYvZXRodG9vbC5jLTg3NS1cXHRcXHRcXHRxX3ZlY3Rvci1cXHUwMDNlaXRyID0gcnhfaXRyX3BhcmFtO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2l4Z2JldmYvZXRodG9vbC5jOjg3NjpcXHRcXHRpeGdiZXZmX3dyaXRlX2VpdHIocV92ZWN0b3IpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2l4Z2JldmYvZXRodG9vbC5jLTg3Ny1cXHR9XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9peGdiZXZmL2V0aHRvb2wuYy04ODEtXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaXhnYmV2Zi9ldGh0b29sLmM6ODgyOnN0YXRpYyB1MzIgaXhnYmV2Zl9nZXRfcnhfcmluZ19jb3VudChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2l4Z2JldmYvZXRodG9vbC5jLTg4My17XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaXhnYmV2Zi9ldGh0b29sLmM6ODg0OlxcdHN0cnVjdCBpeGdiZXZmX2FkYXB0ZXIgKmFkYXB0ZXIgPSBuZXRkZXZfcHJpdihkZXYpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2l4Z2JldmYvZXRodG9vbC5jLTg4NS1cXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2l4Z2JldmYvZXRodG9vbC5jLTg4OC1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9peGdiZXZmL2V0aHRvb2wuYzo4ODk6c3RhdGljIHUzMiBpeGdiZXZmX2dldF9yeGZoX2luZGlyX3NpemUoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldilcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9peGdiZXZmL2V0aHRvb2wuYy04OTAte1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2l4Z2JldmYvZXRodG9vbC5jOjg5MTpcXHRzdHJ1Y3QgaXhnYmV2Zl9hZGFwdGVyICphZGFwdGVyID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9peGdiZXZmL2V0aHRvb2wuYy04OTItXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9peGdiZXZmL2V0aHRvb2wuYy04OTgtXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaXhnYmV2Zi9ldGh0b29sLmM6ODk5OnN0YXRpYyB1MzIgaXhnYmV2Zl9nZXRfcnhmaF9rZXlfc2l6ZShzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2KVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2l4Z2JldmYvZXRodG9vbC5jLTkwMC17XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9peGdiZXZmL2V0aHRvb2wuYy05MDMtXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaXhnYmV2Zi9ldGh0b29sLmM6OTA0OnN0YXRpYyBpbnQgaXhnYmV2Zl9nZXRfcnhmaChzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2l4Z2JldmYvZXRodG9vbC5jLTkwNS1cXHRcXHRcXHQgICAgc3RydWN0IGV0aHRvb2xfcnhmaF9wYXJhbSAqcnhmaClcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9peGdiZXZmL2V0aHRvb2wuYy05MDYte1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2l4Z2JldmYvZXRodG9vbC5jOjkwNzpcXHRzdHJ1Y3QgaXhnYmV2Zl9hZGFwdGVyICphZGFwdGVyID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9peGdiZXZmL2V0aHRvb2wuYy05MDgtXFx0aW50IGVyciA9IDA7XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9peGdiZXZmL2V0aHRvb2wuYy05MTQtXFx0XFx0XFx0bWVtY3B5KHJ4ZmgtXFx1MDAzZWtleSwgYWRhcHRlci1cXHUwMDNlcnNzX2tleSxcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9peGdiZXZmL2V0aHRvb2wuYzo5MTU6XFx0XFx0XFx0ICAgICAgIGl4Z2JldmZfZ2V0X3J4Zmhfa2V5X3NpemUobmV0ZGV2KSk7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaXhnYmV2Zi9ldGh0b29sLmMtOTE2LVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaXhnYmV2Zi9ldGh0b29sLmMtOTMxLVxcdFxcdGlmIChyeGZoLVxcdTAwM2VpbmRpcilcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9peGdiZXZmL2V0aHRvb2wuYzo5MzI6XFx0XFx0XFx0ZXJyID0gaXhnYmV2Zl9nZXRfcmV0YV9sb2NrZWQoXFx1MDAyNmFkYXB0ZXItXFx1MDAzZWh3LFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2l4Z2JldmYvZXRodG9vbC5jLTkzMy1cXHRcXHRcXHRcXHRcXHRcXHQgICAgICByeGZoLVxcdTAwM2VpbmRpcixcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2l4Z2JldmYvZXRodG9vbC5jLTkzNi1cXHRcXHRpZiAoIWVyciBcXHUwMDI2XFx1MDAyNiByeGZoLVxcdTAwM2VrZXkpXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaXhnYmV2Zi9ldGh0b29sLmM6OTM3OlxcdFxcdFxcdGVyciA9IGl4Z2JldmZfZ2V0X3Jzc19rZXlfbG9ja2VkKFxcdTAwMjZhZGFwdGVyLVxcdTAwM2VodyxcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9peGdiZXZmL2V0aHRvb2wuYy05MzgtXFx0XFx0XFx0XFx0XFx0XFx0XFx0IHJ4ZmgtXFx1MDAzZWtleSk7XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9peGdiZXZmL2V0aHRvb2wuYy05NDUtXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaXhnYmV2Zi9ldGh0b29sLmM6OTQ2OnN0YXRpYyB1MzIgaXhnYmV2Zl9nZXRfcHJpdl9mbGFncyhzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2KVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2l4Z2JldmYvZXRodG9vbC5jLTk0Ny17XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaXhnYmV2Zi9ldGh0b29sLmM6OTQ4OlxcdHN0cnVjdCBpeGdiZXZmX2FkYXB0ZXIgKmFkYXB0ZXIgPSBuZXRkZXZfcHJpdihuZXRkZXYpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2l4Z2JldmYvZXRodG9vbC5jLTk0OS1cXHR1MzIgcHJpdl9mbGFncyA9IDA7XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9peGdiZXZmL2V0aHRvb2wuYy05NTYtXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaXhnYmV2Zi9ldGh0b29sLmM6OTU3OnN0YXRpYyBpbnQgaXhnYmV2Zl9zZXRfcHJpdl9mbGFncyhzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LCB1MzIgcHJpdl9mbGFncylcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9peGdiZXZmL2V0aHRvb2wuYy05NTgte1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2l4Z2JldmYvZXRodG9vbC5jOjk1OTpcXHRzdHJ1Y3QgaXhnYmV2Zl9hZGFwdGVyICphZGFwdGVyID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9peGdiZXZmL2V0aHRvb2wuYy05NjAtXFx0dW5zaWduZWQgaW50IGZsYWdzID0gYWRhcHRlci1cXHUwMDNlZmxhZ3M7XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9peGdiZXZmL2V0aHRvb2wuYy05NzAtXFx0XFx0aWYgKG5ldGlmX3J1bm5pbmcobmV0ZGV2KSlcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9peGdiZXZmL2V0aHRvb2wuYzo5NzE6XFx0XFx0XFx0aXhnYmV2Zl9yZWluaXRfbG9ja2VkKGFkYXB0ZXIpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2l4Z2JldmYvZXRodG9vbC5jLTk3Mi1cXHR9XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9peGdiZXZmL2V0aHRvb2wuYy05NzYtXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaXhnYmV2Zi9ldGh0b29sLmM6OTc3OnN0YXRpYyBjb25zdCBzdHJ1Y3QgZXRodG9vbF9vcHMgaXhnYmV2Zl9ldGh0b29sX29wcyA9IHtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9peGdiZXZmL2V0aHRvb2wuYy05NzgtXFx0LnN1cHBvcnRlZF9jb2FsZXNjZV9wYXJhbXMgPSBFVEhUT09MX0NPQUxFU0NFX1VTRUNTLFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2l4Z2JldmYvZXRodG9vbC5jOjk3OTpcXHQuZ2V0X2RydmluZm9cXHRcXHQ9IGl4Z2JldmZfZ2V0X2RydmluZm8sXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaXhnYmV2Zi9ldGh0b29sLmM6OTgwOlxcdC5nZXRfcmVnc19sZW5cXHRcXHQ9IGl4Z2JldmZfZ2V0X3JlZ3NfbGVuLFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2l4Z2JldmYvZXRodG9vbC5jOjk4MTpcXHQuZ2V0X3JlZ3NcXHRcXHQ9IGl4Z2JldmZfZ2V0X3JlZ3MsXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaXhnYmV2Zi9ldGh0b29sLmM6OTgyOlxcdC5ud2F5X3Jlc2V0XFx0XFx0PSBpeGdiZXZmX253YXlfcmVzZXQsXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaXhnYmV2Zi9ldGh0b29sLmMtOTgzLVxcdC5nZXRfbGlua1xcdFxcdD0gZXRodG9vbF9vcF9nZXRfbGluayxcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9peGdiZXZmL2V0aHRvb2wuYzo5ODQ6XFx0LmdldF9yaW5ncGFyYW1cXHRcXHQ9IGl4Z2JldmZfZ2V0X3JpbmdwYXJhbSxcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9peGdiZXZmL2V0aHRvb2wuYzo5ODU6XFx0LnNldF9yaW5ncGFyYW1cXHRcXHQ9IGl4Z2JldmZfc2V0X3JpbmdwYXJhbSxcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9peGdiZXZmL2V0aHRvb2wuYzo5ODY6XFx0LmdldF9tc2dsZXZlbFxcdFxcdD0gaXhnYmV2Zl9nZXRfbXNnbGV2ZWwsXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaXhnYmV2Zi9ldGh0b29sLmM6OTg3OlxcdC5zZXRfbXNnbGV2ZWxcXHRcXHQ9IGl4Z2JldmZfc2V0X21zZ2xldmVsLFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2l4Z2JldmYvZXRodG9vbC5jOjk4ODpcXHQuc2VsZl90ZXN0XFx0XFx0PSBpeGdiZXZmX2RpYWdfdGVzdCxcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9peGdiZXZmL2V0aHRvb2wuYzo5ODk6XFx0LmdldF9zc2V0X2NvdW50XFx0XFx0PSBpeGdiZXZmX2dldF9zc2V0X2NvdW50LFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2l4Z2JldmYvZXRodG9vbC5jOjk5MDpcXHQuZ2V0X3N0cmluZ3NcXHRcXHQ9IGl4Z2JldmZfZ2V0X3N0cmluZ3MsXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaXhnYmV2Zi9ldGh0b29sLmM6OTkxOlxcdC5nZXRfZXRodG9vbF9zdGF0c1xcdD0gaXhnYmV2Zl9nZXRfZXRodG9vbF9zdGF0cyxcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9peGdiZXZmL2V0aHRvb2wuYzo5OTI6XFx0LmdldF9jb2FsZXNjZVxcdFxcdD0gaXhnYmV2Zl9nZXRfY29hbGVzY2UsXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaXhnYmV2Zi9ldGh0b29sLmM6OTkzOlxcdC5zZXRfY29hbGVzY2VcXHRcXHQ9IGl4Z2JldmZfc2V0X2NvYWxlc2NlLFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2l4Z2JldmYvZXRodG9vbC5jOjk5NDpcXHQuZ2V0X3J4X3JpbmdfY291bnRcXHQ9IGl4Z2JldmZfZ2V0X3J4X3JpbmdfY291bnQsXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaXhnYmV2Zi9ldGh0b29sLmM6OTk1OlxcdC5nZXRfcnhmaF9pbmRpcl9zaXplXFx0PSBpeGdiZXZmX2dldF9yeGZoX2luZGlyX3NpemUsXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaXhnYmV2Zi9ldGh0b29sLmM6OTk2OlxcdC5nZXRfcnhmaF9rZXlfc2l6ZVxcdD0gaXhnYmV2Zl9nZXRfcnhmaF9rZXlfc2l6ZSxcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9peGdiZXZmL2V0aHRvb2wuYzo5OTc6XFx0LmdldF9yeGZoXFx0XFx0PSBpeGdiZXZmX2dldF9yeGZoLFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2l4Z2JldmYvZXRodG9vbC5jOjk5ODpcXHQuZ2V0X2xpbmtfa3NldHRpbmdzXFx0PSBpeGdiZXZmX2dldF9saW5rX2tzZXR0aW5ncyxcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9peGdiZXZmL2V0aHRvb2wuYzo5OTk6XFx0LmdldF9wcml2X2ZsYWdzXFx0XFx0PSBpeGdiZXZmX2dldF9wcml2X2ZsYWdzLFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2l4Z2JldmYvZXRodG9vbC5jOjEwMDA6XFx0LnNldF9wcml2X2ZsYWdzXFx0XFx0PSBpeGdiZXZmX3NldF9wcml2X2ZsYWdzLFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2l4Z2JldmYvZXRodG9vbC5jLTEwMDEtfTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9peGdiZXZmL2V0aHRvb2wuYy0xMDAyLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2l4Z2JldmYvZXRodG9vbC5jOjEwMDM6dm9pZCBpeGdiZXZmX3NldF9ldGh0b29sX29wcyhzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2KVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2l4Z2JldmYvZXRodG9vbC5jLTEwMDQte1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2l4Z2JldmYvZXRodG9vbC5jOjEwMDU6XFx0bmV0ZGV2LVxcdTAwM2VldGh0b29sX29wcyA9IFxcdTAwMjZpeGdiZXZmX2V0aHRvb2xfb3BzO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2l4Z2JldmYvZXRodG9vbC5jLTEwMDYtfVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaXhnYmV2Zi9pcHNlYy5jLTMtXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaXhnYmV2Zi9pcHNlYy5jOjQ6I2luY2x1ZGUgXFxcIml4Z2JldmYuaFxcXCJcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9peGdiZXZmL2lwc2VjLmMtNS0jaW5jbHVkZSBcXHUwMDNjbmV0L3hmcm0uaFxcdTAwM2VcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2l4Z2JldmYvaXBzZWMuYz05PXN0YXRpYyBjb25zdCBjaGFyIGFlc19nY21fbmFtZVtdID0gXFxcInJmYzQxMDYoZ2NtKGFlcykpXFxcIjtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2l4Z2JldmYvaXBzZWMuYy0xMS0vKipcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9peGdiZXZmL2lwc2VjLmM6MTI6ICogaXhnYmV2Zl9pcHNlY19zZXRfcGZfc2EgLSBhc2sgdGhlIFBGIHRvIHNldCB1cCBhbiBTQVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2l4Z2JldmYvaXBzZWMuYy0xMy0gKiBAYWRhcHRlcjogYm9hcmQgcHJpdmF0ZSBzdHJ1Y3R1cmVcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2l4Z2JldmYvaXBzZWMuYy0xNy0gKiovXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaXhnYmV2Zi9pcHNlYy5jOjE4OnN0YXRpYyBpbnQgaXhnYmV2Zl9pcHNlY19zZXRfcGZfc2Eoc3RydWN0IGl4Z2JldmZfYWRhcHRlciAqYWRhcHRlcixcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9peGdiZXZmL2lwc2VjLmMtMTktXFx0XFx0XFx0XFx0ICAgc3RydWN0IHhmcm1fc3RhdGUgKnhzKVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaXhnYmV2Zi9pcHNlYy5jLTQyLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2l4Z2JldmYvaXBzZWMuYzo0MzpcXHRyZXQgPSBpeGdiZXZmX3dyaXRlX21ieChodywgbXNnYnVmLCBJWEdCRV9WRk1BSUxCT1hfU0laRSk7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaXhnYmV2Zi9pcHNlYy5jLTQ0LVxcdGlmIChyZXQpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9peGdiZXZmL2lwc2VjLmMtNDYtXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaXhnYmV2Zi9pcHNlYy5jOjQ3OlxcdHJldCA9IGl4Z2JldmZfcG9sbF9tYngoaHcsIG1zZ2J1ZiwgMik7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaXhnYmV2Zi9pcHNlYy5jLTQ4LVxcdGlmIChyZXQpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9peGdiZXZmL2lwc2VjLmMtNjEtLyoqXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaXhnYmV2Zi9pcHNlYy5jOjYyOiAqIGl4Z2JldmZfaXBzZWNfZGVsX3BmX3NhIC0gYXNrIHRoZSBQRiB0byBkZWxldGUgYW4gU0FcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9peGdiZXZmL2lwc2VjLmMtNjMtICogQGFkYXB0ZXI6IGJvYXJkIHByaXZhdGUgc3RydWN0dXJlXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9peGdiZXZmL2lwc2VjLmMtNjctICoqL1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2l4Z2JldmYvaXBzZWMuYzo2ODpzdGF0aWMgaW50IGl4Z2JldmZfaXBzZWNfZGVsX3BmX3NhKHN0cnVjdCBpeGdiZXZmX2FkYXB0ZXIgKmFkYXB0ZXIsIGludCBwZnNhKVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2l4Z2JldmYvaXBzZWMuYy02OS17XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9peGdiZXZmL2lwc2VjLmMtNzktXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaXhnYmV2Zi9pcHNlYy5jOjgwOlxcdGVyciA9IGl4Z2JldmZfd3JpdGVfbWJ4KGh3LCBtc2didWYsIDIpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2l4Z2JldmYvaXBzZWMuYy04MS1cXHRpZiAoZXJyKVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaXhnYmV2Zi9pcHNlYy5jLTgzLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2l4Z2JldmYvaXBzZWMuYzo4NDpcXHRlcnIgPSBpeGdiZXZmX3BvbGxfbWJ4KGh3LCBtc2didWYsIDIpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2l4Z2JldmYvaXBzZWMuYy04NS1cXHRpZiAoZXJyKVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaXhnYmV2Zi9pcHNlYy5jLTkzLS8qKlxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2l4Z2JldmYvaXBzZWMuYzo5NDogKiBpeGdiZXZmX2lwc2VjX3Jlc3RvcmUgLSByZXN0b3JlIHRoZSBJUHNlYyBIVyBzZXR0aW5ncyBhZnRlciBhIHJlc2V0XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaXhnYmV2Zi9pcHNlYy5jLTk1LSAqIEBhZGFwdGVyOiBib2FyZCBwcml2YXRlIHN0cnVjdHVyZVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaXhnYmV2Zi9pcHNlYy5jLTEwMC0gKiovXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaXhnYmV2Zi9pcHNlYy5jOjEwMTp2b2lkIGl4Z2JldmZfaXBzZWNfcmVzdG9yZShzdHJ1Y3QgaXhnYmV2Zl9hZGFwdGVyICphZGFwdGVyKVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2l4Z2JldmYvaXBzZWMuYy0xMDIte1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2l4Z2JldmYvaXBzZWMuYzoxMDM6XFx0c3RydWN0IGl4Z2JldmZfaXBzZWMgKmlwc2VjID0gYWRhcHRlci1cXHUwMDNlaXBzZWM7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaXhnYmV2Zi9pcHNlYy5jLTEwNC1cXHRzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2ID0gYWRhcHRlci1cXHUwMDNlbmV0ZGV2O1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaXhnYmV2Zi9pcHNlYy5jLTExNi1cXHRcXHRpZiAoci1cXHUwMDNldXNlZCkge1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2l4Z2JldmYvaXBzZWMuYzoxMTc6XFx0XFx0XFx0cmV0ID0gaXhnYmV2Zl9pcHNlY19zZXRfcGZfc2EoYWRhcHRlciwgci1cXHUwMDNleHMpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2l4Z2JldmYvaXBzZWMuYy0xMTgtXFx0XFx0XFx0aWYgKHJldCBcXHUwMDNjIDApXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9peGdiZXZmL2lwc2VjLmMtMTIzLVxcdFxcdGlmICh0LVxcdTAwM2V1c2VkKSB7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaXhnYmV2Zi9pcHNlYy5jOjEyNDpcXHRcXHRcXHRyZXQgPSBpeGdiZXZmX2lwc2VjX3NldF9wZl9zYShhZGFwdGVyLCB0LVxcdTAwM2V4cyk7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaXhnYmV2Zi9pcHNlYy5jLTEyNS1cXHRcXHRcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2l4Z2JldmYvaXBzZWMuYy0xMzItLyoqXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaXhnYmV2Zi9pcHNlYy5jOjEzMzogKiBpeGdiZXZmX2lwc2VjX2ZpbmRfZW1wdHlfaWR4IC0gZmluZCB0aGUgZmlyc3QgdW51c2VkIHNlY3VyaXR5IHBhcmFtZXRlciBpbmRleFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2l4Z2JldmYvaXBzZWMuYy0xMzQtICogQGlwc2VjOiBwb2ludGVyIHRvIElQc2VjIHN0cnVjdFxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaXhnYmV2Zi9pcHNlYy5jPTEzOT1zdGF0aWNcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9peGdiZXZmL2lwc2VjLmM6MTQwOmludCBpeGdiZXZmX2lwc2VjX2ZpbmRfZW1wdHlfaWR4KHN0cnVjdCBpeGdiZXZmX2lwc2VjICppcHNlYywgYm9vbCByeHRhYmxlKVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2l4Z2JldmYvaXBzZWMuYy0xNDEte1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaXhnYmV2Zi9pcHNlYy5jLTE2Ny0vKipcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9peGdiZXZmL2lwc2VjLmM6MTY4OiAqIGl4Z2JldmZfaXBzZWNfZmluZF9yeF9zdGF0ZSAtIGZpbmQgdGhlIHN0YXRlIHRoYXQgbWF0Y2hlc1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2l4Z2JldmYvaXBzZWMuYy0xNjktICogQGlwc2VjOiBwb2ludGVyIHRvIElQc2VjIHN0cnVjdFxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaXhnYmV2Zi9pcHNlYy5jPTE3Nz1zdGF0aWNcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9peGdiZXZmL2lwc2VjLmM6MTc4OnN0cnVjdCB4ZnJtX3N0YXRlICppeGdiZXZmX2lwc2VjX2ZpbmRfcnhfc3RhdGUoc3RydWN0IGl4Z2JldmZfaXBzZWMgKmlwc2VjLFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2l4Z2JldmYvaXBzZWMuYy0xNzktXFx0XFx0XFx0XFx0XFx0ICAgICAgIF9fYmUzMiAqZGFkZHIsIHU4IHByb3RvLFxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaXhnYmV2Zi9pcHNlYy5jLTIwMi0vKipcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9peGdiZXZmL2lwc2VjLmM6MjAzOiAqIGl4Z2JldmZfaXBzZWNfcGFyc2VfcHJvdG9fa2V5cyAtIGZpbmQgdGhlIGtleSBhbmQgc2FsdCBiYXNlZCBvbiB0aGUgcHJvdG9jb2xcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9peGdiZXZmL2lwc2VjLmMtMjA0LSAqIEBkZXY6IHBvaW50ZXIgdG8gbmV0IGRldmljZSB0byBwcm9ncmFtXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9peGdiZXZmL2lwc2VjLmMtMjExLSAqKi9cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9peGdiZXZmL2lwc2VjLmM6MjEyOnN0YXRpYyBpbnQgaXhnYmV2Zl9pcHNlY19wYXJzZV9wcm90b19rZXlzKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaXhnYmV2Zi9pcHNlYy5jLTIxMy1cXHRcXHRcXHRcXHRcXHQgIHN0cnVjdCB4ZnJtX3N0YXRlICp4cyxcXG5cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjRUMTQ6MTk6MzguOTU2OTMwMTIxWiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTgzMTUzNTEyNzcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqV29ydGhGdXp6aW5nIEFzc2Vzc21lbnQgZm9yIGl4Z2JldmYgUGF0Y2gqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIFRoZSBwYXRjaCB0YXJnZXRzIHRoZSBgaXhnYmV2ZmAgZHJpdmVyLCBJbnRlbCdzIDEwR2JFIFBDSSBFeHByZXNzIFZpcnR1YWwgRnVuY3Rpb24gZHJpdmVyLiBJdCdzIG1vZGlmeWluZyB0d28gZnVuY3Rpb25zLCBgaXhnYmV2Zl9nZXRfbGlua19rc2V0dGluZ3NgIGFuZCBgaXhnYmV2Zl9odl9jaGVja19tYWNfbGlua192ZmAsIHdoaWNoIGRlYWwgd2l0aCBsaW5rIHN0YXR1cywgc3BlY2lmaWNhbGx5IHJlYWRpbmcgZnJvbSBQQ0kgY29uZmlnIHNwYWNlLiBUaGUgY2F0Y2ggaXMgdGhhdCBpdCdzIGZvY3VzaW5nIG9uIEh5cGVyLVYgRTYxMCBWRnMuXG5cblRoZSBpbnN0cnVjdGlvbnMgc2F5IHRvIHJldHVybiBgV29ydGhGdXp6aW5nPWZhbHNlYCBpZiB0aGUgcGF0Y2ggZmFsbHMgaW50byB0aGUgY2F0ZWdvcnkgb2YgdmVuZG9yLXNwZWNpZmljIFBDSWUgZHJpdmVycyB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgaGFyZHdhcmUgbm90IGVtdWxhdGVkIGluIFFFTVUuIE15IGluaXRpYWwgdGhvdWdodCBpcyB0aGF0IGBpeGdiZXZmYCAqaXMqIGEgVkYgZHJpdmVyLCBhbmQgVkZzIGFyZSB1c3VhbGx5IGV4cG9zZWQgYnkgcGh5c2ljYWwgaGFyZHdhcmUgdXNpbmcgU1ItSU9WLiBTeXprYWxsZXIgZG9lc24ndCBlbXVsYXRlIHRoZSBWRiBkaXJlY3RseTsgaXQgZW11bGF0ZXMgdGhlIFBGIChgaXhnYmVgKS4gU28gdGhlIHF1ZXN0aW9uIGlzOiBkb2VzIFFFTVUgZW11bGF0ZSBgaXhnYmV2ZmA/IEkgbmVlZCB0byBjaGVjay4gIFdoaWxlIFFFTVUgaGFzIGBpZ2J2Zi5jYCBhbmQgYGlnYi5jYCwgZm9yIGBpeGdiZWAsIHRoZXJlJ3Mgb25seSBgaXhnYmUuY2AgLSBubyBgaXhnYmV2Zi5jYCEgU28sIG15IGluaXRpYWwgZ3Vlc3MgaXMgdGhhdCBpdCBkb2VzICpub3QqIGZ1bGx5IGVtdWxhdGUgdGhlIFZGIGZvciBpeGdiZS4gQnV0IGxldCdzIHZlcmlmeS4gSSBzaG91bGQgY29uZmlybSBpZiBzeXprYWxsZXIgZXZlbiAqYXR0ZW1wdHMqIHRvIHJlYWNoIGBpeGdiZXZmYCBjb2RlIHBhdGhzLlxuXG5Ib3dldmVyLCB0aGUgcGF0Y2ggKnNwZWNpZmljYWxseSogbWVudGlvbnMgSHlwZXItViBFNjEwIFZGcy4gVGhpcyBpbXBsaWVzIGEgdmVyeSBuYXJyb3cgdXNlIGNhc2U6IGEgdmlydHVhbCBmdW5jdGlvbiBvZiBhbiBFNjEwIE5JQyBydW5uaW5nIHVuZGVyIEh5cGVyLVYuIENhbiBTeXprYWxsZXIgZnV6eiBIeXBlci1WLXNwZWNpZmljIGNvZGUgaW4gYGl4Z2JldmZgPyBTeXprYWxsZXIgcnVucyBvbiBHQ0UgKEtWTSkgb3IgUUVNVSAoS1ZNL1RDRykuIEl0IGRvZXNuJ3QgcnVuIG9uIEh5cGVyLVYsIHNvIHRoYXQncyBhIHByb2JsZW0uIEFsc28sIHRoZSBwYXRjaCBoYXMgYSBjaGVjayBmb3IgYGh3LVx1MDAzZW1hYy50eXBlID09IGl4Z2JlX21hY19lNjEwX3ZmYC4gRTYxMCBpcyBhIHNwZWNpZmljIGhhcmR3YXJlIE1BQyB0eXBlLiBRRU1VIGVtdWxhdGVzIDgyNTk5LCBub3QgdGhlIEU2MTAuIFNvIGBpeGdiZV9tYWNfZTYxMF92ZmAgaXMgbGlrZWx5IHVucmVhY2hhYmxlIGluIFFFTVUuIFN5emthbGxlciBjYW4gZnV6eiBQQ0kgZGV2aWNlcyBpZiB0aGV5J3JlIGVtdWxhdGVkLCBidXQgdGhlIEU2MTAgVkYgaXNuJ3QuXG5cbk5vdywgbGV0J3Mgc3RlcCBiYWNrIGFuZCBjb25zaWRlciB0aGUgZnV6emluZyBpbnN0cnVjdGlvbnMgYWdhaW4uIFRoZXkgZXhwbGljaXRseSBydWxlIG91dCBjb2RlIHBhdGhzIHVucmVhY2hhYmxlIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLCBldmVuIHdpdGggc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUuIFRoZXkgYWxzbyBleGNsdWRlIHZlbmRvci1zcGVjaWZpYyBQQ0llIGRyaXZlcnMgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuIGBpeGdiZXZmYCAqaXMqIGFuIEV0aGVybmV0IGRyaXZlciBmb3IgSW50ZWwgMTBHYkUgVkZzLiBBbmQgaXQgcmVxdWlyZXMgcGh5c2ljYWwgaGFyZHdhcmUsICpvciogYSBoeXBlcnZpc29yIHRoYXQgZW11bGF0ZXMgaXQuIFN0YW5kYXJkIFFFTVUgZG9lc24ndCBlbXVsYXRlIEU2MTAgVkZzLiBTbywgUUVNVSBtaWdodCBlbXVsYXRlIGBpeGdiZXZmYCwgYnV0LCBpcyB0aGlzIGNvZGUgcGF0aCBmb3IgYGl4Z2JlX21hY19lNjEwX3ZmYCBhbmQgSHlwZXItVj8gVGhlIGZ1bmN0aW9uIGBpeGdiZXZmX2h2X2NoZWNrX21hY19saW5rX3ZmYCBpcyBvbmx5IGNhbGxlZCB3aGVuIHRoZSBNQUMgb3BlcmF0aW9ucyBhcmUgc2V0IHVwIGZvciBIeXBlci1WLlxuXG5JIG5lZWQgdG8gY29uZmlybSBpZiBRRU1VIGVtdWxhdGVzIGl0LCBidXQsIGl0J3MgaXJyZWxldmFudCwgYmVjYXVzZSB0aGUgY29kZSBpcyBIeXBlci1WIHNwZWNpZmljLiBUaGVyZWZvcmUsIHRoZSBwYXRjaCB0YXJnZXRzIGEgdmVyeSBzcGVjaWZpYywgbGlrZWx5IHVuLWZ1enphYmxlLCBzaXR1YXRpb24uIEkgc2hvdWxkIGNoZWNrIGBkcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9peGdiZXZmL3ZmLmNgIHRvIGJlIHN1cmUgaG93IGBpeGdiZXZmX2h2X2NoZWNrX21hY19saW5rX3ZmYCBpcyBhc3NpZ25lZC4gQnV0IGJhc2VkIG9uIHRoZSByZXN0cmljdGlvbnMsIHRoaXMgaXMgYWxtb3N0IGNlcnRhaW5seSBgV29ydGhGdXp6aW5nPWZhbHNlYC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTk5NjUsIk91dHB1dFRva2VucyI6NDcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo5NjksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjRUMTQ6MTk6NTcuMjcyMjg0NTM4WiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEwMzY2MzU1MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJpeGdiZXZmX2h2X2NoZWNrX21hY19saW5rX3ZmXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2l4Z2JldmZcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaXhnYmV2Zi92Zi5jPTkxOD1zdGF0aWMgczMyIGl4Z2JldmZfaHZfcmVhZF9saW5rc19lNjEwKHN0cnVjdCBpeGdiZV9odyAqaHcsIHUzMiAqbGlua3NfcmVnKVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaXhnYmV2Zi92Zi5jLTk0MS0vKipcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9peGdiZXZmL3ZmLmM6OTQyOiAqIGl4Z2JldmZfaHZfY2hlY2tfbWFjX2xpbmtfdmYgLSBjaGVjayBsaW5rXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaXhnYmV2Zi92Zi5jLTk0My0gKiBAaHc6IHBvaW50ZXIgdG8gcHJpdmF0ZSBoYXJkd2FyZSBzdHJ1Y3RcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2l4Z2JldmYvdmYuYy05NTAtICovXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaXhnYmV2Zi92Zi5jOjk1MTpzdGF0aWMgczMyIGl4Z2JldmZfaHZfY2hlY2tfbWFjX2xpbmtfdmYoc3RydWN0IGl4Z2JlX2h3ICpodyxcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9peGdiZXZmL3ZmLmMtOTUyLVxcdFxcdFxcdFxcdFxcdGl4Z2JlX2xpbmtfc3BlZWQgKnNwZWVkLFxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaXhnYmV2Zi92Zi5jPTExOTQ9c3RhdGljIGNvbnN0IHN0cnVjdCBpeGdiZV9tYWNfb3BlcmF0aW9ucyBpeGdiZXZmX2h2X21hY19vcHMgPSB7XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9peGdiZXZmL3ZmLmMtMTIwMC1cXHQuc2V0dXBfbGlua1xcdFxcdD0gaXhnYmV2Zl9zZXR1cF9tYWNfbGlua192ZixcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9peGdiZXZmL3ZmLmM6MTIwMTpcXHQuY2hlY2tfbGlua1xcdFxcdD0gaXhnYmV2Zl9odl9jaGVja19tYWNfbGlua192ZixcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9peGdiZXZmL3ZmLmMtMTIwMi1cXHQubmVnb3RpYXRlX2FwaV92ZXJzaW9uXFx0PSBpeGdiZXZmX2h2X25lZ290aWF0ZV9hcGlfdmVyc2lvbl92ZixcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjRUMTQ6MTk6NTcuMzc1OTU5NDI4WiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6ODc2OTY1MzAwMSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBteSBvd246XG5cbioqRGlnZ2luZyBpbnRvIHRoZSBpeGdiZXZmIERyaXZlcidzIE1BQyBPcGVyYXRpb25zKipcblxuQWxyaWdodCwgbGV0J3Mgc2VlLCBgaXhnYmV2Zl9odl9jaGVja19tYWNfbGlua192ZmAgaXMgZGVmaW5pdGVseSBwYXJ0IG9mIHRoYXQgYGl4Z2JldmZfaHZfbWFjX29wc2Agc3RydWN0dXJlLiBNeSBuZXh0IGxvZ2ljYWwgc3RlcCBpcyB0byB1bmRlcnN0YW5kIHRoZSBzY29wZSBhbmQgdXNhZ2Ugb2YgdGhhdCBgaXhnYmV2Zl9odl9tYWNfb3BzYCBzdHJ1Y3R1cmUgaXRzZWxmLiBJIG5lZWQgdG8gdHJhY2Ugd2hlcmUgaXQncyBiZWluZyBlbXBsb3llZCBpbiB0aGUgZHJpdmVyLiBLbm93aW5nIGhvdyBpdCdzIHVzZWQgd2lsbCBnaXZlIG1lIHRoZSBjb250ZXh0dWFsIGJhY2tncm91bmQgdG8gdW5kZXJzdGFuZCB0aGUgcHVycG9zZSBhbmQgZnVuY3Rpb24gb2YgdGhlIGBjaGVja19tYWNfbGlua192ZmAgZnVuY3Rpb24uIFRpbWUgdG8gZGl2ZSBkZWVwZXIgYW5kIHNlZSB3aGF0IEkgY2FuIGZpbmQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIyMjkyLCJPdXRwdXRUb2tlbnMiOjQzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjRUMTQ6MjA6MDYuMTQ1NjE1MzE5WiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEwMzg0MTEwMSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJpeGdiZXZmX2h2X21hY19vcHNcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaXhnYmV2ZlwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9peGdiZXZmL3ZmLmM9MTE3NT1zdGF0aWMgY29uc3Qgc3RydWN0IGl4Z2JlX21hY19vcGVyYXRpb25zIGl4Z2JldmZfbWFjX29wcyA9IHtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2l4Z2JldmYvdmYuYy0xMTkzLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2l4Z2JldmYvdmYuYzoxMTk0OnN0YXRpYyBjb25zdCBzdHJ1Y3QgaXhnYmVfbWFjX29wZXJhdGlvbnMgaXhnYmV2Zl9odl9tYWNfb3BzID0ge1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2l4Z2JldmYvdmYuYy0xMTk1LVxcdC5pbml0X2h3XFx0XFx0PSBpeGdiZXZmX2luaXRfaHdfdmYsXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9peGdiZXZmL3ZmLmM9MTIxOD1jb25zdCBzdHJ1Y3QgaXhnYmV2Zl9pbmZvIGl4Z2JldmZfODI1OTlfdmZfaHZfaW5mbyA9IHtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9peGdiZXZmL3ZmLmMtMTIxOS1cXHQubWFjID0gaXhnYmVfbWFjXzgyNTk5X3ZmLFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2l4Z2JldmYvdmYuYzoxMjIwOlxcdC5tYWNfb3BzID0gXFx1MDAyNml4Z2JldmZfaHZfbWFjX29wcyxcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9peGdiZXZmL3ZmLmMtMTIyMS19O1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaXhnYmV2Zi92Zi5jPTEyMjg9Y29uc3Qgc3RydWN0IGl4Z2JldmZfaW5mbyBpeGdiZXZmX1g1NDBfdmZfaHZfaW5mbyA9IHtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9peGdiZXZmL3ZmLmMtMTIyOS1cXHQubWFjID0gaXhnYmVfbWFjX1g1NDBfdmYsXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaXhnYmV2Zi92Zi5jOjEyMzA6XFx0Lm1hY19vcHMgPSBcXHUwMDI2aXhnYmV2Zl9odl9tYWNfb3BzLFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2l4Z2JldmYvdmYuYy0xMjMxLX07XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9peGdiZXZmL3ZmLmM9MTIzOD1jb25zdCBzdHJ1Y3QgaXhnYmV2Zl9pbmZvIGl4Z2JldmZfWDU1MF92Zl9odl9pbmZvID0ge1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2l4Z2JldmYvdmYuYy0xMjM5LVxcdC5tYWMgPSBpeGdiZV9tYWNfWDU1MF92ZixcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9peGdiZXZmL3ZmLmM6MTI0MDpcXHQubWFjX29wcyA9IFxcdTAwMjZpeGdiZXZmX2h2X21hY19vcHMsXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaXhnYmV2Zi92Zi5jLTEyNDEtfTtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2l4Z2JldmYvdmYuYz0xMjQ4PWNvbnN0IHN0cnVjdCBpeGdiZXZmX2luZm8gaXhnYmV2Zl9YNTUwRU1feF92Zl9odl9pbmZvID0ge1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2l4Z2JldmYvdmYuYy0xMjQ5LVxcdC5tYWMgPSBpeGdiZV9tYWNfWDU1MEVNX3hfdmYsXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaXhnYmV2Zi92Zi5jOjEyNTA6XFx0Lm1hY19vcHMgPSBcXHUwMDI2aXhnYmV2Zl9odl9tYWNfb3BzLFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2l4Z2JldmYvdmYuYy0xMjUxLX07XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9peGdiZXZmL3ZmLmM9MTI2Mz1jb25zdCBzdHJ1Y3QgaXhnYmV2Zl9pbmZvIGl4Z2JldmZfZTYxMF92Zl9odl9pbmZvID0ge1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2l4Z2JldmYvdmYuYy0xMjY0LVxcdC5tYWMgICAgICAgICAgICA9IGl4Z2JlX21hY19lNjEwX3ZmLFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2l4Z2JldmYvdmYuYzoxMjY1OlxcdC5tYWNfb3BzICAgICAgICA9IFxcdTAwMjZpeGdiZXZmX2h2X21hY19vcHMsXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaXhnYmV2Zi92Zi5jLTEyNjYtfTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjRUMTQ6MjA6MDYuMjQ5NDYyMTc5WiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTQxOTU3ODM5OTIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBzdW1tYXJ5LCB0YWtpbmcgb24gdGhlIHBlcnNvbmEgeW91J3ZlIGRlc2NyaWJlZDpcblxuKipBbmFseXppbmcgdGhlIENvbnRleHQgb2YgYGl4Z2JldmZfbWFpbi5jYCBVc2FnZSoqXG5cbkFscmlnaHQsIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzLCBiYXNlZCBvbiB0aGUgZmlsZSBuYW1lLCB0aGF0IHRoZXNlIGFyZSBwcm9iYWJseSBjZW50cmFsIGNvbXBvbmVudHMgdXNlZCB3aXRoaW4gdGhlIGBpeGdiZXZmX21haW4uY2AgZmlsZS4gS25vd2luZyB0aGF0IGZpbGUgYW5kIGl0cyBjb250ZXh0IGlzIGNydWNpYWwgZm9yIHVuZGVyc3RhbmRpbmcgKmhvdyogdGhlc2UgZWxlbWVudHMgYXJlIGJlaW5nIHVzZWQuIEFyZSB3ZSB0YWxraW5nIGFib3V0IGRhdGEgc3RydWN0dXJlcywgZnVuY3Rpb24gY2FsbHMsIG9yIG1heWJlIHNvbWUga2V5IHZhcmlhYmxlcyBvciBtYWNyb3MgdGhhdCBkZWZpbmUgY29yZSBmdW5jdGlvbmFsaXRpZXMgb2YgdGhlIEludGVsIFg3MTAgVmlydHVhbCBGdW5jdGlvbiBkcml2ZXI/IE15IG1pbmQgaW1tZWRpYXRlbHkgc3RhcnRzIHRvIHJ1biB0aHJvdWdoIHRoZSBjb21tb24gYXJlYXMgd2l0aGluIGRyaXZlciBjb2RlOiBpbml0aWFsaXphdGlvbiwgcGFja2V0IHByb2Nlc3NpbmcsIGludGVycnVwdCBoYW5kbGluZywgb3IgcmVzb3VyY2UgbWFuYWdlbWVudC4gR2l2ZW4gdGhlIHRlcm0sIEknZCBleHBlY3QgdGhpcyBjb2RlIHRvIHJlbGF0ZSB0byB0aGUgVmlydHVhbCBGdW5jdGlvbiBzaWRlIG9mIHRoaW5ncy4gSXQgYWxsIGRlcGVuZHMgb24gaG93IGBpeGdiZXZmX21haW4uY2AgaW50ZWdyYXRlcyB3aXRoIHRoZSBvdmVyYWxsIGl4Z2JlIGRyaXZlciBhcmNoaXRlY3R1cmUgYW5kIHRoZSBWRidzIGNvbW11bmljYXRpb24gZmxvdy4gTXkgbmV4dCBzdGVwIHdvdWxkIGJlIHRvIHJldmlldyB0aGUgYXNzb2NpYXRlZCBjb2RlIHN1cnJvdW5kaW5nIHRoZXNlIGVsZW1lbnRzIHdpdGhpbiB0aGF0IHNwZWNpZmljIGZpbGUgdG8gY29uZmlybSBteSBleHBlY3RhdGlvbnMuIEkgbmVlZCB0byBzZWUgdGhlIGltcGxlbWVudGF0aW9uIGRldGFpbHMgdG8gZ2V0IHRoZSB3aG9sZSBwaWN0dXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMzUyMywiT3V0cHV0VG9rZW5zIjo0OCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI0VDE0OjIwOjIwLjQ0NTI0ODk0MVoiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDI1MjUwNDUyLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIml4Z2JldmZfZTYxMF92Zl9odl9pbmZvXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2l4Z2JldmZcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaXhnYmV2Zi9peGdiZXZmLmg9NDMyPWV4dGVybiBjb25zdCBzdHJ1Y3QgaXhnYmV2Zl9pbmZvIGl4Z2JldmZfWDU1MEVNX3hfdmZfaHZfaW5mbztcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9peGdiZXZmL2l4Z2JldmYuaDo0MzM6ZXh0ZXJuIGNvbnN0IHN0cnVjdCBpeGdiZXZmX2luZm8gaXhnYmV2Zl9lNjEwX3ZmX2h2X2luZm87XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaXhnYmV2Zi9peGdiZXZmLmgtNDM0LVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaXhnYmV2Zi9peGdiZXZmX21haW4uYz00ND1zdGF0aWMgY29uc3Qgc3RydWN0IGl4Z2JldmZfaW5mbyAqaXhnYmV2Zl9pbmZvX3RibFtdID0ge1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaXhnYmV2Zi9peGdiZXZmX21haW4uYy01NC1cXHRbYm9hcmRfZTYxMF92Zl0gICAgICAgICA9IFxcdTAwMjZpeGdiZXZmX2U2MTBfdmZfaW5mbyxcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9peGdiZXZmL2l4Z2JldmZfbWFpbi5jOjU1OlxcdFtib2FyZF9lNjEwX3ZmX2h2XSAgICAgID0gXFx1MDAyNml4Z2JldmZfZTYxMF92Zl9odl9pbmZvLFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2l4Z2JldmYvaXhnYmV2Zl9tYWluLmMtNTYtfTtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2l4Z2JldmYvdmYuYz0xMjU4PWNvbnN0IHN0cnVjdCBpeGdiZXZmX2luZm8gaXhnYmV2Zl9lNjEwX3ZmX2luZm8gPSB7XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9peGdiZXZmL3ZmLmMtMTI2Mi1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9peGdiZXZmL3ZmLmM6MTI2Mzpjb25zdCBzdHJ1Y3QgaXhnYmV2Zl9pbmZvIGl4Z2JldmZfZTYxMF92Zl9odl9pbmZvID0ge1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2l4Z2JldmYvdmYuYy0xMjY0LVxcdC5tYWMgICAgICAgICAgICA9IGl4Z2JlX21hY19lNjEwX3ZmLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNFQxNDoyMDoyMC44NzA1MDY3NzNaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NzI1OTY4NTYzMiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBwcmVzZW50ZWQgaW4gdGhlIGZpcnN0IHBlcnNvbjpcblxuKipJbnZlc3RpZ2F0aW5nIHRoZSBQQ0kgRGV2aWNlIElEIEFzc29jaWF0aW9uKipcblxuQWxyaWdodCwgc28gYGJvYXJkX2U2MTBfdmZfaHZgIGlzIGxpc3RlZCBpbiB0aGUgUENJIGRldmljZSBJRCB0YWJsZS4gVGhhdCdzIGEgZ29vZCBzdGFydGluZyBwb2ludC4gTXkgbmV4dCBtb3ZlIGlzIGNsZWFyOiBJIG5lZWQgdG8gZGlnIGludG8gYGl4Z2JldmZfcGNpX3RibGAgdG8gdW5kZXJzdGFuZCBob3cgdGhpcyBJRCBpcyBtYXBwZWQgd2l0aGluIHRoZSBjb250ZXh0IG9mIHRoZSBkcml2ZXIuIExldCdzIGhlYWQgb3ZlciB0byBgaXhnYmV2Zl9tYWluLmNgIGFuZCB0YWtlIGEgbG9vay4gSSdtIGFzc3VtaW5nIHRoYXQgdGhlIGRldmljZSBJRCB0YWJsZSB3aXRoaW4gYGl4Z2JldmZfcGNpX3RibGAgd2lsbCBjb250YWluIGFsbCB0aGUgbmVjZXNzYXJ5IGluZm9ybWF0aW9uIGFib3V0IHRoYXQgUENJIGRldmljZSwgc28gSSBjYW4gYXNzb2NpYXRlIHRoZSBzcGVjaWZpYyBgYm9hcmRfZTYxMF92Zl9odmAgYW5kIGludmVzdGlnYXRlIGl0cyBzcGVjaWZpYyByZXF1aXJlbWVudHMuIEkgZXhwZWN0IHRvIGJlIGxvb2tpbmcgZm9yIGFzc29jaWF0ZWQgc3RydWN0dXJlcywgb3Igc3BlY2lmaWMgZnVuY3Rpb24gY2FsbHMgdGhhdCB0cmlnZ2VyIGJhc2VkIG9uIHRoaXMgZGV2aWNlIElELiBIb3BlZnVsbHksIEkgY2FuIGZpbmQgd2hhdCBjb25maWd1cmF0aW9ucyBhcmUgaW4gZWZmZWN0IGZvciB0aGlzIHBhcnRpY3VsYXIgZGV2aWNlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNDMzMiwiT3V0cHV0VG9rZW5zIjo0MywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQ5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI0VDE0OjIwOjI4LjEzMDE5NTE4NVoiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjQyNTk2MDQ0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImJvYXJkX2U2MTBfdmZfaHZcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaXhnYmV2ZlwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9peGdiZXZmL2l4Z2JldmYuaD0zOTk9ZW51bSBpeGdiZXZmX2JvYXJkcyB7XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9peGdiZXZmL2l4Z2JldmYuaC00MDktXFx0Ym9hcmRfZTYxMF92ZixcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9peGdiZXZmL2l4Z2JldmYuaDo0MTA6XFx0Ym9hcmRfZTYxMF92Zl9odixcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9peGdiZXZmL2l4Z2JldmYuaC00MTEtfTtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2l4Z2JldmYvaXhnYmV2Zl9tYWluLmM9NDQ9c3RhdGljIGNvbnN0IHN0cnVjdCBpeGdiZXZmX2luZm8gKml4Z2JldmZfaW5mb190YmxbXSA9IHtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2l4Z2JldmYvaXhnYmV2Zl9tYWluLmMtNTQtXFx0W2JvYXJkX2U2MTBfdmZdICAgICAgICAgPSBcXHUwMDI2aXhnYmV2Zl9lNjEwX3ZmX2luZm8sXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaXhnYmV2Zi9peGdiZXZmX21haW4uYzo1NTpcXHRbYm9hcmRfZTYxMF92Zl9odl0gICAgICA9IFxcdTAwMjZpeGdiZXZmX2U2MTBfdmZfaHZfaW5mbyxcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9peGdiZXZmL2l4Z2JldmZfbWFpbi5jLTU2LX07XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9peGdiZXZmL2l4Z2JldmZfbWFpbi5jPTY2PXN0YXRpYyBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCBpeGdiZXZmX3BjaV90YmxbXSA9IHtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2l4Z2JldmYvaXhnYmV2Zl9tYWluLmMtOTYtXFx0XFx0XFx0XFx0UENJX0FOWV9JRCwgSVhHQkVfU1VCREVWX0lEX0U2MTBfVkZfSFYpLFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2l4Z2JldmYvaXhnYmV2Zl9tYWluLmM6OTc6XFx0XFx0LmRyaXZlcl9kYXRhID0gYm9hcmRfZTYxMF92Zl9odixcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9peGdiZXZmL2l4Z2JldmZfbWFpbi5jLTk4LVxcdH0sIHtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjRUMTQ6MjA6MjguMzcyODAwNTc5WiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjIxOTEzNDg2NzU5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFzc2Vzc21lbnQgb2YgdGhlIEZ1enphYmlsaXR5IG9mIHRoaXMgaXhnYmV2ZiBQYXRjaCoqXG5cbk9rYXksIGxldCBtZSBicmVhayB0aGlzIGRvd24uIE15IGluaXRpYWwgdGhvdWdodCBpcyB0aGF0IHRoZSBkcml2ZXIgYmluZHMgdG8gYSBzcGVjaWZpYyBQQ0kgZGV2aWNlIElELiBUaGF0J3MgdGhlIGtleS4gRmlyc3QsIGlzIHRoaXMgZGV2aWNlIGVtdWxhdGVkIGluIFFFTVU/IE5vLiBPa2F5LCB0aGF0IHJ1bGVzIG91dCBzdGFuZGFyZCBRRU1VLWJhc2VkIGZ1enppbmcuIE5vdywgY2FuIHN5emthbGxlciBmdXp6IHRoaXM/IEkgbmVlZCB0byB0aGluayB0aGlzIHRocm91Z2guXG5cbldhaXQsIGRvZXNuJ3Qgc3l6a2FsbGVyIGhhdmUgdGhhdCBtZWNoYW5pc20gdXNpbmcgYHN5el9wY2lfc2V0dXBgIGFuZCBgc3l6X3BjaV9kZXZpY2VgPyBSaWdodCEgU3l6a2FsbGVyIHVzZXMgYHN5el9wY2lfZGV2aWNlYCB0bywgZXNzZW50aWFsbHksIGluamVjdCBhcmJpdHJhcnkgUENJIGRldmljZXMgaW50byB0aGUga2VybmVsIHRocm91Z2ggdmlydHVhbCBoYXJkd2FyZSBpbnRlcmZhY2VzLiBUaGlzIHNvdW5kcyBwcm9taXNpbmcuIFNvLCBzeXprYWxsZXIgKmRvZXMqIGhhdmUgYSBQQ0kgZnV6emVyIHRoYXQgY2FuIGVtdWxhdGUgYSBQQ0kgZGV2aWNlIHdpdGggYSBzcGVjaWZpYyB2ZW5kb3IgYW5kIGRldmljZSBJRC4gSXQgY2FuIHJlc3BvbmQgdG8gY29uZmlnIGFuZCBtZW1vcnkgc3BhY2UgYWNjZXNzZXMsIHdoaWNoIGlzIHdoYXQgSSBuZWVkLlxuXG5BbHJpZ2h0LCB0aGUgbmV4dCBzdGVwIGlzIHRvIHNlZSBpZiBzeXprYWxsZXIncyBQQ0kgZnV6emVyICpjYW4qIHJlYWNoIHRoZSBjb2RlIG1vZGlmaWVkIGJ5IHRoaXMgcGF0Y2guIFRoZSBwYXRjaCBtb2RpZmllcyBgaXhnYmV2Zl9nZXRfbGlua19rc2V0dGluZ3NgIGFuZCBgaXhnYmV2Zl9odl9jaGVja19tYWNfbGlua192ZmAuIGBpeGdiZXZmX2dldF9saW5rX2tzZXR0aW5nc2AgaXMgcmVhY2hlZCB0aHJvdWdoIGV0aHRvb2wsIGFuZCBgaXhnYmV2Zl9odl9jaGVja19tYWNfbGlua192ZmAgdmlhIGBody1cdTAwM2VtYWMub3BzLmNoZWNrX2xpbmtgLiBOb3csIGlmIHN5emthbGxlciBlbXVsYXRlcyB0aGUgUENJIGRldmljZSwgdGhlIGBpeGdiZXZmYCBkcml2ZXIgKnNob3VsZCogcHJvYmUgaXQsIHJpZ2h0P1xuXG5CdXQgYSBjcnVjaWFsIHF1ZXN0aW9uIGNvbWVzIHVwOiBkb2VzIGBpeGdiZXZmYCByZXF1aXJlIE1TSS1YPyBBaCwgdGhlIEtjb25maWcgc2F5cyBpdCAqZG9lcyouIFRoYXQgY291bGQgYmUgYSBzdHVtYmxpbmcgYmxvY2suIFN5emthbGxlcidzIFBDSSBmdXp6ZXIgbWlnaHQgbm90IGZ1bGx5IHN1cHBvcnQgTVNJLVggb3IgY29tcGxleCBETUEuIEhvd2V2ZXIsIG9mdGVuIGl0IGNhbiBnZXQgcGFzdCB0aGUgcHJvYmUgZnVuY3Rpb24gYW5kIHJlZ2lzdGVyIHRoZSBuZXRkZXYuIEl04oCZcyB3b3J0aCBleHBsb3JpbmcuXG5cbk5vdywgSSBoYXZlIHRvIGNvbnNpZGVyIHRoZSBzcGVjaWZpYyBwcm9tcHQgaW5zdHJ1Y3Rpb25zLiBJdCBzYXlzIHRvIHJldHVybiBgV29ydGhGdXp6aW5nPWZhbHNlYCBpZiB0aGUgcGF0Y2ggaW52b2x2ZXMgY29kZSBpbiBcInZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzLi4uIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VXCIuXG5cbklzIGBpeGdiZXZmYCBvbmUgb2YgdGhvc2U/IE5vLCBub3QgcmVhbGx5LiBJdCdzIGEgc3RhbmRhcmQgRXRoZXJuZXQgTklDIFZpcnR1YWwgRnVuY3Rpb24gKFZGKSBkcml2ZXIsIG5vdCBzb21ldGhpbmcgc3BlY2lhbGl6ZWQgbGlrZSBhIFNtYXJ0TklDIG9yIEdQVS4gQnV0LCBkb2VzIGl0IHJlcXVpcmUgcGh5c2ljYWwgaGFyZHdhcmUgbm90IGVtdWxhdGVkIGluIFFFTVU/IFllcywgdGhhdCdzIHRoZSBydWIhIGBpeGdiZXZmYCBpcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cblxuQnV0IHdhaXQsIGlmIGBpeGdiZXZmYCBpc24ndCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLCBhbmQgc3l6a2FsbGVyJ3MgUENJIGZ1enplciBpcyB0aGUgb25seSB3YXkgdG8gcmVhY2ggaXQsIGRvZXNuJ3QgdGhhdCBmYWxsIHVuZGVyIFwiaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZVwiPyBCdXQsIG15IFBDSSBmdXp6ZXIgKmlzKiBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSEgQnV0LCBpdCdzIGEgZ2VuZXJpYyBmdXp6ZXIsIG5vdCBhIGZ1bGwgZGV2aWNlIGVtdWxhdG9yLiBJdOKAmXMganVzdCBmZWVkaW5nIHJhbmRvbSBieXRlcyB0byBNTUlPL1BJTy9Db25maWcgc3BhY2UgcmVhZHMuIEl0IGlzIE5PVCBjb21wbGV4IGxpa2UsIHNheSwgYW4gbWx4c3cgb3IgYW4gQU1EIEdQVSBkcml2ZXIhXG5cblRoZSBwcm9tcHQgc3BlY2lmaWNhbGx5IGxpc3RzIHRob3NlIGNvbXBsZXggZGV2aWNlczogXCJtbHhzdywgcGRzX2NvcmUsIHFlZCwgaW9uaWMsIGFtZGdwdVwiLiBgaXhnYmV2ZmAgaXMgYW4gSW50ZWwgRXRoZXJuZXQgVkYuIEl04oCZcyBub3QgaW4gdGhhdCBjbGFzcy5cblxuRmluYWxseSwgSSBuZWVkIHRvIGNoZWNrIHN5emthbGxlciB0byBzZWUgaWYgdGhlcmUgYXJlIGFueSBleGlzdGluZyBkZXNjcmlwdGlvbnMuIExldCBtZSBzZWUuLi5cblxuXG4iLCJJbnB1dFRva2VucyI6MjUxNjEsIk91dHB1dFRva2VucyI6MjYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo3MDUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjRUMTQ6MjA6NTAuMjg2MjkwOTE4WiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2ODczMzQ0NywiRXJyb3IiOiJubyBtYXRjaGVzIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiaXhnYmV2ZlwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJzeXMvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcImVycm9yXCI6IFwibm8gbWF0Y2hlc1wiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNFQxNDoyMDo1MC4zNTUwMzI4MjVaIiwiU2VxIjoxNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MjQ5MTUwOTIxODQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHlzaXMgb2YgdGhlIFBhdGNoOiBXb3J0aEZ1enppbmc9ZmFsc2UqKlxuXG5Pa2F5LCBzbyB0aGUgaW5pdGlhbCB0aG91Z2h0IHdhcyB0byB1c2UgYGRlZmF1bHRfYXBpOmdyZXBwZXJgIHRvIHNlYXJjaCBmb3IgcmVsYXRlZCBjb2RlLCBidXQgSSBxdWlja2x5IHJlYWxpemVkIEkgY2FuJ3Qgc2VhcmNoIGBzeXMvYCBvciBleHByZXNzaW9ucyBjb250YWluaW5nIGBzeXpfYCBiZWNhdXNlIG9mIHRob3NlIHJlc3RyaWN0aW9ucyBpbiB0aGUgcHJvbXB0LiBJIGFsc28gZG9uJ3QgaGF2ZSB0aGUgYHJlYWQtc3l6LXNwZWNgIG9yIGBzeXotZ3JlcHBlcmAgdG9vbHMsIHNvIEknbSBsaW1pdGVkIHRvIGBncmVwcGVyYCwgYGNvZGVzZWFyY2gtZGlyLWluZGV4YCwgYHJlYWQtZmlsZWAsIGFuZCBgc2V0LXJlc3VsdHNgLiBObyBkaWNlIG9uIHRoZSBzeXprYWxsZXIgc2lkZS5cblxuTm93LCBsZXQncyBnZXQgYmFjayB0byB0aGUgY29yZSBxdWVzdGlvbjogSXMgdGhpcyB3b3J0aCBmdXp6aW5nPyBJIG5lZWQgdG8gZmlndXJlIG91dCBpZiB0aGlzIGNvZGUgcGF0aCBpcyByZWFjaGFibGUgaW4gYSB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudCBsaWtlIFFFTVUgb3IgR0NFLiBUaGUgcHJvbXB0IGlzIHByZXR0eSBjbGVhcjogaXQncyBub3Qgd29ydGggZnV6emluZyBpZiB0aGUgY29kZSBwYXRoIGlzIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdGhvc2UgZW52aXJvbm1lbnRzLlxuXG5UaGUgcGF0Y2ggbWVudGlvbnMgYGl4Z2JldmZgLCB3aGljaCBpbml0aWFsbHkgbWFkZSBtZSB0aGluayBhYm91dCB2ZW5kb3Itc3BlY2lmaWMgaGFyZHdhcmUuIEJ1dCBpdCdzIG5vdCAqdGVjaG5pY2FsbHkqIGEgdmVuZG9yLXNwZWNpZmljIE5JQywgaXQncyBhIHN0YW5kYXJkIE5JQyB0aGF0IGhhcyBhIFZGLiBCdXQsIGRvZXMgaXQgcmVxdWlyZSBwaHlzaWNhbCBoYXJkd2FyZT8gVHVybnMgb3V0LCBRRU1VIGVtdWxhdGVzIGBpeGdiZWAgKFBGKSwgYGUxMDAwYCwgYGUxMDAwZWAsIGBpZ2JgLCBgaWdidmZgLCBidXQgKm5vdCogYGl4Z2JldmZgLiBTbywgaXQgZmFsbHMgdW5kZXIgdGhlIGNhdGVnb3J5IG9mIGhhcmR3YXJlICpub3QqIGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG5cblRoZW4gSSBoYWQgdG8gY29uc2lkZXIgaWYgc3l6a2FsbGVyIGNvdWxkIGZvcmNlIGl0LiBDb3VsZCB0aGUgUENJIGZ1enplciBzb21laG93IGZha2UgdGhlIGRldmljZSBhbmQgcGFzcyB0aGUgcHJvYmUgZnVuY3Rpb24/IEV2ZW4gaWYgaXQgY291bGQsIHRoZSBwcm9tcHQgZXhwbGljaXRseSBzYXlzIHRoYXQgaXQgaXMgbm90IHdvcnRoIGZ1enppbmcgaWYgaXQgcmVxdWlyZXMgcGh5c2ljYWwgaGFyZHdhcmUgdGhhdCBpcyBub3QgZW11bGF0ZWQgaW4gUUVNVS5cblxuVGhlIHBhdGNoIHNwZWNpZmljYWxseSB0YXJnZXRzIEh5cGVyLVYgRTYxMCBWRnMuIEl0J3MgcmVhZGluZyBsaW5rIHN0YXR1cyBmcm9tIGFuIGVtdWxhdGVkIFBDSSBjb25maWcgc3BhY2UuIFRoaXMgaXMgdmVyeSBIeXBlci1WIHNwZWNpZmljLlxuXG5UaGUgcHJvYmUgd2lsbCBub3QgZXZlbiBzdWNjZWVkIGluIFFFTVUgYmVjYXVzZSB0aGUgZGV2aWNlIGlzIG5vdCBwcmVzZW50LCBhbmQgdGhlIGRyaXZlciBpcyBub3QgbG9hZGVkLiBJZiB0aGUgZHJpdmVyIGlzIG5vdCBsb2FkZWQsIHRoZXJlIHdpbGwgYmUgbm8gYG5ldF9kZXZpY2VgLCBhbmQgdGhlIGZ1bmN0aW9uIGBpeGdiZXZmX2dldF9saW5rX2tzZXR0aW5nc2AgY2Fubm90IGV2ZW4gYmUgcmVhY2hlZC5cblxuU28sIHRoaXMgRTYxMCBWRiBiZWhhdmlvciBpcyBub3Qgc29mdHdhcmUtZW11bGF0ZWQgaW4gUUVNVSwgdW5saWtlIHRoaW5ncyBsaWtlIGEgVVNCIGdhZGdldCBvciBgbWFjODAyMTFfaHdzaW1gLiBJdCdzIGEgSHlwZXItViBzcGVjaWZpYyBkZXZpY2UgdGhhdCdzIG5vdCBwcmVzZW50IGluIFFFTVUsIG1ha2luZyBpdCB1bnJlYWNoYWJsZS5cblxuTGV0IG1lIGNvbmZpcm0gdGhhdCB3aXRoIGEgcXVpY2sgY2hlY2sgb24gdGhlIFFFTVUgc291cmNlLiBXaGlsZSBgaWdidmZgICppcyogdGhlcmUsIHRoZXJlJ3Mgbm8gbmF0aXZlIGBpeGdiZXZmYCBzdXBwb3J0LiBXYWl0LCBRRU1VJ3MgYGlnYmAgc3VwcG9ydHMgU1ItSU9WLiBRRU1VJ3MgYGl4Z2JlYCBpbXBsZW1lbnRhdGlvbiAqbWlnaHQqIG5vdC4gVGhlIGtleSBoZXJlIGlzIHRoZSBwYXRjaCBpcyB0YWxraW5nIGFib3V0IGBpeGdiZV9tYWNfZTYxMF92ZmAgd2hpY2ggaGFzIGEgc3BlY2lmaWMgUENJIGRldmljZSBJRCBgSVhHQkVfREVWX0lEX0U2MTBfVkZfSFZgIHRoYXQgb25seSBleGlzdHMgb24gSHlwZXItVi5cblxuTGV0J3MgbG9vayBhdCB0aGUgY3JpdGljYWwgY29kZSBzbmlwcGV0IGluIHRoZSBwYXRjaCBhZ2Fpbi5cbmBgYGNcbitcdGlmIChody1cdTAwM2VtYWMudHlwZSA9PSBpeGdiZV9tYWNfZTYxMF92Zikge1xuK1x0XHRzcGluX2xvY2tfYmgoXHUwMDI2YWRhcHRlci1cdTAwM2VtYnhfbG9jayk7XG4rXHRcdGh3LVx1MDAzZW1hYy5nZXRfbGlua19zdGF0dXMgPSB0cnVlO1xuK1x0XHRody1cdTAwM2VtYWMub3BzLmNoZWNrX2xpbmsoaHcsIFx1MDAyNmFkYXB0ZXItXHUwMDNlbGlua19zcGVlZCxcbitcdFx0XHRcdCAgICAgICBcdTAwMjZhZGFwdGVyLVx1MDAzZWxpbmtfdXAsIGZhbHNlKTtcbitcdFx0c3Bpbl91bmxvY2tfYmgoXHUwMDI2YWRhcHRlci1cdTAwM2VtYnhfbG9jayk7XG4rXHR9XG5gYGBcbkFuZCBob3cgdGhlIGBpeGdiZXZmX2h2X3JlYWRfbGlua3NfZTYxMGAgYWNjZXNzZXMgdGhlIGVtdWxhdGVkIFBDSSBjb25maWcgc3BhY2UuXG5gYGBjXG4rXHRpZiAoIUlTX0VOQUJMRUQoQ09ORklHX1BDSV9NTUNPTkZJRykpIHtcbitcdFx0ZGV2X2Vycl9vbmNlKFx1MDAyNmFkYXB0ZXItXHUwMDNlcGRldi1cdTAwM2VkZXYsXG4rXHRcdFx0ICAgICBcImNhbm5vdCByZWFkIGxpbmsgc3RhdHVzLCBQQ0lfTU1DT05GSUcgaXMgcmVxdWlyZWQgZm9yIEh5cGVyLVZcXG5cIik7XG4rXHRcdHJldHVybiAtRU9QTk9UU1VQUDtcbitcdH1cbitcbitcdGZvciAoaW50IGkgPSAwOyBpIFx1MDAzYyBJWEdCRV9IVl9MSU5LX1NUQVRVU19TSVpFOyBpKyspIHtcbitcdFx0aW50IHJldCA9IHBjaV9yZWFkX2NvbmZpZ19ieXRlKGFkYXB0ZXItXHUwMDNlcGRldixcbitcdFx0XHRcdFx0ICAgICAgIElYR0JFX0hWX0xJTktfU1RBVFVTX09GRlNFVCArIGksXG4rXHRcdFx0XHRcdCAgICAgICBcdTAwMjZkYXRhW2ldKTtcbmBgYFxuSXQncyByZWFkaW5nIGZyb20gUENJIGNvbmZpZyBzcGFjZSBvZmZzZXQgMHgyMDkuIFRoaXMgaXMgKmRlZmluaXRlbHkqIEh5cGVyLVYgc3BlY2lmaWMgYW5kIHVucmVhY2hhYmxlIGluIHN0YW5kYXJkIFFFTVUgb3IgR0NFLlxuXG4iLCJJbnB1dFRva2VucyI6MjY2NzUsIk91dHB1dFRva2VucyI6MzksIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNjI4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI0VDE0OjIxOjE1LjI3MDEyNjkwOVoiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTAwMzA2NjQwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIml4Z2JldmZfcHJvYmVcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaXhnYmV2ZlwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9peGdiZXZmL2l4Z2JldmZfbWFpbi5jPTQ1NjE9c3RhdGljIHZvaWQgaXhnYmV2Zl9hc3NpZ25fbmV0ZGV2X29wcyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaXhnYmV2Zi9peGdiZXZmX21haW4uYy00NTY4LS8qKlxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2l4Z2JldmYvaXhnYmV2Zl9tYWluLmM6NDU2OTogKiBpeGdiZXZmX3Byb2JlIC0gRGV2aWNlIEluaXRpYWxpemF0aW9uIFJvdXRpbmVcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9peGdiZXZmL2l4Z2JldmZfbWFpbi5jLTQ1NzAtICogQHBkZXY6IFBDSSBkZXZpY2UgaW5mb3JtYXRpb24gc3RydWN0XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9peGdiZXZmL2l4Z2JldmZfbWFpbi5jLTQ1NzQtICpcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9peGdiZXZmL2l4Z2JldmZfbWFpbi5jOjQ1NzU6ICogaXhnYmV2Zl9wcm9iZSBpbml0aWFsaXplcyBhbiBhZGFwdGVyIGlkZW50aWZpZWQgYnkgYSBwY2lfZGV2IHN0cnVjdHVyZS5cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9peGdiZXZmL2l4Z2JldmZfbWFpbi5jLTQ1NzYtICogVGhlIE9TIGluaXRpYWxpemF0aW9uLCBjb25maWd1cmluZyBvZiB0aGUgYWRhcHRlciBwcml2YXRlIHN0cnVjdHVyZSxcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2l4Z2JldmYvaXhnYmV2Zl9tYWluLmMtNDU3OC0gKiovXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaXhnYmV2Zi9peGdiZXZmX21haW4uYzo0NTc5OnN0YXRpYyBpbnQgaXhnYmV2Zl9wcm9iZShzdHJ1Y3QgcGNpX2RldiAqcGRldiwgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgKmVudClcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9peGdiZXZmL2l4Z2JldmZfbWFpbi5jLTQ1ODAte1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaXhnYmV2Zi9peGdiZXZmX21haW4uYz00OTE4PXN0YXRpYyBzdHJ1Y3QgcGNpX2RyaXZlciBpeGdiZXZmX2RyaXZlciA9IHtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2l4Z2JldmYvaXhnYmV2Zl9tYWluLmMtNDkyMC1cXHQuaWRfdGFibGVcXHQ9IGl4Z2JldmZfcGNpX3RibCxcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9peGdiZXZmL2l4Z2JldmZfbWFpbi5jOjQ5MjE6XFx0LnByb2JlXFx0XFx0PSBpeGdiZXZmX3Byb2JlLFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2l4Z2JldmYvaXhnYmV2Zl9tYWluLmMtNDkyMi1cXHQucmVtb3ZlXFx0XFx0PSBpeGdiZXZmX3JlbW92ZSxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjRUMTQ6MjE6MTUuMzcwNDM3ODk5WiIsIlNlcSI6MTcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjc0NDMyOTA1NzAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBQb3RlbnRpYWwgZm9yIFN5emthbGxlcidzIFBDSSBEZXZpY2UgRmFraW5nKipcblxuT2theSwgc28gaWYgc3l6a2FsbGVyIGlzIHN1Y2Nlc3NmdWxseSBmYWtpbmcgYSBQQ0kgZGV2aWNlLCB0aGVuLCBhcyBleHBlY3RlZCwgdGhlIGBpeGdiZXZmX3Byb2JlYCBmdW5jdGlvbiB3aWxsIGJlIHRyaWdnZXJlZC4gVGhlIGNyaXRpY2FsIHF1ZXN0aW9uIG5vdyBpcywgd2lsbCBgaXhnYmV2Zl9wcm9iZWAgYWN0dWFsbHkgKnN1Y2NlZWQqIGluIHRoaXMgc2NlbmFyaW8gb2YgaW50ZXJhY3Rpbmcgd2l0aCBhIGZha2VkIGRldmljZT8gVGhpcyBpcyB0aGUgY3J1eCBvZiB0aGUgbWF0dGVyLiBXZSBoYXZlIHRvIGFuYWx5emUgdGhlIGNvZGUgdG8gdW5kZXJzdGFuZCB0aGUgZGVwZW5kZW5jaWVzIGFuZCBhc3N1bXB0aW9ucyBvZiBgaXhnYmV2Zl9wcm9iZWAuIExldCdzIGRpZyBpbnRvIHRoZSBgaXhnYmV2Zl9wcm9iZWAgZnVuY3Rpb24gYW5kIHNlZSB3aGF0IGl0IGV4cGVjdHMgZnJvbSB0aGUgUENJIGRldmljZSB0byBkZXRlcm1pbmUgaWYgYSBmYWtlZCBkZXZpY2UgY2FuIHNhdGlzZnkgdGhvc2UgcmVxdWlyZW1lbnRzLiBUaGlzIGlzIHdoZXJlIHRoZSB2dWxuZXJhYmlsaXRpZXMgbWlnaHQgbGllLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyOTk1NCwiT3V0cHV0VG9rZW5zIjo1MiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjUyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI0VDE0OjIxOjIyLjgxMzczMTQ4OVoiLCJTZXEiOjE4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NTY3NjcxLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2l4Z2JldmYvaXhnYmV2Zl9tYWluLmNcIixcbiAgXCJGaXJzdExpbmVcIjogNDU3OSxcbiAgXCJMaW5lQ291bnRcIjogMTAwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjQ1Nzk6XFx0c3RhdGljIGludCBpeGdiZXZmX3Byb2JlKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCAqZW50KVxcbjQ1ODA6XFx0e1xcbjQ1ODE6XFx0XFx0c3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldjtcXG40NTgyOlxcdFxcdHN0cnVjdCBpeGdiZXZmX2FkYXB0ZXIgKmFkYXB0ZXIgPSBOVUxMO1xcbjQ1ODM6XFx0XFx0c3RydWN0IGl4Z2JlX2h3ICpodyA9IE5VTEw7XFxuNDU4NDpcXHRcXHRjb25zdCBzdHJ1Y3QgaXhnYmV2Zl9pbmZvICppaSA9IGl4Z2JldmZfaW5mb190YmxbZW50LVxcdTAwM2Vkcml2ZXJfZGF0YV07XFxuNDU4NTpcXHRcXHRib29sIGRpc2FibGVfZGV2ID0gZmFsc2U7XFxuNDU4NjpcXHRcXHRpbnQgZXJyO1xcbjQ1ODc6XFx0XFxuNDU4ODpcXHRcXHRlcnIgPSBwY2lfZW5hYmxlX2RldmljZShwZGV2KTtcXG40NTg5OlxcdFxcdGlmIChlcnIpXFxuNDU5MDpcXHRcXHRcXHRyZXR1cm4gZXJyO1xcbjQ1OTE6XFx0XFxuNDU5MjpcXHRcXHRlcnIgPSBkbWFfc2V0X21hc2tfYW5kX2NvaGVyZW50KFxcdTAwMjZwZGV2LVxcdTAwM2VkZXYsIERNQV9CSVRfTUFTSyg2NCkpO1xcbjQ1OTM6XFx0XFx0aWYgKGVycikge1xcbjQ1OTQ6XFx0XFx0XFx0ZGV2X2VycihcXHUwMDI2cGRldi1cXHUwMDNlZGV2LCBcXFwiTm8gdXNhYmxlIERNQSBjb25maWd1cmF0aW9uLCBhYm9ydGluZ1xcXFxuXFxcIik7XFxuNDU5NTpcXHRcXHRcXHRnb3RvIGVycl9kbWE7XFxuNDU5NjpcXHRcXHR9XFxuNDU5NzpcXHRcXG40NTk4OlxcdFxcdGVyciA9IHBjaV9yZXF1ZXN0X3JlZ2lvbnMocGRldiwgaXhnYmV2Zl9kcml2ZXJfbmFtZSk7XFxuNDU5OTpcXHRcXHRpZiAoZXJyKSB7XFxuNDYwMDpcXHRcXHRcXHRkZXZfZXJyKFxcdTAwMjZwZGV2LVxcdTAwM2VkZXYsIFxcXCJwY2lfcmVxdWVzdF9yZWdpb25zIGZhaWxlZCAweCV4XFxcXG5cXFwiLCBlcnIpO1xcbjQ2MDE6XFx0XFx0XFx0Z290byBlcnJfcGNpX3JlZztcXG40NjAyOlxcdFxcdH1cXG40NjAzOlxcdFxcbjQ2MDQ6XFx0XFx0cGNpX3NldF9tYXN0ZXIocGRldik7XFxuNDYwNTpcXHRcXG40NjA2OlxcdFxcdG5ldGRldiA9IGFsbG9jX2V0aGVyZGV2X21xKHNpemVvZihzdHJ1Y3QgaXhnYmV2Zl9hZGFwdGVyKSxcXG40NjA3OlxcdFxcdFxcdFxcdFxcdCAgIE1BWF9UWF9RVUVVRVMpO1xcbjQ2MDg6XFx0XFx0aWYgKCFuZXRkZXYpIHtcXG40NjA5OlxcdFxcdFxcdGVyciA9IC1FTk9NRU07XFxuNDYxMDpcXHRcXHRcXHRnb3RvIGVycl9hbGxvY19ldGhlcmRldjtcXG40NjExOlxcdFxcdH1cXG40NjEyOlxcdFxcbjQ2MTM6XFx0XFx0U0VUX05FVERFVl9ERVYobmV0ZGV2LCBcXHUwMDI2cGRldi1cXHUwMDNlZGV2KTtcXG40NjE0OlxcdFxcbjQ2MTU6XFx0XFx0YWRhcHRlciA9IG5ldGRldl9wcml2KG5ldGRldik7XFxuNDYxNjpcXHRcXG40NjE3OlxcdFxcdGFkYXB0ZXItXFx1MDAzZW5ldGRldiA9IG5ldGRldjtcXG40NjE4OlxcdFxcdGFkYXB0ZXItXFx1MDAzZXBkZXYgPSBwZGV2O1xcbjQ2MTk6XFx0XFx0aHcgPSBcXHUwMDI2YWRhcHRlci1cXHUwMDNlaHc7XFxuNDYyMDpcXHRcXHRody1cXHUwMDNlYmFjayA9IGFkYXB0ZXI7XFxuNDYyMTpcXHRcXHRhZGFwdGVyLVxcdTAwM2Vtc2dfZW5hYmxlID0gbmV0aWZfbXNnX2luaXQoZGVidWcsIERFRkFVTFRfTVNHX0VOQUJMRSk7XFxuNDYyMjpcXHRcXG40NjIzOlxcdFxcdC8qIGNhbGwgc2F2ZSBzdGF0ZSBoZXJlIGluIHN0YW5kYWxvbmUgZHJpdmVyIGJlY2F1c2UgaXQgcmVsaWVzIG9uXFxuNDYyNDpcXHRcXHQgKiBhZGFwdGVyIHN0cnVjdCB0byBleGlzdCwgYW5kIG5lZWRzIHRvIGNhbGwgbmV0ZGV2X3ByaXZcXG40NjI1OlxcdFxcdCAqL1xcbjQ2MjY6XFx0XFx0cGNpX3NhdmVfc3RhdGUocGRldik7XFxuNDYyNzpcXHRcXG40NjI4OlxcdFxcdGh3LVxcdTAwM2Vod19hZGRyID0gaW9yZW1hcChwY2lfcmVzb3VyY2Vfc3RhcnQocGRldiwgMCksXFxuNDYyOTpcXHRcXHRcXHRcXHQgICAgICBwY2lfcmVzb3VyY2VfbGVuKHBkZXYsIDApKTtcXG40NjMwOlxcdFxcdGFkYXB0ZXItXFx1MDAzZWlvX2FkZHIgPSBody1cXHUwMDNlaHdfYWRkcjtcXG40NjMxOlxcdFxcdGlmICghaHctXFx1MDAzZWh3X2FkZHIpIHtcXG40NjMyOlxcdFxcdFxcdGVyciA9IC1FSU87XFxuNDYzMzpcXHRcXHRcXHRnb3RvIGVycl9pb3JlbWFwO1xcbjQ2MzQ6XFx0XFx0fVxcbjQ2MzU6XFx0XFxuNDYzNjpcXHRcXHRpeGdiZXZmX2Fzc2lnbl9uZXRkZXZfb3BzKG5ldGRldik7XFxuNDYzNzpcXHRcXG40NjM4OlxcdFxcdC8qIFNldHVwIEhXIEFQSSAqL1xcbjQ2Mzk6XFx0XFx0bWVtY3B5KFxcdTAwMjZody1cXHUwMDNlbWFjLm9wcywgaWktXFx1MDAzZW1hY19vcHMsIHNpemVvZihody1cXHUwMDNlbWFjLm9wcykpO1xcbjQ2NDA6XFx0XFx0aHctXFx1MDAzZW1hYy50eXBlICA9IGlpLVxcdTAwM2VtYWM7XFxuNDY0MTpcXHRcXG40NjQyOlxcdFxcdG1lbWNweShcXHUwMDI2aHctXFx1MDAzZW1ieC5vcHMsIFxcdTAwMjZpeGdiZXZmX21ieF9vcHNfbGVnYWN5LFxcbjQ2NDM6XFx0XFx0ICAgICAgIHNpemVvZihzdHJ1Y3QgaXhnYmVfbWJ4X29wZXJhdGlvbnMpKTtcXG40NjQ0OlxcdFxcbjQ2NDU6XFx0XFx0Lyogc2V0dXAgdGhlIHByaXZhdGUgc3RydWN0dXJlICovXFxuNDY0NjpcXHRcXHRlcnIgPSBpeGdiZXZmX3N3X2luaXQoYWRhcHRlcik7XFxuNDY0NzpcXHRcXHRpZiAoZXJyKVxcbjQ2NDg6XFx0XFx0XFx0Z290byBlcnJfc3dfaW5pdDtcXG40NjQ5OlxcdFxcbjQ2NTA6XFx0XFx0LyogVGhlIEhXIE1BQyBhZGRyZXNzIHdhcyBzZXQgYW5kL29yIGRldGVybWluZWQgaW4gc3dfaW5pdCAqL1xcbjQ2NTE6XFx0XFx0aWYgKCFpc192YWxpZF9ldGhlcl9hZGRyKG5ldGRldi1cXHUwMDNlZGV2X2FkZHIpKSB7XFxuNDY1MjpcXHRcXHRcXHRwcl9lcnIoXFxcImludmFsaWQgTUFDIGFkZHJlc3NcXFxcblxcXCIpO1xcbjQ2NTM6XFx0XFx0XFx0ZXJyID0gLUVJTztcXG40NjU0OlxcdFxcdFxcdGdvdG8gZXJyX3N3X2luaXQ7XFxuNDY1NTpcXHRcXHR9XFxuNDY1NjpcXHRcXG40NjU3OlxcdFxcdG5ldGRldi1cXHUwMDNlaHdfZmVhdHVyZXMgPSBORVRJRl9GX1NHIHxcXG40NjU4OlxcdFxcdFxcdFxcdCAgICAgIE5FVElGX0ZfVFNPIHxcXG40NjU5OlxcdFxcdFxcdFxcdCAgICAgIE5FVElGX0ZfVFNPNiB8XFxuNDY2MDpcXHRcXHRcXHRcXHQgICAgICBORVRJRl9GX1JYQ1NVTSB8XFxuNDY2MTpcXHRcXHRcXHRcXHQgICAgICBORVRJRl9GX0hXX0NTVU0gfFxcbjQ2NjI6XFx0XFx0XFx0XFx0ICAgICAgTkVUSUZfRl9TQ1RQX0NSQztcXG40NjYzOlxcdFxcbjQ2NjQ6XFx0I2RlZmluZSBJWEdCRVZGX0dTT19QQVJUSUFMX0ZFQVRVUkVTIChORVRJRl9GX0dTT19HUkUgfCBcXFxcXFxuNDY2NTpcXHRcXHRcXHRcXHRcXHQgICAgICBORVRJRl9GX0dTT19HUkVfQ1NVTSB8IFxcXFxcXG40NjY2OlxcdFxcdFxcdFxcdFxcdCAgICAgIE5FVElGX0ZfR1NPX0lQWElQNCB8IFxcXFxcXG40NjY3OlxcdFxcdFxcdFxcdFxcdCAgICAgIE5FVElGX0ZfR1NPX0lQWElQNiB8IFxcXFxcXG40NjY4OlxcdFxcdFxcdFxcdFxcdCAgICAgIE5FVElGX0ZfR1NPX1VEUF9UVU5ORUwgfCBcXFxcXFxuNDY2OTpcXHRcXHRcXHRcXHRcXHQgICAgICBORVRJRl9GX0dTT19VRFBfVFVOTkVMX0NTVU0pXFxuNDY3MDpcXHRcXG40NjcxOlxcdFxcdG5ldGRldi1cXHUwMDNlZ3NvX3BhcnRpYWxfZmVhdHVyZXMgPSBJWEdCRVZGX0dTT19QQVJUSUFMX0ZFQVRVUkVTO1xcbjQ2NzI6XFx0XFx0bmV0ZGV2LVxcdTAwM2Vod19mZWF0dXJlcyB8PSBORVRJRl9GX0dTT19QQVJUSUFMIHxcXG40NjczOlxcdFxcdFxcdFxcdCAgICAgICBJWEdCRVZGX0dTT19QQVJUSUFMX0ZFQVRVUkVTO1xcbjQ2NzQ6XFx0XFxuNDY3NTpcXHRcXHRuZXRkZXYtXFx1MDAzZWZlYXR1cmVzID0gbmV0ZGV2LVxcdTAwM2Vod19mZWF0dXJlcyB8IE5FVElGX0ZfSElHSERNQTtcXG40Njc2OlxcdFxcbjQ2Nzc6XFx0XFx0bmV0ZGV2LVxcdTAwM2V2bGFuX2ZlYXR1cmVzIHw9IG5ldGRldi1cXHUwMDNlZmVhdHVyZXMgfCBORVRJRl9GX1RTT19NQU5HTEVJRDtcXG40Njc4OlxcdFxcdG5ldGRldi1cXHUwMDNlbXBsc19mZWF0dXJlcyB8PSBORVRJRl9GX1NHIHxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjRUMTQ6MjE6MjIuODE4MzA0OFoiLCJTZXEiOjE5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxMzU1NjA3MDExOSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMgYGl4Z2JldmZfc3dfaW5pdGAgZnVuY3Rpb24uXG5cbioqQW5hbHl6aW5nIGl4Z2JldmZfc3dfaW5pdCoqXG5cbkFscmlnaHQsIHNvIEknbSBsb29raW5nIGF0IHRoaXMgYGl4Z2JldmZfc3dfaW5pdGAgZnVuY3Rpb24gYW5kIGltbWVkaWF0ZWx5IEknbSB0aGlua2luZyBhYm91dCB0aGUgZnVuZGFtZW50YWwgaW5pdGlhbGl6YXRpb24gc3RlcHMgZm9yIHRoZSBzb2Z0d2FyZSBjb21wb25lbnQgb2YgdGhpcyBpeGdiZSBWaXJ0dWFsIEZ1bmN0aW9uIGRyaXZlci4gVGhpcyBpcyB3aGVyZSB3ZSdyZSBnb2luZyB0byBzZXQgdXAgYWxsIHRoZSBjb3JlIGRhdGEgc3RydWN0dXJlcywgcmVnaXN0ZXIgdGhlIG5lY2Vzc2FyeSBpbnRlcnJ1cHQgaGFuZGxlcnMsIGFuZCBwcm9iYWJseSBoYW5kbGUgYW55IGRldmljZS1zcGVjaWZpYyBxdWlya3Mgb3IgY2FwYWJpbGl0aWVzIHRoYXQgbmVlZCB0byBiZSBhZGRyZXNzZWQgYmVmb3JlIHRoZSBWRiBpcyByZWFkeSBmb3IgbmV0d29yayB0cmFmZmljLiBJJ20gZXhwZWN0aW5nIHRvIHNlZSBjYWxscyB0byBpbml0aWFsaXplIHRoZSByaW5nIGJ1ZmZlcnMgZm9yIFR4IGFuZCBSeCwgY29uZmlndXJlIHRoZSBpbnRlcnJ1cHQgbW9kZXJhdGlvbiBzZXR0aW5ncywgYW5kIHBvc3NpYmx5IGV2ZW4gaGFuZGxlIGFueSBpbml0aWFsIHNldHVwIG9mIHRoZSBoYXJkd2FyZSBpdHNlbGYgdGhyb3VnaCByZWdpc3RlciB3cml0ZXMsIGlmIHJlcXVpcmVkLiBXZSdsbCBsaWtlbHkgc2VlIGNoZWNrcyBmb3IgdGhlIGNhcGFiaWxpdGllcyBvZiB0aGUgaGFyZHdhcmUuIFRoZSBnb2FsIGhlcmUgaXMgdG8gZ2V0IGV2ZXJ5dGhpbmcgcHJpbWVkIHNvIHRoYXQgd2hlbiBuZXR3b3JrIHBhY2tldHMgc3RhcnQgZmxvd2luZywgdGhlIGRyaXZlciBpcyByZWFkeSB0byBoYW5kbGUgdGhlbSBlZmZpY2llbnRseSBhbmQgcmVsaWFibHkuIEl0J3MgZXNzZW50aWFsbHkgbGF5aW5nIHRoZSBncm91bmR3b3JrIGZvciB0aGUgbW9yZSBjb21wbGV4IHBhY2tldCBwcm9jZXNzaW5nIHRoYXQgaGFwcGVucyBsYXRlci4gSSdsbCBuZWVkIHRvIHBheSBjbG9zZSBhdHRlbnRpb24gdG8gdGhlIG1lbW9yeSBhbGxvY2F0aW9uIGFuZCBkZWFsbG9jYXRpb24gd2l0aGluIHRoaXMgZnVuY3Rpb24gdG8gZW5zdXJlIGl0J3Mgcm9idXN0IGFuZCBwcmV2ZW50cyBhbnkgbGVha3MsIHNpbmNlIHJlc291cmNlIG1hbmFnZW1lbnQgaXMgY3JpdGljYWwgaGVyZS4gSXQncyBnb2luZyB0byBiZSBpbnRlcmVzdGluZyB0byBzZWUgaG93IHRoZSBWRiBpbnRlcmFjdHMgd2l0aCB0aGUgUEYgaGVyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MzE4NjgsIk91dHB1dFRva2VucyI6NDEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI0VDE0OjIxOjM2LjM3NDM3Nzc3OVoiLCJTZXEiOjIwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODI4NDAxODgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiaXhnYmV2Zl9zd19pbml0XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2l4Z2JldmZcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaXhnYmV2Zi9peGdiZXZmX21haW4uYz0zMDcwPXN0YXRpYyB2b2lkIGl4Z2JldmZfY2xlYXJfaW50ZXJydXB0X3NjaGVtZShzdHJ1Y3QgaXhnYmV2Zl9hZGFwdGVyICphZGFwdGVyKVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaXhnYmV2Zi9peGdiZXZmX21haW4uYy0zMDgwLS8qKlxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2l4Z2JldmYvaXhnYmV2Zl9tYWluLmM6MzA4MTogKiBpeGdiZXZmX3N3X2luaXQgLSBJbml0aWFsaXplIGdlbmVyYWwgc29mdHdhcmUgc3RydWN0dXJlc1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2l4Z2JldmYvaXhnYmV2Zl9tYWluLmMtMzA4Mi0gKiBAYWRhcHRlcjogYm9hcmQgcHJpdmF0ZSBzdHJ1Y3R1cmUgdG8gaW5pdGlhbGl6ZVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2l4Z2JldmYvaXhnYmV2Zl9tYWluLmMtMzA4My0gKlxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2l4Z2JldmYvaXhnYmV2Zl9tYWluLmM6MzA4NDogKiBpeGdiZXZmX3N3X2luaXQgaW5pdGlhbGl6ZXMgdGhlIEFkYXB0ZXIgcHJpdmF0ZSBkYXRhIHN0cnVjdHVyZS5cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9peGdiZXZmL2l4Z2JldmZfbWFpbi5jLTMwODUtICogRmllbGRzIGFyZSBpbml0aWFsaXplZCBiYXNlZCBvbiBQQ0kgZGV2aWNlIGluZm9ybWF0aW9uIGFuZFxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaXhnYmV2Zi9peGdiZXZmX21haW4uYy0zMDg3LSAqKi9cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9peGdiZXZmL2l4Z2JldmZfbWFpbi5jOjMwODg6c3RhdGljIGludCBpeGdiZXZmX3N3X2luaXQoc3RydWN0IGl4Z2JldmZfYWRhcHRlciAqYWRhcHRlcilcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9peGdiZXZmL2l4Z2JldmZfbWFpbi5jLTMwODkte1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaXhnYmV2Zi9peGdiZXZmX21haW4uYz00NTc5PXN0YXRpYyBpbnQgaXhnYmV2Zl9wcm9iZShzdHJ1Y3QgcGNpX2RldiAqcGRldiwgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgKmVudClcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2l4Z2JldmYvaXhnYmV2Zl9tYWluLmMtNDY0NS1cXHQvKiBzZXR1cCB0aGUgcHJpdmF0ZSBzdHJ1Y3R1cmUgKi9cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9peGdiZXZmL2l4Z2JldmZfbWFpbi5jOjQ2NDY6XFx0ZXJyID0gaXhnYmV2Zl9zd19pbml0KGFkYXB0ZXIpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2l4Z2JldmYvaXhnYmV2Zl9tYWluLmMtNDY0Ny1cXHRpZiAoZXJyKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNFQxNDoyMTozNi40NTcyMjI5NzhaIiwiU2VxIjoyMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NzI3Nzc3NjQ4NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgYXMgcmVxdWVzdGVkLCBhaW1lZCBhdCBhbiBleHBlcnQgYXVkaWVuY2UgYW5kIGluIHRoZSBmaXJzdCBwZXJzb246XG5cbioqSW5pdGlhbCBUaG91Z2h0cyBvbiBpeGdiZXZmX3N3X2luaXQqKlxuXG5BbHJpZ2h0LCBsZXQncyBkaXZlIGludG8gYGl4Z2JldmZfc3dfaW5pdGAuIEknbSBpbW1lZGlhdGVseSB0aGlua2luZywgZ2l2ZW4gbXkgZmFtaWxpYXJpdHkgd2l0aCB0aGUgaXhnYmV2ZiBkcml2ZXIgYW5kIGl0cyBvdmVyYWxsIGFyY2hpdGVjdHVyZSwgdGhpcyBpcyB0aGUgY3J1Y2lhbCBmdW5jdGlvbiB3aGVyZSB0aGUgc29mdHdhcmUtbGV2ZWwgaW5pdGlhbGl6YXRpb24gb2YgdGhlIHZpcnR1YWwgZnVuY3Rpb24gaXMgZ29pbmcgdG8gb2NjdXIuIEl0J3MgdGhlIHBvaW50IHdoZXJlIHdlIHNldCB1cCBhbGwgdGhlIGRhdGEgc3RydWN0dXJlcyBuZWVkZWQgZm9yIHRoZSBWRiB0byBvcGVyYXRlIGFuZCBpbnRlcmFjdCB3aXRoIHRoZSBwaHlzaWNhbCBmdW5jdGlvbiAoUEYpLlxuXG5JJ20gZXhwZWN0aW5nIHRvIHNlZSB0aGUgYWxsb2NhdGlvbiBhbmQgcG9wdWxhdGlvbiBvZiB0aGUgVkYncyBwcml2YXRlIGRhdGEsIHdoaWNoIHdpbGwgbGlrZWx5IGluY2x1ZGUgdGhpbmdzIGxpa2UgdGhlIHZpcnR1YWwgZGV2aWNlJ3MgY29udGV4dCwgcmVzb3VyY2UgbWFuYWdlbWVudCBzdHJ1Y3R1cmVzLCBwb3RlbnRpYWxseSBzb21lIGluaXRpYWwgRE1BIG1hcHBpbmdzLCBhbmQgcGVyaGFwcyBzZXR1cCBmb3IgdGhlIGludGVycnVwdCBoYW5kbGluZy4gV2UnbGwgYmUgc2V0dGluZyB1cCB0aGUgaW50ZXJuYWwgc3RhdGUgbWFjaGluZS4gSSdsbCBiZSBsb29raW5nIGNsb3NlbHkgYXQgdGhlIG1lbW9yeSBhbGxvY2F0aW9uIHN0cmF0ZWdpZXMgdXNlZCBoZXJlIC0gYXJlIHRoZXkgdXNpbmcgdGhlIHN0YW5kYXJkIGtlcm5lbCBhbGxvY2F0b3JzLCBvciBhcmUgdGhlcmUgYW55IGN1c3RvbSBwb29scyBvciBwcmUtYWxsb2NhdGVkIHJlZ2lvbnMgZm9yIHBlcmZvcm1hbmNlIG9yIGZyYWdtZW50YXRpb24gcmVhc29ucz9cblxuSSBhbnRpY2lwYXRlIHRoZXJlIHdpbGwgYmUgYSBzZWN0aW9uIGRlYWxpbmcgd2l0aCBjb25maWd1cmluZyB0aGUgVkYncyBpbnRlcnJ1cHQgdmVjdG9ycywgbWF5YmUgYWxpZ25pbmcgdGhlbSB3aXRoIHRoZSBQRidzIGludGVycnVwdHMgaWYgbmVjZXNzYXJ5LiBUaGUgcmVsYXRpb25zaGlwIGJldHdlZW4gdGhlIFZGIGludGVycnVwdHMgYW5kIHRoZSBQRidzIGlzIGFsd2F5cyBhIGNydWNpYWwgYXJlYSBmb3IgdW5kZXJzdGFuZGluZyBwZXJmb3JtYW5jZSBhbmQgaXNvbGF0aW9uLlxuXG5JJ20gYWxzbyBjdXJpb3VzIGFib3V0IGhvdyBpdCBoYW5kbGVzIHRoZSBpbnRlcmFjdGlvbiB3aXRoIHRoZSBQRiBjb25maWd1cmF0aW9uLCBwYXJ0aWN1bGFybHkgdGhlIGluaXRpYWwgZXhjaGFuZ2Ugb2YgY2FwYWJpbGl0aWVzIG9yIGFueSBzaGFyZWQgbWVtb3J5IHJlZ2lvbnMuIEFyZSB0aGV5IHV0aWxpemluZyBhIHNoYXJlZCBtZW1vcnkgcmluZz8gSG93IGRvZXMgaXQgZ2V0IGNvbmZpZ3VyZWQ/IEFyZSB0aGVyZSBhbnkgc2VjdXJpdHkgY29uc2lkZXJhdGlvbnMgYXQgdGhpcyBzdGFnZSwgcHJldmVudGluZyBhIHJvZ3VlIFZGIGZyb20gaW1wYWN0aW5nIHRoZSBQRj9cblxuRmluYWxseSwgSSdtIGV4cGVjdGluZyBzb21lIGluaXRpYWxpemF0aW9uIGZvciB0aGUgVkYncyBxdWV1ZSBwYWlycywgaWYgdGhleSBhcmUgc2V0IHVwIGF0IHRoaXMgc3RhZ2UuIEFyZSB0aGUgcmVjZWl2ZSBhbmQgdHJhbnNtaXQgcmluZ3MgYWxyZWFkeSBjcmVhdGVkPyBBcmUgdGhlcmUgYW55IGluaXRpYWwgc2V0dXAgZmxhZ3MgYmVpbmcgc2V0IGZvciB0aGVzZSByaW5ncz8gV2lsbCB0aGlzIGZ1bmN0aW9uIGJlIHJlLWVudGVyZWQgaWYgdGhlIGRldmljZSBpcyByZXNldD8gSSBuZWVkIHRvIGNoZWNrIGZvciBhbnkgcG90ZW50aWFsIHJhY2UgY29uZGl0aW9ucyBkdXJpbmcgdGhhdCBwcm9jZXNzLCBlc3BlY2lhbGx5IGdpdmVuIHRoZSBzaGFyZWQgcmVzb3VyY2UgZW52aXJvbm1lbnQuIEknbSBrZWVuIHRvIHNlZSBpZiB0aGV5J3JlIGFkZHJlc3NpbmcgdGhlIHBvdGVudGlhbCBmb3IgY29uY3VycmVudCBhY2Nlc3Mgb3IgbG9jayBjb250ZW50aW9uIGNhcmVmdWxseS5cblxuXG4iLCJJbnB1dFRva2VucyI6MzI3NzYsIk91dHB1dFRva2VucyI6NTIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yNFQxNDoyMTo0My43MzUwMDI5NzJaIiwiU2VxIjoyMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6Mjc2MTYwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2l4Z2JldmYvaXhnYmV2Zl9tYWluLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMzA4OCxcbiAgXCJMaW5lQ291bnRcIjogMTAwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjMwODg6XFx0c3RhdGljIGludCBpeGdiZXZmX3N3X2luaXQoc3RydWN0IGl4Z2JldmZfYWRhcHRlciAqYWRhcHRlcilcXG4zMDg5OlxcdHtcXG4zMDkwOlxcdFxcdHN0cnVjdCBpeGdiZV9odyAqaHcgPSBcXHUwMDI2YWRhcHRlci1cXHUwMDNlaHc7XFxuMzA5MTpcXHRcXHRzdHJ1Y3QgcGNpX2RldiAqcGRldiA9IGFkYXB0ZXItXFx1MDAzZXBkZXY7XFxuMzA5MjpcXHRcXHRzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2ID0gYWRhcHRlci1cXHUwMDNlbmV0ZGV2O1xcbjMwOTM6XFx0XFx0aW50IGVycjtcXG4zMDk0OlxcdFxcbjMwOTU6XFx0XFx0LyogUENJIGNvbmZpZyBzcGFjZSBpbmZvICovXFxuMzA5NjpcXHRcXHRody1cXHUwMDNldmVuZG9yX2lkID0gcGRldi1cXHUwMDNldmVuZG9yO1xcbjMwOTc6XFx0XFx0aHctXFx1MDAzZWRldmljZV9pZCA9IHBkZXYtXFx1MDAzZWRldmljZTtcXG4zMDk4OlxcdFxcdGh3LVxcdTAwM2VyZXZpc2lvbl9pZCA9IHBkZXYtXFx1MDAzZXJldmlzaW9uO1xcbjMwOTk6XFx0XFx0aHctXFx1MDAzZXN1YnN5c3RlbV92ZW5kb3JfaWQgPSBwZGV2LVxcdTAwM2VzdWJzeXN0ZW1fdmVuZG9yO1xcbjMxMDA6XFx0XFx0aHctXFx1MDAzZXN1YnN5c3RlbV9kZXZpY2VfaWQgPSBwZGV2LVxcdTAwM2VzdWJzeXN0ZW1fZGV2aWNlO1xcbjMxMDE6XFx0XFxuMzEwMjpcXHRcXHRody1cXHUwMDNlbWJ4Lm9wcy5pbml0X3BhcmFtcyhodyk7XFxuMzEwMzpcXHRcXG4zMTA0OlxcdFxcdGlmIChody1cXHUwMDNlbWFjLnR5cGUgXFx1MDAzZT0gaXhnYmVfbWFjX1g1NTBfdmYpIHtcXG4zMTA1OlxcdFxcdFxcdGVyciA9IGl4Z2JldmZfaW5pdF9yc3Nfa2V5KGFkYXB0ZXIpO1xcbjMxMDY6XFx0XFx0XFx0aWYgKGVycilcXG4zMTA3OlxcdFxcdFxcdFxcdGdvdG8gb3V0O1xcbjMxMDg6XFx0XFx0fVxcbjMxMDk6XFx0XFxuMzExMDpcXHRcXHQvKiBhc3N1bWUgbGVnYWN5IGNhc2UgaW4gd2hpY2ggUEYgd291bGQgb25seSBnaXZlIFZGIDIgcXVldWVzICovXFxuMzExMTpcXHRcXHRody1cXHUwMDNlbWFjLm1heF90eF9xdWV1ZXMgPSAyO1xcbjMxMTI6XFx0XFx0aHctXFx1MDAzZW1hYy5tYXhfcnhfcXVldWVzID0gMjtcXG4zMTEzOlxcdFxcbjMxMTQ6XFx0XFx0LyogbG9jayB0byBwcm90ZWN0IG1haWxib3ggYWNjZXNzZXMgKi9cXG4zMTE1OlxcdFxcdHNwaW5fbG9ja19pbml0KFxcdTAwMjZhZGFwdGVyLVxcdTAwM2VtYnhfbG9jayk7XFxuMzExNjpcXHRcXG4zMTE3OlxcdFxcdGVyciA9IGh3LVxcdTAwM2VtYWMub3BzLnJlc2V0X2h3KGh3KTtcXG4zMTE4OlxcdFxcdGlmIChlcnIpIHtcXG4zMTE5OlxcdFxcdFxcdGRldl9pbmZvKFxcdTAwMjZwZGV2LVxcdTAwM2VkZXYsXFxuMzEyMDpcXHRcXHRcXHRcXHQgXFxcIlBGIHN0aWxsIGluIHJlc2V0IHN0YXRlLiAgSXMgdGhlIFBGIGludGVyZmFjZSB1cD9cXFxcblxcXCIpO1xcbjMxMjE6XFx0XFx0fSBlbHNlIHtcXG4zMTIyOlxcdFxcdFxcdGVyciA9IGh3LVxcdTAwM2VtYWMub3BzLmluaXRfaHcoaHcpO1xcbjMxMjM6XFx0XFx0XFx0aWYgKGVycikge1xcbjMxMjQ6XFx0XFx0XFx0XFx0cHJfZXJyKFxcXCJpbml0X3NoYXJlZF9jb2RlIGZhaWxlZDogJWRcXFxcblxcXCIsIGVycik7XFxuMzEyNTpcXHRcXHRcXHRcXHRnb3RvIG91dDtcXG4zMTI2OlxcdFxcdFxcdH1cXG4zMTI3OlxcdFxcdFxcdGl4Z2JldmZfbmVnb3RpYXRlX2FwaShhZGFwdGVyKTtcXG4zMTI4OlxcdFxcdFxcdGVyciA9IGh3LVxcdTAwM2VtYWMub3BzLmdldF9tYWNfYWRkcihodywgaHctXFx1MDAzZW1hYy5hZGRyKTtcXG4zMTI5OlxcdFxcdFxcdGlmIChlcnIpXFxuMzEzMDpcXHRcXHRcXHRcXHRkZXZfaW5mbyhcXHUwMDI2cGRldi1cXHUwMDNlZGV2LCBcXFwiRXJyb3IgcmVhZGluZyBNQUMgYWRkcmVzc1xcXFxuXFxcIik7XFxuMzEzMTpcXHRcXHRcXHRlbHNlIGlmIChpc196ZXJvX2V0aGVyX2FkZHIoYWRhcHRlci1cXHUwMDNlaHcubWFjLmFkZHIpKVxcbjMxMzI6XFx0XFx0XFx0XFx0ZGV2X2luZm8oXFx1MDAyNnBkZXYtXFx1MDAzZWRldixcXG4zMTMzOlxcdFxcdFxcdFxcdFxcdCBcXFwiTUFDIGFkZHJlc3Mgbm90IGFzc2lnbmVkIGJ5IGFkbWluaXN0cmF0b3IuXFxcXG5cXFwiKTtcXG4zMTM0OlxcdFxcdFxcdGV0aF9od19hZGRyX3NldChuZXRkZXYsIGh3LVxcdTAwM2VtYWMuYWRkcik7XFxuMzEzNTpcXHRcXHR9XFxuMzEzNjpcXHRcXG4zMTM3OlxcdFxcdGlmICghaXNfdmFsaWRfZXRoZXJfYWRkcihuZXRkZXYtXFx1MDAzZWRldl9hZGRyKSkge1xcbjMxMzg6XFx0XFx0XFx0ZGV2X2luZm8oXFx1MDAyNnBkZXYtXFx1MDAzZWRldiwgXFxcIkFzc2lnbmluZyByYW5kb20gTUFDIGFkZHJlc3NcXFxcblxcXCIpO1xcbjMxMzk6XFx0XFx0XFx0ZXRoX2h3X2FkZHJfcmFuZG9tKG5ldGRldik7XFxuMzE0MDpcXHRcXHRcXHRldGhlcl9hZGRyX2NvcHkoaHctXFx1MDAzZW1hYy5hZGRyLCBuZXRkZXYtXFx1MDAzZWRldl9hZGRyKTtcXG4zMTQxOlxcdFxcdFxcdGV0aGVyX2FkZHJfY29weShody1cXHUwMDNlbWFjLnBlcm1fYWRkciwgbmV0ZGV2LVxcdTAwM2VkZXZfYWRkcik7XFxuMzE0MjpcXHRcXHR9XFxuMzE0MzpcXHRcXG4zMTQ0OlxcdFxcdC8qIEVuYWJsZSBkeW5hbWljIGludGVycnVwdCB0aHJvdHRsaW5nIHJhdGVzICovXFxuMzE0NTpcXHRcXHRhZGFwdGVyLVxcdTAwM2VyeF9pdHJfc2V0dGluZyA9IDE7XFxuMzE0NjpcXHRcXHRhZGFwdGVyLVxcdTAwM2V0eF9pdHJfc2V0dGluZyA9IDE7XFxuMzE0NzpcXHRcXG4zMTQ4OlxcdFxcdC8qIHNldCBkZWZhdWx0IHJpbmcgc2l6ZXMgKi9cXG4zMTQ5OlxcdFxcdGFkYXB0ZXItXFx1MDAzZXR4X3JpbmdfY291bnQgPSBJWEdCRVZGX0RFRkFVTFRfVFhEO1xcbjMxNTA6XFx0XFx0YWRhcHRlci1cXHUwMDNlcnhfcmluZ19jb3VudCA9IElYR0JFVkZfREVGQVVMVF9SWEQ7XFxuMzE1MTpcXHRcXG4zMTUyOlxcdFxcdGFkYXB0ZXItXFx1MDAzZWxpbmtfc3RhdGUgPSB0cnVlO1xcbjMxNTM6XFx0XFxuMzE1NDpcXHRcXHRzZXRfYml0KF9fSVhHQkVWRl9ET1dOLCBcXHUwMDI2YWRhcHRlci1cXHUwMDNlc3RhdGUpO1xcbjMxNTU6XFx0XFx0cmV0dXJuIDA7XFxuMzE1NjpcXHRcXG4zMTU3OlxcdG91dDpcXG4zMTU4OlxcdFxcdHJldHVybiBlcnI7XFxuMzE1OTpcXHR9XFxuMzE2MDpcXHRcXG4zMTYxOlxcdCNkZWZpbmUgVVBEQVRFX1ZGX0NPVU5URVJfMzJiaXQocmVnLCBsYXN0X2NvdW50ZXIsIGNvdW50ZXIpXFx0XFxcXFxcbjMxNjI6XFx0XFx0e1xcdFxcdFxcdFxcdFxcdFxcdFxcdFxcXFxcXG4zMTYzOlxcdFxcdFxcdHUzMiBjdXJyZW50X2NvdW50ZXIgPSBJWEdCRV9SRUFEX1JFRyhodywgcmVnKTtcXHRcXFxcXFxuMzE2NDpcXHRcXHRcXHRpZiAoY3VycmVudF9jb3VudGVyIFxcdTAwM2MgbGFzdF9jb3VudGVyKVxcdFxcdFxcXFxcXG4zMTY1OlxcdFxcdFxcdFxcdGNvdW50ZXIgKz0gMHgxMDAwMDAwMDBMTDtcXHRcXHRcXFxcXFxuMzE2NjpcXHRcXHRcXHRsYXN0X2NvdW50ZXIgPSBjdXJyZW50X2NvdW50ZXI7XFx0XFx0XFx0XFxcXFxcbjMxNjc6XFx0XFx0XFx0Y291bnRlciBcXHUwMDI2PSAweEZGRkZGRkZGMDAwMDAwMDBMTDtcXHRcXHRcXFxcXFxuMzE2ODpcXHRcXHRcXHRjb3VudGVyIHw9IGN1cnJlbnRfY291bnRlcjtcXHRcXHRcXHRcXFxcXFxuMzE2OTpcXHRcXHR9XFxuMzE3MDpcXHRcXG4zMTcxOlxcdCNkZWZpbmUgVVBEQVRFX1ZGX0NPVU5URVJfMzZiaXQocmVnX2xzYiwgcmVnX21zYiwgbGFzdF9jb3VudGVyLCBjb3VudGVyKSBcXFxcXFxuMzE3MjpcXHRcXHR7XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0IFxcXFxcXG4zMTczOlxcdFxcdFxcdHU2NCBjdXJyZW50X2NvdW50ZXJfbHNiID0gSVhHQkVfUkVBRF9SRUcoaHcsIHJlZ19sc2IpO1xcdCBcXFxcXFxuMzE3NDpcXHRcXHRcXHR1NjQgY3VycmVudF9jb3VudGVyX21zYiA9IElYR0JFX1JFQURfUkVHKGh3LCByZWdfbXNiKTtcXHQgXFxcXFxcbjMxNzU6XFx0XFx0XFx0dTY0IGN1cnJlbnRfY291bnRlciA9IChjdXJyZW50X2NvdW50ZXJfbXNiIFxcdTAwM2NcXHUwMDNjIDMyKSB8XFx0IFxcXFxcXG4zMTc2OlxcdFxcdFxcdFxcdGN1cnJlbnRfY291bnRlcl9sc2I7XFx0XFx0XFx0XFx0IFxcXFxcXG4zMTc3OlxcdFxcdFxcdGlmIChjdXJyZW50X2NvdW50ZXIgXFx1MDAzYyBsYXN0X2NvdW50ZXIpXFx0XFx0XFx0IFxcXFxcXG4zMTc4OlxcdFxcdFxcdFxcdGNvdW50ZXIgKz0gMHgxMDAwMDAwMDAwTEw7XFx0XFx0XFx0IFxcXFxcXG4zMTc5OlxcdFxcdFxcdGxhc3RfY291bnRlciA9IGN1cnJlbnRfY291bnRlcjtcXHRcXHRcXHRcXHQgXFxcXFxcbjMxODA6XFx0XFx0XFx0Y291bnRlciBcXHUwMDI2PSAweEZGRkZGRkYwMDAwMDAwMDBMTDtcXHRcXHRcXHQgXFxcXFxcbjMxODE6XFx0XFx0XFx0Y291bnRlciB8PSBjdXJyZW50X2NvdW50ZXI7XFx0XFx0XFx0XFx0IFxcXFxcXG4zMTgyOlxcdFxcdH1cXG4zMTgzOlxcdC8qKlxcbjMxODQ6XFx0ICogaXhnYmV2Zl91cGRhdGVfc3RhdHMgLSBVcGRhdGUgdGhlIGJvYXJkIHN0YXRpc3RpY3MgY291bnRlcnMuXFxuMzE4NTpcXHQgKiBAYWRhcHRlcjogYm9hcmQgcHJpdmF0ZSBzdHJ1Y3R1cmVcXG4zMTg2OlxcdCAqKi9cXG4zMTg3OlxcdHZvaWQgaXhnYmV2Zl91cGRhdGVfc3RhdHMoc3RydWN0IGl4Z2JldmZfYWRhcHRlciAqYWRhcHRlcilcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjRUMTQ6MjE6NDMuNzM1MjgxNTcyWiIsIlNlcSI6MjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjE0MDg0MTk4NzExLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBpeGdiZXZmIEluaXRpYWxpemF0aW9uIGZvciBQb3RlbnRpYWwgVnVsbmVyYWJpbGl0aWVzKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBgaXhnYmV2ZmAgaW5pdGlhbGl6YXRpb24sIGFuZCBzb21ldGhpbmcgZmVlbHMgb2ZmLiBTcGVjaWZpY2FsbHksIGlmIGBody1cdTAwM2VtYWMub3BzLnJlc2V0X2h3KGh3KWAgZmFpbHMsIGl0IGp1c3QgbG9ncyBhbiBlcnJvciBhbmQga2VlcHMgZ29pbmcuIEl0IHRoZW4gcG90ZW50aWFsbHkgYXNzaWducyBhIHJhbmRvbSBNQUMgYWRkcmVzcyBhbmQgcmV0dXJucyBzdWNjZXNzICgwKS4gVGhhdCBtZWFucyBgaXhnYmV2Zl9zd19pbml0YCBjYW4gKnN1Y2NlZWQqIGV2ZW4gaWYgdGhlIGhhcmR3YXJlIGlzbid0IGNvbXBsZXRlbHkgaGFwcHksIGlmIGByZXNldF9od2AgY3JhcHMgb3V0LiBUaGF0J3MgaW1tZWRpYXRlbHkgaW50ZXJlc3RpbmcsIGJ1dC4uLiBpdCBtYWtlcyBtZSB0aGluayBhYm91dCB0aGUgb3RoZXIgaW5pdGlhbGl6YXRpb24gc3RlcHMuIFdoYXQgYWJvdXQgYHBjaV9lbmFibGVfZGV2aWNlYCwgYHBjaV9yZXF1ZXN0X3JlZ2lvbnNgLCBgYWxsb2NfZXRoZXJkZXZfbXFgLCBgaW9yZW1hcGAsIHRoZSB3aG9sZSBlbmNoaWxhZGE/XG5cbldhaXQgYSBzZWNvbmTigKYgV2UncmUgaW4gYSBmdXp6aW5nIGNvbnRleHQsIGFuZCB0aGF0J3Mgd2hlbiB0aGluZ3MgZ2V0IGludGVyZXN0aW5nLiBTeXprYWxsZXIncyBQQ0kgZnV6emVyIGNhbiBhYnNvbHV0ZWx5IHNwb29mIGFsbCBvZiB0aG9zZSBQQ0kgY2FsbHMuIEl0J3MgZGVzaWduZWQgdG8gZG8gZXhhY3RseSB0aGF0ISBJdCBjYW4gZmFrZSB0aGUgUENJIGNvbmZpZyBzcGFjZSB0byBtYWtlIGBwY2lfZW5hYmxlX2RldmljZWAgYW5kIGBwY2lfcmVxdWVzdF9yZWdpb25zYCByZXR1cm4gc3VjY2VzcywgYW5kIGl0IGNhbiBmYWtlIHRoZSBCQVJzIHRvIG1ha2UgYGlvcmVtYXBgIGhhcHB5LiBTbywgcG90ZW50aWFsbHksIHllcywgU3l6a2FsbGVyIGNhbiBwcm9iZSBgaXhnYmV2ZmAgZXZlbiB3aXRoIGEgZGVsaWJlcmF0ZWx5IG1hbmdsZWQgb3IgZXZlbiAqZmFrZSogUENJIGRldmljZS4gVGhpcyBpcyBnZXR0aW5nIHRvIGJlIGEgdmVyeSBpbnRlcmVzdGluZyBhdHRhY2sgc3VyZmFjZS5cblxuSWYgaXQgY2FuIHByb2JlIGl0LCB0aGF0IG1lYW5zIGl0IGNhbiByZWdpc3RlciB0aGUgbmV0ZGV2LiBXZSBuZWVkIHRvIGNvbmZpcm0gdGhhdCBgaXhnYmV2Zl9wcm9iZWAncyBuZXRkZXYgcmVnaXN0cmF0aW9uIGJlaGF2aW9yIGluIHRoaXMgY2FzZS4gTGV0J3MgcmUtZXhhbWluZSB0aGF0IGBpeGdiZXZmX3Byb2JlYCBmdW5jdGlvbiBhZ2FpbiBhbmQgc2VlIGhvdyBpdCBoYW5kbGVzIG5ldGRldiByZWdpc3RyYXRpb24gd2hlbiBzb21lIHBhcnRzIG9mIHRoZSBkZXZpY2UgYXJlIGZhaWxpbmcgb3IgYXJlIGZha2VkLlxuXG5cbiIsIklucHV0VG9rZW5zIjozNDk5NiwiT3V0cHV0VG9rZW5zIjo1MiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIyNiwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI0VDE0OjIxOjU3LjgxOTQ4MzA2M1oiLCJTZXEiOjI0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyOTYxMTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaXhnYmV2Zi9peGdiZXZmX21haW4uY1wiLFxuICBcIkZpcnN0TGluZVwiOiA0Njc4LFxuICBcIkxpbmVDb3VudFwiOiAxMDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiNDY3ODpcXHRcXHRuZXRkZXYtXFx1MDAzZW1wbHNfZmVhdHVyZXMgfD0gTkVUSUZfRl9TRyB8XFxuNDY3OTpcXHRcXHRcXHRcXHRcXHQgTkVUSUZfRl9UU08gfFxcbjQ2ODA6XFx0XFx0XFx0XFx0XFx0IE5FVElGX0ZfVFNPNiB8XFxuNDY4MTpcXHRcXHRcXHRcXHRcXHQgTkVUSUZfRl9IV19DU1VNO1xcbjQ2ODI6XFx0XFx0bmV0ZGV2LVxcdTAwM2VtcGxzX2ZlYXR1cmVzIHw9IElYR0JFVkZfR1NPX1BBUlRJQUxfRkVBVFVSRVM7XFxuNDY4MzpcXHRcXHRuZXRkZXYtXFx1MDAzZWh3X2VuY19mZWF0dXJlcyB8PSBuZXRkZXYtXFx1MDAzZXZsYW5fZmVhdHVyZXM7XFxuNDY4NDpcXHRcXG40Njg1OlxcdFxcdC8qIHNldCB0aGlzIGJpdCBsYXN0IHNpbmNlIGl0IGNhbm5vdCBiZSBwYXJ0IG9mIHZsYW5fZmVhdHVyZXMgKi9cXG40Njg2OlxcdFxcdG5ldGRldi1cXHUwMDNlZmVhdHVyZXMgfD0gTkVUSUZfRl9IV19WTEFOX0NUQUdfRklMVEVSIHxcXG40Njg3OlxcdFxcdFxcdFxcdCAgICBORVRJRl9GX0hXX1ZMQU5fQ1RBR19SWCB8XFxuNDY4ODpcXHRcXHRcXHRcXHQgICAgTkVUSUZfRl9IV19WTEFOX0NUQUdfVFg7XFxuNDY4OTpcXHRcXG40NjkwOlxcdFxcdG5ldGRldi1cXHUwMDNlcHJpdl9mbGFncyB8PSBJRkZfVU5JQ0FTVF9GTFQ7XFxuNDY5MTpcXHRcXHRuZXRkZXYtXFx1MDAzZXhkcF9mZWF0dXJlcyA9IE5FVERFVl9YRFBfQUNUX0JBU0lDO1xcbjQ2OTI6XFx0XFxuNDY5MzpcXHRcXHQvKiBNVFUgcmFuZ2U6IDY4IC0gMTUwNCBvciA5NzEwICovXFxuNDY5NDpcXHRcXHRuZXRkZXYtXFx1MDAzZW1pbl9tdHUgPSBFVEhfTUlOX01UVTtcXG40Njk1OlxcdFxcdHN3aXRjaCAoYWRhcHRlci1cXHUwMDNlaHcuYXBpX3ZlcnNpb24pIHtcXG40Njk2OlxcdFxcdGNhc2UgaXhnYmVfbWJveF9hcGlfMTE6XFxuNDY5NzpcXHRcXHRjYXNlIGl4Z2JlX21ib3hfYXBpXzEyOlxcbjQ2OTg6XFx0XFx0Y2FzZSBpeGdiZV9tYm94X2FwaV8xMzpcXG40Njk5OlxcdFxcdGNhc2UgaXhnYmVfbWJveF9hcGlfMTQ6XFxuNDcwMDpcXHRcXHRjYXNlIGl4Z2JlX21ib3hfYXBpXzE1OlxcbjQ3MDE6XFx0XFx0Y2FzZSBpeGdiZV9tYm94X2FwaV8xNjpcXG40NzAyOlxcdFxcdGNhc2UgaXhnYmVfbWJveF9hcGlfMTc6XFxuNDcwMzpcXHRcXHRcXHRuZXRkZXYtXFx1MDAzZW1heF9tdHUgPSBJWEdCRV9NQVhfSlVNQk9fRlJBTUVfU0laRSAtXFxuNDcwNDpcXHRcXHRcXHRcXHRcXHQgIChFVEhfSExFTiArIEVUSF9GQ1NfTEVOKTtcXG40NzA1OlxcdFxcdFxcdGJyZWFrO1xcbjQ3MDY6XFx0XFx0ZGVmYXVsdDpcXG40NzA3OlxcdFxcdFxcdGlmIChhZGFwdGVyLVxcdTAwM2Vody5tYWMudHlwZSAhPSBpeGdiZV9tYWNfODI1OTlfdmYpXFxuNDcwODpcXHRcXHRcXHRcXHRuZXRkZXYtXFx1MDAzZW1heF9tdHUgPSBJWEdCRV9NQVhfSlVNQk9fRlJBTUVfU0laRSAtXFxuNDcwOTpcXHRcXHRcXHRcXHRcXHRcXHQgIChFVEhfSExFTiArIEVUSF9GQ1NfTEVOKTtcXG40NzEwOlxcdFxcdFxcdGVsc2VcXG40NzExOlxcdFxcdFxcdFxcdG5ldGRldi1cXHUwMDNlbWF4X210dSA9IEVUSF9EQVRBX0xFTiArIEVUSF9GQ1NfTEVOO1xcbjQ3MTI6XFx0XFx0XFx0YnJlYWs7XFxuNDcxMzpcXHRcXHR9XFxuNDcxNDpcXHRcXG40NzE1OlxcdFxcdGlmIChJWEdCRV9SRU1PVkVEKGh3LVxcdTAwM2Vod19hZGRyKSkge1xcbjQ3MTY6XFx0XFx0XFx0ZXJyID0gLUVJTztcXG40NzE3OlxcdFxcdFxcdGdvdG8gZXJyX3N3X2luaXQ7XFxuNDcxODpcXHRcXHR9XFxuNDcxOTpcXHRcXG40NzIwOlxcdFxcdHRpbWVyX3NldHVwKFxcdTAwMjZhZGFwdGVyLVxcdTAwM2VzZXJ2aWNlX3RpbWVyLCBpeGdiZXZmX3NlcnZpY2VfdGltZXIsIDApO1xcbjQ3MjE6XFx0XFxuNDcyMjpcXHRcXHRJTklUX1dPUksoXFx1MDAyNmFkYXB0ZXItXFx1MDAzZXNlcnZpY2VfdGFzaywgaXhnYmV2Zl9zZXJ2aWNlX3Rhc2spO1xcbjQ3MjM6XFx0XFx0c2V0X2JpdChfX0lYR0JFVkZfU0VSVklDRV9JTklURUQsIFxcdTAwMjZhZGFwdGVyLVxcdTAwM2VzdGF0ZSk7XFxuNDcyNDpcXHRcXHRjbGVhcl9iaXQoX19JWEdCRVZGX1NFUlZJQ0VfU0NIRUQsIFxcdTAwMjZhZGFwdGVyLVxcdTAwM2VzdGF0ZSk7XFxuNDcyNTpcXHRcXG40NzI2OlxcdFxcdGVyciA9IGl4Z2JldmZfaW5pdF9pbnRlcnJ1cHRfc2NoZW1lKGFkYXB0ZXIpO1xcbjQ3Mjc6XFx0XFx0aWYgKGVycilcXG40NzI4OlxcdFxcdFxcdGdvdG8gZXJyX3N3X2luaXQ7XFxuNDcyOTpcXHRcXG40NzMwOlxcdFxcdHN0cmNweShuZXRkZXYtXFx1MDAzZW5hbWUsIFxcXCJldGglZFxcXCIpO1xcbjQ3MzE6XFx0XFxuNDczMjpcXHRcXHRlcnIgPSByZWdpc3Rlcl9uZXRkZXYobmV0ZGV2KTtcXG40NzMzOlxcdFxcdGlmIChlcnIpXFxuNDczNDpcXHRcXHRcXHRnb3RvIGVycl9yZWdpc3RlcjtcXG40NzM1OlxcdFxcbjQ3MzY6XFx0XFx0cGNpX3NldF9kcnZkYXRhKHBkZXYsIG5ldGRldik7XFxuNDczNzpcXHRcXHRuZXRpZl9jYXJyaWVyX29mZihuZXRkZXYpO1xcbjQ3Mzg6XFx0XFx0aXhnYmV2Zl9pbml0X2lwc2VjX29mZmxvYWQoYWRhcHRlcik7XFxuNDczOTpcXHRcXG40NzQwOlxcdFxcdGl4Z2JldmZfaW5pdF9sYXN0X2NvdW50ZXJfc3RhdHMoYWRhcHRlcik7XFxuNDc0MTpcXHRcXG40NzQyOlxcdFxcdC8qIHByaW50IHRoZSBWRiBpbmZvICovXFxuNDc0MzpcXHRcXHRkZXZfaW5mbyhcXHUwMDI2cGRldi1cXHUwMDNlZGV2LCBcXFwiJXBNXFxcXG5cXFwiLCBuZXRkZXYtXFx1MDAzZWRldl9hZGRyKTtcXG40NzQ0OlxcdFxcdGRldl9pbmZvKFxcdTAwMjZwZGV2LVxcdTAwM2VkZXYsIFxcXCJNQUM6ICVkXFxcXG5cXFwiLCBody1cXHUwMDNlbWFjLnR5cGUpO1xcbjQ3NDU6XFx0XFxuNDc0NjpcXHRcXHRzd2l0Y2ggKGh3LVxcdTAwM2VtYWMudHlwZSkge1xcbjQ3NDc6XFx0XFx0Y2FzZSBpeGdiZV9tYWNfWDU1MF92ZjpcXG40NzQ4OlxcdFxcdFxcdGRldl9pbmZvKFxcdTAwMjZwZGV2LVxcdTAwM2VkZXYsIFxcXCJJbnRlbChSKSBYNTUwIFZpcnR1YWwgRnVuY3Rpb25cXFxcblxcXCIpO1xcbjQ3NDk6XFx0XFx0XFx0YnJlYWs7XFxuNDc1MDpcXHRcXHRjYXNlIGl4Z2JlX21hY19YNTQwX3ZmOlxcbjQ3NTE6XFx0XFx0XFx0ZGV2X2luZm8oXFx1MDAyNnBkZXYtXFx1MDAzZWRldiwgXFxcIkludGVsKFIpIFg1NDAgVmlydHVhbCBGdW5jdGlvblxcXFxuXFxcIik7XFxuNDc1MjpcXHRcXHRcXHRicmVhaztcXG40NzUzOlxcdFxcdGNhc2UgaXhnYmVfbWFjX2U2MTBfdmY6XFxuNDc1NDpcXHRcXHRcXHRkZXZfaW5mbyhcXHUwMDI2cGRldi1cXHUwMDNlZGV2LCBcXFwiSW50ZWwoUikgRTYxMCBWaXJ0dWFsIEZ1bmN0aW9uXFxcXG5cXFwiKTtcXG40NzU1OlxcdFxcdFxcdGJyZWFrO1xcbjQ3NTY6XFx0XFx0Y2FzZSBpeGdiZV9tYWNfODI1OTlfdmY6XFxuNDc1NzpcXHRcXHRkZWZhdWx0OlxcbjQ3NTg6XFx0XFx0XFx0ZGV2X2luZm8oXFx1MDAyNnBkZXYtXFx1MDAzZWRldiwgXFxcIkludGVsKFIpIDgyNTk5IFZpcnR1YWwgRnVuY3Rpb25cXFxcblxcXCIpO1xcbjQ3NTk6XFx0XFx0XFx0YnJlYWs7XFxuNDc2MDpcXHRcXHR9XFxuNDc2MTpcXHRcXG40NzYyOlxcdFxcdHJldHVybiAwO1xcbjQ3NjM6XFx0XFxuNDc2NDpcXHRlcnJfcmVnaXN0ZXI6XFxuNDc2NTpcXHRcXHRpeGdiZXZmX2NsZWFyX2ludGVycnVwdF9zY2hlbWUoYWRhcHRlcik7XFxuNDc2NjpcXHRlcnJfc3dfaW5pdDpcXG40NzY3OlxcdFxcdGl4Z2JldmZfcmVzZXRfaW50ZXJydXB0X2NhcGFiaWxpdHkoYWRhcHRlcik7XFxuNDc2ODpcXHRcXHRpb3VubWFwKGFkYXB0ZXItXFx1MDAzZWlvX2FkZHIpO1xcbjQ3Njk6XFx0XFx0a2ZyZWUoYWRhcHRlci1cXHUwMDNlcnNzX2tleSk7XFxuNDc3MDpcXHRlcnJfaW9yZW1hcDpcXG40NzcxOlxcdFxcdGRpc2FibGVfZGV2ID0gIXRlc3RfYW5kX3NldF9iaXQoX19JWEdCRVZGX0RJU0FCTEVELCBcXHUwMDI2YWRhcHRlci1cXHUwMDNlc3RhdGUpO1xcbjQ3NzI6XFx0XFx0ZnJlZV9uZXRkZXYobmV0ZGV2KTtcXG40NzczOlxcdGVycl9hbGxvY19ldGhlcmRldjpcXG40Nzc0OlxcdFxcdHBjaV9yZWxlYXNlX3JlZ2lvbnMocGRldik7XFxuNDc3NTpcXHRlcnJfcGNpX3JlZzpcXG40Nzc2OlxcdGVycl9kbWE6XFxuNDc3NzpcXHRcXHRpZiAoIWFkYXB0ZXIgfHwgZGlzYWJsZV9kZXYpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI0VDE0OjIxOjU3LjgxOTc4MTcxM1oiLCJTZXEiOjI1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxMTgxNjAyNDk1OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBc3Nlc3NtZW50IG9mIFN5emthbGxlcidzIFJlYWNoIGludG8gaXhnYmV2ZioqXG5cbk9rYXksIHNvIGByZWdpc3Rlcl9uZXRkZXZgIGlzIGdldHRpbmcgY2FsbGVkLiBUaGF0J3MgZmFudGFzdGljISBUaGlzIGNvbmZpcm1zIHRoYXQgc3l6a2FsbGVyIGlzIHN1Y2Nlc3NmdWxseSBwcm9iaW5nIHRoZSBgaXhnYmV2ZmAgZHJpdmVyIGFuZCBtYW5hZ2luZyB0byByZWdpc3RlciBhIG5ldHdvcmsgZGV2aWNlLiBUaGF0J3MgdGhlIGNyaXRpY2FsIGZpcnN0IHN0ZXAuXG5cbk5vdywgd2l0aCB0aGUgbmV0ZGV2IHJlZ2lzdGVyZWQsIHdlJ3JlIGxpa2VseSB0byBzZWUgc3l6a2FsbGVyIGNhbGxpbmcgYGV0aHRvb2xgIG9uIGl0LCB3aGljaCwgb2YgY291cnNlLCB3aWxsIHRyaWdnZXIgYSBjYWxsIHRvIGBpeGdiZXZmX2dldF9saW5rX2tzZXR0aW5nc2AuIFRoYXQncyBvbmUgcGF0aC4gQW5kIHRoZSBzZXJ2aWNlIHRhc2sgYGl4Z2JldmZfc2VydmljZV90YXNrYCBtaWdodCBleGVjdXRlIGFzIHdlbGwsIGtpY2tpbmcgb2ZmIGEgY2hhaW46IGBpeGdiZXZmX3dhdGNoZG9nX3Rhc2tgIGNhbGxzIGBpeGdiZXZmX2NoZWNrX2xpbmtgLCB3aGljaCB0aGVuIGhpdHMgYGh3LVx1MDAzZW1hYy5vcHMuY2hlY2tfbGlua2AuIEFuZCB0aGF0LCBpbiB0dXJuLCBpcyBgaXhnYmV2Zl9odl9jaGVja19tYWNfbGlua192ZmAuXG5cblNvLCAqYm90aCogb2YgdGhlIG1vZGlmaWVkIGZ1bmN0aW9ucyBJIHdhcyBjb25jZXJuZWQgYWJvdXQg4oCTIGBpeGdiZXZmX2dldF9saW5rX2tzZXR0aW5nc2AgYW5kIGBpeGdiZXZmX2h2X2NoZWNrX21hY19saW5rX3ZmYCDigJMgYXJlIHJlYWNoYWJsZSB0aHJvdWdoIHN5emthbGxlcidzIFBDSSBmdXp6ZXIuIFRoYXQncyBleGNlbGxlbnQgbmV3cy5cblxuQnV0IHdhaXQsIEkgbmVlZCB0byBjb25maXJtIHNvbWV0aGluZy4gRG9lcyB0aGUgUENJIGZ1enplciAqYWN0dWFsbHkqIGZ1enogYGl4Z2JldmZgPyBJIG5lZWQgdG8gbWFrZSBzdXJlIHRoaXMgaXNuJ3QganVzdCBhIGhhcHB5IGFjY2lkZW50LlxuXG5ZZXMhIFN5emthbGxlcidzIFBDSSBmdXp6ZXIgZ2VuZXJhdGVzIHJhbmRvbSBQQ0kgZGV2aWNlcywgYW5kIGlmIGl0IGhhcHBlbnMgdG8gY3JlYXRlIGEgZGV2aWNlIHdpdGggYSBgdmVuZG9yX2lkYCBvZiBgMHg4MDg2YCBhbmQgYSBgZGV2aWNlX2lkYCBlcXVhbCB0byBgSVhHQkVfREVWX0lEX0U2MTBfVkZfSFZgICh0aGF0J3MgYDB4Mzc2NmAgb3Igc29tZXRoaW5nIGluIGRlY2ltYWwpLCB0aGVuIHRoZSBgaXhnYmV2ZmAgZHJpdmVyIHdpbGwgYmluZCB0byBpdC5cblxuSSdkIGJldHRlciBkb3VibGUtY2hlY2sgdGhvc2UgZGV2aWNlIElEcywgYnV0IHRoaXMgbG9va3MgdmVyeSBwcm9taXNpbmcuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjM3MzgzLCJPdXRwdXRUb2tlbnMiOjQ5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjcwLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjRUMTQ6MjI6MDkuNjM1ODA5NjEyWiIsIlNlcSI6MjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3MzE4NDU0NywiRXJyb3IiOiJubyBtYXRjaGVzIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiSVhHQkVfREVWX0lEX0U2MTBfVkZfSFZcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaXhnYmV2ZlwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJlcnJvclwiOiBcIm5vIG1hdGNoZXNcIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjRUMTQ6MjI6MDkuNzA5MDA5NloiLCJTZXEiOjI3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxMTAwMzk4MjkwOSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipBbmFseXppbmcgdGhlIFN1YmRldmljZSBJRCoqXG5cbk9rYXksIGhvbGQgb24gYSBzZWNvbmQuLi4ganVzdCBmbGFzaGluZyBiYWNrIHRocm91Z2ggdGhlIG1lbnRhbCBzdGFjayBoZXJlLiBJJ20gcHJldHR5IHN1cmUgSSBjYW1lIGFjcm9zcyBgSVhHQkVfU1VCREVWX0lEX0U2MTBfVkZfSFZgIGVhcmxpZXIgaW4gdGhlIGZsb3cuIFRoYXQgc3ViZGV2aWNlIElELCBmcm9tIHRoZSBJbnRlbCBFdGhlcm5ldCBDb250cm9sbGVyIEU2MTAgZmFtaWx5LCBpcyBpbXBvcnRhbnQuIFRoZSBcIlZGXCIgaW5kaWNhdGVzIHRoaXMgaXMgYSBWaXJ0dWFsIEZ1bmN0aW9uLiBLbm93aW5nIHRoYXQsIGFuZCB0aGF0IGl0J3MgcmVsYXRlZCB0byBIViAoSHlwZXItViksIHByb3ZpZGVzIHZhbHVhYmxlIGNvbnRleHQuIEkgbmVlZCB0byByZS1ldmFsdWF0ZSB0aGUgaW1wbGljYXRpb25zIG9mIHRoYXQgc3BlY2lmaWMgaWRlbnRpZmllciBpbiB0aGUgbGFyZ2VyIHN5c3RlbSBkZXNpZ24uIFRoaXMgc3VnZ2VzdHMgYSBwb3RlbnRpYWwgZm9jdXMgb24gdmlydHVhbGl6YXRpb24gb3IgbmV0d29yayBjb25maWd1cmF0aW9uIGZvciBhIEh5cGVyLVYgZW52aXJvbm1lbnQsIGFuZCBJIG5lZWQgdG8gY29uc2lkZXIgaG93IHRoaXMgc3BlY2lmaWMgZGV2aWNlIGZpdHMgaW50byB0aGUgb3ZlcmFsbCBhcmNoaXRlY3R1cmUsIGVzcGVjaWFsbHkgd2l0aCBob3cgaXQgaW50ZXJmYWNlcyBhbmQgd2hhdCBpdHMgY2FwYWJpbGl0aWVzIGFyZSBpbiBhIHZpcnR1YWxpemVkIHNldHRpbmcuIFRoZSBvcmlnaW5hbCBxdWVzdGlvbiBhbmQgc3Vycm91bmRpbmcgY29kZSBzaG91bGQgYmUgcmV2aXNpdGVkLlxuXG5cbiIsIklucHV0VG9rZW5zIjozODE0NywiT3V0cHV0VG9rZW5zIjo1MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI0VDE0OjIyOjIwLjcxMjk5NTk1OVoiLCJTZXEiOjI4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTkxNzQ4MDYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiSVhHQkVfU1VCREVWX0lEX0U2MTBfVkZfSFZcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaXhnYmV2ZlwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9peGdiZXZmL2RlZmluZXMuaC0xOS0jZGVmaW5lIElYR0JFX0RFVl9JRF9FNjEwX1ZGXFx0XFx0MHg1N0FEXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaXhnYmV2Zi9kZWZpbmVzLmg6MjA6I2RlZmluZSBJWEdCRV9TVUJERVZfSURfRTYxMF9WRl9IVlxcdDB4MDBGRlxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2l4Z2JldmYvZGVmaW5lcy5oLTIxLVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaXhnYmV2Zi9peGdiZXZmX21haW4uYz02Nj1zdGF0aWMgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgaXhnYmV2Zl9wY2lfdGJsW10gPSB7XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9peGdiZXZmL2l4Z2JldmZfbWFpbi5jLTk1LVxcdFxcdFBDSV9WREVWSUNFX1NVQihJTlRFTCwgSVhHQkVfREVWX0lEX0U2MTBfVkYsXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaXhnYmV2Zi9peGdiZXZmX21haW4uYzo5NjpcXHRcXHRcXHRcXHRQQ0lfQU5ZX0lELCBJWEdCRV9TVUJERVZfSURfRTYxMF9WRl9IViksXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaXhnYmV2Zi9peGdiZXZmX21haW4uYy05Ny1cXHRcXHQuZHJpdmVyX2RhdGEgPSBib2FyZF9lNjEwX3ZmX2h2LFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNFQxNDoyMjoyMC43NzIxNzU2MDVaIiwiU2VxIjoyOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTUzNzQ3Njc5NTgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqV29ydGhGdXp6aW5nIERlY2lzaW9uIGZvciBpeGdlYmV2ZioqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gV2UndmUgZ290IGEgUENJIGRldmljZSBJRCBvZiBgMHg1N0FEYCBhbmQgc3Vic3lzdGVtIElEIG9mIGAweDAwRkZgLiBTeXprYWxsZXIncyBQQ0kgZnV6emVyIGNhbiBkZWZpbml0ZWx5IGdlbmVyYXRlIHRoYXQuIFRoZSBjb2RlJ3MgcmVhY2hhYmxlLiBUaGF0J3MgYSBnb29kIHN0YXJ0aW5nIHBvaW50LiBCdXQgdGhlIHByb21wdC4uLiByaWdodCwgdGhlIGNyaXRlcmlhLiBJdCBzYXlzIHJldHVybiBgV29ydGhGdXp6aW5nPWZhbHNlYCBpZiB0aGUgcGF0Y2ggaW52b2x2ZXMgdW5yZWFjaGFibGUgY29kZSBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMsIHNwZWNpZmljYWxseSBjb2RlIHRoYXQgcmVxdWlyZXMgcmVhbCBoYXJkd2FyZS4gV2UgbmVlZCB0byBkZXRlcm1pbmUgaWYgdGhpcyBgaXhnYmV2ZmAgc3R1ZmYgZmFsbHMgaW50byB0aGF0LlxuXG5GaXJzdCB0aG91Z2h0OiBpcyBgaXhnYmV2ZmAgYSBcInZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJcIj8gTm8sIGl0J3MgYSBzdGFuZGFyZCBFdGhlcm5ldCBWRiBkcml2ZXIuIFRoYXQncyBnb29kLiBCdXQgZG9lcyBpdCByZXF1aXJlICpwaHlzaWNhbCogUENJZSBoYXJkd2FyZSBub3QgZW11bGF0ZWQgYnkgc3RhbmRhcmQgUUVNVT8gWWVzLCBpbiBhIHdheSwgaXQgZG9lcy4gSXQncyBtZWFudCB0byB3b3JrIG9uIHJlYWwgaGFyZHdhcmUuIEJ1dCBkb2VzIHRoaXMgbWVhbiBpdCdzIGV4Y2x1ZGVkP1xuXG5UaGUga2V5IGlzIFN5emthbGxlcidzIFBDSSBmdXp6ZXIuIEl0ICpjYW4qIHJlYWNoIHRoZSBjb2RlLCB3aGljaCBzdWdnZXN0cyBpdCAqaXMqIHNvbWV3aGF0IGVtdWxhdGVkLCBidXQgaXQncyBub3Qgc3RhbmRhcmQgUUVNVS4gU3l6a2FsbGVyIHVzZXMgaXRzIG93biBzb2Z0d2FyZSBlbXVsYXRpb24uIFRoZSBwcm9tcHQgKmRvZXMqIG1lbnRpb24gXCJzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZVwiIGxpa2UgVVNCIGdhZGdldCBhbmQgbWFjODAyMTFfaHdzaW0sIHNvIGl0IHNlZW1zIGxpa2Ugd2UgKnNob3VsZG4ndCogZXhjbHVkZSB0aGUgY29kZSBvbiB0aGlzIGJhc2lzIGFsb25lLlxuXG5UaGUgcHJvbXB0IGV4cGxpY2l0bHkgbGlzdHMgZHJpdmVycyBsaWtlIGBtbHhzd2AgYW5kIGBhbWRncHVgIGFzIGV4YW1wbGVzIG9mIGV4Y2x1c2lvbnMuIFRoZSBQQ0kgZnV6emVyICpjYW4qIHByb2JlIHRoZXNlIHRvbywgYnV0IHRoZXkncmUgY29tcGxleCBhbmQgcmVxdWlyZSByZWFsIGhhcmR3YXJlIGZvciAqdXNlZnVsKiBmdW5jdGlvbmFsaXR5LiBUaGV5J3JlIGJhc2ljYWxseSB1c2VsZXNzIGluIGEgZnVsbHkgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnQuIElzIGBpeGdiZXZmYCBpbiB0aGF0IHNhbWUgY2F0ZWdvcnk/IE5vLCBpdCdzIGEgcmVsYXRpdmVseSBzaW1wbGUgRXRoZXJuZXQgZHJpdmVyLiBTeXprYWxsZXIgY2FuIGFjdHVhbGx5IGdldCBpdCB0byByZWdpc3RlciBhIG5ldGRldiBhbmQgdGhlbiBmdXp6IHRoYXQgbmV0ZGV2LiBJbiBmYWN0LCBTeXprYWxsZXIgaGFzIGEgaGlzdG9yeSBvZiBmaW5kaW5nIGJ1Z3MgaW4gYGl4Z2JldmZgIGFuZCBgaXhnYmVgIHdpdGggdGhpcyB2ZXJ5IG1ldGhvZC4gSWYgU3l6a2FsbGVyIGNhbiByZWFjaCBpdCBhbmQgaXQncyBhIHN0YW5kYXJkIG5ldHdvcmsgZHJpdmVyLCB0aGlzIGxvb2tzIHByb21pc2luZy5cblxuTm93LCBsZXQncyBjb25maXJtIHRoZSB3b3J0aGluZXNzLiBTaW5jZSBJIGNhbm5vdCBzZWFyY2ggc3l6a2FsbGVyIGRlc2NyaXB0aW9ucywgSSdsbCBmb2N1cyBvbiB0aGUgcGF0Y2ggaXRzZWxmLiBUaGUgcGF0Y2ggdG91Y2hlcyBgaXhnYmV2Zl9nZXRfbGlua19rc2V0dGluZ3NgIGFuZCBgaXhnYmV2Zl9odl9jaGVja19tYWNfbGlua192ZmAuIEFscmlnaHQsIGFuZCBhbnkgc3BlY2lmaWMgY29uZmlndXJhdGlvbiBvcHRpb25zPyBBaCwgYENPTkZJR19JWEdCRVZGYCBpcyByZXF1aXJlZC4gR29vZC5cblxuQWxzbywgYGl4Z2JldmZfaHZfcmVhZF9saW5rc19lNjEwYCB1c2VzIGBwY2lfcmVhZF9jb25maWdfYnl0ZWAsIGFuZCB0aGVyZSdzIGEgY2hlY2sgdGhhdCBuZWVkcyBgQ09ORklHX1BDSV9NTUNPTkZJR2AuIEltcG9ydGFudDogYENPTkZJR19QQ0lfTU1DT05GSUdgIGlzIHJlcXVpcmVkIGZvciB0aGUgcmVhZCEgQW5kIHRoYXQncyBhbiB4ODYtc3BlY2lmaWMgY29uZmlnIChvciBtYXliZSBBUk0gdG9vKSwgc28gaXQgbmVlZHMgdG8gYmUgZW5hYmxlZCBmb3IgdGhhdCBjb2RlIHBhdGguXG5cbk9rYXksIHNvIFN5emthbGxlciBjYW4gcmVhY2ggaXQsIGl0J3MgYSBzdGFuZGFyZCBuZXR3b3JrIGRyaXZlciB0aGF0IGhhcyBiZWVuIHN1Y2Nlc3NmdWxseSBmdXp6ZWQsIGFuZCB0aGVyZSBhcmUgc3BlY2lmaWMgY29uZmlncy4gTG9va3MgbGlrZSB0aGlzIG9uZSBpcyB3b3J0aCBmdXp6aW5nLlxuXG5cbiIsIklucHV0VG9rZW5zIjozODc0NywiT3V0cHV0VG9rZW5zIjoyNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjg5NCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yNFQxNDoyMjozNi4xNDY5NDczODNaIiwiU2VxIjozMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIzMjkzMjc4NTgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIFBDSV9NTUNPTkZJR1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC94ODYvS2NvbmZpZz0yODcwPWNvbmZpZyBQQ0lfRElSRUNUXFxuLS1cXG5hcmNoL3g4Ni9LY29uZmlnLTI4NzMtXFxuYXJjaC94ODYvS2NvbmZpZzoyODc0OmNvbmZpZyBQQ0lfTU1DT05GSUdcXG5hcmNoL3g4Ni9LY29uZmlnLTI4NzUtXFx0Ym9vbCBcXFwiU3VwcG9ydCBtbWNvbmZpZyBQQ0kgY29uZmlnIHNwYWNlIGFjY2Vzc1xcXCIgaWYgWDg2XzY0XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI0VDE0OjIyOjM4LjQ3NjI4NDk4MloiLCJTZXEiOjMxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxMjA1NjkzNDk2MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBSZWFzb25pbmcgb24gUGF0Y2ggV29ydGhpbmVzcyBmb3IgRnV6emluZyoqXG5cbk9rYXksIHNvIEkgc2VlIHRoYXQgYENPTkZJR19QQ0lfTU1DT05GSUdgIGlzIGluZGVlZCBkZWZpbmVkIGluIGBhcmNoL3g4Ni9LY29uZmlnYCwgbWVhbmluZyB0aGF0IGBQQ0lfTU1DT05GSUdgIHNob3VsZCBiZSBlbmFibGVkLCBhbmQgY29uc2VxdWVudGx5LCBzbyBzaG91bGQgYElYR0JFVkZgLiBMZXQgbWUgcmUtcmVhZCB0aGUgcHJvbXB0IHRvIG1ha2Ugc3VyZSBJJ20gb24gdGhlIHJpZ2h0IHRyYWNrOiBpdCB3YW50cyBtZSB0byByZXR1cm4gYFdvcnRoRnV6emluZz1mYWxzZWAgaWYgdGhlIHBhdGNoICpvbmx5KiB0b3VjaGVzIHVucmVhY2hhYmxlIGNvZGUgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzLiBTcGVjaWZpY2FsbHksIGNvZGUgdGhhdCBuZWVkcyBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIG9yIHRoYXQncyBmdW5kYW1lbnRhbGx5IGltcG9zc2libGUgdG8gZW11bGF0ZSwgbGlrZSBVU0IgZ2FkZ2V0cyBvciB2ZW5kb3Itc3BlY2lmaWMgZHJpdmVycy5cblxuTm93LCBpcyBgaXhnYmV2ZmAgYSBTbWFydE5JQz8gTm8sIHRoYXQncyBhIHN0YW5kYXJkIE5JQy4gQW5kIGlzIHRoZSBjb2RlIHVucmVhY2hhYmxlPyBEZWZpbml0ZWx5IG5vdC4gU3l6a2FsbGVyJ3MgUENJIGZ1enplciBjYW4gZGVmaW5pdGVseSByZWFjaCBgaXhnYmV2ZmAuIFRoYXQgcG9pbnQgdGhyb3dzIG1lLCB0aG91Z2guIFRoZSBwcm9tcHQgbWVudGlvbnMgcmVxdWlyaW5nIHBoeXNpY2FsIGhhcmR3YXJlLCB3aGljaCBnb3QgbWUgdGhpbmtpbmcgYWJvdXQgY29tcGxleCBkZXZpY2VzLiBDb21wbGV4IGRldmljZXMgbGlrZSBHUFVzIG9yIFNtYXJ0TklDcyAoYW1kZ3B1LCBtbHhzdywgZXRjLikgbWF5IG9ubHkgZ2V0IHRoZSBwcm9iZSBmdW5jdGlvbiBoaXQgdmlhIHRoZSBQQ0kgZnV6emVyIGFuZCB0aGVuIHRoZXkncmUgc3R1Y2sgYmVjYXVzZSB0aGUgZnV6emVyIGNhbid0IGhhbmRsZSB0aGUgY29tcGxpY2F0ZWQgRE1BIHJpbmdzIG9yIGZpcm13YXJlIGxvYWRpbmcgcmVxdWlyZWQgdG8gZ2V0IHRoZSAqY29yZSogbG9naWMgd29ya2luZy4gSXQncyBsaWtlIHRoZSBmdXp6ZXIgaGl0cyB0aGUgZnJvbnQgZG9vciBidXQgY2FuJ3QgZ2V0IHBhc3QgdGhlIGZveWVyLlxuXG5CdXQgYGl4Z2JldmZgIGlzIGRpZmZlcmVudC4gSXQncyBhIFZpcnR1YWwgRnVuY3Rpb24gKFZGKSBkcml2ZXIsIHNvIGl0cyBwcm9iZSBmdW5jdGlvbiBjYW4gc3VjY2VlZCBiZWNhdXNlIGl0J3Mgc2ltcGxlci4gSXQncyBub3QgZ29pbmcgdG8gbmVlZCB0aGF0IGNvbXBsZXggZmlybXdhcmUgbG9hZGluZzsgdGhlIFBoeXNpY2FsIEZ1bmN0aW9uIChQRikgaGFuZGxlcyB0aGF0LlxuXG5IbW0sIHdhaXQuIERvZXMgYGl4Z2JldmZgIHN0aWxsIHJlcXVpcmUgc29tZSBtYWlsYm94IGNvbW11bmljYXRpb24gd2l0aCB0aGUgUEYgdG8gaW5pdGlhbGl6ZT8gVGhhdCdzIGEgZ29vZCBwb2ludCB0byBjaGVjayEgTGV0J3MgZXhhbWluZSB0aGUgYGl4Z2JldmZfc3dfaW5pdGAgZnVuY3Rpb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQwNDU1LCJPdXRwdXRUb2tlbnMiOjUxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6Mzg2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI0VDE0OjIyOjUwLjUzMzIyMjk5NFoiLCJTZXEiOjMyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNTQzODAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaXhnYmV2Zi9peGdiZXZmX21haW4uY1wiLFxuICBcIkZpcnN0TGluZVwiOiAzMTE3LFxuICBcIkxpbmVDb3VudFwiOiAyMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIzMTE3OlxcdFxcdGVyciA9IGh3LVxcdTAwM2VtYWMub3BzLnJlc2V0X2h3KGh3KTtcXG4zMTE4OlxcdFxcdGlmIChlcnIpIHtcXG4zMTE5OlxcdFxcdFxcdGRldl9pbmZvKFxcdTAwMjZwZGV2LVxcdTAwM2VkZXYsXFxuMzEyMDpcXHRcXHRcXHRcXHQgXFxcIlBGIHN0aWxsIGluIHJlc2V0IHN0YXRlLiAgSXMgdGhlIFBGIGludGVyZmFjZSB1cD9cXFxcblxcXCIpO1xcbjMxMjE6XFx0XFx0fSBlbHNlIHtcXG4zMTIyOlxcdFxcdFxcdGVyciA9IGh3LVxcdTAwM2VtYWMub3BzLmluaXRfaHcoaHcpO1xcbjMxMjM6XFx0XFx0XFx0aWYgKGVycikge1xcbjMxMjQ6XFx0XFx0XFx0XFx0cHJfZXJyKFxcXCJpbml0X3NoYXJlZF9jb2RlIGZhaWxlZDogJWRcXFxcblxcXCIsIGVycik7XFxuMzEyNTpcXHRcXHRcXHRcXHRnb3RvIG91dDtcXG4zMTI2OlxcdFxcdFxcdH1cXG4zMTI3OlxcdFxcdFxcdGl4Z2JldmZfbmVnb3RpYXRlX2FwaShhZGFwdGVyKTtcXG4zMTI4OlxcdFxcdFxcdGVyciA9IGh3LVxcdTAwM2VtYWMub3BzLmdldF9tYWNfYWRkcihodywgaHctXFx1MDAzZW1hYy5hZGRyKTtcXG4zMTI5OlxcdFxcdFxcdGlmIChlcnIpXFxuMzEzMDpcXHRcXHRcXHRcXHRkZXZfaW5mbyhcXHUwMDI2cGRldi1cXHUwMDNlZGV2LCBcXFwiRXJyb3IgcmVhZGluZyBNQUMgYWRkcmVzc1xcXFxuXFxcIik7XFxuMzEzMTpcXHRcXHRcXHRlbHNlIGlmIChpc196ZXJvX2V0aGVyX2FkZHIoYWRhcHRlci1cXHUwMDNlaHcubWFjLmFkZHIpKVxcbjMxMzI6XFx0XFx0XFx0XFx0ZGV2X2luZm8oXFx1MDAyNnBkZXYtXFx1MDAzZWRldixcXG4zMTMzOlxcdFxcdFxcdFxcdFxcdCBcXFwiTUFDIGFkZHJlc3Mgbm90IGFzc2lnbmVkIGJ5IGFkbWluaXN0cmF0b3IuXFxcXG5cXFwiKTtcXG4zMTM0OlxcdFxcdFxcdGV0aF9od19hZGRyX3NldChuZXRkZXYsIGh3LVxcdTAwM2VtYWMuYWRkcik7XFxuMzEzNTpcXHRcXHR9XFxuMzEzNjpcXHRcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjRUMTQ6MjI6NTAuNTMzNDc5OTI0WiIsIlNlcSI6MzMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjE0OTk3MTA2MTgxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKlJlYWNoaW5nIEZ1enphYmxlIENvZGUgaW4gdGhlIGl4Z2JldmYgRHJpdmVyKipcblxuT2theSwgc28gaWYgYHJlc2V0X2h3YCBmYWlscywgdGhlIGRyaXZlciBqdXN0IGtlZXBzIGdvaW5nPyBUaGF0J3MuLi5pbnRlcmVzdGluZy4gRG9lcyBpdCByZWdpc3RlciB0aGUgbmV0d29yayBkZXZpY2UgKGBuZXRkZXZgKSBhbnl3YXk/IExvb2tzIGxpa2UgaXQgZG9lcy4gTGV0J3MgdHJhY2UgdGhpcyBmYWlsdXJlIHNjZW5hcmlvLiBJZiBgcmVzZXRfaHdgIHJldHVybnMgYW4gZXJyb3IgKGBlcnJgIG5vbi16ZXJvKSwgaXQgc2tpcHMgaW5pdGlhbGl6YXRpb24gc3RlcHMgbGlrZSBgaW5pdF9od2AsIGBuZWdvdGlhdGVfYXBpYCwgYW5kIGBnZXRfbWFjX2FkZHJgLiBUaGVuLCBpdCBsYW5kcyBoZXJlOlxuXG5gYGBjXG5cdGlmICghaXNfdmFsaWRfZXRoZXJfYWRkcihuZXRkZXYtXHUwMDNlZGV2X2FkZHIpKSB7XG5cdFx0ZGV2X2luZm8oXHUwMDI2cGRldi1cdTAwM2VkZXYsIFwiQXNzaWduaW5nIHJhbmRvbSBNQUMgYWRkcmVzc1xcblwiKTtcblx0XHRldGhfaHdfYWRkcl9yYW5kb20obmV0ZGV2KTtcblx0XHRldGhlcl9hZGRyX2NvcHkoaHctXHUwMDNlbWFjLmFkZHIsIG5ldGRldi1cdTAwM2VkZXZfYWRkcik7XG5cdFx0ZXRoZXJfYWRkcl9jb3B5KGh3LVx1MDAzZW1hYy5wZXJtX2FkZHIsIG5ldGRldi1cdTAwM2VkZXZfYWRkcik7XG5cdH1cbmBgYFxuXG5BbmQgcmV0dXJucyAwISBTbyBiYXNpY2FsbHksIGBpeGdiZXZmX3N3X2luaXRgICpzdWNjZWVkcyogZXZlbiBpZiB0aGUgbWFpbGJveCBjb21tdW5pY2F0aW9uIHdpdGggdGhlIHBoeXNpY2FsIGZ1bmN0aW9uIChQRikgZmFpbHMuIFRoaXMgbWVhbnMgdGhlIGRyaXZlciB3aWxsIHByb2JlIGFuZCByZWdpc3RlciB0aGUgbmV0d29yayBkZXZpY2UsIGV2ZW4gd2l0aCBhIGNvbXBsZXRlbHkgZHVtYiBmYWtlIFBDSSBkZXZpY2UgdGhhdCBqdXN0IHJldHVybnMgMHhGRkZGRkZGRiBmb3IgYWxsIE1NSU8gcmVhZHMuIEJyaWxsaWFudCFcblxuT25jZSB0aGUgbmV0ZGV2IGlzIHJlZ2lzdGVyZWQsIHVzZXJzcGFjZSB0b29scyBsaWtlIGBldGh0b29sYCBjYW4gYmUgdXNlZCwgd2hpY2ggY2FsbHMgYGl4Z2JldmZfZ2V0X2xpbmtfa3NldHRpbmdzYC4gQW5kICp0aGF0J3MqIHdoZXJlIHRoZSBuZXcgY29kZSBleGVjdXRlczpcblxuYGBgY1xuXHRpZiAoaHctXHUwMDNlbWFjLnR5cGUgPT0gaXhnYmVfbWFjX2U2MTBfdmYpIHtcblx0XHRzcGluX2xvY2tfYmgoXHUwMDI2YWRhcHRlci1cdTAwM2VtYnhfbG9jayk7XG5cdFx0aHctXHUwMDNlbWFjLmdldF9saW5rX3N0YXR1cyA9IHRydWU7XG5cdFx0aHctXHUwMDNlbWFjLm9wcy5jaGVja19saW5rKGh3LCBcdTAwMjZhZGFwdGVyLVx1MDAzZWxpbmtfc3BlZWQsXG5cdFx0XHRcdCAgICAgICBcdTAwMjZhZGFwdGVyLVx1MDAzZWxpbmtfdXAsIGZhbHNlKTtcblx0XHRzcGluX3VubG9ja19iaChcdTAwMjZhZGFwdGVyLVx1MDAzZW1ieF9sb2NrKTtcblx0fVxuYGBgXG5cbkFuZCBgaHctXHUwMDNlbWFjLm9wcy5jaGVja19saW5rYCBpcyBhY3R1YWxseSBgaXhnYmV2Zl9odl9jaGVja19tYWNfbGlua192ZmAgZm9yIEh5cGVyLVYuIFRoaXMgZnVuY3Rpb24gY2FsbHMgYGl4Z2JldmZfaHZfcmVhZF9saW5rc19lNjEwYCwgd2hpY2ggbWFrZXMgYSBgcGNpX3JlYWRfY29uZmlnX2J5dGVgIGNhbGwuIEFuZCBoZXJlJ3MgdGhlIGtpY2tlcjogU3l6a2FsbGVyJ3MgUENJIGZ1enplciAqaW50ZXJjZXB0cyogYHBjaV9yZWFkX2NvbmZpZ19ieXRlYCBhbmQgcmV0dXJucyBmdXp6ZWQgZGF0YSEgVGhpcyBpcyBnb2xkIVxuXG5TbywgdGhpcyBjb2RlIHBhdGggaXMgMTAwJSByZWFjaGFibGUgYW5kIGZ1enphYmxlIGJ5IHN5emthbGxlci4gQW1hemluZyFcblxuT2theSwgbGV0J3MgaWRlbnRpZnkgdGhlIGZvY3VzIHN5bWJvbHMuIFRoZSBtb2RpZmllZCBmdW5jdGlvbnMgYXJlOlxuLSBgaXhnYmV2Zl9nZXRfbGlua19rc2V0dGluZ3NgXG4tIGBpeGdiZXZmX2h2X2NoZWNrX21hY19saW5rX3ZmYFxuLSBgaXhnYmV2Zl9odl9yZWFkX2xpbmtzX2U2MTBgIChzdGF0aWMsIHNvIG1heWJlIG5vdCB0aGUgYmVzdCwgYnV0IGBpeGdiZXZmX2h2X2NoZWNrX21hY19saW5rX3ZmYCBpcyBhIGdvb2Qgb25lKS5cblxuV2FpdCwgYm90aCBhcmUgc3RhdGljPyBMZXQncyBjaGVjayBpZiBgaXhnYmV2Zl9odl9jaGVja19tYWNfbGlua192ZmAgaXMgc3RhdGljLlxuXG5cbiIsIklucHV0VG9rZW5zIjo0MTY0MSwiT3V0cHV0VG9rZW5zIjo0NywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjY5NSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI0VDE0OjIzOjA1LjUzMDU4ODg3NVoiLCJTZXEiOjM0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTExMzE5MjUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiaXhnYmV2Zl9odl9jaGVja19tYWNfbGlua192ZlwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9peGdiZXZmXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2l4Z2JldmYvdmYuYz05MTg9c3RhdGljIHMzMiBpeGdiZXZmX2h2X3JlYWRfbGlua3NfZTYxMChzdHJ1Y3QgaXhnYmVfaHcgKmh3LCB1MzIgKmxpbmtzX3JlZylcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2l4Z2JldmYvdmYuYy05NDEtLyoqXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaXhnYmV2Zi92Zi5jOjk0MjogKiBpeGdiZXZmX2h2X2NoZWNrX21hY19saW5rX3ZmIC0gY2hlY2sgbGlua1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2l4Z2JldmYvdmYuYy05NDMtICogQGh3OiBwb2ludGVyIHRvIHByaXZhdGUgaGFyZHdhcmUgc3RydWN0XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9peGdiZXZmL3ZmLmMtOTUwLSAqL1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2l4Z2JldmYvdmYuYzo5NTE6c3RhdGljIHMzMiBpeGdiZXZmX2h2X2NoZWNrX21hY19saW5rX3ZmKHN0cnVjdCBpeGdiZV9odyAqaHcsXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaXhnYmV2Zi92Zi5jLTk1Mi1cXHRcXHRcXHRcXHRcXHRpeGdiZV9saW5rX3NwZWVkICpzcGVlZCxcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2l4Z2JldmYvdmYuYz0xMTk0PXN0YXRpYyBjb25zdCBzdHJ1Y3QgaXhnYmVfbWFjX29wZXJhdGlvbnMgaXhnYmV2Zl9odl9tYWNfb3BzID0ge1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaXhnYmV2Zi92Zi5jLTEyMDAtXFx0LnNldHVwX2xpbmtcXHRcXHQ9IGl4Z2JldmZfc2V0dXBfbWFjX2xpbmtfdmYsXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaXhnYmV2Zi92Zi5jOjEyMDE6XFx0LmNoZWNrX2xpbmtcXHRcXHQ9IGl4Z2JldmZfaHZfY2hlY2tfbWFjX2xpbmtfdmYsXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaXhnYmV2Zi92Zi5jLTEyMDItXFx0Lm5lZ290aWF0ZV9hcGlfdmVyc2lvblxcdD0gaXhnYmV2Zl9odl9uZWdvdGlhdGVfYXBpX3ZlcnNpb25fdmYsXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI0VDE0OjIzOjA1LjU4MTcyNjU5WiIsIlNlcSI6MzUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjEyODc5NTU1Mzk0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgU3RhdGljIEZ1bmN0aW9uIFVzZSoqXG5cbk9rYXksIHNvIEkgc2VlIGEgc3RhdGljIGZ1bmN0aW9uIGhlcmUuIFRoZSBpbml0aWFsIGltcHJlc3Npb24gbWlnaHQgYmUgdGhhdCBpdCdzIHByb2JsZW1hdGljLCBhcyB0aGUgcHJvbXB0IGRpc2NvdXJhZ2VzIHRoZSB1c2Ugb2Ygc3RhdGljIGhlbHBlciBmdW5jdGlvbnMgYmVjYXVzZSB0aGV5J3JlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkb24ndCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMuIEJ1dCwgd2FpdC4uLiBJIGhhdmUgdG8gbG9vayBkZWVwZXIuIFRoZSBrZXkgaGVyZSBpcyB0aGUgKmZ1bmN0aW9uIHBvaW50ZXIqIGFzc2lnbm1lbnQuIGBjaGVja19saW5rYCwgc3BlY2lmaWNhbGx5IGBpeGdiZXZmX2h2X2NoZWNrX21hY19saW5rX3ZmYCwgaXMgYXNzaWduZWQgdG8gYSBmdW5jdGlvbiBwb2ludGVyIHdpdGhpbiBgaXhnYmV2Zl9odl9tYWNfb3BzYC4gU2luY2Ugd2UgYXJlIHRha2luZyB0aGUgZnVuY3Rpb24ncyBhZGRyZXNzLCBpdCAqY2Fubm90KiBiZSBmdWxseSBpbmxpbmVkLiBDb25zZXF1ZW50bHksIHRoaXMgZnVuY3Rpb24gd2lsbCBkZWZpbml0ZWx5IGhhdmUgYSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzcyBhbmQgaXMgcGVyZmVjdGx5IGZpbmUgYXMgYSBmb2N1cyBzeW1ib2wsIGV2ZW4gaWYgaXQncyB0ZWNobmljYWxseSBzdGF0aWMuXG5cbkkgc2VlIHRoZSBzYW1lIHNpdHVhdGlvbiB3aXRoIGBpeGdiZXZmX2dldF9saW5rX2tzZXR0aW5nc2AuIEl0J3MgYWxzbyBkZWNsYXJlZCBzdGF0aWMsIGhvd2V2ZXIsIEkgc2VlIHRoYXQgaXQncyBiZWluZyBhc3NpZ25lZCB0byBgZXRodG9vbF9vcHMuZ2V0X2xpbmtfa3NldHRpbmdzYC4gQmVjYXVzZSBpdHMgYWRkcmVzcyBpcyBhbHNvIHRha2VuLCB0aGlzIHRvbyB3aWxsIHJlc3VsdCBpbiBhIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzLlxuXG5Ob3csIGxldCdzIHR1cm4gb3VyIGF0dGVudGlvbiB0byBgaXhnYmV2Zl9nZXRfbGlua19rc2V0dGluZ3NgLlxuXG5cbiIsIklucHV0VG9rZW5zIjo0MzU2NiwiT3V0cHV0VG9rZW5zIjo0NCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE5OCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yNFQxNDoyMzoxOC40NjEyODQwMjRaIiwiU2VxIjozNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEwNjg5Mjg2MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJpeGdiZXZmX2dldF9saW5rX2tzZXR0aW5nc1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9peGdiZXZmXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2l4Z2JldmYvZXRodG9vbC5jPTc1PXN0YXRpYyBjb25zdCBjaGFyIGl4Z2JldmZfcHJpdl9mbGFnc19zdHJpbmdzW11bRVRIX0dTVFJJTkdfTEVOXSA9IHtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2l4Z2JldmYvZXRodG9vbC5jLTgxLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2l4Z2JldmYvZXRodG9vbC5jOjgyOnN0YXRpYyBpbnQgaXhnYmV2Zl9nZXRfbGlua19rc2V0dGluZ3Moc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldixcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9peGdiZXZmL2V0aHRvb2wuYy04My1cXHRcXHRcXHRcXHQgICAgICBzdHJ1Y3QgZXRodG9vbF9saW5rX2tzZXR0aW5ncyAqY21kKVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaXhnYmV2Zi9ldGh0b29sLmM9OTc3PXN0YXRpYyBjb25zdCBzdHJ1Y3QgZXRodG9vbF9vcHMgaXhnYmV2Zl9ldGh0b29sX29wcyA9IHtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2l4Z2JldmYvZXRodG9vbC5jLTk5Ny1cXHQuZ2V0X3J4ZmhcXHRcXHQ9IGl4Z2JldmZfZ2V0X3J4ZmgsXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaXhnYmV2Zi9ldGh0b29sLmM6OTk4OlxcdC5nZXRfbGlua19rc2V0dGluZ3NcXHQ9IGl4Z2JldmZfZ2V0X2xpbmtfa3NldHRpbmdzLFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2l4Z2JldmYvZXRodG9vbC5jLTk5OS1cXHQuZ2V0X3ByaXZfZmxhZ3NcXHRcXHQ9IGl4Z2JldmZfZ2V0X3ByaXZfZmxhZ3MsXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI0VDE0OjIzOjE4LjU2ODE4NDA0NFoiLCJTZXEiOjM3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo2NTk2NTk5NDY4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgSXhnYmV2ZiBEcml2ZXIgU3ltYm9scyoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoZXNlIGZ1bmN0aW9uIHBvaW50ZXJzLCBgaXhnYmV2Zl9nZXRfbGlua19rc2V0dGluZ3NgIGFuZCBgaXhnYmV2Zl9odl9jaGVja19tYWNfbGlua192ZmAuIFRoZXkncmUgc3RhdGljLCBidXQgdGhleSdyZSBhc3NpZ25lZCB0byBmdW5jdGlvbiBwb2ludGVycywgd2hpY2ggaXMgaW1wb3J0YW50LiBUaGlzIG1lYW5zIHRoZXNlIGFyZSB0aGUga2V5IHN5bWJvbHMgdG8gZm9jdXMgb24gZm9yIHRoaXMgZHJpdmVyLiBUaGV5J3JlIGxpa2VseSB0aGUgZW50cnkgcG9pbnRzIGZvciBzcGVjaWZpYyBsaW5rIGNvbmZpZ3VyYXRpb24gYW5kIE1BQy1yZWxhdGVkIFZGIGNoZWNrcy5cblxuTm93LCBJIG5lZWQgdG8gY29uc2lkZXIgYW55IHJlcXVpcmVkIGNvbmZpZ3VyYXRpb25zLiBMZXQncyBzZWUuLi4gYElYR0JFVkZgIGFuZCBgUENJX01NQ09ORklHYCBpbW1lZGlhdGVseSBjb21lIHRvIG1pbmQuIEknbGwgbmVlZCB0byBkb3VibGUtY2hlY2sgYElYR0JFVkZgIHNwZWNpZmljYWxseSB0byBzZWUgaWYgaXQgcmVsaWVzIG9uIGFueSBvdGhlciBjb25maWd1cmF0aW9ucyBvciBkZXBlbmRlbmNpZXMgdGhhdCBtaWdodCBiZSByZWxldmFudC4gVGhpcyBpcyBpbXBvcnRhbnQgdG8gZW5zdXJlIGV2ZXJ5dGhpbmcgaXMgc2V0IHVwIGNvcnJlY3RseSBmb3IgdGhlc2UgZnVuY3Rpb24gcG9pbnRlcnMgdG8gd29yay5cblxuXG4iLCJJbnB1dFRva2VucyI6NDQ0MjMsIk91dHB1dFRva2VucyI6MzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo5MSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yNFQxNDoyMzoyNS4xNjQ3ODYwNzJaIiwiU2VxIjozOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjg5MTcyMDI4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBJWEdCRVZGXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvS2NvbmZpZz0xOTQ9Y29uZmlnIElYR0JFX0lQU0VDXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9LY29uZmlnLTIwMi1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9LY29uZmlnOjIwMzpjb25maWcgSVhHQkVWRlxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL0tjb25maWctMjA0LVxcdHRyaXN0YXRlIFxcXCJJbnRlbChSKSAxMEdiRSBQQ0kgRXhwcmVzcyBWaXJ0dWFsIEZ1bmN0aW9uIEV0aGVybmV0IHN1cHBvcnRcXFwiXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9LY29uZmlnLTIxOS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9LY29uZmlnOjIyMDpjb25maWcgSVhHQkVWRl9JUFNFQ1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL0tjb25maWctMjIxLVxcdGJvb2wgXFxcIklQU2VjIFhGUk0gY3J5cHRvZ3JhcGh5LW9mZmxvYWQgYWNjZWxlcmF0aW9uXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNFQxNDoyMzoyNS4yNTM5NjU5NFoiLCJTZXEiOjM5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0Mzk2NDU3NjIyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aGUgdGhvdWdodCBwcm9jZXNzLCBwcmVzZW50ZWQgYXMgYSBwZXJzb25hbCBzdW1tYXJ5OlxuXG4qKkRpZ2dpbmcgaW50byB0aGUgSW50ZWwgRXRoZXJuZXQgQ29uZmlndXJhdGlvbioqXG5cbk9rYXksIHRpbWUgdG8gZ2V0IG15IGhhbmRzIGRpcnR5IHdpdGggdGhlIEludGVsIEV0aGVybmV0IGRyaXZlcnMuIEknbSB0aGlua2luZyBJIG5lZWQgdG8gdW5kZXJzdGFuZCBzb21lIGNvbmZpZ3VyYXRpb24gb3B0aW9ucywgYW5kIEkgcmVtZW1iZXIgdGhpcyBgS2NvbmZpZ2AgZmlsZSBpbiB0aGUgYGRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsYCBkaXJlY3RvcnkgaXMgdXN1YWxseSB0aGUgcGxhY2UgdG8gc3RhcnQuIEknbSBzcGVjaWZpY2FsbHkgbG9va2luZyBhcm91bmQgbGluZSAyMDMsIHNvIEknbGwganVtcCB0aGVyZSBhbmQgc2VlIHdoYXQncyBiZWluZyBkZWZpbmVkIG9yIHJlZmVyZW5jZWQgYXJvdW5kIHRoYXQgcG9pbnQuIFRoaXMgd2lsbCBnaXZlIG1lIHNvbWUgY29udGV4dCBhYm91dCB3aGF0IHNldHRpbmdzIGFyZSBhdmFpbGFibGUgYW5kIGhvdyB0aGV5J3JlIHN0cnVjdHVyZWQuIExldCdzIHNlZSB3aGF0IGdlbXMgSSBjYW4gdW5jb3ZlciFcblxuXG4iLCJJbnB1dFRva2VucyI6NDQ5MjYsIk91dHB1dFRva2VucyI6MzksIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yNFQxNDoyMzoyOS42NTA0MjY2MjJaIiwiU2VxIjo0MCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTEwMDcwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogMjAwLFxuICBcIkxpbmVDb3VudFwiOiAyMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgMjAwOlxcdFxcdGhlbHBcXG4gMjAxOlxcdFxcdCAgRW5hYmxlIHN1cHBvcnQgZm9yIElQU2VjIG9mZmxvYWQgaW4gaXhnYmUua29cXG4gMjAyOlxcdFxcbiAyMDM6XFx0Y29uZmlnIElYR0JFVkZcXG4gMjA0OlxcdFxcdHRyaXN0YXRlIFxcXCJJbnRlbChSKSAxMEdiRSBQQ0kgRXhwcmVzcyBWaXJ0dWFsIEZ1bmN0aW9uIEV0aGVybmV0IHN1cHBvcnRcXFwiXFxuIDIwNTpcXHRcXHRkZXBlbmRzIG9uIFBDSV9NU0lcXG4gMjA2OlxcdFxcdGhlbHBcXG4gMjA3OlxcdFxcdCAgVGhpcyBkcml2ZXIgc3VwcG9ydHMgSW50ZWwoUikgUENJIEV4cHJlc3MgdmlydHVhbCBmdW5jdGlvbnMgZm9yIHRoZVxcbiAyMDg6XFx0XFx0ICBJbnRlbChSKSBpeGdiZSBkcml2ZXIuICBGb3IgbW9yZSBpbmZvcm1hdGlvbiBvbiBob3cgdG8gaWRlbnRpZnkgeW91clxcbiAyMDk6XFx0XFx0ICBhZGFwdGVyLCBnbyB0byB0aGUgQWRhcHRlciBcXHUwMDI2IERyaXZlciBJRCBHdWlkZSB0aGF0IGNhbiBiZSBsb2NhdGVkIGF0OlxcbiAyMTA6XFx0XFxuIDIxMTpcXHRcXHQgIFxcdTAwM2NodHRwOi8vc3VwcG9ydC5pbnRlbC5jb21cXHUwMDNlXFxuIDIxMjpcXHRcXG4gMjEzOlxcdFxcdCAgTW9yZSBzcGVjaWZpYyBpbmZvcm1hdGlvbiBvbiBjb25maWd1cmluZyB0aGUgZHJpdmVyIGlzIGluXFxuIDIxNDpcXHRcXHQgIFxcdTAwM2NmaWxlOkRvY3VtZW50YXRpb24vbmV0d29ya2luZy9kZXZpY2VfZHJpdmVycy9ldGhlcm5ldC9pbnRlbC9peGdiZXZmLnJzdFxcdTAwM2UuXFxuIDIxNTpcXHRcXG4gMjE2OlxcdFxcdCAgVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZS4gVGhlIG1vZHVsZVxcbiAyMTc6XFx0XFx0ICB3aWxsIGJlIGNhbGxlZCBpeGdiZXZmLiAgTVNJLVggaW50ZXJydXB0IHN1cHBvcnQgaXMgcmVxdWlyZWRcXG4gMjE4OlxcdFxcdCAgZm9yIHRoaXMgZHJpdmVyIHRvIHdvcmsgY29ycmVjdGx5LlxcbiAyMTk6XFx0XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI0VDE0OjIzOjI5LjY1MDUzODQ1MloiLCJTZXEiOjQxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo2Mzk3NzYwMjc3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IENvbmZpZ3VyYXRpb24gTXVzaW5ncyoqXG5cbk9rYXksIHNvIHdlJ3JlIGRpdmluZyBpbnRvIHRoaXMgY29uZmlndXJhdGlvbiwgYW5kIGl0IHJlYWxseSBoaW5nZXMgb24gYFBDSV9NU0lgLiBUaGF0J3MgdGhlIGNvcmUuIFNvLCBsb29raW5nIGF0IHRoZSBjcnVjaWFsIHBpZWNlcywgSSBuZWVkIHRvIG1ha2Ugc3VyZSBgSVhHQkVWRmAgaXMgc2V0LCBvYnZpb3VzbHkuIFRoZW4sIHdlIGFic29sdXRlbHkgbmVlZCBgUENJX01NQ09ORklHYC4gQW5kIHdoaWxlIGBQQ0lfTVNJYCBpcyB1c3VhbGx5IGVuYWJsZWQgYXMgYSBkZWZhdWx0IHNldHRpbmcsIEkgYWx3YXlzIHRoaW5rIGl0J3MgcHJ1ZGVudCB0byBpbmNsdWRlIGl0IGV4cGxpY2l0bHkgZm9yIGNsYXJpdHkgYW5kIHRvIGVuc3VyZSB3ZSBkb24ndCBtaXNzIGFueXRoaW5nLiBCZXR0ZXIgc2FmZSB0aGFuIHNvcnJ5IHdoZW4gY29uZmlndXJpbmcgdGhlc2Ugc3lzdGVtcy5cblxuTm93LCBiZWZvcmUgSSBwcm9jZWVkIGZ1cnRoZXIsIEkgd2FudCB0byBkb3VibGUtY2hlY2sgdGhhdCBgUENJX01NQ09ORklHYCBkb2Vzbid0IGhhdmUgYW55IGhpZGRlbiBkZXBlbmRlbmNpZXMgbHVya2luZyBpbiB0aGUgc2hhZG93cyB0aGF0IEkgbWlnaHQgaGF2ZSBvdmVybG9va2VkLiBHb3R0YSBtYWtlIHN1cmUgZXZlcnl0aGluZyBpcyBpbiBwbGFjZSB0byBtaW5pbWl6ZSBlcnJvcnMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQ1NDY2LCJPdXRwdXRUb2tlbnMiOjM3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NjcsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yNFQxNDoyMzozNi4wNDgzMDMwNzlaIiwiU2VxIjo0MiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjA4MjIwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImFyY2gveDg2L0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogMjg3MCxcbiAgXCJMaW5lQ291bnRcIjogMTBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMjg3MDpcXHRjb25maWcgUENJX0RJUkVDVFxcbjI4NzE6XFx0XFx0ZGVmX2Jvb2wgeVxcbjI4NzI6XFx0XFx0ZGVwZW5kcyBvbiBQQ0kgXFx1MDAyNlxcdTAwMjYgKFg4Nl82NCB8fCAoUENJX0dPRElSRUNUIHx8IFBDSV9HT0FOWSB8fCBQQ0lfR09PTFBDIHx8IFBDSV9HT01NQ09ORklHKSlcXG4yODczOlxcdFxcbjI4NzQ6XFx0Y29uZmlnIFBDSV9NTUNPTkZJR1xcbjI4NzU6XFx0XFx0Ym9vbCBcXFwiU3VwcG9ydCBtbWNvbmZpZyBQQ0kgY29uZmlnIHNwYWNlIGFjY2Vzc1xcXCIgaWYgWDg2XzY0XFxuMjg3NjpcXHRcXHRkZWZhdWx0IHlcXG4yODc3OlxcdFxcdGRlcGVuZHMgb24gUENJIFxcdTAwMjZcXHUwMDI2IChBQ1BJIHx8IEpBSUxIT1VTRV9HVUVTVClcXG4yODc4OlxcdFxcdGRlcGVuZHMgb24gWDg2XzY0IHx8IChQQ0lfR09BTlkgfHwgUENJX0dPTU1DT05GSUcpXFxuMjg3OTpcXHRcXHRoZWxwXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI0VDE0OjIzOjM2LjA0ODUxMzUyOVoiLCJTZXEiOjQzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxMTQzOTk3NDI5MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBbmFseXNpcyBvZiB0aGUgYGl4Z2JldmZgIERyaXZlcidzIExpbmsgU3BlZWQgRmVhdHVyZSBhbmQgQ29uZmlndXJhdGlvbiBEZXBlbmRlbmNpZXMqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIE15IGluaXRpYWwgdGhvdWdodCB3YXMgYWJvdXQgdGhlIGRlcGVuZGVuY3kgY2hhaW4uIFRoZSBwYXRjaCBhZGRzIGZ1bmN0aW9uYWxpdHkgdG8gdGhlIGBpeGdiZXZmYCBkcml2ZXIg4oCTIHNwZWNpZmljYWxseSwgcmV0cmlldmluZyBsaW5rIHNwZWVkIGluZm9ybWF0aW9uIGZyb20gdGhlIGVtdWxhdGVkIFBDSSBjb25maWd1cmF0aW9uIHNwYWNlIGZvciBIeXBlci1WIEU2MTAgVmlydHVhbCBGdW5jdGlvbnMuIFRoaXMgaXMgYWNjZXNzZWQgdmlhIHRoZSBgaXhnYmV2Zl9nZXRfbGlua19rc2V0dGluZ3NgIGV0aHRvb2wgY2FsbGJhY2sgYW5kIHRoZSBkcml2ZXIncyBwZXJpb2RpYyBsaW5rIGNoZWNrIHRhc2sgKGBpeGdiZXZmX2h2X2NoZWNrX21hY19saW5rX3ZmYCkuXG5cbk15IGNvbmNlcm4sIGluaXRpYWxseSwgd2FzIHdoZXRoZXIgYFBDSV9NTUNPTkZJR2Agd2FzICpzdHJpY3RseSogcmVxdWlyZWQgZm9yIGNvbXBpbGF0aW9uLiBUaGUgY29kZSBzbmlwcGV0IHdpdGggYGRldl9lcnJfb25jZWAgc2VlbXMgdG8gc3VnZ2VzdCB0aGF0IHRoZSBkcml2ZXIgd2lsbCBjb21waWxlIHdpdGhvdXQgaXQsIGJ1dCBhdHRlbXB0aW5nIHRvICpleGVjdXRlKiB0aGUgbmV3IGxvZ2ljLCB0aGUgYHBjaV9yZWFkX2NvbmZpZ19ieXRlYCBsb29wIHNwZWNpZmljYWxseSwgd2lsbCBmYWlsIGFuZCByZXR1cm4gLUVPUE5PVFNVUFAgaWYgYFBDSV9NTUNPTkZJR2AgaXMgZGlzYWJsZWQuIFNvLCBpdCdzIG5vdCBhIGNvbXBpbGF0aW9uIGJsb2NrZXIsIGJ1dCBhYnNvbHV0ZWx5IGVzc2VudGlhbCBmb3IgdGVzdGluZyB0aGlzIG5ldyBmZWF0dXJlLlxuXG5Ib3cgZG9lcyBhIGZ1enppbmcgdGVzdCByZWFjaCB0aGlzIGNvZGU/IEFoLCBTeXprYWxsZXIuIEl0IGxldmVyYWdlcyBhIFBDSSBkZXZpY2UgZnV6emVyIHRvIGVtdWxhdGUgdGhlIHNwZWNpZmljIFZGIGRldmljZSBJRC4gQnkgc2ltdWxhdGluZyB0aGlzIHNwZWNpZmljIGRldmljZSBJRCBhbmQgdGhlbiBpbnRlcmFjdGluZyB3aXRoIHRoZSByZWdpc3RlcmVkIG5ldHdvcmsgZGV2aWNlIHRocm91Z2ggZXRodG9vbCBvciB3YWl0aW5nIGZvciB0aGUgYmFja2dyb3VuZCB0YXNrLCB0aGUgbmV3IFBDSSBjb25maWcgc3BhY2UgcmVhZCBmdW5jdGlvbmFsaXR5IGNhbiBiZSBleGVyY2lzZWQuXG5cblRoZXJlZm9yZSwgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldyBsaW5rIHNwZWVkIHJlYWRpbmcsIEkgbmVlZCB0byBlbnN1cmUgdGhlIGZvbGxvd2luZyBjb25maWd1cmF0aW9ucyBhcmUgZW5hYmxlZDogYElYR0JFVkZgLCB3aGljaCBpcyB0aGUgZHJpdmVyIGl0c2VsZiwgYFBDSV9NTUNPTkZJR2AgZm9yIHRoZSBQQ0kgY29uZmlndXJhdGlvbiBzcGFjZSBhY2Nlc3MsIGFuZCBgUENJX01TSWAgaXMgYXV0b21hdGljYWxseSBuZWVkZWQgYXMgYSBkZXBlbmRlbmN5IG9mIGBJWEdCRVZGYC5cblxuSSBhbHNvIGtub3cgdGhhdCBgSVhHQkVWRmAgYWxzbyBkZXBlbmRzIG9uIGBQQ0lgLCBgTkVUREVWSUNFU2AsIGBFVEhFUk5FVGAsIGFuZCBgTkVUX1ZFTkRPUl9JTlRFTGAuIFRoZXNlIGRlcGVuZGVuY2llcyBhcmUgcHJldHR5IHN0YW5kYXJkLCBhbmQgYE5FVF9WRU5ET1JfSU5URUxgIGlzIHVzdWFsbHkgbmVlZGVkIHRvIGV2ZW4gc2VlIHRoZSBgSVhHQkVWRmAgZHJpdmVyIGluIHRoZSBjb25maWd1cmF0aW9uIG1lbnUuIFRoYXQncyBhIHNhbml0eSBjaGVjazsgSSdsbCBtYWtlIHN1cmUgdGhvc2UgYXJlIGFsbCBlbmFibGVkIGFzIHdlbGwuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQ1OTI4LCJPdXRwdXRUb2tlbnMiOjM3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDY1LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjRUMTQ6MjM6NDcuNDg4NDkwOTIxWiIsIlNlcSI6NDQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjExMjEyMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEsXG4gIFwiTGluZUNvdW50XCI6IDIwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgIDE6XFx0IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XFxuICAgMjpcXHQjXFxuICAgMzpcXHQjIEludGVsIG5ldHdvcmsgZGV2aWNlIGNvbmZpZ3VyYXRpb25cXG4gICA0OlxcdCNcXG4gICA1OlxcdFxcbiAgIDY6XFx0Y29uZmlnIE5FVF9WRU5ET1JfSU5URUxcXG4gICA3OlxcdFxcdGJvb2wgXFxcIkludGVsIGRldmljZXNcXFwiXFxuICAgODpcXHRcXHRkZWZhdWx0IHlcXG4gICA5OlxcdFxcdGhlbHBcXG4gIDEwOlxcdFxcdCAgSWYgeW91IGhhdmUgYSBuZXR3b3JrIChFdGhlcm5ldCkgY2FyZCBiZWxvbmdpbmcgdG8gdGhpcyBjbGFzcywgc2F5IFkuXFxuICAxMTpcXHRcXG4gIDEyOlxcdFxcdCAgTm90ZSB0aGF0IHRoZSBhbnN3ZXIgdG8gdGhpcyBxdWVzdGlvbiBkb2Vzbid0IGRpcmVjdGx5IGFmZmVjdCB0aGVcXG4gIDEzOlxcdFxcdCAga2VybmVsOiBzYXlpbmcgTiB3aWxsIGp1c3QgY2F1c2UgdGhlIGNvbmZpZ3VyYXRvciB0byBza2lwIGFsbFxcbiAgMTQ6XFx0XFx0ICB0aGUgcXVlc3Rpb25zIGFib3V0IEludGVsIGNhcmRzLiBJZiB5b3Ugc2F5IFksIHlvdSB3aWxsIGJlIGFza2VkIGZvclxcbiAgMTU6XFx0XFx0ICB5b3VyIHNwZWNpZmljIGNhcmQgaW4gdGhlIGZvbGxvd2luZyBxdWVzdGlvbnMuXFxuICAxNjpcXHRcXG4gIDE3OlxcdGlmIE5FVF9WRU5ET1JfSU5URUxcXG4gIDE4OlxcdFxcbiAgMTk6XFx0c291cmNlIFxcXCJkcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9saWJldGgvS2NvbmZpZ1xcXCJcXG4gIDIwOlxcdHNvdXJjZSBcXFwiZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvbGliaWUvS2NvbmZpZ1xcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjRUMTQ6MjM6NDcuNDg4NjA1MTgxWiIsIlNlcSI6NDUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjE2ODI5NTE3MjkxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFzc2Vzc21lbnQgb2YgdGhlIEZ1enppbmcgV29ydGhpbmVzcyoqXG5cbk9rYXksIHNvIEkndmUgZ29uZSB0aHJvdWdoIHRoaXMgY2FyZWZ1bGx5LiBZZXMsIGFic29sdXRlbHksIGBORVRfVkVORE9SX0lOVEVMYCBpcyBhIG11c3QtaGF2ZSBmb3IgdGhpcy4gV2UnbGwgbmVlZCB0aGUgZm9sbG93aW5nIGBFbmFibGVDb25maWdzYDogYE5FVF9WRU5ET1JfSU5URUxgLCBgSVhHQkVWRmAsIGBQQ0lfTU1DT05GSUdgLCBhbmQgYFBDSV9NU0lgLlxuXG5JIGhhZCB0byBkb3VibGUtY2hlY2sgdGhhdCBgaXhnYmV2Zl9odl9yZWFkX2xpbmtzX2U2MTBgIGlzbid0IGEgcHJvYmxlbS4gSXQncyBhIHN0YXRpYyBmdW5jdGlvbiwgYnV0IGl0J3MgY2FsbGVkIGRpcmVjdGx5IGJ5IGBpeGdiZXZmX2h2X2NoZWNrX21hY19saW5rX3ZmYC4gR2l2ZW4gdGhhdCBpdCdzIGNhbGxlZCBvbmx5IG9uY2UsIHRoZSBjb21waWxlciBpcyB2ZXJ5IGxpa2VseSB0byBpbmxpbmUgaXQuIElmIGlubGluZWQsIGl0IHdvbid0IGhhdmUgYSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzcywgc28gaXQncyBiZXN0ICpub3QqIHRvIGluY2x1ZGUgaXQgaW4gdGhlIGBGb2N1c1N5bWJvbHNgIHRvIHByZXZlbnQgYW55IHVubmVjZXNzYXJ5IHdhcm5pbmdzIG9yIG1pc3NpbmcgY292ZXJhZ2UuIEhvd2V2ZXIsIHRoZSBvdGhlciB0d286IGBpeGdiZXZmX2h2X2NoZWNrX21hY19saW5rX3ZmYCBhbmQgYGl4Z2JldmZfZ2V0X2xpbmtfa3NldHRpbmdzYCBhcmUgYXNzaWduZWQgdG8gZnVuY3Rpb24gcG9pbnRlcnMsIGFuZCBzbyB3b24ndCBiZSBmdWxseSBpbmxpbmVkLiBUaGVzZSAqYXJlKiBpbXBvcnRhbnQuXG5cbk5vdywgbGV0J3MgY2lyY2xlIGJhY2sgdG8gdGhlIHByb21wdCwgbWFraW5nIHN1cmUgSSBoYXZlbid0IG1pc3NlZCBhbnl0aGluZyBjcnVjaWFsLiBUaGUgaW5zdHJ1Y3Rpb24gaXMgdG8gcmV0dXJuIGBXb3J0aEZ1enppbmc9ZmFsc2VgIGlmIHRoZSBwYXRjaCBoYXMgY29kZSBwYXRocyB0aGF0IGFyZSB1bnJlYWNoYWJsZSBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgb3IgY29kZSB0aGF0IGRlcGVuZHMgb24gc3BlY2lmaWMsIG5vbi1lbXVsYXRlZCBoYXJkd2FyZS5cblxuVGhlIFN5emthbGxlciBQQ0kgZnV6emVyIGNhbiBlbXVsYXRlIGVub3VnaCBvZiB0aGUgZGV2aWNlIHRvIHBhc3MgdGhlIHByb2JlIGZ1bmN0aW9uIGFuZCByZWdpc3RlciB0aGUgbmV0ZGV2LCB3aGljaCBtYWtlcyB0aGUgY29kZSByZWFjaGFibGUuIFRoZSBQQ0kgZnV6emVyIGludGVyY2VwdHMgUENJIGNvbmZpZyBzcGFjZSBhbmQgTU1JTyByZWFkcy93cml0ZXMuIGBpeGdiZXZmX3N3X2luaXRgIGRvZXMgTU1JTyByZWFkcy93cml0ZXMsIGxpa2UgYElYR0JFX1JFQURfUkVHYC4gSWYgdGhlIGZ1enplciB0aHJvd3MgcmFuZG9tIHZhbHVlcyBhdCBpdCwgYHJlc2V0X2h3YCBtaWdodCBmYWlsLCBidXQgYXMgd2Ugb2JzZXJ2ZWQsIHRoZSBkcml2ZXIgd2lsbCBwcm9jZWVkIGFuZCByZWdpc3RlciB0aGUgbmV0ZGV2IGFueXdheS4gU28sIGl0J3MgZGVmaW5pdGVseSByZWFjaGFibGUuIE5vIHJlYXNvbiB0byB0aGluayB0aGUgUENJIGZ1enplciB3b24ndCBiZSBlZmZlY3RpdmUgaGVyZS5cblxuVGhlcmVmb3JlLCBJJ20gY29uZmlkZW50IGluIHNldHRpbmcgYFdvcnRoRnV6emluZz10cnVlYC5cblxuVGhlIHJlYXNvbmluZyBpcyB0aGF0IHRoaXMgcGF0Y2ggbW9kaWZpZXMgdGhlIGBpeGdiZXZmYCBkcml2ZXIuIEl0IGFkZHMgbG9naWMgdG8gcmVhZCB0aGUgbGluayBzcGVlZCBmcm9tIHRoZSBlbXVsYXRlZCBQQ0kgY29uZmlnIHNwYWNlIHNwZWNpZmljYWxseSBmb3IgSHlwZXItViBFNjEwIFZGcy4gVGhpcyBjb2RlIGlzIHJlYWNoYWJsZSB2aWEgdGhlIGBldGh0b29sIGdldF9saW5rX2tzZXR0aW5nc2AgY2FsbGJhY2sgYW5kIHRoZSBkcml2ZXIncyBiYWNrZ3JvdW5kIGxpbmsgY2hlY2sgdGFzay4gU3l6a2FsbGVyIGNhbiByZWFjaCBpdCBieSB1c2luZyBpdHMgUENJIGRldmljZSBmdXp6ZXIgdG8gZW11bGF0ZSB0aGUgc3BlY2lmaWMgVkYgZGV2aWNlIElELCBhbmQgdGhlbiBpbnRlcmFjdGluZyB3aXRoIHRoZSByZWdpc3RlcmVkIG5ldGRldiB0aHJvdWdoIGV0aHRvb2wuIFRoZSBuZXcgbG9naWMgZG9lcyByZXF1aXJlIGBDT05GSUdfUENJX01NQ09ORklHYCB0byBiZSBlbmFibGVkIHRvIHBlcmZvcm0gdGhlIFBDSSBjb25maWcgc3BhY2UgcmVhZHMuXG5cblRoZSBgRm9jdXNTeW1ib2xzYCBJIHdpbGwgZm9jdXMgb24gYXJlOiBgaXhnYmV2Zl9nZXRfbGlua19rc2V0dGluZ3NgIGFuZCBgaXhnYmV2Zl9odl9jaGVja19tYWNfbGlua192ZmAuXG5cblRoZSBgRW5hYmxlIGNvbmZpZ3NgIGFyZTogYE5FVF9WRU5ET1JfSU5URUxgLCBgSVhHQkVWRmAsIGBQQ0lfTU1DT05GSUdgLCBhbmQgYFBDSV9NU0lgLlxuXG5cbiIsIklucHV0VG9rZW5zIjo0NzE2MSwiT3V0cHV0VG9rZW5zIjoyMDQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo3NzUsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yNFQxNDoyNDowNC4zMTgxMjY1MTJaIiwiU2VxIjo0NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMTgyMTAzMDIsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIk5FVF9WRU5ET1JfSU5URUxcIixcbiAgICBcIklYR0JFVkZcIixcbiAgICBcIlBDSV9NTUNPTkZJR1wiLFxuICAgIFwiUENJX01TSVwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcIml4Z2JldmZfZ2V0X2xpbmtfa3NldHRpbmdzXCIsXG4gICAgXCJpeGdiZXZmX2h2X2NoZWNrX21hY19saW5rX3ZmXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGl4Z2JldmYgZHJpdmVyIHRvIHJlYWQgbGluayBzcGVlZCBmcm9tIHRoZSBlbXVsYXRlZCBQQ0kgY29uZmlnIHNwYWNlIGZvciBIeXBlci1WIEU2MTAgVkZzLiBUaGlzIGxvZ2ljIGlzIHJlYWNoYWJsZSB2aWEgdGhlIGV0aHRvb2wgZ2V0X2xpbmtfa3NldHRpbmdzIGNhbGxiYWNrIGFuZCB0aGUgZHJpdmVyJ3MgYmFja2dyb3VuZCBsaW5rIGNoZWNrIHRhc2suIFN5emthbGxlciBjYW4gcmVhY2ggdGhpcyBjb2RlIGJ5IHVzaW5nIGl0cyBQQ0kgZGV2aWNlIGZ1enplciB0byBlbXVsYXRlIHRoZSBzcGVjaWZpYyBWRiBkZXZpY2UgSUQgYW5kIHRoZW4gaW50ZXJhY3Rpbmcgd2l0aCB0aGUgcmVnaXN0ZXJlZCBuZXRkZXYgdmlhIGV0aHRvb2wuIFRoZSBuZXcgbG9naWMgcmVxdWlyZXMgQ09ORklHX1BDSV9NTUNPTkZJRyB0byBiZSBlbmFibGVkIHRvIGFjdHVhbGx5IHBlcmZvcm0gdGhlIFBDSSBjb25maWcgc3BhY2UgcmVhZHMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiTkVUX1ZFTkRPUl9JTlRFTFwiLFxuICAgIFwiSVhHQkVWRlwiLFxuICAgIFwiUENJX01NQ09ORklHXCIsXG4gICAgXCJQQ0lfTVNJXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiaXhnYmV2Zl9nZXRfbGlua19rc2V0dGluZ3NcIixcbiAgICBcIml4Z2JldmZfaHZfY2hlY2tfbWFjX2xpbmtfdmZcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgaXhnYmV2ZiBkcml2ZXIgdG8gcmVhZCBsaW5rIHNwZWVkIGZyb20gdGhlIGVtdWxhdGVkIFBDSSBjb25maWcgc3BhY2UgZm9yIEh5cGVyLVYgRTYxMCBWRnMuIFRoaXMgbG9naWMgaXMgcmVhY2hhYmxlIHZpYSB0aGUgZXRodG9vbCBnZXRfbGlua19rc2V0dGluZ3MgY2FsbGJhY2sgYW5kIHRoZSBkcml2ZXIncyBiYWNrZ3JvdW5kIGxpbmsgY2hlY2sgdGFzay4gU3l6a2FsbGVyIGNhbiByZWFjaCB0aGlzIGNvZGUgYnkgdXNpbmcgaXRzIFBDSSBkZXZpY2UgZnV6emVyIHRvIGVtdWxhdGUgdGhlIHNwZWNpZmljIFZGIGRldmljZSBJRCBhbmQgdGhlbiBpbnRlcmFjdGluZyB3aXRoIHRoZSByZWdpc3RlcmVkIG5ldGRldiB2aWEgZXRodG9vbC4gVGhlIG5ldyBsb2dpYyByZXF1aXJlcyBDT05GSUdfUENJX01NQ09ORklHIHRvIGJlIGVuYWJsZWQgdG8gYWN0dWFsbHkgcGVyZm9ybSB0aGUgUENJIGNvbmZpZyBzcGFjZSByZWFkcy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjRUMTQ6MjQ6MDQuNDM2MzQ5NzY0WiIsIlNlcSI6NDcsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoiSWYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNzY0MzM0NjcyMSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI0VDE0OjI0OjA0LjQzNzE4OTM2NFoiLCJTZXEiOjQ4LCJOZXN0aW5nIjoyLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJiZXN0LWV4cGVuc2l2ZSIsIkR1cmF0aW9uIjoxNzY0MjUwMjkwMSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIG5ldyBmdW5jdGlvbiBgaXhnYmV2Zl9odl9yZWFkX2xpbmtzX2U2MTBgIHdoaWNoIHJlYWRzIDQgYnl0ZXMgZnJvbSB0aGUgUENJIGNvbmZpZ3VyYXRpb24gc3BhY2UgaW50byBhIGxvY2FsIHN0YWNrIGFycmF5IGBkYXRhYC4gVGhlIGFycmF5IGlzIGluaXRpYWxpemVkIGJ5dGUtYnktYnl0ZSB1c2luZyBgcGNpX3JlYWRfY29uZmlnX2J5dGVgLiBJZiBhbnkgcmVhZCBmYWlscywgdGhlIGZ1bmN0aW9uIHJldHVybnMgYW4gZXJyb3IgaW1tZWRpYXRlbHkuIElmIGFsbCByZWFkcyBzdWNjZWVkLCB0aGUgYXJyYXkgaXMgZnVsbHkgaW5pdGlhbGl6ZWQgYmVmb3JlIGJlaW5nIHJlYWQgYnkgYGdldF91bmFsaWduZWRfbGUzMmAuIFRoZXJlIGlzIG5vIHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgYmVpbmcgdXNlZCBpbiBjb250cm9sIGZsb3csIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciBsZWFrZWQuIFN0YW5kYXJkIEtBU0FOIGFuZCBvdGhlciBidWcgZGV0ZWN0b3JzIGFyZSBzdWZmaWNpZW50IHRvIGNhdGNoIGFueSBwb3RlbnRpYWwgb3V0LW9mLWJvdW5kcyBvciBtZW1vcnkgY29ycnVwdGlvbiBpc3N1ZXMuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5XG5lcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZFxuZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKVxuZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuXG5cbkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOlxuLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlXG4gIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTlxuICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQXG4gIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuXG4tIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLFxuICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuXG5cblJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sXG5MT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLlxuQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWVxuc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3NcbnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uXG5cbkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0XG51bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZixcbmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5c1xudGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmdcbnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbFxuZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLFxuY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuXG5cblNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczpcbjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiXG4gICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkc1xuICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC5cbjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXNcbiAgIG9yIHN0cnVjdCBmaWVsZHMuXG4zLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzXG4gICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLlxuNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3NcbiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy5cblxuU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6XG4tIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyXG4gIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodFxuICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuXG4tIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkXG4gIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC5cbi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLlxuXG5Vc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlXG5kZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgYzAyMjZmNzJmN2I1NDgzZmUyOTdjMmQzYjZjMTczMWIwNDQxZTI4Y1xuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBNb24gQXVnIDI0IDE0OjE5OjE1IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaXhnYmV2Zi9ldGh0b29sLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9peGdiZXZmL2V0aHRvb2wuY1xuaW5kZXggNTM3YTYwZDUyNzZmMC4uMjQ2M2ZjY2ZmZDRkYSAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2l4Z2JldmYvZXRodG9vbC5jXG4rKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9peGdiZXZmL2V0aHRvb2wuY1xuQEAgLTgzLDYgKzgzLDE4IEBAIHN0YXRpYyBpbnQgaXhnYmV2Zl9nZXRfbGlua19rc2V0dGluZ3Moc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldixcbiBcdFx0XHRcdCAgICAgIHN0cnVjdCBldGh0b29sX2xpbmtfa3NldHRpbmdzICpjbWQpXG4ge1xuIFx0c3RydWN0IGl4Z2JldmZfYWRhcHRlciAqYWRhcHRlciA9IG5ldGRldl9wcml2KG5ldGRldik7XG4rXHRzdHJ1Y3QgaXhnYmVfaHcgKmh3ID0gXHUwMDI2YWRhcHRlci1cdTAwM2VodztcbitcbitcdC8qIEU2MTAgSHlwZXItViBWRnM6IHJlYWQgY3VycmVudCBsaW5rIHNwZWVkIGZyb20gUENJIGNvbmZpZyBzcGFjZVxuK1x0ICogb24gZXZlcnkgbGluayBzcGVlZCBxdWVyeS5cbitcdCAqL1xuK1x0aWYgKGh3LVx1MDAzZW1hYy50eXBlID09IGl4Z2JlX21hY19lNjEwX3ZmKSB7XG4rXHRcdHNwaW5fbG9ja19iaChcdTAwMjZhZGFwdGVyLVx1MDAzZW1ieF9sb2NrKTtcbitcdFx0aHctXHUwMDNlbWFjLmdldF9saW5rX3N0YXR1cyA9IHRydWU7XG4rXHRcdGh3LVx1MDAzZW1hYy5vcHMuY2hlY2tfbGluayhodywgXHUwMDI2YWRhcHRlci1cdTAwM2VsaW5rX3NwZWVkLFxuK1x0XHRcdFx0ICAgICAgIFx1MDAyNmFkYXB0ZXItXHUwMDNlbGlua191cCwgZmFsc2UpO1xuK1x0XHRzcGluX3VubG9ja19iaChcdTAwMjZhZGFwdGVyLVx1MDAzZW1ieF9sb2NrKTtcbitcdH1cbiBcbiBcdGV0aHRvb2xfbGlua19rc2V0dGluZ3NfemVyb19saW5rX21vZGUoY21kLCBzdXBwb3J0ZWQpO1xuIFx0ZXRodG9vbF9saW5rX2tzZXR0aW5nc19hZGRfbGlua19tb2RlKGNtZCwgc3VwcG9ydGVkLCAxMDAwMGJhc2VUX0Z1bGwpO1xuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2l4Z2JldmYvdmYuYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2l4Z2JldmYvdmYuY1xuaW5kZXggZjZkZjg2ZDEyNGI5ZS4uYTg0YjYyNjQxZTliYyAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2l4Z2JldmYvdmYuY1xuKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaXhnYmV2Zi92Zi5jXG5AQCAtMSwxNCArMSwxNyBAQFxuIC8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXG4gLyogQ29weXJpZ2h0KGMpIDE5OTkgLSAyMDI0IEludGVsIENvcnBvcmF0aW9uLiAqL1xuIFxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L3VuYWxpZ25lZC5oXHUwMDNlXG4rXG4gI2luY2x1ZGUgXCJ2Zi5oXCJcbiAjaW5jbHVkZSBcIml4Z2JldmYuaFwiXG4gXG4tLyogT24gSHlwZXItViwgdG8gcmVzZXQsIHdlIG5lZWQgdG8gcmVhZCBmcm9tIHRoaXMgb2Zmc2V0XG4tICogZnJvbSB0aGUgUENJIGNvbmZpZyBzcGFjZS4gVGhpcyBpcyB0aGUgbWVjaGFuaXNtIHVzZWQgb25cbi0gKiBIeXBlci1WIHRvIHN1cHBvcnQgUEYvVkYgY29tbXVuaWNhdGlvbi5cbisvKiBPbiBIeXBlci1WIHRoZSBQRi9WRiBjb21tdW5pY2F0aW9uIGlzIHRocm91Z2ggZW11bGF0ZWQgUENJIGNvbmZpZ1xuKyAqIHNwYWNlLiBUaGUgcmVzZXQgYW5kIGxpbmsgc3RhdHVzIGFyZSBleHBvc2VkIGF0IHRoZSBvZmZzZXRzIGJlbG93LlxuICAqL1xuLSNkZWZpbmUgSVhHQkVfSFZfUkVTRVRfT0ZGU0VUICAgICAgICAgICAweDIwMVxuKyNkZWZpbmUgSVhHQkVfSFZfUkVTRVRfT0ZGU0VUXHRcdDB4MjAxXG4rI2RlZmluZSBJWEdCRV9IVl9MSU5LX1NUQVRVU19PRkZTRVRcdDB4MjA5XG4rI2RlZmluZSBJWEdCRV9IVl9MSU5LX1NUQVRVU19TSVpFXHQ0XG4gXG4gc3RhdGljIGlubGluZSBzMzIgaXhnYmV2Zl93cml0ZV9tc2dfcmVhZF9hY2soc3RydWN0IGl4Z2JlX2h3ICpodywgdTMyICptc2csXG4gXHRcdFx0XHRcdCAgICAgdTMyICpyZXRtc2csIHUxNiBzaXplKVxuQEAgLTkwMSw2ICs5MDQsNDAgQEAgc3RhdGljIHMzMiBpeGdiZXZmX2NoZWNrX21hY19saW5rX3ZmKHN0cnVjdCBpeGdiZV9odyAqaHcsXG4gXHRyZXR1cm4gcmV0X3ZhbDtcbiB9XG4gXG4rLyoqXG4rICogaXhnYmV2Zl9odl9yZWFkX2xpbmtzX2U2MTAgLSByZWFkIGxpbmsgc3RhdHVzIGZyb20gUENJIGNvbmZpZyBzcGFjZVxuKyAqIEBodzogcG9pbnRlciB0byBoYXJkd2FyZSBzdHJ1Y3R1cmVcbisgKiBAbGlua3NfcmVnOiBwb2ludGVyIHRvIHN0b3JlIHJlYWQgdmFsdWVcbisgKlxuKyAqIE9uIEh5cGVyLVYgRTYxMCBWRnMgdGhlIFZGTElOS1MgcmVnaXN0ZXIgZG9lcyBub3QgY2FycnkgdmFsaWQgbGluayBzcGVlZC5cbisgKiBJbnN0ZWFkLCBsaW5rIHN0YXR1cyBpcyBleHBvc2VkIHRocm91Z2ggZW11bGF0ZWQgUENJIGNvbmZpZyBzcGFjZSBhdCBvZmZzZXRcbisgKiAweDIwOSBpbiBWRkxJTktTIHJlZ2lzdGVyIGZvcm1hdC5cbisgKlxuKyAqIFJldHVybjogMCBvbiBzdWNjZXNzLCBuZWdhdGl2ZSBlcnJvciBjb2RlIG9uIGZhaWx1cmUuXG4rICovXG4rc3RhdGljIHMzMiBpeGdiZXZmX2h2X3JlYWRfbGlua3NfZTYxMChzdHJ1Y3QgaXhnYmVfaHcgKmh3LCB1MzIgKmxpbmtzX3JlZylcbit7XG4rXHRzdHJ1Y3QgaXhnYmV2Zl9hZGFwdGVyICphZGFwdGVyID0gaHctXHUwMDNlYmFjaztcbitcdHU4IGRhdGFbSVhHQkVfSFZfTElOS19TVEFUVVNfU0laRV07XG4rXG4rXHRpZiAoIUlTX0VOQUJMRUQoQ09ORklHX1BDSV9NTUNPTkZJRykpIHtcbitcdFx0ZGV2X2Vycl9vbmNlKFx1MDAyNmFkYXB0ZXItXHUwMDNlcGRldi1cdTAwM2VkZXYsXG4rXHRcdFx0ICAgICBcImNhbm5vdCByZWFkIGxpbmsgc3RhdHVzLCBQQ0lfTU1DT05GSUcgaXMgcmVxdWlyZWQgZm9yIEh5cGVyLVZcXG5cIik7XG4rXHRcdHJldHVybiAtRU9QTk9UU1VQUDtcbitcdH1cbitcbitcdGZvciAoaW50IGkgPSAwOyBpIFx1MDAzYyBJWEdCRV9IVl9MSU5LX1NUQVRVU19TSVpFOyBpKyspIHtcbitcdFx0aW50IHJldCA9IHBjaV9yZWFkX2NvbmZpZ19ieXRlKGFkYXB0ZXItXHUwMDNlcGRldixcbitcdFx0XHRcdFx0ICAgICAgIElYR0JFX0hWX0xJTktfU1RBVFVTX09GRlNFVCArIGksXG4rXHRcdFx0XHRcdCAgICAgICBcdTAwMjZkYXRhW2ldKTtcbitcdFx0aWYgKHJldClcbitcdFx0XHRyZXR1cm4gcGNpYmlvc19lcnJfdG9fZXJybm8ocmV0KTtcbitcdH1cbitcbitcdCpsaW5rc19yZWcgPSBnZXRfdW5hbGlnbmVkX2xlMzIoZGF0YSk7XG4rXHRyZXR1cm4gMDtcbit9XG4rXG4gLyoqXG4gICogaXhnYmV2Zl9odl9jaGVja19tYWNfbGlua192ZiAtIGNoZWNrIGxpbmtcbiAgKiBAaHc6IHBvaW50ZXIgdG8gcHJpdmF0ZSBoYXJkd2FyZSBzdHJ1Y3RcbkBAIC05MDksNiArOTQ2LDcgQEAgc3RhdGljIHMzMiBpeGdiZXZmX2NoZWNrX21hY19saW5rX3ZmKHN0cnVjdCBpeGdiZV9odyAqaHcsXG4gICogQGF1dG9uZWdfd2FpdF90b19jb21wbGV0ZTogdW51c2VkXG4gICpcbiAgKiBIeXBlci1WIHZhcmlhbnQ7IHRoZXJlIGlzIG5vIG1haWxib3ggY29tbXVuaWNhdGlvbi5cbisgKiBGb3IgRTYxMCBWRnMsIGxpbmsgc3RhdHVzIGlzIHJlYWQgZnJvbSBlbXVsYXRlZCBQQ0kgY29uZmlnIHNwYWNlLlxuICAqL1xuIHN0YXRpYyBzMzIgaXhnYmV2Zl9odl9jaGVja19tYWNfbGlua192ZihzdHJ1Y3QgaXhnYmVfaHcgKmh3LFxuIFx0XHRcdFx0XHRpeGdiZV9saW5rX3NwZWVkICpzcGVlZCxcbkBAIC05MjYsOCArOTY0LDE2IEBAIHN0YXRpYyBzMzIgaXhnYmV2Zl9odl9jaGVja19tYWNfbGlua192ZihzdHJ1Y3QgaXhnYmVfaHcgKmh3LFxuIFx0aWYgKCFtYWMtXHUwMDNlZ2V0X2xpbmtfc3RhdHVzKVxuIFx0XHRnb3RvIG91dDtcbiBcbi1cdC8qIGlmIGxpbmsgc3RhdHVzIGlzIGRvd24gbm8gcG9pbnQgaW4gY2hlY2tpbmcgdG8gc2VlIGlmIHBmIGlzIHVwICovXG4tXHRsaW5rc19yZWcgPSBJWEdCRV9SRUFEX1JFRyhodywgSVhHQkVfVkZMSU5LUyk7XG4rXHRpZiAobWFjLVx1MDAzZXR5cGUgPT0gaXhnYmVfbWFjX2U2MTBfdmYpIHtcbitcdFx0aWYgKGl4Z2JldmZfaHZfcmVhZF9saW5rc19lNjEwKGh3LCBcdTAwMjZsaW5rc19yZWcpKSB7XG4rXHRcdFx0KmxpbmtfdXAgPSBmYWxzZTtcbitcdFx0XHQqc3BlZWQgPSBJWEdCRV9MSU5LX1NQRUVEX1VOS05PV047XG4rXHRcdFx0cmV0dXJuIDA7XG4rXHRcdH1cbitcdH0gZWxzZSB7XG4rXHRcdGxpbmtzX3JlZyA9IElYR0JFX1JFQURfUkVHKGh3LCBJWEdCRV9WRkxJTktTKTtcbitcdH1cbitcbiBcdGlmICghKGxpbmtzX3JlZyBcdTAwMjYgSVhHQkVfTElOS1NfVVApKVxuIFx0XHRnb3RvIG91dDtcbiBcbkBAIC05NDEsOCArOTg3LDExIEBAIHN0YXRpYyBzMzIgaXhnYmV2Zl9odl9jaGVja19tYWNfbGlua192ZihzdHJ1Y3QgaXhnYmVfaHcgKmh3LFxuIFx0XHRcdHVkZWxheSgxMDApO1xuIFx0XHRcdGxpbmtzX3JlZyA9IElYR0JFX1JFQURfUkVHKGh3LCBJWEdCRV9WRkxJTktTKTtcbiBcbi1cdFx0XHRpZiAoIShsaW5rc19yZWcgXHUwMDI2IElYR0JFX0xJTktTX1VQKSlcbi1cdFx0XHRcdGdvdG8gb3V0O1xuK1x0XHRcdGlmICghKGxpbmtzX3JlZyBcdTAwMjYgSVhHQkVfTElOS1NfVVApKSB7XG4rXHRcdFx0XHQqbGlua191cCA9IGZhbHNlO1xuK1x0XHRcdFx0KnNwZWVkID0gSVhHQkVfTElOS19TUEVFRF9VTktOT1dOO1xuK1x0XHRcdFx0cmV0dXJuIDA7XG4rXHRcdFx0fVxuIFx0XHR9XG4gXHR9XG4gXG5AQCAtOTU2LDYgKzEwMDUsOSBAQCBzdGF0aWMgczMyIGl4Z2JldmZfaHZfY2hlY2tfbWFjX2xpbmtfdmYoc3RydWN0IGl4Z2JlX2h3ICpodyxcbiBcdGNhc2UgSVhHQkVfTElOS1NfU1BFRURfMTAwXzgyNTk5OlxuIFx0XHQqc3BlZWQgPSBJWEdCRV9MSU5LX1NQRUVEXzEwMF9GVUxMO1xuIFx0XHRicmVhaztcbitcdGRlZmF1bHQ6XG4rXHRcdCpzcGVlZCA9IElYR0JFX0xJTktfU1BFRURfVU5LTk9XTjtcbitcdFx0YnJlYWs7XG4gXHR9XG4gXG4gXHQvKiBpZiB3ZSBwYXNzZWQgYWxsIHRoZSB0ZXN0cyBhYm92ZSB0aGVuIHRoZSBsaW5rIGlzIHVwIGFuZCB3ZSBub1xuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjRUMTQ6MjQ6MDQuNDM3MTkxNDc0WiIsIlNlcSI6NDksIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjE3NjQyNDgwNjYxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFzc2Vzc21lbnQgb2YgdGhlIGl4Z2JldmYgRHJpdmVyIFBhdGNoKipcblxuQWxyaWdodCwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBUaGlzIHBhdGNoIGlzIHRhcmdldGluZyB0aGUgYGl4Z2JldmZgIGRyaXZlciDigJMgdGhlIEludGVsIDEwIEdpZ2FiaXQgUENJIEV4cHJlc3MgVmlydHVhbCBGdW5jdGlvbiBkcml2ZXIg4oCTIHNwZWNpZmljYWxseSB0byBhZGQgdGhlIGFiaWxpdHkgdG8gcmVhZCBsaW5rIHN0YXR1cyBkaXJlY3RseSBmcm9tIHRoZSBQQ0kgY29uZmlndXJhdGlvbiBzcGFjZSBmb3IgRTYxMCBIeXBlci1WIFZpcnR1YWwgRnVuY3Rpb25zLlxuXG5NeSBhbmFseXNpcyBmb2N1c2VzIG9uIHBvdGVudGlhbCBtZW1vcnkgc2FmZXR5IGlzc3VlcywgcGFydGljdWxhcmx5IHJlZ2FyZGluZyB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcy5cblxuVGhlIGNvcmUgb2YgdGhlIGNoYW5nZSBsaWVzIGluIHRoZXNlIGZ1bmN0aW9uczpcblxuMS4gIGBpeGdiZXZmX2dldF9saW5rX2tzZXR0aW5nc2AgaW4gYGV0aHRvb2wuY2Agbm93IGNhbGxzIGBody1cdTAwM2VtYWMub3BzLmNoZWNrX2xpbmtgLCB3aGljaCBpcyBjcnVjaWFsIGZvciBsaW5rIHN0YXR1cy5cblxuMi4gIGBpeGdiZXZmX2h2X3JlYWRfbGlua3NfZTYxMGAgaW4gYHZmLmNgIGlzIHRoZSBrZXkgcGllY2UuIEl0IGF0dGVtcHRzIHRvIHJlYWQgNCBieXRlcyBvZiBsaW5rIHN0YXR1cyBkYXRhIGZyb20gdGhlIFBDSSBjb25maWcgc3BhY2UgaW50byBhIGB1OCBkYXRhW0lYR0JFX0hWX0xJTktfU1RBVFVTX1NJWkVdYCBhcnJheS4gVGhpcyBpcyBkb25lIGJ5dGUgYnkgYnl0ZSB1c2luZyBgcGNpX3JlYWRfY29uZmlnX2J5dGVgLiBDcnVjaWFsbHksIGlmIGFueSBgcGNpX3JlYWRfY29uZmlnX2J5dGVgIGZhaWxzIChyZXR1cm5zIGEgbm9uLXplcm8gdmFsdWUpLCB0aGUgZnVuY3Rpb24gKmltbWVkaWF0ZWx5IHJldHVybnMqLCBwcmV2ZW50aW5nIGFueSB1c2Ugb2YgcGFydGlhbGx5IGluaXRpYWxpemVkIGRhdGEuIElmIHN1Y2Nlc3NmdWwsICphbGwgZm91ciBieXRlcyogb2YgdGhlIGBkYXRhYCBhcnJheSBhcmUgZmlsbGVkLiBUaGUgZnVuY3Rpb24gdGhlbiBjb25zdHJ1Y3RzIGEgMzItYml0IHZhbHVlIHVzaW5nIGBnZXRfdW5hbGlnbmVkX2xlMzIoZGF0YSlgLlxuXG4zLiBgaXhnYmV2Zl9odl9jaGVja19tYWNfbGlua192ZmAgY2FsbHMgdGhlIGFib3ZlIGZ1bmN0aW9uLiBJZiB0aGUgcmVhZCBmYWlscywgdGhlIGxpbmsgc3RhdHVzIGlzIHNldCB0byBcImRvd25cIiBhbmQgc3BlZWQgdG8gXCJ1bmtub3duXCIuIElmIGl0IHN1Y2NlZWRzLCB0aGUgcmVhZCBkYXRhIGlzIHVzZWQgdG8gZGV0ZXJtaW5lIGxpbmsgc3BlZWQuXG5cblRoZSBjZW50cmFsIHF1ZXN0aW9uIGhlcmUgaXMgd2hldGhlciB0aGlzIGludHJvZHVjZXMgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMuIEknbSBzYXRpc2ZpZWQgdGhhdCBpdCAqZG9lc24ndCouIFRoZSBgZGF0YWAgYXJyYXkgaXMgZXhwbGljaXRseSBpbml0aWFsaXplZCwgYnl0ZSBieSBieXRlLCB1c2luZyBgcGNpX3JlYWRfY29uZmlnX2J5dGVgLiBGYWlsdXJlIGF0IGFueSBwb2ludCBjYXVzZXMgYW4gaW1tZWRpYXRlIGV4aXQgZnJvbSB0aGUgZnVuY3Rpb24sIHNvIHRoZSBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIGBkYXRhYCBhcnJheSBpcyBuZXZlciBhY2Nlc3NlZC4gV2hlbiB0aGUgcmVhZCBzdWNjZWVkcywgYWxsIGJ5dGVzIGFyZSBpbml0aWFsaXplZCBiZWZvcmUgYGdldF91bmFsaWduZWRfbGUzMmAgaXMgY2FsbGVkLiBJdOKAmXMgYWxzbyBpbXBvcnRhbnQgdG8gbm90ZSB0aGF0IHRoZSBwYXRjaCBkb2Vzbid0IGludHJvZHVjZSBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyBvciBhbnkgdW51c3VhbCBwYWRkaW5nIHNjZW5hcmlvcy5cblxuYHBjaV9yZWFkX2NvbmZpZ19ieXRlYOKAmXMgYmVoYXZpb3IgZnVydGhlciByZWluZm9yY2VzIHRoaXMuIEl0IHRha2VzIGEgcG9pbnRlciB0byBgdThgIGFuZCwgdXBvbiBhIHN1Y2Nlc3NmdWwgcmVhZCwgcGxhY2VzIHRoZSB2YWx1ZSBhdCB0aGF0IGFkZHJlc3MuIFNvIGlmIHRoZSBjYWxsIHJldHVybnMgemVybywgdGhlIG1lbW9yeSBiZWluZyBwb2ludGVkIHRvIGhhcyBiZWVuIHN1Y2Nlc3NmdWxseSB3cml0dGVuIHRvLlxuXG5UaGVyZWZvcmUsIGdpdmVuIHRoZSBleHBsaWNpdCBpbml0aWFsaXphdGlvbiBzdHJhdGVneSBhbmQgdGhlIGVhcmx5LWV4aXQgZXJyb3IgaGFuZGxpbmcsIEkgY2FuIGNvbmZpZGVudGx5IHN0YXRlIHRoYXQgS2VybmVsIE1lbW9yeSBTYW5pdGl6ZXIgKEtNU0FOKSBpcyAqbm90KiBuZWNlc3NhcnkgaGVyZS4gVGhlIHBvdGVudGlhbCBmb3IgbWVtb3J5IGVycm9ycyBpcyBhbHJlYWR5IGFkZHJlc3NlZCBieSB0aGUgYnl0ZS1ieS1ieXRlIGluaXRpYWxpemF0aW9uIHdpdGggYSBjaGVjayBmb3IgZWFjaCBieXRlLiBLQVNBTiBhbmQgc3RhbmRhcmQgdG9vbHMgc2hvdWxkIHN1ZmZpY2UgdG8gY2F0Y2ggYW55IHBvdGVudGlhbCBtZW1vcnkgZXJyb3JzLCB0aG91Z2ggSSBzZWUgbm9uZSBhcHBhcmVudC5cblxuSSdtIHNldHRpbmcgYE5lZWRzS01TQU49ZmFsc2VgIGZvciB0aGlzIHBhdGNoLiBNeSBhbmFseXNpcyBhbmQgdGhlIGxvdy1sZXZlbCBmdW5jdGlvbnMgdXNlZCBjb25maXJtIHRoYXQgdGhlIG1lbW9yeSBzYWZldHkgcmVxdWlyZW1lbnRzIGFyZSBtZXQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjM4MzksIk91dHB1dFRva2VucyI6MTY5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NjkxLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjRUMTQ6MjQ6MjIuMDc5Njc1NTU1WiIsIlNlcSI6NTAsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTU1NTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgbmV3IGZ1bmN0aW9uIGBpeGdiZXZmX2h2X3JlYWRfbGlua3NfZTYxMGAgd2hpY2ggcmVhZHMgNCBieXRlcyBmcm9tIHRoZSBQQ0kgY29uZmlndXJhdGlvbiBzcGFjZSBpbnRvIGEgbG9jYWwgc3RhY2sgYXJyYXkgYGRhdGFgLiBUaGUgYXJyYXkgaXMgaW5pdGlhbGl6ZWQgYnl0ZS1ieS1ieXRlIHVzaW5nIGBwY2lfcmVhZF9jb25maWdfYnl0ZWAuIElmIGFueSByZWFkIGZhaWxzLCB0aGUgZnVuY3Rpb24gcmV0dXJucyBhbiBlcnJvciBpbW1lZGlhdGVseS4gSWYgYWxsIHJlYWRzIHN1Y2NlZWQsIHRoZSBhcnJheSBpcyBmdWxseSBpbml0aWFsaXplZCBiZWZvcmUgYmVpbmcgcmVhZCBieSBgZ2V0X3VuYWxpZ25lZF9sZTMyYC4gVGhlcmUgaXMgbm8gcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSBiZWluZyB1c2VkIGluIGNvbnRyb2wgZmxvdywgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIGxlYWtlZC4gU3RhbmRhcmQgS0FTQU4gYW5kIG90aGVyIGJ1ZyBkZXRlY3RvcnMgYXJlIHN1ZmZpY2llbnQgdG8gY2F0Y2ggYW55IHBvdGVudGlhbCBvdXQtb2YtYm91bmRzIG9yIG1lbW9yeSBjb3JydXB0aW9uIGlzc3Vlcy5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgbmV3IGZ1bmN0aW9uIGBpeGdiZXZmX2h2X3JlYWRfbGlua3NfZTYxMGAgd2hpY2ggcmVhZHMgNCBieXRlcyBmcm9tIHRoZSBQQ0kgY29uZmlndXJhdGlvbiBzcGFjZSBpbnRvIGEgbG9jYWwgc3RhY2sgYXJyYXkgYGRhdGFgLiBUaGUgYXJyYXkgaXMgaW5pdGlhbGl6ZWQgYnl0ZS1ieS1ieXRlIHVzaW5nIGBwY2lfcmVhZF9jb25maWdfYnl0ZWAuIElmIGFueSByZWFkIGZhaWxzLCB0aGUgZnVuY3Rpb24gcmV0dXJucyBhbiBlcnJvciBpbW1lZGlhdGVseS4gSWYgYWxsIHJlYWRzIHN1Y2NlZWQsIHRoZSBhcnJheSBpcyBmdWxseSBpbml0aWFsaXplZCBiZWZvcmUgYmVpbmcgcmVhZCBieSBgZ2V0X3VuYWxpZ25lZF9sZTMyYC4gVGhlcmUgaXMgbm8gcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSBiZWluZyB1c2VkIGluIGNvbnRyb2wgZmxvdywgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIGxlYWtlZC4gU3RhbmRhcmQgS0FTQU4gYW5kIG90aGVyIGJ1ZyBkZXRlY3RvcnMgYXJlIHN1ZmZpY2llbnQgdG8gY2F0Y2ggYW55IHBvdGVudGlhbCBvdXQtb2YtYm91bmRzIG9yIG1lbW9yeSBjb3JydXB0aW9uIGlzc3Vlcy5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+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-workflow5xvxz[1] Phase: Succeeded StartedAt: 2026-08-24 14:24:34 +0000 UTC FinishedAt: 2026-08-24 14:24:34 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5xvxz[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-08-24 14:24:34 +0000 UTC FinishedAt: 2026-08-24 14:24:34 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5xvxz[2] Phase: Succeeded StartedAt: 2026-08-24 14:24:34 +0000 UTC FinishedAt: 2026-08-24 16:09:29 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5xvxz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_VENDOR_INTEL","IXGBEVF","PCI_MMCONFIG","PCI_MSI"],"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":["ixgbevf_get_link_ksettings","ixgbevf_hv_check_mac_link_vf"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_VENDOR_INTEL","IXGBEVF","PCI_MMCONFIG","PCI_MSI"],"series_id":"ae690f0a-1d70-4346-bb1d-cd2c8046a0f5","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-24 14:24:34 +0000 UTC FinishedAt: 2026-08-24 16:09:29 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_VENDOR_INTEL","IXGBEVF","PCI_MMCONFIG","PCI_MSI"],"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":["ixgbevf_get_link_ksettings","ixgbevf_hv_check_mac_link_vf"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_VENDOR_INTEL","IXGBEVF","PCI_MMCONFIG","PCI_MSI"],"series_id":"ae690f0a-1d70-4346-bb1d-cd2c8046a0f5","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-workflow5xvxz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_VENDOR_INTEL","IXGBEVF","PCI_MMCONFIG","PCI_MSI"],"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":["ixgbevf_get_link_ksettings","ixgbevf_hv_check_mac_link_vf"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_VENDOR_INTEL","IXGBEVF","PCI_MMCONFIG","PCI_MSI"],"series_id":"ae690f0a-1d70-4346-bb1d-cd2c8046a0f5","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-24 14:24:34 +0000 UTC FinishedAt: 2026-08-24 14:24:44 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5xvxz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_VENDOR_INTEL","IXGBEVF","PCI_MMCONFIG","PCI_MSI"],"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":["ixgbevf_get_link_ksettings","ixgbevf_hv_check_mac_link_vf"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_VENDOR_INTEL","IXGBEVF","PCI_MMCONFIG","PCI_MSI"],"series_id":"ae690f0a-1d70-4346-bb1d-cd2c8046a0f5","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-24 14:24:34 +0000 UTC FinishedAt: 2026-08-24 14:24:41 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_VENDOR_INTEL","IXGBEVF","PCI_MMCONFIG","PCI_MSI"],"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-workflow5xvxz/series-workflow5xvxz-convert-artifact-3125678985/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow5xvxz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_VENDOR_INTEL","IXGBEVF","PCI_MMCONFIG","PCI_MSI"],"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":["ixgbevf_get_link_ksettings","ixgbevf_hv_check_mac_link_vf"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_VENDOR_INTEL","IXGBEVF","PCI_MMCONFIG","PCI_MSI"],"series_id":"ae690f0a-1d70-4346-bb1d-cd2c8046a0f5","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-24 14:24:44 +0000 UTC FinishedAt: 2026-08-24 14:44:03 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5xvxz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_VENDOR_INTEL","IXGBEVF","PCI_MMCONFIG","PCI_MSI"],"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":["ixgbevf_get_link_ksettings","ixgbevf_hv_check_mac_link_vf"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_VENDOR_INTEL","IXGBEVF","PCI_MMCONFIG","PCI_MSI"],"series_id":"ae690f0a-1d70-4346-bb1d-cd2c8046a0f5","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-24 14:24:44 +0000 UTC FinishedAt: 2026-08-24 14:44:03 +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:*792d9b0c-3ebd-46c8-818c-9d74d8b8c946,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-workflow5xvxz/series-workflow5xvxz-convert-artifact-3125678985/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": "6b2dcc01-140a-4c2e-9769-b797b3e41b75", "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-workflow5xvxz/series-workflow5xvxz-build-action-3202796647/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow5xvxz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_VENDOR_INTEL","IXGBEVF","PCI_MMCONFIG","PCI_MSI"],"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":["ixgbevf_get_link_ksettings","ixgbevf_hv_check_mac_link_vf"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_VENDOR_INTEL","IXGBEVF","PCI_MMCONFIG","PCI_MSI"],"series_id":"ae690f0a-1d70-4346-bb1d-cd2c8046a0f5","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-24 14:24:44 +0000 UTC FinishedAt: 2026-08-24 14:43:52 +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:*792d9b0c-3ebd-46c8-818c-9d74d8b8c946,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-workflow5xvxz/series-workflow5xvxz-convert-artifact-3125678985/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": "6b2dcc01-140a-4c2e-9769-b797b3e41b75", "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-workflow5xvxz/series-workflow5xvxz-build-action-3202796647/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow5xvxz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_VENDOR_INTEL","IXGBEVF","PCI_MMCONFIG","PCI_MSI"],"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":["ixgbevf_get_link_ksettings","ixgbevf_hv_check_mac_link_vf"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_VENDOR_INTEL","IXGBEVF","PCI_MMCONFIG","PCI_MSI"],"series_id":"ae690f0a-1d70-4346-bb1d-cd2c8046a0f5","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-24 14:44:03 +0000 UTC FinishedAt: 2026-08-24 14:44:03 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5xvxz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_VENDOR_INTEL","IXGBEVF","PCI_MMCONFIG","PCI_MSI"],"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":["ixgbevf_get_link_ksettings","ixgbevf_hv_check_mac_link_vf"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_VENDOR_INTEL","IXGBEVF","PCI_MMCONFIG","PCI_MSI"],"series_id":"ae690f0a-1d70-4346-bb1d-cd2c8046a0f5","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-24 14:44:03 +0000 UTC FinishedAt: 2026-08-24 14:44:03 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5xvxz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_VENDOR_INTEL","IXGBEVF","PCI_MMCONFIG","PCI_MSI"],"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":["ixgbevf_get_link_ksettings","ixgbevf_hv_check_mac_link_vf"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_VENDOR_INTEL","IXGBEVF","PCI_MMCONFIG","PCI_MSI"],"series_id":"ae690f0a-1d70-4346-bb1d-cd2c8046a0f5","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-24 14:44:03 +0000 UTC FinishedAt: 2026-08-24 14:44:14 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5xvxz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_VENDOR_INTEL","IXGBEVF","PCI_MMCONFIG","PCI_MSI"],"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":["ixgbevf_get_link_ksettings","ixgbevf_hv_check_mac_link_vf"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_VENDOR_INTEL","IXGBEVF","PCI_MMCONFIG","PCI_MSI"],"series_id":"ae690f0a-1d70-4346-bb1d-cd2c8046a0f5","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-24 14:44:03 +0000 UTC FinishedAt: 2026-08-24 14:44:10 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_VENDOR_INTEL","IXGBEVF","PCI_MMCONFIG","PCI_MSI"],"series_id":"ae690f0a-1d70-4346-bb1d-cd2c8046a0f5","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-workflow5xvxz/series-workflow5xvxz-convert-artifact-866875036/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow5xvxz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_VENDOR_INTEL","IXGBEVF","PCI_MMCONFIG","PCI_MSI"],"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":["ixgbevf_get_link_ksettings","ixgbevf_hv_check_mac_link_vf"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_VENDOR_INTEL","IXGBEVF","PCI_MMCONFIG","PCI_MSI"],"series_id":"ae690f0a-1d70-4346-bb1d-cd2c8046a0f5","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-24 14:44:14 +0000 UTC FinishedAt: 2026-08-24 14:46:39 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5xvxz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_VENDOR_INTEL","IXGBEVF","PCI_MMCONFIG","PCI_MSI"],"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":["ixgbevf_get_link_ksettings","ixgbevf_hv_check_mac_link_vf"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_VENDOR_INTEL","IXGBEVF","PCI_MMCONFIG","PCI_MSI"],"series_id":"ae690f0a-1d70-4346-bb1d-cd2c8046a0f5","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-24 14:44:14 +0000 UTC FinishedAt: 2026-08-24 14:46:29 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*6b2dcc01-140a-4c2e-9769-b797b3e41b75,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-workflow5xvxz/series-workflow5xvxz-build-action-3202796647/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-workflow5xvxz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_VENDOR_INTEL","IXGBEVF","PCI_MMCONFIG","PCI_MSI"],"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":["ixgbevf_get_link_ksettings","ixgbevf_hv_check_mac_link_vf"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_VENDOR_INTEL","IXGBEVF","PCI_MMCONFIG","PCI_MSI"],"series_id":"ae690f0a-1d70-4346-bb1d-cd2c8046a0f5","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-24 14:46:39 +0000 UTC FinishedAt: 2026-08-24 14:46:39 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5xvxz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_VENDOR_INTEL","IXGBEVF","PCI_MMCONFIG","PCI_MSI"],"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":["ixgbevf_get_link_ksettings","ixgbevf_hv_check_mac_link_vf"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_VENDOR_INTEL","IXGBEVF","PCI_MMCONFIG","PCI_MSI"],"series_id":"ae690f0a-1d70-4346-bb1d-cd2c8046a0f5","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-24 14:46:39 +0000 UTC FinishedAt: 2026-08-24 14:46:39 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5xvxz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_VENDOR_INTEL","IXGBEVF","PCI_MMCONFIG","PCI_MSI"],"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":["ixgbevf_get_link_ksettings","ixgbevf_hv_check_mac_link_vf"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_VENDOR_INTEL","IXGBEVF","PCI_MMCONFIG","PCI_MSI"],"series_id":"ae690f0a-1d70-4346-bb1d-cd2c8046a0f5","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-24 14:46:39 +0000 UTC FinishedAt: 2026-08-24 15:04:02 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5xvxz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_VENDOR_INTEL","IXGBEVF","PCI_MMCONFIG","PCI_MSI"],"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":["ixgbevf_get_link_ksettings","ixgbevf_hv_check_mac_link_vf"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_VENDOR_INTEL","IXGBEVF","PCI_MMCONFIG","PCI_MSI"],"series_id":"ae690f0a-1d70-4346-bb1d-cd2c8046a0f5","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-24 14:46:39 +0000 UTC FinishedAt: 2026-08-24 15:04:02 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:findings,Default:nil,Value:*true,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Build Patched,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:smoke-build,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:session-id,Default:nil,Value:*792d9b0c-3ebd-46c8-818c-9d74d8b8c946,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-workflow5xvxz/series-workflow5xvxz-convert-artifact-866875036/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": "52a98f36-2bc7-405f-9ad4-b3e3cbdd5e47", "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-workflow5xvxz/series-workflow5xvxz-build-action-2745244152/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow5xvxz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_VENDOR_INTEL","IXGBEVF","PCI_MMCONFIG","PCI_MSI"],"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":["ixgbevf_get_link_ksettings","ixgbevf_hv_check_mac_link_vf"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_VENDOR_INTEL","IXGBEVF","PCI_MMCONFIG","PCI_MSI"],"series_id":"ae690f0a-1d70-4346-bb1d-cd2c8046a0f5","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-24 14:46:39 +0000 UTC FinishedAt: 2026-08-24 15:03:52 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:findings,Default:nil,Value:*true,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Build Patched,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:smoke-build,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:session-id,Default:nil,Value:*792d9b0c-3ebd-46c8-818c-9d74d8b8c946,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-workflow5xvxz/series-workflow5xvxz-convert-artifact-866875036/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": "52a98f36-2bc7-405f-9ad4-b3e3cbdd5e47", "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-workflow5xvxz/series-workflow5xvxz-build-action-2745244152/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow5xvxz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_VENDOR_INTEL","IXGBEVF","PCI_MMCONFIG","PCI_MSI"],"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":["ixgbevf_get_link_ksettings","ixgbevf_hv_check_mac_link_vf"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_VENDOR_INTEL","IXGBEVF","PCI_MMCONFIG","PCI_MSI"],"series_id":"ae690f0a-1d70-4346-bb1d-cd2c8046a0f5","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-24 15:04:02 +0000 UTC FinishedAt: 2026-08-24 15:04:02 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5xvxz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_VENDOR_INTEL","IXGBEVF","PCI_MMCONFIG","PCI_MSI"],"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":["ixgbevf_get_link_ksettings","ixgbevf_hv_check_mac_link_vf"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_VENDOR_INTEL","IXGBEVF","PCI_MMCONFIG","PCI_MSI"],"series_id":"ae690f0a-1d70-4346-bb1d-cd2c8046a0f5","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-24 15:04:02 +0000 UTC FinishedAt: 2026-08-24 15:04:02 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5xvxz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_VENDOR_INTEL","IXGBEVF","PCI_MMCONFIG","PCI_MSI"],"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":["ixgbevf_get_link_ksettings","ixgbevf_hv_check_mac_link_vf"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_VENDOR_INTEL","IXGBEVF","PCI_MMCONFIG","PCI_MSI"],"series_id":"ae690f0a-1d70-4346-bb1d-cd2c8046a0f5","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-24 15:04:02 +0000 UTC FinishedAt: 2026-08-24 15:05:50 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5xvxz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_VENDOR_INTEL","IXGBEVF","PCI_MMCONFIG","PCI_MSI"],"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":["ixgbevf_get_link_ksettings","ixgbevf_hv_check_mac_link_vf"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_VENDOR_INTEL","IXGBEVF","PCI_MMCONFIG","PCI_MSI"],"series_id":"ae690f0a-1d70-4346-bb1d-cd2c8046a0f5","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-24 15:04:02 +0000 UTC FinishedAt: 2026-08-24 15:05:41 +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:*52a98f36-2bc7-405f-9ad4-b3e3cbdd5e47,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-workflow5xvxz/series-workflow5xvxz-build-action-2745244152/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-workflow5xvxz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_VENDOR_INTEL","IXGBEVF","PCI_MMCONFIG","PCI_MSI"],"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":["ixgbevf_get_link_ksettings","ixgbevf_hv_check_mac_link_vf"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_VENDOR_INTEL","IXGBEVF","PCI_MMCONFIG","PCI_MSI"],"series_id":"ae690f0a-1d70-4346-bb1d-cd2c8046a0f5","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-24 15:05:50 +0000 UTC FinishedAt: 2026-08-24 16:09:29 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5xvxz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_VENDOR_INTEL","IXGBEVF","PCI_MMCONFIG","PCI_MSI"],"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":["ixgbevf_get_link_ksettings","ixgbevf_hv_check_mac_link_vf"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_VENDOR_INTEL","IXGBEVF","PCI_MMCONFIG","PCI_MSI"],"series_id":"ae690f0a-1d70-4346-bb1d-cd2c8046a0f5","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-24 15:05:50 +0000 UTC FinishedAt: 2026-08-24 16:09:29 +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":["ixgbevf_get_link_ksettings","ixgbevf_hv_check_mac_link_vf"],"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:*6b2dcc01-140a-4c2e-9769-b797b3e41b75,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*52a98f36-2bc7-405f-9ad4-b3e3cbdd5e47,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-workflow5xvxz/series-workflow5xvxz-build-action-3202796647/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-workflow5xvxz/series-workflow5xvxz-build-action-2745244152/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflow5xvxz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_VENDOR_INTEL","IXGBEVF","PCI_MMCONFIG","PCI_MSI"],"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":["ixgbevf_get_link_ksettings","ixgbevf_hv_check_mac_link_vf"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_VENDOR_INTEL","IXGBEVF","PCI_MMCONFIG","PCI_MSI"],"series_id":"ae690f0a-1d70-4346-bb1d-cd2c8046a0f5","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-24 15:05:50 +0000 UTC FinishedAt: 2026-08-24 15:06:01 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5xvxz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_VENDOR_INTEL","IXGBEVF","PCI_MMCONFIG","PCI_MSI"],"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":["ixgbevf_get_link_ksettings","ixgbevf_hv_check_mac_link_vf"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_VENDOR_INTEL","IXGBEVF","PCI_MMCONFIG","PCI_MSI"],"series_id":"ae690f0a-1d70-4346-bb1d-cd2c8046a0f5","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-24 15:05:50 +0000 UTC FinishedAt: 2026-08-24 15:05:55 +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":["ixgbevf_get_link_ksettings","ixgbevf_hv_check_mac_link_vf"],"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-workflow5xvxz/series-workflow5xvxz-convert-artifact-1544033893/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow5xvxz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_VENDOR_INTEL","IXGBEVF","PCI_MMCONFIG","PCI_MSI"],"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":["ixgbevf_get_link_ksettings","ixgbevf_hv_check_mac_link_vf"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_VENDOR_INTEL","IXGBEVF","PCI_MMCONFIG","PCI_MSI"],"series_id":"ae690f0a-1d70-4346-bb1d-cd2c8046a0f5","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-24 15:05:50 +0000 UTC FinishedAt: 2026-08-24 15:05:50 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5xvxz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_VENDOR_INTEL","IXGBEVF","PCI_MMCONFIG","PCI_MSI"],"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":["ixgbevf_get_link_ksettings","ixgbevf_hv_check_mac_link_vf"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_VENDOR_INTEL","IXGBEVF","PCI_MMCONFIG","PCI_MSI"],"series_id":"ae690f0a-1d70-4346-bb1d-cd2c8046a0f5","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-24 15:05:50 +0000 UTC FinishedAt: 2026-08-24 15:05:50 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5xvxz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_VENDOR_INTEL","IXGBEVF","PCI_MMCONFIG","PCI_MSI"],"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":["ixgbevf_get_link_ksettings","ixgbevf_hv_check_mac_link_vf"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_VENDOR_INTEL","IXGBEVF","PCI_MMCONFIG","PCI_MSI"],"series_id":"ae690f0a-1d70-4346-bb1d-cd2c8046a0f5","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-24 15:05:51 +0000 UTC FinishedAt: 2026-08-24 15:05:51 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5xvxz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_VENDOR_INTEL","IXGBEVF","PCI_MMCONFIG","PCI_MSI"],"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":["ixgbevf_get_link_ksettings","ixgbevf_hv_check_mac_link_vf"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_VENDOR_INTEL","IXGBEVF","PCI_MMCONFIG","PCI_MSI"],"series_id":"ae690f0a-1d70-4346-bb1d-cd2c8046a0f5","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-24 15:06:01 +0000 UTC FinishedAt: 2026-08-24 16:09:29 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5xvxz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_VENDOR_INTEL","IXGBEVF","PCI_MMCONFIG","PCI_MSI"],"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":["ixgbevf_get_link_ksettings","ixgbevf_hv_check_mac_link_vf"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_VENDOR_INTEL","IXGBEVF","PCI_MMCONFIG","PCI_MSI"],"series_id":"ae690f0a-1d70-4346-bb1d-cd2c8046a0f5","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-24 15:06:01 +0000 UTC FinishedAt: 2026-08-24 16:09:19 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*6b2dcc01-140a-4c2e-9769-b797b3e41b75,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*52a98f36-2bc7-405f-9ad4-b3e3cbdd5e47,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-workflow5xvxz/series-workflow5xvxz-build-action-3202796647/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-workflow5xvxz/series-workflow5xvxz-build-action-2745244152/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-workflow5xvxz/series-workflow5xvxz-convert-artifact-1544033893/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,}