Name: series-workflow7zc5j Phase: Succeeded StartedAt: 2026-07-03 07:22:49 +0000 UTC FinishedAt: 2026-07-03 09:42:04 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7zc5j[0] Phase: Succeeded StartedAt: 2026-07-03 07:22:49 +0000 UTC FinishedAt: 2026-07-03 07:39:25 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7zc5j[0].run-triage Phase: Succeeded StartedAt: 2026-07-03 07:22:49 +0000 UTC FinishedAt: 2026-07-03 07:39:25 +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": "c75597caada080effbfbc0a7fb10dc2a3bb543ad", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "REALTEK_PHY" ], "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": "c75597caada080effbfbc0a7fb10dc2a3bb543ad", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "REALTEK_PHY" ], "series_id": "35cfe895-1e7a-47cf-a441-1673be59f7c3" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "rtl8261x_probe", "rtl8261x_get_features", "rtl8261x_read_status", "rtl8261x_verify_firmware", "rtl8261x_fw_execute_entry", "rtl8261x_fw_load", "rtl8261x_config_intr", "rtl8261x_handle_interrupt", "rtl8261x_config_aneg", "rtl8261x_config_init", "genphy_c45_pma_soft_reset", "genphy_c45_an_setup_master_slave", "genphy_c45_read_master_slave" ], "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+CgkJCTx0ZD4yMDI2LzA3LzAzIDA3OjM1PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+NG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1JFQUxURUtfUEhZJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7cnRsODI2MXhfcHJvYmUmIzM0OywKICAgICYjMzQ7cnRsODI2MXhfZ2V0X2ZlYXR1cmVzJiMzNDssCiAgICAmIzM0O3J0bDgyNjF4X3JlYWRfc3RhdHVzJiMzNDssCiAgICAmIzM0O3J0bDgyNjF4X3ZlcmlmeV9maXJtd2FyZSYjMzQ7LAogICAgJiMzNDtydGw4MjYxeF9md19leGVjdXRlX2VudHJ5JiMzNDssCiAgICAmIzM0O3J0bDgyNjF4X2Z3X2xvYWQmIzM0OywKICAgICYjMzQ7cnRsODI2MXhfY29uZmlnX2ludHImIzM0OywKICAgICYjMzQ7cnRsODI2MXhfaGFuZGxlX2ludGVycnVwdCYjMzQ7LAogICAgJiMzNDtydGw4MjYxeF9jb25maWdfYW5lZyYjMzQ7LAogICAgJiMzNDtydGw4MjYxeF9jb25maWdfaW5pdCYjMzQ7LAogICAgJiMzNDtnZW5waHlfYzQ1X3BtYV9zb2Z0X3Jlc2V0JiMzNDssCiAgICAmIzM0O2dlbnBoeV9jNDVfYW5fc2V0dXBfbWFzdGVyX3NsYXZlJiMzNDssCiAgICAmIzM0O2dlbnBoeV9jNDVfcmVhZF9tYXN0ZXJfc2xhdmUmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcyBzdXBwb3J0IGZvciB0aGUgUmVhbHRlayBSVEw4MjYxQyAxMEdicHMgUEhZLCBpbmNsdWRpbmcgZmlybXdhcmUgbG9hZGluZyBhbmQgcGFyc2luZywgYW5kIG5ldyBDbGF1c2UgNDUgbWFzdGVyL3NsYXZlIGNvbmZpZ3VyYXRpb24gZnVuY3Rpb25zLiBUaGlzIGNvZGUgaXMgcmVhY2hhYmxlIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBieSBlbXVsYXRpbmcgYSBVU0IgbmV0d29yayBhZGFwdGVyIHRoYXQgcmVnaXN0ZXJzIGFuIE1ESU8gYnVzIGFuZCByZXNwb25kcyB3aXRoIHRoZSBSVEw4MjYxQyBQSFkgSUQuIFRoZSBmaXJtd2FyZSBwYXJzaW5nIGxvZ2ljIGlzIHBhcnRpY3VsYXJseSBpbnRlcmVzdGluZyBmb3IgZnV6emluZyBhcyBpdCBwcm9jZXNzZXMgZXh0ZXJuYWwgZGF0YS4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMyAwNzozNTwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IDA2MWQzZjczMTRkNGYyYjAyNmVhNTEwYmY4MTFhZWYyYjVhNzlmZWVcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgRnJpIEp1bCAzIDA3OjM1OjA0IDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3BoeS9waHktYzQ1LmMgYi9kcml2ZXJzL25ldC9waHkvcGh5LWM0NS5jXG5pbmRleCAxMjY5NTE3NDE0Mjg4Zi4uODcwOTIwMzExZjlhMDEgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9waHkvcGh5LWM0NS5jXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9waHkvcGh5LWM0NS5jXG5AQCAtMzg0LDYgJiM0MzszODQsMTE5IEBAIGludCBnZW5waHlfYzQ1X2NoZWNrX2FuZF9yZXN0YXJ0X2FuZWcoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldiwgYm9vbCByZXN0YXJ0KVxuIH1cbiBFWFBPUlRfU1lNQk9MX0dQTChnZW5waHlfYzQ1X2NoZWNrX2FuZF9yZXN0YXJ0X2FuZWcpO1xuIFxuJiM0MzsvKipcbiYjNDM7ICogZ2VucGh5X2M0NV9wbWFfc29mdF9yZXNldCAtIHNvZnR3YXJlIHJlc2V0IHRoZSBQSFkgdmlhIENsYXVzZSA0NSBQTUEvUE1EIGNvbnRyb2wgcmVnaXN0ZXJcbiYjNDM7ICogQHBoeWRldjogdGFyZ2V0IHBoeV9kZXZpY2Ugc3RydWN0XG4mIzQzOyAqXG4mIzQzOyAqIFJldHVybjogMCBvbiBzdWNjZXNzLCBuZWdhdGl2ZSBlcnJubyBvbiBmYWlsdXJlLlxuJiM0MzsgKi9cbiYjNDM7aW50IGdlbnBoeV9jNDVfcG1hX3NvZnRfcmVzZXQoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcbiYjNDM7e1xuJiM0MztcdGludCByZXQsIHZhbDtcbiYjNDM7XG4mIzQzO1x0cmV0ID0gcGh5X3NldF9iaXRzX21tZChwaHlkZXYsIE1ESU9fTU1EX1BNQVBNRCwgTURJT19DVFJMMSxcbiYjNDM7XHRcdFx0ICAgICAgIE1ESU9fQ1RSTDFfUkVTRVQpO1xuJiM0MztcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRyZXR1cm4gcmV0O1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gcGh5X3JlYWRfbW1kX3BvbGxfdGltZW91dChwaHlkZXYsIE1ESU9fTU1EX1BNQVBNRCxcbiYjNDM7XHRcdFx0XHRcdCBNRElPX0NUUkwxLCB2YWwsXG4mIzQzO1x0XHRcdFx0XHQgISh2YWwgXHUwMDI2IE1ESU9fQ1RSTDFfUkVTRVQpLFxuJiM0MztcdFx0XHRcdFx0IDUwMDAsIDYwMDAwMCwgdHJ1ZSk7XG4mIzQzO31cbiYjNDM7RVhQT1JUX1NZTUJPTF9HUEwoZ2VucGh5X2M0NV9wbWFfc29mdF9yZXNldCk7XG4mIzQzO1xuJiM0MzsvKipcbiYjNDM7ICogZ2VucGh5X2M0NV9hbl9zZXR1cF9tYXN0ZXJfc2xhdmUgLSBDb25maWd1cmUgTWFzdGVyL1NsYXZlIHNldHRpbmcgZm9yIEM0NSBQSFlzXG4mIzQzOyAqIEBwaHlkZXY6IHRhcmdldCBwaHlfZGV2aWNlIHN0cnVjdFxuJiM0MzsgKlxuJiM0MzsgKiBEZXNjcmlwdGlvbjogQ29uZmlndXJlIHRoZSBmb3JjZWQgb3IgcHJlZmVycmVkIE1hc3Rlci9TbGF2ZSByb2xlXG4mIzQzOyAqIDEwR0JBU0UtVCBjb250cm9sIHJlZ2lzdGVyIChNTUQgNywgUmVnaXN0ZXIgMHgwMDIwKSBhY2NvcmRpbmcgdG9cbiYjNDM7ICogSUVFRSA4MDIuMyBzdGFuZGFyZHMuXG4mIzQzOyAqXG4mIzQzOyAqIFJldHVybjogbmVnYXRpdmUgZXJybm8gY29kZSBvbiBmYWlsdXJlLCAwIGlmIE1hc3Rlci9TbGF2ZSBkaWRuJiMzOTt0IGNoYW5nZSxcbiYjNDM7ICogb3IgMSBpZiBNYXN0ZXIvU2xhdmUgbW9kZXMgY2hhbmdlZC5cbiYjNDM7ICovXG4mIzQzO3N0YXRpYyBpbnQgZ2VucGh5X2M0NV9hbl9zZXR1cF9tYXN0ZXJfc2xhdmUoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcbiYjNDM7e1xuJiM0MztcdHUxNiBjdGwgPSAwO1xuJiM0MztcbiYjNDM7XHRzd2l0Y2ggKHBoeWRldi1cdTAwM2VtYXN0ZXJfc2xhdmVfc2V0KSB7XG4mIzQzO1x0Y2FzZSBNQVNURVJfU0xBVkVfQ0ZHX01BU1RFUl9QUkVGRVJSRUQ6XG4mIzQzO1x0XHRjdGwgPSBNRElPX0FOXzEwR0JUX0NUUkxfTVNfUE9SVF9UWVBFO1xuJiM0MztcdFx0YnJlYWs7XG4mIzQzO1x0Y2FzZSBNQVNURVJfU0xBVkVfQ0ZHX1NMQVZFX1BSRUZFUlJFRDpcbiYjNDM7XHRcdGJyZWFrO1xuJiM0MztcdGNhc2UgTUFTVEVSX1NMQVZFX0NGR19NQVNURVJfRk9SQ0U6XG4mIzQzO1x0XHRjdGwgPSBNRElPX0FOXzEwR0JUX0NUUkxfTVNfRU5BQkxFIHwgTURJT19BTl8xMEdCVF9DVFJMX01TX1ZBTFVFO1xuJiM0MztcdFx0YnJlYWs7XG4mIzQzO1x0Y2FzZSBNQVNURVJfU0xBVkVfQ0ZHX1NMQVZFX0ZPUkNFOlxuJiM0MztcdFx0Y3RsID0gTURJT19BTl8xMEdCVF9DVFJMX01TX0VOQUJMRTtcbiYjNDM7XHRcdGJyZWFrO1xuJiM0MztcdGNhc2UgTUFTVEVSX1NMQVZFX0NGR19VTktOT1dOOlxuJiM0MztcdGNhc2UgTUFTVEVSX1NMQVZFX0NGR19VTlNVUFBPUlRFRDpcbiYjNDM7XHRcdHJldHVybiAwO1xuJiM0MztcdGRlZmF1bHQ6XG4mIzQzO1x0XHRwaHlkZXZfd2FybihwaHlkZXYsIFwmIzM0O1Vuc3VwcG9ydGVkIE1hc3Rlci9TbGF2ZSBtb2RlXFxuXCYjMzQ7KTtcbiYjNDM7XHRcdHJldHVybiAtRU9QTk9UU1VQUDtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdHJldHVybiBwaHlfbW9kaWZ5X21tZF9jaGFuZ2VkKHBoeWRldiwgTURJT19NTURfQU4sIE1ESU9fQU5fMTBHQlRfQ1RSTCxcbiYjNDM7XHRcdFx0XHQgICAgICBNRElPX0FOXzEwR0JUX0NUUkxfTVNfRU5BQkxFIHxcbiYjNDM7XHRcdFx0XHQgICAgICBNRElPX0FOXzEwR0JUX0NUUkxfTVNfVkFMVUUgfFxuJiM0MztcdFx0XHRcdCAgICAgIE1ESU9fQU5fMTBHQlRfQ1RSTF9NU19QT1JUX1RZUEUsIGN0bCk7XG4mIzQzO31cbiYjNDM7XG4mIzQzOy8qKlxuJiM0MzsgKiBnZW5waHlfYzQ1X3JlYWRfbWFzdGVyX3NsYXZlIC0gcmVhZCBtYXN0ZXIvc2xhdmUgc3RhdHVzXG4mIzQzOyAqIEBwaHlkZXY6IHRhcmdldCBwaHlfZGV2aWNlIHN0cnVjdFxuJiM0MzsgKlxuJiM0MzsgKiBEZXNjcmlwdGlvbjogUmVhZCB0aGUgTWFzdGVyL1NsYXZlIGNvbmZpZ3VyYXRpb24gYW5kIHN0YXR1c1xuJiM0MzsgKiBmcm9tIDEwR0JBU0UtVCBjb250cm9sL3N0YXR1cyByZWdpc3RlcnMgKE1NRCA3LCBSZWcgMHgwMDIwIGFuZCAweDAwMjEpLlxuJiM0MzsgKlxuJiM0MzsgKiBSZXR1cm46IDAgb24gc3VjY2Vzcywgb3IgYSBuZWdhdGl2ZSBlcnJvciBjb2RlIG9uIGZhaWx1cmUuXG4mIzQzOyAqL1xuJiM0MztzdGF0aWMgaW50IGdlbnBoeV9jNDVfcmVhZF9tYXN0ZXJfc2xhdmUoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcbiYjNDM7e1xuJiM0MztcdGludCB2YWw7XG4mIzQzO1xuJiM0MztcdHBoeWRldi1cdTAwM2VtYXN0ZXJfc2xhdmVfZ2V0ID0gTUFTVEVSX1NMQVZFX0NGR19VTktOT1dOO1xuJiM0MztcdHBoeWRldi1cdTAwM2VtYXN0ZXJfc2xhdmVfc3RhdGUgPSBNQVNURVJfU0xBVkVfU1RBVEVfVU5LTk9XTjtcbiYjNDM7XG4mIzQzO1x0dmFsID0gcGh5X3JlYWRfbW1kKHBoeWRldiwgTURJT19NTURfQU4sIE1ESU9fQU5fMTBHQlRfQ1RSTCk7XG4mIzQzO1x0aWYgKHZhbCBcdTAwM2MgMClcbiYjNDM7XHRcdHJldHVybiB2YWw7XG4mIzQzO1xuJiM0MztcdGlmICh2YWwgXHUwMDI2IE1ESU9fQU5fMTBHQlRfQ1RSTF9NU19FTkFCTEUpIHtcbiYjNDM7XHRcdGlmICh2YWwgXHUwMDI2IE1ESU9fQU5fMTBHQlRfQ1RSTF9NU19WQUxVRSlcbiYjNDM7XHRcdFx0cGh5ZGV2LVx1MDAzZW1hc3Rlcl9zbGF2ZV9nZXQgPSBNQVNURVJfU0xBVkVfQ0ZHX01BU1RFUl9GT1JDRTtcbiYjNDM7XHRcdGVsc2VcbiYjNDM7XHRcdFx0cGh5ZGV2LVx1MDAzZW1hc3Rlcl9zbGF2ZV9nZXQgPSBNQVNURVJfU0xBVkVfQ0ZHX1NMQVZFX0ZPUkNFO1xuJiM0MztcdH0gZWxzZSB7XG4mIzQzO1x0XHRpZiAodmFsIFx1MDAyNiBNRElPX0FOXzEwR0JUX0NUUkxfTVNfUE9SVF9UWVBFKVxuJiM0MztcdFx0XHRwaHlkZXYtXHUwMDNlbWFzdGVyX3NsYXZlX2dldCA9IE1BU1RFUl9TTEFWRV9DRkdfTUFTVEVSX1BSRUZFUlJFRDtcbiYjNDM7XHRcdGVsc2VcbiYjNDM7XHRcdFx0cGh5ZGV2LVx1MDAzZW1hc3Rlcl9zbGF2ZV9nZXQgPSBNQVNURVJfU0xBVkVfQ0ZHX1NMQVZFX1BSRUZFUlJFRDtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdHZhbCA9IHBoeV9yZWFkX21tZChwaHlkZXYsIE1ESU9fTU1EX0FOLCBNRElPX0FOXzEwR0JUX1NUQVQpO1xuJiM0MztcdGlmICh2YWwgXHUwMDNjIDApXG4mIzQzO1x0XHRyZXR1cm4gdmFsO1xuJiM0MztcbiYjNDM7XHRpZiAodmFsIFx1MDAyNiBNRElPX0FOXzEwR0JUX1NUQVRfTVNfRkFVTFQpIHtcbiYjNDM7XHRcdHBoeWRldi1cdTAwM2VtYXN0ZXJfc2xhdmVfc3RhdGUgPSBNQVNURVJfU0xBVkVfU1RBVEVfRVJSO1xuJiM0MztcdH0gZWxzZSBpZiAocGh5ZGV2LVx1MDAzZWxpbmspIHtcbiYjNDM7XHRcdGlmICh2YWwgXHUwMDI2IE1ESU9fQU5fMTBHQlRfU1RBVF9NU19SRVMpXG4mIzQzO1x0XHRcdHBoeWRldi1cdTAwM2VtYXN0ZXJfc2xhdmVfc3RhdGUgPSBNQVNURVJfU0xBVkVfU1RBVEVfTUFTVEVSO1xuJiM0MztcdFx0ZWxzZVxuJiM0MztcdFx0XHRwaHlkZXYtXHUwMDNlbWFzdGVyX3NsYXZlX3N0YXRlID0gTUFTVEVSX1NMQVZFX1NUQVRFX1NMQVZFO1xuJiM0MztcdH0gZWxzZSB7XG4mIzQzO1x0XHRwaHlkZXYtXHUwMDNlbWFzdGVyX3NsYXZlX3N0YXRlID0gTUFTVEVSX1NMQVZFX1NUQVRFX1VOS05PV047XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRyZXR1cm4gMDtcbiYjNDM7fVxuJiM0MztcbiAvKipcbiAgKiBnZW5waHlfYzQ1X2FuZWdfZG9uZSAtIHJldHVybiBhdXRvLW5lZ290aWF0aW9uIGNvbXBsZXRlIHN0YXR1c1xuICAqIEBwaHlkZXY6IHRhcmdldCBwaHlfZGV2aWNlIHN0cnVjdFxuQEAgLTExOTIsNiAmIzQzOzEzMDUsMTAgQEAgaW50IGdlbnBoeV9jNDVfcmVhZF9zdGF0dXMoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcbiBcdFx0XHRyZXQgPSBnZW5waHlfYzQ1X2Jhc2V0MV9yZWFkX3N0YXR1cyhwaHlkZXYpO1xuIFx0XHRcdGlmIChyZXQgXHUwMDNjIDApXG4gXHRcdFx0XHRyZXR1cm4gcmV0O1xuJiM0MztcdFx0fSBlbHNlIHtcbiYjNDM7XHRcdFx0cmV0ID0gZ2VucGh5X2M0NV9yZWFkX21hc3Rlcl9zbGF2ZShwaHlkZXYpO1xuJiM0MztcdFx0XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0XHRcdHJldHVybiByZXQ7XG4gXHRcdH1cbiBcbiBcdFx0cGh5X3Jlc29sdmVfYW5lZ19saW5rbW9kZShwaHlkZXYpO1xuQEAgLTEyMjUsNiAmIzQzOzEzNDIsMTQgQEAgaW50IGdlbnBoeV9jNDVfY29uZmlnX2FuZWcoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcbiBcdGlmIChyZXQgXHUwMDNlIDApXG4gXHRcdGNoYW5nZWQgPSB0cnVlO1xuIFxuJiM0MztcdGlmICghZ2VucGh5X2M0NV9iYXNldDFfYWJsZShwaHlkZXYpKSB7XG4mIzQzO1x0XHRyZXQgPSBnZW5waHlfYzQ1X2FuX3NldHVwX21hc3Rlcl9zbGF2ZShwaHlkZXYpO1xuJiM0MztcdFx0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdFx0cmV0dXJuIHJldDtcbiYjNDM7XHRcdGlmIChyZXQgXHUwMDNlIDApXG4mIzQzO1x0XHRcdGNoYW5nZWQgPSB0cnVlO1xuJiM0MztcdH1cbiYjNDM7XG4gXHRyZXR1cm4gZ2VucGh5X2M0NV9jaGVja19hbmRfcmVzdGFydF9hbmVnKHBoeWRldiwgY2hhbmdlZCk7XG4gfVxuIEVYUE9SVF9TWU1CT0xfR1BMKGdlbnBoeV9jNDVfY29uZmlnX2FuZWcpO1xuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3BoeS9yZWFsdGVrL3JlYWx0ZWtfbWFpbi5jIGIvZHJpdmVycy9uZXQvcGh5L3JlYWx0ZWsvcmVhbHRla19tYWluLmNcbmluZGV4IDI3MjY4ODExZjU2NGYyLi42OGEyZGUwYjJiZDNiYSAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L3BoeS9yZWFsdGVrL3JlYWx0ZWtfbWFpbi5jXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9waHkvcmVhbHRlay9yZWFsdGVrX21haW4uY1xuQEAgLTgsNyAmIzQzOzgsOSBAQFxuICAqIENvcHlyaWdodCAoYykgMjAwNCBGcmVlc2NhbGUgU2VtaWNvbmR1Y3RvciwgSW5jLlxuICAqL1xuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2JpdG9wcy5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L2NyYzMyLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9ldGh0b29sX25ldGxpbmsuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC9maXJtd2FyZS5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvb2YuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3BoeS5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvcG1fd2FrZWlycS5oXHUwMDNlXG5AQCAtMTQxLDYgJiM0MzsxNDMsMTAgQEBcbiAjZGVmaW5lIFJUTDgyMTFGX1BIWVNJQ0FMX0FERFJfV09SRDFcdFx0MTdcbiAjZGVmaW5lIFJUTDgyMTFGX1BIWVNJQ0FMX0FERFJfV09SRDJcdFx0MThcbiBcbiYjNDM7I2RlZmluZSBSVEw4MjYxWF9FWFRfQUREUl9SRUdcdFx0XHQweGE0MzZcbiYjNDM7I2RlZmluZSBSVEw4MjYxWF9FWFRfREFUQV9SRUdcdFx0XHQweGE0MzhcbiYjNDM7I2RlZmluZSBSVExfODI2MVhfU1VCX1BIWV9JRF9BRERSXHRcdDB4ODAxZFxuJiM0MztcbiAjZGVmaW5lIFJUTDgyMlhfVk5EMV9TRVJERVNfT1BUSU9OXHRcdFx0MHg2OTdhXG4gI2RlZmluZSBSVEw4MjJYX1ZORDFfU0VSREVTX09QVElPTl9NT0RFX01BU0tcdFx0R0VOTUFTSyg1LCAwKVxuICNkZWZpbmUgUlRMODIyWF9WTkQxX1NFUkRFU19PUFRJT05fTU9ERV8yNTAwQkFTRVhfU0dNSUlcdFx0MFxuQEAgLTI1MSw2ICYjNDM7MjU3LDY5IEBAXG4gI2RlZmluZSBSVExfODIyMUJfVk1fQ0dcdFx0XHRcdDB4MDAxY2M4NGFcbiAjZGVmaW5lIFJUTF84MjUxQlx0XHRcdFx0MHgwMDFjYzg2MlxuICNkZWZpbmUgUlRMXzgyNjFDXHRcdFx0XHQweDAwMWNjODkwXG4mIzQzOyNkZWZpbmUgUlRMXzgyNjFDX0NHXHRcdFx0XHQweDAwMWNjODk4XG4mIzQzO1xuJiM0MzsjZGVmaW5lIFJUTDgyNjFDX0NFX01PREVMXHRcdDB4MDBcbiYjNDM7I2RlZmluZSBSVEw4MjYxWF9JTlRfQVVUT05FR19FUlJPUlx0QklUKDApXG4mIzQzOyNkZWZpbmUgUlRMODI2MVhfSU5UX1BBR0VfUkVDVlx0XHRCSVQoMilcbiYjNDM7I2RlZmluZSBSVEw4MjYxWF9JTlRfQVVUT05FR19ET05FXHRCSVQoMylcbiYjNDM7I2RlZmluZSBSVEw4MjYxWF9JTlRfTElOS19DSEdcdFx0QklUKDQpXG4mIzQzOyNkZWZpbmUgUlRMODI2MVhfSU5UX1BIWV9SRUdfQUNDRVNTXHRCSVQoNSlcbiYjNDM7I2RlZmluZSBSVEw4MjYxWF9JTlRfUE1FXHRcdEJJVCg3KVxuJiM0MzsjZGVmaW5lIFJUTDgyNjFYX0lOVF9BTERQU19DSEdcdFx0QklUKDkpXG4mIzQzOyNkZWZpbmUgUlRMODI2MVhfSU5UX0pBQkJFUlx0XHRCSVQoMTApXG4mIzQzO1xuJiM0MzsjZGVmaW5lIFJUTDgyNjFYX0lOVF9NQVNLX0RFRkFVTFRcdChSVEw4MjYxWF9JTlRfQVVUT05FR19ET05FIHwgXFxcbiYjNDM7XHRcdFx0XHRcdCBSVEw4MjYxWF9JTlRfTElOS19DSEcgfCBcXFxuJiM0MztcdFx0XHRcdFx0IFJUTDgyNjFYX0lOVF9BVVRPTkVHX0VSUk9SIHwgXFxcbiYjNDM7XHRcdFx0XHRcdCBSVEw4MjYxWF9JTlRfSkFCQkVSKVxuJiM0MztcbiYjNDM7I2RlZmluZSBSVEw4MjYxWF9JTlRfTUFTS19BTExcdFx0KFJUTDgyNjFYX0lOVF9BVVRPTkVHX0VSUk9SIHwgXFxcbiYjNDM7XHRcdFx0XHRcdCBSVEw4MjYxWF9JTlRfUEFHRV9SRUNWIHwgXFxcbiYjNDM7XHRcdFx0XHRcdCBSVEw4MjYxWF9JTlRfQVVUT05FR19ET05FIHwgXFxcbiYjNDM7XHRcdFx0XHRcdCBSVEw4MjYxWF9JTlRfTElOS19DSEcgfCBcXFxuJiM0MztcdFx0XHRcdFx0IFJUTDgyNjFYX0lOVF9QSFlfUkVHX0FDQ0VTUyB8IFxcXG4mIzQzO1x0XHRcdFx0XHQgUlRMODI2MVhfSU5UX1BNRSB8IFxcXG4mIzQzO1x0XHRcdFx0XHQgUlRMODI2MVhfSU5UX0FMRFBTX0NIRyB8IFxcXG4mIzQzO1x0XHRcdFx0XHQgUlRMODI2MVhfSU5UX0pBQkJFUilcbiYjNDM7XG4mIzQzOyNkZWZpbmUgRldfTUFJTl9NQUdJQ1x0XHRcdDB4NTI1NDRDMzhcbiYjNDM7I2RlZmluZSBGV19TVUJfTUFHSUNfODI2MUNcdFx0MHgzMjM2MzE0M1xuJiM0MzsjZGVmaW5lIFJUTDgyNjFYX1BPTExfVElNRU9VVF9NU1x0MTAwXG4mIzQzOyNkZWZpbmUgUlRMODI2MVhfTUFYX01NRF9ERVZcdFx0MzFcbiYjNDM7XG4mIzQzOyNkZWZpbmUgUlRMODI2MUNfQ0VfRldfTkFNRVx0XCYjMzQ7cnRsX25pYy9ydGw4MjYxYy5iaW5cJiMzNDtcbiYjNDM7TU9EVUxFX0ZJUk1XQVJFKFJUTDgyNjFDX0NFX0ZXX05BTUUpO1xuJiM0MztcbiYjNDM7ZW51bSBydGw4MjYxeF9md19vcCB7XG4mIzQzO1x0T1BfV1JJVEUgPSAweDAwLFx0LyogV3JpdGUgKi9cbiYjNDM7XHRPUF9QT0xMICA9IDB4MDIsXHQvKiBQb2xsaW5nICovXG4mIzQzO307XG4mIzQzO1xuJiM0MztzdHJ1Y3QgcnRsODI2MXhfZndfaGVhZGVyIHtcbiYjNDM7XHRfX2xlMzIgbWFpbl9tYWdpYztcdC8qIE1haW4gbWFnaWMgbnVtYmVyICovXG4mIzQzO1x0X19sZTMyIHN1Yl9tYWdpYztcdC8qIFN1YiBtYWdpYyBudW1iZXIgKi9cbiYjNDM7XHRfX2xlMTYgdmVyc2lvbl9tYWpvcjtcdC8qIE1ham9yIHZlcnNpb24gKi9cbiYjNDM7XHRfX2xlMTYgdmVyc2lvbl9taW5vcjtcdC8qIE1pbm9yIHZlcnNpb24gKi9cbiYjNDM7XHRfX2xlMTYgbnVtX2VudHJpZXM7XHQvKiBOdW1iZXIgb2YgZW50cmllcyAqL1xuJiM0MztcdF9fbGUxNiByZXNlcnZlZDtcdC8qIFJlc2VydmVkICovXG4mIzQzO1x0X19sZTMyIGNyYzMyO1x0XHQvKiBDUkMzMiBjaGVja3N1bSAqL1xuJiM0Mzt9O1xuJiM0MztcbiYjNDM7c3RydWN0IHJ0bDgyNjF4X2Z3X2VudHJ5IHtcbiYjNDM7XHRfX3U4ICB0eXBlO1x0XHQvKiBPcGVyYXRpb24gdHlwZSAoT1BfKikgKi9cbiYjNDM7XHRfX3U4ICBkZXY7XHRcdC8qIE1NRCBkZXZpY2UgKi9cbiYjNDM7XHRfX2xlMTYgYWRkcjtcdFx0LyogUmVnaXN0ZXIgYWRkcmVzcyAqL1xuJiM0MztcdF9fdTggIG1zYjtcdFx0LyogTVNCIGJpdCBwb3NpdGlvbiAqL1xuJiM0MztcdF9fdTggIGxzYjtcdFx0LyogTFNCIGJpdCBwb3NpdGlvbiAqL1xuJiM0MztcdF9fbGUxNiB2YWx1ZTtcdFx0LyogVmFsdWUgdG8gd3JpdGUvY29tcGFyZSAqL1xuJiM0MztcdF9fbGUxNiB0aW1lb3V0X21zO1x0LyogUG9sbCB0aW1lb3V0IGluIG1pbGxpc2Vjb25kcyAqL1xuJiM0MztcdF9fdTggIHBvbGxfc2V0O1x0XHQvKiBQb2xsIHVudGlsIGVxdWFsICgxKSBvciBub3QgZXF1YWwgKDApICovXG4mIzQzO1x0X191OCAgcmVzZXJ2ZWQ7XHRcdC8qIFJlc2VydmVkICovXG4mIzQzO307XG4mIzQzO1xuJiM0MzsjZGVmaW5lIEZXX0hFQURFUl9TSVpFXHRcdHNpemVvZihzdHJ1Y3QgcnRsODI2MXhfZndfaGVhZGVyKVxuJiM0MzsjZGVmaW5lIEZXX0VOVFJZX1NJWkVcdFx0c2l6ZW9mKHN0cnVjdCBydGw4MjYxeF9md19lbnRyeSlcbiBcbiAvKiBSVEw4MjExRSBhbmQgUlRMODIxMUYgc3VwcG9ydCB1cCB0byB0aHJlZSBMRURzICovXG4gI2RlZmluZSBSVEw4MjExeF9MRURfQ09VTlRcdFx0XHQzXG5AQCAtMjcwLDYgJiM0MzszMzksMTEgQEAgc3RydWN0IHJ0bDgyMXhfcHJpdiB7XG4gXHR1MTYgaW5lcjtcbiB9O1xuIFxuJiM0MztzdHJ1Y3QgcnRsODI2MXhfcHJpdiB7XG4mIzQzO1x0Y29uc3QgY2hhciAqZndfbmFtZTtcbiYjNDM7XHRib29sIGZ3X2xvYWRlZDtcbiYjNDM7fTtcbiYjNDM7XG4gc3RhdGljIGludCBydGw4MjF4X3JlYWRfcGFnZShzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxuIHtcbiBcdHJldHVybiBfX3BoeV9yZWFkKHBoeWRldiwgUlRMODIxeF9QQUdFX1NFTEVDVCk7XG5AQCAtMzEwLDYgJiM0MzszODQsMzI1IEBAIHN0YXRpYyBpbnQgcnRsODIxeF9tb2RpZnlfZXh0X3BhZ2Uoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldiwgdTE2IGV4dF9wYWdlLFxuIFx0cmV0dXJuIHBoeV9yZXN0b3JlX3BhZ2UocGh5ZGV2LCBvbGRwYWdlLCByZXQpO1xuIH1cbiBcbiYjNDM7c3RhdGljIGludCBydGw4MjYxeF9wcm9iZShzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IGRldmljZSAqZGV2ID0gXHUwMDI2cGh5ZGV2LVx1MDAzZW1kaW8uZGV2O1xuJiM0MztcdHN0cnVjdCBydGw4MjYxeF9wcml2ICpwcml2O1xuJiM0MztcdGludCBzdWJfcGh5X2lkLCByZXQ7XG4mIzQzO1xuJiM0MztcdHByaXYgPSBkZXZtX2t6YWxsb2MoZGV2LCBzaXplb2YoKnByaXYpLCBHRlBfS0VSTkVMKTtcbiYjNDM7XHRpZiAoIXByaXYpXG4mIzQzO1x0XHRyZXR1cm4gLUVOT01FTTtcbiYjNDM7XG4mIzQzO1x0cGh5ZGV2LVx1MDAzZXByaXYgPSBwcml2O1xuJiM0MztcbiYjNDM7XHRyZXQgPSBwaHlfd3JpdGVfbW1kKHBoeWRldiwgTURJT19NTURfVkVORDIsIFJUTDgyNjFYX0VYVF9BRERSX1JFRyxcbiYjNDM7XHRcdFx0ICAgIFJUTF84MjYxWF9TVUJfUEhZX0lEX0FERFIpO1xuJiM0MztcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRyZXR1cm4gcmV0O1xuJiM0MztcbiYjNDM7XHRyZXQgPSBwaHlfcmVhZF9tbWQocGh5ZGV2LCBNRElPX01NRF9WRU5EMiwgUlRMODI2MVhfRVhUX0RBVEFfUkVHKTtcbiYjNDM7XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0cmV0dXJuIHJldDtcbiYjNDM7XG4mIzQzO1x0c3ViX3BoeV9pZCA9IChyZXQgXHUwMDNlXHUwMDNlIDgpIFx1MDAyNiAweGZmO1xuJiM0MztcbiYjNDM7XHRzd2l0Y2ggKHN1Yl9waHlfaWQpIHtcbiYjNDM7XHRjYXNlIFJUTDgyNjFDX0NFX01PREVMOlxuJiM0MztcdFx0cHJpdi1cdTAwM2Vmd19uYW1lID0gUlRMODI2MUNfQ0VfRldfTkFNRTtcbiYjNDM7XHRcdHBoeWRldl9pbmZvKHBoeWRldiwgXCYjMzQ7UlRMODI2MUMgZGV0ZWN0ZWQgKHN1Yl9pZCAweCUwMngpXFxuXCYjMzQ7LCBzdWJfcGh5X2lkKTtcbiYjNDM7XHRcdGJyZWFrO1xuJiM0MztcbiYjNDM7XHRkZWZhdWx0OlxuJiM0MztcdFx0cGh5ZGV2X3dhcm4ocGh5ZGV2LCBcJiMzNDtVbmtub3duIHN1Yl9pZCAweCUwMngsIGRlZmF1bHQgYmVoYXZpb3JcXG5cJiMzNDssIHN1Yl9waHlfaWQpO1xuJiM0MztcdFx0cmV0dXJuIC1FTk9ERVY7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRyZXR1cm4gMDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGludCBydGw4MjYxeF9nZXRfZmVhdHVyZXMoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcbiYjNDM7e1xuJiM0MztcdGludCByZXQ7XG4mIzQzO1xuJiM0MztcdHJldCA9IGdlbnBoeV9jNDVfcG1hX3JlYWRfYWJpbGl0aWVzKHBoeWRldik7XG4mIzQzO1x0aWYgKHJldClcbiYjNDM7XHRcdHJldHVybiByZXQ7XG4mIzQzO1x0LypcbiYjNDM7XHQgKiBTdXBwbGVtZW50IE11bHRpLUdpZyBzcGVlZHMgdGhhdCBtYXkgbm90IGJlIGF1dG9tYXRpY2FsbHkgZGV0ZWN0ZWRcbiYjNDM7XHQgKiBSVEw4MjYxWCBzdXBwb3J0cyAyLjVHLzVHIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIDEwR1xuJiM0MztcdCAqL1xuJiM0MztcdGxpbmttb2RlX3NldF9iaXQoRVRIVE9PTF9MSU5LX01PREVfMjUwMGJhc2VUX0Z1bGxfQklULFxuJiM0MztcdFx0XHQgcGh5ZGV2LVx1MDAzZXN1cHBvcnRlZCk7XG4mIzQzO1x0bGlua21vZGVfc2V0X2JpdChFVEhUT09MX0xJTktfTU9ERV81MDAwYmFzZVRfRnVsbF9CSVQsXG4mIzQzO1x0XHRcdCBwaHlkZXYtXHUwMDNlc3VwcG9ydGVkKTtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIDA7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBpbnQgcnRsODI2MXhfcmVhZF9zdGF0dXMoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcbiYjNDM7e1xuJiM0MztcdGludCByZXQsIHZhbCA9IDA7XG4mIzQzO1xuJiM0MztcdGlmIChwaHlkZXYtXHUwMDNlYXV0b25lZyA9PSBBVVRPTkVHX0VOQUJMRSkge1xuJiM0MztcdFx0cmV0ID0gZ2VucGh5X2M0NV9hbmVnX2RvbmUocGh5ZGV2KTtcbiYjNDM7XHRcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRcdHJldHVybiByZXQ7XG4mIzQzO1xuJiM0MztcdFx0aWYgKHJldCkge1xuJiM0MztcdFx0XHR2YWwgPSBwaHlfcmVhZF9tbWQocGh5ZGV2LCBNRElPX01NRF9WRU5EMixcbiYjNDM7XHRcdFx0XHRcdCAgIFJUTDgyMlhfVk5EMl9DMjJfUkVHKE1JSV9TVEFUMTAwMCkpO1xuJiM0MztcdFx0XHRpZiAodmFsIFx1MDAzYyAwKVxuJiM0MztcdFx0XHRcdHJldHVybiB2YWw7XG4mIzQzO1x0XHR9XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRtaWlfc3RhdDEwMDBfbW9kX2xpbmttb2RlX2xwYV90KHBoeWRldi1cdTAwM2VscF9hZHZlcnRpc2luZywgdmFsKTtcbiYjNDM7XG4mIzQzO1x0cmV0ID0gZ2VucGh5X2M0NV9yZWFkX3N0YXR1cyhwaHlkZXYpO1xuJiM0MztcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRyZXR1cm4gcmV0O1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gMDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGludCBydGw4MjYxeF92ZXJpZnlfZmlybXdhcmUoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldiwgY29uc3Qgc3RydWN0IGZpcm13YXJlICpmdylcbiYjNDM7e1xuJiM0MztcdGNvbnN0IHN0cnVjdCBydGw4MjYxeF9md19oZWFkZXIgKmhkcjtcbiYjNDM7XHR1MzIgbWFpbl9tYWdpYywgc3ViX21hZ2ljO1xuJiM0MztcdHUzMiBjYWxjX2NyYywgZmlsZV9jcmM7XG4mIzQzO1x0c2l6ZV90IGRhdGFfbGVuO1xuJiM0MztcdHUxNiBudW1fZW50cmllcztcbiYjNDM7XG4mIzQzO1x0aWYgKGZ3LVx1MDAzZXNpemUgXHUwMDNjIEZXX0hFQURFUl9TSVpFKSB7XG4mIzQzO1x0XHRwaHlkZXZfZXJyKHBoeWRldiwgXCYjMzQ7RmlybXdhcmUgdG9vIHNtYWxsOiAlenUgYnl0ZXNcXG5cJiMzNDssIGZ3LVx1MDAzZXNpemUpO1xuJiM0MztcdFx0cmV0dXJuIC1FSU5WQUw7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRoZHIgPSAoY29uc3Qgc3RydWN0IHJ0bDgyNjF4X2Z3X2hlYWRlciAqKWZ3LVx1MDAzZWRhdGE7XG4mIzQzO1xuJiM0MztcdG1haW5fbWFnaWMgPSBsZTMyX3RvX2NwdShoZHItXHUwMDNlbWFpbl9tYWdpYyk7XG4mIzQzO1x0aWYgKG1haW5fbWFnaWMgIT0gRldfTUFJTl9NQUdJQykge1xuJiM0MztcdFx0cGh5ZGV2X2VycihwaHlkZXYsIFwmIzM0O0ludmFsaWQgZmlybXdhcmUgbWFnaWM6IDB4JTA4eFxcblwmIzM0OywgbWFpbl9tYWdpYyk7XG4mIzQzO1x0XHRyZXR1cm4gLUVJTlZBTDtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdHN1Yl9tYWdpYyA9IGxlMzJfdG9fY3B1KGhkci1cdTAwM2VzdWJfbWFnaWMpO1xuJiM0MztcdGlmIChzdWJfbWFnaWMgIT0gRldfU1VCX01BR0lDXzgyNjFDKSB7XG4mIzQzO1x0XHRwaHlkZXZfZXJyKHBoeWRldiwgXCYjMzQ7SW52YWxpZCBzdWIgbWFnaWM6IDB4JTA4eFxcblwmIzM0Oywgc3ViX21hZ2ljKTtcbiYjNDM7XHRcdHJldHVybiAtRUlOVkFMO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0bnVtX2VudHJpZXMgPSBsZTE2X3RvX2NwdShoZHItXHUwMDNlbnVtX2VudHJpZXMpO1xuJiM0MztcdGRhdGFfbGVuID0gbnVtX2VudHJpZXMgKiBGV19FTlRSWV9TSVpFO1xuJiM0MztcbiYjNDM7XHRpZiAoZnctXHUwMDNlc2l6ZSAhPSBzaXplb2YoKmhkcikgJiM0MzsgZGF0YV9sZW4pIHtcbiYjNDM7XHRcdHBoeWRldl9lcnIocGh5ZGV2LCBcJiMzNDtGaXJtd2FyZSBzaXplIG1pc21hdGNoXFxuXCYjMzQ7KTtcbiYjNDM7XHRcdHJldHVybiAtRUlOVkFMO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0Y2FsY19jcmMgPSBjcmMzMih+MCwgZnctXHUwMDNlZGF0YSAmIzQzOyBGV19IRUFERVJfU0laRSwgZGF0YV9sZW4pIF4gfjA7XG4mIzQzO1x0ZmlsZV9jcmMgPSBsZTMyX3RvX2NwdShoZHItXHUwMDNlY3JjMzIpO1xuJiM0MztcbiYjNDM7XHRpZiAoY2FsY19jcmMgIT0gZmlsZV9jcmMpIHtcbiYjNDM7XHRcdHBoeWRldl9lcnIocGh5ZGV2LCBcJiMzNDtDUkMzMiBtaXNtYXRjaDogY2FsY3VsYXRlZD0weCUwOHggZmlsZT0weCUwOHhcXG5cJiMzNDssXG4mIzQzO1x0XHRcdCAgIGNhbGNfY3JjLCBmaWxlX2NyYyk7XG4mIzQzO1x0XHRyZXR1cm4gLUVJTlZBTDtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdHJldHVybiAwO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW50IHJ0bDgyNjF4X2Z3X2V4ZWN1dGVfZW50cnkoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldixcbiYjNDM7XHRcdFx0XHQgICAgIGNvbnN0IHN0cnVjdCBydGw4MjYxeF9md19lbnRyeSAqZW50cnkpXG4mIzQzO3tcbiYjNDM7XHR1MTYgYWRkciwgdmFsdWUsIHRpbWVvdXRfbXM7XG4mIzQzO1x0dTggZGV2LCBtc2IsIGxzYiwgcG9sbF9zZXQ7XG4mIzQzO1x0dTMyIGJpdHMsIGV4cGVjdF92YWw7XG4mIzQzO1x0aW50IHJldCwgdmFsO1xuJiM0MztcbiYjNDM7XHRkZXYgPSBlbnRyeS1cdTAwM2VkZXY7XG4mIzQzO1x0YWRkciA9IGxlMTZfdG9fY3B1KGVudHJ5LVx1MDAzZWFkZHIpO1xuJiM0MztcdG1zYiA9IGVudHJ5LVx1MDAzZW1zYjtcbiYjNDM7XHRsc2IgPSBlbnRyeS1cdTAwM2Vsc2I7XG4mIzQzO1x0dmFsdWUgPSBsZTE2X3RvX2NwdShlbnRyeS1cdTAwM2V2YWx1ZSk7XG4mIzQzO1x0dGltZW91dF9tcyA9IGxlMTZfdG9fY3B1KGVudHJ5LVx1MDAzZXRpbWVvdXRfbXMpO1xuJiM0MztcdHBvbGxfc2V0ID0gZW50cnktXHUwMDNlcG9sbF9zZXQ7XG4mIzQzO1xuJiM0MztcdGlmICh0aW1lb3V0X21zID09IDApXG4mIzQzO1x0XHR0aW1lb3V0X21zID0gUlRMODI2MVhfUE9MTF9USU1FT1VUX01TO1xuJiM0MztcbiYjNDM7XHRpZiAoZGV2IFx1MDAzZSBSVEw4MjYxWF9NQVhfTU1EX0RFVikge1xuJiM0MztcdFx0cGh5ZGV2X2VycihwaHlkZXYsIFwmIzM0O2ludmFsaWQgZmlybXdhcmUgTU1EIGRldmljZTogZGV2PSV1XFxuXCYjMzQ7LCBkZXYpO1xuJiM0MztcdFx0cmV0dXJuIC1FSU5WQUw7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRpZiAobXNiIFx1MDAzZSAxNSB8fCBsc2IgXHUwMDNlIG1zYikge1xuJiM0MztcdFx0cGh5ZGV2X2VycihwaHlkZXYsIFwmIzM0O2ludmFsaWQgZmlybXdhcmUgYml0czogbXNiPSV1LCBsc2I9JXVcXG5cJiMzNDssIG1zYiwgbHNiKTtcbiYjNDM7XHRcdHJldHVybiAtRUlOVkFMO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0c3dpdGNoIChlbnRyeS1cdTAwM2V0eXBlKSB7XG4mIzQzO1x0Y2FzZSBPUF9XUklURTpcbiYjNDM7XHRcdHJldCA9IHBoeV9tb2RpZnlfbW1kKHBoeWRldiwgZGV2LCBhZGRyLFxuJiM0MztcdFx0XHRcdCAgICAgR0VOTUFTSyhtc2IsIGxzYiksICh2YWx1ZSBcdTAwM2NcdTAwM2MgbHNiKSBcdTAwMjYgR0VOTUFTSyhtc2IsIGxzYikpO1xuJiM0MztcdFx0aWYgKHJldClcbiYjNDM7XHRcdFx0cmV0dXJuIHJldDtcbiYjNDM7XHRcdGJyZWFrO1xuJiM0MztcbiYjNDM7XHRjYXNlIE9QX1BPTEw6XG4mIzQzO1x0XHRiaXRzID0gR0VOTUFTSyhtc2IsIGxzYik7XG4mIzQzO1x0XHRleHBlY3RfdmFsID0gKHZhbHVlIFx1MDAzY1x1MDAzYyBsc2IpIFx1MDAyNiBiaXRzO1xuJiM0MztcbiYjNDM7XHRcdGlmIChwb2xsX3NldClcbiYjNDM7XHRcdFx0cmV0ID0gcGh5X3JlYWRfbW1kX3BvbGxfdGltZW91dChwaHlkZXYsIGRldiwgYWRkciwgdmFsLFxuJiM0MztcdFx0XHRcdFx0XHRcdCh2YWwgXHUwMDI2IGJpdHMpID09IGV4cGVjdF92YWwsXG4mIzQzO1x0XHRcdFx0XHRcdFx0MTAwMCwgdGltZW91dF9tcyAqIDEwMDAsIGZhbHNlKTtcbiYjNDM7XHRcdGVsc2VcbiYjNDM7XHRcdFx0cmV0ID0gcGh5X3JlYWRfbW1kX3BvbGxfdGltZW91dChwaHlkZXYsIGRldiwgYWRkciwgdmFsLFxuJiM0MztcdFx0XHRcdFx0XHRcdCh2YWwgXHUwMDI2IGJpdHMpICE9IGV4cGVjdF92YWwsXG4mIzQzO1x0XHRcdFx0XHRcdFx0MTAwMCwgdGltZW91dF9tcyAqIDEwMDAsIGZhbHNlKTtcbiYjNDM7XHRcdGlmIChyZXQpXG4mIzQzO1x0XHRcdHJldHVybiByZXQ7XG4mIzQzO1x0XHRicmVhaztcbiYjNDM7XG4mIzQzO1x0ZGVmYXVsdDpcbiYjNDM7XHRcdHJldHVybiAtRUlOVkFMO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0cmV0dXJuIDA7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBpbnQgcnRsODI2MXhfZndfbG9hZChzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IHJ0bDgyNjF4X3ByaXYgKnByaXYgPSBwaHlkZXYtXHUwMDNlcHJpdjtcbiYjNDM7XHRjb25zdCBzdHJ1Y3QgcnRsODI2MXhfZndfZW50cnkgKmVudHJ5O1xuJiM0MztcdGNvbnN0IHN0cnVjdCBydGw4MjYxeF9md19oZWFkZXIgKmhkcjtcbiYjNDM7XHRjb25zdCBzdHJ1Y3QgZmlybXdhcmUgKmZ3O1xuJiM0MztcdGludCByZXQsIGk7XG4mIzQzO1xuJiM0MztcdGlmICghcHJpdi1cdTAwM2Vmd19uYW1lKVxuJiM0MztcdFx0cmV0dXJuIDA7XG4mIzQzO1xuJiM0MztcdHJldCA9IHJlcXVlc3RfZmlybXdhcmUoXHUwMDI2ZncsIHByaXYtXHUwMDNlZndfbmFtZSwgXHUwMDI2cGh5ZGV2LVx1MDAzZW1kaW8uZGV2KTtcbiYjNDM7XHRpZiAocmV0KSB7XG4mIzQzO1x0XHRwaHlkZXZfZXJyKHBoeWRldiwgXCYjMzQ7RmFpbGVkIHRvIGxvYWQgZmlybXdhcmUgJXM6ICVkXFxuXCYjMzQ7LCBwcml2LVx1MDAzZWZ3X25hbWUsIHJldCk7XG4mIzQzO1x0XHRyZXR1cm4gcmV0O1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0cmV0ID0gcnRsODI2MXhfdmVyaWZ5X2Zpcm13YXJlKHBoeWRldiwgZncpO1xuJiM0MztcdGlmIChyZXQpXG4mIzQzO1x0XHRnb3RvIHJlbGVhc2VfZnc7XG4mIzQzO1xuJiM0MztcdGhkciA9IChjb25zdCBzdHJ1Y3QgcnRsODI2MXhfZndfaGVhZGVyICopZnctXHUwMDNlZGF0YTtcbiYjNDM7XG4mIzQzO1x0ZW50cnkgPSAoY29uc3Qgc3RydWN0IHJ0bDgyNjF4X2Z3X2VudHJ5ICopKGZ3LVx1MDAzZWRhdGEgJiM0MzsgRldfSEVBREVSX1NJWkUpO1xuJiM0MztcdGZvciAoaSA9IDA7IGkgXHUwMDNjIGxlMTZfdG9fY3B1KGhkci1cdTAwM2VudW1fZW50cmllcyk7IGkmIzQzOyYjNDM7LCBlbnRyeSYjNDM7JiM0MzspIHtcbiYjNDM7XHRcdHJldCA9IHJ0bDgyNjF4X2Z3X2V4ZWN1dGVfZW50cnkocGh5ZGV2LCBlbnRyeSk7XG4mIzQzO1x0XHRpZiAocmV0KSB7XG4mIzQzO1x0XHRcdHBoeWRldl9lcnIocGh5ZGV2LCBcJiMzNDtFbnRyeSAlZCBmYWlsZWQ6ICVkXFxuXCYjMzQ7LCBpLCByZXQpO1xuJiM0MztcdFx0XHRnb3RvIHJlbGVhc2VfZnc7XG4mIzQzO1x0XHR9XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRwcml2LVx1MDAzZWZ3X2xvYWRlZCA9IHRydWU7XG4mIzQzO1xuJiM0MztyZWxlYXNlX2Z3OlxuJiM0MztcdHJlbGVhc2VfZmlybXdhcmUoZncpO1xuJiM0MztcdHJldHVybiByZXQ7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBpbnQgcnRsODI2MXhfY29uZmlnX2ludHIoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcbiYjNDM7e1xuJiM0MztcdGludCByZXQ7XG4mIzQzO1xuJiM0MztcdGlmIChwaHlkZXYtXHUwMDNlaW50ZXJydXB0cyA9PSBQSFlfSU5URVJSVVBUX0VOQUJMRUQpIHtcbiYjNDM7XHRcdHJldCA9IHBoeV9yZWFkX21tZChwaHlkZXYsIE1ESU9fTU1EX1ZFTkQyLCBSVEw4MjIxQl9WTkQyX0lOU1IpO1xuJiM0MztcdFx0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdFx0cmV0dXJuIHJldDtcbiYjNDM7XG4mIzQzO1x0XHRyZXQgPSBwaHlfd3JpdGVfbW1kKHBoeWRldiwgTURJT19NTURfVkVORDIsIFJUTDgyMjFCX1ZORDJfSU5FUixcbiYjNDM7XHRcdFx0XHQgICAgUlRMODI2MVhfSU5UX01BU0tfREVGQVVMVCk7XG4mIzQzO1x0XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0XHRyZXR1cm4gcmV0O1xuJiM0MztcdH0gZWxzZSB7XG4mIzQzO1x0XHRyZXQgPSBwaHlfd3JpdGVfbW1kKHBoeWRldiwgTURJT19NTURfVkVORDIsIFJUTDgyMjFCX1ZORDJfSU5FUiwgMCk7XG4mIzQzO1x0XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0XHRyZXR1cm4gcmV0O1xuJiM0MztcbiYjNDM7XHRcdHJldCA9IHBoeV9yZWFkX21tZChwaHlkZXYsIE1ESU9fTU1EX1ZFTkQyLCBSVEw4MjIxQl9WTkQyX0lOU1IpO1xuJiM0MztcdFx0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdFx0cmV0dXJuIHJldDtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdHJldHVybiAwO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaXJxcmV0dXJuX3QgcnRsODI2MXhfaGFuZGxlX2ludGVycnVwdChzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxuJiM0Mzt7XG4mIzQzO1x0aW50IGlycV9zdGF0dXM7XG4mIzQzO1xuJiM0MztcdGlycV9zdGF0dXMgPSBwaHlfcmVhZF9tbWQocGh5ZGV2LCBNRElPX01NRF9WRU5EMiwgUlRMODIyMUJfVk5EMl9JTlNSKTtcbiYjNDM7XHRpZiAoaXJxX3N0YXR1cyBcdTAwM2MgMCkge1xuJiM0MztcdFx0cGh5X2Vycm9yKHBoeWRldik7XG4mIzQzO1x0XHRyZXR1cm4gSVJRX05PTkU7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRpZiAoIShpcnFfc3RhdHVzIFx1MDAyNiBSVEw4MjYxWF9JTlRfTUFTS19BTEwpKVxuJiM0MztcdFx0cmV0dXJuIElSUV9OT05FO1xuJiM0MztcbiYjNDM7XHRpZiAoaXJxX3N0YXR1cyBcdTAwMjYgKFJUTDgyNjFYX0lOVF9MSU5LX0NIRyB8IFJUTDgyNjFYX0lOVF9BVVRPTkVHX0RPTkUgfFxuJiM0MztcdCAgICBSVEw4MjYxWF9JTlRfQVVUT05FR19FUlJPUiB8IFJUTDgyNjFYX0lOVF9KQUJCRVIpKVxuJiM0MztcdFx0cGh5X3RyaWdnZXJfbWFjaGluZShwaHlkZXYpO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gSVJRX0hBTkRMRUQ7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBpbnQgcnRsODI2MXhfY29uZmlnX2FuZWcoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcbiYjNDM7e1xuJiM0MztcdHUxNiBhZHZfMWcgPSAwO1xuJiM0MztcdGludCByZXQ7XG4mIzQzO1xuJiM0MztcdHJldCA9IGdlbnBoeV9jNDVfY29uZmlnX2FuZWcocGh5ZGV2KTtcbiYjNDM7XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0cmV0dXJuIHJldDtcbiYjNDM7XG4mIzQzO1x0aWYgKHBoeWRldi1cdTAwM2VhdXRvbmVnID09IEFVVE9ORUdfRElTQUJMRSlcbiYjNDM7XHRcdHJldHVybiAwO1xuJiM0MztcbiYjNDM7XHRpZiAobGlua21vZGVfdGVzdF9iaXQoRVRIVE9PTF9MSU5LX01PREVfMTAwMGJhc2VUX0Z1bGxfQklULFxuJiM0MztcdFx0XHQgICAgICBwaHlkZXYtXHUwMDNlYWR2ZXJ0aXNpbmcpKVxuJiM0MztcdFx0YWR2XzFnID0gQURWRVJUSVNFXzEwMDBGVUxMO1xuJiM0MztcdGlmIChsaW5rbW9kZV90ZXN0X2JpdChFVEhUT09MX0xJTktfTU9ERV8xMDAwYmFzZVRfSGFsZl9CSVQsXG4mIzQzO1x0XHRcdCAgICAgIHBoeWRldi1cdTAwM2VhZHZlcnRpc2luZykpXG4mIzQzO1x0XHRhZHZfMWcgfD0gQURWRVJUSVNFXzEwMDBIQUxGO1xuJiM0MztcbiYjNDM7XHRyZXQgPSBwaHlfbW9kaWZ5X21tZF9jaGFuZ2VkKHBoeWRldiwgTURJT19NTURfVkVORDIsXG4mIzQzO1x0XHRcdFx0ICAgICBSVEw4MjJYX1ZORDJfQzIyX1JFRyhNSUlfQ1RSTDEwMDApLFxuJiM0MztcdFx0XHRcdCAgICAgQURWRVJUSVNFXzEwMDBGVUxMIHwgQURWRVJUSVNFXzEwMDBIQUxGLFxuJiM0MztcdFx0XHRcdCAgICAgYWR2XzFnKTtcbiYjNDM7XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0cmV0dXJuIHJldDtcbiYjNDM7XHRpZiAocmV0IFx1MDAzZSAwKVxuJiM0MztcdFx0cmV0dXJuIGdlbnBoeV9jNDVfcmVzdGFydF9hbmVnKHBoeWRldik7XG4mIzQzO1xuJiM0MztcdHJldHVybiAwO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW50IHJ0bDgyNjF4X2NvbmZpZ19pbml0KHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgcnRsODI2MXhfcHJpdiAqcHJpdiA9IHBoeWRldi1cdTAwM2Vwcml2O1xuJiM0MztcbiYjNDM7XHQvKiBUaGUgZmlybXdhcmUgcGFyYW1ldGVycyBhcmUgcHJlc2VydmVkIGFjcm9zcyBJRUVFIHNvZnQgcmVzZXRzIGFuZFxuJiM0MztcdCAqIHN1c3BlbmQvcmVzdW1lIGN5Y2xlcy4gUmVsb2FkaW5nIGlzIG9ubHkgbmVjZXNzYXJ5IGFmdGVyIGEgcG93ZXJcbiYjNDM7XHQgKiBjeWNsZSBvciBoYXJkIHJlc2V0LlxuJiM0MztcdCAqL1xuJiM0MztcdGlmIChwcml2LVx1MDAzZWZ3X25hbWUgXHUwMDI2XHUwMDI2ICFwcml2LVx1MDAzZWZ3X2xvYWRlZClcbiYjNDM7XHRcdHJldHVybiBydGw4MjYxeF9md19sb2FkKHBoeWRldik7XG4mIzQzO1xuJiM0MztcdHJldHVybiAwO1xuJiM0Mzt9XG4mIzQzO1xuIHN0YXRpYyBpbnQgcnRsODIxeF9wcm9iZShzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxuIHtcbiBcdHN0cnVjdCBkZXZpY2UgKmRldiA9IFx1MDAyNnBoeWRldi1cdTAwM2VtZGlvLmRldjtcbkBAIC0zMDAxLDYgJiM0MzszMzk0LDE5IEBAIHN0YXRpYyBzdHJ1Y3QgcGh5X2RyaXZlciByZWFsdGVrX2RydnNbXSA9IHtcbiBcdFx0LnJlc3VtZVx0XHQ9IGdlbnBoeV9yZXN1bWUsXG4gXHRcdC5yZWFkX21tZFx0PSBnZW5waHlfcmVhZF9tbWRfdW5zdXBwb3J0ZWQsXG4gXHRcdC53cml0ZV9tbWRcdD0gZ2VucGh5X3dyaXRlX21tZF91bnN1cHBvcnRlZCxcbiYjNDM7XHR9LCB7XG4mIzQzO1x0XHRQSFlfSURfTUFUQ0hfRVhBQ1QoUlRMXzgyNjFDX0NHKSxcbiYjNDM7XHRcdC5uYW1lXHRcdFx0PSBcJiMzNDtSZWFsdGVrIFJUTDgyNjFDIDEwR2JwcyBQSFlcJiMzNDssXG4mIzQzO1x0XHQucHJvYmVcdFx0XHQ9IHJ0bDgyNjF4X3Byb2JlLFxuJiM0MztcdFx0LmNvbmZpZ19pbml0XHRcdD0gcnRsODI2MXhfY29uZmlnX2luaXQsXG4mIzQzO1x0XHQuZ2V0X2ZlYXR1cmVzXHRcdD0gcnRsODI2MXhfZ2V0X2ZlYXR1cmVzLFxuJiM0MztcdFx0LmNvbmZpZ19hbmVnXHRcdD0gcnRsODI2MXhfY29uZmlnX2FuZWcsXG4mIzQzO1x0XHQucmVhZF9zdGF0dXNcdFx0PSBydGw4MjYxeF9yZWFkX3N0YXR1cyxcbiYjNDM7XHRcdC5jb25maWdfaW50clx0XHQ9IHJ0bDgyNjF4X2NvbmZpZ19pbnRyLFxuJiM0MztcdFx0LmhhbmRsZV9pbnRlcnJ1cHRcdD0gcnRsODI2MXhfaGFuZGxlX2ludGVycnVwdCxcbiYjNDM7XHRcdC5zb2Z0X3Jlc2V0XHRcdD0gZ2VucGh5X2M0NV9wbWFfc29mdF9yZXNldCxcbiYjNDM7XHRcdC5zdXNwZW5kXHRcdD0gZ2VucGh5X2M0NV9wbWFfc3VzcGVuZCxcbiYjNDM7XHRcdC5yZXN1bWVcdFx0XHQ9IGdlbnBoeV9jNDVfcG1hX3Jlc3VtZSxcbiBcdH0sXG4gfTtcbiBcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3BoeS5oIGIvaW5jbHVkZS9saW51eC9waHkuaFxuaW5kZXggMTk5YTdhYWEzNDFiZmQuLmQ2YmMxOTkzMWZiODM1IDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9saW51eC9waHkuaFxuJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9saW51eC9waHkuaFxuQEAgLTIzMDksNiAmIzQzOzIzMDksNyBAQCBpbnQgZ2VucGh5X2MzN19yZWFkX3N0YXR1cyhzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2LCBib29sICpjaGFuZ2VkKTtcbiAvKiBDbGF1c2UgNDUgUEhZICovXG4gaW50IGdlbnBoeV9jNDVfcmVzdGFydF9hbmVnKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpO1xuIGludCBnZW5waHlfYzQ1X2NoZWNrX2FuZF9yZXN0YXJ0X2FuZWcoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldiwgYm9vbCByZXN0YXJ0KTtcbiYjNDM7aW50IGdlbnBoeV9jNDVfcG1hX3NvZnRfcmVzZXQoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldik7XG4gaW50IGdlbnBoeV9jNDVfYW5lZ19kb25lKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpO1xuIGludCBnZW5waHlfYzQ1X3JlYWRfbGluayhzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KTtcbiBpbnQgZ2VucGh5X2M0NV9yZWFkX2xwYShzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KTtcbmRpZmYgLS1naXQgYS9pbmNsdWRlL3VhcGkvbGludXgvbWRpby5oIGIvaW5jbHVkZS91YXBpL2xpbnV4L21kaW8uaFxuaW5kZXggYjI1NDFjOTQ4ZmMxZWIuLjA2ZjRiYzNjMjBjNzE3IDEwMDY0NFxuLS0tIGEvaW5jbHVkZS91YXBpL2xpbnV4L21kaW8uaFxuJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS91YXBpL2xpbnV4L21kaW8uaFxuQEAgLTMzMiw4ICYjNDM7MzMyLDEzIEBAXG4gI2RlZmluZSBNRElPX0FOXzEwR0JUX0NUUkxfQURWMl81R1x0MHgwMDgwXHQvKiBBZHZlcnRpc2UgMi41R0JBU0UtVCAqL1xuICNkZWZpbmUgTURJT19BTl8xMEdCVF9DVFJMX0FEVjVHXHQweDAxMDBcdC8qIEFkdmVydGlzZSA1R0JBU0UtVCAqL1xuICNkZWZpbmUgTURJT19BTl8xMEdCVF9DVFJMX0FEVjEwR1x0MHgxMDAwXHQvKiBBZHZlcnRpc2UgMTBHQkFTRS1UICovXG4mIzQzOyNkZWZpbmUgTURJT19BTl8xMEdCVF9DVFJMX01TX0VOQUJMRVx0MHg4MDAwXHQvKiBNYXN0ZXIvc2xhdmUgbWFudWFsIGNvbmZpZyBlbmFibGUgKi9cbiYjNDM7I2RlZmluZSBNRElPX0FOXzEwR0JUX0NUUkxfTVNfVkFMVUVcdDB4NDAwMFx0LyogTWFzdGVyL3NsYXZlIGNvbmZpZyB2YWx1ZSAoMT1NYXN0ZXIpICovXG4mIzQzOyNkZWZpbmUgTURJT19BTl8xMEdCVF9DVFJMX01TX1BPUlRfVFlQRVx0MHgyMDAwXHQvKiBNYXN0ZXIgUHJlZmVycmVkIFR5cGUgKi9cbiBcbiAvKiBBTiAxMEdCQVNFLVQgc3RhdHVzIHJlZ2lzdGVyLiAqL1xuJiM0MzsjZGVmaW5lIE1ESU9fQU5fMTBHQlRfU1RBVF9NU19GQVVMVFx0MHg4MDAwXHQvKiBNYXN0ZXIvc2xhdmUgZmF1bHQgKi9cbiYjNDM7I2RlZmluZSBNRElPX0FOXzEwR0JUX1NUQVRfTVNfUkVTXHQweDQwMDBcdC8qIE1hc3Rlci9zbGF2ZSByZXNvbHV0aW9uICgxPU1hc3RlcikgKi9cbiAjZGVmaW5lIE1ESU9fQU5fMTBHQlRfU1RBVF9MUDJfNUdcdDB4MDAyMCAgLyogTFAgaXMgMi41R0JUIGNhcGFibGUgKi9cbiAjZGVmaW5lIE1ESU9fQU5fMTBHQlRfU1RBVF9MUDVHXHRcdDB4MDA0MCAgLyogTFAgaXMgNUdCVCBjYXBhYmxlICovXG4gI2RlZmluZSBNRElPX0FOXzEwR0JUX1NUQVRfTFBUUlJcdDB4MDIwMFx0LyogTFAgdHJhaW5pbmcgcmVzZXQgcmVxLiAqL1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAzIDA3OjM1PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjRtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1JFQUxURUtfUEhZJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7cnRsODI2MXhfcHJvYmUmIzM0OywKICAgICYjMzQ7cnRsODI2MXhfZ2V0X2ZlYXR1cmVzJiMzNDssCiAgICAmIzM0O3J0bDgyNjF4X3JlYWRfc3RhdHVzJiMzNDssCiAgICAmIzM0O3J0bDgyNjF4X3ZlcmlmeV9maXJtd2FyZSYjMzQ7LAogICAgJiMzNDtydGw4MjYxeF9md19leGVjdXRlX2VudHJ5JiMzNDssCiAgICAmIzM0O3J0bDgyNjF4X2Z3X2xvYWQmIzM0OywKICAgICYjMzQ7cnRsODI2MXhfY29uZmlnX2ludHImIzM0OywKICAgICYjMzQ7cnRsODI2MXhfaGFuZGxlX2ludGVycnVwdCYjMzQ7LAogICAgJiMzNDtydGw4MjYxeF9jb25maWdfYW5lZyYjMzQ7LAogICAgJiMzNDtydGw4MjYxeF9jb25maWdfaW5pdCYjMzQ7LAogICAgJiMzNDtnZW5waHlfYzQ1X3BtYV9zb2Z0X3Jlc2V0JiMzNDssCiAgICAmIzM0O2dlbnBoeV9jNDVfYW5fc2V0dXBfbWFzdGVyX3NsYXZlJiMzNDssCiAgICAmIzM0O2dlbnBoeV9jNDVfcmVhZF9tYXN0ZXJfc2xhdmUmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcyBzdXBwb3J0IGZvciB0aGUgUmVhbHRlayBSVEw4MjYxQyAxMEdicHMgUEhZLCBpbmNsdWRpbmcgZmlybXdhcmUgbG9hZGluZyBhbmQgcGFyc2luZywgYW5kIG5ldyBDbGF1c2UgNDUgbWFzdGVyL3NsYXZlIGNvbmZpZ3VyYXRpb24gZnVuY3Rpb25zLiBUaGlzIGNvZGUgaXMgcmVhY2hhYmxlIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBieSBlbXVsYXRpbmcgYSBVU0IgbmV0d29yayBhZGFwdGVyIHRoYXQgcmVnaXN0ZXJzIGFuIE1ESU8gYnVzIGFuZCByZXNwb25kcyB3aXRoIHRoZSBSVEw4MjYxQyBQSFkgSUQuIFRoZSBmaXJtd2FyZSBwYXJzaW5nIGxvZ2ljIGlzIHBhcnRpY3VsYXJseSBpbnRlcmVzdGluZyBmb3IgZnV6emluZyBhcyBpdCBwcm9jZXNzZXMgZXh0ZXJuYWwgZGF0YS4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLApldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgoyLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS4KICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgogICBEbyBub3QgbGlzdCB0b28gZ2VuZXJpYyBjb25maWdzICh3ZSBhbHJlYWR5IGhhdmUgdGhlbSBlbmFibGVkKS4gT25seSBsaXN0IHRob3NlIHRoYXQKICAgc3BlY2lmaWNhbGx5IGNvdmVyIHRoZSBtb2RpZmllZCBjb2RlLiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3Mgb3V0cHV0IGFycmF5LAogICBhbmQgRE8gTk9UIGFkZCBhICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgMDYxZDNmNzMxNGQ0ZjJiMDI2ZWE1MTBiZjgxMWFlZjJiNWE3OWZlZQpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBGcmkgSnVsIDMgMDc6MzU6MDQgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9waHkvcGh5LWM0NS5jIGIvZHJpdmVycy9uZXQvcGh5L3BoeS1jNDUuYwppbmRleCAxMjY5NTE3NDE0Mjg4Zi4uODcwOTIwMzExZjlhMDEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3BoeS9waHktYzQ1LmMKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvcGh5L3BoeS1jNDUuYwpAQCAtMzg0LDYgJiM0MzszODQsMTE5IEBAIGludCBnZW5waHlfYzQ1X2NoZWNrX2FuZF9yZXN0YXJ0X2FuZWcoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldiwgYm9vbCByZXN0YXJ0KQogfQogRVhQT1JUX1NZTUJPTF9HUEwoZ2VucGh5X2M0NV9jaGVja19hbmRfcmVzdGFydF9hbmVnKTsKIAomIzQzOy8qKgomIzQzOyAqIGdlbnBoeV9jNDVfcG1hX3NvZnRfcmVzZXQgLSBzb2Z0d2FyZSByZXNldCB0aGUgUEhZIHZpYSBDbGF1c2UgNDUgUE1BL1BNRCBjb250cm9sIHJlZ2lzdGVyCiYjNDM7ICogQHBoeWRldjogdGFyZ2V0IHBoeV9kZXZpY2Ugc3RydWN0CiYjNDM7ICoKJiM0MzsgKiBSZXR1cm46IDAgb24gc3VjY2VzcywgbmVnYXRpdmUgZXJybm8gb24gZmFpbHVyZS4KJiM0MzsgKi8KJiM0MztpbnQgZ2VucGh5X2M0NV9wbWFfc29mdF9yZXNldChzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KQomIzQzO3sKJiM0MzsJaW50IHJldCwgdmFsOwomIzQzOwomIzQzOwlyZXQgPSBwaHlfc2V0X2JpdHNfbW1kKHBoeWRldiwgTURJT19NTURfUE1BUE1ELCBNRElPX0NUUkwxLAomIzQzOwkJCSAgICAgICBNRElPX0NUUkwxX1JFU0VUKTsKJiM0MzsJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQlyZXR1cm4gcmV0OwomIzQzOwomIzQzOwlyZXR1cm4gcGh5X3JlYWRfbW1kX3BvbGxfdGltZW91dChwaHlkZXYsIE1ESU9fTU1EX1BNQVBNRCwKJiM0MzsJCQkJCSBNRElPX0NUUkwxLCB2YWwsCiYjNDM7CQkJCQkgISh2YWwgJmFtcDsgTURJT19DVFJMMV9SRVNFVCksCiYjNDM7CQkJCQkgNTAwMCwgNjAwMDAwLCB0cnVlKTsKJiM0Mzt9CiYjNDM7RVhQT1JUX1NZTUJPTF9HUEwoZ2VucGh5X2M0NV9wbWFfc29mdF9yZXNldCk7CiYjNDM7CiYjNDM7LyoqCiYjNDM7ICogZ2VucGh5X2M0NV9hbl9zZXR1cF9tYXN0ZXJfc2xhdmUgLSBDb25maWd1cmUgTWFzdGVyL1NsYXZlIHNldHRpbmcgZm9yIEM0NSBQSFlzCiYjNDM7ICogQHBoeWRldjogdGFyZ2V0IHBoeV9kZXZpY2Ugc3RydWN0CiYjNDM7ICoKJiM0MzsgKiBEZXNjcmlwdGlvbjogQ29uZmlndXJlIHRoZSBmb3JjZWQgb3IgcHJlZmVycmVkIE1hc3Rlci9TbGF2ZSByb2xlCiYjNDM7ICogMTBHQkFTRS1UIGNvbnRyb2wgcmVnaXN0ZXIgKE1NRCA3LCBSZWdpc3RlciAweDAwMjApIGFjY29yZGluZyB0bwomIzQzOyAqIElFRUUgODAyLjMgc3RhbmRhcmRzLgomIzQzOyAqCiYjNDM7ICogUmV0dXJuOiBuZWdhdGl2ZSBlcnJubyBjb2RlIG9uIGZhaWx1cmUsIDAgaWYgTWFzdGVyL1NsYXZlIGRpZG4mIzM5O3QgY2hhbmdlLAomIzQzOyAqIG9yIDEgaWYgTWFzdGVyL1NsYXZlIG1vZGVzIGNoYW5nZWQuCiYjNDM7ICovCiYjNDM7c3RhdGljIGludCBnZW5waHlfYzQ1X2FuX3NldHVwX21hc3Rlcl9zbGF2ZShzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KQomIzQzO3sKJiM0MzsJdTE2IGN0bCA9IDA7CiYjNDM7CiYjNDM7CXN3aXRjaCAocGh5ZGV2LSZndDttYXN0ZXJfc2xhdmVfc2V0KSB7CiYjNDM7CWNhc2UgTUFTVEVSX1NMQVZFX0NGR19NQVNURVJfUFJFRkVSUkVEOgomIzQzOwkJY3RsID0gTURJT19BTl8xMEdCVF9DVFJMX01TX1BPUlRfVFlQRTsKJiM0MzsJCWJyZWFrOwomIzQzOwljYXNlIE1BU1RFUl9TTEFWRV9DRkdfU0xBVkVfUFJFRkVSUkVEOgomIzQzOwkJYnJlYWs7CiYjNDM7CWNhc2UgTUFTVEVSX1NMQVZFX0NGR19NQVNURVJfRk9SQ0U6CiYjNDM7CQljdGwgPSBNRElPX0FOXzEwR0JUX0NUUkxfTVNfRU5BQkxFIHwgTURJT19BTl8xMEdCVF9DVFJMX01TX1ZBTFVFOwomIzQzOwkJYnJlYWs7CiYjNDM7CWNhc2UgTUFTVEVSX1NMQVZFX0NGR19TTEFWRV9GT1JDRToKJiM0MzsJCWN0bCA9IE1ESU9fQU5fMTBHQlRfQ1RSTF9NU19FTkFCTEU7CiYjNDM7CQlicmVhazsKJiM0MzsJY2FzZSBNQVNURVJfU0xBVkVfQ0ZHX1VOS05PV046CiYjNDM7CWNhc2UgTUFTVEVSX1NMQVZFX0NGR19VTlNVUFBPUlRFRDoKJiM0MzsJCXJldHVybiAwOwomIzQzOwlkZWZhdWx0OgomIzQzOwkJcGh5ZGV2X3dhcm4ocGh5ZGV2LCAmIzM0O1Vuc3VwcG9ydGVkIE1hc3Rlci9TbGF2ZSBtb2RlXG4mIzM0Oyk7CiYjNDM7CQlyZXR1cm4gLUVPUE5PVFNVUFA7CiYjNDM7CX0KJiM0MzsKJiM0MzsJcmV0dXJuIHBoeV9tb2RpZnlfbW1kX2NoYW5nZWQocGh5ZGV2LCBNRElPX01NRF9BTiwgTURJT19BTl8xMEdCVF9DVFJMLAomIzQzOwkJCQkgICAgICBNRElPX0FOXzEwR0JUX0NUUkxfTVNfRU5BQkxFIHwKJiM0MzsJCQkJICAgICAgTURJT19BTl8xMEdCVF9DVFJMX01TX1ZBTFVFIHwKJiM0MzsJCQkJICAgICAgTURJT19BTl8xMEdCVF9DVFJMX01TX1BPUlRfVFlQRSwgY3RsKTsKJiM0Mzt9CiYjNDM7CiYjNDM7LyoqCiYjNDM7ICogZ2VucGh5X2M0NV9yZWFkX21hc3Rlcl9zbGF2ZSAtIHJlYWQgbWFzdGVyL3NsYXZlIHN0YXR1cwomIzQzOyAqIEBwaHlkZXY6IHRhcmdldCBwaHlfZGV2aWNlIHN0cnVjdAomIzQzOyAqCiYjNDM7ICogRGVzY3JpcHRpb246IFJlYWQgdGhlIE1hc3Rlci9TbGF2ZSBjb25maWd1cmF0aW9uIGFuZCBzdGF0dXMKJiM0MzsgKiBmcm9tIDEwR0JBU0UtVCBjb250cm9sL3N0YXR1cyByZWdpc3RlcnMgKE1NRCA3LCBSZWcgMHgwMDIwIGFuZCAweDAwMjEpLgomIzQzOyAqCiYjNDM7ICogUmV0dXJuOiAwIG9uIHN1Y2Nlc3MsIG9yIGEgbmVnYXRpdmUgZXJyb3IgY29kZSBvbiBmYWlsdXJlLgomIzQzOyAqLwomIzQzO3N0YXRpYyBpbnQgZ2VucGh5X2M0NV9yZWFkX21hc3Rlcl9zbGF2ZShzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KQomIzQzO3sKJiM0MzsJaW50IHZhbDsKJiM0MzsKJiM0MzsJcGh5ZGV2LSZndDttYXN0ZXJfc2xhdmVfZ2V0ID0gTUFTVEVSX1NMQVZFX0NGR19VTktOT1dOOwomIzQzOwlwaHlkZXYtJmd0O21hc3Rlcl9zbGF2ZV9zdGF0ZSA9IE1BU1RFUl9TTEFWRV9TVEFURV9VTktOT1dOOwomIzQzOwomIzQzOwl2YWwgPSBwaHlfcmVhZF9tbWQocGh5ZGV2LCBNRElPX01NRF9BTiwgTURJT19BTl8xMEdCVF9DVFJMKTsKJiM0MzsJaWYgKHZhbCAmbHQ7IDApCiYjNDM7CQlyZXR1cm4gdmFsOwomIzQzOwomIzQzOwlpZiAodmFsICZhbXA7IE1ESU9fQU5fMTBHQlRfQ1RSTF9NU19FTkFCTEUpIHsKJiM0MzsJCWlmICh2YWwgJmFtcDsgTURJT19BTl8xMEdCVF9DVFJMX01TX1ZBTFVFKQomIzQzOwkJCXBoeWRldi0mZ3Q7bWFzdGVyX3NsYXZlX2dldCA9IE1BU1RFUl9TTEFWRV9DRkdfTUFTVEVSX0ZPUkNFOwomIzQzOwkJZWxzZQomIzQzOwkJCXBoeWRldi0mZ3Q7bWFzdGVyX3NsYXZlX2dldCA9IE1BU1RFUl9TTEFWRV9DRkdfU0xBVkVfRk9SQ0U7CiYjNDM7CX0gZWxzZSB7CiYjNDM7CQlpZiAodmFsICZhbXA7IE1ESU9fQU5fMTBHQlRfQ1RSTF9NU19QT1JUX1RZUEUpCiYjNDM7CQkJcGh5ZGV2LSZndDttYXN0ZXJfc2xhdmVfZ2V0ID0gTUFTVEVSX1NMQVZFX0NGR19NQVNURVJfUFJFRkVSUkVEOwomIzQzOwkJZWxzZQomIzQzOwkJCXBoeWRldi0mZ3Q7bWFzdGVyX3NsYXZlX2dldCA9IE1BU1RFUl9TTEFWRV9DRkdfU0xBVkVfUFJFRkVSUkVEOwomIzQzOwl9CiYjNDM7CiYjNDM7CXZhbCA9IHBoeV9yZWFkX21tZChwaHlkZXYsIE1ESU9fTU1EX0FOLCBNRElPX0FOXzEwR0JUX1NUQVQpOwomIzQzOwlpZiAodmFsICZsdDsgMCkKJiM0MzsJCXJldHVybiB2YWw7CiYjNDM7CiYjNDM7CWlmICh2YWwgJmFtcDsgTURJT19BTl8xMEdCVF9TVEFUX01TX0ZBVUxUKSB7CiYjNDM7CQlwaHlkZXYtJmd0O21hc3Rlcl9zbGF2ZV9zdGF0ZSA9IE1BU1RFUl9TTEFWRV9TVEFURV9FUlI7CiYjNDM7CX0gZWxzZSBpZiAocGh5ZGV2LSZndDtsaW5rKSB7CiYjNDM7CQlpZiAodmFsICZhbXA7IE1ESU9fQU5fMTBHQlRfU1RBVF9NU19SRVMpCiYjNDM7CQkJcGh5ZGV2LSZndDttYXN0ZXJfc2xhdmVfc3RhdGUgPSBNQVNURVJfU0xBVkVfU1RBVEVfTUFTVEVSOwomIzQzOwkJZWxzZQomIzQzOwkJCXBoeWRldi0mZ3Q7bWFzdGVyX3NsYXZlX3N0YXRlID0gTUFTVEVSX1NMQVZFX1NUQVRFX1NMQVZFOwomIzQzOwl9IGVsc2UgewomIzQzOwkJcGh5ZGV2LSZndDttYXN0ZXJfc2xhdmVfc3RhdGUgPSBNQVNURVJfU0xBVkVfU1RBVEVfVU5LTk9XTjsKJiM0MzsJfQomIzQzOwomIzQzOwlyZXR1cm4gMDsKJiM0Mzt9CiYjNDM7CiAvKioKICAqIGdlbnBoeV9jNDVfYW5lZ19kb25lIC0gcmV0dXJuIGF1dG8tbmVnb3RpYXRpb24gY29tcGxldGUgc3RhdHVzCiAgKiBAcGh5ZGV2OiB0YXJnZXQgcGh5X2RldmljZSBzdHJ1Y3QKQEAgLTExOTIsNiAmIzQzOzEzMDUsMTAgQEAgaW50IGdlbnBoeV9jNDVfcmVhZF9zdGF0dXMoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldikKIAkJCXJldCA9IGdlbnBoeV9jNDVfYmFzZXQxX3JlYWRfc3RhdHVzKHBoeWRldik7CiAJCQlpZiAocmV0ICZsdDsgMCkKIAkJCQlyZXR1cm4gcmV0OwomIzQzOwkJfSBlbHNlIHsKJiM0MzsJCQlyZXQgPSBnZW5waHlfYzQ1X3JlYWRfbWFzdGVyX3NsYXZlKHBoeWRldik7CiYjNDM7CQkJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQkJCXJldHVybiByZXQ7CiAJCX0KIAogCQlwaHlfcmVzb2x2ZV9hbmVnX2xpbmttb2RlKHBoeWRldik7CkBAIC0xMjI1LDYgJiM0MzsxMzQyLDE0IEBAIGludCBnZW5waHlfYzQ1X2NvbmZpZ19hbmVnKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpCiAJaWYgKHJldCAmZ3Q7IDApCiAJCWNoYW5nZWQgPSB0cnVlOwogCiYjNDM7CWlmICghZ2VucGh5X2M0NV9iYXNldDFfYWJsZShwaHlkZXYpKSB7CiYjNDM7CQlyZXQgPSBnZW5waHlfYzQ1X2FuX3NldHVwX21hc3Rlcl9zbGF2ZShwaHlkZXYpOwomIzQzOwkJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQkJcmV0dXJuIHJldDsKJiM0MzsJCWlmIChyZXQgJmd0OyAwKQomIzQzOwkJCWNoYW5nZWQgPSB0cnVlOwomIzQzOwl9CiYjNDM7CiAJcmV0dXJuIGdlbnBoeV9jNDVfY2hlY2tfYW5kX3Jlc3RhcnRfYW5lZyhwaHlkZXYsIGNoYW5nZWQpOwogfQogRVhQT1JUX1NZTUJPTF9HUEwoZ2VucGh5X2M0NV9jb25maWdfYW5lZyk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9waHkvcmVhbHRlay9yZWFsdGVrX21haW4uYyBiL2RyaXZlcnMvbmV0L3BoeS9yZWFsdGVrL3JlYWx0ZWtfbWFpbi5jCmluZGV4IDI3MjY4ODExZjU2NGYyLi42OGEyZGUwYjJiZDNiYSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvcGh5L3JlYWx0ZWsvcmVhbHRla19tYWluLmMKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvcGh5L3JlYWx0ZWsvcmVhbHRla19tYWluLmMKQEAgLTgsNyAmIzQzOzgsOSBAQAogICogQ29weXJpZ2h0IChjKSAyMDA0IEZyZWVzY2FsZSBTZW1pY29uZHVjdG9yLCBJbmMuCiAgKi8KICNpbmNsdWRlICZsdDtsaW51eC9iaXRvcHMuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvY3JjMzIuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9ldGh0b29sX25ldGxpbmsuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvZmlybXdhcmUuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9vZi5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L3BoeS5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L3BtX3dha2VpcnEuaCZndDsKQEAgLTE0MSw2ICYjNDM7MTQzLDEwIEBACiAjZGVmaW5lIFJUTDgyMTFGX1BIWVNJQ0FMX0FERFJfV09SRDEJCTE3CiAjZGVmaW5lIFJUTDgyMTFGX1BIWVNJQ0FMX0FERFJfV09SRDIJCTE4CiAKJiM0MzsjZGVmaW5lIFJUTDgyNjFYX0VYVF9BRERSX1JFRwkJCTB4YTQzNgomIzQzOyNkZWZpbmUgUlRMODI2MVhfRVhUX0RBVEFfUkVHCQkJMHhhNDM4CiYjNDM7I2RlZmluZSBSVExfODI2MVhfU1VCX1BIWV9JRF9BRERSCQkweDgwMWQKJiM0MzsKICNkZWZpbmUgUlRMODIyWF9WTkQxX1NFUkRFU19PUFRJT04JCQkweDY5N2EKICNkZWZpbmUgUlRMODIyWF9WTkQxX1NFUkRFU19PUFRJT05fTU9ERV9NQVNLCQlHRU5NQVNLKDUsIDApCiAjZGVmaW5lIFJUTDgyMlhfVk5EMV9TRVJERVNfT1BUSU9OX01PREVfMjUwMEJBU0VYX1NHTUlJCQkwCkBAIC0yNTEsNiAmIzQzOzI1Nyw2OSBAQAogI2RlZmluZSBSVExfODIyMUJfVk1fQ0cJCQkJMHgwMDFjYzg0YQogI2RlZmluZSBSVExfODI1MUIJCQkJMHgwMDFjYzg2MgogI2RlZmluZSBSVExfODI2MUMJCQkJMHgwMDFjYzg5MAomIzQzOyNkZWZpbmUgUlRMXzgyNjFDX0NHCQkJCTB4MDAxY2M4OTgKJiM0MzsKJiM0MzsjZGVmaW5lIFJUTDgyNjFDX0NFX01PREVMCQkweDAwCiYjNDM7I2RlZmluZSBSVEw4MjYxWF9JTlRfQVVUT05FR19FUlJPUglCSVQoMCkKJiM0MzsjZGVmaW5lIFJUTDgyNjFYX0lOVF9QQUdFX1JFQ1YJCUJJVCgyKQomIzQzOyNkZWZpbmUgUlRMODI2MVhfSU5UX0FVVE9ORUdfRE9ORQlCSVQoMykKJiM0MzsjZGVmaW5lIFJUTDgyNjFYX0lOVF9MSU5LX0NIRwkJQklUKDQpCiYjNDM7I2RlZmluZSBSVEw4MjYxWF9JTlRfUEhZX1JFR19BQ0NFU1MJQklUKDUpCiYjNDM7I2RlZmluZSBSVEw4MjYxWF9JTlRfUE1FCQlCSVQoNykKJiM0MzsjZGVmaW5lIFJUTDgyNjFYX0lOVF9BTERQU19DSEcJCUJJVCg5KQomIzQzOyNkZWZpbmUgUlRMODI2MVhfSU5UX0pBQkJFUgkJQklUKDEwKQomIzQzOwomIzQzOyNkZWZpbmUgUlRMODI2MVhfSU5UX01BU0tfREVGQVVMVAkoUlRMODI2MVhfSU5UX0FVVE9ORUdfRE9ORSB8IFwKJiM0MzsJCQkJCSBSVEw4MjYxWF9JTlRfTElOS19DSEcgfCBcCiYjNDM7CQkJCQkgUlRMODI2MVhfSU5UX0FVVE9ORUdfRVJST1IgfCBcCiYjNDM7CQkJCQkgUlRMODI2MVhfSU5UX0pBQkJFUikKJiM0MzsKJiM0MzsjZGVmaW5lIFJUTDgyNjFYX0lOVF9NQVNLX0FMTAkJKFJUTDgyNjFYX0lOVF9BVVRPTkVHX0VSUk9SIHwgXAomIzQzOwkJCQkJIFJUTDgyNjFYX0lOVF9QQUdFX1JFQ1YgfCBcCiYjNDM7CQkJCQkgUlRMODI2MVhfSU5UX0FVVE9ORUdfRE9ORSB8IFwKJiM0MzsJCQkJCSBSVEw4MjYxWF9JTlRfTElOS19DSEcgfCBcCiYjNDM7CQkJCQkgUlRMODI2MVhfSU5UX1BIWV9SRUdfQUNDRVNTIHwgXAomIzQzOwkJCQkJIFJUTDgyNjFYX0lOVF9QTUUgfCBcCiYjNDM7CQkJCQkgUlRMODI2MVhfSU5UX0FMRFBTX0NIRyB8IFwKJiM0MzsJCQkJCSBSVEw4MjYxWF9JTlRfSkFCQkVSKQomIzQzOwomIzQzOyNkZWZpbmUgRldfTUFJTl9NQUdJQwkJCTB4NTI1NDRDMzgKJiM0MzsjZGVmaW5lIEZXX1NVQl9NQUdJQ184MjYxQwkJMHgzMjM2MzE0MwomIzQzOyNkZWZpbmUgUlRMODI2MVhfUE9MTF9USU1FT1VUX01TCTEwMAomIzQzOyNkZWZpbmUgUlRMODI2MVhfTUFYX01NRF9ERVYJCTMxCiYjNDM7CiYjNDM7I2RlZmluZSBSVEw4MjYxQ19DRV9GV19OQU1FCSYjMzQ7cnRsX25pYy9ydGw4MjYxYy5iaW4mIzM0OwomIzQzO01PRFVMRV9GSVJNV0FSRShSVEw4MjYxQ19DRV9GV19OQU1FKTsKJiM0MzsKJiM0MztlbnVtIHJ0bDgyNjF4X2Z3X29wIHsKJiM0MzsJT1BfV1JJVEUgPSAweDAwLAkvKiBXcml0ZSAqLwomIzQzOwlPUF9QT0xMICA9IDB4MDIsCS8qIFBvbGxpbmcgKi8KJiM0Mzt9OwomIzQzOwomIzQzO3N0cnVjdCBydGw4MjYxeF9md19oZWFkZXIgewomIzQzOwlfX2xlMzIgbWFpbl9tYWdpYzsJLyogTWFpbiBtYWdpYyBudW1iZXIgKi8KJiM0MzsJX19sZTMyIHN1Yl9tYWdpYzsJLyogU3ViIG1hZ2ljIG51bWJlciAqLwomIzQzOwlfX2xlMTYgdmVyc2lvbl9tYWpvcjsJLyogTWFqb3IgdmVyc2lvbiAqLwomIzQzOwlfX2xlMTYgdmVyc2lvbl9taW5vcjsJLyogTWlub3IgdmVyc2lvbiAqLwomIzQzOwlfX2xlMTYgbnVtX2VudHJpZXM7CS8qIE51bWJlciBvZiBlbnRyaWVzICovCiYjNDM7CV9fbGUxNiByZXNlcnZlZDsJLyogUmVzZXJ2ZWQgKi8KJiM0MzsJX19sZTMyIGNyYzMyOwkJLyogQ1JDMzIgY2hlY2tzdW0gKi8KJiM0Mzt9OwomIzQzOwomIzQzO3N0cnVjdCBydGw4MjYxeF9md19lbnRyeSB7CiYjNDM7CV9fdTggIHR5cGU7CQkvKiBPcGVyYXRpb24gdHlwZSAoT1BfKikgKi8KJiM0MzsJX191OCAgZGV2OwkJLyogTU1EIGRldmljZSAqLwomIzQzOwlfX2xlMTYgYWRkcjsJCS8qIFJlZ2lzdGVyIGFkZHJlc3MgKi8KJiM0MzsJX191OCAgbXNiOwkJLyogTVNCIGJpdCBwb3NpdGlvbiAqLwomIzQzOwlfX3U4ICBsc2I7CQkvKiBMU0IgYml0IHBvc2l0aW9uICovCiYjNDM7CV9fbGUxNiB2YWx1ZTsJCS8qIFZhbHVlIHRvIHdyaXRlL2NvbXBhcmUgKi8KJiM0MzsJX19sZTE2IHRpbWVvdXRfbXM7CS8qIFBvbGwgdGltZW91dCBpbiBtaWxsaXNlY29uZHMgKi8KJiM0MzsJX191OCAgcG9sbF9zZXQ7CQkvKiBQb2xsIHVudGlsIGVxdWFsICgxKSBvciBub3QgZXF1YWwgKDApICovCiYjNDM7CV9fdTggIHJlc2VydmVkOwkJLyogUmVzZXJ2ZWQgKi8KJiM0Mzt9OwomIzQzOwomIzQzOyNkZWZpbmUgRldfSEVBREVSX1NJWkUJCXNpemVvZihzdHJ1Y3QgcnRsODI2MXhfZndfaGVhZGVyKQomIzQzOyNkZWZpbmUgRldfRU5UUllfU0laRQkJc2l6ZW9mKHN0cnVjdCBydGw4MjYxeF9md19lbnRyeSkKIAogLyogUlRMODIxMUUgYW5kIFJUTDgyMTFGIHN1cHBvcnQgdXAgdG8gdGhyZWUgTEVEcyAqLwogI2RlZmluZSBSVEw4MjExeF9MRURfQ09VTlQJCQkzCkBAIC0yNzAsNiAmIzQzOzMzOSwxMSBAQCBzdHJ1Y3QgcnRsODIxeF9wcml2IHsKIAl1MTYgaW5lcjsKIH07CiAKJiM0MztzdHJ1Y3QgcnRsODI2MXhfcHJpdiB7CiYjNDM7CWNvbnN0IGNoYXIgKmZ3X25hbWU7CiYjNDM7CWJvb2wgZndfbG9hZGVkOwomIzQzO307CiYjNDM7CiBzdGF0aWMgaW50IHJ0bDgyMXhfcmVhZF9wYWdlKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpCiB7CiAJcmV0dXJuIF9fcGh5X3JlYWQocGh5ZGV2LCBSVEw4MjF4X1BBR0VfU0VMRUNUKTsKQEAgLTMxMCw2ICYjNDM7Mzg0LDMyNSBAQCBzdGF0aWMgaW50IHJ0bDgyMXhfbW9kaWZ5X2V4dF9wYWdlKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYsIHUxNiBleHRfcGFnZSwKIAlyZXR1cm4gcGh5X3Jlc3RvcmVfcGFnZShwaHlkZXYsIG9sZHBhZ2UsIHJldCk7CiB9CiAKJiM0MztzdGF0aWMgaW50IHJ0bDgyNjF4X3Byb2JlKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgZGV2aWNlICpkZXYgPSAmYW1wO3BoeWRldi0mZ3Q7bWRpby5kZXY7CiYjNDM7CXN0cnVjdCBydGw4MjYxeF9wcml2ICpwcml2OwomIzQzOwlpbnQgc3ViX3BoeV9pZCwgcmV0OwomIzQzOwomIzQzOwlwcml2ID0gZGV2bV9remFsbG9jKGRldiwgc2l6ZW9mKCpwcml2KSwgR0ZQX0tFUk5FTCk7CiYjNDM7CWlmICghcHJpdikKJiM0MzsJCXJldHVybiAtRU5PTUVNOwomIzQzOwomIzQzOwlwaHlkZXYtJmd0O3ByaXYgPSBwcml2OwomIzQzOwomIzQzOwlyZXQgPSBwaHlfd3JpdGVfbW1kKHBoeWRldiwgTURJT19NTURfVkVORDIsIFJUTDgyNjFYX0VYVF9BRERSX1JFRywKJiM0MzsJCQkgICAgUlRMXzgyNjFYX1NVQl9QSFlfSURfQUREUik7CiYjNDM7CWlmIChyZXQgJmx0OyAwKQomIzQzOwkJcmV0dXJuIHJldDsKJiM0MzsKJiM0MzsJcmV0ID0gcGh5X3JlYWRfbW1kKHBoeWRldiwgTURJT19NTURfVkVORDIsIFJUTDgyNjFYX0VYVF9EQVRBX1JFRyk7CiYjNDM7CWlmIChyZXQgJmx0OyAwKQomIzQzOwkJcmV0dXJuIHJldDsKJiM0MzsKJiM0MzsJc3ViX3BoeV9pZCA9IChyZXQgJmd0OyZndDsgOCkgJmFtcDsgMHhmZjsKJiM0MzsKJiM0MzsJc3dpdGNoIChzdWJfcGh5X2lkKSB7CiYjNDM7CWNhc2UgUlRMODI2MUNfQ0VfTU9ERUw6CiYjNDM7CQlwcml2LSZndDtmd19uYW1lID0gUlRMODI2MUNfQ0VfRldfTkFNRTsKJiM0MzsJCXBoeWRldl9pbmZvKHBoeWRldiwgJiMzNDtSVEw4MjYxQyBkZXRlY3RlZCAoc3ViX2lkIDB4JTAyeClcbiYjMzQ7LCBzdWJfcGh5X2lkKTsKJiM0MzsJCWJyZWFrOwomIzQzOwomIzQzOwlkZWZhdWx0OgomIzQzOwkJcGh5ZGV2X3dhcm4ocGh5ZGV2LCAmIzM0O1Vua25vd24gc3ViX2lkIDB4JTAyeCwgZGVmYXVsdCBiZWhhdmlvclxuJiMzNDssIHN1Yl9waHlfaWQpOwomIzQzOwkJcmV0dXJuIC1FTk9ERVY7CiYjNDM7CX0KJiM0MzsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbnQgcnRsODI2MXhfZ2V0X2ZlYXR1cmVzKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpCiYjNDM7ewomIzQzOwlpbnQgcmV0OwomIzQzOwomIzQzOwlyZXQgPSBnZW5waHlfYzQ1X3BtYV9yZWFkX2FiaWxpdGllcyhwaHlkZXYpOwomIzQzOwlpZiAocmV0KQomIzQzOwkJcmV0dXJuIHJldDsKJiM0MzsJLyoKJiM0MzsJICogU3VwcGxlbWVudCBNdWx0aS1HaWcgc3BlZWRzIHRoYXQgbWF5IG5vdCBiZSBhdXRvbWF0aWNhbGx5IGRldGVjdGVkCiYjNDM7CSAqIFJUTDgyNjFYIHN1cHBvcnRzIDIuNUcvNUcgaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgMTBHCiYjNDM7CSAqLwomIzQzOwlsaW5rbW9kZV9zZXRfYml0KEVUSFRPT0xfTElOS19NT0RFXzI1MDBiYXNlVF9GdWxsX0JJVCwKJiM0MzsJCQkgcGh5ZGV2LSZndDtzdXBwb3J0ZWQpOwomIzQzOwlsaW5rbW9kZV9zZXRfYml0KEVUSFRPT0xfTElOS19NT0RFXzUwMDBiYXNlVF9GdWxsX0JJVCwKJiM0MzsJCQkgcGh5ZGV2LSZndDtzdXBwb3J0ZWQpOwomIzQzOwomIzQzOwlyZXR1cm4gMDsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGludCBydGw4MjYxeF9yZWFkX3N0YXR1cyhzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KQomIzQzO3sKJiM0MzsJaW50IHJldCwgdmFsID0gMDsKJiM0MzsKJiM0MzsJaWYgKHBoeWRldi0mZ3Q7YXV0b25lZyA9PSBBVVRPTkVHX0VOQUJMRSkgewomIzQzOwkJcmV0ID0gZ2VucGh5X2M0NV9hbmVnX2RvbmUocGh5ZGV2KTsKJiM0MzsJCWlmIChyZXQgJmx0OyAwKQomIzQzOwkJCXJldHVybiByZXQ7CiYjNDM7CiYjNDM7CQlpZiAocmV0KSB7CiYjNDM7CQkJdmFsID0gcGh5X3JlYWRfbW1kKHBoeWRldiwgTURJT19NTURfVkVORDIsCiYjNDM7CQkJCQkgICBSVEw4MjJYX1ZORDJfQzIyX1JFRyhNSUlfU1RBVDEwMDApKTsKJiM0MzsJCQlpZiAodmFsICZsdDsgMCkKJiM0MzsJCQkJcmV0dXJuIHZhbDsKJiM0MzsJCX0KJiM0MzsJfQomIzQzOwomIzQzOwltaWlfc3RhdDEwMDBfbW9kX2xpbmttb2RlX2xwYV90KHBoeWRldi0mZ3Q7bHBfYWR2ZXJ0aXNpbmcsIHZhbCk7CiYjNDM7CiYjNDM7CXJldCA9IGdlbnBoeV9jNDVfcmVhZF9zdGF0dXMocGh5ZGV2KTsKJiM0MzsJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQlyZXR1cm4gcmV0OwomIzQzOwomIzQzOwlyZXR1cm4gMDsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGludCBydGw4MjYxeF92ZXJpZnlfZmlybXdhcmUoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldiwgY29uc3Qgc3RydWN0IGZpcm13YXJlICpmdykKJiM0Mzt7CiYjNDM7CWNvbnN0IHN0cnVjdCBydGw4MjYxeF9md19oZWFkZXIgKmhkcjsKJiM0MzsJdTMyIG1haW5fbWFnaWMsIHN1Yl9tYWdpYzsKJiM0MzsJdTMyIGNhbGNfY3JjLCBmaWxlX2NyYzsKJiM0MzsJc2l6ZV90IGRhdGFfbGVuOwomIzQzOwl1MTYgbnVtX2VudHJpZXM7CiYjNDM7CiYjNDM7CWlmIChmdy0mZ3Q7c2l6ZSAmbHQ7IEZXX0hFQURFUl9TSVpFKSB7CiYjNDM7CQlwaHlkZXZfZXJyKHBoeWRldiwgJiMzNDtGaXJtd2FyZSB0b28gc21hbGw6ICV6dSBieXRlc1xuJiMzNDssIGZ3LSZndDtzaXplKTsKJiM0MzsJCXJldHVybiAtRUlOVkFMOwomIzQzOwl9CiYjNDM7CiYjNDM7CWhkciA9IChjb25zdCBzdHJ1Y3QgcnRsODI2MXhfZndfaGVhZGVyICopZnctJmd0O2RhdGE7CiYjNDM7CiYjNDM7CW1haW5fbWFnaWMgPSBsZTMyX3RvX2NwdShoZHItJmd0O21haW5fbWFnaWMpOwomIzQzOwlpZiAobWFpbl9tYWdpYyAhPSBGV19NQUlOX01BR0lDKSB7CiYjNDM7CQlwaHlkZXZfZXJyKHBoeWRldiwgJiMzNDtJbnZhbGlkIGZpcm13YXJlIG1hZ2ljOiAweCUwOHhcbiYjMzQ7LCBtYWluX21hZ2ljKTsKJiM0MzsJCXJldHVybiAtRUlOVkFMOwomIzQzOwl9CiYjNDM7CiYjNDM7CXN1Yl9tYWdpYyA9IGxlMzJfdG9fY3B1KGhkci0mZ3Q7c3ViX21hZ2ljKTsKJiM0MzsJaWYgKHN1Yl9tYWdpYyAhPSBGV19TVUJfTUFHSUNfODI2MUMpIHsKJiM0MzsJCXBoeWRldl9lcnIocGh5ZGV2LCAmIzM0O0ludmFsaWQgc3ViIG1hZ2ljOiAweCUwOHhcbiYjMzQ7LCBzdWJfbWFnaWMpOwomIzQzOwkJcmV0dXJuIC1FSU5WQUw7CiYjNDM7CX0KJiM0MzsKJiM0MzsJbnVtX2VudHJpZXMgPSBsZTE2X3RvX2NwdShoZHItJmd0O251bV9lbnRyaWVzKTsKJiM0MzsJZGF0YV9sZW4gPSBudW1fZW50cmllcyAqIEZXX0VOVFJZX1NJWkU7CiYjNDM7CiYjNDM7CWlmIChmdy0mZ3Q7c2l6ZSAhPSBzaXplb2YoKmhkcikgJiM0MzsgZGF0YV9sZW4pIHsKJiM0MzsJCXBoeWRldl9lcnIocGh5ZGV2LCAmIzM0O0Zpcm13YXJlIHNpemUgbWlzbWF0Y2hcbiYjMzQ7KTsKJiM0MzsJCXJldHVybiAtRUlOVkFMOwomIzQzOwl9CiYjNDM7CiYjNDM7CWNhbGNfY3JjID0gY3JjMzIofjAsIGZ3LSZndDtkYXRhICYjNDM7IEZXX0hFQURFUl9TSVpFLCBkYXRhX2xlbikgXiB+MDsKJiM0MzsJZmlsZV9jcmMgPSBsZTMyX3RvX2NwdShoZHItJmd0O2NyYzMyKTsKJiM0MzsKJiM0MzsJaWYgKGNhbGNfY3JjICE9IGZpbGVfY3JjKSB7CiYjNDM7CQlwaHlkZXZfZXJyKHBoeWRldiwgJiMzNDtDUkMzMiBtaXNtYXRjaDogY2FsY3VsYXRlZD0weCUwOHggZmlsZT0weCUwOHhcbiYjMzQ7LAomIzQzOwkJCSAgIGNhbGNfY3JjLCBmaWxlX2NyYyk7CiYjNDM7CQlyZXR1cm4gLUVJTlZBTDsKJiM0MzsJfQomIzQzOwomIzQzOwlyZXR1cm4gMDsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGludCBydGw4MjYxeF9md19leGVjdXRlX2VudHJ5KHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYsCiYjNDM7CQkJCSAgICAgY29uc3Qgc3RydWN0IHJ0bDgyNjF4X2Z3X2VudHJ5ICplbnRyeSkKJiM0Mzt7CiYjNDM7CXUxNiBhZGRyLCB2YWx1ZSwgdGltZW91dF9tczsKJiM0MzsJdTggZGV2LCBtc2IsIGxzYiwgcG9sbF9zZXQ7CiYjNDM7CXUzMiBiaXRzLCBleHBlY3RfdmFsOwomIzQzOwlpbnQgcmV0LCB2YWw7CiYjNDM7CiYjNDM7CWRldiA9IGVudHJ5LSZndDtkZXY7CiYjNDM7CWFkZHIgPSBsZTE2X3RvX2NwdShlbnRyeS0mZ3Q7YWRkcik7CiYjNDM7CW1zYiA9IGVudHJ5LSZndDttc2I7CiYjNDM7CWxzYiA9IGVudHJ5LSZndDtsc2I7CiYjNDM7CXZhbHVlID0gbGUxNl90b19jcHUoZW50cnktJmd0O3ZhbHVlKTsKJiM0MzsJdGltZW91dF9tcyA9IGxlMTZfdG9fY3B1KGVudHJ5LSZndDt0aW1lb3V0X21zKTsKJiM0MzsJcG9sbF9zZXQgPSBlbnRyeS0mZ3Q7cG9sbF9zZXQ7CiYjNDM7CiYjNDM7CWlmICh0aW1lb3V0X21zID09IDApCiYjNDM7CQl0aW1lb3V0X21zID0gUlRMODI2MVhfUE9MTF9USU1FT1VUX01TOwomIzQzOwomIzQzOwlpZiAoZGV2ICZndDsgUlRMODI2MVhfTUFYX01NRF9ERVYpIHsKJiM0MzsJCXBoeWRldl9lcnIocGh5ZGV2LCAmIzM0O2ludmFsaWQgZmlybXdhcmUgTU1EIGRldmljZTogZGV2PSV1XG4mIzM0OywgZGV2KTsKJiM0MzsJCXJldHVybiAtRUlOVkFMOwomIzQzOwl9CiYjNDM7CiYjNDM7CWlmIChtc2IgJmd0OyAxNSB8fCBsc2IgJmd0OyBtc2IpIHsKJiM0MzsJCXBoeWRldl9lcnIocGh5ZGV2LCAmIzM0O2ludmFsaWQgZmlybXdhcmUgYml0czogbXNiPSV1LCBsc2I9JXVcbiYjMzQ7LCBtc2IsIGxzYik7CiYjNDM7CQlyZXR1cm4gLUVJTlZBTDsKJiM0MzsJfQomIzQzOwomIzQzOwlzd2l0Y2ggKGVudHJ5LSZndDt0eXBlKSB7CiYjNDM7CWNhc2UgT1BfV1JJVEU6CiYjNDM7CQlyZXQgPSBwaHlfbW9kaWZ5X21tZChwaHlkZXYsIGRldiwgYWRkciwKJiM0MzsJCQkJICAgICBHRU5NQVNLKG1zYiwgbHNiKSwgKHZhbHVlICZsdDsmbHQ7IGxzYikgJmFtcDsgR0VOTUFTSyhtc2IsIGxzYikpOwomIzQzOwkJaWYgKHJldCkKJiM0MzsJCQlyZXR1cm4gcmV0OwomIzQzOwkJYnJlYWs7CiYjNDM7CiYjNDM7CWNhc2UgT1BfUE9MTDoKJiM0MzsJCWJpdHMgPSBHRU5NQVNLKG1zYiwgbHNiKTsKJiM0MzsJCWV4cGVjdF92YWwgPSAodmFsdWUgJmx0OyZsdDsgbHNiKSAmYW1wOyBiaXRzOwomIzQzOwomIzQzOwkJaWYgKHBvbGxfc2V0KQomIzQzOwkJCXJldCA9IHBoeV9yZWFkX21tZF9wb2xsX3RpbWVvdXQocGh5ZGV2LCBkZXYsIGFkZHIsIHZhbCwKJiM0MzsJCQkJCQkJKHZhbCAmYW1wOyBiaXRzKSA9PSBleHBlY3RfdmFsLAomIzQzOwkJCQkJCQkxMDAwLCB0aW1lb3V0X21zICogMTAwMCwgZmFsc2UpOwomIzQzOwkJZWxzZQomIzQzOwkJCXJldCA9IHBoeV9yZWFkX21tZF9wb2xsX3RpbWVvdXQocGh5ZGV2LCBkZXYsIGFkZHIsIHZhbCwKJiM0MzsJCQkJCQkJKHZhbCAmYW1wOyBiaXRzKSAhPSBleHBlY3RfdmFsLAomIzQzOwkJCQkJCQkxMDAwLCB0aW1lb3V0X21zICogMTAwMCwgZmFsc2UpOwomIzQzOwkJaWYgKHJldCkKJiM0MzsJCQlyZXR1cm4gcmV0OwomIzQzOwkJYnJlYWs7CiYjNDM7CiYjNDM7CWRlZmF1bHQ6CiYjNDM7CQlyZXR1cm4gLUVJTlZBTDsKJiM0MzsJfQomIzQzOwomIzQzOwlyZXR1cm4gMDsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGludCBydGw4MjYxeF9md19sb2FkKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgcnRsODI2MXhfcHJpdiAqcHJpdiA9IHBoeWRldi0mZ3Q7cHJpdjsKJiM0MzsJY29uc3Qgc3RydWN0IHJ0bDgyNjF4X2Z3X2VudHJ5ICplbnRyeTsKJiM0MzsJY29uc3Qgc3RydWN0IHJ0bDgyNjF4X2Z3X2hlYWRlciAqaGRyOwomIzQzOwljb25zdCBzdHJ1Y3QgZmlybXdhcmUgKmZ3OwomIzQzOwlpbnQgcmV0LCBpOwomIzQzOwomIzQzOwlpZiAoIXByaXYtJmd0O2Z3X25hbWUpCiYjNDM7CQlyZXR1cm4gMDsKJiM0MzsKJiM0MzsJcmV0ID0gcmVxdWVzdF9maXJtd2FyZSgmYW1wO2Z3LCBwcml2LSZndDtmd19uYW1lLCAmYW1wO3BoeWRldi0mZ3Q7bWRpby5kZXYpOwomIzQzOwlpZiAocmV0KSB7CiYjNDM7CQlwaHlkZXZfZXJyKHBoeWRldiwgJiMzNDtGYWlsZWQgdG8gbG9hZCBmaXJtd2FyZSAlczogJWRcbiYjMzQ7LCBwcml2LSZndDtmd19uYW1lLCByZXQpOwomIzQzOwkJcmV0dXJuIHJldDsKJiM0MzsJfQomIzQzOwomIzQzOwlyZXQgPSBydGw4MjYxeF92ZXJpZnlfZmlybXdhcmUocGh5ZGV2LCBmdyk7CiYjNDM7CWlmIChyZXQpCiYjNDM7CQlnb3RvIHJlbGVhc2VfZnc7CiYjNDM7CiYjNDM7CWhkciA9IChjb25zdCBzdHJ1Y3QgcnRsODI2MXhfZndfaGVhZGVyICopZnctJmd0O2RhdGE7CiYjNDM7CiYjNDM7CWVudHJ5ID0gKGNvbnN0IHN0cnVjdCBydGw4MjYxeF9md19lbnRyeSAqKShmdy0mZ3Q7ZGF0YSAmIzQzOyBGV19IRUFERVJfU0laRSk7CiYjNDM7CWZvciAoaSA9IDA7IGkgJmx0OyBsZTE2X3RvX2NwdShoZHItJmd0O251bV9lbnRyaWVzKTsgaSYjNDM7JiM0MzssIGVudHJ5JiM0MzsmIzQzOykgewomIzQzOwkJcmV0ID0gcnRsODI2MXhfZndfZXhlY3V0ZV9lbnRyeShwaHlkZXYsIGVudHJ5KTsKJiM0MzsJCWlmIChyZXQpIHsKJiM0MzsJCQlwaHlkZXZfZXJyKHBoeWRldiwgJiMzNDtFbnRyeSAlZCBmYWlsZWQ6ICVkXG4mIzM0OywgaSwgcmV0KTsKJiM0MzsJCQlnb3RvIHJlbGVhc2VfZnc7CiYjNDM7CQl9CiYjNDM7CX0KJiM0MzsKJiM0MzsJcHJpdi0mZ3Q7ZndfbG9hZGVkID0gdHJ1ZTsKJiM0MzsKJiM0MztyZWxlYXNlX2Z3OgomIzQzOwlyZWxlYXNlX2Zpcm13YXJlKGZ3KTsKJiM0MzsJcmV0dXJuIHJldDsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGludCBydGw4MjYxeF9jb25maWdfaW50cihzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KQomIzQzO3sKJiM0MzsJaW50IHJldDsKJiM0MzsKJiM0MzsJaWYgKHBoeWRldi0mZ3Q7aW50ZXJydXB0cyA9PSBQSFlfSU5URVJSVVBUX0VOQUJMRUQpIHsKJiM0MzsJCXJldCA9IHBoeV9yZWFkX21tZChwaHlkZXYsIE1ESU9fTU1EX1ZFTkQyLCBSVEw4MjIxQl9WTkQyX0lOU1IpOwomIzQzOwkJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQkJcmV0dXJuIHJldDsKJiM0MzsKJiM0MzsJCXJldCA9IHBoeV93cml0ZV9tbWQocGh5ZGV2LCBNRElPX01NRF9WRU5EMiwgUlRMODIyMUJfVk5EMl9JTkVSLAomIzQzOwkJCQkgICAgUlRMODI2MVhfSU5UX01BU0tfREVGQVVMVCk7CiYjNDM7CQlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCQlyZXR1cm4gcmV0OwomIzQzOwl9IGVsc2UgewomIzQzOwkJcmV0ID0gcGh5X3dyaXRlX21tZChwaHlkZXYsIE1ESU9fTU1EX1ZFTkQyLCBSVEw4MjIxQl9WTkQyX0lORVIsIDApOwomIzQzOwkJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQkJcmV0dXJuIHJldDsKJiM0MzsKJiM0MzsJCXJldCA9IHBoeV9yZWFkX21tZChwaHlkZXYsIE1ESU9fTU1EX1ZFTkQyLCBSVEw4MjIxQl9WTkQyX0lOU1IpOwomIzQzOwkJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQkJcmV0dXJuIHJldDsKJiM0MzsJfQomIzQzOwomIzQzOwlyZXR1cm4gMDsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGlycXJldHVybl90IHJ0bDgyNjF4X2hhbmRsZV9pbnRlcnJ1cHQoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldikKJiM0Mzt7CiYjNDM7CWludCBpcnFfc3RhdHVzOwomIzQzOwomIzQzOwlpcnFfc3RhdHVzID0gcGh5X3JlYWRfbW1kKHBoeWRldiwgTURJT19NTURfVkVORDIsIFJUTDgyMjFCX1ZORDJfSU5TUik7CiYjNDM7CWlmIChpcnFfc3RhdHVzICZsdDsgMCkgewomIzQzOwkJcGh5X2Vycm9yKHBoeWRldik7CiYjNDM7CQlyZXR1cm4gSVJRX05PTkU7CiYjNDM7CX0KJiM0MzsKJiM0MzsJaWYgKCEoaXJxX3N0YXR1cyAmYW1wOyBSVEw4MjYxWF9JTlRfTUFTS19BTEwpKQomIzQzOwkJcmV0dXJuIElSUV9OT05FOwomIzQzOwomIzQzOwlpZiAoaXJxX3N0YXR1cyAmYW1wOyAoUlRMODI2MVhfSU5UX0xJTktfQ0hHIHwgUlRMODI2MVhfSU5UX0FVVE9ORUdfRE9ORSB8CiYjNDM7CSAgICBSVEw4MjYxWF9JTlRfQVVUT05FR19FUlJPUiB8IFJUTDgyNjFYX0lOVF9KQUJCRVIpKQomIzQzOwkJcGh5X3RyaWdnZXJfbWFjaGluZShwaHlkZXYpOwomIzQzOwomIzQzOwlyZXR1cm4gSVJRX0hBTkRMRUQ7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbnQgcnRsODI2MXhfY29uZmlnX2FuZWcoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldikKJiM0Mzt7CiYjNDM7CXUxNiBhZHZfMWcgPSAwOwomIzQzOwlpbnQgcmV0OwomIzQzOwomIzQzOwlyZXQgPSBnZW5waHlfYzQ1X2NvbmZpZ19hbmVnKHBoeWRldik7CiYjNDM7CWlmIChyZXQgJmx0OyAwKQomIzQzOwkJcmV0dXJuIHJldDsKJiM0MzsKJiM0MzsJaWYgKHBoeWRldi0mZ3Q7YXV0b25lZyA9PSBBVVRPTkVHX0RJU0FCTEUpCiYjNDM7CQlyZXR1cm4gMDsKJiM0MzsKJiM0MzsJaWYgKGxpbmttb2RlX3Rlc3RfYml0KEVUSFRPT0xfTElOS19NT0RFXzEwMDBiYXNlVF9GdWxsX0JJVCwKJiM0MzsJCQkgICAgICBwaHlkZXYtJmd0O2FkdmVydGlzaW5nKSkKJiM0MzsJCWFkdl8xZyA9IEFEVkVSVElTRV8xMDAwRlVMTDsKJiM0MzsJaWYgKGxpbmttb2RlX3Rlc3RfYml0KEVUSFRPT0xfTElOS19NT0RFXzEwMDBiYXNlVF9IYWxmX0JJVCwKJiM0MzsJCQkgICAgICBwaHlkZXYtJmd0O2FkdmVydGlzaW5nKSkKJiM0MzsJCWFkdl8xZyB8PSBBRFZFUlRJU0VfMTAwMEhBTEY7CiYjNDM7CiYjNDM7CXJldCA9IHBoeV9tb2RpZnlfbW1kX2NoYW5nZWQocGh5ZGV2LCBNRElPX01NRF9WRU5EMiwKJiM0MzsJCQkJICAgICBSVEw4MjJYX1ZORDJfQzIyX1JFRyhNSUlfQ1RSTDEwMDApLAomIzQzOwkJCQkgICAgIEFEVkVSVElTRV8xMDAwRlVMTCB8IEFEVkVSVElTRV8xMDAwSEFMRiwKJiM0MzsJCQkJICAgICBhZHZfMWcpOwomIzQzOwlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCXJldHVybiByZXQ7CiYjNDM7CWlmIChyZXQgJmd0OyAwKQomIzQzOwkJcmV0dXJuIGdlbnBoeV9jNDVfcmVzdGFydF9hbmVnKHBoeWRldik7CiYjNDM7CiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW50IHJ0bDgyNjF4X2NvbmZpZ19pbml0KHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgcnRsODI2MXhfcHJpdiAqcHJpdiA9IHBoeWRldi0mZ3Q7cHJpdjsKJiM0MzsKJiM0MzsJLyogVGhlIGZpcm13YXJlIHBhcmFtZXRlcnMgYXJlIHByZXNlcnZlZCBhY3Jvc3MgSUVFRSBzb2Z0IHJlc2V0cyBhbmQKJiM0MzsJICogc3VzcGVuZC9yZXN1bWUgY3ljbGVzLiBSZWxvYWRpbmcgaXMgb25seSBuZWNlc3NhcnkgYWZ0ZXIgYSBwb3dlcgomIzQzOwkgKiBjeWNsZSBvciBoYXJkIHJlc2V0LgomIzQzOwkgKi8KJiM0MzsJaWYgKHByaXYtJmd0O2Z3X25hbWUgJmFtcDsmYW1wOyAhcHJpdi0mZ3Q7ZndfbG9hZGVkKQomIzQzOwkJcmV0dXJuIHJ0bDgyNjF4X2Z3X2xvYWQocGh5ZGV2KTsKJiM0MzsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQomIzQzOwogc3RhdGljIGludCBydGw4MjF4X3Byb2JlKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpCiB7CiAJc3RydWN0IGRldmljZSAqZGV2ID0gJmFtcDtwaHlkZXYtJmd0O21kaW8uZGV2OwpAQCAtMzAwMSw2ICYjNDM7MzM5NCwxOSBAQCBzdGF0aWMgc3RydWN0IHBoeV9kcml2ZXIgcmVhbHRla19kcnZzW10gPSB7CiAJCS5yZXN1bWUJCT0gZ2VucGh5X3Jlc3VtZSwKIAkJLnJlYWRfbW1kCT0gZ2VucGh5X3JlYWRfbW1kX3Vuc3VwcG9ydGVkLAogCQkud3JpdGVfbW1kCT0gZ2VucGh5X3dyaXRlX21tZF91bnN1cHBvcnRlZCwKJiM0MzsJfSwgewomIzQzOwkJUEhZX0lEX01BVENIX0VYQUNUKFJUTF84MjYxQ19DRyksCiYjNDM7CQkubmFtZQkJCT0gJiMzNDtSZWFsdGVrIFJUTDgyNjFDIDEwR2JwcyBQSFkmIzM0OywKJiM0MzsJCS5wcm9iZQkJCT0gcnRsODI2MXhfcHJvYmUsCiYjNDM7CQkuY29uZmlnX2luaXQJCT0gcnRsODI2MXhfY29uZmlnX2luaXQsCiYjNDM7CQkuZ2V0X2ZlYXR1cmVzCQk9IHJ0bDgyNjF4X2dldF9mZWF0dXJlcywKJiM0MzsJCS5jb25maWdfYW5lZwkJPSBydGw4MjYxeF9jb25maWdfYW5lZywKJiM0MzsJCS5yZWFkX3N0YXR1cwkJPSBydGw4MjYxeF9yZWFkX3N0YXR1cywKJiM0MzsJCS5jb25maWdfaW50cgkJPSBydGw4MjYxeF9jb25maWdfaW50ciwKJiM0MzsJCS5oYW5kbGVfaW50ZXJydXB0CT0gcnRsODI2MXhfaGFuZGxlX2ludGVycnVwdCwKJiM0MzsJCS5zb2Z0X3Jlc2V0CQk9IGdlbnBoeV9jNDVfcG1hX3NvZnRfcmVzZXQsCiYjNDM7CQkuc3VzcGVuZAkJPSBnZW5waHlfYzQ1X3BtYV9zdXNwZW5kLAomIzQzOwkJLnJlc3VtZQkJCT0gZ2VucGh5X2M0NV9wbWFfcmVzdW1lLAogCX0sCiB9OwogCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3BoeS5oIGIvaW5jbHVkZS9saW51eC9waHkuaAppbmRleCAxOTlhN2FhYTM0MWJmZC4uZDZiYzE5OTMxZmI4MzUgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvcGh5LmgKJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9saW51eC9waHkuaApAQCAtMjMwOSw2ICYjNDM7MjMwOSw3IEBAIGludCBnZW5waHlfYzM3X3JlYWRfc3RhdHVzKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYsIGJvb2wgKmNoYW5nZWQpOwogLyogQ2xhdXNlIDQ1IFBIWSAqLwogaW50IGdlbnBoeV9jNDVfcmVzdGFydF9hbmVnKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpOwogaW50IGdlbnBoeV9jNDVfY2hlY2tfYW5kX3Jlc3RhcnRfYW5lZyhzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2LCBib29sIHJlc3RhcnQpOwomIzQzO2ludCBnZW5waHlfYzQ1X3BtYV9zb2Z0X3Jlc2V0KHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpOwogaW50IGdlbnBoeV9jNDVfYW5lZ19kb25lKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpOwogaW50IGdlbnBoeV9jNDVfcmVhZF9saW5rKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpOwogaW50IGdlbnBoeV9jNDVfcmVhZF9scGEoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldik7CmRpZmYgLS1naXQgYS9pbmNsdWRlL3VhcGkvbGludXgvbWRpby5oIGIvaW5jbHVkZS91YXBpL2xpbnV4L21kaW8uaAppbmRleCBiMjU0MWM5NDhmYzFlYi4uMDZmNGJjM2MyMGM3MTcgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvdWFwaS9saW51eC9tZGlvLmgKJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS91YXBpL2xpbnV4L21kaW8uaApAQCAtMzMyLDggJiM0MzszMzIsMTMgQEAKICNkZWZpbmUgTURJT19BTl8xMEdCVF9DVFJMX0FEVjJfNUcJMHgwMDgwCS8qIEFkdmVydGlzZSAyLjVHQkFTRS1UICovCiAjZGVmaW5lIE1ESU9fQU5fMTBHQlRfQ1RSTF9BRFY1RwkweDAxMDAJLyogQWR2ZXJ0aXNlIDVHQkFTRS1UICovCiAjZGVmaW5lIE1ESU9fQU5fMTBHQlRfQ1RSTF9BRFYxMEcJMHgxMDAwCS8qIEFkdmVydGlzZSAxMEdCQVNFLVQgKi8KJiM0MzsjZGVmaW5lIE1ESU9fQU5fMTBHQlRfQ1RSTF9NU19FTkFCTEUJMHg4MDAwCS8qIE1hc3Rlci9zbGF2ZSBtYW51YWwgY29uZmlnIGVuYWJsZSAqLwomIzQzOyNkZWZpbmUgTURJT19BTl8xMEdCVF9DVFJMX01TX1ZBTFVFCTB4NDAwMAkvKiBNYXN0ZXIvc2xhdmUgY29uZmlnIHZhbHVlICgxPU1hc3RlcikgKi8KJiM0MzsjZGVmaW5lIE1ESU9fQU5fMTBHQlRfQ1RSTF9NU19QT1JUX1RZUEUJMHgyMDAwCS8qIE1hc3RlciBQcmVmZXJyZWQgVHlwZSAqLwogCiAvKiBBTiAxMEdCQVNFLVQgc3RhdHVzIHJlZ2lzdGVyLiAqLwomIzQzOyNkZWZpbmUgTURJT19BTl8xMEdCVF9TVEFUX01TX0ZBVUxUCTB4ODAwMAkvKiBNYXN0ZXIvc2xhdmUgZmF1bHQgKi8KJiM0MzsjZGVmaW5lIE1ESU9fQU5fMTBHQlRfU1RBVF9NU19SRVMJMHg0MDAwCS8qIE1hc3Rlci9zbGF2ZSByZXNvbHV0aW9uICgxPU1hc3RlcikgKi8KICNkZWZpbmUgTURJT19BTl8xMEdCVF9TVEFUX0xQMl81RwkweDAwMjAgIC8qIExQIGlzIDIuNUdCVCBjYXBhYmxlICovCiAjZGVmaW5lIE1ESU9fQU5fMTBHQlRfU1RBVF9MUDVHCQkweDAwNDAgIC8qIExQIGlzIDVHQlQgY2FwYWJsZSAqLwogI2RlZmluZSBNRElPX0FOXzEwR0JUX1NUQVRfTFBUUlIJMHgwMjAwCS8qIExQIHRyYWluaW5nIHJlc2V0IHJlcS4gKi8KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDMgMDc6MzU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTAyMzMKCQkJCQkJCW91dHB1dDogMTgKCQkJCQkJCXRob3VnaHRzOiA0ODMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBSZWFjaGFiaWxpdHkgb2YgdGhlIFJUTDgyNjFDIFBIWSBEcml2ZXIgaW4gYSBWaXJ0dWFsaXplZCBDb250ZXh0KioKCk9rYXksIHNvIHdlIGhhdmUgdGhpcyBwYXRjaCBhZGRpbmcgc3VwcG9ydCBmb3IgdGhlIFJlYWx0ZWsgUlRMODI2MUMgMTBHYnBzIFBIWSBpbiBgcmVhbHRla19tYWluLmNgLCBhbG9uZyB3aXRoIHNvbWUgQ2xhdXNlIDQ1IFBIWSBmdW5jdGlvbnMgYW5kIG1vZGlmaWNhdGlvbnMgdG8gZXhpc3Rpbmcgb25lcyBpbiBgcGh5LWM0NS5jYC4gQ3J1Y2lhbGx5LCB0aGVyZSYjMzk7cyBmaXJtd2FyZSBsb2FkaW5nIGZvciB0aGUgUlRMODI2MUMuIE15IG1haW4gY29uY2VybiBpcyB3aGV0aGVyIHRoaXMgaXMgYWN0dWFsbHkgKnJlYWNoYWJsZSogaW4gYSB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudC4gVGhhdCYjMzk7cyB0aGUgcmVhbCB0ZXN0LgoKVGhpbmtpbmcgdGhyb3VnaCBpdCwgUEhZIGRyaXZlcnMgYXJlIHVzdWFsbHkgcmVhY2hhYmxlIGlmIHdlIGNhbiBnZXQgYSB2aXJ0dWFsIE1ESU8gYnVzIHVwIGFuZCBydW5uaW5nLCBvciBpZiBhIG5ldHdvcmsgZHJpdmVyIHVzZXMgdGhlbSwgd2hpY2ggdGhlbiBsaW5rcyB0byB0aGUgUEhZIGRyaXZlci4gU28sIHRoZSBxdWVzdGlvbiBiZWNvbWVzOiBjYW4gd2UgaW5zdGFudGlhdGUgYSBQSFkgZGV2aWNlIHRocm91Z2ggc29tZSB2aXJ0dWFsIGRyaXZlcnM/IExpa2UsIG1heWJlIGBtYWNzZWNgLCBvciBgdmV0aGAsIG9yIGV2ZW4gYG5ldGRldnNpbWA/IEJ1dCB3YWl0LCBJJiMzOTttIHByZXR0eSBzdXJlIGBuZXRkZXZzaW1gIGRvZXNuJiMzOTt0IGFjdHVhbGx5IGluc3RhbnRpYXRlICpyZWFsKiBQSFlzLiBBbmQgdGhlbiBJIHJlbWVtYmVyLCBgbmV0ZGV2c2ltYCBkb2VzbiYjMzk7dCB1c2UgdGhlIGBwaHlfZGV2aWNlYCBzdHJ1Y3R1cmUgYXQgYWxsLgoKV2hhdCBhYm91dCBzb21ldGhpbmcgbGlrZSBgbWFjYmAgb3Igb3RoZXIgZHJpdmVycyB0aGF0IG1pZ2h0IGJlIGVtdWxhdGVkIGluIFFFTVU/IFllcywgdGhleSBtaWdodCBiZSBlbXVsYXRlZCwgYnV0IHRoZXkgdHlwaWNhbGx5IHVzZSBzcGVjaWZpYyBQSFlzLiBUaGVuIEkgcmVjYWxsLCBjYW4gU3l6a2FsbGVyIGluamVjdCBNRElPIHRyYWZmaWM/IEkgcmVtZW1iZXJlZCB0aGUgZXhpc3RlbmNlIG9mIGBzeXpfbWRpb19yZWFkYC9gc3l6X21kaW9fd3JpdGVgIHN5c3RlbSBjYWxscywgYnV0IEkgaGF2ZSB0byBzdG9wIG15c2VsZiAtIHRoYXQmIzM5O3Mgbm90IHJpZ2h0LgoKT2theSwgYmFjayB0byBiYXNpY3MuIENhbiB3ZSByZWFjaCBhIGZ1bmN0aW9uIGxpa2UgYGdlbnBoeV9jNDVfcmVhZF9zdGF0dXNgPyBZZXMsIGlmIGEgUEhZIGRldmljZSBpcyByZWdpc3RlcmVkLiBOb3csIHRoZSBrZXkgcXVlc3Rpb246IGNhbiBhIHVzZXIgcmVnaXN0ZXIgYSBQSFkgZGV2aWNlPyBJIHZhZ3VlbHkgcmVjYWxsIGBtZGlvLWJjbS11bmltYWNgIGFuZCBzaW1pbGFyIHRoaW5ncyBleGlzdGluZy4gQnV0IHdhaXQsIG1heWJlIHdlIGNvdWxkIGp1c3QgZnV6eiB0aGUgUEhZIGxheWVyIGRpcmVjdGx5IGlmIHRoZXJlJiMzOTtzIGEgd2F5IHRvIHRyaWdnZXIgaXQuCgpGdXp6aW5nLi4uIGRvZXMgU3l6a2FsbGVyIGZ1enogUEhZIGRyaXZlcnMgdGhyb3VnaCBgdHVuYCBvciBgdmV0aGA/IE5vLCB0aGF0IGRvZXNuJiMzOTt0IHNvdW5kIHJpZ2h0LiBQSFkgZHJpdmVycyBhcmUgdXN1YWxseSBwcm9iZWQgdmlhIHRoZSBNRElPIGJ1cy4gU28sIGlzIHRoZXJlIGV2ZW4gYSB2aXJ0dWFsIE1ESU8gYnVzIGluIHRoZSBrZXJuZWw/IEkgbmVlZCB0byBzZWFyY2ggZm9yIHRoYXQuIExldCYjMzk7cyBsb29rIGZvciAmIzM0O21kaW8mIzM0OyBjb21iaW5lZCB3aXRoIHNvbWV0aGluZyBsaWtlICYjMzQ7bW9jayYjMzQ7IG9yICYjMzQ7c2ltJiMzNDsuIFRoYXQmIzM5O3MgdGhlIGtleS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMyAwNzozNTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+RXJyb3I6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5ubyBtYXRjaGVzPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O21kaW8uKnNpbSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtlcnJvciYjMzQ7OiAmIzM0O25vIG1hdGNoZXMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDMgMDc6MzY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTEyNjMKCQkJCQkJCW91dHB1dDogMTgKCQkJCQkJCXRob3VnaHRzOiAyMgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0aG91Z2h0IHByb2Nlc3Mgc3VtbWFyaXplZCBmcm9tIHRoYXQgcHJvbXB0LCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipNRElPIERyaXZlciBJbnN0YW50aWF0aW9uIEludmVzdGlnYXRpb24qKgoKQWxyaWdodCwgbGV0JiMzOTtzIGdldCBkb3duIHRvIGJyYXNzIHRhY2tzLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gcXVpY2tseSBhc2NlcnRhaW4gdGhlIGxhbmRzY2FwZSBvZiBgbWRpb2AgZHJpdmVycyB3aXRoaW4gdGhlIHN5c3RlbS4gTXkgcHJpbWFyeSBjb25jZXJuIGlzIGNlbnRlcmVkIG9uIHVzZXItc3BhY2UgaW5zdGFudGlhdGlvbi4gQXJlIHRoZXJlIGFueSBgbWRpb2AgZHJpdmVycyBleHBvc2VkLCBkb2N1bWVudGVkLCBhbmQgcG90ZW50aWFsbHkgZGVzaWduZWQgZm9yIGRpcmVjdCBpbnRlcmFjdGlvbiBmcm9tIHVzZXIgYXBwbGljYXRpb25zPyBJJiMzOTttIHRoaW5raW5nIGFib3V0IHRoaW5ncyBsaWtlIGRpcmVjdCBzeXNmcyBhY2Nlc3MsIGlvY3Rscywgb3IgYW55IG90aGVyIG1lY2hhbmlzbSB0aGF0IHByb3ZpZGVzIGEgdXNlciBpbnRlcmZhY2UuIFRoaXMgaXNuJiMzOTt0IGp1c3QgYSBnZW5lcmljIHByb2JlOyBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpZiB0aGUga2VybmVsIGZhY2lsaXRhdGVzIHVzZXItc3BhY2UgY29udHJvbCBvdmVyIHNwZWNpZmljIGBtZGlvYCBpbnN0YW5jZXMuIEkmIzM5O20gbG9va2luZyBmb3IgYSBxdWljayBzY2FuIG9mIHRoZSB0eXBpY2FsIGRyaXZlciByZWdpc3RyYXRpb24gcGF0dGVybnMsIGRldmljZSB0cmVlIGJpbmRpbmdzLCBhbmQgYW55IGFzc29jaWF0ZWQgY2hhcmFjdGVyIG9yIG5ldHdvcmsgaW50ZXJmYWNlcy4gVW5kZXJzdGFuZGluZyB0aGUgcGVybWl0dGVkIGFuZCBwcm9oaWJpdGVkIHVzZXItc3BhY2UgaW5zdGFudGlhdGlvbiBzY2VuYXJpb3Mgb2YgTURJTyBkcml2ZXJzIHdpbGwgYmUgaW1wb3J0YW50IHRvIHdoYXRldmVyIEkgYW0gZG9pbmcuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDMgMDc6MzY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkVycm9yOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bm8gbWF0Y2hlczwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDttZGlvLip2aXJ0dWFsJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O2Vycm9yJiMzNDs6ICYjMzQ7bm8gbWF0Y2hlcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMyAwNzozNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMTUxNgoJCQkJCQkJb3V0cHV0OiAxNwoJCQkJCQkJdGhvdWdodHM6IDE4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCBwcm9jZXNzLCBmcm9tIGFuIGV4cGVydCYjMzk7cyBwZXJzcGVjdGl2ZToKCioqRGl2aW5nIERlZXAgaW50byB0aGUgUEhZIExheWVyKioKCkhtbSwgaG9sZCBvbiBhIHNlY29uZC4gV2UmIzM5O3ZlIGJlZW4gZm9jdXNpbmcgb24gdGhlIGhpZ2hlci1sZXZlbCBuZXR3b3JrIHN0YWNrLCBidXQgSSB0aGluayB3ZSYjMzk7cmUgb3Zlcmxvb2tpbmcgc29tZXRoaW5nIGNyaXRpY2FsIGluIHRoaXMgYW5hbHlzaXMuIFRoYXQgZmlsZSwgYGRyaXZlcnMvbmV0L3BoeS9maXhlZF9waHkuY2AuLi4gd2hhdCYjMzk7cyBpdHMgcm9sZT8gSSBjYW4mIzM5O3QgaWdub3JlIGl0LiBJdCYjMzk7cyB0aGUgZHJpdmVyIGZvciB0aGUgJiMzNDtmaXhlZCBQSFksJiMzNDsgd2hpY2gsIGRlcGVuZGluZyBvbiB0aGUgY29udGV4dCwgY291bGQgYmUgYSBrZXkgcGllY2UgaW4gdGhpcyBuZXR3b3JrIGludGVyZmFjZSBwdXp6bGUuIFdlIG5lZWQgdG8gY29uc2lkZXIgaG93IGl0JiMzOTtzIGludGVyYWN0aW5nLCBvciAqbm90KiBpbnRlcmFjdGluZywgd2l0aCB0aGUgcmVzdCBvZiB0aGUgY29tcG9uZW50cyB3ZSYjMzk7cmUgbG9va2luZyBhdC4gVGhpcyBjb3VsZCBiZSB3aGVyZSB0aGUgcnViYmVyIG1lZXRzIHRoZSByb2FkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAzIDA3OjM2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2ZpeGVkX3BoeSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYz00Mzg9c3RhdGljIHZvaWQgZHNhX2xvb3BfcGh5ZGV2c191bnJlZ2lzdGVyKHZvaWQpXG4tLVxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtNDQxLVx0XHRpZiAoIUlTX0VSUihwaHlkZXZzW2ldKSlcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jOjQ0MjpcdFx0XHRmaXhlZF9waHlfdW5yZWdpc3RlcihwaHlkZXZzW2ldKTtcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jLTQ0My1cdH1cbi0tXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYz00ODI9c3RhdGljIGludCBfX2luaXQgZHNhX2xvb3BfaW5pdCh2b2lkKVxuLS1cbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jLTQ5MS1cdGZvciAoaSA9IDA7IGkgXHUwMDNjIE5VTV9GSVhFRF9QSFlTOyBpJiM0MzsmIzQzOylcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jOjQ5MjpcdFx0cGh5ZGV2c1tpXSA9IGZpeGVkX3BoeV9yZWdpc3Rlcl8xMDBmZCgpO1xuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtNDkzLVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2I0NC5jPTIyMzQ9c3RhdGljIGludCBiNDRfcmVnaXN0ZXJfcGh5X29uZShzdHJ1Y3QgYjQ0ICpicClcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9iNDQuYy0yMjcyLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vYjQ0LmM6MjI3MzpcdFx0cGh5ZGV2ID0gZml4ZWRfcGh5X3JlZ2lzdGVyXzEwMGZkKCk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9iNDQuYy0yMjc0LVx0XHRpZiAoIUlTX0VSUihwaHlkZXYpKVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2I0NC5jPTIzMTM9c3RhdGljIHZvaWQgYjQ0X3VucmVnaXN0ZXJfcGh5X29uZShzdHJ1Y3QgYjQ0ICpicClcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9iNDQuYy0yMzIyLVx0aWYgKHBoeV9pc19wc2V1ZG9fZml4ZWRfbGluayhwaHlkZXYpKVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vYjQ0LmM6MjMyMzpcdFx0Zml4ZWRfcGh5X3VucmVnaXN0ZXIocGh5ZGV2KTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2I0NC5jLTIzMjQtXHRtZGlvYnVzX3VucmVnaXN0ZXIobWlpX2J1cyk7XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vYmdtYWMuYz0xNDM5PWludCBiZ21hY19waHlfY29ubmVjdF9kaXJlY3Qoc3RydWN0IGJnbWFjICpiZ21hYylcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2JnbWFjLmMtMTQ0MC17XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9iZ21hYy5jOjE0NDE6XHRzdHJ1Y3QgZml4ZWRfcGh5X3N0YXR1cyBmcGh5X3N0YXR1cyA9IHtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2JnbWFjLmMtMTQ0Mi1cdFx0LmxpbmsgPSAxLFxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2JnbWFjLmMtMTQ0OC1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2JnbWFjLmM6MTQ0OTpcdHBoeV9kZXYgPSBmaXhlZF9waHlfcmVnaXN0ZXIoXHUwMDI2ZnBoeV9zdGF0dXMsIE5VTEwpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vYmdtYWMuYy0xNDUwLVx0aWYgKElTX0VSUihwaHlfZGV2KSkge1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2dlbmV0L2JjbW1paS5jPTk3PXZvaWQgYmNtZ2VuZXRfbWlpX3NldHVwKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vZ2VuZXQvYmNtbWlpLmMtMTE2LVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vZ2VuZXQvYmNtbWlpLmM6MTE3OnN0YXRpYyBpbnQgYmNtZ2VuZXRfZml4ZWRfcGh5X2xpbmtfdXBkYXRlKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9nZW5ldC9iY21taWkuYzoxMTg6XHRcdFx0XHRcdCAgc3RydWN0IGZpeGVkX3BoeV9zdGF0dXMgKnN0YXR1cylcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2dlbmV0L2JjbW1paS5jLTExOS17XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vZ2VuZXQvYmNtbWlpLmM9MTg2PXN0YXRpYyB2b2lkIGJjbWdlbmV0X21vY2FfcGh5X3NldHVwKHN0cnVjdCBiY21nZW5ldF9wcml2ICpwcml2KVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2dlbmV0L2JjbW1paS5jLTE4OC1cdGlmIChiY21nZW5ldF9oYXNfbW9jYV9saW5rX2RldChwcml2KSlcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2dlbmV0L2JjbW1paS5jOjE4OTpcdFx0Zml4ZWRfcGh5X3NldF9saW5rX3VwZGF0ZShwcml2LVx1MDAzZWRldi1cdTAwM2VwaHlkZXYsXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9nZW5ldC9iY21taWkuYzoxOTA6XHRcdFx0XHRcdCAgYmNtZ2VuZXRfZml4ZWRfcGh5X2xpbmtfdXBkYXRlKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2dlbmV0L2JjbW1paS5jLTE5MS19XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZmFyYWRheS9mdGdtYWMxMDAuYz00Mz1zdHJ1Y3QgZnRnbWFjMTAwX21hdGNoX2RhdGEge1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZhcmFkYXkvZnRnbWFjMTAwLmMtNjYtLyogRm9yIE5DLVNJIHRvIHJlZ2lzdGVyIGEgZml4ZWQtbGluayBwaHkgZGV2aWNlICovXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mYXJhZGF5L2Z0Z21hYzEwMC5jOjY3OnN0YXRpYyBzdHJ1Y3QgZml4ZWRfcGh5X3N0YXR1cyBuY3NpX3BoeV9zdGF0dXMgPSB7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mYXJhZGF5L2Z0Z21hYzEwMC5jLTY4LVx0LmxpbmsgPSAxLFxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZhcmFkYXkvZnRnbWFjMTAwLmM9MTc4MD1zdGF0aWMgdm9pZCBmdGdtYWMxMDBfcGh5X2Rpc2Nvbm5lY3Qoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldilcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mYXJhZGF5L2Z0Z21hYzEwMC5jLTE3OTItXHRpZiAocHJpdi1cdTAwM2V1c2VfbmNzaSlcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZhcmFkYXkvZnRnbWFjMTAwLmM6MTc5MzpcdFx0Zml4ZWRfcGh5X3VucmVnaXN0ZXIocGh5ZGV2KTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZhcmFkYXkvZnRnbWFjMTAwLmMtMTc5NC19XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZmFyYWRheS9mdGdtYWMxMDAuYz0xODQ4PXN0YXRpYyBpbnQgZnRnbWFjMTAwX3Byb2JlX25jc2koc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldixcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mYXJhZGF5L2Z0Z21hYzEwMC5jLTE4NjYtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mYXJhZGF5L2Z0Z21hYzEwMC5jOjE4Njc6XHRwaHlkZXYgPSBmaXhlZF9waHlfcmVnaXN0ZXIoXHUwMDI2bmNzaV9waHlfc3RhdHVzLCBucCk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mYXJhZGF5L2Z0Z21hYzEwMC5jLTE4NjgtXHRpZiAoSVNfRVJSKHBoeWRldikpIHtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mYXJhZGF5L2Z0Z21hYzEwMC5jLTE4ODEtZXJyX3JlZ2lzdGVyX3BoeTpcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZhcmFkYXkvZnRnbWFjMTAwLmM6MTg4MjpcdGZpeGVkX3BoeV91bnJlZ2lzdGVyKHBoeWRldik7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mYXJhZGF5L2Z0Z21hYzEwMC5jLTE4ODMtZXJyX3JlZ2lzdGVyX25kZXY6XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2ZlY19tYWluLmM9Mjk4MT1zdGF0aWMgaW50IGZlY19lbmV0X21paV9wcm9iZShzdHJ1Y3QgbmV0X2RldmljZSAqbmRldilcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZmVjX21haW4uYy0zMDAyLVx0XHRcdG5ldGRldl9pbmZvKG5kZXYsIFwmIzM0O25vIFBIWSwgYXNzdW1pbmcgZGlyZWN0IGNvbm5lY3Rpb24gdG8gc3dpdGNoXFxuXCYjMzQ7KTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9mZWNfbWFpbi5jOjMwMDM6XHRcdFx0cGh5X2RldiA9IGZpeGVkX3BoeV9yZWdpc3Rlcl8xMDBmZCgpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2ZlY19tYWluLmMtMzAwNC1cdFx0XHRpZiAoSVNfRVJSKHBoeV9kZXYpKSB7XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2ZlY19tYWluLmMtMzAxMy1cdFx0XHRpZiAocGh5X2lzX3BzZXVkb19maXhlZF9saW5rKHBoeV9kZXYpKVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2ZlY19tYWluLmM6MzAxNDpcdFx0XHRcdGZpeGVkX3BoeV91bnJlZ2lzdGVyKHBoeV9kZXYpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2ZlY19tYWluLmMtMzAxNS1cdFx0XHRuZXRkZXZfZXJyKG5kZXYsIFwmIzM0O2NvdWxkIG5vdCBhdHRhY2ggdG8gUEhZXFxuXCYjMzQ7KTtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZmVjX21haW4uYz00MjI4PWZlY19lbmV0X2Nsb3NlKHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2KVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9mZWNfbWFpbi5jLTQyNDMtXHRpZiAoIWZlcC1cdTAwM2VwaHlfbm9kZSBcdTAwMjZcdTAwMjYgcGh5X2lzX3BzZXVkb19maXhlZF9saW5rKHBoeV9kZXYpKVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2ZlY19tYWluLmM6NDI0NDpcdFx0Zml4ZWRfcGh5X3VucmVnaXN0ZXIocGh5X2Rldik7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZmVjX21haW4uYy00MjQ1LVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9naWFuZmFyLmM9MzEzMj1zdGF0aWMgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2Vfb3BzIGdmYXJfbmV0ZGV2X29wcyA9IHtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZ2lhbmZhci5jLTMxNDEtXHQubmRvX2dldF9zdGF0czY0ID0gZ2Zhcl9nZXRfc3RhdHM2NCxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9naWFuZmFyLmM6MzE0MjpcdC5uZG9fY2hhbmdlX2NhcnJpZXIgPSBmaXhlZF9waHlfY2hhbmdlX2NhcnJpZXIsXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZ2lhbmZhci5jLTMxNDMtXHQubmRvX3NldF9tYWNfYWRkcmVzcyA9IGdmYXJfc2V0X21hY19hZGRyLFxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9oaWJtY2dlL2hiZ19tZGlvLmM9MjI4PXZvaWQgaGJnX3BoeV9zdG9wKHN0cnVjdCBoYmdfcHJpdiAqcHJpdilcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaGlibWNnZS9oYmdfbWRpby5jLTIzMi1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9oaWJtY2dlL2hiZ19tZGlvLmM6MjMzOnN0YXRpYyB2b2lkIGhiZ19maXhlZF9waHlfdW5pbml0KHZvaWQgKmRhdGEpXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaGlibWNnZS9oYmdfbWRpby5jLTIzNC17XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaGlibWNnZS9oYmdfbWRpby5jOjIzNTpcdGZpeGVkX3BoeV91bnJlZ2lzdGVyKChzdHJ1Y3QgcGh5X2RldmljZSAqKWRhdGEpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2hpYm1jZ2UvaGJnX21kaW8uYy0yMzYtfVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2hpYm1jZ2UvaGJnX21kaW8uYy0yMzctXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaGlibWNnZS9oYmdfbWRpby5jOjIzODpzdGF0aWMgaW50IGhiZ19maXhlZF9waHlfaW5pdChzdHJ1Y3QgaGJnX3ByaXYgKnByaXYpXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaGlibWNnZS9oYmdfbWRpby5jLTIzOS17XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaGlibWNnZS9oYmdfbWRpby5jOjI0MDpcdHN0cnVjdCBmaXhlZF9waHlfc3RhdHVzIGhiZ19maXhlZF9waHlfc3RhdHVzID0ge1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2hpYm1jZ2UvaGJnX21kaW8uYy0yNDEtXHRcdC5saW5rID0gMSxcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaGlibWNnZS9oYmdfbWRpby5jLTI1MC1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9oaWJtY2dlL2hiZ19tZGlvLmM6MjUxOlx0cGh5ZGV2ID0gZml4ZWRfcGh5X3JlZ2lzdGVyKFx1MDAyNmhiZ19maXhlZF9waHlfc3RhdHVzLCBOVUxMKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9oaWJtY2dlL2hiZ19tZGlvLmMtMjUyLVx0aWYgKElTX0VSUihwaHlkZXYpKSB7XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2hpYm1jZ2UvaGJnX21kaW8uYy0yNTctXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaGlibWNnZS9oYmdfbWRpby5jOjI1ODpcdHJldCA9IGRldm1fYWRkX2FjdGlvbl9vcl9yZXNldChkZXYsIGhiZ19maXhlZF9waHlfdW5pbml0LCBwaHlkZXYpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2hpYm1jZ2UvaGJnX21kaW8uYy0yNTktXHRpZiAocmV0KVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9oaWJtY2dlL2hiZ19tZGlvLmM9MjY2PWludCBoYmdfbWRpb19pbml0KHN0cnVjdCBoYmdfcHJpdiAqcHJpdilcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaGlibWNnZS9oYmdfbWRpby5jLTI3NS1cdGlmIChtYWMtXHUwMDNlcGh5X2FkZHIgPT0gSEJHX05PX1BIWSlcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9oaWJtY2dlL2hiZ19tZGlvLmM6Mjc2Olx0XHRyZXR1cm4gaGJnX2ZpeGVkX3BoeV9pbml0KHByaXYpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2hpYm1jZ2UvaGJnX21kaW8uYy0yNzctXG4tLVxuZHJpdmVycy9uZXQvbWRpby9vZl9tZGlvLmM9NDEyPWludCBvZl9waHlfcmVnaXN0ZXJfZml4ZWRfbGluayhzdHJ1Y3QgZGV2aWNlX25vZGUgKm5wKVxuZHJpdmVycy9uZXQvbWRpby9vZl9tZGlvLmMtNDEzLXtcbmRyaXZlcnMvbmV0L21kaW8vb2ZfbWRpby5jOjQxNDpcdHN0cnVjdCBmaXhlZF9waHlfc3RhdHVzIHN0YXR1cyA9IHt9O1xuZHJpdmVycy9uZXQvbWRpby9vZl9tZGlvLmMtNDE1LVx0c3RydWN0IGRldmljZV9ub2RlICpmaXhlZF9saW5rX25vZGU7XG4tLVxuZHJpdmVycy9uZXQvbWRpby9vZl9tZGlvLmMtNDU5LXJlZ2lzdGVyX3BoeTpcbmRyaXZlcnMvbmV0L21kaW8vb2ZfbWRpby5jOjQ2MDpcdHJldHVybiBQVFJfRVJSX09SX1pFUk8oZml4ZWRfcGh5X3JlZ2lzdGVyKFx1MDAyNnN0YXR1cywgbnApKTtcbmRyaXZlcnMvbmV0L21kaW8vb2ZfbWRpby5jLTQ2MS19XG4tLVxuZHJpdmVycy9uZXQvbWRpby9vZl9tZGlvLmM9NDY0PXZvaWQgb2ZfcGh5X2RlcmVnaXN0ZXJfZml4ZWRfbGluayhzdHJ1Y3QgZGV2aWNlX25vZGUgKm5wKVxuLS1cbmRyaXZlcnMvbmV0L21kaW8vb2ZfbWRpby5jLTQ3MS1cbmRyaXZlcnMvbmV0L21kaW8vb2ZfbWRpby5jOjQ3MjpcdGZpeGVkX3BoeV91bnJlZ2lzdGVyKHBoeWRldik7XG5kcml2ZXJzL25ldC9tZGlvL29mX21kaW8uYy00NzMtXG4tLVxuZHJpdmVycy9uZXQvcGh5L01ha2VmaWxlPTYzPW9iai0kKENPTkZJR19EUDgzVEc3MjBfUEhZKVx0JiM0Mzs9IGRwODN0ZzcyMC5vXG5kcml2ZXJzL25ldC9waHkvTWFrZWZpbGU6NjQ6b2JqLSQoQ09ORklHX0ZJWEVEX1BIWSlcdFx0JiM0Mzs9IGZpeGVkX3BoeS5vXG5kcml2ZXJzL25ldC9waHkvTWFrZWZpbGUtNjUtb2JqLSQoQ09ORklHX0lDUExVU19QSFkpXHQmIzQzOz0gaWNwbHVzLm9cbi0tXG5kcml2ZXJzL25ldC9waHkvZml4ZWRfcGh5LmMtMjctXG5kcml2ZXJzL25ldC9waHkvZml4ZWRfcGh5LmM6Mjg6c3RydWN0IGZpeGVkX3BoeSB7XG5kcml2ZXJzL25ldC9waHkvZml4ZWRfcGh5LmMtMjktXHRzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2O1xuZHJpdmVycy9uZXQvcGh5L2ZpeGVkX3BoeS5jOjMwOlx0c3RydWN0IGZpeGVkX3BoeV9zdGF0dXMgc3RhdHVzO1xuZHJpdmVycy9uZXQvcGh5L2ZpeGVkX3BoeS5jOjMxOlx0aW50ICgqbGlua191cGRhdGUpKHN0cnVjdCBuZXRfZGV2aWNlICosIHN0cnVjdCBmaXhlZF9waHlfc3RhdHVzICopO1xuZHJpdmVycy9uZXQvcGh5L2ZpeGVkX3BoeS5jLTMyLX07XG5kcml2ZXJzL25ldC9waHkvZml4ZWRfcGh5LmMtMzMtXG5kcml2ZXJzL25ldC9waHkvZml4ZWRfcGh5LmM6MzQ6c3RhdGljIERFQ0xBUkVfQklUTUFQKGZpeGVkX3BoeV9pZHMsIE5VTV9GUCk7XG5kcml2ZXJzL25ldC9waHkvZml4ZWRfcGh5LmM6MzU6c3RhdGljIHN0cnVjdCBmaXhlZF9waHkgZm1iX2ZpeGVkX3BoeXNbTlVNX0ZQXTtcbmRyaXZlcnMvbmV0L3BoeS9maXhlZF9waHkuYy0zNi1zdGF0aWMgc3RydWN0IG1paV9idXMgKmZtYl9taWlfYnVzO1xuZHJpdmVycy9uZXQvcGh5L2ZpeGVkX3BoeS5jLTM3LVxuZHJpdmVycy9uZXQvcGh5L2ZpeGVkX3BoeS5jOjM4OnN0YXRpYyBzdHJ1Y3QgZml4ZWRfcGh5ICpmaXhlZF9waHlfZmluZChpbnQgYWRkcilcbmRyaXZlcnMvbmV0L3BoeS9maXhlZF9waHkuYy0zOS17XG5kcml2ZXJzL25ldC9waHkvZml4ZWRfcGh5LmM6NDA6XHRyZXR1cm4gdGVzdF9iaXQoYWRkciwgZml4ZWRfcGh5X2lkcykgPyBmbWJfZml4ZWRfcGh5cyAmIzQzOyBhZGRyIDogTlVMTDtcbmRyaXZlcnMvbmV0L3BoeS9maXhlZF9waHkuYy00MS19XG5kcml2ZXJzL25ldC9waHkvZml4ZWRfcGh5LmMtNDItXG5kcml2ZXJzL25ldC9waHkvZml4ZWRfcGh5LmM6NDM6aW50IGZpeGVkX3BoeV9jaGFuZ2VfY2FycmllcihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBib29sIG5ld19jYXJyaWVyKVxuZHJpdmVycy9uZXQvcGh5L2ZpeGVkX3BoeS5jLTQ0LXtcbmRyaXZlcnMvbmV0L3BoeS9maXhlZF9waHkuYy00NS1cdHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYgPSBkZXYtXHUwMDNlcGh5ZGV2O1xuZHJpdmVycy9uZXQvcGh5L2ZpeGVkX3BoeS5jOjQ2Olx0c3RydWN0IGZpeGVkX3BoeSAqZnA7XG5kcml2ZXJzL25ldC9waHkvZml4ZWRfcGh5LmMtNDctXG4tLVxuZHJpdmVycy9uZXQvcGh5L2ZpeGVkX3BoeS5jLTUwLVxuZHJpdmVycy9uZXQvcGh5L2ZpeGVkX3BoeS5jOjUxOlx0ZnAgPSBmaXhlZF9waHlfZmluZChwaHlkZXYtXHUwMDNlbWRpby5hZGRyKTtcbmRyaXZlcnMvbmV0L3BoeS9maXhlZF9waHkuYy01Mi1cdGlmICghZnApXG4tLVxuZHJpdmVycy9uZXQvcGh5L2ZpeGVkX3BoeS5jLTU4LX1cbmRyaXZlcnMvbmV0L3BoeS9maXhlZF9waHkuYzo1OTpFWFBPUlRfU1lNQk9MX0dQTChmaXhlZF9waHlfY2hhbmdlX2NhcnJpZXIpO1xuZHJpdmVycy9uZXQvcGh5L2ZpeGVkX3BoeS5jLTYwLVxuZHJpdmVycy9uZXQvcGh5L2ZpeGVkX3BoeS5jPTYxPXN0YXRpYyBpbnQgZml4ZWRfbWRpb19yZWFkKHN0cnVjdCBtaWlfYnVzICpidXMsIGludCBwaHlfYWRkciwgaW50IHJlZ19udW0pXG5kcml2ZXJzL25ldC9waHkvZml4ZWRfcGh5LmMtNjIte1xuZHJpdmVycy9uZXQvcGh5L2ZpeGVkX3BoeS5jOjYzOlx0c3RydWN0IGZpeGVkX3BoeSAqZnA7XG5kcml2ZXJzL25ldC9waHkvZml4ZWRfcGh5LmMtNjQtXG5kcml2ZXJzL25ldC9waHkvZml4ZWRfcGh5LmM6NjU6XHRmcCA9IGZpeGVkX3BoeV9maW5kKHBoeV9hZGRyKTtcbmRyaXZlcnMvbmV0L3BoeS9maXhlZF9waHkuYy02Ni1cdGlmICghZnApXG4tLVxuZHJpdmVycy9uZXQvcGh5L2ZpeGVkX3BoeS5jPTc1PXN0YXRpYyBpbnQgZml4ZWRfbWRpb193cml0ZShzdHJ1Y3QgbWlpX2J1cyAqYnVzLCBpbnQgcGh5X2FkZHIsIGludCByZWdfbnVtLFxuLS1cbmRyaXZlcnMvbmV0L3BoeS9maXhlZF9waHkuYy04NS0gKi9cbmRyaXZlcnMvbmV0L3BoeS9maXhlZF9waHkuYzo4NjppbnQgZml4ZWRfcGh5X3NldF9saW5rX3VwZGF0ZShzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2LFxuZHJpdmVycy9uZXQvcGh5L2ZpeGVkX3BoeS5jLTg3LVx0XHRcdCAgICAgIGludCAoKmxpbmtfdXBkYXRlKShzdHJ1Y3QgbmV0X2RldmljZSAqLFxuZHJpdmVycy9uZXQvcGh5L2ZpeGVkX3BoeS5jOjg4Olx0XHRcdFx0XHRcdCBzdHJ1Y3QgZml4ZWRfcGh5X3N0YXR1cyAqKSlcbmRyaXZlcnMvbmV0L3BoeS9maXhlZF9waHkuYy04OS17XG5kcml2ZXJzL25ldC9waHkvZml4ZWRfcGh5LmM6OTA6XHRzdHJ1Y3QgZml4ZWRfcGh5ICpmcDtcbmRyaXZlcnMvbmV0L3BoeS9maXhlZF9waHkuYy05MS1cbi0tXG5kcml2ZXJzL25ldC9waHkvZml4ZWRfcGh5LmMtOTQtXG5kcml2ZXJzL25ldC9waHkvZml4ZWRfcGh5LmM6OTU6XHRmcCA9IGZpeGVkX3BoeV9maW5kKHBoeWRldi1cdTAwM2VtZGlvLmFkZHIpO1xuZHJpdmVycy9uZXQvcGh5L2ZpeGVkX3BoeS5jLTk2LVx0aWYgKCFmcClcbi0tXG5kcml2ZXJzL25ldC9waHkvZml4ZWRfcGh5LmMtMTAzLX1cbmRyaXZlcnMvbmV0L3BoeS9maXhlZF9waHkuYzoxMDQ6RVhQT1JUX1NZTUJPTF9HUEwoZml4ZWRfcGh5X3NldF9saW5rX3VwZGF0ZSk7XG5kcml2ZXJzL25ldC9waHkvZml4ZWRfcGh5LmMtMTA1LVxuZHJpdmVycy9uZXQvcGh5L2ZpeGVkX3BoeS5jOjEwNjpzdGF0aWMgdm9pZCBmaXhlZF9waHlfZGVsKGludCBwaHlfYWRkcilcbmRyaXZlcnMvbmV0L3BoeS9maXhlZF9waHkuYy0xMDcte1xuZHJpdmVycy9uZXQvcGh5L2ZpeGVkX3BoeS5jOjEwODpcdHN0cnVjdCBmaXhlZF9waHkgKmZwO1xuZHJpdmVycy9uZXQvcGh5L2ZpeGVkX3BoeS5jLTEwOS1cbmRyaXZlcnMvbmV0L3BoeS9maXhlZF9waHkuYzoxMTA6XHRmcCA9IGZpeGVkX3BoeV9maW5kKHBoeV9hZGRyKTtcbmRyaXZlcnMvbmV0L3BoeS9maXhlZF9waHkuYy0xMTEtXHRpZiAoIWZwKVxuLS1cbmRyaXZlcnMvbmV0L3BoeS9maXhlZF9waHkuYy0xMTQtXHRtZW1zZXQoZnAsIDAsIHNpemVvZigqZnApKTtcbmRyaXZlcnMvbmV0L3BoeS9maXhlZF9waHkuYzoxMTU6XHRjbGVhcl9iaXQocGh5X2FkZHIsIGZpeGVkX3BoeV9pZHMpO1xuZHJpdmVycy9uZXQvcGh5L2ZpeGVkX3BoeS5jLTExNi19XG5kcml2ZXJzL25ldC9waHkvZml4ZWRfcGh5LmMtMTE3LVxuZHJpdmVycy9uZXQvcGh5L2ZpeGVkX3BoeS5jOjExODpzdGF0aWMgaW50IGZpeGVkX3BoeV9nZXRfZnJlZV9hZGRyKHZvaWQpXG5kcml2ZXJzL25ldC9waHkvZml4ZWRfcGh5LmMtMTE5LXtcbi0tXG5kcml2ZXJzL25ldC9waHkvZml4ZWRfcGh5LmMtMTIyLVx0ZG8ge1xuZHJpdmVycy9uZXQvcGh5L2ZpeGVkX3BoeS5jOjEyMzpcdFx0YWRkciA9IGZpbmRfZmlyc3RfemVyb19iaXQoZml4ZWRfcGh5X2lkcywgTlVNX0ZQKTtcbmRyaXZlcnMvbmV0L3BoeS9maXhlZF9waHkuYy0xMjQtXHRcdGlmIChhZGRyID09IE5VTV9GUClcbmRyaXZlcnMvbmV0L3BoeS9maXhlZF9waHkuYy0xMjUtXHRcdFx0cmV0dXJuIC1FTk9TUEM7XG5kcml2ZXJzL25ldC9waHkvZml4ZWRfcGh5LmM6MTI2Olx0fSB3aGlsZSAodGVzdF9hbmRfc2V0X2JpdChhZGRyLCBmaXhlZF9waHlfaWRzKSk7XG5kcml2ZXJzL25ldC9waHkvZml4ZWRfcGh5LmMtMTI3LVxuLS1cbmRyaXZlcnMvbmV0L3BoeS9maXhlZF9waHkuYy0xMzAtXG5kcml2ZXJzL25ldC9waHkvZml4ZWRfcGh5LmM6MTMxOnN0cnVjdCBwaHlfZGV2aWNlICpmaXhlZF9waHlfcmVnaXN0ZXIoY29uc3Qgc3RydWN0IGZpeGVkX3BoeV9zdGF0dXMgKnN0YXR1cyxcbmRyaXZlcnMvbmV0L3BoeS9maXhlZF9waHkuYy0xMzItXHRcdFx0XHQgICAgICBzdHJ1Y3QgZGV2aWNlX25vZGUgKm5wKVxuLS1cbmRyaXZlcnMvbmV0L3BoeS9maXhlZF9waHkuYy0xNDUtXHQvKiBHZXQgdGhlIG5leHQgYXZhaWxhYmxlIFBIWSBhZGRyZXNzLCB1cCB0byBOVU1fRlAgKi9cbmRyaXZlcnMvbmV0L3BoeS9maXhlZF9waHkuYzoxNDY6XHRwaHlfYWRkciA9IGZpeGVkX3BoeV9nZXRfZnJlZV9hZGRyKCk7XG5kcml2ZXJzL25ldC9waHkvZml4ZWRfcGh5LmMtMTQ3LVx0aWYgKHBoeV9hZGRyIFx1MDAzYyAwKVxuLS1cbmRyaXZlcnMvbmV0L3BoeS9maXhlZF9waHkuYy0xNDktXG5kcml2ZXJzL25ldC9waHkvZml4ZWRfcGh5LmM6MTUwOlx0Zm1iX2ZpeGVkX3BoeXNbcGh5X2FkZHJdLnN0YXR1cyA9ICpzdGF0dXM7XG5kcml2ZXJzL25ldC9waHkvZml4ZWRfcGh5LmM6MTUxOlx0Zm1iX2ZpeGVkX3BoeXNbcGh5X2FkZHJdLnN0YXR1cy5saW5rID0gdHJ1ZTtcbmRyaXZlcnMvbmV0L3BoeS9maXhlZF9waHkuYy0xNTItXG4tLVxuZHJpdmVycy9uZXQvcGh5L2ZpeGVkX3BoeS5jLTE1NC1cdGlmIChJU19FUlIocGh5KSkge1xuZHJpdmVycy9uZXQvcGh5L2ZpeGVkX3BoeS5jOjE1NTpcdFx0Zml4ZWRfcGh5X2RlbChwaHlfYWRkcik7XG5kcml2ZXJzL25ldC9waHkvZml4ZWRfcGh5LmMtMTU2LVx0XHRyZXR1cm4gRVJSX1BUUigtRUlOVkFMKTtcbi0tXG5kcml2ZXJzL25ldC9waHkvZml4ZWRfcGh5LmMtMTY2LVx0XHRvZl9ub2RlX3B1dChucCk7XG5kcml2ZXJzL25ldC9waHkvZml4ZWRfcGh5LmM6MTY3Olx0XHRmaXhlZF9waHlfZGVsKHBoeV9hZGRyKTtcbmRyaXZlcnMvbmV0L3BoeS9maXhlZF9waHkuYy0xNjgtXHRcdHJldHVybiBFUlJfUFRSKHJldCk7XG4tLVxuZHJpdmVycy9uZXQvcGh5L2ZpeGVkX3BoeS5jLTE3Mi19XG5kcml2ZXJzL25ldC9waHkvZml4ZWRfcGh5LmM6MTczOkVYUE9SVF9TWU1CT0xfR1BMKGZpeGVkX3BoeV9yZWdpc3Rlcik7XG5kcml2ZXJzL25ldC9waHkvZml4ZWRfcGh5LmMtMTc0LVxuZHJpdmVycy9uZXQvcGh5L2ZpeGVkX3BoeS5jOjE3NTpzdHJ1Y3QgcGh5X2RldmljZSAqZml4ZWRfcGh5X3JlZ2lzdGVyXzEwMGZkKHZvaWQpXG5kcml2ZXJzL25ldC9waHkvZml4ZWRfcGh5LmMtMTc2LXtcbmRyaXZlcnMvbmV0L3BoeS9maXhlZF9waHkuYzoxNzc6XHRzdGF0aWMgY29uc3Qgc3RydWN0IGZpeGVkX3BoeV9zdGF0dXMgc3RhdHVzID0ge1xuZHJpdmVycy9uZXQvcGh5L2ZpeGVkX3BoeS5jLTE3OC1cdFx0LnNwZWVkXHQ9IFNQRUVEXzEwMCxcbi0tXG5kcml2ZXJzL25ldC9waHkvZml4ZWRfcGh5LmMtMTgxLVxuZHJpdmVycy9uZXQvcGh5L2ZpeGVkX3BoeS5jOjE4MjpcdHJldHVybiBmaXhlZF9waHlfcmVnaXN0ZXIoXHUwMDI2c3RhdHVzLCBOVUxMKTtcbmRyaXZlcnMvbmV0L3BoeS9maXhlZF9waHkuYy0xODMtfVxuZHJpdmVycy9uZXQvcGh5L2ZpeGVkX3BoeS5jOjE4NDpFWFBPUlRfU1lNQk9MX0dQTChmaXhlZF9waHlfcmVnaXN0ZXJfMTAwZmQpO1xuZHJpdmVycy9uZXQvcGh5L2ZpeGVkX3BoeS5jLTE4NS1cbmRyaXZlcnMvbmV0L3BoeS9maXhlZF9waHkuYzoxODY6dm9pZCBmaXhlZF9waHlfdW5yZWdpc3RlcihzdHJ1Y3QgcGh5X2RldmljZSAqcGh5KVxuZHJpdmVycy9uZXQvcGh5L2ZpeGVkX3BoeS5jLTE4Ny17XG4tLVxuZHJpdmVycy9uZXQvcGh5L2ZpeGVkX3BoeS5jLTE4OS1cdG9mX25vZGVfcHV0KHBoeS1cdTAwM2VtZGlvLmRldi5vZl9ub2RlKTtcbmRyaXZlcnMvbmV0L3BoeS9maXhlZF9waHkuYzoxOTA6XHRmaXhlZF9waHlfZGVsKHBoeS1cdTAwM2VtZGlvLmFkZHIpO1xuZHJpdmVycy9uZXQvcGh5L2ZpeGVkX3BoeS5jLTE5MS1cdHBoeV9kZXZpY2VfZnJlZShwaHkpO1xuZHJpdmVycy9uZXQvcGh5L2ZpeGVkX3BoeS5jLTE5Mi19XG5kcml2ZXJzL25ldC9waHkvZml4ZWRfcGh5LmM6MTkzOkVYUE9SVF9TWU1CT0xfR1BMKGZpeGVkX3BoeV91bnJlZ2lzdGVyKTtcbmRyaXZlcnMvbmV0L3BoeS9maXhlZF9waHkuYy0xOTQtXG4tLVxuZHJpdmVycy9uZXQvcGh5L3BoeWxpbmsuYz0zMzYxPXN0YXRpYyBpbnQgcGh5bGlua19taWlfZW11bF9yZWFkKHVuc2lnbmVkIGludCByZWcsXG4tLVxuZHJpdmVycy9uZXQvcGh5L3BoeWxpbmsuYy0zMzYzLXtcbmRyaXZlcnMvbmV0L3BoeS9waHlsaW5rLmM6MzM2NDpcdHN0cnVjdCBmaXhlZF9waHlfc3RhdHVzIGZzO1xuZHJpdmVycy9uZXQvcGh5L3BoeWxpbmsuYy0zMzY1LVx0dW5zaWduZWQgbG9uZyAqbHBhID0gc3RhdGUtXHUwMDNlbHBfYWR2ZXJ0aXNpbmc7XG4tLVxuZHJpdmVycy9uZXQvcGh5L3N3cGh5LmMtNC0gKlxuZHJpdmVycy9uZXQvcGh5L3N3cGh5LmM6NTogKiBDb2RlIHRha2VuIGZyb20gZml4ZWRfcGh5LmMgYnkgUnVzc2VsbCBLaW5nLlxuZHJpdmVycy9uZXQvcGh5L3N3cGh5LmMtNi0gKlxuLS1cbmRyaXZlcnMvbmV0L3BoeS9zd3BoeS5jPTcxPXN0YXRpYyBpbnQgc3dwaHlfZGVjb2RlX3NwZWVkKGludCBzcGVlZClcbi0tXG5kcml2ZXJzL25ldC9waHkvc3dwaHkuYy05Mi0gKi9cbmRyaXZlcnMvbmV0L3BoeS9zd3BoeS5jOjkzOmludCBzd3BoeV92YWxpZGF0ZV9zdGF0ZShjb25zdCBzdHJ1Y3QgZml4ZWRfcGh5X3N0YXR1cyAqc3RhdGUpXG5kcml2ZXJzL25ldC9waHkvc3dwaHkuYy05NC17XG4tLVxuZHJpdmVycy9uZXQvcGh5L3N3cGh5LmM9MTA2PUVYUE9SVF9TWU1CT0xfR1BMKHN3cGh5X3ZhbGlkYXRlX3N0YXRlKTtcbi0tXG5kcml2ZXJzL25ldC9waHkvc3dwaHkuYy0xMTQtICovXG5kcml2ZXJzL25ldC9waHkvc3dwaHkuYzoxMTU6aW50IHN3cGh5X3JlYWRfcmVnKGludCByZWcsIGNvbnN0IHN0cnVjdCBmaXhlZF9waHlfc3RhdHVzICpzdGF0ZSlcbmRyaXZlcnMvbmV0L3BoeS9zd3BoeS5jLTExNi17XG4tLVxuZHJpdmVycy9uZXQvcGh5L3N3cGh5LmgtNC1cbmRyaXZlcnMvbmV0L3BoeS9zd3BoeS5oOjU6c3RydWN0IGZpeGVkX3BoeV9zdGF0dXM7XG5kcml2ZXJzL25ldC9waHkvc3dwaHkuaC02LVxuZHJpdmVycy9uZXQvcGh5L3N3cGh5Lmg6NzppbnQgc3dwaHlfdmFsaWRhdGVfc3RhdGUoY29uc3Qgc3RydWN0IGZpeGVkX3BoeV9zdGF0dXMgKnN0YXRlKTtcbmRyaXZlcnMvbmV0L3BoeS9zd3BoeS5oOjg6aW50IHN3cGh5X3JlYWRfcmVnKGludCByZWcsIGNvbnN0IHN0cnVjdCBmaXhlZF9waHlfc3RhdHVzICpzdGF0ZSk7XG5kcml2ZXJzL25ldC9waHkvc3dwaHkuaC05LVxuLS1cbmluY2x1ZGUvbGludXgvcGh5X2ZpeGVkLmgtNi1cbmluY2x1ZGUvbGludXgvcGh5X2ZpeGVkLmg6NzpzdHJ1Y3QgZml4ZWRfcGh5X3N0YXR1cyB7XG5pbmNsdWRlL2xpbnV4L3BoeV9maXhlZC5oLTgtXHRpbnQgc3BlZWQ7XG4tLVxuaW5jbHVkZS9saW51eC9waHlfZml4ZWQuaD0xNj1zdHJ1Y3QgbmV0X2RldmljZTtcbi0tXG5pbmNsdWRlL2xpbnV4L3BoeV9maXhlZC5oLTE4LSNpZiBJU19FTkFCTEVEKENPTkZJR19GSVhFRF9QSFkpXG5pbmNsdWRlL2xpbnV4L3BoeV9maXhlZC5oOjE5OmV4dGVybiBpbnQgZml4ZWRfcGh5X2NoYW5nZV9jYXJyaWVyKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGJvb2wgbmV3X2NhcnJpZXIpO1xuaW5jbHVkZS9saW51eC9waHlfZml4ZWQuaDoyMDpzdHJ1Y3QgcGh5X2RldmljZSAqZml4ZWRfcGh5X3JlZ2lzdGVyKGNvbnN0IHN0cnVjdCBmaXhlZF9waHlfc3RhdHVzICpzdGF0dXMsXG5pbmNsdWRlL2xpbnV4L3BoeV9maXhlZC5oLTIxLVx0XHRcdFx0ICAgICAgc3RydWN0IGRldmljZV9ub2RlICpucCk7XG5pbmNsdWRlL2xpbnV4L3BoeV9maXhlZC5oOjIyOnN0cnVjdCBwaHlfZGV2aWNlICpmaXhlZF9waHlfcmVnaXN0ZXJfMTAwZmQodm9pZCk7XG5pbmNsdWRlL2xpbnV4L3BoeV9maXhlZC5oLTIzLVxuaW5jbHVkZS9saW51eC9waHlfZml4ZWQuaDoyNDpleHRlcm4gdm9pZCBmaXhlZF9waHlfdW5yZWdpc3RlcihzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KTtcbmluY2x1ZGUvbGludXgvcGh5X2ZpeGVkLmg6MjU6ZXh0ZXJuIGludCBmaXhlZF9waHlfc2V0X2xpbmtfdXBkYXRlKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYsXG5pbmNsdWRlL2xpbnV4L3BoeV9maXhlZC5oLTI2LVx0XHRcdGludCAoKmxpbmtfdXBkYXRlKShzdHJ1Y3QgbmV0X2RldmljZSAqLFxuaW5jbHVkZS9saW51eC9waHlfZml4ZWQuaDoyNzpcdFx0XHRcdFx0ICAgc3RydWN0IGZpeGVkX3BoeV9zdGF0dXMgKikpO1xuaW5jbHVkZS9saW51eC9waHlfZml4ZWQuaC0yOC0jZWxzZVxuaW5jbHVkZS9saW51eC9waHlfZml4ZWQuaD0yOT1zdGF0aWMgaW5saW5lIHN0cnVjdCBwaHlfZGV2aWNlICpcbmluY2x1ZGUvbGludXgvcGh5X2ZpeGVkLmg6MzA6Zml4ZWRfcGh5X3JlZ2lzdGVyKGNvbnN0IHN0cnVjdCBmaXhlZF9waHlfc3RhdHVzICpzdGF0dXMsXG5pbmNsdWRlL2xpbnV4L3BoeV9maXhlZC5oLTMxLVx0XHQgICBzdHJ1Y3QgZGV2aWNlX25vZGUgKm5wKVxuLS1cbmluY2x1ZGUvbGludXgvcGh5X2ZpeGVkLmgtMzUtXG5pbmNsdWRlL2xpbnV4L3BoeV9maXhlZC5oOjM2OnN0YXRpYyBpbmxpbmUgc3RydWN0IHBoeV9kZXZpY2UgKmZpeGVkX3BoeV9yZWdpc3Rlcl8xMDBmZCh2b2lkKVxuaW5jbHVkZS9saW51eC9waHlfZml4ZWQuaC0zNy17XG4tLVxuaW5jbHVkZS9saW51eC9waHlfZml4ZWQuaC00MC1cbmluY2x1ZGUvbGludXgvcGh5X2ZpeGVkLmg6NDE6c3RhdGljIGlubGluZSB2b2lkIGZpeGVkX3BoeV91bnJlZ2lzdGVyKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXG5pbmNsdWRlL2xpbnV4L3BoeV9maXhlZC5oLTQyLXtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMyAwNzozNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxODgwMwoJCQkJCQkJb3V0cHV0OiAzMQoJCQkJCQkJdGhvdWdodHM6IDI1MwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBDdXJyZW50IExpbmUgb2YgUmVhc29uaW5nKioKCk9rYXksIHNvIEkmIzM5O20gdHJ5aW5nIHRvIGZpZ3VyZSBvdXQgaG93IHRvIHRlc3QgdGhlc2UgUmVhbHRlayBQSFkgZHJpdmVycyBpbiBhIHZpcnR1YWwgZW52aXJvbm1lbnQuIEZpcnN0IHRob3VnaHQsIGBmaXhlZF9waHlgIHdvbiYjMzk7dCB3b3JrIOKAkyB0aGF0JiMzOTtzIGZvciBmaXhlZCBsaW5rcywgbm90IHRoZSBkeW5hbWljIG5hdHVyZSBvZiBhIFJlYWx0ZWsgUEhZLiBJIG5lZWQgc29tZXRoaW5nIHRoYXQgKnNpbXVsYXRlcyogYSBSZWFsdGVrIFBIWS4gQ2FuIEkgZXZlbiBpbnN0YW50aWF0ZSBvbmUgdmlydHVhbGx5PwoKVXNpbmcgdGhpbmdzIGxpa2UgYG5ldGRldnNpbWAsIGBkdW1teWAsIG9yIGB2ZXRoYCBpcyBhIGRlYWQgZW5kOyB0aGV5IGRvbiYjMzk7dCBpbnZvbHZlIFBIWXMgYXQgYWxsLiBCdXQgd2FpdOKApiBTeXprYWxsZXIgdXNlcyBgdHVuYCwgYHRhcGAsIGFuZCBgdmV0aGAsIGRvZXNuJiMzOTt0IGl0PyBDb3VsZCBTeXprYWxsZXIgYmUgdXNlZCB0byBmdXp6IFBIWSBkcml2ZXJzPyBJdCBoYXMgYSBgc3l6X2dlbmV0bGlua2AgaW50ZXJmYWNlLCBkb2VzbiYjMzk7dCBpdD8gSXMgdGhlcmUgYW4gYGV0aHRvb2xgIG5ldGxpbmsgaW50ZXJmYWNlPyBQZXJoYXBzIEkgY2FuIHRyaWdnZXIgUEhZIG9wZXJhdGlvbnMgb24gYSB2aXJ0dWFsIGRldmljZSB1c2luZyB0aGF0LgoKSG93ZXZlciwgdmlydHVhbCBkZXZpY2VzIHR5cGljYWxseSBkb24mIzM5O3QgKmhhdmUqIGEgUEhZIGRldmljZSBhdHRhY2hlZCwgYW5kIEkgbmVlZCBhIGRldmljZSB0byB0ZXN0IHRoZSBwaHkgZnVuY3Rpb25hbGl0eS4gQnV0LCBoYW5nIG9uLi4uIHdoYXQgYWJvdXQgYG1hY3ZsYW5gIG9yIGB2bGFuYD8gVGhvc2Ugc2l0ICpvbiB0b3AqIG9mIGEgcmVhbCBkZXZpY2UsIGJ1dCBpZiB0aGVyZSYjMzk7cyBubyByZWFsIGRldmljZSwgdGhlbiB0aGVyZSYjMzk7cyBubyBQSFkuCgpBaGEhIFdhaXTigKYgVVNCIG5ldHdvcmsgYWRhcHRlcnMhIFN5emthbGxlciBmdXp6ZXMgVVNCIGRldmljZXMsIHVzaW5nIGBkdW1teV9oY2RgIGFuZCBgc3l6X3VzYl9jb25uZWN0YC4gTWFueSBVU0IgbmV0d29yayBkcml2ZXJzICpkbyogdXNlIFBIWXMhIFRoaXMgY291bGQgYmUgdGhlIHNvbHV0aW9uLgoKVGhlIGtleSBxdWVzdGlvbiBub3cgaXMsIGRvZXMgKmFueSogVVNCIG5ldHdvcmsgZHJpdmVyIHVzZSBNRElPIGFuZCBhbGxvdyBhIFJlYWx0ZWsgUEhZIHRvIGJlIGF0dGFjaGVkPyBMZXQmIzM5O3MgY2hlY2sgdGhhdCBhbmdsZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDMgMDc6MzY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bWRpb2J1c19yZWdpc3RlciYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3VzYi8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvdXNiL2FzaXhfZGV2aWNlcy5jPTY2OT1zdGF0aWMgaW50IGF4ODg3NzJfaW5pdF9tZGlvKHN0cnVjdCB1c2JuZXQgKmRldilcbi0tXG5kcml2ZXJzL25ldC91c2IvYXNpeF9kZXZpY2VzLmMtNjg2LVxuZHJpdmVycy9uZXQvdXNiL2FzaXhfZGV2aWNlcy5jOjY4NzpcdHJldCA9IG1kaW9idXNfcmVnaXN0ZXIocHJpdi1cdTAwM2VtZGlvKTtcbmRyaXZlcnMvbmV0L3VzYi9hc2l4X2RldmljZXMuYy02ODgtXHRpZiAocmV0KSB7XG4tLVxuZHJpdmVycy9uZXQvdXNiL2F4ODgxNzJhLmM9NjE9c3RhdGljIGludCBheDg4MTcyYV9pbml0X21kaW8oc3RydWN0IHVzYm5ldCAqZGV2KVxuLS1cbmRyaXZlcnMvbmV0L3VzYi9heDg4MTcyYS5jLTc5LVxuZHJpdmVycy9uZXQvdXNiL2F4ODgxNzJhLmM6ODA6XHRyZXQgPSBtZGlvYnVzX3JlZ2lzdGVyKHByaXYtXHUwMDNlbWRpbyk7XG5kcml2ZXJzL25ldC91c2IvYXg4ODE3MmEuYy04MS1cdGlmIChyZXQpIHtcbi0tXG5kcml2ZXJzL25ldC91c2IvbGFuNzh4eC5jPTIwNzA9c3RhdGljIGludCBsYW43OHh4X21kaW9faW5pdChzdHJ1Y3QgbGFuNzh4eF9uZXQgKmRldilcbi0tXG5kcml2ZXJzL25ldC91c2IvbGFuNzh4eC5jLTIxMDAtXHRub2RlID0gb2ZfZ2V0X2NoaWxkX2J5X25hbWUoZGV2LVx1MDAzZXVkZXYtXHUwMDNlZGV2Lm9mX25vZGUsIFwmIzM0O21kaW9cJiMzNDspO1xuZHJpdmVycy9uZXQvdXNiL2xhbjc4eHguYzoyMTAxOlx0cmV0ID0gb2ZfbWRpb2J1c19yZWdpc3RlcihkZXYtXHUwMDNlbWRpb2J1cywgbm9kZSk7XG5kcml2ZXJzL25ldC91c2IvbGFuNzh4eC5jLTIxMDItXHRvZl9ub2RlX3B1dChub2RlKTtcbi0tXG5kcml2ZXJzL25ldC91c2Ivc21zYzk1eHguYz0xMTQ3PXN0YXRpYyBpbnQgc21zYzk1eHhfYmluZChzdHJ1Y3QgdXNibmV0ICpkZXYsIHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmKVxuLS1cbmRyaXZlcnMvbmV0L3VzYi9zbXNjOTV4eC5jLTEyNDEtXG5kcml2ZXJzL25ldC91c2Ivc21zYzk1eHguYzoxMjQyOlx0cmV0ID0gbWRpb2J1c19yZWdpc3RlcihwZGF0YS1cdTAwM2VtZGlvYnVzKTtcbmRyaXZlcnMvbmV0L3VzYi9zbXNjOTV4eC5jLTEyNDMtXHRpZiAocmV0KSB7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAzIDA3OjM2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE5OTc0CgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogNzA0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKlJlYWxpemluZyB0aGUgUlRMODI2MUMgUEhZIERyaXZlciBJbnN0YW50aWF0aW9uIE9wcG9ydHVuaXR5KioKCk9rYXksIHRoaXMgaXMgcHJvbWlzaW5nLiBVU0IgbmV0d29yayBhZGFwdGVycyBsaWtlIGBhc2l4YCwgYHNtc2M5NXh4YCwgYW5kIGBsYW43OHh4YCBhbGwgcmVnaXN0ZXIgYW4gTURJTyBidXMuIFRoYXQmIzM5O3Mga2V5LiBBbmQgd2hlbiB0aGF0IE1ESU8gYnVzIGdldHMgcmVnaXN0ZXJlZCwgaXQgc2NhbnMgZm9yIFBIWXMuIE5vdywgaWYgSSBjYW4gY3JhZnQgYSBtb2NrIFVTQiBkZXZpY2UgdXNpbmcgc3l6a2FsbGVyIHRoYXQgKnNwZWNpZmljYWxseSogcmVzcG9uZHMgdG8gTURJTyByZWFkcyB3aXRoIHRoZSBjb3JyZWN0IFBIWSBJRCBmb3IgdGhlIFJUTDgyNjFDLCBJIGNhbiB0cmljayB0aGUga2VybmVsIGludG8gaW5zdGFudGlhdGluZyB0aGUgUmVhbHRlayBQSFkgZHJpdmVyLgoKVGhlIFBIWSBJRCBmb3IgdGhlIFJUTDgyNjFDIGlzIGBSVExfODI2MUNfQ0dgLCB3aGljaCB0cmFuc2xhdGVzIHRvIGAweDAwMWNjODk4YC4gU28sIGlmIHRoZSBVU0IgZGV2aWNlIEkgY3JlYXRlIHJlc3BvbmRzIHdpdGggYDB4MDAxY2Agb24gcmVnaXN0ZXIgMiBhbmQgYDB4Yzg5OGAgb24gcmVnaXN0ZXIgMyBkdXJpbmcgYW4gTURJTyByZWFkLCB0aGUgTURJTyBidXMgKnNob3VsZCogbWF0Y2ggaXQgdG8gdGhlIFJlYWx0ZWsgUEhZIGRyaXZlciBhbmQgY2FsbCBpdHMgcHJvYmUgZnVuY3Rpb24hIExldCYjMzk7cyB2ZXJpZnkgdGhpcy4KCkkmIzM5O2xsIGNoZWNrIHRoZSBkcml2ZXIgY29kZTsgaXQmIzM5O3MgaW4gYGRyaXZlcnMvbmV0L3BoeS9yZWFsdGVrL3JlYWx0ZWtfbWFpbi5jYC4gQWgsIHllcywgdGhlIHBhdGNoIGV4cGxpY2l0bHkgYWRkcyBhIG1hdGNoIGZvciB0aGF0IFBIWSBJRDoKCmBgYGMKCXsKCQlQSFlfSURfTUFUQ0hfRVhBQ1QoUlRMXzgyNjFDX0NHKSwKCQkubmFtZQkJCT0gJiMzNDtSZWFsdGVrIFJUTDgyNjFDIDEwR2JwcyBQSFkmIzM0OywKCQkucHJvYmUJCQk9IHJ0bDgyNjF4X3Byb2JlLAoJCS8vIC4uLiAob3RoZXIgZnVuY3Rpb25zKQoJfSwKYGBgCgpTbywgaWYgdGhlIE1ESU8gYnVzIGRldGVjdHMgdGhpcyBQSFkgSUQsIGl0JiMzOTtsbCBiaW5kIHRvIHRoaXMgZHJpdmVyLCB3aGljaCBjb250YWlucyBhbGwgdGhlIHJlcXVpcmVkIGZ1bmN0aW9uYWxpdHkuIE5vdywgYSBjcnVjaWFsIGRldGFpbCDigJMgaXMgdGhpcyBhIENsYXVzZSAyMiBvciBhIENsYXVzZSA0NSBQSFk/IFRoZSBwcmVzZW5jZSBvZiBgZ2VucGh5X2M0NV9wbWFfc29mdF9yZXNldGAgaW4gdGhlIGRyaXZlciBzdWdnZXN0cyBpdCBtaWdodCBiZSBDbGF1c2UgNDUuCgpJIG5lZWQgdG8gY29uZmlybSB0aGF0IGBhc2l4YCBhbmQgYHNtc2M5NXh4YCAodGhlIHBvdGVudGlhbCBVU0IgYWRhcHRlciBkcml2ZXJzKSBzdXBwb3J0IENsYXVzZSA0NSBNRElPIHJlYWRzLiBJZiB0aGV5IGRvbiYjMzk7dCwgSSBuZWVkIHRvIGZpZ3VyZSBvdXQgaWYgYSBDbGF1c2UgMjIgTURJTyBidXMgY2FuIGluc3RhbnRpYXRlIGEgQ2xhdXNlIDQ1IFBIWS4gU29tZSBQSFlzIGFyZSBmbGV4aWJsZSBhbmQgaGFuZGxlIGJvdGguIFRoZSBkcml2ZXIgc2VlbXMgdG8gYmUgdXNpbmcgYE1ESU9fTU1EX1ZFTkQyYCBhbmQgYE1ESU9fTU1EX1BNQVBNRGAsIHdoaWNoIGFyZSBkZWZpbml0ZWx5IENsYXVzZSA0NSBNTURzLiBHb29kLiAqSG93ZXZlciosIGBwaHlfcmVhZF9tbWRgICpjYW4qIGFjdHVhbGx5IHdvcmsgb3ZlciBDbGF1c2UgMjIgdXNpbmcgaW5kaXJlY3QgYWNjZXNzIChyZWdpc3RlcnMgMTMgYW5kIDE0KSBpZiB0aGUgUEhZIHN1cHBvcnRzIGl0LiBUaGF0JiMzOTtzIGEgdml0YWwgcG9pbnQuCgpBbmQsIGFyZSB0aGVyZSBldmVuIFVTQiBuZXR3b3JrIGFkYXB0ZXJzIHRoYXQgYXJlIENsYXVzZSA0NSBjb21wbGlhbnQ/IFllcywgc29tZXRoaW5nIGxpa2UgYEFxdWFudGlhYCBzaG91bGQgcHJvdmlkZSBhIGdvb2QgcmVmZXJlbmNlLiBUaW1lIHRvIGNoZWNrIGBkcml2ZXJzL25ldC91c2IvYCB0byBzZWUgaWYgdGhlcmUgYXJlIGdvb2QgZXhhbXBsZXMgb2YgQ2xhdXNlIDQ1IHN1cHBvcnQuIEkmIzM5O20gZ2V0dGluZyBjbG9zZXIuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAzIDA3OjM3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5FcnJvcjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm5vIG1hdGNoZXM8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7TURJT18uKl9DNDUmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC91c2IvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O2Vycm9yJiMzNDs6ICYjMzQ7bm8gbWF0Y2hlcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDMgMDc6Mzc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjEzODMKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiAyMQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UgYW5kIHdyaXR0ZW4gaW4gdGhlIGZpcnN0IHBlcnNvbjoKCioqRGVjb2RpbmcgdGhlIE1JSV9BRERSX0M0NSBGbGFnKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIGZsYWcsIGBNSUlfQUREUl9DNDVgLiBJbnN0YW50bHksIGl0IGNsaWNrcy4gKlRoYXQmIzM5O3MqIHRoZSBDbGF1c2UgNDUgaW5kaWNhdG9yISBSaWdodCwgQ2xhdXNlIDQ1IE1JSSByZWdpc3RlcnMsIGdvdCBpdC4gVGhpcyBtZWFucyB3ZSYjMzk7cmUgZGVhbGluZyB3aXRoIHRoZSBhZHZhbmNlZCBtYW5hZ2VtZW50IGludGVyZmFjZS4gTm90IHRoZSBvbGQgQ2xhdXNlIDIyIHN0dWZmLiBOb3cgSSBuZWVkIHRvIHJlbWVtYmVyIHRoZSBudWFuY2VzIG9mIENsYXVzZSA0NSwgdGhlIHJlZ2lzdGVyIGFkZHJlc3Npbmcgc2NoZW1lLCB0aGUgZXh0ZW5kZWQgcmVnaXN0ZXJzLCB0aGXigKYgYWhhISBUaGlzIGV4cGxhaW5zIHRoZSBiaXQgcGF0dGVybiBJIHdhcyBzZWVpbmcgaW4gdGhlIGRhdGEuIFdpdGggQ2xhdXNlIDQ1LCB0aGUgYWRkcmVzc2luZyB3b3JrcyBkaWZmZXJlbnRseS4gSSBuZWVkIHRvIHJlLWV2YWx1YXRlIG15IGFzc3VtcHRpb24gd2l0aCB0aGUgdW5kZXJzdGFuZGluZyB0aGF0IEkmIzM5O20gbm90IGRlYWxpbmcgd2l0aCB0aGUgb2xkZXIsIG1vcmUgc3RyYWlnaHRmb3J3YXJkIE1JSSByZWdpc3RlciBzZXQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAzIDA3OjM3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5FcnJvcjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm5vIG1hdGNoZXM8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7TUlJX0FERFJfQzQ1JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvdXNiLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtlcnJvciYjMzQ7OiAmIzM0O25vIG1hdGNoZXMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAzIDA3OjM3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIxNjQxCgkJCQkJCQlvdXRwdXQ6IDMyCgkJCQkJCQl0aG91Z2h0czogNjMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIG15IG93bjoKCioqQW5hbHl6aW5nIFBIWSBBY2Nlc3MgaW4gYSBDbGF1c2UgMjIgTGltaXRlZCBFbnZpcm9ubWVudCoqCgpBbHJpZ2h0LCBzbyBldmVuIGlmIHdlJiMzOTtyZSBkZWFsaW5nIHdpdGggYSBVU0IgZHJpdmVyIHRoYXQmIzM5O3Mgb25seSBnaXZpbmcgdXMgQ2xhdXNlIDIyIHN1cHBvcnQsIEkga25vdyB0aGUgUEhZIGZyYW1ld29yayBpcyBjbGV2ZXIgZW5vdWdoIHRvIHN0aWxsIHRhcCBpbnRvIHRob3NlIENsYXVzZSA0NSByZWdpc3RlcnMuIEl04oCZbGwgZG8gdGhpcyB1c2luZyBpbmRpcmVjdCBhY2Nlc3MgdGhyb3VnaCB0aG9zZSByZWdpc3RlciBwYWlycywgMTMgYW5kIDE0LCBhcyBsb25nIGFzIHRoZSBidXMgaXRzZWxmIGRvZXNu4oCZdCBoYXZlIHRoZSBidWlsdC1pbiBjYXBhYmlsaXR5IHRvIGByZWFkX2M0NWAuIEkmIzM5O20gcHJldHR5IHN1cmUgSSYjMzk7dmUgc2VlbiB0aGF0IGJlaGF2aW9yIGltcGxlbWVudGVkIGJlZm9yZS4gVGhhdCYjMzk7cyBhIGdvb2QgYXBwcm9hY2guIExldCYjMzk7cyBzdGFydCBieSBkaWdnaW5nIGludG8gYHBoeV9yZWFkX21tZGAgYW5kIHNlZSBleGFjdGx5IGhvdyBpdCYjMzk7cyBoYW5kbGluZyB0aGlzIHNpdHVhdGlvbi4gVGltZSB0byBzZWUgdGhpcyBpbiBwcmFjdGljZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDMgMDc6Mzc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7cGh5X3JlYWRfbW1kJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvcGh5LyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtcbkZ1bGwgb3V0cHV0IGlzIHRvbyBsb25nLCBzaG93aW5nIDUwMCBvdXQgb2YgMjE3OCBsaW5lcy5cblVzZSBtb3JlIHByZWNpc2UgZXhwcmVzc2lvbiBpZiBwb3NzaWJsZS5cblxuZHJpdmVycy9uZXQvcGh5L2FkaW4uYz0yNzU9c3RhdGljIGludCBhZGluX2NvbmZpZ19yZ21paV9tb2RlKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXG4tLVxuZHJpdmVycy9uZXQvcGh5L2FkaW4uYy0yODQtXG5kcml2ZXJzL25ldC9waHkvYWRpbi5jOjI4NTpcdHJlZyA9IHBoeV9yZWFkX21tZChwaHlkZXYsIE1ESU9fTU1EX1ZFTkQxLCBBRElOMTMwMF9HRV9SR01JSV9DRkdfUkVHKTtcbmRyaXZlcnMvbmV0L3BoeS9hZGluLmMtMjg2LVx0aWYgKHJlZyBcdTAwM2MgMClcbi0tXG5kcml2ZXJzL25ldC9waHkvYWRpbi5jPTMyMT1zdGF0aWMgaW50IGFkaW5fY29uZmlnX3JtaWlfbW9kZShzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxuLS1cbmRyaXZlcnMvbmV0L3BoeS9hZGluLmMtMzMwLVxuZHJpdmVycy9uZXQvcGh5L2FkaW4uYzozMzE6XHRyZWcgPSBwaHlfcmVhZF9tbWQocGh5ZGV2LCBNRElPX01NRF9WRU5EMSwgQURJTjEzMDBfR0VfUk1JSV9DRkdfUkVHKTtcbmRyaXZlcnMvbmV0L3BoeS9hZGluLmMtMzMyLVx0aWYgKHJlZyBcdTAwM2MgMClcbi0tXG5kcml2ZXJzL25ldC9waHkvYWRpbi5jPTQ0MD1zdGF0aWMgaW50IGFkaW5fZ2V0X2Zhc3RfZG93bihzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2LCB1OCAqbXNlY3MpXG4tLVxuZHJpdmVycy9uZXQvcGh5L2FkaW4uYy00NDMtXG5kcml2ZXJzL25ldC9waHkvYWRpbi5jOjQ0NDpcdHJlZyA9IHBoeV9yZWFkX21tZChwaHlkZXYsIE1ESU9fTU1EX1ZFTkQxLCBBRElOMTMwMF9GTERfRU5fUkVHKTtcbmRyaXZlcnMvbmV0L3BoeS9hZGluLmMtNDQ1LVx0aWYgKHJlZyBcdTAwM2MgMClcbi0tXG5kcml2ZXJzL25ldC9waHkvYWRpbi5jPTc5NT1zdGF0aWMgaW50IGFkaW5fc29mdF9yZXNldChzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxuLS1cbmRyaXZlcnMvbmV0L3BoeS9hZGluLmMtODA4LVx0LyogSWYgd2UgZ2V0IGEgcmVhZCBlcnJvciBzb21ldGhpbmcgbWF5IGJlIHdyb25nICovXG5kcml2ZXJzL25ldC9waHkvYWRpbi5jOjgwOTpcdHJjID0gcGh5X3JlYWRfbW1kKHBoeWRldiwgTURJT19NTURfVkVORDEsXG5kcml2ZXJzL25ldC9waHkvYWRpbi5jLTgxMC1cdFx0XHQgIEFESU4xMzAwX0dFX1NPRlRfUkVTRVRfUkVHKTtcbi0tXG5kcml2ZXJzL25ldC9waHkvYWRpbi5jPTgyOD1zdGF0aWMgaW50IGFkaW5fcmVhZF9tbWRfc3RhdF9yZWdzKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYsXG4tLVxuZHJpdmVycy9uZXQvcGh5L2FkaW4uYy04MzMtXG5kcml2ZXJzL25ldC9waHkvYWRpbi5jOjgzNDpcdHJldCA9IHBoeV9yZWFkX21tZChwaHlkZXYsIE1ESU9fTU1EX1ZFTkQxLCBzdGF0LVx1MDAzZXJlZzEpO1xuZHJpdmVycy9uZXQvcGh5L2FkaW4uYy04MzUtXHRpZiAocmV0IFx1MDAzYyAwKVxuLS1cbmRyaXZlcnMvbmV0L3BoeS9hZGluLmMtODQyLVxuZHJpdmVycy9uZXQvcGh5L2FkaW4uYzo4NDM6XHRyZXQgPSBwaHlfcmVhZF9tbWQocGh5ZGV2LCBNRElPX01NRF9WRU5EMSwgc3RhdC1cdTAwM2VyZWcyKTtcbmRyaXZlcnMvbmV0L3BoeS9hZGluLmMtODQ0LVx0aWYgKHJldCBcdTAwM2MgMClcbi0tXG5kcml2ZXJzL25ldC9waHkvYWRpbi5jPTk0NT1zdGF0aWMgaW50IGFkaW5fY2FibGVfdGVzdF9yZXBvcnRfcGFpcihzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2LFxuLS1cbmRyaXZlcnMvbmV0L3BoeS9hZGluLmMtOTUwLVxuZHJpdmVycy9uZXQvcGh5L2FkaW4uYzo5NTE6XHRyZXQgPSBwaHlfcmVhZF9tbWQocGh5ZGV2LCBNRElPX01NRF9WRU5EMSxcbmRyaXZlcnMvbmV0L3BoeS9hZGluLmMtOTUyLVx0XHRcdCAgIEFESU4xMzAwX0NESUFHX0RUTERfUlNMVFMocGFpcikpO1xuLS1cbmRyaXZlcnMvbmV0L3BoeS9hZGluLmMtOTYxLVxuZHJpdmVycy9uZXQvcGh5L2FkaW4uYzo5NjI6XHRyZXQgPSBwaHlfcmVhZF9tbWQocGh5ZGV2LCBNRElPX01NRF9WRU5EMSxcbmRyaXZlcnMvbmV0L3BoeS9hZGluLmMtOTYzLVx0XHRcdCAgIEFESU4xMzAwX0NESUFHX0ZMVF9ESVNUKHBhaXIpKTtcbi0tXG5kcml2ZXJzL25ldC9waHkvYWRpbi5jPTk5MT1zdGF0aWMgaW50IGFkaW5fY2FibGVfdGVzdF9nZXRfc3RhdHVzKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYsXG4tLVxuZHJpdmVycy9uZXQvcGh5L2FkaW4uYy05OTctXG5kcml2ZXJzL25ldC9waHkvYWRpbi5jOjk5ODpcdHJldCA9IHBoeV9yZWFkX21tZChwaHlkZXYsIE1ESU9fTU1EX1ZFTkQxLCBBRElOMTMwMF9DRElBR19SVU4pO1xuZHJpdmVycy9uZXQvcGh5L2FkaW4uYy05OTktXHRpZiAocmV0IFx1MDAzYyAwKVxuLS1cbmRyaXZlcnMvbmV0L3BoeS9hZGluMTEwMC5jPTc2PXN0YXRpYyBpbnQgYWRpbl9yZWFkX3N0YXR1cyhzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxuLS1cbmRyaXZlcnMvbmV0L3BoeS9hZGluMTEwMC5jLTgzLVxuZHJpdmVycy9uZXQvcGh5L2FkaW4xMTAwLmM6ODQ6XHRyZXQgPSBwaHlfcmVhZF9tbWQocGh5ZGV2LCBNRElPX01NRF9BTiwgQURJTl9BTl9QSFlfSU5TVF9TVEFUVVMpO1xuZHJpdmVycy9uZXQvcGh5L2FkaW4xMTAwLmMtODUtXHRpZiAocmV0IFx1MDAzYyAwKVxuLS1cbmRyaXZlcnMvbmV0L3BoeS9hZGluMTEwMC5jPTE0NT1zdGF0aWMgaW50IGFkaW5fcGh5X2Fja19pbnRyKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXG4tLVxuZHJpdmVycy9uZXQvcGh5L2FkaW4xMTAwLmMtMTQ3LVx0LyogQ2xlYXIgcGVuZGluZyBpbnRlcnJ1cHRzICovXG5kcml2ZXJzL25ldC9waHkvYWRpbjExMDAuYzoxNDg6XHRpbnQgcmMgPSBwaHlfcmVhZF9tbWQocGh5ZGV2LCBNRElPX01NRF9WRU5EMixcbmRyaXZlcnMvbmV0L3BoeS9hZGluMTEwMC5jLTE0OS1cdFx0XHQgICAgICBBRElOX1BIWV9TVUJTWVNfSVJRX1NUQVRVUyk7XG4tLVxuZHJpdmVycy9uZXQvcGh5L2FkaW4xMTAwLmM9MTczPXN0YXRpYyBpcnFyZXR1cm5fdCBhZGluX3BoeV9oYW5kbGVfaW50ZXJydXB0KHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXG4tLVxuZHJpdmVycy9uZXQvcGh5L2FkaW4xMTAwLmMtMTc2LVxuZHJpdmVycy9uZXQvcGh5L2FkaW4xMTAwLmM6MTc3Olx0aXJxX3N0YXR1cyA9IHBoeV9yZWFkX21tZChwaHlkZXYsIE1ESU9fTU1EX1ZFTkQyLFxuZHJpdmVycy9uZXQvcGh5L2FkaW4xMTAwLmMtMTc4LVx0XHRcdFx0ICBBRElOX1BIWV9TVUJTWVNfSVJRX1NUQVRVUyk7XG4tLVxuZHJpdmVycy9uZXQvcGh5L2FkaW4xMTAwLmM9MTkyPXN0YXRpYyBpbnQgYWRpbl9zZXRfcG93ZXJkb3duX21vZGUoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldiwgYm9vbCBlbilcbi0tXG5kcml2ZXJzL25ldC9waHkvYWRpbjExMDAuYy0yMDEtXG5kcml2ZXJzL25ldC9waHkvYWRpbjExMDAuYzoyMDI6XHRyZXR1cm4gcGh5X3JlYWRfbW1kX3BvbGxfdGltZW91dChwaHlkZXYsIE1ESU9fTU1EX1ZFTkQxLCBBRElOX0NSU01fU1RBVCwgcmV0LFxuZHJpdmVycy9uZXQvcGh5L2FkaW4xMTAwLmMtMjAzLVx0XHRcdFx0XHQgISEocmV0IFx1MDAyNiBBRElOX0NSU01fU0ZUX1BEX1JEWSkgPT0gZW4sXG4tLVxuZHJpdmVycy9uZXQvcGh5L2FkaW4xMTAwLmM9MjMxPXN0YXRpYyBpbnQgYWRpbl9zb2Z0X3Jlc2V0KHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXG4tLVxuZHJpdmVycy9uZXQvcGh5L2FkaW4xMTAwLmMtMjM4LVxuZHJpdmVycy9uZXQvcGh5L2FkaW4xMTAwLmM6MjM5Olx0cmV0dXJuIHBoeV9yZWFkX21tZF9wb2xsX3RpbWVvdXQocGh5ZGV2LCBNRElPX01NRF9WRU5EMSwgQURJTl9DUlNNX1NUQVQsIHJldCxcbmRyaXZlcnMvbmV0L3BoeS9hZGluMTEwMC5jLTI0MC1cdFx0XHRcdFx0IChyZXQgXHUwMDI2IEFESU5fQ1JTTV9TWVNfUkRZKSxcbi0tXG5kcml2ZXJzL25ldC9waHkvYWRpbjExMDAuYz0yNDQ9c3RhdGljIGludCBhZGluX2dldF9mZWF0dXJlcyhzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxuLS1cbmRyaXZlcnMvbmV0L3BoeS9hZGluMTEwMC5jLTI1MC1cbmRyaXZlcnMvbmV0L3BoeS9hZGluMTEwMC5jOjI1MTpcdHJldCA9IHBoeV9yZWFkX21tZChwaHlkZXYsIE1ESU9fTU1EX1BNQVBNRCwgTURJT19QTUFfMTBUMUxfU1RBVCk7XG5kcml2ZXJzL25ldC9waHkvYWRpbjExMDAuYy0yNTItXHRpZiAocmV0IFx1MDAzYyAwKVxuLS1cbmRyaXZlcnMvbmV0L3BoeS9hZGluMTEwMC5jPTI3OT1zdGF0aWMgaW50IGFkaW5fZ2V0X3NxaShzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxuLS1cbmRyaXZlcnMvbmV0L3BoeS9hZGluMTEwMC5jLTI4NC1cbmRyaXZlcnMvbmV0L3BoeS9hZGluMTEwMC5jOjI4NTpcdHJldCA9IHBoeV9yZWFkX21tZChwaHlkZXYsIE1ESU9fTU1EX1BNQVBNRCwgTURJT19TVEFUMSk7XG5kcml2ZXJzL25ldC9waHkvYWRpbjExMDAuYy0yODYtXHRpZiAocmV0IFx1MDAzYyAwKVxuLS1cbmRyaXZlcnMvbmV0L3BoeS9hZGluMTEwMC5jLTI5MC1cbmRyaXZlcnMvbmV0L3BoeS9hZGluMTEwMC5jOjI5MTpcdHJldCA9IHBoeV9yZWFkX21tZChwaHlkZXYsIE1ESU9fU1RBVDEsIEFESU5fTVNFX1ZBTCk7XG5kcml2ZXJzL25ldC9waHkvYWRpbjExMDAuYy0yOTItXHRpZiAocmV0IFx1MDAzYyAwKVxuLS1cbmRyaXZlcnMvbmV0L3BoeS9haXJfYW44ODAxLmM9MzU3PXN0YXRpYyBpbnQgYW44ODAxcl9sZWRfaHdfY29udHJvbF9nZXQoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldiwgdTggaW5kZXgsXG4tLVxuZHJpdmVycy9uZXQvcGh5L2Fpcl9hbjg4MDEuYy0zNjQtXG5kcml2ZXJzL25ldC9waHkvYWlyX2FuODgwMS5jOjM2NTpcdG9uID0gcGh5X3JlYWRfbW1kKHBoeWRldiwgTURJT19NTURfVkVORDIsIExFRF9PTl9DVFJMKGluZGV4KSk7XG5kcml2ZXJzL25ldC9waHkvYWlyX2FuODgwMS5jLTM2Ni1cdGlmIChvbiBcdTAwM2MgMClcbi0tXG5kcml2ZXJzL25ldC9waHkvYWlyX2FuODgwMS5jLTM2OC1cbmRyaXZlcnMvbmV0L3BoeS9haXJfYW44ODAxLmM6MzY5Olx0YmxpbmsgPSBwaHlfcmVhZF9tbWQocGh5ZGV2LCBNRElPX01NRF9WRU5EMiwgTEVEX0JMSU5LX0NUUkwoaW5kZXgpKTtcbmRyaXZlcnMvbmV0L3BoeS9haXJfYW44ODAxLmMtMzcwLVx0aWYgKGJsaW5rIFx1MDAzYyAwKVxuLS1cbmRyaXZlcnMvbmV0L3BoeS9haXJfZW44ODExaC5jPTMyNz1zdGF0aWMgaW50IGVuODgxMWhfd2FpdF9tY3VfcmVhZHkoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcbi0tXG5kcml2ZXJzL25ldC9waHkvYWlyX2VuODgxMWguYy0zMzYtXHQvKiBCZWNhdXNlIG9mIG1kaW8tbG9jaywgbWF5IGhhdmUgdG8gd2FpdCBmb3IgbXVsdGlwbGUgbG9hZHMgKi9cbmRyaXZlcnMvbmV0L3BoeS9haXJfZW44ODExaC5jOjMzNzpcdHJldCA9IHBoeV9yZWFkX21tZF9wb2xsX3RpbWVvdXQocGh5ZGV2LCBNRElPX01NRF9WRU5EMSxcbmRyaXZlcnMvbmV0L3BoeS9haXJfZW44ODExaC5jLTMzOC1cdFx0XHRcdFx0RU44ODExSF9QSFlfRldfU1RBVFVTLCByZWdfdmFsdWUsXG4tLVxuZHJpdmVycy9uZXQvcGh5L2Fpcl9lbjg4MTFoLmM9MTM2OD1zdGF0aWMgaW50IGVuODgxMWhfcmVhZF9zdGF0dXMoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcbi0tXG5kcml2ZXJzL25ldC9waHkvYWlyX2VuODgxMWguYy0xMzk0LVx0aWYgKHBoeV9pZF9jb21wYXJlX21vZGVsKHBoeWRldi1cdTAwM2VwaHlfaWQsIEFOODgxMUhCX1BIWV9JRCkpIHtcbmRyaXZlcnMvbmV0L3BoeS9haXJfZW44ODExaC5jOjEzOTU6XHRcdHZhbCA9IHBoeV9yZWFkX21tZChwaHlkZXYsIE1ESU9fTU1EX0FOLCBNRElPX0FOXzEwR0JUX1NUQVQpO1xuZHJpdmVycy9uZXQvcGh5L2Fpcl9lbjg4MTFoLmMtMTM5Ni1cdFx0aWYgKHZhbCBcdTAwM2MgMClcbi0tXG5kcml2ZXJzL25ldC9waHkvYXF1YW50aWEvYXF1YW50aWFfZmlybXdhcmUuYz05MD1zdGF0aWMgaW50IGFxcl9md19sb2FkX21lbW9yeShzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2LCB1MzIgYWRkcixcbi0tXG5kcml2ZXJzL25ldC9waHkvYXF1YW50aWEvYXF1YW50aWFfZmlybXdhcmUuYy0xMzctXHQvKiAuLi5nZXRzIENSQyBmcm9tIE1BSUxCT1ggYWZ0ZXIgd2UgaGF2ZSBsb2FkZWQgdGhlIGVudGlyZSBzZWN0aW9uLi4uICovXG5kcml2ZXJzL25ldC9waHkvYXF1YW50aWEvYXF1YW50aWFfZmlybXdhcmUuYzoxMzg6XHR1cF9jcmMgPSBwaHlfcmVhZF9tbWQocGh5ZGV2LCBNRElPX01NRF9WRU5EMSwgVkVORDFfR0xPQkFMX01BSUxCT1hfSU5URVJGQUNFMik7XG5kcml2ZXJzL25ldC9waHkvYXF1YW50aWEvYXF1YW50aWFfZmlybXdhcmUuYy0xMzktXHQvKiAuLi5hbmQgbWFrZSBzdXJlIGl0IGRvZXMgbWF0Y2ggb3VyIGNhbGN1bGF0ZWQgQ1JDICovXG4tLVxuZHJpdmVycy9uZXQvcGh5L2FxdWFudGlhL2FxdWFudGlhX2h3bW9uLmM9NDI9c3RhdGljIGludCBhcXJfaHdtb25fZ2V0KHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYsIGludCByZWcsIGxvbmcgKnZhbHVlKVxuZHJpdmVycy9uZXQvcGh5L2FxdWFudGlhL2FxdWFudGlhX2h3bW9uLmMtNDMte1xuZHJpdmVycy9uZXQvcGh5L2FxdWFudGlhL2FxdWFudGlhX2h3bW9uLmM6NDQ6XHRpbnQgdGVtcCA9IHBoeV9yZWFkX21tZChwaHlkZXYsIE1ESU9fTU1EX1ZFTkQxLCByZWcpO1xuZHJpdmVycy9uZXQvcGh5L2FxdWFudGlhL2FxdWFudGlhX2h3bW9uLmMtNDUtXG4tLVxuZHJpdmVycy9uZXQvcGh5L2FxdWFudGlhL2FxdWFudGlhX2h3bW9uLmM9Njg9c3RhdGljIGludCBhcXJfaHdtb25fdGVzdF9iaXQoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldiwgaW50IHJlZywgaW50IGJpdClcbmRyaXZlcnMvbmV0L3BoeS9hcXVhbnRpYS9hcXVhbnRpYV9od21vbi5jLTY5LXtcbmRyaXZlcnMvbmV0L3BoeS9hcXVhbnRpYS9hcXVhbnRpYV9od21vbi5jOjcwOlx0aW50IHZhbCA9IHBoeV9yZWFkX21tZChwaHlkZXYsIE1ESU9fTU1EX1ZFTkQxLCByZWcpO1xuZHJpdmVycy9uZXQvcGh5L2FxdWFudGlhL2FxdWFudGlhX2h3bW9uLmMtNzEtXG4tLVxuZHJpdmVycy9uZXQvcGh5L2FxdWFudGlhL2FxdWFudGlhX2xlZHMuYz00Nz1pbnQgYXFyX3BoeV9sZWRfaHdfY29udHJvbF9nZXQoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldiwgdTggaW5kZXgsXG4tLVxuZHJpdmVycy9uZXQvcGh5L2FxdWFudGlhL2FxdWFudGlhX2xlZHMuYy01NC1cbmRyaXZlcnMvbmV0L3BoeS9hcXVhbnRpYS9hcXVhbnRpYV9sZWRzLmM6NTU6XHR2YWwgPSBwaHlfcmVhZF9tbWQocGh5ZGV2LCBNRElPX01NRF9WRU5EMSwgQVFSX0xFRF9QUk9WKGluZGV4KSk7XG5kcml2ZXJzL25ldC9waHkvYXF1YW50aWEvYXF1YW50aWFfbGVkcy5jLTU2LVx0aWYgKHZhbCBcdTAwM2MgMClcbi0tXG5kcml2ZXJzL25ldC9waHkvYXF1YW50aWEvYXF1YW50aWFfbWFpbi5jPTEzMz1zdGF0aWMgdTY0IGFxcjEwN19nZXRfc3RhdChzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2LCBpbnQgaW5kZXgpXG4tLVxuZHJpdmVycy9uZXQvcGh5L2FxdWFudGlhL2FxdWFudGlhX21haW4uYy0xNDAtXG5kcml2ZXJzL25ldC9waHkvYXF1YW50aWEvYXF1YW50aWFfbWFpbi5jOjE0MTpcdHZhbCA9IHBoeV9yZWFkX21tZChwaHlkZXYsIE1ESU9fTU1EX0MyMkVYVCwgc3RhdC1cdTAwM2VyZWcpO1xuZHJpdmVycy9uZXQvcGh5L2FxdWFudGlhL2FxdWFudGlhX21haW4uYy0xNDItXHRpZiAodmFsIFx1MDAzYyAwKVxuLS1cbmRyaXZlcnMvbmV0L3BoeS9hcXVhbnRpYS9hcXVhbnRpYV9tYWluLmMtMTQ2LVx0aWYgKGxlbl9oKSB7XG5kcml2ZXJzL25ldC9waHkvYXF1YW50aWEvYXF1YW50aWFfbWFpbi5jOjE0NzpcdFx0dmFsID0gcGh5X3JlYWRfbW1kKHBoeWRldiwgTURJT19NTURfQzIyRVhULCBzdGF0LVx1MDAzZXJlZyAmIzQzOyAxKTtcbmRyaXZlcnMvbmV0L3BoeS9hcXVhbnRpYS9hcXVhbnRpYV9tYWluLmMtMTQ4LVx0XHRpZiAodmFsIFx1MDAzYyAwKVxuLS1cbmRyaXZlcnMvbmV0L3BoeS9hcXVhbnRpYS9hcXVhbnRpYV9tYWluLmM9MjUzPXN0YXRpYyBpbnQgYXFyX2NvbmZpZ19pbnRyKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXG4tLVxuZHJpdmVycy9uZXQvcGh5L2FxdWFudGlhL2FxdWFudGlhX21haW4uYy0yNTktXHRcdC8qIENsZWFyIGFueSBwZW5kaW5nIGludGVycnVwdHMgYmVmb3JlIGVuYWJsaW5nIHRoZW0gKi9cbmRyaXZlcnMvbmV0L3BoeS9hcXVhbnRpYS9hcXVhbnRpYV9tYWluLmM6MjYwOlx0XHRlcnIgPSBwaHlfcmVhZF9tbWQocGh5ZGV2LCBNRElPX01NRF9BTiwgTURJT19BTl9UWF9WRU5EX0lOVF9TVEFUVVMyKTtcbmRyaXZlcnMvbmV0L3BoeS9hcXVhbnRpYS9hcXVhbnRpYV9tYWluLmMtMjYxLVx0XHRpZiAoZXJyIFx1MDAzYyAwKVxuLS1cbmRyaXZlcnMvbmV0L3BoeS9hcXVhbnRpYS9hcXVhbnRpYV9tYWluLmMtMjgyLVx0XHQvKiBDbGVhciBhbnkgcGVuZGluZyBpbnRlcnJ1cHRzIGFmdGVyIHdlIGhhdmUgZGlzYWJsZWQgdGhlbSAqL1xuZHJpdmVycy9uZXQvcGh5L2FxdWFudGlhL2FxdWFudGlhX21haW4uYzoyODM6XHRcdGVyciA9IHBoeV9yZWFkX21tZChwaHlkZXYsIE1ESU9fTU1EX0FOLCBNRElPX0FOX1RYX1ZFTkRfSU5UX1NUQVRVUzIpO1xuZHJpdmVycy9uZXQvcGh5L2FxdWFudGlhL2FxdWFudGlhX21haW4uYy0yODQtXHRcdGlmIChlcnIgXHUwMDNjIDApXG4tLVxuZHJpdmVycy9uZXQvcGh5L2FxdWFudGlhL2FxdWFudGlhX21haW4uYz0yOTE9c3RhdGljIGlycXJldHVybl90IGFxcl9oYW5kbGVfaW50ZXJydXB0KHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXG4tLVxuZHJpdmVycy9uZXQvcGh5L2FxdWFudGlhL2FxdWFudGlhX21haW4uYy0yOTQtXG5kcml2ZXJzL25ldC9waHkvYXF1YW50aWEvYXF1YW50aWFfbWFpbi5jOjI5NTpcdGlycV9zdGF0dXMgPSBwaHlfcmVhZF9tbWQocGh5ZGV2LCBNRElPX01NRF9BTixcbmRyaXZlcnMvbmV0L3BoeS9hcXVhbnRpYS9hcXVhbnRpYV9tYWluLmMtMjk2LVx0XHRcdFx0ICBNRElPX0FOX1RYX1ZFTkRfSU5UX1NUQVRVUzIpO1xuLS1cbmRyaXZlcnMvbmV0L3BoeS9hcXVhbnRpYS9hcXVhbnRpYV9tYWluLmM9MzEwPXN0YXRpYyBpbnQgYXFyX3JlYWRfc3RhdHVzKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXG4tLVxuZHJpdmVycy9uZXQvcGh5L2FxdWFudGlhL2FxdWFudGlhX21haW4uYy0zMTQtXHRpZiAocGh5ZGV2LVx1MDAzZWF1dG9uZWcgPT0gQVVUT05FR19FTkFCTEUpIHtcbmRyaXZlcnMvbmV0L3BoeS9hcXVhbnRpYS9hcXVhbnRpYV9tYWluLmM6MzE1Olx0XHR2YWwgPSBwaHlfcmVhZF9tbWQocGh5ZGV2LCBNRElPX01NRF9BTiwgTURJT19BTl9SWF9MUF9TVEFUMSk7XG5kcml2ZXJzL25ldC9waHkvYXF1YW50aWEvYXF1YW50aWFfbWFpbi5jLTMxNi1cdFx0aWYgKHZhbCBcdTAwM2MgMClcbi0tXG5kcml2ZXJzL25ldC9waHkvYXF1YW50aWEvYXF1YW50aWFfbWFpbi5jLTMzMC1cdGlmICh2YWwpIHtcbmRyaXZlcnMvbmV0L3BoeS9hcXVhbnRpYS9hcXVhbnRpYV9tYWluLmM6MzMxOlx0XHR2YWwgPSBwaHlfcmVhZF9tbWQocGh5ZGV2LCBNRElPX01NRF9BTiwgTURJT19BTl9SRVNWRF9WRU5EX1NUQVRVUzEpO1xuZHJpdmVycy9uZXQvcGh5L2FxdWFudGlhL2FxdWFudGlhX21haW4uYy0zMzItXHRcdGlmICh2YWwgXHUwMDNjIDApXG4tLVxuZHJpdmVycy9uZXQvcGh5L2FxdWFudGlhL2FxdWFudGlhX21haW4uYz00NzY9c3RhdGljIGludCBhcXJfZ2VuMV9yZWFkX3JhdGUoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcbi0tXG5kcml2ZXJzL25ldC9waHkvYXF1YW50aWEvYXF1YW50aWFfbWFpbi5jLTQ3OS1cbmRyaXZlcnMvbmV0L3BoeS9hcXVhbnRpYS9hcXVhbnRpYV9tYWluLmM6NDgwOlx0dmFsID0gcGh5X3JlYWRfbW1kKHBoeWRldiwgTURJT19NTURfQU4sIE1ESU9fQU5fVFhfVkVORF9TVEFUVVMxKTtcbmRyaXZlcnMvbmV0L3BoeS9hcXVhbnRpYS9hcXVhbnRpYV9tYWluLmMtNDgxLVx0aWYgKHZhbCBcdTAwM2MgMClcbi0tXG5kcml2ZXJzL25ldC9waHkvYXF1YW50aWEvYXF1YW50aWFfbWFpbi5jPTUzNz1zdGF0aWMgaW50IGFxcl9nZW4xX3JlYWRfc3RhdHVzKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXG4tLVxuZHJpdmVycy9uZXQvcGh5L2FxdWFudGlhL2FxdWFudGlhX21haW4uYy01NTMtXHQgKi9cbmRyaXZlcnMvbmV0L3BoeS9hcXVhbnRpYS9hcXVhbnRpYV9tYWluLmM6NTU0Olx0cmV0ID0gcGh5X3JlYWRfbW1kX3BvbGxfdGltZW91dChwaHlkZXYsIE1ESU9fTU1EX1BIWVhTLFxuZHJpdmVycy9uZXQvcGh5L2FxdWFudGlhL2FxdWFudGlhX21haW4uYy01NTUtXHRcdFx0XHRcdE1ESU9fUEhZWFNfVkVORF9JRl9TVEFUVVMsIHZhbCxcbi0tXG5kcml2ZXJzL25ldC9waHkvYXF1YW50aWEvYXF1YW50aWFfbWFpbi5jPTYyNj1zdGF0aWMgaW50IGFxcjEwN19nZXRfZG93bnNoaWZ0KHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYsIHU4ICpkYXRhKVxuLS1cbmRyaXZlcnMvbmV0L3BoeS9hcXVhbnRpYS9hcXVhbnRpYV9tYWluLmMtNjI5LVxuZHJpdmVycy9uZXQvcGh5L2FxdWFudGlhL2FxdWFudGlhX21haW4uYzo2MzA6XHR2YWwgPSBwaHlfcmVhZF9tbWQocGh5ZGV2LCBNRElPX01NRF9BTiwgTURJT19BTl9WRU5EX1BST1YpO1xuZHJpdmVycy9uZXQvcGh5L2FxdWFudGlhL2FxdWFudGlhX21haW4uYy02MzEtXHRpZiAodmFsIFx1MDAzYyAwKVxuLS1cbmRyaXZlcnMvbmV0L3BoeS9hcXVhbnRpYS9hcXVhbnRpYV9tYWluLmM9NjkxPWludCBhcXJfd2FpdF9yZXNldF9jb21wbGV0ZShzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxuLS1cbmRyaXZlcnMvbmV0L3BoeS9hcXVhbnRpYS9hcXVhbnRpYV9tYWluLmMtNjk0LVxuZHJpdmVycy9uZXQvcGh5L2FxdWFudGlhL2FxdWFudGlhX21haW4uYzo2OTU6XHRyZXQgPSByZWFkX3BvbGxfdGltZW91dChwaHlfcmVhZF9tbWQsIHZhbCwgdmFsICE9IDAsXG5kcml2ZXJzL25ldC9waHkvYXF1YW50aWEvYXF1YW50aWFfbWFpbi5jLTY5Ni1cdFx0XHRcdEFRUl9GV19XQUlUX1NMRUVQX1VTLCBBUVJfRldfV0FJVF9USU1FT1VUX1VTLFxuLS1cbmRyaXZlcnMvbmV0L3BoeS9hcXVhbnRpYS9hcXVhbnRpYV9tYWluLmM9NzA4PXN0YXRpYyBpbnQgYXFyX2J1aWxkX2ZpbmdlcnByaW50KHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXG4tLVxuZHJpdmVycy9uZXQvcGh5L2FxdWFudGlhL2FxdWFudGlhX21haW4uYy03MTQtXG5kcml2ZXJzL25ldC9waHkvYXF1YW50aWEvYXF1YW50aWFfbWFpbi5jOjcxNTpcdHZhbCA9IHBoeV9yZWFkX21tZChwaHlkZXYsIE1ESU9fTU1EX1ZFTkQxLCBWRU5EMV9HTE9CQUxfRldfSUQpO1xuZHJpdmVycy9uZXQvcGh5L2FxdWFudGlhL2FxdWFudGlhX21haW4uYy03MTYtXHRpZiAodmFsIFx1MDAzYyAwKVxuLS1cbmRyaXZlcnMvbmV0L3BoeS9hcXVhbnRpYS9hcXVhbnRpYV9tYWluLmMtNzIxLVxuZHJpdmVycy9uZXQvcGh5L2FxdWFudGlhL2FxdWFudGlhX21haW4uYzo3MjI6XHR2YWwgPSBwaHlfcmVhZF9tbWQocGh5ZGV2LCBNRElPX01NRF9WRU5EMSwgVkVORDFfR0xPQkFMX1JTVkRfU1RBVDEpO1xuZHJpdmVycy9uZXQvcGh5L2FxdWFudGlhL2FxdWFudGlhX21haW4uYy03MjMtXHRpZiAodmFsIFx1MDAzYyAwKVxuLS1cbmRyaXZlcnMvbmV0L3BoeS9hcXVhbnRpYS9hcXVhbnRpYV9tYWluLmMtNzI4LVxuZHJpdmVycy9uZXQvcGh5L2FxdWFudGlhL2FxdWFudGlhX21haW4uYzo3Mjk6XHR2YWwgPSBwaHlfcmVhZF9tbWQocGh5ZGV2LCBNRElPX01NRF9QTUFQTUQsIFBNQVBNRF9GV19NSVNDX0lEKTtcbmRyaXZlcnMvbmV0L3BoeS9hcXVhbnRpYS9hcXVhbnRpYV9tYWluLmMtNzMwLVx0aWYgKHZhbCBcdTAwM2MgMClcbi0tXG5kcml2ZXJzL25ldC9waHkvYXF1YW50aWEvYXF1YW50aWFfbWFpbi5jLTczNC1cbmRyaXZlcnMvbmV0L3BoeS9hcXVhbnRpYS9hcXVhbnRpYV9tYWluLmM6NzM1Olx0dmFsID0gcGh5X3JlYWRfbW1kKHBoeWRldiwgTURJT19NTURfUE1BUE1ELCBQTUFQTURfRldfTUlTQ19WRVIpO1xuZHJpdmVycy9uZXQvcGh5L2FxdWFudGlhL2FxdWFudGlhX21haW4uYy03MzYtXHRpZiAodmFsIFx1MDAzYyAwKVxuLS1cbmRyaXZlcnMvbmV0L3BoeS9hcXVhbnRpYS9hcXVhbnRpYV9tYWluLmM9ODMzPXN0YXRpYyBpbnQgYXFyX2dlbjJfcmVhZF9nbG9iYWxfc3lzY2ZnKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXG4tLVxuZHJpdmVycy9uZXQvcGh5L2FxdWFudGlhL2FxdWFudGlhX21haW4uYy04NDQtXG5kcml2ZXJzL25ldC9waHkvYXF1YW50aWEvYXF1YW50aWFfbWFpbi5jOjg0NTpcdFx0dmFsID0gcGh5X3JlYWRfbW1kKHBoeWRldiwgTURJT19NTURfVkVORDEsXG5kcml2ZXJzL25ldC9waHkvYXF1YW50aWEvYXF1YW50aWFfbWFpbi5jLTg0Ni1cdFx0XHRcdCAgIGFxcl9nbG9iYWxfY2ZnX3JlZ3NbaV0ucmVnKTtcbi0tXG5kcml2ZXJzL25ldC9waHkvYXF1YW50aWEvYXF1YW50aWFfbWFpbi5jPTkxMD1zdGF0aWMgaW50IGFxcl9nZW4yX2ZpbGxfaW50ZXJmYWNlX21vZGVzKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXG4tLVxuZHJpdmVycy9uZXQvcGh5L2FxdWFudGlhL2FxdWFudGlhX21haW4uYy05MjMtXHRpZiAocHJpdi1cdTAwM2V3YWl0X29uX2dsb2JhbF9jZmcpIHtcbmRyaXZlcnMvbmV0L3BoeS9hcXVhbnRpYS9hcXVhbnRpYV9tYWluLmM6OTI0Olx0XHRyZXQgPSBwaHlfcmVhZF9tbWRfcG9sbF90aW1lb3V0KHBoeWRldiwgTURJT19NTURfVkVORDEsXG5kcml2ZXJzL25ldC9waHkvYXF1YW50aWEvYXF1YW50aWFfbWFpbi5jLTkyNS1cdFx0XHRcdFx0XHRWRU5EMV9HTE9CQUxfQ0ZHXzEwME0sIHZhbCxcbi0tXG5kcml2ZXJzL25ldC9waHkvYXF1YW50aWEvYXF1YW50aWFfbWFpbi5jPTk3MD1zdGF0aWMgdm9pZCBhcXIxMDdfbGlua19jaGFuZ2Vfbm90aWZ5KHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXG4tLVxuZHJpdmVycy9uZXQvcGh5L2FxdWFudGlhL2FxdWFudGlhX21haW4uYy05NzgtXG5kcml2ZXJzL25ldC9waHkvYXF1YW50aWEvYXF1YW50aWFfbWFpbi5jOjk3OTpcdHZhbCA9IHBoeV9yZWFkX21tZChwaHlkZXYsIE1ESU9fTU1EX0FOLCBNRElPX0FOX1JYX0xQX1NUQVQxKTtcbmRyaXZlcnMvbmV0L3BoeS9hcXVhbnRpYS9hcXVhbnRpYV9tYWluLmMtOTgwLVx0LyogY2FsbCBmYWlsZWQgb3IgbGluayBwYXJ0bmVyIGlzIG5vIEFxdWFudGlhIFBIWSAqL1xuLS1cbmRyaXZlcnMvbmV0L3BoeS9hcXVhbnRpYS9hcXVhbnRpYV9tYWluLmMtOTg2LVxuZHJpdmVycy9uZXQvcGh5L2FxdWFudGlhL2FxdWFudGlhX21haW4uYzo5ODc6XHR2YWwgPSBwaHlfcmVhZF9tbWQocGh5ZGV2LCBNRElPX01NRF9BTiwgTURJT19BTl9SWF9MUF9TVEFUNCk7XG5kcml2ZXJzL25ldC9waHkvYXF1YW50aWEvYXF1YW50aWFfbWFpbi5jLTk4OC1cdGlmICh2YWwgXHUwMDNjIDApXG4tLVxuZHJpdmVycy9uZXQvcGh5L2FxdWFudGlhL2FxdWFudGlhX21haW4uYy05OTMtXG5kcml2ZXJzL25ldC9waHkvYXF1YW50aWEvYXF1YW50aWFfbWFpbi5jOjk5NDpcdHZhbCA9IHBoeV9yZWFkX21tZChwaHlkZXYsIE1ESU9fTU1EX0FOLCBNRElPX0FOX1JYX1ZFTkRfU1RBVDMpO1xuZHJpdmVycy9uZXQvcGh5L2FxdWFudGlhL2FxdWFudGlhX21haW4uYy05OTUtXHRpZiAodmFsIFx1MDAzYyAwKVxuLS1cbmRyaXZlcnMvbmV0L3BoeS9hcXVhbnRpYS9hcXVhbnRpYV9tYWluLmMtMTAwNS1cbmRyaXZlcnMvbmV0L3BoeS9hcXVhbnRpYS9hcXVhbnRpYV9tYWluLmM6MTAwNjpcdHZhbCA9IHBoeV9yZWFkX21tZChwaHlkZXYsIE1ESU9fTU1EX1ZFTkQxLCBWRU5EMV9HTE9CQUxfUlNWRF9TVEFUOSk7XG5kcml2ZXJzL25ldC9waHkvYXF1YW50aWEvYXF1YW50aWFfbWFpbi5jLTEwMDctXHRpZiAodmFsIFx1MDAzYyAwKVxuLS1cbmRyaXZlcnMvbmV0L3BoeS9hcXVhbnRpYS9hcXVhbnRpYV9tYWluLmM9MTAxNT1zdGF0aWMgaW50IGFxcl9nZW4xX3dhaXRfcHJvY2Vzc29yX2ludGVuc2l2ZV9vcChzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxuLS1cbmRyaXZlcnMvbmV0L3BoeS9hcXVhbnRpYS9hcXVhbnRpYV9tYWluLmMtMTAyNS1cbmRyaXZlcnMvbmV0L3BoeS9hcXVhbnRpYS9hcXVhbnRpYV9tYWluLmM6MTAyNjpcdGVyciA9IHBoeV9yZWFkX21tZF9wb2xsX3RpbWVvdXQocGh5ZGV2LCBNRElPX01NRF9WRU5EMSxcbmRyaXZlcnMvbmV0L3BoeS9hcXVhbnRpYS9hcXVhbnRpYV9tYWluLmMtMTAyNy1cdFx0XHRcdFx0VkVORDFfR0xPQkFMX0dFTl9TVEFUMiwgdmFsLFxuLS1cbmRyaXZlcnMvbmV0L3BoeS9hczIxeHh4LmM9Mjk3PXN0YXRpYyBpbnQgYWVvbl9maXJtd2FyZV9ib290KHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYsIGNvbnN0IHU4ICpkYXRhLFxuLS1cbmRyaXZlcnMvbmV0L3BoeS9hczIxeHh4LmMtMzE4LVxuZHJpdmVycy9uZXQvcGh5L2FzMjF4eHguYzozMTk6XHR2YWwgPSBwaHlfcmVhZF9tbWQocGh5ZGV2LCBNRElPX01NRF9WRU5EMSxcbmRyaXZlcnMvbmV0L3BoeS9hczIxeHh4LmMtMzIwLVx0XHRcdCAgIFZFTkQxX0dMQl9SRUdfTURJT19JTkRJUkVDVF9TVEFUVVMpO1xuLS1cbmRyaXZlcnMvbmV0L3BoeS9hczIxeHh4LmM9MzkyPXN0YXRpYyBpbnQgYWVvbl9pcGNfd2FpdF9jbWQoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldiwgYm9vbCBwYXJpdHlfc3RhdHVzKVxuLS1cbmRyaXZlcnMvbmV0L3BoeS9hczIxeHh4LmMtMzk5LVx0ICovXG5kcml2ZXJzL25ldC9waHkvYXMyMXh4eC5jOjQwMDpcdHJldHVybiBwaHlfcmVhZF9tbWRfcG9sbF90aW1lb3V0KHBoeWRldiwgTURJT19NTURfVkVORDEsIFZFTkQxX0lQQ19TVFMsIHZhbCxcbmRyaXZlcnMvbmV0L3BoeS9hczIxeHh4LmMtNDAxLVx0XHRcdFx0XHQgYWVvbl9pcGNfcmVhZHkodmFsLCBwYXJpdHlfc3RhdHVzKSxcbi0tXG5kcml2ZXJzL25ldC9waHkvYXMyMXh4eC5jPTQwNT1zdGF0aWMgaW50IGFlb25faXBjX3NlbmRfY21kKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYsXG4tLVxuZHJpdmVycy9uZXQvcGh5L2FzMjF4eHguYy00MzktXG5kcml2ZXJzL25ldC9waHkvYXMyMXh4eC5jOjQ0MDpcdHJldCA9IHBoeV9yZWFkX21tZChwaHlkZXYsIE1ESU9fTU1EX1ZFTkQxLCBWRU5EMV9JUENfU1RTKTtcbmRyaXZlcnMvbmV0L3BoeS9hczIxeHh4LmMtNDQxLVx0aWYgKHJldCBcdTAwM2MgMClcbi0tXG5kcml2ZXJzL25ldC9waHkvYXMyMXh4eC5jPTQ1NT1zdGF0aWMgaW50IGFlb25faXBjX3NlbmRfbXNnKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYsXG4tLVxuZHJpdmVycy9uZXQvcGh5L2FzMjF4eHguYy01MDYtXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBESVZfUk9VTkRfVVAocmV0X3NpemUsIHNpemVvZih1MTYpKTsgaSYjNDM7JiM0MzspIHtcbmRyaXZlcnMvbmV0L3BoeS9hczIxeHh4LmM6NTA3Olx0XHRyZXQgPSBwaHlfcmVhZF9tbWQocGh5ZGV2LCBNRElPX01NRF9WRU5EMSwgVkVORDFfSVBDX0RBVEEoaSkpO1xuZHJpdmVycy9uZXQvcGh5L2FzMjF4eHguYy01MDgtXHRcdGlmIChyZXQgXHUwMDNjIDApXG4tLVxuZHJpdmVycy9uZXQvcGh5L2FzMjF4eHguYz02MzY9c3RhdGljIGludCBhczIxeHh4X3JlYWRfbGluayhzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2LCBpbnQgKmJtY3IpXG4tLVxuZHJpdmVycy9uZXQvcGh5L2FzMjF4eHguYy02NDItXHQgKi9cbmRyaXZlcnMvbmV0L3BoeS9hczIxeHh4LmM6NjQzOlx0KmJtY3IgPSBwaHlfcmVhZF9tbWQocGh5ZGV2LCBNRElPX01NRF9BTixcbmRyaXZlcnMvbmV0L3BoeS9hczIxeHh4LmMtNjQ0LVx0XHRcdCAgICAgQVMyMVhYWF9NRElPX0FOX0MyMiAmIzQzOyBNSUlfQk1DUik7XG4tLVxuZHJpdmVycy9uZXQvcGh5L2FzMjF4eHguYy02NTUtXG5kcml2ZXJzL25ldC9waHkvYXMyMXh4eC5jOjY1NjpcdHN0YXR1cyA9IHBoeV9yZWFkX21tZChwaHlkZXYsIE1ESU9fTU1EX0FOLCBNRElPX1NUQVQxKTtcbmRyaXZlcnMvbmV0L3BoeS9hczIxeHh4LmMtNjU3LVx0aWYgKHN0YXR1cyBcdTAwM2MgMClcbi0tXG5kcml2ZXJzL25ldC9waHkvYXMyMXh4eC5jPTY2NT1zdGF0aWMgaW50IGFzMjF4eHhfcmVhZF9jMjJfbHBhKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXG4tLVxuZHJpdmVycy9uZXQvcGh5L2FzMjF4eHguYy02NzEtXHQgKi9cbmRyaXZlcnMvbmV0L3BoeS9hczIxeHh4LmM6NjcyOlx0bHBhZ2IgPSBwaHlfcmVhZF9tbWQocGh5ZGV2LCBNRElPX01NRF9BTixcbmRyaXZlcnMvbmV0L3BoeS9hczIxeHh4LmMtNjczLVx0XHRcdCAgICAgQVMyMVhYWF9NRElPX0FOX0MyMiAmIzQzOyBNSUlfU1RBVDEwMDApO1xuLS1cbmRyaXZlcnMvbmV0L3BoeS9hczIxeHh4LmMtNjc3LVx0aWYgKGxwYWdiIFx1MDAyNiBMUEFfMTAwME1TRkFJTCkge1xuZHJpdmVycy9uZXQvcGh5L2FzMjF4eHguYzo2Nzg6XHRcdGludCBhZHYgPSBwaHlfcmVhZF9tbWQocGh5ZGV2LCBNRElPX01NRF9BTixcbmRyaXZlcnMvbmV0L3BoeS9hczIxeHh4LmMtNjc5LVx0XHRcdFx0ICAgICAgIEFTMjFYWFhfTURJT19BTl9DMjIgJiM0MzsgTUlJX0NUUkwxMDAwKTtcbi0tXG5kcml2ZXJzL25ldC9waHkvYXMyMXh4eC5jPTY5Nz1zdGF0aWMgaW50IGFzMjF4eHhfcmVhZF9zdGF0dXMoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcbi0tXG5kcml2ZXJzL25ldC9waHkvYXMyMXh4eC5jLTcyOS1cbmRyaXZlcnMvbmV0L3BoeS9hczIxeHh4LmM6NzMwOlx0XHRzcGVlZCA9IHBoeV9yZWFkX21tZChwaHlkZXYsIE1ESU9fTU1EX1ZFTkQxLFxuZHJpdmVycy9uZXQvcGh5L2FzMjF4eHguYy03MzEtXHRcdFx0XHQgICAgIFZFTkQxX1NQRUVEX1NUQVRVUyk7XG4tLVxuZHJpdmVycy9uZXQvcGh5L2FzMjF4eHguYz04MDM9c3RhdGljIGludCBhczIxeHh4X2xlZF9od19jb250cm9sX2dldChzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2LCB1OCBpbmRleCxcbi0tXG5kcml2ZXJzL25ldC9waHkvYXMyMXh4eC5jLTgxMC1cbmRyaXZlcnMvbmV0L3BoeS9hczIxeHh4LmM6ODExOlx0dmFsID0gcGh5X3JlYWRfbW1kKHBoeWRldiwgTURJT19NTURfVkVORDEsIFZFTkQxX0xFRF9SRUcoaW5kZXgpKTtcbmRyaXZlcnMvbmV0L3BoeS9hczIxeHh4LmMtODEyLVx0aWYgKHZhbCBcdTAwM2MgMClcbi0tXG5kcml2ZXJzL25ldC9waHkvYXMyMXh4eC5jPTg3OT1zdGF0aWMgaW50IGFzMjF4eHhfbWF0Y2hfcGh5X2RldmljZShzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2LFxuLS1cbmRyaXZlcnMvbmV0L3BoeS9hczIxeHh4LmMtODkyLVx0LyogUmVhZCBQSFkgSUQgdG8gaGFuZGxlIGZpcm13YXJlIGxvYWRlZCBvciBIVyByZXNldCAqL1xuZHJpdmVycy9uZXQvcGh5L2FzMjF4eHguYzo4OTM6XHRyZXQgPSBwaHlfcmVhZF9tbWQocGh5ZGV2LCBNRElPX01NRF9QQ1MsIE1JSV9QSFlTSUQxKTtcbmRyaXZlcnMvbmV0L3BoeS9hczIxeHh4LmMtODk0LVx0aWYgKHJldCBcdTAwM2MgMClcbi0tXG5kcml2ZXJzL25ldC9waHkvYXMyMXh4eC5jLTg5Ny1cbmRyaXZlcnMvbmV0L3BoeS9hczIxeHh4LmM6ODk4Olx0cmV0ID0gcGh5X3JlYWRfbW1kKHBoeWRldiwgTURJT19NTURfUENTLCBNSUlfUEhZU0lEMik7XG5kcml2ZXJzL25ldC9waHkvYXMyMXh4eC5jLTg5OS1cdGlmIChyZXQgXHUwMDNjIDApXG4tLVxuZHJpdmVycy9uZXQvcGh5L2JjbS1waHktbGliLmM9MzcyPWludCBiY21fcGh5X3NldF9lZWUoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldiwgYm9vbCBlbmFibGUpXG4tLVxuZHJpdmVycy9uZXQvcGh5L2JjbS1waHktbGliLmMtMzc2LVx0LyogRW5hYmxlIEVFRSBhdCBQSFkgbGV2ZWwgKi9cbmRyaXZlcnMvbmV0L3BoeS9iY20tcGh5LWxpYi5jOjM3NzpcdHZhbCA9IHBoeV9yZWFkX21tZChwaHlkZXYsIE1ESU9fTU1EX0FOLCBCUkNNX0NMNDVWRU5fRUVFX0NPTlRST0wpO1xuZHJpdmVycy9uZXQvcGh5L2JjbS1waHktbGliLmMtMzc4LVx0aWYgKHZhbCBcdTAwM2MgMClcbi0tXG5kcml2ZXJzL25ldC9waHkvYmNtLXBoeS1saWIuYy0zODgtXHQvKiBBZHZlcnRpc2UgRUVFICovXG5kcml2ZXJzL25ldC9waHkvYmNtLXBoeS1saWIuYzozODk6XHR2YWwgPSBwaHlfcmVhZF9tbWQocGh5ZGV2LCBNRElPX01NRF9BTiwgQkNNX0NMNDVWRU5fRUVFX0FEVik7XG5kcml2ZXJzL25ldC9waHkvYmNtLXBoeS1saWIuYy0zOTAtXHRpZiAodmFsIFx1MDAzYyAwKVxuLS1cbmRyaXZlcnMvbmV0L3BoeS9iY20tcGh5LWxpYi5jPTUzMz1zdGF0aWMgdTY0IGJjbV9waHlfZ2V0X3N0YXQoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldiwgdTY0ICpzaGFkb3csXG4tLVxuZHJpdmVycy9uZXQvcGh5L2JjbS1waHktbGliLmMtNTQyLVx0ZWxzZVxuZHJpdmVycy9uZXQvcGh5L2JjbS1waHktbGliLmM6NTQzOlx0XHR2YWwgPSBwaHlfcmVhZF9tbWQocGh5ZGV2LCBzdGF0LmRldmFkLCBzdGF0LnJlZyk7XG5kcml2ZXJzL25ldC9waHkvYmNtLXBoeS1saWIuYy01NDQtXHRpZiAodmFsIFx1MDAzYyAwKSB7XG4tLVxuZHJpdmVycy9uZXQvcGh5L2JjbTd4eHguYz02MjM9c3RhdGljIGJvb2wgYmNtN3h4eF8yOG5tX2VwaHlfZGV2X3ZhbGlkKGludCBkZXZudW0pXG4tLVxuZHJpdmVycy9uZXQvcGh5L2JjbTd4eHguYy02MjctXG5kcml2ZXJzL25ldC9waHkvYmNtN3h4eC5jOjYyODpzdGF0aWMgaW50IGJjbTd4eHhfMjhubV9lcGh5X3JlYWRfbW1kKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYsXG5kcml2ZXJzL25ldC9waHkvYmNtN3h4eC5jLTYyOS1cdFx0XHRcdCAgICAgIGludCBkZXZudW0sIHUxNiByZWdudW0pXG4tLVxuZHJpdmVycy9uZXQvcGh5L2JjbTd4eHguYz04MjE9c3RhdGljIGludCBiY203eHh4XzI4bm1fcHJvYmUoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcbi0tXG5kcml2ZXJzL25ldC9waHkvYmNtN3h4eC5jLTg4NS1cdC5wcm9iZVx0XHQ9IGJjbTd4eHhfMjhubV9wcm9iZSxcdFx0XHRcdFxcXG5kcml2ZXJzL25ldC9waHkvYmNtN3h4eC5jOjg4NjpcdC5yZWFkX21tZFx0PSBiY203eHh4XzI4bm1fZXBoeV9yZWFkX21tZCxcdFx0XHRcXFxuZHJpdmVycy9uZXQvcGh5L2JjbTd4eHguYy04ODctXHQud3JpdGVfbW1kXHQ9IGJjbTd4eHhfMjhubV9lcGh5X3dyaXRlX21tZCxcdFx0XHRcXFxuLS1cbmRyaXZlcnMvbmV0L3BoeS9iY204NDg4MS5jPTUwPXN0YXRpYyBpbnQgYmNtODQ4ODFfd2FpdF9pbml0KHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXG4tLVxuZHJpdmVycy9uZXQvcGh5L2JjbTg0ODgxLmMtNTMtXG5kcml2ZXJzL25ldC9waHkvYmNtODQ4ODEuYzo1NDpcdHJldHVybiBwaHlfcmVhZF9tbWRfcG9sbF90aW1lb3V0KHBoeWRldiwgTURJT19NTURfUE1BUE1ELCBNRElPX0NUUkwxLFxuZHJpdmVycy9uZXQvcGh5L2JjbTg0ODgxLmMtNTUtXHRcdFx0XHRcdCB2YWwsICEodmFsIFx1MDAyNiBNRElPX0NUUkwxX1JFU0VUKSxcbi0tXG5kcml2ZXJzL25ldC9waHkvYmNtODQ4ODEuYz0xODQ9c3RhdGljIGludCBiY204NDg5eF9sZWRfaHdfY29udHJvbF9nZXQoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldiwgdTggaW5kZXgsXG4tLVxuZHJpdmVycy9uZXQvcGh5L2JjbTg0ODgxLmMtMTkxLVxuZHJpdmVycy9uZXQvcGh5L2JjbTg0ODgxLmM6MTkyOlx0bG93ID0gcGh5X3JlYWRfbW1kKHBoeWRldiwgTURJT19NTURfUE1BUE1ELFxuZHJpdmVycy9uZXQvcGh5L2JjbTg0ODgxLmMtMTkzLVx0XHRcdCAgIGJjbTg0ODl4X2xlZF9yZWdzW2luZGV4XS5tYXNrX2xvdyk7XG4tLVxuZHJpdmVycy9uZXQvcGh5L2JjbTg0ODgxLmMtMTk1LVx0XHRyZXR1cm4gbG93O1xuZHJpdmVycy9uZXQvcGh5L2JjbTg0ODgxLmM6MTk2Olx0ZXh0ID0gcGh5X3JlYWRfbW1kKHBoeWRldiwgTURJT19NTURfUE1BUE1ELFxuZHJpdmVycy9uZXQvcGh5L2JjbTg0ODgxLmMtMTk3LVx0XHRcdCAgIGJjbTg0ODl4X2xlZF9yZWdzW2luZGV4XS5tYXNrX2V4dCk7XG4tLVxuZHJpdmVycy9uZXQvcGh5L2JjbTg0ODgxLmM9Mjg4PXN0YXRpYyBpbnQgYmNtODQ4ODFfYW5lZ19kb25lKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXG4tLVxuZHJpdmVycy9uZXQvcGh5L2JjbTg0ODgxLmMtMjkxLVxuZHJpdmVycy9uZXQvcGh5L2JjbTg0ODgxLmM6MjkyOlx0dmFsID0gcGh5X3JlYWRfbW1kKHBoeWRldiwgTURJT19NTURfQU4sIE1ESU9fU1RBVDEpO1xuZHJpdmVycy9uZXQvcGh5L2JjbTg0ODgxLmMtMjkzLVx0aWYgKHZhbCBcdTAwM2MgMClcbi0tXG5kcml2ZXJzL25ldC9waHkvYmNtODQ4ODEuYy0yOTUtXG5kcml2ZXJzL25ldC9waHkvYmNtODQ4ODEuYzoyOTY6XHRibXNyID0gcGh5X3JlYWRfbW1kKHBoeWRldiwgTURJT19NTURfQU4sIE1ESU9fQU5fQzIyICYjNDM7IE1JSV9CTVNSKTtcbmRyaXZlcnMvbmV0L3BoeS9iY204NDg4MS5jLTI5Ny1cdGlmIChibXNyIFx1MDAzYyAwKVxuLS1cbmRyaXZlcnMvbmV0L3BoeS9iY204NDg4MS5jPTMwND1zdGF0aWMgaW50IGJjbTg0ODgxX3JlYWRfc3RhdHVzKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXG4tLVxuZHJpdmVycy9uZXQvcGh5L2JjbTg0ODgxLmMtMzA4LVxuZHJpdmVycy9uZXQvcGh5L2JjbTg0ODgxLmM6MzA5Olx0dmFsID0gcGh5X3JlYWRfbW1kKHBoeWRldiwgTURJT19NTURfQU4sIE1ESU9fQ1RSTDEpO1xuZHJpdmVycy9uZXQvcGh5L2JjbTg0ODgxLmMtMzEwLVx0aWYgKHZhbCBcdTAwM2MgMClcbi0tXG5kcml2ZXJzL25ldC9waHkvYmNtODQ4ODEuYy0zMTctXG5kcml2ZXJzL25ldC9waHkvYmNtODQ4ODEuYzozMTg6XHR2YWwgPSBwaHlfcmVhZF9tbWQocGh5ZGV2LCBNRElPX01NRF9BTiwgTURJT19TVEFUMSk7XG5kcml2ZXJzL25ldC9waHkvYmNtODQ4ODEuYy0zMTktXHRpZiAodmFsIFx1MDAzYyAwKVxuLS1cbmRyaXZlcnMvbmV0L3BoeS9iY204NDg4MS5jLTMyMS1cbmRyaXZlcnMvbmV0L3BoeS9iY204NDg4MS5jOjMyMjpcdGJtc3IgPSBwaHlfcmVhZF9tbWQocGh5ZGV2LCBNRElPX01NRF9BTiwgTURJT19BTl9DMjIgJiM0MzsgTUlJX0JNU1IpO1xuZHJpdmVycy9uZXQvcGh5L2JjbTg0ODgxLmMtMzIzLVx0aWYgKGJtc3IgXHUwMDNjIDApXG4tLVxuZHJpdmVycy9uZXQvcGh5L2JjbTg0ODgxLmMtMzQ3LVxuZHJpdmVycy9uZXQvcGh5L2JjbTg0ODgxLmM6MzQ4Olx0XHR2YWwgPSBwaHlfcmVhZF9tbWQocGh5ZGV2LCBNRElPX01NRF9BTixcbmRyaXZlcnMvbmV0L3BoeS9iY204NDg4MS5jLTM0OS1cdFx0XHRcdCAgIE1ESU9fQU5fQzIyICYjNDM7IE1JSV9TVEFUMTAwMCk7XG4tLVxuZHJpdmVycy9uZXQvcGh5L2JjbTg0ODgxLmMtMzgwLVx0ICovXG5kcml2ZXJzL25ldC9waHkvYmNtODQ4ODEuYzozODE6XHR2YWwgPSBwaHlfcmVhZF9tbWQocGh5ZGV2LCBNRElPX01NRF9WRU5EMSwgMHg0MDExKTtcbmRyaXZlcnMvbmV0L3BoeS9iY204NDg4MS5jLTM4Mi1cdG1vZGUgPSAodmFsIFx1MDAyNiAweDFlKSBcdTAwM2VcdTAwM2UgMTtcbi0tXG5kcml2ZXJzL25ldC9waHkvYmNtODd4eC5jPTM0PXN0YXRpYyBpbnQgYmNtODd4eF9vZl9yZWdfaW5pdChzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxuLS1cbmRyaXZlcnMvbmV0L3BoeS9iY204N3h4LmMtNTktXHRcdGlmIChtYXNrKSB7XG5kcml2ZXJzL25ldC9waHkvYmNtODd4eC5jOjYwOlx0XHRcdHZhbCA9IHBoeV9yZWFkX21tZChwaHlkZXYsIGRldmlkLCByZWcpO1xuZHJpdmVycy9uZXQvcGh5L2JjbTg3eHguYy02MS1cdFx0XHRpZiAodmFsIFx1MDAzYyAwKSB7XG4tLVxuZHJpdmVycy9uZXQvcGh5L2JjbTg3eHguYz0xMDA9c3RhdGljIGludCBiY204N3h4X3JlYWRfc3RhdHVzKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXG4tLVxuZHJpdmVycy9uZXQvcGh5L2JjbTg3eHguYy0xMDUtXG5kcml2ZXJzL25ldC9waHkvYmNtODd4eC5jOjEwNjpcdHJ4X3NpZ25hbF9kZXRlY3QgPSBwaHlfcmVhZF9tbWQocGh5ZGV2LCBNRElPX01NRF9QTUFQTUQsXG5kcml2ZXJzL25ldC9waHkvYmNtODd4eC5jLTEwNy1cdFx0XHRcdFx0QkNNODdYWF9QTURfUlhfU0lHTkFMX0RFVEVDVCk7XG4tLVxuZHJpdmVycy9uZXQvcGh5L2JjbTg3eHguYy0xMTMtXG5kcml2ZXJzL25ldC9waHkvYmNtODd4eC5jOjExNDpcdHBjc19zdGF0dXMgPSBwaHlfcmVhZF9tbWQocGh5ZGV2LCBNRElPX01NRF9QQ1MsXG5kcml2ZXJzL25ldC9waHkvYmNtODd4eC5jLTExNS1cdFx0XHRcdCAgQkNNODdYWF8xMEdCQVNFUl9QQ1NfU1RBVFVTKTtcbi0tXG5kcml2ZXJzL25ldC9waHkvYmNtODd4eC5jLTEyMS1cbmRyaXZlcnMvbmV0L3BoeS9iY204N3h4LmM6MTIyOlx0eGd4c19sYW5lX3N0YXR1cyA9IHBoeV9yZWFkX21tZChwaHlkZXYsIE1ESU9fTU1EX1BIWVhTLFxuZHJpdmVycy9uZXQvcGh5L2JjbTg3eHguYy0xMjMtXHRcdFx0XHRcdEJDTTg3WFhfWEdYU19MQU5FX1NUQVRVUyk7XG4tLVxuZHJpdmVycy9uZXQvcGh5L2JjbTg3eHguYz0xNDA9c3RhdGljIGludCBiY204N3h4X2NvbmZpZ19pbnRyKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXG4tLVxuZHJpdmVycy9uZXQvcGh5L2JjbTg3eHguYy0xNDMtXG5kcml2ZXJzL25ldC9waHkvYmNtODd4eC5jOjE0NDpcdHJlZyA9IHBoeV9yZWFkX21tZChwaHlkZXYsIE1ESU9fTU1EX1BDUywgQkNNODdYWF9MQVNJX0NPTlRST0wpO1xuZHJpdmVycy9uZXQvcGh5L2JjbTg3eHguYy0xNDUtXG4tLVxuZHJpdmVycy9uZXQvcGh5L2JjbTg3eHguYy0xNDktXHRpZiAocGh5ZGV2LVx1MDAzZWludGVycnVwdHMgPT0gUEhZX0lOVEVSUlVQVF9FTkFCTEVEKSB7XG5kcml2ZXJzL25ldC9waHkvYmNtODd4eC5jOjE1MDpcdFx0ZXJyID0gcGh5X3JlYWRfbW1kKHBoeWRldiwgTURJT19NTURfUENTLCBCQ004N1hYX0xBU0lfU1RBVFVTKTtcbmRyaXZlcnMvbmV0L3BoeS9iY204N3h4LmMtMTUxLVx0XHRpZiAoZXJyKVxuLS1cbmRyaXZlcnMvbmV0L3BoeS9iY204N3h4LmMtMTYzLVxuZHJpdmVycy9uZXQvcGh5L2JjbTg3eHguYzoxNjQ6XHRcdGVyciA9IHBoeV9yZWFkX21tZChwaHlkZXYsIE1ESU9fTU1EX1BDUywgQkNNODdYWF9MQVNJX1NUQVRVUyk7XG5kcml2ZXJzL25ldC9waHkvYmNtODd4eC5jLTE2NS1cdH1cbi0tXG5kcml2ZXJzL25ldC9waHkvZHA4MzgyMi5jPTIxND1zdGF0aWMgaW50IGRwODM4MjJfY29uZmlnX3dvbChzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2LFxuLS1cbmRyaXZlcnMvbmV0L3BoeS9kcDgzODIyLmMtMjM2LVxuZHJpdmVycy9uZXQvcGh5L2RwODM4MjIuYzoyMzc6XHRcdHZhbHVlID0gcGh5X3JlYWRfbW1kKHBoeWRldiwgTURJT19NTURfVkVORDIsXG5kcml2ZXJzL25ldC9waHkvZHA4MzgyMi5jLTIzOC1cdFx0XHRcdCAgICAgTUlJX0RQODM4MjJfV09MX0NGRyk7XG4tLVxuZHJpdmVycy9uZXQvcGh5L2RwODM4MjIuYz0yODg9c3RhdGljIHZvaWQgZHA4MzgyMl9nZXRfd29sKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYsXG4tLVxuZHJpdmVycy9uZXQvcGh5L2RwODM4MjIuYy0yOTYtXG5kcml2ZXJzL25ldC9waHkvZHA4MzgyMi5jOjI5NzpcdHZhbHVlID0gcGh5X3JlYWRfbW1kKHBoeWRldiwgTURJT19NTURfVkVORDIsIE1JSV9EUDgzODIyX1dPTF9DRkcpO1xuZHJpdmVycy9uZXQvcGh5L2RwODM4MjIuYy0yOTgtXG4tLVxuZHJpdmVycy9uZXQvcGh5L2RwODM4MjIuYy0zMDItXHRpZiAodmFsdWUgXHUwMDI2IERQODM4MjJfV09MX1NFQ1VSRV9PTikge1xuZHJpdmVycy9uZXQvcGh5L2RwODM4MjIuYzozMDM6XHRcdHNvcGFzc192YWwgPSBwaHlfcmVhZF9tbWQocGh5ZGV2LCBNRElPX01NRF9WRU5EMixcbmRyaXZlcnMvbmV0L3BoeS9kcDgzODIyLmMtMzA0LVx0XHRcdFx0XHQgIE1JSV9EUDgzODIyX1JYU09QMSk7XG4tLVxuZHJpdmVycy9uZXQvcGh5L2RwODM4MjIuYy0zMDctXG5kcml2ZXJzL25ldC9waHkvZHA4MzgyMi5jOjMwODpcdFx0c29wYXNzX3ZhbCA9IHBoeV9yZWFkX21tZChwaHlkZXYsIE1ESU9fTU1EX1ZFTkQyLFxuZHJpdmVycy9uZXQvcGh5L2RwODM4MjIuYy0zMDktXHRcdFx0XHRcdCAgTUlJX0RQODM4MjJfUlhTT1AyKTtcbi0tXG5kcml2ZXJzL25ldC9waHkvZHA4MzgyMi5jLTMxMi1cbmRyaXZlcnMvbmV0L3BoeS9kcDgzODIyLmM6MzEzOlx0XHRzb3Bhc3NfdmFsID0gcGh5X3JlYWRfbW1kKHBoeWRldiwgTURJT19NTURfVkVORDIsXG5kcml2ZXJzL25ldC9waHkvZHA4MzgyMi5jLTMxNC1cdFx0XHRcdFx0ICBNSUlfRFA4MzgyMl9SWFNPUDMpO1xuLS1cbmRyaXZlcnMvbmV0L3BoeS9kcDgzODIyLmM9OTE3PXN0YXRpYyBpbnQgZHA4MzgyMl9yZWFkX3N0cmFwcyhzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxuLS1cbmRyaXZlcnMvbmV0L3BoeS9kcDgzODIyLmMtOTIyLVxuZHJpdmVycy9uZXQvcGh5L2RwODM4MjIuYzo5MjM6XHR2YWwgPSBwaHlfcmVhZF9tbWQocGh5ZGV2LCBNRElPX01NRF9WRU5EMiwgTUlJX0RQODM4MjJfU09SMSk7XG5kcml2ZXJzL25ldC9waHkvZHA4MzgyMi5jLTkyNC1cdGlmICh2YWwgXHUwMDNjIDApXG4tLVxuZHJpdmVycy9uZXQvcGh5L2RwODM4MjIuYz0xMDMzPXN0YXRpYyBpbnQgZHA4MzgyMl9zdXNwZW5kKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXG4tLVxuZHJpdmVycy9uZXQvcGh5L2RwODM4MjIuYy0xMDM2LVxuZHJpdmVycy9uZXQvcGh5L2RwODM4MjIuYzoxMDM3Olx0dmFsdWUgPSBwaHlfcmVhZF9tbWQocGh5ZGV2LCBNRElPX01NRF9WRU5EMiwgTUlJX0RQODM4MjJfV09MX0NGRyk7XG5kcml2ZXJzL25ldC9waHkvZHA4MzgyMi5jLTEwMzgtXG4tLVxuZHJpdmVycy9uZXQvcGh5L2RwODM4MjIuYz0xMDQ1PXN0YXRpYyBpbnQgZHA4MzgyMl9yZXN1bWUoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcbi0tXG5kcml2ZXJzL25ldC9waHkvZHA4MzgyMi5jLTEwNTAtXG5kcml2ZXJzL25ldC9waHkvZHA4MzgyMi5jOjEwNTE6XHR2YWx1ZSA9IHBoeV9yZWFkX21tZChwaHlkZXYsIE1ESU9fTU1EX1ZFTkQyLCBNSUlfRFA4MzgyMl9XT0xfQ0ZHKTtcbmRyaXZlcnMvbmV0L3BoeS9kcDgzODIyLmMtMTA1Mi1cbi0tXG5kcml2ZXJzL25ldC9waHkvZHA4MzgyMi5jPTExMjQ9c3RhdGljIGludCBkcDgzODIyX2xlZF9od19jb250cm9sX2dldChzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2LCB1OCBpbmRleCxcbi0tXG5kcml2ZXJzL25ldC9waHkvZHA4MzgyMi5jLTExMjktXHRpZiAoaW5kZXggPT0gRFA4MzgyMl9MRURfSU5ERVhfTEVEXzAgfHwgaW5kZXggPT0gRFA4MzgyMl9MRURfSU5ERVhfQ09MX0dQSU8yKSB7XG5kcml2ZXJzL25ldC9waHkvZHA4MzgyMi5jOjExMzA6XHRcdHZhbCA9IHBoeV9yZWFkX21tZChwaHlkZXYsIE1ESU9fTU1EX1ZFTkQyLCBNSUlfRFA4MzgyMl9NTEVEQ1IpO1xuZHJpdmVycy9uZXQvcGh5L2RwODM4MjIuYy0xMTMxLVx0XHRpZiAodmFsIFx1MDAzYyAwKVxuLS1cbmRyaXZlcnMvbmV0L3BoeS9kcDgzODIyLmMtMTEzNS1cdH0gZWxzZSB7XG5kcml2ZXJzL25ldC9waHkvZHA4MzgyMi5jOjExMzY6XHRcdHZhbCA9IHBoeV9yZWFkX21tZChwaHlkZXYsIE1ESU9fTU1EX1ZFTkQyLCBNSUlfRFA4MzgyMl9MRURDRkcxKTtcbmRyaXZlcnMvbmV0L3BoeS9kcDgzODIyLmMtMTEzNy1cdFx0aWYgKHZhbCBcdTAwM2MgMClcbi0tXG5kcml2ZXJzL25ldC9waHkvZHA4Mzg2Ny5jPTIxMT1zdGF0aWMgaW50IGRwODM4Njdfc2V0X3dvbChzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2LFxuLS1cbmRyaXZlcnMvbmV0L3BoeS9kcDgzODY3LmMtMjE3LVxuZHJpdmVycy9uZXQvcGh5L2RwODM4NjcuYzoyMTg6XHR2YWxfcnhjZmcgPSBwaHlfcmVhZF9tbWQocGh5ZGV2LCBEUDgzODY3X0RFVkFERFIsIERQODM4NjdfUlhGQ0ZHKTtcbmRyaXZlcnMvbmV0L3BoeS9kcDgzODY3LmMtMjE5LVx0dmFsX21pY3IgPSBwaHlfcmVhZChwaHlkZXYsIE1JSV9EUDgzODY3X01JQ1IpO1xuLS1cbmRyaXZlcnMvbmV0L3BoeS9kcDgzODY3LmM9Mjc3PXN0YXRpYyB2b2lkIGRwODM4NjdfZ2V0X3dvbChzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2LFxuLS1cbmRyaXZlcnMvbmV0L3BoeS9kcDgzODY3LmMtMjg1LVxuZHJpdmVycy9uZXQvcGh5L2RwODM4NjcuYzoyODY6XHR2YWx1ZSA9IHBoeV9yZWFkX21tZChwaHlkZXYsIERQODM4NjdfREVWQUREUiwgRFA4Mzg2N19SWEZDRkcpO1xuZHJpdmVycy9uZXQvcGh5L2RwODM4NjcuYy0yODctXG4tLVxuZHJpdmVycy9uZXQvcGh5L2RwODM4NjcuYy0yOTctXHRpZiAodmFsdWUgXHUwMDI2IERQODM4NjdfV09MX1NFQ19FTikge1xuZHJpdmVycy9uZXQvcGh5L2RwODM4NjcuYzoyOTg6XHRcdHNvcGFzc192YWwgPSBwaHlfcmVhZF9tbWQocGh5ZGV2LCBEUDgzODY3X0RFVkFERFIsXG5kcml2ZXJzL25ldC9waHkvZHA4Mzg2Ny5jLTI5OS1cdFx0XHRcdFx0ICBEUDgzODY3X1JYRlNPUDEpO1xuLS1cbmRyaXZlcnMvbmV0L3BoeS9kcDgzODY3LmMtMzAyLVxuZHJpdmVycy9uZXQvcGh5L2RwODM4NjcuYzozMDM6XHRcdHNvcGFzc192YWwgPSBwaHlfcmVhZF9tbWQocGh5ZGV2LCBEUDgzODY3X0RFVkFERFIsXG5cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDMgMDc6Mzc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzQ4NDUKCQkJCQkJCW91dHB1dDogMzIKCQkJCQkJCXRob3VnaHRzOiAzMzEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqUmVhbGl6aW5nIHRoZSBQb3RlbnRpYWwgb2YgVVNCLUVtdWxhdGVkIFBIWSBEcml2ZXIgQWNjZXNzKioKCk9rYXksIGhvbGQgb24gYSBzZWNvbmQuLi4gYHBoeV9yZWFkX21tZGAgaXMgKmV2ZXJ5d2hlcmUqLiBJZiBhIFVTQiBkZXZpY2Ugc3VwcG9ydHMgQ2xhdXNlIDIyLCB0aGUgUEhZIGZyYW1ld29yayBjbGV2ZXJseSB1c2VzIGluZGlyZWN0IGFjY2VzcyAocmVnaXN0ZXJzIDEzIGFuZCAxNCkgdG8gZXNzZW50aWFsbHkgdHJhbnNsYXRlIENsYXVzZSA0NSBhY2Nlc3Nlcy4gU28sIHdhaXQuLi4gYHBoeV9yZWFkX21tZGAgKndvcmtzKiBvbiBDbGF1c2UgMjIgUEhZcyEgVGhpcyBjbGlja3MsIGJlY2F1c2UgSSBrbm93IHRoZSBSZWFsdGVrIFBIWSBkcml2ZXIgdXNlcyBgcGh5X3JlYWRfbW1kYCwgcmlnaHQ/IFllcywgaXQgZG9lcy4KClNvIGhlcmUmIzM5O3MgdGhlIHRob3VnaHQuIElmIHdlIGNvbnN0cnVjdCBhIG1vY2sgVVNCIG5ldHdvcmsgZGV2aWNlIHRoYXQgYWxzbyByZWdpc3RlcnMgYW4gTURJTyBidXMsIGFuZCB3ZSBjYW4gY29udHJvbCB0aGUgcmVzcG9uc2VzIHRvIE1ESU8gcmVhZHMuLi4gd2UgY2FuICp0cmljayogaXQgaW50byByZXBvcnRpbmcgdGhlIFJlYWx0ZWsgUEhZIElEIChgMHgwMDFjYzg5OGApIHdoZW4gdGhlIE1ESU8gYnVzIHNjYW5zIGZvciBQSFlzLiBUaGVuLCB0aGUga2VybmVsLCB0aGlua2luZyBhIFJlYWx0ZWsgUEhZIGlzIHByZXNlbnQsIHdpbGwgaW5zdGFudGlhdGUgdGhlIFJlYWx0ZWsgUEhZIGRyaXZlciBhbmQgY2FsbCBgcnRsODI2MXhfcHJvYmVgLgoKQW5kIHRoYXQmIzM5O3Mgd2hlcmUgc3l6a2FsbGVyIGNvbWVzIGluLiBJIHJlY2FsbCBpdCBoYXMgYSBgc3l6X3VzYl9jb25uZWN0YCB0b29sIHdoaWNoIGNhbiBlbXVsYXRlIFVTQiBkZXZpY2VzLiBDYW4gaXQgZW11bGF0ZSBhIFVTQiBuZXR3b3JrIGRldmljZSB0aGF0IHJlZ2lzdGVycyBhbiBNRElPIGJ1cz8gWWVzLCBzeXprYWxsZXIgZnV6emVzIFVTQiBkZXZpY2VzIGJ5IGZlZWRpbmcgdGhlbSBhcmJpdHJhcnkgVVNCIGRlc2NyaXB0b3JzLiBJZiBpdCB1c2VzIGRlc2NyaXB0b3JzIGZvciB0aGUgYHNtc2M5NXh4YCBvciBgYXNpeGAgZHJpdmVycywgdGhlbiB0aGUgZHJpdmVyIHdpbGwgYmluZCwgcmVnaXN0ZXIgYW4gTURJTyBidXMsIGFuZCBzdGFydCBzY2FubmluZy4gVGhlIGV4Y2l0aW5nIHBhcnQgaXMsIHN5emthbGxlciBjYW4gZ2l2ZSB0aGUgcmVzcG9uc2VzIHRvIHRoZSBVU0IgY29udHJvbCBtZXNzYWdlcyB3aGljaCB0aGUgZHJpdmVyIHVzZXMgdG8gcmVhZCBNRElPIHJlZ2lzdGVycyEKClRoaXMgaXMgaXQhIFRoaXMgbWVhbnMgdGhlIFBIWSBkcml2ZXIgaXMgcmVhY2hhYmxlIGZyb20gYSB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudCB2aWEgVVNCIGVtdWxhdGlvbiEgV2FpdCwgaXMgdGhlIFJlYWx0ZWsgUEhZIGRyaXZlciBlbmFibGVkIGJ5IGRlZmF1bHQgb3IgaXMgdGhlcmUgc29tZSBjb25maWcgbmVlZGVkPyBMZXQmIzM5O3MgY2hlY2sgdGhlIEtjb25maWcgZm9yIFJlYWx0ZWsgUEhZLiBUaGlzIGlzIHBvdGVudGlhbGx5IGh1Z2UuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAzIDA3OjM3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBSRUFMVEVLX1BIWSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3BoeS8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvcGh5L3JlYWx0ZWsvS2NvbmZpZy0xLSMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxuZHJpdmVycy9uZXQvcGh5L3JlYWx0ZWsvS2NvbmZpZzoyOmNvbmZpZyBSRUFMVEVLX1BIWVxuZHJpdmVycy9uZXQvcGh5L3JlYWx0ZWsvS2NvbmZpZy0zLVx0dHJpc3RhdGUgXCYjMzQ7UmVhbHRlayBQSFlzXCYjMzQ7XG4tLVxuZHJpdmVycy9uZXQvcGh5L3JlYWx0ZWsvS2NvbmZpZz04PWlmIFJFQUxURUtfUEhZXG5kcml2ZXJzL25ldC9waHkvcmVhbHRlay9LY29uZmlnLTktXG5kcml2ZXJzL25ldC9waHkvcmVhbHRlay9LY29uZmlnOjEwOmNvbmZpZyBSRUFMVEVLX1BIWV9IV01PTlxuZHJpdmVycy9uZXQvcGh5L3JlYWx0ZWsvS2NvbmZpZy0xMS1cdGJvb2wgXCYjMzQ7SFdNT04gc3VwcG9ydCBmb3IgUmVhbHRlayBQSFlzXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAzIDA3OjM3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDM1NzkxCgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogMzUwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgUmVhbHRlayBQSFkgQ29uZmlndXJhdGlvbioqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBgQ09ORklHX1JFQUxURUtfUEhZYCBjb25maWcgb3B0aW9uLiBJIG5lZWQgdG8gZmlndXJlIG91dCBpZiB0aGVyZSBhcmUgYW55IG90aGVyIHJlbGF0ZWQgY29uZmlncyBpbiBwbGF5IGhlcmUuIFRoZSBwYXRjaCBhZGRzIHRoaXMgZmlybXdhcmUgbmFtZSwgYFJUTDgyNjFDX0NFX0ZXX05BTUUgJiMzNDtydGxfbmljL3J0bDgyNjFjLmJpbiYjMzQ7YC4gTm93LCBJIHJlbWVtYmVyIHNlZWluZyBgcmVxdWVzdF9maXJtd2FyZWAgYmVpbmcgY2FsbGVkIGluIGBydGw4MjYxeF9md19sb2FkYC4gSWYgdGhhdCBmYWlscywgYmVjYXVzZSB0aGUgZmlybXdhcmUgaXNuJiMzOTt0IHByZXNlbnQsIGBydGw4MjYxeF9md19sb2FkYCByZXR1cm5zIGFuIGVycm9yLCB3aGljaCwgb2YgY291cnNlLCBwcm9wYWdhdGVzIHVwIHRvIGBydGw4MjYxeF9jb25maWdfaW5pdGAuCgpNeSBpbml0aWFsIHRob3VnaHQgaXMgdGhhdCB0aGlzIG1pZ2h0IGJlIGEgcm9hZGJsb2NrIGZvciBmdXp6aW5nLiBIb3dldmVyLCB0aGF0JiMzOTtzIGFzc3VtaW5nIHdlICpuZWVkKiB0aGUgZmlybXdhcmUuIFdhaXQsIFN5emthbGxlciBjYW4gcHJvdmlkZSB0aGUgZmlybXdhcmUgdXNpbmcgYHN5el9tb3VudF9pbWFnZWAgb3Igc29tZXRoaW5nIHNpbWlsYXIsIHJpZ2h0PyBPciwgbWF5YmUgc29tZSBjb2RlIHBhdGhzIGRvbiYjMzk7dCBldmVuIHVzZSB0aGUgZmlybXdhcmUuIEkgbmVlZCB0byBjbGFyaWZ5IHRoYXQuIE9rYXksIEkgdGhpbmsgaWYgU3l6a2FsbGVyIHByb3ZpZGVzIHRoZSBmaWxlLCB0aGVuIHdlIGNhbiBkZWZpbml0ZWx5IGZ1enogYHJlcXVlc3RfZmlybXdhcmVgLiBPdGhlcndpc2UsIHdlIGNhbiBqdXN0IHNheSBpdCYjMzk7cyByZWFjaGFibGUuCgpIb2xkIG9uLCBJIHNlZSBgcHJpdi0mZ3Q7ZndfbmFtZWAgaXMgc2V0LCBhbmQgaXQgdHJpZXMgdG8gbG9hZCB0aGF0LiBBIGZhaWx1cmUgZ2l2ZXMgdXMgYW4gZXJyb3IuIENhbiB3ZSB0aGVuIHJlYWNoIGBnZW5waHlfYzQ1X3BtYV9zb2Z0X3Jlc2V0YD8gSXQmIzM5O3MgZGVmaW5lZCBhcyBgLnNvZnRfcmVzZXQgPSBnZW5waHlfYzQ1X3BtYV9zb2Z0X3Jlc2V0YC4gQWgsIHllcywgYHNvZnRfcmVzZXRgIGlzIGNhbGxlZCBkdXJpbmcgdGhlIFBIWSBpbml0aWFsaXphdGlvbiwgKmJlZm9yZSogYGNvbmZpZ19pbml0YCEgT2theSwgbGV0IG1lIGdvIGNoZWNrIHRoZSBjYWxsIG9yZGVyIGluIGBwaHlfZGV2aWNlLmNgIG9yIGBwaHkuY2AgdG8gYmUgc3VyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDMgMDc6Mzg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7c29mdF9yZXNldCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYz0xMzQxPWludCBwaHlfaW5pdF9odyhzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxuLS1cbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmMtMTM1MC1cbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmM6MTM1MTpcdGlmIChwaHlkZXYtXHUwMDNlZHJ2LVx1MDAzZXNvZnRfcmVzZXQpIHtcbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmM6MTM1MjpcdFx0cmV0ID0gcGh5ZGV2LVx1MDAzZWRydi1cdTAwM2Vzb2Z0X3Jlc2V0KHBoeWRldik7XG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jLTEzNTMtXHRcdGlmIChyZXQgXHUwMDNjIDApXG4tLVxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYy0xMzU1LVxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYzoxMzU2Olx0XHQvKiBzZWUgY29tbWVudCBpbiBnZW5waHlfc29mdF9yZXNldCBmb3IgYW4gZXhwbGFuYXRpb24gKi9cbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmMtMTM1Ny1cdFx0cGh5ZGV2LVx1MDAzZXN1c3BlbmRlZCA9IDA7XG4tLVxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYz0yNjY0PUVYUE9SVF9TWU1CT0woZ2VucGh5X2MzN19yZWFkX3N0YXR1cyk7XG4tLVxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYy0yNjY2LS8qKlxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYzoyNjY3OiAqIGdlbnBoeV9zb2Z0X3Jlc2V0IC0gc29mdHdhcmUgcmVzZXQgdGhlIFBIWSB2aWEgQk1DUl9SRVNFVCBiaXRcbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmMtMjY2OC0gKiBAcGh5ZGV2OiB0YXJnZXQgcGh5X2RldmljZSBzdHJ1Y3Rcbi0tXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jLTI2NzQtICovXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jOjI2NzU6aW50IGdlbnBoeV9zb2Z0X3Jlc2V0KHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jLTI2NzYte1xuLS1cbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmMtMjcwMi19XG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jOjI3MDM6RVhQT1JUX1NZTUJPTChnZW5waHlfc29mdF9yZXNldCk7XG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jLTI3MDQtXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAzIDA3OjM4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDM3MDU5CgkJCQkJCQlvdXRwdXQ6IDM2CgkJCQkJCQl0aG91Z2h0czogMTg3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IENvbmNlcm5zIFJlZ2FyZGluZyB0aGUgUEhZIEluaXRpYWxpemF0aW9uIFNlcXVlbmNlKioKCk9rYXksIHNvIEkmIzM5O20gZm9jdXNpbmcgb24gdGhlIFBIWSBpbml0aWFsaXphdGlvbiBmbG93IGFuZCBJJiMzOTt2ZSBnb3QgYSBjb3VwbGUgb2YgaW1wb3J0YW50IHRoaW5ncyB0byBjb25zaWRlciBoZXJlLiBSaWdodCwgc28gYHNvZnRfcmVzZXRgIGlzIGNhbGxlZCB3aXRoaW4gYHBoeV9pbml0X2h3YCwgd2hpY2ggaGFwcGVucyAqYmVmb3JlKiBgY29uZmlnX2luaXRgLiBBY3R1YWxseSwgd2FpdCwgbGV0IG1lIHJlcGhyYXNlIHRoYXQuLi4gYHBoeV9pbml0X2h3YCBjYWxscyBgc29mdF9yZXNldGAgKmJlZm9yZSogYGNvbmZpZ19pbml0YC4gVGhhdCYjMzk7cyBjcml0aWNhbC4gVGhhdCBtZWFucyB0aGF0IGBnZW5waHlfYzQ1X3BtYV9zb2Z0X3Jlc2V0YCBpcyBnb2luZyB0byBleGVjdXRlIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciB0aGUgc3Vic2VxdWVudCBmaXJtd2FyZSBsb2FkaW5nIGlzIHN1Y2Nlc3NmdWwgb3Igbm90LiBXZSBuZWVkIHRvIGJlIGF3YXJlIG9mIHRoaXMgYW5kIGVuc3VyZSB0aGF0JiMzOTtzIHRoZSBpbnRlbmRlZCBiZWhhdmlvdXIuCgpGdXJ0aGVybW9yZSwgSSYjMzk7bSBub3RpbmcgdGhhdCBgZ2VucGh5X2M0NV9hbl9zZXR1cF9tYXN0ZXJfc2xhdmVgIGFuZCBgZ2VucGh5X2M0NV9yZWFkX21hc3Rlcl9zbGF2ZWAgYXJlIGxpbmtlZCB0byBgZ2VucGh5X2M0NV9jb25maWdfYW5lZ2AgYW5kIGBnZW5waHlfYzQ1X3JlYWRfc3RhdHVzYCByZXNwZWN0aXZlbHkuIFRob3NlIGZ1bmN0aW9ucyBhcmUgdHJpZ2dlcmVkIHdoZW4gdGhlIG5ldHdvcmsgaW50ZXJmYWNlIGNvbWVzIG9ubGluZS4gU28sIHdoYXQgaGFwcGVucyBpZiBgY29uZmlnX2luaXRgIHN1YnNlcXVlbnRseSBmYWlscz8gRG9lcyB0aGUgUEhZIGRldmljZSBnZXQgcHJvcGVybHkgcmVnaXN0ZXJlZCB3aXRoIHRoZSBzeXN0ZW0/IEkgbmVlZCB0byBsb29rIGludG8gdGhpcyBtb3JlIGRlZXBseS4gSSBzaG91bGQgcHJvYmFibHkgYmUgY2hlY2tpbmcgYHBoeV9kZXZpY2VfYXR0YWNoYCBvciBgcGh5X2F0dGFjaF9kaXJlY3RgIHRvIHNlZSBob3cgdGhhdCBpbnRlcmFjdHMgd2l0aCBhIHBvdGVudGlhbCBgY29uZmlnX2luaXRgIGZhaWx1cmUuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoYXQgY2FsbCBmbG93IGluIG1vcmUgZGV0YWlsLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMyAwNzozODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtwaHlfaW5pdF9odyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYz0zNzg9c3RhdGljIF9fbWF5YmVfdW51c2VkIGludCBtZGlvX2J1c19waHlfcmVzdW1lKHN0cnVjdCBkZXZpY2UgKmRldilcbi0tXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jLTM5OC1cbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmM6Mzk5Olx0cmV0ID0gcGh5X2luaXRfaHcocGh5ZGV2KTtcbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmMtNDAwLVx0aWYgKHJldCBcdTAwM2MgMClcbi0tXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jPTEzMDU9RVhQT1JUX1NZTUJPTChwaHlfZGlzY29ubmVjdCk7XG4tLVxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYy0xMzIxLSAqICAgZWZmb3J0IHRvIHN1cHBvcnQgc3VjaCBicm9rZW4gUEhZcywgdGhpcyBmdW5jdGlvbiBpcyBzZXBhcmF0ZSBmcm9tIHRoZVxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYzoxMzIyOiAqICAgc3RhbmRhcmQgcGh5X2luaXRfaHcoKSB3aGljaCB3aWxsIHplcm8gYWxsIHRoZSBvdGhlciBiaXRzIGluIHRoZSBCTUNSXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jLTEzMjMtICogICBhbmQgcmVhcHBseSBhbGwgZHJpdmVyLXNwZWNpZmljIGFuZCBib2FyZC1zcGVjaWZpYyBmaXh1cHMuXG4tLVxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYz0xMzI1PXN0YXRpYyBpbnQgcGh5X3BvbGxfcmVzZXQoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcbi0tXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jLTEzNDAtXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jOjEzNDE6aW50IHBoeV9pbml0X2h3KHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jLTEzNDIte1xuLS1cbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmMtMTM4Ny19XG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jOjEzODg6RVhQT1JUX1NZTUJPTChwaHlfaW5pdF9odyk7XG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jLTEzODktXG4tLVxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYz0xNzUyPWludCBwaHlfYXR0YWNoX2RpcmVjdChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2LFxuLS1cbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmMtMTg3NC1cdCAqL1xuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYzoxODc1Olx0ZXJyID0gcGh5X2luaXRfaHcocGh5ZGV2KTtcbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmMtMTg3Ni1cdGlmIChlcnIpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAzIDA3OjM4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDM4MTQxCgkJCQkJCQlvdXRwdXQ6IDM1CgkJCQkJCQl0aG91Z2h0czogNjc5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkZ1enppbmcgdGhlIFJUTDgyNjF4IFBIWSBGaXJtd2FyZSoqCgpPa2F5LCBzbyBoZXJlJiMzOTtzIHRoZSBkZWFsOiBgcGh5X2luaXRfaHdgIGdldHMgY2FsbGVkIHdpdGhpbiBgcGh5X2F0dGFjaF9kaXJlY3RgLiBJZiBgcGh5X2luaXRfaHdgIGJvbWJzIG91dCDigJMgbWF5YmUgYmVjYXVzZSBgY29uZmlnX2luaXRgIGNob2tlcyBvbiBtaXNzaW5nIGZpcm13YXJlIOKAkyB0aGVuIGBwaHlfYXR0YWNoX2RpcmVjdGAgZ29lcyBkb3duIHdpdGggaXQsIGFuZCB0aGF0IG1lYW5zIHRoZSBuZXR3b3JrIGRyaXZlciBmYWlscyB0byBvcGVuLiBCdXQsIHRoZXJlJiMzOTtzIGEgc2F2aW5nIGdyYWNlOiBTeXprYWxsZXIhIFdlIGNhbiBhY3R1YWxseSBsZXZlcmFnZSBTeXprYWxsZXIgdG8gaW5qZWN0IHRoYXQgbWlzc2luZyBmaXJtd2FyZS4gSXQgaGFzIHRoZSBjYXBhYmlsaXR5IHRvIHByb3ZpZGUgdGhlIGZpcm13YXJlIGZpbGVzIHdoZW4gcmVxdWVzdGVkLgoKTG9va2luZyBjbG9zZXIsIHRoZSBmaXJtd2FyZSBsb2FkaW5nIG9ubHkgaGFwcGVucyBpZiBgcHJpdi0mZ3Q7ZndfbmFtZWAgaXMgc2V0LiBOb3csIHdoZXJlIGlzIGBwcml2LSZndDtmd19uYW1lYCBzZXQ/IEFoLCBpbiBgcnRsODI2MXhfcHJvYmVgLCBidXQgb25seSBpZiBgc3ViX3BoeV9pZGAgaXMgZXF1YWwgdG8gYFJUTDgyNjFDX0NFX01PREVMYC4gSWYgYHN1Yl9waHlfaWRgIGlzIGFueXRoaW5nIGVsc2UsIGBydGw4MjYxeF9wcm9iZWAgcmV0dXJucyBgLUVOT0RFVmAuIEFuZCBob3cgZG8gd2UgZGV0ZXJtaW5lIHRoZSB2YWx1ZSBvZiBgc3ViX3BoeV9pZGA/IGBydGw4MjYxeF9wcm9iZWAgcmVhZHMgYFJUTF84MjYxWF9TVUJfUEhZX0lEX0FERFJgIGZyb20gYE1ESU9fTU1EX1ZFTkQyYC4KClNvIGhlcmXigJlzIHRoZSBpbnRlcmVzdGluZyBwYXJ0OiBpZiBvdXIgbW9jayBVU0IgZGV2aWNlIHRlbGxzIGl0IHRoYXQgdGhlIGBzdWJfcGh5X2lkYCBpcyBgUlRMODI2MUNfQ0VfTU9ERUxgICh3aGljaCBpcyBjb252ZW5pZW50bHkgYDB4MDBgKSwgaXQgc2V0cyBgcHJpdi0mZ3Q7ZndfbmFtZWAgdG8gYFJUTDgyNjFDX0NFX0ZXX05BTUVgLiBUaGF0JiMzOTtzIG91ciB0cmlnZ2VyISBOb3csIGlmIHdlIHdhbnQgdG8gZnV6eiB0aGUgZmlybXdhcmUgZXhlY3V0aW9uLCBTeXprYWxsZXIgY2FuIHByb3ZpZGUgdGhlIGZpcm13YXJlLiBUaGUgZmlybXdhcmUgZm9ybWF0IGlzIHBhcnNlZCBpbiBgcnRsODI2MXhfdmVyaWZ5X2Zpcm13YXJlYCBhbmQgdGhlbiBleGVjdXRlZCBpbiBgcnRsODI2MXhfZndfZXhlY3V0ZV9lbnRyeWAuCgpUaGlzIGlzIGdvbGQhIFRoaXMgaXMgKnRleHRib29rKiBmdXp6aW5nIHRlcnJpdG9yeS4gVGhpcyBjb2RlIGlzIGZ1bmN0aW9uYWwsIGFuZCBpdCBzaG91bGQgYmUgZnV6emVkISBJdCByZWFkcyBhbiBleHRlcm5hbCBmaWxlICh0aGUgZmlybXdhcmUpIGFuZCB0aGVuIGludGVyYWN0cyB3aXRoIGhhcmR3YXJlICh0aGUgTURJTyBidXMpLCBtYWtpbmcgaXQgYSBncmVhdCB0YXJnZXQuIFN5emthbGxlciBjYW4gZ2VuZXJhdGUgYXJiaXRyYXJ5IGZpcm13YXJlIGZpbGVzLCB3aGljaCBjYW4gdGhlbiB0cmlnZ2VyIHRoaXMgY29kZS4gVGhpcyBpcyBkZWZpbml0ZWx5IGEgcHJvbWlzaW5nIGF2ZW51ZSBmb3IgZnV6emluZywgYmVjYXVzZSBpdOKAmXMgYSBmaWxlIHBhcnNpbmcgYW5kIGhhcmR3YXJlIGludGVyYWN0aW9uIHNlcXVlbmNlLgoKQWxyaWdodCwgbGV0JiMzOTtzIGxpc3QgdGhlIGZ1bmN0aW9ucywganVzdCB0byBiZSBzdXJlIHdlJiMzOTt2ZSBnb3QgYWxsIHRoZSBwaWVjZXM6IGBnZW5waHlfYzQ1X3BtYV9zb2Z0X3Jlc2V0YCwgYGdlbnBoeV9jNDVfYW5fc2V0dXBfbWFzdGVyX3NsYXZlYCwgYGdlbnBoeV9jNDVfcmVhZF9tYXN0ZXJfc2xhdmVgLCBgcnRsODI2MXhfcHJvYmVgLCBgcnRsODI2MXhfZ2V0X2ZlYXR1cmVzYCwgYHJ0bDgyNjF4X3JlYWRfc3RhdHVzYCwgYHJ0bDgyNjF4X3ZlcmlmeV9maXJtd2FyZWAsIGBydGw4MjYxeF9md19leGVjdXRlX2VudHJ5YCwgYHJ0bDgyNjF4X2Z3X2xvYWRgLCBgcnRsODI2MXhfY29uZmlnX2ludHJgLCBgcnRsODI2MXhfaGFuZGxlX2ludGVycnVwdGAsIGBydGw4MjYxeF9jb25maWdfYW5lZ2AsIGFuZCBgcnRsODI2MXhfY29uZmlnX2luaXRgLiBZZXAsIHRob3NlIGFsbCBsb29rIHJlYWNoYWJsZS4KClRoZSBvbmx5IGNvbmZpZyBuZWVkZWQgc2VlbXMgdG8gYmUgYFJFQUxURUtfUEhZYCwgd2hpY2ggY29tcGlsZXMgYGRyaXZlcnMvbmV0L3BoeS9yZWFsdGVrL3JlYWx0ZWtfbWFpbi5jYC4KClBlcmZlY3QuIExldCYjMzk7cyBtYWtlIHN1cmUgYFJFQUxURUtfUEhZYCBpcyB0aGUgb25seSBjb25maWcgcmVxdWlyZWQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAzIDA3OjM4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3JlYWx0ZWtfbWFpbi5vJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvcGh5L3JlYWx0ZWsvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3BoeS9yZWFsdGVrL01ha2VmaWxlLTEtIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxuZHJpdmVycy9uZXQvcGh5L3JlYWx0ZWsvTWFrZWZpbGU6MjpyZWFsdGVrLXlcdFx0XHQmIzQzOz0gcmVhbHRla19tYWluLm9cbmRyaXZlcnMvbmV0L3BoeS9yZWFsdGVrL01ha2VmaWxlLTMtcmVhbHRlay0kKENPTkZJR19SRUFMVEVLX1BIWV9IV01PTikgJiM0Mzs9IHJlYWx0ZWtfaHdtb24ub1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMyAwNzozODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzOTcyMAoJCQkJCQkJb3V0cHV0OiAyOQoJCQkJCQkJdGhvdWdodHM6IDQwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkludmVzdGlnYXRpbmcgYSBSZWFsdGVrIFBIWSBJc3N1ZSoqCgpSaWdodCwgbGV0JiMzOTtzIHNlZS4gVGhlIGlkZW50aWZpZXIgYHJlYWx0ZWsteWAuLi4gdGhhdCBpbW1lZGlhdGVseSBzdWdnZXN0cyBpdCYjMzk7cyBhIGNvbXBvbmVudCBvZiB0aGUgYHJlYWx0ZWtgIG1vZHVsZSwgd2hpY2ggaXMgYSBrZXkgbGVhZC4gSSYjMzk7bGwgbmVlZCB0byBjb25maXJtIHRoYXQgc3VzcGljaW9uIGFuZCB1bmRlcnN0YW5kIHdoZXJlIHRvIGZpbmQgcmVsYXRlZCBjb25maWd1cmF0aW9uLiBUaGVyZWZvcmUsIG15IG5leHQgc3RlcCBpcyB0byBleGFtaW5lIHRoZSBgZHJpdmVycy9uZXQvcGh5L01ha2VmaWxlYC4gVGhhdCYjMzk7cyB3aGVyZSB0aGUgUEhZIGRyaXZlciBjb25maWd1cmF0aW9ucyB1c3VhbGx5IHJlc2lkZS4gSSYjMzk7bSBleHBlY3RpbmcgdG8gZmluZCByZWZlcmVuY2VzIHRvIHRoZSBgcmVhbHRla2AgY29tcG9uZW50IHRoZXJlLCB3aGljaCB3aWxsIGNvbmZpcm0gbXkgaW5pdGlhbCBoeXBvdGhlc2lzIGFuZCBwb2ludCBtZSB0b3dhcmRzIHRoZSByZWxldmFudCBidWlsZCBhbmQgaW5jbHVkZSBkaXJlY3RpdmVzLiBLbm93aW5nIHRoZSBzdHJ1Y3R1cmUgb2YgdGhlIGBNYWtlZmlsZWAsIEkgc2hvdWxkIHF1aWNrbHkgYmUgYWJsZSB0byBzZWUgdGhlIGJ1aWxkIG9wdGlvbnMgYW5kIGFzc29jaWF0ZWQgZGVwZW5kZW5jaWVzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMyAwNzozODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtyZWFsdGVrJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvcGh5L01ha2VmaWxlJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3BoeS9NYWtlZmlsZT05ND1vYmotJChDT05GSUdfUVNFTUlfUEhZKVx0XHQmIzQzOz0gcXNlbWkub1xuZHJpdmVycy9uZXQvcGh5L01ha2VmaWxlOjk1Om9iai0kKENPTkZJR19SRUFMVEVLX1BIWSlcdCYjNDM7PSByZWFsdGVrL1xuZHJpdmVycy9uZXQvcGh5L01ha2VmaWxlLTk2LW9iai0kKENPTkZJR19SRU5FU0FTX1BIWSlcdCYjNDM7PSB1UEQ2MDYyMC5vXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAzIDA3OjM4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQwMDU5CgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogNjAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgc3VtbWFyeSwgdGFpbG9yZWQgYXMgaWYgSSYjMzk7bSBhbiBleHBlcnQgaW4gdGhpcyBmaWVsZDoKCioqS2VybmVsIENvbmZpZ3VyYXRpb24gQW5hbHlzaXM6IFJlYWx0ZWsgUEhZKioKCkFscmlnaHQsIGNvbmZpcm1lZCwgYENPTkZJR19SRUFMVEVLX1BIWWAgaXMgaW5kZWVkIHRoZSBjb25maWd1cmF0aW9uIGl0ZW0gd2UmIzM5O3JlIGxvb2tpbmcgYXQuIEdvb2Qgc3RhcnQuIE5vdywgdGhlIG5leHQgbG9naWNhbCBzdGVwIGlzIHRvIHF1aWNrbHkgZG91YmxlLWNoZWNrIGlmIHRoZXJlIGFyZSBhbnkgKm90aGVyKiByZWxldmFudCBjb25maWdzIHRoYXQgbWlnaHQgYmUgaW52b2x2ZWQgb3IgaW1wYWN0IHRoaXMgb25lLCBqdXN0IHRvIGJlIHRob3JvdWdoLiBXZSBkb24mIzM5O3Qgd2FudCB0byBtaXNzIGFueXRoaW5nIHN1YnRsZS4KClRoZSBwYXRjaCBpdHNlbGYgcG9pbnRzIGRpcmVjdGx5IHRvIGBkcml2ZXJzL25ldC9waHkvcGh5LWM0NS5jYC4gVGhpcyBzdWdnZXN0cyBhIHBvdGVudGlhbCBjb25kaXRpb25hbCBjb21waWxhdGlvbiBzY2VuYXJpbywgc28gdGhhdCYjMzk7cyB0aGUgYW5nbGUgSSYjMzk7bSBmb2N1c2luZyBvbiBub3cuIFNwZWNpZmljYWxseSwgSSBuZWVkIHRvIHZlcmlmeSAqaG93KiBgcGh5LWM0NS5jYCBpcyBjb21waWxlZC4gSXMgaXQgZGlyZWN0bHkgdGllZCB0byBgQ09ORklHX1JFQUxURUtfUEhZYCwgb3IgYXJlIHRoZXJlIG90aGVyIGRlcGVuZGVuY2llcyBvciBzdXJyb3VuZGluZyBjb25maWdzIHRoYXQgY29udHJvbCBpdHMgaW5jbHVzaW9uPyBUaGF0JiMzOTtzIHRoZSBrZXkgcXVlc3Rpb24gdG8gZmlndXJlIG91dCBpZiB0aGVyZSBpcyBhbnl0aGluZyB0aGF0IGNvdWxkIGltcGFjdCBhIHVzZXImIzM5O3MgZGV2aWNlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMyAwNzozODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtwaHktYzQ1Lm8mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9waHkvTWFrZWZpbGUmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvcGh5L01ha2VmaWxlLTMtXG5kcml2ZXJzL25ldC9waHkvTWFrZWZpbGU6NDpsaWJwaHkteVx0XHRcdDo9IHBoeS5vIHBoeS1jNDUubyBwaHktY29yZS5vIHBoeV9kZXZpY2UubyBcXFxuZHJpdmVycy9uZXQvcGh5L01ha2VmaWxlLTUtXHRcdFx0XHQgICBsaW5rbW9kZS5vIHBoeV9saW5rX3RvcG9sb2d5Lm8gXFxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDMgMDc6Mzg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDA0NTYKCQkJCQkJCW91dHB1dDogMzA2CgkJCQkJCQl0aG91Z2h0czogOTY2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKlJlZmluaW5nIHRoZSBUYXJnZXQgZm9yIEZ1enppbmcgdGhlIFJlYWx0ZWsgUlRMODI2MUMgUEhZIFN1cHBvcnQqKgoKT2theSwgc28gSSYjMzk7bSB0aGlua2luZyBhYm91dCBob3cgdG8gZWZmZWN0aXZlbHkgdGFyZ2V0IHRoaXMgbmV3IFJlYWx0ZWsgUlRMODI2MUMgUEhZIHN1cHBvcnQgaW4gdGhlIGtlcm5lbCBmb3IgZnV6emluZy4gIFRoaXMgaXNuJiMzOTt0IGp1c3QgYSBzaW1wbGUgZHJpdmVyOyBpdCBpbmNsdWRlcyBmaXJtd2FyZSBsb2FkaW5nIGFuZCBDbGF1c2UgNDUgbWFzdGVyL3NsYXZlIGNvbmZpZ3VyYXRpb24sIHdoaWNoIGltbWVkaWF0ZWx5IG1ha2VzIGl0IG1vcmUgaW50ZXJlc3RpbmcgZnJvbSBhIHNlY3VyaXR5IHBlcnNwZWN0aXZlLCBlc3BlY2lhbGx5IHRoZSBmaXJtd2FyZSBoYW5kbGluZy4gIEl0JiMzOTtzIHBhcnQgb2YgYGxpYnBoeWAsIGFuZCB0aGF0JiMzOTtzIGNvbmRpdGlvbmFsbHkgY29tcGlsZWQgYmFzZWQgb24gYENPTkZJR19QSFlMSUJgLCB3aGljaCBpcyBlbmFibGVkIGJ5IGRlZmF1bHQgZm9yIG5ldHdvcmtpbmcsIHdoaWNoIGlzIGdvb2QuIFRoYXQgc2hvdWxkIHNpbXBsaWZ5IHRoaW5ncy4KClNvLCB0aGUga2V5IGNvbmZpZ3VyYXRpb24gb3B0aW9uIGlzIGBSRUFMVEVLX1BIWWAuIFRoYXQmIzM5O3MgdGhlIG9uZSB3ZSBuZWVkLgoKTm93LCBsZXQmIzM5O3MgbmFpbCBkb3duIHRoZSBzcGVjaWZpYyBmdW5jdGlvbnMgd2Ugc2hvdWxkIGZvY3VzIG9uLiAgSSBpbml0aWFsbHkgbGlzdGVkIHRoZXNlOiBgcnRsODI2MXhfcHJvYmVgLCBgcnRsODI2MXhfZ2V0X2ZlYXR1cmVzYCwgYHJ0bDgyNjF4X3JlYWRfc3RhdHVzYCwgYHJ0bDgyNjF4X3ZlcmlmeV9maXJtd2FyZWAsIGBydGw4MjYxeF9md19leGVjdXRlX2VudHJ5YCwgYHJ0bDgyNjF4X2Z3X2xvYWRgLCBgcnRsODI2MXhfY29uZmlnX2ludHJgLCBgcnRsODI2MXhfaGFuZGxlX2ludGVycnVwdGAsIGBydGw4MjYxeF9jb25maWdfYW5lZ2AsIGBydGw4MjYxeF9jb25maWdfaW5pdGAsIGBnZW5waHlfYzQ1X3BtYV9zb2Z0X3Jlc2V0YCwgYGdlbnBoeV9jNDVfYW5fc2V0dXBfbWFzdGVyX3NsYXZlYCwgYW5kIGBnZW5waHlfYzQ1X3JlYWRfbWFzdGVyX3NsYXZlYC4KCldhaXQsICBgcnRsODI2MXhfaGFuZGxlX2ludGVycnVwdGAgaXMgYW4gaW50ZXJydXB0IGhhbmRsZXIuIEl0IGlzIHRyaWdnZXJlZCBvbmx5IGlmIGludGVycnVwdHMgYXJlIHN1cHBvcnRlZCBhbmQgZW5hYmxlZCBvbiB0aGUgUEhZLiAgU3l6a2FsbGVyIG1pZ2h0IGJlIGFibGUgdG8gdHJpZ2dlciB0aG9zZSBpZiB0aGUgdmlydHVhbCBNRElPIGJ1cyBvciBVU0IgZGV2aWNlIGVtdWxhdGVzIHRoZSBpbnRlcnJ1cHQgc3RhdHVzIHJlZ2lzdGVyIGFuZCBpbnRlcnJ1cHQgbGluZS4gSSYjMzk7bSBub3QgZW50aXJlbHkgc3VyZSBob3cgZWFzeSB0aGF0IHdpbGwgYmUgd2l0aG91dCBhIG1vcmUgc29waGlzdGljYXRlZCBtb2NrIGRldmljZS4gIFRoZSBvdGhlciBmdW5jdGlvbnMgYXJlIGRlZmluaXRlbHkgcmVhY2hhYmxlLCB0aG91Z2guCgpTbywgSSBzaG91bGQgcmVmaW5lIHRoaXMgbGlzdC4gSSYjMzk7bGwgZGVmaW5pdGVseSBrZWVwOiBgcnRsODI2MXhfZndfZXhlY3V0ZV9lbnRyeWAsIGBydGw4MjYxeF92ZXJpZnlfZmlybXdhcmVgLCBgcnRsODI2MXhfZndfbG9hZGAsIGBydGw4MjYxeF9jb25maWdfaW5pdGAsIGBydGw4MjYxeF9wcm9iZWAsIGBydGw4MjYxeF9jb25maWdfYW5lZ2AsIGFuZCBgcnRsODI2MXhfcmVhZF9zdGF0dXNgLiBUaGVuIEkmIzM5O2xsIGFkZCBgZ2VucGh5X2M0NV9wbWFfc29mdF9yZXNldGAsIGBnZW5waHlfYzQ1X2FuX3NldHVwX21hc3Rlcl9zbGF2ZWAsIGFuZCBgZ2VucGh5X2M0NV9yZWFkX21hc3Rlcl9zbGF2ZWAgYmVjYXVzZSB0aGV5JiMzOTtyZSBwYXJ0IG9mIHRoaXMgZmVhdHVyZS4KCkFyZSB0aGVyZSBhbnkgb3RoZXJzPyBZZXMhIEkgc2hvdWxkIGFsc28gaW5jbHVkZSBgcnRsODI2MXhfZ2V0X2ZlYXR1cmVzYCBhbmQgYHJ0bDgyNjF4X2NvbmZpZ19pbnRyYCwgYW5kIGBydGw4MjYxeF9oYW5kbGVfaW50ZXJydXB0YC4gSSYjMzk7bGwgaW5jbHVkZSB0aGVtIGFsbC4gVGhleSBhcmUgc3BlY2lmaWMgdG8gdGhpcyBuZXcgZmVhdHVyZSBhbmQgbm90IGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zLgoKSGFuZyBvbi4gSSByZWNhbGwgdGhhdCBgZ2VucGh5X2M0NV9hbl9zZXR1cF9tYXN0ZXJfc2xhdmVgIGFuZCBgZ2VucGh5X2M0NV9yZWFkX21hc3Rlcl9zbGF2ZWAgYXJlIGFjdHVhbGx5ICpzdGF0aWMqIGZ1bmN0aW9ucyBpbiBgcGh5LWM0NS5jYC4gIFRoZSBxdWVzdGlvbiBpczogQ2FuIHN5emthbGxlciBldmVuIGRlYWwgd2l0aCBzdGF0aWMgZnVuY3Rpb25zIGluIGBGb2N1c1N5bWJvbHNgPyBZZXMsIGl0IGNhbiwgdGhhdCYjMzk7cyBmaW5lLgoKTm93LCB0byBiZSBjb21wbGV0ZWx5IHN1cmUsIGxldCYjMzk7cyBkb3VibGUtY2hlY2sgdGhhdCBgUkVBTFRFS19QSFlgIGlzIGEgdHJpc3RhdGUgY29uZmlnLCBub3QgYSBib29sLiAgWWVwLCBnb29kLiBUaGF0JiMzOTtzIHRoZSBvbmx5IG9uZSB3ZSAqbmVlZCogdG8gZW5hYmxlLgoKT2theSwgbGV0JiMzOTtzIHN0ZXAgYmFjayBhbmQgcmV2aWV3LiBUaGUgbmV3IGNvZGUgc3VwcG9ydHMgdGhlIFJlYWx0ZWsgUlRMODI2MUMgMTBHYnBzIFBIWSwgaW5jbHVkaW5nIGZpcm13YXJlIGxvYWRpbmcgYW5kIHBhcnNpbmcsIGFuZCBDbGF1c2UgNDUgbWFzdGVyL3NsYXZlIGNvbmZpZ3VyYXRpb24uIFRoaXMgY29kZSBpcyByZWFjaGFibGUgdGhyb3VnaCBlbXVsYXRpb24sIGJ5LCBmb3IgaW5zdGFuY2UsIGVtdWxhdGluZyBhIFVTQiBuZXR3b3JrIGFkYXB0ZXIgdGhhdCByZWdpc3RlcnMgYW4gTURJTyBidXMgYW5kIHJlc3BvbmRzIHdpdGggdGhlIFJUTDgyNjFDIFBIWSBJRC4gRmlybXdhcmUgcGFyc2luZyAoYHJ0bDgyNjF4X3ZlcmlmeV9maXJtd2FyZWAsIGBydGw4MjYxeF9md19leGVjdXRlX2VudHJ5YCkgaXMgd2hlcmUgdGhlIHJlYWwgZnV6emluZyBpbnRlcmVzdCBsaWVzIHNpbmNlIGl0IHByb2Nlc3NlcyBleHRlcm5hbCBkYXRhLgoKRG8gSSBuZWVkIHRvIHNwZWNpZnkgZ2VuZXJpYyBjb25maWdzIGxpa2UgYENPTkZJR19VU0JfTkVUX0RSSVZFUlNgIG9yIGdlbmVyaWMgVVNCIG9yIE5ldCBjb25maWd1cmF0aW9ucz8gTm8sIG5vdCBzcGVjaWZpY2FsbHkuIFdlIG9ubHkgbmVlZCB0aGUgb25lIGZvciB0aGUgbmV3IGNvZGUuCgpGaW5hbGx5LCBpcyB0aGVyZSBhbnl0aGluZyBlbHNlPyAgTGV0IG1lIHNlZS4uLiBJcyBgUlRMODI2MUNfQ0VfRldfTkFNRWAgdXNlZCBhbnl3aGVyZSBlbHNlPyBObywgaXQmIzM5O3MgZGVmaW5lZCBpbiB0aGUgcGF0Y2guIExldCYjMzk7cyBjaGVjayBgZ2VuCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDMgMDc6Mzk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1JFQUxURUtfUEhZJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7cnRsODI2MXhfcHJvYmUmIzM0OywKICAgICYjMzQ7cnRsODI2MXhfZ2V0X2ZlYXR1cmVzJiMzNDssCiAgICAmIzM0O3J0bDgyNjF4X3JlYWRfc3RhdHVzJiMzNDssCiAgICAmIzM0O3J0bDgyNjF4X3ZlcmlmeV9maXJtd2FyZSYjMzQ7LAogICAgJiMzNDtydGw4MjYxeF9md19leGVjdXRlX2VudHJ5JiMzNDssCiAgICAmIzM0O3J0bDgyNjF4X2Z3X2xvYWQmIzM0OywKICAgICYjMzQ7cnRsODI2MXhfY29uZmlnX2ludHImIzM0OywKICAgICYjMzQ7cnRsODI2MXhfaGFuZGxlX2ludGVycnVwdCYjMzQ7LAogICAgJiMzNDtydGw4MjYxeF9jb25maWdfYW5lZyYjMzQ7LAogICAgJiMzNDtydGw4MjYxeF9jb25maWdfaW5pdCYjMzQ7LAogICAgJiMzNDtnZW5waHlfYzQ1X3BtYV9zb2Z0X3Jlc2V0JiMzNDssCiAgICAmIzM0O2dlbnBoeV9jNDVfYW5fc2V0dXBfbWFzdGVyX3NsYXZlJiMzNDssCiAgICAmIzM0O2dlbnBoeV9jNDVfcmVhZF9tYXN0ZXJfc2xhdmUmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcyBzdXBwb3J0IGZvciB0aGUgUmVhbHRlayBSVEw4MjYxQyAxMEdicHMgUEhZLCBpbmNsdWRpbmcgZmlybXdhcmUgbG9hZGluZyBhbmQgcGFyc2luZywgYW5kIG5ldyBDbGF1c2UgNDUgbWFzdGVyL3NsYXZlIGNvbmZpZ3VyYXRpb24gZnVuY3Rpb25zLiBUaGlzIGNvZGUgaXMgcmVhY2hhYmxlIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBieSBlbXVsYXRpbmcgYSBVU0IgbmV0d29yayBhZGFwdGVyIHRoYXQgcmVnaXN0ZXJzIGFuIE1ESU8gYnVzIGFuZCByZXNwb25kcyB3aXRoIHRoZSBSVEw4MjYxQyBQSFkgSUQuIFRoZSBmaXJtd2FyZSBwYXJzaW5nIGxvZ2ljIGlzIHBhcnRpY3VsYXJseSBpbnRlcmVzdGluZyBmb3IgZnV6emluZyBhcyBpdCBwcm9jZXNzZXMgZXh0ZXJuYWwgZGF0YS4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7UkVBTFRFS19QSFkmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtydGw4MjYxeF9wcm9iZSYjMzQ7LAogICAgJiMzNDtydGw4MjYxeF9nZXRfZmVhdHVyZXMmIzM0OywKICAgICYjMzQ7cnRsODI2MXhfcmVhZF9zdGF0dXMmIzM0OywKICAgICYjMzQ7cnRsODI2MXhfdmVyaWZ5X2Zpcm13YXJlJiMzNDssCiAgICAmIzM0O3J0bDgyNjF4X2Z3X2V4ZWN1dGVfZW50cnkmIzM0OywKICAgICYjMzQ7cnRsODI2MXhfZndfbG9hZCYjMzQ7LAogICAgJiMzNDtydGw4MjYxeF9jb25maWdfaW50ciYjMzQ7LAogICAgJiMzNDtydGw4MjYxeF9oYW5kbGVfaW50ZXJydXB0JiMzNDssCiAgICAmIzM0O3J0bDgyNjF4X2NvbmZpZ19hbmVnJiMzNDssCiAgICAmIzM0O3J0bDgyNjF4X2NvbmZpZ19pbml0JiMzNDssCiAgICAmIzM0O2dlbnBoeV9jNDVfcG1hX3NvZnRfcmVzZXQmIzM0OywKICAgICYjMzQ7Z2VucGh5X2M0NV9hbl9zZXR1cF9tYXN0ZXJfc2xhdmUmIzM0OywKICAgICYjMzQ7Z2VucGh5X2M0NV9yZWFkX21hc3Rlcl9zbGF2ZSYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRzIHN1cHBvcnQgZm9yIHRoZSBSZWFsdGVrIFJUTDgyNjFDIDEwR2JwcyBQSFksIGluY2x1ZGluZyBmaXJtd2FyZSBsb2FkaW5nIGFuZCBwYXJzaW5nLCBhbmQgbmV3IENsYXVzZSA0NSBtYXN0ZXIvc2xhdmUgY29uZmlndXJhdGlvbiBmdW5jdGlvbnMuIFRoaXMgY29kZSBpcyByZWFjaGFibGUgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGJ5IGVtdWxhdGluZyBhIFVTQiBuZXR3b3JrIGFkYXB0ZXIgdGhhdCByZWdpc3RlcnMgYW4gTURJTyBidXMgYW5kIHJlc3BvbmRzIHdpdGggdGhlIFJUTDgyNjFDIFBIWSBJRC4gVGhlIGZpcm13YXJlIHBhcnNpbmcgbG9naWMgaXMgcGFydGljdWxhcmx5IGludGVyZXN0aW5nIGZvciBmdXp6aW5nIGFzIGl0IHByb2Nlc3NlcyBleHRlcm5hbCBkYXRhLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDctMDNUMDc6MzU6MDUuOTI5ODI3NjY4WiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjQ3NjI5Njg1NzYzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIlJFQUxURUtfUEhZXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwicnRsODI2MXhfcHJvYmVcIixcbiAgICBcInJ0bDgyNjF4X2dldF9mZWF0dXJlc1wiLFxuICAgIFwicnRsODI2MXhfcmVhZF9zdGF0dXNcIixcbiAgICBcInJ0bDgyNjF4X3ZlcmlmeV9maXJtd2FyZVwiLFxuICAgIFwicnRsODI2MXhfZndfZXhlY3V0ZV9lbnRyeVwiLFxuICAgIFwicnRsODI2MXhfZndfbG9hZFwiLFxuICAgIFwicnRsODI2MXhfY29uZmlnX2ludHJcIixcbiAgICBcInJ0bDgyNjF4X2hhbmRsZV9pbnRlcnJ1cHRcIixcbiAgICBcInJ0bDgyNjF4X2NvbmZpZ19hbmVnXCIsXG4gICAgXCJydGw4MjYxeF9jb25maWdfaW5pdFwiLFxuICAgIFwiZ2VucGh5X2M0NV9wbWFfc29mdF9yZXNldFwiLFxuICAgIFwiZ2VucGh5X2M0NV9hbl9zZXR1cF9tYXN0ZXJfc2xhdmVcIixcbiAgICBcImdlbnBoeV9jNDVfcmVhZF9tYXN0ZXJfc2xhdmVcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRzIHN1cHBvcnQgZm9yIHRoZSBSZWFsdGVrIFJUTDgyNjFDIDEwR2JwcyBQSFksIGluY2x1ZGluZyBmaXJtd2FyZSBsb2FkaW5nIGFuZCBwYXJzaW5nLCBhbmQgbmV3IENsYXVzZSA0NSBtYXN0ZXIvc2xhdmUgY29uZmlndXJhdGlvbiBmdW5jdGlvbnMuIFRoaXMgY29kZSBpcyByZWFjaGFibGUgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGJ5IGVtdWxhdGluZyBhIFVTQiBuZXR3b3JrIGFkYXB0ZXIgdGhhdCByZWdpc3RlcnMgYW4gTURJTyBidXMgYW5kIHJlc3BvbmRzIHdpdGggdGhlIFJUTDgyNjFDIFBIWSBJRC4gVGhlIGZpcm13YXJlIHBhcnNpbmcgbG9naWMgaXMgcGFydGljdWxhcmx5IGludGVyZXN0aW5nIGZvciBmdXp6aW5nIGFzIGl0IHByb2Nlc3NlcyBleHRlcm5hbCBkYXRhLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wM1QwNzozNTowNS45Mjk4MzUyNzhaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjYzNTI4MDM0NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IDA2MWQzZjczMTRkNGYyYjAyNmVhNTEwYmY4MTFhZWYyYjVhNzlmZWVcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIEZyaSBKdWwgMyAwNzozNTowNCAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9waHkvcGh5LWM0NS5jIGIvZHJpdmVycy9uZXQvcGh5L3BoeS1jNDUuY1xcbmluZGV4IDEyNjk1MTc0MTQyODhmLi44NzA5MjAzMTFmOWEwMSAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL25ldC9waHkvcGh5LWM0NS5jXFxuKysrIGIvZHJpdmVycy9uZXQvcGh5L3BoeS1jNDUuY1xcbkBAIC0zODQsNiArMzg0LDExOSBAQCBpbnQgZ2VucGh5X2M0NV9jaGVja19hbmRfcmVzdGFydF9hbmVnKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYsIGJvb2wgcmVzdGFydClcXG4gfVxcbiBFWFBPUlRfU1lNQk9MX0dQTChnZW5waHlfYzQ1X2NoZWNrX2FuZF9yZXN0YXJ0X2FuZWcpO1xcbiBcXG4rLyoqXFxuKyAqIGdlbnBoeV9jNDVfcG1hX3NvZnRfcmVzZXQgLSBzb2Z0d2FyZSByZXNldCB0aGUgUEhZIHZpYSBDbGF1c2UgNDUgUE1BL1BNRCBjb250cm9sIHJlZ2lzdGVyXFxuKyAqIEBwaHlkZXY6IHRhcmdldCBwaHlfZGV2aWNlIHN0cnVjdFxcbisgKlxcbisgKiBSZXR1cm46IDAgb24gc3VjY2VzcywgbmVnYXRpdmUgZXJybm8gb24gZmFpbHVyZS5cXG4rICovXFxuK2ludCBnZW5waHlfYzQ1X3BtYV9zb2Z0X3Jlc2V0KHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXFxuK3tcXG4rXFx0aW50IHJldCwgdmFsO1xcbitcXG4rXFx0cmV0ID0gcGh5X3NldF9iaXRzX21tZChwaHlkZXYsIE1ESU9fTU1EX1BNQVBNRCwgTURJT19DVFJMMSxcXG4rXFx0XFx0XFx0ICAgICAgIE1ESU9fQ1RSTDFfUkVTRVQpO1xcbitcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0cmV0dXJuIHJldDtcXG4rXFxuK1xcdHJldHVybiBwaHlfcmVhZF9tbWRfcG9sbF90aW1lb3V0KHBoeWRldiwgTURJT19NTURfUE1BUE1ELFxcbitcXHRcXHRcXHRcXHRcXHQgTURJT19DVFJMMSwgdmFsLFxcbitcXHRcXHRcXHRcXHRcXHQgISh2YWwgXFx1MDAyNiBNRElPX0NUUkwxX1JFU0VUKSxcXG4rXFx0XFx0XFx0XFx0XFx0IDUwMDAsIDYwMDAwMCwgdHJ1ZSk7XFxuK31cXG4rRVhQT1JUX1NZTUJPTF9HUEwoZ2VucGh5X2M0NV9wbWFfc29mdF9yZXNldCk7XFxuK1xcbisvKipcXG4rICogZ2VucGh5X2M0NV9hbl9zZXR1cF9tYXN0ZXJfc2xhdmUgLSBDb25maWd1cmUgTWFzdGVyL1NsYXZlIHNldHRpbmcgZm9yIEM0NSBQSFlzXFxuKyAqIEBwaHlkZXY6IHRhcmdldCBwaHlfZGV2aWNlIHN0cnVjdFxcbisgKlxcbisgKiBEZXNjcmlwdGlvbjogQ29uZmlndXJlIHRoZSBmb3JjZWQgb3IgcHJlZmVycmVkIE1hc3Rlci9TbGF2ZSByb2xlXFxuKyAqIDEwR0JBU0UtVCBjb250cm9sIHJlZ2lzdGVyIChNTUQgNywgUmVnaXN0ZXIgMHgwMDIwKSBhY2NvcmRpbmcgdG9cXG4rICogSUVFRSA4MDIuMyBzdGFuZGFyZHMuXFxuKyAqXFxuKyAqIFJldHVybjogbmVnYXRpdmUgZXJybm8gY29kZSBvbiBmYWlsdXJlLCAwIGlmIE1hc3Rlci9TbGF2ZSBkaWRuJ3QgY2hhbmdlLFxcbisgKiBvciAxIGlmIE1hc3Rlci9TbGF2ZSBtb2RlcyBjaGFuZ2VkLlxcbisgKi9cXG4rc3RhdGljIGludCBnZW5waHlfYzQ1X2FuX3NldHVwX21hc3Rlcl9zbGF2ZShzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxcbit7XFxuK1xcdHUxNiBjdGwgPSAwO1xcbitcXG4rXFx0c3dpdGNoIChwaHlkZXYtXFx1MDAzZW1hc3Rlcl9zbGF2ZV9zZXQpIHtcXG4rXFx0Y2FzZSBNQVNURVJfU0xBVkVfQ0ZHX01BU1RFUl9QUkVGRVJSRUQ6XFxuK1xcdFxcdGN0bCA9IE1ESU9fQU5fMTBHQlRfQ1RSTF9NU19QT1JUX1RZUEU7XFxuK1xcdFxcdGJyZWFrO1xcbitcXHRjYXNlIE1BU1RFUl9TTEFWRV9DRkdfU0xBVkVfUFJFRkVSUkVEOlxcbitcXHRcXHRicmVhaztcXG4rXFx0Y2FzZSBNQVNURVJfU0xBVkVfQ0ZHX01BU1RFUl9GT1JDRTpcXG4rXFx0XFx0Y3RsID0gTURJT19BTl8xMEdCVF9DVFJMX01TX0VOQUJMRSB8IE1ESU9fQU5fMTBHQlRfQ1RSTF9NU19WQUxVRTtcXG4rXFx0XFx0YnJlYWs7XFxuK1xcdGNhc2UgTUFTVEVSX1NMQVZFX0NGR19TTEFWRV9GT1JDRTpcXG4rXFx0XFx0Y3RsID0gTURJT19BTl8xMEdCVF9DVFJMX01TX0VOQUJMRTtcXG4rXFx0XFx0YnJlYWs7XFxuK1xcdGNhc2UgTUFTVEVSX1NMQVZFX0NGR19VTktOT1dOOlxcbitcXHRjYXNlIE1BU1RFUl9TTEFWRV9DRkdfVU5TVVBQT1JURUQ6XFxuK1xcdFxcdHJldHVybiAwO1xcbitcXHRkZWZhdWx0OlxcbitcXHRcXHRwaHlkZXZfd2FybihwaHlkZXYsIFxcXCJVbnN1cHBvcnRlZCBNYXN0ZXIvU2xhdmUgbW9kZVxcXFxuXFxcIik7XFxuK1xcdFxcdHJldHVybiAtRU9QTk9UU1VQUDtcXG4rXFx0fVxcbitcXG4rXFx0cmV0dXJuIHBoeV9tb2RpZnlfbW1kX2NoYW5nZWQocGh5ZGV2LCBNRElPX01NRF9BTiwgTURJT19BTl8xMEdCVF9DVFJMLFxcbitcXHRcXHRcXHRcXHQgICAgICBNRElPX0FOXzEwR0JUX0NUUkxfTVNfRU5BQkxFIHxcXG4rXFx0XFx0XFx0XFx0ICAgICAgTURJT19BTl8xMEdCVF9DVFJMX01TX1ZBTFVFIHxcXG4rXFx0XFx0XFx0XFx0ICAgICAgTURJT19BTl8xMEdCVF9DVFJMX01TX1BPUlRfVFlQRSwgY3RsKTtcXG4rfVxcbitcXG4rLyoqXFxuKyAqIGdlbnBoeV9jNDVfcmVhZF9tYXN0ZXJfc2xhdmUgLSByZWFkIG1hc3Rlci9zbGF2ZSBzdGF0dXNcXG4rICogQHBoeWRldjogdGFyZ2V0IHBoeV9kZXZpY2Ugc3RydWN0XFxuKyAqXFxuKyAqIERlc2NyaXB0aW9uOiBSZWFkIHRoZSBNYXN0ZXIvU2xhdmUgY29uZmlndXJhdGlvbiBhbmQgc3RhdHVzXFxuKyAqIGZyb20gMTBHQkFTRS1UIGNvbnRyb2wvc3RhdHVzIHJlZ2lzdGVycyAoTU1EIDcsIFJlZyAweDAwMjAgYW5kIDB4MDAyMSkuXFxuKyAqXFxuKyAqIFJldHVybjogMCBvbiBzdWNjZXNzLCBvciBhIG5lZ2F0aXZlIGVycm9yIGNvZGUgb24gZmFpbHVyZS5cXG4rICovXFxuK3N0YXRpYyBpbnQgZ2VucGh5X2M0NV9yZWFkX21hc3Rlcl9zbGF2ZShzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxcbit7XFxuK1xcdGludCB2YWw7XFxuK1xcbitcXHRwaHlkZXYtXFx1MDAzZW1hc3Rlcl9zbGF2ZV9nZXQgPSBNQVNURVJfU0xBVkVfQ0ZHX1VOS05PV047XFxuK1xcdHBoeWRldi1cXHUwMDNlbWFzdGVyX3NsYXZlX3N0YXRlID0gTUFTVEVSX1NMQVZFX1NUQVRFX1VOS05PV047XFxuK1xcbitcXHR2YWwgPSBwaHlfcmVhZF9tbWQocGh5ZGV2LCBNRElPX01NRF9BTiwgTURJT19BTl8xMEdCVF9DVFJMKTtcXG4rXFx0aWYgKHZhbCBcXHUwMDNjIDApXFxuK1xcdFxcdHJldHVybiB2YWw7XFxuK1xcbitcXHRpZiAodmFsIFxcdTAwMjYgTURJT19BTl8xMEdCVF9DVFJMX01TX0VOQUJMRSkge1xcbitcXHRcXHRpZiAodmFsIFxcdTAwMjYgTURJT19BTl8xMEdCVF9DVFJMX01TX1ZBTFVFKVxcbitcXHRcXHRcXHRwaHlkZXYtXFx1MDAzZW1hc3Rlcl9zbGF2ZV9nZXQgPSBNQVNURVJfU0xBVkVfQ0ZHX01BU1RFUl9GT1JDRTtcXG4rXFx0XFx0ZWxzZVxcbitcXHRcXHRcXHRwaHlkZXYtXFx1MDAzZW1hc3Rlcl9zbGF2ZV9nZXQgPSBNQVNURVJfU0xBVkVfQ0ZHX1NMQVZFX0ZPUkNFO1xcbitcXHR9IGVsc2Uge1xcbitcXHRcXHRpZiAodmFsIFxcdTAwMjYgTURJT19BTl8xMEdCVF9DVFJMX01TX1BPUlRfVFlQRSlcXG4rXFx0XFx0XFx0cGh5ZGV2LVxcdTAwM2VtYXN0ZXJfc2xhdmVfZ2V0ID0gTUFTVEVSX1NMQVZFX0NGR19NQVNURVJfUFJFRkVSUkVEO1xcbitcXHRcXHRlbHNlXFxuK1xcdFxcdFxcdHBoeWRldi1cXHUwMDNlbWFzdGVyX3NsYXZlX2dldCA9IE1BU1RFUl9TTEFWRV9DRkdfU0xBVkVfUFJFRkVSUkVEO1xcbitcXHR9XFxuK1xcbitcXHR2YWwgPSBwaHlfcmVhZF9tbWQocGh5ZGV2LCBNRElPX01NRF9BTiwgTURJT19BTl8xMEdCVF9TVEFUKTtcXG4rXFx0aWYgKHZhbCBcXHUwMDNjIDApXFxuK1xcdFxcdHJldHVybiB2YWw7XFxuK1xcbitcXHRpZiAodmFsIFxcdTAwMjYgTURJT19BTl8xMEdCVF9TVEFUX01TX0ZBVUxUKSB7XFxuK1xcdFxcdHBoeWRldi1cXHUwMDNlbWFzdGVyX3NsYXZlX3N0YXRlID0gTUFTVEVSX1NMQVZFX1NUQVRFX0VSUjtcXG4rXFx0fSBlbHNlIGlmIChwaHlkZXYtXFx1MDAzZWxpbmspIHtcXG4rXFx0XFx0aWYgKHZhbCBcXHUwMDI2IE1ESU9fQU5fMTBHQlRfU1RBVF9NU19SRVMpXFxuK1xcdFxcdFxcdHBoeWRldi1cXHUwMDNlbWFzdGVyX3NsYXZlX3N0YXRlID0gTUFTVEVSX1NMQVZFX1NUQVRFX01BU1RFUjtcXG4rXFx0XFx0ZWxzZVxcbitcXHRcXHRcXHRwaHlkZXYtXFx1MDAzZW1hc3Rlcl9zbGF2ZV9zdGF0ZSA9IE1BU1RFUl9TTEFWRV9TVEFURV9TTEFWRTtcXG4rXFx0fSBlbHNlIHtcXG4rXFx0XFx0cGh5ZGV2LVxcdTAwM2VtYXN0ZXJfc2xhdmVfc3RhdGUgPSBNQVNURVJfU0xBVkVfU1RBVEVfVU5LTk9XTjtcXG4rXFx0fVxcbitcXG4rXFx0cmV0dXJuIDA7XFxuK31cXG4rXFxuIC8qKlxcbiAgKiBnZW5waHlfYzQ1X2FuZWdfZG9uZSAtIHJldHVybiBhdXRvLW5lZ290aWF0aW9uIGNvbXBsZXRlIHN0YXR1c1xcbiAgKiBAcGh5ZGV2OiB0YXJnZXQgcGh5X2RldmljZSBzdHJ1Y3RcXG5AQCAtMTE5Miw2ICsxMzA1LDEwIEBAIGludCBnZW5waHlfYzQ1X3JlYWRfc3RhdHVzKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXFxuIFxcdFxcdFxcdHJldCA9IGdlbnBoeV9jNDVfYmFzZXQxX3JlYWRfc3RhdHVzKHBoeWRldik7XFxuIFxcdFxcdFxcdGlmIChyZXQgXFx1MDAzYyAwKVxcbiBcXHRcXHRcXHRcXHRyZXR1cm4gcmV0O1xcbitcXHRcXHR9IGVsc2Uge1xcbitcXHRcXHRcXHRyZXQgPSBnZW5waHlfYzQ1X3JlYWRfbWFzdGVyX3NsYXZlKHBoeWRldik7XFxuK1xcdFxcdFxcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRcXHRcXHRyZXR1cm4gcmV0O1xcbiBcXHRcXHR9XFxuIFxcbiBcXHRcXHRwaHlfcmVzb2x2ZV9hbmVnX2xpbmttb2RlKHBoeWRldik7XFxuQEAgLTEyMjUsNiArMTM0MiwxNCBAQCBpbnQgZ2VucGh5X2M0NV9jb25maWdfYW5lZyhzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxcbiBcXHRpZiAocmV0IFxcdTAwM2UgMClcXG4gXFx0XFx0Y2hhbmdlZCA9IHRydWU7XFxuIFxcbitcXHRpZiAoIWdlbnBoeV9jNDVfYmFzZXQxX2FibGUocGh5ZGV2KSkge1xcbitcXHRcXHRyZXQgPSBnZW5waHlfYzQ1X2FuX3NldHVwX21hc3Rlcl9zbGF2ZShwaHlkZXYpO1xcbitcXHRcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0XFx0cmV0dXJuIHJldDtcXG4rXFx0XFx0aWYgKHJldCBcXHUwMDNlIDApXFxuK1xcdFxcdFxcdGNoYW5nZWQgPSB0cnVlO1xcbitcXHR9XFxuK1xcbiBcXHRyZXR1cm4gZ2VucGh5X2M0NV9jaGVja19hbmRfcmVzdGFydF9hbmVnKHBoeWRldiwgY2hhbmdlZCk7XFxuIH1cXG4gRVhQT1JUX1NZTUJPTF9HUEwoZ2VucGh5X2M0NV9jb25maWdfYW5lZyk7XFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3BoeS9yZWFsdGVrL3JlYWx0ZWtfbWFpbi5jIGIvZHJpdmVycy9uZXQvcGh5L3JlYWx0ZWsvcmVhbHRla19tYWluLmNcXG5pbmRleCAyNzI2ODgxMWY1NjRmMi4uNjhhMmRlMGIyYmQzYmEgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9uZXQvcGh5L3JlYWx0ZWsvcmVhbHRla19tYWluLmNcXG4rKysgYi9kcml2ZXJzL25ldC9waHkvcmVhbHRlay9yZWFsdGVrX21haW4uY1xcbkBAIC04LDcgKzgsOSBAQFxcbiAgKiBDb3B5cmlnaHQgKGMpIDIwMDQgRnJlZXNjYWxlIFNlbWljb25kdWN0b3IsIEluYy5cXG4gICovXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9iaXRvcHMuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2NyYzMyLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9ldGh0b29sX25ldGxpbmsuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2Zpcm13YXJlLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9vZi5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvcGh5LmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9wbV93YWtlaXJxLmhcXHUwMDNlXFxuQEAgLTE0MSw2ICsxNDMsMTAgQEBcXG4gI2RlZmluZSBSVEw4MjExRl9QSFlTSUNBTF9BRERSX1dPUkQxXFx0XFx0MTdcXG4gI2RlZmluZSBSVEw4MjExRl9QSFlTSUNBTF9BRERSX1dPUkQyXFx0XFx0MThcXG4gXFxuKyNkZWZpbmUgUlRMODI2MVhfRVhUX0FERFJfUkVHXFx0XFx0XFx0MHhhNDM2XFxuKyNkZWZpbmUgUlRMODI2MVhfRVhUX0RBVEFfUkVHXFx0XFx0XFx0MHhhNDM4XFxuKyNkZWZpbmUgUlRMXzgyNjFYX1NVQl9QSFlfSURfQUREUlxcdFxcdDB4ODAxZFxcbitcXG4gI2RlZmluZSBSVEw4MjJYX1ZORDFfU0VSREVTX09QVElPTlxcdFxcdFxcdDB4Njk3YVxcbiAjZGVmaW5lIFJUTDgyMlhfVk5EMV9TRVJERVNfT1BUSU9OX01PREVfTUFTS1xcdFxcdEdFTk1BU0soNSwgMClcXG4gI2RlZmluZSBSVEw4MjJYX1ZORDFfU0VSREVTX09QVElPTl9NT0RFXzI1MDBCQVNFWF9TR01JSVxcdFxcdDBcXG5AQCAtMjUxLDYgKzI1Nyw2OSBAQFxcbiAjZGVmaW5lIFJUTF84MjIxQl9WTV9DR1xcdFxcdFxcdFxcdDB4MDAxY2M4NGFcXG4gI2RlZmluZSBSVExfODI1MUJcXHRcXHRcXHRcXHQweDAwMWNjODYyXFxuICNkZWZpbmUgUlRMXzgyNjFDXFx0XFx0XFx0XFx0MHgwMDFjYzg5MFxcbisjZGVmaW5lIFJUTF84MjYxQ19DR1xcdFxcdFxcdFxcdDB4MDAxY2M4OThcXG4rXFxuKyNkZWZpbmUgUlRMODI2MUNfQ0VfTU9ERUxcXHRcXHQweDAwXFxuKyNkZWZpbmUgUlRMODI2MVhfSU5UX0FVVE9ORUdfRVJST1JcXHRCSVQoMClcXG4rI2RlZmluZSBSVEw4MjYxWF9JTlRfUEFHRV9SRUNWXFx0XFx0QklUKDIpXFxuKyNkZWZpbmUgUlRMODI2MVhfSU5UX0FVVE9ORUdfRE9ORVxcdEJJVCgzKVxcbisjZGVmaW5lIFJUTDgyNjFYX0lOVF9MSU5LX0NIR1xcdFxcdEJJVCg0KVxcbisjZGVmaW5lIFJUTDgyNjFYX0lOVF9QSFlfUkVHX0FDQ0VTU1xcdEJJVCg1KVxcbisjZGVmaW5lIFJUTDgyNjFYX0lOVF9QTUVcXHRcXHRCSVQoNylcXG4rI2RlZmluZSBSVEw4MjYxWF9JTlRfQUxEUFNfQ0hHXFx0XFx0QklUKDkpXFxuKyNkZWZpbmUgUlRMODI2MVhfSU5UX0pBQkJFUlxcdFxcdEJJVCgxMClcXG4rXFxuKyNkZWZpbmUgUlRMODI2MVhfSU5UX01BU0tfREVGQVVMVFxcdChSVEw4MjYxWF9JTlRfQVVUT05FR19ET05FIHwgXFxcXFxcbitcXHRcXHRcXHRcXHRcXHQgUlRMODI2MVhfSU5UX0xJTktfQ0hHIHwgXFxcXFxcbitcXHRcXHRcXHRcXHRcXHQgUlRMODI2MVhfSU5UX0FVVE9ORUdfRVJST1IgfCBcXFxcXFxuK1xcdFxcdFxcdFxcdFxcdCBSVEw4MjYxWF9JTlRfSkFCQkVSKVxcbitcXG4rI2RlZmluZSBSVEw4MjYxWF9JTlRfTUFTS19BTExcXHRcXHQoUlRMODI2MVhfSU5UX0FVVE9ORUdfRVJST1IgfCBcXFxcXFxuK1xcdFxcdFxcdFxcdFxcdCBSVEw4MjYxWF9JTlRfUEFHRV9SRUNWIHwgXFxcXFxcbitcXHRcXHRcXHRcXHRcXHQgUlRMODI2MVhfSU5UX0FVVE9ORUdfRE9ORSB8IFxcXFxcXG4rXFx0XFx0XFx0XFx0XFx0IFJUTDgyNjFYX0lOVF9MSU5LX0NIRyB8IFxcXFxcXG4rXFx0XFx0XFx0XFx0XFx0IFJUTDgyNjFYX0lOVF9QSFlfUkVHX0FDQ0VTUyB8IFxcXFxcXG4rXFx0XFx0XFx0XFx0XFx0IFJUTDgyNjFYX0lOVF9QTUUgfCBcXFxcXFxuK1xcdFxcdFxcdFxcdFxcdCBSVEw4MjYxWF9JTlRfQUxEUFNfQ0hHIHwgXFxcXFxcbitcXHRcXHRcXHRcXHRcXHQgUlRMODI2MVhfSU5UX0pBQkJFUilcXG4rXFxuKyNkZWZpbmUgRldfTUFJTl9NQUdJQ1xcdFxcdFxcdDB4NTI1NDRDMzhcXG4rI2RlZmluZSBGV19TVUJfTUFHSUNfODI2MUNcXHRcXHQweDMyMzYzMTQzXFxuKyNkZWZpbmUgUlRMODI2MVhfUE9MTF9USU1FT1VUX01TXFx0MTAwXFxuKyNkZWZpbmUgUlRMODI2MVhfTUFYX01NRF9ERVZcXHRcXHQzMVxcbitcXG4rI2RlZmluZSBSVEw4MjYxQ19DRV9GV19OQU1FXFx0XFxcInJ0bF9uaWMvcnRsODI2MWMuYmluXFxcIlxcbitNT0RVTEVfRklSTVdBUkUoUlRMODI2MUNfQ0VfRldfTkFNRSk7XFxuK1xcbitlbnVtIHJ0bDgyNjF4X2Z3X29wIHtcXG4rXFx0T1BfV1JJVEUgPSAweDAwLFxcdC8qIFdyaXRlICovXFxuK1xcdE9QX1BPTEwgID0gMHgwMixcXHQvKiBQb2xsaW5nICovXFxuK307XFxuK1xcbitzdHJ1Y3QgcnRsODI2MXhfZndfaGVhZGVyIHtcXG4rXFx0X19sZTMyIG1haW5fbWFnaWM7XFx0LyogTWFpbiBtYWdpYyBudW1iZXIgKi9cXG4rXFx0X19sZTMyIHN1Yl9tYWdpYztcXHQvKiBTdWIgbWFnaWMgbnVtYmVyICovXFxuK1xcdF9fbGUxNiB2ZXJzaW9uX21ham9yO1xcdC8qIE1ham9yIHZlcnNpb24gKi9cXG4rXFx0X19sZTE2IHZlcnNpb25fbWlub3I7XFx0LyogTWlub3IgdmVyc2lvbiAqL1xcbitcXHRfX2xlMTYgbnVtX2VudHJpZXM7XFx0LyogTnVtYmVyIG9mIGVudHJpZXMgKi9cXG4rXFx0X19sZTE2IHJlc2VydmVkO1xcdC8qIFJlc2VydmVkICovXFxuK1xcdF9fbGUzMiBjcmMzMjtcXHRcXHQvKiBDUkMzMiBjaGVja3N1bSAqL1xcbit9O1xcbitcXG4rc3RydWN0IHJ0bDgyNjF4X2Z3X2VudHJ5IHtcXG4rXFx0X191OCAgdHlwZTtcXHRcXHQvKiBPcGVyYXRpb24gdHlwZSAoT1BfKikgKi9cXG4rXFx0X191OCAgZGV2O1xcdFxcdC8qIE1NRCBkZXZpY2UgKi9cXG4rXFx0X19sZTE2IGFkZHI7XFx0XFx0LyogUmVnaXN0ZXIgYWRkcmVzcyAqL1xcbitcXHRfX3U4ICBtc2I7XFx0XFx0LyogTVNCIGJpdCBwb3NpdGlvbiAqL1xcbitcXHRfX3U4ICBsc2I7XFx0XFx0LyogTFNCIGJpdCBwb3NpdGlvbiAqL1xcbitcXHRfX2xlMTYgdmFsdWU7XFx0XFx0LyogVmFsdWUgdG8gd3JpdGUvY29tcGFyZSAqL1xcbitcXHRfX2xlMTYgdGltZW91dF9tcztcXHQvKiBQb2xsIHRpbWVvdXQgaW4gbWlsbGlzZWNvbmRzICovXFxuK1xcdF9fdTggIHBvbGxfc2V0O1xcdFxcdC8qIFBvbGwgdW50aWwgZXF1YWwgKDEpIG9yIG5vdCBlcXVhbCAoMCkgKi9cXG4rXFx0X191OCAgcmVzZXJ2ZWQ7XFx0XFx0LyogUmVzZXJ2ZWQgKi9cXG4rfTtcXG4rXFxuKyNkZWZpbmUgRldfSEVBREVSX1NJWkVcXHRcXHRzaXplb2Yoc3RydWN0IHJ0bDgyNjF4X2Z3X2hlYWRlcilcXG4rI2RlZmluZSBGV19FTlRSWV9TSVpFXFx0XFx0c2l6ZW9mKHN0cnVjdCBydGw4MjYxeF9md19lbnRyeSlcXG4gXFxuIC8qIFJUTDgyMTFFIGFuZCBSVEw4MjExRiBzdXBwb3J0IHVwIHRvIHRocmVlIExFRHMgKi9cXG4gI2RlZmluZSBSVEw4MjExeF9MRURfQ09VTlRcXHRcXHRcXHQzXFxuQEAgLTI3MCw2ICszMzksMTEgQEAgc3RydWN0IHJ0bDgyMXhfcHJpdiB7XFxuIFxcdHUxNiBpbmVyO1xcbiB9O1xcbiBcXG4rc3RydWN0IHJ0bDgyNjF4X3ByaXYge1xcbitcXHRjb25zdCBjaGFyICpmd19uYW1lO1xcbitcXHRib29sIGZ3X2xvYWRlZDtcXG4rfTtcXG4rXFxuIHN0YXRpYyBpbnQgcnRsODIxeF9yZWFkX3BhZ2Uoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcXG4ge1xcbiBcXHRyZXR1cm4gX19waHlfcmVhZChwaHlkZXYsIFJUTDgyMXhfUEFHRV9TRUxFQ1QpO1xcbkBAIC0zMTAsNiArMzg0LDMyNSBAQCBzdGF0aWMgaW50IHJ0bDgyMXhfbW9kaWZ5X2V4dF9wYWdlKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYsIHUxNiBleHRfcGFnZSxcXG4gXFx0cmV0dXJuIHBoeV9yZXN0b3JlX3BhZ2UocGh5ZGV2LCBvbGRwYWdlLCByZXQpO1xcbiB9XFxuIFxcbitzdGF0aWMgaW50IHJ0bDgyNjF4X3Byb2JlKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXFxuK3tcXG4rXFx0c3RydWN0IGRldmljZSAqZGV2ID0gXFx1MDAyNnBoeWRldi1cXHUwMDNlbWRpby5kZXY7XFxuK1xcdHN0cnVjdCBydGw4MjYxeF9wcml2ICpwcml2O1xcbitcXHRpbnQgc3ViX3BoeV9pZCwgcmV0O1xcbitcXG4rXFx0cHJpdiA9IGRldm1fa3phbGxvYyhkZXYsIHNpemVvZigqcHJpdiksIEdGUF9LRVJORUwpO1xcbitcXHRpZiAoIXByaXYpXFxuK1xcdFxcdHJldHVybiAtRU5PTUVNO1xcbitcXG4rXFx0cGh5ZGV2LVxcdTAwM2Vwcml2ID0gcHJpdjtcXG4rXFxuK1xcdHJldCA9IHBoeV93cml0ZV9tbWQocGh5ZGV2LCBNRElPX01NRF9WRU5EMiwgUlRMODI2MVhfRVhUX0FERFJfUkVHLFxcbitcXHRcXHRcXHQgICAgUlRMXzgyNjFYX1NVQl9QSFlfSURfQUREUik7XFxuK1xcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRyZXR1cm4gcmV0O1xcbitcXG4rXFx0cmV0ID0gcGh5X3JlYWRfbW1kKHBoeWRldiwgTURJT19NTURfVkVORDIsIFJUTDgyNjFYX0VYVF9EQVRBX1JFRyk7XFxuK1xcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRyZXR1cm4gcmV0O1xcbitcXG4rXFx0c3ViX3BoeV9pZCA9IChyZXQgXFx1MDAzZVxcdTAwM2UgOCkgXFx1MDAyNiAweGZmO1xcbitcXG4rXFx0c3dpdGNoIChzdWJfcGh5X2lkKSB7XFxuK1xcdGNhc2UgUlRMODI2MUNfQ0VfTU9ERUw6XFxuK1xcdFxcdHByaXYtXFx1MDAzZWZ3X25hbWUgPSBSVEw4MjYxQ19DRV9GV19OQU1FO1xcbitcXHRcXHRwaHlkZXZfaW5mbyhwaHlkZXYsIFxcXCJSVEw4MjYxQyBkZXRlY3RlZCAoc3ViX2lkIDB4JTAyeClcXFxcblxcXCIsIHN1Yl9waHlfaWQpO1xcbitcXHRcXHRicmVhaztcXG4rXFxuK1xcdGRlZmF1bHQ6XFxuK1xcdFxcdHBoeWRldl93YXJuKHBoeWRldiwgXFxcIlVua25vd24gc3ViX2lkIDB4JTAyeCwgZGVmYXVsdCBiZWhhdmlvclxcXFxuXFxcIiwgc3ViX3BoeV9pZCk7XFxuK1xcdFxcdHJldHVybiAtRU5PREVWO1xcbitcXHR9XFxuK1xcbitcXHRyZXR1cm4gMDtcXG4rfVxcbitcXG4rc3RhdGljIGludCBydGw4MjYxeF9nZXRfZmVhdHVyZXMoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcXG4re1xcbitcXHRpbnQgcmV0O1xcbitcXG4rXFx0cmV0ID0gZ2VucGh5X2M0NV9wbWFfcmVhZF9hYmlsaXRpZXMocGh5ZGV2KTtcXG4rXFx0aWYgKHJldClcXG4rXFx0XFx0cmV0dXJuIHJldDtcXG4rXFx0LypcXG4rXFx0ICogU3VwcGxlbWVudCBNdWx0aS1HaWcgc3BlZWRzIHRoYXQgbWF5IG5vdCBiZSBhdXRvbWF0aWNhbGx5IGRldGVjdGVkXFxuK1xcdCAqIFJUTDgyNjFYIHN1cHBvcnRzIDIuNUcvNUcgaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgMTBHXFxuK1xcdCAqL1xcbitcXHRsaW5rbW9kZV9zZXRfYml0KEVUSFRPT0xfTElOS19NT0RFXzI1MDBiYXNlVF9GdWxsX0JJVCxcXG4rXFx0XFx0XFx0IHBoeWRldi1cXHUwMDNlc3VwcG9ydGVkKTtcXG4rXFx0bGlua21vZGVfc2V0X2JpdChFVEhUT09MX0xJTktfTU9ERV81MDAwYmFzZVRfRnVsbF9CSVQsXFxuK1xcdFxcdFxcdCBwaHlkZXYtXFx1MDAzZXN1cHBvcnRlZCk7XFxuK1xcbitcXHRyZXR1cm4gMDtcXG4rfVxcbitcXG4rc3RhdGljIGludCBydGw4MjYxeF9yZWFkX3N0YXR1cyhzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxcbit7XFxuK1xcdGludCByZXQsIHZhbCA9IDA7XFxuK1xcbitcXHRpZiAocGh5ZGV2LVxcdTAwM2VhdXRvbmVnID09IEFVVE9ORUdfRU5BQkxFKSB7XFxuK1xcdFxcdHJldCA9IGdlbnBoeV9jNDVfYW5lZ19kb25lKHBoeWRldik7XFxuK1xcdFxcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRcXHRyZXR1cm4gcmV0O1xcbitcXG4rXFx0XFx0aWYgKHJldCkge1xcbitcXHRcXHRcXHR2YWwgPSBwaHlfcmVhZF9tbWQocGh5ZGV2LCBNRElPX01NRF9WRU5EMixcXG4rXFx0XFx0XFx0XFx0XFx0ICAgUlRMODIyWF9WTkQyX0MyMl9SRUcoTUlJX1NUQVQxMDAwKSk7XFxuK1xcdFxcdFxcdGlmICh2YWwgXFx1MDAzYyAwKVxcbitcXHRcXHRcXHRcXHRyZXR1cm4gdmFsO1xcbitcXHRcXHR9XFxuK1xcdH1cXG4rXFxuK1xcdG1paV9zdGF0MTAwMF9tb2RfbGlua21vZGVfbHBhX3QocGh5ZGV2LVxcdTAwM2VscF9hZHZlcnRpc2luZywgdmFsKTtcXG4rXFxuK1xcdHJldCA9IGdlbnBoeV9jNDVfcmVhZF9zdGF0dXMocGh5ZGV2KTtcXG4rXFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdHJldHVybiByZXQ7XFxuK1xcbitcXHRyZXR1cm4gMDtcXG4rfVxcbitcXG4rc3RhdGljIGludCBydGw4MjYxeF92ZXJpZnlfZmlybXdhcmUoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldiwgY29uc3Qgc3RydWN0IGZpcm13YXJlICpmdylcXG4re1xcbitcXHRjb25zdCBzdHJ1Y3QgcnRsODI2MXhfZndfaGVhZGVyICpoZHI7XFxuK1xcdHUzMiBtYWluX21hZ2ljLCBzdWJfbWFnaWM7XFxuK1xcdHUzMiBjYWxjX2NyYywgZmlsZV9jcmM7XFxuK1xcdHNpemVfdCBkYXRhX2xlbjtcXG4rXFx0dTE2IG51bV9lbnRyaWVzO1xcbitcXG4rXFx0aWYgKGZ3LVxcdTAwM2VzaXplIFxcdTAwM2MgRldfSEVBREVSX1NJWkUpIHtcXG4rXFx0XFx0cGh5ZGV2X2VycihwaHlkZXYsIFxcXCJGaXJtd2FyZSB0b28gc21hbGw6ICV6dSBieXRlc1xcXFxuXFxcIiwgZnctXFx1MDAzZXNpemUpO1xcbitcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4rXFx0fVxcbitcXG4rXFx0aGRyID0gKGNvbnN0IHN0cnVjdCBydGw4MjYxeF9md19oZWFkZXIgKilmdy1cXHUwMDNlZGF0YTtcXG4rXFxuK1xcdG1haW5fbWFnaWMgPSBsZTMyX3RvX2NwdShoZHItXFx1MDAzZW1haW5fbWFnaWMpO1xcbitcXHRpZiAobWFpbl9tYWdpYyAhPSBGV19NQUlOX01BR0lDKSB7XFxuK1xcdFxcdHBoeWRldl9lcnIocGh5ZGV2LCBcXFwiSW52YWxpZCBmaXJtd2FyZSBtYWdpYzogMHglMDh4XFxcXG5cXFwiLCBtYWluX21hZ2ljKTtcXG4rXFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuK1xcdH1cXG4rXFxuK1xcdHN1Yl9tYWdpYyA9IGxlMzJfdG9fY3B1KGhkci1cXHUwMDNlc3ViX21hZ2ljKTtcXG4rXFx0aWYgKHN1Yl9tYWdpYyAhPSBGV19TVUJfTUFHSUNfODI2MUMpIHtcXG4rXFx0XFx0cGh5ZGV2X2VycihwaHlkZXYsIFxcXCJJbnZhbGlkIHN1YiBtYWdpYzogMHglMDh4XFxcXG5cXFwiLCBzdWJfbWFnaWMpO1xcbitcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4rXFx0fVxcbitcXG4rXFx0bnVtX2VudHJpZXMgPSBsZTE2X3RvX2NwdShoZHItXFx1MDAzZW51bV9lbnRyaWVzKTtcXG4rXFx0ZGF0YV9sZW4gPSBudW1fZW50cmllcyAqIEZXX0VOVFJZX1NJWkU7XFxuK1xcbitcXHRpZiAoZnctXFx1MDAzZXNpemUgIT0gc2l6ZW9mKCpoZHIpICsgZGF0YV9sZW4pIHtcXG4rXFx0XFx0cGh5ZGV2X2VycihwaHlkZXYsIFxcXCJGaXJtd2FyZSBzaXplIG1pc21hdGNoXFxcXG5cXFwiKTtcXG4rXFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuK1xcdH1cXG4rXFxuK1xcdGNhbGNfY3JjID0gY3JjMzIofjAsIGZ3LVxcdTAwM2VkYXRhICsgRldfSEVBREVSX1NJWkUsIGRhdGFfbGVuKSBeIH4wO1xcbitcXHRmaWxlX2NyYyA9IGxlMzJfdG9fY3B1KGhkci1cXHUwMDNlY3JjMzIpO1xcbitcXG4rXFx0aWYgKGNhbGNfY3JjICE9IGZpbGVfY3JjKSB7XFxuK1xcdFxcdHBoeWRldl9lcnIocGh5ZGV2LCBcXFwiQ1JDMzIgbWlzbWF0Y2g6IGNhbGN1bGF0ZWQ9MHglMDh4IGZpbGU9MHglMDh4XFxcXG5cXFwiLFxcbitcXHRcXHRcXHQgICBjYWxjX2NyYywgZmlsZV9jcmMpO1xcbitcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4rXFx0fVxcbitcXG4rXFx0cmV0dXJuIDA7XFxuK31cXG4rXFxuK3N0YXRpYyBpbnQgcnRsODI2MXhfZndfZXhlY3V0ZV9lbnRyeShzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2LFxcbitcXHRcXHRcXHRcXHQgICAgIGNvbnN0IHN0cnVjdCBydGw4MjYxeF9md19lbnRyeSAqZW50cnkpXFxuK3tcXG4rXFx0dTE2IGFkZHIsIHZhbHVlLCB0aW1lb3V0X21zO1xcbitcXHR1OCBkZXYsIG1zYiwgbHNiLCBwb2xsX3NldDtcXG4rXFx0dTMyIGJpdHMsIGV4cGVjdF92YWw7XFxuK1xcdGludCByZXQsIHZhbDtcXG4rXFxuK1xcdGRldiA9IGVudHJ5LVxcdTAwM2VkZXY7XFxuK1xcdGFkZHIgPSBsZTE2X3RvX2NwdShlbnRyeS1cXHUwMDNlYWRkcik7XFxuK1xcdG1zYiA9IGVudHJ5LVxcdTAwM2Vtc2I7XFxuK1xcdGxzYiA9IGVudHJ5LVxcdTAwM2Vsc2I7XFxuK1xcdHZhbHVlID0gbGUxNl90b19jcHUoZW50cnktXFx1MDAzZXZhbHVlKTtcXG4rXFx0dGltZW91dF9tcyA9IGxlMTZfdG9fY3B1KGVudHJ5LVxcdTAwM2V0aW1lb3V0X21zKTtcXG4rXFx0cG9sbF9zZXQgPSBlbnRyeS1cXHUwMDNlcG9sbF9zZXQ7XFxuK1xcbitcXHRpZiAodGltZW91dF9tcyA9PSAwKVxcbitcXHRcXHR0aW1lb3V0X21zID0gUlRMODI2MVhfUE9MTF9USU1FT1VUX01TO1xcbitcXG4rXFx0aWYgKGRldiBcXHUwMDNlIFJUTDgyNjFYX01BWF9NTURfREVWKSB7XFxuK1xcdFxcdHBoeWRldl9lcnIocGh5ZGV2LCBcXFwiaW52YWxpZCBmaXJtd2FyZSBNTUQgZGV2aWNlOiBkZXY9JXVcXFxcblxcXCIsIGRldik7XFxuK1xcdFxcdHJldHVybiAtRUlOVkFMO1xcbitcXHR9XFxuK1xcbitcXHRpZiAobXNiIFxcdTAwM2UgMTUgfHwgbHNiIFxcdTAwM2UgbXNiKSB7XFxuK1xcdFxcdHBoeWRldl9lcnIocGh5ZGV2LCBcXFwiaW52YWxpZCBmaXJtd2FyZSBiaXRzOiBtc2I9JXUsIGxzYj0ldVxcXFxuXFxcIiwgbXNiLCBsc2IpO1xcbitcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4rXFx0fVxcbitcXG4rXFx0c3dpdGNoIChlbnRyeS1cXHUwMDNldHlwZSkge1xcbitcXHRjYXNlIE9QX1dSSVRFOlxcbitcXHRcXHRyZXQgPSBwaHlfbW9kaWZ5X21tZChwaHlkZXYsIGRldiwgYWRkcixcXG4rXFx0XFx0XFx0XFx0ICAgICBHRU5NQVNLKG1zYiwgbHNiKSwgKHZhbHVlIFxcdTAwM2NcXHUwMDNjIGxzYikgXFx1MDAyNiBHRU5NQVNLKG1zYiwgbHNiKSk7XFxuK1xcdFxcdGlmIChyZXQpXFxuK1xcdFxcdFxcdHJldHVybiByZXQ7XFxuK1xcdFxcdGJyZWFrO1xcbitcXG4rXFx0Y2FzZSBPUF9QT0xMOlxcbitcXHRcXHRiaXRzID0gR0VOTUFTSyhtc2IsIGxzYik7XFxuK1xcdFxcdGV4cGVjdF92YWwgPSAodmFsdWUgXFx1MDAzY1xcdTAwM2MgbHNiKSBcXHUwMDI2IGJpdHM7XFxuK1xcbitcXHRcXHRpZiAocG9sbF9zZXQpXFxuK1xcdFxcdFxcdHJldCA9IHBoeV9yZWFkX21tZF9wb2xsX3RpbWVvdXQocGh5ZGV2LCBkZXYsIGFkZHIsIHZhbCxcXG4rXFx0XFx0XFx0XFx0XFx0XFx0XFx0KHZhbCBcXHUwMDI2IGJpdHMpID09IGV4cGVjdF92YWwsXFxuK1xcdFxcdFxcdFxcdFxcdFxcdFxcdDEwMDAsIHRpbWVvdXRfbXMgKiAxMDAwLCBmYWxzZSk7XFxuK1xcdFxcdGVsc2VcXG4rXFx0XFx0XFx0cmV0ID0gcGh5X3JlYWRfbW1kX3BvbGxfdGltZW91dChwaHlkZXYsIGRldiwgYWRkciwgdmFsLFxcbitcXHRcXHRcXHRcXHRcXHRcXHRcXHQodmFsIFxcdTAwMjYgYml0cykgIT0gZXhwZWN0X3ZhbCxcXG4rXFx0XFx0XFx0XFx0XFx0XFx0XFx0MTAwMCwgdGltZW91dF9tcyAqIDEwMDAsIGZhbHNlKTtcXG4rXFx0XFx0aWYgKHJldClcXG4rXFx0XFx0XFx0cmV0dXJuIHJldDtcXG4rXFx0XFx0YnJlYWs7XFxuK1xcbitcXHRkZWZhdWx0OlxcbitcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4rXFx0fVxcbitcXG4rXFx0cmV0dXJuIDA7XFxuK31cXG4rXFxuK3N0YXRpYyBpbnQgcnRsODI2MXhfZndfbG9hZChzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxcbit7XFxuK1xcdHN0cnVjdCBydGw4MjYxeF9wcml2ICpwcml2ID0gcGh5ZGV2LVxcdTAwM2Vwcml2O1xcbitcXHRjb25zdCBzdHJ1Y3QgcnRsODI2MXhfZndfZW50cnkgKmVudHJ5O1xcbitcXHRjb25zdCBzdHJ1Y3QgcnRsODI2MXhfZndfaGVhZGVyICpoZHI7XFxuK1xcdGNvbnN0IHN0cnVjdCBmaXJtd2FyZSAqZnc7XFxuK1xcdGludCByZXQsIGk7XFxuK1xcbitcXHRpZiAoIXByaXYtXFx1MDAzZWZ3X25hbWUpXFxuK1xcdFxcdHJldHVybiAwO1xcbitcXG4rXFx0cmV0ID0gcmVxdWVzdF9maXJtd2FyZShcXHUwMDI2ZncsIHByaXYtXFx1MDAzZWZ3X25hbWUsIFxcdTAwMjZwaHlkZXYtXFx1MDAzZW1kaW8uZGV2KTtcXG4rXFx0aWYgKHJldCkge1xcbitcXHRcXHRwaHlkZXZfZXJyKHBoeWRldiwgXFxcIkZhaWxlZCB0byBsb2FkIGZpcm13YXJlICVzOiAlZFxcXFxuXFxcIiwgcHJpdi1cXHUwMDNlZndfbmFtZSwgcmV0KTtcXG4rXFx0XFx0cmV0dXJuIHJldDtcXG4rXFx0fVxcbitcXG4rXFx0cmV0ID0gcnRsODI2MXhfdmVyaWZ5X2Zpcm13YXJlKHBoeWRldiwgZncpO1xcbitcXHRpZiAocmV0KVxcbitcXHRcXHRnb3RvIHJlbGVhc2VfZnc7XFxuK1xcbitcXHRoZHIgPSAoY29uc3Qgc3RydWN0IHJ0bDgyNjF4X2Z3X2hlYWRlciAqKWZ3LVxcdTAwM2VkYXRhO1xcbitcXG4rXFx0ZW50cnkgPSAoY29uc3Qgc3RydWN0IHJ0bDgyNjF4X2Z3X2VudHJ5ICopKGZ3LVxcdTAwM2VkYXRhICsgRldfSEVBREVSX1NJWkUpO1xcbitcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgbGUxNl90b19jcHUoaGRyLVxcdTAwM2VudW1fZW50cmllcyk7IGkrKywgZW50cnkrKykge1xcbitcXHRcXHRyZXQgPSBydGw4MjYxeF9md19leGVjdXRlX2VudHJ5KHBoeWRldiwgZW50cnkpO1xcbitcXHRcXHRpZiAocmV0KSB7XFxuK1xcdFxcdFxcdHBoeWRldl9lcnIocGh5ZGV2LCBcXFwiRW50cnkgJWQgZmFpbGVkOiAlZFxcXFxuXFxcIiwgaSwgcmV0KTtcXG4rXFx0XFx0XFx0Z290byByZWxlYXNlX2Z3O1xcbitcXHRcXHR9XFxuK1xcdH1cXG4rXFxuK1xcdHByaXYtXFx1MDAzZWZ3X2xvYWRlZCA9IHRydWU7XFxuK1xcbityZWxlYXNlX2Z3OlxcbitcXHRyZWxlYXNlX2Zpcm13YXJlKGZ3KTtcXG4rXFx0cmV0dXJuIHJldDtcXG4rfVxcbitcXG4rc3RhdGljIGludCBydGw4MjYxeF9jb25maWdfaW50cihzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxcbit7XFxuK1xcdGludCByZXQ7XFxuK1xcbitcXHRpZiAocGh5ZGV2LVxcdTAwM2VpbnRlcnJ1cHRzID09IFBIWV9JTlRFUlJVUFRfRU5BQkxFRCkge1xcbitcXHRcXHRyZXQgPSBwaHlfcmVhZF9tbWQocGh5ZGV2LCBNRElPX01NRF9WRU5EMiwgUlRMODIyMUJfVk5EMl9JTlNSKTtcXG4rXFx0XFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdFxcdHJldHVybiByZXQ7XFxuK1xcbitcXHRcXHRyZXQgPSBwaHlfd3JpdGVfbW1kKHBoeWRldiwgTURJT19NTURfVkVORDIsIFJUTDgyMjFCX1ZORDJfSU5FUixcXG4rXFx0XFx0XFx0XFx0ICAgIFJUTDgyNjFYX0lOVF9NQVNLX0RFRkFVTFQpO1xcbitcXHRcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0XFx0cmV0dXJuIHJldDtcXG4rXFx0fSBlbHNlIHtcXG4rXFx0XFx0cmV0ID0gcGh5X3dyaXRlX21tZChwaHlkZXYsIE1ESU9fTU1EX1ZFTkQyLCBSVEw4MjIxQl9WTkQyX0lORVIsIDApO1xcbitcXHRcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0XFx0cmV0dXJuIHJldDtcXG4rXFxuK1xcdFxcdHJldCA9IHBoeV9yZWFkX21tZChwaHlkZXYsIE1ESU9fTU1EX1ZFTkQyLCBSVEw4MjIxQl9WTkQyX0lOU1IpO1xcbitcXHRcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0XFx0cmV0dXJuIHJldDtcXG4rXFx0fVxcbitcXG4rXFx0cmV0dXJuIDA7XFxuK31cXG4rXFxuK3N0YXRpYyBpcnFyZXR1cm5fdCBydGw4MjYxeF9oYW5kbGVfaW50ZXJydXB0KHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXFxuK3tcXG4rXFx0aW50IGlycV9zdGF0dXM7XFxuK1xcbitcXHRpcnFfc3RhdHVzID0gcGh5X3JlYWRfbW1kKHBoeWRldiwgTURJT19NTURfVkVORDIsIFJUTDgyMjFCX1ZORDJfSU5TUik7XFxuK1xcdGlmIChpcnFfc3RhdHVzIFxcdTAwM2MgMCkge1xcbitcXHRcXHRwaHlfZXJyb3IocGh5ZGV2KTtcXG4rXFx0XFx0cmV0dXJuIElSUV9OT05FO1xcbitcXHR9XFxuK1xcbitcXHRpZiAoIShpcnFfc3RhdHVzIFxcdTAwMjYgUlRMODI2MVhfSU5UX01BU0tfQUxMKSlcXG4rXFx0XFx0cmV0dXJuIElSUV9OT05FO1xcbitcXG4rXFx0aWYgKGlycV9zdGF0dXMgXFx1MDAyNiAoUlRMODI2MVhfSU5UX0xJTktfQ0hHIHwgUlRMODI2MVhfSU5UX0FVVE9ORUdfRE9ORSB8XFxuK1xcdCAgICBSVEw4MjYxWF9JTlRfQVVUT05FR19FUlJPUiB8IFJUTDgyNjFYX0lOVF9KQUJCRVIpKVxcbitcXHRcXHRwaHlfdHJpZ2dlcl9tYWNoaW5lKHBoeWRldik7XFxuK1xcbitcXHRyZXR1cm4gSVJRX0hBTkRMRUQ7XFxuK31cXG4rXFxuK3N0YXRpYyBpbnQgcnRsODI2MXhfY29uZmlnX2FuZWcoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcXG4re1xcbitcXHR1MTYgYWR2XzFnID0gMDtcXG4rXFx0aW50IHJldDtcXG4rXFxuK1xcdHJldCA9IGdlbnBoeV9jNDVfY29uZmlnX2FuZWcocGh5ZGV2KTtcXG4rXFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdHJldHVybiByZXQ7XFxuK1xcbitcXHRpZiAocGh5ZGV2LVxcdTAwM2VhdXRvbmVnID09IEFVVE9ORUdfRElTQUJMRSlcXG4rXFx0XFx0cmV0dXJuIDA7XFxuK1xcbitcXHRpZiAobGlua21vZGVfdGVzdF9iaXQoRVRIVE9PTF9MSU5LX01PREVfMTAwMGJhc2VUX0Z1bGxfQklULFxcbitcXHRcXHRcXHQgICAgICBwaHlkZXYtXFx1MDAzZWFkdmVydGlzaW5nKSlcXG4rXFx0XFx0YWR2XzFnID0gQURWRVJUSVNFXzEwMDBGVUxMO1xcbitcXHRpZiAobGlua21vZGVfdGVzdF9iaXQoRVRIVE9PTF9MSU5LX01PREVfMTAwMGJhc2VUX0hhbGZfQklULFxcbitcXHRcXHRcXHQgICAgICBwaHlkZXYtXFx1MDAzZWFkdmVydGlzaW5nKSlcXG4rXFx0XFx0YWR2XzFnIHw9IEFEVkVSVElTRV8xMDAwSEFMRjtcXG4rXFxuK1xcdHJldCA9IHBoeV9tb2RpZnlfbW1kX2NoYW5nZWQocGh5ZGV2LCBNRElPX01NRF9WRU5EMixcXG4rXFx0XFx0XFx0XFx0ICAgICBSVEw4MjJYX1ZORDJfQzIyX1JFRyhNSUlfQ1RSTDEwMDApLFxcbitcXHRcXHRcXHRcXHQgICAgIEFEVkVSVElTRV8xMDAwRlVMTCB8IEFEVkVSVElTRV8xMDAwSEFMRixcXG4rXFx0XFx0XFx0XFx0ICAgICBhZHZfMWcpO1xcbitcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0cmV0dXJuIHJldDtcXG4rXFx0aWYgKHJldCBcXHUwMDNlIDApXFxuK1xcdFxcdHJldHVybiBnZW5waHlfYzQ1X3Jlc3RhcnRfYW5lZyhwaHlkZXYpO1xcbitcXG4rXFx0cmV0dXJuIDA7XFxuK31cXG4rXFxuK3N0YXRpYyBpbnQgcnRsODI2MXhfY29uZmlnX2luaXQoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcXG4re1xcbitcXHRzdHJ1Y3QgcnRsODI2MXhfcHJpdiAqcHJpdiA9IHBoeWRldi1cXHUwMDNlcHJpdjtcXG4rXFxuK1xcdC8qIFRoZSBmaXJtd2FyZSBwYXJhbWV0ZXJzIGFyZSBwcmVzZXJ2ZWQgYWNyb3NzIElFRUUgc29mdCByZXNldHMgYW5kXFxuK1xcdCAqIHN1c3BlbmQvcmVzdW1lIGN5Y2xlcy4gUmVsb2FkaW5nIGlzIG9ubHkgbmVjZXNzYXJ5IGFmdGVyIGEgcG93ZXJcXG4rXFx0ICogY3ljbGUgb3IgaGFyZCByZXNldC5cXG4rXFx0ICovXFxuK1xcdGlmIChwcml2LVxcdTAwM2Vmd19uYW1lIFxcdTAwMjZcXHUwMDI2ICFwcml2LVxcdTAwM2Vmd19sb2FkZWQpXFxuK1xcdFxcdHJldHVybiBydGw4MjYxeF9md19sb2FkKHBoeWRldik7XFxuK1xcbitcXHRyZXR1cm4gMDtcXG4rfVxcbitcXG4gc3RhdGljIGludCBydGw4MjF4X3Byb2JlKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXFxuIHtcXG4gXFx0c3RydWN0IGRldmljZSAqZGV2ID0gXFx1MDAyNnBoeWRldi1cXHUwMDNlbWRpby5kZXY7XFxuQEAgLTMwMDEsNiArMzM5NCwxOSBAQCBzdGF0aWMgc3RydWN0IHBoeV9kcml2ZXIgcmVhbHRla19kcnZzW10gPSB7XFxuIFxcdFxcdC5yZXN1bWVcXHRcXHQ9IGdlbnBoeV9yZXN1bWUsXFxuIFxcdFxcdC5yZWFkX21tZFxcdD0gZ2VucGh5X3JlYWRfbW1kX3Vuc3VwcG9ydGVkLFxcbiBcXHRcXHQud3JpdGVfbW1kXFx0PSBnZW5waHlfd3JpdGVfbW1kX3Vuc3VwcG9ydGVkLFxcbitcXHR9LCB7XFxuK1xcdFxcdFBIWV9JRF9NQVRDSF9FWEFDVChSVExfODI2MUNfQ0cpLFxcbitcXHRcXHQubmFtZVxcdFxcdFxcdD0gXFxcIlJlYWx0ZWsgUlRMODI2MUMgMTBHYnBzIFBIWVxcXCIsXFxuK1xcdFxcdC5wcm9iZVxcdFxcdFxcdD0gcnRsODI2MXhfcHJvYmUsXFxuK1xcdFxcdC5jb25maWdfaW5pdFxcdFxcdD0gcnRsODI2MXhfY29uZmlnX2luaXQsXFxuK1xcdFxcdC5nZXRfZmVhdHVyZXNcXHRcXHQ9IHJ0bDgyNjF4X2dldF9mZWF0dXJlcyxcXG4rXFx0XFx0LmNvbmZpZ19hbmVnXFx0XFx0PSBydGw4MjYxeF9jb25maWdfYW5lZyxcXG4rXFx0XFx0LnJlYWRfc3RhdHVzXFx0XFx0PSBydGw4MjYxeF9yZWFkX3N0YXR1cyxcXG4rXFx0XFx0LmNvbmZpZ19pbnRyXFx0XFx0PSBydGw4MjYxeF9jb25maWdfaW50cixcXG4rXFx0XFx0LmhhbmRsZV9pbnRlcnJ1cHRcXHQ9IHJ0bDgyNjF4X2hhbmRsZV9pbnRlcnJ1cHQsXFxuK1xcdFxcdC5zb2Z0X3Jlc2V0XFx0XFx0PSBnZW5waHlfYzQ1X3BtYV9zb2Z0X3Jlc2V0LFxcbitcXHRcXHQuc3VzcGVuZFxcdFxcdD0gZ2VucGh5X2M0NV9wbWFfc3VzcGVuZCxcXG4rXFx0XFx0LnJlc3VtZVxcdFxcdFxcdD0gZ2VucGh5X2M0NV9wbWFfcmVzdW1lLFxcbiBcXHR9LFxcbiB9O1xcbiBcXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9waHkuaCBiL2luY2x1ZGUvbGludXgvcGh5LmhcXG5pbmRleCAxOTlhN2FhYTM0MWJmZC4uZDZiYzE5OTMxZmI4MzUgMTAwNjQ0XFxuLS0tIGEvaW5jbHVkZS9saW51eC9waHkuaFxcbisrKyBiL2luY2x1ZGUvbGludXgvcGh5LmhcXG5AQCAtMjMwOSw2ICsyMzA5LDcgQEAgaW50IGdlbnBoeV9jMzdfcmVhZF9zdGF0dXMoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldiwgYm9vbCAqY2hhbmdlZCk7XFxuIC8qIENsYXVzZSA0NSBQSFkgKi9cXG4gaW50IGdlbnBoeV9jNDVfcmVzdGFydF9hbmVnKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpO1xcbiBpbnQgZ2VucGh5X2M0NV9jaGVja19hbmRfcmVzdGFydF9hbmVnKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYsIGJvb2wgcmVzdGFydCk7XFxuK2ludCBnZW5waHlfYzQ1X3BtYV9zb2Z0X3Jlc2V0KHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpO1xcbiBpbnQgZ2VucGh5X2M0NV9hbmVnX2RvbmUoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldik7XFxuIGludCBnZW5waHlfYzQ1X3JlYWRfbGluayhzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KTtcXG4gaW50IGdlbnBoeV9jNDVfcmVhZF9scGEoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldik7XFxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvdWFwaS9saW51eC9tZGlvLmggYi9pbmNsdWRlL3VhcGkvbGludXgvbWRpby5oXFxuaW5kZXggYjI1NDFjOTQ4ZmMxZWIuLjA2ZjRiYzNjMjBjNzE3IDEwMDY0NFxcbi0tLSBhL2luY2x1ZGUvdWFwaS9saW51eC9tZGlvLmhcXG4rKysgYi9pbmNsdWRlL3VhcGkvbGludXgvbWRpby5oXFxuQEAgLTMzMiw4ICszMzIsMTMgQEBcXG4gI2RlZmluZSBNRElPX0FOXzEwR0JUX0NUUkxfQURWMl81R1xcdDB4MDA4MFxcdC8qIEFkdmVydGlzZSAyLjVHQkFTRS1UICovXFxuICNkZWZpbmUgTURJT19BTl8xMEdCVF9DVFJMX0FEVjVHXFx0MHgwMTAwXFx0LyogQWR2ZXJ0aXNlIDVHQkFTRS1UICovXFxuICNkZWZpbmUgTURJT19BTl8xMEdCVF9DVFJMX0FEVjEwR1xcdDB4MTAwMFxcdC8qIEFkdmVydGlzZSAxMEdCQVNFLVQgKi9cXG4rI2RlZmluZSBNRElPX0FOXzEwR0JUX0NUUkxfTVNfRU5BQkxFXFx0MHg4MDAwXFx0LyogTWFzdGVyL3NsYXZlIG1hbnVhbCBjb25maWcgZW5hYmxlICovXFxuKyNkZWZpbmUgTURJT19BTl8xMEdCVF9DVFJMX01TX1ZBTFVFXFx0MHg0MDAwXFx0LyogTWFzdGVyL3NsYXZlIGNvbmZpZyB2YWx1ZSAoMT1NYXN0ZXIpICovXFxuKyNkZWZpbmUgTURJT19BTl8xMEdCVF9DVFJMX01TX1BPUlRfVFlQRVxcdDB4MjAwMFxcdC8qIE1hc3RlciBQcmVmZXJyZWQgVHlwZSAqL1xcbiBcXG4gLyogQU4gMTBHQkFTRS1UIHN0YXR1cyByZWdpc3Rlci4gKi9cXG4rI2RlZmluZSBNRElPX0FOXzEwR0JUX1NUQVRfTVNfRkFVTFRcXHQweDgwMDBcXHQvKiBNYXN0ZXIvc2xhdmUgZmF1bHQgKi9cXG4rI2RlZmluZSBNRElPX0FOXzEwR0JUX1NUQVRfTVNfUkVTXFx0MHg0MDAwXFx0LyogTWFzdGVyL3NsYXZlIHJlc29sdXRpb24gKDE9TWFzdGVyKSAqL1xcbiAjZGVmaW5lIE1ESU9fQU5fMTBHQlRfU1RBVF9MUDJfNUdcXHQweDAwMjAgIC8qIExQIGlzIDIuNUdCVCBjYXBhYmxlICovXFxuICNkZWZpbmUgTURJT19BTl8xMEdCVF9TVEFUX0xQNUdcXHRcXHQweDAwNDAgIC8qIExQIGlzIDVHQlQgY2FwYWJsZSAqL1xcbiAjZGVmaW5lIE1ESU9fQU5fMTBHQlRfU1RBVF9MUFRSUlxcdDB4MDIwMFxcdC8qIExQIHRyYWluaW5nIHJlc2V0IHJlcS4gKi9cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDNUMDc6MzU6MDYuNTY1ODM3NDY0WiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoyNDY5OTM1OTI4NDcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiUkVBTFRFS19QSFlcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJydGw4MjYxeF9wcm9iZVwiLFxuICAgIFwicnRsODI2MXhfZ2V0X2ZlYXR1cmVzXCIsXG4gICAgXCJydGw4MjYxeF9yZWFkX3N0YXR1c1wiLFxuICAgIFwicnRsODI2MXhfdmVyaWZ5X2Zpcm13YXJlXCIsXG4gICAgXCJydGw4MjYxeF9md19leGVjdXRlX2VudHJ5XCIsXG4gICAgXCJydGw4MjYxeF9md19sb2FkXCIsXG4gICAgXCJydGw4MjYxeF9jb25maWdfaW50clwiLFxuICAgIFwicnRsODI2MXhfaGFuZGxlX2ludGVycnVwdFwiLFxuICAgIFwicnRsODI2MXhfY29uZmlnX2FuZWdcIixcbiAgICBcInJ0bDgyNjF4X2NvbmZpZ19pbml0XCIsXG4gICAgXCJnZW5waHlfYzQ1X3BtYV9zb2Z0X3Jlc2V0XCIsXG4gICAgXCJnZW5waHlfYzQ1X2FuX3NldHVwX21hc3Rlcl9zbGF2ZVwiLFxuICAgIFwiZ2VucGh5X2M0NV9yZWFkX21hc3Rlcl9zbGF2ZVwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHMgc3VwcG9ydCBmb3IgdGhlIFJlYWx0ZWsgUlRMODI2MUMgMTBHYnBzIFBIWSwgaW5jbHVkaW5nIGZpcm13YXJlIGxvYWRpbmcgYW5kIHBhcnNpbmcsIGFuZCBuZXcgQ2xhdXNlIDQ1IG1hc3Rlci9zbGF2ZSBjb25maWd1cmF0aW9uIGZ1bmN0aW9ucy4gVGhpcyBjb2RlIGlzIHJlYWNoYWJsZSBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgYnkgZW11bGF0aW5nIGEgVVNCIG5ldHdvcmsgYWRhcHRlciB0aGF0IHJlZ2lzdGVycyBhbiBNRElPIGJ1cyBhbmQgcmVzcG9uZHMgd2l0aCB0aGUgUlRMODI2MUMgUEhZIElELiBUaGUgZmlybXdhcmUgcGFyc2luZyBsb2dpYyBpcyBwYXJ0aWN1bGFybHkgaW50ZXJlc3RpbmcgZm9yIGZ1enppbmcgYXMgaXQgcHJvY2Vzc2VzIGV4dGVybmFsIGRhdGEuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmVcbmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHlcbnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuXG5cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6XG4tIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuXG4tIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLlxuLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuXG4tIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSxcbmV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cblxuSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaFxudG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuXG5cbldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOlxuMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy5cbiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBEbyBub3QgbGlzdCB0b28gZ2VuZXJpYyBjb25maWdzICh3ZSBhbHJlYWR5IGhhdmUgdGhlbSBlbmFibGVkKS4gT25seSBsaXN0IHRob3NlIHRoYXRcbiAgIHNwZWNpZmljYWxseSBjb3ZlciB0aGUgbW9kaWZpZWQgY29kZS4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzIG91dHB1dCBhcnJheSxcbiAgIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgMDYxZDNmNzMxNGQ0ZjJiMDI2ZWE1MTBiZjgxMWFlZjJiNWE3OWZlZVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBGcmkgSnVsIDMgMDc6MzU6MDQgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9waHkvcGh5LWM0NS5jIGIvZHJpdmVycy9uZXQvcGh5L3BoeS1jNDUuY1xuaW5kZXggMTI2OTUxNzQxNDI4OGYuLjg3MDkyMDMxMWY5YTAxIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvcGh5L3BoeS1jNDUuY1xuKysrIGIvZHJpdmVycy9uZXQvcGh5L3BoeS1jNDUuY1xuQEAgLTM4NCw2ICszODQsMTE5IEBAIGludCBnZW5waHlfYzQ1X2NoZWNrX2FuZF9yZXN0YXJ0X2FuZWcoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldiwgYm9vbCByZXN0YXJ0KVxuIH1cbiBFWFBPUlRfU1lNQk9MX0dQTChnZW5waHlfYzQ1X2NoZWNrX2FuZF9yZXN0YXJ0X2FuZWcpO1xuIFxuKy8qKlxuKyAqIGdlbnBoeV9jNDVfcG1hX3NvZnRfcmVzZXQgLSBzb2Z0d2FyZSByZXNldCB0aGUgUEhZIHZpYSBDbGF1c2UgNDUgUE1BL1BNRCBjb250cm9sIHJlZ2lzdGVyXG4rICogQHBoeWRldjogdGFyZ2V0IHBoeV9kZXZpY2Ugc3RydWN0XG4rICpcbisgKiBSZXR1cm46IDAgb24gc3VjY2VzcywgbmVnYXRpdmUgZXJybm8gb24gZmFpbHVyZS5cbisgKi9cbitpbnQgZ2VucGh5X2M0NV9wbWFfc29mdF9yZXNldChzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxuK3tcbitcdGludCByZXQsIHZhbDtcbitcbitcdHJldCA9IHBoeV9zZXRfYml0c19tbWQocGh5ZGV2LCBNRElPX01NRF9QTUFQTUQsIE1ESU9fQ1RSTDEsXG4rXHRcdFx0ICAgICAgIE1ESU9fQ1RSTDFfUkVTRVQpO1xuK1x0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0cmV0dXJuIHJldDtcbitcbitcdHJldHVybiBwaHlfcmVhZF9tbWRfcG9sbF90aW1lb3V0KHBoeWRldiwgTURJT19NTURfUE1BUE1ELFxuK1x0XHRcdFx0XHQgTURJT19DVFJMMSwgdmFsLFxuK1x0XHRcdFx0XHQgISh2YWwgXHUwMDI2IE1ESU9fQ1RSTDFfUkVTRVQpLFxuK1x0XHRcdFx0XHQgNTAwMCwgNjAwMDAwLCB0cnVlKTtcbit9XG4rRVhQT1JUX1NZTUJPTF9HUEwoZ2VucGh5X2M0NV9wbWFfc29mdF9yZXNldCk7XG4rXG4rLyoqXG4rICogZ2VucGh5X2M0NV9hbl9zZXR1cF9tYXN0ZXJfc2xhdmUgLSBDb25maWd1cmUgTWFzdGVyL1NsYXZlIHNldHRpbmcgZm9yIEM0NSBQSFlzXG4rICogQHBoeWRldjogdGFyZ2V0IHBoeV9kZXZpY2Ugc3RydWN0XG4rICpcbisgKiBEZXNjcmlwdGlvbjogQ29uZmlndXJlIHRoZSBmb3JjZWQgb3IgcHJlZmVycmVkIE1hc3Rlci9TbGF2ZSByb2xlXG4rICogMTBHQkFTRS1UIGNvbnRyb2wgcmVnaXN0ZXIgKE1NRCA3LCBSZWdpc3RlciAweDAwMjApIGFjY29yZGluZyB0b1xuKyAqIElFRUUgODAyLjMgc3RhbmRhcmRzLlxuKyAqXG4rICogUmV0dXJuOiBuZWdhdGl2ZSBlcnJubyBjb2RlIG9uIGZhaWx1cmUsIDAgaWYgTWFzdGVyL1NsYXZlIGRpZG4ndCBjaGFuZ2UsXG4rICogb3IgMSBpZiBNYXN0ZXIvU2xhdmUgbW9kZXMgY2hhbmdlZC5cbisgKi9cbitzdGF0aWMgaW50IGdlbnBoeV9jNDVfYW5fc2V0dXBfbWFzdGVyX3NsYXZlKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXG4re1xuK1x0dTE2IGN0bCA9IDA7XG4rXG4rXHRzd2l0Y2ggKHBoeWRldi1cdTAwM2VtYXN0ZXJfc2xhdmVfc2V0KSB7XG4rXHRjYXNlIE1BU1RFUl9TTEFWRV9DRkdfTUFTVEVSX1BSRUZFUlJFRDpcbitcdFx0Y3RsID0gTURJT19BTl8xMEdCVF9DVFJMX01TX1BPUlRfVFlQRTtcbitcdFx0YnJlYWs7XG4rXHRjYXNlIE1BU1RFUl9TTEFWRV9DRkdfU0xBVkVfUFJFRkVSUkVEOlxuK1x0XHRicmVhaztcbitcdGNhc2UgTUFTVEVSX1NMQVZFX0NGR19NQVNURVJfRk9SQ0U6XG4rXHRcdGN0bCA9IE1ESU9fQU5fMTBHQlRfQ1RSTF9NU19FTkFCTEUgfCBNRElPX0FOXzEwR0JUX0NUUkxfTVNfVkFMVUU7XG4rXHRcdGJyZWFrO1xuK1x0Y2FzZSBNQVNURVJfU0xBVkVfQ0ZHX1NMQVZFX0ZPUkNFOlxuK1x0XHRjdGwgPSBNRElPX0FOXzEwR0JUX0NUUkxfTVNfRU5BQkxFO1xuK1x0XHRicmVhaztcbitcdGNhc2UgTUFTVEVSX1NMQVZFX0NGR19VTktOT1dOOlxuK1x0Y2FzZSBNQVNURVJfU0xBVkVfQ0ZHX1VOU1VQUE9SVEVEOlxuK1x0XHRyZXR1cm4gMDtcbitcdGRlZmF1bHQ6XG4rXHRcdHBoeWRldl93YXJuKHBoeWRldiwgXCJVbnN1cHBvcnRlZCBNYXN0ZXIvU2xhdmUgbW9kZVxcblwiKTtcbitcdFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xuK1x0fVxuK1xuK1x0cmV0dXJuIHBoeV9tb2RpZnlfbW1kX2NoYW5nZWQocGh5ZGV2LCBNRElPX01NRF9BTiwgTURJT19BTl8xMEdCVF9DVFJMLFxuK1x0XHRcdFx0ICAgICAgTURJT19BTl8xMEdCVF9DVFJMX01TX0VOQUJMRSB8XG4rXHRcdFx0XHQgICAgICBNRElPX0FOXzEwR0JUX0NUUkxfTVNfVkFMVUUgfFxuK1x0XHRcdFx0ICAgICAgTURJT19BTl8xMEdCVF9DVFJMX01TX1BPUlRfVFlQRSwgY3RsKTtcbit9XG4rXG4rLyoqXG4rICogZ2VucGh5X2M0NV9yZWFkX21hc3Rlcl9zbGF2ZSAtIHJlYWQgbWFzdGVyL3NsYXZlIHN0YXR1c1xuKyAqIEBwaHlkZXY6IHRhcmdldCBwaHlfZGV2aWNlIHN0cnVjdFxuKyAqXG4rICogRGVzY3JpcHRpb246IFJlYWQgdGhlIE1hc3Rlci9TbGF2ZSBjb25maWd1cmF0aW9uIGFuZCBzdGF0dXNcbisgKiBmcm9tIDEwR0JBU0UtVCBjb250cm9sL3N0YXR1cyByZWdpc3RlcnMgKE1NRCA3LCBSZWcgMHgwMDIwIGFuZCAweDAwMjEpLlxuKyAqXG4rICogUmV0dXJuOiAwIG9uIHN1Y2Nlc3MsIG9yIGEgbmVnYXRpdmUgZXJyb3IgY29kZSBvbiBmYWlsdXJlLlxuKyAqL1xuK3N0YXRpYyBpbnQgZ2VucGh5X2M0NV9yZWFkX21hc3Rlcl9zbGF2ZShzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxuK3tcbitcdGludCB2YWw7XG4rXG4rXHRwaHlkZXYtXHUwMDNlbWFzdGVyX3NsYXZlX2dldCA9IE1BU1RFUl9TTEFWRV9DRkdfVU5LTk9XTjtcbitcdHBoeWRldi1cdTAwM2VtYXN0ZXJfc2xhdmVfc3RhdGUgPSBNQVNURVJfU0xBVkVfU1RBVEVfVU5LTk9XTjtcbitcbitcdHZhbCA9IHBoeV9yZWFkX21tZChwaHlkZXYsIE1ESU9fTU1EX0FOLCBNRElPX0FOXzEwR0JUX0NUUkwpO1xuK1x0aWYgKHZhbCBcdTAwM2MgMClcbitcdFx0cmV0dXJuIHZhbDtcbitcbitcdGlmICh2YWwgXHUwMDI2IE1ESU9fQU5fMTBHQlRfQ1RSTF9NU19FTkFCTEUpIHtcbitcdFx0aWYgKHZhbCBcdTAwMjYgTURJT19BTl8xMEdCVF9DVFJMX01TX1ZBTFVFKVxuK1x0XHRcdHBoeWRldi1cdTAwM2VtYXN0ZXJfc2xhdmVfZ2V0ID0gTUFTVEVSX1NMQVZFX0NGR19NQVNURVJfRk9SQ0U7XG4rXHRcdGVsc2VcbitcdFx0XHRwaHlkZXYtXHUwMDNlbWFzdGVyX3NsYXZlX2dldCA9IE1BU1RFUl9TTEFWRV9DRkdfU0xBVkVfRk9SQ0U7XG4rXHR9IGVsc2Uge1xuK1x0XHRpZiAodmFsIFx1MDAyNiBNRElPX0FOXzEwR0JUX0NUUkxfTVNfUE9SVF9UWVBFKVxuK1x0XHRcdHBoeWRldi1cdTAwM2VtYXN0ZXJfc2xhdmVfZ2V0ID0gTUFTVEVSX1NMQVZFX0NGR19NQVNURVJfUFJFRkVSUkVEO1xuK1x0XHRlbHNlXG4rXHRcdFx0cGh5ZGV2LVx1MDAzZW1hc3Rlcl9zbGF2ZV9nZXQgPSBNQVNURVJfU0xBVkVfQ0ZHX1NMQVZFX1BSRUZFUlJFRDtcbitcdH1cbitcbitcdHZhbCA9IHBoeV9yZWFkX21tZChwaHlkZXYsIE1ESU9fTU1EX0FOLCBNRElPX0FOXzEwR0JUX1NUQVQpO1xuK1x0aWYgKHZhbCBcdTAwM2MgMClcbitcdFx0cmV0dXJuIHZhbDtcbitcbitcdGlmICh2YWwgXHUwMDI2IE1ESU9fQU5fMTBHQlRfU1RBVF9NU19GQVVMVCkge1xuK1x0XHRwaHlkZXYtXHUwMDNlbWFzdGVyX3NsYXZlX3N0YXRlID0gTUFTVEVSX1NMQVZFX1NUQVRFX0VSUjtcbitcdH0gZWxzZSBpZiAocGh5ZGV2LVx1MDAzZWxpbmspIHtcbitcdFx0aWYgKHZhbCBcdTAwMjYgTURJT19BTl8xMEdCVF9TVEFUX01TX1JFUylcbitcdFx0XHRwaHlkZXYtXHUwMDNlbWFzdGVyX3NsYXZlX3N0YXRlID0gTUFTVEVSX1NMQVZFX1NUQVRFX01BU1RFUjtcbitcdFx0ZWxzZVxuK1x0XHRcdHBoeWRldi1cdTAwM2VtYXN0ZXJfc2xhdmVfc3RhdGUgPSBNQVNURVJfU0xBVkVfU1RBVEVfU0xBVkU7XG4rXHR9IGVsc2Uge1xuK1x0XHRwaHlkZXYtXHUwMDNlbWFzdGVyX3NsYXZlX3N0YXRlID0gTUFTVEVSX1NMQVZFX1NUQVRFX1VOS05PV047XG4rXHR9XG4rXG4rXHRyZXR1cm4gMDtcbit9XG4rXG4gLyoqXG4gICogZ2VucGh5X2M0NV9hbmVnX2RvbmUgLSByZXR1cm4gYXV0by1uZWdvdGlhdGlvbiBjb21wbGV0ZSBzdGF0dXNcbiAgKiBAcGh5ZGV2OiB0YXJnZXQgcGh5X2RldmljZSBzdHJ1Y3RcbkBAIC0xMTkyLDYgKzEzMDUsMTAgQEAgaW50IGdlbnBoeV9jNDVfcmVhZF9zdGF0dXMoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcbiBcdFx0XHRyZXQgPSBnZW5waHlfYzQ1X2Jhc2V0MV9yZWFkX3N0YXR1cyhwaHlkZXYpO1xuIFx0XHRcdGlmIChyZXQgXHUwMDNjIDApXG4gXHRcdFx0XHRyZXR1cm4gcmV0O1xuK1x0XHR9IGVsc2Uge1xuK1x0XHRcdHJldCA9IGdlbnBoeV9jNDVfcmVhZF9tYXN0ZXJfc2xhdmUocGh5ZGV2KTtcbitcdFx0XHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRcdFx0cmV0dXJuIHJldDtcbiBcdFx0fVxuIFxuIFx0XHRwaHlfcmVzb2x2ZV9hbmVnX2xpbmttb2RlKHBoeWRldik7XG5AQCAtMTIyNSw2ICsxMzQyLDE0IEBAIGludCBnZW5waHlfYzQ1X2NvbmZpZ19hbmVnKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXG4gXHRpZiAocmV0IFx1MDAzZSAwKVxuIFx0XHRjaGFuZ2VkID0gdHJ1ZTtcbiBcbitcdGlmICghZ2VucGh5X2M0NV9iYXNldDFfYWJsZShwaHlkZXYpKSB7XG4rXHRcdHJldCA9IGdlbnBoeV9jNDVfYW5fc2V0dXBfbWFzdGVyX3NsYXZlKHBoeWRldik7XG4rXHRcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdFx0cmV0dXJuIHJldDtcbitcdFx0aWYgKHJldCBcdTAwM2UgMClcbitcdFx0XHRjaGFuZ2VkID0gdHJ1ZTtcbitcdH1cbitcbiBcdHJldHVybiBnZW5waHlfYzQ1X2NoZWNrX2FuZF9yZXN0YXJ0X2FuZWcocGh5ZGV2LCBjaGFuZ2VkKTtcbiB9XG4gRVhQT1JUX1NZTUJPTF9HUEwoZ2VucGh5X2M0NV9jb25maWdfYW5lZyk7XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvcGh5L3JlYWx0ZWsvcmVhbHRla19tYWluLmMgYi9kcml2ZXJzL25ldC9waHkvcmVhbHRlay9yZWFsdGVrX21haW4uY1xuaW5kZXggMjcyNjg4MTFmNTY0ZjIuLjY4YTJkZTBiMmJkM2JhIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvcGh5L3JlYWx0ZWsvcmVhbHRla19tYWluLmNcbisrKyBiL2RyaXZlcnMvbmV0L3BoeS9yZWFsdGVrL3JlYWx0ZWtfbWFpbi5jXG5AQCAtOCw3ICs4LDkgQEBcbiAgKiBDb3B5cmlnaHQgKGMpIDIwMDQgRnJlZXNjYWxlIFNlbWljb25kdWN0b3IsIEluYy5cbiAgKi9cbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9iaXRvcHMuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L2NyYzMyLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9ldGh0b29sX25ldGxpbmsuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L2Zpcm13YXJlLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9vZi5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvcGh5LmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9wbV93YWtlaXJxLmhcdTAwM2VcbkBAIC0xNDEsNiArMTQzLDEwIEBAXG4gI2RlZmluZSBSVEw4MjExRl9QSFlTSUNBTF9BRERSX1dPUkQxXHRcdDE3XG4gI2RlZmluZSBSVEw4MjExRl9QSFlTSUNBTF9BRERSX1dPUkQyXHRcdDE4XG4gXG4rI2RlZmluZSBSVEw4MjYxWF9FWFRfQUREUl9SRUdcdFx0XHQweGE0MzZcbisjZGVmaW5lIFJUTDgyNjFYX0VYVF9EQVRBX1JFR1x0XHRcdDB4YTQzOFxuKyNkZWZpbmUgUlRMXzgyNjFYX1NVQl9QSFlfSURfQUREUlx0XHQweDgwMWRcbitcbiAjZGVmaW5lIFJUTDgyMlhfVk5EMV9TRVJERVNfT1BUSU9OXHRcdFx0MHg2OTdhXG4gI2RlZmluZSBSVEw4MjJYX1ZORDFfU0VSREVTX09QVElPTl9NT0RFX01BU0tcdFx0R0VOTUFTSyg1LCAwKVxuICNkZWZpbmUgUlRMODIyWF9WTkQxX1NFUkRFU19PUFRJT05fTU9ERV8yNTAwQkFTRVhfU0dNSUlcdFx0MFxuQEAgLTI1MSw2ICsyNTcsNjkgQEBcbiAjZGVmaW5lIFJUTF84MjIxQl9WTV9DR1x0XHRcdFx0MHgwMDFjYzg0YVxuICNkZWZpbmUgUlRMXzgyNTFCXHRcdFx0XHQweDAwMWNjODYyXG4gI2RlZmluZSBSVExfODI2MUNcdFx0XHRcdDB4MDAxY2M4OTBcbisjZGVmaW5lIFJUTF84MjYxQ19DR1x0XHRcdFx0MHgwMDFjYzg5OFxuK1xuKyNkZWZpbmUgUlRMODI2MUNfQ0VfTU9ERUxcdFx0MHgwMFxuKyNkZWZpbmUgUlRMODI2MVhfSU5UX0FVVE9ORUdfRVJST1JcdEJJVCgwKVxuKyNkZWZpbmUgUlRMODI2MVhfSU5UX1BBR0VfUkVDVlx0XHRCSVQoMilcbisjZGVmaW5lIFJUTDgyNjFYX0lOVF9BVVRPTkVHX0RPTkVcdEJJVCgzKVxuKyNkZWZpbmUgUlRMODI2MVhfSU5UX0xJTktfQ0hHXHRcdEJJVCg0KVxuKyNkZWZpbmUgUlRMODI2MVhfSU5UX1BIWV9SRUdfQUNDRVNTXHRCSVQoNSlcbisjZGVmaW5lIFJUTDgyNjFYX0lOVF9QTUVcdFx0QklUKDcpXG4rI2RlZmluZSBSVEw4MjYxWF9JTlRfQUxEUFNfQ0hHXHRcdEJJVCg5KVxuKyNkZWZpbmUgUlRMODI2MVhfSU5UX0pBQkJFUlx0XHRCSVQoMTApXG4rXG4rI2RlZmluZSBSVEw4MjYxWF9JTlRfTUFTS19ERUZBVUxUXHQoUlRMODI2MVhfSU5UX0FVVE9ORUdfRE9ORSB8IFxcXG4rXHRcdFx0XHRcdCBSVEw4MjYxWF9JTlRfTElOS19DSEcgfCBcXFxuK1x0XHRcdFx0XHQgUlRMODI2MVhfSU5UX0FVVE9ORUdfRVJST1IgfCBcXFxuK1x0XHRcdFx0XHQgUlRMODI2MVhfSU5UX0pBQkJFUilcbitcbisjZGVmaW5lIFJUTDgyNjFYX0lOVF9NQVNLX0FMTFx0XHQoUlRMODI2MVhfSU5UX0FVVE9ORUdfRVJST1IgfCBcXFxuK1x0XHRcdFx0XHQgUlRMODI2MVhfSU5UX1BBR0VfUkVDViB8IFxcXG4rXHRcdFx0XHRcdCBSVEw4MjYxWF9JTlRfQVVUT05FR19ET05FIHwgXFxcbitcdFx0XHRcdFx0IFJUTDgyNjFYX0lOVF9MSU5LX0NIRyB8IFxcXG4rXHRcdFx0XHRcdCBSVEw4MjYxWF9JTlRfUEhZX1JFR19BQ0NFU1MgfCBcXFxuK1x0XHRcdFx0XHQgUlRMODI2MVhfSU5UX1BNRSB8IFxcXG4rXHRcdFx0XHRcdCBSVEw4MjYxWF9JTlRfQUxEUFNfQ0hHIHwgXFxcbitcdFx0XHRcdFx0IFJUTDgyNjFYX0lOVF9KQUJCRVIpXG4rXG4rI2RlZmluZSBGV19NQUlOX01BR0lDXHRcdFx0MHg1MjU0NEMzOFxuKyNkZWZpbmUgRldfU1VCX01BR0lDXzgyNjFDXHRcdDB4MzIzNjMxNDNcbisjZGVmaW5lIFJUTDgyNjFYX1BPTExfVElNRU9VVF9NU1x0MTAwXG4rI2RlZmluZSBSVEw4MjYxWF9NQVhfTU1EX0RFVlx0XHQzMVxuK1xuKyNkZWZpbmUgUlRMODI2MUNfQ0VfRldfTkFNRVx0XCJydGxfbmljL3J0bDgyNjFjLmJpblwiXG4rTU9EVUxFX0ZJUk1XQVJFKFJUTDgyNjFDX0NFX0ZXX05BTUUpO1xuK1xuK2VudW0gcnRsODI2MXhfZndfb3Age1xuK1x0T1BfV1JJVEUgPSAweDAwLFx0LyogV3JpdGUgKi9cbitcdE9QX1BPTEwgID0gMHgwMixcdC8qIFBvbGxpbmcgKi9cbit9O1xuK1xuK3N0cnVjdCBydGw4MjYxeF9md19oZWFkZXIge1xuK1x0X19sZTMyIG1haW5fbWFnaWM7XHQvKiBNYWluIG1hZ2ljIG51bWJlciAqL1xuK1x0X19sZTMyIHN1Yl9tYWdpYztcdC8qIFN1YiBtYWdpYyBudW1iZXIgKi9cbitcdF9fbGUxNiB2ZXJzaW9uX21ham9yO1x0LyogTWFqb3IgdmVyc2lvbiAqL1xuK1x0X19sZTE2IHZlcnNpb25fbWlub3I7XHQvKiBNaW5vciB2ZXJzaW9uICovXG4rXHRfX2xlMTYgbnVtX2VudHJpZXM7XHQvKiBOdW1iZXIgb2YgZW50cmllcyAqL1xuK1x0X19sZTE2IHJlc2VydmVkO1x0LyogUmVzZXJ2ZWQgKi9cbitcdF9fbGUzMiBjcmMzMjtcdFx0LyogQ1JDMzIgY2hlY2tzdW0gKi9cbit9O1xuK1xuK3N0cnVjdCBydGw4MjYxeF9md19lbnRyeSB7XG4rXHRfX3U4ICB0eXBlO1x0XHQvKiBPcGVyYXRpb24gdHlwZSAoT1BfKikgKi9cbitcdF9fdTggIGRldjtcdFx0LyogTU1EIGRldmljZSAqL1xuK1x0X19sZTE2IGFkZHI7XHRcdC8qIFJlZ2lzdGVyIGFkZHJlc3MgKi9cbitcdF9fdTggIG1zYjtcdFx0LyogTVNCIGJpdCBwb3NpdGlvbiAqL1xuK1x0X191OCAgbHNiO1x0XHQvKiBMU0IgYml0IHBvc2l0aW9uICovXG4rXHRfX2xlMTYgdmFsdWU7XHRcdC8qIFZhbHVlIHRvIHdyaXRlL2NvbXBhcmUgKi9cbitcdF9fbGUxNiB0aW1lb3V0X21zO1x0LyogUG9sbCB0aW1lb3V0IGluIG1pbGxpc2Vjb25kcyAqL1xuK1x0X191OCAgcG9sbF9zZXQ7XHRcdC8qIFBvbGwgdW50aWwgZXF1YWwgKDEpIG9yIG5vdCBlcXVhbCAoMCkgKi9cbitcdF9fdTggIHJlc2VydmVkO1x0XHQvKiBSZXNlcnZlZCAqL1xuK307XG4rXG4rI2RlZmluZSBGV19IRUFERVJfU0laRVx0XHRzaXplb2Yoc3RydWN0IHJ0bDgyNjF4X2Z3X2hlYWRlcilcbisjZGVmaW5lIEZXX0VOVFJZX1NJWkVcdFx0c2l6ZW9mKHN0cnVjdCBydGw4MjYxeF9md19lbnRyeSlcbiBcbiAvKiBSVEw4MjExRSBhbmQgUlRMODIxMUYgc3VwcG9ydCB1cCB0byB0aHJlZSBMRURzICovXG4gI2RlZmluZSBSVEw4MjExeF9MRURfQ09VTlRcdFx0XHQzXG5AQCAtMjcwLDYgKzMzOSwxMSBAQCBzdHJ1Y3QgcnRsODIxeF9wcml2IHtcbiBcdHUxNiBpbmVyO1xuIH07XG4gXG4rc3RydWN0IHJ0bDgyNjF4X3ByaXYge1xuK1x0Y29uc3QgY2hhciAqZndfbmFtZTtcbitcdGJvb2wgZndfbG9hZGVkO1xuK307XG4rXG4gc3RhdGljIGludCBydGw4MjF4X3JlYWRfcGFnZShzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxuIHtcbiBcdHJldHVybiBfX3BoeV9yZWFkKHBoeWRldiwgUlRMODIxeF9QQUdFX1NFTEVDVCk7XG5AQCAtMzEwLDYgKzM4NCwzMjUgQEAgc3RhdGljIGludCBydGw4MjF4X21vZGlmeV9leHRfcGFnZShzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2LCB1MTYgZXh0X3BhZ2UsXG4gXHRyZXR1cm4gcGh5X3Jlc3RvcmVfcGFnZShwaHlkZXYsIG9sZHBhZ2UsIHJldCk7XG4gfVxuIFxuK3N0YXRpYyBpbnQgcnRsODI2MXhfcHJvYmUoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcbit7XG4rXHRzdHJ1Y3QgZGV2aWNlICpkZXYgPSBcdTAwMjZwaHlkZXYtXHUwMDNlbWRpby5kZXY7XG4rXHRzdHJ1Y3QgcnRsODI2MXhfcHJpdiAqcHJpdjtcbitcdGludCBzdWJfcGh5X2lkLCByZXQ7XG4rXG4rXHRwcml2ID0gZGV2bV9remFsbG9jKGRldiwgc2l6ZW9mKCpwcml2KSwgR0ZQX0tFUk5FTCk7XG4rXHRpZiAoIXByaXYpXG4rXHRcdHJldHVybiAtRU5PTUVNO1xuK1xuK1x0cGh5ZGV2LVx1MDAzZXByaXYgPSBwcml2O1xuK1xuK1x0cmV0ID0gcGh5X3dyaXRlX21tZChwaHlkZXYsIE1ESU9fTU1EX1ZFTkQyLCBSVEw4MjYxWF9FWFRfQUREUl9SRUcsXG4rXHRcdFx0ICAgIFJUTF84MjYxWF9TVUJfUEhZX0lEX0FERFIpO1xuK1x0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0cmV0dXJuIHJldDtcbitcbitcdHJldCA9IHBoeV9yZWFkX21tZChwaHlkZXYsIE1ESU9fTU1EX1ZFTkQyLCBSVEw4MjYxWF9FWFRfREFUQV9SRUcpO1xuK1x0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0cmV0dXJuIHJldDtcbitcbitcdHN1Yl9waHlfaWQgPSAocmV0IFx1MDAzZVx1MDAzZSA4KSBcdTAwMjYgMHhmZjtcbitcbitcdHN3aXRjaCAoc3ViX3BoeV9pZCkge1xuK1x0Y2FzZSBSVEw4MjYxQ19DRV9NT0RFTDpcbitcdFx0cHJpdi1cdTAwM2Vmd19uYW1lID0gUlRMODI2MUNfQ0VfRldfTkFNRTtcbitcdFx0cGh5ZGV2X2luZm8ocGh5ZGV2LCBcIlJUTDgyNjFDIGRldGVjdGVkIChzdWJfaWQgMHglMDJ4KVxcblwiLCBzdWJfcGh5X2lkKTtcbitcdFx0YnJlYWs7XG4rXG4rXHRkZWZhdWx0OlxuK1x0XHRwaHlkZXZfd2FybihwaHlkZXYsIFwiVW5rbm93biBzdWJfaWQgMHglMDJ4LCBkZWZhdWx0IGJlaGF2aW9yXFxuXCIsIHN1Yl9waHlfaWQpO1xuK1x0XHRyZXR1cm4gLUVOT0RFVjtcbitcdH1cbitcbitcdHJldHVybiAwO1xuK31cbitcbitzdGF0aWMgaW50IHJ0bDgyNjF4X2dldF9mZWF0dXJlcyhzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxuK3tcbitcdGludCByZXQ7XG4rXG4rXHRyZXQgPSBnZW5waHlfYzQ1X3BtYV9yZWFkX2FiaWxpdGllcyhwaHlkZXYpO1xuK1x0aWYgKHJldClcbitcdFx0cmV0dXJuIHJldDtcbitcdC8qXG4rXHQgKiBTdXBwbGVtZW50IE11bHRpLUdpZyBzcGVlZHMgdGhhdCBtYXkgbm90IGJlIGF1dG9tYXRpY2FsbHkgZGV0ZWN0ZWRcbitcdCAqIFJUTDgyNjFYIHN1cHBvcnRzIDIuNUcvNUcgaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgMTBHXG4rXHQgKi9cbitcdGxpbmttb2RlX3NldF9iaXQoRVRIVE9PTF9MSU5LX01PREVfMjUwMGJhc2VUX0Z1bGxfQklULFxuK1x0XHRcdCBwaHlkZXYtXHUwMDNlc3VwcG9ydGVkKTtcbitcdGxpbmttb2RlX3NldF9iaXQoRVRIVE9PTF9MSU5LX01PREVfNTAwMGJhc2VUX0Z1bGxfQklULFxuK1x0XHRcdCBwaHlkZXYtXHUwMDNlc3VwcG9ydGVkKTtcbitcbitcdHJldHVybiAwO1xuK31cbitcbitzdGF0aWMgaW50IHJ0bDgyNjF4X3JlYWRfc3RhdHVzKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXG4re1xuK1x0aW50IHJldCwgdmFsID0gMDtcbitcbitcdGlmIChwaHlkZXYtXHUwMDNlYXV0b25lZyA9PSBBVVRPTkVHX0VOQUJMRSkge1xuK1x0XHRyZXQgPSBnZW5waHlfYzQ1X2FuZWdfZG9uZShwaHlkZXYpO1xuK1x0XHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRcdHJldHVybiByZXQ7XG4rXG4rXHRcdGlmIChyZXQpIHtcbitcdFx0XHR2YWwgPSBwaHlfcmVhZF9tbWQocGh5ZGV2LCBNRElPX01NRF9WRU5EMixcbitcdFx0XHRcdFx0ICAgUlRMODIyWF9WTkQyX0MyMl9SRUcoTUlJX1NUQVQxMDAwKSk7XG4rXHRcdFx0aWYgKHZhbCBcdTAwM2MgMClcbitcdFx0XHRcdHJldHVybiB2YWw7XG4rXHRcdH1cbitcdH1cbitcbitcdG1paV9zdGF0MTAwMF9tb2RfbGlua21vZGVfbHBhX3QocGh5ZGV2LVx1MDAzZWxwX2FkdmVydGlzaW5nLCB2YWwpO1xuK1xuK1x0cmV0ID0gZ2VucGh5X2M0NV9yZWFkX3N0YXR1cyhwaHlkZXYpO1xuK1x0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0cmV0dXJuIHJldDtcbitcbitcdHJldHVybiAwO1xuK31cbitcbitzdGF0aWMgaW50IHJ0bDgyNjF4X3ZlcmlmeV9maXJtd2FyZShzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2LCBjb25zdCBzdHJ1Y3QgZmlybXdhcmUgKmZ3KVxuK3tcbitcdGNvbnN0IHN0cnVjdCBydGw4MjYxeF9md19oZWFkZXIgKmhkcjtcbitcdHUzMiBtYWluX21hZ2ljLCBzdWJfbWFnaWM7XG4rXHR1MzIgY2FsY19jcmMsIGZpbGVfY3JjO1xuK1x0c2l6ZV90IGRhdGFfbGVuO1xuK1x0dTE2IG51bV9lbnRyaWVzO1xuK1xuK1x0aWYgKGZ3LVx1MDAzZXNpemUgXHUwMDNjIEZXX0hFQURFUl9TSVpFKSB7XG4rXHRcdHBoeWRldl9lcnIocGh5ZGV2LCBcIkZpcm13YXJlIHRvbyBzbWFsbDogJXp1IGJ5dGVzXFxuXCIsIGZ3LVx1MDAzZXNpemUpO1xuK1x0XHRyZXR1cm4gLUVJTlZBTDtcbitcdH1cbitcbitcdGhkciA9IChjb25zdCBzdHJ1Y3QgcnRsODI2MXhfZndfaGVhZGVyICopZnctXHUwMDNlZGF0YTtcbitcbitcdG1haW5fbWFnaWMgPSBsZTMyX3RvX2NwdShoZHItXHUwMDNlbWFpbl9tYWdpYyk7XG4rXHRpZiAobWFpbl9tYWdpYyAhPSBGV19NQUlOX01BR0lDKSB7XG4rXHRcdHBoeWRldl9lcnIocGh5ZGV2LCBcIkludmFsaWQgZmlybXdhcmUgbWFnaWM6IDB4JTA4eFxcblwiLCBtYWluX21hZ2ljKTtcbitcdFx0cmV0dXJuIC1FSU5WQUw7XG4rXHR9XG4rXG4rXHRzdWJfbWFnaWMgPSBsZTMyX3RvX2NwdShoZHItXHUwMDNlc3ViX21hZ2ljKTtcbitcdGlmIChzdWJfbWFnaWMgIT0gRldfU1VCX01BR0lDXzgyNjFDKSB7XG4rXHRcdHBoeWRldl9lcnIocGh5ZGV2LCBcIkludmFsaWQgc3ViIG1hZ2ljOiAweCUwOHhcXG5cIiwgc3ViX21hZ2ljKTtcbitcdFx0cmV0dXJuIC1FSU5WQUw7XG4rXHR9XG4rXG4rXHRudW1fZW50cmllcyA9IGxlMTZfdG9fY3B1KGhkci1cdTAwM2VudW1fZW50cmllcyk7XG4rXHRkYXRhX2xlbiA9IG51bV9lbnRyaWVzICogRldfRU5UUllfU0laRTtcbitcbitcdGlmIChmdy1cdTAwM2VzaXplICE9IHNpemVvZigqaGRyKSArIGRhdGFfbGVuKSB7XG4rXHRcdHBoeWRldl9lcnIocGh5ZGV2LCBcIkZpcm13YXJlIHNpemUgbWlzbWF0Y2hcXG5cIik7XG4rXHRcdHJldHVybiAtRUlOVkFMO1xuK1x0fVxuK1xuK1x0Y2FsY19jcmMgPSBjcmMzMih+MCwgZnctXHUwMDNlZGF0YSArIEZXX0hFQURFUl9TSVpFLCBkYXRhX2xlbikgXiB+MDtcbitcdGZpbGVfY3JjID0gbGUzMl90b19jcHUoaGRyLVx1MDAzZWNyYzMyKTtcbitcbitcdGlmIChjYWxjX2NyYyAhPSBmaWxlX2NyYykge1xuK1x0XHRwaHlkZXZfZXJyKHBoeWRldiwgXCJDUkMzMiBtaXNtYXRjaDogY2FsY3VsYXRlZD0weCUwOHggZmlsZT0weCUwOHhcXG5cIixcbitcdFx0XHQgICBjYWxjX2NyYywgZmlsZV9jcmMpO1xuK1x0XHRyZXR1cm4gLUVJTlZBTDtcbitcdH1cbitcbitcdHJldHVybiAwO1xuK31cbitcbitzdGF0aWMgaW50IHJ0bDgyNjF4X2Z3X2V4ZWN1dGVfZW50cnkoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldixcbitcdFx0XHRcdCAgICAgY29uc3Qgc3RydWN0IHJ0bDgyNjF4X2Z3X2VudHJ5ICplbnRyeSlcbit7XG4rXHR1MTYgYWRkciwgdmFsdWUsIHRpbWVvdXRfbXM7XG4rXHR1OCBkZXYsIG1zYiwgbHNiLCBwb2xsX3NldDtcbitcdHUzMiBiaXRzLCBleHBlY3RfdmFsO1xuK1x0aW50IHJldCwgdmFsO1xuK1xuK1x0ZGV2ID0gZW50cnktXHUwMDNlZGV2O1xuK1x0YWRkciA9IGxlMTZfdG9fY3B1KGVudHJ5LVx1MDAzZWFkZHIpO1xuK1x0bXNiID0gZW50cnktXHUwMDNlbXNiO1xuK1x0bHNiID0gZW50cnktXHUwMDNlbHNiO1xuK1x0dmFsdWUgPSBsZTE2X3RvX2NwdShlbnRyeS1cdTAwM2V2YWx1ZSk7XG4rXHR0aW1lb3V0X21zID0gbGUxNl90b19jcHUoZW50cnktXHUwMDNldGltZW91dF9tcyk7XG4rXHRwb2xsX3NldCA9IGVudHJ5LVx1MDAzZXBvbGxfc2V0O1xuK1xuK1x0aWYgKHRpbWVvdXRfbXMgPT0gMClcbitcdFx0dGltZW91dF9tcyA9IFJUTDgyNjFYX1BPTExfVElNRU9VVF9NUztcbitcbitcdGlmIChkZXYgXHUwMDNlIFJUTDgyNjFYX01BWF9NTURfREVWKSB7XG4rXHRcdHBoeWRldl9lcnIocGh5ZGV2LCBcImludmFsaWQgZmlybXdhcmUgTU1EIGRldmljZTogZGV2PSV1XFxuXCIsIGRldik7XG4rXHRcdHJldHVybiAtRUlOVkFMO1xuK1x0fVxuK1xuK1x0aWYgKG1zYiBcdTAwM2UgMTUgfHwgbHNiIFx1MDAzZSBtc2IpIHtcbitcdFx0cGh5ZGV2X2VycihwaHlkZXYsIFwiaW52YWxpZCBmaXJtd2FyZSBiaXRzOiBtc2I9JXUsIGxzYj0ldVxcblwiLCBtc2IsIGxzYik7XG4rXHRcdHJldHVybiAtRUlOVkFMO1xuK1x0fVxuK1xuK1x0c3dpdGNoIChlbnRyeS1cdTAwM2V0eXBlKSB7XG4rXHRjYXNlIE9QX1dSSVRFOlxuK1x0XHRyZXQgPSBwaHlfbW9kaWZ5X21tZChwaHlkZXYsIGRldiwgYWRkcixcbitcdFx0XHRcdCAgICAgR0VOTUFTSyhtc2IsIGxzYiksICh2YWx1ZSBcdTAwM2NcdTAwM2MgbHNiKSBcdTAwMjYgR0VOTUFTSyhtc2IsIGxzYikpO1xuK1x0XHRpZiAocmV0KVxuK1x0XHRcdHJldHVybiByZXQ7XG4rXHRcdGJyZWFrO1xuK1xuK1x0Y2FzZSBPUF9QT0xMOlxuK1x0XHRiaXRzID0gR0VOTUFTSyhtc2IsIGxzYik7XG4rXHRcdGV4cGVjdF92YWwgPSAodmFsdWUgXHUwMDNjXHUwMDNjIGxzYikgXHUwMDI2IGJpdHM7XG4rXG4rXHRcdGlmIChwb2xsX3NldClcbitcdFx0XHRyZXQgPSBwaHlfcmVhZF9tbWRfcG9sbF90aW1lb3V0KHBoeWRldiwgZGV2LCBhZGRyLCB2YWwsXG4rXHRcdFx0XHRcdFx0XHQodmFsIFx1MDAyNiBiaXRzKSA9PSBleHBlY3RfdmFsLFxuK1x0XHRcdFx0XHRcdFx0MTAwMCwgdGltZW91dF9tcyAqIDEwMDAsIGZhbHNlKTtcbitcdFx0ZWxzZVxuK1x0XHRcdHJldCA9IHBoeV9yZWFkX21tZF9wb2xsX3RpbWVvdXQocGh5ZGV2LCBkZXYsIGFkZHIsIHZhbCxcbitcdFx0XHRcdFx0XHRcdCh2YWwgXHUwMDI2IGJpdHMpICE9IGV4cGVjdF92YWwsXG4rXHRcdFx0XHRcdFx0XHQxMDAwLCB0aW1lb3V0X21zICogMTAwMCwgZmFsc2UpO1xuK1x0XHRpZiAocmV0KVxuK1x0XHRcdHJldHVybiByZXQ7XG4rXHRcdGJyZWFrO1xuK1xuK1x0ZGVmYXVsdDpcbitcdFx0cmV0dXJuIC1FSU5WQUw7XG4rXHR9XG4rXG4rXHRyZXR1cm4gMDtcbit9XG4rXG4rc3RhdGljIGludCBydGw4MjYxeF9md19sb2FkKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXG4re1xuK1x0c3RydWN0IHJ0bDgyNjF4X3ByaXYgKnByaXYgPSBwaHlkZXYtXHUwMDNlcHJpdjtcbitcdGNvbnN0IHN0cnVjdCBydGw4MjYxeF9md19lbnRyeSAqZW50cnk7XG4rXHRjb25zdCBzdHJ1Y3QgcnRsODI2MXhfZndfaGVhZGVyICpoZHI7XG4rXHRjb25zdCBzdHJ1Y3QgZmlybXdhcmUgKmZ3O1xuK1x0aW50IHJldCwgaTtcbitcbitcdGlmICghcHJpdi1cdTAwM2Vmd19uYW1lKVxuK1x0XHRyZXR1cm4gMDtcbitcbitcdHJldCA9IHJlcXVlc3RfZmlybXdhcmUoXHUwMDI2ZncsIHByaXYtXHUwMDNlZndfbmFtZSwgXHUwMDI2cGh5ZGV2LVx1MDAzZW1kaW8uZGV2KTtcbitcdGlmIChyZXQpIHtcbitcdFx0cGh5ZGV2X2VycihwaHlkZXYsIFwiRmFpbGVkIHRvIGxvYWQgZmlybXdhcmUgJXM6ICVkXFxuXCIsIHByaXYtXHUwMDNlZndfbmFtZSwgcmV0KTtcbitcdFx0cmV0dXJuIHJldDtcbitcdH1cbitcbitcdHJldCA9IHJ0bDgyNjF4X3ZlcmlmeV9maXJtd2FyZShwaHlkZXYsIGZ3KTtcbitcdGlmIChyZXQpXG4rXHRcdGdvdG8gcmVsZWFzZV9mdztcbitcbitcdGhkciA9IChjb25zdCBzdHJ1Y3QgcnRsODI2MXhfZndfaGVhZGVyICopZnctXHUwMDNlZGF0YTtcbitcbitcdGVudHJ5ID0gKGNvbnN0IHN0cnVjdCBydGw4MjYxeF9md19lbnRyeSAqKShmdy1cdTAwM2VkYXRhICsgRldfSEVBREVSX1NJWkUpO1xuK1x0Zm9yIChpID0gMDsgaSBcdTAwM2MgbGUxNl90b19jcHUoaGRyLVx1MDAzZW51bV9lbnRyaWVzKTsgaSsrLCBlbnRyeSsrKSB7XG4rXHRcdHJldCA9IHJ0bDgyNjF4X2Z3X2V4ZWN1dGVfZW50cnkocGh5ZGV2LCBlbnRyeSk7XG4rXHRcdGlmIChyZXQpIHtcbitcdFx0XHRwaHlkZXZfZXJyKHBoeWRldiwgXCJFbnRyeSAlZCBmYWlsZWQ6ICVkXFxuXCIsIGksIHJldCk7XG4rXHRcdFx0Z290byByZWxlYXNlX2Z3O1xuK1x0XHR9XG4rXHR9XG4rXG4rXHRwcml2LVx1MDAzZWZ3X2xvYWRlZCA9IHRydWU7XG4rXG4rcmVsZWFzZV9mdzpcbitcdHJlbGVhc2VfZmlybXdhcmUoZncpO1xuK1x0cmV0dXJuIHJldDtcbit9XG4rXG4rc3RhdGljIGludCBydGw4MjYxeF9jb25maWdfaW50cihzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxuK3tcbitcdGludCByZXQ7XG4rXG4rXHRpZiAocGh5ZGV2LVx1MDAzZWludGVycnVwdHMgPT0gUEhZX0lOVEVSUlVQVF9FTkFCTEVEKSB7XG4rXHRcdHJldCA9IHBoeV9yZWFkX21tZChwaHlkZXYsIE1ESU9fTU1EX1ZFTkQyLCBSVEw4MjIxQl9WTkQyX0lOU1IpO1xuK1x0XHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRcdHJldHVybiByZXQ7XG4rXG4rXHRcdHJldCA9IHBoeV93cml0ZV9tbWQocGh5ZGV2LCBNRElPX01NRF9WRU5EMiwgUlRMODIyMUJfVk5EMl9JTkVSLFxuK1x0XHRcdFx0ICAgIFJUTDgyNjFYX0lOVF9NQVNLX0RFRkFVTFQpO1xuK1x0XHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRcdHJldHVybiByZXQ7XG4rXHR9IGVsc2Uge1xuK1x0XHRyZXQgPSBwaHlfd3JpdGVfbW1kKHBoeWRldiwgTURJT19NTURfVkVORDIsIFJUTDgyMjFCX1ZORDJfSU5FUiwgMCk7XG4rXHRcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdFx0cmV0dXJuIHJldDtcbitcbitcdFx0cmV0ID0gcGh5X3JlYWRfbW1kKHBoeWRldiwgTURJT19NTURfVkVORDIsIFJUTDgyMjFCX1ZORDJfSU5TUik7XG4rXHRcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdFx0cmV0dXJuIHJldDtcbitcdH1cbitcbitcdHJldHVybiAwO1xuK31cbitcbitzdGF0aWMgaXJxcmV0dXJuX3QgcnRsODI2MXhfaGFuZGxlX2ludGVycnVwdChzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxuK3tcbitcdGludCBpcnFfc3RhdHVzO1xuK1xuK1x0aXJxX3N0YXR1cyA9IHBoeV9yZWFkX21tZChwaHlkZXYsIE1ESU9fTU1EX1ZFTkQyLCBSVEw4MjIxQl9WTkQyX0lOU1IpO1xuK1x0aWYgKGlycV9zdGF0dXMgXHUwMDNjIDApIHtcbitcdFx0cGh5X2Vycm9yKHBoeWRldik7XG4rXHRcdHJldHVybiBJUlFfTk9ORTtcbitcdH1cbitcbitcdGlmICghKGlycV9zdGF0dXMgXHUwMDI2IFJUTDgyNjFYX0lOVF9NQVNLX0FMTCkpXG4rXHRcdHJldHVybiBJUlFfTk9ORTtcbitcbitcdGlmIChpcnFfc3RhdHVzIFx1MDAyNiAoUlRMODI2MVhfSU5UX0xJTktfQ0hHIHwgUlRMODI2MVhfSU5UX0FVVE9ORUdfRE9ORSB8XG4rXHQgICAgUlRMODI2MVhfSU5UX0FVVE9ORUdfRVJST1IgfCBSVEw4MjYxWF9JTlRfSkFCQkVSKSlcbitcdFx0cGh5X3RyaWdnZXJfbWFjaGluZShwaHlkZXYpO1xuK1xuK1x0cmV0dXJuIElSUV9IQU5ETEVEO1xuK31cbitcbitzdGF0aWMgaW50IHJ0bDgyNjF4X2NvbmZpZ19hbmVnKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXG4re1xuK1x0dTE2IGFkdl8xZyA9IDA7XG4rXHRpbnQgcmV0O1xuK1xuK1x0cmV0ID0gZ2VucGh5X2M0NV9jb25maWdfYW5lZyhwaHlkZXYpO1xuK1x0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0cmV0dXJuIHJldDtcbitcbitcdGlmIChwaHlkZXYtXHUwMDNlYXV0b25lZyA9PSBBVVRPTkVHX0RJU0FCTEUpXG4rXHRcdHJldHVybiAwO1xuK1xuK1x0aWYgKGxpbmttb2RlX3Rlc3RfYml0KEVUSFRPT0xfTElOS19NT0RFXzEwMDBiYXNlVF9GdWxsX0JJVCxcbitcdFx0XHQgICAgICBwaHlkZXYtXHUwMDNlYWR2ZXJ0aXNpbmcpKVxuK1x0XHRhZHZfMWcgPSBBRFZFUlRJU0VfMTAwMEZVTEw7XG4rXHRpZiAobGlua21vZGVfdGVzdF9iaXQoRVRIVE9PTF9MSU5LX01PREVfMTAwMGJhc2VUX0hhbGZfQklULFxuK1x0XHRcdCAgICAgIHBoeWRldi1cdTAwM2VhZHZlcnRpc2luZykpXG4rXHRcdGFkdl8xZyB8PSBBRFZFUlRJU0VfMTAwMEhBTEY7XG4rXG4rXHRyZXQgPSBwaHlfbW9kaWZ5X21tZF9jaGFuZ2VkKHBoeWRldiwgTURJT19NTURfVkVORDIsXG4rXHRcdFx0XHQgICAgIFJUTDgyMlhfVk5EMl9DMjJfUkVHKE1JSV9DVFJMMTAwMCksXG4rXHRcdFx0XHQgICAgIEFEVkVSVElTRV8xMDAwRlVMTCB8IEFEVkVSVElTRV8xMDAwSEFMRixcbitcdFx0XHRcdCAgICAgYWR2XzFnKTtcbitcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdHJldHVybiByZXQ7XG4rXHRpZiAocmV0IFx1MDAzZSAwKVxuK1x0XHRyZXR1cm4gZ2VucGh5X2M0NV9yZXN0YXJ0X2FuZWcocGh5ZGV2KTtcbitcbitcdHJldHVybiAwO1xuK31cbitcbitzdGF0aWMgaW50IHJ0bDgyNjF4X2NvbmZpZ19pbml0KHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXG4re1xuK1x0c3RydWN0IHJ0bDgyNjF4X3ByaXYgKnByaXYgPSBwaHlkZXYtXHUwMDNlcHJpdjtcbitcbitcdC8qIFRoZSBmaXJtd2FyZSBwYXJhbWV0ZXJzIGFyZSBwcmVzZXJ2ZWQgYWNyb3NzIElFRUUgc29mdCByZXNldHMgYW5kXG4rXHQgKiBzdXNwZW5kL3Jlc3VtZSBjeWNsZXMuIFJlbG9hZGluZyBpcyBvbmx5IG5lY2Vzc2FyeSBhZnRlciBhIHBvd2VyXG4rXHQgKiBjeWNsZSBvciBoYXJkIHJlc2V0LlxuK1x0ICovXG4rXHRpZiAocHJpdi1cdTAwM2Vmd19uYW1lIFx1MDAyNlx1MDAyNiAhcHJpdi1cdTAwM2Vmd19sb2FkZWQpXG4rXHRcdHJldHVybiBydGw4MjYxeF9md19sb2FkKHBoeWRldik7XG4rXG4rXHRyZXR1cm4gMDtcbit9XG4rXG4gc3RhdGljIGludCBydGw4MjF4X3Byb2JlKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXG4ge1xuIFx0c3RydWN0IGRldmljZSAqZGV2ID0gXHUwMDI2cGh5ZGV2LVx1MDAzZW1kaW8uZGV2O1xuQEAgLTMwMDEsNiArMzM5NCwxOSBAQCBzdGF0aWMgc3RydWN0IHBoeV9kcml2ZXIgcmVhbHRla19kcnZzW10gPSB7XG4gXHRcdC5yZXN1bWVcdFx0PSBnZW5waHlfcmVzdW1lLFxuIFx0XHQucmVhZF9tbWRcdD0gZ2VucGh5X3JlYWRfbW1kX3Vuc3VwcG9ydGVkLFxuIFx0XHQud3JpdGVfbW1kXHQ9IGdlbnBoeV93cml0ZV9tbWRfdW5zdXBwb3J0ZWQsXG4rXHR9LCB7XG4rXHRcdFBIWV9JRF9NQVRDSF9FWEFDVChSVExfODI2MUNfQ0cpLFxuK1x0XHQubmFtZVx0XHRcdD0gXCJSZWFsdGVrIFJUTDgyNjFDIDEwR2JwcyBQSFlcIixcbitcdFx0LnByb2JlXHRcdFx0PSBydGw4MjYxeF9wcm9iZSxcbitcdFx0LmNvbmZpZ19pbml0XHRcdD0gcnRsODI2MXhfY29uZmlnX2luaXQsXG4rXHRcdC5nZXRfZmVhdHVyZXNcdFx0PSBydGw4MjYxeF9nZXRfZmVhdHVyZXMsXG4rXHRcdC5jb25maWdfYW5lZ1x0XHQ9IHJ0bDgyNjF4X2NvbmZpZ19hbmVnLFxuK1x0XHQucmVhZF9zdGF0dXNcdFx0PSBydGw4MjYxeF9yZWFkX3N0YXR1cyxcbitcdFx0LmNvbmZpZ19pbnRyXHRcdD0gcnRsODI2MXhfY29uZmlnX2ludHIsXG4rXHRcdC5oYW5kbGVfaW50ZXJydXB0XHQ9IHJ0bDgyNjF4X2hhbmRsZV9pbnRlcnJ1cHQsXG4rXHRcdC5zb2Z0X3Jlc2V0XHRcdD0gZ2VucGh5X2M0NV9wbWFfc29mdF9yZXNldCxcbitcdFx0LnN1c3BlbmRcdFx0PSBnZW5waHlfYzQ1X3BtYV9zdXNwZW5kLFxuK1x0XHQucmVzdW1lXHRcdFx0PSBnZW5waHlfYzQ1X3BtYV9yZXN1bWUsXG4gXHR9LFxuIH07XG4gXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9waHkuaCBiL2luY2x1ZGUvbGludXgvcGh5LmhcbmluZGV4IDE5OWE3YWFhMzQxYmZkLi5kNmJjMTk5MzFmYjgzNSAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbGludXgvcGh5LmhcbisrKyBiL2luY2x1ZGUvbGludXgvcGh5LmhcbkBAIC0yMzA5LDYgKzIzMDksNyBAQCBpbnQgZ2VucGh5X2MzN19yZWFkX3N0YXR1cyhzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2LCBib29sICpjaGFuZ2VkKTtcbiAvKiBDbGF1c2UgNDUgUEhZICovXG4gaW50IGdlbnBoeV9jNDVfcmVzdGFydF9hbmVnKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpO1xuIGludCBnZW5waHlfYzQ1X2NoZWNrX2FuZF9yZXN0YXJ0X2FuZWcoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldiwgYm9vbCByZXN0YXJ0KTtcbitpbnQgZ2VucGh5X2M0NV9wbWFfc29mdF9yZXNldChzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KTtcbiBpbnQgZ2VucGh5X2M0NV9hbmVnX2RvbmUoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldik7XG4gaW50IGdlbnBoeV9jNDVfcmVhZF9saW5rKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpO1xuIGludCBnZW5waHlfYzQ1X3JlYWRfbHBhKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpO1xuZGlmZiAtLWdpdCBhL2luY2x1ZGUvdWFwaS9saW51eC9tZGlvLmggYi9pbmNsdWRlL3VhcGkvbGludXgvbWRpby5oXG5pbmRleCBiMjU0MWM5NDhmYzFlYi4uMDZmNGJjM2MyMGM3MTcgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL3VhcGkvbGludXgvbWRpby5oXG4rKysgYi9pbmNsdWRlL3VhcGkvbGludXgvbWRpby5oXG5AQCAtMzMyLDggKzMzMiwxMyBAQFxuICNkZWZpbmUgTURJT19BTl8xMEdCVF9DVFJMX0FEVjJfNUdcdDB4MDA4MFx0LyogQWR2ZXJ0aXNlIDIuNUdCQVNFLVQgKi9cbiAjZGVmaW5lIE1ESU9fQU5fMTBHQlRfQ1RSTF9BRFY1R1x0MHgwMTAwXHQvKiBBZHZlcnRpc2UgNUdCQVNFLVQgKi9cbiAjZGVmaW5lIE1ESU9fQU5fMTBHQlRfQ1RSTF9BRFYxMEdcdDB4MTAwMFx0LyogQWR2ZXJ0aXNlIDEwR0JBU0UtVCAqL1xuKyNkZWZpbmUgTURJT19BTl8xMEdCVF9DVFJMX01TX0VOQUJMRVx0MHg4MDAwXHQvKiBNYXN0ZXIvc2xhdmUgbWFudWFsIGNvbmZpZyBlbmFibGUgKi9cbisjZGVmaW5lIE1ESU9fQU5fMTBHQlRfQ1RSTF9NU19WQUxVRVx0MHg0MDAwXHQvKiBNYXN0ZXIvc2xhdmUgY29uZmlnIHZhbHVlICgxPU1hc3RlcikgKi9cbisjZGVmaW5lIE1ESU9fQU5fMTBHQlRfQ1RSTF9NU19QT1JUX1RZUEVcdDB4MjAwMFx0LyogTWFzdGVyIFByZWZlcnJlZCBUeXBlICovXG4gXG4gLyogQU4gMTBHQkFTRS1UIHN0YXR1cyByZWdpc3Rlci4gKi9cbisjZGVmaW5lIE1ESU9fQU5fMTBHQlRfU1RBVF9NU19GQVVMVFx0MHg4MDAwXHQvKiBNYXN0ZXIvc2xhdmUgZmF1bHQgKi9cbisjZGVmaW5lIE1ESU9fQU5fMTBHQlRfU1RBVF9NU19SRVNcdDB4NDAwMFx0LyogTWFzdGVyL3NsYXZlIHJlc29sdXRpb24gKDE9TWFzdGVyKSAqL1xuICNkZWZpbmUgTURJT19BTl8xMEdCVF9TVEFUX0xQMl81R1x0MHgwMDIwICAvKiBMUCBpcyAyLjVHQlQgY2FwYWJsZSAqL1xuICNkZWZpbmUgTURJT19BTl8xMEdCVF9TVEFUX0xQNUdcdFx0MHgwMDQwICAvKiBMUCBpcyA1R0JUIGNhcGFibGUgKi9cbiAjZGVmaW5lIE1ESU9fQU5fMTBHQlRfU1RBVF9MUFRSUlx0MHgwMjAwXHQvKiBMUCB0cmFpbmluZyByZXNldCByZXEuICovXG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wM1QwNzozNTowNi41NjU4Mzg5OTVaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1MDM0MzkwOTgzNiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIFJlYWNoYWJpbGl0eSBvZiB0aGUgUlRMODI2MUMgUEhZIERyaXZlciBpbiBhIFZpcnR1YWxpemVkIENvbnRleHQqKlxuXG5Pa2F5LCBzbyB3ZSBoYXZlIHRoaXMgcGF0Y2ggYWRkaW5nIHN1cHBvcnQgZm9yIHRoZSBSZWFsdGVrIFJUTDgyNjFDIDEwR2JwcyBQSFkgaW4gYHJlYWx0ZWtfbWFpbi5jYCwgYWxvbmcgd2l0aCBzb21lIENsYXVzZSA0NSBQSFkgZnVuY3Rpb25zIGFuZCBtb2RpZmljYXRpb25zIHRvIGV4aXN0aW5nIG9uZXMgaW4gYHBoeS1jNDUuY2AuIENydWNpYWxseSwgdGhlcmUncyBmaXJtd2FyZSBsb2FkaW5nIGZvciB0aGUgUlRMODI2MUMuIE15IG1haW4gY29uY2VybiBpcyB3aGV0aGVyIHRoaXMgaXMgYWN0dWFsbHkgKnJlYWNoYWJsZSogaW4gYSB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudC4gVGhhdCdzIHRoZSByZWFsIHRlc3QuXG5cblRoaW5raW5nIHRocm91Z2ggaXQsIFBIWSBkcml2ZXJzIGFyZSB1c3VhbGx5IHJlYWNoYWJsZSBpZiB3ZSBjYW4gZ2V0IGEgdmlydHVhbCBNRElPIGJ1cyB1cCBhbmQgcnVubmluZywgb3IgaWYgYSBuZXR3b3JrIGRyaXZlciB1c2VzIHRoZW0sIHdoaWNoIHRoZW4gbGlua3MgdG8gdGhlIFBIWSBkcml2ZXIuIFNvLCB0aGUgcXVlc3Rpb24gYmVjb21lczogY2FuIHdlIGluc3RhbnRpYXRlIGEgUEhZIGRldmljZSB0aHJvdWdoIHNvbWUgdmlydHVhbCBkcml2ZXJzPyBMaWtlLCBtYXliZSBgbWFjc2VjYCwgb3IgYHZldGhgLCBvciBldmVuIGBuZXRkZXZzaW1gPyBCdXQgd2FpdCwgSSdtIHByZXR0eSBzdXJlIGBuZXRkZXZzaW1gIGRvZXNuJ3QgYWN0dWFsbHkgaW5zdGFudGlhdGUgKnJlYWwqIFBIWXMuIEFuZCB0aGVuIEkgcmVtZW1iZXIsIGBuZXRkZXZzaW1gIGRvZXNuJ3QgdXNlIHRoZSBgcGh5X2RldmljZWAgc3RydWN0dXJlIGF0IGFsbC5cblxuV2hhdCBhYm91dCBzb21ldGhpbmcgbGlrZSBgbWFjYmAgb3Igb3RoZXIgZHJpdmVycyB0aGF0IG1pZ2h0IGJlIGVtdWxhdGVkIGluIFFFTVU/IFllcywgdGhleSBtaWdodCBiZSBlbXVsYXRlZCwgYnV0IHRoZXkgdHlwaWNhbGx5IHVzZSBzcGVjaWZpYyBQSFlzLiBUaGVuIEkgcmVjYWxsLCBjYW4gU3l6a2FsbGVyIGluamVjdCBNRElPIHRyYWZmaWM/IEkgcmVtZW1iZXJlZCB0aGUgZXhpc3RlbmNlIG9mIGBzeXpfbWRpb19yZWFkYC9gc3l6X21kaW9fd3JpdGVgIHN5c3RlbSBjYWxscywgYnV0IEkgaGF2ZSB0byBzdG9wIG15c2VsZiAtIHRoYXQncyBub3QgcmlnaHQuXG5cbk9rYXksIGJhY2sgdG8gYmFzaWNzLiBDYW4gd2UgcmVhY2ggYSBmdW5jdGlvbiBsaWtlIGBnZW5waHlfYzQ1X3JlYWRfc3RhdHVzYD8gWWVzLCBpZiBhIFBIWSBkZXZpY2UgaXMgcmVnaXN0ZXJlZC4gTm93LCB0aGUga2V5IHF1ZXN0aW9uOiBjYW4gYSB1c2VyIHJlZ2lzdGVyIGEgUEhZIGRldmljZT8gSSB2YWd1ZWx5IHJlY2FsbCBgbWRpby1iY20tdW5pbWFjYCBhbmQgc2ltaWxhciB0aGluZ3MgZXhpc3RpbmcuIEJ1dCB3YWl0LCBtYXliZSB3ZSBjb3VsZCBqdXN0IGZ1enogdGhlIFBIWSBsYXllciBkaXJlY3RseSBpZiB0aGVyZSdzIGEgd2F5IHRvIHRyaWdnZXIgaXQuXG5cbkZ1enppbmcuLi4gZG9lcyBTeXprYWxsZXIgZnV6eiBQSFkgZHJpdmVycyB0aHJvdWdoIGB0dW5gIG9yIGB2ZXRoYD8gTm8sIHRoYXQgZG9lc24ndCBzb3VuZCByaWdodC4gUEhZIGRyaXZlcnMgYXJlIHVzdWFsbHkgcHJvYmVkIHZpYSB0aGUgTURJTyBidXMuIFNvLCBpcyB0aGVyZSBldmVuIGEgdmlydHVhbCBNRElPIGJ1cyBpbiB0aGUga2VybmVsPyBJIG5lZWQgdG8gc2VhcmNoIGZvciB0aGF0LiBMZXQncyBsb29rIGZvciBcIm1kaW9cIiBjb21iaW5lZCB3aXRoIHNvbWV0aGluZyBsaWtlIFwibW9ja1wiIG9yIFwic2ltXCIuIFRoYXQncyB0aGUga2V5LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMDIzMywiT3V0cHV0VG9rZW5zIjoxOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQ4MywiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAzVDA3OjM1OjU2LjkwOTc1MTg1MVoiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozMjY1NDM1NzIwLCJFcnJvciI6Im5vIG1hdGNoZXMiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJtZGlvLipzaW1cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiZXJyb3JcIjogXCJubyBtYXRjaGVzXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAzVDA3OjM2OjAwLjE3NTIwMDAxMVoiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjk5NzY4MTAwMDUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0aG91Z2h0IHByb2Nlc3Mgc3VtbWFyaXplZCBmcm9tIHRoYXQgcHJvbXB0LCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKk1ESU8gRHJpdmVyIEluc3RhbnRpYXRpb24gSW52ZXN0aWdhdGlvbioqXG5cbkFscmlnaHQsIGxldCdzIGdldCBkb3duIHRvIGJyYXNzIHRhY2tzLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gcXVpY2tseSBhc2NlcnRhaW4gdGhlIGxhbmRzY2FwZSBvZiBgbWRpb2AgZHJpdmVycyB3aXRoaW4gdGhlIHN5c3RlbS4gTXkgcHJpbWFyeSBjb25jZXJuIGlzIGNlbnRlcmVkIG9uIHVzZXItc3BhY2UgaW5zdGFudGlhdGlvbi4gQXJlIHRoZXJlIGFueSBgbWRpb2AgZHJpdmVycyBleHBvc2VkLCBkb2N1bWVudGVkLCBhbmQgcG90ZW50aWFsbHkgZGVzaWduZWQgZm9yIGRpcmVjdCBpbnRlcmFjdGlvbiBmcm9tIHVzZXIgYXBwbGljYXRpb25zPyBJJ20gdGhpbmtpbmcgYWJvdXQgdGhpbmdzIGxpa2UgZGlyZWN0IHN5c2ZzIGFjY2VzcywgaW9jdGxzLCBvciBhbnkgb3RoZXIgbWVjaGFuaXNtIHRoYXQgcHJvdmlkZXMgYSB1c2VyIGludGVyZmFjZS4gVGhpcyBpc24ndCBqdXN0IGEgZ2VuZXJpYyBwcm9iZTsgSSBuZWVkIHRvIHVuZGVyc3RhbmQgaWYgdGhlIGtlcm5lbCBmYWNpbGl0YXRlcyB1c2VyLXNwYWNlIGNvbnRyb2wgb3ZlciBzcGVjaWZpYyBgbWRpb2AgaW5zdGFuY2VzLiBJJ20gbG9va2luZyBmb3IgYSBxdWljayBzY2FuIG9mIHRoZSB0eXBpY2FsIGRyaXZlciByZWdpc3RyYXRpb24gcGF0dGVybnMsIGRldmljZSB0cmVlIGJpbmRpbmdzLCBhbmQgYW55IGFzc29jaWF0ZWQgY2hhcmFjdGVyIG9yIG5ldHdvcmsgaW50ZXJmYWNlcy4gVW5kZXJzdGFuZGluZyB0aGUgcGVybWl0dGVkIGFuZCBwcm9oaWJpdGVkIHVzZXItc3BhY2UgaW5zdGFudGlhdGlvbiBzY2VuYXJpb3Mgb2YgTURJTyBkcml2ZXJzIHdpbGwgYmUgaW1wb3J0YW50IHRvIHdoYXRldmVyIEkgYW0gZG9pbmcuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjExMjYzLCJPdXRwdXRUb2tlbnMiOjE4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDNUMDc6MzY6MTAuMTUyMDE0NDQ2WiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjMzMjAzMDM5ODgsIkVycm9yIjoibm8gbWF0Y2hlcyIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm1kaW8uKnZpcnR1YWxcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiZXJyb3JcIjogXCJubyBtYXRjaGVzXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAzVDA3OjM2OjEzLjQ3MjMyNTE5NFoiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjI2MjkyODE0NjQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0IHRob3VnaHQgcHJvY2VzcywgZnJvbSBhbiBleHBlcnQncyBwZXJzcGVjdGl2ZTpcblxuKipEaXZpbmcgRGVlcCBpbnRvIHRoZSBQSFkgTGF5ZXIqKlxuXG5IbW0sIGhvbGQgb24gYSBzZWNvbmQuIFdlJ3ZlIGJlZW4gZm9jdXNpbmcgb24gdGhlIGhpZ2hlci1sZXZlbCBuZXR3b3JrIHN0YWNrLCBidXQgSSB0aGluayB3ZSdyZSBvdmVybG9va2luZyBzb21ldGhpbmcgY3JpdGljYWwgaW4gdGhpcyBhbmFseXNpcy4gVGhhdCBmaWxlLCBgZHJpdmVycy9uZXQvcGh5L2ZpeGVkX3BoeS5jYC4uLiB3aGF0J3MgaXRzIHJvbGU/IEkgY2FuJ3QgaWdub3JlIGl0LiBJdCdzIHRoZSBkcml2ZXIgZm9yIHRoZSBcImZpeGVkIFBIWSxcIiB3aGljaCwgZGVwZW5kaW5nIG9uIHRoZSBjb250ZXh0LCBjb3VsZCBiZSBhIGtleSBwaWVjZSBpbiB0aGlzIG5ldHdvcmsgaW50ZXJmYWNlIHB1enpsZS4gV2UgbmVlZCB0byBjb25zaWRlciBob3cgaXQncyBpbnRlcmFjdGluZywgb3IgKm5vdCogaW50ZXJhY3RpbmcsIHdpdGggdGhlIHJlc3Qgb2YgdGhlIGNvbXBvbmVudHMgd2UncmUgbG9va2luZyBhdC4gVGhpcyBjb3VsZCBiZSB3aGVyZSB0aGUgcnViYmVyIG1lZXRzIHRoZSByb2FkLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMTUxNiwiT3V0cHV0VG9rZW5zIjoxNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAzVDA3OjM2OjE2LjEwMTYwOTE3N1oiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNjQ0MDEwNzIzLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImZpeGVkX3BoeVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYz00Mzg9c3RhdGljIHZvaWQgZHNhX2xvb3BfcGh5ZGV2c191bnJlZ2lzdGVyKHZvaWQpXFxuLS1cXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYy00NDEtXFx0XFx0aWYgKCFJU19FUlIocGh5ZGV2c1tpXSkpXFxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmM6NDQyOlxcdFxcdFxcdGZpeGVkX3BoeV91bnJlZ2lzdGVyKHBoeWRldnNbaV0pO1xcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jLTQ0My1cXHR9XFxuLS1cXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYz00ODI9c3RhdGljIGludCBfX2luaXQgZHNhX2xvb3BfaW5pdCh2b2lkKVxcbi0tXFxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtNDkxLVxcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBOVU1fRklYRURfUEhZUzsgaSsrKVxcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jOjQ5MjpcXHRcXHRwaHlkZXZzW2ldID0gZml4ZWRfcGh5X3JlZ2lzdGVyXzEwMGZkKCk7XFxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtNDkzLVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vYjQ0LmM9MjIzND1zdGF0aWMgaW50IGI0NF9yZWdpc3Rlcl9waHlfb25lKHN0cnVjdCBiNDQgKmJwKVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vYjQ0LmMtMjI3Mi1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9iNDQuYzoyMjczOlxcdFxcdHBoeWRldiA9IGZpeGVkX3BoeV9yZWdpc3Rlcl8xMDBmZCgpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2I0NC5jLTIyNzQtXFx0XFx0aWYgKCFJU19FUlIocGh5ZGV2KSlcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2I0NC5jPTIzMTM9c3RhdGljIHZvaWQgYjQ0X3VucmVnaXN0ZXJfcGh5X29uZShzdHJ1Y3QgYjQ0ICpicClcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2I0NC5jLTIzMjItXFx0aWYgKHBoeV9pc19wc2V1ZG9fZml4ZWRfbGluayhwaHlkZXYpKVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2I0NC5jOjIzMjM6XFx0XFx0Zml4ZWRfcGh5X3VucmVnaXN0ZXIocGh5ZGV2KTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9iNDQuYy0yMzI0LVxcdG1kaW9idXNfdW5yZWdpc3RlcihtaWlfYnVzKTtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2JnbWFjLmM9MTQzOT1pbnQgYmdtYWNfcGh5X2Nvbm5lY3RfZGlyZWN0KHN0cnVjdCBiZ21hYyAqYmdtYWMpXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vYmdtYWMuYy0xNDQwLXtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9iZ21hYy5jOjE0NDE6XFx0c3RydWN0IGZpeGVkX3BoeV9zdGF0dXMgZnBoeV9zdGF0dXMgPSB7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vYmdtYWMuYy0xNDQyLVxcdFxcdC5saW5rID0gMSxcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2JnbWFjLmMtMTQ0OC1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9iZ21hYy5jOjE0NDk6XFx0cGh5X2RldiA9IGZpeGVkX3BoeV9yZWdpc3RlcihcXHUwMDI2ZnBoeV9zdGF0dXMsIE5VTEwpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2JnbWFjLmMtMTQ1MC1cXHRpZiAoSVNfRVJSKHBoeV9kZXYpKSB7XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9nZW5ldC9iY21taWkuYz05Nz12b2lkIGJjbWdlbmV0X21paV9zZXR1cChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vZ2VuZXQvYmNtbWlpLmMtMTE2LVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2dlbmV0L2JjbW1paS5jOjExNzpzdGF0aWMgaW50IGJjbWdlbmV0X2ZpeGVkX3BoeV9saW5rX3VwZGF0ZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2dlbmV0L2JjbW1paS5jOjExODpcXHRcXHRcXHRcXHRcXHQgIHN0cnVjdCBmaXhlZF9waHlfc3RhdHVzICpzdGF0dXMpXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vZ2VuZXQvYmNtbWlpLmMtMTE5LXtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2dlbmV0L2JjbW1paS5jPTE4Nj1zdGF0aWMgdm9pZCBiY21nZW5ldF9tb2NhX3BoeV9zZXR1cChzdHJ1Y3QgYmNtZ2VuZXRfcHJpdiAqcHJpdilcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2dlbmV0L2JjbW1paS5jLTE4OC1cXHRpZiAoYmNtZ2VuZXRfaGFzX21vY2FfbGlua19kZXQocHJpdikpXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vZ2VuZXQvYmNtbWlpLmM6MTg5OlxcdFxcdGZpeGVkX3BoeV9zZXRfbGlua191cGRhdGUocHJpdi1cXHUwMDNlZGV2LVxcdTAwM2VwaHlkZXYsXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vZ2VuZXQvYmNtbWlpLmM6MTkwOlxcdFxcdFxcdFxcdFxcdCAgYmNtZ2VuZXRfZml4ZWRfcGh5X2xpbmtfdXBkYXRlKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9nZW5ldC9iY21taWkuYy0xOTEtfVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZmFyYWRheS9mdGdtYWMxMDAuYz00Mz1zdHJ1Y3QgZnRnbWFjMTAwX21hdGNoX2RhdGEge1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZmFyYWRheS9mdGdtYWMxMDAuYy02Ni0vKiBGb3IgTkMtU0kgdG8gcmVnaXN0ZXIgYSBmaXhlZC1saW5rIHBoeSBkZXZpY2UgKi9cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mYXJhZGF5L2Z0Z21hYzEwMC5jOjY3OnN0YXRpYyBzdHJ1Y3QgZml4ZWRfcGh5X3N0YXR1cyBuY3NpX3BoeV9zdGF0dXMgPSB7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZmFyYWRheS9mdGdtYWMxMDAuYy02OC1cXHQubGluayA9IDEsXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mYXJhZGF5L2Z0Z21hYzEwMC5jPTE3ODA9c3RhdGljIHZvaWQgZnRnbWFjMTAwX3BoeV9kaXNjb25uZWN0KHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mYXJhZGF5L2Z0Z21hYzEwMC5jLTE3OTItXFx0aWYgKHByaXYtXFx1MDAzZXVzZV9uY3NpKVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZhcmFkYXkvZnRnbWFjMTAwLmM6MTc5MzpcXHRcXHRmaXhlZF9waHlfdW5yZWdpc3RlcihwaHlkZXYpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZhcmFkYXkvZnRnbWFjMTAwLmMtMTc5NC19XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mYXJhZGF5L2Z0Z21hYzEwMC5jPTE4NDg9c3RhdGljIGludCBmdGdtYWMxMDBfcHJvYmVfbmNzaShzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LFxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZmFyYWRheS9mdGdtYWMxMDAuYy0xODY2LVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZhcmFkYXkvZnRnbWFjMTAwLmM6MTg2NzpcXHRwaHlkZXYgPSBmaXhlZF9waHlfcmVnaXN0ZXIoXFx1MDAyNm5jc2lfcGh5X3N0YXR1cywgbnApO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZhcmFkYXkvZnRnbWFjMTAwLmMtMTg2OC1cXHRpZiAoSVNfRVJSKHBoeWRldikpIHtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZhcmFkYXkvZnRnbWFjMTAwLmMtMTg4MS1lcnJfcmVnaXN0ZXJfcGh5OlxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZhcmFkYXkvZnRnbWFjMTAwLmM6MTg4MjpcXHRmaXhlZF9waHlfdW5yZWdpc3RlcihwaHlkZXYpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZhcmFkYXkvZnRnbWFjMTAwLmMtMTg4My1lcnJfcmVnaXN0ZXJfbmRldjpcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9mZWNfbWFpbi5jPTI5ODE9c3RhdGljIGludCBmZWNfZW5ldF9taWlfcHJvYmUoc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZmVjX21haW4uYy0zMDAyLVxcdFxcdFxcdG5ldGRldl9pbmZvKG5kZXYsIFxcXCJubyBQSFksIGFzc3VtaW5nIGRpcmVjdCBjb25uZWN0aW9uIHRvIHN3aXRjaFxcXFxuXFxcIik7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2ZlY19tYWluLmM6MzAwMzpcXHRcXHRcXHRwaHlfZGV2ID0gZml4ZWRfcGh5X3JlZ2lzdGVyXzEwMGZkKCk7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2ZlY19tYWluLmMtMzAwNC1cXHRcXHRcXHRpZiAoSVNfRVJSKHBoeV9kZXYpKSB7XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZmVjX21haW4uYy0zMDEzLVxcdFxcdFxcdGlmIChwaHlfaXNfcHNldWRvX2ZpeGVkX2xpbmsocGh5X2RldikpXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2ZlY19tYWluLmM6MzAxNDpcXHRcXHRcXHRcXHRmaXhlZF9waHlfdW5yZWdpc3RlcihwaHlfZGV2KTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZmVjX21haW4uYy0zMDE1LVxcdFxcdFxcdG5ldGRldl9lcnIobmRldiwgXFxcImNvdWxkIG5vdCBhdHRhY2ggdG8gUEhZXFxcXG5cXFwiKTtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9mZWNfbWFpbi5jPTQyMjg9ZmVjX2VuZXRfY2xvc2Uoc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZmVjX21haW4uYy00MjQzLVxcdGlmICghZmVwLVxcdTAwM2VwaHlfbm9kZSBcXHUwMDI2XFx1MDAyNiBwaHlfaXNfcHNldWRvX2ZpeGVkX2xpbmsocGh5X2RldikpXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2ZlY19tYWluLmM6NDI0NDpcXHRcXHRmaXhlZF9waHlfdW5yZWdpc3RlcihwaHlfZGV2KTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZmVjX21haW4uYy00MjQ1LVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2dpYW5mYXIuYz0zMTMyPXN0YXRpYyBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZV9vcHMgZ2Zhcl9uZXRkZXZfb3BzID0ge1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2dpYW5mYXIuYy0zMTQxLVxcdC5uZG9fZ2V0X3N0YXRzNjQgPSBnZmFyX2dldF9zdGF0czY0LFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9naWFuZmFyLmM6MzE0MjpcXHQubmRvX2NoYW5nZV9jYXJyaWVyID0gZml4ZWRfcGh5X2NoYW5nZV9jYXJyaWVyLFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9naWFuZmFyLmMtMzE0My1cXHQubmRvX3NldF9tYWNfYWRkcmVzcyA9IGdmYXJfc2V0X21hY19hZGRyLFxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2hpYm1jZ2UvaGJnX21kaW8uYz0yMjg9dm9pZCBoYmdfcGh5X3N0b3Aoc3RydWN0IGhiZ19wcml2ICpwcml2KVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2hpYm1jZ2UvaGJnX21kaW8uYy0yMzItXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2hpYm1jZ2UvaGJnX21kaW8uYzoyMzM6c3RhdGljIHZvaWQgaGJnX2ZpeGVkX3BoeV91bmluaXQodm9pZCAqZGF0YSlcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaGlibWNnZS9oYmdfbWRpby5jLTIzNC17XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2hpYm1jZ2UvaGJnX21kaW8uYzoyMzU6XFx0Zml4ZWRfcGh5X3VucmVnaXN0ZXIoKHN0cnVjdCBwaHlfZGV2aWNlICopZGF0YSk7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2hpYm1jZ2UvaGJnX21kaW8uYy0yMzYtfVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9oaWJtY2dlL2hiZ19tZGlvLmMtMjM3LVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9oaWJtY2dlL2hiZ19tZGlvLmM6MjM4OnN0YXRpYyBpbnQgaGJnX2ZpeGVkX3BoeV9pbml0KHN0cnVjdCBoYmdfcHJpdiAqcHJpdilcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaGlibWNnZS9oYmdfbWRpby5jLTIzOS17XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2hpYm1jZ2UvaGJnX21kaW8uYzoyNDA6XFx0c3RydWN0IGZpeGVkX3BoeV9zdGF0dXMgaGJnX2ZpeGVkX3BoeV9zdGF0dXMgPSB7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2hpYm1jZ2UvaGJnX21kaW8uYy0yNDEtXFx0XFx0LmxpbmsgPSAxLFxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2hpYm1jZ2UvaGJnX21kaW8uYy0yNTAtXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2hpYm1jZ2UvaGJnX21kaW8uYzoyNTE6XFx0cGh5ZGV2ID0gZml4ZWRfcGh5X3JlZ2lzdGVyKFxcdTAwMjZoYmdfZml4ZWRfcGh5X3N0YXR1cywgTlVMTCk7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2hpYm1jZ2UvaGJnX21kaW8uYy0yNTItXFx0aWYgKElTX0VSUihwaHlkZXYpKSB7XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaGlibWNnZS9oYmdfbWRpby5jLTI1Ny1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaGlibWNnZS9oYmdfbWRpby5jOjI1ODpcXHRyZXQgPSBkZXZtX2FkZF9hY3Rpb25fb3JfcmVzZXQoZGV2LCBoYmdfZml4ZWRfcGh5X3VuaW5pdCwgcGh5ZGV2KTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaGlibWNnZS9oYmdfbWRpby5jLTI1OS1cXHRpZiAocmV0KVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2hpYm1jZ2UvaGJnX21kaW8uYz0yNjY9aW50IGhiZ19tZGlvX2luaXQoc3RydWN0IGhiZ19wcml2ICpwcml2KVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2hpYm1jZ2UvaGJnX21kaW8uYy0yNzUtXFx0aWYgKG1hYy1cXHUwMDNlcGh5X2FkZHIgPT0gSEJHX05PX1BIWSlcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaGlibWNnZS9oYmdfbWRpby5jOjI3NjpcXHRcXHRyZXR1cm4gaGJnX2ZpeGVkX3BoeV9pbml0KHByaXYpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9oaWJtY2dlL2hiZ19tZGlvLmMtMjc3LVxcbi0tXFxuZHJpdmVycy9uZXQvbWRpby9vZl9tZGlvLmM9NDEyPWludCBvZl9waHlfcmVnaXN0ZXJfZml4ZWRfbGluayhzdHJ1Y3QgZGV2aWNlX25vZGUgKm5wKVxcbmRyaXZlcnMvbmV0L21kaW8vb2ZfbWRpby5jLTQxMy17XFxuZHJpdmVycy9uZXQvbWRpby9vZl9tZGlvLmM6NDE0OlxcdHN0cnVjdCBmaXhlZF9waHlfc3RhdHVzIHN0YXR1cyA9IHt9O1xcbmRyaXZlcnMvbmV0L21kaW8vb2ZfbWRpby5jLTQxNS1cXHRzdHJ1Y3QgZGV2aWNlX25vZGUgKmZpeGVkX2xpbmtfbm9kZTtcXG4tLVxcbmRyaXZlcnMvbmV0L21kaW8vb2ZfbWRpby5jLTQ1OS1yZWdpc3Rlcl9waHk6XFxuZHJpdmVycy9uZXQvbWRpby9vZl9tZGlvLmM6NDYwOlxcdHJldHVybiBQVFJfRVJSX09SX1pFUk8oZml4ZWRfcGh5X3JlZ2lzdGVyKFxcdTAwMjZzdGF0dXMsIG5wKSk7XFxuZHJpdmVycy9uZXQvbWRpby9vZl9tZGlvLmMtNDYxLX1cXG4tLVxcbmRyaXZlcnMvbmV0L21kaW8vb2ZfbWRpby5jPTQ2ND12b2lkIG9mX3BoeV9kZXJlZ2lzdGVyX2ZpeGVkX2xpbmsoc3RydWN0IGRldmljZV9ub2RlICpucClcXG4tLVxcbmRyaXZlcnMvbmV0L21kaW8vb2ZfbWRpby5jLTQ3MS1cXG5kcml2ZXJzL25ldC9tZGlvL29mX21kaW8uYzo0NzI6XFx0Zml4ZWRfcGh5X3VucmVnaXN0ZXIocGh5ZGV2KTtcXG5kcml2ZXJzL25ldC9tZGlvL29mX21kaW8uYy00NzMtXFxuLS1cXG5kcml2ZXJzL25ldC9waHkvTWFrZWZpbGU9NjM9b2JqLSQoQ09ORklHX0RQODNURzcyMF9QSFkpXFx0Kz0gZHA4M3RnNzIwLm9cXG5kcml2ZXJzL25ldC9waHkvTWFrZWZpbGU6NjQ6b2JqLSQoQ09ORklHX0ZJWEVEX1BIWSlcXHRcXHQrPSBmaXhlZF9waHkub1xcbmRyaXZlcnMvbmV0L3BoeS9NYWtlZmlsZS02NS1vYmotJChDT05GSUdfSUNQTFVTX1BIWSlcXHQrPSBpY3BsdXMub1xcbi0tXFxuZHJpdmVycy9uZXQvcGh5L2ZpeGVkX3BoeS5jLTI3LVxcbmRyaXZlcnMvbmV0L3BoeS9maXhlZF9waHkuYzoyODpzdHJ1Y3QgZml4ZWRfcGh5IHtcXG5kcml2ZXJzL25ldC9waHkvZml4ZWRfcGh5LmMtMjktXFx0c3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldjtcXG5kcml2ZXJzL25ldC9waHkvZml4ZWRfcGh5LmM6MzA6XFx0c3RydWN0IGZpeGVkX3BoeV9zdGF0dXMgc3RhdHVzO1xcbmRyaXZlcnMvbmV0L3BoeS9maXhlZF9waHkuYzozMTpcXHRpbnQgKCpsaW5rX3VwZGF0ZSkoc3RydWN0IG5ldF9kZXZpY2UgKiwgc3RydWN0IGZpeGVkX3BoeV9zdGF0dXMgKik7XFxuZHJpdmVycy9uZXQvcGh5L2ZpeGVkX3BoeS5jLTMyLX07XFxuZHJpdmVycy9uZXQvcGh5L2ZpeGVkX3BoeS5jLTMzLVxcbmRyaXZlcnMvbmV0L3BoeS9maXhlZF9waHkuYzozNDpzdGF0aWMgREVDTEFSRV9CSVRNQVAoZml4ZWRfcGh5X2lkcywgTlVNX0ZQKTtcXG5kcml2ZXJzL25ldC9waHkvZml4ZWRfcGh5LmM6MzU6c3RhdGljIHN0cnVjdCBmaXhlZF9waHkgZm1iX2ZpeGVkX3BoeXNbTlVNX0ZQXTtcXG5kcml2ZXJzL25ldC9waHkvZml4ZWRfcGh5LmMtMzYtc3RhdGljIHN0cnVjdCBtaWlfYnVzICpmbWJfbWlpX2J1cztcXG5kcml2ZXJzL25ldC9waHkvZml4ZWRfcGh5LmMtMzctXFxuZHJpdmVycy9uZXQvcGh5L2ZpeGVkX3BoeS5jOjM4OnN0YXRpYyBzdHJ1Y3QgZml4ZWRfcGh5ICpmaXhlZF9waHlfZmluZChpbnQgYWRkcilcXG5kcml2ZXJzL25ldC9waHkvZml4ZWRfcGh5LmMtMzkte1xcbmRyaXZlcnMvbmV0L3BoeS9maXhlZF9waHkuYzo0MDpcXHRyZXR1cm4gdGVzdF9iaXQoYWRkciwgZml4ZWRfcGh5X2lkcykgPyBmbWJfZml4ZWRfcGh5cyArIGFkZHIgOiBOVUxMO1xcbmRyaXZlcnMvbmV0L3BoeS9maXhlZF9waHkuYy00MS19XFxuZHJpdmVycy9uZXQvcGh5L2ZpeGVkX3BoeS5jLTQyLVxcbmRyaXZlcnMvbmV0L3BoeS9maXhlZF9waHkuYzo0MzppbnQgZml4ZWRfcGh5X2NoYW5nZV9jYXJyaWVyKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGJvb2wgbmV3X2NhcnJpZXIpXFxuZHJpdmVycy9uZXQvcGh5L2ZpeGVkX3BoeS5jLTQ0LXtcXG5kcml2ZXJzL25ldC9waHkvZml4ZWRfcGh5LmMtNDUtXFx0c3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldiA9IGRldi1cXHUwMDNlcGh5ZGV2O1xcbmRyaXZlcnMvbmV0L3BoeS9maXhlZF9waHkuYzo0NjpcXHRzdHJ1Y3QgZml4ZWRfcGh5ICpmcDtcXG5kcml2ZXJzL25ldC9waHkvZml4ZWRfcGh5LmMtNDctXFxuLS1cXG5kcml2ZXJzL25ldC9waHkvZml4ZWRfcGh5LmMtNTAtXFxuZHJpdmVycy9uZXQvcGh5L2ZpeGVkX3BoeS5jOjUxOlxcdGZwID0gZml4ZWRfcGh5X2ZpbmQocGh5ZGV2LVxcdTAwM2VtZGlvLmFkZHIpO1xcbmRyaXZlcnMvbmV0L3BoeS9maXhlZF9waHkuYy01Mi1cXHRpZiAoIWZwKVxcbi0tXFxuZHJpdmVycy9uZXQvcGh5L2ZpeGVkX3BoeS5jLTU4LX1cXG5kcml2ZXJzL25ldC9waHkvZml4ZWRfcGh5LmM6NTk6RVhQT1JUX1NZTUJPTF9HUEwoZml4ZWRfcGh5X2NoYW5nZV9jYXJyaWVyKTtcXG5kcml2ZXJzL25ldC9waHkvZml4ZWRfcGh5LmMtNjAtXFxuZHJpdmVycy9uZXQvcGh5L2ZpeGVkX3BoeS5jPTYxPXN0YXRpYyBpbnQgZml4ZWRfbWRpb19yZWFkKHN0cnVjdCBtaWlfYnVzICpidXMsIGludCBwaHlfYWRkciwgaW50IHJlZ19udW0pXFxuZHJpdmVycy9uZXQvcGh5L2ZpeGVkX3BoeS5jLTYyLXtcXG5kcml2ZXJzL25ldC9waHkvZml4ZWRfcGh5LmM6NjM6XFx0c3RydWN0IGZpeGVkX3BoeSAqZnA7XFxuZHJpdmVycy9uZXQvcGh5L2ZpeGVkX3BoeS5jLTY0LVxcbmRyaXZlcnMvbmV0L3BoeS9maXhlZF9waHkuYzo2NTpcXHRmcCA9IGZpeGVkX3BoeV9maW5kKHBoeV9hZGRyKTtcXG5kcml2ZXJzL25ldC9waHkvZml4ZWRfcGh5LmMtNjYtXFx0aWYgKCFmcClcXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9maXhlZF9waHkuYz03NT1zdGF0aWMgaW50IGZpeGVkX21kaW9fd3JpdGUoc3RydWN0IG1paV9idXMgKmJ1cywgaW50IHBoeV9hZGRyLCBpbnQgcmVnX251bSxcXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9maXhlZF9waHkuYy04NS0gKi9cXG5kcml2ZXJzL25ldC9waHkvZml4ZWRfcGh5LmM6ODY6aW50IGZpeGVkX3BoeV9zZXRfbGlua191cGRhdGUoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldixcXG5kcml2ZXJzL25ldC9waHkvZml4ZWRfcGh5LmMtODctXFx0XFx0XFx0ICAgICAgaW50ICgqbGlua191cGRhdGUpKHN0cnVjdCBuZXRfZGV2aWNlICosXFxuZHJpdmVycy9uZXQvcGh5L2ZpeGVkX3BoeS5jOjg4OlxcdFxcdFxcdFxcdFxcdFxcdCBzdHJ1Y3QgZml4ZWRfcGh5X3N0YXR1cyAqKSlcXG5kcml2ZXJzL25ldC9waHkvZml4ZWRfcGh5LmMtODkte1xcbmRyaXZlcnMvbmV0L3BoeS9maXhlZF9waHkuYzo5MDpcXHRzdHJ1Y3QgZml4ZWRfcGh5ICpmcDtcXG5kcml2ZXJzL25ldC9waHkvZml4ZWRfcGh5LmMtOTEtXFxuLS1cXG5kcml2ZXJzL25ldC9waHkvZml4ZWRfcGh5LmMtOTQtXFxuZHJpdmVycy9uZXQvcGh5L2ZpeGVkX3BoeS5jOjk1OlxcdGZwID0gZml4ZWRfcGh5X2ZpbmQocGh5ZGV2LVxcdTAwM2VtZGlvLmFkZHIpO1xcbmRyaXZlcnMvbmV0L3BoeS9maXhlZF9waHkuYy05Ni1cXHRpZiAoIWZwKVxcbi0tXFxuZHJpdmVycy9uZXQvcGh5L2ZpeGVkX3BoeS5jLTEwMy19XFxuZHJpdmVycy9uZXQvcGh5L2ZpeGVkX3BoeS5jOjEwNDpFWFBPUlRfU1lNQk9MX0dQTChmaXhlZF9waHlfc2V0X2xpbmtfdXBkYXRlKTtcXG5kcml2ZXJzL25ldC9waHkvZml4ZWRfcGh5LmMtMTA1LVxcbmRyaXZlcnMvbmV0L3BoeS9maXhlZF9waHkuYzoxMDY6c3RhdGljIHZvaWQgZml4ZWRfcGh5X2RlbChpbnQgcGh5X2FkZHIpXFxuZHJpdmVycy9uZXQvcGh5L2ZpeGVkX3BoeS5jLTEwNy17XFxuZHJpdmVycy9uZXQvcGh5L2ZpeGVkX3BoeS5jOjEwODpcXHRzdHJ1Y3QgZml4ZWRfcGh5ICpmcDtcXG5kcml2ZXJzL25ldC9waHkvZml4ZWRfcGh5LmMtMTA5LVxcbmRyaXZlcnMvbmV0L3BoeS9maXhlZF9waHkuYzoxMTA6XFx0ZnAgPSBmaXhlZF9waHlfZmluZChwaHlfYWRkcik7XFxuZHJpdmVycy9uZXQvcGh5L2ZpeGVkX3BoeS5jLTExMS1cXHRpZiAoIWZwKVxcbi0tXFxuZHJpdmVycy9uZXQvcGh5L2ZpeGVkX3BoeS5jLTExNC1cXHRtZW1zZXQoZnAsIDAsIHNpemVvZigqZnApKTtcXG5kcml2ZXJzL25ldC9waHkvZml4ZWRfcGh5LmM6MTE1OlxcdGNsZWFyX2JpdChwaHlfYWRkciwgZml4ZWRfcGh5X2lkcyk7XFxuZHJpdmVycy9uZXQvcGh5L2ZpeGVkX3BoeS5jLTExNi19XFxuZHJpdmVycy9uZXQvcGh5L2ZpeGVkX3BoeS5jLTExNy1cXG5kcml2ZXJzL25ldC9waHkvZml4ZWRfcGh5LmM6MTE4OnN0YXRpYyBpbnQgZml4ZWRfcGh5X2dldF9mcmVlX2FkZHIodm9pZClcXG5kcml2ZXJzL25ldC9waHkvZml4ZWRfcGh5LmMtMTE5LXtcXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9maXhlZF9waHkuYy0xMjItXFx0ZG8ge1xcbmRyaXZlcnMvbmV0L3BoeS9maXhlZF9waHkuYzoxMjM6XFx0XFx0YWRkciA9IGZpbmRfZmlyc3RfemVyb19iaXQoZml4ZWRfcGh5X2lkcywgTlVNX0ZQKTtcXG5kcml2ZXJzL25ldC9waHkvZml4ZWRfcGh5LmMtMTI0LVxcdFxcdGlmIChhZGRyID09IE5VTV9GUClcXG5kcml2ZXJzL25ldC9waHkvZml4ZWRfcGh5LmMtMTI1LVxcdFxcdFxcdHJldHVybiAtRU5PU1BDO1xcbmRyaXZlcnMvbmV0L3BoeS9maXhlZF9waHkuYzoxMjY6XFx0fSB3aGlsZSAodGVzdF9hbmRfc2V0X2JpdChhZGRyLCBmaXhlZF9waHlfaWRzKSk7XFxuZHJpdmVycy9uZXQvcGh5L2ZpeGVkX3BoeS5jLTEyNy1cXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9maXhlZF9waHkuYy0xMzAtXFxuZHJpdmVycy9uZXQvcGh5L2ZpeGVkX3BoeS5jOjEzMTpzdHJ1Y3QgcGh5X2RldmljZSAqZml4ZWRfcGh5X3JlZ2lzdGVyKGNvbnN0IHN0cnVjdCBmaXhlZF9waHlfc3RhdHVzICpzdGF0dXMsXFxuZHJpdmVycy9uZXQvcGh5L2ZpeGVkX3BoeS5jLTEzMi1cXHRcXHRcXHRcXHQgICAgICBzdHJ1Y3QgZGV2aWNlX25vZGUgKm5wKVxcbi0tXFxuZHJpdmVycy9uZXQvcGh5L2ZpeGVkX3BoeS5jLTE0NS1cXHQvKiBHZXQgdGhlIG5leHQgYXZhaWxhYmxlIFBIWSBhZGRyZXNzLCB1cCB0byBOVU1fRlAgKi9cXG5kcml2ZXJzL25ldC9waHkvZml4ZWRfcGh5LmM6MTQ2OlxcdHBoeV9hZGRyID0gZml4ZWRfcGh5X2dldF9mcmVlX2FkZHIoKTtcXG5kcml2ZXJzL25ldC9waHkvZml4ZWRfcGh5LmMtMTQ3LVxcdGlmIChwaHlfYWRkciBcXHUwMDNjIDApXFxuLS1cXG5kcml2ZXJzL25ldC9waHkvZml4ZWRfcGh5LmMtMTQ5LVxcbmRyaXZlcnMvbmV0L3BoeS9maXhlZF9waHkuYzoxNTA6XFx0Zm1iX2ZpeGVkX3BoeXNbcGh5X2FkZHJdLnN0YXR1cyA9ICpzdGF0dXM7XFxuZHJpdmVycy9uZXQvcGh5L2ZpeGVkX3BoeS5jOjE1MTpcXHRmbWJfZml4ZWRfcGh5c1twaHlfYWRkcl0uc3RhdHVzLmxpbmsgPSB0cnVlO1xcbmRyaXZlcnMvbmV0L3BoeS9maXhlZF9waHkuYy0xNTItXFxuLS1cXG5kcml2ZXJzL25ldC9waHkvZml4ZWRfcGh5LmMtMTU0LVxcdGlmIChJU19FUlIocGh5KSkge1xcbmRyaXZlcnMvbmV0L3BoeS9maXhlZF9waHkuYzoxNTU6XFx0XFx0Zml4ZWRfcGh5X2RlbChwaHlfYWRkcik7XFxuZHJpdmVycy9uZXQvcGh5L2ZpeGVkX3BoeS5jLTE1Ni1cXHRcXHRyZXR1cm4gRVJSX1BUUigtRUlOVkFMKTtcXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9maXhlZF9waHkuYy0xNjYtXFx0XFx0b2Zfbm9kZV9wdXQobnApO1xcbmRyaXZlcnMvbmV0L3BoeS9maXhlZF9waHkuYzoxNjc6XFx0XFx0Zml4ZWRfcGh5X2RlbChwaHlfYWRkcik7XFxuZHJpdmVycy9uZXQvcGh5L2ZpeGVkX3BoeS5jLTE2OC1cXHRcXHRyZXR1cm4gRVJSX1BUUihyZXQpO1xcbi0tXFxuZHJpdmVycy9uZXQvcGh5L2ZpeGVkX3BoeS5jLTE3Mi19XFxuZHJpdmVycy9uZXQvcGh5L2ZpeGVkX3BoeS5jOjE3MzpFWFBPUlRfU1lNQk9MX0dQTChmaXhlZF9waHlfcmVnaXN0ZXIpO1xcbmRyaXZlcnMvbmV0L3BoeS9maXhlZF9waHkuYy0xNzQtXFxuZHJpdmVycy9uZXQvcGh5L2ZpeGVkX3BoeS5jOjE3NTpzdHJ1Y3QgcGh5X2RldmljZSAqZml4ZWRfcGh5X3JlZ2lzdGVyXzEwMGZkKHZvaWQpXFxuZHJpdmVycy9uZXQvcGh5L2ZpeGVkX3BoeS5jLTE3Ni17XFxuZHJpdmVycy9uZXQvcGh5L2ZpeGVkX3BoeS5jOjE3NzpcXHRzdGF0aWMgY29uc3Qgc3RydWN0IGZpeGVkX3BoeV9zdGF0dXMgc3RhdHVzID0ge1xcbmRyaXZlcnMvbmV0L3BoeS9maXhlZF9waHkuYy0xNzgtXFx0XFx0LnNwZWVkXFx0PSBTUEVFRF8xMDAsXFxuLS1cXG5kcml2ZXJzL25ldC9waHkvZml4ZWRfcGh5LmMtMTgxLVxcbmRyaXZlcnMvbmV0L3BoeS9maXhlZF9waHkuYzoxODI6XFx0cmV0dXJuIGZpeGVkX3BoeV9yZWdpc3RlcihcXHUwMDI2c3RhdHVzLCBOVUxMKTtcXG5kcml2ZXJzL25ldC9waHkvZml4ZWRfcGh5LmMtMTgzLX1cXG5kcml2ZXJzL25ldC9waHkvZml4ZWRfcGh5LmM6MTg0OkVYUE9SVF9TWU1CT0xfR1BMKGZpeGVkX3BoeV9yZWdpc3Rlcl8xMDBmZCk7XFxuZHJpdmVycy9uZXQvcGh5L2ZpeGVkX3BoeS5jLTE4NS1cXG5kcml2ZXJzL25ldC9waHkvZml4ZWRfcGh5LmM6MTg2OnZvaWQgZml4ZWRfcGh5X3VucmVnaXN0ZXIoc3RydWN0IHBoeV9kZXZpY2UgKnBoeSlcXG5kcml2ZXJzL25ldC9waHkvZml4ZWRfcGh5LmMtMTg3LXtcXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9maXhlZF9waHkuYy0xODktXFx0b2Zfbm9kZV9wdXQocGh5LVxcdTAwM2VtZGlvLmRldi5vZl9ub2RlKTtcXG5kcml2ZXJzL25ldC9waHkvZml4ZWRfcGh5LmM6MTkwOlxcdGZpeGVkX3BoeV9kZWwocGh5LVxcdTAwM2VtZGlvLmFkZHIpO1xcbmRyaXZlcnMvbmV0L3BoeS9maXhlZF9waHkuYy0xOTEtXFx0cGh5X2RldmljZV9mcmVlKHBoeSk7XFxuZHJpdmVycy9uZXQvcGh5L2ZpeGVkX3BoeS5jLTE5Mi19XFxuZHJpdmVycy9uZXQvcGh5L2ZpeGVkX3BoeS5jOjE5MzpFWFBPUlRfU1lNQk9MX0dQTChmaXhlZF9waHlfdW5yZWdpc3Rlcik7XFxuZHJpdmVycy9uZXQvcGh5L2ZpeGVkX3BoeS5jLTE5NC1cXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9waHlsaW5rLmM9MzM2MT1zdGF0aWMgaW50IHBoeWxpbmtfbWlpX2VtdWxfcmVhZCh1bnNpZ25lZCBpbnQgcmVnLFxcbi0tXFxuZHJpdmVycy9uZXQvcGh5L3BoeWxpbmsuYy0zMzYzLXtcXG5kcml2ZXJzL25ldC9waHkvcGh5bGluay5jOjMzNjQ6XFx0c3RydWN0IGZpeGVkX3BoeV9zdGF0dXMgZnM7XFxuZHJpdmVycy9uZXQvcGh5L3BoeWxpbmsuYy0zMzY1LVxcdHVuc2lnbmVkIGxvbmcgKmxwYSA9IHN0YXRlLVxcdTAwM2VscF9hZHZlcnRpc2luZztcXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9zd3BoeS5jLTQtICpcXG5kcml2ZXJzL25ldC9waHkvc3dwaHkuYzo1OiAqIENvZGUgdGFrZW4gZnJvbSBmaXhlZF9waHkuYyBieSBSdXNzZWxsIEtpbmcuXFxuZHJpdmVycy9uZXQvcGh5L3N3cGh5LmMtNi0gKlxcbi0tXFxuZHJpdmVycy9uZXQvcGh5L3N3cGh5LmM9NzE9c3RhdGljIGludCBzd3BoeV9kZWNvZGVfc3BlZWQoaW50IHNwZWVkKVxcbi0tXFxuZHJpdmVycy9uZXQvcGh5L3N3cGh5LmMtOTItICovXFxuZHJpdmVycy9uZXQvcGh5L3N3cGh5LmM6OTM6aW50IHN3cGh5X3ZhbGlkYXRlX3N0YXRlKGNvbnN0IHN0cnVjdCBmaXhlZF9waHlfc3RhdHVzICpzdGF0ZSlcXG5kcml2ZXJzL25ldC9waHkvc3dwaHkuYy05NC17XFxuLS1cXG5kcml2ZXJzL25ldC9waHkvc3dwaHkuYz0xMDY9RVhQT1JUX1NZTUJPTF9HUEwoc3dwaHlfdmFsaWRhdGVfc3RhdGUpO1xcbi0tXFxuZHJpdmVycy9uZXQvcGh5L3N3cGh5LmMtMTE0LSAqL1xcbmRyaXZlcnMvbmV0L3BoeS9zd3BoeS5jOjExNTppbnQgc3dwaHlfcmVhZF9yZWcoaW50IHJlZywgY29uc3Qgc3RydWN0IGZpeGVkX3BoeV9zdGF0dXMgKnN0YXRlKVxcbmRyaXZlcnMvbmV0L3BoeS9zd3BoeS5jLTExNi17XFxuLS1cXG5kcml2ZXJzL25ldC9waHkvc3dwaHkuaC00LVxcbmRyaXZlcnMvbmV0L3BoeS9zd3BoeS5oOjU6c3RydWN0IGZpeGVkX3BoeV9zdGF0dXM7XFxuZHJpdmVycy9uZXQvcGh5L3N3cGh5LmgtNi1cXG5kcml2ZXJzL25ldC9waHkvc3dwaHkuaDo3OmludCBzd3BoeV92YWxpZGF0ZV9zdGF0ZShjb25zdCBzdHJ1Y3QgZml4ZWRfcGh5X3N0YXR1cyAqc3RhdGUpO1xcbmRyaXZlcnMvbmV0L3BoeS9zd3BoeS5oOjg6aW50IHN3cGh5X3JlYWRfcmVnKGludCByZWcsIGNvbnN0IHN0cnVjdCBmaXhlZF9waHlfc3RhdHVzICpzdGF0ZSk7XFxuZHJpdmVycy9uZXQvcGh5L3N3cGh5LmgtOS1cXG4tLVxcbmluY2x1ZGUvbGludXgvcGh5X2ZpeGVkLmgtNi1cXG5pbmNsdWRlL2xpbnV4L3BoeV9maXhlZC5oOjc6c3RydWN0IGZpeGVkX3BoeV9zdGF0dXMge1xcbmluY2x1ZGUvbGludXgvcGh5X2ZpeGVkLmgtOC1cXHRpbnQgc3BlZWQ7XFxuLS1cXG5pbmNsdWRlL2xpbnV4L3BoeV9maXhlZC5oPTE2PXN0cnVjdCBuZXRfZGV2aWNlO1xcbi0tXFxuaW5jbHVkZS9saW51eC9waHlfZml4ZWQuaC0xOC0jaWYgSVNfRU5BQkxFRChDT05GSUdfRklYRURfUEhZKVxcbmluY2x1ZGUvbGludXgvcGh5X2ZpeGVkLmg6MTk6ZXh0ZXJuIGludCBmaXhlZF9waHlfY2hhbmdlX2NhcnJpZXIoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgYm9vbCBuZXdfY2Fycmllcik7XFxuaW5jbHVkZS9saW51eC9waHlfZml4ZWQuaDoyMDpzdHJ1Y3QgcGh5X2RldmljZSAqZml4ZWRfcGh5X3JlZ2lzdGVyKGNvbnN0IHN0cnVjdCBmaXhlZF9waHlfc3RhdHVzICpzdGF0dXMsXFxuaW5jbHVkZS9saW51eC9waHlfZml4ZWQuaC0yMS1cXHRcXHRcXHRcXHQgICAgICBzdHJ1Y3QgZGV2aWNlX25vZGUgKm5wKTtcXG5pbmNsdWRlL2xpbnV4L3BoeV9maXhlZC5oOjIyOnN0cnVjdCBwaHlfZGV2aWNlICpmaXhlZF9waHlfcmVnaXN0ZXJfMTAwZmQodm9pZCk7XFxuaW5jbHVkZS9saW51eC9waHlfZml4ZWQuaC0yMy1cXG5pbmNsdWRlL2xpbnV4L3BoeV9maXhlZC5oOjI0OmV4dGVybiB2b2lkIGZpeGVkX3BoeV91bnJlZ2lzdGVyKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpO1xcbmluY2x1ZGUvbGludXgvcGh5X2ZpeGVkLmg6MjU6ZXh0ZXJuIGludCBmaXhlZF9waHlfc2V0X2xpbmtfdXBkYXRlKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYsXFxuaW5jbHVkZS9saW51eC9waHlfZml4ZWQuaC0yNi1cXHRcXHRcXHRpbnQgKCpsaW5rX3VwZGF0ZSkoc3RydWN0IG5ldF9kZXZpY2UgKixcXG5pbmNsdWRlL2xpbnV4L3BoeV9maXhlZC5oOjI3OlxcdFxcdFxcdFxcdFxcdCAgIHN0cnVjdCBmaXhlZF9waHlfc3RhdHVzICopKTtcXG5pbmNsdWRlL2xpbnV4L3BoeV9maXhlZC5oLTI4LSNlbHNlXFxuaW5jbHVkZS9saW51eC9waHlfZml4ZWQuaD0yOT1zdGF0aWMgaW5saW5lIHN0cnVjdCBwaHlfZGV2aWNlICpcXG5pbmNsdWRlL2xpbnV4L3BoeV9maXhlZC5oOjMwOmZpeGVkX3BoeV9yZWdpc3Rlcihjb25zdCBzdHJ1Y3QgZml4ZWRfcGh5X3N0YXR1cyAqc3RhdHVzLFxcbmluY2x1ZGUvbGludXgvcGh5X2ZpeGVkLmgtMzEtXFx0XFx0ICAgc3RydWN0IGRldmljZV9ub2RlICpucClcXG4tLVxcbmluY2x1ZGUvbGludXgvcGh5X2ZpeGVkLmgtMzUtXFxuaW5jbHVkZS9saW51eC9waHlfZml4ZWQuaDozNjpzdGF0aWMgaW5saW5lIHN0cnVjdCBwaHlfZGV2aWNlICpmaXhlZF9waHlfcmVnaXN0ZXJfMTAwZmQodm9pZClcXG5pbmNsdWRlL2xpbnV4L3BoeV9maXhlZC5oLTM3LXtcXG4tLVxcbmluY2x1ZGUvbGludXgvcGh5X2ZpeGVkLmgtNDAtXFxuaW5jbHVkZS9saW51eC9waHlfZml4ZWQuaDo0MTpzdGF0aWMgaW5saW5lIHZvaWQgZml4ZWRfcGh5X3VucmVnaXN0ZXIoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcXG5pbmNsdWRlL2xpbnV4L3BoeV9maXhlZC5oLTQyLXtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDNUMDc6MzY6MTguNzQ1NjMwMDExWiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MjMxMTcyMDEzNTUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQ3VycmVudCBMaW5lIG9mIFJlYXNvbmluZyoqXG5cbk9rYXksIHNvIEknbSB0cnlpbmcgdG8gZmlndXJlIG91dCBob3cgdG8gdGVzdCB0aGVzZSBSZWFsdGVrIFBIWSBkcml2ZXJzIGluIGEgdmlydHVhbCBlbnZpcm9ubWVudC4gRmlyc3QgdGhvdWdodCwgYGZpeGVkX3BoeWAgd29uJ3Qgd29yayDigJMgdGhhdCdzIGZvciBmaXhlZCBsaW5rcywgbm90IHRoZSBkeW5hbWljIG5hdHVyZSBvZiBhIFJlYWx0ZWsgUEhZLiBJIG5lZWQgc29tZXRoaW5nIHRoYXQgKnNpbXVsYXRlcyogYSBSZWFsdGVrIFBIWS4gQ2FuIEkgZXZlbiBpbnN0YW50aWF0ZSBvbmUgdmlydHVhbGx5P1xuXG5Vc2luZyB0aGluZ3MgbGlrZSBgbmV0ZGV2c2ltYCwgYGR1bW15YCwgb3IgYHZldGhgIGlzIGEgZGVhZCBlbmQ7IHRoZXkgZG9uJ3QgaW52b2x2ZSBQSFlzIGF0IGFsbC4gQnV0IHdhaXTigKYgU3l6a2FsbGVyIHVzZXMgYHR1bmAsIGB0YXBgLCBhbmQgYHZldGhgLCBkb2Vzbid0IGl0PyBDb3VsZCBTeXprYWxsZXIgYmUgdXNlZCB0byBmdXp6IFBIWSBkcml2ZXJzPyBJdCBoYXMgYSBgc3l6X2dlbmV0bGlua2AgaW50ZXJmYWNlLCBkb2Vzbid0IGl0PyBJcyB0aGVyZSBhbiBgZXRodG9vbGAgbmV0bGluayBpbnRlcmZhY2U/IFBlcmhhcHMgSSBjYW4gdHJpZ2dlciBQSFkgb3BlcmF0aW9ucyBvbiBhIHZpcnR1YWwgZGV2aWNlIHVzaW5nIHRoYXQuXG5cbkhvd2V2ZXIsIHZpcnR1YWwgZGV2aWNlcyB0eXBpY2FsbHkgZG9uJ3QgKmhhdmUqIGEgUEhZIGRldmljZSBhdHRhY2hlZCwgYW5kIEkgbmVlZCBhIGRldmljZSB0byB0ZXN0IHRoZSBwaHkgZnVuY3Rpb25hbGl0eS4gQnV0LCBoYW5nIG9uLi4uIHdoYXQgYWJvdXQgYG1hY3ZsYW5gIG9yIGB2bGFuYD8gVGhvc2Ugc2l0ICpvbiB0b3AqIG9mIGEgcmVhbCBkZXZpY2UsIGJ1dCBpZiB0aGVyZSdzIG5vIHJlYWwgZGV2aWNlLCB0aGVuIHRoZXJlJ3Mgbm8gUEhZLlxuXG5BaGEhIFdhaXTigKYgVVNCIG5ldHdvcmsgYWRhcHRlcnMhIFN5emthbGxlciBmdXp6ZXMgVVNCIGRldmljZXMsIHVzaW5nIGBkdW1teV9oY2RgIGFuZCBgc3l6X3VzYl9jb25uZWN0YC4gTWFueSBVU0IgbmV0d29yayBkcml2ZXJzICpkbyogdXNlIFBIWXMhIFRoaXMgY291bGQgYmUgdGhlIHNvbHV0aW9uLlxuXG5UaGUga2V5IHF1ZXN0aW9uIG5vdyBpcywgZG9lcyAqYW55KiBVU0IgbmV0d29yayBkcml2ZXIgdXNlIE1ESU8gYW5kIGFsbG93IGEgUmVhbHRlayBQSFkgdG8gYmUgYXR0YWNoZWQ/IExldCdzIGNoZWNrIHRoYXQgYW5nbGUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE4ODAzLCJPdXRwdXRUb2tlbnMiOjMxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjUzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAzVDA3OjM2OjQxLjg2MjgzMzUwNVoiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MzkyMzU4NzM2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm1kaW9idXNfcmVnaXN0ZXJcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvdXNiL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC91c2IvYXNpeF9kZXZpY2VzLmM9NjY5PXN0YXRpYyBpbnQgYXg4ODc3Ml9pbml0X21kaW8oc3RydWN0IHVzYm5ldCAqZGV2KVxcbi0tXFxuZHJpdmVycy9uZXQvdXNiL2FzaXhfZGV2aWNlcy5jLTY4Ni1cXG5kcml2ZXJzL25ldC91c2IvYXNpeF9kZXZpY2VzLmM6Njg3OlxcdHJldCA9IG1kaW9idXNfcmVnaXN0ZXIocHJpdi1cXHUwMDNlbWRpbyk7XFxuZHJpdmVycy9uZXQvdXNiL2FzaXhfZGV2aWNlcy5jLTY4OC1cXHRpZiAocmV0KSB7XFxuLS1cXG5kcml2ZXJzL25ldC91c2IvYXg4ODE3MmEuYz02MT1zdGF0aWMgaW50IGF4ODgxNzJhX2luaXRfbWRpbyhzdHJ1Y3QgdXNibmV0ICpkZXYpXFxuLS1cXG5kcml2ZXJzL25ldC91c2IvYXg4ODE3MmEuYy03OS1cXG5kcml2ZXJzL25ldC91c2IvYXg4ODE3MmEuYzo4MDpcXHRyZXQgPSBtZGlvYnVzX3JlZ2lzdGVyKHByaXYtXFx1MDAzZW1kaW8pO1xcbmRyaXZlcnMvbmV0L3VzYi9heDg4MTcyYS5jLTgxLVxcdGlmIChyZXQpIHtcXG4tLVxcbmRyaXZlcnMvbmV0L3VzYi9sYW43OHh4LmM9MjA3MD1zdGF0aWMgaW50IGxhbjc4eHhfbWRpb19pbml0KHN0cnVjdCBsYW43OHh4X25ldCAqZGV2KVxcbi0tXFxuZHJpdmVycy9uZXQvdXNiL2xhbjc4eHguYy0yMTAwLVxcdG5vZGUgPSBvZl9nZXRfY2hpbGRfYnlfbmFtZShkZXYtXFx1MDAzZXVkZXYtXFx1MDAzZWRldi5vZl9ub2RlLCBcXFwibWRpb1xcXCIpO1xcbmRyaXZlcnMvbmV0L3VzYi9sYW43OHh4LmM6MjEwMTpcXHRyZXQgPSBvZl9tZGlvYnVzX3JlZ2lzdGVyKGRldi1cXHUwMDNlbWRpb2J1cywgbm9kZSk7XFxuZHJpdmVycy9uZXQvdXNiL2xhbjc4eHguYy0yMTAyLVxcdG9mX25vZGVfcHV0KG5vZGUpO1xcbi0tXFxuZHJpdmVycy9uZXQvdXNiL3Ntc2M5NXh4LmM9MTE0Nz1zdGF0aWMgaW50IHNtc2M5NXh4X2JpbmQoc3RydWN0IHVzYm5ldCAqZGV2LCBzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZilcXG4tLVxcbmRyaXZlcnMvbmV0L3VzYi9zbXNjOTV4eC5jLTEyNDEtXFxuZHJpdmVycy9uZXQvdXNiL3Ntc2M5NXh4LmM6MTI0MjpcXHRyZXQgPSBtZGlvYnVzX3JlZ2lzdGVyKHBkYXRhLVxcdTAwM2VtZGlvYnVzKTtcXG5kcml2ZXJzL25ldC91c2Ivc21zYzk1eHguYy0xMjQzLVxcdGlmIChyZXQpIHtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDNUMDc6MzY6NDIuMjU1MjA0MTkxWiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjI3MTU5NzI3MzE2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKlJlYWxpemluZyB0aGUgUlRMODI2MUMgUEhZIERyaXZlciBJbnN0YW50aWF0aW9uIE9wcG9ydHVuaXR5KipcblxuT2theSwgdGhpcyBpcyBwcm9taXNpbmcuIFVTQiBuZXR3b3JrIGFkYXB0ZXJzIGxpa2UgYGFzaXhgLCBgc21zYzk1eHhgLCBhbmQgYGxhbjc4eHhgIGFsbCByZWdpc3RlciBhbiBNRElPIGJ1cy4gVGhhdCdzIGtleS4gQW5kIHdoZW4gdGhhdCBNRElPIGJ1cyBnZXRzIHJlZ2lzdGVyZWQsIGl0IHNjYW5zIGZvciBQSFlzLiBOb3csIGlmIEkgY2FuIGNyYWZ0IGEgbW9jayBVU0IgZGV2aWNlIHVzaW5nIHN5emthbGxlciB0aGF0ICpzcGVjaWZpY2FsbHkqIHJlc3BvbmRzIHRvIE1ESU8gcmVhZHMgd2l0aCB0aGUgY29ycmVjdCBQSFkgSUQgZm9yIHRoZSBSVEw4MjYxQywgSSBjYW4gdHJpY2sgdGhlIGtlcm5lbCBpbnRvIGluc3RhbnRpYXRpbmcgdGhlIFJlYWx0ZWsgUEhZIGRyaXZlci5cblxuVGhlIFBIWSBJRCBmb3IgdGhlIFJUTDgyNjFDIGlzIGBSVExfODI2MUNfQ0dgLCB3aGljaCB0cmFuc2xhdGVzIHRvIGAweDAwMWNjODk4YC4gU28sIGlmIHRoZSBVU0IgZGV2aWNlIEkgY3JlYXRlIHJlc3BvbmRzIHdpdGggYDB4MDAxY2Agb24gcmVnaXN0ZXIgMiBhbmQgYDB4Yzg5OGAgb24gcmVnaXN0ZXIgMyBkdXJpbmcgYW4gTURJTyByZWFkLCB0aGUgTURJTyBidXMgKnNob3VsZCogbWF0Y2ggaXQgdG8gdGhlIFJlYWx0ZWsgUEhZIGRyaXZlciBhbmQgY2FsbCBpdHMgcHJvYmUgZnVuY3Rpb24hIExldCdzIHZlcmlmeSB0aGlzLlxuXG5JJ2xsIGNoZWNrIHRoZSBkcml2ZXIgY29kZTsgaXQncyBpbiBgZHJpdmVycy9uZXQvcGh5L3JlYWx0ZWsvcmVhbHRla19tYWluLmNgLiBBaCwgeWVzLCB0aGUgcGF0Y2ggZXhwbGljaXRseSBhZGRzIGEgbWF0Y2ggZm9yIHRoYXQgUEhZIElEOlxuXG5gYGBjXG5cdHtcblx0XHRQSFlfSURfTUFUQ0hfRVhBQ1QoUlRMXzgyNjFDX0NHKSxcblx0XHQubmFtZVx0XHRcdD0gXCJSZWFsdGVrIFJUTDgyNjFDIDEwR2JwcyBQSFlcIixcblx0XHQucHJvYmVcdFx0XHQ9IHJ0bDgyNjF4X3Byb2JlLFxuXHRcdC8vIC4uLiAob3RoZXIgZnVuY3Rpb25zKVxuXHR9LFxuYGBgXG5cblNvLCBpZiB0aGUgTURJTyBidXMgZGV0ZWN0cyB0aGlzIFBIWSBJRCwgaXQnbGwgYmluZCB0byB0aGlzIGRyaXZlciwgd2hpY2ggY29udGFpbnMgYWxsIHRoZSByZXF1aXJlZCBmdW5jdGlvbmFsaXR5LiBOb3csIGEgY3J1Y2lhbCBkZXRhaWwg4oCTIGlzIHRoaXMgYSBDbGF1c2UgMjIgb3IgYSBDbGF1c2UgNDUgUEhZPyBUaGUgcHJlc2VuY2Ugb2YgYGdlbnBoeV9jNDVfcG1hX3NvZnRfcmVzZXRgIGluIHRoZSBkcml2ZXIgc3VnZ2VzdHMgaXQgbWlnaHQgYmUgQ2xhdXNlIDQ1LlxuXG5JIG5lZWQgdG8gY29uZmlybSB0aGF0IGBhc2l4YCBhbmQgYHNtc2M5NXh4YCAodGhlIHBvdGVudGlhbCBVU0IgYWRhcHRlciBkcml2ZXJzKSBzdXBwb3J0IENsYXVzZSA0NSBNRElPIHJlYWRzLiBJZiB0aGV5IGRvbid0LCBJIG5lZWQgdG8gZmlndXJlIG91dCBpZiBhIENsYXVzZSAyMiBNRElPIGJ1cyBjYW4gaW5zdGFudGlhdGUgYSBDbGF1c2UgNDUgUEhZLiBTb21lIFBIWXMgYXJlIGZsZXhpYmxlIGFuZCBoYW5kbGUgYm90aC4gVGhlIGRyaXZlciBzZWVtcyB0byBiZSB1c2luZyBgTURJT19NTURfVkVORDJgIGFuZCBgTURJT19NTURfUE1BUE1EYCwgd2hpY2ggYXJlIGRlZmluaXRlbHkgQ2xhdXNlIDQ1IE1NRHMuIEdvb2QuICpIb3dldmVyKiwgYHBoeV9yZWFkX21tZGAgKmNhbiogYWN0dWFsbHkgd29yayBvdmVyIENsYXVzZSAyMiB1c2luZyBpbmRpcmVjdCBhY2Nlc3MgKHJlZ2lzdGVycyAxMyBhbmQgMTQpIGlmIHRoZSBQSFkgc3VwcG9ydHMgaXQuIFRoYXQncyBhIHZpdGFsIHBvaW50LlxuXG5BbmQsIGFyZSB0aGVyZSBldmVuIFVTQiBuZXR3b3JrIGFkYXB0ZXJzIHRoYXQgYXJlIENsYXVzZSA0NSBjb21wbGlhbnQ/IFllcywgc29tZXRoaW5nIGxpa2UgYEFxdWFudGlhYCBzaG91bGQgcHJvdmlkZSBhIGdvb2QgcmVmZXJlbmNlLiBUaW1lIHRvIGNoZWNrIGBkcml2ZXJzL25ldC91c2IvYCB0byBzZWUgaWYgdGhlcmUgYXJlIGdvb2QgZXhhbXBsZXMgb2YgQ2xhdXNlIDQ1IHN1cHBvcnQuIEknbSBnZXR0aW5nIGNsb3Nlci5cblxuXG4iLCJJbnB1dFRva2VucyI6MTk5NzQsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo3MDQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDNUMDc6Mzc6MDkuNDE0OTM0MzE3WiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNTQ2MDU2MjUsIkVycm9yIjoibm8gbWF0Y2hlcyIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIk1ESU9fLipfQzQ1XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L3VzYi9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiZXJyb3JcIjogXCJubyBtYXRjaGVzXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAzVDA3OjM3OjA5LjU2OTU0OTU3MloiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo3MTc4NTI1MDg3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlIGFuZCB3cml0dGVuIGluIHRoZSBmaXJzdCBwZXJzb246XG5cbioqRGVjb2RpbmcgdGhlIE1JSV9BRERSX0M0NSBGbGFnKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBmbGFnLCBgTUlJX0FERFJfQzQ1YC4gSW5zdGFudGx5LCBpdCBjbGlja3MuICpUaGF0J3MqIHRoZSBDbGF1c2UgNDUgaW5kaWNhdG9yISBSaWdodCwgQ2xhdXNlIDQ1IE1JSSByZWdpc3RlcnMsIGdvdCBpdC4gVGhpcyBtZWFucyB3ZSdyZSBkZWFsaW5nIHdpdGggdGhlIGFkdmFuY2VkIG1hbmFnZW1lbnQgaW50ZXJmYWNlLiBOb3QgdGhlIG9sZCBDbGF1c2UgMjIgc3R1ZmYuIE5vdyBJIG5lZWQgdG8gcmVtZW1iZXIgdGhlIG51YW5jZXMgb2YgQ2xhdXNlIDQ1LCB0aGUgcmVnaXN0ZXIgYWRkcmVzc2luZyBzY2hlbWUsIHRoZSBleHRlbmRlZCByZWdpc3RlcnMsIHRoZeKApiBhaGEhIFRoaXMgZXhwbGFpbnMgdGhlIGJpdCBwYXR0ZXJuIEkgd2FzIHNlZWluZyBpbiB0aGUgZGF0YS4gV2l0aCBDbGF1c2UgNDUsIHRoZSBhZGRyZXNzaW5nIHdvcmtzIGRpZmZlcmVudGx5LiBJIG5lZWQgdG8gcmUtZXZhbHVhdGUgbXkgYXNzdW1wdGlvbiB3aXRoIHRoZSB1bmRlcnN0YW5kaW5nIHRoYXQgSSdtIG5vdCBkZWFsaW5nIHdpdGggdGhlIG9sZGVyLCBtb3JlIHN0cmFpZ2h0Zm9yd2FyZCBNSUkgcmVnaXN0ZXIgc2V0LlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMTM4MywiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIxLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAzVDA3OjM3OjE2Ljc0ODA3ODM4OVoiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTA4NTcxMzQ2LCJFcnJvciI6Im5vIG1hdGNoZXMiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJNSUlfQUREUl9DNDVcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvdXNiL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJlcnJvclwiOiBcIm5vIG1hdGNoZXNcIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDNUMDc6Mzc6MTYuODU2NjU2MTI1WiIsIlNlcSI6MTUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjExOTU4ODY3MTAyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIG15IG93bjpcblxuKipBbmFseXppbmcgUEhZIEFjY2VzcyBpbiBhIENsYXVzZSAyMiBMaW1pdGVkIEVudmlyb25tZW50KipcblxuQWxyaWdodCwgc28gZXZlbiBpZiB3ZSdyZSBkZWFsaW5nIHdpdGggYSBVU0IgZHJpdmVyIHRoYXQncyBvbmx5IGdpdmluZyB1cyBDbGF1c2UgMjIgc3VwcG9ydCwgSSBrbm93IHRoZSBQSFkgZnJhbWV3b3JrIGlzIGNsZXZlciBlbm91Z2ggdG8gc3RpbGwgdGFwIGludG8gdGhvc2UgQ2xhdXNlIDQ1IHJlZ2lzdGVycy4gSXTigJlsbCBkbyB0aGlzIHVzaW5nIGluZGlyZWN0IGFjY2VzcyB0aHJvdWdoIHRob3NlIHJlZ2lzdGVyIHBhaXJzLCAxMyBhbmQgMTQsIGFzIGxvbmcgYXMgdGhlIGJ1cyBpdHNlbGYgZG9lc27igJl0IGhhdmUgdGhlIGJ1aWx0LWluIGNhcGFiaWxpdHkgdG8gYHJlYWRfYzQ1YC4gSSdtIHByZXR0eSBzdXJlIEkndmUgc2VlbiB0aGF0IGJlaGF2aW9yIGltcGxlbWVudGVkIGJlZm9yZS4gVGhhdCdzIGEgZ29vZCBhcHByb2FjaC4gTGV0J3Mgc3RhcnQgYnkgZGlnZ2luZyBpbnRvIGBwaHlfcmVhZF9tbWRgIGFuZCBzZWUgZXhhY3RseSBob3cgaXQncyBoYW5kbGluZyB0aGlzIHNpdHVhdGlvbi4gVGltZSB0byBzZWUgdGhpcyBpbiBwcmFjdGljZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MjE2NDEsIk91dHB1dFRva2VucyI6MzIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo2MywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0wM1QwNzozNzoyOC44MTU1MjY2MzdaIiwiU2VxIjoxNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEzODM2NjcwNSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJwaHlfcmVhZF9tbWRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvcGh5L1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJcXG5GdWxsIG91dHB1dCBpcyB0b28gbG9uZywgc2hvd2luZyA1MDAgb3V0IG9mIDIxNzggbGluZXMuXFxuVXNlIG1vcmUgcHJlY2lzZSBleHByZXNzaW9uIGlmIHBvc3NpYmxlLlxcblxcbmRyaXZlcnMvbmV0L3BoeS9hZGluLmM9Mjc1PXN0YXRpYyBpbnQgYWRpbl9jb25maWdfcmdtaWlfbW9kZShzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxcbi0tXFxuZHJpdmVycy9uZXQvcGh5L2FkaW4uYy0yODQtXFxuZHJpdmVycy9uZXQvcGh5L2FkaW4uYzoyODU6XFx0cmVnID0gcGh5X3JlYWRfbW1kKHBoeWRldiwgTURJT19NTURfVkVORDEsIEFESU4xMzAwX0dFX1JHTUlJX0NGR19SRUcpO1xcbmRyaXZlcnMvbmV0L3BoeS9hZGluLmMtMjg2LVxcdGlmIChyZWcgXFx1MDAzYyAwKVxcbi0tXFxuZHJpdmVycy9uZXQvcGh5L2FkaW4uYz0zMjE9c3RhdGljIGludCBhZGluX2NvbmZpZ19ybWlpX21vZGUoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9hZGluLmMtMzMwLVxcbmRyaXZlcnMvbmV0L3BoeS9hZGluLmM6MzMxOlxcdHJlZyA9IHBoeV9yZWFkX21tZChwaHlkZXYsIE1ESU9fTU1EX1ZFTkQxLCBBRElOMTMwMF9HRV9STUlJX0NGR19SRUcpO1xcbmRyaXZlcnMvbmV0L3BoeS9hZGluLmMtMzMyLVxcdGlmIChyZWcgXFx1MDAzYyAwKVxcbi0tXFxuZHJpdmVycy9uZXQvcGh5L2FkaW4uYz00NDA9c3RhdGljIGludCBhZGluX2dldF9mYXN0X2Rvd24oc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldiwgdTggKm1zZWNzKVxcbi0tXFxuZHJpdmVycy9uZXQvcGh5L2FkaW4uYy00NDMtXFxuZHJpdmVycy9uZXQvcGh5L2FkaW4uYzo0NDQ6XFx0cmVnID0gcGh5X3JlYWRfbW1kKHBoeWRldiwgTURJT19NTURfVkVORDEsIEFESU4xMzAwX0ZMRF9FTl9SRUcpO1xcbmRyaXZlcnMvbmV0L3BoeS9hZGluLmMtNDQ1LVxcdGlmIChyZWcgXFx1MDAzYyAwKVxcbi0tXFxuZHJpdmVycy9uZXQvcGh5L2FkaW4uYz03OTU9c3RhdGljIGludCBhZGluX3NvZnRfcmVzZXQoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9hZGluLmMtODA4LVxcdC8qIElmIHdlIGdldCBhIHJlYWQgZXJyb3Igc29tZXRoaW5nIG1heSBiZSB3cm9uZyAqL1xcbmRyaXZlcnMvbmV0L3BoeS9hZGluLmM6ODA5OlxcdHJjID0gcGh5X3JlYWRfbW1kKHBoeWRldiwgTURJT19NTURfVkVORDEsXFxuZHJpdmVycy9uZXQvcGh5L2FkaW4uYy04MTAtXFx0XFx0XFx0ICBBRElOMTMwMF9HRV9TT0ZUX1JFU0VUX1JFRyk7XFxuLS1cXG5kcml2ZXJzL25ldC9waHkvYWRpbi5jPTgyOD1zdGF0aWMgaW50IGFkaW5fcmVhZF9tbWRfc3RhdF9yZWdzKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYsXFxuLS1cXG5kcml2ZXJzL25ldC9waHkvYWRpbi5jLTgzMy1cXG5kcml2ZXJzL25ldC9waHkvYWRpbi5jOjgzNDpcXHRyZXQgPSBwaHlfcmVhZF9tbWQocGh5ZGV2LCBNRElPX01NRF9WRU5EMSwgc3RhdC1cXHUwMDNlcmVnMSk7XFxuZHJpdmVycy9uZXQvcGh5L2FkaW4uYy04MzUtXFx0aWYgKHJldCBcXHUwMDNjIDApXFxuLS1cXG5kcml2ZXJzL25ldC9waHkvYWRpbi5jLTg0Mi1cXG5kcml2ZXJzL25ldC9waHkvYWRpbi5jOjg0MzpcXHRyZXQgPSBwaHlfcmVhZF9tbWQocGh5ZGV2LCBNRElPX01NRF9WRU5EMSwgc3RhdC1cXHUwMDNlcmVnMik7XFxuZHJpdmVycy9uZXQvcGh5L2FkaW4uYy04NDQtXFx0aWYgKHJldCBcXHUwMDNjIDApXFxuLS1cXG5kcml2ZXJzL25ldC9waHkvYWRpbi5jPTk0NT1zdGF0aWMgaW50IGFkaW5fY2FibGVfdGVzdF9yZXBvcnRfcGFpcihzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2LFxcbi0tXFxuZHJpdmVycy9uZXQvcGh5L2FkaW4uYy05NTAtXFxuZHJpdmVycy9uZXQvcGh5L2FkaW4uYzo5NTE6XFx0cmV0ID0gcGh5X3JlYWRfbW1kKHBoeWRldiwgTURJT19NTURfVkVORDEsXFxuZHJpdmVycy9uZXQvcGh5L2FkaW4uYy05NTItXFx0XFx0XFx0ICAgQURJTjEzMDBfQ0RJQUdfRFRMRF9SU0xUUyhwYWlyKSk7XFxuLS1cXG5kcml2ZXJzL25ldC9waHkvYWRpbi5jLTk2MS1cXG5kcml2ZXJzL25ldC9waHkvYWRpbi5jOjk2MjpcXHRyZXQgPSBwaHlfcmVhZF9tbWQocGh5ZGV2LCBNRElPX01NRF9WRU5EMSxcXG5kcml2ZXJzL25ldC9waHkvYWRpbi5jLTk2My1cXHRcXHRcXHQgICBBRElOMTMwMF9DRElBR19GTFRfRElTVChwYWlyKSk7XFxuLS1cXG5kcml2ZXJzL25ldC9waHkvYWRpbi5jPTk5MT1zdGF0aWMgaW50IGFkaW5fY2FibGVfdGVzdF9nZXRfc3RhdHVzKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYsXFxuLS1cXG5kcml2ZXJzL25ldC9waHkvYWRpbi5jLTk5Ny1cXG5kcml2ZXJzL25ldC9waHkvYWRpbi5jOjk5ODpcXHRyZXQgPSBwaHlfcmVhZF9tbWQocGh5ZGV2LCBNRElPX01NRF9WRU5EMSwgQURJTjEzMDBfQ0RJQUdfUlVOKTtcXG5kcml2ZXJzL25ldC9waHkvYWRpbi5jLTk5OS1cXHRpZiAocmV0IFxcdTAwM2MgMClcXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9hZGluMTEwMC5jPTc2PXN0YXRpYyBpbnQgYWRpbl9yZWFkX3N0YXR1cyhzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxcbi0tXFxuZHJpdmVycy9uZXQvcGh5L2FkaW4xMTAwLmMtODMtXFxuZHJpdmVycy9uZXQvcGh5L2FkaW4xMTAwLmM6ODQ6XFx0cmV0ID0gcGh5X3JlYWRfbW1kKHBoeWRldiwgTURJT19NTURfQU4sIEFESU5fQU5fUEhZX0lOU1RfU1RBVFVTKTtcXG5kcml2ZXJzL25ldC9waHkvYWRpbjExMDAuYy04NS1cXHRpZiAocmV0IFxcdTAwM2MgMClcXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9hZGluMTEwMC5jPTE0NT1zdGF0aWMgaW50IGFkaW5fcGh5X2Fja19pbnRyKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXFxuLS1cXG5kcml2ZXJzL25ldC9waHkvYWRpbjExMDAuYy0xNDctXFx0LyogQ2xlYXIgcGVuZGluZyBpbnRlcnJ1cHRzICovXFxuZHJpdmVycy9uZXQvcGh5L2FkaW4xMTAwLmM6MTQ4OlxcdGludCByYyA9IHBoeV9yZWFkX21tZChwaHlkZXYsIE1ESU9fTU1EX1ZFTkQyLFxcbmRyaXZlcnMvbmV0L3BoeS9hZGluMTEwMC5jLTE0OS1cXHRcXHRcXHQgICAgICBBRElOX1BIWV9TVUJTWVNfSVJRX1NUQVRVUyk7XFxuLS1cXG5kcml2ZXJzL25ldC9waHkvYWRpbjExMDAuYz0xNzM9c3RhdGljIGlycXJldHVybl90IGFkaW5fcGh5X2hhbmRsZV9pbnRlcnJ1cHQoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9hZGluMTEwMC5jLTE3Ni1cXG5kcml2ZXJzL25ldC9waHkvYWRpbjExMDAuYzoxNzc6XFx0aXJxX3N0YXR1cyA9IHBoeV9yZWFkX21tZChwaHlkZXYsIE1ESU9fTU1EX1ZFTkQyLFxcbmRyaXZlcnMvbmV0L3BoeS9hZGluMTEwMC5jLTE3OC1cXHRcXHRcXHRcXHQgIEFESU5fUEhZX1NVQlNZU19JUlFfU1RBVFVTKTtcXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9hZGluMTEwMC5jPTE5Mj1zdGF0aWMgaW50IGFkaW5fc2V0X3Bvd2VyZG93bl9tb2RlKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYsIGJvb2wgZW4pXFxuLS1cXG5kcml2ZXJzL25ldC9waHkvYWRpbjExMDAuYy0yMDEtXFxuZHJpdmVycy9uZXQvcGh5L2FkaW4xMTAwLmM6MjAyOlxcdHJldHVybiBwaHlfcmVhZF9tbWRfcG9sbF90aW1lb3V0KHBoeWRldiwgTURJT19NTURfVkVORDEsIEFESU5fQ1JTTV9TVEFULCByZXQsXFxuZHJpdmVycy9uZXQvcGh5L2FkaW4xMTAwLmMtMjAzLVxcdFxcdFxcdFxcdFxcdCAhIShyZXQgXFx1MDAyNiBBRElOX0NSU01fU0ZUX1BEX1JEWSkgPT0gZW4sXFxuLS1cXG5kcml2ZXJzL25ldC9waHkvYWRpbjExMDAuYz0yMzE9c3RhdGljIGludCBhZGluX3NvZnRfcmVzZXQoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9hZGluMTEwMC5jLTIzOC1cXG5kcml2ZXJzL25ldC9waHkvYWRpbjExMDAuYzoyMzk6XFx0cmV0dXJuIHBoeV9yZWFkX21tZF9wb2xsX3RpbWVvdXQocGh5ZGV2LCBNRElPX01NRF9WRU5EMSwgQURJTl9DUlNNX1NUQVQsIHJldCxcXG5kcml2ZXJzL25ldC9waHkvYWRpbjExMDAuYy0yNDAtXFx0XFx0XFx0XFx0XFx0IChyZXQgXFx1MDAyNiBBRElOX0NSU01fU1lTX1JEWSksXFxuLS1cXG5kcml2ZXJzL25ldC9waHkvYWRpbjExMDAuYz0yNDQ9c3RhdGljIGludCBhZGluX2dldF9mZWF0dXJlcyhzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxcbi0tXFxuZHJpdmVycy9uZXQvcGh5L2FkaW4xMTAwLmMtMjUwLVxcbmRyaXZlcnMvbmV0L3BoeS9hZGluMTEwMC5jOjI1MTpcXHRyZXQgPSBwaHlfcmVhZF9tbWQocGh5ZGV2LCBNRElPX01NRF9QTUFQTUQsIE1ESU9fUE1BXzEwVDFMX1NUQVQpO1xcbmRyaXZlcnMvbmV0L3BoeS9hZGluMTEwMC5jLTI1Mi1cXHRpZiAocmV0IFxcdTAwM2MgMClcXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9hZGluMTEwMC5jPTI3OT1zdGF0aWMgaW50IGFkaW5fZ2V0X3NxaShzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxcbi0tXFxuZHJpdmVycy9uZXQvcGh5L2FkaW4xMTAwLmMtMjg0LVxcbmRyaXZlcnMvbmV0L3BoeS9hZGluMTEwMC5jOjI4NTpcXHRyZXQgPSBwaHlfcmVhZF9tbWQocGh5ZGV2LCBNRElPX01NRF9QTUFQTUQsIE1ESU9fU1RBVDEpO1xcbmRyaXZlcnMvbmV0L3BoeS9hZGluMTEwMC5jLTI4Ni1cXHRpZiAocmV0IFxcdTAwM2MgMClcXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9hZGluMTEwMC5jLTI5MC1cXG5kcml2ZXJzL25ldC9waHkvYWRpbjExMDAuYzoyOTE6XFx0cmV0ID0gcGh5X3JlYWRfbW1kKHBoeWRldiwgTURJT19TVEFUMSwgQURJTl9NU0VfVkFMKTtcXG5kcml2ZXJzL25ldC9waHkvYWRpbjExMDAuYy0yOTItXFx0aWYgKHJldCBcXHUwMDNjIDApXFxuLS1cXG5kcml2ZXJzL25ldC9waHkvYWlyX2FuODgwMS5jPTM1Nz1zdGF0aWMgaW50IGFuODgwMXJfbGVkX2h3X2NvbnRyb2xfZ2V0KHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYsIHU4IGluZGV4LFxcbi0tXFxuZHJpdmVycy9uZXQvcGh5L2Fpcl9hbjg4MDEuYy0zNjQtXFxuZHJpdmVycy9uZXQvcGh5L2Fpcl9hbjg4MDEuYzozNjU6XFx0b24gPSBwaHlfcmVhZF9tbWQocGh5ZGV2LCBNRElPX01NRF9WRU5EMiwgTEVEX09OX0NUUkwoaW5kZXgpKTtcXG5kcml2ZXJzL25ldC9waHkvYWlyX2FuODgwMS5jLTM2Ni1cXHRpZiAob24gXFx1MDAzYyAwKVxcbi0tXFxuZHJpdmVycy9uZXQvcGh5L2Fpcl9hbjg4MDEuYy0zNjgtXFxuZHJpdmVycy9uZXQvcGh5L2Fpcl9hbjg4MDEuYzozNjk6XFx0YmxpbmsgPSBwaHlfcmVhZF9tbWQocGh5ZGV2LCBNRElPX01NRF9WRU5EMiwgTEVEX0JMSU5LX0NUUkwoaW5kZXgpKTtcXG5kcml2ZXJzL25ldC9waHkvYWlyX2FuODgwMS5jLTM3MC1cXHRpZiAoYmxpbmsgXFx1MDAzYyAwKVxcbi0tXFxuZHJpdmVycy9uZXQvcGh5L2Fpcl9lbjg4MTFoLmM9MzI3PXN0YXRpYyBpbnQgZW44ODExaF93YWl0X21jdV9yZWFkeShzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxcbi0tXFxuZHJpdmVycy9uZXQvcGh5L2Fpcl9lbjg4MTFoLmMtMzM2LVxcdC8qIEJlY2F1c2Ugb2YgbWRpby1sb2NrLCBtYXkgaGF2ZSB0byB3YWl0IGZvciBtdWx0aXBsZSBsb2FkcyAqL1xcbmRyaXZlcnMvbmV0L3BoeS9haXJfZW44ODExaC5jOjMzNzpcXHRyZXQgPSBwaHlfcmVhZF9tbWRfcG9sbF90aW1lb3V0KHBoeWRldiwgTURJT19NTURfVkVORDEsXFxuZHJpdmVycy9uZXQvcGh5L2Fpcl9lbjg4MTFoLmMtMzM4LVxcdFxcdFxcdFxcdFxcdEVOODgxMUhfUEhZX0ZXX1NUQVRVUywgcmVnX3ZhbHVlLFxcbi0tXFxuZHJpdmVycy9uZXQvcGh5L2Fpcl9lbjg4MTFoLmM9MTM2OD1zdGF0aWMgaW50IGVuODgxMWhfcmVhZF9zdGF0dXMoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9haXJfZW44ODExaC5jLTEzOTQtXFx0aWYgKHBoeV9pZF9jb21wYXJlX21vZGVsKHBoeWRldi1cXHUwMDNlcGh5X2lkLCBBTjg4MTFIQl9QSFlfSUQpKSB7XFxuZHJpdmVycy9uZXQvcGh5L2Fpcl9lbjg4MTFoLmM6MTM5NTpcXHRcXHR2YWwgPSBwaHlfcmVhZF9tbWQocGh5ZGV2LCBNRElPX01NRF9BTiwgTURJT19BTl8xMEdCVF9TVEFUKTtcXG5kcml2ZXJzL25ldC9waHkvYWlyX2VuODgxMWguYy0xMzk2LVxcdFxcdGlmICh2YWwgXFx1MDAzYyAwKVxcbi0tXFxuZHJpdmVycy9uZXQvcGh5L2FxdWFudGlhL2FxdWFudGlhX2Zpcm13YXJlLmM9OTA9c3RhdGljIGludCBhcXJfZndfbG9hZF9tZW1vcnkoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldiwgdTMyIGFkZHIsXFxuLS1cXG5kcml2ZXJzL25ldC9waHkvYXF1YW50aWEvYXF1YW50aWFfZmlybXdhcmUuYy0xMzctXFx0LyogLi4uZ2V0cyBDUkMgZnJvbSBNQUlMQk9YIGFmdGVyIHdlIGhhdmUgbG9hZGVkIHRoZSBlbnRpcmUgc2VjdGlvbi4uLiAqL1xcbmRyaXZlcnMvbmV0L3BoeS9hcXVhbnRpYS9hcXVhbnRpYV9maXJtd2FyZS5jOjEzODpcXHR1cF9jcmMgPSBwaHlfcmVhZF9tbWQocGh5ZGV2LCBNRElPX01NRF9WRU5EMSwgVkVORDFfR0xPQkFMX01BSUxCT1hfSU5URVJGQUNFMik7XFxuZHJpdmVycy9uZXQvcGh5L2FxdWFudGlhL2FxdWFudGlhX2Zpcm13YXJlLmMtMTM5LVxcdC8qIC4uLmFuZCBtYWtlIHN1cmUgaXQgZG9lcyBtYXRjaCBvdXIgY2FsY3VsYXRlZCBDUkMgKi9cXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9hcXVhbnRpYS9hcXVhbnRpYV9od21vbi5jPTQyPXN0YXRpYyBpbnQgYXFyX2h3bW9uX2dldChzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2LCBpbnQgcmVnLCBsb25nICp2YWx1ZSlcXG5kcml2ZXJzL25ldC9waHkvYXF1YW50aWEvYXF1YW50aWFfaHdtb24uYy00My17XFxuZHJpdmVycy9uZXQvcGh5L2FxdWFudGlhL2FxdWFudGlhX2h3bW9uLmM6NDQ6XFx0aW50IHRlbXAgPSBwaHlfcmVhZF9tbWQocGh5ZGV2LCBNRElPX01NRF9WRU5EMSwgcmVnKTtcXG5kcml2ZXJzL25ldC9waHkvYXF1YW50aWEvYXF1YW50aWFfaHdtb24uYy00NS1cXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9hcXVhbnRpYS9hcXVhbnRpYV9od21vbi5jPTY4PXN0YXRpYyBpbnQgYXFyX2h3bW9uX3Rlc3RfYml0KHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYsIGludCByZWcsIGludCBiaXQpXFxuZHJpdmVycy9uZXQvcGh5L2FxdWFudGlhL2FxdWFudGlhX2h3bW9uLmMtNjkte1xcbmRyaXZlcnMvbmV0L3BoeS9hcXVhbnRpYS9hcXVhbnRpYV9od21vbi5jOjcwOlxcdGludCB2YWwgPSBwaHlfcmVhZF9tbWQocGh5ZGV2LCBNRElPX01NRF9WRU5EMSwgcmVnKTtcXG5kcml2ZXJzL25ldC9waHkvYXF1YW50aWEvYXF1YW50aWFfaHdtb24uYy03MS1cXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9hcXVhbnRpYS9hcXVhbnRpYV9sZWRzLmM9NDc9aW50IGFxcl9waHlfbGVkX2h3X2NvbnRyb2xfZ2V0KHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYsIHU4IGluZGV4LFxcbi0tXFxuZHJpdmVycy9uZXQvcGh5L2FxdWFudGlhL2FxdWFudGlhX2xlZHMuYy01NC1cXG5kcml2ZXJzL25ldC9waHkvYXF1YW50aWEvYXF1YW50aWFfbGVkcy5jOjU1OlxcdHZhbCA9IHBoeV9yZWFkX21tZChwaHlkZXYsIE1ESU9fTU1EX1ZFTkQxLCBBUVJfTEVEX1BST1YoaW5kZXgpKTtcXG5kcml2ZXJzL25ldC9waHkvYXF1YW50aWEvYXF1YW50aWFfbGVkcy5jLTU2LVxcdGlmICh2YWwgXFx1MDAzYyAwKVxcbi0tXFxuZHJpdmVycy9uZXQvcGh5L2FxdWFudGlhL2FxdWFudGlhX21haW4uYz0xMzM9c3RhdGljIHU2NCBhcXIxMDdfZ2V0X3N0YXQoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldiwgaW50IGluZGV4KVxcbi0tXFxuZHJpdmVycy9uZXQvcGh5L2FxdWFudGlhL2FxdWFudGlhX21haW4uYy0xNDAtXFxuZHJpdmVycy9uZXQvcGh5L2FxdWFudGlhL2FxdWFudGlhX21haW4uYzoxNDE6XFx0dmFsID0gcGh5X3JlYWRfbW1kKHBoeWRldiwgTURJT19NTURfQzIyRVhULCBzdGF0LVxcdTAwM2VyZWcpO1xcbmRyaXZlcnMvbmV0L3BoeS9hcXVhbnRpYS9hcXVhbnRpYV9tYWluLmMtMTQyLVxcdGlmICh2YWwgXFx1MDAzYyAwKVxcbi0tXFxuZHJpdmVycy9uZXQvcGh5L2FxdWFudGlhL2FxdWFudGlhX21haW4uYy0xNDYtXFx0aWYgKGxlbl9oKSB7XFxuZHJpdmVycy9uZXQvcGh5L2FxdWFudGlhL2FxdWFudGlhX21haW4uYzoxNDc6XFx0XFx0dmFsID0gcGh5X3JlYWRfbW1kKHBoeWRldiwgTURJT19NTURfQzIyRVhULCBzdGF0LVxcdTAwM2VyZWcgKyAxKTtcXG5kcml2ZXJzL25ldC9waHkvYXF1YW50aWEvYXF1YW50aWFfbWFpbi5jLTE0OC1cXHRcXHRpZiAodmFsIFxcdTAwM2MgMClcXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9hcXVhbnRpYS9hcXVhbnRpYV9tYWluLmM9MjUzPXN0YXRpYyBpbnQgYXFyX2NvbmZpZ19pbnRyKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXFxuLS1cXG5kcml2ZXJzL25ldC9waHkvYXF1YW50aWEvYXF1YW50aWFfbWFpbi5jLTI1OS1cXHRcXHQvKiBDbGVhciBhbnkgcGVuZGluZyBpbnRlcnJ1cHRzIGJlZm9yZSBlbmFibGluZyB0aGVtICovXFxuZHJpdmVycy9uZXQvcGh5L2FxdWFudGlhL2FxdWFudGlhX21haW4uYzoyNjA6XFx0XFx0ZXJyID0gcGh5X3JlYWRfbW1kKHBoeWRldiwgTURJT19NTURfQU4sIE1ESU9fQU5fVFhfVkVORF9JTlRfU1RBVFVTMik7XFxuZHJpdmVycy9uZXQvcGh5L2FxdWFudGlhL2FxdWFudGlhX21haW4uYy0yNjEtXFx0XFx0aWYgKGVyciBcXHUwMDNjIDApXFxuLS1cXG5kcml2ZXJzL25ldC9waHkvYXF1YW50aWEvYXF1YW50aWFfbWFpbi5jLTI4Mi1cXHRcXHQvKiBDbGVhciBhbnkgcGVuZGluZyBpbnRlcnJ1cHRzIGFmdGVyIHdlIGhhdmUgZGlzYWJsZWQgdGhlbSAqL1xcbmRyaXZlcnMvbmV0L3BoeS9hcXVhbnRpYS9hcXVhbnRpYV9tYWluLmM6MjgzOlxcdFxcdGVyciA9IHBoeV9yZWFkX21tZChwaHlkZXYsIE1ESU9fTU1EX0FOLCBNRElPX0FOX1RYX1ZFTkRfSU5UX1NUQVRVUzIpO1xcbmRyaXZlcnMvbmV0L3BoeS9hcXVhbnRpYS9hcXVhbnRpYV9tYWluLmMtMjg0LVxcdFxcdGlmIChlcnIgXFx1MDAzYyAwKVxcbi0tXFxuZHJpdmVycy9uZXQvcGh5L2FxdWFudGlhL2FxdWFudGlhX21haW4uYz0yOTE9c3RhdGljIGlycXJldHVybl90IGFxcl9oYW5kbGVfaW50ZXJydXB0KHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXFxuLS1cXG5kcml2ZXJzL25ldC9waHkvYXF1YW50aWEvYXF1YW50aWFfbWFpbi5jLTI5NC1cXG5kcml2ZXJzL25ldC9waHkvYXF1YW50aWEvYXF1YW50aWFfbWFpbi5jOjI5NTpcXHRpcnFfc3RhdHVzID0gcGh5X3JlYWRfbW1kKHBoeWRldiwgTURJT19NTURfQU4sXFxuZHJpdmVycy9uZXQvcGh5L2FxdWFudGlhL2FxdWFudGlhX21haW4uYy0yOTYtXFx0XFx0XFx0XFx0ICBNRElPX0FOX1RYX1ZFTkRfSU5UX1NUQVRVUzIpO1xcbi0tXFxuZHJpdmVycy9uZXQvcGh5L2FxdWFudGlhL2FxdWFudGlhX21haW4uYz0zMTA9c3RhdGljIGludCBhcXJfcmVhZF9zdGF0dXMoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9hcXVhbnRpYS9hcXVhbnRpYV9tYWluLmMtMzE0LVxcdGlmIChwaHlkZXYtXFx1MDAzZWF1dG9uZWcgPT0gQVVUT05FR19FTkFCTEUpIHtcXG5kcml2ZXJzL25ldC9waHkvYXF1YW50aWEvYXF1YW50aWFfbWFpbi5jOjMxNTpcXHRcXHR2YWwgPSBwaHlfcmVhZF9tbWQocGh5ZGV2LCBNRElPX01NRF9BTiwgTURJT19BTl9SWF9MUF9TVEFUMSk7XFxuZHJpdmVycy9uZXQvcGh5L2FxdWFudGlhL2FxdWFudGlhX21haW4uYy0zMTYtXFx0XFx0aWYgKHZhbCBcXHUwMDNjIDApXFxuLS1cXG5kcml2ZXJzL25ldC9waHkvYXF1YW50aWEvYXF1YW50aWFfbWFpbi5jLTMzMC1cXHRpZiAodmFsKSB7XFxuZHJpdmVycy9uZXQvcGh5L2FxdWFudGlhL2FxdWFudGlhX21haW4uYzozMzE6XFx0XFx0dmFsID0gcGh5X3JlYWRfbW1kKHBoeWRldiwgTURJT19NTURfQU4sIE1ESU9fQU5fUkVTVkRfVkVORF9TVEFUVVMxKTtcXG5kcml2ZXJzL25ldC9waHkvYXF1YW50aWEvYXF1YW50aWFfbWFpbi5jLTMzMi1cXHRcXHRpZiAodmFsIFxcdTAwM2MgMClcXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9hcXVhbnRpYS9hcXVhbnRpYV9tYWluLmM9NDc2PXN0YXRpYyBpbnQgYXFyX2dlbjFfcmVhZF9yYXRlKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXFxuLS1cXG5kcml2ZXJzL25ldC9waHkvYXF1YW50aWEvYXF1YW50aWFfbWFpbi5jLTQ3OS1cXG5kcml2ZXJzL25ldC9waHkvYXF1YW50aWEvYXF1YW50aWFfbWFpbi5jOjQ4MDpcXHR2YWwgPSBwaHlfcmVhZF9tbWQocGh5ZGV2LCBNRElPX01NRF9BTiwgTURJT19BTl9UWF9WRU5EX1NUQVRVUzEpO1xcbmRyaXZlcnMvbmV0L3BoeS9hcXVhbnRpYS9hcXVhbnRpYV9tYWluLmMtNDgxLVxcdGlmICh2YWwgXFx1MDAzYyAwKVxcbi0tXFxuZHJpdmVycy9uZXQvcGh5L2FxdWFudGlhL2FxdWFudGlhX21haW4uYz01Mzc9c3RhdGljIGludCBhcXJfZ2VuMV9yZWFkX3N0YXR1cyhzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxcbi0tXFxuZHJpdmVycy9uZXQvcGh5L2FxdWFudGlhL2FxdWFudGlhX21haW4uYy01NTMtXFx0ICovXFxuZHJpdmVycy9uZXQvcGh5L2FxdWFudGlhL2FxdWFudGlhX21haW4uYzo1NTQ6XFx0cmV0ID0gcGh5X3JlYWRfbW1kX3BvbGxfdGltZW91dChwaHlkZXYsIE1ESU9fTU1EX1BIWVhTLFxcbmRyaXZlcnMvbmV0L3BoeS9hcXVhbnRpYS9hcXVhbnRpYV9tYWluLmMtNTU1LVxcdFxcdFxcdFxcdFxcdE1ESU9fUEhZWFNfVkVORF9JRl9TVEFUVVMsIHZhbCxcXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9hcXVhbnRpYS9hcXVhbnRpYV9tYWluLmM9NjI2PXN0YXRpYyBpbnQgYXFyMTA3X2dldF9kb3duc2hpZnQoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldiwgdTggKmRhdGEpXFxuLS1cXG5kcml2ZXJzL25ldC9waHkvYXF1YW50aWEvYXF1YW50aWFfbWFpbi5jLTYyOS1cXG5kcml2ZXJzL25ldC9waHkvYXF1YW50aWEvYXF1YW50aWFfbWFpbi5jOjYzMDpcXHR2YWwgPSBwaHlfcmVhZF9tbWQocGh5ZGV2LCBNRElPX01NRF9BTiwgTURJT19BTl9WRU5EX1BST1YpO1xcbmRyaXZlcnMvbmV0L3BoeS9hcXVhbnRpYS9hcXVhbnRpYV9tYWluLmMtNjMxLVxcdGlmICh2YWwgXFx1MDAzYyAwKVxcbi0tXFxuZHJpdmVycy9uZXQvcGh5L2FxdWFudGlhL2FxdWFudGlhX21haW4uYz02OTE9aW50IGFxcl93YWl0X3Jlc2V0X2NvbXBsZXRlKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXFxuLS1cXG5kcml2ZXJzL25ldC9waHkvYXF1YW50aWEvYXF1YW50aWFfbWFpbi5jLTY5NC1cXG5kcml2ZXJzL25ldC9waHkvYXF1YW50aWEvYXF1YW50aWFfbWFpbi5jOjY5NTpcXHRyZXQgPSByZWFkX3BvbGxfdGltZW91dChwaHlfcmVhZF9tbWQsIHZhbCwgdmFsICE9IDAsXFxuZHJpdmVycy9uZXQvcGh5L2FxdWFudGlhL2FxdWFudGlhX21haW4uYy02OTYtXFx0XFx0XFx0XFx0QVFSX0ZXX1dBSVRfU0xFRVBfVVMsIEFRUl9GV19XQUlUX1RJTUVPVVRfVVMsXFxuLS1cXG5kcml2ZXJzL25ldC9waHkvYXF1YW50aWEvYXF1YW50aWFfbWFpbi5jPTcwOD1zdGF0aWMgaW50IGFxcl9idWlsZF9maW5nZXJwcmludChzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxcbi0tXFxuZHJpdmVycy9uZXQvcGh5L2FxdWFudGlhL2FxdWFudGlhX21haW4uYy03MTQtXFxuZHJpdmVycy9uZXQvcGh5L2FxdWFudGlhL2FxdWFudGlhX21haW4uYzo3MTU6XFx0dmFsID0gcGh5X3JlYWRfbW1kKHBoeWRldiwgTURJT19NTURfVkVORDEsIFZFTkQxX0dMT0JBTF9GV19JRCk7XFxuZHJpdmVycy9uZXQvcGh5L2FxdWFudGlhL2FxdWFudGlhX21haW4uYy03MTYtXFx0aWYgKHZhbCBcXHUwMDNjIDApXFxuLS1cXG5kcml2ZXJzL25ldC9waHkvYXF1YW50aWEvYXF1YW50aWFfbWFpbi5jLTcyMS1cXG5kcml2ZXJzL25ldC9waHkvYXF1YW50aWEvYXF1YW50aWFfbWFpbi5jOjcyMjpcXHR2YWwgPSBwaHlfcmVhZF9tbWQocGh5ZGV2LCBNRElPX01NRF9WRU5EMSwgVkVORDFfR0xPQkFMX1JTVkRfU1RBVDEpO1xcbmRyaXZlcnMvbmV0L3BoeS9hcXVhbnRpYS9hcXVhbnRpYV9tYWluLmMtNzIzLVxcdGlmICh2YWwgXFx1MDAzYyAwKVxcbi0tXFxuZHJpdmVycy9uZXQvcGh5L2FxdWFudGlhL2FxdWFudGlhX21haW4uYy03MjgtXFxuZHJpdmVycy9uZXQvcGh5L2FxdWFudGlhL2FxdWFudGlhX21haW4uYzo3Mjk6XFx0dmFsID0gcGh5X3JlYWRfbW1kKHBoeWRldiwgTURJT19NTURfUE1BUE1ELCBQTUFQTURfRldfTUlTQ19JRCk7XFxuZHJpdmVycy9uZXQvcGh5L2FxdWFudGlhL2FxdWFudGlhX21haW4uYy03MzAtXFx0aWYgKHZhbCBcXHUwMDNjIDApXFxuLS1cXG5kcml2ZXJzL25ldC9waHkvYXF1YW50aWEvYXF1YW50aWFfbWFpbi5jLTczNC1cXG5kcml2ZXJzL25ldC9waHkvYXF1YW50aWEvYXF1YW50aWFfbWFpbi5jOjczNTpcXHR2YWwgPSBwaHlfcmVhZF9tbWQocGh5ZGV2LCBNRElPX01NRF9QTUFQTUQsIFBNQVBNRF9GV19NSVNDX1ZFUik7XFxuZHJpdmVycy9uZXQvcGh5L2FxdWFudGlhL2FxdWFudGlhX21haW4uYy03MzYtXFx0aWYgKHZhbCBcXHUwMDNjIDApXFxuLS1cXG5kcml2ZXJzL25ldC9waHkvYXF1YW50aWEvYXF1YW50aWFfbWFpbi5jPTgzMz1zdGF0aWMgaW50IGFxcl9nZW4yX3JlYWRfZ2xvYmFsX3N5c2NmZyhzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxcbi0tXFxuZHJpdmVycy9uZXQvcGh5L2FxdWFudGlhL2FxdWFudGlhX21haW4uYy04NDQtXFxuZHJpdmVycy9uZXQvcGh5L2FxdWFudGlhL2FxdWFudGlhX21haW4uYzo4NDU6XFx0XFx0dmFsID0gcGh5X3JlYWRfbW1kKHBoeWRldiwgTURJT19NTURfVkVORDEsXFxuZHJpdmVycy9uZXQvcGh5L2FxdWFudGlhL2FxdWFudGlhX21haW4uYy04NDYtXFx0XFx0XFx0XFx0ICAgYXFyX2dsb2JhbF9jZmdfcmVnc1tpXS5yZWcpO1xcbi0tXFxuZHJpdmVycy9uZXQvcGh5L2FxdWFudGlhL2FxdWFudGlhX21haW4uYz05MTA9c3RhdGljIGludCBhcXJfZ2VuMl9maWxsX2ludGVyZmFjZV9tb2RlcyhzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxcbi0tXFxuZHJpdmVycy9uZXQvcGh5L2FxdWFudGlhL2FxdWFudGlhX21haW4uYy05MjMtXFx0aWYgKHByaXYtXFx1MDAzZXdhaXRfb25fZ2xvYmFsX2NmZykge1xcbmRyaXZlcnMvbmV0L3BoeS9hcXVhbnRpYS9hcXVhbnRpYV9tYWluLmM6OTI0OlxcdFxcdHJldCA9IHBoeV9yZWFkX21tZF9wb2xsX3RpbWVvdXQocGh5ZGV2LCBNRElPX01NRF9WRU5EMSxcXG5kcml2ZXJzL25ldC9waHkvYXF1YW50aWEvYXF1YW50aWFfbWFpbi5jLTkyNS1cXHRcXHRcXHRcXHRcXHRcXHRWRU5EMV9HTE9CQUxfQ0ZHXzEwME0sIHZhbCxcXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9hcXVhbnRpYS9hcXVhbnRpYV9tYWluLmM9OTcwPXN0YXRpYyB2b2lkIGFxcjEwN19saW5rX2NoYW5nZV9ub3RpZnkoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9hcXVhbnRpYS9hcXVhbnRpYV9tYWluLmMtOTc4LVxcbmRyaXZlcnMvbmV0L3BoeS9hcXVhbnRpYS9hcXVhbnRpYV9tYWluLmM6OTc5OlxcdHZhbCA9IHBoeV9yZWFkX21tZChwaHlkZXYsIE1ESU9fTU1EX0FOLCBNRElPX0FOX1JYX0xQX1NUQVQxKTtcXG5kcml2ZXJzL25ldC9waHkvYXF1YW50aWEvYXF1YW50aWFfbWFpbi5jLTk4MC1cXHQvKiBjYWxsIGZhaWxlZCBvciBsaW5rIHBhcnRuZXIgaXMgbm8gQXF1YW50aWEgUEhZICovXFxuLS1cXG5kcml2ZXJzL25ldC9waHkvYXF1YW50aWEvYXF1YW50aWFfbWFpbi5jLTk4Ni1cXG5kcml2ZXJzL25ldC9waHkvYXF1YW50aWEvYXF1YW50aWFfbWFpbi5jOjk4NzpcXHR2YWwgPSBwaHlfcmVhZF9tbWQocGh5ZGV2LCBNRElPX01NRF9BTiwgTURJT19BTl9SWF9MUF9TVEFUNCk7XFxuZHJpdmVycy9uZXQvcGh5L2FxdWFudGlhL2FxdWFudGlhX21haW4uYy05ODgtXFx0aWYgKHZhbCBcXHUwMDNjIDApXFxuLS1cXG5kcml2ZXJzL25ldC9waHkvYXF1YW50aWEvYXF1YW50aWFfbWFpbi5jLTk5My1cXG5kcml2ZXJzL25ldC9waHkvYXF1YW50aWEvYXF1YW50aWFfbWFpbi5jOjk5NDpcXHR2YWwgPSBwaHlfcmVhZF9tbWQocGh5ZGV2LCBNRElPX01NRF9BTiwgTURJT19BTl9SWF9WRU5EX1NUQVQzKTtcXG5kcml2ZXJzL25ldC9waHkvYXF1YW50aWEvYXF1YW50aWFfbWFpbi5jLTk5NS1cXHRpZiAodmFsIFxcdTAwM2MgMClcXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9hcXVhbnRpYS9hcXVhbnRpYV9tYWluLmMtMTAwNS1cXG5kcml2ZXJzL25ldC9waHkvYXF1YW50aWEvYXF1YW50aWFfbWFpbi5jOjEwMDY6XFx0dmFsID0gcGh5X3JlYWRfbW1kKHBoeWRldiwgTURJT19NTURfVkVORDEsIFZFTkQxX0dMT0JBTF9SU1ZEX1NUQVQ5KTtcXG5kcml2ZXJzL25ldC9waHkvYXF1YW50aWEvYXF1YW50aWFfbWFpbi5jLTEwMDctXFx0aWYgKHZhbCBcXHUwMDNjIDApXFxuLS1cXG5kcml2ZXJzL25ldC9waHkvYXF1YW50aWEvYXF1YW50aWFfbWFpbi5jPTEwMTU9c3RhdGljIGludCBhcXJfZ2VuMV93YWl0X3Byb2Nlc3Nvcl9pbnRlbnNpdmVfb3Aoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9hcXVhbnRpYS9hcXVhbnRpYV9tYWluLmMtMTAyNS1cXG5kcml2ZXJzL25ldC9waHkvYXF1YW50aWEvYXF1YW50aWFfbWFpbi5jOjEwMjY6XFx0ZXJyID0gcGh5X3JlYWRfbW1kX3BvbGxfdGltZW91dChwaHlkZXYsIE1ESU9fTU1EX1ZFTkQxLFxcbmRyaXZlcnMvbmV0L3BoeS9hcXVhbnRpYS9hcXVhbnRpYV9tYWluLmMtMTAyNy1cXHRcXHRcXHRcXHRcXHRWRU5EMV9HTE9CQUxfR0VOX1NUQVQyLCB2YWwsXFxuLS1cXG5kcml2ZXJzL25ldC9waHkvYXMyMXh4eC5jPTI5Nz1zdGF0aWMgaW50IGFlb25fZmlybXdhcmVfYm9vdChzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2LCBjb25zdCB1OCAqZGF0YSxcXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9hczIxeHh4LmMtMzE4LVxcbmRyaXZlcnMvbmV0L3BoeS9hczIxeHh4LmM6MzE5OlxcdHZhbCA9IHBoeV9yZWFkX21tZChwaHlkZXYsIE1ESU9fTU1EX1ZFTkQxLFxcbmRyaXZlcnMvbmV0L3BoeS9hczIxeHh4LmMtMzIwLVxcdFxcdFxcdCAgIFZFTkQxX0dMQl9SRUdfTURJT19JTkRJUkVDVF9TVEFUVVMpO1xcbi0tXFxuZHJpdmVycy9uZXQvcGh5L2FzMjF4eHguYz0zOTI9c3RhdGljIGludCBhZW9uX2lwY193YWl0X2NtZChzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2LCBib29sIHBhcml0eV9zdGF0dXMpXFxuLS1cXG5kcml2ZXJzL25ldC9waHkvYXMyMXh4eC5jLTM5OS1cXHQgKi9cXG5kcml2ZXJzL25ldC9waHkvYXMyMXh4eC5jOjQwMDpcXHRyZXR1cm4gcGh5X3JlYWRfbW1kX3BvbGxfdGltZW91dChwaHlkZXYsIE1ESU9fTU1EX1ZFTkQxLCBWRU5EMV9JUENfU1RTLCB2YWwsXFxuZHJpdmVycy9uZXQvcGh5L2FzMjF4eHguYy00MDEtXFx0XFx0XFx0XFx0XFx0IGFlb25faXBjX3JlYWR5KHZhbCwgcGFyaXR5X3N0YXR1cyksXFxuLS1cXG5kcml2ZXJzL25ldC9waHkvYXMyMXh4eC5jPTQwNT1zdGF0aWMgaW50IGFlb25faXBjX3NlbmRfY21kKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYsXFxuLS1cXG5kcml2ZXJzL25ldC9waHkvYXMyMXh4eC5jLTQzOS1cXG5kcml2ZXJzL25ldC9waHkvYXMyMXh4eC5jOjQ0MDpcXHRyZXQgPSBwaHlfcmVhZF9tbWQocGh5ZGV2LCBNRElPX01NRF9WRU5EMSwgVkVORDFfSVBDX1NUUyk7XFxuZHJpdmVycy9uZXQvcGh5L2FzMjF4eHguYy00NDEtXFx0aWYgKHJldCBcXHUwMDNjIDApXFxuLS1cXG5kcml2ZXJzL25ldC9waHkvYXMyMXh4eC5jPTQ1NT1zdGF0aWMgaW50IGFlb25faXBjX3NlbmRfbXNnKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYsXFxuLS1cXG5kcml2ZXJzL25ldC9waHkvYXMyMXh4eC5jLTUwNi1cXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgRElWX1JPVU5EX1VQKHJldF9zaXplLCBzaXplb2YodTE2KSk7IGkrKykge1xcbmRyaXZlcnMvbmV0L3BoeS9hczIxeHh4LmM6NTA3OlxcdFxcdHJldCA9IHBoeV9yZWFkX21tZChwaHlkZXYsIE1ESU9fTU1EX1ZFTkQxLCBWRU5EMV9JUENfREFUQShpKSk7XFxuZHJpdmVycy9uZXQvcGh5L2FzMjF4eHguYy01MDgtXFx0XFx0aWYgKHJldCBcXHUwMDNjIDApXFxuLS1cXG5kcml2ZXJzL25ldC9waHkvYXMyMXh4eC5jPTYzNj1zdGF0aWMgaW50IGFzMjF4eHhfcmVhZF9saW5rKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYsIGludCAqYm1jcilcXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9hczIxeHh4LmMtNjQyLVxcdCAqL1xcbmRyaXZlcnMvbmV0L3BoeS9hczIxeHh4LmM6NjQzOlxcdCpibWNyID0gcGh5X3JlYWRfbW1kKHBoeWRldiwgTURJT19NTURfQU4sXFxuZHJpdmVycy9uZXQvcGh5L2FzMjF4eHguYy02NDQtXFx0XFx0XFx0ICAgICBBUzIxWFhYX01ESU9fQU5fQzIyICsgTUlJX0JNQ1IpO1xcbi0tXFxuZHJpdmVycy9uZXQvcGh5L2FzMjF4eHguYy02NTUtXFxuZHJpdmVycy9uZXQvcGh5L2FzMjF4eHguYzo2NTY6XFx0c3RhdHVzID0gcGh5X3JlYWRfbW1kKHBoeWRldiwgTURJT19NTURfQU4sIE1ESU9fU1RBVDEpO1xcbmRyaXZlcnMvbmV0L3BoeS9hczIxeHh4LmMtNjU3LVxcdGlmIChzdGF0dXMgXFx1MDAzYyAwKVxcbi0tXFxuZHJpdmVycy9uZXQvcGh5L2FzMjF4eHguYz02NjU9c3RhdGljIGludCBhczIxeHh4X3JlYWRfYzIyX2xwYShzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxcbi0tXFxuZHJpdmVycy9uZXQvcGh5L2FzMjF4eHguYy02NzEtXFx0ICovXFxuZHJpdmVycy9uZXQvcGh5L2FzMjF4eHguYzo2NzI6XFx0bHBhZ2IgPSBwaHlfcmVhZF9tbWQocGh5ZGV2LCBNRElPX01NRF9BTixcXG5kcml2ZXJzL25ldC9waHkvYXMyMXh4eC5jLTY3My1cXHRcXHRcXHQgICAgIEFTMjFYWFhfTURJT19BTl9DMjIgKyBNSUlfU1RBVDEwMDApO1xcbi0tXFxuZHJpdmVycy9uZXQvcGh5L2FzMjF4eHguYy02NzctXFx0aWYgKGxwYWdiIFxcdTAwMjYgTFBBXzEwMDBNU0ZBSUwpIHtcXG5kcml2ZXJzL25ldC9waHkvYXMyMXh4eC5jOjY3ODpcXHRcXHRpbnQgYWR2ID0gcGh5X3JlYWRfbW1kKHBoeWRldiwgTURJT19NTURfQU4sXFxuZHJpdmVycy9uZXQvcGh5L2FzMjF4eHguYy02NzktXFx0XFx0XFx0XFx0ICAgICAgIEFTMjFYWFhfTURJT19BTl9DMjIgKyBNSUlfQ1RSTDEwMDApO1xcbi0tXFxuZHJpdmVycy9uZXQvcGh5L2FzMjF4eHguYz02OTc9c3RhdGljIGludCBhczIxeHh4X3JlYWRfc3RhdHVzKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXFxuLS1cXG5kcml2ZXJzL25ldC9waHkvYXMyMXh4eC5jLTcyOS1cXG5kcml2ZXJzL25ldC9waHkvYXMyMXh4eC5jOjczMDpcXHRcXHRzcGVlZCA9IHBoeV9yZWFkX21tZChwaHlkZXYsIE1ESU9fTU1EX1ZFTkQxLFxcbmRyaXZlcnMvbmV0L3BoeS9hczIxeHh4LmMtNzMxLVxcdFxcdFxcdFxcdCAgICAgVkVORDFfU1BFRURfU1RBVFVTKTtcXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9hczIxeHh4LmM9ODAzPXN0YXRpYyBpbnQgYXMyMXh4eF9sZWRfaHdfY29udHJvbF9nZXQoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldiwgdTggaW5kZXgsXFxuLS1cXG5kcml2ZXJzL25ldC9waHkvYXMyMXh4eC5jLTgxMC1cXG5kcml2ZXJzL25ldC9waHkvYXMyMXh4eC5jOjgxMTpcXHR2YWwgPSBwaHlfcmVhZF9tbWQocGh5ZGV2LCBNRElPX01NRF9WRU5EMSwgVkVORDFfTEVEX1JFRyhpbmRleCkpO1xcbmRyaXZlcnMvbmV0L3BoeS9hczIxeHh4LmMtODEyLVxcdGlmICh2YWwgXFx1MDAzYyAwKVxcbi0tXFxuZHJpdmVycy9uZXQvcGh5L2FzMjF4eHguYz04Nzk9c3RhdGljIGludCBhczIxeHh4X21hdGNoX3BoeV9kZXZpY2Uoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldixcXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9hczIxeHh4LmMtODkyLVxcdC8qIFJlYWQgUEhZIElEIHRvIGhhbmRsZSBmaXJtd2FyZSBsb2FkZWQgb3IgSFcgcmVzZXQgKi9cXG5kcml2ZXJzL25ldC9waHkvYXMyMXh4eC5jOjg5MzpcXHRyZXQgPSBwaHlfcmVhZF9tbWQocGh5ZGV2LCBNRElPX01NRF9QQ1MsIE1JSV9QSFlTSUQxKTtcXG5kcml2ZXJzL25ldC9waHkvYXMyMXh4eC5jLTg5NC1cXHRpZiAocmV0IFxcdTAwM2MgMClcXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9hczIxeHh4LmMtODk3LVxcbmRyaXZlcnMvbmV0L3BoeS9hczIxeHh4LmM6ODk4OlxcdHJldCA9IHBoeV9yZWFkX21tZChwaHlkZXYsIE1ESU9fTU1EX1BDUywgTUlJX1BIWVNJRDIpO1xcbmRyaXZlcnMvbmV0L3BoeS9hczIxeHh4LmMtODk5LVxcdGlmIChyZXQgXFx1MDAzYyAwKVxcbi0tXFxuZHJpdmVycy9uZXQvcGh5L2JjbS1waHktbGliLmM9MzcyPWludCBiY21fcGh5X3NldF9lZWUoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldiwgYm9vbCBlbmFibGUpXFxuLS1cXG5kcml2ZXJzL25ldC9waHkvYmNtLXBoeS1saWIuYy0zNzYtXFx0LyogRW5hYmxlIEVFRSBhdCBQSFkgbGV2ZWwgKi9cXG5kcml2ZXJzL25ldC9waHkvYmNtLXBoeS1saWIuYzozNzc6XFx0dmFsID0gcGh5X3JlYWRfbW1kKHBoeWRldiwgTURJT19NTURfQU4sIEJSQ01fQ0w0NVZFTl9FRUVfQ09OVFJPTCk7XFxuZHJpdmVycy9uZXQvcGh5L2JjbS1waHktbGliLmMtMzc4LVxcdGlmICh2YWwgXFx1MDAzYyAwKVxcbi0tXFxuZHJpdmVycy9uZXQvcGh5L2JjbS1waHktbGliLmMtMzg4LVxcdC8qIEFkdmVydGlzZSBFRUUgKi9cXG5kcml2ZXJzL25ldC9waHkvYmNtLXBoeS1saWIuYzozODk6XFx0dmFsID0gcGh5X3JlYWRfbW1kKHBoeWRldiwgTURJT19NTURfQU4sIEJDTV9DTDQ1VkVOX0VFRV9BRFYpO1xcbmRyaXZlcnMvbmV0L3BoeS9iY20tcGh5LWxpYi5jLTM5MC1cXHRpZiAodmFsIFxcdTAwM2MgMClcXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9iY20tcGh5LWxpYi5jPTUzMz1zdGF0aWMgdTY0IGJjbV9waHlfZ2V0X3N0YXQoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldiwgdTY0ICpzaGFkb3csXFxuLS1cXG5kcml2ZXJzL25ldC9waHkvYmNtLXBoeS1saWIuYy01NDItXFx0ZWxzZVxcbmRyaXZlcnMvbmV0L3BoeS9iY20tcGh5LWxpYi5jOjU0MzpcXHRcXHR2YWwgPSBwaHlfcmVhZF9tbWQocGh5ZGV2LCBzdGF0LmRldmFkLCBzdGF0LnJlZyk7XFxuZHJpdmVycy9uZXQvcGh5L2JjbS1waHktbGliLmMtNTQ0LVxcdGlmICh2YWwgXFx1MDAzYyAwKSB7XFxuLS1cXG5kcml2ZXJzL25ldC9waHkvYmNtN3h4eC5jPTYyMz1zdGF0aWMgYm9vbCBiY203eHh4XzI4bm1fZXBoeV9kZXZfdmFsaWQoaW50IGRldm51bSlcXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9iY203eHh4LmMtNjI3LVxcbmRyaXZlcnMvbmV0L3BoeS9iY203eHh4LmM6NjI4OnN0YXRpYyBpbnQgYmNtN3h4eF8yOG5tX2VwaHlfcmVhZF9tbWQoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldixcXG5kcml2ZXJzL25ldC9waHkvYmNtN3h4eC5jLTYyOS1cXHRcXHRcXHRcXHQgICAgICBpbnQgZGV2bnVtLCB1MTYgcmVnbnVtKVxcbi0tXFxuZHJpdmVycy9uZXQvcGh5L2JjbTd4eHguYz04MjE9c3RhdGljIGludCBiY203eHh4XzI4bm1fcHJvYmUoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9iY203eHh4LmMtODg1LVxcdC5wcm9iZVxcdFxcdD0gYmNtN3h4eF8yOG5tX3Byb2JlLFxcdFxcdFxcdFxcdFxcXFxcXG5kcml2ZXJzL25ldC9waHkvYmNtN3h4eC5jOjg4NjpcXHQucmVhZF9tbWRcXHQ9IGJjbTd4eHhfMjhubV9lcGh5X3JlYWRfbW1kLFxcdFxcdFxcdFxcXFxcXG5kcml2ZXJzL25ldC9waHkvYmNtN3h4eC5jLTg4Ny1cXHQud3JpdGVfbW1kXFx0PSBiY203eHh4XzI4bm1fZXBoeV93cml0ZV9tbWQsXFx0XFx0XFx0XFxcXFxcbi0tXFxuZHJpdmVycy9uZXQvcGh5L2JjbTg0ODgxLmM9NTA9c3RhdGljIGludCBiY204NDg4MV93YWl0X2luaXQoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9iY204NDg4MS5jLTUzLVxcbmRyaXZlcnMvbmV0L3BoeS9iY204NDg4MS5jOjU0OlxcdHJldHVybiBwaHlfcmVhZF9tbWRfcG9sbF90aW1lb3V0KHBoeWRldiwgTURJT19NTURfUE1BUE1ELCBNRElPX0NUUkwxLFxcbmRyaXZlcnMvbmV0L3BoeS9iY204NDg4MS5jLTU1LVxcdFxcdFxcdFxcdFxcdCB2YWwsICEodmFsIFxcdTAwMjYgTURJT19DVFJMMV9SRVNFVCksXFxuLS1cXG5kcml2ZXJzL25ldC9waHkvYmNtODQ4ODEuYz0xODQ9c3RhdGljIGludCBiY204NDg5eF9sZWRfaHdfY29udHJvbF9nZXQoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldiwgdTggaW5kZXgsXFxuLS1cXG5kcml2ZXJzL25ldC9waHkvYmNtODQ4ODEuYy0xOTEtXFxuZHJpdmVycy9uZXQvcGh5L2JjbTg0ODgxLmM6MTkyOlxcdGxvdyA9IHBoeV9yZWFkX21tZChwaHlkZXYsIE1ESU9fTU1EX1BNQVBNRCxcXG5kcml2ZXJzL25ldC9waHkvYmNtODQ4ODEuYy0xOTMtXFx0XFx0XFx0ICAgYmNtODQ4OXhfbGVkX3JlZ3NbaW5kZXhdLm1hc2tfbG93KTtcXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9iY204NDg4MS5jLTE5NS1cXHRcXHRyZXR1cm4gbG93O1xcbmRyaXZlcnMvbmV0L3BoeS9iY204NDg4MS5jOjE5NjpcXHRleHQgPSBwaHlfcmVhZF9tbWQocGh5ZGV2LCBNRElPX01NRF9QTUFQTUQsXFxuZHJpdmVycy9uZXQvcGh5L2JjbTg0ODgxLmMtMTk3LVxcdFxcdFxcdCAgIGJjbTg0ODl4X2xlZF9yZWdzW2luZGV4XS5tYXNrX2V4dCk7XFxuLS1cXG5kcml2ZXJzL25ldC9waHkvYmNtODQ4ODEuYz0yODg9c3RhdGljIGludCBiY204NDg4MV9hbmVnX2RvbmUoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9iY204NDg4MS5jLTI5MS1cXG5kcml2ZXJzL25ldC9waHkvYmNtODQ4ODEuYzoyOTI6XFx0dmFsID0gcGh5X3JlYWRfbW1kKHBoeWRldiwgTURJT19NTURfQU4sIE1ESU9fU1RBVDEpO1xcbmRyaXZlcnMvbmV0L3BoeS9iY204NDg4MS5jLTI5My1cXHRpZiAodmFsIFxcdTAwM2MgMClcXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9iY204NDg4MS5jLTI5NS1cXG5kcml2ZXJzL25ldC9waHkvYmNtODQ4ODEuYzoyOTY6XFx0Ym1zciA9IHBoeV9yZWFkX21tZChwaHlkZXYsIE1ESU9fTU1EX0FOLCBNRElPX0FOX0MyMiArIE1JSV9CTVNSKTtcXG5kcml2ZXJzL25ldC9waHkvYmNtODQ4ODEuYy0yOTctXFx0aWYgKGJtc3IgXFx1MDAzYyAwKVxcbi0tXFxuZHJpdmVycy9uZXQvcGh5L2JjbTg0ODgxLmM9MzA0PXN0YXRpYyBpbnQgYmNtODQ4ODFfcmVhZF9zdGF0dXMoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9iY204NDg4MS5jLTMwOC1cXG5kcml2ZXJzL25ldC9waHkvYmNtODQ4ODEuYzozMDk6XFx0dmFsID0gcGh5X3JlYWRfbW1kKHBoeWRldiwgTURJT19NTURfQU4sIE1ESU9fQ1RSTDEpO1xcbmRyaXZlcnMvbmV0L3BoeS9iY204NDg4MS5jLTMxMC1cXHRpZiAodmFsIFxcdTAwM2MgMClcXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9iY204NDg4MS5jLTMxNy1cXG5kcml2ZXJzL25ldC9waHkvYmNtODQ4ODEuYzozMTg6XFx0dmFsID0gcGh5X3JlYWRfbW1kKHBoeWRldiwgTURJT19NTURfQU4sIE1ESU9fU1RBVDEpO1xcbmRyaXZlcnMvbmV0L3BoeS9iY204NDg4MS5jLTMxOS1cXHRpZiAodmFsIFxcdTAwM2MgMClcXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9iY204NDg4MS5jLTMyMS1cXG5kcml2ZXJzL25ldC9waHkvYmNtODQ4ODEuYzozMjI6XFx0Ym1zciA9IHBoeV9yZWFkX21tZChwaHlkZXYsIE1ESU9fTU1EX0FOLCBNRElPX0FOX0MyMiArIE1JSV9CTVNSKTtcXG5kcml2ZXJzL25ldC9waHkvYmNtODQ4ODEuYy0zMjMtXFx0aWYgKGJtc3IgXFx1MDAzYyAwKVxcbi0tXFxuZHJpdmVycy9uZXQvcGh5L2JjbTg0ODgxLmMtMzQ3LVxcbmRyaXZlcnMvbmV0L3BoeS9iY204NDg4MS5jOjM0ODpcXHRcXHR2YWwgPSBwaHlfcmVhZF9tbWQocGh5ZGV2LCBNRElPX01NRF9BTixcXG5kcml2ZXJzL25ldC9waHkvYmNtODQ4ODEuYy0zNDktXFx0XFx0XFx0XFx0ICAgTURJT19BTl9DMjIgKyBNSUlfU1RBVDEwMDApO1xcbi0tXFxuZHJpdmVycy9uZXQvcGh5L2JjbTg0ODgxLmMtMzgwLVxcdCAqL1xcbmRyaXZlcnMvbmV0L3BoeS9iY204NDg4MS5jOjM4MTpcXHR2YWwgPSBwaHlfcmVhZF9tbWQocGh5ZGV2LCBNRElPX01NRF9WRU5EMSwgMHg0MDExKTtcXG5kcml2ZXJzL25ldC9waHkvYmNtODQ4ODEuYy0zODItXFx0bW9kZSA9ICh2YWwgXFx1MDAyNiAweDFlKSBcXHUwMDNlXFx1MDAzZSAxO1xcbi0tXFxuZHJpdmVycy9uZXQvcGh5L2JjbTg3eHguYz0zND1zdGF0aWMgaW50IGJjbTg3eHhfb2ZfcmVnX2luaXQoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9iY204N3h4LmMtNTktXFx0XFx0aWYgKG1hc2spIHtcXG5kcml2ZXJzL25ldC9waHkvYmNtODd4eC5jOjYwOlxcdFxcdFxcdHZhbCA9IHBoeV9yZWFkX21tZChwaHlkZXYsIGRldmlkLCByZWcpO1xcbmRyaXZlcnMvbmV0L3BoeS9iY204N3h4LmMtNjEtXFx0XFx0XFx0aWYgKHZhbCBcXHUwMDNjIDApIHtcXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9iY204N3h4LmM9MTAwPXN0YXRpYyBpbnQgYmNtODd4eF9yZWFkX3N0YXR1cyhzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxcbi0tXFxuZHJpdmVycy9uZXQvcGh5L2JjbTg3eHguYy0xMDUtXFxuZHJpdmVycy9uZXQvcGh5L2JjbTg3eHguYzoxMDY6XFx0cnhfc2lnbmFsX2RldGVjdCA9IHBoeV9yZWFkX21tZChwaHlkZXYsIE1ESU9fTU1EX1BNQVBNRCxcXG5kcml2ZXJzL25ldC9waHkvYmNtODd4eC5jLTEwNy1cXHRcXHRcXHRcXHRcXHRCQ004N1hYX1BNRF9SWF9TSUdOQUxfREVURUNUKTtcXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9iY204N3h4LmMtMTEzLVxcbmRyaXZlcnMvbmV0L3BoeS9iY204N3h4LmM6MTE0OlxcdHBjc19zdGF0dXMgPSBwaHlfcmVhZF9tbWQocGh5ZGV2LCBNRElPX01NRF9QQ1MsXFxuZHJpdmVycy9uZXQvcGh5L2JjbTg3eHguYy0xMTUtXFx0XFx0XFx0XFx0ICBCQ004N1hYXzEwR0JBU0VSX1BDU19TVEFUVVMpO1xcbi0tXFxuZHJpdmVycy9uZXQvcGh5L2JjbTg3eHguYy0xMjEtXFxuZHJpdmVycy9uZXQvcGh5L2JjbTg3eHguYzoxMjI6XFx0eGd4c19sYW5lX3N0YXR1cyA9IHBoeV9yZWFkX21tZChwaHlkZXYsIE1ESU9fTU1EX1BIWVhTLFxcbmRyaXZlcnMvbmV0L3BoeS9iY204N3h4LmMtMTIzLVxcdFxcdFxcdFxcdFxcdEJDTTg3WFhfWEdYU19MQU5FX1NUQVRVUyk7XFxuLS1cXG5kcml2ZXJzL25ldC9waHkvYmNtODd4eC5jPTE0MD1zdGF0aWMgaW50IGJjbTg3eHhfY29uZmlnX2ludHIoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9iY204N3h4LmMtMTQzLVxcbmRyaXZlcnMvbmV0L3BoeS9iY204N3h4LmM6MTQ0OlxcdHJlZyA9IHBoeV9yZWFkX21tZChwaHlkZXYsIE1ESU9fTU1EX1BDUywgQkNNODdYWF9MQVNJX0NPTlRST0wpO1xcbmRyaXZlcnMvbmV0L3BoeS9iY204N3h4LmMtMTQ1LVxcbi0tXFxuZHJpdmVycy9uZXQvcGh5L2JjbTg3eHguYy0xNDktXFx0aWYgKHBoeWRldi1cXHUwMDNlaW50ZXJydXB0cyA9PSBQSFlfSU5URVJSVVBUX0VOQUJMRUQpIHtcXG5kcml2ZXJzL25ldC9waHkvYmNtODd4eC5jOjE1MDpcXHRcXHRlcnIgPSBwaHlfcmVhZF9tbWQocGh5ZGV2LCBNRElPX01NRF9QQ1MsIEJDTTg3WFhfTEFTSV9TVEFUVVMpO1xcbmRyaXZlcnMvbmV0L3BoeS9iY204N3h4LmMtMTUxLVxcdFxcdGlmIChlcnIpXFxuLS1cXG5kcml2ZXJzL25ldC9waHkvYmNtODd4eC5jLTE2My1cXG5kcml2ZXJzL25ldC9waHkvYmNtODd4eC5jOjE2NDpcXHRcXHRlcnIgPSBwaHlfcmVhZF9tbWQocGh5ZGV2LCBNRElPX01NRF9QQ1MsIEJDTTg3WFhfTEFTSV9TVEFUVVMpO1xcbmRyaXZlcnMvbmV0L3BoeS9iY204N3h4LmMtMTY1LVxcdH1cXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9kcDgzODIyLmM9MjE0PXN0YXRpYyBpbnQgZHA4MzgyMl9jb25maWdfd29sKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYsXFxuLS1cXG5kcml2ZXJzL25ldC9waHkvZHA4MzgyMi5jLTIzNi1cXG5kcml2ZXJzL25ldC9waHkvZHA4MzgyMi5jOjIzNzpcXHRcXHR2YWx1ZSA9IHBoeV9yZWFkX21tZChwaHlkZXYsIE1ESU9fTU1EX1ZFTkQyLFxcbmRyaXZlcnMvbmV0L3BoeS9kcDgzODIyLmMtMjM4LVxcdFxcdFxcdFxcdCAgICAgTUlJX0RQODM4MjJfV09MX0NGRyk7XFxuLS1cXG5kcml2ZXJzL25ldC9waHkvZHA4MzgyMi5jPTI4OD1zdGF0aWMgdm9pZCBkcDgzODIyX2dldF93b2woc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldixcXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9kcDgzODIyLmMtMjk2LVxcbmRyaXZlcnMvbmV0L3BoeS9kcDgzODIyLmM6Mjk3OlxcdHZhbHVlID0gcGh5X3JlYWRfbW1kKHBoeWRldiwgTURJT19NTURfVkVORDIsIE1JSV9EUDgzODIyX1dPTF9DRkcpO1xcbmRyaXZlcnMvbmV0L3BoeS9kcDgzODIyLmMtMjk4LVxcbi0tXFxuZHJpdmVycy9uZXQvcGh5L2RwODM4MjIuYy0zMDItXFx0aWYgKHZhbHVlIFxcdTAwMjYgRFA4MzgyMl9XT0xfU0VDVVJFX09OKSB7XFxuZHJpdmVycy9uZXQvcGh5L2RwODM4MjIuYzozMDM6XFx0XFx0c29wYXNzX3ZhbCA9IHBoeV9yZWFkX21tZChwaHlkZXYsIE1ESU9fTU1EX1ZFTkQyLFxcbmRyaXZlcnMvbmV0L3BoeS9kcDgzODIyLmMtMzA0LVxcdFxcdFxcdFxcdFxcdCAgTUlJX0RQODM4MjJfUlhTT1AxKTtcXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9kcDgzODIyLmMtMzA3LVxcbmRyaXZlcnMvbmV0L3BoeS9kcDgzODIyLmM6MzA4OlxcdFxcdHNvcGFzc192YWwgPSBwaHlfcmVhZF9tbWQocGh5ZGV2LCBNRElPX01NRF9WRU5EMixcXG5kcml2ZXJzL25ldC9waHkvZHA4MzgyMi5jLTMwOS1cXHRcXHRcXHRcXHRcXHQgIE1JSV9EUDgzODIyX1JYU09QMik7XFxuLS1cXG5kcml2ZXJzL25ldC9waHkvZHA4MzgyMi5jLTMxMi1cXG5kcml2ZXJzL25ldC9waHkvZHA4MzgyMi5jOjMxMzpcXHRcXHRzb3Bhc3NfdmFsID0gcGh5X3JlYWRfbW1kKHBoeWRldiwgTURJT19NTURfVkVORDIsXFxuZHJpdmVycy9uZXQvcGh5L2RwODM4MjIuYy0zMTQtXFx0XFx0XFx0XFx0XFx0ICBNSUlfRFA4MzgyMl9SWFNPUDMpO1xcbi0tXFxuZHJpdmVycy9uZXQvcGh5L2RwODM4MjIuYz05MTc9c3RhdGljIGludCBkcDgzODIyX3JlYWRfc3RyYXBzKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXFxuLS1cXG5kcml2ZXJzL25ldC9waHkvZHA4MzgyMi5jLTkyMi1cXG5kcml2ZXJzL25ldC9waHkvZHA4MzgyMi5jOjkyMzpcXHR2YWwgPSBwaHlfcmVhZF9tbWQocGh5ZGV2LCBNRElPX01NRF9WRU5EMiwgTUlJX0RQODM4MjJfU09SMSk7XFxuZHJpdmVycy9uZXQvcGh5L2RwODM4MjIuYy05MjQtXFx0aWYgKHZhbCBcXHUwMDNjIDApXFxuLS1cXG5kcml2ZXJzL25ldC9waHkvZHA4MzgyMi5jPTEwMzM9c3RhdGljIGludCBkcDgzODIyX3N1c3BlbmQoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9kcDgzODIyLmMtMTAzNi1cXG5kcml2ZXJzL25ldC9waHkvZHA4MzgyMi5jOjEwMzc6XFx0dmFsdWUgPSBwaHlfcmVhZF9tbWQocGh5ZGV2LCBNRElPX01NRF9WRU5EMiwgTUlJX0RQODM4MjJfV09MX0NGRyk7XFxuZHJpdmVycy9uZXQvcGh5L2RwODM4MjIuYy0xMDM4LVxcbi0tXFxuZHJpdmVycy9uZXQvcGh5L2RwODM4MjIuYz0xMDQ1PXN0YXRpYyBpbnQgZHA4MzgyMl9yZXN1bWUoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9kcDgzODIyLmMtMTA1MC1cXG5kcml2ZXJzL25ldC9waHkvZHA4MzgyMi5jOjEwNTE6XFx0dmFsdWUgPSBwaHlfcmVhZF9tbWQocGh5ZGV2LCBNRElPX01NRF9WRU5EMiwgTUlJX0RQODM4MjJfV09MX0NGRyk7XFxuZHJpdmVycy9uZXQvcGh5L2RwODM4MjIuYy0xMDUyLVxcbi0tXFxuZHJpdmVycy9uZXQvcGh5L2RwODM4MjIuYz0xMTI0PXN0YXRpYyBpbnQgZHA4MzgyMl9sZWRfaHdfY29udHJvbF9nZXQoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldiwgdTggaW5kZXgsXFxuLS1cXG5kcml2ZXJzL25ldC9waHkvZHA4MzgyMi5jLTExMjktXFx0aWYgKGluZGV4ID09IERQODM4MjJfTEVEX0lOREVYX0xFRF8wIHx8IGluZGV4ID09IERQODM4MjJfTEVEX0lOREVYX0NPTF9HUElPMikge1xcbmRyaXZlcnMvbmV0L3BoeS9kcDgzODIyLmM6MTEzMDpcXHRcXHR2YWwgPSBwaHlfcmVhZF9tbWQocGh5ZGV2LCBNRElPX01NRF9WRU5EMiwgTUlJX0RQODM4MjJfTUxFRENSKTtcXG5kcml2ZXJzL25ldC9waHkvZHA4MzgyMi5jLTExMzEtXFx0XFx0aWYgKHZhbCBcXHUwMDNjIDApXFxuLS1cXG5kcml2ZXJzL25ldC9waHkvZHA4MzgyMi5jLTExMzUtXFx0fSBlbHNlIHtcXG5kcml2ZXJzL25ldC9waHkvZHA4MzgyMi5jOjExMzY6XFx0XFx0dmFsID0gcGh5X3JlYWRfbW1kKHBoeWRldiwgTURJT19NTURfVkVORDIsIE1JSV9EUDgzODIyX0xFRENGRzEpO1xcbmRyaXZlcnMvbmV0L3BoeS9kcDgzODIyLmMtMTEzNy1cXHRcXHRpZiAodmFsIFxcdTAwM2MgMClcXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9kcDgzODY3LmM9MjExPXN0YXRpYyBpbnQgZHA4Mzg2N19zZXRfd29sKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYsXFxuLS1cXG5kcml2ZXJzL25ldC9waHkvZHA4Mzg2Ny5jLTIxNy1cXG5kcml2ZXJzL25ldC9waHkvZHA4Mzg2Ny5jOjIxODpcXHR2YWxfcnhjZmcgPSBwaHlfcmVhZF9tbWQocGh5ZGV2LCBEUDgzODY3X0RFVkFERFIsIERQODM4NjdfUlhGQ0ZHKTtcXG5kcml2ZXJzL25ldC9waHkvZHA4Mzg2Ny5jLTIxOS1cXHR2YWxfbWljciA9IHBoeV9yZWFkKHBoeWRldiwgTUlJX0RQODM4NjdfTUlDUik7XFxuLS1cXG5kcml2ZXJzL25ldC9waHkvZHA4Mzg2Ny5jPTI3Nz1zdGF0aWMgdm9pZCBkcDgzODY3X2dldF93b2woc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldixcXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9kcDgzODY3LmMtMjg1LVxcbmRyaXZlcnMvbmV0L3BoeS9kcDgzODY3LmM6Mjg2OlxcdHZhbHVlID0gcGh5X3JlYWRfbW1kKHBoeWRldiwgRFA4Mzg2N19ERVZBRERSLCBEUDgzODY3X1JYRkNGRyk7XFxuZHJpdmVycy9uZXQvcGh5L2RwODM4NjcuYy0yODctXFxuLS1cXG5kcml2ZXJzL25ldC9waHkvZHA4Mzg2Ny5jLTI5Ny1cXHRpZiAodmFsdWUgXFx1MDAyNiBEUDgzODY3X1dPTF9TRUNfRU4pIHtcXG5kcml2ZXJzL25ldC9waHkvZHA4Mzg2Ny5jOjI5ODpcXHRcXHRzb3Bhc3NfdmFsID0gcGh5X3JlYWRfbW1kKHBoeWRldiwgRFA4Mzg2N19ERVZBRERSLFxcbmRyaXZlcnMvbmV0L3BoeS9kcDgzODY3LmMtMjk5LVxcdFxcdFxcdFxcdFxcdCAgRFA4Mzg2N19SWEZTT1AxKTtcXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9kcDgzODY3LmMtMzAyLVxcbmRyaXZlcnMvbmV0L3BoeS9kcDgzODY3LmM6MzAzOlxcdFxcdHNvcGFzc192YWwgPSBwaHlfcmVhZF9tbWQocGh5ZGV2LCBEUDgzODY3X0RFVkFERFIsXFxuXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAzVDA3OjM3OjI4Ljk1Mzg5OTc1MloiLCJTZXEiOjE3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo3MzgzNjg4MzE5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKlJlYWxpemluZyB0aGUgUG90ZW50aWFsIG9mIFVTQi1FbXVsYXRlZCBQSFkgRHJpdmVyIEFjY2VzcyoqXG5cbk9rYXksIGhvbGQgb24gYSBzZWNvbmQuLi4gYHBoeV9yZWFkX21tZGAgaXMgKmV2ZXJ5d2hlcmUqLiBJZiBhIFVTQiBkZXZpY2Ugc3VwcG9ydHMgQ2xhdXNlIDIyLCB0aGUgUEhZIGZyYW1ld29yayBjbGV2ZXJseSB1c2VzIGluZGlyZWN0IGFjY2VzcyAocmVnaXN0ZXJzIDEzIGFuZCAxNCkgdG8gZXNzZW50aWFsbHkgdHJhbnNsYXRlIENsYXVzZSA0NSBhY2Nlc3Nlcy4gU28sIHdhaXQuLi4gYHBoeV9yZWFkX21tZGAgKndvcmtzKiBvbiBDbGF1c2UgMjIgUEhZcyEgVGhpcyBjbGlja3MsIGJlY2F1c2UgSSBrbm93IHRoZSBSZWFsdGVrIFBIWSBkcml2ZXIgdXNlcyBgcGh5X3JlYWRfbW1kYCwgcmlnaHQ/IFllcywgaXQgZG9lcy5cblxuU28gaGVyZSdzIHRoZSB0aG91Z2h0LiBJZiB3ZSBjb25zdHJ1Y3QgYSBtb2NrIFVTQiBuZXR3b3JrIGRldmljZSB0aGF0IGFsc28gcmVnaXN0ZXJzIGFuIE1ESU8gYnVzLCBhbmQgd2UgY2FuIGNvbnRyb2wgdGhlIHJlc3BvbnNlcyB0byBNRElPIHJlYWRzLi4uIHdlIGNhbiAqdHJpY2sqIGl0IGludG8gcmVwb3J0aW5nIHRoZSBSZWFsdGVrIFBIWSBJRCAoYDB4MDAxY2M4OThgKSB3aGVuIHRoZSBNRElPIGJ1cyBzY2FucyBmb3IgUEhZcy4gVGhlbiwgdGhlIGtlcm5lbCwgdGhpbmtpbmcgYSBSZWFsdGVrIFBIWSBpcyBwcmVzZW50LCB3aWxsIGluc3RhbnRpYXRlIHRoZSBSZWFsdGVrIFBIWSBkcml2ZXIgYW5kIGNhbGwgYHJ0bDgyNjF4X3Byb2JlYC5cblxuQW5kIHRoYXQncyB3aGVyZSBzeXprYWxsZXIgY29tZXMgaW4uIEkgcmVjYWxsIGl0IGhhcyBhIGBzeXpfdXNiX2Nvbm5lY3RgIHRvb2wgd2hpY2ggY2FuIGVtdWxhdGUgVVNCIGRldmljZXMuIENhbiBpdCBlbXVsYXRlIGEgVVNCIG5ldHdvcmsgZGV2aWNlIHRoYXQgcmVnaXN0ZXJzIGFuIE1ESU8gYnVzPyBZZXMsIHN5emthbGxlciBmdXp6ZXMgVVNCIGRldmljZXMgYnkgZmVlZGluZyB0aGVtIGFyYml0cmFyeSBVU0IgZGVzY3JpcHRvcnMuIElmIGl0IHVzZXMgZGVzY3JpcHRvcnMgZm9yIHRoZSBgc21zYzk1eHhgIG9yIGBhc2l4YCBkcml2ZXJzLCB0aGVuIHRoZSBkcml2ZXIgd2lsbCBiaW5kLCByZWdpc3RlciBhbiBNRElPIGJ1cywgYW5kIHN0YXJ0IHNjYW5uaW5nLiBUaGUgZXhjaXRpbmcgcGFydCBpcywgc3l6a2FsbGVyIGNhbiBnaXZlIHRoZSByZXNwb25zZXMgdG8gdGhlIFVTQiBjb250cm9sIG1lc3NhZ2VzIHdoaWNoIHRoZSBkcml2ZXIgdXNlcyB0byByZWFkIE1ESU8gcmVnaXN0ZXJzIVxuXG5UaGlzIGlzIGl0ISBUaGlzIG1lYW5zIHRoZSBQSFkgZHJpdmVyIGlzIHJlYWNoYWJsZSBmcm9tIGEgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnQgdmlhIFVTQiBlbXVsYXRpb24hIFdhaXQsIGlzIHRoZSBSZWFsdGVrIFBIWSBkcml2ZXIgZW5hYmxlZCBieSBkZWZhdWx0IG9yIGlzIHRoZXJlIHNvbWUgY29uZmlnIG5lZWRlZD8gTGV0J3MgY2hlY2sgdGhlIEtjb25maWcgZm9yIFJlYWx0ZWsgUEhZLiBUaGlzIGlzIHBvdGVudGlhbGx5IGh1Z2UuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjM0ODQ1LCJPdXRwdXRUb2tlbnMiOjMyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzMxLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAzVDA3OjM3OjM2LjMzNzU5NTIyMVoiLCJTZXEiOjE4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDI3NDA5OTQ0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBSRUFMVEVLX1BIWVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC9waHkvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L3BoeS9yZWFsdGVrL0tjb25maWctMS0jIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcXG5kcml2ZXJzL25ldC9waHkvcmVhbHRlay9LY29uZmlnOjI6Y29uZmlnIFJFQUxURUtfUEhZXFxuZHJpdmVycy9uZXQvcGh5L3JlYWx0ZWsvS2NvbmZpZy0zLVxcdHRyaXN0YXRlIFxcXCJSZWFsdGVrIFBIWXNcXFwiXFxuLS1cXG5kcml2ZXJzL25ldC9waHkvcmVhbHRlay9LY29uZmlnPTg9aWYgUkVBTFRFS19QSFlcXG5kcml2ZXJzL25ldC9waHkvcmVhbHRlay9LY29uZmlnLTktXFxuZHJpdmVycy9uZXQvcGh5L3JlYWx0ZWsvS2NvbmZpZzoxMDpjb25maWcgUkVBTFRFS19QSFlfSFdNT05cXG5kcml2ZXJzL25ldC9waHkvcmVhbHRlay9LY29uZmlnLTExLVxcdGJvb2wgXFxcIkhXTU9OIHN1cHBvcnQgZm9yIFJlYWx0ZWsgUEhZc1xcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDNUMDc6Mzc6MzYuNzY1MDcyMjg2WiIsIlNlcSI6MTksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjI1OTA4ODE1MTcxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgUmVhbHRlayBQSFkgQ29uZmlndXJhdGlvbioqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgYENPTkZJR19SRUFMVEVLX1BIWWAgY29uZmlnIG9wdGlvbi4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgaWYgdGhlcmUgYXJlIGFueSBvdGhlciByZWxhdGVkIGNvbmZpZ3MgaW4gcGxheSBoZXJlLiBUaGUgcGF0Y2ggYWRkcyB0aGlzIGZpcm13YXJlIG5hbWUsIGBSVEw4MjYxQ19DRV9GV19OQU1FIFwicnRsX25pYy9ydGw4MjYxYy5iaW5cImAuIE5vdywgSSByZW1lbWJlciBzZWVpbmcgYHJlcXVlc3RfZmlybXdhcmVgIGJlaW5nIGNhbGxlZCBpbiBgcnRsODI2MXhfZndfbG9hZGAuIElmIHRoYXQgZmFpbHMsIGJlY2F1c2UgdGhlIGZpcm13YXJlIGlzbid0IHByZXNlbnQsIGBydGw4MjYxeF9md19sb2FkYCByZXR1cm5zIGFuIGVycm9yLCB3aGljaCwgb2YgY291cnNlLCBwcm9wYWdhdGVzIHVwIHRvIGBydGw4MjYxeF9jb25maWdfaW5pdGAuXG5cbk15IGluaXRpYWwgdGhvdWdodCBpcyB0aGF0IHRoaXMgbWlnaHQgYmUgYSByb2FkYmxvY2sgZm9yIGZ1enppbmcuIEhvd2V2ZXIsIHRoYXQncyBhc3N1bWluZyB3ZSAqbmVlZCogdGhlIGZpcm13YXJlLiBXYWl0LCBTeXprYWxsZXIgY2FuIHByb3ZpZGUgdGhlIGZpcm13YXJlIHVzaW5nIGBzeXpfbW91bnRfaW1hZ2VgIG9yIHNvbWV0aGluZyBzaW1pbGFyLCByaWdodD8gT3IsIG1heWJlIHNvbWUgY29kZSBwYXRocyBkb24ndCBldmVuIHVzZSB0aGUgZmlybXdhcmUuIEkgbmVlZCB0byBjbGFyaWZ5IHRoYXQuIE9rYXksIEkgdGhpbmsgaWYgU3l6a2FsbGVyIHByb3ZpZGVzIHRoZSBmaWxlLCB0aGVuIHdlIGNhbiBkZWZpbml0ZWx5IGZ1enogYHJlcXVlc3RfZmlybXdhcmVgLiBPdGhlcndpc2UsIHdlIGNhbiBqdXN0IHNheSBpdCdzIHJlYWNoYWJsZS5cblxuSG9sZCBvbiwgSSBzZWUgYHByaXYtXHUwMDNlZndfbmFtZWAgaXMgc2V0LCBhbmQgaXQgdHJpZXMgdG8gbG9hZCB0aGF0LiBBIGZhaWx1cmUgZ2l2ZXMgdXMgYW4gZXJyb3IuIENhbiB3ZSB0aGVuIHJlYWNoIGBnZW5waHlfYzQ1X3BtYV9zb2Z0X3Jlc2V0YD8gSXQncyBkZWZpbmVkIGFzIGAuc29mdF9yZXNldCA9IGdlbnBoeV9jNDVfcG1hX3NvZnRfcmVzZXRgLiBBaCwgeWVzLCBgc29mdF9yZXNldGAgaXMgY2FsbGVkIGR1cmluZyB0aGUgUEhZIGluaXRpYWxpemF0aW9uLCAqYmVmb3JlKiBgY29uZmlnX2luaXRgISBPa2F5LCBsZXQgbWUgZ28gY2hlY2sgdGhlIGNhbGwgb3JkZXIgaW4gYHBoeV9kZXZpY2UuY2Agb3IgYHBoeS5jYCB0byBiZSBzdXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjozNTc5MSwiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM1MCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0wM1QwNzozODowMi42NzM4OTE2NDdaIiwiU2VxIjoyMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEzMjgwNzk2NSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJzb2Z0X3Jlc2V0XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYz0xMzQxPWludCBwaHlfaW5pdF9odyhzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxcbi0tXFxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYy0xMzUwLVxcbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmM6MTM1MTpcXHRpZiAocGh5ZGV2LVxcdTAwM2VkcnYtXFx1MDAzZXNvZnRfcmVzZXQpIHtcXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jOjEzNTI6XFx0XFx0cmV0ID0gcGh5ZGV2LVxcdTAwM2VkcnYtXFx1MDAzZXNvZnRfcmVzZXQocGh5ZGV2KTtcXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jLTEzNTMtXFx0XFx0aWYgKHJldCBcXHUwMDNjIDApXFxuLS1cXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jLTEzNTUtXFxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYzoxMzU2OlxcdFxcdC8qIHNlZSBjb21tZW50IGluIGdlbnBoeV9zb2Z0X3Jlc2V0IGZvciBhbiBleHBsYW5hdGlvbiAqL1xcbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmMtMTM1Ny1cXHRcXHRwaHlkZXYtXFx1MDAzZXN1c3BlbmRlZCA9IDA7XFxuLS1cXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jPTI2NjQ9RVhQT1JUX1NZTUJPTChnZW5waHlfYzM3X3JlYWRfc3RhdHVzKTtcXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmMtMjY2Ni0vKipcXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jOjI2Njc6ICogZ2VucGh5X3NvZnRfcmVzZXQgLSBzb2Z0d2FyZSByZXNldCB0aGUgUEhZIHZpYSBCTUNSX1JFU0VUIGJpdFxcbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmMtMjY2OC0gKiBAcGh5ZGV2OiB0YXJnZXQgcGh5X2RldmljZSBzdHJ1Y3RcXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmMtMjY3NC0gKi9cXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jOjI2NzU6aW50IGdlbnBoeV9zb2Z0X3Jlc2V0KHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXFxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYy0yNjc2LXtcXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmMtMjcwMi19XFxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYzoyNzAzOkVYUE9SVF9TWU1CT0woZ2VucGh5X3NvZnRfcmVzZXQpO1xcbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmMtMjcwNC1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDNUMDc6Mzg6MDIuODA2NzA3MDUyWiIsIlNlcSI6MjEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjIwNjI0MDg4Mzk1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IENvbmNlcm5zIFJlZ2FyZGluZyB0aGUgUEhZIEluaXRpYWxpemF0aW9uIFNlcXVlbmNlKipcblxuT2theSwgc28gSSdtIGZvY3VzaW5nIG9uIHRoZSBQSFkgaW5pdGlhbGl6YXRpb24gZmxvdyBhbmQgSSd2ZSBnb3QgYSBjb3VwbGUgb2YgaW1wb3J0YW50IHRoaW5ncyB0byBjb25zaWRlciBoZXJlLiBSaWdodCwgc28gYHNvZnRfcmVzZXRgIGlzIGNhbGxlZCB3aXRoaW4gYHBoeV9pbml0X2h3YCwgd2hpY2ggaGFwcGVucyAqYmVmb3JlKiBgY29uZmlnX2luaXRgLiBBY3R1YWxseSwgd2FpdCwgbGV0IG1lIHJlcGhyYXNlIHRoYXQuLi4gYHBoeV9pbml0X2h3YCBjYWxscyBgc29mdF9yZXNldGAgKmJlZm9yZSogYGNvbmZpZ19pbml0YC4gVGhhdCdzIGNyaXRpY2FsLiBUaGF0IG1lYW5zIHRoYXQgYGdlbnBoeV9jNDVfcG1hX3NvZnRfcmVzZXRgIGlzIGdvaW5nIHRvIGV4ZWN1dGUgcmVnYXJkbGVzcyBvZiB3aGV0aGVyIHRoZSBzdWJzZXF1ZW50IGZpcm13YXJlIGxvYWRpbmcgaXMgc3VjY2Vzc2Z1bCBvciBub3QuIFdlIG5lZWQgdG8gYmUgYXdhcmUgb2YgdGhpcyBhbmQgZW5zdXJlIHRoYXQncyB0aGUgaW50ZW5kZWQgYmVoYXZpb3VyLlxuXG5GdXJ0aGVybW9yZSwgSSdtIG5vdGluZyB0aGF0IGBnZW5waHlfYzQ1X2FuX3NldHVwX21hc3Rlcl9zbGF2ZWAgYW5kIGBnZW5waHlfYzQ1X3JlYWRfbWFzdGVyX3NsYXZlYCBhcmUgbGlua2VkIHRvIGBnZW5waHlfYzQ1X2NvbmZpZ19hbmVnYCBhbmQgYGdlbnBoeV9jNDVfcmVhZF9zdGF0dXNgIHJlc3BlY3RpdmVseS4gVGhvc2UgZnVuY3Rpb25zIGFyZSB0cmlnZ2VyZWQgd2hlbiB0aGUgbmV0d29yayBpbnRlcmZhY2UgY29tZXMgb25saW5lLiBTbywgd2hhdCBoYXBwZW5zIGlmIGBjb25maWdfaW5pdGAgc3Vic2VxdWVudGx5IGZhaWxzPyBEb2VzIHRoZSBQSFkgZGV2aWNlIGdldCBwcm9wZXJseSByZWdpc3RlcmVkIHdpdGggdGhlIHN5c3RlbT8gSSBuZWVkIHRvIGxvb2sgaW50byB0aGlzIG1vcmUgZGVlcGx5LiBJIHNob3VsZCBwcm9iYWJseSBiZSBjaGVja2luZyBgcGh5X2RldmljZV9hdHRhY2hgIG9yIGBwaHlfYXR0YWNoX2RpcmVjdGAgdG8gc2VlIGhvdyB0aGF0IGludGVyYWN0cyB3aXRoIGEgcG90ZW50aWFsIGBjb25maWdfaW5pdGAgZmFpbHVyZS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhhdCBjYWxsIGZsb3cgaW4gbW9yZSBkZXRhaWwuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjM3MDU5LCJPdXRwdXRUb2tlbnMiOjM2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTg3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAzVDA3OjM4OjIzLjQzMDc5OTY0N1oiLCJTZXEiOjIyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTI3NDI3OTM1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInBoeV9pbml0X2h3XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYz0zNzg9c3RhdGljIF9fbWF5YmVfdW51c2VkIGludCBtZGlvX2J1c19waHlfcmVzdW1lKHN0cnVjdCBkZXZpY2UgKmRldilcXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmMtMzk4LVxcbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmM6Mzk5OlxcdHJldCA9IHBoeV9pbml0X2h3KHBoeWRldik7XFxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYy00MDAtXFx0aWYgKHJldCBcXHUwMDNjIDApXFxuLS1cXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jPTEzMDU9RVhQT1JUX1NZTUJPTChwaHlfZGlzY29ubmVjdCk7XFxuLS1cXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jLTEzMjEtICogICBlZmZvcnQgdG8gc3VwcG9ydCBzdWNoIGJyb2tlbiBQSFlzLCB0aGlzIGZ1bmN0aW9uIGlzIHNlcGFyYXRlIGZyb20gdGhlXFxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYzoxMzIyOiAqICAgc3RhbmRhcmQgcGh5X2luaXRfaHcoKSB3aGljaCB3aWxsIHplcm8gYWxsIHRoZSBvdGhlciBiaXRzIGluIHRoZSBCTUNSXFxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYy0xMzIzLSAqICAgYW5kIHJlYXBwbHkgYWxsIGRyaXZlci1zcGVjaWZpYyBhbmQgYm9hcmQtc3BlY2lmaWMgZml4dXBzLlxcbi0tXFxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYz0xMzI1PXN0YXRpYyBpbnQgcGh5X3BvbGxfcmVzZXQoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmMtMTM0MC1cXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jOjEzNDE6aW50IHBoeV9pbml0X2h3KHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXFxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYy0xMzQyLXtcXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmMtMTM4Ny19XFxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYzoxMzg4OkVYUE9SVF9TWU1CT0wocGh5X2luaXRfaHcpO1xcbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmMtMTM4OS1cXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmM9MTc1Mj1pbnQgcGh5X2F0dGFjaF9kaXJlY3Qoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldixcXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmMtMTg3NC1cXHQgKi9cXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jOjE4NzU6XFx0ZXJyID0gcGh5X2luaXRfaHcocGh5ZGV2KTtcXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jLTE4NzYtXFx0aWYgKGVycilcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDNUMDc6Mzg6MjMuNTU4MjMzMzEyWiIsIlNlcSI6MjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjE1MTEzNjIzOTE2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkZ1enppbmcgdGhlIFJUTDgyNjF4IFBIWSBGaXJtd2FyZSoqXG5cbk9rYXksIHNvIGhlcmUncyB0aGUgZGVhbDogYHBoeV9pbml0X2h3YCBnZXRzIGNhbGxlZCB3aXRoaW4gYHBoeV9hdHRhY2hfZGlyZWN0YC4gSWYgYHBoeV9pbml0X2h3YCBib21icyBvdXQg4oCTIG1heWJlIGJlY2F1c2UgYGNvbmZpZ19pbml0YCBjaG9rZXMgb24gbWlzc2luZyBmaXJtd2FyZSDigJMgdGhlbiBgcGh5X2F0dGFjaF9kaXJlY3RgIGdvZXMgZG93biB3aXRoIGl0LCBhbmQgdGhhdCBtZWFucyB0aGUgbmV0d29yayBkcml2ZXIgZmFpbHMgdG8gb3Blbi4gQnV0LCB0aGVyZSdzIGEgc2F2aW5nIGdyYWNlOiBTeXprYWxsZXIhIFdlIGNhbiBhY3R1YWxseSBsZXZlcmFnZSBTeXprYWxsZXIgdG8gaW5qZWN0IHRoYXQgbWlzc2luZyBmaXJtd2FyZS4gSXQgaGFzIHRoZSBjYXBhYmlsaXR5IHRvIHByb3ZpZGUgdGhlIGZpcm13YXJlIGZpbGVzIHdoZW4gcmVxdWVzdGVkLlxuXG5Mb29raW5nIGNsb3NlciwgdGhlIGZpcm13YXJlIGxvYWRpbmcgb25seSBoYXBwZW5zIGlmIGBwcml2LVx1MDAzZWZ3X25hbWVgIGlzIHNldC4gTm93LCB3aGVyZSBpcyBgcHJpdi1cdTAwM2Vmd19uYW1lYCBzZXQ/IEFoLCBpbiBgcnRsODI2MXhfcHJvYmVgLCBidXQgb25seSBpZiBgc3ViX3BoeV9pZGAgaXMgZXF1YWwgdG8gYFJUTDgyNjFDX0NFX01PREVMYC4gSWYgYHN1Yl9waHlfaWRgIGlzIGFueXRoaW5nIGVsc2UsIGBydGw4MjYxeF9wcm9iZWAgcmV0dXJucyBgLUVOT0RFVmAuIEFuZCBob3cgZG8gd2UgZGV0ZXJtaW5lIHRoZSB2YWx1ZSBvZiBgc3ViX3BoeV9pZGA/IGBydGw4MjYxeF9wcm9iZWAgcmVhZHMgYFJUTF84MjYxWF9TVUJfUEhZX0lEX0FERFJgIGZyb20gYE1ESU9fTU1EX1ZFTkQyYC5cblxuU28gaGVyZeKAmXMgdGhlIGludGVyZXN0aW5nIHBhcnQ6IGlmIG91ciBtb2NrIFVTQiBkZXZpY2UgdGVsbHMgaXQgdGhhdCB0aGUgYHN1Yl9waHlfaWRgIGlzIGBSVEw4MjYxQ19DRV9NT0RFTGAgKHdoaWNoIGlzIGNvbnZlbmllbnRseSBgMHgwMGApLCBpdCBzZXRzIGBwcml2LVx1MDAzZWZ3X25hbWVgIHRvIGBSVEw4MjYxQ19DRV9GV19OQU1FYC4gVGhhdCdzIG91ciB0cmlnZ2VyISBOb3csIGlmIHdlIHdhbnQgdG8gZnV6eiB0aGUgZmlybXdhcmUgZXhlY3V0aW9uLCBTeXprYWxsZXIgY2FuIHByb3ZpZGUgdGhlIGZpcm13YXJlLiBUaGUgZmlybXdhcmUgZm9ybWF0IGlzIHBhcnNlZCBpbiBgcnRsODI2MXhfdmVyaWZ5X2Zpcm13YXJlYCBhbmQgdGhlbiBleGVjdXRlZCBpbiBgcnRsODI2MXhfZndfZXhlY3V0ZV9lbnRyeWAuXG5cblRoaXMgaXMgZ29sZCEgVGhpcyBpcyAqdGV4dGJvb2sqIGZ1enppbmcgdGVycml0b3J5LiBUaGlzIGNvZGUgaXMgZnVuY3Rpb25hbCwgYW5kIGl0IHNob3VsZCBiZSBmdXp6ZWQhIEl0IHJlYWRzIGFuIGV4dGVybmFsIGZpbGUgKHRoZSBmaXJtd2FyZSkgYW5kIHRoZW4gaW50ZXJhY3RzIHdpdGggaGFyZHdhcmUgKHRoZSBNRElPIGJ1cyksIG1ha2luZyBpdCBhIGdyZWF0IHRhcmdldC4gU3l6a2FsbGVyIGNhbiBnZW5lcmF0ZSBhcmJpdHJhcnkgZmlybXdhcmUgZmlsZXMsIHdoaWNoIGNhbiB0aGVuIHRyaWdnZXIgdGhpcyBjb2RlLiBUaGlzIGlzIGRlZmluaXRlbHkgYSBwcm9taXNpbmcgYXZlbnVlIGZvciBmdXp6aW5nLCBiZWNhdXNlIGl04oCZcyBhIGZpbGUgcGFyc2luZyBhbmQgaGFyZHdhcmUgaW50ZXJhY3Rpb24gc2VxdWVuY2UuXG5cbkFscmlnaHQsIGxldCdzIGxpc3QgdGhlIGZ1bmN0aW9ucywganVzdCB0byBiZSBzdXJlIHdlJ3ZlIGdvdCBhbGwgdGhlIHBpZWNlczogYGdlbnBoeV9jNDVfcG1hX3NvZnRfcmVzZXRgLCBgZ2VucGh5X2M0NV9hbl9zZXR1cF9tYXN0ZXJfc2xhdmVgLCBgZ2VucGh5X2M0NV9yZWFkX21hc3Rlcl9zbGF2ZWAsIGBydGw4MjYxeF9wcm9iZWAsIGBydGw4MjYxeF9nZXRfZmVhdHVyZXNgLCBgcnRsODI2MXhfcmVhZF9zdGF0dXNgLCBgcnRsODI2MXhfdmVyaWZ5X2Zpcm13YXJlYCwgYHJ0bDgyNjF4X2Z3X2V4ZWN1dGVfZW50cnlgLCBgcnRsODI2MXhfZndfbG9hZGAsIGBydGw4MjYxeF9jb25maWdfaW50cmAsIGBydGw4MjYxeF9oYW5kbGVfaW50ZXJydXB0YCwgYHJ0bDgyNjF4X2NvbmZpZ19hbmVnYCwgYW5kIGBydGw4MjYxeF9jb25maWdfaW5pdGAuIFllcCwgdGhvc2UgYWxsIGxvb2sgcmVhY2hhYmxlLlxuXG5UaGUgb25seSBjb25maWcgbmVlZGVkIHNlZW1zIHRvIGJlIGBSRUFMVEVLX1BIWWAsIHdoaWNoIGNvbXBpbGVzIGBkcml2ZXJzL25ldC9waHkvcmVhbHRlay9yZWFsdGVrX21haW4uY2AuXG5cblBlcmZlY3QuIExldCdzIG1ha2Ugc3VyZSBgUkVBTFRFS19QSFlgIGlzIHRoZSBvbmx5IGNvbmZpZyByZXF1aXJlZC5cblxuXG4iLCJJbnB1dFRva2VucyI6MzgxNDEsIk91dHB1dFRva2VucyI6MzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo2NzksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDNUMDc6Mzg6MzguNjcxODU5OTk4WiIsIlNlcSI6MjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozMjA3MDc2MjksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwicmVhbHRla19tYWluLm9cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvcGh5L3JlYWx0ZWsvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L3BoeS9yZWFsdGVrL01ha2VmaWxlLTEtIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxcbmRyaXZlcnMvbmV0L3BoeS9yZWFsdGVrL01ha2VmaWxlOjI6cmVhbHRlay15XFx0XFx0XFx0Kz0gcmVhbHRla19tYWluLm9cXG5kcml2ZXJzL25ldC9waHkvcmVhbHRlay9NYWtlZmlsZS0zLXJlYWx0ZWstJChDT05GSUdfUkVBTFRFS19QSFlfSFdNT04pICs9IHJlYWx0ZWtfaHdtb24ub1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wM1QwNzozODozOC45OTI1NzQ5NTdaIiwiU2VxIjoyNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6ODAzNTE0NDE2NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqSW52ZXN0aWdhdGluZyBhIFJlYWx0ZWsgUEhZIElzc3VlKipcblxuUmlnaHQsIGxldCdzIHNlZS4gVGhlIGlkZW50aWZpZXIgYHJlYWx0ZWsteWAuLi4gdGhhdCBpbW1lZGlhdGVseSBzdWdnZXN0cyBpdCdzIGEgY29tcG9uZW50IG9mIHRoZSBgcmVhbHRla2AgbW9kdWxlLCB3aGljaCBpcyBhIGtleSBsZWFkLiBJJ2xsIG5lZWQgdG8gY29uZmlybSB0aGF0IHN1c3BpY2lvbiBhbmQgdW5kZXJzdGFuZCB3aGVyZSB0byBmaW5kIHJlbGF0ZWQgY29uZmlndXJhdGlvbi4gVGhlcmVmb3JlLCBteSBuZXh0IHN0ZXAgaXMgdG8gZXhhbWluZSB0aGUgYGRyaXZlcnMvbmV0L3BoeS9NYWtlZmlsZWAuIFRoYXQncyB3aGVyZSB0aGUgUEhZIGRyaXZlciBjb25maWd1cmF0aW9ucyB1c3VhbGx5IHJlc2lkZS4gSSdtIGV4cGVjdGluZyB0byBmaW5kIHJlZmVyZW5jZXMgdG8gdGhlIGByZWFsdGVrYCBjb21wb25lbnQgdGhlcmUsIHdoaWNoIHdpbGwgY29uZmlybSBteSBpbml0aWFsIGh5cG90aGVzaXMgYW5kIHBvaW50IG1lIHRvd2FyZHMgdGhlIHJlbGV2YW50IGJ1aWxkIGFuZCBpbmNsdWRlIGRpcmVjdGl2ZXMuIEtub3dpbmcgdGhlIHN0cnVjdHVyZSBvZiB0aGUgYE1ha2VmaWxlYCwgSSBzaG91bGQgcXVpY2tseSBiZSBhYmxlIHRvIHNlZSB0aGUgYnVpbGQgb3B0aW9ucyBhbmQgYXNzb2NpYXRlZCBkZXBlbmRlbmNpZXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjM5NzIwLCJPdXRwdXRUb2tlbnMiOjI5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDNUMDc6Mzg6NDcuMDI3NzIyMTgyWiIsIlNlcSI6MjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNDI5NzQyMTUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwicmVhbHRla1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC9waHkvTWFrZWZpbGVcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvcGh5L01ha2VmaWxlPTk0PW9iai0kKENPTkZJR19RU0VNSV9QSFkpXFx0XFx0Kz0gcXNlbWkub1xcbmRyaXZlcnMvbmV0L3BoeS9NYWtlZmlsZTo5NTpvYmotJChDT05GSUdfUkVBTFRFS19QSFkpXFx0Kz0gcmVhbHRlay9cXG5kcml2ZXJzL25ldC9waHkvTWFrZWZpbGUtOTYtb2JqLSQoQ09ORklHX1JFTkVTQVNfUEhZKVxcdCs9IHVQRDYwNjIwLm9cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDNUMDc6Mzg6NDcuMTcwNzA0MjM3WiIsIlNlcSI6MjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjExODE5NDU1MzA3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgc3VtbWFyeSwgdGFpbG9yZWQgYXMgaWYgSSdtIGFuIGV4cGVydCBpbiB0aGlzIGZpZWxkOlxuXG4qKktlcm5lbCBDb25maWd1cmF0aW9uIEFuYWx5c2lzOiBSZWFsdGVrIFBIWSoqXG5cbkFscmlnaHQsIGNvbmZpcm1lZCwgYENPTkZJR19SRUFMVEVLX1BIWWAgaXMgaW5kZWVkIHRoZSBjb25maWd1cmF0aW9uIGl0ZW0gd2UncmUgbG9va2luZyBhdC4gR29vZCBzdGFydC4gTm93LCB0aGUgbmV4dCBsb2dpY2FsIHN0ZXAgaXMgdG8gcXVpY2tseSBkb3VibGUtY2hlY2sgaWYgdGhlcmUgYXJlIGFueSAqb3RoZXIqIHJlbGV2YW50IGNvbmZpZ3MgdGhhdCBtaWdodCBiZSBpbnZvbHZlZCBvciBpbXBhY3QgdGhpcyBvbmUsIGp1c3QgdG8gYmUgdGhvcm91Z2guIFdlIGRvbid0IHdhbnQgdG8gbWlzcyBhbnl0aGluZyBzdWJ0bGUuXG5cblRoZSBwYXRjaCBpdHNlbGYgcG9pbnRzIGRpcmVjdGx5IHRvIGBkcml2ZXJzL25ldC9waHkvcGh5LWM0NS5jYC4gVGhpcyBzdWdnZXN0cyBhIHBvdGVudGlhbCBjb25kaXRpb25hbCBjb21waWxhdGlvbiBzY2VuYXJpbywgc28gdGhhdCdzIHRoZSBhbmdsZSBJJ20gZm9jdXNpbmcgb24gbm93LiBTcGVjaWZpY2FsbHksIEkgbmVlZCB0byB2ZXJpZnkgKmhvdyogYHBoeS1jNDUuY2AgaXMgY29tcGlsZWQuIElzIGl0IGRpcmVjdGx5IHRpZWQgdG8gYENPTkZJR19SRUFMVEVLX1BIWWAsIG9yIGFyZSB0aGVyZSBvdGhlciBkZXBlbmRlbmNpZXMgb3Igc3Vycm91bmRpbmcgY29uZmlncyB0aGF0IGNvbnRyb2wgaXRzIGluY2x1c2lvbj8gVGhhdCdzIHRoZSBrZXkgcXVlc3Rpb24gdG8gZmlndXJlIG91dCBpZiB0aGVyZSBpcyBhbnl0aGluZyB0aGF0IGNvdWxkIGltcGFjdCBhIHVzZXIncyBkZXZpY2UuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQwMDU5LCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NjAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDNUMDc6Mzg6NTguOTkwMTYzNTk0WiIsIlNlcSI6MjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNDY0NDk4MTUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwicGh5LWM0NS5vXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L3BoeS9NYWtlZmlsZVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC9waHkvTWFrZWZpbGUtMy1cXG5kcml2ZXJzL25ldC9waHkvTWFrZWZpbGU6NDpsaWJwaHkteVxcdFxcdFxcdDo9IHBoeS5vIHBoeS1jNDUubyBwaHktY29yZS5vIHBoeV9kZXZpY2UubyBcXFxcXFxuZHJpdmVycy9uZXQvcGh5L01ha2VmaWxlLTUtXFx0XFx0XFx0XFx0ICAgbGlua21vZGUubyBwaHlfbGlua190b3BvbG9neS5vIFxcXFxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDNUMDc6Mzg6NTkuMTM2NjIwNjA5WiIsIlNlcSI6MjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjE0MzA3MzQzMTM2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKlJlZmluaW5nIHRoZSBUYXJnZXQgZm9yIEZ1enppbmcgdGhlIFJlYWx0ZWsgUlRMODI2MUMgUEhZIFN1cHBvcnQqKlxuXG5Pa2F5LCBzbyBJJ20gdGhpbmtpbmcgYWJvdXQgaG93IHRvIGVmZmVjdGl2ZWx5IHRhcmdldCB0aGlzIG5ldyBSZWFsdGVrIFJUTDgyNjFDIFBIWSBzdXBwb3J0IGluIHRoZSBrZXJuZWwgZm9yIGZ1enppbmcuICBUaGlzIGlzbid0IGp1c3QgYSBzaW1wbGUgZHJpdmVyOyBpdCBpbmNsdWRlcyBmaXJtd2FyZSBsb2FkaW5nIGFuZCBDbGF1c2UgNDUgbWFzdGVyL3NsYXZlIGNvbmZpZ3VyYXRpb24sIHdoaWNoIGltbWVkaWF0ZWx5IG1ha2VzIGl0IG1vcmUgaW50ZXJlc3RpbmcgZnJvbSBhIHNlY3VyaXR5IHBlcnNwZWN0aXZlLCBlc3BlY2lhbGx5IHRoZSBmaXJtd2FyZSBoYW5kbGluZy4gIEl0J3MgcGFydCBvZiBgbGlicGh5YCwgYW5kIHRoYXQncyBjb25kaXRpb25hbGx5IGNvbXBpbGVkIGJhc2VkIG9uIGBDT05GSUdfUEhZTElCYCwgd2hpY2ggaXMgZW5hYmxlZCBieSBkZWZhdWx0IGZvciBuZXR3b3JraW5nLCB3aGljaCBpcyBnb29kLiBUaGF0IHNob3VsZCBzaW1wbGlmeSB0aGluZ3MuXG5cblNvLCB0aGUga2V5IGNvbmZpZ3VyYXRpb24gb3B0aW9uIGlzIGBSRUFMVEVLX1BIWWAuIFRoYXQncyB0aGUgb25lIHdlIG5lZWQuXG5cbk5vdywgbGV0J3MgbmFpbCBkb3duIHRoZSBzcGVjaWZpYyBmdW5jdGlvbnMgd2Ugc2hvdWxkIGZvY3VzIG9uLiAgSSBpbml0aWFsbHkgbGlzdGVkIHRoZXNlOiBgcnRsODI2MXhfcHJvYmVgLCBgcnRsODI2MXhfZ2V0X2ZlYXR1cmVzYCwgYHJ0bDgyNjF4X3JlYWRfc3RhdHVzYCwgYHJ0bDgyNjF4X3ZlcmlmeV9maXJtd2FyZWAsIGBydGw4MjYxeF9md19leGVjdXRlX2VudHJ5YCwgYHJ0bDgyNjF4X2Z3X2xvYWRgLCBgcnRsODI2MXhfY29uZmlnX2ludHJgLCBgcnRsODI2MXhfaGFuZGxlX2ludGVycnVwdGAsIGBydGw4MjYxeF9jb25maWdfYW5lZ2AsIGBydGw4MjYxeF9jb25maWdfaW5pdGAsIGBnZW5waHlfYzQ1X3BtYV9zb2Z0X3Jlc2V0YCwgYGdlbnBoeV9jNDVfYW5fc2V0dXBfbWFzdGVyX3NsYXZlYCwgYW5kIGBnZW5waHlfYzQ1X3JlYWRfbWFzdGVyX3NsYXZlYC5cblxuV2FpdCwgIGBydGw4MjYxeF9oYW5kbGVfaW50ZXJydXB0YCBpcyBhbiBpbnRlcnJ1cHQgaGFuZGxlci4gSXQgaXMgdHJpZ2dlcmVkIG9ubHkgaWYgaW50ZXJydXB0cyBhcmUgc3VwcG9ydGVkIGFuZCBlbmFibGVkIG9uIHRoZSBQSFkuICBTeXprYWxsZXIgbWlnaHQgYmUgYWJsZSB0byB0cmlnZ2VyIHRob3NlIGlmIHRoZSB2aXJ0dWFsIE1ESU8gYnVzIG9yIFVTQiBkZXZpY2UgZW11bGF0ZXMgdGhlIGludGVycnVwdCBzdGF0dXMgcmVnaXN0ZXIgYW5kIGludGVycnVwdCBsaW5lLiBJJ20gbm90IGVudGlyZWx5IHN1cmUgaG93IGVhc3kgdGhhdCB3aWxsIGJlIHdpdGhvdXQgYSBtb3JlIHNvcGhpc3RpY2F0ZWQgbW9jayBkZXZpY2UuICBUaGUgb3RoZXIgZnVuY3Rpb25zIGFyZSBkZWZpbml0ZWx5IHJlYWNoYWJsZSwgdGhvdWdoLlxuXG5TbywgSSBzaG91bGQgcmVmaW5lIHRoaXMgbGlzdC4gSSdsbCBkZWZpbml0ZWx5IGtlZXA6IGBydGw4MjYxeF9md19leGVjdXRlX2VudHJ5YCwgYHJ0bDgyNjF4X3ZlcmlmeV9maXJtd2FyZWAsIGBydGw4MjYxeF9md19sb2FkYCwgYHJ0bDgyNjF4X2NvbmZpZ19pbml0YCwgYHJ0bDgyNjF4X3Byb2JlYCwgYHJ0bDgyNjF4X2NvbmZpZ19hbmVnYCwgYW5kIGBydGw4MjYxeF9yZWFkX3N0YXR1c2AuIFRoZW4gSSdsbCBhZGQgYGdlbnBoeV9jNDVfcG1hX3NvZnRfcmVzZXRgLCBgZ2VucGh5X2M0NV9hbl9zZXR1cF9tYXN0ZXJfc2xhdmVgLCBhbmQgYGdlbnBoeV9jNDVfcmVhZF9tYXN0ZXJfc2xhdmVgIGJlY2F1c2UgdGhleSdyZSBwYXJ0IG9mIHRoaXMgZmVhdHVyZS5cblxuQXJlIHRoZXJlIGFueSBvdGhlcnM/IFllcyEgSSBzaG91bGQgYWxzbyBpbmNsdWRlIGBydGw4MjYxeF9nZXRfZmVhdHVyZXNgIGFuZCBgcnRsODI2MXhfY29uZmlnX2ludHJgLCBhbmQgYHJ0bDgyNjF4X2hhbmRsZV9pbnRlcnJ1cHRgLiBJJ2xsIGluY2x1ZGUgdGhlbSBhbGwuIFRoZXkgYXJlIHNwZWNpZmljIHRvIHRoaXMgbmV3IGZlYXR1cmUgYW5kIG5vdCBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucy5cblxuSGFuZyBvbi4gSSByZWNhbGwgdGhhdCBgZ2VucGh5X2M0NV9hbl9zZXR1cF9tYXN0ZXJfc2xhdmVgIGFuZCBgZ2VucGh5X2M0NV9yZWFkX21hc3Rlcl9zbGF2ZWAgYXJlIGFjdHVhbGx5ICpzdGF0aWMqIGZ1bmN0aW9ucyBpbiBgcGh5LWM0NS5jYC4gIFRoZSBxdWVzdGlvbiBpczogQ2FuIHN5emthbGxlciBldmVuIGRlYWwgd2l0aCBzdGF0aWMgZnVuY3Rpb25zIGluIGBGb2N1c1N5bWJvbHNgPyBZZXMsIGl0IGNhbiwgdGhhdCdzIGZpbmUuXG5cbk5vdywgdG8gYmUgY29tcGxldGVseSBzdXJlLCBsZXQncyBkb3VibGUtY2hlY2sgdGhhdCBgUkVBTFRFS19QSFlgIGlzIGEgdHJpc3RhdGUgY29uZmlnLCBub3QgYSBib29sLiAgWWVwLCBnb29kLiBUaGF0J3MgdGhlIG9ubHkgb25lIHdlICpuZWVkKiB0byBlbmFibGUuXG5cbk9rYXksIGxldCdzIHN0ZXAgYmFjayBhbmQgcmV2aWV3LiBUaGUgbmV3IGNvZGUgc3VwcG9ydHMgdGhlIFJlYWx0ZWsgUlRMODI2MUMgMTBHYnBzIFBIWSwgaW5jbHVkaW5nIGZpcm13YXJlIGxvYWRpbmcgYW5kIHBhcnNpbmcsIGFuZCBDbGF1c2UgNDUgbWFzdGVyL3NsYXZlIGNvbmZpZ3VyYXRpb24uIFRoaXMgY29kZSBpcyByZWFjaGFibGUgdGhyb3VnaCBlbXVsYXRpb24sIGJ5LCBmb3IgaW5zdGFuY2UsIGVtdWxhdGluZyBhIFVTQiBuZXR3b3JrIGFkYXB0ZXIgdGhhdCByZWdpc3RlcnMgYW4gTURJTyBidXMgYW5kIHJlc3BvbmRzIHdpdGggdGhlIFJUTDgyNjFDIFBIWSBJRC4gRmlybXdhcmUgcGFyc2luZyAoYHJ0bDgyNjF4X3ZlcmlmeV9maXJtd2FyZWAsIGBydGw4MjYxeF9md19leGVjdXRlX2VudHJ5YCkgaXMgd2hlcmUgdGhlIHJlYWwgZnV6emluZyBpbnRlcmVzdCBsaWVzIHNpbmNlIGl0IHByb2Nlc3NlcyBleHRlcm5hbCBkYXRhLlxuXG5EbyBJIG5lZWQgdG8gc3BlY2lmeSBnZW5lcmljIGNvbmZpZ3MgbGlrZSBgQ09ORklHX1VTQl9ORVRfRFJJVkVSU2Agb3IgZ2VuZXJpYyBVU0Igb3IgTmV0IGNvbmZpZ3VyYXRpb25zPyBObywgbm90IHNwZWNpZmljYWxseS4gV2Ugb25seSBuZWVkIHRoZSBvbmUgZm9yIHRoZSBuZXcgY29kZS5cblxuRmluYWxseSwgaXMgdGhlcmUgYW55dGhpbmcgZWxzZT8gIExldCBtZSBzZWUuLi4gSXMgYFJUTDgyNjFDX0NFX0ZXX05BTUVgIHVzZWQgYW55d2hlcmUgZWxzZT8gTm8sIGl0J3MgZGVmaW5lZCBpbiB0aGUgcGF0Y2guIExldCdzIGNoZWNrIGBnZW5cblxuIiwiSW5wdXRUb2tlbnMiOjQwNDU2LCJPdXRwdXRUb2tlbnMiOjMwNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjk2NiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0wM1QwNzozOToxMy40NDM5NjY3NTVaIiwiU2VxIjozMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMTU0NTY5MTYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIlJFQUxURUtfUEhZXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwicnRsODI2MXhfcHJvYmVcIixcbiAgICBcInJ0bDgyNjF4X2dldF9mZWF0dXJlc1wiLFxuICAgIFwicnRsODI2MXhfcmVhZF9zdGF0dXNcIixcbiAgICBcInJ0bDgyNjF4X3ZlcmlmeV9maXJtd2FyZVwiLFxuICAgIFwicnRsODI2MXhfZndfZXhlY3V0ZV9lbnRyeVwiLFxuICAgIFwicnRsODI2MXhfZndfbG9hZFwiLFxuICAgIFwicnRsODI2MXhfY29uZmlnX2ludHJcIixcbiAgICBcInJ0bDgyNjF4X2hhbmRsZV9pbnRlcnJ1cHRcIixcbiAgICBcInJ0bDgyNjF4X2NvbmZpZ19hbmVnXCIsXG4gICAgXCJydGw4MjYxeF9jb25maWdfaW5pdFwiLFxuICAgIFwiZ2VucGh5X2M0NV9wbWFfc29mdF9yZXNldFwiLFxuICAgIFwiZ2VucGh5X2M0NV9hbl9zZXR1cF9tYXN0ZXJfc2xhdmVcIixcbiAgICBcImdlbnBoeV9jNDVfcmVhZF9tYXN0ZXJfc2xhdmVcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRzIHN1cHBvcnQgZm9yIHRoZSBSZWFsdGVrIFJUTDgyNjFDIDEwR2JwcyBQSFksIGluY2x1ZGluZyBmaXJtd2FyZSBsb2FkaW5nIGFuZCBwYXJzaW5nLCBhbmQgbmV3IENsYXVzZSA0NSBtYXN0ZXIvc2xhdmUgY29uZmlndXJhdGlvbiBmdW5jdGlvbnMuIFRoaXMgY29kZSBpcyByZWFjaGFibGUgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGJ5IGVtdWxhdGluZyBhIFVTQiBuZXR3b3JrIGFkYXB0ZXIgdGhhdCByZWdpc3RlcnMgYW4gTURJTyBidXMgYW5kIHJlc3BvbmRzIHdpdGggdGhlIFJUTDgyNjFDIFBIWSBJRC4gVGhlIGZpcm13YXJlIHBhcnNpbmcgbG9naWMgaXMgcGFydGljdWxhcmx5IGludGVyZXN0aW5nIGZvciBmdXp6aW5nIGFzIGl0IHByb2Nlc3NlcyBleHRlcm5hbCBkYXRhLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIlJFQUxURUtfUEhZXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwicnRsODI2MXhfcHJvYmVcIixcbiAgICBcInJ0bDgyNjF4X2dldF9mZWF0dXJlc1wiLFxuICAgIFwicnRsODI2MXhfcmVhZF9zdGF0dXNcIixcbiAgICBcInJ0bDgyNjF4X3ZlcmlmeV9maXJtd2FyZVwiLFxuICAgIFwicnRsODI2MXhfZndfZXhlY3V0ZV9lbnRyeVwiLFxuICAgIFwicnRsODI2MXhfZndfbG9hZFwiLFxuICAgIFwicnRsODI2MXhfY29uZmlnX2ludHJcIixcbiAgICBcInJ0bDgyNjF4X2hhbmRsZV9pbnRlcnJ1cHRcIixcbiAgICBcInJ0bDgyNjF4X2NvbmZpZ19hbmVnXCIsXG4gICAgXCJydGw4MjYxeF9jb25maWdfaW5pdFwiLFxuICAgIFwiZ2VucGh5X2M0NV9wbWFfc29mdF9yZXNldFwiLFxuICAgIFwiZ2VucGh5X2M0NV9hbl9zZXR1cF9tYXN0ZXJfc2xhdmVcIixcbiAgICBcImdlbnBoeV9jNDVfcmVhZF9tYXN0ZXJfc2xhdmVcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRzIHN1cHBvcnQgZm9yIHRoZSBSZWFsdGVrIFJUTDgyNjFDIDEwR2JwcyBQSFksIGluY2x1ZGluZyBmaXJtd2FyZSBsb2FkaW5nIGFuZCBwYXJzaW5nLCBhbmQgbmV3IENsYXVzZSA0NSBtYXN0ZXIvc2xhdmUgY29uZmlndXJhdGlvbiBmdW5jdGlvbnMuIFRoaXMgY29kZSBpcyByZWFjaGFibGUgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGJ5IGVtdWxhdGluZyBhIFVTQiBuZXR3b3JrIGFkYXB0ZXIgdGhhdCByZWdpc3RlcnMgYW4gTURJTyBidXMgYW5kIHJlc3BvbmRzIHdpdGggdGhlIFJUTDgyNjFDIFBIWSBJRC4gVGhlIGZpcm13YXJlIHBhcnNpbmcgbG9naWMgaXMgcGFydGljdWxhcmx5IGludGVyZXN0aW5nIGZvciBmdXp6aW5nIGFzIGl0IHByb2Nlc3NlcyBleHRlcm5hbCBkYXRhLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+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-workflow7zc5j[0].run-triage(0) Phase: Succeeded StartedAt: 2026-07-03 07:22:49 +0000 UTC FinishedAt: 2026-07-03 07:39:15 +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": "c75597caada080effbfbc0a7fb10dc2a3bb543ad", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "REALTEK_PHY" ], "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": "c75597caada080effbfbc0a7fb10dc2a3bb543ad", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "REALTEK_PHY" ], "series_id": "35cfe895-1e7a-47cf-a441-1673be59f7c3" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "rtl8261x_probe", "rtl8261x_get_features", "rtl8261x_read_status", "rtl8261x_verify_firmware", "rtl8261x_fw_execute_entry", "rtl8261x_fw_load", "rtl8261x_config_intr", "rtl8261x_handle_interrupt", "rtl8261x_config_aneg", "rtl8261x_config_init", "genphy_c45_pma_soft_reset", "genphy_c45_an_setup_master_slave", "genphy_c45_read_master_slave" ], "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+CgkJCTx0ZD4yMDI2LzA3LzAzIDA3OjM1PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+NG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1JFQUxURUtfUEhZJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7cnRsODI2MXhfcHJvYmUmIzM0OywKICAgICYjMzQ7cnRsODI2MXhfZ2V0X2ZlYXR1cmVzJiMzNDssCiAgICAmIzM0O3J0bDgyNjF4X3JlYWRfc3RhdHVzJiMzNDssCiAgICAmIzM0O3J0bDgyNjF4X3ZlcmlmeV9maXJtd2FyZSYjMzQ7LAogICAgJiMzNDtydGw4MjYxeF9md19leGVjdXRlX2VudHJ5JiMzNDssCiAgICAmIzM0O3J0bDgyNjF4X2Z3X2xvYWQmIzM0OywKICAgICYjMzQ7cnRsODI2MXhfY29uZmlnX2ludHImIzM0OywKICAgICYjMzQ7cnRsODI2MXhfaGFuZGxlX2ludGVycnVwdCYjMzQ7LAogICAgJiMzNDtydGw4MjYxeF9jb25maWdfYW5lZyYjMzQ7LAogICAgJiMzNDtydGw4MjYxeF9jb25maWdfaW5pdCYjMzQ7LAogICAgJiMzNDtnZW5waHlfYzQ1X3BtYV9zb2Z0X3Jlc2V0JiMzNDssCiAgICAmIzM0O2dlbnBoeV9jNDVfYW5fc2V0dXBfbWFzdGVyX3NsYXZlJiMzNDssCiAgICAmIzM0O2dlbnBoeV9jNDVfcmVhZF9tYXN0ZXJfc2xhdmUmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcyBzdXBwb3J0IGZvciB0aGUgUmVhbHRlayBSVEw4MjYxQyAxMEdicHMgUEhZLCBpbmNsdWRpbmcgZmlybXdhcmUgbG9hZGluZyBhbmQgcGFyc2luZywgYW5kIG5ldyBDbGF1c2UgNDUgbWFzdGVyL3NsYXZlIGNvbmZpZ3VyYXRpb24gZnVuY3Rpb25zLiBUaGlzIGNvZGUgaXMgcmVhY2hhYmxlIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBieSBlbXVsYXRpbmcgYSBVU0IgbmV0d29yayBhZGFwdGVyIHRoYXQgcmVnaXN0ZXJzIGFuIE1ESU8gYnVzIGFuZCByZXNwb25kcyB3aXRoIHRoZSBSVEw4MjYxQyBQSFkgSUQuIFRoZSBmaXJtd2FyZSBwYXJzaW5nIGxvZ2ljIGlzIHBhcnRpY3VsYXJseSBpbnRlcmVzdGluZyBmb3IgZnV6emluZyBhcyBpdCBwcm9jZXNzZXMgZXh0ZXJuYWwgZGF0YS4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMyAwNzozNTwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IDA2MWQzZjczMTRkNGYyYjAyNmVhNTEwYmY4MTFhZWYyYjVhNzlmZWVcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgRnJpIEp1bCAzIDA3OjM1OjA0IDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3BoeS9waHktYzQ1LmMgYi9kcml2ZXJzL25ldC9waHkvcGh5LWM0NS5jXG5pbmRleCAxMjY5NTE3NDE0Mjg4Zi4uODcwOTIwMzExZjlhMDEgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9waHkvcGh5LWM0NS5jXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9waHkvcGh5LWM0NS5jXG5AQCAtMzg0LDYgJiM0MzszODQsMTE5IEBAIGludCBnZW5waHlfYzQ1X2NoZWNrX2FuZF9yZXN0YXJ0X2FuZWcoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldiwgYm9vbCByZXN0YXJ0KVxuIH1cbiBFWFBPUlRfU1lNQk9MX0dQTChnZW5waHlfYzQ1X2NoZWNrX2FuZF9yZXN0YXJ0X2FuZWcpO1xuIFxuJiM0MzsvKipcbiYjNDM7ICogZ2VucGh5X2M0NV9wbWFfc29mdF9yZXNldCAtIHNvZnR3YXJlIHJlc2V0IHRoZSBQSFkgdmlhIENsYXVzZSA0NSBQTUEvUE1EIGNvbnRyb2wgcmVnaXN0ZXJcbiYjNDM7ICogQHBoeWRldjogdGFyZ2V0IHBoeV9kZXZpY2Ugc3RydWN0XG4mIzQzOyAqXG4mIzQzOyAqIFJldHVybjogMCBvbiBzdWNjZXNzLCBuZWdhdGl2ZSBlcnJubyBvbiBmYWlsdXJlLlxuJiM0MzsgKi9cbiYjNDM7aW50IGdlbnBoeV9jNDVfcG1hX3NvZnRfcmVzZXQoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcbiYjNDM7e1xuJiM0MztcdGludCByZXQsIHZhbDtcbiYjNDM7XG4mIzQzO1x0cmV0ID0gcGh5X3NldF9iaXRzX21tZChwaHlkZXYsIE1ESU9fTU1EX1BNQVBNRCwgTURJT19DVFJMMSxcbiYjNDM7XHRcdFx0ICAgICAgIE1ESU9fQ1RSTDFfUkVTRVQpO1xuJiM0MztcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRyZXR1cm4gcmV0O1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gcGh5X3JlYWRfbW1kX3BvbGxfdGltZW91dChwaHlkZXYsIE1ESU9fTU1EX1BNQVBNRCxcbiYjNDM7XHRcdFx0XHRcdCBNRElPX0NUUkwxLCB2YWwsXG4mIzQzO1x0XHRcdFx0XHQgISh2YWwgXHUwMDI2IE1ESU9fQ1RSTDFfUkVTRVQpLFxuJiM0MztcdFx0XHRcdFx0IDUwMDAsIDYwMDAwMCwgdHJ1ZSk7XG4mIzQzO31cbiYjNDM7RVhQT1JUX1NZTUJPTF9HUEwoZ2VucGh5X2M0NV9wbWFfc29mdF9yZXNldCk7XG4mIzQzO1xuJiM0MzsvKipcbiYjNDM7ICogZ2VucGh5X2M0NV9hbl9zZXR1cF9tYXN0ZXJfc2xhdmUgLSBDb25maWd1cmUgTWFzdGVyL1NsYXZlIHNldHRpbmcgZm9yIEM0NSBQSFlzXG4mIzQzOyAqIEBwaHlkZXY6IHRhcmdldCBwaHlfZGV2aWNlIHN0cnVjdFxuJiM0MzsgKlxuJiM0MzsgKiBEZXNjcmlwdGlvbjogQ29uZmlndXJlIHRoZSBmb3JjZWQgb3IgcHJlZmVycmVkIE1hc3Rlci9TbGF2ZSByb2xlXG4mIzQzOyAqIDEwR0JBU0UtVCBjb250cm9sIHJlZ2lzdGVyIChNTUQgNywgUmVnaXN0ZXIgMHgwMDIwKSBhY2NvcmRpbmcgdG9cbiYjNDM7ICogSUVFRSA4MDIuMyBzdGFuZGFyZHMuXG4mIzQzOyAqXG4mIzQzOyAqIFJldHVybjogbmVnYXRpdmUgZXJybm8gY29kZSBvbiBmYWlsdXJlLCAwIGlmIE1hc3Rlci9TbGF2ZSBkaWRuJiMzOTt0IGNoYW5nZSxcbiYjNDM7ICogb3IgMSBpZiBNYXN0ZXIvU2xhdmUgbW9kZXMgY2hhbmdlZC5cbiYjNDM7ICovXG4mIzQzO3N0YXRpYyBpbnQgZ2VucGh5X2M0NV9hbl9zZXR1cF9tYXN0ZXJfc2xhdmUoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcbiYjNDM7e1xuJiM0MztcdHUxNiBjdGwgPSAwO1xuJiM0MztcbiYjNDM7XHRzd2l0Y2ggKHBoeWRldi1cdTAwM2VtYXN0ZXJfc2xhdmVfc2V0KSB7XG4mIzQzO1x0Y2FzZSBNQVNURVJfU0xBVkVfQ0ZHX01BU1RFUl9QUkVGRVJSRUQ6XG4mIzQzO1x0XHRjdGwgPSBNRElPX0FOXzEwR0JUX0NUUkxfTVNfUE9SVF9UWVBFO1xuJiM0MztcdFx0YnJlYWs7XG4mIzQzO1x0Y2FzZSBNQVNURVJfU0xBVkVfQ0ZHX1NMQVZFX1BSRUZFUlJFRDpcbiYjNDM7XHRcdGJyZWFrO1xuJiM0MztcdGNhc2UgTUFTVEVSX1NMQVZFX0NGR19NQVNURVJfRk9SQ0U6XG4mIzQzO1x0XHRjdGwgPSBNRElPX0FOXzEwR0JUX0NUUkxfTVNfRU5BQkxFIHwgTURJT19BTl8xMEdCVF9DVFJMX01TX1ZBTFVFO1xuJiM0MztcdFx0YnJlYWs7XG4mIzQzO1x0Y2FzZSBNQVNURVJfU0xBVkVfQ0ZHX1NMQVZFX0ZPUkNFOlxuJiM0MztcdFx0Y3RsID0gTURJT19BTl8xMEdCVF9DVFJMX01TX0VOQUJMRTtcbiYjNDM7XHRcdGJyZWFrO1xuJiM0MztcdGNhc2UgTUFTVEVSX1NMQVZFX0NGR19VTktOT1dOOlxuJiM0MztcdGNhc2UgTUFTVEVSX1NMQVZFX0NGR19VTlNVUFBPUlRFRDpcbiYjNDM7XHRcdHJldHVybiAwO1xuJiM0MztcdGRlZmF1bHQ6XG4mIzQzO1x0XHRwaHlkZXZfd2FybihwaHlkZXYsIFwmIzM0O1Vuc3VwcG9ydGVkIE1hc3Rlci9TbGF2ZSBtb2RlXFxuXCYjMzQ7KTtcbiYjNDM7XHRcdHJldHVybiAtRU9QTk9UU1VQUDtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdHJldHVybiBwaHlfbW9kaWZ5X21tZF9jaGFuZ2VkKHBoeWRldiwgTURJT19NTURfQU4sIE1ESU9fQU5fMTBHQlRfQ1RSTCxcbiYjNDM7XHRcdFx0XHQgICAgICBNRElPX0FOXzEwR0JUX0NUUkxfTVNfRU5BQkxFIHxcbiYjNDM7XHRcdFx0XHQgICAgICBNRElPX0FOXzEwR0JUX0NUUkxfTVNfVkFMVUUgfFxuJiM0MztcdFx0XHRcdCAgICAgIE1ESU9fQU5fMTBHQlRfQ1RSTF9NU19QT1JUX1RZUEUsIGN0bCk7XG4mIzQzO31cbiYjNDM7XG4mIzQzOy8qKlxuJiM0MzsgKiBnZW5waHlfYzQ1X3JlYWRfbWFzdGVyX3NsYXZlIC0gcmVhZCBtYXN0ZXIvc2xhdmUgc3RhdHVzXG4mIzQzOyAqIEBwaHlkZXY6IHRhcmdldCBwaHlfZGV2aWNlIHN0cnVjdFxuJiM0MzsgKlxuJiM0MzsgKiBEZXNjcmlwdGlvbjogUmVhZCB0aGUgTWFzdGVyL1NsYXZlIGNvbmZpZ3VyYXRpb24gYW5kIHN0YXR1c1xuJiM0MzsgKiBmcm9tIDEwR0JBU0UtVCBjb250cm9sL3N0YXR1cyByZWdpc3RlcnMgKE1NRCA3LCBSZWcgMHgwMDIwIGFuZCAweDAwMjEpLlxuJiM0MzsgKlxuJiM0MzsgKiBSZXR1cm46IDAgb24gc3VjY2Vzcywgb3IgYSBuZWdhdGl2ZSBlcnJvciBjb2RlIG9uIGZhaWx1cmUuXG4mIzQzOyAqL1xuJiM0MztzdGF0aWMgaW50IGdlbnBoeV9jNDVfcmVhZF9tYXN0ZXJfc2xhdmUoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcbiYjNDM7e1xuJiM0MztcdGludCB2YWw7XG4mIzQzO1xuJiM0MztcdHBoeWRldi1cdTAwM2VtYXN0ZXJfc2xhdmVfZ2V0ID0gTUFTVEVSX1NMQVZFX0NGR19VTktOT1dOO1xuJiM0MztcdHBoeWRldi1cdTAwM2VtYXN0ZXJfc2xhdmVfc3RhdGUgPSBNQVNURVJfU0xBVkVfU1RBVEVfVU5LTk9XTjtcbiYjNDM7XG4mIzQzO1x0dmFsID0gcGh5X3JlYWRfbW1kKHBoeWRldiwgTURJT19NTURfQU4sIE1ESU9fQU5fMTBHQlRfQ1RSTCk7XG4mIzQzO1x0aWYgKHZhbCBcdTAwM2MgMClcbiYjNDM7XHRcdHJldHVybiB2YWw7XG4mIzQzO1xuJiM0MztcdGlmICh2YWwgXHUwMDI2IE1ESU9fQU5fMTBHQlRfQ1RSTF9NU19FTkFCTEUpIHtcbiYjNDM7XHRcdGlmICh2YWwgXHUwMDI2IE1ESU9fQU5fMTBHQlRfQ1RSTF9NU19WQUxVRSlcbiYjNDM7XHRcdFx0cGh5ZGV2LVx1MDAzZW1hc3Rlcl9zbGF2ZV9nZXQgPSBNQVNURVJfU0xBVkVfQ0ZHX01BU1RFUl9GT1JDRTtcbiYjNDM7XHRcdGVsc2VcbiYjNDM7XHRcdFx0cGh5ZGV2LVx1MDAzZW1hc3Rlcl9zbGF2ZV9nZXQgPSBNQVNURVJfU0xBVkVfQ0ZHX1NMQVZFX0ZPUkNFO1xuJiM0MztcdH0gZWxzZSB7XG4mIzQzO1x0XHRpZiAodmFsIFx1MDAyNiBNRElPX0FOXzEwR0JUX0NUUkxfTVNfUE9SVF9UWVBFKVxuJiM0MztcdFx0XHRwaHlkZXYtXHUwMDNlbWFzdGVyX3NsYXZlX2dldCA9IE1BU1RFUl9TTEFWRV9DRkdfTUFTVEVSX1BSRUZFUlJFRDtcbiYjNDM7XHRcdGVsc2VcbiYjNDM7XHRcdFx0cGh5ZGV2LVx1MDAzZW1hc3Rlcl9zbGF2ZV9nZXQgPSBNQVNURVJfU0xBVkVfQ0ZHX1NMQVZFX1BSRUZFUlJFRDtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdHZhbCA9IHBoeV9yZWFkX21tZChwaHlkZXYsIE1ESU9fTU1EX0FOLCBNRElPX0FOXzEwR0JUX1NUQVQpO1xuJiM0MztcdGlmICh2YWwgXHUwMDNjIDApXG4mIzQzO1x0XHRyZXR1cm4gdmFsO1xuJiM0MztcbiYjNDM7XHRpZiAodmFsIFx1MDAyNiBNRElPX0FOXzEwR0JUX1NUQVRfTVNfRkFVTFQpIHtcbiYjNDM7XHRcdHBoeWRldi1cdTAwM2VtYXN0ZXJfc2xhdmVfc3RhdGUgPSBNQVNURVJfU0xBVkVfU1RBVEVfRVJSO1xuJiM0MztcdH0gZWxzZSBpZiAocGh5ZGV2LVx1MDAzZWxpbmspIHtcbiYjNDM7XHRcdGlmICh2YWwgXHUwMDI2IE1ESU9fQU5fMTBHQlRfU1RBVF9NU19SRVMpXG4mIzQzO1x0XHRcdHBoeWRldi1cdTAwM2VtYXN0ZXJfc2xhdmVfc3RhdGUgPSBNQVNURVJfU0xBVkVfU1RBVEVfTUFTVEVSO1xuJiM0MztcdFx0ZWxzZVxuJiM0MztcdFx0XHRwaHlkZXYtXHUwMDNlbWFzdGVyX3NsYXZlX3N0YXRlID0gTUFTVEVSX1NMQVZFX1NUQVRFX1NMQVZFO1xuJiM0MztcdH0gZWxzZSB7XG4mIzQzO1x0XHRwaHlkZXYtXHUwMDNlbWFzdGVyX3NsYXZlX3N0YXRlID0gTUFTVEVSX1NMQVZFX1NUQVRFX1VOS05PV047XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRyZXR1cm4gMDtcbiYjNDM7fVxuJiM0MztcbiAvKipcbiAgKiBnZW5waHlfYzQ1X2FuZWdfZG9uZSAtIHJldHVybiBhdXRvLW5lZ290aWF0aW9uIGNvbXBsZXRlIHN0YXR1c1xuICAqIEBwaHlkZXY6IHRhcmdldCBwaHlfZGV2aWNlIHN0cnVjdFxuQEAgLTExOTIsNiAmIzQzOzEzMDUsMTAgQEAgaW50IGdlbnBoeV9jNDVfcmVhZF9zdGF0dXMoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcbiBcdFx0XHRyZXQgPSBnZW5waHlfYzQ1X2Jhc2V0MV9yZWFkX3N0YXR1cyhwaHlkZXYpO1xuIFx0XHRcdGlmIChyZXQgXHUwMDNjIDApXG4gXHRcdFx0XHRyZXR1cm4gcmV0O1xuJiM0MztcdFx0fSBlbHNlIHtcbiYjNDM7XHRcdFx0cmV0ID0gZ2VucGh5X2M0NV9yZWFkX21hc3Rlcl9zbGF2ZShwaHlkZXYpO1xuJiM0MztcdFx0XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0XHRcdHJldHVybiByZXQ7XG4gXHRcdH1cbiBcbiBcdFx0cGh5X3Jlc29sdmVfYW5lZ19saW5rbW9kZShwaHlkZXYpO1xuQEAgLTEyMjUsNiAmIzQzOzEzNDIsMTQgQEAgaW50IGdlbnBoeV9jNDVfY29uZmlnX2FuZWcoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcbiBcdGlmIChyZXQgXHUwMDNlIDApXG4gXHRcdGNoYW5nZWQgPSB0cnVlO1xuIFxuJiM0MztcdGlmICghZ2VucGh5X2M0NV9iYXNldDFfYWJsZShwaHlkZXYpKSB7XG4mIzQzO1x0XHRyZXQgPSBnZW5waHlfYzQ1X2FuX3NldHVwX21hc3Rlcl9zbGF2ZShwaHlkZXYpO1xuJiM0MztcdFx0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdFx0cmV0dXJuIHJldDtcbiYjNDM7XHRcdGlmIChyZXQgXHUwMDNlIDApXG4mIzQzO1x0XHRcdGNoYW5nZWQgPSB0cnVlO1xuJiM0MztcdH1cbiYjNDM7XG4gXHRyZXR1cm4gZ2VucGh5X2M0NV9jaGVja19hbmRfcmVzdGFydF9hbmVnKHBoeWRldiwgY2hhbmdlZCk7XG4gfVxuIEVYUE9SVF9TWU1CT0xfR1BMKGdlbnBoeV9jNDVfY29uZmlnX2FuZWcpO1xuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3BoeS9yZWFsdGVrL3JlYWx0ZWtfbWFpbi5jIGIvZHJpdmVycy9uZXQvcGh5L3JlYWx0ZWsvcmVhbHRla19tYWluLmNcbmluZGV4IDI3MjY4ODExZjU2NGYyLi42OGEyZGUwYjJiZDNiYSAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L3BoeS9yZWFsdGVrL3JlYWx0ZWtfbWFpbi5jXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9waHkvcmVhbHRlay9yZWFsdGVrX21haW4uY1xuQEAgLTgsNyAmIzQzOzgsOSBAQFxuICAqIENvcHlyaWdodCAoYykgMjAwNCBGcmVlc2NhbGUgU2VtaWNvbmR1Y3RvciwgSW5jLlxuICAqL1xuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2JpdG9wcy5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L2NyYzMyLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9ldGh0b29sX25ldGxpbmsuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC9maXJtd2FyZS5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvb2YuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3BoeS5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvcG1fd2FrZWlycS5oXHUwMDNlXG5AQCAtMTQxLDYgJiM0MzsxNDMsMTAgQEBcbiAjZGVmaW5lIFJUTDgyMTFGX1BIWVNJQ0FMX0FERFJfV09SRDFcdFx0MTdcbiAjZGVmaW5lIFJUTDgyMTFGX1BIWVNJQ0FMX0FERFJfV09SRDJcdFx0MThcbiBcbiYjNDM7I2RlZmluZSBSVEw4MjYxWF9FWFRfQUREUl9SRUdcdFx0XHQweGE0MzZcbiYjNDM7I2RlZmluZSBSVEw4MjYxWF9FWFRfREFUQV9SRUdcdFx0XHQweGE0MzhcbiYjNDM7I2RlZmluZSBSVExfODI2MVhfU1VCX1BIWV9JRF9BRERSXHRcdDB4ODAxZFxuJiM0MztcbiAjZGVmaW5lIFJUTDgyMlhfVk5EMV9TRVJERVNfT1BUSU9OXHRcdFx0MHg2OTdhXG4gI2RlZmluZSBSVEw4MjJYX1ZORDFfU0VSREVTX09QVElPTl9NT0RFX01BU0tcdFx0R0VOTUFTSyg1LCAwKVxuICNkZWZpbmUgUlRMODIyWF9WTkQxX1NFUkRFU19PUFRJT05fTU9ERV8yNTAwQkFTRVhfU0dNSUlcdFx0MFxuQEAgLTI1MSw2ICYjNDM7MjU3LDY5IEBAXG4gI2RlZmluZSBSVExfODIyMUJfVk1fQ0dcdFx0XHRcdDB4MDAxY2M4NGFcbiAjZGVmaW5lIFJUTF84MjUxQlx0XHRcdFx0MHgwMDFjYzg2MlxuICNkZWZpbmUgUlRMXzgyNjFDXHRcdFx0XHQweDAwMWNjODkwXG4mIzQzOyNkZWZpbmUgUlRMXzgyNjFDX0NHXHRcdFx0XHQweDAwMWNjODk4XG4mIzQzO1xuJiM0MzsjZGVmaW5lIFJUTDgyNjFDX0NFX01PREVMXHRcdDB4MDBcbiYjNDM7I2RlZmluZSBSVEw4MjYxWF9JTlRfQVVUT05FR19FUlJPUlx0QklUKDApXG4mIzQzOyNkZWZpbmUgUlRMODI2MVhfSU5UX1BBR0VfUkVDVlx0XHRCSVQoMilcbiYjNDM7I2RlZmluZSBSVEw4MjYxWF9JTlRfQVVUT05FR19ET05FXHRCSVQoMylcbiYjNDM7I2RlZmluZSBSVEw4MjYxWF9JTlRfTElOS19DSEdcdFx0QklUKDQpXG4mIzQzOyNkZWZpbmUgUlRMODI2MVhfSU5UX1BIWV9SRUdfQUNDRVNTXHRCSVQoNSlcbiYjNDM7I2RlZmluZSBSVEw4MjYxWF9JTlRfUE1FXHRcdEJJVCg3KVxuJiM0MzsjZGVmaW5lIFJUTDgyNjFYX0lOVF9BTERQU19DSEdcdFx0QklUKDkpXG4mIzQzOyNkZWZpbmUgUlRMODI2MVhfSU5UX0pBQkJFUlx0XHRCSVQoMTApXG4mIzQzO1xuJiM0MzsjZGVmaW5lIFJUTDgyNjFYX0lOVF9NQVNLX0RFRkFVTFRcdChSVEw4MjYxWF9JTlRfQVVUT05FR19ET05FIHwgXFxcbiYjNDM7XHRcdFx0XHRcdCBSVEw4MjYxWF9JTlRfTElOS19DSEcgfCBcXFxuJiM0MztcdFx0XHRcdFx0IFJUTDgyNjFYX0lOVF9BVVRPTkVHX0VSUk9SIHwgXFxcbiYjNDM7XHRcdFx0XHRcdCBSVEw4MjYxWF9JTlRfSkFCQkVSKVxuJiM0MztcbiYjNDM7I2RlZmluZSBSVEw4MjYxWF9JTlRfTUFTS19BTExcdFx0KFJUTDgyNjFYX0lOVF9BVVRPTkVHX0VSUk9SIHwgXFxcbiYjNDM7XHRcdFx0XHRcdCBSVEw4MjYxWF9JTlRfUEFHRV9SRUNWIHwgXFxcbiYjNDM7XHRcdFx0XHRcdCBSVEw4MjYxWF9JTlRfQVVUT05FR19ET05FIHwgXFxcbiYjNDM7XHRcdFx0XHRcdCBSVEw4MjYxWF9JTlRfTElOS19DSEcgfCBcXFxuJiM0MztcdFx0XHRcdFx0IFJUTDgyNjFYX0lOVF9QSFlfUkVHX0FDQ0VTUyB8IFxcXG4mIzQzO1x0XHRcdFx0XHQgUlRMODI2MVhfSU5UX1BNRSB8IFxcXG4mIzQzO1x0XHRcdFx0XHQgUlRMODI2MVhfSU5UX0FMRFBTX0NIRyB8IFxcXG4mIzQzO1x0XHRcdFx0XHQgUlRMODI2MVhfSU5UX0pBQkJFUilcbiYjNDM7XG4mIzQzOyNkZWZpbmUgRldfTUFJTl9NQUdJQ1x0XHRcdDB4NTI1NDRDMzhcbiYjNDM7I2RlZmluZSBGV19TVUJfTUFHSUNfODI2MUNcdFx0MHgzMjM2MzE0M1xuJiM0MzsjZGVmaW5lIFJUTDgyNjFYX1BPTExfVElNRU9VVF9NU1x0MTAwXG4mIzQzOyNkZWZpbmUgUlRMODI2MVhfTUFYX01NRF9ERVZcdFx0MzFcbiYjNDM7XG4mIzQzOyNkZWZpbmUgUlRMODI2MUNfQ0VfRldfTkFNRVx0XCYjMzQ7cnRsX25pYy9ydGw4MjYxYy5iaW5cJiMzNDtcbiYjNDM7TU9EVUxFX0ZJUk1XQVJFKFJUTDgyNjFDX0NFX0ZXX05BTUUpO1xuJiM0MztcbiYjNDM7ZW51bSBydGw4MjYxeF9md19vcCB7XG4mIzQzO1x0T1BfV1JJVEUgPSAweDAwLFx0LyogV3JpdGUgKi9cbiYjNDM7XHRPUF9QT0xMICA9IDB4MDIsXHQvKiBQb2xsaW5nICovXG4mIzQzO307XG4mIzQzO1xuJiM0MztzdHJ1Y3QgcnRsODI2MXhfZndfaGVhZGVyIHtcbiYjNDM7XHRfX2xlMzIgbWFpbl9tYWdpYztcdC8qIE1haW4gbWFnaWMgbnVtYmVyICovXG4mIzQzO1x0X19sZTMyIHN1Yl9tYWdpYztcdC8qIFN1YiBtYWdpYyBudW1iZXIgKi9cbiYjNDM7XHRfX2xlMTYgdmVyc2lvbl9tYWpvcjtcdC8qIE1ham9yIHZlcnNpb24gKi9cbiYjNDM7XHRfX2xlMTYgdmVyc2lvbl9taW5vcjtcdC8qIE1pbm9yIHZlcnNpb24gKi9cbiYjNDM7XHRfX2xlMTYgbnVtX2VudHJpZXM7XHQvKiBOdW1iZXIgb2YgZW50cmllcyAqL1xuJiM0MztcdF9fbGUxNiByZXNlcnZlZDtcdC8qIFJlc2VydmVkICovXG4mIzQzO1x0X19sZTMyIGNyYzMyO1x0XHQvKiBDUkMzMiBjaGVja3N1bSAqL1xuJiM0Mzt9O1xuJiM0MztcbiYjNDM7c3RydWN0IHJ0bDgyNjF4X2Z3X2VudHJ5IHtcbiYjNDM7XHRfX3U4ICB0eXBlO1x0XHQvKiBPcGVyYXRpb24gdHlwZSAoT1BfKikgKi9cbiYjNDM7XHRfX3U4ICBkZXY7XHRcdC8qIE1NRCBkZXZpY2UgKi9cbiYjNDM7XHRfX2xlMTYgYWRkcjtcdFx0LyogUmVnaXN0ZXIgYWRkcmVzcyAqL1xuJiM0MztcdF9fdTggIG1zYjtcdFx0LyogTVNCIGJpdCBwb3NpdGlvbiAqL1xuJiM0MztcdF9fdTggIGxzYjtcdFx0LyogTFNCIGJpdCBwb3NpdGlvbiAqL1xuJiM0MztcdF9fbGUxNiB2YWx1ZTtcdFx0LyogVmFsdWUgdG8gd3JpdGUvY29tcGFyZSAqL1xuJiM0MztcdF9fbGUxNiB0aW1lb3V0X21zO1x0LyogUG9sbCB0aW1lb3V0IGluIG1pbGxpc2Vjb25kcyAqL1xuJiM0MztcdF9fdTggIHBvbGxfc2V0O1x0XHQvKiBQb2xsIHVudGlsIGVxdWFsICgxKSBvciBub3QgZXF1YWwgKDApICovXG4mIzQzO1x0X191OCAgcmVzZXJ2ZWQ7XHRcdC8qIFJlc2VydmVkICovXG4mIzQzO307XG4mIzQzO1xuJiM0MzsjZGVmaW5lIEZXX0hFQURFUl9TSVpFXHRcdHNpemVvZihzdHJ1Y3QgcnRsODI2MXhfZndfaGVhZGVyKVxuJiM0MzsjZGVmaW5lIEZXX0VOVFJZX1NJWkVcdFx0c2l6ZW9mKHN0cnVjdCBydGw4MjYxeF9md19lbnRyeSlcbiBcbiAvKiBSVEw4MjExRSBhbmQgUlRMODIxMUYgc3VwcG9ydCB1cCB0byB0aHJlZSBMRURzICovXG4gI2RlZmluZSBSVEw4MjExeF9MRURfQ09VTlRcdFx0XHQzXG5AQCAtMjcwLDYgJiM0MzszMzksMTEgQEAgc3RydWN0IHJ0bDgyMXhfcHJpdiB7XG4gXHR1MTYgaW5lcjtcbiB9O1xuIFxuJiM0MztzdHJ1Y3QgcnRsODI2MXhfcHJpdiB7XG4mIzQzO1x0Y29uc3QgY2hhciAqZndfbmFtZTtcbiYjNDM7XHRib29sIGZ3X2xvYWRlZDtcbiYjNDM7fTtcbiYjNDM7XG4gc3RhdGljIGludCBydGw4MjF4X3JlYWRfcGFnZShzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxuIHtcbiBcdHJldHVybiBfX3BoeV9yZWFkKHBoeWRldiwgUlRMODIxeF9QQUdFX1NFTEVDVCk7XG5AQCAtMzEwLDYgJiM0MzszODQsMzI1IEBAIHN0YXRpYyBpbnQgcnRsODIxeF9tb2RpZnlfZXh0X3BhZ2Uoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldiwgdTE2IGV4dF9wYWdlLFxuIFx0cmV0dXJuIHBoeV9yZXN0b3JlX3BhZ2UocGh5ZGV2LCBvbGRwYWdlLCByZXQpO1xuIH1cbiBcbiYjNDM7c3RhdGljIGludCBydGw4MjYxeF9wcm9iZShzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IGRldmljZSAqZGV2ID0gXHUwMDI2cGh5ZGV2LVx1MDAzZW1kaW8uZGV2O1xuJiM0MztcdHN0cnVjdCBydGw4MjYxeF9wcml2ICpwcml2O1xuJiM0MztcdGludCBzdWJfcGh5X2lkLCByZXQ7XG4mIzQzO1xuJiM0MztcdHByaXYgPSBkZXZtX2t6YWxsb2MoZGV2LCBzaXplb2YoKnByaXYpLCBHRlBfS0VSTkVMKTtcbiYjNDM7XHRpZiAoIXByaXYpXG4mIzQzO1x0XHRyZXR1cm4gLUVOT01FTTtcbiYjNDM7XG4mIzQzO1x0cGh5ZGV2LVx1MDAzZXByaXYgPSBwcml2O1xuJiM0MztcbiYjNDM7XHRyZXQgPSBwaHlfd3JpdGVfbW1kKHBoeWRldiwgTURJT19NTURfVkVORDIsIFJUTDgyNjFYX0VYVF9BRERSX1JFRyxcbiYjNDM7XHRcdFx0ICAgIFJUTF84MjYxWF9TVUJfUEhZX0lEX0FERFIpO1xuJiM0MztcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRyZXR1cm4gcmV0O1xuJiM0MztcbiYjNDM7XHRyZXQgPSBwaHlfcmVhZF9tbWQocGh5ZGV2LCBNRElPX01NRF9WRU5EMiwgUlRMODI2MVhfRVhUX0RBVEFfUkVHKTtcbiYjNDM7XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0cmV0dXJuIHJldDtcbiYjNDM7XG4mIzQzO1x0c3ViX3BoeV9pZCA9IChyZXQgXHUwMDNlXHUwMDNlIDgpIFx1MDAyNiAweGZmO1xuJiM0MztcbiYjNDM7XHRzd2l0Y2ggKHN1Yl9waHlfaWQpIHtcbiYjNDM7XHRjYXNlIFJUTDgyNjFDX0NFX01PREVMOlxuJiM0MztcdFx0cHJpdi1cdTAwM2Vmd19uYW1lID0gUlRMODI2MUNfQ0VfRldfTkFNRTtcbiYjNDM7XHRcdHBoeWRldl9pbmZvKHBoeWRldiwgXCYjMzQ7UlRMODI2MUMgZGV0ZWN0ZWQgKHN1Yl9pZCAweCUwMngpXFxuXCYjMzQ7LCBzdWJfcGh5X2lkKTtcbiYjNDM7XHRcdGJyZWFrO1xuJiM0MztcbiYjNDM7XHRkZWZhdWx0OlxuJiM0MztcdFx0cGh5ZGV2X3dhcm4ocGh5ZGV2LCBcJiMzNDtVbmtub3duIHN1Yl9pZCAweCUwMngsIGRlZmF1bHQgYmVoYXZpb3JcXG5cJiMzNDssIHN1Yl9waHlfaWQpO1xuJiM0MztcdFx0cmV0dXJuIC1FTk9ERVY7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRyZXR1cm4gMDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGludCBydGw4MjYxeF9nZXRfZmVhdHVyZXMoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcbiYjNDM7e1xuJiM0MztcdGludCByZXQ7XG4mIzQzO1xuJiM0MztcdHJldCA9IGdlbnBoeV9jNDVfcG1hX3JlYWRfYWJpbGl0aWVzKHBoeWRldik7XG4mIzQzO1x0aWYgKHJldClcbiYjNDM7XHRcdHJldHVybiByZXQ7XG4mIzQzO1x0LypcbiYjNDM7XHQgKiBTdXBwbGVtZW50IE11bHRpLUdpZyBzcGVlZHMgdGhhdCBtYXkgbm90IGJlIGF1dG9tYXRpY2FsbHkgZGV0ZWN0ZWRcbiYjNDM7XHQgKiBSVEw4MjYxWCBzdXBwb3J0cyAyLjVHLzVHIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIDEwR1xuJiM0MztcdCAqL1xuJiM0MztcdGxpbmttb2RlX3NldF9iaXQoRVRIVE9PTF9MSU5LX01PREVfMjUwMGJhc2VUX0Z1bGxfQklULFxuJiM0MztcdFx0XHQgcGh5ZGV2LVx1MDAzZXN1cHBvcnRlZCk7XG4mIzQzO1x0bGlua21vZGVfc2V0X2JpdChFVEhUT09MX0xJTktfTU9ERV81MDAwYmFzZVRfRnVsbF9CSVQsXG4mIzQzO1x0XHRcdCBwaHlkZXYtXHUwMDNlc3VwcG9ydGVkKTtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIDA7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBpbnQgcnRsODI2MXhfcmVhZF9zdGF0dXMoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcbiYjNDM7e1xuJiM0MztcdGludCByZXQsIHZhbCA9IDA7XG4mIzQzO1xuJiM0MztcdGlmIChwaHlkZXYtXHUwMDNlYXV0b25lZyA9PSBBVVRPTkVHX0VOQUJMRSkge1xuJiM0MztcdFx0cmV0ID0gZ2VucGh5X2M0NV9hbmVnX2RvbmUocGh5ZGV2KTtcbiYjNDM7XHRcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRcdHJldHVybiByZXQ7XG4mIzQzO1xuJiM0MztcdFx0aWYgKHJldCkge1xuJiM0MztcdFx0XHR2YWwgPSBwaHlfcmVhZF9tbWQocGh5ZGV2LCBNRElPX01NRF9WRU5EMixcbiYjNDM7XHRcdFx0XHRcdCAgIFJUTDgyMlhfVk5EMl9DMjJfUkVHKE1JSV9TVEFUMTAwMCkpO1xuJiM0MztcdFx0XHRpZiAodmFsIFx1MDAzYyAwKVxuJiM0MztcdFx0XHRcdHJldHVybiB2YWw7XG4mIzQzO1x0XHR9XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRtaWlfc3RhdDEwMDBfbW9kX2xpbmttb2RlX2xwYV90KHBoeWRldi1cdTAwM2VscF9hZHZlcnRpc2luZywgdmFsKTtcbiYjNDM7XG4mIzQzO1x0cmV0ID0gZ2VucGh5X2M0NV9yZWFkX3N0YXR1cyhwaHlkZXYpO1xuJiM0MztcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRyZXR1cm4gcmV0O1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gMDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGludCBydGw4MjYxeF92ZXJpZnlfZmlybXdhcmUoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldiwgY29uc3Qgc3RydWN0IGZpcm13YXJlICpmdylcbiYjNDM7e1xuJiM0MztcdGNvbnN0IHN0cnVjdCBydGw4MjYxeF9md19oZWFkZXIgKmhkcjtcbiYjNDM7XHR1MzIgbWFpbl9tYWdpYywgc3ViX21hZ2ljO1xuJiM0MztcdHUzMiBjYWxjX2NyYywgZmlsZV9jcmM7XG4mIzQzO1x0c2l6ZV90IGRhdGFfbGVuO1xuJiM0MztcdHUxNiBudW1fZW50cmllcztcbiYjNDM7XG4mIzQzO1x0aWYgKGZ3LVx1MDAzZXNpemUgXHUwMDNjIEZXX0hFQURFUl9TSVpFKSB7XG4mIzQzO1x0XHRwaHlkZXZfZXJyKHBoeWRldiwgXCYjMzQ7RmlybXdhcmUgdG9vIHNtYWxsOiAlenUgYnl0ZXNcXG5cJiMzNDssIGZ3LVx1MDAzZXNpemUpO1xuJiM0MztcdFx0cmV0dXJuIC1FSU5WQUw7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRoZHIgPSAoY29uc3Qgc3RydWN0IHJ0bDgyNjF4X2Z3X2hlYWRlciAqKWZ3LVx1MDAzZWRhdGE7XG4mIzQzO1xuJiM0MztcdG1haW5fbWFnaWMgPSBsZTMyX3RvX2NwdShoZHItXHUwMDNlbWFpbl9tYWdpYyk7XG4mIzQzO1x0aWYgKG1haW5fbWFnaWMgIT0gRldfTUFJTl9NQUdJQykge1xuJiM0MztcdFx0cGh5ZGV2X2VycihwaHlkZXYsIFwmIzM0O0ludmFsaWQgZmlybXdhcmUgbWFnaWM6IDB4JTA4eFxcblwmIzM0OywgbWFpbl9tYWdpYyk7XG4mIzQzO1x0XHRyZXR1cm4gLUVJTlZBTDtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdHN1Yl9tYWdpYyA9IGxlMzJfdG9fY3B1KGhkci1cdTAwM2VzdWJfbWFnaWMpO1xuJiM0MztcdGlmIChzdWJfbWFnaWMgIT0gRldfU1VCX01BR0lDXzgyNjFDKSB7XG4mIzQzO1x0XHRwaHlkZXZfZXJyKHBoeWRldiwgXCYjMzQ7SW52YWxpZCBzdWIgbWFnaWM6IDB4JTA4eFxcblwmIzM0Oywgc3ViX21hZ2ljKTtcbiYjNDM7XHRcdHJldHVybiAtRUlOVkFMO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0bnVtX2VudHJpZXMgPSBsZTE2X3RvX2NwdShoZHItXHUwMDNlbnVtX2VudHJpZXMpO1xuJiM0MztcdGRhdGFfbGVuID0gbnVtX2VudHJpZXMgKiBGV19FTlRSWV9TSVpFO1xuJiM0MztcbiYjNDM7XHRpZiAoZnctXHUwMDNlc2l6ZSAhPSBzaXplb2YoKmhkcikgJiM0MzsgZGF0YV9sZW4pIHtcbiYjNDM7XHRcdHBoeWRldl9lcnIocGh5ZGV2LCBcJiMzNDtGaXJtd2FyZSBzaXplIG1pc21hdGNoXFxuXCYjMzQ7KTtcbiYjNDM7XHRcdHJldHVybiAtRUlOVkFMO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0Y2FsY19jcmMgPSBjcmMzMih+MCwgZnctXHUwMDNlZGF0YSAmIzQzOyBGV19IRUFERVJfU0laRSwgZGF0YV9sZW4pIF4gfjA7XG4mIzQzO1x0ZmlsZV9jcmMgPSBsZTMyX3RvX2NwdShoZHItXHUwMDNlY3JjMzIpO1xuJiM0MztcbiYjNDM7XHRpZiAoY2FsY19jcmMgIT0gZmlsZV9jcmMpIHtcbiYjNDM7XHRcdHBoeWRldl9lcnIocGh5ZGV2LCBcJiMzNDtDUkMzMiBtaXNtYXRjaDogY2FsY3VsYXRlZD0weCUwOHggZmlsZT0weCUwOHhcXG5cJiMzNDssXG4mIzQzO1x0XHRcdCAgIGNhbGNfY3JjLCBmaWxlX2NyYyk7XG4mIzQzO1x0XHRyZXR1cm4gLUVJTlZBTDtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdHJldHVybiAwO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW50IHJ0bDgyNjF4X2Z3X2V4ZWN1dGVfZW50cnkoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldixcbiYjNDM7XHRcdFx0XHQgICAgIGNvbnN0IHN0cnVjdCBydGw4MjYxeF9md19lbnRyeSAqZW50cnkpXG4mIzQzO3tcbiYjNDM7XHR1MTYgYWRkciwgdmFsdWUsIHRpbWVvdXRfbXM7XG4mIzQzO1x0dTggZGV2LCBtc2IsIGxzYiwgcG9sbF9zZXQ7XG4mIzQzO1x0dTMyIGJpdHMsIGV4cGVjdF92YWw7XG4mIzQzO1x0aW50IHJldCwgdmFsO1xuJiM0MztcbiYjNDM7XHRkZXYgPSBlbnRyeS1cdTAwM2VkZXY7XG4mIzQzO1x0YWRkciA9IGxlMTZfdG9fY3B1KGVudHJ5LVx1MDAzZWFkZHIpO1xuJiM0MztcdG1zYiA9IGVudHJ5LVx1MDAzZW1zYjtcbiYjNDM7XHRsc2IgPSBlbnRyeS1cdTAwM2Vsc2I7XG4mIzQzO1x0dmFsdWUgPSBsZTE2X3RvX2NwdShlbnRyeS1cdTAwM2V2YWx1ZSk7XG4mIzQzO1x0dGltZW91dF9tcyA9IGxlMTZfdG9fY3B1KGVudHJ5LVx1MDAzZXRpbWVvdXRfbXMpO1xuJiM0MztcdHBvbGxfc2V0ID0gZW50cnktXHUwMDNlcG9sbF9zZXQ7XG4mIzQzO1xuJiM0MztcdGlmICh0aW1lb3V0X21zID09IDApXG4mIzQzO1x0XHR0aW1lb3V0X21zID0gUlRMODI2MVhfUE9MTF9USU1FT1VUX01TO1xuJiM0MztcbiYjNDM7XHRpZiAoZGV2IFx1MDAzZSBSVEw4MjYxWF9NQVhfTU1EX0RFVikge1xuJiM0MztcdFx0cGh5ZGV2X2VycihwaHlkZXYsIFwmIzM0O2ludmFsaWQgZmlybXdhcmUgTU1EIGRldmljZTogZGV2PSV1XFxuXCYjMzQ7LCBkZXYpO1xuJiM0MztcdFx0cmV0dXJuIC1FSU5WQUw7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRpZiAobXNiIFx1MDAzZSAxNSB8fCBsc2IgXHUwMDNlIG1zYikge1xuJiM0MztcdFx0cGh5ZGV2X2VycihwaHlkZXYsIFwmIzM0O2ludmFsaWQgZmlybXdhcmUgYml0czogbXNiPSV1LCBsc2I9JXVcXG5cJiMzNDssIG1zYiwgbHNiKTtcbiYjNDM7XHRcdHJldHVybiAtRUlOVkFMO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0c3dpdGNoIChlbnRyeS1cdTAwM2V0eXBlKSB7XG4mIzQzO1x0Y2FzZSBPUF9XUklURTpcbiYjNDM7XHRcdHJldCA9IHBoeV9tb2RpZnlfbW1kKHBoeWRldiwgZGV2LCBhZGRyLFxuJiM0MztcdFx0XHRcdCAgICAgR0VOTUFTSyhtc2IsIGxzYiksICh2YWx1ZSBcdTAwM2NcdTAwM2MgbHNiKSBcdTAwMjYgR0VOTUFTSyhtc2IsIGxzYikpO1xuJiM0MztcdFx0aWYgKHJldClcbiYjNDM7XHRcdFx0cmV0dXJuIHJldDtcbiYjNDM7XHRcdGJyZWFrO1xuJiM0MztcbiYjNDM7XHRjYXNlIE9QX1BPTEw6XG4mIzQzO1x0XHRiaXRzID0gR0VOTUFTSyhtc2IsIGxzYik7XG4mIzQzO1x0XHRleHBlY3RfdmFsID0gKHZhbHVlIFx1MDAzY1x1MDAzYyBsc2IpIFx1MDAyNiBiaXRzO1xuJiM0MztcbiYjNDM7XHRcdGlmIChwb2xsX3NldClcbiYjNDM7XHRcdFx0cmV0ID0gcGh5X3JlYWRfbW1kX3BvbGxfdGltZW91dChwaHlkZXYsIGRldiwgYWRkciwgdmFsLFxuJiM0MztcdFx0XHRcdFx0XHRcdCh2YWwgXHUwMDI2IGJpdHMpID09IGV4cGVjdF92YWwsXG4mIzQzO1x0XHRcdFx0XHRcdFx0MTAwMCwgdGltZW91dF9tcyAqIDEwMDAsIGZhbHNlKTtcbiYjNDM7XHRcdGVsc2VcbiYjNDM7XHRcdFx0cmV0ID0gcGh5X3JlYWRfbW1kX3BvbGxfdGltZW91dChwaHlkZXYsIGRldiwgYWRkciwgdmFsLFxuJiM0MztcdFx0XHRcdFx0XHRcdCh2YWwgXHUwMDI2IGJpdHMpICE9IGV4cGVjdF92YWwsXG4mIzQzO1x0XHRcdFx0XHRcdFx0MTAwMCwgdGltZW91dF9tcyAqIDEwMDAsIGZhbHNlKTtcbiYjNDM7XHRcdGlmIChyZXQpXG4mIzQzO1x0XHRcdHJldHVybiByZXQ7XG4mIzQzO1x0XHRicmVhaztcbiYjNDM7XG4mIzQzO1x0ZGVmYXVsdDpcbiYjNDM7XHRcdHJldHVybiAtRUlOVkFMO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0cmV0dXJuIDA7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBpbnQgcnRsODI2MXhfZndfbG9hZChzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IHJ0bDgyNjF4X3ByaXYgKnByaXYgPSBwaHlkZXYtXHUwMDNlcHJpdjtcbiYjNDM7XHRjb25zdCBzdHJ1Y3QgcnRsODI2MXhfZndfZW50cnkgKmVudHJ5O1xuJiM0MztcdGNvbnN0IHN0cnVjdCBydGw4MjYxeF9md19oZWFkZXIgKmhkcjtcbiYjNDM7XHRjb25zdCBzdHJ1Y3QgZmlybXdhcmUgKmZ3O1xuJiM0MztcdGludCByZXQsIGk7XG4mIzQzO1xuJiM0MztcdGlmICghcHJpdi1cdTAwM2Vmd19uYW1lKVxuJiM0MztcdFx0cmV0dXJuIDA7XG4mIzQzO1xuJiM0MztcdHJldCA9IHJlcXVlc3RfZmlybXdhcmUoXHUwMDI2ZncsIHByaXYtXHUwMDNlZndfbmFtZSwgXHUwMDI2cGh5ZGV2LVx1MDAzZW1kaW8uZGV2KTtcbiYjNDM7XHRpZiAocmV0KSB7XG4mIzQzO1x0XHRwaHlkZXZfZXJyKHBoeWRldiwgXCYjMzQ7RmFpbGVkIHRvIGxvYWQgZmlybXdhcmUgJXM6ICVkXFxuXCYjMzQ7LCBwcml2LVx1MDAzZWZ3X25hbWUsIHJldCk7XG4mIzQzO1x0XHRyZXR1cm4gcmV0O1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0cmV0ID0gcnRsODI2MXhfdmVyaWZ5X2Zpcm13YXJlKHBoeWRldiwgZncpO1xuJiM0MztcdGlmIChyZXQpXG4mIzQzO1x0XHRnb3RvIHJlbGVhc2VfZnc7XG4mIzQzO1xuJiM0MztcdGhkciA9IChjb25zdCBzdHJ1Y3QgcnRsODI2MXhfZndfaGVhZGVyICopZnctXHUwMDNlZGF0YTtcbiYjNDM7XG4mIzQzO1x0ZW50cnkgPSAoY29uc3Qgc3RydWN0IHJ0bDgyNjF4X2Z3X2VudHJ5ICopKGZ3LVx1MDAzZWRhdGEgJiM0MzsgRldfSEVBREVSX1NJWkUpO1xuJiM0MztcdGZvciAoaSA9IDA7IGkgXHUwMDNjIGxlMTZfdG9fY3B1KGhkci1cdTAwM2VudW1fZW50cmllcyk7IGkmIzQzOyYjNDM7LCBlbnRyeSYjNDM7JiM0MzspIHtcbiYjNDM7XHRcdHJldCA9IHJ0bDgyNjF4X2Z3X2V4ZWN1dGVfZW50cnkocGh5ZGV2LCBlbnRyeSk7XG4mIzQzO1x0XHRpZiAocmV0KSB7XG4mIzQzO1x0XHRcdHBoeWRldl9lcnIocGh5ZGV2LCBcJiMzNDtFbnRyeSAlZCBmYWlsZWQ6ICVkXFxuXCYjMzQ7LCBpLCByZXQpO1xuJiM0MztcdFx0XHRnb3RvIHJlbGVhc2VfZnc7XG4mIzQzO1x0XHR9XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRwcml2LVx1MDAzZWZ3X2xvYWRlZCA9IHRydWU7XG4mIzQzO1xuJiM0MztyZWxlYXNlX2Z3OlxuJiM0MztcdHJlbGVhc2VfZmlybXdhcmUoZncpO1xuJiM0MztcdHJldHVybiByZXQ7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBpbnQgcnRsODI2MXhfY29uZmlnX2ludHIoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcbiYjNDM7e1xuJiM0MztcdGludCByZXQ7XG4mIzQzO1xuJiM0MztcdGlmIChwaHlkZXYtXHUwMDNlaW50ZXJydXB0cyA9PSBQSFlfSU5URVJSVVBUX0VOQUJMRUQpIHtcbiYjNDM7XHRcdHJldCA9IHBoeV9yZWFkX21tZChwaHlkZXYsIE1ESU9fTU1EX1ZFTkQyLCBSVEw4MjIxQl9WTkQyX0lOU1IpO1xuJiM0MztcdFx0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdFx0cmV0dXJuIHJldDtcbiYjNDM7XG4mIzQzO1x0XHRyZXQgPSBwaHlfd3JpdGVfbW1kKHBoeWRldiwgTURJT19NTURfVkVORDIsIFJUTDgyMjFCX1ZORDJfSU5FUixcbiYjNDM7XHRcdFx0XHQgICAgUlRMODI2MVhfSU5UX01BU0tfREVGQVVMVCk7XG4mIzQzO1x0XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0XHRyZXR1cm4gcmV0O1xuJiM0MztcdH0gZWxzZSB7XG4mIzQzO1x0XHRyZXQgPSBwaHlfd3JpdGVfbW1kKHBoeWRldiwgTURJT19NTURfVkVORDIsIFJUTDgyMjFCX1ZORDJfSU5FUiwgMCk7XG4mIzQzO1x0XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0XHRyZXR1cm4gcmV0O1xuJiM0MztcbiYjNDM7XHRcdHJldCA9IHBoeV9yZWFkX21tZChwaHlkZXYsIE1ESU9fTU1EX1ZFTkQyLCBSVEw4MjIxQl9WTkQyX0lOU1IpO1xuJiM0MztcdFx0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdFx0cmV0dXJuIHJldDtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdHJldHVybiAwO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaXJxcmV0dXJuX3QgcnRsODI2MXhfaGFuZGxlX2ludGVycnVwdChzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxuJiM0Mzt7XG4mIzQzO1x0aW50IGlycV9zdGF0dXM7XG4mIzQzO1xuJiM0MztcdGlycV9zdGF0dXMgPSBwaHlfcmVhZF9tbWQocGh5ZGV2LCBNRElPX01NRF9WRU5EMiwgUlRMODIyMUJfVk5EMl9JTlNSKTtcbiYjNDM7XHRpZiAoaXJxX3N0YXR1cyBcdTAwM2MgMCkge1xuJiM0MztcdFx0cGh5X2Vycm9yKHBoeWRldik7XG4mIzQzO1x0XHRyZXR1cm4gSVJRX05PTkU7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRpZiAoIShpcnFfc3RhdHVzIFx1MDAyNiBSVEw4MjYxWF9JTlRfTUFTS19BTEwpKVxuJiM0MztcdFx0cmV0dXJuIElSUV9OT05FO1xuJiM0MztcbiYjNDM7XHRpZiAoaXJxX3N0YXR1cyBcdTAwMjYgKFJUTDgyNjFYX0lOVF9MSU5LX0NIRyB8IFJUTDgyNjFYX0lOVF9BVVRPTkVHX0RPTkUgfFxuJiM0MztcdCAgICBSVEw4MjYxWF9JTlRfQVVUT05FR19FUlJPUiB8IFJUTDgyNjFYX0lOVF9KQUJCRVIpKVxuJiM0MztcdFx0cGh5X3RyaWdnZXJfbWFjaGluZShwaHlkZXYpO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gSVJRX0hBTkRMRUQ7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBpbnQgcnRsODI2MXhfY29uZmlnX2FuZWcoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcbiYjNDM7e1xuJiM0MztcdHUxNiBhZHZfMWcgPSAwO1xuJiM0MztcdGludCByZXQ7XG4mIzQzO1xuJiM0MztcdHJldCA9IGdlbnBoeV9jNDVfY29uZmlnX2FuZWcocGh5ZGV2KTtcbiYjNDM7XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0cmV0dXJuIHJldDtcbiYjNDM7XG4mIzQzO1x0aWYgKHBoeWRldi1cdTAwM2VhdXRvbmVnID09IEFVVE9ORUdfRElTQUJMRSlcbiYjNDM7XHRcdHJldHVybiAwO1xuJiM0MztcbiYjNDM7XHRpZiAobGlua21vZGVfdGVzdF9iaXQoRVRIVE9PTF9MSU5LX01PREVfMTAwMGJhc2VUX0Z1bGxfQklULFxuJiM0MztcdFx0XHQgICAgICBwaHlkZXYtXHUwMDNlYWR2ZXJ0aXNpbmcpKVxuJiM0MztcdFx0YWR2XzFnID0gQURWRVJUSVNFXzEwMDBGVUxMO1xuJiM0MztcdGlmIChsaW5rbW9kZV90ZXN0X2JpdChFVEhUT09MX0xJTktfTU9ERV8xMDAwYmFzZVRfSGFsZl9CSVQsXG4mIzQzO1x0XHRcdCAgICAgIHBoeWRldi1cdTAwM2VhZHZlcnRpc2luZykpXG4mIzQzO1x0XHRhZHZfMWcgfD0gQURWRVJUSVNFXzEwMDBIQUxGO1xuJiM0MztcbiYjNDM7XHRyZXQgPSBwaHlfbW9kaWZ5X21tZF9jaGFuZ2VkKHBoeWRldiwgTURJT19NTURfVkVORDIsXG4mIzQzO1x0XHRcdFx0ICAgICBSVEw4MjJYX1ZORDJfQzIyX1JFRyhNSUlfQ1RSTDEwMDApLFxuJiM0MztcdFx0XHRcdCAgICAgQURWRVJUSVNFXzEwMDBGVUxMIHwgQURWRVJUSVNFXzEwMDBIQUxGLFxuJiM0MztcdFx0XHRcdCAgICAgYWR2XzFnKTtcbiYjNDM7XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0cmV0dXJuIHJldDtcbiYjNDM7XHRpZiAocmV0IFx1MDAzZSAwKVxuJiM0MztcdFx0cmV0dXJuIGdlbnBoeV9jNDVfcmVzdGFydF9hbmVnKHBoeWRldik7XG4mIzQzO1xuJiM0MztcdHJldHVybiAwO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW50IHJ0bDgyNjF4X2NvbmZpZ19pbml0KHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgcnRsODI2MXhfcHJpdiAqcHJpdiA9IHBoeWRldi1cdTAwM2Vwcml2O1xuJiM0MztcbiYjNDM7XHQvKiBUaGUgZmlybXdhcmUgcGFyYW1ldGVycyBhcmUgcHJlc2VydmVkIGFjcm9zcyBJRUVFIHNvZnQgcmVzZXRzIGFuZFxuJiM0MztcdCAqIHN1c3BlbmQvcmVzdW1lIGN5Y2xlcy4gUmVsb2FkaW5nIGlzIG9ubHkgbmVjZXNzYXJ5IGFmdGVyIGEgcG93ZXJcbiYjNDM7XHQgKiBjeWNsZSBvciBoYXJkIHJlc2V0LlxuJiM0MztcdCAqL1xuJiM0MztcdGlmIChwcml2LVx1MDAzZWZ3X25hbWUgXHUwMDI2XHUwMDI2ICFwcml2LVx1MDAzZWZ3X2xvYWRlZClcbiYjNDM7XHRcdHJldHVybiBydGw4MjYxeF9md19sb2FkKHBoeWRldik7XG4mIzQzO1xuJiM0MztcdHJldHVybiAwO1xuJiM0Mzt9XG4mIzQzO1xuIHN0YXRpYyBpbnQgcnRsODIxeF9wcm9iZShzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxuIHtcbiBcdHN0cnVjdCBkZXZpY2UgKmRldiA9IFx1MDAyNnBoeWRldi1cdTAwM2VtZGlvLmRldjtcbkBAIC0zMDAxLDYgJiM0MzszMzk0LDE5IEBAIHN0YXRpYyBzdHJ1Y3QgcGh5X2RyaXZlciByZWFsdGVrX2RydnNbXSA9IHtcbiBcdFx0LnJlc3VtZVx0XHQ9IGdlbnBoeV9yZXN1bWUsXG4gXHRcdC5yZWFkX21tZFx0PSBnZW5waHlfcmVhZF9tbWRfdW5zdXBwb3J0ZWQsXG4gXHRcdC53cml0ZV9tbWRcdD0gZ2VucGh5X3dyaXRlX21tZF91bnN1cHBvcnRlZCxcbiYjNDM7XHR9LCB7XG4mIzQzO1x0XHRQSFlfSURfTUFUQ0hfRVhBQ1QoUlRMXzgyNjFDX0NHKSxcbiYjNDM7XHRcdC5uYW1lXHRcdFx0PSBcJiMzNDtSZWFsdGVrIFJUTDgyNjFDIDEwR2JwcyBQSFlcJiMzNDssXG4mIzQzO1x0XHQucHJvYmVcdFx0XHQ9IHJ0bDgyNjF4X3Byb2JlLFxuJiM0MztcdFx0LmNvbmZpZ19pbml0XHRcdD0gcnRsODI2MXhfY29uZmlnX2luaXQsXG4mIzQzO1x0XHQuZ2V0X2ZlYXR1cmVzXHRcdD0gcnRsODI2MXhfZ2V0X2ZlYXR1cmVzLFxuJiM0MztcdFx0LmNvbmZpZ19hbmVnXHRcdD0gcnRsODI2MXhfY29uZmlnX2FuZWcsXG4mIzQzO1x0XHQucmVhZF9zdGF0dXNcdFx0PSBydGw4MjYxeF9yZWFkX3N0YXR1cyxcbiYjNDM7XHRcdC5jb25maWdfaW50clx0XHQ9IHJ0bDgyNjF4X2NvbmZpZ19pbnRyLFxuJiM0MztcdFx0LmhhbmRsZV9pbnRlcnJ1cHRcdD0gcnRsODI2MXhfaGFuZGxlX2ludGVycnVwdCxcbiYjNDM7XHRcdC5zb2Z0X3Jlc2V0XHRcdD0gZ2VucGh5X2M0NV9wbWFfc29mdF9yZXNldCxcbiYjNDM7XHRcdC5zdXNwZW5kXHRcdD0gZ2VucGh5X2M0NV9wbWFfc3VzcGVuZCxcbiYjNDM7XHRcdC5yZXN1bWVcdFx0XHQ9IGdlbnBoeV9jNDVfcG1hX3Jlc3VtZSxcbiBcdH0sXG4gfTtcbiBcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3BoeS5oIGIvaW5jbHVkZS9saW51eC9waHkuaFxuaW5kZXggMTk5YTdhYWEzNDFiZmQuLmQ2YmMxOTkzMWZiODM1IDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9saW51eC9waHkuaFxuJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9saW51eC9waHkuaFxuQEAgLTIzMDksNiAmIzQzOzIzMDksNyBAQCBpbnQgZ2VucGh5X2MzN19yZWFkX3N0YXR1cyhzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2LCBib29sICpjaGFuZ2VkKTtcbiAvKiBDbGF1c2UgNDUgUEhZICovXG4gaW50IGdlbnBoeV9jNDVfcmVzdGFydF9hbmVnKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpO1xuIGludCBnZW5waHlfYzQ1X2NoZWNrX2FuZF9yZXN0YXJ0X2FuZWcoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldiwgYm9vbCByZXN0YXJ0KTtcbiYjNDM7aW50IGdlbnBoeV9jNDVfcG1hX3NvZnRfcmVzZXQoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldik7XG4gaW50IGdlbnBoeV9jNDVfYW5lZ19kb25lKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpO1xuIGludCBnZW5waHlfYzQ1X3JlYWRfbGluayhzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KTtcbiBpbnQgZ2VucGh5X2M0NV9yZWFkX2xwYShzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KTtcbmRpZmYgLS1naXQgYS9pbmNsdWRlL3VhcGkvbGludXgvbWRpby5oIGIvaW5jbHVkZS91YXBpL2xpbnV4L21kaW8uaFxuaW5kZXggYjI1NDFjOTQ4ZmMxZWIuLjA2ZjRiYzNjMjBjNzE3IDEwMDY0NFxuLS0tIGEvaW5jbHVkZS91YXBpL2xpbnV4L21kaW8uaFxuJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS91YXBpL2xpbnV4L21kaW8uaFxuQEAgLTMzMiw4ICYjNDM7MzMyLDEzIEBAXG4gI2RlZmluZSBNRElPX0FOXzEwR0JUX0NUUkxfQURWMl81R1x0MHgwMDgwXHQvKiBBZHZlcnRpc2UgMi41R0JBU0UtVCAqL1xuICNkZWZpbmUgTURJT19BTl8xMEdCVF9DVFJMX0FEVjVHXHQweDAxMDBcdC8qIEFkdmVydGlzZSA1R0JBU0UtVCAqL1xuICNkZWZpbmUgTURJT19BTl8xMEdCVF9DVFJMX0FEVjEwR1x0MHgxMDAwXHQvKiBBZHZlcnRpc2UgMTBHQkFTRS1UICovXG4mIzQzOyNkZWZpbmUgTURJT19BTl8xMEdCVF9DVFJMX01TX0VOQUJMRVx0MHg4MDAwXHQvKiBNYXN0ZXIvc2xhdmUgbWFudWFsIGNvbmZpZyBlbmFibGUgKi9cbiYjNDM7I2RlZmluZSBNRElPX0FOXzEwR0JUX0NUUkxfTVNfVkFMVUVcdDB4NDAwMFx0LyogTWFzdGVyL3NsYXZlIGNvbmZpZyB2YWx1ZSAoMT1NYXN0ZXIpICovXG4mIzQzOyNkZWZpbmUgTURJT19BTl8xMEdCVF9DVFJMX01TX1BPUlRfVFlQRVx0MHgyMDAwXHQvKiBNYXN0ZXIgUHJlZmVycmVkIFR5cGUgKi9cbiBcbiAvKiBBTiAxMEdCQVNFLVQgc3RhdHVzIHJlZ2lzdGVyLiAqL1xuJiM0MzsjZGVmaW5lIE1ESU9fQU5fMTBHQlRfU1RBVF9NU19GQVVMVFx0MHg4MDAwXHQvKiBNYXN0ZXIvc2xhdmUgZmF1bHQgKi9cbiYjNDM7I2RlZmluZSBNRElPX0FOXzEwR0JUX1NUQVRfTVNfUkVTXHQweDQwMDBcdC8qIE1hc3Rlci9zbGF2ZSByZXNvbHV0aW9uICgxPU1hc3RlcikgKi9cbiAjZGVmaW5lIE1ESU9fQU5fMTBHQlRfU1RBVF9MUDJfNUdcdDB4MDAyMCAgLyogTFAgaXMgMi41R0JUIGNhcGFibGUgKi9cbiAjZGVmaW5lIE1ESU9fQU5fMTBHQlRfU1RBVF9MUDVHXHRcdDB4MDA0MCAgLyogTFAgaXMgNUdCVCBjYXBhYmxlICovXG4gI2RlZmluZSBNRElPX0FOXzEwR0JUX1NUQVRfTFBUUlJcdDB4MDIwMFx0LyogTFAgdHJhaW5pbmcgcmVzZXQgcmVxLiAqL1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAzIDA3OjM1PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjRtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1JFQUxURUtfUEhZJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7cnRsODI2MXhfcHJvYmUmIzM0OywKICAgICYjMzQ7cnRsODI2MXhfZ2V0X2ZlYXR1cmVzJiMzNDssCiAgICAmIzM0O3J0bDgyNjF4X3JlYWRfc3RhdHVzJiMzNDssCiAgICAmIzM0O3J0bDgyNjF4X3ZlcmlmeV9maXJtd2FyZSYjMzQ7LAogICAgJiMzNDtydGw4MjYxeF9md19leGVjdXRlX2VudHJ5JiMzNDssCiAgICAmIzM0O3J0bDgyNjF4X2Z3X2xvYWQmIzM0OywKICAgICYjMzQ7cnRsODI2MXhfY29uZmlnX2ludHImIzM0OywKICAgICYjMzQ7cnRsODI2MXhfaGFuZGxlX2ludGVycnVwdCYjMzQ7LAogICAgJiMzNDtydGw4MjYxeF9jb25maWdfYW5lZyYjMzQ7LAogICAgJiMzNDtydGw4MjYxeF9jb25maWdfaW5pdCYjMzQ7LAogICAgJiMzNDtnZW5waHlfYzQ1X3BtYV9zb2Z0X3Jlc2V0JiMzNDssCiAgICAmIzM0O2dlbnBoeV9jNDVfYW5fc2V0dXBfbWFzdGVyX3NsYXZlJiMzNDssCiAgICAmIzM0O2dlbnBoeV9jNDVfcmVhZF9tYXN0ZXJfc2xhdmUmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcyBzdXBwb3J0IGZvciB0aGUgUmVhbHRlayBSVEw4MjYxQyAxMEdicHMgUEhZLCBpbmNsdWRpbmcgZmlybXdhcmUgbG9hZGluZyBhbmQgcGFyc2luZywgYW5kIG5ldyBDbGF1c2UgNDUgbWFzdGVyL3NsYXZlIGNvbmZpZ3VyYXRpb24gZnVuY3Rpb25zLiBUaGlzIGNvZGUgaXMgcmVhY2hhYmxlIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBieSBlbXVsYXRpbmcgYSBVU0IgbmV0d29yayBhZGFwdGVyIHRoYXQgcmVnaXN0ZXJzIGFuIE1ESU8gYnVzIGFuZCByZXNwb25kcyB3aXRoIHRoZSBSVEw4MjYxQyBQSFkgSUQuIFRoZSBmaXJtd2FyZSBwYXJzaW5nIGxvZ2ljIGlzIHBhcnRpY3VsYXJseSBpbnRlcmVzdGluZyBmb3IgZnV6emluZyBhcyBpdCBwcm9jZXNzZXMgZXh0ZXJuYWwgZGF0YS4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLApldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgoyLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS4KICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgogICBEbyBub3QgbGlzdCB0b28gZ2VuZXJpYyBjb25maWdzICh3ZSBhbHJlYWR5IGhhdmUgdGhlbSBlbmFibGVkKS4gT25seSBsaXN0IHRob3NlIHRoYXQKICAgc3BlY2lmaWNhbGx5IGNvdmVyIHRoZSBtb2RpZmllZCBjb2RlLiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3Mgb3V0cHV0IGFycmF5LAogICBhbmQgRE8gTk9UIGFkZCBhICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgMDYxZDNmNzMxNGQ0ZjJiMDI2ZWE1MTBiZjgxMWFlZjJiNWE3OWZlZQpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBGcmkgSnVsIDMgMDc6MzU6MDQgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9waHkvcGh5LWM0NS5jIGIvZHJpdmVycy9uZXQvcGh5L3BoeS1jNDUuYwppbmRleCAxMjY5NTE3NDE0Mjg4Zi4uODcwOTIwMzExZjlhMDEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3BoeS9waHktYzQ1LmMKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvcGh5L3BoeS1jNDUuYwpAQCAtMzg0LDYgJiM0MzszODQsMTE5IEBAIGludCBnZW5waHlfYzQ1X2NoZWNrX2FuZF9yZXN0YXJ0X2FuZWcoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldiwgYm9vbCByZXN0YXJ0KQogfQogRVhQT1JUX1NZTUJPTF9HUEwoZ2VucGh5X2M0NV9jaGVja19hbmRfcmVzdGFydF9hbmVnKTsKIAomIzQzOy8qKgomIzQzOyAqIGdlbnBoeV9jNDVfcG1hX3NvZnRfcmVzZXQgLSBzb2Z0d2FyZSByZXNldCB0aGUgUEhZIHZpYSBDbGF1c2UgNDUgUE1BL1BNRCBjb250cm9sIHJlZ2lzdGVyCiYjNDM7ICogQHBoeWRldjogdGFyZ2V0IHBoeV9kZXZpY2Ugc3RydWN0CiYjNDM7ICoKJiM0MzsgKiBSZXR1cm46IDAgb24gc3VjY2VzcywgbmVnYXRpdmUgZXJybm8gb24gZmFpbHVyZS4KJiM0MzsgKi8KJiM0MztpbnQgZ2VucGh5X2M0NV9wbWFfc29mdF9yZXNldChzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KQomIzQzO3sKJiM0MzsJaW50IHJldCwgdmFsOwomIzQzOwomIzQzOwlyZXQgPSBwaHlfc2V0X2JpdHNfbW1kKHBoeWRldiwgTURJT19NTURfUE1BUE1ELCBNRElPX0NUUkwxLAomIzQzOwkJCSAgICAgICBNRElPX0NUUkwxX1JFU0VUKTsKJiM0MzsJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQlyZXR1cm4gcmV0OwomIzQzOwomIzQzOwlyZXR1cm4gcGh5X3JlYWRfbW1kX3BvbGxfdGltZW91dChwaHlkZXYsIE1ESU9fTU1EX1BNQVBNRCwKJiM0MzsJCQkJCSBNRElPX0NUUkwxLCB2YWwsCiYjNDM7CQkJCQkgISh2YWwgJmFtcDsgTURJT19DVFJMMV9SRVNFVCksCiYjNDM7CQkJCQkgNTAwMCwgNjAwMDAwLCB0cnVlKTsKJiM0Mzt9CiYjNDM7RVhQT1JUX1NZTUJPTF9HUEwoZ2VucGh5X2M0NV9wbWFfc29mdF9yZXNldCk7CiYjNDM7CiYjNDM7LyoqCiYjNDM7ICogZ2VucGh5X2M0NV9hbl9zZXR1cF9tYXN0ZXJfc2xhdmUgLSBDb25maWd1cmUgTWFzdGVyL1NsYXZlIHNldHRpbmcgZm9yIEM0NSBQSFlzCiYjNDM7ICogQHBoeWRldjogdGFyZ2V0IHBoeV9kZXZpY2Ugc3RydWN0CiYjNDM7ICoKJiM0MzsgKiBEZXNjcmlwdGlvbjogQ29uZmlndXJlIHRoZSBmb3JjZWQgb3IgcHJlZmVycmVkIE1hc3Rlci9TbGF2ZSByb2xlCiYjNDM7ICogMTBHQkFTRS1UIGNvbnRyb2wgcmVnaXN0ZXIgKE1NRCA3LCBSZWdpc3RlciAweDAwMjApIGFjY29yZGluZyB0bwomIzQzOyAqIElFRUUgODAyLjMgc3RhbmRhcmRzLgomIzQzOyAqCiYjNDM7ICogUmV0dXJuOiBuZWdhdGl2ZSBlcnJubyBjb2RlIG9uIGZhaWx1cmUsIDAgaWYgTWFzdGVyL1NsYXZlIGRpZG4mIzM5O3QgY2hhbmdlLAomIzQzOyAqIG9yIDEgaWYgTWFzdGVyL1NsYXZlIG1vZGVzIGNoYW5nZWQuCiYjNDM7ICovCiYjNDM7c3RhdGljIGludCBnZW5waHlfYzQ1X2FuX3NldHVwX21hc3Rlcl9zbGF2ZShzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KQomIzQzO3sKJiM0MzsJdTE2IGN0bCA9IDA7CiYjNDM7CiYjNDM7CXN3aXRjaCAocGh5ZGV2LSZndDttYXN0ZXJfc2xhdmVfc2V0KSB7CiYjNDM7CWNhc2UgTUFTVEVSX1NMQVZFX0NGR19NQVNURVJfUFJFRkVSUkVEOgomIzQzOwkJY3RsID0gTURJT19BTl8xMEdCVF9DVFJMX01TX1BPUlRfVFlQRTsKJiM0MzsJCWJyZWFrOwomIzQzOwljYXNlIE1BU1RFUl9TTEFWRV9DRkdfU0xBVkVfUFJFRkVSUkVEOgomIzQzOwkJYnJlYWs7CiYjNDM7CWNhc2UgTUFTVEVSX1NMQVZFX0NGR19NQVNURVJfRk9SQ0U6CiYjNDM7CQljdGwgPSBNRElPX0FOXzEwR0JUX0NUUkxfTVNfRU5BQkxFIHwgTURJT19BTl8xMEdCVF9DVFJMX01TX1ZBTFVFOwomIzQzOwkJYnJlYWs7CiYjNDM7CWNhc2UgTUFTVEVSX1NMQVZFX0NGR19TTEFWRV9GT1JDRToKJiM0MzsJCWN0bCA9IE1ESU9fQU5fMTBHQlRfQ1RSTF9NU19FTkFCTEU7CiYjNDM7CQlicmVhazsKJiM0MzsJY2FzZSBNQVNURVJfU0xBVkVfQ0ZHX1VOS05PV046CiYjNDM7CWNhc2UgTUFTVEVSX1NMQVZFX0NGR19VTlNVUFBPUlRFRDoKJiM0MzsJCXJldHVybiAwOwomIzQzOwlkZWZhdWx0OgomIzQzOwkJcGh5ZGV2X3dhcm4ocGh5ZGV2LCAmIzM0O1Vuc3VwcG9ydGVkIE1hc3Rlci9TbGF2ZSBtb2RlXG4mIzM0Oyk7CiYjNDM7CQlyZXR1cm4gLUVPUE5PVFNVUFA7CiYjNDM7CX0KJiM0MzsKJiM0MzsJcmV0dXJuIHBoeV9tb2RpZnlfbW1kX2NoYW5nZWQocGh5ZGV2LCBNRElPX01NRF9BTiwgTURJT19BTl8xMEdCVF9DVFJMLAomIzQzOwkJCQkgICAgICBNRElPX0FOXzEwR0JUX0NUUkxfTVNfRU5BQkxFIHwKJiM0MzsJCQkJICAgICAgTURJT19BTl8xMEdCVF9DVFJMX01TX1ZBTFVFIHwKJiM0MzsJCQkJICAgICAgTURJT19BTl8xMEdCVF9DVFJMX01TX1BPUlRfVFlQRSwgY3RsKTsKJiM0Mzt9CiYjNDM7CiYjNDM7LyoqCiYjNDM7ICogZ2VucGh5X2M0NV9yZWFkX21hc3Rlcl9zbGF2ZSAtIHJlYWQgbWFzdGVyL3NsYXZlIHN0YXR1cwomIzQzOyAqIEBwaHlkZXY6IHRhcmdldCBwaHlfZGV2aWNlIHN0cnVjdAomIzQzOyAqCiYjNDM7ICogRGVzY3JpcHRpb246IFJlYWQgdGhlIE1hc3Rlci9TbGF2ZSBjb25maWd1cmF0aW9uIGFuZCBzdGF0dXMKJiM0MzsgKiBmcm9tIDEwR0JBU0UtVCBjb250cm9sL3N0YXR1cyByZWdpc3RlcnMgKE1NRCA3LCBSZWcgMHgwMDIwIGFuZCAweDAwMjEpLgomIzQzOyAqCiYjNDM7ICogUmV0dXJuOiAwIG9uIHN1Y2Nlc3MsIG9yIGEgbmVnYXRpdmUgZXJyb3IgY29kZSBvbiBmYWlsdXJlLgomIzQzOyAqLwomIzQzO3N0YXRpYyBpbnQgZ2VucGh5X2M0NV9yZWFkX21hc3Rlcl9zbGF2ZShzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KQomIzQzO3sKJiM0MzsJaW50IHZhbDsKJiM0MzsKJiM0MzsJcGh5ZGV2LSZndDttYXN0ZXJfc2xhdmVfZ2V0ID0gTUFTVEVSX1NMQVZFX0NGR19VTktOT1dOOwomIzQzOwlwaHlkZXYtJmd0O21hc3Rlcl9zbGF2ZV9zdGF0ZSA9IE1BU1RFUl9TTEFWRV9TVEFURV9VTktOT1dOOwomIzQzOwomIzQzOwl2YWwgPSBwaHlfcmVhZF9tbWQocGh5ZGV2LCBNRElPX01NRF9BTiwgTURJT19BTl8xMEdCVF9DVFJMKTsKJiM0MzsJaWYgKHZhbCAmbHQ7IDApCiYjNDM7CQlyZXR1cm4gdmFsOwomIzQzOwomIzQzOwlpZiAodmFsICZhbXA7IE1ESU9fQU5fMTBHQlRfQ1RSTF9NU19FTkFCTEUpIHsKJiM0MzsJCWlmICh2YWwgJmFtcDsgTURJT19BTl8xMEdCVF9DVFJMX01TX1ZBTFVFKQomIzQzOwkJCXBoeWRldi0mZ3Q7bWFzdGVyX3NsYXZlX2dldCA9IE1BU1RFUl9TTEFWRV9DRkdfTUFTVEVSX0ZPUkNFOwomIzQzOwkJZWxzZQomIzQzOwkJCXBoeWRldi0mZ3Q7bWFzdGVyX3NsYXZlX2dldCA9IE1BU1RFUl9TTEFWRV9DRkdfU0xBVkVfRk9SQ0U7CiYjNDM7CX0gZWxzZSB7CiYjNDM7CQlpZiAodmFsICZhbXA7IE1ESU9fQU5fMTBHQlRfQ1RSTF9NU19QT1JUX1RZUEUpCiYjNDM7CQkJcGh5ZGV2LSZndDttYXN0ZXJfc2xhdmVfZ2V0ID0gTUFTVEVSX1NMQVZFX0NGR19NQVNURVJfUFJFRkVSUkVEOwomIzQzOwkJZWxzZQomIzQzOwkJCXBoeWRldi0mZ3Q7bWFzdGVyX3NsYXZlX2dldCA9IE1BU1RFUl9TTEFWRV9DRkdfU0xBVkVfUFJFRkVSUkVEOwomIzQzOwl9CiYjNDM7CiYjNDM7CXZhbCA9IHBoeV9yZWFkX21tZChwaHlkZXYsIE1ESU9fTU1EX0FOLCBNRElPX0FOXzEwR0JUX1NUQVQpOwomIzQzOwlpZiAodmFsICZsdDsgMCkKJiM0MzsJCXJldHVybiB2YWw7CiYjNDM7CiYjNDM7CWlmICh2YWwgJmFtcDsgTURJT19BTl8xMEdCVF9TVEFUX01TX0ZBVUxUKSB7CiYjNDM7CQlwaHlkZXYtJmd0O21hc3Rlcl9zbGF2ZV9zdGF0ZSA9IE1BU1RFUl9TTEFWRV9TVEFURV9FUlI7CiYjNDM7CX0gZWxzZSBpZiAocGh5ZGV2LSZndDtsaW5rKSB7CiYjNDM7CQlpZiAodmFsICZhbXA7IE1ESU9fQU5fMTBHQlRfU1RBVF9NU19SRVMpCiYjNDM7CQkJcGh5ZGV2LSZndDttYXN0ZXJfc2xhdmVfc3RhdGUgPSBNQVNURVJfU0xBVkVfU1RBVEVfTUFTVEVSOwomIzQzOwkJZWxzZQomIzQzOwkJCXBoeWRldi0mZ3Q7bWFzdGVyX3NsYXZlX3N0YXRlID0gTUFTVEVSX1NMQVZFX1NUQVRFX1NMQVZFOwomIzQzOwl9IGVsc2UgewomIzQzOwkJcGh5ZGV2LSZndDttYXN0ZXJfc2xhdmVfc3RhdGUgPSBNQVNURVJfU0xBVkVfU1RBVEVfVU5LTk9XTjsKJiM0MzsJfQomIzQzOwomIzQzOwlyZXR1cm4gMDsKJiM0Mzt9CiYjNDM7CiAvKioKICAqIGdlbnBoeV9jNDVfYW5lZ19kb25lIC0gcmV0dXJuIGF1dG8tbmVnb3RpYXRpb24gY29tcGxldGUgc3RhdHVzCiAgKiBAcGh5ZGV2OiB0YXJnZXQgcGh5X2RldmljZSBzdHJ1Y3QKQEAgLTExOTIsNiAmIzQzOzEzMDUsMTAgQEAgaW50IGdlbnBoeV9jNDVfcmVhZF9zdGF0dXMoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldikKIAkJCXJldCA9IGdlbnBoeV9jNDVfYmFzZXQxX3JlYWRfc3RhdHVzKHBoeWRldik7CiAJCQlpZiAocmV0ICZsdDsgMCkKIAkJCQlyZXR1cm4gcmV0OwomIzQzOwkJfSBlbHNlIHsKJiM0MzsJCQlyZXQgPSBnZW5waHlfYzQ1X3JlYWRfbWFzdGVyX3NsYXZlKHBoeWRldik7CiYjNDM7CQkJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQkJCXJldHVybiByZXQ7CiAJCX0KIAogCQlwaHlfcmVzb2x2ZV9hbmVnX2xpbmttb2RlKHBoeWRldik7CkBAIC0xMjI1LDYgJiM0MzsxMzQyLDE0IEBAIGludCBnZW5waHlfYzQ1X2NvbmZpZ19hbmVnKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpCiAJaWYgKHJldCAmZ3Q7IDApCiAJCWNoYW5nZWQgPSB0cnVlOwogCiYjNDM7CWlmICghZ2VucGh5X2M0NV9iYXNldDFfYWJsZShwaHlkZXYpKSB7CiYjNDM7CQlyZXQgPSBnZW5waHlfYzQ1X2FuX3NldHVwX21hc3Rlcl9zbGF2ZShwaHlkZXYpOwomIzQzOwkJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQkJcmV0dXJuIHJldDsKJiM0MzsJCWlmIChyZXQgJmd0OyAwKQomIzQzOwkJCWNoYW5nZWQgPSB0cnVlOwomIzQzOwl9CiYjNDM7CiAJcmV0dXJuIGdlbnBoeV9jNDVfY2hlY2tfYW5kX3Jlc3RhcnRfYW5lZyhwaHlkZXYsIGNoYW5nZWQpOwogfQogRVhQT1JUX1NZTUJPTF9HUEwoZ2VucGh5X2M0NV9jb25maWdfYW5lZyk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9waHkvcmVhbHRlay9yZWFsdGVrX21haW4uYyBiL2RyaXZlcnMvbmV0L3BoeS9yZWFsdGVrL3JlYWx0ZWtfbWFpbi5jCmluZGV4IDI3MjY4ODExZjU2NGYyLi42OGEyZGUwYjJiZDNiYSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvcGh5L3JlYWx0ZWsvcmVhbHRla19tYWluLmMKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvcGh5L3JlYWx0ZWsvcmVhbHRla19tYWluLmMKQEAgLTgsNyAmIzQzOzgsOSBAQAogICogQ29weXJpZ2h0IChjKSAyMDA0IEZyZWVzY2FsZSBTZW1pY29uZHVjdG9yLCBJbmMuCiAgKi8KICNpbmNsdWRlICZsdDtsaW51eC9iaXRvcHMuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvY3JjMzIuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9ldGh0b29sX25ldGxpbmsuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvZmlybXdhcmUuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9vZi5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L3BoeS5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L3BtX3dha2VpcnEuaCZndDsKQEAgLTE0MSw2ICYjNDM7MTQzLDEwIEBACiAjZGVmaW5lIFJUTDgyMTFGX1BIWVNJQ0FMX0FERFJfV09SRDEJCTE3CiAjZGVmaW5lIFJUTDgyMTFGX1BIWVNJQ0FMX0FERFJfV09SRDIJCTE4CiAKJiM0MzsjZGVmaW5lIFJUTDgyNjFYX0VYVF9BRERSX1JFRwkJCTB4YTQzNgomIzQzOyNkZWZpbmUgUlRMODI2MVhfRVhUX0RBVEFfUkVHCQkJMHhhNDM4CiYjNDM7I2RlZmluZSBSVExfODI2MVhfU1VCX1BIWV9JRF9BRERSCQkweDgwMWQKJiM0MzsKICNkZWZpbmUgUlRMODIyWF9WTkQxX1NFUkRFU19PUFRJT04JCQkweDY5N2EKICNkZWZpbmUgUlRMODIyWF9WTkQxX1NFUkRFU19PUFRJT05fTU9ERV9NQVNLCQlHRU5NQVNLKDUsIDApCiAjZGVmaW5lIFJUTDgyMlhfVk5EMV9TRVJERVNfT1BUSU9OX01PREVfMjUwMEJBU0VYX1NHTUlJCQkwCkBAIC0yNTEsNiAmIzQzOzI1Nyw2OSBAQAogI2RlZmluZSBSVExfODIyMUJfVk1fQ0cJCQkJMHgwMDFjYzg0YQogI2RlZmluZSBSVExfODI1MUIJCQkJMHgwMDFjYzg2MgogI2RlZmluZSBSVExfODI2MUMJCQkJMHgwMDFjYzg5MAomIzQzOyNkZWZpbmUgUlRMXzgyNjFDX0NHCQkJCTB4MDAxY2M4OTgKJiM0MzsKJiM0MzsjZGVmaW5lIFJUTDgyNjFDX0NFX01PREVMCQkweDAwCiYjNDM7I2RlZmluZSBSVEw4MjYxWF9JTlRfQVVUT05FR19FUlJPUglCSVQoMCkKJiM0MzsjZGVmaW5lIFJUTDgyNjFYX0lOVF9QQUdFX1JFQ1YJCUJJVCgyKQomIzQzOyNkZWZpbmUgUlRMODI2MVhfSU5UX0FVVE9ORUdfRE9ORQlCSVQoMykKJiM0MzsjZGVmaW5lIFJUTDgyNjFYX0lOVF9MSU5LX0NIRwkJQklUKDQpCiYjNDM7I2RlZmluZSBSVEw4MjYxWF9JTlRfUEhZX1JFR19BQ0NFU1MJQklUKDUpCiYjNDM7I2RlZmluZSBSVEw4MjYxWF9JTlRfUE1FCQlCSVQoNykKJiM0MzsjZGVmaW5lIFJUTDgyNjFYX0lOVF9BTERQU19DSEcJCUJJVCg5KQomIzQzOyNkZWZpbmUgUlRMODI2MVhfSU5UX0pBQkJFUgkJQklUKDEwKQomIzQzOwomIzQzOyNkZWZpbmUgUlRMODI2MVhfSU5UX01BU0tfREVGQVVMVAkoUlRMODI2MVhfSU5UX0FVVE9ORUdfRE9ORSB8IFwKJiM0MzsJCQkJCSBSVEw4MjYxWF9JTlRfTElOS19DSEcgfCBcCiYjNDM7CQkJCQkgUlRMODI2MVhfSU5UX0FVVE9ORUdfRVJST1IgfCBcCiYjNDM7CQkJCQkgUlRMODI2MVhfSU5UX0pBQkJFUikKJiM0MzsKJiM0MzsjZGVmaW5lIFJUTDgyNjFYX0lOVF9NQVNLX0FMTAkJKFJUTDgyNjFYX0lOVF9BVVRPTkVHX0VSUk9SIHwgXAomIzQzOwkJCQkJIFJUTDgyNjFYX0lOVF9QQUdFX1JFQ1YgfCBcCiYjNDM7CQkJCQkgUlRMODI2MVhfSU5UX0FVVE9ORUdfRE9ORSB8IFwKJiM0MzsJCQkJCSBSVEw4MjYxWF9JTlRfTElOS19DSEcgfCBcCiYjNDM7CQkJCQkgUlRMODI2MVhfSU5UX1BIWV9SRUdfQUNDRVNTIHwgXAomIzQzOwkJCQkJIFJUTDgyNjFYX0lOVF9QTUUgfCBcCiYjNDM7CQkJCQkgUlRMODI2MVhfSU5UX0FMRFBTX0NIRyB8IFwKJiM0MzsJCQkJCSBSVEw4MjYxWF9JTlRfSkFCQkVSKQomIzQzOwomIzQzOyNkZWZpbmUgRldfTUFJTl9NQUdJQwkJCTB4NTI1NDRDMzgKJiM0MzsjZGVmaW5lIEZXX1NVQl9NQUdJQ184MjYxQwkJMHgzMjM2MzE0MwomIzQzOyNkZWZpbmUgUlRMODI2MVhfUE9MTF9USU1FT1VUX01TCTEwMAomIzQzOyNkZWZpbmUgUlRMODI2MVhfTUFYX01NRF9ERVYJCTMxCiYjNDM7CiYjNDM7I2RlZmluZSBSVEw4MjYxQ19DRV9GV19OQU1FCSYjMzQ7cnRsX25pYy9ydGw4MjYxYy5iaW4mIzM0OwomIzQzO01PRFVMRV9GSVJNV0FSRShSVEw4MjYxQ19DRV9GV19OQU1FKTsKJiM0MzsKJiM0MztlbnVtIHJ0bDgyNjF4X2Z3X29wIHsKJiM0MzsJT1BfV1JJVEUgPSAweDAwLAkvKiBXcml0ZSAqLwomIzQzOwlPUF9QT0xMICA9IDB4MDIsCS8qIFBvbGxpbmcgKi8KJiM0Mzt9OwomIzQzOwomIzQzO3N0cnVjdCBydGw4MjYxeF9md19oZWFkZXIgewomIzQzOwlfX2xlMzIgbWFpbl9tYWdpYzsJLyogTWFpbiBtYWdpYyBudW1iZXIgKi8KJiM0MzsJX19sZTMyIHN1Yl9tYWdpYzsJLyogU3ViIG1hZ2ljIG51bWJlciAqLwomIzQzOwlfX2xlMTYgdmVyc2lvbl9tYWpvcjsJLyogTWFqb3IgdmVyc2lvbiAqLwomIzQzOwlfX2xlMTYgdmVyc2lvbl9taW5vcjsJLyogTWlub3IgdmVyc2lvbiAqLwomIzQzOwlfX2xlMTYgbnVtX2VudHJpZXM7CS8qIE51bWJlciBvZiBlbnRyaWVzICovCiYjNDM7CV9fbGUxNiByZXNlcnZlZDsJLyogUmVzZXJ2ZWQgKi8KJiM0MzsJX19sZTMyIGNyYzMyOwkJLyogQ1JDMzIgY2hlY2tzdW0gKi8KJiM0Mzt9OwomIzQzOwomIzQzO3N0cnVjdCBydGw4MjYxeF9md19lbnRyeSB7CiYjNDM7CV9fdTggIHR5cGU7CQkvKiBPcGVyYXRpb24gdHlwZSAoT1BfKikgKi8KJiM0MzsJX191OCAgZGV2OwkJLyogTU1EIGRldmljZSAqLwomIzQzOwlfX2xlMTYgYWRkcjsJCS8qIFJlZ2lzdGVyIGFkZHJlc3MgKi8KJiM0MzsJX191OCAgbXNiOwkJLyogTVNCIGJpdCBwb3NpdGlvbiAqLwomIzQzOwlfX3U4ICBsc2I7CQkvKiBMU0IgYml0IHBvc2l0aW9uICovCiYjNDM7CV9fbGUxNiB2YWx1ZTsJCS8qIFZhbHVlIHRvIHdyaXRlL2NvbXBhcmUgKi8KJiM0MzsJX19sZTE2IHRpbWVvdXRfbXM7CS8qIFBvbGwgdGltZW91dCBpbiBtaWxsaXNlY29uZHMgKi8KJiM0MzsJX191OCAgcG9sbF9zZXQ7CQkvKiBQb2xsIHVudGlsIGVxdWFsICgxKSBvciBub3QgZXF1YWwgKDApICovCiYjNDM7CV9fdTggIHJlc2VydmVkOwkJLyogUmVzZXJ2ZWQgKi8KJiM0Mzt9OwomIzQzOwomIzQzOyNkZWZpbmUgRldfSEVBREVSX1NJWkUJCXNpemVvZihzdHJ1Y3QgcnRsODI2MXhfZndfaGVhZGVyKQomIzQzOyNkZWZpbmUgRldfRU5UUllfU0laRQkJc2l6ZW9mKHN0cnVjdCBydGw4MjYxeF9md19lbnRyeSkKIAogLyogUlRMODIxMUUgYW5kIFJUTDgyMTFGIHN1cHBvcnQgdXAgdG8gdGhyZWUgTEVEcyAqLwogI2RlZmluZSBSVEw4MjExeF9MRURfQ09VTlQJCQkzCkBAIC0yNzAsNiAmIzQzOzMzOSwxMSBAQCBzdHJ1Y3QgcnRsODIxeF9wcml2IHsKIAl1MTYgaW5lcjsKIH07CiAKJiM0MztzdHJ1Y3QgcnRsODI2MXhfcHJpdiB7CiYjNDM7CWNvbnN0IGNoYXIgKmZ3X25hbWU7CiYjNDM7CWJvb2wgZndfbG9hZGVkOwomIzQzO307CiYjNDM7CiBzdGF0aWMgaW50IHJ0bDgyMXhfcmVhZF9wYWdlKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpCiB7CiAJcmV0dXJuIF9fcGh5X3JlYWQocGh5ZGV2LCBSVEw4MjF4X1BBR0VfU0VMRUNUKTsKQEAgLTMxMCw2ICYjNDM7Mzg0LDMyNSBAQCBzdGF0aWMgaW50IHJ0bDgyMXhfbW9kaWZ5X2V4dF9wYWdlKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYsIHUxNiBleHRfcGFnZSwKIAlyZXR1cm4gcGh5X3Jlc3RvcmVfcGFnZShwaHlkZXYsIG9sZHBhZ2UsIHJldCk7CiB9CiAKJiM0MztzdGF0aWMgaW50IHJ0bDgyNjF4X3Byb2JlKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgZGV2aWNlICpkZXYgPSAmYW1wO3BoeWRldi0mZ3Q7bWRpby5kZXY7CiYjNDM7CXN0cnVjdCBydGw4MjYxeF9wcml2ICpwcml2OwomIzQzOwlpbnQgc3ViX3BoeV9pZCwgcmV0OwomIzQzOwomIzQzOwlwcml2ID0gZGV2bV9remFsbG9jKGRldiwgc2l6ZW9mKCpwcml2KSwgR0ZQX0tFUk5FTCk7CiYjNDM7CWlmICghcHJpdikKJiM0MzsJCXJldHVybiAtRU5PTUVNOwomIzQzOwomIzQzOwlwaHlkZXYtJmd0O3ByaXYgPSBwcml2OwomIzQzOwomIzQzOwlyZXQgPSBwaHlfd3JpdGVfbW1kKHBoeWRldiwgTURJT19NTURfVkVORDIsIFJUTDgyNjFYX0VYVF9BRERSX1JFRywKJiM0MzsJCQkgICAgUlRMXzgyNjFYX1NVQl9QSFlfSURfQUREUik7CiYjNDM7CWlmIChyZXQgJmx0OyAwKQomIzQzOwkJcmV0dXJuIHJldDsKJiM0MzsKJiM0MzsJcmV0ID0gcGh5X3JlYWRfbW1kKHBoeWRldiwgTURJT19NTURfVkVORDIsIFJUTDgyNjFYX0VYVF9EQVRBX1JFRyk7CiYjNDM7CWlmIChyZXQgJmx0OyAwKQomIzQzOwkJcmV0dXJuIHJldDsKJiM0MzsKJiM0MzsJc3ViX3BoeV9pZCA9IChyZXQgJmd0OyZndDsgOCkgJmFtcDsgMHhmZjsKJiM0MzsKJiM0MzsJc3dpdGNoIChzdWJfcGh5X2lkKSB7CiYjNDM7CWNhc2UgUlRMODI2MUNfQ0VfTU9ERUw6CiYjNDM7CQlwcml2LSZndDtmd19uYW1lID0gUlRMODI2MUNfQ0VfRldfTkFNRTsKJiM0MzsJCXBoeWRldl9pbmZvKHBoeWRldiwgJiMzNDtSVEw4MjYxQyBkZXRlY3RlZCAoc3ViX2lkIDB4JTAyeClcbiYjMzQ7LCBzdWJfcGh5X2lkKTsKJiM0MzsJCWJyZWFrOwomIzQzOwomIzQzOwlkZWZhdWx0OgomIzQzOwkJcGh5ZGV2X3dhcm4ocGh5ZGV2LCAmIzM0O1Vua25vd24gc3ViX2lkIDB4JTAyeCwgZGVmYXVsdCBiZWhhdmlvclxuJiMzNDssIHN1Yl9waHlfaWQpOwomIzQzOwkJcmV0dXJuIC1FTk9ERVY7CiYjNDM7CX0KJiM0MzsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbnQgcnRsODI2MXhfZ2V0X2ZlYXR1cmVzKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpCiYjNDM7ewomIzQzOwlpbnQgcmV0OwomIzQzOwomIzQzOwlyZXQgPSBnZW5waHlfYzQ1X3BtYV9yZWFkX2FiaWxpdGllcyhwaHlkZXYpOwomIzQzOwlpZiAocmV0KQomIzQzOwkJcmV0dXJuIHJldDsKJiM0MzsJLyoKJiM0MzsJICogU3VwcGxlbWVudCBNdWx0aS1HaWcgc3BlZWRzIHRoYXQgbWF5IG5vdCBiZSBhdXRvbWF0aWNhbGx5IGRldGVjdGVkCiYjNDM7CSAqIFJUTDgyNjFYIHN1cHBvcnRzIDIuNUcvNUcgaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgMTBHCiYjNDM7CSAqLwomIzQzOwlsaW5rbW9kZV9zZXRfYml0KEVUSFRPT0xfTElOS19NT0RFXzI1MDBiYXNlVF9GdWxsX0JJVCwKJiM0MzsJCQkgcGh5ZGV2LSZndDtzdXBwb3J0ZWQpOwomIzQzOwlsaW5rbW9kZV9zZXRfYml0KEVUSFRPT0xfTElOS19NT0RFXzUwMDBiYXNlVF9GdWxsX0JJVCwKJiM0MzsJCQkgcGh5ZGV2LSZndDtzdXBwb3J0ZWQpOwomIzQzOwomIzQzOwlyZXR1cm4gMDsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGludCBydGw4MjYxeF9yZWFkX3N0YXR1cyhzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KQomIzQzO3sKJiM0MzsJaW50IHJldCwgdmFsID0gMDsKJiM0MzsKJiM0MzsJaWYgKHBoeWRldi0mZ3Q7YXV0b25lZyA9PSBBVVRPTkVHX0VOQUJMRSkgewomIzQzOwkJcmV0ID0gZ2VucGh5X2M0NV9hbmVnX2RvbmUocGh5ZGV2KTsKJiM0MzsJCWlmIChyZXQgJmx0OyAwKQomIzQzOwkJCXJldHVybiByZXQ7CiYjNDM7CiYjNDM7CQlpZiAocmV0KSB7CiYjNDM7CQkJdmFsID0gcGh5X3JlYWRfbW1kKHBoeWRldiwgTURJT19NTURfVkVORDIsCiYjNDM7CQkJCQkgICBSVEw4MjJYX1ZORDJfQzIyX1JFRyhNSUlfU1RBVDEwMDApKTsKJiM0MzsJCQlpZiAodmFsICZsdDsgMCkKJiM0MzsJCQkJcmV0dXJuIHZhbDsKJiM0MzsJCX0KJiM0MzsJfQomIzQzOwomIzQzOwltaWlfc3RhdDEwMDBfbW9kX2xpbmttb2RlX2xwYV90KHBoeWRldi0mZ3Q7bHBfYWR2ZXJ0aXNpbmcsIHZhbCk7CiYjNDM7CiYjNDM7CXJldCA9IGdlbnBoeV9jNDVfcmVhZF9zdGF0dXMocGh5ZGV2KTsKJiM0MzsJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQlyZXR1cm4gcmV0OwomIzQzOwomIzQzOwlyZXR1cm4gMDsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGludCBydGw4MjYxeF92ZXJpZnlfZmlybXdhcmUoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldiwgY29uc3Qgc3RydWN0IGZpcm13YXJlICpmdykKJiM0Mzt7CiYjNDM7CWNvbnN0IHN0cnVjdCBydGw4MjYxeF9md19oZWFkZXIgKmhkcjsKJiM0MzsJdTMyIG1haW5fbWFnaWMsIHN1Yl9tYWdpYzsKJiM0MzsJdTMyIGNhbGNfY3JjLCBmaWxlX2NyYzsKJiM0MzsJc2l6ZV90IGRhdGFfbGVuOwomIzQzOwl1MTYgbnVtX2VudHJpZXM7CiYjNDM7CiYjNDM7CWlmIChmdy0mZ3Q7c2l6ZSAmbHQ7IEZXX0hFQURFUl9TSVpFKSB7CiYjNDM7CQlwaHlkZXZfZXJyKHBoeWRldiwgJiMzNDtGaXJtd2FyZSB0b28gc21hbGw6ICV6dSBieXRlc1xuJiMzNDssIGZ3LSZndDtzaXplKTsKJiM0MzsJCXJldHVybiAtRUlOVkFMOwomIzQzOwl9CiYjNDM7CiYjNDM7CWhkciA9IChjb25zdCBzdHJ1Y3QgcnRsODI2MXhfZndfaGVhZGVyICopZnctJmd0O2RhdGE7CiYjNDM7CiYjNDM7CW1haW5fbWFnaWMgPSBsZTMyX3RvX2NwdShoZHItJmd0O21haW5fbWFnaWMpOwomIzQzOwlpZiAobWFpbl9tYWdpYyAhPSBGV19NQUlOX01BR0lDKSB7CiYjNDM7CQlwaHlkZXZfZXJyKHBoeWRldiwgJiMzNDtJbnZhbGlkIGZpcm13YXJlIG1hZ2ljOiAweCUwOHhcbiYjMzQ7LCBtYWluX21hZ2ljKTsKJiM0MzsJCXJldHVybiAtRUlOVkFMOwomIzQzOwl9CiYjNDM7CiYjNDM7CXN1Yl9tYWdpYyA9IGxlMzJfdG9fY3B1KGhkci0mZ3Q7c3ViX21hZ2ljKTsKJiM0MzsJaWYgKHN1Yl9tYWdpYyAhPSBGV19TVUJfTUFHSUNfODI2MUMpIHsKJiM0MzsJCXBoeWRldl9lcnIocGh5ZGV2LCAmIzM0O0ludmFsaWQgc3ViIG1hZ2ljOiAweCUwOHhcbiYjMzQ7LCBzdWJfbWFnaWMpOwomIzQzOwkJcmV0dXJuIC1FSU5WQUw7CiYjNDM7CX0KJiM0MzsKJiM0MzsJbnVtX2VudHJpZXMgPSBsZTE2X3RvX2NwdShoZHItJmd0O251bV9lbnRyaWVzKTsKJiM0MzsJZGF0YV9sZW4gPSBudW1fZW50cmllcyAqIEZXX0VOVFJZX1NJWkU7CiYjNDM7CiYjNDM7CWlmIChmdy0mZ3Q7c2l6ZSAhPSBzaXplb2YoKmhkcikgJiM0MzsgZGF0YV9sZW4pIHsKJiM0MzsJCXBoeWRldl9lcnIocGh5ZGV2LCAmIzM0O0Zpcm13YXJlIHNpemUgbWlzbWF0Y2hcbiYjMzQ7KTsKJiM0MzsJCXJldHVybiAtRUlOVkFMOwomIzQzOwl9CiYjNDM7CiYjNDM7CWNhbGNfY3JjID0gY3JjMzIofjAsIGZ3LSZndDtkYXRhICYjNDM7IEZXX0hFQURFUl9TSVpFLCBkYXRhX2xlbikgXiB+MDsKJiM0MzsJZmlsZV9jcmMgPSBsZTMyX3RvX2NwdShoZHItJmd0O2NyYzMyKTsKJiM0MzsKJiM0MzsJaWYgKGNhbGNfY3JjICE9IGZpbGVfY3JjKSB7CiYjNDM7CQlwaHlkZXZfZXJyKHBoeWRldiwgJiMzNDtDUkMzMiBtaXNtYXRjaDogY2FsY3VsYXRlZD0weCUwOHggZmlsZT0weCUwOHhcbiYjMzQ7LAomIzQzOwkJCSAgIGNhbGNfY3JjLCBmaWxlX2NyYyk7CiYjNDM7CQlyZXR1cm4gLUVJTlZBTDsKJiM0MzsJfQomIzQzOwomIzQzOwlyZXR1cm4gMDsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGludCBydGw4MjYxeF9md19leGVjdXRlX2VudHJ5KHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYsCiYjNDM7CQkJCSAgICAgY29uc3Qgc3RydWN0IHJ0bDgyNjF4X2Z3X2VudHJ5ICplbnRyeSkKJiM0Mzt7CiYjNDM7CXUxNiBhZGRyLCB2YWx1ZSwgdGltZW91dF9tczsKJiM0MzsJdTggZGV2LCBtc2IsIGxzYiwgcG9sbF9zZXQ7CiYjNDM7CXUzMiBiaXRzLCBleHBlY3RfdmFsOwomIzQzOwlpbnQgcmV0LCB2YWw7CiYjNDM7CiYjNDM7CWRldiA9IGVudHJ5LSZndDtkZXY7CiYjNDM7CWFkZHIgPSBsZTE2X3RvX2NwdShlbnRyeS0mZ3Q7YWRkcik7CiYjNDM7CW1zYiA9IGVudHJ5LSZndDttc2I7CiYjNDM7CWxzYiA9IGVudHJ5LSZndDtsc2I7CiYjNDM7CXZhbHVlID0gbGUxNl90b19jcHUoZW50cnktJmd0O3ZhbHVlKTsKJiM0MzsJdGltZW91dF9tcyA9IGxlMTZfdG9fY3B1KGVudHJ5LSZndDt0aW1lb3V0X21zKTsKJiM0MzsJcG9sbF9zZXQgPSBlbnRyeS0mZ3Q7cG9sbF9zZXQ7CiYjNDM7CiYjNDM7CWlmICh0aW1lb3V0X21zID09IDApCiYjNDM7CQl0aW1lb3V0X21zID0gUlRMODI2MVhfUE9MTF9USU1FT1VUX01TOwomIzQzOwomIzQzOwlpZiAoZGV2ICZndDsgUlRMODI2MVhfTUFYX01NRF9ERVYpIHsKJiM0MzsJCXBoeWRldl9lcnIocGh5ZGV2LCAmIzM0O2ludmFsaWQgZmlybXdhcmUgTU1EIGRldmljZTogZGV2PSV1XG4mIzM0OywgZGV2KTsKJiM0MzsJCXJldHVybiAtRUlOVkFMOwomIzQzOwl9CiYjNDM7CiYjNDM7CWlmIChtc2IgJmd0OyAxNSB8fCBsc2IgJmd0OyBtc2IpIHsKJiM0MzsJCXBoeWRldl9lcnIocGh5ZGV2LCAmIzM0O2ludmFsaWQgZmlybXdhcmUgYml0czogbXNiPSV1LCBsc2I9JXVcbiYjMzQ7LCBtc2IsIGxzYik7CiYjNDM7CQlyZXR1cm4gLUVJTlZBTDsKJiM0MzsJfQomIzQzOwomIzQzOwlzd2l0Y2ggKGVudHJ5LSZndDt0eXBlKSB7CiYjNDM7CWNhc2UgT1BfV1JJVEU6CiYjNDM7CQlyZXQgPSBwaHlfbW9kaWZ5X21tZChwaHlkZXYsIGRldiwgYWRkciwKJiM0MzsJCQkJICAgICBHRU5NQVNLKG1zYiwgbHNiKSwgKHZhbHVlICZsdDsmbHQ7IGxzYikgJmFtcDsgR0VOTUFTSyhtc2IsIGxzYikpOwomIzQzOwkJaWYgKHJldCkKJiM0MzsJCQlyZXR1cm4gcmV0OwomIzQzOwkJYnJlYWs7CiYjNDM7CiYjNDM7CWNhc2UgT1BfUE9MTDoKJiM0MzsJCWJpdHMgPSBHRU5NQVNLKG1zYiwgbHNiKTsKJiM0MzsJCWV4cGVjdF92YWwgPSAodmFsdWUgJmx0OyZsdDsgbHNiKSAmYW1wOyBiaXRzOwomIzQzOwomIzQzOwkJaWYgKHBvbGxfc2V0KQomIzQzOwkJCXJldCA9IHBoeV9yZWFkX21tZF9wb2xsX3RpbWVvdXQocGh5ZGV2LCBkZXYsIGFkZHIsIHZhbCwKJiM0MzsJCQkJCQkJKHZhbCAmYW1wOyBiaXRzKSA9PSBleHBlY3RfdmFsLAomIzQzOwkJCQkJCQkxMDAwLCB0aW1lb3V0X21zICogMTAwMCwgZmFsc2UpOwomIzQzOwkJZWxzZQomIzQzOwkJCXJldCA9IHBoeV9yZWFkX21tZF9wb2xsX3RpbWVvdXQocGh5ZGV2LCBkZXYsIGFkZHIsIHZhbCwKJiM0MzsJCQkJCQkJKHZhbCAmYW1wOyBiaXRzKSAhPSBleHBlY3RfdmFsLAomIzQzOwkJCQkJCQkxMDAwLCB0aW1lb3V0X21zICogMTAwMCwgZmFsc2UpOwomIzQzOwkJaWYgKHJldCkKJiM0MzsJCQlyZXR1cm4gcmV0OwomIzQzOwkJYnJlYWs7CiYjNDM7CiYjNDM7CWRlZmF1bHQ6CiYjNDM7CQlyZXR1cm4gLUVJTlZBTDsKJiM0MzsJfQomIzQzOwomIzQzOwlyZXR1cm4gMDsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGludCBydGw4MjYxeF9md19sb2FkKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgcnRsODI2MXhfcHJpdiAqcHJpdiA9IHBoeWRldi0mZ3Q7cHJpdjsKJiM0MzsJY29uc3Qgc3RydWN0IHJ0bDgyNjF4X2Z3X2VudHJ5ICplbnRyeTsKJiM0MzsJY29uc3Qgc3RydWN0IHJ0bDgyNjF4X2Z3X2hlYWRlciAqaGRyOwomIzQzOwljb25zdCBzdHJ1Y3QgZmlybXdhcmUgKmZ3OwomIzQzOwlpbnQgcmV0LCBpOwomIzQzOwomIzQzOwlpZiAoIXByaXYtJmd0O2Z3X25hbWUpCiYjNDM7CQlyZXR1cm4gMDsKJiM0MzsKJiM0MzsJcmV0ID0gcmVxdWVzdF9maXJtd2FyZSgmYW1wO2Z3LCBwcml2LSZndDtmd19uYW1lLCAmYW1wO3BoeWRldi0mZ3Q7bWRpby5kZXYpOwomIzQzOwlpZiAocmV0KSB7CiYjNDM7CQlwaHlkZXZfZXJyKHBoeWRldiwgJiMzNDtGYWlsZWQgdG8gbG9hZCBmaXJtd2FyZSAlczogJWRcbiYjMzQ7LCBwcml2LSZndDtmd19uYW1lLCByZXQpOwomIzQzOwkJcmV0dXJuIHJldDsKJiM0MzsJfQomIzQzOwomIzQzOwlyZXQgPSBydGw4MjYxeF92ZXJpZnlfZmlybXdhcmUocGh5ZGV2LCBmdyk7CiYjNDM7CWlmIChyZXQpCiYjNDM7CQlnb3RvIHJlbGVhc2VfZnc7CiYjNDM7CiYjNDM7CWhkciA9IChjb25zdCBzdHJ1Y3QgcnRsODI2MXhfZndfaGVhZGVyICopZnctJmd0O2RhdGE7CiYjNDM7CiYjNDM7CWVudHJ5ID0gKGNvbnN0IHN0cnVjdCBydGw4MjYxeF9md19lbnRyeSAqKShmdy0mZ3Q7ZGF0YSAmIzQzOyBGV19IRUFERVJfU0laRSk7CiYjNDM7CWZvciAoaSA9IDA7IGkgJmx0OyBsZTE2X3RvX2NwdShoZHItJmd0O251bV9lbnRyaWVzKTsgaSYjNDM7JiM0MzssIGVudHJ5JiM0MzsmIzQzOykgewomIzQzOwkJcmV0ID0gcnRsODI2MXhfZndfZXhlY3V0ZV9lbnRyeShwaHlkZXYsIGVudHJ5KTsKJiM0MzsJCWlmIChyZXQpIHsKJiM0MzsJCQlwaHlkZXZfZXJyKHBoeWRldiwgJiMzNDtFbnRyeSAlZCBmYWlsZWQ6ICVkXG4mIzM0OywgaSwgcmV0KTsKJiM0MzsJCQlnb3RvIHJlbGVhc2VfZnc7CiYjNDM7CQl9CiYjNDM7CX0KJiM0MzsKJiM0MzsJcHJpdi0mZ3Q7ZndfbG9hZGVkID0gdHJ1ZTsKJiM0MzsKJiM0MztyZWxlYXNlX2Z3OgomIzQzOwlyZWxlYXNlX2Zpcm13YXJlKGZ3KTsKJiM0MzsJcmV0dXJuIHJldDsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGludCBydGw4MjYxeF9jb25maWdfaW50cihzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KQomIzQzO3sKJiM0MzsJaW50IHJldDsKJiM0MzsKJiM0MzsJaWYgKHBoeWRldi0mZ3Q7aW50ZXJydXB0cyA9PSBQSFlfSU5URVJSVVBUX0VOQUJMRUQpIHsKJiM0MzsJCXJldCA9IHBoeV9yZWFkX21tZChwaHlkZXYsIE1ESU9fTU1EX1ZFTkQyLCBSVEw4MjIxQl9WTkQyX0lOU1IpOwomIzQzOwkJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQkJcmV0dXJuIHJldDsKJiM0MzsKJiM0MzsJCXJldCA9IHBoeV93cml0ZV9tbWQocGh5ZGV2LCBNRElPX01NRF9WRU5EMiwgUlRMODIyMUJfVk5EMl9JTkVSLAomIzQzOwkJCQkgICAgUlRMODI2MVhfSU5UX01BU0tfREVGQVVMVCk7CiYjNDM7CQlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCQlyZXR1cm4gcmV0OwomIzQzOwl9IGVsc2UgewomIzQzOwkJcmV0ID0gcGh5X3dyaXRlX21tZChwaHlkZXYsIE1ESU9fTU1EX1ZFTkQyLCBSVEw4MjIxQl9WTkQyX0lORVIsIDApOwomIzQzOwkJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQkJcmV0dXJuIHJldDsKJiM0MzsKJiM0MzsJCXJldCA9IHBoeV9yZWFkX21tZChwaHlkZXYsIE1ESU9fTU1EX1ZFTkQyLCBSVEw4MjIxQl9WTkQyX0lOU1IpOwomIzQzOwkJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQkJcmV0dXJuIHJldDsKJiM0MzsJfQomIzQzOwomIzQzOwlyZXR1cm4gMDsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGlycXJldHVybl90IHJ0bDgyNjF4X2hhbmRsZV9pbnRlcnJ1cHQoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldikKJiM0Mzt7CiYjNDM7CWludCBpcnFfc3RhdHVzOwomIzQzOwomIzQzOwlpcnFfc3RhdHVzID0gcGh5X3JlYWRfbW1kKHBoeWRldiwgTURJT19NTURfVkVORDIsIFJUTDgyMjFCX1ZORDJfSU5TUik7CiYjNDM7CWlmIChpcnFfc3RhdHVzICZsdDsgMCkgewomIzQzOwkJcGh5X2Vycm9yKHBoeWRldik7CiYjNDM7CQlyZXR1cm4gSVJRX05PTkU7CiYjNDM7CX0KJiM0MzsKJiM0MzsJaWYgKCEoaXJxX3N0YXR1cyAmYW1wOyBSVEw4MjYxWF9JTlRfTUFTS19BTEwpKQomIzQzOwkJcmV0dXJuIElSUV9OT05FOwomIzQzOwomIzQzOwlpZiAoaXJxX3N0YXR1cyAmYW1wOyAoUlRMODI2MVhfSU5UX0xJTktfQ0hHIHwgUlRMODI2MVhfSU5UX0FVVE9ORUdfRE9ORSB8CiYjNDM7CSAgICBSVEw4MjYxWF9JTlRfQVVUT05FR19FUlJPUiB8IFJUTDgyNjFYX0lOVF9KQUJCRVIpKQomIzQzOwkJcGh5X3RyaWdnZXJfbWFjaGluZShwaHlkZXYpOwomIzQzOwomIzQzOwlyZXR1cm4gSVJRX0hBTkRMRUQ7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbnQgcnRsODI2MXhfY29uZmlnX2FuZWcoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldikKJiM0Mzt7CiYjNDM7CXUxNiBhZHZfMWcgPSAwOwomIzQzOwlpbnQgcmV0OwomIzQzOwomIzQzOwlyZXQgPSBnZW5waHlfYzQ1X2NvbmZpZ19hbmVnKHBoeWRldik7CiYjNDM7CWlmIChyZXQgJmx0OyAwKQomIzQzOwkJcmV0dXJuIHJldDsKJiM0MzsKJiM0MzsJaWYgKHBoeWRldi0mZ3Q7YXV0b25lZyA9PSBBVVRPTkVHX0RJU0FCTEUpCiYjNDM7CQlyZXR1cm4gMDsKJiM0MzsKJiM0MzsJaWYgKGxpbmttb2RlX3Rlc3RfYml0KEVUSFRPT0xfTElOS19NT0RFXzEwMDBiYXNlVF9GdWxsX0JJVCwKJiM0MzsJCQkgICAgICBwaHlkZXYtJmd0O2FkdmVydGlzaW5nKSkKJiM0MzsJCWFkdl8xZyA9IEFEVkVSVElTRV8xMDAwRlVMTDsKJiM0MzsJaWYgKGxpbmttb2RlX3Rlc3RfYml0KEVUSFRPT0xfTElOS19NT0RFXzEwMDBiYXNlVF9IYWxmX0JJVCwKJiM0MzsJCQkgICAgICBwaHlkZXYtJmd0O2FkdmVydGlzaW5nKSkKJiM0MzsJCWFkdl8xZyB8PSBBRFZFUlRJU0VfMTAwMEhBTEY7CiYjNDM7CiYjNDM7CXJldCA9IHBoeV9tb2RpZnlfbW1kX2NoYW5nZWQocGh5ZGV2LCBNRElPX01NRF9WRU5EMiwKJiM0MzsJCQkJICAgICBSVEw4MjJYX1ZORDJfQzIyX1JFRyhNSUlfQ1RSTDEwMDApLAomIzQzOwkJCQkgICAgIEFEVkVSVElTRV8xMDAwRlVMTCB8IEFEVkVSVElTRV8xMDAwSEFMRiwKJiM0MzsJCQkJICAgICBhZHZfMWcpOwomIzQzOwlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCXJldHVybiByZXQ7CiYjNDM7CWlmIChyZXQgJmd0OyAwKQomIzQzOwkJcmV0dXJuIGdlbnBoeV9jNDVfcmVzdGFydF9hbmVnKHBoeWRldik7CiYjNDM7CiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW50IHJ0bDgyNjF4X2NvbmZpZ19pbml0KHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgcnRsODI2MXhfcHJpdiAqcHJpdiA9IHBoeWRldi0mZ3Q7cHJpdjsKJiM0MzsKJiM0MzsJLyogVGhlIGZpcm13YXJlIHBhcmFtZXRlcnMgYXJlIHByZXNlcnZlZCBhY3Jvc3MgSUVFRSBzb2Z0IHJlc2V0cyBhbmQKJiM0MzsJICogc3VzcGVuZC9yZXN1bWUgY3ljbGVzLiBSZWxvYWRpbmcgaXMgb25seSBuZWNlc3NhcnkgYWZ0ZXIgYSBwb3dlcgomIzQzOwkgKiBjeWNsZSBvciBoYXJkIHJlc2V0LgomIzQzOwkgKi8KJiM0MzsJaWYgKHByaXYtJmd0O2Z3X25hbWUgJmFtcDsmYW1wOyAhcHJpdi0mZ3Q7ZndfbG9hZGVkKQomIzQzOwkJcmV0dXJuIHJ0bDgyNjF4X2Z3X2xvYWQocGh5ZGV2KTsKJiM0MzsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQomIzQzOwogc3RhdGljIGludCBydGw4MjF4X3Byb2JlKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpCiB7CiAJc3RydWN0IGRldmljZSAqZGV2ID0gJmFtcDtwaHlkZXYtJmd0O21kaW8uZGV2OwpAQCAtMzAwMSw2ICYjNDM7MzM5NCwxOSBAQCBzdGF0aWMgc3RydWN0IHBoeV9kcml2ZXIgcmVhbHRla19kcnZzW10gPSB7CiAJCS5yZXN1bWUJCT0gZ2VucGh5X3Jlc3VtZSwKIAkJLnJlYWRfbW1kCT0gZ2VucGh5X3JlYWRfbW1kX3Vuc3VwcG9ydGVkLAogCQkud3JpdGVfbW1kCT0gZ2VucGh5X3dyaXRlX21tZF91bnN1cHBvcnRlZCwKJiM0MzsJfSwgewomIzQzOwkJUEhZX0lEX01BVENIX0VYQUNUKFJUTF84MjYxQ19DRyksCiYjNDM7CQkubmFtZQkJCT0gJiMzNDtSZWFsdGVrIFJUTDgyNjFDIDEwR2JwcyBQSFkmIzM0OywKJiM0MzsJCS5wcm9iZQkJCT0gcnRsODI2MXhfcHJvYmUsCiYjNDM7CQkuY29uZmlnX2luaXQJCT0gcnRsODI2MXhfY29uZmlnX2luaXQsCiYjNDM7CQkuZ2V0X2ZlYXR1cmVzCQk9IHJ0bDgyNjF4X2dldF9mZWF0dXJlcywKJiM0MzsJCS5jb25maWdfYW5lZwkJPSBydGw4MjYxeF9jb25maWdfYW5lZywKJiM0MzsJCS5yZWFkX3N0YXR1cwkJPSBydGw4MjYxeF9yZWFkX3N0YXR1cywKJiM0MzsJCS5jb25maWdfaW50cgkJPSBydGw4MjYxeF9jb25maWdfaW50ciwKJiM0MzsJCS5oYW5kbGVfaW50ZXJydXB0CT0gcnRsODI2MXhfaGFuZGxlX2ludGVycnVwdCwKJiM0MzsJCS5zb2Z0X3Jlc2V0CQk9IGdlbnBoeV9jNDVfcG1hX3NvZnRfcmVzZXQsCiYjNDM7CQkuc3VzcGVuZAkJPSBnZW5waHlfYzQ1X3BtYV9zdXNwZW5kLAomIzQzOwkJLnJlc3VtZQkJCT0gZ2VucGh5X2M0NV9wbWFfcmVzdW1lLAogCX0sCiB9OwogCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3BoeS5oIGIvaW5jbHVkZS9saW51eC9waHkuaAppbmRleCAxOTlhN2FhYTM0MWJmZC4uZDZiYzE5OTMxZmI4MzUgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvcGh5LmgKJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9saW51eC9waHkuaApAQCAtMjMwOSw2ICYjNDM7MjMwOSw3IEBAIGludCBnZW5waHlfYzM3X3JlYWRfc3RhdHVzKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYsIGJvb2wgKmNoYW5nZWQpOwogLyogQ2xhdXNlIDQ1IFBIWSAqLwogaW50IGdlbnBoeV9jNDVfcmVzdGFydF9hbmVnKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpOwogaW50IGdlbnBoeV9jNDVfY2hlY2tfYW5kX3Jlc3RhcnRfYW5lZyhzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2LCBib29sIHJlc3RhcnQpOwomIzQzO2ludCBnZW5waHlfYzQ1X3BtYV9zb2Z0X3Jlc2V0KHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpOwogaW50IGdlbnBoeV9jNDVfYW5lZ19kb25lKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpOwogaW50IGdlbnBoeV9jNDVfcmVhZF9saW5rKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpOwogaW50IGdlbnBoeV9jNDVfcmVhZF9scGEoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldik7CmRpZmYgLS1naXQgYS9pbmNsdWRlL3VhcGkvbGludXgvbWRpby5oIGIvaW5jbHVkZS91YXBpL2xpbnV4L21kaW8uaAppbmRleCBiMjU0MWM5NDhmYzFlYi4uMDZmNGJjM2MyMGM3MTcgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvdWFwaS9saW51eC9tZGlvLmgKJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS91YXBpL2xpbnV4L21kaW8uaApAQCAtMzMyLDggJiM0MzszMzIsMTMgQEAKICNkZWZpbmUgTURJT19BTl8xMEdCVF9DVFJMX0FEVjJfNUcJMHgwMDgwCS8qIEFkdmVydGlzZSAyLjVHQkFTRS1UICovCiAjZGVmaW5lIE1ESU9fQU5fMTBHQlRfQ1RSTF9BRFY1RwkweDAxMDAJLyogQWR2ZXJ0aXNlIDVHQkFTRS1UICovCiAjZGVmaW5lIE1ESU9fQU5fMTBHQlRfQ1RSTF9BRFYxMEcJMHgxMDAwCS8qIEFkdmVydGlzZSAxMEdCQVNFLVQgKi8KJiM0MzsjZGVmaW5lIE1ESU9fQU5fMTBHQlRfQ1RSTF9NU19FTkFCTEUJMHg4MDAwCS8qIE1hc3Rlci9zbGF2ZSBtYW51YWwgY29uZmlnIGVuYWJsZSAqLwomIzQzOyNkZWZpbmUgTURJT19BTl8xMEdCVF9DVFJMX01TX1ZBTFVFCTB4NDAwMAkvKiBNYXN0ZXIvc2xhdmUgY29uZmlnIHZhbHVlICgxPU1hc3RlcikgKi8KJiM0MzsjZGVmaW5lIE1ESU9fQU5fMTBHQlRfQ1RSTF9NU19QT1JUX1RZUEUJMHgyMDAwCS8qIE1hc3RlciBQcmVmZXJyZWQgVHlwZSAqLwogCiAvKiBBTiAxMEdCQVNFLVQgc3RhdHVzIHJlZ2lzdGVyLiAqLwomIzQzOyNkZWZpbmUgTURJT19BTl8xMEdCVF9TVEFUX01TX0ZBVUxUCTB4ODAwMAkvKiBNYXN0ZXIvc2xhdmUgZmF1bHQgKi8KJiM0MzsjZGVmaW5lIE1ESU9fQU5fMTBHQlRfU1RBVF9NU19SRVMJMHg0MDAwCS8qIE1hc3Rlci9zbGF2ZSByZXNvbHV0aW9uICgxPU1hc3RlcikgKi8KICNkZWZpbmUgTURJT19BTl8xMEdCVF9TVEFUX0xQMl81RwkweDAwMjAgIC8qIExQIGlzIDIuNUdCVCBjYXBhYmxlICovCiAjZGVmaW5lIE1ESU9fQU5fMTBHQlRfU1RBVF9MUDVHCQkweDAwNDAgIC8qIExQIGlzIDVHQlQgY2FwYWJsZSAqLwogI2RlZmluZSBNRElPX0FOXzEwR0JUX1NUQVRfTFBUUlIJMHgwMjAwCS8qIExQIHRyYWluaW5nIHJlc2V0IHJlcS4gKi8KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDMgMDc6MzU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTAyMzMKCQkJCQkJCW91dHB1dDogMTgKCQkJCQkJCXRob3VnaHRzOiA0ODMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBSZWFjaGFiaWxpdHkgb2YgdGhlIFJUTDgyNjFDIFBIWSBEcml2ZXIgaW4gYSBWaXJ0dWFsaXplZCBDb250ZXh0KioKCk9rYXksIHNvIHdlIGhhdmUgdGhpcyBwYXRjaCBhZGRpbmcgc3VwcG9ydCBmb3IgdGhlIFJlYWx0ZWsgUlRMODI2MUMgMTBHYnBzIFBIWSBpbiBgcmVhbHRla19tYWluLmNgLCBhbG9uZyB3aXRoIHNvbWUgQ2xhdXNlIDQ1IFBIWSBmdW5jdGlvbnMgYW5kIG1vZGlmaWNhdGlvbnMgdG8gZXhpc3Rpbmcgb25lcyBpbiBgcGh5LWM0NS5jYC4gQ3J1Y2lhbGx5LCB0aGVyZSYjMzk7cyBmaXJtd2FyZSBsb2FkaW5nIGZvciB0aGUgUlRMODI2MUMuIE15IG1haW4gY29uY2VybiBpcyB3aGV0aGVyIHRoaXMgaXMgYWN0dWFsbHkgKnJlYWNoYWJsZSogaW4gYSB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudC4gVGhhdCYjMzk7cyB0aGUgcmVhbCB0ZXN0LgoKVGhpbmtpbmcgdGhyb3VnaCBpdCwgUEhZIGRyaXZlcnMgYXJlIHVzdWFsbHkgcmVhY2hhYmxlIGlmIHdlIGNhbiBnZXQgYSB2aXJ0dWFsIE1ESU8gYnVzIHVwIGFuZCBydW5uaW5nLCBvciBpZiBhIG5ldHdvcmsgZHJpdmVyIHVzZXMgdGhlbSwgd2hpY2ggdGhlbiBsaW5rcyB0byB0aGUgUEhZIGRyaXZlci4gU28sIHRoZSBxdWVzdGlvbiBiZWNvbWVzOiBjYW4gd2UgaW5zdGFudGlhdGUgYSBQSFkgZGV2aWNlIHRocm91Z2ggc29tZSB2aXJ0dWFsIGRyaXZlcnM/IExpa2UsIG1heWJlIGBtYWNzZWNgLCBvciBgdmV0aGAsIG9yIGV2ZW4gYG5ldGRldnNpbWA/IEJ1dCB3YWl0LCBJJiMzOTttIHByZXR0eSBzdXJlIGBuZXRkZXZzaW1gIGRvZXNuJiMzOTt0IGFjdHVhbGx5IGluc3RhbnRpYXRlICpyZWFsKiBQSFlzLiBBbmQgdGhlbiBJIHJlbWVtYmVyLCBgbmV0ZGV2c2ltYCBkb2VzbiYjMzk7dCB1c2UgdGhlIGBwaHlfZGV2aWNlYCBzdHJ1Y3R1cmUgYXQgYWxsLgoKV2hhdCBhYm91dCBzb21ldGhpbmcgbGlrZSBgbWFjYmAgb3Igb3RoZXIgZHJpdmVycyB0aGF0IG1pZ2h0IGJlIGVtdWxhdGVkIGluIFFFTVU/IFllcywgdGhleSBtaWdodCBiZSBlbXVsYXRlZCwgYnV0IHRoZXkgdHlwaWNhbGx5IHVzZSBzcGVjaWZpYyBQSFlzLiBUaGVuIEkgcmVjYWxsLCBjYW4gU3l6a2FsbGVyIGluamVjdCBNRElPIHRyYWZmaWM/IEkgcmVtZW1iZXJlZCB0aGUgZXhpc3RlbmNlIG9mIGBzeXpfbWRpb19yZWFkYC9gc3l6X21kaW9fd3JpdGVgIHN5c3RlbSBjYWxscywgYnV0IEkgaGF2ZSB0byBzdG9wIG15c2VsZiAtIHRoYXQmIzM5O3Mgbm90IHJpZ2h0LgoKT2theSwgYmFjayB0byBiYXNpY3MuIENhbiB3ZSByZWFjaCBhIGZ1bmN0aW9uIGxpa2UgYGdlbnBoeV9jNDVfcmVhZF9zdGF0dXNgPyBZZXMsIGlmIGEgUEhZIGRldmljZSBpcyByZWdpc3RlcmVkLiBOb3csIHRoZSBrZXkgcXVlc3Rpb246IGNhbiBhIHVzZXIgcmVnaXN0ZXIgYSBQSFkgZGV2aWNlPyBJIHZhZ3VlbHkgcmVjYWxsIGBtZGlvLWJjbS11bmltYWNgIGFuZCBzaW1pbGFyIHRoaW5ncyBleGlzdGluZy4gQnV0IHdhaXQsIG1heWJlIHdlIGNvdWxkIGp1c3QgZnV6eiB0aGUgUEhZIGxheWVyIGRpcmVjdGx5IGlmIHRoZXJlJiMzOTtzIGEgd2F5IHRvIHRyaWdnZXIgaXQuCgpGdXp6aW5nLi4uIGRvZXMgU3l6a2FsbGVyIGZ1enogUEhZIGRyaXZlcnMgdGhyb3VnaCBgdHVuYCBvciBgdmV0aGA/IE5vLCB0aGF0IGRvZXNuJiMzOTt0IHNvdW5kIHJpZ2h0LiBQSFkgZHJpdmVycyBhcmUgdXN1YWxseSBwcm9iZWQgdmlhIHRoZSBNRElPIGJ1cy4gU28sIGlzIHRoZXJlIGV2ZW4gYSB2aXJ0dWFsIE1ESU8gYnVzIGluIHRoZSBrZXJuZWw/IEkgbmVlZCB0byBzZWFyY2ggZm9yIHRoYXQuIExldCYjMzk7cyBsb29rIGZvciAmIzM0O21kaW8mIzM0OyBjb21iaW5lZCB3aXRoIHNvbWV0aGluZyBsaWtlICYjMzQ7bW9jayYjMzQ7IG9yICYjMzQ7c2ltJiMzNDsuIFRoYXQmIzM5O3MgdGhlIGtleS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMyAwNzozNTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+RXJyb3I6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5ubyBtYXRjaGVzPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O21kaW8uKnNpbSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtlcnJvciYjMzQ7OiAmIzM0O25vIG1hdGNoZXMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDMgMDc6MzY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTEyNjMKCQkJCQkJCW91dHB1dDogMTgKCQkJCQkJCXRob3VnaHRzOiAyMgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0aG91Z2h0IHByb2Nlc3Mgc3VtbWFyaXplZCBmcm9tIHRoYXQgcHJvbXB0LCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipNRElPIERyaXZlciBJbnN0YW50aWF0aW9uIEludmVzdGlnYXRpb24qKgoKQWxyaWdodCwgbGV0JiMzOTtzIGdldCBkb3duIHRvIGJyYXNzIHRhY2tzLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gcXVpY2tseSBhc2NlcnRhaW4gdGhlIGxhbmRzY2FwZSBvZiBgbWRpb2AgZHJpdmVycyB3aXRoaW4gdGhlIHN5c3RlbS4gTXkgcHJpbWFyeSBjb25jZXJuIGlzIGNlbnRlcmVkIG9uIHVzZXItc3BhY2UgaW5zdGFudGlhdGlvbi4gQXJlIHRoZXJlIGFueSBgbWRpb2AgZHJpdmVycyBleHBvc2VkLCBkb2N1bWVudGVkLCBhbmQgcG90ZW50aWFsbHkgZGVzaWduZWQgZm9yIGRpcmVjdCBpbnRlcmFjdGlvbiBmcm9tIHVzZXIgYXBwbGljYXRpb25zPyBJJiMzOTttIHRoaW5raW5nIGFib3V0IHRoaW5ncyBsaWtlIGRpcmVjdCBzeXNmcyBhY2Nlc3MsIGlvY3Rscywgb3IgYW55IG90aGVyIG1lY2hhbmlzbSB0aGF0IHByb3ZpZGVzIGEgdXNlciBpbnRlcmZhY2UuIFRoaXMgaXNuJiMzOTt0IGp1c3QgYSBnZW5lcmljIHByb2JlOyBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpZiB0aGUga2VybmVsIGZhY2lsaXRhdGVzIHVzZXItc3BhY2UgY29udHJvbCBvdmVyIHNwZWNpZmljIGBtZGlvYCBpbnN0YW5jZXMuIEkmIzM5O20gbG9va2luZyBmb3IgYSBxdWljayBzY2FuIG9mIHRoZSB0eXBpY2FsIGRyaXZlciByZWdpc3RyYXRpb24gcGF0dGVybnMsIGRldmljZSB0cmVlIGJpbmRpbmdzLCBhbmQgYW55IGFzc29jaWF0ZWQgY2hhcmFjdGVyIG9yIG5ldHdvcmsgaW50ZXJmYWNlcy4gVW5kZXJzdGFuZGluZyB0aGUgcGVybWl0dGVkIGFuZCBwcm9oaWJpdGVkIHVzZXItc3BhY2UgaW5zdGFudGlhdGlvbiBzY2VuYXJpb3Mgb2YgTURJTyBkcml2ZXJzIHdpbGwgYmUgaW1wb3J0YW50IHRvIHdoYXRldmVyIEkgYW0gZG9pbmcuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDMgMDc6MzY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkVycm9yOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bm8gbWF0Y2hlczwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDttZGlvLip2aXJ0dWFsJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O2Vycm9yJiMzNDs6ICYjMzQ7bm8gbWF0Y2hlcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMyAwNzozNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMTUxNgoJCQkJCQkJb3V0cHV0OiAxNwoJCQkJCQkJdGhvdWdodHM6IDE4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCBwcm9jZXNzLCBmcm9tIGFuIGV4cGVydCYjMzk7cyBwZXJzcGVjdGl2ZToKCioqRGl2aW5nIERlZXAgaW50byB0aGUgUEhZIExheWVyKioKCkhtbSwgaG9sZCBvbiBhIHNlY29uZC4gV2UmIzM5O3ZlIGJlZW4gZm9jdXNpbmcgb24gdGhlIGhpZ2hlci1sZXZlbCBuZXR3b3JrIHN0YWNrLCBidXQgSSB0aGluayB3ZSYjMzk7cmUgb3Zlcmxvb2tpbmcgc29tZXRoaW5nIGNyaXRpY2FsIGluIHRoaXMgYW5hbHlzaXMuIFRoYXQgZmlsZSwgYGRyaXZlcnMvbmV0L3BoeS9maXhlZF9waHkuY2AuLi4gd2hhdCYjMzk7cyBpdHMgcm9sZT8gSSBjYW4mIzM5O3QgaWdub3JlIGl0LiBJdCYjMzk7cyB0aGUgZHJpdmVyIGZvciB0aGUgJiMzNDtmaXhlZCBQSFksJiMzNDsgd2hpY2gsIGRlcGVuZGluZyBvbiB0aGUgY29udGV4dCwgY291bGQgYmUgYSBrZXkgcGllY2UgaW4gdGhpcyBuZXR3b3JrIGludGVyZmFjZSBwdXp6bGUuIFdlIG5lZWQgdG8gY29uc2lkZXIgaG93IGl0JiMzOTtzIGludGVyYWN0aW5nLCBvciAqbm90KiBpbnRlcmFjdGluZywgd2l0aCB0aGUgcmVzdCBvZiB0aGUgY29tcG9uZW50cyB3ZSYjMzk7cmUgbG9va2luZyBhdC4gVGhpcyBjb3VsZCBiZSB3aGVyZSB0aGUgcnViYmVyIG1lZXRzIHRoZSByb2FkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAzIDA3OjM2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2ZpeGVkX3BoeSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYz00Mzg9c3RhdGljIHZvaWQgZHNhX2xvb3BfcGh5ZGV2c191bnJlZ2lzdGVyKHZvaWQpXG4tLVxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtNDQxLVx0XHRpZiAoIUlTX0VSUihwaHlkZXZzW2ldKSlcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jOjQ0MjpcdFx0XHRmaXhlZF9waHlfdW5yZWdpc3RlcihwaHlkZXZzW2ldKTtcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jLTQ0My1cdH1cbi0tXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYz00ODI9c3RhdGljIGludCBfX2luaXQgZHNhX2xvb3BfaW5pdCh2b2lkKVxuLS1cbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jLTQ5MS1cdGZvciAoaSA9IDA7IGkgXHUwMDNjIE5VTV9GSVhFRF9QSFlTOyBpJiM0MzsmIzQzOylcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jOjQ5MjpcdFx0cGh5ZGV2c1tpXSA9IGZpeGVkX3BoeV9yZWdpc3Rlcl8xMDBmZCgpO1xuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtNDkzLVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2I0NC5jPTIyMzQ9c3RhdGljIGludCBiNDRfcmVnaXN0ZXJfcGh5X29uZShzdHJ1Y3QgYjQ0ICpicClcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9iNDQuYy0yMjcyLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vYjQ0LmM6MjI3MzpcdFx0cGh5ZGV2ID0gZml4ZWRfcGh5X3JlZ2lzdGVyXzEwMGZkKCk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9iNDQuYy0yMjc0LVx0XHRpZiAoIUlTX0VSUihwaHlkZXYpKVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2I0NC5jPTIzMTM9c3RhdGljIHZvaWQgYjQ0X3VucmVnaXN0ZXJfcGh5X29uZShzdHJ1Y3QgYjQ0ICpicClcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9iNDQuYy0yMzIyLVx0aWYgKHBoeV9pc19wc2V1ZG9fZml4ZWRfbGluayhwaHlkZXYpKVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vYjQ0LmM6MjMyMzpcdFx0Zml4ZWRfcGh5X3VucmVnaXN0ZXIocGh5ZGV2KTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2I0NC5jLTIzMjQtXHRtZGlvYnVzX3VucmVnaXN0ZXIobWlpX2J1cyk7XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vYmdtYWMuYz0xNDM5PWludCBiZ21hY19waHlfY29ubmVjdF9kaXJlY3Qoc3RydWN0IGJnbWFjICpiZ21hYylcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2JnbWFjLmMtMTQ0MC17XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9iZ21hYy5jOjE0NDE6XHRzdHJ1Y3QgZml4ZWRfcGh5X3N0YXR1cyBmcGh5X3N0YXR1cyA9IHtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2JnbWFjLmMtMTQ0Mi1cdFx0LmxpbmsgPSAxLFxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2JnbWFjLmMtMTQ0OC1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2JnbWFjLmM6MTQ0OTpcdHBoeV9kZXYgPSBmaXhlZF9waHlfcmVnaXN0ZXIoXHUwMDI2ZnBoeV9zdGF0dXMsIE5VTEwpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vYmdtYWMuYy0xNDUwLVx0aWYgKElTX0VSUihwaHlfZGV2KSkge1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2dlbmV0L2JjbW1paS5jPTk3PXZvaWQgYmNtZ2VuZXRfbWlpX3NldHVwKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vZ2VuZXQvYmNtbWlpLmMtMTE2LVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vZ2VuZXQvYmNtbWlpLmM6MTE3OnN0YXRpYyBpbnQgYmNtZ2VuZXRfZml4ZWRfcGh5X2xpbmtfdXBkYXRlKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9nZW5ldC9iY21taWkuYzoxMTg6XHRcdFx0XHRcdCAgc3RydWN0IGZpeGVkX3BoeV9zdGF0dXMgKnN0YXR1cylcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2dlbmV0L2JjbW1paS5jLTExOS17XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vZ2VuZXQvYmNtbWlpLmM9MTg2PXN0YXRpYyB2b2lkIGJjbWdlbmV0X21vY2FfcGh5X3NldHVwKHN0cnVjdCBiY21nZW5ldF9wcml2ICpwcml2KVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2dlbmV0L2JjbW1paS5jLTE4OC1cdGlmIChiY21nZW5ldF9oYXNfbW9jYV9saW5rX2RldChwcml2KSlcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2dlbmV0L2JjbW1paS5jOjE4OTpcdFx0Zml4ZWRfcGh5X3NldF9saW5rX3VwZGF0ZShwcml2LVx1MDAzZWRldi1cdTAwM2VwaHlkZXYsXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9nZW5ldC9iY21taWkuYzoxOTA6XHRcdFx0XHRcdCAgYmNtZ2VuZXRfZml4ZWRfcGh5X2xpbmtfdXBkYXRlKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2dlbmV0L2JjbW1paS5jLTE5MS19XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZmFyYWRheS9mdGdtYWMxMDAuYz00Mz1zdHJ1Y3QgZnRnbWFjMTAwX21hdGNoX2RhdGEge1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZhcmFkYXkvZnRnbWFjMTAwLmMtNjYtLyogRm9yIE5DLVNJIHRvIHJlZ2lzdGVyIGEgZml4ZWQtbGluayBwaHkgZGV2aWNlICovXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mYXJhZGF5L2Z0Z21hYzEwMC5jOjY3OnN0YXRpYyBzdHJ1Y3QgZml4ZWRfcGh5X3N0YXR1cyBuY3NpX3BoeV9zdGF0dXMgPSB7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mYXJhZGF5L2Z0Z21hYzEwMC5jLTY4LVx0LmxpbmsgPSAxLFxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZhcmFkYXkvZnRnbWFjMTAwLmM9MTc4MD1zdGF0aWMgdm9pZCBmdGdtYWMxMDBfcGh5X2Rpc2Nvbm5lY3Qoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldilcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mYXJhZGF5L2Z0Z21hYzEwMC5jLTE3OTItXHRpZiAocHJpdi1cdTAwM2V1c2VfbmNzaSlcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZhcmFkYXkvZnRnbWFjMTAwLmM6MTc5MzpcdFx0Zml4ZWRfcGh5X3VucmVnaXN0ZXIocGh5ZGV2KTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZhcmFkYXkvZnRnbWFjMTAwLmMtMTc5NC19XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZmFyYWRheS9mdGdtYWMxMDAuYz0xODQ4PXN0YXRpYyBpbnQgZnRnbWFjMTAwX3Byb2JlX25jc2koc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldixcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mYXJhZGF5L2Z0Z21hYzEwMC5jLTE4NjYtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mYXJhZGF5L2Z0Z21hYzEwMC5jOjE4Njc6XHRwaHlkZXYgPSBmaXhlZF9waHlfcmVnaXN0ZXIoXHUwMDI2bmNzaV9waHlfc3RhdHVzLCBucCk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mYXJhZGF5L2Z0Z21hYzEwMC5jLTE4NjgtXHRpZiAoSVNfRVJSKHBoeWRldikpIHtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mYXJhZGF5L2Z0Z21hYzEwMC5jLTE4ODEtZXJyX3JlZ2lzdGVyX3BoeTpcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZhcmFkYXkvZnRnbWFjMTAwLmM6MTg4MjpcdGZpeGVkX3BoeV91bnJlZ2lzdGVyKHBoeWRldik7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mYXJhZGF5L2Z0Z21hYzEwMC5jLTE4ODMtZXJyX3JlZ2lzdGVyX25kZXY6XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2ZlY19tYWluLmM9Mjk4MT1zdGF0aWMgaW50IGZlY19lbmV0X21paV9wcm9iZShzdHJ1Y3QgbmV0X2RldmljZSAqbmRldilcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZmVjX21haW4uYy0zMDAyLVx0XHRcdG5ldGRldl9pbmZvKG5kZXYsIFwmIzM0O25vIFBIWSwgYXNzdW1pbmcgZGlyZWN0IGNvbm5lY3Rpb24gdG8gc3dpdGNoXFxuXCYjMzQ7KTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9mZWNfbWFpbi5jOjMwMDM6XHRcdFx0cGh5X2RldiA9IGZpeGVkX3BoeV9yZWdpc3Rlcl8xMDBmZCgpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2ZlY19tYWluLmMtMzAwNC1cdFx0XHRpZiAoSVNfRVJSKHBoeV9kZXYpKSB7XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2ZlY19tYWluLmMtMzAxMy1cdFx0XHRpZiAocGh5X2lzX3BzZXVkb19maXhlZF9saW5rKHBoeV9kZXYpKVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2ZlY19tYWluLmM6MzAxNDpcdFx0XHRcdGZpeGVkX3BoeV91bnJlZ2lzdGVyKHBoeV9kZXYpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2ZlY19tYWluLmMtMzAxNS1cdFx0XHRuZXRkZXZfZXJyKG5kZXYsIFwmIzM0O2NvdWxkIG5vdCBhdHRhY2ggdG8gUEhZXFxuXCYjMzQ7KTtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZmVjX21haW4uYz00MjI4PWZlY19lbmV0X2Nsb3NlKHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2KVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9mZWNfbWFpbi5jLTQyNDMtXHRpZiAoIWZlcC1cdTAwM2VwaHlfbm9kZSBcdTAwMjZcdTAwMjYgcGh5X2lzX3BzZXVkb19maXhlZF9saW5rKHBoeV9kZXYpKVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2ZlY19tYWluLmM6NDI0NDpcdFx0Zml4ZWRfcGh5X3VucmVnaXN0ZXIocGh5X2Rldik7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZmVjX21haW4uYy00MjQ1LVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9naWFuZmFyLmM9MzEzMj1zdGF0aWMgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2Vfb3BzIGdmYXJfbmV0ZGV2X29wcyA9IHtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZ2lhbmZhci5jLTMxNDEtXHQubmRvX2dldF9zdGF0czY0ID0gZ2Zhcl9nZXRfc3RhdHM2NCxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9naWFuZmFyLmM6MzE0MjpcdC5uZG9fY2hhbmdlX2NhcnJpZXIgPSBmaXhlZF9waHlfY2hhbmdlX2NhcnJpZXIsXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZ2lhbmZhci5jLTMxNDMtXHQubmRvX3NldF9tYWNfYWRkcmVzcyA9IGdmYXJfc2V0X21hY19hZGRyLFxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9oaWJtY2dlL2hiZ19tZGlvLmM9MjI4PXZvaWQgaGJnX3BoeV9zdG9wKHN0cnVjdCBoYmdfcHJpdiAqcHJpdilcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaGlibWNnZS9oYmdfbWRpby5jLTIzMi1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9oaWJtY2dlL2hiZ19tZGlvLmM6MjMzOnN0YXRpYyB2b2lkIGhiZ19maXhlZF9waHlfdW5pbml0KHZvaWQgKmRhdGEpXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaGlibWNnZS9oYmdfbWRpby5jLTIzNC17XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaGlibWNnZS9oYmdfbWRpby5jOjIzNTpcdGZpeGVkX3BoeV91bnJlZ2lzdGVyKChzdHJ1Y3QgcGh5X2RldmljZSAqKWRhdGEpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2hpYm1jZ2UvaGJnX21kaW8uYy0yMzYtfVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2hpYm1jZ2UvaGJnX21kaW8uYy0yMzctXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaGlibWNnZS9oYmdfbWRpby5jOjIzODpzdGF0aWMgaW50IGhiZ19maXhlZF9waHlfaW5pdChzdHJ1Y3QgaGJnX3ByaXYgKnByaXYpXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaGlibWNnZS9oYmdfbWRpby5jLTIzOS17XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaGlibWNnZS9oYmdfbWRpby5jOjI0MDpcdHN0cnVjdCBmaXhlZF9waHlfc3RhdHVzIGhiZ19maXhlZF9waHlfc3RhdHVzID0ge1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2hpYm1jZ2UvaGJnX21kaW8uYy0yNDEtXHRcdC5saW5rID0gMSxcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaGlibWNnZS9oYmdfbWRpby5jLTI1MC1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9oaWJtY2dlL2hiZ19tZGlvLmM6MjUxOlx0cGh5ZGV2ID0gZml4ZWRfcGh5X3JlZ2lzdGVyKFx1MDAyNmhiZ19maXhlZF9waHlfc3RhdHVzLCBOVUxMKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9oaWJtY2dlL2hiZ19tZGlvLmMtMjUyLVx0aWYgKElTX0VSUihwaHlkZXYpKSB7XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2hpYm1jZ2UvaGJnX21kaW8uYy0yNTctXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaGlibWNnZS9oYmdfbWRpby5jOjI1ODpcdHJldCA9IGRldm1fYWRkX2FjdGlvbl9vcl9yZXNldChkZXYsIGhiZ19maXhlZF9waHlfdW5pbml0LCBwaHlkZXYpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2hpYm1jZ2UvaGJnX21kaW8uYy0yNTktXHRpZiAocmV0KVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9oaWJtY2dlL2hiZ19tZGlvLmM9MjY2PWludCBoYmdfbWRpb19pbml0KHN0cnVjdCBoYmdfcHJpdiAqcHJpdilcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaGlibWNnZS9oYmdfbWRpby5jLTI3NS1cdGlmIChtYWMtXHUwMDNlcGh5X2FkZHIgPT0gSEJHX05PX1BIWSlcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9oaWJtY2dlL2hiZ19tZGlvLmM6Mjc2Olx0XHRyZXR1cm4gaGJnX2ZpeGVkX3BoeV9pbml0KHByaXYpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2hpYm1jZ2UvaGJnX21kaW8uYy0yNzctXG4tLVxuZHJpdmVycy9uZXQvbWRpby9vZl9tZGlvLmM9NDEyPWludCBvZl9waHlfcmVnaXN0ZXJfZml4ZWRfbGluayhzdHJ1Y3QgZGV2aWNlX25vZGUgKm5wKVxuZHJpdmVycy9uZXQvbWRpby9vZl9tZGlvLmMtNDEzLXtcbmRyaXZlcnMvbmV0L21kaW8vb2ZfbWRpby5jOjQxNDpcdHN0cnVjdCBmaXhlZF9waHlfc3RhdHVzIHN0YXR1cyA9IHt9O1xuZHJpdmVycy9uZXQvbWRpby9vZl9tZGlvLmMtNDE1LVx0c3RydWN0IGRldmljZV9ub2RlICpmaXhlZF9saW5rX25vZGU7XG4tLVxuZHJpdmVycy9uZXQvbWRpby9vZl9tZGlvLmMtNDU5LXJlZ2lzdGVyX3BoeTpcbmRyaXZlcnMvbmV0L21kaW8vb2ZfbWRpby5jOjQ2MDpcdHJldHVybiBQVFJfRVJSX09SX1pFUk8oZml4ZWRfcGh5X3JlZ2lzdGVyKFx1MDAyNnN0YXR1cywgbnApKTtcbmRyaXZlcnMvbmV0L21kaW8vb2ZfbWRpby5jLTQ2MS19XG4tLVxuZHJpdmVycy9uZXQvbWRpby9vZl9tZGlvLmM9NDY0PXZvaWQgb2ZfcGh5X2RlcmVnaXN0ZXJfZml4ZWRfbGluayhzdHJ1Y3QgZGV2aWNlX25vZGUgKm5wKVxuLS1cbmRyaXZlcnMvbmV0L21kaW8vb2ZfbWRpby5jLTQ3MS1cbmRyaXZlcnMvbmV0L21kaW8vb2ZfbWRpby5jOjQ3MjpcdGZpeGVkX3BoeV91bnJlZ2lzdGVyKHBoeWRldik7XG5kcml2ZXJzL25ldC9tZGlvL29mX21kaW8uYy00NzMtXG4tLVxuZHJpdmVycy9uZXQvcGh5L01ha2VmaWxlPTYzPW9iai0kKENPTkZJR19EUDgzVEc3MjBfUEhZKVx0JiM0Mzs9IGRwODN0ZzcyMC5vXG5kcml2ZXJzL25ldC9waHkvTWFrZWZpbGU6NjQ6b2JqLSQoQ09ORklHX0ZJWEVEX1BIWSlcdFx0JiM0Mzs9IGZpeGVkX3BoeS5vXG5kcml2ZXJzL25ldC9waHkvTWFrZWZpbGUtNjUtb2JqLSQoQ09ORklHX0lDUExVU19QSFkpXHQmIzQzOz0gaWNwbHVzLm9cbi0tXG5kcml2ZXJzL25ldC9waHkvZml4ZWRfcGh5LmMtMjctXG5kcml2ZXJzL25ldC9waHkvZml4ZWRfcGh5LmM6Mjg6c3RydWN0IGZpeGVkX3BoeSB7XG5kcml2ZXJzL25ldC9waHkvZml4ZWRfcGh5LmMtMjktXHRzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2O1xuZHJpdmVycy9uZXQvcGh5L2ZpeGVkX3BoeS5jOjMwOlx0c3RydWN0IGZpeGVkX3BoeV9zdGF0dXMgc3RhdHVzO1xuZHJpdmVycy9uZXQvcGh5L2ZpeGVkX3BoeS5jOjMxOlx0aW50ICgqbGlua191cGRhdGUpKHN0cnVjdCBuZXRfZGV2aWNlICosIHN0cnVjdCBmaXhlZF9waHlfc3RhdHVzICopO1xuZHJpdmVycy9uZXQvcGh5L2ZpeGVkX3BoeS5jLTMyLX07XG5kcml2ZXJzL25ldC9waHkvZml4ZWRfcGh5LmMtMzMtXG5kcml2ZXJzL25ldC9waHkvZml4ZWRfcGh5LmM6MzQ6c3RhdGljIERFQ0xBUkVfQklUTUFQKGZpeGVkX3BoeV9pZHMsIE5VTV9GUCk7XG5kcml2ZXJzL25ldC9waHkvZml4ZWRfcGh5LmM6MzU6c3RhdGljIHN0cnVjdCBmaXhlZF9waHkgZm1iX2ZpeGVkX3BoeXNbTlVNX0ZQXTtcbmRyaXZlcnMvbmV0L3BoeS9maXhlZF9waHkuYy0zNi1zdGF0aWMgc3RydWN0IG1paV9idXMgKmZtYl9taWlfYnVzO1xuZHJpdmVycy9uZXQvcGh5L2ZpeGVkX3BoeS5jLTM3LVxuZHJpdmVycy9uZXQvcGh5L2ZpeGVkX3BoeS5jOjM4OnN0YXRpYyBzdHJ1Y3QgZml4ZWRfcGh5ICpmaXhlZF9waHlfZmluZChpbnQgYWRkcilcbmRyaXZlcnMvbmV0L3BoeS9maXhlZF9waHkuYy0zOS17XG5kcml2ZXJzL25ldC9waHkvZml4ZWRfcGh5LmM6NDA6XHRyZXR1cm4gdGVzdF9iaXQoYWRkciwgZml4ZWRfcGh5X2lkcykgPyBmbWJfZml4ZWRfcGh5cyAmIzQzOyBhZGRyIDogTlVMTDtcbmRyaXZlcnMvbmV0L3BoeS9maXhlZF9waHkuYy00MS19XG5kcml2ZXJzL25ldC9waHkvZml4ZWRfcGh5LmMtNDItXG5kcml2ZXJzL25ldC9waHkvZml4ZWRfcGh5LmM6NDM6aW50IGZpeGVkX3BoeV9jaGFuZ2VfY2FycmllcihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBib29sIG5ld19jYXJyaWVyKVxuZHJpdmVycy9uZXQvcGh5L2ZpeGVkX3BoeS5jLTQ0LXtcbmRyaXZlcnMvbmV0L3BoeS9maXhlZF9waHkuYy00NS1cdHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYgPSBkZXYtXHUwMDNlcGh5ZGV2O1xuZHJpdmVycy9uZXQvcGh5L2ZpeGVkX3BoeS5jOjQ2Olx0c3RydWN0IGZpeGVkX3BoeSAqZnA7XG5kcml2ZXJzL25ldC9waHkvZml4ZWRfcGh5LmMtNDctXG4tLVxuZHJpdmVycy9uZXQvcGh5L2ZpeGVkX3BoeS5jLTUwLVxuZHJpdmVycy9uZXQvcGh5L2ZpeGVkX3BoeS5jOjUxOlx0ZnAgPSBmaXhlZF9waHlfZmluZChwaHlkZXYtXHUwMDNlbWRpby5hZGRyKTtcbmRyaXZlcnMvbmV0L3BoeS9maXhlZF9waHkuYy01Mi1cdGlmICghZnApXG4tLVxuZHJpdmVycy9uZXQvcGh5L2ZpeGVkX3BoeS5jLTU4LX1cbmRyaXZlcnMvbmV0L3BoeS9maXhlZF9waHkuYzo1OTpFWFBPUlRfU1lNQk9MX0dQTChmaXhlZF9waHlfY2hhbmdlX2NhcnJpZXIpO1xuZHJpdmVycy9uZXQvcGh5L2ZpeGVkX3BoeS5jLTYwLVxuZHJpdmVycy9uZXQvcGh5L2ZpeGVkX3BoeS5jPTYxPXN0YXRpYyBpbnQgZml4ZWRfbWRpb19yZWFkKHN0cnVjdCBtaWlfYnVzICpidXMsIGludCBwaHlfYWRkciwgaW50IHJlZ19udW0pXG5kcml2ZXJzL25ldC9waHkvZml4ZWRfcGh5LmMtNjIte1xuZHJpdmVycy9uZXQvcGh5L2ZpeGVkX3BoeS5jOjYzOlx0c3RydWN0IGZpeGVkX3BoeSAqZnA7XG5kcml2ZXJzL25ldC9waHkvZml4ZWRfcGh5LmMtNjQtXG5kcml2ZXJzL25ldC9waHkvZml4ZWRfcGh5LmM6NjU6XHRmcCA9IGZpeGVkX3BoeV9maW5kKHBoeV9hZGRyKTtcbmRyaXZlcnMvbmV0L3BoeS9maXhlZF9waHkuYy02Ni1cdGlmICghZnApXG4tLVxuZHJpdmVycy9uZXQvcGh5L2ZpeGVkX3BoeS5jPTc1PXN0YXRpYyBpbnQgZml4ZWRfbWRpb193cml0ZShzdHJ1Y3QgbWlpX2J1cyAqYnVzLCBpbnQgcGh5X2FkZHIsIGludCByZWdfbnVtLFxuLS1cbmRyaXZlcnMvbmV0L3BoeS9maXhlZF9waHkuYy04NS0gKi9cbmRyaXZlcnMvbmV0L3BoeS9maXhlZF9waHkuYzo4NjppbnQgZml4ZWRfcGh5X3NldF9saW5rX3VwZGF0ZShzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2LFxuZHJpdmVycy9uZXQvcGh5L2ZpeGVkX3BoeS5jLTg3LVx0XHRcdCAgICAgIGludCAoKmxpbmtfdXBkYXRlKShzdHJ1Y3QgbmV0X2RldmljZSAqLFxuZHJpdmVycy9uZXQvcGh5L2ZpeGVkX3BoeS5jOjg4Olx0XHRcdFx0XHRcdCBzdHJ1Y3QgZml4ZWRfcGh5X3N0YXR1cyAqKSlcbmRyaXZlcnMvbmV0L3BoeS9maXhlZF9waHkuYy04OS17XG5kcml2ZXJzL25ldC9waHkvZml4ZWRfcGh5LmM6OTA6XHRzdHJ1Y3QgZml4ZWRfcGh5ICpmcDtcbmRyaXZlcnMvbmV0L3BoeS9maXhlZF9waHkuYy05MS1cbi0tXG5kcml2ZXJzL25ldC9waHkvZml4ZWRfcGh5LmMtOTQtXG5kcml2ZXJzL25ldC9waHkvZml4ZWRfcGh5LmM6OTU6XHRmcCA9IGZpeGVkX3BoeV9maW5kKHBoeWRldi1cdTAwM2VtZGlvLmFkZHIpO1xuZHJpdmVycy9uZXQvcGh5L2ZpeGVkX3BoeS5jLTk2LVx0aWYgKCFmcClcbi0tXG5kcml2ZXJzL25ldC9waHkvZml4ZWRfcGh5LmMtMTAzLX1cbmRyaXZlcnMvbmV0L3BoeS9maXhlZF9waHkuYzoxMDQ6RVhQT1JUX1NZTUJPTF9HUEwoZml4ZWRfcGh5X3NldF9saW5rX3VwZGF0ZSk7XG5kcml2ZXJzL25ldC9waHkvZml4ZWRfcGh5LmMtMTA1LVxuZHJpdmVycy9uZXQvcGh5L2ZpeGVkX3BoeS5jOjEwNjpzdGF0aWMgdm9pZCBmaXhlZF9waHlfZGVsKGludCBwaHlfYWRkcilcbmRyaXZlcnMvbmV0L3BoeS9maXhlZF9waHkuYy0xMDcte1xuZHJpdmVycy9uZXQvcGh5L2ZpeGVkX3BoeS5jOjEwODpcdHN0cnVjdCBmaXhlZF9waHkgKmZwO1xuZHJpdmVycy9uZXQvcGh5L2ZpeGVkX3BoeS5jLTEwOS1cbmRyaXZlcnMvbmV0L3BoeS9maXhlZF9waHkuYzoxMTA6XHRmcCA9IGZpeGVkX3BoeV9maW5kKHBoeV9hZGRyKTtcbmRyaXZlcnMvbmV0L3BoeS9maXhlZF9waHkuYy0xMTEtXHRpZiAoIWZwKVxuLS1cbmRyaXZlcnMvbmV0L3BoeS9maXhlZF9waHkuYy0xMTQtXHRtZW1zZXQoZnAsIDAsIHNpemVvZigqZnApKTtcbmRyaXZlcnMvbmV0L3BoeS9maXhlZF9waHkuYzoxMTU6XHRjbGVhcl9iaXQocGh5X2FkZHIsIGZpeGVkX3BoeV9pZHMpO1xuZHJpdmVycy9uZXQvcGh5L2ZpeGVkX3BoeS5jLTExNi19XG5kcml2ZXJzL25ldC9waHkvZml4ZWRfcGh5LmMtMTE3LVxuZHJpdmVycy9uZXQvcGh5L2ZpeGVkX3BoeS5jOjExODpzdGF0aWMgaW50IGZpeGVkX3BoeV9nZXRfZnJlZV9hZGRyKHZvaWQpXG5kcml2ZXJzL25ldC9waHkvZml4ZWRfcGh5LmMtMTE5LXtcbi0tXG5kcml2ZXJzL25ldC9waHkvZml4ZWRfcGh5LmMtMTIyLVx0ZG8ge1xuZHJpdmVycy9uZXQvcGh5L2ZpeGVkX3BoeS5jOjEyMzpcdFx0YWRkciA9IGZpbmRfZmlyc3RfemVyb19iaXQoZml4ZWRfcGh5X2lkcywgTlVNX0ZQKTtcbmRyaXZlcnMvbmV0L3BoeS9maXhlZF9waHkuYy0xMjQtXHRcdGlmIChhZGRyID09IE5VTV9GUClcbmRyaXZlcnMvbmV0L3BoeS9maXhlZF9waHkuYy0xMjUtXHRcdFx0cmV0dXJuIC1FTk9TUEM7XG5kcml2ZXJzL25ldC9waHkvZml4ZWRfcGh5LmM6MTI2Olx0fSB3aGlsZSAodGVzdF9hbmRfc2V0X2JpdChhZGRyLCBmaXhlZF9waHlfaWRzKSk7XG5kcml2ZXJzL25ldC9waHkvZml4ZWRfcGh5LmMtMTI3LVxuLS1cbmRyaXZlcnMvbmV0L3BoeS9maXhlZF9waHkuYy0xMzAtXG5kcml2ZXJzL25ldC9waHkvZml4ZWRfcGh5LmM6MTMxOnN0cnVjdCBwaHlfZGV2aWNlICpmaXhlZF9waHlfcmVnaXN0ZXIoY29uc3Qgc3RydWN0IGZpeGVkX3BoeV9zdGF0dXMgKnN0YXR1cyxcbmRyaXZlcnMvbmV0L3BoeS9maXhlZF9waHkuYy0xMzItXHRcdFx0XHQgICAgICBzdHJ1Y3QgZGV2aWNlX25vZGUgKm5wKVxuLS1cbmRyaXZlcnMvbmV0L3BoeS9maXhlZF9waHkuYy0xNDUtXHQvKiBHZXQgdGhlIG5leHQgYXZhaWxhYmxlIFBIWSBhZGRyZXNzLCB1cCB0byBOVU1fRlAgKi9cbmRyaXZlcnMvbmV0L3BoeS9maXhlZF9waHkuYzoxNDY6XHRwaHlfYWRkciA9IGZpeGVkX3BoeV9nZXRfZnJlZV9hZGRyKCk7XG5kcml2ZXJzL25ldC9waHkvZml4ZWRfcGh5LmMtMTQ3LVx0aWYgKHBoeV9hZGRyIFx1MDAzYyAwKVxuLS1cbmRyaXZlcnMvbmV0L3BoeS9maXhlZF9waHkuYy0xNDktXG5kcml2ZXJzL25ldC9waHkvZml4ZWRfcGh5LmM6MTUwOlx0Zm1iX2ZpeGVkX3BoeXNbcGh5X2FkZHJdLnN0YXR1cyA9ICpzdGF0dXM7XG5kcml2ZXJzL25ldC9waHkvZml4ZWRfcGh5LmM6MTUxOlx0Zm1iX2ZpeGVkX3BoeXNbcGh5X2FkZHJdLnN0YXR1cy5saW5rID0gdHJ1ZTtcbmRyaXZlcnMvbmV0L3BoeS9maXhlZF9waHkuYy0xNTItXG4tLVxuZHJpdmVycy9uZXQvcGh5L2ZpeGVkX3BoeS5jLTE1NC1cdGlmIChJU19FUlIocGh5KSkge1xuZHJpdmVycy9uZXQvcGh5L2ZpeGVkX3BoeS5jOjE1NTpcdFx0Zml4ZWRfcGh5X2RlbChwaHlfYWRkcik7XG5kcml2ZXJzL25ldC9waHkvZml4ZWRfcGh5LmMtMTU2LVx0XHRyZXR1cm4gRVJSX1BUUigtRUlOVkFMKTtcbi0tXG5kcml2ZXJzL25ldC9waHkvZml4ZWRfcGh5LmMtMTY2LVx0XHRvZl9ub2RlX3B1dChucCk7XG5kcml2ZXJzL25ldC9waHkvZml4ZWRfcGh5LmM6MTY3Olx0XHRmaXhlZF9waHlfZGVsKHBoeV9hZGRyKTtcbmRyaXZlcnMvbmV0L3BoeS9maXhlZF9waHkuYy0xNjgtXHRcdHJldHVybiBFUlJfUFRSKHJldCk7XG4tLVxuZHJpdmVycy9uZXQvcGh5L2ZpeGVkX3BoeS5jLTE3Mi19XG5kcml2ZXJzL25ldC9waHkvZml4ZWRfcGh5LmM6MTczOkVYUE9SVF9TWU1CT0xfR1BMKGZpeGVkX3BoeV9yZWdpc3Rlcik7XG5kcml2ZXJzL25ldC9waHkvZml4ZWRfcGh5LmMtMTc0LVxuZHJpdmVycy9uZXQvcGh5L2ZpeGVkX3BoeS5jOjE3NTpzdHJ1Y3QgcGh5X2RldmljZSAqZml4ZWRfcGh5X3JlZ2lzdGVyXzEwMGZkKHZvaWQpXG5kcml2ZXJzL25ldC9waHkvZml4ZWRfcGh5LmMtMTc2LXtcbmRyaXZlcnMvbmV0L3BoeS9maXhlZF9waHkuYzoxNzc6XHRzdGF0aWMgY29uc3Qgc3RydWN0IGZpeGVkX3BoeV9zdGF0dXMgc3RhdHVzID0ge1xuZHJpdmVycy9uZXQvcGh5L2ZpeGVkX3BoeS5jLTE3OC1cdFx0LnNwZWVkXHQ9IFNQRUVEXzEwMCxcbi0tXG5kcml2ZXJzL25ldC9waHkvZml4ZWRfcGh5LmMtMTgxLVxuZHJpdmVycy9uZXQvcGh5L2ZpeGVkX3BoeS5jOjE4MjpcdHJldHVybiBmaXhlZF9waHlfcmVnaXN0ZXIoXHUwMDI2c3RhdHVzLCBOVUxMKTtcbmRyaXZlcnMvbmV0L3BoeS9maXhlZF9waHkuYy0xODMtfVxuZHJpdmVycy9uZXQvcGh5L2ZpeGVkX3BoeS5jOjE4NDpFWFBPUlRfU1lNQk9MX0dQTChmaXhlZF9waHlfcmVnaXN0ZXJfMTAwZmQpO1xuZHJpdmVycy9uZXQvcGh5L2ZpeGVkX3BoeS5jLTE4NS1cbmRyaXZlcnMvbmV0L3BoeS9maXhlZF9waHkuYzoxODY6dm9pZCBmaXhlZF9waHlfdW5yZWdpc3RlcihzdHJ1Y3QgcGh5X2RldmljZSAqcGh5KVxuZHJpdmVycy9uZXQvcGh5L2ZpeGVkX3BoeS5jLTE4Ny17XG4tLVxuZHJpdmVycy9uZXQvcGh5L2ZpeGVkX3BoeS5jLTE4OS1cdG9mX25vZGVfcHV0KHBoeS1cdTAwM2VtZGlvLmRldi5vZl9ub2RlKTtcbmRyaXZlcnMvbmV0L3BoeS9maXhlZF9waHkuYzoxOTA6XHRmaXhlZF9waHlfZGVsKHBoeS1cdTAwM2VtZGlvLmFkZHIpO1xuZHJpdmVycy9uZXQvcGh5L2ZpeGVkX3BoeS5jLTE5MS1cdHBoeV9kZXZpY2VfZnJlZShwaHkpO1xuZHJpdmVycy9uZXQvcGh5L2ZpeGVkX3BoeS5jLTE5Mi19XG5kcml2ZXJzL25ldC9waHkvZml4ZWRfcGh5LmM6MTkzOkVYUE9SVF9TWU1CT0xfR1BMKGZpeGVkX3BoeV91bnJlZ2lzdGVyKTtcbmRyaXZlcnMvbmV0L3BoeS9maXhlZF9waHkuYy0xOTQtXG4tLVxuZHJpdmVycy9uZXQvcGh5L3BoeWxpbmsuYz0zMzYxPXN0YXRpYyBpbnQgcGh5bGlua19taWlfZW11bF9yZWFkKHVuc2lnbmVkIGludCByZWcsXG4tLVxuZHJpdmVycy9uZXQvcGh5L3BoeWxpbmsuYy0zMzYzLXtcbmRyaXZlcnMvbmV0L3BoeS9waHlsaW5rLmM6MzM2NDpcdHN0cnVjdCBmaXhlZF9waHlfc3RhdHVzIGZzO1xuZHJpdmVycy9uZXQvcGh5L3BoeWxpbmsuYy0zMzY1LVx0dW5zaWduZWQgbG9uZyAqbHBhID0gc3RhdGUtXHUwMDNlbHBfYWR2ZXJ0aXNpbmc7XG4tLVxuZHJpdmVycy9uZXQvcGh5L3N3cGh5LmMtNC0gKlxuZHJpdmVycy9uZXQvcGh5L3N3cGh5LmM6NTogKiBDb2RlIHRha2VuIGZyb20gZml4ZWRfcGh5LmMgYnkgUnVzc2VsbCBLaW5nLlxuZHJpdmVycy9uZXQvcGh5L3N3cGh5LmMtNi0gKlxuLS1cbmRyaXZlcnMvbmV0L3BoeS9zd3BoeS5jPTcxPXN0YXRpYyBpbnQgc3dwaHlfZGVjb2RlX3NwZWVkKGludCBzcGVlZClcbi0tXG5kcml2ZXJzL25ldC9waHkvc3dwaHkuYy05Mi0gKi9cbmRyaXZlcnMvbmV0L3BoeS9zd3BoeS5jOjkzOmludCBzd3BoeV92YWxpZGF0ZV9zdGF0ZShjb25zdCBzdHJ1Y3QgZml4ZWRfcGh5X3N0YXR1cyAqc3RhdGUpXG5kcml2ZXJzL25ldC9waHkvc3dwaHkuYy05NC17XG4tLVxuZHJpdmVycy9uZXQvcGh5L3N3cGh5LmM9MTA2PUVYUE9SVF9TWU1CT0xfR1BMKHN3cGh5X3ZhbGlkYXRlX3N0YXRlKTtcbi0tXG5kcml2ZXJzL25ldC9waHkvc3dwaHkuYy0xMTQtICovXG5kcml2ZXJzL25ldC9waHkvc3dwaHkuYzoxMTU6aW50IHN3cGh5X3JlYWRfcmVnKGludCByZWcsIGNvbnN0IHN0cnVjdCBmaXhlZF9waHlfc3RhdHVzICpzdGF0ZSlcbmRyaXZlcnMvbmV0L3BoeS9zd3BoeS5jLTExNi17XG4tLVxuZHJpdmVycy9uZXQvcGh5L3N3cGh5LmgtNC1cbmRyaXZlcnMvbmV0L3BoeS9zd3BoeS5oOjU6c3RydWN0IGZpeGVkX3BoeV9zdGF0dXM7XG5kcml2ZXJzL25ldC9waHkvc3dwaHkuaC02LVxuZHJpdmVycy9uZXQvcGh5L3N3cGh5Lmg6NzppbnQgc3dwaHlfdmFsaWRhdGVfc3RhdGUoY29uc3Qgc3RydWN0IGZpeGVkX3BoeV9zdGF0dXMgKnN0YXRlKTtcbmRyaXZlcnMvbmV0L3BoeS9zd3BoeS5oOjg6aW50IHN3cGh5X3JlYWRfcmVnKGludCByZWcsIGNvbnN0IHN0cnVjdCBmaXhlZF9waHlfc3RhdHVzICpzdGF0ZSk7XG5kcml2ZXJzL25ldC9waHkvc3dwaHkuaC05LVxuLS1cbmluY2x1ZGUvbGludXgvcGh5X2ZpeGVkLmgtNi1cbmluY2x1ZGUvbGludXgvcGh5X2ZpeGVkLmg6NzpzdHJ1Y3QgZml4ZWRfcGh5X3N0YXR1cyB7XG5pbmNsdWRlL2xpbnV4L3BoeV9maXhlZC5oLTgtXHRpbnQgc3BlZWQ7XG4tLVxuaW5jbHVkZS9saW51eC9waHlfZml4ZWQuaD0xNj1zdHJ1Y3QgbmV0X2RldmljZTtcbi0tXG5pbmNsdWRlL2xpbnV4L3BoeV9maXhlZC5oLTE4LSNpZiBJU19FTkFCTEVEKENPTkZJR19GSVhFRF9QSFkpXG5pbmNsdWRlL2xpbnV4L3BoeV9maXhlZC5oOjE5OmV4dGVybiBpbnQgZml4ZWRfcGh5X2NoYW5nZV9jYXJyaWVyKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGJvb2wgbmV3X2NhcnJpZXIpO1xuaW5jbHVkZS9saW51eC9waHlfZml4ZWQuaDoyMDpzdHJ1Y3QgcGh5X2RldmljZSAqZml4ZWRfcGh5X3JlZ2lzdGVyKGNvbnN0IHN0cnVjdCBmaXhlZF9waHlfc3RhdHVzICpzdGF0dXMsXG5pbmNsdWRlL2xpbnV4L3BoeV9maXhlZC5oLTIxLVx0XHRcdFx0ICAgICAgc3RydWN0IGRldmljZV9ub2RlICpucCk7XG5pbmNsdWRlL2xpbnV4L3BoeV9maXhlZC5oOjIyOnN0cnVjdCBwaHlfZGV2aWNlICpmaXhlZF9waHlfcmVnaXN0ZXJfMTAwZmQodm9pZCk7XG5pbmNsdWRlL2xpbnV4L3BoeV9maXhlZC5oLTIzLVxuaW5jbHVkZS9saW51eC9waHlfZml4ZWQuaDoyNDpleHRlcm4gdm9pZCBmaXhlZF9waHlfdW5yZWdpc3RlcihzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KTtcbmluY2x1ZGUvbGludXgvcGh5X2ZpeGVkLmg6MjU6ZXh0ZXJuIGludCBmaXhlZF9waHlfc2V0X2xpbmtfdXBkYXRlKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYsXG5pbmNsdWRlL2xpbnV4L3BoeV9maXhlZC5oLTI2LVx0XHRcdGludCAoKmxpbmtfdXBkYXRlKShzdHJ1Y3QgbmV0X2RldmljZSAqLFxuaW5jbHVkZS9saW51eC9waHlfZml4ZWQuaDoyNzpcdFx0XHRcdFx0ICAgc3RydWN0IGZpeGVkX3BoeV9zdGF0dXMgKikpO1xuaW5jbHVkZS9saW51eC9waHlfZml4ZWQuaC0yOC0jZWxzZVxuaW5jbHVkZS9saW51eC9waHlfZml4ZWQuaD0yOT1zdGF0aWMgaW5saW5lIHN0cnVjdCBwaHlfZGV2aWNlICpcbmluY2x1ZGUvbGludXgvcGh5X2ZpeGVkLmg6MzA6Zml4ZWRfcGh5X3JlZ2lzdGVyKGNvbnN0IHN0cnVjdCBmaXhlZF9waHlfc3RhdHVzICpzdGF0dXMsXG5pbmNsdWRlL2xpbnV4L3BoeV9maXhlZC5oLTMxLVx0XHQgICBzdHJ1Y3QgZGV2aWNlX25vZGUgKm5wKVxuLS1cbmluY2x1ZGUvbGludXgvcGh5X2ZpeGVkLmgtMzUtXG5pbmNsdWRlL2xpbnV4L3BoeV9maXhlZC5oOjM2OnN0YXRpYyBpbmxpbmUgc3RydWN0IHBoeV9kZXZpY2UgKmZpeGVkX3BoeV9yZWdpc3Rlcl8xMDBmZCh2b2lkKVxuaW5jbHVkZS9saW51eC9waHlfZml4ZWQuaC0zNy17XG4tLVxuaW5jbHVkZS9saW51eC9waHlfZml4ZWQuaC00MC1cbmluY2x1ZGUvbGludXgvcGh5X2ZpeGVkLmg6NDE6c3RhdGljIGlubGluZSB2b2lkIGZpeGVkX3BoeV91bnJlZ2lzdGVyKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXG5pbmNsdWRlL2xpbnV4L3BoeV9maXhlZC5oLTQyLXtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMyAwNzozNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxODgwMwoJCQkJCQkJb3V0cHV0OiAzMQoJCQkJCQkJdGhvdWdodHM6IDI1MwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBDdXJyZW50IExpbmUgb2YgUmVhc29uaW5nKioKCk9rYXksIHNvIEkmIzM5O20gdHJ5aW5nIHRvIGZpZ3VyZSBvdXQgaG93IHRvIHRlc3QgdGhlc2UgUmVhbHRlayBQSFkgZHJpdmVycyBpbiBhIHZpcnR1YWwgZW52aXJvbm1lbnQuIEZpcnN0IHRob3VnaHQsIGBmaXhlZF9waHlgIHdvbiYjMzk7dCB3b3JrIOKAkyB0aGF0JiMzOTtzIGZvciBmaXhlZCBsaW5rcywgbm90IHRoZSBkeW5hbWljIG5hdHVyZSBvZiBhIFJlYWx0ZWsgUEhZLiBJIG5lZWQgc29tZXRoaW5nIHRoYXQgKnNpbXVsYXRlcyogYSBSZWFsdGVrIFBIWS4gQ2FuIEkgZXZlbiBpbnN0YW50aWF0ZSBvbmUgdmlydHVhbGx5PwoKVXNpbmcgdGhpbmdzIGxpa2UgYG5ldGRldnNpbWAsIGBkdW1teWAsIG9yIGB2ZXRoYCBpcyBhIGRlYWQgZW5kOyB0aGV5IGRvbiYjMzk7dCBpbnZvbHZlIFBIWXMgYXQgYWxsLiBCdXQgd2FpdOKApiBTeXprYWxsZXIgdXNlcyBgdHVuYCwgYHRhcGAsIGFuZCBgdmV0aGAsIGRvZXNuJiMzOTt0IGl0PyBDb3VsZCBTeXprYWxsZXIgYmUgdXNlZCB0byBmdXp6IFBIWSBkcml2ZXJzPyBJdCBoYXMgYSBgc3l6X2dlbmV0bGlua2AgaW50ZXJmYWNlLCBkb2VzbiYjMzk7dCBpdD8gSXMgdGhlcmUgYW4gYGV0aHRvb2xgIG5ldGxpbmsgaW50ZXJmYWNlPyBQZXJoYXBzIEkgY2FuIHRyaWdnZXIgUEhZIG9wZXJhdGlvbnMgb24gYSB2aXJ0dWFsIGRldmljZSB1c2luZyB0aGF0LgoKSG93ZXZlciwgdmlydHVhbCBkZXZpY2VzIHR5cGljYWxseSBkb24mIzM5O3QgKmhhdmUqIGEgUEhZIGRldmljZSBhdHRhY2hlZCwgYW5kIEkgbmVlZCBhIGRldmljZSB0byB0ZXN0IHRoZSBwaHkgZnVuY3Rpb25hbGl0eS4gQnV0LCBoYW5nIG9uLi4uIHdoYXQgYWJvdXQgYG1hY3ZsYW5gIG9yIGB2bGFuYD8gVGhvc2Ugc2l0ICpvbiB0b3AqIG9mIGEgcmVhbCBkZXZpY2UsIGJ1dCBpZiB0aGVyZSYjMzk7cyBubyByZWFsIGRldmljZSwgdGhlbiB0aGVyZSYjMzk7cyBubyBQSFkuCgpBaGEhIFdhaXTigKYgVVNCIG5ldHdvcmsgYWRhcHRlcnMhIFN5emthbGxlciBmdXp6ZXMgVVNCIGRldmljZXMsIHVzaW5nIGBkdW1teV9oY2RgIGFuZCBgc3l6X3VzYl9jb25uZWN0YC4gTWFueSBVU0IgbmV0d29yayBkcml2ZXJzICpkbyogdXNlIFBIWXMhIFRoaXMgY291bGQgYmUgdGhlIHNvbHV0aW9uLgoKVGhlIGtleSBxdWVzdGlvbiBub3cgaXMsIGRvZXMgKmFueSogVVNCIG5ldHdvcmsgZHJpdmVyIHVzZSBNRElPIGFuZCBhbGxvdyBhIFJlYWx0ZWsgUEhZIHRvIGJlIGF0dGFjaGVkPyBMZXQmIzM5O3MgY2hlY2sgdGhhdCBhbmdsZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDMgMDc6MzY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bWRpb2J1c19yZWdpc3RlciYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3VzYi8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvdXNiL2FzaXhfZGV2aWNlcy5jPTY2OT1zdGF0aWMgaW50IGF4ODg3NzJfaW5pdF9tZGlvKHN0cnVjdCB1c2JuZXQgKmRldilcbi0tXG5kcml2ZXJzL25ldC91c2IvYXNpeF9kZXZpY2VzLmMtNjg2LVxuZHJpdmVycy9uZXQvdXNiL2FzaXhfZGV2aWNlcy5jOjY4NzpcdHJldCA9IG1kaW9idXNfcmVnaXN0ZXIocHJpdi1cdTAwM2VtZGlvKTtcbmRyaXZlcnMvbmV0L3VzYi9hc2l4X2RldmljZXMuYy02ODgtXHRpZiAocmV0KSB7XG4tLVxuZHJpdmVycy9uZXQvdXNiL2F4ODgxNzJhLmM9NjE9c3RhdGljIGludCBheDg4MTcyYV9pbml0X21kaW8oc3RydWN0IHVzYm5ldCAqZGV2KVxuLS1cbmRyaXZlcnMvbmV0L3VzYi9heDg4MTcyYS5jLTc5LVxuZHJpdmVycy9uZXQvdXNiL2F4ODgxNzJhLmM6ODA6XHRyZXQgPSBtZGlvYnVzX3JlZ2lzdGVyKHByaXYtXHUwMDNlbWRpbyk7XG5kcml2ZXJzL25ldC91c2IvYXg4ODE3MmEuYy04MS1cdGlmIChyZXQpIHtcbi0tXG5kcml2ZXJzL25ldC91c2IvbGFuNzh4eC5jPTIwNzA9c3RhdGljIGludCBsYW43OHh4X21kaW9faW5pdChzdHJ1Y3QgbGFuNzh4eF9uZXQgKmRldilcbi0tXG5kcml2ZXJzL25ldC91c2IvbGFuNzh4eC5jLTIxMDAtXHRub2RlID0gb2ZfZ2V0X2NoaWxkX2J5X25hbWUoZGV2LVx1MDAzZXVkZXYtXHUwMDNlZGV2Lm9mX25vZGUsIFwmIzM0O21kaW9cJiMzNDspO1xuZHJpdmVycy9uZXQvdXNiL2xhbjc4eHguYzoyMTAxOlx0cmV0ID0gb2ZfbWRpb2J1c19yZWdpc3RlcihkZXYtXHUwMDNlbWRpb2J1cywgbm9kZSk7XG5kcml2ZXJzL25ldC91c2IvbGFuNzh4eC5jLTIxMDItXHRvZl9ub2RlX3B1dChub2RlKTtcbi0tXG5kcml2ZXJzL25ldC91c2Ivc21zYzk1eHguYz0xMTQ3PXN0YXRpYyBpbnQgc21zYzk1eHhfYmluZChzdHJ1Y3QgdXNibmV0ICpkZXYsIHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmKVxuLS1cbmRyaXZlcnMvbmV0L3VzYi9zbXNjOTV4eC5jLTEyNDEtXG5kcml2ZXJzL25ldC91c2Ivc21zYzk1eHguYzoxMjQyOlx0cmV0ID0gbWRpb2J1c19yZWdpc3RlcihwZGF0YS1cdTAwM2VtZGlvYnVzKTtcbmRyaXZlcnMvbmV0L3VzYi9zbXNjOTV4eC5jLTEyNDMtXHRpZiAocmV0KSB7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAzIDA3OjM2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE5OTc0CgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogNzA0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKlJlYWxpemluZyB0aGUgUlRMODI2MUMgUEhZIERyaXZlciBJbnN0YW50aWF0aW9uIE9wcG9ydHVuaXR5KioKCk9rYXksIHRoaXMgaXMgcHJvbWlzaW5nLiBVU0IgbmV0d29yayBhZGFwdGVycyBsaWtlIGBhc2l4YCwgYHNtc2M5NXh4YCwgYW5kIGBsYW43OHh4YCBhbGwgcmVnaXN0ZXIgYW4gTURJTyBidXMuIFRoYXQmIzM5O3Mga2V5LiBBbmQgd2hlbiB0aGF0IE1ESU8gYnVzIGdldHMgcmVnaXN0ZXJlZCwgaXQgc2NhbnMgZm9yIFBIWXMuIE5vdywgaWYgSSBjYW4gY3JhZnQgYSBtb2NrIFVTQiBkZXZpY2UgdXNpbmcgc3l6a2FsbGVyIHRoYXQgKnNwZWNpZmljYWxseSogcmVzcG9uZHMgdG8gTURJTyByZWFkcyB3aXRoIHRoZSBjb3JyZWN0IFBIWSBJRCBmb3IgdGhlIFJUTDgyNjFDLCBJIGNhbiB0cmljayB0aGUga2VybmVsIGludG8gaW5zdGFudGlhdGluZyB0aGUgUmVhbHRlayBQSFkgZHJpdmVyLgoKVGhlIFBIWSBJRCBmb3IgdGhlIFJUTDgyNjFDIGlzIGBSVExfODI2MUNfQ0dgLCB3aGljaCB0cmFuc2xhdGVzIHRvIGAweDAwMWNjODk4YC4gU28sIGlmIHRoZSBVU0IgZGV2aWNlIEkgY3JlYXRlIHJlc3BvbmRzIHdpdGggYDB4MDAxY2Agb24gcmVnaXN0ZXIgMiBhbmQgYDB4Yzg5OGAgb24gcmVnaXN0ZXIgMyBkdXJpbmcgYW4gTURJTyByZWFkLCB0aGUgTURJTyBidXMgKnNob3VsZCogbWF0Y2ggaXQgdG8gdGhlIFJlYWx0ZWsgUEhZIGRyaXZlciBhbmQgY2FsbCBpdHMgcHJvYmUgZnVuY3Rpb24hIExldCYjMzk7cyB2ZXJpZnkgdGhpcy4KCkkmIzM5O2xsIGNoZWNrIHRoZSBkcml2ZXIgY29kZTsgaXQmIzM5O3MgaW4gYGRyaXZlcnMvbmV0L3BoeS9yZWFsdGVrL3JlYWx0ZWtfbWFpbi5jYC4gQWgsIHllcywgdGhlIHBhdGNoIGV4cGxpY2l0bHkgYWRkcyBhIG1hdGNoIGZvciB0aGF0IFBIWSBJRDoKCmBgYGMKCXsKCQlQSFlfSURfTUFUQ0hfRVhBQ1QoUlRMXzgyNjFDX0NHKSwKCQkubmFtZQkJCT0gJiMzNDtSZWFsdGVrIFJUTDgyNjFDIDEwR2JwcyBQSFkmIzM0OywKCQkucHJvYmUJCQk9IHJ0bDgyNjF4X3Byb2JlLAoJCS8vIC4uLiAob3RoZXIgZnVuY3Rpb25zKQoJfSwKYGBgCgpTbywgaWYgdGhlIE1ESU8gYnVzIGRldGVjdHMgdGhpcyBQSFkgSUQsIGl0JiMzOTtsbCBiaW5kIHRvIHRoaXMgZHJpdmVyLCB3aGljaCBjb250YWlucyBhbGwgdGhlIHJlcXVpcmVkIGZ1bmN0aW9uYWxpdHkuIE5vdywgYSBjcnVjaWFsIGRldGFpbCDigJMgaXMgdGhpcyBhIENsYXVzZSAyMiBvciBhIENsYXVzZSA0NSBQSFk/IFRoZSBwcmVzZW5jZSBvZiBgZ2VucGh5X2M0NV9wbWFfc29mdF9yZXNldGAgaW4gdGhlIGRyaXZlciBzdWdnZXN0cyBpdCBtaWdodCBiZSBDbGF1c2UgNDUuCgpJIG5lZWQgdG8gY29uZmlybSB0aGF0IGBhc2l4YCBhbmQgYHNtc2M5NXh4YCAodGhlIHBvdGVudGlhbCBVU0IgYWRhcHRlciBkcml2ZXJzKSBzdXBwb3J0IENsYXVzZSA0NSBNRElPIHJlYWRzLiBJZiB0aGV5IGRvbiYjMzk7dCwgSSBuZWVkIHRvIGZpZ3VyZSBvdXQgaWYgYSBDbGF1c2UgMjIgTURJTyBidXMgY2FuIGluc3RhbnRpYXRlIGEgQ2xhdXNlIDQ1IFBIWS4gU29tZSBQSFlzIGFyZSBmbGV4aWJsZSBhbmQgaGFuZGxlIGJvdGguIFRoZSBkcml2ZXIgc2VlbXMgdG8gYmUgdXNpbmcgYE1ESU9fTU1EX1ZFTkQyYCBhbmQgYE1ESU9fTU1EX1BNQVBNRGAsIHdoaWNoIGFyZSBkZWZpbml0ZWx5IENsYXVzZSA0NSBNTURzLiBHb29kLiAqSG93ZXZlciosIGBwaHlfcmVhZF9tbWRgICpjYW4qIGFjdHVhbGx5IHdvcmsgb3ZlciBDbGF1c2UgMjIgdXNpbmcgaW5kaXJlY3QgYWNjZXNzIChyZWdpc3RlcnMgMTMgYW5kIDE0KSBpZiB0aGUgUEhZIHN1cHBvcnRzIGl0LiBUaGF0JiMzOTtzIGEgdml0YWwgcG9pbnQuCgpBbmQsIGFyZSB0aGVyZSBldmVuIFVTQiBuZXR3b3JrIGFkYXB0ZXJzIHRoYXQgYXJlIENsYXVzZSA0NSBjb21wbGlhbnQ/IFllcywgc29tZXRoaW5nIGxpa2UgYEFxdWFudGlhYCBzaG91bGQgcHJvdmlkZSBhIGdvb2QgcmVmZXJlbmNlLiBUaW1lIHRvIGNoZWNrIGBkcml2ZXJzL25ldC91c2IvYCB0byBzZWUgaWYgdGhlcmUgYXJlIGdvb2QgZXhhbXBsZXMgb2YgQ2xhdXNlIDQ1IHN1cHBvcnQuIEkmIzM5O20gZ2V0dGluZyBjbG9zZXIuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAzIDA3OjM3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5FcnJvcjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm5vIG1hdGNoZXM8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7TURJT18uKl9DNDUmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC91c2IvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O2Vycm9yJiMzNDs6ICYjMzQ7bm8gbWF0Y2hlcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDMgMDc6Mzc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjEzODMKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiAyMQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UgYW5kIHdyaXR0ZW4gaW4gdGhlIGZpcnN0IHBlcnNvbjoKCioqRGVjb2RpbmcgdGhlIE1JSV9BRERSX0M0NSBGbGFnKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIGZsYWcsIGBNSUlfQUREUl9DNDVgLiBJbnN0YW50bHksIGl0IGNsaWNrcy4gKlRoYXQmIzM5O3MqIHRoZSBDbGF1c2UgNDUgaW5kaWNhdG9yISBSaWdodCwgQ2xhdXNlIDQ1IE1JSSByZWdpc3RlcnMsIGdvdCBpdC4gVGhpcyBtZWFucyB3ZSYjMzk7cmUgZGVhbGluZyB3aXRoIHRoZSBhZHZhbmNlZCBtYW5hZ2VtZW50IGludGVyZmFjZS4gTm90IHRoZSBvbGQgQ2xhdXNlIDIyIHN0dWZmLiBOb3cgSSBuZWVkIHRvIHJlbWVtYmVyIHRoZSBudWFuY2VzIG9mIENsYXVzZSA0NSwgdGhlIHJlZ2lzdGVyIGFkZHJlc3Npbmcgc2NoZW1lLCB0aGUgZXh0ZW5kZWQgcmVnaXN0ZXJzLCB0aGXigKYgYWhhISBUaGlzIGV4cGxhaW5zIHRoZSBiaXQgcGF0dGVybiBJIHdhcyBzZWVpbmcgaW4gdGhlIGRhdGEuIFdpdGggQ2xhdXNlIDQ1LCB0aGUgYWRkcmVzc2luZyB3b3JrcyBkaWZmZXJlbnRseS4gSSBuZWVkIHRvIHJlLWV2YWx1YXRlIG15IGFzc3VtcHRpb24gd2l0aCB0aGUgdW5kZXJzdGFuZGluZyB0aGF0IEkmIzM5O20gbm90IGRlYWxpbmcgd2l0aCB0aGUgb2xkZXIsIG1vcmUgc3RyYWlnaHRmb3J3YXJkIE1JSSByZWdpc3RlciBzZXQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAzIDA3OjM3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5FcnJvcjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm5vIG1hdGNoZXM8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7TUlJX0FERFJfQzQ1JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvdXNiLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtlcnJvciYjMzQ7OiAmIzM0O25vIG1hdGNoZXMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAzIDA3OjM3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIxNjQxCgkJCQkJCQlvdXRwdXQ6IDMyCgkJCQkJCQl0aG91Z2h0czogNjMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIG15IG93bjoKCioqQW5hbHl6aW5nIFBIWSBBY2Nlc3MgaW4gYSBDbGF1c2UgMjIgTGltaXRlZCBFbnZpcm9ubWVudCoqCgpBbHJpZ2h0LCBzbyBldmVuIGlmIHdlJiMzOTtyZSBkZWFsaW5nIHdpdGggYSBVU0IgZHJpdmVyIHRoYXQmIzM5O3Mgb25seSBnaXZpbmcgdXMgQ2xhdXNlIDIyIHN1cHBvcnQsIEkga25vdyB0aGUgUEhZIGZyYW1ld29yayBpcyBjbGV2ZXIgZW5vdWdoIHRvIHN0aWxsIHRhcCBpbnRvIHRob3NlIENsYXVzZSA0NSByZWdpc3RlcnMuIEl04oCZbGwgZG8gdGhpcyB1c2luZyBpbmRpcmVjdCBhY2Nlc3MgdGhyb3VnaCB0aG9zZSByZWdpc3RlciBwYWlycywgMTMgYW5kIDE0LCBhcyBsb25nIGFzIHRoZSBidXMgaXRzZWxmIGRvZXNu4oCZdCBoYXZlIHRoZSBidWlsdC1pbiBjYXBhYmlsaXR5IHRvIGByZWFkX2M0NWAuIEkmIzM5O20gcHJldHR5IHN1cmUgSSYjMzk7dmUgc2VlbiB0aGF0IGJlaGF2aW9yIGltcGxlbWVudGVkIGJlZm9yZS4gVGhhdCYjMzk7cyBhIGdvb2QgYXBwcm9hY2guIExldCYjMzk7cyBzdGFydCBieSBkaWdnaW5nIGludG8gYHBoeV9yZWFkX21tZGAgYW5kIHNlZSBleGFjdGx5IGhvdyBpdCYjMzk7cyBoYW5kbGluZyB0aGlzIHNpdHVhdGlvbi4gVGltZSB0byBzZWUgdGhpcyBpbiBwcmFjdGljZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDMgMDc6Mzc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7cGh5X3JlYWRfbW1kJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvcGh5LyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtcbkZ1bGwgb3V0cHV0IGlzIHRvbyBsb25nLCBzaG93aW5nIDUwMCBvdXQgb2YgMjE3OCBsaW5lcy5cblVzZSBtb3JlIHByZWNpc2UgZXhwcmVzc2lvbiBpZiBwb3NzaWJsZS5cblxuZHJpdmVycy9uZXQvcGh5L2FkaW4uYz0yNzU9c3RhdGljIGludCBhZGluX2NvbmZpZ19yZ21paV9tb2RlKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXG4tLVxuZHJpdmVycy9uZXQvcGh5L2FkaW4uYy0yODQtXG5kcml2ZXJzL25ldC9waHkvYWRpbi5jOjI4NTpcdHJlZyA9IHBoeV9yZWFkX21tZChwaHlkZXYsIE1ESU9fTU1EX1ZFTkQxLCBBRElOMTMwMF9HRV9SR01JSV9DRkdfUkVHKTtcbmRyaXZlcnMvbmV0L3BoeS9hZGluLmMtMjg2LVx0aWYgKHJlZyBcdTAwM2MgMClcbi0tXG5kcml2ZXJzL25ldC9waHkvYWRpbi5jPTMyMT1zdGF0aWMgaW50IGFkaW5fY29uZmlnX3JtaWlfbW9kZShzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxuLS1cbmRyaXZlcnMvbmV0L3BoeS9hZGluLmMtMzMwLVxuZHJpdmVycy9uZXQvcGh5L2FkaW4uYzozMzE6XHRyZWcgPSBwaHlfcmVhZF9tbWQocGh5ZGV2LCBNRElPX01NRF9WRU5EMSwgQURJTjEzMDBfR0VfUk1JSV9DRkdfUkVHKTtcbmRyaXZlcnMvbmV0L3BoeS9hZGluLmMtMzMyLVx0aWYgKHJlZyBcdTAwM2MgMClcbi0tXG5kcml2ZXJzL25ldC9waHkvYWRpbi5jPTQ0MD1zdGF0aWMgaW50IGFkaW5fZ2V0X2Zhc3RfZG93bihzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2LCB1OCAqbXNlY3MpXG4tLVxuZHJpdmVycy9uZXQvcGh5L2FkaW4uYy00NDMtXG5kcml2ZXJzL25ldC9waHkvYWRpbi5jOjQ0NDpcdHJlZyA9IHBoeV9yZWFkX21tZChwaHlkZXYsIE1ESU9fTU1EX1ZFTkQxLCBBRElOMTMwMF9GTERfRU5fUkVHKTtcbmRyaXZlcnMvbmV0L3BoeS9hZGluLmMtNDQ1LVx0aWYgKHJlZyBcdTAwM2MgMClcbi0tXG5kcml2ZXJzL25ldC9waHkvYWRpbi5jPTc5NT1zdGF0aWMgaW50IGFkaW5fc29mdF9yZXNldChzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxuLS1cbmRyaXZlcnMvbmV0L3BoeS9hZGluLmMtODA4LVx0LyogSWYgd2UgZ2V0IGEgcmVhZCBlcnJvciBzb21ldGhpbmcgbWF5IGJlIHdyb25nICovXG5kcml2ZXJzL25ldC9waHkvYWRpbi5jOjgwOTpcdHJjID0gcGh5X3JlYWRfbW1kKHBoeWRldiwgTURJT19NTURfVkVORDEsXG5kcml2ZXJzL25ldC9waHkvYWRpbi5jLTgxMC1cdFx0XHQgIEFESU4xMzAwX0dFX1NPRlRfUkVTRVRfUkVHKTtcbi0tXG5kcml2ZXJzL25ldC9waHkvYWRpbi5jPTgyOD1zdGF0aWMgaW50IGFkaW5fcmVhZF9tbWRfc3RhdF9yZWdzKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYsXG4tLVxuZHJpdmVycy9uZXQvcGh5L2FkaW4uYy04MzMtXG5kcml2ZXJzL25ldC9waHkvYWRpbi5jOjgzNDpcdHJldCA9IHBoeV9yZWFkX21tZChwaHlkZXYsIE1ESU9fTU1EX1ZFTkQxLCBzdGF0LVx1MDAzZXJlZzEpO1xuZHJpdmVycy9uZXQvcGh5L2FkaW4uYy04MzUtXHRpZiAocmV0IFx1MDAzYyAwKVxuLS1cbmRyaXZlcnMvbmV0L3BoeS9hZGluLmMtODQyLVxuZHJpdmVycy9uZXQvcGh5L2FkaW4uYzo4NDM6XHRyZXQgPSBwaHlfcmVhZF9tbWQocGh5ZGV2LCBNRElPX01NRF9WRU5EMSwgc3RhdC1cdTAwM2VyZWcyKTtcbmRyaXZlcnMvbmV0L3BoeS9hZGluLmMtODQ0LVx0aWYgKHJldCBcdTAwM2MgMClcbi0tXG5kcml2ZXJzL25ldC9waHkvYWRpbi5jPTk0NT1zdGF0aWMgaW50IGFkaW5fY2FibGVfdGVzdF9yZXBvcnRfcGFpcihzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2LFxuLS1cbmRyaXZlcnMvbmV0L3BoeS9hZGluLmMtOTUwLVxuZHJpdmVycy9uZXQvcGh5L2FkaW4uYzo5NTE6XHRyZXQgPSBwaHlfcmVhZF9tbWQocGh5ZGV2LCBNRElPX01NRF9WRU5EMSxcbmRyaXZlcnMvbmV0L3BoeS9hZGluLmMtOTUyLVx0XHRcdCAgIEFESU4xMzAwX0NESUFHX0RUTERfUlNMVFMocGFpcikpO1xuLS1cbmRyaXZlcnMvbmV0L3BoeS9hZGluLmMtOTYxLVxuZHJpdmVycy9uZXQvcGh5L2FkaW4uYzo5NjI6XHRyZXQgPSBwaHlfcmVhZF9tbWQocGh5ZGV2LCBNRElPX01NRF9WRU5EMSxcbmRyaXZlcnMvbmV0L3BoeS9hZGluLmMtOTYzLVx0XHRcdCAgIEFESU4xMzAwX0NESUFHX0ZMVF9ESVNUKHBhaXIpKTtcbi0tXG5kcml2ZXJzL25ldC9waHkvYWRpbi5jPTk5MT1zdGF0aWMgaW50IGFkaW5fY2FibGVfdGVzdF9nZXRfc3RhdHVzKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYsXG4tLVxuZHJpdmVycy9uZXQvcGh5L2FkaW4uYy05OTctXG5kcml2ZXJzL25ldC9waHkvYWRpbi5jOjk5ODpcdHJldCA9IHBoeV9yZWFkX21tZChwaHlkZXYsIE1ESU9fTU1EX1ZFTkQxLCBBRElOMTMwMF9DRElBR19SVU4pO1xuZHJpdmVycy9uZXQvcGh5L2FkaW4uYy05OTktXHRpZiAocmV0IFx1MDAzYyAwKVxuLS1cbmRyaXZlcnMvbmV0L3BoeS9hZGluMTEwMC5jPTc2PXN0YXRpYyBpbnQgYWRpbl9yZWFkX3N0YXR1cyhzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxuLS1cbmRyaXZlcnMvbmV0L3BoeS9hZGluMTEwMC5jLTgzLVxuZHJpdmVycy9uZXQvcGh5L2FkaW4xMTAwLmM6ODQ6XHRyZXQgPSBwaHlfcmVhZF9tbWQocGh5ZGV2LCBNRElPX01NRF9BTiwgQURJTl9BTl9QSFlfSU5TVF9TVEFUVVMpO1xuZHJpdmVycy9uZXQvcGh5L2FkaW4xMTAwLmMtODUtXHRpZiAocmV0IFx1MDAzYyAwKVxuLS1cbmRyaXZlcnMvbmV0L3BoeS9hZGluMTEwMC5jPTE0NT1zdGF0aWMgaW50IGFkaW5fcGh5X2Fja19pbnRyKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXG4tLVxuZHJpdmVycy9uZXQvcGh5L2FkaW4xMTAwLmMtMTQ3LVx0LyogQ2xlYXIgcGVuZGluZyBpbnRlcnJ1cHRzICovXG5kcml2ZXJzL25ldC9waHkvYWRpbjExMDAuYzoxNDg6XHRpbnQgcmMgPSBwaHlfcmVhZF9tbWQocGh5ZGV2LCBNRElPX01NRF9WRU5EMixcbmRyaXZlcnMvbmV0L3BoeS9hZGluMTEwMC5jLTE0OS1cdFx0XHQgICAgICBBRElOX1BIWV9TVUJTWVNfSVJRX1NUQVRVUyk7XG4tLVxuZHJpdmVycy9uZXQvcGh5L2FkaW4xMTAwLmM9MTczPXN0YXRpYyBpcnFyZXR1cm5fdCBhZGluX3BoeV9oYW5kbGVfaW50ZXJydXB0KHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXG4tLVxuZHJpdmVycy9uZXQvcGh5L2FkaW4xMTAwLmMtMTc2LVxuZHJpdmVycy9uZXQvcGh5L2FkaW4xMTAwLmM6MTc3Olx0aXJxX3N0YXR1cyA9IHBoeV9yZWFkX21tZChwaHlkZXYsIE1ESU9fTU1EX1ZFTkQyLFxuZHJpdmVycy9uZXQvcGh5L2FkaW4xMTAwLmMtMTc4LVx0XHRcdFx0ICBBRElOX1BIWV9TVUJTWVNfSVJRX1NUQVRVUyk7XG4tLVxuZHJpdmVycy9uZXQvcGh5L2FkaW4xMTAwLmM9MTkyPXN0YXRpYyBpbnQgYWRpbl9zZXRfcG93ZXJkb3duX21vZGUoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldiwgYm9vbCBlbilcbi0tXG5kcml2ZXJzL25ldC9waHkvYWRpbjExMDAuYy0yMDEtXG5kcml2ZXJzL25ldC9waHkvYWRpbjExMDAuYzoyMDI6XHRyZXR1cm4gcGh5X3JlYWRfbW1kX3BvbGxfdGltZW91dChwaHlkZXYsIE1ESU9fTU1EX1ZFTkQxLCBBRElOX0NSU01fU1RBVCwgcmV0LFxuZHJpdmVycy9uZXQvcGh5L2FkaW4xMTAwLmMtMjAzLVx0XHRcdFx0XHQgISEocmV0IFx1MDAyNiBBRElOX0NSU01fU0ZUX1BEX1JEWSkgPT0gZW4sXG4tLVxuZHJpdmVycy9uZXQvcGh5L2FkaW4xMTAwLmM9MjMxPXN0YXRpYyBpbnQgYWRpbl9zb2Z0X3Jlc2V0KHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXG4tLVxuZHJpdmVycy9uZXQvcGh5L2FkaW4xMTAwLmMtMjM4LVxuZHJpdmVycy9uZXQvcGh5L2FkaW4xMTAwLmM6MjM5Olx0cmV0dXJuIHBoeV9yZWFkX21tZF9wb2xsX3RpbWVvdXQocGh5ZGV2LCBNRElPX01NRF9WRU5EMSwgQURJTl9DUlNNX1NUQVQsIHJldCxcbmRyaXZlcnMvbmV0L3BoeS9hZGluMTEwMC5jLTI0MC1cdFx0XHRcdFx0IChyZXQgXHUwMDI2IEFESU5fQ1JTTV9TWVNfUkRZKSxcbi0tXG5kcml2ZXJzL25ldC9waHkvYWRpbjExMDAuYz0yNDQ9c3RhdGljIGludCBhZGluX2dldF9mZWF0dXJlcyhzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxuLS1cbmRyaXZlcnMvbmV0L3BoeS9hZGluMTEwMC5jLTI1MC1cbmRyaXZlcnMvbmV0L3BoeS9hZGluMTEwMC5jOjI1MTpcdHJldCA9IHBoeV9yZWFkX21tZChwaHlkZXYsIE1ESU9fTU1EX1BNQVBNRCwgTURJT19QTUFfMTBUMUxfU1RBVCk7XG5kcml2ZXJzL25ldC9waHkvYWRpbjExMDAuYy0yNTItXHRpZiAocmV0IFx1MDAzYyAwKVxuLS1cbmRyaXZlcnMvbmV0L3BoeS9hZGluMTEwMC5jPTI3OT1zdGF0aWMgaW50IGFkaW5fZ2V0X3NxaShzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxuLS1cbmRyaXZlcnMvbmV0L3BoeS9hZGluMTEwMC5jLTI4NC1cbmRyaXZlcnMvbmV0L3BoeS9hZGluMTEwMC5jOjI4NTpcdHJldCA9IHBoeV9yZWFkX21tZChwaHlkZXYsIE1ESU9fTU1EX1BNQVBNRCwgTURJT19TVEFUMSk7XG5kcml2ZXJzL25ldC9waHkvYWRpbjExMDAuYy0yODYtXHRpZiAocmV0IFx1MDAzYyAwKVxuLS1cbmRyaXZlcnMvbmV0L3BoeS9hZGluMTEwMC5jLTI5MC1cbmRyaXZlcnMvbmV0L3BoeS9hZGluMTEwMC5jOjI5MTpcdHJldCA9IHBoeV9yZWFkX21tZChwaHlkZXYsIE1ESU9fU1RBVDEsIEFESU5fTVNFX1ZBTCk7XG5kcml2ZXJzL25ldC9waHkvYWRpbjExMDAuYy0yOTItXHRpZiAocmV0IFx1MDAzYyAwKVxuLS1cbmRyaXZlcnMvbmV0L3BoeS9haXJfYW44ODAxLmM9MzU3PXN0YXRpYyBpbnQgYW44ODAxcl9sZWRfaHdfY29udHJvbF9nZXQoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldiwgdTggaW5kZXgsXG4tLVxuZHJpdmVycy9uZXQvcGh5L2Fpcl9hbjg4MDEuYy0zNjQtXG5kcml2ZXJzL25ldC9waHkvYWlyX2FuODgwMS5jOjM2NTpcdG9uID0gcGh5X3JlYWRfbW1kKHBoeWRldiwgTURJT19NTURfVkVORDIsIExFRF9PTl9DVFJMKGluZGV4KSk7XG5kcml2ZXJzL25ldC9waHkvYWlyX2FuODgwMS5jLTM2Ni1cdGlmIChvbiBcdTAwM2MgMClcbi0tXG5kcml2ZXJzL25ldC9waHkvYWlyX2FuODgwMS5jLTM2OC1cbmRyaXZlcnMvbmV0L3BoeS9haXJfYW44ODAxLmM6MzY5Olx0YmxpbmsgPSBwaHlfcmVhZF9tbWQocGh5ZGV2LCBNRElPX01NRF9WRU5EMiwgTEVEX0JMSU5LX0NUUkwoaW5kZXgpKTtcbmRyaXZlcnMvbmV0L3BoeS9haXJfYW44ODAxLmMtMzcwLVx0aWYgKGJsaW5rIFx1MDAzYyAwKVxuLS1cbmRyaXZlcnMvbmV0L3BoeS9haXJfZW44ODExaC5jPTMyNz1zdGF0aWMgaW50IGVuODgxMWhfd2FpdF9tY3VfcmVhZHkoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcbi0tXG5kcml2ZXJzL25ldC9waHkvYWlyX2VuODgxMWguYy0zMzYtXHQvKiBCZWNhdXNlIG9mIG1kaW8tbG9jaywgbWF5IGhhdmUgdG8gd2FpdCBmb3IgbXVsdGlwbGUgbG9hZHMgKi9cbmRyaXZlcnMvbmV0L3BoeS9haXJfZW44ODExaC5jOjMzNzpcdHJldCA9IHBoeV9yZWFkX21tZF9wb2xsX3RpbWVvdXQocGh5ZGV2LCBNRElPX01NRF9WRU5EMSxcbmRyaXZlcnMvbmV0L3BoeS9haXJfZW44ODExaC5jLTMzOC1cdFx0XHRcdFx0RU44ODExSF9QSFlfRldfU1RBVFVTLCByZWdfdmFsdWUsXG4tLVxuZHJpdmVycy9uZXQvcGh5L2Fpcl9lbjg4MTFoLmM9MTM2OD1zdGF0aWMgaW50IGVuODgxMWhfcmVhZF9zdGF0dXMoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcbi0tXG5kcml2ZXJzL25ldC9waHkvYWlyX2VuODgxMWguYy0xMzk0LVx0aWYgKHBoeV9pZF9jb21wYXJlX21vZGVsKHBoeWRldi1cdTAwM2VwaHlfaWQsIEFOODgxMUhCX1BIWV9JRCkpIHtcbmRyaXZlcnMvbmV0L3BoeS9haXJfZW44ODExaC5jOjEzOTU6XHRcdHZhbCA9IHBoeV9yZWFkX21tZChwaHlkZXYsIE1ESU9fTU1EX0FOLCBNRElPX0FOXzEwR0JUX1NUQVQpO1xuZHJpdmVycy9uZXQvcGh5L2Fpcl9lbjg4MTFoLmMtMTM5Ni1cdFx0aWYgKHZhbCBcdTAwM2MgMClcbi0tXG5kcml2ZXJzL25ldC9waHkvYXF1YW50aWEvYXF1YW50aWFfZmlybXdhcmUuYz05MD1zdGF0aWMgaW50IGFxcl9md19sb2FkX21lbW9yeShzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2LCB1MzIgYWRkcixcbi0tXG5kcml2ZXJzL25ldC9waHkvYXF1YW50aWEvYXF1YW50aWFfZmlybXdhcmUuYy0xMzctXHQvKiAuLi5nZXRzIENSQyBmcm9tIE1BSUxCT1ggYWZ0ZXIgd2UgaGF2ZSBsb2FkZWQgdGhlIGVudGlyZSBzZWN0aW9uLi4uICovXG5kcml2ZXJzL25ldC9waHkvYXF1YW50aWEvYXF1YW50aWFfZmlybXdhcmUuYzoxMzg6XHR1cF9jcmMgPSBwaHlfcmVhZF9tbWQocGh5ZGV2LCBNRElPX01NRF9WRU5EMSwgVkVORDFfR0xPQkFMX01BSUxCT1hfSU5URVJGQUNFMik7XG5kcml2ZXJzL25ldC9waHkvYXF1YW50aWEvYXF1YW50aWFfZmlybXdhcmUuYy0xMzktXHQvKiAuLi5hbmQgbWFrZSBzdXJlIGl0IGRvZXMgbWF0Y2ggb3VyIGNhbGN1bGF0ZWQgQ1JDICovXG4tLVxuZHJpdmVycy9uZXQvcGh5L2FxdWFudGlhL2FxdWFudGlhX2h3bW9uLmM9NDI9c3RhdGljIGludCBhcXJfaHdtb25fZ2V0KHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYsIGludCByZWcsIGxvbmcgKnZhbHVlKVxuZHJpdmVycy9uZXQvcGh5L2FxdWFudGlhL2FxdWFudGlhX2h3bW9uLmMtNDMte1xuZHJpdmVycy9uZXQvcGh5L2FxdWFudGlhL2FxdWFudGlhX2h3bW9uLmM6NDQ6XHRpbnQgdGVtcCA9IHBoeV9yZWFkX21tZChwaHlkZXYsIE1ESU9fTU1EX1ZFTkQxLCByZWcpO1xuZHJpdmVycy9uZXQvcGh5L2FxdWFudGlhL2FxdWFudGlhX2h3bW9uLmMtNDUtXG4tLVxuZHJpdmVycy9uZXQvcGh5L2FxdWFudGlhL2FxdWFudGlhX2h3bW9uLmM9Njg9c3RhdGljIGludCBhcXJfaHdtb25fdGVzdF9iaXQoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldiwgaW50IHJlZywgaW50IGJpdClcbmRyaXZlcnMvbmV0L3BoeS9hcXVhbnRpYS9hcXVhbnRpYV9od21vbi5jLTY5LXtcbmRyaXZlcnMvbmV0L3BoeS9hcXVhbnRpYS9hcXVhbnRpYV9od21vbi5jOjcwOlx0aW50IHZhbCA9IHBoeV9yZWFkX21tZChwaHlkZXYsIE1ESU9fTU1EX1ZFTkQxLCByZWcpO1xuZHJpdmVycy9uZXQvcGh5L2FxdWFudGlhL2FxdWFudGlhX2h3bW9uLmMtNzEtXG4tLVxuZHJpdmVycy9uZXQvcGh5L2FxdWFudGlhL2FxdWFudGlhX2xlZHMuYz00Nz1pbnQgYXFyX3BoeV9sZWRfaHdfY29udHJvbF9nZXQoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldiwgdTggaW5kZXgsXG4tLVxuZHJpdmVycy9uZXQvcGh5L2FxdWFudGlhL2FxdWFudGlhX2xlZHMuYy01NC1cbmRyaXZlcnMvbmV0L3BoeS9hcXVhbnRpYS9hcXVhbnRpYV9sZWRzLmM6NTU6XHR2YWwgPSBwaHlfcmVhZF9tbWQocGh5ZGV2LCBNRElPX01NRF9WRU5EMSwgQVFSX0xFRF9QUk9WKGluZGV4KSk7XG5kcml2ZXJzL25ldC9waHkvYXF1YW50aWEvYXF1YW50aWFfbGVkcy5jLTU2LVx0aWYgKHZhbCBcdTAwM2MgMClcbi0tXG5kcml2ZXJzL25ldC9waHkvYXF1YW50aWEvYXF1YW50aWFfbWFpbi5jPTEzMz1zdGF0aWMgdTY0IGFxcjEwN19nZXRfc3RhdChzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2LCBpbnQgaW5kZXgpXG4tLVxuZHJpdmVycy9uZXQvcGh5L2FxdWFudGlhL2FxdWFudGlhX21haW4uYy0xNDAtXG5kcml2ZXJzL25ldC9waHkvYXF1YW50aWEvYXF1YW50aWFfbWFpbi5jOjE0MTpcdHZhbCA9IHBoeV9yZWFkX21tZChwaHlkZXYsIE1ESU9fTU1EX0MyMkVYVCwgc3RhdC1cdTAwM2VyZWcpO1xuZHJpdmVycy9uZXQvcGh5L2FxdWFudGlhL2FxdWFudGlhX21haW4uYy0xNDItXHRpZiAodmFsIFx1MDAzYyAwKVxuLS1cbmRyaXZlcnMvbmV0L3BoeS9hcXVhbnRpYS9hcXVhbnRpYV9tYWluLmMtMTQ2LVx0aWYgKGxlbl9oKSB7XG5kcml2ZXJzL25ldC9waHkvYXF1YW50aWEvYXF1YW50aWFfbWFpbi5jOjE0NzpcdFx0dmFsID0gcGh5X3JlYWRfbW1kKHBoeWRldiwgTURJT19NTURfQzIyRVhULCBzdGF0LVx1MDAzZXJlZyAmIzQzOyAxKTtcbmRyaXZlcnMvbmV0L3BoeS9hcXVhbnRpYS9hcXVhbnRpYV9tYWluLmMtMTQ4LVx0XHRpZiAodmFsIFx1MDAzYyAwKVxuLS1cbmRyaXZlcnMvbmV0L3BoeS9hcXVhbnRpYS9hcXVhbnRpYV9tYWluLmM9MjUzPXN0YXRpYyBpbnQgYXFyX2NvbmZpZ19pbnRyKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXG4tLVxuZHJpdmVycy9uZXQvcGh5L2FxdWFudGlhL2FxdWFudGlhX21haW4uYy0yNTktXHRcdC8qIENsZWFyIGFueSBwZW5kaW5nIGludGVycnVwdHMgYmVmb3JlIGVuYWJsaW5nIHRoZW0gKi9cbmRyaXZlcnMvbmV0L3BoeS9hcXVhbnRpYS9hcXVhbnRpYV9tYWluLmM6MjYwOlx0XHRlcnIgPSBwaHlfcmVhZF9tbWQocGh5ZGV2LCBNRElPX01NRF9BTiwgTURJT19BTl9UWF9WRU5EX0lOVF9TVEFUVVMyKTtcbmRyaXZlcnMvbmV0L3BoeS9hcXVhbnRpYS9hcXVhbnRpYV9tYWluLmMtMjYxLVx0XHRpZiAoZXJyIFx1MDAzYyAwKVxuLS1cbmRyaXZlcnMvbmV0L3BoeS9hcXVhbnRpYS9hcXVhbnRpYV9tYWluLmMtMjgyLVx0XHQvKiBDbGVhciBhbnkgcGVuZGluZyBpbnRlcnJ1cHRzIGFmdGVyIHdlIGhhdmUgZGlzYWJsZWQgdGhlbSAqL1xuZHJpdmVycy9uZXQvcGh5L2FxdWFudGlhL2FxdWFudGlhX21haW4uYzoyODM6XHRcdGVyciA9IHBoeV9yZWFkX21tZChwaHlkZXYsIE1ESU9fTU1EX0FOLCBNRElPX0FOX1RYX1ZFTkRfSU5UX1NUQVRVUzIpO1xuZHJpdmVycy9uZXQvcGh5L2FxdWFudGlhL2FxdWFudGlhX21haW4uYy0yODQtXHRcdGlmIChlcnIgXHUwMDNjIDApXG4tLVxuZHJpdmVycy9uZXQvcGh5L2FxdWFudGlhL2FxdWFudGlhX21haW4uYz0yOTE9c3RhdGljIGlycXJldHVybl90IGFxcl9oYW5kbGVfaW50ZXJydXB0KHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXG4tLVxuZHJpdmVycy9uZXQvcGh5L2FxdWFudGlhL2FxdWFudGlhX21haW4uYy0yOTQtXG5kcml2ZXJzL25ldC9waHkvYXF1YW50aWEvYXF1YW50aWFfbWFpbi5jOjI5NTpcdGlycV9zdGF0dXMgPSBwaHlfcmVhZF9tbWQocGh5ZGV2LCBNRElPX01NRF9BTixcbmRyaXZlcnMvbmV0L3BoeS9hcXVhbnRpYS9hcXVhbnRpYV9tYWluLmMtMjk2LVx0XHRcdFx0ICBNRElPX0FOX1RYX1ZFTkRfSU5UX1NUQVRVUzIpO1xuLS1cbmRyaXZlcnMvbmV0L3BoeS9hcXVhbnRpYS9hcXVhbnRpYV9tYWluLmM9MzEwPXN0YXRpYyBpbnQgYXFyX3JlYWRfc3RhdHVzKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXG4tLVxuZHJpdmVycy9uZXQvcGh5L2FxdWFudGlhL2FxdWFudGlhX21haW4uYy0zMTQtXHRpZiAocGh5ZGV2LVx1MDAzZWF1dG9uZWcgPT0gQVVUT05FR19FTkFCTEUpIHtcbmRyaXZlcnMvbmV0L3BoeS9hcXVhbnRpYS9hcXVhbnRpYV9tYWluLmM6MzE1Olx0XHR2YWwgPSBwaHlfcmVhZF9tbWQocGh5ZGV2LCBNRElPX01NRF9BTiwgTURJT19BTl9SWF9MUF9TVEFUMSk7XG5kcml2ZXJzL25ldC9waHkvYXF1YW50aWEvYXF1YW50aWFfbWFpbi5jLTMxNi1cdFx0aWYgKHZhbCBcdTAwM2MgMClcbi0tXG5kcml2ZXJzL25ldC9waHkvYXF1YW50aWEvYXF1YW50aWFfbWFpbi5jLTMzMC1cdGlmICh2YWwpIHtcbmRyaXZlcnMvbmV0L3BoeS9hcXVhbnRpYS9hcXVhbnRpYV9tYWluLmM6MzMxOlx0XHR2YWwgPSBwaHlfcmVhZF9tbWQocGh5ZGV2LCBNRElPX01NRF9BTiwgTURJT19BTl9SRVNWRF9WRU5EX1NUQVRVUzEpO1xuZHJpdmVycy9uZXQvcGh5L2FxdWFudGlhL2FxdWFudGlhX21haW4uYy0zMzItXHRcdGlmICh2YWwgXHUwMDNjIDApXG4tLVxuZHJpdmVycy9uZXQvcGh5L2FxdWFudGlhL2FxdWFudGlhX21haW4uYz00NzY9c3RhdGljIGludCBhcXJfZ2VuMV9yZWFkX3JhdGUoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcbi0tXG5kcml2ZXJzL25ldC9waHkvYXF1YW50aWEvYXF1YW50aWFfbWFpbi5jLTQ3OS1cbmRyaXZlcnMvbmV0L3BoeS9hcXVhbnRpYS9hcXVhbnRpYV9tYWluLmM6NDgwOlx0dmFsID0gcGh5X3JlYWRfbW1kKHBoeWRldiwgTURJT19NTURfQU4sIE1ESU9fQU5fVFhfVkVORF9TVEFUVVMxKTtcbmRyaXZlcnMvbmV0L3BoeS9hcXVhbnRpYS9hcXVhbnRpYV9tYWluLmMtNDgxLVx0aWYgKHZhbCBcdTAwM2MgMClcbi0tXG5kcml2ZXJzL25ldC9waHkvYXF1YW50aWEvYXF1YW50aWFfbWFpbi5jPTUzNz1zdGF0aWMgaW50IGFxcl9nZW4xX3JlYWRfc3RhdHVzKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXG4tLVxuZHJpdmVycy9uZXQvcGh5L2FxdWFudGlhL2FxdWFudGlhX21haW4uYy01NTMtXHQgKi9cbmRyaXZlcnMvbmV0L3BoeS9hcXVhbnRpYS9hcXVhbnRpYV9tYWluLmM6NTU0Olx0cmV0ID0gcGh5X3JlYWRfbW1kX3BvbGxfdGltZW91dChwaHlkZXYsIE1ESU9fTU1EX1BIWVhTLFxuZHJpdmVycy9uZXQvcGh5L2FxdWFudGlhL2FxdWFudGlhX21haW4uYy01NTUtXHRcdFx0XHRcdE1ESU9fUEhZWFNfVkVORF9JRl9TVEFUVVMsIHZhbCxcbi0tXG5kcml2ZXJzL25ldC9waHkvYXF1YW50aWEvYXF1YW50aWFfbWFpbi5jPTYyNj1zdGF0aWMgaW50IGFxcjEwN19nZXRfZG93bnNoaWZ0KHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYsIHU4ICpkYXRhKVxuLS1cbmRyaXZlcnMvbmV0L3BoeS9hcXVhbnRpYS9hcXVhbnRpYV9tYWluLmMtNjI5LVxuZHJpdmVycy9uZXQvcGh5L2FxdWFudGlhL2FxdWFudGlhX21haW4uYzo2MzA6XHR2YWwgPSBwaHlfcmVhZF9tbWQocGh5ZGV2LCBNRElPX01NRF9BTiwgTURJT19BTl9WRU5EX1BST1YpO1xuZHJpdmVycy9uZXQvcGh5L2FxdWFudGlhL2FxdWFudGlhX21haW4uYy02MzEtXHRpZiAodmFsIFx1MDAzYyAwKVxuLS1cbmRyaXZlcnMvbmV0L3BoeS9hcXVhbnRpYS9hcXVhbnRpYV9tYWluLmM9NjkxPWludCBhcXJfd2FpdF9yZXNldF9jb21wbGV0ZShzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxuLS1cbmRyaXZlcnMvbmV0L3BoeS9hcXVhbnRpYS9hcXVhbnRpYV9tYWluLmMtNjk0LVxuZHJpdmVycy9uZXQvcGh5L2FxdWFudGlhL2FxdWFudGlhX21haW4uYzo2OTU6XHRyZXQgPSByZWFkX3BvbGxfdGltZW91dChwaHlfcmVhZF9tbWQsIHZhbCwgdmFsICE9IDAsXG5kcml2ZXJzL25ldC9waHkvYXF1YW50aWEvYXF1YW50aWFfbWFpbi5jLTY5Ni1cdFx0XHRcdEFRUl9GV19XQUlUX1NMRUVQX1VTLCBBUVJfRldfV0FJVF9USU1FT1VUX1VTLFxuLS1cbmRyaXZlcnMvbmV0L3BoeS9hcXVhbnRpYS9hcXVhbnRpYV9tYWluLmM9NzA4PXN0YXRpYyBpbnQgYXFyX2J1aWxkX2ZpbmdlcnByaW50KHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXG4tLVxuZHJpdmVycy9uZXQvcGh5L2FxdWFudGlhL2FxdWFudGlhX21haW4uYy03MTQtXG5kcml2ZXJzL25ldC9waHkvYXF1YW50aWEvYXF1YW50aWFfbWFpbi5jOjcxNTpcdHZhbCA9IHBoeV9yZWFkX21tZChwaHlkZXYsIE1ESU9fTU1EX1ZFTkQxLCBWRU5EMV9HTE9CQUxfRldfSUQpO1xuZHJpdmVycy9uZXQvcGh5L2FxdWFudGlhL2FxdWFudGlhX21haW4uYy03MTYtXHRpZiAodmFsIFx1MDAzYyAwKVxuLS1cbmRyaXZlcnMvbmV0L3BoeS9hcXVhbnRpYS9hcXVhbnRpYV9tYWluLmMtNzIxLVxuZHJpdmVycy9uZXQvcGh5L2FxdWFudGlhL2FxdWFudGlhX21haW4uYzo3MjI6XHR2YWwgPSBwaHlfcmVhZF9tbWQocGh5ZGV2LCBNRElPX01NRF9WRU5EMSwgVkVORDFfR0xPQkFMX1JTVkRfU1RBVDEpO1xuZHJpdmVycy9uZXQvcGh5L2FxdWFudGlhL2FxdWFudGlhX21haW4uYy03MjMtXHRpZiAodmFsIFx1MDAzYyAwKVxuLS1cbmRyaXZlcnMvbmV0L3BoeS9hcXVhbnRpYS9hcXVhbnRpYV9tYWluLmMtNzI4LVxuZHJpdmVycy9uZXQvcGh5L2FxdWFudGlhL2FxdWFudGlhX21haW4uYzo3Mjk6XHR2YWwgPSBwaHlfcmVhZF9tbWQocGh5ZGV2LCBNRElPX01NRF9QTUFQTUQsIFBNQVBNRF9GV19NSVNDX0lEKTtcbmRyaXZlcnMvbmV0L3BoeS9hcXVhbnRpYS9hcXVhbnRpYV9tYWluLmMtNzMwLVx0aWYgKHZhbCBcdTAwM2MgMClcbi0tXG5kcml2ZXJzL25ldC9waHkvYXF1YW50aWEvYXF1YW50aWFfbWFpbi5jLTczNC1cbmRyaXZlcnMvbmV0L3BoeS9hcXVhbnRpYS9hcXVhbnRpYV9tYWluLmM6NzM1Olx0dmFsID0gcGh5X3JlYWRfbW1kKHBoeWRldiwgTURJT19NTURfUE1BUE1ELCBQTUFQTURfRldfTUlTQ19WRVIpO1xuZHJpdmVycy9uZXQvcGh5L2FxdWFudGlhL2FxdWFudGlhX21haW4uYy03MzYtXHRpZiAodmFsIFx1MDAzYyAwKVxuLS1cbmRyaXZlcnMvbmV0L3BoeS9hcXVhbnRpYS9hcXVhbnRpYV9tYWluLmM9ODMzPXN0YXRpYyBpbnQgYXFyX2dlbjJfcmVhZF9nbG9iYWxfc3lzY2ZnKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXG4tLVxuZHJpdmVycy9uZXQvcGh5L2FxdWFudGlhL2FxdWFudGlhX21haW4uYy04NDQtXG5kcml2ZXJzL25ldC9waHkvYXF1YW50aWEvYXF1YW50aWFfbWFpbi5jOjg0NTpcdFx0dmFsID0gcGh5X3JlYWRfbW1kKHBoeWRldiwgTURJT19NTURfVkVORDEsXG5kcml2ZXJzL25ldC9waHkvYXF1YW50aWEvYXF1YW50aWFfbWFpbi5jLTg0Ni1cdFx0XHRcdCAgIGFxcl9nbG9iYWxfY2ZnX3JlZ3NbaV0ucmVnKTtcbi0tXG5kcml2ZXJzL25ldC9waHkvYXF1YW50aWEvYXF1YW50aWFfbWFpbi5jPTkxMD1zdGF0aWMgaW50IGFxcl9nZW4yX2ZpbGxfaW50ZXJmYWNlX21vZGVzKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXG4tLVxuZHJpdmVycy9uZXQvcGh5L2FxdWFudGlhL2FxdWFudGlhX21haW4uYy05MjMtXHRpZiAocHJpdi1cdTAwM2V3YWl0X29uX2dsb2JhbF9jZmcpIHtcbmRyaXZlcnMvbmV0L3BoeS9hcXVhbnRpYS9hcXVhbnRpYV9tYWluLmM6OTI0Olx0XHRyZXQgPSBwaHlfcmVhZF9tbWRfcG9sbF90aW1lb3V0KHBoeWRldiwgTURJT19NTURfVkVORDEsXG5kcml2ZXJzL25ldC9waHkvYXF1YW50aWEvYXF1YW50aWFfbWFpbi5jLTkyNS1cdFx0XHRcdFx0XHRWRU5EMV9HTE9CQUxfQ0ZHXzEwME0sIHZhbCxcbi0tXG5kcml2ZXJzL25ldC9waHkvYXF1YW50aWEvYXF1YW50aWFfbWFpbi5jPTk3MD1zdGF0aWMgdm9pZCBhcXIxMDdfbGlua19jaGFuZ2Vfbm90aWZ5KHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXG4tLVxuZHJpdmVycy9uZXQvcGh5L2FxdWFudGlhL2FxdWFudGlhX21haW4uYy05NzgtXG5kcml2ZXJzL25ldC9waHkvYXF1YW50aWEvYXF1YW50aWFfbWFpbi5jOjk3OTpcdHZhbCA9IHBoeV9yZWFkX21tZChwaHlkZXYsIE1ESU9fTU1EX0FOLCBNRElPX0FOX1JYX0xQX1NUQVQxKTtcbmRyaXZlcnMvbmV0L3BoeS9hcXVhbnRpYS9hcXVhbnRpYV9tYWluLmMtOTgwLVx0LyogY2FsbCBmYWlsZWQgb3IgbGluayBwYXJ0bmVyIGlzIG5vIEFxdWFudGlhIFBIWSAqL1xuLS1cbmRyaXZlcnMvbmV0L3BoeS9hcXVhbnRpYS9hcXVhbnRpYV9tYWluLmMtOTg2LVxuZHJpdmVycy9uZXQvcGh5L2FxdWFudGlhL2FxdWFudGlhX21haW4uYzo5ODc6XHR2YWwgPSBwaHlfcmVhZF9tbWQocGh5ZGV2LCBNRElPX01NRF9BTiwgTURJT19BTl9SWF9MUF9TVEFUNCk7XG5kcml2ZXJzL25ldC9waHkvYXF1YW50aWEvYXF1YW50aWFfbWFpbi5jLTk4OC1cdGlmICh2YWwgXHUwMDNjIDApXG4tLVxuZHJpdmVycy9uZXQvcGh5L2FxdWFudGlhL2FxdWFudGlhX21haW4uYy05OTMtXG5kcml2ZXJzL25ldC9waHkvYXF1YW50aWEvYXF1YW50aWFfbWFpbi5jOjk5NDpcdHZhbCA9IHBoeV9yZWFkX21tZChwaHlkZXYsIE1ESU9fTU1EX0FOLCBNRElPX0FOX1JYX1ZFTkRfU1RBVDMpO1xuZHJpdmVycy9uZXQvcGh5L2FxdWFudGlhL2FxdWFudGlhX21haW4uYy05OTUtXHRpZiAodmFsIFx1MDAzYyAwKVxuLS1cbmRyaXZlcnMvbmV0L3BoeS9hcXVhbnRpYS9hcXVhbnRpYV9tYWluLmMtMTAwNS1cbmRyaXZlcnMvbmV0L3BoeS9hcXVhbnRpYS9hcXVhbnRpYV9tYWluLmM6MTAwNjpcdHZhbCA9IHBoeV9yZWFkX21tZChwaHlkZXYsIE1ESU9fTU1EX1ZFTkQxLCBWRU5EMV9HTE9CQUxfUlNWRF9TVEFUOSk7XG5kcml2ZXJzL25ldC9waHkvYXF1YW50aWEvYXF1YW50aWFfbWFpbi5jLTEwMDctXHRpZiAodmFsIFx1MDAzYyAwKVxuLS1cbmRyaXZlcnMvbmV0L3BoeS9hcXVhbnRpYS9hcXVhbnRpYV9tYWluLmM9MTAxNT1zdGF0aWMgaW50IGFxcl9nZW4xX3dhaXRfcHJvY2Vzc29yX2ludGVuc2l2ZV9vcChzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxuLS1cbmRyaXZlcnMvbmV0L3BoeS9hcXVhbnRpYS9hcXVhbnRpYV9tYWluLmMtMTAyNS1cbmRyaXZlcnMvbmV0L3BoeS9hcXVhbnRpYS9hcXVhbnRpYV9tYWluLmM6MTAyNjpcdGVyciA9IHBoeV9yZWFkX21tZF9wb2xsX3RpbWVvdXQocGh5ZGV2LCBNRElPX01NRF9WRU5EMSxcbmRyaXZlcnMvbmV0L3BoeS9hcXVhbnRpYS9hcXVhbnRpYV9tYWluLmMtMTAyNy1cdFx0XHRcdFx0VkVORDFfR0xPQkFMX0dFTl9TVEFUMiwgdmFsLFxuLS1cbmRyaXZlcnMvbmV0L3BoeS9hczIxeHh4LmM9Mjk3PXN0YXRpYyBpbnQgYWVvbl9maXJtd2FyZV9ib290KHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYsIGNvbnN0IHU4ICpkYXRhLFxuLS1cbmRyaXZlcnMvbmV0L3BoeS9hczIxeHh4LmMtMzE4LVxuZHJpdmVycy9uZXQvcGh5L2FzMjF4eHguYzozMTk6XHR2YWwgPSBwaHlfcmVhZF9tbWQocGh5ZGV2LCBNRElPX01NRF9WRU5EMSxcbmRyaXZlcnMvbmV0L3BoeS9hczIxeHh4LmMtMzIwLVx0XHRcdCAgIFZFTkQxX0dMQl9SRUdfTURJT19JTkRJUkVDVF9TVEFUVVMpO1xuLS1cbmRyaXZlcnMvbmV0L3BoeS9hczIxeHh4LmM9MzkyPXN0YXRpYyBpbnQgYWVvbl9pcGNfd2FpdF9jbWQoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldiwgYm9vbCBwYXJpdHlfc3RhdHVzKVxuLS1cbmRyaXZlcnMvbmV0L3BoeS9hczIxeHh4LmMtMzk5LVx0ICovXG5kcml2ZXJzL25ldC9waHkvYXMyMXh4eC5jOjQwMDpcdHJldHVybiBwaHlfcmVhZF9tbWRfcG9sbF90aW1lb3V0KHBoeWRldiwgTURJT19NTURfVkVORDEsIFZFTkQxX0lQQ19TVFMsIHZhbCxcbmRyaXZlcnMvbmV0L3BoeS9hczIxeHh4LmMtNDAxLVx0XHRcdFx0XHQgYWVvbl9pcGNfcmVhZHkodmFsLCBwYXJpdHlfc3RhdHVzKSxcbi0tXG5kcml2ZXJzL25ldC9waHkvYXMyMXh4eC5jPTQwNT1zdGF0aWMgaW50IGFlb25faXBjX3NlbmRfY21kKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYsXG4tLVxuZHJpdmVycy9uZXQvcGh5L2FzMjF4eHguYy00MzktXG5kcml2ZXJzL25ldC9waHkvYXMyMXh4eC5jOjQ0MDpcdHJldCA9IHBoeV9yZWFkX21tZChwaHlkZXYsIE1ESU9fTU1EX1ZFTkQxLCBWRU5EMV9JUENfU1RTKTtcbmRyaXZlcnMvbmV0L3BoeS9hczIxeHh4LmMtNDQxLVx0aWYgKHJldCBcdTAwM2MgMClcbi0tXG5kcml2ZXJzL25ldC9waHkvYXMyMXh4eC5jPTQ1NT1zdGF0aWMgaW50IGFlb25faXBjX3NlbmRfbXNnKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYsXG4tLVxuZHJpdmVycy9uZXQvcGh5L2FzMjF4eHguYy01MDYtXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBESVZfUk9VTkRfVVAocmV0X3NpemUsIHNpemVvZih1MTYpKTsgaSYjNDM7JiM0MzspIHtcbmRyaXZlcnMvbmV0L3BoeS9hczIxeHh4LmM6NTA3Olx0XHRyZXQgPSBwaHlfcmVhZF9tbWQocGh5ZGV2LCBNRElPX01NRF9WRU5EMSwgVkVORDFfSVBDX0RBVEEoaSkpO1xuZHJpdmVycy9uZXQvcGh5L2FzMjF4eHguYy01MDgtXHRcdGlmIChyZXQgXHUwMDNjIDApXG4tLVxuZHJpdmVycy9uZXQvcGh5L2FzMjF4eHguYz02MzY9c3RhdGljIGludCBhczIxeHh4X3JlYWRfbGluayhzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2LCBpbnQgKmJtY3IpXG4tLVxuZHJpdmVycy9uZXQvcGh5L2FzMjF4eHguYy02NDItXHQgKi9cbmRyaXZlcnMvbmV0L3BoeS9hczIxeHh4LmM6NjQzOlx0KmJtY3IgPSBwaHlfcmVhZF9tbWQocGh5ZGV2LCBNRElPX01NRF9BTixcbmRyaXZlcnMvbmV0L3BoeS9hczIxeHh4LmMtNjQ0LVx0XHRcdCAgICAgQVMyMVhYWF9NRElPX0FOX0MyMiAmIzQzOyBNSUlfQk1DUik7XG4tLVxuZHJpdmVycy9uZXQvcGh5L2FzMjF4eHguYy02NTUtXG5kcml2ZXJzL25ldC9waHkvYXMyMXh4eC5jOjY1NjpcdHN0YXR1cyA9IHBoeV9yZWFkX21tZChwaHlkZXYsIE1ESU9fTU1EX0FOLCBNRElPX1NUQVQxKTtcbmRyaXZlcnMvbmV0L3BoeS9hczIxeHh4LmMtNjU3LVx0aWYgKHN0YXR1cyBcdTAwM2MgMClcbi0tXG5kcml2ZXJzL25ldC9waHkvYXMyMXh4eC5jPTY2NT1zdGF0aWMgaW50IGFzMjF4eHhfcmVhZF9jMjJfbHBhKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXG4tLVxuZHJpdmVycy9uZXQvcGh5L2FzMjF4eHguYy02NzEtXHQgKi9cbmRyaXZlcnMvbmV0L3BoeS9hczIxeHh4LmM6NjcyOlx0bHBhZ2IgPSBwaHlfcmVhZF9tbWQocGh5ZGV2LCBNRElPX01NRF9BTixcbmRyaXZlcnMvbmV0L3BoeS9hczIxeHh4LmMtNjczLVx0XHRcdCAgICAgQVMyMVhYWF9NRElPX0FOX0MyMiAmIzQzOyBNSUlfU1RBVDEwMDApO1xuLS1cbmRyaXZlcnMvbmV0L3BoeS9hczIxeHh4LmMtNjc3LVx0aWYgKGxwYWdiIFx1MDAyNiBMUEFfMTAwME1TRkFJTCkge1xuZHJpdmVycy9uZXQvcGh5L2FzMjF4eHguYzo2Nzg6XHRcdGludCBhZHYgPSBwaHlfcmVhZF9tbWQocGh5ZGV2LCBNRElPX01NRF9BTixcbmRyaXZlcnMvbmV0L3BoeS9hczIxeHh4LmMtNjc5LVx0XHRcdFx0ICAgICAgIEFTMjFYWFhfTURJT19BTl9DMjIgJiM0MzsgTUlJX0NUUkwxMDAwKTtcbi0tXG5kcml2ZXJzL25ldC9waHkvYXMyMXh4eC5jPTY5Nz1zdGF0aWMgaW50IGFzMjF4eHhfcmVhZF9zdGF0dXMoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcbi0tXG5kcml2ZXJzL25ldC9waHkvYXMyMXh4eC5jLTcyOS1cbmRyaXZlcnMvbmV0L3BoeS9hczIxeHh4LmM6NzMwOlx0XHRzcGVlZCA9IHBoeV9yZWFkX21tZChwaHlkZXYsIE1ESU9fTU1EX1ZFTkQxLFxuZHJpdmVycy9uZXQvcGh5L2FzMjF4eHguYy03MzEtXHRcdFx0XHQgICAgIFZFTkQxX1NQRUVEX1NUQVRVUyk7XG4tLVxuZHJpdmVycy9uZXQvcGh5L2FzMjF4eHguYz04MDM9c3RhdGljIGludCBhczIxeHh4X2xlZF9od19jb250cm9sX2dldChzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2LCB1OCBpbmRleCxcbi0tXG5kcml2ZXJzL25ldC9waHkvYXMyMXh4eC5jLTgxMC1cbmRyaXZlcnMvbmV0L3BoeS9hczIxeHh4LmM6ODExOlx0dmFsID0gcGh5X3JlYWRfbW1kKHBoeWRldiwgTURJT19NTURfVkVORDEsIFZFTkQxX0xFRF9SRUcoaW5kZXgpKTtcbmRyaXZlcnMvbmV0L3BoeS9hczIxeHh4LmMtODEyLVx0aWYgKHZhbCBcdTAwM2MgMClcbi0tXG5kcml2ZXJzL25ldC9waHkvYXMyMXh4eC5jPTg3OT1zdGF0aWMgaW50IGFzMjF4eHhfbWF0Y2hfcGh5X2RldmljZShzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2LFxuLS1cbmRyaXZlcnMvbmV0L3BoeS9hczIxeHh4LmMtODkyLVx0LyogUmVhZCBQSFkgSUQgdG8gaGFuZGxlIGZpcm13YXJlIGxvYWRlZCBvciBIVyByZXNldCAqL1xuZHJpdmVycy9uZXQvcGh5L2FzMjF4eHguYzo4OTM6XHRyZXQgPSBwaHlfcmVhZF9tbWQocGh5ZGV2LCBNRElPX01NRF9QQ1MsIE1JSV9QSFlTSUQxKTtcbmRyaXZlcnMvbmV0L3BoeS9hczIxeHh4LmMtODk0LVx0aWYgKHJldCBcdTAwM2MgMClcbi0tXG5kcml2ZXJzL25ldC9waHkvYXMyMXh4eC5jLTg5Ny1cbmRyaXZlcnMvbmV0L3BoeS9hczIxeHh4LmM6ODk4Olx0cmV0ID0gcGh5X3JlYWRfbW1kKHBoeWRldiwgTURJT19NTURfUENTLCBNSUlfUEhZU0lEMik7XG5kcml2ZXJzL25ldC9waHkvYXMyMXh4eC5jLTg5OS1cdGlmIChyZXQgXHUwMDNjIDApXG4tLVxuZHJpdmVycy9uZXQvcGh5L2JjbS1waHktbGliLmM9MzcyPWludCBiY21fcGh5X3NldF9lZWUoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldiwgYm9vbCBlbmFibGUpXG4tLVxuZHJpdmVycy9uZXQvcGh5L2JjbS1waHktbGliLmMtMzc2LVx0LyogRW5hYmxlIEVFRSBhdCBQSFkgbGV2ZWwgKi9cbmRyaXZlcnMvbmV0L3BoeS9iY20tcGh5LWxpYi5jOjM3NzpcdHZhbCA9IHBoeV9yZWFkX21tZChwaHlkZXYsIE1ESU9fTU1EX0FOLCBCUkNNX0NMNDVWRU5fRUVFX0NPTlRST0wpO1xuZHJpdmVycy9uZXQvcGh5L2JjbS1waHktbGliLmMtMzc4LVx0aWYgKHZhbCBcdTAwM2MgMClcbi0tXG5kcml2ZXJzL25ldC9waHkvYmNtLXBoeS1saWIuYy0zODgtXHQvKiBBZHZlcnRpc2UgRUVFICovXG5kcml2ZXJzL25ldC9waHkvYmNtLXBoeS1saWIuYzozODk6XHR2YWwgPSBwaHlfcmVhZF9tbWQocGh5ZGV2LCBNRElPX01NRF9BTiwgQkNNX0NMNDVWRU5fRUVFX0FEVik7XG5kcml2ZXJzL25ldC9waHkvYmNtLXBoeS1saWIuYy0zOTAtXHRpZiAodmFsIFx1MDAzYyAwKVxuLS1cbmRyaXZlcnMvbmV0L3BoeS9iY20tcGh5LWxpYi5jPTUzMz1zdGF0aWMgdTY0IGJjbV9waHlfZ2V0X3N0YXQoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldiwgdTY0ICpzaGFkb3csXG4tLVxuZHJpdmVycy9uZXQvcGh5L2JjbS1waHktbGliLmMtNTQyLVx0ZWxzZVxuZHJpdmVycy9uZXQvcGh5L2JjbS1waHktbGliLmM6NTQzOlx0XHR2YWwgPSBwaHlfcmVhZF9tbWQocGh5ZGV2LCBzdGF0LmRldmFkLCBzdGF0LnJlZyk7XG5kcml2ZXJzL25ldC9waHkvYmNtLXBoeS1saWIuYy01NDQtXHRpZiAodmFsIFx1MDAzYyAwKSB7XG4tLVxuZHJpdmVycy9uZXQvcGh5L2JjbTd4eHguYz02MjM9c3RhdGljIGJvb2wgYmNtN3h4eF8yOG5tX2VwaHlfZGV2X3ZhbGlkKGludCBkZXZudW0pXG4tLVxuZHJpdmVycy9uZXQvcGh5L2JjbTd4eHguYy02MjctXG5kcml2ZXJzL25ldC9waHkvYmNtN3h4eC5jOjYyODpzdGF0aWMgaW50IGJjbTd4eHhfMjhubV9lcGh5X3JlYWRfbW1kKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYsXG5kcml2ZXJzL25ldC9waHkvYmNtN3h4eC5jLTYyOS1cdFx0XHRcdCAgICAgIGludCBkZXZudW0sIHUxNiByZWdudW0pXG4tLVxuZHJpdmVycy9uZXQvcGh5L2JjbTd4eHguYz04MjE9c3RhdGljIGludCBiY203eHh4XzI4bm1fcHJvYmUoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcbi0tXG5kcml2ZXJzL25ldC9waHkvYmNtN3h4eC5jLTg4NS1cdC5wcm9iZVx0XHQ9IGJjbTd4eHhfMjhubV9wcm9iZSxcdFx0XHRcdFxcXG5kcml2ZXJzL25ldC9waHkvYmNtN3h4eC5jOjg4NjpcdC5yZWFkX21tZFx0PSBiY203eHh4XzI4bm1fZXBoeV9yZWFkX21tZCxcdFx0XHRcXFxuZHJpdmVycy9uZXQvcGh5L2JjbTd4eHguYy04ODctXHQud3JpdGVfbW1kXHQ9IGJjbTd4eHhfMjhubV9lcGh5X3dyaXRlX21tZCxcdFx0XHRcXFxuLS1cbmRyaXZlcnMvbmV0L3BoeS9iY204NDg4MS5jPTUwPXN0YXRpYyBpbnQgYmNtODQ4ODFfd2FpdF9pbml0KHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXG4tLVxuZHJpdmVycy9uZXQvcGh5L2JjbTg0ODgxLmMtNTMtXG5kcml2ZXJzL25ldC9waHkvYmNtODQ4ODEuYzo1NDpcdHJldHVybiBwaHlfcmVhZF9tbWRfcG9sbF90aW1lb3V0KHBoeWRldiwgTURJT19NTURfUE1BUE1ELCBNRElPX0NUUkwxLFxuZHJpdmVycy9uZXQvcGh5L2JjbTg0ODgxLmMtNTUtXHRcdFx0XHRcdCB2YWwsICEodmFsIFx1MDAyNiBNRElPX0NUUkwxX1JFU0VUKSxcbi0tXG5kcml2ZXJzL25ldC9waHkvYmNtODQ4ODEuYz0xODQ9c3RhdGljIGludCBiY204NDg5eF9sZWRfaHdfY29udHJvbF9nZXQoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldiwgdTggaW5kZXgsXG4tLVxuZHJpdmVycy9uZXQvcGh5L2JjbTg0ODgxLmMtMTkxLVxuZHJpdmVycy9uZXQvcGh5L2JjbTg0ODgxLmM6MTkyOlx0bG93ID0gcGh5X3JlYWRfbW1kKHBoeWRldiwgTURJT19NTURfUE1BUE1ELFxuZHJpdmVycy9uZXQvcGh5L2JjbTg0ODgxLmMtMTkzLVx0XHRcdCAgIGJjbTg0ODl4X2xlZF9yZWdzW2luZGV4XS5tYXNrX2xvdyk7XG4tLVxuZHJpdmVycy9uZXQvcGh5L2JjbTg0ODgxLmMtMTk1LVx0XHRyZXR1cm4gbG93O1xuZHJpdmVycy9uZXQvcGh5L2JjbTg0ODgxLmM6MTk2Olx0ZXh0ID0gcGh5X3JlYWRfbW1kKHBoeWRldiwgTURJT19NTURfUE1BUE1ELFxuZHJpdmVycy9uZXQvcGh5L2JjbTg0ODgxLmMtMTk3LVx0XHRcdCAgIGJjbTg0ODl4X2xlZF9yZWdzW2luZGV4XS5tYXNrX2V4dCk7XG4tLVxuZHJpdmVycy9uZXQvcGh5L2JjbTg0ODgxLmM9Mjg4PXN0YXRpYyBpbnQgYmNtODQ4ODFfYW5lZ19kb25lKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXG4tLVxuZHJpdmVycy9uZXQvcGh5L2JjbTg0ODgxLmMtMjkxLVxuZHJpdmVycy9uZXQvcGh5L2JjbTg0ODgxLmM6MjkyOlx0dmFsID0gcGh5X3JlYWRfbW1kKHBoeWRldiwgTURJT19NTURfQU4sIE1ESU9fU1RBVDEpO1xuZHJpdmVycy9uZXQvcGh5L2JjbTg0ODgxLmMtMjkzLVx0aWYgKHZhbCBcdTAwM2MgMClcbi0tXG5kcml2ZXJzL25ldC9waHkvYmNtODQ4ODEuYy0yOTUtXG5kcml2ZXJzL25ldC9waHkvYmNtODQ4ODEuYzoyOTY6XHRibXNyID0gcGh5X3JlYWRfbW1kKHBoeWRldiwgTURJT19NTURfQU4sIE1ESU9fQU5fQzIyICYjNDM7IE1JSV9CTVNSKTtcbmRyaXZlcnMvbmV0L3BoeS9iY204NDg4MS5jLTI5Ny1cdGlmIChibXNyIFx1MDAzYyAwKVxuLS1cbmRyaXZlcnMvbmV0L3BoeS9iY204NDg4MS5jPTMwND1zdGF0aWMgaW50IGJjbTg0ODgxX3JlYWRfc3RhdHVzKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXG4tLVxuZHJpdmVycy9uZXQvcGh5L2JjbTg0ODgxLmMtMzA4LVxuZHJpdmVycy9uZXQvcGh5L2JjbTg0ODgxLmM6MzA5Olx0dmFsID0gcGh5X3JlYWRfbW1kKHBoeWRldiwgTURJT19NTURfQU4sIE1ESU9fQ1RSTDEpO1xuZHJpdmVycy9uZXQvcGh5L2JjbTg0ODgxLmMtMzEwLVx0aWYgKHZhbCBcdTAwM2MgMClcbi0tXG5kcml2ZXJzL25ldC9waHkvYmNtODQ4ODEuYy0zMTctXG5kcml2ZXJzL25ldC9waHkvYmNtODQ4ODEuYzozMTg6XHR2YWwgPSBwaHlfcmVhZF9tbWQocGh5ZGV2LCBNRElPX01NRF9BTiwgTURJT19TVEFUMSk7XG5kcml2ZXJzL25ldC9waHkvYmNtODQ4ODEuYy0zMTktXHRpZiAodmFsIFx1MDAzYyAwKVxuLS1cbmRyaXZlcnMvbmV0L3BoeS9iY204NDg4MS5jLTMyMS1cbmRyaXZlcnMvbmV0L3BoeS9iY204NDg4MS5jOjMyMjpcdGJtc3IgPSBwaHlfcmVhZF9tbWQocGh5ZGV2LCBNRElPX01NRF9BTiwgTURJT19BTl9DMjIgJiM0MzsgTUlJX0JNU1IpO1xuZHJpdmVycy9uZXQvcGh5L2JjbTg0ODgxLmMtMzIzLVx0aWYgKGJtc3IgXHUwMDNjIDApXG4tLVxuZHJpdmVycy9uZXQvcGh5L2JjbTg0ODgxLmMtMzQ3LVxuZHJpdmVycy9uZXQvcGh5L2JjbTg0ODgxLmM6MzQ4Olx0XHR2YWwgPSBwaHlfcmVhZF9tbWQocGh5ZGV2LCBNRElPX01NRF9BTixcbmRyaXZlcnMvbmV0L3BoeS9iY204NDg4MS5jLTM0OS1cdFx0XHRcdCAgIE1ESU9fQU5fQzIyICYjNDM7IE1JSV9TVEFUMTAwMCk7XG4tLVxuZHJpdmVycy9uZXQvcGh5L2JjbTg0ODgxLmMtMzgwLVx0ICovXG5kcml2ZXJzL25ldC9waHkvYmNtODQ4ODEuYzozODE6XHR2YWwgPSBwaHlfcmVhZF9tbWQocGh5ZGV2LCBNRElPX01NRF9WRU5EMSwgMHg0MDExKTtcbmRyaXZlcnMvbmV0L3BoeS9iY204NDg4MS5jLTM4Mi1cdG1vZGUgPSAodmFsIFx1MDAyNiAweDFlKSBcdTAwM2VcdTAwM2UgMTtcbi0tXG5kcml2ZXJzL25ldC9waHkvYmNtODd4eC5jPTM0PXN0YXRpYyBpbnQgYmNtODd4eF9vZl9yZWdfaW5pdChzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxuLS1cbmRyaXZlcnMvbmV0L3BoeS9iY204N3h4LmMtNTktXHRcdGlmIChtYXNrKSB7XG5kcml2ZXJzL25ldC9waHkvYmNtODd4eC5jOjYwOlx0XHRcdHZhbCA9IHBoeV9yZWFkX21tZChwaHlkZXYsIGRldmlkLCByZWcpO1xuZHJpdmVycy9uZXQvcGh5L2JjbTg3eHguYy02MS1cdFx0XHRpZiAodmFsIFx1MDAzYyAwKSB7XG4tLVxuZHJpdmVycy9uZXQvcGh5L2JjbTg3eHguYz0xMDA9c3RhdGljIGludCBiY204N3h4X3JlYWRfc3RhdHVzKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXG4tLVxuZHJpdmVycy9uZXQvcGh5L2JjbTg3eHguYy0xMDUtXG5kcml2ZXJzL25ldC9waHkvYmNtODd4eC5jOjEwNjpcdHJ4X3NpZ25hbF9kZXRlY3QgPSBwaHlfcmVhZF9tbWQocGh5ZGV2LCBNRElPX01NRF9QTUFQTUQsXG5kcml2ZXJzL25ldC9waHkvYmNtODd4eC5jLTEwNy1cdFx0XHRcdFx0QkNNODdYWF9QTURfUlhfU0lHTkFMX0RFVEVDVCk7XG4tLVxuZHJpdmVycy9uZXQvcGh5L2JjbTg3eHguYy0xMTMtXG5kcml2ZXJzL25ldC9waHkvYmNtODd4eC5jOjExNDpcdHBjc19zdGF0dXMgPSBwaHlfcmVhZF9tbWQocGh5ZGV2LCBNRElPX01NRF9QQ1MsXG5kcml2ZXJzL25ldC9waHkvYmNtODd4eC5jLTExNS1cdFx0XHRcdCAgQkNNODdYWF8xMEdCQVNFUl9QQ1NfU1RBVFVTKTtcbi0tXG5kcml2ZXJzL25ldC9waHkvYmNtODd4eC5jLTEyMS1cbmRyaXZlcnMvbmV0L3BoeS9iY204N3h4LmM6MTIyOlx0eGd4c19sYW5lX3N0YXR1cyA9IHBoeV9yZWFkX21tZChwaHlkZXYsIE1ESU9fTU1EX1BIWVhTLFxuZHJpdmVycy9uZXQvcGh5L2JjbTg3eHguYy0xMjMtXHRcdFx0XHRcdEJDTTg3WFhfWEdYU19MQU5FX1NUQVRVUyk7XG4tLVxuZHJpdmVycy9uZXQvcGh5L2JjbTg3eHguYz0xNDA9c3RhdGljIGludCBiY204N3h4X2NvbmZpZ19pbnRyKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXG4tLVxuZHJpdmVycy9uZXQvcGh5L2JjbTg3eHguYy0xNDMtXG5kcml2ZXJzL25ldC9waHkvYmNtODd4eC5jOjE0NDpcdHJlZyA9IHBoeV9yZWFkX21tZChwaHlkZXYsIE1ESU9fTU1EX1BDUywgQkNNODdYWF9MQVNJX0NPTlRST0wpO1xuZHJpdmVycy9uZXQvcGh5L2JjbTg3eHguYy0xNDUtXG4tLVxuZHJpdmVycy9uZXQvcGh5L2JjbTg3eHguYy0xNDktXHRpZiAocGh5ZGV2LVx1MDAzZWludGVycnVwdHMgPT0gUEhZX0lOVEVSUlVQVF9FTkFCTEVEKSB7XG5kcml2ZXJzL25ldC9waHkvYmNtODd4eC5jOjE1MDpcdFx0ZXJyID0gcGh5X3JlYWRfbW1kKHBoeWRldiwgTURJT19NTURfUENTLCBCQ004N1hYX0xBU0lfU1RBVFVTKTtcbmRyaXZlcnMvbmV0L3BoeS9iY204N3h4LmMtMTUxLVx0XHRpZiAoZXJyKVxuLS1cbmRyaXZlcnMvbmV0L3BoeS9iY204N3h4LmMtMTYzLVxuZHJpdmVycy9uZXQvcGh5L2JjbTg3eHguYzoxNjQ6XHRcdGVyciA9IHBoeV9yZWFkX21tZChwaHlkZXYsIE1ESU9fTU1EX1BDUywgQkNNODdYWF9MQVNJX1NUQVRVUyk7XG5kcml2ZXJzL25ldC9waHkvYmNtODd4eC5jLTE2NS1cdH1cbi0tXG5kcml2ZXJzL25ldC9waHkvZHA4MzgyMi5jPTIxND1zdGF0aWMgaW50IGRwODM4MjJfY29uZmlnX3dvbChzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2LFxuLS1cbmRyaXZlcnMvbmV0L3BoeS9kcDgzODIyLmMtMjM2LVxuZHJpdmVycy9uZXQvcGh5L2RwODM4MjIuYzoyMzc6XHRcdHZhbHVlID0gcGh5X3JlYWRfbW1kKHBoeWRldiwgTURJT19NTURfVkVORDIsXG5kcml2ZXJzL25ldC9waHkvZHA4MzgyMi5jLTIzOC1cdFx0XHRcdCAgICAgTUlJX0RQODM4MjJfV09MX0NGRyk7XG4tLVxuZHJpdmVycy9uZXQvcGh5L2RwODM4MjIuYz0yODg9c3RhdGljIHZvaWQgZHA4MzgyMl9nZXRfd29sKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYsXG4tLVxuZHJpdmVycy9uZXQvcGh5L2RwODM4MjIuYy0yOTYtXG5kcml2ZXJzL25ldC9waHkvZHA4MzgyMi5jOjI5NzpcdHZhbHVlID0gcGh5X3JlYWRfbW1kKHBoeWRldiwgTURJT19NTURfVkVORDIsIE1JSV9EUDgzODIyX1dPTF9DRkcpO1xuZHJpdmVycy9uZXQvcGh5L2RwODM4MjIuYy0yOTgtXG4tLVxuZHJpdmVycy9uZXQvcGh5L2RwODM4MjIuYy0zMDItXHRpZiAodmFsdWUgXHUwMDI2IERQODM4MjJfV09MX1NFQ1VSRV9PTikge1xuZHJpdmVycy9uZXQvcGh5L2RwODM4MjIuYzozMDM6XHRcdHNvcGFzc192YWwgPSBwaHlfcmVhZF9tbWQocGh5ZGV2LCBNRElPX01NRF9WRU5EMixcbmRyaXZlcnMvbmV0L3BoeS9kcDgzODIyLmMtMzA0LVx0XHRcdFx0XHQgIE1JSV9EUDgzODIyX1JYU09QMSk7XG4tLVxuZHJpdmVycy9uZXQvcGh5L2RwODM4MjIuYy0zMDctXG5kcml2ZXJzL25ldC9waHkvZHA4MzgyMi5jOjMwODpcdFx0c29wYXNzX3ZhbCA9IHBoeV9yZWFkX21tZChwaHlkZXYsIE1ESU9fTU1EX1ZFTkQyLFxuZHJpdmVycy9uZXQvcGh5L2RwODM4MjIuYy0zMDktXHRcdFx0XHRcdCAgTUlJX0RQODM4MjJfUlhTT1AyKTtcbi0tXG5kcml2ZXJzL25ldC9waHkvZHA4MzgyMi5jLTMxMi1cbmRyaXZlcnMvbmV0L3BoeS9kcDgzODIyLmM6MzEzOlx0XHRzb3Bhc3NfdmFsID0gcGh5X3JlYWRfbW1kKHBoeWRldiwgTURJT19NTURfVkVORDIsXG5kcml2ZXJzL25ldC9waHkvZHA4MzgyMi5jLTMxNC1cdFx0XHRcdFx0ICBNSUlfRFA4MzgyMl9SWFNPUDMpO1xuLS1cbmRyaXZlcnMvbmV0L3BoeS9kcDgzODIyLmM9OTE3PXN0YXRpYyBpbnQgZHA4MzgyMl9yZWFkX3N0cmFwcyhzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxuLS1cbmRyaXZlcnMvbmV0L3BoeS9kcDgzODIyLmMtOTIyLVxuZHJpdmVycy9uZXQvcGh5L2RwODM4MjIuYzo5MjM6XHR2YWwgPSBwaHlfcmVhZF9tbWQocGh5ZGV2LCBNRElPX01NRF9WRU5EMiwgTUlJX0RQODM4MjJfU09SMSk7XG5kcml2ZXJzL25ldC9waHkvZHA4MzgyMi5jLTkyNC1cdGlmICh2YWwgXHUwMDNjIDApXG4tLVxuZHJpdmVycy9uZXQvcGh5L2RwODM4MjIuYz0xMDMzPXN0YXRpYyBpbnQgZHA4MzgyMl9zdXNwZW5kKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXG4tLVxuZHJpdmVycy9uZXQvcGh5L2RwODM4MjIuYy0xMDM2LVxuZHJpdmVycy9uZXQvcGh5L2RwODM4MjIuYzoxMDM3Olx0dmFsdWUgPSBwaHlfcmVhZF9tbWQocGh5ZGV2LCBNRElPX01NRF9WRU5EMiwgTUlJX0RQODM4MjJfV09MX0NGRyk7XG5kcml2ZXJzL25ldC9waHkvZHA4MzgyMi5jLTEwMzgtXG4tLVxuZHJpdmVycy9uZXQvcGh5L2RwODM4MjIuYz0xMDQ1PXN0YXRpYyBpbnQgZHA4MzgyMl9yZXN1bWUoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcbi0tXG5kcml2ZXJzL25ldC9waHkvZHA4MzgyMi5jLTEwNTAtXG5kcml2ZXJzL25ldC9waHkvZHA4MzgyMi5jOjEwNTE6XHR2YWx1ZSA9IHBoeV9yZWFkX21tZChwaHlkZXYsIE1ESU9fTU1EX1ZFTkQyLCBNSUlfRFA4MzgyMl9XT0xfQ0ZHKTtcbmRyaXZlcnMvbmV0L3BoeS9kcDgzODIyLmMtMTA1Mi1cbi0tXG5kcml2ZXJzL25ldC9waHkvZHA4MzgyMi5jPTExMjQ9c3RhdGljIGludCBkcDgzODIyX2xlZF9od19jb250cm9sX2dldChzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2LCB1OCBpbmRleCxcbi0tXG5kcml2ZXJzL25ldC9waHkvZHA4MzgyMi5jLTExMjktXHRpZiAoaW5kZXggPT0gRFA4MzgyMl9MRURfSU5ERVhfTEVEXzAgfHwgaW5kZXggPT0gRFA4MzgyMl9MRURfSU5ERVhfQ09MX0dQSU8yKSB7XG5kcml2ZXJzL25ldC9waHkvZHA4MzgyMi5jOjExMzA6XHRcdHZhbCA9IHBoeV9yZWFkX21tZChwaHlkZXYsIE1ESU9fTU1EX1ZFTkQyLCBNSUlfRFA4MzgyMl9NTEVEQ1IpO1xuZHJpdmVycy9uZXQvcGh5L2RwODM4MjIuYy0xMTMxLVx0XHRpZiAodmFsIFx1MDAzYyAwKVxuLS1cbmRyaXZlcnMvbmV0L3BoeS9kcDgzODIyLmMtMTEzNS1cdH0gZWxzZSB7XG5kcml2ZXJzL25ldC9waHkvZHA4MzgyMi5jOjExMzY6XHRcdHZhbCA9IHBoeV9yZWFkX21tZChwaHlkZXYsIE1ESU9fTU1EX1ZFTkQyLCBNSUlfRFA4MzgyMl9MRURDRkcxKTtcbmRyaXZlcnMvbmV0L3BoeS9kcDgzODIyLmMtMTEzNy1cdFx0aWYgKHZhbCBcdTAwM2MgMClcbi0tXG5kcml2ZXJzL25ldC9waHkvZHA4Mzg2Ny5jPTIxMT1zdGF0aWMgaW50IGRwODM4Njdfc2V0X3dvbChzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2LFxuLS1cbmRyaXZlcnMvbmV0L3BoeS9kcDgzODY3LmMtMjE3LVxuZHJpdmVycy9uZXQvcGh5L2RwODM4NjcuYzoyMTg6XHR2YWxfcnhjZmcgPSBwaHlfcmVhZF9tbWQocGh5ZGV2LCBEUDgzODY3X0RFVkFERFIsIERQODM4NjdfUlhGQ0ZHKTtcbmRyaXZlcnMvbmV0L3BoeS9kcDgzODY3LmMtMjE5LVx0dmFsX21pY3IgPSBwaHlfcmVhZChwaHlkZXYsIE1JSV9EUDgzODY3X01JQ1IpO1xuLS1cbmRyaXZlcnMvbmV0L3BoeS9kcDgzODY3LmM9Mjc3PXN0YXRpYyB2b2lkIGRwODM4NjdfZ2V0X3dvbChzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2LFxuLS1cbmRyaXZlcnMvbmV0L3BoeS9kcDgzODY3LmMtMjg1LVxuZHJpdmVycy9uZXQvcGh5L2RwODM4NjcuYzoyODY6XHR2YWx1ZSA9IHBoeV9yZWFkX21tZChwaHlkZXYsIERQODM4NjdfREVWQUREUiwgRFA4Mzg2N19SWEZDRkcpO1xuZHJpdmVycy9uZXQvcGh5L2RwODM4NjcuYy0yODctXG4tLVxuZHJpdmVycy9uZXQvcGh5L2RwODM4NjcuYy0yOTctXHRpZiAodmFsdWUgXHUwMDI2IERQODM4NjdfV09MX1NFQ19FTikge1xuZHJpdmVycy9uZXQvcGh5L2RwODM4NjcuYzoyOTg6XHRcdHNvcGFzc192YWwgPSBwaHlfcmVhZF9tbWQocGh5ZGV2LCBEUDgzODY3X0RFVkFERFIsXG5kcml2ZXJzL25ldC9waHkvZHA4Mzg2Ny5jLTI5OS1cdFx0XHRcdFx0ICBEUDgzODY3X1JYRlNPUDEpO1xuLS1cbmRyaXZlcnMvbmV0L3BoeS9kcDgzODY3LmMtMzAyLVxuZHJpdmVycy9uZXQvcGh5L2RwODM4NjcuYzozMDM6XHRcdHNvcGFzc192YWwgPSBwaHlfcmVhZF9tbWQocGh5ZGV2LCBEUDgzODY3X0RFVkFERFIsXG5cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDMgMDc6Mzc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzQ4NDUKCQkJCQkJCW91dHB1dDogMzIKCQkJCQkJCXRob3VnaHRzOiAzMzEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqUmVhbGl6aW5nIHRoZSBQb3RlbnRpYWwgb2YgVVNCLUVtdWxhdGVkIFBIWSBEcml2ZXIgQWNjZXNzKioKCk9rYXksIGhvbGQgb24gYSBzZWNvbmQuLi4gYHBoeV9yZWFkX21tZGAgaXMgKmV2ZXJ5d2hlcmUqLiBJZiBhIFVTQiBkZXZpY2Ugc3VwcG9ydHMgQ2xhdXNlIDIyLCB0aGUgUEhZIGZyYW1ld29yayBjbGV2ZXJseSB1c2VzIGluZGlyZWN0IGFjY2VzcyAocmVnaXN0ZXJzIDEzIGFuZCAxNCkgdG8gZXNzZW50aWFsbHkgdHJhbnNsYXRlIENsYXVzZSA0NSBhY2Nlc3Nlcy4gU28sIHdhaXQuLi4gYHBoeV9yZWFkX21tZGAgKndvcmtzKiBvbiBDbGF1c2UgMjIgUEhZcyEgVGhpcyBjbGlja3MsIGJlY2F1c2UgSSBrbm93IHRoZSBSZWFsdGVrIFBIWSBkcml2ZXIgdXNlcyBgcGh5X3JlYWRfbW1kYCwgcmlnaHQ/IFllcywgaXQgZG9lcy4KClNvIGhlcmUmIzM5O3MgdGhlIHRob3VnaHQuIElmIHdlIGNvbnN0cnVjdCBhIG1vY2sgVVNCIG5ldHdvcmsgZGV2aWNlIHRoYXQgYWxzbyByZWdpc3RlcnMgYW4gTURJTyBidXMsIGFuZCB3ZSBjYW4gY29udHJvbCB0aGUgcmVzcG9uc2VzIHRvIE1ESU8gcmVhZHMuLi4gd2UgY2FuICp0cmljayogaXQgaW50byByZXBvcnRpbmcgdGhlIFJlYWx0ZWsgUEhZIElEIChgMHgwMDFjYzg5OGApIHdoZW4gdGhlIE1ESU8gYnVzIHNjYW5zIGZvciBQSFlzLiBUaGVuLCB0aGUga2VybmVsLCB0aGlua2luZyBhIFJlYWx0ZWsgUEhZIGlzIHByZXNlbnQsIHdpbGwgaW5zdGFudGlhdGUgdGhlIFJlYWx0ZWsgUEhZIGRyaXZlciBhbmQgY2FsbCBgcnRsODI2MXhfcHJvYmVgLgoKQW5kIHRoYXQmIzM5O3Mgd2hlcmUgc3l6a2FsbGVyIGNvbWVzIGluLiBJIHJlY2FsbCBpdCBoYXMgYSBgc3l6X3VzYl9jb25uZWN0YCB0b29sIHdoaWNoIGNhbiBlbXVsYXRlIFVTQiBkZXZpY2VzLiBDYW4gaXQgZW11bGF0ZSBhIFVTQiBuZXR3b3JrIGRldmljZSB0aGF0IHJlZ2lzdGVycyBhbiBNRElPIGJ1cz8gWWVzLCBzeXprYWxsZXIgZnV6emVzIFVTQiBkZXZpY2VzIGJ5IGZlZWRpbmcgdGhlbSBhcmJpdHJhcnkgVVNCIGRlc2NyaXB0b3JzLiBJZiBpdCB1c2VzIGRlc2NyaXB0b3JzIGZvciB0aGUgYHNtc2M5NXh4YCBvciBgYXNpeGAgZHJpdmVycywgdGhlbiB0aGUgZHJpdmVyIHdpbGwgYmluZCwgcmVnaXN0ZXIgYW4gTURJTyBidXMsIGFuZCBzdGFydCBzY2FubmluZy4gVGhlIGV4Y2l0aW5nIHBhcnQgaXMsIHN5emthbGxlciBjYW4gZ2l2ZSB0aGUgcmVzcG9uc2VzIHRvIHRoZSBVU0IgY29udHJvbCBtZXNzYWdlcyB3aGljaCB0aGUgZHJpdmVyIHVzZXMgdG8gcmVhZCBNRElPIHJlZ2lzdGVycyEKClRoaXMgaXMgaXQhIFRoaXMgbWVhbnMgdGhlIFBIWSBkcml2ZXIgaXMgcmVhY2hhYmxlIGZyb20gYSB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudCB2aWEgVVNCIGVtdWxhdGlvbiEgV2FpdCwgaXMgdGhlIFJlYWx0ZWsgUEhZIGRyaXZlciBlbmFibGVkIGJ5IGRlZmF1bHQgb3IgaXMgdGhlcmUgc29tZSBjb25maWcgbmVlZGVkPyBMZXQmIzM5O3MgY2hlY2sgdGhlIEtjb25maWcgZm9yIFJlYWx0ZWsgUEhZLiBUaGlzIGlzIHBvdGVudGlhbGx5IGh1Z2UuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAzIDA3OjM3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBSRUFMVEVLX1BIWSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3BoeS8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvcGh5L3JlYWx0ZWsvS2NvbmZpZy0xLSMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxuZHJpdmVycy9uZXQvcGh5L3JlYWx0ZWsvS2NvbmZpZzoyOmNvbmZpZyBSRUFMVEVLX1BIWVxuZHJpdmVycy9uZXQvcGh5L3JlYWx0ZWsvS2NvbmZpZy0zLVx0dHJpc3RhdGUgXCYjMzQ7UmVhbHRlayBQSFlzXCYjMzQ7XG4tLVxuZHJpdmVycy9uZXQvcGh5L3JlYWx0ZWsvS2NvbmZpZz04PWlmIFJFQUxURUtfUEhZXG5kcml2ZXJzL25ldC9waHkvcmVhbHRlay9LY29uZmlnLTktXG5kcml2ZXJzL25ldC9waHkvcmVhbHRlay9LY29uZmlnOjEwOmNvbmZpZyBSRUFMVEVLX1BIWV9IV01PTlxuZHJpdmVycy9uZXQvcGh5L3JlYWx0ZWsvS2NvbmZpZy0xMS1cdGJvb2wgXCYjMzQ7SFdNT04gc3VwcG9ydCBmb3IgUmVhbHRlayBQSFlzXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAzIDA3OjM3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDM1NzkxCgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogMzUwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgUmVhbHRlayBQSFkgQ29uZmlndXJhdGlvbioqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBgQ09ORklHX1JFQUxURUtfUEhZYCBjb25maWcgb3B0aW9uLiBJIG5lZWQgdG8gZmlndXJlIG91dCBpZiB0aGVyZSBhcmUgYW55IG90aGVyIHJlbGF0ZWQgY29uZmlncyBpbiBwbGF5IGhlcmUuIFRoZSBwYXRjaCBhZGRzIHRoaXMgZmlybXdhcmUgbmFtZSwgYFJUTDgyNjFDX0NFX0ZXX05BTUUgJiMzNDtydGxfbmljL3J0bDgyNjFjLmJpbiYjMzQ7YC4gTm93LCBJIHJlbWVtYmVyIHNlZWluZyBgcmVxdWVzdF9maXJtd2FyZWAgYmVpbmcgY2FsbGVkIGluIGBydGw4MjYxeF9md19sb2FkYC4gSWYgdGhhdCBmYWlscywgYmVjYXVzZSB0aGUgZmlybXdhcmUgaXNuJiMzOTt0IHByZXNlbnQsIGBydGw4MjYxeF9md19sb2FkYCByZXR1cm5zIGFuIGVycm9yLCB3aGljaCwgb2YgY291cnNlLCBwcm9wYWdhdGVzIHVwIHRvIGBydGw4MjYxeF9jb25maWdfaW5pdGAuCgpNeSBpbml0aWFsIHRob3VnaHQgaXMgdGhhdCB0aGlzIG1pZ2h0IGJlIGEgcm9hZGJsb2NrIGZvciBmdXp6aW5nLiBIb3dldmVyLCB0aGF0JiMzOTtzIGFzc3VtaW5nIHdlICpuZWVkKiB0aGUgZmlybXdhcmUuIFdhaXQsIFN5emthbGxlciBjYW4gcHJvdmlkZSB0aGUgZmlybXdhcmUgdXNpbmcgYHN5el9tb3VudF9pbWFnZWAgb3Igc29tZXRoaW5nIHNpbWlsYXIsIHJpZ2h0PyBPciwgbWF5YmUgc29tZSBjb2RlIHBhdGhzIGRvbiYjMzk7dCBldmVuIHVzZSB0aGUgZmlybXdhcmUuIEkgbmVlZCB0byBjbGFyaWZ5IHRoYXQuIE9rYXksIEkgdGhpbmsgaWYgU3l6a2FsbGVyIHByb3ZpZGVzIHRoZSBmaWxlLCB0aGVuIHdlIGNhbiBkZWZpbml0ZWx5IGZ1enogYHJlcXVlc3RfZmlybXdhcmVgLiBPdGhlcndpc2UsIHdlIGNhbiBqdXN0IHNheSBpdCYjMzk7cyByZWFjaGFibGUuCgpIb2xkIG9uLCBJIHNlZSBgcHJpdi0mZ3Q7ZndfbmFtZWAgaXMgc2V0LCBhbmQgaXQgdHJpZXMgdG8gbG9hZCB0aGF0LiBBIGZhaWx1cmUgZ2l2ZXMgdXMgYW4gZXJyb3IuIENhbiB3ZSB0aGVuIHJlYWNoIGBnZW5waHlfYzQ1X3BtYV9zb2Z0X3Jlc2V0YD8gSXQmIzM5O3MgZGVmaW5lZCBhcyBgLnNvZnRfcmVzZXQgPSBnZW5waHlfYzQ1X3BtYV9zb2Z0X3Jlc2V0YC4gQWgsIHllcywgYHNvZnRfcmVzZXRgIGlzIGNhbGxlZCBkdXJpbmcgdGhlIFBIWSBpbml0aWFsaXphdGlvbiwgKmJlZm9yZSogYGNvbmZpZ19pbml0YCEgT2theSwgbGV0IG1lIGdvIGNoZWNrIHRoZSBjYWxsIG9yZGVyIGluIGBwaHlfZGV2aWNlLmNgIG9yIGBwaHkuY2AgdG8gYmUgc3VyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDMgMDc6Mzg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7c29mdF9yZXNldCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYz0xMzQxPWludCBwaHlfaW5pdF9odyhzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxuLS1cbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmMtMTM1MC1cbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmM6MTM1MTpcdGlmIChwaHlkZXYtXHUwMDNlZHJ2LVx1MDAzZXNvZnRfcmVzZXQpIHtcbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmM6MTM1MjpcdFx0cmV0ID0gcGh5ZGV2LVx1MDAzZWRydi1cdTAwM2Vzb2Z0X3Jlc2V0KHBoeWRldik7XG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jLTEzNTMtXHRcdGlmIChyZXQgXHUwMDNjIDApXG4tLVxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYy0xMzU1LVxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYzoxMzU2Olx0XHQvKiBzZWUgY29tbWVudCBpbiBnZW5waHlfc29mdF9yZXNldCBmb3IgYW4gZXhwbGFuYXRpb24gKi9cbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmMtMTM1Ny1cdFx0cGh5ZGV2LVx1MDAzZXN1c3BlbmRlZCA9IDA7XG4tLVxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYz0yNjY0PUVYUE9SVF9TWU1CT0woZ2VucGh5X2MzN19yZWFkX3N0YXR1cyk7XG4tLVxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYy0yNjY2LS8qKlxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYzoyNjY3OiAqIGdlbnBoeV9zb2Z0X3Jlc2V0IC0gc29mdHdhcmUgcmVzZXQgdGhlIFBIWSB2aWEgQk1DUl9SRVNFVCBiaXRcbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmMtMjY2OC0gKiBAcGh5ZGV2OiB0YXJnZXQgcGh5X2RldmljZSBzdHJ1Y3Rcbi0tXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jLTI2NzQtICovXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jOjI2NzU6aW50IGdlbnBoeV9zb2Z0X3Jlc2V0KHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jLTI2NzYte1xuLS1cbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmMtMjcwMi19XG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jOjI3MDM6RVhQT1JUX1NZTUJPTChnZW5waHlfc29mdF9yZXNldCk7XG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jLTI3MDQtXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAzIDA3OjM4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDM3MDU5CgkJCQkJCQlvdXRwdXQ6IDM2CgkJCQkJCQl0aG91Z2h0czogMTg3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IENvbmNlcm5zIFJlZ2FyZGluZyB0aGUgUEhZIEluaXRpYWxpemF0aW9uIFNlcXVlbmNlKioKCk9rYXksIHNvIEkmIzM5O20gZm9jdXNpbmcgb24gdGhlIFBIWSBpbml0aWFsaXphdGlvbiBmbG93IGFuZCBJJiMzOTt2ZSBnb3QgYSBjb3VwbGUgb2YgaW1wb3J0YW50IHRoaW5ncyB0byBjb25zaWRlciBoZXJlLiBSaWdodCwgc28gYHNvZnRfcmVzZXRgIGlzIGNhbGxlZCB3aXRoaW4gYHBoeV9pbml0X2h3YCwgd2hpY2ggaGFwcGVucyAqYmVmb3JlKiBgY29uZmlnX2luaXRgLiBBY3R1YWxseSwgd2FpdCwgbGV0IG1lIHJlcGhyYXNlIHRoYXQuLi4gYHBoeV9pbml0X2h3YCBjYWxscyBgc29mdF9yZXNldGAgKmJlZm9yZSogYGNvbmZpZ19pbml0YC4gVGhhdCYjMzk7cyBjcml0aWNhbC4gVGhhdCBtZWFucyB0aGF0IGBnZW5waHlfYzQ1X3BtYV9zb2Z0X3Jlc2V0YCBpcyBnb2luZyB0byBleGVjdXRlIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciB0aGUgc3Vic2VxdWVudCBmaXJtd2FyZSBsb2FkaW5nIGlzIHN1Y2Nlc3NmdWwgb3Igbm90LiBXZSBuZWVkIHRvIGJlIGF3YXJlIG9mIHRoaXMgYW5kIGVuc3VyZSB0aGF0JiMzOTtzIHRoZSBpbnRlbmRlZCBiZWhhdmlvdXIuCgpGdXJ0aGVybW9yZSwgSSYjMzk7bSBub3RpbmcgdGhhdCBgZ2VucGh5X2M0NV9hbl9zZXR1cF9tYXN0ZXJfc2xhdmVgIGFuZCBgZ2VucGh5X2M0NV9yZWFkX21hc3Rlcl9zbGF2ZWAgYXJlIGxpbmtlZCB0byBgZ2VucGh5X2M0NV9jb25maWdfYW5lZ2AgYW5kIGBnZW5waHlfYzQ1X3JlYWRfc3RhdHVzYCByZXNwZWN0aXZlbHkuIFRob3NlIGZ1bmN0aW9ucyBhcmUgdHJpZ2dlcmVkIHdoZW4gdGhlIG5ldHdvcmsgaW50ZXJmYWNlIGNvbWVzIG9ubGluZS4gU28sIHdoYXQgaGFwcGVucyBpZiBgY29uZmlnX2luaXRgIHN1YnNlcXVlbnRseSBmYWlscz8gRG9lcyB0aGUgUEhZIGRldmljZSBnZXQgcHJvcGVybHkgcmVnaXN0ZXJlZCB3aXRoIHRoZSBzeXN0ZW0/IEkgbmVlZCB0byBsb29rIGludG8gdGhpcyBtb3JlIGRlZXBseS4gSSBzaG91bGQgcHJvYmFibHkgYmUgY2hlY2tpbmcgYHBoeV9kZXZpY2VfYXR0YWNoYCBvciBgcGh5X2F0dGFjaF9kaXJlY3RgIHRvIHNlZSBob3cgdGhhdCBpbnRlcmFjdHMgd2l0aCBhIHBvdGVudGlhbCBgY29uZmlnX2luaXRgIGZhaWx1cmUuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoYXQgY2FsbCBmbG93IGluIG1vcmUgZGV0YWlsLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMyAwNzozODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtwaHlfaW5pdF9odyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYz0zNzg9c3RhdGljIF9fbWF5YmVfdW51c2VkIGludCBtZGlvX2J1c19waHlfcmVzdW1lKHN0cnVjdCBkZXZpY2UgKmRldilcbi0tXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jLTM5OC1cbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmM6Mzk5Olx0cmV0ID0gcGh5X2luaXRfaHcocGh5ZGV2KTtcbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmMtNDAwLVx0aWYgKHJldCBcdTAwM2MgMClcbi0tXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jPTEzMDU9RVhQT1JUX1NZTUJPTChwaHlfZGlzY29ubmVjdCk7XG4tLVxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYy0xMzIxLSAqICAgZWZmb3J0IHRvIHN1cHBvcnQgc3VjaCBicm9rZW4gUEhZcywgdGhpcyBmdW5jdGlvbiBpcyBzZXBhcmF0ZSBmcm9tIHRoZVxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYzoxMzIyOiAqICAgc3RhbmRhcmQgcGh5X2luaXRfaHcoKSB3aGljaCB3aWxsIHplcm8gYWxsIHRoZSBvdGhlciBiaXRzIGluIHRoZSBCTUNSXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jLTEzMjMtICogICBhbmQgcmVhcHBseSBhbGwgZHJpdmVyLXNwZWNpZmljIGFuZCBib2FyZC1zcGVjaWZpYyBmaXh1cHMuXG4tLVxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYz0xMzI1PXN0YXRpYyBpbnQgcGh5X3BvbGxfcmVzZXQoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcbi0tXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jLTEzNDAtXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jOjEzNDE6aW50IHBoeV9pbml0X2h3KHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jLTEzNDIte1xuLS1cbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmMtMTM4Ny19XG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jOjEzODg6RVhQT1JUX1NZTUJPTChwaHlfaW5pdF9odyk7XG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jLTEzODktXG4tLVxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYz0xNzUyPWludCBwaHlfYXR0YWNoX2RpcmVjdChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2LFxuLS1cbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmMtMTg3NC1cdCAqL1xuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYzoxODc1Olx0ZXJyID0gcGh5X2luaXRfaHcocGh5ZGV2KTtcbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmMtMTg3Ni1cdGlmIChlcnIpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAzIDA3OjM4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDM4MTQxCgkJCQkJCQlvdXRwdXQ6IDM1CgkJCQkJCQl0aG91Z2h0czogNjc5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkZ1enppbmcgdGhlIFJUTDgyNjF4IFBIWSBGaXJtd2FyZSoqCgpPa2F5LCBzbyBoZXJlJiMzOTtzIHRoZSBkZWFsOiBgcGh5X2luaXRfaHdgIGdldHMgY2FsbGVkIHdpdGhpbiBgcGh5X2F0dGFjaF9kaXJlY3RgLiBJZiBgcGh5X2luaXRfaHdgIGJvbWJzIG91dCDigJMgbWF5YmUgYmVjYXVzZSBgY29uZmlnX2luaXRgIGNob2tlcyBvbiBtaXNzaW5nIGZpcm13YXJlIOKAkyB0aGVuIGBwaHlfYXR0YWNoX2RpcmVjdGAgZ29lcyBkb3duIHdpdGggaXQsIGFuZCB0aGF0IG1lYW5zIHRoZSBuZXR3b3JrIGRyaXZlciBmYWlscyB0byBvcGVuLiBCdXQsIHRoZXJlJiMzOTtzIGEgc2F2aW5nIGdyYWNlOiBTeXprYWxsZXIhIFdlIGNhbiBhY3R1YWxseSBsZXZlcmFnZSBTeXprYWxsZXIgdG8gaW5qZWN0IHRoYXQgbWlzc2luZyBmaXJtd2FyZS4gSXQgaGFzIHRoZSBjYXBhYmlsaXR5IHRvIHByb3ZpZGUgdGhlIGZpcm13YXJlIGZpbGVzIHdoZW4gcmVxdWVzdGVkLgoKTG9va2luZyBjbG9zZXIsIHRoZSBmaXJtd2FyZSBsb2FkaW5nIG9ubHkgaGFwcGVucyBpZiBgcHJpdi0mZ3Q7ZndfbmFtZWAgaXMgc2V0LiBOb3csIHdoZXJlIGlzIGBwcml2LSZndDtmd19uYW1lYCBzZXQ/IEFoLCBpbiBgcnRsODI2MXhfcHJvYmVgLCBidXQgb25seSBpZiBgc3ViX3BoeV9pZGAgaXMgZXF1YWwgdG8gYFJUTDgyNjFDX0NFX01PREVMYC4gSWYgYHN1Yl9waHlfaWRgIGlzIGFueXRoaW5nIGVsc2UsIGBydGw4MjYxeF9wcm9iZWAgcmV0dXJucyBgLUVOT0RFVmAuIEFuZCBob3cgZG8gd2UgZGV0ZXJtaW5lIHRoZSB2YWx1ZSBvZiBgc3ViX3BoeV9pZGA/IGBydGw4MjYxeF9wcm9iZWAgcmVhZHMgYFJUTF84MjYxWF9TVUJfUEhZX0lEX0FERFJgIGZyb20gYE1ESU9fTU1EX1ZFTkQyYC4KClNvIGhlcmXigJlzIHRoZSBpbnRlcmVzdGluZyBwYXJ0OiBpZiBvdXIgbW9jayBVU0IgZGV2aWNlIHRlbGxzIGl0IHRoYXQgdGhlIGBzdWJfcGh5X2lkYCBpcyBgUlRMODI2MUNfQ0VfTU9ERUxgICh3aGljaCBpcyBjb252ZW5pZW50bHkgYDB4MDBgKSwgaXQgc2V0cyBgcHJpdi0mZ3Q7ZndfbmFtZWAgdG8gYFJUTDgyNjFDX0NFX0ZXX05BTUVgLiBUaGF0JiMzOTtzIG91ciB0cmlnZ2VyISBOb3csIGlmIHdlIHdhbnQgdG8gZnV6eiB0aGUgZmlybXdhcmUgZXhlY3V0aW9uLCBTeXprYWxsZXIgY2FuIHByb3ZpZGUgdGhlIGZpcm13YXJlLiBUaGUgZmlybXdhcmUgZm9ybWF0IGlzIHBhcnNlZCBpbiBgcnRsODI2MXhfdmVyaWZ5X2Zpcm13YXJlYCBhbmQgdGhlbiBleGVjdXRlZCBpbiBgcnRsODI2MXhfZndfZXhlY3V0ZV9lbnRyeWAuCgpUaGlzIGlzIGdvbGQhIFRoaXMgaXMgKnRleHRib29rKiBmdXp6aW5nIHRlcnJpdG9yeS4gVGhpcyBjb2RlIGlzIGZ1bmN0aW9uYWwsIGFuZCBpdCBzaG91bGQgYmUgZnV6emVkISBJdCByZWFkcyBhbiBleHRlcm5hbCBmaWxlICh0aGUgZmlybXdhcmUpIGFuZCB0aGVuIGludGVyYWN0cyB3aXRoIGhhcmR3YXJlICh0aGUgTURJTyBidXMpLCBtYWtpbmcgaXQgYSBncmVhdCB0YXJnZXQuIFN5emthbGxlciBjYW4gZ2VuZXJhdGUgYXJiaXRyYXJ5IGZpcm13YXJlIGZpbGVzLCB3aGljaCBjYW4gdGhlbiB0cmlnZ2VyIHRoaXMgY29kZS4gVGhpcyBpcyBkZWZpbml0ZWx5IGEgcHJvbWlzaW5nIGF2ZW51ZSBmb3IgZnV6emluZywgYmVjYXVzZSBpdOKAmXMgYSBmaWxlIHBhcnNpbmcgYW5kIGhhcmR3YXJlIGludGVyYWN0aW9uIHNlcXVlbmNlLgoKQWxyaWdodCwgbGV0JiMzOTtzIGxpc3QgdGhlIGZ1bmN0aW9ucywganVzdCB0byBiZSBzdXJlIHdlJiMzOTt2ZSBnb3QgYWxsIHRoZSBwaWVjZXM6IGBnZW5waHlfYzQ1X3BtYV9zb2Z0X3Jlc2V0YCwgYGdlbnBoeV9jNDVfYW5fc2V0dXBfbWFzdGVyX3NsYXZlYCwgYGdlbnBoeV9jNDVfcmVhZF9tYXN0ZXJfc2xhdmVgLCBgcnRsODI2MXhfcHJvYmVgLCBgcnRsODI2MXhfZ2V0X2ZlYXR1cmVzYCwgYHJ0bDgyNjF4X3JlYWRfc3RhdHVzYCwgYHJ0bDgyNjF4X3ZlcmlmeV9maXJtd2FyZWAsIGBydGw4MjYxeF9md19leGVjdXRlX2VudHJ5YCwgYHJ0bDgyNjF4X2Z3X2xvYWRgLCBgcnRsODI2MXhfY29uZmlnX2ludHJgLCBgcnRsODI2MXhfaGFuZGxlX2ludGVycnVwdGAsIGBydGw4MjYxeF9jb25maWdfYW5lZ2AsIGFuZCBgcnRsODI2MXhfY29uZmlnX2luaXRgLiBZZXAsIHRob3NlIGFsbCBsb29rIHJlYWNoYWJsZS4KClRoZSBvbmx5IGNvbmZpZyBuZWVkZWQgc2VlbXMgdG8gYmUgYFJFQUxURUtfUEhZYCwgd2hpY2ggY29tcGlsZXMgYGRyaXZlcnMvbmV0L3BoeS9yZWFsdGVrL3JlYWx0ZWtfbWFpbi5jYC4KClBlcmZlY3QuIExldCYjMzk7cyBtYWtlIHN1cmUgYFJFQUxURUtfUEhZYCBpcyB0aGUgb25seSBjb25maWcgcmVxdWlyZWQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAzIDA3OjM4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3JlYWx0ZWtfbWFpbi5vJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvcGh5L3JlYWx0ZWsvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3BoeS9yZWFsdGVrL01ha2VmaWxlLTEtIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxuZHJpdmVycy9uZXQvcGh5L3JlYWx0ZWsvTWFrZWZpbGU6MjpyZWFsdGVrLXlcdFx0XHQmIzQzOz0gcmVhbHRla19tYWluLm9cbmRyaXZlcnMvbmV0L3BoeS9yZWFsdGVrL01ha2VmaWxlLTMtcmVhbHRlay0kKENPTkZJR19SRUFMVEVLX1BIWV9IV01PTikgJiM0Mzs9IHJlYWx0ZWtfaHdtb24ub1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMyAwNzozODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzOTcyMAoJCQkJCQkJb3V0cHV0OiAyOQoJCQkJCQkJdGhvdWdodHM6IDQwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkludmVzdGlnYXRpbmcgYSBSZWFsdGVrIFBIWSBJc3N1ZSoqCgpSaWdodCwgbGV0JiMzOTtzIHNlZS4gVGhlIGlkZW50aWZpZXIgYHJlYWx0ZWsteWAuLi4gdGhhdCBpbW1lZGlhdGVseSBzdWdnZXN0cyBpdCYjMzk7cyBhIGNvbXBvbmVudCBvZiB0aGUgYHJlYWx0ZWtgIG1vZHVsZSwgd2hpY2ggaXMgYSBrZXkgbGVhZC4gSSYjMzk7bGwgbmVlZCB0byBjb25maXJtIHRoYXQgc3VzcGljaW9uIGFuZCB1bmRlcnN0YW5kIHdoZXJlIHRvIGZpbmQgcmVsYXRlZCBjb25maWd1cmF0aW9uLiBUaGVyZWZvcmUsIG15IG5leHQgc3RlcCBpcyB0byBleGFtaW5lIHRoZSBgZHJpdmVycy9uZXQvcGh5L01ha2VmaWxlYC4gVGhhdCYjMzk7cyB3aGVyZSB0aGUgUEhZIGRyaXZlciBjb25maWd1cmF0aW9ucyB1c3VhbGx5IHJlc2lkZS4gSSYjMzk7bSBleHBlY3RpbmcgdG8gZmluZCByZWZlcmVuY2VzIHRvIHRoZSBgcmVhbHRla2AgY29tcG9uZW50IHRoZXJlLCB3aGljaCB3aWxsIGNvbmZpcm0gbXkgaW5pdGlhbCBoeXBvdGhlc2lzIGFuZCBwb2ludCBtZSB0b3dhcmRzIHRoZSByZWxldmFudCBidWlsZCBhbmQgaW5jbHVkZSBkaXJlY3RpdmVzLiBLbm93aW5nIHRoZSBzdHJ1Y3R1cmUgb2YgdGhlIGBNYWtlZmlsZWAsIEkgc2hvdWxkIHF1aWNrbHkgYmUgYWJsZSB0byBzZWUgdGhlIGJ1aWxkIG9wdGlvbnMgYW5kIGFzc29jaWF0ZWQgZGVwZW5kZW5jaWVzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMyAwNzozODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtyZWFsdGVrJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvcGh5L01ha2VmaWxlJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3BoeS9NYWtlZmlsZT05ND1vYmotJChDT05GSUdfUVNFTUlfUEhZKVx0XHQmIzQzOz0gcXNlbWkub1xuZHJpdmVycy9uZXQvcGh5L01ha2VmaWxlOjk1Om9iai0kKENPTkZJR19SRUFMVEVLX1BIWSlcdCYjNDM7PSByZWFsdGVrL1xuZHJpdmVycy9uZXQvcGh5L01ha2VmaWxlLTk2LW9iai0kKENPTkZJR19SRU5FU0FTX1BIWSlcdCYjNDM7PSB1UEQ2MDYyMC5vXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAzIDA3OjM4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQwMDU5CgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogNjAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgc3VtbWFyeSwgdGFpbG9yZWQgYXMgaWYgSSYjMzk7bSBhbiBleHBlcnQgaW4gdGhpcyBmaWVsZDoKCioqS2VybmVsIENvbmZpZ3VyYXRpb24gQW5hbHlzaXM6IFJlYWx0ZWsgUEhZKioKCkFscmlnaHQsIGNvbmZpcm1lZCwgYENPTkZJR19SRUFMVEVLX1BIWWAgaXMgaW5kZWVkIHRoZSBjb25maWd1cmF0aW9uIGl0ZW0gd2UmIzM5O3JlIGxvb2tpbmcgYXQuIEdvb2Qgc3RhcnQuIE5vdywgdGhlIG5leHQgbG9naWNhbCBzdGVwIGlzIHRvIHF1aWNrbHkgZG91YmxlLWNoZWNrIGlmIHRoZXJlIGFyZSBhbnkgKm90aGVyKiByZWxldmFudCBjb25maWdzIHRoYXQgbWlnaHQgYmUgaW52b2x2ZWQgb3IgaW1wYWN0IHRoaXMgb25lLCBqdXN0IHRvIGJlIHRob3JvdWdoLiBXZSBkb24mIzM5O3Qgd2FudCB0byBtaXNzIGFueXRoaW5nIHN1YnRsZS4KClRoZSBwYXRjaCBpdHNlbGYgcG9pbnRzIGRpcmVjdGx5IHRvIGBkcml2ZXJzL25ldC9waHkvcGh5LWM0NS5jYC4gVGhpcyBzdWdnZXN0cyBhIHBvdGVudGlhbCBjb25kaXRpb25hbCBjb21waWxhdGlvbiBzY2VuYXJpbywgc28gdGhhdCYjMzk7cyB0aGUgYW5nbGUgSSYjMzk7bSBmb2N1c2luZyBvbiBub3cuIFNwZWNpZmljYWxseSwgSSBuZWVkIHRvIHZlcmlmeSAqaG93KiBgcGh5LWM0NS5jYCBpcyBjb21waWxlZC4gSXMgaXQgZGlyZWN0bHkgdGllZCB0byBgQ09ORklHX1JFQUxURUtfUEhZYCwgb3IgYXJlIHRoZXJlIG90aGVyIGRlcGVuZGVuY2llcyBvciBzdXJyb3VuZGluZyBjb25maWdzIHRoYXQgY29udHJvbCBpdHMgaW5jbHVzaW9uPyBUaGF0JiMzOTtzIHRoZSBrZXkgcXVlc3Rpb24gdG8gZmlndXJlIG91dCBpZiB0aGVyZSBpcyBhbnl0aGluZyB0aGF0IGNvdWxkIGltcGFjdCBhIHVzZXImIzM5O3MgZGV2aWNlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMyAwNzozODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtwaHktYzQ1Lm8mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9waHkvTWFrZWZpbGUmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvcGh5L01ha2VmaWxlLTMtXG5kcml2ZXJzL25ldC9waHkvTWFrZWZpbGU6NDpsaWJwaHkteVx0XHRcdDo9IHBoeS5vIHBoeS1jNDUubyBwaHktY29yZS5vIHBoeV9kZXZpY2UubyBcXFxuZHJpdmVycy9uZXQvcGh5L01ha2VmaWxlLTUtXHRcdFx0XHQgICBsaW5rbW9kZS5vIHBoeV9saW5rX3RvcG9sb2d5Lm8gXFxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDMgMDc6Mzg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDA0NTYKCQkJCQkJCW91dHB1dDogMzA2CgkJCQkJCQl0aG91Z2h0czogOTY2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKlJlZmluaW5nIHRoZSBUYXJnZXQgZm9yIEZ1enppbmcgdGhlIFJlYWx0ZWsgUlRMODI2MUMgUEhZIFN1cHBvcnQqKgoKT2theSwgc28gSSYjMzk7bSB0aGlua2luZyBhYm91dCBob3cgdG8gZWZmZWN0aXZlbHkgdGFyZ2V0IHRoaXMgbmV3IFJlYWx0ZWsgUlRMODI2MUMgUEhZIHN1cHBvcnQgaW4gdGhlIGtlcm5lbCBmb3IgZnV6emluZy4gIFRoaXMgaXNuJiMzOTt0IGp1c3QgYSBzaW1wbGUgZHJpdmVyOyBpdCBpbmNsdWRlcyBmaXJtd2FyZSBsb2FkaW5nIGFuZCBDbGF1c2UgNDUgbWFzdGVyL3NsYXZlIGNvbmZpZ3VyYXRpb24sIHdoaWNoIGltbWVkaWF0ZWx5IG1ha2VzIGl0IG1vcmUgaW50ZXJlc3RpbmcgZnJvbSBhIHNlY3VyaXR5IHBlcnNwZWN0aXZlLCBlc3BlY2lhbGx5IHRoZSBmaXJtd2FyZSBoYW5kbGluZy4gIEl0JiMzOTtzIHBhcnQgb2YgYGxpYnBoeWAsIGFuZCB0aGF0JiMzOTtzIGNvbmRpdGlvbmFsbHkgY29tcGlsZWQgYmFzZWQgb24gYENPTkZJR19QSFlMSUJgLCB3aGljaCBpcyBlbmFibGVkIGJ5IGRlZmF1bHQgZm9yIG5ldHdvcmtpbmcsIHdoaWNoIGlzIGdvb2QuIFRoYXQgc2hvdWxkIHNpbXBsaWZ5IHRoaW5ncy4KClNvLCB0aGUga2V5IGNvbmZpZ3VyYXRpb24gb3B0aW9uIGlzIGBSRUFMVEVLX1BIWWAuIFRoYXQmIzM5O3MgdGhlIG9uZSB3ZSBuZWVkLgoKTm93LCBsZXQmIzM5O3MgbmFpbCBkb3duIHRoZSBzcGVjaWZpYyBmdW5jdGlvbnMgd2Ugc2hvdWxkIGZvY3VzIG9uLiAgSSBpbml0aWFsbHkgbGlzdGVkIHRoZXNlOiBgcnRsODI2MXhfcHJvYmVgLCBgcnRsODI2MXhfZ2V0X2ZlYXR1cmVzYCwgYHJ0bDgyNjF4X3JlYWRfc3RhdHVzYCwgYHJ0bDgyNjF4X3ZlcmlmeV9maXJtd2FyZWAsIGBydGw4MjYxeF9md19leGVjdXRlX2VudHJ5YCwgYHJ0bDgyNjF4X2Z3X2xvYWRgLCBgcnRsODI2MXhfY29uZmlnX2ludHJgLCBgcnRsODI2MXhfaGFuZGxlX2ludGVycnVwdGAsIGBydGw4MjYxeF9jb25maWdfYW5lZ2AsIGBydGw4MjYxeF9jb25maWdfaW5pdGAsIGBnZW5waHlfYzQ1X3BtYV9zb2Z0X3Jlc2V0YCwgYGdlbnBoeV9jNDVfYW5fc2V0dXBfbWFzdGVyX3NsYXZlYCwgYW5kIGBnZW5waHlfYzQ1X3JlYWRfbWFzdGVyX3NsYXZlYC4KCldhaXQsICBgcnRsODI2MXhfaGFuZGxlX2ludGVycnVwdGAgaXMgYW4gaW50ZXJydXB0IGhhbmRsZXIuIEl0IGlzIHRyaWdnZXJlZCBvbmx5IGlmIGludGVycnVwdHMgYXJlIHN1cHBvcnRlZCBhbmQgZW5hYmxlZCBvbiB0aGUgUEhZLiAgU3l6a2FsbGVyIG1pZ2h0IGJlIGFibGUgdG8gdHJpZ2dlciB0aG9zZSBpZiB0aGUgdmlydHVhbCBNRElPIGJ1cyBvciBVU0IgZGV2aWNlIGVtdWxhdGVzIHRoZSBpbnRlcnJ1cHQgc3RhdHVzIHJlZ2lzdGVyIGFuZCBpbnRlcnJ1cHQgbGluZS4gSSYjMzk7bSBub3QgZW50aXJlbHkgc3VyZSBob3cgZWFzeSB0aGF0IHdpbGwgYmUgd2l0aG91dCBhIG1vcmUgc29waGlzdGljYXRlZCBtb2NrIGRldmljZS4gIFRoZSBvdGhlciBmdW5jdGlvbnMgYXJlIGRlZmluaXRlbHkgcmVhY2hhYmxlLCB0aG91Z2guCgpTbywgSSBzaG91bGQgcmVmaW5lIHRoaXMgbGlzdC4gSSYjMzk7bGwgZGVmaW5pdGVseSBrZWVwOiBgcnRsODI2MXhfZndfZXhlY3V0ZV9lbnRyeWAsIGBydGw4MjYxeF92ZXJpZnlfZmlybXdhcmVgLCBgcnRsODI2MXhfZndfbG9hZGAsIGBydGw4MjYxeF9jb25maWdfaW5pdGAsIGBydGw4MjYxeF9wcm9iZWAsIGBydGw4MjYxeF9jb25maWdfYW5lZ2AsIGFuZCBgcnRsODI2MXhfcmVhZF9zdGF0dXNgLiBUaGVuIEkmIzM5O2xsIGFkZCBgZ2VucGh5X2M0NV9wbWFfc29mdF9yZXNldGAsIGBnZW5waHlfYzQ1X2FuX3NldHVwX21hc3Rlcl9zbGF2ZWAsIGFuZCBgZ2VucGh5X2M0NV9yZWFkX21hc3Rlcl9zbGF2ZWAgYmVjYXVzZSB0aGV5JiMzOTtyZSBwYXJ0IG9mIHRoaXMgZmVhdHVyZS4KCkFyZSB0aGVyZSBhbnkgb3RoZXJzPyBZZXMhIEkgc2hvdWxkIGFsc28gaW5jbHVkZSBgcnRsODI2MXhfZ2V0X2ZlYXR1cmVzYCBhbmQgYHJ0bDgyNjF4X2NvbmZpZ19pbnRyYCwgYW5kIGBydGw4MjYxeF9oYW5kbGVfaW50ZXJydXB0YC4gSSYjMzk7bGwgaW5jbHVkZSB0aGVtIGFsbC4gVGhleSBhcmUgc3BlY2lmaWMgdG8gdGhpcyBuZXcgZmVhdHVyZSBhbmQgbm90IGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zLgoKSGFuZyBvbi4gSSByZWNhbGwgdGhhdCBgZ2VucGh5X2M0NV9hbl9zZXR1cF9tYXN0ZXJfc2xhdmVgIGFuZCBgZ2VucGh5X2M0NV9yZWFkX21hc3Rlcl9zbGF2ZWAgYXJlIGFjdHVhbGx5ICpzdGF0aWMqIGZ1bmN0aW9ucyBpbiBgcGh5LWM0NS5jYC4gIFRoZSBxdWVzdGlvbiBpczogQ2FuIHN5emthbGxlciBldmVuIGRlYWwgd2l0aCBzdGF0aWMgZnVuY3Rpb25zIGluIGBGb2N1c1N5bWJvbHNgPyBZZXMsIGl0IGNhbiwgdGhhdCYjMzk7cyBmaW5lLgoKTm93LCB0byBiZSBjb21wbGV0ZWx5IHN1cmUsIGxldCYjMzk7cyBkb3VibGUtY2hlY2sgdGhhdCBgUkVBTFRFS19QSFlgIGlzIGEgdHJpc3RhdGUgY29uZmlnLCBub3QgYSBib29sLiAgWWVwLCBnb29kLiBUaGF0JiMzOTtzIHRoZSBvbmx5IG9uZSB3ZSAqbmVlZCogdG8gZW5hYmxlLgoKT2theSwgbGV0JiMzOTtzIHN0ZXAgYmFjayBhbmQgcmV2aWV3LiBUaGUgbmV3IGNvZGUgc3VwcG9ydHMgdGhlIFJlYWx0ZWsgUlRMODI2MUMgMTBHYnBzIFBIWSwgaW5jbHVkaW5nIGZpcm13YXJlIGxvYWRpbmcgYW5kIHBhcnNpbmcsIGFuZCBDbGF1c2UgNDUgbWFzdGVyL3NsYXZlIGNvbmZpZ3VyYXRpb24uIFRoaXMgY29kZSBpcyByZWFjaGFibGUgdGhyb3VnaCBlbXVsYXRpb24sIGJ5LCBmb3IgaW5zdGFuY2UsIGVtdWxhdGluZyBhIFVTQiBuZXR3b3JrIGFkYXB0ZXIgdGhhdCByZWdpc3RlcnMgYW4gTURJTyBidXMgYW5kIHJlc3BvbmRzIHdpdGggdGhlIFJUTDgyNjFDIFBIWSBJRC4gRmlybXdhcmUgcGFyc2luZyAoYHJ0bDgyNjF4X3ZlcmlmeV9maXJtd2FyZWAsIGBydGw4MjYxeF9md19leGVjdXRlX2VudHJ5YCkgaXMgd2hlcmUgdGhlIHJlYWwgZnV6emluZyBpbnRlcmVzdCBsaWVzIHNpbmNlIGl0IHByb2Nlc3NlcyBleHRlcm5hbCBkYXRhLgoKRG8gSSBuZWVkIHRvIHNwZWNpZnkgZ2VuZXJpYyBjb25maWdzIGxpa2UgYENPTkZJR19VU0JfTkVUX0RSSVZFUlNgIG9yIGdlbmVyaWMgVVNCIG9yIE5ldCBjb25maWd1cmF0aW9ucz8gTm8sIG5vdCBzcGVjaWZpY2FsbHkuIFdlIG9ubHkgbmVlZCB0aGUgb25lIGZvciB0aGUgbmV3IGNvZGUuCgpGaW5hbGx5LCBpcyB0aGVyZSBhbnl0aGluZyBlbHNlPyAgTGV0IG1lIHNlZS4uLiBJcyBgUlRMODI2MUNfQ0VfRldfTkFNRWAgdXNlZCBhbnl3aGVyZSBlbHNlPyBObywgaXQmIzM5O3MgZGVmaW5lZCBpbiB0aGUgcGF0Y2guIExldCYjMzk7cyBjaGVjayBgZ2VuCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDMgMDc6Mzk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1JFQUxURUtfUEhZJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7cnRsODI2MXhfcHJvYmUmIzM0OywKICAgICYjMzQ7cnRsODI2MXhfZ2V0X2ZlYXR1cmVzJiMzNDssCiAgICAmIzM0O3J0bDgyNjF4X3JlYWRfc3RhdHVzJiMzNDssCiAgICAmIzM0O3J0bDgyNjF4X3ZlcmlmeV9maXJtd2FyZSYjMzQ7LAogICAgJiMzNDtydGw4MjYxeF9md19leGVjdXRlX2VudHJ5JiMzNDssCiAgICAmIzM0O3J0bDgyNjF4X2Z3X2xvYWQmIzM0OywKICAgICYjMzQ7cnRsODI2MXhfY29uZmlnX2ludHImIzM0OywKICAgICYjMzQ7cnRsODI2MXhfaGFuZGxlX2ludGVycnVwdCYjMzQ7LAogICAgJiMzNDtydGw4MjYxeF9jb25maWdfYW5lZyYjMzQ7LAogICAgJiMzNDtydGw4MjYxeF9jb25maWdfaW5pdCYjMzQ7LAogICAgJiMzNDtnZW5waHlfYzQ1X3BtYV9zb2Z0X3Jlc2V0JiMzNDssCiAgICAmIzM0O2dlbnBoeV9jNDVfYW5fc2V0dXBfbWFzdGVyX3NsYXZlJiMzNDssCiAgICAmIzM0O2dlbnBoeV9jNDVfcmVhZF9tYXN0ZXJfc2xhdmUmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcyBzdXBwb3J0IGZvciB0aGUgUmVhbHRlayBSVEw4MjYxQyAxMEdicHMgUEhZLCBpbmNsdWRpbmcgZmlybXdhcmUgbG9hZGluZyBhbmQgcGFyc2luZywgYW5kIG5ldyBDbGF1c2UgNDUgbWFzdGVyL3NsYXZlIGNvbmZpZ3VyYXRpb24gZnVuY3Rpb25zLiBUaGlzIGNvZGUgaXMgcmVhY2hhYmxlIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBieSBlbXVsYXRpbmcgYSBVU0IgbmV0d29yayBhZGFwdGVyIHRoYXQgcmVnaXN0ZXJzIGFuIE1ESU8gYnVzIGFuZCByZXNwb25kcyB3aXRoIHRoZSBSVEw4MjYxQyBQSFkgSUQuIFRoZSBmaXJtd2FyZSBwYXJzaW5nIGxvZ2ljIGlzIHBhcnRpY3VsYXJseSBpbnRlcmVzdGluZyBmb3IgZnV6emluZyBhcyBpdCBwcm9jZXNzZXMgZXh0ZXJuYWwgZGF0YS4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7UkVBTFRFS19QSFkmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtydGw4MjYxeF9wcm9iZSYjMzQ7LAogICAgJiMzNDtydGw4MjYxeF9nZXRfZmVhdHVyZXMmIzM0OywKICAgICYjMzQ7cnRsODI2MXhfcmVhZF9zdGF0dXMmIzM0OywKICAgICYjMzQ7cnRsODI2MXhfdmVyaWZ5X2Zpcm13YXJlJiMzNDssCiAgICAmIzM0O3J0bDgyNjF4X2Z3X2V4ZWN1dGVfZW50cnkmIzM0OywKICAgICYjMzQ7cnRsODI2MXhfZndfbG9hZCYjMzQ7LAogICAgJiMzNDtydGw4MjYxeF9jb25maWdfaW50ciYjMzQ7LAogICAgJiMzNDtydGw4MjYxeF9oYW5kbGVfaW50ZXJydXB0JiMzNDssCiAgICAmIzM0O3J0bDgyNjF4X2NvbmZpZ19hbmVnJiMzNDssCiAgICAmIzM0O3J0bDgyNjF4X2NvbmZpZ19pbml0JiMzNDssCiAgICAmIzM0O2dlbnBoeV9jNDVfcG1hX3NvZnRfcmVzZXQmIzM0OywKICAgICYjMzQ7Z2VucGh5X2M0NV9hbl9zZXR1cF9tYXN0ZXJfc2xhdmUmIzM0OywKICAgICYjMzQ7Z2VucGh5X2M0NV9yZWFkX21hc3Rlcl9zbGF2ZSYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRzIHN1cHBvcnQgZm9yIHRoZSBSZWFsdGVrIFJUTDgyNjFDIDEwR2JwcyBQSFksIGluY2x1ZGluZyBmaXJtd2FyZSBsb2FkaW5nIGFuZCBwYXJzaW5nLCBhbmQgbmV3IENsYXVzZSA0NSBtYXN0ZXIvc2xhdmUgY29uZmlndXJhdGlvbiBmdW5jdGlvbnMuIFRoaXMgY29kZSBpcyByZWFjaGFibGUgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGJ5IGVtdWxhdGluZyBhIFVTQiBuZXR3b3JrIGFkYXB0ZXIgdGhhdCByZWdpc3RlcnMgYW4gTURJTyBidXMgYW5kIHJlc3BvbmRzIHdpdGggdGhlIFJUTDgyNjFDIFBIWSBJRC4gVGhlIGZpcm13YXJlIHBhcnNpbmcgbG9naWMgaXMgcGFydGljdWxhcmx5IGludGVyZXN0aW5nIGZvciBmdXp6aW5nIGFzIGl0IHByb2Nlc3NlcyBleHRlcm5hbCBkYXRhLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDctMDNUMDc6MzU6MDUuOTI5ODI3NjY4WiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjQ3NjI5Njg1NzYzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIlJFQUxURUtfUEhZXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwicnRsODI2MXhfcHJvYmVcIixcbiAgICBcInJ0bDgyNjF4X2dldF9mZWF0dXJlc1wiLFxuICAgIFwicnRsODI2MXhfcmVhZF9zdGF0dXNcIixcbiAgICBcInJ0bDgyNjF4X3ZlcmlmeV9maXJtd2FyZVwiLFxuICAgIFwicnRsODI2MXhfZndfZXhlY3V0ZV9lbnRyeVwiLFxuICAgIFwicnRsODI2MXhfZndfbG9hZFwiLFxuICAgIFwicnRsODI2MXhfY29uZmlnX2ludHJcIixcbiAgICBcInJ0bDgyNjF4X2hhbmRsZV9pbnRlcnJ1cHRcIixcbiAgICBcInJ0bDgyNjF4X2NvbmZpZ19hbmVnXCIsXG4gICAgXCJydGw4MjYxeF9jb25maWdfaW5pdFwiLFxuICAgIFwiZ2VucGh5X2M0NV9wbWFfc29mdF9yZXNldFwiLFxuICAgIFwiZ2VucGh5X2M0NV9hbl9zZXR1cF9tYXN0ZXJfc2xhdmVcIixcbiAgICBcImdlbnBoeV9jNDVfcmVhZF9tYXN0ZXJfc2xhdmVcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRzIHN1cHBvcnQgZm9yIHRoZSBSZWFsdGVrIFJUTDgyNjFDIDEwR2JwcyBQSFksIGluY2x1ZGluZyBmaXJtd2FyZSBsb2FkaW5nIGFuZCBwYXJzaW5nLCBhbmQgbmV3IENsYXVzZSA0NSBtYXN0ZXIvc2xhdmUgY29uZmlndXJhdGlvbiBmdW5jdGlvbnMuIFRoaXMgY29kZSBpcyByZWFjaGFibGUgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGJ5IGVtdWxhdGluZyBhIFVTQiBuZXR3b3JrIGFkYXB0ZXIgdGhhdCByZWdpc3RlcnMgYW4gTURJTyBidXMgYW5kIHJlc3BvbmRzIHdpdGggdGhlIFJUTDgyNjFDIFBIWSBJRC4gVGhlIGZpcm13YXJlIHBhcnNpbmcgbG9naWMgaXMgcGFydGljdWxhcmx5IGludGVyZXN0aW5nIGZvciBmdXp6aW5nIGFzIGl0IHByb2Nlc3NlcyBleHRlcm5hbCBkYXRhLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wM1QwNzozNTowNS45Mjk4MzUyNzhaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjYzNTI4MDM0NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IDA2MWQzZjczMTRkNGYyYjAyNmVhNTEwYmY4MTFhZWYyYjVhNzlmZWVcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIEZyaSBKdWwgMyAwNzozNTowNCAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9waHkvcGh5LWM0NS5jIGIvZHJpdmVycy9uZXQvcGh5L3BoeS1jNDUuY1xcbmluZGV4IDEyNjk1MTc0MTQyODhmLi44NzA5MjAzMTFmOWEwMSAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL25ldC9waHkvcGh5LWM0NS5jXFxuKysrIGIvZHJpdmVycy9uZXQvcGh5L3BoeS1jNDUuY1xcbkBAIC0zODQsNiArMzg0LDExOSBAQCBpbnQgZ2VucGh5X2M0NV9jaGVja19hbmRfcmVzdGFydF9hbmVnKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYsIGJvb2wgcmVzdGFydClcXG4gfVxcbiBFWFBPUlRfU1lNQk9MX0dQTChnZW5waHlfYzQ1X2NoZWNrX2FuZF9yZXN0YXJ0X2FuZWcpO1xcbiBcXG4rLyoqXFxuKyAqIGdlbnBoeV9jNDVfcG1hX3NvZnRfcmVzZXQgLSBzb2Z0d2FyZSByZXNldCB0aGUgUEhZIHZpYSBDbGF1c2UgNDUgUE1BL1BNRCBjb250cm9sIHJlZ2lzdGVyXFxuKyAqIEBwaHlkZXY6IHRhcmdldCBwaHlfZGV2aWNlIHN0cnVjdFxcbisgKlxcbisgKiBSZXR1cm46IDAgb24gc3VjY2VzcywgbmVnYXRpdmUgZXJybm8gb24gZmFpbHVyZS5cXG4rICovXFxuK2ludCBnZW5waHlfYzQ1X3BtYV9zb2Z0X3Jlc2V0KHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXFxuK3tcXG4rXFx0aW50IHJldCwgdmFsO1xcbitcXG4rXFx0cmV0ID0gcGh5X3NldF9iaXRzX21tZChwaHlkZXYsIE1ESU9fTU1EX1BNQVBNRCwgTURJT19DVFJMMSxcXG4rXFx0XFx0XFx0ICAgICAgIE1ESU9fQ1RSTDFfUkVTRVQpO1xcbitcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0cmV0dXJuIHJldDtcXG4rXFxuK1xcdHJldHVybiBwaHlfcmVhZF9tbWRfcG9sbF90aW1lb3V0KHBoeWRldiwgTURJT19NTURfUE1BUE1ELFxcbitcXHRcXHRcXHRcXHRcXHQgTURJT19DVFJMMSwgdmFsLFxcbitcXHRcXHRcXHRcXHRcXHQgISh2YWwgXFx1MDAyNiBNRElPX0NUUkwxX1JFU0VUKSxcXG4rXFx0XFx0XFx0XFx0XFx0IDUwMDAsIDYwMDAwMCwgdHJ1ZSk7XFxuK31cXG4rRVhQT1JUX1NZTUJPTF9HUEwoZ2VucGh5X2M0NV9wbWFfc29mdF9yZXNldCk7XFxuK1xcbisvKipcXG4rICogZ2VucGh5X2M0NV9hbl9zZXR1cF9tYXN0ZXJfc2xhdmUgLSBDb25maWd1cmUgTWFzdGVyL1NsYXZlIHNldHRpbmcgZm9yIEM0NSBQSFlzXFxuKyAqIEBwaHlkZXY6IHRhcmdldCBwaHlfZGV2aWNlIHN0cnVjdFxcbisgKlxcbisgKiBEZXNjcmlwdGlvbjogQ29uZmlndXJlIHRoZSBmb3JjZWQgb3IgcHJlZmVycmVkIE1hc3Rlci9TbGF2ZSByb2xlXFxuKyAqIDEwR0JBU0UtVCBjb250cm9sIHJlZ2lzdGVyIChNTUQgNywgUmVnaXN0ZXIgMHgwMDIwKSBhY2NvcmRpbmcgdG9cXG4rICogSUVFRSA4MDIuMyBzdGFuZGFyZHMuXFxuKyAqXFxuKyAqIFJldHVybjogbmVnYXRpdmUgZXJybm8gY29kZSBvbiBmYWlsdXJlLCAwIGlmIE1hc3Rlci9TbGF2ZSBkaWRuJ3QgY2hhbmdlLFxcbisgKiBvciAxIGlmIE1hc3Rlci9TbGF2ZSBtb2RlcyBjaGFuZ2VkLlxcbisgKi9cXG4rc3RhdGljIGludCBnZW5waHlfYzQ1X2FuX3NldHVwX21hc3Rlcl9zbGF2ZShzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxcbit7XFxuK1xcdHUxNiBjdGwgPSAwO1xcbitcXG4rXFx0c3dpdGNoIChwaHlkZXYtXFx1MDAzZW1hc3Rlcl9zbGF2ZV9zZXQpIHtcXG4rXFx0Y2FzZSBNQVNURVJfU0xBVkVfQ0ZHX01BU1RFUl9QUkVGRVJSRUQ6XFxuK1xcdFxcdGN0bCA9IE1ESU9fQU5fMTBHQlRfQ1RSTF9NU19QT1JUX1RZUEU7XFxuK1xcdFxcdGJyZWFrO1xcbitcXHRjYXNlIE1BU1RFUl9TTEFWRV9DRkdfU0xBVkVfUFJFRkVSUkVEOlxcbitcXHRcXHRicmVhaztcXG4rXFx0Y2FzZSBNQVNURVJfU0xBVkVfQ0ZHX01BU1RFUl9GT1JDRTpcXG4rXFx0XFx0Y3RsID0gTURJT19BTl8xMEdCVF9DVFJMX01TX0VOQUJMRSB8IE1ESU9fQU5fMTBHQlRfQ1RSTF9NU19WQUxVRTtcXG4rXFx0XFx0YnJlYWs7XFxuK1xcdGNhc2UgTUFTVEVSX1NMQVZFX0NGR19TTEFWRV9GT1JDRTpcXG4rXFx0XFx0Y3RsID0gTURJT19BTl8xMEdCVF9DVFJMX01TX0VOQUJMRTtcXG4rXFx0XFx0YnJlYWs7XFxuK1xcdGNhc2UgTUFTVEVSX1NMQVZFX0NGR19VTktOT1dOOlxcbitcXHRjYXNlIE1BU1RFUl9TTEFWRV9DRkdfVU5TVVBQT1JURUQ6XFxuK1xcdFxcdHJldHVybiAwO1xcbitcXHRkZWZhdWx0OlxcbitcXHRcXHRwaHlkZXZfd2FybihwaHlkZXYsIFxcXCJVbnN1cHBvcnRlZCBNYXN0ZXIvU2xhdmUgbW9kZVxcXFxuXFxcIik7XFxuK1xcdFxcdHJldHVybiAtRU9QTk9UU1VQUDtcXG4rXFx0fVxcbitcXG4rXFx0cmV0dXJuIHBoeV9tb2RpZnlfbW1kX2NoYW5nZWQocGh5ZGV2LCBNRElPX01NRF9BTiwgTURJT19BTl8xMEdCVF9DVFJMLFxcbitcXHRcXHRcXHRcXHQgICAgICBNRElPX0FOXzEwR0JUX0NUUkxfTVNfRU5BQkxFIHxcXG4rXFx0XFx0XFx0XFx0ICAgICAgTURJT19BTl8xMEdCVF9DVFJMX01TX1ZBTFVFIHxcXG4rXFx0XFx0XFx0XFx0ICAgICAgTURJT19BTl8xMEdCVF9DVFJMX01TX1BPUlRfVFlQRSwgY3RsKTtcXG4rfVxcbitcXG4rLyoqXFxuKyAqIGdlbnBoeV9jNDVfcmVhZF9tYXN0ZXJfc2xhdmUgLSByZWFkIG1hc3Rlci9zbGF2ZSBzdGF0dXNcXG4rICogQHBoeWRldjogdGFyZ2V0IHBoeV9kZXZpY2Ugc3RydWN0XFxuKyAqXFxuKyAqIERlc2NyaXB0aW9uOiBSZWFkIHRoZSBNYXN0ZXIvU2xhdmUgY29uZmlndXJhdGlvbiBhbmQgc3RhdHVzXFxuKyAqIGZyb20gMTBHQkFTRS1UIGNvbnRyb2wvc3RhdHVzIHJlZ2lzdGVycyAoTU1EIDcsIFJlZyAweDAwMjAgYW5kIDB4MDAyMSkuXFxuKyAqXFxuKyAqIFJldHVybjogMCBvbiBzdWNjZXNzLCBvciBhIG5lZ2F0aXZlIGVycm9yIGNvZGUgb24gZmFpbHVyZS5cXG4rICovXFxuK3N0YXRpYyBpbnQgZ2VucGh5X2M0NV9yZWFkX21hc3Rlcl9zbGF2ZShzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxcbit7XFxuK1xcdGludCB2YWw7XFxuK1xcbitcXHRwaHlkZXYtXFx1MDAzZW1hc3Rlcl9zbGF2ZV9nZXQgPSBNQVNURVJfU0xBVkVfQ0ZHX1VOS05PV047XFxuK1xcdHBoeWRldi1cXHUwMDNlbWFzdGVyX3NsYXZlX3N0YXRlID0gTUFTVEVSX1NMQVZFX1NUQVRFX1VOS05PV047XFxuK1xcbitcXHR2YWwgPSBwaHlfcmVhZF9tbWQocGh5ZGV2LCBNRElPX01NRF9BTiwgTURJT19BTl8xMEdCVF9DVFJMKTtcXG4rXFx0aWYgKHZhbCBcXHUwMDNjIDApXFxuK1xcdFxcdHJldHVybiB2YWw7XFxuK1xcbitcXHRpZiAodmFsIFxcdTAwMjYgTURJT19BTl8xMEdCVF9DVFJMX01TX0VOQUJMRSkge1xcbitcXHRcXHRpZiAodmFsIFxcdTAwMjYgTURJT19BTl8xMEdCVF9DVFJMX01TX1ZBTFVFKVxcbitcXHRcXHRcXHRwaHlkZXYtXFx1MDAzZW1hc3Rlcl9zbGF2ZV9nZXQgPSBNQVNURVJfU0xBVkVfQ0ZHX01BU1RFUl9GT1JDRTtcXG4rXFx0XFx0ZWxzZVxcbitcXHRcXHRcXHRwaHlkZXYtXFx1MDAzZW1hc3Rlcl9zbGF2ZV9nZXQgPSBNQVNURVJfU0xBVkVfQ0ZHX1NMQVZFX0ZPUkNFO1xcbitcXHR9IGVsc2Uge1xcbitcXHRcXHRpZiAodmFsIFxcdTAwMjYgTURJT19BTl8xMEdCVF9DVFJMX01TX1BPUlRfVFlQRSlcXG4rXFx0XFx0XFx0cGh5ZGV2LVxcdTAwM2VtYXN0ZXJfc2xhdmVfZ2V0ID0gTUFTVEVSX1NMQVZFX0NGR19NQVNURVJfUFJFRkVSUkVEO1xcbitcXHRcXHRlbHNlXFxuK1xcdFxcdFxcdHBoeWRldi1cXHUwMDNlbWFzdGVyX3NsYXZlX2dldCA9IE1BU1RFUl9TTEFWRV9DRkdfU0xBVkVfUFJFRkVSUkVEO1xcbitcXHR9XFxuK1xcbitcXHR2YWwgPSBwaHlfcmVhZF9tbWQocGh5ZGV2LCBNRElPX01NRF9BTiwgTURJT19BTl8xMEdCVF9TVEFUKTtcXG4rXFx0aWYgKHZhbCBcXHUwMDNjIDApXFxuK1xcdFxcdHJldHVybiB2YWw7XFxuK1xcbitcXHRpZiAodmFsIFxcdTAwMjYgTURJT19BTl8xMEdCVF9TVEFUX01TX0ZBVUxUKSB7XFxuK1xcdFxcdHBoeWRldi1cXHUwMDNlbWFzdGVyX3NsYXZlX3N0YXRlID0gTUFTVEVSX1NMQVZFX1NUQVRFX0VSUjtcXG4rXFx0fSBlbHNlIGlmIChwaHlkZXYtXFx1MDAzZWxpbmspIHtcXG4rXFx0XFx0aWYgKHZhbCBcXHUwMDI2IE1ESU9fQU5fMTBHQlRfU1RBVF9NU19SRVMpXFxuK1xcdFxcdFxcdHBoeWRldi1cXHUwMDNlbWFzdGVyX3NsYXZlX3N0YXRlID0gTUFTVEVSX1NMQVZFX1NUQVRFX01BU1RFUjtcXG4rXFx0XFx0ZWxzZVxcbitcXHRcXHRcXHRwaHlkZXYtXFx1MDAzZW1hc3Rlcl9zbGF2ZV9zdGF0ZSA9IE1BU1RFUl9TTEFWRV9TVEFURV9TTEFWRTtcXG4rXFx0fSBlbHNlIHtcXG4rXFx0XFx0cGh5ZGV2LVxcdTAwM2VtYXN0ZXJfc2xhdmVfc3RhdGUgPSBNQVNURVJfU0xBVkVfU1RBVEVfVU5LTk9XTjtcXG4rXFx0fVxcbitcXG4rXFx0cmV0dXJuIDA7XFxuK31cXG4rXFxuIC8qKlxcbiAgKiBnZW5waHlfYzQ1X2FuZWdfZG9uZSAtIHJldHVybiBhdXRvLW5lZ290aWF0aW9uIGNvbXBsZXRlIHN0YXR1c1xcbiAgKiBAcGh5ZGV2OiB0YXJnZXQgcGh5X2RldmljZSBzdHJ1Y3RcXG5AQCAtMTE5Miw2ICsxMzA1LDEwIEBAIGludCBnZW5waHlfYzQ1X3JlYWRfc3RhdHVzKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXFxuIFxcdFxcdFxcdHJldCA9IGdlbnBoeV9jNDVfYmFzZXQxX3JlYWRfc3RhdHVzKHBoeWRldik7XFxuIFxcdFxcdFxcdGlmIChyZXQgXFx1MDAzYyAwKVxcbiBcXHRcXHRcXHRcXHRyZXR1cm4gcmV0O1xcbitcXHRcXHR9IGVsc2Uge1xcbitcXHRcXHRcXHRyZXQgPSBnZW5waHlfYzQ1X3JlYWRfbWFzdGVyX3NsYXZlKHBoeWRldik7XFxuK1xcdFxcdFxcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRcXHRcXHRyZXR1cm4gcmV0O1xcbiBcXHRcXHR9XFxuIFxcbiBcXHRcXHRwaHlfcmVzb2x2ZV9hbmVnX2xpbmttb2RlKHBoeWRldik7XFxuQEAgLTEyMjUsNiArMTM0MiwxNCBAQCBpbnQgZ2VucGh5X2M0NV9jb25maWdfYW5lZyhzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxcbiBcXHRpZiAocmV0IFxcdTAwM2UgMClcXG4gXFx0XFx0Y2hhbmdlZCA9IHRydWU7XFxuIFxcbitcXHRpZiAoIWdlbnBoeV9jNDVfYmFzZXQxX2FibGUocGh5ZGV2KSkge1xcbitcXHRcXHRyZXQgPSBnZW5waHlfYzQ1X2FuX3NldHVwX21hc3Rlcl9zbGF2ZShwaHlkZXYpO1xcbitcXHRcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0XFx0cmV0dXJuIHJldDtcXG4rXFx0XFx0aWYgKHJldCBcXHUwMDNlIDApXFxuK1xcdFxcdFxcdGNoYW5nZWQgPSB0cnVlO1xcbitcXHR9XFxuK1xcbiBcXHRyZXR1cm4gZ2VucGh5X2M0NV9jaGVja19hbmRfcmVzdGFydF9hbmVnKHBoeWRldiwgY2hhbmdlZCk7XFxuIH1cXG4gRVhQT1JUX1NZTUJPTF9HUEwoZ2VucGh5X2M0NV9jb25maWdfYW5lZyk7XFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3BoeS9yZWFsdGVrL3JlYWx0ZWtfbWFpbi5jIGIvZHJpdmVycy9uZXQvcGh5L3JlYWx0ZWsvcmVhbHRla19tYWluLmNcXG5pbmRleCAyNzI2ODgxMWY1NjRmMi4uNjhhMmRlMGIyYmQzYmEgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9uZXQvcGh5L3JlYWx0ZWsvcmVhbHRla19tYWluLmNcXG4rKysgYi9kcml2ZXJzL25ldC9waHkvcmVhbHRlay9yZWFsdGVrX21haW4uY1xcbkBAIC04LDcgKzgsOSBAQFxcbiAgKiBDb3B5cmlnaHQgKGMpIDIwMDQgRnJlZXNjYWxlIFNlbWljb25kdWN0b3IsIEluYy5cXG4gICovXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9iaXRvcHMuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2NyYzMyLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9ldGh0b29sX25ldGxpbmsuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2Zpcm13YXJlLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9vZi5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvcGh5LmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9wbV93YWtlaXJxLmhcXHUwMDNlXFxuQEAgLTE0MSw2ICsxNDMsMTAgQEBcXG4gI2RlZmluZSBSVEw4MjExRl9QSFlTSUNBTF9BRERSX1dPUkQxXFx0XFx0MTdcXG4gI2RlZmluZSBSVEw4MjExRl9QSFlTSUNBTF9BRERSX1dPUkQyXFx0XFx0MThcXG4gXFxuKyNkZWZpbmUgUlRMODI2MVhfRVhUX0FERFJfUkVHXFx0XFx0XFx0MHhhNDM2XFxuKyNkZWZpbmUgUlRMODI2MVhfRVhUX0RBVEFfUkVHXFx0XFx0XFx0MHhhNDM4XFxuKyNkZWZpbmUgUlRMXzgyNjFYX1NVQl9QSFlfSURfQUREUlxcdFxcdDB4ODAxZFxcbitcXG4gI2RlZmluZSBSVEw4MjJYX1ZORDFfU0VSREVTX09QVElPTlxcdFxcdFxcdDB4Njk3YVxcbiAjZGVmaW5lIFJUTDgyMlhfVk5EMV9TRVJERVNfT1BUSU9OX01PREVfTUFTS1xcdFxcdEdFTk1BU0soNSwgMClcXG4gI2RlZmluZSBSVEw4MjJYX1ZORDFfU0VSREVTX09QVElPTl9NT0RFXzI1MDBCQVNFWF9TR01JSVxcdFxcdDBcXG5AQCAtMjUxLDYgKzI1Nyw2OSBAQFxcbiAjZGVmaW5lIFJUTF84MjIxQl9WTV9DR1xcdFxcdFxcdFxcdDB4MDAxY2M4NGFcXG4gI2RlZmluZSBSVExfODI1MUJcXHRcXHRcXHRcXHQweDAwMWNjODYyXFxuICNkZWZpbmUgUlRMXzgyNjFDXFx0XFx0XFx0XFx0MHgwMDFjYzg5MFxcbisjZGVmaW5lIFJUTF84MjYxQ19DR1xcdFxcdFxcdFxcdDB4MDAxY2M4OThcXG4rXFxuKyNkZWZpbmUgUlRMODI2MUNfQ0VfTU9ERUxcXHRcXHQweDAwXFxuKyNkZWZpbmUgUlRMODI2MVhfSU5UX0FVVE9ORUdfRVJST1JcXHRCSVQoMClcXG4rI2RlZmluZSBSVEw4MjYxWF9JTlRfUEFHRV9SRUNWXFx0XFx0QklUKDIpXFxuKyNkZWZpbmUgUlRMODI2MVhfSU5UX0FVVE9ORUdfRE9ORVxcdEJJVCgzKVxcbisjZGVmaW5lIFJUTDgyNjFYX0lOVF9MSU5LX0NIR1xcdFxcdEJJVCg0KVxcbisjZGVmaW5lIFJUTDgyNjFYX0lOVF9QSFlfUkVHX0FDQ0VTU1xcdEJJVCg1KVxcbisjZGVmaW5lIFJUTDgyNjFYX0lOVF9QTUVcXHRcXHRCSVQoNylcXG4rI2RlZmluZSBSVEw4MjYxWF9JTlRfQUxEUFNfQ0hHXFx0XFx0QklUKDkpXFxuKyNkZWZpbmUgUlRMODI2MVhfSU5UX0pBQkJFUlxcdFxcdEJJVCgxMClcXG4rXFxuKyNkZWZpbmUgUlRMODI2MVhfSU5UX01BU0tfREVGQVVMVFxcdChSVEw4MjYxWF9JTlRfQVVUT05FR19ET05FIHwgXFxcXFxcbitcXHRcXHRcXHRcXHRcXHQgUlRMODI2MVhfSU5UX0xJTktfQ0hHIHwgXFxcXFxcbitcXHRcXHRcXHRcXHRcXHQgUlRMODI2MVhfSU5UX0FVVE9ORUdfRVJST1IgfCBcXFxcXFxuK1xcdFxcdFxcdFxcdFxcdCBSVEw4MjYxWF9JTlRfSkFCQkVSKVxcbitcXG4rI2RlZmluZSBSVEw4MjYxWF9JTlRfTUFTS19BTExcXHRcXHQoUlRMODI2MVhfSU5UX0FVVE9ORUdfRVJST1IgfCBcXFxcXFxuK1xcdFxcdFxcdFxcdFxcdCBSVEw4MjYxWF9JTlRfUEFHRV9SRUNWIHwgXFxcXFxcbitcXHRcXHRcXHRcXHRcXHQgUlRMODI2MVhfSU5UX0FVVE9ORUdfRE9ORSB8IFxcXFxcXG4rXFx0XFx0XFx0XFx0XFx0IFJUTDgyNjFYX0lOVF9MSU5LX0NIRyB8IFxcXFxcXG4rXFx0XFx0XFx0XFx0XFx0IFJUTDgyNjFYX0lOVF9QSFlfUkVHX0FDQ0VTUyB8IFxcXFxcXG4rXFx0XFx0XFx0XFx0XFx0IFJUTDgyNjFYX0lOVF9QTUUgfCBcXFxcXFxuK1xcdFxcdFxcdFxcdFxcdCBSVEw4MjYxWF9JTlRfQUxEUFNfQ0hHIHwgXFxcXFxcbitcXHRcXHRcXHRcXHRcXHQgUlRMODI2MVhfSU5UX0pBQkJFUilcXG4rXFxuKyNkZWZpbmUgRldfTUFJTl9NQUdJQ1xcdFxcdFxcdDB4NTI1NDRDMzhcXG4rI2RlZmluZSBGV19TVUJfTUFHSUNfODI2MUNcXHRcXHQweDMyMzYzMTQzXFxuKyNkZWZpbmUgUlRMODI2MVhfUE9MTF9USU1FT1VUX01TXFx0MTAwXFxuKyNkZWZpbmUgUlRMODI2MVhfTUFYX01NRF9ERVZcXHRcXHQzMVxcbitcXG4rI2RlZmluZSBSVEw4MjYxQ19DRV9GV19OQU1FXFx0XFxcInJ0bF9uaWMvcnRsODI2MWMuYmluXFxcIlxcbitNT0RVTEVfRklSTVdBUkUoUlRMODI2MUNfQ0VfRldfTkFNRSk7XFxuK1xcbitlbnVtIHJ0bDgyNjF4X2Z3X29wIHtcXG4rXFx0T1BfV1JJVEUgPSAweDAwLFxcdC8qIFdyaXRlICovXFxuK1xcdE9QX1BPTEwgID0gMHgwMixcXHQvKiBQb2xsaW5nICovXFxuK307XFxuK1xcbitzdHJ1Y3QgcnRsODI2MXhfZndfaGVhZGVyIHtcXG4rXFx0X19sZTMyIG1haW5fbWFnaWM7XFx0LyogTWFpbiBtYWdpYyBudW1iZXIgKi9cXG4rXFx0X19sZTMyIHN1Yl9tYWdpYztcXHQvKiBTdWIgbWFnaWMgbnVtYmVyICovXFxuK1xcdF9fbGUxNiB2ZXJzaW9uX21ham9yO1xcdC8qIE1ham9yIHZlcnNpb24gKi9cXG4rXFx0X19sZTE2IHZlcnNpb25fbWlub3I7XFx0LyogTWlub3IgdmVyc2lvbiAqL1xcbitcXHRfX2xlMTYgbnVtX2VudHJpZXM7XFx0LyogTnVtYmVyIG9mIGVudHJpZXMgKi9cXG4rXFx0X19sZTE2IHJlc2VydmVkO1xcdC8qIFJlc2VydmVkICovXFxuK1xcdF9fbGUzMiBjcmMzMjtcXHRcXHQvKiBDUkMzMiBjaGVja3N1bSAqL1xcbit9O1xcbitcXG4rc3RydWN0IHJ0bDgyNjF4X2Z3X2VudHJ5IHtcXG4rXFx0X191OCAgdHlwZTtcXHRcXHQvKiBPcGVyYXRpb24gdHlwZSAoT1BfKikgKi9cXG4rXFx0X191OCAgZGV2O1xcdFxcdC8qIE1NRCBkZXZpY2UgKi9cXG4rXFx0X19sZTE2IGFkZHI7XFx0XFx0LyogUmVnaXN0ZXIgYWRkcmVzcyAqL1xcbitcXHRfX3U4ICBtc2I7XFx0XFx0LyogTVNCIGJpdCBwb3NpdGlvbiAqL1xcbitcXHRfX3U4ICBsc2I7XFx0XFx0LyogTFNCIGJpdCBwb3NpdGlvbiAqL1xcbitcXHRfX2xlMTYgdmFsdWU7XFx0XFx0LyogVmFsdWUgdG8gd3JpdGUvY29tcGFyZSAqL1xcbitcXHRfX2xlMTYgdGltZW91dF9tcztcXHQvKiBQb2xsIHRpbWVvdXQgaW4gbWlsbGlzZWNvbmRzICovXFxuK1xcdF9fdTggIHBvbGxfc2V0O1xcdFxcdC8qIFBvbGwgdW50aWwgZXF1YWwgKDEpIG9yIG5vdCBlcXVhbCAoMCkgKi9cXG4rXFx0X191OCAgcmVzZXJ2ZWQ7XFx0XFx0LyogUmVzZXJ2ZWQgKi9cXG4rfTtcXG4rXFxuKyNkZWZpbmUgRldfSEVBREVSX1NJWkVcXHRcXHRzaXplb2Yoc3RydWN0IHJ0bDgyNjF4X2Z3X2hlYWRlcilcXG4rI2RlZmluZSBGV19FTlRSWV9TSVpFXFx0XFx0c2l6ZW9mKHN0cnVjdCBydGw4MjYxeF9md19lbnRyeSlcXG4gXFxuIC8qIFJUTDgyMTFFIGFuZCBSVEw4MjExRiBzdXBwb3J0IHVwIHRvIHRocmVlIExFRHMgKi9cXG4gI2RlZmluZSBSVEw4MjExeF9MRURfQ09VTlRcXHRcXHRcXHQzXFxuQEAgLTI3MCw2ICszMzksMTEgQEAgc3RydWN0IHJ0bDgyMXhfcHJpdiB7XFxuIFxcdHUxNiBpbmVyO1xcbiB9O1xcbiBcXG4rc3RydWN0IHJ0bDgyNjF4X3ByaXYge1xcbitcXHRjb25zdCBjaGFyICpmd19uYW1lO1xcbitcXHRib29sIGZ3X2xvYWRlZDtcXG4rfTtcXG4rXFxuIHN0YXRpYyBpbnQgcnRsODIxeF9yZWFkX3BhZ2Uoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcXG4ge1xcbiBcXHRyZXR1cm4gX19waHlfcmVhZChwaHlkZXYsIFJUTDgyMXhfUEFHRV9TRUxFQ1QpO1xcbkBAIC0zMTAsNiArMzg0LDMyNSBAQCBzdGF0aWMgaW50IHJ0bDgyMXhfbW9kaWZ5X2V4dF9wYWdlKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYsIHUxNiBleHRfcGFnZSxcXG4gXFx0cmV0dXJuIHBoeV9yZXN0b3JlX3BhZ2UocGh5ZGV2LCBvbGRwYWdlLCByZXQpO1xcbiB9XFxuIFxcbitzdGF0aWMgaW50IHJ0bDgyNjF4X3Byb2JlKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXFxuK3tcXG4rXFx0c3RydWN0IGRldmljZSAqZGV2ID0gXFx1MDAyNnBoeWRldi1cXHUwMDNlbWRpby5kZXY7XFxuK1xcdHN0cnVjdCBydGw4MjYxeF9wcml2ICpwcml2O1xcbitcXHRpbnQgc3ViX3BoeV9pZCwgcmV0O1xcbitcXG4rXFx0cHJpdiA9IGRldm1fa3phbGxvYyhkZXYsIHNpemVvZigqcHJpdiksIEdGUF9LRVJORUwpO1xcbitcXHRpZiAoIXByaXYpXFxuK1xcdFxcdHJldHVybiAtRU5PTUVNO1xcbitcXG4rXFx0cGh5ZGV2LVxcdTAwM2Vwcml2ID0gcHJpdjtcXG4rXFxuK1xcdHJldCA9IHBoeV93cml0ZV9tbWQocGh5ZGV2LCBNRElPX01NRF9WRU5EMiwgUlRMODI2MVhfRVhUX0FERFJfUkVHLFxcbitcXHRcXHRcXHQgICAgUlRMXzgyNjFYX1NVQl9QSFlfSURfQUREUik7XFxuK1xcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRyZXR1cm4gcmV0O1xcbitcXG4rXFx0cmV0ID0gcGh5X3JlYWRfbW1kKHBoeWRldiwgTURJT19NTURfVkVORDIsIFJUTDgyNjFYX0VYVF9EQVRBX1JFRyk7XFxuK1xcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRyZXR1cm4gcmV0O1xcbitcXG4rXFx0c3ViX3BoeV9pZCA9IChyZXQgXFx1MDAzZVxcdTAwM2UgOCkgXFx1MDAyNiAweGZmO1xcbitcXG4rXFx0c3dpdGNoIChzdWJfcGh5X2lkKSB7XFxuK1xcdGNhc2UgUlRMODI2MUNfQ0VfTU9ERUw6XFxuK1xcdFxcdHByaXYtXFx1MDAzZWZ3X25hbWUgPSBSVEw4MjYxQ19DRV9GV19OQU1FO1xcbitcXHRcXHRwaHlkZXZfaW5mbyhwaHlkZXYsIFxcXCJSVEw4MjYxQyBkZXRlY3RlZCAoc3ViX2lkIDB4JTAyeClcXFxcblxcXCIsIHN1Yl9waHlfaWQpO1xcbitcXHRcXHRicmVhaztcXG4rXFxuK1xcdGRlZmF1bHQ6XFxuK1xcdFxcdHBoeWRldl93YXJuKHBoeWRldiwgXFxcIlVua25vd24gc3ViX2lkIDB4JTAyeCwgZGVmYXVsdCBiZWhhdmlvclxcXFxuXFxcIiwgc3ViX3BoeV9pZCk7XFxuK1xcdFxcdHJldHVybiAtRU5PREVWO1xcbitcXHR9XFxuK1xcbitcXHRyZXR1cm4gMDtcXG4rfVxcbitcXG4rc3RhdGljIGludCBydGw4MjYxeF9nZXRfZmVhdHVyZXMoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcXG4re1xcbitcXHRpbnQgcmV0O1xcbitcXG4rXFx0cmV0ID0gZ2VucGh5X2M0NV9wbWFfcmVhZF9hYmlsaXRpZXMocGh5ZGV2KTtcXG4rXFx0aWYgKHJldClcXG4rXFx0XFx0cmV0dXJuIHJldDtcXG4rXFx0LypcXG4rXFx0ICogU3VwcGxlbWVudCBNdWx0aS1HaWcgc3BlZWRzIHRoYXQgbWF5IG5vdCBiZSBhdXRvbWF0aWNhbGx5IGRldGVjdGVkXFxuK1xcdCAqIFJUTDgyNjFYIHN1cHBvcnRzIDIuNUcvNUcgaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgMTBHXFxuK1xcdCAqL1xcbitcXHRsaW5rbW9kZV9zZXRfYml0KEVUSFRPT0xfTElOS19NT0RFXzI1MDBiYXNlVF9GdWxsX0JJVCxcXG4rXFx0XFx0XFx0IHBoeWRldi1cXHUwMDNlc3VwcG9ydGVkKTtcXG4rXFx0bGlua21vZGVfc2V0X2JpdChFVEhUT09MX0xJTktfTU9ERV81MDAwYmFzZVRfRnVsbF9CSVQsXFxuK1xcdFxcdFxcdCBwaHlkZXYtXFx1MDAzZXN1cHBvcnRlZCk7XFxuK1xcbitcXHRyZXR1cm4gMDtcXG4rfVxcbitcXG4rc3RhdGljIGludCBydGw4MjYxeF9yZWFkX3N0YXR1cyhzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxcbit7XFxuK1xcdGludCByZXQsIHZhbCA9IDA7XFxuK1xcbitcXHRpZiAocGh5ZGV2LVxcdTAwM2VhdXRvbmVnID09IEFVVE9ORUdfRU5BQkxFKSB7XFxuK1xcdFxcdHJldCA9IGdlbnBoeV9jNDVfYW5lZ19kb25lKHBoeWRldik7XFxuK1xcdFxcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRcXHRyZXR1cm4gcmV0O1xcbitcXG4rXFx0XFx0aWYgKHJldCkge1xcbitcXHRcXHRcXHR2YWwgPSBwaHlfcmVhZF9tbWQocGh5ZGV2LCBNRElPX01NRF9WRU5EMixcXG4rXFx0XFx0XFx0XFx0XFx0ICAgUlRMODIyWF9WTkQyX0MyMl9SRUcoTUlJX1NUQVQxMDAwKSk7XFxuK1xcdFxcdFxcdGlmICh2YWwgXFx1MDAzYyAwKVxcbitcXHRcXHRcXHRcXHRyZXR1cm4gdmFsO1xcbitcXHRcXHR9XFxuK1xcdH1cXG4rXFxuK1xcdG1paV9zdGF0MTAwMF9tb2RfbGlua21vZGVfbHBhX3QocGh5ZGV2LVxcdTAwM2VscF9hZHZlcnRpc2luZywgdmFsKTtcXG4rXFxuK1xcdHJldCA9IGdlbnBoeV9jNDVfcmVhZF9zdGF0dXMocGh5ZGV2KTtcXG4rXFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdHJldHVybiByZXQ7XFxuK1xcbitcXHRyZXR1cm4gMDtcXG4rfVxcbitcXG4rc3RhdGljIGludCBydGw4MjYxeF92ZXJpZnlfZmlybXdhcmUoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldiwgY29uc3Qgc3RydWN0IGZpcm13YXJlICpmdylcXG4re1xcbitcXHRjb25zdCBzdHJ1Y3QgcnRsODI2MXhfZndfaGVhZGVyICpoZHI7XFxuK1xcdHUzMiBtYWluX21hZ2ljLCBzdWJfbWFnaWM7XFxuK1xcdHUzMiBjYWxjX2NyYywgZmlsZV9jcmM7XFxuK1xcdHNpemVfdCBkYXRhX2xlbjtcXG4rXFx0dTE2IG51bV9lbnRyaWVzO1xcbitcXG4rXFx0aWYgKGZ3LVxcdTAwM2VzaXplIFxcdTAwM2MgRldfSEVBREVSX1NJWkUpIHtcXG4rXFx0XFx0cGh5ZGV2X2VycihwaHlkZXYsIFxcXCJGaXJtd2FyZSB0b28gc21hbGw6ICV6dSBieXRlc1xcXFxuXFxcIiwgZnctXFx1MDAzZXNpemUpO1xcbitcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4rXFx0fVxcbitcXG4rXFx0aGRyID0gKGNvbnN0IHN0cnVjdCBydGw4MjYxeF9md19oZWFkZXIgKilmdy1cXHUwMDNlZGF0YTtcXG4rXFxuK1xcdG1haW5fbWFnaWMgPSBsZTMyX3RvX2NwdShoZHItXFx1MDAzZW1haW5fbWFnaWMpO1xcbitcXHRpZiAobWFpbl9tYWdpYyAhPSBGV19NQUlOX01BR0lDKSB7XFxuK1xcdFxcdHBoeWRldl9lcnIocGh5ZGV2LCBcXFwiSW52YWxpZCBmaXJtd2FyZSBtYWdpYzogMHglMDh4XFxcXG5cXFwiLCBtYWluX21hZ2ljKTtcXG4rXFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuK1xcdH1cXG4rXFxuK1xcdHN1Yl9tYWdpYyA9IGxlMzJfdG9fY3B1KGhkci1cXHUwMDNlc3ViX21hZ2ljKTtcXG4rXFx0aWYgKHN1Yl9tYWdpYyAhPSBGV19TVUJfTUFHSUNfODI2MUMpIHtcXG4rXFx0XFx0cGh5ZGV2X2VycihwaHlkZXYsIFxcXCJJbnZhbGlkIHN1YiBtYWdpYzogMHglMDh4XFxcXG5cXFwiLCBzdWJfbWFnaWMpO1xcbitcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4rXFx0fVxcbitcXG4rXFx0bnVtX2VudHJpZXMgPSBsZTE2X3RvX2NwdShoZHItXFx1MDAzZW51bV9lbnRyaWVzKTtcXG4rXFx0ZGF0YV9sZW4gPSBudW1fZW50cmllcyAqIEZXX0VOVFJZX1NJWkU7XFxuK1xcbitcXHRpZiAoZnctXFx1MDAzZXNpemUgIT0gc2l6ZW9mKCpoZHIpICsgZGF0YV9sZW4pIHtcXG4rXFx0XFx0cGh5ZGV2X2VycihwaHlkZXYsIFxcXCJGaXJtd2FyZSBzaXplIG1pc21hdGNoXFxcXG5cXFwiKTtcXG4rXFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuK1xcdH1cXG4rXFxuK1xcdGNhbGNfY3JjID0gY3JjMzIofjAsIGZ3LVxcdTAwM2VkYXRhICsgRldfSEVBREVSX1NJWkUsIGRhdGFfbGVuKSBeIH4wO1xcbitcXHRmaWxlX2NyYyA9IGxlMzJfdG9fY3B1KGhkci1cXHUwMDNlY3JjMzIpO1xcbitcXG4rXFx0aWYgKGNhbGNfY3JjICE9IGZpbGVfY3JjKSB7XFxuK1xcdFxcdHBoeWRldl9lcnIocGh5ZGV2LCBcXFwiQ1JDMzIgbWlzbWF0Y2g6IGNhbGN1bGF0ZWQ9MHglMDh4IGZpbGU9MHglMDh4XFxcXG5cXFwiLFxcbitcXHRcXHRcXHQgICBjYWxjX2NyYywgZmlsZV9jcmMpO1xcbitcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4rXFx0fVxcbitcXG4rXFx0cmV0dXJuIDA7XFxuK31cXG4rXFxuK3N0YXRpYyBpbnQgcnRsODI2MXhfZndfZXhlY3V0ZV9lbnRyeShzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2LFxcbitcXHRcXHRcXHRcXHQgICAgIGNvbnN0IHN0cnVjdCBydGw4MjYxeF9md19lbnRyeSAqZW50cnkpXFxuK3tcXG4rXFx0dTE2IGFkZHIsIHZhbHVlLCB0aW1lb3V0X21zO1xcbitcXHR1OCBkZXYsIG1zYiwgbHNiLCBwb2xsX3NldDtcXG4rXFx0dTMyIGJpdHMsIGV4cGVjdF92YWw7XFxuK1xcdGludCByZXQsIHZhbDtcXG4rXFxuK1xcdGRldiA9IGVudHJ5LVxcdTAwM2VkZXY7XFxuK1xcdGFkZHIgPSBsZTE2X3RvX2NwdShlbnRyeS1cXHUwMDNlYWRkcik7XFxuK1xcdG1zYiA9IGVudHJ5LVxcdTAwM2Vtc2I7XFxuK1xcdGxzYiA9IGVudHJ5LVxcdTAwM2Vsc2I7XFxuK1xcdHZhbHVlID0gbGUxNl90b19jcHUoZW50cnktXFx1MDAzZXZhbHVlKTtcXG4rXFx0dGltZW91dF9tcyA9IGxlMTZfdG9fY3B1KGVudHJ5LVxcdTAwM2V0aW1lb3V0X21zKTtcXG4rXFx0cG9sbF9zZXQgPSBlbnRyeS1cXHUwMDNlcG9sbF9zZXQ7XFxuK1xcbitcXHRpZiAodGltZW91dF9tcyA9PSAwKVxcbitcXHRcXHR0aW1lb3V0X21zID0gUlRMODI2MVhfUE9MTF9USU1FT1VUX01TO1xcbitcXG4rXFx0aWYgKGRldiBcXHUwMDNlIFJUTDgyNjFYX01BWF9NTURfREVWKSB7XFxuK1xcdFxcdHBoeWRldl9lcnIocGh5ZGV2LCBcXFwiaW52YWxpZCBmaXJtd2FyZSBNTUQgZGV2aWNlOiBkZXY9JXVcXFxcblxcXCIsIGRldik7XFxuK1xcdFxcdHJldHVybiAtRUlOVkFMO1xcbitcXHR9XFxuK1xcbitcXHRpZiAobXNiIFxcdTAwM2UgMTUgfHwgbHNiIFxcdTAwM2UgbXNiKSB7XFxuK1xcdFxcdHBoeWRldl9lcnIocGh5ZGV2LCBcXFwiaW52YWxpZCBmaXJtd2FyZSBiaXRzOiBtc2I9JXUsIGxzYj0ldVxcXFxuXFxcIiwgbXNiLCBsc2IpO1xcbitcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4rXFx0fVxcbitcXG4rXFx0c3dpdGNoIChlbnRyeS1cXHUwMDNldHlwZSkge1xcbitcXHRjYXNlIE9QX1dSSVRFOlxcbitcXHRcXHRyZXQgPSBwaHlfbW9kaWZ5X21tZChwaHlkZXYsIGRldiwgYWRkcixcXG4rXFx0XFx0XFx0XFx0ICAgICBHRU5NQVNLKG1zYiwgbHNiKSwgKHZhbHVlIFxcdTAwM2NcXHUwMDNjIGxzYikgXFx1MDAyNiBHRU5NQVNLKG1zYiwgbHNiKSk7XFxuK1xcdFxcdGlmIChyZXQpXFxuK1xcdFxcdFxcdHJldHVybiByZXQ7XFxuK1xcdFxcdGJyZWFrO1xcbitcXG4rXFx0Y2FzZSBPUF9QT0xMOlxcbitcXHRcXHRiaXRzID0gR0VOTUFTSyhtc2IsIGxzYik7XFxuK1xcdFxcdGV4cGVjdF92YWwgPSAodmFsdWUgXFx1MDAzY1xcdTAwM2MgbHNiKSBcXHUwMDI2IGJpdHM7XFxuK1xcbitcXHRcXHRpZiAocG9sbF9zZXQpXFxuK1xcdFxcdFxcdHJldCA9IHBoeV9yZWFkX21tZF9wb2xsX3RpbWVvdXQocGh5ZGV2LCBkZXYsIGFkZHIsIHZhbCxcXG4rXFx0XFx0XFx0XFx0XFx0XFx0XFx0KHZhbCBcXHUwMDI2IGJpdHMpID09IGV4cGVjdF92YWwsXFxuK1xcdFxcdFxcdFxcdFxcdFxcdFxcdDEwMDAsIHRpbWVvdXRfbXMgKiAxMDAwLCBmYWxzZSk7XFxuK1xcdFxcdGVsc2VcXG4rXFx0XFx0XFx0cmV0ID0gcGh5X3JlYWRfbW1kX3BvbGxfdGltZW91dChwaHlkZXYsIGRldiwgYWRkciwgdmFsLFxcbitcXHRcXHRcXHRcXHRcXHRcXHRcXHQodmFsIFxcdTAwMjYgYml0cykgIT0gZXhwZWN0X3ZhbCxcXG4rXFx0XFx0XFx0XFx0XFx0XFx0XFx0MTAwMCwgdGltZW91dF9tcyAqIDEwMDAsIGZhbHNlKTtcXG4rXFx0XFx0aWYgKHJldClcXG4rXFx0XFx0XFx0cmV0dXJuIHJldDtcXG4rXFx0XFx0YnJlYWs7XFxuK1xcbitcXHRkZWZhdWx0OlxcbitcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4rXFx0fVxcbitcXG4rXFx0cmV0dXJuIDA7XFxuK31cXG4rXFxuK3N0YXRpYyBpbnQgcnRsODI2MXhfZndfbG9hZChzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxcbit7XFxuK1xcdHN0cnVjdCBydGw4MjYxeF9wcml2ICpwcml2ID0gcGh5ZGV2LVxcdTAwM2Vwcml2O1xcbitcXHRjb25zdCBzdHJ1Y3QgcnRsODI2MXhfZndfZW50cnkgKmVudHJ5O1xcbitcXHRjb25zdCBzdHJ1Y3QgcnRsODI2MXhfZndfaGVhZGVyICpoZHI7XFxuK1xcdGNvbnN0IHN0cnVjdCBmaXJtd2FyZSAqZnc7XFxuK1xcdGludCByZXQsIGk7XFxuK1xcbitcXHRpZiAoIXByaXYtXFx1MDAzZWZ3X25hbWUpXFxuK1xcdFxcdHJldHVybiAwO1xcbitcXG4rXFx0cmV0ID0gcmVxdWVzdF9maXJtd2FyZShcXHUwMDI2ZncsIHByaXYtXFx1MDAzZWZ3X25hbWUsIFxcdTAwMjZwaHlkZXYtXFx1MDAzZW1kaW8uZGV2KTtcXG4rXFx0aWYgKHJldCkge1xcbitcXHRcXHRwaHlkZXZfZXJyKHBoeWRldiwgXFxcIkZhaWxlZCB0byBsb2FkIGZpcm13YXJlICVzOiAlZFxcXFxuXFxcIiwgcHJpdi1cXHUwMDNlZndfbmFtZSwgcmV0KTtcXG4rXFx0XFx0cmV0dXJuIHJldDtcXG4rXFx0fVxcbitcXG4rXFx0cmV0ID0gcnRsODI2MXhfdmVyaWZ5X2Zpcm13YXJlKHBoeWRldiwgZncpO1xcbitcXHRpZiAocmV0KVxcbitcXHRcXHRnb3RvIHJlbGVhc2VfZnc7XFxuK1xcbitcXHRoZHIgPSAoY29uc3Qgc3RydWN0IHJ0bDgyNjF4X2Z3X2hlYWRlciAqKWZ3LVxcdTAwM2VkYXRhO1xcbitcXG4rXFx0ZW50cnkgPSAoY29uc3Qgc3RydWN0IHJ0bDgyNjF4X2Z3X2VudHJ5ICopKGZ3LVxcdTAwM2VkYXRhICsgRldfSEVBREVSX1NJWkUpO1xcbitcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgbGUxNl90b19jcHUoaGRyLVxcdTAwM2VudW1fZW50cmllcyk7IGkrKywgZW50cnkrKykge1xcbitcXHRcXHRyZXQgPSBydGw4MjYxeF9md19leGVjdXRlX2VudHJ5KHBoeWRldiwgZW50cnkpO1xcbitcXHRcXHRpZiAocmV0KSB7XFxuK1xcdFxcdFxcdHBoeWRldl9lcnIocGh5ZGV2LCBcXFwiRW50cnkgJWQgZmFpbGVkOiAlZFxcXFxuXFxcIiwgaSwgcmV0KTtcXG4rXFx0XFx0XFx0Z290byByZWxlYXNlX2Z3O1xcbitcXHRcXHR9XFxuK1xcdH1cXG4rXFxuK1xcdHByaXYtXFx1MDAzZWZ3X2xvYWRlZCA9IHRydWU7XFxuK1xcbityZWxlYXNlX2Z3OlxcbitcXHRyZWxlYXNlX2Zpcm13YXJlKGZ3KTtcXG4rXFx0cmV0dXJuIHJldDtcXG4rfVxcbitcXG4rc3RhdGljIGludCBydGw4MjYxeF9jb25maWdfaW50cihzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxcbit7XFxuK1xcdGludCByZXQ7XFxuK1xcbitcXHRpZiAocGh5ZGV2LVxcdTAwM2VpbnRlcnJ1cHRzID09IFBIWV9JTlRFUlJVUFRfRU5BQkxFRCkge1xcbitcXHRcXHRyZXQgPSBwaHlfcmVhZF9tbWQocGh5ZGV2LCBNRElPX01NRF9WRU5EMiwgUlRMODIyMUJfVk5EMl9JTlNSKTtcXG4rXFx0XFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdFxcdHJldHVybiByZXQ7XFxuK1xcbitcXHRcXHRyZXQgPSBwaHlfd3JpdGVfbW1kKHBoeWRldiwgTURJT19NTURfVkVORDIsIFJUTDgyMjFCX1ZORDJfSU5FUixcXG4rXFx0XFx0XFx0XFx0ICAgIFJUTDgyNjFYX0lOVF9NQVNLX0RFRkFVTFQpO1xcbitcXHRcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0XFx0cmV0dXJuIHJldDtcXG4rXFx0fSBlbHNlIHtcXG4rXFx0XFx0cmV0ID0gcGh5X3dyaXRlX21tZChwaHlkZXYsIE1ESU9fTU1EX1ZFTkQyLCBSVEw4MjIxQl9WTkQyX0lORVIsIDApO1xcbitcXHRcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0XFx0cmV0dXJuIHJldDtcXG4rXFxuK1xcdFxcdHJldCA9IHBoeV9yZWFkX21tZChwaHlkZXYsIE1ESU9fTU1EX1ZFTkQyLCBSVEw4MjIxQl9WTkQyX0lOU1IpO1xcbitcXHRcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0XFx0cmV0dXJuIHJldDtcXG4rXFx0fVxcbitcXG4rXFx0cmV0dXJuIDA7XFxuK31cXG4rXFxuK3N0YXRpYyBpcnFyZXR1cm5fdCBydGw4MjYxeF9oYW5kbGVfaW50ZXJydXB0KHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXFxuK3tcXG4rXFx0aW50IGlycV9zdGF0dXM7XFxuK1xcbitcXHRpcnFfc3RhdHVzID0gcGh5X3JlYWRfbW1kKHBoeWRldiwgTURJT19NTURfVkVORDIsIFJUTDgyMjFCX1ZORDJfSU5TUik7XFxuK1xcdGlmIChpcnFfc3RhdHVzIFxcdTAwM2MgMCkge1xcbitcXHRcXHRwaHlfZXJyb3IocGh5ZGV2KTtcXG4rXFx0XFx0cmV0dXJuIElSUV9OT05FO1xcbitcXHR9XFxuK1xcbitcXHRpZiAoIShpcnFfc3RhdHVzIFxcdTAwMjYgUlRMODI2MVhfSU5UX01BU0tfQUxMKSlcXG4rXFx0XFx0cmV0dXJuIElSUV9OT05FO1xcbitcXG4rXFx0aWYgKGlycV9zdGF0dXMgXFx1MDAyNiAoUlRMODI2MVhfSU5UX0xJTktfQ0hHIHwgUlRMODI2MVhfSU5UX0FVVE9ORUdfRE9ORSB8XFxuK1xcdCAgICBSVEw4MjYxWF9JTlRfQVVUT05FR19FUlJPUiB8IFJUTDgyNjFYX0lOVF9KQUJCRVIpKVxcbitcXHRcXHRwaHlfdHJpZ2dlcl9tYWNoaW5lKHBoeWRldik7XFxuK1xcbitcXHRyZXR1cm4gSVJRX0hBTkRMRUQ7XFxuK31cXG4rXFxuK3N0YXRpYyBpbnQgcnRsODI2MXhfY29uZmlnX2FuZWcoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcXG4re1xcbitcXHR1MTYgYWR2XzFnID0gMDtcXG4rXFx0aW50IHJldDtcXG4rXFxuK1xcdHJldCA9IGdlbnBoeV9jNDVfY29uZmlnX2FuZWcocGh5ZGV2KTtcXG4rXFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdHJldHVybiByZXQ7XFxuK1xcbitcXHRpZiAocGh5ZGV2LVxcdTAwM2VhdXRvbmVnID09IEFVVE9ORUdfRElTQUJMRSlcXG4rXFx0XFx0cmV0dXJuIDA7XFxuK1xcbitcXHRpZiAobGlua21vZGVfdGVzdF9iaXQoRVRIVE9PTF9MSU5LX01PREVfMTAwMGJhc2VUX0Z1bGxfQklULFxcbitcXHRcXHRcXHQgICAgICBwaHlkZXYtXFx1MDAzZWFkdmVydGlzaW5nKSlcXG4rXFx0XFx0YWR2XzFnID0gQURWRVJUSVNFXzEwMDBGVUxMO1xcbitcXHRpZiAobGlua21vZGVfdGVzdF9iaXQoRVRIVE9PTF9MSU5LX01PREVfMTAwMGJhc2VUX0hhbGZfQklULFxcbitcXHRcXHRcXHQgICAgICBwaHlkZXYtXFx1MDAzZWFkdmVydGlzaW5nKSlcXG4rXFx0XFx0YWR2XzFnIHw9IEFEVkVSVElTRV8xMDAwSEFMRjtcXG4rXFxuK1xcdHJldCA9IHBoeV9tb2RpZnlfbW1kX2NoYW5nZWQocGh5ZGV2LCBNRElPX01NRF9WRU5EMixcXG4rXFx0XFx0XFx0XFx0ICAgICBSVEw4MjJYX1ZORDJfQzIyX1JFRyhNSUlfQ1RSTDEwMDApLFxcbitcXHRcXHRcXHRcXHQgICAgIEFEVkVSVElTRV8xMDAwRlVMTCB8IEFEVkVSVElTRV8xMDAwSEFMRixcXG4rXFx0XFx0XFx0XFx0ICAgICBhZHZfMWcpO1xcbitcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0cmV0dXJuIHJldDtcXG4rXFx0aWYgKHJldCBcXHUwMDNlIDApXFxuK1xcdFxcdHJldHVybiBnZW5waHlfYzQ1X3Jlc3RhcnRfYW5lZyhwaHlkZXYpO1xcbitcXG4rXFx0cmV0dXJuIDA7XFxuK31cXG4rXFxuK3N0YXRpYyBpbnQgcnRsODI2MXhfY29uZmlnX2luaXQoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcXG4re1xcbitcXHRzdHJ1Y3QgcnRsODI2MXhfcHJpdiAqcHJpdiA9IHBoeWRldi1cXHUwMDNlcHJpdjtcXG4rXFxuK1xcdC8qIFRoZSBmaXJtd2FyZSBwYXJhbWV0ZXJzIGFyZSBwcmVzZXJ2ZWQgYWNyb3NzIElFRUUgc29mdCByZXNldHMgYW5kXFxuK1xcdCAqIHN1c3BlbmQvcmVzdW1lIGN5Y2xlcy4gUmVsb2FkaW5nIGlzIG9ubHkgbmVjZXNzYXJ5IGFmdGVyIGEgcG93ZXJcXG4rXFx0ICogY3ljbGUgb3IgaGFyZCByZXNldC5cXG4rXFx0ICovXFxuK1xcdGlmIChwcml2LVxcdTAwM2Vmd19uYW1lIFxcdTAwMjZcXHUwMDI2ICFwcml2LVxcdTAwM2Vmd19sb2FkZWQpXFxuK1xcdFxcdHJldHVybiBydGw4MjYxeF9md19sb2FkKHBoeWRldik7XFxuK1xcbitcXHRyZXR1cm4gMDtcXG4rfVxcbitcXG4gc3RhdGljIGludCBydGw4MjF4X3Byb2JlKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXFxuIHtcXG4gXFx0c3RydWN0IGRldmljZSAqZGV2ID0gXFx1MDAyNnBoeWRldi1cXHUwMDNlbWRpby5kZXY7XFxuQEAgLTMwMDEsNiArMzM5NCwxOSBAQCBzdGF0aWMgc3RydWN0IHBoeV9kcml2ZXIgcmVhbHRla19kcnZzW10gPSB7XFxuIFxcdFxcdC5yZXN1bWVcXHRcXHQ9IGdlbnBoeV9yZXN1bWUsXFxuIFxcdFxcdC5yZWFkX21tZFxcdD0gZ2VucGh5X3JlYWRfbW1kX3Vuc3VwcG9ydGVkLFxcbiBcXHRcXHQud3JpdGVfbW1kXFx0PSBnZW5waHlfd3JpdGVfbW1kX3Vuc3VwcG9ydGVkLFxcbitcXHR9LCB7XFxuK1xcdFxcdFBIWV9JRF9NQVRDSF9FWEFDVChSVExfODI2MUNfQ0cpLFxcbitcXHRcXHQubmFtZVxcdFxcdFxcdD0gXFxcIlJlYWx0ZWsgUlRMODI2MUMgMTBHYnBzIFBIWVxcXCIsXFxuK1xcdFxcdC5wcm9iZVxcdFxcdFxcdD0gcnRsODI2MXhfcHJvYmUsXFxuK1xcdFxcdC5jb25maWdfaW5pdFxcdFxcdD0gcnRsODI2MXhfY29uZmlnX2luaXQsXFxuK1xcdFxcdC5nZXRfZmVhdHVyZXNcXHRcXHQ9IHJ0bDgyNjF4X2dldF9mZWF0dXJlcyxcXG4rXFx0XFx0LmNvbmZpZ19hbmVnXFx0XFx0PSBydGw4MjYxeF9jb25maWdfYW5lZyxcXG4rXFx0XFx0LnJlYWRfc3RhdHVzXFx0XFx0PSBydGw4MjYxeF9yZWFkX3N0YXR1cyxcXG4rXFx0XFx0LmNvbmZpZ19pbnRyXFx0XFx0PSBydGw4MjYxeF9jb25maWdfaW50cixcXG4rXFx0XFx0LmhhbmRsZV9pbnRlcnJ1cHRcXHQ9IHJ0bDgyNjF4X2hhbmRsZV9pbnRlcnJ1cHQsXFxuK1xcdFxcdC5zb2Z0X3Jlc2V0XFx0XFx0PSBnZW5waHlfYzQ1X3BtYV9zb2Z0X3Jlc2V0LFxcbitcXHRcXHQuc3VzcGVuZFxcdFxcdD0gZ2VucGh5X2M0NV9wbWFfc3VzcGVuZCxcXG4rXFx0XFx0LnJlc3VtZVxcdFxcdFxcdD0gZ2VucGh5X2M0NV9wbWFfcmVzdW1lLFxcbiBcXHR9LFxcbiB9O1xcbiBcXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9waHkuaCBiL2luY2x1ZGUvbGludXgvcGh5LmhcXG5pbmRleCAxOTlhN2FhYTM0MWJmZC4uZDZiYzE5OTMxZmI4MzUgMTAwNjQ0XFxuLS0tIGEvaW5jbHVkZS9saW51eC9waHkuaFxcbisrKyBiL2luY2x1ZGUvbGludXgvcGh5LmhcXG5AQCAtMjMwOSw2ICsyMzA5LDcgQEAgaW50IGdlbnBoeV9jMzdfcmVhZF9zdGF0dXMoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldiwgYm9vbCAqY2hhbmdlZCk7XFxuIC8qIENsYXVzZSA0NSBQSFkgKi9cXG4gaW50IGdlbnBoeV9jNDVfcmVzdGFydF9hbmVnKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpO1xcbiBpbnQgZ2VucGh5X2M0NV9jaGVja19hbmRfcmVzdGFydF9hbmVnKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYsIGJvb2wgcmVzdGFydCk7XFxuK2ludCBnZW5waHlfYzQ1X3BtYV9zb2Z0X3Jlc2V0KHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpO1xcbiBpbnQgZ2VucGh5X2M0NV9hbmVnX2RvbmUoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldik7XFxuIGludCBnZW5waHlfYzQ1X3JlYWRfbGluayhzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KTtcXG4gaW50IGdlbnBoeV9jNDVfcmVhZF9scGEoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldik7XFxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvdWFwaS9saW51eC9tZGlvLmggYi9pbmNsdWRlL3VhcGkvbGludXgvbWRpby5oXFxuaW5kZXggYjI1NDFjOTQ4ZmMxZWIuLjA2ZjRiYzNjMjBjNzE3IDEwMDY0NFxcbi0tLSBhL2luY2x1ZGUvdWFwaS9saW51eC9tZGlvLmhcXG4rKysgYi9pbmNsdWRlL3VhcGkvbGludXgvbWRpby5oXFxuQEAgLTMzMiw4ICszMzIsMTMgQEBcXG4gI2RlZmluZSBNRElPX0FOXzEwR0JUX0NUUkxfQURWMl81R1xcdDB4MDA4MFxcdC8qIEFkdmVydGlzZSAyLjVHQkFTRS1UICovXFxuICNkZWZpbmUgTURJT19BTl8xMEdCVF9DVFJMX0FEVjVHXFx0MHgwMTAwXFx0LyogQWR2ZXJ0aXNlIDVHQkFTRS1UICovXFxuICNkZWZpbmUgTURJT19BTl8xMEdCVF9DVFJMX0FEVjEwR1xcdDB4MTAwMFxcdC8qIEFkdmVydGlzZSAxMEdCQVNFLVQgKi9cXG4rI2RlZmluZSBNRElPX0FOXzEwR0JUX0NUUkxfTVNfRU5BQkxFXFx0MHg4MDAwXFx0LyogTWFzdGVyL3NsYXZlIG1hbnVhbCBjb25maWcgZW5hYmxlICovXFxuKyNkZWZpbmUgTURJT19BTl8xMEdCVF9DVFJMX01TX1ZBTFVFXFx0MHg0MDAwXFx0LyogTWFzdGVyL3NsYXZlIGNvbmZpZyB2YWx1ZSAoMT1NYXN0ZXIpICovXFxuKyNkZWZpbmUgTURJT19BTl8xMEdCVF9DVFJMX01TX1BPUlRfVFlQRVxcdDB4MjAwMFxcdC8qIE1hc3RlciBQcmVmZXJyZWQgVHlwZSAqL1xcbiBcXG4gLyogQU4gMTBHQkFTRS1UIHN0YXR1cyByZWdpc3Rlci4gKi9cXG4rI2RlZmluZSBNRElPX0FOXzEwR0JUX1NUQVRfTVNfRkFVTFRcXHQweDgwMDBcXHQvKiBNYXN0ZXIvc2xhdmUgZmF1bHQgKi9cXG4rI2RlZmluZSBNRElPX0FOXzEwR0JUX1NUQVRfTVNfUkVTXFx0MHg0MDAwXFx0LyogTWFzdGVyL3NsYXZlIHJlc29sdXRpb24gKDE9TWFzdGVyKSAqL1xcbiAjZGVmaW5lIE1ESU9fQU5fMTBHQlRfU1RBVF9MUDJfNUdcXHQweDAwMjAgIC8qIExQIGlzIDIuNUdCVCBjYXBhYmxlICovXFxuICNkZWZpbmUgTURJT19BTl8xMEdCVF9TVEFUX0xQNUdcXHRcXHQweDAwNDAgIC8qIExQIGlzIDVHQlQgY2FwYWJsZSAqL1xcbiAjZGVmaW5lIE1ESU9fQU5fMTBHQlRfU1RBVF9MUFRSUlxcdDB4MDIwMFxcdC8qIExQIHRyYWluaW5nIHJlc2V0IHJlcS4gKi9cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDNUMDc6MzU6MDYuNTY1ODM3NDY0WiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoyNDY5OTM1OTI4NDcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiUkVBTFRFS19QSFlcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJydGw4MjYxeF9wcm9iZVwiLFxuICAgIFwicnRsODI2MXhfZ2V0X2ZlYXR1cmVzXCIsXG4gICAgXCJydGw4MjYxeF9yZWFkX3N0YXR1c1wiLFxuICAgIFwicnRsODI2MXhfdmVyaWZ5X2Zpcm13YXJlXCIsXG4gICAgXCJydGw4MjYxeF9md19leGVjdXRlX2VudHJ5XCIsXG4gICAgXCJydGw4MjYxeF9md19sb2FkXCIsXG4gICAgXCJydGw4MjYxeF9jb25maWdfaW50clwiLFxuICAgIFwicnRsODI2MXhfaGFuZGxlX2ludGVycnVwdFwiLFxuICAgIFwicnRsODI2MXhfY29uZmlnX2FuZWdcIixcbiAgICBcInJ0bDgyNjF4X2NvbmZpZ19pbml0XCIsXG4gICAgXCJnZW5waHlfYzQ1X3BtYV9zb2Z0X3Jlc2V0XCIsXG4gICAgXCJnZW5waHlfYzQ1X2FuX3NldHVwX21hc3Rlcl9zbGF2ZVwiLFxuICAgIFwiZ2VucGh5X2M0NV9yZWFkX21hc3Rlcl9zbGF2ZVwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHMgc3VwcG9ydCBmb3IgdGhlIFJlYWx0ZWsgUlRMODI2MUMgMTBHYnBzIFBIWSwgaW5jbHVkaW5nIGZpcm13YXJlIGxvYWRpbmcgYW5kIHBhcnNpbmcsIGFuZCBuZXcgQ2xhdXNlIDQ1IG1hc3Rlci9zbGF2ZSBjb25maWd1cmF0aW9uIGZ1bmN0aW9ucy4gVGhpcyBjb2RlIGlzIHJlYWNoYWJsZSBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgYnkgZW11bGF0aW5nIGEgVVNCIG5ldHdvcmsgYWRhcHRlciB0aGF0IHJlZ2lzdGVycyBhbiBNRElPIGJ1cyBhbmQgcmVzcG9uZHMgd2l0aCB0aGUgUlRMODI2MUMgUEhZIElELiBUaGUgZmlybXdhcmUgcGFyc2luZyBsb2dpYyBpcyBwYXJ0aWN1bGFybHkgaW50ZXJlc3RpbmcgZm9yIGZ1enppbmcgYXMgaXQgcHJvY2Vzc2VzIGV4dGVybmFsIGRhdGEuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmVcbmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHlcbnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuXG5cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6XG4tIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuXG4tIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLlxuLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuXG4tIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSxcbmV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cblxuSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaFxudG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuXG5cbldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOlxuMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy5cbiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBEbyBub3QgbGlzdCB0b28gZ2VuZXJpYyBjb25maWdzICh3ZSBhbHJlYWR5IGhhdmUgdGhlbSBlbmFibGVkKS4gT25seSBsaXN0IHRob3NlIHRoYXRcbiAgIHNwZWNpZmljYWxseSBjb3ZlciB0aGUgbW9kaWZpZWQgY29kZS4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzIG91dHB1dCBhcnJheSxcbiAgIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgMDYxZDNmNzMxNGQ0ZjJiMDI2ZWE1MTBiZjgxMWFlZjJiNWE3OWZlZVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBGcmkgSnVsIDMgMDc6MzU6MDQgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9waHkvcGh5LWM0NS5jIGIvZHJpdmVycy9uZXQvcGh5L3BoeS1jNDUuY1xuaW5kZXggMTI2OTUxNzQxNDI4OGYuLjg3MDkyMDMxMWY5YTAxIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvcGh5L3BoeS1jNDUuY1xuKysrIGIvZHJpdmVycy9uZXQvcGh5L3BoeS1jNDUuY1xuQEAgLTM4NCw2ICszODQsMTE5IEBAIGludCBnZW5waHlfYzQ1X2NoZWNrX2FuZF9yZXN0YXJ0X2FuZWcoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldiwgYm9vbCByZXN0YXJ0KVxuIH1cbiBFWFBPUlRfU1lNQk9MX0dQTChnZW5waHlfYzQ1X2NoZWNrX2FuZF9yZXN0YXJ0X2FuZWcpO1xuIFxuKy8qKlxuKyAqIGdlbnBoeV9jNDVfcG1hX3NvZnRfcmVzZXQgLSBzb2Z0d2FyZSByZXNldCB0aGUgUEhZIHZpYSBDbGF1c2UgNDUgUE1BL1BNRCBjb250cm9sIHJlZ2lzdGVyXG4rICogQHBoeWRldjogdGFyZ2V0IHBoeV9kZXZpY2Ugc3RydWN0XG4rICpcbisgKiBSZXR1cm46IDAgb24gc3VjY2VzcywgbmVnYXRpdmUgZXJybm8gb24gZmFpbHVyZS5cbisgKi9cbitpbnQgZ2VucGh5X2M0NV9wbWFfc29mdF9yZXNldChzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxuK3tcbitcdGludCByZXQsIHZhbDtcbitcbitcdHJldCA9IHBoeV9zZXRfYml0c19tbWQocGh5ZGV2LCBNRElPX01NRF9QTUFQTUQsIE1ESU9fQ1RSTDEsXG4rXHRcdFx0ICAgICAgIE1ESU9fQ1RSTDFfUkVTRVQpO1xuK1x0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0cmV0dXJuIHJldDtcbitcbitcdHJldHVybiBwaHlfcmVhZF9tbWRfcG9sbF90aW1lb3V0KHBoeWRldiwgTURJT19NTURfUE1BUE1ELFxuK1x0XHRcdFx0XHQgTURJT19DVFJMMSwgdmFsLFxuK1x0XHRcdFx0XHQgISh2YWwgXHUwMDI2IE1ESU9fQ1RSTDFfUkVTRVQpLFxuK1x0XHRcdFx0XHQgNTAwMCwgNjAwMDAwLCB0cnVlKTtcbit9XG4rRVhQT1JUX1NZTUJPTF9HUEwoZ2VucGh5X2M0NV9wbWFfc29mdF9yZXNldCk7XG4rXG4rLyoqXG4rICogZ2VucGh5X2M0NV9hbl9zZXR1cF9tYXN0ZXJfc2xhdmUgLSBDb25maWd1cmUgTWFzdGVyL1NsYXZlIHNldHRpbmcgZm9yIEM0NSBQSFlzXG4rICogQHBoeWRldjogdGFyZ2V0IHBoeV9kZXZpY2Ugc3RydWN0XG4rICpcbisgKiBEZXNjcmlwdGlvbjogQ29uZmlndXJlIHRoZSBmb3JjZWQgb3IgcHJlZmVycmVkIE1hc3Rlci9TbGF2ZSByb2xlXG4rICogMTBHQkFTRS1UIGNvbnRyb2wgcmVnaXN0ZXIgKE1NRCA3LCBSZWdpc3RlciAweDAwMjApIGFjY29yZGluZyB0b1xuKyAqIElFRUUgODAyLjMgc3RhbmRhcmRzLlxuKyAqXG4rICogUmV0dXJuOiBuZWdhdGl2ZSBlcnJubyBjb2RlIG9uIGZhaWx1cmUsIDAgaWYgTWFzdGVyL1NsYXZlIGRpZG4ndCBjaGFuZ2UsXG4rICogb3IgMSBpZiBNYXN0ZXIvU2xhdmUgbW9kZXMgY2hhbmdlZC5cbisgKi9cbitzdGF0aWMgaW50IGdlbnBoeV9jNDVfYW5fc2V0dXBfbWFzdGVyX3NsYXZlKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXG4re1xuK1x0dTE2IGN0bCA9IDA7XG4rXG4rXHRzd2l0Y2ggKHBoeWRldi1cdTAwM2VtYXN0ZXJfc2xhdmVfc2V0KSB7XG4rXHRjYXNlIE1BU1RFUl9TTEFWRV9DRkdfTUFTVEVSX1BSRUZFUlJFRDpcbitcdFx0Y3RsID0gTURJT19BTl8xMEdCVF9DVFJMX01TX1BPUlRfVFlQRTtcbitcdFx0YnJlYWs7XG4rXHRjYXNlIE1BU1RFUl9TTEFWRV9DRkdfU0xBVkVfUFJFRkVSUkVEOlxuK1x0XHRicmVhaztcbitcdGNhc2UgTUFTVEVSX1NMQVZFX0NGR19NQVNURVJfRk9SQ0U6XG4rXHRcdGN0bCA9IE1ESU9fQU5fMTBHQlRfQ1RSTF9NU19FTkFCTEUgfCBNRElPX0FOXzEwR0JUX0NUUkxfTVNfVkFMVUU7XG4rXHRcdGJyZWFrO1xuK1x0Y2FzZSBNQVNURVJfU0xBVkVfQ0ZHX1NMQVZFX0ZPUkNFOlxuK1x0XHRjdGwgPSBNRElPX0FOXzEwR0JUX0NUUkxfTVNfRU5BQkxFO1xuK1x0XHRicmVhaztcbitcdGNhc2UgTUFTVEVSX1NMQVZFX0NGR19VTktOT1dOOlxuK1x0Y2FzZSBNQVNURVJfU0xBVkVfQ0ZHX1VOU1VQUE9SVEVEOlxuK1x0XHRyZXR1cm4gMDtcbitcdGRlZmF1bHQ6XG4rXHRcdHBoeWRldl93YXJuKHBoeWRldiwgXCJVbnN1cHBvcnRlZCBNYXN0ZXIvU2xhdmUgbW9kZVxcblwiKTtcbitcdFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xuK1x0fVxuK1xuK1x0cmV0dXJuIHBoeV9tb2RpZnlfbW1kX2NoYW5nZWQocGh5ZGV2LCBNRElPX01NRF9BTiwgTURJT19BTl8xMEdCVF9DVFJMLFxuK1x0XHRcdFx0ICAgICAgTURJT19BTl8xMEdCVF9DVFJMX01TX0VOQUJMRSB8XG4rXHRcdFx0XHQgICAgICBNRElPX0FOXzEwR0JUX0NUUkxfTVNfVkFMVUUgfFxuK1x0XHRcdFx0ICAgICAgTURJT19BTl8xMEdCVF9DVFJMX01TX1BPUlRfVFlQRSwgY3RsKTtcbit9XG4rXG4rLyoqXG4rICogZ2VucGh5X2M0NV9yZWFkX21hc3Rlcl9zbGF2ZSAtIHJlYWQgbWFzdGVyL3NsYXZlIHN0YXR1c1xuKyAqIEBwaHlkZXY6IHRhcmdldCBwaHlfZGV2aWNlIHN0cnVjdFxuKyAqXG4rICogRGVzY3JpcHRpb246IFJlYWQgdGhlIE1hc3Rlci9TbGF2ZSBjb25maWd1cmF0aW9uIGFuZCBzdGF0dXNcbisgKiBmcm9tIDEwR0JBU0UtVCBjb250cm9sL3N0YXR1cyByZWdpc3RlcnMgKE1NRCA3LCBSZWcgMHgwMDIwIGFuZCAweDAwMjEpLlxuKyAqXG4rICogUmV0dXJuOiAwIG9uIHN1Y2Nlc3MsIG9yIGEgbmVnYXRpdmUgZXJyb3IgY29kZSBvbiBmYWlsdXJlLlxuKyAqL1xuK3N0YXRpYyBpbnQgZ2VucGh5X2M0NV9yZWFkX21hc3Rlcl9zbGF2ZShzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxuK3tcbitcdGludCB2YWw7XG4rXG4rXHRwaHlkZXYtXHUwMDNlbWFzdGVyX3NsYXZlX2dldCA9IE1BU1RFUl9TTEFWRV9DRkdfVU5LTk9XTjtcbitcdHBoeWRldi1cdTAwM2VtYXN0ZXJfc2xhdmVfc3RhdGUgPSBNQVNURVJfU0xBVkVfU1RBVEVfVU5LTk9XTjtcbitcbitcdHZhbCA9IHBoeV9yZWFkX21tZChwaHlkZXYsIE1ESU9fTU1EX0FOLCBNRElPX0FOXzEwR0JUX0NUUkwpO1xuK1x0aWYgKHZhbCBcdTAwM2MgMClcbitcdFx0cmV0dXJuIHZhbDtcbitcbitcdGlmICh2YWwgXHUwMDI2IE1ESU9fQU5fMTBHQlRfQ1RSTF9NU19FTkFCTEUpIHtcbitcdFx0aWYgKHZhbCBcdTAwMjYgTURJT19BTl8xMEdCVF9DVFJMX01TX1ZBTFVFKVxuK1x0XHRcdHBoeWRldi1cdTAwM2VtYXN0ZXJfc2xhdmVfZ2V0ID0gTUFTVEVSX1NMQVZFX0NGR19NQVNURVJfRk9SQ0U7XG4rXHRcdGVsc2VcbitcdFx0XHRwaHlkZXYtXHUwMDNlbWFzdGVyX3NsYXZlX2dldCA9IE1BU1RFUl9TTEFWRV9DRkdfU0xBVkVfRk9SQ0U7XG4rXHR9IGVsc2Uge1xuK1x0XHRpZiAodmFsIFx1MDAyNiBNRElPX0FOXzEwR0JUX0NUUkxfTVNfUE9SVF9UWVBFKVxuK1x0XHRcdHBoeWRldi1cdTAwM2VtYXN0ZXJfc2xhdmVfZ2V0ID0gTUFTVEVSX1NMQVZFX0NGR19NQVNURVJfUFJFRkVSUkVEO1xuK1x0XHRlbHNlXG4rXHRcdFx0cGh5ZGV2LVx1MDAzZW1hc3Rlcl9zbGF2ZV9nZXQgPSBNQVNURVJfU0xBVkVfQ0ZHX1NMQVZFX1BSRUZFUlJFRDtcbitcdH1cbitcbitcdHZhbCA9IHBoeV9yZWFkX21tZChwaHlkZXYsIE1ESU9fTU1EX0FOLCBNRElPX0FOXzEwR0JUX1NUQVQpO1xuK1x0aWYgKHZhbCBcdTAwM2MgMClcbitcdFx0cmV0dXJuIHZhbDtcbitcbitcdGlmICh2YWwgXHUwMDI2IE1ESU9fQU5fMTBHQlRfU1RBVF9NU19GQVVMVCkge1xuK1x0XHRwaHlkZXYtXHUwMDNlbWFzdGVyX3NsYXZlX3N0YXRlID0gTUFTVEVSX1NMQVZFX1NUQVRFX0VSUjtcbitcdH0gZWxzZSBpZiAocGh5ZGV2LVx1MDAzZWxpbmspIHtcbitcdFx0aWYgKHZhbCBcdTAwMjYgTURJT19BTl8xMEdCVF9TVEFUX01TX1JFUylcbitcdFx0XHRwaHlkZXYtXHUwMDNlbWFzdGVyX3NsYXZlX3N0YXRlID0gTUFTVEVSX1NMQVZFX1NUQVRFX01BU1RFUjtcbitcdFx0ZWxzZVxuK1x0XHRcdHBoeWRldi1cdTAwM2VtYXN0ZXJfc2xhdmVfc3RhdGUgPSBNQVNURVJfU0xBVkVfU1RBVEVfU0xBVkU7XG4rXHR9IGVsc2Uge1xuK1x0XHRwaHlkZXYtXHUwMDNlbWFzdGVyX3NsYXZlX3N0YXRlID0gTUFTVEVSX1NMQVZFX1NUQVRFX1VOS05PV047XG4rXHR9XG4rXG4rXHRyZXR1cm4gMDtcbit9XG4rXG4gLyoqXG4gICogZ2VucGh5X2M0NV9hbmVnX2RvbmUgLSByZXR1cm4gYXV0by1uZWdvdGlhdGlvbiBjb21wbGV0ZSBzdGF0dXNcbiAgKiBAcGh5ZGV2OiB0YXJnZXQgcGh5X2RldmljZSBzdHJ1Y3RcbkBAIC0xMTkyLDYgKzEzMDUsMTAgQEAgaW50IGdlbnBoeV9jNDVfcmVhZF9zdGF0dXMoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcbiBcdFx0XHRyZXQgPSBnZW5waHlfYzQ1X2Jhc2V0MV9yZWFkX3N0YXR1cyhwaHlkZXYpO1xuIFx0XHRcdGlmIChyZXQgXHUwMDNjIDApXG4gXHRcdFx0XHRyZXR1cm4gcmV0O1xuK1x0XHR9IGVsc2Uge1xuK1x0XHRcdHJldCA9IGdlbnBoeV9jNDVfcmVhZF9tYXN0ZXJfc2xhdmUocGh5ZGV2KTtcbitcdFx0XHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRcdFx0cmV0dXJuIHJldDtcbiBcdFx0fVxuIFxuIFx0XHRwaHlfcmVzb2x2ZV9hbmVnX2xpbmttb2RlKHBoeWRldik7XG5AQCAtMTIyNSw2ICsxMzQyLDE0IEBAIGludCBnZW5waHlfYzQ1X2NvbmZpZ19hbmVnKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXG4gXHRpZiAocmV0IFx1MDAzZSAwKVxuIFx0XHRjaGFuZ2VkID0gdHJ1ZTtcbiBcbitcdGlmICghZ2VucGh5X2M0NV9iYXNldDFfYWJsZShwaHlkZXYpKSB7XG4rXHRcdHJldCA9IGdlbnBoeV9jNDVfYW5fc2V0dXBfbWFzdGVyX3NsYXZlKHBoeWRldik7XG4rXHRcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdFx0cmV0dXJuIHJldDtcbitcdFx0aWYgKHJldCBcdTAwM2UgMClcbitcdFx0XHRjaGFuZ2VkID0gdHJ1ZTtcbitcdH1cbitcbiBcdHJldHVybiBnZW5waHlfYzQ1X2NoZWNrX2FuZF9yZXN0YXJ0X2FuZWcocGh5ZGV2LCBjaGFuZ2VkKTtcbiB9XG4gRVhQT1JUX1NZTUJPTF9HUEwoZ2VucGh5X2M0NV9jb25maWdfYW5lZyk7XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvcGh5L3JlYWx0ZWsvcmVhbHRla19tYWluLmMgYi9kcml2ZXJzL25ldC9waHkvcmVhbHRlay9yZWFsdGVrX21haW4uY1xuaW5kZXggMjcyNjg4MTFmNTY0ZjIuLjY4YTJkZTBiMmJkM2JhIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvcGh5L3JlYWx0ZWsvcmVhbHRla19tYWluLmNcbisrKyBiL2RyaXZlcnMvbmV0L3BoeS9yZWFsdGVrL3JlYWx0ZWtfbWFpbi5jXG5AQCAtOCw3ICs4LDkgQEBcbiAgKiBDb3B5cmlnaHQgKGMpIDIwMDQgRnJlZXNjYWxlIFNlbWljb25kdWN0b3IsIEluYy5cbiAgKi9cbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9iaXRvcHMuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L2NyYzMyLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9ldGh0b29sX25ldGxpbmsuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L2Zpcm13YXJlLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9vZi5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvcGh5LmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9wbV93YWtlaXJxLmhcdTAwM2VcbkBAIC0xNDEsNiArMTQzLDEwIEBAXG4gI2RlZmluZSBSVEw4MjExRl9QSFlTSUNBTF9BRERSX1dPUkQxXHRcdDE3XG4gI2RlZmluZSBSVEw4MjExRl9QSFlTSUNBTF9BRERSX1dPUkQyXHRcdDE4XG4gXG4rI2RlZmluZSBSVEw4MjYxWF9FWFRfQUREUl9SRUdcdFx0XHQweGE0MzZcbisjZGVmaW5lIFJUTDgyNjFYX0VYVF9EQVRBX1JFR1x0XHRcdDB4YTQzOFxuKyNkZWZpbmUgUlRMXzgyNjFYX1NVQl9QSFlfSURfQUREUlx0XHQweDgwMWRcbitcbiAjZGVmaW5lIFJUTDgyMlhfVk5EMV9TRVJERVNfT1BUSU9OXHRcdFx0MHg2OTdhXG4gI2RlZmluZSBSVEw4MjJYX1ZORDFfU0VSREVTX09QVElPTl9NT0RFX01BU0tcdFx0R0VOTUFTSyg1LCAwKVxuICNkZWZpbmUgUlRMODIyWF9WTkQxX1NFUkRFU19PUFRJT05fTU9ERV8yNTAwQkFTRVhfU0dNSUlcdFx0MFxuQEAgLTI1MSw2ICsyNTcsNjkgQEBcbiAjZGVmaW5lIFJUTF84MjIxQl9WTV9DR1x0XHRcdFx0MHgwMDFjYzg0YVxuICNkZWZpbmUgUlRMXzgyNTFCXHRcdFx0XHQweDAwMWNjODYyXG4gI2RlZmluZSBSVExfODI2MUNcdFx0XHRcdDB4MDAxY2M4OTBcbisjZGVmaW5lIFJUTF84MjYxQ19DR1x0XHRcdFx0MHgwMDFjYzg5OFxuK1xuKyNkZWZpbmUgUlRMODI2MUNfQ0VfTU9ERUxcdFx0MHgwMFxuKyNkZWZpbmUgUlRMODI2MVhfSU5UX0FVVE9ORUdfRVJST1JcdEJJVCgwKVxuKyNkZWZpbmUgUlRMODI2MVhfSU5UX1BBR0VfUkVDVlx0XHRCSVQoMilcbisjZGVmaW5lIFJUTDgyNjFYX0lOVF9BVVRPTkVHX0RPTkVcdEJJVCgzKVxuKyNkZWZpbmUgUlRMODI2MVhfSU5UX0xJTktfQ0hHXHRcdEJJVCg0KVxuKyNkZWZpbmUgUlRMODI2MVhfSU5UX1BIWV9SRUdfQUNDRVNTXHRCSVQoNSlcbisjZGVmaW5lIFJUTDgyNjFYX0lOVF9QTUVcdFx0QklUKDcpXG4rI2RlZmluZSBSVEw4MjYxWF9JTlRfQUxEUFNfQ0hHXHRcdEJJVCg5KVxuKyNkZWZpbmUgUlRMODI2MVhfSU5UX0pBQkJFUlx0XHRCSVQoMTApXG4rXG4rI2RlZmluZSBSVEw4MjYxWF9JTlRfTUFTS19ERUZBVUxUXHQoUlRMODI2MVhfSU5UX0FVVE9ORUdfRE9ORSB8IFxcXG4rXHRcdFx0XHRcdCBSVEw4MjYxWF9JTlRfTElOS19DSEcgfCBcXFxuK1x0XHRcdFx0XHQgUlRMODI2MVhfSU5UX0FVVE9ORUdfRVJST1IgfCBcXFxuK1x0XHRcdFx0XHQgUlRMODI2MVhfSU5UX0pBQkJFUilcbitcbisjZGVmaW5lIFJUTDgyNjFYX0lOVF9NQVNLX0FMTFx0XHQoUlRMODI2MVhfSU5UX0FVVE9ORUdfRVJST1IgfCBcXFxuK1x0XHRcdFx0XHQgUlRMODI2MVhfSU5UX1BBR0VfUkVDViB8IFxcXG4rXHRcdFx0XHRcdCBSVEw4MjYxWF9JTlRfQVVUT05FR19ET05FIHwgXFxcbitcdFx0XHRcdFx0IFJUTDgyNjFYX0lOVF9MSU5LX0NIRyB8IFxcXG4rXHRcdFx0XHRcdCBSVEw4MjYxWF9JTlRfUEhZX1JFR19BQ0NFU1MgfCBcXFxuK1x0XHRcdFx0XHQgUlRMODI2MVhfSU5UX1BNRSB8IFxcXG4rXHRcdFx0XHRcdCBSVEw4MjYxWF9JTlRfQUxEUFNfQ0hHIHwgXFxcbitcdFx0XHRcdFx0IFJUTDgyNjFYX0lOVF9KQUJCRVIpXG4rXG4rI2RlZmluZSBGV19NQUlOX01BR0lDXHRcdFx0MHg1MjU0NEMzOFxuKyNkZWZpbmUgRldfU1VCX01BR0lDXzgyNjFDXHRcdDB4MzIzNjMxNDNcbisjZGVmaW5lIFJUTDgyNjFYX1BPTExfVElNRU9VVF9NU1x0MTAwXG4rI2RlZmluZSBSVEw4MjYxWF9NQVhfTU1EX0RFVlx0XHQzMVxuK1xuKyNkZWZpbmUgUlRMODI2MUNfQ0VfRldfTkFNRVx0XCJydGxfbmljL3J0bDgyNjFjLmJpblwiXG4rTU9EVUxFX0ZJUk1XQVJFKFJUTDgyNjFDX0NFX0ZXX05BTUUpO1xuK1xuK2VudW0gcnRsODI2MXhfZndfb3Age1xuK1x0T1BfV1JJVEUgPSAweDAwLFx0LyogV3JpdGUgKi9cbitcdE9QX1BPTEwgID0gMHgwMixcdC8qIFBvbGxpbmcgKi9cbit9O1xuK1xuK3N0cnVjdCBydGw4MjYxeF9md19oZWFkZXIge1xuK1x0X19sZTMyIG1haW5fbWFnaWM7XHQvKiBNYWluIG1hZ2ljIG51bWJlciAqL1xuK1x0X19sZTMyIHN1Yl9tYWdpYztcdC8qIFN1YiBtYWdpYyBudW1iZXIgKi9cbitcdF9fbGUxNiB2ZXJzaW9uX21ham9yO1x0LyogTWFqb3IgdmVyc2lvbiAqL1xuK1x0X19sZTE2IHZlcnNpb25fbWlub3I7XHQvKiBNaW5vciB2ZXJzaW9uICovXG4rXHRfX2xlMTYgbnVtX2VudHJpZXM7XHQvKiBOdW1iZXIgb2YgZW50cmllcyAqL1xuK1x0X19sZTE2IHJlc2VydmVkO1x0LyogUmVzZXJ2ZWQgKi9cbitcdF9fbGUzMiBjcmMzMjtcdFx0LyogQ1JDMzIgY2hlY2tzdW0gKi9cbit9O1xuK1xuK3N0cnVjdCBydGw4MjYxeF9md19lbnRyeSB7XG4rXHRfX3U4ICB0eXBlO1x0XHQvKiBPcGVyYXRpb24gdHlwZSAoT1BfKikgKi9cbitcdF9fdTggIGRldjtcdFx0LyogTU1EIGRldmljZSAqL1xuK1x0X19sZTE2IGFkZHI7XHRcdC8qIFJlZ2lzdGVyIGFkZHJlc3MgKi9cbitcdF9fdTggIG1zYjtcdFx0LyogTVNCIGJpdCBwb3NpdGlvbiAqL1xuK1x0X191OCAgbHNiO1x0XHQvKiBMU0IgYml0IHBvc2l0aW9uICovXG4rXHRfX2xlMTYgdmFsdWU7XHRcdC8qIFZhbHVlIHRvIHdyaXRlL2NvbXBhcmUgKi9cbitcdF9fbGUxNiB0aW1lb3V0X21zO1x0LyogUG9sbCB0aW1lb3V0IGluIG1pbGxpc2Vjb25kcyAqL1xuK1x0X191OCAgcG9sbF9zZXQ7XHRcdC8qIFBvbGwgdW50aWwgZXF1YWwgKDEpIG9yIG5vdCBlcXVhbCAoMCkgKi9cbitcdF9fdTggIHJlc2VydmVkO1x0XHQvKiBSZXNlcnZlZCAqL1xuK307XG4rXG4rI2RlZmluZSBGV19IRUFERVJfU0laRVx0XHRzaXplb2Yoc3RydWN0IHJ0bDgyNjF4X2Z3X2hlYWRlcilcbisjZGVmaW5lIEZXX0VOVFJZX1NJWkVcdFx0c2l6ZW9mKHN0cnVjdCBydGw4MjYxeF9md19lbnRyeSlcbiBcbiAvKiBSVEw4MjExRSBhbmQgUlRMODIxMUYgc3VwcG9ydCB1cCB0byB0aHJlZSBMRURzICovXG4gI2RlZmluZSBSVEw4MjExeF9MRURfQ09VTlRcdFx0XHQzXG5AQCAtMjcwLDYgKzMzOSwxMSBAQCBzdHJ1Y3QgcnRsODIxeF9wcml2IHtcbiBcdHUxNiBpbmVyO1xuIH07XG4gXG4rc3RydWN0IHJ0bDgyNjF4X3ByaXYge1xuK1x0Y29uc3QgY2hhciAqZndfbmFtZTtcbitcdGJvb2wgZndfbG9hZGVkO1xuK307XG4rXG4gc3RhdGljIGludCBydGw4MjF4X3JlYWRfcGFnZShzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxuIHtcbiBcdHJldHVybiBfX3BoeV9yZWFkKHBoeWRldiwgUlRMODIxeF9QQUdFX1NFTEVDVCk7XG5AQCAtMzEwLDYgKzM4NCwzMjUgQEAgc3RhdGljIGludCBydGw4MjF4X21vZGlmeV9leHRfcGFnZShzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2LCB1MTYgZXh0X3BhZ2UsXG4gXHRyZXR1cm4gcGh5X3Jlc3RvcmVfcGFnZShwaHlkZXYsIG9sZHBhZ2UsIHJldCk7XG4gfVxuIFxuK3N0YXRpYyBpbnQgcnRsODI2MXhfcHJvYmUoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcbit7XG4rXHRzdHJ1Y3QgZGV2aWNlICpkZXYgPSBcdTAwMjZwaHlkZXYtXHUwMDNlbWRpby5kZXY7XG4rXHRzdHJ1Y3QgcnRsODI2MXhfcHJpdiAqcHJpdjtcbitcdGludCBzdWJfcGh5X2lkLCByZXQ7XG4rXG4rXHRwcml2ID0gZGV2bV9remFsbG9jKGRldiwgc2l6ZW9mKCpwcml2KSwgR0ZQX0tFUk5FTCk7XG4rXHRpZiAoIXByaXYpXG4rXHRcdHJldHVybiAtRU5PTUVNO1xuK1xuK1x0cGh5ZGV2LVx1MDAzZXByaXYgPSBwcml2O1xuK1xuK1x0cmV0ID0gcGh5X3dyaXRlX21tZChwaHlkZXYsIE1ESU9fTU1EX1ZFTkQyLCBSVEw4MjYxWF9FWFRfQUREUl9SRUcsXG4rXHRcdFx0ICAgIFJUTF84MjYxWF9TVUJfUEhZX0lEX0FERFIpO1xuK1x0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0cmV0dXJuIHJldDtcbitcbitcdHJldCA9IHBoeV9yZWFkX21tZChwaHlkZXYsIE1ESU9fTU1EX1ZFTkQyLCBSVEw4MjYxWF9FWFRfREFUQV9SRUcpO1xuK1x0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0cmV0dXJuIHJldDtcbitcbitcdHN1Yl9waHlfaWQgPSAocmV0IFx1MDAzZVx1MDAzZSA4KSBcdTAwMjYgMHhmZjtcbitcbitcdHN3aXRjaCAoc3ViX3BoeV9pZCkge1xuK1x0Y2FzZSBSVEw4MjYxQ19DRV9NT0RFTDpcbitcdFx0cHJpdi1cdTAwM2Vmd19uYW1lID0gUlRMODI2MUNfQ0VfRldfTkFNRTtcbitcdFx0cGh5ZGV2X2luZm8ocGh5ZGV2LCBcIlJUTDgyNjFDIGRldGVjdGVkIChzdWJfaWQgMHglMDJ4KVxcblwiLCBzdWJfcGh5X2lkKTtcbitcdFx0YnJlYWs7XG4rXG4rXHRkZWZhdWx0OlxuK1x0XHRwaHlkZXZfd2FybihwaHlkZXYsIFwiVW5rbm93biBzdWJfaWQgMHglMDJ4LCBkZWZhdWx0IGJlaGF2aW9yXFxuXCIsIHN1Yl9waHlfaWQpO1xuK1x0XHRyZXR1cm4gLUVOT0RFVjtcbitcdH1cbitcbitcdHJldHVybiAwO1xuK31cbitcbitzdGF0aWMgaW50IHJ0bDgyNjF4X2dldF9mZWF0dXJlcyhzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxuK3tcbitcdGludCByZXQ7XG4rXG4rXHRyZXQgPSBnZW5waHlfYzQ1X3BtYV9yZWFkX2FiaWxpdGllcyhwaHlkZXYpO1xuK1x0aWYgKHJldClcbitcdFx0cmV0dXJuIHJldDtcbitcdC8qXG4rXHQgKiBTdXBwbGVtZW50IE11bHRpLUdpZyBzcGVlZHMgdGhhdCBtYXkgbm90IGJlIGF1dG9tYXRpY2FsbHkgZGV0ZWN0ZWRcbitcdCAqIFJUTDgyNjFYIHN1cHBvcnRzIDIuNUcvNUcgaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgMTBHXG4rXHQgKi9cbitcdGxpbmttb2RlX3NldF9iaXQoRVRIVE9PTF9MSU5LX01PREVfMjUwMGJhc2VUX0Z1bGxfQklULFxuK1x0XHRcdCBwaHlkZXYtXHUwMDNlc3VwcG9ydGVkKTtcbitcdGxpbmttb2RlX3NldF9iaXQoRVRIVE9PTF9MSU5LX01PREVfNTAwMGJhc2VUX0Z1bGxfQklULFxuK1x0XHRcdCBwaHlkZXYtXHUwMDNlc3VwcG9ydGVkKTtcbitcbitcdHJldHVybiAwO1xuK31cbitcbitzdGF0aWMgaW50IHJ0bDgyNjF4X3JlYWRfc3RhdHVzKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXG4re1xuK1x0aW50IHJldCwgdmFsID0gMDtcbitcbitcdGlmIChwaHlkZXYtXHUwMDNlYXV0b25lZyA9PSBBVVRPTkVHX0VOQUJMRSkge1xuK1x0XHRyZXQgPSBnZW5waHlfYzQ1X2FuZWdfZG9uZShwaHlkZXYpO1xuK1x0XHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRcdHJldHVybiByZXQ7XG4rXG4rXHRcdGlmIChyZXQpIHtcbitcdFx0XHR2YWwgPSBwaHlfcmVhZF9tbWQocGh5ZGV2LCBNRElPX01NRF9WRU5EMixcbitcdFx0XHRcdFx0ICAgUlRMODIyWF9WTkQyX0MyMl9SRUcoTUlJX1NUQVQxMDAwKSk7XG4rXHRcdFx0aWYgKHZhbCBcdTAwM2MgMClcbitcdFx0XHRcdHJldHVybiB2YWw7XG4rXHRcdH1cbitcdH1cbitcbitcdG1paV9zdGF0MTAwMF9tb2RfbGlua21vZGVfbHBhX3QocGh5ZGV2LVx1MDAzZWxwX2FkdmVydGlzaW5nLCB2YWwpO1xuK1xuK1x0cmV0ID0gZ2VucGh5X2M0NV9yZWFkX3N0YXR1cyhwaHlkZXYpO1xuK1x0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0cmV0dXJuIHJldDtcbitcbitcdHJldHVybiAwO1xuK31cbitcbitzdGF0aWMgaW50IHJ0bDgyNjF4X3ZlcmlmeV9maXJtd2FyZShzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2LCBjb25zdCBzdHJ1Y3QgZmlybXdhcmUgKmZ3KVxuK3tcbitcdGNvbnN0IHN0cnVjdCBydGw4MjYxeF9md19oZWFkZXIgKmhkcjtcbitcdHUzMiBtYWluX21hZ2ljLCBzdWJfbWFnaWM7XG4rXHR1MzIgY2FsY19jcmMsIGZpbGVfY3JjO1xuK1x0c2l6ZV90IGRhdGFfbGVuO1xuK1x0dTE2IG51bV9lbnRyaWVzO1xuK1xuK1x0aWYgKGZ3LVx1MDAzZXNpemUgXHUwMDNjIEZXX0hFQURFUl9TSVpFKSB7XG4rXHRcdHBoeWRldl9lcnIocGh5ZGV2LCBcIkZpcm13YXJlIHRvbyBzbWFsbDogJXp1IGJ5dGVzXFxuXCIsIGZ3LVx1MDAzZXNpemUpO1xuK1x0XHRyZXR1cm4gLUVJTlZBTDtcbitcdH1cbitcbitcdGhkciA9IChjb25zdCBzdHJ1Y3QgcnRsODI2MXhfZndfaGVhZGVyICopZnctXHUwMDNlZGF0YTtcbitcbitcdG1haW5fbWFnaWMgPSBsZTMyX3RvX2NwdShoZHItXHUwMDNlbWFpbl9tYWdpYyk7XG4rXHRpZiAobWFpbl9tYWdpYyAhPSBGV19NQUlOX01BR0lDKSB7XG4rXHRcdHBoeWRldl9lcnIocGh5ZGV2LCBcIkludmFsaWQgZmlybXdhcmUgbWFnaWM6IDB4JTA4eFxcblwiLCBtYWluX21hZ2ljKTtcbitcdFx0cmV0dXJuIC1FSU5WQUw7XG4rXHR9XG4rXG4rXHRzdWJfbWFnaWMgPSBsZTMyX3RvX2NwdShoZHItXHUwMDNlc3ViX21hZ2ljKTtcbitcdGlmIChzdWJfbWFnaWMgIT0gRldfU1VCX01BR0lDXzgyNjFDKSB7XG4rXHRcdHBoeWRldl9lcnIocGh5ZGV2LCBcIkludmFsaWQgc3ViIG1hZ2ljOiAweCUwOHhcXG5cIiwgc3ViX21hZ2ljKTtcbitcdFx0cmV0dXJuIC1FSU5WQUw7XG4rXHR9XG4rXG4rXHRudW1fZW50cmllcyA9IGxlMTZfdG9fY3B1KGhkci1cdTAwM2VudW1fZW50cmllcyk7XG4rXHRkYXRhX2xlbiA9IG51bV9lbnRyaWVzICogRldfRU5UUllfU0laRTtcbitcbitcdGlmIChmdy1cdTAwM2VzaXplICE9IHNpemVvZigqaGRyKSArIGRhdGFfbGVuKSB7XG4rXHRcdHBoeWRldl9lcnIocGh5ZGV2LCBcIkZpcm13YXJlIHNpemUgbWlzbWF0Y2hcXG5cIik7XG4rXHRcdHJldHVybiAtRUlOVkFMO1xuK1x0fVxuK1xuK1x0Y2FsY19jcmMgPSBjcmMzMih+MCwgZnctXHUwMDNlZGF0YSArIEZXX0hFQURFUl9TSVpFLCBkYXRhX2xlbikgXiB+MDtcbitcdGZpbGVfY3JjID0gbGUzMl90b19jcHUoaGRyLVx1MDAzZWNyYzMyKTtcbitcbitcdGlmIChjYWxjX2NyYyAhPSBmaWxlX2NyYykge1xuK1x0XHRwaHlkZXZfZXJyKHBoeWRldiwgXCJDUkMzMiBtaXNtYXRjaDogY2FsY3VsYXRlZD0weCUwOHggZmlsZT0weCUwOHhcXG5cIixcbitcdFx0XHQgICBjYWxjX2NyYywgZmlsZV9jcmMpO1xuK1x0XHRyZXR1cm4gLUVJTlZBTDtcbitcdH1cbitcbitcdHJldHVybiAwO1xuK31cbitcbitzdGF0aWMgaW50IHJ0bDgyNjF4X2Z3X2V4ZWN1dGVfZW50cnkoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldixcbitcdFx0XHRcdCAgICAgY29uc3Qgc3RydWN0IHJ0bDgyNjF4X2Z3X2VudHJ5ICplbnRyeSlcbit7XG4rXHR1MTYgYWRkciwgdmFsdWUsIHRpbWVvdXRfbXM7XG4rXHR1OCBkZXYsIG1zYiwgbHNiLCBwb2xsX3NldDtcbitcdHUzMiBiaXRzLCBleHBlY3RfdmFsO1xuK1x0aW50IHJldCwgdmFsO1xuK1xuK1x0ZGV2ID0gZW50cnktXHUwMDNlZGV2O1xuK1x0YWRkciA9IGxlMTZfdG9fY3B1KGVudHJ5LVx1MDAzZWFkZHIpO1xuK1x0bXNiID0gZW50cnktXHUwMDNlbXNiO1xuK1x0bHNiID0gZW50cnktXHUwMDNlbHNiO1xuK1x0dmFsdWUgPSBsZTE2X3RvX2NwdShlbnRyeS1cdTAwM2V2YWx1ZSk7XG4rXHR0aW1lb3V0X21zID0gbGUxNl90b19jcHUoZW50cnktXHUwMDNldGltZW91dF9tcyk7XG4rXHRwb2xsX3NldCA9IGVudHJ5LVx1MDAzZXBvbGxfc2V0O1xuK1xuK1x0aWYgKHRpbWVvdXRfbXMgPT0gMClcbitcdFx0dGltZW91dF9tcyA9IFJUTDgyNjFYX1BPTExfVElNRU9VVF9NUztcbitcbitcdGlmIChkZXYgXHUwMDNlIFJUTDgyNjFYX01BWF9NTURfREVWKSB7XG4rXHRcdHBoeWRldl9lcnIocGh5ZGV2LCBcImludmFsaWQgZmlybXdhcmUgTU1EIGRldmljZTogZGV2PSV1XFxuXCIsIGRldik7XG4rXHRcdHJldHVybiAtRUlOVkFMO1xuK1x0fVxuK1xuK1x0aWYgKG1zYiBcdTAwM2UgMTUgfHwgbHNiIFx1MDAzZSBtc2IpIHtcbitcdFx0cGh5ZGV2X2VycihwaHlkZXYsIFwiaW52YWxpZCBmaXJtd2FyZSBiaXRzOiBtc2I9JXUsIGxzYj0ldVxcblwiLCBtc2IsIGxzYik7XG4rXHRcdHJldHVybiAtRUlOVkFMO1xuK1x0fVxuK1xuK1x0c3dpdGNoIChlbnRyeS1cdTAwM2V0eXBlKSB7XG4rXHRjYXNlIE9QX1dSSVRFOlxuK1x0XHRyZXQgPSBwaHlfbW9kaWZ5X21tZChwaHlkZXYsIGRldiwgYWRkcixcbitcdFx0XHRcdCAgICAgR0VOTUFTSyhtc2IsIGxzYiksICh2YWx1ZSBcdTAwM2NcdTAwM2MgbHNiKSBcdTAwMjYgR0VOTUFTSyhtc2IsIGxzYikpO1xuK1x0XHRpZiAocmV0KVxuK1x0XHRcdHJldHVybiByZXQ7XG4rXHRcdGJyZWFrO1xuK1xuK1x0Y2FzZSBPUF9QT0xMOlxuK1x0XHRiaXRzID0gR0VOTUFTSyhtc2IsIGxzYik7XG4rXHRcdGV4cGVjdF92YWwgPSAodmFsdWUgXHUwMDNjXHUwMDNjIGxzYikgXHUwMDI2IGJpdHM7XG4rXG4rXHRcdGlmIChwb2xsX3NldClcbitcdFx0XHRyZXQgPSBwaHlfcmVhZF9tbWRfcG9sbF90aW1lb3V0KHBoeWRldiwgZGV2LCBhZGRyLCB2YWwsXG4rXHRcdFx0XHRcdFx0XHQodmFsIFx1MDAyNiBiaXRzKSA9PSBleHBlY3RfdmFsLFxuK1x0XHRcdFx0XHRcdFx0MTAwMCwgdGltZW91dF9tcyAqIDEwMDAsIGZhbHNlKTtcbitcdFx0ZWxzZVxuK1x0XHRcdHJldCA9IHBoeV9yZWFkX21tZF9wb2xsX3RpbWVvdXQocGh5ZGV2LCBkZXYsIGFkZHIsIHZhbCxcbitcdFx0XHRcdFx0XHRcdCh2YWwgXHUwMDI2IGJpdHMpICE9IGV4cGVjdF92YWwsXG4rXHRcdFx0XHRcdFx0XHQxMDAwLCB0aW1lb3V0X21zICogMTAwMCwgZmFsc2UpO1xuK1x0XHRpZiAocmV0KVxuK1x0XHRcdHJldHVybiByZXQ7XG4rXHRcdGJyZWFrO1xuK1xuK1x0ZGVmYXVsdDpcbitcdFx0cmV0dXJuIC1FSU5WQUw7XG4rXHR9XG4rXG4rXHRyZXR1cm4gMDtcbit9XG4rXG4rc3RhdGljIGludCBydGw4MjYxeF9md19sb2FkKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXG4re1xuK1x0c3RydWN0IHJ0bDgyNjF4X3ByaXYgKnByaXYgPSBwaHlkZXYtXHUwMDNlcHJpdjtcbitcdGNvbnN0IHN0cnVjdCBydGw4MjYxeF9md19lbnRyeSAqZW50cnk7XG4rXHRjb25zdCBzdHJ1Y3QgcnRsODI2MXhfZndfaGVhZGVyICpoZHI7XG4rXHRjb25zdCBzdHJ1Y3QgZmlybXdhcmUgKmZ3O1xuK1x0aW50IHJldCwgaTtcbitcbitcdGlmICghcHJpdi1cdTAwM2Vmd19uYW1lKVxuK1x0XHRyZXR1cm4gMDtcbitcbitcdHJldCA9IHJlcXVlc3RfZmlybXdhcmUoXHUwMDI2ZncsIHByaXYtXHUwMDNlZndfbmFtZSwgXHUwMDI2cGh5ZGV2LVx1MDAzZW1kaW8uZGV2KTtcbitcdGlmIChyZXQpIHtcbitcdFx0cGh5ZGV2X2VycihwaHlkZXYsIFwiRmFpbGVkIHRvIGxvYWQgZmlybXdhcmUgJXM6ICVkXFxuXCIsIHByaXYtXHUwMDNlZndfbmFtZSwgcmV0KTtcbitcdFx0cmV0dXJuIHJldDtcbitcdH1cbitcbitcdHJldCA9IHJ0bDgyNjF4X3ZlcmlmeV9maXJtd2FyZShwaHlkZXYsIGZ3KTtcbitcdGlmIChyZXQpXG4rXHRcdGdvdG8gcmVsZWFzZV9mdztcbitcbitcdGhkciA9IChjb25zdCBzdHJ1Y3QgcnRsODI2MXhfZndfaGVhZGVyICopZnctXHUwMDNlZGF0YTtcbitcbitcdGVudHJ5ID0gKGNvbnN0IHN0cnVjdCBydGw4MjYxeF9md19lbnRyeSAqKShmdy1cdTAwM2VkYXRhICsgRldfSEVBREVSX1NJWkUpO1xuK1x0Zm9yIChpID0gMDsgaSBcdTAwM2MgbGUxNl90b19jcHUoaGRyLVx1MDAzZW51bV9lbnRyaWVzKTsgaSsrLCBlbnRyeSsrKSB7XG4rXHRcdHJldCA9IHJ0bDgyNjF4X2Z3X2V4ZWN1dGVfZW50cnkocGh5ZGV2LCBlbnRyeSk7XG4rXHRcdGlmIChyZXQpIHtcbitcdFx0XHRwaHlkZXZfZXJyKHBoeWRldiwgXCJFbnRyeSAlZCBmYWlsZWQ6ICVkXFxuXCIsIGksIHJldCk7XG4rXHRcdFx0Z290byByZWxlYXNlX2Z3O1xuK1x0XHR9XG4rXHR9XG4rXG4rXHRwcml2LVx1MDAzZWZ3X2xvYWRlZCA9IHRydWU7XG4rXG4rcmVsZWFzZV9mdzpcbitcdHJlbGVhc2VfZmlybXdhcmUoZncpO1xuK1x0cmV0dXJuIHJldDtcbit9XG4rXG4rc3RhdGljIGludCBydGw4MjYxeF9jb25maWdfaW50cihzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxuK3tcbitcdGludCByZXQ7XG4rXG4rXHRpZiAocGh5ZGV2LVx1MDAzZWludGVycnVwdHMgPT0gUEhZX0lOVEVSUlVQVF9FTkFCTEVEKSB7XG4rXHRcdHJldCA9IHBoeV9yZWFkX21tZChwaHlkZXYsIE1ESU9fTU1EX1ZFTkQyLCBSVEw4MjIxQl9WTkQyX0lOU1IpO1xuK1x0XHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRcdHJldHVybiByZXQ7XG4rXG4rXHRcdHJldCA9IHBoeV93cml0ZV9tbWQocGh5ZGV2LCBNRElPX01NRF9WRU5EMiwgUlRMODIyMUJfVk5EMl9JTkVSLFxuK1x0XHRcdFx0ICAgIFJUTDgyNjFYX0lOVF9NQVNLX0RFRkFVTFQpO1xuK1x0XHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRcdHJldHVybiByZXQ7XG4rXHR9IGVsc2Uge1xuK1x0XHRyZXQgPSBwaHlfd3JpdGVfbW1kKHBoeWRldiwgTURJT19NTURfVkVORDIsIFJUTDgyMjFCX1ZORDJfSU5FUiwgMCk7XG4rXHRcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdFx0cmV0dXJuIHJldDtcbitcbitcdFx0cmV0ID0gcGh5X3JlYWRfbW1kKHBoeWRldiwgTURJT19NTURfVkVORDIsIFJUTDgyMjFCX1ZORDJfSU5TUik7XG4rXHRcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdFx0cmV0dXJuIHJldDtcbitcdH1cbitcbitcdHJldHVybiAwO1xuK31cbitcbitzdGF0aWMgaXJxcmV0dXJuX3QgcnRsODI2MXhfaGFuZGxlX2ludGVycnVwdChzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxuK3tcbitcdGludCBpcnFfc3RhdHVzO1xuK1xuK1x0aXJxX3N0YXR1cyA9IHBoeV9yZWFkX21tZChwaHlkZXYsIE1ESU9fTU1EX1ZFTkQyLCBSVEw4MjIxQl9WTkQyX0lOU1IpO1xuK1x0aWYgKGlycV9zdGF0dXMgXHUwMDNjIDApIHtcbitcdFx0cGh5X2Vycm9yKHBoeWRldik7XG4rXHRcdHJldHVybiBJUlFfTk9ORTtcbitcdH1cbitcbitcdGlmICghKGlycV9zdGF0dXMgXHUwMDI2IFJUTDgyNjFYX0lOVF9NQVNLX0FMTCkpXG4rXHRcdHJldHVybiBJUlFfTk9ORTtcbitcbitcdGlmIChpcnFfc3RhdHVzIFx1MDAyNiAoUlRMODI2MVhfSU5UX0xJTktfQ0hHIHwgUlRMODI2MVhfSU5UX0FVVE9ORUdfRE9ORSB8XG4rXHQgICAgUlRMODI2MVhfSU5UX0FVVE9ORUdfRVJST1IgfCBSVEw4MjYxWF9JTlRfSkFCQkVSKSlcbitcdFx0cGh5X3RyaWdnZXJfbWFjaGluZShwaHlkZXYpO1xuK1xuK1x0cmV0dXJuIElSUV9IQU5ETEVEO1xuK31cbitcbitzdGF0aWMgaW50IHJ0bDgyNjF4X2NvbmZpZ19hbmVnKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXG4re1xuK1x0dTE2IGFkdl8xZyA9IDA7XG4rXHRpbnQgcmV0O1xuK1xuK1x0cmV0ID0gZ2VucGh5X2M0NV9jb25maWdfYW5lZyhwaHlkZXYpO1xuK1x0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0cmV0dXJuIHJldDtcbitcbitcdGlmIChwaHlkZXYtXHUwMDNlYXV0b25lZyA9PSBBVVRPTkVHX0RJU0FCTEUpXG4rXHRcdHJldHVybiAwO1xuK1xuK1x0aWYgKGxpbmttb2RlX3Rlc3RfYml0KEVUSFRPT0xfTElOS19NT0RFXzEwMDBiYXNlVF9GdWxsX0JJVCxcbitcdFx0XHQgICAgICBwaHlkZXYtXHUwMDNlYWR2ZXJ0aXNpbmcpKVxuK1x0XHRhZHZfMWcgPSBBRFZFUlRJU0VfMTAwMEZVTEw7XG4rXHRpZiAobGlua21vZGVfdGVzdF9iaXQoRVRIVE9PTF9MSU5LX01PREVfMTAwMGJhc2VUX0hhbGZfQklULFxuK1x0XHRcdCAgICAgIHBoeWRldi1cdTAwM2VhZHZlcnRpc2luZykpXG4rXHRcdGFkdl8xZyB8PSBBRFZFUlRJU0VfMTAwMEhBTEY7XG4rXG4rXHRyZXQgPSBwaHlfbW9kaWZ5X21tZF9jaGFuZ2VkKHBoeWRldiwgTURJT19NTURfVkVORDIsXG4rXHRcdFx0XHQgICAgIFJUTDgyMlhfVk5EMl9DMjJfUkVHKE1JSV9DVFJMMTAwMCksXG4rXHRcdFx0XHQgICAgIEFEVkVSVElTRV8xMDAwRlVMTCB8IEFEVkVSVElTRV8xMDAwSEFMRixcbitcdFx0XHRcdCAgICAgYWR2XzFnKTtcbitcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdHJldHVybiByZXQ7XG4rXHRpZiAocmV0IFx1MDAzZSAwKVxuK1x0XHRyZXR1cm4gZ2VucGh5X2M0NV9yZXN0YXJ0X2FuZWcocGh5ZGV2KTtcbitcbitcdHJldHVybiAwO1xuK31cbitcbitzdGF0aWMgaW50IHJ0bDgyNjF4X2NvbmZpZ19pbml0KHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXG4re1xuK1x0c3RydWN0IHJ0bDgyNjF4X3ByaXYgKnByaXYgPSBwaHlkZXYtXHUwMDNlcHJpdjtcbitcbitcdC8qIFRoZSBmaXJtd2FyZSBwYXJhbWV0ZXJzIGFyZSBwcmVzZXJ2ZWQgYWNyb3NzIElFRUUgc29mdCByZXNldHMgYW5kXG4rXHQgKiBzdXNwZW5kL3Jlc3VtZSBjeWNsZXMuIFJlbG9hZGluZyBpcyBvbmx5IG5lY2Vzc2FyeSBhZnRlciBhIHBvd2VyXG4rXHQgKiBjeWNsZSBvciBoYXJkIHJlc2V0LlxuK1x0ICovXG4rXHRpZiAocHJpdi1cdTAwM2Vmd19uYW1lIFx1MDAyNlx1MDAyNiAhcHJpdi1cdTAwM2Vmd19sb2FkZWQpXG4rXHRcdHJldHVybiBydGw4MjYxeF9md19sb2FkKHBoeWRldik7XG4rXG4rXHRyZXR1cm4gMDtcbit9XG4rXG4gc3RhdGljIGludCBydGw4MjF4X3Byb2JlKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXG4ge1xuIFx0c3RydWN0IGRldmljZSAqZGV2ID0gXHUwMDI2cGh5ZGV2LVx1MDAzZW1kaW8uZGV2O1xuQEAgLTMwMDEsNiArMzM5NCwxOSBAQCBzdGF0aWMgc3RydWN0IHBoeV9kcml2ZXIgcmVhbHRla19kcnZzW10gPSB7XG4gXHRcdC5yZXN1bWVcdFx0PSBnZW5waHlfcmVzdW1lLFxuIFx0XHQucmVhZF9tbWRcdD0gZ2VucGh5X3JlYWRfbW1kX3Vuc3VwcG9ydGVkLFxuIFx0XHQud3JpdGVfbW1kXHQ9IGdlbnBoeV93cml0ZV9tbWRfdW5zdXBwb3J0ZWQsXG4rXHR9LCB7XG4rXHRcdFBIWV9JRF9NQVRDSF9FWEFDVChSVExfODI2MUNfQ0cpLFxuK1x0XHQubmFtZVx0XHRcdD0gXCJSZWFsdGVrIFJUTDgyNjFDIDEwR2JwcyBQSFlcIixcbitcdFx0LnByb2JlXHRcdFx0PSBydGw4MjYxeF9wcm9iZSxcbitcdFx0LmNvbmZpZ19pbml0XHRcdD0gcnRsODI2MXhfY29uZmlnX2luaXQsXG4rXHRcdC5nZXRfZmVhdHVyZXNcdFx0PSBydGw4MjYxeF9nZXRfZmVhdHVyZXMsXG4rXHRcdC5jb25maWdfYW5lZ1x0XHQ9IHJ0bDgyNjF4X2NvbmZpZ19hbmVnLFxuK1x0XHQucmVhZF9zdGF0dXNcdFx0PSBydGw4MjYxeF9yZWFkX3N0YXR1cyxcbitcdFx0LmNvbmZpZ19pbnRyXHRcdD0gcnRsODI2MXhfY29uZmlnX2ludHIsXG4rXHRcdC5oYW5kbGVfaW50ZXJydXB0XHQ9IHJ0bDgyNjF4X2hhbmRsZV9pbnRlcnJ1cHQsXG4rXHRcdC5zb2Z0X3Jlc2V0XHRcdD0gZ2VucGh5X2M0NV9wbWFfc29mdF9yZXNldCxcbitcdFx0LnN1c3BlbmRcdFx0PSBnZW5waHlfYzQ1X3BtYV9zdXNwZW5kLFxuK1x0XHQucmVzdW1lXHRcdFx0PSBnZW5waHlfYzQ1X3BtYV9yZXN1bWUsXG4gXHR9LFxuIH07XG4gXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9waHkuaCBiL2luY2x1ZGUvbGludXgvcGh5LmhcbmluZGV4IDE5OWE3YWFhMzQxYmZkLi5kNmJjMTk5MzFmYjgzNSAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbGludXgvcGh5LmhcbisrKyBiL2luY2x1ZGUvbGludXgvcGh5LmhcbkBAIC0yMzA5LDYgKzIzMDksNyBAQCBpbnQgZ2VucGh5X2MzN19yZWFkX3N0YXR1cyhzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2LCBib29sICpjaGFuZ2VkKTtcbiAvKiBDbGF1c2UgNDUgUEhZICovXG4gaW50IGdlbnBoeV9jNDVfcmVzdGFydF9hbmVnKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpO1xuIGludCBnZW5waHlfYzQ1X2NoZWNrX2FuZF9yZXN0YXJ0X2FuZWcoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldiwgYm9vbCByZXN0YXJ0KTtcbitpbnQgZ2VucGh5X2M0NV9wbWFfc29mdF9yZXNldChzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KTtcbiBpbnQgZ2VucGh5X2M0NV9hbmVnX2RvbmUoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldik7XG4gaW50IGdlbnBoeV9jNDVfcmVhZF9saW5rKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpO1xuIGludCBnZW5waHlfYzQ1X3JlYWRfbHBhKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpO1xuZGlmZiAtLWdpdCBhL2luY2x1ZGUvdWFwaS9saW51eC9tZGlvLmggYi9pbmNsdWRlL3VhcGkvbGludXgvbWRpby5oXG5pbmRleCBiMjU0MWM5NDhmYzFlYi4uMDZmNGJjM2MyMGM3MTcgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL3VhcGkvbGludXgvbWRpby5oXG4rKysgYi9pbmNsdWRlL3VhcGkvbGludXgvbWRpby5oXG5AQCAtMzMyLDggKzMzMiwxMyBAQFxuICNkZWZpbmUgTURJT19BTl8xMEdCVF9DVFJMX0FEVjJfNUdcdDB4MDA4MFx0LyogQWR2ZXJ0aXNlIDIuNUdCQVNFLVQgKi9cbiAjZGVmaW5lIE1ESU9fQU5fMTBHQlRfQ1RSTF9BRFY1R1x0MHgwMTAwXHQvKiBBZHZlcnRpc2UgNUdCQVNFLVQgKi9cbiAjZGVmaW5lIE1ESU9fQU5fMTBHQlRfQ1RSTF9BRFYxMEdcdDB4MTAwMFx0LyogQWR2ZXJ0aXNlIDEwR0JBU0UtVCAqL1xuKyNkZWZpbmUgTURJT19BTl8xMEdCVF9DVFJMX01TX0VOQUJMRVx0MHg4MDAwXHQvKiBNYXN0ZXIvc2xhdmUgbWFudWFsIGNvbmZpZyBlbmFibGUgKi9cbisjZGVmaW5lIE1ESU9fQU5fMTBHQlRfQ1RSTF9NU19WQUxVRVx0MHg0MDAwXHQvKiBNYXN0ZXIvc2xhdmUgY29uZmlnIHZhbHVlICgxPU1hc3RlcikgKi9cbisjZGVmaW5lIE1ESU9fQU5fMTBHQlRfQ1RSTF9NU19QT1JUX1RZUEVcdDB4MjAwMFx0LyogTWFzdGVyIFByZWZlcnJlZCBUeXBlICovXG4gXG4gLyogQU4gMTBHQkFTRS1UIHN0YXR1cyByZWdpc3Rlci4gKi9cbisjZGVmaW5lIE1ESU9fQU5fMTBHQlRfU1RBVF9NU19GQVVMVFx0MHg4MDAwXHQvKiBNYXN0ZXIvc2xhdmUgZmF1bHQgKi9cbisjZGVmaW5lIE1ESU9fQU5fMTBHQlRfU1RBVF9NU19SRVNcdDB4NDAwMFx0LyogTWFzdGVyL3NsYXZlIHJlc29sdXRpb24gKDE9TWFzdGVyKSAqL1xuICNkZWZpbmUgTURJT19BTl8xMEdCVF9TVEFUX0xQMl81R1x0MHgwMDIwICAvKiBMUCBpcyAyLjVHQlQgY2FwYWJsZSAqL1xuICNkZWZpbmUgTURJT19BTl8xMEdCVF9TVEFUX0xQNUdcdFx0MHgwMDQwICAvKiBMUCBpcyA1R0JUIGNhcGFibGUgKi9cbiAjZGVmaW5lIE1ESU9fQU5fMTBHQlRfU1RBVF9MUFRSUlx0MHgwMjAwXHQvKiBMUCB0cmFpbmluZyByZXNldCByZXEuICovXG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wM1QwNzozNTowNi41NjU4Mzg5OTVaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1MDM0MzkwOTgzNiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIFJlYWNoYWJpbGl0eSBvZiB0aGUgUlRMODI2MUMgUEhZIERyaXZlciBpbiBhIFZpcnR1YWxpemVkIENvbnRleHQqKlxuXG5Pa2F5LCBzbyB3ZSBoYXZlIHRoaXMgcGF0Y2ggYWRkaW5nIHN1cHBvcnQgZm9yIHRoZSBSZWFsdGVrIFJUTDgyNjFDIDEwR2JwcyBQSFkgaW4gYHJlYWx0ZWtfbWFpbi5jYCwgYWxvbmcgd2l0aCBzb21lIENsYXVzZSA0NSBQSFkgZnVuY3Rpb25zIGFuZCBtb2RpZmljYXRpb25zIHRvIGV4aXN0aW5nIG9uZXMgaW4gYHBoeS1jNDUuY2AuIENydWNpYWxseSwgdGhlcmUncyBmaXJtd2FyZSBsb2FkaW5nIGZvciB0aGUgUlRMODI2MUMuIE15IG1haW4gY29uY2VybiBpcyB3aGV0aGVyIHRoaXMgaXMgYWN0dWFsbHkgKnJlYWNoYWJsZSogaW4gYSB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudC4gVGhhdCdzIHRoZSByZWFsIHRlc3QuXG5cblRoaW5raW5nIHRocm91Z2ggaXQsIFBIWSBkcml2ZXJzIGFyZSB1c3VhbGx5IHJlYWNoYWJsZSBpZiB3ZSBjYW4gZ2V0IGEgdmlydHVhbCBNRElPIGJ1cyB1cCBhbmQgcnVubmluZywgb3IgaWYgYSBuZXR3b3JrIGRyaXZlciB1c2VzIHRoZW0sIHdoaWNoIHRoZW4gbGlua3MgdG8gdGhlIFBIWSBkcml2ZXIuIFNvLCB0aGUgcXVlc3Rpb24gYmVjb21lczogY2FuIHdlIGluc3RhbnRpYXRlIGEgUEhZIGRldmljZSB0aHJvdWdoIHNvbWUgdmlydHVhbCBkcml2ZXJzPyBMaWtlLCBtYXliZSBgbWFjc2VjYCwgb3IgYHZldGhgLCBvciBldmVuIGBuZXRkZXZzaW1gPyBCdXQgd2FpdCwgSSdtIHByZXR0eSBzdXJlIGBuZXRkZXZzaW1gIGRvZXNuJ3QgYWN0dWFsbHkgaW5zdGFudGlhdGUgKnJlYWwqIFBIWXMuIEFuZCB0aGVuIEkgcmVtZW1iZXIsIGBuZXRkZXZzaW1gIGRvZXNuJ3QgdXNlIHRoZSBgcGh5X2RldmljZWAgc3RydWN0dXJlIGF0IGFsbC5cblxuV2hhdCBhYm91dCBzb21ldGhpbmcgbGlrZSBgbWFjYmAgb3Igb3RoZXIgZHJpdmVycyB0aGF0IG1pZ2h0IGJlIGVtdWxhdGVkIGluIFFFTVU/IFllcywgdGhleSBtaWdodCBiZSBlbXVsYXRlZCwgYnV0IHRoZXkgdHlwaWNhbGx5IHVzZSBzcGVjaWZpYyBQSFlzLiBUaGVuIEkgcmVjYWxsLCBjYW4gU3l6a2FsbGVyIGluamVjdCBNRElPIHRyYWZmaWM/IEkgcmVtZW1iZXJlZCB0aGUgZXhpc3RlbmNlIG9mIGBzeXpfbWRpb19yZWFkYC9gc3l6X21kaW9fd3JpdGVgIHN5c3RlbSBjYWxscywgYnV0IEkgaGF2ZSB0byBzdG9wIG15c2VsZiAtIHRoYXQncyBub3QgcmlnaHQuXG5cbk9rYXksIGJhY2sgdG8gYmFzaWNzLiBDYW4gd2UgcmVhY2ggYSBmdW5jdGlvbiBsaWtlIGBnZW5waHlfYzQ1X3JlYWRfc3RhdHVzYD8gWWVzLCBpZiBhIFBIWSBkZXZpY2UgaXMgcmVnaXN0ZXJlZC4gTm93LCB0aGUga2V5IHF1ZXN0aW9uOiBjYW4gYSB1c2VyIHJlZ2lzdGVyIGEgUEhZIGRldmljZT8gSSB2YWd1ZWx5IHJlY2FsbCBgbWRpby1iY20tdW5pbWFjYCBhbmQgc2ltaWxhciB0aGluZ3MgZXhpc3RpbmcuIEJ1dCB3YWl0LCBtYXliZSB3ZSBjb3VsZCBqdXN0IGZ1enogdGhlIFBIWSBsYXllciBkaXJlY3RseSBpZiB0aGVyZSdzIGEgd2F5IHRvIHRyaWdnZXIgaXQuXG5cbkZ1enppbmcuLi4gZG9lcyBTeXprYWxsZXIgZnV6eiBQSFkgZHJpdmVycyB0aHJvdWdoIGB0dW5gIG9yIGB2ZXRoYD8gTm8sIHRoYXQgZG9lc24ndCBzb3VuZCByaWdodC4gUEhZIGRyaXZlcnMgYXJlIHVzdWFsbHkgcHJvYmVkIHZpYSB0aGUgTURJTyBidXMuIFNvLCBpcyB0aGVyZSBldmVuIGEgdmlydHVhbCBNRElPIGJ1cyBpbiB0aGUga2VybmVsPyBJIG5lZWQgdG8gc2VhcmNoIGZvciB0aGF0LiBMZXQncyBsb29rIGZvciBcIm1kaW9cIiBjb21iaW5lZCB3aXRoIHNvbWV0aGluZyBsaWtlIFwibW9ja1wiIG9yIFwic2ltXCIuIFRoYXQncyB0aGUga2V5LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMDIzMywiT3V0cHV0VG9rZW5zIjoxOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQ4MywiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAzVDA3OjM1OjU2LjkwOTc1MTg1MVoiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozMjY1NDM1NzIwLCJFcnJvciI6Im5vIG1hdGNoZXMiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJtZGlvLipzaW1cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiZXJyb3JcIjogXCJubyBtYXRjaGVzXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAzVDA3OjM2OjAwLjE3NTIwMDAxMVoiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjk5NzY4MTAwMDUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0aG91Z2h0IHByb2Nlc3Mgc3VtbWFyaXplZCBmcm9tIHRoYXQgcHJvbXB0LCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKk1ESU8gRHJpdmVyIEluc3RhbnRpYXRpb24gSW52ZXN0aWdhdGlvbioqXG5cbkFscmlnaHQsIGxldCdzIGdldCBkb3duIHRvIGJyYXNzIHRhY2tzLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gcXVpY2tseSBhc2NlcnRhaW4gdGhlIGxhbmRzY2FwZSBvZiBgbWRpb2AgZHJpdmVycyB3aXRoaW4gdGhlIHN5c3RlbS4gTXkgcHJpbWFyeSBjb25jZXJuIGlzIGNlbnRlcmVkIG9uIHVzZXItc3BhY2UgaW5zdGFudGlhdGlvbi4gQXJlIHRoZXJlIGFueSBgbWRpb2AgZHJpdmVycyBleHBvc2VkLCBkb2N1bWVudGVkLCBhbmQgcG90ZW50aWFsbHkgZGVzaWduZWQgZm9yIGRpcmVjdCBpbnRlcmFjdGlvbiBmcm9tIHVzZXIgYXBwbGljYXRpb25zPyBJJ20gdGhpbmtpbmcgYWJvdXQgdGhpbmdzIGxpa2UgZGlyZWN0IHN5c2ZzIGFjY2VzcywgaW9jdGxzLCBvciBhbnkgb3RoZXIgbWVjaGFuaXNtIHRoYXQgcHJvdmlkZXMgYSB1c2VyIGludGVyZmFjZS4gVGhpcyBpc24ndCBqdXN0IGEgZ2VuZXJpYyBwcm9iZTsgSSBuZWVkIHRvIHVuZGVyc3RhbmQgaWYgdGhlIGtlcm5lbCBmYWNpbGl0YXRlcyB1c2VyLXNwYWNlIGNvbnRyb2wgb3ZlciBzcGVjaWZpYyBgbWRpb2AgaW5zdGFuY2VzLiBJJ20gbG9va2luZyBmb3IgYSBxdWljayBzY2FuIG9mIHRoZSB0eXBpY2FsIGRyaXZlciByZWdpc3RyYXRpb24gcGF0dGVybnMsIGRldmljZSB0cmVlIGJpbmRpbmdzLCBhbmQgYW55IGFzc29jaWF0ZWQgY2hhcmFjdGVyIG9yIG5ldHdvcmsgaW50ZXJmYWNlcy4gVW5kZXJzdGFuZGluZyB0aGUgcGVybWl0dGVkIGFuZCBwcm9oaWJpdGVkIHVzZXItc3BhY2UgaW5zdGFudGlhdGlvbiBzY2VuYXJpb3Mgb2YgTURJTyBkcml2ZXJzIHdpbGwgYmUgaW1wb3J0YW50IHRvIHdoYXRldmVyIEkgYW0gZG9pbmcuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjExMjYzLCJPdXRwdXRUb2tlbnMiOjE4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDNUMDc6MzY6MTAuMTUyMDE0NDQ2WiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjMzMjAzMDM5ODgsIkVycm9yIjoibm8gbWF0Y2hlcyIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm1kaW8uKnZpcnR1YWxcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiZXJyb3JcIjogXCJubyBtYXRjaGVzXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAzVDA3OjM2OjEzLjQ3MjMyNTE5NFoiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjI2MjkyODE0NjQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0IHRob3VnaHQgcHJvY2VzcywgZnJvbSBhbiBleHBlcnQncyBwZXJzcGVjdGl2ZTpcblxuKipEaXZpbmcgRGVlcCBpbnRvIHRoZSBQSFkgTGF5ZXIqKlxuXG5IbW0sIGhvbGQgb24gYSBzZWNvbmQuIFdlJ3ZlIGJlZW4gZm9jdXNpbmcgb24gdGhlIGhpZ2hlci1sZXZlbCBuZXR3b3JrIHN0YWNrLCBidXQgSSB0aGluayB3ZSdyZSBvdmVybG9va2luZyBzb21ldGhpbmcgY3JpdGljYWwgaW4gdGhpcyBhbmFseXNpcy4gVGhhdCBmaWxlLCBgZHJpdmVycy9uZXQvcGh5L2ZpeGVkX3BoeS5jYC4uLiB3aGF0J3MgaXRzIHJvbGU/IEkgY2FuJ3QgaWdub3JlIGl0LiBJdCdzIHRoZSBkcml2ZXIgZm9yIHRoZSBcImZpeGVkIFBIWSxcIiB3aGljaCwgZGVwZW5kaW5nIG9uIHRoZSBjb250ZXh0LCBjb3VsZCBiZSBhIGtleSBwaWVjZSBpbiB0aGlzIG5ldHdvcmsgaW50ZXJmYWNlIHB1enpsZS4gV2UgbmVlZCB0byBjb25zaWRlciBob3cgaXQncyBpbnRlcmFjdGluZywgb3IgKm5vdCogaW50ZXJhY3RpbmcsIHdpdGggdGhlIHJlc3Qgb2YgdGhlIGNvbXBvbmVudHMgd2UncmUgbG9va2luZyBhdC4gVGhpcyBjb3VsZCBiZSB3aGVyZSB0aGUgcnViYmVyIG1lZXRzIHRoZSByb2FkLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMTUxNiwiT3V0cHV0VG9rZW5zIjoxNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAzVDA3OjM2OjE2LjEwMTYwOTE3N1oiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNjQ0MDEwNzIzLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImZpeGVkX3BoeVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYz00Mzg9c3RhdGljIHZvaWQgZHNhX2xvb3BfcGh5ZGV2c191bnJlZ2lzdGVyKHZvaWQpXFxuLS1cXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYy00NDEtXFx0XFx0aWYgKCFJU19FUlIocGh5ZGV2c1tpXSkpXFxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmM6NDQyOlxcdFxcdFxcdGZpeGVkX3BoeV91bnJlZ2lzdGVyKHBoeWRldnNbaV0pO1xcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jLTQ0My1cXHR9XFxuLS1cXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYz00ODI9c3RhdGljIGludCBfX2luaXQgZHNhX2xvb3BfaW5pdCh2b2lkKVxcbi0tXFxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtNDkxLVxcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBOVU1fRklYRURfUEhZUzsgaSsrKVxcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jOjQ5MjpcXHRcXHRwaHlkZXZzW2ldID0gZml4ZWRfcGh5X3JlZ2lzdGVyXzEwMGZkKCk7XFxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtNDkzLVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vYjQ0LmM9MjIzND1zdGF0aWMgaW50IGI0NF9yZWdpc3Rlcl9waHlfb25lKHN0cnVjdCBiNDQgKmJwKVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vYjQ0LmMtMjI3Mi1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9iNDQuYzoyMjczOlxcdFxcdHBoeWRldiA9IGZpeGVkX3BoeV9yZWdpc3Rlcl8xMDBmZCgpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2I0NC5jLTIyNzQtXFx0XFx0aWYgKCFJU19FUlIocGh5ZGV2KSlcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2I0NC5jPTIzMTM9c3RhdGljIHZvaWQgYjQ0X3VucmVnaXN0ZXJfcGh5X29uZShzdHJ1Y3QgYjQ0ICpicClcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2I0NC5jLTIzMjItXFx0aWYgKHBoeV9pc19wc2V1ZG9fZml4ZWRfbGluayhwaHlkZXYpKVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2I0NC5jOjIzMjM6XFx0XFx0Zml4ZWRfcGh5X3VucmVnaXN0ZXIocGh5ZGV2KTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9iNDQuYy0yMzI0LVxcdG1kaW9idXNfdW5yZWdpc3RlcihtaWlfYnVzKTtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2JnbWFjLmM9MTQzOT1pbnQgYmdtYWNfcGh5X2Nvbm5lY3RfZGlyZWN0KHN0cnVjdCBiZ21hYyAqYmdtYWMpXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vYmdtYWMuYy0xNDQwLXtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9iZ21hYy5jOjE0NDE6XFx0c3RydWN0IGZpeGVkX3BoeV9zdGF0dXMgZnBoeV9zdGF0dXMgPSB7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vYmdtYWMuYy0xNDQyLVxcdFxcdC5saW5rID0gMSxcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2JnbWFjLmMtMTQ0OC1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9iZ21hYy5jOjE0NDk6XFx0cGh5X2RldiA9IGZpeGVkX3BoeV9yZWdpc3RlcihcXHUwMDI2ZnBoeV9zdGF0dXMsIE5VTEwpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2JnbWFjLmMtMTQ1MC1cXHRpZiAoSVNfRVJSKHBoeV9kZXYpKSB7XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9nZW5ldC9iY21taWkuYz05Nz12b2lkIGJjbWdlbmV0X21paV9zZXR1cChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vZ2VuZXQvYmNtbWlpLmMtMTE2LVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2dlbmV0L2JjbW1paS5jOjExNzpzdGF0aWMgaW50IGJjbWdlbmV0X2ZpeGVkX3BoeV9saW5rX3VwZGF0ZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2dlbmV0L2JjbW1paS5jOjExODpcXHRcXHRcXHRcXHRcXHQgIHN0cnVjdCBmaXhlZF9waHlfc3RhdHVzICpzdGF0dXMpXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vZ2VuZXQvYmNtbWlpLmMtMTE5LXtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2dlbmV0L2JjbW1paS5jPTE4Nj1zdGF0aWMgdm9pZCBiY21nZW5ldF9tb2NhX3BoeV9zZXR1cChzdHJ1Y3QgYmNtZ2VuZXRfcHJpdiAqcHJpdilcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2dlbmV0L2JjbW1paS5jLTE4OC1cXHRpZiAoYmNtZ2VuZXRfaGFzX21vY2FfbGlua19kZXQocHJpdikpXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vZ2VuZXQvYmNtbWlpLmM6MTg5OlxcdFxcdGZpeGVkX3BoeV9zZXRfbGlua191cGRhdGUocHJpdi1cXHUwMDNlZGV2LVxcdTAwM2VwaHlkZXYsXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vZ2VuZXQvYmNtbWlpLmM6MTkwOlxcdFxcdFxcdFxcdFxcdCAgYmNtZ2VuZXRfZml4ZWRfcGh5X2xpbmtfdXBkYXRlKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9nZW5ldC9iY21taWkuYy0xOTEtfVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZmFyYWRheS9mdGdtYWMxMDAuYz00Mz1zdHJ1Y3QgZnRnbWFjMTAwX21hdGNoX2RhdGEge1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZmFyYWRheS9mdGdtYWMxMDAuYy02Ni0vKiBGb3IgTkMtU0kgdG8gcmVnaXN0ZXIgYSBmaXhlZC1saW5rIHBoeSBkZXZpY2UgKi9cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mYXJhZGF5L2Z0Z21hYzEwMC5jOjY3OnN0YXRpYyBzdHJ1Y3QgZml4ZWRfcGh5X3N0YXR1cyBuY3NpX3BoeV9zdGF0dXMgPSB7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZmFyYWRheS9mdGdtYWMxMDAuYy02OC1cXHQubGluayA9IDEsXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mYXJhZGF5L2Z0Z21hYzEwMC5jPTE3ODA9c3RhdGljIHZvaWQgZnRnbWFjMTAwX3BoeV9kaXNjb25uZWN0KHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mYXJhZGF5L2Z0Z21hYzEwMC5jLTE3OTItXFx0aWYgKHByaXYtXFx1MDAzZXVzZV9uY3NpKVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZhcmFkYXkvZnRnbWFjMTAwLmM6MTc5MzpcXHRcXHRmaXhlZF9waHlfdW5yZWdpc3RlcihwaHlkZXYpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZhcmFkYXkvZnRnbWFjMTAwLmMtMTc5NC19XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mYXJhZGF5L2Z0Z21hYzEwMC5jPTE4NDg9c3RhdGljIGludCBmdGdtYWMxMDBfcHJvYmVfbmNzaShzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LFxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZmFyYWRheS9mdGdtYWMxMDAuYy0xODY2LVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZhcmFkYXkvZnRnbWFjMTAwLmM6MTg2NzpcXHRwaHlkZXYgPSBmaXhlZF9waHlfcmVnaXN0ZXIoXFx1MDAyNm5jc2lfcGh5X3N0YXR1cywgbnApO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZhcmFkYXkvZnRnbWFjMTAwLmMtMTg2OC1cXHRpZiAoSVNfRVJSKHBoeWRldikpIHtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZhcmFkYXkvZnRnbWFjMTAwLmMtMTg4MS1lcnJfcmVnaXN0ZXJfcGh5OlxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZhcmFkYXkvZnRnbWFjMTAwLmM6MTg4MjpcXHRmaXhlZF9waHlfdW5yZWdpc3RlcihwaHlkZXYpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZhcmFkYXkvZnRnbWFjMTAwLmMtMTg4My1lcnJfcmVnaXN0ZXJfbmRldjpcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9mZWNfbWFpbi5jPTI5ODE9c3RhdGljIGludCBmZWNfZW5ldF9taWlfcHJvYmUoc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZmVjX21haW4uYy0zMDAyLVxcdFxcdFxcdG5ldGRldl9pbmZvKG5kZXYsIFxcXCJubyBQSFksIGFzc3VtaW5nIGRpcmVjdCBjb25uZWN0aW9uIHRvIHN3aXRjaFxcXFxuXFxcIik7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2ZlY19tYWluLmM6MzAwMzpcXHRcXHRcXHRwaHlfZGV2ID0gZml4ZWRfcGh5X3JlZ2lzdGVyXzEwMGZkKCk7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2ZlY19tYWluLmMtMzAwNC1cXHRcXHRcXHRpZiAoSVNfRVJSKHBoeV9kZXYpKSB7XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZmVjX21haW4uYy0zMDEzLVxcdFxcdFxcdGlmIChwaHlfaXNfcHNldWRvX2ZpeGVkX2xpbmsocGh5X2RldikpXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2ZlY19tYWluLmM6MzAxNDpcXHRcXHRcXHRcXHRmaXhlZF9waHlfdW5yZWdpc3RlcihwaHlfZGV2KTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZmVjX21haW4uYy0zMDE1LVxcdFxcdFxcdG5ldGRldl9lcnIobmRldiwgXFxcImNvdWxkIG5vdCBhdHRhY2ggdG8gUEhZXFxcXG5cXFwiKTtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9mZWNfbWFpbi5jPTQyMjg9ZmVjX2VuZXRfY2xvc2Uoc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZmVjX21haW4uYy00MjQzLVxcdGlmICghZmVwLVxcdTAwM2VwaHlfbm9kZSBcXHUwMDI2XFx1MDAyNiBwaHlfaXNfcHNldWRvX2ZpeGVkX2xpbmsocGh5X2RldikpXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2ZlY19tYWluLmM6NDI0NDpcXHRcXHRmaXhlZF9waHlfdW5yZWdpc3RlcihwaHlfZGV2KTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZmVjX21haW4uYy00MjQ1LVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2dpYW5mYXIuYz0zMTMyPXN0YXRpYyBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZV9vcHMgZ2Zhcl9uZXRkZXZfb3BzID0ge1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2dpYW5mYXIuYy0zMTQxLVxcdC5uZG9fZ2V0X3N0YXRzNjQgPSBnZmFyX2dldF9zdGF0czY0LFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9naWFuZmFyLmM6MzE0MjpcXHQubmRvX2NoYW5nZV9jYXJyaWVyID0gZml4ZWRfcGh5X2NoYW5nZV9jYXJyaWVyLFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9naWFuZmFyLmMtMzE0My1cXHQubmRvX3NldF9tYWNfYWRkcmVzcyA9IGdmYXJfc2V0X21hY19hZGRyLFxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2hpYm1jZ2UvaGJnX21kaW8uYz0yMjg9dm9pZCBoYmdfcGh5X3N0b3Aoc3RydWN0IGhiZ19wcml2ICpwcml2KVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2hpYm1jZ2UvaGJnX21kaW8uYy0yMzItXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2hpYm1jZ2UvaGJnX21kaW8uYzoyMzM6c3RhdGljIHZvaWQgaGJnX2ZpeGVkX3BoeV91bmluaXQodm9pZCAqZGF0YSlcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaGlibWNnZS9oYmdfbWRpby5jLTIzNC17XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2hpYm1jZ2UvaGJnX21kaW8uYzoyMzU6XFx0Zml4ZWRfcGh5X3VucmVnaXN0ZXIoKHN0cnVjdCBwaHlfZGV2aWNlICopZGF0YSk7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2hpYm1jZ2UvaGJnX21kaW8uYy0yMzYtfVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9oaWJtY2dlL2hiZ19tZGlvLmMtMjM3LVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9oaWJtY2dlL2hiZ19tZGlvLmM6MjM4OnN0YXRpYyBpbnQgaGJnX2ZpeGVkX3BoeV9pbml0KHN0cnVjdCBoYmdfcHJpdiAqcHJpdilcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaGlibWNnZS9oYmdfbWRpby5jLTIzOS17XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2hpYm1jZ2UvaGJnX21kaW8uYzoyNDA6XFx0c3RydWN0IGZpeGVkX3BoeV9zdGF0dXMgaGJnX2ZpeGVkX3BoeV9zdGF0dXMgPSB7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2hpYm1jZ2UvaGJnX21kaW8uYy0yNDEtXFx0XFx0LmxpbmsgPSAxLFxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2hpYm1jZ2UvaGJnX21kaW8uYy0yNTAtXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2hpYm1jZ2UvaGJnX21kaW8uYzoyNTE6XFx0cGh5ZGV2ID0gZml4ZWRfcGh5X3JlZ2lzdGVyKFxcdTAwMjZoYmdfZml4ZWRfcGh5X3N0YXR1cywgTlVMTCk7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2hpYm1jZ2UvaGJnX21kaW8uYy0yNTItXFx0aWYgKElTX0VSUihwaHlkZXYpKSB7XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaGlibWNnZS9oYmdfbWRpby5jLTI1Ny1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaGlibWNnZS9oYmdfbWRpby5jOjI1ODpcXHRyZXQgPSBkZXZtX2FkZF9hY3Rpb25fb3JfcmVzZXQoZGV2LCBoYmdfZml4ZWRfcGh5X3VuaW5pdCwgcGh5ZGV2KTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaGlibWNnZS9oYmdfbWRpby5jLTI1OS1cXHRpZiAocmV0KVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2hpYm1jZ2UvaGJnX21kaW8uYz0yNjY9aW50IGhiZ19tZGlvX2luaXQoc3RydWN0IGhiZ19wcml2ICpwcml2KVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2hpYm1jZ2UvaGJnX21kaW8uYy0yNzUtXFx0aWYgKG1hYy1cXHUwMDNlcGh5X2FkZHIgPT0gSEJHX05PX1BIWSlcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaGlibWNnZS9oYmdfbWRpby5jOjI3NjpcXHRcXHRyZXR1cm4gaGJnX2ZpeGVkX3BoeV9pbml0KHByaXYpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9oaWJtY2dlL2hiZ19tZGlvLmMtMjc3LVxcbi0tXFxuZHJpdmVycy9uZXQvbWRpby9vZl9tZGlvLmM9NDEyPWludCBvZl9waHlfcmVnaXN0ZXJfZml4ZWRfbGluayhzdHJ1Y3QgZGV2aWNlX25vZGUgKm5wKVxcbmRyaXZlcnMvbmV0L21kaW8vb2ZfbWRpby5jLTQxMy17XFxuZHJpdmVycy9uZXQvbWRpby9vZl9tZGlvLmM6NDE0OlxcdHN0cnVjdCBmaXhlZF9waHlfc3RhdHVzIHN0YXR1cyA9IHt9O1xcbmRyaXZlcnMvbmV0L21kaW8vb2ZfbWRpby5jLTQxNS1cXHRzdHJ1Y3QgZGV2aWNlX25vZGUgKmZpeGVkX2xpbmtfbm9kZTtcXG4tLVxcbmRyaXZlcnMvbmV0L21kaW8vb2ZfbWRpby5jLTQ1OS1yZWdpc3Rlcl9waHk6XFxuZHJpdmVycy9uZXQvbWRpby9vZl9tZGlvLmM6NDYwOlxcdHJldHVybiBQVFJfRVJSX09SX1pFUk8oZml4ZWRfcGh5X3JlZ2lzdGVyKFxcdTAwMjZzdGF0dXMsIG5wKSk7XFxuZHJpdmVycy9uZXQvbWRpby9vZl9tZGlvLmMtNDYxLX1cXG4tLVxcbmRyaXZlcnMvbmV0L21kaW8vb2ZfbWRpby5jPTQ2ND12b2lkIG9mX3BoeV9kZXJlZ2lzdGVyX2ZpeGVkX2xpbmsoc3RydWN0IGRldmljZV9ub2RlICpucClcXG4tLVxcbmRyaXZlcnMvbmV0L21kaW8vb2ZfbWRpby5jLTQ3MS1cXG5kcml2ZXJzL25ldC9tZGlvL29mX21kaW8uYzo0NzI6XFx0Zml4ZWRfcGh5X3VucmVnaXN0ZXIocGh5ZGV2KTtcXG5kcml2ZXJzL25ldC9tZGlvL29mX21kaW8uYy00NzMtXFxuLS1cXG5kcml2ZXJzL25ldC9waHkvTWFrZWZpbGU9NjM9b2JqLSQoQ09ORklHX0RQODNURzcyMF9QSFkpXFx0Kz0gZHA4M3RnNzIwLm9cXG5kcml2ZXJzL25ldC9waHkvTWFrZWZpbGU6NjQ6b2JqLSQoQ09ORklHX0ZJWEVEX1BIWSlcXHRcXHQrPSBmaXhlZF9waHkub1xcbmRyaXZlcnMvbmV0L3BoeS9NYWtlZmlsZS02NS1vYmotJChDT05GSUdfSUNQTFVTX1BIWSlcXHQrPSBpY3BsdXMub1xcbi0tXFxuZHJpdmVycy9uZXQvcGh5L2ZpeGVkX3BoeS5jLTI3LVxcbmRyaXZlcnMvbmV0L3BoeS9maXhlZF9waHkuYzoyODpzdHJ1Y3QgZml4ZWRfcGh5IHtcXG5kcml2ZXJzL25ldC9waHkvZml4ZWRfcGh5LmMtMjktXFx0c3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldjtcXG5kcml2ZXJzL25ldC9waHkvZml4ZWRfcGh5LmM6MzA6XFx0c3RydWN0IGZpeGVkX3BoeV9zdGF0dXMgc3RhdHVzO1xcbmRyaXZlcnMvbmV0L3BoeS9maXhlZF9waHkuYzozMTpcXHRpbnQgKCpsaW5rX3VwZGF0ZSkoc3RydWN0IG5ldF9kZXZpY2UgKiwgc3RydWN0IGZpeGVkX3BoeV9zdGF0dXMgKik7XFxuZHJpdmVycy9uZXQvcGh5L2ZpeGVkX3BoeS5jLTMyLX07XFxuZHJpdmVycy9uZXQvcGh5L2ZpeGVkX3BoeS5jLTMzLVxcbmRyaXZlcnMvbmV0L3BoeS9maXhlZF9waHkuYzozNDpzdGF0aWMgREVDTEFSRV9CSVRNQVAoZml4ZWRfcGh5X2lkcywgTlVNX0ZQKTtcXG5kcml2ZXJzL25ldC9waHkvZml4ZWRfcGh5LmM6MzU6c3RhdGljIHN0cnVjdCBmaXhlZF9waHkgZm1iX2ZpeGVkX3BoeXNbTlVNX0ZQXTtcXG5kcml2ZXJzL25ldC9waHkvZml4ZWRfcGh5LmMtMzYtc3RhdGljIHN0cnVjdCBtaWlfYnVzICpmbWJfbWlpX2J1cztcXG5kcml2ZXJzL25ldC9waHkvZml4ZWRfcGh5LmMtMzctXFxuZHJpdmVycy9uZXQvcGh5L2ZpeGVkX3BoeS5jOjM4OnN0YXRpYyBzdHJ1Y3QgZml4ZWRfcGh5ICpmaXhlZF9waHlfZmluZChpbnQgYWRkcilcXG5kcml2ZXJzL25ldC9waHkvZml4ZWRfcGh5LmMtMzkte1xcbmRyaXZlcnMvbmV0L3BoeS9maXhlZF9waHkuYzo0MDpcXHRyZXR1cm4gdGVzdF9iaXQoYWRkciwgZml4ZWRfcGh5X2lkcykgPyBmbWJfZml4ZWRfcGh5cyArIGFkZHIgOiBOVUxMO1xcbmRyaXZlcnMvbmV0L3BoeS9maXhlZF9waHkuYy00MS19XFxuZHJpdmVycy9uZXQvcGh5L2ZpeGVkX3BoeS5jLTQyLVxcbmRyaXZlcnMvbmV0L3BoeS9maXhlZF9waHkuYzo0MzppbnQgZml4ZWRfcGh5X2NoYW5nZV9jYXJyaWVyKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGJvb2wgbmV3X2NhcnJpZXIpXFxuZHJpdmVycy9uZXQvcGh5L2ZpeGVkX3BoeS5jLTQ0LXtcXG5kcml2ZXJzL25ldC9waHkvZml4ZWRfcGh5LmMtNDUtXFx0c3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldiA9IGRldi1cXHUwMDNlcGh5ZGV2O1xcbmRyaXZlcnMvbmV0L3BoeS9maXhlZF9waHkuYzo0NjpcXHRzdHJ1Y3QgZml4ZWRfcGh5ICpmcDtcXG5kcml2ZXJzL25ldC9waHkvZml4ZWRfcGh5LmMtNDctXFxuLS1cXG5kcml2ZXJzL25ldC9waHkvZml4ZWRfcGh5LmMtNTAtXFxuZHJpdmVycy9uZXQvcGh5L2ZpeGVkX3BoeS5jOjUxOlxcdGZwID0gZml4ZWRfcGh5X2ZpbmQocGh5ZGV2LVxcdTAwM2VtZGlvLmFkZHIpO1xcbmRyaXZlcnMvbmV0L3BoeS9maXhlZF9waHkuYy01Mi1cXHRpZiAoIWZwKVxcbi0tXFxuZHJpdmVycy9uZXQvcGh5L2ZpeGVkX3BoeS5jLTU4LX1cXG5kcml2ZXJzL25ldC9waHkvZml4ZWRfcGh5LmM6NTk6RVhQT1JUX1NZTUJPTF9HUEwoZml4ZWRfcGh5X2NoYW5nZV9jYXJyaWVyKTtcXG5kcml2ZXJzL25ldC9waHkvZml4ZWRfcGh5LmMtNjAtXFxuZHJpdmVycy9uZXQvcGh5L2ZpeGVkX3BoeS5jPTYxPXN0YXRpYyBpbnQgZml4ZWRfbWRpb19yZWFkKHN0cnVjdCBtaWlfYnVzICpidXMsIGludCBwaHlfYWRkciwgaW50IHJlZ19udW0pXFxuZHJpdmVycy9uZXQvcGh5L2ZpeGVkX3BoeS5jLTYyLXtcXG5kcml2ZXJzL25ldC9waHkvZml4ZWRfcGh5LmM6NjM6XFx0c3RydWN0IGZpeGVkX3BoeSAqZnA7XFxuZHJpdmVycy9uZXQvcGh5L2ZpeGVkX3BoeS5jLTY0LVxcbmRyaXZlcnMvbmV0L3BoeS9maXhlZF9waHkuYzo2NTpcXHRmcCA9IGZpeGVkX3BoeV9maW5kKHBoeV9hZGRyKTtcXG5kcml2ZXJzL25ldC9waHkvZml4ZWRfcGh5LmMtNjYtXFx0aWYgKCFmcClcXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9maXhlZF9waHkuYz03NT1zdGF0aWMgaW50IGZpeGVkX21kaW9fd3JpdGUoc3RydWN0IG1paV9idXMgKmJ1cywgaW50IHBoeV9hZGRyLCBpbnQgcmVnX251bSxcXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9maXhlZF9waHkuYy04NS0gKi9cXG5kcml2ZXJzL25ldC9waHkvZml4ZWRfcGh5LmM6ODY6aW50IGZpeGVkX3BoeV9zZXRfbGlua191cGRhdGUoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldixcXG5kcml2ZXJzL25ldC9waHkvZml4ZWRfcGh5LmMtODctXFx0XFx0XFx0ICAgICAgaW50ICgqbGlua191cGRhdGUpKHN0cnVjdCBuZXRfZGV2aWNlICosXFxuZHJpdmVycy9uZXQvcGh5L2ZpeGVkX3BoeS5jOjg4OlxcdFxcdFxcdFxcdFxcdFxcdCBzdHJ1Y3QgZml4ZWRfcGh5X3N0YXR1cyAqKSlcXG5kcml2ZXJzL25ldC9waHkvZml4ZWRfcGh5LmMtODkte1xcbmRyaXZlcnMvbmV0L3BoeS9maXhlZF9waHkuYzo5MDpcXHRzdHJ1Y3QgZml4ZWRfcGh5ICpmcDtcXG5kcml2ZXJzL25ldC9waHkvZml4ZWRfcGh5LmMtOTEtXFxuLS1cXG5kcml2ZXJzL25ldC9waHkvZml4ZWRfcGh5LmMtOTQtXFxuZHJpdmVycy9uZXQvcGh5L2ZpeGVkX3BoeS5jOjk1OlxcdGZwID0gZml4ZWRfcGh5X2ZpbmQocGh5ZGV2LVxcdTAwM2VtZGlvLmFkZHIpO1xcbmRyaXZlcnMvbmV0L3BoeS9maXhlZF9waHkuYy05Ni1cXHRpZiAoIWZwKVxcbi0tXFxuZHJpdmVycy9uZXQvcGh5L2ZpeGVkX3BoeS5jLTEwMy19XFxuZHJpdmVycy9uZXQvcGh5L2ZpeGVkX3BoeS5jOjEwNDpFWFBPUlRfU1lNQk9MX0dQTChmaXhlZF9waHlfc2V0X2xpbmtfdXBkYXRlKTtcXG5kcml2ZXJzL25ldC9waHkvZml4ZWRfcGh5LmMtMTA1LVxcbmRyaXZlcnMvbmV0L3BoeS9maXhlZF9waHkuYzoxMDY6c3RhdGljIHZvaWQgZml4ZWRfcGh5X2RlbChpbnQgcGh5X2FkZHIpXFxuZHJpdmVycy9uZXQvcGh5L2ZpeGVkX3BoeS5jLTEwNy17XFxuZHJpdmVycy9uZXQvcGh5L2ZpeGVkX3BoeS5jOjEwODpcXHRzdHJ1Y3QgZml4ZWRfcGh5ICpmcDtcXG5kcml2ZXJzL25ldC9waHkvZml4ZWRfcGh5LmMtMTA5LVxcbmRyaXZlcnMvbmV0L3BoeS9maXhlZF9waHkuYzoxMTA6XFx0ZnAgPSBmaXhlZF9waHlfZmluZChwaHlfYWRkcik7XFxuZHJpdmVycy9uZXQvcGh5L2ZpeGVkX3BoeS5jLTExMS1cXHRpZiAoIWZwKVxcbi0tXFxuZHJpdmVycy9uZXQvcGh5L2ZpeGVkX3BoeS5jLTExNC1cXHRtZW1zZXQoZnAsIDAsIHNpemVvZigqZnApKTtcXG5kcml2ZXJzL25ldC9waHkvZml4ZWRfcGh5LmM6MTE1OlxcdGNsZWFyX2JpdChwaHlfYWRkciwgZml4ZWRfcGh5X2lkcyk7XFxuZHJpdmVycy9uZXQvcGh5L2ZpeGVkX3BoeS5jLTExNi19XFxuZHJpdmVycy9uZXQvcGh5L2ZpeGVkX3BoeS5jLTExNy1cXG5kcml2ZXJzL25ldC9waHkvZml4ZWRfcGh5LmM6MTE4OnN0YXRpYyBpbnQgZml4ZWRfcGh5X2dldF9mcmVlX2FkZHIodm9pZClcXG5kcml2ZXJzL25ldC9waHkvZml4ZWRfcGh5LmMtMTE5LXtcXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9maXhlZF9waHkuYy0xMjItXFx0ZG8ge1xcbmRyaXZlcnMvbmV0L3BoeS9maXhlZF9waHkuYzoxMjM6XFx0XFx0YWRkciA9IGZpbmRfZmlyc3RfemVyb19iaXQoZml4ZWRfcGh5X2lkcywgTlVNX0ZQKTtcXG5kcml2ZXJzL25ldC9waHkvZml4ZWRfcGh5LmMtMTI0LVxcdFxcdGlmIChhZGRyID09IE5VTV9GUClcXG5kcml2ZXJzL25ldC9waHkvZml4ZWRfcGh5LmMtMTI1LVxcdFxcdFxcdHJldHVybiAtRU5PU1BDO1xcbmRyaXZlcnMvbmV0L3BoeS9maXhlZF9waHkuYzoxMjY6XFx0fSB3aGlsZSAodGVzdF9hbmRfc2V0X2JpdChhZGRyLCBmaXhlZF9waHlfaWRzKSk7XFxuZHJpdmVycy9uZXQvcGh5L2ZpeGVkX3BoeS5jLTEyNy1cXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9maXhlZF9waHkuYy0xMzAtXFxuZHJpdmVycy9uZXQvcGh5L2ZpeGVkX3BoeS5jOjEzMTpzdHJ1Y3QgcGh5X2RldmljZSAqZml4ZWRfcGh5X3JlZ2lzdGVyKGNvbnN0IHN0cnVjdCBmaXhlZF9waHlfc3RhdHVzICpzdGF0dXMsXFxuZHJpdmVycy9uZXQvcGh5L2ZpeGVkX3BoeS5jLTEzMi1cXHRcXHRcXHRcXHQgICAgICBzdHJ1Y3QgZGV2aWNlX25vZGUgKm5wKVxcbi0tXFxuZHJpdmVycy9uZXQvcGh5L2ZpeGVkX3BoeS5jLTE0NS1cXHQvKiBHZXQgdGhlIG5leHQgYXZhaWxhYmxlIFBIWSBhZGRyZXNzLCB1cCB0byBOVU1fRlAgKi9cXG5kcml2ZXJzL25ldC9waHkvZml4ZWRfcGh5LmM6MTQ2OlxcdHBoeV9hZGRyID0gZml4ZWRfcGh5X2dldF9mcmVlX2FkZHIoKTtcXG5kcml2ZXJzL25ldC9waHkvZml4ZWRfcGh5LmMtMTQ3LVxcdGlmIChwaHlfYWRkciBcXHUwMDNjIDApXFxuLS1cXG5kcml2ZXJzL25ldC9waHkvZml4ZWRfcGh5LmMtMTQ5LVxcbmRyaXZlcnMvbmV0L3BoeS9maXhlZF9waHkuYzoxNTA6XFx0Zm1iX2ZpeGVkX3BoeXNbcGh5X2FkZHJdLnN0YXR1cyA9ICpzdGF0dXM7XFxuZHJpdmVycy9uZXQvcGh5L2ZpeGVkX3BoeS5jOjE1MTpcXHRmbWJfZml4ZWRfcGh5c1twaHlfYWRkcl0uc3RhdHVzLmxpbmsgPSB0cnVlO1xcbmRyaXZlcnMvbmV0L3BoeS9maXhlZF9waHkuYy0xNTItXFxuLS1cXG5kcml2ZXJzL25ldC9waHkvZml4ZWRfcGh5LmMtMTU0LVxcdGlmIChJU19FUlIocGh5KSkge1xcbmRyaXZlcnMvbmV0L3BoeS9maXhlZF9waHkuYzoxNTU6XFx0XFx0Zml4ZWRfcGh5X2RlbChwaHlfYWRkcik7XFxuZHJpdmVycy9uZXQvcGh5L2ZpeGVkX3BoeS5jLTE1Ni1cXHRcXHRyZXR1cm4gRVJSX1BUUigtRUlOVkFMKTtcXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9maXhlZF9waHkuYy0xNjYtXFx0XFx0b2Zfbm9kZV9wdXQobnApO1xcbmRyaXZlcnMvbmV0L3BoeS9maXhlZF9waHkuYzoxNjc6XFx0XFx0Zml4ZWRfcGh5X2RlbChwaHlfYWRkcik7XFxuZHJpdmVycy9uZXQvcGh5L2ZpeGVkX3BoeS5jLTE2OC1cXHRcXHRyZXR1cm4gRVJSX1BUUihyZXQpO1xcbi0tXFxuZHJpdmVycy9uZXQvcGh5L2ZpeGVkX3BoeS5jLTE3Mi19XFxuZHJpdmVycy9uZXQvcGh5L2ZpeGVkX3BoeS5jOjE3MzpFWFBPUlRfU1lNQk9MX0dQTChmaXhlZF9waHlfcmVnaXN0ZXIpO1xcbmRyaXZlcnMvbmV0L3BoeS9maXhlZF9waHkuYy0xNzQtXFxuZHJpdmVycy9uZXQvcGh5L2ZpeGVkX3BoeS5jOjE3NTpzdHJ1Y3QgcGh5X2RldmljZSAqZml4ZWRfcGh5X3JlZ2lzdGVyXzEwMGZkKHZvaWQpXFxuZHJpdmVycy9uZXQvcGh5L2ZpeGVkX3BoeS5jLTE3Ni17XFxuZHJpdmVycy9uZXQvcGh5L2ZpeGVkX3BoeS5jOjE3NzpcXHRzdGF0aWMgY29uc3Qgc3RydWN0IGZpeGVkX3BoeV9zdGF0dXMgc3RhdHVzID0ge1xcbmRyaXZlcnMvbmV0L3BoeS9maXhlZF9waHkuYy0xNzgtXFx0XFx0LnNwZWVkXFx0PSBTUEVFRF8xMDAsXFxuLS1cXG5kcml2ZXJzL25ldC9waHkvZml4ZWRfcGh5LmMtMTgxLVxcbmRyaXZlcnMvbmV0L3BoeS9maXhlZF9waHkuYzoxODI6XFx0cmV0dXJuIGZpeGVkX3BoeV9yZWdpc3RlcihcXHUwMDI2c3RhdHVzLCBOVUxMKTtcXG5kcml2ZXJzL25ldC9waHkvZml4ZWRfcGh5LmMtMTgzLX1cXG5kcml2ZXJzL25ldC9waHkvZml4ZWRfcGh5LmM6MTg0OkVYUE9SVF9TWU1CT0xfR1BMKGZpeGVkX3BoeV9yZWdpc3Rlcl8xMDBmZCk7XFxuZHJpdmVycy9uZXQvcGh5L2ZpeGVkX3BoeS5jLTE4NS1cXG5kcml2ZXJzL25ldC9waHkvZml4ZWRfcGh5LmM6MTg2OnZvaWQgZml4ZWRfcGh5X3VucmVnaXN0ZXIoc3RydWN0IHBoeV9kZXZpY2UgKnBoeSlcXG5kcml2ZXJzL25ldC9waHkvZml4ZWRfcGh5LmMtMTg3LXtcXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9maXhlZF9waHkuYy0xODktXFx0b2Zfbm9kZV9wdXQocGh5LVxcdTAwM2VtZGlvLmRldi5vZl9ub2RlKTtcXG5kcml2ZXJzL25ldC9waHkvZml4ZWRfcGh5LmM6MTkwOlxcdGZpeGVkX3BoeV9kZWwocGh5LVxcdTAwM2VtZGlvLmFkZHIpO1xcbmRyaXZlcnMvbmV0L3BoeS9maXhlZF9waHkuYy0xOTEtXFx0cGh5X2RldmljZV9mcmVlKHBoeSk7XFxuZHJpdmVycy9uZXQvcGh5L2ZpeGVkX3BoeS5jLTE5Mi19XFxuZHJpdmVycy9uZXQvcGh5L2ZpeGVkX3BoeS5jOjE5MzpFWFBPUlRfU1lNQk9MX0dQTChmaXhlZF9waHlfdW5yZWdpc3Rlcik7XFxuZHJpdmVycy9uZXQvcGh5L2ZpeGVkX3BoeS5jLTE5NC1cXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9waHlsaW5rLmM9MzM2MT1zdGF0aWMgaW50IHBoeWxpbmtfbWlpX2VtdWxfcmVhZCh1bnNpZ25lZCBpbnQgcmVnLFxcbi0tXFxuZHJpdmVycy9uZXQvcGh5L3BoeWxpbmsuYy0zMzYzLXtcXG5kcml2ZXJzL25ldC9waHkvcGh5bGluay5jOjMzNjQ6XFx0c3RydWN0IGZpeGVkX3BoeV9zdGF0dXMgZnM7XFxuZHJpdmVycy9uZXQvcGh5L3BoeWxpbmsuYy0zMzY1LVxcdHVuc2lnbmVkIGxvbmcgKmxwYSA9IHN0YXRlLVxcdTAwM2VscF9hZHZlcnRpc2luZztcXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9zd3BoeS5jLTQtICpcXG5kcml2ZXJzL25ldC9waHkvc3dwaHkuYzo1OiAqIENvZGUgdGFrZW4gZnJvbSBmaXhlZF9waHkuYyBieSBSdXNzZWxsIEtpbmcuXFxuZHJpdmVycy9uZXQvcGh5L3N3cGh5LmMtNi0gKlxcbi0tXFxuZHJpdmVycy9uZXQvcGh5L3N3cGh5LmM9NzE9c3RhdGljIGludCBzd3BoeV9kZWNvZGVfc3BlZWQoaW50IHNwZWVkKVxcbi0tXFxuZHJpdmVycy9uZXQvcGh5L3N3cGh5LmMtOTItICovXFxuZHJpdmVycy9uZXQvcGh5L3N3cGh5LmM6OTM6aW50IHN3cGh5X3ZhbGlkYXRlX3N0YXRlKGNvbnN0IHN0cnVjdCBmaXhlZF9waHlfc3RhdHVzICpzdGF0ZSlcXG5kcml2ZXJzL25ldC9waHkvc3dwaHkuYy05NC17XFxuLS1cXG5kcml2ZXJzL25ldC9waHkvc3dwaHkuYz0xMDY9RVhQT1JUX1NZTUJPTF9HUEwoc3dwaHlfdmFsaWRhdGVfc3RhdGUpO1xcbi0tXFxuZHJpdmVycy9uZXQvcGh5L3N3cGh5LmMtMTE0LSAqL1xcbmRyaXZlcnMvbmV0L3BoeS9zd3BoeS5jOjExNTppbnQgc3dwaHlfcmVhZF9yZWcoaW50IHJlZywgY29uc3Qgc3RydWN0IGZpeGVkX3BoeV9zdGF0dXMgKnN0YXRlKVxcbmRyaXZlcnMvbmV0L3BoeS9zd3BoeS5jLTExNi17XFxuLS1cXG5kcml2ZXJzL25ldC9waHkvc3dwaHkuaC00LVxcbmRyaXZlcnMvbmV0L3BoeS9zd3BoeS5oOjU6c3RydWN0IGZpeGVkX3BoeV9zdGF0dXM7XFxuZHJpdmVycy9uZXQvcGh5L3N3cGh5LmgtNi1cXG5kcml2ZXJzL25ldC9waHkvc3dwaHkuaDo3OmludCBzd3BoeV92YWxpZGF0ZV9zdGF0ZShjb25zdCBzdHJ1Y3QgZml4ZWRfcGh5X3N0YXR1cyAqc3RhdGUpO1xcbmRyaXZlcnMvbmV0L3BoeS9zd3BoeS5oOjg6aW50IHN3cGh5X3JlYWRfcmVnKGludCByZWcsIGNvbnN0IHN0cnVjdCBmaXhlZF9waHlfc3RhdHVzICpzdGF0ZSk7XFxuZHJpdmVycy9uZXQvcGh5L3N3cGh5LmgtOS1cXG4tLVxcbmluY2x1ZGUvbGludXgvcGh5X2ZpeGVkLmgtNi1cXG5pbmNsdWRlL2xpbnV4L3BoeV9maXhlZC5oOjc6c3RydWN0IGZpeGVkX3BoeV9zdGF0dXMge1xcbmluY2x1ZGUvbGludXgvcGh5X2ZpeGVkLmgtOC1cXHRpbnQgc3BlZWQ7XFxuLS1cXG5pbmNsdWRlL2xpbnV4L3BoeV9maXhlZC5oPTE2PXN0cnVjdCBuZXRfZGV2aWNlO1xcbi0tXFxuaW5jbHVkZS9saW51eC9waHlfZml4ZWQuaC0xOC0jaWYgSVNfRU5BQkxFRChDT05GSUdfRklYRURfUEhZKVxcbmluY2x1ZGUvbGludXgvcGh5X2ZpeGVkLmg6MTk6ZXh0ZXJuIGludCBmaXhlZF9waHlfY2hhbmdlX2NhcnJpZXIoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgYm9vbCBuZXdfY2Fycmllcik7XFxuaW5jbHVkZS9saW51eC9waHlfZml4ZWQuaDoyMDpzdHJ1Y3QgcGh5X2RldmljZSAqZml4ZWRfcGh5X3JlZ2lzdGVyKGNvbnN0IHN0cnVjdCBmaXhlZF9waHlfc3RhdHVzICpzdGF0dXMsXFxuaW5jbHVkZS9saW51eC9waHlfZml4ZWQuaC0yMS1cXHRcXHRcXHRcXHQgICAgICBzdHJ1Y3QgZGV2aWNlX25vZGUgKm5wKTtcXG5pbmNsdWRlL2xpbnV4L3BoeV9maXhlZC5oOjIyOnN0cnVjdCBwaHlfZGV2aWNlICpmaXhlZF9waHlfcmVnaXN0ZXJfMTAwZmQodm9pZCk7XFxuaW5jbHVkZS9saW51eC9waHlfZml4ZWQuaC0yMy1cXG5pbmNsdWRlL2xpbnV4L3BoeV9maXhlZC5oOjI0OmV4dGVybiB2b2lkIGZpeGVkX3BoeV91bnJlZ2lzdGVyKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpO1xcbmluY2x1ZGUvbGludXgvcGh5X2ZpeGVkLmg6MjU6ZXh0ZXJuIGludCBmaXhlZF9waHlfc2V0X2xpbmtfdXBkYXRlKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYsXFxuaW5jbHVkZS9saW51eC9waHlfZml4ZWQuaC0yNi1cXHRcXHRcXHRpbnQgKCpsaW5rX3VwZGF0ZSkoc3RydWN0IG5ldF9kZXZpY2UgKixcXG5pbmNsdWRlL2xpbnV4L3BoeV9maXhlZC5oOjI3OlxcdFxcdFxcdFxcdFxcdCAgIHN0cnVjdCBmaXhlZF9waHlfc3RhdHVzICopKTtcXG5pbmNsdWRlL2xpbnV4L3BoeV9maXhlZC5oLTI4LSNlbHNlXFxuaW5jbHVkZS9saW51eC9waHlfZml4ZWQuaD0yOT1zdGF0aWMgaW5saW5lIHN0cnVjdCBwaHlfZGV2aWNlICpcXG5pbmNsdWRlL2xpbnV4L3BoeV9maXhlZC5oOjMwOmZpeGVkX3BoeV9yZWdpc3Rlcihjb25zdCBzdHJ1Y3QgZml4ZWRfcGh5X3N0YXR1cyAqc3RhdHVzLFxcbmluY2x1ZGUvbGludXgvcGh5X2ZpeGVkLmgtMzEtXFx0XFx0ICAgc3RydWN0IGRldmljZV9ub2RlICpucClcXG4tLVxcbmluY2x1ZGUvbGludXgvcGh5X2ZpeGVkLmgtMzUtXFxuaW5jbHVkZS9saW51eC9waHlfZml4ZWQuaDozNjpzdGF0aWMgaW5saW5lIHN0cnVjdCBwaHlfZGV2aWNlICpmaXhlZF9waHlfcmVnaXN0ZXJfMTAwZmQodm9pZClcXG5pbmNsdWRlL2xpbnV4L3BoeV9maXhlZC5oLTM3LXtcXG4tLVxcbmluY2x1ZGUvbGludXgvcGh5X2ZpeGVkLmgtNDAtXFxuaW5jbHVkZS9saW51eC9waHlfZml4ZWQuaDo0MTpzdGF0aWMgaW5saW5lIHZvaWQgZml4ZWRfcGh5X3VucmVnaXN0ZXIoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcXG5pbmNsdWRlL2xpbnV4L3BoeV9maXhlZC5oLTQyLXtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDNUMDc6MzY6MTguNzQ1NjMwMDExWiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MjMxMTcyMDEzNTUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQ3VycmVudCBMaW5lIG9mIFJlYXNvbmluZyoqXG5cbk9rYXksIHNvIEknbSB0cnlpbmcgdG8gZmlndXJlIG91dCBob3cgdG8gdGVzdCB0aGVzZSBSZWFsdGVrIFBIWSBkcml2ZXJzIGluIGEgdmlydHVhbCBlbnZpcm9ubWVudC4gRmlyc3QgdGhvdWdodCwgYGZpeGVkX3BoeWAgd29uJ3Qgd29yayDigJMgdGhhdCdzIGZvciBmaXhlZCBsaW5rcywgbm90IHRoZSBkeW5hbWljIG5hdHVyZSBvZiBhIFJlYWx0ZWsgUEhZLiBJIG5lZWQgc29tZXRoaW5nIHRoYXQgKnNpbXVsYXRlcyogYSBSZWFsdGVrIFBIWS4gQ2FuIEkgZXZlbiBpbnN0YW50aWF0ZSBvbmUgdmlydHVhbGx5P1xuXG5Vc2luZyB0aGluZ3MgbGlrZSBgbmV0ZGV2c2ltYCwgYGR1bW15YCwgb3IgYHZldGhgIGlzIGEgZGVhZCBlbmQ7IHRoZXkgZG9uJ3QgaW52b2x2ZSBQSFlzIGF0IGFsbC4gQnV0IHdhaXTigKYgU3l6a2FsbGVyIHVzZXMgYHR1bmAsIGB0YXBgLCBhbmQgYHZldGhgLCBkb2Vzbid0IGl0PyBDb3VsZCBTeXprYWxsZXIgYmUgdXNlZCB0byBmdXp6IFBIWSBkcml2ZXJzPyBJdCBoYXMgYSBgc3l6X2dlbmV0bGlua2AgaW50ZXJmYWNlLCBkb2Vzbid0IGl0PyBJcyB0aGVyZSBhbiBgZXRodG9vbGAgbmV0bGluayBpbnRlcmZhY2U/IFBlcmhhcHMgSSBjYW4gdHJpZ2dlciBQSFkgb3BlcmF0aW9ucyBvbiBhIHZpcnR1YWwgZGV2aWNlIHVzaW5nIHRoYXQuXG5cbkhvd2V2ZXIsIHZpcnR1YWwgZGV2aWNlcyB0eXBpY2FsbHkgZG9uJ3QgKmhhdmUqIGEgUEhZIGRldmljZSBhdHRhY2hlZCwgYW5kIEkgbmVlZCBhIGRldmljZSB0byB0ZXN0IHRoZSBwaHkgZnVuY3Rpb25hbGl0eS4gQnV0LCBoYW5nIG9uLi4uIHdoYXQgYWJvdXQgYG1hY3ZsYW5gIG9yIGB2bGFuYD8gVGhvc2Ugc2l0ICpvbiB0b3AqIG9mIGEgcmVhbCBkZXZpY2UsIGJ1dCBpZiB0aGVyZSdzIG5vIHJlYWwgZGV2aWNlLCB0aGVuIHRoZXJlJ3Mgbm8gUEhZLlxuXG5BaGEhIFdhaXTigKYgVVNCIG5ldHdvcmsgYWRhcHRlcnMhIFN5emthbGxlciBmdXp6ZXMgVVNCIGRldmljZXMsIHVzaW5nIGBkdW1teV9oY2RgIGFuZCBgc3l6X3VzYl9jb25uZWN0YC4gTWFueSBVU0IgbmV0d29yayBkcml2ZXJzICpkbyogdXNlIFBIWXMhIFRoaXMgY291bGQgYmUgdGhlIHNvbHV0aW9uLlxuXG5UaGUga2V5IHF1ZXN0aW9uIG5vdyBpcywgZG9lcyAqYW55KiBVU0IgbmV0d29yayBkcml2ZXIgdXNlIE1ESU8gYW5kIGFsbG93IGEgUmVhbHRlayBQSFkgdG8gYmUgYXR0YWNoZWQ/IExldCdzIGNoZWNrIHRoYXQgYW5nbGUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE4ODAzLCJPdXRwdXRUb2tlbnMiOjMxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjUzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAzVDA3OjM2OjQxLjg2MjgzMzUwNVoiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MzkyMzU4NzM2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm1kaW9idXNfcmVnaXN0ZXJcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvdXNiL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC91c2IvYXNpeF9kZXZpY2VzLmM9NjY5PXN0YXRpYyBpbnQgYXg4ODc3Ml9pbml0X21kaW8oc3RydWN0IHVzYm5ldCAqZGV2KVxcbi0tXFxuZHJpdmVycy9uZXQvdXNiL2FzaXhfZGV2aWNlcy5jLTY4Ni1cXG5kcml2ZXJzL25ldC91c2IvYXNpeF9kZXZpY2VzLmM6Njg3OlxcdHJldCA9IG1kaW9idXNfcmVnaXN0ZXIocHJpdi1cXHUwMDNlbWRpbyk7XFxuZHJpdmVycy9uZXQvdXNiL2FzaXhfZGV2aWNlcy5jLTY4OC1cXHRpZiAocmV0KSB7XFxuLS1cXG5kcml2ZXJzL25ldC91c2IvYXg4ODE3MmEuYz02MT1zdGF0aWMgaW50IGF4ODgxNzJhX2luaXRfbWRpbyhzdHJ1Y3QgdXNibmV0ICpkZXYpXFxuLS1cXG5kcml2ZXJzL25ldC91c2IvYXg4ODE3MmEuYy03OS1cXG5kcml2ZXJzL25ldC91c2IvYXg4ODE3MmEuYzo4MDpcXHRyZXQgPSBtZGlvYnVzX3JlZ2lzdGVyKHByaXYtXFx1MDAzZW1kaW8pO1xcbmRyaXZlcnMvbmV0L3VzYi9heDg4MTcyYS5jLTgxLVxcdGlmIChyZXQpIHtcXG4tLVxcbmRyaXZlcnMvbmV0L3VzYi9sYW43OHh4LmM9MjA3MD1zdGF0aWMgaW50IGxhbjc4eHhfbWRpb19pbml0KHN0cnVjdCBsYW43OHh4X25ldCAqZGV2KVxcbi0tXFxuZHJpdmVycy9uZXQvdXNiL2xhbjc4eHguYy0yMTAwLVxcdG5vZGUgPSBvZl9nZXRfY2hpbGRfYnlfbmFtZShkZXYtXFx1MDAzZXVkZXYtXFx1MDAzZWRldi5vZl9ub2RlLCBcXFwibWRpb1xcXCIpO1xcbmRyaXZlcnMvbmV0L3VzYi9sYW43OHh4LmM6MjEwMTpcXHRyZXQgPSBvZl9tZGlvYnVzX3JlZ2lzdGVyKGRldi1cXHUwMDNlbWRpb2J1cywgbm9kZSk7XFxuZHJpdmVycy9uZXQvdXNiL2xhbjc4eHguYy0yMTAyLVxcdG9mX25vZGVfcHV0KG5vZGUpO1xcbi0tXFxuZHJpdmVycy9uZXQvdXNiL3Ntc2M5NXh4LmM9MTE0Nz1zdGF0aWMgaW50IHNtc2M5NXh4X2JpbmQoc3RydWN0IHVzYm5ldCAqZGV2LCBzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZilcXG4tLVxcbmRyaXZlcnMvbmV0L3VzYi9zbXNjOTV4eC5jLTEyNDEtXFxuZHJpdmVycy9uZXQvdXNiL3Ntc2M5NXh4LmM6MTI0MjpcXHRyZXQgPSBtZGlvYnVzX3JlZ2lzdGVyKHBkYXRhLVxcdTAwM2VtZGlvYnVzKTtcXG5kcml2ZXJzL25ldC91c2Ivc21zYzk1eHguYy0xMjQzLVxcdGlmIChyZXQpIHtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDNUMDc6MzY6NDIuMjU1MjA0MTkxWiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjI3MTU5NzI3MzE2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKlJlYWxpemluZyB0aGUgUlRMODI2MUMgUEhZIERyaXZlciBJbnN0YW50aWF0aW9uIE9wcG9ydHVuaXR5KipcblxuT2theSwgdGhpcyBpcyBwcm9taXNpbmcuIFVTQiBuZXR3b3JrIGFkYXB0ZXJzIGxpa2UgYGFzaXhgLCBgc21zYzk1eHhgLCBhbmQgYGxhbjc4eHhgIGFsbCByZWdpc3RlciBhbiBNRElPIGJ1cy4gVGhhdCdzIGtleS4gQW5kIHdoZW4gdGhhdCBNRElPIGJ1cyBnZXRzIHJlZ2lzdGVyZWQsIGl0IHNjYW5zIGZvciBQSFlzLiBOb3csIGlmIEkgY2FuIGNyYWZ0IGEgbW9jayBVU0IgZGV2aWNlIHVzaW5nIHN5emthbGxlciB0aGF0ICpzcGVjaWZpY2FsbHkqIHJlc3BvbmRzIHRvIE1ESU8gcmVhZHMgd2l0aCB0aGUgY29ycmVjdCBQSFkgSUQgZm9yIHRoZSBSVEw4MjYxQywgSSBjYW4gdHJpY2sgdGhlIGtlcm5lbCBpbnRvIGluc3RhbnRpYXRpbmcgdGhlIFJlYWx0ZWsgUEhZIGRyaXZlci5cblxuVGhlIFBIWSBJRCBmb3IgdGhlIFJUTDgyNjFDIGlzIGBSVExfODI2MUNfQ0dgLCB3aGljaCB0cmFuc2xhdGVzIHRvIGAweDAwMWNjODk4YC4gU28sIGlmIHRoZSBVU0IgZGV2aWNlIEkgY3JlYXRlIHJlc3BvbmRzIHdpdGggYDB4MDAxY2Agb24gcmVnaXN0ZXIgMiBhbmQgYDB4Yzg5OGAgb24gcmVnaXN0ZXIgMyBkdXJpbmcgYW4gTURJTyByZWFkLCB0aGUgTURJTyBidXMgKnNob3VsZCogbWF0Y2ggaXQgdG8gdGhlIFJlYWx0ZWsgUEhZIGRyaXZlciBhbmQgY2FsbCBpdHMgcHJvYmUgZnVuY3Rpb24hIExldCdzIHZlcmlmeSB0aGlzLlxuXG5JJ2xsIGNoZWNrIHRoZSBkcml2ZXIgY29kZTsgaXQncyBpbiBgZHJpdmVycy9uZXQvcGh5L3JlYWx0ZWsvcmVhbHRla19tYWluLmNgLiBBaCwgeWVzLCB0aGUgcGF0Y2ggZXhwbGljaXRseSBhZGRzIGEgbWF0Y2ggZm9yIHRoYXQgUEhZIElEOlxuXG5gYGBjXG5cdHtcblx0XHRQSFlfSURfTUFUQ0hfRVhBQ1QoUlRMXzgyNjFDX0NHKSxcblx0XHQubmFtZVx0XHRcdD0gXCJSZWFsdGVrIFJUTDgyNjFDIDEwR2JwcyBQSFlcIixcblx0XHQucHJvYmVcdFx0XHQ9IHJ0bDgyNjF4X3Byb2JlLFxuXHRcdC8vIC4uLiAob3RoZXIgZnVuY3Rpb25zKVxuXHR9LFxuYGBgXG5cblNvLCBpZiB0aGUgTURJTyBidXMgZGV0ZWN0cyB0aGlzIFBIWSBJRCwgaXQnbGwgYmluZCB0byB0aGlzIGRyaXZlciwgd2hpY2ggY29udGFpbnMgYWxsIHRoZSByZXF1aXJlZCBmdW5jdGlvbmFsaXR5LiBOb3csIGEgY3J1Y2lhbCBkZXRhaWwg4oCTIGlzIHRoaXMgYSBDbGF1c2UgMjIgb3IgYSBDbGF1c2UgNDUgUEhZPyBUaGUgcHJlc2VuY2Ugb2YgYGdlbnBoeV9jNDVfcG1hX3NvZnRfcmVzZXRgIGluIHRoZSBkcml2ZXIgc3VnZ2VzdHMgaXQgbWlnaHQgYmUgQ2xhdXNlIDQ1LlxuXG5JIG5lZWQgdG8gY29uZmlybSB0aGF0IGBhc2l4YCBhbmQgYHNtc2M5NXh4YCAodGhlIHBvdGVudGlhbCBVU0IgYWRhcHRlciBkcml2ZXJzKSBzdXBwb3J0IENsYXVzZSA0NSBNRElPIHJlYWRzLiBJZiB0aGV5IGRvbid0LCBJIG5lZWQgdG8gZmlndXJlIG91dCBpZiBhIENsYXVzZSAyMiBNRElPIGJ1cyBjYW4gaW5zdGFudGlhdGUgYSBDbGF1c2UgNDUgUEhZLiBTb21lIFBIWXMgYXJlIGZsZXhpYmxlIGFuZCBoYW5kbGUgYm90aC4gVGhlIGRyaXZlciBzZWVtcyB0byBiZSB1c2luZyBgTURJT19NTURfVkVORDJgIGFuZCBgTURJT19NTURfUE1BUE1EYCwgd2hpY2ggYXJlIGRlZmluaXRlbHkgQ2xhdXNlIDQ1IE1NRHMuIEdvb2QuICpIb3dldmVyKiwgYHBoeV9yZWFkX21tZGAgKmNhbiogYWN0dWFsbHkgd29yayBvdmVyIENsYXVzZSAyMiB1c2luZyBpbmRpcmVjdCBhY2Nlc3MgKHJlZ2lzdGVycyAxMyBhbmQgMTQpIGlmIHRoZSBQSFkgc3VwcG9ydHMgaXQuIFRoYXQncyBhIHZpdGFsIHBvaW50LlxuXG5BbmQsIGFyZSB0aGVyZSBldmVuIFVTQiBuZXR3b3JrIGFkYXB0ZXJzIHRoYXQgYXJlIENsYXVzZSA0NSBjb21wbGlhbnQ/IFllcywgc29tZXRoaW5nIGxpa2UgYEFxdWFudGlhYCBzaG91bGQgcHJvdmlkZSBhIGdvb2QgcmVmZXJlbmNlLiBUaW1lIHRvIGNoZWNrIGBkcml2ZXJzL25ldC91c2IvYCB0byBzZWUgaWYgdGhlcmUgYXJlIGdvb2QgZXhhbXBsZXMgb2YgQ2xhdXNlIDQ1IHN1cHBvcnQuIEknbSBnZXR0aW5nIGNsb3Nlci5cblxuXG4iLCJJbnB1dFRva2VucyI6MTk5NzQsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo3MDQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDNUMDc6Mzc6MDkuNDE0OTM0MzE3WiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNTQ2MDU2MjUsIkVycm9yIjoibm8gbWF0Y2hlcyIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIk1ESU9fLipfQzQ1XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L3VzYi9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiZXJyb3JcIjogXCJubyBtYXRjaGVzXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAzVDA3OjM3OjA5LjU2OTU0OTU3MloiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo3MTc4NTI1MDg3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlIGFuZCB3cml0dGVuIGluIHRoZSBmaXJzdCBwZXJzb246XG5cbioqRGVjb2RpbmcgdGhlIE1JSV9BRERSX0M0NSBGbGFnKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBmbGFnLCBgTUlJX0FERFJfQzQ1YC4gSW5zdGFudGx5LCBpdCBjbGlja3MuICpUaGF0J3MqIHRoZSBDbGF1c2UgNDUgaW5kaWNhdG9yISBSaWdodCwgQ2xhdXNlIDQ1IE1JSSByZWdpc3RlcnMsIGdvdCBpdC4gVGhpcyBtZWFucyB3ZSdyZSBkZWFsaW5nIHdpdGggdGhlIGFkdmFuY2VkIG1hbmFnZW1lbnQgaW50ZXJmYWNlLiBOb3QgdGhlIG9sZCBDbGF1c2UgMjIgc3R1ZmYuIE5vdyBJIG5lZWQgdG8gcmVtZW1iZXIgdGhlIG51YW5jZXMgb2YgQ2xhdXNlIDQ1LCB0aGUgcmVnaXN0ZXIgYWRkcmVzc2luZyBzY2hlbWUsIHRoZSBleHRlbmRlZCByZWdpc3RlcnMsIHRoZeKApiBhaGEhIFRoaXMgZXhwbGFpbnMgdGhlIGJpdCBwYXR0ZXJuIEkgd2FzIHNlZWluZyBpbiB0aGUgZGF0YS4gV2l0aCBDbGF1c2UgNDUsIHRoZSBhZGRyZXNzaW5nIHdvcmtzIGRpZmZlcmVudGx5LiBJIG5lZWQgdG8gcmUtZXZhbHVhdGUgbXkgYXNzdW1wdGlvbiB3aXRoIHRoZSB1bmRlcnN0YW5kaW5nIHRoYXQgSSdtIG5vdCBkZWFsaW5nIHdpdGggdGhlIG9sZGVyLCBtb3JlIHN0cmFpZ2h0Zm9yd2FyZCBNSUkgcmVnaXN0ZXIgc2V0LlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMTM4MywiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIxLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAzVDA3OjM3OjE2Ljc0ODA3ODM4OVoiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTA4NTcxMzQ2LCJFcnJvciI6Im5vIG1hdGNoZXMiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJNSUlfQUREUl9DNDVcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvdXNiL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJlcnJvclwiOiBcIm5vIG1hdGNoZXNcIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDNUMDc6Mzc6MTYuODU2NjU2MTI1WiIsIlNlcSI6MTUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjExOTU4ODY3MTAyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIG15IG93bjpcblxuKipBbmFseXppbmcgUEhZIEFjY2VzcyBpbiBhIENsYXVzZSAyMiBMaW1pdGVkIEVudmlyb25tZW50KipcblxuQWxyaWdodCwgc28gZXZlbiBpZiB3ZSdyZSBkZWFsaW5nIHdpdGggYSBVU0IgZHJpdmVyIHRoYXQncyBvbmx5IGdpdmluZyB1cyBDbGF1c2UgMjIgc3VwcG9ydCwgSSBrbm93IHRoZSBQSFkgZnJhbWV3b3JrIGlzIGNsZXZlciBlbm91Z2ggdG8gc3RpbGwgdGFwIGludG8gdGhvc2UgQ2xhdXNlIDQ1IHJlZ2lzdGVycy4gSXTigJlsbCBkbyB0aGlzIHVzaW5nIGluZGlyZWN0IGFjY2VzcyB0aHJvdWdoIHRob3NlIHJlZ2lzdGVyIHBhaXJzLCAxMyBhbmQgMTQsIGFzIGxvbmcgYXMgdGhlIGJ1cyBpdHNlbGYgZG9lc27igJl0IGhhdmUgdGhlIGJ1aWx0LWluIGNhcGFiaWxpdHkgdG8gYHJlYWRfYzQ1YC4gSSdtIHByZXR0eSBzdXJlIEkndmUgc2VlbiB0aGF0IGJlaGF2aW9yIGltcGxlbWVudGVkIGJlZm9yZS4gVGhhdCdzIGEgZ29vZCBhcHByb2FjaC4gTGV0J3Mgc3RhcnQgYnkgZGlnZ2luZyBpbnRvIGBwaHlfcmVhZF9tbWRgIGFuZCBzZWUgZXhhY3RseSBob3cgaXQncyBoYW5kbGluZyB0aGlzIHNpdHVhdGlvbi4gVGltZSB0byBzZWUgdGhpcyBpbiBwcmFjdGljZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MjE2NDEsIk91dHB1dFRva2VucyI6MzIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo2MywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0wM1QwNzozNzoyOC44MTU1MjY2MzdaIiwiU2VxIjoxNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEzODM2NjcwNSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJwaHlfcmVhZF9tbWRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvcGh5L1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJcXG5GdWxsIG91dHB1dCBpcyB0b28gbG9uZywgc2hvd2luZyA1MDAgb3V0IG9mIDIxNzggbGluZXMuXFxuVXNlIG1vcmUgcHJlY2lzZSBleHByZXNzaW9uIGlmIHBvc3NpYmxlLlxcblxcbmRyaXZlcnMvbmV0L3BoeS9hZGluLmM9Mjc1PXN0YXRpYyBpbnQgYWRpbl9jb25maWdfcmdtaWlfbW9kZShzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxcbi0tXFxuZHJpdmVycy9uZXQvcGh5L2FkaW4uYy0yODQtXFxuZHJpdmVycy9uZXQvcGh5L2FkaW4uYzoyODU6XFx0cmVnID0gcGh5X3JlYWRfbW1kKHBoeWRldiwgTURJT19NTURfVkVORDEsIEFESU4xMzAwX0dFX1JHTUlJX0NGR19SRUcpO1xcbmRyaXZlcnMvbmV0L3BoeS9hZGluLmMtMjg2LVxcdGlmIChyZWcgXFx1MDAzYyAwKVxcbi0tXFxuZHJpdmVycy9uZXQvcGh5L2FkaW4uYz0zMjE9c3RhdGljIGludCBhZGluX2NvbmZpZ19ybWlpX21vZGUoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9hZGluLmMtMzMwLVxcbmRyaXZlcnMvbmV0L3BoeS9hZGluLmM6MzMxOlxcdHJlZyA9IHBoeV9yZWFkX21tZChwaHlkZXYsIE1ESU9fTU1EX1ZFTkQxLCBBRElOMTMwMF9HRV9STUlJX0NGR19SRUcpO1xcbmRyaXZlcnMvbmV0L3BoeS9hZGluLmMtMzMyLVxcdGlmIChyZWcgXFx1MDAzYyAwKVxcbi0tXFxuZHJpdmVycy9uZXQvcGh5L2FkaW4uYz00NDA9c3RhdGljIGludCBhZGluX2dldF9mYXN0X2Rvd24oc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldiwgdTggKm1zZWNzKVxcbi0tXFxuZHJpdmVycy9uZXQvcGh5L2FkaW4uYy00NDMtXFxuZHJpdmVycy9uZXQvcGh5L2FkaW4uYzo0NDQ6XFx0cmVnID0gcGh5X3JlYWRfbW1kKHBoeWRldiwgTURJT19NTURfVkVORDEsIEFESU4xMzAwX0ZMRF9FTl9SRUcpO1xcbmRyaXZlcnMvbmV0L3BoeS9hZGluLmMtNDQ1LVxcdGlmIChyZWcgXFx1MDAzYyAwKVxcbi0tXFxuZHJpdmVycy9uZXQvcGh5L2FkaW4uYz03OTU9c3RhdGljIGludCBhZGluX3NvZnRfcmVzZXQoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9hZGluLmMtODA4LVxcdC8qIElmIHdlIGdldCBhIHJlYWQgZXJyb3Igc29tZXRoaW5nIG1heSBiZSB3cm9uZyAqL1xcbmRyaXZlcnMvbmV0L3BoeS9hZGluLmM6ODA5OlxcdHJjID0gcGh5X3JlYWRfbW1kKHBoeWRldiwgTURJT19NTURfVkVORDEsXFxuZHJpdmVycy9uZXQvcGh5L2FkaW4uYy04MTAtXFx0XFx0XFx0ICBBRElOMTMwMF9HRV9TT0ZUX1JFU0VUX1JFRyk7XFxuLS1cXG5kcml2ZXJzL25ldC9waHkvYWRpbi5jPTgyOD1zdGF0aWMgaW50IGFkaW5fcmVhZF9tbWRfc3RhdF9yZWdzKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYsXFxuLS1cXG5kcml2ZXJzL25ldC9waHkvYWRpbi5jLTgzMy1cXG5kcml2ZXJzL25ldC9waHkvYWRpbi5jOjgzNDpcXHRyZXQgPSBwaHlfcmVhZF9tbWQocGh5ZGV2LCBNRElPX01NRF9WRU5EMSwgc3RhdC1cXHUwMDNlcmVnMSk7XFxuZHJpdmVycy9uZXQvcGh5L2FkaW4uYy04MzUtXFx0aWYgKHJldCBcXHUwMDNjIDApXFxuLS1cXG5kcml2ZXJzL25ldC9waHkvYWRpbi5jLTg0Mi1cXG5kcml2ZXJzL25ldC9waHkvYWRpbi5jOjg0MzpcXHRyZXQgPSBwaHlfcmVhZF9tbWQocGh5ZGV2LCBNRElPX01NRF9WRU5EMSwgc3RhdC1cXHUwMDNlcmVnMik7XFxuZHJpdmVycy9uZXQvcGh5L2FkaW4uYy04NDQtXFx0aWYgKHJldCBcXHUwMDNjIDApXFxuLS1cXG5kcml2ZXJzL25ldC9waHkvYWRpbi5jPTk0NT1zdGF0aWMgaW50IGFkaW5fY2FibGVfdGVzdF9yZXBvcnRfcGFpcihzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2LFxcbi0tXFxuZHJpdmVycy9uZXQvcGh5L2FkaW4uYy05NTAtXFxuZHJpdmVycy9uZXQvcGh5L2FkaW4uYzo5NTE6XFx0cmV0ID0gcGh5X3JlYWRfbW1kKHBoeWRldiwgTURJT19NTURfVkVORDEsXFxuZHJpdmVycy9uZXQvcGh5L2FkaW4uYy05NTItXFx0XFx0XFx0ICAgQURJTjEzMDBfQ0RJQUdfRFRMRF9SU0xUUyhwYWlyKSk7XFxuLS1cXG5kcml2ZXJzL25ldC9waHkvYWRpbi5jLTk2MS1cXG5kcml2ZXJzL25ldC9waHkvYWRpbi5jOjk2MjpcXHRyZXQgPSBwaHlfcmVhZF9tbWQocGh5ZGV2LCBNRElPX01NRF9WRU5EMSxcXG5kcml2ZXJzL25ldC9waHkvYWRpbi5jLTk2My1cXHRcXHRcXHQgICBBRElOMTMwMF9DRElBR19GTFRfRElTVChwYWlyKSk7XFxuLS1cXG5kcml2ZXJzL25ldC9waHkvYWRpbi5jPTk5MT1zdGF0aWMgaW50IGFkaW5fY2FibGVfdGVzdF9nZXRfc3RhdHVzKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYsXFxuLS1cXG5kcml2ZXJzL25ldC9waHkvYWRpbi5jLTk5Ny1cXG5kcml2ZXJzL25ldC9waHkvYWRpbi5jOjk5ODpcXHRyZXQgPSBwaHlfcmVhZF9tbWQocGh5ZGV2LCBNRElPX01NRF9WRU5EMSwgQURJTjEzMDBfQ0RJQUdfUlVOKTtcXG5kcml2ZXJzL25ldC9waHkvYWRpbi5jLTk5OS1cXHRpZiAocmV0IFxcdTAwM2MgMClcXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9hZGluMTEwMC5jPTc2PXN0YXRpYyBpbnQgYWRpbl9yZWFkX3N0YXR1cyhzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxcbi0tXFxuZHJpdmVycy9uZXQvcGh5L2FkaW4xMTAwLmMtODMtXFxuZHJpdmVycy9uZXQvcGh5L2FkaW4xMTAwLmM6ODQ6XFx0cmV0ID0gcGh5X3JlYWRfbW1kKHBoeWRldiwgTURJT19NTURfQU4sIEFESU5fQU5fUEhZX0lOU1RfU1RBVFVTKTtcXG5kcml2ZXJzL25ldC9waHkvYWRpbjExMDAuYy04NS1cXHRpZiAocmV0IFxcdTAwM2MgMClcXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9hZGluMTEwMC5jPTE0NT1zdGF0aWMgaW50IGFkaW5fcGh5X2Fja19pbnRyKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXFxuLS1cXG5kcml2ZXJzL25ldC9waHkvYWRpbjExMDAuYy0xNDctXFx0LyogQ2xlYXIgcGVuZGluZyBpbnRlcnJ1cHRzICovXFxuZHJpdmVycy9uZXQvcGh5L2FkaW4xMTAwLmM6MTQ4OlxcdGludCByYyA9IHBoeV9yZWFkX21tZChwaHlkZXYsIE1ESU9fTU1EX1ZFTkQyLFxcbmRyaXZlcnMvbmV0L3BoeS9hZGluMTEwMC5jLTE0OS1cXHRcXHRcXHQgICAgICBBRElOX1BIWV9TVUJTWVNfSVJRX1NUQVRVUyk7XFxuLS1cXG5kcml2ZXJzL25ldC9waHkvYWRpbjExMDAuYz0xNzM9c3RhdGljIGlycXJldHVybl90IGFkaW5fcGh5X2hhbmRsZV9pbnRlcnJ1cHQoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9hZGluMTEwMC5jLTE3Ni1cXG5kcml2ZXJzL25ldC9waHkvYWRpbjExMDAuYzoxNzc6XFx0aXJxX3N0YXR1cyA9IHBoeV9yZWFkX21tZChwaHlkZXYsIE1ESU9fTU1EX1ZFTkQyLFxcbmRyaXZlcnMvbmV0L3BoeS9hZGluMTEwMC5jLTE3OC1cXHRcXHRcXHRcXHQgIEFESU5fUEhZX1NVQlNZU19JUlFfU1RBVFVTKTtcXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9hZGluMTEwMC5jPTE5Mj1zdGF0aWMgaW50IGFkaW5fc2V0X3Bvd2VyZG93bl9tb2RlKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYsIGJvb2wgZW4pXFxuLS1cXG5kcml2ZXJzL25ldC9waHkvYWRpbjExMDAuYy0yMDEtXFxuZHJpdmVycy9uZXQvcGh5L2FkaW4xMTAwLmM6MjAyOlxcdHJldHVybiBwaHlfcmVhZF9tbWRfcG9sbF90aW1lb3V0KHBoeWRldiwgTURJT19NTURfVkVORDEsIEFESU5fQ1JTTV9TVEFULCByZXQsXFxuZHJpdmVycy9uZXQvcGh5L2FkaW4xMTAwLmMtMjAzLVxcdFxcdFxcdFxcdFxcdCAhIShyZXQgXFx1MDAyNiBBRElOX0NSU01fU0ZUX1BEX1JEWSkgPT0gZW4sXFxuLS1cXG5kcml2ZXJzL25ldC9waHkvYWRpbjExMDAuYz0yMzE9c3RhdGljIGludCBhZGluX3NvZnRfcmVzZXQoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9hZGluMTEwMC5jLTIzOC1cXG5kcml2ZXJzL25ldC9waHkvYWRpbjExMDAuYzoyMzk6XFx0cmV0dXJuIHBoeV9yZWFkX21tZF9wb2xsX3RpbWVvdXQocGh5ZGV2LCBNRElPX01NRF9WRU5EMSwgQURJTl9DUlNNX1NUQVQsIHJldCxcXG5kcml2ZXJzL25ldC9waHkvYWRpbjExMDAuYy0yNDAtXFx0XFx0XFx0XFx0XFx0IChyZXQgXFx1MDAyNiBBRElOX0NSU01fU1lTX1JEWSksXFxuLS1cXG5kcml2ZXJzL25ldC9waHkvYWRpbjExMDAuYz0yNDQ9c3RhdGljIGludCBhZGluX2dldF9mZWF0dXJlcyhzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxcbi0tXFxuZHJpdmVycy9uZXQvcGh5L2FkaW4xMTAwLmMtMjUwLVxcbmRyaXZlcnMvbmV0L3BoeS9hZGluMTEwMC5jOjI1MTpcXHRyZXQgPSBwaHlfcmVhZF9tbWQocGh5ZGV2LCBNRElPX01NRF9QTUFQTUQsIE1ESU9fUE1BXzEwVDFMX1NUQVQpO1xcbmRyaXZlcnMvbmV0L3BoeS9hZGluMTEwMC5jLTI1Mi1cXHRpZiAocmV0IFxcdTAwM2MgMClcXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9hZGluMTEwMC5jPTI3OT1zdGF0aWMgaW50IGFkaW5fZ2V0X3NxaShzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxcbi0tXFxuZHJpdmVycy9uZXQvcGh5L2FkaW4xMTAwLmMtMjg0LVxcbmRyaXZlcnMvbmV0L3BoeS9hZGluMTEwMC5jOjI4NTpcXHRyZXQgPSBwaHlfcmVhZF9tbWQocGh5ZGV2LCBNRElPX01NRF9QTUFQTUQsIE1ESU9fU1RBVDEpO1xcbmRyaXZlcnMvbmV0L3BoeS9hZGluMTEwMC5jLTI4Ni1cXHRpZiAocmV0IFxcdTAwM2MgMClcXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9hZGluMTEwMC5jLTI5MC1cXG5kcml2ZXJzL25ldC9waHkvYWRpbjExMDAuYzoyOTE6XFx0cmV0ID0gcGh5X3JlYWRfbW1kKHBoeWRldiwgTURJT19TVEFUMSwgQURJTl9NU0VfVkFMKTtcXG5kcml2ZXJzL25ldC9waHkvYWRpbjExMDAuYy0yOTItXFx0aWYgKHJldCBcXHUwMDNjIDApXFxuLS1cXG5kcml2ZXJzL25ldC9waHkvYWlyX2FuODgwMS5jPTM1Nz1zdGF0aWMgaW50IGFuODgwMXJfbGVkX2h3X2NvbnRyb2xfZ2V0KHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYsIHU4IGluZGV4LFxcbi0tXFxuZHJpdmVycy9uZXQvcGh5L2Fpcl9hbjg4MDEuYy0zNjQtXFxuZHJpdmVycy9uZXQvcGh5L2Fpcl9hbjg4MDEuYzozNjU6XFx0b24gPSBwaHlfcmVhZF9tbWQocGh5ZGV2LCBNRElPX01NRF9WRU5EMiwgTEVEX09OX0NUUkwoaW5kZXgpKTtcXG5kcml2ZXJzL25ldC9waHkvYWlyX2FuODgwMS5jLTM2Ni1cXHRpZiAob24gXFx1MDAzYyAwKVxcbi0tXFxuZHJpdmVycy9uZXQvcGh5L2Fpcl9hbjg4MDEuYy0zNjgtXFxuZHJpdmVycy9uZXQvcGh5L2Fpcl9hbjg4MDEuYzozNjk6XFx0YmxpbmsgPSBwaHlfcmVhZF9tbWQocGh5ZGV2LCBNRElPX01NRF9WRU5EMiwgTEVEX0JMSU5LX0NUUkwoaW5kZXgpKTtcXG5kcml2ZXJzL25ldC9waHkvYWlyX2FuODgwMS5jLTM3MC1cXHRpZiAoYmxpbmsgXFx1MDAzYyAwKVxcbi0tXFxuZHJpdmVycy9uZXQvcGh5L2Fpcl9lbjg4MTFoLmM9MzI3PXN0YXRpYyBpbnQgZW44ODExaF93YWl0X21jdV9yZWFkeShzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxcbi0tXFxuZHJpdmVycy9uZXQvcGh5L2Fpcl9lbjg4MTFoLmMtMzM2LVxcdC8qIEJlY2F1c2Ugb2YgbWRpby1sb2NrLCBtYXkgaGF2ZSB0byB3YWl0IGZvciBtdWx0aXBsZSBsb2FkcyAqL1xcbmRyaXZlcnMvbmV0L3BoeS9haXJfZW44ODExaC5jOjMzNzpcXHRyZXQgPSBwaHlfcmVhZF9tbWRfcG9sbF90aW1lb3V0KHBoeWRldiwgTURJT19NTURfVkVORDEsXFxuZHJpdmVycy9uZXQvcGh5L2Fpcl9lbjg4MTFoLmMtMzM4LVxcdFxcdFxcdFxcdFxcdEVOODgxMUhfUEhZX0ZXX1NUQVRVUywgcmVnX3ZhbHVlLFxcbi0tXFxuZHJpdmVycy9uZXQvcGh5L2Fpcl9lbjg4MTFoLmM9MTM2OD1zdGF0aWMgaW50IGVuODgxMWhfcmVhZF9zdGF0dXMoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9haXJfZW44ODExaC5jLTEzOTQtXFx0aWYgKHBoeV9pZF9jb21wYXJlX21vZGVsKHBoeWRldi1cXHUwMDNlcGh5X2lkLCBBTjg4MTFIQl9QSFlfSUQpKSB7XFxuZHJpdmVycy9uZXQvcGh5L2Fpcl9lbjg4MTFoLmM6MTM5NTpcXHRcXHR2YWwgPSBwaHlfcmVhZF9tbWQocGh5ZGV2LCBNRElPX01NRF9BTiwgTURJT19BTl8xMEdCVF9TVEFUKTtcXG5kcml2ZXJzL25ldC9waHkvYWlyX2VuODgxMWguYy0xMzk2LVxcdFxcdGlmICh2YWwgXFx1MDAzYyAwKVxcbi0tXFxuZHJpdmVycy9uZXQvcGh5L2FxdWFudGlhL2FxdWFudGlhX2Zpcm13YXJlLmM9OTA9c3RhdGljIGludCBhcXJfZndfbG9hZF9tZW1vcnkoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldiwgdTMyIGFkZHIsXFxuLS1cXG5kcml2ZXJzL25ldC9waHkvYXF1YW50aWEvYXF1YW50aWFfZmlybXdhcmUuYy0xMzctXFx0LyogLi4uZ2V0cyBDUkMgZnJvbSBNQUlMQk9YIGFmdGVyIHdlIGhhdmUgbG9hZGVkIHRoZSBlbnRpcmUgc2VjdGlvbi4uLiAqL1xcbmRyaXZlcnMvbmV0L3BoeS9hcXVhbnRpYS9hcXVhbnRpYV9maXJtd2FyZS5jOjEzODpcXHR1cF9jcmMgPSBwaHlfcmVhZF9tbWQocGh5ZGV2LCBNRElPX01NRF9WRU5EMSwgVkVORDFfR0xPQkFMX01BSUxCT1hfSU5URVJGQUNFMik7XFxuZHJpdmVycy9uZXQvcGh5L2FxdWFudGlhL2FxdWFudGlhX2Zpcm13YXJlLmMtMTM5LVxcdC8qIC4uLmFuZCBtYWtlIHN1cmUgaXQgZG9lcyBtYXRjaCBvdXIgY2FsY3VsYXRlZCBDUkMgKi9cXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9hcXVhbnRpYS9hcXVhbnRpYV9od21vbi5jPTQyPXN0YXRpYyBpbnQgYXFyX2h3bW9uX2dldChzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2LCBpbnQgcmVnLCBsb25nICp2YWx1ZSlcXG5kcml2ZXJzL25ldC9waHkvYXF1YW50aWEvYXF1YW50aWFfaHdtb24uYy00My17XFxuZHJpdmVycy9uZXQvcGh5L2FxdWFudGlhL2FxdWFudGlhX2h3bW9uLmM6NDQ6XFx0aW50IHRlbXAgPSBwaHlfcmVhZF9tbWQocGh5ZGV2LCBNRElPX01NRF9WRU5EMSwgcmVnKTtcXG5kcml2ZXJzL25ldC9waHkvYXF1YW50aWEvYXF1YW50aWFfaHdtb24uYy00NS1cXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9hcXVhbnRpYS9hcXVhbnRpYV9od21vbi5jPTY4PXN0YXRpYyBpbnQgYXFyX2h3bW9uX3Rlc3RfYml0KHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYsIGludCByZWcsIGludCBiaXQpXFxuZHJpdmVycy9uZXQvcGh5L2FxdWFudGlhL2FxdWFudGlhX2h3bW9uLmMtNjkte1xcbmRyaXZlcnMvbmV0L3BoeS9hcXVhbnRpYS9hcXVhbnRpYV9od21vbi5jOjcwOlxcdGludCB2YWwgPSBwaHlfcmVhZF9tbWQocGh5ZGV2LCBNRElPX01NRF9WRU5EMSwgcmVnKTtcXG5kcml2ZXJzL25ldC9waHkvYXF1YW50aWEvYXF1YW50aWFfaHdtb24uYy03MS1cXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9hcXVhbnRpYS9hcXVhbnRpYV9sZWRzLmM9NDc9aW50IGFxcl9waHlfbGVkX2h3X2NvbnRyb2xfZ2V0KHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYsIHU4IGluZGV4LFxcbi0tXFxuZHJpdmVycy9uZXQvcGh5L2FxdWFudGlhL2FxdWFudGlhX2xlZHMuYy01NC1cXG5kcml2ZXJzL25ldC9waHkvYXF1YW50aWEvYXF1YW50aWFfbGVkcy5jOjU1OlxcdHZhbCA9IHBoeV9yZWFkX21tZChwaHlkZXYsIE1ESU9fTU1EX1ZFTkQxLCBBUVJfTEVEX1BST1YoaW5kZXgpKTtcXG5kcml2ZXJzL25ldC9waHkvYXF1YW50aWEvYXF1YW50aWFfbGVkcy5jLTU2LVxcdGlmICh2YWwgXFx1MDAzYyAwKVxcbi0tXFxuZHJpdmVycy9uZXQvcGh5L2FxdWFudGlhL2FxdWFudGlhX21haW4uYz0xMzM9c3RhdGljIHU2NCBhcXIxMDdfZ2V0X3N0YXQoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldiwgaW50IGluZGV4KVxcbi0tXFxuZHJpdmVycy9uZXQvcGh5L2FxdWFudGlhL2FxdWFudGlhX21haW4uYy0xNDAtXFxuZHJpdmVycy9uZXQvcGh5L2FxdWFudGlhL2FxdWFudGlhX21haW4uYzoxNDE6XFx0dmFsID0gcGh5X3JlYWRfbW1kKHBoeWRldiwgTURJT19NTURfQzIyRVhULCBzdGF0LVxcdTAwM2VyZWcpO1xcbmRyaXZlcnMvbmV0L3BoeS9hcXVhbnRpYS9hcXVhbnRpYV9tYWluLmMtMTQyLVxcdGlmICh2YWwgXFx1MDAzYyAwKVxcbi0tXFxuZHJpdmVycy9uZXQvcGh5L2FxdWFudGlhL2FxdWFudGlhX21haW4uYy0xNDYtXFx0aWYgKGxlbl9oKSB7XFxuZHJpdmVycy9uZXQvcGh5L2FxdWFudGlhL2FxdWFudGlhX21haW4uYzoxNDc6XFx0XFx0dmFsID0gcGh5X3JlYWRfbW1kKHBoeWRldiwgTURJT19NTURfQzIyRVhULCBzdGF0LVxcdTAwM2VyZWcgKyAxKTtcXG5kcml2ZXJzL25ldC9waHkvYXF1YW50aWEvYXF1YW50aWFfbWFpbi5jLTE0OC1cXHRcXHRpZiAodmFsIFxcdTAwM2MgMClcXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9hcXVhbnRpYS9hcXVhbnRpYV9tYWluLmM9MjUzPXN0YXRpYyBpbnQgYXFyX2NvbmZpZ19pbnRyKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXFxuLS1cXG5kcml2ZXJzL25ldC9waHkvYXF1YW50aWEvYXF1YW50aWFfbWFpbi5jLTI1OS1cXHRcXHQvKiBDbGVhciBhbnkgcGVuZGluZyBpbnRlcnJ1cHRzIGJlZm9yZSBlbmFibGluZyB0aGVtICovXFxuZHJpdmVycy9uZXQvcGh5L2FxdWFudGlhL2FxdWFudGlhX21haW4uYzoyNjA6XFx0XFx0ZXJyID0gcGh5X3JlYWRfbW1kKHBoeWRldiwgTURJT19NTURfQU4sIE1ESU9fQU5fVFhfVkVORF9JTlRfU1RBVFVTMik7XFxuZHJpdmVycy9uZXQvcGh5L2FxdWFudGlhL2FxdWFudGlhX21haW4uYy0yNjEtXFx0XFx0aWYgKGVyciBcXHUwMDNjIDApXFxuLS1cXG5kcml2ZXJzL25ldC9waHkvYXF1YW50aWEvYXF1YW50aWFfbWFpbi5jLTI4Mi1cXHRcXHQvKiBDbGVhciBhbnkgcGVuZGluZyBpbnRlcnJ1cHRzIGFmdGVyIHdlIGhhdmUgZGlzYWJsZWQgdGhlbSAqL1xcbmRyaXZlcnMvbmV0L3BoeS9hcXVhbnRpYS9hcXVhbnRpYV9tYWluLmM6MjgzOlxcdFxcdGVyciA9IHBoeV9yZWFkX21tZChwaHlkZXYsIE1ESU9fTU1EX0FOLCBNRElPX0FOX1RYX1ZFTkRfSU5UX1NUQVRVUzIpO1xcbmRyaXZlcnMvbmV0L3BoeS9hcXVhbnRpYS9hcXVhbnRpYV9tYWluLmMtMjg0LVxcdFxcdGlmIChlcnIgXFx1MDAzYyAwKVxcbi0tXFxuZHJpdmVycy9uZXQvcGh5L2FxdWFudGlhL2FxdWFudGlhX21haW4uYz0yOTE9c3RhdGljIGlycXJldHVybl90IGFxcl9oYW5kbGVfaW50ZXJydXB0KHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXFxuLS1cXG5kcml2ZXJzL25ldC9waHkvYXF1YW50aWEvYXF1YW50aWFfbWFpbi5jLTI5NC1cXG5kcml2ZXJzL25ldC9waHkvYXF1YW50aWEvYXF1YW50aWFfbWFpbi5jOjI5NTpcXHRpcnFfc3RhdHVzID0gcGh5X3JlYWRfbW1kKHBoeWRldiwgTURJT19NTURfQU4sXFxuZHJpdmVycy9uZXQvcGh5L2FxdWFudGlhL2FxdWFudGlhX21haW4uYy0yOTYtXFx0XFx0XFx0XFx0ICBNRElPX0FOX1RYX1ZFTkRfSU5UX1NUQVRVUzIpO1xcbi0tXFxuZHJpdmVycy9uZXQvcGh5L2FxdWFudGlhL2FxdWFudGlhX21haW4uYz0zMTA9c3RhdGljIGludCBhcXJfcmVhZF9zdGF0dXMoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9hcXVhbnRpYS9hcXVhbnRpYV9tYWluLmMtMzE0LVxcdGlmIChwaHlkZXYtXFx1MDAzZWF1dG9uZWcgPT0gQVVUT05FR19FTkFCTEUpIHtcXG5kcml2ZXJzL25ldC9waHkvYXF1YW50aWEvYXF1YW50aWFfbWFpbi5jOjMxNTpcXHRcXHR2YWwgPSBwaHlfcmVhZF9tbWQocGh5ZGV2LCBNRElPX01NRF9BTiwgTURJT19BTl9SWF9MUF9TVEFUMSk7XFxuZHJpdmVycy9uZXQvcGh5L2FxdWFudGlhL2FxdWFudGlhX21haW4uYy0zMTYtXFx0XFx0aWYgKHZhbCBcXHUwMDNjIDApXFxuLS1cXG5kcml2ZXJzL25ldC9waHkvYXF1YW50aWEvYXF1YW50aWFfbWFpbi5jLTMzMC1cXHRpZiAodmFsKSB7XFxuZHJpdmVycy9uZXQvcGh5L2FxdWFudGlhL2FxdWFudGlhX21haW4uYzozMzE6XFx0XFx0dmFsID0gcGh5X3JlYWRfbW1kKHBoeWRldiwgTURJT19NTURfQU4sIE1ESU9fQU5fUkVTVkRfVkVORF9TVEFUVVMxKTtcXG5kcml2ZXJzL25ldC9waHkvYXF1YW50aWEvYXF1YW50aWFfbWFpbi5jLTMzMi1cXHRcXHRpZiAodmFsIFxcdTAwM2MgMClcXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9hcXVhbnRpYS9hcXVhbnRpYV9tYWluLmM9NDc2PXN0YXRpYyBpbnQgYXFyX2dlbjFfcmVhZF9yYXRlKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXFxuLS1cXG5kcml2ZXJzL25ldC9waHkvYXF1YW50aWEvYXF1YW50aWFfbWFpbi5jLTQ3OS1cXG5kcml2ZXJzL25ldC9waHkvYXF1YW50aWEvYXF1YW50aWFfbWFpbi5jOjQ4MDpcXHR2YWwgPSBwaHlfcmVhZF9tbWQocGh5ZGV2LCBNRElPX01NRF9BTiwgTURJT19BTl9UWF9WRU5EX1NUQVRVUzEpO1xcbmRyaXZlcnMvbmV0L3BoeS9hcXVhbnRpYS9hcXVhbnRpYV9tYWluLmMtNDgxLVxcdGlmICh2YWwgXFx1MDAzYyAwKVxcbi0tXFxuZHJpdmVycy9uZXQvcGh5L2FxdWFudGlhL2FxdWFudGlhX21haW4uYz01Mzc9c3RhdGljIGludCBhcXJfZ2VuMV9yZWFkX3N0YXR1cyhzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxcbi0tXFxuZHJpdmVycy9uZXQvcGh5L2FxdWFudGlhL2FxdWFudGlhX21haW4uYy01NTMtXFx0ICovXFxuZHJpdmVycy9uZXQvcGh5L2FxdWFudGlhL2FxdWFudGlhX21haW4uYzo1NTQ6XFx0cmV0ID0gcGh5X3JlYWRfbW1kX3BvbGxfdGltZW91dChwaHlkZXYsIE1ESU9fTU1EX1BIWVhTLFxcbmRyaXZlcnMvbmV0L3BoeS9hcXVhbnRpYS9hcXVhbnRpYV9tYWluLmMtNTU1LVxcdFxcdFxcdFxcdFxcdE1ESU9fUEhZWFNfVkVORF9JRl9TVEFUVVMsIHZhbCxcXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9hcXVhbnRpYS9hcXVhbnRpYV9tYWluLmM9NjI2PXN0YXRpYyBpbnQgYXFyMTA3X2dldF9kb3duc2hpZnQoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldiwgdTggKmRhdGEpXFxuLS1cXG5kcml2ZXJzL25ldC9waHkvYXF1YW50aWEvYXF1YW50aWFfbWFpbi5jLTYyOS1cXG5kcml2ZXJzL25ldC9waHkvYXF1YW50aWEvYXF1YW50aWFfbWFpbi5jOjYzMDpcXHR2YWwgPSBwaHlfcmVhZF9tbWQocGh5ZGV2LCBNRElPX01NRF9BTiwgTURJT19BTl9WRU5EX1BST1YpO1xcbmRyaXZlcnMvbmV0L3BoeS9hcXVhbnRpYS9hcXVhbnRpYV9tYWluLmMtNjMxLVxcdGlmICh2YWwgXFx1MDAzYyAwKVxcbi0tXFxuZHJpdmVycy9uZXQvcGh5L2FxdWFudGlhL2FxdWFudGlhX21haW4uYz02OTE9aW50IGFxcl93YWl0X3Jlc2V0X2NvbXBsZXRlKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXFxuLS1cXG5kcml2ZXJzL25ldC9waHkvYXF1YW50aWEvYXF1YW50aWFfbWFpbi5jLTY5NC1cXG5kcml2ZXJzL25ldC9waHkvYXF1YW50aWEvYXF1YW50aWFfbWFpbi5jOjY5NTpcXHRyZXQgPSByZWFkX3BvbGxfdGltZW91dChwaHlfcmVhZF9tbWQsIHZhbCwgdmFsICE9IDAsXFxuZHJpdmVycy9uZXQvcGh5L2FxdWFudGlhL2FxdWFudGlhX21haW4uYy02OTYtXFx0XFx0XFx0XFx0QVFSX0ZXX1dBSVRfU0xFRVBfVVMsIEFRUl9GV19XQUlUX1RJTUVPVVRfVVMsXFxuLS1cXG5kcml2ZXJzL25ldC9waHkvYXF1YW50aWEvYXF1YW50aWFfbWFpbi5jPTcwOD1zdGF0aWMgaW50IGFxcl9idWlsZF9maW5nZXJwcmludChzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxcbi0tXFxuZHJpdmVycy9uZXQvcGh5L2FxdWFudGlhL2FxdWFudGlhX21haW4uYy03MTQtXFxuZHJpdmVycy9uZXQvcGh5L2FxdWFudGlhL2FxdWFudGlhX21haW4uYzo3MTU6XFx0dmFsID0gcGh5X3JlYWRfbW1kKHBoeWRldiwgTURJT19NTURfVkVORDEsIFZFTkQxX0dMT0JBTF9GV19JRCk7XFxuZHJpdmVycy9uZXQvcGh5L2FxdWFudGlhL2FxdWFudGlhX21haW4uYy03MTYtXFx0aWYgKHZhbCBcXHUwMDNjIDApXFxuLS1cXG5kcml2ZXJzL25ldC9waHkvYXF1YW50aWEvYXF1YW50aWFfbWFpbi5jLTcyMS1cXG5kcml2ZXJzL25ldC9waHkvYXF1YW50aWEvYXF1YW50aWFfbWFpbi5jOjcyMjpcXHR2YWwgPSBwaHlfcmVhZF9tbWQocGh5ZGV2LCBNRElPX01NRF9WRU5EMSwgVkVORDFfR0xPQkFMX1JTVkRfU1RBVDEpO1xcbmRyaXZlcnMvbmV0L3BoeS9hcXVhbnRpYS9hcXVhbnRpYV9tYWluLmMtNzIzLVxcdGlmICh2YWwgXFx1MDAzYyAwKVxcbi0tXFxuZHJpdmVycy9uZXQvcGh5L2FxdWFudGlhL2FxdWFudGlhX21haW4uYy03MjgtXFxuZHJpdmVycy9uZXQvcGh5L2FxdWFudGlhL2FxdWFudGlhX21haW4uYzo3Mjk6XFx0dmFsID0gcGh5X3JlYWRfbW1kKHBoeWRldiwgTURJT19NTURfUE1BUE1ELCBQTUFQTURfRldfTUlTQ19JRCk7XFxuZHJpdmVycy9uZXQvcGh5L2FxdWFudGlhL2FxdWFudGlhX21haW4uYy03MzAtXFx0aWYgKHZhbCBcXHUwMDNjIDApXFxuLS1cXG5kcml2ZXJzL25ldC9waHkvYXF1YW50aWEvYXF1YW50aWFfbWFpbi5jLTczNC1cXG5kcml2ZXJzL25ldC9waHkvYXF1YW50aWEvYXF1YW50aWFfbWFpbi5jOjczNTpcXHR2YWwgPSBwaHlfcmVhZF9tbWQocGh5ZGV2LCBNRElPX01NRF9QTUFQTUQsIFBNQVBNRF9GV19NSVNDX1ZFUik7XFxuZHJpdmVycy9uZXQvcGh5L2FxdWFudGlhL2FxdWFudGlhX21haW4uYy03MzYtXFx0aWYgKHZhbCBcXHUwMDNjIDApXFxuLS1cXG5kcml2ZXJzL25ldC9waHkvYXF1YW50aWEvYXF1YW50aWFfbWFpbi5jPTgzMz1zdGF0aWMgaW50IGFxcl9nZW4yX3JlYWRfZ2xvYmFsX3N5c2NmZyhzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxcbi0tXFxuZHJpdmVycy9uZXQvcGh5L2FxdWFudGlhL2FxdWFudGlhX21haW4uYy04NDQtXFxuZHJpdmVycy9uZXQvcGh5L2FxdWFudGlhL2FxdWFudGlhX21haW4uYzo4NDU6XFx0XFx0dmFsID0gcGh5X3JlYWRfbW1kKHBoeWRldiwgTURJT19NTURfVkVORDEsXFxuZHJpdmVycy9uZXQvcGh5L2FxdWFudGlhL2FxdWFudGlhX21haW4uYy04NDYtXFx0XFx0XFx0XFx0ICAgYXFyX2dsb2JhbF9jZmdfcmVnc1tpXS5yZWcpO1xcbi0tXFxuZHJpdmVycy9uZXQvcGh5L2FxdWFudGlhL2FxdWFudGlhX21haW4uYz05MTA9c3RhdGljIGludCBhcXJfZ2VuMl9maWxsX2ludGVyZmFjZV9tb2RlcyhzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxcbi0tXFxuZHJpdmVycy9uZXQvcGh5L2FxdWFudGlhL2FxdWFudGlhX21haW4uYy05MjMtXFx0aWYgKHByaXYtXFx1MDAzZXdhaXRfb25fZ2xvYmFsX2NmZykge1xcbmRyaXZlcnMvbmV0L3BoeS9hcXVhbnRpYS9hcXVhbnRpYV9tYWluLmM6OTI0OlxcdFxcdHJldCA9IHBoeV9yZWFkX21tZF9wb2xsX3RpbWVvdXQocGh5ZGV2LCBNRElPX01NRF9WRU5EMSxcXG5kcml2ZXJzL25ldC9waHkvYXF1YW50aWEvYXF1YW50aWFfbWFpbi5jLTkyNS1cXHRcXHRcXHRcXHRcXHRcXHRWRU5EMV9HTE9CQUxfQ0ZHXzEwME0sIHZhbCxcXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9hcXVhbnRpYS9hcXVhbnRpYV9tYWluLmM9OTcwPXN0YXRpYyB2b2lkIGFxcjEwN19saW5rX2NoYW5nZV9ub3RpZnkoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9hcXVhbnRpYS9hcXVhbnRpYV9tYWluLmMtOTc4LVxcbmRyaXZlcnMvbmV0L3BoeS9hcXVhbnRpYS9hcXVhbnRpYV9tYWluLmM6OTc5OlxcdHZhbCA9IHBoeV9yZWFkX21tZChwaHlkZXYsIE1ESU9fTU1EX0FOLCBNRElPX0FOX1JYX0xQX1NUQVQxKTtcXG5kcml2ZXJzL25ldC9waHkvYXF1YW50aWEvYXF1YW50aWFfbWFpbi5jLTk4MC1cXHQvKiBjYWxsIGZhaWxlZCBvciBsaW5rIHBhcnRuZXIgaXMgbm8gQXF1YW50aWEgUEhZICovXFxuLS1cXG5kcml2ZXJzL25ldC9waHkvYXF1YW50aWEvYXF1YW50aWFfbWFpbi5jLTk4Ni1cXG5kcml2ZXJzL25ldC9waHkvYXF1YW50aWEvYXF1YW50aWFfbWFpbi5jOjk4NzpcXHR2YWwgPSBwaHlfcmVhZF9tbWQocGh5ZGV2LCBNRElPX01NRF9BTiwgTURJT19BTl9SWF9MUF9TVEFUNCk7XFxuZHJpdmVycy9uZXQvcGh5L2FxdWFudGlhL2FxdWFudGlhX21haW4uYy05ODgtXFx0aWYgKHZhbCBcXHUwMDNjIDApXFxuLS1cXG5kcml2ZXJzL25ldC9waHkvYXF1YW50aWEvYXF1YW50aWFfbWFpbi5jLTk5My1cXG5kcml2ZXJzL25ldC9waHkvYXF1YW50aWEvYXF1YW50aWFfbWFpbi5jOjk5NDpcXHR2YWwgPSBwaHlfcmVhZF9tbWQocGh5ZGV2LCBNRElPX01NRF9BTiwgTURJT19BTl9SWF9WRU5EX1NUQVQzKTtcXG5kcml2ZXJzL25ldC9waHkvYXF1YW50aWEvYXF1YW50aWFfbWFpbi5jLTk5NS1cXHRpZiAodmFsIFxcdTAwM2MgMClcXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9hcXVhbnRpYS9hcXVhbnRpYV9tYWluLmMtMTAwNS1cXG5kcml2ZXJzL25ldC9waHkvYXF1YW50aWEvYXF1YW50aWFfbWFpbi5jOjEwMDY6XFx0dmFsID0gcGh5X3JlYWRfbW1kKHBoeWRldiwgTURJT19NTURfVkVORDEsIFZFTkQxX0dMT0JBTF9SU1ZEX1NUQVQ5KTtcXG5kcml2ZXJzL25ldC9waHkvYXF1YW50aWEvYXF1YW50aWFfbWFpbi5jLTEwMDctXFx0aWYgKHZhbCBcXHUwMDNjIDApXFxuLS1cXG5kcml2ZXJzL25ldC9waHkvYXF1YW50aWEvYXF1YW50aWFfbWFpbi5jPTEwMTU9c3RhdGljIGludCBhcXJfZ2VuMV93YWl0X3Byb2Nlc3Nvcl9pbnRlbnNpdmVfb3Aoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9hcXVhbnRpYS9hcXVhbnRpYV9tYWluLmMtMTAyNS1cXG5kcml2ZXJzL25ldC9waHkvYXF1YW50aWEvYXF1YW50aWFfbWFpbi5jOjEwMjY6XFx0ZXJyID0gcGh5X3JlYWRfbW1kX3BvbGxfdGltZW91dChwaHlkZXYsIE1ESU9fTU1EX1ZFTkQxLFxcbmRyaXZlcnMvbmV0L3BoeS9hcXVhbnRpYS9hcXVhbnRpYV9tYWluLmMtMTAyNy1cXHRcXHRcXHRcXHRcXHRWRU5EMV9HTE9CQUxfR0VOX1NUQVQyLCB2YWwsXFxuLS1cXG5kcml2ZXJzL25ldC9waHkvYXMyMXh4eC5jPTI5Nz1zdGF0aWMgaW50IGFlb25fZmlybXdhcmVfYm9vdChzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2LCBjb25zdCB1OCAqZGF0YSxcXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9hczIxeHh4LmMtMzE4LVxcbmRyaXZlcnMvbmV0L3BoeS9hczIxeHh4LmM6MzE5OlxcdHZhbCA9IHBoeV9yZWFkX21tZChwaHlkZXYsIE1ESU9fTU1EX1ZFTkQxLFxcbmRyaXZlcnMvbmV0L3BoeS9hczIxeHh4LmMtMzIwLVxcdFxcdFxcdCAgIFZFTkQxX0dMQl9SRUdfTURJT19JTkRJUkVDVF9TVEFUVVMpO1xcbi0tXFxuZHJpdmVycy9uZXQvcGh5L2FzMjF4eHguYz0zOTI9c3RhdGljIGludCBhZW9uX2lwY193YWl0X2NtZChzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2LCBib29sIHBhcml0eV9zdGF0dXMpXFxuLS1cXG5kcml2ZXJzL25ldC9waHkvYXMyMXh4eC5jLTM5OS1cXHQgKi9cXG5kcml2ZXJzL25ldC9waHkvYXMyMXh4eC5jOjQwMDpcXHRyZXR1cm4gcGh5X3JlYWRfbW1kX3BvbGxfdGltZW91dChwaHlkZXYsIE1ESU9fTU1EX1ZFTkQxLCBWRU5EMV9JUENfU1RTLCB2YWwsXFxuZHJpdmVycy9uZXQvcGh5L2FzMjF4eHguYy00MDEtXFx0XFx0XFx0XFx0XFx0IGFlb25faXBjX3JlYWR5KHZhbCwgcGFyaXR5X3N0YXR1cyksXFxuLS1cXG5kcml2ZXJzL25ldC9waHkvYXMyMXh4eC5jPTQwNT1zdGF0aWMgaW50IGFlb25faXBjX3NlbmRfY21kKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYsXFxuLS1cXG5kcml2ZXJzL25ldC9waHkvYXMyMXh4eC5jLTQzOS1cXG5kcml2ZXJzL25ldC9waHkvYXMyMXh4eC5jOjQ0MDpcXHRyZXQgPSBwaHlfcmVhZF9tbWQocGh5ZGV2LCBNRElPX01NRF9WRU5EMSwgVkVORDFfSVBDX1NUUyk7XFxuZHJpdmVycy9uZXQvcGh5L2FzMjF4eHguYy00NDEtXFx0aWYgKHJldCBcXHUwMDNjIDApXFxuLS1cXG5kcml2ZXJzL25ldC9waHkvYXMyMXh4eC5jPTQ1NT1zdGF0aWMgaW50IGFlb25faXBjX3NlbmRfbXNnKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYsXFxuLS1cXG5kcml2ZXJzL25ldC9waHkvYXMyMXh4eC5jLTUwNi1cXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgRElWX1JPVU5EX1VQKHJldF9zaXplLCBzaXplb2YodTE2KSk7IGkrKykge1xcbmRyaXZlcnMvbmV0L3BoeS9hczIxeHh4LmM6NTA3OlxcdFxcdHJldCA9IHBoeV9yZWFkX21tZChwaHlkZXYsIE1ESU9fTU1EX1ZFTkQxLCBWRU5EMV9JUENfREFUQShpKSk7XFxuZHJpdmVycy9uZXQvcGh5L2FzMjF4eHguYy01MDgtXFx0XFx0aWYgKHJldCBcXHUwMDNjIDApXFxuLS1cXG5kcml2ZXJzL25ldC9waHkvYXMyMXh4eC5jPTYzNj1zdGF0aWMgaW50IGFzMjF4eHhfcmVhZF9saW5rKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYsIGludCAqYm1jcilcXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9hczIxeHh4LmMtNjQyLVxcdCAqL1xcbmRyaXZlcnMvbmV0L3BoeS9hczIxeHh4LmM6NjQzOlxcdCpibWNyID0gcGh5X3JlYWRfbW1kKHBoeWRldiwgTURJT19NTURfQU4sXFxuZHJpdmVycy9uZXQvcGh5L2FzMjF4eHguYy02NDQtXFx0XFx0XFx0ICAgICBBUzIxWFhYX01ESU9fQU5fQzIyICsgTUlJX0JNQ1IpO1xcbi0tXFxuZHJpdmVycy9uZXQvcGh5L2FzMjF4eHguYy02NTUtXFxuZHJpdmVycy9uZXQvcGh5L2FzMjF4eHguYzo2NTY6XFx0c3RhdHVzID0gcGh5X3JlYWRfbW1kKHBoeWRldiwgTURJT19NTURfQU4sIE1ESU9fU1RBVDEpO1xcbmRyaXZlcnMvbmV0L3BoeS9hczIxeHh4LmMtNjU3LVxcdGlmIChzdGF0dXMgXFx1MDAzYyAwKVxcbi0tXFxuZHJpdmVycy9uZXQvcGh5L2FzMjF4eHguYz02NjU9c3RhdGljIGludCBhczIxeHh4X3JlYWRfYzIyX2xwYShzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxcbi0tXFxuZHJpdmVycy9uZXQvcGh5L2FzMjF4eHguYy02NzEtXFx0ICovXFxuZHJpdmVycy9uZXQvcGh5L2FzMjF4eHguYzo2NzI6XFx0bHBhZ2IgPSBwaHlfcmVhZF9tbWQocGh5ZGV2LCBNRElPX01NRF9BTixcXG5kcml2ZXJzL25ldC9waHkvYXMyMXh4eC5jLTY3My1cXHRcXHRcXHQgICAgIEFTMjFYWFhfTURJT19BTl9DMjIgKyBNSUlfU1RBVDEwMDApO1xcbi0tXFxuZHJpdmVycy9uZXQvcGh5L2FzMjF4eHguYy02NzctXFx0aWYgKGxwYWdiIFxcdTAwMjYgTFBBXzEwMDBNU0ZBSUwpIHtcXG5kcml2ZXJzL25ldC9waHkvYXMyMXh4eC5jOjY3ODpcXHRcXHRpbnQgYWR2ID0gcGh5X3JlYWRfbW1kKHBoeWRldiwgTURJT19NTURfQU4sXFxuZHJpdmVycy9uZXQvcGh5L2FzMjF4eHguYy02NzktXFx0XFx0XFx0XFx0ICAgICAgIEFTMjFYWFhfTURJT19BTl9DMjIgKyBNSUlfQ1RSTDEwMDApO1xcbi0tXFxuZHJpdmVycy9uZXQvcGh5L2FzMjF4eHguYz02OTc9c3RhdGljIGludCBhczIxeHh4X3JlYWRfc3RhdHVzKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXFxuLS1cXG5kcml2ZXJzL25ldC9waHkvYXMyMXh4eC5jLTcyOS1cXG5kcml2ZXJzL25ldC9waHkvYXMyMXh4eC5jOjczMDpcXHRcXHRzcGVlZCA9IHBoeV9yZWFkX21tZChwaHlkZXYsIE1ESU9fTU1EX1ZFTkQxLFxcbmRyaXZlcnMvbmV0L3BoeS9hczIxeHh4LmMtNzMxLVxcdFxcdFxcdFxcdCAgICAgVkVORDFfU1BFRURfU1RBVFVTKTtcXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9hczIxeHh4LmM9ODAzPXN0YXRpYyBpbnQgYXMyMXh4eF9sZWRfaHdfY29udHJvbF9nZXQoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldiwgdTggaW5kZXgsXFxuLS1cXG5kcml2ZXJzL25ldC9waHkvYXMyMXh4eC5jLTgxMC1cXG5kcml2ZXJzL25ldC9waHkvYXMyMXh4eC5jOjgxMTpcXHR2YWwgPSBwaHlfcmVhZF9tbWQocGh5ZGV2LCBNRElPX01NRF9WRU5EMSwgVkVORDFfTEVEX1JFRyhpbmRleCkpO1xcbmRyaXZlcnMvbmV0L3BoeS9hczIxeHh4LmMtODEyLVxcdGlmICh2YWwgXFx1MDAzYyAwKVxcbi0tXFxuZHJpdmVycy9uZXQvcGh5L2FzMjF4eHguYz04Nzk9c3RhdGljIGludCBhczIxeHh4X21hdGNoX3BoeV9kZXZpY2Uoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldixcXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9hczIxeHh4LmMtODkyLVxcdC8qIFJlYWQgUEhZIElEIHRvIGhhbmRsZSBmaXJtd2FyZSBsb2FkZWQgb3IgSFcgcmVzZXQgKi9cXG5kcml2ZXJzL25ldC9waHkvYXMyMXh4eC5jOjg5MzpcXHRyZXQgPSBwaHlfcmVhZF9tbWQocGh5ZGV2LCBNRElPX01NRF9QQ1MsIE1JSV9QSFlTSUQxKTtcXG5kcml2ZXJzL25ldC9waHkvYXMyMXh4eC5jLTg5NC1cXHRpZiAocmV0IFxcdTAwM2MgMClcXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9hczIxeHh4LmMtODk3LVxcbmRyaXZlcnMvbmV0L3BoeS9hczIxeHh4LmM6ODk4OlxcdHJldCA9IHBoeV9yZWFkX21tZChwaHlkZXYsIE1ESU9fTU1EX1BDUywgTUlJX1BIWVNJRDIpO1xcbmRyaXZlcnMvbmV0L3BoeS9hczIxeHh4LmMtODk5LVxcdGlmIChyZXQgXFx1MDAzYyAwKVxcbi0tXFxuZHJpdmVycy9uZXQvcGh5L2JjbS1waHktbGliLmM9MzcyPWludCBiY21fcGh5X3NldF9lZWUoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldiwgYm9vbCBlbmFibGUpXFxuLS1cXG5kcml2ZXJzL25ldC9waHkvYmNtLXBoeS1saWIuYy0zNzYtXFx0LyogRW5hYmxlIEVFRSBhdCBQSFkgbGV2ZWwgKi9cXG5kcml2ZXJzL25ldC9waHkvYmNtLXBoeS1saWIuYzozNzc6XFx0dmFsID0gcGh5X3JlYWRfbW1kKHBoeWRldiwgTURJT19NTURfQU4sIEJSQ01fQ0w0NVZFTl9FRUVfQ09OVFJPTCk7XFxuZHJpdmVycy9uZXQvcGh5L2JjbS1waHktbGliLmMtMzc4LVxcdGlmICh2YWwgXFx1MDAzYyAwKVxcbi0tXFxuZHJpdmVycy9uZXQvcGh5L2JjbS1waHktbGliLmMtMzg4LVxcdC8qIEFkdmVydGlzZSBFRUUgKi9cXG5kcml2ZXJzL25ldC9waHkvYmNtLXBoeS1saWIuYzozODk6XFx0dmFsID0gcGh5X3JlYWRfbW1kKHBoeWRldiwgTURJT19NTURfQU4sIEJDTV9DTDQ1VkVOX0VFRV9BRFYpO1xcbmRyaXZlcnMvbmV0L3BoeS9iY20tcGh5LWxpYi5jLTM5MC1cXHRpZiAodmFsIFxcdTAwM2MgMClcXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9iY20tcGh5LWxpYi5jPTUzMz1zdGF0aWMgdTY0IGJjbV9waHlfZ2V0X3N0YXQoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldiwgdTY0ICpzaGFkb3csXFxuLS1cXG5kcml2ZXJzL25ldC9waHkvYmNtLXBoeS1saWIuYy01NDItXFx0ZWxzZVxcbmRyaXZlcnMvbmV0L3BoeS9iY20tcGh5LWxpYi5jOjU0MzpcXHRcXHR2YWwgPSBwaHlfcmVhZF9tbWQocGh5ZGV2LCBzdGF0LmRldmFkLCBzdGF0LnJlZyk7XFxuZHJpdmVycy9uZXQvcGh5L2JjbS1waHktbGliLmMtNTQ0LVxcdGlmICh2YWwgXFx1MDAzYyAwKSB7XFxuLS1cXG5kcml2ZXJzL25ldC9waHkvYmNtN3h4eC5jPTYyMz1zdGF0aWMgYm9vbCBiY203eHh4XzI4bm1fZXBoeV9kZXZfdmFsaWQoaW50IGRldm51bSlcXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9iY203eHh4LmMtNjI3LVxcbmRyaXZlcnMvbmV0L3BoeS9iY203eHh4LmM6NjI4OnN0YXRpYyBpbnQgYmNtN3h4eF8yOG5tX2VwaHlfcmVhZF9tbWQoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldixcXG5kcml2ZXJzL25ldC9waHkvYmNtN3h4eC5jLTYyOS1cXHRcXHRcXHRcXHQgICAgICBpbnQgZGV2bnVtLCB1MTYgcmVnbnVtKVxcbi0tXFxuZHJpdmVycy9uZXQvcGh5L2JjbTd4eHguYz04MjE9c3RhdGljIGludCBiY203eHh4XzI4bm1fcHJvYmUoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9iY203eHh4LmMtODg1LVxcdC5wcm9iZVxcdFxcdD0gYmNtN3h4eF8yOG5tX3Byb2JlLFxcdFxcdFxcdFxcdFxcXFxcXG5kcml2ZXJzL25ldC9waHkvYmNtN3h4eC5jOjg4NjpcXHQucmVhZF9tbWRcXHQ9IGJjbTd4eHhfMjhubV9lcGh5X3JlYWRfbW1kLFxcdFxcdFxcdFxcXFxcXG5kcml2ZXJzL25ldC9waHkvYmNtN3h4eC5jLTg4Ny1cXHQud3JpdGVfbW1kXFx0PSBiY203eHh4XzI4bm1fZXBoeV93cml0ZV9tbWQsXFx0XFx0XFx0XFxcXFxcbi0tXFxuZHJpdmVycy9uZXQvcGh5L2JjbTg0ODgxLmM9NTA9c3RhdGljIGludCBiY204NDg4MV93YWl0X2luaXQoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9iY204NDg4MS5jLTUzLVxcbmRyaXZlcnMvbmV0L3BoeS9iY204NDg4MS5jOjU0OlxcdHJldHVybiBwaHlfcmVhZF9tbWRfcG9sbF90aW1lb3V0KHBoeWRldiwgTURJT19NTURfUE1BUE1ELCBNRElPX0NUUkwxLFxcbmRyaXZlcnMvbmV0L3BoeS9iY204NDg4MS5jLTU1LVxcdFxcdFxcdFxcdFxcdCB2YWwsICEodmFsIFxcdTAwMjYgTURJT19DVFJMMV9SRVNFVCksXFxuLS1cXG5kcml2ZXJzL25ldC9waHkvYmNtODQ4ODEuYz0xODQ9c3RhdGljIGludCBiY204NDg5eF9sZWRfaHdfY29udHJvbF9nZXQoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldiwgdTggaW5kZXgsXFxuLS1cXG5kcml2ZXJzL25ldC9waHkvYmNtODQ4ODEuYy0xOTEtXFxuZHJpdmVycy9uZXQvcGh5L2JjbTg0ODgxLmM6MTkyOlxcdGxvdyA9IHBoeV9yZWFkX21tZChwaHlkZXYsIE1ESU9fTU1EX1BNQVBNRCxcXG5kcml2ZXJzL25ldC9waHkvYmNtODQ4ODEuYy0xOTMtXFx0XFx0XFx0ICAgYmNtODQ4OXhfbGVkX3JlZ3NbaW5kZXhdLm1hc2tfbG93KTtcXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9iY204NDg4MS5jLTE5NS1cXHRcXHRyZXR1cm4gbG93O1xcbmRyaXZlcnMvbmV0L3BoeS9iY204NDg4MS5jOjE5NjpcXHRleHQgPSBwaHlfcmVhZF9tbWQocGh5ZGV2LCBNRElPX01NRF9QTUFQTUQsXFxuZHJpdmVycy9uZXQvcGh5L2JjbTg0ODgxLmMtMTk3LVxcdFxcdFxcdCAgIGJjbTg0ODl4X2xlZF9yZWdzW2luZGV4XS5tYXNrX2V4dCk7XFxuLS1cXG5kcml2ZXJzL25ldC9waHkvYmNtODQ4ODEuYz0yODg9c3RhdGljIGludCBiY204NDg4MV9hbmVnX2RvbmUoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9iY204NDg4MS5jLTI5MS1cXG5kcml2ZXJzL25ldC9waHkvYmNtODQ4ODEuYzoyOTI6XFx0dmFsID0gcGh5X3JlYWRfbW1kKHBoeWRldiwgTURJT19NTURfQU4sIE1ESU9fU1RBVDEpO1xcbmRyaXZlcnMvbmV0L3BoeS9iY204NDg4MS5jLTI5My1cXHRpZiAodmFsIFxcdTAwM2MgMClcXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9iY204NDg4MS5jLTI5NS1cXG5kcml2ZXJzL25ldC9waHkvYmNtODQ4ODEuYzoyOTY6XFx0Ym1zciA9IHBoeV9yZWFkX21tZChwaHlkZXYsIE1ESU9fTU1EX0FOLCBNRElPX0FOX0MyMiArIE1JSV9CTVNSKTtcXG5kcml2ZXJzL25ldC9waHkvYmNtODQ4ODEuYy0yOTctXFx0aWYgKGJtc3IgXFx1MDAzYyAwKVxcbi0tXFxuZHJpdmVycy9uZXQvcGh5L2JjbTg0ODgxLmM9MzA0PXN0YXRpYyBpbnQgYmNtODQ4ODFfcmVhZF9zdGF0dXMoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9iY204NDg4MS5jLTMwOC1cXG5kcml2ZXJzL25ldC9waHkvYmNtODQ4ODEuYzozMDk6XFx0dmFsID0gcGh5X3JlYWRfbW1kKHBoeWRldiwgTURJT19NTURfQU4sIE1ESU9fQ1RSTDEpO1xcbmRyaXZlcnMvbmV0L3BoeS9iY204NDg4MS5jLTMxMC1cXHRpZiAodmFsIFxcdTAwM2MgMClcXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9iY204NDg4MS5jLTMxNy1cXG5kcml2ZXJzL25ldC9waHkvYmNtODQ4ODEuYzozMTg6XFx0dmFsID0gcGh5X3JlYWRfbW1kKHBoeWRldiwgTURJT19NTURfQU4sIE1ESU9fU1RBVDEpO1xcbmRyaXZlcnMvbmV0L3BoeS9iY204NDg4MS5jLTMxOS1cXHRpZiAodmFsIFxcdTAwM2MgMClcXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9iY204NDg4MS5jLTMyMS1cXG5kcml2ZXJzL25ldC9waHkvYmNtODQ4ODEuYzozMjI6XFx0Ym1zciA9IHBoeV9yZWFkX21tZChwaHlkZXYsIE1ESU9fTU1EX0FOLCBNRElPX0FOX0MyMiArIE1JSV9CTVNSKTtcXG5kcml2ZXJzL25ldC9waHkvYmNtODQ4ODEuYy0zMjMtXFx0aWYgKGJtc3IgXFx1MDAzYyAwKVxcbi0tXFxuZHJpdmVycy9uZXQvcGh5L2JjbTg0ODgxLmMtMzQ3LVxcbmRyaXZlcnMvbmV0L3BoeS9iY204NDg4MS5jOjM0ODpcXHRcXHR2YWwgPSBwaHlfcmVhZF9tbWQocGh5ZGV2LCBNRElPX01NRF9BTixcXG5kcml2ZXJzL25ldC9waHkvYmNtODQ4ODEuYy0zNDktXFx0XFx0XFx0XFx0ICAgTURJT19BTl9DMjIgKyBNSUlfU1RBVDEwMDApO1xcbi0tXFxuZHJpdmVycy9uZXQvcGh5L2JjbTg0ODgxLmMtMzgwLVxcdCAqL1xcbmRyaXZlcnMvbmV0L3BoeS9iY204NDg4MS5jOjM4MTpcXHR2YWwgPSBwaHlfcmVhZF9tbWQocGh5ZGV2LCBNRElPX01NRF9WRU5EMSwgMHg0MDExKTtcXG5kcml2ZXJzL25ldC9waHkvYmNtODQ4ODEuYy0zODItXFx0bW9kZSA9ICh2YWwgXFx1MDAyNiAweDFlKSBcXHUwMDNlXFx1MDAzZSAxO1xcbi0tXFxuZHJpdmVycy9uZXQvcGh5L2JjbTg3eHguYz0zND1zdGF0aWMgaW50IGJjbTg3eHhfb2ZfcmVnX2luaXQoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9iY204N3h4LmMtNTktXFx0XFx0aWYgKG1hc2spIHtcXG5kcml2ZXJzL25ldC9waHkvYmNtODd4eC5jOjYwOlxcdFxcdFxcdHZhbCA9IHBoeV9yZWFkX21tZChwaHlkZXYsIGRldmlkLCByZWcpO1xcbmRyaXZlcnMvbmV0L3BoeS9iY204N3h4LmMtNjEtXFx0XFx0XFx0aWYgKHZhbCBcXHUwMDNjIDApIHtcXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9iY204N3h4LmM9MTAwPXN0YXRpYyBpbnQgYmNtODd4eF9yZWFkX3N0YXR1cyhzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxcbi0tXFxuZHJpdmVycy9uZXQvcGh5L2JjbTg3eHguYy0xMDUtXFxuZHJpdmVycy9uZXQvcGh5L2JjbTg3eHguYzoxMDY6XFx0cnhfc2lnbmFsX2RldGVjdCA9IHBoeV9yZWFkX21tZChwaHlkZXYsIE1ESU9fTU1EX1BNQVBNRCxcXG5kcml2ZXJzL25ldC9waHkvYmNtODd4eC5jLTEwNy1cXHRcXHRcXHRcXHRcXHRCQ004N1hYX1BNRF9SWF9TSUdOQUxfREVURUNUKTtcXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9iY204N3h4LmMtMTEzLVxcbmRyaXZlcnMvbmV0L3BoeS9iY204N3h4LmM6MTE0OlxcdHBjc19zdGF0dXMgPSBwaHlfcmVhZF9tbWQocGh5ZGV2LCBNRElPX01NRF9QQ1MsXFxuZHJpdmVycy9uZXQvcGh5L2JjbTg3eHguYy0xMTUtXFx0XFx0XFx0XFx0ICBCQ004N1hYXzEwR0JBU0VSX1BDU19TVEFUVVMpO1xcbi0tXFxuZHJpdmVycy9uZXQvcGh5L2JjbTg3eHguYy0xMjEtXFxuZHJpdmVycy9uZXQvcGh5L2JjbTg3eHguYzoxMjI6XFx0eGd4c19sYW5lX3N0YXR1cyA9IHBoeV9yZWFkX21tZChwaHlkZXYsIE1ESU9fTU1EX1BIWVhTLFxcbmRyaXZlcnMvbmV0L3BoeS9iY204N3h4LmMtMTIzLVxcdFxcdFxcdFxcdFxcdEJDTTg3WFhfWEdYU19MQU5FX1NUQVRVUyk7XFxuLS1cXG5kcml2ZXJzL25ldC9waHkvYmNtODd4eC5jPTE0MD1zdGF0aWMgaW50IGJjbTg3eHhfY29uZmlnX2ludHIoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9iY204N3h4LmMtMTQzLVxcbmRyaXZlcnMvbmV0L3BoeS9iY204N3h4LmM6MTQ0OlxcdHJlZyA9IHBoeV9yZWFkX21tZChwaHlkZXYsIE1ESU9fTU1EX1BDUywgQkNNODdYWF9MQVNJX0NPTlRST0wpO1xcbmRyaXZlcnMvbmV0L3BoeS9iY204N3h4LmMtMTQ1LVxcbi0tXFxuZHJpdmVycy9uZXQvcGh5L2JjbTg3eHguYy0xNDktXFx0aWYgKHBoeWRldi1cXHUwMDNlaW50ZXJydXB0cyA9PSBQSFlfSU5URVJSVVBUX0VOQUJMRUQpIHtcXG5kcml2ZXJzL25ldC9waHkvYmNtODd4eC5jOjE1MDpcXHRcXHRlcnIgPSBwaHlfcmVhZF9tbWQocGh5ZGV2LCBNRElPX01NRF9QQ1MsIEJDTTg3WFhfTEFTSV9TVEFUVVMpO1xcbmRyaXZlcnMvbmV0L3BoeS9iY204N3h4LmMtMTUxLVxcdFxcdGlmIChlcnIpXFxuLS1cXG5kcml2ZXJzL25ldC9waHkvYmNtODd4eC5jLTE2My1cXG5kcml2ZXJzL25ldC9waHkvYmNtODd4eC5jOjE2NDpcXHRcXHRlcnIgPSBwaHlfcmVhZF9tbWQocGh5ZGV2LCBNRElPX01NRF9QQ1MsIEJDTTg3WFhfTEFTSV9TVEFUVVMpO1xcbmRyaXZlcnMvbmV0L3BoeS9iY204N3h4LmMtMTY1LVxcdH1cXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9kcDgzODIyLmM9MjE0PXN0YXRpYyBpbnQgZHA4MzgyMl9jb25maWdfd29sKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYsXFxuLS1cXG5kcml2ZXJzL25ldC9waHkvZHA4MzgyMi5jLTIzNi1cXG5kcml2ZXJzL25ldC9waHkvZHA4MzgyMi5jOjIzNzpcXHRcXHR2YWx1ZSA9IHBoeV9yZWFkX21tZChwaHlkZXYsIE1ESU9fTU1EX1ZFTkQyLFxcbmRyaXZlcnMvbmV0L3BoeS9kcDgzODIyLmMtMjM4LVxcdFxcdFxcdFxcdCAgICAgTUlJX0RQODM4MjJfV09MX0NGRyk7XFxuLS1cXG5kcml2ZXJzL25ldC9waHkvZHA4MzgyMi5jPTI4OD1zdGF0aWMgdm9pZCBkcDgzODIyX2dldF93b2woc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldixcXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9kcDgzODIyLmMtMjk2LVxcbmRyaXZlcnMvbmV0L3BoeS9kcDgzODIyLmM6Mjk3OlxcdHZhbHVlID0gcGh5X3JlYWRfbW1kKHBoeWRldiwgTURJT19NTURfVkVORDIsIE1JSV9EUDgzODIyX1dPTF9DRkcpO1xcbmRyaXZlcnMvbmV0L3BoeS9kcDgzODIyLmMtMjk4LVxcbi0tXFxuZHJpdmVycy9uZXQvcGh5L2RwODM4MjIuYy0zMDItXFx0aWYgKHZhbHVlIFxcdTAwMjYgRFA4MzgyMl9XT0xfU0VDVVJFX09OKSB7XFxuZHJpdmVycy9uZXQvcGh5L2RwODM4MjIuYzozMDM6XFx0XFx0c29wYXNzX3ZhbCA9IHBoeV9yZWFkX21tZChwaHlkZXYsIE1ESU9fTU1EX1ZFTkQyLFxcbmRyaXZlcnMvbmV0L3BoeS9kcDgzODIyLmMtMzA0LVxcdFxcdFxcdFxcdFxcdCAgTUlJX0RQODM4MjJfUlhTT1AxKTtcXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9kcDgzODIyLmMtMzA3LVxcbmRyaXZlcnMvbmV0L3BoeS9kcDgzODIyLmM6MzA4OlxcdFxcdHNvcGFzc192YWwgPSBwaHlfcmVhZF9tbWQocGh5ZGV2LCBNRElPX01NRF9WRU5EMixcXG5kcml2ZXJzL25ldC9waHkvZHA4MzgyMi5jLTMwOS1cXHRcXHRcXHRcXHRcXHQgIE1JSV9EUDgzODIyX1JYU09QMik7XFxuLS1cXG5kcml2ZXJzL25ldC9waHkvZHA4MzgyMi5jLTMxMi1cXG5kcml2ZXJzL25ldC9waHkvZHA4MzgyMi5jOjMxMzpcXHRcXHRzb3Bhc3NfdmFsID0gcGh5X3JlYWRfbW1kKHBoeWRldiwgTURJT19NTURfVkVORDIsXFxuZHJpdmVycy9uZXQvcGh5L2RwODM4MjIuYy0zMTQtXFx0XFx0XFx0XFx0XFx0ICBNSUlfRFA4MzgyMl9SWFNPUDMpO1xcbi0tXFxuZHJpdmVycy9uZXQvcGh5L2RwODM4MjIuYz05MTc9c3RhdGljIGludCBkcDgzODIyX3JlYWRfc3RyYXBzKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXFxuLS1cXG5kcml2ZXJzL25ldC9waHkvZHA4MzgyMi5jLTkyMi1cXG5kcml2ZXJzL25ldC9waHkvZHA4MzgyMi5jOjkyMzpcXHR2YWwgPSBwaHlfcmVhZF9tbWQocGh5ZGV2LCBNRElPX01NRF9WRU5EMiwgTUlJX0RQODM4MjJfU09SMSk7XFxuZHJpdmVycy9uZXQvcGh5L2RwODM4MjIuYy05MjQtXFx0aWYgKHZhbCBcXHUwMDNjIDApXFxuLS1cXG5kcml2ZXJzL25ldC9waHkvZHA4MzgyMi5jPTEwMzM9c3RhdGljIGludCBkcDgzODIyX3N1c3BlbmQoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9kcDgzODIyLmMtMTAzNi1cXG5kcml2ZXJzL25ldC9waHkvZHA4MzgyMi5jOjEwMzc6XFx0dmFsdWUgPSBwaHlfcmVhZF9tbWQocGh5ZGV2LCBNRElPX01NRF9WRU5EMiwgTUlJX0RQODM4MjJfV09MX0NGRyk7XFxuZHJpdmVycy9uZXQvcGh5L2RwODM4MjIuYy0xMDM4LVxcbi0tXFxuZHJpdmVycy9uZXQvcGh5L2RwODM4MjIuYz0xMDQ1PXN0YXRpYyBpbnQgZHA4MzgyMl9yZXN1bWUoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9kcDgzODIyLmMtMTA1MC1cXG5kcml2ZXJzL25ldC9waHkvZHA4MzgyMi5jOjEwNTE6XFx0dmFsdWUgPSBwaHlfcmVhZF9tbWQocGh5ZGV2LCBNRElPX01NRF9WRU5EMiwgTUlJX0RQODM4MjJfV09MX0NGRyk7XFxuZHJpdmVycy9uZXQvcGh5L2RwODM4MjIuYy0xMDUyLVxcbi0tXFxuZHJpdmVycy9uZXQvcGh5L2RwODM4MjIuYz0xMTI0PXN0YXRpYyBpbnQgZHA4MzgyMl9sZWRfaHdfY29udHJvbF9nZXQoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldiwgdTggaW5kZXgsXFxuLS1cXG5kcml2ZXJzL25ldC9waHkvZHA4MzgyMi5jLTExMjktXFx0aWYgKGluZGV4ID09IERQODM4MjJfTEVEX0lOREVYX0xFRF8wIHx8IGluZGV4ID09IERQODM4MjJfTEVEX0lOREVYX0NPTF9HUElPMikge1xcbmRyaXZlcnMvbmV0L3BoeS9kcDgzODIyLmM6MTEzMDpcXHRcXHR2YWwgPSBwaHlfcmVhZF9tbWQocGh5ZGV2LCBNRElPX01NRF9WRU5EMiwgTUlJX0RQODM4MjJfTUxFRENSKTtcXG5kcml2ZXJzL25ldC9waHkvZHA4MzgyMi5jLTExMzEtXFx0XFx0aWYgKHZhbCBcXHUwMDNjIDApXFxuLS1cXG5kcml2ZXJzL25ldC9waHkvZHA4MzgyMi5jLTExMzUtXFx0fSBlbHNlIHtcXG5kcml2ZXJzL25ldC9waHkvZHA4MzgyMi5jOjExMzY6XFx0XFx0dmFsID0gcGh5X3JlYWRfbW1kKHBoeWRldiwgTURJT19NTURfVkVORDIsIE1JSV9EUDgzODIyX0xFRENGRzEpO1xcbmRyaXZlcnMvbmV0L3BoeS9kcDgzODIyLmMtMTEzNy1cXHRcXHRpZiAodmFsIFxcdTAwM2MgMClcXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9kcDgzODY3LmM9MjExPXN0YXRpYyBpbnQgZHA4Mzg2N19zZXRfd29sKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYsXFxuLS1cXG5kcml2ZXJzL25ldC9waHkvZHA4Mzg2Ny5jLTIxNy1cXG5kcml2ZXJzL25ldC9waHkvZHA4Mzg2Ny5jOjIxODpcXHR2YWxfcnhjZmcgPSBwaHlfcmVhZF9tbWQocGh5ZGV2LCBEUDgzODY3X0RFVkFERFIsIERQODM4NjdfUlhGQ0ZHKTtcXG5kcml2ZXJzL25ldC9waHkvZHA4Mzg2Ny5jLTIxOS1cXHR2YWxfbWljciA9IHBoeV9yZWFkKHBoeWRldiwgTUlJX0RQODM4NjdfTUlDUik7XFxuLS1cXG5kcml2ZXJzL25ldC9waHkvZHA4Mzg2Ny5jPTI3Nz1zdGF0aWMgdm9pZCBkcDgzODY3X2dldF93b2woc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldixcXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9kcDgzODY3LmMtMjg1LVxcbmRyaXZlcnMvbmV0L3BoeS9kcDgzODY3LmM6Mjg2OlxcdHZhbHVlID0gcGh5X3JlYWRfbW1kKHBoeWRldiwgRFA4Mzg2N19ERVZBRERSLCBEUDgzODY3X1JYRkNGRyk7XFxuZHJpdmVycy9uZXQvcGh5L2RwODM4NjcuYy0yODctXFxuLS1cXG5kcml2ZXJzL25ldC9waHkvZHA4Mzg2Ny5jLTI5Ny1cXHRpZiAodmFsdWUgXFx1MDAyNiBEUDgzODY3X1dPTF9TRUNfRU4pIHtcXG5kcml2ZXJzL25ldC9waHkvZHA4Mzg2Ny5jOjI5ODpcXHRcXHRzb3Bhc3NfdmFsID0gcGh5X3JlYWRfbW1kKHBoeWRldiwgRFA4Mzg2N19ERVZBRERSLFxcbmRyaXZlcnMvbmV0L3BoeS9kcDgzODY3LmMtMjk5LVxcdFxcdFxcdFxcdFxcdCAgRFA4Mzg2N19SWEZTT1AxKTtcXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9kcDgzODY3LmMtMzAyLVxcbmRyaXZlcnMvbmV0L3BoeS9kcDgzODY3LmM6MzAzOlxcdFxcdHNvcGFzc192YWwgPSBwaHlfcmVhZF9tbWQocGh5ZGV2LCBEUDgzODY3X0RFVkFERFIsXFxuXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAzVDA3OjM3OjI4Ljk1Mzg5OTc1MloiLCJTZXEiOjE3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo3MzgzNjg4MzE5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKlJlYWxpemluZyB0aGUgUG90ZW50aWFsIG9mIFVTQi1FbXVsYXRlZCBQSFkgRHJpdmVyIEFjY2VzcyoqXG5cbk9rYXksIGhvbGQgb24gYSBzZWNvbmQuLi4gYHBoeV9yZWFkX21tZGAgaXMgKmV2ZXJ5d2hlcmUqLiBJZiBhIFVTQiBkZXZpY2Ugc3VwcG9ydHMgQ2xhdXNlIDIyLCB0aGUgUEhZIGZyYW1ld29yayBjbGV2ZXJseSB1c2VzIGluZGlyZWN0IGFjY2VzcyAocmVnaXN0ZXJzIDEzIGFuZCAxNCkgdG8gZXNzZW50aWFsbHkgdHJhbnNsYXRlIENsYXVzZSA0NSBhY2Nlc3Nlcy4gU28sIHdhaXQuLi4gYHBoeV9yZWFkX21tZGAgKndvcmtzKiBvbiBDbGF1c2UgMjIgUEhZcyEgVGhpcyBjbGlja3MsIGJlY2F1c2UgSSBrbm93IHRoZSBSZWFsdGVrIFBIWSBkcml2ZXIgdXNlcyBgcGh5X3JlYWRfbW1kYCwgcmlnaHQ/IFllcywgaXQgZG9lcy5cblxuU28gaGVyZSdzIHRoZSB0aG91Z2h0LiBJZiB3ZSBjb25zdHJ1Y3QgYSBtb2NrIFVTQiBuZXR3b3JrIGRldmljZSB0aGF0IGFsc28gcmVnaXN0ZXJzIGFuIE1ESU8gYnVzLCBhbmQgd2UgY2FuIGNvbnRyb2wgdGhlIHJlc3BvbnNlcyB0byBNRElPIHJlYWRzLi4uIHdlIGNhbiAqdHJpY2sqIGl0IGludG8gcmVwb3J0aW5nIHRoZSBSZWFsdGVrIFBIWSBJRCAoYDB4MDAxY2M4OThgKSB3aGVuIHRoZSBNRElPIGJ1cyBzY2FucyBmb3IgUEhZcy4gVGhlbiwgdGhlIGtlcm5lbCwgdGhpbmtpbmcgYSBSZWFsdGVrIFBIWSBpcyBwcmVzZW50LCB3aWxsIGluc3RhbnRpYXRlIHRoZSBSZWFsdGVrIFBIWSBkcml2ZXIgYW5kIGNhbGwgYHJ0bDgyNjF4X3Byb2JlYC5cblxuQW5kIHRoYXQncyB3aGVyZSBzeXprYWxsZXIgY29tZXMgaW4uIEkgcmVjYWxsIGl0IGhhcyBhIGBzeXpfdXNiX2Nvbm5lY3RgIHRvb2wgd2hpY2ggY2FuIGVtdWxhdGUgVVNCIGRldmljZXMuIENhbiBpdCBlbXVsYXRlIGEgVVNCIG5ldHdvcmsgZGV2aWNlIHRoYXQgcmVnaXN0ZXJzIGFuIE1ESU8gYnVzPyBZZXMsIHN5emthbGxlciBmdXp6ZXMgVVNCIGRldmljZXMgYnkgZmVlZGluZyB0aGVtIGFyYml0cmFyeSBVU0IgZGVzY3JpcHRvcnMuIElmIGl0IHVzZXMgZGVzY3JpcHRvcnMgZm9yIHRoZSBgc21zYzk1eHhgIG9yIGBhc2l4YCBkcml2ZXJzLCB0aGVuIHRoZSBkcml2ZXIgd2lsbCBiaW5kLCByZWdpc3RlciBhbiBNRElPIGJ1cywgYW5kIHN0YXJ0IHNjYW5uaW5nLiBUaGUgZXhjaXRpbmcgcGFydCBpcywgc3l6a2FsbGVyIGNhbiBnaXZlIHRoZSByZXNwb25zZXMgdG8gdGhlIFVTQiBjb250cm9sIG1lc3NhZ2VzIHdoaWNoIHRoZSBkcml2ZXIgdXNlcyB0byByZWFkIE1ESU8gcmVnaXN0ZXJzIVxuXG5UaGlzIGlzIGl0ISBUaGlzIG1lYW5zIHRoZSBQSFkgZHJpdmVyIGlzIHJlYWNoYWJsZSBmcm9tIGEgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnQgdmlhIFVTQiBlbXVsYXRpb24hIFdhaXQsIGlzIHRoZSBSZWFsdGVrIFBIWSBkcml2ZXIgZW5hYmxlZCBieSBkZWZhdWx0IG9yIGlzIHRoZXJlIHNvbWUgY29uZmlnIG5lZWRlZD8gTGV0J3MgY2hlY2sgdGhlIEtjb25maWcgZm9yIFJlYWx0ZWsgUEhZLiBUaGlzIGlzIHBvdGVudGlhbGx5IGh1Z2UuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjM0ODQ1LCJPdXRwdXRUb2tlbnMiOjMyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzMxLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAzVDA3OjM3OjM2LjMzNzU5NTIyMVoiLCJTZXEiOjE4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDI3NDA5OTQ0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBSRUFMVEVLX1BIWVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC9waHkvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L3BoeS9yZWFsdGVrL0tjb25maWctMS0jIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcXG5kcml2ZXJzL25ldC9waHkvcmVhbHRlay9LY29uZmlnOjI6Y29uZmlnIFJFQUxURUtfUEhZXFxuZHJpdmVycy9uZXQvcGh5L3JlYWx0ZWsvS2NvbmZpZy0zLVxcdHRyaXN0YXRlIFxcXCJSZWFsdGVrIFBIWXNcXFwiXFxuLS1cXG5kcml2ZXJzL25ldC9waHkvcmVhbHRlay9LY29uZmlnPTg9aWYgUkVBTFRFS19QSFlcXG5kcml2ZXJzL25ldC9waHkvcmVhbHRlay9LY29uZmlnLTktXFxuZHJpdmVycy9uZXQvcGh5L3JlYWx0ZWsvS2NvbmZpZzoxMDpjb25maWcgUkVBTFRFS19QSFlfSFdNT05cXG5kcml2ZXJzL25ldC9waHkvcmVhbHRlay9LY29uZmlnLTExLVxcdGJvb2wgXFxcIkhXTU9OIHN1cHBvcnQgZm9yIFJlYWx0ZWsgUEhZc1xcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDNUMDc6Mzc6MzYuNzY1MDcyMjg2WiIsIlNlcSI6MTksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjI1OTA4ODE1MTcxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgUmVhbHRlayBQSFkgQ29uZmlndXJhdGlvbioqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgYENPTkZJR19SRUFMVEVLX1BIWWAgY29uZmlnIG9wdGlvbi4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgaWYgdGhlcmUgYXJlIGFueSBvdGhlciByZWxhdGVkIGNvbmZpZ3MgaW4gcGxheSBoZXJlLiBUaGUgcGF0Y2ggYWRkcyB0aGlzIGZpcm13YXJlIG5hbWUsIGBSVEw4MjYxQ19DRV9GV19OQU1FIFwicnRsX25pYy9ydGw4MjYxYy5iaW5cImAuIE5vdywgSSByZW1lbWJlciBzZWVpbmcgYHJlcXVlc3RfZmlybXdhcmVgIGJlaW5nIGNhbGxlZCBpbiBgcnRsODI2MXhfZndfbG9hZGAuIElmIHRoYXQgZmFpbHMsIGJlY2F1c2UgdGhlIGZpcm13YXJlIGlzbid0IHByZXNlbnQsIGBydGw4MjYxeF9md19sb2FkYCByZXR1cm5zIGFuIGVycm9yLCB3aGljaCwgb2YgY291cnNlLCBwcm9wYWdhdGVzIHVwIHRvIGBydGw4MjYxeF9jb25maWdfaW5pdGAuXG5cbk15IGluaXRpYWwgdGhvdWdodCBpcyB0aGF0IHRoaXMgbWlnaHQgYmUgYSByb2FkYmxvY2sgZm9yIGZ1enppbmcuIEhvd2V2ZXIsIHRoYXQncyBhc3N1bWluZyB3ZSAqbmVlZCogdGhlIGZpcm13YXJlLiBXYWl0LCBTeXprYWxsZXIgY2FuIHByb3ZpZGUgdGhlIGZpcm13YXJlIHVzaW5nIGBzeXpfbW91bnRfaW1hZ2VgIG9yIHNvbWV0aGluZyBzaW1pbGFyLCByaWdodD8gT3IsIG1heWJlIHNvbWUgY29kZSBwYXRocyBkb24ndCBldmVuIHVzZSB0aGUgZmlybXdhcmUuIEkgbmVlZCB0byBjbGFyaWZ5IHRoYXQuIE9rYXksIEkgdGhpbmsgaWYgU3l6a2FsbGVyIHByb3ZpZGVzIHRoZSBmaWxlLCB0aGVuIHdlIGNhbiBkZWZpbml0ZWx5IGZ1enogYHJlcXVlc3RfZmlybXdhcmVgLiBPdGhlcndpc2UsIHdlIGNhbiBqdXN0IHNheSBpdCdzIHJlYWNoYWJsZS5cblxuSG9sZCBvbiwgSSBzZWUgYHByaXYtXHUwMDNlZndfbmFtZWAgaXMgc2V0LCBhbmQgaXQgdHJpZXMgdG8gbG9hZCB0aGF0LiBBIGZhaWx1cmUgZ2l2ZXMgdXMgYW4gZXJyb3IuIENhbiB3ZSB0aGVuIHJlYWNoIGBnZW5waHlfYzQ1X3BtYV9zb2Z0X3Jlc2V0YD8gSXQncyBkZWZpbmVkIGFzIGAuc29mdF9yZXNldCA9IGdlbnBoeV9jNDVfcG1hX3NvZnRfcmVzZXRgLiBBaCwgeWVzLCBgc29mdF9yZXNldGAgaXMgY2FsbGVkIGR1cmluZyB0aGUgUEhZIGluaXRpYWxpemF0aW9uLCAqYmVmb3JlKiBgY29uZmlnX2luaXRgISBPa2F5LCBsZXQgbWUgZ28gY2hlY2sgdGhlIGNhbGwgb3JkZXIgaW4gYHBoeV9kZXZpY2UuY2Agb3IgYHBoeS5jYCB0byBiZSBzdXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjozNTc5MSwiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM1MCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0wM1QwNzozODowMi42NzM4OTE2NDdaIiwiU2VxIjoyMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEzMjgwNzk2NSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJzb2Z0X3Jlc2V0XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYz0xMzQxPWludCBwaHlfaW5pdF9odyhzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxcbi0tXFxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYy0xMzUwLVxcbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmM6MTM1MTpcXHRpZiAocGh5ZGV2LVxcdTAwM2VkcnYtXFx1MDAzZXNvZnRfcmVzZXQpIHtcXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jOjEzNTI6XFx0XFx0cmV0ID0gcGh5ZGV2LVxcdTAwM2VkcnYtXFx1MDAzZXNvZnRfcmVzZXQocGh5ZGV2KTtcXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jLTEzNTMtXFx0XFx0aWYgKHJldCBcXHUwMDNjIDApXFxuLS1cXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jLTEzNTUtXFxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYzoxMzU2OlxcdFxcdC8qIHNlZSBjb21tZW50IGluIGdlbnBoeV9zb2Z0X3Jlc2V0IGZvciBhbiBleHBsYW5hdGlvbiAqL1xcbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmMtMTM1Ny1cXHRcXHRwaHlkZXYtXFx1MDAzZXN1c3BlbmRlZCA9IDA7XFxuLS1cXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jPTI2NjQ9RVhQT1JUX1NZTUJPTChnZW5waHlfYzM3X3JlYWRfc3RhdHVzKTtcXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmMtMjY2Ni0vKipcXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jOjI2Njc6ICogZ2VucGh5X3NvZnRfcmVzZXQgLSBzb2Z0d2FyZSByZXNldCB0aGUgUEhZIHZpYSBCTUNSX1JFU0VUIGJpdFxcbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmMtMjY2OC0gKiBAcGh5ZGV2OiB0YXJnZXQgcGh5X2RldmljZSBzdHJ1Y3RcXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmMtMjY3NC0gKi9cXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jOjI2NzU6aW50IGdlbnBoeV9zb2Z0X3Jlc2V0KHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXFxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYy0yNjc2LXtcXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmMtMjcwMi19XFxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYzoyNzAzOkVYUE9SVF9TWU1CT0woZ2VucGh5X3NvZnRfcmVzZXQpO1xcbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmMtMjcwNC1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDNUMDc6Mzg6MDIuODA2NzA3MDUyWiIsIlNlcSI6MjEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjIwNjI0MDg4Mzk1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IENvbmNlcm5zIFJlZ2FyZGluZyB0aGUgUEhZIEluaXRpYWxpemF0aW9uIFNlcXVlbmNlKipcblxuT2theSwgc28gSSdtIGZvY3VzaW5nIG9uIHRoZSBQSFkgaW5pdGlhbGl6YXRpb24gZmxvdyBhbmQgSSd2ZSBnb3QgYSBjb3VwbGUgb2YgaW1wb3J0YW50IHRoaW5ncyB0byBjb25zaWRlciBoZXJlLiBSaWdodCwgc28gYHNvZnRfcmVzZXRgIGlzIGNhbGxlZCB3aXRoaW4gYHBoeV9pbml0X2h3YCwgd2hpY2ggaGFwcGVucyAqYmVmb3JlKiBgY29uZmlnX2luaXRgLiBBY3R1YWxseSwgd2FpdCwgbGV0IG1lIHJlcGhyYXNlIHRoYXQuLi4gYHBoeV9pbml0X2h3YCBjYWxscyBgc29mdF9yZXNldGAgKmJlZm9yZSogYGNvbmZpZ19pbml0YC4gVGhhdCdzIGNyaXRpY2FsLiBUaGF0IG1lYW5zIHRoYXQgYGdlbnBoeV9jNDVfcG1hX3NvZnRfcmVzZXRgIGlzIGdvaW5nIHRvIGV4ZWN1dGUgcmVnYXJkbGVzcyBvZiB3aGV0aGVyIHRoZSBzdWJzZXF1ZW50IGZpcm13YXJlIGxvYWRpbmcgaXMgc3VjY2Vzc2Z1bCBvciBub3QuIFdlIG5lZWQgdG8gYmUgYXdhcmUgb2YgdGhpcyBhbmQgZW5zdXJlIHRoYXQncyB0aGUgaW50ZW5kZWQgYmVoYXZpb3VyLlxuXG5GdXJ0aGVybW9yZSwgSSdtIG5vdGluZyB0aGF0IGBnZW5waHlfYzQ1X2FuX3NldHVwX21hc3Rlcl9zbGF2ZWAgYW5kIGBnZW5waHlfYzQ1X3JlYWRfbWFzdGVyX3NsYXZlYCBhcmUgbGlua2VkIHRvIGBnZW5waHlfYzQ1X2NvbmZpZ19hbmVnYCBhbmQgYGdlbnBoeV9jNDVfcmVhZF9zdGF0dXNgIHJlc3BlY3RpdmVseS4gVGhvc2UgZnVuY3Rpb25zIGFyZSB0cmlnZ2VyZWQgd2hlbiB0aGUgbmV0d29yayBpbnRlcmZhY2UgY29tZXMgb25saW5lLiBTbywgd2hhdCBoYXBwZW5zIGlmIGBjb25maWdfaW5pdGAgc3Vic2VxdWVudGx5IGZhaWxzPyBEb2VzIHRoZSBQSFkgZGV2aWNlIGdldCBwcm9wZXJseSByZWdpc3RlcmVkIHdpdGggdGhlIHN5c3RlbT8gSSBuZWVkIHRvIGxvb2sgaW50byB0aGlzIG1vcmUgZGVlcGx5LiBJIHNob3VsZCBwcm9iYWJseSBiZSBjaGVja2luZyBgcGh5X2RldmljZV9hdHRhY2hgIG9yIGBwaHlfYXR0YWNoX2RpcmVjdGAgdG8gc2VlIGhvdyB0aGF0IGludGVyYWN0cyB3aXRoIGEgcG90ZW50aWFsIGBjb25maWdfaW5pdGAgZmFpbHVyZS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhhdCBjYWxsIGZsb3cgaW4gbW9yZSBkZXRhaWwuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjM3MDU5LCJPdXRwdXRUb2tlbnMiOjM2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTg3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAzVDA3OjM4OjIzLjQzMDc5OTY0N1oiLCJTZXEiOjIyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTI3NDI3OTM1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInBoeV9pbml0X2h3XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYz0zNzg9c3RhdGljIF9fbWF5YmVfdW51c2VkIGludCBtZGlvX2J1c19waHlfcmVzdW1lKHN0cnVjdCBkZXZpY2UgKmRldilcXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmMtMzk4LVxcbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmM6Mzk5OlxcdHJldCA9IHBoeV9pbml0X2h3KHBoeWRldik7XFxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYy00MDAtXFx0aWYgKHJldCBcXHUwMDNjIDApXFxuLS1cXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jPTEzMDU9RVhQT1JUX1NZTUJPTChwaHlfZGlzY29ubmVjdCk7XFxuLS1cXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jLTEzMjEtICogICBlZmZvcnQgdG8gc3VwcG9ydCBzdWNoIGJyb2tlbiBQSFlzLCB0aGlzIGZ1bmN0aW9uIGlzIHNlcGFyYXRlIGZyb20gdGhlXFxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYzoxMzIyOiAqICAgc3RhbmRhcmQgcGh5X2luaXRfaHcoKSB3aGljaCB3aWxsIHplcm8gYWxsIHRoZSBvdGhlciBiaXRzIGluIHRoZSBCTUNSXFxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYy0xMzIzLSAqICAgYW5kIHJlYXBwbHkgYWxsIGRyaXZlci1zcGVjaWZpYyBhbmQgYm9hcmQtc3BlY2lmaWMgZml4dXBzLlxcbi0tXFxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYz0xMzI1PXN0YXRpYyBpbnQgcGh5X3BvbGxfcmVzZXQoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmMtMTM0MC1cXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jOjEzNDE6aW50IHBoeV9pbml0X2h3KHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXFxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYy0xMzQyLXtcXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmMtMTM4Ny19XFxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYzoxMzg4OkVYUE9SVF9TWU1CT0wocGh5X2luaXRfaHcpO1xcbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmMtMTM4OS1cXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmM9MTc1Mj1pbnQgcGh5X2F0dGFjaF9kaXJlY3Qoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldixcXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmMtMTg3NC1cXHQgKi9cXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jOjE4NzU6XFx0ZXJyID0gcGh5X2luaXRfaHcocGh5ZGV2KTtcXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jLTE4NzYtXFx0aWYgKGVycilcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDNUMDc6Mzg6MjMuNTU4MjMzMzEyWiIsIlNlcSI6MjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjE1MTEzNjIzOTE2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkZ1enppbmcgdGhlIFJUTDgyNjF4IFBIWSBGaXJtd2FyZSoqXG5cbk9rYXksIHNvIGhlcmUncyB0aGUgZGVhbDogYHBoeV9pbml0X2h3YCBnZXRzIGNhbGxlZCB3aXRoaW4gYHBoeV9hdHRhY2hfZGlyZWN0YC4gSWYgYHBoeV9pbml0X2h3YCBib21icyBvdXQg4oCTIG1heWJlIGJlY2F1c2UgYGNvbmZpZ19pbml0YCBjaG9rZXMgb24gbWlzc2luZyBmaXJtd2FyZSDigJMgdGhlbiBgcGh5X2F0dGFjaF9kaXJlY3RgIGdvZXMgZG93biB3aXRoIGl0LCBhbmQgdGhhdCBtZWFucyB0aGUgbmV0d29yayBkcml2ZXIgZmFpbHMgdG8gb3Blbi4gQnV0LCB0aGVyZSdzIGEgc2F2aW5nIGdyYWNlOiBTeXprYWxsZXIhIFdlIGNhbiBhY3R1YWxseSBsZXZlcmFnZSBTeXprYWxsZXIgdG8gaW5qZWN0IHRoYXQgbWlzc2luZyBmaXJtd2FyZS4gSXQgaGFzIHRoZSBjYXBhYmlsaXR5IHRvIHByb3ZpZGUgdGhlIGZpcm13YXJlIGZpbGVzIHdoZW4gcmVxdWVzdGVkLlxuXG5Mb29raW5nIGNsb3NlciwgdGhlIGZpcm13YXJlIGxvYWRpbmcgb25seSBoYXBwZW5zIGlmIGBwcml2LVx1MDAzZWZ3X25hbWVgIGlzIHNldC4gTm93LCB3aGVyZSBpcyBgcHJpdi1cdTAwM2Vmd19uYW1lYCBzZXQ/IEFoLCBpbiBgcnRsODI2MXhfcHJvYmVgLCBidXQgb25seSBpZiBgc3ViX3BoeV9pZGAgaXMgZXF1YWwgdG8gYFJUTDgyNjFDX0NFX01PREVMYC4gSWYgYHN1Yl9waHlfaWRgIGlzIGFueXRoaW5nIGVsc2UsIGBydGw4MjYxeF9wcm9iZWAgcmV0dXJucyBgLUVOT0RFVmAuIEFuZCBob3cgZG8gd2UgZGV0ZXJtaW5lIHRoZSB2YWx1ZSBvZiBgc3ViX3BoeV9pZGA/IGBydGw4MjYxeF9wcm9iZWAgcmVhZHMgYFJUTF84MjYxWF9TVUJfUEhZX0lEX0FERFJgIGZyb20gYE1ESU9fTU1EX1ZFTkQyYC5cblxuU28gaGVyZeKAmXMgdGhlIGludGVyZXN0aW5nIHBhcnQ6IGlmIG91ciBtb2NrIFVTQiBkZXZpY2UgdGVsbHMgaXQgdGhhdCB0aGUgYHN1Yl9waHlfaWRgIGlzIGBSVEw4MjYxQ19DRV9NT0RFTGAgKHdoaWNoIGlzIGNvbnZlbmllbnRseSBgMHgwMGApLCBpdCBzZXRzIGBwcml2LVx1MDAzZWZ3X25hbWVgIHRvIGBSVEw4MjYxQ19DRV9GV19OQU1FYC4gVGhhdCdzIG91ciB0cmlnZ2VyISBOb3csIGlmIHdlIHdhbnQgdG8gZnV6eiB0aGUgZmlybXdhcmUgZXhlY3V0aW9uLCBTeXprYWxsZXIgY2FuIHByb3ZpZGUgdGhlIGZpcm13YXJlLiBUaGUgZmlybXdhcmUgZm9ybWF0IGlzIHBhcnNlZCBpbiBgcnRsODI2MXhfdmVyaWZ5X2Zpcm13YXJlYCBhbmQgdGhlbiBleGVjdXRlZCBpbiBgcnRsODI2MXhfZndfZXhlY3V0ZV9lbnRyeWAuXG5cblRoaXMgaXMgZ29sZCEgVGhpcyBpcyAqdGV4dGJvb2sqIGZ1enppbmcgdGVycml0b3J5LiBUaGlzIGNvZGUgaXMgZnVuY3Rpb25hbCwgYW5kIGl0IHNob3VsZCBiZSBmdXp6ZWQhIEl0IHJlYWRzIGFuIGV4dGVybmFsIGZpbGUgKHRoZSBmaXJtd2FyZSkgYW5kIHRoZW4gaW50ZXJhY3RzIHdpdGggaGFyZHdhcmUgKHRoZSBNRElPIGJ1cyksIG1ha2luZyBpdCBhIGdyZWF0IHRhcmdldC4gU3l6a2FsbGVyIGNhbiBnZW5lcmF0ZSBhcmJpdHJhcnkgZmlybXdhcmUgZmlsZXMsIHdoaWNoIGNhbiB0aGVuIHRyaWdnZXIgdGhpcyBjb2RlLiBUaGlzIGlzIGRlZmluaXRlbHkgYSBwcm9taXNpbmcgYXZlbnVlIGZvciBmdXp6aW5nLCBiZWNhdXNlIGl04oCZcyBhIGZpbGUgcGFyc2luZyBhbmQgaGFyZHdhcmUgaW50ZXJhY3Rpb24gc2VxdWVuY2UuXG5cbkFscmlnaHQsIGxldCdzIGxpc3QgdGhlIGZ1bmN0aW9ucywganVzdCB0byBiZSBzdXJlIHdlJ3ZlIGdvdCBhbGwgdGhlIHBpZWNlczogYGdlbnBoeV9jNDVfcG1hX3NvZnRfcmVzZXRgLCBgZ2VucGh5X2M0NV9hbl9zZXR1cF9tYXN0ZXJfc2xhdmVgLCBgZ2VucGh5X2M0NV9yZWFkX21hc3Rlcl9zbGF2ZWAsIGBydGw4MjYxeF9wcm9iZWAsIGBydGw4MjYxeF9nZXRfZmVhdHVyZXNgLCBgcnRsODI2MXhfcmVhZF9zdGF0dXNgLCBgcnRsODI2MXhfdmVyaWZ5X2Zpcm13YXJlYCwgYHJ0bDgyNjF4X2Z3X2V4ZWN1dGVfZW50cnlgLCBgcnRsODI2MXhfZndfbG9hZGAsIGBydGw4MjYxeF9jb25maWdfaW50cmAsIGBydGw4MjYxeF9oYW5kbGVfaW50ZXJydXB0YCwgYHJ0bDgyNjF4X2NvbmZpZ19hbmVnYCwgYW5kIGBydGw4MjYxeF9jb25maWdfaW5pdGAuIFllcCwgdGhvc2UgYWxsIGxvb2sgcmVhY2hhYmxlLlxuXG5UaGUgb25seSBjb25maWcgbmVlZGVkIHNlZW1zIHRvIGJlIGBSRUFMVEVLX1BIWWAsIHdoaWNoIGNvbXBpbGVzIGBkcml2ZXJzL25ldC9waHkvcmVhbHRlay9yZWFsdGVrX21haW4uY2AuXG5cblBlcmZlY3QuIExldCdzIG1ha2Ugc3VyZSBgUkVBTFRFS19QSFlgIGlzIHRoZSBvbmx5IGNvbmZpZyByZXF1aXJlZC5cblxuXG4iLCJJbnB1dFRva2VucyI6MzgxNDEsIk91dHB1dFRva2VucyI6MzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo2NzksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDNUMDc6Mzg6MzguNjcxODU5OTk4WiIsIlNlcSI6MjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozMjA3MDc2MjksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwicmVhbHRla19tYWluLm9cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvcGh5L3JlYWx0ZWsvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L3BoeS9yZWFsdGVrL01ha2VmaWxlLTEtIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxcbmRyaXZlcnMvbmV0L3BoeS9yZWFsdGVrL01ha2VmaWxlOjI6cmVhbHRlay15XFx0XFx0XFx0Kz0gcmVhbHRla19tYWluLm9cXG5kcml2ZXJzL25ldC9waHkvcmVhbHRlay9NYWtlZmlsZS0zLXJlYWx0ZWstJChDT05GSUdfUkVBTFRFS19QSFlfSFdNT04pICs9IHJlYWx0ZWtfaHdtb24ub1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wM1QwNzozODozOC45OTI1NzQ5NTdaIiwiU2VxIjoyNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6ODAzNTE0NDE2NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqSW52ZXN0aWdhdGluZyBhIFJlYWx0ZWsgUEhZIElzc3VlKipcblxuUmlnaHQsIGxldCdzIHNlZS4gVGhlIGlkZW50aWZpZXIgYHJlYWx0ZWsteWAuLi4gdGhhdCBpbW1lZGlhdGVseSBzdWdnZXN0cyBpdCdzIGEgY29tcG9uZW50IG9mIHRoZSBgcmVhbHRla2AgbW9kdWxlLCB3aGljaCBpcyBhIGtleSBsZWFkLiBJJ2xsIG5lZWQgdG8gY29uZmlybSB0aGF0IHN1c3BpY2lvbiBhbmQgdW5kZXJzdGFuZCB3aGVyZSB0byBmaW5kIHJlbGF0ZWQgY29uZmlndXJhdGlvbi4gVGhlcmVmb3JlLCBteSBuZXh0IHN0ZXAgaXMgdG8gZXhhbWluZSB0aGUgYGRyaXZlcnMvbmV0L3BoeS9NYWtlZmlsZWAuIFRoYXQncyB3aGVyZSB0aGUgUEhZIGRyaXZlciBjb25maWd1cmF0aW9ucyB1c3VhbGx5IHJlc2lkZS4gSSdtIGV4cGVjdGluZyB0byBmaW5kIHJlZmVyZW5jZXMgdG8gdGhlIGByZWFsdGVrYCBjb21wb25lbnQgdGhlcmUsIHdoaWNoIHdpbGwgY29uZmlybSBteSBpbml0aWFsIGh5cG90aGVzaXMgYW5kIHBvaW50IG1lIHRvd2FyZHMgdGhlIHJlbGV2YW50IGJ1aWxkIGFuZCBpbmNsdWRlIGRpcmVjdGl2ZXMuIEtub3dpbmcgdGhlIHN0cnVjdHVyZSBvZiB0aGUgYE1ha2VmaWxlYCwgSSBzaG91bGQgcXVpY2tseSBiZSBhYmxlIHRvIHNlZSB0aGUgYnVpbGQgb3B0aW9ucyBhbmQgYXNzb2NpYXRlZCBkZXBlbmRlbmNpZXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjM5NzIwLCJPdXRwdXRUb2tlbnMiOjI5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDNUMDc6Mzg6NDcuMDI3NzIyMTgyWiIsIlNlcSI6MjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNDI5NzQyMTUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwicmVhbHRla1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC9waHkvTWFrZWZpbGVcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvcGh5L01ha2VmaWxlPTk0PW9iai0kKENPTkZJR19RU0VNSV9QSFkpXFx0XFx0Kz0gcXNlbWkub1xcbmRyaXZlcnMvbmV0L3BoeS9NYWtlZmlsZTo5NTpvYmotJChDT05GSUdfUkVBTFRFS19QSFkpXFx0Kz0gcmVhbHRlay9cXG5kcml2ZXJzL25ldC9waHkvTWFrZWZpbGUtOTYtb2JqLSQoQ09ORklHX1JFTkVTQVNfUEhZKVxcdCs9IHVQRDYwNjIwLm9cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDNUMDc6Mzg6NDcuMTcwNzA0MjM3WiIsIlNlcSI6MjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjExODE5NDU1MzA3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgc3VtbWFyeSwgdGFpbG9yZWQgYXMgaWYgSSdtIGFuIGV4cGVydCBpbiB0aGlzIGZpZWxkOlxuXG4qKktlcm5lbCBDb25maWd1cmF0aW9uIEFuYWx5c2lzOiBSZWFsdGVrIFBIWSoqXG5cbkFscmlnaHQsIGNvbmZpcm1lZCwgYENPTkZJR19SRUFMVEVLX1BIWWAgaXMgaW5kZWVkIHRoZSBjb25maWd1cmF0aW9uIGl0ZW0gd2UncmUgbG9va2luZyBhdC4gR29vZCBzdGFydC4gTm93LCB0aGUgbmV4dCBsb2dpY2FsIHN0ZXAgaXMgdG8gcXVpY2tseSBkb3VibGUtY2hlY2sgaWYgdGhlcmUgYXJlIGFueSAqb3RoZXIqIHJlbGV2YW50IGNvbmZpZ3MgdGhhdCBtaWdodCBiZSBpbnZvbHZlZCBvciBpbXBhY3QgdGhpcyBvbmUsIGp1c3QgdG8gYmUgdGhvcm91Z2guIFdlIGRvbid0IHdhbnQgdG8gbWlzcyBhbnl0aGluZyBzdWJ0bGUuXG5cblRoZSBwYXRjaCBpdHNlbGYgcG9pbnRzIGRpcmVjdGx5IHRvIGBkcml2ZXJzL25ldC9waHkvcGh5LWM0NS5jYC4gVGhpcyBzdWdnZXN0cyBhIHBvdGVudGlhbCBjb25kaXRpb25hbCBjb21waWxhdGlvbiBzY2VuYXJpbywgc28gdGhhdCdzIHRoZSBhbmdsZSBJJ20gZm9jdXNpbmcgb24gbm93LiBTcGVjaWZpY2FsbHksIEkgbmVlZCB0byB2ZXJpZnkgKmhvdyogYHBoeS1jNDUuY2AgaXMgY29tcGlsZWQuIElzIGl0IGRpcmVjdGx5IHRpZWQgdG8gYENPTkZJR19SRUFMVEVLX1BIWWAsIG9yIGFyZSB0aGVyZSBvdGhlciBkZXBlbmRlbmNpZXMgb3Igc3Vycm91bmRpbmcgY29uZmlncyB0aGF0IGNvbnRyb2wgaXRzIGluY2x1c2lvbj8gVGhhdCdzIHRoZSBrZXkgcXVlc3Rpb24gdG8gZmlndXJlIG91dCBpZiB0aGVyZSBpcyBhbnl0aGluZyB0aGF0IGNvdWxkIGltcGFjdCBhIHVzZXIncyBkZXZpY2UuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQwMDU5LCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NjAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDNUMDc6Mzg6NTguOTkwMTYzNTk0WiIsIlNlcSI6MjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNDY0NDk4MTUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwicGh5LWM0NS5vXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L3BoeS9NYWtlZmlsZVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC9waHkvTWFrZWZpbGUtMy1cXG5kcml2ZXJzL25ldC9waHkvTWFrZWZpbGU6NDpsaWJwaHkteVxcdFxcdFxcdDo9IHBoeS5vIHBoeS1jNDUubyBwaHktY29yZS5vIHBoeV9kZXZpY2UubyBcXFxcXFxuZHJpdmVycy9uZXQvcGh5L01ha2VmaWxlLTUtXFx0XFx0XFx0XFx0ICAgbGlua21vZGUubyBwaHlfbGlua190b3BvbG9neS5vIFxcXFxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDNUMDc6Mzg6NTkuMTM2NjIwNjA5WiIsIlNlcSI6MjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjE0MzA3MzQzMTM2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKlJlZmluaW5nIHRoZSBUYXJnZXQgZm9yIEZ1enppbmcgdGhlIFJlYWx0ZWsgUlRMODI2MUMgUEhZIFN1cHBvcnQqKlxuXG5Pa2F5LCBzbyBJJ20gdGhpbmtpbmcgYWJvdXQgaG93IHRvIGVmZmVjdGl2ZWx5IHRhcmdldCB0aGlzIG5ldyBSZWFsdGVrIFJUTDgyNjFDIFBIWSBzdXBwb3J0IGluIHRoZSBrZXJuZWwgZm9yIGZ1enppbmcuICBUaGlzIGlzbid0IGp1c3QgYSBzaW1wbGUgZHJpdmVyOyBpdCBpbmNsdWRlcyBmaXJtd2FyZSBsb2FkaW5nIGFuZCBDbGF1c2UgNDUgbWFzdGVyL3NsYXZlIGNvbmZpZ3VyYXRpb24sIHdoaWNoIGltbWVkaWF0ZWx5IG1ha2VzIGl0IG1vcmUgaW50ZXJlc3RpbmcgZnJvbSBhIHNlY3VyaXR5IHBlcnNwZWN0aXZlLCBlc3BlY2lhbGx5IHRoZSBmaXJtd2FyZSBoYW5kbGluZy4gIEl0J3MgcGFydCBvZiBgbGlicGh5YCwgYW5kIHRoYXQncyBjb25kaXRpb25hbGx5IGNvbXBpbGVkIGJhc2VkIG9uIGBDT05GSUdfUEhZTElCYCwgd2hpY2ggaXMgZW5hYmxlZCBieSBkZWZhdWx0IGZvciBuZXR3b3JraW5nLCB3aGljaCBpcyBnb29kLiBUaGF0IHNob3VsZCBzaW1wbGlmeSB0aGluZ3MuXG5cblNvLCB0aGUga2V5IGNvbmZpZ3VyYXRpb24gb3B0aW9uIGlzIGBSRUFMVEVLX1BIWWAuIFRoYXQncyB0aGUgb25lIHdlIG5lZWQuXG5cbk5vdywgbGV0J3MgbmFpbCBkb3duIHRoZSBzcGVjaWZpYyBmdW5jdGlvbnMgd2Ugc2hvdWxkIGZvY3VzIG9uLiAgSSBpbml0aWFsbHkgbGlzdGVkIHRoZXNlOiBgcnRsODI2MXhfcHJvYmVgLCBgcnRsODI2MXhfZ2V0X2ZlYXR1cmVzYCwgYHJ0bDgyNjF4X3JlYWRfc3RhdHVzYCwgYHJ0bDgyNjF4X3ZlcmlmeV9maXJtd2FyZWAsIGBydGw4MjYxeF9md19leGVjdXRlX2VudHJ5YCwgYHJ0bDgyNjF4X2Z3X2xvYWRgLCBgcnRsODI2MXhfY29uZmlnX2ludHJgLCBgcnRsODI2MXhfaGFuZGxlX2ludGVycnVwdGAsIGBydGw4MjYxeF9jb25maWdfYW5lZ2AsIGBydGw4MjYxeF9jb25maWdfaW5pdGAsIGBnZW5waHlfYzQ1X3BtYV9zb2Z0X3Jlc2V0YCwgYGdlbnBoeV9jNDVfYW5fc2V0dXBfbWFzdGVyX3NsYXZlYCwgYW5kIGBnZW5waHlfYzQ1X3JlYWRfbWFzdGVyX3NsYXZlYC5cblxuV2FpdCwgIGBydGw4MjYxeF9oYW5kbGVfaW50ZXJydXB0YCBpcyBhbiBpbnRlcnJ1cHQgaGFuZGxlci4gSXQgaXMgdHJpZ2dlcmVkIG9ubHkgaWYgaW50ZXJydXB0cyBhcmUgc3VwcG9ydGVkIGFuZCBlbmFibGVkIG9uIHRoZSBQSFkuICBTeXprYWxsZXIgbWlnaHQgYmUgYWJsZSB0byB0cmlnZ2VyIHRob3NlIGlmIHRoZSB2aXJ0dWFsIE1ESU8gYnVzIG9yIFVTQiBkZXZpY2UgZW11bGF0ZXMgdGhlIGludGVycnVwdCBzdGF0dXMgcmVnaXN0ZXIgYW5kIGludGVycnVwdCBsaW5lLiBJJ20gbm90IGVudGlyZWx5IHN1cmUgaG93IGVhc3kgdGhhdCB3aWxsIGJlIHdpdGhvdXQgYSBtb3JlIHNvcGhpc3RpY2F0ZWQgbW9jayBkZXZpY2UuICBUaGUgb3RoZXIgZnVuY3Rpb25zIGFyZSBkZWZpbml0ZWx5IHJlYWNoYWJsZSwgdGhvdWdoLlxuXG5TbywgSSBzaG91bGQgcmVmaW5lIHRoaXMgbGlzdC4gSSdsbCBkZWZpbml0ZWx5IGtlZXA6IGBydGw4MjYxeF9md19leGVjdXRlX2VudHJ5YCwgYHJ0bDgyNjF4X3ZlcmlmeV9maXJtd2FyZWAsIGBydGw4MjYxeF9md19sb2FkYCwgYHJ0bDgyNjF4X2NvbmZpZ19pbml0YCwgYHJ0bDgyNjF4X3Byb2JlYCwgYHJ0bDgyNjF4X2NvbmZpZ19hbmVnYCwgYW5kIGBydGw4MjYxeF9yZWFkX3N0YXR1c2AuIFRoZW4gSSdsbCBhZGQgYGdlbnBoeV9jNDVfcG1hX3NvZnRfcmVzZXRgLCBgZ2VucGh5X2M0NV9hbl9zZXR1cF9tYXN0ZXJfc2xhdmVgLCBhbmQgYGdlbnBoeV9jNDVfcmVhZF9tYXN0ZXJfc2xhdmVgIGJlY2F1c2UgdGhleSdyZSBwYXJ0IG9mIHRoaXMgZmVhdHVyZS5cblxuQXJlIHRoZXJlIGFueSBvdGhlcnM/IFllcyEgSSBzaG91bGQgYWxzbyBpbmNsdWRlIGBydGw4MjYxeF9nZXRfZmVhdHVyZXNgIGFuZCBgcnRsODI2MXhfY29uZmlnX2ludHJgLCBhbmQgYHJ0bDgyNjF4X2hhbmRsZV9pbnRlcnJ1cHRgLiBJJ2xsIGluY2x1ZGUgdGhlbSBhbGwuIFRoZXkgYXJlIHNwZWNpZmljIHRvIHRoaXMgbmV3IGZlYXR1cmUgYW5kIG5vdCBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucy5cblxuSGFuZyBvbi4gSSByZWNhbGwgdGhhdCBgZ2VucGh5X2M0NV9hbl9zZXR1cF9tYXN0ZXJfc2xhdmVgIGFuZCBgZ2VucGh5X2M0NV9yZWFkX21hc3Rlcl9zbGF2ZWAgYXJlIGFjdHVhbGx5ICpzdGF0aWMqIGZ1bmN0aW9ucyBpbiBgcGh5LWM0NS5jYC4gIFRoZSBxdWVzdGlvbiBpczogQ2FuIHN5emthbGxlciBldmVuIGRlYWwgd2l0aCBzdGF0aWMgZnVuY3Rpb25zIGluIGBGb2N1c1N5bWJvbHNgPyBZZXMsIGl0IGNhbiwgdGhhdCdzIGZpbmUuXG5cbk5vdywgdG8gYmUgY29tcGxldGVseSBzdXJlLCBsZXQncyBkb3VibGUtY2hlY2sgdGhhdCBgUkVBTFRFS19QSFlgIGlzIGEgdHJpc3RhdGUgY29uZmlnLCBub3QgYSBib29sLiAgWWVwLCBnb29kLiBUaGF0J3MgdGhlIG9ubHkgb25lIHdlICpuZWVkKiB0byBlbmFibGUuXG5cbk9rYXksIGxldCdzIHN0ZXAgYmFjayBhbmQgcmV2aWV3LiBUaGUgbmV3IGNvZGUgc3VwcG9ydHMgdGhlIFJlYWx0ZWsgUlRMODI2MUMgMTBHYnBzIFBIWSwgaW5jbHVkaW5nIGZpcm13YXJlIGxvYWRpbmcgYW5kIHBhcnNpbmcsIGFuZCBDbGF1c2UgNDUgbWFzdGVyL3NsYXZlIGNvbmZpZ3VyYXRpb24uIFRoaXMgY29kZSBpcyByZWFjaGFibGUgdGhyb3VnaCBlbXVsYXRpb24sIGJ5LCBmb3IgaW5zdGFuY2UsIGVtdWxhdGluZyBhIFVTQiBuZXR3b3JrIGFkYXB0ZXIgdGhhdCByZWdpc3RlcnMgYW4gTURJTyBidXMgYW5kIHJlc3BvbmRzIHdpdGggdGhlIFJUTDgyNjFDIFBIWSBJRC4gRmlybXdhcmUgcGFyc2luZyAoYHJ0bDgyNjF4X3ZlcmlmeV9maXJtd2FyZWAsIGBydGw4MjYxeF9md19leGVjdXRlX2VudHJ5YCkgaXMgd2hlcmUgdGhlIHJlYWwgZnV6emluZyBpbnRlcmVzdCBsaWVzIHNpbmNlIGl0IHByb2Nlc3NlcyBleHRlcm5hbCBkYXRhLlxuXG5EbyBJIG5lZWQgdG8gc3BlY2lmeSBnZW5lcmljIGNvbmZpZ3MgbGlrZSBgQ09ORklHX1VTQl9ORVRfRFJJVkVSU2Agb3IgZ2VuZXJpYyBVU0Igb3IgTmV0IGNvbmZpZ3VyYXRpb25zPyBObywgbm90IHNwZWNpZmljYWxseS4gV2Ugb25seSBuZWVkIHRoZSBvbmUgZm9yIHRoZSBuZXcgY29kZS5cblxuRmluYWxseSwgaXMgdGhlcmUgYW55dGhpbmcgZWxzZT8gIExldCBtZSBzZWUuLi4gSXMgYFJUTDgyNjFDX0NFX0ZXX05BTUVgIHVzZWQgYW55d2hlcmUgZWxzZT8gTm8sIGl0J3MgZGVmaW5lZCBpbiB0aGUgcGF0Y2guIExldCdzIGNoZWNrIGBnZW5cblxuIiwiSW5wdXRUb2tlbnMiOjQwNDU2LCJPdXRwdXRUb2tlbnMiOjMwNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjk2NiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0wM1QwNzozOToxMy40NDM5NjY3NTVaIiwiU2VxIjozMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMTU0NTY5MTYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIlJFQUxURUtfUEhZXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwicnRsODI2MXhfcHJvYmVcIixcbiAgICBcInJ0bDgyNjF4X2dldF9mZWF0dXJlc1wiLFxuICAgIFwicnRsODI2MXhfcmVhZF9zdGF0dXNcIixcbiAgICBcInJ0bDgyNjF4X3ZlcmlmeV9maXJtd2FyZVwiLFxuICAgIFwicnRsODI2MXhfZndfZXhlY3V0ZV9lbnRyeVwiLFxuICAgIFwicnRsODI2MXhfZndfbG9hZFwiLFxuICAgIFwicnRsODI2MXhfY29uZmlnX2ludHJcIixcbiAgICBcInJ0bDgyNjF4X2hhbmRsZV9pbnRlcnJ1cHRcIixcbiAgICBcInJ0bDgyNjF4X2NvbmZpZ19hbmVnXCIsXG4gICAgXCJydGw4MjYxeF9jb25maWdfaW5pdFwiLFxuICAgIFwiZ2VucGh5X2M0NV9wbWFfc29mdF9yZXNldFwiLFxuICAgIFwiZ2VucGh5X2M0NV9hbl9zZXR1cF9tYXN0ZXJfc2xhdmVcIixcbiAgICBcImdlbnBoeV9jNDVfcmVhZF9tYXN0ZXJfc2xhdmVcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRzIHN1cHBvcnQgZm9yIHRoZSBSZWFsdGVrIFJUTDgyNjFDIDEwR2JwcyBQSFksIGluY2x1ZGluZyBmaXJtd2FyZSBsb2FkaW5nIGFuZCBwYXJzaW5nLCBhbmQgbmV3IENsYXVzZSA0NSBtYXN0ZXIvc2xhdmUgY29uZmlndXJhdGlvbiBmdW5jdGlvbnMuIFRoaXMgY29kZSBpcyByZWFjaGFibGUgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGJ5IGVtdWxhdGluZyBhIFVTQiBuZXR3b3JrIGFkYXB0ZXIgdGhhdCByZWdpc3RlcnMgYW4gTURJTyBidXMgYW5kIHJlc3BvbmRzIHdpdGggdGhlIFJUTDgyNjFDIFBIWSBJRC4gVGhlIGZpcm13YXJlIHBhcnNpbmcgbG9naWMgaXMgcGFydGljdWxhcmx5IGludGVyZXN0aW5nIGZvciBmdXp6aW5nIGFzIGl0IHByb2Nlc3NlcyBleHRlcm5hbCBkYXRhLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIlJFQUxURUtfUEhZXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwicnRsODI2MXhfcHJvYmVcIixcbiAgICBcInJ0bDgyNjF4X2dldF9mZWF0dXJlc1wiLFxuICAgIFwicnRsODI2MXhfcmVhZF9zdGF0dXNcIixcbiAgICBcInJ0bDgyNjF4X3ZlcmlmeV9maXJtd2FyZVwiLFxuICAgIFwicnRsODI2MXhfZndfZXhlY3V0ZV9lbnRyeVwiLFxuICAgIFwicnRsODI2MXhfZndfbG9hZFwiLFxuICAgIFwicnRsODI2MXhfY29uZmlnX2ludHJcIixcbiAgICBcInJ0bDgyNjF4X2hhbmRsZV9pbnRlcnJ1cHRcIixcbiAgICBcInJ0bDgyNjF4X2NvbmZpZ19hbmVnXCIsXG4gICAgXCJydGw4MjYxeF9jb25maWdfaW5pdFwiLFxuICAgIFwiZ2VucGh5X2M0NV9wbWFfc29mdF9yZXNldFwiLFxuICAgIFwiZ2VucGh5X2M0NV9hbl9zZXR1cF9tYXN0ZXJfc2xhdmVcIixcbiAgICBcImdlbnBoeV9jNDVfcmVhZF9tYXN0ZXJfc2xhdmVcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRzIHN1cHBvcnQgZm9yIHRoZSBSZWFsdGVrIFJUTDgyNjFDIDEwR2JwcyBQSFksIGluY2x1ZGluZyBmaXJtd2FyZSBsb2FkaW5nIGFuZCBwYXJzaW5nLCBhbmQgbmV3IENsYXVzZSA0NSBtYXN0ZXIvc2xhdmUgY29uZmlndXJhdGlvbiBmdW5jdGlvbnMuIFRoaXMgY29kZSBpcyByZWFjaGFibGUgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGJ5IGVtdWxhdGluZyBhIFVTQiBuZXR3b3JrIGFkYXB0ZXIgdGhhdCByZWdpc3RlcnMgYW4gTURJTyBidXMgYW5kIHJlc3BvbmRzIHdpdGggdGhlIFJUTDgyNjFDIFBIWSBJRC4gVGhlIGZpcm13YXJlIHBhcnNpbmcgbG9naWMgaXMgcGFydGljdWxhcmx5IGludGVyZXN0aW5nIGZvciBmdXp6aW5nIGFzIGl0IHByb2Nlc3NlcyBleHRlcm5hbCBkYXRhLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+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-workflow7zc5j[1] Phase: Succeeded StartedAt: 2026-07-03 07:39:25 +0000 UTC FinishedAt: 2026-07-03 07:39:25 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7zc5j[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-07-03 07:39:25 +0000 UTC FinishedAt: 2026-07-03 07:39:25 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7zc5j[2] Phase: Succeeded StartedAt: 2026-07-03 07:39:25 +0000 UTC FinishedAt: 2026-07-03 09:42:04 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7zc5j[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c75597caada080effbfbc0a7fb10dc2a3bb543ad","config_name":"upstream-apparmor-kasan.config","enable_configs":["REALTEK_PHY"],"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":["rtl8261x_probe","rtl8261x_get_features","rtl8261x_read_status","rtl8261x_verify_firmware","rtl8261x_fw_execute_entry","rtl8261x_fw_load","rtl8261x_config_intr","rtl8261x_handle_interrupt","rtl8261x_config_aneg","rtl8261x_config_init","genphy_c45_pma_soft_reset","genphy_c45_an_setup_master_slave","genphy_c45_read_master_slave"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c75597caada080effbfbc0a7fb10dc2a3bb543ad","config_name":"upstream-apparmor-kasan.config","enable_configs":["REALTEK_PHY"],"series_id":"35cfe895-1e7a-47cf-a441-1673be59f7c3","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-07-03 07:39:25 +0000 UTC FinishedAt: 2026-07-03 09:42:04 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"c75597caada080effbfbc0a7fb10dc2a3bb543ad","config_name":"upstream-apparmor-kasan.config","enable_configs":["REALTEK_PHY"],"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":["rtl8261x_probe","rtl8261x_get_features","rtl8261x_read_status","rtl8261x_verify_firmware","rtl8261x_fw_execute_entry","rtl8261x_fw_load","rtl8261x_config_intr","rtl8261x_handle_interrupt","rtl8261x_config_aneg","rtl8261x_config_init","genphy_c45_pma_soft_reset","genphy_c45_an_setup_master_slave","genphy_c45_read_master_slave"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"c75597caada080effbfbc0a7fb10dc2a3bb543ad","config_name":"upstream-apparmor-kasan.config","enable_configs":["REALTEK_PHY"],"series_id":"35cfe895-1e7a-47cf-a441-1673be59f7c3","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-workflow7zc5j[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c75597caada080effbfbc0a7fb10dc2a3bb543ad","config_name":"upstream-apparmor-kasan.config","enable_configs":["REALTEK_PHY"],"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":["rtl8261x_probe","rtl8261x_get_features","rtl8261x_read_status","rtl8261x_verify_firmware","rtl8261x_fw_execute_entry","rtl8261x_fw_load","rtl8261x_config_intr","rtl8261x_handle_interrupt","rtl8261x_config_aneg","rtl8261x_config_init","genphy_c45_pma_soft_reset","genphy_c45_an_setup_master_slave","genphy_c45_read_master_slave"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c75597caada080effbfbc0a7fb10dc2a3bb543ad","config_name":"upstream-apparmor-kasan.config","enable_configs":["REALTEK_PHY"],"series_id":"35cfe895-1e7a-47cf-a441-1673be59f7c3","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-07-03 07:39:25 +0000 UTC FinishedAt: 2026-07-03 07:39:51 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7zc5j[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c75597caada080effbfbc0a7fb10dc2a3bb543ad","config_name":"upstream-apparmor-kasan.config","enable_configs":["REALTEK_PHY"],"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":["rtl8261x_probe","rtl8261x_get_features","rtl8261x_read_status","rtl8261x_verify_firmware","rtl8261x_fw_execute_entry","rtl8261x_fw_load","rtl8261x_config_intr","rtl8261x_handle_interrupt","rtl8261x_config_aneg","rtl8261x_config_init","genphy_c45_pma_soft_reset","genphy_c45_an_setup_master_slave","genphy_c45_read_master_slave"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c75597caada080effbfbc0a7fb10dc2a3bb543ad","config_name":"upstream-apparmor-kasan.config","enable_configs":["REALTEK_PHY"],"series_id":"35cfe895-1e7a-47cf-a441-1673be59f7c3","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-07-03 07:39:25 +0000 UTC FinishedAt: 2026-07-03 07:39:44 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"c75597caada080effbfbc0a7fb10dc2a3bb543ad","config_name":"upstream-apparmor-kasan.config","enable_configs":["REALTEK_PHY"],"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-workflow7zc5j/series-workflow7zc5j-convert-artifact-617920941/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow7zc5j[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c75597caada080effbfbc0a7fb10dc2a3bb543ad","config_name":"upstream-apparmor-kasan.config","enable_configs":["REALTEK_PHY"],"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":["rtl8261x_probe","rtl8261x_get_features","rtl8261x_read_status","rtl8261x_verify_firmware","rtl8261x_fw_execute_entry","rtl8261x_fw_load","rtl8261x_config_intr","rtl8261x_handle_interrupt","rtl8261x_config_aneg","rtl8261x_config_init","genphy_c45_pma_soft_reset","genphy_c45_an_setup_master_slave","genphy_c45_read_master_slave"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c75597caada080effbfbc0a7fb10dc2a3bb543ad","config_name":"upstream-apparmor-kasan.config","enable_configs":["REALTEK_PHY"],"series_id":"35cfe895-1e7a-47cf-a441-1673be59f7c3","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-07-03 07:39:51 +0000 UTC FinishedAt: 2026-07-03 08:07:24 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7zc5j[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c75597caada080effbfbc0a7fb10dc2a3bb543ad","config_name":"upstream-apparmor-kasan.config","enable_configs":["REALTEK_PHY"],"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":["rtl8261x_probe","rtl8261x_get_features","rtl8261x_read_status","rtl8261x_verify_firmware","rtl8261x_fw_execute_entry","rtl8261x_fw_load","rtl8261x_config_intr","rtl8261x_handle_interrupt","rtl8261x_config_aneg","rtl8261x_config_init","genphy_c45_pma_soft_reset","genphy_c45_an_setup_master_slave","genphy_c45_read_master_slave"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c75597caada080effbfbc0a7fb10dc2a3bb543ad","config_name":"upstream-apparmor-kasan.config","enable_configs":["REALTEK_PHY"],"series_id":"35cfe895-1e7a-47cf-a441-1673be59f7c3","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-07-03 07:39:51 +0000 UTC FinishedAt: 2026-07-03 08:07:24 +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:*f2b64abe-9bd4-47d6-9f6d-a8f875523b3b,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-workflow7zc5j/series-workflow7zc5j-convert-artifact-617920941/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": "8397fd1d-4a5b-4a45-b9e8-0ddbef2bcb2a", "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-workflow7zc5j/series-workflow7zc5j-build-action-4040357283/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow7zc5j[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c75597caada080effbfbc0a7fb10dc2a3bb543ad","config_name":"upstream-apparmor-kasan.config","enable_configs":["REALTEK_PHY"],"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":["rtl8261x_probe","rtl8261x_get_features","rtl8261x_read_status","rtl8261x_verify_firmware","rtl8261x_fw_execute_entry","rtl8261x_fw_load","rtl8261x_config_intr","rtl8261x_handle_interrupt","rtl8261x_config_aneg","rtl8261x_config_init","genphy_c45_pma_soft_reset","genphy_c45_an_setup_master_slave","genphy_c45_read_master_slave"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c75597caada080effbfbc0a7fb10dc2a3bb543ad","config_name":"upstream-apparmor-kasan.config","enable_configs":["REALTEK_PHY"],"series_id":"35cfe895-1e7a-47cf-a441-1673be59f7c3","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-07-03 07:39:51 +0000 UTC FinishedAt: 2026-07-03 08:07:14 +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:*f2b64abe-9bd4-47d6-9f6d-a8f875523b3b,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-workflow7zc5j/series-workflow7zc5j-convert-artifact-617920941/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": "8397fd1d-4a5b-4a45-b9e8-0ddbef2bcb2a", "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-workflow7zc5j/series-workflow7zc5j-build-action-4040357283/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow7zc5j[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c75597caada080effbfbc0a7fb10dc2a3bb543ad","config_name":"upstream-apparmor-kasan.config","enable_configs":["REALTEK_PHY"],"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":["rtl8261x_probe","rtl8261x_get_features","rtl8261x_read_status","rtl8261x_verify_firmware","rtl8261x_fw_execute_entry","rtl8261x_fw_load","rtl8261x_config_intr","rtl8261x_handle_interrupt","rtl8261x_config_aneg","rtl8261x_config_init","genphy_c45_pma_soft_reset","genphy_c45_an_setup_master_slave","genphy_c45_read_master_slave"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c75597caada080effbfbc0a7fb10dc2a3bb543ad","config_name":"upstream-apparmor-kasan.config","enable_configs":["REALTEK_PHY"],"series_id":"35cfe895-1e7a-47cf-a441-1673be59f7c3","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-07-03 08:07:24 +0000 UTC FinishedAt: 2026-07-03 08:07:24 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7zc5j[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c75597caada080effbfbc0a7fb10dc2a3bb543ad","config_name":"upstream-apparmor-kasan.config","enable_configs":["REALTEK_PHY"],"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":["rtl8261x_probe","rtl8261x_get_features","rtl8261x_read_status","rtl8261x_verify_firmware","rtl8261x_fw_execute_entry","rtl8261x_fw_load","rtl8261x_config_intr","rtl8261x_handle_interrupt","rtl8261x_config_aneg","rtl8261x_config_init","genphy_c45_pma_soft_reset","genphy_c45_an_setup_master_slave","genphy_c45_read_master_slave"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c75597caada080effbfbc0a7fb10dc2a3bb543ad","config_name":"upstream-apparmor-kasan.config","enable_configs":["REALTEK_PHY"],"series_id":"35cfe895-1e7a-47cf-a441-1673be59f7c3","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-07-03 08:07:24 +0000 UTC FinishedAt: 2026-07-03 08:07:24 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7zc5j[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c75597caada080effbfbc0a7fb10dc2a3bb543ad","config_name":"upstream-apparmor-kasan.config","enable_configs":["REALTEK_PHY"],"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":["rtl8261x_probe","rtl8261x_get_features","rtl8261x_read_status","rtl8261x_verify_firmware","rtl8261x_fw_execute_entry","rtl8261x_fw_load","rtl8261x_config_intr","rtl8261x_handle_interrupt","rtl8261x_config_aneg","rtl8261x_config_init","genphy_c45_pma_soft_reset","genphy_c45_an_setup_master_slave","genphy_c45_read_master_slave"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c75597caada080effbfbc0a7fb10dc2a3bb543ad","config_name":"upstream-apparmor-kasan.config","enable_configs":["REALTEK_PHY"],"series_id":"35cfe895-1e7a-47cf-a441-1673be59f7c3","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-07-03 08:07:24 +0000 UTC FinishedAt: 2026-07-03 08:07:35 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7zc5j[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c75597caada080effbfbc0a7fb10dc2a3bb543ad","config_name":"upstream-apparmor-kasan.config","enable_configs":["REALTEK_PHY"],"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":["rtl8261x_probe","rtl8261x_get_features","rtl8261x_read_status","rtl8261x_verify_firmware","rtl8261x_fw_execute_entry","rtl8261x_fw_load","rtl8261x_config_intr","rtl8261x_handle_interrupt","rtl8261x_config_aneg","rtl8261x_config_init","genphy_c45_pma_soft_reset","genphy_c45_an_setup_master_slave","genphy_c45_read_master_slave"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c75597caada080effbfbc0a7fb10dc2a3bb543ad","config_name":"upstream-apparmor-kasan.config","enable_configs":["REALTEK_PHY"],"series_id":"35cfe895-1e7a-47cf-a441-1673be59f7c3","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-07-03 08:07:24 +0000 UTC FinishedAt: 2026-07-03 08:07:32 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"c75597caada080effbfbc0a7fb10dc2a3bb543ad","config_name":"upstream-apparmor-kasan.config","enable_configs":["REALTEK_PHY"],"series_id":"35cfe895-1e7a-47cf-a441-1673be59f7c3","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-workflow7zc5j/series-workflow7zc5j-convert-artifact-1415281160/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow7zc5j[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c75597caada080effbfbc0a7fb10dc2a3bb543ad","config_name":"upstream-apparmor-kasan.config","enable_configs":["REALTEK_PHY"],"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":["rtl8261x_probe","rtl8261x_get_features","rtl8261x_read_status","rtl8261x_verify_firmware","rtl8261x_fw_execute_entry","rtl8261x_fw_load","rtl8261x_config_intr","rtl8261x_handle_interrupt","rtl8261x_config_aneg","rtl8261x_config_init","genphy_c45_pma_soft_reset","genphy_c45_an_setup_master_slave","genphy_c45_read_master_slave"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c75597caada080effbfbc0a7fb10dc2a3bb543ad","config_name":"upstream-apparmor-kasan.config","enable_configs":["REALTEK_PHY"],"series_id":"35cfe895-1e7a-47cf-a441-1673be59f7c3","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-07-03 08:07:35 +0000 UTC FinishedAt: 2026-07-03 08:09:54 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7zc5j[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c75597caada080effbfbc0a7fb10dc2a3bb543ad","config_name":"upstream-apparmor-kasan.config","enable_configs":["REALTEK_PHY"],"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":["rtl8261x_probe","rtl8261x_get_features","rtl8261x_read_status","rtl8261x_verify_firmware","rtl8261x_fw_execute_entry","rtl8261x_fw_load","rtl8261x_config_intr","rtl8261x_handle_interrupt","rtl8261x_config_aneg","rtl8261x_config_init","genphy_c45_pma_soft_reset","genphy_c45_an_setup_master_slave","genphy_c45_read_master_slave"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c75597caada080effbfbc0a7fb10dc2a3bb543ad","config_name":"upstream-apparmor-kasan.config","enable_configs":["REALTEK_PHY"],"series_id":"35cfe895-1e7a-47cf-a441-1673be59f7c3","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-07-03 08:07:35 +0000 UTC FinishedAt: 2026-07-03 08:09:45 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*8397fd1d-4a5b-4a45-b9e8-0ddbef2bcb2a,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-workflow7zc5j/series-workflow7zc5j-build-action-4040357283/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-workflow7zc5j[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c75597caada080effbfbc0a7fb10dc2a3bb543ad","config_name":"upstream-apparmor-kasan.config","enable_configs":["REALTEK_PHY"],"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":["rtl8261x_probe","rtl8261x_get_features","rtl8261x_read_status","rtl8261x_verify_firmware","rtl8261x_fw_execute_entry","rtl8261x_fw_load","rtl8261x_config_intr","rtl8261x_handle_interrupt","rtl8261x_config_aneg","rtl8261x_config_init","genphy_c45_pma_soft_reset","genphy_c45_an_setup_master_slave","genphy_c45_read_master_slave"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c75597caada080effbfbc0a7fb10dc2a3bb543ad","config_name":"upstream-apparmor-kasan.config","enable_configs":["REALTEK_PHY"],"series_id":"35cfe895-1e7a-47cf-a441-1673be59f7c3","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-07-03 08:09:54 +0000 UTC FinishedAt: 2026-07-03 08:09:54 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7zc5j[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c75597caada080effbfbc0a7fb10dc2a3bb543ad","config_name":"upstream-apparmor-kasan.config","enable_configs":["REALTEK_PHY"],"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":["rtl8261x_probe","rtl8261x_get_features","rtl8261x_read_status","rtl8261x_verify_firmware","rtl8261x_fw_execute_entry","rtl8261x_fw_load","rtl8261x_config_intr","rtl8261x_handle_interrupt","rtl8261x_config_aneg","rtl8261x_config_init","genphy_c45_pma_soft_reset","genphy_c45_an_setup_master_slave","genphy_c45_read_master_slave"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c75597caada080effbfbc0a7fb10dc2a3bb543ad","config_name":"upstream-apparmor-kasan.config","enable_configs":["REALTEK_PHY"],"series_id":"35cfe895-1e7a-47cf-a441-1673be59f7c3","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-07-03 08:09:54 +0000 UTC FinishedAt: 2026-07-03 08:09:54 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7zc5j[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c75597caada080effbfbc0a7fb10dc2a3bb543ad","config_name":"upstream-apparmor-kasan.config","enable_configs":["REALTEK_PHY"],"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":["rtl8261x_probe","rtl8261x_get_features","rtl8261x_read_status","rtl8261x_verify_firmware","rtl8261x_fw_execute_entry","rtl8261x_fw_load","rtl8261x_config_intr","rtl8261x_handle_interrupt","rtl8261x_config_aneg","rtl8261x_config_init","genphy_c45_pma_soft_reset","genphy_c45_an_setup_master_slave","genphy_c45_read_master_slave"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c75597caada080effbfbc0a7fb10dc2a3bb543ad","config_name":"upstream-apparmor-kasan.config","enable_configs":["REALTEK_PHY"],"series_id":"35cfe895-1e7a-47cf-a441-1673be59f7c3","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-07-03 08:09:54 +0000 UTC FinishedAt: 2026-07-03 08:45:42 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7zc5j[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c75597caada080effbfbc0a7fb10dc2a3bb543ad","config_name":"upstream-apparmor-kasan.config","enable_configs":["REALTEK_PHY"],"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":["rtl8261x_probe","rtl8261x_get_features","rtl8261x_read_status","rtl8261x_verify_firmware","rtl8261x_fw_execute_entry","rtl8261x_fw_load","rtl8261x_config_intr","rtl8261x_handle_interrupt","rtl8261x_config_aneg","rtl8261x_config_init","genphy_c45_pma_soft_reset","genphy_c45_an_setup_master_slave","genphy_c45_read_master_slave"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c75597caada080effbfbc0a7fb10dc2a3bb543ad","config_name":"upstream-apparmor-kasan.config","enable_configs":["REALTEK_PHY"],"series_id":"35cfe895-1e7a-47cf-a441-1673be59f7c3","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-07-03 08:09:54 +0000 UTC FinishedAt: 2026-07-03 08:45:42 +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:*f2b64abe-9bd4-47d6-9f6d-a8f875523b3b,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-workflow7zc5j/series-workflow7zc5j-convert-artifact-1415281160/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": "7897382f-7114-4986-b648-5a5d287e9ddc", "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-workflow7zc5j/series-workflow7zc5j-build-action-1127488948/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow7zc5j[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c75597caada080effbfbc0a7fb10dc2a3bb543ad","config_name":"upstream-apparmor-kasan.config","enable_configs":["REALTEK_PHY"],"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":["rtl8261x_probe","rtl8261x_get_features","rtl8261x_read_status","rtl8261x_verify_firmware","rtl8261x_fw_execute_entry","rtl8261x_fw_load","rtl8261x_config_intr","rtl8261x_handle_interrupt","rtl8261x_config_aneg","rtl8261x_config_init","genphy_c45_pma_soft_reset","genphy_c45_an_setup_master_slave","genphy_c45_read_master_slave"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c75597caada080effbfbc0a7fb10dc2a3bb543ad","config_name":"upstream-apparmor-kasan.config","enable_configs":["REALTEK_PHY"],"series_id":"35cfe895-1e7a-47cf-a441-1673be59f7c3","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-07-03 08:09:54 +0000 UTC FinishedAt: 2026-07-03 08:45:32 +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:*f2b64abe-9bd4-47d6-9f6d-a8f875523b3b,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-workflow7zc5j/series-workflow7zc5j-convert-artifact-1415281160/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": "7897382f-7114-4986-b648-5a5d287e9ddc", "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-workflow7zc5j/series-workflow7zc5j-build-action-1127488948/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow7zc5j[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c75597caada080effbfbc0a7fb10dc2a3bb543ad","config_name":"upstream-apparmor-kasan.config","enable_configs":["REALTEK_PHY"],"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":["rtl8261x_probe","rtl8261x_get_features","rtl8261x_read_status","rtl8261x_verify_firmware","rtl8261x_fw_execute_entry","rtl8261x_fw_load","rtl8261x_config_intr","rtl8261x_handle_interrupt","rtl8261x_config_aneg","rtl8261x_config_init","genphy_c45_pma_soft_reset","genphy_c45_an_setup_master_slave","genphy_c45_read_master_slave"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c75597caada080effbfbc0a7fb10dc2a3bb543ad","config_name":"upstream-apparmor-kasan.config","enable_configs":["REALTEK_PHY"],"series_id":"35cfe895-1e7a-47cf-a441-1673be59f7c3","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-07-03 08:45:42 +0000 UTC FinishedAt: 2026-07-03 08:45:42 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7zc5j[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c75597caada080effbfbc0a7fb10dc2a3bb543ad","config_name":"upstream-apparmor-kasan.config","enable_configs":["REALTEK_PHY"],"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":["rtl8261x_probe","rtl8261x_get_features","rtl8261x_read_status","rtl8261x_verify_firmware","rtl8261x_fw_execute_entry","rtl8261x_fw_load","rtl8261x_config_intr","rtl8261x_handle_interrupt","rtl8261x_config_aneg","rtl8261x_config_init","genphy_c45_pma_soft_reset","genphy_c45_an_setup_master_slave","genphy_c45_read_master_slave"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c75597caada080effbfbc0a7fb10dc2a3bb543ad","config_name":"upstream-apparmor-kasan.config","enable_configs":["REALTEK_PHY"],"series_id":"35cfe895-1e7a-47cf-a441-1673be59f7c3","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-07-03 08:45:42 +0000 UTC FinishedAt: 2026-07-03 08:45:42 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7zc5j[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c75597caada080effbfbc0a7fb10dc2a3bb543ad","config_name":"upstream-apparmor-kasan.config","enable_configs":["REALTEK_PHY"],"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":["rtl8261x_probe","rtl8261x_get_features","rtl8261x_read_status","rtl8261x_verify_firmware","rtl8261x_fw_execute_entry","rtl8261x_fw_load","rtl8261x_config_intr","rtl8261x_handle_interrupt","rtl8261x_config_aneg","rtl8261x_config_init","genphy_c45_pma_soft_reset","genphy_c45_an_setup_master_slave","genphy_c45_read_master_slave"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c75597caada080effbfbc0a7fb10dc2a3bb543ad","config_name":"upstream-apparmor-kasan.config","enable_configs":["REALTEK_PHY"],"series_id":"35cfe895-1e7a-47cf-a441-1673be59f7c3","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-07-03 08:45:42 +0000 UTC FinishedAt: 2026-07-03 08:48:31 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7zc5j[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c75597caada080effbfbc0a7fb10dc2a3bb543ad","config_name":"upstream-apparmor-kasan.config","enable_configs":["REALTEK_PHY"],"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":["rtl8261x_probe","rtl8261x_get_features","rtl8261x_read_status","rtl8261x_verify_firmware","rtl8261x_fw_execute_entry","rtl8261x_fw_load","rtl8261x_config_intr","rtl8261x_handle_interrupt","rtl8261x_config_aneg","rtl8261x_config_init","genphy_c45_pma_soft_reset","genphy_c45_an_setup_master_slave","genphy_c45_read_master_slave"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c75597caada080effbfbc0a7fb10dc2a3bb543ad","config_name":"upstream-apparmor-kasan.config","enable_configs":["REALTEK_PHY"],"series_id":"35cfe895-1e7a-47cf-a441-1673be59f7c3","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-07-03 08:45:42 +0000 UTC FinishedAt: 2026-07-03 08:48:21 +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:*7897382f-7114-4986-b648-5a5d287e9ddc,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-workflow7zc5j/series-workflow7zc5j-build-action-1127488948/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-workflow7zc5j[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c75597caada080effbfbc0a7fb10dc2a3bb543ad","config_name":"upstream-apparmor-kasan.config","enable_configs":["REALTEK_PHY"],"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":["rtl8261x_probe","rtl8261x_get_features","rtl8261x_read_status","rtl8261x_verify_firmware","rtl8261x_fw_execute_entry","rtl8261x_fw_load","rtl8261x_config_intr","rtl8261x_handle_interrupt","rtl8261x_config_aneg","rtl8261x_config_init","genphy_c45_pma_soft_reset","genphy_c45_an_setup_master_slave","genphy_c45_read_master_slave"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c75597caada080effbfbc0a7fb10dc2a3bb543ad","config_name":"upstream-apparmor-kasan.config","enable_configs":["REALTEK_PHY"],"series_id":"35cfe895-1e7a-47cf-a441-1673be59f7c3","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-07-03 08:48:31 +0000 UTC FinishedAt: 2026-07-03 09:42:04 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7zc5j[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c75597caada080effbfbc0a7fb10dc2a3bb543ad","config_name":"upstream-apparmor-kasan.config","enable_configs":["REALTEK_PHY"],"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":["rtl8261x_probe","rtl8261x_get_features","rtl8261x_read_status","rtl8261x_verify_firmware","rtl8261x_fw_execute_entry","rtl8261x_fw_load","rtl8261x_config_intr","rtl8261x_handle_interrupt","rtl8261x_config_aneg","rtl8261x_config_init","genphy_c45_pma_soft_reset","genphy_c45_an_setup_master_slave","genphy_c45_read_master_slave"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c75597caada080effbfbc0a7fb10dc2a3bb543ad","config_name":"upstream-apparmor-kasan.config","enable_configs":["REALTEK_PHY"],"series_id":"35cfe895-1e7a-47cf-a441-1673be59f7c3","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-07-03 08:48:31 +0000 UTC FinishedAt: 2026-07-03 09:42:04 +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":["rtl8261x_probe","rtl8261x_get_features","rtl8261x_read_status","rtl8261x_verify_firmware","rtl8261x_fw_execute_entry","rtl8261x_fw_load","rtl8261x_config_intr","rtl8261x_handle_interrupt","rtl8261x_config_aneg","rtl8261x_config_init","genphy_c45_pma_soft_reset","genphy_c45_an_setup_master_slave","genphy_c45_read_master_slave"],"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:*8397fd1d-4a5b-4a45-b9e8-0ddbef2bcb2a,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*7897382f-7114-4986-b648-5a5d287e9ddc,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-workflow7zc5j/series-workflow7zc5j-build-action-4040357283/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-workflow7zc5j/series-workflow7zc5j-build-action-1127488948/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflow7zc5j[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c75597caada080effbfbc0a7fb10dc2a3bb543ad","config_name":"upstream-apparmor-kasan.config","enable_configs":["REALTEK_PHY"],"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":["rtl8261x_probe","rtl8261x_get_features","rtl8261x_read_status","rtl8261x_verify_firmware","rtl8261x_fw_execute_entry","rtl8261x_fw_load","rtl8261x_config_intr","rtl8261x_handle_interrupt","rtl8261x_config_aneg","rtl8261x_config_init","genphy_c45_pma_soft_reset","genphy_c45_an_setup_master_slave","genphy_c45_read_master_slave"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c75597caada080effbfbc0a7fb10dc2a3bb543ad","config_name":"upstream-apparmor-kasan.config","enable_configs":["REALTEK_PHY"],"series_id":"35cfe895-1e7a-47cf-a441-1673be59f7c3","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-07-03 08:48:31 +0000 UTC FinishedAt: 2026-07-03 08:48:53 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7zc5j[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c75597caada080effbfbc0a7fb10dc2a3bb543ad","config_name":"upstream-apparmor-kasan.config","enable_configs":["REALTEK_PHY"],"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":["rtl8261x_probe","rtl8261x_get_features","rtl8261x_read_status","rtl8261x_verify_firmware","rtl8261x_fw_execute_entry","rtl8261x_fw_load","rtl8261x_config_intr","rtl8261x_handle_interrupt","rtl8261x_config_aneg","rtl8261x_config_init","genphy_c45_pma_soft_reset","genphy_c45_an_setup_master_slave","genphy_c45_read_master_slave"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c75597caada080effbfbc0a7fb10dc2a3bb543ad","config_name":"upstream-apparmor-kasan.config","enable_configs":["REALTEK_PHY"],"series_id":"35cfe895-1e7a-47cf-a441-1673be59f7c3","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-07-03 08:48:31 +0000 UTC FinishedAt: 2026-07-03 08:48:46 +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":["rtl8261x_probe","rtl8261x_get_features","rtl8261x_read_status","rtl8261x_verify_firmware","rtl8261x_fw_execute_entry","rtl8261x_fw_load","rtl8261x_config_intr","rtl8261x_handle_interrupt","rtl8261x_config_aneg","rtl8261x_config_init","genphy_c45_pma_soft_reset","genphy_c45_an_setup_master_slave","genphy_c45_read_master_slave"],"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-workflow7zc5j/series-workflow7zc5j-convert-artifact-2426712001/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow7zc5j[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c75597caada080effbfbc0a7fb10dc2a3bb543ad","config_name":"upstream-apparmor-kasan.config","enable_configs":["REALTEK_PHY"],"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":["rtl8261x_probe","rtl8261x_get_features","rtl8261x_read_status","rtl8261x_verify_firmware","rtl8261x_fw_execute_entry","rtl8261x_fw_load","rtl8261x_config_intr","rtl8261x_handle_interrupt","rtl8261x_config_aneg","rtl8261x_config_init","genphy_c45_pma_soft_reset","genphy_c45_an_setup_master_slave","genphy_c45_read_master_slave"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c75597caada080effbfbc0a7fb10dc2a3bb543ad","config_name":"upstream-apparmor-kasan.config","enable_configs":["REALTEK_PHY"],"series_id":"35cfe895-1e7a-47cf-a441-1673be59f7c3","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-07-03 08:48:31 +0000 UTC FinishedAt: 2026-07-03 08:48:31 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7zc5j[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c75597caada080effbfbc0a7fb10dc2a3bb543ad","config_name":"upstream-apparmor-kasan.config","enable_configs":["REALTEK_PHY"],"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":["rtl8261x_probe","rtl8261x_get_features","rtl8261x_read_status","rtl8261x_verify_firmware","rtl8261x_fw_execute_entry","rtl8261x_fw_load","rtl8261x_config_intr","rtl8261x_handle_interrupt","rtl8261x_config_aneg","rtl8261x_config_init","genphy_c45_pma_soft_reset","genphy_c45_an_setup_master_slave","genphy_c45_read_master_slave"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c75597caada080effbfbc0a7fb10dc2a3bb543ad","config_name":"upstream-apparmor-kasan.config","enable_configs":["REALTEK_PHY"],"series_id":"35cfe895-1e7a-47cf-a441-1673be59f7c3","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-07-03 08:48:31 +0000 UTC FinishedAt: 2026-07-03 08:48:31 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7zc5j[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c75597caada080effbfbc0a7fb10dc2a3bb543ad","config_name":"upstream-apparmor-kasan.config","enable_configs":["REALTEK_PHY"],"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":["rtl8261x_probe","rtl8261x_get_features","rtl8261x_read_status","rtl8261x_verify_firmware","rtl8261x_fw_execute_entry","rtl8261x_fw_load","rtl8261x_config_intr","rtl8261x_handle_interrupt","rtl8261x_config_aneg","rtl8261x_config_init","genphy_c45_pma_soft_reset","genphy_c45_an_setup_master_slave","genphy_c45_read_master_slave"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c75597caada080effbfbc0a7fb10dc2a3bb543ad","config_name":"upstream-apparmor-kasan.config","enable_configs":["REALTEK_PHY"],"series_id":"35cfe895-1e7a-47cf-a441-1673be59f7c3","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-07-03 08:48:31 +0000 UTC FinishedAt: 2026-07-03 08:48:31 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7zc5j[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c75597caada080effbfbc0a7fb10dc2a3bb543ad","config_name":"upstream-apparmor-kasan.config","enable_configs":["REALTEK_PHY"],"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":["rtl8261x_probe","rtl8261x_get_features","rtl8261x_read_status","rtl8261x_verify_firmware","rtl8261x_fw_execute_entry","rtl8261x_fw_load","rtl8261x_config_intr","rtl8261x_handle_interrupt","rtl8261x_config_aneg","rtl8261x_config_init","genphy_c45_pma_soft_reset","genphy_c45_an_setup_master_slave","genphy_c45_read_master_slave"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c75597caada080effbfbc0a7fb10dc2a3bb543ad","config_name":"upstream-apparmor-kasan.config","enable_configs":["REALTEK_PHY"],"series_id":"35cfe895-1e7a-47cf-a441-1673be59f7c3","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-07-03 08:48:53 +0000 UTC FinishedAt: 2026-07-03 09:42:04 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7zc5j[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c75597caada080effbfbc0a7fb10dc2a3bb543ad","config_name":"upstream-apparmor-kasan.config","enable_configs":["REALTEK_PHY"],"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":["rtl8261x_probe","rtl8261x_get_features","rtl8261x_read_status","rtl8261x_verify_firmware","rtl8261x_fw_execute_entry","rtl8261x_fw_load","rtl8261x_config_intr","rtl8261x_handle_interrupt","rtl8261x_config_aneg","rtl8261x_config_init","genphy_c45_pma_soft_reset","genphy_c45_an_setup_master_slave","genphy_c45_read_master_slave"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c75597caada080effbfbc0a7fb10dc2a3bb543ad","config_name":"upstream-apparmor-kasan.config","enable_configs":["REALTEK_PHY"],"series_id":"35cfe895-1e7a-47cf-a441-1673be59f7c3","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-07-03 08:48:53 +0000 UTC FinishedAt: 2026-07-03 09:41:54 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*8397fd1d-4a5b-4a45-b9e8-0ddbef2bcb2a,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*7897382f-7114-4986-b648-5a5d287e9ddc,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-workflow7zc5j/series-workflow7zc5j-build-action-4040357283/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-workflow7zc5j/series-workflow7zc5j-build-action-1127488948/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-workflow7zc5j/series-workflow7zc5j-convert-artifact-2426712001/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,}