Name: series-workflowhft6t Phase: Running StartedAt: 2026-08-11 14:00:26 +0000 UTC FinishedAt: 0001-01-01 00:00:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhft6t[0] Phase: Succeeded StartedAt: 2026-08-11 14:00:26 +0000 UTC FinishedAt: 2026-08-11 14:04:08 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhft6t[0].run-triage Phase: Succeeded StartedAt: 2026-08-11 14:00:26 +0000 UTC FinishedAt: 2026-08-11 14:04:08 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "net-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git", "commit_hash": "d67e5dbda22604d0fcde32fce58c65f88676e676", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "ZL3073X_I2C", "ZL3073X_SPI", "PTP_1588_CLOCK" ], "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": "d67e5dbda22604d0fcde32fce58c65f88676e676", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "ZL3073X_I2C", "ZL3073X_SPI", "PTP_1588_CLOCK" ], "series_id": "e78c7db7-e9fa-4fc7-b83b-1cbfdd0ee42b" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "zl3073x_chan_tod_read", "zl3073x_chan_tod_write", "zl3073x_chan_tod_adjust", "zl3073x_chan_df_offset_set", "zl3073x_chan_tie_write", "zl3073x_chan_phase_step", "zl3073x_dpll_ptp_gettimex64", "zl3073x_dpll_ptp_settime64", "zl3073x_dpll_ptp_adjtime", "zl3073x_dpll_ptp_adjfine", "zl3073x_dpll_ptp_adjphase" ], "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+CgkJCTx0ZD4yMDI2LzA4LzExIDE0OjAyPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1pMMzA3M1hfSTJDJiMzNDssCiAgICAmIzM0O1pMMzA3M1hfU1BJJiMzNDssCiAgICAmIzM0O1BUUF8xNTg4X0NMT0NLJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7emwzMDczeF9jaGFuX3RvZF9yZWFkJiMzNDssCiAgICAmIzM0O3psMzA3M3hfY2hhbl90b2Rfd3JpdGUmIzM0OywKICAgICYjMzQ7emwzMDczeF9jaGFuX3RvZF9hZGp1c3QmIzM0OywKICAgICYjMzQ7emwzMDczeF9jaGFuX2RmX29mZnNldF9zZXQmIzM0OywKICAgICYjMzQ7emwzMDczeF9jaGFuX3RpZV93cml0ZSYjMzQ7LAogICAgJiMzNDt6bDMwNzN4X2NoYW5fcGhhc2Vfc3RlcCYjMzQ7LAogICAgJiMzNDt6bDMwNzN4X2RwbGxfcHRwX2dldHRpbWV4NjQmIzM0OywKICAgICYjMzQ7emwzMDczeF9kcGxsX3B0cF9zZXR0aW1lNjQmIzM0OywKICAgICYjMzQ7emwzMDczeF9kcGxsX3B0cF9hZGp0aW1lJiMzNDssCiAgICAmIzM0O3psMzA3M3hfZHBsbF9wdHBfYWRqZmluZSYjMzQ7LAogICAgJiMzNDt6bDMwNzN4X2RwbGxfcHRwX2FkanBoYXNlJiMzNDsKICBdLAogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcyBQVFAgY2xvY2sgc3VwcG9ydCB0byB0aGUgTWljcm9jaGlwIEF6dXJpdGUgRFBMTC9QVFAvU3luY0UgZGV2aWNlcyBkcml2ZXIuIEl0IGludHJvZHVjZXMgZnVuY3Rpb25zIHRvIHJlYWQvd3JpdGUgVGltZSBvZiBEYXkgKFRvRCksIGFkanVzdCBwaGFzZSwgYWRqdXN0IGZyZXF1ZW5jeSwgYW5kIHJlZ2lzdGVyIGEgUFRQIGNsb2NrIGRldmljZS4gVGhlIGRyaXZlciBpbnRlcmFjdHMgd2l0aCB0aGUgUFRQIHN1YnN5c3RlbSBieSBwcm92aWRpbmcgY2FsbGJhY2tzIChgZ2V0dGltZXg2NGAsIGBzZXR0aW1lNjRgLCBgYWRqdGltZWAsIGBhZGpmaW5lYCwgYGFkanBoYXNlYCkuIEFsbCBzdHJ1Y3R1cmVzIGFsbG9jYXRlZCBkeW5hbWljYWxseSBhcmUgemVyby1pbml0aWFsaXplZCB1c2luZyBga3phbGxvY19vYmpgLiBUaGUgYHB0cF9jbG9ja19pbmZvYCBzdHJ1Y3R1cmUgaXMgY29waWVkIGZyb20gYSBzdGF0aWMgY29uc3QgdGVtcGxhdGUsIGVuc3VyaW5nIGFsbCB1bmluaXRpYWxpemVkIGZpZWxkcyBhcmUgemVyb2VkIGJ5IHRoZSBjb21waWxlciBiZWZvcmUgYHNucHJpbnRmYCBtb2RpZmllcyB0aGUgYG5hbWVgIGZpZWxkLiBUaGUgYHN0cnVjdCB0aW1lc3BlYzY0YCBwb3B1bGF0ZWQgYnkgdGhlIGRyaXZlciBpcyBmdWxseSBpbml0aWFsaXplZCBvbiBzdWNjZXNzLCBhbmQgZXJyb3JzIGFyZSBwcm9wZXJseSBwcm9wYWdhdGVkIHRvIHRoZSBQVFAgc3Vic3lzdGVtLCBwcmV2ZW50aW5nIHVuaW5pdGlhbGl6ZWQgZGF0YSBmcm9tIGJlaW5nIHVzZWQgb3IgY29waWVkIHRvIHVzZXJzcGFjZS4gTm8gbmV3IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzIG9yIGluZm8tbGVha3MgYXJlIGludHJvZHVjZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHMgUFRQIGNsb2NrIHN1cHBvcnQgdG8gdGhlIE1pY3JvY2hpcCBBenVyaXRlIERQTEwgZHJpdmVyICh6bDMwNzN4KS4gSXQgaW1wbGVtZW50cyBQVFAgY2xvY2sgb3BlcmF0aW9ucyBsaWtlIGdldHRpbWV4NjQsIHNldHRpbWU2NCwgYWRqdGltZSwgYWRqZmluZSwgYW5kIGFkanBoYXNlLiBUaGUgZHJpdmVyIGNhbiBiZSBpbnN0YW50aWF0ZWQgdmlhIEkyQyBvciBTUEkgaW4gUUVNVSwgYW5kIHRoZSBQVFAgb3BlcmF0aW9ucyBhcmUgcmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlIHZpYSBQVFAgaW9jdGxzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzExIDE0OjAyPC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgOTU3ZGNmZDY3MWU4YmM1OTc3MTljMTJjYjJiMzAxZDJmNzQ5ZmVkMVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBUdWUgQXVnIDExIDE0OjAyOjIyIDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvZHBsbC96bDMwNzN4L0tjb25maWcgYi9kcml2ZXJzL2RwbGwvemwzMDczeC9LY29uZmlnXG5pbmRleCA1YmJjYTE0MDA1ODEzLi5kYTE3MzFhY2UxNWYwIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9kcGxsL3psMzA3M3gvS2NvbmZpZ1xuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9kcGxsL3psMzA3M3gvS2NvbmZpZ1xuQEAgLTIsNyAmIzQzOzIsNyBAQFxuIFxuIGNvbmZpZyBaTDMwNzNYXG4gXHR0cmlzdGF0ZSBcJiMzNDtNaWNyb2NoaXAgQXp1cml0ZSBEUExML1BUUC9TeW5jRSBkZXZpY2VzXCYjMzQ7IGlmIENPTVBJTEVfVEVTVFxuLVx0ZGVwZW5kcyBvbiBORVRcbiYjNDM7XHRkZXBlbmRzIG9uIE5FVCBcdTAwMjZcdTAwMjYgUFRQXzE1ODhfQ0xPQ0tcbiBcdHNlbGVjdCBEUExMXG4gXHRzZWxlY3QgTkVUX0RFVkxJTktcbiBcdHNlbGVjdCBSRUdNQVBcbkBAIC0xNiw3ICYjNDM7MTYsNyBAQCBjb25maWcgWkwzMDczWFxuIFxuIGNvbmZpZyBaTDMwNzNYX0kyQ1xuIFx0dHJpc3RhdGUgXCYjMzQ7STJDIGJ1cyBpbXBsZW1lbnRhdGlvbiBmb3IgTWljcm9jaGlwIEF6dXJpdGUgZGV2aWNlc1wmIzM0O1xuLVx0ZGVwZW5kcyBvbiBJMkMgXHUwMDI2XHUwMDI2IE5FVFxuJiM0MztcdGRlcGVuZHMgb24gSTJDIFx1MDAyNlx1MDAyNiBORVQgXHUwMDI2XHUwMDI2IFBUUF8xNTg4X0NMT0NLXG4gXHRzZWxlY3QgUkVHTUFQX0kyQ1xuIFx0c2VsZWN0IFpMMzA3M1hcbiBcdGhlbHBcbkBAIC0yOCw3ICYjNDM7MjgsNyBAQCBjb25maWcgWkwzMDczWF9JMkNcbiBcbiBjb25maWcgWkwzMDczWF9TUElcbiBcdHRyaXN0YXRlIFwmIzM0O1NQSSBidXMgaW1wbGVtZW50YXRpb24gZm9yIE1pY3JvY2hpcCBBenVyaXRlIGRldmljZXNcJiMzNDtcbi1cdGRlcGVuZHMgb24gTkVUIFx1MDAyNlx1MDAyNiBTUElcbiYjNDM7XHRkZXBlbmRzIG9uIE5FVCBcdTAwMjZcdTAwMjYgU1BJIFx1MDAyNlx1MDAyNiBQVFBfMTU4OF9DTE9DS1xuIFx0c2VsZWN0IFJFR01BUF9TUElcbiBcdHNlbGVjdCBaTDMwNzNYXG4gXHRoZWxwXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jIGIvZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jXG5pbmRleCA0ZWMyY2Y1M2RhZDQ2Li5iYzZkNzBkMjVkNzkxIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmNcbkBAIC0zLDYgJiM0MzszLDcgQEBcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9jbGVhbnVwLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9kZWxheS5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvZGV2X3ByaW50ay5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L3B0cF9jbG9ja19rZXJuZWwuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3N0cmluZy5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvdHlwZXMuaFx1MDAzZVxuIFxuQEAgLTE2Miw4ICYjNDM7MTYzLDggQEAgaW50IHpsMzA3M3hfY2hhbl9uY29fbW9kZV9zZXQoc3RydWN0IHpsMzA3M3hfZGV2ICp6bGRldiwgdTggaW5kZXgpXG4gICogQHpsZGV2OiBwb2ludGVyIHRvIHpsMzA3M3hfZGV2IHN0cnVjdHVyZVxuICAqIEBpbmRleDogRFBMTCBjaGFubmVsIGluZGV4IHRvIGZldGNoIHN0YXRlIGZvclxuICAqXG4tICogUmVhZHMgdGhlIG1vZGVfcmVmc2VsIHJlZ2lzdGVyIGFuZCByZWZlcmVuY2UgcHJpb3JpdHkgcmVnaXN0ZXJzIGZvclxuLSAqIHRoZSBnaXZlbiBEUExMIGNoYW5uZWwgYW5kIHN0b3JlcyB0aGUgcmF3IHZhbHVlcyBmb3IgbGF0ZXIgdXNlLlxuJiM0MzsgKiBSZWFkcyB0aGUgbW9kZV9yZWZzZWwsIHN0YXR1cyBhbmQgcmVmZXJlbmNlIHByaW9yaXR5IHJlZ2lzdGVycyBmb3JcbiYjNDM7ICogdGhlIGdpdmVuIERQTEwgY2hhbm5lbCBhbmQgc3RvcmVzIHRoZSB2YWx1ZXMgZm9yIGxhdGVyIHVzZS5cbiAgKlxuICAqIFJldHVybjogMCBvbiBzdWNjZXNzLCBcdTAwM2MwIG9uIGVycm9yXG4gICovXG5AQCAtMjM0LDYgJiM0MzsyMzUsMzI2IEBAIGNvbnN0IHN0cnVjdCB6bDMwNzN4X2NoYW4gKnpsMzA3M3hfY2hhbl9zdGF0ZV9nZXQoc3RydWN0IHpsMzA3M3hfZGV2ICp6bGRldixcbiBcdHJldHVybiBcdTAwMjZ6bGRldi1cdTAwM2VjaGFuW2luZGV4XTtcbiB9XG4gXG4mIzQzOy8qKlxuJiM0MzsgKiB6bDMwNzN4X2NoYW5fdG9kX3JlYWR5X3dhaXQgLSB3YWl0IGZvciBUb0Qgc2VtYXBob3JlIHRvIGNsZWFyXG4mIzQzOyAqIEB6bGRldjogcG9pbnRlciB0byB6bDMwNzN4IGRldmljZVxuJiM0MzsgKiBAY2g6IERQTEwgY2hhbm5lbCBpbmRleFxuJiM0MzsgKlxuJiM0MzsgKiBDaGVja3MgdGhlIFRvRCBjb250cm9sIHJlZ2lzdGVyIHNlbWFwaG9yZSBiaXQuIElmIGNsZWFyLCByZXR1cm5zXG4mIzQzOyAqIGltbWVkaWF0ZWx5LiBPdGhlcndpc2UgcG9sbHMgdW50aWwgdGhlIGJpdCBpcyBjbGVhcmVkIGJ5IHRoZSBkZXZpY2UuXG4mIzQzOyAqXG4mIzQzOyAqIFJldHVybjpcbiYjNDM7ICogKiAwXHRcdFx0LSBzdWNjZXNzXG4mIzQzOyAqICogJS1FQlVTWVx0XHQtIHRpbWVvdXRcbiYjNDM7ICogKiAlLUVPUE5PVFNVUFBcdC0gdW5rbm93biBjb21tYW5kIGRldGVjdGVkXG4mIzQzOyAqICogbmVnYXRpdmVcdFx0LSBvdGhlciBlcnJvclxuJiM0MzsgKi9cbiYjNDM7aW50IHpsMzA3M3hfY2hhbl90b2RfcmVhZHlfd2FpdChzdHJ1Y3QgemwzMDczeF9kZXYgKnpsZGV2LCB1OCBjaClcbiYjNDM7e1xuJiM0MztcdHVuc2lnbmVkIGludCB0aW1lb3V0O1xuJiM0MztcdHU4IHRvZF9jdHJsO1xuJiM0MztcdGludCByYztcbiYjNDM7XG4mIzQzO1x0cmMgPSB6bDMwNzN4X3JlYWRfdTgoemxkZXYsIFpMX1JFR19EUExMX1RPRF9DVFJMKGNoKSwgXHUwMDI2dG9kX2N0cmwpO1xuJiM0MztcdGlmIChyYylcbiYjNDM7XHRcdHJldHVybiByYztcbiYjNDM7XG4mIzQzO1x0aWYgKCEodG9kX2N0cmwgXHUwMDI2IFpMX0RQTExfVE9EX0NUUkxfU0VNKSlcbiYjNDM7XHRcdHJldHVybiAwO1xuJiM0MztcbiYjNDM7XHRzd2l0Y2ggKEZJRUxEX0dFVChaTF9EUExMX1RPRF9DVFJMX0NNRCwgdG9kX2N0cmwpKSB7XG4mIzQzO1x0Y2FzZSBaTF9EUExMX1RPRF9DVFJMX0NNRF9XUl9ORVhUXzFIWjpcbiYjNDM7XHRcdHRpbWVvdXQgPSBaTF9QT0xMX1RPRF9XUl9USU1FT1VUX1VTO1xuJiM0MztcdFx0YnJlYWs7XG4mIzQzO1x0Y2FzZSBaTF9EUExMX1RPRF9DVFJMX0NNRF9SRF9DVVJSRU5UOlxuJiM0MztcdGNhc2UgWkxfRFBMTF9UT0RfQ1RSTF9DTURfUkRfTkVYVF8xSFo6XG4mIzQzO1x0XHR0aW1lb3V0ID0gWkxfUE9MTF9UT0RfUkRfVElNRU9VVF9VUztcbiYjNDM7XHRcdGJyZWFrO1xuJiM0MztcdGRlZmF1bHQ6XG4mIzQzO1x0XHRXQVJOX09OKDEpO1xuJiM0MztcdFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0cmMgPSB6bDMwNzN4X3BvbGxfemVyb191OCh6bGRldiwgWkxfUkVHX0RQTExfVE9EX0NUUkwoY2gpLFxuJiM0MztcdFx0XHRcdCAgWkxfRFBMTF9UT0RfQ1RSTF9TRU0sIHRpbWVvdXQpO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gcmMgPT0gLUVUSU1FRE9VVCA/IC1FQlVTWSA6IHJjO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MzsvKipcbiYjNDM7ICogemwzMDczeF9jaGFuX3RvZF9jdHJsIC0gaXNzdWUgVG9EIGNvbW1hbmRcbiYjNDM7ICogQHpsZGV2OiBwb2ludGVyIHRvIHpsMzA3M3ggZGV2aWNlXG4mIzQzOyAqIEBjaDogRFBMTCBjaGFubmVsIGluZGV4XG4mIzQzOyAqIEBjbWQ6IFRvRCBjb21tYW5kIHRvIGV4ZWN1dGVcbiYjNDM7ICpcbiYjNDM7ICogV3JpdGVzIHRoZSBzZW1hcGhvcmUgYW5kIGNvbW1hbmQgdG8gZHBsbF90b2RfY3RybC4gVGhlIGNhbGxlciBtdXN0XG4mIzQzOyAqIGVuc3VyZSB0aGUgZGV2aWNlIGlzIHJlYWR5IChzZW1hcGhvcmUgY2xlYXIpIGJlZm9yZSBjYWxsaW5nIGFuZFxuJiM0MzsgKiBtdXN0IHdhaXQgZm9yIGNvbXBsZXRpb24gaWYgbmVlZGVkLlxuJiM0MzsgKlxuJiM0MzsgKiBSZXR1cm46IDAgb24gc3VjY2VzcywgXHUwMDNjMCBvbiBlcnJvclxuJiM0MzsgKi9cbiYjNDM7c3RhdGljIGludCB6bDMwNzN4X2NoYW5fdG9kX2N0cmwoc3RydWN0IHpsMzA3M3hfZGV2ICp6bGRldiwgdTggY2gsIHU4IGNtZClcbiYjNDM7e1xuJiM0MztcdHJldHVybiB6bDMwNzN4X3dyaXRlX3U4KHpsZGV2LCBaTF9SRUdfRFBMTF9UT0RfQ1RSTChjaCksXG4mIzQzO1x0XHRcdFx0WkxfRFBMTF9UT0RfQ1RSTF9TRU0gfCBjbWQpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MzsvKipcbiYjNDM7ICogemwzMDczeF9jaGFuX3RvZF9yZWFkIC0gcmVhZCBUb0QgcmVnaXN0ZXJzIGFmdGVyIGlzc3VpbmcgYSBjb21tYW5kXG4mIzQzOyAqIEB6bGRldjogcG9pbnRlciB0byB6bDMwNzN4IGRldmljZVxuJiM0MzsgKiBAY2g6IERQTEwgY2hhbm5lbCBpbmRleFxuJiM0MzsgKiBAbmV4dF9oejogaWYgdHJ1ZSwgcmVhZCBwcmVkaWN0ZWQgVG9EIGF0IG5leHQgMSBIejsgb3RoZXJ3aXNlIHJlYWQgY3VycmVudFxuJiM0MzsgKiBAdHM6IHRpbWVzcGVjIHRvIHN0b3JlIHRoZSByZXN1bHRcbiYjNDM7ICogQHN0czogb3B0aW9uYWwgc3lzdGVtIHRpbWVzdGFtcCBwYWlyIGZvciBjcm9zcy10aW1lc3RhbXBpbmdcbiYjNDM7ICpcbiYjNDM7ICogQ29udGV4dDogQ2FsbGVyIG11c3Qgc2VyaWFsaXplIGFsbCB6bDMwNzN4X2NoYW5fdG9kXyogY2FsbHMgZXh0ZXJuYWxseS5cbiYjNDM7ICogUmV0dXJuOiAwIG9uIHN1Y2Nlc3MsIFx1MDAzYzAgb24gZXJyb3JcbiYjNDM7ICovXG4mIzQzO2ludCB6bDMwNzN4X2NoYW5fdG9kX3JlYWQoc3RydWN0IHpsMzA3M3hfZGV2ICp6bGRldiwgdTggY2gsXG4mIzQzO1x0XHRcdCAgYm9vbCBuZXh0X2h6LCBzdHJ1Y3QgdGltZXNwZWM2NCAqdHMsXG4mIzQzO1x0XHRcdCAgc3RydWN0IHB0cF9zeXN0ZW1fdGltZXN0YW1wICpzdHMpXG4mIzQzO3tcbiYjNDM7XHR1MzIgbnNlYztcbiYjNDM7XHR1NjQgc2VjO1xuJiM0MztcdHU4IGNtZDtcbiYjNDM7XHRpbnQgcmM7XG4mIzQzO1xuJiM0MztcdGlmIChuZXh0X2h6KVxuJiM0MztcdFx0Y21kID0gWkxfRFBMTF9UT0RfQ1RSTF9DTURfUkRfTkVYVF8xSFo7XG4mIzQzO1x0ZWxzZVxuJiM0MztcdFx0Y21kID0gWkxfRFBMTF9UT0RfQ1RSTF9DTURfUkRfQ1VSUkVOVDtcbiYjNDM7XG4mIzQzO1x0LyogV2FpdCBmb3IgYW55IHByZXZpb3VzIFRvRCBvcGVyYXRpb24gdG8gY29tcGxldGUgKi9cbiYjNDM7XHRyYyA9IHpsMzA3M3hfY2hhbl90b2RfcmVhZHlfd2FpdCh6bGRldiwgY2gpO1xuJiM0MztcdGlmIChyYylcbiYjNDM7XHRcdHJldHVybiByYztcbiYjNDM7XG4mIzQzO1x0cHRwX3JlYWRfc3lzdGVtX3ByZXRzKHN0cyk7XG4mIzQzO1x0cmMgPSB6bDMwNzN4X2NoYW5fdG9kX2N0cmwoemxkZXYsIGNoLCBjbWQpO1xuJiM0MztcdGlmIChyYylcbiYjNDM7XHRcdHJldHVybiByYztcbiYjNDM7XG4mIzQzO1x0cmMgPSB6bDMwNzN4X2NoYW5fdG9kX3JlYWR5X3dhaXQoemxkZXYsIGNoKTtcbiYjNDM7XHRpZiAocmMpXG4mIzQzO1x0XHRyZXR1cm4gcmM7XG4mIzQzO1x0cHRwX3JlYWRfc3lzdGVtX3Bvc3R0cyhzdHMpO1xuJiM0MztcbiYjNDM7XHRyYyA9IHpsMzA3M3hfcmVhZF91NDgoemxkZXYsIFpMX1JFR19EUExMX1RPRF9TRUMoY2gpLCBcdTAwMjZzZWMpO1xuJiM0MztcdGlmIChyYylcbiYjNDM7XHRcdHJldHVybiByYztcbiYjNDM7XG4mIzQzO1x0LyogSFcgbmFub3NlY29uZHMgYXJlIGFsd2F5cyBpbiBbMCwgTlNFQ19QRVJfU0VDKSByYW5nZSAqL1xuJiM0MztcdHJjID0gemwzMDczeF9yZWFkX3UzMih6bGRldiwgWkxfUkVHX0RQTExfVE9EX05TKGNoKSwgXHUwMDI2bnNlYyk7XG4mIzQzO1x0aWYgKHJjKVxuJiM0MztcdFx0cmV0dXJuIHJjO1xuJiM0MztcbiYjNDM7XHR0cy1cdTAwM2V0dl9zZWMgPSBzZWM7XG4mIzQzO1x0dHMtXHUwMDNldHZfbnNlYyA9IG5zZWM7XG4mIzQzO1xuJiM0MztcdHJldHVybiAwO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MzsvKipcbiYjNDM7ICogemwzMDczeF9jaGFuX3RvZF93cml0ZSAtIHdyaXRlIFRvRCByZWdpc3RlcnMgYW5kIHRyaWdnZXIgMSBIeiB1cGRhdGVcbiYjNDM7ICogQHpsZGV2OiBwb2ludGVyIHRvIHpsMzA3M3ggZGV2aWNlXG4mIzQzOyAqIEBjaDogRFBMTCBjaGFubmVsIGluZGV4XG4mIzQzOyAqIEB0czogdGltZSB0byBzZXRcbiYjNDM7ICpcbiYjNDM7ICogQ29udGV4dDogQ2FsbGVyIG11c3Qgc2VyaWFsaXplIGFsbCB6bDMwNzN4X2NoYW5fdG9kXyogY2FsbHMgZXh0ZXJuYWxseS5cbiYjNDM7ICogUmV0dXJuOiAwIG9uIHN1Y2Nlc3MsIFx1MDAzYzAgb24gZXJyb3JcbiYjNDM7ICovXG4mIzQzO2ludCB6bDMwNzN4X2NoYW5fdG9kX3dyaXRlKHN0cnVjdCB6bDMwNzN4X2RldiAqemxkZXYsIHU4IGNoLFxuJiM0MztcdFx0XHQgICBzdHJ1Y3QgdGltZXNwZWM2NCB0cylcbiYjNDM7e1xuJiM0MztcdGludCByYztcbiYjNDM7XG4mIzQzO1x0LyogV2FpdCBmb3IgYW55IHByZXZpb3VzIFRvRCBvcGVyYXRpb24gdG8gY29tcGxldGUgKi9cbiYjNDM7XHRyYyA9IHpsMzA3M3hfY2hhbl90b2RfcmVhZHlfd2FpdCh6bGRldiwgY2gpO1xuJiM0MztcdGlmIChyYylcbiYjNDM7XHRcdHJldHVybiByYztcbiYjNDM7XG4mIzQzO1x0cmMgPSB6bDMwNzN4X3dyaXRlX3U0OCh6bGRldiwgWkxfUkVHX0RQTExfVE9EX1NFQyhjaCksIHRzLnR2X3NlYyk7XG4mIzQzO1x0aWYgKHJjKVxuJiM0MztcdFx0cmV0dXJuIHJjO1xuJiM0MztcbiYjNDM7XHRyYyA9IHpsMzA3M3hfd3JpdGVfdTMyKHpsZGV2LCBaTF9SRUdfRFBMTF9UT0RfTlMoY2gpLCB0cy50dl9uc2VjKTtcbiYjNDM7XHRpZiAocmMpXG4mIzQzO1x0XHRyZXR1cm4gcmM7XG4mIzQzO1xuJiM0MztcdHJldHVybiB6bDMwNzN4X2NoYW5fdG9kX2N0cmwoemxkZXYsIGNoLFxuJiM0MztcdFx0XHRcdCAgICAgWkxfRFBMTF9UT0RfQ1RSTF9DTURfV1JfTkVYVF8xSFopO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MzsvKipcbiYjNDM7ICogemwzMDczeF9jaGFuX3RvZF9hZGp1c3QgLSBhdG9taWMgVG9EIHJlYWQtbW9kaWZ5LXdyaXRlIHdpdGggcm9sbG92ZXIgZ3VhcmRcbiYjNDM7ICogQHpsZGV2OiBwb2ludGVyIHRvIHpsMzA3M3ggZGV2aWNlXG4mIzQzOyAqIEBjaDogRFBMTCBjaGFubmVsIGluZGV4XG4mIzQzOyAqIEBkZWx0YTogdGltZSBhZGp1c3RtZW50IHRvIGFwcGx5XG4mIzQzOyAqXG4mIzQzOyAqIFJlYWRzIHRoZSBuZXh0LUh6IFRvRCBhbmQgY3VycmVudCBUb0QsIHRoZW4gY2hlY2tzIHdoZXRoZXIgZW5vdWdoIHRpbWVcbiYjNDM7ICogcmVtYWlucyBiZWZvcmUgdGhlIG5leHQgMSBIeiByb2xsb3ZlciB0byBzYWZlbHkgY29tcGxldGUgdGhlIHdyaXRlLlxuJiM0MzsgKiBSZS1yZWFkcyBpZiB0aGUgMSBIeiB0aWNrIGNyb3NzZWQgYmV0d2VlbiB0aGUgdHdvIHJlYWRzIG9yIGlmIGxlc3NcbiYjNDM7ICogdGhhbiAyMCBtcyByZW1haW5zIGJlZm9yZSB0aGUgbmV4dCByb2xsb3Zlci4gQXBwbGllcyBAZGVsdGEgYW5kIHdyaXRlc1xuJiM0MzsgKiB0aGUgcmVzdWx0IGJhY2suXG4mIzQzOyAqXG4mIzQzOyAqIENvbnRleHQ6IENhbGxlciBtdXN0IHNlcmlhbGl6ZSBhbGwgemwzMDczeF9jaGFuX3RvZF8qIGNhbGxzIGV4dGVybmFsbHkuXG4mIzQzOyAqIFJldHVybjogMCBvbiBzdWNjZXNzLCBcdTAwM2MwIG9uIGVycm9yXG4mIzQzOyAqL1xuJiM0MztpbnQgemwzMDczeF9jaGFuX3RvZF9hZGp1c3Qoc3RydWN0IHpsMzA3M3hfZGV2ICp6bGRldiwgdTggY2gsXG4mIzQzO1x0XHRcdCAgICBzdHJ1Y3QgdGltZXNwZWM2NCBkZWx0YSlcbiYjNDM7e1xuJiM0MzsjZGVmaW5lIFpMX1RPRF9NQVhfUkVUUklFU1x0MjBcbiYjNDM7XHRzdGF0aWMgY29uc3QgbG9uZyB0aHJlc2hvbGRfbnMgPSAyMCAqIE5TRUNfUEVSX01TRUM7XG4mIzQzO1x0c3RydWN0IHRpbWVzcGVjNjQgdHNfbmV4dCwgdHNfY3VyLCBkaWZmO1xuJiM0MztcdGludCByYywgaTtcbiYjNDM7XG4mIzQzO1x0Zm9yIChpID0gMDsgaSBcdTAwM2MgWkxfVE9EX01BWF9SRVRSSUVTOyBpJiM0MzsmIzQzOykge1xuJiM0MztcdFx0cmMgPSB6bDMwNzN4X2NoYW5fdG9kX3JlYWQoemxkZXYsIGNoLCB0cnVlLCBcdTAwMjZ0c19uZXh0LCBOVUxMKTtcbiYjNDM7XHRcdGlmIChyYylcbiYjNDM7XHRcdFx0cmV0dXJuIHJjO1xuJiM0MztcbiYjNDM7XHRcdHJjID0gemwzMDczeF9jaGFuX3RvZF9yZWFkKHpsZGV2LCBjaCwgZmFsc2UsIFx1MDAyNnRzX2N1ciwgTlVMTCk7XG4mIzQzO1x0XHRpZiAocmMpXG4mIzQzO1x0XHRcdHJldHVybiByYztcbiYjNDM7XG4mIzQzO1x0XHQvKiBFbnN1cmUgdGhlIDEgSHogdGljayBkaWQgbm90IGNyb3NzIGJldHdlZW4gdGhlIHR3byByZWFkc1xuJiM0MztcdFx0ICogYW5kIHRoYXQgZW5vdWdoIG1hcmdpbiByZW1haW5zIHRvIGNvbXBsZXRlIHRoZSB3cml0ZS5cbiYjNDM7XHRcdCAqL1xuJiM0MztcdFx0ZGlmZiA9IHRpbWVzcGVjNjRfc3ViKHRzX25leHQsIHRzX2N1cik7XG4mIzQzO1x0XHRpZiAoZGlmZi50dl9zZWMgXHUwMDNlIDAgfHxcbiYjNDM7XHRcdCAgICAoIWRpZmYudHZfc2VjIFx1MDAyNlx1MDAyNiBkaWZmLnR2X25zZWMgXHUwMDNlPSB0aHJlc2hvbGRfbnMpKVxuJiM0MztcdFx0XHRicmVhaztcbiYjNDM7XHR9XG4mIzQzO1x0aWYgKGkgPT0gWkxfVE9EX01BWF9SRVRSSUVTKSB7XG4mIzQzO1x0XHRkZXZfd2Fybih6bGRldi1cdTAwM2VkZXYsXG4mIzQzO1x0XHRcdCBcJiMzNDtEUExMJXUgVG9EIGFkanVzdCBmYWlsZWQgdG8gZ2V0IHN0YWJsZSBtYXJnaW5cXG5cJiMzNDssXG4mIzQzO1x0XHRcdCBjaCk7XG4mIzQzO1x0XHRyZXR1cm4gLUVCVVNZO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0LyogQXBwbHkgZGVsdGEgdG8gdGhlIG5leHQtSHogVG9EICovXG4mIzQzO1x0dHNfbmV4dCA9IHRpbWVzcGVjNjRfYWRkKHRzX25leHQsIGRlbHRhKTtcbiYjNDM7XHRpZiAoIXRpbWVzcGVjNjRfdmFsaWQoXHUwMDI2dHNfbmV4dCkpXG4mIzQzO1x0XHRyZXR1cm4gLUVJTlZBTDtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIHpsMzA3M3hfY2hhbl90b2Rfd3JpdGUoemxkZXYsIGNoLCB0c19uZXh0KTtcbiYjNDM7I3VuZGVmIFpMX1RPRF9NQVhfUkVUUklFU1xuJiM0Mzt9XG4mIzQzO1xuJiM0MzsvKipcbiYjNDM7ICogemwzMDczeF9jaGFuX2RmX29mZnNldF9zZXQgLSB3cml0ZSBkZWx0YSBmcmVxdWVuY3kgb2Zmc2V0IHRvIGhhcmR3YXJlXG4mIzQzOyAqIEB6bGRldjogcG9pbnRlciB0byB6bDMwNzN4IGRldmljZVxuJiM0MzsgKiBAY2g6IERQTEwgY2hhbm5lbCBpbmRleFxuJiM0MzsgKiBAb2Zmc2V0OiBmcmVxdWVuY3kgb2Zmc2V0IGluIDJeLTQ4IHN0ZXBzXG4mIzQzOyAqXG4mIzQzOyAqIENvbnRleHQ6IENhbGxlciBtdXN0IGhvbGQgdGhlIHBlci1EUExMIGxvY2suXG4mIzQzOyAqIFJldHVybjogMCBvbiBzdWNjZXNzLCBcdTAwM2MwIG9uIGVycm9yXG4mIzQzOyAqL1xuJiM0MztpbnQgemwzMDczeF9jaGFuX2RmX29mZnNldF9zZXQoc3RydWN0IHpsMzA3M3hfZGV2ICp6bGRldiwgdTggY2gsIHM2NCBvZmZzZXQpXG4mIzQzO3tcbiYjNDM7XHRpbnQgcmM7XG4mIzQzO1xuJiM0MztcdHJjID0gemwzMDczeF93cml0ZV91NDgoemxkZXYsIFpMX1JFR19EUExMX0RGX09GRlNFVChjaCksIG9mZnNldCk7XG4mIzQzO1x0aWYgKCFyYylcbiYjNDM7XHRcdHpsZGV2LVx1MDAzZWNoYW5bY2hdLmRmX29mZnNldCA9IG9mZnNldDtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIHJjO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MzsvKipcbiYjNDM7ICogemwzMDczeF9jaGFuX3RpZV93cml0ZSAtIGFkanVzdCBEUExMIHBoYXNlIHVzaW5nIFRJRSB3cml0ZVxuJiM0MzsgKiBAemxkZXY6IHBvaW50ZXIgdG8gemwzMDczeCBkZXZpY2VcbiYjNDM7ICogQGNoOiBEUExMIGNoYW5uZWwgaW5kZXhcbiYjNDM7ICogQGRlbHRhX25zOiBwaGFzZSBhZGp1c3RtZW50IGluIG5hbm9zZWNvbmRzIChtdXN0IGJlIGluICgtMXMsIDFzKSlcbiYjNDM7ICpcbiYjNDM7ICogQ29udmVydHMgbmFub3NlY29uZHMgdG8gVElFIHVuaXRzICgwLjAxIHBzKSBhbmQgd3JpdGVzIFRJRSBkYXRhXG4mIzQzOyAqIHRvIHRoZSBzcGVjaWZpZWQgY2hhbm5lbC5cbiYjNDM7ICpcbiYjNDM7ICogUmV0dXJuOiAwIG9uIHN1Y2Nlc3MsIFx1MDAzYzAgb24gZXJyb3JcbiYjNDM7ICovXG4mIzQzO2ludCB6bDMwNzN4X2NoYW5fdGllX3dyaXRlKHN0cnVjdCB6bDMwNzN4X2RldiAqemxkZXYsIHU4IGNoLCBzNjQgZGVsdGFfbnMpXG4mIzQzO3tcbiYjNDM7XHRzNjQgdGllX2RhdGE7XG4mIzQzO1x0aW50IHJjO1xuJiM0MztcbiYjNDM7XHRpZiAoV0FSTl9PTihkZWx0YV9ucyBcdTAwM2M9IC1OU0VDX1BFUl9TRUMgfHwgZGVsdGFfbnMgXHUwMDNlPSBOU0VDX1BFUl9TRUMpKVxuJiM0MztcdFx0cmV0dXJuIC1FUkFOR0U7XG4mIzQzO1xuJiM0MztcdGd1YXJkKG11dGV4KShcdTAwMjZ6bGRldi1cdTAwM2V0aWVfbG9jayk7XG4mIzQzO1xuJiM0MztcdC8qIFdhaXQgZm9yIGFueSBwcmV2aW91cyBUSUUgb3BlcmF0aW9uIHRvIGNvbXBsZXRlICovXG4mIzQzO1x0cmMgPSB6bDMwNzN4X3BvbGxfemVyb191OCh6bGRldiwgWkxfUkVHX0RQTExfVElFX0NUUkwsXG4mIzQzO1x0XHRcdFx0ICBaTF9EUExMX1RJRV9DVFJMX09QLFxuJiM0MztcdFx0XHRcdCAgWkxfUE9MTF9USUVfV1JfVElNRU9VVF9VUyk7XG4mIzQzO1x0aWYgKHJjKVxuJiM0MztcdFx0cmV0dXJuIHJjO1xuJiM0MztcbiYjNDM7XHQvKiBDb252ZXJ0IG5zIHRvIFRJRSB1bml0cyAoMC4wMSBwcyA9IDEwXi0xNCBzKSAqL1xuJiM0MztcdHRpZV9kYXRhID0gZGVsdGFfbnMgKiAxMDAwMDBMTDtcbiYjNDM7XG4mIzQzO1x0cmMgPSB6bDMwNzN4X3dyaXRlX3U0OCh6bGRldiwgWkxfUkVHX0RQTExfVElFX0RBVEEoY2gpLCB0aWVfZGF0YSk7XG4mIzQzO1x0aWYgKHJjKVxuJiM0MztcdFx0cmV0dXJuIHJjO1xuJiM0MztcbiYjNDM7XHRyYyA9IHpsMzA3M3hfd3JpdGVfdTgoemxkZXYsIFpMX1JFR19EUExMX1RJRV9DVFJMX01BU0ssIEJJVChjaCkpO1xuJiM0MztcdGlmIChyYylcbiYjNDM7XHRcdHJldHVybiByYztcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIHpsMzA3M3hfd3JpdGVfdTgoemxkZXYsIFpMX1JFR19EUExMX1RJRV9DVFJMLFxuJiM0MztcdFx0XHRcdFpMX0RQTExfVElFX0NUUkxfT1BfV1IpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MzsvKipcbiYjNDM7ICogemwzMDczeF9jaGFuX3BoYXNlX3N0ZXAgLSBleGVjdXRlIG9uZSBvdXRwdXQgcGhhc2Ugc3RlcCBvcGVyYXRpb25cbiYjNDM7ICogQHpsZGV2OiBwb2ludGVyIHRvIHpsMzA3M3ggZGV2aWNlXG4mIzQzOyAqIEBjaDogRFBMTCBjaGFubmVsIGluZGV4XG4mIzQzOyAqIEBvdXRfbWFzazogYml0bWFzayBvZiBvdXRwdXRzIHRvIHN0ZXBcbiYjNDM7ICogQHN0ZXBfY3ljbGVzOiBwaGFzZSBzdGVwIGluIHN5bnRoZXNpemVyIGNsb2NrIGN5Y2xlc1xuJiM0MzsgKiBAdG9kX3N0ZXA6IGFsc28gc3RlcCB0aGUgVG9EIGNvdW50ZXJcbiYjNDM7ICpcbiYjNDM7ICogQWxsIG1hc2tlZCBvdXRwdXRzIG11c3QgdXNlIHN5bnRoZXNpemVycyBvZiB0aGUgc2FtZSBmcmVxdWVuY3kgc2luY2VcbiYjNDM7ICogdGhlIHN0ZXAgdmFsdWUgaXMgaW4gc3ludGhlc2l6ZXIgY2xvY2sgY3ljbGVzLlxuJiM0MzsgKlxuJiM0MzsgKiBSZXR1cm46IDAgb24gc3VjY2VzcywgXHUwMDNjMCBvbiBlcnJvclxuJiM0MzsgKi9cbiYjNDM7aW50IHpsMzA3M3hfY2hhbl9waGFzZV9zdGVwKHN0cnVjdCB6bDMwNzN4X2RldiAqemxkZXYsIHU4IGNoLFxuJiM0MztcdFx0XHQgICAgdTE2IG91dF9tYXNrLCBzMzIgc3RlcF9jeWNsZXMsXG4mIzQzO1x0XHRcdCAgICBib29sIHRvZF9zdGVwKVxuJiM0Mzt7XG4mIzQzO1x0dTggY3RybDtcbiYjNDM7XHRpbnQgcmM7XG4mIzQzO1xuJiM0MztcdGd1YXJkKG11dGV4KShcdTAwMjZ6bGRldi1cdTAwM2VwaGFzZV9zdGVwX2xvY2spO1xuJiM0MztcbiYjNDM7XHQvKiBXYWl0IGZvciBhbnkgcHJldmlvdXMgcGhhc2Ugc3RlcCBvcGVyYXRpb24gdG8gY29tcGxldGUgKi9cbiYjNDM7XHRyYyA9IHpsMzA3M3hfcG9sbF96ZXJvX3U4KHpsZGV2LCBaTF9SRUdfT1VUUFVUX1BIQVNFX1NURVBfQ1RSTCxcbiYjNDM7XHRcdFx0XHQgIFpMX09VVFBVVF9QSEFTRV9TVEVQX0NUUkxfT1AsXG4mIzQzO1x0XHRcdFx0ICBaTF9QT0xMX1BIQVNFX1NURVBfVElNRU9VVF9VUyk7XG4mIzQzO1x0aWYgKHJjKVxuJiM0MztcdFx0cmV0dXJuIHJjO1xuJiM0MztcbiYjNDM7XHRyYyA9IHpsMzA3M3hfd3JpdGVfdTMyKHpsZGV2LCBaTF9SRUdfT1VUUFVUX1BIQVNFX1NURVBfREFUQSxcbiYjNDM7XHRcdFx0ICAgICAgIHN0ZXBfY3ljbGVzKTtcbiYjNDM7XHRpZiAocmMpXG4mIzQzO1x0XHRyZXR1cm4gcmM7XG4mIzQzO1xuJiM0MztcdHJjID0gemwzMDczeF93cml0ZV91MTYoemxkZXYsIFpMX1JFR19PVVRQVVRfUEhBU0VfU1RFUF9NQVNLLCBvdXRfbWFzayk7XG4mIzQzO1x0aWYgKHJjKVxuJiM0MztcdFx0cmV0dXJuIHJjO1xuJiM0MztcbiYjNDM7XHRyYyA9IHpsMzA3M3hfd3JpdGVfdTgoemxkZXYsIFpMX1JFR19PVVRQVVRfUEhBU0VfU1RFUF9OVU1CRVIsIDEpO1xuJiM0MztcdGlmIChyYylcbiYjNDM7XHRcdHJldHVybiByYztcbiYjNDM7XG4mIzQzO1x0Y3RybCA9IEZJRUxEX1BSRVAoWkxfT1VUUFVUX1BIQVNFX1NURVBfQ1RSTF9EUExMLCBjaCkgfFxuJiM0MztcdCAgICAgICBGSUVMRF9QUkVQKFpMX09VVFBVVF9QSEFTRV9TVEVQX0NUUkxfT1AsXG4mIzQzO1x0XHRcdCAgWkxfT1VUUFVUX1BIQVNFX1NURVBfQ1RSTF9PUF9XUklURSk7XG4mIzQzO1x0aWYgKHRvZF9zdGVwKVxuJiM0MztcdFx0Y3RybCB8PSBaTF9PVVRQVVRfUEhBU0VfU1RFUF9DVFJMX1RPRF9TVEVQO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gemwzMDczeF93cml0ZV91OCh6bGRldiwgWkxfUkVHX09VVFBVVF9QSEFTRV9TVEVQX0NUUkwsIGN0cmwpO1xuJiM0Mzt9XG4mIzQzO1xuIC8qKlxuICAqIHpsMzA3M3hfY2hhbl9zdGF0ZV9zZXQgLSBjb21taXQgRFBMTCBjaGFubmVsIHN0YXRlIGNoYW5nZXMgdG8gaGFyZHdhcmVcbiAgKiBAemxkZXY6IHBvaW50ZXIgdG8gemwzMDczeF9kZXYgc3RydWN0dXJlXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5oIGIvZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5oXG5pbmRleCBkYzljNmQ5NWJkZWU3Li45OWMzYjcwODhmNjc4IDEwMDY0NFxuLS0tIGEvZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5oXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmhcbkBAIC01LDEwICYjNDM7NSwxMiBAQFxuIFxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2JpdGZpZWxkLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9zdGRkZWYuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC90aW1lNjQuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3R5cGVzLmhcdTAwM2VcbiBcbiAjaW5jbHVkZSBcJiMzNDtyZWdzLmhcJiMzNDtcbiBcbiYjNDM7c3RydWN0IHB0cF9zeXN0ZW1fdGltZXN0YW1wO1xuIHN0cnVjdCB6bDMwNzN4X2RldjtcbiBcbiAvKipcbkBAIC00Miw2ICYjNDM7NDQsMjEgQEAgaW50IHpsMzA3M3hfY2hhbl9zdGF0ZV9zZXQoc3RydWN0IHpsMzA3M3hfZGV2ICp6bGRldiwgdTggaW5kZXgsXG4gaW50IHpsMzA3M3hfY2hhbl9zdGF0ZV91cGRhdGUoc3RydWN0IHpsMzA3M3hfZGV2ICp6bGRldiwgdTggaW5kZXgpO1xuIGludCB6bDMwNzN4X2NoYW5fbmNvX21vZGVfc2V0KHN0cnVjdCB6bDMwNzN4X2RldiAqemxkZXYsIHU4IGluZGV4KTtcbiBcbiYjNDM7aW50IHpsMzA3M3hfY2hhbl90b2RfcmVhZHlfd2FpdChzdHJ1Y3QgemwzMDczeF9kZXYgKnpsZGV2LCB1OCBjaCk7XG4mIzQzO2ludCB6bDMwNzN4X2NoYW5fdG9kX3JlYWQoc3RydWN0IHpsMzA3M3hfZGV2ICp6bGRldiwgdTggY2gsXG4mIzQzO1x0XHRcdCAgYm9vbCBuZXh0X2h6LCBzdHJ1Y3QgdGltZXNwZWM2NCAqdHMsXG4mIzQzO1x0XHRcdCAgc3RydWN0IHB0cF9zeXN0ZW1fdGltZXN0YW1wICpzdHMpO1xuJiM0MztpbnQgemwzMDczeF9jaGFuX3RvZF93cml0ZShzdHJ1Y3QgemwzMDczeF9kZXYgKnpsZGV2LCB1OCBjaCxcbiYjNDM7XHRcdFx0ICAgc3RydWN0IHRpbWVzcGVjNjQgdHMpO1xuJiM0MztpbnQgemwzMDczeF9jaGFuX3RvZF9hZGp1c3Qoc3RydWN0IHpsMzA3M3hfZGV2ICp6bGRldiwgdTggY2gsXG4mIzQzO1x0XHRcdCAgICBzdHJ1Y3QgdGltZXNwZWM2NCBkZWx0YSk7XG4mIzQzO2ludCB6bDMwNzN4X2NoYW5fcGhhc2Vfc3RlcChzdHJ1Y3QgemwzMDczeF9kZXYgKnpsZGV2LCB1OCBjaCxcbiYjNDM7XHRcdFx0ICAgIHUxNiBvdXRfbWFzaywgczMyIHN0ZXBfY3ljbGVzLCBib29sIHRvZF9zdGVwKTtcbiYjNDM7XG4mIzQzO2ludCB6bDMwNzN4X2NoYW5fZGZfb2Zmc2V0X3NldChzdHJ1Y3QgemwzMDczeF9kZXYgKnpsZGV2LCB1OCBjaCwgczY0IG9mZnNldCk7XG4mIzQzO1xuJiM0MztpbnQgemwzMDczeF9jaGFuX3RpZV93cml0ZShzdHJ1Y3QgemwzMDczeF9kZXYgKnpsZGV2LCB1OCBjaCwgczY0IGRlbHRhX25zKTtcbiYjNDM7XG4gLyoqXG4gICogemwzMDczeF9jaGFuX2RmX29mZnNldF9nZXQgLSBnZXQgY2FjaGVkIGRmX29mZnNldCB2cyB0cmFja2VkIHJlZmVyZW5jZVxuICAqIEBjaGFuOiBwb2ludGVyIHRvIGNoYW5uZWwgc3RhdGVcbkBAIC0yMDAsNiAmIzQzOzIxNywyMSBAQCBzdGF0aWMgaW5saW5lIGJvb2wgemwzMDczeF9jaGFuX21vZGVfaXNfcmVmbG9jayhjb25zdCBzdHJ1Y3QgemwzMDczeF9jaGFuICpjaGFuKVxuIFx0cmV0dXJuIHpsMzA3M3hfY2hhbl9tb2RlX2dldChjaGFuKSA9PSBaTF9EUExMX01PREVfUkVGU0VMX01PREVfUkVGTE9DSztcbiB9XG4gXG4mIzQzOy8qKlxuJiM0MzsgKiB6bDMwNzN4X2NoYW5fbW9kZV9zdXBwb3J0c190aWUgLSBjaGVjayBpZiBjaGFubmVsIG1vZGUgc3VwcG9ydHMgVElFIHdyaXRlXG4mIzQzOyAqIEBjaGFuOiBwb2ludGVyIHRvIGNoYW5uZWwgc3RhdGVcbiYjNDM7ICpcbiYjNDM7ICogVElFIHdyaXRlIGlzIHN1cHBvcnRlZCBpbiBBVVRPIGFuZCBSRUZMT0NLIG1vZGVzIHJlZ2FyZGxlc3Mgb2YgbG9jayBzdGF0ZS5cbiYjNDM7ICpcbiYjNDM7ICogUmV0dXJuOiB0cnVlIGlmIFRJRSB3cml0ZSBpcyBzdXBwb3J0ZWQsIGZhbHNlIG90aGVyd2lzZVxuJiM0MzsgKi9cbiYjNDM7c3RhdGljIGlubGluZSBib29sXG4mIzQzO3psMzA3M3hfY2hhbl9tb2RlX3N1cHBvcnRzX3RpZShjb25zdCBzdHJ1Y3QgemwzMDczeF9jaGFuICpjaGFuKVxuJiM0Mzt7XG4mIzQzO1x0cmV0dXJuIHpsMzA3M3hfY2hhbl9tb2RlX2lzX2F1dG8oY2hhbikgfHxcbiYjNDM7XHRcdHpsMzA3M3hfY2hhbl9tb2RlX2lzX3JlZmxvY2soY2hhbik7XG4mIzQzO31cbiYjNDM7XG4gLyoqXG4gICogemwzMDczeF9jaGFuX2lzX2hvX3JlYWR5IC0gY2hlY2sgaWYgaG9sZG92ZXIgaXMgcmVhZHlcbiAgKiBAY2hhbjogcG9pbnRlciB0byBjaGFubmVsIHN0YXRlXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9kcGxsL3psMzA3M3gvY29yZS5jIGIvZHJpdmVycy9kcGxsL3psMzA3M3gvY29yZS5jXG5pbmRleCA1YjJkNzdmMmMyMjg4Li4yMzBkZjA4ZTI3Y2QxIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9kcGxsL3psMzA3M3gvY29yZS5jXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL2RwbGwvemwzMDczeC9jb3JlLmNcbkBAIC0zMjIsNyAmIzQzOzMyMiw3IEBAIGludCB6bDMwNzN4X3dyaXRlX3U0OChzdHJ1Y3QgemwzMDczeF9kZXYgKnpsZGV2LCB1bnNpZ25lZCBpbnQgcmVnLCB1NjQgdmFsKVxuIGludCB6bDMwNzN4X3BvbGxfemVyb191OChzdHJ1Y3QgemwzMDczeF9kZXYgKnpsZGV2LCB1bnNpZ25lZCBpbnQgcmVnLFxuIFx0XHRcdCB1OCBtYXNrLCB1bnNpZ25lZCBpbnQgdGltZW91dF91cylcbiB7XG4tI2RlZmluZSBaTF9QT0xMX1NMRUVQX1VTIDEwXG4mIzQzO1x0dW5zaWduZWQgaW50IHNsZWVwX3VzID0gdGltZW91dF91cyAvIDUwO1xuIFx0dW5zaWduZWQgaW50IHZhbDtcbiBcbiBcdC8qIENoZWNrIHRoZSByZWdpc3RlciBpcyA4Yml0ICovXG5AQCAtMzM2LDcgJiM0MzszMzYsNyBAQCBpbnQgemwzMDczeF9wb2xsX3plcm9fdTgoc3RydWN0IHpsMzA3M3hfZGV2ICp6bGRldiwgdW5zaWduZWQgaW50IHJlZyxcbiBcdHJlZyA9IFpMX1JFR19BRERSKHJlZykgJiM0MzsgWkxfUkFOR0VfT0ZGU0VUO1xuIFxuIFx0cmV0dXJuIHJlZ21hcF9yZWFkX3BvbGxfdGltZW91dCh6bGRldi1cdTAwM2VyZWdtYXAsIHJlZywgdmFsLCAhKHZhbCBcdTAwMjYgbWFzayksXG4tXHRcdFx0XHRcdFpMX1BPTExfU0xFRVBfVVMsIHRpbWVvdXRfdXMpO1xuJiM0MztcdFx0XHRcdFx0c2xlZXBfdXMsIHRpbWVvdXRfdXMpO1xuIH1cbiBcbiBpbnQgemwzMDczeF9tYl9vcChzdHJ1Y3QgemwzMDczeF9kZXYgKnpsZGV2LCB1bnNpZ25lZCBpbnQgb3BfcmVnLCB1OCBvcF92YWwsXG5AQCAtNTExLDYgJiM0Mzs1MTEsMTEgQEAgemwzMDczeF9kZXZfc3RhdGVfZmV0Y2goc3RydWN0IHpsMzA3M3hfZGV2ICp6bGRldilcbiBcdGludCByYztcbiBcdHU4IGk7XG4gXG4mIzQzO1x0cmMgPSB6bDMwNzN4X3JlYWRfdTE2KHpsZGV2LCBaTF9SRUdfT1VUUFVUX1NURVBfVElNRV9NQVNLLFxuJiM0MztcdFx0XHQgICAgICBcdTAwMjZ6bGRldi1cdTAwM2VvdXRfc3RlcF90aW1lX21hc2spO1xuJiM0MztcdGlmIChyYylcbiYjNDM7XHRcdHJldHVybiByYztcbiYjNDM7XG4gXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBaTDMwNzNYX05VTV9SRUZTOyBpJiM0MzsmIzQzOykge1xuIFx0XHRyYyA9IHpsMzA3M3hfcmVmX3N0YXRlX2ZldGNoKHpsZGV2LCBpKTtcbiBcdFx0aWYgKHJjKSB7XG5AQCAtMTAzNCw2ICYjNDM7MTAzOSwxNCBAQCBpbnQgemwzMDczeF9kZXZfcHJvYmUoc3RydWN0IHpsMzA3M3hfZGV2ICp6bGRldilcbiBcdCAqIGFuZC9vciBwb2xscyBhcmUgcmVxdWlyZWQgdG8gYmUgZG9uZSBhdG9taWNhbGx5LlxuIFx0ICovXG4gXHRyYyA9IGRldm1fbXV0ZXhfaW5pdCh6bGRldi1cdTAwM2VkZXYsIFx1MDAyNnpsZGV2LVx1MDAzZW11bHRpb3BfbG9jayk7XG4mIzQzO1x0aWYgKHJjKVxuJiM0MztcdFx0cmV0dXJuIGRldl9lcnJfcHJvYmUoemxkZXYtXHUwMDNlZGV2LCByYyxcbiYjNDM7XHRcdFx0XHQgICAgIFwmIzM0O0ZhaWxlZCB0byBpbml0aWFsaXplIG11dGV4XFxuXCYjMzQ7KTtcbiYjNDM7XHRyYyA9IGRldm1fbXV0ZXhfaW5pdCh6bGRldi1cdTAwM2VkZXYsIFx1MDAyNnpsZGV2LVx1MDAzZXBoYXNlX3N0ZXBfbG9jayk7XG4mIzQzO1x0aWYgKHJjKVxuJiM0MztcdFx0cmV0dXJuIGRldl9lcnJfcHJvYmUoemxkZXYtXHUwMDNlZGV2LCByYyxcbiYjNDM7XHRcdFx0XHQgICAgIFwmIzM0O0ZhaWxlZCB0byBpbml0aWFsaXplIG11dGV4XFxuXCYjMzQ7KTtcbiYjNDM7XHRyYyA9IGRldm1fbXV0ZXhfaW5pdCh6bGRldi1cdTAwM2VkZXYsIFx1MDAyNnpsZGV2LVx1MDAzZXRpZV9sb2NrKTtcbiBcdGlmIChyYylcbiBcdFx0cmV0dXJuIGRldl9lcnJfcHJvYmUoemxkZXYtXHUwMDNlZGV2LCByYyxcbiBcdFx0XHRcdCAgICAgXCYjMzQ7RmFpbGVkIHRvIGluaXRpYWxpemUgbXV0ZXhcXG5cJiMzNDspO1xuZGlmZiAtLWdpdCBhL2RyaXZlcnMvZHBsbC96bDMwNzN4L2NvcmUuaCBiL2RyaXZlcnMvZHBsbC96bDMwNzN4L2NvcmUuaFxuaW5kZXggNzhkYzIwOGYzZWVhMi4uNjdjMTBlMjU5NTExOCAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvZHBsbC96bDMwNzN4L2NvcmUuaFxuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9kcGxsL3psMzA3M3gvY29yZS5oXG5AQCAtMjYsNiAmIzQzOzI2LDEwIEBAIHN0cnVjdCB6bDMwNzN4X2RwbGw7XG4gI2RlZmluZSBaTF9QT0xMX0hXUkVHX1RJTUVPVVRfVVNcdCg1MCAqIFVTRUNfUEVSX01TRUMpXG4gI2RlZmluZSBaTF9QT0xMX01CX1RJTUVPVVRfVVNcdFx0KDMwICogVVNFQ19QRVJfTVNFQylcbiAjZGVmaW5lIFpMX1BPTExfUEhBU0VfRVJSX1RJTUVPVVRfVVNcdCg1MCAqIFVTRUNfUEVSX01TRUMpXG4mIzQzOyNkZWZpbmUgWkxfUE9MTF9QSEFTRV9TVEVQX1RJTUVPVVRfVVNcdCgzMDAwICogVVNFQ19QRVJfTVNFQylcbiYjNDM7I2RlZmluZSBaTF9QT0xMX1RJRV9XUl9USU1FT1VUX1VTXHQoMTAwMCAqIFVTRUNfUEVSX01TRUMpXG4mIzQzOyNkZWZpbmUgWkxfUE9MTF9UT0RfUkRfVElNRU9VVF9VU1x0KDMwICogVVNFQ19QRVJfTVNFQylcbiYjNDM7I2RlZmluZSBaTF9QT0xMX1RPRF9XUl9USU1FT1VUX1VTXHQoMTAwMCAqIFVTRUNfUEVSX01TRUMpXG4gXG4gZW51bSB6bDMwNzN4X2ZsYWdzIHtcbiBcdFpMMzA3M1hfRkxBR19SRUZfUEhBU0VfQ09NUF8zMl9CSVQsXG5AQCAtNTUsNiAmIzQzOzU5LDggQEAgc3RydWN0IHpsMzA3M3hfY2hpcF9pbmZvIHtcbiAgKiBAcmVnbWFwOiByZWdtYXAgdG8gYWNjZXNzIGRldmljZSByZWdpc3RlcnNcbiAgKiBAaW5mbzogZGV0ZWN0ZWQgY2hpcCBpbmZvXG4gICogQG11bHRpb3BfbG9jazogdG8gc2VyaWFsaXplIG11bHRpcGxlIHJlZ2lzdGVyIG9wZXJhdGlvbnNcbiYjNDM7ICogQHRpZV9sb2NrOiB0byBzZXJpYWxpemUgVElFIHdyaXRlIG9wZXJhdGlvbnNcbiYjNDM7ICogQHBoYXNlX3N0ZXBfbG9jazogdG8gc2VyaWFsaXplIG91dHB1dCBwaGFzZSBzdGVwIG9wZXJhdGlvbnNcbiAgKiBAcmVmOiBhcnJheSBvZiBpbnB1dCByZWZlcmVuY2VzJiMzOTsgaW52YXJpYW50c1xuICAqIEBvdXQ6IGFycmF5IG9mIG91dHMmIzM5OyBpbnZhcmlhbnRzXG4gICogQHN5bnRoOiBhcnJheSBvZiBzeW50aHMmIzM5OyBpbnZhcmlhbnRzXG5AQCAtNjMsNiAmIzQzOzY5LDcgQEAgc3RydWN0IHpsMzA3M3hfY2hpcF9pbmZvIHtcbiAgKiBAa3dvcmtlcjogdGhyZWFkIGZvciBwZXJpb2RpYyB3b3JrXG4gICogQHdvcms6IHBlcmlvZGljIHdvcmtcbiAgKiBAY2xvY2tfaWQ6IGNsb2NrIGlkIG9mIHRoZSBkZXZpY2VcbiYjNDM7ICogQG91dF9zdGVwX3RpbWVfbWFzazogb3V0cHV0IHN0ZXAtdGltZSBtYXNrIChkZXZpY2UtZ2xvYmFsKVxuICAqIEBwaGFzZV9hdmdfZmFjdG9yOiBwaGFzZSBvZmZzZXQgbWVhc3VyZW1lbnQgYXZlcmFnaW5nIGZhY3RvclxuICAqIEBmcmVxX21vbml0b3I6IGlzIGZyZXF1ZW5jeSBtb25pdG9yIGVuYWJsZWRcbiAgKi9cbkBAIC03MSw2ICYjNDM7NzgsOCBAQCBzdHJ1Y3QgemwzMDczeF9kZXYge1xuIFx0c3RydWN0IHJlZ21hcFx0XHRcdCpyZWdtYXA7XG4gXHRjb25zdCBzdHJ1Y3QgemwzMDczeF9jaGlwX2luZm9cdCppbmZvO1xuIFx0c3RydWN0IG11dGV4XHRcdFx0bXVsdGlvcF9sb2NrO1xuJiM0MztcdHN0cnVjdCBtdXRleFx0XHRcdHRpZV9sb2NrO1xuJiM0MztcdHN0cnVjdCBtdXRleFx0XHRcdHBoYXNlX3N0ZXBfbG9jaztcbiBcbiBcdC8qIEludmFyaWFudHMgKi9cbiBcdHN0cnVjdCB6bDMwNzN4X3JlZlx0cmVmW1pMMzA3M1hfTlVNX1JFRlNdO1xuQEAgLTg3LDYgJiM0Mzs5Niw3IEBAIHN0cnVjdCB6bDMwNzN4X2RldiB7XG4gXG4gXHQvKiBQZXItY2hpcCBwYXJhbWV0ZXJzICovXG4gXHR1NjRcdFx0XHRjbG9ja19pZDtcbiYjNDM7XHR1MTZcdFx0XHRvdXRfc3RlcF90aW1lX21hc2s7XG4gXHR1OFx0XHRcdHBoYXNlX2F2Z19mYWN0b3I7XG4gXHRib29sXHRcdFx0ZnJlcV9tb25pdG9yO1xuIH07XG5AQCAtMzA4LDYgJiM0MzszMTgsMTkgQEAgemwzMDczeF9kZXZfb3V0X2lzX2VuYWJsZWQoc3RydWN0IHpsMzA3M3hfZGV2ICp6bGRldiwgdTggaW5kZXgpXG4gXHRyZXR1cm4gemwzMDczeF9zeW50aF9pc19lbmFibGVkKHN5bnRoKSBcdTAwMjZcdTAwMjYgemwzMDczeF9vdXRfaXNfZW5hYmxlZChvdXQpO1xuIH1cbiBcbiYjNDM7LyoqXG4mIzQzOyAqIHpsMzA3M3hfZGV2X291dF9pc19zdGVwcGVkIC0gY2hlY2sgaWYgb3V0cHV0IGlzIGluIHN0ZXAtdGltZSBtYXNrXG4mIzQzOyAqIEB6bGRldjogcG9pbnRlciB0byB6bDMwNzN4IGRldmljZVxuJiM0MzsgKiBAaW5kZXg6IG91dHB1dCBpbmRleFxuJiM0MzsgKlxuJiM0MzsgKiBSZXR1cm46IHRydWUgaWYgb3V0cHV0IGlzIGFmZmVjdGVkIGJ5IHN0ZXAtdGltZSBvcGVyYXRpb25zXG4mIzQzOyAqL1xuJiM0MztzdGF0aWMgaW5saW5lIGJvb2xcbiYjNDM7emwzMDczeF9kZXZfb3V0X2lzX3N0ZXBwZWQoc3RydWN0IHpsMzA3M3hfZGV2ICp6bGRldiwgdTggaW5kZXgpXG4mIzQzO3tcbiYjNDM7XHRyZXR1cm4gISEoemxkZXYtXHUwMDNlb3V0X3N0ZXBfdGltZV9tYXNrIFx1MDAyNiBCSVQoaW5kZXgpKTtcbiYjNDM7fVxuJiM0MztcbiAvKipcbiAgKiB6bDMwNzN4X2Rldl9vdXRfZHBsbF9nZXQgLSBnZXQgRFBMTCBJRCB0aGUgb3V0cHV0IGlzIGRyaXZlbiBieVxuICAqIEB6bGRldjogcG9pbnRlciB0byB6bDMwNzN4IGRldmljZVxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvZHBsbC96bDMwNzN4L2RwbGwuYyBiL2RyaXZlcnMvZHBsbC96bDMwNzN4L2RwbGwuY1xuaW5kZXggMDQ4OGFlNmFjNDg2Yy4uODMwMWFkMzQzNjU4YSAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvZHBsbC96bDMwNzN4L2RwbGwuY1xuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9kcGxsL3psMzA3M3gvZHBsbC5jXG5AQCAtMiw2ICYjNDM7Miw3IEBAXG4gXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvYml0cy5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvYml0ZmllbGQuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC9jbGVhbnVwLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9idWcuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2NvbnRhaW5lcl9vZi5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvZGV2X3ByaW50ay5oXHUwMDNlXG5AQCAtMTMsNiAmIzQzOzE0LDcgQEBcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9uZXRsaW5rLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3Byb3BlcnR5LmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgvcHRwX2Nsb2NrX2tlcm5lbC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvc2xhYi5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvc3ByaW50Zi5oXHUwMDNlXG4gXG5AQCAtMjI3NSw0NSAmIzQzOzIyNzcsMzg0IEBAIHpsMzA3M3hfZHBsbF9pbml0X2ZpbmVfcGhhc2VfYWRqdXN0KHN0cnVjdCB6bDMwNzN4X2RldiAqemxkZXYpXG4gXHRyZXR1cm4gemwzMDczeF93cml0ZV91OCh6bGRldiwgWkxfUkVHX1NZTlRIX1BIQVNFX1NISUZUX0NUUkwsIDB4MDEpO1xuIH1cbiBcbiYjNDM7LyogTWF4aW11bSBmcmVxdWVuY3kgYWRqdXN0bWVudDogJiM0MzstMSUgb2Ygbm9taW5hbCBpbiBwcGIgKi9cbiYjNDM7I2RlZmluZSBaTDMwNzNYX0RQTExfUFRQX01BWF9BREpcdDEwMDAwMDAwXG4mIzQzO1xuIC8qKlxuLSAqIHpsMzA3M3hfZHBsbF9hbGxvYyAtIGFsbG9jYXRlIERQTEwgZGV2aWNlXG4tICogQHpsZGV2OiBwb2ludGVyIHRvIHpsMzA3M3ggZGV2aWNlXG4tICogQGNoOiBEUExMIGNoYW5uZWwgbnVtYmVyXG4mIzQzOyAqIHpsMzA3M3hfZHBsbF9wdHBfZ2V0dGltZXg2NCAtIHJlYWQgY3VycmVudCB0aW1lIGZyb20gVG9EIGNvdW50ZXJzXG4mIzQzOyAqIEBpbmZvOiBQVFAgY2xvY2sgaW5mb1xuJiM0MzsgKiBAdHM6IHRpbWVzcGVjIHRvIHN0b3JlIGN1cnJlbnQgdGltZVxuJiM0MzsgKiBAc3RzOiBvcHRpb25hbCBzeXN0ZW0gdGltZXN0YW1wIHBhaXIgZm9yIGNyb3NzLXRpbWVzdGFtcGluZ1xuICAqXG4tICogQWxsb2NhdGVzIERQTEwgZGV2aWNlIHN0cnVjdHVyZSBmb3IgZ2l2ZW4gRFBMTCBjaGFubmVsLlxuJiM0MzsgKiBSZXR1cm46IDAgb24gc3VjY2VzcywgXHUwMDNjMCBvbiBlcnJvclxuJiM0MzsgKi9cbiYjNDM7c3RhdGljIGludCB6bDMwNzN4X2RwbGxfcHRwX2dldHRpbWV4NjQoc3RydWN0IHB0cF9jbG9ja19pbmZvICppbmZvLFxuJiM0MztcdFx0XHRcdCAgICAgICBzdHJ1Y3QgdGltZXNwZWM2NCAqdHMsXG4mIzQzO1x0XHRcdFx0ICAgICAgIHN0cnVjdCBwdHBfc3lzdGVtX3RpbWVzdGFtcCAqc3RzKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IHpsMzA3M3hfZHBsbCAqemxkcGxsID0gY29udGFpbmVyX29mKGluZm8sIHN0cnVjdCB6bDMwNzN4X2RwbGwsXG4mIzQzO1x0XHRcdFx0XHRcdCAgIHB0cF9pbmZvKTtcbiYjNDM7XG4mIzQzO1x0Z3VhcmQobXV0ZXgpKFx1MDAyNnpsZHBsbC1cdTAwM2Vsb2NrKTtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIHpsMzA3M3hfY2hhbl90b2RfcmVhZCh6bGRwbGwtXHUwMDNlZGV2LCB6bGRwbGwtXHUwMDNlaWQsIGZhbHNlLCB0cywgc3RzKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7LyoqXG4mIzQzOyAqIHpsMzA3M3hfZHBsbF9wdHBfc2V0dGltZTY0IC0gc2V0IFRvRCBjb3VudGVycyB0byBnaXZlbiB0aW1lXG4mIzQzOyAqIEBpbmZvOiBQVFAgY2xvY2sgaW5mb1xuJiM0MzsgKiBAdHM6IHRpbWVzcGVjIHdpdGggdGltZSB0byBzZXRcbiAgKlxuLSAqIFJldHVybjogcG9pbnRlciB0byBEUExMIGRldmljZSBvbiBzdWNjZXNzLCBlcnJvciBwb2ludGVyIG9uIGVycm9yXG4mIzQzOyAqIFJldHVybjogMCBvbiBzdWNjZXNzLCBcdTAwM2MwIG9uIGVycm9yXG4gICovXG4tc3RydWN0IHpsMzA3M3hfZHBsbCAqXG4temwzMDczeF9kcGxsX2FsbG9jKHN0cnVjdCB6bDMwNzN4X2RldiAqemxkZXYsIHU4IGNoKVxuJiM0MztzdGF0aWMgaW50IHpsMzA3M3hfZHBsbF9wdHBfc2V0dGltZTY0KHN0cnVjdCBwdHBfY2xvY2tfaW5mbyAqaW5mbyxcbiYjNDM7XHRcdFx0XHQgICAgICBjb25zdCBzdHJ1Y3QgdGltZXNwZWM2NCAqdHMpXG4ge1xuLVx0c3RydWN0IHpsMzA3M3hfZHBsbCAqemxkcGxsO1xuJiM0MztcdHN0cnVjdCB6bDMwNzN4X2RwbGwgKnpsZHBsbCA9IGNvbnRhaW5lcl9vZihpbmZvLCBzdHJ1Y3QgemwzMDczeF9kcGxsLFxuJiM0MztcdFx0XHRcdFx0XHQgICBwdHBfaW5mbyk7XG4gXG4tXHR6bGRwbGwgPSBremFsbG9jX29iaigqemxkcGxsKTtcbi1cdGlmICghemxkcGxsKVxuLVx0XHRyZXR1cm4gRVJSX1BUUigtRU5PTUVNKTtcbiYjNDM7XHRndWFyZChtdXRleCkoXHUwMDI2emxkcGxsLVx1MDAzZWxvY2spO1xuIFxuLVx0emxkcGxsLVx1MDAzZWRldiA9IHpsZGV2O1xuLVx0emxkcGxsLVx1MDAzZWlkID0gY2g7XG4tXHRtdXRleF9pbml0KFx1MDAyNnpsZHBsbC1cdTAwM2Vsb2NrKTtcbi1cdElOSVRfTElTVF9IRUFEKFx1MDAyNnpsZHBsbC1cdTAwM2VwaW5zKTtcbiYjNDM7XHRyZXR1cm4gemwzMDczeF9jaGFuX3RvZF93cml0ZSh6bGRwbGwtXHUwMDNlZGV2LCB6bGRwbGwtXHUwMDNlaWQsICp0cyk7XG4mIzQzO31cbiBcbi1cdHJldHVybiB6bGRwbGw7XG4mIzQzOy8qKlxuJiM0MzsgKiB6bDMwNzN4X2RwbGxfcHRwX2FkanRpbWVfcGhhc2Vfc3RlcCAtIGFkanVzdCBzdWItc2Vjb25kIHRpbWUgdmlhIHBoYXNlIHN0ZXBcbiYjNDM7ICogQHpsZHBsbDogRFBMTCBjaGFubmVsXG4mIzQzOyAqIEBkZWx0YTogdGltZSBhZGp1c3RtZW50IGluIG5hbm9zZWNvbmRzIChtdXN0IGJlIHdpdGhpbiAoLU5TRUNfUEVSX1NFQyxcbiYjNDM7ICogICAgICAgICBOU0VDX1BFUl9TRUMpKVxuJiM0MzsgKlxuJiM0MzsgKiBVc2VzIHRoZSBvdXRwdXQgcGhhc2Ugc3RlcCBtZWNoYW5pc20gd2l0aCB0b2Rfc3RlcD0xIHRvIGFkanVzdCBib3RoXG4mIzQzOyAqIHRoZSBvdXRwdXQgY2xvY2sgcGhhc2UgYW5kIHRoZSBUb0QgY291bnRlciBzaW11bHRhbmVvdXNseS4gVGhpcyBrZWVwc1xuJiM0MzsgKiBvdXRwdXRzIGFuZCBUb0QgY29oZXJlbnQuIE9ubHkgdmFsaWQgZm9yIE5DTy5cbiYjNDM7ICpcbiYjNDM7ICogT3V0cHV0cyBhcmUgZ3JvdXBlZCBieSBzeW50aGVzaXplciBzaW5jZSB0aGUgcGhhc2Ugc3RlcCB2YWx1ZSBpcyBpblxuJiM0MzsgKiBzeW50aGVzaXplciBjbG9jayBjeWNsZXMuIFRoZSBmaXJzdCBzeW50aCBncm91cCB3aXRoIGVuYWJsZWQgb3V0cHV0c1xuJiM0MzsgKiB1c2VzIHRvZF9zdGVwIHRvIGFkanVzdCBib3RoIG91dHB1dHMgYW5kIHRoZSBUb0QgY291bnRlci4gUmVtYWluaW5nXG4mIzQzOyAqIGdyb3VwcyBzdGVwIG91dHB1dHMgb25seS4gSWYgbm8gc3ludGggaGFzIGVuYWJsZWQgb3V0cHV0cywgdGhlIFRvRFxuJiM0MzsgKiBjb3VudGVyIGlzIHN0ZXBwZWQgYWxvbmUgdXNpbmcgYW4gZW1wdHkgb3V0cHV0IG1hc2sgKHRoZSBGVyB1c2VzXG4mIzQzOyAqIHRoZSBmaXJzdCBlbmFibGVkIHN5bnRoJiMzOTtzIHBlcmlvZCBmb3IgdGhlIGNvbnZlcnNpb24pLlxuJiM0MzsgKlxuJiM0MzsgKiBSZXR1cm46XG4mIzQzOyAqICogJTBcdFx0XHQtIHN1Y2Nlc3MgKG9yIHBhcnRpYWwgc3VjY2VzcyBpZiBhIGxhdGVyIHN5bnRoIGdyb3VwXG4mIzQzOyAqXHRcdFx0ICBmYWlsZWQgYWZ0ZXIgdGhlIGZpcnN0IHdhcyBhbHJlYWR5IHN0ZXBwZWQpXG4mIzQzOyAqICogJS1FT1BOT1RTVVBQXHQtIG5vIHN5bnRocyBhdmFpbGFibGVcbiYjNDM7ICogKiBuZWdhdGl2ZVx0XHQtIGVycm9yXG4mIzQzOyAqL1xuJiM0MztzdGF0aWMgaW50IHpsMzA3M3hfZHBsbF9wdHBfYWRqdGltZV9waGFzZV9zdGVwKHN0cnVjdCB6bDMwNzN4X2RwbGwgKnpsZHBsbCxcbiYjNDM7XHRcdFx0XHRcdCAgICAgICBzNjQgZGVsdGEpXG4mIzQzO3tcbiYjNDM7XHR1MTYgc3ludGhfbWFza1taTDMwNzNYX05VTV9TWU5USFNdID0ge307XG4mIzQzO1x0c3RydWN0IHpsMzA3M3hfZGV2ICp6bGRldiA9IHpsZHBsbC1cdTAwM2VkZXY7XG4mIzQzO1x0Y29uc3Qgc3RydWN0IHpsMzA3M3hfc3ludGggKnN5bnRoO1xuJiM0MztcdHN0cnVjdCB6bDMwNzN4X2RwbGxfcGluICpwaW47XG4mIzQzO1x0dTMyIGZpcnN0X3N5bnRoX2ZyZXEgPSAwO1xuJiM0MztcdGJvb2wgdG9kX3N0ZXBwZWQgPSBmYWxzZTtcbiYjNDM7XHRzMzIgc3RlcF9jeWNsZXM7XG4mIzQzO1x0dTMyIHN5bnRoX2ZyZXE7XG4mIzQzO1x0aW50IHJjO1xuJiM0MztcdHU4IGk7XG4mIzQzO1xuJiM0MztcdC8qIEJ1aWxkIHBlci1zeW50aCBvdXRwdXQgbWFza3MgZnJvbSByZWdpc3RlcmVkIG91dHB1dCBwaW5zICovXG4mIzQzO1x0bGlzdF9mb3JfZWFjaF9lbnRyeShwaW4sIFx1MDAyNnpsZHBsbC1cdTAwM2VwaW5zLCBsaXN0KSB7XG4mIzQzO1x0XHR1OCBvdXRfaWQsIHN5bnRoX2lkO1xuJiM0MztcbiYjNDM7XHRcdGlmICh6bDMwNzN4X2RwbGxfaXNfaW5wdXRfcGluKHBpbikpXG4mIzQzO1x0XHRcdGNvbnRpbnVlO1xuJiM0MztcbiYjNDM7XHRcdG91dF9pZCA9IHpsMzA3M3hfb3V0cHV0X3Bpbl9vdXRfZ2V0KHBpbi1cdTAwM2VpZCk7XG4mIzQzO1xuJiM0MztcdFx0aWYgKCF6bDMwNzN4X2Rldl9vdXRfaXNfc3RlcHBlZCh6bGRldiwgb3V0X2lkKSlcbiYjNDM7XHRcdFx0Y29udGludWU7XG4mIzQzO1xuJiM0MztcdFx0c3ludGhfaWQgPSB6bDMwNzN4X2Rldl9vdXRfc3ludGhfZ2V0KHpsZGV2LCBvdXRfaWQpO1xuJiM0MztcdFx0aWYgKHN5bnRoX2lkIFx1MDAzZT0gWkwzMDczWF9OVU1fU1lOVEhTKSB7XG4mIzQzO1x0XHRcdGRldl93YXJuKHpsZGV2LVx1MDAzZWRldiwgXCYjMzQ7VW5leHBlY3RlZCBzeW50aCBpZCBmb3IgT1VUJXVcXG5cJiMzNDssXG4mIzQzO1x0XHRcdFx0IG91dF9pZCk7XG4mIzQzO1x0XHRcdGNvbnRpbnVlO1xuJiM0MztcdFx0fVxuJiM0MztcdFx0c3ludGhfbWFza1tzeW50aF9pZF0gfD0gQklUKG91dF9pZCk7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHQvKiBQcm9jZXNzIGVhY2ggc3ludGggZ3JvdXAgKi9cbiYjNDM7XHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBaTDMwNzNYX05VTV9TWU5USFM7IGkmIzQzOyYjNDM7KSB7XG4mIzQzO1x0XHRzeW50aCA9IHpsMzA3M3hfc3ludGhfc3RhdGVfZ2V0KHpsZGV2LCBpKTtcbiYjNDM7XHRcdGlmICghemwzMDczeF9zeW50aF9pc19lbmFibGVkKHN5bnRoKSB8fFxuJiM0MztcdFx0ICAgIHpsMzA3M3hfc3ludGhfZHBsbF9nZXQoc3ludGgpICE9IHpsZHBsbC1cdTAwM2VpZClcbiYjNDM7XHRcdFx0Y29udGludWU7XG4mIzQzO1xuJiM0MztcdFx0c3ludGhfZnJlcSA9IHpsMzA3M3hfc3ludGhfZnJlcV9nZXQoc3ludGgpO1xuJiM0MztcbiYjNDM7XHRcdC8qIFJlbWVtYmVyIGZpcnN0IGVuYWJsZWQgc3ludGggZnJlcSBmb3IgVG9ELW9ubHkgZmFsbGJhY2sgKi9cbiYjNDM7XHRcdGlmICghZmlyc3Rfc3ludGhfZnJlcSlcbiYjNDM7XHRcdFx0Zmlyc3Rfc3ludGhfZnJlcSA9IHN5bnRoX2ZyZXE7XG4mIzQzO1xuJiM0MztcdFx0aWYgKCFzeW50aF9tYXNrW2ldKVxuJiM0MztcdFx0XHRjb250aW51ZTtcbiYjNDM7XG4mIzQzO1x0XHQvKiBTYWZlIGZvciBzMzI6IG1heCBzeW50aCBmcmVxIGlzIDc1MCBNSHogKi9cbiYjNDM7XHRcdHN0ZXBfY3ljbGVzID0gZGl2X3M2NChkZWx0YSAqIHN5bnRoX2ZyZXEsIE5TRUNfUEVSX1NFQyk7XG4mIzQzO1xuJiM0MztcdFx0cmMgPSB6bDMwNzN4X2NoYW5fcGhhc2Vfc3RlcCh6bGRldiwgemxkcGxsLVx1MDAzZWlkLFxuJiM0MztcdFx0XHRcdFx0ICAgICBzeW50aF9tYXNrW2ldLCBzdGVwX2N5Y2xlcyxcbiYjNDM7XHRcdFx0XHRcdCAgICAgIXRvZF9zdGVwcGVkKTtcbiYjNDM7XHRcdGlmIChyYykge1xuJiM0MztcdFx0XHRpZiAodG9kX3N0ZXBwZWQpIHtcbiYjNDM7XHRcdFx0XHRkZXZfd2Fybih6bGRldi1cdTAwM2VkZXYsXG4mIzQzO1x0XHRcdFx0XHQgXCYjMzQ7UGFydGlhbCBwaGFzZSBzdGVwIGZhaWx1cmVcXG5cJiMzNDspO1xuJiM0MztcdFx0XHRcdHJldHVybiAwO1xuJiM0MztcdFx0XHR9XG4mIzQzO1x0XHRcdHJldHVybiByYztcbiYjNDM7XHRcdH1cbiYjNDM7XHRcdHRvZF9zdGVwcGVkID0gdHJ1ZTtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdGlmICghZmlyc3Rfc3ludGhfZnJlcSlcbiYjNDM7XHRcdHJldHVybiAtRU9QTk9UU1VQUDtcbiYjNDM7XG4mIzQzO1x0LyogTm8gZW5hYmxlZCBvdXRwdXRzIGZvdW5kOyBzdGVwIFRvRCBjb3VudGVyIG9ubHkgdXNpbmcgdGhlXG4mIzQzO1x0ICogZmlyc3QgZW5hYmxlZCBzeW50aCYjMzk7cyBwZXJpb2QgKGVtcHR5IG91dHB1dCBtYXNrKS5cbiYjNDM7XHQgKi9cbiYjNDM7XHRpZiAoIXRvZF9zdGVwcGVkKSB7XG4mIzQzO1x0XHRzdGVwX2N5Y2xlcyA9IGRpdl9zNjQoZGVsdGEgKiBmaXJzdF9zeW50aF9mcmVxLCBOU0VDX1BFUl9TRUMpO1xuJiM0MztcdFx0cmV0dXJuIHpsMzA3M3hfY2hhbl9waGFzZV9zdGVwKHpsZGV2LCB6bGRwbGwtXHUwMDNlaWQsIDAsXG4mIzQzO1x0XHRcdFx0XHQgICAgICAgc3RlcF9jeWNsZXMsIHRydWUpO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0cmV0dXJuIDA7XG4gfVxuIFxuIC8qKlxuLSAqIHpsMzA3M3hfZHBsbF9mcmVlIC0gZnJlZSBEUExMIGRldmljZVxuLSAqIEB6bGRwbGw6IHBvaW50ZXIgdG8gemwzMDczeF9kcGxsIHN0cnVjdHVyZVxuJiM0MzsgKiB6bDMwNzN4X2RwbGxfcHRwX2FkanRpbWUgLSBhZGp1c3QgUFRQIGNsb2NrIHRpbWVcbiYjNDM7ICogQGluZm86IFBUUCBjbG9jayBpbmZvXG4mIzQzOyAqIEBkZWx0YTogdGltZSBhZGp1c3RtZW50IGluIG5hbm9zZWNvbmRzXG4gICpcbi0gKiBEZWFsbG9jYXRlcyBnaXZlbiBEUExMIGRldmljZSBwcmV2aW91c2x5IGFsbG9jYXRlZCBieSBAemwzMDczeF9kcGxsX2FsbG9jLlxuJiM0MzsgKiBGb3IgTkNPLCBsYXJnZSBkZWx0YXMgKFx1MDAzZT0gMSBzZWNvbmQpIGFyZSBzcGxpdCBpbnRvIGEgVG9EXG4mIzQzOyAqIHJlYWQtbW9kaWZ5LXdyaXRlIGZvciB0aGUgc2Vjb25kcyBwYXJ0IGFuZCBhbiBvdXRwdXQgcGhhc2Ugc3RlcCBmb3JcbiYjNDM7ICogdGhlIHN1Yi1zZWNvbmQgcmVtYWluZGVyLiBTdWItc2Vjb25kIGRlbHRhcyB1c2UgcGhhc2Ugc3RlcCBkaXJlY3RseSxcbiYjNDM7ICogZmFsbGluZyBiYWNrIHRvIFRvRCByZWFkLW1vZGlmeS13cml0ZSBpZiBwaGFzZSBzdGVwIG9yIFRJRSB3cml0ZVxuJiM0MzsgKiBmYWlscy4gSW4gQVVUTy9SRUZMT0NLIG1vZGVzLCBsYXJnZSBkZWx0YXMgYXJlIHNwbGl0IGludG8gVG9EXG4mIzQzOyAqIHJlYWQtbW9kaWZ5LXdyaXRlIGZvciBzZWNvbmRzIGFuZCBUSUUgd3JpdGUgZm9yIHRoZSBzdWItc2Vjb25kXG4mIzQzOyAqIHJlbWFpbmRlci4gU3ViLXNlY29uZCBkZWx0YXMgdXNlIFRJRSB3cml0ZSBkaXJlY3RseS5cbiYjNDM7ICpcbiYjNDM7ICogSWYgdGhlIHNlY29uZHMgcGFydCB3YXMgYWxyZWFkeSBjb21taXR0ZWQgd2hlbiB0aGUgc3ViLXNlY29uZFxuJiM0MzsgKiBtZWNoYW5pc20gZmFpbHMsIHJldHVybnMgMCB0byBwcmV2ZW50IHRoZSBQVFAgc2Vydm8gZnJvbSByZXRyeWluZ1xuJiM0MzsgKiB0aGUgZnVsbCBkZWx0YSBhbmQgYXBwbHlpbmcgc2Vjb25kcyBhZ2Fpbi5cbiYjNDM7ICpcbiYjNDM7ICogUmV0dXJuOiAwIG9uIHN1Y2Nlc3MgKG9yIHBhcnRpYWwgc3VjY2VzcyksIFx1MDAzYzAgb24gZXJyb3JcbiAgKi9cbi12b2lkXG4temwzMDczeF9kcGxsX2ZyZWUoc3RydWN0IHpsMzA3M3hfZHBsbCAqemxkcGxsKVxuJiM0MztzdGF0aWMgaW50IHpsMzA3M3hfZHBsbF9wdHBfYWRqdGltZShzdHJ1Y3QgcHRwX2Nsb2NrX2luZm8gKmluZm8sIHM2NCBkZWx0YSlcbiB7XG4tXHRXQVJOKHpsZHBsbC1cdTAwM2VkcGxsX2RldiwgXCYjMzQ7RFBMTCBkZXZpY2UgaXMgc3RpbGwgcmVnaXN0ZXJlZFxcblwmIzM0Oyk7XG4mIzQzO1x0c3RydWN0IHpsMzA3M3hfZHBsbCAqemxkcGxsID0gY29udGFpbmVyX29mKGluZm8sIHN0cnVjdCB6bDMwNzN4X2RwbGwsXG4mIzQzO1x0XHRcdFx0XHRcdCAgIHB0cF9pbmZvKTtcbiYjNDM7XHRzdHJ1Y3QgemwzMDczeF9kZXYgKnpsZGV2ID0gemxkcGxsLVx1MDAzZWRldjtcbiYjNDM7XHRjb25zdCBzdHJ1Y3QgemwzMDczeF9jaGFuICpjaGFuO1xuJiM0MztcdGJvb2wgc2VjX2FkanVzdGVkID0gZmFsc2U7XG4mIzQzO1x0c3RydWN0IHRpbWVzcGVjNjQgdHM7XG4mIzQzO1x0aW50IHJjO1xuIFxuLVx0bXV0ZXhfZGVzdHJveShcdTAwMjZ6bGRwbGwtXHUwMDNlbG9jayk7XG4tXHRrZnJlZSh6bGRwbGwpO1xuJiM0MztcdGlmICghZGVsdGEpXG4mIzQzO1x0XHRyZXR1cm4gMDtcbiYjNDM7XG4mIzQzO1x0Z3VhcmQobXV0ZXgpKFx1MDAyNnpsZHBsbC1cdTAwM2Vsb2NrKTtcbiYjNDM7XG4mIzQzO1x0LyogTW9kZXMgd2l0aG91dCBwaGFzZSBzdGVwIG9yIFRJRSB1c2UgcGxhaW4gVG9EIGFkanVzdCAqL1xuJiM0MztcdGNoYW4gPSB6bDMwNzN4X2NoYW5fc3RhdGVfZ2V0KHpsZGV2LCB6bGRwbGwtXHUwMDNlaWQpO1xuJiM0MztcdGlmICghemwzMDczeF9jaGFuX21vZGVfaXNfbmNvKGNoYW4pIFx1MDAyNlx1MDAyNlxuJiM0MztcdCAgICAhemwzMDczeF9jaGFuX21vZGVfc3VwcG9ydHNfdGllKGNoYW4pKVxuJiM0MztcdFx0cmV0dXJuIHpsMzA3M3hfY2hhbl90b2RfYWRqdXN0KHpsZGV2LCB6bGRwbGwtXHUwMDNlaWQsXG4mIzQzO1x0XHRcdFx0XHQgICAgICAgbnNfdG9fdGltZXNwZWM2NChkZWx0YSkpO1xuJiM0MztcbiYjNDM7XHQvKiBTcGxpdCBvZmYgc2Vjb25kcyB2aWEgVG9EIHJlYWQtbW9kaWZ5LXdyaXRlIHNvIHRoZSBzdWItc2Vjb25kXG4mIzQzO1x0ICogcmVtYWluZGVyIGNhbiBiZSBhcHBsaWVkIHRocm91Z2ggdGhlIG91dHB1dC1jb2hlcmVudCBtZWNoYW5pc21cbiYjNDM7XHQgKiAocGhhc2Ugc3RlcCBvciBUSUUgd3JpdGUpLlxuJiM0MztcdCAqL1xuJiM0MztcdGlmIChkZWx0YSBcdTAwM2U9IE5TRUNfUEVSX1NFQyB8fCBkZWx0YSBcdTAwM2M9IC1OU0VDX1BFUl9TRUMpIHtcbiYjNDM7XHRcdHMzMiByZW1haW5kZXI7XG4mIzQzO1xuJiM0MztcdFx0dHMudHZfc2VjID0gZGl2X3M2NF9yZW0oZGVsdGEsIE5TRUNfUEVSX1NFQywgXHUwMDI2cmVtYWluZGVyKTtcbiYjNDM7XHRcdHRzLnR2X25zZWMgPSAwO1xuJiM0MztcdFx0ZGVsdGEgPSByZW1haW5kZXI7XG4mIzQzO1xuJiM0MztcdFx0cmMgPSB6bDMwNzN4X2NoYW5fdG9kX2FkanVzdCh6bGRldiwgemxkcGxsLVx1MDAzZWlkLCB0cyk7XG4mIzQzO1x0XHRpZiAocmMpXG4mIzQzO1x0XHRcdHJldHVybiByYztcbiYjNDM7XG4mIzQzO1x0XHQvKiBObyBzdWItc2Vjb25kIHJlbWFpbmRlciwgZG9uZSAqL1xuJiM0MztcdFx0aWYgKCFkZWx0YSlcbiYjNDM7XHRcdFx0cmV0dXJuIDA7XG4mIzQzO1xuJiM0MztcdFx0LyogV2FpdCBmb3IgdGhlIFRvRCB3cml0ZSB0byBiZSBhcHBsaWVkIGF0IHRoZSAxIEh6IGVkZ2VcbiYjNDM7XHRcdCAqIGJlZm9yZSBpc3N1aW5nIHBoYXNlIHN0ZXAgb3IgVElFIHdyaXRlLCBzbyB0aGUgcGVuZGluZ1xuJiM0MztcdFx0ICogV1JfTkVYVF8xSFogZG9lcyBub3Qgb3ZlcndyaXRlIHRoZSBzdWItc2Vjb25kIGFkanVzdG1lbnQuXG4mIzQzO1x0XHQgKi9cbiYjNDM7XHRcdHJjID0gemwzMDczeF9jaGFuX3RvZF9yZWFkeV93YWl0KHpsZGV2LCB6bGRwbGwtXHUwMDNlaWQpO1xuJiM0MztcdFx0aWYgKHJjKVxuJiM0MztcdFx0XHRyZXR1cm4gcmM7XG4mIzQzO1xuJiM0MztcdFx0c2VjX2FkanVzdGVkID0gdHJ1ZTtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdC8qIEFwcGx5IHN1Yi1zZWNvbmQgZGVsdGEgdmlhIHBoYXNlIHN0ZXAgKE5DTykgb3IgVElFIHdyaXRlICovXG4mIzQzO1x0aWYgKHpsMzA3M3hfY2hhbl9tb2RlX2lzX25jbyhjaGFuKSkge1xuJiM0MztcdFx0cmMgPSB6bDMwNzN4X2RwbGxfcHRwX2FkanRpbWVfcGhhc2Vfc3RlcCh6bGRwbGwsIGRlbHRhKTtcbiYjNDM7XHRcdGlmICghcmMpXG4mIzQzO1x0XHRcdHJldHVybiAwO1xuJiM0MztcdH0gZWxzZSB7XG4mIzQzO1x0XHRyYyA9IHpsMzA3M3hfY2hhbl90aWVfd3JpdGUoemxkZXYsIHpsZHBsbC1cdTAwM2VpZCwgZGVsdGEpO1xuJiM0MztcdFx0aWYgKCFyYylcbiYjNDM7XHRcdFx0cmV0dXJuIDA7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHQvKiBQaGFzZSBzdGVwIG9yIFRJRSB3cml0ZSBmYWlsZWQsIGZhbGwgYmFjayB0byBUb0QgYWRqdXN0ICovXG4mIzQzO1x0cmMgPSB6bDMwNzN4X2NoYW5fdG9kX2FkanVzdCh6bGRldiwgemxkcGxsLVx1MDAzZWlkLFxuJiM0MztcdFx0XHRcdCAgICAgbnNfdG9fdGltZXNwZWM2NChkZWx0YSkpO1xuJiM0MztcbiYjNDM7XHQvKiBJbiB0aGUgdW5saWtlbHkgZXZlbnQgdGhhdCBib3RoIHBoYXNlIHN0ZXAvVElFIHdyaXRlIGFuZCBmYWxsYmFja1xuJiM0MztcdCAqIFRvRCBhZGp1c3QgZmFpbCBhZnRlciBzZWNvbmRzIHdlcmUgYWxyZWFkeSBjb21taXR0ZWQsIHJldHVyblxuJiM0MztcdCAqIHN1Y2Nlc3MgdG8gcHJldmVudCB0aGUgUFRQIHNlcnZvIGZyb20gcmV0cnlpbmcgdGhlIGZ1bGwgZGVsdGEgYW5kXG4mIzQzO1x0ICogYXBwbHlpbmcgc2Vjb25kcyBhZ2Fpbi4gVGhlIHN1Yi1zZWNvbmQgcmVzaWR1YWwgd2lsbCBzZWxmLWNvcnJlY3RcbiYjNDM7XHQgKiBpbiB0aGUgbmV4dCBzZXJ2byBjeWNsZS5cbiYjNDM7XHQgKi9cbiYjNDM7XHRpZiAocmMgXHUwMDI2XHUwMDI2IHNlY19hZGp1c3RlZCkge1xuJiM0MztcdFx0ZGV2X3dhcm4oemxkZXYtXHUwMDNlZGV2LFxuJiM0MztcdFx0XHQgXCYjMzQ7U3ViLXNlY29uZCBhZGp1c3RtZW50IGZhaWxlZCBhZnRlciBzZWNvbmRzIGFwcGxpZWRcXG5cJiMzNDspO1xuJiM0MztcdFx0cmV0dXJuIDA7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRyZXR1cm4gcmM7XG4mIzQzO31cbiYjNDM7XG4mIzQzOy8qKlxuJiM0MzsgKiB6bDMwNzN4X2RwbGxfcHRwX2FkamZpbmUgLSBhZGp1c3QgUFRQIGNsb2NrIGZyZXF1ZW5jeVxuJiM0MzsgKiBAaW5mbzogUFRQIGNsb2NrIGluZm9cbiYjNDM7ICogQHNjYWxlZF9wcG06IGZyZXF1ZW5jeSBhZGp1c3RtZW50IGluIHNjYWxlZCBwcG0gKHBwbSAqIDJeMTYpXG4mIzQzOyAqXG4mIzQzOyAqIE9ubHkgc3VwcG9ydGVkIGZvciBOQ08uIFdyaXRlcyB0aGUgZGVsdGEgZnJlcXVlbmN5IG9mZnNldCByZWdpc3Rlci5cbiYjNDM7ICpcbiYjNDM7ICogUmV0dXJuOlxuJiM0MzsgKiAqICUwXHRcdFx0LSBzdWNjZXNzIG9yIEBzY2FsZWRfcHBtIGlzIHplcm8gKG5vLW9wKVxuJiM0MzsgKiAqICUtRU9QTk9UU1VQUFx0LSBOQ08gcGluIGlzIG5vdCBjb25uZWN0ZWQgYW5kIEBzY2FsZWRfcHBtIGlzIG5vbi16ZXJvXG4mIzQzOyAqICogbmVnYXRpdmVcdFx0LSBvdGhlciBlcnJvclxuJiM0MzsgKi9cbiYjNDM7c3RhdGljIGludFxuJiM0Mzt6bDMwNzN4X2RwbGxfcHRwX2FkamZpbmUoc3RydWN0IHB0cF9jbG9ja19pbmZvICppbmZvLCBsb25nIHNjYWxlZF9wcG0pXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgemwzMDczeF9kcGxsICp6bGRwbGwgPSBjb250YWluZXJfb2YoaW5mbywgc3RydWN0IHpsMzA3M3hfZHBsbCxcbiYjNDM7XHRcdFx0XHRcdFx0ICAgcHRwX2luZm8pO1xuJiM0MztcdGNvbnN0IHN0cnVjdCB6bDMwNzN4X2NoYW4gKmNoYW47XG4mIzQzO1x0czY0IG9mZnNldDtcbiYjNDM7XG4mIzQzO1x0LyogQ29udmVydCBzY2FsZWRfcHBtIHRvIGRmX29mZnNldCBpbiAyXi00OCBzdGVwczpcbiYjNDM7XHQgKiAgIGRmX29mZnNldCA9IC0oc2NhbGVkX3BwbSAqIDJeMzIpIC8gMTBeNlxuJiM0MztcdCAqXG4mIzQzO1x0ICogU2ltcGxpZnkgdG8gYXZvaWQgb3ZlcmZsb3c6XG4mIzQzO1x0ICogICBkZl9vZmZzZXQgPSAtKHNjYWxlZF9wcG0gKiAyXjI2KSAvIDVeNlxuJiM0MztcdCAqICAgZGZfb2Zmc2V0ID0gLShzY2FsZWRfcHBtICogNjcxMDg4NjQpIC8gMTU2MjVcbiYjNDM7XHQgKi9cbiYjNDM7XHRvZmZzZXQgPSAtZGl2X3M2NCgoczY0KXNjYWxlZF9wcG0gKiA2NzEwODg2NExMLCAxNTYyNSk7XG4mIzQzO1xuJiM0MztcdGd1YXJkKG11dGV4KShcdTAwMjZ6bGRwbGwtXHUwMDNlbG9jayk7XG4mIzQzO1xuJiM0MztcdGNoYW4gPSB6bDMwNzN4X2NoYW5fc3RhdGVfZ2V0KHpsZHBsbC1cdTAwM2VkZXYsIHpsZHBsbC1cdTAwM2VpZCk7XG4mIzQzO1x0aWYgKCF6bDMwNzN4X2NoYW5fbW9kZV9pc19uY28oY2hhbikpXG4mIzQzO1x0XHRyZXR1cm4gc2NhbGVkX3BwbSA/IC1FT1BOT1RTVVBQIDogMDtcbiYjNDM7XHRpZiAob2Zmc2V0ID09IGNoYW4tXHUwMDNlZGZfb2Zmc2V0KVxuJiM0MztcdFx0cmV0dXJuIDA7XG4mIzQzO1xuJiM0MztcdHJldHVybiB6bDMwNzN4X2NoYW5fZGZfb2Zmc2V0X3NldCh6bGRwbGwtXHUwMDNlZGV2LCB6bGRwbGwtXHUwMDNlaWQsIG9mZnNldCk7XG4mIzQzO31cbiYjNDM7XG4mIzQzOy8qKlxuJiM0MzsgKiB6bDMwNzN4X2RwbGxfcHRwX2FkanBoYXNlIC0gYWRqdXN0IFBUUCBjbG9jayBwaGFzZVxuJiM0MzsgKiBAaW5mbzogUFRQIGNsb2NrIGluZm9cbiYjNDM7ICogQGRlbHRhOiBwaGFzZSBhZGp1c3RtZW50IGluIG5hbm9zZWNvbmRzXG4mIzQzOyAqXG4mIzQzOyAqIE9ubHkgc3VwcG9ydGVkIGluIEFVVE8gYW5kIFJFRkxPQ0sgbW9kZXMuIFVzZXMgVElFIHdyaXRlIGZvclxuJiM0MzsgKiBuYW5vc2Vjb25kIHJlc29sdXRpb24gcGhhc2UgYWRqdXN0bWVudC5cbiYjNDM7ICpcbiYjNDM7ICogUmV0dXJuOlxuJiM0MzsgKiAqICUwXHRcdFx0LSBzdWNjZXNzIG9yIEBkZWx0YSBpcyB6ZXJvIChuby1vcClcbiYjNDM7ICogKiAlLUVPUE5PVFNVUFBcdC0gbW9kZSBkb2VzIG5vdCBzdXBwb3J0IFRJRSBhbmQgQGRlbHRhIGlzIG5vbi16ZXJvXG4mIzQzOyAqICogbmVnYXRpdmVcdFx0LSBvdGhlciBlcnJvclxuJiM0MzsgKi9cbiYjNDM7c3RhdGljIGludCB6bDMwNzN4X2RwbGxfcHRwX2FkanBoYXNlKHN0cnVjdCBwdHBfY2xvY2tfaW5mbyAqaW5mbywgczMyIGRlbHRhKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IHpsMzA3M3hfZHBsbCAqemxkcGxsID0gY29udGFpbmVyX29mKGluZm8sIHN0cnVjdCB6bDMwNzN4X2RwbGwsXG4mIzQzO1x0XHRcdFx0XHRcdCAgIHB0cF9pbmZvKTtcbiYjNDM7XHRzdHJ1Y3QgemwzMDczeF9kZXYgKnpsZGV2ID0gemxkcGxsLVx1MDAzZWRldjtcbiYjNDM7XHRjb25zdCBzdHJ1Y3QgemwzMDczeF9jaGFuICpjaGFuO1xuJiM0MztcbiYjNDM7XHRpZiAoIWRlbHRhKVxuJiM0MztcdFx0cmV0dXJuIDA7XG4mIzQzO1xuJiM0MztcdGd1YXJkKG11dGV4KShcdTAwMjZ6bGRwbGwtXHUwMDNlbG9jayk7XG4mIzQzO1xuJiM0MztcdGNoYW4gPSB6bDMwNzN4X2NoYW5fc3RhdGVfZ2V0KHpsZGV2LCB6bGRwbGwtXHUwMDNlaWQpO1xuJiM0MztcbiYjNDM7XHRpZiAoIXpsMzA3M3hfY2hhbl9tb2RlX3N1cHBvcnRzX3RpZShjaGFuKSlcbiYjNDM7XHRcdHJldHVybiAtRU9QTk9UU1VQUDtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIHpsMzA3M3hfY2hhbl90aWVfd3JpdGUoemxkZXYsIHpsZHBsbC1cdTAwM2VpZCwgZGVsdGEpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgczMyXG4mIzQzO3psMzA3M3hfZHBsbF9wdHBfZ2V0bWF4cGhhc2Uoc3RydWN0IHB0cF9jbG9ja19pbmZvICppbmZvIF9fYWx3YXlzX3VudXNlZClcbiYjNDM7e1xuJiM0MztcdC8qIEhXIGxpbWl0cyBUSUUgd3JpdGUgdG8gJiM0MzstMSBzZWNvbmQuIFJldHVybiB0aGUgY29uc3RhbnQgSFdcbiYjNDM7XHQgKiBsaW1pdCBhbmQgbGV0IGFkanBoYXNlIGhhbmRsZSBtb2RlLXNwZWNpZmljIGNoZWNrcy5cbiYjNDM7XHQgKi9cbiYjNDM7XHRyZXR1cm4gTlNFQ19QRVJfU0VDIC0gMTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGNvbnN0IHN0cnVjdCBwdHBfY2xvY2tfaW5mbyB6bDMwNzN4X2RwbGxfcHRwX2Nsb2NrX2luZm8gPSB7XG4mIzQzO1x0Lm93bmVyXHRcdD0gVEhJU19NT0RVTEUsXG4mIzQzO1x0Lm1heF9hZGpcdD0gWkwzMDczWF9EUExMX1BUUF9NQVhfQURKLFxuJiM0MztcdC5nZXR0aW1leDY0XHQ9IHpsMzA3M3hfZHBsbF9wdHBfZ2V0dGltZXg2NCxcbiYjNDM7XHQuc2V0dGltZTY0XHQ9IHpsMzA3M3hfZHBsbF9wdHBfc2V0dGltZTY0LFxuJiM0MztcdC5hZGp0aW1lXHQ9IHpsMzA3M3hfZHBsbF9wdHBfYWRqdGltZSxcbiYjNDM7XHQuYWRqZmluZVx0PSB6bDMwNzN4X2RwbGxfcHRwX2FkamZpbmUsXG4mIzQzO1x0LmFkanBoYXNlXHQ9IHpsMzA3M3hfZHBsbF9wdHBfYWRqcGhhc2UsXG4mIzQzO1x0LmdldG1heHBoYXNlXHQ9IHpsMzA3M3hfZHBsbF9wdHBfZ2V0bWF4cGhhc2UsXG4mIzQzO307XG4mIzQzO1xuJiM0MzsvKipcbiYjNDM7ICogemwzMDczeF9kcGxsX3B0cF9yZWdpc3RlciAtIHJlZ2lzdGVyIFBUUCBjbG9jayBmb3IgYSBEUExMIGNoYW5uZWxcbiYjNDM7ICogQHpsZHBsbDogRFBMTCBjaGFubmVsIHRvIHJlZ2lzdGVyIFBUUCBjbG9jayBmb3JcbiYjNDM7ICpcbiYjNDM7ICogUmV0dXJuOiAwIG9uIHN1Y2Nlc3MsIFx1MDAzYzAgb24gZXJyb3JcbiYjNDM7ICovXG4mIzQzO3N0YXRpYyBpbnQgemwzMDczeF9kcGxsX3B0cF9yZWdpc3RlcihzdHJ1Y3QgemwzMDczeF9kcGxsICp6bGRwbGwpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgemwzMDczeF9kZXYgKnpsZGV2ID0gemxkcGxsLVx1MDAzZWRldjtcbiYjNDM7XHRzdHJ1Y3QgcHRwX2Nsb2NrICpwdHBfY2xvY2s7XG4mIzQzO1xuJiM0MztcdHpsZHBsbC1cdTAwM2VwdHBfaW5mbyA9IHpsMzA3M3hfZHBsbF9wdHBfY2xvY2tfaW5mbztcbiYjNDM7XHRzbnByaW50Zih6bGRwbGwtXHUwMDNlcHRwX2luZm8ubmFtZSwgc2l6ZW9mKHpsZHBsbC1cdTAwM2VwdHBfaW5mby5uYW1lKSxcbiYjNDM7XHRcdCBcJiMzNDslcy1kcGxsJXVcJiMzNDssIGRldl9uYW1lKHpsZGV2LVx1MDAzZWRldiksIHpsZHBsbC1cdTAwM2VpZCk7XG4mIzQzO1xuJiM0MztcdHB0cF9jbG9jayA9IHB0cF9jbG9ja19yZWdpc3RlcihcdTAwMjZ6bGRwbGwtXHUwMDNlcHRwX2luZm8sIHpsZGV2LVx1MDAzZWRldik7XG4mIzQzO1x0aWYgKElTX0VSUihwdHBfY2xvY2spKSB7XG4mIzQzO1x0XHRkZXZfZXJyKHpsZGV2LVx1MDAzZWRldiwgXCYjMzQ7RmFpbGVkIHRvIHJlZ2lzdGVyIFBUUCBjbG9jayBmb3IgRFBMTCV1XFxuXCYjMzQ7LFxuJiM0MztcdFx0XHR6bGRwbGwtXHUwMDNlaWQpO1xuJiM0MztcdFx0cmV0dXJuIFBUUl9FUlIocHRwX2Nsb2NrKTtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdHpsZHBsbC1cdTAwM2VwdHBfY2xvY2sgPSBwdHBfY2xvY2s7XG4mIzQzO1xuJiM0MztcdHJldHVybiAwO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MzsvKipcbiYjNDM7ICogemwzMDczeF9kcGxsX3B0cF91bnJlZ2lzdGVyIC0gdW5yZWdpc3RlciBQVFAgY2xvY2sgZm9yIGEgRFBMTCBjaGFubmVsXG4mIzQzOyAqIEB6bGRwbGw6IERQTEwgY2hhbm5lbCB0byB1bnJlZ2lzdGVyIFBUUCBjbG9jayBmb3JcbiYjNDM7ICovXG4mIzQzO3N0YXRpYyB2b2lkIHpsMzA3M3hfZHBsbF9wdHBfdW5yZWdpc3RlcihzdHJ1Y3QgemwzMDczeF9kcGxsICp6bGRwbGwpXG4mIzQzO3tcbiYjNDM7XHRpZiAoIUlTX0VSUl9PUl9OVUxMKHpsZHBsbC1cdTAwM2VwdHBfY2xvY2spKSB7XG4mIzQzO1x0XHRwdHBfY2xvY2tfdW5yZWdpc3Rlcih6bGRwbGwtXHUwMDNlcHRwX2Nsb2NrKTtcbiYjNDM7XHRcdHpsZHBsbC1cdTAwM2VwdHBfY2xvY2sgPSBOVUxMO1xuJiM0MztcdH1cbiB9XG4gXG4gLyoqXG5AQCAtMjM5OCw2ICYjNDM7MjczOSw0NyBAQCB6bDMwNzN4X2RwbGxfcmVmX3N5bmNfcGFpcnNfcmVnaXN0ZXIoc3RydWN0IHpsMzA3M3hfZHBsbCAqemxkcGxsKVxuIFx0cmV0dXJuIDA7XG4gfVxuIFxuJiM0MzsvKipcbiYjNDM7ICogemwzMDczeF9kcGxsX2FsbG9jIC0gYWxsb2NhdGUgRFBMTCBkZXZpY2VcbiYjNDM7ICogQHpsZGV2OiBwb2ludGVyIHRvIHpsMzA3M3ggZGV2aWNlXG4mIzQzOyAqIEBjaDogRFBMTCBjaGFubmVsIG51bWJlclxuJiM0MzsgKlxuJiM0MzsgKiBBbGxvY2F0ZXMgRFBMTCBkZXZpY2Ugc3RydWN0dXJlIGZvciBnaXZlbiBEUExMIGNoYW5uZWwuXG4mIzQzOyAqXG4mIzQzOyAqIFJldHVybjogcG9pbnRlciB0byBEUExMIGRldmljZSBvbiBzdWNjZXNzLCBlcnJvciBwb2ludGVyIG9uIGVycm9yXG4mIzQzOyAqL1xuJiM0MztzdHJ1Y3QgemwzMDczeF9kcGxsICpcbiYjNDM7emwzMDczeF9kcGxsX2FsbG9jKHN0cnVjdCB6bDMwNzN4X2RldiAqemxkZXYsIHU4IGNoKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IHpsMzA3M3hfZHBsbCAqemxkcGxsO1xuJiM0MztcbiYjNDM7XHR6bGRwbGwgPSBremFsbG9jX29iaigqemxkcGxsKTtcbiYjNDM7XHRpZiAoIXpsZHBsbClcbiYjNDM7XHRcdHJldHVybiBFUlJfUFRSKC1FTk9NRU0pO1xuJiM0MztcbiYjNDM7XHR6bGRwbGwtXHUwMDNlZGV2ID0gemxkZXY7XG4mIzQzO1x0emxkcGxsLVx1MDAzZWlkID0gY2g7XG4mIzQzO1x0bXV0ZXhfaW5pdChcdTAwMjZ6bGRwbGwtXHUwMDNlbG9jayk7XG4mIzQzO1x0SU5JVF9MSVNUX0hFQUQoXHUwMDI2emxkcGxsLVx1MDAzZXBpbnMpO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gemxkcGxsO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MzsvKipcbiYjNDM7ICogemwzMDczeF9kcGxsX2ZyZWUgLSBmcmVlIERQTEwgZGV2aWNlXG4mIzQzOyAqIEB6bGRwbGw6IHBvaW50ZXIgdG8gemwzMDczeF9kcGxsIHN0cnVjdHVyZVxuJiM0MzsgKlxuJiM0MzsgKiBEZWFsbG9jYXRlcyBnaXZlbiBEUExMIGRldmljZSBwcmV2aW91c2x5IGFsbG9jYXRlZCBieSBAemwzMDczeF9kcGxsX2FsbG9jLlxuJiM0MzsgKi9cbiYjNDM7dm9pZFxuJiM0Mzt6bDMwNzN4X2RwbGxfZnJlZShzdHJ1Y3QgemwzMDczeF9kcGxsICp6bGRwbGwpXG4mIzQzO3tcbiYjNDM7XHRXQVJOKHpsZHBsbC1cdTAwM2VkcGxsX2RldiwgXCYjMzQ7RFBMTCBkZXZpY2UgaXMgc3RpbGwgcmVnaXN0ZXJlZFxcblwmIzM0Oyk7XG4mIzQzO1xuJiM0MztcdG11dGV4X2Rlc3Ryb3koXHUwMDI2emxkcGxsLVx1MDAzZWxvY2spO1xuJiM0MztcdGtmcmVlKHpsZHBsbCk7XG4mIzQzO31cbiYjNDM7XG4gLyoqXG4gICogemwzMDczeF9kcGxsX3JlZ2lzdGVyIC0gcmVnaXN0ZXIgRFBMTCBkZXZpY2UgYW5kIGFsbCBpdHMgcGluc1xuICAqIEB6bGRwbGw6IHBvaW50ZXIgdG8gemwzMDczeF9kcGxsIHN0cnVjdHVyZVxuQEAgLTI0MjgsNiAmIzQzOzI4MTAsMTMgQEAgemwzMDczeF9kcGxsX3JlZ2lzdGVyKHN0cnVjdCB6bDMwNzN4X2RwbGwgKnpsZHBsbClcbiBcdFx0cmV0dXJuIHJjO1xuIFx0fVxuIFxuJiM0MztcdHJjID0gemwzMDczeF9kcGxsX3B0cF9yZWdpc3Rlcih6bGRwbGwpO1xuJiM0MztcdGlmIChyYykge1xuJiM0MztcdFx0emwzMDczeF9kcGxsX3BpbnNfdW5yZWdpc3Rlcih6bGRwbGwpO1xuJiM0MztcdFx0emwzMDczeF9kcGxsX2RldmljZV91bnJlZ2lzdGVyKHpsZHBsbCk7XG4mIzQzO1x0XHRyZXR1cm4gcmM7XG4mIzQzO1x0fVxuJiM0MztcbiBcdHJldHVybiAwO1xuIH1cbiBcbkBAIC0yNDQxLDcgJiM0MzsyODMwLDcgQEAgemwzMDczeF9kcGxsX3JlZ2lzdGVyKHN0cnVjdCB6bDMwNzN4X2RwbGwgKnpsZHBsbClcbiB2b2lkXG4gemwzMDczeF9kcGxsX3VucmVnaXN0ZXIoc3RydWN0IHpsMzA3M3hfZHBsbCAqemxkcGxsKVxuIHtcbi1cdC8qIFVucmVnaXN0ZXIgYWxsIHBpbnMgYW5kIGRwbGwgKi9cbiYjNDM7XHR6bDMwNzN4X2RwbGxfcHRwX3VucmVnaXN0ZXIoemxkcGxsKTtcbiBcdHpsMzA3M3hfZHBsbF9waW5zX3VucmVnaXN0ZXIoemxkcGxsKTtcbiBcdHpsMzA3M3hfZHBsbF9kZXZpY2VfdW5yZWdpc3Rlcih6bGRwbGwpO1xuIH1cbmRpZmYgLS1naXQgYS9kcml2ZXJzL2RwbGwvemwzMDczeC9kcGxsLmggYi9kcml2ZXJzL2RwbGwvemwzMDczeC9kcGxsLmhcbmluZGV4IGZhZWJjNDAyYmExYjcuLjk5MzIyMWRjNjMyNDkgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL2RwbGwvemwzMDczeC9kcGxsLmhcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvZHBsbC96bDMwNzN4L2RwbGwuaFxuQEAgLTUsNiAmIzQzOzUsNyBAQFxuIFxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2RwbGwuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2xpc3QuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC9wdHBfY2xvY2tfa2VybmVsLmhcdTAwM2VcbiBcbiAjaW5jbHVkZSBcJiMzNDtjb3JlLmhcJiMzNDtcbiBcbkBAIC0yMiw2ICYjNDM7MjMsOCBAQFxuICAqIEB0eXBlOiBEUExMIHR5cGUgKFBQUyBvciBFRUMpXG4gICogQGxvY2tfc3RhdHVzOiBsYXN0IHNhdmVkIERQTEwgbG9jayBzdGF0dXNcbiAgKiBAcGluczogbGlzdCBvZiBwaW5zXG4mIzQzOyAqIEBwdHBfaW5mbzogUFRQIGNsb2NrIGluZm9cbiYjNDM7ICogQHB0cF9jbG9jazogcmVnaXN0ZXJlZCBQVFAgY2xvY2sgKG9yIE5VTEwpXG4gICovXG4gc3RydWN0IHpsMzA3M3hfZHBsbCB7XG4gXHRzdHJ1Y3QgbGlzdF9oZWFkXHRcdGxpc3Q7XG5AQCAtMzYsNiAmIzQzOzM5LDggQEAgc3RydWN0IHpsMzA3M3hfZHBsbCB7XG4gXHRlbnVtIGRwbGxfdHlwZVx0XHRcdHR5cGU7XG4gXHRlbnVtIGRwbGxfbG9ja19zdGF0dXNcdFx0bG9ja19zdGF0dXM7XG4gXHRzdHJ1Y3QgbGlzdF9oZWFkXHRcdHBpbnM7XG4mIzQzO1x0c3RydWN0IHB0cF9jbG9ja19pbmZvXHRcdHB0cF9pbmZvO1xuJiM0MztcdHN0cnVjdCBwdHBfY2xvY2tcdFx0KnB0cF9jbG9jaztcbiB9O1xuIFxuIHN0cnVjdCB6bDMwNzN4X2RwbGwgKnpsMzA3M3hfZHBsbF9hbGxvYyhzdHJ1Y3QgemwzMDczeF9kZXYgKnpsZGV2LCB1OCBjaCk7XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9kcGxsL3psMzA3M3gvcmVncy5oIGIvZHJpdmVycy9kcGxsL3psMzA3M3gvcmVncy5oXG5pbmRleCBiNzBlYWQ3ZDQ0OTViLi5mM2E1ZTEyMTVhYTM2IDEwMDY0NFxuLS0tIGEvZHJpdmVycy9kcGxsL3psMzA3M3gvcmVncy5oXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL2RwbGwvemwzMDczeC9yZWdzLmhcbkBAIC0xNzksNiAmIzQzOzE3OSwyMCBAQFxuICNkZWZpbmUgWkxfRFBMTF9ERl9SRUFEX0NNRFx0XHRcdEdFTk1BU0soMiwgMClcbiAjZGVmaW5lIFpMX0RQTExfREZfUkVBRF9DTURfQUNDX0lcdFx0NFxuIFxuJiM0MzsjZGVmaW5lIFpMX1JFR19EUExMX1RJRV9DVFJMXHRcdFx0WkxfUkVHKDUsIDB4MzAsIDEpXG4mIzQzOyNkZWZpbmUgWkxfRFBMTF9USUVfQ1RSTF9PUFx0XHRcdEdFTk1BU0soMiwgMClcbiYjNDM7I2RlZmluZSBaTF9EUExMX1RJRV9DVFJMX09QX1dSXHRcdFx0NFxuJiM0MztcbiYjNDM7I2RlZmluZSBaTF9SRUdfRFBMTF9USUVfQ1RSTF9NQVNLXHRcdFpMX1JFRyg1LCAweDMxLCAxKVxuJiM0MztcbiYjNDM7I2RlZmluZSBaTF9SRUdfRFBMTF9UT0RfQ1RSTChfaWR4KVx0XHRcdFx0XHRcXFxuJiM0MztcdFpMX1JFR19JRFgoX2lkeCwgNSwgMHgzOCwgMSwgWkwzMDczWF9NQVhfQ0hBTk5FTFMsIDEpXG4mIzQzOyNkZWZpbmUgWkxfRFBMTF9UT0RfQ1RSTF9TRU1cdFx0XHRCSVQoNClcbiYjNDM7I2RlZmluZSBaTF9EUExMX1RPRF9DVFJMX0NNRFx0XHRcdEdFTk1BU0soMywgMClcbiYjNDM7I2RlZmluZSBaTF9EUExMX1RPRF9DVFJMX0NNRF9XUl9ORVhUXzFIWlx0MVxuJiM0MzsjZGVmaW5lIFpMX0RQTExfVE9EX0NUUkxfQ01EX1JEX0NVUlJFTlRcdFx0OFxuJiM0MzsjZGVmaW5lIFpMX0RQTExfVE9EX0NUUkxfQ01EX1JEX05FWFRfMUhaXHQ5XG4mIzQzO1xuICNkZWZpbmUgWkxfUkVHX0RQTExfTUVBU19DVFJMXHRcdFx0WkxfUkVHKDUsIDB4NTAsIDEpXG4gI2RlZmluZSBaTF9EUExMX01FQVNfQ1RSTF9FTlx0XHRcdEJJVCgwKVxuICNkZWZpbmUgWkxfRFBMTF9NRUFTX0NUUkxfQVZHX0ZBQ1RPUlx0XHRHRU5NQVNLKDcsIDQpXG5AQCAtMTkzLDYgJiM0MzsyMDcsOSBAQFxuIFxuIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXG4gICogUmVnaXN0ZXIgUGFnZXMgNi03LCBEUExMIERhdGFcbiYjNDM7ICpcbiYjNDM7ICogUGVyLWNoYW5uZWwgcmVnaXN0ZXJzIHdpdGggc3RyaWRlIDB4MjAuIENoYW5uZWxzIDAtMyByZXNpZGUgb24gcGFnZSA2LFxuJiM0MzsgKiBjaGFubmVsIDQgb24gcGFnZSA3LlxuICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xuIFxuICNkZWZpbmUgWkxfUkVHX0RQTExfREZfT0ZGU0VUXzAzKF9pZHgpXHRcdFx0XHRcdFxcXG5AQCAtMjAyLDYgJiM0MzsyMTksMjQgQEBcbiBcdCgoX2lkeCkgXHUwMDNjIDQgPyBaTF9SRUdfRFBMTF9ERl9PRkZTRVRfMDMoX2lkeCkgOiBaTF9SRUdfRFBMTF9ERl9PRkZTRVRfNClcbiAjZGVmaW5lIFpMX0RQTExfREZfT0ZGU0VUX1VOS05PV05cdFM2NF9NSU5cbiBcbiYjNDM7I2RlZmluZSBaTF9SRUdfRFBMTF9USUVfREFUQV8wMyhfaWR4KVx0XHRcdFx0XHRcXFxuJiM0MztcdFpMX1JFR19JRFgoX2lkeCwgNiwgMHgwQywgNiwgNCwgMHgyMClcbiYjNDM7I2RlZmluZSBaTF9SRUdfRFBMTF9USUVfREFUQV80XHRcdFx0WkxfUkVHKDcsIDB4MEMsIDYpXG4mIzQzOyNkZWZpbmUgWkxfUkVHX0RQTExfVElFX0RBVEEoX2lkeClcdFx0XHRcdFx0XFxcbiYjNDM7XHQoKF9pZHgpIFx1MDAzYyA0ID8gWkxfUkVHX0RQTExfVElFX0RBVEFfMDMoX2lkeCkgOiBaTF9SRUdfRFBMTF9USUVfREFUQV80KVxuJiM0MztcbiYjNDM7I2RlZmluZSBaTF9SRUdfRFBMTF9UT0RfU0VDXzAzKF9pZHgpXHRcdFx0XHRcdFxcXG4mIzQzO1x0WkxfUkVHX0lEWChfaWR4LCA2LCAweDEyLCA2LCA0LCAweDIwKVxuJiM0MzsjZGVmaW5lIFpMX1JFR19EUExMX1RPRF9TRUNfNFx0XHRcdFpMX1JFRyg3LCAweDEyLCA2KVxuJiM0MzsjZGVmaW5lIFpMX1JFR19EUExMX1RPRF9TRUMoX2lkeClcdFx0XHRcdFx0XFxcbiYjNDM7XHQoKF9pZHgpIFx1MDAzYyA0ID8gWkxfUkVHX0RQTExfVE9EX1NFQ18wMyhfaWR4KSA6IFpMX1JFR19EUExMX1RPRF9TRUNfNClcbiYjNDM7XG4mIzQzOyNkZWZpbmUgWkxfUkVHX0RQTExfVE9EX05TXzAzKF9pZHgpXHRcdFx0XHRcdFxcXG4mIzQzO1x0WkxfUkVHX0lEWChfaWR4LCA2LCAweDE4LCA0LCA0LCAweDIwKVxuJiM0MzsjZGVmaW5lIFpMX1JFR19EUExMX1RPRF9OU180XHRcdFx0WkxfUkVHKDcsIDB4MTgsIDQpXG4mIzQzOyNkZWZpbmUgWkxfUkVHX0RQTExfVE9EX05TKF9pZHgpXHRcdFx0XHRcdFxcXG4mIzQzO1x0KChfaWR4KSBcdTAwM2MgNCA/IFpMX1JFR19EUExMX1RPRF9OU18wMyhfaWR4KSA6IFpMX1JFR19EUExMX1RPRF9OU180KVxuJiM0MztcbiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcbiAgKiBSZWdpc3RlciBQYWdlIDksIFN5bnRoIGFuZCBPdXRwdXRcbiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXG5AQCAtMjIxLDYgJiM0MzsyNTYsMjMgQEBcbiAjZGVmaW5lIFpMX09VVFBVVF9DVFJMX0VOXHRcdFx0QklUKDApXG4gI2RlZmluZSBaTF9PVVRQVVRfQ1RSTF9TWU5USF9TRUxcdFx0R0VOTUFTSyg2LCA0KVxuIFxuJiM0MzsjZGVmaW5lIFpMX1JFR19PVVRQVVRfU1RFUF9USU1FX01BU0tcdFx0WkxfUkVHKDksIDB4MzYsIDIpXG4mIzQzO1xuJiM0MzsjZGVmaW5lIFpMX1JFR19PVVRQVVRfUEhBU0VfU1RFUF9DVFJMXHRcdFpMX1JFRyg5LCAweDM4LCAxKVxuJiM0MzsjZGVmaW5lIFpMX09VVFBVVF9QSEFTRV9TVEVQX0NUUkxfRFBMTFx0XHRHRU5NQVNLKDYsIDQpXG4mIzQzOyNkZWZpbmUgWkxfT1VUUFVUX1BIQVNFX1NURVBfQ1RSTF9UT0RfU1RFUFx0QklUKDMpXG4mIzQzOyNkZWZpbmUgWkxfT1VUUFVUX1BIQVNFX1NURVBfQ1RSTF9PUFx0XHRHRU5NQVNLKDEsIDApXG4mIzQzOyNkZWZpbmUgWkxfT1VUUFVUX1BIQVNFX1NURVBfQ1RSTF9PUF9OT05FXHQwXG4mIzQzOyNkZWZpbmUgWkxfT1VUUFVUX1BIQVNFX1NURVBfQ1RSTF9PUF9SRVNFVFx0MVxuJiM0MzsjZGVmaW5lIFpMX09VVFBVVF9QSEFTRV9TVEVQX0NUUkxfT1BfUkVBRFx0MlxuJiM0MzsjZGVmaW5lIFpMX09VVFBVVF9QSEFTRV9TVEVQX0NUUkxfT1BfV1JJVEVcdDNcbiYjNDM7XG4mIzQzOyNkZWZpbmUgWkxfUkVHX09VVFBVVF9QSEFTRV9TVEVQX05VTUJFUlx0XHRaTF9SRUcoOSwgMHgzOSwgMSlcbiYjNDM7XG4mIzQzOyNkZWZpbmUgWkxfUkVHX09VVFBVVF9QSEFTRV9TVEVQX01BU0tcdFx0WkxfUkVHKDksIDB4M2EsIDIpXG4mIzQzO1xuJiM0MzsjZGVmaW5lIFpMX1JFR19PVVRQVVRfUEhBU0VfU1RFUF9EQVRBXHRcdFpMX1JFRyg5LCAweDNjLCA0KVxuJiM0MztcbiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxuICAqIFJlZ2lzdGVyIFBhZ2UgMTAsIFJlZiBNYWlsYm94XG4gICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTEgMTQ6MDI8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+YmVzdC1leHBlbnNpdmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1pMMzA3M1hfSTJDJiMzNDssCiAgICAmIzM0O1pMMzA3M1hfU1BJJiMzNDssCiAgICAmIzM0O1BUUF8xNTg4X0NMT0NLJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7emwzMDczeF9jaGFuX3RvZF9yZWFkJiMzNDssCiAgICAmIzM0O3psMzA3M3hfY2hhbl90b2Rfd3JpdGUmIzM0OywKICAgICYjMzQ7emwzMDczeF9jaGFuX3RvZF9hZGp1c3QmIzM0OywKICAgICYjMzQ7emwzMDczeF9jaGFuX2RmX29mZnNldF9zZXQmIzM0OywKICAgICYjMzQ7emwzMDczeF9jaGFuX3RpZV93cml0ZSYjMzQ7LAogICAgJiMzNDt6bDMwNzN4X2NoYW5fcGhhc2Vfc3RlcCYjMzQ7LAogICAgJiMzNDt6bDMwNzN4X2RwbGxfcHRwX2dldHRpbWV4NjQmIzM0OywKICAgICYjMzQ7emwzMDczeF9kcGxsX3B0cF9zZXR0aW1lNjQmIzM0OywKICAgICYjMzQ7emwzMDczeF9kcGxsX3B0cF9hZGp0aW1lJiMzNDssCiAgICAmIzM0O3psMzA3M3hfZHBsbF9wdHBfYWRqZmluZSYjMzQ7LAogICAgJiMzNDt6bDMwNzN4X2RwbGxfcHRwX2FkanBoYXNlJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHMgUFRQIGNsb2NrIHN1cHBvcnQgdG8gdGhlIE1pY3JvY2hpcCBBenVyaXRlIERQTEwgZHJpdmVyICh6bDMwNzN4KS4gSXQgaW1wbGVtZW50cyBQVFAgY2xvY2sgb3BlcmF0aW9ucyBsaWtlIGdldHRpbWV4NjQsIHNldHRpbWU2NCwgYWRqdGltZSwgYWRqZmluZSwgYW5kIGFkanBoYXNlLiBUaGUgZHJpdmVyIGNhbiBiZSBpbnN0YW50aWF0ZWQgdmlhIEkyQyBvciBTUEkgaW4gUUVNVSwgYW5kIHRoZSBQVFAgb3BlcmF0aW9ucyBhcmUgcmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlIHZpYSBQVFAgaW9jdGxzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmUKaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseQp1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLgoKUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczoKLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLgotIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLgotIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy4KLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsCiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLgotIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLAogIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpCiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLgoKSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaAp0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4KCldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOgoxLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLgogICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4KICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zCiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLgoyLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS4KICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgogICBBbHNvIGNoZWNrICYjMzQ7ZGVwZW5kcyBvbiYjMzQ7IGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncwogICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3MKICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgOTU3ZGNmZDY3MWU4YmM1OTc3MTljMTJjYjJiMzAxZDJmNzQ5ZmVkMQpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBUdWUgQXVnIDExIDE0OjAyOjIyIDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9kcGxsL3psMzA3M3gvS2NvbmZpZyBiL2RyaXZlcnMvZHBsbC96bDMwNzN4L0tjb25maWcKaW5kZXggNWJiY2ExNDAwNTgxMy4uZGExNzMxYWNlMTVmMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9kcGxsL3psMzA3M3gvS2NvbmZpZwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL2RwbGwvemwzMDczeC9LY29uZmlnCkBAIC0yLDcgJiM0MzsyLDcgQEAKIAogY29uZmlnIFpMMzA3M1gKIAl0cmlzdGF0ZSAmIzM0O01pY3JvY2hpcCBBenVyaXRlIERQTEwvUFRQL1N5bmNFIGRldmljZXMmIzM0OyBpZiBDT01QSUxFX1RFU1QKLQlkZXBlbmRzIG9uIE5FVAomIzQzOwlkZXBlbmRzIG9uIE5FVCAmYW1wOyZhbXA7IFBUUF8xNTg4X0NMT0NLCiAJc2VsZWN0IERQTEwKIAlzZWxlY3QgTkVUX0RFVkxJTksKIAlzZWxlY3QgUkVHTUFQCkBAIC0xNiw3ICYjNDM7MTYsNyBAQCBjb25maWcgWkwzMDczWAogCiBjb25maWcgWkwzMDczWF9JMkMKIAl0cmlzdGF0ZSAmIzM0O0kyQyBidXMgaW1wbGVtZW50YXRpb24gZm9yIE1pY3JvY2hpcCBBenVyaXRlIGRldmljZXMmIzM0OwotCWRlcGVuZHMgb24gSTJDICZhbXA7JmFtcDsgTkVUCiYjNDM7CWRlcGVuZHMgb24gSTJDICZhbXA7JmFtcDsgTkVUICZhbXA7JmFtcDsgUFRQXzE1ODhfQ0xPQ0sKIAlzZWxlY3QgUkVHTUFQX0kyQwogCXNlbGVjdCBaTDMwNzNYCiAJaGVscApAQCAtMjgsNyAmIzQzOzI4LDcgQEAgY29uZmlnIFpMMzA3M1hfSTJDCiAKIGNvbmZpZyBaTDMwNzNYX1NQSQogCXRyaXN0YXRlICYjMzQ7U1BJIGJ1cyBpbXBsZW1lbnRhdGlvbiBmb3IgTWljcm9jaGlwIEF6dXJpdGUgZGV2aWNlcyYjMzQ7Ci0JZGVwZW5kcyBvbiBORVQgJmFtcDsmYW1wOyBTUEkKJiM0MzsJZGVwZW5kcyBvbiBORVQgJmFtcDsmYW1wOyBTUEkgJmFtcDsmYW1wOyBQVFBfMTU4OF9DTE9DSwogCXNlbGVjdCBSRUdNQVBfU1BJCiAJc2VsZWN0IFpMMzA3M1gKIAloZWxwCmRpZmYgLS1naXQgYS9kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmMgYi9kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmMKaW5kZXggNGVjMmNmNTNkYWQ0Ni4uYmM2ZDcwZDI1ZDc5MSAxMDA2NDQKLS0tIGEvZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYwpAQCAtMyw2ICYjNDM7Myw3IEBACiAjaW5jbHVkZSAmbHQ7bGludXgvY2xlYW51cC5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L2RlbGF5LmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvZGV2X3ByaW50ay5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9wdHBfY2xvY2tfa2VybmVsLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvc3RyaW5nLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvdHlwZXMuaCZndDsKIApAQCAtMTYyLDggJiM0MzsxNjMsOCBAQCBpbnQgemwzMDczeF9jaGFuX25jb19tb2RlX3NldChzdHJ1Y3QgemwzMDczeF9kZXYgKnpsZGV2LCB1OCBpbmRleCkKICAqIEB6bGRldjogcG9pbnRlciB0byB6bDMwNzN4X2RldiBzdHJ1Y3R1cmUKICAqIEBpbmRleDogRFBMTCBjaGFubmVsIGluZGV4IHRvIGZldGNoIHN0YXRlIGZvcgogICoKLSAqIFJlYWRzIHRoZSBtb2RlX3JlZnNlbCByZWdpc3RlciBhbmQgcmVmZXJlbmNlIHByaW9yaXR5IHJlZ2lzdGVycyBmb3IKLSAqIHRoZSBnaXZlbiBEUExMIGNoYW5uZWwgYW5kIHN0b3JlcyB0aGUgcmF3IHZhbHVlcyBmb3IgbGF0ZXIgdXNlLgomIzQzOyAqIFJlYWRzIHRoZSBtb2RlX3JlZnNlbCwgc3RhdHVzIGFuZCByZWZlcmVuY2UgcHJpb3JpdHkgcmVnaXN0ZXJzIGZvcgomIzQzOyAqIHRoZSBnaXZlbiBEUExMIGNoYW5uZWwgYW5kIHN0b3JlcyB0aGUgdmFsdWVzIGZvciBsYXRlciB1c2UuCiAgKgogICogUmV0dXJuOiAwIG9uIHN1Y2Nlc3MsICZsdDswIG9uIGVycm9yCiAgKi8KQEAgLTIzNCw2ICYjNDM7MjM1LDMyNiBAQCBjb25zdCBzdHJ1Y3QgemwzMDczeF9jaGFuICp6bDMwNzN4X2NoYW5fc3RhdGVfZ2V0KHN0cnVjdCB6bDMwNzN4X2RldiAqemxkZXYsCiAJcmV0dXJuICZhbXA7emxkZXYtJmd0O2NoYW5baW5kZXhdOwogfQogCiYjNDM7LyoqCiYjNDM7ICogemwzMDczeF9jaGFuX3RvZF9yZWFkeV93YWl0IC0gd2FpdCBmb3IgVG9EIHNlbWFwaG9yZSB0byBjbGVhcgomIzQzOyAqIEB6bGRldjogcG9pbnRlciB0byB6bDMwNzN4IGRldmljZQomIzQzOyAqIEBjaDogRFBMTCBjaGFubmVsIGluZGV4CiYjNDM7ICoKJiM0MzsgKiBDaGVja3MgdGhlIFRvRCBjb250cm9sIHJlZ2lzdGVyIHNlbWFwaG9yZSBiaXQuIElmIGNsZWFyLCByZXR1cm5zCiYjNDM7ICogaW1tZWRpYXRlbHkuIE90aGVyd2lzZSBwb2xscyB1bnRpbCB0aGUgYml0IGlzIGNsZWFyZWQgYnkgdGhlIGRldmljZS4KJiM0MzsgKgomIzQzOyAqIFJldHVybjoKJiM0MzsgKiAqIDAJCQktIHN1Y2Nlc3MKJiM0MzsgKiAqICUtRUJVU1kJCS0gdGltZW91dAomIzQzOyAqICogJS1FT1BOT1RTVVBQCS0gdW5rbm93biBjb21tYW5kIGRldGVjdGVkCiYjNDM7ICogKiBuZWdhdGl2ZQkJLSBvdGhlciBlcnJvcgomIzQzOyAqLwomIzQzO2ludCB6bDMwNzN4X2NoYW5fdG9kX3JlYWR5X3dhaXQoc3RydWN0IHpsMzA3M3hfZGV2ICp6bGRldiwgdTggY2gpCiYjNDM7ewomIzQzOwl1bnNpZ25lZCBpbnQgdGltZW91dDsKJiM0MzsJdTggdG9kX2N0cmw7CiYjNDM7CWludCByYzsKJiM0MzsKJiM0MzsJcmMgPSB6bDMwNzN4X3JlYWRfdTgoemxkZXYsIFpMX1JFR19EUExMX1RPRF9DVFJMKGNoKSwgJmFtcDt0b2RfY3RybCk7CiYjNDM7CWlmIChyYykKJiM0MzsJCXJldHVybiByYzsKJiM0MzsKJiM0MzsJaWYgKCEodG9kX2N0cmwgJmFtcDsgWkxfRFBMTF9UT0RfQ1RSTF9TRU0pKQomIzQzOwkJcmV0dXJuIDA7CiYjNDM7CiYjNDM7CXN3aXRjaCAoRklFTERfR0VUKFpMX0RQTExfVE9EX0NUUkxfQ01ELCB0b2RfY3RybCkpIHsKJiM0MzsJY2FzZSBaTF9EUExMX1RPRF9DVFJMX0NNRF9XUl9ORVhUXzFIWjoKJiM0MzsJCXRpbWVvdXQgPSBaTF9QT0xMX1RPRF9XUl9USU1FT1VUX1VTOwomIzQzOwkJYnJlYWs7CiYjNDM7CWNhc2UgWkxfRFBMTF9UT0RfQ1RSTF9DTURfUkRfQ1VSUkVOVDoKJiM0MzsJY2FzZSBaTF9EUExMX1RPRF9DVFJMX0NNRF9SRF9ORVhUXzFIWjoKJiM0MzsJCXRpbWVvdXQgPSBaTF9QT0xMX1RPRF9SRF9USU1FT1VUX1VTOwomIzQzOwkJYnJlYWs7CiYjNDM7CWRlZmF1bHQ6CiYjNDM7CQlXQVJOX09OKDEpOwomIzQzOwkJcmV0dXJuIC1FT1BOT1RTVVBQOwomIzQzOwl9CiYjNDM7CiYjNDM7CXJjID0gemwzMDczeF9wb2xsX3plcm9fdTgoemxkZXYsIFpMX1JFR19EUExMX1RPRF9DVFJMKGNoKSwKJiM0MzsJCQkJICBaTF9EUExMX1RPRF9DVFJMX1NFTSwgdGltZW91dCk7CiYjNDM7CiYjNDM7CXJldHVybiByYyA9PSAtRVRJTUVET1VUID8gLUVCVVNZIDogcmM7CiYjNDM7fQomIzQzOwomIzQzOy8qKgomIzQzOyAqIHpsMzA3M3hfY2hhbl90b2RfY3RybCAtIGlzc3VlIFRvRCBjb21tYW5kCiYjNDM7ICogQHpsZGV2OiBwb2ludGVyIHRvIHpsMzA3M3ggZGV2aWNlCiYjNDM7ICogQGNoOiBEUExMIGNoYW5uZWwgaW5kZXgKJiM0MzsgKiBAY21kOiBUb0QgY29tbWFuZCB0byBleGVjdXRlCiYjNDM7ICoKJiM0MzsgKiBXcml0ZXMgdGhlIHNlbWFwaG9yZSBhbmQgY29tbWFuZCB0byBkcGxsX3RvZF9jdHJsLiBUaGUgY2FsbGVyIG11c3QKJiM0MzsgKiBlbnN1cmUgdGhlIGRldmljZSBpcyByZWFkeSAoc2VtYXBob3JlIGNsZWFyKSBiZWZvcmUgY2FsbGluZyBhbmQKJiM0MzsgKiBtdXN0IHdhaXQgZm9yIGNvbXBsZXRpb24gaWYgbmVlZGVkLgomIzQzOyAqCiYjNDM7ICogUmV0dXJuOiAwIG9uIHN1Y2Nlc3MsICZsdDswIG9uIGVycm9yCiYjNDM7ICovCiYjNDM7c3RhdGljIGludCB6bDMwNzN4X2NoYW5fdG9kX2N0cmwoc3RydWN0IHpsMzA3M3hfZGV2ICp6bGRldiwgdTggY2gsIHU4IGNtZCkKJiM0Mzt7CiYjNDM7CXJldHVybiB6bDMwNzN4X3dyaXRlX3U4KHpsZGV2LCBaTF9SRUdfRFBMTF9UT0RfQ1RSTChjaCksCiYjNDM7CQkJCVpMX0RQTExfVE9EX0NUUkxfU0VNIHwgY21kKTsKJiM0Mzt9CiYjNDM7CiYjNDM7LyoqCiYjNDM7ICogemwzMDczeF9jaGFuX3RvZF9yZWFkIC0gcmVhZCBUb0QgcmVnaXN0ZXJzIGFmdGVyIGlzc3VpbmcgYSBjb21tYW5kCiYjNDM7ICogQHpsZGV2OiBwb2ludGVyIHRvIHpsMzA3M3ggZGV2aWNlCiYjNDM7ICogQGNoOiBEUExMIGNoYW5uZWwgaW5kZXgKJiM0MzsgKiBAbmV4dF9oejogaWYgdHJ1ZSwgcmVhZCBwcmVkaWN0ZWQgVG9EIGF0IG5leHQgMSBIejsgb3RoZXJ3aXNlIHJlYWQgY3VycmVudAomIzQzOyAqIEB0czogdGltZXNwZWMgdG8gc3RvcmUgdGhlIHJlc3VsdAomIzQzOyAqIEBzdHM6IG9wdGlvbmFsIHN5c3RlbSB0aW1lc3RhbXAgcGFpciBmb3IgY3Jvc3MtdGltZXN0YW1waW5nCiYjNDM7ICoKJiM0MzsgKiBDb250ZXh0OiBDYWxsZXIgbXVzdCBzZXJpYWxpemUgYWxsIHpsMzA3M3hfY2hhbl90b2RfKiBjYWxscyBleHRlcm5hbGx5LgomIzQzOyAqIFJldHVybjogMCBvbiBzdWNjZXNzLCAmbHQ7MCBvbiBlcnJvcgomIzQzOyAqLwomIzQzO2ludCB6bDMwNzN4X2NoYW5fdG9kX3JlYWQoc3RydWN0IHpsMzA3M3hfZGV2ICp6bGRldiwgdTggY2gsCiYjNDM7CQkJICBib29sIG5leHRfaHosIHN0cnVjdCB0aW1lc3BlYzY0ICp0cywKJiM0MzsJCQkgIHN0cnVjdCBwdHBfc3lzdGVtX3RpbWVzdGFtcCAqc3RzKQomIzQzO3sKJiM0MzsJdTMyIG5zZWM7CiYjNDM7CXU2NCBzZWM7CiYjNDM7CXU4IGNtZDsKJiM0MzsJaW50IHJjOwomIzQzOwomIzQzOwlpZiAobmV4dF9oeikKJiM0MzsJCWNtZCA9IFpMX0RQTExfVE9EX0NUUkxfQ01EX1JEX05FWFRfMUhaOwomIzQzOwllbHNlCiYjNDM7CQljbWQgPSBaTF9EUExMX1RPRF9DVFJMX0NNRF9SRF9DVVJSRU5UOwomIzQzOwomIzQzOwkvKiBXYWl0IGZvciBhbnkgcHJldmlvdXMgVG9EIG9wZXJhdGlvbiB0byBjb21wbGV0ZSAqLwomIzQzOwlyYyA9IHpsMzA3M3hfY2hhbl90b2RfcmVhZHlfd2FpdCh6bGRldiwgY2gpOwomIzQzOwlpZiAocmMpCiYjNDM7CQlyZXR1cm4gcmM7CiYjNDM7CiYjNDM7CXB0cF9yZWFkX3N5c3RlbV9wcmV0cyhzdHMpOwomIzQzOwlyYyA9IHpsMzA3M3hfY2hhbl90b2RfY3RybCh6bGRldiwgY2gsIGNtZCk7CiYjNDM7CWlmIChyYykKJiM0MzsJCXJldHVybiByYzsKJiM0MzsKJiM0MzsJcmMgPSB6bDMwNzN4X2NoYW5fdG9kX3JlYWR5X3dhaXQoemxkZXYsIGNoKTsKJiM0MzsJaWYgKHJjKQomIzQzOwkJcmV0dXJuIHJjOwomIzQzOwlwdHBfcmVhZF9zeXN0ZW1fcG9zdHRzKHN0cyk7CiYjNDM7CiYjNDM7CXJjID0gemwzMDczeF9yZWFkX3U0OCh6bGRldiwgWkxfUkVHX0RQTExfVE9EX1NFQyhjaCksICZhbXA7c2VjKTsKJiM0MzsJaWYgKHJjKQomIzQzOwkJcmV0dXJuIHJjOwomIzQzOwomIzQzOwkvKiBIVyBuYW5vc2Vjb25kcyBhcmUgYWx3YXlzIGluIFswLCBOU0VDX1BFUl9TRUMpIHJhbmdlICovCiYjNDM7CXJjID0gemwzMDczeF9yZWFkX3UzMih6bGRldiwgWkxfUkVHX0RQTExfVE9EX05TKGNoKSwgJmFtcDtuc2VjKTsKJiM0MzsJaWYgKHJjKQomIzQzOwkJcmV0dXJuIHJjOwomIzQzOwomIzQzOwl0cy0mZ3Q7dHZfc2VjID0gc2VjOwomIzQzOwl0cy0mZ3Q7dHZfbnNlYyA9IG5zZWM7CiYjNDM7CiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MzsKJiM0MzsvKioKJiM0MzsgKiB6bDMwNzN4X2NoYW5fdG9kX3dyaXRlIC0gd3JpdGUgVG9EIHJlZ2lzdGVycyBhbmQgdHJpZ2dlciAxIEh6IHVwZGF0ZQomIzQzOyAqIEB6bGRldjogcG9pbnRlciB0byB6bDMwNzN4IGRldmljZQomIzQzOyAqIEBjaDogRFBMTCBjaGFubmVsIGluZGV4CiYjNDM7ICogQHRzOiB0aW1lIHRvIHNldAomIzQzOyAqCiYjNDM7ICogQ29udGV4dDogQ2FsbGVyIG11c3Qgc2VyaWFsaXplIGFsbCB6bDMwNzN4X2NoYW5fdG9kXyogY2FsbHMgZXh0ZXJuYWxseS4KJiM0MzsgKiBSZXR1cm46IDAgb24gc3VjY2VzcywgJmx0OzAgb24gZXJyb3IKJiM0MzsgKi8KJiM0MztpbnQgemwzMDczeF9jaGFuX3RvZF93cml0ZShzdHJ1Y3QgemwzMDczeF9kZXYgKnpsZGV2LCB1OCBjaCwKJiM0MzsJCQkgICBzdHJ1Y3QgdGltZXNwZWM2NCB0cykKJiM0Mzt7CiYjNDM7CWludCByYzsKJiM0MzsKJiM0MzsJLyogV2FpdCBmb3IgYW55IHByZXZpb3VzIFRvRCBvcGVyYXRpb24gdG8gY29tcGxldGUgKi8KJiM0MzsJcmMgPSB6bDMwNzN4X2NoYW5fdG9kX3JlYWR5X3dhaXQoemxkZXYsIGNoKTsKJiM0MzsJaWYgKHJjKQomIzQzOwkJcmV0dXJuIHJjOwomIzQzOwomIzQzOwlyYyA9IHpsMzA3M3hfd3JpdGVfdTQ4KHpsZGV2LCBaTF9SRUdfRFBMTF9UT0RfU0VDKGNoKSwgdHMudHZfc2VjKTsKJiM0MzsJaWYgKHJjKQomIzQzOwkJcmV0dXJuIHJjOwomIzQzOwomIzQzOwlyYyA9IHpsMzA3M3hfd3JpdGVfdTMyKHpsZGV2LCBaTF9SRUdfRFBMTF9UT0RfTlMoY2gpLCB0cy50dl9uc2VjKTsKJiM0MzsJaWYgKHJjKQomIzQzOwkJcmV0dXJuIHJjOwomIzQzOwomIzQzOwlyZXR1cm4gemwzMDczeF9jaGFuX3RvZF9jdHJsKHpsZGV2LCBjaCwKJiM0MzsJCQkJICAgICBaTF9EUExMX1RPRF9DVFJMX0NNRF9XUl9ORVhUXzFIWik7CiYjNDM7fQomIzQzOwomIzQzOy8qKgomIzQzOyAqIHpsMzA3M3hfY2hhbl90b2RfYWRqdXN0IC0gYXRvbWljIFRvRCByZWFkLW1vZGlmeS13cml0ZSB3aXRoIHJvbGxvdmVyIGd1YXJkCiYjNDM7ICogQHpsZGV2OiBwb2ludGVyIHRvIHpsMzA3M3ggZGV2aWNlCiYjNDM7ICogQGNoOiBEUExMIGNoYW5uZWwgaW5kZXgKJiM0MzsgKiBAZGVsdGE6IHRpbWUgYWRqdXN0bWVudCB0byBhcHBseQomIzQzOyAqCiYjNDM7ICogUmVhZHMgdGhlIG5leHQtSHogVG9EIGFuZCBjdXJyZW50IFRvRCwgdGhlbiBjaGVja3Mgd2hldGhlciBlbm91Z2ggdGltZQomIzQzOyAqIHJlbWFpbnMgYmVmb3JlIHRoZSBuZXh0IDEgSHogcm9sbG92ZXIgdG8gc2FmZWx5IGNvbXBsZXRlIHRoZSB3cml0ZS4KJiM0MzsgKiBSZS1yZWFkcyBpZiB0aGUgMSBIeiB0aWNrIGNyb3NzZWQgYmV0d2VlbiB0aGUgdHdvIHJlYWRzIG9yIGlmIGxlc3MKJiM0MzsgKiB0aGFuIDIwIG1zIHJlbWFpbnMgYmVmb3JlIHRoZSBuZXh0IHJvbGxvdmVyLiBBcHBsaWVzIEBkZWx0YSBhbmQgd3JpdGVzCiYjNDM7ICogdGhlIHJlc3VsdCBiYWNrLgomIzQzOyAqCiYjNDM7ICogQ29udGV4dDogQ2FsbGVyIG11c3Qgc2VyaWFsaXplIGFsbCB6bDMwNzN4X2NoYW5fdG9kXyogY2FsbHMgZXh0ZXJuYWxseS4KJiM0MzsgKiBSZXR1cm46IDAgb24gc3VjY2VzcywgJmx0OzAgb24gZXJyb3IKJiM0MzsgKi8KJiM0MztpbnQgemwzMDczeF9jaGFuX3RvZF9hZGp1c3Qoc3RydWN0IHpsMzA3M3hfZGV2ICp6bGRldiwgdTggY2gsCiYjNDM7CQkJICAgIHN0cnVjdCB0aW1lc3BlYzY0IGRlbHRhKQomIzQzO3sKJiM0MzsjZGVmaW5lIFpMX1RPRF9NQVhfUkVUUklFUwkyMAomIzQzOwlzdGF0aWMgY29uc3QgbG9uZyB0aHJlc2hvbGRfbnMgPSAyMCAqIE5TRUNfUEVSX01TRUM7CiYjNDM7CXN0cnVjdCB0aW1lc3BlYzY0IHRzX25leHQsIHRzX2N1ciwgZGlmZjsKJiM0MzsJaW50IHJjLCBpOwomIzQzOwomIzQzOwlmb3IgKGkgPSAwOyBpICZsdDsgWkxfVE9EX01BWF9SRVRSSUVTOyBpJiM0MzsmIzQzOykgewomIzQzOwkJcmMgPSB6bDMwNzN4X2NoYW5fdG9kX3JlYWQoemxkZXYsIGNoLCB0cnVlLCAmYW1wO3RzX25leHQsIE5VTEwpOwomIzQzOwkJaWYgKHJjKQomIzQzOwkJCXJldHVybiByYzsKJiM0MzsKJiM0MzsJCXJjID0gemwzMDczeF9jaGFuX3RvZF9yZWFkKHpsZGV2LCBjaCwgZmFsc2UsICZhbXA7dHNfY3VyLCBOVUxMKTsKJiM0MzsJCWlmIChyYykKJiM0MzsJCQlyZXR1cm4gcmM7CiYjNDM7CiYjNDM7CQkvKiBFbnN1cmUgdGhlIDEgSHogdGljayBkaWQgbm90IGNyb3NzIGJldHdlZW4gdGhlIHR3byByZWFkcwomIzQzOwkJICogYW5kIHRoYXQgZW5vdWdoIG1hcmdpbiByZW1haW5zIHRvIGNvbXBsZXRlIHRoZSB3cml0ZS4KJiM0MzsJCSAqLwomIzQzOwkJZGlmZiA9IHRpbWVzcGVjNjRfc3ViKHRzX25leHQsIHRzX2N1cik7CiYjNDM7CQlpZiAoZGlmZi50dl9zZWMgJmd0OyAwIHx8CiYjNDM7CQkgICAgKCFkaWZmLnR2X3NlYyAmYW1wOyZhbXA7IGRpZmYudHZfbnNlYyAmZ3Q7PSB0aHJlc2hvbGRfbnMpKQomIzQzOwkJCWJyZWFrOwomIzQzOwl9CiYjNDM7CWlmIChpID09IFpMX1RPRF9NQVhfUkVUUklFUykgewomIzQzOwkJZGV2X3dhcm4oemxkZXYtJmd0O2RldiwKJiM0MzsJCQkgJiMzNDtEUExMJXUgVG9EIGFkanVzdCBmYWlsZWQgdG8gZ2V0IHN0YWJsZSBtYXJnaW5cbiYjMzQ7LAomIzQzOwkJCSBjaCk7CiYjNDM7CQlyZXR1cm4gLUVCVVNZOwomIzQzOwl9CiYjNDM7CiYjNDM7CS8qIEFwcGx5IGRlbHRhIHRvIHRoZSBuZXh0LUh6IFRvRCAqLwomIzQzOwl0c19uZXh0ID0gdGltZXNwZWM2NF9hZGQodHNfbmV4dCwgZGVsdGEpOwomIzQzOwlpZiAoIXRpbWVzcGVjNjRfdmFsaWQoJmFtcDt0c19uZXh0KSkKJiM0MzsJCXJldHVybiAtRUlOVkFMOwomIzQzOwomIzQzOwlyZXR1cm4gemwzMDczeF9jaGFuX3RvZF93cml0ZSh6bGRldiwgY2gsIHRzX25leHQpOwomIzQzOyN1bmRlZiBaTF9UT0RfTUFYX1JFVFJJRVMKJiM0Mzt9CiYjNDM7CiYjNDM7LyoqCiYjNDM7ICogemwzMDczeF9jaGFuX2RmX29mZnNldF9zZXQgLSB3cml0ZSBkZWx0YSBmcmVxdWVuY3kgb2Zmc2V0IHRvIGhhcmR3YXJlCiYjNDM7ICogQHpsZGV2OiBwb2ludGVyIHRvIHpsMzA3M3ggZGV2aWNlCiYjNDM7ICogQGNoOiBEUExMIGNoYW5uZWwgaW5kZXgKJiM0MzsgKiBAb2Zmc2V0OiBmcmVxdWVuY3kgb2Zmc2V0IGluIDJeLTQ4IHN0ZXBzCiYjNDM7ICoKJiM0MzsgKiBDb250ZXh0OiBDYWxsZXIgbXVzdCBob2xkIHRoZSBwZXItRFBMTCBsb2NrLgomIzQzOyAqIFJldHVybjogMCBvbiBzdWNjZXNzLCAmbHQ7MCBvbiBlcnJvcgomIzQzOyAqLwomIzQzO2ludCB6bDMwNzN4X2NoYW5fZGZfb2Zmc2V0X3NldChzdHJ1Y3QgemwzMDczeF9kZXYgKnpsZGV2LCB1OCBjaCwgczY0IG9mZnNldCkKJiM0Mzt7CiYjNDM7CWludCByYzsKJiM0MzsKJiM0MzsJcmMgPSB6bDMwNzN4X3dyaXRlX3U0OCh6bGRldiwgWkxfUkVHX0RQTExfREZfT0ZGU0VUKGNoKSwgb2Zmc2V0KTsKJiM0MzsJaWYgKCFyYykKJiM0MzsJCXpsZGV2LSZndDtjaGFuW2NoXS5kZl9vZmZzZXQgPSBvZmZzZXQ7CiYjNDM7CiYjNDM7CXJldHVybiByYzsKJiM0Mzt9CiYjNDM7CiYjNDM7LyoqCiYjNDM7ICogemwzMDczeF9jaGFuX3RpZV93cml0ZSAtIGFkanVzdCBEUExMIHBoYXNlIHVzaW5nIFRJRSB3cml0ZQomIzQzOyAqIEB6bGRldjogcG9pbnRlciB0byB6bDMwNzN4IGRldmljZQomIzQzOyAqIEBjaDogRFBMTCBjaGFubmVsIGluZGV4CiYjNDM7ICogQGRlbHRhX25zOiBwaGFzZSBhZGp1c3RtZW50IGluIG5hbm9zZWNvbmRzIChtdXN0IGJlIGluICgtMXMsIDFzKSkKJiM0MzsgKgomIzQzOyAqIENvbnZlcnRzIG5hbm9zZWNvbmRzIHRvIFRJRSB1bml0cyAoMC4wMSBwcykgYW5kIHdyaXRlcyBUSUUgZGF0YQomIzQzOyAqIHRvIHRoZSBzcGVjaWZpZWQgY2hhbm5lbC4KJiM0MzsgKgomIzQzOyAqIFJldHVybjogMCBvbiBzdWNjZXNzLCAmbHQ7MCBvbiBlcnJvcgomIzQzOyAqLwomIzQzO2ludCB6bDMwNzN4X2NoYW5fdGllX3dyaXRlKHN0cnVjdCB6bDMwNzN4X2RldiAqemxkZXYsIHU4IGNoLCBzNjQgZGVsdGFfbnMpCiYjNDM7ewomIzQzOwlzNjQgdGllX2RhdGE7CiYjNDM7CWludCByYzsKJiM0MzsKJiM0MzsJaWYgKFdBUk5fT04oZGVsdGFfbnMgJmx0Oz0gLU5TRUNfUEVSX1NFQyB8fCBkZWx0YV9ucyAmZ3Q7PSBOU0VDX1BFUl9TRUMpKQomIzQzOwkJcmV0dXJuIC1FUkFOR0U7CiYjNDM7CiYjNDM7CWd1YXJkKG11dGV4KSgmYW1wO3psZGV2LSZndDt0aWVfbG9jayk7CiYjNDM7CiYjNDM7CS8qIFdhaXQgZm9yIGFueSBwcmV2aW91cyBUSUUgb3BlcmF0aW9uIHRvIGNvbXBsZXRlICovCiYjNDM7CXJjID0gemwzMDczeF9wb2xsX3plcm9fdTgoemxkZXYsIFpMX1JFR19EUExMX1RJRV9DVFJMLAomIzQzOwkJCQkgIFpMX0RQTExfVElFX0NUUkxfT1AsCiYjNDM7CQkJCSAgWkxfUE9MTF9USUVfV1JfVElNRU9VVF9VUyk7CiYjNDM7CWlmIChyYykKJiM0MzsJCXJldHVybiByYzsKJiM0MzsKJiM0MzsJLyogQ29udmVydCBucyB0byBUSUUgdW5pdHMgKDAuMDEgcHMgPSAxMF4tMTQgcykgKi8KJiM0MzsJdGllX2RhdGEgPSBkZWx0YV9ucyAqIDEwMDAwMExMOwomIzQzOwomIzQzOwlyYyA9IHpsMzA3M3hfd3JpdGVfdTQ4KHpsZGV2LCBaTF9SRUdfRFBMTF9USUVfREFUQShjaCksIHRpZV9kYXRhKTsKJiM0MzsJaWYgKHJjKQomIzQzOwkJcmV0dXJuIHJjOwomIzQzOwomIzQzOwlyYyA9IHpsMzA3M3hfd3JpdGVfdTgoemxkZXYsIFpMX1JFR19EUExMX1RJRV9DVFJMX01BU0ssIEJJVChjaCkpOwomIzQzOwlpZiAocmMpCiYjNDM7CQlyZXR1cm4gcmM7CiYjNDM7CiYjNDM7CXJldHVybiB6bDMwNzN4X3dyaXRlX3U4KHpsZGV2LCBaTF9SRUdfRFBMTF9USUVfQ1RSTCwKJiM0MzsJCQkJWkxfRFBMTF9USUVfQ1RSTF9PUF9XUik7CiYjNDM7fQomIzQzOwomIzQzOy8qKgomIzQzOyAqIHpsMzA3M3hfY2hhbl9waGFzZV9zdGVwIC0gZXhlY3V0ZSBvbmUgb3V0cHV0IHBoYXNlIHN0ZXAgb3BlcmF0aW9uCiYjNDM7ICogQHpsZGV2OiBwb2ludGVyIHRvIHpsMzA3M3ggZGV2aWNlCiYjNDM7ICogQGNoOiBEUExMIGNoYW5uZWwgaW5kZXgKJiM0MzsgKiBAb3V0X21hc2s6IGJpdG1hc2sgb2Ygb3V0cHV0cyB0byBzdGVwCiYjNDM7ICogQHN0ZXBfY3ljbGVzOiBwaGFzZSBzdGVwIGluIHN5bnRoZXNpemVyIGNsb2NrIGN5Y2xlcwomIzQzOyAqIEB0b2Rfc3RlcDogYWxzbyBzdGVwIHRoZSBUb0QgY291bnRlcgomIzQzOyAqCiYjNDM7ICogQWxsIG1hc2tlZCBvdXRwdXRzIG11c3QgdXNlIHN5bnRoZXNpemVycyBvZiB0aGUgc2FtZSBmcmVxdWVuY3kgc2luY2UKJiM0MzsgKiB0aGUgc3RlcCB2YWx1ZSBpcyBpbiBzeW50aGVzaXplciBjbG9jayBjeWNsZXMuCiYjNDM7ICoKJiM0MzsgKiBSZXR1cm46IDAgb24gc3VjY2VzcywgJmx0OzAgb24gZXJyb3IKJiM0MzsgKi8KJiM0MztpbnQgemwzMDczeF9jaGFuX3BoYXNlX3N0ZXAoc3RydWN0IHpsMzA3M3hfZGV2ICp6bGRldiwgdTggY2gsCiYjNDM7CQkJICAgIHUxNiBvdXRfbWFzaywgczMyIHN0ZXBfY3ljbGVzLAomIzQzOwkJCSAgICBib29sIHRvZF9zdGVwKQomIzQzO3sKJiM0MzsJdTggY3RybDsKJiM0MzsJaW50IHJjOwomIzQzOwomIzQzOwlndWFyZChtdXRleCkoJmFtcDt6bGRldi0mZ3Q7cGhhc2Vfc3RlcF9sb2NrKTsKJiM0MzsKJiM0MzsJLyogV2FpdCBmb3IgYW55IHByZXZpb3VzIHBoYXNlIHN0ZXAgb3BlcmF0aW9uIHRvIGNvbXBsZXRlICovCiYjNDM7CXJjID0gemwzMDczeF9wb2xsX3plcm9fdTgoemxkZXYsIFpMX1JFR19PVVRQVVRfUEhBU0VfU1RFUF9DVFJMLAomIzQzOwkJCQkgIFpMX09VVFBVVF9QSEFTRV9TVEVQX0NUUkxfT1AsCiYjNDM7CQkJCSAgWkxfUE9MTF9QSEFTRV9TVEVQX1RJTUVPVVRfVVMpOwomIzQzOwlpZiAocmMpCiYjNDM7CQlyZXR1cm4gcmM7CiYjNDM7CiYjNDM7CXJjID0gemwzMDczeF93cml0ZV91MzIoemxkZXYsIFpMX1JFR19PVVRQVVRfUEhBU0VfU1RFUF9EQVRBLAomIzQzOwkJCSAgICAgICBzdGVwX2N5Y2xlcyk7CiYjNDM7CWlmIChyYykKJiM0MzsJCXJldHVybiByYzsKJiM0MzsKJiM0MzsJcmMgPSB6bDMwNzN4X3dyaXRlX3UxNih6bGRldiwgWkxfUkVHX09VVFBVVF9QSEFTRV9TVEVQX01BU0ssIG91dF9tYXNrKTsKJiM0MzsJaWYgKHJjKQomIzQzOwkJcmV0dXJuIHJjOwomIzQzOwomIzQzOwlyYyA9IHpsMzA3M3hfd3JpdGVfdTgoemxkZXYsIFpMX1JFR19PVVRQVVRfUEhBU0VfU1RFUF9OVU1CRVIsIDEpOwomIzQzOwlpZiAocmMpCiYjNDM7CQlyZXR1cm4gcmM7CiYjNDM7CiYjNDM7CWN0cmwgPSBGSUVMRF9QUkVQKFpMX09VVFBVVF9QSEFTRV9TVEVQX0NUUkxfRFBMTCwgY2gpIHwKJiM0MzsJICAgICAgIEZJRUxEX1BSRVAoWkxfT1VUUFVUX1BIQVNFX1NURVBfQ1RSTF9PUCwKJiM0MzsJCQkgIFpMX09VVFBVVF9QSEFTRV9TVEVQX0NUUkxfT1BfV1JJVEUpOwomIzQzOwlpZiAodG9kX3N0ZXApCiYjNDM7CQljdHJsIHw9IFpMX09VVFBVVF9QSEFTRV9TVEVQX0NUUkxfVE9EX1NURVA7CiYjNDM7CiYjNDM7CXJldHVybiB6bDMwNzN4X3dyaXRlX3U4KHpsZGV2LCBaTF9SRUdfT1VUUFVUX1BIQVNFX1NURVBfQ1RSTCwgY3RybCk7CiYjNDM7fQomIzQzOwogLyoqCiAgKiB6bDMwNzN4X2NoYW5fc3RhdGVfc2V0IC0gY29tbWl0IERQTEwgY2hhbm5lbCBzdGF0ZSBjaGFuZ2VzIHRvIGhhcmR3YXJlCiAgKiBAemxkZXY6IHBvaW50ZXIgdG8gemwzMDczeF9kZXYgc3RydWN0dXJlCmRpZmYgLS1naXQgYS9kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmggYi9kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmgKaW5kZXggZGM5YzZkOTViZGVlNy4uOTljM2I3MDg4ZjY3OCAxMDA2NDQKLS0tIGEvZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5oCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uaApAQCAtNSwxMCAmIzQzOzUsMTIgQEAKIAogI2luY2x1ZGUgJmx0O2xpbnV4L2JpdGZpZWxkLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvc3RkZGVmLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L3RpbWU2NC5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L3R5cGVzLmgmZ3Q7CiAKICNpbmNsdWRlICYjMzQ7cmVncy5oJiMzNDsKIAomIzQzO3N0cnVjdCBwdHBfc3lzdGVtX3RpbWVzdGFtcDsKIHN0cnVjdCB6bDMwNzN4X2RldjsKIAogLyoqCkBAIC00Miw2ICYjNDM7NDQsMjEgQEAgaW50IHpsMzA3M3hfY2hhbl9zdGF0ZV9zZXQoc3RydWN0IHpsMzA3M3hfZGV2ICp6bGRldiwgdTggaW5kZXgsCiBpbnQgemwzMDczeF9jaGFuX3N0YXRlX3VwZGF0ZShzdHJ1Y3QgemwzMDczeF9kZXYgKnpsZGV2LCB1OCBpbmRleCk7CiBpbnQgemwzMDczeF9jaGFuX25jb19tb2RlX3NldChzdHJ1Y3QgemwzMDczeF9kZXYgKnpsZGV2LCB1OCBpbmRleCk7CiAKJiM0MztpbnQgemwzMDczeF9jaGFuX3RvZF9yZWFkeV93YWl0KHN0cnVjdCB6bDMwNzN4X2RldiAqemxkZXYsIHU4IGNoKTsKJiM0MztpbnQgemwzMDczeF9jaGFuX3RvZF9yZWFkKHN0cnVjdCB6bDMwNzN4X2RldiAqemxkZXYsIHU4IGNoLAomIzQzOwkJCSAgYm9vbCBuZXh0X2h6LCBzdHJ1Y3QgdGltZXNwZWM2NCAqdHMsCiYjNDM7CQkJICBzdHJ1Y3QgcHRwX3N5c3RlbV90aW1lc3RhbXAgKnN0cyk7CiYjNDM7aW50IHpsMzA3M3hfY2hhbl90b2Rfd3JpdGUoc3RydWN0IHpsMzA3M3hfZGV2ICp6bGRldiwgdTggY2gsCiYjNDM7CQkJICAgc3RydWN0IHRpbWVzcGVjNjQgdHMpOwomIzQzO2ludCB6bDMwNzN4X2NoYW5fdG9kX2FkanVzdChzdHJ1Y3QgemwzMDczeF9kZXYgKnpsZGV2LCB1OCBjaCwKJiM0MzsJCQkgICAgc3RydWN0IHRpbWVzcGVjNjQgZGVsdGEpOwomIzQzO2ludCB6bDMwNzN4X2NoYW5fcGhhc2Vfc3RlcChzdHJ1Y3QgemwzMDczeF9kZXYgKnpsZGV2LCB1OCBjaCwKJiM0MzsJCQkgICAgdTE2IG91dF9tYXNrLCBzMzIgc3RlcF9jeWNsZXMsIGJvb2wgdG9kX3N0ZXApOwomIzQzOwomIzQzO2ludCB6bDMwNzN4X2NoYW5fZGZfb2Zmc2V0X3NldChzdHJ1Y3QgemwzMDczeF9kZXYgKnpsZGV2LCB1OCBjaCwgczY0IG9mZnNldCk7CiYjNDM7CiYjNDM7aW50IHpsMzA3M3hfY2hhbl90aWVfd3JpdGUoc3RydWN0IHpsMzA3M3hfZGV2ICp6bGRldiwgdTggY2gsIHM2NCBkZWx0YV9ucyk7CiYjNDM7CiAvKioKICAqIHpsMzA3M3hfY2hhbl9kZl9vZmZzZXRfZ2V0IC0gZ2V0IGNhY2hlZCBkZl9vZmZzZXQgdnMgdHJhY2tlZCByZWZlcmVuY2UKICAqIEBjaGFuOiBwb2ludGVyIHRvIGNoYW5uZWwgc3RhdGUKQEAgLTIwMCw2ICYjNDM7MjE3LDIxIEBAIHN0YXRpYyBpbmxpbmUgYm9vbCB6bDMwNzN4X2NoYW5fbW9kZV9pc19yZWZsb2NrKGNvbnN0IHN0cnVjdCB6bDMwNzN4X2NoYW4gKmNoYW4pCiAJcmV0dXJuIHpsMzA3M3hfY2hhbl9tb2RlX2dldChjaGFuKSA9PSBaTF9EUExMX01PREVfUkVGU0VMX01PREVfUkVGTE9DSzsKIH0KIAomIzQzOy8qKgomIzQzOyAqIHpsMzA3M3hfY2hhbl9tb2RlX3N1cHBvcnRzX3RpZSAtIGNoZWNrIGlmIGNoYW5uZWwgbW9kZSBzdXBwb3J0cyBUSUUgd3JpdGUKJiM0MzsgKiBAY2hhbjogcG9pbnRlciB0byBjaGFubmVsIHN0YXRlCiYjNDM7ICoKJiM0MzsgKiBUSUUgd3JpdGUgaXMgc3VwcG9ydGVkIGluIEFVVE8gYW5kIFJFRkxPQ0sgbW9kZXMgcmVnYXJkbGVzcyBvZiBsb2NrIHN0YXRlLgomIzQzOyAqCiYjNDM7ICogUmV0dXJuOiB0cnVlIGlmIFRJRSB3cml0ZSBpcyBzdXBwb3J0ZWQsIGZhbHNlIG90aGVyd2lzZQomIzQzOyAqLwomIzQzO3N0YXRpYyBpbmxpbmUgYm9vbAomIzQzO3psMzA3M3hfY2hhbl9tb2RlX3N1cHBvcnRzX3RpZShjb25zdCBzdHJ1Y3QgemwzMDczeF9jaGFuICpjaGFuKQomIzQzO3sKJiM0MzsJcmV0dXJuIHpsMzA3M3hfY2hhbl9tb2RlX2lzX2F1dG8oY2hhbikgfHwKJiM0MzsJCXpsMzA3M3hfY2hhbl9tb2RlX2lzX3JlZmxvY2soY2hhbik7CiYjNDM7fQomIzQzOwogLyoqCiAgKiB6bDMwNzN4X2NoYW5faXNfaG9fcmVhZHkgLSBjaGVjayBpZiBob2xkb3ZlciBpcyByZWFkeQogICogQGNoYW46IHBvaW50ZXIgdG8gY2hhbm5lbCBzdGF0ZQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9kcGxsL3psMzA3M3gvY29yZS5jIGIvZHJpdmVycy9kcGxsL3psMzA3M3gvY29yZS5jCmluZGV4IDViMmQ3N2YyYzIyODguLjIzMGRmMDhlMjdjZDEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZHBsbC96bDMwNzN4L2NvcmUuYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL2RwbGwvemwzMDczeC9jb3JlLmMKQEAgLTMyMiw3ICYjNDM7MzIyLDcgQEAgaW50IHpsMzA3M3hfd3JpdGVfdTQ4KHN0cnVjdCB6bDMwNzN4X2RldiAqemxkZXYsIHVuc2lnbmVkIGludCByZWcsIHU2NCB2YWwpCiBpbnQgemwzMDczeF9wb2xsX3plcm9fdTgoc3RydWN0IHpsMzA3M3hfZGV2ICp6bGRldiwgdW5zaWduZWQgaW50IHJlZywKIAkJCSB1OCBtYXNrLCB1bnNpZ25lZCBpbnQgdGltZW91dF91cykKIHsKLSNkZWZpbmUgWkxfUE9MTF9TTEVFUF9VUyAxMAomIzQzOwl1bnNpZ25lZCBpbnQgc2xlZXBfdXMgPSB0aW1lb3V0X3VzIC8gNTA7CiAJdW5zaWduZWQgaW50IHZhbDsKIAogCS8qIENoZWNrIHRoZSByZWdpc3RlciBpcyA4Yml0ICovCkBAIC0zMzYsNyAmIzQzOzMzNiw3IEBAIGludCB6bDMwNzN4X3BvbGxfemVyb191OChzdHJ1Y3QgemwzMDczeF9kZXYgKnpsZGV2LCB1bnNpZ25lZCBpbnQgcmVnLAogCXJlZyA9IFpMX1JFR19BRERSKHJlZykgJiM0MzsgWkxfUkFOR0VfT0ZGU0VUOwogCiAJcmV0dXJuIHJlZ21hcF9yZWFkX3BvbGxfdGltZW91dCh6bGRldi0mZ3Q7cmVnbWFwLCByZWcsIHZhbCwgISh2YWwgJmFtcDsgbWFzayksCi0JCQkJCVpMX1BPTExfU0xFRVBfVVMsIHRpbWVvdXRfdXMpOwomIzQzOwkJCQkJc2xlZXBfdXMsIHRpbWVvdXRfdXMpOwogfQogCiBpbnQgemwzMDczeF9tYl9vcChzdHJ1Y3QgemwzMDczeF9kZXYgKnpsZGV2LCB1bnNpZ25lZCBpbnQgb3BfcmVnLCB1OCBvcF92YWwsCkBAIC01MTEsNiAmIzQzOzUxMSwxMSBAQCB6bDMwNzN4X2Rldl9zdGF0ZV9mZXRjaChzdHJ1Y3QgemwzMDczeF9kZXYgKnpsZGV2KQogCWludCByYzsKIAl1OCBpOwogCiYjNDM7CXJjID0gemwzMDczeF9yZWFkX3UxNih6bGRldiwgWkxfUkVHX09VVFBVVF9TVEVQX1RJTUVfTUFTSywKJiM0MzsJCQkgICAgICAmYW1wO3psZGV2LSZndDtvdXRfc3RlcF90aW1lX21hc2spOwomIzQzOwlpZiAocmMpCiYjNDM7CQlyZXR1cm4gcmM7CiYjNDM7CiAJZm9yIChpID0gMDsgaSAmbHQ7IFpMMzA3M1hfTlVNX1JFRlM7IGkmIzQzOyYjNDM7KSB7CiAJCXJjID0gemwzMDczeF9yZWZfc3RhdGVfZmV0Y2goemxkZXYsIGkpOwogCQlpZiAocmMpIHsKQEAgLTEwMzQsNiAmIzQzOzEwMzksMTQgQEAgaW50IHpsMzA3M3hfZGV2X3Byb2JlKHN0cnVjdCB6bDMwNzN4X2RldiAqemxkZXYpCiAJICogYW5kL29yIHBvbGxzIGFyZSByZXF1aXJlZCB0byBiZSBkb25lIGF0b21pY2FsbHkuCiAJICovCiAJcmMgPSBkZXZtX211dGV4X2luaXQoemxkZXYtJmd0O2RldiwgJmFtcDt6bGRldi0mZ3Q7bXVsdGlvcF9sb2NrKTsKJiM0MzsJaWYgKHJjKQomIzQzOwkJcmV0dXJuIGRldl9lcnJfcHJvYmUoemxkZXYtJmd0O2RldiwgcmMsCiYjNDM7CQkJCSAgICAgJiMzNDtGYWlsZWQgdG8gaW5pdGlhbGl6ZSBtdXRleFxuJiMzNDspOwomIzQzOwlyYyA9IGRldm1fbXV0ZXhfaW5pdCh6bGRldi0mZ3Q7ZGV2LCAmYW1wO3psZGV2LSZndDtwaGFzZV9zdGVwX2xvY2spOwomIzQzOwlpZiAocmMpCiYjNDM7CQlyZXR1cm4gZGV2X2Vycl9wcm9iZSh6bGRldi0mZ3Q7ZGV2LCByYywKJiM0MzsJCQkJICAgICAmIzM0O0ZhaWxlZCB0byBpbml0aWFsaXplIG11dGV4XG4mIzM0Oyk7CiYjNDM7CXJjID0gZGV2bV9tdXRleF9pbml0KHpsZGV2LSZndDtkZXYsICZhbXA7emxkZXYtJmd0O3RpZV9sb2NrKTsKIAlpZiAocmMpCiAJCXJldHVybiBkZXZfZXJyX3Byb2JlKHpsZGV2LSZndDtkZXYsIHJjLAogCQkJCSAgICAgJiMzNDtGYWlsZWQgdG8gaW5pdGlhbGl6ZSBtdXRleFxuJiMzNDspOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9kcGxsL3psMzA3M3gvY29yZS5oIGIvZHJpdmVycy9kcGxsL3psMzA3M3gvY29yZS5oCmluZGV4IDc4ZGMyMDhmM2VlYTIuLjY3YzEwZTI1OTUxMTggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZHBsbC96bDMwNzN4L2NvcmUuaAomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL2RwbGwvemwzMDczeC9jb3JlLmgKQEAgLTI2LDYgJiM0MzsyNiwxMCBAQCBzdHJ1Y3QgemwzMDczeF9kcGxsOwogI2RlZmluZSBaTF9QT0xMX0hXUkVHX1RJTUVPVVRfVVMJKDUwICogVVNFQ19QRVJfTVNFQykKICNkZWZpbmUgWkxfUE9MTF9NQl9USU1FT1VUX1VTCQkoMzAgKiBVU0VDX1BFUl9NU0VDKQogI2RlZmluZSBaTF9QT0xMX1BIQVNFX0VSUl9USU1FT1VUX1VTCSg1MCAqIFVTRUNfUEVSX01TRUMpCiYjNDM7I2RlZmluZSBaTF9QT0xMX1BIQVNFX1NURVBfVElNRU9VVF9VUwkoMzAwMCAqIFVTRUNfUEVSX01TRUMpCiYjNDM7I2RlZmluZSBaTF9QT0xMX1RJRV9XUl9USU1FT1VUX1VTCSgxMDAwICogVVNFQ19QRVJfTVNFQykKJiM0MzsjZGVmaW5lIFpMX1BPTExfVE9EX1JEX1RJTUVPVVRfVVMJKDMwICogVVNFQ19QRVJfTVNFQykKJiM0MzsjZGVmaW5lIFpMX1BPTExfVE9EX1dSX1RJTUVPVVRfVVMJKDEwMDAgKiBVU0VDX1BFUl9NU0VDKQogCiBlbnVtIHpsMzA3M3hfZmxhZ3MgewogCVpMMzA3M1hfRkxBR19SRUZfUEhBU0VfQ09NUF8zMl9CSVQsCkBAIC01NSw2ICYjNDM7NTksOCBAQCBzdHJ1Y3QgemwzMDczeF9jaGlwX2luZm8gewogICogQHJlZ21hcDogcmVnbWFwIHRvIGFjY2VzcyBkZXZpY2UgcmVnaXN0ZXJzCiAgKiBAaW5mbzogZGV0ZWN0ZWQgY2hpcCBpbmZvCiAgKiBAbXVsdGlvcF9sb2NrOiB0byBzZXJpYWxpemUgbXVsdGlwbGUgcmVnaXN0ZXIgb3BlcmF0aW9ucwomIzQzOyAqIEB0aWVfbG9jazogdG8gc2VyaWFsaXplIFRJRSB3cml0ZSBvcGVyYXRpb25zCiYjNDM7ICogQHBoYXNlX3N0ZXBfbG9jazogdG8gc2VyaWFsaXplIG91dHB1dCBwaGFzZSBzdGVwIG9wZXJhdGlvbnMKICAqIEByZWY6IGFycmF5IG9mIGlucHV0IHJlZmVyZW5jZXMmIzM5OyBpbnZhcmlhbnRzCiAgKiBAb3V0OiBhcnJheSBvZiBvdXRzJiMzOTsgaW52YXJpYW50cwogICogQHN5bnRoOiBhcnJheSBvZiBzeW50aHMmIzM5OyBpbnZhcmlhbnRzCkBAIC02Myw2ICYjNDM7NjksNyBAQCBzdHJ1Y3QgemwzMDczeF9jaGlwX2luZm8gewogICogQGt3b3JrZXI6IHRocmVhZCBmb3IgcGVyaW9kaWMgd29yawogICogQHdvcms6IHBlcmlvZGljIHdvcmsKICAqIEBjbG9ja19pZDogY2xvY2sgaWQgb2YgdGhlIGRldmljZQomIzQzOyAqIEBvdXRfc3RlcF90aW1lX21hc2s6IG91dHB1dCBzdGVwLXRpbWUgbWFzayAoZGV2aWNlLWdsb2JhbCkKICAqIEBwaGFzZV9hdmdfZmFjdG9yOiBwaGFzZSBvZmZzZXQgbWVhc3VyZW1lbnQgYXZlcmFnaW5nIGZhY3RvcgogICogQGZyZXFfbW9uaXRvcjogaXMgZnJlcXVlbmN5IG1vbml0b3IgZW5hYmxlZAogICovCkBAIC03MSw2ICYjNDM7NzgsOCBAQCBzdHJ1Y3QgemwzMDczeF9kZXYgewogCXN0cnVjdCByZWdtYXAJCQkqcmVnbWFwOwogCWNvbnN0IHN0cnVjdCB6bDMwNzN4X2NoaXBfaW5mbwkqaW5mbzsKIAlzdHJ1Y3QgbXV0ZXgJCQltdWx0aW9wX2xvY2s7CiYjNDM7CXN0cnVjdCBtdXRleAkJCXRpZV9sb2NrOwomIzQzOwlzdHJ1Y3QgbXV0ZXgJCQlwaGFzZV9zdGVwX2xvY2s7CiAKIAkvKiBJbnZhcmlhbnRzICovCiAJc3RydWN0IHpsMzA3M3hfcmVmCXJlZltaTDMwNzNYX05VTV9SRUZTXTsKQEAgLTg3LDYgJiM0Mzs5Niw3IEBAIHN0cnVjdCB6bDMwNzN4X2RldiB7CiAKIAkvKiBQZXItY2hpcCBwYXJhbWV0ZXJzICovCiAJdTY0CQkJY2xvY2tfaWQ7CiYjNDM7CXUxNgkJCW91dF9zdGVwX3RpbWVfbWFzazsKIAl1OAkJCXBoYXNlX2F2Z19mYWN0b3I7CiAJYm9vbAkJCWZyZXFfbW9uaXRvcjsKIH07CkBAIC0zMDgsNiAmIzQzOzMxOCwxOSBAQCB6bDMwNzN4X2Rldl9vdXRfaXNfZW5hYmxlZChzdHJ1Y3QgemwzMDczeF9kZXYgKnpsZGV2LCB1OCBpbmRleCkKIAlyZXR1cm4gemwzMDczeF9zeW50aF9pc19lbmFibGVkKHN5bnRoKSAmYW1wOyZhbXA7IHpsMzA3M3hfb3V0X2lzX2VuYWJsZWQob3V0KTsKIH0KIAomIzQzOy8qKgomIzQzOyAqIHpsMzA3M3hfZGV2X291dF9pc19zdGVwcGVkIC0gY2hlY2sgaWYgb3V0cHV0IGlzIGluIHN0ZXAtdGltZSBtYXNrCiYjNDM7ICogQHpsZGV2OiBwb2ludGVyIHRvIHpsMzA3M3ggZGV2aWNlCiYjNDM7ICogQGluZGV4OiBvdXRwdXQgaW5kZXgKJiM0MzsgKgomIzQzOyAqIFJldHVybjogdHJ1ZSBpZiBvdXRwdXQgaXMgYWZmZWN0ZWQgYnkgc3RlcC10aW1lIG9wZXJhdGlvbnMKJiM0MzsgKi8KJiM0MztzdGF0aWMgaW5saW5lIGJvb2wKJiM0Mzt6bDMwNzN4X2Rldl9vdXRfaXNfc3RlcHBlZChzdHJ1Y3QgemwzMDczeF9kZXYgKnpsZGV2LCB1OCBpbmRleCkKJiM0Mzt7CiYjNDM7CXJldHVybiAhISh6bGRldi0mZ3Q7b3V0X3N0ZXBfdGltZV9tYXNrICZhbXA7IEJJVChpbmRleCkpOwomIzQzO30KJiM0MzsKIC8qKgogICogemwzMDczeF9kZXZfb3V0X2RwbGxfZ2V0IC0gZ2V0IERQTEwgSUQgdGhlIG91dHB1dCBpcyBkcml2ZW4gYnkKICAqIEB6bGRldjogcG9pbnRlciB0byB6bDMwNzN4IGRldmljZQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9kcGxsL3psMzA3M3gvZHBsbC5jIGIvZHJpdmVycy9kcGxsL3psMzA3M3gvZHBsbC5jCmluZGV4IDA0ODhhZTZhYzQ4NmMuLjgzMDFhZDM0MzY1OGEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZHBsbC96bDMwNzN4L2RwbGwuYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL2RwbGwvemwzMDczeC9kcGxsLmMKQEAgLTIsNiAmIzQzOzIsNyBAQAogCiAjaW5jbHVkZSAmbHQ7bGludXgvYml0cy5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L2JpdGZpZWxkLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L2NsZWFudXAuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9idWcuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9jb250YWluZXJfb2YuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9kZXZfcHJpbnRrLmgmZ3Q7CkBAIC0xMyw2ICYjNDM7MTQsNyBAQAogI2luY2x1ZGUgJmx0O2xpbnV4L25ldGxpbmsuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9wcm9wZXJ0eS5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9wdHBfY2xvY2tfa2VybmVsLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvc2xhYi5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L3NwcmludGYuaCZndDsKIApAQCAtMjI3NSw0NSAmIzQzOzIyNzcsMzg0IEBAIHpsMzA3M3hfZHBsbF9pbml0X2ZpbmVfcGhhc2VfYWRqdXN0KHN0cnVjdCB6bDMwNzN4X2RldiAqemxkZXYpCiAJcmV0dXJuIHpsMzA3M3hfd3JpdGVfdTgoemxkZXYsIFpMX1JFR19TWU5USF9QSEFTRV9TSElGVF9DVFJMLCAweDAxKTsKIH0KIAomIzQzOy8qIE1heGltdW0gZnJlcXVlbmN5IGFkanVzdG1lbnQ6ICYjNDM7LTElIG9mIG5vbWluYWwgaW4gcHBiICovCiYjNDM7I2RlZmluZSBaTDMwNzNYX0RQTExfUFRQX01BWF9BREoJMTAwMDAwMDAKJiM0MzsKIC8qKgotICogemwzMDczeF9kcGxsX2FsbG9jIC0gYWxsb2NhdGUgRFBMTCBkZXZpY2UKLSAqIEB6bGRldjogcG9pbnRlciB0byB6bDMwNzN4IGRldmljZQotICogQGNoOiBEUExMIGNoYW5uZWwgbnVtYmVyCiYjNDM7ICogemwzMDczeF9kcGxsX3B0cF9nZXR0aW1leDY0IC0gcmVhZCBjdXJyZW50IHRpbWUgZnJvbSBUb0QgY291bnRlcnMKJiM0MzsgKiBAaW5mbzogUFRQIGNsb2NrIGluZm8KJiM0MzsgKiBAdHM6IHRpbWVzcGVjIHRvIHN0b3JlIGN1cnJlbnQgdGltZQomIzQzOyAqIEBzdHM6IG9wdGlvbmFsIHN5c3RlbSB0aW1lc3RhbXAgcGFpciBmb3IgY3Jvc3MtdGltZXN0YW1waW5nCiAgKgotICogQWxsb2NhdGVzIERQTEwgZGV2aWNlIHN0cnVjdHVyZSBmb3IgZ2l2ZW4gRFBMTCBjaGFubmVsLgomIzQzOyAqIFJldHVybjogMCBvbiBzdWNjZXNzLCAmbHQ7MCBvbiBlcnJvcgomIzQzOyAqLwomIzQzO3N0YXRpYyBpbnQgemwzMDczeF9kcGxsX3B0cF9nZXR0aW1leDY0KHN0cnVjdCBwdHBfY2xvY2tfaW5mbyAqaW5mbywKJiM0MzsJCQkJICAgICAgIHN0cnVjdCB0aW1lc3BlYzY0ICp0cywKJiM0MzsJCQkJICAgICAgIHN0cnVjdCBwdHBfc3lzdGVtX3RpbWVzdGFtcCAqc3RzKQomIzQzO3sKJiM0MzsJc3RydWN0IHpsMzA3M3hfZHBsbCAqemxkcGxsID0gY29udGFpbmVyX29mKGluZm8sIHN0cnVjdCB6bDMwNzN4X2RwbGwsCiYjNDM7CQkJCQkJICAgcHRwX2luZm8pOwomIzQzOwomIzQzOwlndWFyZChtdXRleCkoJmFtcDt6bGRwbGwtJmd0O2xvY2spOwomIzQzOwomIzQzOwlyZXR1cm4gemwzMDczeF9jaGFuX3RvZF9yZWFkKHpsZHBsbC0mZ3Q7ZGV2LCB6bGRwbGwtJmd0O2lkLCBmYWxzZSwgdHMsIHN0cyk7CiYjNDM7fQomIzQzOwomIzQzOy8qKgomIzQzOyAqIHpsMzA3M3hfZHBsbF9wdHBfc2V0dGltZTY0IC0gc2V0IFRvRCBjb3VudGVycyB0byBnaXZlbiB0aW1lCiYjNDM7ICogQGluZm86IFBUUCBjbG9jayBpbmZvCiYjNDM7ICogQHRzOiB0aW1lc3BlYyB3aXRoIHRpbWUgdG8gc2V0CiAgKgotICogUmV0dXJuOiBwb2ludGVyIHRvIERQTEwgZGV2aWNlIG9uIHN1Y2Nlc3MsIGVycm9yIHBvaW50ZXIgb24gZXJyb3IKJiM0MzsgKiBSZXR1cm46IDAgb24gc3VjY2VzcywgJmx0OzAgb24gZXJyb3IKICAqLwotc3RydWN0IHpsMzA3M3hfZHBsbCAqCi16bDMwNzN4X2RwbGxfYWxsb2Moc3RydWN0IHpsMzA3M3hfZGV2ICp6bGRldiwgdTggY2gpCiYjNDM7c3RhdGljIGludCB6bDMwNzN4X2RwbGxfcHRwX3NldHRpbWU2NChzdHJ1Y3QgcHRwX2Nsb2NrX2luZm8gKmluZm8sCiYjNDM7CQkJCSAgICAgIGNvbnN0IHN0cnVjdCB0aW1lc3BlYzY0ICp0cykKIHsKLQlzdHJ1Y3QgemwzMDczeF9kcGxsICp6bGRwbGw7CiYjNDM7CXN0cnVjdCB6bDMwNzN4X2RwbGwgKnpsZHBsbCA9IGNvbnRhaW5lcl9vZihpbmZvLCBzdHJ1Y3QgemwzMDczeF9kcGxsLAomIzQzOwkJCQkJCSAgIHB0cF9pbmZvKTsKIAotCXpsZHBsbCA9IGt6YWxsb2Nfb2JqKCp6bGRwbGwpOwotCWlmICghemxkcGxsKQotCQlyZXR1cm4gRVJSX1BUUigtRU5PTUVNKTsKJiM0MzsJZ3VhcmQobXV0ZXgpKCZhbXA7emxkcGxsLSZndDtsb2NrKTsKIAotCXpsZHBsbC0mZ3Q7ZGV2ID0gemxkZXY7Ci0JemxkcGxsLSZndDtpZCA9IGNoOwotCW11dGV4X2luaXQoJmFtcDt6bGRwbGwtJmd0O2xvY2spOwotCUlOSVRfTElTVF9IRUFEKCZhbXA7emxkcGxsLSZndDtwaW5zKTsKJiM0MzsJcmV0dXJuIHpsMzA3M3hfY2hhbl90b2Rfd3JpdGUoemxkcGxsLSZndDtkZXYsIHpsZHBsbC0mZ3Q7aWQsICp0cyk7CiYjNDM7fQogCi0JcmV0dXJuIHpsZHBsbDsKJiM0MzsvKioKJiM0MzsgKiB6bDMwNzN4X2RwbGxfcHRwX2FkanRpbWVfcGhhc2Vfc3RlcCAtIGFkanVzdCBzdWItc2Vjb25kIHRpbWUgdmlhIHBoYXNlIHN0ZXAKJiM0MzsgKiBAemxkcGxsOiBEUExMIGNoYW5uZWwKJiM0MzsgKiBAZGVsdGE6IHRpbWUgYWRqdXN0bWVudCBpbiBuYW5vc2Vjb25kcyAobXVzdCBiZSB3aXRoaW4gKC1OU0VDX1BFUl9TRUMsCiYjNDM7ICogICAgICAgICBOU0VDX1BFUl9TRUMpKQomIzQzOyAqCiYjNDM7ICogVXNlcyB0aGUgb3V0cHV0IHBoYXNlIHN0ZXAgbWVjaGFuaXNtIHdpdGggdG9kX3N0ZXA9MSB0byBhZGp1c3QgYm90aAomIzQzOyAqIHRoZSBvdXRwdXQgY2xvY2sgcGhhc2UgYW5kIHRoZSBUb0QgY291bnRlciBzaW11bHRhbmVvdXNseS4gVGhpcyBrZWVwcwomIzQzOyAqIG91dHB1dHMgYW5kIFRvRCBjb2hlcmVudC4gT25seSB2YWxpZCBmb3IgTkNPLgomIzQzOyAqCiYjNDM7ICogT3V0cHV0cyBhcmUgZ3JvdXBlZCBieSBzeW50aGVzaXplciBzaW5jZSB0aGUgcGhhc2Ugc3RlcCB2YWx1ZSBpcyBpbgomIzQzOyAqIHN5bnRoZXNpemVyIGNsb2NrIGN5Y2xlcy4gVGhlIGZpcnN0IHN5bnRoIGdyb3VwIHdpdGggZW5hYmxlZCBvdXRwdXRzCiYjNDM7ICogdXNlcyB0b2Rfc3RlcCB0byBhZGp1c3QgYm90aCBvdXRwdXRzIGFuZCB0aGUgVG9EIGNvdW50ZXIuIFJlbWFpbmluZwomIzQzOyAqIGdyb3VwcyBzdGVwIG91dHB1dHMgb25seS4gSWYgbm8gc3ludGggaGFzIGVuYWJsZWQgb3V0cHV0cywgdGhlIFRvRAomIzQzOyAqIGNvdW50ZXIgaXMgc3RlcHBlZCBhbG9uZSB1c2luZyBhbiBlbXB0eSBvdXRwdXQgbWFzayAodGhlIEZXIHVzZXMKJiM0MzsgKiB0aGUgZmlyc3QgZW5hYmxlZCBzeW50aCYjMzk7cyBwZXJpb2QgZm9yIHRoZSBjb252ZXJzaW9uKS4KJiM0MzsgKgomIzQzOyAqIFJldHVybjoKJiM0MzsgKiAqICUwCQkJLSBzdWNjZXNzIChvciBwYXJ0aWFsIHN1Y2Nlc3MgaWYgYSBsYXRlciBzeW50aCBncm91cAomIzQzOyAqCQkJICBmYWlsZWQgYWZ0ZXIgdGhlIGZpcnN0IHdhcyBhbHJlYWR5IHN0ZXBwZWQpCiYjNDM7ICogKiAlLUVPUE5PVFNVUFAJLSBubyBzeW50aHMgYXZhaWxhYmxlCiYjNDM7ICogKiBuZWdhdGl2ZQkJLSBlcnJvcgomIzQzOyAqLwomIzQzO3N0YXRpYyBpbnQgemwzMDczeF9kcGxsX3B0cF9hZGp0aW1lX3BoYXNlX3N0ZXAoc3RydWN0IHpsMzA3M3hfZHBsbCAqemxkcGxsLAomIzQzOwkJCQkJICAgICAgIHM2NCBkZWx0YSkKJiM0Mzt7CiYjNDM7CXUxNiBzeW50aF9tYXNrW1pMMzA3M1hfTlVNX1NZTlRIU10gPSB7fTsKJiM0MzsJc3RydWN0IHpsMzA3M3hfZGV2ICp6bGRldiA9IHpsZHBsbC0mZ3Q7ZGV2OwomIzQzOwljb25zdCBzdHJ1Y3QgemwzMDczeF9zeW50aCAqc3ludGg7CiYjNDM7CXN0cnVjdCB6bDMwNzN4X2RwbGxfcGluICpwaW47CiYjNDM7CXUzMiBmaXJzdF9zeW50aF9mcmVxID0gMDsKJiM0MzsJYm9vbCB0b2Rfc3RlcHBlZCA9IGZhbHNlOwomIzQzOwlzMzIgc3RlcF9jeWNsZXM7CiYjNDM7CXUzMiBzeW50aF9mcmVxOwomIzQzOwlpbnQgcmM7CiYjNDM7CXU4IGk7CiYjNDM7CiYjNDM7CS8qIEJ1aWxkIHBlci1zeW50aCBvdXRwdXQgbWFza3MgZnJvbSByZWdpc3RlcmVkIG91dHB1dCBwaW5zICovCiYjNDM7CWxpc3RfZm9yX2VhY2hfZW50cnkocGluLCAmYW1wO3psZHBsbC0mZ3Q7cGlucywgbGlzdCkgewomIzQzOwkJdTggb3V0X2lkLCBzeW50aF9pZDsKJiM0MzsKJiM0MzsJCWlmICh6bDMwNzN4X2RwbGxfaXNfaW5wdXRfcGluKHBpbikpCiYjNDM7CQkJY29udGludWU7CiYjNDM7CiYjNDM7CQlvdXRfaWQgPSB6bDMwNzN4X291dHB1dF9waW5fb3V0X2dldChwaW4tJmd0O2lkKTsKJiM0MzsKJiM0MzsJCWlmICghemwzMDczeF9kZXZfb3V0X2lzX3N0ZXBwZWQoemxkZXYsIG91dF9pZCkpCiYjNDM7CQkJY29udGludWU7CiYjNDM7CiYjNDM7CQlzeW50aF9pZCA9IHpsMzA3M3hfZGV2X291dF9zeW50aF9nZXQoemxkZXYsIG91dF9pZCk7CiYjNDM7CQlpZiAoc3ludGhfaWQgJmd0Oz0gWkwzMDczWF9OVU1fU1lOVEhTKSB7CiYjNDM7CQkJZGV2X3dhcm4oemxkZXYtJmd0O2RldiwgJiMzNDtVbmV4cGVjdGVkIHN5bnRoIGlkIGZvciBPVVQldVxuJiMzNDssCiYjNDM7CQkJCSBvdXRfaWQpOwomIzQzOwkJCWNvbnRpbnVlOwomIzQzOwkJfQomIzQzOwkJc3ludGhfbWFza1tzeW50aF9pZF0gfD0gQklUKG91dF9pZCk7CiYjNDM7CX0KJiM0MzsKJiM0MzsJLyogUHJvY2VzcyBlYWNoIHN5bnRoIGdyb3VwICovCiYjNDM7CWZvciAoaSA9IDA7IGkgJmx0OyBaTDMwNzNYX05VTV9TWU5USFM7IGkmIzQzOyYjNDM7KSB7CiYjNDM7CQlzeW50aCA9IHpsMzA3M3hfc3ludGhfc3RhdGVfZ2V0KHpsZGV2LCBpKTsKJiM0MzsJCWlmICghemwzMDczeF9zeW50aF9pc19lbmFibGVkKHN5bnRoKSB8fAomIzQzOwkJICAgIHpsMzA3M3hfc3ludGhfZHBsbF9nZXQoc3ludGgpICE9IHpsZHBsbC0mZ3Q7aWQpCiYjNDM7CQkJY29udGludWU7CiYjNDM7CiYjNDM7CQlzeW50aF9mcmVxID0gemwzMDczeF9zeW50aF9mcmVxX2dldChzeW50aCk7CiYjNDM7CiYjNDM7CQkvKiBSZW1lbWJlciBmaXJzdCBlbmFibGVkIHN5bnRoIGZyZXEgZm9yIFRvRC1vbmx5IGZhbGxiYWNrICovCiYjNDM7CQlpZiAoIWZpcnN0X3N5bnRoX2ZyZXEpCiYjNDM7CQkJZmlyc3Rfc3ludGhfZnJlcSA9IHN5bnRoX2ZyZXE7CiYjNDM7CiYjNDM7CQlpZiAoIXN5bnRoX21hc2tbaV0pCiYjNDM7CQkJY29udGludWU7CiYjNDM7CiYjNDM7CQkvKiBTYWZlIGZvciBzMzI6IG1heCBzeW50aCBmcmVxIGlzIDc1MCBNSHogKi8KJiM0MzsJCXN0ZXBfY3ljbGVzID0gZGl2X3M2NChkZWx0YSAqIHN5bnRoX2ZyZXEsIE5TRUNfUEVSX1NFQyk7CiYjNDM7CiYjNDM7CQlyYyA9IHpsMzA3M3hfY2hhbl9waGFzZV9zdGVwKHpsZGV2LCB6bGRwbGwtJmd0O2lkLAomIzQzOwkJCQkJICAgICBzeW50aF9tYXNrW2ldLCBzdGVwX2N5Y2xlcywKJiM0MzsJCQkJCSAgICAgIXRvZF9zdGVwcGVkKTsKJiM0MzsJCWlmIChyYykgewomIzQzOwkJCWlmICh0b2Rfc3RlcHBlZCkgewomIzQzOwkJCQlkZXZfd2Fybih6bGRldi0mZ3Q7ZGV2LAomIzQzOwkJCQkJICYjMzQ7UGFydGlhbCBwaGFzZSBzdGVwIGZhaWx1cmVcbiYjMzQ7KTsKJiM0MzsJCQkJcmV0dXJuIDA7CiYjNDM7CQkJfQomIzQzOwkJCXJldHVybiByYzsKJiM0MzsJCX0KJiM0MzsJCXRvZF9zdGVwcGVkID0gdHJ1ZTsKJiM0MzsJfQomIzQzOwomIzQzOwlpZiAoIWZpcnN0X3N5bnRoX2ZyZXEpCiYjNDM7CQlyZXR1cm4gLUVPUE5PVFNVUFA7CiYjNDM7CiYjNDM7CS8qIE5vIGVuYWJsZWQgb3V0cHV0cyBmb3VuZDsgc3RlcCBUb0QgY291bnRlciBvbmx5IHVzaW5nIHRoZQomIzQzOwkgKiBmaXJzdCBlbmFibGVkIHN5bnRoJiMzOTtzIHBlcmlvZCAoZW1wdHkgb3V0cHV0IG1hc2spLgomIzQzOwkgKi8KJiM0MzsJaWYgKCF0b2Rfc3RlcHBlZCkgewomIzQzOwkJc3RlcF9jeWNsZXMgPSBkaXZfczY0KGRlbHRhICogZmlyc3Rfc3ludGhfZnJlcSwgTlNFQ19QRVJfU0VDKTsKJiM0MzsJCXJldHVybiB6bDMwNzN4X2NoYW5fcGhhc2Vfc3RlcCh6bGRldiwgemxkcGxsLSZndDtpZCwgMCwKJiM0MzsJCQkJCSAgICAgICBzdGVwX2N5Y2xlcywgdHJ1ZSk7CiYjNDM7CX0KJiM0MzsKJiM0MzsJcmV0dXJuIDA7CiB9CiAKIC8qKgotICogemwzMDczeF9kcGxsX2ZyZWUgLSBmcmVlIERQTEwgZGV2aWNlCi0gKiBAemxkcGxsOiBwb2ludGVyIHRvIHpsMzA3M3hfZHBsbCBzdHJ1Y3R1cmUKJiM0MzsgKiB6bDMwNzN4X2RwbGxfcHRwX2FkanRpbWUgLSBhZGp1c3QgUFRQIGNsb2NrIHRpbWUKJiM0MzsgKiBAaW5mbzogUFRQIGNsb2NrIGluZm8KJiM0MzsgKiBAZGVsdGE6IHRpbWUgYWRqdXN0bWVudCBpbiBuYW5vc2Vjb25kcwogICoKLSAqIERlYWxsb2NhdGVzIGdpdmVuIERQTEwgZGV2aWNlIHByZXZpb3VzbHkgYWxsb2NhdGVkIGJ5IEB6bDMwNzN4X2RwbGxfYWxsb2MuCiYjNDM7ICogRm9yIE5DTywgbGFyZ2UgZGVsdGFzICgmZ3Q7PSAxIHNlY29uZCkgYXJlIHNwbGl0IGludG8gYSBUb0QKJiM0MzsgKiByZWFkLW1vZGlmeS13cml0ZSBmb3IgdGhlIHNlY29uZHMgcGFydCBhbmQgYW4gb3V0cHV0IHBoYXNlIHN0ZXAgZm9yCiYjNDM7ICogdGhlIHN1Yi1zZWNvbmQgcmVtYWluZGVyLiBTdWItc2Vjb25kIGRlbHRhcyB1c2UgcGhhc2Ugc3RlcCBkaXJlY3RseSwKJiM0MzsgKiBmYWxsaW5nIGJhY2sgdG8gVG9EIHJlYWQtbW9kaWZ5LXdyaXRlIGlmIHBoYXNlIHN0ZXAgb3IgVElFIHdyaXRlCiYjNDM7ICogZmFpbHMuIEluIEFVVE8vUkVGTE9DSyBtb2RlcywgbGFyZ2UgZGVsdGFzIGFyZSBzcGxpdCBpbnRvIFRvRAomIzQzOyAqIHJlYWQtbW9kaWZ5LXdyaXRlIGZvciBzZWNvbmRzIGFuZCBUSUUgd3JpdGUgZm9yIHRoZSBzdWItc2Vjb25kCiYjNDM7ICogcmVtYWluZGVyLiBTdWItc2Vjb25kIGRlbHRhcyB1c2UgVElFIHdyaXRlIGRpcmVjdGx5LgomIzQzOyAqCiYjNDM7ICogSWYgdGhlIHNlY29uZHMgcGFydCB3YXMgYWxyZWFkeSBjb21taXR0ZWQgd2hlbiB0aGUgc3ViLXNlY29uZAomIzQzOyAqIG1lY2hhbmlzbSBmYWlscywgcmV0dXJucyAwIHRvIHByZXZlbnQgdGhlIFBUUCBzZXJ2byBmcm9tIHJldHJ5aW5nCiYjNDM7ICogdGhlIGZ1bGwgZGVsdGEgYW5kIGFwcGx5aW5nIHNlY29uZHMgYWdhaW4uCiYjNDM7ICoKJiM0MzsgKiBSZXR1cm46IDAgb24gc3VjY2VzcyAob3IgcGFydGlhbCBzdWNjZXNzKSwgJmx0OzAgb24gZXJyb3IKICAqLwotdm9pZAotemwzMDczeF9kcGxsX2ZyZWUoc3RydWN0IHpsMzA3M3hfZHBsbCAqemxkcGxsKQomIzQzO3N0YXRpYyBpbnQgemwzMDczeF9kcGxsX3B0cF9hZGp0aW1lKHN0cnVjdCBwdHBfY2xvY2tfaW5mbyAqaW5mbywgczY0IGRlbHRhKQogewotCVdBUk4oemxkcGxsLSZndDtkcGxsX2RldiwgJiMzNDtEUExMIGRldmljZSBpcyBzdGlsbCByZWdpc3RlcmVkXG4mIzM0Oyk7CiYjNDM7CXN0cnVjdCB6bDMwNzN4X2RwbGwgKnpsZHBsbCA9IGNvbnRhaW5lcl9vZihpbmZvLCBzdHJ1Y3QgemwzMDczeF9kcGxsLAomIzQzOwkJCQkJCSAgIHB0cF9pbmZvKTsKJiM0MzsJc3RydWN0IHpsMzA3M3hfZGV2ICp6bGRldiA9IHpsZHBsbC0mZ3Q7ZGV2OwomIzQzOwljb25zdCBzdHJ1Y3QgemwzMDczeF9jaGFuICpjaGFuOwomIzQzOwlib29sIHNlY19hZGp1c3RlZCA9IGZhbHNlOwomIzQzOwlzdHJ1Y3QgdGltZXNwZWM2NCB0czsKJiM0MzsJaW50IHJjOwogCi0JbXV0ZXhfZGVzdHJveSgmYW1wO3psZHBsbC0mZ3Q7bG9jayk7Ci0Ja2ZyZWUoemxkcGxsKTsKJiM0MzsJaWYgKCFkZWx0YSkKJiM0MzsJCXJldHVybiAwOwomIzQzOwomIzQzOwlndWFyZChtdXRleCkoJmFtcDt6bGRwbGwtJmd0O2xvY2spOwomIzQzOwomIzQzOwkvKiBNb2RlcyB3aXRob3V0IHBoYXNlIHN0ZXAgb3IgVElFIHVzZSBwbGFpbiBUb0QgYWRqdXN0ICovCiYjNDM7CWNoYW4gPSB6bDMwNzN4X2NoYW5fc3RhdGVfZ2V0KHpsZGV2LCB6bGRwbGwtJmd0O2lkKTsKJiM0MzsJaWYgKCF6bDMwNzN4X2NoYW5fbW9kZV9pc19uY28oY2hhbikgJmFtcDsmYW1wOwomIzQzOwkgICAgIXpsMzA3M3hfY2hhbl9tb2RlX3N1cHBvcnRzX3RpZShjaGFuKSkKJiM0MzsJCXJldHVybiB6bDMwNzN4X2NoYW5fdG9kX2FkanVzdCh6bGRldiwgemxkcGxsLSZndDtpZCwKJiM0MzsJCQkJCSAgICAgICBuc190b190aW1lc3BlYzY0KGRlbHRhKSk7CiYjNDM7CiYjNDM7CS8qIFNwbGl0IG9mZiBzZWNvbmRzIHZpYSBUb0QgcmVhZC1tb2RpZnktd3JpdGUgc28gdGhlIHN1Yi1zZWNvbmQKJiM0MzsJICogcmVtYWluZGVyIGNhbiBiZSBhcHBsaWVkIHRocm91Z2ggdGhlIG91dHB1dC1jb2hlcmVudCBtZWNoYW5pc20KJiM0MzsJICogKHBoYXNlIHN0ZXAgb3IgVElFIHdyaXRlKS4KJiM0MzsJICovCiYjNDM7CWlmIChkZWx0YSAmZ3Q7PSBOU0VDX1BFUl9TRUMgfHwgZGVsdGEgJmx0Oz0gLU5TRUNfUEVSX1NFQykgewomIzQzOwkJczMyIHJlbWFpbmRlcjsKJiM0MzsKJiM0MzsJCXRzLnR2X3NlYyA9IGRpdl9zNjRfcmVtKGRlbHRhLCBOU0VDX1BFUl9TRUMsICZhbXA7cmVtYWluZGVyKTsKJiM0MzsJCXRzLnR2X25zZWMgPSAwOwomIzQzOwkJZGVsdGEgPSByZW1haW5kZXI7CiYjNDM7CiYjNDM7CQlyYyA9IHpsMzA3M3hfY2hhbl90b2RfYWRqdXN0KHpsZGV2LCB6bGRwbGwtJmd0O2lkLCB0cyk7CiYjNDM7CQlpZiAocmMpCiYjNDM7CQkJcmV0dXJuIHJjOwomIzQzOwomIzQzOwkJLyogTm8gc3ViLXNlY29uZCByZW1haW5kZXIsIGRvbmUgKi8KJiM0MzsJCWlmICghZGVsdGEpCiYjNDM7CQkJcmV0dXJuIDA7CiYjNDM7CiYjNDM7CQkvKiBXYWl0IGZvciB0aGUgVG9EIHdyaXRlIHRvIGJlIGFwcGxpZWQgYXQgdGhlIDEgSHogZWRnZQomIzQzOwkJICogYmVmb3JlIGlzc3VpbmcgcGhhc2Ugc3RlcCBvciBUSUUgd3JpdGUsIHNvIHRoZSBwZW5kaW5nCiYjNDM7CQkgKiBXUl9ORVhUXzFIWiBkb2VzIG5vdCBvdmVyd3JpdGUgdGhlIHN1Yi1zZWNvbmQgYWRqdXN0bWVudC4KJiM0MzsJCSAqLwomIzQzOwkJcmMgPSB6bDMwNzN4X2NoYW5fdG9kX3JlYWR5X3dhaXQoemxkZXYsIHpsZHBsbC0mZ3Q7aWQpOwomIzQzOwkJaWYgKHJjKQomIzQzOwkJCXJldHVybiByYzsKJiM0MzsKJiM0MzsJCXNlY19hZGp1c3RlZCA9IHRydWU7CiYjNDM7CX0KJiM0MzsKJiM0MzsJLyogQXBwbHkgc3ViLXNlY29uZCBkZWx0YSB2aWEgcGhhc2Ugc3RlcCAoTkNPKSBvciBUSUUgd3JpdGUgKi8KJiM0MzsJaWYgKHpsMzA3M3hfY2hhbl9tb2RlX2lzX25jbyhjaGFuKSkgewomIzQzOwkJcmMgPSB6bDMwNzN4X2RwbGxfcHRwX2FkanRpbWVfcGhhc2Vfc3RlcCh6bGRwbGwsIGRlbHRhKTsKJiM0MzsJCWlmICghcmMpCiYjNDM7CQkJcmV0dXJuIDA7CiYjNDM7CX0gZWxzZSB7CiYjNDM7CQlyYyA9IHpsMzA3M3hfY2hhbl90aWVfd3JpdGUoemxkZXYsIHpsZHBsbC0mZ3Q7aWQsIGRlbHRhKTsKJiM0MzsJCWlmICghcmMpCiYjNDM7CQkJcmV0dXJuIDA7CiYjNDM7CX0KJiM0MzsKJiM0MzsJLyogUGhhc2Ugc3RlcCBvciBUSUUgd3JpdGUgZmFpbGVkLCBmYWxsIGJhY2sgdG8gVG9EIGFkanVzdCAqLwomIzQzOwlyYyA9IHpsMzA3M3hfY2hhbl90b2RfYWRqdXN0KHpsZGV2LCB6bGRwbGwtJmd0O2lkLAomIzQzOwkJCQkgICAgIG5zX3RvX3RpbWVzcGVjNjQoZGVsdGEpKTsKJiM0MzsKJiM0MzsJLyogSW4gdGhlIHVubGlrZWx5IGV2ZW50IHRoYXQgYm90aCBwaGFzZSBzdGVwL1RJRSB3cml0ZSBhbmQgZmFsbGJhY2sKJiM0MzsJICogVG9EIGFkanVzdCBmYWlsIGFmdGVyIHNlY29uZHMgd2VyZSBhbHJlYWR5IGNvbW1pdHRlZCwgcmV0dXJuCiYjNDM7CSAqIHN1Y2Nlc3MgdG8gcHJldmVudCB0aGUgUFRQIHNlcnZvIGZyb20gcmV0cnlpbmcgdGhlIGZ1bGwgZGVsdGEgYW5kCiYjNDM7CSAqIGFwcGx5aW5nIHNlY29uZHMgYWdhaW4uIFRoZSBzdWItc2Vjb25kIHJlc2lkdWFsIHdpbGwgc2VsZi1jb3JyZWN0CiYjNDM7CSAqIGluIHRoZSBuZXh0IHNlcnZvIGN5Y2xlLgomIzQzOwkgKi8KJiM0MzsJaWYgKHJjICZhbXA7JmFtcDsgc2VjX2FkanVzdGVkKSB7CiYjNDM7CQlkZXZfd2Fybih6bGRldi0mZ3Q7ZGV2LAomIzQzOwkJCSAmIzM0O1N1Yi1zZWNvbmQgYWRqdXN0bWVudCBmYWlsZWQgYWZ0ZXIgc2Vjb25kcyBhcHBsaWVkXG4mIzM0Oyk7CiYjNDM7CQlyZXR1cm4gMDsKJiM0MzsJfQomIzQzOwomIzQzOwlyZXR1cm4gcmM7CiYjNDM7fQomIzQzOwomIzQzOy8qKgomIzQzOyAqIHpsMzA3M3hfZHBsbF9wdHBfYWRqZmluZSAtIGFkanVzdCBQVFAgY2xvY2sgZnJlcXVlbmN5CiYjNDM7ICogQGluZm86IFBUUCBjbG9jayBpbmZvCiYjNDM7ICogQHNjYWxlZF9wcG06IGZyZXF1ZW5jeSBhZGp1c3RtZW50IGluIHNjYWxlZCBwcG0gKHBwbSAqIDJeMTYpCiYjNDM7ICoKJiM0MzsgKiBPbmx5IHN1cHBvcnRlZCBmb3IgTkNPLiBXcml0ZXMgdGhlIGRlbHRhIGZyZXF1ZW5jeSBvZmZzZXQgcmVnaXN0ZXIuCiYjNDM7ICoKJiM0MzsgKiBSZXR1cm46CiYjNDM7ICogKiAlMAkJCS0gc3VjY2VzcyBvciBAc2NhbGVkX3BwbSBpcyB6ZXJvIChuby1vcCkKJiM0MzsgKiAqICUtRU9QTk9UU1VQUAktIE5DTyBwaW4gaXMgbm90IGNvbm5lY3RlZCBhbmQgQHNjYWxlZF9wcG0gaXMgbm9uLXplcm8KJiM0MzsgKiAqIG5lZ2F0aXZlCQktIG90aGVyIGVycm9yCiYjNDM7ICovCiYjNDM7c3RhdGljIGludAomIzQzO3psMzA3M3hfZHBsbF9wdHBfYWRqZmluZShzdHJ1Y3QgcHRwX2Nsb2NrX2luZm8gKmluZm8sIGxvbmcgc2NhbGVkX3BwbSkKJiM0Mzt7CiYjNDM7CXN0cnVjdCB6bDMwNzN4X2RwbGwgKnpsZHBsbCA9IGNvbnRhaW5lcl9vZihpbmZvLCBzdHJ1Y3QgemwzMDczeF9kcGxsLAomIzQzOwkJCQkJCSAgIHB0cF9pbmZvKTsKJiM0MzsJY29uc3Qgc3RydWN0IHpsMzA3M3hfY2hhbiAqY2hhbjsKJiM0MzsJczY0IG9mZnNldDsKJiM0MzsKJiM0MzsJLyogQ29udmVydCBzY2FsZWRfcHBtIHRvIGRmX29mZnNldCBpbiAyXi00OCBzdGVwczoKJiM0MzsJICogICBkZl9vZmZzZXQgPSAtKHNjYWxlZF9wcG0gKiAyXjMyKSAvIDEwXjYKJiM0MzsJICoKJiM0MzsJICogU2ltcGxpZnkgdG8gYXZvaWQgb3ZlcmZsb3c6CiYjNDM7CSAqICAgZGZfb2Zmc2V0ID0gLShzY2FsZWRfcHBtICogMl4yNikgLyA1XjYKJiM0MzsJICogICBkZl9vZmZzZXQgPSAtKHNjYWxlZF9wcG0gKiA2NzEwODg2NCkgLyAxNTYyNQomIzQzOwkgKi8KJiM0MzsJb2Zmc2V0ID0gLWRpdl9zNjQoKHM2NClzY2FsZWRfcHBtICogNjcxMDg4NjRMTCwgMTU2MjUpOwomIzQzOwomIzQzOwlndWFyZChtdXRleCkoJmFtcDt6bGRwbGwtJmd0O2xvY2spOwomIzQzOwomIzQzOwljaGFuID0gemwzMDczeF9jaGFuX3N0YXRlX2dldCh6bGRwbGwtJmd0O2RldiwgemxkcGxsLSZndDtpZCk7CiYjNDM7CWlmICghemwzMDczeF9jaGFuX21vZGVfaXNfbmNvKGNoYW4pKQomIzQzOwkJcmV0dXJuIHNjYWxlZF9wcG0gPyAtRU9QTk9UU1VQUCA6IDA7CiYjNDM7CWlmIChvZmZzZXQgPT0gY2hhbi0mZ3Q7ZGZfb2Zmc2V0KQomIzQzOwkJcmV0dXJuIDA7CiYjNDM7CiYjNDM7CXJldHVybiB6bDMwNzN4X2NoYW5fZGZfb2Zmc2V0X3NldCh6bGRwbGwtJmd0O2RldiwgemxkcGxsLSZndDtpZCwgb2Zmc2V0KTsKJiM0Mzt9CiYjNDM7CiYjNDM7LyoqCiYjNDM7ICogemwzMDczeF9kcGxsX3B0cF9hZGpwaGFzZSAtIGFkanVzdCBQVFAgY2xvY2sgcGhhc2UKJiM0MzsgKiBAaW5mbzogUFRQIGNsb2NrIGluZm8KJiM0MzsgKiBAZGVsdGE6IHBoYXNlIGFkanVzdG1lbnQgaW4gbmFub3NlY29uZHMKJiM0MzsgKgomIzQzOyAqIE9ubHkgc3VwcG9ydGVkIGluIEFVVE8gYW5kIFJFRkxPQ0sgbW9kZXMuIFVzZXMgVElFIHdyaXRlIGZvcgomIzQzOyAqIG5hbm9zZWNvbmQgcmVzb2x1dGlvbiBwaGFzZSBhZGp1c3RtZW50LgomIzQzOyAqCiYjNDM7ICogUmV0dXJuOgomIzQzOyAqICogJTAJCQktIHN1Y2Nlc3Mgb3IgQGRlbHRhIGlzIHplcm8gKG5vLW9wKQomIzQzOyAqICogJS1FT1BOT1RTVVBQCS0gbW9kZSBkb2VzIG5vdCBzdXBwb3J0IFRJRSBhbmQgQGRlbHRhIGlzIG5vbi16ZXJvCiYjNDM7ICogKiBuZWdhdGl2ZQkJLSBvdGhlciBlcnJvcgomIzQzOyAqLwomIzQzO3N0YXRpYyBpbnQgemwzMDczeF9kcGxsX3B0cF9hZGpwaGFzZShzdHJ1Y3QgcHRwX2Nsb2NrX2luZm8gKmluZm8sIHMzMiBkZWx0YSkKJiM0Mzt7CiYjNDM7CXN0cnVjdCB6bDMwNzN4X2RwbGwgKnpsZHBsbCA9IGNvbnRhaW5lcl9vZihpbmZvLCBzdHJ1Y3QgemwzMDczeF9kcGxsLAomIzQzOwkJCQkJCSAgIHB0cF9pbmZvKTsKJiM0MzsJc3RydWN0IHpsMzA3M3hfZGV2ICp6bGRldiA9IHpsZHBsbC0mZ3Q7ZGV2OwomIzQzOwljb25zdCBzdHJ1Y3QgemwzMDczeF9jaGFuICpjaGFuOwomIzQzOwomIzQzOwlpZiAoIWRlbHRhKQomIzQzOwkJcmV0dXJuIDA7CiYjNDM7CiYjNDM7CWd1YXJkKG11dGV4KSgmYW1wO3psZHBsbC0mZ3Q7bG9jayk7CiYjNDM7CiYjNDM7CWNoYW4gPSB6bDMwNzN4X2NoYW5fc3RhdGVfZ2V0KHpsZGV2LCB6bGRwbGwtJmd0O2lkKTsKJiM0MzsKJiM0MzsJaWYgKCF6bDMwNzN4X2NoYW5fbW9kZV9zdXBwb3J0c190aWUoY2hhbikpCiYjNDM7CQlyZXR1cm4gLUVPUE5PVFNVUFA7CiYjNDM7CiYjNDM7CXJldHVybiB6bDMwNzN4X2NoYW5fdGllX3dyaXRlKHpsZGV2LCB6bGRwbGwtJmd0O2lkLCBkZWx0YSk7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBzMzIKJiM0Mzt6bDMwNzN4X2RwbGxfcHRwX2dldG1heHBoYXNlKHN0cnVjdCBwdHBfY2xvY2tfaW5mbyAqaW5mbyBfX2Fsd2F5c191bnVzZWQpCiYjNDM7ewomIzQzOwkvKiBIVyBsaW1pdHMgVElFIHdyaXRlIHRvICYjNDM7LTEgc2Vjb25kLiBSZXR1cm4gdGhlIGNvbnN0YW50IEhXCiYjNDM7CSAqIGxpbWl0IGFuZCBsZXQgYWRqcGhhc2UgaGFuZGxlIG1vZGUtc3BlY2lmaWMgY2hlY2tzLgomIzQzOwkgKi8KJiM0MzsJcmV0dXJuIE5TRUNfUEVSX1NFQyAtIDE7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBjb25zdCBzdHJ1Y3QgcHRwX2Nsb2NrX2luZm8gemwzMDczeF9kcGxsX3B0cF9jbG9ja19pbmZvID0gewomIzQzOwkub3duZXIJCT0gVEhJU19NT0RVTEUsCiYjNDM7CS5tYXhfYWRqCT0gWkwzMDczWF9EUExMX1BUUF9NQVhfQURKLAomIzQzOwkuZ2V0dGltZXg2NAk9IHpsMzA3M3hfZHBsbF9wdHBfZ2V0dGltZXg2NCwKJiM0MzsJLnNldHRpbWU2NAk9IHpsMzA3M3hfZHBsbF9wdHBfc2V0dGltZTY0LAomIzQzOwkuYWRqdGltZQk9IHpsMzA3M3hfZHBsbF9wdHBfYWRqdGltZSwKJiM0MzsJLmFkamZpbmUJPSB6bDMwNzN4X2RwbGxfcHRwX2FkamZpbmUsCiYjNDM7CS5hZGpwaGFzZQk9IHpsMzA3M3hfZHBsbF9wdHBfYWRqcGhhc2UsCiYjNDM7CS5nZXRtYXhwaGFzZQk9IHpsMzA3M3hfZHBsbF9wdHBfZ2V0bWF4cGhhc2UsCiYjNDM7fTsKJiM0MzsKJiM0MzsvKioKJiM0MzsgKiB6bDMwNzN4X2RwbGxfcHRwX3JlZ2lzdGVyIC0gcmVnaXN0ZXIgUFRQIGNsb2NrIGZvciBhIERQTEwgY2hhbm5lbAomIzQzOyAqIEB6bGRwbGw6IERQTEwgY2hhbm5lbCB0byByZWdpc3RlciBQVFAgY2xvY2sgZm9yCiYjNDM7ICoKJiM0MzsgKiBSZXR1cm46IDAgb24gc3VjY2VzcywgJmx0OzAgb24gZXJyb3IKJiM0MzsgKi8KJiM0MztzdGF0aWMgaW50IHpsMzA3M3hfZHBsbF9wdHBfcmVnaXN0ZXIoc3RydWN0IHpsMzA3M3hfZHBsbCAqemxkcGxsKQomIzQzO3sKJiM0MzsJc3RydWN0IHpsMzA3M3hfZGV2ICp6bGRldiA9IHpsZHBsbC0mZ3Q7ZGV2OwomIzQzOwlzdHJ1Y3QgcHRwX2Nsb2NrICpwdHBfY2xvY2s7CiYjNDM7CiYjNDM7CXpsZHBsbC0mZ3Q7cHRwX2luZm8gPSB6bDMwNzN4X2RwbGxfcHRwX2Nsb2NrX2luZm87CiYjNDM7CXNucHJpbnRmKHpsZHBsbC0mZ3Q7cHRwX2luZm8ubmFtZSwgc2l6ZW9mKHpsZHBsbC0mZ3Q7cHRwX2luZm8ubmFtZSksCiYjNDM7CQkgJiMzNDslcy1kcGxsJXUmIzM0OywgZGV2X25hbWUoemxkZXYtJmd0O2RldiksIHpsZHBsbC0mZ3Q7aWQpOwomIzQzOwomIzQzOwlwdHBfY2xvY2sgPSBwdHBfY2xvY2tfcmVnaXN0ZXIoJmFtcDt6bGRwbGwtJmd0O3B0cF9pbmZvLCB6bGRldi0mZ3Q7ZGV2KTsKJiM0MzsJaWYgKElTX0VSUihwdHBfY2xvY2spKSB7CiYjNDM7CQlkZXZfZXJyKHpsZGV2LSZndDtkZXYsICYjMzQ7RmFpbGVkIHRvIHJlZ2lzdGVyIFBUUCBjbG9jayBmb3IgRFBMTCV1XG4mIzM0OywKJiM0MzsJCQl6bGRwbGwtJmd0O2lkKTsKJiM0MzsJCXJldHVybiBQVFJfRVJSKHB0cF9jbG9jayk7CiYjNDM7CX0KJiM0MzsKJiM0MzsJemxkcGxsLSZndDtwdHBfY2xvY2sgPSBwdHBfY2xvY2s7CiYjNDM7CiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MzsKJiM0MzsvKioKJiM0MzsgKiB6bDMwNzN4X2RwbGxfcHRwX3VucmVnaXN0ZXIgLSB1bnJlZ2lzdGVyIFBUUCBjbG9jayBmb3IgYSBEUExMIGNoYW5uZWwKJiM0MzsgKiBAemxkcGxsOiBEUExMIGNoYW5uZWwgdG8gdW5yZWdpc3RlciBQVFAgY2xvY2sgZm9yCiYjNDM7ICovCiYjNDM7c3RhdGljIHZvaWQgemwzMDczeF9kcGxsX3B0cF91bnJlZ2lzdGVyKHN0cnVjdCB6bDMwNzN4X2RwbGwgKnpsZHBsbCkKJiM0Mzt7CiYjNDM7CWlmICghSVNfRVJSX09SX05VTEwoemxkcGxsLSZndDtwdHBfY2xvY2spKSB7CiYjNDM7CQlwdHBfY2xvY2tfdW5yZWdpc3Rlcih6bGRwbGwtJmd0O3B0cF9jbG9jayk7CiYjNDM7CQl6bGRwbGwtJmd0O3B0cF9jbG9jayA9IE5VTEw7CiYjNDM7CX0KIH0KIAogLyoqCkBAIC0yMzk4LDYgJiM0MzsyNzM5LDQ3IEBAIHpsMzA3M3hfZHBsbF9yZWZfc3luY19wYWlyc19yZWdpc3RlcihzdHJ1Y3QgemwzMDczeF9kcGxsICp6bGRwbGwpCiAJcmV0dXJuIDA7CiB9CiAKJiM0MzsvKioKJiM0MzsgKiB6bDMwNzN4X2RwbGxfYWxsb2MgLSBhbGxvY2F0ZSBEUExMIGRldmljZQomIzQzOyAqIEB6bGRldjogcG9pbnRlciB0byB6bDMwNzN4IGRldmljZQomIzQzOyAqIEBjaDogRFBMTCBjaGFubmVsIG51bWJlcgomIzQzOyAqCiYjNDM7ICogQWxsb2NhdGVzIERQTEwgZGV2aWNlIHN0cnVjdHVyZSBmb3IgZ2l2ZW4gRFBMTCBjaGFubmVsLgomIzQzOyAqCiYjNDM7ICogUmV0dXJuOiBwb2ludGVyIHRvIERQTEwgZGV2aWNlIG9uIHN1Y2Nlc3MsIGVycm9yIHBvaW50ZXIgb24gZXJyb3IKJiM0MzsgKi8KJiM0MztzdHJ1Y3QgemwzMDczeF9kcGxsICoKJiM0Mzt6bDMwNzN4X2RwbGxfYWxsb2Moc3RydWN0IHpsMzA3M3hfZGV2ICp6bGRldiwgdTggY2gpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgemwzMDczeF9kcGxsICp6bGRwbGw7CiYjNDM7CiYjNDM7CXpsZHBsbCA9IGt6YWxsb2Nfb2JqKCp6bGRwbGwpOwomIzQzOwlpZiAoIXpsZHBsbCkKJiM0MzsJCXJldHVybiBFUlJfUFRSKC1FTk9NRU0pOwomIzQzOwomIzQzOwl6bGRwbGwtJmd0O2RldiA9IHpsZGV2OwomIzQzOwl6bGRwbGwtJmd0O2lkID0gY2g7CiYjNDM7CW11dGV4X2luaXQoJmFtcDt6bGRwbGwtJmd0O2xvY2spOwomIzQzOwlJTklUX0xJU1RfSEVBRCgmYW1wO3psZHBsbC0mZ3Q7cGlucyk7CiYjNDM7CiYjNDM7CXJldHVybiB6bGRwbGw7CiYjNDM7fQomIzQzOwomIzQzOy8qKgomIzQzOyAqIHpsMzA3M3hfZHBsbF9mcmVlIC0gZnJlZSBEUExMIGRldmljZQomIzQzOyAqIEB6bGRwbGw6IHBvaW50ZXIgdG8gemwzMDczeF9kcGxsIHN0cnVjdHVyZQomIzQzOyAqCiYjNDM7ICogRGVhbGxvY2F0ZXMgZ2l2ZW4gRFBMTCBkZXZpY2UgcHJldmlvdXNseSBhbGxvY2F0ZWQgYnkgQHpsMzA3M3hfZHBsbF9hbGxvYy4KJiM0MzsgKi8KJiM0Mzt2b2lkCiYjNDM7emwzMDczeF9kcGxsX2ZyZWUoc3RydWN0IHpsMzA3M3hfZHBsbCAqemxkcGxsKQomIzQzO3sKJiM0MzsJV0FSTih6bGRwbGwtJmd0O2RwbGxfZGV2LCAmIzM0O0RQTEwgZGV2aWNlIGlzIHN0aWxsIHJlZ2lzdGVyZWRcbiYjMzQ7KTsKJiM0MzsKJiM0MzsJbXV0ZXhfZGVzdHJveSgmYW1wO3psZHBsbC0mZ3Q7bG9jayk7CiYjNDM7CWtmcmVlKHpsZHBsbCk7CiYjNDM7fQomIzQzOwogLyoqCiAgKiB6bDMwNzN4X2RwbGxfcmVnaXN0ZXIgLSByZWdpc3RlciBEUExMIGRldmljZSBhbmQgYWxsIGl0cyBwaW5zCiAgKiBAemxkcGxsOiBwb2ludGVyIHRvIHpsMzA3M3hfZHBsbCBzdHJ1Y3R1cmUKQEAgLTI0MjgsNiAmIzQzOzI4MTAsMTMgQEAgemwzMDczeF9kcGxsX3JlZ2lzdGVyKHN0cnVjdCB6bDMwNzN4X2RwbGwgKnpsZHBsbCkKIAkJcmV0dXJuIHJjOwogCX0KIAomIzQzOwlyYyA9IHpsMzA3M3hfZHBsbF9wdHBfcmVnaXN0ZXIoemxkcGxsKTsKJiM0MzsJaWYgKHJjKSB7CiYjNDM7CQl6bDMwNzN4X2RwbGxfcGluc191bnJlZ2lzdGVyKHpsZHBsbCk7CiYjNDM7CQl6bDMwNzN4X2RwbGxfZGV2aWNlX3VucmVnaXN0ZXIoemxkcGxsKTsKJiM0MzsJCXJldHVybiByYzsKJiM0MzsJfQomIzQzOwogCXJldHVybiAwOwogfQogCkBAIC0yNDQxLDcgJiM0MzsyODMwLDcgQEAgemwzMDczeF9kcGxsX3JlZ2lzdGVyKHN0cnVjdCB6bDMwNzN4X2RwbGwgKnpsZHBsbCkKIHZvaWQKIHpsMzA3M3hfZHBsbF91bnJlZ2lzdGVyKHN0cnVjdCB6bDMwNzN4X2RwbGwgKnpsZHBsbCkKIHsKLQkvKiBVbnJlZ2lzdGVyIGFsbCBwaW5zIGFuZCBkcGxsICovCiYjNDM7CXpsMzA3M3hfZHBsbF9wdHBfdW5yZWdpc3Rlcih6bGRwbGwpOwogCXpsMzA3M3hfZHBsbF9waW5zX3VucmVnaXN0ZXIoemxkcGxsKTsKIAl6bDMwNzN4X2RwbGxfZGV2aWNlX3VucmVnaXN0ZXIoemxkcGxsKTsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvZHBsbC96bDMwNzN4L2RwbGwuaCBiL2RyaXZlcnMvZHBsbC96bDMwNzN4L2RwbGwuaAppbmRleCBmYWViYzQwMmJhMWI3Li45OTMyMjFkYzYzMjQ5IDEwMDY0NAotLS0gYS9kcml2ZXJzL2RwbGwvemwzMDczeC9kcGxsLmgKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9kcGxsL3psMzA3M3gvZHBsbC5oCkBAIC01LDYgJiM0Mzs1LDcgQEAKIAogI2luY2x1ZGUgJmx0O2xpbnV4L2RwbGwuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9saXN0LmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L3B0cF9jbG9ja19rZXJuZWwuaCZndDsKIAogI2luY2x1ZGUgJiMzNDtjb3JlLmgmIzM0OwogCkBAIC0yMiw2ICYjNDM7MjMsOCBAQAogICogQHR5cGU6IERQTEwgdHlwZSAoUFBTIG9yIEVFQykKICAqIEBsb2NrX3N0YXR1czogbGFzdCBzYXZlZCBEUExMIGxvY2sgc3RhdHVzCiAgKiBAcGluczogbGlzdCBvZiBwaW5zCiYjNDM7ICogQHB0cF9pbmZvOiBQVFAgY2xvY2sgaW5mbwomIzQzOyAqIEBwdHBfY2xvY2s6IHJlZ2lzdGVyZWQgUFRQIGNsb2NrIChvciBOVUxMKQogICovCiBzdHJ1Y3QgemwzMDczeF9kcGxsIHsKIAlzdHJ1Y3QgbGlzdF9oZWFkCQlsaXN0OwpAQCAtMzYsNiAmIzQzOzM5LDggQEAgc3RydWN0IHpsMzA3M3hfZHBsbCB7CiAJZW51bSBkcGxsX3R5cGUJCQl0eXBlOwogCWVudW0gZHBsbF9sb2NrX3N0YXR1cwkJbG9ja19zdGF0dXM7CiAJc3RydWN0IGxpc3RfaGVhZAkJcGluczsKJiM0MzsJc3RydWN0IHB0cF9jbG9ja19pbmZvCQlwdHBfaW5mbzsKJiM0MzsJc3RydWN0IHB0cF9jbG9jawkJKnB0cF9jbG9jazsKIH07CiAKIHN0cnVjdCB6bDMwNzN4X2RwbGwgKnpsMzA3M3hfZHBsbF9hbGxvYyhzdHJ1Y3QgemwzMDczeF9kZXYgKnpsZGV2LCB1OCBjaCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2RwbGwvemwzMDczeC9yZWdzLmggYi9kcml2ZXJzL2RwbGwvemwzMDczeC9yZWdzLmgKaW5kZXggYjcwZWFkN2Q0NDk1Yi4uZjNhNWUxMjE1YWEzNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9kcGxsL3psMzA3M3gvcmVncy5oCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvZHBsbC96bDMwNzN4L3JlZ3MuaApAQCAtMTc5LDYgJiM0MzsxNzksMjAgQEAKICNkZWZpbmUgWkxfRFBMTF9ERl9SRUFEX0NNRAkJCUdFTk1BU0soMiwgMCkKICNkZWZpbmUgWkxfRFBMTF9ERl9SRUFEX0NNRF9BQ0NfSQkJNAogCiYjNDM7I2RlZmluZSBaTF9SRUdfRFBMTF9USUVfQ1RSTAkJCVpMX1JFRyg1LCAweDMwLCAxKQomIzQzOyNkZWZpbmUgWkxfRFBMTF9USUVfQ1RSTF9PUAkJCUdFTk1BU0soMiwgMCkKJiM0MzsjZGVmaW5lIFpMX0RQTExfVElFX0NUUkxfT1BfV1IJCQk0CiYjNDM7CiYjNDM7I2RlZmluZSBaTF9SRUdfRFBMTF9USUVfQ1RSTF9NQVNLCQlaTF9SRUcoNSwgMHgzMSwgMSkKJiM0MzsKJiM0MzsjZGVmaW5lIFpMX1JFR19EUExMX1RPRF9DVFJMKF9pZHgpCQkJCQlcCiYjNDM7CVpMX1JFR19JRFgoX2lkeCwgNSwgMHgzOCwgMSwgWkwzMDczWF9NQVhfQ0hBTk5FTFMsIDEpCiYjNDM7I2RlZmluZSBaTF9EUExMX1RPRF9DVFJMX1NFTQkJCUJJVCg0KQomIzQzOyNkZWZpbmUgWkxfRFBMTF9UT0RfQ1RSTF9DTUQJCQlHRU5NQVNLKDMsIDApCiYjNDM7I2RlZmluZSBaTF9EUExMX1RPRF9DVFJMX0NNRF9XUl9ORVhUXzFIWgkxCiYjNDM7I2RlZmluZSBaTF9EUExMX1RPRF9DVFJMX0NNRF9SRF9DVVJSRU5UCQk4CiYjNDM7I2RlZmluZSBaTF9EUExMX1RPRF9DVFJMX0NNRF9SRF9ORVhUXzFIWgk5CiYjNDM7CiAjZGVmaW5lIFpMX1JFR19EUExMX01FQVNfQ1RSTAkJCVpMX1JFRyg1LCAweDUwLCAxKQogI2RlZmluZSBaTF9EUExMX01FQVNfQ1RSTF9FTgkJCUJJVCgwKQogI2RlZmluZSBaTF9EUExMX01FQVNfQ1RSTF9BVkdfRkFDVE9SCQlHRU5NQVNLKDcsIDQpCkBAIC0xOTMsNiAmIzQzOzIwNyw5IEBACiAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKiBSZWdpc3RlciBQYWdlcyA2LTcsIERQTEwgRGF0YQomIzQzOyAqCiYjNDM7ICogUGVyLWNoYW5uZWwgcmVnaXN0ZXJzIHdpdGggc3RyaWRlIDB4MjAuIENoYW5uZWxzIDAtMyByZXNpZGUgb24gcGFnZSA2LAomIzQzOyAqIGNoYW5uZWwgNCBvbiBwYWdlIDcuCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAogI2RlZmluZSBaTF9SRUdfRFBMTF9ERl9PRkZTRVRfMDMoX2lkeCkJCQkJCVwKQEAgLTIwMiw2ICYjNDM7MjE5LDI0IEBACiAJKChfaWR4KSAmbHQ7IDQgPyBaTF9SRUdfRFBMTF9ERl9PRkZTRVRfMDMoX2lkeCkgOiBaTF9SRUdfRFBMTF9ERl9PRkZTRVRfNCkKICNkZWZpbmUgWkxfRFBMTF9ERl9PRkZTRVRfVU5LTk9XTglTNjRfTUlOCiAKJiM0MzsjZGVmaW5lIFpMX1JFR19EUExMX1RJRV9EQVRBXzAzKF9pZHgpCQkJCQlcCiYjNDM7CVpMX1JFR19JRFgoX2lkeCwgNiwgMHgwQywgNiwgNCwgMHgyMCkKJiM0MzsjZGVmaW5lIFpMX1JFR19EUExMX1RJRV9EQVRBXzQJCQlaTF9SRUcoNywgMHgwQywgNikKJiM0MzsjZGVmaW5lIFpMX1JFR19EUExMX1RJRV9EQVRBKF9pZHgpCQkJCQlcCiYjNDM7CSgoX2lkeCkgJmx0OyA0ID8gWkxfUkVHX0RQTExfVElFX0RBVEFfMDMoX2lkeCkgOiBaTF9SRUdfRFBMTF9USUVfREFUQV80KQomIzQzOwomIzQzOyNkZWZpbmUgWkxfUkVHX0RQTExfVE9EX1NFQ18wMyhfaWR4KQkJCQkJXAomIzQzOwlaTF9SRUdfSURYKF9pZHgsIDYsIDB4MTIsIDYsIDQsIDB4MjApCiYjNDM7I2RlZmluZSBaTF9SRUdfRFBMTF9UT0RfU0VDXzQJCQlaTF9SRUcoNywgMHgxMiwgNikKJiM0MzsjZGVmaW5lIFpMX1JFR19EUExMX1RPRF9TRUMoX2lkeCkJCQkJCVwKJiM0MzsJKChfaWR4KSAmbHQ7IDQgPyBaTF9SRUdfRFBMTF9UT0RfU0VDXzAzKF9pZHgpIDogWkxfUkVHX0RQTExfVE9EX1NFQ180KQomIzQzOwomIzQzOyNkZWZpbmUgWkxfUkVHX0RQTExfVE9EX05TXzAzKF9pZHgpCQkJCQlcCiYjNDM7CVpMX1JFR19JRFgoX2lkeCwgNiwgMHgxOCwgNCwgNCwgMHgyMCkKJiM0MzsjZGVmaW5lIFpMX1JFR19EUExMX1RPRF9OU180CQkJWkxfUkVHKDcsIDB4MTgsIDQpCiYjNDM7I2RlZmluZSBaTF9SRUdfRFBMTF9UT0RfTlMoX2lkeCkJCQkJCVwKJiM0MzsJKChfaWR4KSAmbHQ7IDQgPyBaTF9SRUdfRFBMTF9UT0RfTlNfMDMoX2lkeCkgOiBaTF9SRUdfRFBMTF9UT0RfTlNfNCkKJiM0MzsKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICogUmVnaXN0ZXIgUGFnZSA5LCBTeW50aCBhbmQgT3V0cHV0CiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCkBAIC0yMjEsNiAmIzQzOzI1NiwyMyBAQAogI2RlZmluZSBaTF9PVVRQVVRfQ1RSTF9FTgkJCUJJVCgwKQogI2RlZmluZSBaTF9PVVRQVVRfQ1RSTF9TWU5USF9TRUwJCUdFTk1BU0soNiwgNCkKIAomIzQzOyNkZWZpbmUgWkxfUkVHX09VVFBVVF9TVEVQX1RJTUVfTUFTSwkJWkxfUkVHKDksIDB4MzYsIDIpCiYjNDM7CiYjNDM7I2RlZmluZSBaTF9SRUdfT1VUUFVUX1BIQVNFX1NURVBfQ1RSTAkJWkxfUkVHKDksIDB4MzgsIDEpCiYjNDM7I2RlZmluZSBaTF9PVVRQVVRfUEhBU0VfU1RFUF9DVFJMX0RQTEwJCUdFTk1BU0soNiwgNCkKJiM0MzsjZGVmaW5lIFpMX09VVFBVVF9QSEFTRV9TVEVQX0NUUkxfVE9EX1NURVAJQklUKDMpCiYjNDM7I2RlZmluZSBaTF9PVVRQVVRfUEhBU0VfU1RFUF9DVFJMX09QCQlHRU5NQVNLKDEsIDApCiYjNDM7I2RlZmluZSBaTF9PVVRQVVRfUEhBU0VfU1RFUF9DVFJMX09QX05PTkUJMAomIzQzOyNkZWZpbmUgWkxfT1VUUFVUX1BIQVNFX1NURVBfQ1RSTF9PUF9SRVNFVAkxCiYjNDM7I2RlZmluZSBaTF9PVVRQVVRfUEhBU0VfU1RFUF9DVFJMX09QX1JFQUQJMgomIzQzOyNkZWZpbmUgWkxfT1VUUFVUX1BIQVNFX1NURVBfQ1RSTF9PUF9XUklURQkzCiYjNDM7CiYjNDM7I2RlZmluZSBaTF9SRUdfT1VUUFVUX1BIQVNFX1NURVBfTlVNQkVSCQlaTF9SRUcoOSwgMHgzOSwgMSkKJiM0MzsKJiM0MzsjZGVmaW5lIFpMX1JFR19PVVRQVVRfUEhBU0VfU1RFUF9NQVNLCQlaTF9SRUcoOSwgMHgzYSwgMikKJiM0MzsKJiM0MzsjZGVmaW5lIFpMX1JFR19PVVRQVVRfUEhBU0VfU1RFUF9EQVRBCQlaTF9SRUcoOSwgMHgzYywgNCkKJiM0MzsKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKiBSZWdpc3RlciBQYWdlIDEwLCBSZWYgTWFpbGJveAogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzExIDE0OjAyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE4MjMxCgkJCQkJCQlvdXRwdXQ6IDI2CgkJCQkJCQl0aG91Z2h0czogNzg4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKlJlYWNoaW5nIHRoZSBQVFAgQ2xvY2sgaW4gUUVNVSoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBmb3IgdGhlIGB6bDMwNzN4YCBEUExMIGRyaXZlciwgYW5kIGl0JiMzOTtzIGFkZGluZyBQVFAgY2xvY2sgc3VwcG9ydC4gSXQgc2VlbXMgcHJldHR5IHN0cmFpZ2h0Zm9yd2FyZDogaXQgbW9kaWZpZXMgYEtjb25maWdgIHRvIGFkZCBhIGRlcGVuZGVuY3kgb24gYFBUUF8xNTg4X0NMT0NLYCwgYW5kIHRoZW4gYWRkcyBhbGwgdGhlc2UgUFRQLXJlbGF0ZWQgZnVuY3Rpb25zOiByZWFkL3dyaXRlL2FkanVzdCBUT0QsIHNldCBmcmVxdWVuY3kgb2Zmc2V0cywgY29udHJvbCB0aWUgYW5kIHBoYXNlIHN0ZXBzLCBhbmQgZmluYWxseSBpdCByZWdpc3RlcnMgdGhlIFBUUCBjbG9jayBpdHNlbGYuIFRoZSBzdGFuZGFyZCBvcGVyYXRpb25zIGxpa2UgZ2V0dGluZyBhbmQgc2V0dGluZyB0aGUgdGltZSwgYW5kIGFkanVzdGluZyB0aW1lL3BoYXNlIGFyZSBhbHNvIHRoZXJlLgoKTXkgaW1tZWRpYXRlIHF1ZXN0aW9uLCBhcyBhbHdheXMsIGlzOiBjYW4gSSBhY3R1YWxseSAqcmVhY2gqIHRoaXMgaW4gUUVNVT8gVGhpcyBkcml2ZXIgaXMgZm9yIGEgTWljcm9jaGlwIEF6dXJpdGUgRFBMTC9QVFAvU3luY0UgZGV2aWNlLCBhbmQgSSByZWNhbGwgaXQgaGFzIGJvdGggSTJDIGFuZCBTUEkgYnVzIGltcGxlbWVudGF0aW9ucy4gU28sIHRoYXQmIzM5O3MgZ29vZDsgSTJDIGFuZCBTUEkgZGV2aWNlcyBhcmUgKnVzdWFsbHkqIHJlYWNoYWJsZSBpbiBhIHZpcnR1YWxpemVkIGVudmlyb25tZW50LiBJIGNhbiB0eXBpY2FsbHkgaW5zdGFudGlhdGUgdGhlbSB0aHJvdWdoIHN5emthbGxlciYjMzk7cyBwc2V1ZG8tc3lzY2FsbHMgb3IgdmlhIHN5c2ZzL2RldmljZSB0cmVlLCBvciBieSBkaXJlY3RseSBmdXp6aW5nIHRoZSBJMkMgb3IgU1BJIGludGVyZmFjZXMuCgpXYWl0LCBzeXprYWxsZXIgZG9lcyBzdXBwb3J0IEkyQyBhbmQgU1BJIGZ1enppbmcuIEkgbmVlZCB0byBzZWUgaWYgdGhlcmUgYXJlIGFueSBzcGVjaWZpYyBzeXprYWxsZXIgZGVzY3JpcHRpb25zIGZvciBgemwzMDczeGAsIGJ1dCBpZiBub3QsIEkgY2FuIGp1c3QgcmVseSBvbiB0aGUgZ2VuZXJpYyBJMkMvU1BJIGZ1enppbmcgbWVjaGFuaXNtcy4gSSB0aGluayB0aGVyZSBpcyBgaTJjX25ld19jbGllbnRfZGV2aWNlYCBpbiBrZXJuZWwuCgpIYW5nIG9u4oCmIHRoZSBwcm9tcHQgc3BlY2lmaWVzIGNvZGUgdW5yZWFjaGFibGUgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzLiBJdCBtZW50aW9ucyBQQ0llIGhhcmR3YXJlLCB3aGljaCBpcyB1c3VhbGx5IGEgcGFpbi4gQnV0IHRoaXMgaXMgYW4gSTJDL1NQSSBkcml2ZXIhIFRoYXQmIzM5O3MgZ29vZCwgYmVjYXVzZSBJMkMgYW5kIFNQSSBhcmUgZGVmaW5pdGVseSBlbXVsYXRhYmxlIG9yIGZ1enplYWJsZSBpbiBRRU1VLiBTeXprYWxsZXIgaGFzIHN0dWZmIGxpa2UgYHN5el9pMmNfZGV2aWNlYCBvciBjYW4gZnV6eiB0aHJvdWdoIGAvZGV2L2kyYy0qYCBhbmQgYC9kZXYvc3BpZGV2KmAsIHNvIHRoYXQmIzM5O3MgYWxsIGdvb2QuCgpUaGUga2V5IHF1ZXN0aW9uIGlzLCBob3cgaXMgdGhpcyBkcml2ZXIgcHJvYmVkPyBJIG5lZWQgdG8gY2hlY2sgaG93IHRoZSBkcml2ZXIgaXMgcmVnaXN0ZXJlZCB3aXRoIHRoZSBJMkMgb3IgU1BJIHN1YnN5c3RlbS4gVGhhdCYjMzk7cyB0aGUgY3JpdGljYWwgc3RlcCB0byBtYWtlIHN1cmUgSSBjYW4gZXZlbiBnZXQgdG8gdGhlIFBUUCBmdW5jdGlvbnMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTEgMTQ6MDI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7emwzMDczeF9pMmNfcHJvYmUmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9kcGxsL3psMzA3M3gvaTJjLmMtMTAtXG5kcml2ZXJzL2RwbGwvemwzMDczeC9pMmMuYzoxMTpzdGF0aWMgaW50IHpsMzA3M3hfaTJjX3Byb2JlKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQpXG5kcml2ZXJzL2RwbGwvemwzMDczeC9pMmMuYy0xMi17XG4tLVxuZHJpdmVycy9kcGxsL3psMzA3M3gvaTJjLmM9NDg9c3RhdGljIHN0cnVjdCBpMmNfZHJpdmVyIHpsMzA3M3hfaTJjX2RyaXZlciA9IHtcbi0tXG5kcml2ZXJzL2RwbGwvemwzMDczeC9pMmMuYy01Mi1cdH0sXG5kcml2ZXJzL2RwbGwvemwzMDczeC9pMmMuYzo1MzpcdC5wcm9iZSA9IHpsMzA3M3hfaTJjX3Byb2JlLFxuZHJpdmVycy9kcGxsL3psMzA3M3gvaTJjLmMtNTQtXHQuaWRfdGFibGUgPSB6bDMwNzN4X2kyY19pZCxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMSAxNDowMjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxOTc4MwoJCQkJCQkJb3V0cHV0OiAyNgoJCQkJCQkJdGhvdWdodHM6IDE4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkludmVzdGlnYXRpbmcgUG90ZW50aWFsIERhdGEgU2hlZXQgTWlzbWF0Y2hlcyoqCgpSaWdodCwgbGV0JiMzOTtzIGdldCBkb3duIHRvIGJyYXNzIHRhY2tzLiBGaXJzdCwgbXkgaW1tZWRpYXRlIGNvbmNlcm4gaXMgYSBwb3RlbnRpYWwgbWlzbWF0Y2ggYmV0d2VlbiB0aGUgZGF0YSBzaGVldCBhbmQgdGhlIGFjdHVhbCBoYXJkd2FyZS4gSSBuZWVkIHRvIHF1aWNrbHkgZGV0ZXJtaW5lIGlmIHRoZXJl4oCZcyBhIGNvbXByZWhlbnNpdmUgJiMzNDtPRiBNYXRjaCBUYWJsZSYjMzQ7IG9yIGFuICYjMzQ7STJDIElEIFRhYmxlJiMzNDsgdGhhdCBjbGVhcmx5IG91dGxpbmVzIHRoZSBleHBlY3RlZCBkZXZpY2UgaWRlbnRpdGllcyBhbmQgdGhlaXIgY29ycmVzcG9uZGluZyBPcGVuIEZpcm13YXJlIChPRikgYmluZGluZ3Mgb3IgSTJDIGFkZHJlc3Nlcy4gVGhpcyBpcyBzdGFuZGFyZCBwcmVsaW1pbmFyeSBkdWUgZGlsaWdlbmNlLiBBIGNvbXByZWhlbnNpdmUgdGFibGUgc3RyZWFtbGluZXMgYW55IGRlYnVnZ2luZyBlZmZvcnQsIG9mZmVyaW5nIGEgc2luZ2xlIHNvdXJjZSBvZiB0cnV0aCBmb3IgZGV2aWNlIGlkZW50aWZpY2F0aW9uIGFuZCByZXNvdXJjZSBhbGxvY2F0aW9uLiBJZiBpdCYjMzk7cyB0aGVyZSwgZ3JlYXQhIEl04oCZbGwgc2F2ZSBzb21lIHRpbWUuIElmIG5vdCwgaXQgbWVhbnMgSSBuZWVkIHRvIG1hbnVhbGx5IGNvcnJlbGF0ZSBkYXRhIHNoZWV0IGluZm9ybWF0aW9uIHRvIGFjdHVhbCBvbi1ib2FyZCByZXNwb25zZXMg4oCTIGFuZCB0aGF04oCZbGwgYWRkIGNvbXBsZXhpdHkgdG8gdGhlIHByb2Nlc3MuIFRpbWUgdG8gZGlnIGluIGFuZCBmaW5kIHRob3NlIGFuc3dlcnMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTEgMTQ6MDI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7emwzMDczeF9pMmNfaWQmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9kcGxsL3psMzA3M3gvaTJjLmM9MTE9c3RhdGljIGludCB6bDMwNzN4X2kyY19wcm9iZShzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50KVxuLS1cbmRyaXZlcnMvZHBsbC96bDMwNzN4L2kyYy5jLTI3LVxuZHJpdmVycy9kcGxsL3psMzA3M3gvaTJjLmM6Mjg6c3RhdGljIGNvbnN0IHN0cnVjdCBpMmNfZGV2aWNlX2lkIHpsMzA3M3hfaTJjX2lkW10gPSB7XG5kcml2ZXJzL2RwbGwvemwzMDczeC9pMmMuYy0yOS1cdHsgLm5hbWUgPSBcJiMzNDt6bDMwNzMxXCYjMzQ7IH0sXG4tLVxuZHJpdmVycy9kcGxsL3psMzA3M3gvaTJjLmMtMzUtfTtcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2kyYy5jOjM2Ok1PRFVMRV9ERVZJQ0VfVEFCTEUoaTJjLCB6bDMwNzN4X2kyY19pZCk7XG5kcml2ZXJzL2RwbGwvemwzMDczeC9pMmMuYy0zNy1cbi0tXG5kcml2ZXJzL2RwbGwvemwzMDczeC9pMmMuYz00OD1zdGF0aWMgc3RydWN0IGkyY19kcml2ZXIgemwzMDczeF9pMmNfZHJpdmVyID0ge1xuLS1cbmRyaXZlcnMvZHBsbC96bDMwNzN4L2kyYy5jLTUzLVx0LnByb2JlID0gemwzMDczeF9pMmNfcHJvYmUsXG5kcml2ZXJzL2RwbGwvemwzMDczeC9pMmMuYzo1NDpcdC5pZF90YWJsZSA9IHpsMzA3M3hfaTJjX2lkLFxuZHJpdmVycy9kcGxsL3psMzA3M3gvaTJjLmMtNTUtfTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMSAxNDowMjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMDQzNAoJCQkJCQkJb3V0cHV0OiA0MQoJCQkJCQkJdGhvdWdodHM6IDU1MgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIEludGVncmF0aW9uIG9mIFBUUCBDbG9jayBTdXBwb3J0IGluIHRoZSBaTDMwNzNYIERyaXZlcioqCgpPa2F5LCBzbyBJIHNlZSB0aGF0IHRoaXMgcGF0Y2ggYWRkcyBQVFAgY2xvY2sgZnVuY3Rpb25hbGl0eSB0byB0aGUgWkwzMDczWCBkcml2ZXIuIFRoZSBrZXkgaGVyZSBpcyB0aGF0IEkyQyBkZXZpY2VzIGNhbiBiZSBjcmVhdGVkIGluIHVzZXJzcGFjZSB1c2luZyBgL3N5cy9idXMvaTJjL2RldmljZXMvaTJjLSovbmV3X2RldmljZWAsIGFsbG93aW5nIGZvciBwcm9iaW5nIHRoZSBkcml2ZXIgd2l0aGluIFFFTVUsIHdoaWNoIGlzIGdyZWF0IGZvciB0ZXN0aW5nLiBPbmNlIHByb2JlZCwgdGhlIGRyaXZlciByZWdpc3RlcnMgYSBQVFAgY2xvY2ssIHdoaWNoIGlzIGNydWNpYWwuIFRoZXNlIFBUUCBjbG9ja3MgYXJlIHRoZW4gZXhwb3NlZCB2aWEgYC9kZXYvcHRwKmAgYW5kIGNvbnRyb2xsZWQgdmlhIHN0YW5kYXJkIGBpb2N0bGBzIGxpa2UgYFBUUF9DTE9DS19HRVRDQVBTYCwgYFBUUF9FWFRUU19SRVFVRVNUYCwgYFBUUF9QRVJPVVRfUkVRVUVTVGAsIGFuZCB0aGUgbGlrZS4KClRoZSBwYXRjaCBpdHNlbGYgc3BlY2lmaWNhbGx5IGltcGxlbWVudHMgdGhlc2UgdXNlci1hY2Nlc3NpYmxlIGZ1bmN0aW9uczogYGdldHRpbWV4NjRgLCBgc2V0dGltZTY0YCwgYGFkanRpbWVgLCBgYWRqZmluZWAsIGFuZCBgYWRqcGhhc2VgLiBUaGVzZSBtYXAgZGlyZWN0bHkgdG8gUFRQIGBpb2N0bGBzLiBXZSBoYXZlIHRvIG1ha2Ugc3VyZSB0aGUgdXNlciBzcGFjZSBhcHBsaWNhdGlvbnMgYXJlIGNvbmZpZ3VyZWQgdG8gdXNlIHRoZXNlIGNvbW1hbmRzLgoKTG9va2luZyBhdCB0aGUgc3BlY2lmaWMgZnVuY3Rpb25zIGFkZGVkLCBuYW1lbHkgYHpsMzA3M3hfY2hhbl90b2RfcmVhZGAsIGB6bDMwNzN4X2NoYW5fdG9kX3dyaXRlYCwgYHpsMzA3M3hfY2hhbl90b2RfYWRqdXN0YCwgYHpsMzA3M3hfY2hhbl9kZl9vZmZzZXRfc2V0YCwgYHpsMzA3M3hfY2hhbl90aWVfd3JpdGVgLCBgemwzMDczeF9jaGFuX3BoYXNlX3N0ZXBgLCBgemwzMDczeF9kcGxsX3B0cF9nZXR0aW1leDY0YCwgYHpsMzA3M3hfZHBsbF9wdHBfc2V0dGltZTY0YCwgYHpsMzA3M3hfZHBsbF9wdHBfYWRqdGltZWAsIGB6bDMwNzN4X2RwbGxfcHRwX2FkamZpbmVgLCBhbmQgYHpsMzA3M3hfZHBsbF9wdHBfYWRqcGhhc2VgLCB0aGV5IGFyZSBjbGVhcmx5IHBhcnQgb2YgdGhlIFBUUCBjbG9jayBpbnRlcmZhY2UuIFRoaXMgY29uZmlybXMgdGhlIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsLgoKVGhlIGRyaXZlciBpcyBgWkwzMDczWGAsIGFuZCBpdCByZWxpZXMgb24gYm90aCBgTkVUYCBhbmQgYFBUUF8xNTg4X0NMT0NLYC4gVGhlIGNvbmZpZyBvcHRpb25zIEkgbmVlZCB0byB2ZXJpZnkgYXJlOiBgWkwzMDczWGAsIGBaTDMwNzNYX0kyQ2AsIGBaTDMwNzNYX1NQSWAsIGFuZCBgUFRQXzE1ODhfQ0xPQ0tgLiBMZXQgbWUganVzdCBkb3VibGUtY2hlY2sgdGhhdCBgWkwzMDczWGAgY29ycmVjdGx5IGRlcGVuZHMgb24gYE5FVGAgYW5kIGBQVFBfMTU4OF9DTE9DS2AuIFRpbWUgdG8gY2hlY2sgYGRyaXZlcnMvZHBsbC96bDMwNzN4L0tjb25maWdgIGZvciB0aGUgZGVwZW5kZW5jaWVzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzExIDE0OjAyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy9kcGxsL3psMzA3M3gvS2NvbmZpZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDEsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNTAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7ICAgMTpcdCMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxuICAgMjpcdFxuICAgMzpcdGNvbmZpZyBaTDMwNzNYXG4gICA0Olx0XHR0cmlzdGF0ZSBcJiMzNDtNaWNyb2NoaXAgQXp1cml0ZSBEUExML1BUUC9TeW5jRSBkZXZpY2VzXCYjMzQ7IGlmIENPTVBJTEVfVEVTVFxuICAgNTpcdFx0ZGVwZW5kcyBvbiBORVQgXHUwMDI2XHUwMDI2IFBUUF8xNTg4X0NMT0NLXG4gICA2Olx0XHRzZWxlY3QgRFBMTFxuICAgNzpcdFx0c2VsZWN0IE5FVF9ERVZMSU5LXG4gICA4Olx0XHRzZWxlY3QgUkVHTUFQXG4gICA5Olx0XHRoZWxwXG4gIDEwOlx0XHQgIFRoaXMgZHJpdmVyIHN1cHBvcnRzIE1pY3JvY2hpcCBBenVyaXRlIGZhbWlseSBEUExML1BUUC9TeW5jRVxuICAxMTpcdFx0ICBkZXZpY2VzIHRoYXQgc3VwcG9ydCB1cCB0byA1IGluZGVwZW5kZW50IERQTEwgY2hhbm5lbHMsXG4gIDEyOlx0XHQgIDEwIGlucHV0IHBpbnMgYW5kIHVwIHRvIDIwIG91dHB1dCBwaW5zLlxuICAxMzpcdFxuICAxNDpcdFx0ICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlLiBUaGUgbW9kdWxlXG4gIDE1Olx0XHQgIHdpbGwgYmUgY2FsbGVkIHpsMzA3M3guXG4gIDE2Olx0XG4gIDE3Olx0Y29uZmlnIFpMMzA3M1hfSTJDXG4gIDE4Olx0XHR0cmlzdGF0ZSBcJiMzNDtJMkMgYnVzIGltcGxlbWVudGF0aW9uIGZvciBNaWNyb2NoaXAgQXp1cml0ZSBkZXZpY2VzXCYjMzQ7XG4gIDE5Olx0XHRkZXBlbmRzIG9uIEkyQyBcdTAwMjZcdTAwMjYgTkVUIFx1MDAyNlx1MDAyNiBQVFBfMTU4OF9DTE9DS1xuICAyMDpcdFx0c2VsZWN0IFJFR01BUF9JMkNcbiAgMjE6XHRcdHNlbGVjdCBaTDMwNzNYXG4gIDIyOlx0XHRoZWxwXG4gIDIzOlx0XHQgIFRoaXMgaXMgSTJDIGJ1cyBpbXBsZW1lbnRhdGlvbiBmb3IgTWljcm9jaGlwIEF6dXJpdGUgRFBMTC9QVFAvU3luY0VcbiAgMjQ6XHRcdCAgZGV2aWNlcy5cbiAgMjU6XHRcbiAgMjY6XHRcdCAgVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlIG1vZHVsZSB3aWxsXG4gIDI3Olx0XHQgIGJlIGNhbGxlZCB6bDMwNzN4X2kyYy5cbiAgMjg6XHRcbiAgMjk6XHRjb25maWcgWkwzMDczWF9TUElcbiAgMzA6XHRcdHRyaXN0YXRlIFwmIzM0O1NQSSBidXMgaW1wbGVtZW50YXRpb24gZm9yIE1pY3JvY2hpcCBBenVyaXRlIGRldmljZXNcJiMzNDtcbiAgMzE6XHRcdGRlcGVuZHMgb24gTkVUIFx1MDAyNlx1MDAyNiBTUEkgXHUwMDI2XHUwMDI2IFBUUF8xNTg4X0NMT0NLXG4gIDMyOlx0XHRzZWxlY3QgUkVHTUFQX1NQSVxuICAzMzpcdFx0c2VsZWN0IFpMMzA3M1hcbiAgMzQ6XHRcdGhlbHBcbiAgMzU6XHRcdCAgVGhpcyBpcyBTUEkgYnVzIGltcGxlbWVudGF0aW9uIGZvciBNaWNyb2NoaXAgQXp1cml0ZSBEUExML1BUUC9TeW5jRVxuICAzNjpcdFx0ICBkZXZpY2VzLlxuICAzNzpcdFxuICAzODpcdFx0ICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGUgbW9kdWxlIHdpbGxcbiAgMzk6XHRcdCAgYmUgY2FsbGVkIHpsMzA3M3hfc3BpLlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzExIDE0OjAyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIyMjE2CgkJCQkJCQlvdXRwdXQ6IDM0MwoJCQkJCQkJdGhvdWdodHM6IDE0NTgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBNaWNyb2NoaXAgQXp1cml0ZSBEcml2ZXIgQ29uZmlndXJhdGlvbiBhbmQgQVBJKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIEZpcnN0LCBJIG5lZWQgdG8gZmlndXJlIG91dCB3aGljaCBrZXJuZWwgY29uZmlndXJhdGlvbnMgYXJlIGVzc2VudGlhbCBmb3IgdGhpcyBBenVyaXRlIERQTEwvUFRQL1N5bmNFIGRldmljZSBzdXBwb3J0LiBJbml0aWFsbHksIEkgdGhvdWdodCBpdCB3YXMgYSBzdHJhaWdodGZvcndhcmQgbGlzdDogYFpMMzA3M1hgLCBgWkwzMDczWF9JMkNgLCBgWkwzMDczWF9TUElgLCBgUFRQXzE1ODhfQ0xPQ0tgLCBgRFBMTGAsIGBORVRfREVWTElOS2AsIGBSRUdNQVBgLCBgUkVHTUFQX0kyQ2AsIGFuZCBgUkVHTUFQX1NQSWAuIEJ1dCB3YWl0LCBgWkwzMDczWGAgaXMgYWN0dWFsbHkgc2VsZWN0ZWQgYnkgYm90aCBgWkwzMDczWF9JMkNgIGFuZCBgWkwzMDczWF9TUElgLiBTbywgZGlyZWN0bHkgZW5hYmxpbmcgYFpMMzA3M1hgIG1pZ2h0IGJlIHVubmVjZXNzYXJ5OyBlbmFibGluZyB0aGUgSTJDIGFuZCBTUEkgY29uZmlndXJhdGlvbnMgc2hvdWxkIHN1ZmZpY2UsIHJpZ2h0PwoKVGhlbiBJIG5vdGljZSBgWkwzMDczWGAgaXMgdHJpc3RhdGUgYW5kIG9ubHkgZGlyZWN0bHkgZW5hYmxlZCBpZiBgQ09NUElMRV9URVNUYCBpcyBzZXQuIEdpdmVuIHRoaXMsIGRpcmVjdGx5IGVuYWJsaW5nIGBaTDMwNzNYYCBzZWVtcyB0byBiZSBvZmYgdGhlIHRhYmxlLCBhcyBgWkwzMDczWF9JMkNgIGFscmVhZHkgc2VsZWN0cyBpdCBhbmQgSSB3YW50IHRvIGF2b2lkIHRoZSBgQ09NUElMRV9URVNUYCByZXF1aXJlbWVudC4gU28sIEkgd2lsbCBmb2N1cyBvbiBlbmFibGluZyBgWkwzMDczWF9JMkNgIGFuZCBgWkwzMDczWF9TUElgLiBBbmQsIG9mIGNvdXJzZSwgdGhlIGBQVFBfMTU4OF9DTE9DS2AgaXMgYSBtdXN0LWhhdmUuCgpOZXh0LCBJIG5lZWQgdG8gaWRlbnRpZnkgdGhlIGNydWNpYWwgQVBJIGZ1bmN0aW9ucyBJIHNob3VsZCBmb2N1cyBvbi4gSSYjMzk7dmUgZ290IGEgbGlzdCBoZXJlOiBgemwzMDczeF9jaGFuX3RvZF9yZWFkYCwgYHpsMzA3M3hfY2hhbl90b2Rfd3JpdGVgLCBgemwzMDczeF9jaGFuX3RvZF9hZGp1c3RgLCBgemwzMDczeF9jaGFuX2RmX29mZnNldF9zZXRgLCBgemwzMDczeF9jaGFuX3RpZV93cml0ZWAsIGB6bDMwNzN4X2NoYW5fcGhhc2Vfc3RlcGAsIGB6bDMwNzN4X2RwbGxfcHRwX2dldHRpbWV4NjRgLCBgemwzMDczeF9kcGxsX3B0cF9zZXR0aW1lNjRgLCBgemwzMDczeF9kcGxsX3B0cF9hZGp0aW1lYCwgYHpsMzA3M3hfZHBsbF9wdHBfYWRqZmluZWAsIGFuZCBgemwzMDczeF9kcGxsX3B0cF9hZGpwaGFzZWAuCgpJIG5lZWQgdG8gY29uZmlybSBpZiB0aGVzZSBmdW5jdGlvbnMgYXJlIHN0YXRpYyBvciBub3QuIEV4YW1pbmluZyB0aGVtLCBpdCB0dXJucyBvdXQgdGhhdCBgemwzMDczeF9jaGFuX3RvZF9yZWFkYCwgYHpsMzA3M3hfY2hhbl90b2Rfd3JpdGVgLCBgemwzMDczeF9jaGFuX3RvZF9hZGp1c3RgLCBgemwzMDczeF9jaGFuX2RmX29mZnNldF9zZXRgLCBgemwzMDczeF9jaGFuX3RpZV93cml0ZWAsIGFuZCBgemwzMDczeF9jaGFuX3BoYXNlX3N0ZXBgIGFyZSAqbm90KiBzdGF0aWMsIHdoaWxlIHRoZSBgemwzMDczeF9kcGxsXypgIGZ1bmN0aW9ucyBhcmUgYWxsIHN0YXRpYy4KCldhaXQgYSBtaW51dGUsIHNpbmNlIHRoZSBgemwzMDczeF9kcGxsXypgIGZ1bmN0aW9ucyBhcmUgdXNlZCBhcyBmdW5jdGlvbiBwb2ludGVycyB3aXRoaW4gYHB0cF9jbG9ja19pbmZvYCwgdGhleSAqY2Fubm90KiBiZSBpbmxpbmVkLCBzbyB0aGUgY29tcGlsZXIgKm11c3QqIGhhdmUgZ2VuZXJhdGVkIGluZGl2aWR1YWwgc3ltYm9scyBmb3IgdGhlc2UgZnVuY3Rpb25zLiBUaGV5IGFyZSBlbnRyeSBwb2ludHMgZm9yIFBUUCBzdWJzeXN0ZW0sIHNvIEkgd2lsbCBpbmNsdWRlIHRoZW0uCgpTbywgdGhlIGRlZmluaXRpdmUgbGlzdCBvZiBmdW5jdGlvbnMgSSB3aWxsIGluY2x1ZGUgaXM6IGB6bDMwNzN4X2NoYW5fdG9kX3JlYWRgLCBgemwzMDczeF9jaGFuX3RvZF93cml0ZWAsIGB6bDMwNzN4X2NoYW5fdG9kX2FkanVzdGAsIGB6bDMwNzN4X2NoYW5fZGZfb2Zmc2V0X3NldGAsIGB6bDMwNzN4X2NoYW5fdGllX3dyaXRlYCwgYHpsMzA3M3hfY2hhbl9waGFzZV9zdGVwYCwgYHpsMzA3M3hfZHBsbF9wdHBfZ2V0dGltZXg2NGAsIGB6bDMwNzN4X2RwbGxfcHRwX3NldHRpbWU2NGAsIGB6bDMwNzN4X2RwbGxfcHRwX2FkanRpbWVgLCBgemwzMDczeF9kcGxsX3B0cF9hZGpmaW5lYCwgYW5kIGB6bDMwNzN4X2RwbGxfcHRwX2FkanBoYXNlYC4KCk5vdywgcmVnYXJkaW5nIHRoZSBjb25maWd1cmF0aW9ucywgSSYjMzk7bSBjb25maWRlbnQgYWJvdXQ6IGBaTDMwNzNYX0kyQ2AsIGBaTDMwNzNYX1NQSWAsIGFuZCBgUFRQXzE1ODhfQ0xPQ0tgLgoKSSYjMzk7bGwgcXVpY2tseSBjaGVjayBmb3IgZGVwZW5kZW5jaWVzLiBgWkwzMDczWF9JMkNgIHJlcXVpcmVzIGBJMkNgLCBgTkVUYCwgYW5kIGBQVFBfMTU4OAoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzExIDE0OjAzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtaTDMwNzNYX0kyQyYjMzQ7LAogICAgJiMzNDtaTDMwNzNYX1NQSSYjMzQ7LAogICAgJiMzNDtQVFBfMTU4OF9DTE9DSyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3psMzA3M3hfY2hhbl90b2RfcmVhZCYjMzQ7LAogICAgJiMzNDt6bDMwNzN4X2NoYW5fdG9kX3dyaXRlJiMzNDssCiAgICAmIzM0O3psMzA3M3hfY2hhbl90b2RfYWRqdXN0JiMzNDssCiAgICAmIzM0O3psMzA3M3hfY2hhbl9kZl9vZmZzZXRfc2V0JiMzNDssCiAgICAmIzM0O3psMzA3M3hfY2hhbl90aWVfd3JpdGUmIzM0OywKICAgICYjMzQ7emwzMDczeF9jaGFuX3BoYXNlX3N0ZXAmIzM0OywKICAgICYjMzQ7emwzMDczeF9kcGxsX3B0cF9nZXR0aW1leDY0JiMzNDssCiAgICAmIzM0O3psMzA3M3hfZHBsbF9wdHBfc2V0dGltZTY0JiMzNDssCiAgICAmIzM0O3psMzA3M3hfZHBsbF9wdHBfYWRqdGltZSYjMzQ7LAogICAgJiMzNDt6bDMwNzN4X2RwbGxfcHRwX2FkamZpbmUmIzM0OywKICAgICYjMzQ7emwzMDczeF9kcGxsX3B0cF9hZGpwaGFzZSYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRzIFBUUCBjbG9jayBzdXBwb3J0IHRvIHRoZSBNaWNyb2NoaXAgQXp1cml0ZSBEUExMIGRyaXZlciAoemwzMDczeCkuIEl0IGltcGxlbWVudHMgUFRQIGNsb2NrIG9wZXJhdGlvbnMgbGlrZSBnZXR0aW1leDY0LCBzZXR0aW1lNjQsIGFkanRpbWUsIGFkamZpbmUsIGFuZCBhZGpwaGFzZS4gVGhlIGRyaXZlciBjYW4gYmUgaW5zdGFudGlhdGVkIHZpYSBJMkMgb3IgU1BJIGluIFFFTVUsIGFuZCB0aGUgUFRQIG9wZXJhdGlvbnMgYXJlIHJlYWNoYWJsZSBmcm9tIHVzZXJzcGFjZSB2aWEgUFRQIGlvY3Rscy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7WkwzMDczWF9JMkMmIzM0OywKICAgICYjMzQ7WkwzMDczWF9TUEkmIzM0OywKICAgICYjMzQ7UFRQXzE1ODhfQ0xPQ0smIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDt6bDMwNzN4X2NoYW5fdG9kX3JlYWQmIzM0OywKICAgICYjMzQ7emwzMDczeF9jaGFuX3RvZF93cml0ZSYjMzQ7LAogICAgJiMzNDt6bDMwNzN4X2NoYW5fdG9kX2FkanVzdCYjMzQ7LAogICAgJiMzNDt6bDMwNzN4X2NoYW5fZGZfb2Zmc2V0X3NldCYjMzQ7LAogICAgJiMzNDt6bDMwNzN4X2NoYW5fdGllX3dyaXRlJiMzNDssCiAgICAmIzM0O3psMzA3M3hfY2hhbl9waGFzZV9zdGVwJiMzNDssCiAgICAmIzM0O3psMzA3M3hfZHBsbF9wdHBfZ2V0dGltZXg2NCYjMzQ7LAogICAgJiMzNDt6bDMwNzN4X2RwbGxfcHRwX3NldHRpbWU2NCYjMzQ7LAogICAgJiMzNDt6bDMwNzN4X2RwbGxfcHRwX2FkanRpbWUmIzM0OywKICAgICYjMzQ7emwzMDczeF9kcGxsX3B0cF9hZGpmaW5lJiMzNDssCiAgICAmIzM0O3psMzA3M3hfZHBsbF9wdHBfYWRqcGhhc2UmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcyBQVFAgY2xvY2sgc3VwcG9ydCB0byB0aGUgTWljcm9jaGlwIEF6dXJpdGUgRFBMTCBkcml2ZXIgKHpsMzA3M3gpLiBJdCBpbXBsZW1lbnRzIFBUUCBjbG9jayBvcGVyYXRpb25zIGxpa2UgZ2V0dGltZXg2NCwgc2V0dGltZTY0LCBhZGp0aW1lLCBhZGpmaW5lLCBhbmQgYWRqcGhhc2UuIFRoZSBkcml2ZXIgY2FuIGJlIGluc3RhbnRpYXRlZCB2aWEgSTJDIG9yIFNQSSBpbiBRRU1VLCBhbmQgdGhlIFBUUCBvcGVyYXRpb25zIGFyZSByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2UgdmlhIFBUUCBpb2N0bHMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzExIDE0OjAzPC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5JZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTEgMTQ6MDM8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+YmVzdC1leHBlbnNpdmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcyBQVFAgY2xvY2sgc3VwcG9ydCB0byB0aGUgTWljcm9jaGlwIEF6dXJpdGUgRFBMTC9QVFAvU3luY0UgZGV2aWNlcyBkcml2ZXIuIEl0IGludHJvZHVjZXMgZnVuY3Rpb25zIHRvIHJlYWQvd3JpdGUgVGltZSBvZiBEYXkgKFRvRCksIGFkanVzdCBwaGFzZSwgYWRqdXN0IGZyZXF1ZW5jeSwgYW5kIHJlZ2lzdGVyIGEgUFRQIGNsb2NrIGRldmljZS4gVGhlIGRyaXZlciBpbnRlcmFjdHMgd2l0aCB0aGUgUFRQIHN1YnN5c3RlbSBieSBwcm92aWRpbmcgY2FsbGJhY2tzIChgZ2V0dGltZXg2NGAsIGBzZXR0aW1lNjRgLCBgYWRqdGltZWAsIGBhZGpmaW5lYCwgYGFkanBoYXNlYCkuIEFsbCBzdHJ1Y3R1cmVzIGFsbG9jYXRlZCBkeW5hbWljYWxseSBhcmUgemVyby1pbml0aWFsaXplZCB1c2luZyBga3phbGxvY19vYmpgLiBUaGUgYHB0cF9jbG9ja19pbmZvYCBzdHJ1Y3R1cmUgaXMgY29waWVkIGZyb20gYSBzdGF0aWMgY29uc3QgdGVtcGxhdGUsIGVuc3VyaW5nIGFsbCB1bmluaXRpYWxpemVkIGZpZWxkcyBhcmUgemVyb2VkIGJ5IHRoZSBjb21waWxlciBiZWZvcmUgYHNucHJpbnRmYCBtb2RpZmllcyB0aGUgYG5hbWVgIGZpZWxkLiBUaGUgYHN0cnVjdCB0aW1lc3BlYzY0YCBwb3B1bGF0ZWQgYnkgdGhlIGRyaXZlciBpcyBmdWxseSBpbml0aWFsaXplZCBvbiBzdWNjZXNzLCBhbmQgZXJyb3JzIGFyZSBwcm9wZXJseSBwcm9wYWdhdGVkIHRvIHRoZSBQVFAgc3Vic3lzdGVtLCBwcmV2ZW50aW5nIHVuaW5pdGlhbGl6ZWQgZGF0YSBmcm9tIGJlaW5nIHVzZWQgb3IgY29waWVkIHRvIHVzZXJzcGFjZS4gTm8gbmV3IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzIG9yIGluZm8tbGVha3MgYXJlIGludHJvZHVjZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5CmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kCmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikKZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuCgpDUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjoKLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlCiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOCiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUAogIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuCi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsCiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLgoKUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTiwKTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy4KQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWQpzZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrcwp0aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLgoKTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3QKdW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsCmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5cwp0aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZwp1bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2wKZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLApjYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy4KClNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczoKMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2IKICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHMKICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC4KMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlcwogICBvciBzdHJ1Y3QgZmllbGRzLgozLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzCiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuCjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzCiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy4KClNldCBOZWVkc0tNU0FOPWZhbHNlIElGOgotIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyCiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0CiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLgotIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkCiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLgotIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy4KClVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGUKZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDk1N2RjZmQ2NzFlOGJjNTk3NzE5YzEyY2IyYjMwMWQyZjc0OWZlZDEKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgVHVlIEF1ZyAxMSAxNDowMjoyMiAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZHBsbC96bDMwNzN4L0tjb25maWcgYi9kcml2ZXJzL2RwbGwvemwzMDczeC9LY29uZmlnCmluZGV4IDViYmNhMTQwMDU4MTMuLmRhMTczMWFjZTE1ZjAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZHBsbC96bDMwNzN4L0tjb25maWcKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9kcGxsL3psMzA3M3gvS2NvbmZpZwpAQCAtMiw3ICYjNDM7Miw3IEBACiAKIGNvbmZpZyBaTDMwNzNYCiAJdHJpc3RhdGUgJiMzNDtNaWNyb2NoaXAgQXp1cml0ZSBEUExML1BUUC9TeW5jRSBkZXZpY2VzJiMzNDsgaWYgQ09NUElMRV9URVNUCi0JZGVwZW5kcyBvbiBORVQKJiM0MzsJZGVwZW5kcyBvbiBORVQgJmFtcDsmYW1wOyBQVFBfMTU4OF9DTE9DSwogCXNlbGVjdCBEUExMCiAJc2VsZWN0IE5FVF9ERVZMSU5LCiAJc2VsZWN0IFJFR01BUApAQCAtMTYsNyAmIzQzOzE2LDcgQEAgY29uZmlnIFpMMzA3M1gKIAogY29uZmlnIFpMMzA3M1hfSTJDCiAJdHJpc3RhdGUgJiMzNDtJMkMgYnVzIGltcGxlbWVudGF0aW9uIGZvciBNaWNyb2NoaXAgQXp1cml0ZSBkZXZpY2VzJiMzNDsKLQlkZXBlbmRzIG9uIEkyQyAmYW1wOyZhbXA7IE5FVAomIzQzOwlkZXBlbmRzIG9uIEkyQyAmYW1wOyZhbXA7IE5FVCAmYW1wOyZhbXA7IFBUUF8xNTg4X0NMT0NLCiAJc2VsZWN0IFJFR01BUF9JMkMKIAlzZWxlY3QgWkwzMDczWAogCWhlbHAKQEAgLTI4LDcgJiM0MzsyOCw3IEBAIGNvbmZpZyBaTDMwNzNYX0kyQwogCiBjb25maWcgWkwzMDczWF9TUEkKIAl0cmlzdGF0ZSAmIzM0O1NQSSBidXMgaW1wbGVtZW50YXRpb24gZm9yIE1pY3JvY2hpcCBBenVyaXRlIGRldmljZXMmIzM0OwotCWRlcGVuZHMgb24gTkVUICZhbXA7JmFtcDsgU1BJCiYjNDM7CWRlcGVuZHMgb24gTkVUICZhbXA7JmFtcDsgU1BJICZhbXA7JmFtcDsgUFRQXzE1ODhfQ0xPQ0sKIAlzZWxlY3QgUkVHTUFQX1NQSQogCXNlbGVjdCBaTDMwNzNYCiAJaGVscApkaWZmIC0tZ2l0IGEvZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jIGIvZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jCmluZGV4IDRlYzJjZjUzZGFkNDYuLmJjNmQ3MGQyNWQ3OTEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmMKQEAgLTMsNiAmIzQzOzMsNyBAQAogI2luY2x1ZGUgJmx0O2xpbnV4L2NsZWFudXAuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9kZWxheS5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L2Rldl9wcmludGsuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvcHRwX2Nsb2NrX2tlcm5lbC5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L3N0cmluZy5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L3R5cGVzLmgmZ3Q7CiAKQEAgLTE2Miw4ICYjNDM7MTYzLDggQEAgaW50IHpsMzA3M3hfY2hhbl9uY29fbW9kZV9zZXQoc3RydWN0IHpsMzA3M3hfZGV2ICp6bGRldiwgdTggaW5kZXgpCiAgKiBAemxkZXY6IHBvaW50ZXIgdG8gemwzMDczeF9kZXYgc3RydWN0dXJlCiAgKiBAaW5kZXg6IERQTEwgY2hhbm5lbCBpbmRleCB0byBmZXRjaCBzdGF0ZSBmb3IKICAqCi0gKiBSZWFkcyB0aGUgbW9kZV9yZWZzZWwgcmVnaXN0ZXIgYW5kIHJlZmVyZW5jZSBwcmlvcml0eSByZWdpc3RlcnMgZm9yCi0gKiB0aGUgZ2l2ZW4gRFBMTCBjaGFubmVsIGFuZCBzdG9yZXMgdGhlIHJhdyB2YWx1ZXMgZm9yIGxhdGVyIHVzZS4KJiM0MzsgKiBSZWFkcyB0aGUgbW9kZV9yZWZzZWwsIHN0YXR1cyBhbmQgcmVmZXJlbmNlIHByaW9yaXR5IHJlZ2lzdGVycyBmb3IKJiM0MzsgKiB0aGUgZ2l2ZW4gRFBMTCBjaGFubmVsIGFuZCBzdG9yZXMgdGhlIHZhbHVlcyBmb3IgbGF0ZXIgdXNlLgogICoKICAqIFJldHVybjogMCBvbiBzdWNjZXNzLCAmbHQ7MCBvbiBlcnJvcgogICovCkBAIC0yMzQsNiAmIzQzOzIzNSwzMjYgQEAgY29uc3Qgc3RydWN0IHpsMzA3M3hfY2hhbiAqemwzMDczeF9jaGFuX3N0YXRlX2dldChzdHJ1Y3QgemwzMDczeF9kZXYgKnpsZGV2LAogCXJldHVybiAmYW1wO3psZGV2LSZndDtjaGFuW2luZGV4XTsKIH0KIAomIzQzOy8qKgomIzQzOyAqIHpsMzA3M3hfY2hhbl90b2RfcmVhZHlfd2FpdCAtIHdhaXQgZm9yIFRvRCBzZW1hcGhvcmUgdG8gY2xlYXIKJiM0MzsgKiBAemxkZXY6IHBvaW50ZXIgdG8gemwzMDczeCBkZXZpY2UKJiM0MzsgKiBAY2g6IERQTEwgY2hhbm5lbCBpbmRleAomIzQzOyAqCiYjNDM7ICogQ2hlY2tzIHRoZSBUb0QgY29udHJvbCByZWdpc3RlciBzZW1hcGhvcmUgYml0LiBJZiBjbGVhciwgcmV0dXJucwomIzQzOyAqIGltbWVkaWF0ZWx5LiBPdGhlcndpc2UgcG9sbHMgdW50aWwgdGhlIGJpdCBpcyBjbGVhcmVkIGJ5IHRoZSBkZXZpY2UuCiYjNDM7ICoKJiM0MzsgKiBSZXR1cm46CiYjNDM7ICogKiAwCQkJLSBzdWNjZXNzCiYjNDM7ICogKiAlLUVCVVNZCQktIHRpbWVvdXQKJiM0MzsgKiAqICUtRU9QTk9UU1VQUAktIHVua25vd24gY29tbWFuZCBkZXRlY3RlZAomIzQzOyAqICogbmVnYXRpdmUJCS0gb3RoZXIgZXJyb3IKJiM0MzsgKi8KJiM0MztpbnQgemwzMDczeF9jaGFuX3RvZF9yZWFkeV93YWl0KHN0cnVjdCB6bDMwNzN4X2RldiAqemxkZXYsIHU4IGNoKQomIzQzO3sKJiM0MzsJdW5zaWduZWQgaW50IHRpbWVvdXQ7CiYjNDM7CXU4IHRvZF9jdHJsOwomIzQzOwlpbnQgcmM7CiYjNDM7CiYjNDM7CXJjID0gemwzMDczeF9yZWFkX3U4KHpsZGV2LCBaTF9SRUdfRFBMTF9UT0RfQ1RSTChjaCksICZhbXA7dG9kX2N0cmwpOwomIzQzOwlpZiAocmMpCiYjNDM7CQlyZXR1cm4gcmM7CiYjNDM7CiYjNDM7CWlmICghKHRvZF9jdHJsICZhbXA7IFpMX0RQTExfVE9EX0NUUkxfU0VNKSkKJiM0MzsJCXJldHVybiAwOwomIzQzOwomIzQzOwlzd2l0Y2ggKEZJRUxEX0dFVChaTF9EUExMX1RPRF9DVFJMX0NNRCwgdG9kX2N0cmwpKSB7CiYjNDM7CWNhc2UgWkxfRFBMTF9UT0RfQ1RSTF9DTURfV1JfTkVYVF8xSFo6CiYjNDM7CQl0aW1lb3V0ID0gWkxfUE9MTF9UT0RfV1JfVElNRU9VVF9VUzsKJiM0MzsJCWJyZWFrOwomIzQzOwljYXNlIFpMX0RQTExfVE9EX0NUUkxfQ01EX1JEX0NVUlJFTlQ6CiYjNDM7CWNhc2UgWkxfRFBMTF9UT0RfQ1RSTF9DTURfUkRfTkVYVF8xSFo6CiYjNDM7CQl0aW1lb3V0ID0gWkxfUE9MTF9UT0RfUkRfVElNRU9VVF9VUzsKJiM0MzsJCWJyZWFrOwomIzQzOwlkZWZhdWx0OgomIzQzOwkJV0FSTl9PTigxKTsKJiM0MzsJCXJldHVybiAtRU9QTk9UU1VQUDsKJiM0MzsJfQomIzQzOwomIzQzOwlyYyA9IHpsMzA3M3hfcG9sbF96ZXJvX3U4KHpsZGV2LCBaTF9SRUdfRFBMTF9UT0RfQ1RSTChjaCksCiYjNDM7CQkJCSAgWkxfRFBMTF9UT0RfQ1RSTF9TRU0sIHRpbWVvdXQpOwomIzQzOwomIzQzOwlyZXR1cm4gcmMgPT0gLUVUSU1FRE9VVCA/IC1FQlVTWSA6IHJjOwomIzQzO30KJiM0MzsKJiM0MzsvKioKJiM0MzsgKiB6bDMwNzN4X2NoYW5fdG9kX2N0cmwgLSBpc3N1ZSBUb0QgY29tbWFuZAomIzQzOyAqIEB6bGRldjogcG9pbnRlciB0byB6bDMwNzN4IGRldmljZQomIzQzOyAqIEBjaDogRFBMTCBjaGFubmVsIGluZGV4CiYjNDM7ICogQGNtZDogVG9EIGNvbW1hbmQgdG8gZXhlY3V0ZQomIzQzOyAqCiYjNDM7ICogV3JpdGVzIHRoZSBzZW1hcGhvcmUgYW5kIGNvbW1hbmQgdG8gZHBsbF90b2RfY3RybC4gVGhlIGNhbGxlciBtdXN0CiYjNDM7ICogZW5zdXJlIHRoZSBkZXZpY2UgaXMgcmVhZHkgKHNlbWFwaG9yZSBjbGVhcikgYmVmb3JlIGNhbGxpbmcgYW5kCiYjNDM7ICogbXVzdCB3YWl0IGZvciBjb21wbGV0aW9uIGlmIG5lZWRlZC4KJiM0MzsgKgomIzQzOyAqIFJldHVybjogMCBvbiBzdWNjZXNzLCAmbHQ7MCBvbiBlcnJvcgomIzQzOyAqLwomIzQzO3N0YXRpYyBpbnQgemwzMDczeF9jaGFuX3RvZF9jdHJsKHN0cnVjdCB6bDMwNzN4X2RldiAqemxkZXYsIHU4IGNoLCB1OCBjbWQpCiYjNDM7ewomIzQzOwlyZXR1cm4gemwzMDczeF93cml0ZV91OCh6bGRldiwgWkxfUkVHX0RQTExfVE9EX0NUUkwoY2gpLAomIzQzOwkJCQlaTF9EUExMX1RPRF9DVFJMX1NFTSB8IGNtZCk7CiYjNDM7fQomIzQzOwomIzQzOy8qKgomIzQzOyAqIHpsMzA3M3hfY2hhbl90b2RfcmVhZCAtIHJlYWQgVG9EIHJlZ2lzdGVycyBhZnRlciBpc3N1aW5nIGEgY29tbWFuZAomIzQzOyAqIEB6bGRldjogcG9pbnRlciB0byB6bDMwNzN4IGRldmljZQomIzQzOyAqIEBjaDogRFBMTCBjaGFubmVsIGluZGV4CiYjNDM7ICogQG5leHRfaHo6IGlmIHRydWUsIHJlYWQgcHJlZGljdGVkIFRvRCBhdCBuZXh0IDEgSHo7IG90aGVyd2lzZSByZWFkIGN1cnJlbnQKJiM0MzsgKiBAdHM6IHRpbWVzcGVjIHRvIHN0b3JlIHRoZSByZXN1bHQKJiM0MzsgKiBAc3RzOiBvcHRpb25hbCBzeXN0ZW0gdGltZXN0YW1wIHBhaXIgZm9yIGNyb3NzLXRpbWVzdGFtcGluZwomIzQzOyAqCiYjNDM7ICogQ29udGV4dDogQ2FsbGVyIG11c3Qgc2VyaWFsaXplIGFsbCB6bDMwNzN4X2NoYW5fdG9kXyogY2FsbHMgZXh0ZXJuYWxseS4KJiM0MzsgKiBSZXR1cm46IDAgb24gc3VjY2VzcywgJmx0OzAgb24gZXJyb3IKJiM0MzsgKi8KJiM0MztpbnQgemwzMDczeF9jaGFuX3RvZF9yZWFkKHN0cnVjdCB6bDMwNzN4X2RldiAqemxkZXYsIHU4IGNoLAomIzQzOwkJCSAgYm9vbCBuZXh0X2h6LCBzdHJ1Y3QgdGltZXNwZWM2NCAqdHMsCiYjNDM7CQkJICBzdHJ1Y3QgcHRwX3N5c3RlbV90aW1lc3RhbXAgKnN0cykKJiM0Mzt7CiYjNDM7CXUzMiBuc2VjOwomIzQzOwl1NjQgc2VjOwomIzQzOwl1OCBjbWQ7CiYjNDM7CWludCByYzsKJiM0MzsKJiM0MzsJaWYgKG5leHRfaHopCiYjNDM7CQljbWQgPSBaTF9EUExMX1RPRF9DVFJMX0NNRF9SRF9ORVhUXzFIWjsKJiM0MzsJZWxzZQomIzQzOwkJY21kID0gWkxfRFBMTF9UT0RfQ1RSTF9DTURfUkRfQ1VSUkVOVDsKJiM0MzsKJiM0MzsJLyogV2FpdCBmb3IgYW55IHByZXZpb3VzIFRvRCBvcGVyYXRpb24gdG8gY29tcGxldGUgKi8KJiM0MzsJcmMgPSB6bDMwNzN4X2NoYW5fdG9kX3JlYWR5X3dhaXQoemxkZXYsIGNoKTsKJiM0MzsJaWYgKHJjKQomIzQzOwkJcmV0dXJuIHJjOwomIzQzOwomIzQzOwlwdHBfcmVhZF9zeXN0ZW1fcHJldHMoc3RzKTsKJiM0MzsJcmMgPSB6bDMwNzN4X2NoYW5fdG9kX2N0cmwoemxkZXYsIGNoLCBjbWQpOwomIzQzOwlpZiAocmMpCiYjNDM7CQlyZXR1cm4gcmM7CiYjNDM7CiYjNDM7CXJjID0gemwzMDczeF9jaGFuX3RvZF9yZWFkeV93YWl0KHpsZGV2LCBjaCk7CiYjNDM7CWlmIChyYykKJiM0MzsJCXJldHVybiByYzsKJiM0MzsJcHRwX3JlYWRfc3lzdGVtX3Bvc3R0cyhzdHMpOwomIzQzOwomIzQzOwlyYyA9IHpsMzA3M3hfcmVhZF91NDgoemxkZXYsIFpMX1JFR19EUExMX1RPRF9TRUMoY2gpLCAmYW1wO3NlYyk7CiYjNDM7CWlmIChyYykKJiM0MzsJCXJldHVybiByYzsKJiM0MzsKJiM0MzsJLyogSFcgbmFub3NlY29uZHMgYXJlIGFsd2F5cyBpbiBbMCwgTlNFQ19QRVJfU0VDKSByYW5nZSAqLwomIzQzOwlyYyA9IHpsMzA3M3hfcmVhZF91MzIoemxkZXYsIFpMX1JFR19EUExMX1RPRF9OUyhjaCksICZhbXA7bnNlYyk7CiYjNDM7CWlmIChyYykKJiM0MzsJCXJldHVybiByYzsKJiM0MzsKJiM0MzsJdHMtJmd0O3R2X3NlYyA9IHNlYzsKJiM0MzsJdHMtJmd0O3R2X25zZWMgPSBuc2VjOwomIzQzOwomIzQzOwlyZXR1cm4gMDsKJiM0Mzt9CiYjNDM7CiYjNDM7LyoqCiYjNDM7ICogemwzMDczeF9jaGFuX3RvZF93cml0ZSAtIHdyaXRlIFRvRCByZWdpc3RlcnMgYW5kIHRyaWdnZXIgMSBIeiB1cGRhdGUKJiM0MzsgKiBAemxkZXY6IHBvaW50ZXIgdG8gemwzMDczeCBkZXZpY2UKJiM0MzsgKiBAY2g6IERQTEwgY2hhbm5lbCBpbmRleAomIzQzOyAqIEB0czogdGltZSB0byBzZXQKJiM0MzsgKgomIzQzOyAqIENvbnRleHQ6IENhbGxlciBtdXN0IHNlcmlhbGl6ZSBhbGwgemwzMDczeF9jaGFuX3RvZF8qIGNhbGxzIGV4dGVybmFsbHkuCiYjNDM7ICogUmV0dXJuOiAwIG9uIHN1Y2Nlc3MsICZsdDswIG9uIGVycm9yCiYjNDM7ICovCiYjNDM7aW50IHpsMzA3M3hfY2hhbl90b2Rfd3JpdGUoc3RydWN0IHpsMzA3M3hfZGV2ICp6bGRldiwgdTggY2gsCiYjNDM7CQkJICAgc3RydWN0IHRpbWVzcGVjNjQgdHMpCiYjNDM7ewomIzQzOwlpbnQgcmM7CiYjNDM7CiYjNDM7CS8qIFdhaXQgZm9yIGFueSBwcmV2aW91cyBUb0Qgb3BlcmF0aW9uIHRvIGNvbXBsZXRlICovCiYjNDM7CXJjID0gemwzMDczeF9jaGFuX3RvZF9yZWFkeV93YWl0KHpsZGV2LCBjaCk7CiYjNDM7CWlmIChyYykKJiM0MzsJCXJldHVybiByYzsKJiM0MzsKJiM0MzsJcmMgPSB6bDMwNzN4X3dyaXRlX3U0OCh6bGRldiwgWkxfUkVHX0RQTExfVE9EX1NFQyhjaCksIHRzLnR2X3NlYyk7CiYjNDM7CWlmIChyYykKJiM0MzsJCXJldHVybiByYzsKJiM0MzsKJiM0MzsJcmMgPSB6bDMwNzN4X3dyaXRlX3UzMih6bGRldiwgWkxfUkVHX0RQTExfVE9EX05TKGNoKSwgdHMudHZfbnNlYyk7CiYjNDM7CWlmIChyYykKJiM0MzsJCXJldHVybiByYzsKJiM0MzsKJiM0MzsJcmV0dXJuIHpsMzA3M3hfY2hhbl90b2RfY3RybCh6bGRldiwgY2gsCiYjNDM7CQkJCSAgICAgWkxfRFBMTF9UT0RfQ1RSTF9DTURfV1JfTkVYVF8xSFopOwomIzQzO30KJiM0MzsKJiM0MzsvKioKJiM0MzsgKiB6bDMwNzN4X2NoYW5fdG9kX2FkanVzdCAtIGF0b21pYyBUb0QgcmVhZC1tb2RpZnktd3JpdGUgd2l0aCByb2xsb3ZlciBndWFyZAomIzQzOyAqIEB6bGRldjogcG9pbnRlciB0byB6bDMwNzN4IGRldmljZQomIzQzOyAqIEBjaDogRFBMTCBjaGFubmVsIGluZGV4CiYjNDM7ICogQGRlbHRhOiB0aW1lIGFkanVzdG1lbnQgdG8gYXBwbHkKJiM0MzsgKgomIzQzOyAqIFJlYWRzIHRoZSBuZXh0LUh6IFRvRCBhbmQgY3VycmVudCBUb0QsIHRoZW4gY2hlY2tzIHdoZXRoZXIgZW5vdWdoIHRpbWUKJiM0MzsgKiByZW1haW5zIGJlZm9yZSB0aGUgbmV4dCAxIEh6IHJvbGxvdmVyIHRvIHNhZmVseSBjb21wbGV0ZSB0aGUgd3JpdGUuCiYjNDM7ICogUmUtcmVhZHMgaWYgdGhlIDEgSHogdGljayBjcm9zc2VkIGJldHdlZW4gdGhlIHR3byByZWFkcyBvciBpZiBsZXNzCiYjNDM7ICogdGhhbiAyMCBtcyByZW1haW5zIGJlZm9yZSB0aGUgbmV4dCByb2xsb3Zlci4gQXBwbGllcyBAZGVsdGEgYW5kIHdyaXRlcwomIzQzOyAqIHRoZSByZXN1bHQgYmFjay4KJiM0MzsgKgomIzQzOyAqIENvbnRleHQ6IENhbGxlciBtdXN0IHNlcmlhbGl6ZSBhbGwgemwzMDczeF9jaGFuX3RvZF8qIGNhbGxzIGV4dGVybmFsbHkuCiYjNDM7ICogUmV0dXJuOiAwIG9uIHN1Y2Nlc3MsICZsdDswIG9uIGVycm9yCiYjNDM7ICovCiYjNDM7aW50IHpsMzA3M3hfY2hhbl90b2RfYWRqdXN0KHN0cnVjdCB6bDMwNzN4X2RldiAqemxkZXYsIHU4IGNoLAomIzQzOwkJCSAgICBzdHJ1Y3QgdGltZXNwZWM2NCBkZWx0YSkKJiM0Mzt7CiYjNDM7I2RlZmluZSBaTF9UT0RfTUFYX1JFVFJJRVMJMjAKJiM0MzsJc3RhdGljIGNvbnN0IGxvbmcgdGhyZXNob2xkX25zID0gMjAgKiBOU0VDX1BFUl9NU0VDOwomIzQzOwlzdHJ1Y3QgdGltZXNwZWM2NCB0c19uZXh0LCB0c19jdXIsIGRpZmY7CiYjNDM7CWludCByYywgaTsKJiM0MzsKJiM0MzsJZm9yIChpID0gMDsgaSAmbHQ7IFpMX1RPRF9NQVhfUkVUUklFUzsgaSYjNDM7JiM0MzspIHsKJiM0MzsJCXJjID0gemwzMDczeF9jaGFuX3RvZF9yZWFkKHpsZGV2LCBjaCwgdHJ1ZSwgJmFtcDt0c19uZXh0LCBOVUxMKTsKJiM0MzsJCWlmIChyYykKJiM0MzsJCQlyZXR1cm4gcmM7CiYjNDM7CiYjNDM7CQlyYyA9IHpsMzA3M3hfY2hhbl90b2RfcmVhZCh6bGRldiwgY2gsIGZhbHNlLCAmYW1wO3RzX2N1ciwgTlVMTCk7CiYjNDM7CQlpZiAocmMpCiYjNDM7CQkJcmV0dXJuIHJjOwomIzQzOwomIzQzOwkJLyogRW5zdXJlIHRoZSAxIEh6IHRpY2sgZGlkIG5vdCBjcm9zcyBiZXR3ZWVuIHRoZSB0d28gcmVhZHMKJiM0MzsJCSAqIGFuZCB0aGF0IGVub3VnaCBtYXJnaW4gcmVtYWlucyB0byBjb21wbGV0ZSB0aGUgd3JpdGUuCiYjNDM7CQkgKi8KJiM0MzsJCWRpZmYgPSB0aW1lc3BlYzY0X3N1Yih0c19uZXh0LCB0c19jdXIpOwomIzQzOwkJaWYgKGRpZmYudHZfc2VjICZndDsgMCB8fAomIzQzOwkJICAgICghZGlmZi50dl9zZWMgJmFtcDsmYW1wOyBkaWZmLnR2X25zZWMgJmd0Oz0gdGhyZXNob2xkX25zKSkKJiM0MzsJCQlicmVhazsKJiM0MzsJfQomIzQzOwlpZiAoaSA9PSBaTF9UT0RfTUFYX1JFVFJJRVMpIHsKJiM0MzsJCWRldl93YXJuKHpsZGV2LSZndDtkZXYsCiYjNDM7CQkJICYjMzQ7RFBMTCV1IFRvRCBhZGp1c3QgZmFpbGVkIHRvIGdldCBzdGFibGUgbWFyZ2luXG4mIzM0OywKJiM0MzsJCQkgY2gpOwomIzQzOwkJcmV0dXJuIC1FQlVTWTsKJiM0MzsJfQomIzQzOwomIzQzOwkvKiBBcHBseSBkZWx0YSB0byB0aGUgbmV4dC1IeiBUb0QgKi8KJiM0MzsJdHNfbmV4dCA9IHRpbWVzcGVjNjRfYWRkKHRzX25leHQsIGRlbHRhKTsKJiM0MzsJaWYgKCF0aW1lc3BlYzY0X3ZhbGlkKCZhbXA7dHNfbmV4dCkpCiYjNDM7CQlyZXR1cm4gLUVJTlZBTDsKJiM0MzsKJiM0MzsJcmV0dXJuIHpsMzA3M3hfY2hhbl90b2Rfd3JpdGUoemxkZXYsIGNoLCB0c19uZXh0KTsKJiM0MzsjdW5kZWYgWkxfVE9EX01BWF9SRVRSSUVTCiYjNDM7fQomIzQzOwomIzQzOy8qKgomIzQzOyAqIHpsMzA3M3hfY2hhbl9kZl9vZmZzZXRfc2V0IC0gd3JpdGUgZGVsdGEgZnJlcXVlbmN5IG9mZnNldCB0byBoYXJkd2FyZQomIzQzOyAqIEB6bGRldjogcG9pbnRlciB0byB6bDMwNzN4IGRldmljZQomIzQzOyAqIEBjaDogRFBMTCBjaGFubmVsIGluZGV4CiYjNDM7ICogQG9mZnNldDogZnJlcXVlbmN5IG9mZnNldCBpbiAyXi00OCBzdGVwcwomIzQzOyAqCiYjNDM7ICogQ29udGV4dDogQ2FsbGVyIG11c3QgaG9sZCB0aGUgcGVyLURQTEwgbG9jay4KJiM0MzsgKiBSZXR1cm46IDAgb24gc3VjY2VzcywgJmx0OzAgb24gZXJyb3IKJiM0MzsgKi8KJiM0MztpbnQgemwzMDczeF9jaGFuX2RmX29mZnNldF9zZXQoc3RydWN0IHpsMzA3M3hfZGV2ICp6bGRldiwgdTggY2gsIHM2NCBvZmZzZXQpCiYjNDM7ewomIzQzOwlpbnQgcmM7CiYjNDM7CiYjNDM7CXJjID0gemwzMDczeF93cml0ZV91NDgoemxkZXYsIFpMX1JFR19EUExMX0RGX09GRlNFVChjaCksIG9mZnNldCk7CiYjNDM7CWlmICghcmMpCiYjNDM7CQl6bGRldi0mZ3Q7Y2hhbltjaF0uZGZfb2Zmc2V0ID0gb2Zmc2V0OwomIzQzOwomIzQzOwlyZXR1cm4gcmM7CiYjNDM7fQomIzQzOwomIzQzOy8qKgomIzQzOyAqIHpsMzA3M3hfY2hhbl90aWVfd3JpdGUgLSBhZGp1c3QgRFBMTCBwaGFzZSB1c2luZyBUSUUgd3JpdGUKJiM0MzsgKiBAemxkZXY6IHBvaW50ZXIgdG8gemwzMDczeCBkZXZpY2UKJiM0MzsgKiBAY2g6IERQTEwgY2hhbm5lbCBpbmRleAomIzQzOyAqIEBkZWx0YV9uczogcGhhc2UgYWRqdXN0bWVudCBpbiBuYW5vc2Vjb25kcyAobXVzdCBiZSBpbiAoLTFzLCAxcykpCiYjNDM7ICoKJiM0MzsgKiBDb252ZXJ0cyBuYW5vc2Vjb25kcyB0byBUSUUgdW5pdHMgKDAuMDEgcHMpIGFuZCB3cml0ZXMgVElFIGRhdGEKJiM0MzsgKiB0byB0aGUgc3BlY2lmaWVkIGNoYW5uZWwuCiYjNDM7ICoKJiM0MzsgKiBSZXR1cm46IDAgb24gc3VjY2VzcywgJmx0OzAgb24gZXJyb3IKJiM0MzsgKi8KJiM0MztpbnQgemwzMDczeF9jaGFuX3RpZV93cml0ZShzdHJ1Y3QgemwzMDczeF9kZXYgKnpsZGV2LCB1OCBjaCwgczY0IGRlbHRhX25zKQomIzQzO3sKJiM0MzsJczY0IHRpZV9kYXRhOwomIzQzOwlpbnQgcmM7CiYjNDM7CiYjNDM7CWlmIChXQVJOX09OKGRlbHRhX25zICZsdDs9IC1OU0VDX1BFUl9TRUMgfHwgZGVsdGFfbnMgJmd0Oz0gTlNFQ19QRVJfU0VDKSkKJiM0MzsJCXJldHVybiAtRVJBTkdFOwomIzQzOwomIzQzOwlndWFyZChtdXRleCkoJmFtcDt6bGRldi0mZ3Q7dGllX2xvY2spOwomIzQzOwomIzQzOwkvKiBXYWl0IGZvciBhbnkgcHJldmlvdXMgVElFIG9wZXJhdGlvbiB0byBjb21wbGV0ZSAqLwomIzQzOwlyYyA9IHpsMzA3M3hfcG9sbF96ZXJvX3U4KHpsZGV2LCBaTF9SRUdfRFBMTF9USUVfQ1RSTCwKJiM0MzsJCQkJICBaTF9EUExMX1RJRV9DVFJMX09QLAomIzQzOwkJCQkgIFpMX1BPTExfVElFX1dSX1RJTUVPVVRfVVMpOwomIzQzOwlpZiAocmMpCiYjNDM7CQlyZXR1cm4gcmM7CiYjNDM7CiYjNDM7CS8qIENvbnZlcnQgbnMgdG8gVElFIHVuaXRzICgwLjAxIHBzID0gMTBeLTE0IHMpICovCiYjNDM7CXRpZV9kYXRhID0gZGVsdGFfbnMgKiAxMDAwMDBMTDsKJiM0MzsKJiM0MzsJcmMgPSB6bDMwNzN4X3dyaXRlX3U0OCh6bGRldiwgWkxfUkVHX0RQTExfVElFX0RBVEEoY2gpLCB0aWVfZGF0YSk7CiYjNDM7CWlmIChyYykKJiM0MzsJCXJldHVybiByYzsKJiM0MzsKJiM0MzsJcmMgPSB6bDMwNzN4X3dyaXRlX3U4KHpsZGV2LCBaTF9SRUdfRFBMTF9USUVfQ1RSTF9NQVNLLCBCSVQoY2gpKTsKJiM0MzsJaWYgKHJjKQomIzQzOwkJcmV0dXJuIHJjOwomIzQzOwomIzQzOwlyZXR1cm4gemwzMDczeF93cml0ZV91OCh6bGRldiwgWkxfUkVHX0RQTExfVElFX0NUUkwsCiYjNDM7CQkJCVpMX0RQTExfVElFX0NUUkxfT1BfV1IpOwomIzQzO30KJiM0MzsKJiM0MzsvKioKJiM0MzsgKiB6bDMwNzN4X2NoYW5fcGhhc2Vfc3RlcCAtIGV4ZWN1dGUgb25lIG91dHB1dCBwaGFzZSBzdGVwIG9wZXJhdGlvbgomIzQzOyAqIEB6bGRldjogcG9pbnRlciB0byB6bDMwNzN4IGRldmljZQomIzQzOyAqIEBjaDogRFBMTCBjaGFubmVsIGluZGV4CiYjNDM7ICogQG91dF9tYXNrOiBiaXRtYXNrIG9mIG91dHB1dHMgdG8gc3RlcAomIzQzOyAqIEBzdGVwX2N5Y2xlczogcGhhc2Ugc3RlcCBpbiBzeW50aGVzaXplciBjbG9jayBjeWNsZXMKJiM0MzsgKiBAdG9kX3N0ZXA6IGFsc28gc3RlcCB0aGUgVG9EIGNvdW50ZXIKJiM0MzsgKgomIzQzOyAqIEFsbCBtYXNrZWQgb3V0cHV0cyBtdXN0IHVzZSBzeW50aGVzaXplcnMgb2YgdGhlIHNhbWUgZnJlcXVlbmN5IHNpbmNlCiYjNDM7ICogdGhlIHN0ZXAgdmFsdWUgaXMgaW4gc3ludGhlc2l6ZXIgY2xvY2sgY3ljbGVzLgomIzQzOyAqCiYjNDM7ICogUmV0dXJuOiAwIG9uIHN1Y2Nlc3MsICZsdDswIG9uIGVycm9yCiYjNDM7ICovCiYjNDM7aW50IHpsMzA3M3hfY2hhbl9waGFzZV9zdGVwKHN0cnVjdCB6bDMwNzN4X2RldiAqemxkZXYsIHU4IGNoLAomIzQzOwkJCSAgICB1MTYgb3V0X21hc2ssIHMzMiBzdGVwX2N5Y2xlcywKJiM0MzsJCQkgICAgYm9vbCB0b2Rfc3RlcCkKJiM0Mzt7CiYjNDM7CXU4IGN0cmw7CiYjNDM7CWludCByYzsKJiM0MzsKJiM0MzsJZ3VhcmQobXV0ZXgpKCZhbXA7emxkZXYtJmd0O3BoYXNlX3N0ZXBfbG9jayk7CiYjNDM7CiYjNDM7CS8qIFdhaXQgZm9yIGFueSBwcmV2aW91cyBwaGFzZSBzdGVwIG9wZXJhdGlvbiB0byBjb21wbGV0ZSAqLwomIzQzOwlyYyA9IHpsMzA3M3hfcG9sbF96ZXJvX3U4KHpsZGV2LCBaTF9SRUdfT1VUUFVUX1BIQVNFX1NURVBfQ1RSTCwKJiM0MzsJCQkJICBaTF9PVVRQVVRfUEhBU0VfU1RFUF9DVFJMX09QLAomIzQzOwkJCQkgIFpMX1BPTExfUEhBU0VfU1RFUF9USU1FT1VUX1VTKTsKJiM0MzsJaWYgKHJjKQomIzQzOwkJcmV0dXJuIHJjOwomIzQzOwomIzQzOwlyYyA9IHpsMzA3M3hfd3JpdGVfdTMyKHpsZGV2LCBaTF9SRUdfT1VUUFVUX1BIQVNFX1NURVBfREFUQSwKJiM0MzsJCQkgICAgICAgc3RlcF9jeWNsZXMpOwomIzQzOwlpZiAocmMpCiYjNDM7CQlyZXR1cm4gcmM7CiYjNDM7CiYjNDM7CXJjID0gemwzMDczeF93cml0ZV91MTYoemxkZXYsIFpMX1JFR19PVVRQVVRfUEhBU0VfU1RFUF9NQVNLLCBvdXRfbWFzayk7CiYjNDM7CWlmIChyYykKJiM0MzsJCXJldHVybiByYzsKJiM0MzsKJiM0MzsJcmMgPSB6bDMwNzN4X3dyaXRlX3U4KHpsZGV2LCBaTF9SRUdfT1VUUFVUX1BIQVNFX1NURVBfTlVNQkVSLCAxKTsKJiM0MzsJaWYgKHJjKQomIzQzOwkJcmV0dXJuIHJjOwomIzQzOwomIzQzOwljdHJsID0gRklFTERfUFJFUChaTF9PVVRQVVRfUEhBU0VfU1RFUF9DVFJMX0RQTEwsIGNoKSB8CiYjNDM7CSAgICAgICBGSUVMRF9QUkVQKFpMX09VVFBVVF9QSEFTRV9TVEVQX0NUUkxfT1AsCiYjNDM7CQkJICBaTF9PVVRQVVRfUEhBU0VfU1RFUF9DVFJMX09QX1dSSVRFKTsKJiM0MzsJaWYgKHRvZF9zdGVwKQomIzQzOwkJY3RybCB8PSBaTF9PVVRQVVRfUEhBU0VfU1RFUF9DVFJMX1RPRF9TVEVQOwomIzQzOwomIzQzOwlyZXR1cm4gemwzMDczeF93cml0ZV91OCh6bGRldiwgWkxfUkVHX09VVFBVVF9QSEFTRV9TVEVQX0NUUkwsIGN0cmwpOwomIzQzO30KJiM0MzsKIC8qKgogICogemwzMDczeF9jaGFuX3N0YXRlX3NldCAtIGNvbW1pdCBEUExMIGNoYW5uZWwgc3RhdGUgY2hhbmdlcyB0byBoYXJkd2FyZQogICogQHpsZGV2OiBwb2ludGVyIHRvIHpsMzA3M3hfZGV2IHN0cnVjdHVyZQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5oIGIvZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5oCmluZGV4IGRjOWM2ZDk1YmRlZTcuLjk5YzNiNzA4OGY2NzggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uaAomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmgKQEAgLTUsMTAgJiM0Mzs1LDEyIEBACiAKICNpbmNsdWRlICZsdDtsaW51eC9iaXRmaWVsZC5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L3N0ZGRlZi5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC90aW1lNjQuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC90eXBlcy5oJmd0OwogCiAjaW5jbHVkZSAmIzM0O3JlZ3MuaCYjMzQ7CiAKJiM0MztzdHJ1Y3QgcHRwX3N5c3RlbV90aW1lc3RhbXA7CiBzdHJ1Y3QgemwzMDczeF9kZXY7CiAKIC8qKgpAQCAtNDIsNiAmIzQzOzQ0LDIxIEBAIGludCB6bDMwNzN4X2NoYW5fc3RhdGVfc2V0KHN0cnVjdCB6bDMwNzN4X2RldiAqemxkZXYsIHU4IGluZGV4LAogaW50IHpsMzA3M3hfY2hhbl9zdGF0ZV91cGRhdGUoc3RydWN0IHpsMzA3M3hfZGV2ICp6bGRldiwgdTggaW5kZXgpOwogaW50IHpsMzA3M3hfY2hhbl9uY29fbW9kZV9zZXQoc3RydWN0IHpsMzA3M3hfZGV2ICp6bGRldiwgdTggaW5kZXgpOwogCiYjNDM7aW50IHpsMzA3M3hfY2hhbl90b2RfcmVhZHlfd2FpdChzdHJ1Y3QgemwzMDczeF9kZXYgKnpsZGV2LCB1OCBjaCk7CiYjNDM7aW50IHpsMzA3M3hfY2hhbl90b2RfcmVhZChzdHJ1Y3QgemwzMDczeF9kZXYgKnpsZGV2LCB1OCBjaCwKJiM0MzsJCQkgIGJvb2wgbmV4dF9oeiwgc3RydWN0IHRpbWVzcGVjNjQgKnRzLAomIzQzOwkJCSAgc3RydWN0IHB0cF9zeXN0ZW1fdGltZXN0YW1wICpzdHMpOwomIzQzO2ludCB6bDMwNzN4X2NoYW5fdG9kX3dyaXRlKHN0cnVjdCB6bDMwNzN4X2RldiAqemxkZXYsIHU4IGNoLAomIzQzOwkJCSAgIHN0cnVjdCB0aW1lc3BlYzY0IHRzKTsKJiM0MztpbnQgemwzMDczeF9jaGFuX3RvZF9hZGp1c3Qoc3RydWN0IHpsMzA3M3hfZGV2ICp6bGRldiwgdTggY2gsCiYjNDM7CQkJICAgIHN0cnVjdCB0aW1lc3BlYzY0IGRlbHRhKTsKJiM0MztpbnQgemwzMDczeF9jaGFuX3BoYXNlX3N0ZXAoc3RydWN0IHpsMzA3M3hfZGV2ICp6bGRldiwgdTggY2gsCiYjNDM7CQkJICAgIHUxNiBvdXRfbWFzaywgczMyIHN0ZXBfY3ljbGVzLCBib29sIHRvZF9zdGVwKTsKJiM0MzsKJiM0MztpbnQgemwzMDczeF9jaGFuX2RmX29mZnNldF9zZXQoc3RydWN0IHpsMzA3M3hfZGV2ICp6bGRldiwgdTggY2gsIHM2NCBvZmZzZXQpOwomIzQzOwomIzQzO2ludCB6bDMwNzN4X2NoYW5fdGllX3dyaXRlKHN0cnVjdCB6bDMwNzN4X2RldiAqemxkZXYsIHU4IGNoLCBzNjQgZGVsdGFfbnMpOwomIzQzOwogLyoqCiAgKiB6bDMwNzN4X2NoYW5fZGZfb2Zmc2V0X2dldCAtIGdldCBjYWNoZWQgZGZfb2Zmc2V0IHZzIHRyYWNrZWQgcmVmZXJlbmNlCiAgKiBAY2hhbjogcG9pbnRlciB0byBjaGFubmVsIHN0YXRlCkBAIC0yMDAsNiAmIzQzOzIxNywyMSBAQCBzdGF0aWMgaW5saW5lIGJvb2wgemwzMDczeF9jaGFuX21vZGVfaXNfcmVmbG9jayhjb25zdCBzdHJ1Y3QgemwzMDczeF9jaGFuICpjaGFuKQogCXJldHVybiB6bDMwNzN4X2NoYW5fbW9kZV9nZXQoY2hhbikgPT0gWkxfRFBMTF9NT0RFX1JFRlNFTF9NT0RFX1JFRkxPQ0s7CiB9CiAKJiM0MzsvKioKJiM0MzsgKiB6bDMwNzN4X2NoYW5fbW9kZV9zdXBwb3J0c190aWUgLSBjaGVjayBpZiBjaGFubmVsIG1vZGUgc3VwcG9ydHMgVElFIHdyaXRlCiYjNDM7ICogQGNoYW46IHBvaW50ZXIgdG8gY2hhbm5lbCBzdGF0ZQomIzQzOyAqCiYjNDM7ICogVElFIHdyaXRlIGlzIHN1cHBvcnRlZCBpbiBBVVRPIGFuZCBSRUZMT0NLIG1vZGVzIHJlZ2FyZGxlc3Mgb2YgbG9jayBzdGF0ZS4KJiM0MzsgKgomIzQzOyAqIFJldHVybjogdHJ1ZSBpZiBUSUUgd3JpdGUgaXMgc3VwcG9ydGVkLCBmYWxzZSBvdGhlcndpc2UKJiM0MzsgKi8KJiM0MztzdGF0aWMgaW5saW5lIGJvb2wKJiM0Mzt6bDMwNzN4X2NoYW5fbW9kZV9zdXBwb3J0c190aWUoY29uc3Qgc3RydWN0IHpsMzA3M3hfY2hhbiAqY2hhbikKJiM0Mzt7CiYjNDM7CXJldHVybiB6bDMwNzN4X2NoYW5fbW9kZV9pc19hdXRvKGNoYW4pIHx8CiYjNDM7CQl6bDMwNzN4X2NoYW5fbW9kZV9pc19yZWZsb2NrKGNoYW4pOwomIzQzO30KJiM0MzsKIC8qKgogICogemwzMDczeF9jaGFuX2lzX2hvX3JlYWR5IC0gY2hlY2sgaWYgaG9sZG92ZXIgaXMgcmVhZHkKICAqIEBjaGFuOiBwb2ludGVyIHRvIGNoYW5uZWwgc3RhdGUKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZHBsbC96bDMwNzN4L2NvcmUuYyBiL2RyaXZlcnMvZHBsbC96bDMwNzN4L2NvcmUuYwppbmRleCA1YjJkNzdmMmMyMjg4Li4yMzBkZjA4ZTI3Y2QxIDEwMDY0NAotLS0gYS9kcml2ZXJzL2RwbGwvemwzMDczeC9jb3JlLmMKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9kcGxsL3psMzA3M3gvY29yZS5jCkBAIC0zMjIsNyAmIzQzOzMyMiw3IEBAIGludCB6bDMwNzN4X3dyaXRlX3U0OChzdHJ1Y3QgemwzMDczeF9kZXYgKnpsZGV2LCB1bnNpZ25lZCBpbnQgcmVnLCB1NjQgdmFsKQogaW50IHpsMzA3M3hfcG9sbF96ZXJvX3U4KHN0cnVjdCB6bDMwNzN4X2RldiAqemxkZXYsIHVuc2lnbmVkIGludCByZWcsCiAJCQkgdTggbWFzaywgdW5zaWduZWQgaW50IHRpbWVvdXRfdXMpCiB7Ci0jZGVmaW5lIFpMX1BPTExfU0xFRVBfVVMgMTAKJiM0MzsJdW5zaWduZWQgaW50IHNsZWVwX3VzID0gdGltZW91dF91cyAvIDUwOwogCXVuc2lnbmVkIGludCB2YWw7CiAKIAkvKiBDaGVjayB0aGUgcmVnaXN0ZXIgaXMgOGJpdCAqLwpAQCAtMzM2LDcgJiM0MzszMzYsNyBAQCBpbnQgemwzMDczeF9wb2xsX3plcm9fdTgoc3RydWN0IHpsMzA3M3hfZGV2ICp6bGRldiwgdW5zaWduZWQgaW50IHJlZywKIAlyZWcgPSBaTF9SRUdfQUREUihyZWcpICYjNDM7IFpMX1JBTkdFX09GRlNFVDsKIAogCXJldHVybiByZWdtYXBfcmVhZF9wb2xsX3RpbWVvdXQoemxkZXYtJmd0O3JlZ21hcCwgcmVnLCB2YWwsICEodmFsICZhbXA7IG1hc2spLAotCQkJCQlaTF9QT0xMX1NMRUVQX1VTLCB0aW1lb3V0X3VzKTsKJiM0MzsJCQkJCXNsZWVwX3VzLCB0aW1lb3V0X3VzKTsKIH0KIAogaW50IHpsMzA3M3hfbWJfb3Aoc3RydWN0IHpsMzA3M3hfZGV2ICp6bGRldiwgdW5zaWduZWQgaW50IG9wX3JlZywgdTggb3BfdmFsLApAQCAtNTExLDYgJiM0Mzs1MTEsMTEgQEAgemwzMDczeF9kZXZfc3RhdGVfZmV0Y2goc3RydWN0IHpsMzA3M3hfZGV2ICp6bGRldikKIAlpbnQgcmM7CiAJdTggaTsKIAomIzQzOwlyYyA9IHpsMzA3M3hfcmVhZF91MTYoemxkZXYsIFpMX1JFR19PVVRQVVRfU1RFUF9USU1FX01BU0ssCiYjNDM7CQkJICAgICAgJmFtcDt6bGRldi0mZ3Q7b3V0X3N0ZXBfdGltZV9tYXNrKTsKJiM0MzsJaWYgKHJjKQomIzQzOwkJcmV0dXJuIHJjOwomIzQzOwogCWZvciAoaSA9IDA7IGkgJmx0OyBaTDMwNzNYX05VTV9SRUZTOyBpJiM0MzsmIzQzOykgewogCQlyYyA9IHpsMzA3M3hfcmVmX3N0YXRlX2ZldGNoKHpsZGV2LCBpKTsKIAkJaWYgKHJjKSB7CkBAIC0xMDM0LDYgJiM0MzsxMDM5LDE0IEBAIGludCB6bDMwNzN4X2Rldl9wcm9iZShzdHJ1Y3QgemwzMDczeF9kZXYgKnpsZGV2KQogCSAqIGFuZC9vciBwb2xscyBhcmUgcmVxdWlyZWQgdG8gYmUgZG9uZSBhdG9taWNhbGx5LgogCSAqLwogCXJjID0gZGV2bV9tdXRleF9pbml0KHpsZGV2LSZndDtkZXYsICZhbXA7emxkZXYtJmd0O211bHRpb3BfbG9jayk7CiYjNDM7CWlmIChyYykKJiM0MzsJCXJldHVybiBkZXZfZXJyX3Byb2JlKHpsZGV2LSZndDtkZXYsIHJjLAomIzQzOwkJCQkgICAgICYjMzQ7RmFpbGVkIHRvIGluaXRpYWxpemUgbXV0ZXhcbiYjMzQ7KTsKJiM0MzsJcmMgPSBkZXZtX211dGV4X2luaXQoemxkZXYtJmd0O2RldiwgJmFtcDt6bGRldi0mZ3Q7cGhhc2Vfc3RlcF9sb2NrKTsKJiM0MzsJaWYgKHJjKQomIzQzOwkJcmV0dXJuIGRldl9lcnJfcHJvYmUoemxkZXYtJmd0O2RldiwgcmMsCiYjNDM7CQkJCSAgICAgJiMzNDtGYWlsZWQgdG8gaW5pdGlhbGl6ZSBtdXRleFxuJiMzNDspOwomIzQzOwlyYyA9IGRldm1fbXV0ZXhfaW5pdCh6bGRldi0mZ3Q7ZGV2LCAmYW1wO3psZGV2LSZndDt0aWVfbG9jayk7CiAJaWYgKHJjKQogCQlyZXR1cm4gZGV2X2Vycl9wcm9iZSh6bGRldi0mZ3Q7ZGV2LCByYywKIAkJCQkgICAgICYjMzQ7RmFpbGVkIHRvIGluaXRpYWxpemUgbXV0ZXhcbiYjMzQ7KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZHBsbC96bDMwNzN4L2NvcmUuaCBiL2RyaXZlcnMvZHBsbC96bDMwNzN4L2NvcmUuaAppbmRleCA3OGRjMjA4ZjNlZWEyLi42N2MxMGUyNTk1MTE4IDEwMDY0NAotLS0gYS9kcml2ZXJzL2RwbGwvemwzMDczeC9jb3JlLmgKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9kcGxsL3psMzA3M3gvY29yZS5oCkBAIC0yNiw2ICYjNDM7MjYsMTAgQEAgc3RydWN0IHpsMzA3M3hfZHBsbDsKICNkZWZpbmUgWkxfUE9MTF9IV1JFR19USU1FT1VUX1VTCSg1MCAqIFVTRUNfUEVSX01TRUMpCiAjZGVmaW5lIFpMX1BPTExfTUJfVElNRU9VVF9VUwkJKDMwICogVVNFQ19QRVJfTVNFQykKICNkZWZpbmUgWkxfUE9MTF9QSEFTRV9FUlJfVElNRU9VVF9VUwkoNTAgKiBVU0VDX1BFUl9NU0VDKQomIzQzOyNkZWZpbmUgWkxfUE9MTF9QSEFTRV9TVEVQX1RJTUVPVVRfVVMJKDMwMDAgKiBVU0VDX1BFUl9NU0VDKQomIzQzOyNkZWZpbmUgWkxfUE9MTF9USUVfV1JfVElNRU9VVF9VUwkoMTAwMCAqIFVTRUNfUEVSX01TRUMpCiYjNDM7I2RlZmluZSBaTF9QT0xMX1RPRF9SRF9USU1FT1VUX1VTCSgzMCAqIFVTRUNfUEVSX01TRUMpCiYjNDM7I2RlZmluZSBaTF9QT0xMX1RPRF9XUl9USU1FT1VUX1VTCSgxMDAwICogVVNFQ19QRVJfTVNFQykKIAogZW51bSB6bDMwNzN4X2ZsYWdzIHsKIAlaTDMwNzNYX0ZMQUdfUkVGX1BIQVNFX0NPTVBfMzJfQklULApAQCAtNTUsNiAmIzQzOzU5LDggQEAgc3RydWN0IHpsMzA3M3hfY2hpcF9pbmZvIHsKICAqIEByZWdtYXA6IHJlZ21hcCB0byBhY2Nlc3MgZGV2aWNlIHJlZ2lzdGVycwogICogQGluZm86IGRldGVjdGVkIGNoaXAgaW5mbwogICogQG11bHRpb3BfbG9jazogdG8gc2VyaWFsaXplIG11bHRpcGxlIHJlZ2lzdGVyIG9wZXJhdGlvbnMKJiM0MzsgKiBAdGllX2xvY2s6IHRvIHNlcmlhbGl6ZSBUSUUgd3JpdGUgb3BlcmF0aW9ucwomIzQzOyAqIEBwaGFzZV9zdGVwX2xvY2s6IHRvIHNlcmlhbGl6ZSBvdXRwdXQgcGhhc2Ugc3RlcCBvcGVyYXRpb25zCiAgKiBAcmVmOiBhcnJheSBvZiBpbnB1dCByZWZlcmVuY2VzJiMzOTsgaW52YXJpYW50cwogICogQG91dDogYXJyYXkgb2Ygb3V0cyYjMzk7IGludmFyaWFudHMKICAqIEBzeW50aDogYXJyYXkgb2Ygc3ludGhzJiMzOTsgaW52YXJpYW50cwpAQCAtNjMsNiAmIzQzOzY5LDcgQEAgc3RydWN0IHpsMzA3M3hfY2hpcF9pbmZvIHsKICAqIEBrd29ya2VyOiB0aHJlYWQgZm9yIHBlcmlvZGljIHdvcmsKICAqIEB3b3JrOiBwZXJpb2RpYyB3b3JrCiAgKiBAY2xvY2tfaWQ6IGNsb2NrIGlkIG9mIHRoZSBkZXZpY2UKJiM0MzsgKiBAb3V0X3N0ZXBfdGltZV9tYXNrOiBvdXRwdXQgc3RlcC10aW1lIG1hc2sgKGRldmljZS1nbG9iYWwpCiAgKiBAcGhhc2VfYXZnX2ZhY3RvcjogcGhhc2Ugb2Zmc2V0IG1lYXN1cmVtZW50IGF2ZXJhZ2luZyBmYWN0b3IKICAqIEBmcmVxX21vbml0b3I6IGlzIGZyZXF1ZW5jeSBtb25pdG9yIGVuYWJsZWQKICAqLwpAQCAtNzEsNiAmIzQzOzc4LDggQEAgc3RydWN0IHpsMzA3M3hfZGV2IHsKIAlzdHJ1Y3QgcmVnbWFwCQkJKnJlZ21hcDsKIAljb25zdCBzdHJ1Y3QgemwzMDczeF9jaGlwX2luZm8JKmluZm87CiAJc3RydWN0IG11dGV4CQkJbXVsdGlvcF9sb2NrOwomIzQzOwlzdHJ1Y3QgbXV0ZXgJCQl0aWVfbG9jazsKJiM0MzsJc3RydWN0IG11dGV4CQkJcGhhc2Vfc3RlcF9sb2NrOwogCiAJLyogSW52YXJpYW50cyAqLwogCXN0cnVjdCB6bDMwNzN4X3JlZglyZWZbWkwzMDczWF9OVU1fUkVGU107CkBAIC04Nyw2ICYjNDM7OTYsNyBAQCBzdHJ1Y3QgemwzMDczeF9kZXYgewogCiAJLyogUGVyLWNoaXAgcGFyYW1ldGVycyAqLwogCXU2NAkJCWNsb2NrX2lkOwomIzQzOwl1MTYJCQlvdXRfc3RlcF90aW1lX21hc2s7CiAJdTgJCQlwaGFzZV9hdmdfZmFjdG9yOwogCWJvb2wJCQlmcmVxX21vbml0b3I7CiB9OwpAQCAtMzA4LDYgJiM0MzszMTgsMTkgQEAgemwzMDczeF9kZXZfb3V0X2lzX2VuYWJsZWQoc3RydWN0IHpsMzA3M3hfZGV2ICp6bGRldiwgdTggaW5kZXgpCiAJcmV0dXJuIHpsMzA3M3hfc3ludGhfaXNfZW5hYmxlZChzeW50aCkgJmFtcDsmYW1wOyB6bDMwNzN4X291dF9pc19lbmFibGVkKG91dCk7CiB9CiAKJiM0MzsvKioKJiM0MzsgKiB6bDMwNzN4X2Rldl9vdXRfaXNfc3RlcHBlZCAtIGNoZWNrIGlmIG91dHB1dCBpcyBpbiBzdGVwLXRpbWUgbWFzawomIzQzOyAqIEB6bGRldjogcG9pbnRlciB0byB6bDMwNzN4IGRldmljZQomIzQzOyAqIEBpbmRleDogb3V0cHV0IGluZGV4CiYjNDM7ICoKJiM0MzsgKiBSZXR1cm46IHRydWUgaWYgb3V0cHV0IGlzIGFmZmVjdGVkIGJ5IHN0ZXAtdGltZSBvcGVyYXRpb25zCiYjNDM7ICovCiYjNDM7c3RhdGljIGlubGluZSBib29sCiYjNDM7emwzMDczeF9kZXZfb3V0X2lzX3N0ZXBwZWQoc3RydWN0IHpsMzA3M3hfZGV2ICp6bGRldiwgdTggaW5kZXgpCiYjNDM7ewomIzQzOwlyZXR1cm4gISEoemxkZXYtJmd0O291dF9zdGVwX3RpbWVfbWFzayAmYW1wOyBCSVQoaW5kZXgpKTsKJiM0Mzt9CiYjNDM7CiAvKioKICAqIHpsMzA3M3hfZGV2X291dF9kcGxsX2dldCAtIGdldCBEUExMIElEIHRoZSBvdXRwdXQgaXMgZHJpdmVuIGJ5CiAgKiBAemxkZXY6IHBvaW50ZXIgdG8gemwzMDczeCBkZXZpY2UKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZHBsbC96bDMwNzN4L2RwbGwuYyBiL2RyaXZlcnMvZHBsbC96bDMwNzN4L2RwbGwuYwppbmRleCAwNDg4YWU2YWM0ODZjLi44MzAxYWQzNDM2NThhIDEwMDY0NAotLS0gYS9kcml2ZXJzL2RwbGwvemwzMDczeC9kcGxsLmMKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9kcGxsL3psMzA3M3gvZHBsbC5jCkBAIC0yLDYgJiM0MzsyLDcgQEAKIAogI2luY2x1ZGUgJmx0O2xpbnV4L2JpdHMuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9iaXRmaWVsZC5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9jbGVhbnVwLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvYnVnLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvY29udGFpbmVyX29mLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvZGV2X3ByaW50ay5oJmd0OwpAQCAtMTMsNiAmIzQzOzE0LDcgQEAKICNpbmNsdWRlICZsdDtsaW51eC9uZXRsaW5rLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvcGxhdGZvcm1fZGV2aWNlLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvcHJvcGVydHkuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvcHRwX2Nsb2NrX2tlcm5lbC5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L3NsYWIuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9zcHJpbnRmLmgmZ3Q7CiAKQEAgLTIyNzUsNDUgJiM0MzsyMjc3LDM4NCBAQCB6bDMwNzN4X2RwbGxfaW5pdF9maW5lX3BoYXNlX2FkanVzdChzdHJ1Y3QgemwzMDczeF9kZXYgKnpsZGV2KQogCXJldHVybiB6bDMwNzN4X3dyaXRlX3U4KHpsZGV2LCBaTF9SRUdfU1lOVEhfUEhBU0VfU0hJRlRfQ1RSTCwgMHgwMSk7CiB9CiAKJiM0MzsvKiBNYXhpbXVtIGZyZXF1ZW5jeSBhZGp1c3RtZW50OiAmIzQzOy0xJSBvZiBub21pbmFsIGluIHBwYiAqLwomIzQzOyNkZWZpbmUgWkwzMDczWF9EUExMX1BUUF9NQVhfQURKCTEwMDAwMDAwCiYjNDM7CiAvKioKLSAqIHpsMzA3M3hfZHBsbF9hbGxvYyAtIGFsbG9jYXRlIERQTEwgZGV2aWNlCi0gKiBAemxkZXY6IHBvaW50ZXIgdG8gemwzMDczeCBkZXZpY2UKLSAqIEBjaDogRFBMTCBjaGFubmVsIG51bWJlcgomIzQzOyAqIHpsMzA3M3hfZHBsbF9wdHBfZ2V0dGltZXg2NCAtIHJlYWQgY3VycmVudCB0aW1lIGZyb20gVG9EIGNvdW50ZXJzCiYjNDM7ICogQGluZm86IFBUUCBjbG9jayBpbmZvCiYjNDM7ICogQHRzOiB0aW1lc3BlYyB0byBzdG9yZSBjdXJyZW50IHRpbWUKJiM0MzsgKiBAc3RzOiBvcHRpb25hbCBzeXN0ZW0gdGltZXN0YW1wIHBhaXIgZm9yIGNyb3NzLXRpbWVzdGFtcGluZwogICoKLSAqIEFsbG9jYXRlcyBEUExMIGRldmljZSBzdHJ1Y3R1cmUgZm9yIGdpdmVuIERQTEwgY2hhbm5lbC4KJiM0MzsgKiBSZXR1cm46IDAgb24gc3VjY2VzcywgJmx0OzAgb24gZXJyb3IKJiM0MzsgKi8KJiM0MztzdGF0aWMgaW50IHpsMzA3M3hfZHBsbF9wdHBfZ2V0dGltZXg2NChzdHJ1Y3QgcHRwX2Nsb2NrX2luZm8gKmluZm8sCiYjNDM7CQkJCSAgICAgICBzdHJ1Y3QgdGltZXNwZWM2NCAqdHMsCiYjNDM7CQkJCSAgICAgICBzdHJ1Y3QgcHRwX3N5c3RlbV90aW1lc3RhbXAgKnN0cykKJiM0Mzt7CiYjNDM7CXN0cnVjdCB6bDMwNzN4X2RwbGwgKnpsZHBsbCA9IGNvbnRhaW5lcl9vZihpbmZvLCBzdHJ1Y3QgemwzMDczeF9kcGxsLAomIzQzOwkJCQkJCSAgIHB0cF9pbmZvKTsKJiM0MzsKJiM0MzsJZ3VhcmQobXV0ZXgpKCZhbXA7emxkcGxsLSZndDtsb2NrKTsKJiM0MzsKJiM0MzsJcmV0dXJuIHpsMzA3M3hfY2hhbl90b2RfcmVhZCh6bGRwbGwtJmd0O2RldiwgemxkcGxsLSZndDtpZCwgZmFsc2UsIHRzLCBzdHMpOwomIzQzO30KJiM0MzsKJiM0MzsvKioKJiM0MzsgKiB6bDMwNzN4X2RwbGxfcHRwX3NldHRpbWU2NCAtIHNldCBUb0QgY291bnRlcnMgdG8gZ2l2ZW4gdGltZQomIzQzOyAqIEBpbmZvOiBQVFAgY2xvY2sgaW5mbwomIzQzOyAqIEB0czogdGltZXNwZWMgd2l0aCB0aW1lIHRvIHNldAogICoKLSAqIFJldHVybjogcG9pbnRlciB0byBEUExMIGRldmljZSBvbiBzdWNjZXNzLCBlcnJvciBwb2ludGVyIG9uIGVycm9yCiYjNDM7ICogUmV0dXJuOiAwIG9uIHN1Y2Nlc3MsICZsdDswIG9uIGVycm9yCiAgKi8KLXN0cnVjdCB6bDMwNzN4X2RwbGwgKgotemwzMDczeF9kcGxsX2FsbG9jKHN0cnVjdCB6bDMwNzN4X2RldiAqemxkZXYsIHU4IGNoKQomIzQzO3N0YXRpYyBpbnQgemwzMDczeF9kcGxsX3B0cF9zZXR0aW1lNjQoc3RydWN0IHB0cF9jbG9ja19pbmZvICppbmZvLAomIzQzOwkJCQkgICAgICBjb25zdCBzdHJ1Y3QgdGltZXNwZWM2NCAqdHMpCiB7Ci0Jc3RydWN0IHpsMzA3M3hfZHBsbCAqemxkcGxsOwomIzQzOwlzdHJ1Y3QgemwzMDczeF9kcGxsICp6bGRwbGwgPSBjb250YWluZXJfb2YoaW5mbywgc3RydWN0IHpsMzA3M3hfZHBsbCwKJiM0MzsJCQkJCQkgICBwdHBfaW5mbyk7CiAKLQl6bGRwbGwgPSBremFsbG9jX29iaigqemxkcGxsKTsKLQlpZiAoIXpsZHBsbCkKLQkJcmV0dXJuIEVSUl9QVFIoLUVOT01FTSk7CiYjNDM7CWd1YXJkKG11dGV4KSgmYW1wO3psZHBsbC0mZ3Q7bG9jayk7CiAKLQl6bGRwbGwtJmd0O2RldiA9IHpsZGV2OwotCXpsZHBsbC0mZ3Q7aWQgPSBjaDsKLQltdXRleF9pbml0KCZhbXA7emxkcGxsLSZndDtsb2NrKTsKLQlJTklUX0xJU1RfSEVBRCgmYW1wO3psZHBsbC0mZ3Q7cGlucyk7CiYjNDM7CXJldHVybiB6bDMwNzN4X2NoYW5fdG9kX3dyaXRlKHpsZHBsbC0mZ3Q7ZGV2LCB6bGRwbGwtJmd0O2lkLCAqdHMpOwomIzQzO30KIAotCXJldHVybiB6bGRwbGw7CiYjNDM7LyoqCiYjNDM7ICogemwzMDczeF9kcGxsX3B0cF9hZGp0aW1lX3BoYXNlX3N0ZXAgLSBhZGp1c3Qgc3ViLXNlY29uZCB0aW1lIHZpYSBwaGFzZSBzdGVwCiYjNDM7ICogQHpsZHBsbDogRFBMTCBjaGFubmVsCiYjNDM7ICogQGRlbHRhOiB0aW1lIGFkanVzdG1lbnQgaW4gbmFub3NlY29uZHMgKG11c3QgYmUgd2l0aGluICgtTlNFQ19QRVJfU0VDLAomIzQzOyAqICAgICAgICAgTlNFQ19QRVJfU0VDKSkKJiM0MzsgKgomIzQzOyAqIFVzZXMgdGhlIG91dHB1dCBwaGFzZSBzdGVwIG1lY2hhbmlzbSB3aXRoIHRvZF9zdGVwPTEgdG8gYWRqdXN0IGJvdGgKJiM0MzsgKiB0aGUgb3V0cHV0IGNsb2NrIHBoYXNlIGFuZCB0aGUgVG9EIGNvdW50ZXIgc2ltdWx0YW5lb3VzbHkuIFRoaXMga2VlcHMKJiM0MzsgKiBvdXRwdXRzIGFuZCBUb0QgY29oZXJlbnQuIE9ubHkgdmFsaWQgZm9yIE5DTy4KJiM0MzsgKgomIzQzOyAqIE91dHB1dHMgYXJlIGdyb3VwZWQgYnkgc3ludGhlc2l6ZXIgc2luY2UgdGhlIHBoYXNlIHN0ZXAgdmFsdWUgaXMgaW4KJiM0MzsgKiBzeW50aGVzaXplciBjbG9jayBjeWNsZXMuIFRoZSBmaXJzdCBzeW50aCBncm91cCB3aXRoIGVuYWJsZWQgb3V0cHV0cwomIzQzOyAqIHVzZXMgdG9kX3N0ZXAgdG8gYWRqdXN0IGJvdGggb3V0cHV0cyBhbmQgdGhlIFRvRCBjb3VudGVyLiBSZW1haW5pbmcKJiM0MzsgKiBncm91cHMgc3RlcCBvdXRwdXRzIG9ubHkuIElmIG5vIHN5bnRoIGhhcyBlbmFibGVkIG91dHB1dHMsIHRoZSBUb0QKJiM0MzsgKiBjb3VudGVyIGlzIHN0ZXBwZWQgYWxvbmUgdXNpbmcgYW4gZW1wdHkgb3V0cHV0IG1hc2sgKHRoZSBGVyB1c2VzCiYjNDM7ICogdGhlIGZpcnN0IGVuYWJsZWQgc3ludGgmIzM5O3MgcGVyaW9kIGZvciB0aGUgY29udmVyc2lvbikuCiYjNDM7ICoKJiM0MzsgKiBSZXR1cm46CiYjNDM7ICogKiAlMAkJCS0gc3VjY2VzcyAob3IgcGFydGlhbCBzdWNjZXNzIGlmIGEgbGF0ZXIgc3ludGggZ3JvdXAKJiM0MzsgKgkJCSAgZmFpbGVkIGFmdGVyIHRoZSBmaXJzdCB3YXMgYWxyZWFkeSBzdGVwcGVkKQomIzQzOyAqICogJS1FT1BOT1RTVVBQCS0gbm8gc3ludGhzIGF2YWlsYWJsZQomIzQzOyAqICogbmVnYXRpdmUJCS0gZXJyb3IKJiM0MzsgKi8KJiM0MztzdGF0aWMgaW50IHpsMzA3M3hfZHBsbF9wdHBfYWRqdGltZV9waGFzZV9zdGVwKHN0cnVjdCB6bDMwNzN4X2RwbGwgKnpsZHBsbCwKJiM0MzsJCQkJCSAgICAgICBzNjQgZGVsdGEpCiYjNDM7ewomIzQzOwl1MTYgc3ludGhfbWFza1taTDMwNzNYX05VTV9TWU5USFNdID0ge307CiYjNDM7CXN0cnVjdCB6bDMwNzN4X2RldiAqemxkZXYgPSB6bGRwbGwtJmd0O2RldjsKJiM0MzsJY29uc3Qgc3RydWN0IHpsMzA3M3hfc3ludGggKnN5bnRoOwomIzQzOwlzdHJ1Y3QgemwzMDczeF9kcGxsX3BpbiAqcGluOwomIzQzOwl1MzIgZmlyc3Rfc3ludGhfZnJlcSA9IDA7CiYjNDM7CWJvb2wgdG9kX3N0ZXBwZWQgPSBmYWxzZTsKJiM0MzsJczMyIHN0ZXBfY3ljbGVzOwomIzQzOwl1MzIgc3ludGhfZnJlcTsKJiM0MzsJaW50IHJjOwomIzQzOwl1OCBpOwomIzQzOwomIzQzOwkvKiBCdWlsZCBwZXItc3ludGggb3V0cHV0IG1hc2tzIGZyb20gcmVnaXN0ZXJlZCBvdXRwdXQgcGlucyAqLwomIzQzOwlsaXN0X2Zvcl9lYWNoX2VudHJ5KHBpbiwgJmFtcDt6bGRwbGwtJmd0O3BpbnMsIGxpc3QpIHsKJiM0MzsJCXU4IG91dF9pZCwgc3ludGhfaWQ7CiYjNDM7CiYjNDM7CQlpZiAoemwzMDczeF9kcGxsX2lzX2lucHV0X3BpbihwaW4pKQomIzQzOwkJCWNvbnRpbnVlOwomIzQzOwomIzQzOwkJb3V0X2lkID0gemwzMDczeF9vdXRwdXRfcGluX291dF9nZXQocGluLSZndDtpZCk7CiYjNDM7CiYjNDM7CQlpZiAoIXpsMzA3M3hfZGV2X291dF9pc19zdGVwcGVkKHpsZGV2LCBvdXRfaWQpKQomIzQzOwkJCWNvbnRpbnVlOwomIzQzOwomIzQzOwkJc3ludGhfaWQgPSB6bDMwNzN4X2Rldl9vdXRfc3ludGhfZ2V0KHpsZGV2LCBvdXRfaWQpOwomIzQzOwkJaWYgKHN5bnRoX2lkICZndDs9IFpMMzA3M1hfTlVNX1NZTlRIUykgewomIzQzOwkJCWRldl93YXJuKHpsZGV2LSZndDtkZXYsICYjMzQ7VW5leHBlY3RlZCBzeW50aCBpZCBmb3IgT1VUJXVcbiYjMzQ7LAomIzQzOwkJCQkgb3V0X2lkKTsKJiM0MzsJCQljb250aW51ZTsKJiM0MzsJCX0KJiM0MzsJCXN5bnRoX21hc2tbc3ludGhfaWRdIHw9IEJJVChvdXRfaWQpOwomIzQzOwl9CiYjNDM7CiYjNDM7CS8qIFByb2Nlc3MgZWFjaCBzeW50aCBncm91cCAqLwomIzQzOwlmb3IgKGkgPSAwOyBpICZsdDsgWkwzMDczWF9OVU1fU1lOVEhTOyBpJiM0MzsmIzQzOykgewomIzQzOwkJc3ludGggPSB6bDMwNzN4X3N5bnRoX3N0YXRlX2dldCh6bGRldiwgaSk7CiYjNDM7CQlpZiAoIXpsMzA3M3hfc3ludGhfaXNfZW5hYmxlZChzeW50aCkgfHwKJiM0MzsJCSAgICB6bDMwNzN4X3N5bnRoX2RwbGxfZ2V0KHN5bnRoKSAhPSB6bGRwbGwtJmd0O2lkKQomIzQzOwkJCWNvbnRpbnVlOwomIzQzOwomIzQzOwkJc3ludGhfZnJlcSA9IHpsMzA3M3hfc3ludGhfZnJlcV9nZXQoc3ludGgpOwomIzQzOwomIzQzOwkJLyogUmVtZW1iZXIgZmlyc3QgZW5hYmxlZCBzeW50aCBmcmVxIGZvciBUb0Qtb25seSBmYWxsYmFjayAqLwomIzQzOwkJaWYgKCFmaXJzdF9zeW50aF9mcmVxKQomIzQzOwkJCWZpcnN0X3N5bnRoX2ZyZXEgPSBzeW50aF9mcmVxOwomIzQzOwomIzQzOwkJaWYgKCFzeW50aF9tYXNrW2ldKQomIzQzOwkJCWNvbnRpbnVlOwomIzQzOwomIzQzOwkJLyogU2FmZSBmb3IgczMyOiBtYXggc3ludGggZnJlcSBpcyA3NTAgTUh6ICovCiYjNDM7CQlzdGVwX2N5Y2xlcyA9IGRpdl9zNjQoZGVsdGEgKiBzeW50aF9mcmVxLCBOU0VDX1BFUl9TRUMpOwomIzQzOwomIzQzOwkJcmMgPSB6bDMwNzN4X2NoYW5fcGhhc2Vfc3RlcCh6bGRldiwgemxkcGxsLSZndDtpZCwKJiM0MzsJCQkJCSAgICAgc3ludGhfbWFza1tpXSwgc3RlcF9jeWNsZXMsCiYjNDM7CQkJCQkgICAgICF0b2Rfc3RlcHBlZCk7CiYjNDM7CQlpZiAocmMpIHsKJiM0MzsJCQlpZiAodG9kX3N0ZXBwZWQpIHsKJiM0MzsJCQkJZGV2X3dhcm4oemxkZXYtJmd0O2RldiwKJiM0MzsJCQkJCSAmIzM0O1BhcnRpYWwgcGhhc2Ugc3RlcCBmYWlsdXJlXG4mIzM0Oyk7CiYjNDM7CQkJCXJldHVybiAwOwomIzQzOwkJCX0KJiM0MzsJCQlyZXR1cm4gcmM7CiYjNDM7CQl9CiYjNDM7CQl0b2Rfc3RlcHBlZCA9IHRydWU7CiYjNDM7CX0KJiM0MzsKJiM0MzsJaWYgKCFmaXJzdF9zeW50aF9mcmVxKQomIzQzOwkJcmV0dXJuIC1FT1BOT1RTVVBQOwomIzQzOwomIzQzOwkvKiBObyBlbmFibGVkIG91dHB1dHMgZm91bmQ7IHN0ZXAgVG9EIGNvdW50ZXIgb25seSB1c2luZyB0aGUKJiM0MzsJICogZmlyc3QgZW5hYmxlZCBzeW50aCYjMzk7cyBwZXJpb2QgKGVtcHR5IG91dHB1dCBtYXNrKS4KJiM0MzsJICovCiYjNDM7CWlmICghdG9kX3N0ZXBwZWQpIHsKJiM0MzsJCXN0ZXBfY3ljbGVzID0gZGl2X3M2NChkZWx0YSAqIGZpcnN0X3N5bnRoX2ZyZXEsIE5TRUNfUEVSX1NFQyk7CiYjNDM7CQlyZXR1cm4gemwzMDczeF9jaGFuX3BoYXNlX3N0ZXAoemxkZXYsIHpsZHBsbC0mZ3Q7aWQsIDAsCiYjNDM7CQkJCQkgICAgICAgc3RlcF9jeWNsZXMsIHRydWUpOwomIzQzOwl9CiYjNDM7CiYjNDM7CXJldHVybiAwOwogfQogCiAvKioKLSAqIHpsMzA3M3hfZHBsbF9mcmVlIC0gZnJlZSBEUExMIGRldmljZQotICogQHpsZHBsbDogcG9pbnRlciB0byB6bDMwNzN4X2RwbGwgc3RydWN0dXJlCiYjNDM7ICogemwzMDczeF9kcGxsX3B0cF9hZGp0aW1lIC0gYWRqdXN0IFBUUCBjbG9jayB0aW1lCiYjNDM7ICogQGluZm86IFBUUCBjbG9jayBpbmZvCiYjNDM7ICogQGRlbHRhOiB0aW1lIGFkanVzdG1lbnQgaW4gbmFub3NlY29uZHMKICAqCi0gKiBEZWFsbG9jYXRlcyBnaXZlbiBEUExMIGRldmljZSBwcmV2aW91c2x5IGFsbG9jYXRlZCBieSBAemwzMDczeF9kcGxsX2FsbG9jLgomIzQzOyAqIEZvciBOQ08sIGxhcmdlIGRlbHRhcyAoJmd0Oz0gMSBzZWNvbmQpIGFyZSBzcGxpdCBpbnRvIGEgVG9ECiYjNDM7ICogcmVhZC1tb2RpZnktd3JpdGUgZm9yIHRoZSBzZWNvbmRzIHBhcnQgYW5kIGFuIG91dHB1dCBwaGFzZSBzdGVwIGZvcgomIzQzOyAqIHRoZSBzdWItc2Vjb25kIHJlbWFpbmRlci4gU3ViLXNlY29uZCBkZWx0YXMgdXNlIHBoYXNlIHN0ZXAgZGlyZWN0bHksCiYjNDM7ICogZmFsbGluZyBiYWNrIHRvIFRvRCByZWFkLW1vZGlmeS13cml0ZSBpZiBwaGFzZSBzdGVwIG9yIFRJRSB3cml0ZQomIzQzOyAqIGZhaWxzLiBJbiBBVVRPL1JFRkxPQ0sgbW9kZXMsIGxhcmdlIGRlbHRhcyBhcmUgc3BsaXQgaW50byBUb0QKJiM0MzsgKiByZWFkLW1vZGlmeS13cml0ZSBmb3Igc2Vjb25kcyBhbmQgVElFIHdyaXRlIGZvciB0aGUgc3ViLXNlY29uZAomIzQzOyAqIHJlbWFpbmRlci4gU3ViLXNlY29uZCBkZWx0YXMgdXNlIFRJRSB3cml0ZSBkaXJlY3RseS4KJiM0MzsgKgomIzQzOyAqIElmIHRoZSBzZWNvbmRzIHBhcnQgd2FzIGFscmVhZHkgY29tbWl0dGVkIHdoZW4gdGhlIHN1Yi1zZWNvbmQKJiM0MzsgKiBtZWNoYW5pc20gZmFpbHMsIHJldHVybnMgMCB0byBwcmV2ZW50IHRoZSBQVFAgc2Vydm8gZnJvbSByZXRyeWluZwomIzQzOyAqIHRoZSBmdWxsIGRlbHRhIGFuZCBhcHBseWluZyBzZWNvbmRzIGFnYWluLgomIzQzOyAqCiYjNDM7ICogUmV0dXJuOiAwIG9uIHN1Y2Nlc3MgKG9yIHBhcnRpYWwgc3VjY2VzcyksICZsdDswIG9uIGVycm9yCiAgKi8KLXZvaWQKLXpsMzA3M3hfZHBsbF9mcmVlKHN0cnVjdCB6bDMwNzN4X2RwbGwgKnpsZHBsbCkKJiM0MztzdGF0aWMgaW50IHpsMzA3M3hfZHBsbF9wdHBfYWRqdGltZShzdHJ1Y3QgcHRwX2Nsb2NrX2luZm8gKmluZm8sIHM2NCBkZWx0YSkKIHsKLQlXQVJOKHpsZHBsbC0mZ3Q7ZHBsbF9kZXYsICYjMzQ7RFBMTCBkZXZpY2UgaXMgc3RpbGwgcmVnaXN0ZXJlZFxuJiMzNDspOwomIzQzOwlzdHJ1Y3QgemwzMDczeF9kcGxsICp6bGRwbGwgPSBjb250YWluZXJfb2YoaW5mbywgc3RydWN0IHpsMzA3M3hfZHBsbCwKJiM0MzsJCQkJCQkgICBwdHBfaW5mbyk7CiYjNDM7CXN0cnVjdCB6bDMwNzN4X2RldiAqemxkZXYgPSB6bGRwbGwtJmd0O2RldjsKJiM0MzsJY29uc3Qgc3RydWN0IHpsMzA3M3hfY2hhbiAqY2hhbjsKJiM0MzsJYm9vbCBzZWNfYWRqdXN0ZWQgPSBmYWxzZTsKJiM0MzsJc3RydWN0IHRpbWVzcGVjNjQgdHM7CiYjNDM7CWludCByYzsKIAotCW11dGV4X2Rlc3Ryb3koJmFtcDt6bGRwbGwtJmd0O2xvY2spOwotCWtmcmVlKHpsZHBsbCk7CiYjNDM7CWlmICghZGVsdGEpCiYjNDM7CQlyZXR1cm4gMDsKJiM0MzsKJiM0MzsJZ3VhcmQobXV0ZXgpKCZhbXA7emxkcGxsLSZndDtsb2NrKTsKJiM0MzsKJiM0MzsJLyogTW9kZXMgd2l0aG91dCBwaGFzZSBzdGVwIG9yIFRJRSB1c2UgcGxhaW4gVG9EIGFkanVzdCAqLwomIzQzOwljaGFuID0gemwzMDczeF9jaGFuX3N0YXRlX2dldCh6bGRldiwgemxkcGxsLSZndDtpZCk7CiYjNDM7CWlmICghemwzMDczeF9jaGFuX21vZGVfaXNfbmNvKGNoYW4pICZhbXA7JmFtcDsKJiM0MzsJICAgICF6bDMwNzN4X2NoYW5fbW9kZV9zdXBwb3J0c190aWUoY2hhbikpCiYjNDM7CQlyZXR1cm4gemwzMDczeF9jaGFuX3RvZF9hZGp1c3QoemxkZXYsIHpsZHBsbC0mZ3Q7aWQsCiYjNDM7CQkJCQkgICAgICAgbnNfdG9fdGltZXNwZWM2NChkZWx0YSkpOwomIzQzOwomIzQzOwkvKiBTcGxpdCBvZmYgc2Vjb25kcyB2aWEgVG9EIHJlYWQtbW9kaWZ5LXdyaXRlIHNvIHRoZSBzdWItc2Vjb25kCiYjNDM7CSAqIHJlbWFpbmRlciBjYW4gYmUgYXBwbGllZCB0aHJvdWdoIHRoZSBvdXRwdXQtY29oZXJlbnQgbWVjaGFuaXNtCiYjNDM7CSAqIChwaGFzZSBzdGVwIG9yIFRJRSB3cml0ZSkuCiYjNDM7CSAqLwomIzQzOwlpZiAoZGVsdGEgJmd0Oz0gTlNFQ19QRVJfU0VDIHx8IGRlbHRhICZsdDs9IC1OU0VDX1BFUl9TRUMpIHsKJiM0MzsJCXMzMiByZW1haW5kZXI7CiYjNDM7CiYjNDM7CQl0cy50dl9zZWMgPSBkaXZfczY0X3JlbShkZWx0YSwgTlNFQ19QRVJfU0VDLCAmYW1wO3JlbWFpbmRlcik7CiYjNDM7CQl0cy50dl9uc2VjID0gMDsKJiM0MzsJCWRlbHRhID0gcmVtYWluZGVyOwomIzQzOwomIzQzOwkJcmMgPSB6bDMwNzN4X2NoYW5fdG9kX2FkanVzdCh6bGRldiwgemxkcGxsLSZndDtpZCwgdHMpOwomIzQzOwkJaWYgKHJjKQomIzQzOwkJCXJldHVybiByYzsKJiM0MzsKJiM0MzsJCS8qIE5vIHN1Yi1zZWNvbmQgcmVtYWluZGVyLCBkb25lICovCiYjNDM7CQlpZiAoIWRlbHRhKQomIzQzOwkJCXJldHVybiAwOwomIzQzOwomIzQzOwkJLyogV2FpdCBmb3IgdGhlIFRvRCB3cml0ZSB0byBiZSBhcHBsaWVkIGF0IHRoZSAxIEh6IGVkZ2UKJiM0MzsJCSAqIGJlZm9yZSBpc3N1aW5nIHBoYXNlIHN0ZXAgb3IgVElFIHdyaXRlLCBzbyB0aGUgcGVuZGluZwomIzQzOwkJICogV1JfTkVYVF8xSFogZG9lcyBub3Qgb3ZlcndyaXRlIHRoZSBzdWItc2Vjb25kIGFkanVzdG1lbnQuCiYjNDM7CQkgKi8KJiM0MzsJCXJjID0gemwzMDczeF9jaGFuX3RvZF9yZWFkeV93YWl0KHpsZGV2LCB6bGRwbGwtJmd0O2lkKTsKJiM0MzsJCWlmIChyYykKJiM0MzsJCQlyZXR1cm4gcmM7CiYjNDM7CiYjNDM7CQlzZWNfYWRqdXN0ZWQgPSB0cnVlOwomIzQzOwl9CiYjNDM7CiYjNDM7CS8qIEFwcGx5IHN1Yi1zZWNvbmQgZGVsdGEgdmlhIHBoYXNlIHN0ZXAgKE5DTykgb3IgVElFIHdyaXRlICovCiYjNDM7CWlmICh6bDMwNzN4X2NoYW5fbW9kZV9pc19uY28oY2hhbikpIHsKJiM0MzsJCXJjID0gemwzMDczeF9kcGxsX3B0cF9hZGp0aW1lX3BoYXNlX3N0ZXAoemxkcGxsLCBkZWx0YSk7CiYjNDM7CQlpZiAoIXJjKQomIzQzOwkJCXJldHVybiAwOwomIzQzOwl9IGVsc2UgewomIzQzOwkJcmMgPSB6bDMwNzN4X2NoYW5fdGllX3dyaXRlKHpsZGV2LCB6bGRwbGwtJmd0O2lkLCBkZWx0YSk7CiYjNDM7CQlpZiAoIXJjKQomIzQzOwkJCXJldHVybiAwOwomIzQzOwl9CiYjNDM7CiYjNDM7CS8qIFBoYXNlIHN0ZXAgb3IgVElFIHdyaXRlIGZhaWxlZCwgZmFsbCBiYWNrIHRvIFRvRCBhZGp1c3QgKi8KJiM0MzsJcmMgPSB6bDMwNzN4X2NoYW5fdG9kX2FkanVzdCh6bGRldiwgemxkcGxsLSZndDtpZCwKJiM0MzsJCQkJICAgICBuc190b190aW1lc3BlYzY0KGRlbHRhKSk7CiYjNDM7CiYjNDM7CS8qIEluIHRoZSB1bmxpa2VseSBldmVudCB0aGF0IGJvdGggcGhhc2Ugc3RlcC9USUUgd3JpdGUgYW5kIGZhbGxiYWNrCiYjNDM7CSAqIFRvRCBhZGp1c3QgZmFpbCBhZnRlciBzZWNvbmRzIHdlcmUgYWxyZWFkeSBjb21taXR0ZWQsIHJldHVybgomIzQzOwkgKiBzdWNjZXNzIHRvIHByZXZlbnQgdGhlIFBUUCBzZXJ2byBmcm9tIHJldHJ5aW5nIHRoZSBmdWxsIGRlbHRhIGFuZAomIzQzOwkgKiBhcHBseWluZyBzZWNvbmRzIGFnYWluLiBUaGUgc3ViLXNlY29uZCByZXNpZHVhbCB3aWxsIHNlbGYtY29ycmVjdAomIzQzOwkgKiBpbiB0aGUgbmV4dCBzZXJ2byBjeWNsZS4KJiM0MzsJICovCiYjNDM7CWlmIChyYyAmYW1wOyZhbXA7IHNlY19hZGp1c3RlZCkgewomIzQzOwkJZGV2X3dhcm4oemxkZXYtJmd0O2RldiwKJiM0MzsJCQkgJiMzNDtTdWItc2Vjb25kIGFkanVzdG1lbnQgZmFpbGVkIGFmdGVyIHNlY29uZHMgYXBwbGllZFxuJiMzNDspOwomIzQzOwkJcmV0dXJuIDA7CiYjNDM7CX0KJiM0MzsKJiM0MzsJcmV0dXJuIHJjOwomIzQzO30KJiM0MzsKJiM0MzsvKioKJiM0MzsgKiB6bDMwNzN4X2RwbGxfcHRwX2FkamZpbmUgLSBhZGp1c3QgUFRQIGNsb2NrIGZyZXF1ZW5jeQomIzQzOyAqIEBpbmZvOiBQVFAgY2xvY2sgaW5mbwomIzQzOyAqIEBzY2FsZWRfcHBtOiBmcmVxdWVuY3kgYWRqdXN0bWVudCBpbiBzY2FsZWQgcHBtIChwcG0gKiAyXjE2KQomIzQzOyAqCiYjNDM7ICogT25seSBzdXBwb3J0ZWQgZm9yIE5DTy4gV3JpdGVzIHRoZSBkZWx0YSBmcmVxdWVuY3kgb2Zmc2V0IHJlZ2lzdGVyLgomIzQzOyAqCiYjNDM7ICogUmV0dXJuOgomIzQzOyAqICogJTAJCQktIHN1Y2Nlc3Mgb3IgQHNjYWxlZF9wcG0gaXMgemVybyAobm8tb3ApCiYjNDM7ICogKiAlLUVPUE5PVFNVUFAJLSBOQ08gcGluIGlzIG5vdCBjb25uZWN0ZWQgYW5kIEBzY2FsZWRfcHBtIGlzIG5vbi16ZXJvCiYjNDM7ICogKiBuZWdhdGl2ZQkJLSBvdGhlciBlcnJvcgomIzQzOyAqLwomIzQzO3N0YXRpYyBpbnQKJiM0Mzt6bDMwNzN4X2RwbGxfcHRwX2FkamZpbmUoc3RydWN0IHB0cF9jbG9ja19pbmZvICppbmZvLCBsb25nIHNjYWxlZF9wcG0pCiYjNDM7ewomIzQzOwlzdHJ1Y3QgemwzMDczeF9kcGxsICp6bGRwbGwgPSBjb250YWluZXJfb2YoaW5mbywgc3RydWN0IHpsMzA3M3hfZHBsbCwKJiM0MzsJCQkJCQkgICBwdHBfaW5mbyk7CiYjNDM7CWNvbnN0IHN0cnVjdCB6bDMwNzN4X2NoYW4gKmNoYW47CiYjNDM7CXM2NCBvZmZzZXQ7CiYjNDM7CiYjNDM7CS8qIENvbnZlcnQgc2NhbGVkX3BwbSB0byBkZl9vZmZzZXQgaW4gMl4tNDggc3RlcHM6CiYjNDM7CSAqICAgZGZfb2Zmc2V0ID0gLShzY2FsZWRfcHBtICogMl4zMikgLyAxMF42CiYjNDM7CSAqCiYjNDM7CSAqIFNpbXBsaWZ5IHRvIGF2b2lkIG92ZXJmbG93OgomIzQzOwkgKiAgIGRmX29mZnNldCA9IC0oc2NhbGVkX3BwbSAqIDJeMjYpIC8gNV42CiYjNDM7CSAqICAgZGZfb2Zmc2V0ID0gLShzY2FsZWRfcHBtICogNjcxMDg4NjQpIC8gMTU2MjUKJiM0MzsJICovCiYjNDM7CW9mZnNldCA9IC1kaXZfczY0KChzNjQpc2NhbGVkX3BwbSAqIDY3MTA4ODY0TEwsIDE1NjI1KTsKJiM0MzsKJiM0MzsJZ3VhcmQobXV0ZXgpKCZhbXA7emxkcGxsLSZndDtsb2NrKTsKJiM0MzsKJiM0MzsJY2hhbiA9IHpsMzA3M3hfY2hhbl9zdGF0ZV9nZXQoemxkcGxsLSZndDtkZXYsIHpsZHBsbC0mZ3Q7aWQpOwomIzQzOwlpZiAoIXpsMzA3M3hfY2hhbl9tb2RlX2lzX25jbyhjaGFuKSkKJiM0MzsJCXJldHVybiBzY2FsZWRfcHBtID8gLUVPUE5PVFNVUFAgOiAwOwomIzQzOwlpZiAob2Zmc2V0ID09IGNoYW4tJmd0O2RmX29mZnNldCkKJiM0MzsJCXJldHVybiAwOwomIzQzOwomIzQzOwlyZXR1cm4gemwzMDczeF9jaGFuX2RmX29mZnNldF9zZXQoemxkcGxsLSZndDtkZXYsIHpsZHBsbC0mZ3Q7aWQsIG9mZnNldCk7CiYjNDM7fQomIzQzOwomIzQzOy8qKgomIzQzOyAqIHpsMzA3M3hfZHBsbF9wdHBfYWRqcGhhc2UgLSBhZGp1c3QgUFRQIGNsb2NrIHBoYXNlCiYjNDM7ICogQGluZm86IFBUUCBjbG9jayBpbmZvCiYjNDM7ICogQGRlbHRhOiBwaGFzZSBhZGp1c3RtZW50IGluIG5hbm9zZWNvbmRzCiYjNDM7ICoKJiM0MzsgKiBPbmx5IHN1cHBvcnRlZCBpbiBBVVRPIGFuZCBSRUZMT0NLIG1vZGVzLiBVc2VzIFRJRSB3cml0ZSBmb3IKJiM0MzsgKiBuYW5vc2Vjb25kIHJlc29sdXRpb24gcGhhc2UgYWRqdXN0bWVudC4KJiM0MzsgKgomIzQzOyAqIFJldHVybjoKJiM0MzsgKiAqICUwCQkJLSBzdWNjZXNzIG9yIEBkZWx0YSBpcyB6ZXJvIChuby1vcCkKJiM0MzsgKiAqICUtRU9QTk9UU1VQUAktIG1vZGUgZG9lcyBub3Qgc3VwcG9ydCBUSUUgYW5kIEBkZWx0YSBpcyBub24temVybwomIzQzOyAqICogbmVnYXRpdmUJCS0gb3RoZXIgZXJyb3IKJiM0MzsgKi8KJiM0MztzdGF0aWMgaW50IHpsMzA3M3hfZHBsbF9wdHBfYWRqcGhhc2Uoc3RydWN0IHB0cF9jbG9ja19pbmZvICppbmZvLCBzMzIgZGVsdGEpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgemwzMDczeF9kcGxsICp6bGRwbGwgPSBjb250YWluZXJfb2YoaW5mbywgc3RydWN0IHpsMzA3M3hfZHBsbCwKJiM0MzsJCQkJCQkgICBwdHBfaW5mbyk7CiYjNDM7CXN0cnVjdCB6bDMwNzN4X2RldiAqemxkZXYgPSB6bGRwbGwtJmd0O2RldjsKJiM0MzsJY29uc3Qgc3RydWN0IHpsMzA3M3hfY2hhbiAqY2hhbjsKJiM0MzsKJiM0MzsJaWYgKCFkZWx0YSkKJiM0MzsJCXJldHVybiAwOwomIzQzOwomIzQzOwlndWFyZChtdXRleCkoJmFtcDt6bGRwbGwtJmd0O2xvY2spOwomIzQzOwomIzQzOwljaGFuID0gemwzMDczeF9jaGFuX3N0YXRlX2dldCh6bGRldiwgemxkcGxsLSZndDtpZCk7CiYjNDM7CiYjNDM7CWlmICghemwzMDczeF9jaGFuX21vZGVfc3VwcG9ydHNfdGllKGNoYW4pKQomIzQzOwkJcmV0dXJuIC1FT1BOT1RTVVBQOwomIzQzOwomIzQzOwlyZXR1cm4gemwzMDczeF9jaGFuX3RpZV93cml0ZSh6bGRldiwgemxkcGxsLSZndDtpZCwgZGVsdGEpOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgczMyCiYjNDM7emwzMDczeF9kcGxsX3B0cF9nZXRtYXhwaGFzZShzdHJ1Y3QgcHRwX2Nsb2NrX2luZm8gKmluZm8gX19hbHdheXNfdW51c2VkKQomIzQzO3sKJiM0MzsJLyogSFcgbGltaXRzIFRJRSB3cml0ZSB0byAmIzQzOy0xIHNlY29uZC4gUmV0dXJuIHRoZSBjb25zdGFudCBIVwomIzQzOwkgKiBsaW1pdCBhbmQgbGV0IGFkanBoYXNlIGhhbmRsZSBtb2RlLXNwZWNpZmljIGNoZWNrcy4KJiM0MzsJICovCiYjNDM7CXJldHVybiBOU0VDX1BFUl9TRUMgLSAxOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgY29uc3Qgc3RydWN0IHB0cF9jbG9ja19pbmZvIHpsMzA3M3hfZHBsbF9wdHBfY2xvY2tfaW5mbyA9IHsKJiM0MzsJLm93bmVyCQk9IFRISVNfTU9EVUxFLAomIzQzOwkubWF4X2Fkagk9IFpMMzA3M1hfRFBMTF9QVFBfTUFYX0FESiwKJiM0MzsJLmdldHRpbWV4NjQJPSB6bDMwNzN4X2RwbGxfcHRwX2dldHRpbWV4NjQsCiYjNDM7CS5zZXR0aW1lNjQJPSB6bDMwNzN4X2RwbGxfcHRwX3NldHRpbWU2NCwKJiM0MzsJLmFkanRpbWUJPSB6bDMwNzN4X2RwbGxfcHRwX2FkanRpbWUsCiYjNDM7CS5hZGpmaW5lCT0gemwzMDczeF9kcGxsX3B0cF9hZGpmaW5lLAomIzQzOwkuYWRqcGhhc2UJPSB6bDMwNzN4X2RwbGxfcHRwX2FkanBoYXNlLAomIzQzOwkuZ2V0bWF4cGhhc2UJPSB6bDMwNzN4X2RwbGxfcHRwX2dldG1heHBoYXNlLAomIzQzO307CiYjNDM7CiYjNDM7LyoqCiYjNDM7ICogemwzMDczeF9kcGxsX3B0cF9yZWdpc3RlciAtIHJlZ2lzdGVyIFBUUCBjbG9jayBmb3IgYSBEUExMIGNoYW5uZWwKJiM0MzsgKiBAemxkcGxsOiBEUExMIGNoYW5uZWwgdG8gcmVnaXN0ZXIgUFRQIGNsb2NrIGZvcgomIzQzOyAqCiYjNDM7ICogUmV0dXJuOiAwIG9uIHN1Y2Nlc3MsICZsdDswIG9uIGVycm9yCiYjNDM7ICovCiYjNDM7c3RhdGljIGludCB6bDMwNzN4X2RwbGxfcHRwX3JlZ2lzdGVyKHN0cnVjdCB6bDMwNzN4X2RwbGwgKnpsZHBsbCkKJiM0Mzt7CiYjNDM7CXN0cnVjdCB6bDMwNzN4X2RldiAqemxkZXYgPSB6bGRwbGwtJmd0O2RldjsKJiM0MzsJc3RydWN0IHB0cF9jbG9jayAqcHRwX2Nsb2NrOwomIzQzOwomIzQzOwl6bGRwbGwtJmd0O3B0cF9pbmZvID0gemwzMDczeF9kcGxsX3B0cF9jbG9ja19pbmZvOwomIzQzOwlzbnByaW50Zih6bGRwbGwtJmd0O3B0cF9pbmZvLm5hbWUsIHNpemVvZih6bGRwbGwtJmd0O3B0cF9pbmZvLm5hbWUpLAomIzQzOwkJICYjMzQ7JXMtZHBsbCV1JiMzNDssIGRldl9uYW1lKHpsZGV2LSZndDtkZXYpLCB6bGRwbGwtJmd0O2lkKTsKJiM0MzsKJiM0MzsJcHRwX2Nsb2NrID0gcHRwX2Nsb2NrX3JlZ2lzdGVyKCZhbXA7emxkcGxsLSZndDtwdHBfaW5mbywgemxkZXYtJmd0O2Rldik7CiYjNDM7CWlmIChJU19FUlIocHRwX2Nsb2NrKSkgewomIzQzOwkJZGV2X2Vycih6bGRldi0mZ3Q7ZGV2LCAmIzM0O0ZhaWxlZCB0byByZWdpc3RlciBQVFAgY2xvY2sgZm9yIERQTEwldVxuJiMzNDssCiYjNDM7CQkJemxkcGxsLSZndDtpZCk7CiYjNDM7CQlyZXR1cm4gUFRSX0VSUihwdHBfY2xvY2spOwomIzQzOwl9CiYjNDM7CiYjNDM7CXpsZHBsbC0mZ3Q7cHRwX2Nsb2NrID0gcHRwX2Nsb2NrOwomIzQzOwomIzQzOwlyZXR1cm4gMDsKJiM0Mzt9CiYjNDM7CiYjNDM7LyoqCiYjNDM7ICogemwzMDczeF9kcGxsX3B0cF91bnJlZ2lzdGVyIC0gdW5yZWdpc3RlciBQVFAgY2xvY2sgZm9yIGEgRFBMTCBjaGFubmVsCiYjNDM7ICogQHpsZHBsbDogRFBMTCBjaGFubmVsIHRvIHVucmVnaXN0ZXIgUFRQIGNsb2NrIGZvcgomIzQzOyAqLwomIzQzO3N0YXRpYyB2b2lkIHpsMzA3M3hfZHBsbF9wdHBfdW5yZWdpc3RlcihzdHJ1Y3QgemwzMDczeF9kcGxsICp6bGRwbGwpCiYjNDM7ewomIzQzOwlpZiAoIUlTX0VSUl9PUl9OVUxMKHpsZHBsbC0mZ3Q7cHRwX2Nsb2NrKSkgewomIzQzOwkJcHRwX2Nsb2NrX3VucmVnaXN0ZXIoemxkcGxsLSZndDtwdHBfY2xvY2spOwomIzQzOwkJemxkcGxsLSZndDtwdHBfY2xvY2sgPSBOVUxMOwomIzQzOwl9CiB9CiAKIC8qKgpAQCAtMjM5OCw2ICYjNDM7MjczOSw0NyBAQCB6bDMwNzN4X2RwbGxfcmVmX3N5bmNfcGFpcnNfcmVnaXN0ZXIoc3RydWN0IHpsMzA3M3hfZHBsbCAqemxkcGxsKQogCXJldHVybiAwOwogfQogCiYjNDM7LyoqCiYjNDM7ICogemwzMDczeF9kcGxsX2FsbG9jIC0gYWxsb2NhdGUgRFBMTCBkZXZpY2UKJiM0MzsgKiBAemxkZXY6IHBvaW50ZXIgdG8gemwzMDczeCBkZXZpY2UKJiM0MzsgKiBAY2g6IERQTEwgY2hhbm5lbCBudW1iZXIKJiM0MzsgKgomIzQzOyAqIEFsbG9jYXRlcyBEUExMIGRldmljZSBzdHJ1Y3R1cmUgZm9yIGdpdmVuIERQTEwgY2hhbm5lbC4KJiM0MzsgKgomIzQzOyAqIFJldHVybjogcG9pbnRlciB0byBEUExMIGRldmljZSBvbiBzdWNjZXNzLCBlcnJvciBwb2ludGVyIG9uIGVycm9yCiYjNDM7ICovCiYjNDM7c3RydWN0IHpsMzA3M3hfZHBsbCAqCiYjNDM7emwzMDczeF9kcGxsX2FsbG9jKHN0cnVjdCB6bDMwNzN4X2RldiAqemxkZXYsIHU4IGNoKQomIzQzO3sKJiM0MzsJc3RydWN0IHpsMzA3M3hfZHBsbCAqemxkcGxsOwomIzQzOwomIzQzOwl6bGRwbGwgPSBremFsbG9jX29iaigqemxkcGxsKTsKJiM0MzsJaWYgKCF6bGRwbGwpCiYjNDM7CQlyZXR1cm4gRVJSX1BUUigtRU5PTUVNKTsKJiM0MzsKJiM0MzsJemxkcGxsLSZndDtkZXYgPSB6bGRldjsKJiM0MzsJemxkcGxsLSZndDtpZCA9IGNoOwomIzQzOwltdXRleF9pbml0KCZhbXA7emxkcGxsLSZndDtsb2NrKTsKJiM0MzsJSU5JVF9MSVNUX0hFQUQoJmFtcDt6bGRwbGwtJmd0O3BpbnMpOwomIzQzOwomIzQzOwlyZXR1cm4gemxkcGxsOwomIzQzO30KJiM0MzsKJiM0MzsvKioKJiM0MzsgKiB6bDMwNzN4X2RwbGxfZnJlZSAtIGZyZWUgRFBMTCBkZXZpY2UKJiM0MzsgKiBAemxkcGxsOiBwb2ludGVyIHRvIHpsMzA3M3hfZHBsbCBzdHJ1Y3R1cmUKJiM0MzsgKgomIzQzOyAqIERlYWxsb2NhdGVzIGdpdmVuIERQTEwgZGV2aWNlIHByZXZpb3VzbHkgYWxsb2NhdGVkIGJ5IEB6bDMwNzN4X2RwbGxfYWxsb2MuCiYjNDM7ICovCiYjNDM7dm9pZAomIzQzO3psMzA3M3hfZHBsbF9mcmVlKHN0cnVjdCB6bDMwNzN4X2RwbGwgKnpsZHBsbCkKJiM0Mzt7CiYjNDM7CVdBUk4oemxkcGxsLSZndDtkcGxsX2RldiwgJiMzNDtEUExMIGRldmljZSBpcyBzdGlsbCByZWdpc3RlcmVkXG4mIzM0Oyk7CiYjNDM7CiYjNDM7CW11dGV4X2Rlc3Ryb3koJmFtcDt6bGRwbGwtJmd0O2xvY2spOwomIzQzOwlrZnJlZSh6bGRwbGwpOwomIzQzO30KJiM0MzsKIC8qKgogICogemwzMDczeF9kcGxsX3JlZ2lzdGVyIC0gcmVnaXN0ZXIgRFBMTCBkZXZpY2UgYW5kIGFsbCBpdHMgcGlucwogICogQHpsZHBsbDogcG9pbnRlciB0byB6bDMwNzN4X2RwbGwgc3RydWN0dXJlCkBAIC0yNDI4LDYgJiM0MzsyODEwLDEzIEBAIHpsMzA3M3hfZHBsbF9yZWdpc3RlcihzdHJ1Y3QgemwzMDczeF9kcGxsICp6bGRwbGwpCiAJCXJldHVybiByYzsKIAl9CiAKJiM0MzsJcmMgPSB6bDMwNzN4X2RwbGxfcHRwX3JlZ2lzdGVyKHpsZHBsbCk7CiYjNDM7CWlmIChyYykgewomIzQzOwkJemwzMDczeF9kcGxsX3BpbnNfdW5yZWdpc3Rlcih6bGRwbGwpOwomIzQzOwkJemwzMDczeF9kcGxsX2RldmljZV91bnJlZ2lzdGVyKHpsZHBsbCk7CiYjNDM7CQlyZXR1cm4gcmM7CiYjNDM7CX0KJiM0MzsKIAlyZXR1cm4gMDsKIH0KIApAQCAtMjQ0MSw3ICYjNDM7MjgzMCw3IEBAIHpsMzA3M3hfZHBsbF9yZWdpc3RlcihzdHJ1Y3QgemwzMDczeF9kcGxsICp6bGRwbGwpCiB2b2lkCiB6bDMwNzN4X2RwbGxfdW5yZWdpc3RlcihzdHJ1Y3QgemwzMDczeF9kcGxsICp6bGRwbGwpCiB7Ci0JLyogVW5yZWdpc3RlciBhbGwgcGlucyBhbmQgZHBsbCAqLwomIzQzOwl6bDMwNzN4X2RwbGxfcHRwX3VucmVnaXN0ZXIoemxkcGxsKTsKIAl6bDMwNzN4X2RwbGxfcGluc191bnJlZ2lzdGVyKHpsZHBsbCk7CiAJemwzMDczeF9kcGxsX2RldmljZV91bnJlZ2lzdGVyKHpsZHBsbCk7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL2RwbGwvemwzMDczeC9kcGxsLmggYi9kcml2ZXJzL2RwbGwvemwzMDczeC9kcGxsLmgKaW5kZXggZmFlYmM0MDJiYTFiNy4uOTkzMjIxZGM2MzI0OSAxMDA2NDQKLS0tIGEvZHJpdmVycy9kcGxsL3psMzA3M3gvZHBsbC5oCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvZHBsbC96bDMwNzN4L2RwbGwuaApAQCAtNSw2ICYjNDM7NSw3IEBACiAKICNpbmNsdWRlICZsdDtsaW51eC9kcGxsLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvbGlzdC5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9wdHBfY2xvY2tfa2VybmVsLmgmZ3Q7CiAKICNpbmNsdWRlICYjMzQ7Y29yZS5oJiMzNDsKIApAQCAtMjIsNiAmIzQzOzIzLDggQEAKICAqIEB0eXBlOiBEUExMIHR5cGUgKFBQUyBvciBFRUMpCiAgKiBAbG9ja19zdGF0dXM6IGxhc3Qgc2F2ZWQgRFBMTCBsb2NrIHN0YXR1cwogICogQHBpbnM6IGxpc3Qgb2YgcGlucwomIzQzOyAqIEBwdHBfaW5mbzogUFRQIGNsb2NrIGluZm8KJiM0MzsgKiBAcHRwX2Nsb2NrOiByZWdpc3RlcmVkIFBUUCBjbG9jayAob3IgTlVMTCkKICAqLwogc3RydWN0IHpsMzA3M3hfZHBsbCB7CiAJc3RydWN0IGxpc3RfaGVhZAkJbGlzdDsKQEAgLTM2LDYgJiM0MzszOSw4IEBAIHN0cnVjdCB6bDMwNzN4X2RwbGwgewogCWVudW0gZHBsbF90eXBlCQkJdHlwZTsKIAllbnVtIGRwbGxfbG9ja19zdGF0dXMJCWxvY2tfc3RhdHVzOwogCXN0cnVjdCBsaXN0X2hlYWQJCXBpbnM7CiYjNDM7CXN0cnVjdCBwdHBfY2xvY2tfaW5mbwkJcHRwX2luZm87CiYjNDM7CXN0cnVjdCBwdHBfY2xvY2sJCSpwdHBfY2xvY2s7CiB9OwogCiBzdHJ1Y3QgemwzMDczeF9kcGxsICp6bDMwNzN4X2RwbGxfYWxsb2Moc3RydWN0IHpsMzA3M3hfZGV2ICp6bGRldiwgdTggY2gpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9kcGxsL3psMzA3M3gvcmVncy5oIGIvZHJpdmVycy9kcGxsL3psMzA3M3gvcmVncy5oCmluZGV4IGI3MGVhZDdkNDQ5NWIuLmYzYTVlMTIxNWFhMzYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZHBsbC96bDMwNzN4L3JlZ3MuaAomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL2RwbGwvemwzMDczeC9yZWdzLmgKQEAgLTE3OSw2ICYjNDM7MTc5LDIwIEBACiAjZGVmaW5lIFpMX0RQTExfREZfUkVBRF9DTUQJCQlHRU5NQVNLKDIsIDApCiAjZGVmaW5lIFpMX0RQTExfREZfUkVBRF9DTURfQUNDX0kJCTQKIAomIzQzOyNkZWZpbmUgWkxfUkVHX0RQTExfVElFX0NUUkwJCQlaTF9SRUcoNSwgMHgzMCwgMSkKJiM0MzsjZGVmaW5lIFpMX0RQTExfVElFX0NUUkxfT1AJCQlHRU5NQVNLKDIsIDApCiYjNDM7I2RlZmluZSBaTF9EUExMX1RJRV9DVFJMX09QX1dSCQkJNAomIzQzOwomIzQzOyNkZWZpbmUgWkxfUkVHX0RQTExfVElFX0NUUkxfTUFTSwkJWkxfUkVHKDUsIDB4MzEsIDEpCiYjNDM7CiYjNDM7I2RlZmluZSBaTF9SRUdfRFBMTF9UT0RfQ1RSTChfaWR4KQkJCQkJXAomIzQzOwlaTF9SRUdfSURYKF9pZHgsIDUsIDB4MzgsIDEsIFpMMzA3M1hfTUFYX0NIQU5ORUxTLCAxKQomIzQzOyNkZWZpbmUgWkxfRFBMTF9UT0RfQ1RSTF9TRU0JCQlCSVQoNCkKJiM0MzsjZGVmaW5lIFpMX0RQTExfVE9EX0NUUkxfQ01ECQkJR0VOTUFTSygzLCAwKQomIzQzOyNkZWZpbmUgWkxfRFBMTF9UT0RfQ1RSTF9DTURfV1JfTkVYVF8xSFoJMQomIzQzOyNkZWZpbmUgWkxfRFBMTF9UT0RfQ1RSTF9DTURfUkRfQ1VSUkVOVAkJOAomIzQzOyNkZWZpbmUgWkxfRFBMTF9UT0RfQ1RSTF9DTURfUkRfTkVYVF8xSFoJOQomIzQzOwogI2RlZmluZSBaTF9SRUdfRFBMTF9NRUFTX0NUUkwJCQlaTF9SRUcoNSwgMHg1MCwgMSkKICNkZWZpbmUgWkxfRFBMTF9NRUFTX0NUUkxfRU4JCQlCSVQoMCkKICNkZWZpbmUgWkxfRFBMTF9NRUFTX0NUUkxfQVZHX0ZBQ1RPUgkJR0VOTUFTSyg3LCA0KQpAQCAtMTkzLDYgJiM0MzsyMDcsOSBAQAogCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICogUmVnaXN0ZXIgUGFnZXMgNi03LCBEUExMIERhdGEKJiM0MzsgKgomIzQzOyAqIFBlci1jaGFubmVsIHJlZ2lzdGVycyB3aXRoIHN0cmlkZSAweDIwLiBDaGFubmVscyAwLTMgcmVzaWRlIG9uIHBhZ2UgNiwKJiM0MzsgKiBjaGFubmVsIDQgb24gcGFnZSA3LgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKICNkZWZpbmUgWkxfUkVHX0RQTExfREZfT0ZGU0VUXzAzKF9pZHgpCQkJCQlcCkBAIC0yMDIsNiAmIzQzOzIxOSwyNCBAQAogCSgoX2lkeCkgJmx0OyA0ID8gWkxfUkVHX0RQTExfREZfT0ZGU0VUXzAzKF9pZHgpIDogWkxfUkVHX0RQTExfREZfT0ZGU0VUXzQpCiAjZGVmaW5lIFpMX0RQTExfREZfT0ZGU0VUX1VOS05PV04JUzY0X01JTgogCiYjNDM7I2RlZmluZSBaTF9SRUdfRFBMTF9USUVfREFUQV8wMyhfaWR4KQkJCQkJXAomIzQzOwlaTF9SRUdfSURYKF9pZHgsIDYsIDB4MEMsIDYsIDQsIDB4MjApCiYjNDM7I2RlZmluZSBaTF9SRUdfRFBMTF9USUVfREFUQV80CQkJWkxfUkVHKDcsIDB4MEMsIDYpCiYjNDM7I2RlZmluZSBaTF9SRUdfRFBMTF9USUVfREFUQShfaWR4KQkJCQkJXAomIzQzOwkoKF9pZHgpICZsdDsgNCA/IFpMX1JFR19EUExMX1RJRV9EQVRBXzAzKF9pZHgpIDogWkxfUkVHX0RQTExfVElFX0RBVEFfNCkKJiM0MzsKJiM0MzsjZGVmaW5lIFpMX1JFR19EUExMX1RPRF9TRUNfMDMoX2lkeCkJCQkJCVwKJiM0MzsJWkxfUkVHX0lEWChfaWR4LCA2LCAweDEyLCA2LCA0LCAweDIwKQomIzQzOyNkZWZpbmUgWkxfUkVHX0RQTExfVE9EX1NFQ180CQkJWkxfUkVHKDcsIDB4MTIsIDYpCiYjNDM7I2RlZmluZSBaTF9SRUdfRFBMTF9UT0RfU0VDKF9pZHgpCQkJCQlcCiYjNDM7CSgoX2lkeCkgJmx0OyA0ID8gWkxfUkVHX0RQTExfVE9EX1NFQ18wMyhfaWR4KSA6IFpMX1JFR19EUExMX1RPRF9TRUNfNCkKJiM0MzsKJiM0MzsjZGVmaW5lIFpMX1JFR19EUExMX1RPRF9OU18wMyhfaWR4KQkJCQkJXAomIzQzOwlaTF9SRUdfSURYKF9pZHgsIDYsIDB4MTgsIDQsIDQsIDB4MjApCiYjNDM7I2RlZmluZSBaTF9SRUdfRFBMTF9UT0RfTlNfNAkJCVpMX1JFRyg3LCAweDE4LCA0KQomIzQzOyNkZWZpbmUgWkxfUkVHX0RQTExfVE9EX05TKF9pZHgpCQkJCQlcCiYjNDM7CSgoX2lkeCkgJmx0OyA0ID8gWkxfUkVHX0RQTExfVE9EX05TXzAzKF9pZHgpIDogWkxfUkVHX0RQTExfVE9EX05TXzQpCiYjNDM7CiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqIFJlZ2lzdGVyIFBhZ2UgOSwgU3ludGggYW5kIE91dHB1dAogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwpAQCAtMjIxLDYgJiM0MzsyNTYsMjMgQEAKICNkZWZpbmUgWkxfT1VUUFVUX0NUUkxfRU4JCQlCSVQoMCkKICNkZWZpbmUgWkxfT1VUUFVUX0NUUkxfU1lOVEhfU0VMCQlHRU5NQVNLKDYsIDQpCiAKJiM0MzsjZGVmaW5lIFpMX1JFR19PVVRQVVRfU1RFUF9USU1FX01BU0sJCVpMX1JFRyg5LCAweDM2LCAyKQomIzQzOwomIzQzOyNkZWZpbmUgWkxfUkVHX09VVFBVVF9QSEFTRV9TVEVQX0NUUkwJCVpMX1JFRyg5LCAweDM4LCAxKQomIzQzOyNkZWZpbmUgWkxfT1VUUFVUX1BIQVNFX1NURVBfQ1RSTF9EUExMCQlHRU5NQVNLKDYsIDQpCiYjNDM7I2RlZmluZSBaTF9PVVRQVVRfUEhBU0VfU1RFUF9DVFJMX1RPRF9TVEVQCUJJVCgzKQomIzQzOyNkZWZpbmUgWkxfT1VUUFVUX1BIQVNFX1NURVBfQ1RSTF9PUAkJR0VOTUFTSygxLCAwKQomIzQzOyNkZWZpbmUgWkxfT1VUUFVUX1BIQVNFX1NURVBfQ1RSTF9PUF9OT05FCTAKJiM0MzsjZGVmaW5lIFpMX09VVFBVVF9QSEFTRV9TVEVQX0NUUkxfT1BfUkVTRVQJMQomIzQzOyNkZWZpbmUgWkxfT1VUUFVUX1BIQVNFX1NURVBfQ1RSTF9PUF9SRUFECTIKJiM0MzsjZGVmaW5lIFpMX09VVFBVVF9QSEFTRV9TVEVQX0NUUkxfT1BfV1JJVEUJMwomIzQzOwomIzQzOyNkZWZpbmUgWkxfUkVHX09VVFBVVF9QSEFTRV9TVEVQX05VTUJFUgkJWkxfUkVHKDksIDB4MzksIDEpCiYjNDM7CiYjNDM7I2RlZmluZSBaTF9SRUdfT1VUUFVUX1BIQVNFX1NURVBfTUFTSwkJWkxfUkVHKDksIDB4M2EsIDIpCiYjNDM7CiYjNDM7I2RlZmluZSBaTF9SRUdfT1VUUFVUX1BIQVNFX1NURVBfREFUQQkJWkxfUkVHKDksIDB4M2MsIDQpCiYjNDM7CiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICogUmVnaXN0ZXIgUGFnZSAxMCwgUmVmIE1haWxib3gKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTEgMTQ6MDM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTgyMjgKCQkJCQkJCW91dHB1dDogMTgKCQkJCQkJCXRob3VnaHRzOiAxODgzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKlBUUCBDbG9jayBTdXBwb3J0IGluIHRoZSBBenVyaXRlIERQTEwgRHJpdmVyOiBBIE1lbW9yeSBTYWZldHkgUmV2aWV3KioKCkFscmlnaHQsIGxldCYjMzk7cyBkaXNzZWN0IHRoaXMgcGF0Y2ggYWRkaW5nIFBUUCBjbG9jayBzdXBwb3J0IGZvciB0aGUgTWljcm9jaGlwIEF6dXJpdGUgRFBMTC9QVFAvU3luY0UgZGV2aWNlcy4gVGhlIGNvcmUgaWRlYSBpcyB0byBpbnRyb2R1Y2UgZnVuY3Rpb25zIGZvciByZWFkaW5nIGFuZCB3cml0aW5nIFRpbWUgb2YgRGF5IChUb0QpLCBhZGp1c3RpbmcgcGhhc2UgYW5kIGZyZXF1ZW5jeSwgYW5kIHJlZ2lzdGVyaW5nIGEgUFRQIGNsb2NrIGRldmljZS4gVGhlIGludGVyYWN0aW9uIHdpdGggdGhlIGhhcmR3YXJlIGlzIHN0YW5kYXJkIGZhcmU6IHJlYWRpbmcgYW5kIHdyaXRpbmcgZGV2aWNlIHJlZ2lzdGVycyB2aWEgSTJDIG9yIFNQSSB1c2luZyB0aGUgYHJlZ21hcGAgZnJhbWV3b3JrLiBUaGUgcGF0Y2ggbGV2ZXJhZ2VzIHRoZSBleGlzdGluZyBQVFAgY2xvY2sgc3Vic3lzdGVtLCBwYXNzaW5nIGRhdGEgdGhyb3VnaCBpdCwgc28gdGhlIGRyaXZlciBvbmx5IG5lZWRzIHRvIHdvcnJ5IGFib3V0IHRoZSBjYWxsYmFja3MuIFRoZSBzdWJzeXN0ZW0gaGFuZGxlcyB0aGUgYGlvY3RsYCBjYWxscyBhbmQgdHJhbnNsYXRlcyB0aGVtIGludG8gYHRpbWVzcGVjNjRgIG9yIHNpbWlsYXIgc3RydWN0dXJlcyB0aGF0IHRoZSBkcml2ZXIgY2FuIHVuZGVyc3RhbmQuCgpNeSBpbW1lZGlhdGUgZm9jdXMgaXMgb24gbWVtb3J5IHNhZmV0eTsgc3BlY2lmaWNhbGx5LCBJIG5lZWQgdG8gbWFrZSBzdXJlIHdlJiMzOTtyZSBub3QgaW5hZHZlcnRlbnRseSBsZWFraW5nIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBMZXQmIzM5O3Mgc3RhcnQgd2l0aCBgemwzMDczeF9jaGFuX3RvZF9yZWFkYC4gVGhpcyBmdW5jdGlvbiBwb3B1bGF0ZXMgYSBgc3RydWN0IHRpbWVzcGVjNjRgIHBvaW50ZWQgdG8gYnkgYHRzYC4gVGhlIGZ1bmN0aW9uIHJlYWRzIHNlY29uZHMgYW5kIG5hbm9zZWNvbmRzIGZyb20gZGV2aWNlIHJlZ2lzdGVycy4gSWYgdGhlIHJlYWQgb3BlcmF0aW9ucywgYHpsMzA3M3hfcmVhZF91NDhgIG9yIGB6bDMwNzN4X3JlYWRfdTMyYCwgZmFpbCwgaXQgcmV0dXJucyBhbiBlcnJvciwgYW5kIHRoZSBgdHNgIGlzIG5vdCBmdWxseSBpbml0aWFsaXplZC4gSG93ZXZlciwgdGhlIGNhbGxpbmcgZnVuY3Rpb24gYHpsMzA3M3hfZHBsbF9wdHBfZ2V0dGltZXg2NGAgcHJvcGFnYXRlcyB0aGUgZXJyb3IuIFRoZSBQVFAgc3Vic3lzdGVtIGhhbmRsZXMgdGhlIGVycm9yIGFuZCBkb2VzbiYjMzk7dCBwYXNzIGEgcGFydGlhbGx5IGluaXRpYWxpemVkIGB0c2AgdG8gdXNlciBzcGFjZSwgd2hpY2ggaXMgZ29vZC4gTm8gdW5pbml0aWFsaXplZCBtZW1vcnkgbGVhayBpbiB0aGF0IGNhc2UuCgpUaGVuLCBJJiMzOTttIGNoZWNraW5nIGB6bDMwNzN4X2RwbGxfcHRwX2FkanRpbWVfcGhhc2Vfc3RlcGAuIEhlcmUsIGBzeW50aF9tYXNrYCBpcyBpbml0aWFsaXplZCB0byB6ZXJvLCB3aGljaCBpcyBnb29kLiBJdCBsb29rcyBsaWtlIGl0IGlzIHNhZmUuCgpOZXh0IEkgcmV2aWV3IGB6bDMwNzN4X2NoYW5fdG9kX2FkanVzdGAuIFRoZSBmdW5jdGlvbiByZWFkcyBgdHNfbmV4dGAgYW5kIGB0c19jdXJgIHdpdGggYHpsMzA3M3hfY2hhbl90b2RfcmVhZGAuIFRoZSB2YXJpYWJsZXMgYXJlIGZ1bGx5IGluaXRpYWxpemVkIG9uIHN1Y2Nlc3MuIFNvIGl0IGxvb2tzIHNhZmUuCgpUaGUgcmVnaXN0cmF0aW9uIG9mIHRoZSBQVFAgY2xvY2sgZGV2aWNlIGlzIGFuIGltcG9ydGFudCBhcmVhIHRvIHJldmlldyBmb3IgbWVtb3J5IHNhZmV0eS4gVGhlIHBhdGNoIGRlZmluZXMgYHpsMzA3M3hfZHBsbF9wdHBfY2xvY2tfaW5mb2AsIGEgYHB0cF9jbG9ja19pbmZvYCBzdHJ1Y3QuIFRoZSBkcml2ZXIgY29waWVzIHRoZSBjb250ZW50cyBvZiBgemwzMDczeF9kcGxsX3B0cF9jbG9ja19pbmZvYCBpbnRvIGEgbG9jYWwgYHB0cF9pbmZvYCBzdHJ1Y3QsIGFuZCB0aGVuIG92ZXJ3cml0ZXMgdGhlIG5hbWUgZmllbGQgd2l0aCBhIGNhbGwgdG8gYHNucHJpbnRmYC4gSSBuZWVkIHRvIGVuc3VyZSB0aGVyZSBhcmUgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgbGVha3MuIExvb2tpbmcgYXQgdGhlIGRlZmluaXRpb24sIHRoZSBgbmFtZWAgZmllbGQgaXMgYSBgY2hhciBuYW1lWzE2XWAgYXJyYXkuIERvZXMgYHNucHJpbnRmYCB6ZXJvLXBhZCB0aGUgcmVzdCBvZiB0aGUgYXJyYXk/IEkgcmVtZW1iZXIgdGhhdCBgc25wcmludGZgIHdpbGwgbm90LiBJZiBgemwzMDczeF9kcGxsX3B0cF9jbG9ja19pbmZvLm5hbWVgIHdhc24mIzM5O3QgZnVsbHkgaW5pdGlhbGl6ZWQsIHRoZSB1bmluaXRpYWxpemVkIG1lbW9yeSBjb3VsZCBiZSBsZWFrZWQuIEhvd2V2ZXIsIGB6bDMwNzN4X2RwbGxfcHRwX2Nsb2NrX2luZm9gIGlzIGBzdGF0aWMgY29uc3RgLCBzbyBpdCBpcyB6ZXJvIGluaXRpYWxpemVkIGJ5IHRoZSBjb21waWxlci4gSXQgaXMgemVyby1wYWRkZWQsIGFuZCB0aGVuIGBzbnByaW50ZmAgb3ZlcndyaXRlcyBzb21lIG9mIHRoZSB6ZXJvIHZhbHVlcywgYnV0IHRoZSByZW1haW5pbmcgcGFydCBpcyB6ZXJvLCBzbyBubyBsZWFrLgoKRmluYWxseSwgYHpsMzA3M3hfZHBsbF9hbGxvY2AuIFRoZSBjb2RlIHVzZXMgYGt6YWxsb2Nfb2JqYCwgd2hpY2ggbG9va3Mgc3VzcGljaW91cy4gSXMgaXQgYSBrZXJuZWwgbWFjcm8sIG9yIGEgdHlwbz8gSSBzdXNwZWN0IHRoYXQgaXQgaXMgYSBtYWNybyBmb3IgYGt6YWxsb2Moc2l6ZW9mKCp6bGRwbGwpLCBHRlBfS0VSTkVMKWAuIFNpbmNlIHRoZSBtYWNybyBuYW1lIGNvbnRhaW5zIGB6YWxsb2NgLCBpdCBzaG91bGQgemVybyB0aGUgbWVtb3J5LiBJIG5lZWQgdG8gbWFrZSBzdXJlIHRoaXMgaXMgdGhlIGNhc2UuIExldCBtZSBjaGVjayB0aGUgZGVmaW5pdGlvbiBvZiBga3phbGxvY19vYmpgLgoKT3ZlcmFsbCwgdGhpcyBsb29rcyBsaWtlIGEgd2VsbC1zdHJ1Y3R1cmVkIHBhdGNoIHdpdGggYXR0ZW50aW9uIHRvIG1lbW9yeSBzYWZldHkuIE15IHNwb3QgY2hlY2tzIGhhdmVuJiMzOTt0IHJldmVhbGVkIGFueSBpbW1lZGlhdGUgdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3MsIGJ1dCBJIHdpbGwgaW52ZXN0aWdhdGUgYGt6YWxsb2Nfb2JqYCBmdXJ0aGVyLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMSAxNDowMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtremFsbG9jX29iaiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtcbkZ1bGwgb3V0cHV0IGlzIHRvbyBsb25nLCBzaG93aW5nIDUwMCBvdXQgb2YgNzkyNzkgbGluZXMuXG5Vc2UgbW9yZSBwcmVjaXNlIGV4cHJlc3Npb24gaWYgcG9zc2libGUuXG5cbkRvY3VtZW50YXRpb24vY29yZS1hcGkvbGlzdC5yc3Q9MTAzPWxpc3Q6XG4tLVxuRG9jdW1lbnRhdGlvbi9jb3JlLWFwaS9saXN0LnJzdC0xMTQtXG5Eb2N1bWVudGF0aW9uL2NvcmUtYXBpL2xpc3QucnN0OjExNTogICAgICAgICAgZ3JvY2sgPSBremFsbG9jX29iaigqZ3JvY2spO1xuRG9jdW1lbnRhdGlvbi9jb3JlLWFwaS9saXN0LnJzdC0xMTYtICAgICAgICAgIGlmICghZ3JvY2spXG4tLVxuRG9jdW1lbnRhdGlvbi9jb3JlLWFwaS9saXN0LnJzdC0xMjUtXG5Eb2N1bWVudGF0aW9uL2NvcmUtYXBpL2xpc3QucnN0OjEyNjogICAgICAgICAgZGltaXRyaSA9IGt6YWxsb2Nfb2JqKCpkaW1pdHJpKTtcbkRvY3VtZW50YXRpb24vY29yZS1hcGkvbGlzdC5yc3QtMTI3LSAgICAgICAgICBpZiAoIWRpbWl0cmkpXG4tLVxuRG9jdW1lbnRhdGlvbi9kcml2ZXItYXBpL21haWxib3gucnN0PTQ1PWEgbWVzc2FnZSBhbmQgYSBjYWxsYmFjayBmdW5jdGlvbiB0byB0aGUgQVBJIGFuZCByZXR1cm4gaW1tZWRpYXRlbHkpLlxuLS1cbkRvY3VtZW50YXRpb24vZHJpdmVyLWFwaS9tYWlsYm94LnJzdC04OS1cbkRvY3VtZW50YXRpb24vZHJpdmVyLWFwaS9tYWlsYm94LnJzdDo5MDpcdFx0ZGNfc3luYyA9IGt6YWxsb2Nfb2JqKCpkY19zeW5jKTtcbkRvY3VtZW50YXRpb24vZHJpdmVyLWFwaS9tYWlsYm94LnJzdDo5MTpcdFx0ZGNfYXN5bmMgPSBremFsbG9jX29iaigqZGNfYXN5bmMpO1xuRG9jdW1lbnRhdGlvbi9kcml2ZXItYXBpL21haWxib3gucnN0LTkyLVxuLS1cbkRvY3VtZW50YXRpb24vZHJpdmVyLWFwaS9tZWRpYS92NGwyLWZoLnJzdD0yNj1FeGFtcGxlOlxuLS1cbkRvY3VtZW50YXRpb24vZHJpdmVyLWFwaS9tZWRpYS92NGwyLWZoLnJzdC00NC1cbkRvY3VtZW50YXRpb24vZHJpdmVyLWFwaS9tZWRpYS92NGwyLWZoLnJzdDo0NTpcdFx0bXlfZmggPSBremFsbG9jX29iaigqbXlfZmgpO1xuRG9jdW1lbnRhdGlvbi9kcml2ZXItYXBpL21lZGlhL3Y0bDItZmgucnN0LTQ2LVxuLS1cbkRvY3VtZW50YXRpb24vcHJvY2Vzcy9jb2Rpbmctc3R5bGUucnN0PTkzOD1UaGUga2VybmVsIHByb3ZpZGVzIHRoZSBmb2xsb3dpbmcgZ2VuZXJhbCBwdXJwb3NlIG1lbW9yeSBhbGxvY2F0b3JzOlxuRG9jdW1lbnRhdGlvbi9wcm9jZXNzL2NvZGluZy1zdHlsZS5yc3Q6OTM5OmttYWxsb2MoKSwga3phbGxvYygpLCBrbWFsbG9jX29ianMoKSwga3phbGxvY19vYmpzKCksIHZtYWxsb2MoKSwgYW5kXG5Eb2N1bWVudGF0aW9uL3Byb2Nlc3MvY29kaW5nLXN0eWxlLnJzdC05NDAtdnphbGxvYygpLiAgUGxlYXNlIHJlZmVyIHRvIHRoZSBBUEkgZG9jdW1lbnRhdGlvbiBmb3IgZnVydGhlciBpbmZvcm1hdGlvblxuLS1cbkRvY3VtZW50YXRpb24vcHJvY2Vzcy9jb2Rpbmctc3R5bGUucnN0PTk2ND1UaGUgcHJlZmVycmVkIGZvcm0gZm9yIGFsbG9jYXRpbmcgYSB6ZXJvZWQgYXJyYXkgaXMgdGhlIGZvbGxvd2luZzpcbi0tXG5Eb2N1bWVudGF0aW9uL3Byb2Nlc3MvY29kaW5nLXN0eWxlLnJzdC05NjctXG5Eb2N1bWVudGF0aW9uL3Byb2Nlc3MvY29kaW5nLXN0eWxlLnJzdDo5Njg6XHRwID0ga3phbGxvY19vYmpzKCpwLCBuLCAuLi4pO1xuRG9jdW1lbnRhdGlvbi9wcm9jZXNzL2NvZGluZy1zdHlsZS5yc3QtOTY5LVxuLS1cbkRvY3VtZW50YXRpb24vcHJvY2Vzcy9kZXByZWNhdGVkLnJzdD0zOTg9YmVjb21lLCByZXNwZWN0aXZlbHk6OlxuLS1cbkRvY3VtZW50YXRpb24vcHJvY2Vzcy9kZXByZWNhdGVkLnJzdC00MDAtXHRwdHIgPSBrbWFsbG9jX29iaigqcHRyIFssIGdmcF0gKTtcbkRvY3VtZW50YXRpb24vcHJvY2Vzcy9kZXByZWNhdGVkLnJzdDo0MDE6XHRwdHIgPSBremFsbG9jX29iaigqcHRyIFssIGdmcF0gKTtcbkRvY3VtZW50YXRpb24vcHJvY2Vzcy9kZXByZWNhdGVkLnJzdC00MDItXHRwdHIgPSBrbWFsbG9jX29ianMoKnB0ciwgY291bnQgWywgZ2ZwXSApO1xuRG9jdW1lbnRhdGlvbi9wcm9jZXNzL2RlcHJlY2F0ZWQucnN0OjQwMzpcdHB0ciA9IGt6YWxsb2Nfb2JqcygqcHRyLCBjb3VudCBbLCBnZnBdICk7XG5Eb2N1bWVudGF0aW9uL3Byb2Nlc3MvZGVwcmVjYXRlZC5yc3QtNDA0LVx0cHRyID0ga21hbGxvY19mbGV4KCpwdHIsIGZsZXhfbWVtYmVyLCBjb3VudCBbLCBnZnBdICk7XG4tLVxuRG9jdW1lbnRhdGlvbi9zb3VuZC9rZXJuZWwtYXBpL3dyaXRpbmctYW4tYWxzYS1kcml2ZXIucnN0PTIwOD10byBkZXRhaWxzIGV4cGxhaW5lZCBpbiB0aGUgZm9sbG93aW5nIHNlY3Rpb24uXG4tLVxuRG9jdW1lbnRhdGlvbi9zb3VuZC9rZXJuZWwtYXBpL3dyaXRpbmctYW4tYWxzYS1kcml2ZXIucnN0LTI2OC0gICAgICAgICAgICAgIC8qIGFsbG9jYXRlIGEgY2hpcC1zcGVjaWZpYyBkYXRhIHdpdGggemVybyBmaWxsZWQgKi9cbkRvY3VtZW50YXRpb24vc291bmQva2VybmVsLWFwaS93cml0aW5nLWFuLWFsc2EtZHJpdmVyLnJzdDoyNjk6ICAgICAgICAgICAgICBjaGlwID0ga3phbGxvY19vYmooKmNoaXApO1xuRG9jdW1lbnRhdGlvbi9zb3VuZC9rZXJuZWwtYXBpL3dyaXRpbmctYW4tYWxzYS1kcml2ZXIucnN0LTI3MC0gICAgICAgICAgICAgIGlmIChjaGlwID09IE5VTEwpXG4tLVxuRG9jdW1lbnRhdGlvbi9zb3VuZC9rZXJuZWwtYXBpL3dyaXRpbmctYW4tYWxzYS1kcml2ZXIucnN0PTYyMz1BZnRlciBhbGxvY2F0aW5nIGEgY2FyZCBpbnN0YW5jZSB2aWEgOmM6ZnVuYzpgc25kX2NhcmRfbmV3KClgXG4tLVxuRG9jdW1lbnRhdGlvbi9zb3VuZC9rZXJuZWwtYXBpL3dyaXRpbmctYW4tYWxzYS1kcml2ZXIucnN0LTYzMC0gIC4uLi4uXG5Eb2N1bWVudGF0aW9uL3NvdW5kL2tlcm5lbC1hcGkvd3JpdGluZy1hbi1hbHNhLWRyaXZlci5yc3Q6NjMxOiAgY2hpcCA9IGt6YWxsb2Nfb2JqKCpjaGlwKTtcbkRvY3VtZW50YXRpb24vc291bmQva2VybmVsLWFwaS93cml0aW5nLWFuLWFsc2EtZHJpdmVyLnJzdC02MzItXG4tLVxuRG9jdW1lbnRhdGlvbi9zb3VuZC9rZXJuZWwtYXBpL3dyaXRpbmctYW4tYWxzYS1kcml2ZXIucnN0PTY5OD1kZXN0cnVjdG9yIGFuZCBQQ0kgZW50cmllcy4gRXhhbXBsZSBjb2RlIGlzIHNob3duIGZpcnN0LCBiZWxvdzo6XG4tLVxuRG9jdW1lbnRhdGlvbi9zb3VuZC9rZXJuZWwtYXBpL3dyaXRpbmctYW4tYWxzYS1kcml2ZXIucnN0LTc0OS1cbkRvY3VtZW50YXRpb24vc291bmQva2VybmVsLWFwaS93cml0aW5nLWFuLWFsc2EtZHJpdmVyLnJzdDo3NTA6ICAgICAgICAgICAgICBjaGlwID0ga3phbGxvY19vYmooKmNoaXApO1xuRG9jdW1lbnRhdGlvbi9zb3VuZC9rZXJuZWwtYXBpL3dyaXRpbmctYW4tYWxzYS1kcml2ZXIucnN0LTc1MS0gICAgICAgICAgICAgIGlmIChjaGlwID09IE5VTEwpIHtcbi0tXG5Eb2N1bWVudGF0aW9uL3NvdW5kL2tlcm5lbC1hcGkvd3JpdGluZy1hbi1hbHNhLWRyaXZlci5yc3Q9MzgyMz1jaGlwIGRhdGEgaW5kaXZpZHVhbGx5Ojpcbi0tXG5Eb2N1bWVudGF0aW9uL3NvdW5kL2tlcm5lbC1hcGkvd3JpdGluZy1hbi1hbHNhLWRyaXZlci5yc3QtMzgzNS0gICAgICAgICAgLi4uLlxuRG9jdW1lbnRhdGlvbi9zb3VuZC9rZXJuZWwtYXBpL3dyaXRpbmctYW4tYWxzYS1kcml2ZXIucnN0OjM4MzY6ICAgICAgICAgIGNoaXAgPSBremFsbG9jX29iaigqY2hpcCk7XG5Eb2N1bWVudGF0aW9uL3NvdW5kL2tlcm5lbC1hcGkvd3JpdGluZy1hbi1hbHNhLWRyaXZlci5yc3QtMzgzNy0gICAgICAgICAgLi4uLlxuLS1cbkRvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL3poX0NOL3ZpZGVvNGxpbnV4L3Y0bDItZnJhbWV3b3JrLnR4dD03OTQ9aW50IG15X29wZW4oc3RydWN0IGZpbGUgKmZpbGUpXG4tLVxuRG9jdW1lbnRhdGlvbi90cmFuc2xhdGlvbnMvemhfQ04vdmlkZW80bGludXgvdjRsMi1mcmFtZXdvcmsudHh0LTgwMS1cbkRvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL3poX0NOL3ZpZGVvNGxpbnV4L3Y0bDItZnJhbWV3b3JrLnR4dDo4MDI6XHRteV9maCA9IGt6YWxsb2Nfb2JqKCpteV9maCk7XG5Eb2N1bWVudGF0aW9uL3RyYW5zbGF0aW9ucy96aF9DTi92aWRlbzRsaW51eC92NGwyLWZyYW1ld29yay50eHQtODAzLVxuLS1cbmFyY2gvYWxwaGEva2VybmVsL21vZHVsZS5jPTY0PW1vZHVsZV9mcm9iX2FyY2hfc2VjdGlvbnMoRWxmNjRfRWhkciAqaGRyLCBFbGY2NF9TaGRyICpzZWNoZHJzLFxuLS1cbmFyY2gvYWxwaGEva2VybmVsL21vZHVsZS5jLTk1LVx0bnN5bXMgPSBzeW10YWItXHUwMDNlc2hfc2l6ZSAvIHNpemVvZihFbGY2NF9TeW0pO1xuYXJjaC9hbHBoYS9rZXJuZWwvbW9kdWxlLmM6OTY6XHRjaGFpbnMgPSBremFsbG9jX29ianMoc3RydWN0IGdvdF9lbnRyeSwgbnN5bXMpO1xuYXJjaC9hbHBoYS9rZXJuZWwvbW9kdWxlLmMtOTctXHRpZiAoIWNoYWlucykge1xuLS1cbmFyY2gvYWxwaGEva2VybmVsL3NldHVwLmM9MzkwPXJlZ2lzdGVyX2NwdXModm9pZClcbi0tXG5hcmNoL2FscGhhL2tlcm5lbC9zZXR1cC5jLTM5NC1cdGZvcl9lYWNoX3Bvc3NpYmxlX2NwdShpKSB7XG5hcmNoL2FscGhhL2tlcm5lbC9zZXR1cC5jOjM5NTpcdFx0c3RydWN0IGNwdSAqcCA9IGt6YWxsb2Nfb2JqKCpwKTtcbmFyY2gvYWxwaGEva2VybmVsL3NldHVwLmMtMzk2LVx0XHRpZiAoIXApXG4tLVxuYXJjaC9hcmMvbmV0L2JwZl9qaXRfY29yZS5jPTExMjA9c3RhdGljIGludCBqaXRfcHJlcGFyZV9maW5hbF9tZW1fYWxsb2Moc3RydWN0IGppdF9jb250ZXh0ICpjdHgpXG4tLVxuYXJjaC9hcmMvbmV0L2JwZl9qaXRfY29yZS5jLTExMzEtXHRpZiAoY3R4LVx1MDAzZW5lZWRfZXh0cmFfcGFzcykge1xuYXJjaC9hcmMvbmV0L2JwZl9qaXRfY29yZS5jOjExMzI6XHRcdGN0eC1cdTAwM2VqaXRfZGF0YSA9IGt6YWxsb2Nfb2JqKCpjdHgtXHUwMDNlaml0X2RhdGEpO1xuYXJjaC9hcmMvbmV0L2JwZl9qaXRfY29yZS5jLTExMzMtXHRcdGlmICghY3R4LVx1MDAzZWppdF9kYXRhKVxuLS1cbmFyY2gvYXJtL2NvbW1vbi9sb2NvbW8uYz0yMjA9bG9jb21vX2luaXRfb25lX2NoaWxkKHN0cnVjdCBsb2NvbW8gKmxjaGlwLCBzdHJ1Y3QgbG9jb21vX2Rldl9pbmZvICppbmZvKVxuLS1cbmFyY2gvYXJtL2NvbW1vbi9sb2NvbW8uYy0yMjQtXG5hcmNoL2FybS9jb21tb24vbG9jb21vLmM6MjI1Olx0ZGV2ID0ga3phbGxvY19vYmooc3RydWN0IGxvY29tb19kZXYpO1xuYXJjaC9hcm0vY29tbW9uL2xvY29tby5jLTIyNi1cdGlmICghZGV2KSB7XG4tLVxuYXJjaC9hcm0vY29tbW9uL2xvY29tby5jPTM1Nj1fX2xvY29tb19wcm9iZShzdHJ1Y3QgZGV2aWNlICptZSwgc3RydWN0IHJlc291cmNlICptZW0sIGludCBpcnEpXG4tLVxuYXJjaC9hcm0vY29tbW9uL2xvY29tby5jLTM2Mi1cbmFyY2gvYXJtL2NvbW1vbi9sb2NvbW8uYzozNjM6XHRsY2hpcCA9IGt6YWxsb2Nfb2JqKHN0cnVjdCBsb2NvbW8pO1xuYXJjaC9hcm0vY29tbW9uL2xvY29tby5jLTM2NC1cdGlmICghbGNoaXApXG4tLVxuYXJjaC9hcm0vY29tbW9uL3NhMTExMS5jPTczMz1zYTExMTFfaW5pdF9vbmVfY2hpbGQoc3RydWN0IHNhMTExMSAqc2FjaGlwLCBzdHJ1Y3QgcmVzb3VyY2UgKnBhcmVudCxcbi0tXG5hcmNoL2FybS9jb21tb24vc2ExMTExLmMtNzM5LVxuYXJjaC9hcm0vY29tbW9uL3NhMTExMS5jOjc0MDpcdGRldiA9IGt6YWxsb2Nfb2JqKHN0cnVjdCBzYTExMTFfZGV2KTtcbmFyY2gvYXJtL2NvbW1vbi9zYTExMTEuYy03NDEtXHRpZiAoIWRldikge1xuLS1cbmFyY2gvYXJtL2NvbW1vbi9zY29vcC5jPTE3OD1zdGF0aWMgaW50IHNjb29wX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpXG4tLVxuYXJjaC9hcm0vY29tbW9uL3Njb29wLmMtMTg3LVxuYXJjaC9hcm0vY29tbW9uL3Njb29wLmM6MTg4Olx0ZGV2cHRyID0ga3phbGxvY19vYmooc3RydWN0IHNjb29wX2Rldik7XG5hcmNoL2FybS9jb21tb24vc2Nvb3AuYy0xODktXHRpZiAoIWRldnB0cilcbi0tXG5hcmNoL2FybS9rZXJuZWwvc21wLmM9MTA4PXN0YXRpYyBpbnQgc2Vjb25kYXJ5X2JpZ2xpdHRsZV9wcmVwYXJlKHVuc2lnbmVkIGludCBjcHUpXG4tLVxuYXJjaC9hcm0va2VybmVsL3NtcC5jLTExMC1cdGlmICghY3B1X3Z0YWJsZVtjcHVdKVxuYXJjaC9hcm0va2VybmVsL3NtcC5jOjExMTpcdFx0Y3B1X3Z0YWJsZVtjcHVdID0ga3phbGxvY19vYmooKmNwdV92dGFibGVbY3B1XSk7XG5hcmNoL2FybS9rZXJuZWwvc21wLmMtMTEyLVxuLS1cbmFyY2gvYXJtL2tlcm5lbC92ZHNvLmM9MTY5PXN0YXRpYyBpbnQgX19pbml0IHZkc29faW5pdCh2b2lkKVxuLS1cbmFyY2gvYXJtL2tlcm5lbC92ZHNvLmMtMTgxLVx0LyogQWxsb2NhdGUgdGhlIFZEU08gdGV4dCBwYWdlbGlzdCAqL1xuYXJjaC9hcm0va2VybmVsL3Zkc28uYzoxODI6XHR2ZHNvX3RleHRfcGFnZWxpc3QgPSBremFsbG9jX29ianMoc3RydWN0IHBhZ2UgKiwgdGV4dF9wYWdlcyk7XG5hcmNoL2FybS9rZXJuZWwvdmRzby5jLTE4My1cdGlmICh2ZHNvX3RleHRfcGFnZWxpc3QgPT0gTlVMTClcbi0tXG5hcmNoL2FybS9tYWNoLWZvb3RicmlkZ2UvZGMyMTI4NS5jPTI2MT1pbnQgX19pbml0IGRjMjEyODVfc2V0dXAoaW50IG5yLCBzdHJ1Y3QgcGNpX3N5c19kYXRhICpzeXMpXG4tLVxuYXJjaC9hcm0vbWFjaC1mb290YnJpZGdlL2RjMjEyODUuYy0yNjQtXG5hcmNoL2FybS9tYWNoLWZvb3RicmlkZ2UvZGMyMTI4NS5jOjI2NTpcdHJlcyA9IGt6YWxsb2Nfb2JqcyhzdHJ1Y3QgcmVzb3VyY2UsIDIpO1xuYXJjaC9hcm0vbWFjaC1mb290YnJpZGdlL2RjMjEyODUuYy0yNjYtXHRpZiAoIXJlcykge1xuLS1cbmFyY2gvYXJtL21hY2gtZm9vdGJyaWRnZS9lYnNhMjg1LmM9Njk9c3RhdGljIGludCBfX2luaXQgZWJzYTI4NV9sZWRzX2luaXQodm9pZClcbi0tXG5hcmNoL2FybS9tYWNoLWZvb3RicmlkZ2UvZWJzYTI4NS5jLTg2LVxuYXJjaC9hcm0vbWFjaC1mb290YnJpZGdlL2Vic2EyODUuYzo4NzpcdFx0bGVkID0ga3phbGxvY19vYmooKmxlZCk7XG5hcmNoL2FybS9tYWNoLWZvb3RicmlkZ2UvZWJzYTI4NS5jLTg4LVx0XHRpZiAoIWxlZClcbi0tXG5hcmNoL2FybS9tYWNoLWZvb3RicmlkZ2UvbmV0d2luZGVyLWh3LmM9NzIwPXN0YXRpYyBpbnQgX19pbml0IG5ldHdpbmRlcl9sZWRzX2luaXQodm9pZClcbi0tXG5hcmNoL2FybS9tYWNoLWZvb3RicmlkZ2UvbmV0d2luZGVyLWh3LmMtNzI5LVxuYXJjaC9hcm0vbWFjaC1mb290YnJpZGdlL25ldHdpbmRlci1ody5jOjczMDpcdFx0bGVkID0ga3phbGxvY19vYmooKmxlZCk7XG5hcmNoL2FybS9tYWNoLWZvb3RicmlkZ2UvbmV0d2luZGVyLWh3LmMtNzMxLVx0XHRpZiAoIWxlZClcbi0tXG5hcmNoL2FybS9tYWNoLWlteC9tbWRjLmM9NDczPXN0YXRpYyBpbnQgaW14X21tZGNfcGVyZl9pbml0KHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYsIHZvaWQgX19pb21lbSAqbW1kY19iYXNlLFxuLS1cbmFyY2gvYXJtL21hY2gtaW14L21tZGMuYy00NzktXG5hcmNoL2FybS9tYWNoLWlteC9tbWRjLmM6NDgwOlx0cG11X21tZGMgPSBremFsbG9jX29iaigqcG11X21tZGMpO1xuYXJjaC9hcm0vbWFjaC1pbXgvbW1kYy5jLTQ4MS1cdGlmICghcG11X21tZGMpIHtcbi0tXG5hcmNoL2FybS9tYWNoLW12ZWJ1L2JvYXJkLXY3LmM9MTE0PXN0YXRpYyB2b2lkIF9faW5pdCBpMmNfcXVpcmsodm9pZClcbi0tXG5hcmNoL2FybS9tYWNoLW12ZWJ1L2JvYXJkLXY3LmMtMTI5LVxuYXJjaC9hcm0vbWFjaC1tdmVidS9ib2FyZC12Ny5jOjEzMDpcdFx0bmV3X2NvbXBhdCA9IGt6YWxsb2Nfb2JqKCpuZXdfY29tcGF0KTtcbmFyY2gvYXJtL21hY2gtbXZlYnUvYm9hcmQtdjcuYy0xMzEtXG4tLVxuYXJjaC9hcm0vbWFjaC1tdmVidS9jb2hlcmVuY3kuYz0xNjM9c3RhdGljIHZvaWQgX19pbml0IGFybWFkYV8zNzVfMzgwX2NvaGVyZW5jeV9pbml0KHN0cnVjdCBkZXZpY2Vfbm9kZSAqbnApXG4tLVxuYXJjaC9hcm0vbWFjaC1tdmVidS9jb2hlcmVuY3kuYy0xODctXG5hcmNoL2FybS9tYWNoLW12ZWJ1L2NvaGVyZW5jeS5jOjE4ODpcdFx0cCA9IGt6YWxsb2Nfb2JqKCpwKTtcbmFyY2gvYXJtL21hY2gtbXZlYnUvY29oZXJlbmN5LmMtMTg5LVx0XHRwLVx1MDAzZW5hbWUgPSBrc3RyZHVwKFwmIzM0O2FybSxpby1jb2hlcmVudFwmIzM0OywgR0ZQX0tFUk5FTCk7XG4tLVxuYXJjaC9hcm0vbWFjaC1tdmVidS9tdmVidS1zb2MtaWQuYz0xNDg9c3RhdGljIGludCBfX2luaXQgbXZlYnVfc29jX2RldmljZSh2b2lkKVxuLS1cbmFyY2gvYXJtL21hY2gtbXZlYnUvbXZlYnUtc29jLWlkLmMtMTU2LVxuYXJjaC9hcm0vbWFjaC1tdmVidS9tdmVidS1zb2MtaWQuYzoxNTc6XHRzb2NfZGV2X2F0dHIgPSBremFsbG9jX29iaigqc29jX2Rldl9hdHRyKTtcbmFyY2gvYXJtL21hY2gtbXZlYnUvbXZlYnUtc29jLWlkLmMtMTU4LVx0aWYgKCFzb2NfZGV2X2F0dHIpXG4tLVxuYXJjaC9hcm0vbWFjaC1teHMvbWFjaC1teHMuYz0zODA9c3RhdGljIHZvaWQgX19pbml0IG14c19tYWNoaW5lX2luaXQodm9pZClcbi0tXG5hcmNoL2FybS9tYWNoLW14cy9tYWNoLW14cy5jLTM4OS1cbmFyY2gvYXJtL21hY2gtbXhzL21hY2gtbXhzLmM6MzkwOlx0c29jX2Rldl9hdHRyID0ga3phbGxvY19vYmooKnNvY19kZXZfYXR0cik7XG5hcmNoL2FybS9tYWNoLW14cy9tYWNoLW14cy5jLTM5MS1cdGlmICghc29jX2Rldl9hdHRyKVxuLS1cbmFyY2gvYXJtL21hY2gtb21hcDEvZG1hLmM9Mjk0PXN0YXRpYyBpbnQgX19pbml0IG9tYXAxX3N5c3RlbV9kbWFfaW5pdCh2b2lkKVxuLS1cbmFyY2gvYXJtL21hY2gtb21hcDEvZG1hLmMtMzIxLVxuYXJjaC9hcm0vbWFjaC1vbWFwMS9kbWEuYzozMjI6XHRkID0ga3phbGxvY19vYmooKmQpO1xuYXJjaC9hcm0vbWFjaC1vbWFwMS9kbWEuYy0zMjMtXHRpZiAoIWQpIHtcbi0tXG5hcmNoL2FybS9tYWNoLW9tYXAxL21jYnNwLmM9MjkyPXN0YXRpYyB2b2lkIG9tYXBfbWNic3BfcmVnaXN0ZXJfYm9hcmRfY2ZnKHN0cnVjdCByZXNvdXJjZSAqcmVzLCBpbnQgcmVzX2NvdW50LFxuLS1cbmFyY2gvYXJtL21hY2gtb21hcDEvbWNic3AuYy0yOTYtXG5hcmNoL2FybS9tYWNoLW9tYXAxL21jYnNwLmM6Mjk3Olx0b21hcF9tY2JzcF9kZXZpY2VzID0ga3phbGxvY19vYmpzKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKiwgc2l6ZSk7XG5hcmNoL2FybS9tYWNoLW9tYXAxL21jYnNwLmMtMjk4LVx0aWYgKCFvbWFwX21jYnNwX2RldmljZXMpIHtcbi0tXG5hcmNoL2FybS9tYWNoLW9tYXAxL3RpbWVyLmM9NTE9c3RhdGljIGludCBfX2luaXQgb21hcDFfZG1fdGltZXJfaW5pdCh2b2lkKVxuLS1cbmFyY2gvYXJtL21hY2gtb21hcDEvdGltZXIuYy0xMjctXG5hcmNoL2FybS9tYWNoLW9tYXAxL3RpbWVyLmM6MTI4Olx0XHRwZGF0YSA9IGt6YWxsb2Nfb2JqKCpwZGF0YSk7XG5hcmNoL2FybS9tYWNoLW9tYXAxL3RpbWVyLmMtMTI5LVx0XHRpZiAoIXBkYXRhKSB7XG4tLVxuYXJjaC9hcm0vbWFjaC1vbWFwMi9jbGt0Mnh4eF92aXJ0X3ByY21fc2V0LmM9MjMwPXZvaWQgb21hcDJ4eHhfY2xrdF92cHNfaW5pdCh2b2lkKVxuLS1cbmFyY2gvYXJtL21hY2gtb21hcDIvY2xrdDJ4eHhfdmlydF9wcmNtX3NldC5jLTIzOS1cbmFyY2gvYXJtL21hY2gtb21hcDIvY2xrdDJ4eHhfdmlydF9wcmNtX3NldC5jOjI0MDpcdGh3ID0ga3phbGxvY19vYmooKmh3KTtcbmFyY2gvYXJtL21hY2gtb21hcDIvY2xrdDJ4eHhfdmlydF9wcmNtX3NldC5jLTI0MS1cdGlmICghaHcpXG4tLVxuYXJjaC9hcm0vbWFjaC1vbWFwMi9pZC5jPTc4Nj12b2lkIF9faW5pdCBvbWFwX3NvY19kZXZpY2VfaW5pdCh2b2lkKVxuLS1cbmFyY2gvYXJtL21hY2gtb21hcDIvaWQuYy03OTAtXG5hcmNoL2FybS9tYWNoLW9tYXAyL2lkLmM6NzkxOlx0c29jX2Rldl9hdHRyID0ga3phbGxvY19vYmooKnNvY19kZXZfYXR0cik7XG5hcmNoL2FybS9tYWNoLW9tYXAyL2lkLmMtNzkyLVx0aWYgKCFzb2NfZGV2X2F0dHIpXG4tLVxuYXJjaC9hcm0vbWFjaC1vbWFwMi9vbWFwX2RldmljZS5jPTEzMT1zdGF0aWMgaW50IG9tYXBfZGV2aWNlX2J1aWxkX2Zyb21fZHQoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldilcbi0tXG5hcmNoL2FybS9tYWNoLW9tYXAyL29tYXBfZGV2aWNlLmMtMTU4LVxuYXJjaC9hcm0vbWFjaC1vbWFwMi9vbWFwX2RldmljZS5jOjE1OTpcdGh3bW9kcyA9IGt6YWxsb2Nfb2JqcyhzdHJ1Y3Qgb21hcF9od21vZCAqLCBvaF9jbnQpO1xuYXJjaC9hcm0vbWFjaC1vbWFwMi9vbWFwX2RldmljZS5jLTE2MC1cdGlmICghaHdtb2RzKSB7XG4tLVxuYXJjaC9hcm0vbWFjaC1vbWFwMi9vbWFwX2h3bW9kLmM9MzM4MT1zdGF0aWMgaW50IG9tYXBfaHdtb2RfYWxsb2NhdGVfbW9kdWxlKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IG9tYXBfaHdtb2QgKm9oLFxuLS1cbmFyY2gvYXJtL21hY2gtb21hcDIvb21hcF9od21vZC5jLTMzOTQtXG5hcmNoL2FybS9tYWNoLW9tYXAyL29tYXBfaHdtb2QuYzozMzk1Olx0c3lzYyA9IGt6YWxsb2Nfb2JqKCpzeXNjKTtcbmFyY2gvYXJtL21hY2gtb21hcDIvb21hcF9od21vZC5jLTMzOTYtXHRpZiAoIXN5c2MpXG4tLVxuYXJjaC9hcm0vbWFjaC1vbWFwMi9vbWFwX2h3bW9kLmMtMzQyNC1cdGlmIChsaXN0X2VtcHR5KFx1MDAyNm9oLVx1MDAzZXNsYXZlX3BvcnRzKSkge1xuYXJjaC9hcm0vbWFjaC1vbWFwMi9vbWFwX2h3bW9kLmM6MzQyNTpcdFx0b2kgPSBremFsbG9jX29iaigqb2kpO1xuYXJjaC9hcm0vbWFjaC1vbWFwMi9vbWFwX2h3bW9kLmMtMzQyNi1cdFx0aWYgKCFvaSlcbi0tXG5hcmNoL2FybS9tYWNoLW9tYXAyL29tYXBfaHdtb2QuYz0zNTEzPWludCBvbWFwX2h3bW9kX2luaXRfbW9kdWxlKHN0cnVjdCBkZXZpY2UgKmRldixcbi0tXG5hcmNoL2FybS9tYWNoLW9tYXAyL29tYXBfaHdtb2QuYy0zNTI3LVx0aWYgKCFvaCkge1xuYXJjaC9hcm0vbWFjaC1vbWFwMi9vbWFwX2h3bW9kLmM6MzUyODpcdFx0b2ggPSBremFsbG9jX29iaigqb2gpO1xuYXJjaC9hcm0vbWFjaC1vbWFwMi9vbWFwX2h3bW9kLmMtMzUyOS1cdFx0aWYgKCFvaClcbi0tXG5hcmNoL2FybS9tYWNoLW9tYXAyL29tYXBfaHdtb2QuYy0zNTM4LVxuYXJjaC9hcm0vbWFjaC1vbWFwMi9vbWFwX2h3bW9kLmM6MzUzOTpcdFx0b2gtXHUwMDNlY2xhc3MgPSBremFsbG9jX29iaigqb2gtXHUwMDNlY2xhc3MpO1xuYXJjaC9hcm0vbWFjaC1vbWFwMi9vbWFwX2h3bW9kLmMtMzU0MC1cdFx0aWYgKCFvaC1cdTAwM2VjbGFzcykge1xuLS1cbmFyY2gvYXJtL21hY2gtb21hcDIvcG0zM3h4LWNvcmUuYz0zNzk9c3RhdGljIGludCBfX2luaXQgYW14M19pZGxlX2luaXQoc3RydWN0IGRldmljZV9ub2RlICpjcHVfbm9kZSwgaW50IGNwdSlcbi0tXG5hcmNoL2FybS9tYWNoLW9tYXAyL3BtMzN4eC1jb3JlLmMtNDEyLVxuYXJjaC9hcm0vbWFjaC1vbWFwMi9wbTMzeHgtY29yZS5jOjQxMzpcdGlkbGVfc3RhdGVzID0ga3phbGxvY19vYmpzKCppZGxlX3N0YXRlcywgc3RhdGVfY291bnQpO1xuYXJjaC9hcm0vbWFjaC1vbWFwMi9wbTMzeHgtY29yZS5jLTQxNC1cdGlmICghaWRsZV9zdGF0ZXMpXG4tLVxuYXJjaC9hcm0vbWFjaC1vbWFwMi9zcl9kZXZpY2UuYz0zMD1zdGF0aWMgdm9pZCBfX2luaXQgc3Jfc2V0X252YWx1ZXMoc3RydWN0IG9tYXBfdm9sdF9kYXRhICp2b2x0X2RhdGEsXG4tLVxuYXJjaC9hcm0vbWFjaC1vbWFwMi9zcl9kZXZpY2UuYy00MS1cbmFyY2gvYXJtL21hY2gtb21hcDIvc3JfZGV2aWNlLmM6NDI6XHRudmFsdWVfdGFibGUgPSBremFsbG9jX29ianMoKm52YWx1ZV90YWJsZSwgY291bnQpO1xuYXJjaC9hcm0vbWFjaC1vbWFwMi9zcl9kZXZpY2UuYy00My1cdGlmICghbnZhbHVlX3RhYmxlKVxuLS1cbmFyY2gvYXJtL21hY2gtb3Jpb241eC9wY2kuYz0xMzk9c3RhdGljIGludCBfX2luaXQgcGNpZV9zZXR1cChzdHJ1Y3QgcGNpX3N5c19kYXRhICpzeXMpXG4tLVxuYXJjaC9hcm0vbWFjaC1vcmlvbjV4L3BjaS5jLTE3MS1cdCAqL1xuYXJjaC9hcm0vbWFjaC1vcmlvbjV4L3BjaS5jOjE3MjpcdHJlcyA9IGt6YWxsb2Nfb2JqKHN0cnVjdCByZXNvdXJjZSk7XG5hcmNoL2FybS9tYWNoLW9yaW9uNXgvcGNpLmMtMTczLVx0aWYgKCFyZXMpXG4tLVxuYXJjaC9hcm0vbWFjaC1vcmlvbjV4L3BjaS5jPTQ2Nj1zdGF0aWMgaW50IF9faW5pdCBwY2lfc2V0dXAoc3RydWN0IHBjaV9zeXNfZGF0YSAqc3lzKVxuLS1cbmFyY2gvYXJtL21hY2gtb3Jpb241eC9wY2kuYy00OTItXHQgKi9cbmFyY2gvYXJtL21hY2gtb3Jpb241eC9wY2kuYzo0OTM6XHRyZXMgPSBremFsbG9jX29iaihzdHJ1Y3QgcmVzb3VyY2UpO1xuYXJjaC9hcm0vbWFjaC1vcmlvbjV4L3BjaS5jLTQ5NC1cdGlmICghcmVzKVxuLS1cbmFyY2gvYXJtL21hY2gtcnBjL2VjYXJkLmM9Njg5PXN0YXRpYyBzdHJ1Y3QgZXhwYW5zaW9uX2NhcmQgKl9faW5pdCBlY2FyZF9hbGxvY19jYXJkKGludCB0eXBlLCBpbnQgc2xvdClcbi0tXG5hcmNoL2FybS9tYWNoLXJwYy9lY2FyZC5jLTY5NC1cbmFyY2gvYXJtL21hY2gtcnBjL2VjYXJkLmM6Njk1Olx0ZWMgPSBremFsbG9jX29iaihlY2FyZF90KTtcbmFyY2gvYXJtL21hY2gtcnBjL2VjYXJkLmMtNjk2LVx0aWYgKCFlYykge1xuLS1cbmFyY2gvYXJtL21hY2gtc2ExMTAwL2Nsb2NrLmM9OTM9aW50IF9faW5pdCBzYTExeHhfY2xrX2luaXQodm9pZClcbi0tXG5hcmNoL2FybS9tYWNoLXNhMTEwMC9jbG9jay5jLTEwOS1cbmFyY2gvYXJtL21hY2gtc2ExMTAwL2Nsb2NrLmM6MTEwOlx0aHcgPSBremFsbG9jX29iaigqaHcpO1xuYXJjaC9hcm0vbWFjaC1zYTExMDAvY2xvY2suYy0xMTEtXHRpZiAoIWh3KVxuLS1cbmFyY2gvYXJtL21hY2gtc2ExMTAwL2Nsb2NrLmMtMTMxLVxuYXJjaC9hcm0vbWFjaC1zYTExMDAvY2xvY2suYzoxMzI6XHRodyA9IGt6YWxsb2Nfb2JqKCpodyk7XG5hcmNoL2FybS9tYWNoLXNhMTEwMC9jbG9jay5jLTEzMy1cdGlmICghaHcpXG4tLVxuYXJjaC9hcm0vbWFjaC1zYTExMDAvZ2VuZXJpYy5jPTMxNz1pbnQgX19pbml0IHNhMTF4MF9yZWdpc3Rlcl9maXhlZF9yZWd1bGF0b3IoaW50IG4sXG4tLVxuYXJjaC9hcm0vbWFjaC1zYTExMDAvZ2VuZXJpYy5jLTMyMy1cbmFyY2gvYXJtL21hY2gtc2ExMTAwL2dlbmVyaWMuYzozMjQ6XHRjZmctXHUwMDNlaW5pdF9kYXRhID0gaWQgPSBremFsbG9jX29iaigqY2ZnLVx1MDAzZWluaXRfZGF0YSk7XG5hcmNoL2FybS9tYWNoLXNhMTEwMC9nZW5lcmljLmMtMzI1LVx0aWYgKCFjZmctXHUwMDNlaW5pdF9kYXRhKVxuLS1cbmFyY2gvYXJtL21hY2gtc2ExMTAwL25lcG9uc2V0LmM9MjI1PXN0YXRpYyBpbnQgbmVwb25zZXRfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGV2KVxuLS1cbmFyY2gvYXJtL21hY2gtc2ExMTAwL25lcG9uc2V0LmMtMjc4LVxuYXJjaC9hcm0vbWFjaC1zYTExMDAvbmVwb25zZXQuYzoyNzk6XHRkID0ga3phbGxvY19vYmooKmQpO1xuYXJjaC9hcm0vbWFjaC1zYTExMDAvbmVwb25zZXQuYy0yODAtXHRpZiAoIWQpIHtcbi0tXG5hcmNoL2FybS9tYWNoLXNobW9iaWxlL3JlZ3VsYXRvci1xdWlyay1yY2FyLWdlbjIuYz0xNDE9c3RhdGljIGludCBfX2luaXQgcmNhcl9nZW4yX3JlZ3VsYXRvcl9xdWlyayh2b2lkKVxuLS1cbmFyY2gvYXJtL21hY2gtc2htb2JpbGUvcmVndWxhdG9yLXF1aXJrLXJjYXItZ2VuMi5jLTE2Ni1cbmFyY2gvYXJtL21hY2gtc2htb2JpbGUvcmVndWxhdG9yLXF1aXJrLXJjYXItZ2VuMi5jOjE2NzpcdFx0cXVpcmsgPSBremFsbG9jX29iaigqcXVpcmspO1xuYXJjaC9hcm0vbWFjaC1zaG1vYmlsZS9yZWd1bGF0b3ItcXVpcmstcmNhci1nZW4yLmMtMTY4LVx0XHRpZiAoIXF1aXJrKSB7XG4tLVxuYXJjaC9hcm0vbWFjaC12ZXJzYXRpbGUvc3BjLmM9MzkzPXN0YXRpYyBpbnQgdmVfc3BjX3BvcHVsYXRlX29wcHModWludDMyX3QgY2x1c3Rlcilcbi0tXG5hcmNoL2FybS9tYWNoLXZlcnNhdGlsZS9zcGMuYy0zOTctXG5hcmNoL2FybS9tYWNoLXZlcnNhdGlsZS9zcGMuYzozOTg6XHRvcHBzID0ga3phbGxvY19vYmpzKCpvcHBzLCBNQVhfT1BQUyk7XG5hcmNoL2FybS9tYWNoLXZlcnNhdGlsZS9zcGMuYy0zOTktXHRpZiAoIW9wcHMpXG4tLVxuYXJjaC9hcm0vbWFjaC12ZXJzYXRpbGUvc3BjLmM9NDQyPWludCBfX2luaXQgdmVfc3BjX2luaXQodm9pZCBfX2lvbWVtICpiYXNlYWRkciwgdTMyIGExNV9jbHVzaWQsIGludCBpcnEpXG4tLVxuYXJjaC9hcm0vbWFjaC12ZXJzYXRpbGUvc3BjLmMtNDQ0LVx0aW50IHJldDtcbmFyY2gvYXJtL21hY2gtdmVyc2F0aWxlL3NwYy5jOjQ0NTpcdGluZm8gPSBremFsbG9jX29iaigqaW5mbyk7XG5hcmNoL2FybS9tYWNoLXZlcnNhdGlsZS9zcGMuYy00NDYtXHRpZiAoIWluZm8pXG4tLVxuYXJjaC9hcm0vbWFjaC12ZXJzYXRpbGUvc3BjLmM9NTIzPXN0YXRpYyBzdHJ1Y3QgY2xrICp2ZV9zcGNfY2xrX3JlZ2lzdGVyKHN0cnVjdCBkZXZpY2UgKmNwdV9kZXYpXG4tLVxuYXJjaC9hcm0vbWFjaC12ZXJzYXRpbGUvc3BjLmMtNTI3LVxuYXJjaC9hcm0vbWFjaC12ZXJzYXRpbGUvc3BjLmM6NTI4Olx0c3BjID0ga3phbGxvY19vYmooKnNwYyk7XG5hcmNoL2FybS9tYWNoLXZlcnNhdGlsZS9zcGMuYy01MjktXHRpZiAoIXNwYylcbi0tXG5hcmNoL2FybS9tYWNoLXZlcnNhdGlsZS92ZXJzYXRpbGUuYz0xMjM9c3RhdGljIHZvaWQgX19pbml0IHZlcnNhdGlsZV9kdF9wY2lfaW5pdCh2b2lkKVxuLS1cbmFyY2gvYXJtL21hY2gtdmVyc2F0aWxlL3ZlcnNhdGlsZS5jLTE0NC1cbmFyY2gvYXJtL21hY2gtdmVyc2F0aWxlL3ZlcnNhdGlsZS5jOjE0NTpcdG5ld3Byb3AgPSBremFsbG9jX29iaigqbmV3cHJvcCk7XG5hcmNoL2FybS9tYWNoLXZlcnNhdGlsZS92ZXJzYXRpbGUuYy0xNDYtXHRpZiAoIW5ld3Byb3ApXG4tLVxuYXJjaC9hcm0vbWFjaC16eW5xL2NvbW1vbi5jPTEwNT1zdGF0aWMgdm9pZCBfX2luaXQgenlucV9pbml0X21hY2hpbmUodm9pZClcbi0tXG5hcmNoL2FybS9tYWNoLXp5bnEvY29tbW9uLmMtMTEwLVxuYXJjaC9hcm0vbWFjaC16eW5xL2NvbW1vbi5jOjExMTpcdHNvY19kZXZfYXR0ciA9IGt6YWxsb2Nfb2JqKCpzb2NfZGV2X2F0dHIpO1xuYXJjaC9hcm0vbWFjaC16eW5xL2NvbW1vbi5jLTExMi1cdGlmICghc29jX2Rldl9hdHRyKVxuLS1cbmFyY2gvYXJtL21tL2NhY2hlLWwyeDAtcG11LmM9NTAzPXN0YXRpYyBfX2luaXQgaW50IGwyeDBfcG11X2luaXQodm9pZClcbi0tXG5hcmNoL2FybS9tbS9jYWNoZS1sMngwLXBtdS5jLTUwOS1cbmFyY2gvYXJtL21tL2NhY2hlLWwyeDAtcG11LmM6NTEwOlx0bDJ4MF9wbXUgPSBremFsbG9jX29iaigqbDJ4MF9wbXUpO1xuYXJjaC9hcm0vbW0vY2FjaGUtbDJ4MC1wbXUuYy01MTEtXHRpZiAoIWwyeDBfcG11KSB7XG4tLVxuYXJjaC9hcm0vbW0vY2FjaGUtdW5pcGhpZXIuYz0zMTU9c3RhdGljIGludCBfX2luaXQgX191bmlwaGllcl9jYWNoZV9pbml0KHN0cnVjdCBkZXZpY2Vfbm9kZSAqbnAsXG4tLVxuYXJjaC9hcm0vbW0vY2FjaGUtdW5pcGhpZXIuYy0zNDQtXG5hcmNoL2FybS9tbS9jYWNoZS11bmlwaGllci5jOjM0NTpcdGRhdGEgPSBremFsbG9jX29iaigqZGF0YSk7XG5hcmNoL2FybS9tbS9jYWNoZS11bmlwaGllci5jLTM0Ni1cdGlmICghZGF0YSlcbi0tXG5hcmNoL2FybS9tbS9kbWEtbWFwcGluZy5jPTUzMz1zdGF0aWMgdm9pZCAqX19kbWFfYWxsb2Moc3RydWN0IGRldmljZSAqZGV2LCBzaXplX3Qgc2l6ZSwgZG1hX2FkZHJfdCAqaGFuZGxlLFxuLS1cbmFyY2gvYXJtL21tL2RtYS1tYXBwaW5nLmMtNTYwLVxuYXJjaC9hcm0vbW0vZG1hLW1hcHBpbmcuYzo1NjE6XHRidWYgPSBremFsbG9jX29iaigqYnVmLFxuYXJjaC9hcm0vbW0vZG1hLW1hcHBpbmcuYy01NjItXHRcdFx0ICBnZnAgXHUwMDI2IH4oX19HRlBfRE1BIHwgX19HRlBfRE1BMzIgfCBfX0dGUF9ISUdITUVNKSk7XG4tLVxuYXJjaC9hcm0vbW0vZG1hLW1hcHBpbmcuYz0xNDg3PWFybV9pb21tdV9jcmVhdGVfbWFwcGluZyhzdHJ1Y3QgZGV2aWNlICpkZXYsIGRtYV9hZGRyX3QgYmFzZSwgdTY0IHNpemUpXG4tLVxuYXJjaC9hcm0vbW0vZG1hLW1hcHBpbmcuYy0xNTA2LVxuYXJjaC9hcm0vbW0vZG1hLW1hcHBpbmcuYzoxNTA3Olx0bWFwcGluZyA9IGt6YWxsb2Nfb2JqKHN0cnVjdCBkbWFfaW9tbXVfbWFwcGluZyk7XG5hcmNoL2FybS9tbS9kbWEtbWFwcGluZy5jLTE1MDgtXHRpZiAoIW1hcHBpbmcpXG4tLVxuYXJjaC9hcm0veGVuL2VubGlnaHRlbi5jPTMxNj1pbnQgX19pbml0IGFyY2hfeGVuX3VucG9wdWxhdGVkX2luaXQoc3RydWN0IHJlc291cmNlICoqcmVzKVxuLS1cbmFyY2gvYXJtL3hlbi9lbmxpZ2h0ZW4uYy0zNDMtXG5hcmNoL2FybS94ZW4vZW5saWdodGVuLmM6MzQ0Olx0cmVncyA9IGt6YWxsb2Nfb2JqcygqcmVncywgbnJfcmVnKTtcbmFyY2gvYXJtL3hlbi9lbmxpZ2h0ZW4uYy0zNDUtXHRpZiAoIXJlZ3MpIHtcbi0tXG5hcmNoL2FybS94ZW4vZW5saWdodGVuLmMtMzg3LVxuYXJjaC9hcm0veGVuL2VubGlnaHRlbi5jOjM4ODpcdFx0dG1wX3JlcyA9IGt6YWxsb2Nfb2JqKCp0bXBfcmVzKTtcbmFyY2gvYXJtL3hlbi9lbmxpZ2h0ZW4uYy0zODktXHRcdGlmICghdG1wX3Jlcykge1xuLS1cbmFyY2gvYXJtL3hlbi9wMm0uYz0xNTA9Ym9vbCBfX3NldF9waHlzX3RvX21hY2hpbmVfbXVsdGkodW5zaWduZWQgbG9uZyBwZm4sXG4tLVxuYXJjaC9hcm0veGVuL3AybS5jLTE3OC1cbmFyY2gvYXJtL3hlbi9wMm0uYzoxNzk6XHRwMm1fZW50cnkgPSBremFsbG9jX29iaigqcDJtX2VudHJ5LCBHRlBfTk9XQUlUKTtcbmFyY2gvYXJtL3hlbi9wMm0uYy0xODAtXHRpZiAoIXAybV9lbnRyeSlcbi0tXG5hcmNoL2FybTY0L2tlcm5lbC92ZHNvLmM9Njg9c3RhdGljIGludCBfX2luaXQgX192ZHNvX2luaXQoZW51bSB2ZHNvX2FiaSBhYmkpXG4tLVxuYXJjaC9hcm02NC9rZXJuZWwvdmRzby5jLTgzLVxuYXJjaC9hcm02NC9rZXJuZWwvdmRzby5jOjg0Olx0dmRzb19wYWdlbGlzdCA9IGt6YWxsb2Nfb2JqcyhzdHJ1Y3QgcGFnZSAqLCB2ZHNvX2luZm9bYWJpXS52ZHNvX3BhZ2VzKTtcbmFyY2gvYXJtNjQva2VybmVsL3Zkc28uYy04NS1cdGlmICh2ZHNvX3BhZ2VsaXN0ID09IE5VTEwpXG4tLVxuYXJjaC9hcm02NC9rdm0vbW11LmM9NDgwPXN0YXRpYyBpbnQgc2hhcmVfcGZuX2h5cCh1NjQgcGZuKVxuLS1cbmFyY2gvYXJtNjQva3ZtL21tdS5jLTQ5Mi1cbmFyY2gvYXJtNjQva3ZtL21tdS5jOjQ5MzpcdHRoaXMgPSBremFsbG9jX29iaigqdGhpcyk7XG5hcmNoL2FybTY0L2t2bS9tbXUuYy00OTQtXHRpZiAoIXRoaXMpIHtcbi0tXG5hcmNoL2FybTY0L2t2bS9tbXUuYz05ODE9aW50IGt2bV9pbml0X3N0YWdlMl9tbXUoc3RydWN0IGt2bSAqa3ZtLCBzdHJ1Y3Qga3ZtX3MyX21tdSAqbW11LCB1bnNpZ25lZCBsb25nIHR5cGUpXG4tLVxuYXJjaC9hcm02NC9rdm0vbW11LmMtMTAwNy1cbmFyY2gvYXJtNjQva3ZtL21tdS5jOjEwMDg6XHRwZ3QgPSBremFsbG9jX29iaigqcGd0LCBHRlBfS0VSTkVMX0FDQ09VTlQpO1xuYXJjaC9hcm02NC9rdm0vbW11LmMtMTAwOS1cdGlmICghcGd0KVxuLS1cbmFyY2gvYXJtNjQva3ZtL21tdS5jPTExODA9aW50IHRvcHVwX2h5cF9tZW1jYWNoZShzdHJ1Y3Qga3ZtX2h5cF9tZW1jYWNoZSAqbWMsIHVuc2lnbmVkIGxvbmcgbWluX3BhZ2VzKVxuLS1cbmFyY2gvYXJtNjQva3ZtL21tdS5jLTExODUtXHRpZiAoIW1jLVx1MDAzZW1hcHBpbmcpIHtcbmFyY2gvYXJtNjQva3ZtL21tdS5jOjExODY6XHRcdG1jLVx1MDAzZW1hcHBpbmcgPSBremFsbG9jX29iaihzdHJ1Y3QgcGt2bV9tYXBwaW5nLFxuYXJjaC9hcm02NC9rdm0vbW11LmMtMTE4Ny1cdFx0XHRcdFx0ICBHRlBfS0VSTkVMX0FDQ09VTlQpO1xuLS1cbmFyY2gvYXJtNjQva3ZtL21tdS5jPTI1MTA9aW50IF9faW5pdCBrdm1fbW11X2luaXQodTMyIGh5cF92YV9iaXRzKVxuLS1cbmFyY2gvYXJtNjQva3ZtL21tdS5jLTI1NDMtXG5hcmNoL2FybTY0L2t2bS9tbXUuYzoyNTQ0Olx0aHlwX3BndGFibGUgPSBremFsbG9jX29iaigqaHlwX3BndGFibGUpO1xuYXJjaC9hcm02NC9rdm0vbW11LmMtMjU0NS1cdGlmICghaHlwX3BndGFibGUpIHtcbi0tXG5hcmNoL2FybTY0L2t2bS9uZXN0ZWQuYz0xMzI4PWludCBrdm1fdmNwdV9hbGxvY2F0ZV92bmNyX3RsYihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4tLVxuYXJjaC9hcm02NC9rdm0vbmVzdGVkLmMtMTMzMy1cdGlmICghdmNwdS1cdTAwM2VhcmNoLnZuY3JfdGxiKSB7XG5hcmNoL2FybTY0L2t2bS9uZXN0ZWQuYzoxMzM0Olx0XHRzdHJ1Y3Qgdm5jcl90bGIgKnZ0ID0ga3phbGxvY19vYmooKnZjcHUtXHUwMDNlYXJjaC52bmNyX3RsYixcbmFyY2gvYXJtNjQva3ZtL25lc3RlZC5jLTEzMzUtXHRcdFx0XHRcdFx0ICBHRlBfS0VSTkVMX0FDQ09VTlQpO1xuLS1cbmFyY2gvYXJtNjQva3ZtL25lc3RlZC5jPTE3OTM9aW50IGt2bV9pbml0X252X3N5c3JlZ3Moc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuLS1cbmFyY2gvYXJtNjQva3ZtL25lc3RlZC5jLTE4MDItXG5hcmNoL2FybTY0L2t2bS9uZXN0ZWQuYzoxODAzOlx0a3ZtLVx1MDAzZWFyY2guc3lzcmVnX21hc2tzID0ga3phbGxvY19vYmooKihrdm0tXHUwMDNlYXJjaC5zeXNyZWdfbWFza3MpLFxuYXJjaC9hcm02NC9rdm0vbmVzdGVkLmMtMTgwNC1cdFx0XHRcdFx0ICAgICBHRlBfS0VSTkVMX0FDQ09VTlQpO1xuLS1cbmFyY2gvYXJtNjQva3ZtL3B0ZHVtcC5jPTExNj1zdGF0aWMgc3RydWN0IGt2bV9wdGR1bXBfZ3Vlc3Rfc3RhdGUgKmt2bV9wdGR1bXBfcGFyc2VyX2NyZWF0ZShzdHJ1Y3Qga3ZtX3MyX21tdSAqbW11KVxuLS1cbmFyY2gvYXJtNjQva3ZtL3B0ZHVtcC5jLTEyMS1cbmFyY2gvYXJtNjQva3ZtL3B0ZHVtcC5jOjEyMjpcdHN0ID0ga3phbGxvY19vYmooc3RydWN0IGt2bV9wdGR1bXBfZ3Vlc3Rfc3RhdGUsIEdGUF9LRVJORUxfQUNDT1VOVCk7XG5hcmNoL2FybTY0L2t2bS9wdGR1bXAuYy0xMjMtXHRpZiAoIXN0KVxuLS1cbmFyY2gvYXJtNjQva3ZtL3ZnaWMvdmdpYy1pbml0LmM9MjA3PXN0YXRpYyBpbnQga3ZtX3ZnaWNfZGlzdF9pbml0KHN0cnVjdCBrdm0gKmt2bSwgdW5zaWduZWQgaW50IG5yX3NwaXMpXG4tLVxuYXJjaC9hcm02NC9rdm0vdmdpYy92Z2ljLWluaXQuYy0yMTMtXHRkaXN0LVx1MDAzZWFjdGl2ZV9zcGlzID0gKGF0b21pY190KUFUT01JQ19JTklUKDApO1xuYXJjaC9hcm02NC9rdm0vdmdpYy92Z2ljLWluaXQuYzoyMTQ6XHRkaXN0LVx1MDAzZXNwaXMgPSBremFsbG9jX29ianMoc3RydWN0IHZnaWNfaXJxLCBucl9zcGlzLCBHRlBfS0VSTkVMX0FDQ09VTlQpO1xuYXJjaC9hcm02NC9rdm0vdmdpYy92Z2ljLWluaXQuYy0yMTUtXHRpZiAoIWRpc3QtXHUwMDNlc3Bpcylcbi0tXG5hcmNoL2FybTY0L2t2bS92Z2ljL3ZnaWMtaW5pdC5jPTMxNj1zdGF0aWMgaW50IHZnaWNfYWxsb2NhdGVfcHJpdmF0ZV9pcnFzX2xvY2tlZChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHUzMiB0eXBlKVxuLS1cbmFyY2gvYXJtNjQva3ZtL3ZnaWMvdmdpYy1pbml0LmMtMzMxLVxuYXJjaC9hcm02NC9rdm0vdmdpYy92Z2ljLWluaXQuYzozMzI6XHR2Z2ljX2NwdS1cdTAwM2Vwcml2YXRlX2lycXMgPSBremFsbG9jX29ianMoc3RydWN0IHZnaWNfaXJxLFxuYXJjaC9hcm02NC9rdm0vdmdpYy92Z2ljLWluaXQuYy0zMzMtXHRcdFx0XHRcdCAgICAgIG51bV9wcml2YXRlX2lycXMsXG4tLVxuYXJjaC9hcm02NC9rdm0vdmdpYy92Z2ljLWlycWZkLmM9MTQyPWludCBrdm1fdmdpY19zZXR1cF9kZWZhdWx0X2lycV9yb3V0aW5nKHN0cnVjdCBrdm0gKmt2bSlcbi0tXG5hcmNoL2FybTY0L2t2bS92Z2ljL3ZnaWMtaXJxZmQuYy0xNDgtXG5hcmNoL2FybTY0L2t2bS92Z2ljL3ZnaWMtaXJxZmQuYzoxNDk6XHRlbnRyaWVzID0ga3phbGxvY19vYmpzKCplbnRyaWVzLCBuciwgR0ZQX0tFUk5FTF9BQ0NPVU5UKTtcbmFyY2gvYXJtNjQva3ZtL3ZnaWMvdmdpYy1pcnFmZC5jLTE1MC1cdGlmICghZW50cmllcylcbi0tXG5hcmNoL2FybTY0L2t2bS92Z2ljL3ZnaWMtaXRzLmM9NzY9c3RhdGljIHN0cnVjdCB2Z2ljX2lycSAqdmdpY19hZGRfbHBpKHN0cnVjdCBrdm0gKmt2bSwgdTMyIGludGlkLFxuLS1cbmFyY2gvYXJtNjQva3ZtL3ZnaWMvdmdpYy1pdHMuYy04Ny1cbmFyY2gvYXJtNjQva3ZtL3ZnaWMvdmdpYy1pdHMuYzo4ODpcdGlycSA9IGt6YWxsb2Nfb2JqKHN0cnVjdCB2Z2ljX2lycSwgR0ZQX0tFUk5FTF9BQ0NPVU5UKTtcbmFyY2gvYXJtNjQva3ZtL3ZnaWMvdmdpYy1pdHMuYy04OS1cdGlmICghaXJxKVxuLS1cbmFyY2gvYXJtNjQva3ZtL3ZnaWMvdmdpYy1pdHMuYz05NzE9c3RhdGljIGludCB2Z2ljX2l0c19hbGxvY19jb2xsZWN0aW9uKHN0cnVjdCB2Z2ljX2l0cyAqaXRzLFxuLS1cbmFyY2gvYXJtNjQva3ZtL3ZnaWMvdmdpYy1pdHMuYy05NzYtXG5hcmNoL2FybTY0L2t2bS92Z2ljL3ZnaWMtaXRzLmM6OTc3Olx0Y29sbGVjdGlvbiA9IGt6YWxsb2Nfb2JqKCpjb2xsZWN0aW9uLCBHRlBfS0VSTkVMX0FDQ09VTlQpO1xuYXJjaC9hcm02NC9rdm0vdmdpYy92Z2ljLWl0cy5jLTk3OC1cdGlmICghY29sbGVjdGlvbilcbi0tXG5hcmNoL2FybTY0L2t2bS92Z2ljL3ZnaWMtaXRzLmM9MTAxNT1zdGF0aWMgc3RydWN0IGl0c19pdGUgKnZnaWNfaXRzX2FsbG9jX2l0ZShzdHJ1Y3QgaXRzX2RldmljZSAqZGV2aWNlLFxuLS1cbmFyY2gvYXJtNjQva3ZtL3ZnaWMvdmdpYy1pdHMuYy0xMDIwLVxuYXJjaC9hcm02NC9rdm0vdmdpYy92Z2ljLWl0cy5jOjEwMjE6XHRpdGUgPSBremFsbG9jX29iaigqaXRlLCBHRlBfS0VSTkVMX0FDQ09VTlQpO1xuYXJjaC9hcm02NC9rdm0vdmdpYy92Z2ljLWl0cy5jLTEwMjItXHRpZiAoIWl0ZSlcbi0tXG5hcmNoL2FybTY0L2t2bS92Z2ljL3ZnaWMtaXRzLmM9MTE0Mj1zdGF0aWMgc3RydWN0IGl0c19kZXZpY2UgKnZnaWNfaXRzX2FsbG9jX2RldmljZShzdHJ1Y3QgdmdpY19pdHMgKml0cyxcbi0tXG5hcmNoL2FybTY0L2t2bS92Z2ljL3ZnaWMtaXRzLmMtMTE0Ny1cbmFyY2gvYXJtNjQva3ZtL3ZnaWMvdmdpYy1pdHMuYzoxMTQ4Olx0ZGV2aWNlID0ga3phbGxvY19vYmooKmRldmljZSwgR0ZQX0tFUk5FTF9BQ0NPVU5UKTtcbmFyY2gvYXJtNjQva3ZtL3ZnaWMvdmdpYy1pdHMuYy0xMTQ5LVx0aWYgKCFkZXZpY2UpXG4tLVxuYXJjaC9hcm02NC9rdm0vdmdpYy92Z2ljLWl0cy5jPTE4NTU9c3RhdGljIGludCB2Z2ljX2l0c19jcmVhdGUoc3RydWN0IGt2bV9kZXZpY2UgKmRldiwgdTMyIHR5cGUpXG4tLVxuYXJjaC9hcm02NC9rdm0vdmdpYy92Z2ljLWl0cy5jLTE4NjItXG5hcmNoL2FybTY0L2t2bS92Z2ljL3ZnaWMtaXRzLmM6MTg2MzpcdGl0cyA9IGt6YWxsb2Nfb2JqKHN0cnVjdCB2Z2ljX2l0cywgR0ZQX0tFUk5FTF9BQ0NPVU5UKTtcbmFyY2gvYXJtNjQva3ZtL3ZnaWMvdmdpYy1pdHMuYy0xODY0LVx0aWYgKCFpdHMpXG4tLVxuYXJjaC9hcm02NC9rdm0vdmdpYy92Z2ljLW1taW8tdjMuYz04ODY9c3RhdGljIGludCB2Z2ljX3YzX2FsbG9jX3JlZGlzdF9yZWdpb24oc3RydWN0IGt2bSAqa3ZtLCB1aW50MzJfdCBpbmRleCxcbi0tXG5hcmNoL2FybTY0L2t2bS92Z2ljL3ZnaWMtbW1pby12My5jLTkzMS1cbmFyY2gvYXJtNjQva3ZtL3ZnaWMvdmdpYy1tbWlvLXYzLmM6OTMyOlx0cmRyZWcgPSBremFsbG9jX29iaigqcmRyZWcsIEdGUF9LRVJORUxfQUNDT1VOVCk7XG5hcmNoL2FybTY0L2t2bS92Z2ljL3ZnaWMtbW1pby12My5jLTkzMy1cdGlmICghcmRyZWcpXG4tLVxuYXJjaC9hcm02NC9rdm0vdmdpYy92Z2ljLXY0LmM9MjQyPWludCB2Z2ljX3Y0X2luaXQoc3RydWN0IGt2bSAqa3ZtKVxuLS1cbmFyY2gvYXJtNjQva3ZtL3ZnaWMvdmdpYy12NC5jLTI1OC1cbmFyY2gvYXJtNjQva3ZtL3ZnaWMvdmdpYy12NC5jOjI1OTpcdGRpc3QtXHUwMDNlaXRzX3ZtLnZwZXMgPSBremFsbG9jX29ianMoKmRpc3QtXHUwMDNlaXRzX3ZtLnZwZXMsIG5yX3ZjcHVzLFxuYXJjaC9hcm02NC9rdm0vdmdpYy92Z2ljLXY0LmMtMjYwLVx0XHRcdFx0XHQgR0ZQX0tFUk5FTF9BQ0NPVU5UKTtcbi0tXG5hcmNoL2FybTY0L25ldC9icGZfaml0X2NvbXAuYz0yMDgwPXN0cnVjdCBicGZfcHJvZyAqYnBmX2ludF9qaXRfY29tcGlsZShzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX3Byb2cgKnByb2cpXG4tLVxuYXJjaC9hcm02NC9uZXQvYnBmX2ppdF9jb21wLmMtMjEwMS1cdGlmICghaml0X2RhdGEpIHtcbmFyY2gvYXJtNjQvbmV0L2JwZl9qaXRfY29tcC5jOjIxMDI6XHRcdGppdF9kYXRhID0ga3phbGxvY19vYmooKmppdF9kYXRhKTtcbmFyY2gvYXJtNjQvbmV0L2JwZl9qaXRfY29tcC5jLTIxMDMtXHRcdGlmICghaml0X2RhdGEpXG4tLVxuYXJjaC9jc2t5L2tlcm5lbC92ZHNvLmM9MTc9c3RhdGljIGludCBfX2luaXQgdmRzb19pbml0KHZvaWQpXG4tLVxuYXJjaC9jc2t5L2tlcm5lbC92ZHNvLmMtMjItXHR2ZHNvX3BhZ2VsaXN0ID1cbmFyY2gvY3NreS9rZXJuZWwvdmRzby5jOjIzOlx0XHRremFsbG9jX29ianMoc3RydWN0IHBhZ2UgKiwgdmRzb19wYWdlcyk7XG5hcmNoL2Nza3kva2VybmVsL3Zkc28uYy0yNC1cdGlmICh1bmxpa2VseSh2ZHNvX3BhZ2VsaXN0ID09IE5VTEwpKSB7XG4tLVxuYXJjaC9sb29uZ2FyY2gva2VybmVsL3NldHVwLmM9NDY2PXN0YXRpYyBpbnQgX19pbml0IGFkZF9sZWdhY3lfaXNhX2lvKHN0cnVjdCBmd25vZGVfaGFuZGxlICpmd25vZGUsXG4tLVxuYXJjaC9sb29uZ2FyY2gva2VybmVsL3NldHVwLmMtNDcyLVxuYXJjaC9sb29uZ2FyY2gva2VybmVsL3NldHVwLmM6NDczOlx0cmFuZ2UgPSBremFsbG9jX29iaigqcmFuZ2UsIEdGUF9BVE9NSUMpO1xuYXJjaC9sb29uZ2FyY2gva2VybmVsL3NldHVwLmMtNDc0LVx0aWYgKCFyYW5nZSlcbi0tXG5hcmNoL2xvb25nYXJjaC9rZXJuZWwvdmRzby5jPTQ1PXN0YXRpYyBpbnQgX19pbml0IGluaXRfdmRzbyh2b2lkKVxuLS1cbmFyY2gvbG9vbmdhcmNoL2tlcm5lbC92ZHNvLmMtNTUtXHR2ZHNvX2luZm8uY29kZV9tYXBwaW5nLnBhZ2VzID1cbmFyY2gvbG9vbmdhcmNoL2tlcm5lbC92ZHNvLmM6NTY6XHRcdGt6YWxsb2Nfb2JqcyhzdHJ1Y3QgcGFnZSAqLCB2ZHNvX2luZm8uc2l6ZSAvIFBBR0VfU0laRSk7XG5hcmNoL2xvb25nYXJjaC9rZXJuZWwvdmRzby5jLTU3LVxuLS1cbmFyY2gvbG9vbmdhcmNoL2t2bS9pbnRjL2Vpb2ludGMuYz02MTQ9c3RhdGljIGludCBrdm1fZWlvaW50Y19jcmVhdGUoc3RydWN0IGt2bV9kZXZpY2UgKmRldiwgdTMyIHR5cGUpXG4tLVxuYXJjaC9sb29uZ2FyY2gva3ZtL2ludGMvZWlvaW50Yy5jLTYyNC1cbmFyY2gvbG9vbmdhcmNoL2t2bS9pbnRjL2Vpb2ludGMuYzo2MjU6XHRzID0ga3phbGxvY19vYmooc3RydWN0IGxvb25nYXJjaF9laW9pbnRjKTtcbmFyY2gvbG9vbmdhcmNoL2t2bS9pbnRjL2Vpb2ludGMuYy02MjYtXHRpZiAoIXMpXG4tLVxuYXJjaC9sb29uZ2FyY2gva3ZtL2ludGMvaXBpLmM9Mzk0PXN0YXRpYyBpbnQga3ZtX2lwaV9jcmVhdGUoc3RydWN0IGt2bV9kZXZpY2UgKmRldiwgdTMyIHR5cGUpXG4tLVxuYXJjaC9sb29uZ2FyY2gva3ZtL2ludGMvaXBpLmMtNDExLVxuYXJjaC9sb29uZ2FyY2gva3ZtL2ludGMvaXBpLmM6NDEyOlx0cyA9IGt6YWxsb2Nfb2JqKHN0cnVjdCBsb29uZ2FyY2hfaXBpKTtcbmFyY2gvbG9vbmdhcmNoL2t2bS9pbnRjL2lwaS5jLTQxMy1cdGlmICghcylcblxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE1LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMSAxNDowMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzMTkxNwoJCQkJCQkJb3V0cHV0OiAyMjcKCQkJCQkJCXRob3VnaHRzOiAyNjk5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5c2lzIG9mIEluaXRpYWxpemF0aW9uIGluIHRoZSB6bDMwNzN4IERyaXZlcioqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duIHN5c3RlbWF0aWNhbGx5LiBJdCBzZWVtcyBsaWtlIHRoZSBjb3JlIGNvbmNlcm4gaXMgYWJvdXQgZW5zdXJpbmcgdmFyaWFibGVzIGFuZCBkYXRhIHN0cnVjdHVyZXMgYXJlIHByb3Blcmx5IGluaXRpYWxpemVkIGJlZm9yZSB1c2UsIGVzcGVjaWFsbHkgd2hlbiBkZWFsaW5nIHdpdGggUFRQIChQcmVjaXNpb24gVGltZSBQcm90b2NvbCkgb3BlcmF0aW9ucyB3aXRoaW4gdGhpcyBgemwzMDczeGAgZHJpdmVyLiBJJiMzOTttIGZvY3VzaW5nIG9uIHBvdGVudGlhbCB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcy4KCkZpcnN0LCBJIHNlZSB0aGUgc2hpZnQgdG8gdXNpbmcgYGt6YWxsb2Nfb2JqYCBhbmQgYGt6YWxsb2Nfb2Jqc2Aga2VybmVsIG1hY3Jvcy4gVGhhdCYjMzk7cyBnb29kOyB0aGVzZSBhcmUgbm93IHRoZSBwcmVmZXJyZWQgbWV0aG9kcyB0byBhbGxvY2F0ZSBhbmQgemVybyBtZW1vcnkuIFNwZWNpZmljYWxseSwgYWxsb2NhdGluZyBhbmQgemVyb2luZyB0aGUgYHpsZHBsbGAgc3RydWN0IHdpdGggYGt6YWxsb2Nfb2JqKCp6bGRwbGwpYCBpcyBhIHNvbGlkIHN0YXJ0IGZvciBhdm9pZGluZyB1bmluaXRpYWxpemVkIHZhbHVlcy4KCk1vdmluZyB0aHJvdWdoIHRoZSBjb2RlLCBJIGV4YW1pbmVkIHRoZSBgemwzMDczeF9kcGxsX3B0cF9yZWdpc3RlcmAgZnVuY3Rpb24gYW5kIHRoZSB1c2FnZSBvZiBgemxkcGxsLSZndDtwdHBfaW5mb2AuIFRoaXMgc3RydWN0IGdldHMgaW5pdGlhbGl6ZWQgYnkgYSBjb3B5IGZyb20gYSBgc3RhdGljIGNvbnN0YCBzdHJ1Y3R1cmUsIGB6bDMwNzN4X2RwbGxfcHRwX2Nsb2NrX2luZm9gLiBCZWNhdXNlIGl0JiMzOTtzIGBzdGF0aWMgY29uc3RgLCB0aGUgY29tcGlsZXIgaGFuZGxlcyB0aGUgemVyby1pbml0aWFsaXphdGlvbiBvZiBhbGwgdW5pbml0aWFsaXplZCBmaWVsZHMsIGVuc3VyaW5nIHRoYXQgdGhlIFBUUCBpbmZvcm1hdGlvbiBpcyBmdWxseSBpbml0aWFsaXplZCBiZWZvcmUgdXNlLiBUaGUgYHNucHJpbnRmYCBmdW5jdGlvbiB3aWxsIHdyaXRlIHRvIHRoZSBgbmFtZWAgZmllbGQsIGJ1dCBzaW5jZSB0aGUgcmVzdCBpcyBhbHJlYWR5IHplcm9lZCwgdGhlcmUgYXJlIG5vIHVuaW5pdGlhbGl6ZWQgcmVhZHMuCgpUaGVuIEkgY29uc2lkZXJlZCBgemwzMDczeF9jaGFuX3RvZF9yZWFkYC4gVGhlIGB0c2Agc3RydWN0LCB1c2VkIHRvIHN0b3JlIHRoZSByZWFkIHRpbWUsIHNlZW1zIHRvIGJlIGZ1bGx5IGluaXRpYWxpemVkIG9uIGEgc3VjY2Vzc2Z1bCByZXR1cm4uIEluIHRoZSBldmVudCBvZiBhbiBlcnJvciwgaXQgaXMgcmV0dXJuZWQsIGFuZCBzaW5jZSB0aGUgUFRQIHN1YnN5c3RlbSB3aWxsIG5vdCB1c2UgaXQsIHRoZXJlIGFyZSBubyB1bmluaXRpYWxpemVkIHJlYWRzLgoKSW4gYHpsMzA3M3hfZHBsbF9wdHBfYWRqdGltZV9waGFzZV9zdGVwYCBJIHNhdyB0aGF0IHRoZSBgc3ludGhfbWFza2AgYXJyYXkgaXMgaW5pdGlhbGl6ZWQgdG8gemVybywgd2hpY2ggaXMgYSBnb29kIHByYWN0aWNlLgoKTmV4dCwgSSBsb29rZWQgYXQgaG93IGB6bDMwNzN4X2RwbGxfcHRwX2FkanRpbWVgIGhhbmRsZXMgYHRzYC4gVGhlIHJlbGV2YW50IGNvZGUgaW5kaWNhdGVzIHRoYXQgYHRzYCBpcyBmdWxseSBpbml0aWFsaXplZCBiZWZvcmUgaXQmIzM5O3MgcGFzc2VkIG9uIHRvIG90aGVyIGZ1bmN0aW9ucy4KCmB6bDMwNzN4X2NoYW5fdG9kX2FkanVzdGAgY2FsbHMgYHpsMzA3M3hfY2hhbl90b2RfcmVhZGAsIGFuZCBpdCBhcHBlYXJzIHRoYXQgYHRzX25leHRgIGFuZCBgdHNfY3VyYCB3aWxsIGFsc28gYmUgZnVsbHkgaW5pdGlhbGl6ZWQgZHVlIHRvIHRoZSByZXR1cm4gdmFsdWUgb2YgYHpsMzA3M3hfY2hhbl90b2RfcmVhZGAgaW4gY2FzZSBvZiBzdWNjZXNzLgoKRm9yIGB6bDMwNzN4X2NoYW5fdG9kX3dyaXRlYCwgSSBjb25maXJtZWQgdGhhdCB0aGUgZmllbGRzIG9mIHRoZSBpbnB1dCBgdHNgIGFyZSBwcm9wZXJseSBwb3B1bGF0ZWQgYmVmb3JlIGJlaW5nIHVzZWQuCgpUaGVuIEkgYW5hbHl6ZWQgYHpsMzA3M3hfY2hhbl9kZl9vZmZzZXRfc2V0YCwgYHpsMzA3M3hfY2hhbl90aWVfd3JpdGVgLCBgemwzMDczeF9jaGFuX3BoYXNlX3N0ZXBgLCBhbmQgYHpsMzA3M3hfZGV2X3N0YXRlX2ZldGNoYC4gSXQgc2VlbXMgdGhhdCB0aGVzZSBmdW5jdGlvbnMgYWxsIHVzZSBpbml0aWFsaXplZCBkYXRhLgoKRmluYWxseSwgdGhlIGFuYWx5c2lzIG9mIGB6bDMwNzN4X2RwbGxfcHRwX2FkamZpbmVgIGFuZCBgemwzMDczeF9kcGxsX3B0cF9hZGpwaGFzZWAgZGlkIG5vdCBwcmVzZW50IGFueSBvYnZpb3VzIGNhc2VzIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlLgoKSW4gc3VtbWFyeSwgdGhlcmUgaXMgbm8gZXZpZGVuY2Ugb2YgdW5pbml0aWFsaXplZCByZWFkcyBiZWluZyBpbnRyb2R1Y2VkIGJ5IHRoaXMgcGF0Y2guIFRoZSBkcml2ZXIgdXNlcyBhcHByb3ByaWF0ZSBpbml0aWFsaXphdGlvbiB0ZWNobmlxdWVzLCBsaWtlIGBremFsbG9jX29iamAsIGFuZCB0aGUgUFRQIHN1YnN5c3RlbSBzZWVtcyB0byBoYW5kbGUgZGF0YSB0cmFuc2ZlciB0byB1c2Vyc3BhY2Ugc2FmZWx5LiBUaGVyZWZvcmUsIEkmIzM5O20gY29uZmlkZW50IGluIHNldHRpbmcgYE5lZWRzS01TQU49ZmFsc2VgLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMSAxNDowMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRzIFBUUCBjbG9jayBzdXBwb3J0IHRvIHRoZSBNaWNyb2NoaXAgQXp1cml0ZSBEUExML1BUUC9TeW5jRSBkZXZpY2VzIGRyaXZlci4gSXQgaW50cm9kdWNlcyBmdW5jdGlvbnMgdG8gcmVhZC93cml0ZSBUaW1lIG9mIERheSAoVG9EKSwgYWRqdXN0IHBoYXNlLCBhZGp1c3QgZnJlcXVlbmN5LCBhbmQgcmVnaXN0ZXIgYSBQVFAgY2xvY2sgZGV2aWNlLiBUaGUgZHJpdmVyIGludGVyYWN0cyB3aXRoIHRoZSBQVFAgc3Vic3lzdGVtIGJ5IHByb3ZpZGluZyBjYWxsYmFja3MgKGBnZXR0aW1leDY0YCwgYHNldHRpbWU2NGAsIGBhZGp0aW1lYCwgYGFkamZpbmVgLCBgYWRqcGhhc2VgKS4gQWxsIHN0cnVjdHVyZXMgYWxsb2NhdGVkIGR5bmFtaWNhbGx5IGFyZSB6ZXJvLWluaXRpYWxpemVkIHVzaW5nIGBremFsbG9jX29iamAuIFRoZSBgcHRwX2Nsb2NrX2luZm9gIHN0cnVjdHVyZSBpcyBjb3BpZWQgZnJvbSBhIHN0YXRpYyBjb25zdCB0ZW1wbGF0ZSwgZW5zdXJpbmcgYWxsIHVuaW5pdGlhbGl6ZWQgZmllbGRzIGFyZSB6ZXJvZWQgYnkgdGhlIGNvbXBpbGVyIGJlZm9yZSBgc25wcmludGZgIG1vZGlmaWVzIHRoZSBgbmFtZWAgZmllbGQuIFRoZSBgc3RydWN0IHRpbWVzcGVjNjRgIHBvcHVsYXRlZCBieSB0aGUgZHJpdmVyIGlzIGZ1bGx5IGluaXRpYWxpemVkIG9uIHN1Y2Nlc3MsIGFuZCBlcnJvcnMgYXJlIHByb3Blcmx5IHByb3BhZ2F0ZWQgdG8gdGhlIFBUUCBzdWJzeXN0ZW0sIHByZXZlbnRpbmcgdW5pbml0aWFsaXplZCBkYXRhIGZyb20gYmVpbmcgdXNlZCBvciBjb3BpZWQgdG8gdXNlcnNwYWNlLiBObyBuZXcgdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3Mgb3IgaW5mby1sZWFrcyBhcmUgaW50cm9kdWNlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHMgUFRQIGNsb2NrIHN1cHBvcnQgdG8gdGhlIE1pY3JvY2hpcCBBenVyaXRlIERQTEwvUFRQL1N5bmNFIGRldmljZXMgZHJpdmVyLiBJdCBpbnRyb2R1Y2VzIGZ1bmN0aW9ucyB0byByZWFkL3dyaXRlIFRpbWUgb2YgRGF5IChUb0QpLCBhZGp1c3QgcGhhc2UsIGFkanVzdCBmcmVxdWVuY3ksIGFuZCByZWdpc3RlciBhIFBUUCBjbG9jayBkZXZpY2UuIFRoZSBkcml2ZXIgaW50ZXJhY3RzIHdpdGggdGhlIFBUUCBzdWJzeXN0ZW0gYnkgcHJvdmlkaW5nIGNhbGxiYWNrcyAoYGdldHRpbWV4NjRgLCBgc2V0dGltZTY0YCwgYGFkanRpbWVgLCBgYWRqZmluZWAsIGBhZGpwaGFzZWApLiBBbGwgc3RydWN0dXJlcyBhbGxvY2F0ZWQgZHluYW1pY2FsbHkgYXJlIHplcm8taW5pdGlhbGl6ZWQgdXNpbmcgYGt6YWxsb2Nfb2JqYC4gVGhlIGBwdHBfY2xvY2tfaW5mb2Agc3RydWN0dXJlIGlzIGNvcGllZCBmcm9tIGEgc3RhdGljIGNvbnN0IHRlbXBsYXRlLCBlbnN1cmluZyBhbGwgdW5pbml0aWFsaXplZCBmaWVsZHMgYXJlIHplcm9lZCBieSB0aGUgY29tcGlsZXIgYmVmb3JlIGBzbnByaW50ZmAgbW9kaWZpZXMgdGhlIGBuYW1lYCBmaWVsZC4gVGhlIGBzdHJ1Y3QgdGltZXNwZWM2NGAgcG9wdWxhdGVkIGJ5IHRoZSBkcml2ZXIgaXMgZnVsbHkgaW5pdGlhbGl6ZWQgb24gc3VjY2VzcywgYW5kIGVycm9ycyBhcmUgcHJvcGVybHkgcHJvcGFnYXRlZCB0byB0aGUgUFRQIHN1YnN5c3RlbSwgcHJldmVudGluZyB1bmluaXRpYWxpemVkIGRhdGEgZnJvbSBiZWluZyB1c2VkIG9yIGNvcGllZCB0byB1c2Vyc3BhY2UuIE5vIG5ldyB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcyBvciBpbmZvLWxlYWtzIGFyZSBpbnRyb2R1Y2VkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wOC0xMVQxNDowMjoyMy45OTc2NDQwNjhaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo5MjgzNzE2MzM3OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJaTDMwNzNYX0kyQ1wiLFxuICAgIFwiWkwzMDczWF9TUElcIixcbiAgICBcIlBUUF8xNTg4X0NMT0NLXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiemwzMDczeF9jaGFuX3RvZF9yZWFkXCIsXG4gICAgXCJ6bDMwNzN4X2NoYW5fdG9kX3dyaXRlXCIsXG4gICAgXCJ6bDMwNzN4X2NoYW5fdG9kX2FkanVzdFwiLFxuICAgIFwiemwzMDczeF9jaGFuX2RmX29mZnNldF9zZXRcIixcbiAgICBcInpsMzA3M3hfY2hhbl90aWVfd3JpdGVcIixcbiAgICBcInpsMzA3M3hfY2hhbl9waGFzZV9zdGVwXCIsXG4gICAgXCJ6bDMwNzN4X2RwbGxfcHRwX2dldHRpbWV4NjRcIixcbiAgICBcInpsMzA3M3hfZHBsbF9wdHBfc2V0dGltZTY0XCIsXG4gICAgXCJ6bDMwNzN4X2RwbGxfcHRwX2FkanRpbWVcIixcbiAgICBcInpsMzA3M3hfZHBsbF9wdHBfYWRqZmluZVwiLFxuICAgIFwiemwzMDczeF9kcGxsX3B0cF9hZGpwaGFzZVwiXG4gIF0sXG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcyBQVFAgY2xvY2sgc3VwcG9ydCB0byB0aGUgTWljcm9jaGlwIEF6dXJpdGUgRFBMTC9QVFAvU3luY0UgZGV2aWNlcyBkcml2ZXIuIEl0IGludHJvZHVjZXMgZnVuY3Rpb25zIHRvIHJlYWQvd3JpdGUgVGltZSBvZiBEYXkgKFRvRCksIGFkanVzdCBwaGFzZSwgYWRqdXN0IGZyZXF1ZW5jeSwgYW5kIHJlZ2lzdGVyIGEgUFRQIGNsb2NrIGRldmljZS4gVGhlIGRyaXZlciBpbnRlcmFjdHMgd2l0aCB0aGUgUFRQIHN1YnN5c3RlbSBieSBwcm92aWRpbmcgY2FsbGJhY2tzIChgZ2V0dGltZXg2NGAsIGBzZXR0aW1lNjRgLCBgYWRqdGltZWAsIGBhZGpmaW5lYCwgYGFkanBoYXNlYCkuIEFsbCBzdHJ1Y3R1cmVzIGFsbG9jYXRlZCBkeW5hbWljYWxseSBhcmUgemVyby1pbml0aWFsaXplZCB1c2luZyBga3phbGxvY19vYmpgLiBUaGUgYHB0cF9jbG9ja19pbmZvYCBzdHJ1Y3R1cmUgaXMgY29waWVkIGZyb20gYSBzdGF0aWMgY29uc3QgdGVtcGxhdGUsIGVuc3VyaW5nIGFsbCB1bmluaXRpYWxpemVkIGZpZWxkcyBhcmUgemVyb2VkIGJ5IHRoZSBjb21waWxlciBiZWZvcmUgYHNucHJpbnRmYCBtb2RpZmllcyB0aGUgYG5hbWVgIGZpZWxkLiBUaGUgYHN0cnVjdCB0aW1lc3BlYzY0YCBwb3B1bGF0ZWQgYnkgdGhlIGRyaXZlciBpcyBmdWxseSBpbml0aWFsaXplZCBvbiBzdWNjZXNzLCBhbmQgZXJyb3JzIGFyZSBwcm9wZXJseSBwcm9wYWdhdGVkIHRvIHRoZSBQVFAgc3Vic3lzdGVtLCBwcmV2ZW50aW5nIHVuaW5pdGlhbGl6ZWQgZGF0YSBmcm9tIGJlaW5nIHVzZWQgb3IgY29waWVkIHRvIHVzZXJzcGFjZS4gTm8gbmV3IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzIG9yIGluZm8tbGVha3MgYXJlIGludHJvZHVjZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcyBQVFAgY2xvY2sgc3VwcG9ydCB0byB0aGUgTWljcm9jaGlwIEF6dXJpdGUgRFBMTCBkcml2ZXIgKHpsMzA3M3gpLiBJdCBpbXBsZW1lbnRzIFBUUCBjbG9jayBvcGVyYXRpb25zIGxpa2UgZ2V0dGltZXg2NCwgc2V0dGltZTY0LCBhZGp0aW1lLCBhZGpmaW5lLCBhbmQgYWRqcGhhc2UuIFRoZSBkcml2ZXIgY2FuIGJlIGluc3RhbnRpYXRlZCB2aWEgSTJDIG9yIFNQSSBpbiBRRU1VLCBhbmQgdGhlIFBUUCBvcGVyYXRpb25zIGFyZSByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2UgdmlhIFBUUCBpb2N0bHMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTExVDE0OjAyOjIzLjk5NzY1MDY4OFoiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTI5NjE2MzExNywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IDk1N2RjZmQ2NzFlOGJjNTk3NzE5YzEyY2IyYjMwMWQyZjc0OWZlZDFcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIFR1ZSBBdWcgMTEgMTQ6MDI6MjIgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9kcGxsL3psMzA3M3gvS2NvbmZpZyBiL2RyaXZlcnMvZHBsbC96bDMwNzN4L0tjb25maWdcXG5pbmRleCA1YmJjYTE0MDA1ODEzLi5kYTE3MzFhY2UxNWYwIDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvZHBsbC96bDMwNzN4L0tjb25maWdcXG4rKysgYi9kcml2ZXJzL2RwbGwvemwzMDczeC9LY29uZmlnXFxuQEAgLTIsNyArMiw3IEBAXFxuIFxcbiBjb25maWcgWkwzMDczWFxcbiBcXHR0cmlzdGF0ZSBcXFwiTWljcm9jaGlwIEF6dXJpdGUgRFBMTC9QVFAvU3luY0UgZGV2aWNlc1xcXCIgaWYgQ09NUElMRV9URVNUXFxuLVxcdGRlcGVuZHMgb24gTkVUXFxuK1xcdGRlcGVuZHMgb24gTkVUIFxcdTAwMjZcXHUwMDI2IFBUUF8xNTg4X0NMT0NLXFxuIFxcdHNlbGVjdCBEUExMXFxuIFxcdHNlbGVjdCBORVRfREVWTElOS1xcbiBcXHRzZWxlY3QgUkVHTUFQXFxuQEAgLTE2LDcgKzE2LDcgQEAgY29uZmlnIFpMMzA3M1hcXG4gXFxuIGNvbmZpZyBaTDMwNzNYX0kyQ1xcbiBcXHR0cmlzdGF0ZSBcXFwiSTJDIGJ1cyBpbXBsZW1lbnRhdGlvbiBmb3IgTWljcm9jaGlwIEF6dXJpdGUgZGV2aWNlc1xcXCJcXG4tXFx0ZGVwZW5kcyBvbiBJMkMgXFx1MDAyNlxcdTAwMjYgTkVUXFxuK1xcdGRlcGVuZHMgb24gSTJDIFxcdTAwMjZcXHUwMDI2IE5FVCBcXHUwMDI2XFx1MDAyNiBQVFBfMTU4OF9DTE9DS1xcbiBcXHRzZWxlY3QgUkVHTUFQX0kyQ1xcbiBcXHRzZWxlY3QgWkwzMDczWFxcbiBcXHRoZWxwXFxuQEAgLTI4LDcgKzI4LDcgQEAgY29uZmlnIFpMMzA3M1hfSTJDXFxuIFxcbiBjb25maWcgWkwzMDczWF9TUElcXG4gXFx0dHJpc3RhdGUgXFxcIlNQSSBidXMgaW1wbGVtZW50YXRpb24gZm9yIE1pY3JvY2hpcCBBenVyaXRlIGRldmljZXNcXFwiXFxuLVxcdGRlcGVuZHMgb24gTkVUIFxcdTAwMjZcXHUwMDI2IFNQSVxcbitcXHRkZXBlbmRzIG9uIE5FVCBcXHUwMDI2XFx1MDAyNiBTUEkgXFx1MDAyNlxcdTAwMjYgUFRQXzE1ODhfQ0xPQ0tcXG4gXFx0c2VsZWN0IFJFR01BUF9TUElcXG4gXFx0c2VsZWN0IFpMMzA3M1hcXG4gXFx0aGVscFxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmMgYi9kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmNcXG5pbmRleCA0ZWMyY2Y1M2RhZDQ2Li5iYzZkNzBkMjVkNzkxIDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uY1xcbisrKyBiL2RyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uY1xcbkBAIC0zLDYgKzMsNyBAQFxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvY2xlYW51cC5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvZGVsYXkuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2Rldl9wcmludGsuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3B0cF9jbG9ja19rZXJuZWwuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3N0cmluZy5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvdHlwZXMuaFxcdTAwM2VcXG4gXFxuQEAgLTE2Miw4ICsxNjMsOCBAQCBpbnQgemwzMDczeF9jaGFuX25jb19tb2RlX3NldChzdHJ1Y3QgemwzMDczeF9kZXYgKnpsZGV2LCB1OCBpbmRleClcXG4gICogQHpsZGV2OiBwb2ludGVyIHRvIHpsMzA3M3hfZGV2IHN0cnVjdHVyZVxcbiAgKiBAaW5kZXg6IERQTEwgY2hhbm5lbCBpbmRleCB0byBmZXRjaCBzdGF0ZSBmb3JcXG4gICpcXG4tICogUmVhZHMgdGhlIG1vZGVfcmVmc2VsIHJlZ2lzdGVyIGFuZCByZWZlcmVuY2UgcHJpb3JpdHkgcmVnaXN0ZXJzIGZvclxcbi0gKiB0aGUgZ2l2ZW4gRFBMTCBjaGFubmVsIGFuZCBzdG9yZXMgdGhlIHJhdyB2YWx1ZXMgZm9yIGxhdGVyIHVzZS5cXG4rICogUmVhZHMgdGhlIG1vZGVfcmVmc2VsLCBzdGF0dXMgYW5kIHJlZmVyZW5jZSBwcmlvcml0eSByZWdpc3RlcnMgZm9yXFxuKyAqIHRoZSBnaXZlbiBEUExMIGNoYW5uZWwgYW5kIHN0b3JlcyB0aGUgdmFsdWVzIGZvciBsYXRlciB1c2UuXFxuICAqXFxuICAqIFJldHVybjogMCBvbiBzdWNjZXNzLCBcXHUwMDNjMCBvbiBlcnJvclxcbiAgKi9cXG5AQCAtMjM0LDYgKzIzNSwzMjYgQEAgY29uc3Qgc3RydWN0IHpsMzA3M3hfY2hhbiAqemwzMDczeF9jaGFuX3N0YXRlX2dldChzdHJ1Y3QgemwzMDczeF9kZXYgKnpsZGV2LFxcbiBcXHRyZXR1cm4gXFx1MDAyNnpsZGV2LVxcdTAwM2VjaGFuW2luZGV4XTtcXG4gfVxcbiBcXG4rLyoqXFxuKyAqIHpsMzA3M3hfY2hhbl90b2RfcmVhZHlfd2FpdCAtIHdhaXQgZm9yIFRvRCBzZW1hcGhvcmUgdG8gY2xlYXJcXG4rICogQHpsZGV2OiBwb2ludGVyIHRvIHpsMzA3M3ggZGV2aWNlXFxuKyAqIEBjaDogRFBMTCBjaGFubmVsIGluZGV4XFxuKyAqXFxuKyAqIENoZWNrcyB0aGUgVG9EIGNvbnRyb2wgcmVnaXN0ZXIgc2VtYXBob3JlIGJpdC4gSWYgY2xlYXIsIHJldHVybnNcXG4rICogaW1tZWRpYXRlbHkuIE90aGVyd2lzZSBwb2xscyB1bnRpbCB0aGUgYml0IGlzIGNsZWFyZWQgYnkgdGhlIGRldmljZS5cXG4rICpcXG4rICogUmV0dXJuOlxcbisgKiAqIDBcXHRcXHRcXHQtIHN1Y2Nlc3NcXG4rICogKiAlLUVCVVNZXFx0XFx0LSB0aW1lb3V0XFxuKyAqICogJS1FT1BOT1RTVVBQXFx0LSB1bmtub3duIGNvbW1hbmQgZGV0ZWN0ZWRcXG4rICogKiBuZWdhdGl2ZVxcdFxcdC0gb3RoZXIgZXJyb3JcXG4rICovXFxuK2ludCB6bDMwNzN4X2NoYW5fdG9kX3JlYWR5X3dhaXQoc3RydWN0IHpsMzA3M3hfZGV2ICp6bGRldiwgdTggY2gpXFxuK3tcXG4rXFx0dW5zaWduZWQgaW50IHRpbWVvdXQ7XFxuK1xcdHU4IHRvZF9jdHJsO1xcbitcXHRpbnQgcmM7XFxuK1xcbitcXHRyYyA9IHpsMzA3M3hfcmVhZF91OCh6bGRldiwgWkxfUkVHX0RQTExfVE9EX0NUUkwoY2gpLCBcXHUwMDI2dG9kX2N0cmwpO1xcbitcXHRpZiAocmMpXFxuK1xcdFxcdHJldHVybiByYztcXG4rXFxuK1xcdGlmICghKHRvZF9jdHJsIFxcdTAwMjYgWkxfRFBMTF9UT0RfQ1RSTF9TRU0pKVxcbitcXHRcXHRyZXR1cm4gMDtcXG4rXFxuK1xcdHN3aXRjaCAoRklFTERfR0VUKFpMX0RQTExfVE9EX0NUUkxfQ01ELCB0b2RfY3RybCkpIHtcXG4rXFx0Y2FzZSBaTF9EUExMX1RPRF9DVFJMX0NNRF9XUl9ORVhUXzFIWjpcXG4rXFx0XFx0dGltZW91dCA9IFpMX1BPTExfVE9EX1dSX1RJTUVPVVRfVVM7XFxuK1xcdFxcdGJyZWFrO1xcbitcXHRjYXNlIFpMX0RQTExfVE9EX0NUUkxfQ01EX1JEX0NVUlJFTlQ6XFxuK1xcdGNhc2UgWkxfRFBMTF9UT0RfQ1RSTF9DTURfUkRfTkVYVF8xSFo6XFxuK1xcdFxcdHRpbWVvdXQgPSBaTF9QT0xMX1RPRF9SRF9USU1FT1VUX1VTO1xcbitcXHRcXHRicmVhaztcXG4rXFx0ZGVmYXVsdDpcXG4rXFx0XFx0V0FSTl9PTigxKTtcXG4rXFx0XFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xcbitcXHR9XFxuK1xcbitcXHRyYyA9IHpsMzA3M3hfcG9sbF96ZXJvX3U4KHpsZGV2LCBaTF9SRUdfRFBMTF9UT0RfQ1RSTChjaCksXFxuK1xcdFxcdFxcdFxcdCAgWkxfRFBMTF9UT0RfQ1RSTF9TRU0sIHRpbWVvdXQpO1xcbitcXG4rXFx0cmV0dXJuIHJjID09IC1FVElNRURPVVQgPyAtRUJVU1kgOiByYztcXG4rfVxcbitcXG4rLyoqXFxuKyAqIHpsMzA3M3hfY2hhbl90b2RfY3RybCAtIGlzc3VlIFRvRCBjb21tYW5kXFxuKyAqIEB6bGRldjogcG9pbnRlciB0byB6bDMwNzN4IGRldmljZVxcbisgKiBAY2g6IERQTEwgY2hhbm5lbCBpbmRleFxcbisgKiBAY21kOiBUb0QgY29tbWFuZCB0byBleGVjdXRlXFxuKyAqXFxuKyAqIFdyaXRlcyB0aGUgc2VtYXBob3JlIGFuZCBjb21tYW5kIHRvIGRwbGxfdG9kX2N0cmwuIFRoZSBjYWxsZXIgbXVzdFxcbisgKiBlbnN1cmUgdGhlIGRldmljZSBpcyByZWFkeSAoc2VtYXBob3JlIGNsZWFyKSBiZWZvcmUgY2FsbGluZyBhbmRcXG4rICogbXVzdCB3YWl0IGZvciBjb21wbGV0aW9uIGlmIG5lZWRlZC5cXG4rICpcXG4rICogUmV0dXJuOiAwIG9uIHN1Y2Nlc3MsIFxcdTAwM2MwIG9uIGVycm9yXFxuKyAqL1xcbitzdGF0aWMgaW50IHpsMzA3M3hfY2hhbl90b2RfY3RybChzdHJ1Y3QgemwzMDczeF9kZXYgKnpsZGV2LCB1OCBjaCwgdTggY21kKVxcbit7XFxuK1xcdHJldHVybiB6bDMwNzN4X3dyaXRlX3U4KHpsZGV2LCBaTF9SRUdfRFBMTF9UT0RfQ1RSTChjaCksXFxuK1xcdFxcdFxcdFxcdFpMX0RQTExfVE9EX0NUUkxfU0VNIHwgY21kKTtcXG4rfVxcbitcXG4rLyoqXFxuKyAqIHpsMzA3M3hfY2hhbl90b2RfcmVhZCAtIHJlYWQgVG9EIHJlZ2lzdGVycyBhZnRlciBpc3N1aW5nIGEgY29tbWFuZFxcbisgKiBAemxkZXY6IHBvaW50ZXIgdG8gemwzMDczeCBkZXZpY2VcXG4rICogQGNoOiBEUExMIGNoYW5uZWwgaW5kZXhcXG4rICogQG5leHRfaHo6IGlmIHRydWUsIHJlYWQgcHJlZGljdGVkIFRvRCBhdCBuZXh0IDEgSHo7IG90aGVyd2lzZSByZWFkIGN1cnJlbnRcXG4rICogQHRzOiB0aW1lc3BlYyB0byBzdG9yZSB0aGUgcmVzdWx0XFxuKyAqIEBzdHM6IG9wdGlvbmFsIHN5c3RlbSB0aW1lc3RhbXAgcGFpciBmb3IgY3Jvc3MtdGltZXN0YW1waW5nXFxuKyAqXFxuKyAqIENvbnRleHQ6IENhbGxlciBtdXN0IHNlcmlhbGl6ZSBhbGwgemwzMDczeF9jaGFuX3RvZF8qIGNhbGxzIGV4dGVybmFsbHkuXFxuKyAqIFJldHVybjogMCBvbiBzdWNjZXNzLCBcXHUwMDNjMCBvbiBlcnJvclxcbisgKi9cXG4raW50IHpsMzA3M3hfY2hhbl90b2RfcmVhZChzdHJ1Y3QgemwzMDczeF9kZXYgKnpsZGV2LCB1OCBjaCxcXG4rXFx0XFx0XFx0ICBib29sIG5leHRfaHosIHN0cnVjdCB0aW1lc3BlYzY0ICp0cyxcXG4rXFx0XFx0XFx0ICBzdHJ1Y3QgcHRwX3N5c3RlbV90aW1lc3RhbXAgKnN0cylcXG4re1xcbitcXHR1MzIgbnNlYztcXG4rXFx0dTY0IHNlYztcXG4rXFx0dTggY21kO1xcbitcXHRpbnQgcmM7XFxuK1xcbitcXHRpZiAobmV4dF9oeilcXG4rXFx0XFx0Y21kID0gWkxfRFBMTF9UT0RfQ1RSTF9DTURfUkRfTkVYVF8xSFo7XFxuK1xcdGVsc2VcXG4rXFx0XFx0Y21kID0gWkxfRFBMTF9UT0RfQ1RSTF9DTURfUkRfQ1VSUkVOVDtcXG4rXFxuK1xcdC8qIFdhaXQgZm9yIGFueSBwcmV2aW91cyBUb0Qgb3BlcmF0aW9uIHRvIGNvbXBsZXRlICovXFxuK1xcdHJjID0gemwzMDczeF9jaGFuX3RvZF9yZWFkeV93YWl0KHpsZGV2LCBjaCk7XFxuK1xcdGlmIChyYylcXG4rXFx0XFx0cmV0dXJuIHJjO1xcbitcXG4rXFx0cHRwX3JlYWRfc3lzdGVtX3ByZXRzKHN0cyk7XFxuK1xcdHJjID0gemwzMDczeF9jaGFuX3RvZF9jdHJsKHpsZGV2LCBjaCwgY21kKTtcXG4rXFx0aWYgKHJjKVxcbitcXHRcXHRyZXR1cm4gcmM7XFxuK1xcbitcXHRyYyA9IHpsMzA3M3hfY2hhbl90b2RfcmVhZHlfd2FpdCh6bGRldiwgY2gpO1xcbitcXHRpZiAocmMpXFxuK1xcdFxcdHJldHVybiByYztcXG4rXFx0cHRwX3JlYWRfc3lzdGVtX3Bvc3R0cyhzdHMpO1xcbitcXG4rXFx0cmMgPSB6bDMwNzN4X3JlYWRfdTQ4KHpsZGV2LCBaTF9SRUdfRFBMTF9UT0RfU0VDKGNoKSwgXFx1MDAyNnNlYyk7XFxuK1xcdGlmIChyYylcXG4rXFx0XFx0cmV0dXJuIHJjO1xcbitcXG4rXFx0LyogSFcgbmFub3NlY29uZHMgYXJlIGFsd2F5cyBpbiBbMCwgTlNFQ19QRVJfU0VDKSByYW5nZSAqL1xcbitcXHRyYyA9IHpsMzA3M3hfcmVhZF91MzIoemxkZXYsIFpMX1JFR19EUExMX1RPRF9OUyhjaCksIFxcdTAwMjZuc2VjKTtcXG4rXFx0aWYgKHJjKVxcbitcXHRcXHRyZXR1cm4gcmM7XFxuK1xcbitcXHR0cy1cXHUwMDNldHZfc2VjID0gc2VjO1xcbitcXHR0cy1cXHUwMDNldHZfbnNlYyA9IG5zZWM7XFxuK1xcbitcXHRyZXR1cm4gMDtcXG4rfVxcbitcXG4rLyoqXFxuKyAqIHpsMzA3M3hfY2hhbl90b2Rfd3JpdGUgLSB3cml0ZSBUb0QgcmVnaXN0ZXJzIGFuZCB0cmlnZ2VyIDEgSHogdXBkYXRlXFxuKyAqIEB6bGRldjogcG9pbnRlciB0byB6bDMwNzN4IGRldmljZVxcbisgKiBAY2g6IERQTEwgY2hhbm5lbCBpbmRleFxcbisgKiBAdHM6IHRpbWUgdG8gc2V0XFxuKyAqXFxuKyAqIENvbnRleHQ6IENhbGxlciBtdXN0IHNlcmlhbGl6ZSBhbGwgemwzMDczeF9jaGFuX3RvZF8qIGNhbGxzIGV4dGVybmFsbHkuXFxuKyAqIFJldHVybjogMCBvbiBzdWNjZXNzLCBcXHUwMDNjMCBvbiBlcnJvclxcbisgKi9cXG4raW50IHpsMzA3M3hfY2hhbl90b2Rfd3JpdGUoc3RydWN0IHpsMzA3M3hfZGV2ICp6bGRldiwgdTggY2gsXFxuK1xcdFxcdFxcdCAgIHN0cnVjdCB0aW1lc3BlYzY0IHRzKVxcbit7XFxuK1xcdGludCByYztcXG4rXFxuK1xcdC8qIFdhaXQgZm9yIGFueSBwcmV2aW91cyBUb0Qgb3BlcmF0aW9uIHRvIGNvbXBsZXRlICovXFxuK1xcdHJjID0gemwzMDczeF9jaGFuX3RvZF9yZWFkeV93YWl0KHpsZGV2LCBjaCk7XFxuK1xcdGlmIChyYylcXG4rXFx0XFx0cmV0dXJuIHJjO1xcbitcXG4rXFx0cmMgPSB6bDMwNzN4X3dyaXRlX3U0OCh6bGRldiwgWkxfUkVHX0RQTExfVE9EX1NFQyhjaCksIHRzLnR2X3NlYyk7XFxuK1xcdGlmIChyYylcXG4rXFx0XFx0cmV0dXJuIHJjO1xcbitcXG4rXFx0cmMgPSB6bDMwNzN4X3dyaXRlX3UzMih6bGRldiwgWkxfUkVHX0RQTExfVE9EX05TKGNoKSwgdHMudHZfbnNlYyk7XFxuK1xcdGlmIChyYylcXG4rXFx0XFx0cmV0dXJuIHJjO1xcbitcXG4rXFx0cmV0dXJuIHpsMzA3M3hfY2hhbl90b2RfY3RybCh6bGRldiwgY2gsXFxuK1xcdFxcdFxcdFxcdCAgICAgWkxfRFBMTF9UT0RfQ1RSTF9DTURfV1JfTkVYVF8xSFopO1xcbit9XFxuK1xcbisvKipcXG4rICogemwzMDczeF9jaGFuX3RvZF9hZGp1c3QgLSBhdG9taWMgVG9EIHJlYWQtbW9kaWZ5LXdyaXRlIHdpdGggcm9sbG92ZXIgZ3VhcmRcXG4rICogQHpsZGV2OiBwb2ludGVyIHRvIHpsMzA3M3ggZGV2aWNlXFxuKyAqIEBjaDogRFBMTCBjaGFubmVsIGluZGV4XFxuKyAqIEBkZWx0YTogdGltZSBhZGp1c3RtZW50IHRvIGFwcGx5XFxuKyAqXFxuKyAqIFJlYWRzIHRoZSBuZXh0LUh6IFRvRCBhbmQgY3VycmVudCBUb0QsIHRoZW4gY2hlY2tzIHdoZXRoZXIgZW5vdWdoIHRpbWVcXG4rICogcmVtYWlucyBiZWZvcmUgdGhlIG5leHQgMSBIeiByb2xsb3ZlciB0byBzYWZlbHkgY29tcGxldGUgdGhlIHdyaXRlLlxcbisgKiBSZS1yZWFkcyBpZiB0aGUgMSBIeiB0aWNrIGNyb3NzZWQgYmV0d2VlbiB0aGUgdHdvIHJlYWRzIG9yIGlmIGxlc3NcXG4rICogdGhhbiAyMCBtcyByZW1haW5zIGJlZm9yZSB0aGUgbmV4dCByb2xsb3Zlci4gQXBwbGllcyBAZGVsdGEgYW5kIHdyaXRlc1xcbisgKiB0aGUgcmVzdWx0IGJhY2suXFxuKyAqXFxuKyAqIENvbnRleHQ6IENhbGxlciBtdXN0IHNlcmlhbGl6ZSBhbGwgemwzMDczeF9jaGFuX3RvZF8qIGNhbGxzIGV4dGVybmFsbHkuXFxuKyAqIFJldHVybjogMCBvbiBzdWNjZXNzLCBcXHUwMDNjMCBvbiBlcnJvclxcbisgKi9cXG4raW50IHpsMzA3M3hfY2hhbl90b2RfYWRqdXN0KHN0cnVjdCB6bDMwNzN4X2RldiAqemxkZXYsIHU4IGNoLFxcbitcXHRcXHRcXHQgICAgc3RydWN0IHRpbWVzcGVjNjQgZGVsdGEpXFxuK3tcXG4rI2RlZmluZSBaTF9UT0RfTUFYX1JFVFJJRVNcXHQyMFxcbitcXHRzdGF0aWMgY29uc3QgbG9uZyB0aHJlc2hvbGRfbnMgPSAyMCAqIE5TRUNfUEVSX01TRUM7XFxuK1xcdHN0cnVjdCB0aW1lc3BlYzY0IHRzX25leHQsIHRzX2N1ciwgZGlmZjtcXG4rXFx0aW50IHJjLCBpO1xcbitcXG4rXFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIFpMX1RPRF9NQVhfUkVUUklFUzsgaSsrKSB7XFxuK1xcdFxcdHJjID0gemwzMDczeF9jaGFuX3RvZF9yZWFkKHpsZGV2LCBjaCwgdHJ1ZSwgXFx1MDAyNnRzX25leHQsIE5VTEwpO1xcbitcXHRcXHRpZiAocmMpXFxuK1xcdFxcdFxcdHJldHVybiByYztcXG4rXFxuK1xcdFxcdHJjID0gemwzMDczeF9jaGFuX3RvZF9yZWFkKHpsZGV2LCBjaCwgZmFsc2UsIFxcdTAwMjZ0c19jdXIsIE5VTEwpO1xcbitcXHRcXHRpZiAocmMpXFxuK1xcdFxcdFxcdHJldHVybiByYztcXG4rXFxuK1xcdFxcdC8qIEVuc3VyZSB0aGUgMSBIeiB0aWNrIGRpZCBub3QgY3Jvc3MgYmV0d2VlbiB0aGUgdHdvIHJlYWRzXFxuK1xcdFxcdCAqIGFuZCB0aGF0IGVub3VnaCBtYXJnaW4gcmVtYWlucyB0byBjb21wbGV0ZSB0aGUgd3JpdGUuXFxuK1xcdFxcdCAqL1xcbitcXHRcXHRkaWZmID0gdGltZXNwZWM2NF9zdWIodHNfbmV4dCwgdHNfY3VyKTtcXG4rXFx0XFx0aWYgKGRpZmYudHZfc2VjIFxcdTAwM2UgMCB8fFxcbitcXHRcXHQgICAgKCFkaWZmLnR2X3NlYyBcXHUwMDI2XFx1MDAyNiBkaWZmLnR2X25zZWMgXFx1MDAzZT0gdGhyZXNob2xkX25zKSlcXG4rXFx0XFx0XFx0YnJlYWs7XFxuK1xcdH1cXG4rXFx0aWYgKGkgPT0gWkxfVE9EX01BWF9SRVRSSUVTKSB7XFxuK1xcdFxcdGRldl93YXJuKHpsZGV2LVxcdTAwM2VkZXYsXFxuK1xcdFxcdFxcdCBcXFwiRFBMTCV1IFRvRCBhZGp1c3QgZmFpbGVkIHRvIGdldCBzdGFibGUgbWFyZ2luXFxcXG5cXFwiLFxcbitcXHRcXHRcXHQgY2gpO1xcbitcXHRcXHRyZXR1cm4gLUVCVVNZO1xcbitcXHR9XFxuK1xcbitcXHQvKiBBcHBseSBkZWx0YSB0byB0aGUgbmV4dC1IeiBUb0QgKi9cXG4rXFx0dHNfbmV4dCA9IHRpbWVzcGVjNjRfYWRkKHRzX25leHQsIGRlbHRhKTtcXG4rXFx0aWYgKCF0aW1lc3BlYzY0X3ZhbGlkKFxcdTAwMjZ0c19uZXh0KSlcXG4rXFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuK1xcbitcXHRyZXR1cm4gemwzMDczeF9jaGFuX3RvZF93cml0ZSh6bGRldiwgY2gsIHRzX25leHQpO1xcbisjdW5kZWYgWkxfVE9EX01BWF9SRVRSSUVTXFxuK31cXG4rXFxuKy8qKlxcbisgKiB6bDMwNzN4X2NoYW5fZGZfb2Zmc2V0X3NldCAtIHdyaXRlIGRlbHRhIGZyZXF1ZW5jeSBvZmZzZXQgdG8gaGFyZHdhcmVcXG4rICogQHpsZGV2OiBwb2ludGVyIHRvIHpsMzA3M3ggZGV2aWNlXFxuKyAqIEBjaDogRFBMTCBjaGFubmVsIGluZGV4XFxuKyAqIEBvZmZzZXQ6IGZyZXF1ZW5jeSBvZmZzZXQgaW4gMl4tNDggc3RlcHNcXG4rICpcXG4rICogQ29udGV4dDogQ2FsbGVyIG11c3QgaG9sZCB0aGUgcGVyLURQTEwgbG9jay5cXG4rICogUmV0dXJuOiAwIG9uIHN1Y2Nlc3MsIFxcdTAwM2MwIG9uIGVycm9yXFxuKyAqL1xcbitpbnQgemwzMDczeF9jaGFuX2RmX29mZnNldF9zZXQoc3RydWN0IHpsMzA3M3hfZGV2ICp6bGRldiwgdTggY2gsIHM2NCBvZmZzZXQpXFxuK3tcXG4rXFx0aW50IHJjO1xcbitcXG4rXFx0cmMgPSB6bDMwNzN4X3dyaXRlX3U0OCh6bGRldiwgWkxfUkVHX0RQTExfREZfT0ZGU0VUKGNoKSwgb2Zmc2V0KTtcXG4rXFx0aWYgKCFyYylcXG4rXFx0XFx0emxkZXYtXFx1MDAzZWNoYW5bY2hdLmRmX29mZnNldCA9IG9mZnNldDtcXG4rXFxuK1xcdHJldHVybiByYztcXG4rfVxcbitcXG4rLyoqXFxuKyAqIHpsMzA3M3hfY2hhbl90aWVfd3JpdGUgLSBhZGp1c3QgRFBMTCBwaGFzZSB1c2luZyBUSUUgd3JpdGVcXG4rICogQHpsZGV2OiBwb2ludGVyIHRvIHpsMzA3M3ggZGV2aWNlXFxuKyAqIEBjaDogRFBMTCBjaGFubmVsIGluZGV4XFxuKyAqIEBkZWx0YV9uczogcGhhc2UgYWRqdXN0bWVudCBpbiBuYW5vc2Vjb25kcyAobXVzdCBiZSBpbiAoLTFzLCAxcykpXFxuKyAqXFxuKyAqIENvbnZlcnRzIG5hbm9zZWNvbmRzIHRvIFRJRSB1bml0cyAoMC4wMSBwcykgYW5kIHdyaXRlcyBUSUUgZGF0YVxcbisgKiB0byB0aGUgc3BlY2lmaWVkIGNoYW5uZWwuXFxuKyAqXFxuKyAqIFJldHVybjogMCBvbiBzdWNjZXNzLCBcXHUwMDNjMCBvbiBlcnJvclxcbisgKi9cXG4raW50IHpsMzA3M3hfY2hhbl90aWVfd3JpdGUoc3RydWN0IHpsMzA3M3hfZGV2ICp6bGRldiwgdTggY2gsIHM2NCBkZWx0YV9ucylcXG4re1xcbitcXHRzNjQgdGllX2RhdGE7XFxuK1xcdGludCByYztcXG4rXFxuK1xcdGlmIChXQVJOX09OKGRlbHRhX25zIFxcdTAwM2M9IC1OU0VDX1BFUl9TRUMgfHwgZGVsdGFfbnMgXFx1MDAzZT0gTlNFQ19QRVJfU0VDKSlcXG4rXFx0XFx0cmV0dXJuIC1FUkFOR0U7XFxuK1xcbitcXHRndWFyZChtdXRleCkoXFx1MDAyNnpsZGV2LVxcdTAwM2V0aWVfbG9jayk7XFxuK1xcbitcXHQvKiBXYWl0IGZvciBhbnkgcHJldmlvdXMgVElFIG9wZXJhdGlvbiB0byBjb21wbGV0ZSAqL1xcbitcXHRyYyA9IHpsMzA3M3hfcG9sbF96ZXJvX3U4KHpsZGV2LCBaTF9SRUdfRFBMTF9USUVfQ1RSTCxcXG4rXFx0XFx0XFx0XFx0ICBaTF9EUExMX1RJRV9DVFJMX09QLFxcbitcXHRcXHRcXHRcXHQgIFpMX1BPTExfVElFX1dSX1RJTUVPVVRfVVMpO1xcbitcXHRpZiAocmMpXFxuK1xcdFxcdHJldHVybiByYztcXG4rXFxuK1xcdC8qIENvbnZlcnQgbnMgdG8gVElFIHVuaXRzICgwLjAxIHBzID0gMTBeLTE0IHMpICovXFxuK1xcdHRpZV9kYXRhID0gZGVsdGFfbnMgKiAxMDAwMDBMTDtcXG4rXFxuK1xcdHJjID0gemwzMDczeF93cml0ZV91NDgoemxkZXYsIFpMX1JFR19EUExMX1RJRV9EQVRBKGNoKSwgdGllX2RhdGEpO1xcbitcXHRpZiAocmMpXFxuK1xcdFxcdHJldHVybiByYztcXG4rXFxuK1xcdHJjID0gemwzMDczeF93cml0ZV91OCh6bGRldiwgWkxfUkVHX0RQTExfVElFX0NUUkxfTUFTSywgQklUKGNoKSk7XFxuK1xcdGlmIChyYylcXG4rXFx0XFx0cmV0dXJuIHJjO1xcbitcXG4rXFx0cmV0dXJuIHpsMzA3M3hfd3JpdGVfdTgoemxkZXYsIFpMX1JFR19EUExMX1RJRV9DVFJMLFxcbitcXHRcXHRcXHRcXHRaTF9EUExMX1RJRV9DVFJMX09QX1dSKTtcXG4rfVxcbitcXG4rLyoqXFxuKyAqIHpsMzA3M3hfY2hhbl9waGFzZV9zdGVwIC0gZXhlY3V0ZSBvbmUgb3V0cHV0IHBoYXNlIHN0ZXAgb3BlcmF0aW9uXFxuKyAqIEB6bGRldjogcG9pbnRlciB0byB6bDMwNzN4IGRldmljZVxcbisgKiBAY2g6IERQTEwgY2hhbm5lbCBpbmRleFxcbisgKiBAb3V0X21hc2s6IGJpdG1hc2sgb2Ygb3V0cHV0cyB0byBzdGVwXFxuKyAqIEBzdGVwX2N5Y2xlczogcGhhc2Ugc3RlcCBpbiBzeW50aGVzaXplciBjbG9jayBjeWNsZXNcXG4rICogQHRvZF9zdGVwOiBhbHNvIHN0ZXAgdGhlIFRvRCBjb3VudGVyXFxuKyAqXFxuKyAqIEFsbCBtYXNrZWQgb3V0cHV0cyBtdXN0IHVzZSBzeW50aGVzaXplcnMgb2YgdGhlIHNhbWUgZnJlcXVlbmN5IHNpbmNlXFxuKyAqIHRoZSBzdGVwIHZhbHVlIGlzIGluIHN5bnRoZXNpemVyIGNsb2NrIGN5Y2xlcy5cXG4rICpcXG4rICogUmV0dXJuOiAwIG9uIHN1Y2Nlc3MsIFxcdTAwM2MwIG9uIGVycm9yXFxuKyAqL1xcbitpbnQgemwzMDczeF9jaGFuX3BoYXNlX3N0ZXAoc3RydWN0IHpsMzA3M3hfZGV2ICp6bGRldiwgdTggY2gsXFxuK1xcdFxcdFxcdCAgICB1MTYgb3V0X21hc2ssIHMzMiBzdGVwX2N5Y2xlcyxcXG4rXFx0XFx0XFx0ICAgIGJvb2wgdG9kX3N0ZXApXFxuK3tcXG4rXFx0dTggY3RybDtcXG4rXFx0aW50IHJjO1xcbitcXG4rXFx0Z3VhcmQobXV0ZXgpKFxcdTAwMjZ6bGRldi1cXHUwMDNlcGhhc2Vfc3RlcF9sb2NrKTtcXG4rXFxuK1xcdC8qIFdhaXQgZm9yIGFueSBwcmV2aW91cyBwaGFzZSBzdGVwIG9wZXJhdGlvbiB0byBjb21wbGV0ZSAqL1xcbitcXHRyYyA9IHpsMzA3M3hfcG9sbF96ZXJvX3U4KHpsZGV2LCBaTF9SRUdfT1VUUFVUX1BIQVNFX1NURVBfQ1RSTCxcXG4rXFx0XFx0XFx0XFx0ICBaTF9PVVRQVVRfUEhBU0VfU1RFUF9DVFJMX09QLFxcbitcXHRcXHRcXHRcXHQgIFpMX1BPTExfUEhBU0VfU1RFUF9USU1FT1VUX1VTKTtcXG4rXFx0aWYgKHJjKVxcbitcXHRcXHRyZXR1cm4gcmM7XFxuK1xcbitcXHRyYyA9IHpsMzA3M3hfd3JpdGVfdTMyKHpsZGV2LCBaTF9SRUdfT1VUUFVUX1BIQVNFX1NURVBfREFUQSxcXG4rXFx0XFx0XFx0ICAgICAgIHN0ZXBfY3ljbGVzKTtcXG4rXFx0aWYgKHJjKVxcbitcXHRcXHRyZXR1cm4gcmM7XFxuK1xcbitcXHRyYyA9IHpsMzA3M3hfd3JpdGVfdTE2KHpsZGV2LCBaTF9SRUdfT1VUUFVUX1BIQVNFX1NURVBfTUFTSywgb3V0X21hc2spO1xcbitcXHRpZiAocmMpXFxuK1xcdFxcdHJldHVybiByYztcXG4rXFxuK1xcdHJjID0gemwzMDczeF93cml0ZV91OCh6bGRldiwgWkxfUkVHX09VVFBVVF9QSEFTRV9TVEVQX05VTUJFUiwgMSk7XFxuK1xcdGlmIChyYylcXG4rXFx0XFx0cmV0dXJuIHJjO1xcbitcXG4rXFx0Y3RybCA9IEZJRUxEX1BSRVAoWkxfT1VUUFVUX1BIQVNFX1NURVBfQ1RSTF9EUExMLCBjaCkgfFxcbitcXHQgICAgICAgRklFTERfUFJFUChaTF9PVVRQVVRfUEhBU0VfU1RFUF9DVFJMX09QLFxcbitcXHRcXHRcXHQgIFpMX09VVFBVVF9QSEFTRV9TVEVQX0NUUkxfT1BfV1JJVEUpO1xcbitcXHRpZiAodG9kX3N0ZXApXFxuK1xcdFxcdGN0cmwgfD0gWkxfT1VUUFVUX1BIQVNFX1NURVBfQ1RSTF9UT0RfU1RFUDtcXG4rXFxuK1xcdHJldHVybiB6bDMwNzN4X3dyaXRlX3U4KHpsZGV2LCBaTF9SRUdfT1VUUFVUX1BIQVNFX1NURVBfQ1RSTCwgY3RybCk7XFxuK31cXG4rXFxuIC8qKlxcbiAgKiB6bDMwNzN4X2NoYW5fc3RhdGVfc2V0IC0gY29tbWl0IERQTEwgY2hhbm5lbCBzdGF0ZSBjaGFuZ2VzIHRvIGhhcmR3YXJlXFxuICAqIEB6bGRldjogcG9pbnRlciB0byB6bDMwNzN4X2RldiBzdHJ1Y3R1cmVcXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5oIGIvZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5oXFxuaW5kZXggZGM5YzZkOTViZGVlNy4uOTljM2I3MDg4ZjY3OCAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmhcXG4rKysgYi9kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmhcXG5AQCAtNSwxMCArNSwxMiBAQFxcbiBcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2JpdGZpZWxkLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9zdGRkZWYuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3RpbWU2NC5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvdHlwZXMuaFxcdTAwM2VcXG4gXFxuICNpbmNsdWRlIFxcXCJyZWdzLmhcXFwiXFxuIFxcbitzdHJ1Y3QgcHRwX3N5c3RlbV90aW1lc3RhbXA7XFxuIHN0cnVjdCB6bDMwNzN4X2RldjtcXG4gXFxuIC8qKlxcbkBAIC00Miw2ICs0NCwyMSBAQCBpbnQgemwzMDczeF9jaGFuX3N0YXRlX3NldChzdHJ1Y3QgemwzMDczeF9kZXYgKnpsZGV2LCB1OCBpbmRleCxcXG4gaW50IHpsMzA3M3hfY2hhbl9zdGF0ZV91cGRhdGUoc3RydWN0IHpsMzA3M3hfZGV2ICp6bGRldiwgdTggaW5kZXgpO1xcbiBpbnQgemwzMDczeF9jaGFuX25jb19tb2RlX3NldChzdHJ1Y3QgemwzMDczeF9kZXYgKnpsZGV2LCB1OCBpbmRleCk7XFxuIFxcbitpbnQgemwzMDczeF9jaGFuX3RvZF9yZWFkeV93YWl0KHN0cnVjdCB6bDMwNzN4X2RldiAqemxkZXYsIHU4IGNoKTtcXG4raW50IHpsMzA3M3hfY2hhbl90b2RfcmVhZChzdHJ1Y3QgemwzMDczeF9kZXYgKnpsZGV2LCB1OCBjaCxcXG4rXFx0XFx0XFx0ICBib29sIG5leHRfaHosIHN0cnVjdCB0aW1lc3BlYzY0ICp0cyxcXG4rXFx0XFx0XFx0ICBzdHJ1Y3QgcHRwX3N5c3RlbV90aW1lc3RhbXAgKnN0cyk7XFxuK2ludCB6bDMwNzN4X2NoYW5fdG9kX3dyaXRlKHN0cnVjdCB6bDMwNzN4X2RldiAqemxkZXYsIHU4IGNoLFxcbitcXHRcXHRcXHQgICBzdHJ1Y3QgdGltZXNwZWM2NCB0cyk7XFxuK2ludCB6bDMwNzN4X2NoYW5fdG9kX2FkanVzdChzdHJ1Y3QgemwzMDczeF9kZXYgKnpsZGV2LCB1OCBjaCxcXG4rXFx0XFx0XFx0ICAgIHN0cnVjdCB0aW1lc3BlYzY0IGRlbHRhKTtcXG4raW50IHpsMzA3M3hfY2hhbl9waGFzZV9zdGVwKHN0cnVjdCB6bDMwNzN4X2RldiAqemxkZXYsIHU4IGNoLFxcbitcXHRcXHRcXHQgICAgdTE2IG91dF9tYXNrLCBzMzIgc3RlcF9jeWNsZXMsIGJvb2wgdG9kX3N0ZXApO1xcbitcXG4raW50IHpsMzA3M3hfY2hhbl9kZl9vZmZzZXRfc2V0KHN0cnVjdCB6bDMwNzN4X2RldiAqemxkZXYsIHU4IGNoLCBzNjQgb2Zmc2V0KTtcXG4rXFxuK2ludCB6bDMwNzN4X2NoYW5fdGllX3dyaXRlKHN0cnVjdCB6bDMwNzN4X2RldiAqemxkZXYsIHU4IGNoLCBzNjQgZGVsdGFfbnMpO1xcbitcXG4gLyoqXFxuICAqIHpsMzA3M3hfY2hhbl9kZl9vZmZzZXRfZ2V0IC0gZ2V0IGNhY2hlZCBkZl9vZmZzZXQgdnMgdHJhY2tlZCByZWZlcmVuY2VcXG4gICogQGNoYW46IHBvaW50ZXIgdG8gY2hhbm5lbCBzdGF0ZVxcbkBAIC0yMDAsNiArMjE3LDIxIEBAIHN0YXRpYyBpbmxpbmUgYm9vbCB6bDMwNzN4X2NoYW5fbW9kZV9pc19yZWZsb2NrKGNvbnN0IHN0cnVjdCB6bDMwNzN4X2NoYW4gKmNoYW4pXFxuIFxcdHJldHVybiB6bDMwNzN4X2NoYW5fbW9kZV9nZXQoY2hhbikgPT0gWkxfRFBMTF9NT0RFX1JFRlNFTF9NT0RFX1JFRkxPQ0s7XFxuIH1cXG4gXFxuKy8qKlxcbisgKiB6bDMwNzN4X2NoYW5fbW9kZV9zdXBwb3J0c190aWUgLSBjaGVjayBpZiBjaGFubmVsIG1vZGUgc3VwcG9ydHMgVElFIHdyaXRlXFxuKyAqIEBjaGFuOiBwb2ludGVyIHRvIGNoYW5uZWwgc3RhdGVcXG4rICpcXG4rICogVElFIHdyaXRlIGlzIHN1cHBvcnRlZCBpbiBBVVRPIGFuZCBSRUZMT0NLIG1vZGVzIHJlZ2FyZGxlc3Mgb2YgbG9jayBzdGF0ZS5cXG4rICpcXG4rICogUmV0dXJuOiB0cnVlIGlmIFRJRSB3cml0ZSBpcyBzdXBwb3J0ZWQsIGZhbHNlIG90aGVyd2lzZVxcbisgKi9cXG4rc3RhdGljIGlubGluZSBib29sXFxuK3psMzA3M3hfY2hhbl9tb2RlX3N1cHBvcnRzX3RpZShjb25zdCBzdHJ1Y3QgemwzMDczeF9jaGFuICpjaGFuKVxcbit7XFxuK1xcdHJldHVybiB6bDMwNzN4X2NoYW5fbW9kZV9pc19hdXRvKGNoYW4pIHx8XFxuK1xcdFxcdHpsMzA3M3hfY2hhbl9tb2RlX2lzX3JlZmxvY2soY2hhbik7XFxuK31cXG4rXFxuIC8qKlxcbiAgKiB6bDMwNzN4X2NoYW5faXNfaG9fcmVhZHkgLSBjaGVjayBpZiBob2xkb3ZlciBpcyByZWFkeVxcbiAgKiBAY2hhbjogcG9pbnRlciB0byBjaGFubmVsIHN0YXRlXFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvZHBsbC96bDMwNzN4L2NvcmUuYyBiL2RyaXZlcnMvZHBsbC96bDMwNzN4L2NvcmUuY1xcbmluZGV4IDViMmQ3N2YyYzIyODguLjIzMGRmMDhlMjdjZDEgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9kcGxsL3psMzA3M3gvY29yZS5jXFxuKysrIGIvZHJpdmVycy9kcGxsL3psMzA3M3gvY29yZS5jXFxuQEAgLTMyMiw3ICszMjIsNyBAQCBpbnQgemwzMDczeF93cml0ZV91NDgoc3RydWN0IHpsMzA3M3hfZGV2ICp6bGRldiwgdW5zaWduZWQgaW50IHJlZywgdTY0IHZhbClcXG4gaW50IHpsMzA3M3hfcG9sbF96ZXJvX3U4KHN0cnVjdCB6bDMwNzN4X2RldiAqemxkZXYsIHVuc2lnbmVkIGludCByZWcsXFxuIFxcdFxcdFxcdCB1OCBtYXNrLCB1bnNpZ25lZCBpbnQgdGltZW91dF91cylcXG4ge1xcbi0jZGVmaW5lIFpMX1BPTExfU0xFRVBfVVMgMTBcXG4rXFx0dW5zaWduZWQgaW50IHNsZWVwX3VzID0gdGltZW91dF91cyAvIDUwO1xcbiBcXHR1bnNpZ25lZCBpbnQgdmFsO1xcbiBcXG4gXFx0LyogQ2hlY2sgdGhlIHJlZ2lzdGVyIGlzIDhiaXQgKi9cXG5AQCAtMzM2LDcgKzMzNiw3IEBAIGludCB6bDMwNzN4X3BvbGxfemVyb191OChzdHJ1Y3QgemwzMDczeF9kZXYgKnpsZGV2LCB1bnNpZ25lZCBpbnQgcmVnLFxcbiBcXHRyZWcgPSBaTF9SRUdfQUREUihyZWcpICsgWkxfUkFOR0VfT0ZGU0VUO1xcbiBcXG4gXFx0cmV0dXJuIHJlZ21hcF9yZWFkX3BvbGxfdGltZW91dCh6bGRldi1cXHUwMDNlcmVnbWFwLCByZWcsIHZhbCwgISh2YWwgXFx1MDAyNiBtYXNrKSxcXG4tXFx0XFx0XFx0XFx0XFx0WkxfUE9MTF9TTEVFUF9VUywgdGltZW91dF91cyk7XFxuK1xcdFxcdFxcdFxcdFxcdHNsZWVwX3VzLCB0aW1lb3V0X3VzKTtcXG4gfVxcbiBcXG4gaW50IHpsMzA3M3hfbWJfb3Aoc3RydWN0IHpsMzA3M3hfZGV2ICp6bGRldiwgdW5zaWduZWQgaW50IG9wX3JlZywgdTggb3BfdmFsLFxcbkBAIC01MTEsNiArNTExLDExIEBAIHpsMzA3M3hfZGV2X3N0YXRlX2ZldGNoKHN0cnVjdCB6bDMwNzN4X2RldiAqemxkZXYpXFxuIFxcdGludCByYztcXG4gXFx0dTggaTtcXG4gXFxuK1xcdHJjID0gemwzMDczeF9yZWFkX3UxNih6bGRldiwgWkxfUkVHX09VVFBVVF9TVEVQX1RJTUVfTUFTSyxcXG4rXFx0XFx0XFx0ICAgICAgXFx1MDAyNnpsZGV2LVxcdTAwM2VvdXRfc3RlcF90aW1lX21hc2spO1xcbitcXHRpZiAocmMpXFxuK1xcdFxcdHJldHVybiByYztcXG4rXFxuIFxcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBaTDMwNzNYX05VTV9SRUZTOyBpKyspIHtcXG4gXFx0XFx0cmMgPSB6bDMwNzN4X3JlZl9zdGF0ZV9mZXRjaCh6bGRldiwgaSk7XFxuIFxcdFxcdGlmIChyYykge1xcbkBAIC0xMDM0LDYgKzEwMzksMTQgQEAgaW50IHpsMzA3M3hfZGV2X3Byb2JlKHN0cnVjdCB6bDMwNzN4X2RldiAqemxkZXYpXFxuIFxcdCAqIGFuZC9vciBwb2xscyBhcmUgcmVxdWlyZWQgdG8gYmUgZG9uZSBhdG9taWNhbGx5LlxcbiBcXHQgKi9cXG4gXFx0cmMgPSBkZXZtX211dGV4X2luaXQoemxkZXYtXFx1MDAzZWRldiwgXFx1MDAyNnpsZGV2LVxcdTAwM2VtdWx0aW9wX2xvY2spO1xcbitcXHRpZiAocmMpXFxuK1xcdFxcdHJldHVybiBkZXZfZXJyX3Byb2JlKHpsZGV2LVxcdTAwM2VkZXYsIHJjLFxcbitcXHRcXHRcXHRcXHQgICAgIFxcXCJGYWlsZWQgdG8gaW5pdGlhbGl6ZSBtdXRleFxcXFxuXFxcIik7XFxuK1xcdHJjID0gZGV2bV9tdXRleF9pbml0KHpsZGV2LVxcdTAwM2VkZXYsIFxcdTAwMjZ6bGRldi1cXHUwMDNlcGhhc2Vfc3RlcF9sb2NrKTtcXG4rXFx0aWYgKHJjKVxcbitcXHRcXHRyZXR1cm4gZGV2X2Vycl9wcm9iZSh6bGRldi1cXHUwMDNlZGV2LCByYyxcXG4rXFx0XFx0XFx0XFx0ICAgICBcXFwiRmFpbGVkIHRvIGluaXRpYWxpemUgbXV0ZXhcXFxcblxcXCIpO1xcbitcXHRyYyA9IGRldm1fbXV0ZXhfaW5pdCh6bGRldi1cXHUwMDNlZGV2LCBcXHUwMDI2emxkZXYtXFx1MDAzZXRpZV9sb2NrKTtcXG4gXFx0aWYgKHJjKVxcbiBcXHRcXHRyZXR1cm4gZGV2X2Vycl9wcm9iZSh6bGRldi1cXHUwMDNlZGV2LCByYyxcXG4gXFx0XFx0XFx0XFx0ICAgICBcXFwiRmFpbGVkIHRvIGluaXRpYWxpemUgbXV0ZXhcXFxcblxcXCIpO1xcbmRpZmYgLS1naXQgYS9kcml2ZXJzL2RwbGwvemwzMDczeC9jb3JlLmggYi9kcml2ZXJzL2RwbGwvemwzMDczeC9jb3JlLmhcXG5pbmRleCA3OGRjMjA4ZjNlZWEyLi42N2MxMGUyNTk1MTE4IDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvZHBsbC96bDMwNzN4L2NvcmUuaFxcbisrKyBiL2RyaXZlcnMvZHBsbC96bDMwNzN4L2NvcmUuaFxcbkBAIC0yNiw2ICsyNiwxMCBAQCBzdHJ1Y3QgemwzMDczeF9kcGxsO1xcbiAjZGVmaW5lIFpMX1BPTExfSFdSRUdfVElNRU9VVF9VU1xcdCg1MCAqIFVTRUNfUEVSX01TRUMpXFxuICNkZWZpbmUgWkxfUE9MTF9NQl9USU1FT1VUX1VTXFx0XFx0KDMwICogVVNFQ19QRVJfTVNFQylcXG4gI2RlZmluZSBaTF9QT0xMX1BIQVNFX0VSUl9USU1FT1VUX1VTXFx0KDUwICogVVNFQ19QRVJfTVNFQylcXG4rI2RlZmluZSBaTF9QT0xMX1BIQVNFX1NURVBfVElNRU9VVF9VU1xcdCgzMDAwICogVVNFQ19QRVJfTVNFQylcXG4rI2RlZmluZSBaTF9QT0xMX1RJRV9XUl9USU1FT1VUX1VTXFx0KDEwMDAgKiBVU0VDX1BFUl9NU0VDKVxcbisjZGVmaW5lIFpMX1BPTExfVE9EX1JEX1RJTUVPVVRfVVNcXHQoMzAgKiBVU0VDX1BFUl9NU0VDKVxcbisjZGVmaW5lIFpMX1BPTExfVE9EX1dSX1RJTUVPVVRfVVNcXHQoMTAwMCAqIFVTRUNfUEVSX01TRUMpXFxuIFxcbiBlbnVtIHpsMzA3M3hfZmxhZ3Mge1xcbiBcXHRaTDMwNzNYX0ZMQUdfUkVGX1BIQVNFX0NPTVBfMzJfQklULFxcbkBAIC01NSw2ICs1OSw4IEBAIHN0cnVjdCB6bDMwNzN4X2NoaXBfaW5mbyB7XFxuICAqIEByZWdtYXA6IHJlZ21hcCB0byBhY2Nlc3MgZGV2aWNlIHJlZ2lzdGVyc1xcbiAgKiBAaW5mbzogZGV0ZWN0ZWQgY2hpcCBpbmZvXFxuICAqIEBtdWx0aW9wX2xvY2s6IHRvIHNlcmlhbGl6ZSBtdWx0aXBsZSByZWdpc3RlciBvcGVyYXRpb25zXFxuKyAqIEB0aWVfbG9jazogdG8gc2VyaWFsaXplIFRJRSB3cml0ZSBvcGVyYXRpb25zXFxuKyAqIEBwaGFzZV9zdGVwX2xvY2s6IHRvIHNlcmlhbGl6ZSBvdXRwdXQgcGhhc2Ugc3RlcCBvcGVyYXRpb25zXFxuICAqIEByZWY6IGFycmF5IG9mIGlucHV0IHJlZmVyZW5jZXMnIGludmFyaWFudHNcXG4gICogQG91dDogYXJyYXkgb2Ygb3V0cycgaW52YXJpYW50c1xcbiAgKiBAc3ludGg6IGFycmF5IG9mIHN5bnRocycgaW52YXJpYW50c1xcbkBAIC02Myw2ICs2OSw3IEBAIHN0cnVjdCB6bDMwNzN4X2NoaXBfaW5mbyB7XFxuICAqIEBrd29ya2VyOiB0aHJlYWQgZm9yIHBlcmlvZGljIHdvcmtcXG4gICogQHdvcms6IHBlcmlvZGljIHdvcmtcXG4gICogQGNsb2NrX2lkOiBjbG9jayBpZCBvZiB0aGUgZGV2aWNlXFxuKyAqIEBvdXRfc3RlcF90aW1lX21hc2s6IG91dHB1dCBzdGVwLXRpbWUgbWFzayAoZGV2aWNlLWdsb2JhbClcXG4gICogQHBoYXNlX2F2Z19mYWN0b3I6IHBoYXNlIG9mZnNldCBtZWFzdXJlbWVudCBhdmVyYWdpbmcgZmFjdG9yXFxuICAqIEBmcmVxX21vbml0b3I6IGlzIGZyZXF1ZW5jeSBtb25pdG9yIGVuYWJsZWRcXG4gICovXFxuQEAgLTcxLDYgKzc4LDggQEAgc3RydWN0IHpsMzA3M3hfZGV2IHtcXG4gXFx0c3RydWN0IHJlZ21hcFxcdFxcdFxcdCpyZWdtYXA7XFxuIFxcdGNvbnN0IHN0cnVjdCB6bDMwNzN4X2NoaXBfaW5mb1xcdCppbmZvO1xcbiBcXHRzdHJ1Y3QgbXV0ZXhcXHRcXHRcXHRtdWx0aW9wX2xvY2s7XFxuK1xcdHN0cnVjdCBtdXRleFxcdFxcdFxcdHRpZV9sb2NrO1xcbitcXHRzdHJ1Y3QgbXV0ZXhcXHRcXHRcXHRwaGFzZV9zdGVwX2xvY2s7XFxuIFxcbiBcXHQvKiBJbnZhcmlhbnRzICovXFxuIFxcdHN0cnVjdCB6bDMwNzN4X3JlZlxcdHJlZltaTDMwNzNYX05VTV9SRUZTXTtcXG5AQCAtODcsNiArOTYsNyBAQCBzdHJ1Y3QgemwzMDczeF9kZXYge1xcbiBcXG4gXFx0LyogUGVyLWNoaXAgcGFyYW1ldGVycyAqL1xcbiBcXHR1NjRcXHRcXHRcXHRjbG9ja19pZDtcXG4rXFx0dTE2XFx0XFx0XFx0b3V0X3N0ZXBfdGltZV9tYXNrO1xcbiBcXHR1OFxcdFxcdFxcdHBoYXNlX2F2Z19mYWN0b3I7XFxuIFxcdGJvb2xcXHRcXHRcXHRmcmVxX21vbml0b3I7XFxuIH07XFxuQEAgLTMwOCw2ICszMTgsMTkgQEAgemwzMDczeF9kZXZfb3V0X2lzX2VuYWJsZWQoc3RydWN0IHpsMzA3M3hfZGV2ICp6bGRldiwgdTggaW5kZXgpXFxuIFxcdHJldHVybiB6bDMwNzN4X3N5bnRoX2lzX2VuYWJsZWQoc3ludGgpIFxcdTAwMjZcXHUwMDI2IHpsMzA3M3hfb3V0X2lzX2VuYWJsZWQob3V0KTtcXG4gfVxcbiBcXG4rLyoqXFxuKyAqIHpsMzA3M3hfZGV2X291dF9pc19zdGVwcGVkIC0gY2hlY2sgaWYgb3V0cHV0IGlzIGluIHN0ZXAtdGltZSBtYXNrXFxuKyAqIEB6bGRldjogcG9pbnRlciB0byB6bDMwNzN4IGRldmljZVxcbisgKiBAaW5kZXg6IG91dHB1dCBpbmRleFxcbisgKlxcbisgKiBSZXR1cm46IHRydWUgaWYgb3V0cHV0IGlzIGFmZmVjdGVkIGJ5IHN0ZXAtdGltZSBvcGVyYXRpb25zXFxuKyAqL1xcbitzdGF0aWMgaW5saW5lIGJvb2xcXG4remwzMDczeF9kZXZfb3V0X2lzX3N0ZXBwZWQoc3RydWN0IHpsMzA3M3hfZGV2ICp6bGRldiwgdTggaW5kZXgpXFxuK3tcXG4rXFx0cmV0dXJuICEhKHpsZGV2LVxcdTAwM2VvdXRfc3RlcF90aW1lX21hc2sgXFx1MDAyNiBCSVQoaW5kZXgpKTtcXG4rfVxcbitcXG4gLyoqXFxuICAqIHpsMzA3M3hfZGV2X291dF9kcGxsX2dldCAtIGdldCBEUExMIElEIHRoZSBvdXRwdXQgaXMgZHJpdmVuIGJ5XFxuICAqIEB6bGRldjogcG9pbnRlciB0byB6bDMwNzN4IGRldmljZVxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL2RwbGwvemwzMDczeC9kcGxsLmMgYi9kcml2ZXJzL2RwbGwvemwzMDczeC9kcGxsLmNcXG5pbmRleCAwNDg4YWU2YWM0ODZjLi44MzAxYWQzNDM2NThhIDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvZHBsbC96bDMwNzN4L2RwbGwuY1xcbisrKyBiL2RyaXZlcnMvZHBsbC96bDMwNzN4L2RwbGwuY1xcbkBAIC0yLDYgKzIsNyBAQFxcbiBcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2JpdHMuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2JpdGZpZWxkLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC9jbGVhbnVwLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9idWcuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2NvbnRhaW5lcl9vZi5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvZGV2X3ByaW50ay5oXFx1MDAzZVxcbkBAIC0xMyw2ICsxNCw3IEBAXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9uZXRsaW5rLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3Byb3BlcnR5LmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC9wdHBfY2xvY2tfa2VybmVsLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9zbGFiLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9zcHJpbnRmLmhcXHUwMDNlXFxuIFxcbkBAIC0yMjc1LDQ1ICsyMjc3LDM4NCBAQCB6bDMwNzN4X2RwbGxfaW5pdF9maW5lX3BoYXNlX2FkanVzdChzdHJ1Y3QgemwzMDczeF9kZXYgKnpsZGV2KVxcbiBcXHRyZXR1cm4gemwzMDczeF93cml0ZV91OCh6bGRldiwgWkxfUkVHX1NZTlRIX1BIQVNFX1NISUZUX0NUUkwsIDB4MDEpO1xcbiB9XFxuIFxcbisvKiBNYXhpbXVtIGZyZXF1ZW5jeSBhZGp1c3RtZW50OiArLTElIG9mIG5vbWluYWwgaW4gcHBiICovXFxuKyNkZWZpbmUgWkwzMDczWF9EUExMX1BUUF9NQVhfQURKXFx0MTAwMDAwMDBcXG4rXFxuIC8qKlxcbi0gKiB6bDMwNzN4X2RwbGxfYWxsb2MgLSBhbGxvY2F0ZSBEUExMIGRldmljZVxcbi0gKiBAemxkZXY6IHBvaW50ZXIgdG8gemwzMDczeCBkZXZpY2VcXG4tICogQGNoOiBEUExMIGNoYW5uZWwgbnVtYmVyXFxuKyAqIHpsMzA3M3hfZHBsbF9wdHBfZ2V0dGltZXg2NCAtIHJlYWQgY3VycmVudCB0aW1lIGZyb20gVG9EIGNvdW50ZXJzXFxuKyAqIEBpbmZvOiBQVFAgY2xvY2sgaW5mb1xcbisgKiBAdHM6IHRpbWVzcGVjIHRvIHN0b3JlIGN1cnJlbnQgdGltZVxcbisgKiBAc3RzOiBvcHRpb25hbCBzeXN0ZW0gdGltZXN0YW1wIHBhaXIgZm9yIGNyb3NzLXRpbWVzdGFtcGluZ1xcbiAgKlxcbi0gKiBBbGxvY2F0ZXMgRFBMTCBkZXZpY2Ugc3RydWN0dXJlIGZvciBnaXZlbiBEUExMIGNoYW5uZWwuXFxuKyAqIFJldHVybjogMCBvbiBzdWNjZXNzLCBcXHUwMDNjMCBvbiBlcnJvclxcbisgKi9cXG4rc3RhdGljIGludCB6bDMwNzN4X2RwbGxfcHRwX2dldHRpbWV4NjQoc3RydWN0IHB0cF9jbG9ja19pbmZvICppbmZvLFxcbitcXHRcXHRcXHRcXHQgICAgICAgc3RydWN0IHRpbWVzcGVjNjQgKnRzLFxcbitcXHRcXHRcXHRcXHQgICAgICAgc3RydWN0IHB0cF9zeXN0ZW1fdGltZXN0YW1wICpzdHMpXFxuK3tcXG4rXFx0c3RydWN0IHpsMzA3M3hfZHBsbCAqemxkcGxsID0gY29udGFpbmVyX29mKGluZm8sIHN0cnVjdCB6bDMwNzN4X2RwbGwsXFxuK1xcdFxcdFxcdFxcdFxcdFxcdCAgIHB0cF9pbmZvKTtcXG4rXFxuK1xcdGd1YXJkKG11dGV4KShcXHUwMDI2emxkcGxsLVxcdTAwM2Vsb2NrKTtcXG4rXFxuK1xcdHJldHVybiB6bDMwNzN4X2NoYW5fdG9kX3JlYWQoemxkcGxsLVxcdTAwM2VkZXYsIHpsZHBsbC1cXHUwMDNlaWQsIGZhbHNlLCB0cywgc3RzKTtcXG4rfVxcbitcXG4rLyoqXFxuKyAqIHpsMzA3M3hfZHBsbF9wdHBfc2V0dGltZTY0IC0gc2V0IFRvRCBjb3VudGVycyB0byBnaXZlbiB0aW1lXFxuKyAqIEBpbmZvOiBQVFAgY2xvY2sgaW5mb1xcbisgKiBAdHM6IHRpbWVzcGVjIHdpdGggdGltZSB0byBzZXRcXG4gICpcXG4tICogUmV0dXJuOiBwb2ludGVyIHRvIERQTEwgZGV2aWNlIG9uIHN1Y2Nlc3MsIGVycm9yIHBvaW50ZXIgb24gZXJyb3JcXG4rICogUmV0dXJuOiAwIG9uIHN1Y2Nlc3MsIFxcdTAwM2MwIG9uIGVycm9yXFxuICAqL1xcbi1zdHJ1Y3QgemwzMDczeF9kcGxsICpcXG4temwzMDczeF9kcGxsX2FsbG9jKHN0cnVjdCB6bDMwNzN4X2RldiAqemxkZXYsIHU4IGNoKVxcbitzdGF0aWMgaW50IHpsMzA3M3hfZHBsbF9wdHBfc2V0dGltZTY0KHN0cnVjdCBwdHBfY2xvY2tfaW5mbyAqaW5mbyxcXG4rXFx0XFx0XFx0XFx0ICAgICAgY29uc3Qgc3RydWN0IHRpbWVzcGVjNjQgKnRzKVxcbiB7XFxuLVxcdHN0cnVjdCB6bDMwNzN4X2RwbGwgKnpsZHBsbDtcXG4rXFx0c3RydWN0IHpsMzA3M3hfZHBsbCAqemxkcGxsID0gY29udGFpbmVyX29mKGluZm8sIHN0cnVjdCB6bDMwNzN4X2RwbGwsXFxuK1xcdFxcdFxcdFxcdFxcdFxcdCAgIHB0cF9pbmZvKTtcXG4gXFxuLVxcdHpsZHBsbCA9IGt6YWxsb2Nfb2JqKCp6bGRwbGwpO1xcbi1cXHRpZiAoIXpsZHBsbClcXG4tXFx0XFx0cmV0dXJuIEVSUl9QVFIoLUVOT01FTSk7XFxuK1xcdGd1YXJkKG11dGV4KShcXHUwMDI2emxkcGxsLVxcdTAwM2Vsb2NrKTtcXG4gXFxuLVxcdHpsZHBsbC1cXHUwMDNlZGV2ID0gemxkZXY7XFxuLVxcdHpsZHBsbC1cXHUwMDNlaWQgPSBjaDtcXG4tXFx0bXV0ZXhfaW5pdChcXHUwMDI2emxkcGxsLVxcdTAwM2Vsb2NrKTtcXG4tXFx0SU5JVF9MSVNUX0hFQUQoXFx1MDAyNnpsZHBsbC1cXHUwMDNlcGlucyk7XFxuK1xcdHJldHVybiB6bDMwNzN4X2NoYW5fdG9kX3dyaXRlKHpsZHBsbC1cXHUwMDNlZGV2LCB6bGRwbGwtXFx1MDAzZWlkLCAqdHMpO1xcbit9XFxuIFxcbi1cXHRyZXR1cm4gemxkcGxsO1xcbisvKipcXG4rICogemwzMDczeF9kcGxsX3B0cF9hZGp0aW1lX3BoYXNlX3N0ZXAgLSBhZGp1c3Qgc3ViLXNlY29uZCB0aW1lIHZpYSBwaGFzZSBzdGVwXFxuKyAqIEB6bGRwbGw6IERQTEwgY2hhbm5lbFxcbisgKiBAZGVsdGE6IHRpbWUgYWRqdXN0bWVudCBpbiBuYW5vc2Vjb25kcyAobXVzdCBiZSB3aXRoaW4gKC1OU0VDX1BFUl9TRUMsXFxuKyAqICAgICAgICAgTlNFQ19QRVJfU0VDKSlcXG4rICpcXG4rICogVXNlcyB0aGUgb3V0cHV0IHBoYXNlIHN0ZXAgbWVjaGFuaXNtIHdpdGggdG9kX3N0ZXA9MSB0byBhZGp1c3QgYm90aFxcbisgKiB0aGUgb3V0cHV0IGNsb2NrIHBoYXNlIGFuZCB0aGUgVG9EIGNvdW50ZXIgc2ltdWx0YW5lb3VzbHkuIFRoaXMga2VlcHNcXG4rICogb3V0cHV0cyBhbmQgVG9EIGNvaGVyZW50LiBPbmx5IHZhbGlkIGZvciBOQ08uXFxuKyAqXFxuKyAqIE91dHB1dHMgYXJlIGdyb3VwZWQgYnkgc3ludGhlc2l6ZXIgc2luY2UgdGhlIHBoYXNlIHN0ZXAgdmFsdWUgaXMgaW5cXG4rICogc3ludGhlc2l6ZXIgY2xvY2sgY3ljbGVzLiBUaGUgZmlyc3Qgc3ludGggZ3JvdXAgd2l0aCBlbmFibGVkIG91dHB1dHNcXG4rICogdXNlcyB0b2Rfc3RlcCB0byBhZGp1c3QgYm90aCBvdXRwdXRzIGFuZCB0aGUgVG9EIGNvdW50ZXIuIFJlbWFpbmluZ1xcbisgKiBncm91cHMgc3RlcCBvdXRwdXRzIG9ubHkuIElmIG5vIHN5bnRoIGhhcyBlbmFibGVkIG91dHB1dHMsIHRoZSBUb0RcXG4rICogY291bnRlciBpcyBzdGVwcGVkIGFsb25lIHVzaW5nIGFuIGVtcHR5IG91dHB1dCBtYXNrICh0aGUgRlcgdXNlc1xcbisgKiB0aGUgZmlyc3QgZW5hYmxlZCBzeW50aCdzIHBlcmlvZCBmb3IgdGhlIGNvbnZlcnNpb24pLlxcbisgKlxcbisgKiBSZXR1cm46XFxuKyAqICogJTBcXHRcXHRcXHQtIHN1Y2Nlc3MgKG9yIHBhcnRpYWwgc3VjY2VzcyBpZiBhIGxhdGVyIHN5bnRoIGdyb3VwXFxuKyAqXFx0XFx0XFx0ICBmYWlsZWQgYWZ0ZXIgdGhlIGZpcnN0IHdhcyBhbHJlYWR5IHN0ZXBwZWQpXFxuKyAqICogJS1FT1BOT1RTVVBQXFx0LSBubyBzeW50aHMgYXZhaWxhYmxlXFxuKyAqICogbmVnYXRpdmVcXHRcXHQtIGVycm9yXFxuKyAqL1xcbitzdGF0aWMgaW50IHpsMzA3M3hfZHBsbF9wdHBfYWRqdGltZV9waGFzZV9zdGVwKHN0cnVjdCB6bDMwNzN4X2RwbGwgKnpsZHBsbCxcXG4rXFx0XFx0XFx0XFx0XFx0ICAgICAgIHM2NCBkZWx0YSlcXG4re1xcbitcXHR1MTYgc3ludGhfbWFza1taTDMwNzNYX05VTV9TWU5USFNdID0ge307XFxuK1xcdHN0cnVjdCB6bDMwNzN4X2RldiAqemxkZXYgPSB6bGRwbGwtXFx1MDAzZWRldjtcXG4rXFx0Y29uc3Qgc3RydWN0IHpsMzA3M3hfc3ludGggKnN5bnRoO1xcbitcXHRzdHJ1Y3QgemwzMDczeF9kcGxsX3BpbiAqcGluO1xcbitcXHR1MzIgZmlyc3Rfc3ludGhfZnJlcSA9IDA7XFxuK1xcdGJvb2wgdG9kX3N0ZXBwZWQgPSBmYWxzZTtcXG4rXFx0czMyIHN0ZXBfY3ljbGVzO1xcbitcXHR1MzIgc3ludGhfZnJlcTtcXG4rXFx0aW50IHJjO1xcbitcXHR1OCBpO1xcbitcXG4rXFx0LyogQnVpbGQgcGVyLXN5bnRoIG91dHB1dCBtYXNrcyBmcm9tIHJlZ2lzdGVyZWQgb3V0cHV0IHBpbnMgKi9cXG4rXFx0bGlzdF9mb3JfZWFjaF9lbnRyeShwaW4sIFxcdTAwMjZ6bGRwbGwtXFx1MDAzZXBpbnMsIGxpc3QpIHtcXG4rXFx0XFx0dTggb3V0X2lkLCBzeW50aF9pZDtcXG4rXFxuK1xcdFxcdGlmICh6bDMwNzN4X2RwbGxfaXNfaW5wdXRfcGluKHBpbikpXFxuK1xcdFxcdFxcdGNvbnRpbnVlO1xcbitcXG4rXFx0XFx0b3V0X2lkID0gemwzMDczeF9vdXRwdXRfcGluX291dF9nZXQocGluLVxcdTAwM2VpZCk7XFxuK1xcbitcXHRcXHRpZiAoIXpsMzA3M3hfZGV2X291dF9pc19zdGVwcGVkKHpsZGV2LCBvdXRfaWQpKVxcbitcXHRcXHRcXHRjb250aW51ZTtcXG4rXFxuK1xcdFxcdHN5bnRoX2lkID0gemwzMDczeF9kZXZfb3V0X3N5bnRoX2dldCh6bGRldiwgb3V0X2lkKTtcXG4rXFx0XFx0aWYgKHN5bnRoX2lkIFxcdTAwM2U9IFpMMzA3M1hfTlVNX1NZTlRIUykge1xcbitcXHRcXHRcXHRkZXZfd2Fybih6bGRldi1cXHUwMDNlZGV2LCBcXFwiVW5leHBlY3RlZCBzeW50aCBpZCBmb3IgT1VUJXVcXFxcblxcXCIsXFxuK1xcdFxcdFxcdFxcdCBvdXRfaWQpO1xcbitcXHRcXHRcXHRjb250aW51ZTtcXG4rXFx0XFx0fVxcbitcXHRcXHRzeW50aF9tYXNrW3N5bnRoX2lkXSB8PSBCSVQob3V0X2lkKTtcXG4rXFx0fVxcbitcXG4rXFx0LyogUHJvY2VzcyBlYWNoIHN5bnRoIGdyb3VwICovXFxuK1xcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBaTDMwNzNYX05VTV9TWU5USFM7IGkrKykge1xcbitcXHRcXHRzeW50aCA9IHpsMzA3M3hfc3ludGhfc3RhdGVfZ2V0KHpsZGV2LCBpKTtcXG4rXFx0XFx0aWYgKCF6bDMwNzN4X3N5bnRoX2lzX2VuYWJsZWQoc3ludGgpIHx8XFxuK1xcdFxcdCAgICB6bDMwNzN4X3N5bnRoX2RwbGxfZ2V0KHN5bnRoKSAhPSB6bGRwbGwtXFx1MDAzZWlkKVxcbitcXHRcXHRcXHRjb250aW51ZTtcXG4rXFxuK1xcdFxcdHN5bnRoX2ZyZXEgPSB6bDMwNzN4X3N5bnRoX2ZyZXFfZ2V0KHN5bnRoKTtcXG4rXFxuK1xcdFxcdC8qIFJlbWVtYmVyIGZpcnN0IGVuYWJsZWQgc3ludGggZnJlcSBmb3IgVG9ELW9ubHkgZmFsbGJhY2sgKi9cXG4rXFx0XFx0aWYgKCFmaXJzdF9zeW50aF9mcmVxKVxcbitcXHRcXHRcXHRmaXJzdF9zeW50aF9mcmVxID0gc3ludGhfZnJlcTtcXG4rXFxuK1xcdFxcdGlmICghc3ludGhfbWFza1tpXSlcXG4rXFx0XFx0XFx0Y29udGludWU7XFxuK1xcbitcXHRcXHQvKiBTYWZlIGZvciBzMzI6IG1heCBzeW50aCBmcmVxIGlzIDc1MCBNSHogKi9cXG4rXFx0XFx0c3RlcF9jeWNsZXMgPSBkaXZfczY0KGRlbHRhICogc3ludGhfZnJlcSwgTlNFQ19QRVJfU0VDKTtcXG4rXFxuK1xcdFxcdHJjID0gemwzMDczeF9jaGFuX3BoYXNlX3N0ZXAoemxkZXYsIHpsZHBsbC1cXHUwMDNlaWQsXFxuK1xcdFxcdFxcdFxcdFxcdCAgICAgc3ludGhfbWFza1tpXSwgc3RlcF9jeWNsZXMsXFxuK1xcdFxcdFxcdFxcdFxcdCAgICAgIXRvZF9zdGVwcGVkKTtcXG4rXFx0XFx0aWYgKHJjKSB7XFxuK1xcdFxcdFxcdGlmICh0b2Rfc3RlcHBlZCkge1xcbitcXHRcXHRcXHRcXHRkZXZfd2Fybih6bGRldi1cXHUwMDNlZGV2LFxcbitcXHRcXHRcXHRcXHRcXHQgXFxcIlBhcnRpYWwgcGhhc2Ugc3RlcCBmYWlsdXJlXFxcXG5cXFwiKTtcXG4rXFx0XFx0XFx0XFx0cmV0dXJuIDA7XFxuK1xcdFxcdFxcdH1cXG4rXFx0XFx0XFx0cmV0dXJuIHJjO1xcbitcXHRcXHR9XFxuK1xcdFxcdHRvZF9zdGVwcGVkID0gdHJ1ZTtcXG4rXFx0fVxcbitcXG4rXFx0aWYgKCFmaXJzdF9zeW50aF9mcmVxKVxcbitcXHRcXHRyZXR1cm4gLUVPUE5PVFNVUFA7XFxuK1xcbitcXHQvKiBObyBlbmFibGVkIG91dHB1dHMgZm91bmQ7IHN0ZXAgVG9EIGNvdW50ZXIgb25seSB1c2luZyB0aGVcXG4rXFx0ICogZmlyc3QgZW5hYmxlZCBzeW50aCdzIHBlcmlvZCAoZW1wdHkgb3V0cHV0IG1hc2spLlxcbitcXHQgKi9cXG4rXFx0aWYgKCF0b2Rfc3RlcHBlZCkge1xcbitcXHRcXHRzdGVwX2N5Y2xlcyA9IGRpdl9zNjQoZGVsdGEgKiBmaXJzdF9zeW50aF9mcmVxLCBOU0VDX1BFUl9TRUMpO1xcbitcXHRcXHRyZXR1cm4gemwzMDczeF9jaGFuX3BoYXNlX3N0ZXAoemxkZXYsIHpsZHBsbC1cXHUwMDNlaWQsIDAsXFxuK1xcdFxcdFxcdFxcdFxcdCAgICAgICBzdGVwX2N5Y2xlcywgdHJ1ZSk7XFxuK1xcdH1cXG4rXFxuK1xcdHJldHVybiAwO1xcbiB9XFxuIFxcbiAvKipcXG4tICogemwzMDczeF9kcGxsX2ZyZWUgLSBmcmVlIERQTEwgZGV2aWNlXFxuLSAqIEB6bGRwbGw6IHBvaW50ZXIgdG8gemwzMDczeF9kcGxsIHN0cnVjdHVyZVxcbisgKiB6bDMwNzN4X2RwbGxfcHRwX2FkanRpbWUgLSBhZGp1c3QgUFRQIGNsb2NrIHRpbWVcXG4rICogQGluZm86IFBUUCBjbG9jayBpbmZvXFxuKyAqIEBkZWx0YTogdGltZSBhZGp1c3RtZW50IGluIG5hbm9zZWNvbmRzXFxuICAqXFxuLSAqIERlYWxsb2NhdGVzIGdpdmVuIERQTEwgZGV2aWNlIHByZXZpb3VzbHkgYWxsb2NhdGVkIGJ5IEB6bDMwNzN4X2RwbGxfYWxsb2MuXFxuKyAqIEZvciBOQ08sIGxhcmdlIGRlbHRhcyAoXFx1MDAzZT0gMSBzZWNvbmQpIGFyZSBzcGxpdCBpbnRvIGEgVG9EXFxuKyAqIHJlYWQtbW9kaWZ5LXdyaXRlIGZvciB0aGUgc2Vjb25kcyBwYXJ0IGFuZCBhbiBvdXRwdXQgcGhhc2Ugc3RlcCBmb3JcXG4rICogdGhlIHN1Yi1zZWNvbmQgcmVtYWluZGVyLiBTdWItc2Vjb25kIGRlbHRhcyB1c2UgcGhhc2Ugc3RlcCBkaXJlY3RseSxcXG4rICogZmFsbGluZyBiYWNrIHRvIFRvRCByZWFkLW1vZGlmeS13cml0ZSBpZiBwaGFzZSBzdGVwIG9yIFRJRSB3cml0ZVxcbisgKiBmYWlscy4gSW4gQVVUTy9SRUZMT0NLIG1vZGVzLCBsYXJnZSBkZWx0YXMgYXJlIHNwbGl0IGludG8gVG9EXFxuKyAqIHJlYWQtbW9kaWZ5LXdyaXRlIGZvciBzZWNvbmRzIGFuZCBUSUUgd3JpdGUgZm9yIHRoZSBzdWItc2Vjb25kXFxuKyAqIHJlbWFpbmRlci4gU3ViLXNlY29uZCBkZWx0YXMgdXNlIFRJRSB3cml0ZSBkaXJlY3RseS5cXG4rICpcXG4rICogSWYgdGhlIHNlY29uZHMgcGFydCB3YXMgYWxyZWFkeSBjb21taXR0ZWQgd2hlbiB0aGUgc3ViLXNlY29uZFxcbisgKiBtZWNoYW5pc20gZmFpbHMsIHJldHVybnMgMCB0byBwcmV2ZW50IHRoZSBQVFAgc2Vydm8gZnJvbSByZXRyeWluZ1xcbisgKiB0aGUgZnVsbCBkZWx0YSBhbmQgYXBwbHlpbmcgc2Vjb25kcyBhZ2Fpbi5cXG4rICpcXG4rICogUmV0dXJuOiAwIG9uIHN1Y2Nlc3MgKG9yIHBhcnRpYWwgc3VjY2VzcyksIFxcdTAwM2MwIG9uIGVycm9yXFxuICAqL1xcbi12b2lkXFxuLXpsMzA3M3hfZHBsbF9mcmVlKHN0cnVjdCB6bDMwNzN4X2RwbGwgKnpsZHBsbClcXG4rc3RhdGljIGludCB6bDMwNzN4X2RwbGxfcHRwX2FkanRpbWUoc3RydWN0IHB0cF9jbG9ja19pbmZvICppbmZvLCBzNjQgZGVsdGEpXFxuIHtcXG4tXFx0V0FSTih6bGRwbGwtXFx1MDAzZWRwbGxfZGV2LCBcXFwiRFBMTCBkZXZpY2UgaXMgc3RpbGwgcmVnaXN0ZXJlZFxcXFxuXFxcIik7XFxuK1xcdHN0cnVjdCB6bDMwNzN4X2RwbGwgKnpsZHBsbCA9IGNvbnRhaW5lcl9vZihpbmZvLCBzdHJ1Y3QgemwzMDczeF9kcGxsLFxcbitcXHRcXHRcXHRcXHRcXHRcXHQgICBwdHBfaW5mbyk7XFxuK1xcdHN0cnVjdCB6bDMwNzN4X2RldiAqemxkZXYgPSB6bGRwbGwtXFx1MDAzZWRldjtcXG4rXFx0Y29uc3Qgc3RydWN0IHpsMzA3M3hfY2hhbiAqY2hhbjtcXG4rXFx0Ym9vbCBzZWNfYWRqdXN0ZWQgPSBmYWxzZTtcXG4rXFx0c3RydWN0IHRpbWVzcGVjNjQgdHM7XFxuK1xcdGludCByYztcXG4gXFxuLVxcdG11dGV4X2Rlc3Ryb3koXFx1MDAyNnpsZHBsbC1cXHUwMDNlbG9jayk7XFxuLVxcdGtmcmVlKHpsZHBsbCk7XFxuK1xcdGlmICghZGVsdGEpXFxuK1xcdFxcdHJldHVybiAwO1xcbitcXG4rXFx0Z3VhcmQobXV0ZXgpKFxcdTAwMjZ6bGRwbGwtXFx1MDAzZWxvY2spO1xcbitcXG4rXFx0LyogTW9kZXMgd2l0aG91dCBwaGFzZSBzdGVwIG9yIFRJRSB1c2UgcGxhaW4gVG9EIGFkanVzdCAqL1xcbitcXHRjaGFuID0gemwzMDczeF9jaGFuX3N0YXRlX2dldCh6bGRldiwgemxkcGxsLVxcdTAwM2VpZCk7XFxuK1xcdGlmICghemwzMDczeF9jaGFuX21vZGVfaXNfbmNvKGNoYW4pIFxcdTAwMjZcXHUwMDI2XFxuK1xcdCAgICAhemwzMDczeF9jaGFuX21vZGVfc3VwcG9ydHNfdGllKGNoYW4pKVxcbitcXHRcXHRyZXR1cm4gemwzMDczeF9jaGFuX3RvZF9hZGp1c3QoemxkZXYsIHpsZHBsbC1cXHUwMDNlaWQsXFxuK1xcdFxcdFxcdFxcdFxcdCAgICAgICBuc190b190aW1lc3BlYzY0KGRlbHRhKSk7XFxuK1xcbitcXHQvKiBTcGxpdCBvZmYgc2Vjb25kcyB2aWEgVG9EIHJlYWQtbW9kaWZ5LXdyaXRlIHNvIHRoZSBzdWItc2Vjb25kXFxuK1xcdCAqIHJlbWFpbmRlciBjYW4gYmUgYXBwbGllZCB0aHJvdWdoIHRoZSBvdXRwdXQtY29oZXJlbnQgbWVjaGFuaXNtXFxuK1xcdCAqIChwaGFzZSBzdGVwIG9yIFRJRSB3cml0ZSkuXFxuK1xcdCAqL1xcbitcXHRpZiAoZGVsdGEgXFx1MDAzZT0gTlNFQ19QRVJfU0VDIHx8IGRlbHRhIFxcdTAwM2M9IC1OU0VDX1BFUl9TRUMpIHtcXG4rXFx0XFx0czMyIHJlbWFpbmRlcjtcXG4rXFxuK1xcdFxcdHRzLnR2X3NlYyA9IGRpdl9zNjRfcmVtKGRlbHRhLCBOU0VDX1BFUl9TRUMsIFxcdTAwMjZyZW1haW5kZXIpO1xcbitcXHRcXHR0cy50dl9uc2VjID0gMDtcXG4rXFx0XFx0ZGVsdGEgPSByZW1haW5kZXI7XFxuK1xcbitcXHRcXHRyYyA9IHpsMzA3M3hfY2hhbl90b2RfYWRqdXN0KHpsZGV2LCB6bGRwbGwtXFx1MDAzZWlkLCB0cyk7XFxuK1xcdFxcdGlmIChyYylcXG4rXFx0XFx0XFx0cmV0dXJuIHJjO1xcbitcXG4rXFx0XFx0LyogTm8gc3ViLXNlY29uZCByZW1haW5kZXIsIGRvbmUgKi9cXG4rXFx0XFx0aWYgKCFkZWx0YSlcXG4rXFx0XFx0XFx0cmV0dXJuIDA7XFxuK1xcbitcXHRcXHQvKiBXYWl0IGZvciB0aGUgVG9EIHdyaXRlIHRvIGJlIGFwcGxpZWQgYXQgdGhlIDEgSHogZWRnZVxcbitcXHRcXHQgKiBiZWZvcmUgaXNzdWluZyBwaGFzZSBzdGVwIG9yIFRJRSB3cml0ZSwgc28gdGhlIHBlbmRpbmdcXG4rXFx0XFx0ICogV1JfTkVYVF8xSFogZG9lcyBub3Qgb3ZlcndyaXRlIHRoZSBzdWItc2Vjb25kIGFkanVzdG1lbnQuXFxuK1xcdFxcdCAqL1xcbitcXHRcXHRyYyA9IHpsMzA3M3hfY2hhbl90b2RfcmVhZHlfd2FpdCh6bGRldiwgemxkcGxsLVxcdTAwM2VpZCk7XFxuK1xcdFxcdGlmIChyYylcXG4rXFx0XFx0XFx0cmV0dXJuIHJjO1xcbitcXG4rXFx0XFx0c2VjX2FkanVzdGVkID0gdHJ1ZTtcXG4rXFx0fVxcbitcXG4rXFx0LyogQXBwbHkgc3ViLXNlY29uZCBkZWx0YSB2aWEgcGhhc2Ugc3RlcCAoTkNPKSBvciBUSUUgd3JpdGUgKi9cXG4rXFx0aWYgKHpsMzA3M3hfY2hhbl9tb2RlX2lzX25jbyhjaGFuKSkge1xcbitcXHRcXHRyYyA9IHpsMzA3M3hfZHBsbF9wdHBfYWRqdGltZV9waGFzZV9zdGVwKHpsZHBsbCwgZGVsdGEpO1xcbitcXHRcXHRpZiAoIXJjKVxcbitcXHRcXHRcXHRyZXR1cm4gMDtcXG4rXFx0fSBlbHNlIHtcXG4rXFx0XFx0cmMgPSB6bDMwNzN4X2NoYW5fdGllX3dyaXRlKHpsZGV2LCB6bGRwbGwtXFx1MDAzZWlkLCBkZWx0YSk7XFxuK1xcdFxcdGlmICghcmMpXFxuK1xcdFxcdFxcdHJldHVybiAwO1xcbitcXHR9XFxuK1xcbitcXHQvKiBQaGFzZSBzdGVwIG9yIFRJRSB3cml0ZSBmYWlsZWQsIGZhbGwgYmFjayB0byBUb0QgYWRqdXN0ICovXFxuK1xcdHJjID0gemwzMDczeF9jaGFuX3RvZF9hZGp1c3QoemxkZXYsIHpsZHBsbC1cXHUwMDNlaWQsXFxuK1xcdFxcdFxcdFxcdCAgICAgbnNfdG9fdGltZXNwZWM2NChkZWx0YSkpO1xcbitcXG4rXFx0LyogSW4gdGhlIHVubGlrZWx5IGV2ZW50IHRoYXQgYm90aCBwaGFzZSBzdGVwL1RJRSB3cml0ZSBhbmQgZmFsbGJhY2tcXG4rXFx0ICogVG9EIGFkanVzdCBmYWlsIGFmdGVyIHNlY29uZHMgd2VyZSBhbHJlYWR5IGNvbW1pdHRlZCwgcmV0dXJuXFxuK1xcdCAqIHN1Y2Nlc3MgdG8gcHJldmVudCB0aGUgUFRQIHNlcnZvIGZyb20gcmV0cnlpbmcgdGhlIGZ1bGwgZGVsdGEgYW5kXFxuK1xcdCAqIGFwcGx5aW5nIHNlY29uZHMgYWdhaW4uIFRoZSBzdWItc2Vjb25kIHJlc2lkdWFsIHdpbGwgc2VsZi1jb3JyZWN0XFxuK1xcdCAqIGluIHRoZSBuZXh0IHNlcnZvIGN5Y2xlLlxcbitcXHQgKi9cXG4rXFx0aWYgKHJjIFxcdTAwMjZcXHUwMDI2IHNlY19hZGp1c3RlZCkge1xcbitcXHRcXHRkZXZfd2Fybih6bGRldi1cXHUwMDNlZGV2LFxcbitcXHRcXHRcXHQgXFxcIlN1Yi1zZWNvbmQgYWRqdXN0bWVudCBmYWlsZWQgYWZ0ZXIgc2Vjb25kcyBhcHBsaWVkXFxcXG5cXFwiKTtcXG4rXFx0XFx0cmV0dXJuIDA7XFxuK1xcdH1cXG4rXFxuK1xcdHJldHVybiByYztcXG4rfVxcbitcXG4rLyoqXFxuKyAqIHpsMzA3M3hfZHBsbF9wdHBfYWRqZmluZSAtIGFkanVzdCBQVFAgY2xvY2sgZnJlcXVlbmN5XFxuKyAqIEBpbmZvOiBQVFAgY2xvY2sgaW5mb1xcbisgKiBAc2NhbGVkX3BwbTogZnJlcXVlbmN5IGFkanVzdG1lbnQgaW4gc2NhbGVkIHBwbSAocHBtICogMl4xNilcXG4rICpcXG4rICogT25seSBzdXBwb3J0ZWQgZm9yIE5DTy4gV3JpdGVzIHRoZSBkZWx0YSBmcmVxdWVuY3kgb2Zmc2V0IHJlZ2lzdGVyLlxcbisgKlxcbisgKiBSZXR1cm46XFxuKyAqICogJTBcXHRcXHRcXHQtIHN1Y2Nlc3Mgb3IgQHNjYWxlZF9wcG0gaXMgemVybyAobm8tb3ApXFxuKyAqICogJS1FT1BOT1RTVVBQXFx0LSBOQ08gcGluIGlzIG5vdCBjb25uZWN0ZWQgYW5kIEBzY2FsZWRfcHBtIGlzIG5vbi16ZXJvXFxuKyAqICogbmVnYXRpdmVcXHRcXHQtIG90aGVyIGVycm9yXFxuKyAqL1xcbitzdGF0aWMgaW50XFxuK3psMzA3M3hfZHBsbF9wdHBfYWRqZmluZShzdHJ1Y3QgcHRwX2Nsb2NrX2luZm8gKmluZm8sIGxvbmcgc2NhbGVkX3BwbSlcXG4re1xcbitcXHRzdHJ1Y3QgemwzMDczeF9kcGxsICp6bGRwbGwgPSBjb250YWluZXJfb2YoaW5mbywgc3RydWN0IHpsMzA3M3hfZHBsbCxcXG4rXFx0XFx0XFx0XFx0XFx0XFx0ICAgcHRwX2luZm8pO1xcbitcXHRjb25zdCBzdHJ1Y3QgemwzMDczeF9jaGFuICpjaGFuO1xcbitcXHRzNjQgb2Zmc2V0O1xcbitcXG4rXFx0LyogQ29udmVydCBzY2FsZWRfcHBtIHRvIGRmX29mZnNldCBpbiAyXi00OCBzdGVwczpcXG4rXFx0ICogICBkZl9vZmZzZXQgPSAtKHNjYWxlZF9wcG0gKiAyXjMyKSAvIDEwXjZcXG4rXFx0ICpcXG4rXFx0ICogU2ltcGxpZnkgdG8gYXZvaWQgb3ZlcmZsb3c6XFxuK1xcdCAqICAgZGZfb2Zmc2V0ID0gLShzY2FsZWRfcHBtICogMl4yNikgLyA1XjZcXG4rXFx0ICogICBkZl9vZmZzZXQgPSAtKHNjYWxlZF9wcG0gKiA2NzEwODg2NCkgLyAxNTYyNVxcbitcXHQgKi9cXG4rXFx0b2Zmc2V0ID0gLWRpdl9zNjQoKHM2NClzY2FsZWRfcHBtICogNjcxMDg4NjRMTCwgMTU2MjUpO1xcbitcXG4rXFx0Z3VhcmQobXV0ZXgpKFxcdTAwMjZ6bGRwbGwtXFx1MDAzZWxvY2spO1xcbitcXG4rXFx0Y2hhbiA9IHpsMzA3M3hfY2hhbl9zdGF0ZV9nZXQoemxkcGxsLVxcdTAwM2VkZXYsIHpsZHBsbC1cXHUwMDNlaWQpO1xcbitcXHRpZiAoIXpsMzA3M3hfY2hhbl9tb2RlX2lzX25jbyhjaGFuKSlcXG4rXFx0XFx0cmV0dXJuIHNjYWxlZF9wcG0gPyAtRU9QTk9UU1VQUCA6IDA7XFxuK1xcdGlmIChvZmZzZXQgPT0gY2hhbi1cXHUwMDNlZGZfb2Zmc2V0KVxcbitcXHRcXHRyZXR1cm4gMDtcXG4rXFxuK1xcdHJldHVybiB6bDMwNzN4X2NoYW5fZGZfb2Zmc2V0X3NldCh6bGRwbGwtXFx1MDAzZWRldiwgemxkcGxsLVxcdTAwM2VpZCwgb2Zmc2V0KTtcXG4rfVxcbitcXG4rLyoqXFxuKyAqIHpsMzA3M3hfZHBsbF9wdHBfYWRqcGhhc2UgLSBhZGp1c3QgUFRQIGNsb2NrIHBoYXNlXFxuKyAqIEBpbmZvOiBQVFAgY2xvY2sgaW5mb1xcbisgKiBAZGVsdGE6IHBoYXNlIGFkanVzdG1lbnQgaW4gbmFub3NlY29uZHNcXG4rICpcXG4rICogT25seSBzdXBwb3J0ZWQgaW4gQVVUTyBhbmQgUkVGTE9DSyBtb2Rlcy4gVXNlcyBUSUUgd3JpdGUgZm9yXFxuKyAqIG5hbm9zZWNvbmQgcmVzb2x1dGlvbiBwaGFzZSBhZGp1c3RtZW50LlxcbisgKlxcbisgKiBSZXR1cm46XFxuKyAqICogJTBcXHRcXHRcXHQtIHN1Y2Nlc3Mgb3IgQGRlbHRhIGlzIHplcm8gKG5vLW9wKVxcbisgKiAqICUtRU9QTk9UU1VQUFxcdC0gbW9kZSBkb2VzIG5vdCBzdXBwb3J0IFRJRSBhbmQgQGRlbHRhIGlzIG5vbi16ZXJvXFxuKyAqICogbmVnYXRpdmVcXHRcXHQtIG90aGVyIGVycm9yXFxuKyAqL1xcbitzdGF0aWMgaW50IHpsMzA3M3hfZHBsbF9wdHBfYWRqcGhhc2Uoc3RydWN0IHB0cF9jbG9ja19pbmZvICppbmZvLCBzMzIgZGVsdGEpXFxuK3tcXG4rXFx0c3RydWN0IHpsMzA3M3hfZHBsbCAqemxkcGxsID0gY29udGFpbmVyX29mKGluZm8sIHN0cnVjdCB6bDMwNzN4X2RwbGwsXFxuK1xcdFxcdFxcdFxcdFxcdFxcdCAgIHB0cF9pbmZvKTtcXG4rXFx0c3RydWN0IHpsMzA3M3hfZGV2ICp6bGRldiA9IHpsZHBsbC1cXHUwMDNlZGV2O1xcbitcXHRjb25zdCBzdHJ1Y3QgemwzMDczeF9jaGFuICpjaGFuO1xcbitcXG4rXFx0aWYgKCFkZWx0YSlcXG4rXFx0XFx0cmV0dXJuIDA7XFxuK1xcbitcXHRndWFyZChtdXRleCkoXFx1MDAyNnpsZHBsbC1cXHUwMDNlbG9jayk7XFxuK1xcbitcXHRjaGFuID0gemwzMDczeF9jaGFuX3N0YXRlX2dldCh6bGRldiwgemxkcGxsLVxcdTAwM2VpZCk7XFxuK1xcbitcXHRpZiAoIXpsMzA3M3hfY2hhbl9tb2RlX3N1cHBvcnRzX3RpZShjaGFuKSlcXG4rXFx0XFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xcbitcXG4rXFx0cmV0dXJuIHpsMzA3M3hfY2hhbl90aWVfd3JpdGUoemxkZXYsIHpsZHBsbC1cXHUwMDNlaWQsIGRlbHRhKTtcXG4rfVxcbitcXG4rc3RhdGljIHMzMlxcbit6bDMwNzN4X2RwbGxfcHRwX2dldG1heHBoYXNlKHN0cnVjdCBwdHBfY2xvY2tfaW5mbyAqaW5mbyBfX2Fsd2F5c191bnVzZWQpXFxuK3tcXG4rXFx0LyogSFcgbGltaXRzIFRJRSB3cml0ZSB0byArLTEgc2Vjb25kLiBSZXR1cm4gdGhlIGNvbnN0YW50IEhXXFxuK1xcdCAqIGxpbWl0IGFuZCBsZXQgYWRqcGhhc2UgaGFuZGxlIG1vZGUtc3BlY2lmaWMgY2hlY2tzLlxcbitcXHQgKi9cXG4rXFx0cmV0dXJuIE5TRUNfUEVSX1NFQyAtIDE7XFxuK31cXG4rXFxuK3N0YXRpYyBjb25zdCBzdHJ1Y3QgcHRwX2Nsb2NrX2luZm8gemwzMDczeF9kcGxsX3B0cF9jbG9ja19pbmZvID0ge1xcbitcXHQub3duZXJcXHRcXHQ9IFRISVNfTU9EVUxFLFxcbitcXHQubWF4X2FkalxcdD0gWkwzMDczWF9EUExMX1BUUF9NQVhfQURKLFxcbitcXHQuZ2V0dGltZXg2NFxcdD0gemwzMDczeF9kcGxsX3B0cF9nZXR0aW1leDY0LFxcbitcXHQuc2V0dGltZTY0XFx0PSB6bDMwNzN4X2RwbGxfcHRwX3NldHRpbWU2NCxcXG4rXFx0LmFkanRpbWVcXHQ9IHpsMzA3M3hfZHBsbF9wdHBfYWRqdGltZSxcXG4rXFx0LmFkamZpbmVcXHQ9IHpsMzA3M3hfZHBsbF9wdHBfYWRqZmluZSxcXG4rXFx0LmFkanBoYXNlXFx0PSB6bDMwNzN4X2RwbGxfcHRwX2FkanBoYXNlLFxcbitcXHQuZ2V0bWF4cGhhc2VcXHQ9IHpsMzA3M3hfZHBsbF9wdHBfZ2V0bWF4cGhhc2UsXFxuK307XFxuK1xcbisvKipcXG4rICogemwzMDczeF9kcGxsX3B0cF9yZWdpc3RlciAtIHJlZ2lzdGVyIFBUUCBjbG9jayBmb3IgYSBEUExMIGNoYW5uZWxcXG4rICogQHpsZHBsbDogRFBMTCBjaGFubmVsIHRvIHJlZ2lzdGVyIFBUUCBjbG9jayBmb3JcXG4rICpcXG4rICogUmV0dXJuOiAwIG9uIHN1Y2Nlc3MsIFxcdTAwM2MwIG9uIGVycm9yXFxuKyAqL1xcbitzdGF0aWMgaW50IHpsMzA3M3hfZHBsbF9wdHBfcmVnaXN0ZXIoc3RydWN0IHpsMzA3M3hfZHBsbCAqemxkcGxsKVxcbit7XFxuK1xcdHN0cnVjdCB6bDMwNzN4X2RldiAqemxkZXYgPSB6bGRwbGwtXFx1MDAzZWRldjtcXG4rXFx0c3RydWN0IHB0cF9jbG9jayAqcHRwX2Nsb2NrO1xcbitcXG4rXFx0emxkcGxsLVxcdTAwM2VwdHBfaW5mbyA9IHpsMzA3M3hfZHBsbF9wdHBfY2xvY2tfaW5mbztcXG4rXFx0c25wcmludGYoemxkcGxsLVxcdTAwM2VwdHBfaW5mby5uYW1lLCBzaXplb2YoemxkcGxsLVxcdTAwM2VwdHBfaW5mby5uYW1lKSxcXG4rXFx0XFx0IFxcXCIlcy1kcGxsJXVcXFwiLCBkZXZfbmFtZSh6bGRldi1cXHUwMDNlZGV2KSwgemxkcGxsLVxcdTAwM2VpZCk7XFxuK1xcbitcXHRwdHBfY2xvY2sgPSBwdHBfY2xvY2tfcmVnaXN0ZXIoXFx1MDAyNnpsZHBsbC1cXHUwMDNlcHRwX2luZm8sIHpsZGV2LVxcdTAwM2VkZXYpO1xcbitcXHRpZiAoSVNfRVJSKHB0cF9jbG9jaykpIHtcXG4rXFx0XFx0ZGV2X2Vycih6bGRldi1cXHUwMDNlZGV2LCBcXFwiRmFpbGVkIHRvIHJlZ2lzdGVyIFBUUCBjbG9jayBmb3IgRFBMTCV1XFxcXG5cXFwiLFxcbitcXHRcXHRcXHR6bGRwbGwtXFx1MDAzZWlkKTtcXG4rXFx0XFx0cmV0dXJuIFBUUl9FUlIocHRwX2Nsb2NrKTtcXG4rXFx0fVxcbitcXG4rXFx0emxkcGxsLVxcdTAwM2VwdHBfY2xvY2sgPSBwdHBfY2xvY2s7XFxuK1xcbitcXHRyZXR1cm4gMDtcXG4rfVxcbitcXG4rLyoqXFxuKyAqIHpsMzA3M3hfZHBsbF9wdHBfdW5yZWdpc3RlciAtIHVucmVnaXN0ZXIgUFRQIGNsb2NrIGZvciBhIERQTEwgY2hhbm5lbFxcbisgKiBAemxkcGxsOiBEUExMIGNoYW5uZWwgdG8gdW5yZWdpc3RlciBQVFAgY2xvY2sgZm9yXFxuKyAqL1xcbitzdGF0aWMgdm9pZCB6bDMwNzN4X2RwbGxfcHRwX3VucmVnaXN0ZXIoc3RydWN0IHpsMzA3M3hfZHBsbCAqemxkcGxsKVxcbit7XFxuK1xcdGlmICghSVNfRVJSX09SX05VTEwoemxkcGxsLVxcdTAwM2VwdHBfY2xvY2spKSB7XFxuK1xcdFxcdHB0cF9jbG9ja191bnJlZ2lzdGVyKHpsZHBsbC1cXHUwMDNlcHRwX2Nsb2NrKTtcXG4rXFx0XFx0emxkcGxsLVxcdTAwM2VwdHBfY2xvY2sgPSBOVUxMO1xcbitcXHR9XFxuIH1cXG4gXFxuIC8qKlxcbkBAIC0yMzk4LDYgKzI3MzksNDcgQEAgemwzMDczeF9kcGxsX3JlZl9zeW5jX3BhaXJzX3JlZ2lzdGVyKHN0cnVjdCB6bDMwNzN4X2RwbGwgKnpsZHBsbClcXG4gXFx0cmV0dXJuIDA7XFxuIH1cXG4gXFxuKy8qKlxcbisgKiB6bDMwNzN4X2RwbGxfYWxsb2MgLSBhbGxvY2F0ZSBEUExMIGRldmljZVxcbisgKiBAemxkZXY6IHBvaW50ZXIgdG8gemwzMDczeCBkZXZpY2VcXG4rICogQGNoOiBEUExMIGNoYW5uZWwgbnVtYmVyXFxuKyAqXFxuKyAqIEFsbG9jYXRlcyBEUExMIGRldmljZSBzdHJ1Y3R1cmUgZm9yIGdpdmVuIERQTEwgY2hhbm5lbC5cXG4rICpcXG4rICogUmV0dXJuOiBwb2ludGVyIHRvIERQTEwgZGV2aWNlIG9uIHN1Y2Nlc3MsIGVycm9yIHBvaW50ZXIgb24gZXJyb3JcXG4rICovXFxuK3N0cnVjdCB6bDMwNzN4X2RwbGwgKlxcbit6bDMwNzN4X2RwbGxfYWxsb2Moc3RydWN0IHpsMzA3M3hfZGV2ICp6bGRldiwgdTggY2gpXFxuK3tcXG4rXFx0c3RydWN0IHpsMzA3M3hfZHBsbCAqemxkcGxsO1xcbitcXG4rXFx0emxkcGxsID0ga3phbGxvY19vYmooKnpsZHBsbCk7XFxuK1xcdGlmICghemxkcGxsKVxcbitcXHRcXHRyZXR1cm4gRVJSX1BUUigtRU5PTUVNKTtcXG4rXFxuK1xcdHpsZHBsbC1cXHUwMDNlZGV2ID0gemxkZXY7XFxuK1xcdHpsZHBsbC1cXHUwMDNlaWQgPSBjaDtcXG4rXFx0bXV0ZXhfaW5pdChcXHUwMDI2emxkcGxsLVxcdTAwM2Vsb2NrKTtcXG4rXFx0SU5JVF9MSVNUX0hFQUQoXFx1MDAyNnpsZHBsbC1cXHUwMDNlcGlucyk7XFxuK1xcbitcXHRyZXR1cm4gemxkcGxsO1xcbit9XFxuK1xcbisvKipcXG4rICogemwzMDczeF9kcGxsX2ZyZWUgLSBmcmVlIERQTEwgZGV2aWNlXFxuKyAqIEB6bGRwbGw6IHBvaW50ZXIgdG8gemwzMDczeF9kcGxsIHN0cnVjdHVyZVxcbisgKlxcbisgKiBEZWFsbG9jYXRlcyBnaXZlbiBEUExMIGRldmljZSBwcmV2aW91c2x5IGFsbG9jYXRlZCBieSBAemwzMDczeF9kcGxsX2FsbG9jLlxcbisgKi9cXG4rdm9pZFxcbit6bDMwNzN4X2RwbGxfZnJlZShzdHJ1Y3QgemwzMDczeF9kcGxsICp6bGRwbGwpXFxuK3tcXG4rXFx0V0FSTih6bGRwbGwtXFx1MDAzZWRwbGxfZGV2LCBcXFwiRFBMTCBkZXZpY2UgaXMgc3RpbGwgcmVnaXN0ZXJlZFxcXFxuXFxcIik7XFxuK1xcbitcXHRtdXRleF9kZXN0cm95KFxcdTAwMjZ6bGRwbGwtXFx1MDAzZWxvY2spO1xcbitcXHRrZnJlZSh6bGRwbGwpO1xcbit9XFxuK1xcbiAvKipcXG4gICogemwzMDczeF9kcGxsX3JlZ2lzdGVyIC0gcmVnaXN0ZXIgRFBMTCBkZXZpY2UgYW5kIGFsbCBpdHMgcGluc1xcbiAgKiBAemxkcGxsOiBwb2ludGVyIHRvIHpsMzA3M3hfZHBsbCBzdHJ1Y3R1cmVcXG5AQCAtMjQyOCw2ICsyODEwLDEzIEBAIHpsMzA3M3hfZHBsbF9yZWdpc3RlcihzdHJ1Y3QgemwzMDczeF9kcGxsICp6bGRwbGwpXFxuIFxcdFxcdHJldHVybiByYztcXG4gXFx0fVxcbiBcXG4rXFx0cmMgPSB6bDMwNzN4X2RwbGxfcHRwX3JlZ2lzdGVyKHpsZHBsbCk7XFxuK1xcdGlmIChyYykge1xcbitcXHRcXHR6bDMwNzN4X2RwbGxfcGluc191bnJlZ2lzdGVyKHpsZHBsbCk7XFxuK1xcdFxcdHpsMzA3M3hfZHBsbF9kZXZpY2VfdW5yZWdpc3Rlcih6bGRwbGwpO1xcbitcXHRcXHRyZXR1cm4gcmM7XFxuK1xcdH1cXG4rXFxuIFxcdHJldHVybiAwO1xcbiB9XFxuIFxcbkBAIC0yNDQxLDcgKzI4MzAsNyBAQCB6bDMwNzN4X2RwbGxfcmVnaXN0ZXIoc3RydWN0IHpsMzA3M3hfZHBsbCAqemxkcGxsKVxcbiB2b2lkXFxuIHpsMzA3M3hfZHBsbF91bnJlZ2lzdGVyKHN0cnVjdCB6bDMwNzN4X2RwbGwgKnpsZHBsbClcXG4ge1xcbi1cXHQvKiBVbnJlZ2lzdGVyIGFsbCBwaW5zIGFuZCBkcGxsICovXFxuK1xcdHpsMzA3M3hfZHBsbF9wdHBfdW5yZWdpc3Rlcih6bGRwbGwpO1xcbiBcXHR6bDMwNzN4X2RwbGxfcGluc191bnJlZ2lzdGVyKHpsZHBsbCk7XFxuIFxcdHpsMzA3M3hfZHBsbF9kZXZpY2VfdW5yZWdpc3Rlcih6bGRwbGwpO1xcbiB9XFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvZHBsbC96bDMwNzN4L2RwbGwuaCBiL2RyaXZlcnMvZHBsbC96bDMwNzN4L2RwbGwuaFxcbmluZGV4IGZhZWJjNDAyYmExYjcuLjk5MzIyMWRjNjMyNDkgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9kcGxsL3psMzA3M3gvZHBsbC5oXFxuKysrIGIvZHJpdmVycy9kcGxsL3psMzA3M3gvZHBsbC5oXFxuQEAgLTUsNiArNSw3IEBAXFxuIFxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvZHBsbC5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvbGlzdC5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjbGludXgvcHRwX2Nsb2NrX2tlcm5lbC5oXFx1MDAzZVxcbiBcXG4gI2luY2x1ZGUgXFxcImNvcmUuaFxcXCJcXG4gXFxuQEAgLTIyLDYgKzIzLDggQEBcXG4gICogQHR5cGU6IERQTEwgdHlwZSAoUFBTIG9yIEVFQylcXG4gICogQGxvY2tfc3RhdHVzOiBsYXN0IHNhdmVkIERQTEwgbG9jayBzdGF0dXNcXG4gICogQHBpbnM6IGxpc3Qgb2YgcGluc1xcbisgKiBAcHRwX2luZm86IFBUUCBjbG9jayBpbmZvXFxuKyAqIEBwdHBfY2xvY2s6IHJlZ2lzdGVyZWQgUFRQIGNsb2NrIChvciBOVUxMKVxcbiAgKi9cXG4gc3RydWN0IHpsMzA3M3hfZHBsbCB7XFxuIFxcdHN0cnVjdCBsaXN0X2hlYWRcXHRcXHRsaXN0O1xcbkBAIC0zNiw2ICszOSw4IEBAIHN0cnVjdCB6bDMwNzN4X2RwbGwge1xcbiBcXHRlbnVtIGRwbGxfdHlwZVxcdFxcdFxcdHR5cGU7XFxuIFxcdGVudW0gZHBsbF9sb2NrX3N0YXR1c1xcdFxcdGxvY2tfc3RhdHVzO1xcbiBcXHRzdHJ1Y3QgbGlzdF9oZWFkXFx0XFx0cGlucztcXG4rXFx0c3RydWN0IHB0cF9jbG9ja19pbmZvXFx0XFx0cHRwX2luZm87XFxuK1xcdHN0cnVjdCBwdHBfY2xvY2tcXHRcXHQqcHRwX2Nsb2NrO1xcbiB9O1xcbiBcXG4gc3RydWN0IHpsMzA3M3hfZHBsbCAqemwzMDczeF9kcGxsX2FsbG9jKHN0cnVjdCB6bDMwNzN4X2RldiAqemxkZXYsIHU4IGNoKTtcXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9kcGxsL3psMzA3M3gvcmVncy5oIGIvZHJpdmVycy9kcGxsL3psMzA3M3gvcmVncy5oXFxuaW5kZXggYjcwZWFkN2Q0NDk1Yi4uZjNhNWUxMjE1YWEzNiAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL2RwbGwvemwzMDczeC9yZWdzLmhcXG4rKysgYi9kcml2ZXJzL2RwbGwvemwzMDczeC9yZWdzLmhcXG5AQCAtMTc5LDYgKzE3OSwyMCBAQFxcbiAjZGVmaW5lIFpMX0RQTExfREZfUkVBRF9DTURcXHRcXHRcXHRHRU5NQVNLKDIsIDApXFxuICNkZWZpbmUgWkxfRFBMTF9ERl9SRUFEX0NNRF9BQ0NfSVxcdFxcdDRcXG4gXFxuKyNkZWZpbmUgWkxfUkVHX0RQTExfVElFX0NUUkxcXHRcXHRcXHRaTF9SRUcoNSwgMHgzMCwgMSlcXG4rI2RlZmluZSBaTF9EUExMX1RJRV9DVFJMX09QXFx0XFx0XFx0R0VOTUFTSygyLCAwKVxcbisjZGVmaW5lIFpMX0RQTExfVElFX0NUUkxfT1BfV1JcXHRcXHRcXHQ0XFxuK1xcbisjZGVmaW5lIFpMX1JFR19EUExMX1RJRV9DVFJMX01BU0tcXHRcXHRaTF9SRUcoNSwgMHgzMSwgMSlcXG4rXFxuKyNkZWZpbmUgWkxfUkVHX0RQTExfVE9EX0NUUkwoX2lkeClcXHRcXHRcXHRcXHRcXHRcXFxcXFxuK1xcdFpMX1JFR19JRFgoX2lkeCwgNSwgMHgzOCwgMSwgWkwzMDczWF9NQVhfQ0hBTk5FTFMsIDEpXFxuKyNkZWZpbmUgWkxfRFBMTF9UT0RfQ1RSTF9TRU1cXHRcXHRcXHRCSVQoNClcXG4rI2RlZmluZSBaTF9EUExMX1RPRF9DVFJMX0NNRFxcdFxcdFxcdEdFTk1BU0soMywgMClcXG4rI2RlZmluZSBaTF9EUExMX1RPRF9DVFJMX0NNRF9XUl9ORVhUXzFIWlxcdDFcXG4rI2RlZmluZSBaTF9EUExMX1RPRF9DVFJMX0NNRF9SRF9DVVJSRU5UXFx0XFx0OFxcbisjZGVmaW5lIFpMX0RQTExfVE9EX0NUUkxfQ01EX1JEX05FWFRfMUhaXFx0OVxcbitcXG4gI2RlZmluZSBaTF9SRUdfRFBMTF9NRUFTX0NUUkxcXHRcXHRcXHRaTF9SRUcoNSwgMHg1MCwgMSlcXG4gI2RlZmluZSBaTF9EUExMX01FQVNfQ1RSTF9FTlxcdFxcdFxcdEJJVCgwKVxcbiAjZGVmaW5lIFpMX0RQTExfTUVBU19DVFJMX0FWR19GQUNUT1JcXHRcXHRHRU5NQVNLKDcsIDQpXFxuQEAgLTE5Myw2ICsyMDcsOSBAQFxcbiBcXG4gLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcXG4gICogUmVnaXN0ZXIgUGFnZXMgNi03LCBEUExMIERhdGFcXG4rICpcXG4rICogUGVyLWNoYW5uZWwgcmVnaXN0ZXJzIHdpdGggc3RyaWRlIDB4MjAuIENoYW5uZWxzIDAtMyByZXNpZGUgb24gcGFnZSA2LFxcbisgKiBjaGFubmVsIDQgb24gcGFnZSA3LlxcbiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cXG4gXFxuICNkZWZpbmUgWkxfUkVHX0RQTExfREZfT0ZGU0VUXzAzKF9pZHgpXFx0XFx0XFx0XFx0XFx0XFxcXFxcbkBAIC0yMDIsNiArMjE5LDI0IEBAXFxuIFxcdCgoX2lkeCkgXFx1MDAzYyA0ID8gWkxfUkVHX0RQTExfREZfT0ZGU0VUXzAzKF9pZHgpIDogWkxfUkVHX0RQTExfREZfT0ZGU0VUXzQpXFxuICNkZWZpbmUgWkxfRFBMTF9ERl9PRkZTRVRfVU5LTk9XTlxcdFM2NF9NSU5cXG4gXFxuKyNkZWZpbmUgWkxfUkVHX0RQTExfVElFX0RBVEFfMDMoX2lkeClcXHRcXHRcXHRcXHRcXHRcXFxcXFxuK1xcdFpMX1JFR19JRFgoX2lkeCwgNiwgMHgwQywgNiwgNCwgMHgyMClcXG4rI2RlZmluZSBaTF9SRUdfRFBMTF9USUVfREFUQV80XFx0XFx0XFx0WkxfUkVHKDcsIDB4MEMsIDYpXFxuKyNkZWZpbmUgWkxfUkVHX0RQTExfVElFX0RBVEEoX2lkeClcXHRcXHRcXHRcXHRcXHRcXFxcXFxuK1xcdCgoX2lkeCkgXFx1MDAzYyA0ID8gWkxfUkVHX0RQTExfVElFX0RBVEFfMDMoX2lkeCkgOiBaTF9SRUdfRFBMTF9USUVfREFUQV80KVxcbitcXG4rI2RlZmluZSBaTF9SRUdfRFBMTF9UT0RfU0VDXzAzKF9pZHgpXFx0XFx0XFx0XFx0XFx0XFxcXFxcbitcXHRaTF9SRUdfSURYKF9pZHgsIDYsIDB4MTIsIDYsIDQsIDB4MjApXFxuKyNkZWZpbmUgWkxfUkVHX0RQTExfVE9EX1NFQ180XFx0XFx0XFx0WkxfUkVHKDcsIDB4MTIsIDYpXFxuKyNkZWZpbmUgWkxfUkVHX0RQTExfVE9EX1NFQyhfaWR4KVxcdFxcdFxcdFxcdFxcdFxcXFxcXG4rXFx0KChfaWR4KSBcXHUwMDNjIDQgPyBaTF9SRUdfRFBMTF9UT0RfU0VDXzAzKF9pZHgpIDogWkxfUkVHX0RQTExfVE9EX1NFQ180KVxcbitcXG4rI2RlZmluZSBaTF9SRUdfRFBMTF9UT0RfTlNfMDMoX2lkeClcXHRcXHRcXHRcXHRcXHRcXFxcXFxuK1xcdFpMX1JFR19JRFgoX2lkeCwgNiwgMHgxOCwgNCwgNCwgMHgyMClcXG4rI2RlZmluZSBaTF9SRUdfRFBMTF9UT0RfTlNfNFxcdFxcdFxcdFpMX1JFRyg3LCAweDE4LCA0KVxcbisjZGVmaW5lIFpMX1JFR19EUExMX1RPRF9OUyhfaWR4KVxcdFxcdFxcdFxcdFxcdFxcXFxcXG4rXFx0KChfaWR4KSBcXHUwMDNjIDQgPyBaTF9SRUdfRFBMTF9UT0RfTlNfMDMoX2lkeCkgOiBaTF9SRUdfRFBMTF9UT0RfTlNfNClcXG4rXFxuIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxcbiAgKiBSZWdpc3RlciBQYWdlIDksIFN5bnRoIGFuZCBPdXRwdXRcXG4gICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xcbkBAIC0yMjEsNiArMjU2LDIzIEBAXFxuICNkZWZpbmUgWkxfT1VUUFVUX0NUUkxfRU5cXHRcXHRcXHRCSVQoMClcXG4gI2RlZmluZSBaTF9PVVRQVVRfQ1RSTF9TWU5USF9TRUxcXHRcXHRHRU5NQVNLKDYsIDQpXFxuIFxcbisjZGVmaW5lIFpMX1JFR19PVVRQVVRfU1RFUF9USU1FX01BU0tcXHRcXHRaTF9SRUcoOSwgMHgzNiwgMilcXG4rXFxuKyNkZWZpbmUgWkxfUkVHX09VVFBVVF9QSEFTRV9TVEVQX0NUUkxcXHRcXHRaTF9SRUcoOSwgMHgzOCwgMSlcXG4rI2RlZmluZSBaTF9PVVRQVVRfUEhBU0VfU1RFUF9DVFJMX0RQTExcXHRcXHRHRU5NQVNLKDYsIDQpXFxuKyNkZWZpbmUgWkxfT1VUUFVUX1BIQVNFX1NURVBfQ1RSTF9UT0RfU1RFUFxcdEJJVCgzKVxcbisjZGVmaW5lIFpMX09VVFBVVF9QSEFTRV9TVEVQX0NUUkxfT1BcXHRcXHRHRU5NQVNLKDEsIDApXFxuKyNkZWZpbmUgWkxfT1VUUFVUX1BIQVNFX1NURVBfQ1RSTF9PUF9OT05FXFx0MFxcbisjZGVmaW5lIFpMX09VVFBVVF9QSEFTRV9TVEVQX0NUUkxfT1BfUkVTRVRcXHQxXFxuKyNkZWZpbmUgWkxfT1VUUFVUX1BIQVNFX1NURVBfQ1RSTF9PUF9SRUFEXFx0MlxcbisjZGVmaW5lIFpMX09VVFBVVF9QSEFTRV9TVEVQX0NUUkxfT1BfV1JJVEVcXHQzXFxuK1xcbisjZGVmaW5lIFpMX1JFR19PVVRQVVRfUEhBU0VfU1RFUF9OVU1CRVJcXHRcXHRaTF9SRUcoOSwgMHgzOSwgMSlcXG4rXFxuKyNkZWZpbmUgWkxfUkVHX09VVFBVVF9QSEFTRV9TVEVQX01BU0tcXHRcXHRaTF9SRUcoOSwgMHgzYSwgMilcXG4rXFxuKyNkZWZpbmUgWkxfUkVHX09VVFBVVF9QSEFTRV9TVEVQX0RBVEFcXHRcXHRaTF9SRUcoOSwgMHgzYywgNClcXG4rXFxuIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXFxuICAqIFJlZ2lzdGVyIFBhZ2UgMTAsIFJlZiBNYWlsYm94XFxuICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMVQxNDowMjoyNS4yOTQ3MjAyNDVaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJiZXN0LWV4cGVuc2l2ZSIsIkR1cmF0aW9uIjo0MzU5NjE1ODEzNywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJaTDMwNzNYX0kyQ1wiLFxuICAgIFwiWkwzMDczWF9TUElcIixcbiAgICBcIlBUUF8xNTg4X0NMT0NLXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiemwzMDczeF9jaGFuX3RvZF9yZWFkXCIsXG4gICAgXCJ6bDMwNzN4X2NoYW5fdG9kX3dyaXRlXCIsXG4gICAgXCJ6bDMwNzN4X2NoYW5fdG9kX2FkanVzdFwiLFxuICAgIFwiemwzMDczeF9jaGFuX2RmX29mZnNldF9zZXRcIixcbiAgICBcInpsMzA3M3hfY2hhbl90aWVfd3JpdGVcIixcbiAgICBcInpsMzA3M3hfY2hhbl9waGFzZV9zdGVwXCIsXG4gICAgXCJ6bDMwNzN4X2RwbGxfcHRwX2dldHRpbWV4NjRcIixcbiAgICBcInpsMzA3M3hfZHBsbF9wdHBfc2V0dGltZTY0XCIsXG4gICAgXCJ6bDMwNzN4X2RwbGxfcHRwX2FkanRpbWVcIixcbiAgICBcInpsMzA3M3hfZHBsbF9wdHBfYWRqZmluZVwiLFxuICAgIFwiemwzMDczeF9kcGxsX3B0cF9hZGpwaGFzZVwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHMgUFRQIGNsb2NrIHN1cHBvcnQgdG8gdGhlIE1pY3JvY2hpcCBBenVyaXRlIERQTEwgZHJpdmVyICh6bDMwNzN4KS4gSXQgaW1wbGVtZW50cyBQVFAgY2xvY2sgb3BlcmF0aW9ucyBsaWtlIGdldHRpbWV4NjQsIHNldHRpbWU2NCwgYWRqdGltZSwgYWRqZmluZSwgYW5kIGFkanBoYXNlLiBUaGUgZHJpdmVyIGNhbiBiZSBpbnN0YW50aWF0ZWQgdmlhIEkyQyBvciBTUEkgaW4gUUVNVSwgYW5kIHRoZSBQVFAgb3BlcmF0aW9ucyBhcmUgcmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlIHZpYSBQVFAgaW9jdGxzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lXG5pZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5XG51c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLlxuXG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOlxuLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLlxuLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy5cbi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LlxuLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsXG4gIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cbi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsXG4gIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLlxuLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKVxuICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuXG5cbklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2hcbnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlxuXG5XaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzpcbjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuXG4gICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy5cbiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9uc1xuICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuXG4yLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS5cbiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbiAgIEFsc28gY2hlY2sgXCJkZXBlbmRzIG9uXCIgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzXG4gICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3NcbiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCA5NTdkY2ZkNjcxZThiYzU5NzcxOWMxMmNiMmIzMDFkMmY3NDlmZWQxXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFR1ZSBBdWcgMTEgMTQ6MDI6MjIgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9kcml2ZXJzL2RwbGwvemwzMDczeC9LY29uZmlnIGIvZHJpdmVycy9kcGxsL3psMzA3M3gvS2NvbmZpZ1xuaW5kZXggNWJiY2ExNDAwNTgxMy4uZGExNzMxYWNlMTVmMCAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvZHBsbC96bDMwNzN4L0tjb25maWdcbisrKyBiL2RyaXZlcnMvZHBsbC96bDMwNzN4L0tjb25maWdcbkBAIC0yLDcgKzIsNyBAQFxuIFxuIGNvbmZpZyBaTDMwNzNYXG4gXHR0cmlzdGF0ZSBcIk1pY3JvY2hpcCBBenVyaXRlIERQTEwvUFRQL1N5bmNFIGRldmljZXNcIiBpZiBDT01QSUxFX1RFU1Rcbi1cdGRlcGVuZHMgb24gTkVUXG4rXHRkZXBlbmRzIG9uIE5FVCBcdTAwMjZcdTAwMjYgUFRQXzE1ODhfQ0xPQ0tcbiBcdHNlbGVjdCBEUExMXG4gXHRzZWxlY3QgTkVUX0RFVkxJTktcbiBcdHNlbGVjdCBSRUdNQVBcbkBAIC0xNiw3ICsxNiw3IEBAIGNvbmZpZyBaTDMwNzNYXG4gXG4gY29uZmlnIFpMMzA3M1hfSTJDXG4gXHR0cmlzdGF0ZSBcIkkyQyBidXMgaW1wbGVtZW50YXRpb24gZm9yIE1pY3JvY2hpcCBBenVyaXRlIGRldmljZXNcIlxuLVx0ZGVwZW5kcyBvbiBJMkMgXHUwMDI2XHUwMDI2IE5FVFxuK1x0ZGVwZW5kcyBvbiBJMkMgXHUwMDI2XHUwMDI2IE5FVCBcdTAwMjZcdTAwMjYgUFRQXzE1ODhfQ0xPQ0tcbiBcdHNlbGVjdCBSRUdNQVBfSTJDXG4gXHRzZWxlY3QgWkwzMDczWFxuIFx0aGVscFxuQEAgLTI4LDcgKzI4LDcgQEAgY29uZmlnIFpMMzA3M1hfSTJDXG4gXG4gY29uZmlnIFpMMzA3M1hfU1BJXG4gXHR0cmlzdGF0ZSBcIlNQSSBidXMgaW1wbGVtZW50YXRpb24gZm9yIE1pY3JvY2hpcCBBenVyaXRlIGRldmljZXNcIlxuLVx0ZGVwZW5kcyBvbiBORVQgXHUwMDI2XHUwMDI2IFNQSVxuK1x0ZGVwZW5kcyBvbiBORVQgXHUwMDI2XHUwMDI2IFNQSSBcdTAwMjZcdTAwMjYgUFRQXzE1ODhfQ0xPQ0tcbiBcdHNlbGVjdCBSRUdNQVBfU1BJXG4gXHRzZWxlY3QgWkwzMDczWFxuIFx0aGVscFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYyBiL2RyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uY1xuaW5kZXggNGVjMmNmNTNkYWQ0Ni4uYmM2ZDcwZDI1ZDc5MSAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uY1xuKysrIGIvZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jXG5AQCAtMyw2ICszLDcgQEBcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9jbGVhbnVwLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9kZWxheS5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvZGV2X3ByaW50ay5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvcHRwX2Nsb2NrX2tlcm5lbC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvc3RyaW5nLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC90eXBlcy5oXHUwMDNlXG4gXG5AQCAtMTYyLDggKzE2Myw4IEBAIGludCB6bDMwNzN4X2NoYW5fbmNvX21vZGVfc2V0KHN0cnVjdCB6bDMwNzN4X2RldiAqemxkZXYsIHU4IGluZGV4KVxuICAqIEB6bGRldjogcG9pbnRlciB0byB6bDMwNzN4X2RldiBzdHJ1Y3R1cmVcbiAgKiBAaW5kZXg6IERQTEwgY2hhbm5lbCBpbmRleCB0byBmZXRjaCBzdGF0ZSBmb3JcbiAgKlxuLSAqIFJlYWRzIHRoZSBtb2RlX3JlZnNlbCByZWdpc3RlciBhbmQgcmVmZXJlbmNlIHByaW9yaXR5IHJlZ2lzdGVycyBmb3Jcbi0gKiB0aGUgZ2l2ZW4gRFBMTCBjaGFubmVsIGFuZCBzdG9yZXMgdGhlIHJhdyB2YWx1ZXMgZm9yIGxhdGVyIHVzZS5cbisgKiBSZWFkcyB0aGUgbW9kZV9yZWZzZWwsIHN0YXR1cyBhbmQgcmVmZXJlbmNlIHByaW9yaXR5IHJlZ2lzdGVycyBmb3JcbisgKiB0aGUgZ2l2ZW4gRFBMTCBjaGFubmVsIGFuZCBzdG9yZXMgdGhlIHZhbHVlcyBmb3IgbGF0ZXIgdXNlLlxuICAqXG4gICogUmV0dXJuOiAwIG9uIHN1Y2Nlc3MsIFx1MDAzYzAgb24gZXJyb3JcbiAgKi9cbkBAIC0yMzQsNiArMjM1LDMyNiBAQCBjb25zdCBzdHJ1Y3QgemwzMDczeF9jaGFuICp6bDMwNzN4X2NoYW5fc3RhdGVfZ2V0KHN0cnVjdCB6bDMwNzN4X2RldiAqemxkZXYsXG4gXHRyZXR1cm4gXHUwMDI2emxkZXYtXHUwMDNlY2hhbltpbmRleF07XG4gfVxuIFxuKy8qKlxuKyAqIHpsMzA3M3hfY2hhbl90b2RfcmVhZHlfd2FpdCAtIHdhaXQgZm9yIFRvRCBzZW1hcGhvcmUgdG8gY2xlYXJcbisgKiBAemxkZXY6IHBvaW50ZXIgdG8gemwzMDczeCBkZXZpY2VcbisgKiBAY2g6IERQTEwgY2hhbm5lbCBpbmRleFxuKyAqXG4rICogQ2hlY2tzIHRoZSBUb0QgY29udHJvbCByZWdpc3RlciBzZW1hcGhvcmUgYml0LiBJZiBjbGVhciwgcmV0dXJuc1xuKyAqIGltbWVkaWF0ZWx5LiBPdGhlcndpc2UgcG9sbHMgdW50aWwgdGhlIGJpdCBpcyBjbGVhcmVkIGJ5IHRoZSBkZXZpY2UuXG4rICpcbisgKiBSZXR1cm46XG4rICogKiAwXHRcdFx0LSBzdWNjZXNzXG4rICogKiAlLUVCVVNZXHRcdC0gdGltZW91dFxuKyAqICogJS1FT1BOT1RTVVBQXHQtIHVua25vd24gY29tbWFuZCBkZXRlY3RlZFxuKyAqICogbmVnYXRpdmVcdFx0LSBvdGhlciBlcnJvclxuKyAqL1xuK2ludCB6bDMwNzN4X2NoYW5fdG9kX3JlYWR5X3dhaXQoc3RydWN0IHpsMzA3M3hfZGV2ICp6bGRldiwgdTggY2gpXG4re1xuK1x0dW5zaWduZWQgaW50IHRpbWVvdXQ7XG4rXHR1OCB0b2RfY3RybDtcbitcdGludCByYztcbitcbitcdHJjID0gemwzMDczeF9yZWFkX3U4KHpsZGV2LCBaTF9SRUdfRFBMTF9UT0RfQ1RSTChjaCksIFx1MDAyNnRvZF9jdHJsKTtcbitcdGlmIChyYylcbitcdFx0cmV0dXJuIHJjO1xuK1xuK1x0aWYgKCEodG9kX2N0cmwgXHUwMDI2IFpMX0RQTExfVE9EX0NUUkxfU0VNKSlcbitcdFx0cmV0dXJuIDA7XG4rXG4rXHRzd2l0Y2ggKEZJRUxEX0dFVChaTF9EUExMX1RPRF9DVFJMX0NNRCwgdG9kX2N0cmwpKSB7XG4rXHRjYXNlIFpMX0RQTExfVE9EX0NUUkxfQ01EX1dSX05FWFRfMUhaOlxuK1x0XHR0aW1lb3V0ID0gWkxfUE9MTF9UT0RfV1JfVElNRU9VVF9VUztcbitcdFx0YnJlYWs7XG4rXHRjYXNlIFpMX0RQTExfVE9EX0NUUkxfQ01EX1JEX0NVUlJFTlQ6XG4rXHRjYXNlIFpMX0RQTExfVE9EX0NUUkxfQ01EX1JEX05FWFRfMUhaOlxuK1x0XHR0aW1lb3V0ID0gWkxfUE9MTF9UT0RfUkRfVElNRU9VVF9VUztcbitcdFx0YnJlYWs7XG4rXHRkZWZhdWx0OlxuK1x0XHRXQVJOX09OKDEpO1xuK1x0XHRyZXR1cm4gLUVPUE5PVFNVUFA7XG4rXHR9XG4rXG4rXHRyYyA9IHpsMzA3M3hfcG9sbF96ZXJvX3U4KHpsZGV2LCBaTF9SRUdfRFBMTF9UT0RfQ1RSTChjaCksXG4rXHRcdFx0XHQgIFpMX0RQTExfVE9EX0NUUkxfU0VNLCB0aW1lb3V0KTtcbitcbitcdHJldHVybiByYyA9PSAtRVRJTUVET1VUID8gLUVCVVNZIDogcmM7XG4rfVxuK1xuKy8qKlxuKyAqIHpsMzA3M3hfY2hhbl90b2RfY3RybCAtIGlzc3VlIFRvRCBjb21tYW5kXG4rICogQHpsZGV2OiBwb2ludGVyIHRvIHpsMzA3M3ggZGV2aWNlXG4rICogQGNoOiBEUExMIGNoYW5uZWwgaW5kZXhcbisgKiBAY21kOiBUb0QgY29tbWFuZCB0byBleGVjdXRlXG4rICpcbisgKiBXcml0ZXMgdGhlIHNlbWFwaG9yZSBhbmQgY29tbWFuZCB0byBkcGxsX3RvZF9jdHJsLiBUaGUgY2FsbGVyIG11c3RcbisgKiBlbnN1cmUgdGhlIGRldmljZSBpcyByZWFkeSAoc2VtYXBob3JlIGNsZWFyKSBiZWZvcmUgY2FsbGluZyBhbmRcbisgKiBtdXN0IHdhaXQgZm9yIGNvbXBsZXRpb24gaWYgbmVlZGVkLlxuKyAqXG4rICogUmV0dXJuOiAwIG9uIHN1Y2Nlc3MsIFx1MDAzYzAgb24gZXJyb3JcbisgKi9cbitzdGF0aWMgaW50IHpsMzA3M3hfY2hhbl90b2RfY3RybChzdHJ1Y3QgemwzMDczeF9kZXYgKnpsZGV2LCB1OCBjaCwgdTggY21kKVxuK3tcbitcdHJldHVybiB6bDMwNzN4X3dyaXRlX3U4KHpsZGV2LCBaTF9SRUdfRFBMTF9UT0RfQ1RSTChjaCksXG4rXHRcdFx0XHRaTF9EUExMX1RPRF9DVFJMX1NFTSB8IGNtZCk7XG4rfVxuK1xuKy8qKlxuKyAqIHpsMzA3M3hfY2hhbl90b2RfcmVhZCAtIHJlYWQgVG9EIHJlZ2lzdGVycyBhZnRlciBpc3N1aW5nIGEgY29tbWFuZFxuKyAqIEB6bGRldjogcG9pbnRlciB0byB6bDMwNzN4IGRldmljZVxuKyAqIEBjaDogRFBMTCBjaGFubmVsIGluZGV4XG4rICogQG5leHRfaHo6IGlmIHRydWUsIHJlYWQgcHJlZGljdGVkIFRvRCBhdCBuZXh0IDEgSHo7IG90aGVyd2lzZSByZWFkIGN1cnJlbnRcbisgKiBAdHM6IHRpbWVzcGVjIHRvIHN0b3JlIHRoZSByZXN1bHRcbisgKiBAc3RzOiBvcHRpb25hbCBzeXN0ZW0gdGltZXN0YW1wIHBhaXIgZm9yIGNyb3NzLXRpbWVzdGFtcGluZ1xuKyAqXG4rICogQ29udGV4dDogQ2FsbGVyIG11c3Qgc2VyaWFsaXplIGFsbCB6bDMwNzN4X2NoYW5fdG9kXyogY2FsbHMgZXh0ZXJuYWxseS5cbisgKiBSZXR1cm46IDAgb24gc3VjY2VzcywgXHUwMDNjMCBvbiBlcnJvclxuKyAqL1xuK2ludCB6bDMwNzN4X2NoYW5fdG9kX3JlYWQoc3RydWN0IHpsMzA3M3hfZGV2ICp6bGRldiwgdTggY2gsXG4rXHRcdFx0ICBib29sIG5leHRfaHosIHN0cnVjdCB0aW1lc3BlYzY0ICp0cyxcbitcdFx0XHQgIHN0cnVjdCBwdHBfc3lzdGVtX3RpbWVzdGFtcCAqc3RzKVxuK3tcbitcdHUzMiBuc2VjO1xuK1x0dTY0IHNlYztcbitcdHU4IGNtZDtcbitcdGludCByYztcbitcbitcdGlmIChuZXh0X2h6KVxuK1x0XHRjbWQgPSBaTF9EUExMX1RPRF9DVFJMX0NNRF9SRF9ORVhUXzFIWjtcbitcdGVsc2VcbitcdFx0Y21kID0gWkxfRFBMTF9UT0RfQ1RSTF9DTURfUkRfQ1VSUkVOVDtcbitcbitcdC8qIFdhaXQgZm9yIGFueSBwcmV2aW91cyBUb0Qgb3BlcmF0aW9uIHRvIGNvbXBsZXRlICovXG4rXHRyYyA9IHpsMzA3M3hfY2hhbl90b2RfcmVhZHlfd2FpdCh6bGRldiwgY2gpO1xuK1x0aWYgKHJjKVxuK1x0XHRyZXR1cm4gcmM7XG4rXG4rXHRwdHBfcmVhZF9zeXN0ZW1fcHJldHMoc3RzKTtcbitcdHJjID0gemwzMDczeF9jaGFuX3RvZF9jdHJsKHpsZGV2LCBjaCwgY21kKTtcbitcdGlmIChyYylcbitcdFx0cmV0dXJuIHJjO1xuK1xuK1x0cmMgPSB6bDMwNzN4X2NoYW5fdG9kX3JlYWR5X3dhaXQoemxkZXYsIGNoKTtcbitcdGlmIChyYylcbitcdFx0cmV0dXJuIHJjO1xuK1x0cHRwX3JlYWRfc3lzdGVtX3Bvc3R0cyhzdHMpO1xuK1xuK1x0cmMgPSB6bDMwNzN4X3JlYWRfdTQ4KHpsZGV2LCBaTF9SRUdfRFBMTF9UT0RfU0VDKGNoKSwgXHUwMDI2c2VjKTtcbitcdGlmIChyYylcbitcdFx0cmV0dXJuIHJjO1xuK1xuK1x0LyogSFcgbmFub3NlY29uZHMgYXJlIGFsd2F5cyBpbiBbMCwgTlNFQ19QRVJfU0VDKSByYW5nZSAqL1xuK1x0cmMgPSB6bDMwNzN4X3JlYWRfdTMyKHpsZGV2LCBaTF9SRUdfRFBMTF9UT0RfTlMoY2gpLCBcdTAwMjZuc2VjKTtcbitcdGlmIChyYylcbitcdFx0cmV0dXJuIHJjO1xuK1xuK1x0dHMtXHUwMDNldHZfc2VjID0gc2VjO1xuK1x0dHMtXHUwMDNldHZfbnNlYyA9IG5zZWM7XG4rXG4rXHRyZXR1cm4gMDtcbit9XG4rXG4rLyoqXG4rICogemwzMDczeF9jaGFuX3RvZF93cml0ZSAtIHdyaXRlIFRvRCByZWdpc3RlcnMgYW5kIHRyaWdnZXIgMSBIeiB1cGRhdGVcbisgKiBAemxkZXY6IHBvaW50ZXIgdG8gemwzMDczeCBkZXZpY2VcbisgKiBAY2g6IERQTEwgY2hhbm5lbCBpbmRleFxuKyAqIEB0czogdGltZSB0byBzZXRcbisgKlxuKyAqIENvbnRleHQ6IENhbGxlciBtdXN0IHNlcmlhbGl6ZSBhbGwgemwzMDczeF9jaGFuX3RvZF8qIGNhbGxzIGV4dGVybmFsbHkuXG4rICogUmV0dXJuOiAwIG9uIHN1Y2Nlc3MsIFx1MDAzYzAgb24gZXJyb3JcbisgKi9cbitpbnQgemwzMDczeF9jaGFuX3RvZF93cml0ZShzdHJ1Y3QgemwzMDczeF9kZXYgKnpsZGV2LCB1OCBjaCxcbitcdFx0XHQgICBzdHJ1Y3QgdGltZXNwZWM2NCB0cylcbit7XG4rXHRpbnQgcmM7XG4rXG4rXHQvKiBXYWl0IGZvciBhbnkgcHJldmlvdXMgVG9EIG9wZXJhdGlvbiB0byBjb21wbGV0ZSAqL1xuK1x0cmMgPSB6bDMwNzN4X2NoYW5fdG9kX3JlYWR5X3dhaXQoemxkZXYsIGNoKTtcbitcdGlmIChyYylcbitcdFx0cmV0dXJuIHJjO1xuK1xuK1x0cmMgPSB6bDMwNzN4X3dyaXRlX3U0OCh6bGRldiwgWkxfUkVHX0RQTExfVE9EX1NFQyhjaCksIHRzLnR2X3NlYyk7XG4rXHRpZiAocmMpXG4rXHRcdHJldHVybiByYztcbitcbitcdHJjID0gemwzMDczeF93cml0ZV91MzIoemxkZXYsIFpMX1JFR19EUExMX1RPRF9OUyhjaCksIHRzLnR2X25zZWMpO1xuK1x0aWYgKHJjKVxuK1x0XHRyZXR1cm4gcmM7XG4rXG4rXHRyZXR1cm4gemwzMDczeF9jaGFuX3RvZF9jdHJsKHpsZGV2LCBjaCxcbitcdFx0XHRcdCAgICAgWkxfRFBMTF9UT0RfQ1RSTF9DTURfV1JfTkVYVF8xSFopO1xuK31cbitcbisvKipcbisgKiB6bDMwNzN4X2NoYW5fdG9kX2FkanVzdCAtIGF0b21pYyBUb0QgcmVhZC1tb2RpZnktd3JpdGUgd2l0aCByb2xsb3ZlciBndWFyZFxuKyAqIEB6bGRldjogcG9pbnRlciB0byB6bDMwNzN4IGRldmljZVxuKyAqIEBjaDogRFBMTCBjaGFubmVsIGluZGV4XG4rICogQGRlbHRhOiB0aW1lIGFkanVzdG1lbnQgdG8gYXBwbHlcbisgKlxuKyAqIFJlYWRzIHRoZSBuZXh0LUh6IFRvRCBhbmQgY3VycmVudCBUb0QsIHRoZW4gY2hlY2tzIHdoZXRoZXIgZW5vdWdoIHRpbWVcbisgKiByZW1haW5zIGJlZm9yZSB0aGUgbmV4dCAxIEh6IHJvbGxvdmVyIHRvIHNhZmVseSBjb21wbGV0ZSB0aGUgd3JpdGUuXG4rICogUmUtcmVhZHMgaWYgdGhlIDEgSHogdGljayBjcm9zc2VkIGJldHdlZW4gdGhlIHR3byByZWFkcyBvciBpZiBsZXNzXG4rICogdGhhbiAyMCBtcyByZW1haW5zIGJlZm9yZSB0aGUgbmV4dCByb2xsb3Zlci4gQXBwbGllcyBAZGVsdGEgYW5kIHdyaXRlc1xuKyAqIHRoZSByZXN1bHQgYmFjay5cbisgKlxuKyAqIENvbnRleHQ6IENhbGxlciBtdXN0IHNlcmlhbGl6ZSBhbGwgemwzMDczeF9jaGFuX3RvZF8qIGNhbGxzIGV4dGVybmFsbHkuXG4rICogUmV0dXJuOiAwIG9uIHN1Y2Nlc3MsIFx1MDAzYzAgb24gZXJyb3JcbisgKi9cbitpbnQgemwzMDczeF9jaGFuX3RvZF9hZGp1c3Qoc3RydWN0IHpsMzA3M3hfZGV2ICp6bGRldiwgdTggY2gsXG4rXHRcdFx0ICAgIHN0cnVjdCB0aW1lc3BlYzY0IGRlbHRhKVxuK3tcbisjZGVmaW5lIFpMX1RPRF9NQVhfUkVUUklFU1x0MjBcbitcdHN0YXRpYyBjb25zdCBsb25nIHRocmVzaG9sZF9ucyA9IDIwICogTlNFQ19QRVJfTVNFQztcbitcdHN0cnVjdCB0aW1lc3BlYzY0IHRzX25leHQsIHRzX2N1ciwgZGlmZjtcbitcdGludCByYywgaTtcbitcbitcdGZvciAoaSA9IDA7IGkgXHUwMDNjIFpMX1RPRF9NQVhfUkVUUklFUzsgaSsrKSB7XG4rXHRcdHJjID0gemwzMDczeF9jaGFuX3RvZF9yZWFkKHpsZGV2LCBjaCwgdHJ1ZSwgXHUwMDI2dHNfbmV4dCwgTlVMTCk7XG4rXHRcdGlmIChyYylcbitcdFx0XHRyZXR1cm4gcmM7XG4rXG4rXHRcdHJjID0gemwzMDczeF9jaGFuX3RvZF9yZWFkKHpsZGV2LCBjaCwgZmFsc2UsIFx1MDAyNnRzX2N1ciwgTlVMTCk7XG4rXHRcdGlmIChyYylcbitcdFx0XHRyZXR1cm4gcmM7XG4rXG4rXHRcdC8qIEVuc3VyZSB0aGUgMSBIeiB0aWNrIGRpZCBub3QgY3Jvc3MgYmV0d2VlbiB0aGUgdHdvIHJlYWRzXG4rXHRcdCAqIGFuZCB0aGF0IGVub3VnaCBtYXJnaW4gcmVtYWlucyB0byBjb21wbGV0ZSB0aGUgd3JpdGUuXG4rXHRcdCAqL1xuK1x0XHRkaWZmID0gdGltZXNwZWM2NF9zdWIodHNfbmV4dCwgdHNfY3VyKTtcbitcdFx0aWYgKGRpZmYudHZfc2VjIFx1MDAzZSAwIHx8XG4rXHRcdCAgICAoIWRpZmYudHZfc2VjIFx1MDAyNlx1MDAyNiBkaWZmLnR2X25zZWMgXHUwMDNlPSB0aHJlc2hvbGRfbnMpKVxuK1x0XHRcdGJyZWFrO1xuK1x0fVxuK1x0aWYgKGkgPT0gWkxfVE9EX01BWF9SRVRSSUVTKSB7XG4rXHRcdGRldl93YXJuKHpsZGV2LVx1MDAzZWRldixcbitcdFx0XHQgXCJEUExMJXUgVG9EIGFkanVzdCBmYWlsZWQgdG8gZ2V0IHN0YWJsZSBtYXJnaW5cXG5cIixcbitcdFx0XHQgY2gpO1xuK1x0XHRyZXR1cm4gLUVCVVNZO1xuK1x0fVxuK1xuK1x0LyogQXBwbHkgZGVsdGEgdG8gdGhlIG5leHQtSHogVG9EICovXG4rXHR0c19uZXh0ID0gdGltZXNwZWM2NF9hZGQodHNfbmV4dCwgZGVsdGEpO1xuK1x0aWYgKCF0aW1lc3BlYzY0X3ZhbGlkKFx1MDAyNnRzX25leHQpKVxuK1x0XHRyZXR1cm4gLUVJTlZBTDtcbitcbitcdHJldHVybiB6bDMwNzN4X2NoYW5fdG9kX3dyaXRlKHpsZGV2LCBjaCwgdHNfbmV4dCk7XG4rI3VuZGVmIFpMX1RPRF9NQVhfUkVUUklFU1xuK31cbitcbisvKipcbisgKiB6bDMwNzN4X2NoYW5fZGZfb2Zmc2V0X3NldCAtIHdyaXRlIGRlbHRhIGZyZXF1ZW5jeSBvZmZzZXQgdG8gaGFyZHdhcmVcbisgKiBAemxkZXY6IHBvaW50ZXIgdG8gemwzMDczeCBkZXZpY2VcbisgKiBAY2g6IERQTEwgY2hhbm5lbCBpbmRleFxuKyAqIEBvZmZzZXQ6IGZyZXF1ZW5jeSBvZmZzZXQgaW4gMl4tNDggc3RlcHNcbisgKlxuKyAqIENvbnRleHQ6IENhbGxlciBtdXN0IGhvbGQgdGhlIHBlci1EUExMIGxvY2suXG4rICogUmV0dXJuOiAwIG9uIHN1Y2Nlc3MsIFx1MDAzYzAgb24gZXJyb3JcbisgKi9cbitpbnQgemwzMDczeF9jaGFuX2RmX29mZnNldF9zZXQoc3RydWN0IHpsMzA3M3hfZGV2ICp6bGRldiwgdTggY2gsIHM2NCBvZmZzZXQpXG4re1xuK1x0aW50IHJjO1xuK1xuK1x0cmMgPSB6bDMwNzN4X3dyaXRlX3U0OCh6bGRldiwgWkxfUkVHX0RQTExfREZfT0ZGU0VUKGNoKSwgb2Zmc2V0KTtcbitcdGlmICghcmMpXG4rXHRcdHpsZGV2LVx1MDAzZWNoYW5bY2hdLmRmX29mZnNldCA9IG9mZnNldDtcbitcbitcdHJldHVybiByYztcbit9XG4rXG4rLyoqXG4rICogemwzMDczeF9jaGFuX3RpZV93cml0ZSAtIGFkanVzdCBEUExMIHBoYXNlIHVzaW5nIFRJRSB3cml0ZVxuKyAqIEB6bGRldjogcG9pbnRlciB0byB6bDMwNzN4IGRldmljZVxuKyAqIEBjaDogRFBMTCBjaGFubmVsIGluZGV4XG4rICogQGRlbHRhX25zOiBwaGFzZSBhZGp1c3RtZW50IGluIG5hbm9zZWNvbmRzIChtdXN0IGJlIGluICgtMXMsIDFzKSlcbisgKlxuKyAqIENvbnZlcnRzIG5hbm9zZWNvbmRzIHRvIFRJRSB1bml0cyAoMC4wMSBwcykgYW5kIHdyaXRlcyBUSUUgZGF0YVxuKyAqIHRvIHRoZSBzcGVjaWZpZWQgY2hhbm5lbC5cbisgKlxuKyAqIFJldHVybjogMCBvbiBzdWNjZXNzLCBcdTAwM2MwIG9uIGVycm9yXG4rICovXG4raW50IHpsMzA3M3hfY2hhbl90aWVfd3JpdGUoc3RydWN0IHpsMzA3M3hfZGV2ICp6bGRldiwgdTggY2gsIHM2NCBkZWx0YV9ucylcbit7XG4rXHRzNjQgdGllX2RhdGE7XG4rXHRpbnQgcmM7XG4rXG4rXHRpZiAoV0FSTl9PTihkZWx0YV9ucyBcdTAwM2M9IC1OU0VDX1BFUl9TRUMgfHwgZGVsdGFfbnMgXHUwMDNlPSBOU0VDX1BFUl9TRUMpKVxuK1x0XHRyZXR1cm4gLUVSQU5HRTtcbitcbitcdGd1YXJkKG11dGV4KShcdTAwMjZ6bGRldi1cdTAwM2V0aWVfbG9jayk7XG4rXG4rXHQvKiBXYWl0IGZvciBhbnkgcHJldmlvdXMgVElFIG9wZXJhdGlvbiB0byBjb21wbGV0ZSAqL1xuK1x0cmMgPSB6bDMwNzN4X3BvbGxfemVyb191OCh6bGRldiwgWkxfUkVHX0RQTExfVElFX0NUUkwsXG4rXHRcdFx0XHQgIFpMX0RQTExfVElFX0NUUkxfT1AsXG4rXHRcdFx0XHQgIFpMX1BPTExfVElFX1dSX1RJTUVPVVRfVVMpO1xuK1x0aWYgKHJjKVxuK1x0XHRyZXR1cm4gcmM7XG4rXG4rXHQvKiBDb252ZXJ0IG5zIHRvIFRJRSB1bml0cyAoMC4wMSBwcyA9IDEwXi0xNCBzKSAqL1xuK1x0dGllX2RhdGEgPSBkZWx0YV9ucyAqIDEwMDAwMExMO1xuK1xuK1x0cmMgPSB6bDMwNzN4X3dyaXRlX3U0OCh6bGRldiwgWkxfUkVHX0RQTExfVElFX0RBVEEoY2gpLCB0aWVfZGF0YSk7XG4rXHRpZiAocmMpXG4rXHRcdHJldHVybiByYztcbitcbitcdHJjID0gemwzMDczeF93cml0ZV91OCh6bGRldiwgWkxfUkVHX0RQTExfVElFX0NUUkxfTUFTSywgQklUKGNoKSk7XG4rXHRpZiAocmMpXG4rXHRcdHJldHVybiByYztcbitcbitcdHJldHVybiB6bDMwNzN4X3dyaXRlX3U4KHpsZGV2LCBaTF9SRUdfRFBMTF9USUVfQ1RSTCxcbitcdFx0XHRcdFpMX0RQTExfVElFX0NUUkxfT1BfV1IpO1xuK31cbitcbisvKipcbisgKiB6bDMwNzN4X2NoYW5fcGhhc2Vfc3RlcCAtIGV4ZWN1dGUgb25lIG91dHB1dCBwaGFzZSBzdGVwIG9wZXJhdGlvblxuKyAqIEB6bGRldjogcG9pbnRlciB0byB6bDMwNzN4IGRldmljZVxuKyAqIEBjaDogRFBMTCBjaGFubmVsIGluZGV4XG4rICogQG91dF9tYXNrOiBiaXRtYXNrIG9mIG91dHB1dHMgdG8gc3RlcFxuKyAqIEBzdGVwX2N5Y2xlczogcGhhc2Ugc3RlcCBpbiBzeW50aGVzaXplciBjbG9jayBjeWNsZXNcbisgKiBAdG9kX3N0ZXA6IGFsc28gc3RlcCB0aGUgVG9EIGNvdW50ZXJcbisgKlxuKyAqIEFsbCBtYXNrZWQgb3V0cHV0cyBtdXN0IHVzZSBzeW50aGVzaXplcnMgb2YgdGhlIHNhbWUgZnJlcXVlbmN5IHNpbmNlXG4rICogdGhlIHN0ZXAgdmFsdWUgaXMgaW4gc3ludGhlc2l6ZXIgY2xvY2sgY3ljbGVzLlxuKyAqXG4rICogUmV0dXJuOiAwIG9uIHN1Y2Nlc3MsIFx1MDAzYzAgb24gZXJyb3JcbisgKi9cbitpbnQgemwzMDczeF9jaGFuX3BoYXNlX3N0ZXAoc3RydWN0IHpsMzA3M3hfZGV2ICp6bGRldiwgdTggY2gsXG4rXHRcdFx0ICAgIHUxNiBvdXRfbWFzaywgczMyIHN0ZXBfY3ljbGVzLFxuK1x0XHRcdCAgICBib29sIHRvZF9zdGVwKVxuK3tcbitcdHU4IGN0cmw7XG4rXHRpbnQgcmM7XG4rXG4rXHRndWFyZChtdXRleCkoXHUwMDI2emxkZXYtXHUwMDNlcGhhc2Vfc3RlcF9sb2NrKTtcbitcbitcdC8qIFdhaXQgZm9yIGFueSBwcmV2aW91cyBwaGFzZSBzdGVwIG9wZXJhdGlvbiB0byBjb21wbGV0ZSAqL1xuK1x0cmMgPSB6bDMwNzN4X3BvbGxfemVyb191OCh6bGRldiwgWkxfUkVHX09VVFBVVF9QSEFTRV9TVEVQX0NUUkwsXG4rXHRcdFx0XHQgIFpMX09VVFBVVF9QSEFTRV9TVEVQX0NUUkxfT1AsXG4rXHRcdFx0XHQgIFpMX1BPTExfUEhBU0VfU1RFUF9USU1FT1VUX1VTKTtcbitcdGlmIChyYylcbitcdFx0cmV0dXJuIHJjO1xuK1xuK1x0cmMgPSB6bDMwNzN4X3dyaXRlX3UzMih6bGRldiwgWkxfUkVHX09VVFBVVF9QSEFTRV9TVEVQX0RBVEEsXG4rXHRcdFx0ICAgICAgIHN0ZXBfY3ljbGVzKTtcbitcdGlmIChyYylcbitcdFx0cmV0dXJuIHJjO1xuK1xuK1x0cmMgPSB6bDMwNzN4X3dyaXRlX3UxNih6bGRldiwgWkxfUkVHX09VVFBVVF9QSEFTRV9TVEVQX01BU0ssIG91dF9tYXNrKTtcbitcdGlmIChyYylcbitcdFx0cmV0dXJuIHJjO1xuK1xuK1x0cmMgPSB6bDMwNzN4X3dyaXRlX3U4KHpsZGV2LCBaTF9SRUdfT1VUUFVUX1BIQVNFX1NURVBfTlVNQkVSLCAxKTtcbitcdGlmIChyYylcbitcdFx0cmV0dXJuIHJjO1xuK1xuK1x0Y3RybCA9IEZJRUxEX1BSRVAoWkxfT1VUUFVUX1BIQVNFX1NURVBfQ1RSTF9EUExMLCBjaCkgfFxuK1x0ICAgICAgIEZJRUxEX1BSRVAoWkxfT1VUUFVUX1BIQVNFX1NURVBfQ1RSTF9PUCxcbitcdFx0XHQgIFpMX09VVFBVVF9QSEFTRV9TVEVQX0NUUkxfT1BfV1JJVEUpO1xuK1x0aWYgKHRvZF9zdGVwKVxuK1x0XHRjdHJsIHw9IFpMX09VVFBVVF9QSEFTRV9TVEVQX0NUUkxfVE9EX1NURVA7XG4rXG4rXHRyZXR1cm4gemwzMDczeF93cml0ZV91OCh6bGRldiwgWkxfUkVHX09VVFBVVF9QSEFTRV9TVEVQX0NUUkwsIGN0cmwpO1xuK31cbitcbiAvKipcbiAgKiB6bDMwNzN4X2NoYW5fc3RhdGVfc2V0IC0gY29tbWl0IERQTEwgY2hhbm5lbCBzdGF0ZSBjaGFuZ2VzIHRvIGhhcmR3YXJlXG4gICogQHpsZGV2OiBwb2ludGVyIHRvIHpsMzA3M3hfZGV2IHN0cnVjdHVyZVxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uaCBiL2RyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uaFxuaW5kZXggZGM5YzZkOTViZGVlNy4uOTljM2I3MDg4ZjY3OCAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uaFxuKysrIGIvZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5oXG5AQCAtNSwxMCArNSwxMiBAQFxuIFxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2JpdGZpZWxkLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9zdGRkZWYuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L3RpbWU2NC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvdHlwZXMuaFx1MDAzZVxuIFxuICNpbmNsdWRlIFwicmVncy5oXCJcbiBcbitzdHJ1Y3QgcHRwX3N5c3RlbV90aW1lc3RhbXA7XG4gc3RydWN0IHpsMzA3M3hfZGV2O1xuIFxuIC8qKlxuQEAgLTQyLDYgKzQ0LDIxIEBAIGludCB6bDMwNzN4X2NoYW5fc3RhdGVfc2V0KHN0cnVjdCB6bDMwNzN4X2RldiAqemxkZXYsIHU4IGluZGV4LFxuIGludCB6bDMwNzN4X2NoYW5fc3RhdGVfdXBkYXRlKHN0cnVjdCB6bDMwNzN4X2RldiAqemxkZXYsIHU4IGluZGV4KTtcbiBpbnQgemwzMDczeF9jaGFuX25jb19tb2RlX3NldChzdHJ1Y3QgemwzMDczeF9kZXYgKnpsZGV2LCB1OCBpbmRleCk7XG4gXG4raW50IHpsMzA3M3hfY2hhbl90b2RfcmVhZHlfd2FpdChzdHJ1Y3QgemwzMDczeF9kZXYgKnpsZGV2LCB1OCBjaCk7XG4raW50IHpsMzA3M3hfY2hhbl90b2RfcmVhZChzdHJ1Y3QgemwzMDczeF9kZXYgKnpsZGV2LCB1OCBjaCxcbitcdFx0XHQgIGJvb2wgbmV4dF9oeiwgc3RydWN0IHRpbWVzcGVjNjQgKnRzLFxuK1x0XHRcdCAgc3RydWN0IHB0cF9zeXN0ZW1fdGltZXN0YW1wICpzdHMpO1xuK2ludCB6bDMwNzN4X2NoYW5fdG9kX3dyaXRlKHN0cnVjdCB6bDMwNzN4X2RldiAqemxkZXYsIHU4IGNoLFxuK1x0XHRcdCAgIHN0cnVjdCB0aW1lc3BlYzY0IHRzKTtcbitpbnQgemwzMDczeF9jaGFuX3RvZF9hZGp1c3Qoc3RydWN0IHpsMzA3M3hfZGV2ICp6bGRldiwgdTggY2gsXG4rXHRcdFx0ICAgIHN0cnVjdCB0aW1lc3BlYzY0IGRlbHRhKTtcbitpbnQgemwzMDczeF9jaGFuX3BoYXNlX3N0ZXAoc3RydWN0IHpsMzA3M3hfZGV2ICp6bGRldiwgdTggY2gsXG4rXHRcdFx0ICAgIHUxNiBvdXRfbWFzaywgczMyIHN0ZXBfY3ljbGVzLCBib29sIHRvZF9zdGVwKTtcbitcbitpbnQgemwzMDczeF9jaGFuX2RmX29mZnNldF9zZXQoc3RydWN0IHpsMzA3M3hfZGV2ICp6bGRldiwgdTggY2gsIHM2NCBvZmZzZXQpO1xuK1xuK2ludCB6bDMwNzN4X2NoYW5fdGllX3dyaXRlKHN0cnVjdCB6bDMwNzN4X2RldiAqemxkZXYsIHU4IGNoLCBzNjQgZGVsdGFfbnMpO1xuK1xuIC8qKlxuICAqIHpsMzA3M3hfY2hhbl9kZl9vZmZzZXRfZ2V0IC0gZ2V0IGNhY2hlZCBkZl9vZmZzZXQgdnMgdHJhY2tlZCByZWZlcmVuY2VcbiAgKiBAY2hhbjogcG9pbnRlciB0byBjaGFubmVsIHN0YXRlXG5AQCAtMjAwLDYgKzIxNywyMSBAQCBzdGF0aWMgaW5saW5lIGJvb2wgemwzMDczeF9jaGFuX21vZGVfaXNfcmVmbG9jayhjb25zdCBzdHJ1Y3QgemwzMDczeF9jaGFuICpjaGFuKVxuIFx0cmV0dXJuIHpsMzA3M3hfY2hhbl9tb2RlX2dldChjaGFuKSA9PSBaTF9EUExMX01PREVfUkVGU0VMX01PREVfUkVGTE9DSztcbiB9XG4gXG4rLyoqXG4rICogemwzMDczeF9jaGFuX21vZGVfc3VwcG9ydHNfdGllIC0gY2hlY2sgaWYgY2hhbm5lbCBtb2RlIHN1cHBvcnRzIFRJRSB3cml0ZVxuKyAqIEBjaGFuOiBwb2ludGVyIHRvIGNoYW5uZWwgc3RhdGVcbisgKlxuKyAqIFRJRSB3cml0ZSBpcyBzdXBwb3J0ZWQgaW4gQVVUTyBhbmQgUkVGTE9DSyBtb2RlcyByZWdhcmRsZXNzIG9mIGxvY2sgc3RhdGUuXG4rICpcbisgKiBSZXR1cm46IHRydWUgaWYgVElFIHdyaXRlIGlzIHN1cHBvcnRlZCwgZmFsc2Ugb3RoZXJ3aXNlXG4rICovXG4rc3RhdGljIGlubGluZSBib29sXG4remwzMDczeF9jaGFuX21vZGVfc3VwcG9ydHNfdGllKGNvbnN0IHN0cnVjdCB6bDMwNzN4X2NoYW4gKmNoYW4pXG4re1xuK1x0cmV0dXJuIHpsMzA3M3hfY2hhbl9tb2RlX2lzX2F1dG8oY2hhbikgfHxcbitcdFx0emwzMDczeF9jaGFuX21vZGVfaXNfcmVmbG9jayhjaGFuKTtcbit9XG4rXG4gLyoqXG4gICogemwzMDczeF9jaGFuX2lzX2hvX3JlYWR5IC0gY2hlY2sgaWYgaG9sZG92ZXIgaXMgcmVhZHlcbiAgKiBAY2hhbjogcG9pbnRlciB0byBjaGFubmVsIHN0YXRlXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9kcGxsL3psMzA3M3gvY29yZS5jIGIvZHJpdmVycy9kcGxsL3psMzA3M3gvY29yZS5jXG5pbmRleCA1YjJkNzdmMmMyMjg4Li4yMzBkZjA4ZTI3Y2QxIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9kcGxsL3psMzA3M3gvY29yZS5jXG4rKysgYi9kcml2ZXJzL2RwbGwvemwzMDczeC9jb3JlLmNcbkBAIC0zMjIsNyArMzIyLDcgQEAgaW50IHpsMzA3M3hfd3JpdGVfdTQ4KHN0cnVjdCB6bDMwNzN4X2RldiAqemxkZXYsIHVuc2lnbmVkIGludCByZWcsIHU2NCB2YWwpXG4gaW50IHpsMzA3M3hfcG9sbF96ZXJvX3U4KHN0cnVjdCB6bDMwNzN4X2RldiAqemxkZXYsIHVuc2lnbmVkIGludCByZWcsXG4gXHRcdFx0IHU4IG1hc2ssIHVuc2lnbmVkIGludCB0aW1lb3V0X3VzKVxuIHtcbi0jZGVmaW5lIFpMX1BPTExfU0xFRVBfVVMgMTBcbitcdHVuc2lnbmVkIGludCBzbGVlcF91cyA9IHRpbWVvdXRfdXMgLyA1MDtcbiBcdHVuc2lnbmVkIGludCB2YWw7XG4gXG4gXHQvKiBDaGVjayB0aGUgcmVnaXN0ZXIgaXMgOGJpdCAqL1xuQEAgLTMzNiw3ICszMzYsNyBAQCBpbnQgemwzMDczeF9wb2xsX3plcm9fdTgoc3RydWN0IHpsMzA3M3hfZGV2ICp6bGRldiwgdW5zaWduZWQgaW50IHJlZyxcbiBcdHJlZyA9IFpMX1JFR19BRERSKHJlZykgKyBaTF9SQU5HRV9PRkZTRVQ7XG4gXG4gXHRyZXR1cm4gcmVnbWFwX3JlYWRfcG9sbF90aW1lb3V0KHpsZGV2LVx1MDAzZXJlZ21hcCwgcmVnLCB2YWwsICEodmFsIFx1MDAyNiBtYXNrKSxcbi1cdFx0XHRcdFx0WkxfUE9MTF9TTEVFUF9VUywgdGltZW91dF91cyk7XG4rXHRcdFx0XHRcdHNsZWVwX3VzLCB0aW1lb3V0X3VzKTtcbiB9XG4gXG4gaW50IHpsMzA3M3hfbWJfb3Aoc3RydWN0IHpsMzA3M3hfZGV2ICp6bGRldiwgdW5zaWduZWQgaW50IG9wX3JlZywgdTggb3BfdmFsLFxuQEAgLTUxMSw2ICs1MTEsMTEgQEAgemwzMDczeF9kZXZfc3RhdGVfZmV0Y2goc3RydWN0IHpsMzA3M3hfZGV2ICp6bGRldilcbiBcdGludCByYztcbiBcdHU4IGk7XG4gXG4rXHRyYyA9IHpsMzA3M3hfcmVhZF91MTYoemxkZXYsIFpMX1JFR19PVVRQVVRfU1RFUF9USU1FX01BU0ssXG4rXHRcdFx0ICAgICAgXHUwMDI2emxkZXYtXHUwMDNlb3V0X3N0ZXBfdGltZV9tYXNrKTtcbitcdGlmIChyYylcbitcdFx0cmV0dXJuIHJjO1xuK1xuIFx0Zm9yIChpID0gMDsgaSBcdTAwM2MgWkwzMDczWF9OVU1fUkVGUzsgaSsrKSB7XG4gXHRcdHJjID0gemwzMDczeF9yZWZfc3RhdGVfZmV0Y2goemxkZXYsIGkpO1xuIFx0XHRpZiAocmMpIHtcbkBAIC0xMDM0LDYgKzEwMzksMTQgQEAgaW50IHpsMzA3M3hfZGV2X3Byb2JlKHN0cnVjdCB6bDMwNzN4X2RldiAqemxkZXYpXG4gXHQgKiBhbmQvb3IgcG9sbHMgYXJlIHJlcXVpcmVkIHRvIGJlIGRvbmUgYXRvbWljYWxseS5cbiBcdCAqL1xuIFx0cmMgPSBkZXZtX211dGV4X2luaXQoemxkZXYtXHUwMDNlZGV2LCBcdTAwMjZ6bGRldi1cdTAwM2VtdWx0aW9wX2xvY2spO1xuK1x0aWYgKHJjKVxuK1x0XHRyZXR1cm4gZGV2X2Vycl9wcm9iZSh6bGRldi1cdTAwM2VkZXYsIHJjLFxuK1x0XHRcdFx0ICAgICBcIkZhaWxlZCB0byBpbml0aWFsaXplIG11dGV4XFxuXCIpO1xuK1x0cmMgPSBkZXZtX211dGV4X2luaXQoemxkZXYtXHUwMDNlZGV2LCBcdTAwMjZ6bGRldi1cdTAwM2VwaGFzZV9zdGVwX2xvY2spO1xuK1x0aWYgKHJjKVxuK1x0XHRyZXR1cm4gZGV2X2Vycl9wcm9iZSh6bGRldi1cdTAwM2VkZXYsIHJjLFxuK1x0XHRcdFx0ICAgICBcIkZhaWxlZCB0byBpbml0aWFsaXplIG11dGV4XFxuXCIpO1xuK1x0cmMgPSBkZXZtX211dGV4X2luaXQoemxkZXYtXHUwMDNlZGV2LCBcdTAwMjZ6bGRldi1cdTAwM2V0aWVfbG9jayk7XG4gXHRpZiAocmMpXG4gXHRcdHJldHVybiBkZXZfZXJyX3Byb2JlKHpsZGV2LVx1MDAzZWRldiwgcmMsXG4gXHRcdFx0XHQgICAgIFwiRmFpbGVkIHRvIGluaXRpYWxpemUgbXV0ZXhcXG5cIik7XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9kcGxsL3psMzA3M3gvY29yZS5oIGIvZHJpdmVycy9kcGxsL3psMzA3M3gvY29yZS5oXG5pbmRleCA3OGRjMjA4ZjNlZWEyLi42N2MxMGUyNTk1MTE4IDEwMDY0NFxuLS0tIGEvZHJpdmVycy9kcGxsL3psMzA3M3gvY29yZS5oXG4rKysgYi9kcml2ZXJzL2RwbGwvemwzMDczeC9jb3JlLmhcbkBAIC0yNiw2ICsyNiwxMCBAQCBzdHJ1Y3QgemwzMDczeF9kcGxsO1xuICNkZWZpbmUgWkxfUE9MTF9IV1JFR19USU1FT1VUX1VTXHQoNTAgKiBVU0VDX1BFUl9NU0VDKVxuICNkZWZpbmUgWkxfUE9MTF9NQl9USU1FT1VUX1VTXHRcdCgzMCAqIFVTRUNfUEVSX01TRUMpXG4gI2RlZmluZSBaTF9QT0xMX1BIQVNFX0VSUl9USU1FT1VUX1VTXHQoNTAgKiBVU0VDX1BFUl9NU0VDKVxuKyNkZWZpbmUgWkxfUE9MTF9QSEFTRV9TVEVQX1RJTUVPVVRfVVNcdCgzMDAwICogVVNFQ19QRVJfTVNFQylcbisjZGVmaW5lIFpMX1BPTExfVElFX1dSX1RJTUVPVVRfVVNcdCgxMDAwICogVVNFQ19QRVJfTVNFQylcbisjZGVmaW5lIFpMX1BPTExfVE9EX1JEX1RJTUVPVVRfVVNcdCgzMCAqIFVTRUNfUEVSX01TRUMpXG4rI2RlZmluZSBaTF9QT0xMX1RPRF9XUl9USU1FT1VUX1VTXHQoMTAwMCAqIFVTRUNfUEVSX01TRUMpXG4gXG4gZW51bSB6bDMwNzN4X2ZsYWdzIHtcbiBcdFpMMzA3M1hfRkxBR19SRUZfUEhBU0VfQ09NUF8zMl9CSVQsXG5AQCAtNTUsNiArNTksOCBAQCBzdHJ1Y3QgemwzMDczeF9jaGlwX2luZm8ge1xuICAqIEByZWdtYXA6IHJlZ21hcCB0byBhY2Nlc3MgZGV2aWNlIHJlZ2lzdGVyc1xuICAqIEBpbmZvOiBkZXRlY3RlZCBjaGlwIGluZm9cbiAgKiBAbXVsdGlvcF9sb2NrOiB0byBzZXJpYWxpemUgbXVsdGlwbGUgcmVnaXN0ZXIgb3BlcmF0aW9uc1xuKyAqIEB0aWVfbG9jazogdG8gc2VyaWFsaXplIFRJRSB3cml0ZSBvcGVyYXRpb25zXG4rICogQHBoYXNlX3N0ZXBfbG9jazogdG8gc2VyaWFsaXplIG91dHB1dCBwaGFzZSBzdGVwIG9wZXJhdGlvbnNcbiAgKiBAcmVmOiBhcnJheSBvZiBpbnB1dCByZWZlcmVuY2VzJyBpbnZhcmlhbnRzXG4gICogQG91dDogYXJyYXkgb2Ygb3V0cycgaW52YXJpYW50c1xuICAqIEBzeW50aDogYXJyYXkgb2Ygc3ludGhzJyBpbnZhcmlhbnRzXG5AQCAtNjMsNiArNjksNyBAQCBzdHJ1Y3QgemwzMDczeF9jaGlwX2luZm8ge1xuICAqIEBrd29ya2VyOiB0aHJlYWQgZm9yIHBlcmlvZGljIHdvcmtcbiAgKiBAd29yazogcGVyaW9kaWMgd29ya1xuICAqIEBjbG9ja19pZDogY2xvY2sgaWQgb2YgdGhlIGRldmljZVxuKyAqIEBvdXRfc3RlcF90aW1lX21hc2s6IG91dHB1dCBzdGVwLXRpbWUgbWFzayAoZGV2aWNlLWdsb2JhbClcbiAgKiBAcGhhc2VfYXZnX2ZhY3RvcjogcGhhc2Ugb2Zmc2V0IG1lYXN1cmVtZW50IGF2ZXJhZ2luZyBmYWN0b3JcbiAgKiBAZnJlcV9tb25pdG9yOiBpcyBmcmVxdWVuY3kgbW9uaXRvciBlbmFibGVkXG4gICovXG5AQCAtNzEsNiArNzgsOCBAQCBzdHJ1Y3QgemwzMDczeF9kZXYge1xuIFx0c3RydWN0IHJlZ21hcFx0XHRcdCpyZWdtYXA7XG4gXHRjb25zdCBzdHJ1Y3QgemwzMDczeF9jaGlwX2luZm9cdCppbmZvO1xuIFx0c3RydWN0IG11dGV4XHRcdFx0bXVsdGlvcF9sb2NrO1xuK1x0c3RydWN0IG11dGV4XHRcdFx0dGllX2xvY2s7XG4rXHRzdHJ1Y3QgbXV0ZXhcdFx0XHRwaGFzZV9zdGVwX2xvY2s7XG4gXG4gXHQvKiBJbnZhcmlhbnRzICovXG4gXHRzdHJ1Y3QgemwzMDczeF9yZWZcdHJlZltaTDMwNzNYX05VTV9SRUZTXTtcbkBAIC04Nyw2ICs5Niw3IEBAIHN0cnVjdCB6bDMwNzN4X2RldiB7XG4gXG4gXHQvKiBQZXItY2hpcCBwYXJhbWV0ZXJzICovXG4gXHR1NjRcdFx0XHRjbG9ja19pZDtcbitcdHUxNlx0XHRcdG91dF9zdGVwX3RpbWVfbWFzaztcbiBcdHU4XHRcdFx0cGhhc2VfYXZnX2ZhY3RvcjtcbiBcdGJvb2xcdFx0XHRmcmVxX21vbml0b3I7XG4gfTtcbkBAIC0zMDgsNiArMzE4LDE5IEBAIHpsMzA3M3hfZGV2X291dF9pc19lbmFibGVkKHN0cnVjdCB6bDMwNzN4X2RldiAqemxkZXYsIHU4IGluZGV4KVxuIFx0cmV0dXJuIHpsMzA3M3hfc3ludGhfaXNfZW5hYmxlZChzeW50aCkgXHUwMDI2XHUwMDI2IHpsMzA3M3hfb3V0X2lzX2VuYWJsZWQob3V0KTtcbiB9XG4gXG4rLyoqXG4rICogemwzMDczeF9kZXZfb3V0X2lzX3N0ZXBwZWQgLSBjaGVjayBpZiBvdXRwdXQgaXMgaW4gc3RlcC10aW1lIG1hc2tcbisgKiBAemxkZXY6IHBvaW50ZXIgdG8gemwzMDczeCBkZXZpY2VcbisgKiBAaW5kZXg6IG91dHB1dCBpbmRleFxuKyAqXG4rICogUmV0dXJuOiB0cnVlIGlmIG91dHB1dCBpcyBhZmZlY3RlZCBieSBzdGVwLXRpbWUgb3BlcmF0aW9uc1xuKyAqL1xuK3N0YXRpYyBpbmxpbmUgYm9vbFxuK3psMzA3M3hfZGV2X291dF9pc19zdGVwcGVkKHN0cnVjdCB6bDMwNzN4X2RldiAqemxkZXYsIHU4IGluZGV4KVxuK3tcbitcdHJldHVybiAhISh6bGRldi1cdTAwM2VvdXRfc3RlcF90aW1lX21hc2sgXHUwMDI2IEJJVChpbmRleCkpO1xuK31cbitcbiAvKipcbiAgKiB6bDMwNzN4X2Rldl9vdXRfZHBsbF9nZXQgLSBnZXQgRFBMTCBJRCB0aGUgb3V0cHV0IGlzIGRyaXZlbiBieVxuICAqIEB6bGRldjogcG9pbnRlciB0byB6bDMwNzN4IGRldmljZVxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvZHBsbC96bDMwNzN4L2RwbGwuYyBiL2RyaXZlcnMvZHBsbC96bDMwNzN4L2RwbGwuY1xuaW5kZXggMDQ4OGFlNmFjNDg2Yy4uODMwMWFkMzQzNjU4YSAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvZHBsbC96bDMwNzN4L2RwbGwuY1xuKysrIGIvZHJpdmVycy9kcGxsL3psMzA3M3gvZHBsbC5jXG5AQCAtMiw2ICsyLDcgQEBcbiBcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9iaXRzLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9iaXRmaWVsZC5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvY2xlYW51cC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvYnVnLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9jb250YWluZXJfb2YuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2Rldl9wcmludGsuaFx1MDAzZVxuQEAgLTEzLDYgKzE0LDcgQEBcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9uZXRsaW5rLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3Byb3BlcnR5LmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9wdHBfY2xvY2tfa2VybmVsLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9zbGFiLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9zcHJpbnRmLmhcdTAwM2VcbiBcbkBAIC0yMjc1LDQ1ICsyMjc3LDM4NCBAQCB6bDMwNzN4X2RwbGxfaW5pdF9maW5lX3BoYXNlX2FkanVzdChzdHJ1Y3QgemwzMDczeF9kZXYgKnpsZGV2KVxuIFx0cmV0dXJuIHpsMzA3M3hfd3JpdGVfdTgoemxkZXYsIFpMX1JFR19TWU5USF9QSEFTRV9TSElGVF9DVFJMLCAweDAxKTtcbiB9XG4gXG4rLyogTWF4aW11bSBmcmVxdWVuY3kgYWRqdXN0bWVudDogKy0xJSBvZiBub21pbmFsIGluIHBwYiAqL1xuKyNkZWZpbmUgWkwzMDczWF9EUExMX1BUUF9NQVhfQURKXHQxMDAwMDAwMFxuK1xuIC8qKlxuLSAqIHpsMzA3M3hfZHBsbF9hbGxvYyAtIGFsbG9jYXRlIERQTEwgZGV2aWNlXG4tICogQHpsZGV2OiBwb2ludGVyIHRvIHpsMzA3M3ggZGV2aWNlXG4tICogQGNoOiBEUExMIGNoYW5uZWwgbnVtYmVyXG4rICogemwzMDczeF9kcGxsX3B0cF9nZXR0aW1leDY0IC0gcmVhZCBjdXJyZW50IHRpbWUgZnJvbSBUb0QgY291bnRlcnNcbisgKiBAaW5mbzogUFRQIGNsb2NrIGluZm9cbisgKiBAdHM6IHRpbWVzcGVjIHRvIHN0b3JlIGN1cnJlbnQgdGltZVxuKyAqIEBzdHM6IG9wdGlvbmFsIHN5c3RlbSB0aW1lc3RhbXAgcGFpciBmb3IgY3Jvc3MtdGltZXN0YW1waW5nXG4gICpcbi0gKiBBbGxvY2F0ZXMgRFBMTCBkZXZpY2Ugc3RydWN0dXJlIGZvciBnaXZlbiBEUExMIGNoYW5uZWwuXG4rICogUmV0dXJuOiAwIG9uIHN1Y2Nlc3MsIFx1MDAzYzAgb24gZXJyb3JcbisgKi9cbitzdGF0aWMgaW50IHpsMzA3M3hfZHBsbF9wdHBfZ2V0dGltZXg2NChzdHJ1Y3QgcHRwX2Nsb2NrX2luZm8gKmluZm8sXG4rXHRcdFx0XHQgICAgICAgc3RydWN0IHRpbWVzcGVjNjQgKnRzLFxuK1x0XHRcdFx0ICAgICAgIHN0cnVjdCBwdHBfc3lzdGVtX3RpbWVzdGFtcCAqc3RzKVxuK3tcbitcdHN0cnVjdCB6bDMwNzN4X2RwbGwgKnpsZHBsbCA9IGNvbnRhaW5lcl9vZihpbmZvLCBzdHJ1Y3QgemwzMDczeF9kcGxsLFxuK1x0XHRcdFx0XHRcdCAgIHB0cF9pbmZvKTtcbitcbitcdGd1YXJkKG11dGV4KShcdTAwMjZ6bGRwbGwtXHUwMDNlbG9jayk7XG4rXG4rXHRyZXR1cm4gemwzMDczeF9jaGFuX3RvZF9yZWFkKHpsZHBsbC1cdTAwM2VkZXYsIHpsZHBsbC1cdTAwM2VpZCwgZmFsc2UsIHRzLCBzdHMpO1xuK31cbitcbisvKipcbisgKiB6bDMwNzN4X2RwbGxfcHRwX3NldHRpbWU2NCAtIHNldCBUb0QgY291bnRlcnMgdG8gZ2l2ZW4gdGltZVxuKyAqIEBpbmZvOiBQVFAgY2xvY2sgaW5mb1xuKyAqIEB0czogdGltZXNwZWMgd2l0aCB0aW1lIHRvIHNldFxuICAqXG4tICogUmV0dXJuOiBwb2ludGVyIHRvIERQTEwgZGV2aWNlIG9uIHN1Y2Nlc3MsIGVycm9yIHBvaW50ZXIgb24gZXJyb3JcbisgKiBSZXR1cm46IDAgb24gc3VjY2VzcywgXHUwMDNjMCBvbiBlcnJvclxuICAqL1xuLXN0cnVjdCB6bDMwNzN4X2RwbGwgKlxuLXpsMzA3M3hfZHBsbF9hbGxvYyhzdHJ1Y3QgemwzMDczeF9kZXYgKnpsZGV2LCB1OCBjaClcbitzdGF0aWMgaW50IHpsMzA3M3hfZHBsbF9wdHBfc2V0dGltZTY0KHN0cnVjdCBwdHBfY2xvY2tfaW5mbyAqaW5mbyxcbitcdFx0XHRcdCAgICAgIGNvbnN0IHN0cnVjdCB0aW1lc3BlYzY0ICp0cylcbiB7XG4tXHRzdHJ1Y3QgemwzMDczeF9kcGxsICp6bGRwbGw7XG4rXHRzdHJ1Y3QgemwzMDczeF9kcGxsICp6bGRwbGwgPSBjb250YWluZXJfb2YoaW5mbywgc3RydWN0IHpsMzA3M3hfZHBsbCxcbitcdFx0XHRcdFx0XHQgICBwdHBfaW5mbyk7XG4gXG4tXHR6bGRwbGwgPSBremFsbG9jX29iaigqemxkcGxsKTtcbi1cdGlmICghemxkcGxsKVxuLVx0XHRyZXR1cm4gRVJSX1BUUigtRU5PTUVNKTtcbitcdGd1YXJkKG11dGV4KShcdTAwMjZ6bGRwbGwtXHUwMDNlbG9jayk7XG4gXG4tXHR6bGRwbGwtXHUwMDNlZGV2ID0gemxkZXY7XG4tXHR6bGRwbGwtXHUwMDNlaWQgPSBjaDtcbi1cdG11dGV4X2luaXQoXHUwMDI2emxkcGxsLVx1MDAzZWxvY2spO1xuLVx0SU5JVF9MSVNUX0hFQUQoXHUwMDI2emxkcGxsLVx1MDAzZXBpbnMpO1xuK1x0cmV0dXJuIHpsMzA3M3hfY2hhbl90b2Rfd3JpdGUoemxkcGxsLVx1MDAzZWRldiwgemxkcGxsLVx1MDAzZWlkLCAqdHMpO1xuK31cbiBcbi1cdHJldHVybiB6bGRwbGw7XG4rLyoqXG4rICogemwzMDczeF9kcGxsX3B0cF9hZGp0aW1lX3BoYXNlX3N0ZXAgLSBhZGp1c3Qgc3ViLXNlY29uZCB0aW1lIHZpYSBwaGFzZSBzdGVwXG4rICogQHpsZHBsbDogRFBMTCBjaGFubmVsXG4rICogQGRlbHRhOiB0aW1lIGFkanVzdG1lbnQgaW4gbmFub3NlY29uZHMgKG11c3QgYmUgd2l0aGluICgtTlNFQ19QRVJfU0VDLFxuKyAqICAgICAgICAgTlNFQ19QRVJfU0VDKSlcbisgKlxuKyAqIFVzZXMgdGhlIG91dHB1dCBwaGFzZSBzdGVwIG1lY2hhbmlzbSB3aXRoIHRvZF9zdGVwPTEgdG8gYWRqdXN0IGJvdGhcbisgKiB0aGUgb3V0cHV0IGNsb2NrIHBoYXNlIGFuZCB0aGUgVG9EIGNvdW50ZXIgc2ltdWx0YW5lb3VzbHkuIFRoaXMga2VlcHNcbisgKiBvdXRwdXRzIGFuZCBUb0QgY29oZXJlbnQuIE9ubHkgdmFsaWQgZm9yIE5DTy5cbisgKlxuKyAqIE91dHB1dHMgYXJlIGdyb3VwZWQgYnkgc3ludGhlc2l6ZXIgc2luY2UgdGhlIHBoYXNlIHN0ZXAgdmFsdWUgaXMgaW5cbisgKiBzeW50aGVzaXplciBjbG9jayBjeWNsZXMuIFRoZSBmaXJzdCBzeW50aCBncm91cCB3aXRoIGVuYWJsZWQgb3V0cHV0c1xuKyAqIHVzZXMgdG9kX3N0ZXAgdG8gYWRqdXN0IGJvdGggb3V0cHV0cyBhbmQgdGhlIFRvRCBjb3VudGVyLiBSZW1haW5pbmdcbisgKiBncm91cHMgc3RlcCBvdXRwdXRzIG9ubHkuIElmIG5vIHN5bnRoIGhhcyBlbmFibGVkIG91dHB1dHMsIHRoZSBUb0RcbisgKiBjb3VudGVyIGlzIHN0ZXBwZWQgYWxvbmUgdXNpbmcgYW4gZW1wdHkgb3V0cHV0IG1hc2sgKHRoZSBGVyB1c2VzXG4rICogdGhlIGZpcnN0IGVuYWJsZWQgc3ludGgncyBwZXJpb2QgZm9yIHRoZSBjb252ZXJzaW9uKS5cbisgKlxuKyAqIFJldHVybjpcbisgKiAqICUwXHRcdFx0LSBzdWNjZXNzIChvciBwYXJ0aWFsIHN1Y2Nlc3MgaWYgYSBsYXRlciBzeW50aCBncm91cFxuKyAqXHRcdFx0ICBmYWlsZWQgYWZ0ZXIgdGhlIGZpcnN0IHdhcyBhbHJlYWR5IHN0ZXBwZWQpXG4rICogKiAlLUVPUE5PVFNVUFBcdC0gbm8gc3ludGhzIGF2YWlsYWJsZVxuKyAqICogbmVnYXRpdmVcdFx0LSBlcnJvclxuKyAqL1xuK3N0YXRpYyBpbnQgemwzMDczeF9kcGxsX3B0cF9hZGp0aW1lX3BoYXNlX3N0ZXAoc3RydWN0IHpsMzA3M3hfZHBsbCAqemxkcGxsLFxuK1x0XHRcdFx0XHQgICAgICAgczY0IGRlbHRhKVxuK3tcbitcdHUxNiBzeW50aF9tYXNrW1pMMzA3M1hfTlVNX1NZTlRIU10gPSB7fTtcbitcdHN0cnVjdCB6bDMwNzN4X2RldiAqemxkZXYgPSB6bGRwbGwtXHUwMDNlZGV2O1xuK1x0Y29uc3Qgc3RydWN0IHpsMzA3M3hfc3ludGggKnN5bnRoO1xuK1x0c3RydWN0IHpsMzA3M3hfZHBsbF9waW4gKnBpbjtcbitcdHUzMiBmaXJzdF9zeW50aF9mcmVxID0gMDtcbitcdGJvb2wgdG9kX3N0ZXBwZWQgPSBmYWxzZTtcbitcdHMzMiBzdGVwX2N5Y2xlcztcbitcdHUzMiBzeW50aF9mcmVxO1xuK1x0aW50IHJjO1xuK1x0dTggaTtcbitcbitcdC8qIEJ1aWxkIHBlci1zeW50aCBvdXRwdXQgbWFza3MgZnJvbSByZWdpc3RlcmVkIG91dHB1dCBwaW5zICovXG4rXHRsaXN0X2Zvcl9lYWNoX2VudHJ5KHBpbiwgXHUwMDI2emxkcGxsLVx1MDAzZXBpbnMsIGxpc3QpIHtcbitcdFx0dTggb3V0X2lkLCBzeW50aF9pZDtcbitcbitcdFx0aWYgKHpsMzA3M3hfZHBsbF9pc19pbnB1dF9waW4ocGluKSlcbitcdFx0XHRjb250aW51ZTtcbitcbitcdFx0b3V0X2lkID0gemwzMDczeF9vdXRwdXRfcGluX291dF9nZXQocGluLVx1MDAzZWlkKTtcbitcbitcdFx0aWYgKCF6bDMwNzN4X2Rldl9vdXRfaXNfc3RlcHBlZCh6bGRldiwgb3V0X2lkKSlcbitcdFx0XHRjb250aW51ZTtcbitcbitcdFx0c3ludGhfaWQgPSB6bDMwNzN4X2Rldl9vdXRfc3ludGhfZ2V0KHpsZGV2LCBvdXRfaWQpO1xuK1x0XHRpZiAoc3ludGhfaWQgXHUwMDNlPSBaTDMwNzNYX05VTV9TWU5USFMpIHtcbitcdFx0XHRkZXZfd2Fybih6bGRldi1cdTAwM2VkZXYsIFwiVW5leHBlY3RlZCBzeW50aCBpZCBmb3IgT1VUJXVcXG5cIixcbitcdFx0XHRcdCBvdXRfaWQpO1xuK1x0XHRcdGNvbnRpbnVlO1xuK1x0XHR9XG4rXHRcdHN5bnRoX21hc2tbc3ludGhfaWRdIHw9IEJJVChvdXRfaWQpO1xuK1x0fVxuK1xuK1x0LyogUHJvY2VzcyBlYWNoIHN5bnRoIGdyb3VwICovXG4rXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBaTDMwNzNYX05VTV9TWU5USFM7IGkrKykge1xuK1x0XHRzeW50aCA9IHpsMzA3M3hfc3ludGhfc3RhdGVfZ2V0KHpsZGV2LCBpKTtcbitcdFx0aWYgKCF6bDMwNzN4X3N5bnRoX2lzX2VuYWJsZWQoc3ludGgpIHx8XG4rXHRcdCAgICB6bDMwNzN4X3N5bnRoX2RwbGxfZ2V0KHN5bnRoKSAhPSB6bGRwbGwtXHUwMDNlaWQpXG4rXHRcdFx0Y29udGludWU7XG4rXG4rXHRcdHN5bnRoX2ZyZXEgPSB6bDMwNzN4X3N5bnRoX2ZyZXFfZ2V0KHN5bnRoKTtcbitcbitcdFx0LyogUmVtZW1iZXIgZmlyc3QgZW5hYmxlZCBzeW50aCBmcmVxIGZvciBUb0Qtb25seSBmYWxsYmFjayAqL1xuK1x0XHRpZiAoIWZpcnN0X3N5bnRoX2ZyZXEpXG4rXHRcdFx0Zmlyc3Rfc3ludGhfZnJlcSA9IHN5bnRoX2ZyZXE7XG4rXG4rXHRcdGlmICghc3ludGhfbWFza1tpXSlcbitcdFx0XHRjb250aW51ZTtcbitcbitcdFx0LyogU2FmZSBmb3IgczMyOiBtYXggc3ludGggZnJlcSBpcyA3NTAgTUh6ICovXG4rXHRcdHN0ZXBfY3ljbGVzID0gZGl2X3M2NChkZWx0YSAqIHN5bnRoX2ZyZXEsIE5TRUNfUEVSX1NFQyk7XG4rXG4rXHRcdHJjID0gemwzMDczeF9jaGFuX3BoYXNlX3N0ZXAoemxkZXYsIHpsZHBsbC1cdTAwM2VpZCxcbitcdFx0XHRcdFx0ICAgICBzeW50aF9tYXNrW2ldLCBzdGVwX2N5Y2xlcyxcbitcdFx0XHRcdFx0ICAgICAhdG9kX3N0ZXBwZWQpO1xuK1x0XHRpZiAocmMpIHtcbitcdFx0XHRpZiAodG9kX3N0ZXBwZWQpIHtcbitcdFx0XHRcdGRldl93YXJuKHpsZGV2LVx1MDAzZWRldixcbitcdFx0XHRcdFx0IFwiUGFydGlhbCBwaGFzZSBzdGVwIGZhaWx1cmVcXG5cIik7XG4rXHRcdFx0XHRyZXR1cm4gMDtcbitcdFx0XHR9XG4rXHRcdFx0cmV0dXJuIHJjO1xuK1x0XHR9XG4rXHRcdHRvZF9zdGVwcGVkID0gdHJ1ZTtcbitcdH1cbitcbitcdGlmICghZmlyc3Rfc3ludGhfZnJlcSlcbitcdFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xuK1xuK1x0LyogTm8gZW5hYmxlZCBvdXRwdXRzIGZvdW5kOyBzdGVwIFRvRCBjb3VudGVyIG9ubHkgdXNpbmcgdGhlXG4rXHQgKiBmaXJzdCBlbmFibGVkIHN5bnRoJ3MgcGVyaW9kIChlbXB0eSBvdXRwdXQgbWFzaykuXG4rXHQgKi9cbitcdGlmICghdG9kX3N0ZXBwZWQpIHtcbitcdFx0c3RlcF9jeWNsZXMgPSBkaXZfczY0KGRlbHRhICogZmlyc3Rfc3ludGhfZnJlcSwgTlNFQ19QRVJfU0VDKTtcbitcdFx0cmV0dXJuIHpsMzA3M3hfY2hhbl9waGFzZV9zdGVwKHpsZGV2LCB6bGRwbGwtXHUwMDNlaWQsIDAsXG4rXHRcdFx0XHRcdCAgICAgICBzdGVwX2N5Y2xlcywgdHJ1ZSk7XG4rXHR9XG4rXG4rXHRyZXR1cm4gMDtcbiB9XG4gXG4gLyoqXG4tICogemwzMDczeF9kcGxsX2ZyZWUgLSBmcmVlIERQTEwgZGV2aWNlXG4tICogQHpsZHBsbDogcG9pbnRlciB0byB6bDMwNzN4X2RwbGwgc3RydWN0dXJlXG4rICogemwzMDczeF9kcGxsX3B0cF9hZGp0aW1lIC0gYWRqdXN0IFBUUCBjbG9jayB0aW1lXG4rICogQGluZm86IFBUUCBjbG9jayBpbmZvXG4rICogQGRlbHRhOiB0aW1lIGFkanVzdG1lbnQgaW4gbmFub3NlY29uZHNcbiAgKlxuLSAqIERlYWxsb2NhdGVzIGdpdmVuIERQTEwgZGV2aWNlIHByZXZpb3VzbHkgYWxsb2NhdGVkIGJ5IEB6bDMwNzN4X2RwbGxfYWxsb2MuXG4rICogRm9yIE5DTywgbGFyZ2UgZGVsdGFzIChcdTAwM2U9IDEgc2Vjb25kKSBhcmUgc3BsaXQgaW50byBhIFRvRFxuKyAqIHJlYWQtbW9kaWZ5LXdyaXRlIGZvciB0aGUgc2Vjb25kcyBwYXJ0IGFuZCBhbiBvdXRwdXQgcGhhc2Ugc3RlcCBmb3JcbisgKiB0aGUgc3ViLXNlY29uZCByZW1haW5kZXIuIFN1Yi1zZWNvbmQgZGVsdGFzIHVzZSBwaGFzZSBzdGVwIGRpcmVjdGx5LFxuKyAqIGZhbGxpbmcgYmFjayB0byBUb0QgcmVhZC1tb2RpZnktd3JpdGUgaWYgcGhhc2Ugc3RlcCBvciBUSUUgd3JpdGVcbisgKiBmYWlscy4gSW4gQVVUTy9SRUZMT0NLIG1vZGVzLCBsYXJnZSBkZWx0YXMgYXJlIHNwbGl0IGludG8gVG9EXG4rICogcmVhZC1tb2RpZnktd3JpdGUgZm9yIHNlY29uZHMgYW5kIFRJRSB3cml0ZSBmb3IgdGhlIHN1Yi1zZWNvbmRcbisgKiByZW1haW5kZXIuIFN1Yi1zZWNvbmQgZGVsdGFzIHVzZSBUSUUgd3JpdGUgZGlyZWN0bHkuXG4rICpcbisgKiBJZiB0aGUgc2Vjb25kcyBwYXJ0IHdhcyBhbHJlYWR5IGNvbW1pdHRlZCB3aGVuIHRoZSBzdWItc2Vjb25kXG4rICogbWVjaGFuaXNtIGZhaWxzLCByZXR1cm5zIDAgdG8gcHJldmVudCB0aGUgUFRQIHNlcnZvIGZyb20gcmV0cnlpbmdcbisgKiB0aGUgZnVsbCBkZWx0YSBhbmQgYXBwbHlpbmcgc2Vjb25kcyBhZ2Fpbi5cbisgKlxuKyAqIFJldHVybjogMCBvbiBzdWNjZXNzIChvciBwYXJ0aWFsIHN1Y2Nlc3MpLCBcdTAwM2MwIG9uIGVycm9yXG4gICovXG4tdm9pZFxuLXpsMzA3M3hfZHBsbF9mcmVlKHN0cnVjdCB6bDMwNzN4X2RwbGwgKnpsZHBsbClcbitzdGF0aWMgaW50IHpsMzA3M3hfZHBsbF9wdHBfYWRqdGltZShzdHJ1Y3QgcHRwX2Nsb2NrX2luZm8gKmluZm8sIHM2NCBkZWx0YSlcbiB7XG4tXHRXQVJOKHpsZHBsbC1cdTAwM2VkcGxsX2RldiwgXCJEUExMIGRldmljZSBpcyBzdGlsbCByZWdpc3RlcmVkXFxuXCIpO1xuK1x0c3RydWN0IHpsMzA3M3hfZHBsbCAqemxkcGxsID0gY29udGFpbmVyX29mKGluZm8sIHN0cnVjdCB6bDMwNzN4X2RwbGwsXG4rXHRcdFx0XHRcdFx0ICAgcHRwX2luZm8pO1xuK1x0c3RydWN0IHpsMzA3M3hfZGV2ICp6bGRldiA9IHpsZHBsbC1cdTAwM2VkZXY7XG4rXHRjb25zdCBzdHJ1Y3QgemwzMDczeF9jaGFuICpjaGFuO1xuK1x0Ym9vbCBzZWNfYWRqdXN0ZWQgPSBmYWxzZTtcbitcdHN0cnVjdCB0aW1lc3BlYzY0IHRzO1xuK1x0aW50IHJjO1xuIFxuLVx0bXV0ZXhfZGVzdHJveShcdTAwMjZ6bGRwbGwtXHUwMDNlbG9jayk7XG4tXHRrZnJlZSh6bGRwbGwpO1xuK1x0aWYgKCFkZWx0YSlcbitcdFx0cmV0dXJuIDA7XG4rXG4rXHRndWFyZChtdXRleCkoXHUwMDI2emxkcGxsLVx1MDAzZWxvY2spO1xuK1xuK1x0LyogTW9kZXMgd2l0aG91dCBwaGFzZSBzdGVwIG9yIFRJRSB1c2UgcGxhaW4gVG9EIGFkanVzdCAqL1xuK1x0Y2hhbiA9IHpsMzA3M3hfY2hhbl9zdGF0ZV9nZXQoemxkZXYsIHpsZHBsbC1cdTAwM2VpZCk7XG4rXHRpZiAoIXpsMzA3M3hfY2hhbl9tb2RlX2lzX25jbyhjaGFuKSBcdTAwMjZcdTAwMjZcbitcdCAgICAhemwzMDczeF9jaGFuX21vZGVfc3VwcG9ydHNfdGllKGNoYW4pKVxuK1x0XHRyZXR1cm4gemwzMDczeF9jaGFuX3RvZF9hZGp1c3QoemxkZXYsIHpsZHBsbC1cdTAwM2VpZCxcbitcdFx0XHRcdFx0ICAgICAgIG5zX3RvX3RpbWVzcGVjNjQoZGVsdGEpKTtcbitcbitcdC8qIFNwbGl0IG9mZiBzZWNvbmRzIHZpYSBUb0QgcmVhZC1tb2RpZnktd3JpdGUgc28gdGhlIHN1Yi1zZWNvbmRcbitcdCAqIHJlbWFpbmRlciBjYW4gYmUgYXBwbGllZCB0aHJvdWdoIHRoZSBvdXRwdXQtY29oZXJlbnQgbWVjaGFuaXNtXG4rXHQgKiAocGhhc2Ugc3RlcCBvciBUSUUgd3JpdGUpLlxuK1x0ICovXG4rXHRpZiAoZGVsdGEgXHUwMDNlPSBOU0VDX1BFUl9TRUMgfHwgZGVsdGEgXHUwMDNjPSAtTlNFQ19QRVJfU0VDKSB7XG4rXHRcdHMzMiByZW1haW5kZXI7XG4rXG4rXHRcdHRzLnR2X3NlYyA9IGRpdl9zNjRfcmVtKGRlbHRhLCBOU0VDX1BFUl9TRUMsIFx1MDAyNnJlbWFpbmRlcik7XG4rXHRcdHRzLnR2X25zZWMgPSAwO1xuK1x0XHRkZWx0YSA9IHJlbWFpbmRlcjtcbitcbitcdFx0cmMgPSB6bDMwNzN4X2NoYW5fdG9kX2FkanVzdCh6bGRldiwgemxkcGxsLVx1MDAzZWlkLCB0cyk7XG4rXHRcdGlmIChyYylcbitcdFx0XHRyZXR1cm4gcmM7XG4rXG4rXHRcdC8qIE5vIHN1Yi1zZWNvbmQgcmVtYWluZGVyLCBkb25lICovXG4rXHRcdGlmICghZGVsdGEpXG4rXHRcdFx0cmV0dXJuIDA7XG4rXG4rXHRcdC8qIFdhaXQgZm9yIHRoZSBUb0Qgd3JpdGUgdG8gYmUgYXBwbGllZCBhdCB0aGUgMSBIeiBlZGdlXG4rXHRcdCAqIGJlZm9yZSBpc3N1aW5nIHBoYXNlIHN0ZXAgb3IgVElFIHdyaXRlLCBzbyB0aGUgcGVuZGluZ1xuK1x0XHQgKiBXUl9ORVhUXzFIWiBkb2VzIG5vdCBvdmVyd3JpdGUgdGhlIHN1Yi1zZWNvbmQgYWRqdXN0bWVudC5cbitcdFx0ICovXG4rXHRcdHJjID0gemwzMDczeF9jaGFuX3RvZF9yZWFkeV93YWl0KHpsZGV2LCB6bGRwbGwtXHUwMDNlaWQpO1xuK1x0XHRpZiAocmMpXG4rXHRcdFx0cmV0dXJuIHJjO1xuK1xuK1x0XHRzZWNfYWRqdXN0ZWQgPSB0cnVlO1xuK1x0fVxuK1xuK1x0LyogQXBwbHkgc3ViLXNlY29uZCBkZWx0YSB2aWEgcGhhc2Ugc3RlcCAoTkNPKSBvciBUSUUgd3JpdGUgKi9cbitcdGlmICh6bDMwNzN4X2NoYW5fbW9kZV9pc19uY28oY2hhbikpIHtcbitcdFx0cmMgPSB6bDMwNzN4X2RwbGxfcHRwX2FkanRpbWVfcGhhc2Vfc3RlcCh6bGRwbGwsIGRlbHRhKTtcbitcdFx0aWYgKCFyYylcbitcdFx0XHRyZXR1cm4gMDtcbitcdH0gZWxzZSB7XG4rXHRcdHJjID0gemwzMDczeF9jaGFuX3RpZV93cml0ZSh6bGRldiwgemxkcGxsLVx1MDAzZWlkLCBkZWx0YSk7XG4rXHRcdGlmICghcmMpXG4rXHRcdFx0cmV0dXJuIDA7XG4rXHR9XG4rXG4rXHQvKiBQaGFzZSBzdGVwIG9yIFRJRSB3cml0ZSBmYWlsZWQsIGZhbGwgYmFjayB0byBUb0QgYWRqdXN0ICovXG4rXHRyYyA9IHpsMzA3M3hfY2hhbl90b2RfYWRqdXN0KHpsZGV2LCB6bGRwbGwtXHUwMDNlaWQsXG4rXHRcdFx0XHQgICAgIG5zX3RvX3RpbWVzcGVjNjQoZGVsdGEpKTtcbitcbitcdC8qIEluIHRoZSB1bmxpa2VseSBldmVudCB0aGF0IGJvdGggcGhhc2Ugc3RlcC9USUUgd3JpdGUgYW5kIGZhbGxiYWNrXG4rXHQgKiBUb0QgYWRqdXN0IGZhaWwgYWZ0ZXIgc2Vjb25kcyB3ZXJlIGFscmVhZHkgY29tbWl0dGVkLCByZXR1cm5cbitcdCAqIHN1Y2Nlc3MgdG8gcHJldmVudCB0aGUgUFRQIHNlcnZvIGZyb20gcmV0cnlpbmcgdGhlIGZ1bGwgZGVsdGEgYW5kXG4rXHQgKiBhcHBseWluZyBzZWNvbmRzIGFnYWluLiBUaGUgc3ViLXNlY29uZCByZXNpZHVhbCB3aWxsIHNlbGYtY29ycmVjdFxuK1x0ICogaW4gdGhlIG5leHQgc2Vydm8gY3ljbGUuXG4rXHQgKi9cbitcdGlmIChyYyBcdTAwMjZcdTAwMjYgc2VjX2FkanVzdGVkKSB7XG4rXHRcdGRldl93YXJuKHpsZGV2LVx1MDAzZWRldixcbitcdFx0XHQgXCJTdWItc2Vjb25kIGFkanVzdG1lbnQgZmFpbGVkIGFmdGVyIHNlY29uZHMgYXBwbGllZFxcblwiKTtcbitcdFx0cmV0dXJuIDA7XG4rXHR9XG4rXG4rXHRyZXR1cm4gcmM7XG4rfVxuK1xuKy8qKlxuKyAqIHpsMzA3M3hfZHBsbF9wdHBfYWRqZmluZSAtIGFkanVzdCBQVFAgY2xvY2sgZnJlcXVlbmN5XG4rICogQGluZm86IFBUUCBjbG9jayBpbmZvXG4rICogQHNjYWxlZF9wcG06IGZyZXF1ZW5jeSBhZGp1c3RtZW50IGluIHNjYWxlZCBwcG0gKHBwbSAqIDJeMTYpXG4rICpcbisgKiBPbmx5IHN1cHBvcnRlZCBmb3IgTkNPLiBXcml0ZXMgdGhlIGRlbHRhIGZyZXF1ZW5jeSBvZmZzZXQgcmVnaXN0ZXIuXG4rICpcbisgKiBSZXR1cm46XG4rICogKiAlMFx0XHRcdC0gc3VjY2VzcyBvciBAc2NhbGVkX3BwbSBpcyB6ZXJvIChuby1vcClcbisgKiAqICUtRU9QTk9UU1VQUFx0LSBOQ08gcGluIGlzIG5vdCBjb25uZWN0ZWQgYW5kIEBzY2FsZWRfcHBtIGlzIG5vbi16ZXJvXG4rICogKiBuZWdhdGl2ZVx0XHQtIG90aGVyIGVycm9yXG4rICovXG4rc3RhdGljIGludFxuK3psMzA3M3hfZHBsbF9wdHBfYWRqZmluZShzdHJ1Y3QgcHRwX2Nsb2NrX2luZm8gKmluZm8sIGxvbmcgc2NhbGVkX3BwbSlcbit7XG4rXHRzdHJ1Y3QgemwzMDczeF9kcGxsICp6bGRwbGwgPSBjb250YWluZXJfb2YoaW5mbywgc3RydWN0IHpsMzA3M3hfZHBsbCxcbitcdFx0XHRcdFx0XHQgICBwdHBfaW5mbyk7XG4rXHRjb25zdCBzdHJ1Y3QgemwzMDczeF9jaGFuICpjaGFuO1xuK1x0czY0IG9mZnNldDtcbitcbitcdC8qIENvbnZlcnQgc2NhbGVkX3BwbSB0byBkZl9vZmZzZXQgaW4gMl4tNDggc3RlcHM6XG4rXHQgKiAgIGRmX29mZnNldCA9IC0oc2NhbGVkX3BwbSAqIDJeMzIpIC8gMTBeNlxuK1x0ICpcbitcdCAqIFNpbXBsaWZ5IHRvIGF2b2lkIG92ZXJmbG93OlxuK1x0ICogICBkZl9vZmZzZXQgPSAtKHNjYWxlZF9wcG0gKiAyXjI2KSAvIDVeNlxuK1x0ICogICBkZl9vZmZzZXQgPSAtKHNjYWxlZF9wcG0gKiA2NzEwODg2NCkgLyAxNTYyNVxuK1x0ICovXG4rXHRvZmZzZXQgPSAtZGl2X3M2NCgoczY0KXNjYWxlZF9wcG0gKiA2NzEwODg2NExMLCAxNTYyNSk7XG4rXG4rXHRndWFyZChtdXRleCkoXHUwMDI2emxkcGxsLVx1MDAzZWxvY2spO1xuK1xuK1x0Y2hhbiA9IHpsMzA3M3hfY2hhbl9zdGF0ZV9nZXQoemxkcGxsLVx1MDAzZWRldiwgemxkcGxsLVx1MDAzZWlkKTtcbitcdGlmICghemwzMDczeF9jaGFuX21vZGVfaXNfbmNvKGNoYW4pKVxuK1x0XHRyZXR1cm4gc2NhbGVkX3BwbSA/IC1FT1BOT1RTVVBQIDogMDtcbitcdGlmIChvZmZzZXQgPT0gY2hhbi1cdTAwM2VkZl9vZmZzZXQpXG4rXHRcdHJldHVybiAwO1xuK1xuK1x0cmV0dXJuIHpsMzA3M3hfY2hhbl9kZl9vZmZzZXRfc2V0KHpsZHBsbC1cdTAwM2VkZXYsIHpsZHBsbC1cdTAwM2VpZCwgb2Zmc2V0KTtcbit9XG4rXG4rLyoqXG4rICogemwzMDczeF9kcGxsX3B0cF9hZGpwaGFzZSAtIGFkanVzdCBQVFAgY2xvY2sgcGhhc2VcbisgKiBAaW5mbzogUFRQIGNsb2NrIGluZm9cbisgKiBAZGVsdGE6IHBoYXNlIGFkanVzdG1lbnQgaW4gbmFub3NlY29uZHNcbisgKlxuKyAqIE9ubHkgc3VwcG9ydGVkIGluIEFVVE8gYW5kIFJFRkxPQ0sgbW9kZXMuIFVzZXMgVElFIHdyaXRlIGZvclxuKyAqIG5hbm9zZWNvbmQgcmVzb2x1dGlvbiBwaGFzZSBhZGp1c3RtZW50LlxuKyAqXG4rICogUmV0dXJuOlxuKyAqICogJTBcdFx0XHQtIHN1Y2Nlc3Mgb3IgQGRlbHRhIGlzIHplcm8gKG5vLW9wKVxuKyAqICogJS1FT1BOT1RTVVBQXHQtIG1vZGUgZG9lcyBub3Qgc3VwcG9ydCBUSUUgYW5kIEBkZWx0YSBpcyBub24temVyb1xuKyAqICogbmVnYXRpdmVcdFx0LSBvdGhlciBlcnJvclxuKyAqL1xuK3N0YXRpYyBpbnQgemwzMDczeF9kcGxsX3B0cF9hZGpwaGFzZShzdHJ1Y3QgcHRwX2Nsb2NrX2luZm8gKmluZm8sIHMzMiBkZWx0YSlcbit7XG4rXHRzdHJ1Y3QgemwzMDczeF9kcGxsICp6bGRwbGwgPSBjb250YWluZXJfb2YoaW5mbywgc3RydWN0IHpsMzA3M3hfZHBsbCxcbitcdFx0XHRcdFx0XHQgICBwdHBfaW5mbyk7XG4rXHRzdHJ1Y3QgemwzMDczeF9kZXYgKnpsZGV2ID0gemxkcGxsLVx1MDAzZWRldjtcbitcdGNvbnN0IHN0cnVjdCB6bDMwNzN4X2NoYW4gKmNoYW47XG4rXG4rXHRpZiAoIWRlbHRhKVxuK1x0XHRyZXR1cm4gMDtcbitcbitcdGd1YXJkKG11dGV4KShcdTAwMjZ6bGRwbGwtXHUwMDNlbG9jayk7XG4rXG4rXHRjaGFuID0gemwzMDczeF9jaGFuX3N0YXRlX2dldCh6bGRldiwgemxkcGxsLVx1MDAzZWlkKTtcbitcbitcdGlmICghemwzMDczeF9jaGFuX21vZGVfc3VwcG9ydHNfdGllKGNoYW4pKVxuK1x0XHRyZXR1cm4gLUVPUE5PVFNVUFA7XG4rXG4rXHRyZXR1cm4gemwzMDczeF9jaGFuX3RpZV93cml0ZSh6bGRldiwgemxkcGxsLVx1MDAzZWlkLCBkZWx0YSk7XG4rfVxuK1xuK3N0YXRpYyBzMzJcbit6bDMwNzN4X2RwbGxfcHRwX2dldG1heHBoYXNlKHN0cnVjdCBwdHBfY2xvY2tfaW5mbyAqaW5mbyBfX2Fsd2F5c191bnVzZWQpXG4re1xuK1x0LyogSFcgbGltaXRzIFRJRSB3cml0ZSB0byArLTEgc2Vjb25kLiBSZXR1cm4gdGhlIGNvbnN0YW50IEhXXG4rXHQgKiBsaW1pdCBhbmQgbGV0IGFkanBoYXNlIGhhbmRsZSBtb2RlLXNwZWNpZmljIGNoZWNrcy5cbitcdCAqL1xuK1x0cmV0dXJuIE5TRUNfUEVSX1NFQyAtIDE7XG4rfVxuK1xuK3N0YXRpYyBjb25zdCBzdHJ1Y3QgcHRwX2Nsb2NrX2luZm8gemwzMDczeF9kcGxsX3B0cF9jbG9ja19pbmZvID0ge1xuK1x0Lm93bmVyXHRcdD0gVEhJU19NT0RVTEUsXG4rXHQubWF4X2Fkalx0PSBaTDMwNzNYX0RQTExfUFRQX01BWF9BREosXG4rXHQuZ2V0dGltZXg2NFx0PSB6bDMwNzN4X2RwbGxfcHRwX2dldHRpbWV4NjQsXG4rXHQuc2V0dGltZTY0XHQ9IHpsMzA3M3hfZHBsbF9wdHBfc2V0dGltZTY0LFxuK1x0LmFkanRpbWVcdD0gemwzMDczeF9kcGxsX3B0cF9hZGp0aW1lLFxuK1x0LmFkamZpbmVcdD0gemwzMDczeF9kcGxsX3B0cF9hZGpmaW5lLFxuK1x0LmFkanBoYXNlXHQ9IHpsMzA3M3hfZHBsbF9wdHBfYWRqcGhhc2UsXG4rXHQuZ2V0bWF4cGhhc2VcdD0gemwzMDczeF9kcGxsX3B0cF9nZXRtYXhwaGFzZSxcbit9O1xuK1xuKy8qKlxuKyAqIHpsMzA3M3hfZHBsbF9wdHBfcmVnaXN0ZXIgLSByZWdpc3RlciBQVFAgY2xvY2sgZm9yIGEgRFBMTCBjaGFubmVsXG4rICogQHpsZHBsbDogRFBMTCBjaGFubmVsIHRvIHJlZ2lzdGVyIFBUUCBjbG9jayBmb3JcbisgKlxuKyAqIFJldHVybjogMCBvbiBzdWNjZXNzLCBcdTAwM2MwIG9uIGVycm9yXG4rICovXG4rc3RhdGljIGludCB6bDMwNzN4X2RwbGxfcHRwX3JlZ2lzdGVyKHN0cnVjdCB6bDMwNzN4X2RwbGwgKnpsZHBsbClcbit7XG4rXHRzdHJ1Y3QgemwzMDczeF9kZXYgKnpsZGV2ID0gemxkcGxsLVx1MDAzZWRldjtcbitcdHN0cnVjdCBwdHBfY2xvY2sgKnB0cF9jbG9jaztcbitcbitcdHpsZHBsbC1cdTAwM2VwdHBfaW5mbyA9IHpsMzA3M3hfZHBsbF9wdHBfY2xvY2tfaW5mbztcbitcdHNucHJpbnRmKHpsZHBsbC1cdTAwM2VwdHBfaW5mby5uYW1lLCBzaXplb2YoemxkcGxsLVx1MDAzZXB0cF9pbmZvLm5hbWUpLFxuK1x0XHQgXCIlcy1kcGxsJXVcIiwgZGV2X25hbWUoemxkZXYtXHUwMDNlZGV2KSwgemxkcGxsLVx1MDAzZWlkKTtcbitcbitcdHB0cF9jbG9jayA9IHB0cF9jbG9ja19yZWdpc3RlcihcdTAwMjZ6bGRwbGwtXHUwMDNlcHRwX2luZm8sIHpsZGV2LVx1MDAzZWRldik7XG4rXHRpZiAoSVNfRVJSKHB0cF9jbG9jaykpIHtcbitcdFx0ZGV2X2Vycih6bGRldi1cdTAwM2VkZXYsIFwiRmFpbGVkIHRvIHJlZ2lzdGVyIFBUUCBjbG9jayBmb3IgRFBMTCV1XFxuXCIsXG4rXHRcdFx0emxkcGxsLVx1MDAzZWlkKTtcbitcdFx0cmV0dXJuIFBUUl9FUlIocHRwX2Nsb2NrKTtcbitcdH1cbitcbitcdHpsZHBsbC1cdTAwM2VwdHBfY2xvY2sgPSBwdHBfY2xvY2s7XG4rXG4rXHRyZXR1cm4gMDtcbit9XG4rXG4rLyoqXG4rICogemwzMDczeF9kcGxsX3B0cF91bnJlZ2lzdGVyIC0gdW5yZWdpc3RlciBQVFAgY2xvY2sgZm9yIGEgRFBMTCBjaGFubmVsXG4rICogQHpsZHBsbDogRFBMTCBjaGFubmVsIHRvIHVucmVnaXN0ZXIgUFRQIGNsb2NrIGZvclxuKyAqL1xuK3N0YXRpYyB2b2lkIHpsMzA3M3hfZHBsbF9wdHBfdW5yZWdpc3RlcihzdHJ1Y3QgemwzMDczeF9kcGxsICp6bGRwbGwpXG4re1xuK1x0aWYgKCFJU19FUlJfT1JfTlVMTCh6bGRwbGwtXHUwMDNlcHRwX2Nsb2NrKSkge1xuK1x0XHRwdHBfY2xvY2tfdW5yZWdpc3Rlcih6bGRwbGwtXHUwMDNlcHRwX2Nsb2NrKTtcbitcdFx0emxkcGxsLVx1MDAzZXB0cF9jbG9jayA9IE5VTEw7XG4rXHR9XG4gfVxuIFxuIC8qKlxuQEAgLTIzOTgsNiArMjczOSw0NyBAQCB6bDMwNzN4X2RwbGxfcmVmX3N5bmNfcGFpcnNfcmVnaXN0ZXIoc3RydWN0IHpsMzA3M3hfZHBsbCAqemxkcGxsKVxuIFx0cmV0dXJuIDA7XG4gfVxuIFxuKy8qKlxuKyAqIHpsMzA3M3hfZHBsbF9hbGxvYyAtIGFsbG9jYXRlIERQTEwgZGV2aWNlXG4rICogQHpsZGV2OiBwb2ludGVyIHRvIHpsMzA3M3ggZGV2aWNlXG4rICogQGNoOiBEUExMIGNoYW5uZWwgbnVtYmVyXG4rICpcbisgKiBBbGxvY2F0ZXMgRFBMTCBkZXZpY2Ugc3RydWN0dXJlIGZvciBnaXZlbiBEUExMIGNoYW5uZWwuXG4rICpcbisgKiBSZXR1cm46IHBvaW50ZXIgdG8gRFBMTCBkZXZpY2Ugb24gc3VjY2VzcywgZXJyb3IgcG9pbnRlciBvbiBlcnJvclxuKyAqL1xuK3N0cnVjdCB6bDMwNzN4X2RwbGwgKlxuK3psMzA3M3hfZHBsbF9hbGxvYyhzdHJ1Y3QgemwzMDczeF9kZXYgKnpsZGV2LCB1OCBjaClcbit7XG4rXHRzdHJ1Y3QgemwzMDczeF9kcGxsICp6bGRwbGw7XG4rXG4rXHR6bGRwbGwgPSBremFsbG9jX29iaigqemxkcGxsKTtcbitcdGlmICghemxkcGxsKVxuK1x0XHRyZXR1cm4gRVJSX1BUUigtRU5PTUVNKTtcbitcbitcdHpsZHBsbC1cdTAwM2VkZXYgPSB6bGRldjtcbitcdHpsZHBsbC1cdTAwM2VpZCA9IGNoO1xuK1x0bXV0ZXhfaW5pdChcdTAwMjZ6bGRwbGwtXHUwMDNlbG9jayk7XG4rXHRJTklUX0xJU1RfSEVBRChcdTAwMjZ6bGRwbGwtXHUwMDNlcGlucyk7XG4rXG4rXHRyZXR1cm4gemxkcGxsO1xuK31cbitcbisvKipcbisgKiB6bDMwNzN4X2RwbGxfZnJlZSAtIGZyZWUgRFBMTCBkZXZpY2VcbisgKiBAemxkcGxsOiBwb2ludGVyIHRvIHpsMzA3M3hfZHBsbCBzdHJ1Y3R1cmVcbisgKlxuKyAqIERlYWxsb2NhdGVzIGdpdmVuIERQTEwgZGV2aWNlIHByZXZpb3VzbHkgYWxsb2NhdGVkIGJ5IEB6bDMwNzN4X2RwbGxfYWxsb2MuXG4rICovXG4rdm9pZFxuK3psMzA3M3hfZHBsbF9mcmVlKHN0cnVjdCB6bDMwNzN4X2RwbGwgKnpsZHBsbClcbit7XG4rXHRXQVJOKHpsZHBsbC1cdTAwM2VkcGxsX2RldiwgXCJEUExMIGRldmljZSBpcyBzdGlsbCByZWdpc3RlcmVkXFxuXCIpO1xuK1xuK1x0bXV0ZXhfZGVzdHJveShcdTAwMjZ6bGRwbGwtXHUwMDNlbG9jayk7XG4rXHRrZnJlZSh6bGRwbGwpO1xuK31cbitcbiAvKipcbiAgKiB6bDMwNzN4X2RwbGxfcmVnaXN0ZXIgLSByZWdpc3RlciBEUExMIGRldmljZSBhbmQgYWxsIGl0cyBwaW5zXG4gICogQHpsZHBsbDogcG9pbnRlciB0byB6bDMwNzN4X2RwbGwgc3RydWN0dXJlXG5AQCAtMjQyOCw2ICsyODEwLDEzIEBAIHpsMzA3M3hfZHBsbF9yZWdpc3RlcihzdHJ1Y3QgemwzMDczeF9kcGxsICp6bGRwbGwpXG4gXHRcdHJldHVybiByYztcbiBcdH1cbiBcbitcdHJjID0gemwzMDczeF9kcGxsX3B0cF9yZWdpc3Rlcih6bGRwbGwpO1xuK1x0aWYgKHJjKSB7XG4rXHRcdHpsMzA3M3hfZHBsbF9waW5zX3VucmVnaXN0ZXIoemxkcGxsKTtcbitcdFx0emwzMDczeF9kcGxsX2RldmljZV91bnJlZ2lzdGVyKHpsZHBsbCk7XG4rXHRcdHJldHVybiByYztcbitcdH1cbitcbiBcdHJldHVybiAwO1xuIH1cbiBcbkBAIC0yNDQxLDcgKzI4MzAsNyBAQCB6bDMwNzN4X2RwbGxfcmVnaXN0ZXIoc3RydWN0IHpsMzA3M3hfZHBsbCAqemxkcGxsKVxuIHZvaWRcbiB6bDMwNzN4X2RwbGxfdW5yZWdpc3RlcihzdHJ1Y3QgemwzMDczeF9kcGxsICp6bGRwbGwpXG4ge1xuLVx0LyogVW5yZWdpc3RlciBhbGwgcGlucyBhbmQgZHBsbCAqL1xuK1x0emwzMDczeF9kcGxsX3B0cF91bnJlZ2lzdGVyKHpsZHBsbCk7XG4gXHR6bDMwNzN4X2RwbGxfcGluc191bnJlZ2lzdGVyKHpsZHBsbCk7XG4gXHR6bDMwNzN4X2RwbGxfZGV2aWNlX3VucmVnaXN0ZXIoemxkcGxsKTtcbiB9XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9kcGxsL3psMzA3M3gvZHBsbC5oIGIvZHJpdmVycy9kcGxsL3psMzA3M3gvZHBsbC5oXG5pbmRleCBmYWViYzQwMmJhMWI3Li45OTMyMjFkYzYzMjQ5IDEwMDY0NFxuLS0tIGEvZHJpdmVycy9kcGxsL3psMzA3M3gvZHBsbC5oXG4rKysgYi9kcml2ZXJzL2RwbGwvemwzMDczeC9kcGxsLmhcbkBAIC01LDYgKzUsNyBAQFxuIFxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2RwbGwuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2xpc3QuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L3B0cF9jbG9ja19rZXJuZWwuaFx1MDAzZVxuIFxuICNpbmNsdWRlIFwiY29yZS5oXCJcbiBcbkBAIC0yMiw2ICsyMyw4IEBAXG4gICogQHR5cGU6IERQTEwgdHlwZSAoUFBTIG9yIEVFQylcbiAgKiBAbG9ja19zdGF0dXM6IGxhc3Qgc2F2ZWQgRFBMTCBsb2NrIHN0YXR1c1xuICAqIEBwaW5zOiBsaXN0IG9mIHBpbnNcbisgKiBAcHRwX2luZm86IFBUUCBjbG9jayBpbmZvXG4rICogQHB0cF9jbG9jazogcmVnaXN0ZXJlZCBQVFAgY2xvY2sgKG9yIE5VTEwpXG4gICovXG4gc3RydWN0IHpsMzA3M3hfZHBsbCB7XG4gXHRzdHJ1Y3QgbGlzdF9oZWFkXHRcdGxpc3Q7XG5AQCAtMzYsNiArMzksOCBAQCBzdHJ1Y3QgemwzMDczeF9kcGxsIHtcbiBcdGVudW0gZHBsbF90eXBlXHRcdFx0dHlwZTtcbiBcdGVudW0gZHBsbF9sb2NrX3N0YXR1c1x0XHRsb2NrX3N0YXR1cztcbiBcdHN0cnVjdCBsaXN0X2hlYWRcdFx0cGlucztcbitcdHN0cnVjdCBwdHBfY2xvY2tfaW5mb1x0XHRwdHBfaW5mbztcbitcdHN0cnVjdCBwdHBfY2xvY2tcdFx0KnB0cF9jbG9jaztcbiB9O1xuIFxuIHN0cnVjdCB6bDMwNzN4X2RwbGwgKnpsMzA3M3hfZHBsbF9hbGxvYyhzdHJ1Y3QgemwzMDczeF9kZXYgKnpsZGV2LCB1OCBjaCk7XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9kcGxsL3psMzA3M3gvcmVncy5oIGIvZHJpdmVycy9kcGxsL3psMzA3M3gvcmVncy5oXG5pbmRleCBiNzBlYWQ3ZDQ0OTViLi5mM2E1ZTEyMTVhYTM2IDEwMDY0NFxuLS0tIGEvZHJpdmVycy9kcGxsL3psMzA3M3gvcmVncy5oXG4rKysgYi9kcml2ZXJzL2RwbGwvemwzMDczeC9yZWdzLmhcbkBAIC0xNzksNiArMTc5LDIwIEBAXG4gI2RlZmluZSBaTF9EUExMX0RGX1JFQURfQ01EXHRcdFx0R0VOTUFTSygyLCAwKVxuICNkZWZpbmUgWkxfRFBMTF9ERl9SRUFEX0NNRF9BQ0NfSVx0XHQ0XG4gXG4rI2RlZmluZSBaTF9SRUdfRFBMTF9USUVfQ1RSTFx0XHRcdFpMX1JFRyg1LCAweDMwLCAxKVxuKyNkZWZpbmUgWkxfRFBMTF9USUVfQ1RSTF9PUFx0XHRcdEdFTk1BU0soMiwgMClcbisjZGVmaW5lIFpMX0RQTExfVElFX0NUUkxfT1BfV1JcdFx0XHQ0XG4rXG4rI2RlZmluZSBaTF9SRUdfRFBMTF9USUVfQ1RSTF9NQVNLXHRcdFpMX1JFRyg1LCAweDMxLCAxKVxuK1xuKyNkZWZpbmUgWkxfUkVHX0RQTExfVE9EX0NUUkwoX2lkeClcdFx0XHRcdFx0XFxcbitcdFpMX1JFR19JRFgoX2lkeCwgNSwgMHgzOCwgMSwgWkwzMDczWF9NQVhfQ0hBTk5FTFMsIDEpXG4rI2RlZmluZSBaTF9EUExMX1RPRF9DVFJMX1NFTVx0XHRcdEJJVCg0KVxuKyNkZWZpbmUgWkxfRFBMTF9UT0RfQ1RSTF9DTURcdFx0XHRHRU5NQVNLKDMsIDApXG4rI2RlZmluZSBaTF9EUExMX1RPRF9DVFJMX0NNRF9XUl9ORVhUXzFIWlx0MVxuKyNkZWZpbmUgWkxfRFBMTF9UT0RfQ1RSTF9DTURfUkRfQ1VSUkVOVFx0XHQ4XG4rI2RlZmluZSBaTF9EUExMX1RPRF9DVFJMX0NNRF9SRF9ORVhUXzFIWlx0OVxuK1xuICNkZWZpbmUgWkxfUkVHX0RQTExfTUVBU19DVFJMXHRcdFx0WkxfUkVHKDUsIDB4NTAsIDEpXG4gI2RlZmluZSBaTF9EUExMX01FQVNfQ1RSTF9FTlx0XHRcdEJJVCgwKVxuICNkZWZpbmUgWkxfRFBMTF9NRUFTX0NUUkxfQVZHX0ZBQ1RPUlx0XHRHRU5NQVNLKDcsIDQpXG5AQCAtMTkzLDYgKzIwNyw5IEBAXG4gXG4gLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcbiAgKiBSZWdpc3RlciBQYWdlcyA2LTcsIERQTEwgRGF0YVxuKyAqXG4rICogUGVyLWNoYW5uZWwgcmVnaXN0ZXJzIHdpdGggc3RyaWRlIDB4MjAuIENoYW5uZWxzIDAtMyByZXNpZGUgb24gcGFnZSA2LFxuKyAqIGNoYW5uZWwgNCBvbiBwYWdlIDcuXG4gICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXG4gXG4gI2RlZmluZSBaTF9SRUdfRFBMTF9ERl9PRkZTRVRfMDMoX2lkeClcdFx0XHRcdFx0XFxcbkBAIC0yMDIsNiArMjE5LDI0IEBAXG4gXHQoKF9pZHgpIFx1MDAzYyA0ID8gWkxfUkVHX0RQTExfREZfT0ZGU0VUXzAzKF9pZHgpIDogWkxfUkVHX0RQTExfREZfT0ZGU0VUXzQpXG4gI2RlZmluZSBaTF9EUExMX0RGX09GRlNFVF9VTktOT1dOXHRTNjRfTUlOXG4gXG4rI2RlZmluZSBaTF9SRUdfRFBMTF9USUVfREFUQV8wMyhfaWR4KVx0XHRcdFx0XHRcXFxuK1x0WkxfUkVHX0lEWChfaWR4LCA2LCAweDBDLCA2LCA0LCAweDIwKVxuKyNkZWZpbmUgWkxfUkVHX0RQTExfVElFX0RBVEFfNFx0XHRcdFpMX1JFRyg3LCAweDBDLCA2KVxuKyNkZWZpbmUgWkxfUkVHX0RQTExfVElFX0RBVEEoX2lkeClcdFx0XHRcdFx0XFxcbitcdCgoX2lkeCkgXHUwMDNjIDQgPyBaTF9SRUdfRFBMTF9USUVfREFUQV8wMyhfaWR4KSA6IFpMX1JFR19EUExMX1RJRV9EQVRBXzQpXG4rXG4rI2RlZmluZSBaTF9SRUdfRFBMTF9UT0RfU0VDXzAzKF9pZHgpXHRcdFx0XHRcdFxcXG4rXHRaTF9SRUdfSURYKF9pZHgsIDYsIDB4MTIsIDYsIDQsIDB4MjApXG4rI2RlZmluZSBaTF9SRUdfRFBMTF9UT0RfU0VDXzRcdFx0XHRaTF9SRUcoNywgMHgxMiwgNilcbisjZGVmaW5lIFpMX1JFR19EUExMX1RPRF9TRUMoX2lkeClcdFx0XHRcdFx0XFxcbitcdCgoX2lkeCkgXHUwMDNjIDQgPyBaTF9SRUdfRFBMTF9UT0RfU0VDXzAzKF9pZHgpIDogWkxfUkVHX0RQTExfVE9EX1NFQ180KVxuK1xuKyNkZWZpbmUgWkxfUkVHX0RQTExfVE9EX05TXzAzKF9pZHgpXHRcdFx0XHRcdFxcXG4rXHRaTF9SRUdfSURYKF9pZHgsIDYsIDB4MTgsIDQsIDQsIDB4MjApXG4rI2RlZmluZSBaTF9SRUdfRFBMTF9UT0RfTlNfNFx0XHRcdFpMX1JFRyg3LCAweDE4LCA0KVxuKyNkZWZpbmUgWkxfUkVHX0RQTExfVE9EX05TKF9pZHgpXHRcdFx0XHRcdFxcXG4rXHQoKF9pZHgpIFx1MDAzYyA0ID8gWkxfUkVHX0RQTExfVE9EX05TXzAzKF9pZHgpIDogWkxfUkVHX0RQTExfVE9EX05TXzQpXG4rXG4gLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXG4gICogUmVnaXN0ZXIgUGFnZSA5LCBTeW50aCBhbmQgT3V0cHV0XG4gICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xuQEAgLTIyMSw2ICsyNTYsMjMgQEBcbiAjZGVmaW5lIFpMX09VVFBVVF9DVFJMX0VOXHRcdFx0QklUKDApXG4gI2RlZmluZSBaTF9PVVRQVVRfQ1RSTF9TWU5USF9TRUxcdFx0R0VOTUFTSyg2LCA0KVxuIFxuKyNkZWZpbmUgWkxfUkVHX09VVFBVVF9TVEVQX1RJTUVfTUFTS1x0XHRaTF9SRUcoOSwgMHgzNiwgMilcbitcbisjZGVmaW5lIFpMX1JFR19PVVRQVVRfUEhBU0VfU1RFUF9DVFJMXHRcdFpMX1JFRyg5LCAweDM4LCAxKVxuKyNkZWZpbmUgWkxfT1VUUFVUX1BIQVNFX1NURVBfQ1RSTF9EUExMXHRcdEdFTk1BU0soNiwgNClcbisjZGVmaW5lIFpMX09VVFBVVF9QSEFTRV9TVEVQX0NUUkxfVE9EX1NURVBcdEJJVCgzKVxuKyNkZWZpbmUgWkxfT1VUUFVUX1BIQVNFX1NURVBfQ1RSTF9PUFx0XHRHRU5NQVNLKDEsIDApXG4rI2RlZmluZSBaTF9PVVRQVVRfUEhBU0VfU1RFUF9DVFJMX09QX05PTkVcdDBcbisjZGVmaW5lIFpMX09VVFBVVF9QSEFTRV9TVEVQX0NUUkxfT1BfUkVTRVRcdDFcbisjZGVmaW5lIFpMX09VVFBVVF9QSEFTRV9TVEVQX0NUUkxfT1BfUkVBRFx0MlxuKyNkZWZpbmUgWkxfT1VUUFVUX1BIQVNFX1NURVBfQ1RSTF9PUF9XUklURVx0M1xuK1xuKyNkZWZpbmUgWkxfUkVHX09VVFBVVF9QSEFTRV9TVEVQX05VTUJFUlx0XHRaTF9SRUcoOSwgMHgzOSwgMSlcbitcbisjZGVmaW5lIFpMX1JFR19PVVRQVVRfUEhBU0VfU1RFUF9NQVNLXHRcdFpMX1JFRyg5LCAweDNhLCAyKVxuK1xuKyNkZWZpbmUgWkxfUkVHX09VVFBVVF9QSEFTRV9TVEVQX0RBVEFcdFx0WkxfUkVHKDksIDB4M2MsIDQpXG4rXG4gLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcbiAgKiBSZWdpc3RlciBQYWdlIDEwLCBSZWYgTWFpbGJveFxuICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTFUMTQ6MDI6MjUuMjk0NzIxNDM1WiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTA3NzI2MTA5MDMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqUmVhY2hpbmcgdGhlIFBUUCBDbG9jayBpbiBRRU1VKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBmb3IgdGhlIGB6bDMwNzN4YCBEUExMIGRyaXZlciwgYW5kIGl0J3MgYWRkaW5nIFBUUCBjbG9jayBzdXBwb3J0LiBJdCBzZWVtcyBwcmV0dHkgc3RyYWlnaHRmb3J3YXJkOiBpdCBtb2RpZmllcyBgS2NvbmZpZ2AgdG8gYWRkIGEgZGVwZW5kZW5jeSBvbiBgUFRQXzE1ODhfQ0xPQ0tgLCBhbmQgdGhlbiBhZGRzIGFsbCB0aGVzZSBQVFAtcmVsYXRlZCBmdW5jdGlvbnM6IHJlYWQvd3JpdGUvYWRqdXN0IFRPRCwgc2V0IGZyZXF1ZW5jeSBvZmZzZXRzLCBjb250cm9sIHRpZSBhbmQgcGhhc2Ugc3RlcHMsIGFuZCBmaW5hbGx5IGl0IHJlZ2lzdGVycyB0aGUgUFRQIGNsb2NrIGl0c2VsZi4gVGhlIHN0YW5kYXJkIG9wZXJhdGlvbnMgbGlrZSBnZXR0aW5nIGFuZCBzZXR0aW5nIHRoZSB0aW1lLCBhbmQgYWRqdXN0aW5nIHRpbWUvcGhhc2UgYXJlIGFsc28gdGhlcmUuXG5cbk15IGltbWVkaWF0ZSBxdWVzdGlvbiwgYXMgYWx3YXlzLCBpczogY2FuIEkgYWN0dWFsbHkgKnJlYWNoKiB0aGlzIGluIFFFTVU/IFRoaXMgZHJpdmVyIGlzIGZvciBhIE1pY3JvY2hpcCBBenVyaXRlIERQTEwvUFRQL1N5bmNFIGRldmljZSwgYW5kIEkgcmVjYWxsIGl0IGhhcyBib3RoIEkyQyBhbmQgU1BJIGJ1cyBpbXBsZW1lbnRhdGlvbnMuIFNvLCB0aGF0J3MgZ29vZDsgSTJDIGFuZCBTUEkgZGV2aWNlcyBhcmUgKnVzdWFsbHkqIHJlYWNoYWJsZSBpbiBhIHZpcnR1YWxpemVkIGVudmlyb25tZW50LiBJIGNhbiB0eXBpY2FsbHkgaW5zdGFudGlhdGUgdGhlbSB0aHJvdWdoIHN5emthbGxlcidzIHBzZXVkby1zeXNjYWxscyBvciB2aWEgc3lzZnMvZGV2aWNlIHRyZWUsIG9yIGJ5IGRpcmVjdGx5IGZ1enppbmcgdGhlIEkyQyBvciBTUEkgaW50ZXJmYWNlcy5cblxuV2FpdCwgc3l6a2FsbGVyIGRvZXMgc3VwcG9ydCBJMkMgYW5kIFNQSSBmdXp6aW5nLiBJIG5lZWQgdG8gc2VlIGlmIHRoZXJlIGFyZSBhbnkgc3BlY2lmaWMgc3l6a2FsbGVyIGRlc2NyaXB0aW9ucyBmb3IgYHpsMzA3M3hgLCBidXQgaWYgbm90LCBJIGNhbiBqdXN0IHJlbHkgb24gdGhlIGdlbmVyaWMgSTJDL1NQSSBmdXp6aW5nIG1lY2hhbmlzbXMuIEkgdGhpbmsgdGhlcmUgaXMgYGkyY19uZXdfY2xpZW50X2RldmljZWAgaW4ga2VybmVsLlxuXG5IYW5nIG9u4oCmIHRoZSBwcm9tcHQgc3BlY2lmaWVzIGNvZGUgdW5yZWFjaGFibGUgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzLiBJdCBtZW50aW9ucyBQQ0llIGhhcmR3YXJlLCB3aGljaCBpcyB1c3VhbGx5IGEgcGFpbi4gQnV0IHRoaXMgaXMgYW4gSTJDL1NQSSBkcml2ZXIhIFRoYXQncyBnb29kLCBiZWNhdXNlIEkyQyBhbmQgU1BJIGFyZSBkZWZpbml0ZWx5IGVtdWxhdGFibGUgb3IgZnV6emVhYmxlIGluIFFFTVUuIFN5emthbGxlciBoYXMgc3R1ZmYgbGlrZSBgc3l6X2kyY19kZXZpY2VgIG9yIGNhbiBmdXp6IHRocm91Z2ggYC9kZXYvaTJjLSpgIGFuZCBgL2Rldi9zcGlkZXYqYCwgc28gdGhhdCdzIGFsbCBnb29kLlxuXG5UaGUga2V5IHF1ZXN0aW9uIGlzLCBob3cgaXMgdGhpcyBkcml2ZXIgcHJvYmVkPyBJIG5lZWQgdG8gY2hlY2sgaG93IHRoZSBkcml2ZXIgaXMgcmVnaXN0ZXJlZCB3aXRoIHRoZSBJMkMgb3IgU1BJIHN1YnN5c3RlbS4gVGhhdCdzIHRoZSBjcml0aWNhbCBzdGVwIHRvIG1ha2Ugc3VyZSBJIGNhbiBldmVuIGdldCB0byB0aGUgUFRQIGZ1bmN0aW9ucy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTgyMzEsIk91dHB1dFRva2VucyI6MjYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo3ODgsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMVQxNDowMjozNi4wNjczMzU3OThaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTcwNjc2OTE1MywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ6bDMwNzN4X2kyY19wcm9iZVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL2RwbGwvemwzMDczeC9pMmMuYy0xMC1cXG5kcml2ZXJzL2RwbGwvemwzMDczeC9pMmMuYzoxMTpzdGF0aWMgaW50IHpsMzA3M3hfaTJjX3Byb2JlKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQpXFxuZHJpdmVycy9kcGxsL3psMzA3M3gvaTJjLmMtMTIte1xcbi0tXFxuZHJpdmVycy9kcGxsL3psMzA3M3gvaTJjLmM9NDg9c3RhdGljIHN0cnVjdCBpMmNfZHJpdmVyIHpsMzA3M3hfaTJjX2RyaXZlciA9IHtcXG4tLVxcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2kyYy5jLTUyLVxcdH0sXFxuZHJpdmVycy9kcGxsL3psMzA3M3gvaTJjLmM6NTM6XFx0LnByb2JlID0gemwzMDczeF9pMmNfcHJvYmUsXFxuZHJpdmVycy9kcGxsL3psMzA3M3gvaTJjLmMtNTQtXFx0LmlkX3RhYmxlID0gemwzMDczeF9pMmNfaWQsXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTExVDE0OjAyOjM3Ljc3NDExNTkxMVoiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM3MTUyOTc1NzMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkludmVzdGlnYXRpbmcgUG90ZW50aWFsIERhdGEgU2hlZXQgTWlzbWF0Y2hlcyoqXG5cblJpZ2h0LCBsZXQncyBnZXQgZG93biB0byBicmFzcyB0YWNrcy4gRmlyc3QsIG15IGltbWVkaWF0ZSBjb25jZXJuIGlzIGEgcG90ZW50aWFsIG1pc21hdGNoIGJldHdlZW4gdGhlIGRhdGEgc2hlZXQgYW5kIHRoZSBhY3R1YWwgaGFyZHdhcmUuIEkgbmVlZCB0byBxdWlja2x5IGRldGVybWluZSBpZiB0aGVyZeKAmXMgYSBjb21wcmVoZW5zaXZlIFwiT0YgTWF0Y2ggVGFibGVcIiBvciBhbiBcIkkyQyBJRCBUYWJsZVwiIHRoYXQgY2xlYXJseSBvdXRsaW5lcyB0aGUgZXhwZWN0ZWQgZGV2aWNlIGlkZW50aXRpZXMgYW5kIHRoZWlyIGNvcnJlc3BvbmRpbmcgT3BlbiBGaXJtd2FyZSAoT0YpIGJpbmRpbmdzIG9yIEkyQyBhZGRyZXNzZXMuIFRoaXMgaXMgc3RhbmRhcmQgcHJlbGltaW5hcnkgZHVlIGRpbGlnZW5jZS4gQSBjb21wcmVoZW5zaXZlIHRhYmxlIHN0cmVhbWxpbmVzIGFueSBkZWJ1Z2dpbmcgZWZmb3J0LCBvZmZlcmluZyBhIHNpbmdsZSBzb3VyY2Ugb2YgdHJ1dGggZm9yIGRldmljZSBpZGVudGlmaWNhdGlvbiBhbmQgcmVzb3VyY2UgYWxsb2NhdGlvbi4gSWYgaXQncyB0aGVyZSwgZ3JlYXQhIEl04oCZbGwgc2F2ZSBzb21lIHRpbWUuIElmIG5vdCwgaXQgbWVhbnMgSSBuZWVkIHRvIG1hbnVhbGx5IGNvcnJlbGF0ZSBkYXRhIHNoZWV0IGluZm9ybWF0aW9uIHRvIGFjdHVhbCBvbi1ib2FyZCByZXNwb25zZXMg4oCTIGFuZCB0aGF04oCZbGwgYWRkIGNvbXBsZXhpdHkgdG8gdGhlIHByb2Nlc3MuIFRpbWUgdG8gZGlnIGluIGFuZCBmaW5kIHRob3NlIGFuc3dlcnMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE5NzgzLCJPdXRwdXRUb2tlbnMiOjI2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTFUMTQ6MDI6NDEuNDg5NDIwNzM0WiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE2MTA3MDQwMDQsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiemwzMDczeF9pMmNfaWRcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9kcGxsL3psMzA3M3gvaTJjLmM9MTE9c3RhdGljIGludCB6bDMwNzN4X2kyY19wcm9iZShzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50KVxcbi0tXFxuZHJpdmVycy9kcGxsL3psMzA3M3gvaTJjLmMtMjctXFxuZHJpdmVycy9kcGxsL3psMzA3M3gvaTJjLmM6Mjg6c3RhdGljIGNvbnN0IHN0cnVjdCBpMmNfZGV2aWNlX2lkIHpsMzA3M3hfaTJjX2lkW10gPSB7XFxuZHJpdmVycy9kcGxsL3psMzA3M3gvaTJjLmMtMjktXFx0eyAubmFtZSA9IFxcXCJ6bDMwNzMxXFxcIiB9LFxcbi0tXFxuZHJpdmVycy9kcGxsL3psMzA3M3gvaTJjLmMtMzUtfTtcXG5kcml2ZXJzL2RwbGwvemwzMDczeC9pMmMuYzozNjpNT0RVTEVfREVWSUNFX1RBQkxFKGkyYywgemwzMDczeF9pMmNfaWQpO1xcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2kyYy5jLTM3LVxcbi0tXFxuZHJpdmVycy9kcGxsL3psMzA3M3gvaTJjLmM9NDg9c3RhdGljIHN0cnVjdCBpMmNfZHJpdmVyIHpsMzA3M3hfaTJjX2RyaXZlciA9IHtcXG4tLVxcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2kyYy5jLTUzLVxcdC5wcm9iZSA9IHpsMzA3M3hfaTJjX3Byb2JlLFxcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2kyYy5jOjU0OlxcdC5pZF90YWJsZSA9IHpsMzA3M3hfaTJjX2lkLFxcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2kyYy5jLTU1LX07XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTExVDE0OjAyOjQzLjEwMDEzNDA3OFoiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjgyODkwMTM5ODgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBJbnRlZ3JhdGlvbiBvZiBQVFAgQ2xvY2sgU3VwcG9ydCBpbiB0aGUgWkwzMDczWCBEcml2ZXIqKlxuXG5Pa2F5LCBzbyBJIHNlZSB0aGF0IHRoaXMgcGF0Y2ggYWRkcyBQVFAgY2xvY2sgZnVuY3Rpb25hbGl0eSB0byB0aGUgWkwzMDczWCBkcml2ZXIuIFRoZSBrZXkgaGVyZSBpcyB0aGF0IEkyQyBkZXZpY2VzIGNhbiBiZSBjcmVhdGVkIGluIHVzZXJzcGFjZSB1c2luZyBgL3N5cy9idXMvaTJjL2RldmljZXMvaTJjLSovbmV3X2RldmljZWAsIGFsbG93aW5nIGZvciBwcm9iaW5nIHRoZSBkcml2ZXIgd2l0aGluIFFFTVUsIHdoaWNoIGlzIGdyZWF0IGZvciB0ZXN0aW5nLiBPbmNlIHByb2JlZCwgdGhlIGRyaXZlciByZWdpc3RlcnMgYSBQVFAgY2xvY2ssIHdoaWNoIGlzIGNydWNpYWwuIFRoZXNlIFBUUCBjbG9ja3MgYXJlIHRoZW4gZXhwb3NlZCB2aWEgYC9kZXYvcHRwKmAgYW5kIGNvbnRyb2xsZWQgdmlhIHN0YW5kYXJkIGBpb2N0bGBzIGxpa2UgYFBUUF9DTE9DS19HRVRDQVBTYCwgYFBUUF9FWFRUU19SRVFVRVNUYCwgYFBUUF9QRVJPVVRfUkVRVUVTVGAsIGFuZCB0aGUgbGlrZS5cblxuVGhlIHBhdGNoIGl0c2VsZiBzcGVjaWZpY2FsbHkgaW1wbGVtZW50cyB0aGVzZSB1c2VyLWFjY2Vzc2libGUgZnVuY3Rpb25zOiBgZ2V0dGltZXg2NGAsIGBzZXR0aW1lNjRgLCBgYWRqdGltZWAsIGBhZGpmaW5lYCwgYW5kIGBhZGpwaGFzZWAuIFRoZXNlIG1hcCBkaXJlY3RseSB0byBQVFAgYGlvY3RsYHMuIFdlIGhhdmUgdG8gbWFrZSBzdXJlIHRoZSB1c2VyIHNwYWNlIGFwcGxpY2F0aW9ucyBhcmUgY29uZmlndXJlZCB0byB1c2UgdGhlc2UgY29tbWFuZHMuXG5cbkxvb2tpbmcgYXQgdGhlIHNwZWNpZmljIGZ1bmN0aW9ucyBhZGRlZCwgbmFtZWx5IGB6bDMwNzN4X2NoYW5fdG9kX3JlYWRgLCBgemwzMDczeF9jaGFuX3RvZF93cml0ZWAsIGB6bDMwNzN4X2NoYW5fdG9kX2FkanVzdGAsIGB6bDMwNzN4X2NoYW5fZGZfb2Zmc2V0X3NldGAsIGB6bDMwNzN4X2NoYW5fdGllX3dyaXRlYCwgYHpsMzA3M3hfY2hhbl9waGFzZV9zdGVwYCwgYHpsMzA3M3hfZHBsbF9wdHBfZ2V0dGltZXg2NGAsIGB6bDMwNzN4X2RwbGxfcHRwX3NldHRpbWU2NGAsIGB6bDMwNzN4X2RwbGxfcHRwX2FkanRpbWVgLCBgemwzMDczeF9kcGxsX3B0cF9hZGpmaW5lYCwgYW5kIGB6bDMwNzN4X2RwbGxfcHRwX2FkanBoYXNlYCwgdGhleSBhcmUgY2xlYXJseSBwYXJ0IG9mIHRoZSBQVFAgY2xvY2sgaW50ZXJmYWNlLiBUaGlzIGNvbmZpcm1zIHRoZSBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbC5cblxuVGhlIGRyaXZlciBpcyBgWkwzMDczWGAsIGFuZCBpdCByZWxpZXMgb24gYm90aCBgTkVUYCBhbmQgYFBUUF8xNTg4X0NMT0NLYC4gVGhlIGNvbmZpZyBvcHRpb25zIEkgbmVlZCB0byB2ZXJpZnkgYXJlOiBgWkwzMDczWGAsIGBaTDMwNzNYX0kyQ2AsIGBaTDMwNzNYX1NQSWAsIGFuZCBgUFRQXzE1ODhfQ0xPQ0tgLiBMZXQgbWUganVzdCBkb3VibGUtY2hlY2sgdGhhdCBgWkwzMDczWGAgY29ycmVjdGx5IGRlcGVuZHMgb24gYE5FVGAgYW5kIGBQVFBfMTU4OF9DTE9DS2AuIFRpbWUgdG8gY2hlY2sgYGRyaXZlcnMvZHBsbC96bDMwNzN4L0tjb25maWdgIGZvciB0aGUgZGVwZW5kZW5jaWVzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMDQzNCwiT3V0cHV0VG9rZW5zIjo0MSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjU1MiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xMVQxNDowMjo1MS4zODkxNTAwNTZaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNDc5MzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9kcGxsL3psMzA3M3gvS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiAxLFxuICBcIkxpbmVDb3VudFwiOiA1MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgICAxOlxcdCMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxcbiAgIDI6XFx0XFxuICAgMzpcXHRjb25maWcgWkwzMDczWFxcbiAgIDQ6XFx0XFx0dHJpc3RhdGUgXFxcIk1pY3JvY2hpcCBBenVyaXRlIERQTEwvUFRQL1N5bmNFIGRldmljZXNcXFwiIGlmIENPTVBJTEVfVEVTVFxcbiAgIDU6XFx0XFx0ZGVwZW5kcyBvbiBORVQgXFx1MDAyNlxcdTAwMjYgUFRQXzE1ODhfQ0xPQ0tcXG4gICA2OlxcdFxcdHNlbGVjdCBEUExMXFxuICAgNzpcXHRcXHRzZWxlY3QgTkVUX0RFVkxJTktcXG4gICA4OlxcdFxcdHNlbGVjdCBSRUdNQVBcXG4gICA5OlxcdFxcdGhlbHBcXG4gIDEwOlxcdFxcdCAgVGhpcyBkcml2ZXIgc3VwcG9ydHMgTWljcm9jaGlwIEF6dXJpdGUgZmFtaWx5IERQTEwvUFRQL1N5bmNFXFxuICAxMTpcXHRcXHQgIGRldmljZXMgdGhhdCBzdXBwb3J0IHVwIHRvIDUgaW5kZXBlbmRlbnQgRFBMTCBjaGFubmVscyxcXG4gIDEyOlxcdFxcdCAgMTAgaW5wdXQgcGlucyBhbmQgdXAgdG8gMjAgb3V0cHV0IHBpbnMuXFxuICAxMzpcXHRcXG4gIDE0OlxcdFxcdCAgVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZS4gVGhlIG1vZHVsZVxcbiAgMTU6XFx0XFx0ICB3aWxsIGJlIGNhbGxlZCB6bDMwNzN4LlxcbiAgMTY6XFx0XFxuICAxNzpcXHRjb25maWcgWkwzMDczWF9JMkNcXG4gIDE4OlxcdFxcdHRyaXN0YXRlIFxcXCJJMkMgYnVzIGltcGxlbWVudGF0aW9uIGZvciBNaWNyb2NoaXAgQXp1cml0ZSBkZXZpY2VzXFxcIlxcbiAgMTk6XFx0XFx0ZGVwZW5kcyBvbiBJMkMgXFx1MDAyNlxcdTAwMjYgTkVUIFxcdTAwMjZcXHUwMDI2IFBUUF8xNTg4X0NMT0NLXFxuICAyMDpcXHRcXHRzZWxlY3QgUkVHTUFQX0kyQ1xcbiAgMjE6XFx0XFx0c2VsZWN0IFpMMzA3M1hcXG4gIDIyOlxcdFxcdGhlbHBcXG4gIDIzOlxcdFxcdCAgVGhpcyBpcyBJMkMgYnVzIGltcGxlbWVudGF0aW9uIGZvciBNaWNyb2NoaXAgQXp1cml0ZSBEUExML1BUUC9TeW5jRVxcbiAgMjQ6XFx0XFx0ICBkZXZpY2VzLlxcbiAgMjU6XFx0XFxuICAyNjpcXHRcXHQgIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZSBtb2R1bGUgd2lsbFxcbiAgMjc6XFx0XFx0ICBiZSBjYWxsZWQgemwzMDczeF9pMmMuXFxuICAyODpcXHRcXG4gIDI5OlxcdGNvbmZpZyBaTDMwNzNYX1NQSVxcbiAgMzA6XFx0XFx0dHJpc3RhdGUgXFxcIlNQSSBidXMgaW1wbGVtZW50YXRpb24gZm9yIE1pY3JvY2hpcCBBenVyaXRlIGRldmljZXNcXFwiXFxuICAzMTpcXHRcXHRkZXBlbmRzIG9uIE5FVCBcXHUwMDI2XFx1MDAyNiBTUEkgXFx1MDAyNlxcdTAwMjYgUFRQXzE1ODhfQ0xPQ0tcXG4gIDMyOlxcdFxcdHNlbGVjdCBSRUdNQVBfU1BJXFxuICAzMzpcXHRcXHRzZWxlY3QgWkwzMDczWFxcbiAgMzQ6XFx0XFx0aGVscFxcbiAgMzU6XFx0XFx0ICBUaGlzIGlzIFNQSSBidXMgaW1wbGVtZW50YXRpb24gZm9yIE1pY3JvY2hpcCBBenVyaXRlIERQTEwvUFRQL1N5bmNFXFxuICAzNjpcXHRcXHQgIGRldmljZXMuXFxuICAzNzpcXHRcXG4gIDM4OlxcdFxcdCAgVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlIG1vZHVsZSB3aWxsXFxuICAzOTpcXHRcXHQgIGJlIGNhbGxlZCB6bDMwNzN4X3NwaS5cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTFUMTQ6MDI6NTEuMzg5MzI1NDQ2WiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTc0MjIzNTU4OTcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBNaWNyb2NoaXAgQXp1cml0ZSBEcml2ZXIgQ29uZmlndXJhdGlvbiBhbmQgQVBJKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBGaXJzdCwgSSBuZWVkIHRvIGZpZ3VyZSBvdXQgd2hpY2gga2VybmVsIGNvbmZpZ3VyYXRpb25zIGFyZSBlc3NlbnRpYWwgZm9yIHRoaXMgQXp1cml0ZSBEUExML1BUUC9TeW5jRSBkZXZpY2Ugc3VwcG9ydC4gSW5pdGlhbGx5LCBJIHRob3VnaHQgaXQgd2FzIGEgc3RyYWlnaHRmb3J3YXJkIGxpc3Q6IGBaTDMwNzNYYCwgYFpMMzA3M1hfSTJDYCwgYFpMMzA3M1hfU1BJYCwgYFBUUF8xNTg4X0NMT0NLYCwgYERQTExgLCBgTkVUX0RFVkxJTktgLCBgUkVHTUFQYCwgYFJFR01BUF9JMkNgLCBhbmQgYFJFR01BUF9TUElgLiBCdXQgd2FpdCwgYFpMMzA3M1hgIGlzIGFjdHVhbGx5IHNlbGVjdGVkIGJ5IGJvdGggYFpMMzA3M1hfSTJDYCBhbmQgYFpMMzA3M1hfU1BJYC4gU28sIGRpcmVjdGx5IGVuYWJsaW5nIGBaTDMwNzNYYCBtaWdodCBiZSB1bm5lY2Vzc2FyeTsgZW5hYmxpbmcgdGhlIEkyQyBhbmQgU1BJIGNvbmZpZ3VyYXRpb25zIHNob3VsZCBzdWZmaWNlLCByaWdodD9cblxuVGhlbiBJIG5vdGljZSBgWkwzMDczWGAgaXMgdHJpc3RhdGUgYW5kIG9ubHkgZGlyZWN0bHkgZW5hYmxlZCBpZiBgQ09NUElMRV9URVNUYCBpcyBzZXQuIEdpdmVuIHRoaXMsIGRpcmVjdGx5IGVuYWJsaW5nIGBaTDMwNzNYYCBzZWVtcyB0byBiZSBvZmYgdGhlIHRhYmxlLCBhcyBgWkwzMDczWF9JMkNgIGFscmVhZHkgc2VsZWN0cyBpdCBhbmQgSSB3YW50IHRvIGF2b2lkIHRoZSBgQ09NUElMRV9URVNUYCByZXF1aXJlbWVudC4gU28sIEkgd2lsbCBmb2N1cyBvbiBlbmFibGluZyBgWkwzMDczWF9JMkNgIGFuZCBgWkwzMDczWF9TUElgLiBBbmQsIG9mIGNvdXJzZSwgdGhlIGBQVFBfMTU4OF9DTE9DS2AgaXMgYSBtdXN0LWhhdmUuXG5cbk5leHQsIEkgbmVlZCB0byBpZGVudGlmeSB0aGUgY3J1Y2lhbCBBUEkgZnVuY3Rpb25zIEkgc2hvdWxkIGZvY3VzIG9uLiBJJ3ZlIGdvdCBhIGxpc3QgaGVyZTogYHpsMzA3M3hfY2hhbl90b2RfcmVhZGAsIGB6bDMwNzN4X2NoYW5fdG9kX3dyaXRlYCwgYHpsMzA3M3hfY2hhbl90b2RfYWRqdXN0YCwgYHpsMzA3M3hfY2hhbl9kZl9vZmZzZXRfc2V0YCwgYHpsMzA3M3hfY2hhbl90aWVfd3JpdGVgLCBgemwzMDczeF9jaGFuX3BoYXNlX3N0ZXBgLCBgemwzMDczeF9kcGxsX3B0cF9nZXR0aW1leDY0YCwgYHpsMzA3M3hfZHBsbF9wdHBfc2V0dGltZTY0YCwgYHpsMzA3M3hfZHBsbF9wdHBfYWRqdGltZWAsIGB6bDMwNzN4X2RwbGxfcHRwX2FkamZpbmVgLCBhbmQgYHpsMzA3M3hfZHBsbF9wdHBfYWRqcGhhc2VgLlxuXG5JIG5lZWQgdG8gY29uZmlybSBpZiB0aGVzZSBmdW5jdGlvbnMgYXJlIHN0YXRpYyBvciBub3QuIEV4YW1pbmluZyB0aGVtLCBpdCB0dXJucyBvdXQgdGhhdCBgemwzMDczeF9jaGFuX3RvZF9yZWFkYCwgYHpsMzA3M3hfY2hhbl90b2Rfd3JpdGVgLCBgemwzMDczeF9jaGFuX3RvZF9hZGp1c3RgLCBgemwzMDczeF9jaGFuX2RmX29mZnNldF9zZXRgLCBgemwzMDczeF9jaGFuX3RpZV93cml0ZWAsIGFuZCBgemwzMDczeF9jaGFuX3BoYXNlX3N0ZXBgIGFyZSAqbm90KiBzdGF0aWMsIHdoaWxlIHRoZSBgemwzMDczeF9kcGxsXypgIGZ1bmN0aW9ucyBhcmUgYWxsIHN0YXRpYy5cblxuV2FpdCBhIG1pbnV0ZSwgc2luY2UgdGhlIGB6bDMwNzN4X2RwbGxfKmAgZnVuY3Rpb25zIGFyZSB1c2VkIGFzIGZ1bmN0aW9uIHBvaW50ZXJzIHdpdGhpbiBgcHRwX2Nsb2NrX2luZm9gLCB0aGV5ICpjYW5ub3QqIGJlIGlubGluZWQsIHNvIHRoZSBjb21waWxlciAqbXVzdCogaGF2ZSBnZW5lcmF0ZWQgaW5kaXZpZHVhbCBzeW1ib2xzIGZvciB0aGVzZSBmdW5jdGlvbnMuIFRoZXkgYXJlIGVudHJ5IHBvaW50cyBmb3IgUFRQIHN1YnN5c3RlbSwgc28gSSB3aWxsIGluY2x1ZGUgdGhlbS5cblxuU28sIHRoZSBkZWZpbml0aXZlIGxpc3Qgb2YgZnVuY3Rpb25zIEkgd2lsbCBpbmNsdWRlIGlzOiBgemwzMDczeF9jaGFuX3RvZF9yZWFkYCwgYHpsMzA3M3hfY2hhbl90b2Rfd3JpdGVgLCBgemwzMDczeF9jaGFuX3RvZF9hZGp1c3RgLCBgemwzMDczeF9jaGFuX2RmX29mZnNldF9zZXRgLCBgemwzMDczeF9jaGFuX3RpZV93cml0ZWAsIGB6bDMwNzN4X2NoYW5fcGhhc2Vfc3RlcGAsIGB6bDMwNzN4X2RwbGxfcHRwX2dldHRpbWV4NjRgLCBgemwzMDczeF9kcGxsX3B0cF9zZXR0aW1lNjRgLCBgemwzMDczeF9kcGxsX3B0cF9hZGp0aW1lYCwgYHpsMzA3M3hfZHBsbF9wdHBfYWRqZmluZWAsIGFuZCBgemwzMDczeF9kcGxsX3B0cF9hZGpwaGFzZWAuXG5cbk5vdywgcmVnYXJkaW5nIHRoZSBjb25maWd1cmF0aW9ucywgSSdtIGNvbmZpZGVudCBhYm91dDogYFpMMzA3M1hfSTJDYCwgYFpMMzA3M1hfU1BJYCwgYW5kIGBQVFBfMTU4OF9DTE9DS2AuXG5cbkknbGwgcXVpY2tseSBjaGVjayBmb3IgZGVwZW5kZW5jaWVzLiBgWkwzMDczWF9JMkNgIHJlcXVpcmVzIGBJMkNgLCBgTkVUYCwgYW5kIGBQVFBfMTU4OFxuXG4iLCJJbnB1dFRva2VucyI6MjIyMTYsIk91dHB1dFRva2VucyI6MzQzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTQ1OCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTExVDE0OjAzOjA4LjgxMTY4NTIzM1oiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjc5MTg4MjU5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJaTDMwNzNYX0kyQ1wiLFxuICAgIFwiWkwzMDczWF9TUElcIixcbiAgICBcIlBUUF8xNTg4X0NMT0NLXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiemwzMDczeF9jaGFuX3RvZF9yZWFkXCIsXG4gICAgXCJ6bDMwNzN4X2NoYW5fdG9kX3dyaXRlXCIsXG4gICAgXCJ6bDMwNzN4X2NoYW5fdG9kX2FkanVzdFwiLFxuICAgIFwiemwzMDczeF9jaGFuX2RmX29mZnNldF9zZXRcIixcbiAgICBcInpsMzA3M3hfY2hhbl90aWVfd3JpdGVcIixcbiAgICBcInpsMzA3M3hfY2hhbl9waGFzZV9zdGVwXCIsXG4gICAgXCJ6bDMwNzN4X2RwbGxfcHRwX2dldHRpbWV4NjRcIixcbiAgICBcInpsMzA3M3hfZHBsbF9wdHBfc2V0dGltZTY0XCIsXG4gICAgXCJ6bDMwNzN4X2RwbGxfcHRwX2FkanRpbWVcIixcbiAgICBcInpsMzA3M3hfZHBsbF9wdHBfYWRqZmluZVwiLFxuICAgIFwiemwzMDczeF9kcGxsX3B0cF9hZGpwaGFzZVwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHMgUFRQIGNsb2NrIHN1cHBvcnQgdG8gdGhlIE1pY3JvY2hpcCBBenVyaXRlIERQTEwgZHJpdmVyICh6bDMwNzN4KS4gSXQgaW1wbGVtZW50cyBQVFAgY2xvY2sgb3BlcmF0aW9ucyBsaWtlIGdldHRpbWV4NjQsIHNldHRpbWU2NCwgYWRqdGltZSwgYWRqZmluZSwgYW5kIGFkanBoYXNlLiBUaGUgZHJpdmVyIGNhbiBiZSBpbnN0YW50aWF0ZWQgdmlhIEkyQyBvciBTUEkgaW4gUUVNVSwgYW5kIHRoZSBQVFAgb3BlcmF0aW9ucyBhcmUgcmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlIHZpYSBQVFAgaW9jdGxzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIlpMMzA3M1hfSTJDXCIsXG4gICAgXCJaTDMwNzNYX1NQSVwiLFxuICAgIFwiUFRQXzE1ODhfQ0xPQ0tcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJ6bDMwNzN4X2NoYW5fdG9kX3JlYWRcIixcbiAgICBcInpsMzA3M3hfY2hhbl90b2Rfd3JpdGVcIixcbiAgICBcInpsMzA3M3hfY2hhbl90b2RfYWRqdXN0XCIsXG4gICAgXCJ6bDMwNzN4X2NoYW5fZGZfb2Zmc2V0X3NldFwiLFxuICAgIFwiemwzMDczeF9jaGFuX3RpZV93cml0ZVwiLFxuICAgIFwiemwzMDczeF9jaGFuX3BoYXNlX3N0ZXBcIixcbiAgICBcInpsMzA3M3hfZHBsbF9wdHBfZ2V0dGltZXg2NFwiLFxuICAgIFwiemwzMDczeF9kcGxsX3B0cF9zZXR0aW1lNjRcIixcbiAgICBcInpsMzA3M3hfZHBsbF9wdHBfYWRqdGltZVwiLFxuICAgIFwiemwzMDczeF9kcGxsX3B0cF9hZGpmaW5lXCIsXG4gICAgXCJ6bDMwNzN4X2RwbGxfcHRwX2FkanBoYXNlXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcyBQVFAgY2xvY2sgc3VwcG9ydCB0byB0aGUgTWljcm9jaGlwIEF6dXJpdGUgRFBMTCBkcml2ZXIgKHpsMzA3M3gpLiBJdCBpbXBsZW1lbnRzIFBUUCBjbG9jayBvcGVyYXRpb25zIGxpa2UgZ2V0dGltZXg2NCwgc2V0dGltZTY0LCBhZGp0aW1lLCBhZGpmaW5lLCBhbmQgYWRqcGhhc2UuIFRoZSBkcml2ZXIgY2FuIGJlIGluc3RhbnRpYXRlZCB2aWEgSTJDIG9yIFNQSSBpbiBRRU1VLCBhbmQgdGhlIFBUUCBvcGVyYXRpb25zIGFyZSByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2UgdmlhIFBUUCBpb2N0bHMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTExVDE0OjAzOjA4Ljg5MDg4MzY4MloiLCJTZXEiOjExLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6IklmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDc5NDM5MTMzODQsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMVQxNDowMzowOC44OTE1MzE4NTJaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6ImFnZW50IiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiYmVzdC1leHBlbnNpdmUiLCJEdXJhdGlvbiI6NDc5NDMyNTk1MzQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHMgUFRQIGNsb2NrIHN1cHBvcnQgdG8gdGhlIE1pY3JvY2hpcCBBenVyaXRlIERQTEwvUFRQL1N5bmNFIGRldmljZXMgZHJpdmVyLiBJdCBpbnRyb2R1Y2VzIGZ1bmN0aW9ucyB0byByZWFkL3dyaXRlIFRpbWUgb2YgRGF5IChUb0QpLCBhZGp1c3QgcGhhc2UsIGFkanVzdCBmcmVxdWVuY3ksIGFuZCByZWdpc3RlciBhIFBUUCBjbG9jayBkZXZpY2UuIFRoZSBkcml2ZXIgaW50ZXJhY3RzIHdpdGggdGhlIFBUUCBzdWJzeXN0ZW0gYnkgcHJvdmlkaW5nIGNhbGxiYWNrcyAoYGdldHRpbWV4NjRgLCBgc2V0dGltZTY0YCwgYGFkanRpbWVgLCBgYWRqZmluZWAsIGBhZGpwaGFzZWApLiBBbGwgc3RydWN0dXJlcyBhbGxvY2F0ZWQgZHluYW1pY2FsbHkgYXJlIHplcm8taW5pdGlhbGl6ZWQgdXNpbmcgYGt6YWxsb2Nfb2JqYC4gVGhlIGBwdHBfY2xvY2tfaW5mb2Agc3RydWN0dXJlIGlzIGNvcGllZCBmcm9tIGEgc3RhdGljIGNvbnN0IHRlbXBsYXRlLCBlbnN1cmluZyBhbGwgdW5pbml0aWFsaXplZCBmaWVsZHMgYXJlIHplcm9lZCBieSB0aGUgY29tcGlsZXIgYmVmb3JlIGBzbnByaW50ZmAgbW9kaWZpZXMgdGhlIGBuYW1lYCBmaWVsZC4gVGhlIGBzdHJ1Y3QgdGltZXNwZWM2NGAgcG9wdWxhdGVkIGJ5IHRoZSBkcml2ZXIgaXMgZnVsbHkgaW5pdGlhbGl6ZWQgb24gc3VjY2VzcywgYW5kIGVycm9ycyBhcmUgcHJvcGVybHkgcHJvcGFnYXRlZCB0byB0aGUgUFRQIHN1YnN5c3RlbSwgcHJldmVudGluZyB1bmluaXRpYWxpemVkIGRhdGEgZnJvbSBiZWluZyB1c2VkIG9yIGNvcGllZCB0byB1c2Vyc3BhY2UuIE5vIG5ldyB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcyBvciBpbmZvLWxlYWtzIGFyZSBpbnRyb2R1Y2VkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeVxuZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmRcbmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcilcbmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLlxuXG5DUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjpcbi0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZVxuICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU5cbiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUFxuICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLlxuLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCxcbiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLlxuXG5SdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLFxuTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy5cbkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFlcbnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzXG50aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLlxuXG5Mb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdFxudW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsXG5hIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXNcbnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nXG51bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2xcbmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSxcbmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6XG4xLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYlxuICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHNcbiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuXG4yLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzXG4gICBvciBzdHJ1Y3QgZmllbGRzLlxuMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkc1xuICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy5cbjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzXG4gICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuXG5cblNldCBOZWVkc0tNU0FOPWZhbHNlIElGOlxuLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlclxuICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHRcbiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLlxuLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZFxuICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuXG4tIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy5cblxuVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZVxuZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDk1N2RjZmQ2NzFlOGJjNTk3NzE5YzEyY2IyYjMwMWQyZjc0OWZlZDFcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVHVlIEF1ZyAxMSAxNDowMjoyMiAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvZHBsbC96bDMwNzN4L0tjb25maWcgYi9kcml2ZXJzL2RwbGwvemwzMDczeC9LY29uZmlnXG5pbmRleCA1YmJjYTE0MDA1ODEzLi5kYTE3MzFhY2UxNWYwIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9kcGxsL3psMzA3M3gvS2NvbmZpZ1xuKysrIGIvZHJpdmVycy9kcGxsL3psMzA3M3gvS2NvbmZpZ1xuQEAgLTIsNyArMiw3IEBAXG4gXG4gY29uZmlnIFpMMzA3M1hcbiBcdHRyaXN0YXRlIFwiTWljcm9jaGlwIEF6dXJpdGUgRFBMTC9QVFAvU3luY0UgZGV2aWNlc1wiIGlmIENPTVBJTEVfVEVTVFxuLVx0ZGVwZW5kcyBvbiBORVRcbitcdGRlcGVuZHMgb24gTkVUIFx1MDAyNlx1MDAyNiBQVFBfMTU4OF9DTE9DS1xuIFx0c2VsZWN0IERQTExcbiBcdHNlbGVjdCBORVRfREVWTElOS1xuIFx0c2VsZWN0IFJFR01BUFxuQEAgLTE2LDcgKzE2LDcgQEAgY29uZmlnIFpMMzA3M1hcbiBcbiBjb25maWcgWkwzMDczWF9JMkNcbiBcdHRyaXN0YXRlIFwiSTJDIGJ1cyBpbXBsZW1lbnRhdGlvbiBmb3IgTWljcm9jaGlwIEF6dXJpdGUgZGV2aWNlc1wiXG4tXHRkZXBlbmRzIG9uIEkyQyBcdTAwMjZcdTAwMjYgTkVUXG4rXHRkZXBlbmRzIG9uIEkyQyBcdTAwMjZcdTAwMjYgTkVUIFx1MDAyNlx1MDAyNiBQVFBfMTU4OF9DTE9DS1xuIFx0c2VsZWN0IFJFR01BUF9JMkNcbiBcdHNlbGVjdCBaTDMwNzNYXG4gXHRoZWxwXG5AQCAtMjgsNyArMjgsNyBAQCBjb25maWcgWkwzMDczWF9JMkNcbiBcbiBjb25maWcgWkwzMDczWF9TUElcbiBcdHRyaXN0YXRlIFwiU1BJIGJ1cyBpbXBsZW1lbnRhdGlvbiBmb3IgTWljcm9jaGlwIEF6dXJpdGUgZGV2aWNlc1wiXG4tXHRkZXBlbmRzIG9uIE5FVCBcdTAwMjZcdTAwMjYgU1BJXG4rXHRkZXBlbmRzIG9uIE5FVCBcdTAwMjZcdTAwMjYgU1BJIFx1MDAyNlx1MDAyNiBQVFBfMTU4OF9DTE9DS1xuIFx0c2VsZWN0IFJFR01BUF9TUElcbiBcdHNlbGVjdCBaTDMwNzNYXG4gXHRoZWxwXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jIGIvZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jXG5pbmRleCA0ZWMyY2Y1M2RhZDQ2Li5iYzZkNzBkMjVkNzkxIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jXG4rKysgYi9kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmNcbkBAIC0zLDYgKzMsNyBAQFxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2NsZWFudXAuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2RlbGF5LmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9kZXZfcHJpbnRrLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9wdHBfY2xvY2tfa2VybmVsLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9zdHJpbmcuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3R5cGVzLmhcdTAwM2VcbiBcbkBAIC0xNjIsOCArMTYzLDggQEAgaW50IHpsMzA3M3hfY2hhbl9uY29fbW9kZV9zZXQoc3RydWN0IHpsMzA3M3hfZGV2ICp6bGRldiwgdTggaW5kZXgpXG4gICogQHpsZGV2OiBwb2ludGVyIHRvIHpsMzA3M3hfZGV2IHN0cnVjdHVyZVxuICAqIEBpbmRleDogRFBMTCBjaGFubmVsIGluZGV4IHRvIGZldGNoIHN0YXRlIGZvclxuICAqXG4tICogUmVhZHMgdGhlIG1vZGVfcmVmc2VsIHJlZ2lzdGVyIGFuZCByZWZlcmVuY2UgcHJpb3JpdHkgcmVnaXN0ZXJzIGZvclxuLSAqIHRoZSBnaXZlbiBEUExMIGNoYW5uZWwgYW5kIHN0b3JlcyB0aGUgcmF3IHZhbHVlcyBmb3IgbGF0ZXIgdXNlLlxuKyAqIFJlYWRzIHRoZSBtb2RlX3JlZnNlbCwgc3RhdHVzIGFuZCByZWZlcmVuY2UgcHJpb3JpdHkgcmVnaXN0ZXJzIGZvclxuKyAqIHRoZSBnaXZlbiBEUExMIGNoYW5uZWwgYW5kIHN0b3JlcyB0aGUgdmFsdWVzIGZvciBsYXRlciB1c2UuXG4gICpcbiAgKiBSZXR1cm46IDAgb24gc3VjY2VzcywgXHUwMDNjMCBvbiBlcnJvclxuICAqL1xuQEAgLTIzNCw2ICsyMzUsMzI2IEBAIGNvbnN0IHN0cnVjdCB6bDMwNzN4X2NoYW4gKnpsMzA3M3hfY2hhbl9zdGF0ZV9nZXQoc3RydWN0IHpsMzA3M3hfZGV2ICp6bGRldixcbiBcdHJldHVybiBcdTAwMjZ6bGRldi1cdTAwM2VjaGFuW2luZGV4XTtcbiB9XG4gXG4rLyoqXG4rICogemwzMDczeF9jaGFuX3RvZF9yZWFkeV93YWl0IC0gd2FpdCBmb3IgVG9EIHNlbWFwaG9yZSB0byBjbGVhclxuKyAqIEB6bGRldjogcG9pbnRlciB0byB6bDMwNzN4IGRldmljZVxuKyAqIEBjaDogRFBMTCBjaGFubmVsIGluZGV4XG4rICpcbisgKiBDaGVja3MgdGhlIFRvRCBjb250cm9sIHJlZ2lzdGVyIHNlbWFwaG9yZSBiaXQuIElmIGNsZWFyLCByZXR1cm5zXG4rICogaW1tZWRpYXRlbHkuIE90aGVyd2lzZSBwb2xscyB1bnRpbCB0aGUgYml0IGlzIGNsZWFyZWQgYnkgdGhlIGRldmljZS5cbisgKlxuKyAqIFJldHVybjpcbisgKiAqIDBcdFx0XHQtIHN1Y2Nlc3NcbisgKiAqICUtRUJVU1lcdFx0LSB0aW1lb3V0XG4rICogKiAlLUVPUE5PVFNVUFBcdC0gdW5rbm93biBjb21tYW5kIGRldGVjdGVkXG4rICogKiBuZWdhdGl2ZVx0XHQtIG90aGVyIGVycm9yXG4rICovXG4raW50IHpsMzA3M3hfY2hhbl90b2RfcmVhZHlfd2FpdChzdHJ1Y3QgemwzMDczeF9kZXYgKnpsZGV2LCB1OCBjaClcbit7XG4rXHR1bnNpZ25lZCBpbnQgdGltZW91dDtcbitcdHU4IHRvZF9jdHJsO1xuK1x0aW50IHJjO1xuK1xuK1x0cmMgPSB6bDMwNzN4X3JlYWRfdTgoemxkZXYsIFpMX1JFR19EUExMX1RPRF9DVFJMKGNoKSwgXHUwMDI2dG9kX2N0cmwpO1xuK1x0aWYgKHJjKVxuK1x0XHRyZXR1cm4gcmM7XG4rXG4rXHRpZiAoISh0b2RfY3RybCBcdTAwMjYgWkxfRFBMTF9UT0RfQ1RSTF9TRU0pKVxuK1x0XHRyZXR1cm4gMDtcbitcbitcdHN3aXRjaCAoRklFTERfR0VUKFpMX0RQTExfVE9EX0NUUkxfQ01ELCB0b2RfY3RybCkpIHtcbitcdGNhc2UgWkxfRFBMTF9UT0RfQ1RSTF9DTURfV1JfTkVYVF8xSFo6XG4rXHRcdHRpbWVvdXQgPSBaTF9QT0xMX1RPRF9XUl9USU1FT1VUX1VTO1xuK1x0XHRicmVhaztcbitcdGNhc2UgWkxfRFBMTF9UT0RfQ1RSTF9DTURfUkRfQ1VSUkVOVDpcbitcdGNhc2UgWkxfRFBMTF9UT0RfQ1RSTF9DTURfUkRfTkVYVF8xSFo6XG4rXHRcdHRpbWVvdXQgPSBaTF9QT0xMX1RPRF9SRF9USU1FT1VUX1VTO1xuK1x0XHRicmVhaztcbitcdGRlZmF1bHQ6XG4rXHRcdFdBUk5fT04oMSk7XG4rXHRcdHJldHVybiAtRU9QTk9UU1VQUDtcbitcdH1cbitcbitcdHJjID0gemwzMDczeF9wb2xsX3plcm9fdTgoemxkZXYsIFpMX1JFR19EUExMX1RPRF9DVFJMKGNoKSxcbitcdFx0XHRcdCAgWkxfRFBMTF9UT0RfQ1RSTF9TRU0sIHRpbWVvdXQpO1xuK1xuK1x0cmV0dXJuIHJjID09IC1FVElNRURPVVQgPyAtRUJVU1kgOiByYztcbit9XG4rXG4rLyoqXG4rICogemwzMDczeF9jaGFuX3RvZF9jdHJsIC0gaXNzdWUgVG9EIGNvbW1hbmRcbisgKiBAemxkZXY6IHBvaW50ZXIgdG8gemwzMDczeCBkZXZpY2VcbisgKiBAY2g6IERQTEwgY2hhbm5lbCBpbmRleFxuKyAqIEBjbWQ6IFRvRCBjb21tYW5kIHRvIGV4ZWN1dGVcbisgKlxuKyAqIFdyaXRlcyB0aGUgc2VtYXBob3JlIGFuZCBjb21tYW5kIHRvIGRwbGxfdG9kX2N0cmwuIFRoZSBjYWxsZXIgbXVzdFxuKyAqIGVuc3VyZSB0aGUgZGV2aWNlIGlzIHJlYWR5IChzZW1hcGhvcmUgY2xlYXIpIGJlZm9yZSBjYWxsaW5nIGFuZFxuKyAqIG11c3Qgd2FpdCBmb3IgY29tcGxldGlvbiBpZiBuZWVkZWQuXG4rICpcbisgKiBSZXR1cm46IDAgb24gc3VjY2VzcywgXHUwMDNjMCBvbiBlcnJvclxuKyAqL1xuK3N0YXRpYyBpbnQgemwzMDczeF9jaGFuX3RvZF9jdHJsKHN0cnVjdCB6bDMwNzN4X2RldiAqemxkZXYsIHU4IGNoLCB1OCBjbWQpXG4re1xuK1x0cmV0dXJuIHpsMzA3M3hfd3JpdGVfdTgoemxkZXYsIFpMX1JFR19EUExMX1RPRF9DVFJMKGNoKSxcbitcdFx0XHRcdFpMX0RQTExfVE9EX0NUUkxfU0VNIHwgY21kKTtcbit9XG4rXG4rLyoqXG4rICogemwzMDczeF9jaGFuX3RvZF9yZWFkIC0gcmVhZCBUb0QgcmVnaXN0ZXJzIGFmdGVyIGlzc3VpbmcgYSBjb21tYW5kXG4rICogQHpsZGV2OiBwb2ludGVyIHRvIHpsMzA3M3ggZGV2aWNlXG4rICogQGNoOiBEUExMIGNoYW5uZWwgaW5kZXhcbisgKiBAbmV4dF9oejogaWYgdHJ1ZSwgcmVhZCBwcmVkaWN0ZWQgVG9EIGF0IG5leHQgMSBIejsgb3RoZXJ3aXNlIHJlYWQgY3VycmVudFxuKyAqIEB0czogdGltZXNwZWMgdG8gc3RvcmUgdGhlIHJlc3VsdFxuKyAqIEBzdHM6IG9wdGlvbmFsIHN5c3RlbSB0aW1lc3RhbXAgcGFpciBmb3IgY3Jvc3MtdGltZXN0YW1waW5nXG4rICpcbisgKiBDb250ZXh0OiBDYWxsZXIgbXVzdCBzZXJpYWxpemUgYWxsIHpsMzA3M3hfY2hhbl90b2RfKiBjYWxscyBleHRlcm5hbGx5LlxuKyAqIFJldHVybjogMCBvbiBzdWNjZXNzLCBcdTAwM2MwIG9uIGVycm9yXG4rICovXG4raW50IHpsMzA3M3hfY2hhbl90b2RfcmVhZChzdHJ1Y3QgemwzMDczeF9kZXYgKnpsZGV2LCB1OCBjaCxcbitcdFx0XHQgIGJvb2wgbmV4dF9oeiwgc3RydWN0IHRpbWVzcGVjNjQgKnRzLFxuK1x0XHRcdCAgc3RydWN0IHB0cF9zeXN0ZW1fdGltZXN0YW1wICpzdHMpXG4re1xuK1x0dTMyIG5zZWM7XG4rXHR1NjQgc2VjO1xuK1x0dTggY21kO1xuK1x0aW50IHJjO1xuK1xuK1x0aWYgKG5leHRfaHopXG4rXHRcdGNtZCA9IFpMX0RQTExfVE9EX0NUUkxfQ01EX1JEX05FWFRfMUhaO1xuK1x0ZWxzZVxuK1x0XHRjbWQgPSBaTF9EUExMX1RPRF9DVFJMX0NNRF9SRF9DVVJSRU5UO1xuK1xuK1x0LyogV2FpdCBmb3IgYW55IHByZXZpb3VzIFRvRCBvcGVyYXRpb24gdG8gY29tcGxldGUgKi9cbitcdHJjID0gemwzMDczeF9jaGFuX3RvZF9yZWFkeV93YWl0KHpsZGV2LCBjaCk7XG4rXHRpZiAocmMpXG4rXHRcdHJldHVybiByYztcbitcbitcdHB0cF9yZWFkX3N5c3RlbV9wcmV0cyhzdHMpO1xuK1x0cmMgPSB6bDMwNzN4X2NoYW5fdG9kX2N0cmwoemxkZXYsIGNoLCBjbWQpO1xuK1x0aWYgKHJjKVxuK1x0XHRyZXR1cm4gcmM7XG4rXG4rXHRyYyA9IHpsMzA3M3hfY2hhbl90b2RfcmVhZHlfd2FpdCh6bGRldiwgY2gpO1xuK1x0aWYgKHJjKVxuK1x0XHRyZXR1cm4gcmM7XG4rXHRwdHBfcmVhZF9zeXN0ZW1fcG9zdHRzKHN0cyk7XG4rXG4rXHRyYyA9IHpsMzA3M3hfcmVhZF91NDgoemxkZXYsIFpMX1JFR19EUExMX1RPRF9TRUMoY2gpLCBcdTAwMjZzZWMpO1xuK1x0aWYgKHJjKVxuK1x0XHRyZXR1cm4gcmM7XG4rXG4rXHQvKiBIVyBuYW5vc2Vjb25kcyBhcmUgYWx3YXlzIGluIFswLCBOU0VDX1BFUl9TRUMpIHJhbmdlICovXG4rXHRyYyA9IHpsMzA3M3hfcmVhZF91MzIoemxkZXYsIFpMX1JFR19EUExMX1RPRF9OUyhjaCksIFx1MDAyNm5zZWMpO1xuK1x0aWYgKHJjKVxuK1x0XHRyZXR1cm4gcmM7XG4rXG4rXHR0cy1cdTAwM2V0dl9zZWMgPSBzZWM7XG4rXHR0cy1cdTAwM2V0dl9uc2VjID0gbnNlYztcbitcbitcdHJldHVybiAwO1xuK31cbitcbisvKipcbisgKiB6bDMwNzN4X2NoYW5fdG9kX3dyaXRlIC0gd3JpdGUgVG9EIHJlZ2lzdGVycyBhbmQgdHJpZ2dlciAxIEh6IHVwZGF0ZVxuKyAqIEB6bGRldjogcG9pbnRlciB0byB6bDMwNzN4IGRldmljZVxuKyAqIEBjaDogRFBMTCBjaGFubmVsIGluZGV4XG4rICogQHRzOiB0aW1lIHRvIHNldFxuKyAqXG4rICogQ29udGV4dDogQ2FsbGVyIG11c3Qgc2VyaWFsaXplIGFsbCB6bDMwNzN4X2NoYW5fdG9kXyogY2FsbHMgZXh0ZXJuYWxseS5cbisgKiBSZXR1cm46IDAgb24gc3VjY2VzcywgXHUwMDNjMCBvbiBlcnJvclxuKyAqL1xuK2ludCB6bDMwNzN4X2NoYW5fdG9kX3dyaXRlKHN0cnVjdCB6bDMwNzN4X2RldiAqemxkZXYsIHU4IGNoLFxuK1x0XHRcdCAgIHN0cnVjdCB0aW1lc3BlYzY0IHRzKVxuK3tcbitcdGludCByYztcbitcbitcdC8qIFdhaXQgZm9yIGFueSBwcmV2aW91cyBUb0Qgb3BlcmF0aW9uIHRvIGNvbXBsZXRlICovXG4rXHRyYyA9IHpsMzA3M3hfY2hhbl90b2RfcmVhZHlfd2FpdCh6bGRldiwgY2gpO1xuK1x0aWYgKHJjKVxuK1x0XHRyZXR1cm4gcmM7XG4rXG4rXHRyYyA9IHpsMzA3M3hfd3JpdGVfdTQ4KHpsZGV2LCBaTF9SRUdfRFBMTF9UT0RfU0VDKGNoKSwgdHMudHZfc2VjKTtcbitcdGlmIChyYylcbitcdFx0cmV0dXJuIHJjO1xuK1xuK1x0cmMgPSB6bDMwNzN4X3dyaXRlX3UzMih6bGRldiwgWkxfUkVHX0RQTExfVE9EX05TKGNoKSwgdHMudHZfbnNlYyk7XG4rXHRpZiAocmMpXG4rXHRcdHJldHVybiByYztcbitcbitcdHJldHVybiB6bDMwNzN4X2NoYW5fdG9kX2N0cmwoemxkZXYsIGNoLFxuK1x0XHRcdFx0ICAgICBaTF9EUExMX1RPRF9DVFJMX0NNRF9XUl9ORVhUXzFIWik7XG4rfVxuK1xuKy8qKlxuKyAqIHpsMzA3M3hfY2hhbl90b2RfYWRqdXN0IC0gYXRvbWljIFRvRCByZWFkLW1vZGlmeS13cml0ZSB3aXRoIHJvbGxvdmVyIGd1YXJkXG4rICogQHpsZGV2OiBwb2ludGVyIHRvIHpsMzA3M3ggZGV2aWNlXG4rICogQGNoOiBEUExMIGNoYW5uZWwgaW5kZXhcbisgKiBAZGVsdGE6IHRpbWUgYWRqdXN0bWVudCB0byBhcHBseVxuKyAqXG4rICogUmVhZHMgdGhlIG5leHQtSHogVG9EIGFuZCBjdXJyZW50IFRvRCwgdGhlbiBjaGVja3Mgd2hldGhlciBlbm91Z2ggdGltZVxuKyAqIHJlbWFpbnMgYmVmb3JlIHRoZSBuZXh0IDEgSHogcm9sbG92ZXIgdG8gc2FmZWx5IGNvbXBsZXRlIHRoZSB3cml0ZS5cbisgKiBSZS1yZWFkcyBpZiB0aGUgMSBIeiB0aWNrIGNyb3NzZWQgYmV0d2VlbiB0aGUgdHdvIHJlYWRzIG9yIGlmIGxlc3NcbisgKiB0aGFuIDIwIG1zIHJlbWFpbnMgYmVmb3JlIHRoZSBuZXh0IHJvbGxvdmVyLiBBcHBsaWVzIEBkZWx0YSBhbmQgd3JpdGVzXG4rICogdGhlIHJlc3VsdCBiYWNrLlxuKyAqXG4rICogQ29udGV4dDogQ2FsbGVyIG11c3Qgc2VyaWFsaXplIGFsbCB6bDMwNzN4X2NoYW5fdG9kXyogY2FsbHMgZXh0ZXJuYWxseS5cbisgKiBSZXR1cm46IDAgb24gc3VjY2VzcywgXHUwMDNjMCBvbiBlcnJvclxuKyAqL1xuK2ludCB6bDMwNzN4X2NoYW5fdG9kX2FkanVzdChzdHJ1Y3QgemwzMDczeF9kZXYgKnpsZGV2LCB1OCBjaCxcbitcdFx0XHQgICAgc3RydWN0IHRpbWVzcGVjNjQgZGVsdGEpXG4re1xuKyNkZWZpbmUgWkxfVE9EX01BWF9SRVRSSUVTXHQyMFxuK1x0c3RhdGljIGNvbnN0IGxvbmcgdGhyZXNob2xkX25zID0gMjAgKiBOU0VDX1BFUl9NU0VDO1xuK1x0c3RydWN0IHRpbWVzcGVjNjQgdHNfbmV4dCwgdHNfY3VyLCBkaWZmO1xuK1x0aW50IHJjLCBpO1xuK1xuK1x0Zm9yIChpID0gMDsgaSBcdTAwM2MgWkxfVE9EX01BWF9SRVRSSUVTOyBpKyspIHtcbitcdFx0cmMgPSB6bDMwNzN4X2NoYW5fdG9kX3JlYWQoemxkZXYsIGNoLCB0cnVlLCBcdTAwMjZ0c19uZXh0LCBOVUxMKTtcbitcdFx0aWYgKHJjKVxuK1x0XHRcdHJldHVybiByYztcbitcbitcdFx0cmMgPSB6bDMwNzN4X2NoYW5fdG9kX3JlYWQoemxkZXYsIGNoLCBmYWxzZSwgXHUwMDI2dHNfY3VyLCBOVUxMKTtcbitcdFx0aWYgKHJjKVxuK1x0XHRcdHJldHVybiByYztcbitcbitcdFx0LyogRW5zdXJlIHRoZSAxIEh6IHRpY2sgZGlkIG5vdCBjcm9zcyBiZXR3ZWVuIHRoZSB0d28gcmVhZHNcbitcdFx0ICogYW5kIHRoYXQgZW5vdWdoIG1hcmdpbiByZW1haW5zIHRvIGNvbXBsZXRlIHRoZSB3cml0ZS5cbitcdFx0ICovXG4rXHRcdGRpZmYgPSB0aW1lc3BlYzY0X3N1Yih0c19uZXh0LCB0c19jdXIpO1xuK1x0XHRpZiAoZGlmZi50dl9zZWMgXHUwMDNlIDAgfHxcbitcdFx0ICAgICghZGlmZi50dl9zZWMgXHUwMDI2XHUwMDI2IGRpZmYudHZfbnNlYyBcdTAwM2U9IHRocmVzaG9sZF9ucykpXG4rXHRcdFx0YnJlYWs7XG4rXHR9XG4rXHRpZiAoaSA9PSBaTF9UT0RfTUFYX1JFVFJJRVMpIHtcbitcdFx0ZGV2X3dhcm4oemxkZXYtXHUwMDNlZGV2LFxuK1x0XHRcdCBcIkRQTEwldSBUb0QgYWRqdXN0IGZhaWxlZCB0byBnZXQgc3RhYmxlIG1hcmdpblxcblwiLFxuK1x0XHRcdCBjaCk7XG4rXHRcdHJldHVybiAtRUJVU1k7XG4rXHR9XG4rXG4rXHQvKiBBcHBseSBkZWx0YSB0byB0aGUgbmV4dC1IeiBUb0QgKi9cbitcdHRzX25leHQgPSB0aW1lc3BlYzY0X2FkZCh0c19uZXh0LCBkZWx0YSk7XG4rXHRpZiAoIXRpbWVzcGVjNjRfdmFsaWQoXHUwMDI2dHNfbmV4dCkpXG4rXHRcdHJldHVybiAtRUlOVkFMO1xuK1xuK1x0cmV0dXJuIHpsMzA3M3hfY2hhbl90b2Rfd3JpdGUoemxkZXYsIGNoLCB0c19uZXh0KTtcbisjdW5kZWYgWkxfVE9EX01BWF9SRVRSSUVTXG4rfVxuK1xuKy8qKlxuKyAqIHpsMzA3M3hfY2hhbl9kZl9vZmZzZXRfc2V0IC0gd3JpdGUgZGVsdGEgZnJlcXVlbmN5IG9mZnNldCB0byBoYXJkd2FyZVxuKyAqIEB6bGRldjogcG9pbnRlciB0byB6bDMwNzN4IGRldmljZVxuKyAqIEBjaDogRFBMTCBjaGFubmVsIGluZGV4XG4rICogQG9mZnNldDogZnJlcXVlbmN5IG9mZnNldCBpbiAyXi00OCBzdGVwc1xuKyAqXG4rICogQ29udGV4dDogQ2FsbGVyIG11c3QgaG9sZCB0aGUgcGVyLURQTEwgbG9jay5cbisgKiBSZXR1cm46IDAgb24gc3VjY2VzcywgXHUwMDNjMCBvbiBlcnJvclxuKyAqL1xuK2ludCB6bDMwNzN4X2NoYW5fZGZfb2Zmc2V0X3NldChzdHJ1Y3QgemwzMDczeF9kZXYgKnpsZGV2LCB1OCBjaCwgczY0IG9mZnNldClcbit7XG4rXHRpbnQgcmM7XG4rXG4rXHRyYyA9IHpsMzA3M3hfd3JpdGVfdTQ4KHpsZGV2LCBaTF9SRUdfRFBMTF9ERl9PRkZTRVQoY2gpLCBvZmZzZXQpO1xuK1x0aWYgKCFyYylcbitcdFx0emxkZXYtXHUwMDNlY2hhbltjaF0uZGZfb2Zmc2V0ID0gb2Zmc2V0O1xuK1xuK1x0cmV0dXJuIHJjO1xuK31cbitcbisvKipcbisgKiB6bDMwNzN4X2NoYW5fdGllX3dyaXRlIC0gYWRqdXN0IERQTEwgcGhhc2UgdXNpbmcgVElFIHdyaXRlXG4rICogQHpsZGV2OiBwb2ludGVyIHRvIHpsMzA3M3ggZGV2aWNlXG4rICogQGNoOiBEUExMIGNoYW5uZWwgaW5kZXhcbisgKiBAZGVsdGFfbnM6IHBoYXNlIGFkanVzdG1lbnQgaW4gbmFub3NlY29uZHMgKG11c3QgYmUgaW4gKC0xcywgMXMpKVxuKyAqXG4rICogQ29udmVydHMgbmFub3NlY29uZHMgdG8gVElFIHVuaXRzICgwLjAxIHBzKSBhbmQgd3JpdGVzIFRJRSBkYXRhXG4rICogdG8gdGhlIHNwZWNpZmllZCBjaGFubmVsLlxuKyAqXG4rICogUmV0dXJuOiAwIG9uIHN1Y2Nlc3MsIFx1MDAzYzAgb24gZXJyb3JcbisgKi9cbitpbnQgemwzMDczeF9jaGFuX3RpZV93cml0ZShzdHJ1Y3QgemwzMDczeF9kZXYgKnpsZGV2LCB1OCBjaCwgczY0IGRlbHRhX25zKVxuK3tcbitcdHM2NCB0aWVfZGF0YTtcbitcdGludCByYztcbitcbitcdGlmIChXQVJOX09OKGRlbHRhX25zIFx1MDAzYz0gLU5TRUNfUEVSX1NFQyB8fCBkZWx0YV9ucyBcdTAwM2U9IE5TRUNfUEVSX1NFQykpXG4rXHRcdHJldHVybiAtRVJBTkdFO1xuK1xuK1x0Z3VhcmQobXV0ZXgpKFx1MDAyNnpsZGV2LVx1MDAzZXRpZV9sb2NrKTtcbitcbitcdC8qIFdhaXQgZm9yIGFueSBwcmV2aW91cyBUSUUgb3BlcmF0aW9uIHRvIGNvbXBsZXRlICovXG4rXHRyYyA9IHpsMzA3M3hfcG9sbF96ZXJvX3U4KHpsZGV2LCBaTF9SRUdfRFBMTF9USUVfQ1RSTCxcbitcdFx0XHRcdCAgWkxfRFBMTF9USUVfQ1RSTF9PUCxcbitcdFx0XHRcdCAgWkxfUE9MTF9USUVfV1JfVElNRU9VVF9VUyk7XG4rXHRpZiAocmMpXG4rXHRcdHJldHVybiByYztcbitcbitcdC8qIENvbnZlcnQgbnMgdG8gVElFIHVuaXRzICgwLjAxIHBzID0gMTBeLTE0IHMpICovXG4rXHR0aWVfZGF0YSA9IGRlbHRhX25zICogMTAwMDAwTEw7XG4rXG4rXHRyYyA9IHpsMzA3M3hfd3JpdGVfdTQ4KHpsZGV2LCBaTF9SRUdfRFBMTF9USUVfREFUQShjaCksIHRpZV9kYXRhKTtcbitcdGlmIChyYylcbitcdFx0cmV0dXJuIHJjO1xuK1xuK1x0cmMgPSB6bDMwNzN4X3dyaXRlX3U4KHpsZGV2LCBaTF9SRUdfRFBMTF9USUVfQ1RSTF9NQVNLLCBCSVQoY2gpKTtcbitcdGlmIChyYylcbitcdFx0cmV0dXJuIHJjO1xuK1xuK1x0cmV0dXJuIHpsMzA3M3hfd3JpdGVfdTgoemxkZXYsIFpMX1JFR19EUExMX1RJRV9DVFJMLFxuK1x0XHRcdFx0WkxfRFBMTF9USUVfQ1RSTF9PUF9XUik7XG4rfVxuK1xuKy8qKlxuKyAqIHpsMzA3M3hfY2hhbl9waGFzZV9zdGVwIC0gZXhlY3V0ZSBvbmUgb3V0cHV0IHBoYXNlIHN0ZXAgb3BlcmF0aW9uXG4rICogQHpsZGV2OiBwb2ludGVyIHRvIHpsMzA3M3ggZGV2aWNlXG4rICogQGNoOiBEUExMIGNoYW5uZWwgaW5kZXhcbisgKiBAb3V0X21hc2s6IGJpdG1hc2sgb2Ygb3V0cHV0cyB0byBzdGVwXG4rICogQHN0ZXBfY3ljbGVzOiBwaGFzZSBzdGVwIGluIHN5bnRoZXNpemVyIGNsb2NrIGN5Y2xlc1xuKyAqIEB0b2Rfc3RlcDogYWxzbyBzdGVwIHRoZSBUb0QgY291bnRlclxuKyAqXG4rICogQWxsIG1hc2tlZCBvdXRwdXRzIG11c3QgdXNlIHN5bnRoZXNpemVycyBvZiB0aGUgc2FtZSBmcmVxdWVuY3kgc2luY2VcbisgKiB0aGUgc3RlcCB2YWx1ZSBpcyBpbiBzeW50aGVzaXplciBjbG9jayBjeWNsZXMuXG4rICpcbisgKiBSZXR1cm46IDAgb24gc3VjY2VzcywgXHUwMDNjMCBvbiBlcnJvclxuKyAqL1xuK2ludCB6bDMwNzN4X2NoYW5fcGhhc2Vfc3RlcChzdHJ1Y3QgemwzMDczeF9kZXYgKnpsZGV2LCB1OCBjaCxcbitcdFx0XHQgICAgdTE2IG91dF9tYXNrLCBzMzIgc3RlcF9jeWNsZXMsXG4rXHRcdFx0ICAgIGJvb2wgdG9kX3N0ZXApXG4re1xuK1x0dTggY3RybDtcbitcdGludCByYztcbitcbitcdGd1YXJkKG11dGV4KShcdTAwMjZ6bGRldi1cdTAwM2VwaGFzZV9zdGVwX2xvY2spO1xuK1xuK1x0LyogV2FpdCBmb3IgYW55IHByZXZpb3VzIHBoYXNlIHN0ZXAgb3BlcmF0aW9uIHRvIGNvbXBsZXRlICovXG4rXHRyYyA9IHpsMzA3M3hfcG9sbF96ZXJvX3U4KHpsZGV2LCBaTF9SRUdfT1VUUFVUX1BIQVNFX1NURVBfQ1RSTCxcbitcdFx0XHRcdCAgWkxfT1VUUFVUX1BIQVNFX1NURVBfQ1RSTF9PUCxcbitcdFx0XHRcdCAgWkxfUE9MTF9QSEFTRV9TVEVQX1RJTUVPVVRfVVMpO1xuK1x0aWYgKHJjKVxuK1x0XHRyZXR1cm4gcmM7XG4rXG4rXHRyYyA9IHpsMzA3M3hfd3JpdGVfdTMyKHpsZGV2LCBaTF9SRUdfT1VUUFVUX1BIQVNFX1NURVBfREFUQSxcbitcdFx0XHQgICAgICAgc3RlcF9jeWNsZXMpO1xuK1x0aWYgKHJjKVxuK1x0XHRyZXR1cm4gcmM7XG4rXG4rXHRyYyA9IHpsMzA3M3hfd3JpdGVfdTE2KHpsZGV2LCBaTF9SRUdfT1VUUFVUX1BIQVNFX1NURVBfTUFTSywgb3V0X21hc2spO1xuK1x0aWYgKHJjKVxuK1x0XHRyZXR1cm4gcmM7XG4rXG4rXHRyYyA9IHpsMzA3M3hfd3JpdGVfdTgoemxkZXYsIFpMX1JFR19PVVRQVVRfUEhBU0VfU1RFUF9OVU1CRVIsIDEpO1xuK1x0aWYgKHJjKVxuK1x0XHRyZXR1cm4gcmM7XG4rXG4rXHRjdHJsID0gRklFTERfUFJFUChaTF9PVVRQVVRfUEhBU0VfU1RFUF9DVFJMX0RQTEwsIGNoKSB8XG4rXHQgICAgICAgRklFTERfUFJFUChaTF9PVVRQVVRfUEhBU0VfU1RFUF9DVFJMX09QLFxuK1x0XHRcdCAgWkxfT1VUUFVUX1BIQVNFX1NURVBfQ1RSTF9PUF9XUklURSk7XG4rXHRpZiAodG9kX3N0ZXApXG4rXHRcdGN0cmwgfD0gWkxfT1VUUFVUX1BIQVNFX1NURVBfQ1RSTF9UT0RfU1RFUDtcbitcbitcdHJldHVybiB6bDMwNzN4X3dyaXRlX3U4KHpsZGV2LCBaTF9SRUdfT1VUUFVUX1BIQVNFX1NURVBfQ1RSTCwgY3RybCk7XG4rfVxuK1xuIC8qKlxuICAqIHpsMzA3M3hfY2hhbl9zdGF0ZV9zZXQgLSBjb21taXQgRFBMTCBjaGFubmVsIHN0YXRlIGNoYW5nZXMgdG8gaGFyZHdhcmVcbiAgKiBAemxkZXY6IHBvaW50ZXIgdG8gemwzMDczeF9kZXYgc3RydWN0dXJlXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5oIGIvZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5oXG5pbmRleCBkYzljNmQ5NWJkZWU3Li45OWMzYjcwODhmNjc4IDEwMDY0NFxuLS0tIGEvZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5oXG4rKysgYi9kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmhcbkBAIC01LDEwICs1LDEyIEBAXG4gXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvYml0ZmllbGQuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3N0ZGRlZi5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvdGltZTY0LmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC90eXBlcy5oXHUwMDNlXG4gXG4gI2luY2x1ZGUgXCJyZWdzLmhcIlxuIFxuK3N0cnVjdCBwdHBfc3lzdGVtX3RpbWVzdGFtcDtcbiBzdHJ1Y3QgemwzMDczeF9kZXY7XG4gXG4gLyoqXG5AQCAtNDIsNiArNDQsMjEgQEAgaW50IHpsMzA3M3hfY2hhbl9zdGF0ZV9zZXQoc3RydWN0IHpsMzA3M3hfZGV2ICp6bGRldiwgdTggaW5kZXgsXG4gaW50IHpsMzA3M3hfY2hhbl9zdGF0ZV91cGRhdGUoc3RydWN0IHpsMzA3M3hfZGV2ICp6bGRldiwgdTggaW5kZXgpO1xuIGludCB6bDMwNzN4X2NoYW5fbmNvX21vZGVfc2V0KHN0cnVjdCB6bDMwNzN4X2RldiAqemxkZXYsIHU4IGluZGV4KTtcbiBcbitpbnQgemwzMDczeF9jaGFuX3RvZF9yZWFkeV93YWl0KHN0cnVjdCB6bDMwNzN4X2RldiAqemxkZXYsIHU4IGNoKTtcbitpbnQgemwzMDczeF9jaGFuX3RvZF9yZWFkKHN0cnVjdCB6bDMwNzN4X2RldiAqemxkZXYsIHU4IGNoLFxuK1x0XHRcdCAgYm9vbCBuZXh0X2h6LCBzdHJ1Y3QgdGltZXNwZWM2NCAqdHMsXG4rXHRcdFx0ICBzdHJ1Y3QgcHRwX3N5c3RlbV90aW1lc3RhbXAgKnN0cyk7XG4raW50IHpsMzA3M3hfY2hhbl90b2Rfd3JpdGUoc3RydWN0IHpsMzA3M3hfZGV2ICp6bGRldiwgdTggY2gsXG4rXHRcdFx0ICAgc3RydWN0IHRpbWVzcGVjNjQgdHMpO1xuK2ludCB6bDMwNzN4X2NoYW5fdG9kX2FkanVzdChzdHJ1Y3QgemwzMDczeF9kZXYgKnpsZGV2LCB1OCBjaCxcbitcdFx0XHQgICAgc3RydWN0IHRpbWVzcGVjNjQgZGVsdGEpO1xuK2ludCB6bDMwNzN4X2NoYW5fcGhhc2Vfc3RlcChzdHJ1Y3QgemwzMDczeF9kZXYgKnpsZGV2LCB1OCBjaCxcbitcdFx0XHQgICAgdTE2IG91dF9tYXNrLCBzMzIgc3RlcF9jeWNsZXMsIGJvb2wgdG9kX3N0ZXApO1xuK1xuK2ludCB6bDMwNzN4X2NoYW5fZGZfb2Zmc2V0X3NldChzdHJ1Y3QgemwzMDczeF9kZXYgKnpsZGV2LCB1OCBjaCwgczY0IG9mZnNldCk7XG4rXG4raW50IHpsMzA3M3hfY2hhbl90aWVfd3JpdGUoc3RydWN0IHpsMzA3M3hfZGV2ICp6bGRldiwgdTggY2gsIHM2NCBkZWx0YV9ucyk7XG4rXG4gLyoqXG4gICogemwzMDczeF9jaGFuX2RmX29mZnNldF9nZXQgLSBnZXQgY2FjaGVkIGRmX29mZnNldCB2cyB0cmFja2VkIHJlZmVyZW5jZVxuICAqIEBjaGFuOiBwb2ludGVyIHRvIGNoYW5uZWwgc3RhdGVcbkBAIC0yMDAsNiArMjE3LDIxIEBAIHN0YXRpYyBpbmxpbmUgYm9vbCB6bDMwNzN4X2NoYW5fbW9kZV9pc19yZWZsb2NrKGNvbnN0IHN0cnVjdCB6bDMwNzN4X2NoYW4gKmNoYW4pXG4gXHRyZXR1cm4gemwzMDczeF9jaGFuX21vZGVfZ2V0KGNoYW4pID09IFpMX0RQTExfTU9ERV9SRUZTRUxfTU9ERV9SRUZMT0NLO1xuIH1cbiBcbisvKipcbisgKiB6bDMwNzN4X2NoYW5fbW9kZV9zdXBwb3J0c190aWUgLSBjaGVjayBpZiBjaGFubmVsIG1vZGUgc3VwcG9ydHMgVElFIHdyaXRlXG4rICogQGNoYW46IHBvaW50ZXIgdG8gY2hhbm5lbCBzdGF0ZVxuKyAqXG4rICogVElFIHdyaXRlIGlzIHN1cHBvcnRlZCBpbiBBVVRPIGFuZCBSRUZMT0NLIG1vZGVzIHJlZ2FyZGxlc3Mgb2YgbG9jayBzdGF0ZS5cbisgKlxuKyAqIFJldHVybjogdHJ1ZSBpZiBUSUUgd3JpdGUgaXMgc3VwcG9ydGVkLCBmYWxzZSBvdGhlcndpc2VcbisgKi9cbitzdGF0aWMgaW5saW5lIGJvb2xcbit6bDMwNzN4X2NoYW5fbW9kZV9zdXBwb3J0c190aWUoY29uc3Qgc3RydWN0IHpsMzA3M3hfY2hhbiAqY2hhbilcbit7XG4rXHRyZXR1cm4gemwzMDczeF9jaGFuX21vZGVfaXNfYXV0byhjaGFuKSB8fFxuK1x0XHR6bDMwNzN4X2NoYW5fbW9kZV9pc19yZWZsb2NrKGNoYW4pO1xuK31cbitcbiAvKipcbiAgKiB6bDMwNzN4X2NoYW5faXNfaG9fcmVhZHkgLSBjaGVjayBpZiBob2xkb3ZlciBpcyByZWFkeVxuICAqIEBjaGFuOiBwb2ludGVyIHRvIGNoYW5uZWwgc3RhdGVcbmRpZmYgLS1naXQgYS9kcml2ZXJzL2RwbGwvemwzMDczeC9jb3JlLmMgYi9kcml2ZXJzL2RwbGwvemwzMDczeC9jb3JlLmNcbmluZGV4IDViMmQ3N2YyYzIyODguLjIzMGRmMDhlMjdjZDEgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL2RwbGwvemwzMDczeC9jb3JlLmNcbisrKyBiL2RyaXZlcnMvZHBsbC96bDMwNzN4L2NvcmUuY1xuQEAgLTMyMiw3ICszMjIsNyBAQCBpbnQgemwzMDczeF93cml0ZV91NDgoc3RydWN0IHpsMzA3M3hfZGV2ICp6bGRldiwgdW5zaWduZWQgaW50IHJlZywgdTY0IHZhbClcbiBpbnQgemwzMDczeF9wb2xsX3plcm9fdTgoc3RydWN0IHpsMzA3M3hfZGV2ICp6bGRldiwgdW5zaWduZWQgaW50IHJlZyxcbiBcdFx0XHQgdTggbWFzaywgdW5zaWduZWQgaW50IHRpbWVvdXRfdXMpXG4ge1xuLSNkZWZpbmUgWkxfUE9MTF9TTEVFUF9VUyAxMFxuK1x0dW5zaWduZWQgaW50IHNsZWVwX3VzID0gdGltZW91dF91cyAvIDUwO1xuIFx0dW5zaWduZWQgaW50IHZhbDtcbiBcbiBcdC8qIENoZWNrIHRoZSByZWdpc3RlciBpcyA4Yml0ICovXG5AQCAtMzM2LDcgKzMzNiw3IEBAIGludCB6bDMwNzN4X3BvbGxfemVyb191OChzdHJ1Y3QgemwzMDczeF9kZXYgKnpsZGV2LCB1bnNpZ25lZCBpbnQgcmVnLFxuIFx0cmVnID0gWkxfUkVHX0FERFIocmVnKSArIFpMX1JBTkdFX09GRlNFVDtcbiBcbiBcdHJldHVybiByZWdtYXBfcmVhZF9wb2xsX3RpbWVvdXQoemxkZXYtXHUwMDNlcmVnbWFwLCByZWcsIHZhbCwgISh2YWwgXHUwMDI2IG1hc2spLFxuLVx0XHRcdFx0XHRaTF9QT0xMX1NMRUVQX1VTLCB0aW1lb3V0X3VzKTtcbitcdFx0XHRcdFx0c2xlZXBfdXMsIHRpbWVvdXRfdXMpO1xuIH1cbiBcbiBpbnQgemwzMDczeF9tYl9vcChzdHJ1Y3QgemwzMDczeF9kZXYgKnpsZGV2LCB1bnNpZ25lZCBpbnQgb3BfcmVnLCB1OCBvcF92YWwsXG5AQCAtNTExLDYgKzUxMSwxMSBAQCB6bDMwNzN4X2Rldl9zdGF0ZV9mZXRjaChzdHJ1Y3QgemwzMDczeF9kZXYgKnpsZGV2KVxuIFx0aW50IHJjO1xuIFx0dTggaTtcbiBcbitcdHJjID0gemwzMDczeF9yZWFkX3UxNih6bGRldiwgWkxfUkVHX09VVFBVVF9TVEVQX1RJTUVfTUFTSyxcbitcdFx0XHQgICAgICBcdTAwMjZ6bGRldi1cdTAwM2VvdXRfc3RlcF90aW1lX21hc2spO1xuK1x0aWYgKHJjKVxuK1x0XHRyZXR1cm4gcmM7XG4rXG4gXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBaTDMwNzNYX05VTV9SRUZTOyBpKyspIHtcbiBcdFx0cmMgPSB6bDMwNzN4X3JlZl9zdGF0ZV9mZXRjaCh6bGRldiwgaSk7XG4gXHRcdGlmIChyYykge1xuQEAgLTEwMzQsNiArMTAzOSwxNCBAQCBpbnQgemwzMDczeF9kZXZfcHJvYmUoc3RydWN0IHpsMzA3M3hfZGV2ICp6bGRldilcbiBcdCAqIGFuZC9vciBwb2xscyBhcmUgcmVxdWlyZWQgdG8gYmUgZG9uZSBhdG9taWNhbGx5LlxuIFx0ICovXG4gXHRyYyA9IGRldm1fbXV0ZXhfaW5pdCh6bGRldi1cdTAwM2VkZXYsIFx1MDAyNnpsZGV2LVx1MDAzZW11bHRpb3BfbG9jayk7XG4rXHRpZiAocmMpXG4rXHRcdHJldHVybiBkZXZfZXJyX3Byb2JlKHpsZGV2LVx1MDAzZWRldiwgcmMsXG4rXHRcdFx0XHQgICAgIFwiRmFpbGVkIHRvIGluaXRpYWxpemUgbXV0ZXhcXG5cIik7XG4rXHRyYyA9IGRldm1fbXV0ZXhfaW5pdCh6bGRldi1cdTAwM2VkZXYsIFx1MDAyNnpsZGV2LVx1MDAzZXBoYXNlX3N0ZXBfbG9jayk7XG4rXHRpZiAocmMpXG4rXHRcdHJldHVybiBkZXZfZXJyX3Byb2JlKHpsZGV2LVx1MDAzZWRldiwgcmMsXG4rXHRcdFx0XHQgICAgIFwiRmFpbGVkIHRvIGluaXRpYWxpemUgbXV0ZXhcXG5cIik7XG4rXHRyYyA9IGRldm1fbXV0ZXhfaW5pdCh6bGRldi1cdTAwM2VkZXYsIFx1MDAyNnpsZGV2LVx1MDAzZXRpZV9sb2NrKTtcbiBcdGlmIChyYylcbiBcdFx0cmV0dXJuIGRldl9lcnJfcHJvYmUoemxkZXYtXHUwMDNlZGV2LCByYyxcbiBcdFx0XHRcdCAgICAgXCJGYWlsZWQgdG8gaW5pdGlhbGl6ZSBtdXRleFxcblwiKTtcbmRpZmYgLS1naXQgYS9kcml2ZXJzL2RwbGwvemwzMDczeC9jb3JlLmggYi9kcml2ZXJzL2RwbGwvemwzMDczeC9jb3JlLmhcbmluZGV4IDc4ZGMyMDhmM2VlYTIuLjY3YzEwZTI1OTUxMTggMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL2RwbGwvemwzMDczeC9jb3JlLmhcbisrKyBiL2RyaXZlcnMvZHBsbC96bDMwNzN4L2NvcmUuaFxuQEAgLTI2LDYgKzI2LDEwIEBAIHN0cnVjdCB6bDMwNzN4X2RwbGw7XG4gI2RlZmluZSBaTF9QT0xMX0hXUkVHX1RJTUVPVVRfVVNcdCg1MCAqIFVTRUNfUEVSX01TRUMpXG4gI2RlZmluZSBaTF9QT0xMX01CX1RJTUVPVVRfVVNcdFx0KDMwICogVVNFQ19QRVJfTVNFQylcbiAjZGVmaW5lIFpMX1BPTExfUEhBU0VfRVJSX1RJTUVPVVRfVVNcdCg1MCAqIFVTRUNfUEVSX01TRUMpXG4rI2RlZmluZSBaTF9QT0xMX1BIQVNFX1NURVBfVElNRU9VVF9VU1x0KDMwMDAgKiBVU0VDX1BFUl9NU0VDKVxuKyNkZWZpbmUgWkxfUE9MTF9USUVfV1JfVElNRU9VVF9VU1x0KDEwMDAgKiBVU0VDX1BFUl9NU0VDKVxuKyNkZWZpbmUgWkxfUE9MTF9UT0RfUkRfVElNRU9VVF9VU1x0KDMwICogVVNFQ19QRVJfTVNFQylcbisjZGVmaW5lIFpMX1BPTExfVE9EX1dSX1RJTUVPVVRfVVNcdCgxMDAwICogVVNFQ19QRVJfTVNFQylcbiBcbiBlbnVtIHpsMzA3M3hfZmxhZ3Mge1xuIFx0WkwzMDczWF9GTEFHX1JFRl9QSEFTRV9DT01QXzMyX0JJVCxcbkBAIC01NSw2ICs1OSw4IEBAIHN0cnVjdCB6bDMwNzN4X2NoaXBfaW5mbyB7XG4gICogQHJlZ21hcDogcmVnbWFwIHRvIGFjY2VzcyBkZXZpY2UgcmVnaXN0ZXJzXG4gICogQGluZm86IGRldGVjdGVkIGNoaXAgaW5mb1xuICAqIEBtdWx0aW9wX2xvY2s6IHRvIHNlcmlhbGl6ZSBtdWx0aXBsZSByZWdpc3RlciBvcGVyYXRpb25zXG4rICogQHRpZV9sb2NrOiB0byBzZXJpYWxpemUgVElFIHdyaXRlIG9wZXJhdGlvbnNcbisgKiBAcGhhc2Vfc3RlcF9sb2NrOiB0byBzZXJpYWxpemUgb3V0cHV0IHBoYXNlIHN0ZXAgb3BlcmF0aW9uc1xuICAqIEByZWY6IGFycmF5IG9mIGlucHV0IHJlZmVyZW5jZXMnIGludmFyaWFudHNcbiAgKiBAb3V0OiBhcnJheSBvZiBvdXRzJyBpbnZhcmlhbnRzXG4gICogQHN5bnRoOiBhcnJheSBvZiBzeW50aHMnIGludmFyaWFudHNcbkBAIC02Myw2ICs2OSw3IEBAIHN0cnVjdCB6bDMwNzN4X2NoaXBfaW5mbyB7XG4gICogQGt3b3JrZXI6IHRocmVhZCBmb3IgcGVyaW9kaWMgd29ya1xuICAqIEB3b3JrOiBwZXJpb2RpYyB3b3JrXG4gICogQGNsb2NrX2lkOiBjbG9jayBpZCBvZiB0aGUgZGV2aWNlXG4rICogQG91dF9zdGVwX3RpbWVfbWFzazogb3V0cHV0IHN0ZXAtdGltZSBtYXNrIChkZXZpY2UtZ2xvYmFsKVxuICAqIEBwaGFzZV9hdmdfZmFjdG9yOiBwaGFzZSBvZmZzZXQgbWVhc3VyZW1lbnQgYXZlcmFnaW5nIGZhY3RvclxuICAqIEBmcmVxX21vbml0b3I6IGlzIGZyZXF1ZW5jeSBtb25pdG9yIGVuYWJsZWRcbiAgKi9cbkBAIC03MSw2ICs3OCw4IEBAIHN0cnVjdCB6bDMwNzN4X2RldiB7XG4gXHRzdHJ1Y3QgcmVnbWFwXHRcdFx0KnJlZ21hcDtcbiBcdGNvbnN0IHN0cnVjdCB6bDMwNzN4X2NoaXBfaW5mb1x0KmluZm87XG4gXHRzdHJ1Y3QgbXV0ZXhcdFx0XHRtdWx0aW9wX2xvY2s7XG4rXHRzdHJ1Y3QgbXV0ZXhcdFx0XHR0aWVfbG9jaztcbitcdHN0cnVjdCBtdXRleFx0XHRcdHBoYXNlX3N0ZXBfbG9jaztcbiBcbiBcdC8qIEludmFyaWFudHMgKi9cbiBcdHN0cnVjdCB6bDMwNzN4X3JlZlx0cmVmW1pMMzA3M1hfTlVNX1JFRlNdO1xuQEAgLTg3LDYgKzk2LDcgQEAgc3RydWN0IHpsMzA3M3hfZGV2IHtcbiBcbiBcdC8qIFBlci1jaGlwIHBhcmFtZXRlcnMgKi9cbiBcdHU2NFx0XHRcdGNsb2NrX2lkO1xuK1x0dTE2XHRcdFx0b3V0X3N0ZXBfdGltZV9tYXNrO1xuIFx0dThcdFx0XHRwaGFzZV9hdmdfZmFjdG9yO1xuIFx0Ym9vbFx0XHRcdGZyZXFfbW9uaXRvcjtcbiB9O1xuQEAgLTMwOCw2ICszMTgsMTkgQEAgemwzMDczeF9kZXZfb3V0X2lzX2VuYWJsZWQoc3RydWN0IHpsMzA3M3hfZGV2ICp6bGRldiwgdTggaW5kZXgpXG4gXHRyZXR1cm4gemwzMDczeF9zeW50aF9pc19lbmFibGVkKHN5bnRoKSBcdTAwMjZcdTAwMjYgemwzMDczeF9vdXRfaXNfZW5hYmxlZChvdXQpO1xuIH1cbiBcbisvKipcbisgKiB6bDMwNzN4X2Rldl9vdXRfaXNfc3RlcHBlZCAtIGNoZWNrIGlmIG91dHB1dCBpcyBpbiBzdGVwLXRpbWUgbWFza1xuKyAqIEB6bGRldjogcG9pbnRlciB0byB6bDMwNzN4IGRldmljZVxuKyAqIEBpbmRleDogb3V0cHV0IGluZGV4XG4rICpcbisgKiBSZXR1cm46IHRydWUgaWYgb3V0cHV0IGlzIGFmZmVjdGVkIGJ5IHN0ZXAtdGltZSBvcGVyYXRpb25zXG4rICovXG4rc3RhdGljIGlubGluZSBib29sXG4remwzMDczeF9kZXZfb3V0X2lzX3N0ZXBwZWQoc3RydWN0IHpsMzA3M3hfZGV2ICp6bGRldiwgdTggaW5kZXgpXG4re1xuK1x0cmV0dXJuICEhKHpsZGV2LVx1MDAzZW91dF9zdGVwX3RpbWVfbWFzayBcdTAwMjYgQklUKGluZGV4KSk7XG4rfVxuK1xuIC8qKlxuICAqIHpsMzA3M3hfZGV2X291dF9kcGxsX2dldCAtIGdldCBEUExMIElEIHRoZSBvdXRwdXQgaXMgZHJpdmVuIGJ5XG4gICogQHpsZGV2OiBwb2ludGVyIHRvIHpsMzA3M3ggZGV2aWNlXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9kcGxsL3psMzA3M3gvZHBsbC5jIGIvZHJpdmVycy9kcGxsL3psMzA3M3gvZHBsbC5jXG5pbmRleCAwNDg4YWU2YWM0ODZjLi44MzAxYWQzNDM2NThhIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9kcGxsL3psMzA3M3gvZHBsbC5jXG4rKysgYi9kcml2ZXJzL2RwbGwvemwzMDczeC9kcGxsLmNcbkBAIC0yLDYgKzIsNyBAQFxuIFxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2JpdHMuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2JpdGZpZWxkLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9jbGVhbnVwLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9idWcuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2NvbnRhaW5lcl9vZi5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvZGV2X3ByaW50ay5oXHUwMDNlXG5AQCAtMTMsNiArMTQsNyBAQFxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L25ldGxpbmsuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3BsYXRmb3JtX2RldmljZS5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvcHJvcGVydHkuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L3B0cF9jbG9ja19rZXJuZWwuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3NsYWIuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3NwcmludGYuaFx1MDAzZVxuIFxuQEAgLTIyNzUsNDUgKzIyNzcsMzg0IEBAIHpsMzA3M3hfZHBsbF9pbml0X2ZpbmVfcGhhc2VfYWRqdXN0KHN0cnVjdCB6bDMwNzN4X2RldiAqemxkZXYpXG4gXHRyZXR1cm4gemwzMDczeF93cml0ZV91OCh6bGRldiwgWkxfUkVHX1NZTlRIX1BIQVNFX1NISUZUX0NUUkwsIDB4MDEpO1xuIH1cbiBcbisvKiBNYXhpbXVtIGZyZXF1ZW5jeSBhZGp1c3RtZW50OiArLTElIG9mIG5vbWluYWwgaW4gcHBiICovXG4rI2RlZmluZSBaTDMwNzNYX0RQTExfUFRQX01BWF9BREpcdDEwMDAwMDAwXG4rXG4gLyoqXG4tICogemwzMDczeF9kcGxsX2FsbG9jIC0gYWxsb2NhdGUgRFBMTCBkZXZpY2Vcbi0gKiBAemxkZXY6IHBvaW50ZXIgdG8gemwzMDczeCBkZXZpY2Vcbi0gKiBAY2g6IERQTEwgY2hhbm5lbCBudW1iZXJcbisgKiB6bDMwNzN4X2RwbGxfcHRwX2dldHRpbWV4NjQgLSByZWFkIGN1cnJlbnQgdGltZSBmcm9tIFRvRCBjb3VudGVyc1xuKyAqIEBpbmZvOiBQVFAgY2xvY2sgaW5mb1xuKyAqIEB0czogdGltZXNwZWMgdG8gc3RvcmUgY3VycmVudCB0aW1lXG4rICogQHN0czogb3B0aW9uYWwgc3lzdGVtIHRpbWVzdGFtcCBwYWlyIGZvciBjcm9zcy10aW1lc3RhbXBpbmdcbiAgKlxuLSAqIEFsbG9jYXRlcyBEUExMIGRldmljZSBzdHJ1Y3R1cmUgZm9yIGdpdmVuIERQTEwgY2hhbm5lbC5cbisgKiBSZXR1cm46IDAgb24gc3VjY2VzcywgXHUwMDNjMCBvbiBlcnJvclxuKyAqL1xuK3N0YXRpYyBpbnQgemwzMDczeF9kcGxsX3B0cF9nZXR0aW1leDY0KHN0cnVjdCBwdHBfY2xvY2tfaW5mbyAqaW5mbyxcbitcdFx0XHRcdCAgICAgICBzdHJ1Y3QgdGltZXNwZWM2NCAqdHMsXG4rXHRcdFx0XHQgICAgICAgc3RydWN0IHB0cF9zeXN0ZW1fdGltZXN0YW1wICpzdHMpXG4re1xuK1x0c3RydWN0IHpsMzA3M3hfZHBsbCAqemxkcGxsID0gY29udGFpbmVyX29mKGluZm8sIHN0cnVjdCB6bDMwNzN4X2RwbGwsXG4rXHRcdFx0XHRcdFx0ICAgcHRwX2luZm8pO1xuK1xuK1x0Z3VhcmQobXV0ZXgpKFx1MDAyNnpsZHBsbC1cdTAwM2Vsb2NrKTtcbitcbitcdHJldHVybiB6bDMwNzN4X2NoYW5fdG9kX3JlYWQoemxkcGxsLVx1MDAzZWRldiwgemxkcGxsLVx1MDAzZWlkLCBmYWxzZSwgdHMsIHN0cyk7XG4rfVxuK1xuKy8qKlxuKyAqIHpsMzA3M3hfZHBsbF9wdHBfc2V0dGltZTY0IC0gc2V0IFRvRCBjb3VudGVycyB0byBnaXZlbiB0aW1lXG4rICogQGluZm86IFBUUCBjbG9jayBpbmZvXG4rICogQHRzOiB0aW1lc3BlYyB3aXRoIHRpbWUgdG8gc2V0XG4gICpcbi0gKiBSZXR1cm46IHBvaW50ZXIgdG8gRFBMTCBkZXZpY2Ugb24gc3VjY2VzcywgZXJyb3IgcG9pbnRlciBvbiBlcnJvclxuKyAqIFJldHVybjogMCBvbiBzdWNjZXNzLCBcdTAwM2MwIG9uIGVycm9yXG4gICovXG4tc3RydWN0IHpsMzA3M3hfZHBsbCAqXG4temwzMDczeF9kcGxsX2FsbG9jKHN0cnVjdCB6bDMwNzN4X2RldiAqemxkZXYsIHU4IGNoKVxuK3N0YXRpYyBpbnQgemwzMDczeF9kcGxsX3B0cF9zZXR0aW1lNjQoc3RydWN0IHB0cF9jbG9ja19pbmZvICppbmZvLFxuK1x0XHRcdFx0ICAgICAgY29uc3Qgc3RydWN0IHRpbWVzcGVjNjQgKnRzKVxuIHtcbi1cdHN0cnVjdCB6bDMwNzN4X2RwbGwgKnpsZHBsbDtcbitcdHN0cnVjdCB6bDMwNzN4X2RwbGwgKnpsZHBsbCA9IGNvbnRhaW5lcl9vZihpbmZvLCBzdHJ1Y3QgemwzMDczeF9kcGxsLFxuK1x0XHRcdFx0XHRcdCAgIHB0cF9pbmZvKTtcbiBcbi1cdHpsZHBsbCA9IGt6YWxsb2Nfb2JqKCp6bGRwbGwpO1xuLVx0aWYgKCF6bGRwbGwpXG4tXHRcdHJldHVybiBFUlJfUFRSKC1FTk9NRU0pO1xuK1x0Z3VhcmQobXV0ZXgpKFx1MDAyNnpsZHBsbC1cdTAwM2Vsb2NrKTtcbiBcbi1cdHpsZHBsbC1cdTAwM2VkZXYgPSB6bGRldjtcbi1cdHpsZHBsbC1cdTAwM2VpZCA9IGNoO1xuLVx0bXV0ZXhfaW5pdChcdTAwMjZ6bGRwbGwtXHUwMDNlbG9jayk7XG4tXHRJTklUX0xJU1RfSEVBRChcdTAwMjZ6bGRwbGwtXHUwMDNlcGlucyk7XG4rXHRyZXR1cm4gemwzMDczeF9jaGFuX3RvZF93cml0ZSh6bGRwbGwtXHUwMDNlZGV2LCB6bGRwbGwtXHUwMDNlaWQsICp0cyk7XG4rfVxuIFxuLVx0cmV0dXJuIHpsZHBsbDtcbisvKipcbisgKiB6bDMwNzN4X2RwbGxfcHRwX2FkanRpbWVfcGhhc2Vfc3RlcCAtIGFkanVzdCBzdWItc2Vjb25kIHRpbWUgdmlhIHBoYXNlIHN0ZXBcbisgKiBAemxkcGxsOiBEUExMIGNoYW5uZWxcbisgKiBAZGVsdGE6IHRpbWUgYWRqdXN0bWVudCBpbiBuYW5vc2Vjb25kcyAobXVzdCBiZSB3aXRoaW4gKC1OU0VDX1BFUl9TRUMsXG4rICogICAgICAgICBOU0VDX1BFUl9TRUMpKVxuKyAqXG4rICogVXNlcyB0aGUgb3V0cHV0IHBoYXNlIHN0ZXAgbWVjaGFuaXNtIHdpdGggdG9kX3N0ZXA9MSB0byBhZGp1c3QgYm90aFxuKyAqIHRoZSBvdXRwdXQgY2xvY2sgcGhhc2UgYW5kIHRoZSBUb0QgY291bnRlciBzaW11bHRhbmVvdXNseS4gVGhpcyBrZWVwc1xuKyAqIG91dHB1dHMgYW5kIFRvRCBjb2hlcmVudC4gT25seSB2YWxpZCBmb3IgTkNPLlxuKyAqXG4rICogT3V0cHV0cyBhcmUgZ3JvdXBlZCBieSBzeW50aGVzaXplciBzaW5jZSB0aGUgcGhhc2Ugc3RlcCB2YWx1ZSBpcyBpblxuKyAqIHN5bnRoZXNpemVyIGNsb2NrIGN5Y2xlcy4gVGhlIGZpcnN0IHN5bnRoIGdyb3VwIHdpdGggZW5hYmxlZCBvdXRwdXRzXG4rICogdXNlcyB0b2Rfc3RlcCB0byBhZGp1c3QgYm90aCBvdXRwdXRzIGFuZCB0aGUgVG9EIGNvdW50ZXIuIFJlbWFpbmluZ1xuKyAqIGdyb3VwcyBzdGVwIG91dHB1dHMgb25seS4gSWYgbm8gc3ludGggaGFzIGVuYWJsZWQgb3V0cHV0cywgdGhlIFRvRFxuKyAqIGNvdW50ZXIgaXMgc3RlcHBlZCBhbG9uZSB1c2luZyBhbiBlbXB0eSBvdXRwdXQgbWFzayAodGhlIEZXIHVzZXNcbisgKiB0aGUgZmlyc3QgZW5hYmxlZCBzeW50aCdzIHBlcmlvZCBmb3IgdGhlIGNvbnZlcnNpb24pLlxuKyAqXG4rICogUmV0dXJuOlxuKyAqICogJTBcdFx0XHQtIHN1Y2Nlc3MgKG9yIHBhcnRpYWwgc3VjY2VzcyBpZiBhIGxhdGVyIHN5bnRoIGdyb3VwXG4rICpcdFx0XHQgIGZhaWxlZCBhZnRlciB0aGUgZmlyc3Qgd2FzIGFscmVhZHkgc3RlcHBlZClcbisgKiAqICUtRU9QTk9UU1VQUFx0LSBubyBzeW50aHMgYXZhaWxhYmxlXG4rICogKiBuZWdhdGl2ZVx0XHQtIGVycm9yXG4rICovXG4rc3RhdGljIGludCB6bDMwNzN4X2RwbGxfcHRwX2FkanRpbWVfcGhhc2Vfc3RlcChzdHJ1Y3QgemwzMDczeF9kcGxsICp6bGRwbGwsXG4rXHRcdFx0XHRcdCAgICAgICBzNjQgZGVsdGEpXG4re1xuK1x0dTE2IHN5bnRoX21hc2tbWkwzMDczWF9OVU1fU1lOVEhTXSA9IHt9O1xuK1x0c3RydWN0IHpsMzA3M3hfZGV2ICp6bGRldiA9IHpsZHBsbC1cdTAwM2VkZXY7XG4rXHRjb25zdCBzdHJ1Y3QgemwzMDczeF9zeW50aCAqc3ludGg7XG4rXHRzdHJ1Y3QgemwzMDczeF9kcGxsX3BpbiAqcGluO1xuK1x0dTMyIGZpcnN0X3N5bnRoX2ZyZXEgPSAwO1xuK1x0Ym9vbCB0b2Rfc3RlcHBlZCA9IGZhbHNlO1xuK1x0czMyIHN0ZXBfY3ljbGVzO1xuK1x0dTMyIHN5bnRoX2ZyZXE7XG4rXHRpbnQgcmM7XG4rXHR1OCBpO1xuK1xuK1x0LyogQnVpbGQgcGVyLXN5bnRoIG91dHB1dCBtYXNrcyBmcm9tIHJlZ2lzdGVyZWQgb3V0cHV0IHBpbnMgKi9cbitcdGxpc3RfZm9yX2VhY2hfZW50cnkocGluLCBcdTAwMjZ6bGRwbGwtXHUwMDNlcGlucywgbGlzdCkge1xuK1x0XHR1OCBvdXRfaWQsIHN5bnRoX2lkO1xuK1xuK1x0XHRpZiAoemwzMDczeF9kcGxsX2lzX2lucHV0X3BpbihwaW4pKVxuK1x0XHRcdGNvbnRpbnVlO1xuK1xuK1x0XHRvdXRfaWQgPSB6bDMwNzN4X291dHB1dF9waW5fb3V0X2dldChwaW4tXHUwMDNlaWQpO1xuK1xuK1x0XHRpZiAoIXpsMzA3M3hfZGV2X291dF9pc19zdGVwcGVkKHpsZGV2LCBvdXRfaWQpKVxuK1x0XHRcdGNvbnRpbnVlO1xuK1xuK1x0XHRzeW50aF9pZCA9IHpsMzA3M3hfZGV2X291dF9zeW50aF9nZXQoemxkZXYsIG91dF9pZCk7XG4rXHRcdGlmIChzeW50aF9pZCBcdTAwM2U9IFpMMzA3M1hfTlVNX1NZTlRIUykge1xuK1x0XHRcdGRldl93YXJuKHpsZGV2LVx1MDAzZWRldiwgXCJVbmV4cGVjdGVkIHN5bnRoIGlkIGZvciBPVVQldVxcblwiLFxuK1x0XHRcdFx0IG91dF9pZCk7XG4rXHRcdFx0Y29udGludWU7XG4rXHRcdH1cbitcdFx0c3ludGhfbWFza1tzeW50aF9pZF0gfD0gQklUKG91dF9pZCk7XG4rXHR9XG4rXG4rXHQvKiBQcm9jZXNzIGVhY2ggc3ludGggZ3JvdXAgKi9cbitcdGZvciAoaSA9IDA7IGkgXHUwMDNjIFpMMzA3M1hfTlVNX1NZTlRIUzsgaSsrKSB7XG4rXHRcdHN5bnRoID0gemwzMDczeF9zeW50aF9zdGF0ZV9nZXQoemxkZXYsIGkpO1xuK1x0XHRpZiAoIXpsMzA3M3hfc3ludGhfaXNfZW5hYmxlZChzeW50aCkgfHxcbitcdFx0ICAgIHpsMzA3M3hfc3ludGhfZHBsbF9nZXQoc3ludGgpICE9IHpsZHBsbC1cdTAwM2VpZClcbitcdFx0XHRjb250aW51ZTtcbitcbitcdFx0c3ludGhfZnJlcSA9IHpsMzA3M3hfc3ludGhfZnJlcV9nZXQoc3ludGgpO1xuK1xuK1x0XHQvKiBSZW1lbWJlciBmaXJzdCBlbmFibGVkIHN5bnRoIGZyZXEgZm9yIFRvRC1vbmx5IGZhbGxiYWNrICovXG4rXHRcdGlmICghZmlyc3Rfc3ludGhfZnJlcSlcbitcdFx0XHRmaXJzdF9zeW50aF9mcmVxID0gc3ludGhfZnJlcTtcbitcbitcdFx0aWYgKCFzeW50aF9tYXNrW2ldKVxuK1x0XHRcdGNvbnRpbnVlO1xuK1xuK1x0XHQvKiBTYWZlIGZvciBzMzI6IG1heCBzeW50aCBmcmVxIGlzIDc1MCBNSHogKi9cbitcdFx0c3RlcF9jeWNsZXMgPSBkaXZfczY0KGRlbHRhICogc3ludGhfZnJlcSwgTlNFQ19QRVJfU0VDKTtcbitcbitcdFx0cmMgPSB6bDMwNzN4X2NoYW5fcGhhc2Vfc3RlcCh6bGRldiwgemxkcGxsLVx1MDAzZWlkLFxuK1x0XHRcdFx0XHQgICAgIHN5bnRoX21hc2tbaV0sIHN0ZXBfY3ljbGVzLFxuK1x0XHRcdFx0XHQgICAgICF0b2Rfc3RlcHBlZCk7XG4rXHRcdGlmIChyYykge1xuK1x0XHRcdGlmICh0b2Rfc3RlcHBlZCkge1xuK1x0XHRcdFx0ZGV2X3dhcm4oemxkZXYtXHUwMDNlZGV2LFxuK1x0XHRcdFx0XHQgXCJQYXJ0aWFsIHBoYXNlIHN0ZXAgZmFpbHVyZVxcblwiKTtcbitcdFx0XHRcdHJldHVybiAwO1xuK1x0XHRcdH1cbitcdFx0XHRyZXR1cm4gcmM7XG4rXHRcdH1cbitcdFx0dG9kX3N0ZXBwZWQgPSB0cnVlO1xuK1x0fVxuK1xuK1x0aWYgKCFmaXJzdF9zeW50aF9mcmVxKVxuK1x0XHRyZXR1cm4gLUVPUE5PVFNVUFA7XG4rXG4rXHQvKiBObyBlbmFibGVkIG91dHB1dHMgZm91bmQ7IHN0ZXAgVG9EIGNvdW50ZXIgb25seSB1c2luZyB0aGVcbitcdCAqIGZpcnN0IGVuYWJsZWQgc3ludGgncyBwZXJpb2QgKGVtcHR5IG91dHB1dCBtYXNrKS5cbitcdCAqL1xuK1x0aWYgKCF0b2Rfc3RlcHBlZCkge1xuK1x0XHRzdGVwX2N5Y2xlcyA9IGRpdl9zNjQoZGVsdGEgKiBmaXJzdF9zeW50aF9mcmVxLCBOU0VDX1BFUl9TRUMpO1xuK1x0XHRyZXR1cm4gemwzMDczeF9jaGFuX3BoYXNlX3N0ZXAoemxkZXYsIHpsZHBsbC1cdTAwM2VpZCwgMCxcbitcdFx0XHRcdFx0ICAgICAgIHN0ZXBfY3ljbGVzLCB0cnVlKTtcbitcdH1cbitcbitcdHJldHVybiAwO1xuIH1cbiBcbiAvKipcbi0gKiB6bDMwNzN4X2RwbGxfZnJlZSAtIGZyZWUgRFBMTCBkZXZpY2Vcbi0gKiBAemxkcGxsOiBwb2ludGVyIHRvIHpsMzA3M3hfZHBsbCBzdHJ1Y3R1cmVcbisgKiB6bDMwNzN4X2RwbGxfcHRwX2FkanRpbWUgLSBhZGp1c3QgUFRQIGNsb2NrIHRpbWVcbisgKiBAaW5mbzogUFRQIGNsb2NrIGluZm9cbisgKiBAZGVsdGE6IHRpbWUgYWRqdXN0bWVudCBpbiBuYW5vc2Vjb25kc1xuICAqXG4tICogRGVhbGxvY2F0ZXMgZ2l2ZW4gRFBMTCBkZXZpY2UgcHJldmlvdXNseSBhbGxvY2F0ZWQgYnkgQHpsMzA3M3hfZHBsbF9hbGxvYy5cbisgKiBGb3IgTkNPLCBsYXJnZSBkZWx0YXMgKFx1MDAzZT0gMSBzZWNvbmQpIGFyZSBzcGxpdCBpbnRvIGEgVG9EXG4rICogcmVhZC1tb2RpZnktd3JpdGUgZm9yIHRoZSBzZWNvbmRzIHBhcnQgYW5kIGFuIG91dHB1dCBwaGFzZSBzdGVwIGZvclxuKyAqIHRoZSBzdWItc2Vjb25kIHJlbWFpbmRlci4gU3ViLXNlY29uZCBkZWx0YXMgdXNlIHBoYXNlIHN0ZXAgZGlyZWN0bHksXG4rICogZmFsbGluZyBiYWNrIHRvIFRvRCByZWFkLW1vZGlmeS13cml0ZSBpZiBwaGFzZSBzdGVwIG9yIFRJRSB3cml0ZVxuKyAqIGZhaWxzLiBJbiBBVVRPL1JFRkxPQ0sgbW9kZXMsIGxhcmdlIGRlbHRhcyBhcmUgc3BsaXQgaW50byBUb0RcbisgKiByZWFkLW1vZGlmeS13cml0ZSBmb3Igc2Vjb25kcyBhbmQgVElFIHdyaXRlIGZvciB0aGUgc3ViLXNlY29uZFxuKyAqIHJlbWFpbmRlci4gU3ViLXNlY29uZCBkZWx0YXMgdXNlIFRJRSB3cml0ZSBkaXJlY3RseS5cbisgKlxuKyAqIElmIHRoZSBzZWNvbmRzIHBhcnQgd2FzIGFscmVhZHkgY29tbWl0dGVkIHdoZW4gdGhlIHN1Yi1zZWNvbmRcbisgKiBtZWNoYW5pc20gZmFpbHMsIHJldHVybnMgMCB0byBwcmV2ZW50IHRoZSBQVFAgc2Vydm8gZnJvbSByZXRyeWluZ1xuKyAqIHRoZSBmdWxsIGRlbHRhIGFuZCBhcHBseWluZyBzZWNvbmRzIGFnYWluLlxuKyAqXG4rICogUmV0dXJuOiAwIG9uIHN1Y2Nlc3MgKG9yIHBhcnRpYWwgc3VjY2VzcyksIFx1MDAzYzAgb24gZXJyb3JcbiAgKi9cbi12b2lkXG4temwzMDczeF9kcGxsX2ZyZWUoc3RydWN0IHpsMzA3M3hfZHBsbCAqemxkcGxsKVxuK3N0YXRpYyBpbnQgemwzMDczeF9kcGxsX3B0cF9hZGp0aW1lKHN0cnVjdCBwdHBfY2xvY2tfaW5mbyAqaW5mbywgczY0IGRlbHRhKVxuIHtcbi1cdFdBUk4oemxkcGxsLVx1MDAzZWRwbGxfZGV2LCBcIkRQTEwgZGV2aWNlIGlzIHN0aWxsIHJlZ2lzdGVyZWRcXG5cIik7XG4rXHRzdHJ1Y3QgemwzMDczeF9kcGxsICp6bGRwbGwgPSBjb250YWluZXJfb2YoaW5mbywgc3RydWN0IHpsMzA3M3hfZHBsbCxcbitcdFx0XHRcdFx0XHQgICBwdHBfaW5mbyk7XG4rXHRzdHJ1Y3QgemwzMDczeF9kZXYgKnpsZGV2ID0gemxkcGxsLVx1MDAzZWRldjtcbitcdGNvbnN0IHN0cnVjdCB6bDMwNzN4X2NoYW4gKmNoYW47XG4rXHRib29sIHNlY19hZGp1c3RlZCA9IGZhbHNlO1xuK1x0c3RydWN0IHRpbWVzcGVjNjQgdHM7XG4rXHRpbnQgcmM7XG4gXG4tXHRtdXRleF9kZXN0cm95KFx1MDAyNnpsZHBsbC1cdTAwM2Vsb2NrKTtcbi1cdGtmcmVlKHpsZHBsbCk7XG4rXHRpZiAoIWRlbHRhKVxuK1x0XHRyZXR1cm4gMDtcbitcbitcdGd1YXJkKG11dGV4KShcdTAwMjZ6bGRwbGwtXHUwMDNlbG9jayk7XG4rXG4rXHQvKiBNb2RlcyB3aXRob3V0IHBoYXNlIHN0ZXAgb3IgVElFIHVzZSBwbGFpbiBUb0QgYWRqdXN0ICovXG4rXHRjaGFuID0gemwzMDczeF9jaGFuX3N0YXRlX2dldCh6bGRldiwgemxkcGxsLVx1MDAzZWlkKTtcbitcdGlmICghemwzMDczeF9jaGFuX21vZGVfaXNfbmNvKGNoYW4pIFx1MDAyNlx1MDAyNlxuK1x0ICAgICF6bDMwNzN4X2NoYW5fbW9kZV9zdXBwb3J0c190aWUoY2hhbikpXG4rXHRcdHJldHVybiB6bDMwNzN4X2NoYW5fdG9kX2FkanVzdCh6bGRldiwgemxkcGxsLVx1MDAzZWlkLFxuK1x0XHRcdFx0XHQgICAgICAgbnNfdG9fdGltZXNwZWM2NChkZWx0YSkpO1xuK1xuK1x0LyogU3BsaXQgb2ZmIHNlY29uZHMgdmlhIFRvRCByZWFkLW1vZGlmeS13cml0ZSBzbyB0aGUgc3ViLXNlY29uZFxuK1x0ICogcmVtYWluZGVyIGNhbiBiZSBhcHBsaWVkIHRocm91Z2ggdGhlIG91dHB1dC1jb2hlcmVudCBtZWNoYW5pc21cbitcdCAqIChwaGFzZSBzdGVwIG9yIFRJRSB3cml0ZSkuXG4rXHQgKi9cbitcdGlmIChkZWx0YSBcdTAwM2U9IE5TRUNfUEVSX1NFQyB8fCBkZWx0YSBcdTAwM2M9IC1OU0VDX1BFUl9TRUMpIHtcbitcdFx0czMyIHJlbWFpbmRlcjtcbitcbitcdFx0dHMudHZfc2VjID0gZGl2X3M2NF9yZW0oZGVsdGEsIE5TRUNfUEVSX1NFQywgXHUwMDI2cmVtYWluZGVyKTtcbitcdFx0dHMudHZfbnNlYyA9IDA7XG4rXHRcdGRlbHRhID0gcmVtYWluZGVyO1xuK1xuK1x0XHRyYyA9IHpsMzA3M3hfY2hhbl90b2RfYWRqdXN0KHpsZGV2LCB6bGRwbGwtXHUwMDNlaWQsIHRzKTtcbitcdFx0aWYgKHJjKVxuK1x0XHRcdHJldHVybiByYztcbitcbitcdFx0LyogTm8gc3ViLXNlY29uZCByZW1haW5kZXIsIGRvbmUgKi9cbitcdFx0aWYgKCFkZWx0YSlcbitcdFx0XHRyZXR1cm4gMDtcbitcbitcdFx0LyogV2FpdCBmb3IgdGhlIFRvRCB3cml0ZSB0byBiZSBhcHBsaWVkIGF0IHRoZSAxIEh6IGVkZ2VcbitcdFx0ICogYmVmb3JlIGlzc3VpbmcgcGhhc2Ugc3RlcCBvciBUSUUgd3JpdGUsIHNvIHRoZSBwZW5kaW5nXG4rXHRcdCAqIFdSX05FWFRfMUhaIGRvZXMgbm90IG92ZXJ3cml0ZSB0aGUgc3ViLXNlY29uZCBhZGp1c3RtZW50LlxuK1x0XHQgKi9cbitcdFx0cmMgPSB6bDMwNzN4X2NoYW5fdG9kX3JlYWR5X3dhaXQoemxkZXYsIHpsZHBsbC1cdTAwM2VpZCk7XG4rXHRcdGlmIChyYylcbitcdFx0XHRyZXR1cm4gcmM7XG4rXG4rXHRcdHNlY19hZGp1c3RlZCA9IHRydWU7XG4rXHR9XG4rXG4rXHQvKiBBcHBseSBzdWItc2Vjb25kIGRlbHRhIHZpYSBwaGFzZSBzdGVwIChOQ08pIG9yIFRJRSB3cml0ZSAqL1xuK1x0aWYgKHpsMzA3M3hfY2hhbl9tb2RlX2lzX25jbyhjaGFuKSkge1xuK1x0XHRyYyA9IHpsMzA3M3hfZHBsbF9wdHBfYWRqdGltZV9waGFzZV9zdGVwKHpsZHBsbCwgZGVsdGEpO1xuK1x0XHRpZiAoIXJjKVxuK1x0XHRcdHJldHVybiAwO1xuK1x0fSBlbHNlIHtcbitcdFx0cmMgPSB6bDMwNzN4X2NoYW5fdGllX3dyaXRlKHpsZGV2LCB6bGRwbGwtXHUwMDNlaWQsIGRlbHRhKTtcbitcdFx0aWYgKCFyYylcbitcdFx0XHRyZXR1cm4gMDtcbitcdH1cbitcbitcdC8qIFBoYXNlIHN0ZXAgb3IgVElFIHdyaXRlIGZhaWxlZCwgZmFsbCBiYWNrIHRvIFRvRCBhZGp1c3QgKi9cbitcdHJjID0gemwzMDczeF9jaGFuX3RvZF9hZGp1c3QoemxkZXYsIHpsZHBsbC1cdTAwM2VpZCxcbitcdFx0XHRcdCAgICAgbnNfdG9fdGltZXNwZWM2NChkZWx0YSkpO1xuK1xuK1x0LyogSW4gdGhlIHVubGlrZWx5IGV2ZW50IHRoYXQgYm90aCBwaGFzZSBzdGVwL1RJRSB3cml0ZSBhbmQgZmFsbGJhY2tcbitcdCAqIFRvRCBhZGp1c3QgZmFpbCBhZnRlciBzZWNvbmRzIHdlcmUgYWxyZWFkeSBjb21taXR0ZWQsIHJldHVyblxuK1x0ICogc3VjY2VzcyB0byBwcmV2ZW50IHRoZSBQVFAgc2Vydm8gZnJvbSByZXRyeWluZyB0aGUgZnVsbCBkZWx0YSBhbmRcbitcdCAqIGFwcGx5aW5nIHNlY29uZHMgYWdhaW4uIFRoZSBzdWItc2Vjb25kIHJlc2lkdWFsIHdpbGwgc2VsZi1jb3JyZWN0XG4rXHQgKiBpbiB0aGUgbmV4dCBzZXJ2byBjeWNsZS5cbitcdCAqL1xuK1x0aWYgKHJjIFx1MDAyNlx1MDAyNiBzZWNfYWRqdXN0ZWQpIHtcbitcdFx0ZGV2X3dhcm4oemxkZXYtXHUwMDNlZGV2LFxuK1x0XHRcdCBcIlN1Yi1zZWNvbmQgYWRqdXN0bWVudCBmYWlsZWQgYWZ0ZXIgc2Vjb25kcyBhcHBsaWVkXFxuXCIpO1xuK1x0XHRyZXR1cm4gMDtcbitcdH1cbitcbitcdHJldHVybiByYztcbit9XG4rXG4rLyoqXG4rICogemwzMDczeF9kcGxsX3B0cF9hZGpmaW5lIC0gYWRqdXN0IFBUUCBjbG9jayBmcmVxdWVuY3lcbisgKiBAaW5mbzogUFRQIGNsb2NrIGluZm9cbisgKiBAc2NhbGVkX3BwbTogZnJlcXVlbmN5IGFkanVzdG1lbnQgaW4gc2NhbGVkIHBwbSAocHBtICogMl4xNilcbisgKlxuKyAqIE9ubHkgc3VwcG9ydGVkIGZvciBOQ08uIFdyaXRlcyB0aGUgZGVsdGEgZnJlcXVlbmN5IG9mZnNldCByZWdpc3Rlci5cbisgKlxuKyAqIFJldHVybjpcbisgKiAqICUwXHRcdFx0LSBzdWNjZXNzIG9yIEBzY2FsZWRfcHBtIGlzIHplcm8gKG5vLW9wKVxuKyAqICogJS1FT1BOT1RTVVBQXHQtIE5DTyBwaW4gaXMgbm90IGNvbm5lY3RlZCBhbmQgQHNjYWxlZF9wcG0gaXMgbm9uLXplcm9cbisgKiAqIG5lZ2F0aXZlXHRcdC0gb3RoZXIgZXJyb3JcbisgKi9cbitzdGF0aWMgaW50XG4remwzMDczeF9kcGxsX3B0cF9hZGpmaW5lKHN0cnVjdCBwdHBfY2xvY2tfaW5mbyAqaW5mbywgbG9uZyBzY2FsZWRfcHBtKVxuK3tcbitcdHN0cnVjdCB6bDMwNzN4X2RwbGwgKnpsZHBsbCA9IGNvbnRhaW5lcl9vZihpbmZvLCBzdHJ1Y3QgemwzMDczeF9kcGxsLFxuK1x0XHRcdFx0XHRcdCAgIHB0cF9pbmZvKTtcbitcdGNvbnN0IHN0cnVjdCB6bDMwNzN4X2NoYW4gKmNoYW47XG4rXHRzNjQgb2Zmc2V0O1xuK1xuK1x0LyogQ29udmVydCBzY2FsZWRfcHBtIHRvIGRmX29mZnNldCBpbiAyXi00OCBzdGVwczpcbitcdCAqICAgZGZfb2Zmc2V0ID0gLShzY2FsZWRfcHBtICogMl4zMikgLyAxMF42XG4rXHQgKlxuK1x0ICogU2ltcGxpZnkgdG8gYXZvaWQgb3ZlcmZsb3c6XG4rXHQgKiAgIGRmX29mZnNldCA9IC0oc2NhbGVkX3BwbSAqIDJeMjYpIC8gNV42XG4rXHQgKiAgIGRmX29mZnNldCA9IC0oc2NhbGVkX3BwbSAqIDY3MTA4ODY0KSAvIDE1NjI1XG4rXHQgKi9cbitcdG9mZnNldCA9IC1kaXZfczY0KChzNjQpc2NhbGVkX3BwbSAqIDY3MTA4ODY0TEwsIDE1NjI1KTtcbitcbitcdGd1YXJkKG11dGV4KShcdTAwMjZ6bGRwbGwtXHUwMDNlbG9jayk7XG4rXG4rXHRjaGFuID0gemwzMDczeF9jaGFuX3N0YXRlX2dldCh6bGRwbGwtXHUwMDNlZGV2LCB6bGRwbGwtXHUwMDNlaWQpO1xuK1x0aWYgKCF6bDMwNzN4X2NoYW5fbW9kZV9pc19uY28oY2hhbikpXG4rXHRcdHJldHVybiBzY2FsZWRfcHBtID8gLUVPUE5PVFNVUFAgOiAwO1xuK1x0aWYgKG9mZnNldCA9PSBjaGFuLVx1MDAzZWRmX29mZnNldClcbitcdFx0cmV0dXJuIDA7XG4rXG4rXHRyZXR1cm4gemwzMDczeF9jaGFuX2RmX29mZnNldF9zZXQoemxkcGxsLVx1MDAzZWRldiwgemxkcGxsLVx1MDAzZWlkLCBvZmZzZXQpO1xuK31cbitcbisvKipcbisgKiB6bDMwNzN4X2RwbGxfcHRwX2FkanBoYXNlIC0gYWRqdXN0IFBUUCBjbG9jayBwaGFzZVxuKyAqIEBpbmZvOiBQVFAgY2xvY2sgaW5mb1xuKyAqIEBkZWx0YTogcGhhc2UgYWRqdXN0bWVudCBpbiBuYW5vc2Vjb25kc1xuKyAqXG4rICogT25seSBzdXBwb3J0ZWQgaW4gQVVUTyBhbmQgUkVGTE9DSyBtb2Rlcy4gVXNlcyBUSUUgd3JpdGUgZm9yXG4rICogbmFub3NlY29uZCByZXNvbHV0aW9uIHBoYXNlIGFkanVzdG1lbnQuXG4rICpcbisgKiBSZXR1cm46XG4rICogKiAlMFx0XHRcdC0gc3VjY2VzcyBvciBAZGVsdGEgaXMgemVybyAobm8tb3ApXG4rICogKiAlLUVPUE5PVFNVUFBcdC0gbW9kZSBkb2VzIG5vdCBzdXBwb3J0IFRJRSBhbmQgQGRlbHRhIGlzIG5vbi16ZXJvXG4rICogKiBuZWdhdGl2ZVx0XHQtIG90aGVyIGVycm9yXG4rICovXG4rc3RhdGljIGludCB6bDMwNzN4X2RwbGxfcHRwX2FkanBoYXNlKHN0cnVjdCBwdHBfY2xvY2tfaW5mbyAqaW5mbywgczMyIGRlbHRhKVxuK3tcbitcdHN0cnVjdCB6bDMwNzN4X2RwbGwgKnpsZHBsbCA9IGNvbnRhaW5lcl9vZihpbmZvLCBzdHJ1Y3QgemwzMDczeF9kcGxsLFxuK1x0XHRcdFx0XHRcdCAgIHB0cF9pbmZvKTtcbitcdHN0cnVjdCB6bDMwNzN4X2RldiAqemxkZXYgPSB6bGRwbGwtXHUwMDNlZGV2O1xuK1x0Y29uc3Qgc3RydWN0IHpsMzA3M3hfY2hhbiAqY2hhbjtcbitcbitcdGlmICghZGVsdGEpXG4rXHRcdHJldHVybiAwO1xuK1xuK1x0Z3VhcmQobXV0ZXgpKFx1MDAyNnpsZHBsbC1cdTAwM2Vsb2NrKTtcbitcbitcdGNoYW4gPSB6bDMwNzN4X2NoYW5fc3RhdGVfZ2V0KHpsZGV2LCB6bGRwbGwtXHUwMDNlaWQpO1xuK1xuK1x0aWYgKCF6bDMwNzN4X2NoYW5fbW9kZV9zdXBwb3J0c190aWUoY2hhbikpXG4rXHRcdHJldHVybiAtRU9QTk9UU1VQUDtcbitcbitcdHJldHVybiB6bDMwNzN4X2NoYW5fdGllX3dyaXRlKHpsZGV2LCB6bGRwbGwtXHUwMDNlaWQsIGRlbHRhKTtcbit9XG4rXG4rc3RhdGljIHMzMlxuK3psMzA3M3hfZHBsbF9wdHBfZ2V0bWF4cGhhc2Uoc3RydWN0IHB0cF9jbG9ja19pbmZvICppbmZvIF9fYWx3YXlzX3VudXNlZClcbit7XG4rXHQvKiBIVyBsaW1pdHMgVElFIHdyaXRlIHRvICstMSBzZWNvbmQuIFJldHVybiB0aGUgY29uc3RhbnQgSFdcbitcdCAqIGxpbWl0IGFuZCBsZXQgYWRqcGhhc2UgaGFuZGxlIG1vZGUtc3BlY2lmaWMgY2hlY2tzLlxuK1x0ICovXG4rXHRyZXR1cm4gTlNFQ19QRVJfU0VDIC0gMTtcbit9XG4rXG4rc3RhdGljIGNvbnN0IHN0cnVjdCBwdHBfY2xvY2tfaW5mbyB6bDMwNzN4X2RwbGxfcHRwX2Nsb2NrX2luZm8gPSB7XG4rXHQub3duZXJcdFx0PSBUSElTX01PRFVMRSxcbitcdC5tYXhfYWRqXHQ9IFpMMzA3M1hfRFBMTF9QVFBfTUFYX0FESixcbitcdC5nZXR0aW1leDY0XHQ9IHpsMzA3M3hfZHBsbF9wdHBfZ2V0dGltZXg2NCxcbitcdC5zZXR0aW1lNjRcdD0gemwzMDczeF9kcGxsX3B0cF9zZXR0aW1lNjQsXG4rXHQuYWRqdGltZVx0PSB6bDMwNzN4X2RwbGxfcHRwX2FkanRpbWUsXG4rXHQuYWRqZmluZVx0PSB6bDMwNzN4X2RwbGxfcHRwX2FkamZpbmUsXG4rXHQuYWRqcGhhc2VcdD0gemwzMDczeF9kcGxsX3B0cF9hZGpwaGFzZSxcbitcdC5nZXRtYXhwaGFzZVx0PSB6bDMwNzN4X2RwbGxfcHRwX2dldG1heHBoYXNlLFxuK307XG4rXG4rLyoqXG4rICogemwzMDczeF9kcGxsX3B0cF9yZWdpc3RlciAtIHJlZ2lzdGVyIFBUUCBjbG9jayBmb3IgYSBEUExMIGNoYW5uZWxcbisgKiBAemxkcGxsOiBEUExMIGNoYW5uZWwgdG8gcmVnaXN0ZXIgUFRQIGNsb2NrIGZvclxuKyAqXG4rICogUmV0dXJuOiAwIG9uIHN1Y2Nlc3MsIFx1MDAzYzAgb24gZXJyb3JcbisgKi9cbitzdGF0aWMgaW50IHpsMzA3M3hfZHBsbF9wdHBfcmVnaXN0ZXIoc3RydWN0IHpsMzA3M3hfZHBsbCAqemxkcGxsKVxuK3tcbitcdHN0cnVjdCB6bDMwNzN4X2RldiAqemxkZXYgPSB6bGRwbGwtXHUwMDNlZGV2O1xuK1x0c3RydWN0IHB0cF9jbG9jayAqcHRwX2Nsb2NrO1xuK1xuK1x0emxkcGxsLVx1MDAzZXB0cF9pbmZvID0gemwzMDczeF9kcGxsX3B0cF9jbG9ja19pbmZvO1xuK1x0c25wcmludGYoemxkcGxsLVx1MDAzZXB0cF9pbmZvLm5hbWUsIHNpemVvZih6bGRwbGwtXHUwMDNlcHRwX2luZm8ubmFtZSksXG4rXHRcdCBcIiVzLWRwbGwldVwiLCBkZXZfbmFtZSh6bGRldi1cdTAwM2VkZXYpLCB6bGRwbGwtXHUwMDNlaWQpO1xuK1xuK1x0cHRwX2Nsb2NrID0gcHRwX2Nsb2NrX3JlZ2lzdGVyKFx1MDAyNnpsZHBsbC1cdTAwM2VwdHBfaW5mbywgemxkZXYtXHUwMDNlZGV2KTtcbitcdGlmIChJU19FUlIocHRwX2Nsb2NrKSkge1xuK1x0XHRkZXZfZXJyKHpsZGV2LVx1MDAzZWRldiwgXCJGYWlsZWQgdG8gcmVnaXN0ZXIgUFRQIGNsb2NrIGZvciBEUExMJXVcXG5cIixcbitcdFx0XHR6bGRwbGwtXHUwMDNlaWQpO1xuK1x0XHRyZXR1cm4gUFRSX0VSUihwdHBfY2xvY2spO1xuK1x0fVxuK1xuK1x0emxkcGxsLVx1MDAzZXB0cF9jbG9jayA9IHB0cF9jbG9jaztcbitcbitcdHJldHVybiAwO1xuK31cbitcbisvKipcbisgKiB6bDMwNzN4X2RwbGxfcHRwX3VucmVnaXN0ZXIgLSB1bnJlZ2lzdGVyIFBUUCBjbG9jayBmb3IgYSBEUExMIGNoYW5uZWxcbisgKiBAemxkcGxsOiBEUExMIGNoYW5uZWwgdG8gdW5yZWdpc3RlciBQVFAgY2xvY2sgZm9yXG4rICovXG4rc3RhdGljIHZvaWQgemwzMDczeF9kcGxsX3B0cF91bnJlZ2lzdGVyKHN0cnVjdCB6bDMwNzN4X2RwbGwgKnpsZHBsbClcbit7XG4rXHRpZiAoIUlTX0VSUl9PUl9OVUxMKHpsZHBsbC1cdTAwM2VwdHBfY2xvY2spKSB7XG4rXHRcdHB0cF9jbG9ja191bnJlZ2lzdGVyKHpsZHBsbC1cdTAwM2VwdHBfY2xvY2spO1xuK1x0XHR6bGRwbGwtXHUwMDNlcHRwX2Nsb2NrID0gTlVMTDtcbitcdH1cbiB9XG4gXG4gLyoqXG5AQCAtMjM5OCw2ICsyNzM5LDQ3IEBAIHpsMzA3M3hfZHBsbF9yZWZfc3luY19wYWlyc19yZWdpc3RlcihzdHJ1Y3QgemwzMDczeF9kcGxsICp6bGRwbGwpXG4gXHRyZXR1cm4gMDtcbiB9XG4gXG4rLyoqXG4rICogemwzMDczeF9kcGxsX2FsbG9jIC0gYWxsb2NhdGUgRFBMTCBkZXZpY2VcbisgKiBAemxkZXY6IHBvaW50ZXIgdG8gemwzMDczeCBkZXZpY2VcbisgKiBAY2g6IERQTEwgY2hhbm5lbCBudW1iZXJcbisgKlxuKyAqIEFsbG9jYXRlcyBEUExMIGRldmljZSBzdHJ1Y3R1cmUgZm9yIGdpdmVuIERQTEwgY2hhbm5lbC5cbisgKlxuKyAqIFJldHVybjogcG9pbnRlciB0byBEUExMIGRldmljZSBvbiBzdWNjZXNzLCBlcnJvciBwb2ludGVyIG9uIGVycm9yXG4rICovXG4rc3RydWN0IHpsMzA3M3hfZHBsbCAqXG4remwzMDczeF9kcGxsX2FsbG9jKHN0cnVjdCB6bDMwNzN4X2RldiAqemxkZXYsIHU4IGNoKVxuK3tcbitcdHN0cnVjdCB6bDMwNzN4X2RwbGwgKnpsZHBsbDtcbitcbitcdHpsZHBsbCA9IGt6YWxsb2Nfb2JqKCp6bGRwbGwpO1xuK1x0aWYgKCF6bGRwbGwpXG4rXHRcdHJldHVybiBFUlJfUFRSKC1FTk9NRU0pO1xuK1xuK1x0emxkcGxsLVx1MDAzZWRldiA9IHpsZGV2O1xuK1x0emxkcGxsLVx1MDAzZWlkID0gY2g7XG4rXHRtdXRleF9pbml0KFx1MDAyNnpsZHBsbC1cdTAwM2Vsb2NrKTtcbitcdElOSVRfTElTVF9IRUFEKFx1MDAyNnpsZHBsbC1cdTAwM2VwaW5zKTtcbitcbitcdHJldHVybiB6bGRwbGw7XG4rfVxuK1xuKy8qKlxuKyAqIHpsMzA3M3hfZHBsbF9mcmVlIC0gZnJlZSBEUExMIGRldmljZVxuKyAqIEB6bGRwbGw6IHBvaW50ZXIgdG8gemwzMDczeF9kcGxsIHN0cnVjdHVyZVxuKyAqXG4rICogRGVhbGxvY2F0ZXMgZ2l2ZW4gRFBMTCBkZXZpY2UgcHJldmlvdXNseSBhbGxvY2F0ZWQgYnkgQHpsMzA3M3hfZHBsbF9hbGxvYy5cbisgKi9cbit2b2lkXG4remwzMDczeF9kcGxsX2ZyZWUoc3RydWN0IHpsMzA3M3hfZHBsbCAqemxkcGxsKVxuK3tcbitcdFdBUk4oemxkcGxsLVx1MDAzZWRwbGxfZGV2LCBcIkRQTEwgZGV2aWNlIGlzIHN0aWxsIHJlZ2lzdGVyZWRcXG5cIik7XG4rXG4rXHRtdXRleF9kZXN0cm95KFx1MDAyNnpsZHBsbC1cdTAwM2Vsb2NrKTtcbitcdGtmcmVlKHpsZHBsbCk7XG4rfVxuK1xuIC8qKlxuICAqIHpsMzA3M3hfZHBsbF9yZWdpc3RlciAtIHJlZ2lzdGVyIERQTEwgZGV2aWNlIGFuZCBhbGwgaXRzIHBpbnNcbiAgKiBAemxkcGxsOiBwb2ludGVyIHRvIHpsMzA3M3hfZHBsbCBzdHJ1Y3R1cmVcbkBAIC0yNDI4LDYgKzI4MTAsMTMgQEAgemwzMDczeF9kcGxsX3JlZ2lzdGVyKHN0cnVjdCB6bDMwNzN4X2RwbGwgKnpsZHBsbClcbiBcdFx0cmV0dXJuIHJjO1xuIFx0fVxuIFxuK1x0cmMgPSB6bDMwNzN4X2RwbGxfcHRwX3JlZ2lzdGVyKHpsZHBsbCk7XG4rXHRpZiAocmMpIHtcbitcdFx0emwzMDczeF9kcGxsX3BpbnNfdW5yZWdpc3Rlcih6bGRwbGwpO1xuK1x0XHR6bDMwNzN4X2RwbGxfZGV2aWNlX3VucmVnaXN0ZXIoemxkcGxsKTtcbitcdFx0cmV0dXJuIHJjO1xuK1x0fVxuK1xuIFx0cmV0dXJuIDA7XG4gfVxuIFxuQEAgLTI0NDEsNyArMjgzMCw3IEBAIHpsMzA3M3hfZHBsbF9yZWdpc3RlcihzdHJ1Y3QgemwzMDczeF9kcGxsICp6bGRwbGwpXG4gdm9pZFxuIHpsMzA3M3hfZHBsbF91bnJlZ2lzdGVyKHN0cnVjdCB6bDMwNzN4X2RwbGwgKnpsZHBsbClcbiB7XG4tXHQvKiBVbnJlZ2lzdGVyIGFsbCBwaW5zIGFuZCBkcGxsICovXG4rXHR6bDMwNzN4X2RwbGxfcHRwX3VucmVnaXN0ZXIoemxkcGxsKTtcbiBcdHpsMzA3M3hfZHBsbF9waW5zX3VucmVnaXN0ZXIoemxkcGxsKTtcbiBcdHpsMzA3M3hfZHBsbF9kZXZpY2VfdW5yZWdpc3Rlcih6bGRwbGwpO1xuIH1cbmRpZmYgLS1naXQgYS9kcml2ZXJzL2RwbGwvemwzMDczeC9kcGxsLmggYi9kcml2ZXJzL2RwbGwvemwzMDczeC9kcGxsLmhcbmluZGV4IGZhZWJjNDAyYmExYjcuLjk5MzIyMWRjNjMyNDkgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL2RwbGwvemwzMDczeC9kcGxsLmhcbisrKyBiL2RyaXZlcnMvZHBsbC96bDMwNzN4L2RwbGwuaFxuQEAgLTUsNiArNSw3IEBAXG4gXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvZHBsbC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvbGlzdC5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvcHRwX2Nsb2NrX2tlcm5lbC5oXHUwMDNlXG4gXG4gI2luY2x1ZGUgXCJjb3JlLmhcIlxuIFxuQEAgLTIyLDYgKzIzLDggQEBcbiAgKiBAdHlwZTogRFBMTCB0eXBlIChQUFMgb3IgRUVDKVxuICAqIEBsb2NrX3N0YXR1czogbGFzdCBzYXZlZCBEUExMIGxvY2sgc3RhdHVzXG4gICogQHBpbnM6IGxpc3Qgb2YgcGluc1xuKyAqIEBwdHBfaW5mbzogUFRQIGNsb2NrIGluZm9cbisgKiBAcHRwX2Nsb2NrOiByZWdpc3RlcmVkIFBUUCBjbG9jayAob3IgTlVMTClcbiAgKi9cbiBzdHJ1Y3QgemwzMDczeF9kcGxsIHtcbiBcdHN0cnVjdCBsaXN0X2hlYWRcdFx0bGlzdDtcbkBAIC0zNiw2ICszOSw4IEBAIHN0cnVjdCB6bDMwNzN4X2RwbGwge1xuIFx0ZW51bSBkcGxsX3R5cGVcdFx0XHR0eXBlO1xuIFx0ZW51bSBkcGxsX2xvY2tfc3RhdHVzXHRcdGxvY2tfc3RhdHVzO1xuIFx0c3RydWN0IGxpc3RfaGVhZFx0XHRwaW5zO1xuK1x0c3RydWN0IHB0cF9jbG9ja19pbmZvXHRcdHB0cF9pbmZvO1xuK1x0c3RydWN0IHB0cF9jbG9ja1x0XHQqcHRwX2Nsb2NrO1xuIH07XG4gXG4gc3RydWN0IHpsMzA3M3hfZHBsbCAqemwzMDczeF9kcGxsX2FsbG9jKHN0cnVjdCB6bDMwNzN4X2RldiAqemxkZXYsIHU4IGNoKTtcbmRpZmYgLS1naXQgYS9kcml2ZXJzL2RwbGwvemwzMDczeC9yZWdzLmggYi9kcml2ZXJzL2RwbGwvemwzMDczeC9yZWdzLmhcbmluZGV4IGI3MGVhZDdkNDQ5NWIuLmYzYTVlMTIxNWFhMzYgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL2RwbGwvemwzMDczeC9yZWdzLmhcbisrKyBiL2RyaXZlcnMvZHBsbC96bDMwNzN4L3JlZ3MuaFxuQEAgLTE3OSw2ICsxNzksMjAgQEBcbiAjZGVmaW5lIFpMX0RQTExfREZfUkVBRF9DTURcdFx0XHRHRU5NQVNLKDIsIDApXG4gI2RlZmluZSBaTF9EUExMX0RGX1JFQURfQ01EX0FDQ19JXHRcdDRcbiBcbisjZGVmaW5lIFpMX1JFR19EUExMX1RJRV9DVFJMXHRcdFx0WkxfUkVHKDUsIDB4MzAsIDEpXG4rI2RlZmluZSBaTF9EUExMX1RJRV9DVFJMX09QXHRcdFx0R0VOTUFTSygyLCAwKVxuKyNkZWZpbmUgWkxfRFBMTF9USUVfQ1RSTF9PUF9XUlx0XHRcdDRcbitcbisjZGVmaW5lIFpMX1JFR19EUExMX1RJRV9DVFJMX01BU0tcdFx0WkxfUkVHKDUsIDB4MzEsIDEpXG4rXG4rI2RlZmluZSBaTF9SRUdfRFBMTF9UT0RfQ1RSTChfaWR4KVx0XHRcdFx0XHRcXFxuK1x0WkxfUkVHX0lEWChfaWR4LCA1LCAweDM4LCAxLCBaTDMwNzNYX01BWF9DSEFOTkVMUywgMSlcbisjZGVmaW5lIFpMX0RQTExfVE9EX0NUUkxfU0VNXHRcdFx0QklUKDQpXG4rI2RlZmluZSBaTF9EUExMX1RPRF9DVFJMX0NNRFx0XHRcdEdFTk1BU0soMywgMClcbisjZGVmaW5lIFpMX0RQTExfVE9EX0NUUkxfQ01EX1dSX05FWFRfMUhaXHQxXG4rI2RlZmluZSBaTF9EUExMX1RPRF9DVFJMX0NNRF9SRF9DVVJSRU5UXHRcdDhcbisjZGVmaW5lIFpMX0RQTExfVE9EX0NUUkxfQ01EX1JEX05FWFRfMUhaXHQ5XG4rXG4gI2RlZmluZSBaTF9SRUdfRFBMTF9NRUFTX0NUUkxcdFx0XHRaTF9SRUcoNSwgMHg1MCwgMSlcbiAjZGVmaW5lIFpMX0RQTExfTUVBU19DVFJMX0VOXHRcdFx0QklUKDApXG4gI2RlZmluZSBaTF9EUExMX01FQVNfQ1RSTF9BVkdfRkFDVE9SXHRcdEdFTk1BU0soNywgNClcbkBAIC0xOTMsNiArMjA3LDkgQEBcbiBcbiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxuICAqIFJlZ2lzdGVyIFBhZ2VzIDYtNywgRFBMTCBEYXRhXG4rICpcbisgKiBQZXItY2hhbm5lbCByZWdpc3RlcnMgd2l0aCBzdHJpZGUgMHgyMC4gQ2hhbm5lbHMgMC0zIHJlc2lkZSBvbiBwYWdlIDYsXG4rICogY2hhbm5lbCA0IG9uIHBhZ2UgNy5cbiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cbiBcbiAjZGVmaW5lIFpMX1JFR19EUExMX0RGX09GRlNFVF8wMyhfaWR4KVx0XHRcdFx0XHRcXFxuQEAgLTIwMiw2ICsyMTksMjQgQEBcbiBcdCgoX2lkeCkgXHUwMDNjIDQgPyBaTF9SRUdfRFBMTF9ERl9PRkZTRVRfMDMoX2lkeCkgOiBaTF9SRUdfRFBMTF9ERl9PRkZTRVRfNClcbiAjZGVmaW5lIFpMX0RQTExfREZfT0ZGU0VUX1VOS05PV05cdFM2NF9NSU5cbiBcbisjZGVmaW5lIFpMX1JFR19EUExMX1RJRV9EQVRBXzAzKF9pZHgpXHRcdFx0XHRcdFxcXG4rXHRaTF9SRUdfSURYKF9pZHgsIDYsIDB4MEMsIDYsIDQsIDB4MjApXG4rI2RlZmluZSBaTF9SRUdfRFBMTF9USUVfREFUQV80XHRcdFx0WkxfUkVHKDcsIDB4MEMsIDYpXG4rI2RlZmluZSBaTF9SRUdfRFBMTF9USUVfREFUQShfaWR4KVx0XHRcdFx0XHRcXFxuK1x0KChfaWR4KSBcdTAwM2MgNCA/IFpMX1JFR19EUExMX1RJRV9EQVRBXzAzKF9pZHgpIDogWkxfUkVHX0RQTExfVElFX0RBVEFfNClcbitcbisjZGVmaW5lIFpMX1JFR19EUExMX1RPRF9TRUNfMDMoX2lkeClcdFx0XHRcdFx0XFxcbitcdFpMX1JFR19JRFgoX2lkeCwgNiwgMHgxMiwgNiwgNCwgMHgyMClcbisjZGVmaW5lIFpMX1JFR19EUExMX1RPRF9TRUNfNFx0XHRcdFpMX1JFRyg3LCAweDEyLCA2KVxuKyNkZWZpbmUgWkxfUkVHX0RQTExfVE9EX1NFQyhfaWR4KVx0XHRcdFx0XHRcXFxuK1x0KChfaWR4KSBcdTAwM2MgNCA/IFpMX1JFR19EUExMX1RPRF9TRUNfMDMoX2lkeCkgOiBaTF9SRUdfRFBMTF9UT0RfU0VDXzQpXG4rXG4rI2RlZmluZSBaTF9SRUdfRFBMTF9UT0RfTlNfMDMoX2lkeClcdFx0XHRcdFx0XFxcbitcdFpMX1JFR19JRFgoX2lkeCwgNiwgMHgxOCwgNCwgNCwgMHgyMClcbisjZGVmaW5lIFpMX1JFR19EUExMX1RPRF9OU180XHRcdFx0WkxfUkVHKDcsIDB4MTgsIDQpXG4rI2RlZmluZSBaTF9SRUdfRFBMTF9UT0RfTlMoX2lkeClcdFx0XHRcdFx0XFxcbitcdCgoX2lkeCkgXHUwMDNjIDQgPyBaTF9SRUdfRFBMTF9UT0RfTlNfMDMoX2lkeCkgOiBaTF9SRUdfRFBMTF9UT0RfTlNfNClcbitcbiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcbiAgKiBSZWdpc3RlciBQYWdlIDksIFN5bnRoIGFuZCBPdXRwdXRcbiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXG5AQCAtMjIxLDYgKzI1NiwyMyBAQFxuICNkZWZpbmUgWkxfT1VUUFVUX0NUUkxfRU5cdFx0XHRCSVQoMClcbiAjZGVmaW5lIFpMX09VVFBVVF9DVFJMX1NZTlRIX1NFTFx0XHRHRU5NQVNLKDYsIDQpXG4gXG4rI2RlZmluZSBaTF9SRUdfT1VUUFVUX1NURVBfVElNRV9NQVNLXHRcdFpMX1JFRyg5LCAweDM2LCAyKVxuK1xuKyNkZWZpbmUgWkxfUkVHX09VVFBVVF9QSEFTRV9TVEVQX0NUUkxcdFx0WkxfUkVHKDksIDB4MzgsIDEpXG4rI2RlZmluZSBaTF9PVVRQVVRfUEhBU0VfU1RFUF9DVFJMX0RQTExcdFx0R0VOTUFTSyg2LCA0KVxuKyNkZWZpbmUgWkxfT1VUUFVUX1BIQVNFX1NURVBfQ1RSTF9UT0RfU1RFUFx0QklUKDMpXG4rI2RlZmluZSBaTF9PVVRQVVRfUEhBU0VfU1RFUF9DVFJMX09QXHRcdEdFTk1BU0soMSwgMClcbisjZGVmaW5lIFpMX09VVFBVVF9QSEFTRV9TVEVQX0NUUkxfT1BfTk9ORVx0MFxuKyNkZWZpbmUgWkxfT1VUUFVUX1BIQVNFX1NURVBfQ1RSTF9PUF9SRVNFVFx0MVxuKyNkZWZpbmUgWkxfT1VUUFVUX1BIQVNFX1NURVBfQ1RSTF9PUF9SRUFEXHQyXG4rI2RlZmluZSBaTF9PVVRQVVRfUEhBU0VfU1RFUF9DVFJMX09QX1dSSVRFXHQzXG4rXG4rI2RlZmluZSBaTF9SRUdfT1VUUFVUX1BIQVNFX1NURVBfTlVNQkVSXHRcdFpMX1JFRyg5LCAweDM5LCAxKVxuK1xuKyNkZWZpbmUgWkxfUkVHX09VVFBVVF9QSEFTRV9TVEVQX01BU0tcdFx0WkxfUkVHKDksIDB4M2EsIDIpXG4rXG4rI2RlZmluZSBaTF9SRUdfT1VUUFVUX1BIQVNFX1NURVBfREFUQVx0XHRaTF9SRUcoOSwgMHgzYywgNClcbitcbiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxuICAqIFJlZ2lzdGVyIFBhZ2UgMTAsIFJlZiBNYWlsYm94XG4gICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMVQxNDowMzowOC44OTE1MzMyMjJaIiwiU2VxIjoxMywiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MjA1NDI5NzYzNjYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqUFRQIENsb2NrIFN1cHBvcnQgaW4gdGhlIEF6dXJpdGUgRFBMTCBEcml2ZXI6IEEgTWVtb3J5IFNhZmV0eSBSZXZpZXcqKlxuXG5BbHJpZ2h0LCBsZXQncyBkaXNzZWN0IHRoaXMgcGF0Y2ggYWRkaW5nIFBUUCBjbG9jayBzdXBwb3J0IGZvciB0aGUgTWljcm9jaGlwIEF6dXJpdGUgRFBMTC9QVFAvU3luY0UgZGV2aWNlcy4gVGhlIGNvcmUgaWRlYSBpcyB0byBpbnRyb2R1Y2UgZnVuY3Rpb25zIGZvciByZWFkaW5nIGFuZCB3cml0aW5nIFRpbWUgb2YgRGF5IChUb0QpLCBhZGp1c3RpbmcgcGhhc2UgYW5kIGZyZXF1ZW5jeSwgYW5kIHJlZ2lzdGVyaW5nIGEgUFRQIGNsb2NrIGRldmljZS4gVGhlIGludGVyYWN0aW9uIHdpdGggdGhlIGhhcmR3YXJlIGlzIHN0YW5kYXJkIGZhcmU6IHJlYWRpbmcgYW5kIHdyaXRpbmcgZGV2aWNlIHJlZ2lzdGVycyB2aWEgSTJDIG9yIFNQSSB1c2luZyB0aGUgYHJlZ21hcGAgZnJhbWV3b3JrLiBUaGUgcGF0Y2ggbGV2ZXJhZ2VzIHRoZSBleGlzdGluZyBQVFAgY2xvY2sgc3Vic3lzdGVtLCBwYXNzaW5nIGRhdGEgdGhyb3VnaCBpdCwgc28gdGhlIGRyaXZlciBvbmx5IG5lZWRzIHRvIHdvcnJ5IGFib3V0IHRoZSBjYWxsYmFja3MuIFRoZSBzdWJzeXN0ZW0gaGFuZGxlcyB0aGUgYGlvY3RsYCBjYWxscyBhbmQgdHJhbnNsYXRlcyB0aGVtIGludG8gYHRpbWVzcGVjNjRgIG9yIHNpbWlsYXIgc3RydWN0dXJlcyB0aGF0IHRoZSBkcml2ZXIgY2FuIHVuZGVyc3RhbmQuXG5cbk15IGltbWVkaWF0ZSBmb2N1cyBpcyBvbiBtZW1vcnkgc2FmZXR5OyBzcGVjaWZpY2FsbHksIEkgbmVlZCB0byBtYWtlIHN1cmUgd2UncmUgbm90IGluYWR2ZXJ0ZW50bHkgbGVha2luZyB1bmluaXRpYWxpemVkIG1lbW9yeS4gTGV0J3Mgc3RhcnQgd2l0aCBgemwzMDczeF9jaGFuX3RvZF9yZWFkYC4gVGhpcyBmdW5jdGlvbiBwb3B1bGF0ZXMgYSBgc3RydWN0IHRpbWVzcGVjNjRgIHBvaW50ZWQgdG8gYnkgYHRzYC4gVGhlIGZ1bmN0aW9uIHJlYWRzIHNlY29uZHMgYW5kIG5hbm9zZWNvbmRzIGZyb20gZGV2aWNlIHJlZ2lzdGVycy4gSWYgdGhlIHJlYWQgb3BlcmF0aW9ucywgYHpsMzA3M3hfcmVhZF91NDhgIG9yIGB6bDMwNzN4X3JlYWRfdTMyYCwgZmFpbCwgaXQgcmV0dXJucyBhbiBlcnJvciwgYW5kIHRoZSBgdHNgIGlzIG5vdCBmdWxseSBpbml0aWFsaXplZC4gSG93ZXZlciwgdGhlIGNhbGxpbmcgZnVuY3Rpb24gYHpsMzA3M3hfZHBsbF9wdHBfZ2V0dGltZXg2NGAgcHJvcGFnYXRlcyB0aGUgZXJyb3IuIFRoZSBQVFAgc3Vic3lzdGVtIGhhbmRsZXMgdGhlIGVycm9yIGFuZCBkb2Vzbid0IHBhc3MgYSBwYXJ0aWFsbHkgaW5pdGlhbGl6ZWQgYHRzYCB0byB1c2VyIHNwYWNlLCB3aGljaCBpcyBnb29kLiBObyB1bmluaXRpYWxpemVkIG1lbW9yeSBsZWFrIGluIHRoYXQgY2FzZS5cblxuVGhlbiwgSSdtIGNoZWNraW5nIGB6bDMwNzN4X2RwbGxfcHRwX2FkanRpbWVfcGhhc2Vfc3RlcGAuIEhlcmUsIGBzeW50aF9tYXNrYCBpcyBpbml0aWFsaXplZCB0byB6ZXJvLCB3aGljaCBpcyBnb29kLiBJdCBsb29rcyBsaWtlIGl0IGlzIHNhZmUuXG5cbk5leHQgSSByZXZpZXcgYHpsMzA3M3hfY2hhbl90b2RfYWRqdXN0YC4gVGhlIGZ1bmN0aW9uIHJlYWRzIGB0c19uZXh0YCBhbmQgYHRzX2N1cmAgd2l0aCBgemwzMDczeF9jaGFuX3RvZF9yZWFkYC4gVGhlIHZhcmlhYmxlcyBhcmUgZnVsbHkgaW5pdGlhbGl6ZWQgb24gc3VjY2Vzcy4gU28gaXQgbG9va3Mgc2FmZS5cblxuVGhlIHJlZ2lzdHJhdGlvbiBvZiB0aGUgUFRQIGNsb2NrIGRldmljZSBpcyBhbiBpbXBvcnRhbnQgYXJlYSB0byByZXZpZXcgZm9yIG1lbW9yeSBzYWZldHkuIFRoZSBwYXRjaCBkZWZpbmVzIGB6bDMwNzN4X2RwbGxfcHRwX2Nsb2NrX2luZm9gLCBhIGBwdHBfY2xvY2tfaW5mb2Agc3RydWN0LiBUaGUgZHJpdmVyIGNvcGllcyB0aGUgY29udGVudHMgb2YgYHpsMzA3M3hfZHBsbF9wdHBfY2xvY2tfaW5mb2AgaW50byBhIGxvY2FsIGBwdHBfaW5mb2Agc3RydWN0LCBhbmQgdGhlbiBvdmVyd3JpdGVzIHRoZSBuYW1lIGZpZWxkIHdpdGggYSBjYWxsIHRvIGBzbnByaW50ZmAuIEkgbmVlZCB0byBlbnN1cmUgdGhlcmUgYXJlIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGxlYWtzLiBMb29raW5nIGF0IHRoZSBkZWZpbml0aW9uLCB0aGUgYG5hbWVgIGZpZWxkIGlzIGEgYGNoYXIgbmFtZVsxNl1gIGFycmF5LiBEb2VzIGBzbnByaW50ZmAgemVyby1wYWQgdGhlIHJlc3Qgb2YgdGhlIGFycmF5PyBJIHJlbWVtYmVyIHRoYXQgYHNucHJpbnRmYCB3aWxsIG5vdC4gSWYgYHpsMzA3M3hfZHBsbF9wdHBfY2xvY2tfaW5mby5uYW1lYCB3YXNuJ3QgZnVsbHkgaW5pdGlhbGl6ZWQsIHRoZSB1bmluaXRpYWxpemVkIG1lbW9yeSBjb3VsZCBiZSBsZWFrZWQuIEhvd2V2ZXIsIGB6bDMwNzN4X2RwbGxfcHRwX2Nsb2NrX2luZm9gIGlzIGBzdGF0aWMgY29uc3RgLCBzbyBpdCBpcyB6ZXJvIGluaXRpYWxpemVkIGJ5IHRoZSBjb21waWxlci4gSXQgaXMgemVyby1wYWRkZWQsIGFuZCB0aGVuIGBzbnByaW50ZmAgb3ZlcndyaXRlcyBzb21lIG9mIHRoZSB6ZXJvIHZhbHVlcywgYnV0IHRoZSByZW1haW5pbmcgcGFydCBpcyB6ZXJvLCBzbyBubyBsZWFrLlxuXG5GaW5hbGx5LCBgemwzMDczeF9kcGxsX2FsbG9jYC4gVGhlIGNvZGUgdXNlcyBga3phbGxvY19vYmpgLCB3aGljaCBsb29rcyBzdXNwaWNpb3VzLiBJcyBpdCBhIGtlcm5lbCBtYWNybywgb3IgYSB0eXBvPyBJIHN1c3BlY3QgdGhhdCBpdCBpcyBhIG1hY3JvIGZvciBga3phbGxvYyhzaXplb2YoKnpsZHBsbCksIEdGUF9LRVJORUwpYC4gU2luY2UgdGhlIG1hY3JvIG5hbWUgY29udGFpbnMgYHphbGxvY2AsIGl0IHNob3VsZCB6ZXJvIHRoZSBtZW1vcnkuIEkgbmVlZCB0byBtYWtlIHN1cmUgdGhpcyBpcyB0aGUgY2FzZS4gTGV0IG1lIGNoZWNrIHRoZSBkZWZpbml0aW9uIG9mIGBremFsbG9jX29iamAuXG5cbk92ZXJhbGwsIHRoaXMgbG9va3MgbGlrZSBhIHdlbGwtc3RydWN0dXJlZCBwYXRjaCB3aXRoIGF0dGVudGlvbiB0byBtZW1vcnkgc2FmZXR5LiBNeSBzcG90IGNoZWNrcyBoYXZlbid0IHJldmVhbGVkIGFueSBpbW1lZGlhdGUgdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3MsIGJ1dCBJIHdpbGwgaW52ZXN0aWdhdGUgYGt6YWxsb2Nfb2JqYCBmdXJ0aGVyLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxODIyOCwiT3V0cHV0VG9rZW5zIjoxOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE4ODMsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMVQxNDowMzoyOS40MzQ1MTgwNThaIiwiU2VxIjoxNCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE3MzU2MjU3NzMsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwia3phbGxvY19vYmpcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiXFxuRnVsbCBvdXRwdXQgaXMgdG9vIGxvbmcsIHNob3dpbmcgNTAwIG91dCBvZiA3OTI3OSBsaW5lcy5cXG5Vc2UgbW9yZSBwcmVjaXNlIGV4cHJlc3Npb24gaWYgcG9zc2libGUuXFxuXFxuRG9jdW1lbnRhdGlvbi9jb3JlLWFwaS9saXN0LnJzdD0xMDM9bGlzdDpcXG4tLVxcbkRvY3VtZW50YXRpb24vY29yZS1hcGkvbGlzdC5yc3QtMTE0LVxcbkRvY3VtZW50YXRpb24vY29yZS1hcGkvbGlzdC5yc3Q6MTE1OiAgICAgICAgICBncm9jayA9IGt6YWxsb2Nfb2JqKCpncm9jayk7XFxuRG9jdW1lbnRhdGlvbi9jb3JlLWFwaS9saXN0LnJzdC0xMTYtICAgICAgICAgIGlmICghZ3JvY2spXFxuLS1cXG5Eb2N1bWVudGF0aW9uL2NvcmUtYXBpL2xpc3QucnN0LTEyNS1cXG5Eb2N1bWVudGF0aW9uL2NvcmUtYXBpL2xpc3QucnN0OjEyNjogICAgICAgICAgZGltaXRyaSA9IGt6YWxsb2Nfb2JqKCpkaW1pdHJpKTtcXG5Eb2N1bWVudGF0aW9uL2NvcmUtYXBpL2xpc3QucnN0LTEyNy0gICAgICAgICAgaWYgKCFkaW1pdHJpKVxcbi0tXFxuRG9jdW1lbnRhdGlvbi9kcml2ZXItYXBpL21haWxib3gucnN0PTQ1PWEgbWVzc2FnZSBhbmQgYSBjYWxsYmFjayBmdW5jdGlvbiB0byB0aGUgQVBJIGFuZCByZXR1cm4gaW1tZWRpYXRlbHkpLlxcbi0tXFxuRG9jdW1lbnRhdGlvbi9kcml2ZXItYXBpL21haWxib3gucnN0LTg5LVxcbkRvY3VtZW50YXRpb24vZHJpdmVyLWFwaS9tYWlsYm94LnJzdDo5MDpcXHRcXHRkY19zeW5jID0ga3phbGxvY19vYmooKmRjX3N5bmMpO1xcbkRvY3VtZW50YXRpb24vZHJpdmVyLWFwaS9tYWlsYm94LnJzdDo5MTpcXHRcXHRkY19hc3luYyA9IGt6YWxsb2Nfb2JqKCpkY19hc3luYyk7XFxuRG9jdW1lbnRhdGlvbi9kcml2ZXItYXBpL21haWxib3gucnN0LTkyLVxcbi0tXFxuRG9jdW1lbnRhdGlvbi9kcml2ZXItYXBpL21lZGlhL3Y0bDItZmgucnN0PTI2PUV4YW1wbGU6XFxuLS1cXG5Eb2N1bWVudGF0aW9uL2RyaXZlci1hcGkvbWVkaWEvdjRsMi1maC5yc3QtNDQtXFxuRG9jdW1lbnRhdGlvbi9kcml2ZXItYXBpL21lZGlhL3Y0bDItZmgucnN0OjQ1OlxcdFxcdG15X2ZoID0ga3phbGxvY19vYmooKm15X2ZoKTtcXG5Eb2N1bWVudGF0aW9uL2RyaXZlci1hcGkvbWVkaWEvdjRsMi1maC5yc3QtNDYtXFxuLS1cXG5Eb2N1bWVudGF0aW9uL3Byb2Nlc3MvY29kaW5nLXN0eWxlLnJzdD05Mzg9VGhlIGtlcm5lbCBwcm92aWRlcyB0aGUgZm9sbG93aW5nIGdlbmVyYWwgcHVycG9zZSBtZW1vcnkgYWxsb2NhdG9yczpcXG5Eb2N1bWVudGF0aW9uL3Byb2Nlc3MvY29kaW5nLXN0eWxlLnJzdDo5Mzk6a21hbGxvYygpLCBremFsbG9jKCksIGttYWxsb2Nfb2JqcygpLCBremFsbG9jX29ianMoKSwgdm1hbGxvYygpLCBhbmRcXG5Eb2N1bWVudGF0aW9uL3Byb2Nlc3MvY29kaW5nLXN0eWxlLnJzdC05NDAtdnphbGxvYygpLiAgUGxlYXNlIHJlZmVyIHRvIHRoZSBBUEkgZG9jdW1lbnRhdGlvbiBmb3IgZnVydGhlciBpbmZvcm1hdGlvblxcbi0tXFxuRG9jdW1lbnRhdGlvbi9wcm9jZXNzL2NvZGluZy1zdHlsZS5yc3Q9OTY0PVRoZSBwcmVmZXJyZWQgZm9ybSBmb3IgYWxsb2NhdGluZyBhIHplcm9lZCBhcnJheSBpcyB0aGUgZm9sbG93aW5nOlxcbi0tXFxuRG9jdW1lbnRhdGlvbi9wcm9jZXNzL2NvZGluZy1zdHlsZS5yc3QtOTY3LVxcbkRvY3VtZW50YXRpb24vcHJvY2Vzcy9jb2Rpbmctc3R5bGUucnN0Ojk2ODpcXHRwID0ga3phbGxvY19vYmpzKCpwLCBuLCAuLi4pO1xcbkRvY3VtZW50YXRpb24vcHJvY2Vzcy9jb2Rpbmctc3R5bGUucnN0LTk2OS1cXG4tLVxcbkRvY3VtZW50YXRpb24vcHJvY2Vzcy9kZXByZWNhdGVkLnJzdD0zOTg9YmVjb21lLCByZXNwZWN0aXZlbHk6Olxcbi0tXFxuRG9jdW1lbnRhdGlvbi9wcm9jZXNzL2RlcHJlY2F0ZWQucnN0LTQwMC1cXHRwdHIgPSBrbWFsbG9jX29iaigqcHRyIFssIGdmcF0gKTtcXG5Eb2N1bWVudGF0aW9uL3Byb2Nlc3MvZGVwcmVjYXRlZC5yc3Q6NDAxOlxcdHB0ciA9IGt6YWxsb2Nfb2JqKCpwdHIgWywgZ2ZwXSApO1xcbkRvY3VtZW50YXRpb24vcHJvY2Vzcy9kZXByZWNhdGVkLnJzdC00MDItXFx0cHRyID0ga21hbGxvY19vYmpzKCpwdHIsIGNvdW50IFssIGdmcF0gKTtcXG5Eb2N1bWVudGF0aW9uL3Byb2Nlc3MvZGVwcmVjYXRlZC5yc3Q6NDAzOlxcdHB0ciA9IGt6YWxsb2Nfb2JqcygqcHRyLCBjb3VudCBbLCBnZnBdICk7XFxuRG9jdW1lbnRhdGlvbi9wcm9jZXNzL2RlcHJlY2F0ZWQucnN0LTQwNC1cXHRwdHIgPSBrbWFsbG9jX2ZsZXgoKnB0ciwgZmxleF9tZW1iZXIsIGNvdW50IFssIGdmcF0gKTtcXG4tLVxcbkRvY3VtZW50YXRpb24vc291bmQva2VybmVsLWFwaS93cml0aW5nLWFuLWFsc2EtZHJpdmVyLnJzdD0yMDg9dG8gZGV0YWlscyBleHBsYWluZWQgaW4gdGhlIGZvbGxvd2luZyBzZWN0aW9uLlxcbi0tXFxuRG9jdW1lbnRhdGlvbi9zb3VuZC9rZXJuZWwtYXBpL3dyaXRpbmctYW4tYWxzYS1kcml2ZXIucnN0LTI2OC0gICAgICAgICAgICAgIC8qIGFsbG9jYXRlIGEgY2hpcC1zcGVjaWZpYyBkYXRhIHdpdGggemVybyBmaWxsZWQgKi9cXG5Eb2N1bWVudGF0aW9uL3NvdW5kL2tlcm5lbC1hcGkvd3JpdGluZy1hbi1hbHNhLWRyaXZlci5yc3Q6MjY5OiAgICAgICAgICAgICAgY2hpcCA9IGt6YWxsb2Nfb2JqKCpjaGlwKTtcXG5Eb2N1bWVudGF0aW9uL3NvdW5kL2tlcm5lbC1hcGkvd3JpdGluZy1hbi1hbHNhLWRyaXZlci5yc3QtMjcwLSAgICAgICAgICAgICAgaWYgKGNoaXAgPT0gTlVMTClcXG4tLVxcbkRvY3VtZW50YXRpb24vc291bmQva2VybmVsLWFwaS93cml0aW5nLWFuLWFsc2EtZHJpdmVyLnJzdD02MjM9QWZ0ZXIgYWxsb2NhdGluZyBhIGNhcmQgaW5zdGFuY2UgdmlhIDpjOmZ1bmM6YHNuZF9jYXJkX25ldygpYFxcbi0tXFxuRG9jdW1lbnRhdGlvbi9zb3VuZC9rZXJuZWwtYXBpL3dyaXRpbmctYW4tYWxzYS1kcml2ZXIucnN0LTYzMC0gIC4uLi4uXFxuRG9jdW1lbnRhdGlvbi9zb3VuZC9rZXJuZWwtYXBpL3dyaXRpbmctYW4tYWxzYS1kcml2ZXIucnN0OjYzMTogIGNoaXAgPSBremFsbG9jX29iaigqY2hpcCk7XFxuRG9jdW1lbnRhdGlvbi9zb3VuZC9rZXJuZWwtYXBpL3dyaXRpbmctYW4tYWxzYS1kcml2ZXIucnN0LTYzMi1cXG4tLVxcbkRvY3VtZW50YXRpb24vc291bmQva2VybmVsLWFwaS93cml0aW5nLWFuLWFsc2EtZHJpdmVyLnJzdD02OTg9ZGVzdHJ1Y3RvciBhbmQgUENJIGVudHJpZXMuIEV4YW1wbGUgY29kZSBpcyBzaG93biBmaXJzdCwgYmVsb3c6Olxcbi0tXFxuRG9jdW1lbnRhdGlvbi9zb3VuZC9rZXJuZWwtYXBpL3dyaXRpbmctYW4tYWxzYS1kcml2ZXIucnN0LTc0OS1cXG5Eb2N1bWVudGF0aW9uL3NvdW5kL2tlcm5lbC1hcGkvd3JpdGluZy1hbi1hbHNhLWRyaXZlci5yc3Q6NzUwOiAgICAgICAgICAgICAgY2hpcCA9IGt6YWxsb2Nfb2JqKCpjaGlwKTtcXG5Eb2N1bWVudGF0aW9uL3NvdW5kL2tlcm5lbC1hcGkvd3JpdGluZy1hbi1hbHNhLWRyaXZlci5yc3QtNzUxLSAgICAgICAgICAgICAgaWYgKGNoaXAgPT0gTlVMTCkge1xcbi0tXFxuRG9jdW1lbnRhdGlvbi9zb3VuZC9rZXJuZWwtYXBpL3dyaXRpbmctYW4tYWxzYS1kcml2ZXIucnN0PTM4MjM9Y2hpcCBkYXRhIGluZGl2aWR1YWxseTo6XFxuLS1cXG5Eb2N1bWVudGF0aW9uL3NvdW5kL2tlcm5lbC1hcGkvd3JpdGluZy1hbi1hbHNhLWRyaXZlci5yc3QtMzgzNS0gICAgICAgICAgLi4uLlxcbkRvY3VtZW50YXRpb24vc291bmQva2VybmVsLWFwaS93cml0aW5nLWFuLWFsc2EtZHJpdmVyLnJzdDozODM2OiAgICAgICAgICBjaGlwID0ga3phbGxvY19vYmooKmNoaXApO1xcbkRvY3VtZW50YXRpb24vc291bmQva2VybmVsLWFwaS93cml0aW5nLWFuLWFsc2EtZHJpdmVyLnJzdC0zODM3LSAgICAgICAgICAuLi4uXFxuLS1cXG5Eb2N1bWVudGF0aW9uL3RyYW5zbGF0aW9ucy96aF9DTi92aWRlbzRsaW51eC92NGwyLWZyYW1ld29yay50eHQ9Nzk0PWludCBteV9vcGVuKHN0cnVjdCBmaWxlICpmaWxlKVxcbi0tXFxuRG9jdW1lbnRhdGlvbi90cmFuc2xhdGlvbnMvemhfQ04vdmlkZW80bGludXgvdjRsMi1mcmFtZXdvcmsudHh0LTgwMS1cXG5Eb2N1bWVudGF0aW9uL3RyYW5zbGF0aW9ucy96aF9DTi92aWRlbzRsaW51eC92NGwyLWZyYW1ld29yay50eHQ6ODAyOlxcdG15X2ZoID0ga3phbGxvY19vYmooKm15X2ZoKTtcXG5Eb2N1bWVudGF0aW9uL3RyYW5zbGF0aW9ucy96aF9DTi92aWRlbzRsaW51eC92NGwyLWZyYW1ld29yay50eHQtODAzLVxcbi0tXFxuYXJjaC9hbHBoYS9rZXJuZWwvbW9kdWxlLmM9NjQ9bW9kdWxlX2Zyb2JfYXJjaF9zZWN0aW9ucyhFbGY2NF9FaGRyICpoZHIsIEVsZjY0X1NoZHIgKnNlY2hkcnMsXFxuLS1cXG5hcmNoL2FscGhhL2tlcm5lbC9tb2R1bGUuYy05NS1cXHRuc3ltcyA9IHN5bXRhYi1cXHUwMDNlc2hfc2l6ZSAvIHNpemVvZihFbGY2NF9TeW0pO1xcbmFyY2gvYWxwaGEva2VybmVsL21vZHVsZS5jOjk2OlxcdGNoYWlucyA9IGt6YWxsb2Nfb2JqcyhzdHJ1Y3QgZ290X2VudHJ5LCBuc3ltcyk7XFxuYXJjaC9hbHBoYS9rZXJuZWwvbW9kdWxlLmMtOTctXFx0aWYgKCFjaGFpbnMpIHtcXG4tLVxcbmFyY2gvYWxwaGEva2VybmVsL3NldHVwLmM9MzkwPXJlZ2lzdGVyX2NwdXModm9pZClcXG4tLVxcbmFyY2gvYWxwaGEva2VybmVsL3NldHVwLmMtMzk0LVxcdGZvcl9lYWNoX3Bvc3NpYmxlX2NwdShpKSB7XFxuYXJjaC9hbHBoYS9rZXJuZWwvc2V0dXAuYzozOTU6XFx0XFx0c3RydWN0IGNwdSAqcCA9IGt6YWxsb2Nfb2JqKCpwKTtcXG5hcmNoL2FscGhhL2tlcm5lbC9zZXR1cC5jLTM5Ni1cXHRcXHRpZiAoIXApXFxuLS1cXG5hcmNoL2FyYy9uZXQvYnBmX2ppdF9jb3JlLmM9MTEyMD1zdGF0aWMgaW50IGppdF9wcmVwYXJlX2ZpbmFsX21lbV9hbGxvYyhzdHJ1Y3Qgaml0X2NvbnRleHQgKmN0eClcXG4tLVxcbmFyY2gvYXJjL25ldC9icGZfaml0X2NvcmUuYy0xMTMxLVxcdGlmIChjdHgtXFx1MDAzZW5lZWRfZXh0cmFfcGFzcykge1xcbmFyY2gvYXJjL25ldC9icGZfaml0X2NvcmUuYzoxMTMyOlxcdFxcdGN0eC1cXHUwMDNlaml0X2RhdGEgPSBremFsbG9jX29iaigqY3R4LVxcdTAwM2VqaXRfZGF0YSk7XFxuYXJjaC9hcmMvbmV0L2JwZl9qaXRfY29yZS5jLTExMzMtXFx0XFx0aWYgKCFjdHgtXFx1MDAzZWppdF9kYXRhKVxcbi0tXFxuYXJjaC9hcm0vY29tbW9uL2xvY29tby5jPTIyMD1sb2NvbW9faW5pdF9vbmVfY2hpbGQoc3RydWN0IGxvY29tbyAqbGNoaXAsIHN0cnVjdCBsb2NvbW9fZGV2X2luZm8gKmluZm8pXFxuLS1cXG5hcmNoL2FybS9jb21tb24vbG9jb21vLmMtMjI0LVxcbmFyY2gvYXJtL2NvbW1vbi9sb2NvbW8uYzoyMjU6XFx0ZGV2ID0ga3phbGxvY19vYmooc3RydWN0IGxvY29tb19kZXYpO1xcbmFyY2gvYXJtL2NvbW1vbi9sb2NvbW8uYy0yMjYtXFx0aWYgKCFkZXYpIHtcXG4tLVxcbmFyY2gvYXJtL2NvbW1vbi9sb2NvbW8uYz0zNTY9X19sb2NvbW9fcHJvYmUoc3RydWN0IGRldmljZSAqbWUsIHN0cnVjdCByZXNvdXJjZSAqbWVtLCBpbnQgaXJxKVxcbi0tXFxuYXJjaC9hcm0vY29tbW9uL2xvY29tby5jLTM2Mi1cXG5hcmNoL2FybS9jb21tb24vbG9jb21vLmM6MzYzOlxcdGxjaGlwID0ga3phbGxvY19vYmooc3RydWN0IGxvY29tbyk7XFxuYXJjaC9hcm0vY29tbW9uL2xvY29tby5jLTM2NC1cXHRpZiAoIWxjaGlwKVxcbi0tXFxuYXJjaC9hcm0vY29tbW9uL3NhMTExMS5jPTczMz1zYTExMTFfaW5pdF9vbmVfY2hpbGQoc3RydWN0IHNhMTExMSAqc2FjaGlwLCBzdHJ1Y3QgcmVzb3VyY2UgKnBhcmVudCxcXG4tLVxcbmFyY2gvYXJtL2NvbW1vbi9zYTExMTEuYy03MzktXFxuYXJjaC9hcm0vY29tbW9uL3NhMTExMS5jOjc0MDpcXHRkZXYgPSBremFsbG9jX29iaihzdHJ1Y3Qgc2ExMTExX2Rldik7XFxuYXJjaC9hcm0vY29tbW9uL3NhMTExMS5jLTc0MS1cXHRpZiAoIWRldikge1xcbi0tXFxuYXJjaC9hcm0vY29tbW9uL3Njb29wLmM9MTc4PXN0YXRpYyBpbnQgc2Nvb3BfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldilcXG4tLVxcbmFyY2gvYXJtL2NvbW1vbi9zY29vcC5jLTE4Ny1cXG5hcmNoL2FybS9jb21tb24vc2Nvb3AuYzoxODg6XFx0ZGV2cHRyID0ga3phbGxvY19vYmooc3RydWN0IHNjb29wX2Rldik7XFxuYXJjaC9hcm0vY29tbW9uL3Njb29wLmMtMTg5LVxcdGlmICghZGV2cHRyKVxcbi0tXFxuYXJjaC9hcm0va2VybmVsL3NtcC5jPTEwOD1zdGF0aWMgaW50IHNlY29uZGFyeV9iaWdsaXR0bGVfcHJlcGFyZSh1bnNpZ25lZCBpbnQgY3B1KVxcbi0tXFxuYXJjaC9hcm0va2VybmVsL3NtcC5jLTExMC1cXHRpZiAoIWNwdV92dGFibGVbY3B1XSlcXG5hcmNoL2FybS9rZXJuZWwvc21wLmM6MTExOlxcdFxcdGNwdV92dGFibGVbY3B1XSA9IGt6YWxsb2Nfb2JqKCpjcHVfdnRhYmxlW2NwdV0pO1xcbmFyY2gvYXJtL2tlcm5lbC9zbXAuYy0xMTItXFxuLS1cXG5hcmNoL2FybS9rZXJuZWwvdmRzby5jPTE2OT1zdGF0aWMgaW50IF9faW5pdCB2ZHNvX2luaXQodm9pZClcXG4tLVxcbmFyY2gvYXJtL2tlcm5lbC92ZHNvLmMtMTgxLVxcdC8qIEFsbG9jYXRlIHRoZSBWRFNPIHRleHQgcGFnZWxpc3QgKi9cXG5hcmNoL2FybS9rZXJuZWwvdmRzby5jOjE4MjpcXHR2ZHNvX3RleHRfcGFnZWxpc3QgPSBremFsbG9jX29ianMoc3RydWN0IHBhZ2UgKiwgdGV4dF9wYWdlcyk7XFxuYXJjaC9hcm0va2VybmVsL3Zkc28uYy0xODMtXFx0aWYgKHZkc29fdGV4dF9wYWdlbGlzdCA9PSBOVUxMKVxcbi0tXFxuYXJjaC9hcm0vbWFjaC1mb290YnJpZGdlL2RjMjEyODUuYz0yNjE9aW50IF9faW5pdCBkYzIxMjg1X3NldHVwKGludCBuciwgc3RydWN0IHBjaV9zeXNfZGF0YSAqc3lzKVxcbi0tXFxuYXJjaC9hcm0vbWFjaC1mb290YnJpZGdlL2RjMjEyODUuYy0yNjQtXFxuYXJjaC9hcm0vbWFjaC1mb290YnJpZGdlL2RjMjEyODUuYzoyNjU6XFx0cmVzID0ga3phbGxvY19vYmpzKHN0cnVjdCByZXNvdXJjZSwgMik7XFxuYXJjaC9hcm0vbWFjaC1mb290YnJpZGdlL2RjMjEyODUuYy0yNjYtXFx0aWYgKCFyZXMpIHtcXG4tLVxcbmFyY2gvYXJtL21hY2gtZm9vdGJyaWRnZS9lYnNhMjg1LmM9Njk9c3RhdGljIGludCBfX2luaXQgZWJzYTI4NV9sZWRzX2luaXQodm9pZClcXG4tLVxcbmFyY2gvYXJtL21hY2gtZm9vdGJyaWRnZS9lYnNhMjg1LmMtODYtXFxuYXJjaC9hcm0vbWFjaC1mb290YnJpZGdlL2Vic2EyODUuYzo4NzpcXHRcXHRsZWQgPSBremFsbG9jX29iaigqbGVkKTtcXG5hcmNoL2FybS9tYWNoLWZvb3RicmlkZ2UvZWJzYTI4NS5jLTg4LVxcdFxcdGlmICghbGVkKVxcbi0tXFxuYXJjaC9hcm0vbWFjaC1mb290YnJpZGdlL25ldHdpbmRlci1ody5jPTcyMD1zdGF0aWMgaW50IF9faW5pdCBuZXR3aW5kZXJfbGVkc19pbml0KHZvaWQpXFxuLS1cXG5hcmNoL2FybS9tYWNoLWZvb3RicmlkZ2UvbmV0d2luZGVyLWh3LmMtNzI5LVxcbmFyY2gvYXJtL21hY2gtZm9vdGJyaWRnZS9uZXR3aW5kZXItaHcuYzo3MzA6XFx0XFx0bGVkID0ga3phbGxvY19vYmooKmxlZCk7XFxuYXJjaC9hcm0vbWFjaC1mb290YnJpZGdlL25ldHdpbmRlci1ody5jLTczMS1cXHRcXHRpZiAoIWxlZClcXG4tLVxcbmFyY2gvYXJtL21hY2gtaW14L21tZGMuYz00NzM9c3RhdGljIGludCBpbXhfbW1kY19wZXJmX2luaXQoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldiwgdm9pZCBfX2lvbWVtICptbWRjX2Jhc2UsXFxuLS1cXG5hcmNoL2FybS9tYWNoLWlteC9tbWRjLmMtNDc5LVxcbmFyY2gvYXJtL21hY2gtaW14L21tZGMuYzo0ODA6XFx0cG11X21tZGMgPSBremFsbG9jX29iaigqcG11X21tZGMpO1xcbmFyY2gvYXJtL21hY2gtaW14L21tZGMuYy00ODEtXFx0aWYgKCFwbXVfbW1kYykge1xcbi0tXFxuYXJjaC9hcm0vbWFjaC1tdmVidS9ib2FyZC12Ny5jPTExND1zdGF0aWMgdm9pZCBfX2luaXQgaTJjX3F1aXJrKHZvaWQpXFxuLS1cXG5hcmNoL2FybS9tYWNoLW12ZWJ1L2JvYXJkLXY3LmMtMTI5LVxcbmFyY2gvYXJtL21hY2gtbXZlYnUvYm9hcmQtdjcuYzoxMzA6XFx0XFx0bmV3X2NvbXBhdCA9IGt6YWxsb2Nfb2JqKCpuZXdfY29tcGF0KTtcXG5hcmNoL2FybS9tYWNoLW12ZWJ1L2JvYXJkLXY3LmMtMTMxLVxcbi0tXFxuYXJjaC9hcm0vbWFjaC1tdmVidS9jb2hlcmVuY3kuYz0xNjM9c3RhdGljIHZvaWQgX19pbml0IGFybWFkYV8zNzVfMzgwX2NvaGVyZW5jeV9pbml0KHN0cnVjdCBkZXZpY2Vfbm9kZSAqbnApXFxuLS1cXG5hcmNoL2FybS9tYWNoLW12ZWJ1L2NvaGVyZW5jeS5jLTE4Ny1cXG5hcmNoL2FybS9tYWNoLW12ZWJ1L2NvaGVyZW5jeS5jOjE4ODpcXHRcXHRwID0ga3phbGxvY19vYmooKnApO1xcbmFyY2gvYXJtL21hY2gtbXZlYnUvY29oZXJlbmN5LmMtMTg5LVxcdFxcdHAtXFx1MDAzZW5hbWUgPSBrc3RyZHVwKFxcXCJhcm0saW8tY29oZXJlbnRcXFwiLCBHRlBfS0VSTkVMKTtcXG4tLVxcbmFyY2gvYXJtL21hY2gtbXZlYnUvbXZlYnUtc29jLWlkLmM9MTQ4PXN0YXRpYyBpbnQgX19pbml0IG12ZWJ1X3NvY19kZXZpY2Uodm9pZClcXG4tLVxcbmFyY2gvYXJtL21hY2gtbXZlYnUvbXZlYnUtc29jLWlkLmMtMTU2LVxcbmFyY2gvYXJtL21hY2gtbXZlYnUvbXZlYnUtc29jLWlkLmM6MTU3OlxcdHNvY19kZXZfYXR0ciA9IGt6YWxsb2Nfb2JqKCpzb2NfZGV2X2F0dHIpO1xcbmFyY2gvYXJtL21hY2gtbXZlYnUvbXZlYnUtc29jLWlkLmMtMTU4LVxcdGlmICghc29jX2Rldl9hdHRyKVxcbi0tXFxuYXJjaC9hcm0vbWFjaC1teHMvbWFjaC1teHMuYz0zODA9c3RhdGljIHZvaWQgX19pbml0IG14c19tYWNoaW5lX2luaXQodm9pZClcXG4tLVxcbmFyY2gvYXJtL21hY2gtbXhzL21hY2gtbXhzLmMtMzg5LVxcbmFyY2gvYXJtL21hY2gtbXhzL21hY2gtbXhzLmM6MzkwOlxcdHNvY19kZXZfYXR0ciA9IGt6YWxsb2Nfb2JqKCpzb2NfZGV2X2F0dHIpO1xcbmFyY2gvYXJtL21hY2gtbXhzL21hY2gtbXhzLmMtMzkxLVxcdGlmICghc29jX2Rldl9hdHRyKVxcbi0tXFxuYXJjaC9hcm0vbWFjaC1vbWFwMS9kbWEuYz0yOTQ9c3RhdGljIGludCBfX2luaXQgb21hcDFfc3lzdGVtX2RtYV9pbml0KHZvaWQpXFxuLS1cXG5hcmNoL2FybS9tYWNoLW9tYXAxL2RtYS5jLTMyMS1cXG5hcmNoL2FybS9tYWNoLW9tYXAxL2RtYS5jOjMyMjpcXHRkID0ga3phbGxvY19vYmooKmQpO1xcbmFyY2gvYXJtL21hY2gtb21hcDEvZG1hLmMtMzIzLVxcdGlmICghZCkge1xcbi0tXFxuYXJjaC9hcm0vbWFjaC1vbWFwMS9tY2JzcC5jPTI5Mj1zdGF0aWMgdm9pZCBvbWFwX21jYnNwX3JlZ2lzdGVyX2JvYXJkX2NmZyhzdHJ1Y3QgcmVzb3VyY2UgKnJlcywgaW50IHJlc19jb3VudCxcXG4tLVxcbmFyY2gvYXJtL21hY2gtb21hcDEvbWNic3AuYy0yOTYtXFxuYXJjaC9hcm0vbWFjaC1vbWFwMS9tY2JzcC5jOjI5NzpcXHRvbWFwX21jYnNwX2RldmljZXMgPSBremFsbG9jX29ianMoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqLCBzaXplKTtcXG5hcmNoL2FybS9tYWNoLW9tYXAxL21jYnNwLmMtMjk4LVxcdGlmICghb21hcF9tY2JzcF9kZXZpY2VzKSB7XFxuLS1cXG5hcmNoL2FybS9tYWNoLW9tYXAxL3RpbWVyLmM9NTE9c3RhdGljIGludCBfX2luaXQgb21hcDFfZG1fdGltZXJfaW5pdCh2b2lkKVxcbi0tXFxuYXJjaC9hcm0vbWFjaC1vbWFwMS90aW1lci5jLTEyNy1cXG5hcmNoL2FybS9tYWNoLW9tYXAxL3RpbWVyLmM6MTI4OlxcdFxcdHBkYXRhID0ga3phbGxvY19vYmooKnBkYXRhKTtcXG5hcmNoL2FybS9tYWNoLW9tYXAxL3RpbWVyLmMtMTI5LVxcdFxcdGlmICghcGRhdGEpIHtcXG4tLVxcbmFyY2gvYXJtL21hY2gtb21hcDIvY2xrdDJ4eHhfdmlydF9wcmNtX3NldC5jPTIzMD12b2lkIG9tYXAyeHh4X2Nsa3RfdnBzX2luaXQodm9pZClcXG4tLVxcbmFyY2gvYXJtL21hY2gtb21hcDIvY2xrdDJ4eHhfdmlydF9wcmNtX3NldC5jLTIzOS1cXG5hcmNoL2FybS9tYWNoLW9tYXAyL2Nsa3QyeHh4X3ZpcnRfcHJjbV9zZXQuYzoyNDA6XFx0aHcgPSBremFsbG9jX29iaigqaHcpO1xcbmFyY2gvYXJtL21hY2gtb21hcDIvY2xrdDJ4eHhfdmlydF9wcmNtX3NldC5jLTI0MS1cXHRpZiAoIWh3KVxcbi0tXFxuYXJjaC9hcm0vbWFjaC1vbWFwMi9pZC5jPTc4Nj12b2lkIF9faW5pdCBvbWFwX3NvY19kZXZpY2VfaW5pdCh2b2lkKVxcbi0tXFxuYXJjaC9hcm0vbWFjaC1vbWFwMi9pZC5jLTc5MC1cXG5hcmNoL2FybS9tYWNoLW9tYXAyL2lkLmM6NzkxOlxcdHNvY19kZXZfYXR0ciA9IGt6YWxsb2Nfb2JqKCpzb2NfZGV2X2F0dHIpO1xcbmFyY2gvYXJtL21hY2gtb21hcDIvaWQuYy03OTItXFx0aWYgKCFzb2NfZGV2X2F0dHIpXFxuLS1cXG5hcmNoL2FybS9tYWNoLW9tYXAyL29tYXBfZGV2aWNlLmM9MTMxPXN0YXRpYyBpbnQgb21hcF9kZXZpY2VfYnVpbGRfZnJvbV9kdChzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KVxcbi0tXFxuYXJjaC9hcm0vbWFjaC1vbWFwMi9vbWFwX2RldmljZS5jLTE1OC1cXG5hcmNoL2FybS9tYWNoLW9tYXAyL29tYXBfZGV2aWNlLmM6MTU5OlxcdGh3bW9kcyA9IGt6YWxsb2Nfb2JqcyhzdHJ1Y3Qgb21hcF9od21vZCAqLCBvaF9jbnQpO1xcbmFyY2gvYXJtL21hY2gtb21hcDIvb21hcF9kZXZpY2UuYy0xNjAtXFx0aWYgKCFod21vZHMpIHtcXG4tLVxcbmFyY2gvYXJtL21hY2gtb21hcDIvb21hcF9od21vZC5jPTMzODE9c3RhdGljIGludCBvbWFwX2h3bW9kX2FsbG9jYXRlX21vZHVsZShzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBvbWFwX2h3bW9kICpvaCxcXG4tLVxcbmFyY2gvYXJtL21hY2gtb21hcDIvb21hcF9od21vZC5jLTMzOTQtXFxuYXJjaC9hcm0vbWFjaC1vbWFwMi9vbWFwX2h3bW9kLmM6MzM5NTpcXHRzeXNjID0ga3phbGxvY19vYmooKnN5c2MpO1xcbmFyY2gvYXJtL21hY2gtb21hcDIvb21hcF9od21vZC5jLTMzOTYtXFx0aWYgKCFzeXNjKVxcbi0tXFxuYXJjaC9hcm0vbWFjaC1vbWFwMi9vbWFwX2h3bW9kLmMtMzQyNC1cXHRpZiAobGlzdF9lbXB0eShcXHUwMDI2b2gtXFx1MDAzZXNsYXZlX3BvcnRzKSkge1xcbmFyY2gvYXJtL21hY2gtb21hcDIvb21hcF9od21vZC5jOjM0MjU6XFx0XFx0b2kgPSBremFsbG9jX29iaigqb2kpO1xcbmFyY2gvYXJtL21hY2gtb21hcDIvb21hcF9od21vZC5jLTM0MjYtXFx0XFx0aWYgKCFvaSlcXG4tLVxcbmFyY2gvYXJtL21hY2gtb21hcDIvb21hcF9od21vZC5jPTM1MTM9aW50IG9tYXBfaHdtb2RfaW5pdF9tb2R1bGUoc3RydWN0IGRldmljZSAqZGV2LFxcbi0tXFxuYXJjaC9hcm0vbWFjaC1vbWFwMi9vbWFwX2h3bW9kLmMtMzUyNy1cXHRpZiAoIW9oKSB7XFxuYXJjaC9hcm0vbWFjaC1vbWFwMi9vbWFwX2h3bW9kLmM6MzUyODpcXHRcXHRvaCA9IGt6YWxsb2Nfb2JqKCpvaCk7XFxuYXJjaC9hcm0vbWFjaC1vbWFwMi9vbWFwX2h3bW9kLmMtMzUyOS1cXHRcXHRpZiAoIW9oKVxcbi0tXFxuYXJjaC9hcm0vbWFjaC1vbWFwMi9vbWFwX2h3bW9kLmMtMzUzOC1cXG5hcmNoL2FybS9tYWNoLW9tYXAyL29tYXBfaHdtb2QuYzozNTM5OlxcdFxcdG9oLVxcdTAwM2VjbGFzcyA9IGt6YWxsb2Nfb2JqKCpvaC1cXHUwMDNlY2xhc3MpO1xcbmFyY2gvYXJtL21hY2gtb21hcDIvb21hcF9od21vZC5jLTM1NDAtXFx0XFx0aWYgKCFvaC1cXHUwMDNlY2xhc3MpIHtcXG4tLVxcbmFyY2gvYXJtL21hY2gtb21hcDIvcG0zM3h4LWNvcmUuYz0zNzk9c3RhdGljIGludCBfX2luaXQgYW14M19pZGxlX2luaXQoc3RydWN0IGRldmljZV9ub2RlICpjcHVfbm9kZSwgaW50IGNwdSlcXG4tLVxcbmFyY2gvYXJtL21hY2gtb21hcDIvcG0zM3h4LWNvcmUuYy00MTItXFxuYXJjaC9hcm0vbWFjaC1vbWFwMi9wbTMzeHgtY29yZS5jOjQxMzpcXHRpZGxlX3N0YXRlcyA9IGt6YWxsb2Nfb2JqcygqaWRsZV9zdGF0ZXMsIHN0YXRlX2NvdW50KTtcXG5hcmNoL2FybS9tYWNoLW9tYXAyL3BtMzN4eC1jb3JlLmMtNDE0LVxcdGlmICghaWRsZV9zdGF0ZXMpXFxuLS1cXG5hcmNoL2FybS9tYWNoLW9tYXAyL3NyX2RldmljZS5jPTMwPXN0YXRpYyB2b2lkIF9faW5pdCBzcl9zZXRfbnZhbHVlcyhzdHJ1Y3Qgb21hcF92b2x0X2RhdGEgKnZvbHRfZGF0YSxcXG4tLVxcbmFyY2gvYXJtL21hY2gtb21hcDIvc3JfZGV2aWNlLmMtNDEtXFxuYXJjaC9hcm0vbWFjaC1vbWFwMi9zcl9kZXZpY2UuYzo0MjpcXHRudmFsdWVfdGFibGUgPSBremFsbG9jX29ianMoKm52YWx1ZV90YWJsZSwgY291bnQpO1xcbmFyY2gvYXJtL21hY2gtb21hcDIvc3JfZGV2aWNlLmMtNDMtXFx0aWYgKCFudmFsdWVfdGFibGUpXFxuLS1cXG5hcmNoL2FybS9tYWNoLW9yaW9uNXgvcGNpLmM9MTM5PXN0YXRpYyBpbnQgX19pbml0IHBjaWVfc2V0dXAoc3RydWN0IHBjaV9zeXNfZGF0YSAqc3lzKVxcbi0tXFxuYXJjaC9hcm0vbWFjaC1vcmlvbjV4L3BjaS5jLTE3MS1cXHQgKi9cXG5hcmNoL2FybS9tYWNoLW9yaW9uNXgvcGNpLmM6MTcyOlxcdHJlcyA9IGt6YWxsb2Nfb2JqKHN0cnVjdCByZXNvdXJjZSk7XFxuYXJjaC9hcm0vbWFjaC1vcmlvbjV4L3BjaS5jLTE3My1cXHRpZiAoIXJlcylcXG4tLVxcbmFyY2gvYXJtL21hY2gtb3Jpb241eC9wY2kuYz00NjY9c3RhdGljIGludCBfX2luaXQgcGNpX3NldHVwKHN0cnVjdCBwY2lfc3lzX2RhdGEgKnN5cylcXG4tLVxcbmFyY2gvYXJtL21hY2gtb3Jpb241eC9wY2kuYy00OTItXFx0ICovXFxuYXJjaC9hcm0vbWFjaC1vcmlvbjV4L3BjaS5jOjQ5MzpcXHRyZXMgPSBremFsbG9jX29iaihzdHJ1Y3QgcmVzb3VyY2UpO1xcbmFyY2gvYXJtL21hY2gtb3Jpb241eC9wY2kuYy00OTQtXFx0aWYgKCFyZXMpXFxuLS1cXG5hcmNoL2FybS9tYWNoLXJwYy9lY2FyZC5jPTY4OT1zdGF0aWMgc3RydWN0IGV4cGFuc2lvbl9jYXJkICpfX2luaXQgZWNhcmRfYWxsb2NfY2FyZChpbnQgdHlwZSwgaW50IHNsb3QpXFxuLS1cXG5hcmNoL2FybS9tYWNoLXJwYy9lY2FyZC5jLTY5NC1cXG5hcmNoL2FybS9tYWNoLXJwYy9lY2FyZC5jOjY5NTpcXHRlYyA9IGt6YWxsb2Nfb2JqKGVjYXJkX3QpO1xcbmFyY2gvYXJtL21hY2gtcnBjL2VjYXJkLmMtNjk2LVxcdGlmICghZWMpIHtcXG4tLVxcbmFyY2gvYXJtL21hY2gtc2ExMTAwL2Nsb2NrLmM9OTM9aW50IF9faW5pdCBzYTExeHhfY2xrX2luaXQodm9pZClcXG4tLVxcbmFyY2gvYXJtL21hY2gtc2ExMTAwL2Nsb2NrLmMtMTA5LVxcbmFyY2gvYXJtL21hY2gtc2ExMTAwL2Nsb2NrLmM6MTEwOlxcdGh3ID0ga3phbGxvY19vYmooKmh3KTtcXG5hcmNoL2FybS9tYWNoLXNhMTEwMC9jbG9jay5jLTExMS1cXHRpZiAoIWh3KVxcbi0tXFxuYXJjaC9hcm0vbWFjaC1zYTExMDAvY2xvY2suYy0xMzEtXFxuYXJjaC9hcm0vbWFjaC1zYTExMDAvY2xvY2suYzoxMzI6XFx0aHcgPSBremFsbG9jX29iaigqaHcpO1xcbmFyY2gvYXJtL21hY2gtc2ExMTAwL2Nsb2NrLmMtMTMzLVxcdGlmICghaHcpXFxuLS1cXG5hcmNoL2FybS9tYWNoLXNhMTEwMC9nZW5lcmljLmM9MzE3PWludCBfX2luaXQgc2ExMXgwX3JlZ2lzdGVyX2ZpeGVkX3JlZ3VsYXRvcihpbnQgbixcXG4tLVxcbmFyY2gvYXJtL21hY2gtc2ExMTAwL2dlbmVyaWMuYy0zMjMtXFxuYXJjaC9hcm0vbWFjaC1zYTExMDAvZ2VuZXJpYy5jOjMyNDpcXHRjZmctXFx1MDAzZWluaXRfZGF0YSA9IGlkID0ga3phbGxvY19vYmooKmNmZy1cXHUwMDNlaW5pdF9kYXRhKTtcXG5hcmNoL2FybS9tYWNoLXNhMTEwMC9nZW5lcmljLmMtMzI1LVxcdGlmICghY2ZnLVxcdTAwM2Vpbml0X2RhdGEpXFxuLS1cXG5hcmNoL2FybS9tYWNoLXNhMTEwMC9uZXBvbnNldC5jPTIyNT1zdGF0aWMgaW50IG5lcG9uc2V0X3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRldilcXG4tLVxcbmFyY2gvYXJtL21hY2gtc2ExMTAwL25lcG9uc2V0LmMtMjc4LVxcbmFyY2gvYXJtL21hY2gtc2ExMTAwL25lcG9uc2V0LmM6Mjc5OlxcdGQgPSBremFsbG9jX29iaigqZCk7XFxuYXJjaC9hcm0vbWFjaC1zYTExMDAvbmVwb25zZXQuYy0yODAtXFx0aWYgKCFkKSB7XFxuLS1cXG5hcmNoL2FybS9tYWNoLXNobW9iaWxlL3JlZ3VsYXRvci1xdWlyay1yY2FyLWdlbjIuYz0xNDE9c3RhdGljIGludCBfX2luaXQgcmNhcl9nZW4yX3JlZ3VsYXRvcl9xdWlyayh2b2lkKVxcbi0tXFxuYXJjaC9hcm0vbWFjaC1zaG1vYmlsZS9yZWd1bGF0b3ItcXVpcmstcmNhci1nZW4yLmMtMTY2LVxcbmFyY2gvYXJtL21hY2gtc2htb2JpbGUvcmVndWxhdG9yLXF1aXJrLXJjYXItZ2VuMi5jOjE2NzpcXHRcXHRxdWlyayA9IGt6YWxsb2Nfb2JqKCpxdWlyayk7XFxuYXJjaC9hcm0vbWFjaC1zaG1vYmlsZS9yZWd1bGF0b3ItcXVpcmstcmNhci1nZW4yLmMtMTY4LVxcdFxcdGlmICghcXVpcmspIHtcXG4tLVxcbmFyY2gvYXJtL21hY2gtdmVyc2F0aWxlL3NwYy5jPTM5Mz1zdGF0aWMgaW50IHZlX3NwY19wb3B1bGF0ZV9vcHBzKHVpbnQzMl90IGNsdXN0ZXIpXFxuLS1cXG5hcmNoL2FybS9tYWNoLXZlcnNhdGlsZS9zcGMuYy0zOTctXFxuYXJjaC9hcm0vbWFjaC12ZXJzYXRpbGUvc3BjLmM6Mzk4OlxcdG9wcHMgPSBremFsbG9jX29ianMoKm9wcHMsIE1BWF9PUFBTKTtcXG5hcmNoL2FybS9tYWNoLXZlcnNhdGlsZS9zcGMuYy0zOTktXFx0aWYgKCFvcHBzKVxcbi0tXFxuYXJjaC9hcm0vbWFjaC12ZXJzYXRpbGUvc3BjLmM9NDQyPWludCBfX2luaXQgdmVfc3BjX2luaXQodm9pZCBfX2lvbWVtICpiYXNlYWRkciwgdTMyIGExNV9jbHVzaWQsIGludCBpcnEpXFxuLS1cXG5hcmNoL2FybS9tYWNoLXZlcnNhdGlsZS9zcGMuYy00NDQtXFx0aW50IHJldDtcXG5hcmNoL2FybS9tYWNoLXZlcnNhdGlsZS9zcGMuYzo0NDU6XFx0aW5mbyA9IGt6YWxsb2Nfb2JqKCppbmZvKTtcXG5hcmNoL2FybS9tYWNoLXZlcnNhdGlsZS9zcGMuYy00NDYtXFx0aWYgKCFpbmZvKVxcbi0tXFxuYXJjaC9hcm0vbWFjaC12ZXJzYXRpbGUvc3BjLmM9NTIzPXN0YXRpYyBzdHJ1Y3QgY2xrICp2ZV9zcGNfY2xrX3JlZ2lzdGVyKHN0cnVjdCBkZXZpY2UgKmNwdV9kZXYpXFxuLS1cXG5hcmNoL2FybS9tYWNoLXZlcnNhdGlsZS9zcGMuYy01MjctXFxuYXJjaC9hcm0vbWFjaC12ZXJzYXRpbGUvc3BjLmM6NTI4OlxcdHNwYyA9IGt6YWxsb2Nfb2JqKCpzcGMpO1xcbmFyY2gvYXJtL21hY2gtdmVyc2F0aWxlL3NwYy5jLTUyOS1cXHRpZiAoIXNwYylcXG4tLVxcbmFyY2gvYXJtL21hY2gtdmVyc2F0aWxlL3ZlcnNhdGlsZS5jPTEyMz1zdGF0aWMgdm9pZCBfX2luaXQgdmVyc2F0aWxlX2R0X3BjaV9pbml0KHZvaWQpXFxuLS1cXG5hcmNoL2FybS9tYWNoLXZlcnNhdGlsZS92ZXJzYXRpbGUuYy0xNDQtXFxuYXJjaC9hcm0vbWFjaC12ZXJzYXRpbGUvdmVyc2F0aWxlLmM6MTQ1OlxcdG5ld3Byb3AgPSBremFsbG9jX29iaigqbmV3cHJvcCk7XFxuYXJjaC9hcm0vbWFjaC12ZXJzYXRpbGUvdmVyc2F0aWxlLmMtMTQ2LVxcdGlmICghbmV3cHJvcClcXG4tLVxcbmFyY2gvYXJtL21hY2gtenlucS9jb21tb24uYz0xMDU9c3RhdGljIHZvaWQgX19pbml0IHp5bnFfaW5pdF9tYWNoaW5lKHZvaWQpXFxuLS1cXG5hcmNoL2FybS9tYWNoLXp5bnEvY29tbW9uLmMtMTEwLVxcbmFyY2gvYXJtL21hY2gtenlucS9jb21tb24uYzoxMTE6XFx0c29jX2Rldl9hdHRyID0ga3phbGxvY19vYmooKnNvY19kZXZfYXR0cik7XFxuYXJjaC9hcm0vbWFjaC16eW5xL2NvbW1vbi5jLTExMi1cXHRpZiAoIXNvY19kZXZfYXR0cilcXG4tLVxcbmFyY2gvYXJtL21tL2NhY2hlLWwyeDAtcG11LmM9NTAzPXN0YXRpYyBfX2luaXQgaW50IGwyeDBfcG11X2luaXQodm9pZClcXG4tLVxcbmFyY2gvYXJtL21tL2NhY2hlLWwyeDAtcG11LmMtNTA5LVxcbmFyY2gvYXJtL21tL2NhY2hlLWwyeDAtcG11LmM6NTEwOlxcdGwyeDBfcG11ID0ga3phbGxvY19vYmooKmwyeDBfcG11KTtcXG5hcmNoL2FybS9tbS9jYWNoZS1sMngwLXBtdS5jLTUxMS1cXHRpZiAoIWwyeDBfcG11KSB7XFxuLS1cXG5hcmNoL2FybS9tbS9jYWNoZS11bmlwaGllci5jPTMxNT1zdGF0aWMgaW50IF9faW5pdCBfX3VuaXBoaWVyX2NhY2hlX2luaXQoc3RydWN0IGRldmljZV9ub2RlICpucCxcXG4tLVxcbmFyY2gvYXJtL21tL2NhY2hlLXVuaXBoaWVyLmMtMzQ0LVxcbmFyY2gvYXJtL21tL2NhY2hlLXVuaXBoaWVyLmM6MzQ1OlxcdGRhdGEgPSBremFsbG9jX29iaigqZGF0YSk7XFxuYXJjaC9hcm0vbW0vY2FjaGUtdW5pcGhpZXIuYy0zNDYtXFx0aWYgKCFkYXRhKVxcbi0tXFxuYXJjaC9hcm0vbW0vZG1hLW1hcHBpbmcuYz01MzM9c3RhdGljIHZvaWQgKl9fZG1hX2FsbG9jKHN0cnVjdCBkZXZpY2UgKmRldiwgc2l6ZV90IHNpemUsIGRtYV9hZGRyX3QgKmhhbmRsZSxcXG4tLVxcbmFyY2gvYXJtL21tL2RtYS1tYXBwaW5nLmMtNTYwLVxcbmFyY2gvYXJtL21tL2RtYS1tYXBwaW5nLmM6NTYxOlxcdGJ1ZiA9IGt6YWxsb2Nfb2JqKCpidWYsXFxuYXJjaC9hcm0vbW0vZG1hLW1hcHBpbmcuYy01NjItXFx0XFx0XFx0ICBnZnAgXFx1MDAyNiB+KF9fR0ZQX0RNQSB8IF9fR0ZQX0RNQTMyIHwgX19HRlBfSElHSE1FTSkpO1xcbi0tXFxuYXJjaC9hcm0vbW0vZG1hLW1hcHBpbmcuYz0xNDg3PWFybV9pb21tdV9jcmVhdGVfbWFwcGluZyhzdHJ1Y3QgZGV2aWNlICpkZXYsIGRtYV9hZGRyX3QgYmFzZSwgdTY0IHNpemUpXFxuLS1cXG5hcmNoL2FybS9tbS9kbWEtbWFwcGluZy5jLTE1MDYtXFxuYXJjaC9hcm0vbW0vZG1hLW1hcHBpbmcuYzoxNTA3OlxcdG1hcHBpbmcgPSBremFsbG9jX29iaihzdHJ1Y3QgZG1hX2lvbW11X21hcHBpbmcpO1xcbmFyY2gvYXJtL21tL2RtYS1tYXBwaW5nLmMtMTUwOC1cXHRpZiAoIW1hcHBpbmcpXFxuLS1cXG5hcmNoL2FybS94ZW4vZW5saWdodGVuLmM9MzE2PWludCBfX2luaXQgYXJjaF94ZW5fdW5wb3B1bGF0ZWRfaW5pdChzdHJ1Y3QgcmVzb3VyY2UgKipyZXMpXFxuLS1cXG5hcmNoL2FybS94ZW4vZW5saWdodGVuLmMtMzQzLVxcbmFyY2gvYXJtL3hlbi9lbmxpZ2h0ZW4uYzozNDQ6XFx0cmVncyA9IGt6YWxsb2Nfb2JqcygqcmVncywgbnJfcmVnKTtcXG5hcmNoL2FybS94ZW4vZW5saWdodGVuLmMtMzQ1LVxcdGlmICghcmVncykge1xcbi0tXFxuYXJjaC9hcm0veGVuL2VubGlnaHRlbi5jLTM4Ny1cXG5hcmNoL2FybS94ZW4vZW5saWdodGVuLmM6Mzg4OlxcdFxcdHRtcF9yZXMgPSBremFsbG9jX29iaigqdG1wX3Jlcyk7XFxuYXJjaC9hcm0veGVuL2VubGlnaHRlbi5jLTM4OS1cXHRcXHRpZiAoIXRtcF9yZXMpIHtcXG4tLVxcbmFyY2gvYXJtL3hlbi9wMm0uYz0xNTA9Ym9vbCBfX3NldF9waHlzX3RvX21hY2hpbmVfbXVsdGkodW5zaWduZWQgbG9uZyBwZm4sXFxuLS1cXG5hcmNoL2FybS94ZW4vcDJtLmMtMTc4LVxcbmFyY2gvYXJtL3hlbi9wMm0uYzoxNzk6XFx0cDJtX2VudHJ5ID0ga3phbGxvY19vYmooKnAybV9lbnRyeSwgR0ZQX05PV0FJVCk7XFxuYXJjaC9hcm0veGVuL3AybS5jLTE4MC1cXHRpZiAoIXAybV9lbnRyeSlcXG4tLVxcbmFyY2gvYXJtNjQva2VybmVsL3Zkc28uYz02OD1zdGF0aWMgaW50IF9faW5pdCBfX3Zkc29faW5pdChlbnVtIHZkc29fYWJpIGFiaSlcXG4tLVxcbmFyY2gvYXJtNjQva2VybmVsL3Zkc28uYy04My1cXG5hcmNoL2FybTY0L2tlcm5lbC92ZHNvLmM6ODQ6XFx0dmRzb19wYWdlbGlzdCA9IGt6YWxsb2Nfb2JqcyhzdHJ1Y3QgcGFnZSAqLCB2ZHNvX2luZm9bYWJpXS52ZHNvX3BhZ2VzKTtcXG5hcmNoL2FybTY0L2tlcm5lbC92ZHNvLmMtODUtXFx0aWYgKHZkc29fcGFnZWxpc3QgPT0gTlVMTClcXG4tLVxcbmFyY2gvYXJtNjQva3ZtL21tdS5jPTQ4MD1zdGF0aWMgaW50IHNoYXJlX3Bmbl9oeXAodTY0IHBmbilcXG4tLVxcbmFyY2gvYXJtNjQva3ZtL21tdS5jLTQ5Mi1cXG5hcmNoL2FybTY0L2t2bS9tbXUuYzo0OTM6XFx0dGhpcyA9IGt6YWxsb2Nfb2JqKCp0aGlzKTtcXG5hcmNoL2FybTY0L2t2bS9tbXUuYy00OTQtXFx0aWYgKCF0aGlzKSB7XFxuLS1cXG5hcmNoL2FybTY0L2t2bS9tbXUuYz05ODE9aW50IGt2bV9pbml0X3N0YWdlMl9tbXUoc3RydWN0IGt2bSAqa3ZtLCBzdHJ1Y3Qga3ZtX3MyX21tdSAqbW11LCB1bnNpZ25lZCBsb25nIHR5cGUpXFxuLS1cXG5hcmNoL2FybTY0L2t2bS9tbXUuYy0xMDA3LVxcbmFyY2gvYXJtNjQva3ZtL21tdS5jOjEwMDg6XFx0cGd0ID0ga3phbGxvY19vYmooKnBndCwgR0ZQX0tFUk5FTF9BQ0NPVU5UKTtcXG5hcmNoL2FybTY0L2t2bS9tbXUuYy0xMDA5LVxcdGlmICghcGd0KVxcbi0tXFxuYXJjaC9hcm02NC9rdm0vbW11LmM9MTE4MD1pbnQgdG9wdXBfaHlwX21lbWNhY2hlKHN0cnVjdCBrdm1faHlwX21lbWNhY2hlICptYywgdW5zaWduZWQgbG9uZyBtaW5fcGFnZXMpXFxuLS1cXG5hcmNoL2FybTY0L2t2bS9tbXUuYy0xMTg1LVxcdGlmICghbWMtXFx1MDAzZW1hcHBpbmcpIHtcXG5hcmNoL2FybTY0L2t2bS9tbXUuYzoxMTg2OlxcdFxcdG1jLVxcdTAwM2VtYXBwaW5nID0ga3phbGxvY19vYmooc3RydWN0IHBrdm1fbWFwcGluZyxcXG5hcmNoL2FybTY0L2t2bS9tbXUuYy0xMTg3LVxcdFxcdFxcdFxcdFxcdCAgR0ZQX0tFUk5FTF9BQ0NPVU5UKTtcXG4tLVxcbmFyY2gvYXJtNjQva3ZtL21tdS5jPTI1MTA9aW50IF9faW5pdCBrdm1fbW11X2luaXQodTMyIGh5cF92YV9iaXRzKVxcbi0tXFxuYXJjaC9hcm02NC9rdm0vbW11LmMtMjU0My1cXG5hcmNoL2FybTY0L2t2bS9tbXUuYzoyNTQ0OlxcdGh5cF9wZ3RhYmxlID0ga3phbGxvY19vYmooKmh5cF9wZ3RhYmxlKTtcXG5hcmNoL2FybTY0L2t2bS9tbXUuYy0yNTQ1LVxcdGlmICghaHlwX3BndGFibGUpIHtcXG4tLVxcbmFyY2gvYXJtNjQva3ZtL25lc3RlZC5jPTEzMjg9aW50IGt2bV92Y3B1X2FsbG9jYXRlX3ZuY3JfdGxiKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcXG4tLVxcbmFyY2gvYXJtNjQva3ZtL25lc3RlZC5jLTEzMzMtXFx0aWYgKCF2Y3B1LVxcdTAwM2VhcmNoLnZuY3JfdGxiKSB7XFxuYXJjaC9hcm02NC9rdm0vbmVzdGVkLmM6MTMzNDpcXHRcXHRzdHJ1Y3Qgdm5jcl90bGIgKnZ0ID0ga3phbGxvY19vYmooKnZjcHUtXFx1MDAzZWFyY2gudm5jcl90bGIsXFxuYXJjaC9hcm02NC9rdm0vbmVzdGVkLmMtMTMzNS1cXHRcXHRcXHRcXHRcXHRcXHQgIEdGUF9LRVJORUxfQUNDT1VOVCk7XFxuLS1cXG5hcmNoL2FybTY0L2t2bS9uZXN0ZWQuYz0xNzkzPWludCBrdm1faW5pdF9udl9zeXNyZWdzKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcXG4tLVxcbmFyY2gvYXJtNjQva3ZtL25lc3RlZC5jLTE4MDItXFxuYXJjaC9hcm02NC9rdm0vbmVzdGVkLmM6MTgwMzpcXHRrdm0tXFx1MDAzZWFyY2guc3lzcmVnX21hc2tzID0ga3phbGxvY19vYmooKihrdm0tXFx1MDAzZWFyY2guc3lzcmVnX21hc2tzKSxcXG5hcmNoL2FybTY0L2t2bS9uZXN0ZWQuYy0xODA0LVxcdFxcdFxcdFxcdFxcdCAgICAgR0ZQX0tFUk5FTF9BQ0NPVU5UKTtcXG4tLVxcbmFyY2gvYXJtNjQva3ZtL3B0ZHVtcC5jPTExNj1zdGF0aWMgc3RydWN0IGt2bV9wdGR1bXBfZ3Vlc3Rfc3RhdGUgKmt2bV9wdGR1bXBfcGFyc2VyX2NyZWF0ZShzdHJ1Y3Qga3ZtX3MyX21tdSAqbW11KVxcbi0tXFxuYXJjaC9hcm02NC9rdm0vcHRkdW1wLmMtMTIxLVxcbmFyY2gvYXJtNjQva3ZtL3B0ZHVtcC5jOjEyMjpcXHRzdCA9IGt6YWxsb2Nfb2JqKHN0cnVjdCBrdm1fcHRkdW1wX2d1ZXN0X3N0YXRlLCBHRlBfS0VSTkVMX0FDQ09VTlQpO1xcbmFyY2gvYXJtNjQva3ZtL3B0ZHVtcC5jLTEyMy1cXHRpZiAoIXN0KVxcbi0tXFxuYXJjaC9hcm02NC9rdm0vdmdpYy92Z2ljLWluaXQuYz0yMDc9c3RhdGljIGludCBrdm1fdmdpY19kaXN0X2luaXQoc3RydWN0IGt2bSAqa3ZtLCB1bnNpZ25lZCBpbnQgbnJfc3BpcylcXG4tLVxcbmFyY2gvYXJtNjQva3ZtL3ZnaWMvdmdpYy1pbml0LmMtMjEzLVxcdGRpc3QtXFx1MDAzZWFjdGl2ZV9zcGlzID0gKGF0b21pY190KUFUT01JQ19JTklUKDApO1xcbmFyY2gvYXJtNjQva3ZtL3ZnaWMvdmdpYy1pbml0LmM6MjE0OlxcdGRpc3QtXFx1MDAzZXNwaXMgPSBremFsbG9jX29ianMoc3RydWN0IHZnaWNfaXJxLCBucl9zcGlzLCBHRlBfS0VSTkVMX0FDQ09VTlQpO1xcbmFyY2gvYXJtNjQva3ZtL3ZnaWMvdmdpYy1pbml0LmMtMjE1LVxcdGlmICghZGlzdC1cXHUwMDNlc3BpcylcXG4tLVxcbmFyY2gvYXJtNjQva3ZtL3ZnaWMvdmdpYy1pbml0LmM9MzE2PXN0YXRpYyBpbnQgdmdpY19hbGxvY2F0ZV9wcml2YXRlX2lycXNfbG9ja2VkKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdTMyIHR5cGUpXFxuLS1cXG5hcmNoL2FybTY0L2t2bS92Z2ljL3ZnaWMtaW5pdC5jLTMzMS1cXG5hcmNoL2FybTY0L2t2bS92Z2ljL3ZnaWMtaW5pdC5jOjMzMjpcXHR2Z2ljX2NwdS1cXHUwMDNlcHJpdmF0ZV9pcnFzID0ga3phbGxvY19vYmpzKHN0cnVjdCB2Z2ljX2lycSxcXG5hcmNoL2FybTY0L2t2bS92Z2ljL3ZnaWMtaW5pdC5jLTMzMy1cXHRcXHRcXHRcXHRcXHQgICAgICBudW1fcHJpdmF0ZV9pcnFzLFxcbi0tXFxuYXJjaC9hcm02NC9rdm0vdmdpYy92Z2ljLWlycWZkLmM9MTQyPWludCBrdm1fdmdpY19zZXR1cF9kZWZhdWx0X2lycV9yb3V0aW5nKHN0cnVjdCBrdm0gKmt2bSlcXG4tLVxcbmFyY2gvYXJtNjQva3ZtL3ZnaWMvdmdpYy1pcnFmZC5jLTE0OC1cXG5hcmNoL2FybTY0L2t2bS92Z2ljL3ZnaWMtaXJxZmQuYzoxNDk6XFx0ZW50cmllcyA9IGt6YWxsb2Nfb2JqcygqZW50cmllcywgbnIsIEdGUF9LRVJORUxfQUNDT1VOVCk7XFxuYXJjaC9hcm02NC9rdm0vdmdpYy92Z2ljLWlycWZkLmMtMTUwLVxcdGlmICghZW50cmllcylcXG4tLVxcbmFyY2gvYXJtNjQva3ZtL3ZnaWMvdmdpYy1pdHMuYz03Nj1zdGF0aWMgc3RydWN0IHZnaWNfaXJxICp2Z2ljX2FkZF9scGkoc3RydWN0IGt2bSAqa3ZtLCB1MzIgaW50aWQsXFxuLS1cXG5hcmNoL2FybTY0L2t2bS92Z2ljL3ZnaWMtaXRzLmMtODctXFxuYXJjaC9hcm02NC9rdm0vdmdpYy92Z2ljLWl0cy5jOjg4OlxcdGlycSA9IGt6YWxsb2Nfb2JqKHN0cnVjdCB2Z2ljX2lycSwgR0ZQX0tFUk5FTF9BQ0NPVU5UKTtcXG5hcmNoL2FybTY0L2t2bS92Z2ljL3ZnaWMtaXRzLmMtODktXFx0aWYgKCFpcnEpXFxuLS1cXG5hcmNoL2FybTY0L2t2bS92Z2ljL3ZnaWMtaXRzLmM9OTcxPXN0YXRpYyBpbnQgdmdpY19pdHNfYWxsb2NfY29sbGVjdGlvbihzdHJ1Y3QgdmdpY19pdHMgKml0cyxcXG4tLVxcbmFyY2gvYXJtNjQva3ZtL3ZnaWMvdmdpYy1pdHMuYy05NzYtXFxuYXJjaC9hcm02NC9rdm0vdmdpYy92Z2ljLWl0cy5jOjk3NzpcXHRjb2xsZWN0aW9uID0ga3phbGxvY19vYmooKmNvbGxlY3Rpb24sIEdGUF9LRVJORUxfQUNDT1VOVCk7XFxuYXJjaC9hcm02NC9rdm0vdmdpYy92Z2ljLWl0cy5jLTk3OC1cXHRpZiAoIWNvbGxlY3Rpb24pXFxuLS1cXG5hcmNoL2FybTY0L2t2bS92Z2ljL3ZnaWMtaXRzLmM9MTAxNT1zdGF0aWMgc3RydWN0IGl0c19pdGUgKnZnaWNfaXRzX2FsbG9jX2l0ZShzdHJ1Y3QgaXRzX2RldmljZSAqZGV2aWNlLFxcbi0tXFxuYXJjaC9hcm02NC9rdm0vdmdpYy92Z2ljLWl0cy5jLTEwMjAtXFxuYXJjaC9hcm02NC9rdm0vdmdpYy92Z2ljLWl0cy5jOjEwMjE6XFx0aXRlID0ga3phbGxvY19vYmooKml0ZSwgR0ZQX0tFUk5FTF9BQ0NPVU5UKTtcXG5hcmNoL2FybTY0L2t2bS92Z2ljL3ZnaWMtaXRzLmMtMTAyMi1cXHRpZiAoIWl0ZSlcXG4tLVxcbmFyY2gvYXJtNjQva3ZtL3ZnaWMvdmdpYy1pdHMuYz0xMTQyPXN0YXRpYyBzdHJ1Y3QgaXRzX2RldmljZSAqdmdpY19pdHNfYWxsb2NfZGV2aWNlKHN0cnVjdCB2Z2ljX2l0cyAqaXRzLFxcbi0tXFxuYXJjaC9hcm02NC9rdm0vdmdpYy92Z2ljLWl0cy5jLTExNDctXFxuYXJjaC9hcm02NC9rdm0vdmdpYy92Z2ljLWl0cy5jOjExNDg6XFx0ZGV2aWNlID0ga3phbGxvY19vYmooKmRldmljZSwgR0ZQX0tFUk5FTF9BQ0NPVU5UKTtcXG5hcmNoL2FybTY0L2t2bS92Z2ljL3ZnaWMtaXRzLmMtMTE0OS1cXHRpZiAoIWRldmljZSlcXG4tLVxcbmFyY2gvYXJtNjQva3ZtL3ZnaWMvdmdpYy1pdHMuYz0xODU1PXN0YXRpYyBpbnQgdmdpY19pdHNfY3JlYXRlKHN0cnVjdCBrdm1fZGV2aWNlICpkZXYsIHUzMiB0eXBlKVxcbi0tXFxuYXJjaC9hcm02NC9rdm0vdmdpYy92Z2ljLWl0cy5jLTE4NjItXFxuYXJjaC9hcm02NC9rdm0vdmdpYy92Z2ljLWl0cy5jOjE4NjM6XFx0aXRzID0ga3phbGxvY19vYmooc3RydWN0IHZnaWNfaXRzLCBHRlBfS0VSTkVMX0FDQ09VTlQpO1xcbmFyY2gvYXJtNjQva3ZtL3ZnaWMvdmdpYy1pdHMuYy0xODY0LVxcdGlmICghaXRzKVxcbi0tXFxuYXJjaC9hcm02NC9rdm0vdmdpYy92Z2ljLW1taW8tdjMuYz04ODY9c3RhdGljIGludCB2Z2ljX3YzX2FsbG9jX3JlZGlzdF9yZWdpb24oc3RydWN0IGt2bSAqa3ZtLCB1aW50MzJfdCBpbmRleCxcXG4tLVxcbmFyY2gvYXJtNjQva3ZtL3ZnaWMvdmdpYy1tbWlvLXYzLmMtOTMxLVxcbmFyY2gvYXJtNjQva3ZtL3ZnaWMvdmdpYy1tbWlvLXYzLmM6OTMyOlxcdHJkcmVnID0ga3phbGxvY19vYmooKnJkcmVnLCBHRlBfS0VSTkVMX0FDQ09VTlQpO1xcbmFyY2gvYXJtNjQva3ZtL3ZnaWMvdmdpYy1tbWlvLXYzLmMtOTMzLVxcdGlmICghcmRyZWcpXFxuLS1cXG5hcmNoL2FybTY0L2t2bS92Z2ljL3ZnaWMtdjQuYz0yNDI9aW50IHZnaWNfdjRfaW5pdChzdHJ1Y3Qga3ZtICprdm0pXFxuLS1cXG5hcmNoL2FybTY0L2t2bS92Z2ljL3ZnaWMtdjQuYy0yNTgtXFxuYXJjaC9hcm02NC9rdm0vdmdpYy92Z2ljLXY0LmM6MjU5OlxcdGRpc3QtXFx1MDAzZWl0c192bS52cGVzID0ga3phbGxvY19vYmpzKCpkaXN0LVxcdTAwM2VpdHNfdm0udnBlcywgbnJfdmNwdXMsXFxuYXJjaC9hcm02NC9rdm0vdmdpYy92Z2ljLXY0LmMtMjYwLVxcdFxcdFxcdFxcdFxcdCBHRlBfS0VSTkVMX0FDQ09VTlQpO1xcbi0tXFxuYXJjaC9hcm02NC9uZXQvYnBmX2ppdF9jb21wLmM9MjA4MD1zdHJ1Y3QgYnBmX3Byb2cgKmJwZl9pbnRfaml0X2NvbXBpbGUoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9wcm9nICpwcm9nKVxcbi0tXFxuYXJjaC9hcm02NC9uZXQvYnBmX2ppdF9jb21wLmMtMjEwMS1cXHRpZiAoIWppdF9kYXRhKSB7XFxuYXJjaC9hcm02NC9uZXQvYnBmX2ppdF9jb21wLmM6MjEwMjpcXHRcXHRqaXRfZGF0YSA9IGt6YWxsb2Nfb2JqKCpqaXRfZGF0YSk7XFxuYXJjaC9hcm02NC9uZXQvYnBmX2ppdF9jb21wLmMtMjEwMy1cXHRcXHRpZiAoIWppdF9kYXRhKVxcbi0tXFxuYXJjaC9jc2t5L2tlcm5lbC92ZHNvLmM9MTc9c3RhdGljIGludCBfX2luaXQgdmRzb19pbml0KHZvaWQpXFxuLS1cXG5hcmNoL2Nza3kva2VybmVsL3Zkc28uYy0yMi1cXHR2ZHNvX3BhZ2VsaXN0ID1cXG5hcmNoL2Nza3kva2VybmVsL3Zkc28uYzoyMzpcXHRcXHRremFsbG9jX29ianMoc3RydWN0IHBhZ2UgKiwgdmRzb19wYWdlcyk7XFxuYXJjaC9jc2t5L2tlcm5lbC92ZHNvLmMtMjQtXFx0aWYgKHVubGlrZWx5KHZkc29fcGFnZWxpc3QgPT0gTlVMTCkpIHtcXG4tLVxcbmFyY2gvbG9vbmdhcmNoL2tlcm5lbC9zZXR1cC5jPTQ2Nj1zdGF0aWMgaW50IF9faW5pdCBhZGRfbGVnYWN5X2lzYV9pbyhzdHJ1Y3QgZndub2RlX2hhbmRsZSAqZndub2RlLFxcbi0tXFxuYXJjaC9sb29uZ2FyY2gva2VybmVsL3NldHVwLmMtNDcyLVxcbmFyY2gvbG9vbmdhcmNoL2tlcm5lbC9zZXR1cC5jOjQ3MzpcXHRyYW5nZSA9IGt6YWxsb2Nfb2JqKCpyYW5nZSwgR0ZQX0FUT01JQyk7XFxuYXJjaC9sb29uZ2FyY2gva2VybmVsL3NldHVwLmMtNDc0LVxcdGlmICghcmFuZ2UpXFxuLS1cXG5hcmNoL2xvb25nYXJjaC9rZXJuZWwvdmRzby5jPTQ1PXN0YXRpYyBpbnQgX19pbml0IGluaXRfdmRzbyh2b2lkKVxcbi0tXFxuYXJjaC9sb29uZ2FyY2gva2VybmVsL3Zkc28uYy01NS1cXHR2ZHNvX2luZm8uY29kZV9tYXBwaW5nLnBhZ2VzID1cXG5hcmNoL2xvb25nYXJjaC9rZXJuZWwvdmRzby5jOjU2OlxcdFxcdGt6YWxsb2Nfb2JqcyhzdHJ1Y3QgcGFnZSAqLCB2ZHNvX2luZm8uc2l6ZSAvIFBBR0VfU0laRSk7XFxuYXJjaC9sb29uZ2FyY2gva2VybmVsL3Zkc28uYy01Ny1cXG4tLVxcbmFyY2gvbG9vbmdhcmNoL2t2bS9pbnRjL2Vpb2ludGMuYz02MTQ9c3RhdGljIGludCBrdm1fZWlvaW50Y19jcmVhdGUoc3RydWN0IGt2bV9kZXZpY2UgKmRldiwgdTMyIHR5cGUpXFxuLS1cXG5hcmNoL2xvb25nYXJjaC9rdm0vaW50Yy9laW9pbnRjLmMtNjI0LVxcbmFyY2gvbG9vbmdhcmNoL2t2bS9pbnRjL2Vpb2ludGMuYzo2MjU6XFx0cyA9IGt6YWxsb2Nfb2JqKHN0cnVjdCBsb29uZ2FyY2hfZWlvaW50Yyk7XFxuYXJjaC9sb29uZ2FyY2gva3ZtL2ludGMvZWlvaW50Yy5jLTYyNi1cXHRpZiAoIXMpXFxuLS1cXG5hcmNoL2xvb25nYXJjaC9rdm0vaW50Yy9pcGkuYz0zOTQ9c3RhdGljIGludCBrdm1faXBpX2NyZWF0ZShzdHJ1Y3Qga3ZtX2RldmljZSAqZGV2LCB1MzIgdHlwZSlcXG4tLVxcbmFyY2gvbG9vbmdhcmNoL2t2bS9pbnRjL2lwaS5jLTQxMS1cXG5hcmNoL2xvb25nYXJjaC9rdm0vaW50Yy9pcGkuYzo0MTI6XFx0cyA9IGt6YWxsb2Nfb2JqKHN0cnVjdCBsb29uZ2FyY2hfaXBpKTtcXG5hcmNoL2xvb25nYXJjaC9rdm0vaW50Yy9pcGkuYy00MTMtXFx0aWYgKCFzKVxcblxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMVQxNDowMzozMS4xNzAxNTAyMzFaIiwiU2VxIjoxNSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MjU2NjQ2MTg4NjUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHlzaXMgb2YgSW5pdGlhbGl6YXRpb24gaW4gdGhlIHpsMzA3M3ggRHJpdmVyKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duIHN5c3RlbWF0aWNhbGx5LiBJdCBzZWVtcyBsaWtlIHRoZSBjb3JlIGNvbmNlcm4gaXMgYWJvdXQgZW5zdXJpbmcgdmFyaWFibGVzIGFuZCBkYXRhIHN0cnVjdHVyZXMgYXJlIHByb3Blcmx5IGluaXRpYWxpemVkIGJlZm9yZSB1c2UsIGVzcGVjaWFsbHkgd2hlbiBkZWFsaW5nIHdpdGggUFRQIChQcmVjaXNpb24gVGltZSBQcm90b2NvbCkgb3BlcmF0aW9ucyB3aXRoaW4gdGhpcyBgemwzMDczeGAgZHJpdmVyLiBJJ20gZm9jdXNpbmcgb24gcG90ZW50aWFsIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzLlxuXG5GaXJzdCwgSSBzZWUgdGhlIHNoaWZ0IHRvIHVzaW5nIGBremFsbG9jX29iamAgYW5kIGBremFsbG9jX29ianNgIGtlcm5lbCBtYWNyb3MuIFRoYXQncyBnb29kOyB0aGVzZSBhcmUgbm93IHRoZSBwcmVmZXJyZWQgbWV0aG9kcyB0byBhbGxvY2F0ZSBhbmQgemVybyBtZW1vcnkuIFNwZWNpZmljYWxseSwgYWxsb2NhdGluZyBhbmQgemVyb2luZyB0aGUgYHpsZHBsbGAgc3RydWN0IHdpdGggYGt6YWxsb2Nfb2JqKCp6bGRwbGwpYCBpcyBhIHNvbGlkIHN0YXJ0IGZvciBhdm9pZGluZyB1bmluaXRpYWxpemVkIHZhbHVlcy5cblxuTW92aW5nIHRocm91Z2ggdGhlIGNvZGUsIEkgZXhhbWluZWQgdGhlIGB6bDMwNzN4X2RwbGxfcHRwX3JlZ2lzdGVyYCBmdW5jdGlvbiBhbmQgdGhlIHVzYWdlIG9mIGB6bGRwbGwtXHUwMDNlcHRwX2luZm9gLiBUaGlzIHN0cnVjdCBnZXRzIGluaXRpYWxpemVkIGJ5IGEgY29weSBmcm9tIGEgYHN0YXRpYyBjb25zdGAgc3RydWN0dXJlLCBgemwzMDczeF9kcGxsX3B0cF9jbG9ja19pbmZvYC4gQmVjYXVzZSBpdCdzIGBzdGF0aWMgY29uc3RgLCB0aGUgY29tcGlsZXIgaGFuZGxlcyB0aGUgemVyby1pbml0aWFsaXphdGlvbiBvZiBhbGwgdW5pbml0aWFsaXplZCBmaWVsZHMsIGVuc3VyaW5nIHRoYXQgdGhlIFBUUCBpbmZvcm1hdGlvbiBpcyBmdWxseSBpbml0aWFsaXplZCBiZWZvcmUgdXNlLiBUaGUgYHNucHJpbnRmYCBmdW5jdGlvbiB3aWxsIHdyaXRlIHRvIHRoZSBgbmFtZWAgZmllbGQsIGJ1dCBzaW5jZSB0aGUgcmVzdCBpcyBhbHJlYWR5IHplcm9lZCwgdGhlcmUgYXJlIG5vIHVuaW5pdGlhbGl6ZWQgcmVhZHMuXG5cblRoZW4gSSBjb25zaWRlcmVkIGB6bDMwNzN4X2NoYW5fdG9kX3JlYWRgLiBUaGUgYHRzYCBzdHJ1Y3QsIHVzZWQgdG8gc3RvcmUgdGhlIHJlYWQgdGltZSwgc2VlbXMgdG8gYmUgZnVsbHkgaW5pdGlhbGl6ZWQgb24gYSBzdWNjZXNzZnVsIHJldHVybi4gSW4gdGhlIGV2ZW50IG9mIGFuIGVycm9yLCBpdCBpcyByZXR1cm5lZCwgYW5kIHNpbmNlIHRoZSBQVFAgc3Vic3lzdGVtIHdpbGwgbm90IHVzZSBpdCwgdGhlcmUgYXJlIG5vIHVuaW5pdGlhbGl6ZWQgcmVhZHMuXG5cbkluIGB6bDMwNzN4X2RwbGxfcHRwX2FkanRpbWVfcGhhc2Vfc3RlcGAgSSBzYXcgdGhhdCB0aGUgYHN5bnRoX21hc2tgIGFycmF5IGlzIGluaXRpYWxpemVkIHRvIHplcm8sIHdoaWNoIGlzIGEgZ29vZCBwcmFjdGljZS5cblxuTmV4dCwgSSBsb29rZWQgYXQgaG93IGB6bDMwNzN4X2RwbGxfcHRwX2FkanRpbWVgIGhhbmRsZXMgYHRzYC4gVGhlIHJlbGV2YW50IGNvZGUgaW5kaWNhdGVzIHRoYXQgYHRzYCBpcyBmdWxseSBpbml0aWFsaXplZCBiZWZvcmUgaXQncyBwYXNzZWQgb24gdG8gb3RoZXIgZnVuY3Rpb25zLlxuXG5gemwzMDczeF9jaGFuX3RvZF9hZGp1c3RgIGNhbGxzIGB6bDMwNzN4X2NoYW5fdG9kX3JlYWRgLCBhbmQgaXQgYXBwZWFycyB0aGF0IGB0c19uZXh0YCBhbmQgYHRzX2N1cmAgd2lsbCBhbHNvIGJlIGZ1bGx5IGluaXRpYWxpemVkIGR1ZSB0byB0aGUgcmV0dXJuIHZhbHVlIG9mIGB6bDMwNzN4X2NoYW5fdG9kX3JlYWRgIGluIGNhc2Ugb2Ygc3VjY2Vzcy5cblxuRm9yIGB6bDMwNzN4X2NoYW5fdG9kX3dyaXRlYCwgSSBjb25maXJtZWQgdGhhdCB0aGUgZmllbGRzIG9mIHRoZSBpbnB1dCBgdHNgIGFyZSBwcm9wZXJseSBwb3B1bGF0ZWQgYmVmb3JlIGJlaW5nIHVzZWQuXG5cblRoZW4gSSBhbmFseXplZCBgemwzMDczeF9jaGFuX2RmX29mZnNldF9zZXRgLCBgemwzMDczeF9jaGFuX3RpZV93cml0ZWAsIGB6bDMwNzN4X2NoYW5fcGhhc2Vfc3RlcGAsIGFuZCBgemwzMDczeF9kZXZfc3RhdGVfZmV0Y2hgLiBJdCBzZWVtcyB0aGF0IHRoZXNlIGZ1bmN0aW9ucyBhbGwgdXNlIGluaXRpYWxpemVkIGRhdGEuXG5cbkZpbmFsbHksIHRoZSBhbmFseXNpcyBvZiBgemwzMDczeF9kcGxsX3B0cF9hZGpmaW5lYCBhbmQgYHpsMzA3M3hfZHBsbF9wdHBfYWRqcGhhc2VgIGRpZCBub3QgcHJlc2VudCBhbnkgb2J2aW91cyBjYXNlcyBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZS5cblxuSW4gc3VtbWFyeSwgdGhlcmUgaXMgbm8gZXZpZGVuY2Ugb2YgdW5pbml0aWFsaXplZCByZWFkcyBiZWluZyBpbnRyb2R1Y2VkIGJ5IHRoaXMgcGF0Y2guIFRoZSBkcml2ZXIgdXNlcyBhcHByb3ByaWF0ZSBpbml0aWFsaXphdGlvbiB0ZWNobmlxdWVzLCBsaWtlIGBremFsbG9jX29iamAsIGFuZCB0aGUgUFRQIHN1YnN5c3RlbSBzZWVtcyB0byBoYW5kbGUgZGF0YSB0cmFuc2ZlciB0byB1c2Vyc3BhY2Ugc2FmZWx5LiBUaGVyZWZvcmUsIEknbSBjb25maWRlbnQgaW4gc2V0dGluZyBgTmVlZHNLTVNBTj1mYWxzZWAuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjMxOTE3LCJPdXRwdXRUb2tlbnMiOjIyNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI2OTksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTFUMTQ6MDM6NTYuODM0NzcxMTk2WiIsIlNlcSI6MTYsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTgzMDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRzIFBUUCBjbG9jayBzdXBwb3J0IHRvIHRoZSBNaWNyb2NoaXAgQXp1cml0ZSBEUExML1BUUC9TeW5jRSBkZXZpY2VzIGRyaXZlci4gSXQgaW50cm9kdWNlcyBmdW5jdGlvbnMgdG8gcmVhZC93cml0ZSBUaW1lIG9mIERheSAoVG9EKSwgYWRqdXN0IHBoYXNlLCBhZGp1c3QgZnJlcXVlbmN5LCBhbmQgcmVnaXN0ZXIgYSBQVFAgY2xvY2sgZGV2aWNlLiBUaGUgZHJpdmVyIGludGVyYWN0cyB3aXRoIHRoZSBQVFAgc3Vic3lzdGVtIGJ5IHByb3ZpZGluZyBjYWxsYmFja3MgKGBnZXR0aW1leDY0YCwgYHNldHRpbWU2NGAsIGBhZGp0aW1lYCwgYGFkamZpbmVgLCBgYWRqcGhhc2VgKS4gQWxsIHN0cnVjdHVyZXMgYWxsb2NhdGVkIGR5bmFtaWNhbGx5IGFyZSB6ZXJvLWluaXRpYWxpemVkIHVzaW5nIGBremFsbG9jX29iamAuIFRoZSBgcHRwX2Nsb2NrX2luZm9gIHN0cnVjdHVyZSBpcyBjb3BpZWQgZnJvbSBhIHN0YXRpYyBjb25zdCB0ZW1wbGF0ZSwgZW5zdXJpbmcgYWxsIHVuaW5pdGlhbGl6ZWQgZmllbGRzIGFyZSB6ZXJvZWQgYnkgdGhlIGNvbXBpbGVyIGJlZm9yZSBgc25wcmludGZgIG1vZGlmaWVzIHRoZSBgbmFtZWAgZmllbGQuIFRoZSBgc3RydWN0IHRpbWVzcGVjNjRgIHBvcHVsYXRlZCBieSB0aGUgZHJpdmVyIGlzIGZ1bGx5IGluaXRpYWxpemVkIG9uIHN1Y2Nlc3MsIGFuZCBlcnJvcnMgYXJlIHByb3Blcmx5IHByb3BhZ2F0ZWQgdG8gdGhlIFBUUCBzdWJzeXN0ZW0sIHByZXZlbnRpbmcgdW5pbml0aWFsaXplZCBkYXRhIGZyb20gYmVpbmcgdXNlZCBvciBjb3BpZWQgdG8gdXNlcnNwYWNlLiBObyBuZXcgdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3Mgb3IgaW5mby1sZWFrcyBhcmUgaW50cm9kdWNlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRzIFBUUCBjbG9jayBzdXBwb3J0IHRvIHRoZSBNaWNyb2NoaXAgQXp1cml0ZSBEUExML1BUUC9TeW5jRSBkZXZpY2VzIGRyaXZlci4gSXQgaW50cm9kdWNlcyBmdW5jdGlvbnMgdG8gcmVhZC93cml0ZSBUaW1lIG9mIERheSAoVG9EKSwgYWRqdXN0IHBoYXNlLCBhZGp1c3QgZnJlcXVlbmN5LCBhbmQgcmVnaXN0ZXIgYSBQVFAgY2xvY2sgZGV2aWNlLiBUaGUgZHJpdmVyIGludGVyYWN0cyB3aXRoIHRoZSBQVFAgc3Vic3lzdGVtIGJ5IHByb3ZpZGluZyBjYWxsYmFja3MgKGBnZXR0aW1leDY0YCwgYHNldHRpbWU2NGAsIGBhZGp0aW1lYCwgYGFkamZpbmVgLCBgYWRqcGhhc2VgKS4gQWxsIHN0cnVjdHVyZXMgYWxsb2NhdGVkIGR5bmFtaWNhbGx5IGFyZSB6ZXJvLWluaXRpYWxpemVkIHVzaW5nIGBremFsbG9jX29iamAuIFRoZSBgcHRwX2Nsb2NrX2luZm9gIHN0cnVjdHVyZSBpcyBjb3BpZWQgZnJvbSBhIHN0YXRpYyBjb25zdCB0ZW1wbGF0ZSwgZW5zdXJpbmcgYWxsIHVuaW5pdGlhbGl6ZWQgZmllbGRzIGFyZSB6ZXJvZWQgYnkgdGhlIGNvbXBpbGVyIGJlZm9yZSBgc25wcmludGZgIG1vZGlmaWVzIHRoZSBgbmFtZWAgZmllbGQuIFRoZSBgc3RydWN0IHRpbWVzcGVjNjRgIHBvcHVsYXRlZCBieSB0aGUgZHJpdmVyIGlzIGZ1bGx5IGluaXRpYWxpemVkIG9uIHN1Y2Nlc3MsIGFuZCBlcnJvcnMgYXJlIHByb3Blcmx5IHByb3BhZ2F0ZWQgdG8gdGhlIFBUUCBzdWJzeXN0ZW0sIHByZXZlbnRpbmcgdW5pbml0aWFsaXplZCBkYXRhIGZyb20gYmVpbmcgdXNlZCBvciBjb3BpZWQgdG8gdXNlcnNwYWNlLiBObyBuZXcgdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3Mgb3IgaW5mby1sZWFrcyBhcmUgaW50cm9kdWNlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+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-workflowhft6t[0].run-triage(0) Phase: Succeeded StartedAt: 2026-08-11 14:00:26 +0000 UTC FinishedAt: 2026-08-11 14:03:58 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "net-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git", "commit_hash": "d67e5dbda22604d0fcde32fce58c65f88676e676", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "ZL3073X_I2C", "ZL3073X_SPI", "PTP_1588_CLOCK" ], "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": "d67e5dbda22604d0fcde32fce58c65f88676e676", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "ZL3073X_I2C", "ZL3073X_SPI", "PTP_1588_CLOCK" ], "series_id": "e78c7db7-e9fa-4fc7-b83b-1cbfdd0ee42b" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "zl3073x_chan_tod_read", "zl3073x_chan_tod_write", "zl3073x_chan_tod_adjust", "zl3073x_chan_df_offset_set", "zl3073x_chan_tie_write", "zl3073x_chan_phase_step", "zl3073x_dpll_ptp_gettimex64", "zl3073x_dpll_ptp_settime64", "zl3073x_dpll_ptp_adjtime", "zl3073x_dpll_ptp_adjfine", "zl3073x_dpll_ptp_adjphase" ], "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+CgkJCTx0ZD4yMDI2LzA4LzExIDE0OjAyPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1pMMzA3M1hfSTJDJiMzNDssCiAgICAmIzM0O1pMMzA3M1hfU1BJJiMzNDssCiAgICAmIzM0O1BUUF8xNTg4X0NMT0NLJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7emwzMDczeF9jaGFuX3RvZF9yZWFkJiMzNDssCiAgICAmIzM0O3psMzA3M3hfY2hhbl90b2Rfd3JpdGUmIzM0OywKICAgICYjMzQ7emwzMDczeF9jaGFuX3RvZF9hZGp1c3QmIzM0OywKICAgICYjMzQ7emwzMDczeF9jaGFuX2RmX29mZnNldF9zZXQmIzM0OywKICAgICYjMzQ7emwzMDczeF9jaGFuX3RpZV93cml0ZSYjMzQ7LAogICAgJiMzNDt6bDMwNzN4X2NoYW5fcGhhc2Vfc3RlcCYjMzQ7LAogICAgJiMzNDt6bDMwNzN4X2RwbGxfcHRwX2dldHRpbWV4NjQmIzM0OywKICAgICYjMzQ7emwzMDczeF9kcGxsX3B0cF9zZXR0aW1lNjQmIzM0OywKICAgICYjMzQ7emwzMDczeF9kcGxsX3B0cF9hZGp0aW1lJiMzNDssCiAgICAmIzM0O3psMzA3M3hfZHBsbF9wdHBfYWRqZmluZSYjMzQ7LAogICAgJiMzNDt6bDMwNzN4X2RwbGxfcHRwX2FkanBoYXNlJiMzNDsKICBdLAogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcyBQVFAgY2xvY2sgc3VwcG9ydCB0byB0aGUgTWljcm9jaGlwIEF6dXJpdGUgRFBMTC9QVFAvU3luY0UgZGV2aWNlcyBkcml2ZXIuIEl0IGludHJvZHVjZXMgZnVuY3Rpb25zIHRvIHJlYWQvd3JpdGUgVGltZSBvZiBEYXkgKFRvRCksIGFkanVzdCBwaGFzZSwgYWRqdXN0IGZyZXF1ZW5jeSwgYW5kIHJlZ2lzdGVyIGEgUFRQIGNsb2NrIGRldmljZS4gVGhlIGRyaXZlciBpbnRlcmFjdHMgd2l0aCB0aGUgUFRQIHN1YnN5c3RlbSBieSBwcm92aWRpbmcgY2FsbGJhY2tzIChgZ2V0dGltZXg2NGAsIGBzZXR0aW1lNjRgLCBgYWRqdGltZWAsIGBhZGpmaW5lYCwgYGFkanBoYXNlYCkuIEFsbCBzdHJ1Y3R1cmVzIGFsbG9jYXRlZCBkeW5hbWljYWxseSBhcmUgemVyby1pbml0aWFsaXplZCB1c2luZyBga3phbGxvY19vYmpgLiBUaGUgYHB0cF9jbG9ja19pbmZvYCBzdHJ1Y3R1cmUgaXMgY29waWVkIGZyb20gYSBzdGF0aWMgY29uc3QgdGVtcGxhdGUsIGVuc3VyaW5nIGFsbCB1bmluaXRpYWxpemVkIGZpZWxkcyBhcmUgemVyb2VkIGJ5IHRoZSBjb21waWxlciBiZWZvcmUgYHNucHJpbnRmYCBtb2RpZmllcyB0aGUgYG5hbWVgIGZpZWxkLiBUaGUgYHN0cnVjdCB0aW1lc3BlYzY0YCBwb3B1bGF0ZWQgYnkgdGhlIGRyaXZlciBpcyBmdWxseSBpbml0aWFsaXplZCBvbiBzdWNjZXNzLCBhbmQgZXJyb3JzIGFyZSBwcm9wZXJseSBwcm9wYWdhdGVkIHRvIHRoZSBQVFAgc3Vic3lzdGVtLCBwcmV2ZW50aW5nIHVuaW5pdGlhbGl6ZWQgZGF0YSBmcm9tIGJlaW5nIHVzZWQgb3IgY29waWVkIHRvIHVzZXJzcGFjZS4gTm8gbmV3IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzIG9yIGluZm8tbGVha3MgYXJlIGludHJvZHVjZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHMgUFRQIGNsb2NrIHN1cHBvcnQgdG8gdGhlIE1pY3JvY2hpcCBBenVyaXRlIERQTEwgZHJpdmVyICh6bDMwNzN4KS4gSXQgaW1wbGVtZW50cyBQVFAgY2xvY2sgb3BlcmF0aW9ucyBsaWtlIGdldHRpbWV4NjQsIHNldHRpbWU2NCwgYWRqdGltZSwgYWRqZmluZSwgYW5kIGFkanBoYXNlLiBUaGUgZHJpdmVyIGNhbiBiZSBpbnN0YW50aWF0ZWQgdmlhIEkyQyBvciBTUEkgaW4gUUVNVSwgYW5kIHRoZSBQVFAgb3BlcmF0aW9ucyBhcmUgcmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlIHZpYSBQVFAgaW9jdGxzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzExIDE0OjAyPC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgOTU3ZGNmZDY3MWU4YmM1OTc3MTljMTJjYjJiMzAxZDJmNzQ5ZmVkMVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBUdWUgQXVnIDExIDE0OjAyOjIyIDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvZHBsbC96bDMwNzN4L0tjb25maWcgYi9kcml2ZXJzL2RwbGwvemwzMDczeC9LY29uZmlnXG5pbmRleCA1YmJjYTE0MDA1ODEzLi5kYTE3MzFhY2UxNWYwIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9kcGxsL3psMzA3M3gvS2NvbmZpZ1xuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9kcGxsL3psMzA3M3gvS2NvbmZpZ1xuQEAgLTIsNyAmIzQzOzIsNyBAQFxuIFxuIGNvbmZpZyBaTDMwNzNYXG4gXHR0cmlzdGF0ZSBcJiMzNDtNaWNyb2NoaXAgQXp1cml0ZSBEUExML1BUUC9TeW5jRSBkZXZpY2VzXCYjMzQ7IGlmIENPTVBJTEVfVEVTVFxuLVx0ZGVwZW5kcyBvbiBORVRcbiYjNDM7XHRkZXBlbmRzIG9uIE5FVCBcdTAwMjZcdTAwMjYgUFRQXzE1ODhfQ0xPQ0tcbiBcdHNlbGVjdCBEUExMXG4gXHRzZWxlY3QgTkVUX0RFVkxJTktcbiBcdHNlbGVjdCBSRUdNQVBcbkBAIC0xNiw3ICYjNDM7MTYsNyBAQCBjb25maWcgWkwzMDczWFxuIFxuIGNvbmZpZyBaTDMwNzNYX0kyQ1xuIFx0dHJpc3RhdGUgXCYjMzQ7STJDIGJ1cyBpbXBsZW1lbnRhdGlvbiBmb3IgTWljcm9jaGlwIEF6dXJpdGUgZGV2aWNlc1wmIzM0O1xuLVx0ZGVwZW5kcyBvbiBJMkMgXHUwMDI2XHUwMDI2IE5FVFxuJiM0MztcdGRlcGVuZHMgb24gSTJDIFx1MDAyNlx1MDAyNiBORVQgXHUwMDI2XHUwMDI2IFBUUF8xNTg4X0NMT0NLXG4gXHRzZWxlY3QgUkVHTUFQX0kyQ1xuIFx0c2VsZWN0IFpMMzA3M1hcbiBcdGhlbHBcbkBAIC0yOCw3ICYjNDM7MjgsNyBAQCBjb25maWcgWkwzMDczWF9JMkNcbiBcbiBjb25maWcgWkwzMDczWF9TUElcbiBcdHRyaXN0YXRlIFwmIzM0O1NQSSBidXMgaW1wbGVtZW50YXRpb24gZm9yIE1pY3JvY2hpcCBBenVyaXRlIGRldmljZXNcJiMzNDtcbi1cdGRlcGVuZHMgb24gTkVUIFx1MDAyNlx1MDAyNiBTUElcbiYjNDM7XHRkZXBlbmRzIG9uIE5FVCBcdTAwMjZcdTAwMjYgU1BJIFx1MDAyNlx1MDAyNiBQVFBfMTU4OF9DTE9DS1xuIFx0c2VsZWN0IFJFR01BUF9TUElcbiBcdHNlbGVjdCBaTDMwNzNYXG4gXHRoZWxwXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jIGIvZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jXG5pbmRleCA0ZWMyY2Y1M2RhZDQ2Li5iYzZkNzBkMjVkNzkxIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmNcbkBAIC0zLDYgJiM0MzszLDcgQEBcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9jbGVhbnVwLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9kZWxheS5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvZGV2X3ByaW50ay5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L3B0cF9jbG9ja19rZXJuZWwuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3N0cmluZy5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvdHlwZXMuaFx1MDAzZVxuIFxuQEAgLTE2Miw4ICYjNDM7MTYzLDggQEAgaW50IHpsMzA3M3hfY2hhbl9uY29fbW9kZV9zZXQoc3RydWN0IHpsMzA3M3hfZGV2ICp6bGRldiwgdTggaW5kZXgpXG4gICogQHpsZGV2OiBwb2ludGVyIHRvIHpsMzA3M3hfZGV2IHN0cnVjdHVyZVxuICAqIEBpbmRleDogRFBMTCBjaGFubmVsIGluZGV4IHRvIGZldGNoIHN0YXRlIGZvclxuICAqXG4tICogUmVhZHMgdGhlIG1vZGVfcmVmc2VsIHJlZ2lzdGVyIGFuZCByZWZlcmVuY2UgcHJpb3JpdHkgcmVnaXN0ZXJzIGZvclxuLSAqIHRoZSBnaXZlbiBEUExMIGNoYW5uZWwgYW5kIHN0b3JlcyB0aGUgcmF3IHZhbHVlcyBmb3IgbGF0ZXIgdXNlLlxuJiM0MzsgKiBSZWFkcyB0aGUgbW9kZV9yZWZzZWwsIHN0YXR1cyBhbmQgcmVmZXJlbmNlIHByaW9yaXR5IHJlZ2lzdGVycyBmb3JcbiYjNDM7ICogdGhlIGdpdmVuIERQTEwgY2hhbm5lbCBhbmQgc3RvcmVzIHRoZSB2YWx1ZXMgZm9yIGxhdGVyIHVzZS5cbiAgKlxuICAqIFJldHVybjogMCBvbiBzdWNjZXNzLCBcdTAwM2MwIG9uIGVycm9yXG4gICovXG5AQCAtMjM0LDYgJiM0MzsyMzUsMzI2IEBAIGNvbnN0IHN0cnVjdCB6bDMwNzN4X2NoYW4gKnpsMzA3M3hfY2hhbl9zdGF0ZV9nZXQoc3RydWN0IHpsMzA3M3hfZGV2ICp6bGRldixcbiBcdHJldHVybiBcdTAwMjZ6bGRldi1cdTAwM2VjaGFuW2luZGV4XTtcbiB9XG4gXG4mIzQzOy8qKlxuJiM0MzsgKiB6bDMwNzN4X2NoYW5fdG9kX3JlYWR5X3dhaXQgLSB3YWl0IGZvciBUb0Qgc2VtYXBob3JlIHRvIGNsZWFyXG4mIzQzOyAqIEB6bGRldjogcG9pbnRlciB0byB6bDMwNzN4IGRldmljZVxuJiM0MzsgKiBAY2g6IERQTEwgY2hhbm5lbCBpbmRleFxuJiM0MzsgKlxuJiM0MzsgKiBDaGVja3MgdGhlIFRvRCBjb250cm9sIHJlZ2lzdGVyIHNlbWFwaG9yZSBiaXQuIElmIGNsZWFyLCByZXR1cm5zXG4mIzQzOyAqIGltbWVkaWF0ZWx5LiBPdGhlcndpc2UgcG9sbHMgdW50aWwgdGhlIGJpdCBpcyBjbGVhcmVkIGJ5IHRoZSBkZXZpY2UuXG4mIzQzOyAqXG4mIzQzOyAqIFJldHVybjpcbiYjNDM7ICogKiAwXHRcdFx0LSBzdWNjZXNzXG4mIzQzOyAqICogJS1FQlVTWVx0XHQtIHRpbWVvdXRcbiYjNDM7ICogKiAlLUVPUE5PVFNVUFBcdC0gdW5rbm93biBjb21tYW5kIGRldGVjdGVkXG4mIzQzOyAqICogbmVnYXRpdmVcdFx0LSBvdGhlciBlcnJvclxuJiM0MzsgKi9cbiYjNDM7aW50IHpsMzA3M3hfY2hhbl90b2RfcmVhZHlfd2FpdChzdHJ1Y3QgemwzMDczeF9kZXYgKnpsZGV2LCB1OCBjaClcbiYjNDM7e1xuJiM0MztcdHVuc2lnbmVkIGludCB0aW1lb3V0O1xuJiM0MztcdHU4IHRvZF9jdHJsO1xuJiM0MztcdGludCByYztcbiYjNDM7XG4mIzQzO1x0cmMgPSB6bDMwNzN4X3JlYWRfdTgoemxkZXYsIFpMX1JFR19EUExMX1RPRF9DVFJMKGNoKSwgXHUwMDI2dG9kX2N0cmwpO1xuJiM0MztcdGlmIChyYylcbiYjNDM7XHRcdHJldHVybiByYztcbiYjNDM7XG4mIzQzO1x0aWYgKCEodG9kX2N0cmwgXHUwMDI2IFpMX0RQTExfVE9EX0NUUkxfU0VNKSlcbiYjNDM7XHRcdHJldHVybiAwO1xuJiM0MztcbiYjNDM7XHRzd2l0Y2ggKEZJRUxEX0dFVChaTF9EUExMX1RPRF9DVFJMX0NNRCwgdG9kX2N0cmwpKSB7XG4mIzQzO1x0Y2FzZSBaTF9EUExMX1RPRF9DVFJMX0NNRF9XUl9ORVhUXzFIWjpcbiYjNDM7XHRcdHRpbWVvdXQgPSBaTF9QT0xMX1RPRF9XUl9USU1FT1VUX1VTO1xuJiM0MztcdFx0YnJlYWs7XG4mIzQzO1x0Y2FzZSBaTF9EUExMX1RPRF9DVFJMX0NNRF9SRF9DVVJSRU5UOlxuJiM0MztcdGNhc2UgWkxfRFBMTF9UT0RfQ1RSTF9DTURfUkRfTkVYVF8xSFo6XG4mIzQzO1x0XHR0aW1lb3V0ID0gWkxfUE9MTF9UT0RfUkRfVElNRU9VVF9VUztcbiYjNDM7XHRcdGJyZWFrO1xuJiM0MztcdGRlZmF1bHQ6XG4mIzQzO1x0XHRXQVJOX09OKDEpO1xuJiM0MztcdFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0cmMgPSB6bDMwNzN4X3BvbGxfemVyb191OCh6bGRldiwgWkxfUkVHX0RQTExfVE9EX0NUUkwoY2gpLFxuJiM0MztcdFx0XHRcdCAgWkxfRFBMTF9UT0RfQ1RSTF9TRU0sIHRpbWVvdXQpO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gcmMgPT0gLUVUSU1FRE9VVCA/IC1FQlVTWSA6IHJjO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MzsvKipcbiYjNDM7ICogemwzMDczeF9jaGFuX3RvZF9jdHJsIC0gaXNzdWUgVG9EIGNvbW1hbmRcbiYjNDM7ICogQHpsZGV2OiBwb2ludGVyIHRvIHpsMzA3M3ggZGV2aWNlXG4mIzQzOyAqIEBjaDogRFBMTCBjaGFubmVsIGluZGV4XG4mIzQzOyAqIEBjbWQ6IFRvRCBjb21tYW5kIHRvIGV4ZWN1dGVcbiYjNDM7ICpcbiYjNDM7ICogV3JpdGVzIHRoZSBzZW1hcGhvcmUgYW5kIGNvbW1hbmQgdG8gZHBsbF90b2RfY3RybC4gVGhlIGNhbGxlciBtdXN0XG4mIzQzOyAqIGVuc3VyZSB0aGUgZGV2aWNlIGlzIHJlYWR5IChzZW1hcGhvcmUgY2xlYXIpIGJlZm9yZSBjYWxsaW5nIGFuZFxuJiM0MzsgKiBtdXN0IHdhaXQgZm9yIGNvbXBsZXRpb24gaWYgbmVlZGVkLlxuJiM0MzsgKlxuJiM0MzsgKiBSZXR1cm46IDAgb24gc3VjY2VzcywgXHUwMDNjMCBvbiBlcnJvclxuJiM0MzsgKi9cbiYjNDM7c3RhdGljIGludCB6bDMwNzN4X2NoYW5fdG9kX2N0cmwoc3RydWN0IHpsMzA3M3hfZGV2ICp6bGRldiwgdTggY2gsIHU4IGNtZClcbiYjNDM7e1xuJiM0MztcdHJldHVybiB6bDMwNzN4X3dyaXRlX3U4KHpsZGV2LCBaTF9SRUdfRFBMTF9UT0RfQ1RSTChjaCksXG4mIzQzO1x0XHRcdFx0WkxfRFBMTF9UT0RfQ1RSTF9TRU0gfCBjbWQpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MzsvKipcbiYjNDM7ICogemwzMDczeF9jaGFuX3RvZF9yZWFkIC0gcmVhZCBUb0QgcmVnaXN0ZXJzIGFmdGVyIGlzc3VpbmcgYSBjb21tYW5kXG4mIzQzOyAqIEB6bGRldjogcG9pbnRlciB0byB6bDMwNzN4IGRldmljZVxuJiM0MzsgKiBAY2g6IERQTEwgY2hhbm5lbCBpbmRleFxuJiM0MzsgKiBAbmV4dF9oejogaWYgdHJ1ZSwgcmVhZCBwcmVkaWN0ZWQgVG9EIGF0IG5leHQgMSBIejsgb3RoZXJ3aXNlIHJlYWQgY3VycmVudFxuJiM0MzsgKiBAdHM6IHRpbWVzcGVjIHRvIHN0b3JlIHRoZSByZXN1bHRcbiYjNDM7ICogQHN0czogb3B0aW9uYWwgc3lzdGVtIHRpbWVzdGFtcCBwYWlyIGZvciBjcm9zcy10aW1lc3RhbXBpbmdcbiYjNDM7ICpcbiYjNDM7ICogQ29udGV4dDogQ2FsbGVyIG11c3Qgc2VyaWFsaXplIGFsbCB6bDMwNzN4X2NoYW5fdG9kXyogY2FsbHMgZXh0ZXJuYWxseS5cbiYjNDM7ICogUmV0dXJuOiAwIG9uIHN1Y2Nlc3MsIFx1MDAzYzAgb24gZXJyb3JcbiYjNDM7ICovXG4mIzQzO2ludCB6bDMwNzN4X2NoYW5fdG9kX3JlYWQoc3RydWN0IHpsMzA3M3hfZGV2ICp6bGRldiwgdTggY2gsXG4mIzQzO1x0XHRcdCAgYm9vbCBuZXh0X2h6LCBzdHJ1Y3QgdGltZXNwZWM2NCAqdHMsXG4mIzQzO1x0XHRcdCAgc3RydWN0IHB0cF9zeXN0ZW1fdGltZXN0YW1wICpzdHMpXG4mIzQzO3tcbiYjNDM7XHR1MzIgbnNlYztcbiYjNDM7XHR1NjQgc2VjO1xuJiM0MztcdHU4IGNtZDtcbiYjNDM7XHRpbnQgcmM7XG4mIzQzO1xuJiM0MztcdGlmIChuZXh0X2h6KVxuJiM0MztcdFx0Y21kID0gWkxfRFBMTF9UT0RfQ1RSTF9DTURfUkRfTkVYVF8xSFo7XG4mIzQzO1x0ZWxzZVxuJiM0MztcdFx0Y21kID0gWkxfRFBMTF9UT0RfQ1RSTF9DTURfUkRfQ1VSUkVOVDtcbiYjNDM7XG4mIzQzO1x0LyogV2FpdCBmb3IgYW55IHByZXZpb3VzIFRvRCBvcGVyYXRpb24gdG8gY29tcGxldGUgKi9cbiYjNDM7XHRyYyA9IHpsMzA3M3hfY2hhbl90b2RfcmVhZHlfd2FpdCh6bGRldiwgY2gpO1xuJiM0MztcdGlmIChyYylcbiYjNDM7XHRcdHJldHVybiByYztcbiYjNDM7XG4mIzQzO1x0cHRwX3JlYWRfc3lzdGVtX3ByZXRzKHN0cyk7XG4mIzQzO1x0cmMgPSB6bDMwNzN4X2NoYW5fdG9kX2N0cmwoemxkZXYsIGNoLCBjbWQpO1xuJiM0MztcdGlmIChyYylcbiYjNDM7XHRcdHJldHVybiByYztcbiYjNDM7XG4mIzQzO1x0cmMgPSB6bDMwNzN4X2NoYW5fdG9kX3JlYWR5X3dhaXQoemxkZXYsIGNoKTtcbiYjNDM7XHRpZiAocmMpXG4mIzQzO1x0XHRyZXR1cm4gcmM7XG4mIzQzO1x0cHRwX3JlYWRfc3lzdGVtX3Bvc3R0cyhzdHMpO1xuJiM0MztcbiYjNDM7XHRyYyA9IHpsMzA3M3hfcmVhZF91NDgoemxkZXYsIFpMX1JFR19EUExMX1RPRF9TRUMoY2gpLCBcdTAwMjZzZWMpO1xuJiM0MztcdGlmIChyYylcbiYjNDM7XHRcdHJldHVybiByYztcbiYjNDM7XG4mIzQzO1x0LyogSFcgbmFub3NlY29uZHMgYXJlIGFsd2F5cyBpbiBbMCwgTlNFQ19QRVJfU0VDKSByYW5nZSAqL1xuJiM0MztcdHJjID0gemwzMDczeF9yZWFkX3UzMih6bGRldiwgWkxfUkVHX0RQTExfVE9EX05TKGNoKSwgXHUwMDI2bnNlYyk7XG4mIzQzO1x0aWYgKHJjKVxuJiM0MztcdFx0cmV0dXJuIHJjO1xuJiM0MztcbiYjNDM7XHR0cy1cdTAwM2V0dl9zZWMgPSBzZWM7XG4mIzQzO1x0dHMtXHUwMDNldHZfbnNlYyA9IG5zZWM7XG4mIzQzO1xuJiM0MztcdHJldHVybiAwO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MzsvKipcbiYjNDM7ICogemwzMDczeF9jaGFuX3RvZF93cml0ZSAtIHdyaXRlIFRvRCByZWdpc3RlcnMgYW5kIHRyaWdnZXIgMSBIeiB1cGRhdGVcbiYjNDM7ICogQHpsZGV2OiBwb2ludGVyIHRvIHpsMzA3M3ggZGV2aWNlXG4mIzQzOyAqIEBjaDogRFBMTCBjaGFubmVsIGluZGV4XG4mIzQzOyAqIEB0czogdGltZSB0byBzZXRcbiYjNDM7ICpcbiYjNDM7ICogQ29udGV4dDogQ2FsbGVyIG11c3Qgc2VyaWFsaXplIGFsbCB6bDMwNzN4X2NoYW5fdG9kXyogY2FsbHMgZXh0ZXJuYWxseS5cbiYjNDM7ICogUmV0dXJuOiAwIG9uIHN1Y2Nlc3MsIFx1MDAzYzAgb24gZXJyb3JcbiYjNDM7ICovXG4mIzQzO2ludCB6bDMwNzN4X2NoYW5fdG9kX3dyaXRlKHN0cnVjdCB6bDMwNzN4X2RldiAqemxkZXYsIHU4IGNoLFxuJiM0MztcdFx0XHQgICBzdHJ1Y3QgdGltZXNwZWM2NCB0cylcbiYjNDM7e1xuJiM0MztcdGludCByYztcbiYjNDM7XG4mIzQzO1x0LyogV2FpdCBmb3IgYW55IHByZXZpb3VzIFRvRCBvcGVyYXRpb24gdG8gY29tcGxldGUgKi9cbiYjNDM7XHRyYyA9IHpsMzA3M3hfY2hhbl90b2RfcmVhZHlfd2FpdCh6bGRldiwgY2gpO1xuJiM0MztcdGlmIChyYylcbiYjNDM7XHRcdHJldHVybiByYztcbiYjNDM7XG4mIzQzO1x0cmMgPSB6bDMwNzN4X3dyaXRlX3U0OCh6bGRldiwgWkxfUkVHX0RQTExfVE9EX1NFQyhjaCksIHRzLnR2X3NlYyk7XG4mIzQzO1x0aWYgKHJjKVxuJiM0MztcdFx0cmV0dXJuIHJjO1xuJiM0MztcbiYjNDM7XHRyYyA9IHpsMzA3M3hfd3JpdGVfdTMyKHpsZGV2LCBaTF9SRUdfRFBMTF9UT0RfTlMoY2gpLCB0cy50dl9uc2VjKTtcbiYjNDM7XHRpZiAocmMpXG4mIzQzO1x0XHRyZXR1cm4gcmM7XG4mIzQzO1xuJiM0MztcdHJldHVybiB6bDMwNzN4X2NoYW5fdG9kX2N0cmwoemxkZXYsIGNoLFxuJiM0MztcdFx0XHRcdCAgICAgWkxfRFBMTF9UT0RfQ1RSTF9DTURfV1JfTkVYVF8xSFopO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MzsvKipcbiYjNDM7ICogemwzMDczeF9jaGFuX3RvZF9hZGp1c3QgLSBhdG9taWMgVG9EIHJlYWQtbW9kaWZ5LXdyaXRlIHdpdGggcm9sbG92ZXIgZ3VhcmRcbiYjNDM7ICogQHpsZGV2OiBwb2ludGVyIHRvIHpsMzA3M3ggZGV2aWNlXG4mIzQzOyAqIEBjaDogRFBMTCBjaGFubmVsIGluZGV4XG4mIzQzOyAqIEBkZWx0YTogdGltZSBhZGp1c3RtZW50IHRvIGFwcGx5XG4mIzQzOyAqXG4mIzQzOyAqIFJlYWRzIHRoZSBuZXh0LUh6IFRvRCBhbmQgY3VycmVudCBUb0QsIHRoZW4gY2hlY2tzIHdoZXRoZXIgZW5vdWdoIHRpbWVcbiYjNDM7ICogcmVtYWlucyBiZWZvcmUgdGhlIG5leHQgMSBIeiByb2xsb3ZlciB0byBzYWZlbHkgY29tcGxldGUgdGhlIHdyaXRlLlxuJiM0MzsgKiBSZS1yZWFkcyBpZiB0aGUgMSBIeiB0aWNrIGNyb3NzZWQgYmV0d2VlbiB0aGUgdHdvIHJlYWRzIG9yIGlmIGxlc3NcbiYjNDM7ICogdGhhbiAyMCBtcyByZW1haW5zIGJlZm9yZSB0aGUgbmV4dCByb2xsb3Zlci4gQXBwbGllcyBAZGVsdGEgYW5kIHdyaXRlc1xuJiM0MzsgKiB0aGUgcmVzdWx0IGJhY2suXG4mIzQzOyAqXG4mIzQzOyAqIENvbnRleHQ6IENhbGxlciBtdXN0IHNlcmlhbGl6ZSBhbGwgemwzMDczeF9jaGFuX3RvZF8qIGNhbGxzIGV4dGVybmFsbHkuXG4mIzQzOyAqIFJldHVybjogMCBvbiBzdWNjZXNzLCBcdTAwM2MwIG9uIGVycm9yXG4mIzQzOyAqL1xuJiM0MztpbnQgemwzMDczeF9jaGFuX3RvZF9hZGp1c3Qoc3RydWN0IHpsMzA3M3hfZGV2ICp6bGRldiwgdTggY2gsXG4mIzQzO1x0XHRcdCAgICBzdHJ1Y3QgdGltZXNwZWM2NCBkZWx0YSlcbiYjNDM7e1xuJiM0MzsjZGVmaW5lIFpMX1RPRF9NQVhfUkVUUklFU1x0MjBcbiYjNDM7XHRzdGF0aWMgY29uc3QgbG9uZyB0aHJlc2hvbGRfbnMgPSAyMCAqIE5TRUNfUEVSX01TRUM7XG4mIzQzO1x0c3RydWN0IHRpbWVzcGVjNjQgdHNfbmV4dCwgdHNfY3VyLCBkaWZmO1xuJiM0MztcdGludCByYywgaTtcbiYjNDM7XG4mIzQzO1x0Zm9yIChpID0gMDsgaSBcdTAwM2MgWkxfVE9EX01BWF9SRVRSSUVTOyBpJiM0MzsmIzQzOykge1xuJiM0MztcdFx0cmMgPSB6bDMwNzN4X2NoYW5fdG9kX3JlYWQoemxkZXYsIGNoLCB0cnVlLCBcdTAwMjZ0c19uZXh0LCBOVUxMKTtcbiYjNDM7XHRcdGlmIChyYylcbiYjNDM7XHRcdFx0cmV0dXJuIHJjO1xuJiM0MztcbiYjNDM7XHRcdHJjID0gemwzMDczeF9jaGFuX3RvZF9yZWFkKHpsZGV2LCBjaCwgZmFsc2UsIFx1MDAyNnRzX2N1ciwgTlVMTCk7XG4mIzQzO1x0XHRpZiAocmMpXG4mIzQzO1x0XHRcdHJldHVybiByYztcbiYjNDM7XG4mIzQzO1x0XHQvKiBFbnN1cmUgdGhlIDEgSHogdGljayBkaWQgbm90IGNyb3NzIGJldHdlZW4gdGhlIHR3byByZWFkc1xuJiM0MztcdFx0ICogYW5kIHRoYXQgZW5vdWdoIG1hcmdpbiByZW1haW5zIHRvIGNvbXBsZXRlIHRoZSB3cml0ZS5cbiYjNDM7XHRcdCAqL1xuJiM0MztcdFx0ZGlmZiA9IHRpbWVzcGVjNjRfc3ViKHRzX25leHQsIHRzX2N1cik7XG4mIzQzO1x0XHRpZiAoZGlmZi50dl9zZWMgXHUwMDNlIDAgfHxcbiYjNDM7XHRcdCAgICAoIWRpZmYudHZfc2VjIFx1MDAyNlx1MDAyNiBkaWZmLnR2X25zZWMgXHUwMDNlPSB0aHJlc2hvbGRfbnMpKVxuJiM0MztcdFx0XHRicmVhaztcbiYjNDM7XHR9XG4mIzQzO1x0aWYgKGkgPT0gWkxfVE9EX01BWF9SRVRSSUVTKSB7XG4mIzQzO1x0XHRkZXZfd2Fybih6bGRldi1cdTAwM2VkZXYsXG4mIzQzO1x0XHRcdCBcJiMzNDtEUExMJXUgVG9EIGFkanVzdCBmYWlsZWQgdG8gZ2V0IHN0YWJsZSBtYXJnaW5cXG5cJiMzNDssXG4mIzQzO1x0XHRcdCBjaCk7XG4mIzQzO1x0XHRyZXR1cm4gLUVCVVNZO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0LyogQXBwbHkgZGVsdGEgdG8gdGhlIG5leHQtSHogVG9EICovXG4mIzQzO1x0dHNfbmV4dCA9IHRpbWVzcGVjNjRfYWRkKHRzX25leHQsIGRlbHRhKTtcbiYjNDM7XHRpZiAoIXRpbWVzcGVjNjRfdmFsaWQoXHUwMDI2dHNfbmV4dCkpXG4mIzQzO1x0XHRyZXR1cm4gLUVJTlZBTDtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIHpsMzA3M3hfY2hhbl90b2Rfd3JpdGUoemxkZXYsIGNoLCB0c19uZXh0KTtcbiYjNDM7I3VuZGVmIFpMX1RPRF9NQVhfUkVUUklFU1xuJiM0Mzt9XG4mIzQzO1xuJiM0MzsvKipcbiYjNDM7ICogemwzMDczeF9jaGFuX2RmX29mZnNldF9zZXQgLSB3cml0ZSBkZWx0YSBmcmVxdWVuY3kgb2Zmc2V0IHRvIGhhcmR3YXJlXG4mIzQzOyAqIEB6bGRldjogcG9pbnRlciB0byB6bDMwNzN4IGRldmljZVxuJiM0MzsgKiBAY2g6IERQTEwgY2hhbm5lbCBpbmRleFxuJiM0MzsgKiBAb2Zmc2V0OiBmcmVxdWVuY3kgb2Zmc2V0IGluIDJeLTQ4IHN0ZXBzXG4mIzQzOyAqXG4mIzQzOyAqIENvbnRleHQ6IENhbGxlciBtdXN0IGhvbGQgdGhlIHBlci1EUExMIGxvY2suXG4mIzQzOyAqIFJldHVybjogMCBvbiBzdWNjZXNzLCBcdTAwM2MwIG9uIGVycm9yXG4mIzQzOyAqL1xuJiM0MztpbnQgemwzMDczeF9jaGFuX2RmX29mZnNldF9zZXQoc3RydWN0IHpsMzA3M3hfZGV2ICp6bGRldiwgdTggY2gsIHM2NCBvZmZzZXQpXG4mIzQzO3tcbiYjNDM7XHRpbnQgcmM7XG4mIzQzO1xuJiM0MztcdHJjID0gemwzMDczeF93cml0ZV91NDgoemxkZXYsIFpMX1JFR19EUExMX0RGX09GRlNFVChjaCksIG9mZnNldCk7XG4mIzQzO1x0aWYgKCFyYylcbiYjNDM7XHRcdHpsZGV2LVx1MDAzZWNoYW5bY2hdLmRmX29mZnNldCA9IG9mZnNldDtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIHJjO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MzsvKipcbiYjNDM7ICogemwzMDczeF9jaGFuX3RpZV93cml0ZSAtIGFkanVzdCBEUExMIHBoYXNlIHVzaW5nIFRJRSB3cml0ZVxuJiM0MzsgKiBAemxkZXY6IHBvaW50ZXIgdG8gemwzMDczeCBkZXZpY2VcbiYjNDM7ICogQGNoOiBEUExMIGNoYW5uZWwgaW5kZXhcbiYjNDM7ICogQGRlbHRhX25zOiBwaGFzZSBhZGp1c3RtZW50IGluIG5hbm9zZWNvbmRzIChtdXN0IGJlIGluICgtMXMsIDFzKSlcbiYjNDM7ICpcbiYjNDM7ICogQ29udmVydHMgbmFub3NlY29uZHMgdG8gVElFIHVuaXRzICgwLjAxIHBzKSBhbmQgd3JpdGVzIFRJRSBkYXRhXG4mIzQzOyAqIHRvIHRoZSBzcGVjaWZpZWQgY2hhbm5lbC5cbiYjNDM7ICpcbiYjNDM7ICogUmV0dXJuOiAwIG9uIHN1Y2Nlc3MsIFx1MDAzYzAgb24gZXJyb3JcbiYjNDM7ICovXG4mIzQzO2ludCB6bDMwNzN4X2NoYW5fdGllX3dyaXRlKHN0cnVjdCB6bDMwNzN4X2RldiAqemxkZXYsIHU4IGNoLCBzNjQgZGVsdGFfbnMpXG4mIzQzO3tcbiYjNDM7XHRzNjQgdGllX2RhdGE7XG4mIzQzO1x0aW50IHJjO1xuJiM0MztcbiYjNDM7XHRpZiAoV0FSTl9PTihkZWx0YV9ucyBcdTAwM2M9IC1OU0VDX1BFUl9TRUMgfHwgZGVsdGFfbnMgXHUwMDNlPSBOU0VDX1BFUl9TRUMpKVxuJiM0MztcdFx0cmV0dXJuIC1FUkFOR0U7XG4mIzQzO1xuJiM0MztcdGd1YXJkKG11dGV4KShcdTAwMjZ6bGRldi1cdTAwM2V0aWVfbG9jayk7XG4mIzQzO1xuJiM0MztcdC8qIFdhaXQgZm9yIGFueSBwcmV2aW91cyBUSUUgb3BlcmF0aW9uIHRvIGNvbXBsZXRlICovXG4mIzQzO1x0cmMgPSB6bDMwNzN4X3BvbGxfemVyb191OCh6bGRldiwgWkxfUkVHX0RQTExfVElFX0NUUkwsXG4mIzQzO1x0XHRcdFx0ICBaTF9EUExMX1RJRV9DVFJMX09QLFxuJiM0MztcdFx0XHRcdCAgWkxfUE9MTF9USUVfV1JfVElNRU9VVF9VUyk7XG4mIzQzO1x0aWYgKHJjKVxuJiM0MztcdFx0cmV0dXJuIHJjO1xuJiM0MztcbiYjNDM7XHQvKiBDb252ZXJ0IG5zIHRvIFRJRSB1bml0cyAoMC4wMSBwcyA9IDEwXi0xNCBzKSAqL1xuJiM0MztcdHRpZV9kYXRhID0gZGVsdGFfbnMgKiAxMDAwMDBMTDtcbiYjNDM7XG4mIzQzO1x0cmMgPSB6bDMwNzN4X3dyaXRlX3U0OCh6bGRldiwgWkxfUkVHX0RQTExfVElFX0RBVEEoY2gpLCB0aWVfZGF0YSk7XG4mIzQzO1x0aWYgKHJjKVxuJiM0MztcdFx0cmV0dXJuIHJjO1xuJiM0MztcbiYjNDM7XHRyYyA9IHpsMzA3M3hfd3JpdGVfdTgoemxkZXYsIFpMX1JFR19EUExMX1RJRV9DVFJMX01BU0ssIEJJVChjaCkpO1xuJiM0MztcdGlmIChyYylcbiYjNDM7XHRcdHJldHVybiByYztcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIHpsMzA3M3hfd3JpdGVfdTgoemxkZXYsIFpMX1JFR19EUExMX1RJRV9DVFJMLFxuJiM0MztcdFx0XHRcdFpMX0RQTExfVElFX0NUUkxfT1BfV1IpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MzsvKipcbiYjNDM7ICogemwzMDczeF9jaGFuX3BoYXNlX3N0ZXAgLSBleGVjdXRlIG9uZSBvdXRwdXQgcGhhc2Ugc3RlcCBvcGVyYXRpb25cbiYjNDM7ICogQHpsZGV2OiBwb2ludGVyIHRvIHpsMzA3M3ggZGV2aWNlXG4mIzQzOyAqIEBjaDogRFBMTCBjaGFubmVsIGluZGV4XG4mIzQzOyAqIEBvdXRfbWFzazogYml0bWFzayBvZiBvdXRwdXRzIHRvIHN0ZXBcbiYjNDM7ICogQHN0ZXBfY3ljbGVzOiBwaGFzZSBzdGVwIGluIHN5bnRoZXNpemVyIGNsb2NrIGN5Y2xlc1xuJiM0MzsgKiBAdG9kX3N0ZXA6IGFsc28gc3RlcCB0aGUgVG9EIGNvdW50ZXJcbiYjNDM7ICpcbiYjNDM7ICogQWxsIG1hc2tlZCBvdXRwdXRzIG11c3QgdXNlIHN5bnRoZXNpemVycyBvZiB0aGUgc2FtZSBmcmVxdWVuY3kgc2luY2VcbiYjNDM7ICogdGhlIHN0ZXAgdmFsdWUgaXMgaW4gc3ludGhlc2l6ZXIgY2xvY2sgY3ljbGVzLlxuJiM0MzsgKlxuJiM0MzsgKiBSZXR1cm46IDAgb24gc3VjY2VzcywgXHUwMDNjMCBvbiBlcnJvclxuJiM0MzsgKi9cbiYjNDM7aW50IHpsMzA3M3hfY2hhbl9waGFzZV9zdGVwKHN0cnVjdCB6bDMwNzN4X2RldiAqemxkZXYsIHU4IGNoLFxuJiM0MztcdFx0XHQgICAgdTE2IG91dF9tYXNrLCBzMzIgc3RlcF9jeWNsZXMsXG4mIzQzO1x0XHRcdCAgICBib29sIHRvZF9zdGVwKVxuJiM0Mzt7XG4mIzQzO1x0dTggY3RybDtcbiYjNDM7XHRpbnQgcmM7XG4mIzQzO1xuJiM0MztcdGd1YXJkKG11dGV4KShcdTAwMjZ6bGRldi1cdTAwM2VwaGFzZV9zdGVwX2xvY2spO1xuJiM0MztcbiYjNDM7XHQvKiBXYWl0IGZvciBhbnkgcHJldmlvdXMgcGhhc2Ugc3RlcCBvcGVyYXRpb24gdG8gY29tcGxldGUgKi9cbiYjNDM7XHRyYyA9IHpsMzA3M3hfcG9sbF96ZXJvX3U4KHpsZGV2LCBaTF9SRUdfT1VUUFVUX1BIQVNFX1NURVBfQ1RSTCxcbiYjNDM7XHRcdFx0XHQgIFpMX09VVFBVVF9QSEFTRV9TVEVQX0NUUkxfT1AsXG4mIzQzO1x0XHRcdFx0ICBaTF9QT0xMX1BIQVNFX1NURVBfVElNRU9VVF9VUyk7XG4mIzQzO1x0aWYgKHJjKVxuJiM0MztcdFx0cmV0dXJuIHJjO1xuJiM0MztcbiYjNDM7XHRyYyA9IHpsMzA3M3hfd3JpdGVfdTMyKHpsZGV2LCBaTF9SRUdfT1VUUFVUX1BIQVNFX1NURVBfREFUQSxcbiYjNDM7XHRcdFx0ICAgICAgIHN0ZXBfY3ljbGVzKTtcbiYjNDM7XHRpZiAocmMpXG4mIzQzO1x0XHRyZXR1cm4gcmM7XG4mIzQzO1xuJiM0MztcdHJjID0gemwzMDczeF93cml0ZV91MTYoemxkZXYsIFpMX1JFR19PVVRQVVRfUEhBU0VfU1RFUF9NQVNLLCBvdXRfbWFzayk7XG4mIzQzO1x0aWYgKHJjKVxuJiM0MztcdFx0cmV0dXJuIHJjO1xuJiM0MztcbiYjNDM7XHRyYyA9IHpsMzA3M3hfd3JpdGVfdTgoemxkZXYsIFpMX1JFR19PVVRQVVRfUEhBU0VfU1RFUF9OVU1CRVIsIDEpO1xuJiM0MztcdGlmIChyYylcbiYjNDM7XHRcdHJldHVybiByYztcbiYjNDM7XG4mIzQzO1x0Y3RybCA9IEZJRUxEX1BSRVAoWkxfT1VUUFVUX1BIQVNFX1NURVBfQ1RSTF9EUExMLCBjaCkgfFxuJiM0MztcdCAgICAgICBGSUVMRF9QUkVQKFpMX09VVFBVVF9QSEFTRV9TVEVQX0NUUkxfT1AsXG4mIzQzO1x0XHRcdCAgWkxfT1VUUFVUX1BIQVNFX1NURVBfQ1RSTF9PUF9XUklURSk7XG4mIzQzO1x0aWYgKHRvZF9zdGVwKVxuJiM0MztcdFx0Y3RybCB8PSBaTF9PVVRQVVRfUEhBU0VfU1RFUF9DVFJMX1RPRF9TVEVQO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gemwzMDczeF93cml0ZV91OCh6bGRldiwgWkxfUkVHX09VVFBVVF9QSEFTRV9TVEVQX0NUUkwsIGN0cmwpO1xuJiM0Mzt9XG4mIzQzO1xuIC8qKlxuICAqIHpsMzA3M3hfY2hhbl9zdGF0ZV9zZXQgLSBjb21taXQgRFBMTCBjaGFubmVsIHN0YXRlIGNoYW5nZXMgdG8gaGFyZHdhcmVcbiAgKiBAemxkZXY6IHBvaW50ZXIgdG8gemwzMDczeF9kZXYgc3RydWN0dXJlXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5oIGIvZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5oXG5pbmRleCBkYzljNmQ5NWJkZWU3Li45OWMzYjcwODhmNjc4IDEwMDY0NFxuLS0tIGEvZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5oXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmhcbkBAIC01LDEwICYjNDM7NSwxMiBAQFxuIFxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2JpdGZpZWxkLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9zdGRkZWYuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC90aW1lNjQuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3R5cGVzLmhcdTAwM2VcbiBcbiAjaW5jbHVkZSBcJiMzNDtyZWdzLmhcJiMzNDtcbiBcbiYjNDM7c3RydWN0IHB0cF9zeXN0ZW1fdGltZXN0YW1wO1xuIHN0cnVjdCB6bDMwNzN4X2RldjtcbiBcbiAvKipcbkBAIC00Miw2ICYjNDM7NDQsMjEgQEAgaW50IHpsMzA3M3hfY2hhbl9zdGF0ZV9zZXQoc3RydWN0IHpsMzA3M3hfZGV2ICp6bGRldiwgdTggaW5kZXgsXG4gaW50IHpsMzA3M3hfY2hhbl9zdGF0ZV91cGRhdGUoc3RydWN0IHpsMzA3M3hfZGV2ICp6bGRldiwgdTggaW5kZXgpO1xuIGludCB6bDMwNzN4X2NoYW5fbmNvX21vZGVfc2V0KHN0cnVjdCB6bDMwNzN4X2RldiAqemxkZXYsIHU4IGluZGV4KTtcbiBcbiYjNDM7aW50IHpsMzA3M3hfY2hhbl90b2RfcmVhZHlfd2FpdChzdHJ1Y3QgemwzMDczeF9kZXYgKnpsZGV2LCB1OCBjaCk7XG4mIzQzO2ludCB6bDMwNzN4X2NoYW5fdG9kX3JlYWQoc3RydWN0IHpsMzA3M3hfZGV2ICp6bGRldiwgdTggY2gsXG4mIzQzO1x0XHRcdCAgYm9vbCBuZXh0X2h6LCBzdHJ1Y3QgdGltZXNwZWM2NCAqdHMsXG4mIzQzO1x0XHRcdCAgc3RydWN0IHB0cF9zeXN0ZW1fdGltZXN0YW1wICpzdHMpO1xuJiM0MztpbnQgemwzMDczeF9jaGFuX3RvZF93cml0ZShzdHJ1Y3QgemwzMDczeF9kZXYgKnpsZGV2LCB1OCBjaCxcbiYjNDM7XHRcdFx0ICAgc3RydWN0IHRpbWVzcGVjNjQgdHMpO1xuJiM0MztpbnQgemwzMDczeF9jaGFuX3RvZF9hZGp1c3Qoc3RydWN0IHpsMzA3M3hfZGV2ICp6bGRldiwgdTggY2gsXG4mIzQzO1x0XHRcdCAgICBzdHJ1Y3QgdGltZXNwZWM2NCBkZWx0YSk7XG4mIzQzO2ludCB6bDMwNzN4X2NoYW5fcGhhc2Vfc3RlcChzdHJ1Y3QgemwzMDczeF9kZXYgKnpsZGV2LCB1OCBjaCxcbiYjNDM7XHRcdFx0ICAgIHUxNiBvdXRfbWFzaywgczMyIHN0ZXBfY3ljbGVzLCBib29sIHRvZF9zdGVwKTtcbiYjNDM7XG4mIzQzO2ludCB6bDMwNzN4X2NoYW5fZGZfb2Zmc2V0X3NldChzdHJ1Y3QgemwzMDczeF9kZXYgKnpsZGV2LCB1OCBjaCwgczY0IG9mZnNldCk7XG4mIzQzO1xuJiM0MztpbnQgemwzMDczeF9jaGFuX3RpZV93cml0ZShzdHJ1Y3QgemwzMDczeF9kZXYgKnpsZGV2LCB1OCBjaCwgczY0IGRlbHRhX25zKTtcbiYjNDM7XG4gLyoqXG4gICogemwzMDczeF9jaGFuX2RmX29mZnNldF9nZXQgLSBnZXQgY2FjaGVkIGRmX29mZnNldCB2cyB0cmFja2VkIHJlZmVyZW5jZVxuICAqIEBjaGFuOiBwb2ludGVyIHRvIGNoYW5uZWwgc3RhdGVcbkBAIC0yMDAsNiAmIzQzOzIxNywyMSBAQCBzdGF0aWMgaW5saW5lIGJvb2wgemwzMDczeF9jaGFuX21vZGVfaXNfcmVmbG9jayhjb25zdCBzdHJ1Y3QgemwzMDczeF9jaGFuICpjaGFuKVxuIFx0cmV0dXJuIHpsMzA3M3hfY2hhbl9tb2RlX2dldChjaGFuKSA9PSBaTF9EUExMX01PREVfUkVGU0VMX01PREVfUkVGTE9DSztcbiB9XG4gXG4mIzQzOy8qKlxuJiM0MzsgKiB6bDMwNzN4X2NoYW5fbW9kZV9zdXBwb3J0c190aWUgLSBjaGVjayBpZiBjaGFubmVsIG1vZGUgc3VwcG9ydHMgVElFIHdyaXRlXG4mIzQzOyAqIEBjaGFuOiBwb2ludGVyIHRvIGNoYW5uZWwgc3RhdGVcbiYjNDM7ICpcbiYjNDM7ICogVElFIHdyaXRlIGlzIHN1cHBvcnRlZCBpbiBBVVRPIGFuZCBSRUZMT0NLIG1vZGVzIHJlZ2FyZGxlc3Mgb2YgbG9jayBzdGF0ZS5cbiYjNDM7ICpcbiYjNDM7ICogUmV0dXJuOiB0cnVlIGlmIFRJRSB3cml0ZSBpcyBzdXBwb3J0ZWQsIGZhbHNlIG90aGVyd2lzZVxuJiM0MzsgKi9cbiYjNDM7c3RhdGljIGlubGluZSBib29sXG4mIzQzO3psMzA3M3hfY2hhbl9tb2RlX3N1cHBvcnRzX3RpZShjb25zdCBzdHJ1Y3QgemwzMDczeF9jaGFuICpjaGFuKVxuJiM0Mzt7XG4mIzQzO1x0cmV0dXJuIHpsMzA3M3hfY2hhbl9tb2RlX2lzX2F1dG8oY2hhbikgfHxcbiYjNDM7XHRcdHpsMzA3M3hfY2hhbl9tb2RlX2lzX3JlZmxvY2soY2hhbik7XG4mIzQzO31cbiYjNDM7XG4gLyoqXG4gICogemwzMDczeF9jaGFuX2lzX2hvX3JlYWR5IC0gY2hlY2sgaWYgaG9sZG92ZXIgaXMgcmVhZHlcbiAgKiBAY2hhbjogcG9pbnRlciB0byBjaGFubmVsIHN0YXRlXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9kcGxsL3psMzA3M3gvY29yZS5jIGIvZHJpdmVycy9kcGxsL3psMzA3M3gvY29yZS5jXG5pbmRleCA1YjJkNzdmMmMyMjg4Li4yMzBkZjA4ZTI3Y2QxIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9kcGxsL3psMzA3M3gvY29yZS5jXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL2RwbGwvemwzMDczeC9jb3JlLmNcbkBAIC0zMjIsNyAmIzQzOzMyMiw3IEBAIGludCB6bDMwNzN4X3dyaXRlX3U0OChzdHJ1Y3QgemwzMDczeF9kZXYgKnpsZGV2LCB1bnNpZ25lZCBpbnQgcmVnLCB1NjQgdmFsKVxuIGludCB6bDMwNzN4X3BvbGxfemVyb191OChzdHJ1Y3QgemwzMDczeF9kZXYgKnpsZGV2LCB1bnNpZ25lZCBpbnQgcmVnLFxuIFx0XHRcdCB1OCBtYXNrLCB1bnNpZ25lZCBpbnQgdGltZW91dF91cylcbiB7XG4tI2RlZmluZSBaTF9QT0xMX1NMRUVQX1VTIDEwXG4mIzQzO1x0dW5zaWduZWQgaW50IHNsZWVwX3VzID0gdGltZW91dF91cyAvIDUwO1xuIFx0dW5zaWduZWQgaW50IHZhbDtcbiBcbiBcdC8qIENoZWNrIHRoZSByZWdpc3RlciBpcyA4Yml0ICovXG5AQCAtMzM2LDcgJiM0MzszMzYsNyBAQCBpbnQgemwzMDczeF9wb2xsX3plcm9fdTgoc3RydWN0IHpsMzA3M3hfZGV2ICp6bGRldiwgdW5zaWduZWQgaW50IHJlZyxcbiBcdHJlZyA9IFpMX1JFR19BRERSKHJlZykgJiM0MzsgWkxfUkFOR0VfT0ZGU0VUO1xuIFxuIFx0cmV0dXJuIHJlZ21hcF9yZWFkX3BvbGxfdGltZW91dCh6bGRldi1cdTAwM2VyZWdtYXAsIHJlZywgdmFsLCAhKHZhbCBcdTAwMjYgbWFzayksXG4tXHRcdFx0XHRcdFpMX1BPTExfU0xFRVBfVVMsIHRpbWVvdXRfdXMpO1xuJiM0MztcdFx0XHRcdFx0c2xlZXBfdXMsIHRpbWVvdXRfdXMpO1xuIH1cbiBcbiBpbnQgemwzMDczeF9tYl9vcChzdHJ1Y3QgemwzMDczeF9kZXYgKnpsZGV2LCB1bnNpZ25lZCBpbnQgb3BfcmVnLCB1OCBvcF92YWwsXG5AQCAtNTExLDYgJiM0Mzs1MTEsMTEgQEAgemwzMDczeF9kZXZfc3RhdGVfZmV0Y2goc3RydWN0IHpsMzA3M3hfZGV2ICp6bGRldilcbiBcdGludCByYztcbiBcdHU4IGk7XG4gXG4mIzQzO1x0cmMgPSB6bDMwNzN4X3JlYWRfdTE2KHpsZGV2LCBaTF9SRUdfT1VUUFVUX1NURVBfVElNRV9NQVNLLFxuJiM0MztcdFx0XHQgICAgICBcdTAwMjZ6bGRldi1cdTAwM2VvdXRfc3RlcF90aW1lX21hc2spO1xuJiM0MztcdGlmIChyYylcbiYjNDM7XHRcdHJldHVybiByYztcbiYjNDM7XG4gXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBaTDMwNzNYX05VTV9SRUZTOyBpJiM0MzsmIzQzOykge1xuIFx0XHRyYyA9IHpsMzA3M3hfcmVmX3N0YXRlX2ZldGNoKHpsZGV2LCBpKTtcbiBcdFx0aWYgKHJjKSB7XG5AQCAtMTAzNCw2ICYjNDM7MTAzOSwxNCBAQCBpbnQgemwzMDczeF9kZXZfcHJvYmUoc3RydWN0IHpsMzA3M3hfZGV2ICp6bGRldilcbiBcdCAqIGFuZC9vciBwb2xscyBhcmUgcmVxdWlyZWQgdG8gYmUgZG9uZSBhdG9taWNhbGx5LlxuIFx0ICovXG4gXHRyYyA9IGRldm1fbXV0ZXhfaW5pdCh6bGRldi1cdTAwM2VkZXYsIFx1MDAyNnpsZGV2LVx1MDAzZW11bHRpb3BfbG9jayk7XG4mIzQzO1x0aWYgKHJjKVxuJiM0MztcdFx0cmV0dXJuIGRldl9lcnJfcHJvYmUoemxkZXYtXHUwMDNlZGV2LCByYyxcbiYjNDM7XHRcdFx0XHQgICAgIFwmIzM0O0ZhaWxlZCB0byBpbml0aWFsaXplIG11dGV4XFxuXCYjMzQ7KTtcbiYjNDM7XHRyYyA9IGRldm1fbXV0ZXhfaW5pdCh6bGRldi1cdTAwM2VkZXYsIFx1MDAyNnpsZGV2LVx1MDAzZXBoYXNlX3N0ZXBfbG9jayk7XG4mIzQzO1x0aWYgKHJjKVxuJiM0MztcdFx0cmV0dXJuIGRldl9lcnJfcHJvYmUoemxkZXYtXHUwMDNlZGV2LCByYyxcbiYjNDM7XHRcdFx0XHQgICAgIFwmIzM0O0ZhaWxlZCB0byBpbml0aWFsaXplIG11dGV4XFxuXCYjMzQ7KTtcbiYjNDM7XHRyYyA9IGRldm1fbXV0ZXhfaW5pdCh6bGRldi1cdTAwM2VkZXYsIFx1MDAyNnpsZGV2LVx1MDAzZXRpZV9sb2NrKTtcbiBcdGlmIChyYylcbiBcdFx0cmV0dXJuIGRldl9lcnJfcHJvYmUoemxkZXYtXHUwMDNlZGV2LCByYyxcbiBcdFx0XHRcdCAgICAgXCYjMzQ7RmFpbGVkIHRvIGluaXRpYWxpemUgbXV0ZXhcXG5cJiMzNDspO1xuZGlmZiAtLWdpdCBhL2RyaXZlcnMvZHBsbC96bDMwNzN4L2NvcmUuaCBiL2RyaXZlcnMvZHBsbC96bDMwNzN4L2NvcmUuaFxuaW5kZXggNzhkYzIwOGYzZWVhMi4uNjdjMTBlMjU5NTExOCAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvZHBsbC96bDMwNzN4L2NvcmUuaFxuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9kcGxsL3psMzA3M3gvY29yZS5oXG5AQCAtMjYsNiAmIzQzOzI2LDEwIEBAIHN0cnVjdCB6bDMwNzN4X2RwbGw7XG4gI2RlZmluZSBaTF9QT0xMX0hXUkVHX1RJTUVPVVRfVVNcdCg1MCAqIFVTRUNfUEVSX01TRUMpXG4gI2RlZmluZSBaTF9QT0xMX01CX1RJTUVPVVRfVVNcdFx0KDMwICogVVNFQ19QRVJfTVNFQylcbiAjZGVmaW5lIFpMX1BPTExfUEhBU0VfRVJSX1RJTUVPVVRfVVNcdCg1MCAqIFVTRUNfUEVSX01TRUMpXG4mIzQzOyNkZWZpbmUgWkxfUE9MTF9QSEFTRV9TVEVQX1RJTUVPVVRfVVNcdCgzMDAwICogVVNFQ19QRVJfTVNFQylcbiYjNDM7I2RlZmluZSBaTF9QT0xMX1RJRV9XUl9USU1FT1VUX1VTXHQoMTAwMCAqIFVTRUNfUEVSX01TRUMpXG4mIzQzOyNkZWZpbmUgWkxfUE9MTF9UT0RfUkRfVElNRU9VVF9VU1x0KDMwICogVVNFQ19QRVJfTVNFQylcbiYjNDM7I2RlZmluZSBaTF9QT0xMX1RPRF9XUl9USU1FT1VUX1VTXHQoMTAwMCAqIFVTRUNfUEVSX01TRUMpXG4gXG4gZW51bSB6bDMwNzN4X2ZsYWdzIHtcbiBcdFpMMzA3M1hfRkxBR19SRUZfUEhBU0VfQ09NUF8zMl9CSVQsXG5AQCAtNTUsNiAmIzQzOzU5LDggQEAgc3RydWN0IHpsMzA3M3hfY2hpcF9pbmZvIHtcbiAgKiBAcmVnbWFwOiByZWdtYXAgdG8gYWNjZXNzIGRldmljZSByZWdpc3RlcnNcbiAgKiBAaW5mbzogZGV0ZWN0ZWQgY2hpcCBpbmZvXG4gICogQG11bHRpb3BfbG9jazogdG8gc2VyaWFsaXplIG11bHRpcGxlIHJlZ2lzdGVyIG9wZXJhdGlvbnNcbiYjNDM7ICogQHRpZV9sb2NrOiB0byBzZXJpYWxpemUgVElFIHdyaXRlIG9wZXJhdGlvbnNcbiYjNDM7ICogQHBoYXNlX3N0ZXBfbG9jazogdG8gc2VyaWFsaXplIG91dHB1dCBwaGFzZSBzdGVwIG9wZXJhdGlvbnNcbiAgKiBAcmVmOiBhcnJheSBvZiBpbnB1dCByZWZlcmVuY2VzJiMzOTsgaW52YXJpYW50c1xuICAqIEBvdXQ6IGFycmF5IG9mIG91dHMmIzM5OyBpbnZhcmlhbnRzXG4gICogQHN5bnRoOiBhcnJheSBvZiBzeW50aHMmIzM5OyBpbnZhcmlhbnRzXG5AQCAtNjMsNiAmIzQzOzY5LDcgQEAgc3RydWN0IHpsMzA3M3hfY2hpcF9pbmZvIHtcbiAgKiBAa3dvcmtlcjogdGhyZWFkIGZvciBwZXJpb2RpYyB3b3JrXG4gICogQHdvcms6IHBlcmlvZGljIHdvcmtcbiAgKiBAY2xvY2tfaWQ6IGNsb2NrIGlkIG9mIHRoZSBkZXZpY2VcbiYjNDM7ICogQG91dF9zdGVwX3RpbWVfbWFzazogb3V0cHV0IHN0ZXAtdGltZSBtYXNrIChkZXZpY2UtZ2xvYmFsKVxuICAqIEBwaGFzZV9hdmdfZmFjdG9yOiBwaGFzZSBvZmZzZXQgbWVhc3VyZW1lbnQgYXZlcmFnaW5nIGZhY3RvclxuICAqIEBmcmVxX21vbml0b3I6IGlzIGZyZXF1ZW5jeSBtb25pdG9yIGVuYWJsZWRcbiAgKi9cbkBAIC03MSw2ICYjNDM7NzgsOCBAQCBzdHJ1Y3QgemwzMDczeF9kZXYge1xuIFx0c3RydWN0IHJlZ21hcFx0XHRcdCpyZWdtYXA7XG4gXHRjb25zdCBzdHJ1Y3QgemwzMDczeF9jaGlwX2luZm9cdCppbmZvO1xuIFx0c3RydWN0IG11dGV4XHRcdFx0bXVsdGlvcF9sb2NrO1xuJiM0MztcdHN0cnVjdCBtdXRleFx0XHRcdHRpZV9sb2NrO1xuJiM0MztcdHN0cnVjdCBtdXRleFx0XHRcdHBoYXNlX3N0ZXBfbG9jaztcbiBcbiBcdC8qIEludmFyaWFudHMgKi9cbiBcdHN0cnVjdCB6bDMwNzN4X3JlZlx0cmVmW1pMMzA3M1hfTlVNX1JFRlNdO1xuQEAgLTg3LDYgJiM0Mzs5Niw3IEBAIHN0cnVjdCB6bDMwNzN4X2RldiB7XG4gXG4gXHQvKiBQZXItY2hpcCBwYXJhbWV0ZXJzICovXG4gXHR1NjRcdFx0XHRjbG9ja19pZDtcbiYjNDM7XHR1MTZcdFx0XHRvdXRfc3RlcF90aW1lX21hc2s7XG4gXHR1OFx0XHRcdHBoYXNlX2F2Z19mYWN0b3I7XG4gXHRib29sXHRcdFx0ZnJlcV9tb25pdG9yO1xuIH07XG5AQCAtMzA4LDYgJiM0MzszMTgsMTkgQEAgemwzMDczeF9kZXZfb3V0X2lzX2VuYWJsZWQoc3RydWN0IHpsMzA3M3hfZGV2ICp6bGRldiwgdTggaW5kZXgpXG4gXHRyZXR1cm4gemwzMDczeF9zeW50aF9pc19lbmFibGVkKHN5bnRoKSBcdTAwMjZcdTAwMjYgemwzMDczeF9vdXRfaXNfZW5hYmxlZChvdXQpO1xuIH1cbiBcbiYjNDM7LyoqXG4mIzQzOyAqIHpsMzA3M3hfZGV2X291dF9pc19zdGVwcGVkIC0gY2hlY2sgaWYgb3V0cHV0IGlzIGluIHN0ZXAtdGltZSBtYXNrXG4mIzQzOyAqIEB6bGRldjogcG9pbnRlciB0byB6bDMwNzN4IGRldmljZVxuJiM0MzsgKiBAaW5kZXg6IG91dHB1dCBpbmRleFxuJiM0MzsgKlxuJiM0MzsgKiBSZXR1cm46IHRydWUgaWYgb3V0cHV0IGlzIGFmZmVjdGVkIGJ5IHN0ZXAtdGltZSBvcGVyYXRpb25zXG4mIzQzOyAqL1xuJiM0MztzdGF0aWMgaW5saW5lIGJvb2xcbiYjNDM7emwzMDczeF9kZXZfb3V0X2lzX3N0ZXBwZWQoc3RydWN0IHpsMzA3M3hfZGV2ICp6bGRldiwgdTggaW5kZXgpXG4mIzQzO3tcbiYjNDM7XHRyZXR1cm4gISEoemxkZXYtXHUwMDNlb3V0X3N0ZXBfdGltZV9tYXNrIFx1MDAyNiBCSVQoaW5kZXgpKTtcbiYjNDM7fVxuJiM0MztcbiAvKipcbiAgKiB6bDMwNzN4X2Rldl9vdXRfZHBsbF9nZXQgLSBnZXQgRFBMTCBJRCB0aGUgb3V0cHV0IGlzIGRyaXZlbiBieVxuICAqIEB6bGRldjogcG9pbnRlciB0byB6bDMwNzN4IGRldmljZVxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvZHBsbC96bDMwNzN4L2RwbGwuYyBiL2RyaXZlcnMvZHBsbC96bDMwNzN4L2RwbGwuY1xuaW5kZXggMDQ4OGFlNmFjNDg2Yy4uODMwMWFkMzQzNjU4YSAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvZHBsbC96bDMwNzN4L2RwbGwuY1xuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9kcGxsL3psMzA3M3gvZHBsbC5jXG5AQCAtMiw2ICYjNDM7Miw3IEBAXG4gXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvYml0cy5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvYml0ZmllbGQuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC9jbGVhbnVwLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9idWcuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2NvbnRhaW5lcl9vZi5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvZGV2X3ByaW50ay5oXHUwMDNlXG5AQCAtMTMsNiAmIzQzOzE0LDcgQEBcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9uZXRsaW5rLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3Byb3BlcnR5LmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgvcHRwX2Nsb2NrX2tlcm5lbC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvc2xhYi5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvc3ByaW50Zi5oXHUwMDNlXG4gXG5AQCAtMjI3NSw0NSAmIzQzOzIyNzcsMzg0IEBAIHpsMzA3M3hfZHBsbF9pbml0X2ZpbmVfcGhhc2VfYWRqdXN0KHN0cnVjdCB6bDMwNzN4X2RldiAqemxkZXYpXG4gXHRyZXR1cm4gemwzMDczeF93cml0ZV91OCh6bGRldiwgWkxfUkVHX1NZTlRIX1BIQVNFX1NISUZUX0NUUkwsIDB4MDEpO1xuIH1cbiBcbiYjNDM7LyogTWF4aW11bSBmcmVxdWVuY3kgYWRqdXN0bWVudDogJiM0MzstMSUgb2Ygbm9taW5hbCBpbiBwcGIgKi9cbiYjNDM7I2RlZmluZSBaTDMwNzNYX0RQTExfUFRQX01BWF9BREpcdDEwMDAwMDAwXG4mIzQzO1xuIC8qKlxuLSAqIHpsMzA3M3hfZHBsbF9hbGxvYyAtIGFsbG9jYXRlIERQTEwgZGV2aWNlXG4tICogQHpsZGV2OiBwb2ludGVyIHRvIHpsMzA3M3ggZGV2aWNlXG4tICogQGNoOiBEUExMIGNoYW5uZWwgbnVtYmVyXG4mIzQzOyAqIHpsMzA3M3hfZHBsbF9wdHBfZ2V0dGltZXg2NCAtIHJlYWQgY3VycmVudCB0aW1lIGZyb20gVG9EIGNvdW50ZXJzXG4mIzQzOyAqIEBpbmZvOiBQVFAgY2xvY2sgaW5mb1xuJiM0MzsgKiBAdHM6IHRpbWVzcGVjIHRvIHN0b3JlIGN1cnJlbnQgdGltZVxuJiM0MzsgKiBAc3RzOiBvcHRpb25hbCBzeXN0ZW0gdGltZXN0YW1wIHBhaXIgZm9yIGNyb3NzLXRpbWVzdGFtcGluZ1xuICAqXG4tICogQWxsb2NhdGVzIERQTEwgZGV2aWNlIHN0cnVjdHVyZSBmb3IgZ2l2ZW4gRFBMTCBjaGFubmVsLlxuJiM0MzsgKiBSZXR1cm46IDAgb24gc3VjY2VzcywgXHUwMDNjMCBvbiBlcnJvclxuJiM0MzsgKi9cbiYjNDM7c3RhdGljIGludCB6bDMwNzN4X2RwbGxfcHRwX2dldHRpbWV4NjQoc3RydWN0IHB0cF9jbG9ja19pbmZvICppbmZvLFxuJiM0MztcdFx0XHRcdCAgICAgICBzdHJ1Y3QgdGltZXNwZWM2NCAqdHMsXG4mIzQzO1x0XHRcdFx0ICAgICAgIHN0cnVjdCBwdHBfc3lzdGVtX3RpbWVzdGFtcCAqc3RzKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IHpsMzA3M3hfZHBsbCAqemxkcGxsID0gY29udGFpbmVyX29mKGluZm8sIHN0cnVjdCB6bDMwNzN4X2RwbGwsXG4mIzQzO1x0XHRcdFx0XHRcdCAgIHB0cF9pbmZvKTtcbiYjNDM7XG4mIzQzO1x0Z3VhcmQobXV0ZXgpKFx1MDAyNnpsZHBsbC1cdTAwM2Vsb2NrKTtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIHpsMzA3M3hfY2hhbl90b2RfcmVhZCh6bGRwbGwtXHUwMDNlZGV2LCB6bGRwbGwtXHUwMDNlaWQsIGZhbHNlLCB0cywgc3RzKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7LyoqXG4mIzQzOyAqIHpsMzA3M3hfZHBsbF9wdHBfc2V0dGltZTY0IC0gc2V0IFRvRCBjb3VudGVycyB0byBnaXZlbiB0aW1lXG4mIzQzOyAqIEBpbmZvOiBQVFAgY2xvY2sgaW5mb1xuJiM0MzsgKiBAdHM6IHRpbWVzcGVjIHdpdGggdGltZSB0byBzZXRcbiAgKlxuLSAqIFJldHVybjogcG9pbnRlciB0byBEUExMIGRldmljZSBvbiBzdWNjZXNzLCBlcnJvciBwb2ludGVyIG9uIGVycm9yXG4mIzQzOyAqIFJldHVybjogMCBvbiBzdWNjZXNzLCBcdTAwM2MwIG9uIGVycm9yXG4gICovXG4tc3RydWN0IHpsMzA3M3hfZHBsbCAqXG4temwzMDczeF9kcGxsX2FsbG9jKHN0cnVjdCB6bDMwNzN4X2RldiAqemxkZXYsIHU4IGNoKVxuJiM0MztzdGF0aWMgaW50IHpsMzA3M3hfZHBsbF9wdHBfc2V0dGltZTY0KHN0cnVjdCBwdHBfY2xvY2tfaW5mbyAqaW5mbyxcbiYjNDM7XHRcdFx0XHQgICAgICBjb25zdCBzdHJ1Y3QgdGltZXNwZWM2NCAqdHMpXG4ge1xuLVx0c3RydWN0IHpsMzA3M3hfZHBsbCAqemxkcGxsO1xuJiM0MztcdHN0cnVjdCB6bDMwNzN4X2RwbGwgKnpsZHBsbCA9IGNvbnRhaW5lcl9vZihpbmZvLCBzdHJ1Y3QgemwzMDczeF9kcGxsLFxuJiM0MztcdFx0XHRcdFx0XHQgICBwdHBfaW5mbyk7XG4gXG4tXHR6bGRwbGwgPSBremFsbG9jX29iaigqemxkcGxsKTtcbi1cdGlmICghemxkcGxsKVxuLVx0XHRyZXR1cm4gRVJSX1BUUigtRU5PTUVNKTtcbiYjNDM7XHRndWFyZChtdXRleCkoXHUwMDI2emxkcGxsLVx1MDAzZWxvY2spO1xuIFxuLVx0emxkcGxsLVx1MDAzZWRldiA9IHpsZGV2O1xuLVx0emxkcGxsLVx1MDAzZWlkID0gY2g7XG4tXHRtdXRleF9pbml0KFx1MDAyNnpsZHBsbC1cdTAwM2Vsb2NrKTtcbi1cdElOSVRfTElTVF9IRUFEKFx1MDAyNnpsZHBsbC1cdTAwM2VwaW5zKTtcbiYjNDM7XHRyZXR1cm4gemwzMDczeF9jaGFuX3RvZF93cml0ZSh6bGRwbGwtXHUwMDNlZGV2LCB6bGRwbGwtXHUwMDNlaWQsICp0cyk7XG4mIzQzO31cbiBcbi1cdHJldHVybiB6bGRwbGw7XG4mIzQzOy8qKlxuJiM0MzsgKiB6bDMwNzN4X2RwbGxfcHRwX2FkanRpbWVfcGhhc2Vfc3RlcCAtIGFkanVzdCBzdWItc2Vjb25kIHRpbWUgdmlhIHBoYXNlIHN0ZXBcbiYjNDM7ICogQHpsZHBsbDogRFBMTCBjaGFubmVsXG4mIzQzOyAqIEBkZWx0YTogdGltZSBhZGp1c3RtZW50IGluIG5hbm9zZWNvbmRzIChtdXN0IGJlIHdpdGhpbiAoLU5TRUNfUEVSX1NFQyxcbiYjNDM7ICogICAgICAgICBOU0VDX1BFUl9TRUMpKVxuJiM0MzsgKlxuJiM0MzsgKiBVc2VzIHRoZSBvdXRwdXQgcGhhc2Ugc3RlcCBtZWNoYW5pc20gd2l0aCB0b2Rfc3RlcD0xIHRvIGFkanVzdCBib3RoXG4mIzQzOyAqIHRoZSBvdXRwdXQgY2xvY2sgcGhhc2UgYW5kIHRoZSBUb0QgY291bnRlciBzaW11bHRhbmVvdXNseS4gVGhpcyBrZWVwc1xuJiM0MzsgKiBvdXRwdXRzIGFuZCBUb0QgY29oZXJlbnQuIE9ubHkgdmFsaWQgZm9yIE5DTy5cbiYjNDM7ICpcbiYjNDM7ICogT3V0cHV0cyBhcmUgZ3JvdXBlZCBieSBzeW50aGVzaXplciBzaW5jZSB0aGUgcGhhc2Ugc3RlcCB2YWx1ZSBpcyBpblxuJiM0MzsgKiBzeW50aGVzaXplciBjbG9jayBjeWNsZXMuIFRoZSBmaXJzdCBzeW50aCBncm91cCB3aXRoIGVuYWJsZWQgb3V0cHV0c1xuJiM0MzsgKiB1c2VzIHRvZF9zdGVwIHRvIGFkanVzdCBib3RoIG91dHB1dHMgYW5kIHRoZSBUb0QgY291bnRlci4gUmVtYWluaW5nXG4mIzQzOyAqIGdyb3VwcyBzdGVwIG91dHB1dHMgb25seS4gSWYgbm8gc3ludGggaGFzIGVuYWJsZWQgb3V0cHV0cywgdGhlIFRvRFxuJiM0MzsgKiBjb3VudGVyIGlzIHN0ZXBwZWQgYWxvbmUgdXNpbmcgYW4gZW1wdHkgb3V0cHV0IG1hc2sgKHRoZSBGVyB1c2VzXG4mIzQzOyAqIHRoZSBmaXJzdCBlbmFibGVkIHN5bnRoJiMzOTtzIHBlcmlvZCBmb3IgdGhlIGNvbnZlcnNpb24pLlxuJiM0MzsgKlxuJiM0MzsgKiBSZXR1cm46XG4mIzQzOyAqICogJTBcdFx0XHQtIHN1Y2Nlc3MgKG9yIHBhcnRpYWwgc3VjY2VzcyBpZiBhIGxhdGVyIHN5bnRoIGdyb3VwXG4mIzQzOyAqXHRcdFx0ICBmYWlsZWQgYWZ0ZXIgdGhlIGZpcnN0IHdhcyBhbHJlYWR5IHN0ZXBwZWQpXG4mIzQzOyAqICogJS1FT1BOT1RTVVBQXHQtIG5vIHN5bnRocyBhdmFpbGFibGVcbiYjNDM7ICogKiBuZWdhdGl2ZVx0XHQtIGVycm9yXG4mIzQzOyAqL1xuJiM0MztzdGF0aWMgaW50IHpsMzA3M3hfZHBsbF9wdHBfYWRqdGltZV9waGFzZV9zdGVwKHN0cnVjdCB6bDMwNzN4X2RwbGwgKnpsZHBsbCxcbiYjNDM7XHRcdFx0XHRcdCAgICAgICBzNjQgZGVsdGEpXG4mIzQzO3tcbiYjNDM7XHR1MTYgc3ludGhfbWFza1taTDMwNzNYX05VTV9TWU5USFNdID0ge307XG4mIzQzO1x0c3RydWN0IHpsMzA3M3hfZGV2ICp6bGRldiA9IHpsZHBsbC1cdTAwM2VkZXY7XG4mIzQzO1x0Y29uc3Qgc3RydWN0IHpsMzA3M3hfc3ludGggKnN5bnRoO1xuJiM0MztcdHN0cnVjdCB6bDMwNzN4X2RwbGxfcGluICpwaW47XG4mIzQzO1x0dTMyIGZpcnN0X3N5bnRoX2ZyZXEgPSAwO1xuJiM0MztcdGJvb2wgdG9kX3N0ZXBwZWQgPSBmYWxzZTtcbiYjNDM7XHRzMzIgc3RlcF9jeWNsZXM7XG4mIzQzO1x0dTMyIHN5bnRoX2ZyZXE7XG4mIzQzO1x0aW50IHJjO1xuJiM0MztcdHU4IGk7XG4mIzQzO1xuJiM0MztcdC8qIEJ1aWxkIHBlci1zeW50aCBvdXRwdXQgbWFza3MgZnJvbSByZWdpc3RlcmVkIG91dHB1dCBwaW5zICovXG4mIzQzO1x0bGlzdF9mb3JfZWFjaF9lbnRyeShwaW4sIFx1MDAyNnpsZHBsbC1cdTAwM2VwaW5zLCBsaXN0KSB7XG4mIzQzO1x0XHR1OCBvdXRfaWQsIHN5bnRoX2lkO1xuJiM0MztcbiYjNDM7XHRcdGlmICh6bDMwNzN4X2RwbGxfaXNfaW5wdXRfcGluKHBpbikpXG4mIzQzO1x0XHRcdGNvbnRpbnVlO1xuJiM0MztcbiYjNDM7XHRcdG91dF9pZCA9IHpsMzA3M3hfb3V0cHV0X3Bpbl9vdXRfZ2V0KHBpbi1cdTAwM2VpZCk7XG4mIzQzO1xuJiM0MztcdFx0aWYgKCF6bDMwNzN4X2Rldl9vdXRfaXNfc3RlcHBlZCh6bGRldiwgb3V0X2lkKSlcbiYjNDM7XHRcdFx0Y29udGludWU7XG4mIzQzO1xuJiM0MztcdFx0c3ludGhfaWQgPSB6bDMwNzN4X2Rldl9vdXRfc3ludGhfZ2V0KHpsZGV2LCBvdXRfaWQpO1xuJiM0MztcdFx0aWYgKHN5bnRoX2lkIFx1MDAzZT0gWkwzMDczWF9OVU1fU1lOVEhTKSB7XG4mIzQzO1x0XHRcdGRldl93YXJuKHpsZGV2LVx1MDAzZWRldiwgXCYjMzQ7VW5leHBlY3RlZCBzeW50aCBpZCBmb3IgT1VUJXVcXG5cJiMzNDssXG4mIzQzO1x0XHRcdFx0IG91dF9pZCk7XG4mIzQzO1x0XHRcdGNvbnRpbnVlO1xuJiM0MztcdFx0fVxuJiM0MztcdFx0c3ludGhfbWFza1tzeW50aF9pZF0gfD0gQklUKG91dF9pZCk7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHQvKiBQcm9jZXNzIGVhY2ggc3ludGggZ3JvdXAgKi9cbiYjNDM7XHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBaTDMwNzNYX05VTV9TWU5USFM7IGkmIzQzOyYjNDM7KSB7XG4mIzQzO1x0XHRzeW50aCA9IHpsMzA3M3hfc3ludGhfc3RhdGVfZ2V0KHpsZGV2LCBpKTtcbiYjNDM7XHRcdGlmICghemwzMDczeF9zeW50aF9pc19lbmFibGVkKHN5bnRoKSB8fFxuJiM0MztcdFx0ICAgIHpsMzA3M3hfc3ludGhfZHBsbF9nZXQoc3ludGgpICE9IHpsZHBsbC1cdTAwM2VpZClcbiYjNDM7XHRcdFx0Y29udGludWU7XG4mIzQzO1xuJiM0MztcdFx0c3ludGhfZnJlcSA9IHpsMzA3M3hfc3ludGhfZnJlcV9nZXQoc3ludGgpO1xuJiM0MztcbiYjNDM7XHRcdC8qIFJlbWVtYmVyIGZpcnN0IGVuYWJsZWQgc3ludGggZnJlcSBmb3IgVG9ELW9ubHkgZmFsbGJhY2sgKi9cbiYjNDM7XHRcdGlmICghZmlyc3Rfc3ludGhfZnJlcSlcbiYjNDM7XHRcdFx0Zmlyc3Rfc3ludGhfZnJlcSA9IHN5bnRoX2ZyZXE7XG4mIzQzO1xuJiM0MztcdFx0aWYgKCFzeW50aF9tYXNrW2ldKVxuJiM0MztcdFx0XHRjb250aW51ZTtcbiYjNDM7XG4mIzQzO1x0XHQvKiBTYWZlIGZvciBzMzI6IG1heCBzeW50aCBmcmVxIGlzIDc1MCBNSHogKi9cbiYjNDM7XHRcdHN0ZXBfY3ljbGVzID0gZGl2X3M2NChkZWx0YSAqIHN5bnRoX2ZyZXEsIE5TRUNfUEVSX1NFQyk7XG4mIzQzO1xuJiM0MztcdFx0cmMgPSB6bDMwNzN4X2NoYW5fcGhhc2Vfc3RlcCh6bGRldiwgemxkcGxsLVx1MDAzZWlkLFxuJiM0MztcdFx0XHRcdFx0ICAgICBzeW50aF9tYXNrW2ldLCBzdGVwX2N5Y2xlcyxcbiYjNDM7XHRcdFx0XHRcdCAgICAgIXRvZF9zdGVwcGVkKTtcbiYjNDM7XHRcdGlmIChyYykge1xuJiM0MztcdFx0XHRpZiAodG9kX3N0ZXBwZWQpIHtcbiYjNDM7XHRcdFx0XHRkZXZfd2Fybih6bGRldi1cdTAwM2VkZXYsXG4mIzQzO1x0XHRcdFx0XHQgXCYjMzQ7UGFydGlhbCBwaGFzZSBzdGVwIGZhaWx1cmVcXG5cJiMzNDspO1xuJiM0MztcdFx0XHRcdHJldHVybiAwO1xuJiM0MztcdFx0XHR9XG4mIzQzO1x0XHRcdHJldHVybiByYztcbiYjNDM7XHRcdH1cbiYjNDM7XHRcdHRvZF9zdGVwcGVkID0gdHJ1ZTtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdGlmICghZmlyc3Rfc3ludGhfZnJlcSlcbiYjNDM7XHRcdHJldHVybiAtRU9QTk9UU1VQUDtcbiYjNDM7XG4mIzQzO1x0LyogTm8gZW5hYmxlZCBvdXRwdXRzIGZvdW5kOyBzdGVwIFRvRCBjb3VudGVyIG9ubHkgdXNpbmcgdGhlXG4mIzQzO1x0ICogZmlyc3QgZW5hYmxlZCBzeW50aCYjMzk7cyBwZXJpb2QgKGVtcHR5IG91dHB1dCBtYXNrKS5cbiYjNDM7XHQgKi9cbiYjNDM7XHRpZiAoIXRvZF9zdGVwcGVkKSB7XG4mIzQzO1x0XHRzdGVwX2N5Y2xlcyA9IGRpdl9zNjQoZGVsdGEgKiBmaXJzdF9zeW50aF9mcmVxLCBOU0VDX1BFUl9TRUMpO1xuJiM0MztcdFx0cmV0dXJuIHpsMzA3M3hfY2hhbl9waGFzZV9zdGVwKHpsZGV2LCB6bGRwbGwtXHUwMDNlaWQsIDAsXG4mIzQzO1x0XHRcdFx0XHQgICAgICAgc3RlcF9jeWNsZXMsIHRydWUpO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0cmV0dXJuIDA7XG4gfVxuIFxuIC8qKlxuLSAqIHpsMzA3M3hfZHBsbF9mcmVlIC0gZnJlZSBEUExMIGRldmljZVxuLSAqIEB6bGRwbGw6IHBvaW50ZXIgdG8gemwzMDczeF9kcGxsIHN0cnVjdHVyZVxuJiM0MzsgKiB6bDMwNzN4X2RwbGxfcHRwX2FkanRpbWUgLSBhZGp1c3QgUFRQIGNsb2NrIHRpbWVcbiYjNDM7ICogQGluZm86IFBUUCBjbG9jayBpbmZvXG4mIzQzOyAqIEBkZWx0YTogdGltZSBhZGp1c3RtZW50IGluIG5hbm9zZWNvbmRzXG4gICpcbi0gKiBEZWFsbG9jYXRlcyBnaXZlbiBEUExMIGRldmljZSBwcmV2aW91c2x5IGFsbG9jYXRlZCBieSBAemwzMDczeF9kcGxsX2FsbG9jLlxuJiM0MzsgKiBGb3IgTkNPLCBsYXJnZSBkZWx0YXMgKFx1MDAzZT0gMSBzZWNvbmQpIGFyZSBzcGxpdCBpbnRvIGEgVG9EXG4mIzQzOyAqIHJlYWQtbW9kaWZ5LXdyaXRlIGZvciB0aGUgc2Vjb25kcyBwYXJ0IGFuZCBhbiBvdXRwdXQgcGhhc2Ugc3RlcCBmb3JcbiYjNDM7ICogdGhlIHN1Yi1zZWNvbmQgcmVtYWluZGVyLiBTdWItc2Vjb25kIGRlbHRhcyB1c2UgcGhhc2Ugc3RlcCBkaXJlY3RseSxcbiYjNDM7ICogZmFsbGluZyBiYWNrIHRvIFRvRCByZWFkLW1vZGlmeS13cml0ZSBpZiBwaGFzZSBzdGVwIG9yIFRJRSB3cml0ZVxuJiM0MzsgKiBmYWlscy4gSW4gQVVUTy9SRUZMT0NLIG1vZGVzLCBsYXJnZSBkZWx0YXMgYXJlIHNwbGl0IGludG8gVG9EXG4mIzQzOyAqIHJlYWQtbW9kaWZ5LXdyaXRlIGZvciBzZWNvbmRzIGFuZCBUSUUgd3JpdGUgZm9yIHRoZSBzdWItc2Vjb25kXG4mIzQzOyAqIHJlbWFpbmRlci4gU3ViLXNlY29uZCBkZWx0YXMgdXNlIFRJRSB3cml0ZSBkaXJlY3RseS5cbiYjNDM7ICpcbiYjNDM7ICogSWYgdGhlIHNlY29uZHMgcGFydCB3YXMgYWxyZWFkeSBjb21taXR0ZWQgd2hlbiB0aGUgc3ViLXNlY29uZFxuJiM0MzsgKiBtZWNoYW5pc20gZmFpbHMsIHJldHVybnMgMCB0byBwcmV2ZW50IHRoZSBQVFAgc2Vydm8gZnJvbSByZXRyeWluZ1xuJiM0MzsgKiB0aGUgZnVsbCBkZWx0YSBhbmQgYXBwbHlpbmcgc2Vjb25kcyBhZ2Fpbi5cbiYjNDM7ICpcbiYjNDM7ICogUmV0dXJuOiAwIG9uIHN1Y2Nlc3MgKG9yIHBhcnRpYWwgc3VjY2VzcyksIFx1MDAzYzAgb24gZXJyb3JcbiAgKi9cbi12b2lkXG4temwzMDczeF9kcGxsX2ZyZWUoc3RydWN0IHpsMzA3M3hfZHBsbCAqemxkcGxsKVxuJiM0MztzdGF0aWMgaW50IHpsMzA3M3hfZHBsbF9wdHBfYWRqdGltZShzdHJ1Y3QgcHRwX2Nsb2NrX2luZm8gKmluZm8sIHM2NCBkZWx0YSlcbiB7XG4tXHRXQVJOKHpsZHBsbC1cdTAwM2VkcGxsX2RldiwgXCYjMzQ7RFBMTCBkZXZpY2UgaXMgc3RpbGwgcmVnaXN0ZXJlZFxcblwmIzM0Oyk7XG4mIzQzO1x0c3RydWN0IHpsMzA3M3hfZHBsbCAqemxkcGxsID0gY29udGFpbmVyX29mKGluZm8sIHN0cnVjdCB6bDMwNzN4X2RwbGwsXG4mIzQzO1x0XHRcdFx0XHRcdCAgIHB0cF9pbmZvKTtcbiYjNDM7XHRzdHJ1Y3QgemwzMDczeF9kZXYgKnpsZGV2ID0gemxkcGxsLVx1MDAzZWRldjtcbiYjNDM7XHRjb25zdCBzdHJ1Y3QgemwzMDczeF9jaGFuICpjaGFuO1xuJiM0MztcdGJvb2wgc2VjX2FkanVzdGVkID0gZmFsc2U7XG4mIzQzO1x0c3RydWN0IHRpbWVzcGVjNjQgdHM7XG4mIzQzO1x0aW50IHJjO1xuIFxuLVx0bXV0ZXhfZGVzdHJveShcdTAwMjZ6bGRwbGwtXHUwMDNlbG9jayk7XG4tXHRrZnJlZSh6bGRwbGwpO1xuJiM0MztcdGlmICghZGVsdGEpXG4mIzQzO1x0XHRyZXR1cm4gMDtcbiYjNDM7XG4mIzQzO1x0Z3VhcmQobXV0ZXgpKFx1MDAyNnpsZHBsbC1cdTAwM2Vsb2NrKTtcbiYjNDM7XG4mIzQzO1x0LyogTW9kZXMgd2l0aG91dCBwaGFzZSBzdGVwIG9yIFRJRSB1c2UgcGxhaW4gVG9EIGFkanVzdCAqL1xuJiM0MztcdGNoYW4gPSB6bDMwNzN4X2NoYW5fc3RhdGVfZ2V0KHpsZGV2LCB6bGRwbGwtXHUwMDNlaWQpO1xuJiM0MztcdGlmICghemwzMDczeF9jaGFuX21vZGVfaXNfbmNvKGNoYW4pIFx1MDAyNlx1MDAyNlxuJiM0MztcdCAgICAhemwzMDczeF9jaGFuX21vZGVfc3VwcG9ydHNfdGllKGNoYW4pKVxuJiM0MztcdFx0cmV0dXJuIHpsMzA3M3hfY2hhbl90b2RfYWRqdXN0KHpsZGV2LCB6bGRwbGwtXHUwMDNlaWQsXG4mIzQzO1x0XHRcdFx0XHQgICAgICAgbnNfdG9fdGltZXNwZWM2NChkZWx0YSkpO1xuJiM0MztcbiYjNDM7XHQvKiBTcGxpdCBvZmYgc2Vjb25kcyB2aWEgVG9EIHJlYWQtbW9kaWZ5LXdyaXRlIHNvIHRoZSBzdWItc2Vjb25kXG4mIzQzO1x0ICogcmVtYWluZGVyIGNhbiBiZSBhcHBsaWVkIHRocm91Z2ggdGhlIG91dHB1dC1jb2hlcmVudCBtZWNoYW5pc21cbiYjNDM7XHQgKiAocGhhc2Ugc3RlcCBvciBUSUUgd3JpdGUpLlxuJiM0MztcdCAqL1xuJiM0MztcdGlmIChkZWx0YSBcdTAwM2U9IE5TRUNfUEVSX1NFQyB8fCBkZWx0YSBcdTAwM2M9IC1OU0VDX1BFUl9TRUMpIHtcbiYjNDM7XHRcdHMzMiByZW1haW5kZXI7XG4mIzQzO1xuJiM0MztcdFx0dHMudHZfc2VjID0gZGl2X3M2NF9yZW0oZGVsdGEsIE5TRUNfUEVSX1NFQywgXHUwMDI2cmVtYWluZGVyKTtcbiYjNDM7XHRcdHRzLnR2X25zZWMgPSAwO1xuJiM0MztcdFx0ZGVsdGEgPSByZW1haW5kZXI7XG4mIzQzO1xuJiM0MztcdFx0cmMgPSB6bDMwNzN4X2NoYW5fdG9kX2FkanVzdCh6bGRldiwgemxkcGxsLVx1MDAzZWlkLCB0cyk7XG4mIzQzO1x0XHRpZiAocmMpXG4mIzQzO1x0XHRcdHJldHVybiByYztcbiYjNDM7XG4mIzQzO1x0XHQvKiBObyBzdWItc2Vjb25kIHJlbWFpbmRlciwgZG9uZSAqL1xuJiM0MztcdFx0aWYgKCFkZWx0YSlcbiYjNDM7XHRcdFx0cmV0dXJuIDA7XG4mIzQzO1xuJiM0MztcdFx0LyogV2FpdCBmb3IgdGhlIFRvRCB3cml0ZSB0byBiZSBhcHBsaWVkIGF0IHRoZSAxIEh6IGVkZ2VcbiYjNDM7XHRcdCAqIGJlZm9yZSBpc3N1aW5nIHBoYXNlIHN0ZXAgb3IgVElFIHdyaXRlLCBzbyB0aGUgcGVuZGluZ1xuJiM0MztcdFx0ICogV1JfTkVYVF8xSFogZG9lcyBub3Qgb3ZlcndyaXRlIHRoZSBzdWItc2Vjb25kIGFkanVzdG1lbnQuXG4mIzQzO1x0XHQgKi9cbiYjNDM7XHRcdHJjID0gemwzMDczeF9jaGFuX3RvZF9yZWFkeV93YWl0KHpsZGV2LCB6bGRwbGwtXHUwMDNlaWQpO1xuJiM0MztcdFx0aWYgKHJjKVxuJiM0MztcdFx0XHRyZXR1cm4gcmM7XG4mIzQzO1xuJiM0MztcdFx0c2VjX2FkanVzdGVkID0gdHJ1ZTtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdC8qIEFwcGx5IHN1Yi1zZWNvbmQgZGVsdGEgdmlhIHBoYXNlIHN0ZXAgKE5DTykgb3IgVElFIHdyaXRlICovXG4mIzQzO1x0aWYgKHpsMzA3M3hfY2hhbl9tb2RlX2lzX25jbyhjaGFuKSkge1xuJiM0MztcdFx0cmMgPSB6bDMwNzN4X2RwbGxfcHRwX2FkanRpbWVfcGhhc2Vfc3RlcCh6bGRwbGwsIGRlbHRhKTtcbiYjNDM7XHRcdGlmICghcmMpXG4mIzQzO1x0XHRcdHJldHVybiAwO1xuJiM0MztcdH0gZWxzZSB7XG4mIzQzO1x0XHRyYyA9IHpsMzA3M3hfY2hhbl90aWVfd3JpdGUoemxkZXYsIHpsZHBsbC1cdTAwM2VpZCwgZGVsdGEpO1xuJiM0MztcdFx0aWYgKCFyYylcbiYjNDM7XHRcdFx0cmV0dXJuIDA7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHQvKiBQaGFzZSBzdGVwIG9yIFRJRSB3cml0ZSBmYWlsZWQsIGZhbGwgYmFjayB0byBUb0QgYWRqdXN0ICovXG4mIzQzO1x0cmMgPSB6bDMwNzN4X2NoYW5fdG9kX2FkanVzdCh6bGRldiwgemxkcGxsLVx1MDAzZWlkLFxuJiM0MztcdFx0XHRcdCAgICAgbnNfdG9fdGltZXNwZWM2NChkZWx0YSkpO1xuJiM0MztcbiYjNDM7XHQvKiBJbiB0aGUgdW5saWtlbHkgZXZlbnQgdGhhdCBib3RoIHBoYXNlIHN0ZXAvVElFIHdyaXRlIGFuZCBmYWxsYmFja1xuJiM0MztcdCAqIFRvRCBhZGp1c3QgZmFpbCBhZnRlciBzZWNvbmRzIHdlcmUgYWxyZWFkeSBjb21taXR0ZWQsIHJldHVyblxuJiM0MztcdCAqIHN1Y2Nlc3MgdG8gcHJldmVudCB0aGUgUFRQIHNlcnZvIGZyb20gcmV0cnlpbmcgdGhlIGZ1bGwgZGVsdGEgYW5kXG4mIzQzO1x0ICogYXBwbHlpbmcgc2Vjb25kcyBhZ2Fpbi4gVGhlIHN1Yi1zZWNvbmQgcmVzaWR1YWwgd2lsbCBzZWxmLWNvcnJlY3RcbiYjNDM7XHQgKiBpbiB0aGUgbmV4dCBzZXJ2byBjeWNsZS5cbiYjNDM7XHQgKi9cbiYjNDM7XHRpZiAocmMgXHUwMDI2XHUwMDI2IHNlY19hZGp1c3RlZCkge1xuJiM0MztcdFx0ZGV2X3dhcm4oemxkZXYtXHUwMDNlZGV2LFxuJiM0MztcdFx0XHQgXCYjMzQ7U3ViLXNlY29uZCBhZGp1c3RtZW50IGZhaWxlZCBhZnRlciBzZWNvbmRzIGFwcGxpZWRcXG5cJiMzNDspO1xuJiM0MztcdFx0cmV0dXJuIDA7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRyZXR1cm4gcmM7XG4mIzQzO31cbiYjNDM7XG4mIzQzOy8qKlxuJiM0MzsgKiB6bDMwNzN4X2RwbGxfcHRwX2FkamZpbmUgLSBhZGp1c3QgUFRQIGNsb2NrIGZyZXF1ZW5jeVxuJiM0MzsgKiBAaW5mbzogUFRQIGNsb2NrIGluZm9cbiYjNDM7ICogQHNjYWxlZF9wcG06IGZyZXF1ZW5jeSBhZGp1c3RtZW50IGluIHNjYWxlZCBwcG0gKHBwbSAqIDJeMTYpXG4mIzQzOyAqXG4mIzQzOyAqIE9ubHkgc3VwcG9ydGVkIGZvciBOQ08uIFdyaXRlcyB0aGUgZGVsdGEgZnJlcXVlbmN5IG9mZnNldCByZWdpc3Rlci5cbiYjNDM7ICpcbiYjNDM7ICogUmV0dXJuOlxuJiM0MzsgKiAqICUwXHRcdFx0LSBzdWNjZXNzIG9yIEBzY2FsZWRfcHBtIGlzIHplcm8gKG5vLW9wKVxuJiM0MzsgKiAqICUtRU9QTk9UU1VQUFx0LSBOQ08gcGluIGlzIG5vdCBjb25uZWN0ZWQgYW5kIEBzY2FsZWRfcHBtIGlzIG5vbi16ZXJvXG4mIzQzOyAqICogbmVnYXRpdmVcdFx0LSBvdGhlciBlcnJvclxuJiM0MzsgKi9cbiYjNDM7c3RhdGljIGludFxuJiM0Mzt6bDMwNzN4X2RwbGxfcHRwX2FkamZpbmUoc3RydWN0IHB0cF9jbG9ja19pbmZvICppbmZvLCBsb25nIHNjYWxlZF9wcG0pXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgemwzMDczeF9kcGxsICp6bGRwbGwgPSBjb250YWluZXJfb2YoaW5mbywgc3RydWN0IHpsMzA3M3hfZHBsbCxcbiYjNDM7XHRcdFx0XHRcdFx0ICAgcHRwX2luZm8pO1xuJiM0MztcdGNvbnN0IHN0cnVjdCB6bDMwNzN4X2NoYW4gKmNoYW47XG4mIzQzO1x0czY0IG9mZnNldDtcbiYjNDM7XG4mIzQzO1x0LyogQ29udmVydCBzY2FsZWRfcHBtIHRvIGRmX29mZnNldCBpbiAyXi00OCBzdGVwczpcbiYjNDM7XHQgKiAgIGRmX29mZnNldCA9IC0oc2NhbGVkX3BwbSAqIDJeMzIpIC8gMTBeNlxuJiM0MztcdCAqXG4mIzQzO1x0ICogU2ltcGxpZnkgdG8gYXZvaWQgb3ZlcmZsb3c6XG4mIzQzO1x0ICogICBkZl9vZmZzZXQgPSAtKHNjYWxlZF9wcG0gKiAyXjI2KSAvIDVeNlxuJiM0MztcdCAqICAgZGZfb2Zmc2V0ID0gLShzY2FsZWRfcHBtICogNjcxMDg4NjQpIC8gMTU2MjVcbiYjNDM7XHQgKi9cbiYjNDM7XHRvZmZzZXQgPSAtZGl2X3M2NCgoczY0KXNjYWxlZF9wcG0gKiA2NzEwODg2NExMLCAxNTYyNSk7XG4mIzQzO1xuJiM0MztcdGd1YXJkKG11dGV4KShcdTAwMjZ6bGRwbGwtXHUwMDNlbG9jayk7XG4mIzQzO1xuJiM0MztcdGNoYW4gPSB6bDMwNzN4X2NoYW5fc3RhdGVfZ2V0KHpsZHBsbC1cdTAwM2VkZXYsIHpsZHBsbC1cdTAwM2VpZCk7XG4mIzQzO1x0aWYgKCF6bDMwNzN4X2NoYW5fbW9kZV9pc19uY28oY2hhbikpXG4mIzQzO1x0XHRyZXR1cm4gc2NhbGVkX3BwbSA/IC1FT1BOT1RTVVBQIDogMDtcbiYjNDM7XHRpZiAob2Zmc2V0ID09IGNoYW4tXHUwMDNlZGZfb2Zmc2V0KVxuJiM0MztcdFx0cmV0dXJuIDA7XG4mIzQzO1xuJiM0MztcdHJldHVybiB6bDMwNzN4X2NoYW5fZGZfb2Zmc2V0X3NldCh6bGRwbGwtXHUwMDNlZGV2LCB6bGRwbGwtXHUwMDNlaWQsIG9mZnNldCk7XG4mIzQzO31cbiYjNDM7XG4mIzQzOy8qKlxuJiM0MzsgKiB6bDMwNzN4X2RwbGxfcHRwX2FkanBoYXNlIC0gYWRqdXN0IFBUUCBjbG9jayBwaGFzZVxuJiM0MzsgKiBAaW5mbzogUFRQIGNsb2NrIGluZm9cbiYjNDM7ICogQGRlbHRhOiBwaGFzZSBhZGp1c3RtZW50IGluIG5hbm9zZWNvbmRzXG4mIzQzOyAqXG4mIzQzOyAqIE9ubHkgc3VwcG9ydGVkIGluIEFVVE8gYW5kIFJFRkxPQ0sgbW9kZXMuIFVzZXMgVElFIHdyaXRlIGZvclxuJiM0MzsgKiBuYW5vc2Vjb25kIHJlc29sdXRpb24gcGhhc2UgYWRqdXN0bWVudC5cbiYjNDM7ICpcbiYjNDM7ICogUmV0dXJuOlxuJiM0MzsgKiAqICUwXHRcdFx0LSBzdWNjZXNzIG9yIEBkZWx0YSBpcyB6ZXJvIChuby1vcClcbiYjNDM7ICogKiAlLUVPUE5PVFNVUFBcdC0gbW9kZSBkb2VzIG5vdCBzdXBwb3J0IFRJRSBhbmQgQGRlbHRhIGlzIG5vbi16ZXJvXG4mIzQzOyAqICogbmVnYXRpdmVcdFx0LSBvdGhlciBlcnJvclxuJiM0MzsgKi9cbiYjNDM7c3RhdGljIGludCB6bDMwNzN4X2RwbGxfcHRwX2FkanBoYXNlKHN0cnVjdCBwdHBfY2xvY2tfaW5mbyAqaW5mbywgczMyIGRlbHRhKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IHpsMzA3M3hfZHBsbCAqemxkcGxsID0gY29udGFpbmVyX29mKGluZm8sIHN0cnVjdCB6bDMwNzN4X2RwbGwsXG4mIzQzO1x0XHRcdFx0XHRcdCAgIHB0cF9pbmZvKTtcbiYjNDM7XHRzdHJ1Y3QgemwzMDczeF9kZXYgKnpsZGV2ID0gemxkcGxsLVx1MDAzZWRldjtcbiYjNDM7XHRjb25zdCBzdHJ1Y3QgemwzMDczeF9jaGFuICpjaGFuO1xuJiM0MztcbiYjNDM7XHRpZiAoIWRlbHRhKVxuJiM0MztcdFx0cmV0dXJuIDA7XG4mIzQzO1xuJiM0MztcdGd1YXJkKG11dGV4KShcdTAwMjZ6bGRwbGwtXHUwMDNlbG9jayk7XG4mIzQzO1xuJiM0MztcdGNoYW4gPSB6bDMwNzN4X2NoYW5fc3RhdGVfZ2V0KHpsZGV2LCB6bGRwbGwtXHUwMDNlaWQpO1xuJiM0MztcbiYjNDM7XHRpZiAoIXpsMzA3M3hfY2hhbl9tb2RlX3N1cHBvcnRzX3RpZShjaGFuKSlcbiYjNDM7XHRcdHJldHVybiAtRU9QTk9UU1VQUDtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIHpsMzA3M3hfY2hhbl90aWVfd3JpdGUoemxkZXYsIHpsZHBsbC1cdTAwM2VpZCwgZGVsdGEpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgczMyXG4mIzQzO3psMzA3M3hfZHBsbF9wdHBfZ2V0bWF4cGhhc2Uoc3RydWN0IHB0cF9jbG9ja19pbmZvICppbmZvIF9fYWx3YXlzX3VudXNlZClcbiYjNDM7e1xuJiM0MztcdC8qIEhXIGxpbWl0cyBUSUUgd3JpdGUgdG8gJiM0MzstMSBzZWNvbmQuIFJldHVybiB0aGUgY29uc3RhbnQgSFdcbiYjNDM7XHQgKiBsaW1pdCBhbmQgbGV0IGFkanBoYXNlIGhhbmRsZSBtb2RlLXNwZWNpZmljIGNoZWNrcy5cbiYjNDM7XHQgKi9cbiYjNDM7XHRyZXR1cm4gTlNFQ19QRVJfU0VDIC0gMTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGNvbnN0IHN0cnVjdCBwdHBfY2xvY2tfaW5mbyB6bDMwNzN4X2RwbGxfcHRwX2Nsb2NrX2luZm8gPSB7XG4mIzQzO1x0Lm93bmVyXHRcdD0gVEhJU19NT0RVTEUsXG4mIzQzO1x0Lm1heF9hZGpcdD0gWkwzMDczWF9EUExMX1BUUF9NQVhfQURKLFxuJiM0MztcdC5nZXR0aW1leDY0XHQ9IHpsMzA3M3hfZHBsbF9wdHBfZ2V0dGltZXg2NCxcbiYjNDM7XHQuc2V0dGltZTY0XHQ9IHpsMzA3M3hfZHBsbF9wdHBfc2V0dGltZTY0LFxuJiM0MztcdC5hZGp0aW1lXHQ9IHpsMzA3M3hfZHBsbF9wdHBfYWRqdGltZSxcbiYjNDM7XHQuYWRqZmluZVx0PSB6bDMwNzN4X2RwbGxfcHRwX2FkamZpbmUsXG4mIzQzO1x0LmFkanBoYXNlXHQ9IHpsMzA3M3hfZHBsbF9wdHBfYWRqcGhhc2UsXG4mIzQzO1x0LmdldG1heHBoYXNlXHQ9IHpsMzA3M3hfZHBsbF9wdHBfZ2V0bWF4cGhhc2UsXG4mIzQzO307XG4mIzQzO1xuJiM0MzsvKipcbiYjNDM7ICogemwzMDczeF9kcGxsX3B0cF9yZWdpc3RlciAtIHJlZ2lzdGVyIFBUUCBjbG9jayBmb3IgYSBEUExMIGNoYW5uZWxcbiYjNDM7ICogQHpsZHBsbDogRFBMTCBjaGFubmVsIHRvIHJlZ2lzdGVyIFBUUCBjbG9jayBmb3JcbiYjNDM7ICpcbiYjNDM7ICogUmV0dXJuOiAwIG9uIHN1Y2Nlc3MsIFx1MDAzYzAgb24gZXJyb3JcbiYjNDM7ICovXG4mIzQzO3N0YXRpYyBpbnQgemwzMDczeF9kcGxsX3B0cF9yZWdpc3RlcihzdHJ1Y3QgemwzMDczeF9kcGxsICp6bGRwbGwpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgemwzMDczeF9kZXYgKnpsZGV2ID0gemxkcGxsLVx1MDAzZWRldjtcbiYjNDM7XHRzdHJ1Y3QgcHRwX2Nsb2NrICpwdHBfY2xvY2s7XG4mIzQzO1xuJiM0MztcdHpsZHBsbC1cdTAwM2VwdHBfaW5mbyA9IHpsMzA3M3hfZHBsbF9wdHBfY2xvY2tfaW5mbztcbiYjNDM7XHRzbnByaW50Zih6bGRwbGwtXHUwMDNlcHRwX2luZm8ubmFtZSwgc2l6ZW9mKHpsZHBsbC1cdTAwM2VwdHBfaW5mby5uYW1lKSxcbiYjNDM7XHRcdCBcJiMzNDslcy1kcGxsJXVcJiMzNDssIGRldl9uYW1lKHpsZGV2LVx1MDAzZWRldiksIHpsZHBsbC1cdTAwM2VpZCk7XG4mIzQzO1xuJiM0MztcdHB0cF9jbG9jayA9IHB0cF9jbG9ja19yZWdpc3RlcihcdTAwMjZ6bGRwbGwtXHUwMDNlcHRwX2luZm8sIHpsZGV2LVx1MDAzZWRldik7XG4mIzQzO1x0aWYgKElTX0VSUihwdHBfY2xvY2spKSB7XG4mIzQzO1x0XHRkZXZfZXJyKHpsZGV2LVx1MDAzZWRldiwgXCYjMzQ7RmFpbGVkIHRvIHJlZ2lzdGVyIFBUUCBjbG9jayBmb3IgRFBMTCV1XFxuXCYjMzQ7LFxuJiM0MztcdFx0XHR6bGRwbGwtXHUwMDNlaWQpO1xuJiM0MztcdFx0cmV0dXJuIFBUUl9FUlIocHRwX2Nsb2NrKTtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdHpsZHBsbC1cdTAwM2VwdHBfY2xvY2sgPSBwdHBfY2xvY2s7XG4mIzQzO1xuJiM0MztcdHJldHVybiAwO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MzsvKipcbiYjNDM7ICogemwzMDczeF9kcGxsX3B0cF91bnJlZ2lzdGVyIC0gdW5yZWdpc3RlciBQVFAgY2xvY2sgZm9yIGEgRFBMTCBjaGFubmVsXG4mIzQzOyAqIEB6bGRwbGw6IERQTEwgY2hhbm5lbCB0byB1bnJlZ2lzdGVyIFBUUCBjbG9jayBmb3JcbiYjNDM7ICovXG4mIzQzO3N0YXRpYyB2b2lkIHpsMzA3M3hfZHBsbF9wdHBfdW5yZWdpc3RlcihzdHJ1Y3QgemwzMDczeF9kcGxsICp6bGRwbGwpXG4mIzQzO3tcbiYjNDM7XHRpZiAoIUlTX0VSUl9PUl9OVUxMKHpsZHBsbC1cdTAwM2VwdHBfY2xvY2spKSB7XG4mIzQzO1x0XHRwdHBfY2xvY2tfdW5yZWdpc3Rlcih6bGRwbGwtXHUwMDNlcHRwX2Nsb2NrKTtcbiYjNDM7XHRcdHpsZHBsbC1cdTAwM2VwdHBfY2xvY2sgPSBOVUxMO1xuJiM0MztcdH1cbiB9XG4gXG4gLyoqXG5AQCAtMjM5OCw2ICYjNDM7MjczOSw0NyBAQCB6bDMwNzN4X2RwbGxfcmVmX3N5bmNfcGFpcnNfcmVnaXN0ZXIoc3RydWN0IHpsMzA3M3hfZHBsbCAqemxkcGxsKVxuIFx0cmV0dXJuIDA7XG4gfVxuIFxuJiM0MzsvKipcbiYjNDM7ICogemwzMDczeF9kcGxsX2FsbG9jIC0gYWxsb2NhdGUgRFBMTCBkZXZpY2VcbiYjNDM7ICogQHpsZGV2OiBwb2ludGVyIHRvIHpsMzA3M3ggZGV2aWNlXG4mIzQzOyAqIEBjaDogRFBMTCBjaGFubmVsIG51bWJlclxuJiM0MzsgKlxuJiM0MzsgKiBBbGxvY2F0ZXMgRFBMTCBkZXZpY2Ugc3RydWN0dXJlIGZvciBnaXZlbiBEUExMIGNoYW5uZWwuXG4mIzQzOyAqXG4mIzQzOyAqIFJldHVybjogcG9pbnRlciB0byBEUExMIGRldmljZSBvbiBzdWNjZXNzLCBlcnJvciBwb2ludGVyIG9uIGVycm9yXG4mIzQzOyAqL1xuJiM0MztzdHJ1Y3QgemwzMDczeF9kcGxsICpcbiYjNDM7emwzMDczeF9kcGxsX2FsbG9jKHN0cnVjdCB6bDMwNzN4X2RldiAqemxkZXYsIHU4IGNoKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IHpsMzA3M3hfZHBsbCAqemxkcGxsO1xuJiM0MztcbiYjNDM7XHR6bGRwbGwgPSBremFsbG9jX29iaigqemxkcGxsKTtcbiYjNDM7XHRpZiAoIXpsZHBsbClcbiYjNDM7XHRcdHJldHVybiBFUlJfUFRSKC1FTk9NRU0pO1xuJiM0MztcbiYjNDM7XHR6bGRwbGwtXHUwMDNlZGV2ID0gemxkZXY7XG4mIzQzO1x0emxkcGxsLVx1MDAzZWlkID0gY2g7XG4mIzQzO1x0bXV0ZXhfaW5pdChcdTAwMjZ6bGRwbGwtXHUwMDNlbG9jayk7XG4mIzQzO1x0SU5JVF9MSVNUX0hFQUQoXHUwMDI2emxkcGxsLVx1MDAzZXBpbnMpO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gemxkcGxsO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MzsvKipcbiYjNDM7ICogemwzMDczeF9kcGxsX2ZyZWUgLSBmcmVlIERQTEwgZGV2aWNlXG4mIzQzOyAqIEB6bGRwbGw6IHBvaW50ZXIgdG8gemwzMDczeF9kcGxsIHN0cnVjdHVyZVxuJiM0MzsgKlxuJiM0MzsgKiBEZWFsbG9jYXRlcyBnaXZlbiBEUExMIGRldmljZSBwcmV2aW91c2x5IGFsbG9jYXRlZCBieSBAemwzMDczeF9kcGxsX2FsbG9jLlxuJiM0MzsgKi9cbiYjNDM7dm9pZFxuJiM0Mzt6bDMwNzN4X2RwbGxfZnJlZShzdHJ1Y3QgemwzMDczeF9kcGxsICp6bGRwbGwpXG4mIzQzO3tcbiYjNDM7XHRXQVJOKHpsZHBsbC1cdTAwM2VkcGxsX2RldiwgXCYjMzQ7RFBMTCBkZXZpY2UgaXMgc3RpbGwgcmVnaXN0ZXJlZFxcblwmIzM0Oyk7XG4mIzQzO1xuJiM0MztcdG11dGV4X2Rlc3Ryb3koXHUwMDI2emxkcGxsLVx1MDAzZWxvY2spO1xuJiM0MztcdGtmcmVlKHpsZHBsbCk7XG4mIzQzO31cbiYjNDM7XG4gLyoqXG4gICogemwzMDczeF9kcGxsX3JlZ2lzdGVyIC0gcmVnaXN0ZXIgRFBMTCBkZXZpY2UgYW5kIGFsbCBpdHMgcGluc1xuICAqIEB6bGRwbGw6IHBvaW50ZXIgdG8gemwzMDczeF9kcGxsIHN0cnVjdHVyZVxuQEAgLTI0MjgsNiAmIzQzOzI4MTAsMTMgQEAgemwzMDczeF9kcGxsX3JlZ2lzdGVyKHN0cnVjdCB6bDMwNzN4X2RwbGwgKnpsZHBsbClcbiBcdFx0cmV0dXJuIHJjO1xuIFx0fVxuIFxuJiM0MztcdHJjID0gemwzMDczeF9kcGxsX3B0cF9yZWdpc3Rlcih6bGRwbGwpO1xuJiM0MztcdGlmIChyYykge1xuJiM0MztcdFx0emwzMDczeF9kcGxsX3BpbnNfdW5yZWdpc3Rlcih6bGRwbGwpO1xuJiM0MztcdFx0emwzMDczeF9kcGxsX2RldmljZV91bnJlZ2lzdGVyKHpsZHBsbCk7XG4mIzQzO1x0XHRyZXR1cm4gcmM7XG4mIzQzO1x0fVxuJiM0MztcbiBcdHJldHVybiAwO1xuIH1cbiBcbkBAIC0yNDQxLDcgJiM0MzsyODMwLDcgQEAgemwzMDczeF9kcGxsX3JlZ2lzdGVyKHN0cnVjdCB6bDMwNzN4X2RwbGwgKnpsZHBsbClcbiB2b2lkXG4gemwzMDczeF9kcGxsX3VucmVnaXN0ZXIoc3RydWN0IHpsMzA3M3hfZHBsbCAqemxkcGxsKVxuIHtcbi1cdC8qIFVucmVnaXN0ZXIgYWxsIHBpbnMgYW5kIGRwbGwgKi9cbiYjNDM7XHR6bDMwNzN4X2RwbGxfcHRwX3VucmVnaXN0ZXIoemxkcGxsKTtcbiBcdHpsMzA3M3hfZHBsbF9waW5zX3VucmVnaXN0ZXIoemxkcGxsKTtcbiBcdHpsMzA3M3hfZHBsbF9kZXZpY2VfdW5yZWdpc3Rlcih6bGRwbGwpO1xuIH1cbmRpZmYgLS1naXQgYS9kcml2ZXJzL2RwbGwvemwzMDczeC9kcGxsLmggYi9kcml2ZXJzL2RwbGwvemwzMDczeC9kcGxsLmhcbmluZGV4IGZhZWJjNDAyYmExYjcuLjk5MzIyMWRjNjMyNDkgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL2RwbGwvemwzMDczeC9kcGxsLmhcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvZHBsbC96bDMwNzN4L2RwbGwuaFxuQEAgLTUsNiAmIzQzOzUsNyBAQFxuIFxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2RwbGwuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2xpc3QuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC9wdHBfY2xvY2tfa2VybmVsLmhcdTAwM2VcbiBcbiAjaW5jbHVkZSBcJiMzNDtjb3JlLmhcJiMzNDtcbiBcbkBAIC0yMiw2ICYjNDM7MjMsOCBAQFxuICAqIEB0eXBlOiBEUExMIHR5cGUgKFBQUyBvciBFRUMpXG4gICogQGxvY2tfc3RhdHVzOiBsYXN0IHNhdmVkIERQTEwgbG9jayBzdGF0dXNcbiAgKiBAcGluczogbGlzdCBvZiBwaW5zXG4mIzQzOyAqIEBwdHBfaW5mbzogUFRQIGNsb2NrIGluZm9cbiYjNDM7ICogQHB0cF9jbG9jazogcmVnaXN0ZXJlZCBQVFAgY2xvY2sgKG9yIE5VTEwpXG4gICovXG4gc3RydWN0IHpsMzA3M3hfZHBsbCB7XG4gXHRzdHJ1Y3QgbGlzdF9oZWFkXHRcdGxpc3Q7XG5AQCAtMzYsNiAmIzQzOzM5LDggQEAgc3RydWN0IHpsMzA3M3hfZHBsbCB7XG4gXHRlbnVtIGRwbGxfdHlwZVx0XHRcdHR5cGU7XG4gXHRlbnVtIGRwbGxfbG9ja19zdGF0dXNcdFx0bG9ja19zdGF0dXM7XG4gXHRzdHJ1Y3QgbGlzdF9oZWFkXHRcdHBpbnM7XG4mIzQzO1x0c3RydWN0IHB0cF9jbG9ja19pbmZvXHRcdHB0cF9pbmZvO1xuJiM0MztcdHN0cnVjdCBwdHBfY2xvY2tcdFx0KnB0cF9jbG9jaztcbiB9O1xuIFxuIHN0cnVjdCB6bDMwNzN4X2RwbGwgKnpsMzA3M3hfZHBsbF9hbGxvYyhzdHJ1Y3QgemwzMDczeF9kZXYgKnpsZGV2LCB1OCBjaCk7XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9kcGxsL3psMzA3M3gvcmVncy5oIGIvZHJpdmVycy9kcGxsL3psMzA3M3gvcmVncy5oXG5pbmRleCBiNzBlYWQ3ZDQ0OTViLi5mM2E1ZTEyMTVhYTM2IDEwMDY0NFxuLS0tIGEvZHJpdmVycy9kcGxsL3psMzA3M3gvcmVncy5oXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL2RwbGwvemwzMDczeC9yZWdzLmhcbkBAIC0xNzksNiAmIzQzOzE3OSwyMCBAQFxuICNkZWZpbmUgWkxfRFBMTF9ERl9SRUFEX0NNRFx0XHRcdEdFTk1BU0soMiwgMClcbiAjZGVmaW5lIFpMX0RQTExfREZfUkVBRF9DTURfQUNDX0lcdFx0NFxuIFxuJiM0MzsjZGVmaW5lIFpMX1JFR19EUExMX1RJRV9DVFJMXHRcdFx0WkxfUkVHKDUsIDB4MzAsIDEpXG4mIzQzOyNkZWZpbmUgWkxfRFBMTF9USUVfQ1RSTF9PUFx0XHRcdEdFTk1BU0soMiwgMClcbiYjNDM7I2RlZmluZSBaTF9EUExMX1RJRV9DVFJMX09QX1dSXHRcdFx0NFxuJiM0MztcbiYjNDM7I2RlZmluZSBaTF9SRUdfRFBMTF9USUVfQ1RSTF9NQVNLXHRcdFpMX1JFRyg1LCAweDMxLCAxKVxuJiM0MztcbiYjNDM7I2RlZmluZSBaTF9SRUdfRFBMTF9UT0RfQ1RSTChfaWR4KVx0XHRcdFx0XHRcXFxuJiM0MztcdFpMX1JFR19JRFgoX2lkeCwgNSwgMHgzOCwgMSwgWkwzMDczWF9NQVhfQ0hBTk5FTFMsIDEpXG4mIzQzOyNkZWZpbmUgWkxfRFBMTF9UT0RfQ1RSTF9TRU1cdFx0XHRCSVQoNClcbiYjNDM7I2RlZmluZSBaTF9EUExMX1RPRF9DVFJMX0NNRFx0XHRcdEdFTk1BU0soMywgMClcbiYjNDM7I2RlZmluZSBaTF9EUExMX1RPRF9DVFJMX0NNRF9XUl9ORVhUXzFIWlx0MVxuJiM0MzsjZGVmaW5lIFpMX0RQTExfVE9EX0NUUkxfQ01EX1JEX0NVUlJFTlRcdFx0OFxuJiM0MzsjZGVmaW5lIFpMX0RQTExfVE9EX0NUUkxfQ01EX1JEX05FWFRfMUhaXHQ5XG4mIzQzO1xuICNkZWZpbmUgWkxfUkVHX0RQTExfTUVBU19DVFJMXHRcdFx0WkxfUkVHKDUsIDB4NTAsIDEpXG4gI2RlZmluZSBaTF9EUExMX01FQVNfQ1RSTF9FTlx0XHRcdEJJVCgwKVxuICNkZWZpbmUgWkxfRFBMTF9NRUFTX0NUUkxfQVZHX0ZBQ1RPUlx0XHRHRU5NQVNLKDcsIDQpXG5AQCAtMTkzLDYgJiM0MzsyMDcsOSBAQFxuIFxuIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXG4gICogUmVnaXN0ZXIgUGFnZXMgNi03LCBEUExMIERhdGFcbiYjNDM7ICpcbiYjNDM7ICogUGVyLWNoYW5uZWwgcmVnaXN0ZXJzIHdpdGggc3RyaWRlIDB4MjAuIENoYW5uZWxzIDAtMyByZXNpZGUgb24gcGFnZSA2LFxuJiM0MzsgKiBjaGFubmVsIDQgb24gcGFnZSA3LlxuICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xuIFxuICNkZWZpbmUgWkxfUkVHX0RQTExfREZfT0ZGU0VUXzAzKF9pZHgpXHRcdFx0XHRcdFxcXG5AQCAtMjAyLDYgJiM0MzsyMTksMjQgQEBcbiBcdCgoX2lkeCkgXHUwMDNjIDQgPyBaTF9SRUdfRFBMTF9ERl9PRkZTRVRfMDMoX2lkeCkgOiBaTF9SRUdfRFBMTF9ERl9PRkZTRVRfNClcbiAjZGVmaW5lIFpMX0RQTExfREZfT0ZGU0VUX1VOS05PV05cdFM2NF9NSU5cbiBcbiYjNDM7I2RlZmluZSBaTF9SRUdfRFBMTF9USUVfREFUQV8wMyhfaWR4KVx0XHRcdFx0XHRcXFxuJiM0MztcdFpMX1JFR19JRFgoX2lkeCwgNiwgMHgwQywgNiwgNCwgMHgyMClcbiYjNDM7I2RlZmluZSBaTF9SRUdfRFBMTF9USUVfREFUQV80XHRcdFx0WkxfUkVHKDcsIDB4MEMsIDYpXG4mIzQzOyNkZWZpbmUgWkxfUkVHX0RQTExfVElFX0RBVEEoX2lkeClcdFx0XHRcdFx0XFxcbiYjNDM7XHQoKF9pZHgpIFx1MDAzYyA0ID8gWkxfUkVHX0RQTExfVElFX0RBVEFfMDMoX2lkeCkgOiBaTF9SRUdfRFBMTF9USUVfREFUQV80KVxuJiM0MztcbiYjNDM7I2RlZmluZSBaTF9SRUdfRFBMTF9UT0RfU0VDXzAzKF9pZHgpXHRcdFx0XHRcdFxcXG4mIzQzO1x0WkxfUkVHX0lEWChfaWR4LCA2LCAweDEyLCA2LCA0LCAweDIwKVxuJiM0MzsjZGVmaW5lIFpMX1JFR19EUExMX1RPRF9TRUNfNFx0XHRcdFpMX1JFRyg3LCAweDEyLCA2KVxuJiM0MzsjZGVmaW5lIFpMX1JFR19EUExMX1RPRF9TRUMoX2lkeClcdFx0XHRcdFx0XFxcbiYjNDM7XHQoKF9pZHgpIFx1MDAzYyA0ID8gWkxfUkVHX0RQTExfVE9EX1NFQ18wMyhfaWR4KSA6IFpMX1JFR19EUExMX1RPRF9TRUNfNClcbiYjNDM7XG4mIzQzOyNkZWZpbmUgWkxfUkVHX0RQTExfVE9EX05TXzAzKF9pZHgpXHRcdFx0XHRcdFxcXG4mIzQzO1x0WkxfUkVHX0lEWChfaWR4LCA2LCAweDE4LCA0LCA0LCAweDIwKVxuJiM0MzsjZGVmaW5lIFpMX1JFR19EUExMX1RPRF9OU180XHRcdFx0WkxfUkVHKDcsIDB4MTgsIDQpXG4mIzQzOyNkZWZpbmUgWkxfUkVHX0RQTExfVE9EX05TKF9pZHgpXHRcdFx0XHRcdFxcXG4mIzQzO1x0KChfaWR4KSBcdTAwM2MgNCA/IFpMX1JFR19EUExMX1RPRF9OU18wMyhfaWR4KSA6IFpMX1JFR19EUExMX1RPRF9OU180KVxuJiM0MztcbiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcbiAgKiBSZWdpc3RlciBQYWdlIDksIFN5bnRoIGFuZCBPdXRwdXRcbiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXG5AQCAtMjIxLDYgJiM0MzsyNTYsMjMgQEBcbiAjZGVmaW5lIFpMX09VVFBVVF9DVFJMX0VOXHRcdFx0QklUKDApXG4gI2RlZmluZSBaTF9PVVRQVVRfQ1RSTF9TWU5USF9TRUxcdFx0R0VOTUFTSyg2LCA0KVxuIFxuJiM0MzsjZGVmaW5lIFpMX1JFR19PVVRQVVRfU1RFUF9USU1FX01BU0tcdFx0WkxfUkVHKDksIDB4MzYsIDIpXG4mIzQzO1xuJiM0MzsjZGVmaW5lIFpMX1JFR19PVVRQVVRfUEhBU0VfU1RFUF9DVFJMXHRcdFpMX1JFRyg5LCAweDM4LCAxKVxuJiM0MzsjZGVmaW5lIFpMX09VVFBVVF9QSEFTRV9TVEVQX0NUUkxfRFBMTFx0XHRHRU5NQVNLKDYsIDQpXG4mIzQzOyNkZWZpbmUgWkxfT1VUUFVUX1BIQVNFX1NURVBfQ1RSTF9UT0RfU1RFUFx0QklUKDMpXG4mIzQzOyNkZWZpbmUgWkxfT1VUUFVUX1BIQVNFX1NURVBfQ1RSTF9PUFx0XHRHRU5NQVNLKDEsIDApXG4mIzQzOyNkZWZpbmUgWkxfT1VUUFVUX1BIQVNFX1NURVBfQ1RSTF9PUF9OT05FXHQwXG4mIzQzOyNkZWZpbmUgWkxfT1VUUFVUX1BIQVNFX1NURVBfQ1RSTF9PUF9SRVNFVFx0MVxuJiM0MzsjZGVmaW5lIFpMX09VVFBVVF9QSEFTRV9TVEVQX0NUUkxfT1BfUkVBRFx0MlxuJiM0MzsjZGVmaW5lIFpMX09VVFBVVF9QSEFTRV9TVEVQX0NUUkxfT1BfV1JJVEVcdDNcbiYjNDM7XG4mIzQzOyNkZWZpbmUgWkxfUkVHX09VVFBVVF9QSEFTRV9TVEVQX05VTUJFUlx0XHRaTF9SRUcoOSwgMHgzOSwgMSlcbiYjNDM7XG4mIzQzOyNkZWZpbmUgWkxfUkVHX09VVFBVVF9QSEFTRV9TVEVQX01BU0tcdFx0WkxfUkVHKDksIDB4M2EsIDIpXG4mIzQzO1xuJiM0MzsjZGVmaW5lIFpMX1JFR19PVVRQVVRfUEhBU0VfU1RFUF9EQVRBXHRcdFpMX1JFRyg5LCAweDNjLCA0KVxuJiM0MztcbiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxuICAqIFJlZ2lzdGVyIFBhZ2UgMTAsIFJlZiBNYWlsYm94XG4gICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTEgMTQ6MDI8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+YmVzdC1leHBlbnNpdmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1pMMzA3M1hfSTJDJiMzNDssCiAgICAmIzM0O1pMMzA3M1hfU1BJJiMzNDssCiAgICAmIzM0O1BUUF8xNTg4X0NMT0NLJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7emwzMDczeF9jaGFuX3RvZF9yZWFkJiMzNDssCiAgICAmIzM0O3psMzA3M3hfY2hhbl90b2Rfd3JpdGUmIzM0OywKICAgICYjMzQ7emwzMDczeF9jaGFuX3RvZF9hZGp1c3QmIzM0OywKICAgICYjMzQ7emwzMDczeF9jaGFuX2RmX29mZnNldF9zZXQmIzM0OywKICAgICYjMzQ7emwzMDczeF9jaGFuX3RpZV93cml0ZSYjMzQ7LAogICAgJiMzNDt6bDMwNzN4X2NoYW5fcGhhc2Vfc3RlcCYjMzQ7LAogICAgJiMzNDt6bDMwNzN4X2RwbGxfcHRwX2dldHRpbWV4NjQmIzM0OywKICAgICYjMzQ7emwzMDczeF9kcGxsX3B0cF9zZXR0aW1lNjQmIzM0OywKICAgICYjMzQ7emwzMDczeF9kcGxsX3B0cF9hZGp0aW1lJiMzNDssCiAgICAmIzM0O3psMzA3M3hfZHBsbF9wdHBfYWRqZmluZSYjMzQ7LAogICAgJiMzNDt6bDMwNzN4X2RwbGxfcHRwX2FkanBoYXNlJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHMgUFRQIGNsb2NrIHN1cHBvcnQgdG8gdGhlIE1pY3JvY2hpcCBBenVyaXRlIERQTEwgZHJpdmVyICh6bDMwNzN4KS4gSXQgaW1wbGVtZW50cyBQVFAgY2xvY2sgb3BlcmF0aW9ucyBsaWtlIGdldHRpbWV4NjQsIHNldHRpbWU2NCwgYWRqdGltZSwgYWRqZmluZSwgYW5kIGFkanBoYXNlLiBUaGUgZHJpdmVyIGNhbiBiZSBpbnN0YW50aWF0ZWQgdmlhIEkyQyBvciBTUEkgaW4gUUVNVSwgYW5kIHRoZSBQVFAgb3BlcmF0aW9ucyBhcmUgcmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlIHZpYSBQVFAgaW9jdGxzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmUKaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseQp1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLgoKUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczoKLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLgotIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLgotIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy4KLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsCiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLgotIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLAogIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpCiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLgoKSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaAp0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4KCldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOgoxLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLgogICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4KICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zCiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLgoyLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS4KICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgogICBBbHNvIGNoZWNrICYjMzQ7ZGVwZW5kcyBvbiYjMzQ7IGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncwogICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3MKICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgOTU3ZGNmZDY3MWU4YmM1OTc3MTljMTJjYjJiMzAxZDJmNzQ5ZmVkMQpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBUdWUgQXVnIDExIDE0OjAyOjIyIDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9kcGxsL3psMzA3M3gvS2NvbmZpZyBiL2RyaXZlcnMvZHBsbC96bDMwNzN4L0tjb25maWcKaW5kZXggNWJiY2ExNDAwNTgxMy4uZGExNzMxYWNlMTVmMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9kcGxsL3psMzA3M3gvS2NvbmZpZwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL2RwbGwvemwzMDczeC9LY29uZmlnCkBAIC0yLDcgJiM0MzsyLDcgQEAKIAogY29uZmlnIFpMMzA3M1gKIAl0cmlzdGF0ZSAmIzM0O01pY3JvY2hpcCBBenVyaXRlIERQTEwvUFRQL1N5bmNFIGRldmljZXMmIzM0OyBpZiBDT01QSUxFX1RFU1QKLQlkZXBlbmRzIG9uIE5FVAomIzQzOwlkZXBlbmRzIG9uIE5FVCAmYW1wOyZhbXA7IFBUUF8xNTg4X0NMT0NLCiAJc2VsZWN0IERQTEwKIAlzZWxlY3QgTkVUX0RFVkxJTksKIAlzZWxlY3QgUkVHTUFQCkBAIC0xNiw3ICYjNDM7MTYsNyBAQCBjb25maWcgWkwzMDczWAogCiBjb25maWcgWkwzMDczWF9JMkMKIAl0cmlzdGF0ZSAmIzM0O0kyQyBidXMgaW1wbGVtZW50YXRpb24gZm9yIE1pY3JvY2hpcCBBenVyaXRlIGRldmljZXMmIzM0OwotCWRlcGVuZHMgb24gSTJDICZhbXA7JmFtcDsgTkVUCiYjNDM7CWRlcGVuZHMgb24gSTJDICZhbXA7JmFtcDsgTkVUICZhbXA7JmFtcDsgUFRQXzE1ODhfQ0xPQ0sKIAlzZWxlY3QgUkVHTUFQX0kyQwogCXNlbGVjdCBaTDMwNzNYCiAJaGVscApAQCAtMjgsNyAmIzQzOzI4LDcgQEAgY29uZmlnIFpMMzA3M1hfSTJDCiAKIGNvbmZpZyBaTDMwNzNYX1NQSQogCXRyaXN0YXRlICYjMzQ7U1BJIGJ1cyBpbXBsZW1lbnRhdGlvbiBmb3IgTWljcm9jaGlwIEF6dXJpdGUgZGV2aWNlcyYjMzQ7Ci0JZGVwZW5kcyBvbiBORVQgJmFtcDsmYW1wOyBTUEkKJiM0MzsJZGVwZW5kcyBvbiBORVQgJmFtcDsmYW1wOyBTUEkgJmFtcDsmYW1wOyBQVFBfMTU4OF9DTE9DSwogCXNlbGVjdCBSRUdNQVBfU1BJCiAJc2VsZWN0IFpMMzA3M1gKIAloZWxwCmRpZmYgLS1naXQgYS9kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmMgYi9kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmMKaW5kZXggNGVjMmNmNTNkYWQ0Ni4uYmM2ZDcwZDI1ZDc5MSAxMDA2NDQKLS0tIGEvZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYwpAQCAtMyw2ICYjNDM7Myw3IEBACiAjaW5jbHVkZSAmbHQ7bGludXgvY2xlYW51cC5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L2RlbGF5LmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvZGV2X3ByaW50ay5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9wdHBfY2xvY2tfa2VybmVsLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvc3RyaW5nLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvdHlwZXMuaCZndDsKIApAQCAtMTYyLDggJiM0MzsxNjMsOCBAQCBpbnQgemwzMDczeF9jaGFuX25jb19tb2RlX3NldChzdHJ1Y3QgemwzMDczeF9kZXYgKnpsZGV2LCB1OCBpbmRleCkKICAqIEB6bGRldjogcG9pbnRlciB0byB6bDMwNzN4X2RldiBzdHJ1Y3R1cmUKICAqIEBpbmRleDogRFBMTCBjaGFubmVsIGluZGV4IHRvIGZldGNoIHN0YXRlIGZvcgogICoKLSAqIFJlYWRzIHRoZSBtb2RlX3JlZnNlbCByZWdpc3RlciBhbmQgcmVmZXJlbmNlIHByaW9yaXR5IHJlZ2lzdGVycyBmb3IKLSAqIHRoZSBnaXZlbiBEUExMIGNoYW5uZWwgYW5kIHN0b3JlcyB0aGUgcmF3IHZhbHVlcyBmb3IgbGF0ZXIgdXNlLgomIzQzOyAqIFJlYWRzIHRoZSBtb2RlX3JlZnNlbCwgc3RhdHVzIGFuZCByZWZlcmVuY2UgcHJpb3JpdHkgcmVnaXN0ZXJzIGZvcgomIzQzOyAqIHRoZSBnaXZlbiBEUExMIGNoYW5uZWwgYW5kIHN0b3JlcyB0aGUgdmFsdWVzIGZvciBsYXRlciB1c2UuCiAgKgogICogUmV0dXJuOiAwIG9uIHN1Y2Nlc3MsICZsdDswIG9uIGVycm9yCiAgKi8KQEAgLTIzNCw2ICYjNDM7MjM1LDMyNiBAQCBjb25zdCBzdHJ1Y3QgemwzMDczeF9jaGFuICp6bDMwNzN4X2NoYW5fc3RhdGVfZ2V0KHN0cnVjdCB6bDMwNzN4X2RldiAqemxkZXYsCiAJcmV0dXJuICZhbXA7emxkZXYtJmd0O2NoYW5baW5kZXhdOwogfQogCiYjNDM7LyoqCiYjNDM7ICogemwzMDczeF9jaGFuX3RvZF9yZWFkeV93YWl0IC0gd2FpdCBmb3IgVG9EIHNlbWFwaG9yZSB0byBjbGVhcgomIzQzOyAqIEB6bGRldjogcG9pbnRlciB0byB6bDMwNzN4IGRldmljZQomIzQzOyAqIEBjaDogRFBMTCBjaGFubmVsIGluZGV4CiYjNDM7ICoKJiM0MzsgKiBDaGVja3MgdGhlIFRvRCBjb250cm9sIHJlZ2lzdGVyIHNlbWFwaG9yZSBiaXQuIElmIGNsZWFyLCByZXR1cm5zCiYjNDM7ICogaW1tZWRpYXRlbHkuIE90aGVyd2lzZSBwb2xscyB1bnRpbCB0aGUgYml0IGlzIGNsZWFyZWQgYnkgdGhlIGRldmljZS4KJiM0MzsgKgomIzQzOyAqIFJldHVybjoKJiM0MzsgKiAqIDAJCQktIHN1Y2Nlc3MKJiM0MzsgKiAqICUtRUJVU1kJCS0gdGltZW91dAomIzQzOyAqICogJS1FT1BOT1RTVVBQCS0gdW5rbm93biBjb21tYW5kIGRldGVjdGVkCiYjNDM7ICogKiBuZWdhdGl2ZQkJLSBvdGhlciBlcnJvcgomIzQzOyAqLwomIzQzO2ludCB6bDMwNzN4X2NoYW5fdG9kX3JlYWR5X3dhaXQoc3RydWN0IHpsMzA3M3hfZGV2ICp6bGRldiwgdTggY2gpCiYjNDM7ewomIzQzOwl1bnNpZ25lZCBpbnQgdGltZW91dDsKJiM0MzsJdTggdG9kX2N0cmw7CiYjNDM7CWludCByYzsKJiM0MzsKJiM0MzsJcmMgPSB6bDMwNzN4X3JlYWRfdTgoemxkZXYsIFpMX1JFR19EUExMX1RPRF9DVFJMKGNoKSwgJmFtcDt0b2RfY3RybCk7CiYjNDM7CWlmIChyYykKJiM0MzsJCXJldHVybiByYzsKJiM0MzsKJiM0MzsJaWYgKCEodG9kX2N0cmwgJmFtcDsgWkxfRFBMTF9UT0RfQ1RSTF9TRU0pKQomIzQzOwkJcmV0dXJuIDA7CiYjNDM7CiYjNDM7CXN3aXRjaCAoRklFTERfR0VUKFpMX0RQTExfVE9EX0NUUkxfQ01ELCB0b2RfY3RybCkpIHsKJiM0MzsJY2FzZSBaTF9EUExMX1RPRF9DVFJMX0NNRF9XUl9ORVhUXzFIWjoKJiM0MzsJCXRpbWVvdXQgPSBaTF9QT0xMX1RPRF9XUl9USU1FT1VUX1VTOwomIzQzOwkJYnJlYWs7CiYjNDM7CWNhc2UgWkxfRFBMTF9UT0RfQ1RSTF9DTURfUkRfQ1VSUkVOVDoKJiM0MzsJY2FzZSBaTF9EUExMX1RPRF9DVFJMX0NNRF9SRF9ORVhUXzFIWjoKJiM0MzsJCXRpbWVvdXQgPSBaTF9QT0xMX1RPRF9SRF9USU1FT1VUX1VTOwomIzQzOwkJYnJlYWs7CiYjNDM7CWRlZmF1bHQ6CiYjNDM7CQlXQVJOX09OKDEpOwomIzQzOwkJcmV0dXJuIC1FT1BOT1RTVVBQOwomIzQzOwl9CiYjNDM7CiYjNDM7CXJjID0gemwzMDczeF9wb2xsX3plcm9fdTgoemxkZXYsIFpMX1JFR19EUExMX1RPRF9DVFJMKGNoKSwKJiM0MzsJCQkJICBaTF9EUExMX1RPRF9DVFJMX1NFTSwgdGltZW91dCk7CiYjNDM7CiYjNDM7CXJldHVybiByYyA9PSAtRVRJTUVET1VUID8gLUVCVVNZIDogcmM7CiYjNDM7fQomIzQzOwomIzQzOy8qKgomIzQzOyAqIHpsMzA3M3hfY2hhbl90b2RfY3RybCAtIGlzc3VlIFRvRCBjb21tYW5kCiYjNDM7ICogQHpsZGV2OiBwb2ludGVyIHRvIHpsMzA3M3ggZGV2aWNlCiYjNDM7ICogQGNoOiBEUExMIGNoYW5uZWwgaW5kZXgKJiM0MzsgKiBAY21kOiBUb0QgY29tbWFuZCB0byBleGVjdXRlCiYjNDM7ICoKJiM0MzsgKiBXcml0ZXMgdGhlIHNlbWFwaG9yZSBhbmQgY29tbWFuZCB0byBkcGxsX3RvZF9jdHJsLiBUaGUgY2FsbGVyIG11c3QKJiM0MzsgKiBlbnN1cmUgdGhlIGRldmljZSBpcyByZWFkeSAoc2VtYXBob3JlIGNsZWFyKSBiZWZvcmUgY2FsbGluZyBhbmQKJiM0MzsgKiBtdXN0IHdhaXQgZm9yIGNvbXBsZXRpb24gaWYgbmVlZGVkLgomIzQzOyAqCiYjNDM7ICogUmV0dXJuOiAwIG9uIHN1Y2Nlc3MsICZsdDswIG9uIGVycm9yCiYjNDM7ICovCiYjNDM7c3RhdGljIGludCB6bDMwNzN4X2NoYW5fdG9kX2N0cmwoc3RydWN0IHpsMzA3M3hfZGV2ICp6bGRldiwgdTggY2gsIHU4IGNtZCkKJiM0Mzt7CiYjNDM7CXJldHVybiB6bDMwNzN4X3dyaXRlX3U4KHpsZGV2LCBaTF9SRUdfRFBMTF9UT0RfQ1RSTChjaCksCiYjNDM7CQkJCVpMX0RQTExfVE9EX0NUUkxfU0VNIHwgY21kKTsKJiM0Mzt9CiYjNDM7CiYjNDM7LyoqCiYjNDM7ICogemwzMDczeF9jaGFuX3RvZF9yZWFkIC0gcmVhZCBUb0QgcmVnaXN0ZXJzIGFmdGVyIGlzc3VpbmcgYSBjb21tYW5kCiYjNDM7ICogQHpsZGV2OiBwb2ludGVyIHRvIHpsMzA3M3ggZGV2aWNlCiYjNDM7ICogQGNoOiBEUExMIGNoYW5uZWwgaW5kZXgKJiM0MzsgKiBAbmV4dF9oejogaWYgdHJ1ZSwgcmVhZCBwcmVkaWN0ZWQgVG9EIGF0IG5leHQgMSBIejsgb3RoZXJ3aXNlIHJlYWQgY3VycmVudAomIzQzOyAqIEB0czogdGltZXNwZWMgdG8gc3RvcmUgdGhlIHJlc3VsdAomIzQzOyAqIEBzdHM6IG9wdGlvbmFsIHN5c3RlbSB0aW1lc3RhbXAgcGFpciBmb3IgY3Jvc3MtdGltZXN0YW1waW5nCiYjNDM7ICoKJiM0MzsgKiBDb250ZXh0OiBDYWxsZXIgbXVzdCBzZXJpYWxpemUgYWxsIHpsMzA3M3hfY2hhbl90b2RfKiBjYWxscyBleHRlcm5hbGx5LgomIzQzOyAqIFJldHVybjogMCBvbiBzdWNjZXNzLCAmbHQ7MCBvbiBlcnJvcgomIzQzOyAqLwomIzQzO2ludCB6bDMwNzN4X2NoYW5fdG9kX3JlYWQoc3RydWN0IHpsMzA3M3hfZGV2ICp6bGRldiwgdTggY2gsCiYjNDM7CQkJICBib29sIG5leHRfaHosIHN0cnVjdCB0aW1lc3BlYzY0ICp0cywKJiM0MzsJCQkgIHN0cnVjdCBwdHBfc3lzdGVtX3RpbWVzdGFtcCAqc3RzKQomIzQzO3sKJiM0MzsJdTMyIG5zZWM7CiYjNDM7CXU2NCBzZWM7CiYjNDM7CXU4IGNtZDsKJiM0MzsJaW50IHJjOwomIzQzOwomIzQzOwlpZiAobmV4dF9oeikKJiM0MzsJCWNtZCA9IFpMX0RQTExfVE9EX0NUUkxfQ01EX1JEX05FWFRfMUhaOwomIzQzOwllbHNlCiYjNDM7CQljbWQgPSBaTF9EUExMX1RPRF9DVFJMX0NNRF9SRF9DVVJSRU5UOwomIzQzOwomIzQzOwkvKiBXYWl0IGZvciBhbnkgcHJldmlvdXMgVG9EIG9wZXJhdGlvbiB0byBjb21wbGV0ZSAqLwomIzQzOwlyYyA9IHpsMzA3M3hfY2hhbl90b2RfcmVhZHlfd2FpdCh6bGRldiwgY2gpOwomIzQzOwlpZiAocmMpCiYjNDM7CQlyZXR1cm4gcmM7CiYjNDM7CiYjNDM7CXB0cF9yZWFkX3N5c3RlbV9wcmV0cyhzdHMpOwomIzQzOwlyYyA9IHpsMzA3M3hfY2hhbl90b2RfY3RybCh6bGRldiwgY2gsIGNtZCk7CiYjNDM7CWlmIChyYykKJiM0MzsJCXJldHVybiByYzsKJiM0MzsKJiM0MzsJcmMgPSB6bDMwNzN4X2NoYW5fdG9kX3JlYWR5X3dhaXQoemxkZXYsIGNoKTsKJiM0MzsJaWYgKHJjKQomIzQzOwkJcmV0dXJuIHJjOwomIzQzOwlwdHBfcmVhZF9zeXN0ZW1fcG9zdHRzKHN0cyk7CiYjNDM7CiYjNDM7CXJjID0gemwzMDczeF9yZWFkX3U0OCh6bGRldiwgWkxfUkVHX0RQTExfVE9EX1NFQyhjaCksICZhbXA7c2VjKTsKJiM0MzsJaWYgKHJjKQomIzQzOwkJcmV0dXJuIHJjOwomIzQzOwomIzQzOwkvKiBIVyBuYW5vc2Vjb25kcyBhcmUgYWx3YXlzIGluIFswLCBOU0VDX1BFUl9TRUMpIHJhbmdlICovCiYjNDM7CXJjID0gemwzMDczeF9yZWFkX3UzMih6bGRldiwgWkxfUkVHX0RQTExfVE9EX05TKGNoKSwgJmFtcDtuc2VjKTsKJiM0MzsJaWYgKHJjKQomIzQzOwkJcmV0dXJuIHJjOwomIzQzOwomIzQzOwl0cy0mZ3Q7dHZfc2VjID0gc2VjOwomIzQzOwl0cy0mZ3Q7dHZfbnNlYyA9IG5zZWM7CiYjNDM7CiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MzsKJiM0MzsvKioKJiM0MzsgKiB6bDMwNzN4X2NoYW5fdG9kX3dyaXRlIC0gd3JpdGUgVG9EIHJlZ2lzdGVycyBhbmQgdHJpZ2dlciAxIEh6IHVwZGF0ZQomIzQzOyAqIEB6bGRldjogcG9pbnRlciB0byB6bDMwNzN4IGRldmljZQomIzQzOyAqIEBjaDogRFBMTCBjaGFubmVsIGluZGV4CiYjNDM7ICogQHRzOiB0aW1lIHRvIHNldAomIzQzOyAqCiYjNDM7ICogQ29udGV4dDogQ2FsbGVyIG11c3Qgc2VyaWFsaXplIGFsbCB6bDMwNzN4X2NoYW5fdG9kXyogY2FsbHMgZXh0ZXJuYWxseS4KJiM0MzsgKiBSZXR1cm46IDAgb24gc3VjY2VzcywgJmx0OzAgb24gZXJyb3IKJiM0MzsgKi8KJiM0MztpbnQgemwzMDczeF9jaGFuX3RvZF93cml0ZShzdHJ1Y3QgemwzMDczeF9kZXYgKnpsZGV2LCB1OCBjaCwKJiM0MzsJCQkgICBzdHJ1Y3QgdGltZXNwZWM2NCB0cykKJiM0Mzt7CiYjNDM7CWludCByYzsKJiM0MzsKJiM0MzsJLyogV2FpdCBmb3IgYW55IHByZXZpb3VzIFRvRCBvcGVyYXRpb24gdG8gY29tcGxldGUgKi8KJiM0MzsJcmMgPSB6bDMwNzN4X2NoYW5fdG9kX3JlYWR5X3dhaXQoemxkZXYsIGNoKTsKJiM0MzsJaWYgKHJjKQomIzQzOwkJcmV0dXJuIHJjOwomIzQzOwomIzQzOwlyYyA9IHpsMzA3M3hfd3JpdGVfdTQ4KHpsZGV2LCBaTF9SRUdfRFBMTF9UT0RfU0VDKGNoKSwgdHMudHZfc2VjKTsKJiM0MzsJaWYgKHJjKQomIzQzOwkJcmV0dXJuIHJjOwomIzQzOwomIzQzOwlyYyA9IHpsMzA3M3hfd3JpdGVfdTMyKHpsZGV2LCBaTF9SRUdfRFBMTF9UT0RfTlMoY2gpLCB0cy50dl9uc2VjKTsKJiM0MzsJaWYgKHJjKQomIzQzOwkJcmV0dXJuIHJjOwomIzQzOwomIzQzOwlyZXR1cm4gemwzMDczeF9jaGFuX3RvZF9jdHJsKHpsZGV2LCBjaCwKJiM0MzsJCQkJICAgICBaTF9EUExMX1RPRF9DVFJMX0NNRF9XUl9ORVhUXzFIWik7CiYjNDM7fQomIzQzOwomIzQzOy8qKgomIzQzOyAqIHpsMzA3M3hfY2hhbl90b2RfYWRqdXN0IC0gYXRvbWljIFRvRCByZWFkLW1vZGlmeS13cml0ZSB3aXRoIHJvbGxvdmVyIGd1YXJkCiYjNDM7ICogQHpsZGV2OiBwb2ludGVyIHRvIHpsMzA3M3ggZGV2aWNlCiYjNDM7ICogQGNoOiBEUExMIGNoYW5uZWwgaW5kZXgKJiM0MzsgKiBAZGVsdGE6IHRpbWUgYWRqdXN0bWVudCB0byBhcHBseQomIzQzOyAqCiYjNDM7ICogUmVhZHMgdGhlIG5leHQtSHogVG9EIGFuZCBjdXJyZW50IFRvRCwgdGhlbiBjaGVja3Mgd2hldGhlciBlbm91Z2ggdGltZQomIzQzOyAqIHJlbWFpbnMgYmVmb3JlIHRoZSBuZXh0IDEgSHogcm9sbG92ZXIgdG8gc2FmZWx5IGNvbXBsZXRlIHRoZSB3cml0ZS4KJiM0MzsgKiBSZS1yZWFkcyBpZiB0aGUgMSBIeiB0aWNrIGNyb3NzZWQgYmV0d2VlbiB0aGUgdHdvIHJlYWRzIG9yIGlmIGxlc3MKJiM0MzsgKiB0aGFuIDIwIG1zIHJlbWFpbnMgYmVmb3JlIHRoZSBuZXh0IHJvbGxvdmVyLiBBcHBsaWVzIEBkZWx0YSBhbmQgd3JpdGVzCiYjNDM7ICogdGhlIHJlc3VsdCBiYWNrLgomIzQzOyAqCiYjNDM7ICogQ29udGV4dDogQ2FsbGVyIG11c3Qgc2VyaWFsaXplIGFsbCB6bDMwNzN4X2NoYW5fdG9kXyogY2FsbHMgZXh0ZXJuYWxseS4KJiM0MzsgKiBSZXR1cm46IDAgb24gc3VjY2VzcywgJmx0OzAgb24gZXJyb3IKJiM0MzsgKi8KJiM0MztpbnQgemwzMDczeF9jaGFuX3RvZF9hZGp1c3Qoc3RydWN0IHpsMzA3M3hfZGV2ICp6bGRldiwgdTggY2gsCiYjNDM7CQkJICAgIHN0cnVjdCB0aW1lc3BlYzY0IGRlbHRhKQomIzQzO3sKJiM0MzsjZGVmaW5lIFpMX1RPRF9NQVhfUkVUUklFUwkyMAomIzQzOwlzdGF0aWMgY29uc3QgbG9uZyB0aHJlc2hvbGRfbnMgPSAyMCAqIE5TRUNfUEVSX01TRUM7CiYjNDM7CXN0cnVjdCB0aW1lc3BlYzY0IHRzX25leHQsIHRzX2N1ciwgZGlmZjsKJiM0MzsJaW50IHJjLCBpOwomIzQzOwomIzQzOwlmb3IgKGkgPSAwOyBpICZsdDsgWkxfVE9EX01BWF9SRVRSSUVTOyBpJiM0MzsmIzQzOykgewomIzQzOwkJcmMgPSB6bDMwNzN4X2NoYW5fdG9kX3JlYWQoemxkZXYsIGNoLCB0cnVlLCAmYW1wO3RzX25leHQsIE5VTEwpOwomIzQzOwkJaWYgKHJjKQomIzQzOwkJCXJldHVybiByYzsKJiM0MzsKJiM0MzsJCXJjID0gemwzMDczeF9jaGFuX3RvZF9yZWFkKHpsZGV2LCBjaCwgZmFsc2UsICZhbXA7dHNfY3VyLCBOVUxMKTsKJiM0MzsJCWlmIChyYykKJiM0MzsJCQlyZXR1cm4gcmM7CiYjNDM7CiYjNDM7CQkvKiBFbnN1cmUgdGhlIDEgSHogdGljayBkaWQgbm90IGNyb3NzIGJldHdlZW4gdGhlIHR3byByZWFkcwomIzQzOwkJICogYW5kIHRoYXQgZW5vdWdoIG1hcmdpbiByZW1haW5zIHRvIGNvbXBsZXRlIHRoZSB3cml0ZS4KJiM0MzsJCSAqLwomIzQzOwkJZGlmZiA9IHRpbWVzcGVjNjRfc3ViKHRzX25leHQsIHRzX2N1cik7CiYjNDM7CQlpZiAoZGlmZi50dl9zZWMgJmd0OyAwIHx8CiYjNDM7CQkgICAgKCFkaWZmLnR2X3NlYyAmYW1wOyZhbXA7IGRpZmYudHZfbnNlYyAmZ3Q7PSB0aHJlc2hvbGRfbnMpKQomIzQzOwkJCWJyZWFrOwomIzQzOwl9CiYjNDM7CWlmIChpID09IFpMX1RPRF9NQVhfUkVUUklFUykgewomIzQzOwkJZGV2X3dhcm4oemxkZXYtJmd0O2RldiwKJiM0MzsJCQkgJiMzNDtEUExMJXUgVG9EIGFkanVzdCBmYWlsZWQgdG8gZ2V0IHN0YWJsZSBtYXJnaW5cbiYjMzQ7LAomIzQzOwkJCSBjaCk7CiYjNDM7CQlyZXR1cm4gLUVCVVNZOwomIzQzOwl9CiYjNDM7CiYjNDM7CS8qIEFwcGx5IGRlbHRhIHRvIHRoZSBuZXh0LUh6IFRvRCAqLwomIzQzOwl0c19uZXh0ID0gdGltZXNwZWM2NF9hZGQodHNfbmV4dCwgZGVsdGEpOwomIzQzOwlpZiAoIXRpbWVzcGVjNjRfdmFsaWQoJmFtcDt0c19uZXh0KSkKJiM0MzsJCXJldHVybiAtRUlOVkFMOwomIzQzOwomIzQzOwlyZXR1cm4gemwzMDczeF9jaGFuX3RvZF93cml0ZSh6bGRldiwgY2gsIHRzX25leHQpOwomIzQzOyN1bmRlZiBaTF9UT0RfTUFYX1JFVFJJRVMKJiM0Mzt9CiYjNDM7CiYjNDM7LyoqCiYjNDM7ICogemwzMDczeF9jaGFuX2RmX29mZnNldF9zZXQgLSB3cml0ZSBkZWx0YSBmcmVxdWVuY3kgb2Zmc2V0IHRvIGhhcmR3YXJlCiYjNDM7ICogQHpsZGV2OiBwb2ludGVyIHRvIHpsMzA3M3ggZGV2aWNlCiYjNDM7ICogQGNoOiBEUExMIGNoYW5uZWwgaW5kZXgKJiM0MzsgKiBAb2Zmc2V0OiBmcmVxdWVuY3kgb2Zmc2V0IGluIDJeLTQ4IHN0ZXBzCiYjNDM7ICoKJiM0MzsgKiBDb250ZXh0OiBDYWxsZXIgbXVzdCBob2xkIHRoZSBwZXItRFBMTCBsb2NrLgomIzQzOyAqIFJldHVybjogMCBvbiBzdWNjZXNzLCAmbHQ7MCBvbiBlcnJvcgomIzQzOyAqLwomIzQzO2ludCB6bDMwNzN4X2NoYW5fZGZfb2Zmc2V0X3NldChzdHJ1Y3QgemwzMDczeF9kZXYgKnpsZGV2LCB1OCBjaCwgczY0IG9mZnNldCkKJiM0Mzt7CiYjNDM7CWludCByYzsKJiM0MzsKJiM0MzsJcmMgPSB6bDMwNzN4X3dyaXRlX3U0OCh6bGRldiwgWkxfUkVHX0RQTExfREZfT0ZGU0VUKGNoKSwgb2Zmc2V0KTsKJiM0MzsJaWYgKCFyYykKJiM0MzsJCXpsZGV2LSZndDtjaGFuW2NoXS5kZl9vZmZzZXQgPSBvZmZzZXQ7CiYjNDM7CiYjNDM7CXJldHVybiByYzsKJiM0Mzt9CiYjNDM7CiYjNDM7LyoqCiYjNDM7ICogemwzMDczeF9jaGFuX3RpZV93cml0ZSAtIGFkanVzdCBEUExMIHBoYXNlIHVzaW5nIFRJRSB3cml0ZQomIzQzOyAqIEB6bGRldjogcG9pbnRlciB0byB6bDMwNzN4IGRldmljZQomIzQzOyAqIEBjaDogRFBMTCBjaGFubmVsIGluZGV4CiYjNDM7ICogQGRlbHRhX25zOiBwaGFzZSBhZGp1c3RtZW50IGluIG5hbm9zZWNvbmRzIChtdXN0IGJlIGluICgtMXMsIDFzKSkKJiM0MzsgKgomIzQzOyAqIENvbnZlcnRzIG5hbm9zZWNvbmRzIHRvIFRJRSB1bml0cyAoMC4wMSBwcykgYW5kIHdyaXRlcyBUSUUgZGF0YQomIzQzOyAqIHRvIHRoZSBzcGVjaWZpZWQgY2hhbm5lbC4KJiM0MzsgKgomIzQzOyAqIFJldHVybjogMCBvbiBzdWNjZXNzLCAmbHQ7MCBvbiBlcnJvcgomIzQzOyAqLwomIzQzO2ludCB6bDMwNzN4X2NoYW5fdGllX3dyaXRlKHN0cnVjdCB6bDMwNzN4X2RldiAqemxkZXYsIHU4IGNoLCBzNjQgZGVsdGFfbnMpCiYjNDM7ewomIzQzOwlzNjQgdGllX2RhdGE7CiYjNDM7CWludCByYzsKJiM0MzsKJiM0MzsJaWYgKFdBUk5fT04oZGVsdGFfbnMgJmx0Oz0gLU5TRUNfUEVSX1NFQyB8fCBkZWx0YV9ucyAmZ3Q7PSBOU0VDX1BFUl9TRUMpKQomIzQzOwkJcmV0dXJuIC1FUkFOR0U7CiYjNDM7CiYjNDM7CWd1YXJkKG11dGV4KSgmYW1wO3psZGV2LSZndDt0aWVfbG9jayk7CiYjNDM7CiYjNDM7CS8qIFdhaXQgZm9yIGFueSBwcmV2aW91cyBUSUUgb3BlcmF0aW9uIHRvIGNvbXBsZXRlICovCiYjNDM7CXJjID0gemwzMDczeF9wb2xsX3plcm9fdTgoemxkZXYsIFpMX1JFR19EUExMX1RJRV9DVFJMLAomIzQzOwkJCQkgIFpMX0RQTExfVElFX0NUUkxfT1AsCiYjNDM7CQkJCSAgWkxfUE9MTF9USUVfV1JfVElNRU9VVF9VUyk7CiYjNDM7CWlmIChyYykKJiM0MzsJCXJldHVybiByYzsKJiM0MzsKJiM0MzsJLyogQ29udmVydCBucyB0byBUSUUgdW5pdHMgKDAuMDEgcHMgPSAxMF4tMTQgcykgKi8KJiM0MzsJdGllX2RhdGEgPSBkZWx0YV9ucyAqIDEwMDAwMExMOwomIzQzOwomIzQzOwlyYyA9IHpsMzA3M3hfd3JpdGVfdTQ4KHpsZGV2LCBaTF9SRUdfRFBMTF9USUVfREFUQShjaCksIHRpZV9kYXRhKTsKJiM0MzsJaWYgKHJjKQomIzQzOwkJcmV0dXJuIHJjOwomIzQzOwomIzQzOwlyYyA9IHpsMzA3M3hfd3JpdGVfdTgoemxkZXYsIFpMX1JFR19EUExMX1RJRV9DVFJMX01BU0ssIEJJVChjaCkpOwomIzQzOwlpZiAocmMpCiYjNDM7CQlyZXR1cm4gcmM7CiYjNDM7CiYjNDM7CXJldHVybiB6bDMwNzN4X3dyaXRlX3U4KHpsZGV2LCBaTF9SRUdfRFBMTF9USUVfQ1RSTCwKJiM0MzsJCQkJWkxfRFBMTF9USUVfQ1RSTF9PUF9XUik7CiYjNDM7fQomIzQzOwomIzQzOy8qKgomIzQzOyAqIHpsMzA3M3hfY2hhbl9waGFzZV9zdGVwIC0gZXhlY3V0ZSBvbmUgb3V0cHV0IHBoYXNlIHN0ZXAgb3BlcmF0aW9uCiYjNDM7ICogQHpsZGV2OiBwb2ludGVyIHRvIHpsMzA3M3ggZGV2aWNlCiYjNDM7ICogQGNoOiBEUExMIGNoYW5uZWwgaW5kZXgKJiM0MzsgKiBAb3V0X21hc2s6IGJpdG1hc2sgb2Ygb3V0cHV0cyB0byBzdGVwCiYjNDM7ICogQHN0ZXBfY3ljbGVzOiBwaGFzZSBzdGVwIGluIHN5bnRoZXNpemVyIGNsb2NrIGN5Y2xlcwomIzQzOyAqIEB0b2Rfc3RlcDogYWxzbyBzdGVwIHRoZSBUb0QgY291bnRlcgomIzQzOyAqCiYjNDM7ICogQWxsIG1hc2tlZCBvdXRwdXRzIG11c3QgdXNlIHN5bnRoZXNpemVycyBvZiB0aGUgc2FtZSBmcmVxdWVuY3kgc2luY2UKJiM0MzsgKiB0aGUgc3RlcCB2YWx1ZSBpcyBpbiBzeW50aGVzaXplciBjbG9jayBjeWNsZXMuCiYjNDM7ICoKJiM0MzsgKiBSZXR1cm46IDAgb24gc3VjY2VzcywgJmx0OzAgb24gZXJyb3IKJiM0MzsgKi8KJiM0MztpbnQgemwzMDczeF9jaGFuX3BoYXNlX3N0ZXAoc3RydWN0IHpsMzA3M3hfZGV2ICp6bGRldiwgdTggY2gsCiYjNDM7CQkJICAgIHUxNiBvdXRfbWFzaywgczMyIHN0ZXBfY3ljbGVzLAomIzQzOwkJCSAgICBib29sIHRvZF9zdGVwKQomIzQzO3sKJiM0MzsJdTggY3RybDsKJiM0MzsJaW50IHJjOwomIzQzOwomIzQzOwlndWFyZChtdXRleCkoJmFtcDt6bGRldi0mZ3Q7cGhhc2Vfc3RlcF9sb2NrKTsKJiM0MzsKJiM0MzsJLyogV2FpdCBmb3IgYW55IHByZXZpb3VzIHBoYXNlIHN0ZXAgb3BlcmF0aW9uIHRvIGNvbXBsZXRlICovCiYjNDM7CXJjID0gemwzMDczeF9wb2xsX3plcm9fdTgoemxkZXYsIFpMX1JFR19PVVRQVVRfUEhBU0VfU1RFUF9DVFJMLAomIzQzOwkJCQkgIFpMX09VVFBVVF9QSEFTRV9TVEVQX0NUUkxfT1AsCiYjNDM7CQkJCSAgWkxfUE9MTF9QSEFTRV9TVEVQX1RJTUVPVVRfVVMpOwomIzQzOwlpZiAocmMpCiYjNDM7CQlyZXR1cm4gcmM7CiYjNDM7CiYjNDM7CXJjID0gemwzMDczeF93cml0ZV91MzIoemxkZXYsIFpMX1JFR19PVVRQVVRfUEhBU0VfU1RFUF9EQVRBLAomIzQzOwkJCSAgICAgICBzdGVwX2N5Y2xlcyk7CiYjNDM7CWlmIChyYykKJiM0MzsJCXJldHVybiByYzsKJiM0MzsKJiM0MzsJcmMgPSB6bDMwNzN4X3dyaXRlX3UxNih6bGRldiwgWkxfUkVHX09VVFBVVF9QSEFTRV9TVEVQX01BU0ssIG91dF9tYXNrKTsKJiM0MzsJaWYgKHJjKQomIzQzOwkJcmV0dXJuIHJjOwomIzQzOwomIzQzOwlyYyA9IHpsMzA3M3hfd3JpdGVfdTgoemxkZXYsIFpMX1JFR19PVVRQVVRfUEhBU0VfU1RFUF9OVU1CRVIsIDEpOwomIzQzOwlpZiAocmMpCiYjNDM7CQlyZXR1cm4gcmM7CiYjNDM7CiYjNDM7CWN0cmwgPSBGSUVMRF9QUkVQKFpMX09VVFBVVF9QSEFTRV9TVEVQX0NUUkxfRFBMTCwgY2gpIHwKJiM0MzsJICAgICAgIEZJRUxEX1BSRVAoWkxfT1VUUFVUX1BIQVNFX1NURVBfQ1RSTF9PUCwKJiM0MzsJCQkgIFpMX09VVFBVVF9QSEFTRV9TVEVQX0NUUkxfT1BfV1JJVEUpOwomIzQzOwlpZiAodG9kX3N0ZXApCiYjNDM7CQljdHJsIHw9IFpMX09VVFBVVF9QSEFTRV9TVEVQX0NUUkxfVE9EX1NURVA7CiYjNDM7CiYjNDM7CXJldHVybiB6bDMwNzN4X3dyaXRlX3U4KHpsZGV2LCBaTF9SRUdfT1VUUFVUX1BIQVNFX1NURVBfQ1RSTCwgY3RybCk7CiYjNDM7fQomIzQzOwogLyoqCiAgKiB6bDMwNzN4X2NoYW5fc3RhdGVfc2V0IC0gY29tbWl0IERQTEwgY2hhbm5lbCBzdGF0ZSBjaGFuZ2VzIHRvIGhhcmR3YXJlCiAgKiBAemxkZXY6IHBvaW50ZXIgdG8gemwzMDczeF9kZXYgc3RydWN0dXJlCmRpZmYgLS1naXQgYS9kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmggYi9kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmgKaW5kZXggZGM5YzZkOTViZGVlNy4uOTljM2I3MDg4ZjY3OCAxMDA2NDQKLS0tIGEvZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5oCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uaApAQCAtNSwxMCAmIzQzOzUsMTIgQEAKIAogI2luY2x1ZGUgJmx0O2xpbnV4L2JpdGZpZWxkLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvc3RkZGVmLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L3RpbWU2NC5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L3R5cGVzLmgmZ3Q7CiAKICNpbmNsdWRlICYjMzQ7cmVncy5oJiMzNDsKIAomIzQzO3N0cnVjdCBwdHBfc3lzdGVtX3RpbWVzdGFtcDsKIHN0cnVjdCB6bDMwNzN4X2RldjsKIAogLyoqCkBAIC00Miw2ICYjNDM7NDQsMjEgQEAgaW50IHpsMzA3M3hfY2hhbl9zdGF0ZV9zZXQoc3RydWN0IHpsMzA3M3hfZGV2ICp6bGRldiwgdTggaW5kZXgsCiBpbnQgemwzMDczeF9jaGFuX3N0YXRlX3VwZGF0ZShzdHJ1Y3QgemwzMDczeF9kZXYgKnpsZGV2LCB1OCBpbmRleCk7CiBpbnQgemwzMDczeF9jaGFuX25jb19tb2RlX3NldChzdHJ1Y3QgemwzMDczeF9kZXYgKnpsZGV2LCB1OCBpbmRleCk7CiAKJiM0MztpbnQgemwzMDczeF9jaGFuX3RvZF9yZWFkeV93YWl0KHN0cnVjdCB6bDMwNzN4X2RldiAqemxkZXYsIHU4IGNoKTsKJiM0MztpbnQgemwzMDczeF9jaGFuX3RvZF9yZWFkKHN0cnVjdCB6bDMwNzN4X2RldiAqemxkZXYsIHU4IGNoLAomIzQzOwkJCSAgYm9vbCBuZXh0X2h6LCBzdHJ1Y3QgdGltZXNwZWM2NCAqdHMsCiYjNDM7CQkJICBzdHJ1Y3QgcHRwX3N5c3RlbV90aW1lc3RhbXAgKnN0cyk7CiYjNDM7aW50IHpsMzA3M3hfY2hhbl90b2Rfd3JpdGUoc3RydWN0IHpsMzA3M3hfZGV2ICp6bGRldiwgdTggY2gsCiYjNDM7CQkJICAgc3RydWN0IHRpbWVzcGVjNjQgdHMpOwomIzQzO2ludCB6bDMwNzN4X2NoYW5fdG9kX2FkanVzdChzdHJ1Y3QgemwzMDczeF9kZXYgKnpsZGV2LCB1OCBjaCwKJiM0MzsJCQkgICAgc3RydWN0IHRpbWVzcGVjNjQgZGVsdGEpOwomIzQzO2ludCB6bDMwNzN4X2NoYW5fcGhhc2Vfc3RlcChzdHJ1Y3QgemwzMDczeF9kZXYgKnpsZGV2LCB1OCBjaCwKJiM0MzsJCQkgICAgdTE2IG91dF9tYXNrLCBzMzIgc3RlcF9jeWNsZXMsIGJvb2wgdG9kX3N0ZXApOwomIzQzOwomIzQzO2ludCB6bDMwNzN4X2NoYW5fZGZfb2Zmc2V0X3NldChzdHJ1Y3QgemwzMDczeF9kZXYgKnpsZGV2LCB1OCBjaCwgczY0IG9mZnNldCk7CiYjNDM7CiYjNDM7aW50IHpsMzA3M3hfY2hhbl90aWVfd3JpdGUoc3RydWN0IHpsMzA3M3hfZGV2ICp6bGRldiwgdTggY2gsIHM2NCBkZWx0YV9ucyk7CiYjNDM7CiAvKioKICAqIHpsMzA3M3hfY2hhbl9kZl9vZmZzZXRfZ2V0IC0gZ2V0IGNhY2hlZCBkZl9vZmZzZXQgdnMgdHJhY2tlZCByZWZlcmVuY2UKICAqIEBjaGFuOiBwb2ludGVyIHRvIGNoYW5uZWwgc3RhdGUKQEAgLTIwMCw2ICYjNDM7MjE3LDIxIEBAIHN0YXRpYyBpbmxpbmUgYm9vbCB6bDMwNzN4X2NoYW5fbW9kZV9pc19yZWZsb2NrKGNvbnN0IHN0cnVjdCB6bDMwNzN4X2NoYW4gKmNoYW4pCiAJcmV0dXJuIHpsMzA3M3hfY2hhbl9tb2RlX2dldChjaGFuKSA9PSBaTF9EUExMX01PREVfUkVGU0VMX01PREVfUkVGTE9DSzsKIH0KIAomIzQzOy8qKgomIzQzOyAqIHpsMzA3M3hfY2hhbl9tb2RlX3N1cHBvcnRzX3RpZSAtIGNoZWNrIGlmIGNoYW5uZWwgbW9kZSBzdXBwb3J0cyBUSUUgd3JpdGUKJiM0MzsgKiBAY2hhbjogcG9pbnRlciB0byBjaGFubmVsIHN0YXRlCiYjNDM7ICoKJiM0MzsgKiBUSUUgd3JpdGUgaXMgc3VwcG9ydGVkIGluIEFVVE8gYW5kIFJFRkxPQ0sgbW9kZXMgcmVnYXJkbGVzcyBvZiBsb2NrIHN0YXRlLgomIzQzOyAqCiYjNDM7ICogUmV0dXJuOiB0cnVlIGlmIFRJRSB3cml0ZSBpcyBzdXBwb3J0ZWQsIGZhbHNlIG90aGVyd2lzZQomIzQzOyAqLwomIzQzO3N0YXRpYyBpbmxpbmUgYm9vbAomIzQzO3psMzA3M3hfY2hhbl9tb2RlX3N1cHBvcnRzX3RpZShjb25zdCBzdHJ1Y3QgemwzMDczeF9jaGFuICpjaGFuKQomIzQzO3sKJiM0MzsJcmV0dXJuIHpsMzA3M3hfY2hhbl9tb2RlX2lzX2F1dG8oY2hhbikgfHwKJiM0MzsJCXpsMzA3M3hfY2hhbl9tb2RlX2lzX3JlZmxvY2soY2hhbik7CiYjNDM7fQomIzQzOwogLyoqCiAgKiB6bDMwNzN4X2NoYW5faXNfaG9fcmVhZHkgLSBjaGVjayBpZiBob2xkb3ZlciBpcyByZWFkeQogICogQGNoYW46IHBvaW50ZXIgdG8gY2hhbm5lbCBzdGF0ZQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9kcGxsL3psMzA3M3gvY29yZS5jIGIvZHJpdmVycy9kcGxsL3psMzA3M3gvY29yZS5jCmluZGV4IDViMmQ3N2YyYzIyODguLjIzMGRmMDhlMjdjZDEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZHBsbC96bDMwNzN4L2NvcmUuYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL2RwbGwvemwzMDczeC9jb3JlLmMKQEAgLTMyMiw3ICYjNDM7MzIyLDcgQEAgaW50IHpsMzA3M3hfd3JpdGVfdTQ4KHN0cnVjdCB6bDMwNzN4X2RldiAqemxkZXYsIHVuc2lnbmVkIGludCByZWcsIHU2NCB2YWwpCiBpbnQgemwzMDczeF9wb2xsX3plcm9fdTgoc3RydWN0IHpsMzA3M3hfZGV2ICp6bGRldiwgdW5zaWduZWQgaW50IHJlZywKIAkJCSB1OCBtYXNrLCB1bnNpZ25lZCBpbnQgdGltZW91dF91cykKIHsKLSNkZWZpbmUgWkxfUE9MTF9TTEVFUF9VUyAxMAomIzQzOwl1bnNpZ25lZCBpbnQgc2xlZXBfdXMgPSB0aW1lb3V0X3VzIC8gNTA7CiAJdW5zaWduZWQgaW50IHZhbDsKIAogCS8qIENoZWNrIHRoZSByZWdpc3RlciBpcyA4Yml0ICovCkBAIC0zMzYsNyAmIzQzOzMzNiw3IEBAIGludCB6bDMwNzN4X3BvbGxfemVyb191OChzdHJ1Y3QgemwzMDczeF9kZXYgKnpsZGV2LCB1bnNpZ25lZCBpbnQgcmVnLAogCXJlZyA9IFpMX1JFR19BRERSKHJlZykgJiM0MzsgWkxfUkFOR0VfT0ZGU0VUOwogCiAJcmV0dXJuIHJlZ21hcF9yZWFkX3BvbGxfdGltZW91dCh6bGRldi0mZ3Q7cmVnbWFwLCByZWcsIHZhbCwgISh2YWwgJmFtcDsgbWFzayksCi0JCQkJCVpMX1BPTExfU0xFRVBfVVMsIHRpbWVvdXRfdXMpOwomIzQzOwkJCQkJc2xlZXBfdXMsIHRpbWVvdXRfdXMpOwogfQogCiBpbnQgemwzMDczeF9tYl9vcChzdHJ1Y3QgemwzMDczeF9kZXYgKnpsZGV2LCB1bnNpZ25lZCBpbnQgb3BfcmVnLCB1OCBvcF92YWwsCkBAIC01MTEsNiAmIzQzOzUxMSwxMSBAQCB6bDMwNzN4X2Rldl9zdGF0ZV9mZXRjaChzdHJ1Y3QgemwzMDczeF9kZXYgKnpsZGV2KQogCWludCByYzsKIAl1OCBpOwogCiYjNDM7CXJjID0gemwzMDczeF9yZWFkX3UxNih6bGRldiwgWkxfUkVHX09VVFBVVF9TVEVQX1RJTUVfTUFTSywKJiM0MzsJCQkgICAgICAmYW1wO3psZGV2LSZndDtvdXRfc3RlcF90aW1lX21hc2spOwomIzQzOwlpZiAocmMpCiYjNDM7CQlyZXR1cm4gcmM7CiYjNDM7CiAJZm9yIChpID0gMDsgaSAmbHQ7IFpMMzA3M1hfTlVNX1JFRlM7IGkmIzQzOyYjNDM7KSB7CiAJCXJjID0gemwzMDczeF9yZWZfc3RhdGVfZmV0Y2goemxkZXYsIGkpOwogCQlpZiAocmMpIHsKQEAgLTEwMzQsNiAmIzQzOzEwMzksMTQgQEAgaW50IHpsMzA3M3hfZGV2X3Byb2JlKHN0cnVjdCB6bDMwNzN4X2RldiAqemxkZXYpCiAJICogYW5kL29yIHBvbGxzIGFyZSByZXF1aXJlZCB0byBiZSBkb25lIGF0b21pY2FsbHkuCiAJICovCiAJcmMgPSBkZXZtX211dGV4X2luaXQoemxkZXYtJmd0O2RldiwgJmFtcDt6bGRldi0mZ3Q7bXVsdGlvcF9sb2NrKTsKJiM0MzsJaWYgKHJjKQomIzQzOwkJcmV0dXJuIGRldl9lcnJfcHJvYmUoemxkZXYtJmd0O2RldiwgcmMsCiYjNDM7CQkJCSAgICAgJiMzNDtGYWlsZWQgdG8gaW5pdGlhbGl6ZSBtdXRleFxuJiMzNDspOwomIzQzOwlyYyA9IGRldm1fbXV0ZXhfaW5pdCh6bGRldi0mZ3Q7ZGV2LCAmYW1wO3psZGV2LSZndDtwaGFzZV9zdGVwX2xvY2spOwomIzQzOwlpZiAocmMpCiYjNDM7CQlyZXR1cm4gZGV2X2Vycl9wcm9iZSh6bGRldi0mZ3Q7ZGV2LCByYywKJiM0MzsJCQkJICAgICAmIzM0O0ZhaWxlZCB0byBpbml0aWFsaXplIG11dGV4XG4mIzM0Oyk7CiYjNDM7CXJjID0gZGV2bV9tdXRleF9pbml0KHpsZGV2LSZndDtkZXYsICZhbXA7emxkZXYtJmd0O3RpZV9sb2NrKTsKIAlpZiAocmMpCiAJCXJldHVybiBkZXZfZXJyX3Byb2JlKHpsZGV2LSZndDtkZXYsIHJjLAogCQkJCSAgICAgJiMzNDtGYWlsZWQgdG8gaW5pdGlhbGl6ZSBtdXRleFxuJiMzNDspOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9kcGxsL3psMzA3M3gvY29yZS5oIGIvZHJpdmVycy9kcGxsL3psMzA3M3gvY29yZS5oCmluZGV4IDc4ZGMyMDhmM2VlYTIuLjY3YzEwZTI1OTUxMTggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZHBsbC96bDMwNzN4L2NvcmUuaAomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL2RwbGwvemwzMDczeC9jb3JlLmgKQEAgLTI2LDYgJiM0MzsyNiwxMCBAQCBzdHJ1Y3QgemwzMDczeF9kcGxsOwogI2RlZmluZSBaTF9QT0xMX0hXUkVHX1RJTUVPVVRfVVMJKDUwICogVVNFQ19QRVJfTVNFQykKICNkZWZpbmUgWkxfUE9MTF9NQl9USU1FT1VUX1VTCQkoMzAgKiBVU0VDX1BFUl9NU0VDKQogI2RlZmluZSBaTF9QT0xMX1BIQVNFX0VSUl9USU1FT1VUX1VTCSg1MCAqIFVTRUNfUEVSX01TRUMpCiYjNDM7I2RlZmluZSBaTF9QT0xMX1BIQVNFX1NURVBfVElNRU9VVF9VUwkoMzAwMCAqIFVTRUNfUEVSX01TRUMpCiYjNDM7I2RlZmluZSBaTF9QT0xMX1RJRV9XUl9USU1FT1VUX1VTCSgxMDAwICogVVNFQ19QRVJfTVNFQykKJiM0MzsjZGVmaW5lIFpMX1BPTExfVE9EX1JEX1RJTUVPVVRfVVMJKDMwICogVVNFQ19QRVJfTVNFQykKJiM0MzsjZGVmaW5lIFpMX1BPTExfVE9EX1dSX1RJTUVPVVRfVVMJKDEwMDAgKiBVU0VDX1BFUl9NU0VDKQogCiBlbnVtIHpsMzA3M3hfZmxhZ3MgewogCVpMMzA3M1hfRkxBR19SRUZfUEhBU0VfQ09NUF8zMl9CSVQsCkBAIC01NSw2ICYjNDM7NTksOCBAQCBzdHJ1Y3QgemwzMDczeF9jaGlwX2luZm8gewogICogQHJlZ21hcDogcmVnbWFwIHRvIGFjY2VzcyBkZXZpY2UgcmVnaXN0ZXJzCiAgKiBAaW5mbzogZGV0ZWN0ZWQgY2hpcCBpbmZvCiAgKiBAbXVsdGlvcF9sb2NrOiB0byBzZXJpYWxpemUgbXVsdGlwbGUgcmVnaXN0ZXIgb3BlcmF0aW9ucwomIzQzOyAqIEB0aWVfbG9jazogdG8gc2VyaWFsaXplIFRJRSB3cml0ZSBvcGVyYXRpb25zCiYjNDM7ICogQHBoYXNlX3N0ZXBfbG9jazogdG8gc2VyaWFsaXplIG91dHB1dCBwaGFzZSBzdGVwIG9wZXJhdGlvbnMKICAqIEByZWY6IGFycmF5IG9mIGlucHV0IHJlZmVyZW5jZXMmIzM5OyBpbnZhcmlhbnRzCiAgKiBAb3V0OiBhcnJheSBvZiBvdXRzJiMzOTsgaW52YXJpYW50cwogICogQHN5bnRoOiBhcnJheSBvZiBzeW50aHMmIzM5OyBpbnZhcmlhbnRzCkBAIC02Myw2ICYjNDM7NjksNyBAQCBzdHJ1Y3QgemwzMDczeF9jaGlwX2luZm8gewogICogQGt3b3JrZXI6IHRocmVhZCBmb3IgcGVyaW9kaWMgd29yawogICogQHdvcms6IHBlcmlvZGljIHdvcmsKICAqIEBjbG9ja19pZDogY2xvY2sgaWQgb2YgdGhlIGRldmljZQomIzQzOyAqIEBvdXRfc3RlcF90aW1lX21hc2s6IG91dHB1dCBzdGVwLXRpbWUgbWFzayAoZGV2aWNlLWdsb2JhbCkKICAqIEBwaGFzZV9hdmdfZmFjdG9yOiBwaGFzZSBvZmZzZXQgbWVhc3VyZW1lbnQgYXZlcmFnaW5nIGZhY3RvcgogICogQGZyZXFfbW9uaXRvcjogaXMgZnJlcXVlbmN5IG1vbml0b3IgZW5hYmxlZAogICovCkBAIC03MSw2ICYjNDM7NzgsOCBAQCBzdHJ1Y3QgemwzMDczeF9kZXYgewogCXN0cnVjdCByZWdtYXAJCQkqcmVnbWFwOwogCWNvbnN0IHN0cnVjdCB6bDMwNzN4X2NoaXBfaW5mbwkqaW5mbzsKIAlzdHJ1Y3QgbXV0ZXgJCQltdWx0aW9wX2xvY2s7CiYjNDM7CXN0cnVjdCBtdXRleAkJCXRpZV9sb2NrOwomIzQzOwlzdHJ1Y3QgbXV0ZXgJCQlwaGFzZV9zdGVwX2xvY2s7CiAKIAkvKiBJbnZhcmlhbnRzICovCiAJc3RydWN0IHpsMzA3M3hfcmVmCXJlZltaTDMwNzNYX05VTV9SRUZTXTsKQEAgLTg3LDYgJiM0Mzs5Niw3IEBAIHN0cnVjdCB6bDMwNzN4X2RldiB7CiAKIAkvKiBQZXItY2hpcCBwYXJhbWV0ZXJzICovCiAJdTY0CQkJY2xvY2tfaWQ7CiYjNDM7CXUxNgkJCW91dF9zdGVwX3RpbWVfbWFzazsKIAl1OAkJCXBoYXNlX2F2Z19mYWN0b3I7CiAJYm9vbAkJCWZyZXFfbW9uaXRvcjsKIH07CkBAIC0zMDgsNiAmIzQzOzMxOCwxOSBAQCB6bDMwNzN4X2Rldl9vdXRfaXNfZW5hYmxlZChzdHJ1Y3QgemwzMDczeF9kZXYgKnpsZGV2LCB1OCBpbmRleCkKIAlyZXR1cm4gemwzMDczeF9zeW50aF9pc19lbmFibGVkKHN5bnRoKSAmYW1wOyZhbXA7IHpsMzA3M3hfb3V0X2lzX2VuYWJsZWQob3V0KTsKIH0KIAomIzQzOy8qKgomIzQzOyAqIHpsMzA3M3hfZGV2X291dF9pc19zdGVwcGVkIC0gY2hlY2sgaWYgb3V0cHV0IGlzIGluIHN0ZXAtdGltZSBtYXNrCiYjNDM7ICogQHpsZGV2OiBwb2ludGVyIHRvIHpsMzA3M3ggZGV2aWNlCiYjNDM7ICogQGluZGV4OiBvdXRwdXQgaW5kZXgKJiM0MzsgKgomIzQzOyAqIFJldHVybjogdHJ1ZSBpZiBvdXRwdXQgaXMgYWZmZWN0ZWQgYnkgc3RlcC10aW1lIG9wZXJhdGlvbnMKJiM0MzsgKi8KJiM0MztzdGF0aWMgaW5saW5lIGJvb2wKJiM0Mzt6bDMwNzN4X2Rldl9vdXRfaXNfc3RlcHBlZChzdHJ1Y3QgemwzMDczeF9kZXYgKnpsZGV2LCB1OCBpbmRleCkKJiM0Mzt7CiYjNDM7CXJldHVybiAhISh6bGRldi0mZ3Q7b3V0X3N0ZXBfdGltZV9tYXNrICZhbXA7IEJJVChpbmRleCkpOwomIzQzO30KJiM0MzsKIC8qKgogICogemwzMDczeF9kZXZfb3V0X2RwbGxfZ2V0IC0gZ2V0IERQTEwgSUQgdGhlIG91dHB1dCBpcyBkcml2ZW4gYnkKICAqIEB6bGRldjogcG9pbnRlciB0byB6bDMwNzN4IGRldmljZQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9kcGxsL3psMzA3M3gvZHBsbC5jIGIvZHJpdmVycy9kcGxsL3psMzA3M3gvZHBsbC5jCmluZGV4IDA0ODhhZTZhYzQ4NmMuLjgzMDFhZDM0MzY1OGEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZHBsbC96bDMwNzN4L2RwbGwuYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL2RwbGwvemwzMDczeC9kcGxsLmMKQEAgLTIsNiAmIzQzOzIsNyBAQAogCiAjaW5jbHVkZSAmbHQ7bGludXgvYml0cy5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L2JpdGZpZWxkLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L2NsZWFudXAuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9idWcuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9jb250YWluZXJfb2YuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9kZXZfcHJpbnRrLmgmZ3Q7CkBAIC0xMyw2ICYjNDM7MTQsNyBAQAogI2luY2x1ZGUgJmx0O2xpbnV4L25ldGxpbmsuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9wcm9wZXJ0eS5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9wdHBfY2xvY2tfa2VybmVsLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvc2xhYi5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L3NwcmludGYuaCZndDsKIApAQCAtMjI3NSw0NSAmIzQzOzIyNzcsMzg0IEBAIHpsMzA3M3hfZHBsbF9pbml0X2ZpbmVfcGhhc2VfYWRqdXN0KHN0cnVjdCB6bDMwNzN4X2RldiAqemxkZXYpCiAJcmV0dXJuIHpsMzA3M3hfd3JpdGVfdTgoemxkZXYsIFpMX1JFR19TWU5USF9QSEFTRV9TSElGVF9DVFJMLCAweDAxKTsKIH0KIAomIzQzOy8qIE1heGltdW0gZnJlcXVlbmN5IGFkanVzdG1lbnQ6ICYjNDM7LTElIG9mIG5vbWluYWwgaW4gcHBiICovCiYjNDM7I2RlZmluZSBaTDMwNzNYX0RQTExfUFRQX01BWF9BREoJMTAwMDAwMDAKJiM0MzsKIC8qKgotICogemwzMDczeF9kcGxsX2FsbG9jIC0gYWxsb2NhdGUgRFBMTCBkZXZpY2UKLSAqIEB6bGRldjogcG9pbnRlciB0byB6bDMwNzN4IGRldmljZQotICogQGNoOiBEUExMIGNoYW5uZWwgbnVtYmVyCiYjNDM7ICogemwzMDczeF9kcGxsX3B0cF9nZXR0aW1leDY0IC0gcmVhZCBjdXJyZW50IHRpbWUgZnJvbSBUb0QgY291bnRlcnMKJiM0MzsgKiBAaW5mbzogUFRQIGNsb2NrIGluZm8KJiM0MzsgKiBAdHM6IHRpbWVzcGVjIHRvIHN0b3JlIGN1cnJlbnQgdGltZQomIzQzOyAqIEBzdHM6IG9wdGlvbmFsIHN5c3RlbSB0aW1lc3RhbXAgcGFpciBmb3IgY3Jvc3MtdGltZXN0YW1waW5nCiAgKgotICogQWxsb2NhdGVzIERQTEwgZGV2aWNlIHN0cnVjdHVyZSBmb3IgZ2l2ZW4gRFBMTCBjaGFubmVsLgomIzQzOyAqIFJldHVybjogMCBvbiBzdWNjZXNzLCAmbHQ7MCBvbiBlcnJvcgomIzQzOyAqLwomIzQzO3N0YXRpYyBpbnQgemwzMDczeF9kcGxsX3B0cF9nZXR0aW1leDY0KHN0cnVjdCBwdHBfY2xvY2tfaW5mbyAqaW5mbywKJiM0MzsJCQkJICAgICAgIHN0cnVjdCB0aW1lc3BlYzY0ICp0cywKJiM0MzsJCQkJICAgICAgIHN0cnVjdCBwdHBfc3lzdGVtX3RpbWVzdGFtcCAqc3RzKQomIzQzO3sKJiM0MzsJc3RydWN0IHpsMzA3M3hfZHBsbCAqemxkcGxsID0gY29udGFpbmVyX29mKGluZm8sIHN0cnVjdCB6bDMwNzN4X2RwbGwsCiYjNDM7CQkJCQkJICAgcHRwX2luZm8pOwomIzQzOwomIzQzOwlndWFyZChtdXRleCkoJmFtcDt6bGRwbGwtJmd0O2xvY2spOwomIzQzOwomIzQzOwlyZXR1cm4gemwzMDczeF9jaGFuX3RvZF9yZWFkKHpsZHBsbC0mZ3Q7ZGV2LCB6bGRwbGwtJmd0O2lkLCBmYWxzZSwgdHMsIHN0cyk7CiYjNDM7fQomIzQzOwomIzQzOy8qKgomIzQzOyAqIHpsMzA3M3hfZHBsbF9wdHBfc2V0dGltZTY0IC0gc2V0IFRvRCBjb3VudGVycyB0byBnaXZlbiB0aW1lCiYjNDM7ICogQGluZm86IFBUUCBjbG9jayBpbmZvCiYjNDM7ICogQHRzOiB0aW1lc3BlYyB3aXRoIHRpbWUgdG8gc2V0CiAgKgotICogUmV0dXJuOiBwb2ludGVyIHRvIERQTEwgZGV2aWNlIG9uIHN1Y2Nlc3MsIGVycm9yIHBvaW50ZXIgb24gZXJyb3IKJiM0MzsgKiBSZXR1cm46IDAgb24gc3VjY2VzcywgJmx0OzAgb24gZXJyb3IKICAqLwotc3RydWN0IHpsMzA3M3hfZHBsbCAqCi16bDMwNzN4X2RwbGxfYWxsb2Moc3RydWN0IHpsMzA3M3hfZGV2ICp6bGRldiwgdTggY2gpCiYjNDM7c3RhdGljIGludCB6bDMwNzN4X2RwbGxfcHRwX3NldHRpbWU2NChzdHJ1Y3QgcHRwX2Nsb2NrX2luZm8gKmluZm8sCiYjNDM7CQkJCSAgICAgIGNvbnN0IHN0cnVjdCB0aW1lc3BlYzY0ICp0cykKIHsKLQlzdHJ1Y3QgemwzMDczeF9kcGxsICp6bGRwbGw7CiYjNDM7CXN0cnVjdCB6bDMwNzN4X2RwbGwgKnpsZHBsbCA9IGNvbnRhaW5lcl9vZihpbmZvLCBzdHJ1Y3QgemwzMDczeF9kcGxsLAomIzQzOwkJCQkJCSAgIHB0cF9pbmZvKTsKIAotCXpsZHBsbCA9IGt6YWxsb2Nfb2JqKCp6bGRwbGwpOwotCWlmICghemxkcGxsKQotCQlyZXR1cm4gRVJSX1BUUigtRU5PTUVNKTsKJiM0MzsJZ3VhcmQobXV0ZXgpKCZhbXA7emxkcGxsLSZndDtsb2NrKTsKIAotCXpsZHBsbC0mZ3Q7ZGV2ID0gemxkZXY7Ci0JemxkcGxsLSZndDtpZCA9IGNoOwotCW11dGV4X2luaXQoJmFtcDt6bGRwbGwtJmd0O2xvY2spOwotCUlOSVRfTElTVF9IRUFEKCZhbXA7emxkcGxsLSZndDtwaW5zKTsKJiM0MzsJcmV0dXJuIHpsMzA3M3hfY2hhbl90b2Rfd3JpdGUoemxkcGxsLSZndDtkZXYsIHpsZHBsbC0mZ3Q7aWQsICp0cyk7CiYjNDM7fQogCi0JcmV0dXJuIHpsZHBsbDsKJiM0MzsvKioKJiM0MzsgKiB6bDMwNzN4X2RwbGxfcHRwX2FkanRpbWVfcGhhc2Vfc3RlcCAtIGFkanVzdCBzdWItc2Vjb25kIHRpbWUgdmlhIHBoYXNlIHN0ZXAKJiM0MzsgKiBAemxkcGxsOiBEUExMIGNoYW5uZWwKJiM0MzsgKiBAZGVsdGE6IHRpbWUgYWRqdXN0bWVudCBpbiBuYW5vc2Vjb25kcyAobXVzdCBiZSB3aXRoaW4gKC1OU0VDX1BFUl9TRUMsCiYjNDM7ICogICAgICAgICBOU0VDX1BFUl9TRUMpKQomIzQzOyAqCiYjNDM7ICogVXNlcyB0aGUgb3V0cHV0IHBoYXNlIHN0ZXAgbWVjaGFuaXNtIHdpdGggdG9kX3N0ZXA9MSB0byBhZGp1c3QgYm90aAomIzQzOyAqIHRoZSBvdXRwdXQgY2xvY2sgcGhhc2UgYW5kIHRoZSBUb0QgY291bnRlciBzaW11bHRhbmVvdXNseS4gVGhpcyBrZWVwcwomIzQzOyAqIG91dHB1dHMgYW5kIFRvRCBjb2hlcmVudC4gT25seSB2YWxpZCBmb3IgTkNPLgomIzQzOyAqCiYjNDM7ICogT3V0cHV0cyBhcmUgZ3JvdXBlZCBieSBzeW50aGVzaXplciBzaW5jZSB0aGUgcGhhc2Ugc3RlcCB2YWx1ZSBpcyBpbgomIzQzOyAqIHN5bnRoZXNpemVyIGNsb2NrIGN5Y2xlcy4gVGhlIGZpcnN0IHN5bnRoIGdyb3VwIHdpdGggZW5hYmxlZCBvdXRwdXRzCiYjNDM7ICogdXNlcyB0b2Rfc3RlcCB0byBhZGp1c3QgYm90aCBvdXRwdXRzIGFuZCB0aGUgVG9EIGNvdW50ZXIuIFJlbWFpbmluZwomIzQzOyAqIGdyb3VwcyBzdGVwIG91dHB1dHMgb25seS4gSWYgbm8gc3ludGggaGFzIGVuYWJsZWQgb3V0cHV0cywgdGhlIFRvRAomIzQzOyAqIGNvdW50ZXIgaXMgc3RlcHBlZCBhbG9uZSB1c2luZyBhbiBlbXB0eSBvdXRwdXQgbWFzayAodGhlIEZXIHVzZXMKJiM0MzsgKiB0aGUgZmlyc3QgZW5hYmxlZCBzeW50aCYjMzk7cyBwZXJpb2QgZm9yIHRoZSBjb252ZXJzaW9uKS4KJiM0MzsgKgomIzQzOyAqIFJldHVybjoKJiM0MzsgKiAqICUwCQkJLSBzdWNjZXNzIChvciBwYXJ0aWFsIHN1Y2Nlc3MgaWYgYSBsYXRlciBzeW50aCBncm91cAomIzQzOyAqCQkJICBmYWlsZWQgYWZ0ZXIgdGhlIGZpcnN0IHdhcyBhbHJlYWR5IHN0ZXBwZWQpCiYjNDM7ICogKiAlLUVPUE5PVFNVUFAJLSBubyBzeW50aHMgYXZhaWxhYmxlCiYjNDM7ICogKiBuZWdhdGl2ZQkJLSBlcnJvcgomIzQzOyAqLwomIzQzO3N0YXRpYyBpbnQgemwzMDczeF9kcGxsX3B0cF9hZGp0aW1lX3BoYXNlX3N0ZXAoc3RydWN0IHpsMzA3M3hfZHBsbCAqemxkcGxsLAomIzQzOwkJCQkJICAgICAgIHM2NCBkZWx0YSkKJiM0Mzt7CiYjNDM7CXUxNiBzeW50aF9tYXNrW1pMMzA3M1hfTlVNX1NZTlRIU10gPSB7fTsKJiM0MzsJc3RydWN0IHpsMzA3M3hfZGV2ICp6bGRldiA9IHpsZHBsbC0mZ3Q7ZGV2OwomIzQzOwljb25zdCBzdHJ1Y3QgemwzMDczeF9zeW50aCAqc3ludGg7CiYjNDM7CXN0cnVjdCB6bDMwNzN4X2RwbGxfcGluICpwaW47CiYjNDM7CXUzMiBmaXJzdF9zeW50aF9mcmVxID0gMDsKJiM0MzsJYm9vbCB0b2Rfc3RlcHBlZCA9IGZhbHNlOwomIzQzOwlzMzIgc3RlcF9jeWNsZXM7CiYjNDM7CXUzMiBzeW50aF9mcmVxOwomIzQzOwlpbnQgcmM7CiYjNDM7CXU4IGk7CiYjNDM7CiYjNDM7CS8qIEJ1aWxkIHBlci1zeW50aCBvdXRwdXQgbWFza3MgZnJvbSByZWdpc3RlcmVkIG91dHB1dCBwaW5zICovCiYjNDM7CWxpc3RfZm9yX2VhY2hfZW50cnkocGluLCAmYW1wO3psZHBsbC0mZ3Q7cGlucywgbGlzdCkgewomIzQzOwkJdTggb3V0X2lkLCBzeW50aF9pZDsKJiM0MzsKJiM0MzsJCWlmICh6bDMwNzN4X2RwbGxfaXNfaW5wdXRfcGluKHBpbikpCiYjNDM7CQkJY29udGludWU7CiYjNDM7CiYjNDM7CQlvdXRfaWQgPSB6bDMwNzN4X291dHB1dF9waW5fb3V0X2dldChwaW4tJmd0O2lkKTsKJiM0MzsKJiM0MzsJCWlmICghemwzMDczeF9kZXZfb3V0X2lzX3N0ZXBwZWQoemxkZXYsIG91dF9pZCkpCiYjNDM7CQkJY29udGludWU7CiYjNDM7CiYjNDM7CQlzeW50aF9pZCA9IHpsMzA3M3hfZGV2X291dF9zeW50aF9nZXQoemxkZXYsIG91dF9pZCk7CiYjNDM7CQlpZiAoc3ludGhfaWQgJmd0Oz0gWkwzMDczWF9OVU1fU1lOVEhTKSB7CiYjNDM7CQkJZGV2X3dhcm4oemxkZXYtJmd0O2RldiwgJiMzNDtVbmV4cGVjdGVkIHN5bnRoIGlkIGZvciBPVVQldVxuJiMzNDssCiYjNDM7CQkJCSBvdXRfaWQpOwomIzQzOwkJCWNvbnRpbnVlOwomIzQzOwkJfQomIzQzOwkJc3ludGhfbWFza1tzeW50aF9pZF0gfD0gQklUKG91dF9pZCk7CiYjNDM7CX0KJiM0MzsKJiM0MzsJLyogUHJvY2VzcyBlYWNoIHN5bnRoIGdyb3VwICovCiYjNDM7CWZvciAoaSA9IDA7IGkgJmx0OyBaTDMwNzNYX05VTV9TWU5USFM7IGkmIzQzOyYjNDM7KSB7CiYjNDM7CQlzeW50aCA9IHpsMzA3M3hfc3ludGhfc3RhdGVfZ2V0KHpsZGV2LCBpKTsKJiM0MzsJCWlmICghemwzMDczeF9zeW50aF9pc19lbmFibGVkKHN5bnRoKSB8fAomIzQzOwkJICAgIHpsMzA3M3hfc3ludGhfZHBsbF9nZXQoc3ludGgpICE9IHpsZHBsbC0mZ3Q7aWQpCiYjNDM7CQkJY29udGludWU7CiYjNDM7CiYjNDM7CQlzeW50aF9mcmVxID0gemwzMDczeF9zeW50aF9mcmVxX2dldChzeW50aCk7CiYjNDM7CiYjNDM7CQkvKiBSZW1lbWJlciBmaXJzdCBlbmFibGVkIHN5bnRoIGZyZXEgZm9yIFRvRC1vbmx5IGZhbGxiYWNrICovCiYjNDM7CQlpZiAoIWZpcnN0X3N5bnRoX2ZyZXEpCiYjNDM7CQkJZmlyc3Rfc3ludGhfZnJlcSA9IHN5bnRoX2ZyZXE7CiYjNDM7CiYjNDM7CQlpZiAoIXN5bnRoX21hc2tbaV0pCiYjNDM7CQkJY29udGludWU7CiYjNDM7CiYjNDM7CQkvKiBTYWZlIGZvciBzMzI6IG1heCBzeW50aCBmcmVxIGlzIDc1MCBNSHogKi8KJiM0MzsJCXN0ZXBfY3ljbGVzID0gZGl2X3M2NChkZWx0YSAqIHN5bnRoX2ZyZXEsIE5TRUNfUEVSX1NFQyk7CiYjNDM7CiYjNDM7CQlyYyA9IHpsMzA3M3hfY2hhbl9waGFzZV9zdGVwKHpsZGV2LCB6bGRwbGwtJmd0O2lkLAomIzQzOwkJCQkJICAgICBzeW50aF9tYXNrW2ldLCBzdGVwX2N5Y2xlcywKJiM0MzsJCQkJCSAgICAgIXRvZF9zdGVwcGVkKTsKJiM0MzsJCWlmIChyYykgewomIzQzOwkJCWlmICh0b2Rfc3RlcHBlZCkgewomIzQzOwkJCQlkZXZfd2Fybih6bGRldi0mZ3Q7ZGV2LAomIzQzOwkJCQkJICYjMzQ7UGFydGlhbCBwaGFzZSBzdGVwIGZhaWx1cmVcbiYjMzQ7KTsKJiM0MzsJCQkJcmV0dXJuIDA7CiYjNDM7CQkJfQomIzQzOwkJCXJldHVybiByYzsKJiM0MzsJCX0KJiM0MzsJCXRvZF9zdGVwcGVkID0gdHJ1ZTsKJiM0MzsJfQomIzQzOwomIzQzOwlpZiAoIWZpcnN0X3N5bnRoX2ZyZXEpCiYjNDM7CQlyZXR1cm4gLUVPUE5PVFNVUFA7CiYjNDM7CiYjNDM7CS8qIE5vIGVuYWJsZWQgb3V0cHV0cyBmb3VuZDsgc3RlcCBUb0QgY291bnRlciBvbmx5IHVzaW5nIHRoZQomIzQzOwkgKiBmaXJzdCBlbmFibGVkIHN5bnRoJiMzOTtzIHBlcmlvZCAoZW1wdHkgb3V0cHV0IG1hc2spLgomIzQzOwkgKi8KJiM0MzsJaWYgKCF0b2Rfc3RlcHBlZCkgewomIzQzOwkJc3RlcF9jeWNsZXMgPSBkaXZfczY0KGRlbHRhICogZmlyc3Rfc3ludGhfZnJlcSwgTlNFQ19QRVJfU0VDKTsKJiM0MzsJCXJldHVybiB6bDMwNzN4X2NoYW5fcGhhc2Vfc3RlcCh6bGRldiwgemxkcGxsLSZndDtpZCwgMCwKJiM0MzsJCQkJCSAgICAgICBzdGVwX2N5Y2xlcywgdHJ1ZSk7CiYjNDM7CX0KJiM0MzsKJiM0MzsJcmV0dXJuIDA7CiB9CiAKIC8qKgotICogemwzMDczeF9kcGxsX2ZyZWUgLSBmcmVlIERQTEwgZGV2aWNlCi0gKiBAemxkcGxsOiBwb2ludGVyIHRvIHpsMzA3M3hfZHBsbCBzdHJ1Y3R1cmUKJiM0MzsgKiB6bDMwNzN4X2RwbGxfcHRwX2FkanRpbWUgLSBhZGp1c3QgUFRQIGNsb2NrIHRpbWUKJiM0MzsgKiBAaW5mbzogUFRQIGNsb2NrIGluZm8KJiM0MzsgKiBAZGVsdGE6IHRpbWUgYWRqdXN0bWVudCBpbiBuYW5vc2Vjb25kcwogICoKLSAqIERlYWxsb2NhdGVzIGdpdmVuIERQTEwgZGV2aWNlIHByZXZpb3VzbHkgYWxsb2NhdGVkIGJ5IEB6bDMwNzN4X2RwbGxfYWxsb2MuCiYjNDM7ICogRm9yIE5DTywgbGFyZ2UgZGVsdGFzICgmZ3Q7PSAxIHNlY29uZCkgYXJlIHNwbGl0IGludG8gYSBUb0QKJiM0MzsgKiByZWFkLW1vZGlmeS13cml0ZSBmb3IgdGhlIHNlY29uZHMgcGFydCBhbmQgYW4gb3V0cHV0IHBoYXNlIHN0ZXAgZm9yCiYjNDM7ICogdGhlIHN1Yi1zZWNvbmQgcmVtYWluZGVyLiBTdWItc2Vjb25kIGRlbHRhcyB1c2UgcGhhc2Ugc3RlcCBkaXJlY3RseSwKJiM0MzsgKiBmYWxsaW5nIGJhY2sgdG8gVG9EIHJlYWQtbW9kaWZ5LXdyaXRlIGlmIHBoYXNlIHN0ZXAgb3IgVElFIHdyaXRlCiYjNDM7ICogZmFpbHMuIEluIEFVVE8vUkVGTE9DSyBtb2RlcywgbGFyZ2UgZGVsdGFzIGFyZSBzcGxpdCBpbnRvIFRvRAomIzQzOyAqIHJlYWQtbW9kaWZ5LXdyaXRlIGZvciBzZWNvbmRzIGFuZCBUSUUgd3JpdGUgZm9yIHRoZSBzdWItc2Vjb25kCiYjNDM7ICogcmVtYWluZGVyLiBTdWItc2Vjb25kIGRlbHRhcyB1c2UgVElFIHdyaXRlIGRpcmVjdGx5LgomIzQzOyAqCiYjNDM7ICogSWYgdGhlIHNlY29uZHMgcGFydCB3YXMgYWxyZWFkeSBjb21taXR0ZWQgd2hlbiB0aGUgc3ViLXNlY29uZAomIzQzOyAqIG1lY2hhbmlzbSBmYWlscywgcmV0dXJucyAwIHRvIHByZXZlbnQgdGhlIFBUUCBzZXJ2byBmcm9tIHJldHJ5aW5nCiYjNDM7ICogdGhlIGZ1bGwgZGVsdGEgYW5kIGFwcGx5aW5nIHNlY29uZHMgYWdhaW4uCiYjNDM7ICoKJiM0MzsgKiBSZXR1cm46IDAgb24gc3VjY2VzcyAob3IgcGFydGlhbCBzdWNjZXNzKSwgJmx0OzAgb24gZXJyb3IKICAqLwotdm9pZAotemwzMDczeF9kcGxsX2ZyZWUoc3RydWN0IHpsMzA3M3hfZHBsbCAqemxkcGxsKQomIzQzO3N0YXRpYyBpbnQgemwzMDczeF9kcGxsX3B0cF9hZGp0aW1lKHN0cnVjdCBwdHBfY2xvY2tfaW5mbyAqaW5mbywgczY0IGRlbHRhKQogewotCVdBUk4oemxkcGxsLSZndDtkcGxsX2RldiwgJiMzNDtEUExMIGRldmljZSBpcyBzdGlsbCByZWdpc3RlcmVkXG4mIzM0Oyk7CiYjNDM7CXN0cnVjdCB6bDMwNzN4X2RwbGwgKnpsZHBsbCA9IGNvbnRhaW5lcl9vZihpbmZvLCBzdHJ1Y3QgemwzMDczeF9kcGxsLAomIzQzOwkJCQkJCSAgIHB0cF9pbmZvKTsKJiM0MzsJc3RydWN0IHpsMzA3M3hfZGV2ICp6bGRldiA9IHpsZHBsbC0mZ3Q7ZGV2OwomIzQzOwljb25zdCBzdHJ1Y3QgemwzMDczeF9jaGFuICpjaGFuOwomIzQzOwlib29sIHNlY19hZGp1c3RlZCA9IGZhbHNlOwomIzQzOwlzdHJ1Y3QgdGltZXNwZWM2NCB0czsKJiM0MzsJaW50IHJjOwogCi0JbXV0ZXhfZGVzdHJveSgmYW1wO3psZHBsbC0mZ3Q7bG9jayk7Ci0Ja2ZyZWUoemxkcGxsKTsKJiM0MzsJaWYgKCFkZWx0YSkKJiM0MzsJCXJldHVybiAwOwomIzQzOwomIzQzOwlndWFyZChtdXRleCkoJmFtcDt6bGRwbGwtJmd0O2xvY2spOwomIzQzOwomIzQzOwkvKiBNb2RlcyB3aXRob3V0IHBoYXNlIHN0ZXAgb3IgVElFIHVzZSBwbGFpbiBUb0QgYWRqdXN0ICovCiYjNDM7CWNoYW4gPSB6bDMwNzN4X2NoYW5fc3RhdGVfZ2V0KHpsZGV2LCB6bGRwbGwtJmd0O2lkKTsKJiM0MzsJaWYgKCF6bDMwNzN4X2NoYW5fbW9kZV9pc19uY28oY2hhbikgJmFtcDsmYW1wOwomIzQzOwkgICAgIXpsMzA3M3hfY2hhbl9tb2RlX3N1cHBvcnRzX3RpZShjaGFuKSkKJiM0MzsJCXJldHVybiB6bDMwNzN4X2NoYW5fdG9kX2FkanVzdCh6bGRldiwgemxkcGxsLSZndDtpZCwKJiM0MzsJCQkJCSAgICAgICBuc190b190aW1lc3BlYzY0KGRlbHRhKSk7CiYjNDM7CiYjNDM7CS8qIFNwbGl0IG9mZiBzZWNvbmRzIHZpYSBUb0QgcmVhZC1tb2RpZnktd3JpdGUgc28gdGhlIHN1Yi1zZWNvbmQKJiM0MzsJICogcmVtYWluZGVyIGNhbiBiZSBhcHBsaWVkIHRocm91Z2ggdGhlIG91dHB1dC1jb2hlcmVudCBtZWNoYW5pc20KJiM0MzsJICogKHBoYXNlIHN0ZXAgb3IgVElFIHdyaXRlKS4KJiM0MzsJICovCiYjNDM7CWlmIChkZWx0YSAmZ3Q7PSBOU0VDX1BFUl9TRUMgfHwgZGVsdGEgJmx0Oz0gLU5TRUNfUEVSX1NFQykgewomIzQzOwkJczMyIHJlbWFpbmRlcjsKJiM0MzsKJiM0MzsJCXRzLnR2X3NlYyA9IGRpdl9zNjRfcmVtKGRlbHRhLCBOU0VDX1BFUl9TRUMsICZhbXA7cmVtYWluZGVyKTsKJiM0MzsJCXRzLnR2X25zZWMgPSAwOwomIzQzOwkJZGVsdGEgPSByZW1haW5kZXI7CiYjNDM7CiYjNDM7CQlyYyA9IHpsMzA3M3hfY2hhbl90b2RfYWRqdXN0KHpsZGV2LCB6bGRwbGwtJmd0O2lkLCB0cyk7CiYjNDM7CQlpZiAocmMpCiYjNDM7CQkJcmV0dXJuIHJjOwomIzQzOwomIzQzOwkJLyogTm8gc3ViLXNlY29uZCByZW1haW5kZXIsIGRvbmUgKi8KJiM0MzsJCWlmICghZGVsdGEpCiYjNDM7CQkJcmV0dXJuIDA7CiYjNDM7CiYjNDM7CQkvKiBXYWl0IGZvciB0aGUgVG9EIHdyaXRlIHRvIGJlIGFwcGxpZWQgYXQgdGhlIDEgSHogZWRnZQomIzQzOwkJICogYmVmb3JlIGlzc3VpbmcgcGhhc2Ugc3RlcCBvciBUSUUgd3JpdGUsIHNvIHRoZSBwZW5kaW5nCiYjNDM7CQkgKiBXUl9ORVhUXzFIWiBkb2VzIG5vdCBvdmVyd3JpdGUgdGhlIHN1Yi1zZWNvbmQgYWRqdXN0bWVudC4KJiM0MzsJCSAqLwomIzQzOwkJcmMgPSB6bDMwNzN4X2NoYW5fdG9kX3JlYWR5X3dhaXQoemxkZXYsIHpsZHBsbC0mZ3Q7aWQpOwomIzQzOwkJaWYgKHJjKQomIzQzOwkJCXJldHVybiByYzsKJiM0MzsKJiM0MzsJCXNlY19hZGp1c3RlZCA9IHRydWU7CiYjNDM7CX0KJiM0MzsKJiM0MzsJLyogQXBwbHkgc3ViLXNlY29uZCBkZWx0YSB2aWEgcGhhc2Ugc3RlcCAoTkNPKSBvciBUSUUgd3JpdGUgKi8KJiM0MzsJaWYgKHpsMzA3M3hfY2hhbl9tb2RlX2lzX25jbyhjaGFuKSkgewomIzQzOwkJcmMgPSB6bDMwNzN4X2RwbGxfcHRwX2FkanRpbWVfcGhhc2Vfc3RlcCh6bGRwbGwsIGRlbHRhKTsKJiM0MzsJCWlmICghcmMpCiYjNDM7CQkJcmV0dXJuIDA7CiYjNDM7CX0gZWxzZSB7CiYjNDM7CQlyYyA9IHpsMzA3M3hfY2hhbl90aWVfd3JpdGUoemxkZXYsIHpsZHBsbC0mZ3Q7aWQsIGRlbHRhKTsKJiM0MzsJCWlmICghcmMpCiYjNDM7CQkJcmV0dXJuIDA7CiYjNDM7CX0KJiM0MzsKJiM0MzsJLyogUGhhc2Ugc3RlcCBvciBUSUUgd3JpdGUgZmFpbGVkLCBmYWxsIGJhY2sgdG8gVG9EIGFkanVzdCAqLwomIzQzOwlyYyA9IHpsMzA3M3hfY2hhbl90b2RfYWRqdXN0KHpsZGV2LCB6bGRwbGwtJmd0O2lkLAomIzQzOwkJCQkgICAgIG5zX3RvX3RpbWVzcGVjNjQoZGVsdGEpKTsKJiM0MzsKJiM0MzsJLyogSW4gdGhlIHVubGlrZWx5IGV2ZW50IHRoYXQgYm90aCBwaGFzZSBzdGVwL1RJRSB3cml0ZSBhbmQgZmFsbGJhY2sKJiM0MzsJICogVG9EIGFkanVzdCBmYWlsIGFmdGVyIHNlY29uZHMgd2VyZSBhbHJlYWR5IGNvbW1pdHRlZCwgcmV0dXJuCiYjNDM7CSAqIHN1Y2Nlc3MgdG8gcHJldmVudCB0aGUgUFRQIHNlcnZvIGZyb20gcmV0cnlpbmcgdGhlIGZ1bGwgZGVsdGEgYW5kCiYjNDM7CSAqIGFwcGx5aW5nIHNlY29uZHMgYWdhaW4uIFRoZSBzdWItc2Vjb25kIHJlc2lkdWFsIHdpbGwgc2VsZi1jb3JyZWN0CiYjNDM7CSAqIGluIHRoZSBuZXh0IHNlcnZvIGN5Y2xlLgomIzQzOwkgKi8KJiM0MzsJaWYgKHJjICZhbXA7JmFtcDsgc2VjX2FkanVzdGVkKSB7CiYjNDM7CQlkZXZfd2Fybih6bGRldi0mZ3Q7ZGV2LAomIzQzOwkJCSAmIzM0O1N1Yi1zZWNvbmQgYWRqdXN0bWVudCBmYWlsZWQgYWZ0ZXIgc2Vjb25kcyBhcHBsaWVkXG4mIzM0Oyk7CiYjNDM7CQlyZXR1cm4gMDsKJiM0MzsJfQomIzQzOwomIzQzOwlyZXR1cm4gcmM7CiYjNDM7fQomIzQzOwomIzQzOy8qKgomIzQzOyAqIHpsMzA3M3hfZHBsbF9wdHBfYWRqZmluZSAtIGFkanVzdCBQVFAgY2xvY2sgZnJlcXVlbmN5CiYjNDM7ICogQGluZm86IFBUUCBjbG9jayBpbmZvCiYjNDM7ICogQHNjYWxlZF9wcG06IGZyZXF1ZW5jeSBhZGp1c3RtZW50IGluIHNjYWxlZCBwcG0gKHBwbSAqIDJeMTYpCiYjNDM7ICoKJiM0MzsgKiBPbmx5IHN1cHBvcnRlZCBmb3IgTkNPLiBXcml0ZXMgdGhlIGRlbHRhIGZyZXF1ZW5jeSBvZmZzZXQgcmVnaXN0ZXIuCiYjNDM7ICoKJiM0MzsgKiBSZXR1cm46CiYjNDM7ICogKiAlMAkJCS0gc3VjY2VzcyBvciBAc2NhbGVkX3BwbSBpcyB6ZXJvIChuby1vcCkKJiM0MzsgKiAqICUtRU9QTk9UU1VQUAktIE5DTyBwaW4gaXMgbm90IGNvbm5lY3RlZCBhbmQgQHNjYWxlZF9wcG0gaXMgbm9uLXplcm8KJiM0MzsgKiAqIG5lZ2F0aXZlCQktIG90aGVyIGVycm9yCiYjNDM7ICovCiYjNDM7c3RhdGljIGludAomIzQzO3psMzA3M3hfZHBsbF9wdHBfYWRqZmluZShzdHJ1Y3QgcHRwX2Nsb2NrX2luZm8gKmluZm8sIGxvbmcgc2NhbGVkX3BwbSkKJiM0Mzt7CiYjNDM7CXN0cnVjdCB6bDMwNzN4X2RwbGwgKnpsZHBsbCA9IGNvbnRhaW5lcl9vZihpbmZvLCBzdHJ1Y3QgemwzMDczeF9kcGxsLAomIzQzOwkJCQkJCSAgIHB0cF9pbmZvKTsKJiM0MzsJY29uc3Qgc3RydWN0IHpsMzA3M3hfY2hhbiAqY2hhbjsKJiM0MzsJczY0IG9mZnNldDsKJiM0MzsKJiM0MzsJLyogQ29udmVydCBzY2FsZWRfcHBtIHRvIGRmX29mZnNldCBpbiAyXi00OCBzdGVwczoKJiM0MzsJICogICBkZl9vZmZzZXQgPSAtKHNjYWxlZF9wcG0gKiAyXjMyKSAvIDEwXjYKJiM0MzsJICoKJiM0MzsJICogU2ltcGxpZnkgdG8gYXZvaWQgb3ZlcmZsb3c6CiYjNDM7CSAqICAgZGZfb2Zmc2V0ID0gLShzY2FsZWRfcHBtICogMl4yNikgLyA1XjYKJiM0MzsJICogICBkZl9vZmZzZXQgPSAtKHNjYWxlZF9wcG0gKiA2NzEwODg2NCkgLyAxNTYyNQomIzQzOwkgKi8KJiM0MzsJb2Zmc2V0ID0gLWRpdl9zNjQoKHM2NClzY2FsZWRfcHBtICogNjcxMDg4NjRMTCwgMTU2MjUpOwomIzQzOwomIzQzOwlndWFyZChtdXRleCkoJmFtcDt6bGRwbGwtJmd0O2xvY2spOwomIzQzOwomIzQzOwljaGFuID0gemwzMDczeF9jaGFuX3N0YXRlX2dldCh6bGRwbGwtJmd0O2RldiwgemxkcGxsLSZndDtpZCk7CiYjNDM7CWlmICghemwzMDczeF9jaGFuX21vZGVfaXNfbmNvKGNoYW4pKQomIzQzOwkJcmV0dXJuIHNjYWxlZF9wcG0gPyAtRU9QTk9UU1VQUCA6IDA7CiYjNDM7CWlmIChvZmZzZXQgPT0gY2hhbi0mZ3Q7ZGZfb2Zmc2V0KQomIzQzOwkJcmV0dXJuIDA7CiYjNDM7CiYjNDM7CXJldHVybiB6bDMwNzN4X2NoYW5fZGZfb2Zmc2V0X3NldCh6bGRwbGwtJmd0O2RldiwgemxkcGxsLSZndDtpZCwgb2Zmc2V0KTsKJiM0Mzt9CiYjNDM7CiYjNDM7LyoqCiYjNDM7ICogemwzMDczeF9kcGxsX3B0cF9hZGpwaGFzZSAtIGFkanVzdCBQVFAgY2xvY2sgcGhhc2UKJiM0MzsgKiBAaW5mbzogUFRQIGNsb2NrIGluZm8KJiM0MzsgKiBAZGVsdGE6IHBoYXNlIGFkanVzdG1lbnQgaW4gbmFub3NlY29uZHMKJiM0MzsgKgomIzQzOyAqIE9ubHkgc3VwcG9ydGVkIGluIEFVVE8gYW5kIFJFRkxPQ0sgbW9kZXMuIFVzZXMgVElFIHdyaXRlIGZvcgomIzQzOyAqIG5hbm9zZWNvbmQgcmVzb2x1dGlvbiBwaGFzZSBhZGp1c3RtZW50LgomIzQzOyAqCiYjNDM7ICogUmV0dXJuOgomIzQzOyAqICogJTAJCQktIHN1Y2Nlc3Mgb3IgQGRlbHRhIGlzIHplcm8gKG5vLW9wKQomIzQzOyAqICogJS1FT1BOT1RTVVBQCS0gbW9kZSBkb2VzIG5vdCBzdXBwb3J0IFRJRSBhbmQgQGRlbHRhIGlzIG5vbi16ZXJvCiYjNDM7ICogKiBuZWdhdGl2ZQkJLSBvdGhlciBlcnJvcgomIzQzOyAqLwomIzQzO3N0YXRpYyBpbnQgemwzMDczeF9kcGxsX3B0cF9hZGpwaGFzZShzdHJ1Y3QgcHRwX2Nsb2NrX2luZm8gKmluZm8sIHMzMiBkZWx0YSkKJiM0Mzt7CiYjNDM7CXN0cnVjdCB6bDMwNzN4X2RwbGwgKnpsZHBsbCA9IGNvbnRhaW5lcl9vZihpbmZvLCBzdHJ1Y3QgemwzMDczeF9kcGxsLAomIzQzOwkJCQkJCSAgIHB0cF9pbmZvKTsKJiM0MzsJc3RydWN0IHpsMzA3M3hfZGV2ICp6bGRldiA9IHpsZHBsbC0mZ3Q7ZGV2OwomIzQzOwljb25zdCBzdHJ1Y3QgemwzMDczeF9jaGFuICpjaGFuOwomIzQzOwomIzQzOwlpZiAoIWRlbHRhKQomIzQzOwkJcmV0dXJuIDA7CiYjNDM7CiYjNDM7CWd1YXJkKG11dGV4KSgmYW1wO3psZHBsbC0mZ3Q7bG9jayk7CiYjNDM7CiYjNDM7CWNoYW4gPSB6bDMwNzN4X2NoYW5fc3RhdGVfZ2V0KHpsZGV2LCB6bGRwbGwtJmd0O2lkKTsKJiM0MzsKJiM0MzsJaWYgKCF6bDMwNzN4X2NoYW5fbW9kZV9zdXBwb3J0c190aWUoY2hhbikpCiYjNDM7CQlyZXR1cm4gLUVPUE5PVFNVUFA7CiYjNDM7CiYjNDM7CXJldHVybiB6bDMwNzN4X2NoYW5fdGllX3dyaXRlKHpsZGV2LCB6bGRwbGwtJmd0O2lkLCBkZWx0YSk7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBzMzIKJiM0Mzt6bDMwNzN4X2RwbGxfcHRwX2dldG1heHBoYXNlKHN0cnVjdCBwdHBfY2xvY2tfaW5mbyAqaW5mbyBfX2Fsd2F5c191bnVzZWQpCiYjNDM7ewomIzQzOwkvKiBIVyBsaW1pdHMgVElFIHdyaXRlIHRvICYjNDM7LTEgc2Vjb25kLiBSZXR1cm4gdGhlIGNvbnN0YW50IEhXCiYjNDM7CSAqIGxpbWl0IGFuZCBsZXQgYWRqcGhhc2UgaGFuZGxlIG1vZGUtc3BlY2lmaWMgY2hlY2tzLgomIzQzOwkgKi8KJiM0MzsJcmV0dXJuIE5TRUNfUEVSX1NFQyAtIDE7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBjb25zdCBzdHJ1Y3QgcHRwX2Nsb2NrX2luZm8gemwzMDczeF9kcGxsX3B0cF9jbG9ja19pbmZvID0gewomIzQzOwkub3duZXIJCT0gVEhJU19NT0RVTEUsCiYjNDM7CS5tYXhfYWRqCT0gWkwzMDczWF9EUExMX1BUUF9NQVhfQURKLAomIzQzOwkuZ2V0dGltZXg2NAk9IHpsMzA3M3hfZHBsbF9wdHBfZ2V0dGltZXg2NCwKJiM0MzsJLnNldHRpbWU2NAk9IHpsMzA3M3hfZHBsbF9wdHBfc2V0dGltZTY0LAomIzQzOwkuYWRqdGltZQk9IHpsMzA3M3hfZHBsbF9wdHBfYWRqdGltZSwKJiM0MzsJLmFkamZpbmUJPSB6bDMwNzN4X2RwbGxfcHRwX2FkamZpbmUsCiYjNDM7CS5hZGpwaGFzZQk9IHpsMzA3M3hfZHBsbF9wdHBfYWRqcGhhc2UsCiYjNDM7CS5nZXRtYXhwaGFzZQk9IHpsMzA3M3hfZHBsbF9wdHBfZ2V0bWF4cGhhc2UsCiYjNDM7fTsKJiM0MzsKJiM0MzsvKioKJiM0MzsgKiB6bDMwNzN4X2RwbGxfcHRwX3JlZ2lzdGVyIC0gcmVnaXN0ZXIgUFRQIGNsb2NrIGZvciBhIERQTEwgY2hhbm5lbAomIzQzOyAqIEB6bGRwbGw6IERQTEwgY2hhbm5lbCB0byByZWdpc3RlciBQVFAgY2xvY2sgZm9yCiYjNDM7ICoKJiM0MzsgKiBSZXR1cm46IDAgb24gc3VjY2VzcywgJmx0OzAgb24gZXJyb3IKJiM0MzsgKi8KJiM0MztzdGF0aWMgaW50IHpsMzA3M3hfZHBsbF9wdHBfcmVnaXN0ZXIoc3RydWN0IHpsMzA3M3hfZHBsbCAqemxkcGxsKQomIzQzO3sKJiM0MzsJc3RydWN0IHpsMzA3M3hfZGV2ICp6bGRldiA9IHpsZHBsbC0mZ3Q7ZGV2OwomIzQzOwlzdHJ1Y3QgcHRwX2Nsb2NrICpwdHBfY2xvY2s7CiYjNDM7CiYjNDM7CXpsZHBsbC0mZ3Q7cHRwX2luZm8gPSB6bDMwNzN4X2RwbGxfcHRwX2Nsb2NrX2luZm87CiYjNDM7CXNucHJpbnRmKHpsZHBsbC0mZ3Q7cHRwX2luZm8ubmFtZSwgc2l6ZW9mKHpsZHBsbC0mZ3Q7cHRwX2luZm8ubmFtZSksCiYjNDM7CQkgJiMzNDslcy1kcGxsJXUmIzM0OywgZGV2X25hbWUoemxkZXYtJmd0O2RldiksIHpsZHBsbC0mZ3Q7aWQpOwomIzQzOwomIzQzOwlwdHBfY2xvY2sgPSBwdHBfY2xvY2tfcmVnaXN0ZXIoJmFtcDt6bGRwbGwtJmd0O3B0cF9pbmZvLCB6bGRldi0mZ3Q7ZGV2KTsKJiM0MzsJaWYgKElTX0VSUihwdHBfY2xvY2spKSB7CiYjNDM7CQlkZXZfZXJyKHpsZGV2LSZndDtkZXYsICYjMzQ7RmFpbGVkIHRvIHJlZ2lzdGVyIFBUUCBjbG9jayBmb3IgRFBMTCV1XG4mIzM0OywKJiM0MzsJCQl6bGRwbGwtJmd0O2lkKTsKJiM0MzsJCXJldHVybiBQVFJfRVJSKHB0cF9jbG9jayk7CiYjNDM7CX0KJiM0MzsKJiM0MzsJemxkcGxsLSZndDtwdHBfY2xvY2sgPSBwdHBfY2xvY2s7CiYjNDM7CiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MzsKJiM0MzsvKioKJiM0MzsgKiB6bDMwNzN4X2RwbGxfcHRwX3VucmVnaXN0ZXIgLSB1bnJlZ2lzdGVyIFBUUCBjbG9jayBmb3IgYSBEUExMIGNoYW5uZWwKJiM0MzsgKiBAemxkcGxsOiBEUExMIGNoYW5uZWwgdG8gdW5yZWdpc3RlciBQVFAgY2xvY2sgZm9yCiYjNDM7ICovCiYjNDM7c3RhdGljIHZvaWQgemwzMDczeF9kcGxsX3B0cF91bnJlZ2lzdGVyKHN0cnVjdCB6bDMwNzN4X2RwbGwgKnpsZHBsbCkKJiM0Mzt7CiYjNDM7CWlmICghSVNfRVJSX09SX05VTEwoemxkcGxsLSZndDtwdHBfY2xvY2spKSB7CiYjNDM7CQlwdHBfY2xvY2tfdW5yZWdpc3Rlcih6bGRwbGwtJmd0O3B0cF9jbG9jayk7CiYjNDM7CQl6bGRwbGwtJmd0O3B0cF9jbG9jayA9IE5VTEw7CiYjNDM7CX0KIH0KIAogLyoqCkBAIC0yMzk4LDYgJiM0MzsyNzM5LDQ3IEBAIHpsMzA3M3hfZHBsbF9yZWZfc3luY19wYWlyc19yZWdpc3RlcihzdHJ1Y3QgemwzMDczeF9kcGxsICp6bGRwbGwpCiAJcmV0dXJuIDA7CiB9CiAKJiM0MzsvKioKJiM0MzsgKiB6bDMwNzN4X2RwbGxfYWxsb2MgLSBhbGxvY2F0ZSBEUExMIGRldmljZQomIzQzOyAqIEB6bGRldjogcG9pbnRlciB0byB6bDMwNzN4IGRldmljZQomIzQzOyAqIEBjaDogRFBMTCBjaGFubmVsIG51bWJlcgomIzQzOyAqCiYjNDM7ICogQWxsb2NhdGVzIERQTEwgZGV2aWNlIHN0cnVjdHVyZSBmb3IgZ2l2ZW4gRFBMTCBjaGFubmVsLgomIzQzOyAqCiYjNDM7ICogUmV0dXJuOiBwb2ludGVyIHRvIERQTEwgZGV2aWNlIG9uIHN1Y2Nlc3MsIGVycm9yIHBvaW50ZXIgb24gZXJyb3IKJiM0MzsgKi8KJiM0MztzdHJ1Y3QgemwzMDczeF9kcGxsICoKJiM0Mzt6bDMwNzN4X2RwbGxfYWxsb2Moc3RydWN0IHpsMzA3M3hfZGV2ICp6bGRldiwgdTggY2gpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgemwzMDczeF9kcGxsICp6bGRwbGw7CiYjNDM7CiYjNDM7CXpsZHBsbCA9IGt6YWxsb2Nfb2JqKCp6bGRwbGwpOwomIzQzOwlpZiAoIXpsZHBsbCkKJiM0MzsJCXJldHVybiBFUlJfUFRSKC1FTk9NRU0pOwomIzQzOwomIzQzOwl6bGRwbGwtJmd0O2RldiA9IHpsZGV2OwomIzQzOwl6bGRwbGwtJmd0O2lkID0gY2g7CiYjNDM7CW11dGV4X2luaXQoJmFtcDt6bGRwbGwtJmd0O2xvY2spOwomIzQzOwlJTklUX0xJU1RfSEVBRCgmYW1wO3psZHBsbC0mZ3Q7cGlucyk7CiYjNDM7CiYjNDM7CXJldHVybiB6bGRwbGw7CiYjNDM7fQomIzQzOwomIzQzOy8qKgomIzQzOyAqIHpsMzA3M3hfZHBsbF9mcmVlIC0gZnJlZSBEUExMIGRldmljZQomIzQzOyAqIEB6bGRwbGw6IHBvaW50ZXIgdG8gemwzMDczeF9kcGxsIHN0cnVjdHVyZQomIzQzOyAqCiYjNDM7ICogRGVhbGxvY2F0ZXMgZ2l2ZW4gRFBMTCBkZXZpY2UgcHJldmlvdXNseSBhbGxvY2F0ZWQgYnkgQHpsMzA3M3hfZHBsbF9hbGxvYy4KJiM0MzsgKi8KJiM0Mzt2b2lkCiYjNDM7emwzMDczeF9kcGxsX2ZyZWUoc3RydWN0IHpsMzA3M3hfZHBsbCAqemxkcGxsKQomIzQzO3sKJiM0MzsJV0FSTih6bGRwbGwtJmd0O2RwbGxfZGV2LCAmIzM0O0RQTEwgZGV2aWNlIGlzIHN0aWxsIHJlZ2lzdGVyZWRcbiYjMzQ7KTsKJiM0MzsKJiM0MzsJbXV0ZXhfZGVzdHJveSgmYW1wO3psZHBsbC0mZ3Q7bG9jayk7CiYjNDM7CWtmcmVlKHpsZHBsbCk7CiYjNDM7fQomIzQzOwogLyoqCiAgKiB6bDMwNzN4X2RwbGxfcmVnaXN0ZXIgLSByZWdpc3RlciBEUExMIGRldmljZSBhbmQgYWxsIGl0cyBwaW5zCiAgKiBAemxkcGxsOiBwb2ludGVyIHRvIHpsMzA3M3hfZHBsbCBzdHJ1Y3R1cmUKQEAgLTI0MjgsNiAmIzQzOzI4MTAsMTMgQEAgemwzMDczeF9kcGxsX3JlZ2lzdGVyKHN0cnVjdCB6bDMwNzN4X2RwbGwgKnpsZHBsbCkKIAkJcmV0dXJuIHJjOwogCX0KIAomIzQzOwlyYyA9IHpsMzA3M3hfZHBsbF9wdHBfcmVnaXN0ZXIoemxkcGxsKTsKJiM0MzsJaWYgKHJjKSB7CiYjNDM7CQl6bDMwNzN4X2RwbGxfcGluc191bnJlZ2lzdGVyKHpsZHBsbCk7CiYjNDM7CQl6bDMwNzN4X2RwbGxfZGV2aWNlX3VucmVnaXN0ZXIoemxkcGxsKTsKJiM0MzsJCXJldHVybiByYzsKJiM0MzsJfQomIzQzOwogCXJldHVybiAwOwogfQogCkBAIC0yNDQxLDcgJiM0MzsyODMwLDcgQEAgemwzMDczeF9kcGxsX3JlZ2lzdGVyKHN0cnVjdCB6bDMwNzN4X2RwbGwgKnpsZHBsbCkKIHZvaWQKIHpsMzA3M3hfZHBsbF91bnJlZ2lzdGVyKHN0cnVjdCB6bDMwNzN4X2RwbGwgKnpsZHBsbCkKIHsKLQkvKiBVbnJlZ2lzdGVyIGFsbCBwaW5zIGFuZCBkcGxsICovCiYjNDM7CXpsMzA3M3hfZHBsbF9wdHBfdW5yZWdpc3Rlcih6bGRwbGwpOwogCXpsMzA3M3hfZHBsbF9waW5zX3VucmVnaXN0ZXIoemxkcGxsKTsKIAl6bDMwNzN4X2RwbGxfZGV2aWNlX3VucmVnaXN0ZXIoemxkcGxsKTsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvZHBsbC96bDMwNzN4L2RwbGwuaCBiL2RyaXZlcnMvZHBsbC96bDMwNzN4L2RwbGwuaAppbmRleCBmYWViYzQwMmJhMWI3Li45OTMyMjFkYzYzMjQ5IDEwMDY0NAotLS0gYS9kcml2ZXJzL2RwbGwvemwzMDczeC9kcGxsLmgKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9kcGxsL3psMzA3M3gvZHBsbC5oCkBAIC01LDYgJiM0Mzs1LDcgQEAKIAogI2luY2x1ZGUgJmx0O2xpbnV4L2RwbGwuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9saXN0LmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L3B0cF9jbG9ja19rZXJuZWwuaCZndDsKIAogI2luY2x1ZGUgJiMzNDtjb3JlLmgmIzM0OwogCkBAIC0yMiw2ICYjNDM7MjMsOCBAQAogICogQHR5cGU6IERQTEwgdHlwZSAoUFBTIG9yIEVFQykKICAqIEBsb2NrX3N0YXR1czogbGFzdCBzYXZlZCBEUExMIGxvY2sgc3RhdHVzCiAgKiBAcGluczogbGlzdCBvZiBwaW5zCiYjNDM7ICogQHB0cF9pbmZvOiBQVFAgY2xvY2sgaW5mbwomIzQzOyAqIEBwdHBfY2xvY2s6IHJlZ2lzdGVyZWQgUFRQIGNsb2NrIChvciBOVUxMKQogICovCiBzdHJ1Y3QgemwzMDczeF9kcGxsIHsKIAlzdHJ1Y3QgbGlzdF9oZWFkCQlsaXN0OwpAQCAtMzYsNiAmIzQzOzM5LDggQEAgc3RydWN0IHpsMzA3M3hfZHBsbCB7CiAJZW51bSBkcGxsX3R5cGUJCQl0eXBlOwogCWVudW0gZHBsbF9sb2NrX3N0YXR1cwkJbG9ja19zdGF0dXM7CiAJc3RydWN0IGxpc3RfaGVhZAkJcGluczsKJiM0MzsJc3RydWN0IHB0cF9jbG9ja19pbmZvCQlwdHBfaW5mbzsKJiM0MzsJc3RydWN0IHB0cF9jbG9jawkJKnB0cF9jbG9jazsKIH07CiAKIHN0cnVjdCB6bDMwNzN4X2RwbGwgKnpsMzA3M3hfZHBsbF9hbGxvYyhzdHJ1Y3QgemwzMDczeF9kZXYgKnpsZGV2LCB1OCBjaCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2RwbGwvemwzMDczeC9yZWdzLmggYi9kcml2ZXJzL2RwbGwvemwzMDczeC9yZWdzLmgKaW5kZXggYjcwZWFkN2Q0NDk1Yi4uZjNhNWUxMjE1YWEzNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9kcGxsL3psMzA3M3gvcmVncy5oCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvZHBsbC96bDMwNzN4L3JlZ3MuaApAQCAtMTc5LDYgJiM0MzsxNzksMjAgQEAKICNkZWZpbmUgWkxfRFBMTF9ERl9SRUFEX0NNRAkJCUdFTk1BU0soMiwgMCkKICNkZWZpbmUgWkxfRFBMTF9ERl9SRUFEX0NNRF9BQ0NfSQkJNAogCiYjNDM7I2RlZmluZSBaTF9SRUdfRFBMTF9USUVfQ1RSTAkJCVpMX1JFRyg1LCAweDMwLCAxKQomIzQzOyNkZWZpbmUgWkxfRFBMTF9USUVfQ1RSTF9PUAkJCUdFTk1BU0soMiwgMCkKJiM0MzsjZGVmaW5lIFpMX0RQTExfVElFX0NUUkxfT1BfV1IJCQk0CiYjNDM7CiYjNDM7I2RlZmluZSBaTF9SRUdfRFBMTF9USUVfQ1RSTF9NQVNLCQlaTF9SRUcoNSwgMHgzMSwgMSkKJiM0MzsKJiM0MzsjZGVmaW5lIFpMX1JFR19EUExMX1RPRF9DVFJMKF9pZHgpCQkJCQlcCiYjNDM7CVpMX1JFR19JRFgoX2lkeCwgNSwgMHgzOCwgMSwgWkwzMDczWF9NQVhfQ0hBTk5FTFMsIDEpCiYjNDM7I2RlZmluZSBaTF9EUExMX1RPRF9DVFJMX1NFTQkJCUJJVCg0KQomIzQzOyNkZWZpbmUgWkxfRFBMTF9UT0RfQ1RSTF9DTUQJCQlHRU5NQVNLKDMsIDApCiYjNDM7I2RlZmluZSBaTF9EUExMX1RPRF9DVFJMX0NNRF9XUl9ORVhUXzFIWgkxCiYjNDM7I2RlZmluZSBaTF9EUExMX1RPRF9DVFJMX0NNRF9SRF9DVVJSRU5UCQk4CiYjNDM7I2RlZmluZSBaTF9EUExMX1RPRF9DVFJMX0NNRF9SRF9ORVhUXzFIWgk5CiYjNDM7CiAjZGVmaW5lIFpMX1JFR19EUExMX01FQVNfQ1RSTAkJCVpMX1JFRyg1LCAweDUwLCAxKQogI2RlZmluZSBaTF9EUExMX01FQVNfQ1RSTF9FTgkJCUJJVCgwKQogI2RlZmluZSBaTF9EUExMX01FQVNfQ1RSTF9BVkdfRkFDVE9SCQlHRU5NQVNLKDcsIDQpCkBAIC0xOTMsNiAmIzQzOzIwNyw5IEBACiAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKiBSZWdpc3RlciBQYWdlcyA2LTcsIERQTEwgRGF0YQomIzQzOyAqCiYjNDM7ICogUGVyLWNoYW5uZWwgcmVnaXN0ZXJzIHdpdGggc3RyaWRlIDB4MjAuIENoYW5uZWxzIDAtMyByZXNpZGUgb24gcGFnZSA2LAomIzQzOyAqIGNoYW5uZWwgNCBvbiBwYWdlIDcuCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAogI2RlZmluZSBaTF9SRUdfRFBMTF9ERl9PRkZTRVRfMDMoX2lkeCkJCQkJCVwKQEAgLTIwMiw2ICYjNDM7MjE5LDI0IEBACiAJKChfaWR4KSAmbHQ7IDQgPyBaTF9SRUdfRFBMTF9ERl9PRkZTRVRfMDMoX2lkeCkgOiBaTF9SRUdfRFBMTF9ERl9PRkZTRVRfNCkKICNkZWZpbmUgWkxfRFBMTF9ERl9PRkZTRVRfVU5LTk9XTglTNjRfTUlOCiAKJiM0MzsjZGVmaW5lIFpMX1JFR19EUExMX1RJRV9EQVRBXzAzKF9pZHgpCQkJCQlcCiYjNDM7CVpMX1JFR19JRFgoX2lkeCwgNiwgMHgwQywgNiwgNCwgMHgyMCkKJiM0MzsjZGVmaW5lIFpMX1JFR19EUExMX1RJRV9EQVRBXzQJCQlaTF9SRUcoNywgMHgwQywgNikKJiM0MzsjZGVmaW5lIFpMX1JFR19EUExMX1RJRV9EQVRBKF9pZHgpCQkJCQlcCiYjNDM7CSgoX2lkeCkgJmx0OyA0ID8gWkxfUkVHX0RQTExfVElFX0RBVEFfMDMoX2lkeCkgOiBaTF9SRUdfRFBMTF9USUVfREFUQV80KQomIzQzOwomIzQzOyNkZWZpbmUgWkxfUkVHX0RQTExfVE9EX1NFQ18wMyhfaWR4KQkJCQkJXAomIzQzOwlaTF9SRUdfSURYKF9pZHgsIDYsIDB4MTIsIDYsIDQsIDB4MjApCiYjNDM7I2RlZmluZSBaTF9SRUdfRFBMTF9UT0RfU0VDXzQJCQlaTF9SRUcoNywgMHgxMiwgNikKJiM0MzsjZGVmaW5lIFpMX1JFR19EUExMX1RPRF9TRUMoX2lkeCkJCQkJCVwKJiM0MzsJKChfaWR4KSAmbHQ7IDQgPyBaTF9SRUdfRFBMTF9UT0RfU0VDXzAzKF9pZHgpIDogWkxfUkVHX0RQTExfVE9EX1NFQ180KQomIzQzOwomIzQzOyNkZWZpbmUgWkxfUkVHX0RQTExfVE9EX05TXzAzKF9pZHgpCQkJCQlcCiYjNDM7CVpMX1JFR19JRFgoX2lkeCwgNiwgMHgxOCwgNCwgNCwgMHgyMCkKJiM0MzsjZGVmaW5lIFpMX1JFR19EUExMX1RPRF9OU180CQkJWkxfUkVHKDcsIDB4MTgsIDQpCiYjNDM7I2RlZmluZSBaTF9SRUdfRFBMTF9UT0RfTlMoX2lkeCkJCQkJCVwKJiM0MzsJKChfaWR4KSAmbHQ7IDQgPyBaTF9SRUdfRFBMTF9UT0RfTlNfMDMoX2lkeCkgOiBaTF9SRUdfRFBMTF9UT0RfTlNfNCkKJiM0MzsKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICogUmVnaXN0ZXIgUGFnZSA5LCBTeW50aCBhbmQgT3V0cHV0CiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCkBAIC0yMjEsNiAmIzQzOzI1NiwyMyBAQAogI2RlZmluZSBaTF9PVVRQVVRfQ1RSTF9FTgkJCUJJVCgwKQogI2RlZmluZSBaTF9PVVRQVVRfQ1RSTF9TWU5USF9TRUwJCUdFTk1BU0soNiwgNCkKIAomIzQzOyNkZWZpbmUgWkxfUkVHX09VVFBVVF9TVEVQX1RJTUVfTUFTSwkJWkxfUkVHKDksIDB4MzYsIDIpCiYjNDM7CiYjNDM7I2RlZmluZSBaTF9SRUdfT1VUUFVUX1BIQVNFX1NURVBfQ1RSTAkJWkxfUkVHKDksIDB4MzgsIDEpCiYjNDM7I2RlZmluZSBaTF9PVVRQVVRfUEhBU0VfU1RFUF9DVFJMX0RQTEwJCUdFTk1BU0soNiwgNCkKJiM0MzsjZGVmaW5lIFpMX09VVFBVVF9QSEFTRV9TVEVQX0NUUkxfVE9EX1NURVAJQklUKDMpCiYjNDM7I2RlZmluZSBaTF9PVVRQVVRfUEhBU0VfU1RFUF9DVFJMX09QCQlHRU5NQVNLKDEsIDApCiYjNDM7I2RlZmluZSBaTF9PVVRQVVRfUEhBU0VfU1RFUF9DVFJMX09QX05PTkUJMAomIzQzOyNkZWZpbmUgWkxfT1VUUFVUX1BIQVNFX1NURVBfQ1RSTF9PUF9SRVNFVAkxCiYjNDM7I2RlZmluZSBaTF9PVVRQVVRfUEhBU0VfU1RFUF9DVFJMX09QX1JFQUQJMgomIzQzOyNkZWZpbmUgWkxfT1VUUFVUX1BIQVNFX1NURVBfQ1RSTF9PUF9XUklURQkzCiYjNDM7CiYjNDM7I2RlZmluZSBaTF9SRUdfT1VUUFVUX1BIQVNFX1NURVBfTlVNQkVSCQlaTF9SRUcoOSwgMHgzOSwgMSkKJiM0MzsKJiM0MzsjZGVmaW5lIFpMX1JFR19PVVRQVVRfUEhBU0VfU1RFUF9NQVNLCQlaTF9SRUcoOSwgMHgzYSwgMikKJiM0MzsKJiM0MzsjZGVmaW5lIFpMX1JFR19PVVRQVVRfUEhBU0VfU1RFUF9EQVRBCQlaTF9SRUcoOSwgMHgzYywgNCkKJiM0MzsKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKiBSZWdpc3RlciBQYWdlIDEwLCBSZWYgTWFpbGJveAogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzExIDE0OjAyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE4MjMxCgkJCQkJCQlvdXRwdXQ6IDI2CgkJCQkJCQl0aG91Z2h0czogNzg4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKlJlYWNoaW5nIHRoZSBQVFAgQ2xvY2sgaW4gUUVNVSoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBmb3IgdGhlIGB6bDMwNzN4YCBEUExMIGRyaXZlciwgYW5kIGl0JiMzOTtzIGFkZGluZyBQVFAgY2xvY2sgc3VwcG9ydC4gSXQgc2VlbXMgcHJldHR5IHN0cmFpZ2h0Zm9yd2FyZDogaXQgbW9kaWZpZXMgYEtjb25maWdgIHRvIGFkZCBhIGRlcGVuZGVuY3kgb24gYFBUUF8xNTg4X0NMT0NLYCwgYW5kIHRoZW4gYWRkcyBhbGwgdGhlc2UgUFRQLXJlbGF0ZWQgZnVuY3Rpb25zOiByZWFkL3dyaXRlL2FkanVzdCBUT0QsIHNldCBmcmVxdWVuY3kgb2Zmc2V0cywgY29udHJvbCB0aWUgYW5kIHBoYXNlIHN0ZXBzLCBhbmQgZmluYWxseSBpdCByZWdpc3RlcnMgdGhlIFBUUCBjbG9jayBpdHNlbGYuIFRoZSBzdGFuZGFyZCBvcGVyYXRpb25zIGxpa2UgZ2V0dGluZyBhbmQgc2V0dGluZyB0aGUgdGltZSwgYW5kIGFkanVzdGluZyB0aW1lL3BoYXNlIGFyZSBhbHNvIHRoZXJlLgoKTXkgaW1tZWRpYXRlIHF1ZXN0aW9uLCBhcyBhbHdheXMsIGlzOiBjYW4gSSBhY3R1YWxseSAqcmVhY2gqIHRoaXMgaW4gUUVNVT8gVGhpcyBkcml2ZXIgaXMgZm9yIGEgTWljcm9jaGlwIEF6dXJpdGUgRFBMTC9QVFAvU3luY0UgZGV2aWNlLCBhbmQgSSByZWNhbGwgaXQgaGFzIGJvdGggSTJDIGFuZCBTUEkgYnVzIGltcGxlbWVudGF0aW9ucy4gU28sIHRoYXQmIzM5O3MgZ29vZDsgSTJDIGFuZCBTUEkgZGV2aWNlcyBhcmUgKnVzdWFsbHkqIHJlYWNoYWJsZSBpbiBhIHZpcnR1YWxpemVkIGVudmlyb25tZW50LiBJIGNhbiB0eXBpY2FsbHkgaW5zdGFudGlhdGUgdGhlbSB0aHJvdWdoIHN5emthbGxlciYjMzk7cyBwc2V1ZG8tc3lzY2FsbHMgb3IgdmlhIHN5c2ZzL2RldmljZSB0cmVlLCBvciBieSBkaXJlY3RseSBmdXp6aW5nIHRoZSBJMkMgb3IgU1BJIGludGVyZmFjZXMuCgpXYWl0LCBzeXprYWxsZXIgZG9lcyBzdXBwb3J0IEkyQyBhbmQgU1BJIGZ1enppbmcuIEkgbmVlZCB0byBzZWUgaWYgdGhlcmUgYXJlIGFueSBzcGVjaWZpYyBzeXprYWxsZXIgZGVzY3JpcHRpb25zIGZvciBgemwzMDczeGAsIGJ1dCBpZiBub3QsIEkgY2FuIGp1c3QgcmVseSBvbiB0aGUgZ2VuZXJpYyBJMkMvU1BJIGZ1enppbmcgbWVjaGFuaXNtcy4gSSB0aGluayB0aGVyZSBpcyBgaTJjX25ld19jbGllbnRfZGV2aWNlYCBpbiBrZXJuZWwuCgpIYW5nIG9u4oCmIHRoZSBwcm9tcHQgc3BlY2lmaWVzIGNvZGUgdW5yZWFjaGFibGUgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzLiBJdCBtZW50aW9ucyBQQ0llIGhhcmR3YXJlLCB3aGljaCBpcyB1c3VhbGx5IGEgcGFpbi4gQnV0IHRoaXMgaXMgYW4gSTJDL1NQSSBkcml2ZXIhIFRoYXQmIzM5O3MgZ29vZCwgYmVjYXVzZSBJMkMgYW5kIFNQSSBhcmUgZGVmaW5pdGVseSBlbXVsYXRhYmxlIG9yIGZ1enplYWJsZSBpbiBRRU1VLiBTeXprYWxsZXIgaGFzIHN0dWZmIGxpa2UgYHN5el9pMmNfZGV2aWNlYCBvciBjYW4gZnV6eiB0aHJvdWdoIGAvZGV2L2kyYy0qYCBhbmQgYC9kZXYvc3BpZGV2KmAsIHNvIHRoYXQmIzM5O3MgYWxsIGdvb2QuCgpUaGUga2V5IHF1ZXN0aW9uIGlzLCBob3cgaXMgdGhpcyBkcml2ZXIgcHJvYmVkPyBJIG5lZWQgdG8gY2hlY2sgaG93IHRoZSBkcml2ZXIgaXMgcmVnaXN0ZXJlZCB3aXRoIHRoZSBJMkMgb3IgU1BJIHN1YnN5c3RlbS4gVGhhdCYjMzk7cyB0aGUgY3JpdGljYWwgc3RlcCB0byBtYWtlIHN1cmUgSSBjYW4gZXZlbiBnZXQgdG8gdGhlIFBUUCBmdW5jdGlvbnMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTEgMTQ6MDI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7emwzMDczeF9pMmNfcHJvYmUmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9kcGxsL3psMzA3M3gvaTJjLmMtMTAtXG5kcml2ZXJzL2RwbGwvemwzMDczeC9pMmMuYzoxMTpzdGF0aWMgaW50IHpsMzA3M3hfaTJjX3Byb2JlKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQpXG5kcml2ZXJzL2RwbGwvemwzMDczeC9pMmMuYy0xMi17XG4tLVxuZHJpdmVycy9kcGxsL3psMzA3M3gvaTJjLmM9NDg9c3RhdGljIHN0cnVjdCBpMmNfZHJpdmVyIHpsMzA3M3hfaTJjX2RyaXZlciA9IHtcbi0tXG5kcml2ZXJzL2RwbGwvemwzMDczeC9pMmMuYy01Mi1cdH0sXG5kcml2ZXJzL2RwbGwvemwzMDczeC9pMmMuYzo1MzpcdC5wcm9iZSA9IHpsMzA3M3hfaTJjX3Byb2JlLFxuZHJpdmVycy9kcGxsL3psMzA3M3gvaTJjLmMtNTQtXHQuaWRfdGFibGUgPSB6bDMwNzN4X2kyY19pZCxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMSAxNDowMjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxOTc4MwoJCQkJCQkJb3V0cHV0OiAyNgoJCQkJCQkJdGhvdWdodHM6IDE4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkludmVzdGlnYXRpbmcgUG90ZW50aWFsIERhdGEgU2hlZXQgTWlzbWF0Y2hlcyoqCgpSaWdodCwgbGV0JiMzOTtzIGdldCBkb3duIHRvIGJyYXNzIHRhY2tzLiBGaXJzdCwgbXkgaW1tZWRpYXRlIGNvbmNlcm4gaXMgYSBwb3RlbnRpYWwgbWlzbWF0Y2ggYmV0d2VlbiB0aGUgZGF0YSBzaGVldCBhbmQgdGhlIGFjdHVhbCBoYXJkd2FyZS4gSSBuZWVkIHRvIHF1aWNrbHkgZGV0ZXJtaW5lIGlmIHRoZXJl4oCZcyBhIGNvbXByZWhlbnNpdmUgJiMzNDtPRiBNYXRjaCBUYWJsZSYjMzQ7IG9yIGFuICYjMzQ7STJDIElEIFRhYmxlJiMzNDsgdGhhdCBjbGVhcmx5IG91dGxpbmVzIHRoZSBleHBlY3RlZCBkZXZpY2UgaWRlbnRpdGllcyBhbmQgdGhlaXIgY29ycmVzcG9uZGluZyBPcGVuIEZpcm13YXJlIChPRikgYmluZGluZ3Mgb3IgSTJDIGFkZHJlc3Nlcy4gVGhpcyBpcyBzdGFuZGFyZCBwcmVsaW1pbmFyeSBkdWUgZGlsaWdlbmNlLiBBIGNvbXByZWhlbnNpdmUgdGFibGUgc3RyZWFtbGluZXMgYW55IGRlYnVnZ2luZyBlZmZvcnQsIG9mZmVyaW5nIGEgc2luZ2xlIHNvdXJjZSBvZiB0cnV0aCBmb3IgZGV2aWNlIGlkZW50aWZpY2F0aW9uIGFuZCByZXNvdXJjZSBhbGxvY2F0aW9uLiBJZiBpdCYjMzk7cyB0aGVyZSwgZ3JlYXQhIEl04oCZbGwgc2F2ZSBzb21lIHRpbWUuIElmIG5vdCwgaXQgbWVhbnMgSSBuZWVkIHRvIG1hbnVhbGx5IGNvcnJlbGF0ZSBkYXRhIHNoZWV0IGluZm9ybWF0aW9uIHRvIGFjdHVhbCBvbi1ib2FyZCByZXNwb25zZXMg4oCTIGFuZCB0aGF04oCZbGwgYWRkIGNvbXBsZXhpdHkgdG8gdGhlIHByb2Nlc3MuIFRpbWUgdG8gZGlnIGluIGFuZCBmaW5kIHRob3NlIGFuc3dlcnMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTEgMTQ6MDI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7emwzMDczeF9pMmNfaWQmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9kcGxsL3psMzA3M3gvaTJjLmM9MTE9c3RhdGljIGludCB6bDMwNzN4X2kyY19wcm9iZShzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50KVxuLS1cbmRyaXZlcnMvZHBsbC96bDMwNzN4L2kyYy5jLTI3LVxuZHJpdmVycy9kcGxsL3psMzA3M3gvaTJjLmM6Mjg6c3RhdGljIGNvbnN0IHN0cnVjdCBpMmNfZGV2aWNlX2lkIHpsMzA3M3hfaTJjX2lkW10gPSB7XG5kcml2ZXJzL2RwbGwvemwzMDczeC9pMmMuYy0yOS1cdHsgLm5hbWUgPSBcJiMzNDt6bDMwNzMxXCYjMzQ7IH0sXG4tLVxuZHJpdmVycy9kcGxsL3psMzA3M3gvaTJjLmMtMzUtfTtcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2kyYy5jOjM2Ok1PRFVMRV9ERVZJQ0VfVEFCTEUoaTJjLCB6bDMwNzN4X2kyY19pZCk7XG5kcml2ZXJzL2RwbGwvemwzMDczeC9pMmMuYy0zNy1cbi0tXG5kcml2ZXJzL2RwbGwvemwzMDczeC9pMmMuYz00OD1zdGF0aWMgc3RydWN0IGkyY19kcml2ZXIgemwzMDczeF9pMmNfZHJpdmVyID0ge1xuLS1cbmRyaXZlcnMvZHBsbC96bDMwNzN4L2kyYy5jLTUzLVx0LnByb2JlID0gemwzMDczeF9pMmNfcHJvYmUsXG5kcml2ZXJzL2RwbGwvemwzMDczeC9pMmMuYzo1NDpcdC5pZF90YWJsZSA9IHpsMzA3M3hfaTJjX2lkLFxuZHJpdmVycy9kcGxsL3psMzA3M3gvaTJjLmMtNTUtfTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMSAxNDowMjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMDQzNAoJCQkJCQkJb3V0cHV0OiA0MQoJCQkJCQkJdGhvdWdodHM6IDU1MgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIEludGVncmF0aW9uIG9mIFBUUCBDbG9jayBTdXBwb3J0IGluIHRoZSBaTDMwNzNYIERyaXZlcioqCgpPa2F5LCBzbyBJIHNlZSB0aGF0IHRoaXMgcGF0Y2ggYWRkcyBQVFAgY2xvY2sgZnVuY3Rpb25hbGl0eSB0byB0aGUgWkwzMDczWCBkcml2ZXIuIFRoZSBrZXkgaGVyZSBpcyB0aGF0IEkyQyBkZXZpY2VzIGNhbiBiZSBjcmVhdGVkIGluIHVzZXJzcGFjZSB1c2luZyBgL3N5cy9idXMvaTJjL2RldmljZXMvaTJjLSovbmV3X2RldmljZWAsIGFsbG93aW5nIGZvciBwcm9iaW5nIHRoZSBkcml2ZXIgd2l0aGluIFFFTVUsIHdoaWNoIGlzIGdyZWF0IGZvciB0ZXN0aW5nLiBPbmNlIHByb2JlZCwgdGhlIGRyaXZlciByZWdpc3RlcnMgYSBQVFAgY2xvY2ssIHdoaWNoIGlzIGNydWNpYWwuIFRoZXNlIFBUUCBjbG9ja3MgYXJlIHRoZW4gZXhwb3NlZCB2aWEgYC9kZXYvcHRwKmAgYW5kIGNvbnRyb2xsZWQgdmlhIHN0YW5kYXJkIGBpb2N0bGBzIGxpa2UgYFBUUF9DTE9DS19HRVRDQVBTYCwgYFBUUF9FWFRUU19SRVFVRVNUYCwgYFBUUF9QRVJPVVRfUkVRVUVTVGAsIGFuZCB0aGUgbGlrZS4KClRoZSBwYXRjaCBpdHNlbGYgc3BlY2lmaWNhbGx5IGltcGxlbWVudHMgdGhlc2UgdXNlci1hY2Nlc3NpYmxlIGZ1bmN0aW9uczogYGdldHRpbWV4NjRgLCBgc2V0dGltZTY0YCwgYGFkanRpbWVgLCBgYWRqZmluZWAsIGFuZCBgYWRqcGhhc2VgLiBUaGVzZSBtYXAgZGlyZWN0bHkgdG8gUFRQIGBpb2N0bGBzLiBXZSBoYXZlIHRvIG1ha2Ugc3VyZSB0aGUgdXNlciBzcGFjZSBhcHBsaWNhdGlvbnMgYXJlIGNvbmZpZ3VyZWQgdG8gdXNlIHRoZXNlIGNvbW1hbmRzLgoKTG9va2luZyBhdCB0aGUgc3BlY2lmaWMgZnVuY3Rpb25zIGFkZGVkLCBuYW1lbHkgYHpsMzA3M3hfY2hhbl90b2RfcmVhZGAsIGB6bDMwNzN4X2NoYW5fdG9kX3dyaXRlYCwgYHpsMzA3M3hfY2hhbl90b2RfYWRqdXN0YCwgYHpsMzA3M3hfY2hhbl9kZl9vZmZzZXRfc2V0YCwgYHpsMzA3M3hfY2hhbl90aWVfd3JpdGVgLCBgemwzMDczeF9jaGFuX3BoYXNlX3N0ZXBgLCBgemwzMDczeF9kcGxsX3B0cF9nZXR0aW1leDY0YCwgYHpsMzA3M3hfZHBsbF9wdHBfc2V0dGltZTY0YCwgYHpsMzA3M3hfZHBsbF9wdHBfYWRqdGltZWAsIGB6bDMwNzN4X2RwbGxfcHRwX2FkamZpbmVgLCBhbmQgYHpsMzA3M3hfZHBsbF9wdHBfYWRqcGhhc2VgLCB0aGV5IGFyZSBjbGVhcmx5IHBhcnQgb2YgdGhlIFBUUCBjbG9jayBpbnRlcmZhY2UuIFRoaXMgY29uZmlybXMgdGhlIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsLgoKVGhlIGRyaXZlciBpcyBgWkwzMDczWGAsIGFuZCBpdCByZWxpZXMgb24gYm90aCBgTkVUYCBhbmQgYFBUUF8xNTg4X0NMT0NLYC4gVGhlIGNvbmZpZyBvcHRpb25zIEkgbmVlZCB0byB2ZXJpZnkgYXJlOiBgWkwzMDczWGAsIGBaTDMwNzNYX0kyQ2AsIGBaTDMwNzNYX1NQSWAsIGFuZCBgUFRQXzE1ODhfQ0xPQ0tgLiBMZXQgbWUganVzdCBkb3VibGUtY2hlY2sgdGhhdCBgWkwzMDczWGAgY29ycmVjdGx5IGRlcGVuZHMgb24gYE5FVGAgYW5kIGBQVFBfMTU4OF9DTE9DS2AuIFRpbWUgdG8gY2hlY2sgYGRyaXZlcnMvZHBsbC96bDMwNzN4L0tjb25maWdgIGZvciB0aGUgZGVwZW5kZW5jaWVzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzExIDE0OjAyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy9kcGxsL3psMzA3M3gvS2NvbmZpZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDEsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNTAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7ICAgMTpcdCMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxuICAgMjpcdFxuICAgMzpcdGNvbmZpZyBaTDMwNzNYXG4gICA0Olx0XHR0cmlzdGF0ZSBcJiMzNDtNaWNyb2NoaXAgQXp1cml0ZSBEUExML1BUUC9TeW5jRSBkZXZpY2VzXCYjMzQ7IGlmIENPTVBJTEVfVEVTVFxuICAgNTpcdFx0ZGVwZW5kcyBvbiBORVQgXHUwMDI2XHUwMDI2IFBUUF8xNTg4X0NMT0NLXG4gICA2Olx0XHRzZWxlY3QgRFBMTFxuICAgNzpcdFx0c2VsZWN0IE5FVF9ERVZMSU5LXG4gICA4Olx0XHRzZWxlY3QgUkVHTUFQXG4gICA5Olx0XHRoZWxwXG4gIDEwOlx0XHQgIFRoaXMgZHJpdmVyIHN1cHBvcnRzIE1pY3JvY2hpcCBBenVyaXRlIGZhbWlseSBEUExML1BUUC9TeW5jRVxuICAxMTpcdFx0ICBkZXZpY2VzIHRoYXQgc3VwcG9ydCB1cCB0byA1IGluZGVwZW5kZW50IERQTEwgY2hhbm5lbHMsXG4gIDEyOlx0XHQgIDEwIGlucHV0IHBpbnMgYW5kIHVwIHRvIDIwIG91dHB1dCBwaW5zLlxuICAxMzpcdFxuICAxNDpcdFx0ICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlLiBUaGUgbW9kdWxlXG4gIDE1Olx0XHQgIHdpbGwgYmUgY2FsbGVkIHpsMzA3M3guXG4gIDE2Olx0XG4gIDE3Olx0Y29uZmlnIFpMMzA3M1hfSTJDXG4gIDE4Olx0XHR0cmlzdGF0ZSBcJiMzNDtJMkMgYnVzIGltcGxlbWVudGF0aW9uIGZvciBNaWNyb2NoaXAgQXp1cml0ZSBkZXZpY2VzXCYjMzQ7XG4gIDE5Olx0XHRkZXBlbmRzIG9uIEkyQyBcdTAwMjZcdTAwMjYgTkVUIFx1MDAyNlx1MDAyNiBQVFBfMTU4OF9DTE9DS1xuICAyMDpcdFx0c2VsZWN0IFJFR01BUF9JMkNcbiAgMjE6XHRcdHNlbGVjdCBaTDMwNzNYXG4gIDIyOlx0XHRoZWxwXG4gIDIzOlx0XHQgIFRoaXMgaXMgSTJDIGJ1cyBpbXBsZW1lbnRhdGlvbiBmb3IgTWljcm9jaGlwIEF6dXJpdGUgRFBMTC9QVFAvU3luY0VcbiAgMjQ6XHRcdCAgZGV2aWNlcy5cbiAgMjU6XHRcbiAgMjY6XHRcdCAgVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlIG1vZHVsZSB3aWxsXG4gIDI3Olx0XHQgIGJlIGNhbGxlZCB6bDMwNzN4X2kyYy5cbiAgMjg6XHRcbiAgMjk6XHRjb25maWcgWkwzMDczWF9TUElcbiAgMzA6XHRcdHRyaXN0YXRlIFwmIzM0O1NQSSBidXMgaW1wbGVtZW50YXRpb24gZm9yIE1pY3JvY2hpcCBBenVyaXRlIGRldmljZXNcJiMzNDtcbiAgMzE6XHRcdGRlcGVuZHMgb24gTkVUIFx1MDAyNlx1MDAyNiBTUEkgXHUwMDI2XHUwMDI2IFBUUF8xNTg4X0NMT0NLXG4gIDMyOlx0XHRzZWxlY3QgUkVHTUFQX1NQSVxuICAzMzpcdFx0c2VsZWN0IFpMMzA3M1hcbiAgMzQ6XHRcdGhlbHBcbiAgMzU6XHRcdCAgVGhpcyBpcyBTUEkgYnVzIGltcGxlbWVudGF0aW9uIGZvciBNaWNyb2NoaXAgQXp1cml0ZSBEUExML1BUUC9TeW5jRVxuICAzNjpcdFx0ICBkZXZpY2VzLlxuICAzNzpcdFxuICAzODpcdFx0ICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGUgbW9kdWxlIHdpbGxcbiAgMzk6XHRcdCAgYmUgY2FsbGVkIHpsMzA3M3hfc3BpLlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzExIDE0OjAyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIyMjE2CgkJCQkJCQlvdXRwdXQ6IDM0MwoJCQkJCQkJdGhvdWdodHM6IDE0NTgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBNaWNyb2NoaXAgQXp1cml0ZSBEcml2ZXIgQ29uZmlndXJhdGlvbiBhbmQgQVBJKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIEZpcnN0LCBJIG5lZWQgdG8gZmlndXJlIG91dCB3aGljaCBrZXJuZWwgY29uZmlndXJhdGlvbnMgYXJlIGVzc2VudGlhbCBmb3IgdGhpcyBBenVyaXRlIERQTEwvUFRQL1N5bmNFIGRldmljZSBzdXBwb3J0LiBJbml0aWFsbHksIEkgdGhvdWdodCBpdCB3YXMgYSBzdHJhaWdodGZvcndhcmQgbGlzdDogYFpMMzA3M1hgLCBgWkwzMDczWF9JMkNgLCBgWkwzMDczWF9TUElgLCBgUFRQXzE1ODhfQ0xPQ0tgLCBgRFBMTGAsIGBORVRfREVWTElOS2AsIGBSRUdNQVBgLCBgUkVHTUFQX0kyQ2AsIGFuZCBgUkVHTUFQX1NQSWAuIEJ1dCB3YWl0LCBgWkwzMDczWGAgaXMgYWN0dWFsbHkgc2VsZWN0ZWQgYnkgYm90aCBgWkwzMDczWF9JMkNgIGFuZCBgWkwzMDczWF9TUElgLiBTbywgZGlyZWN0bHkgZW5hYmxpbmcgYFpMMzA3M1hgIG1pZ2h0IGJlIHVubmVjZXNzYXJ5OyBlbmFibGluZyB0aGUgSTJDIGFuZCBTUEkgY29uZmlndXJhdGlvbnMgc2hvdWxkIHN1ZmZpY2UsIHJpZ2h0PwoKVGhlbiBJIG5vdGljZSBgWkwzMDczWGAgaXMgdHJpc3RhdGUgYW5kIG9ubHkgZGlyZWN0bHkgZW5hYmxlZCBpZiBgQ09NUElMRV9URVNUYCBpcyBzZXQuIEdpdmVuIHRoaXMsIGRpcmVjdGx5IGVuYWJsaW5nIGBaTDMwNzNYYCBzZWVtcyB0byBiZSBvZmYgdGhlIHRhYmxlLCBhcyBgWkwzMDczWF9JMkNgIGFscmVhZHkgc2VsZWN0cyBpdCBhbmQgSSB3YW50IHRvIGF2b2lkIHRoZSBgQ09NUElMRV9URVNUYCByZXF1aXJlbWVudC4gU28sIEkgd2lsbCBmb2N1cyBvbiBlbmFibGluZyBgWkwzMDczWF9JMkNgIGFuZCBgWkwzMDczWF9TUElgLiBBbmQsIG9mIGNvdXJzZSwgdGhlIGBQVFBfMTU4OF9DTE9DS2AgaXMgYSBtdXN0LWhhdmUuCgpOZXh0LCBJIG5lZWQgdG8gaWRlbnRpZnkgdGhlIGNydWNpYWwgQVBJIGZ1bmN0aW9ucyBJIHNob3VsZCBmb2N1cyBvbi4gSSYjMzk7dmUgZ290IGEgbGlzdCBoZXJlOiBgemwzMDczeF9jaGFuX3RvZF9yZWFkYCwgYHpsMzA3M3hfY2hhbl90b2Rfd3JpdGVgLCBgemwzMDczeF9jaGFuX3RvZF9hZGp1c3RgLCBgemwzMDczeF9jaGFuX2RmX29mZnNldF9zZXRgLCBgemwzMDczeF9jaGFuX3RpZV93cml0ZWAsIGB6bDMwNzN4X2NoYW5fcGhhc2Vfc3RlcGAsIGB6bDMwNzN4X2RwbGxfcHRwX2dldHRpbWV4NjRgLCBgemwzMDczeF9kcGxsX3B0cF9zZXR0aW1lNjRgLCBgemwzMDczeF9kcGxsX3B0cF9hZGp0aW1lYCwgYHpsMzA3M3hfZHBsbF9wdHBfYWRqZmluZWAsIGFuZCBgemwzMDczeF9kcGxsX3B0cF9hZGpwaGFzZWAuCgpJIG5lZWQgdG8gY29uZmlybSBpZiB0aGVzZSBmdW5jdGlvbnMgYXJlIHN0YXRpYyBvciBub3QuIEV4YW1pbmluZyB0aGVtLCBpdCB0dXJucyBvdXQgdGhhdCBgemwzMDczeF9jaGFuX3RvZF9yZWFkYCwgYHpsMzA3M3hfY2hhbl90b2Rfd3JpdGVgLCBgemwzMDczeF9jaGFuX3RvZF9hZGp1c3RgLCBgemwzMDczeF9jaGFuX2RmX29mZnNldF9zZXRgLCBgemwzMDczeF9jaGFuX3RpZV93cml0ZWAsIGFuZCBgemwzMDczeF9jaGFuX3BoYXNlX3N0ZXBgIGFyZSAqbm90KiBzdGF0aWMsIHdoaWxlIHRoZSBgemwzMDczeF9kcGxsXypgIGZ1bmN0aW9ucyBhcmUgYWxsIHN0YXRpYy4KCldhaXQgYSBtaW51dGUsIHNpbmNlIHRoZSBgemwzMDczeF9kcGxsXypgIGZ1bmN0aW9ucyBhcmUgdXNlZCBhcyBmdW5jdGlvbiBwb2ludGVycyB3aXRoaW4gYHB0cF9jbG9ja19pbmZvYCwgdGhleSAqY2Fubm90KiBiZSBpbmxpbmVkLCBzbyB0aGUgY29tcGlsZXIgKm11c3QqIGhhdmUgZ2VuZXJhdGVkIGluZGl2aWR1YWwgc3ltYm9scyBmb3IgdGhlc2UgZnVuY3Rpb25zLiBUaGV5IGFyZSBlbnRyeSBwb2ludHMgZm9yIFBUUCBzdWJzeXN0ZW0sIHNvIEkgd2lsbCBpbmNsdWRlIHRoZW0uCgpTbywgdGhlIGRlZmluaXRpdmUgbGlzdCBvZiBmdW5jdGlvbnMgSSB3aWxsIGluY2x1ZGUgaXM6IGB6bDMwNzN4X2NoYW5fdG9kX3JlYWRgLCBgemwzMDczeF9jaGFuX3RvZF93cml0ZWAsIGB6bDMwNzN4X2NoYW5fdG9kX2FkanVzdGAsIGB6bDMwNzN4X2NoYW5fZGZfb2Zmc2V0X3NldGAsIGB6bDMwNzN4X2NoYW5fdGllX3dyaXRlYCwgYHpsMzA3M3hfY2hhbl9waGFzZV9zdGVwYCwgYHpsMzA3M3hfZHBsbF9wdHBfZ2V0dGltZXg2NGAsIGB6bDMwNzN4X2RwbGxfcHRwX3NldHRpbWU2NGAsIGB6bDMwNzN4X2RwbGxfcHRwX2FkanRpbWVgLCBgemwzMDczeF9kcGxsX3B0cF9hZGpmaW5lYCwgYW5kIGB6bDMwNzN4X2RwbGxfcHRwX2FkanBoYXNlYC4KCk5vdywgcmVnYXJkaW5nIHRoZSBjb25maWd1cmF0aW9ucywgSSYjMzk7bSBjb25maWRlbnQgYWJvdXQ6IGBaTDMwNzNYX0kyQ2AsIGBaTDMwNzNYX1NQSWAsIGFuZCBgUFRQXzE1ODhfQ0xPQ0tgLgoKSSYjMzk7bGwgcXVpY2tseSBjaGVjayBmb3IgZGVwZW5kZW5jaWVzLiBgWkwzMDczWF9JMkNgIHJlcXVpcmVzIGBJMkNgLCBgTkVUYCwgYW5kIGBQVFBfMTU4OAoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzExIDE0OjAzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtaTDMwNzNYX0kyQyYjMzQ7LAogICAgJiMzNDtaTDMwNzNYX1NQSSYjMzQ7LAogICAgJiMzNDtQVFBfMTU4OF9DTE9DSyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3psMzA3M3hfY2hhbl90b2RfcmVhZCYjMzQ7LAogICAgJiMzNDt6bDMwNzN4X2NoYW5fdG9kX3dyaXRlJiMzNDssCiAgICAmIzM0O3psMzA3M3hfY2hhbl90b2RfYWRqdXN0JiMzNDssCiAgICAmIzM0O3psMzA3M3hfY2hhbl9kZl9vZmZzZXRfc2V0JiMzNDssCiAgICAmIzM0O3psMzA3M3hfY2hhbl90aWVfd3JpdGUmIzM0OywKICAgICYjMzQ7emwzMDczeF9jaGFuX3BoYXNlX3N0ZXAmIzM0OywKICAgICYjMzQ7emwzMDczeF9kcGxsX3B0cF9nZXR0aW1leDY0JiMzNDssCiAgICAmIzM0O3psMzA3M3hfZHBsbF9wdHBfc2V0dGltZTY0JiMzNDssCiAgICAmIzM0O3psMzA3M3hfZHBsbF9wdHBfYWRqdGltZSYjMzQ7LAogICAgJiMzNDt6bDMwNzN4X2RwbGxfcHRwX2FkamZpbmUmIzM0OywKICAgICYjMzQ7emwzMDczeF9kcGxsX3B0cF9hZGpwaGFzZSYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRzIFBUUCBjbG9jayBzdXBwb3J0IHRvIHRoZSBNaWNyb2NoaXAgQXp1cml0ZSBEUExMIGRyaXZlciAoemwzMDczeCkuIEl0IGltcGxlbWVudHMgUFRQIGNsb2NrIG9wZXJhdGlvbnMgbGlrZSBnZXR0aW1leDY0LCBzZXR0aW1lNjQsIGFkanRpbWUsIGFkamZpbmUsIGFuZCBhZGpwaGFzZS4gVGhlIGRyaXZlciBjYW4gYmUgaW5zdGFudGlhdGVkIHZpYSBJMkMgb3IgU1BJIGluIFFFTVUsIGFuZCB0aGUgUFRQIG9wZXJhdGlvbnMgYXJlIHJlYWNoYWJsZSBmcm9tIHVzZXJzcGFjZSB2aWEgUFRQIGlvY3Rscy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7WkwzMDczWF9JMkMmIzM0OywKICAgICYjMzQ7WkwzMDczWF9TUEkmIzM0OywKICAgICYjMzQ7UFRQXzE1ODhfQ0xPQ0smIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDt6bDMwNzN4X2NoYW5fdG9kX3JlYWQmIzM0OywKICAgICYjMzQ7emwzMDczeF9jaGFuX3RvZF93cml0ZSYjMzQ7LAogICAgJiMzNDt6bDMwNzN4X2NoYW5fdG9kX2FkanVzdCYjMzQ7LAogICAgJiMzNDt6bDMwNzN4X2NoYW5fZGZfb2Zmc2V0X3NldCYjMzQ7LAogICAgJiMzNDt6bDMwNzN4X2NoYW5fdGllX3dyaXRlJiMzNDssCiAgICAmIzM0O3psMzA3M3hfY2hhbl9waGFzZV9zdGVwJiMzNDssCiAgICAmIzM0O3psMzA3M3hfZHBsbF9wdHBfZ2V0dGltZXg2NCYjMzQ7LAogICAgJiMzNDt6bDMwNzN4X2RwbGxfcHRwX3NldHRpbWU2NCYjMzQ7LAogICAgJiMzNDt6bDMwNzN4X2RwbGxfcHRwX2FkanRpbWUmIzM0OywKICAgICYjMzQ7emwzMDczeF9kcGxsX3B0cF9hZGpmaW5lJiMzNDssCiAgICAmIzM0O3psMzA3M3hfZHBsbF9wdHBfYWRqcGhhc2UmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcyBQVFAgY2xvY2sgc3VwcG9ydCB0byB0aGUgTWljcm9jaGlwIEF6dXJpdGUgRFBMTCBkcml2ZXIgKHpsMzA3M3gpLiBJdCBpbXBsZW1lbnRzIFBUUCBjbG9jayBvcGVyYXRpb25zIGxpa2UgZ2V0dGltZXg2NCwgc2V0dGltZTY0LCBhZGp0aW1lLCBhZGpmaW5lLCBhbmQgYWRqcGhhc2UuIFRoZSBkcml2ZXIgY2FuIGJlIGluc3RhbnRpYXRlZCB2aWEgSTJDIG9yIFNQSSBpbiBRRU1VLCBhbmQgdGhlIFBUUCBvcGVyYXRpb25zIGFyZSByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2UgdmlhIFBUUCBpb2N0bHMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzExIDE0OjAzPC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5JZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTEgMTQ6MDM8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+YmVzdC1leHBlbnNpdmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcyBQVFAgY2xvY2sgc3VwcG9ydCB0byB0aGUgTWljcm9jaGlwIEF6dXJpdGUgRFBMTC9QVFAvU3luY0UgZGV2aWNlcyBkcml2ZXIuIEl0IGludHJvZHVjZXMgZnVuY3Rpb25zIHRvIHJlYWQvd3JpdGUgVGltZSBvZiBEYXkgKFRvRCksIGFkanVzdCBwaGFzZSwgYWRqdXN0IGZyZXF1ZW5jeSwgYW5kIHJlZ2lzdGVyIGEgUFRQIGNsb2NrIGRldmljZS4gVGhlIGRyaXZlciBpbnRlcmFjdHMgd2l0aCB0aGUgUFRQIHN1YnN5c3RlbSBieSBwcm92aWRpbmcgY2FsbGJhY2tzIChgZ2V0dGltZXg2NGAsIGBzZXR0aW1lNjRgLCBgYWRqdGltZWAsIGBhZGpmaW5lYCwgYGFkanBoYXNlYCkuIEFsbCBzdHJ1Y3R1cmVzIGFsbG9jYXRlZCBkeW5hbWljYWxseSBhcmUgemVyby1pbml0aWFsaXplZCB1c2luZyBga3phbGxvY19vYmpgLiBUaGUgYHB0cF9jbG9ja19pbmZvYCBzdHJ1Y3R1cmUgaXMgY29waWVkIGZyb20gYSBzdGF0aWMgY29uc3QgdGVtcGxhdGUsIGVuc3VyaW5nIGFsbCB1bmluaXRpYWxpemVkIGZpZWxkcyBhcmUgemVyb2VkIGJ5IHRoZSBjb21waWxlciBiZWZvcmUgYHNucHJpbnRmYCBtb2RpZmllcyB0aGUgYG5hbWVgIGZpZWxkLiBUaGUgYHN0cnVjdCB0aW1lc3BlYzY0YCBwb3B1bGF0ZWQgYnkgdGhlIGRyaXZlciBpcyBmdWxseSBpbml0aWFsaXplZCBvbiBzdWNjZXNzLCBhbmQgZXJyb3JzIGFyZSBwcm9wZXJseSBwcm9wYWdhdGVkIHRvIHRoZSBQVFAgc3Vic3lzdGVtLCBwcmV2ZW50aW5nIHVuaW5pdGlhbGl6ZWQgZGF0YSBmcm9tIGJlaW5nIHVzZWQgb3IgY29waWVkIHRvIHVzZXJzcGFjZS4gTm8gbmV3IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzIG9yIGluZm8tbGVha3MgYXJlIGludHJvZHVjZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5CmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kCmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikKZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuCgpDUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjoKLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlCiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOCiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUAogIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuCi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsCiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLgoKUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTiwKTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy4KQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWQpzZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrcwp0aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLgoKTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3QKdW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsCmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5cwp0aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZwp1bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2wKZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLApjYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy4KClNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczoKMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2IKICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHMKICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC4KMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlcwogICBvciBzdHJ1Y3QgZmllbGRzLgozLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzCiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuCjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzCiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy4KClNldCBOZWVkc0tNU0FOPWZhbHNlIElGOgotIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyCiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0CiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLgotIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkCiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLgotIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy4KClVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGUKZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDk1N2RjZmQ2NzFlOGJjNTk3NzE5YzEyY2IyYjMwMWQyZjc0OWZlZDEKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgVHVlIEF1ZyAxMSAxNDowMjoyMiAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZHBsbC96bDMwNzN4L0tjb25maWcgYi9kcml2ZXJzL2RwbGwvemwzMDczeC9LY29uZmlnCmluZGV4IDViYmNhMTQwMDU4MTMuLmRhMTczMWFjZTE1ZjAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZHBsbC96bDMwNzN4L0tjb25maWcKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9kcGxsL3psMzA3M3gvS2NvbmZpZwpAQCAtMiw3ICYjNDM7Miw3IEBACiAKIGNvbmZpZyBaTDMwNzNYCiAJdHJpc3RhdGUgJiMzNDtNaWNyb2NoaXAgQXp1cml0ZSBEUExML1BUUC9TeW5jRSBkZXZpY2VzJiMzNDsgaWYgQ09NUElMRV9URVNUCi0JZGVwZW5kcyBvbiBORVQKJiM0MzsJZGVwZW5kcyBvbiBORVQgJmFtcDsmYW1wOyBQVFBfMTU4OF9DTE9DSwogCXNlbGVjdCBEUExMCiAJc2VsZWN0IE5FVF9ERVZMSU5LCiAJc2VsZWN0IFJFR01BUApAQCAtMTYsNyAmIzQzOzE2LDcgQEAgY29uZmlnIFpMMzA3M1gKIAogY29uZmlnIFpMMzA3M1hfSTJDCiAJdHJpc3RhdGUgJiMzNDtJMkMgYnVzIGltcGxlbWVudGF0aW9uIGZvciBNaWNyb2NoaXAgQXp1cml0ZSBkZXZpY2VzJiMzNDsKLQlkZXBlbmRzIG9uIEkyQyAmYW1wOyZhbXA7IE5FVAomIzQzOwlkZXBlbmRzIG9uIEkyQyAmYW1wOyZhbXA7IE5FVCAmYW1wOyZhbXA7IFBUUF8xNTg4X0NMT0NLCiAJc2VsZWN0IFJFR01BUF9JMkMKIAlzZWxlY3QgWkwzMDczWAogCWhlbHAKQEAgLTI4LDcgJiM0MzsyOCw3IEBAIGNvbmZpZyBaTDMwNzNYX0kyQwogCiBjb25maWcgWkwzMDczWF9TUEkKIAl0cmlzdGF0ZSAmIzM0O1NQSSBidXMgaW1wbGVtZW50YXRpb24gZm9yIE1pY3JvY2hpcCBBenVyaXRlIGRldmljZXMmIzM0OwotCWRlcGVuZHMgb24gTkVUICZhbXA7JmFtcDsgU1BJCiYjNDM7CWRlcGVuZHMgb24gTkVUICZhbXA7JmFtcDsgU1BJICZhbXA7JmFtcDsgUFRQXzE1ODhfQ0xPQ0sKIAlzZWxlY3QgUkVHTUFQX1NQSQogCXNlbGVjdCBaTDMwNzNYCiAJaGVscApkaWZmIC0tZ2l0IGEvZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jIGIvZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jCmluZGV4IDRlYzJjZjUzZGFkNDYuLmJjNmQ3MGQyNWQ3OTEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmMKQEAgLTMsNiAmIzQzOzMsNyBAQAogI2luY2x1ZGUgJmx0O2xpbnV4L2NsZWFudXAuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9kZWxheS5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L2Rldl9wcmludGsuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvcHRwX2Nsb2NrX2tlcm5lbC5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L3N0cmluZy5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L3R5cGVzLmgmZ3Q7CiAKQEAgLTE2Miw4ICYjNDM7MTYzLDggQEAgaW50IHpsMzA3M3hfY2hhbl9uY29fbW9kZV9zZXQoc3RydWN0IHpsMzA3M3hfZGV2ICp6bGRldiwgdTggaW5kZXgpCiAgKiBAemxkZXY6IHBvaW50ZXIgdG8gemwzMDczeF9kZXYgc3RydWN0dXJlCiAgKiBAaW5kZXg6IERQTEwgY2hhbm5lbCBpbmRleCB0byBmZXRjaCBzdGF0ZSBmb3IKICAqCi0gKiBSZWFkcyB0aGUgbW9kZV9yZWZzZWwgcmVnaXN0ZXIgYW5kIHJlZmVyZW5jZSBwcmlvcml0eSByZWdpc3RlcnMgZm9yCi0gKiB0aGUgZ2l2ZW4gRFBMTCBjaGFubmVsIGFuZCBzdG9yZXMgdGhlIHJhdyB2YWx1ZXMgZm9yIGxhdGVyIHVzZS4KJiM0MzsgKiBSZWFkcyB0aGUgbW9kZV9yZWZzZWwsIHN0YXR1cyBhbmQgcmVmZXJlbmNlIHByaW9yaXR5IHJlZ2lzdGVycyBmb3IKJiM0MzsgKiB0aGUgZ2l2ZW4gRFBMTCBjaGFubmVsIGFuZCBzdG9yZXMgdGhlIHZhbHVlcyBmb3IgbGF0ZXIgdXNlLgogICoKICAqIFJldHVybjogMCBvbiBzdWNjZXNzLCAmbHQ7MCBvbiBlcnJvcgogICovCkBAIC0yMzQsNiAmIzQzOzIzNSwzMjYgQEAgY29uc3Qgc3RydWN0IHpsMzA3M3hfY2hhbiAqemwzMDczeF9jaGFuX3N0YXRlX2dldChzdHJ1Y3QgemwzMDczeF9kZXYgKnpsZGV2LAogCXJldHVybiAmYW1wO3psZGV2LSZndDtjaGFuW2luZGV4XTsKIH0KIAomIzQzOy8qKgomIzQzOyAqIHpsMzA3M3hfY2hhbl90b2RfcmVhZHlfd2FpdCAtIHdhaXQgZm9yIFRvRCBzZW1hcGhvcmUgdG8gY2xlYXIKJiM0MzsgKiBAemxkZXY6IHBvaW50ZXIgdG8gemwzMDczeCBkZXZpY2UKJiM0MzsgKiBAY2g6IERQTEwgY2hhbm5lbCBpbmRleAomIzQzOyAqCiYjNDM7ICogQ2hlY2tzIHRoZSBUb0QgY29udHJvbCByZWdpc3RlciBzZW1hcGhvcmUgYml0LiBJZiBjbGVhciwgcmV0dXJucwomIzQzOyAqIGltbWVkaWF0ZWx5LiBPdGhlcndpc2UgcG9sbHMgdW50aWwgdGhlIGJpdCBpcyBjbGVhcmVkIGJ5IHRoZSBkZXZpY2UuCiYjNDM7ICoKJiM0MzsgKiBSZXR1cm46CiYjNDM7ICogKiAwCQkJLSBzdWNjZXNzCiYjNDM7ICogKiAlLUVCVVNZCQktIHRpbWVvdXQKJiM0MzsgKiAqICUtRU9QTk9UU1VQUAktIHVua25vd24gY29tbWFuZCBkZXRlY3RlZAomIzQzOyAqICogbmVnYXRpdmUJCS0gb3RoZXIgZXJyb3IKJiM0MzsgKi8KJiM0MztpbnQgemwzMDczeF9jaGFuX3RvZF9yZWFkeV93YWl0KHN0cnVjdCB6bDMwNzN4X2RldiAqemxkZXYsIHU4IGNoKQomIzQzO3sKJiM0MzsJdW5zaWduZWQgaW50IHRpbWVvdXQ7CiYjNDM7CXU4IHRvZF9jdHJsOwomIzQzOwlpbnQgcmM7CiYjNDM7CiYjNDM7CXJjID0gemwzMDczeF9yZWFkX3U4KHpsZGV2LCBaTF9SRUdfRFBMTF9UT0RfQ1RSTChjaCksICZhbXA7dG9kX2N0cmwpOwomIzQzOwlpZiAocmMpCiYjNDM7CQlyZXR1cm4gcmM7CiYjNDM7CiYjNDM7CWlmICghKHRvZF9jdHJsICZhbXA7IFpMX0RQTExfVE9EX0NUUkxfU0VNKSkKJiM0MzsJCXJldHVybiAwOwomIzQzOwomIzQzOwlzd2l0Y2ggKEZJRUxEX0dFVChaTF9EUExMX1RPRF9DVFJMX0NNRCwgdG9kX2N0cmwpKSB7CiYjNDM7CWNhc2UgWkxfRFBMTF9UT0RfQ1RSTF9DTURfV1JfTkVYVF8xSFo6CiYjNDM7CQl0aW1lb3V0ID0gWkxfUE9MTF9UT0RfV1JfVElNRU9VVF9VUzsKJiM0MzsJCWJyZWFrOwomIzQzOwljYXNlIFpMX0RQTExfVE9EX0NUUkxfQ01EX1JEX0NVUlJFTlQ6CiYjNDM7CWNhc2UgWkxfRFBMTF9UT0RfQ1RSTF9DTURfUkRfTkVYVF8xSFo6CiYjNDM7CQl0aW1lb3V0ID0gWkxfUE9MTF9UT0RfUkRfVElNRU9VVF9VUzsKJiM0MzsJCWJyZWFrOwomIzQzOwlkZWZhdWx0OgomIzQzOwkJV0FSTl9PTigxKTsKJiM0MzsJCXJldHVybiAtRU9QTk9UU1VQUDsKJiM0MzsJfQomIzQzOwomIzQzOwlyYyA9IHpsMzA3M3hfcG9sbF96ZXJvX3U4KHpsZGV2LCBaTF9SRUdfRFBMTF9UT0RfQ1RSTChjaCksCiYjNDM7CQkJCSAgWkxfRFBMTF9UT0RfQ1RSTF9TRU0sIHRpbWVvdXQpOwomIzQzOwomIzQzOwlyZXR1cm4gcmMgPT0gLUVUSU1FRE9VVCA/IC1FQlVTWSA6IHJjOwomIzQzO30KJiM0MzsKJiM0MzsvKioKJiM0MzsgKiB6bDMwNzN4X2NoYW5fdG9kX2N0cmwgLSBpc3N1ZSBUb0QgY29tbWFuZAomIzQzOyAqIEB6bGRldjogcG9pbnRlciB0byB6bDMwNzN4IGRldmljZQomIzQzOyAqIEBjaDogRFBMTCBjaGFubmVsIGluZGV4CiYjNDM7ICogQGNtZDogVG9EIGNvbW1hbmQgdG8gZXhlY3V0ZQomIzQzOyAqCiYjNDM7ICogV3JpdGVzIHRoZSBzZW1hcGhvcmUgYW5kIGNvbW1hbmQgdG8gZHBsbF90b2RfY3RybC4gVGhlIGNhbGxlciBtdXN0CiYjNDM7ICogZW5zdXJlIHRoZSBkZXZpY2UgaXMgcmVhZHkgKHNlbWFwaG9yZSBjbGVhcikgYmVmb3JlIGNhbGxpbmcgYW5kCiYjNDM7ICogbXVzdCB3YWl0IGZvciBjb21wbGV0aW9uIGlmIG5lZWRlZC4KJiM0MzsgKgomIzQzOyAqIFJldHVybjogMCBvbiBzdWNjZXNzLCAmbHQ7MCBvbiBlcnJvcgomIzQzOyAqLwomIzQzO3N0YXRpYyBpbnQgemwzMDczeF9jaGFuX3RvZF9jdHJsKHN0cnVjdCB6bDMwNzN4X2RldiAqemxkZXYsIHU4IGNoLCB1OCBjbWQpCiYjNDM7ewomIzQzOwlyZXR1cm4gemwzMDczeF93cml0ZV91OCh6bGRldiwgWkxfUkVHX0RQTExfVE9EX0NUUkwoY2gpLAomIzQzOwkJCQlaTF9EUExMX1RPRF9DVFJMX1NFTSB8IGNtZCk7CiYjNDM7fQomIzQzOwomIzQzOy8qKgomIzQzOyAqIHpsMzA3M3hfY2hhbl90b2RfcmVhZCAtIHJlYWQgVG9EIHJlZ2lzdGVycyBhZnRlciBpc3N1aW5nIGEgY29tbWFuZAomIzQzOyAqIEB6bGRldjogcG9pbnRlciB0byB6bDMwNzN4IGRldmljZQomIzQzOyAqIEBjaDogRFBMTCBjaGFubmVsIGluZGV4CiYjNDM7ICogQG5leHRfaHo6IGlmIHRydWUsIHJlYWQgcHJlZGljdGVkIFRvRCBhdCBuZXh0IDEgSHo7IG90aGVyd2lzZSByZWFkIGN1cnJlbnQKJiM0MzsgKiBAdHM6IHRpbWVzcGVjIHRvIHN0b3JlIHRoZSByZXN1bHQKJiM0MzsgKiBAc3RzOiBvcHRpb25hbCBzeXN0ZW0gdGltZXN0YW1wIHBhaXIgZm9yIGNyb3NzLXRpbWVzdGFtcGluZwomIzQzOyAqCiYjNDM7ICogQ29udGV4dDogQ2FsbGVyIG11c3Qgc2VyaWFsaXplIGFsbCB6bDMwNzN4X2NoYW5fdG9kXyogY2FsbHMgZXh0ZXJuYWxseS4KJiM0MzsgKiBSZXR1cm46IDAgb24gc3VjY2VzcywgJmx0OzAgb24gZXJyb3IKJiM0MzsgKi8KJiM0MztpbnQgemwzMDczeF9jaGFuX3RvZF9yZWFkKHN0cnVjdCB6bDMwNzN4X2RldiAqemxkZXYsIHU4IGNoLAomIzQzOwkJCSAgYm9vbCBuZXh0X2h6LCBzdHJ1Y3QgdGltZXNwZWM2NCAqdHMsCiYjNDM7CQkJICBzdHJ1Y3QgcHRwX3N5c3RlbV90aW1lc3RhbXAgKnN0cykKJiM0Mzt7CiYjNDM7CXUzMiBuc2VjOwomIzQzOwl1NjQgc2VjOwomIzQzOwl1OCBjbWQ7CiYjNDM7CWludCByYzsKJiM0MzsKJiM0MzsJaWYgKG5leHRfaHopCiYjNDM7CQljbWQgPSBaTF9EUExMX1RPRF9DVFJMX0NNRF9SRF9ORVhUXzFIWjsKJiM0MzsJZWxzZQomIzQzOwkJY21kID0gWkxfRFBMTF9UT0RfQ1RSTF9DTURfUkRfQ1VSUkVOVDsKJiM0MzsKJiM0MzsJLyogV2FpdCBmb3IgYW55IHByZXZpb3VzIFRvRCBvcGVyYXRpb24gdG8gY29tcGxldGUgKi8KJiM0MzsJcmMgPSB6bDMwNzN4X2NoYW5fdG9kX3JlYWR5X3dhaXQoemxkZXYsIGNoKTsKJiM0MzsJaWYgKHJjKQomIzQzOwkJcmV0dXJuIHJjOwomIzQzOwomIzQzOwlwdHBfcmVhZF9zeXN0ZW1fcHJldHMoc3RzKTsKJiM0MzsJcmMgPSB6bDMwNzN4X2NoYW5fdG9kX2N0cmwoemxkZXYsIGNoLCBjbWQpOwomIzQzOwlpZiAocmMpCiYjNDM7CQlyZXR1cm4gcmM7CiYjNDM7CiYjNDM7CXJjID0gemwzMDczeF9jaGFuX3RvZF9yZWFkeV93YWl0KHpsZGV2LCBjaCk7CiYjNDM7CWlmIChyYykKJiM0MzsJCXJldHVybiByYzsKJiM0MzsJcHRwX3JlYWRfc3lzdGVtX3Bvc3R0cyhzdHMpOwomIzQzOwomIzQzOwlyYyA9IHpsMzA3M3hfcmVhZF91NDgoemxkZXYsIFpMX1JFR19EUExMX1RPRF9TRUMoY2gpLCAmYW1wO3NlYyk7CiYjNDM7CWlmIChyYykKJiM0MzsJCXJldHVybiByYzsKJiM0MzsKJiM0MzsJLyogSFcgbmFub3NlY29uZHMgYXJlIGFsd2F5cyBpbiBbMCwgTlNFQ19QRVJfU0VDKSByYW5nZSAqLwomIzQzOwlyYyA9IHpsMzA3M3hfcmVhZF91MzIoemxkZXYsIFpMX1JFR19EUExMX1RPRF9OUyhjaCksICZhbXA7bnNlYyk7CiYjNDM7CWlmIChyYykKJiM0MzsJCXJldHVybiByYzsKJiM0MzsKJiM0MzsJdHMtJmd0O3R2X3NlYyA9IHNlYzsKJiM0MzsJdHMtJmd0O3R2X25zZWMgPSBuc2VjOwomIzQzOwomIzQzOwlyZXR1cm4gMDsKJiM0Mzt9CiYjNDM7CiYjNDM7LyoqCiYjNDM7ICogemwzMDczeF9jaGFuX3RvZF93cml0ZSAtIHdyaXRlIFRvRCByZWdpc3RlcnMgYW5kIHRyaWdnZXIgMSBIeiB1cGRhdGUKJiM0MzsgKiBAemxkZXY6IHBvaW50ZXIgdG8gemwzMDczeCBkZXZpY2UKJiM0MzsgKiBAY2g6IERQTEwgY2hhbm5lbCBpbmRleAomIzQzOyAqIEB0czogdGltZSB0byBzZXQKJiM0MzsgKgomIzQzOyAqIENvbnRleHQ6IENhbGxlciBtdXN0IHNlcmlhbGl6ZSBhbGwgemwzMDczeF9jaGFuX3RvZF8qIGNhbGxzIGV4dGVybmFsbHkuCiYjNDM7ICogUmV0dXJuOiAwIG9uIHN1Y2Nlc3MsICZsdDswIG9uIGVycm9yCiYjNDM7ICovCiYjNDM7aW50IHpsMzA3M3hfY2hhbl90b2Rfd3JpdGUoc3RydWN0IHpsMzA3M3hfZGV2ICp6bGRldiwgdTggY2gsCiYjNDM7CQkJICAgc3RydWN0IHRpbWVzcGVjNjQgdHMpCiYjNDM7ewomIzQzOwlpbnQgcmM7CiYjNDM7CiYjNDM7CS8qIFdhaXQgZm9yIGFueSBwcmV2aW91cyBUb0Qgb3BlcmF0aW9uIHRvIGNvbXBsZXRlICovCiYjNDM7CXJjID0gemwzMDczeF9jaGFuX3RvZF9yZWFkeV93YWl0KHpsZGV2LCBjaCk7CiYjNDM7CWlmIChyYykKJiM0MzsJCXJldHVybiByYzsKJiM0MzsKJiM0MzsJcmMgPSB6bDMwNzN4X3dyaXRlX3U0OCh6bGRldiwgWkxfUkVHX0RQTExfVE9EX1NFQyhjaCksIHRzLnR2X3NlYyk7CiYjNDM7CWlmIChyYykKJiM0MzsJCXJldHVybiByYzsKJiM0MzsKJiM0MzsJcmMgPSB6bDMwNzN4X3dyaXRlX3UzMih6bGRldiwgWkxfUkVHX0RQTExfVE9EX05TKGNoKSwgdHMudHZfbnNlYyk7CiYjNDM7CWlmIChyYykKJiM0MzsJCXJldHVybiByYzsKJiM0MzsKJiM0MzsJcmV0dXJuIHpsMzA3M3hfY2hhbl90b2RfY3RybCh6bGRldiwgY2gsCiYjNDM7CQkJCSAgICAgWkxfRFBMTF9UT0RfQ1RSTF9DTURfV1JfTkVYVF8xSFopOwomIzQzO30KJiM0MzsKJiM0MzsvKioKJiM0MzsgKiB6bDMwNzN4X2NoYW5fdG9kX2FkanVzdCAtIGF0b21pYyBUb0QgcmVhZC1tb2RpZnktd3JpdGUgd2l0aCByb2xsb3ZlciBndWFyZAomIzQzOyAqIEB6bGRldjogcG9pbnRlciB0byB6bDMwNzN4IGRldmljZQomIzQzOyAqIEBjaDogRFBMTCBjaGFubmVsIGluZGV4CiYjNDM7ICogQGRlbHRhOiB0aW1lIGFkanVzdG1lbnQgdG8gYXBwbHkKJiM0MzsgKgomIzQzOyAqIFJlYWRzIHRoZSBuZXh0LUh6IFRvRCBhbmQgY3VycmVudCBUb0QsIHRoZW4gY2hlY2tzIHdoZXRoZXIgZW5vdWdoIHRpbWUKJiM0MzsgKiByZW1haW5zIGJlZm9yZSB0aGUgbmV4dCAxIEh6IHJvbGxvdmVyIHRvIHNhZmVseSBjb21wbGV0ZSB0aGUgd3JpdGUuCiYjNDM7ICogUmUtcmVhZHMgaWYgdGhlIDEgSHogdGljayBjcm9zc2VkIGJldHdlZW4gdGhlIHR3byByZWFkcyBvciBpZiBsZXNzCiYjNDM7ICogdGhhbiAyMCBtcyByZW1haW5zIGJlZm9yZSB0aGUgbmV4dCByb2xsb3Zlci4gQXBwbGllcyBAZGVsdGEgYW5kIHdyaXRlcwomIzQzOyAqIHRoZSByZXN1bHQgYmFjay4KJiM0MzsgKgomIzQzOyAqIENvbnRleHQ6IENhbGxlciBtdXN0IHNlcmlhbGl6ZSBhbGwgemwzMDczeF9jaGFuX3RvZF8qIGNhbGxzIGV4dGVybmFsbHkuCiYjNDM7ICogUmV0dXJuOiAwIG9uIHN1Y2Nlc3MsICZsdDswIG9uIGVycm9yCiYjNDM7ICovCiYjNDM7aW50IHpsMzA3M3hfY2hhbl90b2RfYWRqdXN0KHN0cnVjdCB6bDMwNzN4X2RldiAqemxkZXYsIHU4IGNoLAomIzQzOwkJCSAgICBzdHJ1Y3QgdGltZXNwZWM2NCBkZWx0YSkKJiM0Mzt7CiYjNDM7I2RlZmluZSBaTF9UT0RfTUFYX1JFVFJJRVMJMjAKJiM0MzsJc3RhdGljIGNvbnN0IGxvbmcgdGhyZXNob2xkX25zID0gMjAgKiBOU0VDX1BFUl9NU0VDOwomIzQzOwlzdHJ1Y3QgdGltZXNwZWM2NCB0c19uZXh0LCB0c19jdXIsIGRpZmY7CiYjNDM7CWludCByYywgaTsKJiM0MzsKJiM0MzsJZm9yIChpID0gMDsgaSAmbHQ7IFpMX1RPRF9NQVhfUkVUUklFUzsgaSYjNDM7JiM0MzspIHsKJiM0MzsJCXJjID0gemwzMDczeF9jaGFuX3RvZF9yZWFkKHpsZGV2LCBjaCwgdHJ1ZSwgJmFtcDt0c19uZXh0LCBOVUxMKTsKJiM0MzsJCWlmIChyYykKJiM0MzsJCQlyZXR1cm4gcmM7CiYjNDM7CiYjNDM7CQlyYyA9IHpsMzA3M3hfY2hhbl90b2RfcmVhZCh6bGRldiwgY2gsIGZhbHNlLCAmYW1wO3RzX2N1ciwgTlVMTCk7CiYjNDM7CQlpZiAocmMpCiYjNDM7CQkJcmV0dXJuIHJjOwomIzQzOwomIzQzOwkJLyogRW5zdXJlIHRoZSAxIEh6IHRpY2sgZGlkIG5vdCBjcm9zcyBiZXR3ZWVuIHRoZSB0d28gcmVhZHMKJiM0MzsJCSAqIGFuZCB0aGF0IGVub3VnaCBtYXJnaW4gcmVtYWlucyB0byBjb21wbGV0ZSB0aGUgd3JpdGUuCiYjNDM7CQkgKi8KJiM0MzsJCWRpZmYgPSB0aW1lc3BlYzY0X3N1Yih0c19uZXh0LCB0c19jdXIpOwomIzQzOwkJaWYgKGRpZmYudHZfc2VjICZndDsgMCB8fAomIzQzOwkJICAgICghZGlmZi50dl9zZWMgJmFtcDsmYW1wOyBkaWZmLnR2X25zZWMgJmd0Oz0gdGhyZXNob2xkX25zKSkKJiM0MzsJCQlicmVhazsKJiM0MzsJfQomIzQzOwlpZiAoaSA9PSBaTF9UT0RfTUFYX1JFVFJJRVMpIHsKJiM0MzsJCWRldl93YXJuKHpsZGV2LSZndDtkZXYsCiYjNDM7CQkJICYjMzQ7RFBMTCV1IFRvRCBhZGp1c3QgZmFpbGVkIHRvIGdldCBzdGFibGUgbWFyZ2luXG4mIzM0OywKJiM0MzsJCQkgY2gpOwomIzQzOwkJcmV0dXJuIC1FQlVTWTsKJiM0MzsJfQomIzQzOwomIzQzOwkvKiBBcHBseSBkZWx0YSB0byB0aGUgbmV4dC1IeiBUb0QgKi8KJiM0MzsJdHNfbmV4dCA9IHRpbWVzcGVjNjRfYWRkKHRzX25leHQsIGRlbHRhKTsKJiM0MzsJaWYgKCF0aW1lc3BlYzY0X3ZhbGlkKCZhbXA7dHNfbmV4dCkpCiYjNDM7CQlyZXR1cm4gLUVJTlZBTDsKJiM0MzsKJiM0MzsJcmV0dXJuIHpsMzA3M3hfY2hhbl90b2Rfd3JpdGUoemxkZXYsIGNoLCB0c19uZXh0KTsKJiM0MzsjdW5kZWYgWkxfVE9EX01BWF9SRVRSSUVTCiYjNDM7fQomIzQzOwomIzQzOy8qKgomIzQzOyAqIHpsMzA3M3hfY2hhbl9kZl9vZmZzZXRfc2V0IC0gd3JpdGUgZGVsdGEgZnJlcXVlbmN5IG9mZnNldCB0byBoYXJkd2FyZQomIzQzOyAqIEB6bGRldjogcG9pbnRlciB0byB6bDMwNzN4IGRldmljZQomIzQzOyAqIEBjaDogRFBMTCBjaGFubmVsIGluZGV4CiYjNDM7ICogQG9mZnNldDogZnJlcXVlbmN5IG9mZnNldCBpbiAyXi00OCBzdGVwcwomIzQzOyAqCiYjNDM7ICogQ29udGV4dDogQ2FsbGVyIG11c3QgaG9sZCB0aGUgcGVyLURQTEwgbG9jay4KJiM0MzsgKiBSZXR1cm46IDAgb24gc3VjY2VzcywgJmx0OzAgb24gZXJyb3IKJiM0MzsgKi8KJiM0MztpbnQgemwzMDczeF9jaGFuX2RmX29mZnNldF9zZXQoc3RydWN0IHpsMzA3M3hfZGV2ICp6bGRldiwgdTggY2gsIHM2NCBvZmZzZXQpCiYjNDM7ewomIzQzOwlpbnQgcmM7CiYjNDM7CiYjNDM7CXJjID0gemwzMDczeF93cml0ZV91NDgoemxkZXYsIFpMX1JFR19EUExMX0RGX09GRlNFVChjaCksIG9mZnNldCk7CiYjNDM7CWlmICghcmMpCiYjNDM7CQl6bGRldi0mZ3Q7Y2hhbltjaF0uZGZfb2Zmc2V0ID0gb2Zmc2V0OwomIzQzOwomIzQzOwlyZXR1cm4gcmM7CiYjNDM7fQomIzQzOwomIzQzOy8qKgomIzQzOyAqIHpsMzA3M3hfY2hhbl90aWVfd3JpdGUgLSBhZGp1c3QgRFBMTCBwaGFzZSB1c2luZyBUSUUgd3JpdGUKJiM0MzsgKiBAemxkZXY6IHBvaW50ZXIgdG8gemwzMDczeCBkZXZpY2UKJiM0MzsgKiBAY2g6IERQTEwgY2hhbm5lbCBpbmRleAomIzQzOyAqIEBkZWx0YV9uczogcGhhc2UgYWRqdXN0bWVudCBpbiBuYW5vc2Vjb25kcyAobXVzdCBiZSBpbiAoLTFzLCAxcykpCiYjNDM7ICoKJiM0MzsgKiBDb252ZXJ0cyBuYW5vc2Vjb25kcyB0byBUSUUgdW5pdHMgKDAuMDEgcHMpIGFuZCB3cml0ZXMgVElFIGRhdGEKJiM0MzsgKiB0byB0aGUgc3BlY2lmaWVkIGNoYW5uZWwuCiYjNDM7ICoKJiM0MzsgKiBSZXR1cm46IDAgb24gc3VjY2VzcywgJmx0OzAgb24gZXJyb3IKJiM0MzsgKi8KJiM0MztpbnQgemwzMDczeF9jaGFuX3RpZV93cml0ZShzdHJ1Y3QgemwzMDczeF9kZXYgKnpsZGV2LCB1OCBjaCwgczY0IGRlbHRhX25zKQomIzQzO3sKJiM0MzsJczY0IHRpZV9kYXRhOwomIzQzOwlpbnQgcmM7CiYjNDM7CiYjNDM7CWlmIChXQVJOX09OKGRlbHRhX25zICZsdDs9IC1OU0VDX1BFUl9TRUMgfHwgZGVsdGFfbnMgJmd0Oz0gTlNFQ19QRVJfU0VDKSkKJiM0MzsJCXJldHVybiAtRVJBTkdFOwomIzQzOwomIzQzOwlndWFyZChtdXRleCkoJmFtcDt6bGRldi0mZ3Q7dGllX2xvY2spOwomIzQzOwomIzQzOwkvKiBXYWl0IGZvciBhbnkgcHJldmlvdXMgVElFIG9wZXJhdGlvbiB0byBjb21wbGV0ZSAqLwomIzQzOwlyYyA9IHpsMzA3M3hfcG9sbF96ZXJvX3U4KHpsZGV2LCBaTF9SRUdfRFBMTF9USUVfQ1RSTCwKJiM0MzsJCQkJICBaTF9EUExMX1RJRV9DVFJMX09QLAomIzQzOwkJCQkgIFpMX1BPTExfVElFX1dSX1RJTUVPVVRfVVMpOwomIzQzOwlpZiAocmMpCiYjNDM7CQlyZXR1cm4gcmM7CiYjNDM7CiYjNDM7CS8qIENvbnZlcnQgbnMgdG8gVElFIHVuaXRzICgwLjAxIHBzID0gMTBeLTE0IHMpICovCiYjNDM7CXRpZV9kYXRhID0gZGVsdGFfbnMgKiAxMDAwMDBMTDsKJiM0MzsKJiM0MzsJcmMgPSB6bDMwNzN4X3dyaXRlX3U0OCh6bGRldiwgWkxfUkVHX0RQTExfVElFX0RBVEEoY2gpLCB0aWVfZGF0YSk7CiYjNDM7CWlmIChyYykKJiM0MzsJCXJldHVybiByYzsKJiM0MzsKJiM0MzsJcmMgPSB6bDMwNzN4X3dyaXRlX3U4KHpsZGV2LCBaTF9SRUdfRFBMTF9USUVfQ1RSTF9NQVNLLCBCSVQoY2gpKTsKJiM0MzsJaWYgKHJjKQomIzQzOwkJcmV0dXJuIHJjOwomIzQzOwomIzQzOwlyZXR1cm4gemwzMDczeF93cml0ZV91OCh6bGRldiwgWkxfUkVHX0RQTExfVElFX0NUUkwsCiYjNDM7CQkJCVpMX0RQTExfVElFX0NUUkxfT1BfV1IpOwomIzQzO30KJiM0MzsKJiM0MzsvKioKJiM0MzsgKiB6bDMwNzN4X2NoYW5fcGhhc2Vfc3RlcCAtIGV4ZWN1dGUgb25lIG91dHB1dCBwaGFzZSBzdGVwIG9wZXJhdGlvbgomIzQzOyAqIEB6bGRldjogcG9pbnRlciB0byB6bDMwNzN4IGRldmljZQomIzQzOyAqIEBjaDogRFBMTCBjaGFubmVsIGluZGV4CiYjNDM7ICogQG91dF9tYXNrOiBiaXRtYXNrIG9mIG91dHB1dHMgdG8gc3RlcAomIzQzOyAqIEBzdGVwX2N5Y2xlczogcGhhc2Ugc3RlcCBpbiBzeW50aGVzaXplciBjbG9jayBjeWNsZXMKJiM0MzsgKiBAdG9kX3N0ZXA6IGFsc28gc3RlcCB0aGUgVG9EIGNvdW50ZXIKJiM0MzsgKgomIzQzOyAqIEFsbCBtYXNrZWQgb3V0cHV0cyBtdXN0IHVzZSBzeW50aGVzaXplcnMgb2YgdGhlIHNhbWUgZnJlcXVlbmN5IHNpbmNlCiYjNDM7ICogdGhlIHN0ZXAgdmFsdWUgaXMgaW4gc3ludGhlc2l6ZXIgY2xvY2sgY3ljbGVzLgomIzQzOyAqCiYjNDM7ICogUmV0dXJuOiAwIG9uIHN1Y2Nlc3MsICZsdDswIG9uIGVycm9yCiYjNDM7ICovCiYjNDM7aW50IHpsMzA3M3hfY2hhbl9waGFzZV9zdGVwKHN0cnVjdCB6bDMwNzN4X2RldiAqemxkZXYsIHU4IGNoLAomIzQzOwkJCSAgICB1MTYgb3V0X21hc2ssIHMzMiBzdGVwX2N5Y2xlcywKJiM0MzsJCQkgICAgYm9vbCB0b2Rfc3RlcCkKJiM0Mzt7CiYjNDM7CXU4IGN0cmw7CiYjNDM7CWludCByYzsKJiM0MzsKJiM0MzsJZ3VhcmQobXV0ZXgpKCZhbXA7emxkZXYtJmd0O3BoYXNlX3N0ZXBfbG9jayk7CiYjNDM7CiYjNDM7CS8qIFdhaXQgZm9yIGFueSBwcmV2aW91cyBwaGFzZSBzdGVwIG9wZXJhdGlvbiB0byBjb21wbGV0ZSAqLwomIzQzOwlyYyA9IHpsMzA3M3hfcG9sbF96ZXJvX3U4KHpsZGV2LCBaTF9SRUdfT1VUUFVUX1BIQVNFX1NURVBfQ1RSTCwKJiM0MzsJCQkJICBaTF9PVVRQVVRfUEhBU0VfU1RFUF9DVFJMX09QLAomIzQzOwkJCQkgIFpMX1BPTExfUEhBU0VfU1RFUF9USU1FT1VUX1VTKTsKJiM0MzsJaWYgKHJjKQomIzQzOwkJcmV0dXJuIHJjOwomIzQzOwomIzQzOwlyYyA9IHpsMzA3M3hfd3JpdGVfdTMyKHpsZGV2LCBaTF9SRUdfT1VUUFVUX1BIQVNFX1NURVBfREFUQSwKJiM0MzsJCQkgICAgICAgc3RlcF9jeWNsZXMpOwomIzQzOwlpZiAocmMpCiYjNDM7CQlyZXR1cm4gcmM7CiYjNDM7CiYjNDM7CXJjID0gemwzMDczeF93cml0ZV91MTYoemxkZXYsIFpMX1JFR19PVVRQVVRfUEhBU0VfU1RFUF9NQVNLLCBvdXRfbWFzayk7CiYjNDM7CWlmIChyYykKJiM0MzsJCXJldHVybiByYzsKJiM0MzsKJiM0MzsJcmMgPSB6bDMwNzN4X3dyaXRlX3U4KHpsZGV2LCBaTF9SRUdfT1VUUFVUX1BIQVNFX1NURVBfTlVNQkVSLCAxKTsKJiM0MzsJaWYgKHJjKQomIzQzOwkJcmV0dXJuIHJjOwomIzQzOwomIzQzOwljdHJsID0gRklFTERfUFJFUChaTF9PVVRQVVRfUEhBU0VfU1RFUF9DVFJMX0RQTEwsIGNoKSB8CiYjNDM7CSAgICAgICBGSUVMRF9QUkVQKFpMX09VVFBVVF9QSEFTRV9TVEVQX0NUUkxfT1AsCiYjNDM7CQkJICBaTF9PVVRQVVRfUEhBU0VfU1RFUF9DVFJMX09QX1dSSVRFKTsKJiM0MzsJaWYgKHRvZF9zdGVwKQomIzQzOwkJY3RybCB8PSBaTF9PVVRQVVRfUEhBU0VfU1RFUF9DVFJMX1RPRF9TVEVQOwomIzQzOwomIzQzOwlyZXR1cm4gemwzMDczeF93cml0ZV91OCh6bGRldiwgWkxfUkVHX09VVFBVVF9QSEFTRV9TVEVQX0NUUkwsIGN0cmwpOwomIzQzO30KJiM0MzsKIC8qKgogICogemwzMDczeF9jaGFuX3N0YXRlX3NldCAtIGNvbW1pdCBEUExMIGNoYW5uZWwgc3RhdGUgY2hhbmdlcyB0byBoYXJkd2FyZQogICogQHpsZGV2OiBwb2ludGVyIHRvIHpsMzA3M3hfZGV2IHN0cnVjdHVyZQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5oIGIvZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5oCmluZGV4IGRjOWM2ZDk1YmRlZTcuLjk5YzNiNzA4OGY2NzggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uaAomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmgKQEAgLTUsMTAgJiM0Mzs1LDEyIEBACiAKICNpbmNsdWRlICZsdDtsaW51eC9iaXRmaWVsZC5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L3N0ZGRlZi5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC90aW1lNjQuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC90eXBlcy5oJmd0OwogCiAjaW5jbHVkZSAmIzM0O3JlZ3MuaCYjMzQ7CiAKJiM0MztzdHJ1Y3QgcHRwX3N5c3RlbV90aW1lc3RhbXA7CiBzdHJ1Y3QgemwzMDczeF9kZXY7CiAKIC8qKgpAQCAtNDIsNiAmIzQzOzQ0LDIxIEBAIGludCB6bDMwNzN4X2NoYW5fc3RhdGVfc2V0KHN0cnVjdCB6bDMwNzN4X2RldiAqemxkZXYsIHU4IGluZGV4LAogaW50IHpsMzA3M3hfY2hhbl9zdGF0ZV91cGRhdGUoc3RydWN0IHpsMzA3M3hfZGV2ICp6bGRldiwgdTggaW5kZXgpOwogaW50IHpsMzA3M3hfY2hhbl9uY29fbW9kZV9zZXQoc3RydWN0IHpsMzA3M3hfZGV2ICp6bGRldiwgdTggaW5kZXgpOwogCiYjNDM7aW50IHpsMzA3M3hfY2hhbl90b2RfcmVhZHlfd2FpdChzdHJ1Y3QgemwzMDczeF9kZXYgKnpsZGV2LCB1OCBjaCk7CiYjNDM7aW50IHpsMzA3M3hfY2hhbl90b2RfcmVhZChzdHJ1Y3QgemwzMDczeF9kZXYgKnpsZGV2LCB1OCBjaCwKJiM0MzsJCQkgIGJvb2wgbmV4dF9oeiwgc3RydWN0IHRpbWVzcGVjNjQgKnRzLAomIzQzOwkJCSAgc3RydWN0IHB0cF9zeXN0ZW1fdGltZXN0YW1wICpzdHMpOwomIzQzO2ludCB6bDMwNzN4X2NoYW5fdG9kX3dyaXRlKHN0cnVjdCB6bDMwNzN4X2RldiAqemxkZXYsIHU4IGNoLAomIzQzOwkJCSAgIHN0cnVjdCB0aW1lc3BlYzY0IHRzKTsKJiM0MztpbnQgemwzMDczeF9jaGFuX3RvZF9hZGp1c3Qoc3RydWN0IHpsMzA3M3hfZGV2ICp6bGRldiwgdTggY2gsCiYjNDM7CQkJICAgIHN0cnVjdCB0aW1lc3BlYzY0IGRlbHRhKTsKJiM0MztpbnQgemwzMDczeF9jaGFuX3BoYXNlX3N0ZXAoc3RydWN0IHpsMzA3M3hfZGV2ICp6bGRldiwgdTggY2gsCiYjNDM7CQkJICAgIHUxNiBvdXRfbWFzaywgczMyIHN0ZXBfY3ljbGVzLCBib29sIHRvZF9zdGVwKTsKJiM0MzsKJiM0MztpbnQgemwzMDczeF9jaGFuX2RmX29mZnNldF9zZXQoc3RydWN0IHpsMzA3M3hfZGV2ICp6bGRldiwgdTggY2gsIHM2NCBvZmZzZXQpOwomIzQzOwomIzQzO2ludCB6bDMwNzN4X2NoYW5fdGllX3dyaXRlKHN0cnVjdCB6bDMwNzN4X2RldiAqemxkZXYsIHU4IGNoLCBzNjQgZGVsdGFfbnMpOwomIzQzOwogLyoqCiAgKiB6bDMwNzN4X2NoYW5fZGZfb2Zmc2V0X2dldCAtIGdldCBjYWNoZWQgZGZfb2Zmc2V0IHZzIHRyYWNrZWQgcmVmZXJlbmNlCiAgKiBAY2hhbjogcG9pbnRlciB0byBjaGFubmVsIHN0YXRlCkBAIC0yMDAsNiAmIzQzOzIxNywyMSBAQCBzdGF0aWMgaW5saW5lIGJvb2wgemwzMDczeF9jaGFuX21vZGVfaXNfcmVmbG9jayhjb25zdCBzdHJ1Y3QgemwzMDczeF9jaGFuICpjaGFuKQogCXJldHVybiB6bDMwNzN4X2NoYW5fbW9kZV9nZXQoY2hhbikgPT0gWkxfRFBMTF9NT0RFX1JFRlNFTF9NT0RFX1JFRkxPQ0s7CiB9CiAKJiM0MzsvKioKJiM0MzsgKiB6bDMwNzN4X2NoYW5fbW9kZV9zdXBwb3J0c190aWUgLSBjaGVjayBpZiBjaGFubmVsIG1vZGUgc3VwcG9ydHMgVElFIHdyaXRlCiYjNDM7ICogQGNoYW46IHBvaW50ZXIgdG8gY2hhbm5lbCBzdGF0ZQomIzQzOyAqCiYjNDM7ICogVElFIHdyaXRlIGlzIHN1cHBvcnRlZCBpbiBBVVRPIGFuZCBSRUZMT0NLIG1vZGVzIHJlZ2FyZGxlc3Mgb2YgbG9jayBzdGF0ZS4KJiM0MzsgKgomIzQzOyAqIFJldHVybjogdHJ1ZSBpZiBUSUUgd3JpdGUgaXMgc3VwcG9ydGVkLCBmYWxzZSBvdGhlcndpc2UKJiM0MzsgKi8KJiM0MztzdGF0aWMgaW5saW5lIGJvb2wKJiM0Mzt6bDMwNzN4X2NoYW5fbW9kZV9zdXBwb3J0c190aWUoY29uc3Qgc3RydWN0IHpsMzA3M3hfY2hhbiAqY2hhbikKJiM0Mzt7CiYjNDM7CXJldHVybiB6bDMwNzN4X2NoYW5fbW9kZV9pc19hdXRvKGNoYW4pIHx8CiYjNDM7CQl6bDMwNzN4X2NoYW5fbW9kZV9pc19yZWZsb2NrKGNoYW4pOwomIzQzO30KJiM0MzsKIC8qKgogICogemwzMDczeF9jaGFuX2lzX2hvX3JlYWR5IC0gY2hlY2sgaWYgaG9sZG92ZXIgaXMgcmVhZHkKICAqIEBjaGFuOiBwb2ludGVyIHRvIGNoYW5uZWwgc3RhdGUKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZHBsbC96bDMwNzN4L2NvcmUuYyBiL2RyaXZlcnMvZHBsbC96bDMwNzN4L2NvcmUuYwppbmRleCA1YjJkNzdmMmMyMjg4Li4yMzBkZjA4ZTI3Y2QxIDEwMDY0NAotLS0gYS9kcml2ZXJzL2RwbGwvemwzMDczeC9jb3JlLmMKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9kcGxsL3psMzA3M3gvY29yZS5jCkBAIC0zMjIsNyAmIzQzOzMyMiw3IEBAIGludCB6bDMwNzN4X3dyaXRlX3U0OChzdHJ1Y3QgemwzMDczeF9kZXYgKnpsZGV2LCB1bnNpZ25lZCBpbnQgcmVnLCB1NjQgdmFsKQogaW50IHpsMzA3M3hfcG9sbF96ZXJvX3U4KHN0cnVjdCB6bDMwNzN4X2RldiAqemxkZXYsIHVuc2lnbmVkIGludCByZWcsCiAJCQkgdTggbWFzaywgdW5zaWduZWQgaW50IHRpbWVvdXRfdXMpCiB7Ci0jZGVmaW5lIFpMX1BPTExfU0xFRVBfVVMgMTAKJiM0MzsJdW5zaWduZWQgaW50IHNsZWVwX3VzID0gdGltZW91dF91cyAvIDUwOwogCXVuc2lnbmVkIGludCB2YWw7CiAKIAkvKiBDaGVjayB0aGUgcmVnaXN0ZXIgaXMgOGJpdCAqLwpAQCAtMzM2LDcgJiM0MzszMzYsNyBAQCBpbnQgemwzMDczeF9wb2xsX3plcm9fdTgoc3RydWN0IHpsMzA3M3hfZGV2ICp6bGRldiwgdW5zaWduZWQgaW50IHJlZywKIAlyZWcgPSBaTF9SRUdfQUREUihyZWcpICYjNDM7IFpMX1JBTkdFX09GRlNFVDsKIAogCXJldHVybiByZWdtYXBfcmVhZF9wb2xsX3RpbWVvdXQoemxkZXYtJmd0O3JlZ21hcCwgcmVnLCB2YWwsICEodmFsICZhbXA7IG1hc2spLAotCQkJCQlaTF9QT0xMX1NMRUVQX1VTLCB0aW1lb3V0X3VzKTsKJiM0MzsJCQkJCXNsZWVwX3VzLCB0aW1lb3V0X3VzKTsKIH0KIAogaW50IHpsMzA3M3hfbWJfb3Aoc3RydWN0IHpsMzA3M3hfZGV2ICp6bGRldiwgdW5zaWduZWQgaW50IG9wX3JlZywgdTggb3BfdmFsLApAQCAtNTExLDYgJiM0Mzs1MTEsMTEgQEAgemwzMDczeF9kZXZfc3RhdGVfZmV0Y2goc3RydWN0IHpsMzA3M3hfZGV2ICp6bGRldikKIAlpbnQgcmM7CiAJdTggaTsKIAomIzQzOwlyYyA9IHpsMzA3M3hfcmVhZF91MTYoemxkZXYsIFpMX1JFR19PVVRQVVRfU1RFUF9USU1FX01BU0ssCiYjNDM7CQkJICAgICAgJmFtcDt6bGRldi0mZ3Q7b3V0X3N0ZXBfdGltZV9tYXNrKTsKJiM0MzsJaWYgKHJjKQomIzQzOwkJcmV0dXJuIHJjOwomIzQzOwogCWZvciAoaSA9IDA7IGkgJmx0OyBaTDMwNzNYX05VTV9SRUZTOyBpJiM0MzsmIzQzOykgewogCQlyYyA9IHpsMzA3M3hfcmVmX3N0YXRlX2ZldGNoKHpsZGV2LCBpKTsKIAkJaWYgKHJjKSB7CkBAIC0xMDM0LDYgJiM0MzsxMDM5LDE0IEBAIGludCB6bDMwNzN4X2Rldl9wcm9iZShzdHJ1Y3QgemwzMDczeF9kZXYgKnpsZGV2KQogCSAqIGFuZC9vciBwb2xscyBhcmUgcmVxdWlyZWQgdG8gYmUgZG9uZSBhdG9taWNhbGx5LgogCSAqLwogCXJjID0gZGV2bV9tdXRleF9pbml0KHpsZGV2LSZndDtkZXYsICZhbXA7emxkZXYtJmd0O211bHRpb3BfbG9jayk7CiYjNDM7CWlmIChyYykKJiM0MzsJCXJldHVybiBkZXZfZXJyX3Byb2JlKHpsZGV2LSZndDtkZXYsIHJjLAomIzQzOwkJCQkgICAgICYjMzQ7RmFpbGVkIHRvIGluaXRpYWxpemUgbXV0ZXhcbiYjMzQ7KTsKJiM0MzsJcmMgPSBkZXZtX211dGV4X2luaXQoemxkZXYtJmd0O2RldiwgJmFtcDt6bGRldi0mZ3Q7cGhhc2Vfc3RlcF9sb2NrKTsKJiM0MzsJaWYgKHJjKQomIzQzOwkJcmV0dXJuIGRldl9lcnJfcHJvYmUoemxkZXYtJmd0O2RldiwgcmMsCiYjNDM7CQkJCSAgICAgJiMzNDtGYWlsZWQgdG8gaW5pdGlhbGl6ZSBtdXRleFxuJiMzNDspOwomIzQzOwlyYyA9IGRldm1fbXV0ZXhfaW5pdCh6bGRldi0mZ3Q7ZGV2LCAmYW1wO3psZGV2LSZndDt0aWVfbG9jayk7CiAJaWYgKHJjKQogCQlyZXR1cm4gZGV2X2Vycl9wcm9iZSh6bGRldi0mZ3Q7ZGV2LCByYywKIAkJCQkgICAgICYjMzQ7RmFpbGVkIHRvIGluaXRpYWxpemUgbXV0ZXhcbiYjMzQ7KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZHBsbC96bDMwNzN4L2NvcmUuaCBiL2RyaXZlcnMvZHBsbC96bDMwNzN4L2NvcmUuaAppbmRleCA3OGRjMjA4ZjNlZWEyLi42N2MxMGUyNTk1MTE4IDEwMDY0NAotLS0gYS9kcml2ZXJzL2RwbGwvemwzMDczeC9jb3JlLmgKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9kcGxsL3psMzA3M3gvY29yZS5oCkBAIC0yNiw2ICYjNDM7MjYsMTAgQEAgc3RydWN0IHpsMzA3M3hfZHBsbDsKICNkZWZpbmUgWkxfUE9MTF9IV1JFR19USU1FT1VUX1VTCSg1MCAqIFVTRUNfUEVSX01TRUMpCiAjZGVmaW5lIFpMX1BPTExfTUJfVElNRU9VVF9VUwkJKDMwICogVVNFQ19QRVJfTVNFQykKICNkZWZpbmUgWkxfUE9MTF9QSEFTRV9FUlJfVElNRU9VVF9VUwkoNTAgKiBVU0VDX1BFUl9NU0VDKQomIzQzOyNkZWZpbmUgWkxfUE9MTF9QSEFTRV9TVEVQX1RJTUVPVVRfVVMJKDMwMDAgKiBVU0VDX1BFUl9NU0VDKQomIzQzOyNkZWZpbmUgWkxfUE9MTF9USUVfV1JfVElNRU9VVF9VUwkoMTAwMCAqIFVTRUNfUEVSX01TRUMpCiYjNDM7I2RlZmluZSBaTF9QT0xMX1RPRF9SRF9USU1FT1VUX1VTCSgzMCAqIFVTRUNfUEVSX01TRUMpCiYjNDM7I2RlZmluZSBaTF9QT0xMX1RPRF9XUl9USU1FT1VUX1VTCSgxMDAwICogVVNFQ19QRVJfTVNFQykKIAogZW51bSB6bDMwNzN4X2ZsYWdzIHsKIAlaTDMwNzNYX0ZMQUdfUkVGX1BIQVNFX0NPTVBfMzJfQklULApAQCAtNTUsNiAmIzQzOzU5LDggQEAgc3RydWN0IHpsMzA3M3hfY2hpcF9pbmZvIHsKICAqIEByZWdtYXA6IHJlZ21hcCB0byBhY2Nlc3MgZGV2aWNlIHJlZ2lzdGVycwogICogQGluZm86IGRldGVjdGVkIGNoaXAgaW5mbwogICogQG11bHRpb3BfbG9jazogdG8gc2VyaWFsaXplIG11bHRpcGxlIHJlZ2lzdGVyIG9wZXJhdGlvbnMKJiM0MzsgKiBAdGllX2xvY2s6IHRvIHNlcmlhbGl6ZSBUSUUgd3JpdGUgb3BlcmF0aW9ucwomIzQzOyAqIEBwaGFzZV9zdGVwX2xvY2s6IHRvIHNlcmlhbGl6ZSBvdXRwdXQgcGhhc2Ugc3RlcCBvcGVyYXRpb25zCiAgKiBAcmVmOiBhcnJheSBvZiBpbnB1dCByZWZlcmVuY2VzJiMzOTsgaW52YXJpYW50cwogICogQG91dDogYXJyYXkgb2Ygb3V0cyYjMzk7IGludmFyaWFudHMKICAqIEBzeW50aDogYXJyYXkgb2Ygc3ludGhzJiMzOTsgaW52YXJpYW50cwpAQCAtNjMsNiAmIzQzOzY5LDcgQEAgc3RydWN0IHpsMzA3M3hfY2hpcF9pbmZvIHsKICAqIEBrd29ya2VyOiB0aHJlYWQgZm9yIHBlcmlvZGljIHdvcmsKICAqIEB3b3JrOiBwZXJpb2RpYyB3b3JrCiAgKiBAY2xvY2tfaWQ6IGNsb2NrIGlkIG9mIHRoZSBkZXZpY2UKJiM0MzsgKiBAb3V0X3N0ZXBfdGltZV9tYXNrOiBvdXRwdXQgc3RlcC10aW1lIG1hc2sgKGRldmljZS1nbG9iYWwpCiAgKiBAcGhhc2VfYXZnX2ZhY3RvcjogcGhhc2Ugb2Zmc2V0IG1lYXN1cmVtZW50IGF2ZXJhZ2luZyBmYWN0b3IKICAqIEBmcmVxX21vbml0b3I6IGlzIGZyZXF1ZW5jeSBtb25pdG9yIGVuYWJsZWQKICAqLwpAQCAtNzEsNiAmIzQzOzc4LDggQEAgc3RydWN0IHpsMzA3M3hfZGV2IHsKIAlzdHJ1Y3QgcmVnbWFwCQkJKnJlZ21hcDsKIAljb25zdCBzdHJ1Y3QgemwzMDczeF9jaGlwX2luZm8JKmluZm87CiAJc3RydWN0IG11dGV4CQkJbXVsdGlvcF9sb2NrOwomIzQzOwlzdHJ1Y3QgbXV0ZXgJCQl0aWVfbG9jazsKJiM0MzsJc3RydWN0IG11dGV4CQkJcGhhc2Vfc3RlcF9sb2NrOwogCiAJLyogSW52YXJpYW50cyAqLwogCXN0cnVjdCB6bDMwNzN4X3JlZglyZWZbWkwzMDczWF9OVU1fUkVGU107CkBAIC04Nyw2ICYjNDM7OTYsNyBAQCBzdHJ1Y3QgemwzMDczeF9kZXYgewogCiAJLyogUGVyLWNoaXAgcGFyYW1ldGVycyAqLwogCXU2NAkJCWNsb2NrX2lkOwomIzQzOwl1MTYJCQlvdXRfc3RlcF90aW1lX21hc2s7CiAJdTgJCQlwaGFzZV9hdmdfZmFjdG9yOwogCWJvb2wJCQlmcmVxX21vbml0b3I7CiB9OwpAQCAtMzA4LDYgJiM0MzszMTgsMTkgQEAgemwzMDczeF9kZXZfb3V0X2lzX2VuYWJsZWQoc3RydWN0IHpsMzA3M3hfZGV2ICp6bGRldiwgdTggaW5kZXgpCiAJcmV0dXJuIHpsMzA3M3hfc3ludGhfaXNfZW5hYmxlZChzeW50aCkgJmFtcDsmYW1wOyB6bDMwNzN4X291dF9pc19lbmFibGVkKG91dCk7CiB9CiAKJiM0MzsvKioKJiM0MzsgKiB6bDMwNzN4X2Rldl9vdXRfaXNfc3RlcHBlZCAtIGNoZWNrIGlmIG91dHB1dCBpcyBpbiBzdGVwLXRpbWUgbWFzawomIzQzOyAqIEB6bGRldjogcG9pbnRlciB0byB6bDMwNzN4IGRldmljZQomIzQzOyAqIEBpbmRleDogb3V0cHV0IGluZGV4CiYjNDM7ICoKJiM0MzsgKiBSZXR1cm46IHRydWUgaWYgb3V0cHV0IGlzIGFmZmVjdGVkIGJ5IHN0ZXAtdGltZSBvcGVyYXRpb25zCiYjNDM7ICovCiYjNDM7c3RhdGljIGlubGluZSBib29sCiYjNDM7emwzMDczeF9kZXZfb3V0X2lzX3N0ZXBwZWQoc3RydWN0IHpsMzA3M3hfZGV2ICp6bGRldiwgdTggaW5kZXgpCiYjNDM7ewomIzQzOwlyZXR1cm4gISEoemxkZXYtJmd0O291dF9zdGVwX3RpbWVfbWFzayAmYW1wOyBCSVQoaW5kZXgpKTsKJiM0Mzt9CiYjNDM7CiAvKioKICAqIHpsMzA3M3hfZGV2X291dF9kcGxsX2dldCAtIGdldCBEUExMIElEIHRoZSBvdXRwdXQgaXMgZHJpdmVuIGJ5CiAgKiBAemxkZXY6IHBvaW50ZXIgdG8gemwzMDczeCBkZXZpY2UKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZHBsbC96bDMwNzN4L2RwbGwuYyBiL2RyaXZlcnMvZHBsbC96bDMwNzN4L2RwbGwuYwppbmRleCAwNDg4YWU2YWM0ODZjLi44MzAxYWQzNDM2NThhIDEwMDY0NAotLS0gYS9kcml2ZXJzL2RwbGwvemwzMDczeC9kcGxsLmMKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9kcGxsL3psMzA3M3gvZHBsbC5jCkBAIC0yLDYgJiM0MzsyLDcgQEAKIAogI2luY2x1ZGUgJmx0O2xpbnV4L2JpdHMuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9iaXRmaWVsZC5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9jbGVhbnVwLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvYnVnLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvY29udGFpbmVyX29mLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvZGV2X3ByaW50ay5oJmd0OwpAQCAtMTMsNiAmIzQzOzE0LDcgQEAKICNpbmNsdWRlICZsdDtsaW51eC9uZXRsaW5rLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvcGxhdGZvcm1fZGV2aWNlLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvcHJvcGVydHkuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvcHRwX2Nsb2NrX2tlcm5lbC5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L3NsYWIuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9zcHJpbnRmLmgmZ3Q7CiAKQEAgLTIyNzUsNDUgJiM0MzsyMjc3LDM4NCBAQCB6bDMwNzN4X2RwbGxfaW5pdF9maW5lX3BoYXNlX2FkanVzdChzdHJ1Y3QgemwzMDczeF9kZXYgKnpsZGV2KQogCXJldHVybiB6bDMwNzN4X3dyaXRlX3U4KHpsZGV2LCBaTF9SRUdfU1lOVEhfUEhBU0VfU0hJRlRfQ1RSTCwgMHgwMSk7CiB9CiAKJiM0MzsvKiBNYXhpbXVtIGZyZXF1ZW5jeSBhZGp1c3RtZW50OiAmIzQzOy0xJSBvZiBub21pbmFsIGluIHBwYiAqLwomIzQzOyNkZWZpbmUgWkwzMDczWF9EUExMX1BUUF9NQVhfQURKCTEwMDAwMDAwCiYjNDM7CiAvKioKLSAqIHpsMzA3M3hfZHBsbF9hbGxvYyAtIGFsbG9jYXRlIERQTEwgZGV2aWNlCi0gKiBAemxkZXY6IHBvaW50ZXIgdG8gemwzMDczeCBkZXZpY2UKLSAqIEBjaDogRFBMTCBjaGFubmVsIG51bWJlcgomIzQzOyAqIHpsMzA3M3hfZHBsbF9wdHBfZ2V0dGltZXg2NCAtIHJlYWQgY3VycmVudCB0aW1lIGZyb20gVG9EIGNvdW50ZXJzCiYjNDM7ICogQGluZm86IFBUUCBjbG9jayBpbmZvCiYjNDM7ICogQHRzOiB0aW1lc3BlYyB0byBzdG9yZSBjdXJyZW50IHRpbWUKJiM0MzsgKiBAc3RzOiBvcHRpb25hbCBzeXN0ZW0gdGltZXN0YW1wIHBhaXIgZm9yIGNyb3NzLXRpbWVzdGFtcGluZwogICoKLSAqIEFsbG9jYXRlcyBEUExMIGRldmljZSBzdHJ1Y3R1cmUgZm9yIGdpdmVuIERQTEwgY2hhbm5lbC4KJiM0MzsgKiBSZXR1cm46IDAgb24gc3VjY2VzcywgJmx0OzAgb24gZXJyb3IKJiM0MzsgKi8KJiM0MztzdGF0aWMgaW50IHpsMzA3M3hfZHBsbF9wdHBfZ2V0dGltZXg2NChzdHJ1Y3QgcHRwX2Nsb2NrX2luZm8gKmluZm8sCiYjNDM7CQkJCSAgICAgICBzdHJ1Y3QgdGltZXNwZWM2NCAqdHMsCiYjNDM7CQkJCSAgICAgICBzdHJ1Y3QgcHRwX3N5c3RlbV90aW1lc3RhbXAgKnN0cykKJiM0Mzt7CiYjNDM7CXN0cnVjdCB6bDMwNzN4X2RwbGwgKnpsZHBsbCA9IGNvbnRhaW5lcl9vZihpbmZvLCBzdHJ1Y3QgemwzMDczeF9kcGxsLAomIzQzOwkJCQkJCSAgIHB0cF9pbmZvKTsKJiM0MzsKJiM0MzsJZ3VhcmQobXV0ZXgpKCZhbXA7emxkcGxsLSZndDtsb2NrKTsKJiM0MzsKJiM0MzsJcmV0dXJuIHpsMzA3M3hfY2hhbl90b2RfcmVhZCh6bGRwbGwtJmd0O2RldiwgemxkcGxsLSZndDtpZCwgZmFsc2UsIHRzLCBzdHMpOwomIzQzO30KJiM0MzsKJiM0MzsvKioKJiM0MzsgKiB6bDMwNzN4X2RwbGxfcHRwX3NldHRpbWU2NCAtIHNldCBUb0QgY291bnRlcnMgdG8gZ2l2ZW4gdGltZQomIzQzOyAqIEBpbmZvOiBQVFAgY2xvY2sgaW5mbwomIzQzOyAqIEB0czogdGltZXNwZWMgd2l0aCB0aW1lIHRvIHNldAogICoKLSAqIFJldHVybjogcG9pbnRlciB0byBEUExMIGRldmljZSBvbiBzdWNjZXNzLCBlcnJvciBwb2ludGVyIG9uIGVycm9yCiYjNDM7ICogUmV0dXJuOiAwIG9uIHN1Y2Nlc3MsICZsdDswIG9uIGVycm9yCiAgKi8KLXN0cnVjdCB6bDMwNzN4X2RwbGwgKgotemwzMDczeF9kcGxsX2FsbG9jKHN0cnVjdCB6bDMwNzN4X2RldiAqemxkZXYsIHU4IGNoKQomIzQzO3N0YXRpYyBpbnQgemwzMDczeF9kcGxsX3B0cF9zZXR0aW1lNjQoc3RydWN0IHB0cF9jbG9ja19pbmZvICppbmZvLAomIzQzOwkJCQkgICAgICBjb25zdCBzdHJ1Y3QgdGltZXNwZWM2NCAqdHMpCiB7Ci0Jc3RydWN0IHpsMzA3M3hfZHBsbCAqemxkcGxsOwomIzQzOwlzdHJ1Y3QgemwzMDczeF9kcGxsICp6bGRwbGwgPSBjb250YWluZXJfb2YoaW5mbywgc3RydWN0IHpsMzA3M3hfZHBsbCwKJiM0MzsJCQkJCQkgICBwdHBfaW5mbyk7CiAKLQl6bGRwbGwgPSBremFsbG9jX29iaigqemxkcGxsKTsKLQlpZiAoIXpsZHBsbCkKLQkJcmV0dXJuIEVSUl9QVFIoLUVOT01FTSk7CiYjNDM7CWd1YXJkKG11dGV4KSgmYW1wO3psZHBsbC0mZ3Q7bG9jayk7CiAKLQl6bGRwbGwtJmd0O2RldiA9IHpsZGV2OwotCXpsZHBsbC0mZ3Q7aWQgPSBjaDsKLQltdXRleF9pbml0KCZhbXA7emxkcGxsLSZndDtsb2NrKTsKLQlJTklUX0xJU1RfSEVBRCgmYW1wO3psZHBsbC0mZ3Q7cGlucyk7CiYjNDM7CXJldHVybiB6bDMwNzN4X2NoYW5fdG9kX3dyaXRlKHpsZHBsbC0mZ3Q7ZGV2LCB6bGRwbGwtJmd0O2lkLCAqdHMpOwomIzQzO30KIAotCXJldHVybiB6bGRwbGw7CiYjNDM7LyoqCiYjNDM7ICogemwzMDczeF9kcGxsX3B0cF9hZGp0aW1lX3BoYXNlX3N0ZXAgLSBhZGp1c3Qgc3ViLXNlY29uZCB0aW1lIHZpYSBwaGFzZSBzdGVwCiYjNDM7ICogQHpsZHBsbDogRFBMTCBjaGFubmVsCiYjNDM7ICogQGRlbHRhOiB0aW1lIGFkanVzdG1lbnQgaW4gbmFub3NlY29uZHMgKG11c3QgYmUgd2l0aGluICgtTlNFQ19QRVJfU0VDLAomIzQzOyAqICAgICAgICAgTlNFQ19QRVJfU0VDKSkKJiM0MzsgKgomIzQzOyAqIFVzZXMgdGhlIG91dHB1dCBwaGFzZSBzdGVwIG1lY2hhbmlzbSB3aXRoIHRvZF9zdGVwPTEgdG8gYWRqdXN0IGJvdGgKJiM0MzsgKiB0aGUgb3V0cHV0IGNsb2NrIHBoYXNlIGFuZCB0aGUgVG9EIGNvdW50ZXIgc2ltdWx0YW5lb3VzbHkuIFRoaXMga2VlcHMKJiM0MzsgKiBvdXRwdXRzIGFuZCBUb0QgY29oZXJlbnQuIE9ubHkgdmFsaWQgZm9yIE5DTy4KJiM0MzsgKgomIzQzOyAqIE91dHB1dHMgYXJlIGdyb3VwZWQgYnkgc3ludGhlc2l6ZXIgc2luY2UgdGhlIHBoYXNlIHN0ZXAgdmFsdWUgaXMgaW4KJiM0MzsgKiBzeW50aGVzaXplciBjbG9jayBjeWNsZXMuIFRoZSBmaXJzdCBzeW50aCBncm91cCB3aXRoIGVuYWJsZWQgb3V0cHV0cwomIzQzOyAqIHVzZXMgdG9kX3N0ZXAgdG8gYWRqdXN0IGJvdGggb3V0cHV0cyBhbmQgdGhlIFRvRCBjb3VudGVyLiBSZW1haW5pbmcKJiM0MzsgKiBncm91cHMgc3RlcCBvdXRwdXRzIG9ubHkuIElmIG5vIHN5bnRoIGhhcyBlbmFibGVkIG91dHB1dHMsIHRoZSBUb0QKJiM0MzsgKiBjb3VudGVyIGlzIHN0ZXBwZWQgYWxvbmUgdXNpbmcgYW4gZW1wdHkgb3V0cHV0IG1hc2sgKHRoZSBGVyB1c2VzCiYjNDM7ICogdGhlIGZpcnN0IGVuYWJsZWQgc3ludGgmIzM5O3MgcGVyaW9kIGZvciB0aGUgY29udmVyc2lvbikuCiYjNDM7ICoKJiM0MzsgKiBSZXR1cm46CiYjNDM7ICogKiAlMAkJCS0gc3VjY2VzcyAob3IgcGFydGlhbCBzdWNjZXNzIGlmIGEgbGF0ZXIgc3ludGggZ3JvdXAKJiM0MzsgKgkJCSAgZmFpbGVkIGFmdGVyIHRoZSBmaXJzdCB3YXMgYWxyZWFkeSBzdGVwcGVkKQomIzQzOyAqICogJS1FT1BOT1RTVVBQCS0gbm8gc3ludGhzIGF2YWlsYWJsZQomIzQzOyAqICogbmVnYXRpdmUJCS0gZXJyb3IKJiM0MzsgKi8KJiM0MztzdGF0aWMgaW50IHpsMzA3M3hfZHBsbF9wdHBfYWRqdGltZV9waGFzZV9zdGVwKHN0cnVjdCB6bDMwNzN4X2RwbGwgKnpsZHBsbCwKJiM0MzsJCQkJCSAgICAgICBzNjQgZGVsdGEpCiYjNDM7ewomIzQzOwl1MTYgc3ludGhfbWFza1taTDMwNzNYX05VTV9TWU5USFNdID0ge307CiYjNDM7CXN0cnVjdCB6bDMwNzN4X2RldiAqemxkZXYgPSB6bGRwbGwtJmd0O2RldjsKJiM0MzsJY29uc3Qgc3RydWN0IHpsMzA3M3hfc3ludGggKnN5bnRoOwomIzQzOwlzdHJ1Y3QgemwzMDczeF9kcGxsX3BpbiAqcGluOwomIzQzOwl1MzIgZmlyc3Rfc3ludGhfZnJlcSA9IDA7CiYjNDM7CWJvb2wgdG9kX3N0ZXBwZWQgPSBmYWxzZTsKJiM0MzsJczMyIHN0ZXBfY3ljbGVzOwomIzQzOwl1MzIgc3ludGhfZnJlcTsKJiM0MzsJaW50IHJjOwomIzQzOwl1OCBpOwomIzQzOwomIzQzOwkvKiBCdWlsZCBwZXItc3ludGggb3V0cHV0IG1hc2tzIGZyb20gcmVnaXN0ZXJlZCBvdXRwdXQgcGlucyAqLwomIzQzOwlsaXN0X2Zvcl9lYWNoX2VudHJ5KHBpbiwgJmFtcDt6bGRwbGwtJmd0O3BpbnMsIGxpc3QpIHsKJiM0MzsJCXU4IG91dF9pZCwgc3ludGhfaWQ7CiYjNDM7CiYjNDM7CQlpZiAoemwzMDczeF9kcGxsX2lzX2lucHV0X3BpbihwaW4pKQomIzQzOwkJCWNvbnRpbnVlOwomIzQzOwomIzQzOwkJb3V0X2lkID0gemwzMDczeF9vdXRwdXRfcGluX291dF9nZXQocGluLSZndDtpZCk7CiYjNDM7CiYjNDM7CQlpZiAoIXpsMzA3M3hfZGV2X291dF9pc19zdGVwcGVkKHpsZGV2LCBvdXRfaWQpKQomIzQzOwkJCWNvbnRpbnVlOwomIzQzOwomIzQzOwkJc3ludGhfaWQgPSB6bDMwNzN4X2Rldl9vdXRfc3ludGhfZ2V0KHpsZGV2LCBvdXRfaWQpOwomIzQzOwkJaWYgKHN5bnRoX2lkICZndDs9IFpMMzA3M1hfTlVNX1NZTlRIUykgewomIzQzOwkJCWRldl93YXJuKHpsZGV2LSZndDtkZXYsICYjMzQ7VW5leHBlY3RlZCBzeW50aCBpZCBmb3IgT1VUJXVcbiYjMzQ7LAomIzQzOwkJCQkgb3V0X2lkKTsKJiM0MzsJCQljb250aW51ZTsKJiM0MzsJCX0KJiM0MzsJCXN5bnRoX21hc2tbc3ludGhfaWRdIHw9IEJJVChvdXRfaWQpOwomIzQzOwl9CiYjNDM7CiYjNDM7CS8qIFByb2Nlc3MgZWFjaCBzeW50aCBncm91cCAqLwomIzQzOwlmb3IgKGkgPSAwOyBpICZsdDsgWkwzMDczWF9OVU1fU1lOVEhTOyBpJiM0MzsmIzQzOykgewomIzQzOwkJc3ludGggPSB6bDMwNzN4X3N5bnRoX3N0YXRlX2dldCh6bGRldiwgaSk7CiYjNDM7CQlpZiAoIXpsMzA3M3hfc3ludGhfaXNfZW5hYmxlZChzeW50aCkgfHwKJiM0MzsJCSAgICB6bDMwNzN4X3N5bnRoX2RwbGxfZ2V0KHN5bnRoKSAhPSB6bGRwbGwtJmd0O2lkKQomIzQzOwkJCWNvbnRpbnVlOwomIzQzOwomIzQzOwkJc3ludGhfZnJlcSA9IHpsMzA3M3hfc3ludGhfZnJlcV9nZXQoc3ludGgpOwomIzQzOwomIzQzOwkJLyogUmVtZW1iZXIgZmlyc3QgZW5hYmxlZCBzeW50aCBmcmVxIGZvciBUb0Qtb25seSBmYWxsYmFjayAqLwomIzQzOwkJaWYgKCFmaXJzdF9zeW50aF9mcmVxKQomIzQzOwkJCWZpcnN0X3N5bnRoX2ZyZXEgPSBzeW50aF9mcmVxOwomIzQzOwomIzQzOwkJaWYgKCFzeW50aF9tYXNrW2ldKQomIzQzOwkJCWNvbnRpbnVlOwomIzQzOwomIzQzOwkJLyogU2FmZSBmb3IgczMyOiBtYXggc3ludGggZnJlcSBpcyA3NTAgTUh6ICovCiYjNDM7CQlzdGVwX2N5Y2xlcyA9IGRpdl9zNjQoZGVsdGEgKiBzeW50aF9mcmVxLCBOU0VDX1BFUl9TRUMpOwomIzQzOwomIzQzOwkJcmMgPSB6bDMwNzN4X2NoYW5fcGhhc2Vfc3RlcCh6bGRldiwgemxkcGxsLSZndDtpZCwKJiM0MzsJCQkJCSAgICAgc3ludGhfbWFza1tpXSwgc3RlcF9jeWNsZXMsCiYjNDM7CQkJCQkgICAgICF0b2Rfc3RlcHBlZCk7CiYjNDM7CQlpZiAocmMpIHsKJiM0MzsJCQlpZiAodG9kX3N0ZXBwZWQpIHsKJiM0MzsJCQkJZGV2X3dhcm4oemxkZXYtJmd0O2RldiwKJiM0MzsJCQkJCSAmIzM0O1BhcnRpYWwgcGhhc2Ugc3RlcCBmYWlsdXJlXG4mIzM0Oyk7CiYjNDM7CQkJCXJldHVybiAwOwomIzQzOwkJCX0KJiM0MzsJCQlyZXR1cm4gcmM7CiYjNDM7CQl9CiYjNDM7CQl0b2Rfc3RlcHBlZCA9IHRydWU7CiYjNDM7CX0KJiM0MzsKJiM0MzsJaWYgKCFmaXJzdF9zeW50aF9mcmVxKQomIzQzOwkJcmV0dXJuIC1FT1BOT1RTVVBQOwomIzQzOwomIzQzOwkvKiBObyBlbmFibGVkIG91dHB1dHMgZm91bmQ7IHN0ZXAgVG9EIGNvdW50ZXIgb25seSB1c2luZyB0aGUKJiM0MzsJICogZmlyc3QgZW5hYmxlZCBzeW50aCYjMzk7cyBwZXJpb2QgKGVtcHR5IG91dHB1dCBtYXNrKS4KJiM0MzsJICovCiYjNDM7CWlmICghdG9kX3N0ZXBwZWQpIHsKJiM0MzsJCXN0ZXBfY3ljbGVzID0gZGl2X3M2NChkZWx0YSAqIGZpcnN0X3N5bnRoX2ZyZXEsIE5TRUNfUEVSX1NFQyk7CiYjNDM7CQlyZXR1cm4gemwzMDczeF9jaGFuX3BoYXNlX3N0ZXAoemxkZXYsIHpsZHBsbC0mZ3Q7aWQsIDAsCiYjNDM7CQkJCQkgICAgICAgc3RlcF9jeWNsZXMsIHRydWUpOwomIzQzOwl9CiYjNDM7CiYjNDM7CXJldHVybiAwOwogfQogCiAvKioKLSAqIHpsMzA3M3hfZHBsbF9mcmVlIC0gZnJlZSBEUExMIGRldmljZQotICogQHpsZHBsbDogcG9pbnRlciB0byB6bDMwNzN4X2RwbGwgc3RydWN0dXJlCiYjNDM7ICogemwzMDczeF9kcGxsX3B0cF9hZGp0aW1lIC0gYWRqdXN0IFBUUCBjbG9jayB0aW1lCiYjNDM7ICogQGluZm86IFBUUCBjbG9jayBpbmZvCiYjNDM7ICogQGRlbHRhOiB0aW1lIGFkanVzdG1lbnQgaW4gbmFub3NlY29uZHMKICAqCi0gKiBEZWFsbG9jYXRlcyBnaXZlbiBEUExMIGRldmljZSBwcmV2aW91c2x5IGFsbG9jYXRlZCBieSBAemwzMDczeF9kcGxsX2FsbG9jLgomIzQzOyAqIEZvciBOQ08sIGxhcmdlIGRlbHRhcyAoJmd0Oz0gMSBzZWNvbmQpIGFyZSBzcGxpdCBpbnRvIGEgVG9ECiYjNDM7ICogcmVhZC1tb2RpZnktd3JpdGUgZm9yIHRoZSBzZWNvbmRzIHBhcnQgYW5kIGFuIG91dHB1dCBwaGFzZSBzdGVwIGZvcgomIzQzOyAqIHRoZSBzdWItc2Vjb25kIHJlbWFpbmRlci4gU3ViLXNlY29uZCBkZWx0YXMgdXNlIHBoYXNlIHN0ZXAgZGlyZWN0bHksCiYjNDM7ICogZmFsbGluZyBiYWNrIHRvIFRvRCByZWFkLW1vZGlmeS13cml0ZSBpZiBwaGFzZSBzdGVwIG9yIFRJRSB3cml0ZQomIzQzOyAqIGZhaWxzLiBJbiBBVVRPL1JFRkxPQ0sgbW9kZXMsIGxhcmdlIGRlbHRhcyBhcmUgc3BsaXQgaW50byBUb0QKJiM0MzsgKiByZWFkLW1vZGlmeS13cml0ZSBmb3Igc2Vjb25kcyBhbmQgVElFIHdyaXRlIGZvciB0aGUgc3ViLXNlY29uZAomIzQzOyAqIHJlbWFpbmRlci4gU3ViLXNlY29uZCBkZWx0YXMgdXNlIFRJRSB3cml0ZSBkaXJlY3RseS4KJiM0MzsgKgomIzQzOyAqIElmIHRoZSBzZWNvbmRzIHBhcnQgd2FzIGFscmVhZHkgY29tbWl0dGVkIHdoZW4gdGhlIHN1Yi1zZWNvbmQKJiM0MzsgKiBtZWNoYW5pc20gZmFpbHMsIHJldHVybnMgMCB0byBwcmV2ZW50IHRoZSBQVFAgc2Vydm8gZnJvbSByZXRyeWluZwomIzQzOyAqIHRoZSBmdWxsIGRlbHRhIGFuZCBhcHBseWluZyBzZWNvbmRzIGFnYWluLgomIzQzOyAqCiYjNDM7ICogUmV0dXJuOiAwIG9uIHN1Y2Nlc3MgKG9yIHBhcnRpYWwgc3VjY2VzcyksICZsdDswIG9uIGVycm9yCiAgKi8KLXZvaWQKLXpsMzA3M3hfZHBsbF9mcmVlKHN0cnVjdCB6bDMwNzN4X2RwbGwgKnpsZHBsbCkKJiM0MztzdGF0aWMgaW50IHpsMzA3M3hfZHBsbF9wdHBfYWRqdGltZShzdHJ1Y3QgcHRwX2Nsb2NrX2luZm8gKmluZm8sIHM2NCBkZWx0YSkKIHsKLQlXQVJOKHpsZHBsbC0mZ3Q7ZHBsbF9kZXYsICYjMzQ7RFBMTCBkZXZpY2UgaXMgc3RpbGwgcmVnaXN0ZXJlZFxuJiMzNDspOwomIzQzOwlzdHJ1Y3QgemwzMDczeF9kcGxsICp6bGRwbGwgPSBjb250YWluZXJfb2YoaW5mbywgc3RydWN0IHpsMzA3M3hfZHBsbCwKJiM0MzsJCQkJCQkgICBwdHBfaW5mbyk7CiYjNDM7CXN0cnVjdCB6bDMwNzN4X2RldiAqemxkZXYgPSB6bGRwbGwtJmd0O2RldjsKJiM0MzsJY29uc3Qgc3RydWN0IHpsMzA3M3hfY2hhbiAqY2hhbjsKJiM0MzsJYm9vbCBzZWNfYWRqdXN0ZWQgPSBmYWxzZTsKJiM0MzsJc3RydWN0IHRpbWVzcGVjNjQgdHM7CiYjNDM7CWludCByYzsKIAotCW11dGV4X2Rlc3Ryb3koJmFtcDt6bGRwbGwtJmd0O2xvY2spOwotCWtmcmVlKHpsZHBsbCk7CiYjNDM7CWlmICghZGVsdGEpCiYjNDM7CQlyZXR1cm4gMDsKJiM0MzsKJiM0MzsJZ3VhcmQobXV0ZXgpKCZhbXA7emxkcGxsLSZndDtsb2NrKTsKJiM0MzsKJiM0MzsJLyogTW9kZXMgd2l0aG91dCBwaGFzZSBzdGVwIG9yIFRJRSB1c2UgcGxhaW4gVG9EIGFkanVzdCAqLwomIzQzOwljaGFuID0gemwzMDczeF9jaGFuX3N0YXRlX2dldCh6bGRldiwgemxkcGxsLSZndDtpZCk7CiYjNDM7CWlmICghemwzMDczeF9jaGFuX21vZGVfaXNfbmNvKGNoYW4pICZhbXA7JmFtcDsKJiM0MzsJICAgICF6bDMwNzN4X2NoYW5fbW9kZV9zdXBwb3J0c190aWUoY2hhbikpCiYjNDM7CQlyZXR1cm4gemwzMDczeF9jaGFuX3RvZF9hZGp1c3QoemxkZXYsIHpsZHBsbC0mZ3Q7aWQsCiYjNDM7CQkJCQkgICAgICAgbnNfdG9fdGltZXNwZWM2NChkZWx0YSkpOwomIzQzOwomIzQzOwkvKiBTcGxpdCBvZmYgc2Vjb25kcyB2aWEgVG9EIHJlYWQtbW9kaWZ5LXdyaXRlIHNvIHRoZSBzdWItc2Vjb25kCiYjNDM7CSAqIHJlbWFpbmRlciBjYW4gYmUgYXBwbGllZCB0aHJvdWdoIHRoZSBvdXRwdXQtY29oZXJlbnQgbWVjaGFuaXNtCiYjNDM7CSAqIChwaGFzZSBzdGVwIG9yIFRJRSB3cml0ZSkuCiYjNDM7CSAqLwomIzQzOwlpZiAoZGVsdGEgJmd0Oz0gTlNFQ19QRVJfU0VDIHx8IGRlbHRhICZsdDs9IC1OU0VDX1BFUl9TRUMpIHsKJiM0MzsJCXMzMiByZW1haW5kZXI7CiYjNDM7CiYjNDM7CQl0cy50dl9zZWMgPSBkaXZfczY0X3JlbShkZWx0YSwgTlNFQ19QRVJfU0VDLCAmYW1wO3JlbWFpbmRlcik7CiYjNDM7CQl0cy50dl9uc2VjID0gMDsKJiM0MzsJCWRlbHRhID0gcmVtYWluZGVyOwomIzQzOwomIzQzOwkJcmMgPSB6bDMwNzN4X2NoYW5fdG9kX2FkanVzdCh6bGRldiwgemxkcGxsLSZndDtpZCwgdHMpOwomIzQzOwkJaWYgKHJjKQomIzQzOwkJCXJldHVybiByYzsKJiM0MzsKJiM0MzsJCS8qIE5vIHN1Yi1zZWNvbmQgcmVtYWluZGVyLCBkb25lICovCiYjNDM7CQlpZiAoIWRlbHRhKQomIzQzOwkJCXJldHVybiAwOwomIzQzOwomIzQzOwkJLyogV2FpdCBmb3IgdGhlIFRvRCB3cml0ZSB0byBiZSBhcHBsaWVkIGF0IHRoZSAxIEh6IGVkZ2UKJiM0MzsJCSAqIGJlZm9yZSBpc3N1aW5nIHBoYXNlIHN0ZXAgb3IgVElFIHdyaXRlLCBzbyB0aGUgcGVuZGluZwomIzQzOwkJICogV1JfTkVYVF8xSFogZG9lcyBub3Qgb3ZlcndyaXRlIHRoZSBzdWItc2Vjb25kIGFkanVzdG1lbnQuCiYjNDM7CQkgKi8KJiM0MzsJCXJjID0gemwzMDczeF9jaGFuX3RvZF9yZWFkeV93YWl0KHpsZGV2LCB6bGRwbGwtJmd0O2lkKTsKJiM0MzsJCWlmIChyYykKJiM0MzsJCQlyZXR1cm4gcmM7CiYjNDM7CiYjNDM7CQlzZWNfYWRqdXN0ZWQgPSB0cnVlOwomIzQzOwl9CiYjNDM7CiYjNDM7CS8qIEFwcGx5IHN1Yi1zZWNvbmQgZGVsdGEgdmlhIHBoYXNlIHN0ZXAgKE5DTykgb3IgVElFIHdyaXRlICovCiYjNDM7CWlmICh6bDMwNzN4X2NoYW5fbW9kZV9pc19uY28oY2hhbikpIHsKJiM0MzsJCXJjID0gemwzMDczeF9kcGxsX3B0cF9hZGp0aW1lX3BoYXNlX3N0ZXAoemxkcGxsLCBkZWx0YSk7CiYjNDM7CQlpZiAoIXJjKQomIzQzOwkJCXJldHVybiAwOwomIzQzOwl9IGVsc2UgewomIzQzOwkJcmMgPSB6bDMwNzN4X2NoYW5fdGllX3dyaXRlKHpsZGV2LCB6bGRwbGwtJmd0O2lkLCBkZWx0YSk7CiYjNDM7CQlpZiAoIXJjKQomIzQzOwkJCXJldHVybiAwOwomIzQzOwl9CiYjNDM7CiYjNDM7CS8qIFBoYXNlIHN0ZXAgb3IgVElFIHdyaXRlIGZhaWxlZCwgZmFsbCBiYWNrIHRvIFRvRCBhZGp1c3QgKi8KJiM0MzsJcmMgPSB6bDMwNzN4X2NoYW5fdG9kX2FkanVzdCh6bGRldiwgemxkcGxsLSZndDtpZCwKJiM0MzsJCQkJICAgICBuc190b190aW1lc3BlYzY0KGRlbHRhKSk7CiYjNDM7CiYjNDM7CS8qIEluIHRoZSB1bmxpa2VseSBldmVudCB0aGF0IGJvdGggcGhhc2Ugc3RlcC9USUUgd3JpdGUgYW5kIGZhbGxiYWNrCiYjNDM7CSAqIFRvRCBhZGp1c3QgZmFpbCBhZnRlciBzZWNvbmRzIHdlcmUgYWxyZWFkeSBjb21taXR0ZWQsIHJldHVybgomIzQzOwkgKiBzdWNjZXNzIHRvIHByZXZlbnQgdGhlIFBUUCBzZXJ2byBmcm9tIHJldHJ5aW5nIHRoZSBmdWxsIGRlbHRhIGFuZAomIzQzOwkgKiBhcHBseWluZyBzZWNvbmRzIGFnYWluLiBUaGUgc3ViLXNlY29uZCByZXNpZHVhbCB3aWxsIHNlbGYtY29ycmVjdAomIzQzOwkgKiBpbiB0aGUgbmV4dCBzZXJ2byBjeWNsZS4KJiM0MzsJICovCiYjNDM7CWlmIChyYyAmYW1wOyZhbXA7IHNlY19hZGp1c3RlZCkgewomIzQzOwkJZGV2X3dhcm4oemxkZXYtJmd0O2RldiwKJiM0MzsJCQkgJiMzNDtTdWItc2Vjb25kIGFkanVzdG1lbnQgZmFpbGVkIGFmdGVyIHNlY29uZHMgYXBwbGllZFxuJiMzNDspOwomIzQzOwkJcmV0dXJuIDA7CiYjNDM7CX0KJiM0MzsKJiM0MzsJcmV0dXJuIHJjOwomIzQzO30KJiM0MzsKJiM0MzsvKioKJiM0MzsgKiB6bDMwNzN4X2RwbGxfcHRwX2FkamZpbmUgLSBhZGp1c3QgUFRQIGNsb2NrIGZyZXF1ZW5jeQomIzQzOyAqIEBpbmZvOiBQVFAgY2xvY2sgaW5mbwomIzQzOyAqIEBzY2FsZWRfcHBtOiBmcmVxdWVuY3kgYWRqdXN0bWVudCBpbiBzY2FsZWQgcHBtIChwcG0gKiAyXjE2KQomIzQzOyAqCiYjNDM7ICogT25seSBzdXBwb3J0ZWQgZm9yIE5DTy4gV3JpdGVzIHRoZSBkZWx0YSBmcmVxdWVuY3kgb2Zmc2V0IHJlZ2lzdGVyLgomIzQzOyAqCiYjNDM7ICogUmV0dXJuOgomIzQzOyAqICogJTAJCQktIHN1Y2Nlc3Mgb3IgQHNjYWxlZF9wcG0gaXMgemVybyAobm8tb3ApCiYjNDM7ICogKiAlLUVPUE5PVFNVUFAJLSBOQ08gcGluIGlzIG5vdCBjb25uZWN0ZWQgYW5kIEBzY2FsZWRfcHBtIGlzIG5vbi16ZXJvCiYjNDM7ICogKiBuZWdhdGl2ZQkJLSBvdGhlciBlcnJvcgomIzQzOyAqLwomIzQzO3N0YXRpYyBpbnQKJiM0Mzt6bDMwNzN4X2RwbGxfcHRwX2FkamZpbmUoc3RydWN0IHB0cF9jbG9ja19pbmZvICppbmZvLCBsb25nIHNjYWxlZF9wcG0pCiYjNDM7ewomIzQzOwlzdHJ1Y3QgemwzMDczeF9kcGxsICp6bGRwbGwgPSBjb250YWluZXJfb2YoaW5mbywgc3RydWN0IHpsMzA3M3hfZHBsbCwKJiM0MzsJCQkJCQkgICBwdHBfaW5mbyk7CiYjNDM7CWNvbnN0IHN0cnVjdCB6bDMwNzN4X2NoYW4gKmNoYW47CiYjNDM7CXM2NCBvZmZzZXQ7CiYjNDM7CiYjNDM7CS8qIENvbnZlcnQgc2NhbGVkX3BwbSB0byBkZl9vZmZzZXQgaW4gMl4tNDggc3RlcHM6CiYjNDM7CSAqICAgZGZfb2Zmc2V0ID0gLShzY2FsZWRfcHBtICogMl4zMikgLyAxMF42CiYjNDM7CSAqCiYjNDM7CSAqIFNpbXBsaWZ5IHRvIGF2b2lkIG92ZXJmbG93OgomIzQzOwkgKiAgIGRmX29mZnNldCA9IC0oc2NhbGVkX3BwbSAqIDJeMjYpIC8gNV42CiYjNDM7CSAqICAgZGZfb2Zmc2V0ID0gLShzY2FsZWRfcHBtICogNjcxMDg4NjQpIC8gMTU2MjUKJiM0MzsJICovCiYjNDM7CW9mZnNldCA9IC1kaXZfczY0KChzNjQpc2NhbGVkX3BwbSAqIDY3MTA4ODY0TEwsIDE1NjI1KTsKJiM0MzsKJiM0MzsJZ3VhcmQobXV0ZXgpKCZhbXA7emxkcGxsLSZndDtsb2NrKTsKJiM0MzsKJiM0MzsJY2hhbiA9IHpsMzA3M3hfY2hhbl9zdGF0ZV9nZXQoemxkcGxsLSZndDtkZXYsIHpsZHBsbC0mZ3Q7aWQpOwomIzQzOwlpZiAoIXpsMzA3M3hfY2hhbl9tb2RlX2lzX25jbyhjaGFuKSkKJiM0MzsJCXJldHVybiBzY2FsZWRfcHBtID8gLUVPUE5PVFNVUFAgOiAwOwomIzQzOwlpZiAob2Zmc2V0ID09IGNoYW4tJmd0O2RmX29mZnNldCkKJiM0MzsJCXJldHVybiAwOwomIzQzOwomIzQzOwlyZXR1cm4gemwzMDczeF9jaGFuX2RmX29mZnNldF9zZXQoemxkcGxsLSZndDtkZXYsIHpsZHBsbC0mZ3Q7aWQsIG9mZnNldCk7CiYjNDM7fQomIzQzOwomIzQzOy8qKgomIzQzOyAqIHpsMzA3M3hfZHBsbF9wdHBfYWRqcGhhc2UgLSBhZGp1c3QgUFRQIGNsb2NrIHBoYXNlCiYjNDM7ICogQGluZm86IFBUUCBjbG9jayBpbmZvCiYjNDM7ICogQGRlbHRhOiBwaGFzZSBhZGp1c3RtZW50IGluIG5hbm9zZWNvbmRzCiYjNDM7ICoKJiM0MzsgKiBPbmx5IHN1cHBvcnRlZCBpbiBBVVRPIGFuZCBSRUZMT0NLIG1vZGVzLiBVc2VzIFRJRSB3cml0ZSBmb3IKJiM0MzsgKiBuYW5vc2Vjb25kIHJlc29sdXRpb24gcGhhc2UgYWRqdXN0bWVudC4KJiM0MzsgKgomIzQzOyAqIFJldHVybjoKJiM0MzsgKiAqICUwCQkJLSBzdWNjZXNzIG9yIEBkZWx0YSBpcyB6ZXJvIChuby1vcCkKJiM0MzsgKiAqICUtRU9QTk9UU1VQUAktIG1vZGUgZG9lcyBub3Qgc3VwcG9ydCBUSUUgYW5kIEBkZWx0YSBpcyBub24temVybwomIzQzOyAqICogbmVnYXRpdmUJCS0gb3RoZXIgZXJyb3IKJiM0MzsgKi8KJiM0MztzdGF0aWMgaW50IHpsMzA3M3hfZHBsbF9wdHBfYWRqcGhhc2Uoc3RydWN0IHB0cF9jbG9ja19pbmZvICppbmZvLCBzMzIgZGVsdGEpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgemwzMDczeF9kcGxsICp6bGRwbGwgPSBjb250YWluZXJfb2YoaW5mbywgc3RydWN0IHpsMzA3M3hfZHBsbCwKJiM0MzsJCQkJCQkgICBwdHBfaW5mbyk7CiYjNDM7CXN0cnVjdCB6bDMwNzN4X2RldiAqemxkZXYgPSB6bGRwbGwtJmd0O2RldjsKJiM0MzsJY29uc3Qgc3RydWN0IHpsMzA3M3hfY2hhbiAqY2hhbjsKJiM0MzsKJiM0MzsJaWYgKCFkZWx0YSkKJiM0MzsJCXJldHVybiAwOwomIzQzOwomIzQzOwlndWFyZChtdXRleCkoJmFtcDt6bGRwbGwtJmd0O2xvY2spOwomIzQzOwomIzQzOwljaGFuID0gemwzMDczeF9jaGFuX3N0YXRlX2dldCh6bGRldiwgemxkcGxsLSZndDtpZCk7CiYjNDM7CiYjNDM7CWlmICghemwzMDczeF9jaGFuX21vZGVfc3VwcG9ydHNfdGllKGNoYW4pKQomIzQzOwkJcmV0dXJuIC1FT1BOT1RTVVBQOwomIzQzOwomIzQzOwlyZXR1cm4gemwzMDczeF9jaGFuX3RpZV93cml0ZSh6bGRldiwgemxkcGxsLSZndDtpZCwgZGVsdGEpOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgczMyCiYjNDM7emwzMDczeF9kcGxsX3B0cF9nZXRtYXhwaGFzZShzdHJ1Y3QgcHRwX2Nsb2NrX2luZm8gKmluZm8gX19hbHdheXNfdW51c2VkKQomIzQzO3sKJiM0MzsJLyogSFcgbGltaXRzIFRJRSB3cml0ZSB0byAmIzQzOy0xIHNlY29uZC4gUmV0dXJuIHRoZSBjb25zdGFudCBIVwomIzQzOwkgKiBsaW1pdCBhbmQgbGV0IGFkanBoYXNlIGhhbmRsZSBtb2RlLXNwZWNpZmljIGNoZWNrcy4KJiM0MzsJICovCiYjNDM7CXJldHVybiBOU0VDX1BFUl9TRUMgLSAxOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgY29uc3Qgc3RydWN0IHB0cF9jbG9ja19pbmZvIHpsMzA3M3hfZHBsbF9wdHBfY2xvY2tfaW5mbyA9IHsKJiM0MzsJLm93bmVyCQk9IFRISVNfTU9EVUxFLAomIzQzOwkubWF4X2Fkagk9IFpMMzA3M1hfRFBMTF9QVFBfTUFYX0FESiwKJiM0MzsJLmdldHRpbWV4NjQJPSB6bDMwNzN4X2RwbGxfcHRwX2dldHRpbWV4NjQsCiYjNDM7CS5zZXR0aW1lNjQJPSB6bDMwNzN4X2RwbGxfcHRwX3NldHRpbWU2NCwKJiM0MzsJLmFkanRpbWUJPSB6bDMwNzN4X2RwbGxfcHRwX2FkanRpbWUsCiYjNDM7CS5hZGpmaW5lCT0gemwzMDczeF9kcGxsX3B0cF9hZGpmaW5lLAomIzQzOwkuYWRqcGhhc2UJPSB6bDMwNzN4X2RwbGxfcHRwX2FkanBoYXNlLAomIzQzOwkuZ2V0bWF4cGhhc2UJPSB6bDMwNzN4X2RwbGxfcHRwX2dldG1heHBoYXNlLAomIzQzO307CiYjNDM7CiYjNDM7LyoqCiYjNDM7ICogemwzMDczeF9kcGxsX3B0cF9yZWdpc3RlciAtIHJlZ2lzdGVyIFBUUCBjbG9jayBmb3IgYSBEUExMIGNoYW5uZWwKJiM0MzsgKiBAemxkcGxsOiBEUExMIGNoYW5uZWwgdG8gcmVnaXN0ZXIgUFRQIGNsb2NrIGZvcgomIzQzOyAqCiYjNDM7ICogUmV0dXJuOiAwIG9uIHN1Y2Nlc3MsICZsdDswIG9uIGVycm9yCiYjNDM7ICovCiYjNDM7c3RhdGljIGludCB6bDMwNzN4X2RwbGxfcHRwX3JlZ2lzdGVyKHN0cnVjdCB6bDMwNzN4X2RwbGwgKnpsZHBsbCkKJiM0Mzt7CiYjNDM7CXN0cnVjdCB6bDMwNzN4X2RldiAqemxkZXYgPSB6bGRwbGwtJmd0O2RldjsKJiM0MzsJc3RydWN0IHB0cF9jbG9jayAqcHRwX2Nsb2NrOwomIzQzOwomIzQzOwl6bGRwbGwtJmd0O3B0cF9pbmZvID0gemwzMDczeF9kcGxsX3B0cF9jbG9ja19pbmZvOwomIzQzOwlzbnByaW50Zih6bGRwbGwtJmd0O3B0cF9pbmZvLm5hbWUsIHNpemVvZih6bGRwbGwtJmd0O3B0cF9pbmZvLm5hbWUpLAomIzQzOwkJICYjMzQ7JXMtZHBsbCV1JiMzNDssIGRldl9uYW1lKHpsZGV2LSZndDtkZXYpLCB6bGRwbGwtJmd0O2lkKTsKJiM0MzsKJiM0MzsJcHRwX2Nsb2NrID0gcHRwX2Nsb2NrX3JlZ2lzdGVyKCZhbXA7emxkcGxsLSZndDtwdHBfaW5mbywgemxkZXYtJmd0O2Rldik7CiYjNDM7CWlmIChJU19FUlIocHRwX2Nsb2NrKSkgewomIzQzOwkJZGV2X2Vycih6bGRldi0mZ3Q7ZGV2LCAmIzM0O0ZhaWxlZCB0byByZWdpc3RlciBQVFAgY2xvY2sgZm9yIERQTEwldVxuJiMzNDssCiYjNDM7CQkJemxkcGxsLSZndDtpZCk7CiYjNDM7CQlyZXR1cm4gUFRSX0VSUihwdHBfY2xvY2spOwomIzQzOwl9CiYjNDM7CiYjNDM7CXpsZHBsbC0mZ3Q7cHRwX2Nsb2NrID0gcHRwX2Nsb2NrOwomIzQzOwomIzQzOwlyZXR1cm4gMDsKJiM0Mzt9CiYjNDM7CiYjNDM7LyoqCiYjNDM7ICogemwzMDczeF9kcGxsX3B0cF91bnJlZ2lzdGVyIC0gdW5yZWdpc3RlciBQVFAgY2xvY2sgZm9yIGEgRFBMTCBjaGFubmVsCiYjNDM7ICogQHpsZHBsbDogRFBMTCBjaGFubmVsIHRvIHVucmVnaXN0ZXIgUFRQIGNsb2NrIGZvcgomIzQzOyAqLwomIzQzO3N0YXRpYyB2b2lkIHpsMzA3M3hfZHBsbF9wdHBfdW5yZWdpc3RlcihzdHJ1Y3QgemwzMDczeF9kcGxsICp6bGRwbGwpCiYjNDM7ewomIzQzOwlpZiAoIUlTX0VSUl9PUl9OVUxMKHpsZHBsbC0mZ3Q7cHRwX2Nsb2NrKSkgewomIzQzOwkJcHRwX2Nsb2NrX3VucmVnaXN0ZXIoemxkcGxsLSZndDtwdHBfY2xvY2spOwomIzQzOwkJemxkcGxsLSZndDtwdHBfY2xvY2sgPSBOVUxMOwomIzQzOwl9CiB9CiAKIC8qKgpAQCAtMjM5OCw2ICYjNDM7MjczOSw0NyBAQCB6bDMwNzN4X2RwbGxfcmVmX3N5bmNfcGFpcnNfcmVnaXN0ZXIoc3RydWN0IHpsMzA3M3hfZHBsbCAqemxkcGxsKQogCXJldHVybiAwOwogfQogCiYjNDM7LyoqCiYjNDM7ICogemwzMDczeF9kcGxsX2FsbG9jIC0gYWxsb2NhdGUgRFBMTCBkZXZpY2UKJiM0MzsgKiBAemxkZXY6IHBvaW50ZXIgdG8gemwzMDczeCBkZXZpY2UKJiM0MzsgKiBAY2g6IERQTEwgY2hhbm5lbCBudW1iZXIKJiM0MzsgKgomIzQzOyAqIEFsbG9jYXRlcyBEUExMIGRldmljZSBzdHJ1Y3R1cmUgZm9yIGdpdmVuIERQTEwgY2hhbm5lbC4KJiM0MzsgKgomIzQzOyAqIFJldHVybjogcG9pbnRlciB0byBEUExMIGRldmljZSBvbiBzdWNjZXNzLCBlcnJvciBwb2ludGVyIG9uIGVycm9yCiYjNDM7ICovCiYjNDM7c3RydWN0IHpsMzA3M3hfZHBsbCAqCiYjNDM7emwzMDczeF9kcGxsX2FsbG9jKHN0cnVjdCB6bDMwNzN4X2RldiAqemxkZXYsIHU4IGNoKQomIzQzO3sKJiM0MzsJc3RydWN0IHpsMzA3M3hfZHBsbCAqemxkcGxsOwomIzQzOwomIzQzOwl6bGRwbGwgPSBremFsbG9jX29iaigqemxkcGxsKTsKJiM0MzsJaWYgKCF6bGRwbGwpCiYjNDM7CQlyZXR1cm4gRVJSX1BUUigtRU5PTUVNKTsKJiM0MzsKJiM0MzsJemxkcGxsLSZndDtkZXYgPSB6bGRldjsKJiM0MzsJemxkcGxsLSZndDtpZCA9IGNoOwomIzQzOwltdXRleF9pbml0KCZhbXA7emxkcGxsLSZndDtsb2NrKTsKJiM0MzsJSU5JVF9MSVNUX0hFQUQoJmFtcDt6bGRwbGwtJmd0O3BpbnMpOwomIzQzOwomIzQzOwlyZXR1cm4gemxkcGxsOwomIzQzO30KJiM0MzsKJiM0MzsvKioKJiM0MzsgKiB6bDMwNzN4X2RwbGxfZnJlZSAtIGZyZWUgRFBMTCBkZXZpY2UKJiM0MzsgKiBAemxkcGxsOiBwb2ludGVyIHRvIHpsMzA3M3hfZHBsbCBzdHJ1Y3R1cmUKJiM0MzsgKgomIzQzOyAqIERlYWxsb2NhdGVzIGdpdmVuIERQTEwgZGV2aWNlIHByZXZpb3VzbHkgYWxsb2NhdGVkIGJ5IEB6bDMwNzN4X2RwbGxfYWxsb2MuCiYjNDM7ICovCiYjNDM7dm9pZAomIzQzO3psMzA3M3hfZHBsbF9mcmVlKHN0cnVjdCB6bDMwNzN4X2RwbGwgKnpsZHBsbCkKJiM0Mzt7CiYjNDM7CVdBUk4oemxkcGxsLSZndDtkcGxsX2RldiwgJiMzNDtEUExMIGRldmljZSBpcyBzdGlsbCByZWdpc3RlcmVkXG4mIzM0Oyk7CiYjNDM7CiYjNDM7CW11dGV4X2Rlc3Ryb3koJmFtcDt6bGRwbGwtJmd0O2xvY2spOwomIzQzOwlrZnJlZSh6bGRwbGwpOwomIzQzO30KJiM0MzsKIC8qKgogICogemwzMDczeF9kcGxsX3JlZ2lzdGVyIC0gcmVnaXN0ZXIgRFBMTCBkZXZpY2UgYW5kIGFsbCBpdHMgcGlucwogICogQHpsZHBsbDogcG9pbnRlciB0byB6bDMwNzN4X2RwbGwgc3RydWN0dXJlCkBAIC0yNDI4LDYgJiM0MzsyODEwLDEzIEBAIHpsMzA3M3hfZHBsbF9yZWdpc3RlcihzdHJ1Y3QgemwzMDczeF9kcGxsICp6bGRwbGwpCiAJCXJldHVybiByYzsKIAl9CiAKJiM0MzsJcmMgPSB6bDMwNzN4X2RwbGxfcHRwX3JlZ2lzdGVyKHpsZHBsbCk7CiYjNDM7CWlmIChyYykgewomIzQzOwkJemwzMDczeF9kcGxsX3BpbnNfdW5yZWdpc3Rlcih6bGRwbGwpOwomIzQzOwkJemwzMDczeF9kcGxsX2RldmljZV91bnJlZ2lzdGVyKHpsZHBsbCk7CiYjNDM7CQlyZXR1cm4gcmM7CiYjNDM7CX0KJiM0MzsKIAlyZXR1cm4gMDsKIH0KIApAQCAtMjQ0MSw3ICYjNDM7MjgzMCw3IEBAIHpsMzA3M3hfZHBsbF9yZWdpc3RlcihzdHJ1Y3QgemwzMDczeF9kcGxsICp6bGRwbGwpCiB2b2lkCiB6bDMwNzN4X2RwbGxfdW5yZWdpc3RlcihzdHJ1Y3QgemwzMDczeF9kcGxsICp6bGRwbGwpCiB7Ci0JLyogVW5yZWdpc3RlciBhbGwgcGlucyBhbmQgZHBsbCAqLwomIzQzOwl6bDMwNzN4X2RwbGxfcHRwX3VucmVnaXN0ZXIoemxkcGxsKTsKIAl6bDMwNzN4X2RwbGxfcGluc191bnJlZ2lzdGVyKHpsZHBsbCk7CiAJemwzMDczeF9kcGxsX2RldmljZV91bnJlZ2lzdGVyKHpsZHBsbCk7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL2RwbGwvemwzMDczeC9kcGxsLmggYi9kcml2ZXJzL2RwbGwvemwzMDczeC9kcGxsLmgKaW5kZXggZmFlYmM0MDJiYTFiNy4uOTkzMjIxZGM2MzI0OSAxMDA2NDQKLS0tIGEvZHJpdmVycy9kcGxsL3psMzA3M3gvZHBsbC5oCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvZHBsbC96bDMwNzN4L2RwbGwuaApAQCAtNSw2ICYjNDM7NSw3IEBACiAKICNpbmNsdWRlICZsdDtsaW51eC9kcGxsLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvbGlzdC5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9wdHBfY2xvY2tfa2VybmVsLmgmZ3Q7CiAKICNpbmNsdWRlICYjMzQ7Y29yZS5oJiMzNDsKIApAQCAtMjIsNiAmIzQzOzIzLDggQEAKICAqIEB0eXBlOiBEUExMIHR5cGUgKFBQUyBvciBFRUMpCiAgKiBAbG9ja19zdGF0dXM6IGxhc3Qgc2F2ZWQgRFBMTCBsb2NrIHN0YXR1cwogICogQHBpbnM6IGxpc3Qgb2YgcGlucwomIzQzOyAqIEBwdHBfaW5mbzogUFRQIGNsb2NrIGluZm8KJiM0MzsgKiBAcHRwX2Nsb2NrOiByZWdpc3RlcmVkIFBUUCBjbG9jayAob3IgTlVMTCkKICAqLwogc3RydWN0IHpsMzA3M3hfZHBsbCB7CiAJc3RydWN0IGxpc3RfaGVhZAkJbGlzdDsKQEAgLTM2LDYgJiM0MzszOSw4IEBAIHN0cnVjdCB6bDMwNzN4X2RwbGwgewogCWVudW0gZHBsbF90eXBlCQkJdHlwZTsKIAllbnVtIGRwbGxfbG9ja19zdGF0dXMJCWxvY2tfc3RhdHVzOwogCXN0cnVjdCBsaXN0X2hlYWQJCXBpbnM7CiYjNDM7CXN0cnVjdCBwdHBfY2xvY2tfaW5mbwkJcHRwX2luZm87CiYjNDM7CXN0cnVjdCBwdHBfY2xvY2sJCSpwdHBfY2xvY2s7CiB9OwogCiBzdHJ1Y3QgemwzMDczeF9kcGxsICp6bDMwNzN4X2RwbGxfYWxsb2Moc3RydWN0IHpsMzA3M3hfZGV2ICp6bGRldiwgdTggY2gpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9kcGxsL3psMzA3M3gvcmVncy5oIGIvZHJpdmVycy9kcGxsL3psMzA3M3gvcmVncy5oCmluZGV4IGI3MGVhZDdkNDQ5NWIuLmYzYTVlMTIxNWFhMzYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZHBsbC96bDMwNzN4L3JlZ3MuaAomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL2RwbGwvemwzMDczeC9yZWdzLmgKQEAgLTE3OSw2ICYjNDM7MTc5LDIwIEBACiAjZGVmaW5lIFpMX0RQTExfREZfUkVBRF9DTUQJCQlHRU5NQVNLKDIsIDApCiAjZGVmaW5lIFpMX0RQTExfREZfUkVBRF9DTURfQUNDX0kJCTQKIAomIzQzOyNkZWZpbmUgWkxfUkVHX0RQTExfVElFX0NUUkwJCQlaTF9SRUcoNSwgMHgzMCwgMSkKJiM0MzsjZGVmaW5lIFpMX0RQTExfVElFX0NUUkxfT1AJCQlHRU5NQVNLKDIsIDApCiYjNDM7I2RlZmluZSBaTF9EUExMX1RJRV9DVFJMX09QX1dSCQkJNAomIzQzOwomIzQzOyNkZWZpbmUgWkxfUkVHX0RQTExfVElFX0NUUkxfTUFTSwkJWkxfUkVHKDUsIDB4MzEsIDEpCiYjNDM7CiYjNDM7I2RlZmluZSBaTF9SRUdfRFBMTF9UT0RfQ1RSTChfaWR4KQkJCQkJXAomIzQzOwlaTF9SRUdfSURYKF9pZHgsIDUsIDB4MzgsIDEsIFpMMzA3M1hfTUFYX0NIQU5ORUxTLCAxKQomIzQzOyNkZWZpbmUgWkxfRFBMTF9UT0RfQ1RSTF9TRU0JCQlCSVQoNCkKJiM0MzsjZGVmaW5lIFpMX0RQTExfVE9EX0NUUkxfQ01ECQkJR0VOTUFTSygzLCAwKQomIzQzOyNkZWZpbmUgWkxfRFBMTF9UT0RfQ1RSTF9DTURfV1JfTkVYVF8xSFoJMQomIzQzOyNkZWZpbmUgWkxfRFBMTF9UT0RfQ1RSTF9DTURfUkRfQ1VSUkVOVAkJOAomIzQzOyNkZWZpbmUgWkxfRFBMTF9UT0RfQ1RSTF9DTURfUkRfTkVYVF8xSFoJOQomIzQzOwogI2RlZmluZSBaTF9SRUdfRFBMTF9NRUFTX0NUUkwJCQlaTF9SRUcoNSwgMHg1MCwgMSkKICNkZWZpbmUgWkxfRFBMTF9NRUFTX0NUUkxfRU4JCQlCSVQoMCkKICNkZWZpbmUgWkxfRFBMTF9NRUFTX0NUUkxfQVZHX0ZBQ1RPUgkJR0VOTUFTSyg3LCA0KQpAQCAtMTkzLDYgJiM0MzsyMDcsOSBAQAogCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICogUmVnaXN0ZXIgUGFnZXMgNi03LCBEUExMIERhdGEKJiM0MzsgKgomIzQzOyAqIFBlci1jaGFubmVsIHJlZ2lzdGVycyB3aXRoIHN0cmlkZSAweDIwLiBDaGFubmVscyAwLTMgcmVzaWRlIG9uIHBhZ2UgNiwKJiM0MzsgKiBjaGFubmVsIDQgb24gcGFnZSA3LgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKICNkZWZpbmUgWkxfUkVHX0RQTExfREZfT0ZGU0VUXzAzKF9pZHgpCQkJCQlcCkBAIC0yMDIsNiAmIzQzOzIxOSwyNCBAQAogCSgoX2lkeCkgJmx0OyA0ID8gWkxfUkVHX0RQTExfREZfT0ZGU0VUXzAzKF9pZHgpIDogWkxfUkVHX0RQTExfREZfT0ZGU0VUXzQpCiAjZGVmaW5lIFpMX0RQTExfREZfT0ZGU0VUX1VOS05PV04JUzY0X01JTgogCiYjNDM7I2RlZmluZSBaTF9SRUdfRFBMTF9USUVfREFUQV8wMyhfaWR4KQkJCQkJXAomIzQzOwlaTF9SRUdfSURYKF9pZHgsIDYsIDB4MEMsIDYsIDQsIDB4MjApCiYjNDM7I2RlZmluZSBaTF9SRUdfRFBMTF9USUVfREFUQV80CQkJWkxfUkVHKDcsIDB4MEMsIDYpCiYjNDM7I2RlZmluZSBaTF9SRUdfRFBMTF9USUVfREFUQShfaWR4KQkJCQkJXAomIzQzOwkoKF9pZHgpICZsdDsgNCA/IFpMX1JFR19EUExMX1RJRV9EQVRBXzAzKF9pZHgpIDogWkxfUkVHX0RQTExfVElFX0RBVEFfNCkKJiM0MzsKJiM0MzsjZGVmaW5lIFpMX1JFR19EUExMX1RPRF9TRUNfMDMoX2lkeCkJCQkJCVwKJiM0MzsJWkxfUkVHX0lEWChfaWR4LCA2LCAweDEyLCA2LCA0LCAweDIwKQomIzQzOyNkZWZpbmUgWkxfUkVHX0RQTExfVE9EX1NFQ180CQkJWkxfUkVHKDcsIDB4MTIsIDYpCiYjNDM7I2RlZmluZSBaTF9SRUdfRFBMTF9UT0RfU0VDKF9pZHgpCQkJCQlcCiYjNDM7CSgoX2lkeCkgJmx0OyA0ID8gWkxfUkVHX0RQTExfVE9EX1NFQ18wMyhfaWR4KSA6IFpMX1JFR19EUExMX1RPRF9TRUNfNCkKJiM0MzsKJiM0MzsjZGVmaW5lIFpMX1JFR19EUExMX1RPRF9OU18wMyhfaWR4KQkJCQkJXAomIzQzOwlaTF9SRUdfSURYKF9pZHgsIDYsIDB4MTgsIDQsIDQsIDB4MjApCiYjNDM7I2RlZmluZSBaTF9SRUdfRFBMTF9UT0RfTlNfNAkJCVpMX1JFRyg3LCAweDE4LCA0KQomIzQzOyNkZWZpbmUgWkxfUkVHX0RQTExfVE9EX05TKF9pZHgpCQkJCQlcCiYjNDM7CSgoX2lkeCkgJmx0OyA0ID8gWkxfUkVHX0RQTExfVE9EX05TXzAzKF9pZHgpIDogWkxfUkVHX0RQTExfVE9EX05TXzQpCiYjNDM7CiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqIFJlZ2lzdGVyIFBhZ2UgOSwgU3ludGggYW5kIE91dHB1dAogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwpAQCAtMjIxLDYgJiM0MzsyNTYsMjMgQEAKICNkZWZpbmUgWkxfT1VUUFVUX0NUUkxfRU4JCQlCSVQoMCkKICNkZWZpbmUgWkxfT1VUUFVUX0NUUkxfU1lOVEhfU0VMCQlHRU5NQVNLKDYsIDQpCiAKJiM0MzsjZGVmaW5lIFpMX1JFR19PVVRQVVRfU1RFUF9USU1FX01BU0sJCVpMX1JFRyg5LCAweDM2LCAyKQomIzQzOwomIzQzOyNkZWZpbmUgWkxfUkVHX09VVFBVVF9QSEFTRV9TVEVQX0NUUkwJCVpMX1JFRyg5LCAweDM4LCAxKQomIzQzOyNkZWZpbmUgWkxfT1VUUFVUX1BIQVNFX1NURVBfQ1RSTF9EUExMCQlHRU5NQVNLKDYsIDQpCiYjNDM7I2RlZmluZSBaTF9PVVRQVVRfUEhBU0VfU1RFUF9DVFJMX1RPRF9TVEVQCUJJVCgzKQomIzQzOyNkZWZpbmUgWkxfT1VUUFVUX1BIQVNFX1NURVBfQ1RSTF9PUAkJR0VOTUFTSygxLCAwKQomIzQzOyNkZWZpbmUgWkxfT1VUUFVUX1BIQVNFX1NURVBfQ1RSTF9PUF9OT05FCTAKJiM0MzsjZGVmaW5lIFpMX09VVFBVVF9QSEFTRV9TVEVQX0NUUkxfT1BfUkVTRVQJMQomIzQzOyNkZWZpbmUgWkxfT1VUUFVUX1BIQVNFX1NURVBfQ1RSTF9PUF9SRUFECTIKJiM0MzsjZGVmaW5lIFpMX09VVFBVVF9QSEFTRV9TVEVQX0NUUkxfT1BfV1JJVEUJMwomIzQzOwomIzQzOyNkZWZpbmUgWkxfUkVHX09VVFBVVF9QSEFTRV9TVEVQX05VTUJFUgkJWkxfUkVHKDksIDB4MzksIDEpCiYjNDM7CiYjNDM7I2RlZmluZSBaTF9SRUdfT1VUUFVUX1BIQVNFX1NURVBfTUFTSwkJWkxfUkVHKDksIDB4M2EsIDIpCiYjNDM7CiYjNDM7I2RlZmluZSBaTF9SRUdfT1VUUFVUX1BIQVNFX1NURVBfREFUQQkJWkxfUkVHKDksIDB4M2MsIDQpCiYjNDM7CiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICogUmVnaXN0ZXIgUGFnZSAxMCwgUmVmIE1haWxib3gKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTEgMTQ6MDM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTgyMjgKCQkJCQkJCW91dHB1dDogMTgKCQkJCQkJCXRob3VnaHRzOiAxODgzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKlBUUCBDbG9jayBTdXBwb3J0IGluIHRoZSBBenVyaXRlIERQTEwgRHJpdmVyOiBBIE1lbW9yeSBTYWZldHkgUmV2aWV3KioKCkFscmlnaHQsIGxldCYjMzk7cyBkaXNzZWN0IHRoaXMgcGF0Y2ggYWRkaW5nIFBUUCBjbG9jayBzdXBwb3J0IGZvciB0aGUgTWljcm9jaGlwIEF6dXJpdGUgRFBMTC9QVFAvU3luY0UgZGV2aWNlcy4gVGhlIGNvcmUgaWRlYSBpcyB0byBpbnRyb2R1Y2UgZnVuY3Rpb25zIGZvciByZWFkaW5nIGFuZCB3cml0aW5nIFRpbWUgb2YgRGF5IChUb0QpLCBhZGp1c3RpbmcgcGhhc2UgYW5kIGZyZXF1ZW5jeSwgYW5kIHJlZ2lzdGVyaW5nIGEgUFRQIGNsb2NrIGRldmljZS4gVGhlIGludGVyYWN0aW9uIHdpdGggdGhlIGhhcmR3YXJlIGlzIHN0YW5kYXJkIGZhcmU6IHJlYWRpbmcgYW5kIHdyaXRpbmcgZGV2aWNlIHJlZ2lzdGVycyB2aWEgSTJDIG9yIFNQSSB1c2luZyB0aGUgYHJlZ21hcGAgZnJhbWV3b3JrLiBUaGUgcGF0Y2ggbGV2ZXJhZ2VzIHRoZSBleGlzdGluZyBQVFAgY2xvY2sgc3Vic3lzdGVtLCBwYXNzaW5nIGRhdGEgdGhyb3VnaCBpdCwgc28gdGhlIGRyaXZlciBvbmx5IG5lZWRzIHRvIHdvcnJ5IGFib3V0IHRoZSBjYWxsYmFja3MuIFRoZSBzdWJzeXN0ZW0gaGFuZGxlcyB0aGUgYGlvY3RsYCBjYWxscyBhbmQgdHJhbnNsYXRlcyB0aGVtIGludG8gYHRpbWVzcGVjNjRgIG9yIHNpbWlsYXIgc3RydWN0dXJlcyB0aGF0IHRoZSBkcml2ZXIgY2FuIHVuZGVyc3RhbmQuCgpNeSBpbW1lZGlhdGUgZm9jdXMgaXMgb24gbWVtb3J5IHNhZmV0eTsgc3BlY2lmaWNhbGx5LCBJIG5lZWQgdG8gbWFrZSBzdXJlIHdlJiMzOTtyZSBub3QgaW5hZHZlcnRlbnRseSBsZWFraW5nIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBMZXQmIzM5O3Mgc3RhcnQgd2l0aCBgemwzMDczeF9jaGFuX3RvZF9yZWFkYC4gVGhpcyBmdW5jdGlvbiBwb3B1bGF0ZXMgYSBgc3RydWN0IHRpbWVzcGVjNjRgIHBvaW50ZWQgdG8gYnkgYHRzYC4gVGhlIGZ1bmN0aW9uIHJlYWRzIHNlY29uZHMgYW5kIG5hbm9zZWNvbmRzIGZyb20gZGV2aWNlIHJlZ2lzdGVycy4gSWYgdGhlIHJlYWQgb3BlcmF0aW9ucywgYHpsMzA3M3hfcmVhZF91NDhgIG9yIGB6bDMwNzN4X3JlYWRfdTMyYCwgZmFpbCwgaXQgcmV0dXJucyBhbiBlcnJvciwgYW5kIHRoZSBgdHNgIGlzIG5vdCBmdWxseSBpbml0aWFsaXplZC4gSG93ZXZlciwgdGhlIGNhbGxpbmcgZnVuY3Rpb24gYHpsMzA3M3hfZHBsbF9wdHBfZ2V0dGltZXg2NGAgcHJvcGFnYXRlcyB0aGUgZXJyb3IuIFRoZSBQVFAgc3Vic3lzdGVtIGhhbmRsZXMgdGhlIGVycm9yIGFuZCBkb2VzbiYjMzk7dCBwYXNzIGEgcGFydGlhbGx5IGluaXRpYWxpemVkIGB0c2AgdG8gdXNlciBzcGFjZSwgd2hpY2ggaXMgZ29vZC4gTm8gdW5pbml0aWFsaXplZCBtZW1vcnkgbGVhayBpbiB0aGF0IGNhc2UuCgpUaGVuLCBJJiMzOTttIGNoZWNraW5nIGB6bDMwNzN4X2RwbGxfcHRwX2FkanRpbWVfcGhhc2Vfc3RlcGAuIEhlcmUsIGBzeW50aF9tYXNrYCBpcyBpbml0aWFsaXplZCB0byB6ZXJvLCB3aGljaCBpcyBnb29kLiBJdCBsb29rcyBsaWtlIGl0IGlzIHNhZmUuCgpOZXh0IEkgcmV2aWV3IGB6bDMwNzN4X2NoYW5fdG9kX2FkanVzdGAuIFRoZSBmdW5jdGlvbiByZWFkcyBgdHNfbmV4dGAgYW5kIGB0c19jdXJgIHdpdGggYHpsMzA3M3hfY2hhbl90b2RfcmVhZGAuIFRoZSB2YXJpYWJsZXMgYXJlIGZ1bGx5IGluaXRpYWxpemVkIG9uIHN1Y2Nlc3MuIFNvIGl0IGxvb2tzIHNhZmUuCgpUaGUgcmVnaXN0cmF0aW9uIG9mIHRoZSBQVFAgY2xvY2sgZGV2aWNlIGlzIGFuIGltcG9ydGFudCBhcmVhIHRvIHJldmlldyBmb3IgbWVtb3J5IHNhZmV0eS4gVGhlIHBhdGNoIGRlZmluZXMgYHpsMzA3M3hfZHBsbF9wdHBfY2xvY2tfaW5mb2AsIGEgYHB0cF9jbG9ja19pbmZvYCBzdHJ1Y3QuIFRoZSBkcml2ZXIgY29waWVzIHRoZSBjb250ZW50cyBvZiBgemwzMDczeF9kcGxsX3B0cF9jbG9ja19pbmZvYCBpbnRvIGEgbG9jYWwgYHB0cF9pbmZvYCBzdHJ1Y3QsIGFuZCB0aGVuIG92ZXJ3cml0ZXMgdGhlIG5hbWUgZmllbGQgd2l0aCBhIGNhbGwgdG8gYHNucHJpbnRmYC4gSSBuZWVkIHRvIGVuc3VyZSB0aGVyZSBhcmUgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgbGVha3MuIExvb2tpbmcgYXQgdGhlIGRlZmluaXRpb24sIHRoZSBgbmFtZWAgZmllbGQgaXMgYSBgY2hhciBuYW1lWzE2XWAgYXJyYXkuIERvZXMgYHNucHJpbnRmYCB6ZXJvLXBhZCB0aGUgcmVzdCBvZiB0aGUgYXJyYXk/IEkgcmVtZW1iZXIgdGhhdCBgc25wcmludGZgIHdpbGwgbm90LiBJZiBgemwzMDczeF9kcGxsX3B0cF9jbG9ja19pbmZvLm5hbWVgIHdhc24mIzM5O3QgZnVsbHkgaW5pdGlhbGl6ZWQsIHRoZSB1bmluaXRpYWxpemVkIG1lbW9yeSBjb3VsZCBiZSBsZWFrZWQuIEhvd2V2ZXIsIGB6bDMwNzN4X2RwbGxfcHRwX2Nsb2NrX2luZm9gIGlzIGBzdGF0aWMgY29uc3RgLCBzbyBpdCBpcyB6ZXJvIGluaXRpYWxpemVkIGJ5IHRoZSBjb21waWxlci4gSXQgaXMgemVyby1wYWRkZWQsIGFuZCB0aGVuIGBzbnByaW50ZmAgb3ZlcndyaXRlcyBzb21lIG9mIHRoZSB6ZXJvIHZhbHVlcywgYnV0IHRoZSByZW1haW5pbmcgcGFydCBpcyB6ZXJvLCBzbyBubyBsZWFrLgoKRmluYWxseSwgYHpsMzA3M3hfZHBsbF9hbGxvY2AuIFRoZSBjb2RlIHVzZXMgYGt6YWxsb2Nfb2JqYCwgd2hpY2ggbG9va3Mgc3VzcGljaW91cy4gSXMgaXQgYSBrZXJuZWwgbWFjcm8sIG9yIGEgdHlwbz8gSSBzdXNwZWN0IHRoYXQgaXQgaXMgYSBtYWNybyBmb3IgYGt6YWxsb2Moc2l6ZW9mKCp6bGRwbGwpLCBHRlBfS0VSTkVMKWAuIFNpbmNlIHRoZSBtYWNybyBuYW1lIGNvbnRhaW5zIGB6YWxsb2NgLCBpdCBzaG91bGQgemVybyB0aGUgbWVtb3J5LiBJIG5lZWQgdG8gbWFrZSBzdXJlIHRoaXMgaXMgdGhlIGNhc2UuIExldCBtZSBjaGVjayB0aGUgZGVmaW5pdGlvbiBvZiBga3phbGxvY19vYmpgLgoKT3ZlcmFsbCwgdGhpcyBsb29rcyBsaWtlIGEgd2VsbC1zdHJ1Y3R1cmVkIHBhdGNoIHdpdGggYXR0ZW50aW9uIHRvIG1lbW9yeSBzYWZldHkuIE15IHNwb3QgY2hlY2tzIGhhdmVuJiMzOTt0IHJldmVhbGVkIGFueSBpbW1lZGlhdGUgdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3MsIGJ1dCBJIHdpbGwgaW52ZXN0aWdhdGUgYGt6YWxsb2Nfb2JqYCBmdXJ0aGVyLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMSAxNDowMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtremFsbG9jX29iaiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtcbkZ1bGwgb3V0cHV0IGlzIHRvbyBsb25nLCBzaG93aW5nIDUwMCBvdXQgb2YgNzkyNzkgbGluZXMuXG5Vc2UgbW9yZSBwcmVjaXNlIGV4cHJlc3Npb24gaWYgcG9zc2libGUuXG5cbkRvY3VtZW50YXRpb24vY29yZS1hcGkvbGlzdC5yc3Q9MTAzPWxpc3Q6XG4tLVxuRG9jdW1lbnRhdGlvbi9jb3JlLWFwaS9saXN0LnJzdC0xMTQtXG5Eb2N1bWVudGF0aW9uL2NvcmUtYXBpL2xpc3QucnN0OjExNTogICAgICAgICAgZ3JvY2sgPSBremFsbG9jX29iaigqZ3JvY2spO1xuRG9jdW1lbnRhdGlvbi9jb3JlLWFwaS9saXN0LnJzdC0xMTYtICAgICAgICAgIGlmICghZ3JvY2spXG4tLVxuRG9jdW1lbnRhdGlvbi9jb3JlLWFwaS9saXN0LnJzdC0xMjUtXG5Eb2N1bWVudGF0aW9uL2NvcmUtYXBpL2xpc3QucnN0OjEyNjogICAgICAgICAgZGltaXRyaSA9IGt6YWxsb2Nfb2JqKCpkaW1pdHJpKTtcbkRvY3VtZW50YXRpb24vY29yZS1hcGkvbGlzdC5yc3QtMTI3LSAgICAgICAgICBpZiAoIWRpbWl0cmkpXG4tLVxuRG9jdW1lbnRhdGlvbi9kcml2ZXItYXBpL21haWxib3gucnN0PTQ1PWEgbWVzc2FnZSBhbmQgYSBjYWxsYmFjayBmdW5jdGlvbiB0byB0aGUgQVBJIGFuZCByZXR1cm4gaW1tZWRpYXRlbHkpLlxuLS1cbkRvY3VtZW50YXRpb24vZHJpdmVyLWFwaS9tYWlsYm94LnJzdC04OS1cbkRvY3VtZW50YXRpb24vZHJpdmVyLWFwaS9tYWlsYm94LnJzdDo5MDpcdFx0ZGNfc3luYyA9IGt6YWxsb2Nfb2JqKCpkY19zeW5jKTtcbkRvY3VtZW50YXRpb24vZHJpdmVyLWFwaS9tYWlsYm94LnJzdDo5MTpcdFx0ZGNfYXN5bmMgPSBremFsbG9jX29iaigqZGNfYXN5bmMpO1xuRG9jdW1lbnRhdGlvbi9kcml2ZXItYXBpL21haWxib3gucnN0LTkyLVxuLS1cbkRvY3VtZW50YXRpb24vZHJpdmVyLWFwaS9tZWRpYS92NGwyLWZoLnJzdD0yNj1FeGFtcGxlOlxuLS1cbkRvY3VtZW50YXRpb24vZHJpdmVyLWFwaS9tZWRpYS92NGwyLWZoLnJzdC00NC1cbkRvY3VtZW50YXRpb24vZHJpdmVyLWFwaS9tZWRpYS92NGwyLWZoLnJzdDo0NTpcdFx0bXlfZmggPSBremFsbG9jX29iaigqbXlfZmgpO1xuRG9jdW1lbnRhdGlvbi9kcml2ZXItYXBpL21lZGlhL3Y0bDItZmgucnN0LTQ2LVxuLS1cbkRvY3VtZW50YXRpb24vcHJvY2Vzcy9jb2Rpbmctc3R5bGUucnN0PTkzOD1UaGUga2VybmVsIHByb3ZpZGVzIHRoZSBmb2xsb3dpbmcgZ2VuZXJhbCBwdXJwb3NlIG1lbW9yeSBhbGxvY2F0b3JzOlxuRG9jdW1lbnRhdGlvbi9wcm9jZXNzL2NvZGluZy1zdHlsZS5yc3Q6OTM5OmttYWxsb2MoKSwga3phbGxvYygpLCBrbWFsbG9jX29ianMoKSwga3phbGxvY19vYmpzKCksIHZtYWxsb2MoKSwgYW5kXG5Eb2N1bWVudGF0aW9uL3Byb2Nlc3MvY29kaW5nLXN0eWxlLnJzdC05NDAtdnphbGxvYygpLiAgUGxlYXNlIHJlZmVyIHRvIHRoZSBBUEkgZG9jdW1lbnRhdGlvbiBmb3IgZnVydGhlciBpbmZvcm1hdGlvblxuLS1cbkRvY3VtZW50YXRpb24vcHJvY2Vzcy9jb2Rpbmctc3R5bGUucnN0PTk2ND1UaGUgcHJlZmVycmVkIGZvcm0gZm9yIGFsbG9jYXRpbmcgYSB6ZXJvZWQgYXJyYXkgaXMgdGhlIGZvbGxvd2luZzpcbi0tXG5Eb2N1bWVudGF0aW9uL3Byb2Nlc3MvY29kaW5nLXN0eWxlLnJzdC05NjctXG5Eb2N1bWVudGF0aW9uL3Byb2Nlc3MvY29kaW5nLXN0eWxlLnJzdDo5Njg6XHRwID0ga3phbGxvY19vYmpzKCpwLCBuLCAuLi4pO1xuRG9jdW1lbnRhdGlvbi9wcm9jZXNzL2NvZGluZy1zdHlsZS5yc3QtOTY5LVxuLS1cbkRvY3VtZW50YXRpb24vcHJvY2Vzcy9kZXByZWNhdGVkLnJzdD0zOTg9YmVjb21lLCByZXNwZWN0aXZlbHk6OlxuLS1cbkRvY3VtZW50YXRpb24vcHJvY2Vzcy9kZXByZWNhdGVkLnJzdC00MDAtXHRwdHIgPSBrbWFsbG9jX29iaigqcHRyIFssIGdmcF0gKTtcbkRvY3VtZW50YXRpb24vcHJvY2Vzcy9kZXByZWNhdGVkLnJzdDo0MDE6XHRwdHIgPSBremFsbG9jX29iaigqcHRyIFssIGdmcF0gKTtcbkRvY3VtZW50YXRpb24vcHJvY2Vzcy9kZXByZWNhdGVkLnJzdC00MDItXHRwdHIgPSBrbWFsbG9jX29ianMoKnB0ciwgY291bnQgWywgZ2ZwXSApO1xuRG9jdW1lbnRhdGlvbi9wcm9jZXNzL2RlcHJlY2F0ZWQucnN0OjQwMzpcdHB0ciA9IGt6YWxsb2Nfb2JqcygqcHRyLCBjb3VudCBbLCBnZnBdICk7XG5Eb2N1bWVudGF0aW9uL3Byb2Nlc3MvZGVwcmVjYXRlZC5yc3QtNDA0LVx0cHRyID0ga21hbGxvY19mbGV4KCpwdHIsIGZsZXhfbWVtYmVyLCBjb3VudCBbLCBnZnBdICk7XG4tLVxuRG9jdW1lbnRhdGlvbi9zb3VuZC9rZXJuZWwtYXBpL3dyaXRpbmctYW4tYWxzYS1kcml2ZXIucnN0PTIwOD10byBkZXRhaWxzIGV4cGxhaW5lZCBpbiB0aGUgZm9sbG93aW5nIHNlY3Rpb24uXG4tLVxuRG9jdW1lbnRhdGlvbi9zb3VuZC9rZXJuZWwtYXBpL3dyaXRpbmctYW4tYWxzYS1kcml2ZXIucnN0LTI2OC0gICAgICAgICAgICAgIC8qIGFsbG9jYXRlIGEgY2hpcC1zcGVjaWZpYyBkYXRhIHdpdGggemVybyBmaWxsZWQgKi9cbkRvY3VtZW50YXRpb24vc291bmQva2VybmVsLWFwaS93cml0aW5nLWFuLWFsc2EtZHJpdmVyLnJzdDoyNjk6ICAgICAgICAgICAgICBjaGlwID0ga3phbGxvY19vYmooKmNoaXApO1xuRG9jdW1lbnRhdGlvbi9zb3VuZC9rZXJuZWwtYXBpL3dyaXRpbmctYW4tYWxzYS1kcml2ZXIucnN0LTI3MC0gICAgICAgICAgICAgIGlmIChjaGlwID09IE5VTEwpXG4tLVxuRG9jdW1lbnRhdGlvbi9zb3VuZC9rZXJuZWwtYXBpL3dyaXRpbmctYW4tYWxzYS1kcml2ZXIucnN0PTYyMz1BZnRlciBhbGxvY2F0aW5nIGEgY2FyZCBpbnN0YW5jZSB2aWEgOmM6ZnVuYzpgc25kX2NhcmRfbmV3KClgXG4tLVxuRG9jdW1lbnRhdGlvbi9zb3VuZC9rZXJuZWwtYXBpL3dyaXRpbmctYW4tYWxzYS1kcml2ZXIucnN0LTYzMC0gIC4uLi4uXG5Eb2N1bWVudGF0aW9uL3NvdW5kL2tlcm5lbC1hcGkvd3JpdGluZy1hbi1hbHNhLWRyaXZlci5yc3Q6NjMxOiAgY2hpcCA9IGt6YWxsb2Nfb2JqKCpjaGlwKTtcbkRvY3VtZW50YXRpb24vc291bmQva2VybmVsLWFwaS93cml0aW5nLWFuLWFsc2EtZHJpdmVyLnJzdC02MzItXG4tLVxuRG9jdW1lbnRhdGlvbi9zb3VuZC9rZXJuZWwtYXBpL3dyaXRpbmctYW4tYWxzYS1kcml2ZXIucnN0PTY5OD1kZXN0cnVjdG9yIGFuZCBQQ0kgZW50cmllcy4gRXhhbXBsZSBjb2RlIGlzIHNob3duIGZpcnN0LCBiZWxvdzo6XG4tLVxuRG9jdW1lbnRhdGlvbi9zb3VuZC9rZXJuZWwtYXBpL3dyaXRpbmctYW4tYWxzYS1kcml2ZXIucnN0LTc0OS1cbkRvY3VtZW50YXRpb24vc291bmQva2VybmVsLWFwaS93cml0aW5nLWFuLWFsc2EtZHJpdmVyLnJzdDo3NTA6ICAgICAgICAgICAgICBjaGlwID0ga3phbGxvY19vYmooKmNoaXApO1xuRG9jdW1lbnRhdGlvbi9zb3VuZC9rZXJuZWwtYXBpL3dyaXRpbmctYW4tYWxzYS1kcml2ZXIucnN0LTc1MS0gICAgICAgICAgICAgIGlmIChjaGlwID09IE5VTEwpIHtcbi0tXG5Eb2N1bWVudGF0aW9uL3NvdW5kL2tlcm5lbC1hcGkvd3JpdGluZy1hbi1hbHNhLWRyaXZlci5yc3Q9MzgyMz1jaGlwIGRhdGEgaW5kaXZpZHVhbGx5Ojpcbi0tXG5Eb2N1bWVudGF0aW9uL3NvdW5kL2tlcm5lbC1hcGkvd3JpdGluZy1hbi1hbHNhLWRyaXZlci5yc3QtMzgzNS0gICAgICAgICAgLi4uLlxuRG9jdW1lbnRhdGlvbi9zb3VuZC9rZXJuZWwtYXBpL3dyaXRpbmctYW4tYWxzYS1kcml2ZXIucnN0OjM4MzY6ICAgICAgICAgIGNoaXAgPSBremFsbG9jX29iaigqY2hpcCk7XG5Eb2N1bWVudGF0aW9uL3NvdW5kL2tlcm5lbC1hcGkvd3JpdGluZy1hbi1hbHNhLWRyaXZlci5yc3QtMzgzNy0gICAgICAgICAgLi4uLlxuLS1cbkRvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL3poX0NOL3ZpZGVvNGxpbnV4L3Y0bDItZnJhbWV3b3JrLnR4dD03OTQ9aW50IG15X29wZW4oc3RydWN0IGZpbGUgKmZpbGUpXG4tLVxuRG9jdW1lbnRhdGlvbi90cmFuc2xhdGlvbnMvemhfQ04vdmlkZW80bGludXgvdjRsMi1mcmFtZXdvcmsudHh0LTgwMS1cbkRvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL3poX0NOL3ZpZGVvNGxpbnV4L3Y0bDItZnJhbWV3b3JrLnR4dDo4MDI6XHRteV9maCA9IGt6YWxsb2Nfb2JqKCpteV9maCk7XG5Eb2N1bWVudGF0aW9uL3RyYW5zbGF0aW9ucy96aF9DTi92aWRlbzRsaW51eC92NGwyLWZyYW1ld29yay50eHQtODAzLVxuLS1cbmFyY2gvYWxwaGEva2VybmVsL21vZHVsZS5jPTY0PW1vZHVsZV9mcm9iX2FyY2hfc2VjdGlvbnMoRWxmNjRfRWhkciAqaGRyLCBFbGY2NF9TaGRyICpzZWNoZHJzLFxuLS1cbmFyY2gvYWxwaGEva2VybmVsL21vZHVsZS5jLTk1LVx0bnN5bXMgPSBzeW10YWItXHUwMDNlc2hfc2l6ZSAvIHNpemVvZihFbGY2NF9TeW0pO1xuYXJjaC9hbHBoYS9rZXJuZWwvbW9kdWxlLmM6OTY6XHRjaGFpbnMgPSBremFsbG9jX29ianMoc3RydWN0IGdvdF9lbnRyeSwgbnN5bXMpO1xuYXJjaC9hbHBoYS9rZXJuZWwvbW9kdWxlLmMtOTctXHRpZiAoIWNoYWlucykge1xuLS1cbmFyY2gvYWxwaGEva2VybmVsL3NldHVwLmM9MzkwPXJlZ2lzdGVyX2NwdXModm9pZClcbi0tXG5hcmNoL2FscGhhL2tlcm5lbC9zZXR1cC5jLTM5NC1cdGZvcl9lYWNoX3Bvc3NpYmxlX2NwdShpKSB7XG5hcmNoL2FscGhhL2tlcm5lbC9zZXR1cC5jOjM5NTpcdFx0c3RydWN0IGNwdSAqcCA9IGt6YWxsb2Nfb2JqKCpwKTtcbmFyY2gvYWxwaGEva2VybmVsL3NldHVwLmMtMzk2LVx0XHRpZiAoIXApXG4tLVxuYXJjaC9hcmMvbmV0L2JwZl9qaXRfY29yZS5jPTExMjA9c3RhdGljIGludCBqaXRfcHJlcGFyZV9maW5hbF9tZW1fYWxsb2Moc3RydWN0IGppdF9jb250ZXh0ICpjdHgpXG4tLVxuYXJjaC9hcmMvbmV0L2JwZl9qaXRfY29yZS5jLTExMzEtXHRpZiAoY3R4LVx1MDAzZW5lZWRfZXh0cmFfcGFzcykge1xuYXJjaC9hcmMvbmV0L2JwZl9qaXRfY29yZS5jOjExMzI6XHRcdGN0eC1cdTAwM2VqaXRfZGF0YSA9IGt6YWxsb2Nfb2JqKCpjdHgtXHUwMDNlaml0X2RhdGEpO1xuYXJjaC9hcmMvbmV0L2JwZl9qaXRfY29yZS5jLTExMzMtXHRcdGlmICghY3R4LVx1MDAzZWppdF9kYXRhKVxuLS1cbmFyY2gvYXJtL2NvbW1vbi9sb2NvbW8uYz0yMjA9bG9jb21vX2luaXRfb25lX2NoaWxkKHN0cnVjdCBsb2NvbW8gKmxjaGlwLCBzdHJ1Y3QgbG9jb21vX2Rldl9pbmZvICppbmZvKVxuLS1cbmFyY2gvYXJtL2NvbW1vbi9sb2NvbW8uYy0yMjQtXG5hcmNoL2FybS9jb21tb24vbG9jb21vLmM6MjI1Olx0ZGV2ID0ga3phbGxvY19vYmooc3RydWN0IGxvY29tb19kZXYpO1xuYXJjaC9hcm0vY29tbW9uL2xvY29tby5jLTIyNi1cdGlmICghZGV2KSB7XG4tLVxuYXJjaC9hcm0vY29tbW9uL2xvY29tby5jPTM1Nj1fX2xvY29tb19wcm9iZShzdHJ1Y3QgZGV2aWNlICptZSwgc3RydWN0IHJlc291cmNlICptZW0sIGludCBpcnEpXG4tLVxuYXJjaC9hcm0vY29tbW9uL2xvY29tby5jLTM2Mi1cbmFyY2gvYXJtL2NvbW1vbi9sb2NvbW8uYzozNjM6XHRsY2hpcCA9IGt6YWxsb2Nfb2JqKHN0cnVjdCBsb2NvbW8pO1xuYXJjaC9hcm0vY29tbW9uL2xvY29tby5jLTM2NC1cdGlmICghbGNoaXApXG4tLVxuYXJjaC9hcm0vY29tbW9uL3NhMTExMS5jPTczMz1zYTExMTFfaW5pdF9vbmVfY2hpbGQoc3RydWN0IHNhMTExMSAqc2FjaGlwLCBzdHJ1Y3QgcmVzb3VyY2UgKnBhcmVudCxcbi0tXG5hcmNoL2FybS9jb21tb24vc2ExMTExLmMtNzM5LVxuYXJjaC9hcm0vY29tbW9uL3NhMTExMS5jOjc0MDpcdGRldiA9IGt6YWxsb2Nfb2JqKHN0cnVjdCBzYTExMTFfZGV2KTtcbmFyY2gvYXJtL2NvbW1vbi9zYTExMTEuYy03NDEtXHRpZiAoIWRldikge1xuLS1cbmFyY2gvYXJtL2NvbW1vbi9zY29vcC5jPTE3OD1zdGF0aWMgaW50IHNjb29wX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpXG4tLVxuYXJjaC9hcm0vY29tbW9uL3Njb29wLmMtMTg3LVxuYXJjaC9hcm0vY29tbW9uL3Njb29wLmM6MTg4Olx0ZGV2cHRyID0ga3phbGxvY19vYmooc3RydWN0IHNjb29wX2Rldik7XG5hcmNoL2FybS9jb21tb24vc2Nvb3AuYy0xODktXHRpZiAoIWRldnB0cilcbi0tXG5hcmNoL2FybS9rZXJuZWwvc21wLmM9MTA4PXN0YXRpYyBpbnQgc2Vjb25kYXJ5X2JpZ2xpdHRsZV9wcmVwYXJlKHVuc2lnbmVkIGludCBjcHUpXG4tLVxuYXJjaC9hcm0va2VybmVsL3NtcC5jLTExMC1cdGlmICghY3B1X3Z0YWJsZVtjcHVdKVxuYXJjaC9hcm0va2VybmVsL3NtcC5jOjExMTpcdFx0Y3B1X3Z0YWJsZVtjcHVdID0ga3phbGxvY19vYmooKmNwdV92dGFibGVbY3B1XSk7XG5hcmNoL2FybS9rZXJuZWwvc21wLmMtMTEyLVxuLS1cbmFyY2gvYXJtL2tlcm5lbC92ZHNvLmM9MTY5PXN0YXRpYyBpbnQgX19pbml0IHZkc29faW5pdCh2b2lkKVxuLS1cbmFyY2gvYXJtL2tlcm5lbC92ZHNvLmMtMTgxLVx0LyogQWxsb2NhdGUgdGhlIFZEU08gdGV4dCBwYWdlbGlzdCAqL1xuYXJjaC9hcm0va2VybmVsL3Zkc28uYzoxODI6XHR2ZHNvX3RleHRfcGFnZWxpc3QgPSBremFsbG9jX29ianMoc3RydWN0IHBhZ2UgKiwgdGV4dF9wYWdlcyk7XG5hcmNoL2FybS9rZXJuZWwvdmRzby5jLTE4My1cdGlmICh2ZHNvX3RleHRfcGFnZWxpc3QgPT0gTlVMTClcbi0tXG5hcmNoL2FybS9tYWNoLWZvb3RicmlkZ2UvZGMyMTI4NS5jPTI2MT1pbnQgX19pbml0IGRjMjEyODVfc2V0dXAoaW50IG5yLCBzdHJ1Y3QgcGNpX3N5c19kYXRhICpzeXMpXG4tLVxuYXJjaC9hcm0vbWFjaC1mb290YnJpZGdlL2RjMjEyODUuYy0yNjQtXG5hcmNoL2FybS9tYWNoLWZvb3RicmlkZ2UvZGMyMTI4NS5jOjI2NTpcdHJlcyA9IGt6YWxsb2Nfb2JqcyhzdHJ1Y3QgcmVzb3VyY2UsIDIpO1xuYXJjaC9hcm0vbWFjaC1mb290YnJpZGdlL2RjMjEyODUuYy0yNjYtXHRpZiAoIXJlcykge1xuLS1cbmFyY2gvYXJtL21hY2gtZm9vdGJyaWRnZS9lYnNhMjg1LmM9Njk9c3RhdGljIGludCBfX2luaXQgZWJzYTI4NV9sZWRzX2luaXQodm9pZClcbi0tXG5hcmNoL2FybS9tYWNoLWZvb3RicmlkZ2UvZWJzYTI4NS5jLTg2LVxuYXJjaC9hcm0vbWFjaC1mb290YnJpZGdlL2Vic2EyODUuYzo4NzpcdFx0bGVkID0ga3phbGxvY19vYmooKmxlZCk7XG5hcmNoL2FybS9tYWNoLWZvb3RicmlkZ2UvZWJzYTI4NS5jLTg4LVx0XHRpZiAoIWxlZClcbi0tXG5hcmNoL2FybS9tYWNoLWZvb3RicmlkZ2UvbmV0d2luZGVyLWh3LmM9NzIwPXN0YXRpYyBpbnQgX19pbml0IG5ldHdpbmRlcl9sZWRzX2luaXQodm9pZClcbi0tXG5hcmNoL2FybS9tYWNoLWZvb3RicmlkZ2UvbmV0d2luZGVyLWh3LmMtNzI5LVxuYXJjaC9hcm0vbWFjaC1mb290YnJpZGdlL25ldHdpbmRlci1ody5jOjczMDpcdFx0bGVkID0ga3phbGxvY19vYmooKmxlZCk7XG5hcmNoL2FybS9tYWNoLWZvb3RicmlkZ2UvbmV0d2luZGVyLWh3LmMtNzMxLVx0XHRpZiAoIWxlZClcbi0tXG5hcmNoL2FybS9tYWNoLWlteC9tbWRjLmM9NDczPXN0YXRpYyBpbnQgaW14X21tZGNfcGVyZl9pbml0KHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYsIHZvaWQgX19pb21lbSAqbW1kY19iYXNlLFxuLS1cbmFyY2gvYXJtL21hY2gtaW14L21tZGMuYy00NzktXG5hcmNoL2FybS9tYWNoLWlteC9tbWRjLmM6NDgwOlx0cG11X21tZGMgPSBremFsbG9jX29iaigqcG11X21tZGMpO1xuYXJjaC9hcm0vbWFjaC1pbXgvbW1kYy5jLTQ4MS1cdGlmICghcG11X21tZGMpIHtcbi0tXG5hcmNoL2FybS9tYWNoLW12ZWJ1L2JvYXJkLXY3LmM9MTE0PXN0YXRpYyB2b2lkIF9faW5pdCBpMmNfcXVpcmsodm9pZClcbi0tXG5hcmNoL2FybS9tYWNoLW12ZWJ1L2JvYXJkLXY3LmMtMTI5LVxuYXJjaC9hcm0vbWFjaC1tdmVidS9ib2FyZC12Ny5jOjEzMDpcdFx0bmV3X2NvbXBhdCA9IGt6YWxsb2Nfb2JqKCpuZXdfY29tcGF0KTtcbmFyY2gvYXJtL21hY2gtbXZlYnUvYm9hcmQtdjcuYy0xMzEtXG4tLVxuYXJjaC9hcm0vbWFjaC1tdmVidS9jb2hlcmVuY3kuYz0xNjM9c3RhdGljIHZvaWQgX19pbml0IGFybWFkYV8zNzVfMzgwX2NvaGVyZW5jeV9pbml0KHN0cnVjdCBkZXZpY2Vfbm9kZSAqbnApXG4tLVxuYXJjaC9hcm0vbWFjaC1tdmVidS9jb2hlcmVuY3kuYy0xODctXG5hcmNoL2FybS9tYWNoLW12ZWJ1L2NvaGVyZW5jeS5jOjE4ODpcdFx0cCA9IGt6YWxsb2Nfb2JqKCpwKTtcbmFyY2gvYXJtL21hY2gtbXZlYnUvY29oZXJlbmN5LmMtMTg5LVx0XHRwLVx1MDAzZW5hbWUgPSBrc3RyZHVwKFwmIzM0O2FybSxpby1jb2hlcmVudFwmIzM0OywgR0ZQX0tFUk5FTCk7XG4tLVxuYXJjaC9hcm0vbWFjaC1tdmVidS9tdmVidS1zb2MtaWQuYz0xNDg9c3RhdGljIGludCBfX2luaXQgbXZlYnVfc29jX2RldmljZSh2b2lkKVxuLS1cbmFyY2gvYXJtL21hY2gtbXZlYnUvbXZlYnUtc29jLWlkLmMtMTU2LVxuYXJjaC9hcm0vbWFjaC1tdmVidS9tdmVidS1zb2MtaWQuYzoxNTc6XHRzb2NfZGV2X2F0dHIgPSBremFsbG9jX29iaigqc29jX2Rldl9hdHRyKTtcbmFyY2gvYXJtL21hY2gtbXZlYnUvbXZlYnUtc29jLWlkLmMtMTU4LVx0aWYgKCFzb2NfZGV2X2F0dHIpXG4tLVxuYXJjaC9hcm0vbWFjaC1teHMvbWFjaC1teHMuYz0zODA9c3RhdGljIHZvaWQgX19pbml0IG14c19tYWNoaW5lX2luaXQodm9pZClcbi0tXG5hcmNoL2FybS9tYWNoLW14cy9tYWNoLW14cy5jLTM4OS1cbmFyY2gvYXJtL21hY2gtbXhzL21hY2gtbXhzLmM6MzkwOlx0c29jX2Rldl9hdHRyID0ga3phbGxvY19vYmooKnNvY19kZXZfYXR0cik7XG5hcmNoL2FybS9tYWNoLW14cy9tYWNoLW14cy5jLTM5MS1cdGlmICghc29jX2Rldl9hdHRyKVxuLS1cbmFyY2gvYXJtL21hY2gtb21hcDEvZG1hLmM9Mjk0PXN0YXRpYyBpbnQgX19pbml0IG9tYXAxX3N5c3RlbV9kbWFfaW5pdCh2b2lkKVxuLS1cbmFyY2gvYXJtL21hY2gtb21hcDEvZG1hLmMtMzIxLVxuYXJjaC9hcm0vbWFjaC1vbWFwMS9kbWEuYzozMjI6XHRkID0ga3phbGxvY19vYmooKmQpO1xuYXJjaC9hcm0vbWFjaC1vbWFwMS9kbWEuYy0zMjMtXHRpZiAoIWQpIHtcbi0tXG5hcmNoL2FybS9tYWNoLW9tYXAxL21jYnNwLmM9MjkyPXN0YXRpYyB2b2lkIG9tYXBfbWNic3BfcmVnaXN0ZXJfYm9hcmRfY2ZnKHN0cnVjdCByZXNvdXJjZSAqcmVzLCBpbnQgcmVzX2NvdW50LFxuLS1cbmFyY2gvYXJtL21hY2gtb21hcDEvbWNic3AuYy0yOTYtXG5hcmNoL2FybS9tYWNoLW9tYXAxL21jYnNwLmM6Mjk3Olx0b21hcF9tY2JzcF9kZXZpY2VzID0ga3phbGxvY19vYmpzKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKiwgc2l6ZSk7XG5hcmNoL2FybS9tYWNoLW9tYXAxL21jYnNwLmMtMjk4LVx0aWYgKCFvbWFwX21jYnNwX2RldmljZXMpIHtcbi0tXG5hcmNoL2FybS9tYWNoLW9tYXAxL3RpbWVyLmM9NTE9c3RhdGljIGludCBfX2luaXQgb21hcDFfZG1fdGltZXJfaW5pdCh2b2lkKVxuLS1cbmFyY2gvYXJtL21hY2gtb21hcDEvdGltZXIuYy0xMjctXG5hcmNoL2FybS9tYWNoLW9tYXAxL3RpbWVyLmM6MTI4Olx0XHRwZGF0YSA9IGt6YWxsb2Nfb2JqKCpwZGF0YSk7XG5hcmNoL2FybS9tYWNoLW9tYXAxL3RpbWVyLmMtMTI5LVx0XHRpZiAoIXBkYXRhKSB7XG4tLVxuYXJjaC9hcm0vbWFjaC1vbWFwMi9jbGt0Mnh4eF92aXJ0X3ByY21fc2V0LmM9MjMwPXZvaWQgb21hcDJ4eHhfY2xrdF92cHNfaW5pdCh2b2lkKVxuLS1cbmFyY2gvYXJtL21hY2gtb21hcDIvY2xrdDJ4eHhfdmlydF9wcmNtX3NldC5jLTIzOS1cbmFyY2gvYXJtL21hY2gtb21hcDIvY2xrdDJ4eHhfdmlydF9wcmNtX3NldC5jOjI0MDpcdGh3ID0ga3phbGxvY19vYmooKmh3KTtcbmFyY2gvYXJtL21hY2gtb21hcDIvY2xrdDJ4eHhfdmlydF9wcmNtX3NldC5jLTI0MS1cdGlmICghaHcpXG4tLVxuYXJjaC9hcm0vbWFjaC1vbWFwMi9pZC5jPTc4Nj12b2lkIF9faW5pdCBvbWFwX3NvY19kZXZpY2VfaW5pdCh2b2lkKVxuLS1cbmFyY2gvYXJtL21hY2gtb21hcDIvaWQuYy03OTAtXG5hcmNoL2FybS9tYWNoLW9tYXAyL2lkLmM6NzkxOlx0c29jX2Rldl9hdHRyID0ga3phbGxvY19vYmooKnNvY19kZXZfYXR0cik7XG5hcmNoL2FybS9tYWNoLW9tYXAyL2lkLmMtNzkyLVx0aWYgKCFzb2NfZGV2X2F0dHIpXG4tLVxuYXJjaC9hcm0vbWFjaC1vbWFwMi9vbWFwX2RldmljZS5jPTEzMT1zdGF0aWMgaW50IG9tYXBfZGV2aWNlX2J1aWxkX2Zyb21fZHQoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldilcbi0tXG5hcmNoL2FybS9tYWNoLW9tYXAyL29tYXBfZGV2aWNlLmMtMTU4LVxuYXJjaC9hcm0vbWFjaC1vbWFwMi9vbWFwX2RldmljZS5jOjE1OTpcdGh3bW9kcyA9IGt6YWxsb2Nfb2JqcyhzdHJ1Y3Qgb21hcF9od21vZCAqLCBvaF9jbnQpO1xuYXJjaC9hcm0vbWFjaC1vbWFwMi9vbWFwX2RldmljZS5jLTE2MC1cdGlmICghaHdtb2RzKSB7XG4tLVxuYXJjaC9hcm0vbWFjaC1vbWFwMi9vbWFwX2h3bW9kLmM9MzM4MT1zdGF0aWMgaW50IG9tYXBfaHdtb2RfYWxsb2NhdGVfbW9kdWxlKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IG9tYXBfaHdtb2QgKm9oLFxuLS1cbmFyY2gvYXJtL21hY2gtb21hcDIvb21hcF9od21vZC5jLTMzOTQtXG5hcmNoL2FybS9tYWNoLW9tYXAyL29tYXBfaHdtb2QuYzozMzk1Olx0c3lzYyA9IGt6YWxsb2Nfb2JqKCpzeXNjKTtcbmFyY2gvYXJtL21hY2gtb21hcDIvb21hcF9od21vZC5jLTMzOTYtXHRpZiAoIXN5c2MpXG4tLVxuYXJjaC9hcm0vbWFjaC1vbWFwMi9vbWFwX2h3bW9kLmMtMzQyNC1cdGlmIChsaXN0X2VtcHR5KFx1MDAyNm9oLVx1MDAzZXNsYXZlX3BvcnRzKSkge1xuYXJjaC9hcm0vbWFjaC1vbWFwMi9vbWFwX2h3bW9kLmM6MzQyNTpcdFx0b2kgPSBremFsbG9jX29iaigqb2kpO1xuYXJjaC9hcm0vbWFjaC1vbWFwMi9vbWFwX2h3bW9kLmMtMzQyNi1cdFx0aWYgKCFvaSlcbi0tXG5hcmNoL2FybS9tYWNoLW9tYXAyL29tYXBfaHdtb2QuYz0zNTEzPWludCBvbWFwX2h3bW9kX2luaXRfbW9kdWxlKHN0cnVjdCBkZXZpY2UgKmRldixcbi0tXG5hcmNoL2FybS9tYWNoLW9tYXAyL29tYXBfaHdtb2QuYy0zNTI3LVx0aWYgKCFvaCkge1xuYXJjaC9hcm0vbWFjaC1vbWFwMi9vbWFwX2h3bW9kLmM6MzUyODpcdFx0b2ggPSBremFsbG9jX29iaigqb2gpO1xuYXJjaC9hcm0vbWFjaC1vbWFwMi9vbWFwX2h3bW9kLmMtMzUyOS1cdFx0aWYgKCFvaClcbi0tXG5hcmNoL2FybS9tYWNoLW9tYXAyL29tYXBfaHdtb2QuYy0zNTM4LVxuYXJjaC9hcm0vbWFjaC1vbWFwMi9vbWFwX2h3bW9kLmM6MzUzOTpcdFx0b2gtXHUwMDNlY2xhc3MgPSBremFsbG9jX29iaigqb2gtXHUwMDNlY2xhc3MpO1xuYXJjaC9hcm0vbWFjaC1vbWFwMi9vbWFwX2h3bW9kLmMtMzU0MC1cdFx0aWYgKCFvaC1cdTAwM2VjbGFzcykge1xuLS1cbmFyY2gvYXJtL21hY2gtb21hcDIvcG0zM3h4LWNvcmUuYz0zNzk9c3RhdGljIGludCBfX2luaXQgYW14M19pZGxlX2luaXQoc3RydWN0IGRldmljZV9ub2RlICpjcHVfbm9kZSwgaW50IGNwdSlcbi0tXG5hcmNoL2FybS9tYWNoLW9tYXAyL3BtMzN4eC1jb3JlLmMtNDEyLVxuYXJjaC9hcm0vbWFjaC1vbWFwMi9wbTMzeHgtY29yZS5jOjQxMzpcdGlkbGVfc3RhdGVzID0ga3phbGxvY19vYmpzKCppZGxlX3N0YXRlcywgc3RhdGVfY291bnQpO1xuYXJjaC9hcm0vbWFjaC1vbWFwMi9wbTMzeHgtY29yZS5jLTQxNC1cdGlmICghaWRsZV9zdGF0ZXMpXG4tLVxuYXJjaC9hcm0vbWFjaC1vbWFwMi9zcl9kZXZpY2UuYz0zMD1zdGF0aWMgdm9pZCBfX2luaXQgc3Jfc2V0X252YWx1ZXMoc3RydWN0IG9tYXBfdm9sdF9kYXRhICp2b2x0X2RhdGEsXG4tLVxuYXJjaC9hcm0vbWFjaC1vbWFwMi9zcl9kZXZpY2UuYy00MS1cbmFyY2gvYXJtL21hY2gtb21hcDIvc3JfZGV2aWNlLmM6NDI6XHRudmFsdWVfdGFibGUgPSBremFsbG9jX29ianMoKm52YWx1ZV90YWJsZSwgY291bnQpO1xuYXJjaC9hcm0vbWFjaC1vbWFwMi9zcl9kZXZpY2UuYy00My1cdGlmICghbnZhbHVlX3RhYmxlKVxuLS1cbmFyY2gvYXJtL21hY2gtb3Jpb241eC9wY2kuYz0xMzk9c3RhdGljIGludCBfX2luaXQgcGNpZV9zZXR1cChzdHJ1Y3QgcGNpX3N5c19kYXRhICpzeXMpXG4tLVxuYXJjaC9hcm0vbWFjaC1vcmlvbjV4L3BjaS5jLTE3MS1cdCAqL1xuYXJjaC9hcm0vbWFjaC1vcmlvbjV4L3BjaS5jOjE3MjpcdHJlcyA9IGt6YWxsb2Nfb2JqKHN0cnVjdCByZXNvdXJjZSk7XG5hcmNoL2FybS9tYWNoLW9yaW9uNXgvcGNpLmMtMTczLVx0aWYgKCFyZXMpXG4tLVxuYXJjaC9hcm0vbWFjaC1vcmlvbjV4L3BjaS5jPTQ2Nj1zdGF0aWMgaW50IF9faW5pdCBwY2lfc2V0dXAoc3RydWN0IHBjaV9zeXNfZGF0YSAqc3lzKVxuLS1cbmFyY2gvYXJtL21hY2gtb3Jpb241eC9wY2kuYy00OTItXHQgKi9cbmFyY2gvYXJtL21hY2gtb3Jpb241eC9wY2kuYzo0OTM6XHRyZXMgPSBremFsbG9jX29iaihzdHJ1Y3QgcmVzb3VyY2UpO1xuYXJjaC9hcm0vbWFjaC1vcmlvbjV4L3BjaS5jLTQ5NC1cdGlmICghcmVzKVxuLS1cbmFyY2gvYXJtL21hY2gtcnBjL2VjYXJkLmM9Njg5PXN0YXRpYyBzdHJ1Y3QgZXhwYW5zaW9uX2NhcmQgKl9faW5pdCBlY2FyZF9hbGxvY19jYXJkKGludCB0eXBlLCBpbnQgc2xvdClcbi0tXG5hcmNoL2FybS9tYWNoLXJwYy9lY2FyZC5jLTY5NC1cbmFyY2gvYXJtL21hY2gtcnBjL2VjYXJkLmM6Njk1Olx0ZWMgPSBremFsbG9jX29iaihlY2FyZF90KTtcbmFyY2gvYXJtL21hY2gtcnBjL2VjYXJkLmMtNjk2LVx0aWYgKCFlYykge1xuLS1cbmFyY2gvYXJtL21hY2gtc2ExMTAwL2Nsb2NrLmM9OTM9aW50IF9faW5pdCBzYTExeHhfY2xrX2luaXQodm9pZClcbi0tXG5hcmNoL2FybS9tYWNoLXNhMTEwMC9jbG9jay5jLTEwOS1cbmFyY2gvYXJtL21hY2gtc2ExMTAwL2Nsb2NrLmM6MTEwOlx0aHcgPSBremFsbG9jX29iaigqaHcpO1xuYXJjaC9hcm0vbWFjaC1zYTExMDAvY2xvY2suYy0xMTEtXHRpZiAoIWh3KVxuLS1cbmFyY2gvYXJtL21hY2gtc2ExMTAwL2Nsb2NrLmMtMTMxLVxuYXJjaC9hcm0vbWFjaC1zYTExMDAvY2xvY2suYzoxMzI6XHRodyA9IGt6YWxsb2Nfb2JqKCpodyk7XG5hcmNoL2FybS9tYWNoLXNhMTEwMC9jbG9jay5jLTEzMy1cdGlmICghaHcpXG4tLVxuYXJjaC9hcm0vbWFjaC1zYTExMDAvZ2VuZXJpYy5jPTMxNz1pbnQgX19pbml0IHNhMTF4MF9yZWdpc3Rlcl9maXhlZF9yZWd1bGF0b3IoaW50IG4sXG4tLVxuYXJjaC9hcm0vbWFjaC1zYTExMDAvZ2VuZXJpYy5jLTMyMy1cbmFyY2gvYXJtL21hY2gtc2ExMTAwL2dlbmVyaWMuYzozMjQ6XHRjZmctXHUwMDNlaW5pdF9kYXRhID0gaWQgPSBremFsbG9jX29iaigqY2ZnLVx1MDAzZWluaXRfZGF0YSk7XG5hcmNoL2FybS9tYWNoLXNhMTEwMC9nZW5lcmljLmMtMzI1LVx0aWYgKCFjZmctXHUwMDNlaW5pdF9kYXRhKVxuLS1cbmFyY2gvYXJtL21hY2gtc2ExMTAwL25lcG9uc2V0LmM9MjI1PXN0YXRpYyBpbnQgbmVwb25zZXRfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGV2KVxuLS1cbmFyY2gvYXJtL21hY2gtc2ExMTAwL25lcG9uc2V0LmMtMjc4LVxuYXJjaC9hcm0vbWFjaC1zYTExMDAvbmVwb25zZXQuYzoyNzk6XHRkID0ga3phbGxvY19vYmooKmQpO1xuYXJjaC9hcm0vbWFjaC1zYTExMDAvbmVwb25zZXQuYy0yODAtXHRpZiAoIWQpIHtcbi0tXG5hcmNoL2FybS9tYWNoLXNobW9iaWxlL3JlZ3VsYXRvci1xdWlyay1yY2FyLWdlbjIuYz0xNDE9c3RhdGljIGludCBfX2luaXQgcmNhcl9nZW4yX3JlZ3VsYXRvcl9xdWlyayh2b2lkKVxuLS1cbmFyY2gvYXJtL21hY2gtc2htb2JpbGUvcmVndWxhdG9yLXF1aXJrLXJjYXItZ2VuMi5jLTE2Ni1cbmFyY2gvYXJtL21hY2gtc2htb2JpbGUvcmVndWxhdG9yLXF1aXJrLXJjYXItZ2VuMi5jOjE2NzpcdFx0cXVpcmsgPSBremFsbG9jX29iaigqcXVpcmspO1xuYXJjaC9hcm0vbWFjaC1zaG1vYmlsZS9yZWd1bGF0b3ItcXVpcmstcmNhci1nZW4yLmMtMTY4LVx0XHRpZiAoIXF1aXJrKSB7XG4tLVxuYXJjaC9hcm0vbWFjaC12ZXJzYXRpbGUvc3BjLmM9MzkzPXN0YXRpYyBpbnQgdmVfc3BjX3BvcHVsYXRlX29wcHModWludDMyX3QgY2x1c3Rlcilcbi0tXG5hcmNoL2FybS9tYWNoLXZlcnNhdGlsZS9zcGMuYy0zOTctXG5hcmNoL2FybS9tYWNoLXZlcnNhdGlsZS9zcGMuYzozOTg6XHRvcHBzID0ga3phbGxvY19vYmpzKCpvcHBzLCBNQVhfT1BQUyk7XG5hcmNoL2FybS9tYWNoLXZlcnNhdGlsZS9zcGMuYy0zOTktXHRpZiAoIW9wcHMpXG4tLVxuYXJjaC9hcm0vbWFjaC12ZXJzYXRpbGUvc3BjLmM9NDQyPWludCBfX2luaXQgdmVfc3BjX2luaXQodm9pZCBfX2lvbWVtICpiYXNlYWRkciwgdTMyIGExNV9jbHVzaWQsIGludCBpcnEpXG4tLVxuYXJjaC9hcm0vbWFjaC12ZXJzYXRpbGUvc3BjLmMtNDQ0LVx0aW50IHJldDtcbmFyY2gvYXJtL21hY2gtdmVyc2F0aWxlL3NwYy5jOjQ0NTpcdGluZm8gPSBremFsbG9jX29iaigqaW5mbyk7XG5hcmNoL2FybS9tYWNoLXZlcnNhdGlsZS9zcGMuYy00NDYtXHRpZiAoIWluZm8pXG4tLVxuYXJjaC9hcm0vbWFjaC12ZXJzYXRpbGUvc3BjLmM9NTIzPXN0YXRpYyBzdHJ1Y3QgY2xrICp2ZV9zcGNfY2xrX3JlZ2lzdGVyKHN0cnVjdCBkZXZpY2UgKmNwdV9kZXYpXG4tLVxuYXJjaC9hcm0vbWFjaC12ZXJzYXRpbGUvc3BjLmMtNTI3LVxuYXJjaC9hcm0vbWFjaC12ZXJzYXRpbGUvc3BjLmM6NTI4Olx0c3BjID0ga3phbGxvY19vYmooKnNwYyk7XG5hcmNoL2FybS9tYWNoLXZlcnNhdGlsZS9zcGMuYy01MjktXHRpZiAoIXNwYylcbi0tXG5hcmNoL2FybS9tYWNoLXZlcnNhdGlsZS92ZXJzYXRpbGUuYz0xMjM9c3RhdGljIHZvaWQgX19pbml0IHZlcnNhdGlsZV9kdF9wY2lfaW5pdCh2b2lkKVxuLS1cbmFyY2gvYXJtL21hY2gtdmVyc2F0aWxlL3ZlcnNhdGlsZS5jLTE0NC1cbmFyY2gvYXJtL21hY2gtdmVyc2F0aWxlL3ZlcnNhdGlsZS5jOjE0NTpcdG5ld3Byb3AgPSBremFsbG9jX29iaigqbmV3cHJvcCk7XG5hcmNoL2FybS9tYWNoLXZlcnNhdGlsZS92ZXJzYXRpbGUuYy0xNDYtXHRpZiAoIW5ld3Byb3ApXG4tLVxuYXJjaC9hcm0vbWFjaC16eW5xL2NvbW1vbi5jPTEwNT1zdGF0aWMgdm9pZCBfX2luaXQgenlucV9pbml0X21hY2hpbmUodm9pZClcbi0tXG5hcmNoL2FybS9tYWNoLXp5bnEvY29tbW9uLmMtMTEwLVxuYXJjaC9hcm0vbWFjaC16eW5xL2NvbW1vbi5jOjExMTpcdHNvY19kZXZfYXR0ciA9IGt6YWxsb2Nfb2JqKCpzb2NfZGV2X2F0dHIpO1xuYXJjaC9hcm0vbWFjaC16eW5xL2NvbW1vbi5jLTExMi1cdGlmICghc29jX2Rldl9hdHRyKVxuLS1cbmFyY2gvYXJtL21tL2NhY2hlLWwyeDAtcG11LmM9NTAzPXN0YXRpYyBfX2luaXQgaW50IGwyeDBfcG11X2luaXQodm9pZClcbi0tXG5hcmNoL2FybS9tbS9jYWNoZS1sMngwLXBtdS5jLTUwOS1cbmFyY2gvYXJtL21tL2NhY2hlLWwyeDAtcG11LmM6NTEwOlx0bDJ4MF9wbXUgPSBremFsbG9jX29iaigqbDJ4MF9wbXUpO1xuYXJjaC9hcm0vbW0vY2FjaGUtbDJ4MC1wbXUuYy01MTEtXHRpZiAoIWwyeDBfcG11KSB7XG4tLVxuYXJjaC9hcm0vbW0vY2FjaGUtdW5pcGhpZXIuYz0zMTU9c3RhdGljIGludCBfX2luaXQgX191bmlwaGllcl9jYWNoZV9pbml0KHN0cnVjdCBkZXZpY2Vfbm9kZSAqbnAsXG4tLVxuYXJjaC9hcm0vbW0vY2FjaGUtdW5pcGhpZXIuYy0zNDQtXG5hcmNoL2FybS9tbS9jYWNoZS11bmlwaGllci5jOjM0NTpcdGRhdGEgPSBremFsbG9jX29iaigqZGF0YSk7XG5hcmNoL2FybS9tbS9jYWNoZS11bmlwaGllci5jLTM0Ni1cdGlmICghZGF0YSlcbi0tXG5hcmNoL2FybS9tbS9kbWEtbWFwcGluZy5jPTUzMz1zdGF0aWMgdm9pZCAqX19kbWFfYWxsb2Moc3RydWN0IGRldmljZSAqZGV2LCBzaXplX3Qgc2l6ZSwgZG1hX2FkZHJfdCAqaGFuZGxlLFxuLS1cbmFyY2gvYXJtL21tL2RtYS1tYXBwaW5nLmMtNTYwLVxuYXJjaC9hcm0vbW0vZG1hLW1hcHBpbmcuYzo1NjE6XHRidWYgPSBremFsbG9jX29iaigqYnVmLFxuYXJjaC9hcm0vbW0vZG1hLW1hcHBpbmcuYy01NjItXHRcdFx0ICBnZnAgXHUwMDI2IH4oX19HRlBfRE1BIHwgX19HRlBfRE1BMzIgfCBfX0dGUF9ISUdITUVNKSk7XG4tLVxuYXJjaC9hcm0vbW0vZG1hLW1hcHBpbmcuYz0xNDg3PWFybV9pb21tdV9jcmVhdGVfbWFwcGluZyhzdHJ1Y3QgZGV2aWNlICpkZXYsIGRtYV9hZGRyX3QgYmFzZSwgdTY0IHNpemUpXG4tLVxuYXJjaC9hcm0vbW0vZG1hLW1hcHBpbmcuYy0xNTA2LVxuYXJjaC9hcm0vbW0vZG1hLW1hcHBpbmcuYzoxNTA3Olx0bWFwcGluZyA9IGt6YWxsb2Nfb2JqKHN0cnVjdCBkbWFfaW9tbXVfbWFwcGluZyk7XG5hcmNoL2FybS9tbS9kbWEtbWFwcGluZy5jLTE1MDgtXHRpZiAoIW1hcHBpbmcpXG4tLVxuYXJjaC9hcm0veGVuL2VubGlnaHRlbi5jPTMxNj1pbnQgX19pbml0IGFyY2hfeGVuX3VucG9wdWxhdGVkX2luaXQoc3RydWN0IHJlc291cmNlICoqcmVzKVxuLS1cbmFyY2gvYXJtL3hlbi9lbmxpZ2h0ZW4uYy0zNDMtXG5hcmNoL2FybS94ZW4vZW5saWdodGVuLmM6MzQ0Olx0cmVncyA9IGt6YWxsb2Nfb2JqcygqcmVncywgbnJfcmVnKTtcbmFyY2gvYXJtL3hlbi9lbmxpZ2h0ZW4uYy0zNDUtXHRpZiAoIXJlZ3MpIHtcbi0tXG5hcmNoL2FybS94ZW4vZW5saWdodGVuLmMtMzg3LVxuYXJjaC9hcm0veGVuL2VubGlnaHRlbi5jOjM4ODpcdFx0dG1wX3JlcyA9IGt6YWxsb2Nfb2JqKCp0bXBfcmVzKTtcbmFyY2gvYXJtL3hlbi9lbmxpZ2h0ZW4uYy0zODktXHRcdGlmICghdG1wX3Jlcykge1xuLS1cbmFyY2gvYXJtL3hlbi9wMm0uYz0xNTA9Ym9vbCBfX3NldF9waHlzX3RvX21hY2hpbmVfbXVsdGkodW5zaWduZWQgbG9uZyBwZm4sXG4tLVxuYXJjaC9hcm0veGVuL3AybS5jLTE3OC1cbmFyY2gvYXJtL3hlbi9wMm0uYzoxNzk6XHRwMm1fZW50cnkgPSBremFsbG9jX29iaigqcDJtX2VudHJ5LCBHRlBfTk9XQUlUKTtcbmFyY2gvYXJtL3hlbi9wMm0uYy0xODAtXHRpZiAoIXAybV9lbnRyeSlcbi0tXG5hcmNoL2FybTY0L2tlcm5lbC92ZHNvLmM9Njg9c3RhdGljIGludCBfX2luaXQgX192ZHNvX2luaXQoZW51bSB2ZHNvX2FiaSBhYmkpXG4tLVxuYXJjaC9hcm02NC9rZXJuZWwvdmRzby5jLTgzLVxuYXJjaC9hcm02NC9rZXJuZWwvdmRzby5jOjg0Olx0dmRzb19wYWdlbGlzdCA9IGt6YWxsb2Nfb2JqcyhzdHJ1Y3QgcGFnZSAqLCB2ZHNvX2luZm9bYWJpXS52ZHNvX3BhZ2VzKTtcbmFyY2gvYXJtNjQva2VybmVsL3Zkc28uYy04NS1cdGlmICh2ZHNvX3BhZ2VsaXN0ID09IE5VTEwpXG4tLVxuYXJjaC9hcm02NC9rdm0vbW11LmM9NDgwPXN0YXRpYyBpbnQgc2hhcmVfcGZuX2h5cCh1NjQgcGZuKVxuLS1cbmFyY2gvYXJtNjQva3ZtL21tdS5jLTQ5Mi1cbmFyY2gvYXJtNjQva3ZtL21tdS5jOjQ5MzpcdHRoaXMgPSBremFsbG9jX29iaigqdGhpcyk7XG5hcmNoL2FybTY0L2t2bS9tbXUuYy00OTQtXHRpZiAoIXRoaXMpIHtcbi0tXG5hcmNoL2FybTY0L2t2bS9tbXUuYz05ODE9aW50IGt2bV9pbml0X3N0YWdlMl9tbXUoc3RydWN0IGt2bSAqa3ZtLCBzdHJ1Y3Qga3ZtX3MyX21tdSAqbW11LCB1bnNpZ25lZCBsb25nIHR5cGUpXG4tLVxuYXJjaC9hcm02NC9rdm0vbW11LmMtMTAwNy1cbmFyY2gvYXJtNjQva3ZtL21tdS5jOjEwMDg6XHRwZ3QgPSBremFsbG9jX29iaigqcGd0LCBHRlBfS0VSTkVMX0FDQ09VTlQpO1xuYXJjaC9hcm02NC9rdm0vbW11LmMtMTAwOS1cdGlmICghcGd0KVxuLS1cbmFyY2gvYXJtNjQva3ZtL21tdS5jPTExODA9aW50IHRvcHVwX2h5cF9tZW1jYWNoZShzdHJ1Y3Qga3ZtX2h5cF9tZW1jYWNoZSAqbWMsIHVuc2lnbmVkIGxvbmcgbWluX3BhZ2VzKVxuLS1cbmFyY2gvYXJtNjQva3ZtL21tdS5jLTExODUtXHRpZiAoIW1jLVx1MDAzZW1hcHBpbmcpIHtcbmFyY2gvYXJtNjQva3ZtL21tdS5jOjExODY6XHRcdG1jLVx1MDAzZW1hcHBpbmcgPSBremFsbG9jX29iaihzdHJ1Y3QgcGt2bV9tYXBwaW5nLFxuYXJjaC9hcm02NC9rdm0vbW11LmMtMTE4Ny1cdFx0XHRcdFx0ICBHRlBfS0VSTkVMX0FDQ09VTlQpO1xuLS1cbmFyY2gvYXJtNjQva3ZtL21tdS5jPTI1MTA9aW50IF9faW5pdCBrdm1fbW11X2luaXQodTMyIGh5cF92YV9iaXRzKVxuLS1cbmFyY2gvYXJtNjQva3ZtL21tdS5jLTI1NDMtXG5hcmNoL2FybTY0L2t2bS9tbXUuYzoyNTQ0Olx0aHlwX3BndGFibGUgPSBremFsbG9jX29iaigqaHlwX3BndGFibGUpO1xuYXJjaC9hcm02NC9rdm0vbW11LmMtMjU0NS1cdGlmICghaHlwX3BndGFibGUpIHtcbi0tXG5hcmNoL2FybTY0L2t2bS9uZXN0ZWQuYz0xMzI4PWludCBrdm1fdmNwdV9hbGxvY2F0ZV92bmNyX3RsYihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4tLVxuYXJjaC9hcm02NC9rdm0vbmVzdGVkLmMtMTMzMy1cdGlmICghdmNwdS1cdTAwM2VhcmNoLnZuY3JfdGxiKSB7XG5hcmNoL2FybTY0L2t2bS9uZXN0ZWQuYzoxMzM0Olx0XHRzdHJ1Y3Qgdm5jcl90bGIgKnZ0ID0ga3phbGxvY19vYmooKnZjcHUtXHUwMDNlYXJjaC52bmNyX3RsYixcbmFyY2gvYXJtNjQva3ZtL25lc3RlZC5jLTEzMzUtXHRcdFx0XHRcdFx0ICBHRlBfS0VSTkVMX0FDQ09VTlQpO1xuLS1cbmFyY2gvYXJtNjQva3ZtL25lc3RlZC5jPTE3OTM9aW50IGt2bV9pbml0X252X3N5c3JlZ3Moc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuLS1cbmFyY2gvYXJtNjQva3ZtL25lc3RlZC5jLTE4MDItXG5hcmNoL2FybTY0L2t2bS9uZXN0ZWQuYzoxODAzOlx0a3ZtLVx1MDAzZWFyY2guc3lzcmVnX21hc2tzID0ga3phbGxvY19vYmooKihrdm0tXHUwMDNlYXJjaC5zeXNyZWdfbWFza3MpLFxuYXJjaC9hcm02NC9rdm0vbmVzdGVkLmMtMTgwNC1cdFx0XHRcdFx0ICAgICBHRlBfS0VSTkVMX0FDQ09VTlQpO1xuLS1cbmFyY2gvYXJtNjQva3ZtL3B0ZHVtcC5jPTExNj1zdGF0aWMgc3RydWN0IGt2bV9wdGR1bXBfZ3Vlc3Rfc3RhdGUgKmt2bV9wdGR1bXBfcGFyc2VyX2NyZWF0ZShzdHJ1Y3Qga3ZtX3MyX21tdSAqbW11KVxuLS1cbmFyY2gvYXJtNjQva3ZtL3B0ZHVtcC5jLTEyMS1cbmFyY2gvYXJtNjQva3ZtL3B0ZHVtcC5jOjEyMjpcdHN0ID0ga3phbGxvY19vYmooc3RydWN0IGt2bV9wdGR1bXBfZ3Vlc3Rfc3RhdGUsIEdGUF9LRVJORUxfQUNDT1VOVCk7XG5hcmNoL2FybTY0L2t2bS9wdGR1bXAuYy0xMjMtXHRpZiAoIXN0KVxuLS1cbmFyY2gvYXJtNjQva3ZtL3ZnaWMvdmdpYy1pbml0LmM9MjA3PXN0YXRpYyBpbnQga3ZtX3ZnaWNfZGlzdF9pbml0KHN0cnVjdCBrdm0gKmt2bSwgdW5zaWduZWQgaW50IG5yX3NwaXMpXG4tLVxuYXJjaC9hcm02NC9rdm0vdmdpYy92Z2ljLWluaXQuYy0yMTMtXHRkaXN0LVx1MDAzZWFjdGl2ZV9zcGlzID0gKGF0b21pY190KUFUT01JQ19JTklUKDApO1xuYXJjaC9hcm02NC9rdm0vdmdpYy92Z2ljLWluaXQuYzoyMTQ6XHRkaXN0LVx1MDAzZXNwaXMgPSBremFsbG9jX29ianMoc3RydWN0IHZnaWNfaXJxLCBucl9zcGlzLCBHRlBfS0VSTkVMX0FDQ09VTlQpO1xuYXJjaC9hcm02NC9rdm0vdmdpYy92Z2ljLWluaXQuYy0yMTUtXHRpZiAoIWRpc3QtXHUwMDNlc3Bpcylcbi0tXG5hcmNoL2FybTY0L2t2bS92Z2ljL3ZnaWMtaW5pdC5jPTMxNj1zdGF0aWMgaW50IHZnaWNfYWxsb2NhdGVfcHJpdmF0ZV9pcnFzX2xvY2tlZChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHUzMiB0eXBlKVxuLS1cbmFyY2gvYXJtNjQva3ZtL3ZnaWMvdmdpYy1pbml0LmMtMzMxLVxuYXJjaC9hcm02NC9rdm0vdmdpYy92Z2ljLWluaXQuYzozMzI6XHR2Z2ljX2NwdS1cdTAwM2Vwcml2YXRlX2lycXMgPSBremFsbG9jX29ianMoc3RydWN0IHZnaWNfaXJxLFxuYXJjaC9hcm02NC9rdm0vdmdpYy92Z2ljLWluaXQuYy0zMzMtXHRcdFx0XHRcdCAgICAgIG51bV9wcml2YXRlX2lycXMsXG4tLVxuYXJjaC9hcm02NC9rdm0vdmdpYy92Z2ljLWlycWZkLmM9MTQyPWludCBrdm1fdmdpY19zZXR1cF9kZWZhdWx0X2lycV9yb3V0aW5nKHN0cnVjdCBrdm0gKmt2bSlcbi0tXG5hcmNoL2FybTY0L2t2bS92Z2ljL3ZnaWMtaXJxZmQuYy0xNDgtXG5hcmNoL2FybTY0L2t2bS92Z2ljL3ZnaWMtaXJxZmQuYzoxNDk6XHRlbnRyaWVzID0ga3phbGxvY19vYmpzKCplbnRyaWVzLCBuciwgR0ZQX0tFUk5FTF9BQ0NPVU5UKTtcbmFyY2gvYXJtNjQva3ZtL3ZnaWMvdmdpYy1pcnFmZC5jLTE1MC1cdGlmICghZW50cmllcylcbi0tXG5hcmNoL2FybTY0L2t2bS92Z2ljL3ZnaWMtaXRzLmM9NzY9c3RhdGljIHN0cnVjdCB2Z2ljX2lycSAqdmdpY19hZGRfbHBpKHN0cnVjdCBrdm0gKmt2bSwgdTMyIGludGlkLFxuLS1cbmFyY2gvYXJtNjQva3ZtL3ZnaWMvdmdpYy1pdHMuYy04Ny1cbmFyY2gvYXJtNjQva3ZtL3ZnaWMvdmdpYy1pdHMuYzo4ODpcdGlycSA9IGt6YWxsb2Nfb2JqKHN0cnVjdCB2Z2ljX2lycSwgR0ZQX0tFUk5FTF9BQ0NPVU5UKTtcbmFyY2gvYXJtNjQva3ZtL3ZnaWMvdmdpYy1pdHMuYy04OS1cdGlmICghaXJxKVxuLS1cbmFyY2gvYXJtNjQva3ZtL3ZnaWMvdmdpYy1pdHMuYz05NzE9c3RhdGljIGludCB2Z2ljX2l0c19hbGxvY19jb2xsZWN0aW9uKHN0cnVjdCB2Z2ljX2l0cyAqaXRzLFxuLS1cbmFyY2gvYXJtNjQva3ZtL3ZnaWMvdmdpYy1pdHMuYy05NzYtXG5hcmNoL2FybTY0L2t2bS92Z2ljL3ZnaWMtaXRzLmM6OTc3Olx0Y29sbGVjdGlvbiA9IGt6YWxsb2Nfb2JqKCpjb2xsZWN0aW9uLCBHRlBfS0VSTkVMX0FDQ09VTlQpO1xuYXJjaC9hcm02NC9rdm0vdmdpYy92Z2ljLWl0cy5jLTk3OC1cdGlmICghY29sbGVjdGlvbilcbi0tXG5hcmNoL2FybTY0L2t2bS92Z2ljL3ZnaWMtaXRzLmM9MTAxNT1zdGF0aWMgc3RydWN0IGl0c19pdGUgKnZnaWNfaXRzX2FsbG9jX2l0ZShzdHJ1Y3QgaXRzX2RldmljZSAqZGV2aWNlLFxuLS1cbmFyY2gvYXJtNjQva3ZtL3ZnaWMvdmdpYy1pdHMuYy0xMDIwLVxuYXJjaC9hcm02NC9rdm0vdmdpYy92Z2ljLWl0cy5jOjEwMjE6XHRpdGUgPSBremFsbG9jX29iaigqaXRlLCBHRlBfS0VSTkVMX0FDQ09VTlQpO1xuYXJjaC9hcm02NC9rdm0vdmdpYy92Z2ljLWl0cy5jLTEwMjItXHRpZiAoIWl0ZSlcbi0tXG5hcmNoL2FybTY0L2t2bS92Z2ljL3ZnaWMtaXRzLmM9MTE0Mj1zdGF0aWMgc3RydWN0IGl0c19kZXZpY2UgKnZnaWNfaXRzX2FsbG9jX2RldmljZShzdHJ1Y3QgdmdpY19pdHMgKml0cyxcbi0tXG5hcmNoL2FybTY0L2t2bS92Z2ljL3ZnaWMtaXRzLmMtMTE0Ny1cbmFyY2gvYXJtNjQva3ZtL3ZnaWMvdmdpYy1pdHMuYzoxMTQ4Olx0ZGV2aWNlID0ga3phbGxvY19vYmooKmRldmljZSwgR0ZQX0tFUk5FTF9BQ0NPVU5UKTtcbmFyY2gvYXJtNjQva3ZtL3ZnaWMvdmdpYy1pdHMuYy0xMTQ5LVx0aWYgKCFkZXZpY2UpXG4tLVxuYXJjaC9hcm02NC9rdm0vdmdpYy92Z2ljLWl0cy5jPTE4NTU9c3RhdGljIGludCB2Z2ljX2l0c19jcmVhdGUoc3RydWN0IGt2bV9kZXZpY2UgKmRldiwgdTMyIHR5cGUpXG4tLVxuYXJjaC9hcm02NC9rdm0vdmdpYy92Z2ljLWl0cy5jLTE4NjItXG5hcmNoL2FybTY0L2t2bS92Z2ljL3ZnaWMtaXRzLmM6MTg2MzpcdGl0cyA9IGt6YWxsb2Nfb2JqKHN0cnVjdCB2Z2ljX2l0cywgR0ZQX0tFUk5FTF9BQ0NPVU5UKTtcbmFyY2gvYXJtNjQva3ZtL3ZnaWMvdmdpYy1pdHMuYy0xODY0LVx0aWYgKCFpdHMpXG4tLVxuYXJjaC9hcm02NC9rdm0vdmdpYy92Z2ljLW1taW8tdjMuYz04ODY9c3RhdGljIGludCB2Z2ljX3YzX2FsbG9jX3JlZGlzdF9yZWdpb24oc3RydWN0IGt2bSAqa3ZtLCB1aW50MzJfdCBpbmRleCxcbi0tXG5hcmNoL2FybTY0L2t2bS92Z2ljL3ZnaWMtbW1pby12My5jLTkzMS1cbmFyY2gvYXJtNjQva3ZtL3ZnaWMvdmdpYy1tbWlvLXYzLmM6OTMyOlx0cmRyZWcgPSBremFsbG9jX29iaigqcmRyZWcsIEdGUF9LRVJORUxfQUNDT1VOVCk7XG5hcmNoL2FybTY0L2t2bS92Z2ljL3ZnaWMtbW1pby12My5jLTkzMy1cdGlmICghcmRyZWcpXG4tLVxuYXJjaC9hcm02NC9rdm0vdmdpYy92Z2ljLXY0LmM9MjQyPWludCB2Z2ljX3Y0X2luaXQoc3RydWN0IGt2bSAqa3ZtKVxuLS1cbmFyY2gvYXJtNjQva3ZtL3ZnaWMvdmdpYy12NC5jLTI1OC1cbmFyY2gvYXJtNjQva3ZtL3ZnaWMvdmdpYy12NC5jOjI1OTpcdGRpc3QtXHUwMDNlaXRzX3ZtLnZwZXMgPSBremFsbG9jX29ianMoKmRpc3QtXHUwMDNlaXRzX3ZtLnZwZXMsIG5yX3ZjcHVzLFxuYXJjaC9hcm02NC9rdm0vdmdpYy92Z2ljLXY0LmMtMjYwLVx0XHRcdFx0XHQgR0ZQX0tFUk5FTF9BQ0NPVU5UKTtcbi0tXG5hcmNoL2FybTY0L25ldC9icGZfaml0X2NvbXAuYz0yMDgwPXN0cnVjdCBicGZfcHJvZyAqYnBmX2ludF9qaXRfY29tcGlsZShzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX3Byb2cgKnByb2cpXG4tLVxuYXJjaC9hcm02NC9uZXQvYnBmX2ppdF9jb21wLmMtMjEwMS1cdGlmICghaml0X2RhdGEpIHtcbmFyY2gvYXJtNjQvbmV0L2JwZl9qaXRfY29tcC5jOjIxMDI6XHRcdGppdF9kYXRhID0ga3phbGxvY19vYmooKmppdF9kYXRhKTtcbmFyY2gvYXJtNjQvbmV0L2JwZl9qaXRfY29tcC5jLTIxMDMtXHRcdGlmICghaml0X2RhdGEpXG4tLVxuYXJjaC9jc2t5L2tlcm5lbC92ZHNvLmM9MTc9c3RhdGljIGludCBfX2luaXQgdmRzb19pbml0KHZvaWQpXG4tLVxuYXJjaC9jc2t5L2tlcm5lbC92ZHNvLmMtMjItXHR2ZHNvX3BhZ2VsaXN0ID1cbmFyY2gvY3NreS9rZXJuZWwvdmRzby5jOjIzOlx0XHRremFsbG9jX29ianMoc3RydWN0IHBhZ2UgKiwgdmRzb19wYWdlcyk7XG5hcmNoL2Nza3kva2VybmVsL3Zkc28uYy0yNC1cdGlmICh1bmxpa2VseSh2ZHNvX3BhZ2VsaXN0ID09IE5VTEwpKSB7XG4tLVxuYXJjaC9sb29uZ2FyY2gva2VybmVsL3NldHVwLmM9NDY2PXN0YXRpYyBpbnQgX19pbml0IGFkZF9sZWdhY3lfaXNhX2lvKHN0cnVjdCBmd25vZGVfaGFuZGxlICpmd25vZGUsXG4tLVxuYXJjaC9sb29uZ2FyY2gva2VybmVsL3NldHVwLmMtNDcyLVxuYXJjaC9sb29uZ2FyY2gva2VybmVsL3NldHVwLmM6NDczOlx0cmFuZ2UgPSBremFsbG9jX29iaigqcmFuZ2UsIEdGUF9BVE9NSUMpO1xuYXJjaC9sb29uZ2FyY2gva2VybmVsL3NldHVwLmMtNDc0LVx0aWYgKCFyYW5nZSlcbi0tXG5hcmNoL2xvb25nYXJjaC9rZXJuZWwvdmRzby5jPTQ1PXN0YXRpYyBpbnQgX19pbml0IGluaXRfdmRzbyh2b2lkKVxuLS1cbmFyY2gvbG9vbmdhcmNoL2tlcm5lbC92ZHNvLmMtNTUtXHR2ZHNvX2luZm8uY29kZV9tYXBwaW5nLnBhZ2VzID1cbmFyY2gvbG9vbmdhcmNoL2tlcm5lbC92ZHNvLmM6NTY6XHRcdGt6YWxsb2Nfb2JqcyhzdHJ1Y3QgcGFnZSAqLCB2ZHNvX2luZm8uc2l6ZSAvIFBBR0VfU0laRSk7XG5hcmNoL2xvb25nYXJjaC9rZXJuZWwvdmRzby5jLTU3LVxuLS1cbmFyY2gvbG9vbmdhcmNoL2t2bS9pbnRjL2Vpb2ludGMuYz02MTQ9c3RhdGljIGludCBrdm1fZWlvaW50Y19jcmVhdGUoc3RydWN0IGt2bV9kZXZpY2UgKmRldiwgdTMyIHR5cGUpXG4tLVxuYXJjaC9sb29uZ2FyY2gva3ZtL2ludGMvZWlvaW50Yy5jLTYyNC1cbmFyY2gvbG9vbmdhcmNoL2t2bS9pbnRjL2Vpb2ludGMuYzo2MjU6XHRzID0ga3phbGxvY19vYmooc3RydWN0IGxvb25nYXJjaF9laW9pbnRjKTtcbmFyY2gvbG9vbmdhcmNoL2t2bS9pbnRjL2Vpb2ludGMuYy02MjYtXHRpZiAoIXMpXG4tLVxuYXJjaC9sb29uZ2FyY2gva3ZtL2ludGMvaXBpLmM9Mzk0PXN0YXRpYyBpbnQga3ZtX2lwaV9jcmVhdGUoc3RydWN0IGt2bV9kZXZpY2UgKmRldiwgdTMyIHR5cGUpXG4tLVxuYXJjaC9sb29uZ2FyY2gva3ZtL2ludGMvaXBpLmMtNDExLVxuYXJjaC9sb29uZ2FyY2gva3ZtL2ludGMvaXBpLmM6NDEyOlx0cyA9IGt6YWxsb2Nfb2JqKHN0cnVjdCBsb29uZ2FyY2hfaXBpKTtcbmFyY2gvbG9vbmdhcmNoL2t2bS9pbnRjL2lwaS5jLTQxMy1cdGlmICghcylcblxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE1LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMSAxNDowMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzMTkxNwoJCQkJCQkJb3V0cHV0OiAyMjcKCQkJCQkJCXRob3VnaHRzOiAyNjk5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5c2lzIG9mIEluaXRpYWxpemF0aW9uIGluIHRoZSB6bDMwNzN4IERyaXZlcioqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duIHN5c3RlbWF0aWNhbGx5LiBJdCBzZWVtcyBsaWtlIHRoZSBjb3JlIGNvbmNlcm4gaXMgYWJvdXQgZW5zdXJpbmcgdmFyaWFibGVzIGFuZCBkYXRhIHN0cnVjdHVyZXMgYXJlIHByb3Blcmx5IGluaXRpYWxpemVkIGJlZm9yZSB1c2UsIGVzcGVjaWFsbHkgd2hlbiBkZWFsaW5nIHdpdGggUFRQIChQcmVjaXNpb24gVGltZSBQcm90b2NvbCkgb3BlcmF0aW9ucyB3aXRoaW4gdGhpcyBgemwzMDczeGAgZHJpdmVyLiBJJiMzOTttIGZvY3VzaW5nIG9uIHBvdGVudGlhbCB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcy4KCkZpcnN0LCBJIHNlZSB0aGUgc2hpZnQgdG8gdXNpbmcgYGt6YWxsb2Nfb2JqYCBhbmQgYGt6YWxsb2Nfb2Jqc2Aga2VybmVsIG1hY3Jvcy4gVGhhdCYjMzk7cyBnb29kOyB0aGVzZSBhcmUgbm93IHRoZSBwcmVmZXJyZWQgbWV0aG9kcyB0byBhbGxvY2F0ZSBhbmQgemVybyBtZW1vcnkuIFNwZWNpZmljYWxseSwgYWxsb2NhdGluZyBhbmQgemVyb2luZyB0aGUgYHpsZHBsbGAgc3RydWN0IHdpdGggYGt6YWxsb2Nfb2JqKCp6bGRwbGwpYCBpcyBhIHNvbGlkIHN0YXJ0IGZvciBhdm9pZGluZyB1bmluaXRpYWxpemVkIHZhbHVlcy4KCk1vdmluZyB0aHJvdWdoIHRoZSBjb2RlLCBJIGV4YW1pbmVkIHRoZSBgemwzMDczeF9kcGxsX3B0cF9yZWdpc3RlcmAgZnVuY3Rpb24gYW5kIHRoZSB1c2FnZSBvZiBgemxkcGxsLSZndDtwdHBfaW5mb2AuIFRoaXMgc3RydWN0IGdldHMgaW5pdGlhbGl6ZWQgYnkgYSBjb3B5IGZyb20gYSBgc3RhdGljIGNvbnN0YCBzdHJ1Y3R1cmUsIGB6bDMwNzN4X2RwbGxfcHRwX2Nsb2NrX2luZm9gLiBCZWNhdXNlIGl0JiMzOTtzIGBzdGF0aWMgY29uc3RgLCB0aGUgY29tcGlsZXIgaGFuZGxlcyB0aGUgemVyby1pbml0aWFsaXphdGlvbiBvZiBhbGwgdW5pbml0aWFsaXplZCBmaWVsZHMsIGVuc3VyaW5nIHRoYXQgdGhlIFBUUCBpbmZvcm1hdGlvbiBpcyBmdWxseSBpbml0aWFsaXplZCBiZWZvcmUgdXNlLiBUaGUgYHNucHJpbnRmYCBmdW5jdGlvbiB3aWxsIHdyaXRlIHRvIHRoZSBgbmFtZWAgZmllbGQsIGJ1dCBzaW5jZSB0aGUgcmVzdCBpcyBhbHJlYWR5IHplcm9lZCwgdGhlcmUgYXJlIG5vIHVuaW5pdGlhbGl6ZWQgcmVhZHMuCgpUaGVuIEkgY29uc2lkZXJlZCBgemwzMDczeF9jaGFuX3RvZF9yZWFkYC4gVGhlIGB0c2Agc3RydWN0LCB1c2VkIHRvIHN0b3JlIHRoZSByZWFkIHRpbWUsIHNlZW1zIHRvIGJlIGZ1bGx5IGluaXRpYWxpemVkIG9uIGEgc3VjY2Vzc2Z1bCByZXR1cm4uIEluIHRoZSBldmVudCBvZiBhbiBlcnJvciwgaXQgaXMgcmV0dXJuZWQsIGFuZCBzaW5jZSB0aGUgUFRQIHN1YnN5c3RlbSB3aWxsIG5vdCB1c2UgaXQsIHRoZXJlIGFyZSBubyB1bmluaXRpYWxpemVkIHJlYWRzLgoKSW4gYHpsMzA3M3hfZHBsbF9wdHBfYWRqdGltZV9waGFzZV9zdGVwYCBJIHNhdyB0aGF0IHRoZSBgc3ludGhfbWFza2AgYXJyYXkgaXMgaW5pdGlhbGl6ZWQgdG8gemVybywgd2hpY2ggaXMgYSBnb29kIHByYWN0aWNlLgoKTmV4dCwgSSBsb29rZWQgYXQgaG93IGB6bDMwNzN4X2RwbGxfcHRwX2FkanRpbWVgIGhhbmRsZXMgYHRzYC4gVGhlIHJlbGV2YW50IGNvZGUgaW5kaWNhdGVzIHRoYXQgYHRzYCBpcyBmdWxseSBpbml0aWFsaXplZCBiZWZvcmUgaXQmIzM5O3MgcGFzc2VkIG9uIHRvIG90aGVyIGZ1bmN0aW9ucy4KCmB6bDMwNzN4X2NoYW5fdG9kX2FkanVzdGAgY2FsbHMgYHpsMzA3M3hfY2hhbl90b2RfcmVhZGAsIGFuZCBpdCBhcHBlYXJzIHRoYXQgYHRzX25leHRgIGFuZCBgdHNfY3VyYCB3aWxsIGFsc28gYmUgZnVsbHkgaW5pdGlhbGl6ZWQgZHVlIHRvIHRoZSByZXR1cm4gdmFsdWUgb2YgYHpsMzA3M3hfY2hhbl90b2RfcmVhZGAgaW4gY2FzZSBvZiBzdWNjZXNzLgoKRm9yIGB6bDMwNzN4X2NoYW5fdG9kX3dyaXRlYCwgSSBjb25maXJtZWQgdGhhdCB0aGUgZmllbGRzIG9mIHRoZSBpbnB1dCBgdHNgIGFyZSBwcm9wZXJseSBwb3B1bGF0ZWQgYmVmb3JlIGJlaW5nIHVzZWQuCgpUaGVuIEkgYW5hbHl6ZWQgYHpsMzA3M3hfY2hhbl9kZl9vZmZzZXRfc2V0YCwgYHpsMzA3M3hfY2hhbl90aWVfd3JpdGVgLCBgemwzMDczeF9jaGFuX3BoYXNlX3N0ZXBgLCBhbmQgYHpsMzA3M3hfZGV2X3N0YXRlX2ZldGNoYC4gSXQgc2VlbXMgdGhhdCB0aGVzZSBmdW5jdGlvbnMgYWxsIHVzZSBpbml0aWFsaXplZCBkYXRhLgoKRmluYWxseSwgdGhlIGFuYWx5c2lzIG9mIGB6bDMwNzN4X2RwbGxfcHRwX2FkamZpbmVgIGFuZCBgemwzMDczeF9kcGxsX3B0cF9hZGpwaGFzZWAgZGlkIG5vdCBwcmVzZW50IGFueSBvYnZpb3VzIGNhc2VzIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlLgoKSW4gc3VtbWFyeSwgdGhlcmUgaXMgbm8gZXZpZGVuY2Ugb2YgdW5pbml0aWFsaXplZCByZWFkcyBiZWluZyBpbnRyb2R1Y2VkIGJ5IHRoaXMgcGF0Y2guIFRoZSBkcml2ZXIgdXNlcyBhcHByb3ByaWF0ZSBpbml0aWFsaXphdGlvbiB0ZWNobmlxdWVzLCBsaWtlIGBremFsbG9jX29iamAsIGFuZCB0aGUgUFRQIHN1YnN5c3RlbSBzZWVtcyB0byBoYW5kbGUgZGF0YSB0cmFuc2ZlciB0byB1c2Vyc3BhY2Ugc2FmZWx5LiBUaGVyZWZvcmUsIEkmIzM5O20gY29uZmlkZW50IGluIHNldHRpbmcgYE5lZWRzS01TQU49ZmFsc2VgLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMSAxNDowMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRzIFBUUCBjbG9jayBzdXBwb3J0IHRvIHRoZSBNaWNyb2NoaXAgQXp1cml0ZSBEUExML1BUUC9TeW5jRSBkZXZpY2VzIGRyaXZlci4gSXQgaW50cm9kdWNlcyBmdW5jdGlvbnMgdG8gcmVhZC93cml0ZSBUaW1lIG9mIERheSAoVG9EKSwgYWRqdXN0IHBoYXNlLCBhZGp1c3QgZnJlcXVlbmN5LCBhbmQgcmVnaXN0ZXIgYSBQVFAgY2xvY2sgZGV2aWNlLiBUaGUgZHJpdmVyIGludGVyYWN0cyB3aXRoIHRoZSBQVFAgc3Vic3lzdGVtIGJ5IHByb3ZpZGluZyBjYWxsYmFja3MgKGBnZXR0aW1leDY0YCwgYHNldHRpbWU2NGAsIGBhZGp0aW1lYCwgYGFkamZpbmVgLCBgYWRqcGhhc2VgKS4gQWxsIHN0cnVjdHVyZXMgYWxsb2NhdGVkIGR5bmFtaWNhbGx5IGFyZSB6ZXJvLWluaXRpYWxpemVkIHVzaW5nIGBremFsbG9jX29iamAuIFRoZSBgcHRwX2Nsb2NrX2luZm9gIHN0cnVjdHVyZSBpcyBjb3BpZWQgZnJvbSBhIHN0YXRpYyBjb25zdCB0ZW1wbGF0ZSwgZW5zdXJpbmcgYWxsIHVuaW5pdGlhbGl6ZWQgZmllbGRzIGFyZSB6ZXJvZWQgYnkgdGhlIGNvbXBpbGVyIGJlZm9yZSBgc25wcmludGZgIG1vZGlmaWVzIHRoZSBgbmFtZWAgZmllbGQuIFRoZSBgc3RydWN0IHRpbWVzcGVjNjRgIHBvcHVsYXRlZCBieSB0aGUgZHJpdmVyIGlzIGZ1bGx5IGluaXRpYWxpemVkIG9uIHN1Y2Nlc3MsIGFuZCBlcnJvcnMgYXJlIHByb3Blcmx5IHByb3BhZ2F0ZWQgdG8gdGhlIFBUUCBzdWJzeXN0ZW0sIHByZXZlbnRpbmcgdW5pbml0aWFsaXplZCBkYXRhIGZyb20gYmVpbmcgdXNlZCBvciBjb3BpZWQgdG8gdXNlcnNwYWNlLiBObyBuZXcgdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3Mgb3IgaW5mby1sZWFrcyBhcmUgaW50cm9kdWNlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHMgUFRQIGNsb2NrIHN1cHBvcnQgdG8gdGhlIE1pY3JvY2hpcCBBenVyaXRlIERQTEwvUFRQL1N5bmNFIGRldmljZXMgZHJpdmVyLiBJdCBpbnRyb2R1Y2VzIGZ1bmN0aW9ucyB0byByZWFkL3dyaXRlIFRpbWUgb2YgRGF5IChUb0QpLCBhZGp1c3QgcGhhc2UsIGFkanVzdCBmcmVxdWVuY3ksIGFuZCByZWdpc3RlciBhIFBUUCBjbG9jayBkZXZpY2UuIFRoZSBkcml2ZXIgaW50ZXJhY3RzIHdpdGggdGhlIFBUUCBzdWJzeXN0ZW0gYnkgcHJvdmlkaW5nIGNhbGxiYWNrcyAoYGdldHRpbWV4NjRgLCBgc2V0dGltZTY0YCwgYGFkanRpbWVgLCBgYWRqZmluZWAsIGBhZGpwaGFzZWApLiBBbGwgc3RydWN0dXJlcyBhbGxvY2F0ZWQgZHluYW1pY2FsbHkgYXJlIHplcm8taW5pdGlhbGl6ZWQgdXNpbmcgYGt6YWxsb2Nfb2JqYC4gVGhlIGBwdHBfY2xvY2tfaW5mb2Agc3RydWN0dXJlIGlzIGNvcGllZCBmcm9tIGEgc3RhdGljIGNvbnN0IHRlbXBsYXRlLCBlbnN1cmluZyBhbGwgdW5pbml0aWFsaXplZCBmaWVsZHMgYXJlIHplcm9lZCBieSB0aGUgY29tcGlsZXIgYmVmb3JlIGBzbnByaW50ZmAgbW9kaWZpZXMgdGhlIGBuYW1lYCBmaWVsZC4gVGhlIGBzdHJ1Y3QgdGltZXNwZWM2NGAgcG9wdWxhdGVkIGJ5IHRoZSBkcml2ZXIgaXMgZnVsbHkgaW5pdGlhbGl6ZWQgb24gc3VjY2VzcywgYW5kIGVycm9ycyBhcmUgcHJvcGVybHkgcHJvcGFnYXRlZCB0byB0aGUgUFRQIHN1YnN5c3RlbSwgcHJldmVudGluZyB1bmluaXRpYWxpemVkIGRhdGEgZnJvbSBiZWluZyB1c2VkIG9yIGNvcGllZCB0byB1c2Vyc3BhY2UuIE5vIG5ldyB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcyBvciBpbmZvLWxlYWtzIGFyZSBpbnRyb2R1Y2VkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wOC0xMVQxNDowMjoyMy45OTc2NDQwNjhaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo5MjgzNzE2MzM3OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJaTDMwNzNYX0kyQ1wiLFxuICAgIFwiWkwzMDczWF9TUElcIixcbiAgICBcIlBUUF8xNTg4X0NMT0NLXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiemwzMDczeF9jaGFuX3RvZF9yZWFkXCIsXG4gICAgXCJ6bDMwNzN4X2NoYW5fdG9kX3dyaXRlXCIsXG4gICAgXCJ6bDMwNzN4X2NoYW5fdG9kX2FkanVzdFwiLFxuICAgIFwiemwzMDczeF9jaGFuX2RmX29mZnNldF9zZXRcIixcbiAgICBcInpsMzA3M3hfY2hhbl90aWVfd3JpdGVcIixcbiAgICBcInpsMzA3M3hfY2hhbl9waGFzZV9zdGVwXCIsXG4gICAgXCJ6bDMwNzN4X2RwbGxfcHRwX2dldHRpbWV4NjRcIixcbiAgICBcInpsMzA3M3hfZHBsbF9wdHBfc2V0dGltZTY0XCIsXG4gICAgXCJ6bDMwNzN4X2RwbGxfcHRwX2FkanRpbWVcIixcbiAgICBcInpsMzA3M3hfZHBsbF9wdHBfYWRqZmluZVwiLFxuICAgIFwiemwzMDczeF9kcGxsX3B0cF9hZGpwaGFzZVwiXG4gIF0sXG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcyBQVFAgY2xvY2sgc3VwcG9ydCB0byB0aGUgTWljcm9jaGlwIEF6dXJpdGUgRFBMTC9QVFAvU3luY0UgZGV2aWNlcyBkcml2ZXIuIEl0IGludHJvZHVjZXMgZnVuY3Rpb25zIHRvIHJlYWQvd3JpdGUgVGltZSBvZiBEYXkgKFRvRCksIGFkanVzdCBwaGFzZSwgYWRqdXN0IGZyZXF1ZW5jeSwgYW5kIHJlZ2lzdGVyIGEgUFRQIGNsb2NrIGRldmljZS4gVGhlIGRyaXZlciBpbnRlcmFjdHMgd2l0aCB0aGUgUFRQIHN1YnN5c3RlbSBieSBwcm92aWRpbmcgY2FsbGJhY2tzIChgZ2V0dGltZXg2NGAsIGBzZXR0aW1lNjRgLCBgYWRqdGltZWAsIGBhZGpmaW5lYCwgYGFkanBoYXNlYCkuIEFsbCBzdHJ1Y3R1cmVzIGFsbG9jYXRlZCBkeW5hbWljYWxseSBhcmUgemVyby1pbml0aWFsaXplZCB1c2luZyBga3phbGxvY19vYmpgLiBUaGUgYHB0cF9jbG9ja19pbmZvYCBzdHJ1Y3R1cmUgaXMgY29waWVkIGZyb20gYSBzdGF0aWMgY29uc3QgdGVtcGxhdGUsIGVuc3VyaW5nIGFsbCB1bmluaXRpYWxpemVkIGZpZWxkcyBhcmUgemVyb2VkIGJ5IHRoZSBjb21waWxlciBiZWZvcmUgYHNucHJpbnRmYCBtb2RpZmllcyB0aGUgYG5hbWVgIGZpZWxkLiBUaGUgYHN0cnVjdCB0aW1lc3BlYzY0YCBwb3B1bGF0ZWQgYnkgdGhlIGRyaXZlciBpcyBmdWxseSBpbml0aWFsaXplZCBvbiBzdWNjZXNzLCBhbmQgZXJyb3JzIGFyZSBwcm9wZXJseSBwcm9wYWdhdGVkIHRvIHRoZSBQVFAgc3Vic3lzdGVtLCBwcmV2ZW50aW5nIHVuaW5pdGlhbGl6ZWQgZGF0YSBmcm9tIGJlaW5nIHVzZWQgb3IgY29waWVkIHRvIHVzZXJzcGFjZS4gTm8gbmV3IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzIG9yIGluZm8tbGVha3MgYXJlIGludHJvZHVjZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcyBQVFAgY2xvY2sgc3VwcG9ydCB0byB0aGUgTWljcm9jaGlwIEF6dXJpdGUgRFBMTCBkcml2ZXIgKHpsMzA3M3gpLiBJdCBpbXBsZW1lbnRzIFBUUCBjbG9jayBvcGVyYXRpb25zIGxpa2UgZ2V0dGltZXg2NCwgc2V0dGltZTY0LCBhZGp0aW1lLCBhZGpmaW5lLCBhbmQgYWRqcGhhc2UuIFRoZSBkcml2ZXIgY2FuIGJlIGluc3RhbnRpYXRlZCB2aWEgSTJDIG9yIFNQSSBpbiBRRU1VLCBhbmQgdGhlIFBUUCBvcGVyYXRpb25zIGFyZSByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2UgdmlhIFBUUCBpb2N0bHMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTExVDE0OjAyOjIzLjk5NzY1MDY4OFoiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTI5NjE2MzExNywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IDk1N2RjZmQ2NzFlOGJjNTk3NzE5YzEyY2IyYjMwMWQyZjc0OWZlZDFcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIFR1ZSBBdWcgMTEgMTQ6MDI6MjIgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9kcGxsL3psMzA3M3gvS2NvbmZpZyBiL2RyaXZlcnMvZHBsbC96bDMwNzN4L0tjb25maWdcXG5pbmRleCA1YmJjYTE0MDA1ODEzLi5kYTE3MzFhY2UxNWYwIDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvZHBsbC96bDMwNzN4L0tjb25maWdcXG4rKysgYi9kcml2ZXJzL2RwbGwvemwzMDczeC9LY29uZmlnXFxuQEAgLTIsNyArMiw3IEBAXFxuIFxcbiBjb25maWcgWkwzMDczWFxcbiBcXHR0cmlzdGF0ZSBcXFwiTWljcm9jaGlwIEF6dXJpdGUgRFBMTC9QVFAvU3luY0UgZGV2aWNlc1xcXCIgaWYgQ09NUElMRV9URVNUXFxuLVxcdGRlcGVuZHMgb24gTkVUXFxuK1xcdGRlcGVuZHMgb24gTkVUIFxcdTAwMjZcXHUwMDI2IFBUUF8xNTg4X0NMT0NLXFxuIFxcdHNlbGVjdCBEUExMXFxuIFxcdHNlbGVjdCBORVRfREVWTElOS1xcbiBcXHRzZWxlY3QgUkVHTUFQXFxuQEAgLTE2LDcgKzE2LDcgQEAgY29uZmlnIFpMMzA3M1hcXG4gXFxuIGNvbmZpZyBaTDMwNzNYX0kyQ1xcbiBcXHR0cmlzdGF0ZSBcXFwiSTJDIGJ1cyBpbXBsZW1lbnRhdGlvbiBmb3IgTWljcm9jaGlwIEF6dXJpdGUgZGV2aWNlc1xcXCJcXG4tXFx0ZGVwZW5kcyBvbiBJMkMgXFx1MDAyNlxcdTAwMjYgTkVUXFxuK1xcdGRlcGVuZHMgb24gSTJDIFxcdTAwMjZcXHUwMDI2IE5FVCBcXHUwMDI2XFx1MDAyNiBQVFBfMTU4OF9DTE9DS1xcbiBcXHRzZWxlY3QgUkVHTUFQX0kyQ1xcbiBcXHRzZWxlY3QgWkwzMDczWFxcbiBcXHRoZWxwXFxuQEAgLTI4LDcgKzI4LDcgQEAgY29uZmlnIFpMMzA3M1hfSTJDXFxuIFxcbiBjb25maWcgWkwzMDczWF9TUElcXG4gXFx0dHJpc3RhdGUgXFxcIlNQSSBidXMgaW1wbGVtZW50YXRpb24gZm9yIE1pY3JvY2hpcCBBenVyaXRlIGRldmljZXNcXFwiXFxuLVxcdGRlcGVuZHMgb24gTkVUIFxcdTAwMjZcXHUwMDI2IFNQSVxcbitcXHRkZXBlbmRzIG9uIE5FVCBcXHUwMDI2XFx1MDAyNiBTUEkgXFx1MDAyNlxcdTAwMjYgUFRQXzE1ODhfQ0xPQ0tcXG4gXFx0c2VsZWN0IFJFR01BUF9TUElcXG4gXFx0c2VsZWN0IFpMMzA3M1hcXG4gXFx0aGVscFxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmMgYi9kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmNcXG5pbmRleCA0ZWMyY2Y1M2RhZDQ2Li5iYzZkNzBkMjVkNzkxIDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uY1xcbisrKyBiL2RyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uY1xcbkBAIC0zLDYgKzMsNyBAQFxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvY2xlYW51cC5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvZGVsYXkuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2Rldl9wcmludGsuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3B0cF9jbG9ja19rZXJuZWwuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3N0cmluZy5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvdHlwZXMuaFxcdTAwM2VcXG4gXFxuQEAgLTE2Miw4ICsxNjMsOCBAQCBpbnQgemwzMDczeF9jaGFuX25jb19tb2RlX3NldChzdHJ1Y3QgemwzMDczeF9kZXYgKnpsZGV2LCB1OCBpbmRleClcXG4gICogQHpsZGV2OiBwb2ludGVyIHRvIHpsMzA3M3hfZGV2IHN0cnVjdHVyZVxcbiAgKiBAaW5kZXg6IERQTEwgY2hhbm5lbCBpbmRleCB0byBmZXRjaCBzdGF0ZSBmb3JcXG4gICpcXG4tICogUmVhZHMgdGhlIG1vZGVfcmVmc2VsIHJlZ2lzdGVyIGFuZCByZWZlcmVuY2UgcHJpb3JpdHkgcmVnaXN0ZXJzIGZvclxcbi0gKiB0aGUgZ2l2ZW4gRFBMTCBjaGFubmVsIGFuZCBzdG9yZXMgdGhlIHJhdyB2YWx1ZXMgZm9yIGxhdGVyIHVzZS5cXG4rICogUmVhZHMgdGhlIG1vZGVfcmVmc2VsLCBzdGF0dXMgYW5kIHJlZmVyZW5jZSBwcmlvcml0eSByZWdpc3RlcnMgZm9yXFxuKyAqIHRoZSBnaXZlbiBEUExMIGNoYW5uZWwgYW5kIHN0b3JlcyB0aGUgdmFsdWVzIGZvciBsYXRlciB1c2UuXFxuICAqXFxuICAqIFJldHVybjogMCBvbiBzdWNjZXNzLCBcXHUwMDNjMCBvbiBlcnJvclxcbiAgKi9cXG5AQCAtMjM0LDYgKzIzNSwzMjYgQEAgY29uc3Qgc3RydWN0IHpsMzA3M3hfY2hhbiAqemwzMDczeF9jaGFuX3N0YXRlX2dldChzdHJ1Y3QgemwzMDczeF9kZXYgKnpsZGV2LFxcbiBcXHRyZXR1cm4gXFx1MDAyNnpsZGV2LVxcdTAwM2VjaGFuW2luZGV4XTtcXG4gfVxcbiBcXG4rLyoqXFxuKyAqIHpsMzA3M3hfY2hhbl90b2RfcmVhZHlfd2FpdCAtIHdhaXQgZm9yIFRvRCBzZW1hcGhvcmUgdG8gY2xlYXJcXG4rICogQHpsZGV2OiBwb2ludGVyIHRvIHpsMzA3M3ggZGV2aWNlXFxuKyAqIEBjaDogRFBMTCBjaGFubmVsIGluZGV4XFxuKyAqXFxuKyAqIENoZWNrcyB0aGUgVG9EIGNvbnRyb2wgcmVnaXN0ZXIgc2VtYXBob3JlIGJpdC4gSWYgY2xlYXIsIHJldHVybnNcXG4rICogaW1tZWRpYXRlbHkuIE90aGVyd2lzZSBwb2xscyB1bnRpbCB0aGUgYml0IGlzIGNsZWFyZWQgYnkgdGhlIGRldmljZS5cXG4rICpcXG4rICogUmV0dXJuOlxcbisgKiAqIDBcXHRcXHRcXHQtIHN1Y2Nlc3NcXG4rICogKiAlLUVCVVNZXFx0XFx0LSB0aW1lb3V0XFxuKyAqICogJS1FT1BOT1RTVVBQXFx0LSB1bmtub3duIGNvbW1hbmQgZGV0ZWN0ZWRcXG4rICogKiBuZWdhdGl2ZVxcdFxcdC0gb3RoZXIgZXJyb3JcXG4rICovXFxuK2ludCB6bDMwNzN4X2NoYW5fdG9kX3JlYWR5X3dhaXQoc3RydWN0IHpsMzA3M3hfZGV2ICp6bGRldiwgdTggY2gpXFxuK3tcXG4rXFx0dW5zaWduZWQgaW50IHRpbWVvdXQ7XFxuK1xcdHU4IHRvZF9jdHJsO1xcbitcXHRpbnQgcmM7XFxuK1xcbitcXHRyYyA9IHpsMzA3M3hfcmVhZF91OCh6bGRldiwgWkxfUkVHX0RQTExfVE9EX0NUUkwoY2gpLCBcXHUwMDI2dG9kX2N0cmwpO1xcbitcXHRpZiAocmMpXFxuK1xcdFxcdHJldHVybiByYztcXG4rXFxuK1xcdGlmICghKHRvZF9jdHJsIFxcdTAwMjYgWkxfRFBMTF9UT0RfQ1RSTF9TRU0pKVxcbitcXHRcXHRyZXR1cm4gMDtcXG4rXFxuK1xcdHN3aXRjaCAoRklFTERfR0VUKFpMX0RQTExfVE9EX0NUUkxfQ01ELCB0b2RfY3RybCkpIHtcXG4rXFx0Y2FzZSBaTF9EUExMX1RPRF9DVFJMX0NNRF9XUl9ORVhUXzFIWjpcXG4rXFx0XFx0dGltZW91dCA9IFpMX1BPTExfVE9EX1dSX1RJTUVPVVRfVVM7XFxuK1xcdFxcdGJyZWFrO1xcbitcXHRjYXNlIFpMX0RQTExfVE9EX0NUUkxfQ01EX1JEX0NVUlJFTlQ6XFxuK1xcdGNhc2UgWkxfRFBMTF9UT0RfQ1RSTF9DTURfUkRfTkVYVF8xSFo6XFxuK1xcdFxcdHRpbWVvdXQgPSBaTF9QT0xMX1RPRF9SRF9USU1FT1VUX1VTO1xcbitcXHRcXHRicmVhaztcXG4rXFx0ZGVmYXVsdDpcXG4rXFx0XFx0V0FSTl9PTigxKTtcXG4rXFx0XFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xcbitcXHR9XFxuK1xcbitcXHRyYyA9IHpsMzA3M3hfcG9sbF96ZXJvX3U4KHpsZGV2LCBaTF9SRUdfRFBMTF9UT0RfQ1RSTChjaCksXFxuK1xcdFxcdFxcdFxcdCAgWkxfRFBMTF9UT0RfQ1RSTF9TRU0sIHRpbWVvdXQpO1xcbitcXG4rXFx0cmV0dXJuIHJjID09IC1FVElNRURPVVQgPyAtRUJVU1kgOiByYztcXG4rfVxcbitcXG4rLyoqXFxuKyAqIHpsMzA3M3hfY2hhbl90b2RfY3RybCAtIGlzc3VlIFRvRCBjb21tYW5kXFxuKyAqIEB6bGRldjogcG9pbnRlciB0byB6bDMwNzN4IGRldmljZVxcbisgKiBAY2g6IERQTEwgY2hhbm5lbCBpbmRleFxcbisgKiBAY21kOiBUb0QgY29tbWFuZCB0byBleGVjdXRlXFxuKyAqXFxuKyAqIFdyaXRlcyB0aGUgc2VtYXBob3JlIGFuZCBjb21tYW5kIHRvIGRwbGxfdG9kX2N0cmwuIFRoZSBjYWxsZXIgbXVzdFxcbisgKiBlbnN1cmUgdGhlIGRldmljZSBpcyByZWFkeSAoc2VtYXBob3JlIGNsZWFyKSBiZWZvcmUgY2FsbGluZyBhbmRcXG4rICogbXVzdCB3YWl0IGZvciBjb21wbGV0aW9uIGlmIG5lZWRlZC5cXG4rICpcXG4rICogUmV0dXJuOiAwIG9uIHN1Y2Nlc3MsIFxcdTAwM2MwIG9uIGVycm9yXFxuKyAqL1xcbitzdGF0aWMgaW50IHpsMzA3M3hfY2hhbl90b2RfY3RybChzdHJ1Y3QgemwzMDczeF9kZXYgKnpsZGV2LCB1OCBjaCwgdTggY21kKVxcbit7XFxuK1xcdHJldHVybiB6bDMwNzN4X3dyaXRlX3U4KHpsZGV2LCBaTF9SRUdfRFBMTF9UT0RfQ1RSTChjaCksXFxuK1xcdFxcdFxcdFxcdFpMX0RQTExfVE9EX0NUUkxfU0VNIHwgY21kKTtcXG4rfVxcbitcXG4rLyoqXFxuKyAqIHpsMzA3M3hfY2hhbl90b2RfcmVhZCAtIHJlYWQgVG9EIHJlZ2lzdGVycyBhZnRlciBpc3N1aW5nIGEgY29tbWFuZFxcbisgKiBAemxkZXY6IHBvaW50ZXIgdG8gemwzMDczeCBkZXZpY2VcXG4rICogQGNoOiBEUExMIGNoYW5uZWwgaW5kZXhcXG4rICogQG5leHRfaHo6IGlmIHRydWUsIHJlYWQgcHJlZGljdGVkIFRvRCBhdCBuZXh0IDEgSHo7IG90aGVyd2lzZSByZWFkIGN1cnJlbnRcXG4rICogQHRzOiB0aW1lc3BlYyB0byBzdG9yZSB0aGUgcmVzdWx0XFxuKyAqIEBzdHM6IG9wdGlvbmFsIHN5c3RlbSB0aW1lc3RhbXAgcGFpciBmb3IgY3Jvc3MtdGltZXN0YW1waW5nXFxuKyAqXFxuKyAqIENvbnRleHQ6IENhbGxlciBtdXN0IHNlcmlhbGl6ZSBhbGwgemwzMDczeF9jaGFuX3RvZF8qIGNhbGxzIGV4dGVybmFsbHkuXFxuKyAqIFJldHVybjogMCBvbiBzdWNjZXNzLCBcXHUwMDNjMCBvbiBlcnJvclxcbisgKi9cXG4raW50IHpsMzA3M3hfY2hhbl90b2RfcmVhZChzdHJ1Y3QgemwzMDczeF9kZXYgKnpsZGV2LCB1OCBjaCxcXG4rXFx0XFx0XFx0ICBib29sIG5leHRfaHosIHN0cnVjdCB0aW1lc3BlYzY0ICp0cyxcXG4rXFx0XFx0XFx0ICBzdHJ1Y3QgcHRwX3N5c3RlbV90aW1lc3RhbXAgKnN0cylcXG4re1xcbitcXHR1MzIgbnNlYztcXG4rXFx0dTY0IHNlYztcXG4rXFx0dTggY21kO1xcbitcXHRpbnQgcmM7XFxuK1xcbitcXHRpZiAobmV4dF9oeilcXG4rXFx0XFx0Y21kID0gWkxfRFBMTF9UT0RfQ1RSTF9DTURfUkRfTkVYVF8xSFo7XFxuK1xcdGVsc2VcXG4rXFx0XFx0Y21kID0gWkxfRFBMTF9UT0RfQ1RSTF9DTURfUkRfQ1VSUkVOVDtcXG4rXFxuK1xcdC8qIFdhaXQgZm9yIGFueSBwcmV2aW91cyBUb0Qgb3BlcmF0aW9uIHRvIGNvbXBsZXRlICovXFxuK1xcdHJjID0gemwzMDczeF9jaGFuX3RvZF9yZWFkeV93YWl0KHpsZGV2LCBjaCk7XFxuK1xcdGlmIChyYylcXG4rXFx0XFx0cmV0dXJuIHJjO1xcbitcXG4rXFx0cHRwX3JlYWRfc3lzdGVtX3ByZXRzKHN0cyk7XFxuK1xcdHJjID0gemwzMDczeF9jaGFuX3RvZF9jdHJsKHpsZGV2LCBjaCwgY21kKTtcXG4rXFx0aWYgKHJjKVxcbitcXHRcXHRyZXR1cm4gcmM7XFxuK1xcbitcXHRyYyA9IHpsMzA3M3hfY2hhbl90b2RfcmVhZHlfd2FpdCh6bGRldiwgY2gpO1xcbitcXHRpZiAocmMpXFxuK1xcdFxcdHJldHVybiByYztcXG4rXFx0cHRwX3JlYWRfc3lzdGVtX3Bvc3R0cyhzdHMpO1xcbitcXG4rXFx0cmMgPSB6bDMwNzN4X3JlYWRfdTQ4KHpsZGV2LCBaTF9SRUdfRFBMTF9UT0RfU0VDKGNoKSwgXFx1MDAyNnNlYyk7XFxuK1xcdGlmIChyYylcXG4rXFx0XFx0cmV0dXJuIHJjO1xcbitcXG4rXFx0LyogSFcgbmFub3NlY29uZHMgYXJlIGFsd2F5cyBpbiBbMCwgTlNFQ19QRVJfU0VDKSByYW5nZSAqL1xcbitcXHRyYyA9IHpsMzA3M3hfcmVhZF91MzIoemxkZXYsIFpMX1JFR19EUExMX1RPRF9OUyhjaCksIFxcdTAwMjZuc2VjKTtcXG4rXFx0aWYgKHJjKVxcbitcXHRcXHRyZXR1cm4gcmM7XFxuK1xcbitcXHR0cy1cXHUwMDNldHZfc2VjID0gc2VjO1xcbitcXHR0cy1cXHUwMDNldHZfbnNlYyA9IG5zZWM7XFxuK1xcbitcXHRyZXR1cm4gMDtcXG4rfVxcbitcXG4rLyoqXFxuKyAqIHpsMzA3M3hfY2hhbl90b2Rfd3JpdGUgLSB3cml0ZSBUb0QgcmVnaXN0ZXJzIGFuZCB0cmlnZ2VyIDEgSHogdXBkYXRlXFxuKyAqIEB6bGRldjogcG9pbnRlciB0byB6bDMwNzN4IGRldmljZVxcbisgKiBAY2g6IERQTEwgY2hhbm5lbCBpbmRleFxcbisgKiBAdHM6IHRpbWUgdG8gc2V0XFxuKyAqXFxuKyAqIENvbnRleHQ6IENhbGxlciBtdXN0IHNlcmlhbGl6ZSBhbGwgemwzMDczeF9jaGFuX3RvZF8qIGNhbGxzIGV4dGVybmFsbHkuXFxuKyAqIFJldHVybjogMCBvbiBzdWNjZXNzLCBcXHUwMDNjMCBvbiBlcnJvclxcbisgKi9cXG4raW50IHpsMzA3M3hfY2hhbl90b2Rfd3JpdGUoc3RydWN0IHpsMzA3M3hfZGV2ICp6bGRldiwgdTggY2gsXFxuK1xcdFxcdFxcdCAgIHN0cnVjdCB0aW1lc3BlYzY0IHRzKVxcbit7XFxuK1xcdGludCByYztcXG4rXFxuK1xcdC8qIFdhaXQgZm9yIGFueSBwcmV2aW91cyBUb0Qgb3BlcmF0aW9uIHRvIGNvbXBsZXRlICovXFxuK1xcdHJjID0gemwzMDczeF9jaGFuX3RvZF9yZWFkeV93YWl0KHpsZGV2LCBjaCk7XFxuK1xcdGlmIChyYylcXG4rXFx0XFx0cmV0dXJuIHJjO1xcbitcXG4rXFx0cmMgPSB6bDMwNzN4X3dyaXRlX3U0OCh6bGRldiwgWkxfUkVHX0RQTExfVE9EX1NFQyhjaCksIHRzLnR2X3NlYyk7XFxuK1xcdGlmIChyYylcXG4rXFx0XFx0cmV0dXJuIHJjO1xcbitcXG4rXFx0cmMgPSB6bDMwNzN4X3dyaXRlX3UzMih6bGRldiwgWkxfUkVHX0RQTExfVE9EX05TKGNoKSwgdHMudHZfbnNlYyk7XFxuK1xcdGlmIChyYylcXG4rXFx0XFx0cmV0dXJuIHJjO1xcbitcXG4rXFx0cmV0dXJuIHpsMzA3M3hfY2hhbl90b2RfY3RybCh6bGRldiwgY2gsXFxuK1xcdFxcdFxcdFxcdCAgICAgWkxfRFBMTF9UT0RfQ1RSTF9DTURfV1JfTkVYVF8xSFopO1xcbit9XFxuK1xcbisvKipcXG4rICogemwzMDczeF9jaGFuX3RvZF9hZGp1c3QgLSBhdG9taWMgVG9EIHJlYWQtbW9kaWZ5LXdyaXRlIHdpdGggcm9sbG92ZXIgZ3VhcmRcXG4rICogQHpsZGV2OiBwb2ludGVyIHRvIHpsMzA3M3ggZGV2aWNlXFxuKyAqIEBjaDogRFBMTCBjaGFubmVsIGluZGV4XFxuKyAqIEBkZWx0YTogdGltZSBhZGp1c3RtZW50IHRvIGFwcGx5XFxuKyAqXFxuKyAqIFJlYWRzIHRoZSBuZXh0LUh6IFRvRCBhbmQgY3VycmVudCBUb0QsIHRoZW4gY2hlY2tzIHdoZXRoZXIgZW5vdWdoIHRpbWVcXG4rICogcmVtYWlucyBiZWZvcmUgdGhlIG5leHQgMSBIeiByb2xsb3ZlciB0byBzYWZlbHkgY29tcGxldGUgdGhlIHdyaXRlLlxcbisgKiBSZS1yZWFkcyBpZiB0aGUgMSBIeiB0aWNrIGNyb3NzZWQgYmV0d2VlbiB0aGUgdHdvIHJlYWRzIG9yIGlmIGxlc3NcXG4rICogdGhhbiAyMCBtcyByZW1haW5zIGJlZm9yZSB0aGUgbmV4dCByb2xsb3Zlci4gQXBwbGllcyBAZGVsdGEgYW5kIHdyaXRlc1xcbisgKiB0aGUgcmVzdWx0IGJhY2suXFxuKyAqXFxuKyAqIENvbnRleHQ6IENhbGxlciBtdXN0IHNlcmlhbGl6ZSBhbGwgemwzMDczeF9jaGFuX3RvZF8qIGNhbGxzIGV4dGVybmFsbHkuXFxuKyAqIFJldHVybjogMCBvbiBzdWNjZXNzLCBcXHUwMDNjMCBvbiBlcnJvclxcbisgKi9cXG4raW50IHpsMzA3M3hfY2hhbl90b2RfYWRqdXN0KHN0cnVjdCB6bDMwNzN4X2RldiAqemxkZXYsIHU4IGNoLFxcbitcXHRcXHRcXHQgICAgc3RydWN0IHRpbWVzcGVjNjQgZGVsdGEpXFxuK3tcXG4rI2RlZmluZSBaTF9UT0RfTUFYX1JFVFJJRVNcXHQyMFxcbitcXHRzdGF0aWMgY29uc3QgbG9uZyB0aHJlc2hvbGRfbnMgPSAyMCAqIE5TRUNfUEVSX01TRUM7XFxuK1xcdHN0cnVjdCB0aW1lc3BlYzY0IHRzX25leHQsIHRzX2N1ciwgZGlmZjtcXG4rXFx0aW50IHJjLCBpO1xcbitcXG4rXFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIFpMX1RPRF9NQVhfUkVUUklFUzsgaSsrKSB7XFxuK1xcdFxcdHJjID0gemwzMDczeF9jaGFuX3RvZF9yZWFkKHpsZGV2LCBjaCwgdHJ1ZSwgXFx1MDAyNnRzX25leHQsIE5VTEwpO1xcbitcXHRcXHRpZiAocmMpXFxuK1xcdFxcdFxcdHJldHVybiByYztcXG4rXFxuK1xcdFxcdHJjID0gemwzMDczeF9jaGFuX3RvZF9yZWFkKHpsZGV2LCBjaCwgZmFsc2UsIFxcdTAwMjZ0c19jdXIsIE5VTEwpO1xcbitcXHRcXHRpZiAocmMpXFxuK1xcdFxcdFxcdHJldHVybiByYztcXG4rXFxuK1xcdFxcdC8qIEVuc3VyZSB0aGUgMSBIeiB0aWNrIGRpZCBub3QgY3Jvc3MgYmV0d2VlbiB0aGUgdHdvIHJlYWRzXFxuK1xcdFxcdCAqIGFuZCB0aGF0IGVub3VnaCBtYXJnaW4gcmVtYWlucyB0byBjb21wbGV0ZSB0aGUgd3JpdGUuXFxuK1xcdFxcdCAqL1xcbitcXHRcXHRkaWZmID0gdGltZXNwZWM2NF9zdWIodHNfbmV4dCwgdHNfY3VyKTtcXG4rXFx0XFx0aWYgKGRpZmYudHZfc2VjIFxcdTAwM2UgMCB8fFxcbitcXHRcXHQgICAgKCFkaWZmLnR2X3NlYyBcXHUwMDI2XFx1MDAyNiBkaWZmLnR2X25zZWMgXFx1MDAzZT0gdGhyZXNob2xkX25zKSlcXG4rXFx0XFx0XFx0YnJlYWs7XFxuK1xcdH1cXG4rXFx0aWYgKGkgPT0gWkxfVE9EX01BWF9SRVRSSUVTKSB7XFxuK1xcdFxcdGRldl93YXJuKHpsZGV2LVxcdTAwM2VkZXYsXFxuK1xcdFxcdFxcdCBcXFwiRFBMTCV1IFRvRCBhZGp1c3QgZmFpbGVkIHRvIGdldCBzdGFibGUgbWFyZ2luXFxcXG5cXFwiLFxcbitcXHRcXHRcXHQgY2gpO1xcbitcXHRcXHRyZXR1cm4gLUVCVVNZO1xcbitcXHR9XFxuK1xcbitcXHQvKiBBcHBseSBkZWx0YSB0byB0aGUgbmV4dC1IeiBUb0QgKi9cXG4rXFx0dHNfbmV4dCA9IHRpbWVzcGVjNjRfYWRkKHRzX25leHQsIGRlbHRhKTtcXG4rXFx0aWYgKCF0aW1lc3BlYzY0X3ZhbGlkKFxcdTAwMjZ0c19uZXh0KSlcXG4rXFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuK1xcbitcXHRyZXR1cm4gemwzMDczeF9jaGFuX3RvZF93cml0ZSh6bGRldiwgY2gsIHRzX25leHQpO1xcbisjdW5kZWYgWkxfVE9EX01BWF9SRVRSSUVTXFxuK31cXG4rXFxuKy8qKlxcbisgKiB6bDMwNzN4X2NoYW5fZGZfb2Zmc2V0X3NldCAtIHdyaXRlIGRlbHRhIGZyZXF1ZW5jeSBvZmZzZXQgdG8gaGFyZHdhcmVcXG4rICogQHpsZGV2OiBwb2ludGVyIHRvIHpsMzA3M3ggZGV2aWNlXFxuKyAqIEBjaDogRFBMTCBjaGFubmVsIGluZGV4XFxuKyAqIEBvZmZzZXQ6IGZyZXF1ZW5jeSBvZmZzZXQgaW4gMl4tNDggc3RlcHNcXG4rICpcXG4rICogQ29udGV4dDogQ2FsbGVyIG11c3QgaG9sZCB0aGUgcGVyLURQTEwgbG9jay5cXG4rICogUmV0dXJuOiAwIG9uIHN1Y2Nlc3MsIFxcdTAwM2MwIG9uIGVycm9yXFxuKyAqL1xcbitpbnQgemwzMDczeF9jaGFuX2RmX29mZnNldF9zZXQoc3RydWN0IHpsMzA3M3hfZGV2ICp6bGRldiwgdTggY2gsIHM2NCBvZmZzZXQpXFxuK3tcXG4rXFx0aW50IHJjO1xcbitcXG4rXFx0cmMgPSB6bDMwNzN4X3dyaXRlX3U0OCh6bGRldiwgWkxfUkVHX0RQTExfREZfT0ZGU0VUKGNoKSwgb2Zmc2V0KTtcXG4rXFx0aWYgKCFyYylcXG4rXFx0XFx0emxkZXYtXFx1MDAzZWNoYW5bY2hdLmRmX29mZnNldCA9IG9mZnNldDtcXG4rXFxuK1xcdHJldHVybiByYztcXG4rfVxcbitcXG4rLyoqXFxuKyAqIHpsMzA3M3hfY2hhbl90aWVfd3JpdGUgLSBhZGp1c3QgRFBMTCBwaGFzZSB1c2luZyBUSUUgd3JpdGVcXG4rICogQHpsZGV2OiBwb2ludGVyIHRvIHpsMzA3M3ggZGV2aWNlXFxuKyAqIEBjaDogRFBMTCBjaGFubmVsIGluZGV4XFxuKyAqIEBkZWx0YV9uczogcGhhc2UgYWRqdXN0bWVudCBpbiBuYW5vc2Vjb25kcyAobXVzdCBiZSBpbiAoLTFzLCAxcykpXFxuKyAqXFxuKyAqIENvbnZlcnRzIG5hbm9zZWNvbmRzIHRvIFRJRSB1bml0cyAoMC4wMSBwcykgYW5kIHdyaXRlcyBUSUUgZGF0YVxcbisgKiB0byB0aGUgc3BlY2lmaWVkIGNoYW5uZWwuXFxuKyAqXFxuKyAqIFJldHVybjogMCBvbiBzdWNjZXNzLCBcXHUwMDNjMCBvbiBlcnJvclxcbisgKi9cXG4raW50IHpsMzA3M3hfY2hhbl90aWVfd3JpdGUoc3RydWN0IHpsMzA3M3hfZGV2ICp6bGRldiwgdTggY2gsIHM2NCBkZWx0YV9ucylcXG4re1xcbitcXHRzNjQgdGllX2RhdGE7XFxuK1xcdGludCByYztcXG4rXFxuK1xcdGlmIChXQVJOX09OKGRlbHRhX25zIFxcdTAwM2M9IC1OU0VDX1BFUl9TRUMgfHwgZGVsdGFfbnMgXFx1MDAzZT0gTlNFQ19QRVJfU0VDKSlcXG4rXFx0XFx0cmV0dXJuIC1FUkFOR0U7XFxuK1xcbitcXHRndWFyZChtdXRleCkoXFx1MDAyNnpsZGV2LVxcdTAwM2V0aWVfbG9jayk7XFxuK1xcbitcXHQvKiBXYWl0IGZvciBhbnkgcHJldmlvdXMgVElFIG9wZXJhdGlvbiB0byBjb21wbGV0ZSAqL1xcbitcXHRyYyA9IHpsMzA3M3hfcG9sbF96ZXJvX3U4KHpsZGV2LCBaTF9SRUdfRFBMTF9USUVfQ1RSTCxcXG4rXFx0XFx0XFx0XFx0ICBaTF9EUExMX1RJRV9DVFJMX09QLFxcbitcXHRcXHRcXHRcXHQgIFpMX1BPTExfVElFX1dSX1RJTUVPVVRfVVMpO1xcbitcXHRpZiAocmMpXFxuK1xcdFxcdHJldHVybiByYztcXG4rXFxuK1xcdC8qIENvbnZlcnQgbnMgdG8gVElFIHVuaXRzICgwLjAxIHBzID0gMTBeLTE0IHMpICovXFxuK1xcdHRpZV9kYXRhID0gZGVsdGFfbnMgKiAxMDAwMDBMTDtcXG4rXFxuK1xcdHJjID0gemwzMDczeF93cml0ZV91NDgoemxkZXYsIFpMX1JFR19EUExMX1RJRV9EQVRBKGNoKSwgdGllX2RhdGEpO1xcbitcXHRpZiAocmMpXFxuK1xcdFxcdHJldHVybiByYztcXG4rXFxuK1xcdHJjID0gemwzMDczeF93cml0ZV91OCh6bGRldiwgWkxfUkVHX0RQTExfVElFX0NUUkxfTUFTSywgQklUKGNoKSk7XFxuK1xcdGlmIChyYylcXG4rXFx0XFx0cmV0dXJuIHJjO1xcbitcXG4rXFx0cmV0dXJuIHpsMzA3M3hfd3JpdGVfdTgoemxkZXYsIFpMX1JFR19EUExMX1RJRV9DVFJMLFxcbitcXHRcXHRcXHRcXHRaTF9EUExMX1RJRV9DVFJMX09QX1dSKTtcXG4rfVxcbitcXG4rLyoqXFxuKyAqIHpsMzA3M3hfY2hhbl9waGFzZV9zdGVwIC0gZXhlY3V0ZSBvbmUgb3V0cHV0IHBoYXNlIHN0ZXAgb3BlcmF0aW9uXFxuKyAqIEB6bGRldjogcG9pbnRlciB0byB6bDMwNzN4IGRldmljZVxcbisgKiBAY2g6IERQTEwgY2hhbm5lbCBpbmRleFxcbisgKiBAb3V0X21hc2s6IGJpdG1hc2sgb2Ygb3V0cHV0cyB0byBzdGVwXFxuKyAqIEBzdGVwX2N5Y2xlczogcGhhc2Ugc3RlcCBpbiBzeW50aGVzaXplciBjbG9jayBjeWNsZXNcXG4rICogQHRvZF9zdGVwOiBhbHNvIHN0ZXAgdGhlIFRvRCBjb3VudGVyXFxuKyAqXFxuKyAqIEFsbCBtYXNrZWQgb3V0cHV0cyBtdXN0IHVzZSBzeW50aGVzaXplcnMgb2YgdGhlIHNhbWUgZnJlcXVlbmN5IHNpbmNlXFxuKyAqIHRoZSBzdGVwIHZhbHVlIGlzIGluIHN5bnRoZXNpemVyIGNsb2NrIGN5Y2xlcy5cXG4rICpcXG4rICogUmV0dXJuOiAwIG9uIHN1Y2Nlc3MsIFxcdTAwM2MwIG9uIGVycm9yXFxuKyAqL1xcbitpbnQgemwzMDczeF9jaGFuX3BoYXNlX3N0ZXAoc3RydWN0IHpsMzA3M3hfZGV2ICp6bGRldiwgdTggY2gsXFxuK1xcdFxcdFxcdCAgICB1MTYgb3V0X21hc2ssIHMzMiBzdGVwX2N5Y2xlcyxcXG4rXFx0XFx0XFx0ICAgIGJvb2wgdG9kX3N0ZXApXFxuK3tcXG4rXFx0dTggY3RybDtcXG4rXFx0aW50IHJjO1xcbitcXG4rXFx0Z3VhcmQobXV0ZXgpKFxcdTAwMjZ6bGRldi1cXHUwMDNlcGhhc2Vfc3RlcF9sb2NrKTtcXG4rXFxuK1xcdC8qIFdhaXQgZm9yIGFueSBwcmV2aW91cyBwaGFzZSBzdGVwIG9wZXJhdGlvbiB0byBjb21wbGV0ZSAqL1xcbitcXHRyYyA9IHpsMzA3M3hfcG9sbF96ZXJvX3U4KHpsZGV2LCBaTF9SRUdfT1VUUFVUX1BIQVNFX1NURVBfQ1RSTCxcXG4rXFx0XFx0XFx0XFx0ICBaTF9PVVRQVVRfUEhBU0VfU1RFUF9DVFJMX09QLFxcbitcXHRcXHRcXHRcXHQgIFpMX1BPTExfUEhBU0VfU1RFUF9USU1FT1VUX1VTKTtcXG4rXFx0aWYgKHJjKVxcbitcXHRcXHRyZXR1cm4gcmM7XFxuK1xcbitcXHRyYyA9IHpsMzA3M3hfd3JpdGVfdTMyKHpsZGV2LCBaTF9SRUdfT1VUUFVUX1BIQVNFX1NURVBfREFUQSxcXG4rXFx0XFx0XFx0ICAgICAgIHN0ZXBfY3ljbGVzKTtcXG4rXFx0aWYgKHJjKVxcbitcXHRcXHRyZXR1cm4gcmM7XFxuK1xcbitcXHRyYyA9IHpsMzA3M3hfd3JpdGVfdTE2KHpsZGV2LCBaTF9SRUdfT1VUUFVUX1BIQVNFX1NURVBfTUFTSywgb3V0X21hc2spO1xcbitcXHRpZiAocmMpXFxuK1xcdFxcdHJldHVybiByYztcXG4rXFxuK1xcdHJjID0gemwzMDczeF93cml0ZV91OCh6bGRldiwgWkxfUkVHX09VVFBVVF9QSEFTRV9TVEVQX05VTUJFUiwgMSk7XFxuK1xcdGlmIChyYylcXG4rXFx0XFx0cmV0dXJuIHJjO1xcbitcXG4rXFx0Y3RybCA9IEZJRUxEX1BSRVAoWkxfT1VUUFVUX1BIQVNFX1NURVBfQ1RSTF9EUExMLCBjaCkgfFxcbitcXHQgICAgICAgRklFTERfUFJFUChaTF9PVVRQVVRfUEhBU0VfU1RFUF9DVFJMX09QLFxcbitcXHRcXHRcXHQgIFpMX09VVFBVVF9QSEFTRV9TVEVQX0NUUkxfT1BfV1JJVEUpO1xcbitcXHRpZiAodG9kX3N0ZXApXFxuK1xcdFxcdGN0cmwgfD0gWkxfT1VUUFVUX1BIQVNFX1NURVBfQ1RSTF9UT0RfU1RFUDtcXG4rXFxuK1xcdHJldHVybiB6bDMwNzN4X3dyaXRlX3U4KHpsZGV2LCBaTF9SRUdfT1VUUFVUX1BIQVNFX1NURVBfQ1RSTCwgY3RybCk7XFxuK31cXG4rXFxuIC8qKlxcbiAgKiB6bDMwNzN4X2NoYW5fc3RhdGVfc2V0IC0gY29tbWl0IERQTEwgY2hhbm5lbCBzdGF0ZSBjaGFuZ2VzIHRvIGhhcmR3YXJlXFxuICAqIEB6bGRldjogcG9pbnRlciB0byB6bDMwNzN4X2RldiBzdHJ1Y3R1cmVcXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5oIGIvZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5oXFxuaW5kZXggZGM5YzZkOTViZGVlNy4uOTljM2I3MDg4ZjY3OCAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmhcXG4rKysgYi9kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmhcXG5AQCAtNSwxMCArNSwxMiBAQFxcbiBcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2JpdGZpZWxkLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9zdGRkZWYuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3RpbWU2NC5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvdHlwZXMuaFxcdTAwM2VcXG4gXFxuICNpbmNsdWRlIFxcXCJyZWdzLmhcXFwiXFxuIFxcbitzdHJ1Y3QgcHRwX3N5c3RlbV90aW1lc3RhbXA7XFxuIHN0cnVjdCB6bDMwNzN4X2RldjtcXG4gXFxuIC8qKlxcbkBAIC00Miw2ICs0NCwyMSBAQCBpbnQgemwzMDczeF9jaGFuX3N0YXRlX3NldChzdHJ1Y3QgemwzMDczeF9kZXYgKnpsZGV2LCB1OCBpbmRleCxcXG4gaW50IHpsMzA3M3hfY2hhbl9zdGF0ZV91cGRhdGUoc3RydWN0IHpsMzA3M3hfZGV2ICp6bGRldiwgdTggaW5kZXgpO1xcbiBpbnQgemwzMDczeF9jaGFuX25jb19tb2RlX3NldChzdHJ1Y3QgemwzMDczeF9kZXYgKnpsZGV2LCB1OCBpbmRleCk7XFxuIFxcbitpbnQgemwzMDczeF9jaGFuX3RvZF9yZWFkeV93YWl0KHN0cnVjdCB6bDMwNzN4X2RldiAqemxkZXYsIHU4IGNoKTtcXG4raW50IHpsMzA3M3hfY2hhbl90b2RfcmVhZChzdHJ1Y3QgemwzMDczeF9kZXYgKnpsZGV2LCB1OCBjaCxcXG4rXFx0XFx0XFx0ICBib29sIG5leHRfaHosIHN0cnVjdCB0aW1lc3BlYzY0ICp0cyxcXG4rXFx0XFx0XFx0ICBzdHJ1Y3QgcHRwX3N5c3RlbV90aW1lc3RhbXAgKnN0cyk7XFxuK2ludCB6bDMwNzN4X2NoYW5fdG9kX3dyaXRlKHN0cnVjdCB6bDMwNzN4X2RldiAqemxkZXYsIHU4IGNoLFxcbitcXHRcXHRcXHQgICBzdHJ1Y3QgdGltZXNwZWM2NCB0cyk7XFxuK2ludCB6bDMwNzN4X2NoYW5fdG9kX2FkanVzdChzdHJ1Y3QgemwzMDczeF9kZXYgKnpsZGV2LCB1OCBjaCxcXG4rXFx0XFx0XFx0ICAgIHN0cnVjdCB0aW1lc3BlYzY0IGRlbHRhKTtcXG4raW50IHpsMzA3M3hfY2hhbl9waGFzZV9zdGVwKHN0cnVjdCB6bDMwNzN4X2RldiAqemxkZXYsIHU4IGNoLFxcbitcXHRcXHRcXHQgICAgdTE2IG91dF9tYXNrLCBzMzIgc3RlcF9jeWNsZXMsIGJvb2wgdG9kX3N0ZXApO1xcbitcXG4raW50IHpsMzA3M3hfY2hhbl9kZl9vZmZzZXRfc2V0KHN0cnVjdCB6bDMwNzN4X2RldiAqemxkZXYsIHU4IGNoLCBzNjQgb2Zmc2V0KTtcXG4rXFxuK2ludCB6bDMwNzN4X2NoYW5fdGllX3dyaXRlKHN0cnVjdCB6bDMwNzN4X2RldiAqemxkZXYsIHU4IGNoLCBzNjQgZGVsdGFfbnMpO1xcbitcXG4gLyoqXFxuICAqIHpsMzA3M3hfY2hhbl9kZl9vZmZzZXRfZ2V0IC0gZ2V0IGNhY2hlZCBkZl9vZmZzZXQgdnMgdHJhY2tlZCByZWZlcmVuY2VcXG4gICogQGNoYW46IHBvaW50ZXIgdG8gY2hhbm5lbCBzdGF0ZVxcbkBAIC0yMDAsNiArMjE3LDIxIEBAIHN0YXRpYyBpbmxpbmUgYm9vbCB6bDMwNzN4X2NoYW5fbW9kZV9pc19yZWZsb2NrKGNvbnN0IHN0cnVjdCB6bDMwNzN4X2NoYW4gKmNoYW4pXFxuIFxcdHJldHVybiB6bDMwNzN4X2NoYW5fbW9kZV9nZXQoY2hhbikgPT0gWkxfRFBMTF9NT0RFX1JFRlNFTF9NT0RFX1JFRkxPQ0s7XFxuIH1cXG4gXFxuKy8qKlxcbisgKiB6bDMwNzN4X2NoYW5fbW9kZV9zdXBwb3J0c190aWUgLSBjaGVjayBpZiBjaGFubmVsIG1vZGUgc3VwcG9ydHMgVElFIHdyaXRlXFxuKyAqIEBjaGFuOiBwb2ludGVyIHRvIGNoYW5uZWwgc3RhdGVcXG4rICpcXG4rICogVElFIHdyaXRlIGlzIHN1cHBvcnRlZCBpbiBBVVRPIGFuZCBSRUZMT0NLIG1vZGVzIHJlZ2FyZGxlc3Mgb2YgbG9jayBzdGF0ZS5cXG4rICpcXG4rICogUmV0dXJuOiB0cnVlIGlmIFRJRSB3cml0ZSBpcyBzdXBwb3J0ZWQsIGZhbHNlIG90aGVyd2lzZVxcbisgKi9cXG4rc3RhdGljIGlubGluZSBib29sXFxuK3psMzA3M3hfY2hhbl9tb2RlX3N1cHBvcnRzX3RpZShjb25zdCBzdHJ1Y3QgemwzMDczeF9jaGFuICpjaGFuKVxcbit7XFxuK1xcdHJldHVybiB6bDMwNzN4X2NoYW5fbW9kZV9pc19hdXRvKGNoYW4pIHx8XFxuK1xcdFxcdHpsMzA3M3hfY2hhbl9tb2RlX2lzX3JlZmxvY2soY2hhbik7XFxuK31cXG4rXFxuIC8qKlxcbiAgKiB6bDMwNzN4X2NoYW5faXNfaG9fcmVhZHkgLSBjaGVjayBpZiBob2xkb3ZlciBpcyByZWFkeVxcbiAgKiBAY2hhbjogcG9pbnRlciB0byBjaGFubmVsIHN0YXRlXFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvZHBsbC96bDMwNzN4L2NvcmUuYyBiL2RyaXZlcnMvZHBsbC96bDMwNzN4L2NvcmUuY1xcbmluZGV4IDViMmQ3N2YyYzIyODguLjIzMGRmMDhlMjdjZDEgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9kcGxsL3psMzA3M3gvY29yZS5jXFxuKysrIGIvZHJpdmVycy9kcGxsL3psMzA3M3gvY29yZS5jXFxuQEAgLTMyMiw3ICszMjIsNyBAQCBpbnQgemwzMDczeF93cml0ZV91NDgoc3RydWN0IHpsMzA3M3hfZGV2ICp6bGRldiwgdW5zaWduZWQgaW50IHJlZywgdTY0IHZhbClcXG4gaW50IHpsMzA3M3hfcG9sbF96ZXJvX3U4KHN0cnVjdCB6bDMwNzN4X2RldiAqemxkZXYsIHVuc2lnbmVkIGludCByZWcsXFxuIFxcdFxcdFxcdCB1OCBtYXNrLCB1bnNpZ25lZCBpbnQgdGltZW91dF91cylcXG4ge1xcbi0jZGVmaW5lIFpMX1BPTExfU0xFRVBfVVMgMTBcXG4rXFx0dW5zaWduZWQgaW50IHNsZWVwX3VzID0gdGltZW91dF91cyAvIDUwO1xcbiBcXHR1bnNpZ25lZCBpbnQgdmFsO1xcbiBcXG4gXFx0LyogQ2hlY2sgdGhlIHJlZ2lzdGVyIGlzIDhiaXQgKi9cXG5AQCAtMzM2LDcgKzMzNiw3IEBAIGludCB6bDMwNzN4X3BvbGxfemVyb191OChzdHJ1Y3QgemwzMDczeF9kZXYgKnpsZGV2LCB1bnNpZ25lZCBpbnQgcmVnLFxcbiBcXHRyZWcgPSBaTF9SRUdfQUREUihyZWcpICsgWkxfUkFOR0VfT0ZGU0VUO1xcbiBcXG4gXFx0cmV0dXJuIHJlZ21hcF9yZWFkX3BvbGxfdGltZW91dCh6bGRldi1cXHUwMDNlcmVnbWFwLCByZWcsIHZhbCwgISh2YWwgXFx1MDAyNiBtYXNrKSxcXG4tXFx0XFx0XFx0XFx0XFx0WkxfUE9MTF9TTEVFUF9VUywgdGltZW91dF91cyk7XFxuK1xcdFxcdFxcdFxcdFxcdHNsZWVwX3VzLCB0aW1lb3V0X3VzKTtcXG4gfVxcbiBcXG4gaW50IHpsMzA3M3hfbWJfb3Aoc3RydWN0IHpsMzA3M3hfZGV2ICp6bGRldiwgdW5zaWduZWQgaW50IG9wX3JlZywgdTggb3BfdmFsLFxcbkBAIC01MTEsNiArNTExLDExIEBAIHpsMzA3M3hfZGV2X3N0YXRlX2ZldGNoKHN0cnVjdCB6bDMwNzN4X2RldiAqemxkZXYpXFxuIFxcdGludCByYztcXG4gXFx0dTggaTtcXG4gXFxuK1xcdHJjID0gemwzMDczeF9yZWFkX3UxNih6bGRldiwgWkxfUkVHX09VVFBVVF9TVEVQX1RJTUVfTUFTSyxcXG4rXFx0XFx0XFx0ICAgICAgXFx1MDAyNnpsZGV2LVxcdTAwM2VvdXRfc3RlcF90aW1lX21hc2spO1xcbitcXHRpZiAocmMpXFxuK1xcdFxcdHJldHVybiByYztcXG4rXFxuIFxcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBaTDMwNzNYX05VTV9SRUZTOyBpKyspIHtcXG4gXFx0XFx0cmMgPSB6bDMwNzN4X3JlZl9zdGF0ZV9mZXRjaCh6bGRldiwgaSk7XFxuIFxcdFxcdGlmIChyYykge1xcbkBAIC0xMDM0LDYgKzEwMzksMTQgQEAgaW50IHpsMzA3M3hfZGV2X3Byb2JlKHN0cnVjdCB6bDMwNzN4X2RldiAqemxkZXYpXFxuIFxcdCAqIGFuZC9vciBwb2xscyBhcmUgcmVxdWlyZWQgdG8gYmUgZG9uZSBhdG9taWNhbGx5LlxcbiBcXHQgKi9cXG4gXFx0cmMgPSBkZXZtX211dGV4X2luaXQoemxkZXYtXFx1MDAzZWRldiwgXFx1MDAyNnpsZGV2LVxcdTAwM2VtdWx0aW9wX2xvY2spO1xcbitcXHRpZiAocmMpXFxuK1xcdFxcdHJldHVybiBkZXZfZXJyX3Byb2JlKHpsZGV2LVxcdTAwM2VkZXYsIHJjLFxcbitcXHRcXHRcXHRcXHQgICAgIFxcXCJGYWlsZWQgdG8gaW5pdGlhbGl6ZSBtdXRleFxcXFxuXFxcIik7XFxuK1xcdHJjID0gZGV2bV9tdXRleF9pbml0KHpsZGV2LVxcdTAwM2VkZXYsIFxcdTAwMjZ6bGRldi1cXHUwMDNlcGhhc2Vfc3RlcF9sb2NrKTtcXG4rXFx0aWYgKHJjKVxcbitcXHRcXHRyZXR1cm4gZGV2X2Vycl9wcm9iZSh6bGRldi1cXHUwMDNlZGV2LCByYyxcXG4rXFx0XFx0XFx0XFx0ICAgICBcXFwiRmFpbGVkIHRvIGluaXRpYWxpemUgbXV0ZXhcXFxcblxcXCIpO1xcbitcXHRyYyA9IGRldm1fbXV0ZXhfaW5pdCh6bGRldi1cXHUwMDNlZGV2LCBcXHUwMDI2emxkZXYtXFx1MDAzZXRpZV9sb2NrKTtcXG4gXFx0aWYgKHJjKVxcbiBcXHRcXHRyZXR1cm4gZGV2X2Vycl9wcm9iZSh6bGRldi1cXHUwMDNlZGV2LCByYyxcXG4gXFx0XFx0XFx0XFx0ICAgICBcXFwiRmFpbGVkIHRvIGluaXRpYWxpemUgbXV0ZXhcXFxcblxcXCIpO1xcbmRpZmYgLS1naXQgYS9kcml2ZXJzL2RwbGwvemwzMDczeC9jb3JlLmggYi9kcml2ZXJzL2RwbGwvemwzMDczeC9jb3JlLmhcXG5pbmRleCA3OGRjMjA4ZjNlZWEyLi42N2MxMGUyNTk1MTE4IDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvZHBsbC96bDMwNzN4L2NvcmUuaFxcbisrKyBiL2RyaXZlcnMvZHBsbC96bDMwNzN4L2NvcmUuaFxcbkBAIC0yNiw2ICsyNiwxMCBAQCBzdHJ1Y3QgemwzMDczeF9kcGxsO1xcbiAjZGVmaW5lIFpMX1BPTExfSFdSRUdfVElNRU9VVF9VU1xcdCg1MCAqIFVTRUNfUEVSX01TRUMpXFxuICNkZWZpbmUgWkxfUE9MTF9NQl9USU1FT1VUX1VTXFx0XFx0KDMwICogVVNFQ19QRVJfTVNFQylcXG4gI2RlZmluZSBaTF9QT0xMX1BIQVNFX0VSUl9USU1FT1VUX1VTXFx0KDUwICogVVNFQ19QRVJfTVNFQylcXG4rI2RlZmluZSBaTF9QT0xMX1BIQVNFX1NURVBfVElNRU9VVF9VU1xcdCgzMDAwICogVVNFQ19QRVJfTVNFQylcXG4rI2RlZmluZSBaTF9QT0xMX1RJRV9XUl9USU1FT1VUX1VTXFx0KDEwMDAgKiBVU0VDX1BFUl9NU0VDKVxcbisjZGVmaW5lIFpMX1BPTExfVE9EX1JEX1RJTUVPVVRfVVNcXHQoMzAgKiBVU0VDX1BFUl9NU0VDKVxcbisjZGVmaW5lIFpMX1BPTExfVE9EX1dSX1RJTUVPVVRfVVNcXHQoMTAwMCAqIFVTRUNfUEVSX01TRUMpXFxuIFxcbiBlbnVtIHpsMzA3M3hfZmxhZ3Mge1xcbiBcXHRaTDMwNzNYX0ZMQUdfUkVGX1BIQVNFX0NPTVBfMzJfQklULFxcbkBAIC01NSw2ICs1OSw4IEBAIHN0cnVjdCB6bDMwNzN4X2NoaXBfaW5mbyB7XFxuICAqIEByZWdtYXA6IHJlZ21hcCB0byBhY2Nlc3MgZGV2aWNlIHJlZ2lzdGVyc1xcbiAgKiBAaW5mbzogZGV0ZWN0ZWQgY2hpcCBpbmZvXFxuICAqIEBtdWx0aW9wX2xvY2s6IHRvIHNlcmlhbGl6ZSBtdWx0aXBsZSByZWdpc3RlciBvcGVyYXRpb25zXFxuKyAqIEB0aWVfbG9jazogdG8gc2VyaWFsaXplIFRJRSB3cml0ZSBvcGVyYXRpb25zXFxuKyAqIEBwaGFzZV9zdGVwX2xvY2s6IHRvIHNlcmlhbGl6ZSBvdXRwdXQgcGhhc2Ugc3RlcCBvcGVyYXRpb25zXFxuICAqIEByZWY6IGFycmF5IG9mIGlucHV0IHJlZmVyZW5jZXMnIGludmFyaWFudHNcXG4gICogQG91dDogYXJyYXkgb2Ygb3V0cycgaW52YXJpYW50c1xcbiAgKiBAc3ludGg6IGFycmF5IG9mIHN5bnRocycgaW52YXJpYW50c1xcbkBAIC02Myw2ICs2OSw3IEBAIHN0cnVjdCB6bDMwNzN4X2NoaXBfaW5mbyB7XFxuICAqIEBrd29ya2VyOiB0aHJlYWQgZm9yIHBlcmlvZGljIHdvcmtcXG4gICogQHdvcms6IHBlcmlvZGljIHdvcmtcXG4gICogQGNsb2NrX2lkOiBjbG9jayBpZCBvZiB0aGUgZGV2aWNlXFxuKyAqIEBvdXRfc3RlcF90aW1lX21hc2s6IG91dHB1dCBzdGVwLXRpbWUgbWFzayAoZGV2aWNlLWdsb2JhbClcXG4gICogQHBoYXNlX2F2Z19mYWN0b3I6IHBoYXNlIG9mZnNldCBtZWFzdXJlbWVudCBhdmVyYWdpbmcgZmFjdG9yXFxuICAqIEBmcmVxX21vbml0b3I6IGlzIGZyZXF1ZW5jeSBtb25pdG9yIGVuYWJsZWRcXG4gICovXFxuQEAgLTcxLDYgKzc4LDggQEAgc3RydWN0IHpsMzA3M3hfZGV2IHtcXG4gXFx0c3RydWN0IHJlZ21hcFxcdFxcdFxcdCpyZWdtYXA7XFxuIFxcdGNvbnN0IHN0cnVjdCB6bDMwNzN4X2NoaXBfaW5mb1xcdCppbmZvO1xcbiBcXHRzdHJ1Y3QgbXV0ZXhcXHRcXHRcXHRtdWx0aW9wX2xvY2s7XFxuK1xcdHN0cnVjdCBtdXRleFxcdFxcdFxcdHRpZV9sb2NrO1xcbitcXHRzdHJ1Y3QgbXV0ZXhcXHRcXHRcXHRwaGFzZV9zdGVwX2xvY2s7XFxuIFxcbiBcXHQvKiBJbnZhcmlhbnRzICovXFxuIFxcdHN0cnVjdCB6bDMwNzN4X3JlZlxcdHJlZltaTDMwNzNYX05VTV9SRUZTXTtcXG5AQCAtODcsNiArOTYsNyBAQCBzdHJ1Y3QgemwzMDczeF9kZXYge1xcbiBcXG4gXFx0LyogUGVyLWNoaXAgcGFyYW1ldGVycyAqL1xcbiBcXHR1NjRcXHRcXHRcXHRjbG9ja19pZDtcXG4rXFx0dTE2XFx0XFx0XFx0b3V0X3N0ZXBfdGltZV9tYXNrO1xcbiBcXHR1OFxcdFxcdFxcdHBoYXNlX2F2Z19mYWN0b3I7XFxuIFxcdGJvb2xcXHRcXHRcXHRmcmVxX21vbml0b3I7XFxuIH07XFxuQEAgLTMwOCw2ICszMTgsMTkgQEAgemwzMDczeF9kZXZfb3V0X2lzX2VuYWJsZWQoc3RydWN0IHpsMzA3M3hfZGV2ICp6bGRldiwgdTggaW5kZXgpXFxuIFxcdHJldHVybiB6bDMwNzN4X3N5bnRoX2lzX2VuYWJsZWQoc3ludGgpIFxcdTAwMjZcXHUwMDI2IHpsMzA3M3hfb3V0X2lzX2VuYWJsZWQob3V0KTtcXG4gfVxcbiBcXG4rLyoqXFxuKyAqIHpsMzA3M3hfZGV2X291dF9pc19zdGVwcGVkIC0gY2hlY2sgaWYgb3V0cHV0IGlzIGluIHN0ZXAtdGltZSBtYXNrXFxuKyAqIEB6bGRldjogcG9pbnRlciB0byB6bDMwNzN4IGRldmljZVxcbisgKiBAaW5kZXg6IG91dHB1dCBpbmRleFxcbisgKlxcbisgKiBSZXR1cm46IHRydWUgaWYgb3V0cHV0IGlzIGFmZmVjdGVkIGJ5IHN0ZXAtdGltZSBvcGVyYXRpb25zXFxuKyAqL1xcbitzdGF0aWMgaW5saW5lIGJvb2xcXG4remwzMDczeF9kZXZfb3V0X2lzX3N0ZXBwZWQoc3RydWN0IHpsMzA3M3hfZGV2ICp6bGRldiwgdTggaW5kZXgpXFxuK3tcXG4rXFx0cmV0dXJuICEhKHpsZGV2LVxcdTAwM2VvdXRfc3RlcF90aW1lX21hc2sgXFx1MDAyNiBCSVQoaW5kZXgpKTtcXG4rfVxcbitcXG4gLyoqXFxuICAqIHpsMzA3M3hfZGV2X291dF9kcGxsX2dldCAtIGdldCBEUExMIElEIHRoZSBvdXRwdXQgaXMgZHJpdmVuIGJ5XFxuICAqIEB6bGRldjogcG9pbnRlciB0byB6bDMwNzN4IGRldmljZVxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL2RwbGwvemwzMDczeC9kcGxsLmMgYi9kcml2ZXJzL2RwbGwvemwzMDczeC9kcGxsLmNcXG5pbmRleCAwNDg4YWU2YWM0ODZjLi44MzAxYWQzNDM2NThhIDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvZHBsbC96bDMwNzN4L2RwbGwuY1xcbisrKyBiL2RyaXZlcnMvZHBsbC96bDMwNzN4L2RwbGwuY1xcbkBAIC0yLDYgKzIsNyBAQFxcbiBcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2JpdHMuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2JpdGZpZWxkLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC9jbGVhbnVwLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9idWcuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2NvbnRhaW5lcl9vZi5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvZGV2X3ByaW50ay5oXFx1MDAzZVxcbkBAIC0xMyw2ICsxNCw3IEBAXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9uZXRsaW5rLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3Byb3BlcnR5LmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC9wdHBfY2xvY2tfa2VybmVsLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9zbGFiLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9zcHJpbnRmLmhcXHUwMDNlXFxuIFxcbkBAIC0yMjc1LDQ1ICsyMjc3LDM4NCBAQCB6bDMwNzN4X2RwbGxfaW5pdF9maW5lX3BoYXNlX2FkanVzdChzdHJ1Y3QgemwzMDczeF9kZXYgKnpsZGV2KVxcbiBcXHRyZXR1cm4gemwzMDczeF93cml0ZV91OCh6bGRldiwgWkxfUkVHX1NZTlRIX1BIQVNFX1NISUZUX0NUUkwsIDB4MDEpO1xcbiB9XFxuIFxcbisvKiBNYXhpbXVtIGZyZXF1ZW5jeSBhZGp1c3RtZW50OiArLTElIG9mIG5vbWluYWwgaW4gcHBiICovXFxuKyNkZWZpbmUgWkwzMDczWF9EUExMX1BUUF9NQVhfQURKXFx0MTAwMDAwMDBcXG4rXFxuIC8qKlxcbi0gKiB6bDMwNzN4X2RwbGxfYWxsb2MgLSBhbGxvY2F0ZSBEUExMIGRldmljZVxcbi0gKiBAemxkZXY6IHBvaW50ZXIgdG8gemwzMDczeCBkZXZpY2VcXG4tICogQGNoOiBEUExMIGNoYW5uZWwgbnVtYmVyXFxuKyAqIHpsMzA3M3hfZHBsbF9wdHBfZ2V0dGltZXg2NCAtIHJlYWQgY3VycmVudCB0aW1lIGZyb20gVG9EIGNvdW50ZXJzXFxuKyAqIEBpbmZvOiBQVFAgY2xvY2sgaW5mb1xcbisgKiBAdHM6IHRpbWVzcGVjIHRvIHN0b3JlIGN1cnJlbnQgdGltZVxcbisgKiBAc3RzOiBvcHRpb25hbCBzeXN0ZW0gdGltZXN0YW1wIHBhaXIgZm9yIGNyb3NzLXRpbWVzdGFtcGluZ1xcbiAgKlxcbi0gKiBBbGxvY2F0ZXMgRFBMTCBkZXZpY2Ugc3RydWN0dXJlIGZvciBnaXZlbiBEUExMIGNoYW5uZWwuXFxuKyAqIFJldHVybjogMCBvbiBzdWNjZXNzLCBcXHUwMDNjMCBvbiBlcnJvclxcbisgKi9cXG4rc3RhdGljIGludCB6bDMwNzN4X2RwbGxfcHRwX2dldHRpbWV4NjQoc3RydWN0IHB0cF9jbG9ja19pbmZvICppbmZvLFxcbitcXHRcXHRcXHRcXHQgICAgICAgc3RydWN0IHRpbWVzcGVjNjQgKnRzLFxcbitcXHRcXHRcXHRcXHQgICAgICAgc3RydWN0IHB0cF9zeXN0ZW1fdGltZXN0YW1wICpzdHMpXFxuK3tcXG4rXFx0c3RydWN0IHpsMzA3M3hfZHBsbCAqemxkcGxsID0gY29udGFpbmVyX29mKGluZm8sIHN0cnVjdCB6bDMwNzN4X2RwbGwsXFxuK1xcdFxcdFxcdFxcdFxcdFxcdCAgIHB0cF9pbmZvKTtcXG4rXFxuK1xcdGd1YXJkKG11dGV4KShcXHUwMDI2emxkcGxsLVxcdTAwM2Vsb2NrKTtcXG4rXFxuK1xcdHJldHVybiB6bDMwNzN4X2NoYW5fdG9kX3JlYWQoemxkcGxsLVxcdTAwM2VkZXYsIHpsZHBsbC1cXHUwMDNlaWQsIGZhbHNlLCB0cywgc3RzKTtcXG4rfVxcbitcXG4rLyoqXFxuKyAqIHpsMzA3M3hfZHBsbF9wdHBfc2V0dGltZTY0IC0gc2V0IFRvRCBjb3VudGVycyB0byBnaXZlbiB0aW1lXFxuKyAqIEBpbmZvOiBQVFAgY2xvY2sgaW5mb1xcbisgKiBAdHM6IHRpbWVzcGVjIHdpdGggdGltZSB0byBzZXRcXG4gICpcXG4tICogUmV0dXJuOiBwb2ludGVyIHRvIERQTEwgZGV2aWNlIG9uIHN1Y2Nlc3MsIGVycm9yIHBvaW50ZXIgb24gZXJyb3JcXG4rICogUmV0dXJuOiAwIG9uIHN1Y2Nlc3MsIFxcdTAwM2MwIG9uIGVycm9yXFxuICAqL1xcbi1zdHJ1Y3QgemwzMDczeF9kcGxsICpcXG4temwzMDczeF9kcGxsX2FsbG9jKHN0cnVjdCB6bDMwNzN4X2RldiAqemxkZXYsIHU4IGNoKVxcbitzdGF0aWMgaW50IHpsMzA3M3hfZHBsbF9wdHBfc2V0dGltZTY0KHN0cnVjdCBwdHBfY2xvY2tfaW5mbyAqaW5mbyxcXG4rXFx0XFx0XFx0XFx0ICAgICAgY29uc3Qgc3RydWN0IHRpbWVzcGVjNjQgKnRzKVxcbiB7XFxuLVxcdHN0cnVjdCB6bDMwNzN4X2RwbGwgKnpsZHBsbDtcXG4rXFx0c3RydWN0IHpsMzA3M3hfZHBsbCAqemxkcGxsID0gY29udGFpbmVyX29mKGluZm8sIHN0cnVjdCB6bDMwNzN4X2RwbGwsXFxuK1xcdFxcdFxcdFxcdFxcdFxcdCAgIHB0cF9pbmZvKTtcXG4gXFxuLVxcdHpsZHBsbCA9IGt6YWxsb2Nfb2JqKCp6bGRwbGwpO1xcbi1cXHRpZiAoIXpsZHBsbClcXG4tXFx0XFx0cmV0dXJuIEVSUl9QVFIoLUVOT01FTSk7XFxuK1xcdGd1YXJkKG11dGV4KShcXHUwMDI2emxkcGxsLVxcdTAwM2Vsb2NrKTtcXG4gXFxuLVxcdHpsZHBsbC1cXHUwMDNlZGV2ID0gemxkZXY7XFxuLVxcdHpsZHBsbC1cXHUwMDNlaWQgPSBjaDtcXG4tXFx0bXV0ZXhfaW5pdChcXHUwMDI2emxkcGxsLVxcdTAwM2Vsb2NrKTtcXG4tXFx0SU5JVF9MSVNUX0hFQUQoXFx1MDAyNnpsZHBsbC1cXHUwMDNlcGlucyk7XFxuK1xcdHJldHVybiB6bDMwNzN4X2NoYW5fdG9kX3dyaXRlKHpsZHBsbC1cXHUwMDNlZGV2LCB6bGRwbGwtXFx1MDAzZWlkLCAqdHMpO1xcbit9XFxuIFxcbi1cXHRyZXR1cm4gemxkcGxsO1xcbisvKipcXG4rICogemwzMDczeF9kcGxsX3B0cF9hZGp0aW1lX3BoYXNlX3N0ZXAgLSBhZGp1c3Qgc3ViLXNlY29uZCB0aW1lIHZpYSBwaGFzZSBzdGVwXFxuKyAqIEB6bGRwbGw6IERQTEwgY2hhbm5lbFxcbisgKiBAZGVsdGE6IHRpbWUgYWRqdXN0bWVudCBpbiBuYW5vc2Vjb25kcyAobXVzdCBiZSB3aXRoaW4gKC1OU0VDX1BFUl9TRUMsXFxuKyAqICAgICAgICAgTlNFQ19QRVJfU0VDKSlcXG4rICpcXG4rICogVXNlcyB0aGUgb3V0cHV0IHBoYXNlIHN0ZXAgbWVjaGFuaXNtIHdpdGggdG9kX3N0ZXA9MSB0byBhZGp1c3QgYm90aFxcbisgKiB0aGUgb3V0cHV0IGNsb2NrIHBoYXNlIGFuZCB0aGUgVG9EIGNvdW50ZXIgc2ltdWx0YW5lb3VzbHkuIFRoaXMga2VlcHNcXG4rICogb3V0cHV0cyBhbmQgVG9EIGNvaGVyZW50LiBPbmx5IHZhbGlkIGZvciBOQ08uXFxuKyAqXFxuKyAqIE91dHB1dHMgYXJlIGdyb3VwZWQgYnkgc3ludGhlc2l6ZXIgc2luY2UgdGhlIHBoYXNlIHN0ZXAgdmFsdWUgaXMgaW5cXG4rICogc3ludGhlc2l6ZXIgY2xvY2sgY3ljbGVzLiBUaGUgZmlyc3Qgc3ludGggZ3JvdXAgd2l0aCBlbmFibGVkIG91dHB1dHNcXG4rICogdXNlcyB0b2Rfc3RlcCB0byBhZGp1c3QgYm90aCBvdXRwdXRzIGFuZCB0aGUgVG9EIGNvdW50ZXIuIFJlbWFpbmluZ1xcbisgKiBncm91cHMgc3RlcCBvdXRwdXRzIG9ubHkuIElmIG5vIHN5bnRoIGhhcyBlbmFibGVkIG91dHB1dHMsIHRoZSBUb0RcXG4rICogY291bnRlciBpcyBzdGVwcGVkIGFsb25lIHVzaW5nIGFuIGVtcHR5IG91dHB1dCBtYXNrICh0aGUgRlcgdXNlc1xcbisgKiB0aGUgZmlyc3QgZW5hYmxlZCBzeW50aCdzIHBlcmlvZCBmb3IgdGhlIGNvbnZlcnNpb24pLlxcbisgKlxcbisgKiBSZXR1cm46XFxuKyAqICogJTBcXHRcXHRcXHQtIHN1Y2Nlc3MgKG9yIHBhcnRpYWwgc3VjY2VzcyBpZiBhIGxhdGVyIHN5bnRoIGdyb3VwXFxuKyAqXFx0XFx0XFx0ICBmYWlsZWQgYWZ0ZXIgdGhlIGZpcnN0IHdhcyBhbHJlYWR5IHN0ZXBwZWQpXFxuKyAqICogJS1FT1BOT1RTVVBQXFx0LSBubyBzeW50aHMgYXZhaWxhYmxlXFxuKyAqICogbmVnYXRpdmVcXHRcXHQtIGVycm9yXFxuKyAqL1xcbitzdGF0aWMgaW50IHpsMzA3M3hfZHBsbF9wdHBfYWRqdGltZV9waGFzZV9zdGVwKHN0cnVjdCB6bDMwNzN4X2RwbGwgKnpsZHBsbCxcXG4rXFx0XFx0XFx0XFx0XFx0ICAgICAgIHM2NCBkZWx0YSlcXG4re1xcbitcXHR1MTYgc3ludGhfbWFza1taTDMwNzNYX05VTV9TWU5USFNdID0ge307XFxuK1xcdHN0cnVjdCB6bDMwNzN4X2RldiAqemxkZXYgPSB6bGRwbGwtXFx1MDAzZWRldjtcXG4rXFx0Y29uc3Qgc3RydWN0IHpsMzA3M3hfc3ludGggKnN5bnRoO1xcbitcXHRzdHJ1Y3QgemwzMDczeF9kcGxsX3BpbiAqcGluO1xcbitcXHR1MzIgZmlyc3Rfc3ludGhfZnJlcSA9IDA7XFxuK1xcdGJvb2wgdG9kX3N0ZXBwZWQgPSBmYWxzZTtcXG4rXFx0czMyIHN0ZXBfY3ljbGVzO1xcbitcXHR1MzIgc3ludGhfZnJlcTtcXG4rXFx0aW50IHJjO1xcbitcXHR1OCBpO1xcbitcXG4rXFx0LyogQnVpbGQgcGVyLXN5bnRoIG91dHB1dCBtYXNrcyBmcm9tIHJlZ2lzdGVyZWQgb3V0cHV0IHBpbnMgKi9cXG4rXFx0bGlzdF9mb3JfZWFjaF9lbnRyeShwaW4sIFxcdTAwMjZ6bGRwbGwtXFx1MDAzZXBpbnMsIGxpc3QpIHtcXG4rXFx0XFx0dTggb3V0X2lkLCBzeW50aF9pZDtcXG4rXFxuK1xcdFxcdGlmICh6bDMwNzN4X2RwbGxfaXNfaW5wdXRfcGluKHBpbikpXFxuK1xcdFxcdFxcdGNvbnRpbnVlO1xcbitcXG4rXFx0XFx0b3V0X2lkID0gemwzMDczeF9vdXRwdXRfcGluX291dF9nZXQocGluLVxcdTAwM2VpZCk7XFxuK1xcbitcXHRcXHRpZiAoIXpsMzA3M3hfZGV2X291dF9pc19zdGVwcGVkKHpsZGV2LCBvdXRfaWQpKVxcbitcXHRcXHRcXHRjb250aW51ZTtcXG4rXFxuK1xcdFxcdHN5bnRoX2lkID0gemwzMDczeF9kZXZfb3V0X3N5bnRoX2dldCh6bGRldiwgb3V0X2lkKTtcXG4rXFx0XFx0aWYgKHN5bnRoX2lkIFxcdTAwM2U9IFpMMzA3M1hfTlVNX1NZTlRIUykge1xcbitcXHRcXHRcXHRkZXZfd2Fybih6bGRldi1cXHUwMDNlZGV2LCBcXFwiVW5leHBlY3RlZCBzeW50aCBpZCBmb3IgT1VUJXVcXFxcblxcXCIsXFxuK1xcdFxcdFxcdFxcdCBvdXRfaWQpO1xcbitcXHRcXHRcXHRjb250aW51ZTtcXG4rXFx0XFx0fVxcbitcXHRcXHRzeW50aF9tYXNrW3N5bnRoX2lkXSB8PSBCSVQob3V0X2lkKTtcXG4rXFx0fVxcbitcXG4rXFx0LyogUHJvY2VzcyBlYWNoIHN5bnRoIGdyb3VwICovXFxuK1xcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBaTDMwNzNYX05VTV9TWU5USFM7IGkrKykge1xcbitcXHRcXHRzeW50aCA9IHpsMzA3M3hfc3ludGhfc3RhdGVfZ2V0KHpsZGV2LCBpKTtcXG4rXFx0XFx0aWYgKCF6bDMwNzN4X3N5bnRoX2lzX2VuYWJsZWQoc3ludGgpIHx8XFxuK1xcdFxcdCAgICB6bDMwNzN4X3N5bnRoX2RwbGxfZ2V0KHN5bnRoKSAhPSB6bGRwbGwtXFx1MDAzZWlkKVxcbitcXHRcXHRcXHRjb250aW51ZTtcXG4rXFxuK1xcdFxcdHN5bnRoX2ZyZXEgPSB6bDMwNzN4X3N5bnRoX2ZyZXFfZ2V0KHN5bnRoKTtcXG4rXFxuK1xcdFxcdC8qIFJlbWVtYmVyIGZpcnN0IGVuYWJsZWQgc3ludGggZnJlcSBmb3IgVG9ELW9ubHkgZmFsbGJhY2sgKi9cXG4rXFx0XFx0aWYgKCFmaXJzdF9zeW50aF9mcmVxKVxcbitcXHRcXHRcXHRmaXJzdF9zeW50aF9mcmVxID0gc3ludGhfZnJlcTtcXG4rXFxuK1xcdFxcdGlmICghc3ludGhfbWFza1tpXSlcXG4rXFx0XFx0XFx0Y29udGludWU7XFxuK1xcbitcXHRcXHQvKiBTYWZlIGZvciBzMzI6IG1heCBzeW50aCBmcmVxIGlzIDc1MCBNSHogKi9cXG4rXFx0XFx0c3RlcF9jeWNsZXMgPSBkaXZfczY0KGRlbHRhICogc3ludGhfZnJlcSwgTlNFQ19QRVJfU0VDKTtcXG4rXFxuK1xcdFxcdHJjID0gemwzMDczeF9jaGFuX3BoYXNlX3N0ZXAoemxkZXYsIHpsZHBsbC1cXHUwMDNlaWQsXFxuK1xcdFxcdFxcdFxcdFxcdCAgICAgc3ludGhfbWFza1tpXSwgc3RlcF9jeWNsZXMsXFxuK1xcdFxcdFxcdFxcdFxcdCAgICAgIXRvZF9zdGVwcGVkKTtcXG4rXFx0XFx0aWYgKHJjKSB7XFxuK1xcdFxcdFxcdGlmICh0b2Rfc3RlcHBlZCkge1xcbitcXHRcXHRcXHRcXHRkZXZfd2Fybih6bGRldi1cXHUwMDNlZGV2LFxcbitcXHRcXHRcXHRcXHRcXHQgXFxcIlBhcnRpYWwgcGhhc2Ugc3RlcCBmYWlsdXJlXFxcXG5cXFwiKTtcXG4rXFx0XFx0XFx0XFx0cmV0dXJuIDA7XFxuK1xcdFxcdFxcdH1cXG4rXFx0XFx0XFx0cmV0dXJuIHJjO1xcbitcXHRcXHR9XFxuK1xcdFxcdHRvZF9zdGVwcGVkID0gdHJ1ZTtcXG4rXFx0fVxcbitcXG4rXFx0aWYgKCFmaXJzdF9zeW50aF9mcmVxKVxcbitcXHRcXHRyZXR1cm4gLUVPUE5PVFNVUFA7XFxuK1xcbitcXHQvKiBObyBlbmFibGVkIG91dHB1dHMgZm91bmQ7IHN0ZXAgVG9EIGNvdW50ZXIgb25seSB1c2luZyB0aGVcXG4rXFx0ICogZmlyc3QgZW5hYmxlZCBzeW50aCdzIHBlcmlvZCAoZW1wdHkgb3V0cHV0IG1hc2spLlxcbitcXHQgKi9cXG4rXFx0aWYgKCF0b2Rfc3RlcHBlZCkge1xcbitcXHRcXHRzdGVwX2N5Y2xlcyA9IGRpdl9zNjQoZGVsdGEgKiBmaXJzdF9zeW50aF9mcmVxLCBOU0VDX1BFUl9TRUMpO1xcbitcXHRcXHRyZXR1cm4gemwzMDczeF9jaGFuX3BoYXNlX3N0ZXAoemxkZXYsIHpsZHBsbC1cXHUwMDNlaWQsIDAsXFxuK1xcdFxcdFxcdFxcdFxcdCAgICAgICBzdGVwX2N5Y2xlcywgdHJ1ZSk7XFxuK1xcdH1cXG4rXFxuK1xcdHJldHVybiAwO1xcbiB9XFxuIFxcbiAvKipcXG4tICogemwzMDczeF9kcGxsX2ZyZWUgLSBmcmVlIERQTEwgZGV2aWNlXFxuLSAqIEB6bGRwbGw6IHBvaW50ZXIgdG8gemwzMDczeF9kcGxsIHN0cnVjdHVyZVxcbisgKiB6bDMwNzN4X2RwbGxfcHRwX2FkanRpbWUgLSBhZGp1c3QgUFRQIGNsb2NrIHRpbWVcXG4rICogQGluZm86IFBUUCBjbG9jayBpbmZvXFxuKyAqIEBkZWx0YTogdGltZSBhZGp1c3RtZW50IGluIG5hbm9zZWNvbmRzXFxuICAqXFxuLSAqIERlYWxsb2NhdGVzIGdpdmVuIERQTEwgZGV2aWNlIHByZXZpb3VzbHkgYWxsb2NhdGVkIGJ5IEB6bDMwNzN4X2RwbGxfYWxsb2MuXFxuKyAqIEZvciBOQ08sIGxhcmdlIGRlbHRhcyAoXFx1MDAzZT0gMSBzZWNvbmQpIGFyZSBzcGxpdCBpbnRvIGEgVG9EXFxuKyAqIHJlYWQtbW9kaWZ5LXdyaXRlIGZvciB0aGUgc2Vjb25kcyBwYXJ0IGFuZCBhbiBvdXRwdXQgcGhhc2Ugc3RlcCBmb3JcXG4rICogdGhlIHN1Yi1zZWNvbmQgcmVtYWluZGVyLiBTdWItc2Vjb25kIGRlbHRhcyB1c2UgcGhhc2Ugc3RlcCBkaXJlY3RseSxcXG4rICogZmFsbGluZyBiYWNrIHRvIFRvRCByZWFkLW1vZGlmeS13cml0ZSBpZiBwaGFzZSBzdGVwIG9yIFRJRSB3cml0ZVxcbisgKiBmYWlscy4gSW4gQVVUTy9SRUZMT0NLIG1vZGVzLCBsYXJnZSBkZWx0YXMgYXJlIHNwbGl0IGludG8gVG9EXFxuKyAqIHJlYWQtbW9kaWZ5LXdyaXRlIGZvciBzZWNvbmRzIGFuZCBUSUUgd3JpdGUgZm9yIHRoZSBzdWItc2Vjb25kXFxuKyAqIHJlbWFpbmRlci4gU3ViLXNlY29uZCBkZWx0YXMgdXNlIFRJRSB3cml0ZSBkaXJlY3RseS5cXG4rICpcXG4rICogSWYgdGhlIHNlY29uZHMgcGFydCB3YXMgYWxyZWFkeSBjb21taXR0ZWQgd2hlbiB0aGUgc3ViLXNlY29uZFxcbisgKiBtZWNoYW5pc20gZmFpbHMsIHJldHVybnMgMCB0byBwcmV2ZW50IHRoZSBQVFAgc2Vydm8gZnJvbSByZXRyeWluZ1xcbisgKiB0aGUgZnVsbCBkZWx0YSBhbmQgYXBwbHlpbmcgc2Vjb25kcyBhZ2Fpbi5cXG4rICpcXG4rICogUmV0dXJuOiAwIG9uIHN1Y2Nlc3MgKG9yIHBhcnRpYWwgc3VjY2VzcyksIFxcdTAwM2MwIG9uIGVycm9yXFxuICAqL1xcbi12b2lkXFxuLXpsMzA3M3hfZHBsbF9mcmVlKHN0cnVjdCB6bDMwNzN4X2RwbGwgKnpsZHBsbClcXG4rc3RhdGljIGludCB6bDMwNzN4X2RwbGxfcHRwX2FkanRpbWUoc3RydWN0IHB0cF9jbG9ja19pbmZvICppbmZvLCBzNjQgZGVsdGEpXFxuIHtcXG4tXFx0V0FSTih6bGRwbGwtXFx1MDAzZWRwbGxfZGV2LCBcXFwiRFBMTCBkZXZpY2UgaXMgc3RpbGwgcmVnaXN0ZXJlZFxcXFxuXFxcIik7XFxuK1xcdHN0cnVjdCB6bDMwNzN4X2RwbGwgKnpsZHBsbCA9IGNvbnRhaW5lcl9vZihpbmZvLCBzdHJ1Y3QgemwzMDczeF9kcGxsLFxcbitcXHRcXHRcXHRcXHRcXHRcXHQgICBwdHBfaW5mbyk7XFxuK1xcdHN0cnVjdCB6bDMwNzN4X2RldiAqemxkZXYgPSB6bGRwbGwtXFx1MDAzZWRldjtcXG4rXFx0Y29uc3Qgc3RydWN0IHpsMzA3M3hfY2hhbiAqY2hhbjtcXG4rXFx0Ym9vbCBzZWNfYWRqdXN0ZWQgPSBmYWxzZTtcXG4rXFx0c3RydWN0IHRpbWVzcGVjNjQgdHM7XFxuK1xcdGludCByYztcXG4gXFxuLVxcdG11dGV4X2Rlc3Ryb3koXFx1MDAyNnpsZHBsbC1cXHUwMDNlbG9jayk7XFxuLVxcdGtmcmVlKHpsZHBsbCk7XFxuK1xcdGlmICghZGVsdGEpXFxuK1xcdFxcdHJldHVybiAwO1xcbitcXG4rXFx0Z3VhcmQobXV0ZXgpKFxcdTAwMjZ6bGRwbGwtXFx1MDAzZWxvY2spO1xcbitcXG4rXFx0LyogTW9kZXMgd2l0aG91dCBwaGFzZSBzdGVwIG9yIFRJRSB1c2UgcGxhaW4gVG9EIGFkanVzdCAqL1xcbitcXHRjaGFuID0gemwzMDczeF9jaGFuX3N0YXRlX2dldCh6bGRldiwgemxkcGxsLVxcdTAwM2VpZCk7XFxuK1xcdGlmICghemwzMDczeF9jaGFuX21vZGVfaXNfbmNvKGNoYW4pIFxcdTAwMjZcXHUwMDI2XFxuK1xcdCAgICAhemwzMDczeF9jaGFuX21vZGVfc3VwcG9ydHNfdGllKGNoYW4pKVxcbitcXHRcXHRyZXR1cm4gemwzMDczeF9jaGFuX3RvZF9hZGp1c3QoemxkZXYsIHpsZHBsbC1cXHUwMDNlaWQsXFxuK1xcdFxcdFxcdFxcdFxcdCAgICAgICBuc190b190aW1lc3BlYzY0KGRlbHRhKSk7XFxuK1xcbitcXHQvKiBTcGxpdCBvZmYgc2Vjb25kcyB2aWEgVG9EIHJlYWQtbW9kaWZ5LXdyaXRlIHNvIHRoZSBzdWItc2Vjb25kXFxuK1xcdCAqIHJlbWFpbmRlciBjYW4gYmUgYXBwbGllZCB0aHJvdWdoIHRoZSBvdXRwdXQtY29oZXJlbnQgbWVjaGFuaXNtXFxuK1xcdCAqIChwaGFzZSBzdGVwIG9yIFRJRSB3cml0ZSkuXFxuK1xcdCAqL1xcbitcXHRpZiAoZGVsdGEgXFx1MDAzZT0gTlNFQ19QRVJfU0VDIHx8IGRlbHRhIFxcdTAwM2M9IC1OU0VDX1BFUl9TRUMpIHtcXG4rXFx0XFx0czMyIHJlbWFpbmRlcjtcXG4rXFxuK1xcdFxcdHRzLnR2X3NlYyA9IGRpdl9zNjRfcmVtKGRlbHRhLCBOU0VDX1BFUl9TRUMsIFxcdTAwMjZyZW1haW5kZXIpO1xcbitcXHRcXHR0cy50dl9uc2VjID0gMDtcXG4rXFx0XFx0ZGVsdGEgPSByZW1haW5kZXI7XFxuK1xcbitcXHRcXHRyYyA9IHpsMzA3M3hfY2hhbl90b2RfYWRqdXN0KHpsZGV2LCB6bGRwbGwtXFx1MDAzZWlkLCB0cyk7XFxuK1xcdFxcdGlmIChyYylcXG4rXFx0XFx0XFx0cmV0dXJuIHJjO1xcbitcXG4rXFx0XFx0LyogTm8gc3ViLXNlY29uZCByZW1haW5kZXIsIGRvbmUgKi9cXG4rXFx0XFx0aWYgKCFkZWx0YSlcXG4rXFx0XFx0XFx0cmV0dXJuIDA7XFxuK1xcbitcXHRcXHQvKiBXYWl0IGZvciB0aGUgVG9EIHdyaXRlIHRvIGJlIGFwcGxpZWQgYXQgdGhlIDEgSHogZWRnZVxcbitcXHRcXHQgKiBiZWZvcmUgaXNzdWluZyBwaGFzZSBzdGVwIG9yIFRJRSB3cml0ZSwgc28gdGhlIHBlbmRpbmdcXG4rXFx0XFx0ICogV1JfTkVYVF8xSFogZG9lcyBub3Qgb3ZlcndyaXRlIHRoZSBzdWItc2Vjb25kIGFkanVzdG1lbnQuXFxuK1xcdFxcdCAqL1xcbitcXHRcXHRyYyA9IHpsMzA3M3hfY2hhbl90b2RfcmVhZHlfd2FpdCh6bGRldiwgemxkcGxsLVxcdTAwM2VpZCk7XFxuK1xcdFxcdGlmIChyYylcXG4rXFx0XFx0XFx0cmV0dXJuIHJjO1xcbitcXG4rXFx0XFx0c2VjX2FkanVzdGVkID0gdHJ1ZTtcXG4rXFx0fVxcbitcXG4rXFx0LyogQXBwbHkgc3ViLXNlY29uZCBkZWx0YSB2aWEgcGhhc2Ugc3RlcCAoTkNPKSBvciBUSUUgd3JpdGUgKi9cXG4rXFx0aWYgKHpsMzA3M3hfY2hhbl9tb2RlX2lzX25jbyhjaGFuKSkge1xcbitcXHRcXHRyYyA9IHpsMzA3M3hfZHBsbF9wdHBfYWRqdGltZV9waGFzZV9zdGVwKHpsZHBsbCwgZGVsdGEpO1xcbitcXHRcXHRpZiAoIXJjKVxcbitcXHRcXHRcXHRyZXR1cm4gMDtcXG4rXFx0fSBlbHNlIHtcXG4rXFx0XFx0cmMgPSB6bDMwNzN4X2NoYW5fdGllX3dyaXRlKHpsZGV2LCB6bGRwbGwtXFx1MDAzZWlkLCBkZWx0YSk7XFxuK1xcdFxcdGlmICghcmMpXFxuK1xcdFxcdFxcdHJldHVybiAwO1xcbitcXHR9XFxuK1xcbitcXHQvKiBQaGFzZSBzdGVwIG9yIFRJRSB3cml0ZSBmYWlsZWQsIGZhbGwgYmFjayB0byBUb0QgYWRqdXN0ICovXFxuK1xcdHJjID0gemwzMDczeF9jaGFuX3RvZF9hZGp1c3QoemxkZXYsIHpsZHBsbC1cXHUwMDNlaWQsXFxuK1xcdFxcdFxcdFxcdCAgICAgbnNfdG9fdGltZXNwZWM2NChkZWx0YSkpO1xcbitcXG4rXFx0LyogSW4gdGhlIHVubGlrZWx5IGV2ZW50IHRoYXQgYm90aCBwaGFzZSBzdGVwL1RJRSB3cml0ZSBhbmQgZmFsbGJhY2tcXG4rXFx0ICogVG9EIGFkanVzdCBmYWlsIGFmdGVyIHNlY29uZHMgd2VyZSBhbHJlYWR5IGNvbW1pdHRlZCwgcmV0dXJuXFxuK1xcdCAqIHN1Y2Nlc3MgdG8gcHJldmVudCB0aGUgUFRQIHNlcnZvIGZyb20gcmV0cnlpbmcgdGhlIGZ1bGwgZGVsdGEgYW5kXFxuK1xcdCAqIGFwcGx5aW5nIHNlY29uZHMgYWdhaW4uIFRoZSBzdWItc2Vjb25kIHJlc2lkdWFsIHdpbGwgc2VsZi1jb3JyZWN0XFxuK1xcdCAqIGluIHRoZSBuZXh0IHNlcnZvIGN5Y2xlLlxcbitcXHQgKi9cXG4rXFx0aWYgKHJjIFxcdTAwMjZcXHUwMDI2IHNlY19hZGp1c3RlZCkge1xcbitcXHRcXHRkZXZfd2Fybih6bGRldi1cXHUwMDNlZGV2LFxcbitcXHRcXHRcXHQgXFxcIlN1Yi1zZWNvbmQgYWRqdXN0bWVudCBmYWlsZWQgYWZ0ZXIgc2Vjb25kcyBhcHBsaWVkXFxcXG5cXFwiKTtcXG4rXFx0XFx0cmV0dXJuIDA7XFxuK1xcdH1cXG4rXFxuK1xcdHJldHVybiByYztcXG4rfVxcbitcXG4rLyoqXFxuKyAqIHpsMzA3M3hfZHBsbF9wdHBfYWRqZmluZSAtIGFkanVzdCBQVFAgY2xvY2sgZnJlcXVlbmN5XFxuKyAqIEBpbmZvOiBQVFAgY2xvY2sgaW5mb1xcbisgKiBAc2NhbGVkX3BwbTogZnJlcXVlbmN5IGFkanVzdG1lbnQgaW4gc2NhbGVkIHBwbSAocHBtICogMl4xNilcXG4rICpcXG4rICogT25seSBzdXBwb3J0ZWQgZm9yIE5DTy4gV3JpdGVzIHRoZSBkZWx0YSBmcmVxdWVuY3kgb2Zmc2V0IHJlZ2lzdGVyLlxcbisgKlxcbisgKiBSZXR1cm46XFxuKyAqICogJTBcXHRcXHRcXHQtIHN1Y2Nlc3Mgb3IgQHNjYWxlZF9wcG0gaXMgemVybyAobm8tb3ApXFxuKyAqICogJS1FT1BOT1RTVVBQXFx0LSBOQ08gcGluIGlzIG5vdCBjb25uZWN0ZWQgYW5kIEBzY2FsZWRfcHBtIGlzIG5vbi16ZXJvXFxuKyAqICogbmVnYXRpdmVcXHRcXHQtIG90aGVyIGVycm9yXFxuKyAqL1xcbitzdGF0aWMgaW50XFxuK3psMzA3M3hfZHBsbF9wdHBfYWRqZmluZShzdHJ1Y3QgcHRwX2Nsb2NrX2luZm8gKmluZm8sIGxvbmcgc2NhbGVkX3BwbSlcXG4re1xcbitcXHRzdHJ1Y3QgemwzMDczeF9kcGxsICp6bGRwbGwgPSBjb250YWluZXJfb2YoaW5mbywgc3RydWN0IHpsMzA3M3hfZHBsbCxcXG4rXFx0XFx0XFx0XFx0XFx0XFx0ICAgcHRwX2luZm8pO1xcbitcXHRjb25zdCBzdHJ1Y3QgemwzMDczeF9jaGFuICpjaGFuO1xcbitcXHRzNjQgb2Zmc2V0O1xcbitcXG4rXFx0LyogQ29udmVydCBzY2FsZWRfcHBtIHRvIGRmX29mZnNldCBpbiAyXi00OCBzdGVwczpcXG4rXFx0ICogICBkZl9vZmZzZXQgPSAtKHNjYWxlZF9wcG0gKiAyXjMyKSAvIDEwXjZcXG4rXFx0ICpcXG4rXFx0ICogU2ltcGxpZnkgdG8gYXZvaWQgb3ZlcmZsb3c6XFxuK1xcdCAqICAgZGZfb2Zmc2V0ID0gLShzY2FsZWRfcHBtICogMl4yNikgLyA1XjZcXG4rXFx0ICogICBkZl9vZmZzZXQgPSAtKHNjYWxlZF9wcG0gKiA2NzEwODg2NCkgLyAxNTYyNVxcbitcXHQgKi9cXG4rXFx0b2Zmc2V0ID0gLWRpdl9zNjQoKHM2NClzY2FsZWRfcHBtICogNjcxMDg4NjRMTCwgMTU2MjUpO1xcbitcXG4rXFx0Z3VhcmQobXV0ZXgpKFxcdTAwMjZ6bGRwbGwtXFx1MDAzZWxvY2spO1xcbitcXG4rXFx0Y2hhbiA9IHpsMzA3M3hfY2hhbl9zdGF0ZV9nZXQoemxkcGxsLVxcdTAwM2VkZXYsIHpsZHBsbC1cXHUwMDNlaWQpO1xcbitcXHRpZiAoIXpsMzA3M3hfY2hhbl9tb2RlX2lzX25jbyhjaGFuKSlcXG4rXFx0XFx0cmV0dXJuIHNjYWxlZF9wcG0gPyAtRU9QTk9UU1VQUCA6IDA7XFxuK1xcdGlmIChvZmZzZXQgPT0gY2hhbi1cXHUwMDNlZGZfb2Zmc2V0KVxcbitcXHRcXHRyZXR1cm4gMDtcXG4rXFxuK1xcdHJldHVybiB6bDMwNzN4X2NoYW5fZGZfb2Zmc2V0X3NldCh6bGRwbGwtXFx1MDAzZWRldiwgemxkcGxsLVxcdTAwM2VpZCwgb2Zmc2V0KTtcXG4rfVxcbitcXG4rLyoqXFxuKyAqIHpsMzA3M3hfZHBsbF9wdHBfYWRqcGhhc2UgLSBhZGp1c3QgUFRQIGNsb2NrIHBoYXNlXFxuKyAqIEBpbmZvOiBQVFAgY2xvY2sgaW5mb1xcbisgKiBAZGVsdGE6IHBoYXNlIGFkanVzdG1lbnQgaW4gbmFub3NlY29uZHNcXG4rICpcXG4rICogT25seSBzdXBwb3J0ZWQgaW4gQVVUTyBhbmQgUkVGTE9DSyBtb2Rlcy4gVXNlcyBUSUUgd3JpdGUgZm9yXFxuKyAqIG5hbm9zZWNvbmQgcmVzb2x1dGlvbiBwaGFzZSBhZGp1c3RtZW50LlxcbisgKlxcbisgKiBSZXR1cm46XFxuKyAqICogJTBcXHRcXHRcXHQtIHN1Y2Nlc3Mgb3IgQGRlbHRhIGlzIHplcm8gKG5vLW9wKVxcbisgKiAqICUtRU9QTk9UU1VQUFxcdC0gbW9kZSBkb2VzIG5vdCBzdXBwb3J0IFRJRSBhbmQgQGRlbHRhIGlzIG5vbi16ZXJvXFxuKyAqICogbmVnYXRpdmVcXHRcXHQtIG90aGVyIGVycm9yXFxuKyAqL1xcbitzdGF0aWMgaW50IHpsMzA3M3hfZHBsbF9wdHBfYWRqcGhhc2Uoc3RydWN0IHB0cF9jbG9ja19pbmZvICppbmZvLCBzMzIgZGVsdGEpXFxuK3tcXG4rXFx0c3RydWN0IHpsMzA3M3hfZHBsbCAqemxkcGxsID0gY29udGFpbmVyX29mKGluZm8sIHN0cnVjdCB6bDMwNzN4X2RwbGwsXFxuK1xcdFxcdFxcdFxcdFxcdFxcdCAgIHB0cF9pbmZvKTtcXG4rXFx0c3RydWN0IHpsMzA3M3hfZGV2ICp6bGRldiA9IHpsZHBsbC1cXHUwMDNlZGV2O1xcbitcXHRjb25zdCBzdHJ1Y3QgemwzMDczeF9jaGFuICpjaGFuO1xcbitcXG4rXFx0aWYgKCFkZWx0YSlcXG4rXFx0XFx0cmV0dXJuIDA7XFxuK1xcbitcXHRndWFyZChtdXRleCkoXFx1MDAyNnpsZHBsbC1cXHUwMDNlbG9jayk7XFxuK1xcbitcXHRjaGFuID0gemwzMDczeF9jaGFuX3N0YXRlX2dldCh6bGRldiwgemxkcGxsLVxcdTAwM2VpZCk7XFxuK1xcbitcXHRpZiAoIXpsMzA3M3hfY2hhbl9tb2RlX3N1cHBvcnRzX3RpZShjaGFuKSlcXG4rXFx0XFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xcbitcXG4rXFx0cmV0dXJuIHpsMzA3M3hfY2hhbl90aWVfd3JpdGUoemxkZXYsIHpsZHBsbC1cXHUwMDNlaWQsIGRlbHRhKTtcXG4rfVxcbitcXG4rc3RhdGljIHMzMlxcbit6bDMwNzN4X2RwbGxfcHRwX2dldG1heHBoYXNlKHN0cnVjdCBwdHBfY2xvY2tfaW5mbyAqaW5mbyBfX2Fsd2F5c191bnVzZWQpXFxuK3tcXG4rXFx0LyogSFcgbGltaXRzIFRJRSB3cml0ZSB0byArLTEgc2Vjb25kLiBSZXR1cm4gdGhlIGNvbnN0YW50IEhXXFxuK1xcdCAqIGxpbWl0IGFuZCBsZXQgYWRqcGhhc2UgaGFuZGxlIG1vZGUtc3BlY2lmaWMgY2hlY2tzLlxcbitcXHQgKi9cXG4rXFx0cmV0dXJuIE5TRUNfUEVSX1NFQyAtIDE7XFxuK31cXG4rXFxuK3N0YXRpYyBjb25zdCBzdHJ1Y3QgcHRwX2Nsb2NrX2luZm8gemwzMDczeF9kcGxsX3B0cF9jbG9ja19pbmZvID0ge1xcbitcXHQub3duZXJcXHRcXHQ9IFRISVNfTU9EVUxFLFxcbitcXHQubWF4X2FkalxcdD0gWkwzMDczWF9EUExMX1BUUF9NQVhfQURKLFxcbitcXHQuZ2V0dGltZXg2NFxcdD0gemwzMDczeF9kcGxsX3B0cF9nZXR0aW1leDY0LFxcbitcXHQuc2V0dGltZTY0XFx0PSB6bDMwNzN4X2RwbGxfcHRwX3NldHRpbWU2NCxcXG4rXFx0LmFkanRpbWVcXHQ9IHpsMzA3M3hfZHBsbF9wdHBfYWRqdGltZSxcXG4rXFx0LmFkamZpbmVcXHQ9IHpsMzA3M3hfZHBsbF9wdHBfYWRqZmluZSxcXG4rXFx0LmFkanBoYXNlXFx0PSB6bDMwNzN4X2RwbGxfcHRwX2FkanBoYXNlLFxcbitcXHQuZ2V0bWF4cGhhc2VcXHQ9IHpsMzA3M3hfZHBsbF9wdHBfZ2V0bWF4cGhhc2UsXFxuK307XFxuK1xcbisvKipcXG4rICogemwzMDczeF9kcGxsX3B0cF9yZWdpc3RlciAtIHJlZ2lzdGVyIFBUUCBjbG9jayBmb3IgYSBEUExMIGNoYW5uZWxcXG4rICogQHpsZHBsbDogRFBMTCBjaGFubmVsIHRvIHJlZ2lzdGVyIFBUUCBjbG9jayBmb3JcXG4rICpcXG4rICogUmV0dXJuOiAwIG9uIHN1Y2Nlc3MsIFxcdTAwM2MwIG9uIGVycm9yXFxuKyAqL1xcbitzdGF0aWMgaW50IHpsMzA3M3hfZHBsbF9wdHBfcmVnaXN0ZXIoc3RydWN0IHpsMzA3M3hfZHBsbCAqemxkcGxsKVxcbit7XFxuK1xcdHN0cnVjdCB6bDMwNzN4X2RldiAqemxkZXYgPSB6bGRwbGwtXFx1MDAzZWRldjtcXG4rXFx0c3RydWN0IHB0cF9jbG9jayAqcHRwX2Nsb2NrO1xcbitcXG4rXFx0emxkcGxsLVxcdTAwM2VwdHBfaW5mbyA9IHpsMzA3M3hfZHBsbF9wdHBfY2xvY2tfaW5mbztcXG4rXFx0c25wcmludGYoemxkcGxsLVxcdTAwM2VwdHBfaW5mby5uYW1lLCBzaXplb2YoemxkcGxsLVxcdTAwM2VwdHBfaW5mby5uYW1lKSxcXG4rXFx0XFx0IFxcXCIlcy1kcGxsJXVcXFwiLCBkZXZfbmFtZSh6bGRldi1cXHUwMDNlZGV2KSwgemxkcGxsLVxcdTAwM2VpZCk7XFxuK1xcbitcXHRwdHBfY2xvY2sgPSBwdHBfY2xvY2tfcmVnaXN0ZXIoXFx1MDAyNnpsZHBsbC1cXHUwMDNlcHRwX2luZm8sIHpsZGV2LVxcdTAwM2VkZXYpO1xcbitcXHRpZiAoSVNfRVJSKHB0cF9jbG9jaykpIHtcXG4rXFx0XFx0ZGV2X2Vycih6bGRldi1cXHUwMDNlZGV2LCBcXFwiRmFpbGVkIHRvIHJlZ2lzdGVyIFBUUCBjbG9jayBmb3IgRFBMTCV1XFxcXG5cXFwiLFxcbitcXHRcXHRcXHR6bGRwbGwtXFx1MDAzZWlkKTtcXG4rXFx0XFx0cmV0dXJuIFBUUl9FUlIocHRwX2Nsb2NrKTtcXG4rXFx0fVxcbitcXG4rXFx0emxkcGxsLVxcdTAwM2VwdHBfY2xvY2sgPSBwdHBfY2xvY2s7XFxuK1xcbitcXHRyZXR1cm4gMDtcXG4rfVxcbitcXG4rLyoqXFxuKyAqIHpsMzA3M3hfZHBsbF9wdHBfdW5yZWdpc3RlciAtIHVucmVnaXN0ZXIgUFRQIGNsb2NrIGZvciBhIERQTEwgY2hhbm5lbFxcbisgKiBAemxkcGxsOiBEUExMIGNoYW5uZWwgdG8gdW5yZWdpc3RlciBQVFAgY2xvY2sgZm9yXFxuKyAqL1xcbitzdGF0aWMgdm9pZCB6bDMwNzN4X2RwbGxfcHRwX3VucmVnaXN0ZXIoc3RydWN0IHpsMzA3M3hfZHBsbCAqemxkcGxsKVxcbit7XFxuK1xcdGlmICghSVNfRVJSX09SX05VTEwoemxkcGxsLVxcdTAwM2VwdHBfY2xvY2spKSB7XFxuK1xcdFxcdHB0cF9jbG9ja191bnJlZ2lzdGVyKHpsZHBsbC1cXHUwMDNlcHRwX2Nsb2NrKTtcXG4rXFx0XFx0emxkcGxsLVxcdTAwM2VwdHBfY2xvY2sgPSBOVUxMO1xcbitcXHR9XFxuIH1cXG4gXFxuIC8qKlxcbkBAIC0yMzk4LDYgKzI3MzksNDcgQEAgemwzMDczeF9kcGxsX3JlZl9zeW5jX3BhaXJzX3JlZ2lzdGVyKHN0cnVjdCB6bDMwNzN4X2RwbGwgKnpsZHBsbClcXG4gXFx0cmV0dXJuIDA7XFxuIH1cXG4gXFxuKy8qKlxcbisgKiB6bDMwNzN4X2RwbGxfYWxsb2MgLSBhbGxvY2F0ZSBEUExMIGRldmljZVxcbisgKiBAemxkZXY6IHBvaW50ZXIgdG8gemwzMDczeCBkZXZpY2VcXG4rICogQGNoOiBEUExMIGNoYW5uZWwgbnVtYmVyXFxuKyAqXFxuKyAqIEFsbG9jYXRlcyBEUExMIGRldmljZSBzdHJ1Y3R1cmUgZm9yIGdpdmVuIERQTEwgY2hhbm5lbC5cXG4rICpcXG4rICogUmV0dXJuOiBwb2ludGVyIHRvIERQTEwgZGV2aWNlIG9uIHN1Y2Nlc3MsIGVycm9yIHBvaW50ZXIgb24gZXJyb3JcXG4rICovXFxuK3N0cnVjdCB6bDMwNzN4X2RwbGwgKlxcbit6bDMwNzN4X2RwbGxfYWxsb2Moc3RydWN0IHpsMzA3M3hfZGV2ICp6bGRldiwgdTggY2gpXFxuK3tcXG4rXFx0c3RydWN0IHpsMzA3M3hfZHBsbCAqemxkcGxsO1xcbitcXG4rXFx0emxkcGxsID0ga3phbGxvY19vYmooKnpsZHBsbCk7XFxuK1xcdGlmICghemxkcGxsKVxcbitcXHRcXHRyZXR1cm4gRVJSX1BUUigtRU5PTUVNKTtcXG4rXFxuK1xcdHpsZHBsbC1cXHUwMDNlZGV2ID0gemxkZXY7XFxuK1xcdHpsZHBsbC1cXHUwMDNlaWQgPSBjaDtcXG4rXFx0bXV0ZXhfaW5pdChcXHUwMDI2emxkcGxsLVxcdTAwM2Vsb2NrKTtcXG4rXFx0SU5JVF9MSVNUX0hFQUQoXFx1MDAyNnpsZHBsbC1cXHUwMDNlcGlucyk7XFxuK1xcbitcXHRyZXR1cm4gemxkcGxsO1xcbit9XFxuK1xcbisvKipcXG4rICogemwzMDczeF9kcGxsX2ZyZWUgLSBmcmVlIERQTEwgZGV2aWNlXFxuKyAqIEB6bGRwbGw6IHBvaW50ZXIgdG8gemwzMDczeF9kcGxsIHN0cnVjdHVyZVxcbisgKlxcbisgKiBEZWFsbG9jYXRlcyBnaXZlbiBEUExMIGRldmljZSBwcmV2aW91c2x5IGFsbG9jYXRlZCBieSBAemwzMDczeF9kcGxsX2FsbG9jLlxcbisgKi9cXG4rdm9pZFxcbit6bDMwNzN4X2RwbGxfZnJlZShzdHJ1Y3QgemwzMDczeF9kcGxsICp6bGRwbGwpXFxuK3tcXG4rXFx0V0FSTih6bGRwbGwtXFx1MDAzZWRwbGxfZGV2LCBcXFwiRFBMTCBkZXZpY2UgaXMgc3RpbGwgcmVnaXN0ZXJlZFxcXFxuXFxcIik7XFxuK1xcbitcXHRtdXRleF9kZXN0cm95KFxcdTAwMjZ6bGRwbGwtXFx1MDAzZWxvY2spO1xcbitcXHRrZnJlZSh6bGRwbGwpO1xcbit9XFxuK1xcbiAvKipcXG4gICogemwzMDczeF9kcGxsX3JlZ2lzdGVyIC0gcmVnaXN0ZXIgRFBMTCBkZXZpY2UgYW5kIGFsbCBpdHMgcGluc1xcbiAgKiBAemxkcGxsOiBwb2ludGVyIHRvIHpsMzA3M3hfZHBsbCBzdHJ1Y3R1cmVcXG5AQCAtMjQyOCw2ICsyODEwLDEzIEBAIHpsMzA3M3hfZHBsbF9yZWdpc3RlcihzdHJ1Y3QgemwzMDczeF9kcGxsICp6bGRwbGwpXFxuIFxcdFxcdHJldHVybiByYztcXG4gXFx0fVxcbiBcXG4rXFx0cmMgPSB6bDMwNzN4X2RwbGxfcHRwX3JlZ2lzdGVyKHpsZHBsbCk7XFxuK1xcdGlmIChyYykge1xcbitcXHRcXHR6bDMwNzN4X2RwbGxfcGluc191bnJlZ2lzdGVyKHpsZHBsbCk7XFxuK1xcdFxcdHpsMzA3M3hfZHBsbF9kZXZpY2VfdW5yZWdpc3Rlcih6bGRwbGwpO1xcbitcXHRcXHRyZXR1cm4gcmM7XFxuK1xcdH1cXG4rXFxuIFxcdHJldHVybiAwO1xcbiB9XFxuIFxcbkBAIC0yNDQxLDcgKzI4MzAsNyBAQCB6bDMwNzN4X2RwbGxfcmVnaXN0ZXIoc3RydWN0IHpsMzA3M3hfZHBsbCAqemxkcGxsKVxcbiB2b2lkXFxuIHpsMzA3M3hfZHBsbF91bnJlZ2lzdGVyKHN0cnVjdCB6bDMwNzN4X2RwbGwgKnpsZHBsbClcXG4ge1xcbi1cXHQvKiBVbnJlZ2lzdGVyIGFsbCBwaW5zIGFuZCBkcGxsICovXFxuK1xcdHpsMzA3M3hfZHBsbF9wdHBfdW5yZWdpc3Rlcih6bGRwbGwpO1xcbiBcXHR6bDMwNzN4X2RwbGxfcGluc191bnJlZ2lzdGVyKHpsZHBsbCk7XFxuIFxcdHpsMzA3M3hfZHBsbF9kZXZpY2VfdW5yZWdpc3Rlcih6bGRwbGwpO1xcbiB9XFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvZHBsbC96bDMwNzN4L2RwbGwuaCBiL2RyaXZlcnMvZHBsbC96bDMwNzN4L2RwbGwuaFxcbmluZGV4IGZhZWJjNDAyYmExYjcuLjk5MzIyMWRjNjMyNDkgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9kcGxsL3psMzA3M3gvZHBsbC5oXFxuKysrIGIvZHJpdmVycy9kcGxsL3psMzA3M3gvZHBsbC5oXFxuQEAgLTUsNiArNSw3IEBAXFxuIFxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvZHBsbC5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvbGlzdC5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjbGludXgvcHRwX2Nsb2NrX2tlcm5lbC5oXFx1MDAzZVxcbiBcXG4gI2luY2x1ZGUgXFxcImNvcmUuaFxcXCJcXG4gXFxuQEAgLTIyLDYgKzIzLDggQEBcXG4gICogQHR5cGU6IERQTEwgdHlwZSAoUFBTIG9yIEVFQylcXG4gICogQGxvY2tfc3RhdHVzOiBsYXN0IHNhdmVkIERQTEwgbG9jayBzdGF0dXNcXG4gICogQHBpbnM6IGxpc3Qgb2YgcGluc1xcbisgKiBAcHRwX2luZm86IFBUUCBjbG9jayBpbmZvXFxuKyAqIEBwdHBfY2xvY2s6IHJlZ2lzdGVyZWQgUFRQIGNsb2NrIChvciBOVUxMKVxcbiAgKi9cXG4gc3RydWN0IHpsMzA3M3hfZHBsbCB7XFxuIFxcdHN0cnVjdCBsaXN0X2hlYWRcXHRcXHRsaXN0O1xcbkBAIC0zNiw2ICszOSw4IEBAIHN0cnVjdCB6bDMwNzN4X2RwbGwge1xcbiBcXHRlbnVtIGRwbGxfdHlwZVxcdFxcdFxcdHR5cGU7XFxuIFxcdGVudW0gZHBsbF9sb2NrX3N0YXR1c1xcdFxcdGxvY2tfc3RhdHVzO1xcbiBcXHRzdHJ1Y3QgbGlzdF9oZWFkXFx0XFx0cGlucztcXG4rXFx0c3RydWN0IHB0cF9jbG9ja19pbmZvXFx0XFx0cHRwX2luZm87XFxuK1xcdHN0cnVjdCBwdHBfY2xvY2tcXHRcXHQqcHRwX2Nsb2NrO1xcbiB9O1xcbiBcXG4gc3RydWN0IHpsMzA3M3hfZHBsbCAqemwzMDczeF9kcGxsX2FsbG9jKHN0cnVjdCB6bDMwNzN4X2RldiAqemxkZXYsIHU4IGNoKTtcXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9kcGxsL3psMzA3M3gvcmVncy5oIGIvZHJpdmVycy9kcGxsL3psMzA3M3gvcmVncy5oXFxuaW5kZXggYjcwZWFkN2Q0NDk1Yi4uZjNhNWUxMjE1YWEzNiAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL2RwbGwvemwzMDczeC9yZWdzLmhcXG4rKysgYi9kcml2ZXJzL2RwbGwvemwzMDczeC9yZWdzLmhcXG5AQCAtMTc5LDYgKzE3OSwyMCBAQFxcbiAjZGVmaW5lIFpMX0RQTExfREZfUkVBRF9DTURcXHRcXHRcXHRHRU5NQVNLKDIsIDApXFxuICNkZWZpbmUgWkxfRFBMTF9ERl9SRUFEX0NNRF9BQ0NfSVxcdFxcdDRcXG4gXFxuKyNkZWZpbmUgWkxfUkVHX0RQTExfVElFX0NUUkxcXHRcXHRcXHRaTF9SRUcoNSwgMHgzMCwgMSlcXG4rI2RlZmluZSBaTF9EUExMX1RJRV9DVFJMX09QXFx0XFx0XFx0R0VOTUFTSygyLCAwKVxcbisjZGVmaW5lIFpMX0RQTExfVElFX0NUUkxfT1BfV1JcXHRcXHRcXHQ0XFxuK1xcbisjZGVmaW5lIFpMX1JFR19EUExMX1RJRV9DVFJMX01BU0tcXHRcXHRaTF9SRUcoNSwgMHgzMSwgMSlcXG4rXFxuKyNkZWZpbmUgWkxfUkVHX0RQTExfVE9EX0NUUkwoX2lkeClcXHRcXHRcXHRcXHRcXHRcXFxcXFxuK1xcdFpMX1JFR19JRFgoX2lkeCwgNSwgMHgzOCwgMSwgWkwzMDczWF9NQVhfQ0hBTk5FTFMsIDEpXFxuKyNkZWZpbmUgWkxfRFBMTF9UT0RfQ1RSTF9TRU1cXHRcXHRcXHRCSVQoNClcXG4rI2RlZmluZSBaTF9EUExMX1RPRF9DVFJMX0NNRFxcdFxcdFxcdEdFTk1BU0soMywgMClcXG4rI2RlZmluZSBaTF9EUExMX1RPRF9DVFJMX0NNRF9XUl9ORVhUXzFIWlxcdDFcXG4rI2RlZmluZSBaTF9EUExMX1RPRF9DVFJMX0NNRF9SRF9DVVJSRU5UXFx0XFx0OFxcbisjZGVmaW5lIFpMX0RQTExfVE9EX0NUUkxfQ01EX1JEX05FWFRfMUhaXFx0OVxcbitcXG4gI2RlZmluZSBaTF9SRUdfRFBMTF9NRUFTX0NUUkxcXHRcXHRcXHRaTF9SRUcoNSwgMHg1MCwgMSlcXG4gI2RlZmluZSBaTF9EUExMX01FQVNfQ1RSTF9FTlxcdFxcdFxcdEJJVCgwKVxcbiAjZGVmaW5lIFpMX0RQTExfTUVBU19DVFJMX0FWR19GQUNUT1JcXHRcXHRHRU5NQVNLKDcsIDQpXFxuQEAgLTE5Myw2ICsyMDcsOSBAQFxcbiBcXG4gLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcXG4gICogUmVnaXN0ZXIgUGFnZXMgNi03LCBEUExMIERhdGFcXG4rICpcXG4rICogUGVyLWNoYW5uZWwgcmVnaXN0ZXJzIHdpdGggc3RyaWRlIDB4MjAuIENoYW5uZWxzIDAtMyByZXNpZGUgb24gcGFnZSA2LFxcbisgKiBjaGFubmVsIDQgb24gcGFnZSA3LlxcbiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cXG4gXFxuICNkZWZpbmUgWkxfUkVHX0RQTExfREZfT0ZGU0VUXzAzKF9pZHgpXFx0XFx0XFx0XFx0XFx0XFxcXFxcbkBAIC0yMDIsNiArMjE5LDI0IEBAXFxuIFxcdCgoX2lkeCkgXFx1MDAzYyA0ID8gWkxfUkVHX0RQTExfREZfT0ZGU0VUXzAzKF9pZHgpIDogWkxfUkVHX0RQTExfREZfT0ZGU0VUXzQpXFxuICNkZWZpbmUgWkxfRFBMTF9ERl9PRkZTRVRfVU5LTk9XTlxcdFM2NF9NSU5cXG4gXFxuKyNkZWZpbmUgWkxfUkVHX0RQTExfVElFX0RBVEFfMDMoX2lkeClcXHRcXHRcXHRcXHRcXHRcXFxcXFxuK1xcdFpMX1JFR19JRFgoX2lkeCwgNiwgMHgwQywgNiwgNCwgMHgyMClcXG4rI2RlZmluZSBaTF9SRUdfRFBMTF9USUVfREFUQV80XFx0XFx0XFx0WkxfUkVHKDcsIDB4MEMsIDYpXFxuKyNkZWZpbmUgWkxfUkVHX0RQTExfVElFX0RBVEEoX2lkeClcXHRcXHRcXHRcXHRcXHRcXFxcXFxuK1xcdCgoX2lkeCkgXFx1MDAzYyA0ID8gWkxfUkVHX0RQTExfVElFX0RBVEFfMDMoX2lkeCkgOiBaTF9SRUdfRFBMTF9USUVfREFUQV80KVxcbitcXG4rI2RlZmluZSBaTF9SRUdfRFBMTF9UT0RfU0VDXzAzKF9pZHgpXFx0XFx0XFx0XFx0XFx0XFxcXFxcbitcXHRaTF9SRUdfSURYKF9pZHgsIDYsIDB4MTIsIDYsIDQsIDB4MjApXFxuKyNkZWZpbmUgWkxfUkVHX0RQTExfVE9EX1NFQ180XFx0XFx0XFx0WkxfUkVHKDcsIDB4MTIsIDYpXFxuKyNkZWZpbmUgWkxfUkVHX0RQTExfVE9EX1NFQyhfaWR4KVxcdFxcdFxcdFxcdFxcdFxcXFxcXG4rXFx0KChfaWR4KSBcXHUwMDNjIDQgPyBaTF9SRUdfRFBMTF9UT0RfU0VDXzAzKF9pZHgpIDogWkxfUkVHX0RQTExfVE9EX1NFQ180KVxcbitcXG4rI2RlZmluZSBaTF9SRUdfRFBMTF9UT0RfTlNfMDMoX2lkeClcXHRcXHRcXHRcXHRcXHRcXFxcXFxuK1xcdFpMX1JFR19JRFgoX2lkeCwgNiwgMHgxOCwgNCwgNCwgMHgyMClcXG4rI2RlZmluZSBaTF9SRUdfRFBMTF9UT0RfTlNfNFxcdFxcdFxcdFpMX1JFRyg3LCAweDE4LCA0KVxcbisjZGVmaW5lIFpMX1JFR19EUExMX1RPRF9OUyhfaWR4KVxcdFxcdFxcdFxcdFxcdFxcXFxcXG4rXFx0KChfaWR4KSBcXHUwMDNjIDQgPyBaTF9SRUdfRFBMTF9UT0RfTlNfMDMoX2lkeCkgOiBaTF9SRUdfRFBMTF9UT0RfTlNfNClcXG4rXFxuIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxcbiAgKiBSZWdpc3RlciBQYWdlIDksIFN5bnRoIGFuZCBPdXRwdXRcXG4gICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xcbkBAIC0yMjEsNiArMjU2LDIzIEBAXFxuICNkZWZpbmUgWkxfT1VUUFVUX0NUUkxfRU5cXHRcXHRcXHRCSVQoMClcXG4gI2RlZmluZSBaTF9PVVRQVVRfQ1RSTF9TWU5USF9TRUxcXHRcXHRHRU5NQVNLKDYsIDQpXFxuIFxcbisjZGVmaW5lIFpMX1JFR19PVVRQVVRfU1RFUF9USU1FX01BU0tcXHRcXHRaTF9SRUcoOSwgMHgzNiwgMilcXG4rXFxuKyNkZWZpbmUgWkxfUkVHX09VVFBVVF9QSEFTRV9TVEVQX0NUUkxcXHRcXHRaTF9SRUcoOSwgMHgzOCwgMSlcXG4rI2RlZmluZSBaTF9PVVRQVVRfUEhBU0VfU1RFUF9DVFJMX0RQTExcXHRcXHRHRU5NQVNLKDYsIDQpXFxuKyNkZWZpbmUgWkxfT1VUUFVUX1BIQVNFX1NURVBfQ1RSTF9UT0RfU1RFUFxcdEJJVCgzKVxcbisjZGVmaW5lIFpMX09VVFBVVF9QSEFTRV9TVEVQX0NUUkxfT1BcXHRcXHRHRU5NQVNLKDEsIDApXFxuKyNkZWZpbmUgWkxfT1VUUFVUX1BIQVNFX1NURVBfQ1RSTF9PUF9OT05FXFx0MFxcbisjZGVmaW5lIFpMX09VVFBVVF9QSEFTRV9TVEVQX0NUUkxfT1BfUkVTRVRcXHQxXFxuKyNkZWZpbmUgWkxfT1VUUFVUX1BIQVNFX1NURVBfQ1RSTF9PUF9SRUFEXFx0MlxcbisjZGVmaW5lIFpMX09VVFBVVF9QSEFTRV9TVEVQX0NUUkxfT1BfV1JJVEVcXHQzXFxuK1xcbisjZGVmaW5lIFpMX1JFR19PVVRQVVRfUEhBU0VfU1RFUF9OVU1CRVJcXHRcXHRaTF9SRUcoOSwgMHgzOSwgMSlcXG4rXFxuKyNkZWZpbmUgWkxfUkVHX09VVFBVVF9QSEFTRV9TVEVQX01BU0tcXHRcXHRaTF9SRUcoOSwgMHgzYSwgMilcXG4rXFxuKyNkZWZpbmUgWkxfUkVHX09VVFBVVF9QSEFTRV9TVEVQX0RBVEFcXHRcXHRaTF9SRUcoOSwgMHgzYywgNClcXG4rXFxuIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXFxuICAqIFJlZ2lzdGVyIFBhZ2UgMTAsIFJlZiBNYWlsYm94XFxuICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMVQxNDowMjoyNS4yOTQ3MjAyNDVaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJiZXN0LWV4cGVuc2l2ZSIsIkR1cmF0aW9uIjo0MzU5NjE1ODEzNywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJaTDMwNzNYX0kyQ1wiLFxuICAgIFwiWkwzMDczWF9TUElcIixcbiAgICBcIlBUUF8xNTg4X0NMT0NLXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiemwzMDczeF9jaGFuX3RvZF9yZWFkXCIsXG4gICAgXCJ6bDMwNzN4X2NoYW5fdG9kX3dyaXRlXCIsXG4gICAgXCJ6bDMwNzN4X2NoYW5fdG9kX2FkanVzdFwiLFxuICAgIFwiemwzMDczeF9jaGFuX2RmX29mZnNldF9zZXRcIixcbiAgICBcInpsMzA3M3hfY2hhbl90aWVfd3JpdGVcIixcbiAgICBcInpsMzA3M3hfY2hhbl9waGFzZV9zdGVwXCIsXG4gICAgXCJ6bDMwNzN4X2RwbGxfcHRwX2dldHRpbWV4NjRcIixcbiAgICBcInpsMzA3M3hfZHBsbF9wdHBfc2V0dGltZTY0XCIsXG4gICAgXCJ6bDMwNzN4X2RwbGxfcHRwX2FkanRpbWVcIixcbiAgICBcInpsMzA3M3hfZHBsbF9wdHBfYWRqZmluZVwiLFxuICAgIFwiemwzMDczeF9kcGxsX3B0cF9hZGpwaGFzZVwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHMgUFRQIGNsb2NrIHN1cHBvcnQgdG8gdGhlIE1pY3JvY2hpcCBBenVyaXRlIERQTEwgZHJpdmVyICh6bDMwNzN4KS4gSXQgaW1wbGVtZW50cyBQVFAgY2xvY2sgb3BlcmF0aW9ucyBsaWtlIGdldHRpbWV4NjQsIHNldHRpbWU2NCwgYWRqdGltZSwgYWRqZmluZSwgYW5kIGFkanBoYXNlLiBUaGUgZHJpdmVyIGNhbiBiZSBpbnN0YW50aWF0ZWQgdmlhIEkyQyBvciBTUEkgaW4gUUVNVSwgYW5kIHRoZSBQVFAgb3BlcmF0aW9ucyBhcmUgcmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlIHZpYSBQVFAgaW9jdGxzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lXG5pZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5XG51c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLlxuXG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOlxuLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLlxuLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy5cbi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LlxuLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsXG4gIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cbi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsXG4gIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLlxuLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKVxuICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuXG5cbklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2hcbnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlxuXG5XaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzpcbjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuXG4gICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy5cbiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9uc1xuICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuXG4yLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS5cbiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbiAgIEFsc28gY2hlY2sgXCJkZXBlbmRzIG9uXCIgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzXG4gICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3NcbiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCA5NTdkY2ZkNjcxZThiYzU5NzcxOWMxMmNiMmIzMDFkMmY3NDlmZWQxXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFR1ZSBBdWcgMTEgMTQ6MDI6MjIgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9kcml2ZXJzL2RwbGwvemwzMDczeC9LY29uZmlnIGIvZHJpdmVycy9kcGxsL3psMzA3M3gvS2NvbmZpZ1xuaW5kZXggNWJiY2ExNDAwNTgxMy4uZGExNzMxYWNlMTVmMCAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvZHBsbC96bDMwNzN4L0tjb25maWdcbisrKyBiL2RyaXZlcnMvZHBsbC96bDMwNzN4L0tjb25maWdcbkBAIC0yLDcgKzIsNyBAQFxuIFxuIGNvbmZpZyBaTDMwNzNYXG4gXHR0cmlzdGF0ZSBcIk1pY3JvY2hpcCBBenVyaXRlIERQTEwvUFRQL1N5bmNFIGRldmljZXNcIiBpZiBDT01QSUxFX1RFU1Rcbi1cdGRlcGVuZHMgb24gTkVUXG4rXHRkZXBlbmRzIG9uIE5FVCBcdTAwMjZcdTAwMjYgUFRQXzE1ODhfQ0xPQ0tcbiBcdHNlbGVjdCBEUExMXG4gXHRzZWxlY3QgTkVUX0RFVkxJTktcbiBcdHNlbGVjdCBSRUdNQVBcbkBAIC0xNiw3ICsxNiw3IEBAIGNvbmZpZyBaTDMwNzNYXG4gXG4gY29uZmlnIFpMMzA3M1hfSTJDXG4gXHR0cmlzdGF0ZSBcIkkyQyBidXMgaW1wbGVtZW50YXRpb24gZm9yIE1pY3JvY2hpcCBBenVyaXRlIGRldmljZXNcIlxuLVx0ZGVwZW5kcyBvbiBJMkMgXHUwMDI2XHUwMDI2IE5FVFxuK1x0ZGVwZW5kcyBvbiBJMkMgXHUwMDI2XHUwMDI2IE5FVCBcdTAwMjZcdTAwMjYgUFRQXzE1ODhfQ0xPQ0tcbiBcdHNlbGVjdCBSRUdNQVBfSTJDXG4gXHRzZWxlY3QgWkwzMDczWFxuIFx0aGVscFxuQEAgLTI4LDcgKzI4LDcgQEAgY29uZmlnIFpMMzA3M1hfSTJDXG4gXG4gY29uZmlnIFpMMzA3M1hfU1BJXG4gXHR0cmlzdGF0ZSBcIlNQSSBidXMgaW1wbGVtZW50YXRpb24gZm9yIE1pY3JvY2hpcCBBenVyaXRlIGRldmljZXNcIlxuLVx0ZGVwZW5kcyBvbiBORVQgXHUwMDI2XHUwMDI2IFNQSVxuK1x0ZGVwZW5kcyBvbiBORVQgXHUwMDI2XHUwMDI2IFNQSSBcdTAwMjZcdTAwMjYgUFRQXzE1ODhfQ0xPQ0tcbiBcdHNlbGVjdCBSRUdNQVBfU1BJXG4gXHRzZWxlY3QgWkwzMDczWFxuIFx0aGVscFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYyBiL2RyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uY1xuaW5kZXggNGVjMmNmNTNkYWQ0Ni4uYmM2ZDcwZDI1ZDc5MSAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uY1xuKysrIGIvZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jXG5AQCAtMyw2ICszLDcgQEBcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9jbGVhbnVwLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9kZWxheS5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvZGV2X3ByaW50ay5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvcHRwX2Nsb2NrX2tlcm5lbC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvc3RyaW5nLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC90eXBlcy5oXHUwMDNlXG4gXG5AQCAtMTYyLDggKzE2Myw4IEBAIGludCB6bDMwNzN4X2NoYW5fbmNvX21vZGVfc2V0KHN0cnVjdCB6bDMwNzN4X2RldiAqemxkZXYsIHU4IGluZGV4KVxuICAqIEB6bGRldjogcG9pbnRlciB0byB6bDMwNzN4X2RldiBzdHJ1Y3R1cmVcbiAgKiBAaW5kZXg6IERQTEwgY2hhbm5lbCBpbmRleCB0byBmZXRjaCBzdGF0ZSBmb3JcbiAgKlxuLSAqIFJlYWRzIHRoZSBtb2RlX3JlZnNlbCByZWdpc3RlciBhbmQgcmVmZXJlbmNlIHByaW9yaXR5IHJlZ2lzdGVycyBmb3Jcbi0gKiB0aGUgZ2l2ZW4gRFBMTCBjaGFubmVsIGFuZCBzdG9yZXMgdGhlIHJhdyB2YWx1ZXMgZm9yIGxhdGVyIHVzZS5cbisgKiBSZWFkcyB0aGUgbW9kZV9yZWZzZWwsIHN0YXR1cyBhbmQgcmVmZXJlbmNlIHByaW9yaXR5IHJlZ2lzdGVycyBmb3JcbisgKiB0aGUgZ2l2ZW4gRFBMTCBjaGFubmVsIGFuZCBzdG9yZXMgdGhlIHZhbHVlcyBmb3IgbGF0ZXIgdXNlLlxuICAqXG4gICogUmV0dXJuOiAwIG9uIHN1Y2Nlc3MsIFx1MDAzYzAgb24gZXJyb3JcbiAgKi9cbkBAIC0yMzQsNiArMjM1LDMyNiBAQCBjb25zdCBzdHJ1Y3QgemwzMDczeF9jaGFuICp6bDMwNzN4X2NoYW5fc3RhdGVfZ2V0KHN0cnVjdCB6bDMwNzN4X2RldiAqemxkZXYsXG4gXHRyZXR1cm4gXHUwMDI2emxkZXYtXHUwMDNlY2hhbltpbmRleF07XG4gfVxuIFxuKy8qKlxuKyAqIHpsMzA3M3hfY2hhbl90b2RfcmVhZHlfd2FpdCAtIHdhaXQgZm9yIFRvRCBzZW1hcGhvcmUgdG8gY2xlYXJcbisgKiBAemxkZXY6IHBvaW50ZXIgdG8gemwzMDczeCBkZXZpY2VcbisgKiBAY2g6IERQTEwgY2hhbm5lbCBpbmRleFxuKyAqXG4rICogQ2hlY2tzIHRoZSBUb0QgY29udHJvbCByZWdpc3RlciBzZW1hcGhvcmUgYml0LiBJZiBjbGVhciwgcmV0dXJuc1xuKyAqIGltbWVkaWF0ZWx5LiBPdGhlcndpc2UgcG9sbHMgdW50aWwgdGhlIGJpdCBpcyBjbGVhcmVkIGJ5IHRoZSBkZXZpY2UuXG4rICpcbisgKiBSZXR1cm46XG4rICogKiAwXHRcdFx0LSBzdWNjZXNzXG4rICogKiAlLUVCVVNZXHRcdC0gdGltZW91dFxuKyAqICogJS1FT1BOT1RTVVBQXHQtIHVua25vd24gY29tbWFuZCBkZXRlY3RlZFxuKyAqICogbmVnYXRpdmVcdFx0LSBvdGhlciBlcnJvclxuKyAqL1xuK2ludCB6bDMwNzN4X2NoYW5fdG9kX3JlYWR5X3dhaXQoc3RydWN0IHpsMzA3M3hfZGV2ICp6bGRldiwgdTggY2gpXG4re1xuK1x0dW5zaWduZWQgaW50IHRpbWVvdXQ7XG4rXHR1OCB0b2RfY3RybDtcbitcdGludCByYztcbitcbitcdHJjID0gemwzMDczeF9yZWFkX3U4KHpsZGV2LCBaTF9SRUdfRFBMTF9UT0RfQ1RSTChjaCksIFx1MDAyNnRvZF9jdHJsKTtcbitcdGlmIChyYylcbitcdFx0cmV0dXJuIHJjO1xuK1xuK1x0aWYgKCEodG9kX2N0cmwgXHUwMDI2IFpMX0RQTExfVE9EX0NUUkxfU0VNKSlcbitcdFx0cmV0dXJuIDA7XG4rXG4rXHRzd2l0Y2ggKEZJRUxEX0dFVChaTF9EUExMX1RPRF9DVFJMX0NNRCwgdG9kX2N0cmwpKSB7XG4rXHRjYXNlIFpMX0RQTExfVE9EX0NUUkxfQ01EX1dSX05FWFRfMUhaOlxuK1x0XHR0aW1lb3V0ID0gWkxfUE9MTF9UT0RfV1JfVElNRU9VVF9VUztcbitcdFx0YnJlYWs7XG4rXHRjYXNlIFpMX0RQTExfVE9EX0NUUkxfQ01EX1JEX0NVUlJFTlQ6XG4rXHRjYXNlIFpMX0RQTExfVE9EX0NUUkxfQ01EX1JEX05FWFRfMUhaOlxuK1x0XHR0aW1lb3V0ID0gWkxfUE9MTF9UT0RfUkRfVElNRU9VVF9VUztcbitcdFx0YnJlYWs7XG4rXHRkZWZhdWx0OlxuK1x0XHRXQVJOX09OKDEpO1xuK1x0XHRyZXR1cm4gLUVPUE5PVFNVUFA7XG4rXHR9XG4rXG4rXHRyYyA9IHpsMzA3M3hfcG9sbF96ZXJvX3U4KHpsZGV2LCBaTF9SRUdfRFBMTF9UT0RfQ1RSTChjaCksXG4rXHRcdFx0XHQgIFpMX0RQTExfVE9EX0NUUkxfU0VNLCB0aW1lb3V0KTtcbitcbitcdHJldHVybiByYyA9PSAtRVRJTUVET1VUID8gLUVCVVNZIDogcmM7XG4rfVxuK1xuKy8qKlxuKyAqIHpsMzA3M3hfY2hhbl90b2RfY3RybCAtIGlzc3VlIFRvRCBjb21tYW5kXG4rICogQHpsZGV2OiBwb2ludGVyIHRvIHpsMzA3M3ggZGV2aWNlXG4rICogQGNoOiBEUExMIGNoYW5uZWwgaW5kZXhcbisgKiBAY21kOiBUb0QgY29tbWFuZCB0byBleGVjdXRlXG4rICpcbisgKiBXcml0ZXMgdGhlIHNlbWFwaG9yZSBhbmQgY29tbWFuZCB0byBkcGxsX3RvZF9jdHJsLiBUaGUgY2FsbGVyIG11c3RcbisgKiBlbnN1cmUgdGhlIGRldmljZSBpcyByZWFkeSAoc2VtYXBob3JlIGNsZWFyKSBiZWZvcmUgY2FsbGluZyBhbmRcbisgKiBtdXN0IHdhaXQgZm9yIGNvbXBsZXRpb24gaWYgbmVlZGVkLlxuKyAqXG4rICogUmV0dXJuOiAwIG9uIHN1Y2Nlc3MsIFx1MDAzYzAgb24gZXJyb3JcbisgKi9cbitzdGF0aWMgaW50IHpsMzA3M3hfY2hhbl90b2RfY3RybChzdHJ1Y3QgemwzMDczeF9kZXYgKnpsZGV2LCB1OCBjaCwgdTggY21kKVxuK3tcbitcdHJldHVybiB6bDMwNzN4X3dyaXRlX3U4KHpsZGV2LCBaTF9SRUdfRFBMTF9UT0RfQ1RSTChjaCksXG4rXHRcdFx0XHRaTF9EUExMX1RPRF9DVFJMX1NFTSB8IGNtZCk7XG4rfVxuK1xuKy8qKlxuKyAqIHpsMzA3M3hfY2hhbl90b2RfcmVhZCAtIHJlYWQgVG9EIHJlZ2lzdGVycyBhZnRlciBpc3N1aW5nIGEgY29tbWFuZFxuKyAqIEB6bGRldjogcG9pbnRlciB0byB6bDMwNzN4IGRldmljZVxuKyAqIEBjaDogRFBMTCBjaGFubmVsIGluZGV4XG4rICogQG5leHRfaHo6IGlmIHRydWUsIHJlYWQgcHJlZGljdGVkIFRvRCBhdCBuZXh0IDEgSHo7IG90aGVyd2lzZSByZWFkIGN1cnJlbnRcbisgKiBAdHM6IHRpbWVzcGVjIHRvIHN0b3JlIHRoZSByZXN1bHRcbisgKiBAc3RzOiBvcHRpb25hbCBzeXN0ZW0gdGltZXN0YW1wIHBhaXIgZm9yIGNyb3NzLXRpbWVzdGFtcGluZ1xuKyAqXG4rICogQ29udGV4dDogQ2FsbGVyIG11c3Qgc2VyaWFsaXplIGFsbCB6bDMwNzN4X2NoYW5fdG9kXyogY2FsbHMgZXh0ZXJuYWxseS5cbisgKiBSZXR1cm46IDAgb24gc3VjY2VzcywgXHUwMDNjMCBvbiBlcnJvclxuKyAqL1xuK2ludCB6bDMwNzN4X2NoYW5fdG9kX3JlYWQoc3RydWN0IHpsMzA3M3hfZGV2ICp6bGRldiwgdTggY2gsXG4rXHRcdFx0ICBib29sIG5leHRfaHosIHN0cnVjdCB0aW1lc3BlYzY0ICp0cyxcbitcdFx0XHQgIHN0cnVjdCBwdHBfc3lzdGVtX3RpbWVzdGFtcCAqc3RzKVxuK3tcbitcdHUzMiBuc2VjO1xuK1x0dTY0IHNlYztcbitcdHU4IGNtZDtcbitcdGludCByYztcbitcbitcdGlmIChuZXh0X2h6KVxuK1x0XHRjbWQgPSBaTF9EUExMX1RPRF9DVFJMX0NNRF9SRF9ORVhUXzFIWjtcbitcdGVsc2VcbitcdFx0Y21kID0gWkxfRFBMTF9UT0RfQ1RSTF9DTURfUkRfQ1VSUkVOVDtcbitcbitcdC8qIFdhaXQgZm9yIGFueSBwcmV2aW91cyBUb0Qgb3BlcmF0aW9uIHRvIGNvbXBsZXRlICovXG4rXHRyYyA9IHpsMzA3M3hfY2hhbl90b2RfcmVhZHlfd2FpdCh6bGRldiwgY2gpO1xuK1x0aWYgKHJjKVxuK1x0XHRyZXR1cm4gcmM7XG4rXG4rXHRwdHBfcmVhZF9zeXN0ZW1fcHJldHMoc3RzKTtcbitcdHJjID0gemwzMDczeF9jaGFuX3RvZF9jdHJsKHpsZGV2LCBjaCwgY21kKTtcbitcdGlmIChyYylcbitcdFx0cmV0dXJuIHJjO1xuK1xuK1x0cmMgPSB6bDMwNzN4X2NoYW5fdG9kX3JlYWR5X3dhaXQoemxkZXYsIGNoKTtcbitcdGlmIChyYylcbitcdFx0cmV0dXJuIHJjO1xuK1x0cHRwX3JlYWRfc3lzdGVtX3Bvc3R0cyhzdHMpO1xuK1xuK1x0cmMgPSB6bDMwNzN4X3JlYWRfdTQ4KHpsZGV2LCBaTF9SRUdfRFBMTF9UT0RfU0VDKGNoKSwgXHUwMDI2c2VjKTtcbitcdGlmIChyYylcbitcdFx0cmV0dXJuIHJjO1xuK1xuK1x0LyogSFcgbmFub3NlY29uZHMgYXJlIGFsd2F5cyBpbiBbMCwgTlNFQ19QRVJfU0VDKSByYW5nZSAqL1xuK1x0cmMgPSB6bDMwNzN4X3JlYWRfdTMyKHpsZGV2LCBaTF9SRUdfRFBMTF9UT0RfTlMoY2gpLCBcdTAwMjZuc2VjKTtcbitcdGlmIChyYylcbitcdFx0cmV0dXJuIHJjO1xuK1xuK1x0dHMtXHUwMDNldHZfc2VjID0gc2VjO1xuK1x0dHMtXHUwMDNldHZfbnNlYyA9IG5zZWM7XG4rXG4rXHRyZXR1cm4gMDtcbit9XG4rXG4rLyoqXG4rICogemwzMDczeF9jaGFuX3RvZF93cml0ZSAtIHdyaXRlIFRvRCByZWdpc3RlcnMgYW5kIHRyaWdnZXIgMSBIeiB1cGRhdGVcbisgKiBAemxkZXY6IHBvaW50ZXIgdG8gemwzMDczeCBkZXZpY2VcbisgKiBAY2g6IERQTEwgY2hhbm5lbCBpbmRleFxuKyAqIEB0czogdGltZSB0byBzZXRcbisgKlxuKyAqIENvbnRleHQ6IENhbGxlciBtdXN0IHNlcmlhbGl6ZSBhbGwgemwzMDczeF9jaGFuX3RvZF8qIGNhbGxzIGV4dGVybmFsbHkuXG4rICogUmV0dXJuOiAwIG9uIHN1Y2Nlc3MsIFx1MDAzYzAgb24gZXJyb3JcbisgKi9cbitpbnQgemwzMDczeF9jaGFuX3RvZF93cml0ZShzdHJ1Y3QgemwzMDczeF9kZXYgKnpsZGV2LCB1OCBjaCxcbitcdFx0XHQgICBzdHJ1Y3QgdGltZXNwZWM2NCB0cylcbit7XG4rXHRpbnQgcmM7XG4rXG4rXHQvKiBXYWl0IGZvciBhbnkgcHJldmlvdXMgVG9EIG9wZXJhdGlvbiB0byBjb21wbGV0ZSAqL1xuK1x0cmMgPSB6bDMwNzN4X2NoYW5fdG9kX3JlYWR5X3dhaXQoemxkZXYsIGNoKTtcbitcdGlmIChyYylcbitcdFx0cmV0dXJuIHJjO1xuK1xuK1x0cmMgPSB6bDMwNzN4X3dyaXRlX3U0OCh6bGRldiwgWkxfUkVHX0RQTExfVE9EX1NFQyhjaCksIHRzLnR2X3NlYyk7XG4rXHRpZiAocmMpXG4rXHRcdHJldHVybiByYztcbitcbitcdHJjID0gemwzMDczeF93cml0ZV91MzIoemxkZXYsIFpMX1JFR19EUExMX1RPRF9OUyhjaCksIHRzLnR2X25zZWMpO1xuK1x0aWYgKHJjKVxuK1x0XHRyZXR1cm4gcmM7XG4rXG4rXHRyZXR1cm4gemwzMDczeF9jaGFuX3RvZF9jdHJsKHpsZGV2LCBjaCxcbitcdFx0XHRcdCAgICAgWkxfRFBMTF9UT0RfQ1RSTF9DTURfV1JfTkVYVF8xSFopO1xuK31cbitcbisvKipcbisgKiB6bDMwNzN4X2NoYW5fdG9kX2FkanVzdCAtIGF0b21pYyBUb0QgcmVhZC1tb2RpZnktd3JpdGUgd2l0aCByb2xsb3ZlciBndWFyZFxuKyAqIEB6bGRldjogcG9pbnRlciB0byB6bDMwNzN4IGRldmljZVxuKyAqIEBjaDogRFBMTCBjaGFubmVsIGluZGV4XG4rICogQGRlbHRhOiB0aW1lIGFkanVzdG1lbnQgdG8gYXBwbHlcbisgKlxuKyAqIFJlYWRzIHRoZSBuZXh0LUh6IFRvRCBhbmQgY3VycmVudCBUb0QsIHRoZW4gY2hlY2tzIHdoZXRoZXIgZW5vdWdoIHRpbWVcbisgKiByZW1haW5zIGJlZm9yZSB0aGUgbmV4dCAxIEh6IHJvbGxvdmVyIHRvIHNhZmVseSBjb21wbGV0ZSB0aGUgd3JpdGUuXG4rICogUmUtcmVhZHMgaWYgdGhlIDEgSHogdGljayBjcm9zc2VkIGJldHdlZW4gdGhlIHR3byByZWFkcyBvciBpZiBsZXNzXG4rICogdGhhbiAyMCBtcyByZW1haW5zIGJlZm9yZSB0aGUgbmV4dCByb2xsb3Zlci4gQXBwbGllcyBAZGVsdGEgYW5kIHdyaXRlc1xuKyAqIHRoZSByZXN1bHQgYmFjay5cbisgKlxuKyAqIENvbnRleHQ6IENhbGxlciBtdXN0IHNlcmlhbGl6ZSBhbGwgemwzMDczeF9jaGFuX3RvZF8qIGNhbGxzIGV4dGVybmFsbHkuXG4rICogUmV0dXJuOiAwIG9uIHN1Y2Nlc3MsIFx1MDAzYzAgb24gZXJyb3JcbisgKi9cbitpbnQgemwzMDczeF9jaGFuX3RvZF9hZGp1c3Qoc3RydWN0IHpsMzA3M3hfZGV2ICp6bGRldiwgdTggY2gsXG4rXHRcdFx0ICAgIHN0cnVjdCB0aW1lc3BlYzY0IGRlbHRhKVxuK3tcbisjZGVmaW5lIFpMX1RPRF9NQVhfUkVUUklFU1x0MjBcbitcdHN0YXRpYyBjb25zdCBsb25nIHRocmVzaG9sZF9ucyA9IDIwICogTlNFQ19QRVJfTVNFQztcbitcdHN0cnVjdCB0aW1lc3BlYzY0IHRzX25leHQsIHRzX2N1ciwgZGlmZjtcbitcdGludCByYywgaTtcbitcbitcdGZvciAoaSA9IDA7IGkgXHUwMDNjIFpMX1RPRF9NQVhfUkVUUklFUzsgaSsrKSB7XG4rXHRcdHJjID0gemwzMDczeF9jaGFuX3RvZF9yZWFkKHpsZGV2LCBjaCwgdHJ1ZSwgXHUwMDI2dHNfbmV4dCwgTlVMTCk7XG4rXHRcdGlmIChyYylcbitcdFx0XHRyZXR1cm4gcmM7XG4rXG4rXHRcdHJjID0gemwzMDczeF9jaGFuX3RvZF9yZWFkKHpsZGV2LCBjaCwgZmFsc2UsIFx1MDAyNnRzX2N1ciwgTlVMTCk7XG4rXHRcdGlmIChyYylcbitcdFx0XHRyZXR1cm4gcmM7XG4rXG4rXHRcdC8qIEVuc3VyZSB0aGUgMSBIeiB0aWNrIGRpZCBub3QgY3Jvc3MgYmV0d2VlbiB0aGUgdHdvIHJlYWRzXG4rXHRcdCAqIGFuZCB0aGF0IGVub3VnaCBtYXJnaW4gcmVtYWlucyB0byBjb21wbGV0ZSB0aGUgd3JpdGUuXG4rXHRcdCAqL1xuK1x0XHRkaWZmID0gdGltZXNwZWM2NF9zdWIodHNfbmV4dCwgdHNfY3VyKTtcbitcdFx0aWYgKGRpZmYudHZfc2VjIFx1MDAzZSAwIHx8XG4rXHRcdCAgICAoIWRpZmYudHZfc2VjIFx1MDAyNlx1MDAyNiBkaWZmLnR2X25zZWMgXHUwMDNlPSB0aHJlc2hvbGRfbnMpKVxuK1x0XHRcdGJyZWFrO1xuK1x0fVxuK1x0aWYgKGkgPT0gWkxfVE9EX01BWF9SRVRSSUVTKSB7XG4rXHRcdGRldl93YXJuKHpsZGV2LVx1MDAzZWRldixcbitcdFx0XHQgXCJEUExMJXUgVG9EIGFkanVzdCBmYWlsZWQgdG8gZ2V0IHN0YWJsZSBtYXJnaW5cXG5cIixcbitcdFx0XHQgY2gpO1xuK1x0XHRyZXR1cm4gLUVCVVNZO1xuK1x0fVxuK1xuK1x0LyogQXBwbHkgZGVsdGEgdG8gdGhlIG5leHQtSHogVG9EICovXG4rXHR0c19uZXh0ID0gdGltZXNwZWM2NF9hZGQodHNfbmV4dCwgZGVsdGEpO1xuK1x0aWYgKCF0aW1lc3BlYzY0X3ZhbGlkKFx1MDAyNnRzX25leHQpKVxuK1x0XHRyZXR1cm4gLUVJTlZBTDtcbitcbitcdHJldHVybiB6bDMwNzN4X2NoYW5fdG9kX3dyaXRlKHpsZGV2LCBjaCwgdHNfbmV4dCk7XG4rI3VuZGVmIFpMX1RPRF9NQVhfUkVUUklFU1xuK31cbitcbisvKipcbisgKiB6bDMwNzN4X2NoYW5fZGZfb2Zmc2V0X3NldCAtIHdyaXRlIGRlbHRhIGZyZXF1ZW5jeSBvZmZzZXQgdG8gaGFyZHdhcmVcbisgKiBAemxkZXY6IHBvaW50ZXIgdG8gemwzMDczeCBkZXZpY2VcbisgKiBAY2g6IERQTEwgY2hhbm5lbCBpbmRleFxuKyAqIEBvZmZzZXQ6IGZyZXF1ZW5jeSBvZmZzZXQgaW4gMl4tNDggc3RlcHNcbisgKlxuKyAqIENvbnRleHQ6IENhbGxlciBtdXN0IGhvbGQgdGhlIHBlci1EUExMIGxvY2suXG4rICogUmV0dXJuOiAwIG9uIHN1Y2Nlc3MsIFx1MDAzYzAgb24gZXJyb3JcbisgKi9cbitpbnQgemwzMDczeF9jaGFuX2RmX29mZnNldF9zZXQoc3RydWN0IHpsMzA3M3hfZGV2ICp6bGRldiwgdTggY2gsIHM2NCBvZmZzZXQpXG4re1xuK1x0aW50IHJjO1xuK1xuK1x0cmMgPSB6bDMwNzN4X3dyaXRlX3U0OCh6bGRldiwgWkxfUkVHX0RQTExfREZfT0ZGU0VUKGNoKSwgb2Zmc2V0KTtcbitcdGlmICghcmMpXG4rXHRcdHpsZGV2LVx1MDAzZWNoYW5bY2hdLmRmX29mZnNldCA9IG9mZnNldDtcbitcbitcdHJldHVybiByYztcbit9XG4rXG4rLyoqXG4rICogemwzMDczeF9jaGFuX3RpZV93cml0ZSAtIGFkanVzdCBEUExMIHBoYXNlIHVzaW5nIFRJRSB3cml0ZVxuKyAqIEB6bGRldjogcG9pbnRlciB0byB6bDMwNzN4IGRldmljZVxuKyAqIEBjaDogRFBMTCBjaGFubmVsIGluZGV4XG4rICogQGRlbHRhX25zOiBwaGFzZSBhZGp1c3RtZW50IGluIG5hbm9zZWNvbmRzIChtdXN0IGJlIGluICgtMXMsIDFzKSlcbisgKlxuKyAqIENvbnZlcnRzIG5hbm9zZWNvbmRzIHRvIFRJRSB1bml0cyAoMC4wMSBwcykgYW5kIHdyaXRlcyBUSUUgZGF0YVxuKyAqIHRvIHRoZSBzcGVjaWZpZWQgY2hhbm5lbC5cbisgKlxuKyAqIFJldHVybjogMCBvbiBzdWNjZXNzLCBcdTAwM2MwIG9uIGVycm9yXG4rICovXG4raW50IHpsMzA3M3hfY2hhbl90aWVfd3JpdGUoc3RydWN0IHpsMzA3M3hfZGV2ICp6bGRldiwgdTggY2gsIHM2NCBkZWx0YV9ucylcbit7XG4rXHRzNjQgdGllX2RhdGE7XG4rXHRpbnQgcmM7XG4rXG4rXHRpZiAoV0FSTl9PTihkZWx0YV9ucyBcdTAwM2M9IC1OU0VDX1BFUl9TRUMgfHwgZGVsdGFfbnMgXHUwMDNlPSBOU0VDX1BFUl9TRUMpKVxuK1x0XHRyZXR1cm4gLUVSQU5HRTtcbitcbitcdGd1YXJkKG11dGV4KShcdTAwMjZ6bGRldi1cdTAwM2V0aWVfbG9jayk7XG4rXG4rXHQvKiBXYWl0IGZvciBhbnkgcHJldmlvdXMgVElFIG9wZXJhdGlvbiB0byBjb21wbGV0ZSAqL1xuK1x0cmMgPSB6bDMwNzN4X3BvbGxfemVyb191OCh6bGRldiwgWkxfUkVHX0RQTExfVElFX0NUUkwsXG4rXHRcdFx0XHQgIFpMX0RQTExfVElFX0NUUkxfT1AsXG4rXHRcdFx0XHQgIFpMX1BPTExfVElFX1dSX1RJTUVPVVRfVVMpO1xuK1x0aWYgKHJjKVxuK1x0XHRyZXR1cm4gcmM7XG4rXG4rXHQvKiBDb252ZXJ0IG5zIHRvIFRJRSB1bml0cyAoMC4wMSBwcyA9IDEwXi0xNCBzKSAqL1xuK1x0dGllX2RhdGEgPSBkZWx0YV9ucyAqIDEwMDAwMExMO1xuK1xuK1x0cmMgPSB6bDMwNzN4X3dyaXRlX3U0OCh6bGRldiwgWkxfUkVHX0RQTExfVElFX0RBVEEoY2gpLCB0aWVfZGF0YSk7XG4rXHRpZiAocmMpXG4rXHRcdHJldHVybiByYztcbitcbitcdHJjID0gemwzMDczeF93cml0ZV91OCh6bGRldiwgWkxfUkVHX0RQTExfVElFX0NUUkxfTUFTSywgQklUKGNoKSk7XG4rXHRpZiAocmMpXG4rXHRcdHJldHVybiByYztcbitcbitcdHJldHVybiB6bDMwNzN4X3dyaXRlX3U4KHpsZGV2LCBaTF9SRUdfRFBMTF9USUVfQ1RSTCxcbitcdFx0XHRcdFpMX0RQTExfVElFX0NUUkxfT1BfV1IpO1xuK31cbitcbisvKipcbisgKiB6bDMwNzN4X2NoYW5fcGhhc2Vfc3RlcCAtIGV4ZWN1dGUgb25lIG91dHB1dCBwaGFzZSBzdGVwIG9wZXJhdGlvblxuKyAqIEB6bGRldjogcG9pbnRlciB0byB6bDMwNzN4IGRldmljZVxuKyAqIEBjaDogRFBMTCBjaGFubmVsIGluZGV4XG4rICogQG91dF9tYXNrOiBiaXRtYXNrIG9mIG91dHB1dHMgdG8gc3RlcFxuKyAqIEBzdGVwX2N5Y2xlczogcGhhc2Ugc3RlcCBpbiBzeW50aGVzaXplciBjbG9jayBjeWNsZXNcbisgKiBAdG9kX3N0ZXA6IGFsc28gc3RlcCB0aGUgVG9EIGNvdW50ZXJcbisgKlxuKyAqIEFsbCBtYXNrZWQgb3V0cHV0cyBtdXN0IHVzZSBzeW50aGVzaXplcnMgb2YgdGhlIHNhbWUgZnJlcXVlbmN5IHNpbmNlXG4rICogdGhlIHN0ZXAgdmFsdWUgaXMgaW4gc3ludGhlc2l6ZXIgY2xvY2sgY3ljbGVzLlxuKyAqXG4rICogUmV0dXJuOiAwIG9uIHN1Y2Nlc3MsIFx1MDAzYzAgb24gZXJyb3JcbisgKi9cbitpbnQgemwzMDczeF9jaGFuX3BoYXNlX3N0ZXAoc3RydWN0IHpsMzA3M3hfZGV2ICp6bGRldiwgdTggY2gsXG4rXHRcdFx0ICAgIHUxNiBvdXRfbWFzaywgczMyIHN0ZXBfY3ljbGVzLFxuK1x0XHRcdCAgICBib29sIHRvZF9zdGVwKVxuK3tcbitcdHU4IGN0cmw7XG4rXHRpbnQgcmM7XG4rXG4rXHRndWFyZChtdXRleCkoXHUwMDI2emxkZXYtXHUwMDNlcGhhc2Vfc3RlcF9sb2NrKTtcbitcbitcdC8qIFdhaXQgZm9yIGFueSBwcmV2aW91cyBwaGFzZSBzdGVwIG9wZXJhdGlvbiB0byBjb21wbGV0ZSAqL1xuK1x0cmMgPSB6bDMwNzN4X3BvbGxfemVyb191OCh6bGRldiwgWkxfUkVHX09VVFBVVF9QSEFTRV9TVEVQX0NUUkwsXG4rXHRcdFx0XHQgIFpMX09VVFBVVF9QSEFTRV9TVEVQX0NUUkxfT1AsXG4rXHRcdFx0XHQgIFpMX1BPTExfUEhBU0VfU1RFUF9USU1FT1VUX1VTKTtcbitcdGlmIChyYylcbitcdFx0cmV0dXJuIHJjO1xuK1xuK1x0cmMgPSB6bDMwNzN4X3dyaXRlX3UzMih6bGRldiwgWkxfUkVHX09VVFBVVF9QSEFTRV9TVEVQX0RBVEEsXG4rXHRcdFx0ICAgICAgIHN0ZXBfY3ljbGVzKTtcbitcdGlmIChyYylcbitcdFx0cmV0dXJuIHJjO1xuK1xuK1x0cmMgPSB6bDMwNzN4X3dyaXRlX3UxNih6bGRldiwgWkxfUkVHX09VVFBVVF9QSEFTRV9TVEVQX01BU0ssIG91dF9tYXNrKTtcbitcdGlmIChyYylcbitcdFx0cmV0dXJuIHJjO1xuK1xuK1x0cmMgPSB6bDMwNzN4X3dyaXRlX3U4KHpsZGV2LCBaTF9SRUdfT1VUUFVUX1BIQVNFX1NURVBfTlVNQkVSLCAxKTtcbitcdGlmIChyYylcbitcdFx0cmV0dXJuIHJjO1xuK1xuK1x0Y3RybCA9IEZJRUxEX1BSRVAoWkxfT1VUUFVUX1BIQVNFX1NURVBfQ1RSTF9EUExMLCBjaCkgfFxuK1x0ICAgICAgIEZJRUxEX1BSRVAoWkxfT1VUUFVUX1BIQVNFX1NURVBfQ1RSTF9PUCxcbitcdFx0XHQgIFpMX09VVFBVVF9QSEFTRV9TVEVQX0NUUkxfT1BfV1JJVEUpO1xuK1x0aWYgKHRvZF9zdGVwKVxuK1x0XHRjdHJsIHw9IFpMX09VVFBVVF9QSEFTRV9TVEVQX0NUUkxfVE9EX1NURVA7XG4rXG4rXHRyZXR1cm4gemwzMDczeF93cml0ZV91OCh6bGRldiwgWkxfUkVHX09VVFBVVF9QSEFTRV9TVEVQX0NUUkwsIGN0cmwpO1xuK31cbitcbiAvKipcbiAgKiB6bDMwNzN4X2NoYW5fc3RhdGVfc2V0IC0gY29tbWl0IERQTEwgY2hhbm5lbCBzdGF0ZSBjaGFuZ2VzIHRvIGhhcmR3YXJlXG4gICogQHpsZGV2OiBwb2ludGVyIHRvIHpsMzA3M3hfZGV2IHN0cnVjdHVyZVxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uaCBiL2RyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uaFxuaW5kZXggZGM5YzZkOTViZGVlNy4uOTljM2I3MDg4ZjY3OCAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uaFxuKysrIGIvZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5oXG5AQCAtNSwxMCArNSwxMiBAQFxuIFxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2JpdGZpZWxkLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9zdGRkZWYuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L3RpbWU2NC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvdHlwZXMuaFx1MDAzZVxuIFxuICNpbmNsdWRlIFwicmVncy5oXCJcbiBcbitzdHJ1Y3QgcHRwX3N5c3RlbV90aW1lc3RhbXA7XG4gc3RydWN0IHpsMzA3M3hfZGV2O1xuIFxuIC8qKlxuQEAgLTQyLDYgKzQ0LDIxIEBAIGludCB6bDMwNzN4X2NoYW5fc3RhdGVfc2V0KHN0cnVjdCB6bDMwNzN4X2RldiAqemxkZXYsIHU4IGluZGV4LFxuIGludCB6bDMwNzN4X2NoYW5fc3RhdGVfdXBkYXRlKHN0cnVjdCB6bDMwNzN4X2RldiAqemxkZXYsIHU4IGluZGV4KTtcbiBpbnQgemwzMDczeF9jaGFuX25jb19tb2RlX3NldChzdHJ1Y3QgemwzMDczeF9kZXYgKnpsZGV2LCB1OCBpbmRleCk7XG4gXG4raW50IHpsMzA3M3hfY2hhbl90b2RfcmVhZHlfd2FpdChzdHJ1Y3QgemwzMDczeF9kZXYgKnpsZGV2LCB1OCBjaCk7XG4raW50IHpsMzA3M3hfY2hhbl90b2RfcmVhZChzdHJ1Y3QgemwzMDczeF9kZXYgKnpsZGV2LCB1OCBjaCxcbitcdFx0XHQgIGJvb2wgbmV4dF9oeiwgc3RydWN0IHRpbWVzcGVjNjQgKnRzLFxuK1x0XHRcdCAgc3RydWN0IHB0cF9zeXN0ZW1fdGltZXN0YW1wICpzdHMpO1xuK2ludCB6bDMwNzN4X2NoYW5fdG9kX3dyaXRlKHN0cnVjdCB6bDMwNzN4X2RldiAqemxkZXYsIHU4IGNoLFxuK1x0XHRcdCAgIHN0cnVjdCB0aW1lc3BlYzY0IHRzKTtcbitpbnQgemwzMDczeF9jaGFuX3RvZF9hZGp1c3Qoc3RydWN0IHpsMzA3M3hfZGV2ICp6bGRldiwgdTggY2gsXG4rXHRcdFx0ICAgIHN0cnVjdCB0aW1lc3BlYzY0IGRlbHRhKTtcbitpbnQgemwzMDczeF9jaGFuX3BoYXNlX3N0ZXAoc3RydWN0IHpsMzA3M3hfZGV2ICp6bGRldiwgdTggY2gsXG4rXHRcdFx0ICAgIHUxNiBvdXRfbWFzaywgczMyIHN0ZXBfY3ljbGVzLCBib29sIHRvZF9zdGVwKTtcbitcbitpbnQgemwzMDczeF9jaGFuX2RmX29mZnNldF9zZXQoc3RydWN0IHpsMzA3M3hfZGV2ICp6bGRldiwgdTggY2gsIHM2NCBvZmZzZXQpO1xuK1xuK2ludCB6bDMwNzN4X2NoYW5fdGllX3dyaXRlKHN0cnVjdCB6bDMwNzN4X2RldiAqemxkZXYsIHU4IGNoLCBzNjQgZGVsdGFfbnMpO1xuK1xuIC8qKlxuICAqIHpsMzA3M3hfY2hhbl9kZl9vZmZzZXRfZ2V0IC0gZ2V0IGNhY2hlZCBkZl9vZmZzZXQgdnMgdHJhY2tlZCByZWZlcmVuY2VcbiAgKiBAY2hhbjogcG9pbnRlciB0byBjaGFubmVsIHN0YXRlXG5AQCAtMjAwLDYgKzIxNywyMSBAQCBzdGF0aWMgaW5saW5lIGJvb2wgemwzMDczeF9jaGFuX21vZGVfaXNfcmVmbG9jayhjb25zdCBzdHJ1Y3QgemwzMDczeF9jaGFuICpjaGFuKVxuIFx0cmV0dXJuIHpsMzA3M3hfY2hhbl9tb2RlX2dldChjaGFuKSA9PSBaTF9EUExMX01PREVfUkVGU0VMX01PREVfUkVGTE9DSztcbiB9XG4gXG4rLyoqXG4rICogemwzMDczeF9jaGFuX21vZGVfc3VwcG9ydHNfdGllIC0gY2hlY2sgaWYgY2hhbm5lbCBtb2RlIHN1cHBvcnRzIFRJRSB3cml0ZVxuKyAqIEBjaGFuOiBwb2ludGVyIHRvIGNoYW5uZWwgc3RhdGVcbisgKlxuKyAqIFRJRSB3cml0ZSBpcyBzdXBwb3J0ZWQgaW4gQVVUTyBhbmQgUkVGTE9DSyBtb2RlcyByZWdhcmRsZXNzIG9mIGxvY2sgc3RhdGUuXG4rICpcbisgKiBSZXR1cm46IHRydWUgaWYgVElFIHdyaXRlIGlzIHN1cHBvcnRlZCwgZmFsc2Ugb3RoZXJ3aXNlXG4rICovXG4rc3RhdGljIGlubGluZSBib29sXG4remwzMDczeF9jaGFuX21vZGVfc3VwcG9ydHNfdGllKGNvbnN0IHN0cnVjdCB6bDMwNzN4X2NoYW4gKmNoYW4pXG4re1xuK1x0cmV0dXJuIHpsMzA3M3hfY2hhbl9tb2RlX2lzX2F1dG8oY2hhbikgfHxcbitcdFx0emwzMDczeF9jaGFuX21vZGVfaXNfcmVmbG9jayhjaGFuKTtcbit9XG4rXG4gLyoqXG4gICogemwzMDczeF9jaGFuX2lzX2hvX3JlYWR5IC0gY2hlY2sgaWYgaG9sZG92ZXIgaXMgcmVhZHlcbiAgKiBAY2hhbjogcG9pbnRlciB0byBjaGFubmVsIHN0YXRlXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9kcGxsL3psMzA3M3gvY29yZS5jIGIvZHJpdmVycy9kcGxsL3psMzA3M3gvY29yZS5jXG5pbmRleCA1YjJkNzdmMmMyMjg4Li4yMzBkZjA4ZTI3Y2QxIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9kcGxsL3psMzA3M3gvY29yZS5jXG4rKysgYi9kcml2ZXJzL2RwbGwvemwzMDczeC9jb3JlLmNcbkBAIC0zMjIsNyArMzIyLDcgQEAgaW50IHpsMzA3M3hfd3JpdGVfdTQ4KHN0cnVjdCB6bDMwNzN4X2RldiAqemxkZXYsIHVuc2lnbmVkIGludCByZWcsIHU2NCB2YWwpXG4gaW50IHpsMzA3M3hfcG9sbF96ZXJvX3U4KHN0cnVjdCB6bDMwNzN4X2RldiAqemxkZXYsIHVuc2lnbmVkIGludCByZWcsXG4gXHRcdFx0IHU4IG1hc2ssIHVuc2lnbmVkIGludCB0aW1lb3V0X3VzKVxuIHtcbi0jZGVmaW5lIFpMX1BPTExfU0xFRVBfVVMgMTBcbitcdHVuc2lnbmVkIGludCBzbGVlcF91cyA9IHRpbWVvdXRfdXMgLyA1MDtcbiBcdHVuc2lnbmVkIGludCB2YWw7XG4gXG4gXHQvKiBDaGVjayB0aGUgcmVnaXN0ZXIgaXMgOGJpdCAqL1xuQEAgLTMzNiw3ICszMzYsNyBAQCBpbnQgemwzMDczeF9wb2xsX3plcm9fdTgoc3RydWN0IHpsMzA3M3hfZGV2ICp6bGRldiwgdW5zaWduZWQgaW50IHJlZyxcbiBcdHJlZyA9IFpMX1JFR19BRERSKHJlZykgKyBaTF9SQU5HRV9PRkZTRVQ7XG4gXG4gXHRyZXR1cm4gcmVnbWFwX3JlYWRfcG9sbF90aW1lb3V0KHpsZGV2LVx1MDAzZXJlZ21hcCwgcmVnLCB2YWwsICEodmFsIFx1MDAyNiBtYXNrKSxcbi1cdFx0XHRcdFx0WkxfUE9MTF9TTEVFUF9VUywgdGltZW91dF91cyk7XG4rXHRcdFx0XHRcdHNsZWVwX3VzLCB0aW1lb3V0X3VzKTtcbiB9XG4gXG4gaW50IHpsMzA3M3hfbWJfb3Aoc3RydWN0IHpsMzA3M3hfZGV2ICp6bGRldiwgdW5zaWduZWQgaW50IG9wX3JlZywgdTggb3BfdmFsLFxuQEAgLTUxMSw2ICs1MTEsMTEgQEAgemwzMDczeF9kZXZfc3RhdGVfZmV0Y2goc3RydWN0IHpsMzA3M3hfZGV2ICp6bGRldilcbiBcdGludCByYztcbiBcdHU4IGk7XG4gXG4rXHRyYyA9IHpsMzA3M3hfcmVhZF91MTYoemxkZXYsIFpMX1JFR19PVVRQVVRfU1RFUF9USU1FX01BU0ssXG4rXHRcdFx0ICAgICAgXHUwMDI2emxkZXYtXHUwMDNlb3V0X3N0ZXBfdGltZV9tYXNrKTtcbitcdGlmIChyYylcbitcdFx0cmV0dXJuIHJjO1xuK1xuIFx0Zm9yIChpID0gMDsgaSBcdTAwM2MgWkwzMDczWF9OVU1fUkVGUzsgaSsrKSB7XG4gXHRcdHJjID0gemwzMDczeF9yZWZfc3RhdGVfZmV0Y2goemxkZXYsIGkpO1xuIFx0XHRpZiAocmMpIHtcbkBAIC0xMDM0LDYgKzEwMzksMTQgQEAgaW50IHpsMzA3M3hfZGV2X3Byb2JlKHN0cnVjdCB6bDMwNzN4X2RldiAqemxkZXYpXG4gXHQgKiBhbmQvb3IgcG9sbHMgYXJlIHJlcXVpcmVkIHRvIGJlIGRvbmUgYXRvbWljYWxseS5cbiBcdCAqL1xuIFx0cmMgPSBkZXZtX211dGV4X2luaXQoemxkZXYtXHUwMDNlZGV2LCBcdTAwMjZ6bGRldi1cdTAwM2VtdWx0aW9wX2xvY2spO1xuK1x0aWYgKHJjKVxuK1x0XHRyZXR1cm4gZGV2X2Vycl9wcm9iZSh6bGRldi1cdTAwM2VkZXYsIHJjLFxuK1x0XHRcdFx0ICAgICBcIkZhaWxlZCB0byBpbml0aWFsaXplIG11dGV4XFxuXCIpO1xuK1x0cmMgPSBkZXZtX211dGV4X2luaXQoemxkZXYtXHUwMDNlZGV2LCBcdTAwMjZ6bGRldi1cdTAwM2VwaGFzZV9zdGVwX2xvY2spO1xuK1x0aWYgKHJjKVxuK1x0XHRyZXR1cm4gZGV2X2Vycl9wcm9iZSh6bGRldi1cdTAwM2VkZXYsIHJjLFxuK1x0XHRcdFx0ICAgICBcIkZhaWxlZCB0byBpbml0aWFsaXplIG11dGV4XFxuXCIpO1xuK1x0cmMgPSBkZXZtX211dGV4X2luaXQoemxkZXYtXHUwMDNlZGV2LCBcdTAwMjZ6bGRldi1cdTAwM2V0aWVfbG9jayk7XG4gXHRpZiAocmMpXG4gXHRcdHJldHVybiBkZXZfZXJyX3Byb2JlKHpsZGV2LVx1MDAzZWRldiwgcmMsXG4gXHRcdFx0XHQgICAgIFwiRmFpbGVkIHRvIGluaXRpYWxpemUgbXV0ZXhcXG5cIik7XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9kcGxsL3psMzA3M3gvY29yZS5oIGIvZHJpdmVycy9kcGxsL3psMzA3M3gvY29yZS5oXG5pbmRleCA3OGRjMjA4ZjNlZWEyLi42N2MxMGUyNTk1MTE4IDEwMDY0NFxuLS0tIGEvZHJpdmVycy9kcGxsL3psMzA3M3gvY29yZS5oXG4rKysgYi9kcml2ZXJzL2RwbGwvemwzMDczeC9jb3JlLmhcbkBAIC0yNiw2ICsyNiwxMCBAQCBzdHJ1Y3QgemwzMDczeF9kcGxsO1xuICNkZWZpbmUgWkxfUE9MTF9IV1JFR19USU1FT1VUX1VTXHQoNTAgKiBVU0VDX1BFUl9NU0VDKVxuICNkZWZpbmUgWkxfUE9MTF9NQl9USU1FT1VUX1VTXHRcdCgzMCAqIFVTRUNfUEVSX01TRUMpXG4gI2RlZmluZSBaTF9QT0xMX1BIQVNFX0VSUl9USU1FT1VUX1VTXHQoNTAgKiBVU0VDX1BFUl9NU0VDKVxuKyNkZWZpbmUgWkxfUE9MTF9QSEFTRV9TVEVQX1RJTUVPVVRfVVNcdCgzMDAwICogVVNFQ19QRVJfTVNFQylcbisjZGVmaW5lIFpMX1BPTExfVElFX1dSX1RJTUVPVVRfVVNcdCgxMDAwICogVVNFQ19QRVJfTVNFQylcbisjZGVmaW5lIFpMX1BPTExfVE9EX1JEX1RJTUVPVVRfVVNcdCgzMCAqIFVTRUNfUEVSX01TRUMpXG4rI2RlZmluZSBaTF9QT0xMX1RPRF9XUl9USU1FT1VUX1VTXHQoMTAwMCAqIFVTRUNfUEVSX01TRUMpXG4gXG4gZW51bSB6bDMwNzN4X2ZsYWdzIHtcbiBcdFpMMzA3M1hfRkxBR19SRUZfUEhBU0VfQ09NUF8zMl9CSVQsXG5AQCAtNTUsNiArNTksOCBAQCBzdHJ1Y3QgemwzMDczeF9jaGlwX2luZm8ge1xuICAqIEByZWdtYXA6IHJlZ21hcCB0byBhY2Nlc3MgZGV2aWNlIHJlZ2lzdGVyc1xuICAqIEBpbmZvOiBkZXRlY3RlZCBjaGlwIGluZm9cbiAgKiBAbXVsdGlvcF9sb2NrOiB0byBzZXJpYWxpemUgbXVsdGlwbGUgcmVnaXN0ZXIgb3BlcmF0aW9uc1xuKyAqIEB0aWVfbG9jazogdG8gc2VyaWFsaXplIFRJRSB3cml0ZSBvcGVyYXRpb25zXG4rICogQHBoYXNlX3N0ZXBfbG9jazogdG8gc2VyaWFsaXplIG91dHB1dCBwaGFzZSBzdGVwIG9wZXJhdGlvbnNcbiAgKiBAcmVmOiBhcnJheSBvZiBpbnB1dCByZWZlcmVuY2VzJyBpbnZhcmlhbnRzXG4gICogQG91dDogYXJyYXkgb2Ygb3V0cycgaW52YXJpYW50c1xuICAqIEBzeW50aDogYXJyYXkgb2Ygc3ludGhzJyBpbnZhcmlhbnRzXG5AQCAtNjMsNiArNjksNyBAQCBzdHJ1Y3QgemwzMDczeF9jaGlwX2luZm8ge1xuICAqIEBrd29ya2VyOiB0aHJlYWQgZm9yIHBlcmlvZGljIHdvcmtcbiAgKiBAd29yazogcGVyaW9kaWMgd29ya1xuICAqIEBjbG9ja19pZDogY2xvY2sgaWQgb2YgdGhlIGRldmljZVxuKyAqIEBvdXRfc3RlcF90aW1lX21hc2s6IG91dHB1dCBzdGVwLXRpbWUgbWFzayAoZGV2aWNlLWdsb2JhbClcbiAgKiBAcGhhc2VfYXZnX2ZhY3RvcjogcGhhc2Ugb2Zmc2V0IG1lYXN1cmVtZW50IGF2ZXJhZ2luZyBmYWN0b3JcbiAgKiBAZnJlcV9tb25pdG9yOiBpcyBmcmVxdWVuY3kgbW9uaXRvciBlbmFibGVkXG4gICovXG5AQCAtNzEsNiArNzgsOCBAQCBzdHJ1Y3QgemwzMDczeF9kZXYge1xuIFx0c3RydWN0IHJlZ21hcFx0XHRcdCpyZWdtYXA7XG4gXHRjb25zdCBzdHJ1Y3QgemwzMDczeF9jaGlwX2luZm9cdCppbmZvO1xuIFx0c3RydWN0IG11dGV4XHRcdFx0bXVsdGlvcF9sb2NrO1xuK1x0c3RydWN0IG11dGV4XHRcdFx0dGllX2xvY2s7XG4rXHRzdHJ1Y3QgbXV0ZXhcdFx0XHRwaGFzZV9zdGVwX2xvY2s7XG4gXG4gXHQvKiBJbnZhcmlhbnRzICovXG4gXHRzdHJ1Y3QgemwzMDczeF9yZWZcdHJlZltaTDMwNzNYX05VTV9SRUZTXTtcbkBAIC04Nyw2ICs5Niw3IEBAIHN0cnVjdCB6bDMwNzN4X2RldiB7XG4gXG4gXHQvKiBQZXItY2hpcCBwYXJhbWV0ZXJzICovXG4gXHR1NjRcdFx0XHRjbG9ja19pZDtcbitcdHUxNlx0XHRcdG91dF9zdGVwX3RpbWVfbWFzaztcbiBcdHU4XHRcdFx0cGhhc2VfYXZnX2ZhY3RvcjtcbiBcdGJvb2xcdFx0XHRmcmVxX21vbml0b3I7XG4gfTtcbkBAIC0zMDgsNiArMzE4LDE5IEBAIHpsMzA3M3hfZGV2X291dF9pc19lbmFibGVkKHN0cnVjdCB6bDMwNzN4X2RldiAqemxkZXYsIHU4IGluZGV4KVxuIFx0cmV0dXJuIHpsMzA3M3hfc3ludGhfaXNfZW5hYmxlZChzeW50aCkgXHUwMDI2XHUwMDI2IHpsMzA3M3hfb3V0X2lzX2VuYWJsZWQob3V0KTtcbiB9XG4gXG4rLyoqXG4rICogemwzMDczeF9kZXZfb3V0X2lzX3N0ZXBwZWQgLSBjaGVjayBpZiBvdXRwdXQgaXMgaW4gc3RlcC10aW1lIG1hc2tcbisgKiBAemxkZXY6IHBvaW50ZXIgdG8gemwzMDczeCBkZXZpY2VcbisgKiBAaW5kZXg6IG91dHB1dCBpbmRleFxuKyAqXG4rICogUmV0dXJuOiB0cnVlIGlmIG91dHB1dCBpcyBhZmZlY3RlZCBieSBzdGVwLXRpbWUgb3BlcmF0aW9uc1xuKyAqL1xuK3N0YXRpYyBpbmxpbmUgYm9vbFxuK3psMzA3M3hfZGV2X291dF9pc19zdGVwcGVkKHN0cnVjdCB6bDMwNzN4X2RldiAqemxkZXYsIHU4IGluZGV4KVxuK3tcbitcdHJldHVybiAhISh6bGRldi1cdTAwM2VvdXRfc3RlcF90aW1lX21hc2sgXHUwMDI2IEJJVChpbmRleCkpO1xuK31cbitcbiAvKipcbiAgKiB6bDMwNzN4X2Rldl9vdXRfZHBsbF9nZXQgLSBnZXQgRFBMTCBJRCB0aGUgb3V0cHV0IGlzIGRyaXZlbiBieVxuICAqIEB6bGRldjogcG9pbnRlciB0byB6bDMwNzN4IGRldmljZVxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvZHBsbC96bDMwNzN4L2RwbGwuYyBiL2RyaXZlcnMvZHBsbC96bDMwNzN4L2RwbGwuY1xuaW5kZXggMDQ4OGFlNmFjNDg2Yy4uODMwMWFkMzQzNjU4YSAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvZHBsbC96bDMwNzN4L2RwbGwuY1xuKysrIGIvZHJpdmVycy9kcGxsL3psMzA3M3gvZHBsbC5jXG5AQCAtMiw2ICsyLDcgQEBcbiBcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9iaXRzLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9iaXRmaWVsZC5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvY2xlYW51cC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvYnVnLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9jb250YWluZXJfb2YuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2Rldl9wcmludGsuaFx1MDAzZVxuQEAgLTEzLDYgKzE0LDcgQEBcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9uZXRsaW5rLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3Byb3BlcnR5LmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9wdHBfY2xvY2tfa2VybmVsLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9zbGFiLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9zcHJpbnRmLmhcdTAwM2VcbiBcbkBAIC0yMjc1LDQ1ICsyMjc3LDM4NCBAQCB6bDMwNzN4X2RwbGxfaW5pdF9maW5lX3BoYXNlX2FkanVzdChzdHJ1Y3QgemwzMDczeF9kZXYgKnpsZGV2KVxuIFx0cmV0dXJuIHpsMzA3M3hfd3JpdGVfdTgoemxkZXYsIFpMX1JFR19TWU5USF9QSEFTRV9TSElGVF9DVFJMLCAweDAxKTtcbiB9XG4gXG4rLyogTWF4aW11bSBmcmVxdWVuY3kgYWRqdXN0bWVudDogKy0xJSBvZiBub21pbmFsIGluIHBwYiAqL1xuKyNkZWZpbmUgWkwzMDczWF9EUExMX1BUUF9NQVhfQURKXHQxMDAwMDAwMFxuK1xuIC8qKlxuLSAqIHpsMzA3M3hfZHBsbF9hbGxvYyAtIGFsbG9jYXRlIERQTEwgZGV2aWNlXG4tICogQHpsZGV2OiBwb2ludGVyIHRvIHpsMzA3M3ggZGV2aWNlXG4tICogQGNoOiBEUExMIGNoYW5uZWwgbnVtYmVyXG4rICogemwzMDczeF9kcGxsX3B0cF9nZXR0aW1leDY0IC0gcmVhZCBjdXJyZW50IHRpbWUgZnJvbSBUb0QgY291bnRlcnNcbisgKiBAaW5mbzogUFRQIGNsb2NrIGluZm9cbisgKiBAdHM6IHRpbWVzcGVjIHRvIHN0b3JlIGN1cnJlbnQgdGltZVxuKyAqIEBzdHM6IG9wdGlvbmFsIHN5c3RlbSB0aW1lc3RhbXAgcGFpciBmb3IgY3Jvc3MtdGltZXN0YW1waW5nXG4gICpcbi0gKiBBbGxvY2F0ZXMgRFBMTCBkZXZpY2Ugc3RydWN0dXJlIGZvciBnaXZlbiBEUExMIGNoYW5uZWwuXG4rICogUmV0dXJuOiAwIG9uIHN1Y2Nlc3MsIFx1MDAzYzAgb24gZXJyb3JcbisgKi9cbitzdGF0aWMgaW50IHpsMzA3M3hfZHBsbF9wdHBfZ2V0dGltZXg2NChzdHJ1Y3QgcHRwX2Nsb2NrX2luZm8gKmluZm8sXG4rXHRcdFx0XHQgICAgICAgc3RydWN0IHRpbWVzcGVjNjQgKnRzLFxuK1x0XHRcdFx0ICAgICAgIHN0cnVjdCBwdHBfc3lzdGVtX3RpbWVzdGFtcCAqc3RzKVxuK3tcbitcdHN0cnVjdCB6bDMwNzN4X2RwbGwgKnpsZHBsbCA9IGNvbnRhaW5lcl9vZihpbmZvLCBzdHJ1Y3QgemwzMDczeF9kcGxsLFxuK1x0XHRcdFx0XHRcdCAgIHB0cF9pbmZvKTtcbitcbitcdGd1YXJkKG11dGV4KShcdTAwMjZ6bGRwbGwtXHUwMDNlbG9jayk7XG4rXG4rXHRyZXR1cm4gemwzMDczeF9jaGFuX3RvZF9yZWFkKHpsZHBsbC1cdTAwM2VkZXYsIHpsZHBsbC1cdTAwM2VpZCwgZmFsc2UsIHRzLCBzdHMpO1xuK31cbitcbisvKipcbisgKiB6bDMwNzN4X2RwbGxfcHRwX3NldHRpbWU2NCAtIHNldCBUb0QgY291bnRlcnMgdG8gZ2l2ZW4gdGltZVxuKyAqIEBpbmZvOiBQVFAgY2xvY2sgaW5mb1xuKyAqIEB0czogdGltZXNwZWMgd2l0aCB0aW1lIHRvIHNldFxuICAqXG4tICogUmV0dXJuOiBwb2ludGVyIHRvIERQTEwgZGV2aWNlIG9uIHN1Y2Nlc3MsIGVycm9yIHBvaW50ZXIgb24gZXJyb3JcbisgKiBSZXR1cm46IDAgb24gc3VjY2VzcywgXHUwMDNjMCBvbiBlcnJvclxuICAqL1xuLXN0cnVjdCB6bDMwNzN4X2RwbGwgKlxuLXpsMzA3M3hfZHBsbF9hbGxvYyhzdHJ1Y3QgemwzMDczeF9kZXYgKnpsZGV2LCB1OCBjaClcbitzdGF0aWMgaW50IHpsMzA3M3hfZHBsbF9wdHBfc2V0dGltZTY0KHN0cnVjdCBwdHBfY2xvY2tfaW5mbyAqaW5mbyxcbitcdFx0XHRcdCAgICAgIGNvbnN0IHN0cnVjdCB0aW1lc3BlYzY0ICp0cylcbiB7XG4tXHRzdHJ1Y3QgemwzMDczeF9kcGxsICp6bGRwbGw7XG4rXHRzdHJ1Y3QgemwzMDczeF9kcGxsICp6bGRwbGwgPSBjb250YWluZXJfb2YoaW5mbywgc3RydWN0IHpsMzA3M3hfZHBsbCxcbitcdFx0XHRcdFx0XHQgICBwdHBfaW5mbyk7XG4gXG4tXHR6bGRwbGwgPSBremFsbG9jX29iaigqemxkcGxsKTtcbi1cdGlmICghemxkcGxsKVxuLVx0XHRyZXR1cm4gRVJSX1BUUigtRU5PTUVNKTtcbitcdGd1YXJkKG11dGV4KShcdTAwMjZ6bGRwbGwtXHUwMDNlbG9jayk7XG4gXG4tXHR6bGRwbGwtXHUwMDNlZGV2ID0gemxkZXY7XG4tXHR6bGRwbGwtXHUwMDNlaWQgPSBjaDtcbi1cdG11dGV4X2luaXQoXHUwMDI2emxkcGxsLVx1MDAzZWxvY2spO1xuLVx0SU5JVF9MSVNUX0hFQUQoXHUwMDI2emxkcGxsLVx1MDAzZXBpbnMpO1xuK1x0cmV0dXJuIHpsMzA3M3hfY2hhbl90b2Rfd3JpdGUoemxkcGxsLVx1MDAzZWRldiwgemxkcGxsLVx1MDAzZWlkLCAqdHMpO1xuK31cbiBcbi1cdHJldHVybiB6bGRwbGw7XG4rLyoqXG4rICogemwzMDczeF9kcGxsX3B0cF9hZGp0aW1lX3BoYXNlX3N0ZXAgLSBhZGp1c3Qgc3ViLXNlY29uZCB0aW1lIHZpYSBwaGFzZSBzdGVwXG4rICogQHpsZHBsbDogRFBMTCBjaGFubmVsXG4rICogQGRlbHRhOiB0aW1lIGFkanVzdG1lbnQgaW4gbmFub3NlY29uZHMgKG11c3QgYmUgd2l0aGluICgtTlNFQ19QRVJfU0VDLFxuKyAqICAgICAgICAgTlNFQ19QRVJfU0VDKSlcbisgKlxuKyAqIFVzZXMgdGhlIG91dHB1dCBwaGFzZSBzdGVwIG1lY2hhbmlzbSB3aXRoIHRvZF9zdGVwPTEgdG8gYWRqdXN0IGJvdGhcbisgKiB0aGUgb3V0cHV0IGNsb2NrIHBoYXNlIGFuZCB0aGUgVG9EIGNvdW50ZXIgc2ltdWx0YW5lb3VzbHkuIFRoaXMga2VlcHNcbisgKiBvdXRwdXRzIGFuZCBUb0QgY29oZXJlbnQuIE9ubHkgdmFsaWQgZm9yIE5DTy5cbisgKlxuKyAqIE91dHB1dHMgYXJlIGdyb3VwZWQgYnkgc3ludGhlc2l6ZXIgc2luY2UgdGhlIHBoYXNlIHN0ZXAgdmFsdWUgaXMgaW5cbisgKiBzeW50aGVzaXplciBjbG9jayBjeWNsZXMuIFRoZSBmaXJzdCBzeW50aCBncm91cCB3aXRoIGVuYWJsZWQgb3V0cHV0c1xuKyAqIHVzZXMgdG9kX3N0ZXAgdG8gYWRqdXN0IGJvdGggb3V0cHV0cyBhbmQgdGhlIFRvRCBjb3VudGVyLiBSZW1haW5pbmdcbisgKiBncm91cHMgc3RlcCBvdXRwdXRzIG9ubHkuIElmIG5vIHN5bnRoIGhhcyBlbmFibGVkIG91dHB1dHMsIHRoZSBUb0RcbisgKiBjb3VudGVyIGlzIHN0ZXBwZWQgYWxvbmUgdXNpbmcgYW4gZW1wdHkgb3V0cHV0IG1hc2sgKHRoZSBGVyB1c2VzXG4rICogdGhlIGZpcnN0IGVuYWJsZWQgc3ludGgncyBwZXJpb2QgZm9yIHRoZSBjb252ZXJzaW9uKS5cbisgKlxuKyAqIFJldHVybjpcbisgKiAqICUwXHRcdFx0LSBzdWNjZXNzIChvciBwYXJ0aWFsIHN1Y2Nlc3MgaWYgYSBsYXRlciBzeW50aCBncm91cFxuKyAqXHRcdFx0ICBmYWlsZWQgYWZ0ZXIgdGhlIGZpcnN0IHdhcyBhbHJlYWR5IHN0ZXBwZWQpXG4rICogKiAlLUVPUE5PVFNVUFBcdC0gbm8gc3ludGhzIGF2YWlsYWJsZVxuKyAqICogbmVnYXRpdmVcdFx0LSBlcnJvclxuKyAqL1xuK3N0YXRpYyBpbnQgemwzMDczeF9kcGxsX3B0cF9hZGp0aW1lX3BoYXNlX3N0ZXAoc3RydWN0IHpsMzA3M3hfZHBsbCAqemxkcGxsLFxuK1x0XHRcdFx0XHQgICAgICAgczY0IGRlbHRhKVxuK3tcbitcdHUxNiBzeW50aF9tYXNrW1pMMzA3M1hfTlVNX1NZTlRIU10gPSB7fTtcbitcdHN0cnVjdCB6bDMwNzN4X2RldiAqemxkZXYgPSB6bGRwbGwtXHUwMDNlZGV2O1xuK1x0Y29uc3Qgc3RydWN0IHpsMzA3M3hfc3ludGggKnN5bnRoO1xuK1x0c3RydWN0IHpsMzA3M3hfZHBsbF9waW4gKnBpbjtcbitcdHUzMiBmaXJzdF9zeW50aF9mcmVxID0gMDtcbitcdGJvb2wgdG9kX3N0ZXBwZWQgPSBmYWxzZTtcbitcdHMzMiBzdGVwX2N5Y2xlcztcbitcdHUzMiBzeW50aF9mcmVxO1xuK1x0aW50IHJjO1xuK1x0dTggaTtcbitcbitcdC8qIEJ1aWxkIHBlci1zeW50aCBvdXRwdXQgbWFza3MgZnJvbSByZWdpc3RlcmVkIG91dHB1dCBwaW5zICovXG4rXHRsaXN0X2Zvcl9lYWNoX2VudHJ5KHBpbiwgXHUwMDI2emxkcGxsLVx1MDAzZXBpbnMsIGxpc3QpIHtcbitcdFx0dTggb3V0X2lkLCBzeW50aF9pZDtcbitcbitcdFx0aWYgKHpsMzA3M3hfZHBsbF9pc19pbnB1dF9waW4ocGluKSlcbitcdFx0XHRjb250aW51ZTtcbitcbitcdFx0b3V0X2lkID0gemwzMDczeF9vdXRwdXRfcGluX291dF9nZXQocGluLVx1MDAzZWlkKTtcbitcbitcdFx0aWYgKCF6bDMwNzN4X2Rldl9vdXRfaXNfc3RlcHBlZCh6bGRldiwgb3V0X2lkKSlcbitcdFx0XHRjb250aW51ZTtcbitcbitcdFx0c3ludGhfaWQgPSB6bDMwNzN4X2Rldl9vdXRfc3ludGhfZ2V0KHpsZGV2LCBvdXRfaWQpO1xuK1x0XHRpZiAoc3ludGhfaWQgXHUwMDNlPSBaTDMwNzNYX05VTV9TWU5USFMpIHtcbitcdFx0XHRkZXZfd2Fybih6bGRldi1cdTAwM2VkZXYsIFwiVW5leHBlY3RlZCBzeW50aCBpZCBmb3IgT1VUJXVcXG5cIixcbitcdFx0XHRcdCBvdXRfaWQpO1xuK1x0XHRcdGNvbnRpbnVlO1xuK1x0XHR9XG4rXHRcdHN5bnRoX21hc2tbc3ludGhfaWRdIHw9IEJJVChvdXRfaWQpO1xuK1x0fVxuK1xuK1x0LyogUHJvY2VzcyBlYWNoIHN5bnRoIGdyb3VwICovXG4rXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBaTDMwNzNYX05VTV9TWU5USFM7IGkrKykge1xuK1x0XHRzeW50aCA9IHpsMzA3M3hfc3ludGhfc3RhdGVfZ2V0KHpsZGV2LCBpKTtcbitcdFx0aWYgKCF6bDMwNzN4X3N5bnRoX2lzX2VuYWJsZWQoc3ludGgpIHx8XG4rXHRcdCAgICB6bDMwNzN4X3N5bnRoX2RwbGxfZ2V0KHN5bnRoKSAhPSB6bGRwbGwtXHUwMDNlaWQpXG4rXHRcdFx0Y29udGludWU7XG4rXG4rXHRcdHN5bnRoX2ZyZXEgPSB6bDMwNzN4X3N5bnRoX2ZyZXFfZ2V0KHN5bnRoKTtcbitcbitcdFx0LyogUmVtZW1iZXIgZmlyc3QgZW5hYmxlZCBzeW50aCBmcmVxIGZvciBUb0Qtb25seSBmYWxsYmFjayAqL1xuK1x0XHRpZiAoIWZpcnN0X3N5bnRoX2ZyZXEpXG4rXHRcdFx0Zmlyc3Rfc3ludGhfZnJlcSA9IHN5bnRoX2ZyZXE7XG4rXG4rXHRcdGlmICghc3ludGhfbWFza1tpXSlcbitcdFx0XHRjb250aW51ZTtcbitcbitcdFx0LyogU2FmZSBmb3IgczMyOiBtYXggc3ludGggZnJlcSBpcyA3NTAgTUh6ICovXG4rXHRcdHN0ZXBfY3ljbGVzID0gZGl2X3M2NChkZWx0YSAqIHN5bnRoX2ZyZXEsIE5TRUNfUEVSX1NFQyk7XG4rXG4rXHRcdHJjID0gemwzMDczeF9jaGFuX3BoYXNlX3N0ZXAoemxkZXYsIHpsZHBsbC1cdTAwM2VpZCxcbitcdFx0XHRcdFx0ICAgICBzeW50aF9tYXNrW2ldLCBzdGVwX2N5Y2xlcyxcbitcdFx0XHRcdFx0ICAgICAhdG9kX3N0ZXBwZWQpO1xuK1x0XHRpZiAocmMpIHtcbitcdFx0XHRpZiAodG9kX3N0ZXBwZWQpIHtcbitcdFx0XHRcdGRldl93YXJuKHpsZGV2LVx1MDAzZWRldixcbitcdFx0XHRcdFx0IFwiUGFydGlhbCBwaGFzZSBzdGVwIGZhaWx1cmVcXG5cIik7XG4rXHRcdFx0XHRyZXR1cm4gMDtcbitcdFx0XHR9XG4rXHRcdFx0cmV0dXJuIHJjO1xuK1x0XHR9XG4rXHRcdHRvZF9zdGVwcGVkID0gdHJ1ZTtcbitcdH1cbitcbitcdGlmICghZmlyc3Rfc3ludGhfZnJlcSlcbitcdFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xuK1xuK1x0LyogTm8gZW5hYmxlZCBvdXRwdXRzIGZvdW5kOyBzdGVwIFRvRCBjb3VudGVyIG9ubHkgdXNpbmcgdGhlXG4rXHQgKiBmaXJzdCBlbmFibGVkIHN5bnRoJ3MgcGVyaW9kIChlbXB0eSBvdXRwdXQgbWFzaykuXG4rXHQgKi9cbitcdGlmICghdG9kX3N0ZXBwZWQpIHtcbitcdFx0c3RlcF9jeWNsZXMgPSBkaXZfczY0KGRlbHRhICogZmlyc3Rfc3ludGhfZnJlcSwgTlNFQ19QRVJfU0VDKTtcbitcdFx0cmV0dXJuIHpsMzA3M3hfY2hhbl9waGFzZV9zdGVwKHpsZGV2LCB6bGRwbGwtXHUwMDNlaWQsIDAsXG4rXHRcdFx0XHRcdCAgICAgICBzdGVwX2N5Y2xlcywgdHJ1ZSk7XG4rXHR9XG4rXG4rXHRyZXR1cm4gMDtcbiB9XG4gXG4gLyoqXG4tICogemwzMDczeF9kcGxsX2ZyZWUgLSBmcmVlIERQTEwgZGV2aWNlXG4tICogQHpsZHBsbDogcG9pbnRlciB0byB6bDMwNzN4X2RwbGwgc3RydWN0dXJlXG4rICogemwzMDczeF9kcGxsX3B0cF9hZGp0aW1lIC0gYWRqdXN0IFBUUCBjbG9jayB0aW1lXG4rICogQGluZm86IFBUUCBjbG9jayBpbmZvXG4rICogQGRlbHRhOiB0aW1lIGFkanVzdG1lbnQgaW4gbmFub3NlY29uZHNcbiAgKlxuLSAqIERlYWxsb2NhdGVzIGdpdmVuIERQTEwgZGV2aWNlIHByZXZpb3VzbHkgYWxsb2NhdGVkIGJ5IEB6bDMwNzN4X2RwbGxfYWxsb2MuXG4rICogRm9yIE5DTywgbGFyZ2UgZGVsdGFzIChcdTAwM2U9IDEgc2Vjb25kKSBhcmUgc3BsaXQgaW50byBhIFRvRFxuKyAqIHJlYWQtbW9kaWZ5LXdyaXRlIGZvciB0aGUgc2Vjb25kcyBwYXJ0IGFuZCBhbiBvdXRwdXQgcGhhc2Ugc3RlcCBmb3JcbisgKiB0aGUgc3ViLXNlY29uZCByZW1haW5kZXIuIFN1Yi1zZWNvbmQgZGVsdGFzIHVzZSBwaGFzZSBzdGVwIGRpcmVjdGx5LFxuKyAqIGZhbGxpbmcgYmFjayB0byBUb0QgcmVhZC1tb2RpZnktd3JpdGUgaWYgcGhhc2Ugc3RlcCBvciBUSUUgd3JpdGVcbisgKiBmYWlscy4gSW4gQVVUTy9SRUZMT0NLIG1vZGVzLCBsYXJnZSBkZWx0YXMgYXJlIHNwbGl0IGludG8gVG9EXG4rICogcmVhZC1tb2RpZnktd3JpdGUgZm9yIHNlY29uZHMgYW5kIFRJRSB3cml0ZSBmb3IgdGhlIHN1Yi1zZWNvbmRcbisgKiByZW1haW5kZXIuIFN1Yi1zZWNvbmQgZGVsdGFzIHVzZSBUSUUgd3JpdGUgZGlyZWN0bHkuXG4rICpcbisgKiBJZiB0aGUgc2Vjb25kcyBwYXJ0IHdhcyBhbHJlYWR5IGNvbW1pdHRlZCB3aGVuIHRoZSBzdWItc2Vjb25kXG4rICogbWVjaGFuaXNtIGZhaWxzLCByZXR1cm5zIDAgdG8gcHJldmVudCB0aGUgUFRQIHNlcnZvIGZyb20gcmV0cnlpbmdcbisgKiB0aGUgZnVsbCBkZWx0YSBhbmQgYXBwbHlpbmcgc2Vjb25kcyBhZ2Fpbi5cbisgKlxuKyAqIFJldHVybjogMCBvbiBzdWNjZXNzIChvciBwYXJ0aWFsIHN1Y2Nlc3MpLCBcdTAwM2MwIG9uIGVycm9yXG4gICovXG4tdm9pZFxuLXpsMzA3M3hfZHBsbF9mcmVlKHN0cnVjdCB6bDMwNzN4X2RwbGwgKnpsZHBsbClcbitzdGF0aWMgaW50IHpsMzA3M3hfZHBsbF9wdHBfYWRqdGltZShzdHJ1Y3QgcHRwX2Nsb2NrX2luZm8gKmluZm8sIHM2NCBkZWx0YSlcbiB7XG4tXHRXQVJOKHpsZHBsbC1cdTAwM2VkcGxsX2RldiwgXCJEUExMIGRldmljZSBpcyBzdGlsbCByZWdpc3RlcmVkXFxuXCIpO1xuK1x0c3RydWN0IHpsMzA3M3hfZHBsbCAqemxkcGxsID0gY29udGFpbmVyX29mKGluZm8sIHN0cnVjdCB6bDMwNzN4X2RwbGwsXG4rXHRcdFx0XHRcdFx0ICAgcHRwX2luZm8pO1xuK1x0c3RydWN0IHpsMzA3M3hfZGV2ICp6bGRldiA9IHpsZHBsbC1cdTAwM2VkZXY7XG4rXHRjb25zdCBzdHJ1Y3QgemwzMDczeF9jaGFuICpjaGFuO1xuK1x0Ym9vbCBzZWNfYWRqdXN0ZWQgPSBmYWxzZTtcbitcdHN0cnVjdCB0aW1lc3BlYzY0IHRzO1xuK1x0aW50IHJjO1xuIFxuLVx0bXV0ZXhfZGVzdHJveShcdTAwMjZ6bGRwbGwtXHUwMDNlbG9jayk7XG4tXHRrZnJlZSh6bGRwbGwpO1xuK1x0aWYgKCFkZWx0YSlcbitcdFx0cmV0dXJuIDA7XG4rXG4rXHRndWFyZChtdXRleCkoXHUwMDI2emxkcGxsLVx1MDAzZWxvY2spO1xuK1xuK1x0LyogTW9kZXMgd2l0aG91dCBwaGFzZSBzdGVwIG9yIFRJRSB1c2UgcGxhaW4gVG9EIGFkanVzdCAqL1xuK1x0Y2hhbiA9IHpsMzA3M3hfY2hhbl9zdGF0ZV9nZXQoemxkZXYsIHpsZHBsbC1cdTAwM2VpZCk7XG4rXHRpZiAoIXpsMzA3M3hfY2hhbl9tb2RlX2lzX25jbyhjaGFuKSBcdTAwMjZcdTAwMjZcbitcdCAgICAhemwzMDczeF9jaGFuX21vZGVfc3VwcG9ydHNfdGllKGNoYW4pKVxuK1x0XHRyZXR1cm4gemwzMDczeF9jaGFuX3RvZF9hZGp1c3QoemxkZXYsIHpsZHBsbC1cdTAwM2VpZCxcbitcdFx0XHRcdFx0ICAgICAgIG5zX3RvX3RpbWVzcGVjNjQoZGVsdGEpKTtcbitcbitcdC8qIFNwbGl0IG9mZiBzZWNvbmRzIHZpYSBUb0QgcmVhZC1tb2RpZnktd3JpdGUgc28gdGhlIHN1Yi1zZWNvbmRcbitcdCAqIHJlbWFpbmRlciBjYW4gYmUgYXBwbGllZCB0aHJvdWdoIHRoZSBvdXRwdXQtY29oZXJlbnQgbWVjaGFuaXNtXG4rXHQgKiAocGhhc2Ugc3RlcCBvciBUSUUgd3JpdGUpLlxuK1x0ICovXG4rXHRpZiAoZGVsdGEgXHUwMDNlPSBOU0VDX1BFUl9TRUMgfHwgZGVsdGEgXHUwMDNjPSAtTlNFQ19QRVJfU0VDKSB7XG4rXHRcdHMzMiByZW1haW5kZXI7XG4rXG4rXHRcdHRzLnR2X3NlYyA9IGRpdl9zNjRfcmVtKGRlbHRhLCBOU0VDX1BFUl9TRUMsIFx1MDAyNnJlbWFpbmRlcik7XG4rXHRcdHRzLnR2X25zZWMgPSAwO1xuK1x0XHRkZWx0YSA9IHJlbWFpbmRlcjtcbitcbitcdFx0cmMgPSB6bDMwNzN4X2NoYW5fdG9kX2FkanVzdCh6bGRldiwgemxkcGxsLVx1MDAzZWlkLCB0cyk7XG4rXHRcdGlmIChyYylcbitcdFx0XHRyZXR1cm4gcmM7XG4rXG4rXHRcdC8qIE5vIHN1Yi1zZWNvbmQgcmVtYWluZGVyLCBkb25lICovXG4rXHRcdGlmICghZGVsdGEpXG4rXHRcdFx0cmV0dXJuIDA7XG4rXG4rXHRcdC8qIFdhaXQgZm9yIHRoZSBUb0Qgd3JpdGUgdG8gYmUgYXBwbGllZCBhdCB0aGUgMSBIeiBlZGdlXG4rXHRcdCAqIGJlZm9yZSBpc3N1aW5nIHBoYXNlIHN0ZXAgb3IgVElFIHdyaXRlLCBzbyB0aGUgcGVuZGluZ1xuK1x0XHQgKiBXUl9ORVhUXzFIWiBkb2VzIG5vdCBvdmVyd3JpdGUgdGhlIHN1Yi1zZWNvbmQgYWRqdXN0bWVudC5cbitcdFx0ICovXG4rXHRcdHJjID0gemwzMDczeF9jaGFuX3RvZF9yZWFkeV93YWl0KHpsZGV2LCB6bGRwbGwtXHUwMDNlaWQpO1xuK1x0XHRpZiAocmMpXG4rXHRcdFx0cmV0dXJuIHJjO1xuK1xuK1x0XHRzZWNfYWRqdXN0ZWQgPSB0cnVlO1xuK1x0fVxuK1xuK1x0LyogQXBwbHkgc3ViLXNlY29uZCBkZWx0YSB2aWEgcGhhc2Ugc3RlcCAoTkNPKSBvciBUSUUgd3JpdGUgKi9cbitcdGlmICh6bDMwNzN4X2NoYW5fbW9kZV9pc19uY28oY2hhbikpIHtcbitcdFx0cmMgPSB6bDMwNzN4X2RwbGxfcHRwX2FkanRpbWVfcGhhc2Vfc3RlcCh6bGRwbGwsIGRlbHRhKTtcbitcdFx0aWYgKCFyYylcbitcdFx0XHRyZXR1cm4gMDtcbitcdH0gZWxzZSB7XG4rXHRcdHJjID0gemwzMDczeF9jaGFuX3RpZV93cml0ZSh6bGRldiwgemxkcGxsLVx1MDAzZWlkLCBkZWx0YSk7XG4rXHRcdGlmICghcmMpXG4rXHRcdFx0cmV0dXJuIDA7XG4rXHR9XG4rXG4rXHQvKiBQaGFzZSBzdGVwIG9yIFRJRSB3cml0ZSBmYWlsZWQsIGZhbGwgYmFjayB0byBUb0QgYWRqdXN0ICovXG4rXHRyYyA9IHpsMzA3M3hfY2hhbl90b2RfYWRqdXN0KHpsZGV2LCB6bGRwbGwtXHUwMDNlaWQsXG4rXHRcdFx0XHQgICAgIG5zX3RvX3RpbWVzcGVjNjQoZGVsdGEpKTtcbitcbitcdC8qIEluIHRoZSB1bmxpa2VseSBldmVudCB0aGF0IGJvdGggcGhhc2Ugc3RlcC9USUUgd3JpdGUgYW5kIGZhbGxiYWNrXG4rXHQgKiBUb0QgYWRqdXN0IGZhaWwgYWZ0ZXIgc2Vjb25kcyB3ZXJlIGFscmVhZHkgY29tbWl0dGVkLCByZXR1cm5cbitcdCAqIHN1Y2Nlc3MgdG8gcHJldmVudCB0aGUgUFRQIHNlcnZvIGZyb20gcmV0cnlpbmcgdGhlIGZ1bGwgZGVsdGEgYW5kXG4rXHQgKiBhcHBseWluZyBzZWNvbmRzIGFnYWluLiBUaGUgc3ViLXNlY29uZCByZXNpZHVhbCB3aWxsIHNlbGYtY29ycmVjdFxuK1x0ICogaW4gdGhlIG5leHQgc2Vydm8gY3ljbGUuXG4rXHQgKi9cbitcdGlmIChyYyBcdTAwMjZcdTAwMjYgc2VjX2FkanVzdGVkKSB7XG4rXHRcdGRldl93YXJuKHpsZGV2LVx1MDAzZWRldixcbitcdFx0XHQgXCJTdWItc2Vjb25kIGFkanVzdG1lbnQgZmFpbGVkIGFmdGVyIHNlY29uZHMgYXBwbGllZFxcblwiKTtcbitcdFx0cmV0dXJuIDA7XG4rXHR9XG4rXG4rXHRyZXR1cm4gcmM7XG4rfVxuK1xuKy8qKlxuKyAqIHpsMzA3M3hfZHBsbF9wdHBfYWRqZmluZSAtIGFkanVzdCBQVFAgY2xvY2sgZnJlcXVlbmN5XG4rICogQGluZm86IFBUUCBjbG9jayBpbmZvXG4rICogQHNjYWxlZF9wcG06IGZyZXF1ZW5jeSBhZGp1c3RtZW50IGluIHNjYWxlZCBwcG0gKHBwbSAqIDJeMTYpXG4rICpcbisgKiBPbmx5IHN1cHBvcnRlZCBmb3IgTkNPLiBXcml0ZXMgdGhlIGRlbHRhIGZyZXF1ZW5jeSBvZmZzZXQgcmVnaXN0ZXIuXG4rICpcbisgKiBSZXR1cm46XG4rICogKiAlMFx0XHRcdC0gc3VjY2VzcyBvciBAc2NhbGVkX3BwbSBpcyB6ZXJvIChuby1vcClcbisgKiAqICUtRU9QTk9UU1VQUFx0LSBOQ08gcGluIGlzIG5vdCBjb25uZWN0ZWQgYW5kIEBzY2FsZWRfcHBtIGlzIG5vbi16ZXJvXG4rICogKiBuZWdhdGl2ZVx0XHQtIG90aGVyIGVycm9yXG4rICovXG4rc3RhdGljIGludFxuK3psMzA3M3hfZHBsbF9wdHBfYWRqZmluZShzdHJ1Y3QgcHRwX2Nsb2NrX2luZm8gKmluZm8sIGxvbmcgc2NhbGVkX3BwbSlcbit7XG4rXHRzdHJ1Y3QgemwzMDczeF9kcGxsICp6bGRwbGwgPSBjb250YWluZXJfb2YoaW5mbywgc3RydWN0IHpsMzA3M3hfZHBsbCxcbitcdFx0XHRcdFx0XHQgICBwdHBfaW5mbyk7XG4rXHRjb25zdCBzdHJ1Y3QgemwzMDczeF9jaGFuICpjaGFuO1xuK1x0czY0IG9mZnNldDtcbitcbitcdC8qIENvbnZlcnQgc2NhbGVkX3BwbSB0byBkZl9vZmZzZXQgaW4gMl4tNDggc3RlcHM6XG4rXHQgKiAgIGRmX29mZnNldCA9IC0oc2NhbGVkX3BwbSAqIDJeMzIpIC8gMTBeNlxuK1x0ICpcbitcdCAqIFNpbXBsaWZ5IHRvIGF2b2lkIG92ZXJmbG93OlxuK1x0ICogICBkZl9vZmZzZXQgPSAtKHNjYWxlZF9wcG0gKiAyXjI2KSAvIDVeNlxuK1x0ICogICBkZl9vZmZzZXQgPSAtKHNjYWxlZF9wcG0gKiA2NzEwODg2NCkgLyAxNTYyNVxuK1x0ICovXG4rXHRvZmZzZXQgPSAtZGl2X3M2NCgoczY0KXNjYWxlZF9wcG0gKiA2NzEwODg2NExMLCAxNTYyNSk7XG4rXG4rXHRndWFyZChtdXRleCkoXHUwMDI2emxkcGxsLVx1MDAzZWxvY2spO1xuK1xuK1x0Y2hhbiA9IHpsMzA3M3hfY2hhbl9zdGF0ZV9nZXQoemxkcGxsLVx1MDAzZWRldiwgemxkcGxsLVx1MDAzZWlkKTtcbitcdGlmICghemwzMDczeF9jaGFuX21vZGVfaXNfbmNvKGNoYW4pKVxuK1x0XHRyZXR1cm4gc2NhbGVkX3BwbSA/IC1FT1BOT1RTVVBQIDogMDtcbitcdGlmIChvZmZzZXQgPT0gY2hhbi1cdTAwM2VkZl9vZmZzZXQpXG4rXHRcdHJldHVybiAwO1xuK1xuK1x0cmV0dXJuIHpsMzA3M3hfY2hhbl9kZl9vZmZzZXRfc2V0KHpsZHBsbC1cdTAwM2VkZXYsIHpsZHBsbC1cdTAwM2VpZCwgb2Zmc2V0KTtcbit9XG4rXG4rLyoqXG4rICogemwzMDczeF9kcGxsX3B0cF9hZGpwaGFzZSAtIGFkanVzdCBQVFAgY2xvY2sgcGhhc2VcbisgKiBAaW5mbzogUFRQIGNsb2NrIGluZm9cbisgKiBAZGVsdGE6IHBoYXNlIGFkanVzdG1lbnQgaW4gbmFub3NlY29uZHNcbisgKlxuKyAqIE9ubHkgc3VwcG9ydGVkIGluIEFVVE8gYW5kIFJFRkxPQ0sgbW9kZXMuIFVzZXMgVElFIHdyaXRlIGZvclxuKyAqIG5hbm9zZWNvbmQgcmVzb2x1dGlvbiBwaGFzZSBhZGp1c3RtZW50LlxuKyAqXG4rICogUmV0dXJuOlxuKyAqICogJTBcdFx0XHQtIHN1Y2Nlc3Mgb3IgQGRlbHRhIGlzIHplcm8gKG5vLW9wKVxuKyAqICogJS1FT1BOT1RTVVBQXHQtIG1vZGUgZG9lcyBub3Qgc3VwcG9ydCBUSUUgYW5kIEBkZWx0YSBpcyBub24temVyb1xuKyAqICogbmVnYXRpdmVcdFx0LSBvdGhlciBlcnJvclxuKyAqL1xuK3N0YXRpYyBpbnQgemwzMDczeF9kcGxsX3B0cF9hZGpwaGFzZShzdHJ1Y3QgcHRwX2Nsb2NrX2luZm8gKmluZm8sIHMzMiBkZWx0YSlcbit7XG4rXHRzdHJ1Y3QgemwzMDczeF9kcGxsICp6bGRwbGwgPSBjb250YWluZXJfb2YoaW5mbywgc3RydWN0IHpsMzA3M3hfZHBsbCxcbitcdFx0XHRcdFx0XHQgICBwdHBfaW5mbyk7XG4rXHRzdHJ1Y3QgemwzMDczeF9kZXYgKnpsZGV2ID0gemxkcGxsLVx1MDAzZWRldjtcbitcdGNvbnN0IHN0cnVjdCB6bDMwNzN4X2NoYW4gKmNoYW47XG4rXG4rXHRpZiAoIWRlbHRhKVxuK1x0XHRyZXR1cm4gMDtcbitcbitcdGd1YXJkKG11dGV4KShcdTAwMjZ6bGRwbGwtXHUwMDNlbG9jayk7XG4rXG4rXHRjaGFuID0gemwzMDczeF9jaGFuX3N0YXRlX2dldCh6bGRldiwgemxkcGxsLVx1MDAzZWlkKTtcbitcbitcdGlmICghemwzMDczeF9jaGFuX21vZGVfc3VwcG9ydHNfdGllKGNoYW4pKVxuK1x0XHRyZXR1cm4gLUVPUE5PVFNVUFA7XG4rXG4rXHRyZXR1cm4gemwzMDczeF9jaGFuX3RpZV93cml0ZSh6bGRldiwgemxkcGxsLVx1MDAzZWlkLCBkZWx0YSk7XG4rfVxuK1xuK3N0YXRpYyBzMzJcbit6bDMwNzN4X2RwbGxfcHRwX2dldG1heHBoYXNlKHN0cnVjdCBwdHBfY2xvY2tfaW5mbyAqaW5mbyBfX2Fsd2F5c191bnVzZWQpXG4re1xuK1x0LyogSFcgbGltaXRzIFRJRSB3cml0ZSB0byArLTEgc2Vjb25kLiBSZXR1cm4gdGhlIGNvbnN0YW50IEhXXG4rXHQgKiBsaW1pdCBhbmQgbGV0IGFkanBoYXNlIGhhbmRsZSBtb2RlLXNwZWNpZmljIGNoZWNrcy5cbitcdCAqL1xuK1x0cmV0dXJuIE5TRUNfUEVSX1NFQyAtIDE7XG4rfVxuK1xuK3N0YXRpYyBjb25zdCBzdHJ1Y3QgcHRwX2Nsb2NrX2luZm8gemwzMDczeF9kcGxsX3B0cF9jbG9ja19pbmZvID0ge1xuK1x0Lm93bmVyXHRcdD0gVEhJU19NT0RVTEUsXG4rXHQubWF4X2Fkalx0PSBaTDMwNzNYX0RQTExfUFRQX01BWF9BREosXG4rXHQuZ2V0dGltZXg2NFx0PSB6bDMwNzN4X2RwbGxfcHRwX2dldHRpbWV4NjQsXG4rXHQuc2V0dGltZTY0XHQ9IHpsMzA3M3hfZHBsbF9wdHBfc2V0dGltZTY0LFxuK1x0LmFkanRpbWVcdD0gemwzMDczeF9kcGxsX3B0cF9hZGp0aW1lLFxuK1x0LmFkamZpbmVcdD0gemwzMDczeF9kcGxsX3B0cF9hZGpmaW5lLFxuK1x0LmFkanBoYXNlXHQ9IHpsMzA3M3hfZHBsbF9wdHBfYWRqcGhhc2UsXG4rXHQuZ2V0bWF4cGhhc2VcdD0gemwzMDczeF9kcGxsX3B0cF9nZXRtYXhwaGFzZSxcbit9O1xuK1xuKy8qKlxuKyAqIHpsMzA3M3hfZHBsbF9wdHBfcmVnaXN0ZXIgLSByZWdpc3RlciBQVFAgY2xvY2sgZm9yIGEgRFBMTCBjaGFubmVsXG4rICogQHpsZHBsbDogRFBMTCBjaGFubmVsIHRvIHJlZ2lzdGVyIFBUUCBjbG9jayBmb3JcbisgKlxuKyAqIFJldHVybjogMCBvbiBzdWNjZXNzLCBcdTAwM2MwIG9uIGVycm9yXG4rICovXG4rc3RhdGljIGludCB6bDMwNzN4X2RwbGxfcHRwX3JlZ2lzdGVyKHN0cnVjdCB6bDMwNzN4X2RwbGwgKnpsZHBsbClcbit7XG4rXHRzdHJ1Y3QgemwzMDczeF9kZXYgKnpsZGV2ID0gemxkcGxsLVx1MDAzZWRldjtcbitcdHN0cnVjdCBwdHBfY2xvY2sgKnB0cF9jbG9jaztcbitcbitcdHpsZHBsbC1cdTAwM2VwdHBfaW5mbyA9IHpsMzA3M3hfZHBsbF9wdHBfY2xvY2tfaW5mbztcbitcdHNucHJpbnRmKHpsZHBsbC1cdTAwM2VwdHBfaW5mby5uYW1lLCBzaXplb2YoemxkcGxsLVx1MDAzZXB0cF9pbmZvLm5hbWUpLFxuK1x0XHQgXCIlcy1kcGxsJXVcIiwgZGV2X25hbWUoemxkZXYtXHUwMDNlZGV2KSwgemxkcGxsLVx1MDAzZWlkKTtcbitcbitcdHB0cF9jbG9jayA9IHB0cF9jbG9ja19yZWdpc3RlcihcdTAwMjZ6bGRwbGwtXHUwMDNlcHRwX2luZm8sIHpsZGV2LVx1MDAzZWRldik7XG4rXHRpZiAoSVNfRVJSKHB0cF9jbG9jaykpIHtcbitcdFx0ZGV2X2Vycih6bGRldi1cdTAwM2VkZXYsIFwiRmFpbGVkIHRvIHJlZ2lzdGVyIFBUUCBjbG9jayBmb3IgRFBMTCV1XFxuXCIsXG4rXHRcdFx0emxkcGxsLVx1MDAzZWlkKTtcbitcdFx0cmV0dXJuIFBUUl9FUlIocHRwX2Nsb2NrKTtcbitcdH1cbitcbitcdHpsZHBsbC1cdTAwM2VwdHBfY2xvY2sgPSBwdHBfY2xvY2s7XG4rXG4rXHRyZXR1cm4gMDtcbit9XG4rXG4rLyoqXG4rICogemwzMDczeF9kcGxsX3B0cF91bnJlZ2lzdGVyIC0gdW5yZWdpc3RlciBQVFAgY2xvY2sgZm9yIGEgRFBMTCBjaGFubmVsXG4rICogQHpsZHBsbDogRFBMTCBjaGFubmVsIHRvIHVucmVnaXN0ZXIgUFRQIGNsb2NrIGZvclxuKyAqL1xuK3N0YXRpYyB2b2lkIHpsMzA3M3hfZHBsbF9wdHBfdW5yZWdpc3RlcihzdHJ1Y3QgemwzMDczeF9kcGxsICp6bGRwbGwpXG4re1xuK1x0aWYgKCFJU19FUlJfT1JfTlVMTCh6bGRwbGwtXHUwMDNlcHRwX2Nsb2NrKSkge1xuK1x0XHRwdHBfY2xvY2tfdW5yZWdpc3Rlcih6bGRwbGwtXHUwMDNlcHRwX2Nsb2NrKTtcbitcdFx0emxkcGxsLVx1MDAzZXB0cF9jbG9jayA9IE5VTEw7XG4rXHR9XG4gfVxuIFxuIC8qKlxuQEAgLTIzOTgsNiArMjczOSw0NyBAQCB6bDMwNzN4X2RwbGxfcmVmX3N5bmNfcGFpcnNfcmVnaXN0ZXIoc3RydWN0IHpsMzA3M3hfZHBsbCAqemxkcGxsKVxuIFx0cmV0dXJuIDA7XG4gfVxuIFxuKy8qKlxuKyAqIHpsMzA3M3hfZHBsbF9hbGxvYyAtIGFsbG9jYXRlIERQTEwgZGV2aWNlXG4rICogQHpsZGV2OiBwb2ludGVyIHRvIHpsMzA3M3ggZGV2aWNlXG4rICogQGNoOiBEUExMIGNoYW5uZWwgbnVtYmVyXG4rICpcbisgKiBBbGxvY2F0ZXMgRFBMTCBkZXZpY2Ugc3RydWN0dXJlIGZvciBnaXZlbiBEUExMIGNoYW5uZWwuXG4rICpcbisgKiBSZXR1cm46IHBvaW50ZXIgdG8gRFBMTCBkZXZpY2Ugb24gc3VjY2VzcywgZXJyb3IgcG9pbnRlciBvbiBlcnJvclxuKyAqL1xuK3N0cnVjdCB6bDMwNzN4X2RwbGwgKlxuK3psMzA3M3hfZHBsbF9hbGxvYyhzdHJ1Y3QgemwzMDczeF9kZXYgKnpsZGV2LCB1OCBjaClcbit7XG4rXHRzdHJ1Y3QgemwzMDczeF9kcGxsICp6bGRwbGw7XG4rXG4rXHR6bGRwbGwgPSBremFsbG9jX29iaigqemxkcGxsKTtcbitcdGlmICghemxkcGxsKVxuK1x0XHRyZXR1cm4gRVJSX1BUUigtRU5PTUVNKTtcbitcbitcdHpsZHBsbC1cdTAwM2VkZXYgPSB6bGRldjtcbitcdHpsZHBsbC1cdTAwM2VpZCA9IGNoO1xuK1x0bXV0ZXhfaW5pdChcdTAwMjZ6bGRwbGwtXHUwMDNlbG9jayk7XG4rXHRJTklUX0xJU1RfSEVBRChcdTAwMjZ6bGRwbGwtXHUwMDNlcGlucyk7XG4rXG4rXHRyZXR1cm4gemxkcGxsO1xuK31cbitcbisvKipcbisgKiB6bDMwNzN4X2RwbGxfZnJlZSAtIGZyZWUgRFBMTCBkZXZpY2VcbisgKiBAemxkcGxsOiBwb2ludGVyIHRvIHpsMzA3M3hfZHBsbCBzdHJ1Y3R1cmVcbisgKlxuKyAqIERlYWxsb2NhdGVzIGdpdmVuIERQTEwgZGV2aWNlIHByZXZpb3VzbHkgYWxsb2NhdGVkIGJ5IEB6bDMwNzN4X2RwbGxfYWxsb2MuXG4rICovXG4rdm9pZFxuK3psMzA3M3hfZHBsbF9mcmVlKHN0cnVjdCB6bDMwNzN4X2RwbGwgKnpsZHBsbClcbit7XG4rXHRXQVJOKHpsZHBsbC1cdTAwM2VkcGxsX2RldiwgXCJEUExMIGRldmljZSBpcyBzdGlsbCByZWdpc3RlcmVkXFxuXCIpO1xuK1xuK1x0bXV0ZXhfZGVzdHJveShcdTAwMjZ6bGRwbGwtXHUwMDNlbG9jayk7XG4rXHRrZnJlZSh6bGRwbGwpO1xuK31cbitcbiAvKipcbiAgKiB6bDMwNzN4X2RwbGxfcmVnaXN0ZXIgLSByZWdpc3RlciBEUExMIGRldmljZSBhbmQgYWxsIGl0cyBwaW5zXG4gICogQHpsZHBsbDogcG9pbnRlciB0byB6bDMwNzN4X2RwbGwgc3RydWN0dXJlXG5AQCAtMjQyOCw2ICsyODEwLDEzIEBAIHpsMzA3M3hfZHBsbF9yZWdpc3RlcihzdHJ1Y3QgemwzMDczeF9kcGxsICp6bGRwbGwpXG4gXHRcdHJldHVybiByYztcbiBcdH1cbiBcbitcdHJjID0gemwzMDczeF9kcGxsX3B0cF9yZWdpc3Rlcih6bGRwbGwpO1xuK1x0aWYgKHJjKSB7XG4rXHRcdHpsMzA3M3hfZHBsbF9waW5zX3VucmVnaXN0ZXIoemxkcGxsKTtcbitcdFx0emwzMDczeF9kcGxsX2RldmljZV91bnJlZ2lzdGVyKHpsZHBsbCk7XG4rXHRcdHJldHVybiByYztcbitcdH1cbitcbiBcdHJldHVybiAwO1xuIH1cbiBcbkBAIC0yNDQxLDcgKzI4MzAsNyBAQCB6bDMwNzN4X2RwbGxfcmVnaXN0ZXIoc3RydWN0IHpsMzA3M3hfZHBsbCAqemxkcGxsKVxuIHZvaWRcbiB6bDMwNzN4X2RwbGxfdW5yZWdpc3RlcihzdHJ1Y3QgemwzMDczeF9kcGxsICp6bGRwbGwpXG4ge1xuLVx0LyogVW5yZWdpc3RlciBhbGwgcGlucyBhbmQgZHBsbCAqL1xuK1x0emwzMDczeF9kcGxsX3B0cF91bnJlZ2lzdGVyKHpsZHBsbCk7XG4gXHR6bDMwNzN4X2RwbGxfcGluc191bnJlZ2lzdGVyKHpsZHBsbCk7XG4gXHR6bDMwNzN4X2RwbGxfZGV2aWNlX3VucmVnaXN0ZXIoemxkcGxsKTtcbiB9XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9kcGxsL3psMzA3M3gvZHBsbC5oIGIvZHJpdmVycy9kcGxsL3psMzA3M3gvZHBsbC5oXG5pbmRleCBmYWViYzQwMmJhMWI3Li45OTMyMjFkYzYzMjQ5IDEwMDY0NFxuLS0tIGEvZHJpdmVycy9kcGxsL3psMzA3M3gvZHBsbC5oXG4rKysgYi9kcml2ZXJzL2RwbGwvemwzMDczeC9kcGxsLmhcbkBAIC01LDYgKzUsNyBAQFxuIFxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2RwbGwuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2xpc3QuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L3B0cF9jbG9ja19rZXJuZWwuaFx1MDAzZVxuIFxuICNpbmNsdWRlIFwiY29yZS5oXCJcbiBcbkBAIC0yMiw2ICsyMyw4IEBAXG4gICogQHR5cGU6IERQTEwgdHlwZSAoUFBTIG9yIEVFQylcbiAgKiBAbG9ja19zdGF0dXM6IGxhc3Qgc2F2ZWQgRFBMTCBsb2NrIHN0YXR1c1xuICAqIEBwaW5zOiBsaXN0IG9mIHBpbnNcbisgKiBAcHRwX2luZm86IFBUUCBjbG9jayBpbmZvXG4rICogQHB0cF9jbG9jazogcmVnaXN0ZXJlZCBQVFAgY2xvY2sgKG9yIE5VTEwpXG4gICovXG4gc3RydWN0IHpsMzA3M3hfZHBsbCB7XG4gXHRzdHJ1Y3QgbGlzdF9oZWFkXHRcdGxpc3Q7XG5AQCAtMzYsNiArMzksOCBAQCBzdHJ1Y3QgemwzMDczeF9kcGxsIHtcbiBcdGVudW0gZHBsbF90eXBlXHRcdFx0dHlwZTtcbiBcdGVudW0gZHBsbF9sb2NrX3N0YXR1c1x0XHRsb2NrX3N0YXR1cztcbiBcdHN0cnVjdCBsaXN0X2hlYWRcdFx0cGlucztcbitcdHN0cnVjdCBwdHBfY2xvY2tfaW5mb1x0XHRwdHBfaW5mbztcbitcdHN0cnVjdCBwdHBfY2xvY2tcdFx0KnB0cF9jbG9jaztcbiB9O1xuIFxuIHN0cnVjdCB6bDMwNzN4X2RwbGwgKnpsMzA3M3hfZHBsbF9hbGxvYyhzdHJ1Y3QgemwzMDczeF9kZXYgKnpsZGV2LCB1OCBjaCk7XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9kcGxsL3psMzA3M3gvcmVncy5oIGIvZHJpdmVycy9kcGxsL3psMzA3M3gvcmVncy5oXG5pbmRleCBiNzBlYWQ3ZDQ0OTViLi5mM2E1ZTEyMTVhYTM2IDEwMDY0NFxuLS0tIGEvZHJpdmVycy9kcGxsL3psMzA3M3gvcmVncy5oXG4rKysgYi9kcml2ZXJzL2RwbGwvemwzMDczeC9yZWdzLmhcbkBAIC0xNzksNiArMTc5LDIwIEBAXG4gI2RlZmluZSBaTF9EUExMX0RGX1JFQURfQ01EXHRcdFx0R0VOTUFTSygyLCAwKVxuICNkZWZpbmUgWkxfRFBMTF9ERl9SRUFEX0NNRF9BQ0NfSVx0XHQ0XG4gXG4rI2RlZmluZSBaTF9SRUdfRFBMTF9USUVfQ1RSTFx0XHRcdFpMX1JFRyg1LCAweDMwLCAxKVxuKyNkZWZpbmUgWkxfRFBMTF9USUVfQ1RSTF9PUFx0XHRcdEdFTk1BU0soMiwgMClcbisjZGVmaW5lIFpMX0RQTExfVElFX0NUUkxfT1BfV1JcdFx0XHQ0XG4rXG4rI2RlZmluZSBaTF9SRUdfRFBMTF9USUVfQ1RSTF9NQVNLXHRcdFpMX1JFRyg1LCAweDMxLCAxKVxuK1xuKyNkZWZpbmUgWkxfUkVHX0RQTExfVE9EX0NUUkwoX2lkeClcdFx0XHRcdFx0XFxcbitcdFpMX1JFR19JRFgoX2lkeCwgNSwgMHgzOCwgMSwgWkwzMDczWF9NQVhfQ0hBTk5FTFMsIDEpXG4rI2RlZmluZSBaTF9EUExMX1RPRF9DVFJMX1NFTVx0XHRcdEJJVCg0KVxuKyNkZWZpbmUgWkxfRFBMTF9UT0RfQ1RSTF9DTURcdFx0XHRHRU5NQVNLKDMsIDApXG4rI2RlZmluZSBaTF9EUExMX1RPRF9DVFJMX0NNRF9XUl9ORVhUXzFIWlx0MVxuKyNkZWZpbmUgWkxfRFBMTF9UT0RfQ1RSTF9DTURfUkRfQ1VSUkVOVFx0XHQ4XG4rI2RlZmluZSBaTF9EUExMX1RPRF9DVFJMX0NNRF9SRF9ORVhUXzFIWlx0OVxuK1xuICNkZWZpbmUgWkxfUkVHX0RQTExfTUVBU19DVFJMXHRcdFx0WkxfUkVHKDUsIDB4NTAsIDEpXG4gI2RlZmluZSBaTF9EUExMX01FQVNfQ1RSTF9FTlx0XHRcdEJJVCgwKVxuICNkZWZpbmUgWkxfRFBMTF9NRUFTX0NUUkxfQVZHX0ZBQ1RPUlx0XHRHRU5NQVNLKDcsIDQpXG5AQCAtMTkzLDYgKzIwNyw5IEBAXG4gXG4gLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcbiAgKiBSZWdpc3RlciBQYWdlcyA2LTcsIERQTEwgRGF0YVxuKyAqXG4rICogUGVyLWNoYW5uZWwgcmVnaXN0ZXJzIHdpdGggc3RyaWRlIDB4MjAuIENoYW5uZWxzIDAtMyByZXNpZGUgb24gcGFnZSA2LFxuKyAqIGNoYW5uZWwgNCBvbiBwYWdlIDcuXG4gICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXG4gXG4gI2RlZmluZSBaTF9SRUdfRFBMTF9ERl9PRkZTRVRfMDMoX2lkeClcdFx0XHRcdFx0XFxcbkBAIC0yMDIsNiArMjE5LDI0IEBAXG4gXHQoKF9pZHgpIFx1MDAzYyA0ID8gWkxfUkVHX0RQTExfREZfT0ZGU0VUXzAzKF9pZHgpIDogWkxfUkVHX0RQTExfREZfT0ZGU0VUXzQpXG4gI2RlZmluZSBaTF9EUExMX0RGX09GRlNFVF9VTktOT1dOXHRTNjRfTUlOXG4gXG4rI2RlZmluZSBaTF9SRUdfRFBMTF9USUVfREFUQV8wMyhfaWR4KVx0XHRcdFx0XHRcXFxuK1x0WkxfUkVHX0lEWChfaWR4LCA2LCAweDBDLCA2LCA0LCAweDIwKVxuKyNkZWZpbmUgWkxfUkVHX0RQTExfVElFX0RBVEFfNFx0XHRcdFpMX1JFRyg3LCAweDBDLCA2KVxuKyNkZWZpbmUgWkxfUkVHX0RQTExfVElFX0RBVEEoX2lkeClcdFx0XHRcdFx0XFxcbitcdCgoX2lkeCkgXHUwMDNjIDQgPyBaTF9SRUdfRFBMTF9USUVfREFUQV8wMyhfaWR4KSA6IFpMX1JFR19EUExMX1RJRV9EQVRBXzQpXG4rXG4rI2RlZmluZSBaTF9SRUdfRFBMTF9UT0RfU0VDXzAzKF9pZHgpXHRcdFx0XHRcdFxcXG4rXHRaTF9SRUdfSURYKF9pZHgsIDYsIDB4MTIsIDYsIDQsIDB4MjApXG4rI2RlZmluZSBaTF9SRUdfRFBMTF9UT0RfU0VDXzRcdFx0XHRaTF9SRUcoNywgMHgxMiwgNilcbisjZGVmaW5lIFpMX1JFR19EUExMX1RPRF9TRUMoX2lkeClcdFx0XHRcdFx0XFxcbitcdCgoX2lkeCkgXHUwMDNjIDQgPyBaTF9SRUdfRFBMTF9UT0RfU0VDXzAzKF9pZHgpIDogWkxfUkVHX0RQTExfVE9EX1NFQ180KVxuK1xuKyNkZWZpbmUgWkxfUkVHX0RQTExfVE9EX05TXzAzKF9pZHgpXHRcdFx0XHRcdFxcXG4rXHRaTF9SRUdfSURYKF9pZHgsIDYsIDB4MTgsIDQsIDQsIDB4MjApXG4rI2RlZmluZSBaTF9SRUdfRFBMTF9UT0RfTlNfNFx0XHRcdFpMX1JFRyg3LCAweDE4LCA0KVxuKyNkZWZpbmUgWkxfUkVHX0RQTExfVE9EX05TKF9pZHgpXHRcdFx0XHRcdFxcXG4rXHQoKF9pZHgpIFx1MDAzYyA0ID8gWkxfUkVHX0RQTExfVE9EX05TXzAzKF9pZHgpIDogWkxfUkVHX0RQTExfVE9EX05TXzQpXG4rXG4gLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXG4gICogUmVnaXN0ZXIgUGFnZSA5LCBTeW50aCBhbmQgT3V0cHV0XG4gICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xuQEAgLTIyMSw2ICsyNTYsMjMgQEBcbiAjZGVmaW5lIFpMX09VVFBVVF9DVFJMX0VOXHRcdFx0QklUKDApXG4gI2RlZmluZSBaTF9PVVRQVVRfQ1RSTF9TWU5USF9TRUxcdFx0R0VOTUFTSyg2LCA0KVxuIFxuKyNkZWZpbmUgWkxfUkVHX09VVFBVVF9TVEVQX1RJTUVfTUFTS1x0XHRaTF9SRUcoOSwgMHgzNiwgMilcbitcbisjZGVmaW5lIFpMX1JFR19PVVRQVVRfUEhBU0VfU1RFUF9DVFJMXHRcdFpMX1JFRyg5LCAweDM4LCAxKVxuKyNkZWZpbmUgWkxfT1VUUFVUX1BIQVNFX1NURVBfQ1RSTF9EUExMXHRcdEdFTk1BU0soNiwgNClcbisjZGVmaW5lIFpMX09VVFBVVF9QSEFTRV9TVEVQX0NUUkxfVE9EX1NURVBcdEJJVCgzKVxuKyNkZWZpbmUgWkxfT1VUUFVUX1BIQVNFX1NURVBfQ1RSTF9PUFx0XHRHRU5NQVNLKDEsIDApXG4rI2RlZmluZSBaTF9PVVRQVVRfUEhBU0VfU1RFUF9DVFJMX09QX05PTkVcdDBcbisjZGVmaW5lIFpMX09VVFBVVF9QSEFTRV9TVEVQX0NUUkxfT1BfUkVTRVRcdDFcbisjZGVmaW5lIFpMX09VVFBVVF9QSEFTRV9TVEVQX0NUUkxfT1BfUkVBRFx0MlxuKyNkZWZpbmUgWkxfT1VUUFVUX1BIQVNFX1NURVBfQ1RSTF9PUF9XUklURVx0M1xuK1xuKyNkZWZpbmUgWkxfUkVHX09VVFBVVF9QSEFTRV9TVEVQX05VTUJFUlx0XHRaTF9SRUcoOSwgMHgzOSwgMSlcbitcbisjZGVmaW5lIFpMX1JFR19PVVRQVVRfUEhBU0VfU1RFUF9NQVNLXHRcdFpMX1JFRyg5LCAweDNhLCAyKVxuK1xuKyNkZWZpbmUgWkxfUkVHX09VVFBVVF9QSEFTRV9TVEVQX0RBVEFcdFx0WkxfUkVHKDksIDB4M2MsIDQpXG4rXG4gLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcbiAgKiBSZWdpc3RlciBQYWdlIDEwLCBSZWYgTWFpbGJveFxuICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTFUMTQ6MDI6MjUuMjk0NzIxNDM1WiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTA3NzI2MTA5MDMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqUmVhY2hpbmcgdGhlIFBUUCBDbG9jayBpbiBRRU1VKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBmb3IgdGhlIGB6bDMwNzN4YCBEUExMIGRyaXZlciwgYW5kIGl0J3MgYWRkaW5nIFBUUCBjbG9jayBzdXBwb3J0LiBJdCBzZWVtcyBwcmV0dHkgc3RyYWlnaHRmb3J3YXJkOiBpdCBtb2RpZmllcyBgS2NvbmZpZ2AgdG8gYWRkIGEgZGVwZW5kZW5jeSBvbiBgUFRQXzE1ODhfQ0xPQ0tgLCBhbmQgdGhlbiBhZGRzIGFsbCB0aGVzZSBQVFAtcmVsYXRlZCBmdW5jdGlvbnM6IHJlYWQvd3JpdGUvYWRqdXN0IFRPRCwgc2V0IGZyZXF1ZW5jeSBvZmZzZXRzLCBjb250cm9sIHRpZSBhbmQgcGhhc2Ugc3RlcHMsIGFuZCBmaW5hbGx5IGl0IHJlZ2lzdGVycyB0aGUgUFRQIGNsb2NrIGl0c2VsZi4gVGhlIHN0YW5kYXJkIG9wZXJhdGlvbnMgbGlrZSBnZXR0aW5nIGFuZCBzZXR0aW5nIHRoZSB0aW1lLCBhbmQgYWRqdXN0aW5nIHRpbWUvcGhhc2UgYXJlIGFsc28gdGhlcmUuXG5cbk15IGltbWVkaWF0ZSBxdWVzdGlvbiwgYXMgYWx3YXlzLCBpczogY2FuIEkgYWN0dWFsbHkgKnJlYWNoKiB0aGlzIGluIFFFTVU/IFRoaXMgZHJpdmVyIGlzIGZvciBhIE1pY3JvY2hpcCBBenVyaXRlIERQTEwvUFRQL1N5bmNFIGRldmljZSwgYW5kIEkgcmVjYWxsIGl0IGhhcyBib3RoIEkyQyBhbmQgU1BJIGJ1cyBpbXBsZW1lbnRhdGlvbnMuIFNvLCB0aGF0J3MgZ29vZDsgSTJDIGFuZCBTUEkgZGV2aWNlcyBhcmUgKnVzdWFsbHkqIHJlYWNoYWJsZSBpbiBhIHZpcnR1YWxpemVkIGVudmlyb25tZW50LiBJIGNhbiB0eXBpY2FsbHkgaW5zdGFudGlhdGUgdGhlbSB0aHJvdWdoIHN5emthbGxlcidzIHBzZXVkby1zeXNjYWxscyBvciB2aWEgc3lzZnMvZGV2aWNlIHRyZWUsIG9yIGJ5IGRpcmVjdGx5IGZ1enppbmcgdGhlIEkyQyBvciBTUEkgaW50ZXJmYWNlcy5cblxuV2FpdCwgc3l6a2FsbGVyIGRvZXMgc3VwcG9ydCBJMkMgYW5kIFNQSSBmdXp6aW5nLiBJIG5lZWQgdG8gc2VlIGlmIHRoZXJlIGFyZSBhbnkgc3BlY2lmaWMgc3l6a2FsbGVyIGRlc2NyaXB0aW9ucyBmb3IgYHpsMzA3M3hgLCBidXQgaWYgbm90LCBJIGNhbiBqdXN0IHJlbHkgb24gdGhlIGdlbmVyaWMgSTJDL1NQSSBmdXp6aW5nIG1lY2hhbmlzbXMuIEkgdGhpbmsgdGhlcmUgaXMgYGkyY19uZXdfY2xpZW50X2RldmljZWAgaW4ga2VybmVsLlxuXG5IYW5nIG9u4oCmIHRoZSBwcm9tcHQgc3BlY2lmaWVzIGNvZGUgdW5yZWFjaGFibGUgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzLiBJdCBtZW50aW9ucyBQQ0llIGhhcmR3YXJlLCB3aGljaCBpcyB1c3VhbGx5IGEgcGFpbi4gQnV0IHRoaXMgaXMgYW4gSTJDL1NQSSBkcml2ZXIhIFRoYXQncyBnb29kLCBiZWNhdXNlIEkyQyBhbmQgU1BJIGFyZSBkZWZpbml0ZWx5IGVtdWxhdGFibGUgb3IgZnV6emVhYmxlIGluIFFFTVUuIFN5emthbGxlciBoYXMgc3R1ZmYgbGlrZSBgc3l6X2kyY19kZXZpY2VgIG9yIGNhbiBmdXp6IHRocm91Z2ggYC9kZXYvaTJjLSpgIGFuZCBgL2Rldi9zcGlkZXYqYCwgc28gdGhhdCdzIGFsbCBnb29kLlxuXG5UaGUga2V5IHF1ZXN0aW9uIGlzLCBob3cgaXMgdGhpcyBkcml2ZXIgcHJvYmVkPyBJIG5lZWQgdG8gY2hlY2sgaG93IHRoZSBkcml2ZXIgaXMgcmVnaXN0ZXJlZCB3aXRoIHRoZSBJMkMgb3IgU1BJIHN1YnN5c3RlbS4gVGhhdCdzIHRoZSBjcml0aWNhbCBzdGVwIHRvIG1ha2Ugc3VyZSBJIGNhbiBldmVuIGdldCB0byB0aGUgUFRQIGZ1bmN0aW9ucy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTgyMzEsIk91dHB1dFRva2VucyI6MjYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo3ODgsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMVQxNDowMjozNi4wNjczMzU3OThaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTcwNjc2OTE1MywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ6bDMwNzN4X2kyY19wcm9iZVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL2RwbGwvemwzMDczeC9pMmMuYy0xMC1cXG5kcml2ZXJzL2RwbGwvemwzMDczeC9pMmMuYzoxMTpzdGF0aWMgaW50IHpsMzA3M3hfaTJjX3Byb2JlKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQpXFxuZHJpdmVycy9kcGxsL3psMzA3M3gvaTJjLmMtMTIte1xcbi0tXFxuZHJpdmVycy9kcGxsL3psMzA3M3gvaTJjLmM9NDg9c3RhdGljIHN0cnVjdCBpMmNfZHJpdmVyIHpsMzA3M3hfaTJjX2RyaXZlciA9IHtcXG4tLVxcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2kyYy5jLTUyLVxcdH0sXFxuZHJpdmVycy9kcGxsL3psMzA3M3gvaTJjLmM6NTM6XFx0LnByb2JlID0gemwzMDczeF9pMmNfcHJvYmUsXFxuZHJpdmVycy9kcGxsL3psMzA3M3gvaTJjLmMtNTQtXFx0LmlkX3RhYmxlID0gemwzMDczeF9pMmNfaWQsXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTExVDE0OjAyOjM3Ljc3NDExNTkxMVoiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM3MTUyOTc1NzMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkludmVzdGlnYXRpbmcgUG90ZW50aWFsIERhdGEgU2hlZXQgTWlzbWF0Y2hlcyoqXG5cblJpZ2h0LCBsZXQncyBnZXQgZG93biB0byBicmFzcyB0YWNrcy4gRmlyc3QsIG15IGltbWVkaWF0ZSBjb25jZXJuIGlzIGEgcG90ZW50aWFsIG1pc21hdGNoIGJldHdlZW4gdGhlIGRhdGEgc2hlZXQgYW5kIHRoZSBhY3R1YWwgaGFyZHdhcmUuIEkgbmVlZCB0byBxdWlja2x5IGRldGVybWluZSBpZiB0aGVyZeKAmXMgYSBjb21wcmVoZW5zaXZlIFwiT0YgTWF0Y2ggVGFibGVcIiBvciBhbiBcIkkyQyBJRCBUYWJsZVwiIHRoYXQgY2xlYXJseSBvdXRsaW5lcyB0aGUgZXhwZWN0ZWQgZGV2aWNlIGlkZW50aXRpZXMgYW5kIHRoZWlyIGNvcnJlc3BvbmRpbmcgT3BlbiBGaXJtd2FyZSAoT0YpIGJpbmRpbmdzIG9yIEkyQyBhZGRyZXNzZXMuIFRoaXMgaXMgc3RhbmRhcmQgcHJlbGltaW5hcnkgZHVlIGRpbGlnZW5jZS4gQSBjb21wcmVoZW5zaXZlIHRhYmxlIHN0cmVhbWxpbmVzIGFueSBkZWJ1Z2dpbmcgZWZmb3J0LCBvZmZlcmluZyBhIHNpbmdsZSBzb3VyY2Ugb2YgdHJ1dGggZm9yIGRldmljZSBpZGVudGlmaWNhdGlvbiBhbmQgcmVzb3VyY2UgYWxsb2NhdGlvbi4gSWYgaXQncyB0aGVyZSwgZ3JlYXQhIEl04oCZbGwgc2F2ZSBzb21lIHRpbWUuIElmIG5vdCwgaXQgbWVhbnMgSSBuZWVkIHRvIG1hbnVhbGx5IGNvcnJlbGF0ZSBkYXRhIHNoZWV0IGluZm9ybWF0aW9uIHRvIGFjdHVhbCBvbi1ib2FyZCByZXNwb25zZXMg4oCTIGFuZCB0aGF04oCZbGwgYWRkIGNvbXBsZXhpdHkgdG8gdGhlIHByb2Nlc3MuIFRpbWUgdG8gZGlnIGluIGFuZCBmaW5kIHRob3NlIGFuc3dlcnMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE5NzgzLCJPdXRwdXRUb2tlbnMiOjI2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTFUMTQ6MDI6NDEuNDg5NDIwNzM0WiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE2MTA3MDQwMDQsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiemwzMDczeF9pMmNfaWRcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9kcGxsL3psMzA3M3gvaTJjLmM9MTE9c3RhdGljIGludCB6bDMwNzN4X2kyY19wcm9iZShzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50KVxcbi0tXFxuZHJpdmVycy9kcGxsL3psMzA3M3gvaTJjLmMtMjctXFxuZHJpdmVycy9kcGxsL3psMzA3M3gvaTJjLmM6Mjg6c3RhdGljIGNvbnN0IHN0cnVjdCBpMmNfZGV2aWNlX2lkIHpsMzA3M3hfaTJjX2lkW10gPSB7XFxuZHJpdmVycy9kcGxsL3psMzA3M3gvaTJjLmMtMjktXFx0eyAubmFtZSA9IFxcXCJ6bDMwNzMxXFxcIiB9LFxcbi0tXFxuZHJpdmVycy9kcGxsL3psMzA3M3gvaTJjLmMtMzUtfTtcXG5kcml2ZXJzL2RwbGwvemwzMDczeC9pMmMuYzozNjpNT0RVTEVfREVWSUNFX1RBQkxFKGkyYywgemwzMDczeF9pMmNfaWQpO1xcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2kyYy5jLTM3LVxcbi0tXFxuZHJpdmVycy9kcGxsL3psMzA3M3gvaTJjLmM9NDg9c3RhdGljIHN0cnVjdCBpMmNfZHJpdmVyIHpsMzA3M3hfaTJjX2RyaXZlciA9IHtcXG4tLVxcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2kyYy5jLTUzLVxcdC5wcm9iZSA9IHpsMzA3M3hfaTJjX3Byb2JlLFxcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2kyYy5jOjU0OlxcdC5pZF90YWJsZSA9IHpsMzA3M3hfaTJjX2lkLFxcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2kyYy5jLTU1LX07XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTExVDE0OjAyOjQzLjEwMDEzNDA3OFoiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjgyODkwMTM5ODgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBJbnRlZ3JhdGlvbiBvZiBQVFAgQ2xvY2sgU3VwcG9ydCBpbiB0aGUgWkwzMDczWCBEcml2ZXIqKlxuXG5Pa2F5LCBzbyBJIHNlZSB0aGF0IHRoaXMgcGF0Y2ggYWRkcyBQVFAgY2xvY2sgZnVuY3Rpb25hbGl0eSB0byB0aGUgWkwzMDczWCBkcml2ZXIuIFRoZSBrZXkgaGVyZSBpcyB0aGF0IEkyQyBkZXZpY2VzIGNhbiBiZSBjcmVhdGVkIGluIHVzZXJzcGFjZSB1c2luZyBgL3N5cy9idXMvaTJjL2RldmljZXMvaTJjLSovbmV3X2RldmljZWAsIGFsbG93aW5nIGZvciBwcm9iaW5nIHRoZSBkcml2ZXIgd2l0aGluIFFFTVUsIHdoaWNoIGlzIGdyZWF0IGZvciB0ZXN0aW5nLiBPbmNlIHByb2JlZCwgdGhlIGRyaXZlciByZWdpc3RlcnMgYSBQVFAgY2xvY2ssIHdoaWNoIGlzIGNydWNpYWwuIFRoZXNlIFBUUCBjbG9ja3MgYXJlIHRoZW4gZXhwb3NlZCB2aWEgYC9kZXYvcHRwKmAgYW5kIGNvbnRyb2xsZWQgdmlhIHN0YW5kYXJkIGBpb2N0bGBzIGxpa2UgYFBUUF9DTE9DS19HRVRDQVBTYCwgYFBUUF9FWFRUU19SRVFVRVNUYCwgYFBUUF9QRVJPVVRfUkVRVUVTVGAsIGFuZCB0aGUgbGlrZS5cblxuVGhlIHBhdGNoIGl0c2VsZiBzcGVjaWZpY2FsbHkgaW1wbGVtZW50cyB0aGVzZSB1c2VyLWFjY2Vzc2libGUgZnVuY3Rpb25zOiBgZ2V0dGltZXg2NGAsIGBzZXR0aW1lNjRgLCBgYWRqdGltZWAsIGBhZGpmaW5lYCwgYW5kIGBhZGpwaGFzZWAuIFRoZXNlIG1hcCBkaXJlY3RseSB0byBQVFAgYGlvY3RsYHMuIFdlIGhhdmUgdG8gbWFrZSBzdXJlIHRoZSB1c2VyIHNwYWNlIGFwcGxpY2F0aW9ucyBhcmUgY29uZmlndXJlZCB0byB1c2UgdGhlc2UgY29tbWFuZHMuXG5cbkxvb2tpbmcgYXQgdGhlIHNwZWNpZmljIGZ1bmN0aW9ucyBhZGRlZCwgbmFtZWx5IGB6bDMwNzN4X2NoYW5fdG9kX3JlYWRgLCBgemwzMDczeF9jaGFuX3RvZF93cml0ZWAsIGB6bDMwNzN4X2NoYW5fdG9kX2FkanVzdGAsIGB6bDMwNzN4X2NoYW5fZGZfb2Zmc2V0X3NldGAsIGB6bDMwNzN4X2NoYW5fdGllX3dyaXRlYCwgYHpsMzA3M3hfY2hhbl9waGFzZV9zdGVwYCwgYHpsMzA3M3hfZHBsbF9wdHBfZ2V0dGltZXg2NGAsIGB6bDMwNzN4X2RwbGxfcHRwX3NldHRpbWU2NGAsIGB6bDMwNzN4X2RwbGxfcHRwX2FkanRpbWVgLCBgemwzMDczeF9kcGxsX3B0cF9hZGpmaW5lYCwgYW5kIGB6bDMwNzN4X2RwbGxfcHRwX2FkanBoYXNlYCwgdGhleSBhcmUgY2xlYXJseSBwYXJ0IG9mIHRoZSBQVFAgY2xvY2sgaW50ZXJmYWNlLiBUaGlzIGNvbmZpcm1zIHRoZSBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbC5cblxuVGhlIGRyaXZlciBpcyBgWkwzMDczWGAsIGFuZCBpdCByZWxpZXMgb24gYm90aCBgTkVUYCBhbmQgYFBUUF8xNTg4X0NMT0NLYC4gVGhlIGNvbmZpZyBvcHRpb25zIEkgbmVlZCB0byB2ZXJpZnkgYXJlOiBgWkwzMDczWGAsIGBaTDMwNzNYX0kyQ2AsIGBaTDMwNzNYX1NQSWAsIGFuZCBgUFRQXzE1ODhfQ0xPQ0tgLiBMZXQgbWUganVzdCBkb3VibGUtY2hlY2sgdGhhdCBgWkwzMDczWGAgY29ycmVjdGx5IGRlcGVuZHMgb24gYE5FVGAgYW5kIGBQVFBfMTU4OF9DTE9DS2AuIFRpbWUgdG8gY2hlY2sgYGRyaXZlcnMvZHBsbC96bDMwNzN4L0tjb25maWdgIGZvciB0aGUgZGVwZW5kZW5jaWVzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMDQzNCwiT3V0cHV0VG9rZW5zIjo0MSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjU1MiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xMVQxNDowMjo1MS4zODkxNTAwNTZaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNDc5MzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9kcGxsL3psMzA3M3gvS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiAxLFxuICBcIkxpbmVDb3VudFwiOiA1MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgICAxOlxcdCMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxcbiAgIDI6XFx0XFxuICAgMzpcXHRjb25maWcgWkwzMDczWFxcbiAgIDQ6XFx0XFx0dHJpc3RhdGUgXFxcIk1pY3JvY2hpcCBBenVyaXRlIERQTEwvUFRQL1N5bmNFIGRldmljZXNcXFwiIGlmIENPTVBJTEVfVEVTVFxcbiAgIDU6XFx0XFx0ZGVwZW5kcyBvbiBORVQgXFx1MDAyNlxcdTAwMjYgUFRQXzE1ODhfQ0xPQ0tcXG4gICA2OlxcdFxcdHNlbGVjdCBEUExMXFxuICAgNzpcXHRcXHRzZWxlY3QgTkVUX0RFVkxJTktcXG4gICA4OlxcdFxcdHNlbGVjdCBSRUdNQVBcXG4gICA5OlxcdFxcdGhlbHBcXG4gIDEwOlxcdFxcdCAgVGhpcyBkcml2ZXIgc3VwcG9ydHMgTWljcm9jaGlwIEF6dXJpdGUgZmFtaWx5IERQTEwvUFRQL1N5bmNFXFxuICAxMTpcXHRcXHQgIGRldmljZXMgdGhhdCBzdXBwb3J0IHVwIHRvIDUgaW5kZXBlbmRlbnQgRFBMTCBjaGFubmVscyxcXG4gIDEyOlxcdFxcdCAgMTAgaW5wdXQgcGlucyBhbmQgdXAgdG8gMjAgb3V0cHV0IHBpbnMuXFxuICAxMzpcXHRcXG4gIDE0OlxcdFxcdCAgVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZS4gVGhlIG1vZHVsZVxcbiAgMTU6XFx0XFx0ICB3aWxsIGJlIGNhbGxlZCB6bDMwNzN4LlxcbiAgMTY6XFx0XFxuICAxNzpcXHRjb25maWcgWkwzMDczWF9JMkNcXG4gIDE4OlxcdFxcdHRyaXN0YXRlIFxcXCJJMkMgYnVzIGltcGxlbWVudGF0aW9uIGZvciBNaWNyb2NoaXAgQXp1cml0ZSBkZXZpY2VzXFxcIlxcbiAgMTk6XFx0XFx0ZGVwZW5kcyBvbiBJMkMgXFx1MDAyNlxcdTAwMjYgTkVUIFxcdTAwMjZcXHUwMDI2IFBUUF8xNTg4X0NMT0NLXFxuICAyMDpcXHRcXHRzZWxlY3QgUkVHTUFQX0kyQ1xcbiAgMjE6XFx0XFx0c2VsZWN0IFpMMzA3M1hcXG4gIDIyOlxcdFxcdGhlbHBcXG4gIDIzOlxcdFxcdCAgVGhpcyBpcyBJMkMgYnVzIGltcGxlbWVudGF0aW9uIGZvciBNaWNyb2NoaXAgQXp1cml0ZSBEUExML1BUUC9TeW5jRVxcbiAgMjQ6XFx0XFx0ICBkZXZpY2VzLlxcbiAgMjU6XFx0XFxuICAyNjpcXHRcXHQgIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZSBtb2R1bGUgd2lsbFxcbiAgMjc6XFx0XFx0ICBiZSBjYWxsZWQgemwzMDczeF9pMmMuXFxuICAyODpcXHRcXG4gIDI5OlxcdGNvbmZpZyBaTDMwNzNYX1NQSVxcbiAgMzA6XFx0XFx0dHJpc3RhdGUgXFxcIlNQSSBidXMgaW1wbGVtZW50YXRpb24gZm9yIE1pY3JvY2hpcCBBenVyaXRlIGRldmljZXNcXFwiXFxuICAzMTpcXHRcXHRkZXBlbmRzIG9uIE5FVCBcXHUwMDI2XFx1MDAyNiBTUEkgXFx1MDAyNlxcdTAwMjYgUFRQXzE1ODhfQ0xPQ0tcXG4gIDMyOlxcdFxcdHNlbGVjdCBSRUdNQVBfU1BJXFxuICAzMzpcXHRcXHRzZWxlY3QgWkwzMDczWFxcbiAgMzQ6XFx0XFx0aGVscFxcbiAgMzU6XFx0XFx0ICBUaGlzIGlzIFNQSSBidXMgaW1wbGVtZW50YXRpb24gZm9yIE1pY3JvY2hpcCBBenVyaXRlIERQTEwvUFRQL1N5bmNFXFxuICAzNjpcXHRcXHQgIGRldmljZXMuXFxuICAzNzpcXHRcXG4gIDM4OlxcdFxcdCAgVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlIG1vZHVsZSB3aWxsXFxuICAzOTpcXHRcXHQgIGJlIGNhbGxlZCB6bDMwNzN4X3NwaS5cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTFUMTQ6MDI6NTEuMzg5MzI1NDQ2WiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTc0MjIzNTU4OTcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBNaWNyb2NoaXAgQXp1cml0ZSBEcml2ZXIgQ29uZmlndXJhdGlvbiBhbmQgQVBJKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBGaXJzdCwgSSBuZWVkIHRvIGZpZ3VyZSBvdXQgd2hpY2gga2VybmVsIGNvbmZpZ3VyYXRpb25zIGFyZSBlc3NlbnRpYWwgZm9yIHRoaXMgQXp1cml0ZSBEUExML1BUUC9TeW5jRSBkZXZpY2Ugc3VwcG9ydC4gSW5pdGlhbGx5LCBJIHRob3VnaHQgaXQgd2FzIGEgc3RyYWlnaHRmb3J3YXJkIGxpc3Q6IGBaTDMwNzNYYCwgYFpMMzA3M1hfSTJDYCwgYFpMMzA3M1hfU1BJYCwgYFBUUF8xNTg4X0NMT0NLYCwgYERQTExgLCBgTkVUX0RFVkxJTktgLCBgUkVHTUFQYCwgYFJFR01BUF9JMkNgLCBhbmQgYFJFR01BUF9TUElgLiBCdXQgd2FpdCwgYFpMMzA3M1hgIGlzIGFjdHVhbGx5IHNlbGVjdGVkIGJ5IGJvdGggYFpMMzA3M1hfSTJDYCBhbmQgYFpMMzA3M1hfU1BJYC4gU28sIGRpcmVjdGx5IGVuYWJsaW5nIGBaTDMwNzNYYCBtaWdodCBiZSB1bm5lY2Vzc2FyeTsgZW5hYmxpbmcgdGhlIEkyQyBhbmQgU1BJIGNvbmZpZ3VyYXRpb25zIHNob3VsZCBzdWZmaWNlLCByaWdodD9cblxuVGhlbiBJIG5vdGljZSBgWkwzMDczWGAgaXMgdHJpc3RhdGUgYW5kIG9ubHkgZGlyZWN0bHkgZW5hYmxlZCBpZiBgQ09NUElMRV9URVNUYCBpcyBzZXQuIEdpdmVuIHRoaXMsIGRpcmVjdGx5IGVuYWJsaW5nIGBaTDMwNzNYYCBzZWVtcyB0byBiZSBvZmYgdGhlIHRhYmxlLCBhcyBgWkwzMDczWF9JMkNgIGFscmVhZHkgc2VsZWN0cyBpdCBhbmQgSSB3YW50IHRvIGF2b2lkIHRoZSBgQ09NUElMRV9URVNUYCByZXF1aXJlbWVudC4gU28sIEkgd2lsbCBmb2N1cyBvbiBlbmFibGluZyBgWkwzMDczWF9JMkNgIGFuZCBgWkwzMDczWF9TUElgLiBBbmQsIG9mIGNvdXJzZSwgdGhlIGBQVFBfMTU4OF9DTE9DS2AgaXMgYSBtdXN0LWhhdmUuXG5cbk5leHQsIEkgbmVlZCB0byBpZGVudGlmeSB0aGUgY3J1Y2lhbCBBUEkgZnVuY3Rpb25zIEkgc2hvdWxkIGZvY3VzIG9uLiBJJ3ZlIGdvdCBhIGxpc3QgaGVyZTogYHpsMzA3M3hfY2hhbl90b2RfcmVhZGAsIGB6bDMwNzN4X2NoYW5fdG9kX3dyaXRlYCwgYHpsMzA3M3hfY2hhbl90b2RfYWRqdXN0YCwgYHpsMzA3M3hfY2hhbl9kZl9vZmZzZXRfc2V0YCwgYHpsMzA3M3hfY2hhbl90aWVfd3JpdGVgLCBgemwzMDczeF9jaGFuX3BoYXNlX3N0ZXBgLCBgemwzMDczeF9kcGxsX3B0cF9nZXR0aW1leDY0YCwgYHpsMzA3M3hfZHBsbF9wdHBfc2V0dGltZTY0YCwgYHpsMzA3M3hfZHBsbF9wdHBfYWRqdGltZWAsIGB6bDMwNzN4X2RwbGxfcHRwX2FkamZpbmVgLCBhbmQgYHpsMzA3M3hfZHBsbF9wdHBfYWRqcGhhc2VgLlxuXG5JIG5lZWQgdG8gY29uZmlybSBpZiB0aGVzZSBmdW5jdGlvbnMgYXJlIHN0YXRpYyBvciBub3QuIEV4YW1pbmluZyB0aGVtLCBpdCB0dXJucyBvdXQgdGhhdCBgemwzMDczeF9jaGFuX3RvZF9yZWFkYCwgYHpsMzA3M3hfY2hhbl90b2Rfd3JpdGVgLCBgemwzMDczeF9jaGFuX3RvZF9hZGp1c3RgLCBgemwzMDczeF9jaGFuX2RmX29mZnNldF9zZXRgLCBgemwzMDczeF9jaGFuX3RpZV93cml0ZWAsIGFuZCBgemwzMDczeF9jaGFuX3BoYXNlX3N0ZXBgIGFyZSAqbm90KiBzdGF0aWMsIHdoaWxlIHRoZSBgemwzMDczeF9kcGxsXypgIGZ1bmN0aW9ucyBhcmUgYWxsIHN0YXRpYy5cblxuV2FpdCBhIG1pbnV0ZSwgc2luY2UgdGhlIGB6bDMwNzN4X2RwbGxfKmAgZnVuY3Rpb25zIGFyZSB1c2VkIGFzIGZ1bmN0aW9uIHBvaW50ZXJzIHdpdGhpbiBgcHRwX2Nsb2NrX2luZm9gLCB0aGV5ICpjYW5ub3QqIGJlIGlubGluZWQsIHNvIHRoZSBjb21waWxlciAqbXVzdCogaGF2ZSBnZW5lcmF0ZWQgaW5kaXZpZHVhbCBzeW1ib2xzIGZvciB0aGVzZSBmdW5jdGlvbnMuIFRoZXkgYXJlIGVudHJ5IHBvaW50cyBmb3IgUFRQIHN1YnN5c3RlbSwgc28gSSB3aWxsIGluY2x1ZGUgdGhlbS5cblxuU28sIHRoZSBkZWZpbml0aXZlIGxpc3Qgb2YgZnVuY3Rpb25zIEkgd2lsbCBpbmNsdWRlIGlzOiBgemwzMDczeF9jaGFuX3RvZF9yZWFkYCwgYHpsMzA3M3hfY2hhbl90b2Rfd3JpdGVgLCBgemwzMDczeF9jaGFuX3RvZF9hZGp1c3RgLCBgemwzMDczeF9jaGFuX2RmX29mZnNldF9zZXRgLCBgemwzMDczeF9jaGFuX3RpZV93cml0ZWAsIGB6bDMwNzN4X2NoYW5fcGhhc2Vfc3RlcGAsIGB6bDMwNzN4X2RwbGxfcHRwX2dldHRpbWV4NjRgLCBgemwzMDczeF9kcGxsX3B0cF9zZXR0aW1lNjRgLCBgemwzMDczeF9kcGxsX3B0cF9hZGp0aW1lYCwgYHpsMzA3M3hfZHBsbF9wdHBfYWRqZmluZWAsIGFuZCBgemwzMDczeF9kcGxsX3B0cF9hZGpwaGFzZWAuXG5cbk5vdywgcmVnYXJkaW5nIHRoZSBjb25maWd1cmF0aW9ucywgSSdtIGNvbmZpZGVudCBhYm91dDogYFpMMzA3M1hfSTJDYCwgYFpMMzA3M1hfU1BJYCwgYW5kIGBQVFBfMTU4OF9DTE9DS2AuXG5cbkknbGwgcXVpY2tseSBjaGVjayBmb3IgZGVwZW5kZW5jaWVzLiBgWkwzMDczWF9JMkNgIHJlcXVpcmVzIGBJMkNgLCBgTkVUYCwgYW5kIGBQVFBfMTU4OFxuXG4iLCJJbnB1dFRva2VucyI6MjIyMTYsIk91dHB1dFRva2VucyI6MzQzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTQ1OCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTExVDE0OjAzOjA4LjgxMTY4NTIzM1oiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjc5MTg4MjU5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJaTDMwNzNYX0kyQ1wiLFxuICAgIFwiWkwzMDczWF9TUElcIixcbiAgICBcIlBUUF8xNTg4X0NMT0NLXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiemwzMDczeF9jaGFuX3RvZF9yZWFkXCIsXG4gICAgXCJ6bDMwNzN4X2NoYW5fdG9kX3dyaXRlXCIsXG4gICAgXCJ6bDMwNzN4X2NoYW5fdG9kX2FkanVzdFwiLFxuICAgIFwiemwzMDczeF9jaGFuX2RmX29mZnNldF9zZXRcIixcbiAgICBcInpsMzA3M3hfY2hhbl90aWVfd3JpdGVcIixcbiAgICBcInpsMzA3M3hfY2hhbl9waGFzZV9zdGVwXCIsXG4gICAgXCJ6bDMwNzN4X2RwbGxfcHRwX2dldHRpbWV4NjRcIixcbiAgICBcInpsMzA3M3hfZHBsbF9wdHBfc2V0dGltZTY0XCIsXG4gICAgXCJ6bDMwNzN4X2RwbGxfcHRwX2FkanRpbWVcIixcbiAgICBcInpsMzA3M3hfZHBsbF9wdHBfYWRqZmluZVwiLFxuICAgIFwiemwzMDczeF9kcGxsX3B0cF9hZGpwaGFzZVwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHMgUFRQIGNsb2NrIHN1cHBvcnQgdG8gdGhlIE1pY3JvY2hpcCBBenVyaXRlIERQTEwgZHJpdmVyICh6bDMwNzN4KS4gSXQgaW1wbGVtZW50cyBQVFAgY2xvY2sgb3BlcmF0aW9ucyBsaWtlIGdldHRpbWV4NjQsIHNldHRpbWU2NCwgYWRqdGltZSwgYWRqZmluZSwgYW5kIGFkanBoYXNlLiBUaGUgZHJpdmVyIGNhbiBiZSBpbnN0YW50aWF0ZWQgdmlhIEkyQyBvciBTUEkgaW4gUUVNVSwgYW5kIHRoZSBQVFAgb3BlcmF0aW9ucyBhcmUgcmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlIHZpYSBQVFAgaW9jdGxzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIlpMMzA3M1hfSTJDXCIsXG4gICAgXCJaTDMwNzNYX1NQSVwiLFxuICAgIFwiUFRQXzE1ODhfQ0xPQ0tcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJ6bDMwNzN4X2NoYW5fdG9kX3JlYWRcIixcbiAgICBcInpsMzA3M3hfY2hhbl90b2Rfd3JpdGVcIixcbiAgICBcInpsMzA3M3hfY2hhbl90b2RfYWRqdXN0XCIsXG4gICAgXCJ6bDMwNzN4X2NoYW5fZGZfb2Zmc2V0X3NldFwiLFxuICAgIFwiemwzMDczeF9jaGFuX3RpZV93cml0ZVwiLFxuICAgIFwiemwzMDczeF9jaGFuX3BoYXNlX3N0ZXBcIixcbiAgICBcInpsMzA3M3hfZHBsbF9wdHBfZ2V0dGltZXg2NFwiLFxuICAgIFwiemwzMDczeF9kcGxsX3B0cF9zZXR0aW1lNjRcIixcbiAgICBcInpsMzA3M3hfZHBsbF9wdHBfYWRqdGltZVwiLFxuICAgIFwiemwzMDczeF9kcGxsX3B0cF9hZGpmaW5lXCIsXG4gICAgXCJ6bDMwNzN4X2RwbGxfcHRwX2FkanBoYXNlXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcyBQVFAgY2xvY2sgc3VwcG9ydCB0byB0aGUgTWljcm9jaGlwIEF6dXJpdGUgRFBMTCBkcml2ZXIgKHpsMzA3M3gpLiBJdCBpbXBsZW1lbnRzIFBUUCBjbG9jayBvcGVyYXRpb25zIGxpa2UgZ2V0dGltZXg2NCwgc2V0dGltZTY0LCBhZGp0aW1lLCBhZGpmaW5lLCBhbmQgYWRqcGhhc2UuIFRoZSBkcml2ZXIgY2FuIGJlIGluc3RhbnRpYXRlZCB2aWEgSTJDIG9yIFNQSSBpbiBRRU1VLCBhbmQgdGhlIFBUUCBvcGVyYXRpb25zIGFyZSByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2UgdmlhIFBUUCBpb2N0bHMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTExVDE0OjAzOjA4Ljg5MDg4MzY4MloiLCJTZXEiOjExLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6IklmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDc5NDM5MTMzODQsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMVQxNDowMzowOC44OTE1MzE4NTJaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6ImFnZW50IiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiYmVzdC1leHBlbnNpdmUiLCJEdXJhdGlvbiI6NDc5NDMyNTk1MzQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHMgUFRQIGNsb2NrIHN1cHBvcnQgdG8gdGhlIE1pY3JvY2hpcCBBenVyaXRlIERQTEwvUFRQL1N5bmNFIGRldmljZXMgZHJpdmVyLiBJdCBpbnRyb2R1Y2VzIGZ1bmN0aW9ucyB0byByZWFkL3dyaXRlIFRpbWUgb2YgRGF5IChUb0QpLCBhZGp1c3QgcGhhc2UsIGFkanVzdCBmcmVxdWVuY3ksIGFuZCByZWdpc3RlciBhIFBUUCBjbG9jayBkZXZpY2UuIFRoZSBkcml2ZXIgaW50ZXJhY3RzIHdpdGggdGhlIFBUUCBzdWJzeXN0ZW0gYnkgcHJvdmlkaW5nIGNhbGxiYWNrcyAoYGdldHRpbWV4NjRgLCBgc2V0dGltZTY0YCwgYGFkanRpbWVgLCBgYWRqZmluZWAsIGBhZGpwaGFzZWApLiBBbGwgc3RydWN0dXJlcyBhbGxvY2F0ZWQgZHluYW1pY2FsbHkgYXJlIHplcm8taW5pdGlhbGl6ZWQgdXNpbmcgYGt6YWxsb2Nfb2JqYC4gVGhlIGBwdHBfY2xvY2tfaW5mb2Agc3RydWN0dXJlIGlzIGNvcGllZCBmcm9tIGEgc3RhdGljIGNvbnN0IHRlbXBsYXRlLCBlbnN1cmluZyBhbGwgdW5pbml0aWFsaXplZCBmaWVsZHMgYXJlIHplcm9lZCBieSB0aGUgY29tcGlsZXIgYmVmb3JlIGBzbnByaW50ZmAgbW9kaWZpZXMgdGhlIGBuYW1lYCBmaWVsZC4gVGhlIGBzdHJ1Y3QgdGltZXNwZWM2NGAgcG9wdWxhdGVkIGJ5IHRoZSBkcml2ZXIgaXMgZnVsbHkgaW5pdGlhbGl6ZWQgb24gc3VjY2VzcywgYW5kIGVycm9ycyBhcmUgcHJvcGVybHkgcHJvcGFnYXRlZCB0byB0aGUgUFRQIHN1YnN5c3RlbSwgcHJldmVudGluZyB1bmluaXRpYWxpemVkIGRhdGEgZnJvbSBiZWluZyB1c2VkIG9yIGNvcGllZCB0byB1c2Vyc3BhY2UuIE5vIG5ldyB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcyBvciBpbmZvLWxlYWtzIGFyZSBpbnRyb2R1Y2VkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeVxuZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmRcbmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcilcbmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLlxuXG5DUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjpcbi0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZVxuICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU5cbiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUFxuICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLlxuLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCxcbiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLlxuXG5SdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLFxuTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy5cbkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFlcbnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzXG50aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLlxuXG5Mb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdFxudW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsXG5hIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXNcbnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nXG51bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2xcbmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSxcbmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6XG4xLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYlxuICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHNcbiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuXG4yLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzXG4gICBvciBzdHJ1Y3QgZmllbGRzLlxuMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkc1xuICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy5cbjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzXG4gICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuXG5cblNldCBOZWVkc0tNU0FOPWZhbHNlIElGOlxuLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlclxuICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHRcbiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLlxuLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZFxuICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuXG4tIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy5cblxuVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZVxuZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDk1N2RjZmQ2NzFlOGJjNTk3NzE5YzEyY2IyYjMwMWQyZjc0OWZlZDFcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVHVlIEF1ZyAxMSAxNDowMjoyMiAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvZHBsbC96bDMwNzN4L0tjb25maWcgYi9kcml2ZXJzL2RwbGwvemwzMDczeC9LY29uZmlnXG5pbmRleCA1YmJjYTE0MDA1ODEzLi5kYTE3MzFhY2UxNWYwIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9kcGxsL3psMzA3M3gvS2NvbmZpZ1xuKysrIGIvZHJpdmVycy9kcGxsL3psMzA3M3gvS2NvbmZpZ1xuQEAgLTIsNyArMiw3IEBAXG4gXG4gY29uZmlnIFpMMzA3M1hcbiBcdHRyaXN0YXRlIFwiTWljcm9jaGlwIEF6dXJpdGUgRFBMTC9QVFAvU3luY0UgZGV2aWNlc1wiIGlmIENPTVBJTEVfVEVTVFxuLVx0ZGVwZW5kcyBvbiBORVRcbitcdGRlcGVuZHMgb24gTkVUIFx1MDAyNlx1MDAyNiBQVFBfMTU4OF9DTE9DS1xuIFx0c2VsZWN0IERQTExcbiBcdHNlbGVjdCBORVRfREVWTElOS1xuIFx0c2VsZWN0IFJFR01BUFxuQEAgLTE2LDcgKzE2LDcgQEAgY29uZmlnIFpMMzA3M1hcbiBcbiBjb25maWcgWkwzMDczWF9JMkNcbiBcdHRyaXN0YXRlIFwiSTJDIGJ1cyBpbXBsZW1lbnRhdGlvbiBmb3IgTWljcm9jaGlwIEF6dXJpdGUgZGV2aWNlc1wiXG4tXHRkZXBlbmRzIG9uIEkyQyBcdTAwMjZcdTAwMjYgTkVUXG4rXHRkZXBlbmRzIG9uIEkyQyBcdTAwMjZcdTAwMjYgTkVUIFx1MDAyNlx1MDAyNiBQVFBfMTU4OF9DTE9DS1xuIFx0c2VsZWN0IFJFR01BUF9JMkNcbiBcdHNlbGVjdCBaTDMwNzNYXG4gXHRoZWxwXG5AQCAtMjgsNyArMjgsNyBAQCBjb25maWcgWkwzMDczWF9JMkNcbiBcbiBjb25maWcgWkwzMDczWF9TUElcbiBcdHRyaXN0YXRlIFwiU1BJIGJ1cyBpbXBsZW1lbnRhdGlvbiBmb3IgTWljcm9jaGlwIEF6dXJpdGUgZGV2aWNlc1wiXG4tXHRkZXBlbmRzIG9uIE5FVCBcdTAwMjZcdTAwMjYgU1BJXG4rXHRkZXBlbmRzIG9uIE5FVCBcdTAwMjZcdTAwMjYgU1BJIFx1MDAyNlx1MDAyNiBQVFBfMTU4OF9DTE9DS1xuIFx0c2VsZWN0IFJFR01BUF9TUElcbiBcdHNlbGVjdCBaTDMwNzNYXG4gXHRoZWxwXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jIGIvZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jXG5pbmRleCA0ZWMyY2Y1M2RhZDQ2Li5iYzZkNzBkMjVkNzkxIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jXG4rKysgYi9kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmNcbkBAIC0zLDYgKzMsNyBAQFxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2NsZWFudXAuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2RlbGF5LmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9kZXZfcHJpbnRrLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9wdHBfY2xvY2tfa2VybmVsLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9zdHJpbmcuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3R5cGVzLmhcdTAwM2VcbiBcbkBAIC0xNjIsOCArMTYzLDggQEAgaW50IHpsMzA3M3hfY2hhbl9uY29fbW9kZV9zZXQoc3RydWN0IHpsMzA3M3hfZGV2ICp6bGRldiwgdTggaW5kZXgpXG4gICogQHpsZGV2OiBwb2ludGVyIHRvIHpsMzA3M3hfZGV2IHN0cnVjdHVyZVxuICAqIEBpbmRleDogRFBMTCBjaGFubmVsIGluZGV4IHRvIGZldGNoIHN0YXRlIGZvclxuICAqXG4tICogUmVhZHMgdGhlIG1vZGVfcmVmc2VsIHJlZ2lzdGVyIGFuZCByZWZlcmVuY2UgcHJpb3JpdHkgcmVnaXN0ZXJzIGZvclxuLSAqIHRoZSBnaXZlbiBEUExMIGNoYW5uZWwgYW5kIHN0b3JlcyB0aGUgcmF3IHZhbHVlcyBmb3IgbGF0ZXIgdXNlLlxuKyAqIFJlYWRzIHRoZSBtb2RlX3JlZnNlbCwgc3RhdHVzIGFuZCByZWZlcmVuY2UgcHJpb3JpdHkgcmVnaXN0ZXJzIGZvclxuKyAqIHRoZSBnaXZlbiBEUExMIGNoYW5uZWwgYW5kIHN0b3JlcyB0aGUgdmFsdWVzIGZvciBsYXRlciB1c2UuXG4gICpcbiAgKiBSZXR1cm46IDAgb24gc3VjY2VzcywgXHUwMDNjMCBvbiBlcnJvclxuICAqL1xuQEAgLTIzNCw2ICsyMzUsMzI2IEBAIGNvbnN0IHN0cnVjdCB6bDMwNzN4X2NoYW4gKnpsMzA3M3hfY2hhbl9zdGF0ZV9nZXQoc3RydWN0IHpsMzA3M3hfZGV2ICp6bGRldixcbiBcdHJldHVybiBcdTAwMjZ6bGRldi1cdTAwM2VjaGFuW2luZGV4XTtcbiB9XG4gXG4rLyoqXG4rICogemwzMDczeF9jaGFuX3RvZF9yZWFkeV93YWl0IC0gd2FpdCBmb3IgVG9EIHNlbWFwaG9yZSB0byBjbGVhclxuKyAqIEB6bGRldjogcG9pbnRlciB0byB6bDMwNzN4IGRldmljZVxuKyAqIEBjaDogRFBMTCBjaGFubmVsIGluZGV4XG4rICpcbisgKiBDaGVja3MgdGhlIFRvRCBjb250cm9sIHJlZ2lzdGVyIHNlbWFwaG9yZSBiaXQuIElmIGNsZWFyLCByZXR1cm5zXG4rICogaW1tZWRpYXRlbHkuIE90aGVyd2lzZSBwb2xscyB1bnRpbCB0aGUgYml0IGlzIGNsZWFyZWQgYnkgdGhlIGRldmljZS5cbisgKlxuKyAqIFJldHVybjpcbisgKiAqIDBcdFx0XHQtIHN1Y2Nlc3NcbisgKiAqICUtRUJVU1lcdFx0LSB0aW1lb3V0XG4rICogKiAlLUVPUE5PVFNVUFBcdC0gdW5rbm93biBjb21tYW5kIGRldGVjdGVkXG4rICogKiBuZWdhdGl2ZVx0XHQtIG90aGVyIGVycm9yXG4rICovXG4raW50IHpsMzA3M3hfY2hhbl90b2RfcmVhZHlfd2FpdChzdHJ1Y3QgemwzMDczeF9kZXYgKnpsZGV2LCB1OCBjaClcbit7XG4rXHR1bnNpZ25lZCBpbnQgdGltZW91dDtcbitcdHU4IHRvZF9jdHJsO1xuK1x0aW50IHJjO1xuK1xuK1x0cmMgPSB6bDMwNzN4X3JlYWRfdTgoemxkZXYsIFpMX1JFR19EUExMX1RPRF9DVFJMKGNoKSwgXHUwMDI2dG9kX2N0cmwpO1xuK1x0aWYgKHJjKVxuK1x0XHRyZXR1cm4gcmM7XG4rXG4rXHRpZiAoISh0b2RfY3RybCBcdTAwMjYgWkxfRFBMTF9UT0RfQ1RSTF9TRU0pKVxuK1x0XHRyZXR1cm4gMDtcbitcbitcdHN3aXRjaCAoRklFTERfR0VUKFpMX0RQTExfVE9EX0NUUkxfQ01ELCB0b2RfY3RybCkpIHtcbitcdGNhc2UgWkxfRFBMTF9UT0RfQ1RSTF9DTURfV1JfTkVYVF8xSFo6XG4rXHRcdHRpbWVvdXQgPSBaTF9QT0xMX1RPRF9XUl9USU1FT1VUX1VTO1xuK1x0XHRicmVhaztcbitcdGNhc2UgWkxfRFBMTF9UT0RfQ1RSTF9DTURfUkRfQ1VSUkVOVDpcbitcdGNhc2UgWkxfRFBMTF9UT0RfQ1RSTF9DTURfUkRfTkVYVF8xSFo6XG4rXHRcdHRpbWVvdXQgPSBaTF9QT0xMX1RPRF9SRF9USU1FT1VUX1VTO1xuK1x0XHRicmVhaztcbitcdGRlZmF1bHQ6XG4rXHRcdFdBUk5fT04oMSk7XG4rXHRcdHJldHVybiAtRU9QTk9UU1VQUDtcbitcdH1cbitcbitcdHJjID0gemwzMDczeF9wb2xsX3plcm9fdTgoemxkZXYsIFpMX1JFR19EUExMX1RPRF9DVFJMKGNoKSxcbitcdFx0XHRcdCAgWkxfRFBMTF9UT0RfQ1RSTF9TRU0sIHRpbWVvdXQpO1xuK1xuK1x0cmV0dXJuIHJjID09IC1FVElNRURPVVQgPyAtRUJVU1kgOiByYztcbit9XG4rXG4rLyoqXG4rICogemwzMDczeF9jaGFuX3RvZF9jdHJsIC0gaXNzdWUgVG9EIGNvbW1hbmRcbisgKiBAemxkZXY6IHBvaW50ZXIgdG8gemwzMDczeCBkZXZpY2VcbisgKiBAY2g6IERQTEwgY2hhbm5lbCBpbmRleFxuKyAqIEBjbWQ6IFRvRCBjb21tYW5kIHRvIGV4ZWN1dGVcbisgKlxuKyAqIFdyaXRlcyB0aGUgc2VtYXBob3JlIGFuZCBjb21tYW5kIHRvIGRwbGxfdG9kX2N0cmwuIFRoZSBjYWxsZXIgbXVzdFxuKyAqIGVuc3VyZSB0aGUgZGV2aWNlIGlzIHJlYWR5IChzZW1hcGhvcmUgY2xlYXIpIGJlZm9yZSBjYWxsaW5nIGFuZFxuKyAqIG11c3Qgd2FpdCBmb3IgY29tcGxldGlvbiBpZiBuZWVkZWQuXG4rICpcbisgKiBSZXR1cm46IDAgb24gc3VjY2VzcywgXHUwMDNjMCBvbiBlcnJvclxuKyAqL1xuK3N0YXRpYyBpbnQgemwzMDczeF9jaGFuX3RvZF9jdHJsKHN0cnVjdCB6bDMwNzN4X2RldiAqemxkZXYsIHU4IGNoLCB1OCBjbWQpXG4re1xuK1x0cmV0dXJuIHpsMzA3M3hfd3JpdGVfdTgoemxkZXYsIFpMX1JFR19EUExMX1RPRF9DVFJMKGNoKSxcbitcdFx0XHRcdFpMX0RQTExfVE9EX0NUUkxfU0VNIHwgY21kKTtcbit9XG4rXG4rLyoqXG4rICogemwzMDczeF9jaGFuX3RvZF9yZWFkIC0gcmVhZCBUb0QgcmVnaXN0ZXJzIGFmdGVyIGlzc3VpbmcgYSBjb21tYW5kXG4rICogQHpsZGV2OiBwb2ludGVyIHRvIHpsMzA3M3ggZGV2aWNlXG4rICogQGNoOiBEUExMIGNoYW5uZWwgaW5kZXhcbisgKiBAbmV4dF9oejogaWYgdHJ1ZSwgcmVhZCBwcmVkaWN0ZWQgVG9EIGF0IG5leHQgMSBIejsgb3RoZXJ3aXNlIHJlYWQgY3VycmVudFxuKyAqIEB0czogdGltZXNwZWMgdG8gc3RvcmUgdGhlIHJlc3VsdFxuKyAqIEBzdHM6IG9wdGlvbmFsIHN5c3RlbSB0aW1lc3RhbXAgcGFpciBmb3IgY3Jvc3MtdGltZXN0YW1waW5nXG4rICpcbisgKiBDb250ZXh0OiBDYWxsZXIgbXVzdCBzZXJpYWxpemUgYWxsIHpsMzA3M3hfY2hhbl90b2RfKiBjYWxscyBleHRlcm5hbGx5LlxuKyAqIFJldHVybjogMCBvbiBzdWNjZXNzLCBcdTAwM2MwIG9uIGVycm9yXG4rICovXG4raW50IHpsMzA3M3hfY2hhbl90b2RfcmVhZChzdHJ1Y3QgemwzMDczeF9kZXYgKnpsZGV2LCB1OCBjaCxcbitcdFx0XHQgIGJvb2wgbmV4dF9oeiwgc3RydWN0IHRpbWVzcGVjNjQgKnRzLFxuK1x0XHRcdCAgc3RydWN0IHB0cF9zeXN0ZW1fdGltZXN0YW1wICpzdHMpXG4re1xuK1x0dTMyIG5zZWM7XG4rXHR1NjQgc2VjO1xuK1x0dTggY21kO1xuK1x0aW50IHJjO1xuK1xuK1x0aWYgKG5leHRfaHopXG4rXHRcdGNtZCA9IFpMX0RQTExfVE9EX0NUUkxfQ01EX1JEX05FWFRfMUhaO1xuK1x0ZWxzZVxuK1x0XHRjbWQgPSBaTF9EUExMX1RPRF9DVFJMX0NNRF9SRF9DVVJSRU5UO1xuK1xuK1x0LyogV2FpdCBmb3IgYW55IHByZXZpb3VzIFRvRCBvcGVyYXRpb24gdG8gY29tcGxldGUgKi9cbitcdHJjID0gemwzMDczeF9jaGFuX3RvZF9yZWFkeV93YWl0KHpsZGV2LCBjaCk7XG4rXHRpZiAocmMpXG4rXHRcdHJldHVybiByYztcbitcbitcdHB0cF9yZWFkX3N5c3RlbV9wcmV0cyhzdHMpO1xuK1x0cmMgPSB6bDMwNzN4X2NoYW5fdG9kX2N0cmwoemxkZXYsIGNoLCBjbWQpO1xuK1x0aWYgKHJjKVxuK1x0XHRyZXR1cm4gcmM7XG4rXG4rXHRyYyA9IHpsMzA3M3hfY2hhbl90b2RfcmVhZHlfd2FpdCh6bGRldiwgY2gpO1xuK1x0aWYgKHJjKVxuK1x0XHRyZXR1cm4gcmM7XG4rXHRwdHBfcmVhZF9zeXN0ZW1fcG9zdHRzKHN0cyk7XG4rXG4rXHRyYyA9IHpsMzA3M3hfcmVhZF91NDgoemxkZXYsIFpMX1JFR19EUExMX1RPRF9TRUMoY2gpLCBcdTAwMjZzZWMpO1xuK1x0aWYgKHJjKVxuK1x0XHRyZXR1cm4gcmM7XG4rXG4rXHQvKiBIVyBuYW5vc2Vjb25kcyBhcmUgYWx3YXlzIGluIFswLCBOU0VDX1BFUl9TRUMpIHJhbmdlICovXG4rXHRyYyA9IHpsMzA3M3hfcmVhZF91MzIoemxkZXYsIFpMX1JFR19EUExMX1RPRF9OUyhjaCksIFx1MDAyNm5zZWMpO1xuK1x0aWYgKHJjKVxuK1x0XHRyZXR1cm4gcmM7XG4rXG4rXHR0cy1cdTAwM2V0dl9zZWMgPSBzZWM7XG4rXHR0cy1cdTAwM2V0dl9uc2VjID0gbnNlYztcbitcbitcdHJldHVybiAwO1xuK31cbitcbisvKipcbisgKiB6bDMwNzN4X2NoYW5fdG9kX3dyaXRlIC0gd3JpdGUgVG9EIHJlZ2lzdGVycyBhbmQgdHJpZ2dlciAxIEh6IHVwZGF0ZVxuKyAqIEB6bGRldjogcG9pbnRlciB0byB6bDMwNzN4IGRldmljZVxuKyAqIEBjaDogRFBMTCBjaGFubmVsIGluZGV4XG4rICogQHRzOiB0aW1lIHRvIHNldFxuKyAqXG4rICogQ29udGV4dDogQ2FsbGVyIG11c3Qgc2VyaWFsaXplIGFsbCB6bDMwNzN4X2NoYW5fdG9kXyogY2FsbHMgZXh0ZXJuYWxseS5cbisgKiBSZXR1cm46IDAgb24gc3VjY2VzcywgXHUwMDNjMCBvbiBlcnJvclxuKyAqL1xuK2ludCB6bDMwNzN4X2NoYW5fdG9kX3dyaXRlKHN0cnVjdCB6bDMwNzN4X2RldiAqemxkZXYsIHU4IGNoLFxuK1x0XHRcdCAgIHN0cnVjdCB0aW1lc3BlYzY0IHRzKVxuK3tcbitcdGludCByYztcbitcbitcdC8qIFdhaXQgZm9yIGFueSBwcmV2aW91cyBUb0Qgb3BlcmF0aW9uIHRvIGNvbXBsZXRlICovXG4rXHRyYyA9IHpsMzA3M3hfY2hhbl90b2RfcmVhZHlfd2FpdCh6bGRldiwgY2gpO1xuK1x0aWYgKHJjKVxuK1x0XHRyZXR1cm4gcmM7XG4rXG4rXHRyYyA9IHpsMzA3M3hfd3JpdGVfdTQ4KHpsZGV2LCBaTF9SRUdfRFBMTF9UT0RfU0VDKGNoKSwgdHMudHZfc2VjKTtcbitcdGlmIChyYylcbitcdFx0cmV0dXJuIHJjO1xuK1xuK1x0cmMgPSB6bDMwNzN4X3dyaXRlX3UzMih6bGRldiwgWkxfUkVHX0RQTExfVE9EX05TKGNoKSwgdHMudHZfbnNlYyk7XG4rXHRpZiAocmMpXG4rXHRcdHJldHVybiByYztcbitcbitcdHJldHVybiB6bDMwNzN4X2NoYW5fdG9kX2N0cmwoemxkZXYsIGNoLFxuK1x0XHRcdFx0ICAgICBaTF9EUExMX1RPRF9DVFJMX0NNRF9XUl9ORVhUXzFIWik7XG4rfVxuK1xuKy8qKlxuKyAqIHpsMzA3M3hfY2hhbl90b2RfYWRqdXN0IC0gYXRvbWljIFRvRCByZWFkLW1vZGlmeS13cml0ZSB3aXRoIHJvbGxvdmVyIGd1YXJkXG4rICogQHpsZGV2OiBwb2ludGVyIHRvIHpsMzA3M3ggZGV2aWNlXG4rICogQGNoOiBEUExMIGNoYW5uZWwgaW5kZXhcbisgKiBAZGVsdGE6IHRpbWUgYWRqdXN0bWVudCB0byBhcHBseVxuKyAqXG4rICogUmVhZHMgdGhlIG5leHQtSHogVG9EIGFuZCBjdXJyZW50IFRvRCwgdGhlbiBjaGVja3Mgd2hldGhlciBlbm91Z2ggdGltZVxuKyAqIHJlbWFpbnMgYmVmb3JlIHRoZSBuZXh0IDEgSHogcm9sbG92ZXIgdG8gc2FmZWx5IGNvbXBsZXRlIHRoZSB3cml0ZS5cbisgKiBSZS1yZWFkcyBpZiB0aGUgMSBIeiB0aWNrIGNyb3NzZWQgYmV0d2VlbiB0aGUgdHdvIHJlYWRzIG9yIGlmIGxlc3NcbisgKiB0aGFuIDIwIG1zIHJlbWFpbnMgYmVmb3JlIHRoZSBuZXh0IHJvbGxvdmVyLiBBcHBsaWVzIEBkZWx0YSBhbmQgd3JpdGVzXG4rICogdGhlIHJlc3VsdCBiYWNrLlxuKyAqXG4rICogQ29udGV4dDogQ2FsbGVyIG11c3Qgc2VyaWFsaXplIGFsbCB6bDMwNzN4X2NoYW5fdG9kXyogY2FsbHMgZXh0ZXJuYWxseS5cbisgKiBSZXR1cm46IDAgb24gc3VjY2VzcywgXHUwMDNjMCBvbiBlcnJvclxuKyAqL1xuK2ludCB6bDMwNzN4X2NoYW5fdG9kX2FkanVzdChzdHJ1Y3QgemwzMDczeF9kZXYgKnpsZGV2LCB1OCBjaCxcbitcdFx0XHQgICAgc3RydWN0IHRpbWVzcGVjNjQgZGVsdGEpXG4re1xuKyNkZWZpbmUgWkxfVE9EX01BWF9SRVRSSUVTXHQyMFxuK1x0c3RhdGljIGNvbnN0IGxvbmcgdGhyZXNob2xkX25zID0gMjAgKiBOU0VDX1BFUl9NU0VDO1xuK1x0c3RydWN0IHRpbWVzcGVjNjQgdHNfbmV4dCwgdHNfY3VyLCBkaWZmO1xuK1x0aW50IHJjLCBpO1xuK1xuK1x0Zm9yIChpID0gMDsgaSBcdTAwM2MgWkxfVE9EX01BWF9SRVRSSUVTOyBpKyspIHtcbitcdFx0cmMgPSB6bDMwNzN4X2NoYW5fdG9kX3JlYWQoemxkZXYsIGNoLCB0cnVlLCBcdTAwMjZ0c19uZXh0LCBOVUxMKTtcbitcdFx0aWYgKHJjKVxuK1x0XHRcdHJldHVybiByYztcbitcbitcdFx0cmMgPSB6bDMwNzN4X2NoYW5fdG9kX3JlYWQoemxkZXYsIGNoLCBmYWxzZSwgXHUwMDI2dHNfY3VyLCBOVUxMKTtcbitcdFx0aWYgKHJjKVxuK1x0XHRcdHJldHVybiByYztcbitcbitcdFx0LyogRW5zdXJlIHRoZSAxIEh6IHRpY2sgZGlkIG5vdCBjcm9zcyBiZXR3ZWVuIHRoZSB0d28gcmVhZHNcbitcdFx0ICogYW5kIHRoYXQgZW5vdWdoIG1hcmdpbiByZW1haW5zIHRvIGNvbXBsZXRlIHRoZSB3cml0ZS5cbitcdFx0ICovXG4rXHRcdGRpZmYgPSB0aW1lc3BlYzY0X3N1Yih0c19uZXh0LCB0c19jdXIpO1xuK1x0XHRpZiAoZGlmZi50dl9zZWMgXHUwMDNlIDAgfHxcbitcdFx0ICAgICghZGlmZi50dl9zZWMgXHUwMDI2XHUwMDI2IGRpZmYudHZfbnNlYyBcdTAwM2U9IHRocmVzaG9sZF9ucykpXG4rXHRcdFx0YnJlYWs7XG4rXHR9XG4rXHRpZiAoaSA9PSBaTF9UT0RfTUFYX1JFVFJJRVMpIHtcbitcdFx0ZGV2X3dhcm4oemxkZXYtXHUwMDNlZGV2LFxuK1x0XHRcdCBcIkRQTEwldSBUb0QgYWRqdXN0IGZhaWxlZCB0byBnZXQgc3RhYmxlIG1hcmdpblxcblwiLFxuK1x0XHRcdCBjaCk7XG4rXHRcdHJldHVybiAtRUJVU1k7XG4rXHR9XG4rXG4rXHQvKiBBcHBseSBkZWx0YSB0byB0aGUgbmV4dC1IeiBUb0QgKi9cbitcdHRzX25leHQgPSB0aW1lc3BlYzY0X2FkZCh0c19uZXh0LCBkZWx0YSk7XG4rXHRpZiAoIXRpbWVzcGVjNjRfdmFsaWQoXHUwMDI2dHNfbmV4dCkpXG4rXHRcdHJldHVybiAtRUlOVkFMO1xuK1xuK1x0cmV0dXJuIHpsMzA3M3hfY2hhbl90b2Rfd3JpdGUoemxkZXYsIGNoLCB0c19uZXh0KTtcbisjdW5kZWYgWkxfVE9EX01BWF9SRVRSSUVTXG4rfVxuK1xuKy8qKlxuKyAqIHpsMzA3M3hfY2hhbl9kZl9vZmZzZXRfc2V0IC0gd3JpdGUgZGVsdGEgZnJlcXVlbmN5IG9mZnNldCB0byBoYXJkd2FyZVxuKyAqIEB6bGRldjogcG9pbnRlciB0byB6bDMwNzN4IGRldmljZVxuKyAqIEBjaDogRFBMTCBjaGFubmVsIGluZGV4XG4rICogQG9mZnNldDogZnJlcXVlbmN5IG9mZnNldCBpbiAyXi00OCBzdGVwc1xuKyAqXG4rICogQ29udGV4dDogQ2FsbGVyIG11c3QgaG9sZCB0aGUgcGVyLURQTEwgbG9jay5cbisgKiBSZXR1cm46IDAgb24gc3VjY2VzcywgXHUwMDNjMCBvbiBlcnJvclxuKyAqL1xuK2ludCB6bDMwNzN4X2NoYW5fZGZfb2Zmc2V0X3NldChzdHJ1Y3QgemwzMDczeF9kZXYgKnpsZGV2LCB1OCBjaCwgczY0IG9mZnNldClcbit7XG4rXHRpbnQgcmM7XG4rXG4rXHRyYyA9IHpsMzA3M3hfd3JpdGVfdTQ4KHpsZGV2LCBaTF9SRUdfRFBMTF9ERl9PRkZTRVQoY2gpLCBvZmZzZXQpO1xuK1x0aWYgKCFyYylcbitcdFx0emxkZXYtXHUwMDNlY2hhbltjaF0uZGZfb2Zmc2V0ID0gb2Zmc2V0O1xuK1xuK1x0cmV0dXJuIHJjO1xuK31cbitcbisvKipcbisgKiB6bDMwNzN4X2NoYW5fdGllX3dyaXRlIC0gYWRqdXN0IERQTEwgcGhhc2UgdXNpbmcgVElFIHdyaXRlXG4rICogQHpsZGV2OiBwb2ludGVyIHRvIHpsMzA3M3ggZGV2aWNlXG4rICogQGNoOiBEUExMIGNoYW5uZWwgaW5kZXhcbisgKiBAZGVsdGFfbnM6IHBoYXNlIGFkanVzdG1lbnQgaW4gbmFub3NlY29uZHMgKG11c3QgYmUgaW4gKC0xcywgMXMpKVxuKyAqXG4rICogQ29udmVydHMgbmFub3NlY29uZHMgdG8gVElFIHVuaXRzICgwLjAxIHBzKSBhbmQgd3JpdGVzIFRJRSBkYXRhXG4rICogdG8gdGhlIHNwZWNpZmllZCBjaGFubmVsLlxuKyAqXG4rICogUmV0dXJuOiAwIG9uIHN1Y2Nlc3MsIFx1MDAzYzAgb24gZXJyb3JcbisgKi9cbitpbnQgemwzMDczeF9jaGFuX3RpZV93cml0ZShzdHJ1Y3QgemwzMDczeF9kZXYgKnpsZGV2LCB1OCBjaCwgczY0IGRlbHRhX25zKVxuK3tcbitcdHM2NCB0aWVfZGF0YTtcbitcdGludCByYztcbitcbitcdGlmIChXQVJOX09OKGRlbHRhX25zIFx1MDAzYz0gLU5TRUNfUEVSX1NFQyB8fCBkZWx0YV9ucyBcdTAwM2U9IE5TRUNfUEVSX1NFQykpXG4rXHRcdHJldHVybiAtRVJBTkdFO1xuK1xuK1x0Z3VhcmQobXV0ZXgpKFx1MDAyNnpsZGV2LVx1MDAzZXRpZV9sb2NrKTtcbitcbitcdC8qIFdhaXQgZm9yIGFueSBwcmV2aW91cyBUSUUgb3BlcmF0aW9uIHRvIGNvbXBsZXRlICovXG4rXHRyYyA9IHpsMzA3M3hfcG9sbF96ZXJvX3U4KHpsZGV2LCBaTF9SRUdfRFBMTF9USUVfQ1RSTCxcbitcdFx0XHRcdCAgWkxfRFBMTF9USUVfQ1RSTF9PUCxcbitcdFx0XHRcdCAgWkxfUE9MTF9USUVfV1JfVElNRU9VVF9VUyk7XG4rXHRpZiAocmMpXG4rXHRcdHJldHVybiByYztcbitcbitcdC8qIENvbnZlcnQgbnMgdG8gVElFIHVuaXRzICgwLjAxIHBzID0gMTBeLTE0IHMpICovXG4rXHR0aWVfZGF0YSA9IGRlbHRhX25zICogMTAwMDAwTEw7XG4rXG4rXHRyYyA9IHpsMzA3M3hfd3JpdGVfdTQ4KHpsZGV2LCBaTF9SRUdfRFBMTF9USUVfREFUQShjaCksIHRpZV9kYXRhKTtcbitcdGlmIChyYylcbitcdFx0cmV0dXJuIHJjO1xuK1xuK1x0cmMgPSB6bDMwNzN4X3dyaXRlX3U4KHpsZGV2LCBaTF9SRUdfRFBMTF9USUVfQ1RSTF9NQVNLLCBCSVQoY2gpKTtcbitcdGlmIChyYylcbitcdFx0cmV0dXJuIHJjO1xuK1xuK1x0cmV0dXJuIHpsMzA3M3hfd3JpdGVfdTgoemxkZXYsIFpMX1JFR19EUExMX1RJRV9DVFJMLFxuK1x0XHRcdFx0WkxfRFBMTF9USUVfQ1RSTF9PUF9XUik7XG4rfVxuK1xuKy8qKlxuKyAqIHpsMzA3M3hfY2hhbl9waGFzZV9zdGVwIC0gZXhlY3V0ZSBvbmUgb3V0cHV0IHBoYXNlIHN0ZXAgb3BlcmF0aW9uXG4rICogQHpsZGV2OiBwb2ludGVyIHRvIHpsMzA3M3ggZGV2aWNlXG4rICogQGNoOiBEUExMIGNoYW5uZWwgaW5kZXhcbisgKiBAb3V0X21hc2s6IGJpdG1hc2sgb2Ygb3V0cHV0cyB0byBzdGVwXG4rICogQHN0ZXBfY3ljbGVzOiBwaGFzZSBzdGVwIGluIHN5bnRoZXNpemVyIGNsb2NrIGN5Y2xlc1xuKyAqIEB0b2Rfc3RlcDogYWxzbyBzdGVwIHRoZSBUb0QgY291bnRlclxuKyAqXG4rICogQWxsIG1hc2tlZCBvdXRwdXRzIG11c3QgdXNlIHN5bnRoZXNpemVycyBvZiB0aGUgc2FtZSBmcmVxdWVuY3kgc2luY2VcbisgKiB0aGUgc3RlcCB2YWx1ZSBpcyBpbiBzeW50aGVzaXplciBjbG9jayBjeWNsZXMuXG4rICpcbisgKiBSZXR1cm46IDAgb24gc3VjY2VzcywgXHUwMDNjMCBvbiBlcnJvclxuKyAqL1xuK2ludCB6bDMwNzN4X2NoYW5fcGhhc2Vfc3RlcChzdHJ1Y3QgemwzMDczeF9kZXYgKnpsZGV2LCB1OCBjaCxcbitcdFx0XHQgICAgdTE2IG91dF9tYXNrLCBzMzIgc3RlcF9jeWNsZXMsXG4rXHRcdFx0ICAgIGJvb2wgdG9kX3N0ZXApXG4re1xuK1x0dTggY3RybDtcbitcdGludCByYztcbitcbitcdGd1YXJkKG11dGV4KShcdTAwMjZ6bGRldi1cdTAwM2VwaGFzZV9zdGVwX2xvY2spO1xuK1xuK1x0LyogV2FpdCBmb3IgYW55IHByZXZpb3VzIHBoYXNlIHN0ZXAgb3BlcmF0aW9uIHRvIGNvbXBsZXRlICovXG4rXHRyYyA9IHpsMzA3M3hfcG9sbF96ZXJvX3U4KHpsZGV2LCBaTF9SRUdfT1VUUFVUX1BIQVNFX1NURVBfQ1RSTCxcbitcdFx0XHRcdCAgWkxfT1VUUFVUX1BIQVNFX1NURVBfQ1RSTF9PUCxcbitcdFx0XHRcdCAgWkxfUE9MTF9QSEFTRV9TVEVQX1RJTUVPVVRfVVMpO1xuK1x0aWYgKHJjKVxuK1x0XHRyZXR1cm4gcmM7XG4rXG4rXHRyYyA9IHpsMzA3M3hfd3JpdGVfdTMyKHpsZGV2LCBaTF9SRUdfT1VUUFVUX1BIQVNFX1NURVBfREFUQSxcbitcdFx0XHQgICAgICAgc3RlcF9jeWNsZXMpO1xuK1x0aWYgKHJjKVxuK1x0XHRyZXR1cm4gcmM7XG4rXG4rXHRyYyA9IHpsMzA3M3hfd3JpdGVfdTE2KHpsZGV2LCBaTF9SRUdfT1VUUFVUX1BIQVNFX1NURVBfTUFTSywgb3V0X21hc2spO1xuK1x0aWYgKHJjKVxuK1x0XHRyZXR1cm4gcmM7XG4rXG4rXHRyYyA9IHpsMzA3M3hfd3JpdGVfdTgoemxkZXYsIFpMX1JFR19PVVRQVVRfUEhBU0VfU1RFUF9OVU1CRVIsIDEpO1xuK1x0aWYgKHJjKVxuK1x0XHRyZXR1cm4gcmM7XG4rXG4rXHRjdHJsID0gRklFTERfUFJFUChaTF9PVVRQVVRfUEhBU0VfU1RFUF9DVFJMX0RQTEwsIGNoKSB8XG4rXHQgICAgICAgRklFTERfUFJFUChaTF9PVVRQVVRfUEhBU0VfU1RFUF9DVFJMX09QLFxuK1x0XHRcdCAgWkxfT1VUUFVUX1BIQVNFX1NURVBfQ1RSTF9PUF9XUklURSk7XG4rXHRpZiAodG9kX3N0ZXApXG4rXHRcdGN0cmwgfD0gWkxfT1VUUFVUX1BIQVNFX1NURVBfQ1RSTF9UT0RfU1RFUDtcbitcbitcdHJldHVybiB6bDMwNzN4X3dyaXRlX3U4KHpsZGV2LCBaTF9SRUdfT1VUUFVUX1BIQVNFX1NURVBfQ1RSTCwgY3RybCk7XG4rfVxuK1xuIC8qKlxuICAqIHpsMzA3M3hfY2hhbl9zdGF0ZV9zZXQgLSBjb21taXQgRFBMTCBjaGFubmVsIHN0YXRlIGNoYW5nZXMgdG8gaGFyZHdhcmVcbiAgKiBAemxkZXY6IHBvaW50ZXIgdG8gemwzMDczeF9kZXYgc3RydWN0dXJlXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5oIGIvZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5oXG5pbmRleCBkYzljNmQ5NWJkZWU3Li45OWMzYjcwODhmNjc4IDEwMDY0NFxuLS0tIGEvZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5oXG4rKysgYi9kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmhcbkBAIC01LDEwICs1LDEyIEBAXG4gXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvYml0ZmllbGQuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3N0ZGRlZi5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvdGltZTY0LmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC90eXBlcy5oXHUwMDNlXG4gXG4gI2luY2x1ZGUgXCJyZWdzLmhcIlxuIFxuK3N0cnVjdCBwdHBfc3lzdGVtX3RpbWVzdGFtcDtcbiBzdHJ1Y3QgemwzMDczeF9kZXY7XG4gXG4gLyoqXG5AQCAtNDIsNiArNDQsMjEgQEAgaW50IHpsMzA3M3hfY2hhbl9zdGF0ZV9zZXQoc3RydWN0IHpsMzA3M3hfZGV2ICp6bGRldiwgdTggaW5kZXgsXG4gaW50IHpsMzA3M3hfY2hhbl9zdGF0ZV91cGRhdGUoc3RydWN0IHpsMzA3M3hfZGV2ICp6bGRldiwgdTggaW5kZXgpO1xuIGludCB6bDMwNzN4X2NoYW5fbmNvX21vZGVfc2V0KHN0cnVjdCB6bDMwNzN4X2RldiAqemxkZXYsIHU4IGluZGV4KTtcbiBcbitpbnQgemwzMDczeF9jaGFuX3RvZF9yZWFkeV93YWl0KHN0cnVjdCB6bDMwNzN4X2RldiAqemxkZXYsIHU4IGNoKTtcbitpbnQgemwzMDczeF9jaGFuX3RvZF9yZWFkKHN0cnVjdCB6bDMwNzN4X2RldiAqemxkZXYsIHU4IGNoLFxuK1x0XHRcdCAgYm9vbCBuZXh0X2h6LCBzdHJ1Y3QgdGltZXNwZWM2NCAqdHMsXG4rXHRcdFx0ICBzdHJ1Y3QgcHRwX3N5c3RlbV90aW1lc3RhbXAgKnN0cyk7XG4raW50IHpsMzA3M3hfY2hhbl90b2Rfd3JpdGUoc3RydWN0IHpsMzA3M3hfZGV2ICp6bGRldiwgdTggY2gsXG4rXHRcdFx0ICAgc3RydWN0IHRpbWVzcGVjNjQgdHMpO1xuK2ludCB6bDMwNzN4X2NoYW5fdG9kX2FkanVzdChzdHJ1Y3QgemwzMDczeF9kZXYgKnpsZGV2LCB1OCBjaCxcbitcdFx0XHQgICAgc3RydWN0IHRpbWVzcGVjNjQgZGVsdGEpO1xuK2ludCB6bDMwNzN4X2NoYW5fcGhhc2Vfc3RlcChzdHJ1Y3QgemwzMDczeF9kZXYgKnpsZGV2LCB1OCBjaCxcbitcdFx0XHQgICAgdTE2IG91dF9tYXNrLCBzMzIgc3RlcF9jeWNsZXMsIGJvb2wgdG9kX3N0ZXApO1xuK1xuK2ludCB6bDMwNzN4X2NoYW5fZGZfb2Zmc2V0X3NldChzdHJ1Y3QgemwzMDczeF9kZXYgKnpsZGV2LCB1OCBjaCwgczY0IG9mZnNldCk7XG4rXG4raW50IHpsMzA3M3hfY2hhbl90aWVfd3JpdGUoc3RydWN0IHpsMzA3M3hfZGV2ICp6bGRldiwgdTggY2gsIHM2NCBkZWx0YV9ucyk7XG4rXG4gLyoqXG4gICogemwzMDczeF9jaGFuX2RmX29mZnNldF9nZXQgLSBnZXQgY2FjaGVkIGRmX29mZnNldCB2cyB0cmFja2VkIHJlZmVyZW5jZVxuICAqIEBjaGFuOiBwb2ludGVyIHRvIGNoYW5uZWwgc3RhdGVcbkBAIC0yMDAsNiArMjE3LDIxIEBAIHN0YXRpYyBpbmxpbmUgYm9vbCB6bDMwNzN4X2NoYW5fbW9kZV9pc19yZWZsb2NrKGNvbnN0IHN0cnVjdCB6bDMwNzN4X2NoYW4gKmNoYW4pXG4gXHRyZXR1cm4gemwzMDczeF9jaGFuX21vZGVfZ2V0KGNoYW4pID09IFpMX0RQTExfTU9ERV9SRUZTRUxfTU9ERV9SRUZMT0NLO1xuIH1cbiBcbisvKipcbisgKiB6bDMwNzN4X2NoYW5fbW9kZV9zdXBwb3J0c190aWUgLSBjaGVjayBpZiBjaGFubmVsIG1vZGUgc3VwcG9ydHMgVElFIHdyaXRlXG4rICogQGNoYW46IHBvaW50ZXIgdG8gY2hhbm5lbCBzdGF0ZVxuKyAqXG4rICogVElFIHdyaXRlIGlzIHN1cHBvcnRlZCBpbiBBVVRPIGFuZCBSRUZMT0NLIG1vZGVzIHJlZ2FyZGxlc3Mgb2YgbG9jayBzdGF0ZS5cbisgKlxuKyAqIFJldHVybjogdHJ1ZSBpZiBUSUUgd3JpdGUgaXMgc3VwcG9ydGVkLCBmYWxzZSBvdGhlcndpc2VcbisgKi9cbitzdGF0aWMgaW5saW5lIGJvb2xcbit6bDMwNzN4X2NoYW5fbW9kZV9zdXBwb3J0c190aWUoY29uc3Qgc3RydWN0IHpsMzA3M3hfY2hhbiAqY2hhbilcbit7XG4rXHRyZXR1cm4gemwzMDczeF9jaGFuX21vZGVfaXNfYXV0byhjaGFuKSB8fFxuK1x0XHR6bDMwNzN4X2NoYW5fbW9kZV9pc19yZWZsb2NrKGNoYW4pO1xuK31cbitcbiAvKipcbiAgKiB6bDMwNzN4X2NoYW5faXNfaG9fcmVhZHkgLSBjaGVjayBpZiBob2xkb3ZlciBpcyByZWFkeVxuICAqIEBjaGFuOiBwb2ludGVyIHRvIGNoYW5uZWwgc3RhdGVcbmRpZmYgLS1naXQgYS9kcml2ZXJzL2RwbGwvemwzMDczeC9jb3JlLmMgYi9kcml2ZXJzL2RwbGwvemwzMDczeC9jb3JlLmNcbmluZGV4IDViMmQ3N2YyYzIyODguLjIzMGRmMDhlMjdjZDEgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL2RwbGwvemwzMDczeC9jb3JlLmNcbisrKyBiL2RyaXZlcnMvZHBsbC96bDMwNzN4L2NvcmUuY1xuQEAgLTMyMiw3ICszMjIsNyBAQCBpbnQgemwzMDczeF93cml0ZV91NDgoc3RydWN0IHpsMzA3M3hfZGV2ICp6bGRldiwgdW5zaWduZWQgaW50IHJlZywgdTY0IHZhbClcbiBpbnQgemwzMDczeF9wb2xsX3plcm9fdTgoc3RydWN0IHpsMzA3M3hfZGV2ICp6bGRldiwgdW5zaWduZWQgaW50IHJlZyxcbiBcdFx0XHQgdTggbWFzaywgdW5zaWduZWQgaW50IHRpbWVvdXRfdXMpXG4ge1xuLSNkZWZpbmUgWkxfUE9MTF9TTEVFUF9VUyAxMFxuK1x0dW5zaWduZWQgaW50IHNsZWVwX3VzID0gdGltZW91dF91cyAvIDUwO1xuIFx0dW5zaWduZWQgaW50IHZhbDtcbiBcbiBcdC8qIENoZWNrIHRoZSByZWdpc3RlciBpcyA4Yml0ICovXG5AQCAtMzM2LDcgKzMzNiw3IEBAIGludCB6bDMwNzN4X3BvbGxfemVyb191OChzdHJ1Y3QgemwzMDczeF9kZXYgKnpsZGV2LCB1bnNpZ25lZCBpbnQgcmVnLFxuIFx0cmVnID0gWkxfUkVHX0FERFIocmVnKSArIFpMX1JBTkdFX09GRlNFVDtcbiBcbiBcdHJldHVybiByZWdtYXBfcmVhZF9wb2xsX3RpbWVvdXQoemxkZXYtXHUwMDNlcmVnbWFwLCByZWcsIHZhbCwgISh2YWwgXHUwMDI2IG1hc2spLFxuLVx0XHRcdFx0XHRaTF9QT0xMX1NMRUVQX1VTLCB0aW1lb3V0X3VzKTtcbitcdFx0XHRcdFx0c2xlZXBfdXMsIHRpbWVvdXRfdXMpO1xuIH1cbiBcbiBpbnQgemwzMDczeF9tYl9vcChzdHJ1Y3QgemwzMDczeF9kZXYgKnpsZGV2LCB1bnNpZ25lZCBpbnQgb3BfcmVnLCB1OCBvcF92YWwsXG5AQCAtNTExLDYgKzUxMSwxMSBAQCB6bDMwNzN4X2Rldl9zdGF0ZV9mZXRjaChzdHJ1Y3QgemwzMDczeF9kZXYgKnpsZGV2KVxuIFx0aW50IHJjO1xuIFx0dTggaTtcbiBcbitcdHJjID0gemwzMDczeF9yZWFkX3UxNih6bGRldiwgWkxfUkVHX09VVFBVVF9TVEVQX1RJTUVfTUFTSyxcbitcdFx0XHQgICAgICBcdTAwMjZ6bGRldi1cdTAwM2VvdXRfc3RlcF90aW1lX21hc2spO1xuK1x0aWYgKHJjKVxuK1x0XHRyZXR1cm4gcmM7XG4rXG4gXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBaTDMwNzNYX05VTV9SRUZTOyBpKyspIHtcbiBcdFx0cmMgPSB6bDMwNzN4X3JlZl9zdGF0ZV9mZXRjaCh6bGRldiwgaSk7XG4gXHRcdGlmIChyYykge1xuQEAgLTEwMzQsNiArMTAzOSwxNCBAQCBpbnQgemwzMDczeF9kZXZfcHJvYmUoc3RydWN0IHpsMzA3M3hfZGV2ICp6bGRldilcbiBcdCAqIGFuZC9vciBwb2xscyBhcmUgcmVxdWlyZWQgdG8gYmUgZG9uZSBhdG9taWNhbGx5LlxuIFx0ICovXG4gXHRyYyA9IGRldm1fbXV0ZXhfaW5pdCh6bGRldi1cdTAwM2VkZXYsIFx1MDAyNnpsZGV2LVx1MDAzZW11bHRpb3BfbG9jayk7XG4rXHRpZiAocmMpXG4rXHRcdHJldHVybiBkZXZfZXJyX3Byb2JlKHpsZGV2LVx1MDAzZWRldiwgcmMsXG4rXHRcdFx0XHQgICAgIFwiRmFpbGVkIHRvIGluaXRpYWxpemUgbXV0ZXhcXG5cIik7XG4rXHRyYyA9IGRldm1fbXV0ZXhfaW5pdCh6bGRldi1cdTAwM2VkZXYsIFx1MDAyNnpsZGV2LVx1MDAzZXBoYXNlX3N0ZXBfbG9jayk7XG4rXHRpZiAocmMpXG4rXHRcdHJldHVybiBkZXZfZXJyX3Byb2JlKHpsZGV2LVx1MDAzZWRldiwgcmMsXG4rXHRcdFx0XHQgICAgIFwiRmFpbGVkIHRvIGluaXRpYWxpemUgbXV0ZXhcXG5cIik7XG4rXHRyYyA9IGRldm1fbXV0ZXhfaW5pdCh6bGRldi1cdTAwM2VkZXYsIFx1MDAyNnpsZGV2LVx1MDAzZXRpZV9sb2NrKTtcbiBcdGlmIChyYylcbiBcdFx0cmV0dXJuIGRldl9lcnJfcHJvYmUoemxkZXYtXHUwMDNlZGV2LCByYyxcbiBcdFx0XHRcdCAgICAgXCJGYWlsZWQgdG8gaW5pdGlhbGl6ZSBtdXRleFxcblwiKTtcbmRpZmYgLS1naXQgYS9kcml2ZXJzL2RwbGwvemwzMDczeC9jb3JlLmggYi9kcml2ZXJzL2RwbGwvemwzMDczeC9jb3JlLmhcbmluZGV4IDc4ZGMyMDhmM2VlYTIuLjY3YzEwZTI1OTUxMTggMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL2RwbGwvemwzMDczeC9jb3JlLmhcbisrKyBiL2RyaXZlcnMvZHBsbC96bDMwNzN4L2NvcmUuaFxuQEAgLTI2LDYgKzI2LDEwIEBAIHN0cnVjdCB6bDMwNzN4X2RwbGw7XG4gI2RlZmluZSBaTF9QT0xMX0hXUkVHX1RJTUVPVVRfVVNcdCg1MCAqIFVTRUNfUEVSX01TRUMpXG4gI2RlZmluZSBaTF9QT0xMX01CX1RJTUVPVVRfVVNcdFx0KDMwICogVVNFQ19QRVJfTVNFQylcbiAjZGVmaW5lIFpMX1BPTExfUEhBU0VfRVJSX1RJTUVPVVRfVVNcdCg1MCAqIFVTRUNfUEVSX01TRUMpXG4rI2RlZmluZSBaTF9QT0xMX1BIQVNFX1NURVBfVElNRU9VVF9VU1x0KDMwMDAgKiBVU0VDX1BFUl9NU0VDKVxuKyNkZWZpbmUgWkxfUE9MTF9USUVfV1JfVElNRU9VVF9VU1x0KDEwMDAgKiBVU0VDX1BFUl9NU0VDKVxuKyNkZWZpbmUgWkxfUE9MTF9UT0RfUkRfVElNRU9VVF9VU1x0KDMwICogVVNFQ19QRVJfTVNFQylcbisjZGVmaW5lIFpMX1BPTExfVE9EX1dSX1RJTUVPVVRfVVNcdCgxMDAwICogVVNFQ19QRVJfTVNFQylcbiBcbiBlbnVtIHpsMzA3M3hfZmxhZ3Mge1xuIFx0WkwzMDczWF9GTEFHX1JFRl9QSEFTRV9DT01QXzMyX0JJVCxcbkBAIC01NSw2ICs1OSw4IEBAIHN0cnVjdCB6bDMwNzN4X2NoaXBfaW5mbyB7XG4gICogQHJlZ21hcDogcmVnbWFwIHRvIGFjY2VzcyBkZXZpY2UgcmVnaXN0ZXJzXG4gICogQGluZm86IGRldGVjdGVkIGNoaXAgaW5mb1xuICAqIEBtdWx0aW9wX2xvY2s6IHRvIHNlcmlhbGl6ZSBtdWx0aXBsZSByZWdpc3RlciBvcGVyYXRpb25zXG4rICogQHRpZV9sb2NrOiB0byBzZXJpYWxpemUgVElFIHdyaXRlIG9wZXJhdGlvbnNcbisgKiBAcGhhc2Vfc3RlcF9sb2NrOiB0byBzZXJpYWxpemUgb3V0cHV0IHBoYXNlIHN0ZXAgb3BlcmF0aW9uc1xuICAqIEByZWY6IGFycmF5IG9mIGlucHV0IHJlZmVyZW5jZXMnIGludmFyaWFudHNcbiAgKiBAb3V0OiBhcnJheSBvZiBvdXRzJyBpbnZhcmlhbnRzXG4gICogQHN5bnRoOiBhcnJheSBvZiBzeW50aHMnIGludmFyaWFudHNcbkBAIC02Myw2ICs2OSw3IEBAIHN0cnVjdCB6bDMwNzN4X2NoaXBfaW5mbyB7XG4gICogQGt3b3JrZXI6IHRocmVhZCBmb3IgcGVyaW9kaWMgd29ya1xuICAqIEB3b3JrOiBwZXJpb2RpYyB3b3JrXG4gICogQGNsb2NrX2lkOiBjbG9jayBpZCBvZiB0aGUgZGV2aWNlXG4rICogQG91dF9zdGVwX3RpbWVfbWFzazogb3V0cHV0IHN0ZXAtdGltZSBtYXNrIChkZXZpY2UtZ2xvYmFsKVxuICAqIEBwaGFzZV9hdmdfZmFjdG9yOiBwaGFzZSBvZmZzZXQgbWVhc3VyZW1lbnQgYXZlcmFnaW5nIGZhY3RvclxuICAqIEBmcmVxX21vbml0b3I6IGlzIGZyZXF1ZW5jeSBtb25pdG9yIGVuYWJsZWRcbiAgKi9cbkBAIC03MSw2ICs3OCw4IEBAIHN0cnVjdCB6bDMwNzN4X2RldiB7XG4gXHRzdHJ1Y3QgcmVnbWFwXHRcdFx0KnJlZ21hcDtcbiBcdGNvbnN0IHN0cnVjdCB6bDMwNzN4X2NoaXBfaW5mb1x0KmluZm87XG4gXHRzdHJ1Y3QgbXV0ZXhcdFx0XHRtdWx0aW9wX2xvY2s7XG4rXHRzdHJ1Y3QgbXV0ZXhcdFx0XHR0aWVfbG9jaztcbitcdHN0cnVjdCBtdXRleFx0XHRcdHBoYXNlX3N0ZXBfbG9jaztcbiBcbiBcdC8qIEludmFyaWFudHMgKi9cbiBcdHN0cnVjdCB6bDMwNzN4X3JlZlx0cmVmW1pMMzA3M1hfTlVNX1JFRlNdO1xuQEAgLTg3LDYgKzk2LDcgQEAgc3RydWN0IHpsMzA3M3hfZGV2IHtcbiBcbiBcdC8qIFBlci1jaGlwIHBhcmFtZXRlcnMgKi9cbiBcdHU2NFx0XHRcdGNsb2NrX2lkO1xuK1x0dTE2XHRcdFx0b3V0X3N0ZXBfdGltZV9tYXNrO1xuIFx0dThcdFx0XHRwaGFzZV9hdmdfZmFjdG9yO1xuIFx0Ym9vbFx0XHRcdGZyZXFfbW9uaXRvcjtcbiB9O1xuQEAgLTMwOCw2ICszMTgsMTkgQEAgemwzMDczeF9kZXZfb3V0X2lzX2VuYWJsZWQoc3RydWN0IHpsMzA3M3hfZGV2ICp6bGRldiwgdTggaW5kZXgpXG4gXHRyZXR1cm4gemwzMDczeF9zeW50aF9pc19lbmFibGVkKHN5bnRoKSBcdTAwMjZcdTAwMjYgemwzMDczeF9vdXRfaXNfZW5hYmxlZChvdXQpO1xuIH1cbiBcbisvKipcbisgKiB6bDMwNzN4X2Rldl9vdXRfaXNfc3RlcHBlZCAtIGNoZWNrIGlmIG91dHB1dCBpcyBpbiBzdGVwLXRpbWUgbWFza1xuKyAqIEB6bGRldjogcG9pbnRlciB0byB6bDMwNzN4IGRldmljZVxuKyAqIEBpbmRleDogb3V0cHV0IGluZGV4XG4rICpcbisgKiBSZXR1cm46IHRydWUgaWYgb3V0cHV0IGlzIGFmZmVjdGVkIGJ5IHN0ZXAtdGltZSBvcGVyYXRpb25zXG4rICovXG4rc3RhdGljIGlubGluZSBib29sXG4remwzMDczeF9kZXZfb3V0X2lzX3N0ZXBwZWQoc3RydWN0IHpsMzA3M3hfZGV2ICp6bGRldiwgdTggaW5kZXgpXG4re1xuK1x0cmV0dXJuICEhKHpsZGV2LVx1MDAzZW91dF9zdGVwX3RpbWVfbWFzayBcdTAwMjYgQklUKGluZGV4KSk7XG4rfVxuK1xuIC8qKlxuICAqIHpsMzA3M3hfZGV2X291dF9kcGxsX2dldCAtIGdldCBEUExMIElEIHRoZSBvdXRwdXQgaXMgZHJpdmVuIGJ5XG4gICogQHpsZGV2OiBwb2ludGVyIHRvIHpsMzA3M3ggZGV2aWNlXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9kcGxsL3psMzA3M3gvZHBsbC5jIGIvZHJpdmVycy9kcGxsL3psMzA3M3gvZHBsbC5jXG5pbmRleCAwNDg4YWU2YWM0ODZjLi44MzAxYWQzNDM2NThhIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9kcGxsL3psMzA3M3gvZHBsbC5jXG4rKysgYi9kcml2ZXJzL2RwbGwvemwzMDczeC9kcGxsLmNcbkBAIC0yLDYgKzIsNyBAQFxuIFxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2JpdHMuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2JpdGZpZWxkLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9jbGVhbnVwLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9idWcuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2NvbnRhaW5lcl9vZi5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvZGV2X3ByaW50ay5oXHUwMDNlXG5AQCAtMTMsNiArMTQsNyBAQFxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L25ldGxpbmsuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3BsYXRmb3JtX2RldmljZS5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvcHJvcGVydHkuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L3B0cF9jbG9ja19rZXJuZWwuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3NsYWIuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3NwcmludGYuaFx1MDAzZVxuIFxuQEAgLTIyNzUsNDUgKzIyNzcsMzg0IEBAIHpsMzA3M3hfZHBsbF9pbml0X2ZpbmVfcGhhc2VfYWRqdXN0KHN0cnVjdCB6bDMwNzN4X2RldiAqemxkZXYpXG4gXHRyZXR1cm4gemwzMDczeF93cml0ZV91OCh6bGRldiwgWkxfUkVHX1NZTlRIX1BIQVNFX1NISUZUX0NUUkwsIDB4MDEpO1xuIH1cbiBcbisvKiBNYXhpbXVtIGZyZXF1ZW5jeSBhZGp1c3RtZW50OiArLTElIG9mIG5vbWluYWwgaW4gcHBiICovXG4rI2RlZmluZSBaTDMwNzNYX0RQTExfUFRQX01BWF9BREpcdDEwMDAwMDAwXG4rXG4gLyoqXG4tICogemwzMDczeF9kcGxsX2FsbG9jIC0gYWxsb2NhdGUgRFBMTCBkZXZpY2Vcbi0gKiBAemxkZXY6IHBvaW50ZXIgdG8gemwzMDczeCBkZXZpY2Vcbi0gKiBAY2g6IERQTEwgY2hhbm5lbCBudW1iZXJcbisgKiB6bDMwNzN4X2RwbGxfcHRwX2dldHRpbWV4NjQgLSByZWFkIGN1cnJlbnQgdGltZSBmcm9tIFRvRCBjb3VudGVyc1xuKyAqIEBpbmZvOiBQVFAgY2xvY2sgaW5mb1xuKyAqIEB0czogdGltZXNwZWMgdG8gc3RvcmUgY3VycmVudCB0aW1lXG4rICogQHN0czogb3B0aW9uYWwgc3lzdGVtIHRpbWVzdGFtcCBwYWlyIGZvciBjcm9zcy10aW1lc3RhbXBpbmdcbiAgKlxuLSAqIEFsbG9jYXRlcyBEUExMIGRldmljZSBzdHJ1Y3R1cmUgZm9yIGdpdmVuIERQTEwgY2hhbm5lbC5cbisgKiBSZXR1cm46IDAgb24gc3VjY2VzcywgXHUwMDNjMCBvbiBlcnJvclxuKyAqL1xuK3N0YXRpYyBpbnQgemwzMDczeF9kcGxsX3B0cF9nZXR0aW1leDY0KHN0cnVjdCBwdHBfY2xvY2tfaW5mbyAqaW5mbyxcbitcdFx0XHRcdCAgICAgICBzdHJ1Y3QgdGltZXNwZWM2NCAqdHMsXG4rXHRcdFx0XHQgICAgICAgc3RydWN0IHB0cF9zeXN0ZW1fdGltZXN0YW1wICpzdHMpXG4re1xuK1x0c3RydWN0IHpsMzA3M3hfZHBsbCAqemxkcGxsID0gY29udGFpbmVyX29mKGluZm8sIHN0cnVjdCB6bDMwNzN4X2RwbGwsXG4rXHRcdFx0XHRcdFx0ICAgcHRwX2luZm8pO1xuK1xuK1x0Z3VhcmQobXV0ZXgpKFx1MDAyNnpsZHBsbC1cdTAwM2Vsb2NrKTtcbitcbitcdHJldHVybiB6bDMwNzN4X2NoYW5fdG9kX3JlYWQoemxkcGxsLVx1MDAzZWRldiwgemxkcGxsLVx1MDAzZWlkLCBmYWxzZSwgdHMsIHN0cyk7XG4rfVxuK1xuKy8qKlxuKyAqIHpsMzA3M3hfZHBsbF9wdHBfc2V0dGltZTY0IC0gc2V0IFRvRCBjb3VudGVycyB0byBnaXZlbiB0aW1lXG4rICogQGluZm86IFBUUCBjbG9jayBpbmZvXG4rICogQHRzOiB0aW1lc3BlYyB3aXRoIHRpbWUgdG8gc2V0XG4gICpcbi0gKiBSZXR1cm46IHBvaW50ZXIgdG8gRFBMTCBkZXZpY2Ugb24gc3VjY2VzcywgZXJyb3IgcG9pbnRlciBvbiBlcnJvclxuKyAqIFJldHVybjogMCBvbiBzdWNjZXNzLCBcdTAwM2MwIG9uIGVycm9yXG4gICovXG4tc3RydWN0IHpsMzA3M3hfZHBsbCAqXG4temwzMDczeF9kcGxsX2FsbG9jKHN0cnVjdCB6bDMwNzN4X2RldiAqemxkZXYsIHU4IGNoKVxuK3N0YXRpYyBpbnQgemwzMDczeF9kcGxsX3B0cF9zZXR0aW1lNjQoc3RydWN0IHB0cF9jbG9ja19pbmZvICppbmZvLFxuK1x0XHRcdFx0ICAgICAgY29uc3Qgc3RydWN0IHRpbWVzcGVjNjQgKnRzKVxuIHtcbi1cdHN0cnVjdCB6bDMwNzN4X2RwbGwgKnpsZHBsbDtcbitcdHN0cnVjdCB6bDMwNzN4X2RwbGwgKnpsZHBsbCA9IGNvbnRhaW5lcl9vZihpbmZvLCBzdHJ1Y3QgemwzMDczeF9kcGxsLFxuK1x0XHRcdFx0XHRcdCAgIHB0cF9pbmZvKTtcbiBcbi1cdHpsZHBsbCA9IGt6YWxsb2Nfb2JqKCp6bGRwbGwpO1xuLVx0aWYgKCF6bGRwbGwpXG4tXHRcdHJldHVybiBFUlJfUFRSKC1FTk9NRU0pO1xuK1x0Z3VhcmQobXV0ZXgpKFx1MDAyNnpsZHBsbC1cdTAwM2Vsb2NrKTtcbiBcbi1cdHpsZHBsbC1cdTAwM2VkZXYgPSB6bGRldjtcbi1cdHpsZHBsbC1cdTAwM2VpZCA9IGNoO1xuLVx0bXV0ZXhfaW5pdChcdTAwMjZ6bGRwbGwtXHUwMDNlbG9jayk7XG4tXHRJTklUX0xJU1RfSEVBRChcdTAwMjZ6bGRwbGwtXHUwMDNlcGlucyk7XG4rXHRyZXR1cm4gemwzMDczeF9jaGFuX3RvZF93cml0ZSh6bGRwbGwtXHUwMDNlZGV2LCB6bGRwbGwtXHUwMDNlaWQsICp0cyk7XG4rfVxuIFxuLVx0cmV0dXJuIHpsZHBsbDtcbisvKipcbisgKiB6bDMwNzN4X2RwbGxfcHRwX2FkanRpbWVfcGhhc2Vfc3RlcCAtIGFkanVzdCBzdWItc2Vjb25kIHRpbWUgdmlhIHBoYXNlIHN0ZXBcbisgKiBAemxkcGxsOiBEUExMIGNoYW5uZWxcbisgKiBAZGVsdGE6IHRpbWUgYWRqdXN0bWVudCBpbiBuYW5vc2Vjb25kcyAobXVzdCBiZSB3aXRoaW4gKC1OU0VDX1BFUl9TRUMsXG4rICogICAgICAgICBOU0VDX1BFUl9TRUMpKVxuKyAqXG4rICogVXNlcyB0aGUgb3V0cHV0IHBoYXNlIHN0ZXAgbWVjaGFuaXNtIHdpdGggdG9kX3N0ZXA9MSB0byBhZGp1c3QgYm90aFxuKyAqIHRoZSBvdXRwdXQgY2xvY2sgcGhhc2UgYW5kIHRoZSBUb0QgY291bnRlciBzaW11bHRhbmVvdXNseS4gVGhpcyBrZWVwc1xuKyAqIG91dHB1dHMgYW5kIFRvRCBjb2hlcmVudC4gT25seSB2YWxpZCBmb3IgTkNPLlxuKyAqXG4rICogT3V0cHV0cyBhcmUgZ3JvdXBlZCBieSBzeW50aGVzaXplciBzaW5jZSB0aGUgcGhhc2Ugc3RlcCB2YWx1ZSBpcyBpblxuKyAqIHN5bnRoZXNpemVyIGNsb2NrIGN5Y2xlcy4gVGhlIGZpcnN0IHN5bnRoIGdyb3VwIHdpdGggZW5hYmxlZCBvdXRwdXRzXG4rICogdXNlcyB0b2Rfc3RlcCB0byBhZGp1c3QgYm90aCBvdXRwdXRzIGFuZCB0aGUgVG9EIGNvdW50ZXIuIFJlbWFpbmluZ1xuKyAqIGdyb3VwcyBzdGVwIG91dHB1dHMgb25seS4gSWYgbm8gc3ludGggaGFzIGVuYWJsZWQgb3V0cHV0cywgdGhlIFRvRFxuKyAqIGNvdW50ZXIgaXMgc3RlcHBlZCBhbG9uZSB1c2luZyBhbiBlbXB0eSBvdXRwdXQgbWFzayAodGhlIEZXIHVzZXNcbisgKiB0aGUgZmlyc3QgZW5hYmxlZCBzeW50aCdzIHBlcmlvZCBmb3IgdGhlIGNvbnZlcnNpb24pLlxuKyAqXG4rICogUmV0dXJuOlxuKyAqICogJTBcdFx0XHQtIHN1Y2Nlc3MgKG9yIHBhcnRpYWwgc3VjY2VzcyBpZiBhIGxhdGVyIHN5bnRoIGdyb3VwXG4rICpcdFx0XHQgIGZhaWxlZCBhZnRlciB0aGUgZmlyc3Qgd2FzIGFscmVhZHkgc3RlcHBlZClcbisgKiAqICUtRU9QTk9UU1VQUFx0LSBubyBzeW50aHMgYXZhaWxhYmxlXG4rICogKiBuZWdhdGl2ZVx0XHQtIGVycm9yXG4rICovXG4rc3RhdGljIGludCB6bDMwNzN4X2RwbGxfcHRwX2FkanRpbWVfcGhhc2Vfc3RlcChzdHJ1Y3QgemwzMDczeF9kcGxsICp6bGRwbGwsXG4rXHRcdFx0XHRcdCAgICAgICBzNjQgZGVsdGEpXG4re1xuK1x0dTE2IHN5bnRoX21hc2tbWkwzMDczWF9OVU1fU1lOVEhTXSA9IHt9O1xuK1x0c3RydWN0IHpsMzA3M3hfZGV2ICp6bGRldiA9IHpsZHBsbC1cdTAwM2VkZXY7XG4rXHRjb25zdCBzdHJ1Y3QgemwzMDczeF9zeW50aCAqc3ludGg7XG4rXHRzdHJ1Y3QgemwzMDczeF9kcGxsX3BpbiAqcGluO1xuK1x0dTMyIGZpcnN0X3N5bnRoX2ZyZXEgPSAwO1xuK1x0Ym9vbCB0b2Rfc3RlcHBlZCA9IGZhbHNlO1xuK1x0czMyIHN0ZXBfY3ljbGVzO1xuK1x0dTMyIHN5bnRoX2ZyZXE7XG4rXHRpbnQgcmM7XG4rXHR1OCBpO1xuK1xuK1x0LyogQnVpbGQgcGVyLXN5bnRoIG91dHB1dCBtYXNrcyBmcm9tIHJlZ2lzdGVyZWQgb3V0cHV0IHBpbnMgKi9cbitcdGxpc3RfZm9yX2VhY2hfZW50cnkocGluLCBcdTAwMjZ6bGRwbGwtXHUwMDNlcGlucywgbGlzdCkge1xuK1x0XHR1OCBvdXRfaWQsIHN5bnRoX2lkO1xuK1xuK1x0XHRpZiAoemwzMDczeF9kcGxsX2lzX2lucHV0X3BpbihwaW4pKVxuK1x0XHRcdGNvbnRpbnVlO1xuK1xuK1x0XHRvdXRfaWQgPSB6bDMwNzN4X291dHB1dF9waW5fb3V0X2dldChwaW4tXHUwMDNlaWQpO1xuK1xuK1x0XHRpZiAoIXpsMzA3M3hfZGV2X291dF9pc19zdGVwcGVkKHpsZGV2LCBvdXRfaWQpKVxuK1x0XHRcdGNvbnRpbnVlO1xuK1xuK1x0XHRzeW50aF9pZCA9IHpsMzA3M3hfZGV2X291dF9zeW50aF9nZXQoemxkZXYsIG91dF9pZCk7XG4rXHRcdGlmIChzeW50aF9pZCBcdTAwM2U9IFpMMzA3M1hfTlVNX1NZTlRIUykge1xuK1x0XHRcdGRldl93YXJuKHpsZGV2LVx1MDAzZWRldiwgXCJVbmV4cGVjdGVkIHN5bnRoIGlkIGZvciBPVVQldVxcblwiLFxuK1x0XHRcdFx0IG91dF9pZCk7XG4rXHRcdFx0Y29udGludWU7XG4rXHRcdH1cbitcdFx0c3ludGhfbWFza1tzeW50aF9pZF0gfD0gQklUKG91dF9pZCk7XG4rXHR9XG4rXG4rXHQvKiBQcm9jZXNzIGVhY2ggc3ludGggZ3JvdXAgKi9cbitcdGZvciAoaSA9IDA7IGkgXHUwMDNjIFpMMzA3M1hfTlVNX1NZTlRIUzsgaSsrKSB7XG4rXHRcdHN5bnRoID0gemwzMDczeF9zeW50aF9zdGF0ZV9nZXQoemxkZXYsIGkpO1xuK1x0XHRpZiAoIXpsMzA3M3hfc3ludGhfaXNfZW5hYmxlZChzeW50aCkgfHxcbitcdFx0ICAgIHpsMzA3M3hfc3ludGhfZHBsbF9nZXQoc3ludGgpICE9IHpsZHBsbC1cdTAwM2VpZClcbitcdFx0XHRjb250aW51ZTtcbitcbitcdFx0c3ludGhfZnJlcSA9IHpsMzA3M3hfc3ludGhfZnJlcV9nZXQoc3ludGgpO1xuK1xuK1x0XHQvKiBSZW1lbWJlciBmaXJzdCBlbmFibGVkIHN5bnRoIGZyZXEgZm9yIFRvRC1vbmx5IGZhbGxiYWNrICovXG4rXHRcdGlmICghZmlyc3Rfc3ludGhfZnJlcSlcbitcdFx0XHRmaXJzdF9zeW50aF9mcmVxID0gc3ludGhfZnJlcTtcbitcbitcdFx0aWYgKCFzeW50aF9tYXNrW2ldKVxuK1x0XHRcdGNvbnRpbnVlO1xuK1xuK1x0XHQvKiBTYWZlIGZvciBzMzI6IG1heCBzeW50aCBmcmVxIGlzIDc1MCBNSHogKi9cbitcdFx0c3RlcF9jeWNsZXMgPSBkaXZfczY0KGRlbHRhICogc3ludGhfZnJlcSwgTlNFQ19QRVJfU0VDKTtcbitcbitcdFx0cmMgPSB6bDMwNzN4X2NoYW5fcGhhc2Vfc3RlcCh6bGRldiwgemxkcGxsLVx1MDAzZWlkLFxuK1x0XHRcdFx0XHQgICAgIHN5bnRoX21hc2tbaV0sIHN0ZXBfY3ljbGVzLFxuK1x0XHRcdFx0XHQgICAgICF0b2Rfc3RlcHBlZCk7XG4rXHRcdGlmIChyYykge1xuK1x0XHRcdGlmICh0b2Rfc3RlcHBlZCkge1xuK1x0XHRcdFx0ZGV2X3dhcm4oemxkZXYtXHUwMDNlZGV2LFxuK1x0XHRcdFx0XHQgXCJQYXJ0aWFsIHBoYXNlIHN0ZXAgZmFpbHVyZVxcblwiKTtcbitcdFx0XHRcdHJldHVybiAwO1xuK1x0XHRcdH1cbitcdFx0XHRyZXR1cm4gcmM7XG4rXHRcdH1cbitcdFx0dG9kX3N0ZXBwZWQgPSB0cnVlO1xuK1x0fVxuK1xuK1x0aWYgKCFmaXJzdF9zeW50aF9mcmVxKVxuK1x0XHRyZXR1cm4gLUVPUE5PVFNVUFA7XG4rXG4rXHQvKiBObyBlbmFibGVkIG91dHB1dHMgZm91bmQ7IHN0ZXAgVG9EIGNvdW50ZXIgb25seSB1c2luZyB0aGVcbitcdCAqIGZpcnN0IGVuYWJsZWQgc3ludGgncyBwZXJpb2QgKGVtcHR5IG91dHB1dCBtYXNrKS5cbitcdCAqL1xuK1x0aWYgKCF0b2Rfc3RlcHBlZCkge1xuK1x0XHRzdGVwX2N5Y2xlcyA9IGRpdl9zNjQoZGVsdGEgKiBmaXJzdF9zeW50aF9mcmVxLCBOU0VDX1BFUl9TRUMpO1xuK1x0XHRyZXR1cm4gemwzMDczeF9jaGFuX3BoYXNlX3N0ZXAoemxkZXYsIHpsZHBsbC1cdTAwM2VpZCwgMCxcbitcdFx0XHRcdFx0ICAgICAgIHN0ZXBfY3ljbGVzLCB0cnVlKTtcbitcdH1cbitcbitcdHJldHVybiAwO1xuIH1cbiBcbiAvKipcbi0gKiB6bDMwNzN4X2RwbGxfZnJlZSAtIGZyZWUgRFBMTCBkZXZpY2Vcbi0gKiBAemxkcGxsOiBwb2ludGVyIHRvIHpsMzA3M3hfZHBsbCBzdHJ1Y3R1cmVcbisgKiB6bDMwNzN4X2RwbGxfcHRwX2FkanRpbWUgLSBhZGp1c3QgUFRQIGNsb2NrIHRpbWVcbisgKiBAaW5mbzogUFRQIGNsb2NrIGluZm9cbisgKiBAZGVsdGE6IHRpbWUgYWRqdXN0bWVudCBpbiBuYW5vc2Vjb25kc1xuICAqXG4tICogRGVhbGxvY2F0ZXMgZ2l2ZW4gRFBMTCBkZXZpY2UgcHJldmlvdXNseSBhbGxvY2F0ZWQgYnkgQHpsMzA3M3hfZHBsbF9hbGxvYy5cbisgKiBGb3IgTkNPLCBsYXJnZSBkZWx0YXMgKFx1MDAzZT0gMSBzZWNvbmQpIGFyZSBzcGxpdCBpbnRvIGEgVG9EXG4rICogcmVhZC1tb2RpZnktd3JpdGUgZm9yIHRoZSBzZWNvbmRzIHBhcnQgYW5kIGFuIG91dHB1dCBwaGFzZSBzdGVwIGZvclxuKyAqIHRoZSBzdWItc2Vjb25kIHJlbWFpbmRlci4gU3ViLXNlY29uZCBkZWx0YXMgdXNlIHBoYXNlIHN0ZXAgZGlyZWN0bHksXG4rICogZmFsbGluZyBiYWNrIHRvIFRvRCByZWFkLW1vZGlmeS13cml0ZSBpZiBwaGFzZSBzdGVwIG9yIFRJRSB3cml0ZVxuKyAqIGZhaWxzLiBJbiBBVVRPL1JFRkxPQ0sgbW9kZXMsIGxhcmdlIGRlbHRhcyBhcmUgc3BsaXQgaW50byBUb0RcbisgKiByZWFkLW1vZGlmeS13cml0ZSBmb3Igc2Vjb25kcyBhbmQgVElFIHdyaXRlIGZvciB0aGUgc3ViLXNlY29uZFxuKyAqIHJlbWFpbmRlci4gU3ViLXNlY29uZCBkZWx0YXMgdXNlIFRJRSB3cml0ZSBkaXJlY3RseS5cbisgKlxuKyAqIElmIHRoZSBzZWNvbmRzIHBhcnQgd2FzIGFscmVhZHkgY29tbWl0dGVkIHdoZW4gdGhlIHN1Yi1zZWNvbmRcbisgKiBtZWNoYW5pc20gZmFpbHMsIHJldHVybnMgMCB0byBwcmV2ZW50IHRoZSBQVFAgc2Vydm8gZnJvbSByZXRyeWluZ1xuKyAqIHRoZSBmdWxsIGRlbHRhIGFuZCBhcHBseWluZyBzZWNvbmRzIGFnYWluLlxuKyAqXG4rICogUmV0dXJuOiAwIG9uIHN1Y2Nlc3MgKG9yIHBhcnRpYWwgc3VjY2VzcyksIFx1MDAzYzAgb24gZXJyb3JcbiAgKi9cbi12b2lkXG4temwzMDczeF9kcGxsX2ZyZWUoc3RydWN0IHpsMzA3M3hfZHBsbCAqemxkcGxsKVxuK3N0YXRpYyBpbnQgemwzMDczeF9kcGxsX3B0cF9hZGp0aW1lKHN0cnVjdCBwdHBfY2xvY2tfaW5mbyAqaW5mbywgczY0IGRlbHRhKVxuIHtcbi1cdFdBUk4oemxkcGxsLVx1MDAzZWRwbGxfZGV2LCBcIkRQTEwgZGV2aWNlIGlzIHN0aWxsIHJlZ2lzdGVyZWRcXG5cIik7XG4rXHRzdHJ1Y3QgemwzMDczeF9kcGxsICp6bGRwbGwgPSBjb250YWluZXJfb2YoaW5mbywgc3RydWN0IHpsMzA3M3hfZHBsbCxcbitcdFx0XHRcdFx0XHQgICBwdHBfaW5mbyk7XG4rXHRzdHJ1Y3QgemwzMDczeF9kZXYgKnpsZGV2ID0gemxkcGxsLVx1MDAzZWRldjtcbitcdGNvbnN0IHN0cnVjdCB6bDMwNzN4X2NoYW4gKmNoYW47XG4rXHRib29sIHNlY19hZGp1c3RlZCA9IGZhbHNlO1xuK1x0c3RydWN0IHRpbWVzcGVjNjQgdHM7XG4rXHRpbnQgcmM7XG4gXG4tXHRtdXRleF9kZXN0cm95KFx1MDAyNnpsZHBsbC1cdTAwM2Vsb2NrKTtcbi1cdGtmcmVlKHpsZHBsbCk7XG4rXHRpZiAoIWRlbHRhKVxuK1x0XHRyZXR1cm4gMDtcbitcbitcdGd1YXJkKG11dGV4KShcdTAwMjZ6bGRwbGwtXHUwMDNlbG9jayk7XG4rXG4rXHQvKiBNb2RlcyB3aXRob3V0IHBoYXNlIHN0ZXAgb3IgVElFIHVzZSBwbGFpbiBUb0QgYWRqdXN0ICovXG4rXHRjaGFuID0gemwzMDczeF9jaGFuX3N0YXRlX2dldCh6bGRldiwgemxkcGxsLVx1MDAzZWlkKTtcbitcdGlmICghemwzMDczeF9jaGFuX21vZGVfaXNfbmNvKGNoYW4pIFx1MDAyNlx1MDAyNlxuK1x0ICAgICF6bDMwNzN4X2NoYW5fbW9kZV9zdXBwb3J0c190aWUoY2hhbikpXG4rXHRcdHJldHVybiB6bDMwNzN4X2NoYW5fdG9kX2FkanVzdCh6bGRldiwgemxkcGxsLVx1MDAzZWlkLFxuK1x0XHRcdFx0XHQgICAgICAgbnNfdG9fdGltZXNwZWM2NChkZWx0YSkpO1xuK1xuK1x0LyogU3BsaXQgb2ZmIHNlY29uZHMgdmlhIFRvRCByZWFkLW1vZGlmeS13cml0ZSBzbyB0aGUgc3ViLXNlY29uZFxuK1x0ICogcmVtYWluZGVyIGNhbiBiZSBhcHBsaWVkIHRocm91Z2ggdGhlIG91dHB1dC1jb2hlcmVudCBtZWNoYW5pc21cbitcdCAqIChwaGFzZSBzdGVwIG9yIFRJRSB3cml0ZSkuXG4rXHQgKi9cbitcdGlmIChkZWx0YSBcdTAwM2U9IE5TRUNfUEVSX1NFQyB8fCBkZWx0YSBcdTAwM2M9IC1OU0VDX1BFUl9TRUMpIHtcbitcdFx0czMyIHJlbWFpbmRlcjtcbitcbitcdFx0dHMudHZfc2VjID0gZGl2X3M2NF9yZW0oZGVsdGEsIE5TRUNfUEVSX1NFQywgXHUwMDI2cmVtYWluZGVyKTtcbitcdFx0dHMudHZfbnNlYyA9IDA7XG4rXHRcdGRlbHRhID0gcmVtYWluZGVyO1xuK1xuK1x0XHRyYyA9IHpsMzA3M3hfY2hhbl90b2RfYWRqdXN0KHpsZGV2LCB6bGRwbGwtXHUwMDNlaWQsIHRzKTtcbitcdFx0aWYgKHJjKVxuK1x0XHRcdHJldHVybiByYztcbitcbitcdFx0LyogTm8gc3ViLXNlY29uZCByZW1haW5kZXIsIGRvbmUgKi9cbitcdFx0aWYgKCFkZWx0YSlcbitcdFx0XHRyZXR1cm4gMDtcbitcbitcdFx0LyogV2FpdCBmb3IgdGhlIFRvRCB3cml0ZSB0byBiZSBhcHBsaWVkIGF0IHRoZSAxIEh6IGVkZ2VcbitcdFx0ICogYmVmb3JlIGlzc3VpbmcgcGhhc2Ugc3RlcCBvciBUSUUgd3JpdGUsIHNvIHRoZSBwZW5kaW5nXG4rXHRcdCAqIFdSX05FWFRfMUhaIGRvZXMgbm90IG92ZXJ3cml0ZSB0aGUgc3ViLXNlY29uZCBhZGp1c3RtZW50LlxuK1x0XHQgKi9cbitcdFx0cmMgPSB6bDMwNzN4X2NoYW5fdG9kX3JlYWR5X3dhaXQoemxkZXYsIHpsZHBsbC1cdTAwM2VpZCk7XG4rXHRcdGlmIChyYylcbitcdFx0XHRyZXR1cm4gcmM7XG4rXG4rXHRcdHNlY19hZGp1c3RlZCA9IHRydWU7XG4rXHR9XG4rXG4rXHQvKiBBcHBseSBzdWItc2Vjb25kIGRlbHRhIHZpYSBwaGFzZSBzdGVwIChOQ08pIG9yIFRJRSB3cml0ZSAqL1xuK1x0aWYgKHpsMzA3M3hfY2hhbl9tb2RlX2lzX25jbyhjaGFuKSkge1xuK1x0XHRyYyA9IHpsMzA3M3hfZHBsbF9wdHBfYWRqdGltZV9waGFzZV9zdGVwKHpsZHBsbCwgZGVsdGEpO1xuK1x0XHRpZiAoIXJjKVxuK1x0XHRcdHJldHVybiAwO1xuK1x0fSBlbHNlIHtcbitcdFx0cmMgPSB6bDMwNzN4X2NoYW5fdGllX3dyaXRlKHpsZGV2LCB6bGRwbGwtXHUwMDNlaWQsIGRlbHRhKTtcbitcdFx0aWYgKCFyYylcbitcdFx0XHRyZXR1cm4gMDtcbitcdH1cbitcbitcdC8qIFBoYXNlIHN0ZXAgb3IgVElFIHdyaXRlIGZhaWxlZCwgZmFsbCBiYWNrIHRvIFRvRCBhZGp1c3QgKi9cbitcdHJjID0gemwzMDczeF9jaGFuX3RvZF9hZGp1c3QoemxkZXYsIHpsZHBsbC1cdTAwM2VpZCxcbitcdFx0XHRcdCAgICAgbnNfdG9fdGltZXNwZWM2NChkZWx0YSkpO1xuK1xuK1x0LyogSW4gdGhlIHVubGlrZWx5IGV2ZW50IHRoYXQgYm90aCBwaGFzZSBzdGVwL1RJRSB3cml0ZSBhbmQgZmFsbGJhY2tcbitcdCAqIFRvRCBhZGp1c3QgZmFpbCBhZnRlciBzZWNvbmRzIHdlcmUgYWxyZWFkeSBjb21taXR0ZWQsIHJldHVyblxuK1x0ICogc3VjY2VzcyB0byBwcmV2ZW50IHRoZSBQVFAgc2Vydm8gZnJvbSByZXRyeWluZyB0aGUgZnVsbCBkZWx0YSBhbmRcbitcdCAqIGFwcGx5aW5nIHNlY29uZHMgYWdhaW4uIFRoZSBzdWItc2Vjb25kIHJlc2lkdWFsIHdpbGwgc2VsZi1jb3JyZWN0XG4rXHQgKiBpbiB0aGUgbmV4dCBzZXJ2byBjeWNsZS5cbitcdCAqL1xuK1x0aWYgKHJjIFx1MDAyNlx1MDAyNiBzZWNfYWRqdXN0ZWQpIHtcbitcdFx0ZGV2X3dhcm4oemxkZXYtXHUwMDNlZGV2LFxuK1x0XHRcdCBcIlN1Yi1zZWNvbmQgYWRqdXN0bWVudCBmYWlsZWQgYWZ0ZXIgc2Vjb25kcyBhcHBsaWVkXFxuXCIpO1xuK1x0XHRyZXR1cm4gMDtcbitcdH1cbitcbitcdHJldHVybiByYztcbit9XG4rXG4rLyoqXG4rICogemwzMDczeF9kcGxsX3B0cF9hZGpmaW5lIC0gYWRqdXN0IFBUUCBjbG9jayBmcmVxdWVuY3lcbisgKiBAaW5mbzogUFRQIGNsb2NrIGluZm9cbisgKiBAc2NhbGVkX3BwbTogZnJlcXVlbmN5IGFkanVzdG1lbnQgaW4gc2NhbGVkIHBwbSAocHBtICogMl4xNilcbisgKlxuKyAqIE9ubHkgc3VwcG9ydGVkIGZvciBOQ08uIFdyaXRlcyB0aGUgZGVsdGEgZnJlcXVlbmN5IG9mZnNldCByZWdpc3Rlci5cbisgKlxuKyAqIFJldHVybjpcbisgKiAqICUwXHRcdFx0LSBzdWNjZXNzIG9yIEBzY2FsZWRfcHBtIGlzIHplcm8gKG5vLW9wKVxuKyAqICogJS1FT1BOT1RTVVBQXHQtIE5DTyBwaW4gaXMgbm90IGNvbm5lY3RlZCBhbmQgQHNjYWxlZF9wcG0gaXMgbm9uLXplcm9cbisgKiAqIG5lZ2F0aXZlXHRcdC0gb3RoZXIgZXJyb3JcbisgKi9cbitzdGF0aWMgaW50XG4remwzMDczeF9kcGxsX3B0cF9hZGpmaW5lKHN0cnVjdCBwdHBfY2xvY2tfaW5mbyAqaW5mbywgbG9uZyBzY2FsZWRfcHBtKVxuK3tcbitcdHN0cnVjdCB6bDMwNzN4X2RwbGwgKnpsZHBsbCA9IGNvbnRhaW5lcl9vZihpbmZvLCBzdHJ1Y3QgemwzMDczeF9kcGxsLFxuK1x0XHRcdFx0XHRcdCAgIHB0cF9pbmZvKTtcbitcdGNvbnN0IHN0cnVjdCB6bDMwNzN4X2NoYW4gKmNoYW47XG4rXHRzNjQgb2Zmc2V0O1xuK1xuK1x0LyogQ29udmVydCBzY2FsZWRfcHBtIHRvIGRmX29mZnNldCBpbiAyXi00OCBzdGVwczpcbitcdCAqICAgZGZfb2Zmc2V0ID0gLShzY2FsZWRfcHBtICogMl4zMikgLyAxMF42XG4rXHQgKlxuK1x0ICogU2ltcGxpZnkgdG8gYXZvaWQgb3ZlcmZsb3c6XG4rXHQgKiAgIGRmX29mZnNldCA9IC0oc2NhbGVkX3BwbSAqIDJeMjYpIC8gNV42XG4rXHQgKiAgIGRmX29mZnNldCA9IC0oc2NhbGVkX3BwbSAqIDY3MTA4ODY0KSAvIDE1NjI1XG4rXHQgKi9cbitcdG9mZnNldCA9IC1kaXZfczY0KChzNjQpc2NhbGVkX3BwbSAqIDY3MTA4ODY0TEwsIDE1NjI1KTtcbitcbitcdGd1YXJkKG11dGV4KShcdTAwMjZ6bGRwbGwtXHUwMDNlbG9jayk7XG4rXG4rXHRjaGFuID0gemwzMDczeF9jaGFuX3N0YXRlX2dldCh6bGRwbGwtXHUwMDNlZGV2LCB6bGRwbGwtXHUwMDNlaWQpO1xuK1x0aWYgKCF6bDMwNzN4X2NoYW5fbW9kZV9pc19uY28oY2hhbikpXG4rXHRcdHJldHVybiBzY2FsZWRfcHBtID8gLUVPUE5PVFNVUFAgOiAwO1xuK1x0aWYgKG9mZnNldCA9PSBjaGFuLVx1MDAzZWRmX29mZnNldClcbitcdFx0cmV0dXJuIDA7XG4rXG4rXHRyZXR1cm4gemwzMDczeF9jaGFuX2RmX29mZnNldF9zZXQoemxkcGxsLVx1MDAzZWRldiwgemxkcGxsLVx1MDAzZWlkLCBvZmZzZXQpO1xuK31cbitcbisvKipcbisgKiB6bDMwNzN4X2RwbGxfcHRwX2FkanBoYXNlIC0gYWRqdXN0IFBUUCBjbG9jayBwaGFzZVxuKyAqIEBpbmZvOiBQVFAgY2xvY2sgaW5mb1xuKyAqIEBkZWx0YTogcGhhc2UgYWRqdXN0bWVudCBpbiBuYW5vc2Vjb25kc1xuKyAqXG4rICogT25seSBzdXBwb3J0ZWQgaW4gQVVUTyBhbmQgUkVGTE9DSyBtb2Rlcy4gVXNlcyBUSUUgd3JpdGUgZm9yXG4rICogbmFub3NlY29uZCByZXNvbHV0aW9uIHBoYXNlIGFkanVzdG1lbnQuXG4rICpcbisgKiBSZXR1cm46XG4rICogKiAlMFx0XHRcdC0gc3VjY2VzcyBvciBAZGVsdGEgaXMgemVybyAobm8tb3ApXG4rICogKiAlLUVPUE5PVFNVUFBcdC0gbW9kZSBkb2VzIG5vdCBzdXBwb3J0IFRJRSBhbmQgQGRlbHRhIGlzIG5vbi16ZXJvXG4rICogKiBuZWdhdGl2ZVx0XHQtIG90aGVyIGVycm9yXG4rICovXG4rc3RhdGljIGludCB6bDMwNzN4X2RwbGxfcHRwX2FkanBoYXNlKHN0cnVjdCBwdHBfY2xvY2tfaW5mbyAqaW5mbywgczMyIGRlbHRhKVxuK3tcbitcdHN0cnVjdCB6bDMwNzN4X2RwbGwgKnpsZHBsbCA9IGNvbnRhaW5lcl9vZihpbmZvLCBzdHJ1Y3QgemwzMDczeF9kcGxsLFxuK1x0XHRcdFx0XHRcdCAgIHB0cF9pbmZvKTtcbitcdHN0cnVjdCB6bDMwNzN4X2RldiAqemxkZXYgPSB6bGRwbGwtXHUwMDNlZGV2O1xuK1x0Y29uc3Qgc3RydWN0IHpsMzA3M3hfY2hhbiAqY2hhbjtcbitcbitcdGlmICghZGVsdGEpXG4rXHRcdHJldHVybiAwO1xuK1xuK1x0Z3VhcmQobXV0ZXgpKFx1MDAyNnpsZHBsbC1cdTAwM2Vsb2NrKTtcbitcbitcdGNoYW4gPSB6bDMwNzN4X2NoYW5fc3RhdGVfZ2V0KHpsZGV2LCB6bGRwbGwtXHUwMDNlaWQpO1xuK1xuK1x0aWYgKCF6bDMwNzN4X2NoYW5fbW9kZV9zdXBwb3J0c190aWUoY2hhbikpXG4rXHRcdHJldHVybiAtRU9QTk9UU1VQUDtcbitcbitcdHJldHVybiB6bDMwNzN4X2NoYW5fdGllX3dyaXRlKHpsZGV2LCB6bGRwbGwtXHUwMDNlaWQsIGRlbHRhKTtcbit9XG4rXG4rc3RhdGljIHMzMlxuK3psMzA3M3hfZHBsbF9wdHBfZ2V0bWF4cGhhc2Uoc3RydWN0IHB0cF9jbG9ja19pbmZvICppbmZvIF9fYWx3YXlzX3VudXNlZClcbit7XG4rXHQvKiBIVyBsaW1pdHMgVElFIHdyaXRlIHRvICstMSBzZWNvbmQuIFJldHVybiB0aGUgY29uc3RhbnQgSFdcbitcdCAqIGxpbWl0IGFuZCBsZXQgYWRqcGhhc2UgaGFuZGxlIG1vZGUtc3BlY2lmaWMgY2hlY2tzLlxuK1x0ICovXG4rXHRyZXR1cm4gTlNFQ19QRVJfU0VDIC0gMTtcbit9XG4rXG4rc3RhdGljIGNvbnN0IHN0cnVjdCBwdHBfY2xvY2tfaW5mbyB6bDMwNzN4X2RwbGxfcHRwX2Nsb2NrX2luZm8gPSB7XG4rXHQub3duZXJcdFx0PSBUSElTX01PRFVMRSxcbitcdC5tYXhfYWRqXHQ9IFpMMzA3M1hfRFBMTF9QVFBfTUFYX0FESixcbitcdC5nZXR0aW1leDY0XHQ9IHpsMzA3M3hfZHBsbF9wdHBfZ2V0dGltZXg2NCxcbitcdC5zZXR0aW1lNjRcdD0gemwzMDczeF9kcGxsX3B0cF9zZXR0aW1lNjQsXG4rXHQuYWRqdGltZVx0PSB6bDMwNzN4X2RwbGxfcHRwX2FkanRpbWUsXG4rXHQuYWRqZmluZVx0PSB6bDMwNzN4X2RwbGxfcHRwX2FkamZpbmUsXG4rXHQuYWRqcGhhc2VcdD0gemwzMDczeF9kcGxsX3B0cF9hZGpwaGFzZSxcbitcdC5nZXRtYXhwaGFzZVx0PSB6bDMwNzN4X2RwbGxfcHRwX2dldG1heHBoYXNlLFxuK307XG4rXG4rLyoqXG4rICogemwzMDczeF9kcGxsX3B0cF9yZWdpc3RlciAtIHJlZ2lzdGVyIFBUUCBjbG9jayBmb3IgYSBEUExMIGNoYW5uZWxcbisgKiBAemxkcGxsOiBEUExMIGNoYW5uZWwgdG8gcmVnaXN0ZXIgUFRQIGNsb2NrIGZvclxuKyAqXG4rICogUmV0dXJuOiAwIG9uIHN1Y2Nlc3MsIFx1MDAzYzAgb24gZXJyb3JcbisgKi9cbitzdGF0aWMgaW50IHpsMzA3M3hfZHBsbF9wdHBfcmVnaXN0ZXIoc3RydWN0IHpsMzA3M3hfZHBsbCAqemxkcGxsKVxuK3tcbitcdHN0cnVjdCB6bDMwNzN4X2RldiAqemxkZXYgPSB6bGRwbGwtXHUwMDNlZGV2O1xuK1x0c3RydWN0IHB0cF9jbG9jayAqcHRwX2Nsb2NrO1xuK1xuK1x0emxkcGxsLVx1MDAzZXB0cF9pbmZvID0gemwzMDczeF9kcGxsX3B0cF9jbG9ja19pbmZvO1xuK1x0c25wcmludGYoemxkcGxsLVx1MDAzZXB0cF9pbmZvLm5hbWUsIHNpemVvZih6bGRwbGwtXHUwMDNlcHRwX2luZm8ubmFtZSksXG4rXHRcdCBcIiVzLWRwbGwldVwiLCBkZXZfbmFtZSh6bGRldi1cdTAwM2VkZXYpLCB6bGRwbGwtXHUwMDNlaWQpO1xuK1xuK1x0cHRwX2Nsb2NrID0gcHRwX2Nsb2NrX3JlZ2lzdGVyKFx1MDAyNnpsZHBsbC1cdTAwM2VwdHBfaW5mbywgemxkZXYtXHUwMDNlZGV2KTtcbitcdGlmIChJU19FUlIocHRwX2Nsb2NrKSkge1xuK1x0XHRkZXZfZXJyKHpsZGV2LVx1MDAzZWRldiwgXCJGYWlsZWQgdG8gcmVnaXN0ZXIgUFRQIGNsb2NrIGZvciBEUExMJXVcXG5cIixcbitcdFx0XHR6bGRwbGwtXHUwMDNlaWQpO1xuK1x0XHRyZXR1cm4gUFRSX0VSUihwdHBfY2xvY2spO1xuK1x0fVxuK1xuK1x0emxkcGxsLVx1MDAzZXB0cF9jbG9jayA9IHB0cF9jbG9jaztcbitcbitcdHJldHVybiAwO1xuK31cbitcbisvKipcbisgKiB6bDMwNzN4X2RwbGxfcHRwX3VucmVnaXN0ZXIgLSB1bnJlZ2lzdGVyIFBUUCBjbG9jayBmb3IgYSBEUExMIGNoYW5uZWxcbisgKiBAemxkcGxsOiBEUExMIGNoYW5uZWwgdG8gdW5yZWdpc3RlciBQVFAgY2xvY2sgZm9yXG4rICovXG4rc3RhdGljIHZvaWQgemwzMDczeF9kcGxsX3B0cF91bnJlZ2lzdGVyKHN0cnVjdCB6bDMwNzN4X2RwbGwgKnpsZHBsbClcbit7XG4rXHRpZiAoIUlTX0VSUl9PUl9OVUxMKHpsZHBsbC1cdTAwM2VwdHBfY2xvY2spKSB7XG4rXHRcdHB0cF9jbG9ja191bnJlZ2lzdGVyKHpsZHBsbC1cdTAwM2VwdHBfY2xvY2spO1xuK1x0XHR6bGRwbGwtXHUwMDNlcHRwX2Nsb2NrID0gTlVMTDtcbitcdH1cbiB9XG4gXG4gLyoqXG5AQCAtMjM5OCw2ICsyNzM5LDQ3IEBAIHpsMzA3M3hfZHBsbF9yZWZfc3luY19wYWlyc19yZWdpc3RlcihzdHJ1Y3QgemwzMDczeF9kcGxsICp6bGRwbGwpXG4gXHRyZXR1cm4gMDtcbiB9XG4gXG4rLyoqXG4rICogemwzMDczeF9kcGxsX2FsbG9jIC0gYWxsb2NhdGUgRFBMTCBkZXZpY2VcbisgKiBAemxkZXY6IHBvaW50ZXIgdG8gemwzMDczeCBkZXZpY2VcbisgKiBAY2g6IERQTEwgY2hhbm5lbCBudW1iZXJcbisgKlxuKyAqIEFsbG9jYXRlcyBEUExMIGRldmljZSBzdHJ1Y3R1cmUgZm9yIGdpdmVuIERQTEwgY2hhbm5lbC5cbisgKlxuKyAqIFJldHVybjogcG9pbnRlciB0byBEUExMIGRldmljZSBvbiBzdWNjZXNzLCBlcnJvciBwb2ludGVyIG9uIGVycm9yXG4rICovXG4rc3RydWN0IHpsMzA3M3hfZHBsbCAqXG4remwzMDczeF9kcGxsX2FsbG9jKHN0cnVjdCB6bDMwNzN4X2RldiAqemxkZXYsIHU4IGNoKVxuK3tcbitcdHN0cnVjdCB6bDMwNzN4X2RwbGwgKnpsZHBsbDtcbitcbitcdHpsZHBsbCA9IGt6YWxsb2Nfb2JqKCp6bGRwbGwpO1xuK1x0aWYgKCF6bGRwbGwpXG4rXHRcdHJldHVybiBFUlJfUFRSKC1FTk9NRU0pO1xuK1xuK1x0emxkcGxsLVx1MDAzZWRldiA9IHpsZGV2O1xuK1x0emxkcGxsLVx1MDAzZWlkID0gY2g7XG4rXHRtdXRleF9pbml0KFx1MDAyNnpsZHBsbC1cdTAwM2Vsb2NrKTtcbitcdElOSVRfTElTVF9IRUFEKFx1MDAyNnpsZHBsbC1cdTAwM2VwaW5zKTtcbitcbitcdHJldHVybiB6bGRwbGw7XG4rfVxuK1xuKy8qKlxuKyAqIHpsMzA3M3hfZHBsbF9mcmVlIC0gZnJlZSBEUExMIGRldmljZVxuKyAqIEB6bGRwbGw6IHBvaW50ZXIgdG8gemwzMDczeF9kcGxsIHN0cnVjdHVyZVxuKyAqXG4rICogRGVhbGxvY2F0ZXMgZ2l2ZW4gRFBMTCBkZXZpY2UgcHJldmlvdXNseSBhbGxvY2F0ZWQgYnkgQHpsMzA3M3hfZHBsbF9hbGxvYy5cbisgKi9cbit2b2lkXG4remwzMDczeF9kcGxsX2ZyZWUoc3RydWN0IHpsMzA3M3hfZHBsbCAqemxkcGxsKVxuK3tcbitcdFdBUk4oemxkcGxsLVx1MDAzZWRwbGxfZGV2LCBcIkRQTEwgZGV2aWNlIGlzIHN0aWxsIHJlZ2lzdGVyZWRcXG5cIik7XG4rXG4rXHRtdXRleF9kZXN0cm95KFx1MDAyNnpsZHBsbC1cdTAwM2Vsb2NrKTtcbitcdGtmcmVlKHpsZHBsbCk7XG4rfVxuK1xuIC8qKlxuICAqIHpsMzA3M3hfZHBsbF9yZWdpc3RlciAtIHJlZ2lzdGVyIERQTEwgZGV2aWNlIGFuZCBhbGwgaXRzIHBpbnNcbiAgKiBAemxkcGxsOiBwb2ludGVyIHRvIHpsMzA3M3hfZHBsbCBzdHJ1Y3R1cmVcbkBAIC0yNDI4LDYgKzI4MTAsMTMgQEAgemwzMDczeF9kcGxsX3JlZ2lzdGVyKHN0cnVjdCB6bDMwNzN4X2RwbGwgKnpsZHBsbClcbiBcdFx0cmV0dXJuIHJjO1xuIFx0fVxuIFxuK1x0cmMgPSB6bDMwNzN4X2RwbGxfcHRwX3JlZ2lzdGVyKHpsZHBsbCk7XG4rXHRpZiAocmMpIHtcbitcdFx0emwzMDczeF9kcGxsX3BpbnNfdW5yZWdpc3Rlcih6bGRwbGwpO1xuK1x0XHR6bDMwNzN4X2RwbGxfZGV2aWNlX3VucmVnaXN0ZXIoemxkcGxsKTtcbitcdFx0cmV0dXJuIHJjO1xuK1x0fVxuK1xuIFx0cmV0dXJuIDA7XG4gfVxuIFxuQEAgLTI0NDEsNyArMjgzMCw3IEBAIHpsMzA3M3hfZHBsbF9yZWdpc3RlcihzdHJ1Y3QgemwzMDczeF9kcGxsICp6bGRwbGwpXG4gdm9pZFxuIHpsMzA3M3hfZHBsbF91bnJlZ2lzdGVyKHN0cnVjdCB6bDMwNzN4X2RwbGwgKnpsZHBsbClcbiB7XG4tXHQvKiBVbnJlZ2lzdGVyIGFsbCBwaW5zIGFuZCBkcGxsICovXG4rXHR6bDMwNzN4X2RwbGxfcHRwX3VucmVnaXN0ZXIoemxkcGxsKTtcbiBcdHpsMzA3M3hfZHBsbF9waW5zX3VucmVnaXN0ZXIoemxkcGxsKTtcbiBcdHpsMzA3M3hfZHBsbF9kZXZpY2VfdW5yZWdpc3Rlcih6bGRwbGwpO1xuIH1cbmRpZmYgLS1naXQgYS9kcml2ZXJzL2RwbGwvemwzMDczeC9kcGxsLmggYi9kcml2ZXJzL2RwbGwvemwzMDczeC9kcGxsLmhcbmluZGV4IGZhZWJjNDAyYmExYjcuLjk5MzIyMWRjNjMyNDkgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL2RwbGwvemwzMDczeC9kcGxsLmhcbisrKyBiL2RyaXZlcnMvZHBsbC96bDMwNzN4L2RwbGwuaFxuQEAgLTUsNiArNSw3IEBAXG4gXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvZHBsbC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvbGlzdC5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvcHRwX2Nsb2NrX2tlcm5lbC5oXHUwMDNlXG4gXG4gI2luY2x1ZGUgXCJjb3JlLmhcIlxuIFxuQEAgLTIyLDYgKzIzLDggQEBcbiAgKiBAdHlwZTogRFBMTCB0eXBlIChQUFMgb3IgRUVDKVxuICAqIEBsb2NrX3N0YXR1czogbGFzdCBzYXZlZCBEUExMIGxvY2sgc3RhdHVzXG4gICogQHBpbnM6IGxpc3Qgb2YgcGluc1xuKyAqIEBwdHBfaW5mbzogUFRQIGNsb2NrIGluZm9cbisgKiBAcHRwX2Nsb2NrOiByZWdpc3RlcmVkIFBUUCBjbG9jayAob3IgTlVMTClcbiAgKi9cbiBzdHJ1Y3QgemwzMDczeF9kcGxsIHtcbiBcdHN0cnVjdCBsaXN0X2hlYWRcdFx0bGlzdDtcbkBAIC0zNiw2ICszOSw4IEBAIHN0cnVjdCB6bDMwNzN4X2RwbGwge1xuIFx0ZW51bSBkcGxsX3R5cGVcdFx0XHR0eXBlO1xuIFx0ZW51bSBkcGxsX2xvY2tfc3RhdHVzXHRcdGxvY2tfc3RhdHVzO1xuIFx0c3RydWN0IGxpc3RfaGVhZFx0XHRwaW5zO1xuK1x0c3RydWN0IHB0cF9jbG9ja19pbmZvXHRcdHB0cF9pbmZvO1xuK1x0c3RydWN0IHB0cF9jbG9ja1x0XHQqcHRwX2Nsb2NrO1xuIH07XG4gXG4gc3RydWN0IHpsMzA3M3hfZHBsbCAqemwzMDczeF9kcGxsX2FsbG9jKHN0cnVjdCB6bDMwNzN4X2RldiAqemxkZXYsIHU4IGNoKTtcbmRpZmYgLS1naXQgYS9kcml2ZXJzL2RwbGwvemwzMDczeC9yZWdzLmggYi9kcml2ZXJzL2RwbGwvemwzMDczeC9yZWdzLmhcbmluZGV4IGI3MGVhZDdkNDQ5NWIuLmYzYTVlMTIxNWFhMzYgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL2RwbGwvemwzMDczeC9yZWdzLmhcbisrKyBiL2RyaXZlcnMvZHBsbC96bDMwNzN4L3JlZ3MuaFxuQEAgLTE3OSw2ICsxNzksMjAgQEBcbiAjZGVmaW5lIFpMX0RQTExfREZfUkVBRF9DTURcdFx0XHRHRU5NQVNLKDIsIDApXG4gI2RlZmluZSBaTF9EUExMX0RGX1JFQURfQ01EX0FDQ19JXHRcdDRcbiBcbisjZGVmaW5lIFpMX1JFR19EUExMX1RJRV9DVFJMXHRcdFx0WkxfUkVHKDUsIDB4MzAsIDEpXG4rI2RlZmluZSBaTF9EUExMX1RJRV9DVFJMX09QXHRcdFx0R0VOTUFTSygyLCAwKVxuKyNkZWZpbmUgWkxfRFBMTF9USUVfQ1RSTF9PUF9XUlx0XHRcdDRcbitcbisjZGVmaW5lIFpMX1JFR19EUExMX1RJRV9DVFJMX01BU0tcdFx0WkxfUkVHKDUsIDB4MzEsIDEpXG4rXG4rI2RlZmluZSBaTF9SRUdfRFBMTF9UT0RfQ1RSTChfaWR4KVx0XHRcdFx0XHRcXFxuK1x0WkxfUkVHX0lEWChfaWR4LCA1LCAweDM4LCAxLCBaTDMwNzNYX01BWF9DSEFOTkVMUywgMSlcbisjZGVmaW5lIFpMX0RQTExfVE9EX0NUUkxfU0VNXHRcdFx0QklUKDQpXG4rI2RlZmluZSBaTF9EUExMX1RPRF9DVFJMX0NNRFx0XHRcdEdFTk1BU0soMywgMClcbisjZGVmaW5lIFpMX0RQTExfVE9EX0NUUkxfQ01EX1dSX05FWFRfMUhaXHQxXG4rI2RlZmluZSBaTF9EUExMX1RPRF9DVFJMX0NNRF9SRF9DVVJSRU5UXHRcdDhcbisjZGVmaW5lIFpMX0RQTExfVE9EX0NUUkxfQ01EX1JEX05FWFRfMUhaXHQ5XG4rXG4gI2RlZmluZSBaTF9SRUdfRFBMTF9NRUFTX0NUUkxcdFx0XHRaTF9SRUcoNSwgMHg1MCwgMSlcbiAjZGVmaW5lIFpMX0RQTExfTUVBU19DVFJMX0VOXHRcdFx0QklUKDApXG4gI2RlZmluZSBaTF9EUExMX01FQVNfQ1RSTF9BVkdfRkFDVE9SXHRcdEdFTk1BU0soNywgNClcbkBAIC0xOTMsNiArMjA3LDkgQEBcbiBcbiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxuICAqIFJlZ2lzdGVyIFBhZ2VzIDYtNywgRFBMTCBEYXRhXG4rICpcbisgKiBQZXItY2hhbm5lbCByZWdpc3RlcnMgd2l0aCBzdHJpZGUgMHgyMC4gQ2hhbm5lbHMgMC0zIHJlc2lkZSBvbiBwYWdlIDYsXG4rICogY2hhbm5lbCA0IG9uIHBhZ2UgNy5cbiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cbiBcbiAjZGVmaW5lIFpMX1JFR19EUExMX0RGX09GRlNFVF8wMyhfaWR4KVx0XHRcdFx0XHRcXFxuQEAgLTIwMiw2ICsyMTksMjQgQEBcbiBcdCgoX2lkeCkgXHUwMDNjIDQgPyBaTF9SRUdfRFBMTF9ERl9PRkZTRVRfMDMoX2lkeCkgOiBaTF9SRUdfRFBMTF9ERl9PRkZTRVRfNClcbiAjZGVmaW5lIFpMX0RQTExfREZfT0ZGU0VUX1VOS05PV05cdFM2NF9NSU5cbiBcbisjZGVmaW5lIFpMX1JFR19EUExMX1RJRV9EQVRBXzAzKF9pZHgpXHRcdFx0XHRcdFxcXG4rXHRaTF9SRUdfSURYKF9pZHgsIDYsIDB4MEMsIDYsIDQsIDB4MjApXG4rI2RlZmluZSBaTF9SRUdfRFBMTF9USUVfREFUQV80XHRcdFx0WkxfUkVHKDcsIDB4MEMsIDYpXG4rI2RlZmluZSBaTF9SRUdfRFBMTF9USUVfREFUQShfaWR4KVx0XHRcdFx0XHRcXFxuK1x0KChfaWR4KSBcdTAwM2MgNCA/IFpMX1JFR19EUExMX1RJRV9EQVRBXzAzKF9pZHgpIDogWkxfUkVHX0RQTExfVElFX0RBVEFfNClcbitcbisjZGVmaW5lIFpMX1JFR19EUExMX1RPRF9TRUNfMDMoX2lkeClcdFx0XHRcdFx0XFxcbitcdFpMX1JFR19JRFgoX2lkeCwgNiwgMHgxMiwgNiwgNCwgMHgyMClcbisjZGVmaW5lIFpMX1JFR19EUExMX1RPRF9TRUNfNFx0XHRcdFpMX1JFRyg3LCAweDEyLCA2KVxuKyNkZWZpbmUgWkxfUkVHX0RQTExfVE9EX1NFQyhfaWR4KVx0XHRcdFx0XHRcXFxuK1x0KChfaWR4KSBcdTAwM2MgNCA/IFpMX1JFR19EUExMX1RPRF9TRUNfMDMoX2lkeCkgOiBaTF9SRUdfRFBMTF9UT0RfU0VDXzQpXG4rXG4rI2RlZmluZSBaTF9SRUdfRFBMTF9UT0RfTlNfMDMoX2lkeClcdFx0XHRcdFx0XFxcbitcdFpMX1JFR19JRFgoX2lkeCwgNiwgMHgxOCwgNCwgNCwgMHgyMClcbisjZGVmaW5lIFpMX1JFR19EUExMX1RPRF9OU180XHRcdFx0WkxfUkVHKDcsIDB4MTgsIDQpXG4rI2RlZmluZSBaTF9SRUdfRFBMTF9UT0RfTlMoX2lkeClcdFx0XHRcdFx0XFxcbitcdCgoX2lkeCkgXHUwMDNjIDQgPyBaTF9SRUdfRFBMTF9UT0RfTlNfMDMoX2lkeCkgOiBaTF9SRUdfRFBMTF9UT0RfTlNfNClcbitcbiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcbiAgKiBSZWdpc3RlciBQYWdlIDksIFN5bnRoIGFuZCBPdXRwdXRcbiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXG5AQCAtMjIxLDYgKzI1NiwyMyBAQFxuICNkZWZpbmUgWkxfT1VUUFVUX0NUUkxfRU5cdFx0XHRCSVQoMClcbiAjZGVmaW5lIFpMX09VVFBVVF9DVFJMX1NZTlRIX1NFTFx0XHRHRU5NQVNLKDYsIDQpXG4gXG4rI2RlZmluZSBaTF9SRUdfT1VUUFVUX1NURVBfVElNRV9NQVNLXHRcdFpMX1JFRyg5LCAweDM2LCAyKVxuK1xuKyNkZWZpbmUgWkxfUkVHX09VVFBVVF9QSEFTRV9TVEVQX0NUUkxcdFx0WkxfUkVHKDksIDB4MzgsIDEpXG4rI2RlZmluZSBaTF9PVVRQVVRfUEhBU0VfU1RFUF9DVFJMX0RQTExcdFx0R0VOTUFTSyg2LCA0KVxuKyNkZWZpbmUgWkxfT1VUUFVUX1BIQVNFX1NURVBfQ1RSTF9UT0RfU1RFUFx0QklUKDMpXG4rI2RlZmluZSBaTF9PVVRQVVRfUEhBU0VfU1RFUF9DVFJMX09QXHRcdEdFTk1BU0soMSwgMClcbisjZGVmaW5lIFpMX09VVFBVVF9QSEFTRV9TVEVQX0NUUkxfT1BfTk9ORVx0MFxuKyNkZWZpbmUgWkxfT1VUUFVUX1BIQVNFX1NURVBfQ1RSTF9PUF9SRVNFVFx0MVxuKyNkZWZpbmUgWkxfT1VUUFVUX1BIQVNFX1NURVBfQ1RSTF9PUF9SRUFEXHQyXG4rI2RlZmluZSBaTF9PVVRQVVRfUEhBU0VfU1RFUF9DVFJMX09QX1dSSVRFXHQzXG4rXG4rI2RlZmluZSBaTF9SRUdfT1VUUFVUX1BIQVNFX1NURVBfTlVNQkVSXHRcdFpMX1JFRyg5LCAweDM5LCAxKVxuK1xuKyNkZWZpbmUgWkxfUkVHX09VVFBVVF9QSEFTRV9TVEVQX01BU0tcdFx0WkxfUkVHKDksIDB4M2EsIDIpXG4rXG4rI2RlZmluZSBaTF9SRUdfT1VUUFVUX1BIQVNFX1NURVBfREFUQVx0XHRaTF9SRUcoOSwgMHgzYywgNClcbitcbiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxuICAqIFJlZ2lzdGVyIFBhZ2UgMTAsIFJlZiBNYWlsYm94XG4gICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMVQxNDowMzowOC44OTE1MzMyMjJaIiwiU2VxIjoxMywiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MjA1NDI5NzYzNjYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqUFRQIENsb2NrIFN1cHBvcnQgaW4gdGhlIEF6dXJpdGUgRFBMTCBEcml2ZXI6IEEgTWVtb3J5IFNhZmV0eSBSZXZpZXcqKlxuXG5BbHJpZ2h0LCBsZXQncyBkaXNzZWN0IHRoaXMgcGF0Y2ggYWRkaW5nIFBUUCBjbG9jayBzdXBwb3J0IGZvciB0aGUgTWljcm9jaGlwIEF6dXJpdGUgRFBMTC9QVFAvU3luY0UgZGV2aWNlcy4gVGhlIGNvcmUgaWRlYSBpcyB0byBpbnRyb2R1Y2UgZnVuY3Rpb25zIGZvciByZWFkaW5nIGFuZCB3cml0aW5nIFRpbWUgb2YgRGF5IChUb0QpLCBhZGp1c3RpbmcgcGhhc2UgYW5kIGZyZXF1ZW5jeSwgYW5kIHJlZ2lzdGVyaW5nIGEgUFRQIGNsb2NrIGRldmljZS4gVGhlIGludGVyYWN0aW9uIHdpdGggdGhlIGhhcmR3YXJlIGlzIHN0YW5kYXJkIGZhcmU6IHJlYWRpbmcgYW5kIHdyaXRpbmcgZGV2aWNlIHJlZ2lzdGVycyB2aWEgSTJDIG9yIFNQSSB1c2luZyB0aGUgYHJlZ21hcGAgZnJhbWV3b3JrLiBUaGUgcGF0Y2ggbGV2ZXJhZ2VzIHRoZSBleGlzdGluZyBQVFAgY2xvY2sgc3Vic3lzdGVtLCBwYXNzaW5nIGRhdGEgdGhyb3VnaCBpdCwgc28gdGhlIGRyaXZlciBvbmx5IG5lZWRzIHRvIHdvcnJ5IGFib3V0IHRoZSBjYWxsYmFja3MuIFRoZSBzdWJzeXN0ZW0gaGFuZGxlcyB0aGUgYGlvY3RsYCBjYWxscyBhbmQgdHJhbnNsYXRlcyB0aGVtIGludG8gYHRpbWVzcGVjNjRgIG9yIHNpbWlsYXIgc3RydWN0dXJlcyB0aGF0IHRoZSBkcml2ZXIgY2FuIHVuZGVyc3RhbmQuXG5cbk15IGltbWVkaWF0ZSBmb2N1cyBpcyBvbiBtZW1vcnkgc2FmZXR5OyBzcGVjaWZpY2FsbHksIEkgbmVlZCB0byBtYWtlIHN1cmUgd2UncmUgbm90IGluYWR2ZXJ0ZW50bHkgbGVha2luZyB1bmluaXRpYWxpemVkIG1lbW9yeS4gTGV0J3Mgc3RhcnQgd2l0aCBgemwzMDczeF9jaGFuX3RvZF9yZWFkYC4gVGhpcyBmdW5jdGlvbiBwb3B1bGF0ZXMgYSBgc3RydWN0IHRpbWVzcGVjNjRgIHBvaW50ZWQgdG8gYnkgYHRzYC4gVGhlIGZ1bmN0aW9uIHJlYWRzIHNlY29uZHMgYW5kIG5hbm9zZWNvbmRzIGZyb20gZGV2aWNlIHJlZ2lzdGVycy4gSWYgdGhlIHJlYWQgb3BlcmF0aW9ucywgYHpsMzA3M3hfcmVhZF91NDhgIG9yIGB6bDMwNzN4X3JlYWRfdTMyYCwgZmFpbCwgaXQgcmV0dXJucyBhbiBlcnJvciwgYW5kIHRoZSBgdHNgIGlzIG5vdCBmdWxseSBpbml0aWFsaXplZC4gSG93ZXZlciwgdGhlIGNhbGxpbmcgZnVuY3Rpb24gYHpsMzA3M3hfZHBsbF9wdHBfZ2V0dGltZXg2NGAgcHJvcGFnYXRlcyB0aGUgZXJyb3IuIFRoZSBQVFAgc3Vic3lzdGVtIGhhbmRsZXMgdGhlIGVycm9yIGFuZCBkb2Vzbid0IHBhc3MgYSBwYXJ0aWFsbHkgaW5pdGlhbGl6ZWQgYHRzYCB0byB1c2VyIHNwYWNlLCB3aGljaCBpcyBnb29kLiBObyB1bmluaXRpYWxpemVkIG1lbW9yeSBsZWFrIGluIHRoYXQgY2FzZS5cblxuVGhlbiwgSSdtIGNoZWNraW5nIGB6bDMwNzN4X2RwbGxfcHRwX2FkanRpbWVfcGhhc2Vfc3RlcGAuIEhlcmUsIGBzeW50aF9tYXNrYCBpcyBpbml0aWFsaXplZCB0byB6ZXJvLCB3aGljaCBpcyBnb29kLiBJdCBsb29rcyBsaWtlIGl0IGlzIHNhZmUuXG5cbk5leHQgSSByZXZpZXcgYHpsMzA3M3hfY2hhbl90b2RfYWRqdXN0YC4gVGhlIGZ1bmN0aW9uIHJlYWRzIGB0c19uZXh0YCBhbmQgYHRzX2N1cmAgd2l0aCBgemwzMDczeF9jaGFuX3RvZF9yZWFkYC4gVGhlIHZhcmlhYmxlcyBhcmUgZnVsbHkgaW5pdGlhbGl6ZWQgb24gc3VjY2Vzcy4gU28gaXQgbG9va3Mgc2FmZS5cblxuVGhlIHJlZ2lzdHJhdGlvbiBvZiB0aGUgUFRQIGNsb2NrIGRldmljZSBpcyBhbiBpbXBvcnRhbnQgYXJlYSB0byByZXZpZXcgZm9yIG1lbW9yeSBzYWZldHkuIFRoZSBwYXRjaCBkZWZpbmVzIGB6bDMwNzN4X2RwbGxfcHRwX2Nsb2NrX2luZm9gLCBhIGBwdHBfY2xvY2tfaW5mb2Agc3RydWN0LiBUaGUgZHJpdmVyIGNvcGllcyB0aGUgY29udGVudHMgb2YgYHpsMzA3M3hfZHBsbF9wdHBfY2xvY2tfaW5mb2AgaW50byBhIGxvY2FsIGBwdHBfaW5mb2Agc3RydWN0LCBhbmQgdGhlbiBvdmVyd3JpdGVzIHRoZSBuYW1lIGZpZWxkIHdpdGggYSBjYWxsIHRvIGBzbnByaW50ZmAuIEkgbmVlZCB0byBlbnN1cmUgdGhlcmUgYXJlIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGxlYWtzLiBMb29raW5nIGF0IHRoZSBkZWZpbml0aW9uLCB0aGUgYG5hbWVgIGZpZWxkIGlzIGEgYGNoYXIgbmFtZVsxNl1gIGFycmF5LiBEb2VzIGBzbnByaW50ZmAgemVyby1wYWQgdGhlIHJlc3Qgb2YgdGhlIGFycmF5PyBJIHJlbWVtYmVyIHRoYXQgYHNucHJpbnRmYCB3aWxsIG5vdC4gSWYgYHpsMzA3M3hfZHBsbF9wdHBfY2xvY2tfaW5mby5uYW1lYCB3YXNuJ3QgZnVsbHkgaW5pdGlhbGl6ZWQsIHRoZSB1bmluaXRpYWxpemVkIG1lbW9yeSBjb3VsZCBiZSBsZWFrZWQuIEhvd2V2ZXIsIGB6bDMwNzN4X2RwbGxfcHRwX2Nsb2NrX2luZm9gIGlzIGBzdGF0aWMgY29uc3RgLCBzbyBpdCBpcyB6ZXJvIGluaXRpYWxpemVkIGJ5IHRoZSBjb21waWxlci4gSXQgaXMgemVyby1wYWRkZWQsIGFuZCB0aGVuIGBzbnByaW50ZmAgb3ZlcndyaXRlcyBzb21lIG9mIHRoZSB6ZXJvIHZhbHVlcywgYnV0IHRoZSByZW1haW5pbmcgcGFydCBpcyB6ZXJvLCBzbyBubyBsZWFrLlxuXG5GaW5hbGx5LCBgemwzMDczeF9kcGxsX2FsbG9jYC4gVGhlIGNvZGUgdXNlcyBga3phbGxvY19vYmpgLCB3aGljaCBsb29rcyBzdXNwaWNpb3VzLiBJcyBpdCBhIGtlcm5lbCBtYWNybywgb3IgYSB0eXBvPyBJIHN1c3BlY3QgdGhhdCBpdCBpcyBhIG1hY3JvIGZvciBga3phbGxvYyhzaXplb2YoKnpsZHBsbCksIEdGUF9LRVJORUwpYC4gU2luY2UgdGhlIG1hY3JvIG5hbWUgY29udGFpbnMgYHphbGxvY2AsIGl0IHNob3VsZCB6ZXJvIHRoZSBtZW1vcnkuIEkgbmVlZCB0byBtYWtlIHN1cmUgdGhpcyBpcyB0aGUgY2FzZS4gTGV0IG1lIGNoZWNrIHRoZSBkZWZpbml0aW9uIG9mIGBremFsbG9jX29iamAuXG5cbk92ZXJhbGwsIHRoaXMgbG9va3MgbGlrZSBhIHdlbGwtc3RydWN0dXJlZCBwYXRjaCB3aXRoIGF0dGVudGlvbiB0byBtZW1vcnkgc2FmZXR5LiBNeSBzcG90IGNoZWNrcyBoYXZlbid0IHJldmVhbGVkIGFueSBpbW1lZGlhdGUgdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3MsIGJ1dCBJIHdpbGwgaW52ZXN0aWdhdGUgYGt6YWxsb2Nfb2JqYCBmdXJ0aGVyLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxODIyOCwiT3V0cHV0VG9rZW5zIjoxOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE4ODMsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMVQxNDowMzoyOS40MzQ1MTgwNThaIiwiU2VxIjoxNCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE3MzU2MjU3NzMsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwia3phbGxvY19vYmpcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiXFxuRnVsbCBvdXRwdXQgaXMgdG9vIGxvbmcsIHNob3dpbmcgNTAwIG91dCBvZiA3OTI3OSBsaW5lcy5cXG5Vc2UgbW9yZSBwcmVjaXNlIGV4cHJlc3Npb24gaWYgcG9zc2libGUuXFxuXFxuRG9jdW1lbnRhdGlvbi9jb3JlLWFwaS9saXN0LnJzdD0xMDM9bGlzdDpcXG4tLVxcbkRvY3VtZW50YXRpb24vY29yZS1hcGkvbGlzdC5yc3QtMTE0LVxcbkRvY3VtZW50YXRpb24vY29yZS1hcGkvbGlzdC5yc3Q6MTE1OiAgICAgICAgICBncm9jayA9IGt6YWxsb2Nfb2JqKCpncm9jayk7XFxuRG9jdW1lbnRhdGlvbi9jb3JlLWFwaS9saXN0LnJzdC0xMTYtICAgICAgICAgIGlmICghZ3JvY2spXFxuLS1cXG5Eb2N1bWVudGF0aW9uL2NvcmUtYXBpL2xpc3QucnN0LTEyNS1cXG5Eb2N1bWVudGF0aW9uL2NvcmUtYXBpL2xpc3QucnN0OjEyNjogICAgICAgICAgZGltaXRyaSA9IGt6YWxsb2Nfb2JqKCpkaW1pdHJpKTtcXG5Eb2N1bWVudGF0aW9uL2NvcmUtYXBpL2xpc3QucnN0LTEyNy0gICAgICAgICAgaWYgKCFkaW1pdHJpKVxcbi0tXFxuRG9jdW1lbnRhdGlvbi9kcml2ZXItYXBpL21haWxib3gucnN0PTQ1PWEgbWVzc2FnZSBhbmQgYSBjYWxsYmFjayBmdW5jdGlvbiB0byB0aGUgQVBJIGFuZCByZXR1cm4gaW1tZWRpYXRlbHkpLlxcbi0tXFxuRG9jdW1lbnRhdGlvbi9kcml2ZXItYXBpL21haWxib3gucnN0LTg5LVxcbkRvY3VtZW50YXRpb24vZHJpdmVyLWFwaS9tYWlsYm94LnJzdDo5MDpcXHRcXHRkY19zeW5jID0ga3phbGxvY19vYmooKmRjX3N5bmMpO1xcbkRvY3VtZW50YXRpb24vZHJpdmVyLWFwaS9tYWlsYm94LnJzdDo5MTpcXHRcXHRkY19hc3luYyA9IGt6YWxsb2Nfb2JqKCpkY19hc3luYyk7XFxuRG9jdW1lbnRhdGlvbi9kcml2ZXItYXBpL21haWxib3gucnN0LTkyLVxcbi0tXFxuRG9jdW1lbnRhdGlvbi9kcml2ZXItYXBpL21lZGlhL3Y0bDItZmgucnN0PTI2PUV4YW1wbGU6XFxuLS1cXG5Eb2N1bWVudGF0aW9uL2RyaXZlci1hcGkvbWVkaWEvdjRsMi1maC5yc3QtNDQtXFxuRG9jdW1lbnRhdGlvbi9kcml2ZXItYXBpL21lZGlhL3Y0bDItZmgucnN0OjQ1OlxcdFxcdG15X2ZoID0ga3phbGxvY19vYmooKm15X2ZoKTtcXG5Eb2N1bWVudGF0aW9uL2RyaXZlci1hcGkvbWVkaWEvdjRsMi1maC5yc3QtNDYtXFxuLS1cXG5Eb2N1bWVudGF0aW9uL3Byb2Nlc3MvY29kaW5nLXN0eWxlLnJzdD05Mzg9VGhlIGtlcm5lbCBwcm92aWRlcyB0aGUgZm9sbG93aW5nIGdlbmVyYWwgcHVycG9zZSBtZW1vcnkgYWxsb2NhdG9yczpcXG5Eb2N1bWVudGF0aW9uL3Byb2Nlc3MvY29kaW5nLXN0eWxlLnJzdDo5Mzk6a21hbGxvYygpLCBremFsbG9jKCksIGttYWxsb2Nfb2JqcygpLCBremFsbG9jX29ianMoKSwgdm1hbGxvYygpLCBhbmRcXG5Eb2N1bWVudGF0aW9uL3Byb2Nlc3MvY29kaW5nLXN0eWxlLnJzdC05NDAtdnphbGxvYygpLiAgUGxlYXNlIHJlZmVyIHRvIHRoZSBBUEkgZG9jdW1lbnRhdGlvbiBmb3IgZnVydGhlciBpbmZvcm1hdGlvblxcbi0tXFxuRG9jdW1lbnRhdGlvbi9wcm9jZXNzL2NvZGluZy1zdHlsZS5yc3Q9OTY0PVRoZSBwcmVmZXJyZWQgZm9ybSBmb3IgYWxsb2NhdGluZyBhIHplcm9lZCBhcnJheSBpcyB0aGUgZm9sbG93aW5nOlxcbi0tXFxuRG9jdW1lbnRhdGlvbi9wcm9jZXNzL2NvZGluZy1zdHlsZS5yc3QtOTY3LVxcbkRvY3VtZW50YXRpb24vcHJvY2Vzcy9jb2Rpbmctc3R5bGUucnN0Ojk2ODpcXHRwID0ga3phbGxvY19vYmpzKCpwLCBuLCAuLi4pO1xcbkRvY3VtZW50YXRpb24vcHJvY2Vzcy9jb2Rpbmctc3R5bGUucnN0LTk2OS1cXG4tLVxcbkRvY3VtZW50YXRpb24vcHJvY2Vzcy9kZXByZWNhdGVkLnJzdD0zOTg9YmVjb21lLCByZXNwZWN0aXZlbHk6Olxcbi0tXFxuRG9jdW1lbnRhdGlvbi9wcm9jZXNzL2RlcHJlY2F0ZWQucnN0LTQwMC1cXHRwdHIgPSBrbWFsbG9jX29iaigqcHRyIFssIGdmcF0gKTtcXG5Eb2N1bWVudGF0aW9uL3Byb2Nlc3MvZGVwcmVjYXRlZC5yc3Q6NDAxOlxcdHB0ciA9IGt6YWxsb2Nfb2JqKCpwdHIgWywgZ2ZwXSApO1xcbkRvY3VtZW50YXRpb24vcHJvY2Vzcy9kZXByZWNhdGVkLnJzdC00MDItXFx0cHRyID0ga21hbGxvY19vYmpzKCpwdHIsIGNvdW50IFssIGdmcF0gKTtcXG5Eb2N1bWVudGF0aW9uL3Byb2Nlc3MvZGVwcmVjYXRlZC5yc3Q6NDAzOlxcdHB0ciA9IGt6YWxsb2Nfb2JqcygqcHRyLCBjb3VudCBbLCBnZnBdICk7XFxuRG9jdW1lbnRhdGlvbi9wcm9jZXNzL2RlcHJlY2F0ZWQucnN0LTQwNC1cXHRwdHIgPSBrbWFsbG9jX2ZsZXgoKnB0ciwgZmxleF9tZW1iZXIsIGNvdW50IFssIGdmcF0gKTtcXG4tLVxcbkRvY3VtZW50YXRpb24vc291bmQva2VybmVsLWFwaS93cml0aW5nLWFuLWFsc2EtZHJpdmVyLnJzdD0yMDg9dG8gZGV0YWlscyBleHBsYWluZWQgaW4gdGhlIGZvbGxvd2luZyBzZWN0aW9uLlxcbi0tXFxuRG9jdW1lbnRhdGlvbi9zb3VuZC9rZXJuZWwtYXBpL3dyaXRpbmctYW4tYWxzYS1kcml2ZXIucnN0LTI2OC0gICAgICAgICAgICAgIC8qIGFsbG9jYXRlIGEgY2hpcC1zcGVjaWZpYyBkYXRhIHdpdGggemVybyBmaWxsZWQgKi9cXG5Eb2N1bWVudGF0aW9uL3NvdW5kL2tlcm5lbC1hcGkvd3JpdGluZy1hbi1hbHNhLWRyaXZlci5yc3Q6MjY5OiAgICAgICAgICAgICAgY2hpcCA9IGt6YWxsb2Nfb2JqKCpjaGlwKTtcXG5Eb2N1bWVudGF0aW9uL3NvdW5kL2tlcm5lbC1hcGkvd3JpdGluZy1hbi1hbHNhLWRyaXZlci5yc3QtMjcwLSAgICAgICAgICAgICAgaWYgKGNoaXAgPT0gTlVMTClcXG4tLVxcbkRvY3VtZW50YXRpb24vc291bmQva2VybmVsLWFwaS93cml0aW5nLWFuLWFsc2EtZHJpdmVyLnJzdD02MjM9QWZ0ZXIgYWxsb2NhdGluZyBhIGNhcmQgaW5zdGFuY2UgdmlhIDpjOmZ1bmM6YHNuZF9jYXJkX25ldygpYFxcbi0tXFxuRG9jdW1lbnRhdGlvbi9zb3VuZC9rZXJuZWwtYXBpL3dyaXRpbmctYW4tYWxzYS1kcml2ZXIucnN0LTYzMC0gIC4uLi4uXFxuRG9jdW1lbnRhdGlvbi9zb3VuZC9rZXJuZWwtYXBpL3dyaXRpbmctYW4tYWxzYS1kcml2ZXIucnN0OjYzMTogIGNoaXAgPSBremFsbG9jX29iaigqY2hpcCk7XFxuRG9jdW1lbnRhdGlvbi9zb3VuZC9rZXJuZWwtYXBpL3dyaXRpbmctYW4tYWxzYS1kcml2ZXIucnN0LTYzMi1cXG4tLVxcbkRvY3VtZW50YXRpb24vc291bmQva2VybmVsLWFwaS93cml0aW5nLWFuLWFsc2EtZHJpdmVyLnJzdD02OTg9ZGVzdHJ1Y3RvciBhbmQgUENJIGVudHJpZXMuIEV4YW1wbGUgY29kZSBpcyBzaG93biBmaXJzdCwgYmVsb3c6Olxcbi0tXFxuRG9jdW1lbnRhdGlvbi9zb3VuZC9rZXJuZWwtYXBpL3dyaXRpbmctYW4tYWxzYS1kcml2ZXIucnN0LTc0OS1cXG5Eb2N1bWVudGF0aW9uL3NvdW5kL2tlcm5lbC1hcGkvd3JpdGluZy1hbi1hbHNhLWRyaXZlci5yc3Q6NzUwOiAgICAgICAgICAgICAgY2hpcCA9IGt6YWxsb2Nfb2JqKCpjaGlwKTtcXG5Eb2N1bWVudGF0aW9uL3NvdW5kL2tlcm5lbC1hcGkvd3JpdGluZy1hbi1hbHNhLWRyaXZlci5yc3QtNzUxLSAgICAgICAgICAgICAgaWYgKGNoaXAgPT0gTlVMTCkge1xcbi0tXFxuRG9jdW1lbnRhdGlvbi9zb3VuZC9rZXJuZWwtYXBpL3dyaXRpbmctYW4tYWxzYS1kcml2ZXIucnN0PTM4MjM9Y2hpcCBkYXRhIGluZGl2aWR1YWxseTo6XFxuLS1cXG5Eb2N1bWVudGF0aW9uL3NvdW5kL2tlcm5lbC1hcGkvd3JpdGluZy1hbi1hbHNhLWRyaXZlci5yc3QtMzgzNS0gICAgICAgICAgLi4uLlxcbkRvY3VtZW50YXRpb24vc291bmQva2VybmVsLWFwaS93cml0aW5nLWFuLWFsc2EtZHJpdmVyLnJzdDozODM2OiAgICAgICAgICBjaGlwID0ga3phbGxvY19vYmooKmNoaXApO1xcbkRvY3VtZW50YXRpb24vc291bmQva2VybmVsLWFwaS93cml0aW5nLWFuLWFsc2EtZHJpdmVyLnJzdC0zODM3LSAgICAgICAgICAuLi4uXFxuLS1cXG5Eb2N1bWVudGF0aW9uL3RyYW5zbGF0aW9ucy96aF9DTi92aWRlbzRsaW51eC92NGwyLWZyYW1ld29yay50eHQ9Nzk0PWludCBteV9vcGVuKHN0cnVjdCBmaWxlICpmaWxlKVxcbi0tXFxuRG9jdW1lbnRhdGlvbi90cmFuc2xhdGlvbnMvemhfQ04vdmlkZW80bGludXgvdjRsMi1mcmFtZXdvcmsudHh0LTgwMS1cXG5Eb2N1bWVudGF0aW9uL3RyYW5zbGF0aW9ucy96aF9DTi92aWRlbzRsaW51eC92NGwyLWZyYW1ld29yay50eHQ6ODAyOlxcdG15X2ZoID0ga3phbGxvY19vYmooKm15X2ZoKTtcXG5Eb2N1bWVudGF0aW9uL3RyYW5zbGF0aW9ucy96aF9DTi92aWRlbzRsaW51eC92NGwyLWZyYW1ld29yay50eHQtODAzLVxcbi0tXFxuYXJjaC9hbHBoYS9rZXJuZWwvbW9kdWxlLmM9NjQ9bW9kdWxlX2Zyb2JfYXJjaF9zZWN0aW9ucyhFbGY2NF9FaGRyICpoZHIsIEVsZjY0X1NoZHIgKnNlY2hkcnMsXFxuLS1cXG5hcmNoL2FscGhhL2tlcm5lbC9tb2R1bGUuYy05NS1cXHRuc3ltcyA9IHN5bXRhYi1cXHUwMDNlc2hfc2l6ZSAvIHNpemVvZihFbGY2NF9TeW0pO1xcbmFyY2gvYWxwaGEva2VybmVsL21vZHVsZS5jOjk2OlxcdGNoYWlucyA9IGt6YWxsb2Nfb2JqcyhzdHJ1Y3QgZ290X2VudHJ5LCBuc3ltcyk7XFxuYXJjaC9hbHBoYS9rZXJuZWwvbW9kdWxlLmMtOTctXFx0aWYgKCFjaGFpbnMpIHtcXG4tLVxcbmFyY2gvYWxwaGEva2VybmVsL3NldHVwLmM9MzkwPXJlZ2lzdGVyX2NwdXModm9pZClcXG4tLVxcbmFyY2gvYWxwaGEva2VybmVsL3NldHVwLmMtMzk0LVxcdGZvcl9lYWNoX3Bvc3NpYmxlX2NwdShpKSB7XFxuYXJjaC9hbHBoYS9rZXJuZWwvc2V0dXAuYzozOTU6XFx0XFx0c3RydWN0IGNwdSAqcCA9IGt6YWxsb2Nfb2JqKCpwKTtcXG5hcmNoL2FscGhhL2tlcm5lbC9zZXR1cC5jLTM5Ni1cXHRcXHRpZiAoIXApXFxuLS1cXG5hcmNoL2FyYy9uZXQvYnBmX2ppdF9jb3JlLmM9MTEyMD1zdGF0aWMgaW50IGppdF9wcmVwYXJlX2ZpbmFsX21lbV9hbGxvYyhzdHJ1Y3Qgaml0X2NvbnRleHQgKmN0eClcXG4tLVxcbmFyY2gvYXJjL25ldC9icGZfaml0X2NvcmUuYy0xMTMxLVxcdGlmIChjdHgtXFx1MDAzZW5lZWRfZXh0cmFfcGFzcykge1xcbmFyY2gvYXJjL25ldC9icGZfaml0X2NvcmUuYzoxMTMyOlxcdFxcdGN0eC1cXHUwMDNlaml0X2RhdGEgPSBremFsbG9jX29iaigqY3R4LVxcdTAwM2VqaXRfZGF0YSk7XFxuYXJjaC9hcmMvbmV0L2JwZl9qaXRfY29yZS5jLTExMzMtXFx0XFx0aWYgKCFjdHgtXFx1MDAzZWppdF9kYXRhKVxcbi0tXFxuYXJjaC9hcm0vY29tbW9uL2xvY29tby5jPTIyMD1sb2NvbW9faW5pdF9vbmVfY2hpbGQoc3RydWN0IGxvY29tbyAqbGNoaXAsIHN0cnVjdCBsb2NvbW9fZGV2X2luZm8gKmluZm8pXFxuLS1cXG5hcmNoL2FybS9jb21tb24vbG9jb21vLmMtMjI0LVxcbmFyY2gvYXJtL2NvbW1vbi9sb2NvbW8uYzoyMjU6XFx0ZGV2ID0ga3phbGxvY19vYmooc3RydWN0IGxvY29tb19kZXYpO1xcbmFyY2gvYXJtL2NvbW1vbi9sb2NvbW8uYy0yMjYtXFx0aWYgKCFkZXYpIHtcXG4tLVxcbmFyY2gvYXJtL2NvbW1vbi9sb2NvbW8uYz0zNTY9X19sb2NvbW9fcHJvYmUoc3RydWN0IGRldmljZSAqbWUsIHN0cnVjdCByZXNvdXJjZSAqbWVtLCBpbnQgaXJxKVxcbi0tXFxuYXJjaC9hcm0vY29tbW9uL2xvY29tby5jLTM2Mi1cXG5hcmNoL2FybS9jb21tb24vbG9jb21vLmM6MzYzOlxcdGxjaGlwID0ga3phbGxvY19vYmooc3RydWN0IGxvY29tbyk7XFxuYXJjaC9hcm0vY29tbW9uL2xvY29tby5jLTM2NC1cXHRpZiAoIWxjaGlwKVxcbi0tXFxuYXJjaC9hcm0vY29tbW9uL3NhMTExMS5jPTczMz1zYTExMTFfaW5pdF9vbmVfY2hpbGQoc3RydWN0IHNhMTExMSAqc2FjaGlwLCBzdHJ1Y3QgcmVzb3VyY2UgKnBhcmVudCxcXG4tLVxcbmFyY2gvYXJtL2NvbW1vbi9zYTExMTEuYy03MzktXFxuYXJjaC9hcm0vY29tbW9uL3NhMTExMS5jOjc0MDpcXHRkZXYgPSBremFsbG9jX29iaihzdHJ1Y3Qgc2ExMTExX2Rldik7XFxuYXJjaC9hcm0vY29tbW9uL3NhMTExMS5jLTc0MS1cXHRpZiAoIWRldikge1xcbi0tXFxuYXJjaC9hcm0vY29tbW9uL3Njb29wLmM9MTc4PXN0YXRpYyBpbnQgc2Nvb3BfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldilcXG4tLVxcbmFyY2gvYXJtL2NvbW1vbi9zY29vcC5jLTE4Ny1cXG5hcmNoL2FybS9jb21tb24vc2Nvb3AuYzoxODg6XFx0ZGV2cHRyID0ga3phbGxvY19vYmooc3RydWN0IHNjb29wX2Rldik7XFxuYXJjaC9hcm0vY29tbW9uL3Njb29wLmMtMTg5LVxcdGlmICghZGV2cHRyKVxcbi0tXFxuYXJjaC9hcm0va2VybmVsL3NtcC5jPTEwOD1zdGF0aWMgaW50IHNlY29uZGFyeV9iaWdsaXR0bGVfcHJlcGFyZSh1bnNpZ25lZCBpbnQgY3B1KVxcbi0tXFxuYXJjaC9hcm0va2VybmVsL3NtcC5jLTExMC1cXHRpZiAoIWNwdV92dGFibGVbY3B1XSlcXG5hcmNoL2FybS9rZXJuZWwvc21wLmM6MTExOlxcdFxcdGNwdV92dGFibGVbY3B1XSA9IGt6YWxsb2Nfb2JqKCpjcHVfdnRhYmxlW2NwdV0pO1xcbmFyY2gvYXJtL2tlcm5lbC9zbXAuYy0xMTItXFxuLS1cXG5hcmNoL2FybS9rZXJuZWwvdmRzby5jPTE2OT1zdGF0aWMgaW50IF9faW5pdCB2ZHNvX2luaXQodm9pZClcXG4tLVxcbmFyY2gvYXJtL2tlcm5lbC92ZHNvLmMtMTgxLVxcdC8qIEFsbG9jYXRlIHRoZSBWRFNPIHRleHQgcGFnZWxpc3QgKi9cXG5hcmNoL2FybS9rZXJuZWwvdmRzby5jOjE4MjpcXHR2ZHNvX3RleHRfcGFnZWxpc3QgPSBremFsbG9jX29ianMoc3RydWN0IHBhZ2UgKiwgdGV4dF9wYWdlcyk7XFxuYXJjaC9hcm0va2VybmVsL3Zkc28uYy0xODMtXFx0aWYgKHZkc29fdGV4dF9wYWdlbGlzdCA9PSBOVUxMKVxcbi0tXFxuYXJjaC9hcm0vbWFjaC1mb290YnJpZGdlL2RjMjEyODUuYz0yNjE9aW50IF9faW5pdCBkYzIxMjg1X3NldHVwKGludCBuciwgc3RydWN0IHBjaV9zeXNfZGF0YSAqc3lzKVxcbi0tXFxuYXJjaC9hcm0vbWFjaC1mb290YnJpZGdlL2RjMjEyODUuYy0yNjQtXFxuYXJjaC9hcm0vbWFjaC1mb290YnJpZGdlL2RjMjEyODUuYzoyNjU6XFx0cmVzID0ga3phbGxvY19vYmpzKHN0cnVjdCByZXNvdXJjZSwgMik7XFxuYXJjaC9hcm0vbWFjaC1mb290YnJpZGdlL2RjMjEyODUuYy0yNjYtXFx0aWYgKCFyZXMpIHtcXG4tLVxcbmFyY2gvYXJtL21hY2gtZm9vdGJyaWRnZS9lYnNhMjg1LmM9Njk9c3RhdGljIGludCBfX2luaXQgZWJzYTI4NV9sZWRzX2luaXQodm9pZClcXG4tLVxcbmFyY2gvYXJtL21hY2gtZm9vdGJyaWRnZS9lYnNhMjg1LmMtODYtXFxuYXJjaC9hcm0vbWFjaC1mb290YnJpZGdlL2Vic2EyODUuYzo4NzpcXHRcXHRsZWQgPSBremFsbG9jX29iaigqbGVkKTtcXG5hcmNoL2FybS9tYWNoLWZvb3RicmlkZ2UvZWJzYTI4NS5jLTg4LVxcdFxcdGlmICghbGVkKVxcbi0tXFxuYXJjaC9hcm0vbWFjaC1mb290YnJpZGdlL25ldHdpbmRlci1ody5jPTcyMD1zdGF0aWMgaW50IF9faW5pdCBuZXR3aW5kZXJfbGVkc19pbml0KHZvaWQpXFxuLS1cXG5hcmNoL2FybS9tYWNoLWZvb3RicmlkZ2UvbmV0d2luZGVyLWh3LmMtNzI5LVxcbmFyY2gvYXJtL21hY2gtZm9vdGJyaWRnZS9uZXR3aW5kZXItaHcuYzo3MzA6XFx0XFx0bGVkID0ga3phbGxvY19vYmooKmxlZCk7XFxuYXJjaC9hcm0vbWFjaC1mb290YnJpZGdlL25ldHdpbmRlci1ody5jLTczMS1cXHRcXHRpZiAoIWxlZClcXG4tLVxcbmFyY2gvYXJtL21hY2gtaW14L21tZGMuYz00NzM9c3RhdGljIGludCBpbXhfbW1kY19wZXJmX2luaXQoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldiwgdm9pZCBfX2lvbWVtICptbWRjX2Jhc2UsXFxuLS1cXG5hcmNoL2FybS9tYWNoLWlteC9tbWRjLmMtNDc5LVxcbmFyY2gvYXJtL21hY2gtaW14L21tZGMuYzo0ODA6XFx0cG11X21tZGMgPSBremFsbG9jX29iaigqcG11X21tZGMpO1xcbmFyY2gvYXJtL21hY2gtaW14L21tZGMuYy00ODEtXFx0aWYgKCFwbXVfbW1kYykge1xcbi0tXFxuYXJjaC9hcm0vbWFjaC1tdmVidS9ib2FyZC12Ny5jPTExND1zdGF0aWMgdm9pZCBfX2luaXQgaTJjX3F1aXJrKHZvaWQpXFxuLS1cXG5hcmNoL2FybS9tYWNoLW12ZWJ1L2JvYXJkLXY3LmMtMTI5LVxcbmFyY2gvYXJtL21hY2gtbXZlYnUvYm9hcmQtdjcuYzoxMzA6XFx0XFx0bmV3X2NvbXBhdCA9IGt6YWxsb2Nfb2JqKCpuZXdfY29tcGF0KTtcXG5hcmNoL2FybS9tYWNoLW12ZWJ1L2JvYXJkLXY3LmMtMTMxLVxcbi0tXFxuYXJjaC9hcm0vbWFjaC1tdmVidS9jb2hlcmVuY3kuYz0xNjM9c3RhdGljIHZvaWQgX19pbml0IGFybWFkYV8zNzVfMzgwX2NvaGVyZW5jeV9pbml0KHN0cnVjdCBkZXZpY2Vfbm9kZSAqbnApXFxuLS1cXG5hcmNoL2FybS9tYWNoLW12ZWJ1L2NvaGVyZW5jeS5jLTE4Ny1cXG5hcmNoL2FybS9tYWNoLW12ZWJ1L2NvaGVyZW5jeS5jOjE4ODpcXHRcXHRwID0ga3phbGxvY19vYmooKnApO1xcbmFyY2gvYXJtL21hY2gtbXZlYnUvY29oZXJlbmN5LmMtMTg5LVxcdFxcdHAtXFx1MDAzZW5hbWUgPSBrc3RyZHVwKFxcXCJhcm0saW8tY29oZXJlbnRcXFwiLCBHRlBfS0VSTkVMKTtcXG4tLVxcbmFyY2gvYXJtL21hY2gtbXZlYnUvbXZlYnUtc29jLWlkLmM9MTQ4PXN0YXRpYyBpbnQgX19pbml0IG12ZWJ1X3NvY19kZXZpY2Uodm9pZClcXG4tLVxcbmFyY2gvYXJtL21hY2gtbXZlYnUvbXZlYnUtc29jLWlkLmMtMTU2LVxcbmFyY2gvYXJtL21hY2gtbXZlYnUvbXZlYnUtc29jLWlkLmM6MTU3OlxcdHNvY19kZXZfYXR0ciA9IGt6YWxsb2Nfb2JqKCpzb2NfZGV2X2F0dHIpO1xcbmFyY2gvYXJtL21hY2gtbXZlYnUvbXZlYnUtc29jLWlkLmMtMTU4LVxcdGlmICghc29jX2Rldl9hdHRyKVxcbi0tXFxuYXJjaC9hcm0vbWFjaC1teHMvbWFjaC1teHMuYz0zODA9c3RhdGljIHZvaWQgX19pbml0IG14c19tYWNoaW5lX2luaXQodm9pZClcXG4tLVxcbmFyY2gvYXJtL21hY2gtbXhzL21hY2gtbXhzLmMtMzg5LVxcbmFyY2gvYXJtL21hY2gtbXhzL21hY2gtbXhzLmM6MzkwOlxcdHNvY19kZXZfYXR0ciA9IGt6YWxsb2Nfb2JqKCpzb2NfZGV2X2F0dHIpO1xcbmFyY2gvYXJtL21hY2gtbXhzL21hY2gtbXhzLmMtMzkxLVxcdGlmICghc29jX2Rldl9hdHRyKVxcbi0tXFxuYXJjaC9hcm0vbWFjaC1vbWFwMS9kbWEuYz0yOTQ9c3RhdGljIGludCBfX2luaXQgb21hcDFfc3lzdGVtX2RtYV9pbml0KHZvaWQpXFxuLS1cXG5hcmNoL2FybS9tYWNoLW9tYXAxL2RtYS5jLTMyMS1cXG5hcmNoL2FybS9tYWNoLW9tYXAxL2RtYS5jOjMyMjpcXHRkID0ga3phbGxvY19vYmooKmQpO1xcbmFyY2gvYXJtL21hY2gtb21hcDEvZG1hLmMtMzIzLVxcdGlmICghZCkge1xcbi0tXFxuYXJjaC9hcm0vbWFjaC1vbWFwMS9tY2JzcC5jPTI5Mj1zdGF0aWMgdm9pZCBvbWFwX21jYnNwX3JlZ2lzdGVyX2JvYXJkX2NmZyhzdHJ1Y3QgcmVzb3VyY2UgKnJlcywgaW50IHJlc19jb3VudCxcXG4tLVxcbmFyY2gvYXJtL21hY2gtb21hcDEvbWNic3AuYy0yOTYtXFxuYXJjaC9hcm0vbWFjaC1vbWFwMS9tY2JzcC5jOjI5NzpcXHRvbWFwX21jYnNwX2RldmljZXMgPSBremFsbG9jX29ianMoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqLCBzaXplKTtcXG5hcmNoL2FybS9tYWNoLW9tYXAxL21jYnNwLmMtMjk4LVxcdGlmICghb21hcF9tY2JzcF9kZXZpY2VzKSB7XFxuLS1cXG5hcmNoL2FybS9tYWNoLW9tYXAxL3RpbWVyLmM9NTE9c3RhdGljIGludCBfX2luaXQgb21hcDFfZG1fdGltZXJfaW5pdCh2b2lkKVxcbi0tXFxuYXJjaC9hcm0vbWFjaC1vbWFwMS90aW1lci5jLTEyNy1cXG5hcmNoL2FybS9tYWNoLW9tYXAxL3RpbWVyLmM6MTI4OlxcdFxcdHBkYXRhID0ga3phbGxvY19vYmooKnBkYXRhKTtcXG5hcmNoL2FybS9tYWNoLW9tYXAxL3RpbWVyLmMtMTI5LVxcdFxcdGlmICghcGRhdGEpIHtcXG4tLVxcbmFyY2gvYXJtL21hY2gtb21hcDIvY2xrdDJ4eHhfdmlydF9wcmNtX3NldC5jPTIzMD12b2lkIG9tYXAyeHh4X2Nsa3RfdnBzX2luaXQodm9pZClcXG4tLVxcbmFyY2gvYXJtL21hY2gtb21hcDIvY2xrdDJ4eHhfdmlydF9wcmNtX3NldC5jLTIzOS1cXG5hcmNoL2FybS9tYWNoLW9tYXAyL2Nsa3QyeHh4X3ZpcnRfcHJjbV9zZXQuYzoyNDA6XFx0aHcgPSBremFsbG9jX29iaigqaHcpO1xcbmFyY2gvYXJtL21hY2gtb21hcDIvY2xrdDJ4eHhfdmlydF9wcmNtX3NldC5jLTI0MS1cXHRpZiAoIWh3KVxcbi0tXFxuYXJjaC9hcm0vbWFjaC1vbWFwMi9pZC5jPTc4Nj12b2lkIF9faW5pdCBvbWFwX3NvY19kZXZpY2VfaW5pdCh2b2lkKVxcbi0tXFxuYXJjaC9hcm0vbWFjaC1vbWFwMi9pZC5jLTc5MC1cXG5hcmNoL2FybS9tYWNoLW9tYXAyL2lkLmM6NzkxOlxcdHNvY19kZXZfYXR0ciA9IGt6YWxsb2Nfb2JqKCpzb2NfZGV2X2F0dHIpO1xcbmFyY2gvYXJtL21hY2gtb21hcDIvaWQuYy03OTItXFx0aWYgKCFzb2NfZGV2X2F0dHIpXFxuLS1cXG5hcmNoL2FybS9tYWNoLW9tYXAyL29tYXBfZGV2aWNlLmM9MTMxPXN0YXRpYyBpbnQgb21hcF9kZXZpY2VfYnVpbGRfZnJvbV9kdChzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KVxcbi0tXFxuYXJjaC9hcm0vbWFjaC1vbWFwMi9vbWFwX2RldmljZS5jLTE1OC1cXG5hcmNoL2FybS9tYWNoLW9tYXAyL29tYXBfZGV2aWNlLmM6MTU5OlxcdGh3bW9kcyA9IGt6YWxsb2Nfb2JqcyhzdHJ1Y3Qgb21hcF9od21vZCAqLCBvaF9jbnQpO1xcbmFyY2gvYXJtL21hY2gtb21hcDIvb21hcF9kZXZpY2UuYy0xNjAtXFx0aWYgKCFod21vZHMpIHtcXG4tLVxcbmFyY2gvYXJtL21hY2gtb21hcDIvb21hcF9od21vZC5jPTMzODE9c3RhdGljIGludCBvbWFwX2h3bW9kX2FsbG9jYXRlX21vZHVsZShzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBvbWFwX2h3bW9kICpvaCxcXG4tLVxcbmFyY2gvYXJtL21hY2gtb21hcDIvb21hcF9od21vZC5jLTMzOTQtXFxuYXJjaC9hcm0vbWFjaC1vbWFwMi9vbWFwX2h3bW9kLmM6MzM5NTpcXHRzeXNjID0ga3phbGxvY19vYmooKnN5c2MpO1xcbmFyY2gvYXJtL21hY2gtb21hcDIvb21hcF9od21vZC5jLTMzOTYtXFx0aWYgKCFzeXNjKVxcbi0tXFxuYXJjaC9hcm0vbWFjaC1vbWFwMi9vbWFwX2h3bW9kLmMtMzQyNC1cXHRpZiAobGlzdF9lbXB0eShcXHUwMDI2b2gtXFx1MDAzZXNsYXZlX3BvcnRzKSkge1xcbmFyY2gvYXJtL21hY2gtb21hcDIvb21hcF9od21vZC5jOjM0MjU6XFx0XFx0b2kgPSBremFsbG9jX29iaigqb2kpO1xcbmFyY2gvYXJtL21hY2gtb21hcDIvb21hcF9od21vZC5jLTM0MjYtXFx0XFx0aWYgKCFvaSlcXG4tLVxcbmFyY2gvYXJtL21hY2gtb21hcDIvb21hcF9od21vZC5jPTM1MTM9aW50IG9tYXBfaHdtb2RfaW5pdF9tb2R1bGUoc3RydWN0IGRldmljZSAqZGV2LFxcbi0tXFxuYXJjaC9hcm0vbWFjaC1vbWFwMi9vbWFwX2h3bW9kLmMtMzUyNy1cXHRpZiAoIW9oKSB7XFxuYXJjaC9hcm0vbWFjaC1vbWFwMi9vbWFwX2h3bW9kLmM6MzUyODpcXHRcXHRvaCA9IGt6YWxsb2Nfb2JqKCpvaCk7XFxuYXJjaC9hcm0vbWFjaC1vbWFwMi9vbWFwX2h3bW9kLmMtMzUyOS1cXHRcXHRpZiAoIW9oKVxcbi0tXFxuYXJjaC9hcm0vbWFjaC1vbWFwMi9vbWFwX2h3bW9kLmMtMzUzOC1cXG5hcmNoL2FybS9tYWNoLW9tYXAyL29tYXBfaHdtb2QuYzozNTM5OlxcdFxcdG9oLVxcdTAwM2VjbGFzcyA9IGt6YWxsb2Nfb2JqKCpvaC1cXHUwMDNlY2xhc3MpO1xcbmFyY2gvYXJtL21hY2gtb21hcDIvb21hcF9od21vZC5jLTM1NDAtXFx0XFx0aWYgKCFvaC1cXHUwMDNlY2xhc3MpIHtcXG4tLVxcbmFyY2gvYXJtL21hY2gtb21hcDIvcG0zM3h4LWNvcmUuYz0zNzk9c3RhdGljIGludCBfX2luaXQgYW14M19pZGxlX2luaXQoc3RydWN0IGRldmljZV9ub2RlICpjcHVfbm9kZSwgaW50IGNwdSlcXG4tLVxcbmFyY2gvYXJtL21hY2gtb21hcDIvcG0zM3h4LWNvcmUuYy00MTItXFxuYXJjaC9hcm0vbWFjaC1vbWFwMi9wbTMzeHgtY29yZS5jOjQxMzpcXHRpZGxlX3N0YXRlcyA9IGt6YWxsb2Nfb2JqcygqaWRsZV9zdGF0ZXMsIHN0YXRlX2NvdW50KTtcXG5hcmNoL2FybS9tYWNoLW9tYXAyL3BtMzN4eC1jb3JlLmMtNDE0LVxcdGlmICghaWRsZV9zdGF0ZXMpXFxuLS1cXG5hcmNoL2FybS9tYWNoLW9tYXAyL3NyX2RldmljZS5jPTMwPXN0YXRpYyB2b2lkIF9faW5pdCBzcl9zZXRfbnZhbHVlcyhzdHJ1Y3Qgb21hcF92b2x0X2RhdGEgKnZvbHRfZGF0YSxcXG4tLVxcbmFyY2gvYXJtL21hY2gtb21hcDIvc3JfZGV2aWNlLmMtNDEtXFxuYXJjaC9hcm0vbWFjaC1vbWFwMi9zcl9kZXZpY2UuYzo0MjpcXHRudmFsdWVfdGFibGUgPSBremFsbG9jX29ianMoKm52YWx1ZV90YWJsZSwgY291bnQpO1xcbmFyY2gvYXJtL21hY2gtb21hcDIvc3JfZGV2aWNlLmMtNDMtXFx0aWYgKCFudmFsdWVfdGFibGUpXFxuLS1cXG5hcmNoL2FybS9tYWNoLW9yaW9uNXgvcGNpLmM9MTM5PXN0YXRpYyBpbnQgX19pbml0IHBjaWVfc2V0dXAoc3RydWN0IHBjaV9zeXNfZGF0YSAqc3lzKVxcbi0tXFxuYXJjaC9hcm0vbWFjaC1vcmlvbjV4L3BjaS5jLTE3MS1cXHQgKi9cXG5hcmNoL2FybS9tYWNoLW9yaW9uNXgvcGNpLmM6MTcyOlxcdHJlcyA9IGt6YWxsb2Nfb2JqKHN0cnVjdCByZXNvdXJjZSk7XFxuYXJjaC9hcm0vbWFjaC1vcmlvbjV4L3BjaS5jLTE3My1cXHRpZiAoIXJlcylcXG4tLVxcbmFyY2gvYXJtL21hY2gtb3Jpb241eC9wY2kuYz00NjY9c3RhdGljIGludCBfX2luaXQgcGNpX3NldHVwKHN0cnVjdCBwY2lfc3lzX2RhdGEgKnN5cylcXG4tLVxcbmFyY2gvYXJtL21hY2gtb3Jpb241eC9wY2kuYy00OTItXFx0ICovXFxuYXJjaC9hcm0vbWFjaC1vcmlvbjV4L3BjaS5jOjQ5MzpcXHRyZXMgPSBremFsbG9jX29iaihzdHJ1Y3QgcmVzb3VyY2UpO1xcbmFyY2gvYXJtL21hY2gtb3Jpb241eC9wY2kuYy00OTQtXFx0aWYgKCFyZXMpXFxuLS1cXG5hcmNoL2FybS9tYWNoLXJwYy9lY2FyZC5jPTY4OT1zdGF0aWMgc3RydWN0IGV4cGFuc2lvbl9jYXJkICpfX2luaXQgZWNhcmRfYWxsb2NfY2FyZChpbnQgdHlwZSwgaW50IHNsb3QpXFxuLS1cXG5hcmNoL2FybS9tYWNoLXJwYy9lY2FyZC5jLTY5NC1cXG5hcmNoL2FybS9tYWNoLXJwYy9lY2FyZC5jOjY5NTpcXHRlYyA9IGt6YWxsb2Nfb2JqKGVjYXJkX3QpO1xcbmFyY2gvYXJtL21hY2gtcnBjL2VjYXJkLmMtNjk2LVxcdGlmICghZWMpIHtcXG4tLVxcbmFyY2gvYXJtL21hY2gtc2ExMTAwL2Nsb2NrLmM9OTM9aW50IF9faW5pdCBzYTExeHhfY2xrX2luaXQodm9pZClcXG4tLVxcbmFyY2gvYXJtL21hY2gtc2ExMTAwL2Nsb2NrLmMtMTA5LVxcbmFyY2gvYXJtL21hY2gtc2ExMTAwL2Nsb2NrLmM6MTEwOlxcdGh3ID0ga3phbGxvY19vYmooKmh3KTtcXG5hcmNoL2FybS9tYWNoLXNhMTEwMC9jbG9jay5jLTExMS1cXHRpZiAoIWh3KVxcbi0tXFxuYXJjaC9hcm0vbWFjaC1zYTExMDAvY2xvY2suYy0xMzEtXFxuYXJjaC9hcm0vbWFjaC1zYTExMDAvY2xvY2suYzoxMzI6XFx0aHcgPSBremFsbG9jX29iaigqaHcpO1xcbmFyY2gvYXJtL21hY2gtc2ExMTAwL2Nsb2NrLmMtMTMzLVxcdGlmICghaHcpXFxuLS1cXG5hcmNoL2FybS9tYWNoLXNhMTEwMC9nZW5lcmljLmM9MzE3PWludCBfX2luaXQgc2ExMXgwX3JlZ2lzdGVyX2ZpeGVkX3JlZ3VsYXRvcihpbnQgbixcXG4tLVxcbmFyY2gvYXJtL21hY2gtc2ExMTAwL2dlbmVyaWMuYy0zMjMtXFxuYXJjaC9hcm0vbWFjaC1zYTExMDAvZ2VuZXJpYy5jOjMyNDpcXHRjZmctXFx1MDAzZWluaXRfZGF0YSA9IGlkID0ga3phbGxvY19vYmooKmNmZy1cXHUwMDNlaW5pdF9kYXRhKTtcXG5hcmNoL2FybS9tYWNoLXNhMTEwMC9nZW5lcmljLmMtMzI1LVxcdGlmICghY2ZnLVxcdTAwM2Vpbml0X2RhdGEpXFxuLS1cXG5hcmNoL2FybS9tYWNoLXNhMTEwMC9uZXBvbnNldC5jPTIyNT1zdGF0aWMgaW50IG5lcG9uc2V0X3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRldilcXG4tLVxcbmFyY2gvYXJtL21hY2gtc2ExMTAwL25lcG9uc2V0LmMtMjc4LVxcbmFyY2gvYXJtL21hY2gtc2ExMTAwL25lcG9uc2V0LmM6Mjc5OlxcdGQgPSBremFsbG9jX29iaigqZCk7XFxuYXJjaC9hcm0vbWFjaC1zYTExMDAvbmVwb25zZXQuYy0yODAtXFx0aWYgKCFkKSB7XFxuLS1cXG5hcmNoL2FybS9tYWNoLXNobW9iaWxlL3JlZ3VsYXRvci1xdWlyay1yY2FyLWdlbjIuYz0xNDE9c3RhdGljIGludCBfX2luaXQgcmNhcl9nZW4yX3JlZ3VsYXRvcl9xdWlyayh2b2lkKVxcbi0tXFxuYXJjaC9hcm0vbWFjaC1zaG1vYmlsZS9yZWd1bGF0b3ItcXVpcmstcmNhci1nZW4yLmMtMTY2LVxcbmFyY2gvYXJtL21hY2gtc2htb2JpbGUvcmVndWxhdG9yLXF1aXJrLXJjYXItZ2VuMi5jOjE2NzpcXHRcXHRxdWlyayA9IGt6YWxsb2Nfb2JqKCpxdWlyayk7XFxuYXJjaC9hcm0vbWFjaC1zaG1vYmlsZS9yZWd1bGF0b3ItcXVpcmstcmNhci1nZW4yLmMtMTY4LVxcdFxcdGlmICghcXVpcmspIHtcXG4tLVxcbmFyY2gvYXJtL21hY2gtdmVyc2F0aWxlL3NwYy5jPTM5Mz1zdGF0aWMgaW50IHZlX3NwY19wb3B1bGF0ZV9vcHBzKHVpbnQzMl90IGNsdXN0ZXIpXFxuLS1cXG5hcmNoL2FybS9tYWNoLXZlcnNhdGlsZS9zcGMuYy0zOTctXFxuYXJjaC9hcm0vbWFjaC12ZXJzYXRpbGUvc3BjLmM6Mzk4OlxcdG9wcHMgPSBremFsbG9jX29ianMoKm9wcHMsIE1BWF9PUFBTKTtcXG5hcmNoL2FybS9tYWNoLXZlcnNhdGlsZS9zcGMuYy0zOTktXFx0aWYgKCFvcHBzKVxcbi0tXFxuYXJjaC9hcm0vbWFjaC12ZXJzYXRpbGUvc3BjLmM9NDQyPWludCBfX2luaXQgdmVfc3BjX2luaXQodm9pZCBfX2lvbWVtICpiYXNlYWRkciwgdTMyIGExNV9jbHVzaWQsIGludCBpcnEpXFxuLS1cXG5hcmNoL2FybS9tYWNoLXZlcnNhdGlsZS9zcGMuYy00NDQtXFx0aW50IHJldDtcXG5hcmNoL2FybS9tYWNoLXZlcnNhdGlsZS9zcGMuYzo0NDU6XFx0aW5mbyA9IGt6YWxsb2Nfb2JqKCppbmZvKTtcXG5hcmNoL2FybS9tYWNoLXZlcnNhdGlsZS9zcGMuYy00NDYtXFx0aWYgKCFpbmZvKVxcbi0tXFxuYXJjaC9hcm0vbWFjaC12ZXJzYXRpbGUvc3BjLmM9NTIzPXN0YXRpYyBzdHJ1Y3QgY2xrICp2ZV9zcGNfY2xrX3JlZ2lzdGVyKHN0cnVjdCBkZXZpY2UgKmNwdV9kZXYpXFxuLS1cXG5hcmNoL2FybS9tYWNoLXZlcnNhdGlsZS9zcGMuYy01MjctXFxuYXJjaC9hcm0vbWFjaC12ZXJzYXRpbGUvc3BjLmM6NTI4OlxcdHNwYyA9IGt6YWxsb2Nfb2JqKCpzcGMpO1xcbmFyY2gvYXJtL21hY2gtdmVyc2F0aWxlL3NwYy5jLTUyOS1cXHRpZiAoIXNwYylcXG4tLVxcbmFyY2gvYXJtL21hY2gtdmVyc2F0aWxlL3ZlcnNhdGlsZS5jPTEyMz1zdGF0aWMgdm9pZCBfX2luaXQgdmVyc2F0aWxlX2R0X3BjaV9pbml0KHZvaWQpXFxuLS1cXG5hcmNoL2FybS9tYWNoLXZlcnNhdGlsZS92ZXJzYXRpbGUuYy0xNDQtXFxuYXJjaC9hcm0vbWFjaC12ZXJzYXRpbGUvdmVyc2F0aWxlLmM6MTQ1OlxcdG5ld3Byb3AgPSBremFsbG9jX29iaigqbmV3cHJvcCk7XFxuYXJjaC9hcm0vbWFjaC12ZXJzYXRpbGUvdmVyc2F0aWxlLmMtMTQ2LVxcdGlmICghbmV3cHJvcClcXG4tLVxcbmFyY2gvYXJtL21hY2gtenlucS9jb21tb24uYz0xMDU9c3RhdGljIHZvaWQgX19pbml0IHp5bnFfaW5pdF9tYWNoaW5lKHZvaWQpXFxuLS1cXG5hcmNoL2FybS9tYWNoLXp5bnEvY29tbW9uLmMtMTEwLVxcbmFyY2gvYXJtL21hY2gtenlucS9jb21tb24uYzoxMTE6XFx0c29jX2Rldl9hdHRyID0ga3phbGxvY19vYmooKnNvY19kZXZfYXR0cik7XFxuYXJjaC9hcm0vbWFjaC16eW5xL2NvbW1vbi5jLTExMi1cXHRpZiAoIXNvY19kZXZfYXR0cilcXG4tLVxcbmFyY2gvYXJtL21tL2NhY2hlLWwyeDAtcG11LmM9NTAzPXN0YXRpYyBfX2luaXQgaW50IGwyeDBfcG11X2luaXQodm9pZClcXG4tLVxcbmFyY2gvYXJtL21tL2NhY2hlLWwyeDAtcG11LmMtNTA5LVxcbmFyY2gvYXJtL21tL2NhY2hlLWwyeDAtcG11LmM6NTEwOlxcdGwyeDBfcG11ID0ga3phbGxvY19vYmooKmwyeDBfcG11KTtcXG5hcmNoL2FybS9tbS9jYWNoZS1sMngwLXBtdS5jLTUxMS1cXHRpZiAoIWwyeDBfcG11KSB7XFxuLS1cXG5hcmNoL2FybS9tbS9jYWNoZS11bmlwaGllci5jPTMxNT1zdGF0aWMgaW50IF9faW5pdCBfX3VuaXBoaWVyX2NhY2hlX2luaXQoc3RydWN0IGRldmljZV9ub2RlICpucCxcXG4tLVxcbmFyY2gvYXJtL21tL2NhY2hlLXVuaXBoaWVyLmMtMzQ0LVxcbmFyY2gvYXJtL21tL2NhY2hlLXVuaXBoaWVyLmM6MzQ1OlxcdGRhdGEgPSBremFsbG9jX29iaigqZGF0YSk7XFxuYXJjaC9hcm0vbW0vY2FjaGUtdW5pcGhpZXIuYy0zNDYtXFx0aWYgKCFkYXRhKVxcbi0tXFxuYXJjaC9hcm0vbW0vZG1hLW1hcHBpbmcuYz01MzM9c3RhdGljIHZvaWQgKl9fZG1hX2FsbG9jKHN0cnVjdCBkZXZpY2UgKmRldiwgc2l6ZV90IHNpemUsIGRtYV9hZGRyX3QgKmhhbmRsZSxcXG4tLVxcbmFyY2gvYXJtL21tL2RtYS1tYXBwaW5nLmMtNTYwLVxcbmFyY2gvYXJtL21tL2RtYS1tYXBwaW5nLmM6NTYxOlxcdGJ1ZiA9IGt6YWxsb2Nfb2JqKCpidWYsXFxuYXJjaC9hcm0vbW0vZG1hLW1hcHBpbmcuYy01NjItXFx0XFx0XFx0ICBnZnAgXFx1MDAyNiB+KF9fR0ZQX0RNQSB8IF9fR0ZQX0RNQTMyIHwgX19HRlBfSElHSE1FTSkpO1xcbi0tXFxuYXJjaC9hcm0vbW0vZG1hLW1hcHBpbmcuYz0xNDg3PWFybV9pb21tdV9jcmVhdGVfbWFwcGluZyhzdHJ1Y3QgZGV2aWNlICpkZXYsIGRtYV9hZGRyX3QgYmFzZSwgdTY0IHNpemUpXFxuLS1cXG5hcmNoL2FybS9tbS9kbWEtbWFwcGluZy5jLTE1MDYtXFxuYXJjaC9hcm0vbW0vZG1hLW1hcHBpbmcuYzoxNTA3OlxcdG1hcHBpbmcgPSBremFsbG9jX29iaihzdHJ1Y3QgZG1hX2lvbW11X21hcHBpbmcpO1xcbmFyY2gvYXJtL21tL2RtYS1tYXBwaW5nLmMtMTUwOC1cXHRpZiAoIW1hcHBpbmcpXFxuLS1cXG5hcmNoL2FybS94ZW4vZW5saWdodGVuLmM9MzE2PWludCBfX2luaXQgYXJjaF94ZW5fdW5wb3B1bGF0ZWRfaW5pdChzdHJ1Y3QgcmVzb3VyY2UgKipyZXMpXFxuLS1cXG5hcmNoL2FybS94ZW4vZW5saWdodGVuLmMtMzQzLVxcbmFyY2gvYXJtL3hlbi9lbmxpZ2h0ZW4uYzozNDQ6XFx0cmVncyA9IGt6YWxsb2Nfb2JqcygqcmVncywgbnJfcmVnKTtcXG5hcmNoL2FybS94ZW4vZW5saWdodGVuLmMtMzQ1LVxcdGlmICghcmVncykge1xcbi0tXFxuYXJjaC9hcm0veGVuL2VubGlnaHRlbi5jLTM4Ny1cXG5hcmNoL2FybS94ZW4vZW5saWdodGVuLmM6Mzg4OlxcdFxcdHRtcF9yZXMgPSBremFsbG9jX29iaigqdG1wX3Jlcyk7XFxuYXJjaC9hcm0veGVuL2VubGlnaHRlbi5jLTM4OS1cXHRcXHRpZiAoIXRtcF9yZXMpIHtcXG4tLVxcbmFyY2gvYXJtL3hlbi9wMm0uYz0xNTA9Ym9vbCBfX3NldF9waHlzX3RvX21hY2hpbmVfbXVsdGkodW5zaWduZWQgbG9uZyBwZm4sXFxuLS1cXG5hcmNoL2FybS94ZW4vcDJtLmMtMTc4LVxcbmFyY2gvYXJtL3hlbi9wMm0uYzoxNzk6XFx0cDJtX2VudHJ5ID0ga3phbGxvY19vYmooKnAybV9lbnRyeSwgR0ZQX05PV0FJVCk7XFxuYXJjaC9hcm0veGVuL3AybS5jLTE4MC1cXHRpZiAoIXAybV9lbnRyeSlcXG4tLVxcbmFyY2gvYXJtNjQva2VybmVsL3Zkc28uYz02OD1zdGF0aWMgaW50IF9faW5pdCBfX3Zkc29faW5pdChlbnVtIHZkc29fYWJpIGFiaSlcXG4tLVxcbmFyY2gvYXJtNjQva2VybmVsL3Zkc28uYy04My1cXG5hcmNoL2FybTY0L2tlcm5lbC92ZHNvLmM6ODQ6XFx0dmRzb19wYWdlbGlzdCA9IGt6YWxsb2Nfb2JqcyhzdHJ1Y3QgcGFnZSAqLCB2ZHNvX2luZm9bYWJpXS52ZHNvX3BhZ2VzKTtcXG5hcmNoL2FybTY0L2tlcm5lbC92ZHNvLmMtODUtXFx0aWYgKHZkc29fcGFnZWxpc3QgPT0gTlVMTClcXG4tLVxcbmFyY2gvYXJtNjQva3ZtL21tdS5jPTQ4MD1zdGF0aWMgaW50IHNoYXJlX3Bmbl9oeXAodTY0IHBmbilcXG4tLVxcbmFyY2gvYXJtNjQva3ZtL21tdS5jLTQ5Mi1cXG5hcmNoL2FybTY0L2t2bS9tbXUuYzo0OTM6XFx0dGhpcyA9IGt6YWxsb2Nfb2JqKCp0aGlzKTtcXG5hcmNoL2FybTY0L2t2bS9tbXUuYy00OTQtXFx0aWYgKCF0aGlzKSB7XFxuLS1cXG5hcmNoL2FybTY0L2t2bS9tbXUuYz05ODE9aW50IGt2bV9pbml0X3N0YWdlMl9tbXUoc3RydWN0IGt2bSAqa3ZtLCBzdHJ1Y3Qga3ZtX3MyX21tdSAqbW11LCB1bnNpZ25lZCBsb25nIHR5cGUpXFxuLS1cXG5hcmNoL2FybTY0L2t2bS9tbXUuYy0xMDA3LVxcbmFyY2gvYXJtNjQva3ZtL21tdS5jOjEwMDg6XFx0cGd0ID0ga3phbGxvY19vYmooKnBndCwgR0ZQX0tFUk5FTF9BQ0NPVU5UKTtcXG5hcmNoL2FybTY0L2t2bS9tbXUuYy0xMDA5LVxcdGlmICghcGd0KVxcbi0tXFxuYXJjaC9hcm02NC9rdm0vbW11LmM9MTE4MD1pbnQgdG9wdXBfaHlwX21lbWNhY2hlKHN0cnVjdCBrdm1faHlwX21lbWNhY2hlICptYywgdW5zaWduZWQgbG9uZyBtaW5fcGFnZXMpXFxuLS1cXG5hcmNoL2FybTY0L2t2bS9tbXUuYy0xMTg1LVxcdGlmICghbWMtXFx1MDAzZW1hcHBpbmcpIHtcXG5hcmNoL2FybTY0L2t2bS9tbXUuYzoxMTg2OlxcdFxcdG1jLVxcdTAwM2VtYXBwaW5nID0ga3phbGxvY19vYmooc3RydWN0IHBrdm1fbWFwcGluZyxcXG5hcmNoL2FybTY0L2t2bS9tbXUuYy0xMTg3LVxcdFxcdFxcdFxcdFxcdCAgR0ZQX0tFUk5FTF9BQ0NPVU5UKTtcXG4tLVxcbmFyY2gvYXJtNjQva3ZtL21tdS5jPTI1MTA9aW50IF9faW5pdCBrdm1fbW11X2luaXQodTMyIGh5cF92YV9iaXRzKVxcbi0tXFxuYXJjaC9hcm02NC9rdm0vbW11LmMtMjU0My1cXG5hcmNoL2FybTY0L2t2bS9tbXUuYzoyNTQ0OlxcdGh5cF9wZ3RhYmxlID0ga3phbGxvY19vYmooKmh5cF9wZ3RhYmxlKTtcXG5hcmNoL2FybTY0L2t2bS9tbXUuYy0yNTQ1LVxcdGlmICghaHlwX3BndGFibGUpIHtcXG4tLVxcbmFyY2gvYXJtNjQva3ZtL25lc3RlZC5jPTEzMjg9aW50IGt2bV92Y3B1X2FsbG9jYXRlX3ZuY3JfdGxiKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcXG4tLVxcbmFyY2gvYXJtNjQva3ZtL25lc3RlZC5jLTEzMzMtXFx0aWYgKCF2Y3B1LVxcdTAwM2VhcmNoLnZuY3JfdGxiKSB7XFxuYXJjaC9hcm02NC9rdm0vbmVzdGVkLmM6MTMzNDpcXHRcXHRzdHJ1Y3Qgdm5jcl90bGIgKnZ0ID0ga3phbGxvY19vYmooKnZjcHUtXFx1MDAzZWFyY2gudm5jcl90bGIsXFxuYXJjaC9hcm02NC9rdm0vbmVzdGVkLmMtMTMzNS1cXHRcXHRcXHRcXHRcXHRcXHQgIEdGUF9LRVJORUxfQUNDT1VOVCk7XFxuLS1cXG5hcmNoL2FybTY0L2t2bS9uZXN0ZWQuYz0xNzkzPWludCBrdm1faW5pdF9udl9zeXNyZWdzKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcXG4tLVxcbmFyY2gvYXJtNjQva3ZtL25lc3RlZC5jLTE4MDItXFxuYXJjaC9hcm02NC9rdm0vbmVzdGVkLmM6MTgwMzpcXHRrdm0tXFx1MDAzZWFyY2guc3lzcmVnX21hc2tzID0ga3phbGxvY19vYmooKihrdm0tXFx1MDAzZWFyY2guc3lzcmVnX21hc2tzKSxcXG5hcmNoL2FybTY0L2t2bS9uZXN0ZWQuYy0xODA0LVxcdFxcdFxcdFxcdFxcdCAgICAgR0ZQX0tFUk5FTF9BQ0NPVU5UKTtcXG4tLVxcbmFyY2gvYXJtNjQva3ZtL3B0ZHVtcC5jPTExNj1zdGF0aWMgc3RydWN0IGt2bV9wdGR1bXBfZ3Vlc3Rfc3RhdGUgKmt2bV9wdGR1bXBfcGFyc2VyX2NyZWF0ZShzdHJ1Y3Qga3ZtX3MyX21tdSAqbW11KVxcbi0tXFxuYXJjaC9hcm02NC9rdm0vcHRkdW1wLmMtMTIxLVxcbmFyY2gvYXJtNjQva3ZtL3B0ZHVtcC5jOjEyMjpcXHRzdCA9IGt6YWxsb2Nfb2JqKHN0cnVjdCBrdm1fcHRkdW1wX2d1ZXN0X3N0YXRlLCBHRlBfS0VSTkVMX0FDQ09VTlQpO1xcbmFyY2gvYXJtNjQva3ZtL3B0ZHVtcC5jLTEyMy1cXHRpZiAoIXN0KVxcbi0tXFxuYXJjaC9hcm02NC9rdm0vdmdpYy92Z2ljLWluaXQuYz0yMDc9c3RhdGljIGludCBrdm1fdmdpY19kaXN0X2luaXQoc3RydWN0IGt2bSAqa3ZtLCB1bnNpZ25lZCBpbnQgbnJfc3BpcylcXG4tLVxcbmFyY2gvYXJtNjQva3ZtL3ZnaWMvdmdpYy1pbml0LmMtMjEzLVxcdGRpc3QtXFx1MDAzZWFjdGl2ZV9zcGlzID0gKGF0b21pY190KUFUT01JQ19JTklUKDApO1xcbmFyY2gvYXJtNjQva3ZtL3ZnaWMvdmdpYy1pbml0LmM6MjE0OlxcdGRpc3QtXFx1MDAzZXNwaXMgPSBremFsbG9jX29ianMoc3RydWN0IHZnaWNfaXJxLCBucl9zcGlzLCBHRlBfS0VSTkVMX0FDQ09VTlQpO1xcbmFyY2gvYXJtNjQva3ZtL3ZnaWMvdmdpYy1pbml0LmMtMjE1LVxcdGlmICghZGlzdC1cXHUwMDNlc3BpcylcXG4tLVxcbmFyY2gvYXJtNjQva3ZtL3ZnaWMvdmdpYy1pbml0LmM9MzE2PXN0YXRpYyBpbnQgdmdpY19hbGxvY2F0ZV9wcml2YXRlX2lycXNfbG9ja2VkKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdTMyIHR5cGUpXFxuLS1cXG5hcmNoL2FybTY0L2t2bS92Z2ljL3ZnaWMtaW5pdC5jLTMzMS1cXG5hcmNoL2FybTY0L2t2bS92Z2ljL3ZnaWMtaW5pdC5jOjMzMjpcXHR2Z2ljX2NwdS1cXHUwMDNlcHJpdmF0ZV9pcnFzID0ga3phbGxvY19vYmpzKHN0cnVjdCB2Z2ljX2lycSxcXG5hcmNoL2FybTY0L2t2bS92Z2ljL3ZnaWMtaW5pdC5jLTMzMy1cXHRcXHRcXHRcXHRcXHQgICAgICBudW1fcHJpdmF0ZV9pcnFzLFxcbi0tXFxuYXJjaC9hcm02NC9rdm0vdmdpYy92Z2ljLWlycWZkLmM9MTQyPWludCBrdm1fdmdpY19zZXR1cF9kZWZhdWx0X2lycV9yb3V0aW5nKHN0cnVjdCBrdm0gKmt2bSlcXG4tLVxcbmFyY2gvYXJtNjQva3ZtL3ZnaWMvdmdpYy1pcnFmZC5jLTE0OC1cXG5hcmNoL2FybTY0L2t2bS92Z2ljL3ZnaWMtaXJxZmQuYzoxNDk6XFx0ZW50cmllcyA9IGt6YWxsb2Nfb2JqcygqZW50cmllcywgbnIsIEdGUF9LRVJORUxfQUNDT1VOVCk7XFxuYXJjaC9hcm02NC9rdm0vdmdpYy92Z2ljLWlycWZkLmMtMTUwLVxcdGlmICghZW50cmllcylcXG4tLVxcbmFyY2gvYXJtNjQva3ZtL3ZnaWMvdmdpYy1pdHMuYz03Nj1zdGF0aWMgc3RydWN0IHZnaWNfaXJxICp2Z2ljX2FkZF9scGkoc3RydWN0IGt2bSAqa3ZtLCB1MzIgaW50aWQsXFxuLS1cXG5hcmNoL2FybTY0L2t2bS92Z2ljL3ZnaWMtaXRzLmMtODctXFxuYXJjaC9hcm02NC9rdm0vdmdpYy92Z2ljLWl0cy5jOjg4OlxcdGlycSA9IGt6YWxsb2Nfb2JqKHN0cnVjdCB2Z2ljX2lycSwgR0ZQX0tFUk5FTF9BQ0NPVU5UKTtcXG5hcmNoL2FybTY0L2t2bS92Z2ljL3ZnaWMtaXRzLmMtODktXFx0aWYgKCFpcnEpXFxuLS1cXG5hcmNoL2FybTY0L2t2bS92Z2ljL3ZnaWMtaXRzLmM9OTcxPXN0YXRpYyBpbnQgdmdpY19pdHNfYWxsb2NfY29sbGVjdGlvbihzdHJ1Y3QgdmdpY19pdHMgKml0cyxcXG4tLVxcbmFyY2gvYXJtNjQva3ZtL3ZnaWMvdmdpYy1pdHMuYy05NzYtXFxuYXJjaC9hcm02NC9rdm0vdmdpYy92Z2ljLWl0cy5jOjk3NzpcXHRjb2xsZWN0aW9uID0ga3phbGxvY19vYmooKmNvbGxlY3Rpb24sIEdGUF9LRVJORUxfQUNDT1VOVCk7XFxuYXJjaC9hcm02NC9rdm0vdmdpYy92Z2ljLWl0cy5jLTk3OC1cXHRpZiAoIWNvbGxlY3Rpb24pXFxuLS1cXG5hcmNoL2FybTY0L2t2bS92Z2ljL3ZnaWMtaXRzLmM9MTAxNT1zdGF0aWMgc3RydWN0IGl0c19pdGUgKnZnaWNfaXRzX2FsbG9jX2l0ZShzdHJ1Y3QgaXRzX2RldmljZSAqZGV2aWNlLFxcbi0tXFxuYXJjaC9hcm02NC9rdm0vdmdpYy92Z2ljLWl0cy5jLTEwMjAtXFxuYXJjaC9hcm02NC9rdm0vdmdpYy92Z2ljLWl0cy5jOjEwMjE6XFx0aXRlID0ga3phbGxvY19vYmooKml0ZSwgR0ZQX0tFUk5FTF9BQ0NPVU5UKTtcXG5hcmNoL2FybTY0L2t2bS92Z2ljL3ZnaWMtaXRzLmMtMTAyMi1cXHRpZiAoIWl0ZSlcXG4tLVxcbmFyY2gvYXJtNjQva3ZtL3ZnaWMvdmdpYy1pdHMuYz0xMTQyPXN0YXRpYyBzdHJ1Y3QgaXRzX2RldmljZSAqdmdpY19pdHNfYWxsb2NfZGV2aWNlKHN0cnVjdCB2Z2ljX2l0cyAqaXRzLFxcbi0tXFxuYXJjaC9hcm02NC9rdm0vdmdpYy92Z2ljLWl0cy5jLTExNDctXFxuYXJjaC9hcm02NC9rdm0vdmdpYy92Z2ljLWl0cy5jOjExNDg6XFx0ZGV2aWNlID0ga3phbGxvY19vYmooKmRldmljZSwgR0ZQX0tFUk5FTF9BQ0NPVU5UKTtcXG5hcmNoL2FybTY0L2t2bS92Z2ljL3ZnaWMtaXRzLmMtMTE0OS1cXHRpZiAoIWRldmljZSlcXG4tLVxcbmFyY2gvYXJtNjQva3ZtL3ZnaWMvdmdpYy1pdHMuYz0xODU1PXN0YXRpYyBpbnQgdmdpY19pdHNfY3JlYXRlKHN0cnVjdCBrdm1fZGV2aWNlICpkZXYsIHUzMiB0eXBlKVxcbi0tXFxuYXJjaC9hcm02NC9rdm0vdmdpYy92Z2ljLWl0cy5jLTE4NjItXFxuYXJjaC9hcm02NC9rdm0vdmdpYy92Z2ljLWl0cy5jOjE4NjM6XFx0aXRzID0ga3phbGxvY19vYmooc3RydWN0IHZnaWNfaXRzLCBHRlBfS0VSTkVMX0FDQ09VTlQpO1xcbmFyY2gvYXJtNjQva3ZtL3ZnaWMvdmdpYy1pdHMuYy0xODY0LVxcdGlmICghaXRzKVxcbi0tXFxuYXJjaC9hcm02NC9rdm0vdmdpYy92Z2ljLW1taW8tdjMuYz04ODY9c3RhdGljIGludCB2Z2ljX3YzX2FsbG9jX3JlZGlzdF9yZWdpb24oc3RydWN0IGt2bSAqa3ZtLCB1aW50MzJfdCBpbmRleCxcXG4tLVxcbmFyY2gvYXJtNjQva3ZtL3ZnaWMvdmdpYy1tbWlvLXYzLmMtOTMxLVxcbmFyY2gvYXJtNjQva3ZtL3ZnaWMvdmdpYy1tbWlvLXYzLmM6OTMyOlxcdHJkcmVnID0ga3phbGxvY19vYmooKnJkcmVnLCBHRlBfS0VSTkVMX0FDQ09VTlQpO1xcbmFyY2gvYXJtNjQva3ZtL3ZnaWMvdmdpYy1tbWlvLXYzLmMtOTMzLVxcdGlmICghcmRyZWcpXFxuLS1cXG5hcmNoL2FybTY0L2t2bS92Z2ljL3ZnaWMtdjQuYz0yNDI9aW50IHZnaWNfdjRfaW5pdChzdHJ1Y3Qga3ZtICprdm0pXFxuLS1cXG5hcmNoL2FybTY0L2t2bS92Z2ljL3ZnaWMtdjQuYy0yNTgtXFxuYXJjaC9hcm02NC9rdm0vdmdpYy92Z2ljLXY0LmM6MjU5OlxcdGRpc3QtXFx1MDAzZWl0c192bS52cGVzID0ga3phbGxvY19vYmpzKCpkaXN0LVxcdTAwM2VpdHNfdm0udnBlcywgbnJfdmNwdXMsXFxuYXJjaC9hcm02NC9rdm0vdmdpYy92Z2ljLXY0LmMtMjYwLVxcdFxcdFxcdFxcdFxcdCBHRlBfS0VSTkVMX0FDQ09VTlQpO1xcbi0tXFxuYXJjaC9hcm02NC9uZXQvYnBmX2ppdF9jb21wLmM9MjA4MD1zdHJ1Y3QgYnBmX3Byb2cgKmJwZl9pbnRfaml0X2NvbXBpbGUoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9wcm9nICpwcm9nKVxcbi0tXFxuYXJjaC9hcm02NC9uZXQvYnBmX2ppdF9jb21wLmMtMjEwMS1cXHRpZiAoIWppdF9kYXRhKSB7XFxuYXJjaC9hcm02NC9uZXQvYnBmX2ppdF9jb21wLmM6MjEwMjpcXHRcXHRqaXRfZGF0YSA9IGt6YWxsb2Nfb2JqKCpqaXRfZGF0YSk7XFxuYXJjaC9hcm02NC9uZXQvYnBmX2ppdF9jb21wLmMtMjEwMy1cXHRcXHRpZiAoIWppdF9kYXRhKVxcbi0tXFxuYXJjaC9jc2t5L2tlcm5lbC92ZHNvLmM9MTc9c3RhdGljIGludCBfX2luaXQgdmRzb19pbml0KHZvaWQpXFxuLS1cXG5hcmNoL2Nza3kva2VybmVsL3Zkc28uYy0yMi1cXHR2ZHNvX3BhZ2VsaXN0ID1cXG5hcmNoL2Nza3kva2VybmVsL3Zkc28uYzoyMzpcXHRcXHRremFsbG9jX29ianMoc3RydWN0IHBhZ2UgKiwgdmRzb19wYWdlcyk7XFxuYXJjaC9jc2t5L2tlcm5lbC92ZHNvLmMtMjQtXFx0aWYgKHVubGlrZWx5KHZkc29fcGFnZWxpc3QgPT0gTlVMTCkpIHtcXG4tLVxcbmFyY2gvbG9vbmdhcmNoL2tlcm5lbC9zZXR1cC5jPTQ2Nj1zdGF0aWMgaW50IF9faW5pdCBhZGRfbGVnYWN5X2lzYV9pbyhzdHJ1Y3QgZndub2RlX2hhbmRsZSAqZndub2RlLFxcbi0tXFxuYXJjaC9sb29uZ2FyY2gva2VybmVsL3NldHVwLmMtNDcyLVxcbmFyY2gvbG9vbmdhcmNoL2tlcm5lbC9zZXR1cC5jOjQ3MzpcXHRyYW5nZSA9IGt6YWxsb2Nfb2JqKCpyYW5nZSwgR0ZQX0FUT01JQyk7XFxuYXJjaC9sb29uZ2FyY2gva2VybmVsL3NldHVwLmMtNDc0LVxcdGlmICghcmFuZ2UpXFxuLS1cXG5hcmNoL2xvb25nYXJjaC9rZXJuZWwvdmRzby5jPTQ1PXN0YXRpYyBpbnQgX19pbml0IGluaXRfdmRzbyh2b2lkKVxcbi0tXFxuYXJjaC9sb29uZ2FyY2gva2VybmVsL3Zkc28uYy01NS1cXHR2ZHNvX2luZm8uY29kZV9tYXBwaW5nLnBhZ2VzID1cXG5hcmNoL2xvb25nYXJjaC9rZXJuZWwvdmRzby5jOjU2OlxcdFxcdGt6YWxsb2Nfb2JqcyhzdHJ1Y3QgcGFnZSAqLCB2ZHNvX2luZm8uc2l6ZSAvIFBBR0VfU0laRSk7XFxuYXJjaC9sb29uZ2FyY2gva2VybmVsL3Zkc28uYy01Ny1cXG4tLVxcbmFyY2gvbG9vbmdhcmNoL2t2bS9pbnRjL2Vpb2ludGMuYz02MTQ9c3RhdGljIGludCBrdm1fZWlvaW50Y19jcmVhdGUoc3RydWN0IGt2bV9kZXZpY2UgKmRldiwgdTMyIHR5cGUpXFxuLS1cXG5hcmNoL2xvb25nYXJjaC9rdm0vaW50Yy9laW9pbnRjLmMtNjI0LVxcbmFyY2gvbG9vbmdhcmNoL2t2bS9pbnRjL2Vpb2ludGMuYzo2MjU6XFx0cyA9IGt6YWxsb2Nfb2JqKHN0cnVjdCBsb29uZ2FyY2hfZWlvaW50Yyk7XFxuYXJjaC9sb29uZ2FyY2gva3ZtL2ludGMvZWlvaW50Yy5jLTYyNi1cXHRpZiAoIXMpXFxuLS1cXG5hcmNoL2xvb25nYXJjaC9rdm0vaW50Yy9pcGkuYz0zOTQ9c3RhdGljIGludCBrdm1faXBpX2NyZWF0ZShzdHJ1Y3Qga3ZtX2RldmljZSAqZGV2LCB1MzIgdHlwZSlcXG4tLVxcbmFyY2gvbG9vbmdhcmNoL2t2bS9pbnRjL2lwaS5jLTQxMS1cXG5hcmNoL2xvb25nYXJjaC9rdm0vaW50Yy9pcGkuYzo0MTI6XFx0cyA9IGt6YWxsb2Nfb2JqKHN0cnVjdCBsb29uZ2FyY2hfaXBpKTtcXG5hcmNoL2xvb25nYXJjaC9rdm0vaW50Yy9pcGkuYy00MTMtXFx0aWYgKCFzKVxcblxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMVQxNDowMzozMS4xNzAxNTAyMzFaIiwiU2VxIjoxNSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MjU2NjQ2MTg4NjUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHlzaXMgb2YgSW5pdGlhbGl6YXRpb24gaW4gdGhlIHpsMzA3M3ggRHJpdmVyKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duIHN5c3RlbWF0aWNhbGx5LiBJdCBzZWVtcyBsaWtlIHRoZSBjb3JlIGNvbmNlcm4gaXMgYWJvdXQgZW5zdXJpbmcgdmFyaWFibGVzIGFuZCBkYXRhIHN0cnVjdHVyZXMgYXJlIHByb3Blcmx5IGluaXRpYWxpemVkIGJlZm9yZSB1c2UsIGVzcGVjaWFsbHkgd2hlbiBkZWFsaW5nIHdpdGggUFRQIChQcmVjaXNpb24gVGltZSBQcm90b2NvbCkgb3BlcmF0aW9ucyB3aXRoaW4gdGhpcyBgemwzMDczeGAgZHJpdmVyLiBJJ20gZm9jdXNpbmcgb24gcG90ZW50aWFsIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzLlxuXG5GaXJzdCwgSSBzZWUgdGhlIHNoaWZ0IHRvIHVzaW5nIGBremFsbG9jX29iamAgYW5kIGBremFsbG9jX29ianNgIGtlcm5lbCBtYWNyb3MuIFRoYXQncyBnb29kOyB0aGVzZSBhcmUgbm93IHRoZSBwcmVmZXJyZWQgbWV0aG9kcyB0byBhbGxvY2F0ZSBhbmQgemVybyBtZW1vcnkuIFNwZWNpZmljYWxseSwgYWxsb2NhdGluZyBhbmQgemVyb2luZyB0aGUgYHpsZHBsbGAgc3RydWN0IHdpdGggYGt6YWxsb2Nfb2JqKCp6bGRwbGwpYCBpcyBhIHNvbGlkIHN0YXJ0IGZvciBhdm9pZGluZyB1bmluaXRpYWxpemVkIHZhbHVlcy5cblxuTW92aW5nIHRocm91Z2ggdGhlIGNvZGUsIEkgZXhhbWluZWQgdGhlIGB6bDMwNzN4X2RwbGxfcHRwX3JlZ2lzdGVyYCBmdW5jdGlvbiBhbmQgdGhlIHVzYWdlIG9mIGB6bGRwbGwtXHUwMDNlcHRwX2luZm9gLiBUaGlzIHN0cnVjdCBnZXRzIGluaXRpYWxpemVkIGJ5IGEgY29weSBmcm9tIGEgYHN0YXRpYyBjb25zdGAgc3RydWN0dXJlLCBgemwzMDczeF9kcGxsX3B0cF9jbG9ja19pbmZvYC4gQmVjYXVzZSBpdCdzIGBzdGF0aWMgY29uc3RgLCB0aGUgY29tcGlsZXIgaGFuZGxlcyB0aGUgemVyby1pbml0aWFsaXphdGlvbiBvZiBhbGwgdW5pbml0aWFsaXplZCBmaWVsZHMsIGVuc3VyaW5nIHRoYXQgdGhlIFBUUCBpbmZvcm1hdGlvbiBpcyBmdWxseSBpbml0aWFsaXplZCBiZWZvcmUgdXNlLiBUaGUgYHNucHJpbnRmYCBmdW5jdGlvbiB3aWxsIHdyaXRlIHRvIHRoZSBgbmFtZWAgZmllbGQsIGJ1dCBzaW5jZSB0aGUgcmVzdCBpcyBhbHJlYWR5IHplcm9lZCwgdGhlcmUgYXJlIG5vIHVuaW5pdGlhbGl6ZWQgcmVhZHMuXG5cblRoZW4gSSBjb25zaWRlcmVkIGB6bDMwNzN4X2NoYW5fdG9kX3JlYWRgLiBUaGUgYHRzYCBzdHJ1Y3QsIHVzZWQgdG8gc3RvcmUgdGhlIHJlYWQgdGltZSwgc2VlbXMgdG8gYmUgZnVsbHkgaW5pdGlhbGl6ZWQgb24gYSBzdWNjZXNzZnVsIHJldHVybi4gSW4gdGhlIGV2ZW50IG9mIGFuIGVycm9yLCBpdCBpcyByZXR1cm5lZCwgYW5kIHNpbmNlIHRoZSBQVFAgc3Vic3lzdGVtIHdpbGwgbm90IHVzZSBpdCwgdGhlcmUgYXJlIG5vIHVuaW5pdGlhbGl6ZWQgcmVhZHMuXG5cbkluIGB6bDMwNzN4X2RwbGxfcHRwX2FkanRpbWVfcGhhc2Vfc3RlcGAgSSBzYXcgdGhhdCB0aGUgYHN5bnRoX21hc2tgIGFycmF5IGlzIGluaXRpYWxpemVkIHRvIHplcm8sIHdoaWNoIGlzIGEgZ29vZCBwcmFjdGljZS5cblxuTmV4dCwgSSBsb29rZWQgYXQgaG93IGB6bDMwNzN4X2RwbGxfcHRwX2FkanRpbWVgIGhhbmRsZXMgYHRzYC4gVGhlIHJlbGV2YW50IGNvZGUgaW5kaWNhdGVzIHRoYXQgYHRzYCBpcyBmdWxseSBpbml0aWFsaXplZCBiZWZvcmUgaXQncyBwYXNzZWQgb24gdG8gb3RoZXIgZnVuY3Rpb25zLlxuXG5gemwzMDczeF9jaGFuX3RvZF9hZGp1c3RgIGNhbGxzIGB6bDMwNzN4X2NoYW5fdG9kX3JlYWRgLCBhbmQgaXQgYXBwZWFycyB0aGF0IGB0c19uZXh0YCBhbmQgYHRzX2N1cmAgd2lsbCBhbHNvIGJlIGZ1bGx5IGluaXRpYWxpemVkIGR1ZSB0byB0aGUgcmV0dXJuIHZhbHVlIG9mIGB6bDMwNzN4X2NoYW5fdG9kX3JlYWRgIGluIGNhc2Ugb2Ygc3VjY2Vzcy5cblxuRm9yIGB6bDMwNzN4X2NoYW5fdG9kX3dyaXRlYCwgSSBjb25maXJtZWQgdGhhdCB0aGUgZmllbGRzIG9mIHRoZSBpbnB1dCBgdHNgIGFyZSBwcm9wZXJseSBwb3B1bGF0ZWQgYmVmb3JlIGJlaW5nIHVzZWQuXG5cblRoZW4gSSBhbmFseXplZCBgemwzMDczeF9jaGFuX2RmX29mZnNldF9zZXRgLCBgemwzMDczeF9jaGFuX3RpZV93cml0ZWAsIGB6bDMwNzN4X2NoYW5fcGhhc2Vfc3RlcGAsIGFuZCBgemwzMDczeF9kZXZfc3RhdGVfZmV0Y2hgLiBJdCBzZWVtcyB0aGF0IHRoZXNlIGZ1bmN0aW9ucyBhbGwgdXNlIGluaXRpYWxpemVkIGRhdGEuXG5cbkZpbmFsbHksIHRoZSBhbmFseXNpcyBvZiBgemwzMDczeF9kcGxsX3B0cF9hZGpmaW5lYCBhbmQgYHpsMzA3M3hfZHBsbF9wdHBfYWRqcGhhc2VgIGRpZCBub3QgcHJlc2VudCBhbnkgb2J2aW91cyBjYXNlcyBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZS5cblxuSW4gc3VtbWFyeSwgdGhlcmUgaXMgbm8gZXZpZGVuY2Ugb2YgdW5pbml0aWFsaXplZCByZWFkcyBiZWluZyBpbnRyb2R1Y2VkIGJ5IHRoaXMgcGF0Y2guIFRoZSBkcml2ZXIgdXNlcyBhcHByb3ByaWF0ZSBpbml0aWFsaXphdGlvbiB0ZWNobmlxdWVzLCBsaWtlIGBremFsbG9jX29iamAsIGFuZCB0aGUgUFRQIHN1YnN5c3RlbSBzZWVtcyB0byBoYW5kbGUgZGF0YSB0cmFuc2ZlciB0byB1c2Vyc3BhY2Ugc2FmZWx5LiBUaGVyZWZvcmUsIEknbSBjb25maWRlbnQgaW4gc2V0dGluZyBgTmVlZHNLTVNBTj1mYWxzZWAuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjMxOTE3LCJPdXRwdXRUb2tlbnMiOjIyNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI2OTksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTFUMTQ6MDM6NTYuODM0NzcxMTk2WiIsIlNlcSI6MTYsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTgzMDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRzIFBUUCBjbG9jayBzdXBwb3J0IHRvIHRoZSBNaWNyb2NoaXAgQXp1cml0ZSBEUExML1BUUC9TeW5jRSBkZXZpY2VzIGRyaXZlci4gSXQgaW50cm9kdWNlcyBmdW5jdGlvbnMgdG8gcmVhZC93cml0ZSBUaW1lIG9mIERheSAoVG9EKSwgYWRqdXN0IHBoYXNlLCBhZGp1c3QgZnJlcXVlbmN5LCBhbmQgcmVnaXN0ZXIgYSBQVFAgY2xvY2sgZGV2aWNlLiBUaGUgZHJpdmVyIGludGVyYWN0cyB3aXRoIHRoZSBQVFAgc3Vic3lzdGVtIGJ5IHByb3ZpZGluZyBjYWxsYmFja3MgKGBnZXR0aW1leDY0YCwgYHNldHRpbWU2NGAsIGBhZGp0aW1lYCwgYGFkamZpbmVgLCBgYWRqcGhhc2VgKS4gQWxsIHN0cnVjdHVyZXMgYWxsb2NhdGVkIGR5bmFtaWNhbGx5IGFyZSB6ZXJvLWluaXRpYWxpemVkIHVzaW5nIGBremFsbG9jX29iamAuIFRoZSBgcHRwX2Nsb2NrX2luZm9gIHN0cnVjdHVyZSBpcyBjb3BpZWQgZnJvbSBhIHN0YXRpYyBjb25zdCB0ZW1wbGF0ZSwgZW5zdXJpbmcgYWxsIHVuaW5pdGlhbGl6ZWQgZmllbGRzIGFyZSB6ZXJvZWQgYnkgdGhlIGNvbXBpbGVyIGJlZm9yZSBgc25wcmludGZgIG1vZGlmaWVzIHRoZSBgbmFtZWAgZmllbGQuIFRoZSBgc3RydWN0IHRpbWVzcGVjNjRgIHBvcHVsYXRlZCBieSB0aGUgZHJpdmVyIGlzIGZ1bGx5IGluaXRpYWxpemVkIG9uIHN1Y2Nlc3MsIGFuZCBlcnJvcnMgYXJlIHByb3Blcmx5IHByb3BhZ2F0ZWQgdG8gdGhlIFBUUCBzdWJzeXN0ZW0sIHByZXZlbnRpbmcgdW5pbml0aWFsaXplZCBkYXRhIGZyb20gYmVpbmcgdXNlZCBvciBjb3BpZWQgdG8gdXNlcnNwYWNlLiBObyBuZXcgdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3Mgb3IgaW5mby1sZWFrcyBhcmUgaW50cm9kdWNlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRzIFBUUCBjbG9jayBzdXBwb3J0IHRvIHRoZSBNaWNyb2NoaXAgQXp1cml0ZSBEUExML1BUUC9TeW5jRSBkZXZpY2VzIGRyaXZlci4gSXQgaW50cm9kdWNlcyBmdW5jdGlvbnMgdG8gcmVhZC93cml0ZSBUaW1lIG9mIERheSAoVG9EKSwgYWRqdXN0IHBoYXNlLCBhZGp1c3QgZnJlcXVlbmN5LCBhbmQgcmVnaXN0ZXIgYSBQVFAgY2xvY2sgZGV2aWNlLiBUaGUgZHJpdmVyIGludGVyYWN0cyB3aXRoIHRoZSBQVFAgc3Vic3lzdGVtIGJ5IHByb3ZpZGluZyBjYWxsYmFja3MgKGBnZXR0aW1leDY0YCwgYHNldHRpbWU2NGAsIGBhZGp0aW1lYCwgYGFkamZpbmVgLCBgYWRqcGhhc2VgKS4gQWxsIHN0cnVjdHVyZXMgYWxsb2NhdGVkIGR5bmFtaWNhbGx5IGFyZSB6ZXJvLWluaXRpYWxpemVkIHVzaW5nIGBremFsbG9jX29iamAuIFRoZSBgcHRwX2Nsb2NrX2luZm9gIHN0cnVjdHVyZSBpcyBjb3BpZWQgZnJvbSBhIHN0YXRpYyBjb25zdCB0ZW1wbGF0ZSwgZW5zdXJpbmcgYWxsIHVuaW5pdGlhbGl6ZWQgZmllbGRzIGFyZSB6ZXJvZWQgYnkgdGhlIGNvbXBpbGVyIGJlZm9yZSBgc25wcmludGZgIG1vZGlmaWVzIHRoZSBgbmFtZWAgZmllbGQuIFRoZSBgc3RydWN0IHRpbWVzcGVjNjRgIHBvcHVsYXRlZCBieSB0aGUgZHJpdmVyIGlzIGZ1bGx5IGluaXRpYWxpemVkIG9uIHN1Y2Nlc3MsIGFuZCBlcnJvcnMgYXJlIHByb3Blcmx5IHByb3BhZ2F0ZWQgdG8gdGhlIFBUUCBzdWJzeXN0ZW0sIHByZXZlbnRpbmcgdW5pbml0aWFsaXplZCBkYXRhIGZyb20gYmVpbmcgdXNlZCBvciBjb3BpZWQgdG8gdXNlcnNwYWNlLiBObyBuZXcgdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3Mgb3IgaW5mby1sZWFrcyBhcmUgaW50cm9kdWNlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+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-workflowhft6t[1] Phase: Succeeded StartedAt: 2026-08-11 14:04:08 +0000 UTC FinishedAt: 2026-08-11 14:04:08 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhft6t[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-08-11 14:04:08 +0000 UTC FinishedAt: 2026-08-11 14:04:08 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhft6t[2] Phase: Running StartedAt: 2026-08-11 14:04:08 +0000 UTC FinishedAt: 0001-01-01 00:00:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhft6t[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d67e5dbda22604d0fcde32fce58c65f88676e676","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZL3073X_I2C","ZL3073X_SPI","PTP_1588_CLOCK"],"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":["zl3073x_chan_tod_read","zl3073x_chan_tod_write","zl3073x_chan_tod_adjust","zl3073x_chan_df_offset_set","zl3073x_chan_tie_write","zl3073x_chan_phase_step","zl3073x_dpll_ptp_gettimex64","zl3073x_dpll_ptp_settime64","zl3073x_dpll_ptp_adjtime","zl3073x_dpll_ptp_adjfine","zl3073x_dpll_ptp_adjphase"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d67e5dbda22604d0fcde32fce58c65f88676e676","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZL3073X_I2C","ZL3073X_SPI","PTP_1588_CLOCK"],"series_id":"e78c7db7-e9fa-4fc7-b83b-1cbfdd0ee42b","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN) Phase: Running StartedAt: 2026-08-11 14:04:08 +0000 UTC FinishedAt: 0001-01-01 00:00:00 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"d67e5dbda22604d0fcde32fce58c65f88676e676","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZL3073X_I2C","ZL3073X_SPI","PTP_1588_CLOCK"],"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":["zl3073x_chan_tod_read","zl3073x_chan_tod_write","zl3073x_chan_tod_adjust","zl3073x_chan_df_offset_set","zl3073x_chan_tie_write","zl3073x_chan_phase_step","zl3073x_dpll_ptp_gettimex64","zl3073x_dpll_ptp_settime64","zl3073x_dpll_ptp_adjtime","zl3073x_dpll_ptp_adjfine","zl3073x_dpll_ptp_adjphase"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"d67e5dbda22604d0fcde32fce58c65f88676e676","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZL3073X_I2C","ZL3073X_SPI","PTP_1588_CLOCK"],"series_id":"e78c7db7-e9fa-4fc7-b83b-1cbfdd0ee42b","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-workflowhft6t[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d67e5dbda22604d0fcde32fce58c65f88676e676","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZL3073X_I2C","ZL3073X_SPI","PTP_1588_CLOCK"],"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":["zl3073x_chan_tod_read","zl3073x_chan_tod_write","zl3073x_chan_tod_adjust","zl3073x_chan_df_offset_set","zl3073x_chan_tie_write","zl3073x_chan_phase_step","zl3073x_dpll_ptp_gettimex64","zl3073x_dpll_ptp_settime64","zl3073x_dpll_ptp_adjtime","zl3073x_dpll_ptp_adjfine","zl3073x_dpll_ptp_adjphase"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d67e5dbda22604d0fcde32fce58c65f88676e676","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZL3073X_I2C","ZL3073X_SPI","PTP_1588_CLOCK"],"series_id":"e78c7db7-e9fa-4fc7-b83b-1cbfdd0ee42b","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-08-11 14:04:08 +0000 UTC FinishedAt: 2026-08-11 14:04:18 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhft6t[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d67e5dbda22604d0fcde32fce58c65f88676e676","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZL3073X_I2C","ZL3073X_SPI","PTP_1588_CLOCK"],"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":["zl3073x_chan_tod_read","zl3073x_chan_tod_write","zl3073x_chan_tod_adjust","zl3073x_chan_df_offset_set","zl3073x_chan_tie_write","zl3073x_chan_phase_step","zl3073x_dpll_ptp_gettimex64","zl3073x_dpll_ptp_settime64","zl3073x_dpll_ptp_adjtime","zl3073x_dpll_ptp_adjfine","zl3073x_dpll_ptp_adjphase"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d67e5dbda22604d0fcde32fce58c65f88676e676","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZL3073X_I2C","ZL3073X_SPI","PTP_1588_CLOCK"],"series_id":"e78c7db7-e9fa-4fc7-b83b-1cbfdd0ee42b","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-08-11 14:04:08 +0000 UTC FinishedAt: 2026-08-11 14:04:13 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"d67e5dbda22604d0fcde32fce58c65f88676e676","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZL3073X_I2C","ZL3073X_SPI","PTP_1588_CLOCK"],"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-workflowhft6t/series-workflowhft6t-convert-artifact-348986128/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowhft6t[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d67e5dbda22604d0fcde32fce58c65f88676e676","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZL3073X_I2C","ZL3073X_SPI","PTP_1588_CLOCK"],"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":["zl3073x_chan_tod_read","zl3073x_chan_tod_write","zl3073x_chan_tod_adjust","zl3073x_chan_df_offset_set","zl3073x_chan_tie_write","zl3073x_chan_phase_step","zl3073x_dpll_ptp_gettimex64","zl3073x_dpll_ptp_settime64","zl3073x_dpll_ptp_adjtime","zl3073x_dpll_ptp_adjfine","zl3073x_dpll_ptp_adjphase"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d67e5dbda22604d0fcde32fce58c65f88676e676","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZL3073X_I2C","ZL3073X_SPI","PTP_1588_CLOCK"],"series_id":"e78c7db7-e9fa-4fc7-b83b-1cbfdd0ee42b","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-08-11 14:04:18 +0000 UTC FinishedAt: 2026-08-11 14:25:43 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhft6t[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d67e5dbda22604d0fcde32fce58c65f88676e676","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZL3073X_I2C","ZL3073X_SPI","PTP_1588_CLOCK"],"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":["zl3073x_chan_tod_read","zl3073x_chan_tod_write","zl3073x_chan_tod_adjust","zl3073x_chan_df_offset_set","zl3073x_chan_tie_write","zl3073x_chan_phase_step","zl3073x_dpll_ptp_gettimex64","zl3073x_dpll_ptp_settime64","zl3073x_dpll_ptp_adjtime","zl3073x_dpll_ptp_adjfine","zl3073x_dpll_ptp_adjphase"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d67e5dbda22604d0fcde32fce58c65f88676e676","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZL3073X_I2C","ZL3073X_SPI","PTP_1588_CLOCK"],"series_id":"e78c7db7-e9fa-4fc7-b83b-1cbfdd0ee42b","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-08-11 14:04:18 +0000 UTC FinishedAt: 2026-08-11 14:25:43 +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:*6d7622fd-160a-42ce-a70f-d60c3bcce81d,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-workflowhft6t/series-workflowhft6t-convert-artifact-348986128/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": "85557004-2d91-4748-a6dd-996284ba6420", "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-workflowhft6t/series-workflowhft6t-build-action-192296854/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowhft6t[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d67e5dbda22604d0fcde32fce58c65f88676e676","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZL3073X_I2C","ZL3073X_SPI","PTP_1588_CLOCK"],"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":["zl3073x_chan_tod_read","zl3073x_chan_tod_write","zl3073x_chan_tod_adjust","zl3073x_chan_df_offset_set","zl3073x_chan_tie_write","zl3073x_chan_phase_step","zl3073x_dpll_ptp_gettimex64","zl3073x_dpll_ptp_settime64","zl3073x_dpll_ptp_adjtime","zl3073x_dpll_ptp_adjfine","zl3073x_dpll_ptp_adjphase"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d67e5dbda22604d0fcde32fce58c65f88676e676","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZL3073X_I2C","ZL3073X_SPI","PTP_1588_CLOCK"],"series_id":"e78c7db7-e9fa-4fc7-b83b-1cbfdd0ee42b","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-08-11 14:04:18 +0000 UTC FinishedAt: 2026-08-11 14:25:19 +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:*6d7622fd-160a-42ce-a70f-d60c3bcce81d,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-workflowhft6t/series-workflowhft6t-convert-artifact-348986128/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": "85557004-2d91-4748-a6dd-996284ba6420", "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-workflowhft6t/series-workflowhft6t-build-action-192296854/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowhft6t[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d67e5dbda22604d0fcde32fce58c65f88676e676","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZL3073X_I2C","ZL3073X_SPI","PTP_1588_CLOCK"],"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":["zl3073x_chan_tod_read","zl3073x_chan_tod_write","zl3073x_chan_tod_adjust","zl3073x_chan_df_offset_set","zl3073x_chan_tie_write","zl3073x_chan_phase_step","zl3073x_dpll_ptp_gettimex64","zl3073x_dpll_ptp_settime64","zl3073x_dpll_ptp_adjtime","zl3073x_dpll_ptp_adjfine","zl3073x_dpll_ptp_adjphase"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d67e5dbda22604d0fcde32fce58c65f88676e676","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZL3073X_I2C","ZL3073X_SPI","PTP_1588_CLOCK"],"series_id":"e78c7db7-e9fa-4fc7-b83b-1cbfdd0ee42b","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-08-11 14:25:43 +0000 UTC FinishedAt: 2026-08-11 14:25:43 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhft6t[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d67e5dbda22604d0fcde32fce58c65f88676e676","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZL3073X_I2C","ZL3073X_SPI","PTP_1588_CLOCK"],"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":["zl3073x_chan_tod_read","zl3073x_chan_tod_write","zl3073x_chan_tod_adjust","zl3073x_chan_df_offset_set","zl3073x_chan_tie_write","zl3073x_chan_phase_step","zl3073x_dpll_ptp_gettimex64","zl3073x_dpll_ptp_settime64","zl3073x_dpll_ptp_adjtime","zl3073x_dpll_ptp_adjfine","zl3073x_dpll_ptp_adjphase"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d67e5dbda22604d0fcde32fce58c65f88676e676","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZL3073X_I2C","ZL3073X_SPI","PTP_1588_CLOCK"],"series_id":"e78c7db7-e9fa-4fc7-b83b-1cbfdd0ee42b","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-08-11 14:25:43 +0000 UTC FinishedAt: 2026-08-11 14:25:43 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhft6t[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d67e5dbda22604d0fcde32fce58c65f88676e676","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZL3073X_I2C","ZL3073X_SPI","PTP_1588_CLOCK"],"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":["zl3073x_chan_tod_read","zl3073x_chan_tod_write","zl3073x_chan_tod_adjust","zl3073x_chan_df_offset_set","zl3073x_chan_tie_write","zl3073x_chan_phase_step","zl3073x_dpll_ptp_gettimex64","zl3073x_dpll_ptp_settime64","zl3073x_dpll_ptp_adjtime","zl3073x_dpll_ptp_adjfine","zl3073x_dpll_ptp_adjphase"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d67e5dbda22604d0fcde32fce58c65f88676e676","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZL3073X_I2C","ZL3073X_SPI","PTP_1588_CLOCK"],"series_id":"e78c7db7-e9fa-4fc7-b83b-1cbfdd0ee42b","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-08-11 14:25:43 +0000 UTC FinishedAt: 2026-08-11 14:25:53 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhft6t[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d67e5dbda22604d0fcde32fce58c65f88676e676","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZL3073X_I2C","ZL3073X_SPI","PTP_1588_CLOCK"],"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":["zl3073x_chan_tod_read","zl3073x_chan_tod_write","zl3073x_chan_tod_adjust","zl3073x_chan_df_offset_set","zl3073x_chan_tie_write","zl3073x_chan_phase_step","zl3073x_dpll_ptp_gettimex64","zl3073x_dpll_ptp_settime64","zl3073x_dpll_ptp_adjtime","zl3073x_dpll_ptp_adjfine","zl3073x_dpll_ptp_adjphase"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d67e5dbda22604d0fcde32fce58c65f88676e676","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZL3073X_I2C","ZL3073X_SPI","PTP_1588_CLOCK"],"series_id":"e78c7db7-e9fa-4fc7-b83b-1cbfdd0ee42b","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-08-11 14:25:43 +0000 UTC FinishedAt: 2026-08-11 14:25:50 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"d67e5dbda22604d0fcde32fce58c65f88676e676","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZL3073X_I2C","ZL3073X_SPI","PTP_1588_CLOCK"],"series_id":"e78c7db7-e9fa-4fc7-b83b-1cbfdd0ee42b","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-workflowhft6t/series-workflowhft6t-convert-artifact-647140727/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowhft6t[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d67e5dbda22604d0fcde32fce58c65f88676e676","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZL3073X_I2C","ZL3073X_SPI","PTP_1588_CLOCK"],"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":["zl3073x_chan_tod_read","zl3073x_chan_tod_write","zl3073x_chan_tod_adjust","zl3073x_chan_df_offset_set","zl3073x_chan_tie_write","zl3073x_chan_phase_step","zl3073x_dpll_ptp_gettimex64","zl3073x_dpll_ptp_settime64","zl3073x_dpll_ptp_adjtime","zl3073x_dpll_ptp_adjfine","zl3073x_dpll_ptp_adjphase"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d67e5dbda22604d0fcde32fce58c65f88676e676","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZL3073X_I2C","ZL3073X_SPI","PTP_1588_CLOCK"],"series_id":"e78c7db7-e9fa-4fc7-b83b-1cbfdd0ee42b","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: Running StartedAt: 2026-08-11 14:25:53 +0000 UTC FinishedAt: 0001-01-01 00:00:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhft6t[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d67e5dbda22604d0fcde32fce58c65f88676e676","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZL3073X_I2C","ZL3073X_SPI","PTP_1588_CLOCK"],"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":["zl3073x_chan_tod_read","zl3073x_chan_tod_write","zl3073x_chan_tod_adjust","zl3073x_chan_df_offset_set","zl3073x_chan_tie_write","zl3073x_chan_phase_step","zl3073x_dpll_ptp_gettimex64","zl3073x_dpll_ptp_settime64","zl3073x_dpll_ptp_adjtime","zl3073x_dpll_ptp_adjfine","zl3073x_dpll_ptp_adjphase"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d67e5dbda22604d0fcde32fce58c65f88676e676","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZL3073X_I2C","ZL3073X_SPI","PTP_1588_CLOCK"],"series_id":"e78c7db7-e9fa-4fc7-b83b-1cbfdd0ee42b","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: Running StartedAt: 2026-08-11 14:25:53 +0000 UTC FinishedAt: 0001-01-01 00:00:00 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*85557004-2d91-4748-a6dd-996284ba6420,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-workflowhft6t/series-workflowhft6t-build-action-192296854/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil